summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Master/xemtex/doc/ghostscript/API.htm671
-rw-r--r--Master/xemtex/doc/ghostscript/C-style.htm1588
-rw-r--r--Master/xemtex/doc/ghostscript/CJK.htm497
-rw-r--r--Master/xemtex/doc/ghostscript/CJKTTCID.htm409
-rw-r--r--Master/xemtex/doc/ghostscript/COPYING340
-rw-r--r--Master/xemtex/doc/ghostscript/COPYING.LGPL510
-rw-r--r--Master/xemtex/doc/ghostscript/Changes.htm288
-rw-r--r--Master/xemtex/doc/ghostscript/Current.htm272
-rw-r--r--Master/xemtex/doc/ghostscript/DLL.htm703
-rw-r--r--Master/xemtex/doc/ghostscript/Develop.htm4327
-rw-r--r--Master/xemtex/doc/ghostscript/Devices.htm6046
-rw-r--r--Master/xemtex/doc/ghostscript/Drivers.htm2538
-rw-r--r--Master/xemtex/doc/ghostscript/Fonts.htm1288
-rw-r--r--Master/xemtex/doc/ghostscript/Helpers.htm303
-rw-r--r--Master/xemtex/doc/ghostscript/Hershey.htm305
-rw-r--r--Master/xemtex/doc/ghostscript/History1.htm436
-rw-r--r--Master/xemtex/doc/ghostscript/History2.htm5231
-rw-r--r--Master/xemtex/doc/ghostscript/History3.htm8597
-rw-r--r--Master/xemtex/doc/ghostscript/History4.htm3980
-rw-r--r--Master/xemtex/doc/ghostscript/History5.htm13454
-rw-r--r--Master/xemtex/doc/ghostscript/History6.htm7293
-rw-r--r--Master/xemtex/doc/ghostscript/History7.htm5109
-rw-r--r--Master/xemtex/doc/ghostscript/Htmstyle.htm778
-rw-r--r--Master/xemtex/doc/ghostscript/Humor.htm99
-rw-r--r--Master/xemtex/doc/ghostscript/Install.htm540
-rw-r--r--Master/xemtex/doc/ghostscript/Issues.htm502
-rw-r--r--Master/xemtex/doc/ghostscript/Language.htm1897
-rw-r--r--Master/xemtex/doc/ghostscript/Lib.htm491
-rw-r--r--Master/xemtex/doc/ghostscript/Maintain.htm210
-rw-r--r--Master/xemtex/doc/ghostscript/Make.htm2766
-rw-r--r--Master/xemtex/doc/ghostscript/New-user.htm592
-rw-r--r--Master/xemtex/doc/ghostscript/News.htm96
-rw-r--r--Master/xemtex/doc/ghostscript/Projects.htm629
-rw-r--r--Master/xemtex/doc/ghostscript/Ps-style.htm514
-rw-r--r--Master/xemtex/doc/ghostscript/Ps2epsi.htm154
-rw-r--r--Master/xemtex/doc/ghostscript/Ps2pdf.htm502
-rw-r--r--Master/xemtex/doc/ghostscript/Psfiles.htm832
-rw-r--r--Master/xemtex/doc/ghostscript/README391
-rw-r--r--Master/xemtex/doc/ghostscript/Readme.htm634
-rw-r--r--Master/xemtex/doc/ghostscript/Release.htm769
-rw-r--r--Master/xemtex/doc/ghostscript/Source.htm383
-rw-r--r--Master/xemtex/doc/ghostscript/Unix-lpr.htm267
-rw-r--r--Master/xemtex/doc/ghostscript/Use.htm3036
-rw-r--r--Master/xemtex/doc/ghostscript/Xfonts.htm265
-rw-r--r--Master/xemtex/doc/ghostscript/examples/alphabet.ps62
-rw-r--r--Master/xemtex/doc/ghostscript/examples/annots.pdfbin0 -> 500156 bytes
-rw-r--r--Master/xemtex/doc/ghostscript/examples/cjk/all_ac1.ps221
-rw-r--r--Master/xemtex/doc/ghostscript/examples/cjk/all_ag1.ps218
-rw-r--r--Master/xemtex/doc/ghostscript/examples/cjk/all_aj1.ps218
-rw-r--r--Master/xemtex/doc/ghostscript/examples/cjk/all_aj2.ps214
-rw-r--r--Master/xemtex/doc/ghostscript/examples/cjk/all_ak1.ps215
-rw-r--r--Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ac.ps120
-rw-r--r--Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ag.ps120
-rw-r--r--Master/xemtex/doc/ghostscript/examples/cjk/gscjk_aj.ps114
-rw-r--r--Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ak.ps116
-rw-r--r--Master/xemtex/doc/ghostscript/examples/cjk/iso2022.ps1256
-rw-r--r--Master/xemtex/doc/ghostscript/examples/colorcir.ps125
-rw-r--r--Master/xemtex/doc/ghostscript/examples/doretree.ps2485
-rw-r--r--Master/xemtex/doc/ghostscript/examples/escher.ps384
-rw-r--r--Master/xemtex/doc/ghostscript/examples/golfer.ps1401
-rw-r--r--Master/xemtex/doc/ghostscript/examples/grayalph.ps65
-rw-r--r--Master/xemtex/doc/ghostscript/examples/ridt91.eps135
-rw-r--r--Master/xemtex/doc/ghostscript/examples/snowflak.ps93
-rw-r--r--Master/xemtex/doc/ghostscript/examples/tiger.ps2737
-rw-r--r--Master/xemtex/doc/ghostscript/examples/vasarely.ps588
-rw-r--r--Master/xemtex/doc/ghostscript/examples/waterfal.ps80
-rw-r--r--Master/xemtex/doc/ghostscript/gs-vms.hlp293
-rw-r--r--Master/xemtex/doc/ghostscript/gs.css73
-rw-r--r--Master/xemtex/doc/ghostscript/gsdoc.el701
-rw-r--r--Master/xemtex/doc/ghostscript/index.html14
-rw-r--r--Master/xemtex/gsfonts/a010013l.afm1341
-rw-r--r--Master/xemtex/gsfonts/a010013l.pfbbin0 -> 34871 bytes
-rw-r--r--Master/xemtex/gsfonts/a010013l.pfmbin0 -> 4679 bytes
-rw-r--r--Master/xemtex/gsfonts/a010015l.afm1341
-rw-r--r--Master/xemtex/gsfonts/a010015l.pfbbin0 -> 36354 bytes
-rw-r--r--Master/xemtex/gsfonts/a010015l.pfmbin0 -> 4682 bytes
-rw-r--r--Master/xemtex/gsfonts/a010033l.afm1341
-rw-r--r--Master/xemtex/gsfonts/a010033l.pfbbin0 -> 35156 bytes
-rw-r--r--Master/xemtex/gsfonts/a010033l.pfmbin0 -> 4683 bytes
-rw-r--r--Master/xemtex/gsfonts/a010035l.afm1341
-rw-r--r--Master/xemtex/gsfonts/a010035l.pfbbin0 -> 36128 bytes
-rw-r--r--Master/xemtex/gsfonts/a010035l.pfmbin0 -> 4686 bytes
-rw-r--r--Master/xemtex/gsfonts/b018012l.afm1341
-rw-r--r--Master/xemtex/gsfonts/b018012l.pfbbin0 -> 44934 bytes
-rw-r--r--Master/xemtex/gsfonts/b018012l.pfmbin0 -> 4681 bytes
-rw-r--r--Master/xemtex/gsfonts/b018015l.afm1341
-rw-r--r--Master/xemtex/gsfonts/b018015l.pfbbin0 -> 44768 bytes
-rw-r--r--Master/xemtex/gsfonts/b018015l.pfmbin0 -> 4685 bytes
-rw-r--r--Master/xemtex/gsfonts/b018032l.afm1341
-rw-r--r--Master/xemtex/gsfonts/b018032l.pfbbin0 -> 44162 bytes
-rw-r--r--Master/xemtex/gsfonts/b018032l.pfmbin0 -> 4685 bytes
-rw-r--r--Master/xemtex/gsfonts/b018035l.afm1341
-rw-r--r--Master/xemtex/gsfonts/b018035l.pfbbin0 -> 44950 bytes
-rw-r--r--Master/xemtex/gsfonts/b018035l.pfmbin0 -> 4689 bytes
-rw-r--r--Master/xemtex/gsfonts/c059013l.afm1341
-rw-r--r--Master/xemtex/gsfonts/c059013l.pfbbin0 -> 46830 bytes
-rw-r--r--Master/xemtex/gsfonts/c059013l.pfmbin0 -> 4681 bytes
-rw-r--r--Master/xemtex/gsfonts/c059016l.afm1341
-rw-r--r--Master/xemtex/gsfonts/c059016l.pfbbin0 -> 48864 bytes
-rw-r--r--Master/xemtex/gsfonts/c059016l.pfmbin0 -> 4681 bytes
-rw-r--r--Master/xemtex/gsfonts/c059033l.afm1341
-rw-r--r--Master/xemtex/gsfonts/c059033l.pfbbin0 -> 45832 bytes
-rw-r--r--Master/xemtex/gsfonts/c059033l.pfmbin0 -> 4681 bytes
-rw-r--r--Master/xemtex/gsfonts/c059036l.afm1341
-rw-r--r--Master/xemtex/gsfonts/c059036l.pfbbin0 -> 47083 bytes
-rw-r--r--Master/xemtex/gsfonts/c059036l.pfmbin0 -> 4685 bytes
-rw-r--r--Master/xemtex/gsfonts/d050000l.afm226
-rw-r--r--Master/xemtex/gsfonts/d050000l.pfbbin0 -> 45955 bytes
-rw-r--r--Master/xemtex/gsfonts/d050000l.pfmbin0 -> 674 bytes
-rw-r--r--Master/xemtex/gsfonts/fonts.dir44
-rw-r--r--Master/xemtex/gsfonts/fonts.scale44
-rw-r--r--Master/xemtex/gsfonts/n019003l.afm1341
-rw-r--r--Master/xemtex/gsfonts/n019003l.pfbbin0 -> 36026 bytes
-rw-r--r--Master/xemtex/gsfonts/n019003l.pfmbin0 -> 4679 bytes
-rw-r--r--Master/xemtex/gsfonts/n019004l.afm1341
-rw-r--r--Master/xemtex/gsfonts/n019004l.pfbbin0 -> 35941 bytes
-rw-r--r--Master/xemtex/gsfonts/n019004l.pfmbin0 -> 4679 bytes
-rw-r--r--Master/xemtex/gsfonts/n019023l.afm1341
-rw-r--r--Master/xemtex/gsfonts/n019023l.pfbbin0 -> 38314 bytes
-rw-r--r--Master/xemtex/gsfonts/n019023l.pfmbin0 -> 4683 bytes
-rw-r--r--Master/xemtex/gsfonts/n019024l.afm1341
-rw-r--r--Master/xemtex/gsfonts/n019024l.pfbbin0 -> 39013 bytes
-rw-r--r--Master/xemtex/gsfonts/n019024l.pfmbin0 -> 4683 bytes
-rw-r--r--Master/xemtex/gsfonts/n019043l.afm1341
-rw-r--r--Master/xemtex/gsfonts/n019043l.pfbbin0 -> 36615 bytes
-rw-r--r--Master/xemtex/gsfonts/n019043l.pfmbin0 -> 4686 bytes
-rw-r--r--Master/xemtex/gsfonts/n019044l.afm1341
-rw-r--r--Master/xemtex/gsfonts/n019044l.pfbbin0 -> 37240 bytes
-rw-r--r--Master/xemtex/gsfonts/n019044l.pfmbin0 -> 4686 bytes
-rw-r--r--Master/xemtex/gsfonts/n019063l.afm1341
-rw-r--r--Master/xemtex/gsfonts/n019063l.pfbbin0 -> 37247 bytes
-rw-r--r--Master/xemtex/gsfonts/n019063l.pfmbin0 -> 4690 bytes
-rw-r--r--Master/xemtex/gsfonts/n019064l.afm1341
-rw-r--r--Master/xemtex/gsfonts/n019064l.pfbbin0 -> 38310 bytes
-rw-r--r--Master/xemtex/gsfonts/n019064l.pfmbin0 -> 4690 bytes
-rw-r--r--Master/xemtex/gsfonts/n021003l.afm1341
-rw-r--r--Master/xemtex/gsfonts/n021003l.pfbbin0 -> 46026 bytes
-rw-r--r--Master/xemtex/gsfonts/n021003l.pfmbin0 -> 4685 bytes
-rw-r--r--Master/xemtex/gsfonts/n021004l.afm1341
-rw-r--r--Master/xemtex/gsfonts/n021004l.pfbbin0 -> 44729 bytes
-rw-r--r--Master/xemtex/gsfonts/n021004l.pfmbin0 -> 4685 bytes
-rw-r--r--Master/xemtex/gsfonts/n021023l.afm1341
-rw-r--r--Master/xemtex/gsfonts/n021023l.pfbbin0 -> 45458 bytes
-rw-r--r--Master/xemtex/gsfonts/n021023l.pfmbin0 -> 4689 bytes
-rw-r--r--Master/xemtex/gsfonts/n021024l.afm1341
-rw-r--r--Master/xemtex/gsfonts/n021024l.pfbbin0 -> 44656 bytes
-rw-r--r--Master/xemtex/gsfonts/n021024l.pfmbin0 -> 4689 bytes
-rw-r--r--Master/xemtex/gsfonts/n022003l.afm1341
-rw-r--r--Master/xemtex/gsfonts/n022003l.pfbbin0 -> 45758 bytes
-rw-r--r--Master/xemtex/gsfonts/n022003l.pfmbin0 -> 4679 bytes
-rw-r--r--Master/xemtex/gsfonts/n022004l.afm1341
-rw-r--r--Master/xemtex/gsfonts/n022004l.pfbbin0 -> 50493 bytes
-rw-r--r--Master/xemtex/gsfonts/n022004l.pfmbin0 -> 4679 bytes
-rw-r--r--Master/xemtex/gsfonts/n022023l.afm1341
-rw-r--r--Master/xemtex/gsfonts/n022023l.pfbbin0 -> 44404 bytes
-rw-r--r--Master/xemtex/gsfonts/n022023l.pfmbin0 -> 4683 bytes
-rw-r--r--Master/xemtex/gsfonts/n022024l.afm1341
-rw-r--r--Master/xemtex/gsfonts/n022024l.pfbbin0 -> 51527 bytes
-rw-r--r--Master/xemtex/gsfonts/n022024l.pfmbin0 -> 4683 bytes
-rw-r--r--Master/xemtex/gsfonts/p052003l.afm1341
-rw-r--r--Master/xemtex/gsfonts/p052003l.pfbbin0 -> 52665 bytes
-rw-r--r--Master/xemtex/gsfonts/p052003l.pfmbin0 -> 4683 bytes
-rw-r--r--Master/xemtex/gsfonts/p052004l.afm1341
-rw-r--r--Master/xemtex/gsfonts/p052004l.pfbbin0 -> 52406 bytes
-rw-r--r--Master/xemtex/gsfonts/p052004l.pfmbin0 -> 4683 bytes
-rw-r--r--Master/xemtex/gsfonts/p052023l.afm1341
-rw-r--r--Master/xemtex/gsfonts/p052023l.pfbbin0 -> 50022 bytes
-rw-r--r--Master/xemtex/gsfonts/p052023l.pfmbin0 -> 4683 bytes
-rw-r--r--Master/xemtex/gsfonts/p052024l.afm1341
-rw-r--r--Master/xemtex/gsfonts/p052024l.pfbbin0 -> 51285 bytes
-rw-r--r--Master/xemtex/gsfonts/p052024l.pfmbin0 -> 4687 bytes
-rw-r--r--Master/xemtex/gsfonts/s050000l.afm213
-rw-r--r--Master/xemtex/gsfonts/s050000l.pfbbin0 -> 33709 bytes
-rw-r--r--Master/xemtex/gsfonts/s050000l.pfmbin0 -> 682 bytes
-rw-r--r--Master/xemtex/gsfonts/z003034l.afm1341
-rw-r--r--Master/xemtex/gsfonts/z003034l.pfbbin0 -> 49289 bytes
-rw-r--r--Master/xemtex/gsfonts/z003034l.pfmbin0 -> 4690 bytes
-rw-r--r--Master/xemtex/gslib/CIDFnmap157
-rw-r--r--Master/xemtex/gslib/CIDFnmap.ARP34
-rw-r--r--Master/xemtex/gslib/CIDFnmap.Bae31
-rw-r--r--Master/xemtex/gslib/CIDFnmap.CJK289
-rw-r--r--Master/xemtex/gslib/CIDFnmap.Koc50
-rw-r--r--Master/xemtex/gslib/CIDFnmap.Ore53
-rw-r--r--Master/xemtex/gslib/CIDFnmap.Sol54
-rw-r--r--Master/xemtex/gslib/CIDFnmap.Win79
-rw-r--r--Master/xemtex/gslib/CIDFnmap.b526
-rw-r--r--Master/xemtex/gslib/CIDFnmap.gb24
-rw-r--r--Master/xemtex/gslib/CIDFnmap.ksx31
-rw-r--r--Master/xemtex/gslib/CIDFnmap.sj81
-rw-r--r--Master/xemtex/gslib/Fontmap3
-rw-r--r--Master/xemtex/gslib/Fontmap.ATB169
-rw-r--r--Master/xemtex/gslib/Fontmap.ATM186
-rw-r--r--Master/xemtex/gslib/Fontmap.GS404
-rw-r--r--Master/xemtex/gslib/Fontmap.OS2215
-rw-r--r--Master/xemtex/gslib/Fontmap.OSF163
-rw-r--r--Master/xemtex/gslib/Fontmap.SGI406
-rw-r--r--Master/xemtex/gslib/Fontmap.Sol487
-rw-r--r--Master/xemtex/gslib/Fontmap.Ult147
-rw-r--r--Master/xemtex/gslib/Fontmap.VMS424
-rw-r--r--Master/xemtex/gslib/Info-macos.plist14
-rw-r--r--Master/xemtex/gslib/acctest.ps100
-rw-r--r--Master/xemtex/gslib/addxchar.ps358
-rw-r--r--Master/xemtex/gslib/afmdiff.awk150
-rw-r--r--Master/xemtex/gslib/align.ps74
-rw-r--r--Master/xemtex/gslib/bdftops3
-rw-r--r--Master/xemtex/gslib/bdftops.bat5
-rwxr-xr-xMaster/xemtex/gslib/bdftops.cmd7
-rw-r--r--Master/xemtex/gslib/bdftops.ps796
-rw-r--r--Master/xemtex/gslib/bj8.rpd17
-rw-r--r--Master/xemtex/gslib/bj8gc12f.upp44
-rw-r--r--Master/xemtex/gslib/bj8hg12f.upp44
-rw-r--r--Master/xemtex/gslib/bj8oh06n.upp44
-rw-r--r--Master/xemtex/gslib/bj8pa06n.upp44
-rw-r--r--Master/xemtex/gslib/bj8pp12f.upp44
-rw-r--r--Master/xemtex/gslib/bj8ts06n.upp44
-rw-r--r--Master/xemtex/gslib/bjc610a0.upp44
-rw-r--r--Master/xemtex/gslib/bjc610a1.upp44
-rw-r--r--Master/xemtex/gslib/bjc610a2.upp44
-rw-r--r--Master/xemtex/gslib/bjc610a3.upp44
-rw-r--r--Master/xemtex/gslib/bjc610a4.upp45
-rw-r--r--Master/xemtex/gslib/bjc610a5.upp44
-rw-r--r--Master/xemtex/gslib/bjc610a6.upp44
-rw-r--r--Master/xemtex/gslib/bjc610a7.upp44
-rw-r--r--Master/xemtex/gslib/bjc610a8.upp44
-rw-r--r--Master/xemtex/gslib/bjc610b1.upp44
-rw-r--r--Master/xemtex/gslib/bjc610b2.upp44
-rw-r--r--Master/xemtex/gslib/bjc610b3.upp44
-rw-r--r--Master/xemtex/gslib/bjc610b4.upp45
-rw-r--r--Master/xemtex/gslib/bjc610b6.upp44
-rw-r--r--Master/xemtex/gslib/bjc610b7.upp44
-rw-r--r--Master/xemtex/gslib/bjc610b8.upp44
-rw-r--r--Master/xemtex/gslib/caption.ps57
-rw-r--r--Master/xemtex/gslib/cbjc600.ppd404
-rw-r--r--Master/xemtex/gslib/cbjc800.ppd389
-rw-r--r--Master/xemtex/gslib/cdj550.upp48
-rw-r--r--Master/xemtex/gslib/cdj690.upp52
-rw-r--r--Master/xemtex/gslib/cdj690ec.upp54
-rw-r--r--Master/xemtex/gslib/cid2code.ps161
-rw-r--r--Master/xemtex/gslib/decrypt.ps14
-rw-r--r--Master/xemtex/gslib/dnj750c.upp47
-rw-r--r--Master/xemtex/gslib/dnj750m.upp59
-rw-r--r--Master/xemtex/gslib/docie.ps219
-rw-r--r--Master/xemtex/gslib/dvipdf40
-rw-r--r--Master/xemtex/gslib/eps2eps20
-rw-r--r--Master/xemtex/gslib/eps2eps.bat26
-rwxr-xr-xMaster/xemtex/gslib/eps2eps.cmd36
-rw-r--r--Master/xemtex/gslib/errpage.ps363
-rw-r--r--Master/xemtex/gslib/fixmswrd.pl208
-rw-r--r--Master/xemtex/gslib/font2c3
-rw-r--r--Master/xemtex/gslib/font2c.bat5
-rwxr-xr-xMaster/xemtex/gslib/font2c.cmd7
-rw-r--r--Master/xemtex/gslib/font2c.ps676
-rw-r--r--Master/xemtex/gslib/font2pcl.ps604
-rw-r--r--Master/xemtex/gslib/gs_agl.ps1070
-rw-r--r--Master/xemtex/gslib/gs_btokn.ps321
-rw-r--r--Master/xemtex/gslib/gs_ccfnt.ps76
-rw-r--r--Master/xemtex/gslib/gs_ce_e.ps48
-rw-r--r--Master/xemtex/gslib/gs_cff.ps758
-rw-r--r--Master/xemtex/gslib/gs_cidcm.ps511
-rw-r--r--Master/xemtex/gslib/gs_cidfn.ps702
-rw-r--r--Master/xemtex/gslib/gs_cmap.ps524
-rw-r--r--Master/xemtex/gslib/gs_cmdl.ps181
-rw-r--r--Master/xemtex/gslib/gs_css_e.ps115
-rw-r--r--Master/xemtex/gslib/gs_dbt_e.ps60
-rw-r--r--Master/xemtex/gslib/gs_diskf.ps225
-rw-r--r--Master/xemtex/gslib/gs_dpnxt.ps113
-rw-r--r--Master/xemtex/gslib/gs_dps.ps203
-rw-r--r--Master/xemtex/gslib/gs_dps1.ps142
-rw-r--r--Master/xemtex/gslib/gs_dps2.ps217
-rw-r--r--Master/xemtex/gslib/gs_dscp.ps119
-rw-r--r--Master/xemtex/gslib/gs_epsf.ps243
-rw-r--r--Master/xemtex/gslib/gs_fform.ps93
-rw-r--r--Master/xemtex/gslib/gs_fonts.ps1041
-rw-r--r--Master/xemtex/gslib/gs_frsd.ps83
-rw-r--r--Master/xemtex/gslib/gs_icc.ps115
-rw-r--r--Master/xemtex/gslib/gs_il1_e.ps67
-rw-r--r--Master/xemtex/gslib/gs_il2_e.ps64
-rw-r--r--Master/xemtex/gslib/gs_init.ps1885
-rw-r--r--Master/xemtex/gslib/gs_kanji.ps159
-rw-r--r--Master/xemtex/gslib/gs_ksb_e.ps65
-rw-r--r--Master/xemtex/gslib/gs_l.xbm29
-rw-r--r--Master/xemtex/gslib/gs_l.xpm58
-rw-r--r--Master/xemtex/gslib/gs_l2img.ps185
-rw-r--r--Master/xemtex/gslib/gs_l_m.xbm29
-rw-r--r--Master/xemtex/gslib/gs_lev2.ps935
-rw-r--r--Master/xemtex/gslib/gs_lgo_e.ps92
-rw-r--r--Master/xemtex/gslib/gs_lgx_e.ps61
-rw-r--r--Master/xemtex/gslib/gs_ll3.ps469
-rw-r--r--Master/xemtex/gslib/gs_m.xbm16
-rw-r--r--Master/xemtex/gslib/gs_m.xpm44
-rw-r--r--Master/xemtex/gslib/gs_m_m.xbm16
-rw-r--r--Master/xemtex/gslib/gs_mex_e.ps67
-rw-r--r--Master/xemtex/gslib/gs_mgl_e.ps65
-rw-r--r--Master/xemtex/gslib/gs_mro_e.ps62
-rw-r--r--Master/xemtex/gslib/gs_pdf_e.ps45
-rw-r--r--Master/xemtex/gslib/gs_pdfwr.ps495
-rw-r--r--Master/xemtex/gslib/gs_pfile.ps128
-rw-r--r--Master/xemtex/gslib/gs_rdlin.ps21
-rw-r--r--Master/xemtex/gslib/gs_res.ps928
-rw-r--r--Master/xemtex/gslib/gs_s.xbm11
-rw-r--r--Master/xemtex/gslib/gs_s.xpm36
-rw-r--r--Master/xemtex/gslib/gs_s_m.xbm11
-rw-r--r--Master/xemtex/gslib/gs_setpd.ps777
-rw-r--r--Master/xemtex/gslib/gs_statd.ps366
-rw-r--r--Master/xemtex/gslib/gs_std_e.ps74
-rw-r--r--Master/xemtex/gslib/gs_sym_e.ps84
-rw-r--r--Master/xemtex/gslib/gs_t.xbm8
-rw-r--r--Master/xemtex/gslib/gs_t.xpm28
-rw-r--r--Master/xemtex/gslib/gs_t_m.xbm8
-rw-r--r--Master/xemtex/gslib/gs_trap.ps104
-rw-r--r--Master/xemtex/gslib/gs_ttf.ps1789
-rw-r--r--Master/xemtex/gslib/gs_typ32.ps128
-rw-r--r--Master/xemtex/gslib/gs_typ42.ps45
-rw-r--r--Master/xemtex/gslib/gs_type1.ps183
-rw-r--r--Master/xemtex/gslib/gs_wan_e.ps47
-rw-r--r--Master/xemtex/gslib/gs_wl1_e.ps67
-rw-r--r--Master/xemtex/gslib/gs_wl2_e.ps67
-rw-r--r--Master/xemtex/gslib/gs_wl5_e.ps67
-rw-r--r--Master/xemtex/gslib/gsbj3
-rw-r--r--Master/xemtex/gslib/gsbj.bat5
-rw-r--r--Master/xemtex/gslib/gsdj3
-rw-r--r--Master/xemtex/gslib/gsdj.bat5
-rw-r--r--Master/xemtex/gslib/gsdj5003
-rw-r--r--Master/xemtex/gslib/gsdj500.bat5
-rw-r--r--Master/xemtex/gslib/gslj3
-rw-r--r--Master/xemtex/gslib/gslj.bat5
-rw-r--r--Master/xemtex/gslib/gslp3
-rw-r--r--Master/xemtex/gslib/gslp.bat5
-rw-r--r--Master/xemtex/gslib/gslp.ps695
-rw-r--r--Master/xemtex/gslib/gsnd3
-rw-r--r--Master/xemtex/gslib/gsnd.bat5
-rw-r--r--Master/xemtex/gslib/gsndt.bat5
-rw-r--r--Master/xemtex/gslib/gsnup.ps89
-rw-r--r--Master/xemtex/gslib/gssetgs.bat8
-rw-r--r--Master/xemtex/gslib/gst.bat5
-rw-r--r--Master/xemtex/gslib/gstt.bat5
-rw-r--r--Master/xemtex/gslib/ht_ccsto.ps3171
-rw-r--r--Master/xemtex/gslib/image-qa.ps1827
-rw-r--r--Master/xemtex/gslib/impath.ps180
-rw-r--r--Master/xemtex/gslib/jispaper.ps28
-rw-r--r--Master/xemtex/gslib/landscap.ps31
-rw-r--r--Master/xemtex/gslib/level1.ps3
-rw-r--r--Master/xemtex/gslib/lines.ps166
-rw-r--r--Master/xemtex/gslib/lp386.bat2
-rw-r--r--Master/xemtex/gslib/lp386r2.bat2
-rw-r--r--Master/xemtex/gslib/lpgs.bat5
-rw-r--r--Master/xemtex/gslib/lpr2.bat5
-rw-r--r--Master/xemtex/gslib/lprsetup.sh189
-rw-r--r--Master/xemtex/gslib/markhint.ps131
-rw-r--r--Master/xemtex/gslib/markpath.ps60
-rw-r--r--Master/xemtex/gslib/necp2x.upp35
-rw-r--r--Master/xemtex/gslib/necp2x6.upp35
-rw-r--r--Master/xemtex/gslib/packfile.ps334
-rw-r--r--Master/xemtex/gslib/pcharstr.ps127
-rw-r--r--Master/xemtex/gslib/pdf2dsc26
-rw-r--r--Master/xemtex/gslib/pdf2dsc.bat18
-rw-r--r--Master/xemtex/gslib/pdf2dsc.ps166
-rw-r--r--Master/xemtex/gslib/pdf2ps29
-rw-r--r--Master/xemtex/gslib/pdf2ps.bat24
-rwxr-xr-xMaster/xemtex/gslib/pdf2ps.cmd41
-rw-r--r--Master/xemtex/gslib/pdf_base.ps640
-rw-r--r--Master/xemtex/gslib/pdf_draw.ps1151
-rw-r--r--Master/xemtex/gslib/pdf_font.ps1224
-rw-r--r--Master/xemtex/gslib/pdf_main.ps813
-rw-r--r--Master/xemtex/gslib/pdf_ops.ps521
-rw-r--r--Master/xemtex/gslib/pdf_sec.ps361
-rw-r--r--Master/xemtex/gslib/pdfopt20
-rw-r--r--Master/xemtex/gslib/pdfopt.bat22
-rw-r--r--Master/xemtex/gslib/pdfopt.ps1126
-rw-r--r--Master/xemtex/gslib/pdfwrite.ps284
-rw-r--r--Master/xemtex/gslib/pf2afm8
-rw-r--r--Master/xemtex/gslib/pf2afm.bat17
-rwxr-xr-xMaster/xemtex/gslib/pf2afm.cmd7
-rw-r--r--Master/xemtex/gslib/pf2afm.ps497
-rw-r--r--Master/xemtex/gslib/pfbtopfa16
-rw-r--r--Master/xemtex/gslib/pfbtopfa.ps35
-rw-r--r--Master/xemtex/gslib/pftogsf.bat20
-rw-r--r--Master/xemtex/gslib/pj-gs.sh289
-rw-r--r--Master/xemtex/gslib/ppath.ps55
-rw-r--r--Master/xemtex/gslib/pphs7
-rw-r--r--Master/xemtex/gslib/pphs.ps222
-rw-r--r--Master/xemtex/gslib/prfont.ps242
-rw-r--r--Master/xemtex/gslib/printafm7
-rw-r--r--Master/xemtex/gslib/printafm.ps149
-rw-r--r--Master/xemtex/gslib/ps2ai.ps552
-rw-r--r--Master/xemtex/gslib/ps2ascii18
-rw-r--r--Master/xemtex/gslib/ps2ascii.bat15
-rwxr-xr-xMaster/xemtex/gslib/ps2ascii.cmd18
-rw-r--r--Master/xemtex/gslib/ps2ascii.ps1509
-rw-r--r--Master/xemtex/gslib/ps2epsi78
-rw-r--r--Master/xemtex/gslib/ps2epsi.bat28
-rwxr-xr-xMaster/xemtex/gslib/ps2epsi.cmd31
-rw-r--r--Master/xemtex/gslib/ps2epsi.ps248
-rw-r--r--Master/xemtex/gslib/ps2pdf7
-rw-r--r--Master/xemtex/gslib/ps2pdf.bat18
-rwxr-xr-xMaster/xemtex/gslib/ps2pdf.cmd43
-rw-r--r--Master/xemtex/gslib/ps2pdf125
-rw-r--r--Master/xemtex/gslib/ps2pdf12.bat15
-rwxr-xr-xMaster/xemtex/gslib/ps2pdf12.cmd11
-rw-r--r--Master/xemtex/gslib/ps2pdf135
-rw-r--r--Master/xemtex/gslib/ps2pdf13.bat15
-rwxr-xr-xMaster/xemtex/gslib/ps2pdf13.cmd11
-rw-r--r--Master/xemtex/gslib/ps2pdf145
-rw-r--r--Master/xemtex/gslib/ps2pdf14.bat15
-rwxr-xr-xMaster/xemtex/gslib/ps2pdf14.cmd11
-rw-r--r--Master/xemtex/gslib/ps2pdfwr36
-rw-r--r--Master/xemtex/gslib/ps2pdfxx.bat56
-rw-r--r--Master/xemtex/gslib/ps2ps20
-rw-r--r--Master/xemtex/gslib/ps2ps.bat23
-rwxr-xr-xMaster/xemtex/gslib/ps2ps.cmd36
-rw-r--r--Master/xemtex/gslib/pv.sh37
-rw-r--r--Master/xemtex/gslib/quit.ps1
-rw-r--r--Master/xemtex/gslib/ras1.upp8
-rw-r--r--Master/xemtex/gslib/ras24.upp8
-rw-r--r--Master/xemtex/gslib/ras3.upp8
-rw-r--r--Master/xemtex/gslib/ras32.upp8
-rw-r--r--Master/xemtex/gslib/ras4.upp8
-rw-r--r--Master/xemtex/gslib/ras8m.upp8
-rw-r--r--Master/xemtex/gslib/rollconv.ps385
-rw-r--r--Master/xemtex/gslib/showchar.ps94
-rw-r--r--Master/xemtex/gslib/showpage.ps1
-rw-r--r--Master/xemtex/gslib/st640ih.upp57
-rw-r--r--Master/xemtex/gslib/st640ihg.upp42
-rw-r--r--Master/xemtex/gslib/st640p.upp49
-rw-r--r--Master/xemtex/gslib/st640pg.upp34
-rw-r--r--Master/xemtex/gslib/st640pl.upp49
-rw-r--r--Master/xemtex/gslib/st640plg.upp34
-rw-r--r--Master/xemtex/gslib/stc.upp53
-rw-r--r--Master/xemtex/gslib/stc1520h.upp58
-rw-r--r--Master/xemtex/gslib/stc2.upp53
-rw-r--r--Master/xemtex/gslib/stc200_h.upp51
-rw-r--r--Master/xemtex/gslib/stc2_h.upp53
-rw-r--r--Master/xemtex/gslib/stc2s_h.upp57
-rw-r--r--Master/xemtex/gslib/stc300.upp60
-rw-r--r--Master/xemtex/gslib/stc300bl.upp40
-rw-r--r--Master/xemtex/gslib/stc300bm.upp43
-rw-r--r--Master/xemtex/gslib/stc500p.upp48
-rw-r--r--Master/xemtex/gslib/stc500ph.upp48
-rw-r--r--Master/xemtex/gslib/stc600ih.upp58
-rw-r--r--Master/xemtex/gslib/stc600p.upp34
-rw-r--r--Master/xemtex/gslib/stc600pl.upp34
-rw-r--r--Master/xemtex/gslib/stc640p.upp33
-rw-r--r--Master/xemtex/gslib/stc800ih.upp58
-rw-r--r--Master/xemtex/gslib/stc800p.upp34
-rw-r--r--Master/xemtex/gslib/stc800pl.upp34
-rw-r--r--Master/xemtex/gslib/stc_h.upp53
-rw-r--r--Master/xemtex/gslib/stc_l.upp26
-rw-r--r--Master/xemtex/gslib/stcany.upp24
-rw-r--r--Master/xemtex/gslib/stcany_h.upp24
-rw-r--r--Master/xemtex/gslib/stcinfo.ps800
-rw-r--r--Master/xemtex/gslib/stcolor.ps172
-rw-r--r--Master/xemtex/gslib/stocht.ps63
-rw-r--r--Master/xemtex/gslib/sysvlp.sh46
-rw-r--r--Master/xemtex/gslib/traceimg.ps43
-rw-r--r--Master/xemtex/gslib/traceop.ps84
-rw-r--r--Master/xemtex/gslib/type1enc.ps66
-rw-r--r--Master/xemtex/gslib/type1ops.ps238
-rw-r--r--Master/xemtex/gslib/uninfo.ps221
-rw-r--r--Master/xemtex/gslib/unix-lpr.sh161
-rw-r--r--Master/xemtex/gslib/unprot.ps68
-rw-r--r--Master/xemtex/gslib/viewcmyk.ps64
-rw-r--r--Master/xemtex/gslib/viewgif.ps161
-rw-r--r--Master/xemtex/gslib/viewjpeg.ps153
-rw-r--r--Master/xemtex/gslib/viewmiff.ps125
-rw-r--r--Master/xemtex/gslib/viewpbm.ps185
-rw-r--r--Master/xemtex/gslib/viewpcx.ps151
-rw-r--r--Master/xemtex/gslib/viewps2a.ps33
-rw-r--r--Master/xemtex/gslib/wftopfa3
-rw-r--r--Master/xemtex/gslib/wftopfa.ps304
-rw-r--r--Master/xemtex/gslib/winmaps.ps107
-rw-r--r--Master/xemtex/gslib/wmakebat.bat4
-rw-r--r--Master/xemtex/gslib/wrfont.ps663
-rw-r--r--Master/xemtex/gslib/zeroline.ps101
-rw-r--r--Master/xemtex/perl/lib/AnyDBM_File.pm93
-rw-r--r--Master/xemtex/perl/lib/AutoLoader.pm337
-rw-r--r--Master/xemtex/perl/lib/B.pm971
-rw-r--r--Master/xemtex/perl/lib/B/Deparse.pm4233
-rw-r--r--Master/xemtex/perl/lib/Carp.pm196
-rw-r--r--Master/xemtex/perl/lib/Carp/Heavy.pm247
-rw-r--r--Master/xemtex/perl/lib/Class/Struct.pm632
-rw-r--r--Master/xemtex/perl/lib/Config.pm8895
-rw-r--r--Master/xemtex/perl/lib/Cwd.pm570
-rw-r--r--Master/xemtex/perl/lib/Data/Dumper.pm1160
-rw-r--r--Master/xemtex/perl/lib/Digest/MD5.pm279
-rw-r--r--Master/xemtex/perl/lib/DynaLoader.pm826
-rw-r--r--Master/xemtex/perl/lib/Errno.pm221
-rw-r--r--Master/xemtex/perl/lib/Exporter.pm416
-rw-r--r--Master/xemtex/perl/lib/Exporter/Heavy.pm232
-rw-r--r--Master/xemtex/perl/lib/Fcntl.pm216
-rw-r--r--Master/xemtex/perl/lib/File/Basename.pm289
-rw-r--r--Master/xemtex/perl/lib/File/Compare.pm178
-rw-r--r--Master/xemtex/perl/lib/File/Copy.pm443
-rw-r--r--Master/xemtex/perl/lib/File/Find.pm1212
-rw-r--r--Master/xemtex/perl/lib/File/Glob.pm465
-rw-r--r--Master/xemtex/perl/lib/File/Path.pm267
-rw-r--r--Master/xemtex/perl/lib/File/Spec.pm292
-rw-r--r--Master/xemtex/perl/lib/File/Spec/Unix.pm482
-rw-r--r--Master/xemtex/perl/lib/File/Spec/Win32.pm370
-rw-r--r--Master/xemtex/perl/lib/File/Temp.pm1876
-rw-r--r--Master/xemtex/perl/lib/FindBin.pm183
-rw-r--r--Master/xemtex/perl/lib/Getopt/Long.pm2048
-rw-r--r--Master/xemtex/perl/lib/IO.pm47
-rw-r--r--Master/xemtex/perl/lib/IO/File.pm169
-rw-r--r--Master/xemtex/perl/lib/IO/Handle.pm613
-rw-r--r--Master/xemtex/perl/lib/IO/Seekable.pm128
-rw-r--r--Master/xemtex/perl/lib/List/Util.pm194
-rw-r--r--Master/xemtex/perl/lib/POSIX.pm950
-rw-r--r--Master/xemtex/perl/lib/SDBM_File.pm116
-rw-r--r--Master/xemtex/perl/lib/Scalar/Util.pm170
-rw-r--r--Master/xemtex/perl/lib/SelectSaver.pm54
-rw-r--r--Master/xemtex/perl/lib/Symbol.pm162
-rw-r--r--Master/xemtex/perl/lib/Term/Cap.pm651
-rw-r--r--Master/xemtex/perl/lib/Text/ParseWords.pm263
-rw-r--r--Master/xemtex/perl/lib/Text/Tabs.pm97
-rw-r--r--Master/xemtex/perl/lib/Text/Wrap.pm211
-rw-r--r--Master/xemtex/perl/lib/Tie/Hash.pm243
-rw-r--r--Master/xemtex/perl/lib/Tie/Scalar.pm140
-rw-r--r--Master/xemtex/perl/lib/Time/HiRes.pm357
-rw-r--r--Master/xemtex/perl/lib/Time/Local.pm255
-rw-r--r--Master/xemtex/perl/lib/UNIVERSAL.pm118
-rw-r--r--Master/xemtex/perl/lib/XSLoader.pm138
-rw-r--r--Master/xemtex/perl/lib/attributes.pm414
-rw-r--r--Master/xemtex/perl/lib/auto/B/B.dllbin0 -> 90112 bytes
-rw-r--r--Master/xemtex/perl/lib/auto/Cwd/Cwd.dllbin0 -> 6656 bytes
-rw-r--r--Master/xemtex/perl/lib/auto/Data/Dumper/Dumper.dllbin0 -> 20992 bytes
-rw-r--r--Master/xemtex/perl/lib/auto/Digest/MD5/MD5.dllbin0 -> 12800 bytes
-rw-r--r--Master/xemtex/perl/lib/auto/DynaLoader/autosplit.ix8
-rw-r--r--Master/xemtex/perl/lib/auto/DynaLoader/dl_expandspec.al34
-rw-r--r--Master/xemtex/perl/lib/auto/DynaLoader/dl_find_symbol_anywhere.al19
-rw-r--r--Master/xemtex/perl/lib/auto/DynaLoader/dl_findfile.al115
-rw-r--r--Master/xemtex/perl/lib/auto/Fcntl/Fcntl.dllbin0 -> 10752 bytes
-rw-r--r--Master/xemtex/perl/lib/auto/File/Glob/Glob.dllbin0 -> 12800 bytes
-rw-r--r--Master/xemtex/perl/lib/auto/IO/IO.dllbin0 -> 12288 bytes
-rw-r--r--Master/xemtex/perl/lib/auto/List/Util/Util.dllbin0 -> 15872 bytes
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/POSIX.dllbin0 -> 86016 bytes
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/abs.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/alarm.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/assert.al15
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/atan2.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/atexit.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/atof.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/atoi.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/atol.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/autosplit.ix153
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/bsearch.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/calloc.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/chdir.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/chmod.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/chown.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/clearerr.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/closedir.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/cos.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/creat.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/div.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/errno.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/execl.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/execle.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/execlp.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/execv.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/execve.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/execvp.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/exit.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/exp.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fabs.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fclose.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fcntl.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fdopen.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/feof.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/ferror.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fflush.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fgetc.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fgetpos.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fgets.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fileno.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fopen.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fork.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fprintf.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fputc.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fputs.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fread.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/free.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/freopen.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fscanf.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fseek.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fsetpos.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fstat.al17
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/ftell.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/fwrite.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/getc.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/getchar.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/getegid.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/getenv.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/geteuid.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/getgid.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/getgrgid.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/getgrnam.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/getgroups.al14
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/getlogin.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/getpgrp.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/getpid.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/getppid.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/getpwnam.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/getpwuid.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/gets.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/getuid.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/gmtime.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/isatty.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/kill.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/labs.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/ldiv.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/link.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/load_imports.al224
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/localtime.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/log.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/longjmp.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/malloc.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/memchr.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/memcmp.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/memcpy.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/memmove.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/memset.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/mkdir.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/offsetof.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/opendir.al16
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/perror.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/pow.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/printf.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/putc.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/putchar.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/puts.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/qsort.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/raise.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/rand.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/readdir.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/realloc.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/redef.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/remove.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/rename.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/rewind.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/rewinddir.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/rmdir.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/scanf.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/setbuf.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/setjmp.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/setvbuf.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/siglongjmp.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/sigsetjmp.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/sin.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/sleep.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/sprintf.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/sqrt.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/srand.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/sscanf.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/stat.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/strcat.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/strchr.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/strcmp.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/strcpy.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/strcspn.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/strerror.al14
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/strlen.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/strncat.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/strncmp.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/strncpy.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/strpbrk.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/strrchr.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/strspn.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/strstr.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/strtok.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/system.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/time.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/tmpfile.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/tolower.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/toupper.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/umask.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/ungetc.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/unimpl.al14
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/unlink.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/usage.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/utime.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/vfprintf.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/vprintf.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/vsprintf.al12
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/wait.al13
-rw-r--r--Master/xemtex/perl/lib/auto/POSIX/waitpid.al13
-rw-r--r--Master/xemtex/perl/lib/auto/SDBM_File/SDBM_File.dllbin0 -> 20480 bytes
-rw-r--r--Master/xemtex/perl/lib/auto/Time/HiRes/HiRes.dllbin0 -> 10240 bytes
-rw-r--r--Master/xemtex/perl/lib/auto/re/re.dllbin0 -> 114688 bytes
-rw-r--r--Master/xemtex/perl/lib/base.pm94
-rw-r--r--Master/xemtex/perl/lib/bytes.pm68
-rw-r--r--Master/xemtex/perl/lib/bytes_heavy.pl8
-rw-r--r--Master/xemtex/perl/lib/constant.pm345
-rw-r--r--Master/xemtex/perl/lib/fields.pm285
-rw-r--r--Master/xemtex/perl/lib/integer.pm93
-rw-r--r--Master/xemtex/perl/lib/lib.pm205
-rw-r--r--Master/xemtex/perl/lib/newgetopt.pl75
-rw-r--r--Master/xemtex/perl/lib/overload.pm1432
-rw-r--r--Master/xemtex/perl/lib/re.pm134
-rw-r--r--Master/xemtex/perl/lib/strict.pm117
-rw-r--r--Master/xemtex/perl/lib/subs.pm40
-rw-r--r--Master/xemtex/perl/lib/unicore/ArabLink.pl49
-rw-r--r--Master/xemtex/perl/lib/unicore/ArabLnkGrp.pl98
-rw-r--r--Master/xemtex/perl/lib/unicore/Bidirectional.pl692
-rw-r--r--Master/xemtex/perl/lib/unicore/Blocks.pl116
-rw-r--r--Master/xemtex/perl/lib/unicore/Canonical.pl816
-rw-r--r--Master/xemtex/perl/lib/unicore/Category.pl1732
-rw-r--r--Master/xemtex/perl/lib/unicore/CombiningClass.pl169
-rw-r--r--Master/xemtex/perl/lib/unicore/Decomposition.pl5120
-rw-r--r--Master/xemtex/perl/lib/unicore/Exact.pl110
-rw-r--r--Master/xemtex/perl/lib/unicore/JamoShort.pl73
-rw-r--r--Master/xemtex/perl/lib/unicore/Lbrk.pl1073
-rw-r--r--Master/xemtex/perl/lib/unicore/Name.pl13869
-rw-r--r--Master/xemtex/perl/lib/unicore/Number.pl537
-rw-r--r--Master/xemtex/perl/lib/unicore/Scripts.pl371
-rw-r--r--Master/xemtex/perl/lib/unicore/To/Digit.pl274
-rw-r--r--Master/xemtex/perl/lib/unicore/To/Fold.pl849
-rw-r--r--Master/xemtex/perl/lib/unicore/To/Lower.pl760
-rw-r--r--Master/xemtex/perl/lib/unicore/To/Title.pl818
-rw-r--r--Master/xemtex/perl/lib/unicore/To/Upper.pl845
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/ASCII.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Alnum.pl423
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Alpha.pl390
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Alphabet.pl372
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Any.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Arabic.pl26
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Armenian.pl16
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/AsciiHex.pl15
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Assigned.pl398
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Bengali.pl27
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiAL.pl33
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiAN.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiB.pl17
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiBN.pl26
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiCS.pl23
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiCont.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiEN.pl23
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiES.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiET.pl36
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiL.pl366
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiLRE.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiLRO.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiNSM.pl115
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiON.pl121
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiPDF.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiR.pl26
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiRLE.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiRLO.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiS.pl15
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/BidiWS.pl20
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Blank.pl20
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Bopomofo.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Buhid.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/C.pl400
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Canadian.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Canon.pl224
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Cc.pl15
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Cf.pl25
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Cherokee.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Cn.pl399
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Cntrl.pl29
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Co.pl16
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Common.pl367
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Compat.pl143
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Cs.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Cyrillic.pl18
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/DCcircle.pl17
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/DCcompat.pl81
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/DCfinal.pl125
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/DCfont.pl47
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/DCfracti.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/DCinitia.pl87
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/DCisolat.pl110
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/DCmedial.pl66
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/DCnarrow.pl18
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/DCnoBrea.pl17
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/DCsmall.pl15
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/DCsquare.pl15
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/DCsub.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/DCsuper.pl22
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/DCvertic.pl15
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/DCwide.pl15
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Dash.pl26
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Deprecat.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Deseret.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Devanaga.pl18
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Diacriti.pl89
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Digit.pl33
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Ethiopic.pl38
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Extender.pl23
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Georgian.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Gothic.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Graph.pl398
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Grapheme.pl25
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Greek.pl40
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Gujarati.pl26
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Gurmukhi.pl27
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Han.pl25
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Hangul.pl22
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Hanunoo.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Hebrew.pl22
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/HexDigit.pl18
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Hiragana.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Hyphen.pl21
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/IdContin.pl416
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/IdStart.pl321
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Ideograp.pl20
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/IdsBinar.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/IdsTrina.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InAlphab.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InArabi2.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InArabi3.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InArabic.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InArmeni.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InArrows.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InBasicL.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InBengal.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InBlockE.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InBopom2.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InBopomo.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InBoxDra.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InBraill.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InBuhid.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InByzant.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InCherok.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InCjkCo2.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InCjkCo3.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InCjkCo4.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InCjkCom.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InCjkRad.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InCjkSym.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InCjkUn2.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InCjkUn3.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InCjkUni.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InCombi2.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InCombi3.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InCombin.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InContro.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InCurren.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InCyril2.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InCyrill.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InDesere.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InDevana.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InDingba.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InEnclo2.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InEnclos.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InEthiop.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InGenera.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InGeomet.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InGeorgi.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InGothic.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InGreek.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InGreekA.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InGreekE.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InGujara.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InGurmuk.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InHalfwi.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InHangu2.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InHangu3.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InHangul.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InHanuno.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InHebrew.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InHighPr.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InHighSu.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InHiraga.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InIdeogr.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InIpaExt.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InKanbun.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InKangxi.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InKannad.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InKatak2.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InKataka.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InKhmer.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InLao.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InLatin1.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InLatin2.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InLatin3.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InLatinE.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InLetter.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InLowSur.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InMalaya.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InMathe2.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InMathem.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InMisce2.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InMisce3.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InMisce4.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InMiscel.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InMongol.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InMusica.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InMyanma.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InNumber.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InOgham.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InOldIta.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InOptica.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InOriya.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InPrivat.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InRunic.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InSinhal.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InSmallF.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InSpacin.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InSpecia.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InSupers.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InSuppl2.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InSuppl3.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InSuppl4.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InSuppl5.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InSupple.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InSyriac.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InTagalo.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InTagban.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InTags.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InTamil.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InTelugu.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InThaana.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InThai.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InTibeta.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InUnifie.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InVariat.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InYiRadi.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/InYiSyll.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Inherite.pl37
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/JoinCont.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Kannada.pl25
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Katakana.pl17
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Khmer.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/L.pl319
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/L_.pl112
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Lao.pl30
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Latin.pl31
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Ll.pl433
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Lm.pl33
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Lo.pl217
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/LogicalO.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Lower.pl432
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Lowercas.pl439
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Lt.pl23
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Lu.pl432
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/M.pl125
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Malayala.pl23
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Math.pl101
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Mc.pl65
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Me.pl17
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Mirrored.pl105
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Mn.pl117
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Mongolia.pl15
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Myanmar.pl19
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/N.pl56
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Nd.pl34
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Nl.pl19
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/No.pl33
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Nonchara.pl30
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Ogham.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/OldItali.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Oriya.pl26
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/OtherAlp.pl99
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/OtherDef.pl17
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/OtherGra.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/OtherLow.pl19
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/OtherMat.pl76
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/OtherUpp.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/P.pl97
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Pc.pl20
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Pd.pl25
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Pe.pl75
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Pf.pl17
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Pi.pl18
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Po.pl83
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Print.pl400
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Ps.pl77
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Punct.pl96
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Quotatio.pl24
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Radical.pl15
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Runic.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/S.pl159
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Sc.pl24
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Sinhala.pl23
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Sk.pl35
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Sm.pl71
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/So.pl117
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/SoftDott.pl19
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Space.pl21
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/SpacePer.pl23
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Syriac.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Tagalog.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Tagbanwa.pl15
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Tamil.pl28
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Telugu.pl24
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Terminal.pl48
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Thaana.pl13
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Thai.pl15
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Tibetan.pl25
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Title.pl22
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/UnifiedI.pl22
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Upper.pl431
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Uppercas.pl433
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/WhiteSpa.pl21
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Word.pl424
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/XDigit.pl15
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Yi.pl18
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Z.pl21
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Zl.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Zp.pl14
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/Zs.pl20
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/_CanonDC.pl16
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/_CaseIgn.pl118
-rw-r--r--Master/xemtex/perl/lib/unicore/lib/_CombAbo.pl54
-rw-r--r--Master/xemtex/perl/lib/utf8.pm152
-rw-r--r--Master/xemtex/perl/lib/utf8_heavy.pl344
-rw-r--r--Master/xemtex/perl/lib/vars.pm82
-rw-r--r--Master/xemtex/perl/lib/warnings.pm489
-rw-r--r--Master/xemtex/perl/lib/warnings/register.pm51
-rw-r--r--Master/xemtex/perl/site/lib/Tk.pm696
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Adjuster.pm435
-rw-r--r--Master/xemtex/perl/site/lib/Tk/After.pm88
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Bitmap.pm18
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Button.pm148
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Camel.xpm41
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Canvas.pm60
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Checkbutton.pm42
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Clipboard.pm110
-rw-r--r--Master/xemtex/perl/site/lib/Tk/CmdLine.pm954
-rw-r--r--Master/xemtex/perl/site/lib/Tk/ColorEdit.xpm58
-rw-r--r--Master/xemtex/perl/site/lib/Tk/ColorEditor.pm759
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Config.pm12
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Configure.pm69
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Derived.pm510
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Dialog.pm70
-rw-r--r--Master/xemtex/perl/site/lib/Tk/DialogBox.pm115
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Entry.pm517
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Event.pm13
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Event/IO.pm122
-rw-r--r--Master/xemtex/perl/site/lib/Tk/FBox.pm891
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Frame.pm373
-rw-r--r--Master/xemtex/perl/site/lib/Tk/IconList.pm536
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Image.pm73
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Label.pm21
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Listbox.pm856
-rw-r--r--Master/xemtex/perl/site/lib/Tk/MainWindow.pm188
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Menu.pm1130
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Menu/Item.pm180
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Menubutton.pm398
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Optionmenu.pm110
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Pixmap.pm19
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Pretty.pm93
-rw-r--r--Master/xemtex/perl/site/lib/Tk/ROText.pm36
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Radiobutton.pm45
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Scale.pm278
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Scrollbar.pm414
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Submethods.pm46
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Text.pm1600
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Text/Tag.pm46
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Tk.xbm44
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Tk.xpm41
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Toplevel.pm211
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Widget.pm1298
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Wm.pm165
-rw-r--r--Master/xemtex/perl/site/lib/Tk/X.pm398
-rw-r--r--Master/xemtex/perl/site/lib/Tk/X11/license.terms32
-rw-r--r--Master/xemtex/perl/site/lib/Tk/Xcamel.gifbin0 -> 4193 bytes
-rw-r--r--Master/xemtex/perl/site/lib/Tk/act_folder.xbm5
-rw-r--r--Master/xemtex/perl/site/lib/Tk/act_folder.xpm22
-rw-r--r--Master/xemtex/perl/site/lib/Tk/anim.gifbin0 -> 2533 bytes
-rw-r--r--Master/xemtex/perl/site/lib/Tk/balArrow.xbm4
-rw-r--r--Master/xemtex/perl/site/lib/Tk/cbxarrow.xbm6
-rw-r--r--Master/xemtex/perl/site/lib/Tk/file.xbm5
-rw-r--r--Master/xemtex/perl/site/lib/Tk/file.xpm18
-rw-r--r--Master/xemtex/perl/site/lib/Tk/folder.xbm5
-rw-r--r--Master/xemtex/perl/site/lib/Tk/folder.xpm21
-rw-r--r--Master/xemtex/perl/site/lib/Tk/icon.gifbin0 -> 1924 bytes
-rw-r--r--Master/xemtex/perl/site/lib/Tk/license.terms35
-rw-r--r--Master/xemtex/perl/site/lib/Tk/openfile.xbm5
-rw-r--r--Master/xemtex/perl/site/lib/Tk/openfolder.xbm5
-rw-r--r--Master/xemtex/perl/site/lib/Tk/openfolder.xpm21
-rw-r--r--Master/xemtex/perl/site/lib/Tk/prolog.ps284
-rw-r--r--Master/xemtex/perl/site/lib/Tk/srcfile.xpm18
-rw-r--r--Master/xemtex/perl/site/lib/Tk/textfile.xpm18
-rw-r--r--Master/xemtex/perl/site/lib/Tk/tranicon.gifbin0 -> 1718 bytes
-rw-r--r--Master/xemtex/perl/site/lib/Tk/widgets.pm21
-rw-r--r--Master/xemtex/perl/site/lib/Tk/win.xbm6
-rw-r--r--Master/xemtex/perl/site/lib/Tk/winfolder.xpm39
-rw-r--r--Master/xemtex/perl/site/lib/Tk/wintext.xpm42
-rw-r--r--Master/xemtex/perl/site/lib/Win32/API.pm719
-rw-r--r--Master/xemtex/perl/site/lib/Win32/API/Struct.pm528
-rw-r--r--Master/xemtex/perl/site/lib/Win32/API/Type.pm440
-rw-r--r--Master/xemtex/perl/site/lib/XML/Parser.pm1089
-rw-r--r--Master/xemtex/perl/site/lib/XML/Parser/Expat.pm1231
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Bitmap/Bitmap.dllbin0 -> 6144 bytes
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/CancelRepeat.al15
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Canvas/Canvas.dllbin0 -> 139264 bytes
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Clipboard/autosplit.ix6
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Clipboard/getSelected.al15
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/EnterFocus.al26
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Entry/Entry.dllbin0 -> 23040 bytes
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Error.al20
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Event/Event.dllbin0 -> 53248 bytes
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/FirstMenu.al21
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/FocusChildren.al35
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/FocusOK.al33
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Frame/AddScrollbars.al52
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Frame/FindMenu.al22
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Frame/autosplit.ix24
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Frame/freeze_on_map.al18
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Frame/label.al24
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Frame/labelPack.al50
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Frame/labelVariable.al27
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Frame/packscrollbars.al86
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Frame/queuePack.al18
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Frame/sbset.al15
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Frame/scrollbars.al24
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/ImageNames.al13
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/ImageTypes.al13
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/AutoScan.al48
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/BeginExtend.al29
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/BeginSelect.al45
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/BeginToggle.al39
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/ButtonRelease_1.al16
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/Cancel.al43
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/Cntrl_End.al18
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/Cntrl_Home.al18
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/Cntrl_backslash.al18
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/DataExtend.al39
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/ExtendUpDown.al30
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/Listbox.dllbin0 -> 20992 bytes
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/Motion.al66
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/SelectAll.al31
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/SetList.al15
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/UpDown.al39
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/autosplit.ix42
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/clipboardPaste.al21
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/deleteSelected.al18
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/getSelected.al22
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Listbox/xyIndex.al27
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Menubutton/Menubutton.dllbin0 -> 14848 bytes
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Pixmap/Pixmap.dllbin0 -> 19968 bytes
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Receive.al23
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/RepeatId.al16
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scale/Activate.al33
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scale/ButtonDown.al40
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scale/ButtonUp.al16
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scale/ControlPress.al31
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scale/Drag.al29
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scale/EndDrag.al23
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scale/Enter.al19
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scale/Increment.al61
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scale/Leave.al15
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scale/Scale.dllbin0 -> 20992 bytes
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scale/autosplit.ix22
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ButtonDown.al55
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ButtonUp.al26
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Drag.al44
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/EndDrag.al29
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Enter.al21
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Leave.al18
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Motion.al15
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ScrlByPages.al38
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ScrlByUnits.al37
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ScrlToPos.al35
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ScrlTopBottom.al32
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Scrollbar.dllbin0 -> 15872 bytes
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Select.al59
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/StartDrag.al33
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/autosplit.ix30
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Selection.al18
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Text/Text.dllbin0 -> 94208 bytes
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Text/autosplit.ix3
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Tk.dllbin0 -> 573440 bytes
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_BindIn.al19
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_BindOut.al20
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_Create.al56
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_Destroy.al29
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_In.al24
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_Out.al32
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Toplevel/autosplit.ix10
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/TraverseToMenu.al27
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Widget/ASkludge.al30
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Widget/autosplit.ix10
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Widget/clipboardKeysyms.al51
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Widget/pathname.al15
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Wm/AnchorAdjust.al17
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Wm/FullScreen.al29
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Wm/Popup.al45
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Wm/Post.al20
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Wm/autosplit.ix14
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/Wm/iconposition.al24
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/X/X.dllbin0 -> 19968 bytes
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/X/autosplit.ix3
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/autosplit.ix43
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/break.al13
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/focusFollowsMouse.al14
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/focusNext.al45
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/focusPrev.al65
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/interps.al14
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/lsearch.al19
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/tabFocus.al13
-rw-r--r--Master/xemtex/perl/site/lib/auto/Tk/updateWidgets.al17
-rw-r--r--Master/xemtex/perl/site/lib/auto/Win32/API/API.dllbin0 -> 20480 bytes
-rw-r--r--Master/xemtex/perl/site/lib/auto/XML/Parser/Expat/Expat.dllbin0 -> 163840 bytes
1196 files changed, 292306 insertions, 0 deletions
diff --git a/Master/xemtex/doc/ghostscript/API.htm b/Master/xemtex/doc/ghostscript/API.htm
new file mode 100644
index 00000000000..01eff34f577
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/API.htm
@@ -0,0 +1,671 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>The Ghostscript Interpreter Application Programming Interface (API)</title>
+<!-- $Id: API.htm,v 1.11.2.13.2.6 2003/05/17 14:38:59 giles Exp $ -->
+<!-- Supercedes the API in DLL.htm -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>The Ghostscript Interpreter Application Programming Interface (API)</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<ul>
+<li><a href="#API">What is the Ghostscript Interpreter API?</a>
+<li><a href="#Exported_functions ">Exported functions</a>
+<ul>
+<li><a href="#revision"><b><tt>gsapi_revision</tt></b></a>
+<li><a href="#new_instance"><b><tt>gsapi_new_instance</tt></b></a>
+<li><a href="#delete_instance"><b><tt>gsapi_delete_instance</tt></b></a>
+<li><a href="#set_stdio"><b><tt>gsapi_set_stdio</tt></b></a>
+<li><a href="#set_poll"><b><tt>gsapi_set_poll</tt></b></a>
+<li><a href="#set_display_callback"><b><tt>gsapi_set_display_callback</tt></b></a>
+<li><a href="#init"><b><tt>gsapi_init_with_args</tt></b></a>
+<li><a href="#run"><b><tt>gsapi_run_*</tt></b></a>
+<li><a href="#exit"><b><tt>gsapi_exit</tt></b></a>
+<li><a href="#return_codes">Return codes</a>
+</ul>
+<li><a href="#Example_usage">Example usage</a>
+<li><a href="#stdio">Standard input and output</a>
+<li><a href="#display">Display device</a>
+</ul>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<p>
+<b>WARNING:</b> The API described in this document is subject to changes in
+future releases, possibly ones that are not backward compatible with what
+is described here.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+
+<h2><a name="API"></a>What is the Ghostscript Interpreter API?</h2>
+
+<p>
+The Ghostscript interpreter can be built as a dynamic link library
+(DLL) on the Windows or OS/2 platforms, as a shared object on the
+GNU/Linux platform and as a framework on MacOS X.
+With some changes, it could be built as a static library.
+This document describes the Application Programming Interface (API)
+for the Ghostscript interpreter library.
+This should not be confused with the
+<a href="Lib.htm">Ghostscript library</a> which provides a graphics
+library but not the interpreter.
+<p>
+This supercedes the old <a href="DLL.htm">DLL</a> interface.
+<p>
+To provide the interface described in the
+<a href="Use.htm">usage documentation</a>, a smaller independent
+executable loads the DLL/shared object.
+This executable provides all the interaction with the windowing system,
+including image windows and, if necessary, a text window.
+
+<p>
+The Ghostscript interpreter library's name and characteristics differ
+for each platform:
+
+<ul>
+<li>The Win32 DLL <b><tt>gsdll32.dll</tt></b> has
+MULTIPLE NONSHARED data segments. Under Win32s it can be used by only one
+program at a time, but under Windows 95/98 or Windows NT it can be called by
+multiple programs simultaneously.
+
+<li>The OS/2 DLL <b><tt>gsdll2.dll</tt></b> has
+MULTIPLE NONSHARED data segments and can be called by multiple programs
+simultaneously.
+
+<li>The GNU/Linux shared object <b><tt>libgs.so</tt></b>
+can be used by multiple programs simultaneously.
+
+<li>The MacOS X <b><tt>Ghostscript.framework</tt></b> can also be used
+by multiple applications at once.
+</ul>
+
+<p>
+The source for the executable is in <b><tt>dw</tt></b>*.* (Windows),
+<b><tt>dp</tt></b>*.* (OS/2) and <b><tt>dx</tt></b>*.* (GNU/Linux).
+See these source files for examples of how to use the DLL.
+
+<p>
+The source file <tt>dxmainc.c</tt> can serve as an example of how to use the
+framework shared component on MacOS X. Just change the header includes to use
+the Ghostscript namespace:
+<blockquote><pre><tt>#include &lt;Ghostscript/errors.h&gt;
+#include &lt;Ghostscript/iapi.h&gt;</tt></pre></blockquote>
+and link with:
+<blockquote><pre><tt>cc -o gsc dxmainc.c -framework Ghostscript</tt></pre></blockquote>
+To get a useable executable. <tt>Ghostscript.framework</tt> must be properly
+installed in the search path for this to work.
+
+<p>
+At this stage, Ghostscript does not support multiple instances
+of the interpreter within a single process.
+
+<hr>
+
+<h2><a name="Exported_functions"></a>Exported functions</h2>
+
+<p>
+The functions exported by the DLL/shared object are described
+in the header file <a href="../src/iapi.h"><b><tt>iapi.h</tt></b></a>
+and are summarised below. Omitted from the summary are
+the calling convention (e.g. __stdcall), details of return
+values and error handling.
+
+
+<ul>
+<li><b><tt>
+int
+<a href="#revision">gsapi_revision</a>
+ (gsapi_revision_t *pr, int len));
+</tt></b>
+
+<li><b><tt>
+int
+<a href="#new_instance">gsapi_new_instance</a>
+(gs_main_instance **pinstance, void *caller_handle);
+</tt></b>
+
+<li><b><tt>
+void
+<a href="#delete_instance">gsapi_delete_instance</a>
+(gs_main_instance *instance);
+</tt></b>
+
+<li><b><tt>
+int
+<a href="#set_stdio">gsapi_set_stdio</a>
+(gs_main_instance *instance,
+ int(*stdin_fn)(void *caller_handle, char *buf, int len),
+ int(*stdout_fn)(void *caller_handle, const char *str, int len),
+ int(*stderr_fn)(void *caller_handle, const char *str, int len));
+</tt></b>
+
+<li><b><tt>
+int
+<a href="#set_poll">gsapi_set_poll</a>
+(gs_main_instance *instance, int(*poll_fn)(void *caller_handle));
+</tt></b>
+
+<li><b><tt>
+int
+<a href="#set_display_callback">gsapi_set_display_callback</a>
+(gs_main_instance *instance, display_callback *callback);
+</tt></b>
+
+<li><b><tt>
+int
+<a href="#init">gsapi_init_with_args</a>
+(gs_main_instance *instance, int argc, char **argv);
+</tt></b>
+
+<li><b><tt>
+int
+<a href="#run">gsapi_run_string_begin</a>
+(gs_main_instance *instance, int user_errors, int *pexit_code);
+</tt></b>
+
+<li><b><tt>
+int
+<a href="#run">gsapi_run_string_continue</a>
+(gs_main_instance *instance,
+ const char *str, unsigned int length, int user_errors, int *pexit_code);
+</tt></b>
+
+<li><b><tt>
+int
+<a href="#run">gsapi_run_string_end</a>
+(gs_main_instance *instance, int user_errors, int *pexit_code);
+</tt></b>
+
+<li><b><tt>
+int
+<a href="#run">gsapi_run_string_with_length</a>
+(gs_main_instance *instance,
+ const char *str, unsigned int length, int user_errors, int *pexit_code);
+</tt></b>
+
+<li><b><tt>
+int
+<a href="#run">gsapi_run_string</a>
+(gs_main_instance *instance,
+ const char *str, int user_errors, int *pexit_code);
+</tt></b>
+
+<li><b><tt>
+int
+<a href="#run">gsapi_run_file</a>
+(gs_main_instance *instance,
+ const char *file_name, int user_errors, int *pexit_code);
+</tt></b>
+
+<li><b><tt>
+int
+<a href="#exit">gsapi_exit</a>
+(gs_main_instance *instance);
+</tt></b>
+
+</ul>
+
+<h3><a name="revision"></a><b><tt>gsapi_revision()</tt></b></h3>
+
+<blockquote>
+This function returns the revision numbers and strings of the Ghostscript
+interpreter library; you should call it before any other interpreter
+library functions to make sure that the correct version of the
+Ghostscript interpreter has been loaded.
+
+<blockquote>
+<pre>
+typedef struct gsapi_revision_s {
+ const char *product;
+ const char *copyright;
+ long revision;
+ long revisiondate;
+} gsapi_revision_t;
+gsapi_revision_t r;
+
+if (gsapi_revision(&amp;r, sizeof(r)) == 0) {
+ if (r.revision < 650)
+ printf("Need at least Ghostscript 6.50");
+}
+else {
+ printf("revision structure size is incorrect");
+}
+</pre></blockquote>
+</blockquote>
+
+
+<h3><a name="new_instance"></a><b><tt>gsapi_new_instance()</tt></b></h3>
+<blockquote>
+Create a new instance of Ghostscript.
+This instance is passed to most other gsapi functions.
+The caller_handle will be provided to callback functions.
+<b>At this stage, Ghostscript supports only one instance</b>.
+</blockquote>
+
+
+<h3><a name="delete_instance"></a><b><tt>gsapi_delete_instance()</tt></b></h3>
+<blockquote>
+Destroy an instance of Ghostscript.
+Before you call this, Ghostscript must have finished.
+If Ghostscript has been initialised, you must call
+<b><tt>gsapi_exit</tt></b> before <b><tt>gsapi_delete_instance</tt></b>.
+</blockquote>
+
+
+<h3><a name="set_stdio"></a><b><tt>gsapi_set_stdio()</tt></b></h3>
+<blockquote>
+Set the callback functions for stdio
+The stdin callback function should return the number of
+characters read, 0 for EOF, or -1 for error.
+The stdout and stderr callback functions should return
+the number of characters written.
+</blockquote>
+
+
+<h3><a name="set_poll"></a><b><tt>gsapi_set_poll()</tt></b></h3>
+<blockquote>
+Set the callback function for polling.
+This is used for handling window events or cooperative
+multitasking. This function will only be called if
+the Ghostscript interpreter was compiled with <b><tt>CHECK_INTERRUPTS</tt></b>
+as described in <b><tt><a href="../src/gpcheck.h">gpcheck.h</a></tt></b>.
+</blockquote>
+
+<h3><a name="set_display_callback"></a><b><tt>gsapi_set_display_callback()</tt></b></h3>
+<blockquote>
+Set the callback structure for the <a href="#display">display</a>
+device. If the <a href="#display">display</a> device is used,
+this must be called after
+<b><tt>gsapi_new_instance()</tt></b>
+and before <b><tt>gsapi_init_with_args()</tt></b>.
+See <b><tt><a href="../src/gdevdsp.h">gdevdsp.h</a></tt></b>
+for more details.
+</blockquote>
+
+<h3><a name="init"></a><b><tt>gsapi_init_with_args()</tt></b></h3>
+<blockquote>
+Initialise the interpreter.
+This calls <b><tt>gs_main_init_with_args()</tt></b> in
+<b><tt><a href="../src/imainarg.c">imainarg.c</a></tt></b>.
+See below for <a href="#return_codes">return codes</a>.
+The arguments are the same as the "C" main function:
+argv[0] is ignored and the user supplied arguments
+are argv[1] to argv[argc-1].
+</blockquote>
+
+<h3><a name="run"></a><b><tt>gsapi_run_*()</tt></b></h3>
+<blockquote>
+The <b><tt>gsapi_run_*</tt></b> functions are like
+<b><tt>gs_main_run_*</tt></b> except that the error_object is omitted.
+If these functions return <= -100, either quit or a fatal
+error has occured. You must call <b><tt>gsapi_exit()</tt></b> next.
+The only exception is <b><tt>gsapi_run_string_continue()</tt></b>
+which will return <b><tt>e_NeedInput</tt></b> if all is well.
+See below for <a href="#return_codes">return codes</a>.
+</blockquote>
+
+<h3><a name="exit"></a><b><tt>gsapi_exit()</tt></b></h3>
+<blockquote>
+Exit the interpreter.
+This must be called on shutdown if <b><tt>gsapi_init_with_args()</tt></b>
+has been called, and just before <b><tt>gsapi_delete_instance()</tt></b>.
+</blockquote>
+
+<h3><a name="return_codes"></a>Return codes</h3>
+
+<p>
+The <b><tt>gsapi_init_with_args</tt></b>, <b><tt>gsapi_run_*</tt></b> and
+<b><tt>gsapi_exit</tt></b> functions return an integer code.
+
+<p>
+<table width="80%" align="center" cellpadding=0 cellspacing=0>
+<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Return codes from <b><tt>gsapi_*()</tt></b></font><hr>
+<tr valign=bottom>
+ <th align=left>Code
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th align=left>Status
+<tr> <td colspan=3><hr>
+<tr valign=top> <td align=left>0
+ <td>&nbsp;
+ <td>No errors
+<tr valign=top> <td align=left>e_Quit
+ <td>&nbsp;
+ <td>"<b><tt>quit</tt></b>" has been executed.
+ This is not an error.
+ <b><tt>gsapi_exit()</tt></b> must be called next.
+<tr valign=top> <td align=left>e_NeedInput
+ <td>&nbsp;
+ <td>More input is needed by
+ <b><tt>gsapi_run_string_continue()</tt></b>.
+ This is not an error.
+<tr valign=top> <td align=left>e_Info
+ <td>&nbsp;
+ <td>"<b><tt>gs -h</tt></b>" has been executed.
+ This is not an error.
+ <b><tt>gsapi_exit()</tt></b> must be called next.
+<tr valign=top> <td align=left>&lt; 0
+ <td>&nbsp;
+ <td>Error
+<tr valign=top> <td align=left>&lt;= -100
+ <td>&nbsp;
+ <td>Fatal error.
+<b><tt>gsapi_exit()</tt></b> must be called next.
+</table>
+</blockquote>
+
+<p>
+The <b><tt>gsapi_run_*()</tt></b> functions do not flush stdio.
+If you want to see output from Ghostscript you
+must do this explicitly as shown in the example below.
+
+<p>
+When executing a string with <b><tt>gsapi_run_string_*()</tt></b>,
+<b><tt>currentfile</tt></b> is the input from the string.
+Reading from <b><tt>%stdin</tt></b> uses the stdin callback.
+</blockquote>
+
+
+
+<h2><a name="Example_usage"></a>Example Usage</h2>
+Some overly simple examples of using the Ghostscript interpreter library are:
+
+<h3>Example 1</h3>
+<pre>
+/* Example of using GS DLL as a ps2pdf converter. */
+
+#ifdef _Windows
+/* Compile with:
+ * cl -D_Windows -Isrc -Febin\ps2pdf.exe ps2pdf.c bin\gsdll32.lib
+ */
+#include &lt;windows.h&gt;
+#define GSDLLEXPORT __declspec(dllimport)
+#endif
+
+#include "errors.h"
+#include "iapi.h"
+
+gs_main_instance *minst;
+
+int main(int argc, char *argv[])
+{
+ int code;
+ int exit_code;
+ const char * gsargv[10];
+ int gsargc;
+ gsargv[0] = "ps2pdf"; /* actual value doesn't matter */
+ gsargv[1] = "-dNOPAUSE";
+ gsargv[2] = "-dBATCH";
+ gsargv[3] = "-dSAFER";
+ gsargv[4] = "-sDEVICE=pdfwrite";
+ gsargv[5] = "-sOutputFile=out.pdf";
+ gsargv[6] = "-c";
+ gsargv[7] = ".setpdfwrite";
+ gsargv[8] = "-f";
+ gsargv[9] = "input.ps";
+ gsargc=10;
+
+ code = gsapi_new_instance(&minst, NULL);
+ if (code &lt; 0)
+ return 1;
+ code = gsapi_init_with_args(minst, gsargc, gsargv);
+ gsapi_exit(minst);
+
+ gsapi_delete_instance(minst);
+
+ if ((code == 0) || (code == e_Quit))
+ return 0;
+ return 1;
+}
+</pre>
+
+<h3>Example 2</h3>
+<pre>
+/* Similar to command line gs */
+
+#include &lt;stdio.h&gt;
+#include "errors.h"
+#include "iapi.h"
+
+/* stdio functions */
+static int GSDLLCALL
+gsdll_stdin(void *instance, char *buf, int len)
+{
+ int ch;
+ int count = 0;
+ while (count &lt; len) {
+ ch = fgetc(stdin);
+ if (ch == EOF)
+ return 0;
+ *buf++ = ch;
+ count++;
+ if (ch == '\n')
+ break;
+ }
+ return count;
+}
+
+static int GSDLLCALL
+gsdll_stdout(void *instance, const char *str, int len)
+{
+ fwrite(str, 1, len, stdout);
+ fflush(stdout);
+ return len;
+}
+
+static int GSDLLCALL
+gsdll_stderr(void *instance, const char *str, int len)
+{
+ fwrite(str, 1, len, stderr);
+ fflush(stderr);
+ return len;
+}
+
+gs_main_instance *minst;
+const char start_string[] = "systemdict /start get exec\n";
+
+int main(int argc, char *argv[])
+{
+ int code;
+ int exit_code;
+
+ code = gsapi_new_instance(&minst, NULL);
+ if (code < 0)
+ return 1;
+ gsapi_set_stdio(minst, gsdll_stdin, gsdll_stdout, gsdll_stderr);
+ code = gsapi_init_with_args(minst, argc, argv);
+ if (code == 0)
+ code = gsapi_run_string(minst, start_string, 0, &exit_code);
+ gsapi_exit(minst);
+
+ gsapi_delete_instance(minst);
+
+ if ((code == 0) || (code == e_Quit))
+ return 0;
+ return 1;
+}
+</pre>
+
+<h3>Example 3</h3>
+
+Replace main() in either of the above with the following code,
+showing how you can feed Ghostscript piecemeal:
+<pre>
+const char *command = "1 2 add == flush\n";
+
+int main(int argc, char *argv[])
+{
+ int code;
+ int exit_code;
+
+ code = gsapi_new_instance(&minst, NULL);
+ if (code < 0)
+ return 1;
+ code = gsapi_init_with_args(minst, argc, argv);
+
+ if (code == 0) {
+ gsapi_run_string_begin(minst, 0, &exit_code);
+ gsapi_run_string_continue(minst, command, strlen(command), 0, &exit_code);
+ gsapi_run_string_continue(minst, "qu", 2, 0, &exit_code);
+ gsapi_run_string_continue(minst, "it", 2, 0, &exit_code);
+ gsapi_run_string_end(minst, 0, &exit_code);
+ }
+
+ gsapi_exit(minst);
+
+ gsapi_delete_instance(minst);
+
+ if ((code == 0) || (code == e_Quit))
+ return 0;
+ return 1;
+}
+</pre>
+
+
+<h2><a name="Multiple_threads"></a>Multiple threads</h2>
+The Ghostscript library should have been compiled with a
+thread safe run time library.
+Synchronisation of threads is entirely up to the caller.
+
+<h2><a name="stdio"></a>Standard input and output</h2>
+<p>
+When using the Ghostscript interpreter library interface, you have a
+choice of two standard input/output methods.
+<ul>
+<li>If you do nothing, the "C" stdio will be used.
+<li>If you use <b><tt>gsapi_set_stdio()</tt></b>, all stdio will
+ be redirected to the callback functions you provide.
+ This would be used in a graphical user interface environment
+ where stdio is not available, or where you wish to process
+ Ghostscript input or output.
+</ul>
+<p>
+The callback functions are described in
+<a href="../src/iapi.h"><b><tt>iapi.h</tt></b></a>.
+
+
+<h2><a name="display"></a>Display device</h2>
+<p>
+The <b><tt>display</tt></b> device is available for use with
+the Ghostscript interpreter library. This is described in the file
+<b><tt><a href="../src/gdevdsp.h">gdevdsp.h</a></tt></b>.
+This device provides you with access to the raster output of
+Ghostscript. It is your responsibility to copy this raster
+to a display window or printer.
+<p>
+To use this device, you must provide a callback structure
+with addresses of a number of callback functions.
+The address of the callback structure is provided using
+<b><tt>gsapi_set_display_callback()</tt></b>.
+This must be called after
+<b><tt>gsapi_new_instance()</tt></b>
+and before
+<b><tt>gsapi_init_with_args()</tt></b>.
+<p>
+The callbacks are for device open, close, resize, sync, page,
+memory allocation and updating.
+Each callback function contains a handle can be set using
+<blockquote>
+ -dDisplayHandle=1234
+</blockquote>
+<p>
+The device raster format can be configured using
+<blockquote>
+ -dDisplayFormat=NNNN
+</blockquote>
+Options include
+<ul>
+<li> native, gray, RGB or CMYK color spaces.
+<li> alpha byte (ignored).
+<li> 1 to 16 bits/component.
+<li> bigendian (RGB) or littleendian (BGR) order.
+<li> top first or bottom first raster.
+<li> 16 bits/pixel with 555 or 565 bitfields.
+</ul>
+The format values are described in
+<b><tt><a href="../src/gdevdsp.h">gdevdsp.h</a></tt></b>.
+The format is flexible enough to support common Windows, OS/2, GNU/Linux
+and Mac raster formats. To select the display device with a
+Windows 24-bit RGB raster:
+<pre>
+ char **nargv;
+ char arg1[64];
+ char arg2[64];
+ char arg3[64];
+ code = gsapi_new_instance(&minst, NULL);
+ gsapi_set_stdio(minst, gsdll_stdin, gsdll_stdout, gsdll_stderr);
+ code = gsapi_set_display_callback(minst, &display_callback);
+ sprintf(arg1, "-sDEVICE=display");
+ sprintf(arg2, "-dDisplayHandle=%d", 0);
+ sprintf(arg3, "-dDisplayFormat=%d",
+ DISPLAY_COLORS_RGB | DISPLAY_ALPHA_NONE | DISPLAY_DEPTH_8 |
+ DISPLAY_LITTLEENDIAN | DISPLAY_BOTTOMFIRST);
+ nargv = (char **)malloc((argc + 4) * sizeof(char *));
+ nargv[0] = argv[0];
+ nargv[1] = arg1;
+ nargv[2] = arg2;
+ nargv[3] = arg3;
+ memcpy(nargv + 4, argv + 1, argc * sizeof(char *));
+ argc += 3;
+ code = gsapi_init_with_args(minst, argc, nargv);
+</pre>
+
+<p>
+The display device provides you with the address and size of the
+raster using the <b><tt>display_size()</tt></b> callback.
+You are then responsible for displaying this raster.
+Some examples are in
+<b><tt><a href="../src/dwmain.c">dwmain.c</a></tt></b> (Windows),
+<b><tt><a href="../src/dpmain.c">dpmain.c</a></tt></b> (OS/2) and
+<b><tt><a href="../src/dxmain.c">dxmain.c</a></tt></b> (X11/GNU/Linux).
+
+<p>
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+
+<p>
+<small>Copyright &copy; 2001 artofcode LLC. All rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/C-style.htm b/Master/xemtex/doc/ghostscript/C-style.htm
new file mode 100644
index 00000000000..0e17e4d5e0e
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/C-style.htm
@@ -0,0 +1,1588 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Ghostscript C coding guidelines</title>
+<!-- $Id: C-style.htm,v 1.21.2.11.2.5 2003/05/17 14:38:59 giles Exp $ -->
+<!-- Originally: c-style.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Ghostscript C coding guidelines</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Introduction">Introduction</a>
+<li><a href="#C_language">C language do's and don'ts</a>
+<ul>
+<li>Preprocessor:
+ <a href="#Conditionals">Conditionals</a>,
+ <a href="#Macros">Macros</a>,
+ <a href="#Preprocessor_other">Other</a>
+<li><a href="#Lexical_elements">Lexical elements</a>
+<li><a href="#Scoping">Scoping</a>
+<li>Data types:
+ <a href="#Scalars">Scalars</a>,
+ <a href="#Arrays">Arrays</a>,
+ <a href="#Typedefs">Typedefs</a>,
+ <a href="#Structures">Structures</a>,
+ <a href="#Unions">Unions</a>
+<li><a href="#Expressions">Expressions</a>
+<li><a href="#Statements">Statements</a>
+<li><a href="#Procedures">Procedures</a> (prototypes and definitions)
+<li><a href="#Standard_library">Standard library</a>
+</ul>
+<li><a href="#Language_extensions">Language extensions</a>
+<li><a href="#Stylistic_conventions">Stylistic conventions</a>
+<ul>
+<li>Formatting:
+ <a href="#Indentation">Indentation</a>,
+ <a href="#Spaces">Spaces</a>,
+ <a href="#Parentheses">Parentheses</a>
+<li><a href="#Preprocessor_style">Preprocessor</a>
+<li><a href="#Naming">Naming</a>
+<li><a href="#Types">Types</a>
+<li><a href="#Procedures_style">Procedures</a>,
+<li>Miscellany:
+ <a href="#Local_variables">Local variables</a>,
+ <a href="#Compiler_warnings">Compiler warnings</a>
+</ul>
+<li><a href="#File_structuring">File structuring and naming</a>
+<ul>
+<li><a href="#All_files">All files</a>
+<li><a href="#Makefiles">Makefiles</a>
+<li><a href="#General_C_code">General C Code</a>
+<li><a href="#Headers">Headers (<b><tt>.h</tt></b> files)</a>
+<li><a href="#Source">Source (<b><tt>.c</tt></b> files)</a>
+</ul>
+<li><a href="#Conventions">Ghostscript conventions</a>
+<ul>
+<li><a href="#Specific_names">Specific names</a>:
+ <a href="#code"><b><tt>code</tt></b></a>,
+ <a href="#status"><b><tt>status</tt></b></a>
+<li><a href="#Structure_type_descriptors">Structure type descriptors</a>
+<li><a href="#Objects">"Objects"</a>
+<li><a href="#Error_handling">Error handling</a>
+</ul>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>
+For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="Introduction"></a>Introduction</h2>
+
+<p>
+This document describes Ghostscript's C coding conventions. It is primarily
+<em>prescriptive</em>, documenting what developers should do when writing
+new code; the companion developer documentation (<a
+ href="Develop.htm">Develop.htm</a>) is primarily <em>descriptive</em>,
+documenting the way things are.
+
+<p>
+We encourage following the general language usage and stylistic rules for
+any code that will be integrated with Ghostscript, even if the code doesn't
+use Ghostscript's run-time facilities or have anything to do with
+PostScript, PDF, or page description languages. Ghostscript itself follows
+some additional conventions; these are documented separately under "<a
+href="#Conventions">Ghostscript conventions</a>" below.
+
+<hr>
+
+<h2><a name="C_language"></a>C language do's and don'ts</h2>
+
+<p>
+There are several different versions of the C language, and even of the ANSI
+C standard. Ghostscript versions through 7.0 were designed to compile on
+pre-ANSI compilers as well as on many compilers that implemented the ANSI
+standard with varying faithfulness. Ghostscript versions since 7.0 do not
+cater for pre-ANSI compilers: they must conform to the ANSI 1989 standard
+(ANS X3.159-1989), with certain restrictions and a few conventional
+additions.
+
+<h3>Preprocessor</h3>
+
+<h4><a name="Conditionals"></a>Conditionals</h4>
+
+Restrictions:
+
+<ul>
+
+<li>Don't assume that <b><tt>#if</tt></b> will treat undefined names as 0.
+While the ANSI standard requires this, it may produce a warning.
+
+<li>In <b><tt>.c</tt></b> files, don't use preprocessor conditionals that
+test for individual platforms or compilers. Use them only in header files
+named xxx<b><tt>_.h</tt></b>.
+
+</ul>
+
+<h4><a name="Macros"></a>Macros</h4>
+
+<p>
+Restrictions:
+
+<ul>
+
+<li>Don't redefine a macro, even with the same definition, without using
+<b><tt>#undef</tt></b>.
+
+<li><b><tt>CAPITALIZE</tt></b> macro names unless there is a good reason not
+to.
+
+<li>Don't use a macro call within a macro argument if the call expands to a
+token sequence that includes any commas not within parentheses: this
+produces different results depending on whether the compiler expands the
+inner call before or after the argument is substituted into the macro body.
+(The ANSI standard says that calls must be expanded after substitution, but
+some compilers do it the other way.)
+
+<li>Don't use macro names, even inadvertently, in string constants. Some
+compilers erroneously try to expand them.
+
+<li>Don't use macros to define shorthands for casted pointers. For
+instance, avoid
+
+<blockquote><b><tt>
+#define fdev ((gx_device_fubar *)dev)
+</tt></b></blockquote>
+
+<p>
+and instead use
+
+<blockquote><b><tt>
+gx_device_fubar * const fdev = (gx_device_fubar *)dev;
+</tt></b></blockquote>
+
+<p>
+The use of <b><tt>const</tt></b> alerts the reader that this is effectively
+a synonym.
+
+<li>If a macro generates anything larger than a single expression (that is,
+one or more statements), surround it with <b><tt>BEGIN</tt></b> and
+<b><tt>END</tt></b>. These work around the fact that simple statements and
+compound statements in C can't be substituted for each other syntactically.
+
+</ul>
+
+<h3><a name="Preprocessor_other"></a>Other</h3>
+
+<p>
+Restrictions:
+
+<ul>
+
+<li>Only use <b><tt>#pragma</tt></b> in files that are explicitly identified
+as being platform-dependent. Many compilers complain if this is used at
+all, and some complain if they don't recognize the specific pragma being
+requested (both incorrect according to the ANSI standard).
+
+</ul>
+
+<h3><a name="Lexical_elements"></a>Lexical elements</h3>
+
+<p>
+Do not use:
+
+<ul>
+
+<li>ANSI trigraphs (??x)
+<li>Nested comments (/* /* */ */) (not ANSI compliant, but often accepted)
+<li>Multi-character character constants ('abc')
+<li>Wide-character character or string constants (L'x', L"x")
+
+</ul>
+
+<p>
+Restrictions:
+
+<ul>
+
+<li>Procedure and static variable names must be 31 characters or less.
+
+<li>Externally visible procedure and variable names must be unique in the
+first 23 characters.
+
+</ul>
+
+<h3><a name="Scoping"></a>Scoping (extern, static, ...)</h3>
+
+<p>
+Do not use:
+
+<ul>
+
+<li><b><tt>register</tt></b>
+
+</ul>
+
+<p>
+Restrictions:
+
+<ul>
+
+<li>Do not allow a global variable (constant) to have more than one
+non-<b><tt>extern</tt></b> definition, even though some ANSI C compilers
+allow this. Every global constant should have exactly one definition, in a
+<b><tt>.c</tt></b> file, and preferably just one <b><tt>extern</tt></b>
+declaration, in a header file.
+
+<li>Use <b><tt>private</tt></b> instead of <b><tt>static</tt></b> for
+procedures and variables declared at the outermost scope of a file. This
+allows making such constructs either visible or invisible to profilers by
+changing a single <b><tt>#define</tt></b>.
+
+<li><b><tt>static</tt></b> or <b><tt>private</tt></b> variables must be
+<b><tt>const</tt></b> and initialized: non-<b><tt>const</tt></b> statically
+allocated variables are incompatible with reentrancy, and we're in the
+process of eliminating all of them.
+
+<li>Do not use <b><tt>extern</tt></b> in <b><tt>.c</tt></b> files, only in
+<b><tt>.h</tt></b> files, unless you have a very good reason for it (e.g.,
+as in <a href="../src/iconf.c">iconf.c</a>). There are too many such
+<b><tt>extern</tt></b>s in the code now: we are eliminating them over time.
+
+<li>Do not declare the same name as both <b><tt>static</tt></b>
+(<b><tt>private</tt></b>) and non-<b><tt>static</tt></b> within the same
+compilation. (Some compilers complain, some do not.) This is especially a
+problem for procedures: it is easy to declare a procedure as
+<b><tt>private</tt></b> near the beginning of a file and accidentally not
+declare it <b><tt>private</tt></b> where it is defined later in the file.
+
+<li>Even though the ANSI standard allows initialized external declarations
+(<b><tt>extern&nbsp;int&nbsp;x&nbsp;=&nbsp;0</tt></b>), don't use them.
+
+</ul>
+
+<h3><a name="Scalars"></a>Scalars</h3>
+
+<p>
+Restrictions:
+
+<ul>
+
+<li>Avoid using <b><tt>char</tt></b>, except for <b><tt>char&nbsp;*</tt></b>
+for a pointer to a string. Don't assume that <b><tt>char</tt></b> is
+signed; also don't assume it is unsigned.
+
+<li>Never cast a <b><tt>float</tt></b> to a <b><tt>double</tt></b>
+explicitly. ANSI compilers in their default mode do all floating point
+computations in double precision, and handle such casts automatically.
+
+<li>Don't use <b><tt>long long</tt></b>: even though it is in the ANSI
+standard, not all compilers support it. Use <b><tt>bits64</tt></b> instead
+(see below under "<a href="#Language_extensions">Language extensions</a>").
+
+<li>Don't assume anything about whether <b><tt>sizeof(long)</tt></b> is less
+than, equal to, or greater than <b><tt>sizeof(ptr)</tt></b>. (However, you
+can make such comparisons in preprocessor conditionals using
+<b><tt>ARCH_SIZEOF_LONG</tt></b> and <b><tt>ARCH_SIZEOF_PTR</tt></b>.)
+
+</ul>
+
+<h3><a name="Arrays"></a>Arrays</h3>
+
+<p>
+Restrictions:
+
+<ul>
+
+<li>Don't declare arrays of size 0. (The newer ANSI standard allows this,
+but the older one doesn't.)
+
+<li>Don't declare an array of size 1 at the end of a structure to indicate
+that a variable-size array follows.
+
+<li>Don't declare initialized <b><tt>auto</tt></b> arrays.
+
+</ul>
+
+<h3><a name="Typedefs"></a>Typedefs</h3>
+
+<p>
+Restrictions:
+
+<ul>
+
+<li>Don't use <b><tt>typedef</tt></b> for function types, such as
+
+<blockquote>
+<b><tt>typedef int proc_xyz_t(double, int *);</tt></b>
+</blockquote>
+
+<p>Many compilers don't handle this correctly -- they will give errors, or
+do the wrong thing, when declaring variables of type
+<b><tt>proc_xyz_t</tt></b> and/or <b><tt>proc_xyz_t *</tt></b>. Instead, do
+this:
+
+<blockquote>
+<b><tt>#define PROC_XYZ(proc) int proc(double, int *)<br>
+PROC_XYZ(some_proc); /* declare a procedure of this type */<br>
+typedef PROC_XYZ((*proc_xyz_ptr_t)); /* define a type for procedure ptrs */<br>
+<br>
+proc_xyz_ptr_t pp; /* pointer to procedure */</tt></b>
+</blockquote>
+
+<li>Don't redefine <b><tt>typedef</tt></b>'ed names, even with the same
+definition. Some compilers complain about this, and the standard doesn't
+allow it.
+
+</ul>
+
+<h3><a name="Structures"></a>Structures</h3>
+
+<p>
+Restrictions:
+
+<li>Don't use anonymous structures if you can possibly avoid it, except
+occasionally as components of other structures. Ideally, use the
+<b><tt>struct</tt></b> keyword only for declaring named structure types,
+like this:
+
+<blockquote>
+<b><tt>typedef struct xxx_s {</tt></b><br>
+&nbsp;&nbsp;&nbsp;... members ...<br>
+<b><tt>} xxx_t;</tt></b>
+</blockquote>
+
+<li>Use <b><tt>struct</tt></b> only when declaring structure types, never
+for referring to them (e.g., never declare a variable as type
+<b><tt>struct&nbsp;xxx_s&nbsp;*</tt></b>).
+
+<li>Don't assume that the compiler will (or won't) insert padding in
+structures to align members for best performance. To preserve alignment,
+only declare structure members that are narrower than an <b><tt>int</tt></b>
+if there will be a lot of instances of that structure in memory. For such
+structures, insert <b><tt>byte</tt></b> and/or <b><tt>short</tt></b> padding
+members as necessary to re-establish <b><tt>int</tt></b> alignment.
+
+<li>Don't declare initialized <b><tt>auto</tt></b> structures.
+
+</ul>
+
+<h3><a name="Unions"></a>Unions</h3>
+
+<p>
+Restrictions:
+
+<ul>
+
+<li>Use unions only as components of structures, not as typedefs in their
+own right.
+
+<li>Don't attempt to initialize unions: not all compilers support this, even
+though it is in the 1989 ANSI standard.
+
+</ul>
+
+<h3><a name="Expressions"></a>Expressions</h3>
+
+<p>
+Restrictions:
+
+<ul>
+
+<li>Don't assign a larger integer data type to a smaller one without a cast
+(<b><tt>int_x&nbsp;=&nbsp;long_y</tt></b>).
+
+<li>It's OK to use the address of a structure or array element
+(<b><tt>&p->e</tt></b>, <b><tt>&a[i]</tt></b>) locally, or pass it to a
+procedure that won't store it, but don't store such an address in allocated
+storage unless you're very sure of what you're doing.
+
+<li>Don't use conditional expressions with structure or union values.
+(Pointers to structures or unions are OK.)
+
+<li>For calling a variable or parameter procedure, use
+<b><tt>ptr-&gt;func(...)</tt></b>. Some old code uses explicit indirection,
+<b><tt>(*ptr-&gt;func)(...)</tt></b>: don't use this in new code.
+
+<li>Don't write expressions that depend on order of evaluation, unless the
+order is created explicitly by use of <b><tt>||</tt></b>,
+<b><tt>&amp;&amp;</tt></b>, <b><tt>?:</tt></b>, <b><tt>,</tt></b>, or
+function nesting (the arguments of a function must be evaluated before the
+function is called). In particular, don't assume that the arguments of a
+function will be evaluated left-to-right, or that the left side of an
+assignment will be evaluated before the right.
+
+<li>Don't mix integer and enumerated types ad lib: treat enumerated types as
+distinct from integer types, and use casts to convert between the two.
+(Some compilers generate warnings if you do not do this.)
+
+</ul>
+
+<h3><a name="Statements"></a>Statements</h3>
+
+<p>
+Restrictions:
+
+<ul>
+
+<li>If you use an expression as a statement, other than an assignment or a
+function call with <b><tt>void</tt></b> return value, enclose it explicitly
+in <b><tt>DISCARD()</tt></b>.
+
+<li>The type of the operand of a <b><tt>switch</tt></b> must match the type
+of the case labels, whether the labels are <b><tt>int</tt></b>s or the
+members of an <b><tt>enum</tt></b> type. (Use a cast if necessary.)
+
+<li>It is OK for one case of a switch to "fall through" into another (i.e.,
+for the statement just before a case label not to be a control transfer),
+but a comment <b><tt>/*&nbsp;falls&nbsp;through&nbsp;*/</tt></b> is
+required.
+
+<li>If you are returning an error code specified explicitly (e.g.,
+<b><tt>return&nbsp;gs_error_rangecheck</tt></b> or
+<b><tt>return&nbsp;e_rangecheck</tt></b>), use
+<b><tt>return_error()</tt></b> rather than plain <b><tt>return</tt></b>.
+However, if the program is simply propagating an error code generated
+elsewhere, as opposed to generating the error, use <b><tt>return</tt></b>
+(e.g., <b><tt>if&nbsp;(code&nbsp;<&nbsp;0)&nbsp;return&nbsp;code</tt></b>).
+
+</ul>
+
+<h3><a name="Procedures"></a>Procedures</h3>
+
+<p>
+Restrictions:
+
+<ul>
+
+<li>Provide a prototype for every procedure, and make sure the prototype is
+available at every call site. If the procedure is local to a file
+(<b><tt>private</tt></b>), the prototype should precede the procedure, in
+the same file; if the procedure is global, the prototype should be in a
+header file.
+
+<li>If a procedure parameter is itself a procedure, do list its parameter
+types rather than just using <b><tt>()</tt></b>. For example,
+
+<blockquote><b><tt>
+int foo(int (*callback)(int, int));
+</tt></b></blockquote>
+
+<p>
+rather than just
+
+<blockquote><b><tt>
+int foo(int (*callback)());
+</tt></b></blockquote>
+
+<li>Don't use the <b><tt>P</tt></b>* macros in new code. (See the
+Procedures section of <a href="#Language_extensions">Language extensions</a>
+below for more information.)
+
+<li>Always provide an explicit return type for procedures, in both the
+prototype and the definition: don't rely on the implicit declaration as
+<b><tt>int</tt></b>.
+
+<li>Don't use <b><tt>float</tt></b> as the return type of a procedure,
+unless there's a special reason. Floating point hardware typically does
+everything in double precision internally and has to do extra work to
+convert between double and single precision.
+
+<li>Don't declare parameters as being of type <b><tt>float</tt></b>,
+<b><tt>short</tt></b>, or <b><tt>char</tt></b>. If you do this and forget
+to include the prototype at a call site, ANSI compilers will generate
+incompatible calling sequences. Use <b><tt>floatp</tt></b> (a synonym for
+<b><tt>double</tt></b>, mnemonic for "float parameter") instead of
+<b><tt>float</tt></b>, and use <b><tt>int</tt></b> or <b><tt>uint</tt></b>
+instead of <b><tt>short</tt></b> or <b><tt>char</tt></b>.
+
+</ul>
+
+<h3><a name="Standard_library"></a>Standard library</h3>
+
+<p>
+Restrictions:
+
+<ul>
+
+<li>Only use library features that are documented in the established ANSI
+standard (e.g., Harbison & Steele's book). Do not use procedures that are
+"standards" promulgated by Microsoft (e.g., <b><tt>stricmp</tt></b>), or
+originate in BSD Unix (e.g., <b><tt>strcasecmp</tt></b>), or were added in
+later versions of the standard such as C 9X.
+
+<li>Do not use any features from <b><tt>stdio.h</tt></b> that assume the
+existence of <b><tt>stdin</tt></b>, <b><tt>stdout</tt></b>, or
+<b><tt>stderr</tt></b>. See <a href="../src/gsio.h">gsio.h</a> for the full
+list. Instead, use <b><tt>gs_stdin</tt></b> et al.
+
+</ul>
+
+<hr>
+
+<h2><a name="Language_extensions"></a>Language extensions</h2>
+
+<h3>Scoping</h3>
+
+<dl>
+
+<dt><b><tt>inline</tt></b>
+
+<dd><b><tt>inline</tt></b> is available even if the compiler does not
+support it. Be aware, however, that it may have no effect. In particular,
+do not use <b><tt>inline</tt></b> in header files. Instead, use the
+<b><tt>extern_inline</tt></b> facility described just below.
+
+<dt><b><tt>extern_inline</tt></b>
+
+<dd>Compilers that do support <b><tt>inline</tt></b> vary in how they decide
+whether to (also) compile a closed-code copy of the procedure. Because of
+this, putting an <b><tt>inline</tt></b> procedure in a header file may
+produce multiple closed copies, causing duplicate name errors at link time.
+<b><tt>extern_inline</tt></b> provides a safe way to put
+<b><tt>inline</tt></b> procedures in header files, regardless of compiler.
+Unfortunately, the only way we've found to make this fully portable involves
+a fair amount of boilerplate. For details, please see <a
+href="../src/stdpre.h">stdpre.h</a>.
+
+<dt><b><tt>private</tt></b>
+
+<dd><b>Use <tt>private</tt></b> instead of <b><tt>static</tt></b> for all
+file-local procedures, and also for file-local variables defined at the
+outermost level. However, use <b><tt>static</tt></b>, not
+<b><tt>private</tt></b>, for variables defined within a procedure.
+
+<p>
+<b><tt>private</tt></b> is normally #define'd as <b><tt>static</tt></b>.
+However, it can also be #define'd as empty, which allows profilers to
+measure all procedures, and 'nm' to list all interesting statically
+allocated variables, not just public ones.
+
+</dl>
+
+<h3>Scalar types</h3>
+
+<dl>
+
+<dt><b><tt>bool, true, false</tt></b>
+
+<dd><b><tt>bool</tt></b> is intended as a Boolean type, with canonical
+values <b><tt>true</tt></b> and <b><tt>false</tt></b>. In a more reasonable
+language, such as Java, <b><tt>bool</tt></b> is an enumerated type requiring
+an explicit cast to or from <b><tt>int</tt></b>; however, because C's
+conditionals are defined as producing <b><tt>int</tt></b> values, we can't
+even define <b><tt>bool</tt></b> as a C <b><tt>enum</tt></b> without
+provoking compiler warnings.
+
+<p>
+Even though <b><tt>bool</tt></b> is a synonym for <b><tt>int</tt></b>, treat
+them as conceptually different types:
+
+<ul>
+<li>Initialize or set <b><tt>bool</tt></b> variables to <b><tt>true</tt></b>
+or <b><tt>false</tt></b>, not 0 or 1.
+<li>Use the Boolean operators <b><tt>!</tt></b>, <b><tt>&&</tt></b>,
+and <b><tt>||</tt></b> only with Booleans. Don't use the idiom
+<b><tt>!!x</tt></b> to create a Boolean that is true iff <b><tt>x</tt></b>
+!= 0: use <b><tt>x != 0</tt></b>.
+<li>Use an explicit <b><tt>(int)</tt></b> cast to convert a Boolean to an
+integer.
+</ul>
+
+<dt><b><tt>byte, ushort, uint, ulong</tt></b>
+
+<dd>These types are simply shorthands for <b><tt>unsigned char, short, int,
+long</tt></b>.
+
+<dt><b><tt>floatp</tt></b>
+
+<dd>This is a synonym for <b><tt>double</tt></b>. It should be used for,
+and only for, procedure parameters that would otherwise be
+<b><tt>float</tt></b>. (As noted above, procedure parameters should not be
+declared as <b><tt>float</tt></b>.)
+
+<dt><b><tt>bits8, bits16, bits32</tt></b>
+
+<dd>These are unsigned integer types of the given width. Use them wherever
+the actual width matters: do <em>not</em>, for example, use
+<b><tt>short</tt></b> assuming that it is 16 bits wide.
+
+<dt><b><tt>bits64</tt></b>
+
+<dd><strong>****** NOT IMPLEMENTED YET ******</strong>
+This is an unsigned 64-bit integer type, but it may not be available on all
+platforms. Any code that uses this type should be surrounded by
+<b><tt>#if&nbsp;ARCH_HAS_BITS64</tt></b>.
+
+</dl>
+
+<h3>Procedures</h3>
+
+<dl>
+
+<dt><b><tt>P0(), P1(p1), ..., P16(p1, ..., p16)</tt></b> [deprecated]
+
+<dd>Nearly all existing code uses these macros for the parameter lists of
+procedure prototypes, e.g.,
+<b><tt>int&nbsp;proc(P2(int&nbsp;a,&nbsp;int&nbsp;b))</tt></b>, to provide
+compatibility with pre-ANSI, a.k.a. "traditional" or "K &amp; R", compilers.
+Since only ANSI compilers are now supported, don't use these macros in new
+code: use the ANSI standard syntax
+<b><tt>int&nbsp;proc(int&nbsp;a,&nbsp;int&nbsp;b)</tt></b>.
+
+</dl>
+
+<hr>
+
+<h2><a name="Stylistic_conventions"></a>Stylistic conventions</h2>
+
+<p>
+Ghostscript's coding rules cover not only the use of the language, but also
+many stylistic issues like the choice of names and the use of whitespace.
+The stylistic rules are meant to produce code that is easy to read. It's
+important to observe them as much as possible in order to maintain a
+consistent style, but if you find these rules getting in your way or
+producing ugly-looking results once in a while, it's OK to break it.
+
+<h3><a name="Formatting"></a>Formatting</h3>
+
+<h4><a name="Indentation"></a>Indentation</h4>
+
+<p>
+We've formatted all of our code using the GNU <b><tt>indent</tt></b> program.
+
+<blockquote><b><tt>
+indent&nbsp;-bad&nbsp;-nbap&nbsp;-nsob&nbsp;-br&nbsp;-ce&nbsp;-cli4&nbsp;-npcs&nbsp;-ncs&nbsp;\<br>
+&nbsp;&nbsp;&nbsp;-i4&nbsp;-di0&nbsp;-psl&nbsp;-lp&nbsp;-lps&nbsp;somefile.c
+</tt></b></blockquote>
+
+<p>
+does a 98% accurate job of producing our preferred style. Unfortunately,
+there are bugs in all versions of GNU <b><tt>indent</tt></b>, requiring
+both pre- and post-processing of the code. The <b><tt>gsindent</tt></b>
+script in the Ghostscript fileset contains the necessary workarounds.
+
+<p>
+Put indentation points every 4 spaces, with 8 spaces = 1 tab stop.
+
+<p>
+For assignments (including chain assignments), put the entire statement on
+one line if it will fit; if not, break it after a <b><tt>=</tt></b> and
+indent all the following lines. I.e., format like this:
+
+<blockquote>
+var1&nbsp;<b><tt>=</tt></b>&nbsp;value<b><tt>;</tt></b><br>
+var1&nbsp;<b><tt>=</tt></b>&nbsp;var2&nbsp;<b><tt>=</tt></b>&nbsp;value<b><tt>;</tt></b><br>
+var1&nbsp;<b><tt>=</tt></b><br>
+&nbsp;&nbsp;&nbsp;&nbsp;value<b><tt>;</tt></b><br>
+var1&nbsp;<b><tt>=</tt></b><br>
+&nbsp;&nbsp;&nbsp;&nbsp;var2&nbsp;<b><tt>=</tt></b>&nbsp;value<b><tt>;</tt></b><br>
+var1&nbsp;<b><tt>=</tt></b>&nbsp;var2&nbsp;<b><tt>=</tt></b><br>
+&nbsp;&nbsp;&nbsp;&nbsp;value<b><tt>;</tt></b>
+</blockquote>
+
+<p>
+But not like this:
+
+<blockquote>
+var1&nbsp;<b><tt>=</tt></b><br>
+var2&nbsp;<b><tt>=</tt></b> value<b><tt>;</tt></b>
+</blockquote>
+
+<p>
+Indent in-line blocks thus:
+
+<blockquote>
+<b><tt>{</tt></b><br>
+&nbsp;&nbsp;&nbsp;... declarations ...<br>
+&nbsp;&nbsp;&nbsp;{{ blank line if any declarations above }}<br>
+&nbsp;&nbsp;&nbsp;... statements ...<br>
+<b><tt>}</tt></b>
+</blockquote>
+
+<p>
+Similarly, indent procedures thus:
+
+<blockquote>
+return_type<br>
+proc_name(... arguments ...)<br>
+<b><tt>{</tt></b><br>
+&nbsp;&nbsp;&nbsp;... declarations ...<br>
+&nbsp;&nbsp;&nbsp;{{ blank line if any declarations above }}<br>
+&nbsp;&nbsp;&nbsp;... statements ...<br>
+<b><tt>}</tt></b>
+</blockquote>
+
+<p>
+If a control construct (<b><tt>if</tt></b>, <b><tt>do</tt></b>,
+<b><tt>while</tt></b>, or <b><tt>for</tt></b>) has a one-line body, use
+this:
+
+<blockquote>
+... control construct ...<br>
+&nbsp;&nbsp;&nbsp;... subordinate simple statement ...
+</blockquote>
+
+<p>
+If it has a multi-line body, use this:
+
+<blockquote>
+... control construct ... <b><tt>{</tt></b><br>
+&nbsp;&nbsp;&nbsp;... subordinate code ...<br>
+<b><tt>}</tt></b>
+</blockquote>
+
+<p>
+If the subordinate code has declarations, see blocks above.
+
+<p>
+For if-else statements, do this:
+
+<blockquote>
+<b><tt>if (</tt></b> ...<b><tt> ) {</tt></b><br>
+&nbsp;&nbsp;&nbsp;... subordinate code ...<br>
+<b><tt>} else if (</tt></b> ...<b><tt> ) {</tt></b><br>
+&nbsp;&nbsp;&nbsp;... subordinate code ...<br>
+<b><tt>} else {</tt></b><br>
+&nbsp;&nbsp;&nbsp;... subordinate code ...<br>
+<b><tt>}</tt></b>
+</blockquote>
+
+<p>
+When there are more than two alternatives, as in the example above, use the
+above ("parallel") syntax rather than the following ("nested") syntax:
+
+<blockquote>
+<b><tt>if (</tt></b> ...<b><tt> ) {</tt></b><br>
+&nbsp;&nbsp;&nbsp;... subordinate code ...<br>
+<b><tt>} else {</tt></b><br>
+<b><tt>&nbsp;&nbsp;&nbsp;if (</tt></b> ...<b><tt> ) {</tt></b><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... subordinate code ...<br>
+<b><tt>&nbsp;&nbsp;&nbsp;} else {</tt></b><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... subordinate code ...<br>
+<b><tt>&nbsp;&nbsp;&nbsp;}</tt></b><br>
+<b><tt>}</tt></b>
+</blockquote>
+
+<p>
+Similarly, for do-while statements, do this:
+
+<blockquote>
+<b><tt>do {</tt></b><br>
+&nbsp;&nbsp;&nbsp;... body ...<br>
+<b><tt>} while (</tt></b> ... condition ... <b><tt>);</tt></b>
+</blockquote>
+
+<h4><a name="Spaces"></a>Spaces</h4>
+
+<p>
+Do put a space:
+<ul>
+<li>after every comma and semicolon, unless it ends a line;
+<li>around every binary operator other than "<b><tt>-&gt;</tt></b>" and
+"<b><tt>.</tt></b>", although you can omit the spaces around the innermost
+operator in a nested expression if you like;
+<li>on both sides of the parentheses of an <b><tt>if</tt></b>, <b><tt>for</tt></b>, or <b><tt>while</tt></b>.
+</ul>
+
+<p>
+Don't put a space:
+<ul>
+<li>at the end of a line;
+<li>before a comma or semicolon;
+<li>after unary prefix operators;
+<li>before the parenthesis of a macro or procedure call.
+</ul>
+
+<h4><a name="Parentheses"></a>Parentheses</h4>
+
+<p>
+Parentheses are important in only a few places:
+
+<ul>
+<li>Around the inner subexpressions in expressions that mix
+<b><tt>&amp;&amp;</tt></b> and <b><tt>||</tt></b>, even if they are not
+required by precedence, for example
+
+<blockquote><b><tt>
+(xx &amp;&amp; yy) || zz
+</tt></b></blockquote>
+
+<li>Similarly around inner subexpressions in expressions that mix
+<b><tt>&amp;</tt></b>, <b><tt>|</tt></b>, or shifts, especially if mixing
+these with other operators, for instance
+
+<blockquote><b><tt>
+(x &lt;&lt; 3) | (y &gt;&gt; 5)
+</tt></b></blockquote>
+
+<li>In macro definitions around every use of an argument that logically
+could be an expression, for example
+
+<blockquote><b><tt>
+((x) * (x) + (y) * (y))
+</tt></b></blockquote>
+
+</ul>
+
+<p>
+Anywhere else, given the choice, use fewer parentheses.
+
+<p>
+For stylistic consistency with the existing Ghostscript code, put
+parentheses around conditional expressions even if they aren't
+syntactically required, unless you really dislike doing this. Note that
+the parentheses should go around the entire expression, not the condition.
+For instance, instead of
+
+<blockquote><b><tt>
+hpgl_add_point_to_path(pgls, arccoord_x, arccoord_y,<br>
+&nbsp;&nbsp;&nbsp;(pgls-&gt;g.pen_down) ? gs_lineto : gs_moveto);
+</tt></b></blockquote>
+
+<p>
+use
+
+<blockquote><b><tt>
+hpgl_add_point_to_path(pgls, arccoord_x, arccoord_y,<br>
+&nbsp;&nbsp;&nbsp;(pgls-&gt;g.pen_down ? gs_lineto : gs_moveto));
+</tt></b></blockquote>
+
+<h3><a name="Preprocessor_style"></a>Preprocessor</h3>
+
+<h4>Conditionals</h4>
+
+<p>
+Using preprocessor conditionals can easily lead to unreadable code, since
+the eye really wants to read linearly rather than having to parse the
+conditionals just to figure out what code is relevant. It's OK to use
+conditionals that have small scope and that don't change the structure or
+logic of the program (typically, they select between different sets of
+values depending on some configuration parameter), but where possible, break
+up source modules rather than use conditionals that affect the structure or
+logic.
+
+<h4>Macros</h4>
+
+<p>
+Ghostscript code uses macros heavily to effectively extend the rather
+weak abstraction capabilities of the C language, specifically in the area of
+memory management and garbage collection: in order to read Ghostscript code
+effectively, you simply have to learn some of these macros as though they
+were part of the language. The current code also uses macros heavily for
+other purposes, but we are trying to phase these out as rapidly as possible,
+because they make the code harder to read and debug, and to use the
+rules that follow consistently in new code.
+
+<p>
+Define macros in the smallest scope you can manage (procedure, file, or
+<b><tt>.h</tt></b> file), and <b><tt>#undef</tt></b> them at the end of
+that scope: that way, someone reading the code can see the definitions
+easily when reading the uses. If that isn't appropriate, define them in as
+large a scope as possible, so that they effectively become part of the
+language. This places an additional burden on the reader, but it can be
+amortized over reading larger amounts of code.
+
+<p>
+Try hard to use procedures instead of macros. Use "<b><tt>inline</tt></b>"
+if you really think the extra speed is needed, but only within a
+<b><tt>.c</tt></b> file: don't put inline procedures in <b><tt>.h</tt></b>
+files, because most compilers don't honor "<b><tt>inline</tt></b>" and
+you'll wind up with a copy of the procedure in every <b><tt>.c</tt></b>
+file that includes the <b><tt>.h</tt></b> file.
+
+<p>
+If you define a macro that looks like a procedure, make sure it will work
+wherever a procedure will work. In particular, put parentheses around every
+use of an argument within the macro body, so that the macro will parse
+correctly if some of the arguments are expressions, and put parentheses
+around the entire macro body. (This is still subject to the problem that an
+argument may be evaluated more than once, but there is no way around this in
+C, since C doesn't provide for local variables within expressions.)
+
+<p>
+If you define macros for special loop control structures, make their uses
+look somewhat like ordinary loops, for instance:
+
+<blockquote>
+<b><tt>BEGIN_RECT(xx, yy) {</tt></b><br>
+&nbsp;&nbsp;... body indented one position ...<br>
+<b><tt>} END_RECT(xx, yy);</tt></b>
+</blockquote>
+
+<p>
+If at all possible, don't use free variables in macros -- that is, variables
+that aren't apparent as arguments of the macro. If you must use free
+variables, list them all in a comment at the point where the macro is
+defined.
+
+<h3><a name="Comments"></a>Comments</h3>
+
+<p>
+The most important descriptive comments are ones in header files that
+describe structures, including invariants; but every procedure or structure
+declaration, or group of other declarations, should have a comment. Don't
+spend a lot of time commenting executable code unless something unusual or
+subtle is going on.
+
+<h3><a name="Naming"></a>Naming</h3>
+
+<p>
+Use fully spelled-out English words in names, rather than contractions.
+This is most important for procedure and macro names, global variables and
+constants, values of <b><tt>#define</tt></b> and <b><tt>enum</tt></b>,
+<b><tt>struct</tt></b> and other <b><tt>typedef</tt></b> names, and
+structure member names, and for argument and variable names which have
+uninformative types like <b><tt>int</tt></b>. It's not very important for
+arguments or local variables of distinctive types, or for local index or
+count variables.
+
+<p>
+Avoid names that run English words together:
+"<b><tt>hpgl_compute_arc_center</tt></b>" is better than
+"<b><tt>hpgl_compute_arccenter</tt></b>". However, for terms drawn from
+some predefined source, like the names of PostScript operators, use a term
+in its well-known form (for instance, <b><tt>gs_setlinewidth</tt></b>
+rather than <b><tt>gs_set_line_width</tt></b>).
+
+<p>
+Procedures, variables, and structures visible outside a single
+<b><tt>.c</tt></b> file should generally have prefixes that indicate what
+subsystem they belong to (in the case of Ghostscript, <b><tt>gs_</tt></b>
+or <b><tt>gx_</tt></b>). This rule isn't followed very consistently.
+
+<h3><a name="Types"></a>Types</h3>
+
+<p>
+Many older structure names don't have <b><tt>_t</tt></b> on the end, but
+this suffix should be used in all new code. (The <b><tt>_s</tt></b>
+structure name is needed only to satisfy some debuggers. No code other than
+the structure declaration should refer to it.)
+
+<p>
+Declare structure types that contain pointers to other instances of
+themselves like this:
+
+<blockquote>
+<b><tt>typedef struct xxx_s xxx_t;</tt></b><br>
+<b><tt>struct xxx_s {</tt></b><br>
+&nbsp;&nbsp;&nbsp;... members ...<br>
+&nbsp;&nbsp;&nbsp;<b><tt>xxx_t *</tt></b>ptr_member_name;<br>
+&nbsp;&nbsp;&nbsp;... members ...<br>
+<b><tt>};</tt></b>
+</blockquote>
+
+<p>
+If, to maintain data abstraction and avoid including otherwise unnecessary
+header files, you find that you want the type <b><tt>xxx_t</tt></b> to be
+available in a header file that doesn't include the definition of the
+structure <b><tt>xxx_s</tt></b>, use this approach:
+
+<blockquote>
+<b><tt>#ifndef xxx_DEFINED</tt></b><br>
+<b><tt>#&nbsp;&nbsp;define xxx_DEFINED</tt></b><br>
+<b><tt>typedef struct xxx_s xxx_t;</tt></b><br>
+<b><tt>#endif</tt></b><br>
+<b><tt>struct xxx_s {</tt></b><br>
+&nbsp;&nbsp;&nbsp;... members ...<br>
+<b><tt>};</tt></b>
+</blockquote>
+
+<p>
+You can then copy the first 4 lines in other header files. (Don't ever
+include them in an executable code file.)
+
+<p>
+Don't bother using <b><tt>const</tt></b> for anything other than with
+pointers as described below. However, in those places where it is necessary
+to cast a pointer of type <b><tt>const&nbsp;T&nbsp;*</tt></b> to type
+<b><tt>T&nbsp;*</tt></b>, always include a comment that explains why you are
+"breaking const".
+
+<h4>Pointers</h4>
+
+<p>
+Use <b><tt>const</tt></b> for pointer referents (that is,
+<b><tt>const&nbsp;T&nbsp;*</tt></b>) wherever possible and appropriate.
+
+<p>
+If you find yourself wanting to use <b><tt>void&nbsp;*</tt></b>, try to
+find an alternative using unions or (in the case of super- and subclasses)
+casts, unless you're writing something like a memory manager that really
+treats memory as opaque.
+
+<h3><a name="Procedures_style"></a>Procedures</h3>
+
+<p>
+In general, don't create procedures that are private and only called from
+one place. However, if a compound statement (especially an arm of a
+conditional) is too long for the eye easily to match its enclosing braces
+"<b><tt>{...}</tt></b>" -- that is, longer than 10 or 15 lines -- and it
+doesn't use or set a lot of state held in outer local variables, it may be
+more readable if you put it in a procedure.
+
+<h3>Miscellany</h3>
+
+<h4><a name="Local_variables"></a>Local variables</h4>
+
+<p>
+Don't assign new values to procedure parameters. It makes debugging very
+confusing when the parameter values printed for a procedure are not the
+ones actually supplied by the caller. Instead use a separate local
+variable initialized to the value of the parameter.
+
+<p>
+If a local variable is only assigned a value once, assign it that value at
+its declaration, if possible. For example,
+
+<blockquote>
+<b><tt>int x = </tt></b>some expression <b><tt>;</tt></b>
+</blockquote>
+
+<p>
+rather than
+
+<blockquote>
+<b><tt>int x;</tt></b><br>
+...<br>
+<b><tt>x = </tt></b> some expression <b><tt>;</tt></b>
+</blockquote>
+
+<p>
+Use a local pointer variable like this to "narrow" pointer types:
+
+<blockquote>
+<b><tt>int</tt></b><br>
+someproc(... <b><tt>gx_device *dev</tt></b> ...)<br>
+<b><tt>{<br>
+&nbsp;&nbsp;&nbsp;gx_device_printer *const pdev = (gx_device_printer *)dev;</tt></b><br>
+&nbsp;&nbsp;&nbsp;...<br>
+<b><tt>}</tt></b>
+</blockquote>
+
+<h4><a name="Compiler_warnings"></a>Compiler warnings</h4>
+
+<p>
+The following section refers to the warnings produced by <b><tt>gcc</tt></b>:
+your compiler may produce different ones.
+
+<p>
+It's OK if compilation produces the following warnings:
+
+<ul>
+<li><b><tt>&lt;name&gt; might be used uninitialized in this function</tt></b>
+<li><b><tt>cast discards `const' from pointer target type</tt></b>
+</ul>
+
+<p>
+The first of these often occurs because the compiler isn't aware of control
+flow restrictions that guarantee the variable will be initialized before
+use: if it occurs in new code, check the code carefully, but don't worry
+about the message. The second is often unavoidable in code that initializes
+or frees a structure that is otherwise <b><tt>const</tt></b> during its
+lifetime.
+<p>
+
+Do work hard to eliminate all warnings other than these,
+since they often indicate the possible presence of coding errors.
+In particular, get rid of warnings about parameter passing or
+initialization that discards <b><tt>const</tt></b>,
+by using explicit casts.
+
+<hr>
+
+<h2><a name="File_structuring"></a>File structuring</h2>
+
+<h3><a name="All_files"></a>All files</h3>
+
+<p>
+Keep file names within the "8.3" format for portability:
+<ul>
+<li>Use only letters, digits, dash, and underscore in file names.
+<li>Don't assume upper and lower case letters are distinct.
+<li>Put no more than 8 characters before the ".", if any.
+<li>If there is a ".", put between 1 and 3 characters after the ".".
+</ul>
+
+<p>
+For files other than documentation files, use only lower case letters
+in the names; for HTML documentation files, capitalize the first letter.
+
+<p>
+Every code file should start with comments containing
+
+<ol>
+<li>a copyright notice,
+<li>the name of the file in the form of an RCS Id:
+
+<blockquote><b><tt>
+/*Id$: filename.ext $*/
+</tt></b></blockquote>
+
+<p>
+(using the comment convention appropriate to the language of the file), and
+
+<li>a summary, no more than one line, of what the file contains.
+</ol>
+
+<p>
+If you create a file by copying the beginning of another file, be sure to
+update the copyright year and change the file name.
+
+<h3><a name="Makefiles"></a>Makefiles</h3>
+
+<p>
+Use the extension <b><tt>.mak</tt></b> for makefiles.
+
+<p>
+For each
+
+<blockquote><b><tt>
+#include "xxx.h"
+</tt></b></blockquote>
+
+<p>
+make sure there is a dependency on <b><tt>$(xxx_h)</tt></b> in the
+makefile. If xxx ends with a "<b><tt>_</tt></b>", this rule still holds,
+so that if you code
+
+<blockquote><b><tt>
+#include "math_.h"
+</tt></b></blockquote>
+
+<p>
+the makefile must contain a dependency on "<b><tt>$(math__h)</tt></b>"
+(note the two underscores "<b><tt>__</tt></b>").
+
+<p>
+List the dependencies bottom-to-top, like the <b><tt>#include</tt></b>
+statements themselves; within each level, list them alphabetically. Do
+this also with <b><tt>#include</tt></b> statements themselves whenever
+possible (but sometimes there are inter-header dependencies that require
+bending this rule).
+
+<p>
+For compatibility with the build utilities on OpenVMS, always put a space
+before the colon that separates the target(s) of a rule from the dependents.
+
+<h3><a name="General_C_code"></a>General C code</h3>
+
+<p>
+List <b><tt>#include</tt></b> statements from "bottom" to "top", that is,
+in the following order:
+
+<blockquote><ol>
+<li>System includes (<b><tt>"xxx_.h"</tt></b>)
+<li><b><tt>gs*.h</tt></b>
+<li><b><tt>gx*.h</tt></b> (yes, <b><tt>gs</tt></b> and <b><tt>gx</tt></b>
+are in the wrong order.)
+<li><b><tt>s*.h</tt></b>
+<li><b><tt>i*.h</tt></b> (or other interpreter headers that don't start
+with "<b><tt>i</tt></b>")
+</ol></blockquote>
+
+<h3><a name="Headers"></a>Headers (<b><tt>.h</tt></b> files)</h3>
+
+<p>
+In header files, always use the following at the beginning of a header file
+to prevent double inclusion:
+
+<blockquote>
+{{ Copyright notice etc. }}<br><br>
+
+<b><tt>#ifndef </tt></b>&lt;filename&gt;<b><tt>_INCLUDED</tt></b><br>
+<b><tt>#define </tt></b>&lt;filename&gt;<b><tt>_INCLUDED</tt></b><br><br>
+
+{{ The contents of the file }}<br><br>
+
+<b><tt>#endif /* </tt></b>&lt;filename&gt;<b><tt>_INCLUDED */</tt></b>
+</blockquote>
+
+<p>
+The header file is the first place that a reader goes for
+information about procedures, structures, constants, etc., so ensure that
+every procedure and structure has a comment that says what it does. Divide
+procedures into meaningful groups set off by some distinguished form of
+comment.
+
+<h3><a name="Source"></a>Source (<b><tt>.c</tt></b> files)</h3>
+
+<p>
+After the initial comments, arrange C files in the following order:
+
+<blockquote><ol>
+<li><b><tt>#include</tt></b> statements
+<li>Exported data declarations
+<li>Explicit externs (if necessary)
+<li>Forward declarations of procedures
+<li>Private data declarations
+<li>Exported procedures
+<li>Private procedures
+</ol></blockquote>
+
+<p>
+Be flexible about the order of the declarations if necessary to improve
+readability. Many older files don't follow this order, often without good
+reason.
+
+<hr>
+
+<h2><a name="Conventions"></a>Ghostscript conventions</h2>
+
+<h3><a name="Specific_names"></a>Specific names</h3>
+
+<p>
+The Ghostscript code uses certain names consistently for certain kinds of
+values. Some of the commonest and least obvious are these two:
+
+<h4><a name="code"></a><b><tt>code</tt></b></h4>
+
+<blockquote>
+A value to be returned from a procedure:
+
+<table cellpadding=0 cellspacing=0>
+<tr valign=top> <td align=right>&lt; 0
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <td>An error code defined in
+<a href="../src/gserrors.h">gserrors.h</a>
+(or <a href="../src/errors.h">errors.h</a>)
+<tr valign=top> <td align=right>0
+ <td>&nbsp;
+ <td>Normal return
+<tr valign=top> <td align=right>&gt; 0
+ <td>&nbsp;
+ <td>A non-standard but successful return (which must be documented, preferably with the procedure's prototype)
+</table>
+
+</blockquote>
+
+<h4><a name="status"></a><b><tt>status</tt></b></h4>
+
+<blockquote>
+A value returned from a stream procedure:
+
+<table cellpadding=0 cellspacing=0>
+<tr valign=top> <td align=right>&lt; 0
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <td>An exceptional condition as defined in
+<a href="../src/scommon.h">scommon.h</a>
+<tr valign=top> <td align=right>0
+ <td>&nbsp;
+ <td>Normal return (or, from the "<b><tt>process</tt></b>" procedure, means that more input is needed)
+<tr valign=top> <td align=right>1
+ <td>&nbsp;
+ <td>More output space is needed (from the "<b><tt>process</tt></b>" procedure)
+</table>
+</blockquote>
+
+<h3><a name="Structure_type_descriptors"></a>Structure type descriptors</h3>
+
+<p>
+The Ghostscript memory manager requires run-time type information for every
+structure. (We don't document this in detail here: see the <a
+href="Develop.htm#Structure_descriptors">Structure descriptors</a> section
+of the developer documentation for details.) Putting the descriptor for a
+structure next to the structure definition will help keep the two
+consistent, so immediately after the definition of a structure
+<b><tt>xxx_s</tt></b>, define its structure descriptor:
+
+<blockquote>
+<b><tt>struct xxx_s {</tt></b><br>
+&nbsp;&nbsp;&nbsp;... members ...<br>
+<b><tt>};</tt></b><br>
+<b><tt>#define private_st_xxx()&nbsp;&nbsp;/* in </tt></b>&lt;filename&gt;<tt><b>.c */\</tt></b><br>
+<b><tt>&nbsp;&nbsp;gs_private_st_</tt></b>&lt;whatever&gt;<b><tt>(st_xxx, xxx_t,\</tt></b><br>
+<b><tt>&nbsp;&nbsp;&nbsp;&nbsp;"xxx_t", xxx_enum_ptrs, xxx_reloc_ptrs,\</tt></b><br>
+<b><tt>&nbsp;&nbsp;&nbsp;&nbsp;</tt></b>... additional parameters as needed ...<b><tt>)</tt></b>
+</blockquote>
+
+<p>
+The file that implements operations on this structure
+(&lt;filename&gt;<b><tt>.c</tt></b>) should then include, near the
+beginning, the line:
+
+<blockquote>
+<b><tt>private_st_xxx();</tt></b>
+</blockquote>
+
+<p>
+In much existing code, structure descriptors are declared as
+<b><tt>public</tt></b>, which allows clients to allocate instances of the
+structure directly. We now consider this bad design. Instead, structure
+descriptors should always be <b><tt>private</tt></b>; the implementation
+file should provide one or more procedures for allocating instances, e.g.,
+
+<blockquote>
+<b><tt>xxx_t *gs_xxx_alloc(P1(gs_memory_t *mem));</tt></b>
+</blockquote>
+
+<p>
+If it is necessary to make a structure descriptor public, it should be
+declared in its clients as
+
+<blockquote>
+<b><tt>extern_st(st_xxx);</tt></b>
+</blockquote>
+
+<h3><a name="Objects"></a>"Objects"</h3>
+
+<p>
+Ghostscript makes heavy use of object-oriented constructs, including
+analogues of classes, instances, subclassing, and class-associated
+procedures. However, these constructs are implemented in C rather than C++,
+for two reasons:
+
+<ul>
+
+<li>The first Ghostscript code was written in 1986, long before C++ was
+codified or was well supported by tools. Even today, C++ tools rarely
+support C++ as well as C tools support C.
+
+<li>C++ imposes its own implementations for virtual procedures, inheritance,
+run-time type information, and (to some extent) memory management.
+Ghostscript requires use of its own memory manager, and also sometimes
+requires the ability to change the virtual procedures of an object
+dynamically.
+
+</ul>
+
+<h4>Classes</h4>
+
+<p>
+The source code representation of a class is simply a
+<b><tt>typedef</tt></b> for a C <b><tt>struct</tt></b>. See <a
+href="C-style.htm#Structures">Structures</a>, above, for details.
+
+<h4>Procedures</h4>
+
+<p>
+Ghostscript has no special construct for non-virtual procedures associated
+with a class. In some cases, the <b><tt>typedef</tt></b> for the class is
+in a header file but the <b><tt>struct</tt></b> declaration is in the
+implementation code file: this provides an extra level of opaqueness, since
+clients then can't see the representation and must make all accesses through
+procedures. You should use this approach in new code, if it doesn't
+increase the size of the code too much or require procedure calls for very
+heavily used accesses.
+
+<p>
+Ghostscript uses three different approaches for storing and accessing
+virtual procedures, plus a fourth one that is recommended but not currently
+used. For exposition, we assume the class (type) is named
+<b><tt>xxx_t</tt></b>, it has a virtual procedure
+<b><tt>void&nbsp;(*virtu)(P1(xxx_t&nbsp;*))</tt></b>, and we have a variable
+declared as <b><tt>xxx_t&nbsp;*pxx</tt></b>.
+
+<ol>
+
+<li>The procedures are stored in a separate, constant structure of type
+<b><tt>xxx_procs</tt></b>, of which <b><tt>virtu</tt></b> is a member. The
+structure definition of <b><tt>xxx_t</tt></b> includes a member defined as
+<b><tt>const&nbsp;xxx_procs&nbsp;*procs</tt></b> (always named
+<b><tt>procs</tt></b>). The construct for calling the virtual procedure is
+<b><tt>pxx->procs->virtu(pxx)</tt></b>.
+
+<li>The procedures are defined in a structure of type
+<b><tt>xxx_procs</tt></b> as above. The structure definition of
+<b><tt>xxx_t</tt></b> includes a member defined as
+<b><tt>xxx_procs&nbsp;procs</tt></b> (always named <b><tt>procs</tt></b>).
+The construct for calling the virtual procedure is
+<b><tt>pxx->procs.virtu(pxx)</tt></b>.
+
+<li>The procedures are not defined in a separate structure: each procedure
+is a separate member of <b><tt>xxx_t</tt></b>. The construct for calling
+the virtual procedure is <b><tt>pxx->virtu(pxx)</tt></b>.
+
+<li>The procedures are defined in a structure of type
+<b><tt>xxx_procs</tt></b> as above. The structure definition of
+<b><tt>xxx_t</tt></b> includes a member defined as
+<b><tt>xxx_procs&nbsp;procs[1]</tt></b> (always named
+<b><tt>procs</tt></b>). The construct for calling the virtual procedure is
+again <b><tt>pxx->procs->virtu(pxx)</tt></b>.
+
+</ol>
+
+<p>
+Note that in approach 1, the procedures are in a shared constant structure;
+in approaches 2 - 4, they are in a per-instance structure that can be
+changed dynamically, which is sometimes important.
+
+<p>
+In the present Ghostscript code, approach 1 is most common, followed by 2
+and 3; 4 is not used at all. For new code, you should use 1 or 4: that way,
+all virtual procedure calls have the same form, regardless of whether the
+procedures are shared and constant or per-instance and mutable.
+
+<h4>Subclassing</h4>
+
+<p>
+Ghostscript's class mechanism allows for subclasses that can add data
+members, or can add procedure members if approach 1 or 3 (above) is used.
+Since C doesn't support subclassing, we use a convention to accomplish it.
+In the example below, <b><tt>gx_device</tt></b> is the root class; it has a
+subclass <b><tt>gx_device_forward</tt></b>, which in turn has a subclass
+<b><tt>gx_device_null</tt></b>. First we define a macro for all the members
+of the root class, and the root class type. (As for structures in general,
+classes need a structure descriptor, as discussed in <a
+href="#Structures">Structures</a> above: we include these in the examples
+below.)
+
+<blockquote><b><tt>
+#define gx_device_common\<br>
+&nbsp;&nbsp;&nbsp;&nbsp;type1 member1;\<br>
+&nbsp;&nbsp;&nbsp;&nbsp;</tt></b>...<b><tt><br>
+&nbsp;&nbsp;&nbsp;&nbsp;typeN memberN<br>
+<br>
+typedef struct gx_device_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;gx_device_common;<br>
+} gx_device;<br>
+<br>
+#define private_st_gx_device()&nbsp;&nbsp;/* in gsdevice.c */\<br>
+&nbsp;&nbsp;gs_private_st_</tt></b>&lt;whatever&gt;<b><tt>(st_gx_device, gx_device,\<br>
+&nbsp;&nbsp;&nbsp;&nbsp;"gx_device", device_enum_ptrs, device_reloc_ptrs,\<br>
+&nbsp;&nbsp;&nbsp;&nbsp;</tt></b>... additional parameters as needed ...<b><tt>)</tt></b>
+</tt></b></blockquote>
+
+<p>
+We then define a similar macro and type for the subclass.
+
+<blockquote><b><tt>
+#define gx_device_forward_common\<br>
+&nbsp;&nbsp;&nbsp;&nbsp;gx_device_common;\<br>
+&nbsp;&nbsp;&nbsp;&nbsp;gx_device *target<br>
+<br>
+typedef struct gx_device_forward_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;gx_device_forward_common;<br>
+} gx_device_forward;<br>
+<br>
+#define private_st_device_forward()&nbsp;&nbsp;/* in gsdevice.c */\<br>
+&nbsp;&nbsp;gs_private_st_suffix_add1(st_device_forward, gx_device_forward,\<br>
+&nbsp;&nbsp;&nbsp;&nbsp;"gx_device_forward", device_forward_enum_ptrs, device_forward_reloc_ptrs,\<br>
+&nbsp;&nbsp;&nbsp;&nbsp;gx_device, target)
+</tt></b></blockquote>
+
+<p>
+Finally, we define a leaf class, which doesn't need a macro because we don't
+currently subclass it. (We can create the macro later if needed, with no
+changes anywhere else.) In this particular case, the leaf class has no
+additional data members, but it could have some.
+
+<blockquote><b><tt>
+typedef struct gx_device_null_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;gx_device_forward_common;<br>
+};<br>
+<br>
+#define private_st_device_null()&nbsp;&nbsp;/* in gsdevice.c */\<br>
+&nbsp;&nbsp;gs_private_st_suffix_add0_local(st_device_null, gx_device_null,\<br>
+&nbsp;&nbsp;&nbsp;&nbsp;"gx_device_null", device_null_enum_ptrs, device_null_reloc_ptrs,\<br>
+&nbsp;&nbsp;&nbsp;&nbsp;gx_device_forward)
+</tt></b></blockquote>
+
+<p>
+Note that the above example is <strong>not</strong> the actual definition of
+the <b><tt>gx_device</tt></b> structure type: the actual type has some
+additional complications because it has a finalization procedure. See <a
+href="../src/gxdevcli.h">src/gxdevcli.h</a> for the details.
+
+<p>
+If you add members to a root class (such as <b><tt>gx_device</tt></b> in
+this example), or change existing members, do this in the
+<b><tt>gx_device_common</tt></b> macro, not the <b><tt>gx_device</tt></b>
+structure definition. Similarly, to change the
+<b><tt>gx_device_forward</tt></b> class, modify the
+<b><tt>gx_device_forward_common</tt></b> macro, not the structure
+definition. Only change the structure definition if the class is a leaf
+class (one with no <b><tt>_common</tt></b> macro and no possibility of
+subclassing), like <b><tt>gx_device_null</tt></b>.
+
+<h3><a name="Error_handling"></a>Error handling</h3>
+
+<p>
+Every caller should check for error returns and, in general, propagate them
+to <b>its</b> callers. By convention, nearly every procedure returns an
+<b><tt>int</tt></b> to indicate the outcome of the call:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <td align=right>&lt; 0
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <td>Error return
+<tr valign=top> <td align=right>0
+ <td>&nbsp;
+ <td>Normal return
+<tr valign=top> <td align=right>&gt; 0
+ <td>&nbsp;
+ <td>Non-error return other than the normal case
+</table></blockquote>
+
+<p>
+To make a procedure generate an error and return it, as opposed to
+propagating an error generated by a lower procedure, you should use
+
+<blockquote>
+<b><tt>return_error(</tt></b><em>error_number</em><b><tt>);</tt></b>
+</blockquote>
+
+<p>
+Sometimes it is more convenient to generate the error in one place and
+return it in another. In this case, you should use
+
+<blockquote>
+<b><tt>code = gs_note_error(</tt></b><em>error_number</em><b><tt>);</tt></b><br>
+...<br>
+<b><tt>return code;</tt></b>
+</blockquote>
+
+<p>
+In executables built for debugging, the <b><tt>-E</tt></b> (or
+<b><tt>-Z#</tt></b>) command line switch causes <b><tt>return_error</tt></b>
+and <b><tt>gs_note_error</tt></b> to print the error number and the source
+file and line: this is often helpful for identifying the original cause of
+an error.
+
+<p>
+See the file <a href="../src/gserrors.h">src/gserrors.h</a> for the error
+return codes used by the graphics library, most of which correspond directly
+to PostScript error conditions.
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+
+<p>
+<small>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+</small>
+
+<p>
+<small>Copyright &copy; 1996-2002 artofcode LLC.
+All rights reserved.</small>
+
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/CJK.htm b/Master/xemtex/doc/ghostscript/CJK.htm
new file mode 100644
index 00000000000..9833db35da4
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/CJK.htm
@@ -0,0 +1,497 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.or
+g/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Features to support CJK CID-keyed in Ghostscript</title>
+<!-- $Id: CJK.htm,v 1.1.4.8.2.5 2003/05/17 14:38:59 giles Exp $ -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Features to support CJK CID-keyed font in Ghostscript</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Font_License">Font license</a>
+<li><a href="#About_OCF_fonts">About OCF fonts</a>
+<li><a href="#About_CID_keyed_fonts">About CID-keyed fonts</a>
+<ul>
+ <li><a href="#About_CIDFontType0">CIDFontType 0</a>
+ <li><a href="#About_CIDFontType2">CJK TrueType font and CIDFontType 2</a>
+</ul>
+<li><a href="#About_CIDFnmap">About "CIDFnmap" of Ghostscript</a>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>Impatient users looking for step-by-step installation notes for
+CJK fonts should check gs-cjk documents at
+<a href="http://www.gyve.org/gs-cjk/supplement/">
+http://www.gyve.org/gs-cjk/supplement/</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+
+
+<h2><a name="Font_license"></a>Font license</h2>
+<p>
+As we note in <a href="Fonts.htm#Add_fonts">"Adding your own fonts"</a>,
+you have to read the license of fonts carefully.
+The fact you obtain the fonts legally does not mean
+always that you can use them with Ghostscript.
+
+Usually, outline fonts for east Asian scripts are licensed under
+more restricted conditions in comparison with ASCII or Latin
+fonts, because they must provide a large number of glyphs,
+more than 8000 glyphs.
+
+For example, Adobe licenses the Asian font package for Acrobat
+Reader as "solely for Acrobat Reader". So even if your system
+have pre-installed Acrobat Reader, you cannot use its Asian fonts
+in Ghostscript.
+
+
+<h2><a name="About_OCF_fonts"></a>About OCF fonts</h2>
+<p>
+Prior to PostScript level 2015, PostScript fonts for multibyte encoded
+script (Chinese, Japanese, Korean and Vietnamese etc) were implemented
+as a collection of many elemental Type1/Type3 fonts and a selector.
+Today these fonts are known as OCF (Original Composite Font).
+Ghostscript fully supports OCF.
+
+
+<p>
+Adobe has announced that OCF is obsolete.
+For details of OCF, refer<br>
+<blockquote>
+"CJKV Information Processing" (Ken Lunde, O'Reilly 1999) p. 281,<br>
+"PostScript Language Reference Manual, third edition" p. 357
+<a
+href="http://partners.adobe.com/asn/developer/pdfs/tn/PLRM.pdf"
+class="offsite">
+href="http://partners.adobe.com/asn/developer/pdfs/tn/PLRM.pdf
+</a><br>
+"PostScript Language Tutorial and Cookbook, Japanese edition" (Adobe Systems, Incorporated, ASCII Corporation 1989) pp. 241-271,<br>
+</blockquote>
+and Technical Notes for CID-keyed fonts.
+
+
+<h2><a name="About_CID_keyed_fonts"></a>About CID-keyed fonts</h2>
+<p>
+In PostScript level 2015, Adobe introduced a new font format
+"CID-keyed font" for CJK scripts.
+For details of the CID-keyed font format, refer<br>
+<blockquote>
+"PostScript Language Reference Manual, third edition"</a> p. 364
+<a
+href="http://partners.adobe.com/asn/developer/pdfs/tn/PLRM.pdf"
+class="offsite">
+http://partners.adobe.com/asn/developer/pdfs/tn/PLRM.pdf</a><br>
+Technical Specification #5014 "Adobe CMap and CIDFont Files Specification"
+<a
+href="http://partners.adobe.com/asn/developer/pdfs/tn/5014.CMap_CIDFont_Spec.pdf"
+class="offsite">
+http://partners.adobe.com/asn/developer/pdfs/tn/5014.CMap_CIDFont_Spec.pdf
+</a><br>
+Technical Specification #5092 "CID-keyed Font Technology Overview"
+<a href="http://partners.adobe.com/asn/developer/pdfs/tn/5092.CID_Overview.pdf"
+class="offsite">
+http://partners.adobe.com/asn/developer/pdfs/tn/5092.CID_Overview.pdf
+</a><br>
+</blockquote>
+Ghostscript provides the basic functionalities of CID-keyed fonts,
+but the "rearranged font" feature is not implemented.
+The present functionalities are enough for common usage.
+Some Japanese PostScript programs expect that any system that
+supports CID-keyed fonts will also support "rearranged font".
+Such programs do not work well with ghostscript.
+Chinese and Korean scripts were never officially supplied by OCF,
+so such problems are rare.
+
+<p>
+The CID-keyed font format has a double layered structure.
+The lower layer is a CID-keyed font. The public interface of the
+CID-keyed font is a 16-bit CID (character identifier) number
+which is given to each unique "glyph" for subsets of various scripts.
+This is not a "character" code like ASCII/Unicode/etc.
+Adobe specifies CIDs for CJK scripts:
+Adobe-CNS1 &amp 2 (Traditional Chinese Hanzi glyphs),
+Adobe-GB1 (Simplified Chinese Hanzi glyphs),
+Adobe-Japan1 &amp; 2 (Japanese Kana and Kanji glyphs),
+Adobe-Korea1 &amp; 2 (Hangul and Hanja glyphs),
+Adobe-HongKong1 (Traditional Chinese Hanzi in HongKong),
+and Adobe-Vietnam1 (Chu-Han).
+The catalogues of glyphs for some CIDs are published by Adobe,
+refer Technical Notes service of Adobe:<br>
+<blockquote>
+<a
+href="http://partners.adobe.com/asn/developer/technotes/fonts.html"
+class="offsite">
+http://partners.adobe.com/asn/developer/technotes/fonts.html</a>
+</blockquote>
+
+
+
+
+<p>
+A CID-keyed font must provide the CID number interface,
+but the format of the glyph data may vary:<br>
+<ul>
+<li>CIDFontType 0 (FontType 9, CID-keyed Type1 font),</li>
+<li>CIDFontType 1 (FontType 10, CID-keyed Type3 font),</li>
+<li>CIDFontType 2 (FontType 11, CID-keyed Type42 font - TrueType)</li>
+</ul>
+
+
+
+
+
+
+<p>
+The higher layer is a CMap. A CMap provides a map from the multibyte
+character code to the CID of corresponding glyph, under a specified
+encoding system. PostScript fonts must provide a character
+code interface, so a bare CID-keyed font cannot be used as normal
+PostScript font without a CMap (e.g. <tt>findfont</tt>, <tt>show</tt>,
+etc are not usable, however <tt>glyphshow</tt> operator is usable for
+a bare CID-keyed font).
+In a CID-keyed font system, the various encoding systems can be supported
+by higher layer only. The lower layer is sharable.
+
+<p>
+A CMap file is stored in the /CMap resource category and the
+CID-keyed font file is stored in the /CIDFont resource category.
+Several operators introduced for CID-keyed fonts assume these locations,
+so CMap and CIDFont must not be stored in the /Font resource used
+traditionally used by PostScript fonts.
+
+<p>
+For "named resource category", refer
+<a href="Use.htm#PS_resources">Finding PostScript Level 2 resources</a> of Ghostscript.
+
+<p>
+Adobe distributes their official CMap (redistributable but no modification
+is permitted) on O'Reilly ftp site:
+<blockquote>
+<a
+href="ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/"
+class="offsite">
+ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/</a>
+</blockquote>
+
+To use CID-keyed font, these CMap files must be installed into the CMap
+resource directory.
+
+
+
+<h3><a name="About_CIDFontType0"></a>CIDFontType 0</h2>
+<p>
+CIDFontType0 is the most standard CIDFont of PostScript.
+It consists of two separated parts: PostScript
+program and attached binary data. The glyph data is stored in attached
+binary part and is dynamically accessed. In comparison with OCF,
+loading a CIDFontType0 is light-weight and comsumes less memory.
+
+<p>
+To make Ghostscript recognize a CIDFontType0 font is easy.
+If the CIDFontType0 font file is installed into a directory named "CIDFont"
+under GenericResourceDir (see
+<a href="Use.htm#PS_resources">Finding PostScript Level 2 resources</a>),
+Ghostscript will find it when searching for resources in /CIDFont category.
+
+
+
+
+<h3><a name="About_CIDFontType2"></a>CJK TrueType font and CIDFontType 2</h2>
+<p>
+In PostScript 2010, Adobe introduced the Type42 font format
+to embed a host-based TrueType font into a PostScript program.
+For details of the Type42 font format, refer to
+<blockquote>
+The Type 42 Font Format Specification. Technical Note #5012
+<a
+href="http://partners.adobe.com/asn/developer/pdfs/tn/5012.Type42_Spec.pdf"
+class="offsite">
+"http://partners.adobe.com/asn/developer/pdfs/tn/5012.Type42_Spec.pdf
+</a>
+</blockquote>
+CIDFontType2 is a CID extension of the Type42 font format.
+If Ghostscript is compiled with
+<a href="Make.htm#Features_and_devices">ttfont device</a>
+and CMap files are installed, Ghostscript is capable of
+handling CIDFontType2 resource embedded in PostScript program
+or PDF document.
+The Type42 font specification notes that Type42 is an installable font
+format, but there's no font distributed in the Type42 format.
+This is a big difference from the standard PostScript fonts: Type1, Type3
+and CIDFontType0.
+
+<p>
+Ghostscript now provides "on-the-fly CIDFontType2 converter"
+for CJK TrueType, similar to the "on-the-fly Type42 converter" for
+Roman TrueType fonts.
+This does not mean you can perfectly substitute a required PostScript
+fonts by a TrueType font. CJK TrueType font often lack many
+non-popular glyphs and a few popular glyphs in Adobe CID.
+As a result, a TrueType font
+(designed as screen font for window system) cannot be a perfect
+replacement for an Adobe PostScript font
+Refer <a href="CJKTTCID.htm">CJKTTCID.htm</a> for further particulars.
+
+<p>
+The operator <b><tt>.openttcidfont</tt></b> constructs CIDFontType2
+font dictionary from a given TrueType font. <b><tt>.openttcidfont</tt></b>
+requires extra CMaps for PDF available from:
+
+<blockquote>
+<a
+href="http://partners.adobe.com/asn/developer/technotes/acrobatpdf.html"
+class="offsite">
+http://partners.adobe.com/asn/developer/technotes/acrobatpdf.html
+</a>
+</blockquote>
+
+The basic syntax of <b><tt>.openttcidfont</tt></b> is:<br>
+<blockquote>
+<b><tt>&lt;ttf_filename&gt; .openttcidfont</tt></b><br>
+</blockquote>
+
+<p>
+When a font file in Microsoft's TrueType Collection format
+(a font file with suffix <b><tt>.ttc</tt></b>
+ includes multiple fonts in single file) is given,
+the first font in it is used by default.
+To specify a font manually, index of the font should be passed
+to <b><tt>.openttcidfont</b></tt>, as:<br>
+
+<blockquote>
+<b><tt>&lt;ttc_filename&gt; 2 .openttcidfont</tt></b><br>
+</blockquote>
+
+<p>
+Old TrueType fonts were encoded by CJK-system specific encodings
+(e.g. Big5, Johab, ShiftJIS, etc) without stating what encoding
+is used.
+On the other hand, recent TrueType fonts are encoded by Unicode,
+but included glyphs are limited to specific language.
+By default, <b><tt>.openttcidfont</tt></b> detects encoding of
+TrueType font and the suitable Adobe CID automatically, but if
+you have trouble, these parameters should be specified manually.
+To specify Adobe CID and TrueType encoding explicitly, pass a name
+object as:
+
+<blockquote>
+<b><tt>&lt;ttf_filename&gt; /Adobe-Japan1-ShiftJIS .openttcidfont</tt></b><br>
+</blockquote>
+
+In such syntax, Adobe-Japan1 specifies Adobe CID to be mapped,
+and ShiftJIS specifies the encoding of TrueType fonts.
+Currently supported Adobe CIDs are:<br>
+
+<blockquote>
+<b><tt>Adobe-CNS1</tt></b><br>
+<b><tt>Adobe-GB1</tt></b><br>
+<b><tt>Adobe-Japan1</tt></b><br>
+<b><tt>Adobe-Japan2</tt></b><br>
+<b><tt>Adobe-Korea1</tt></b><br>
+</blockquote>
+
+and, supported TrueType encodings are:<br>
+
+<blockquote>
+<b><tt>Big5</tt></b><br>
+<b><tt>Johab</tt></b><br>
+<b><tt>PRC</tt></b><br>
+<b><tt>ShiftJIS</tt></b><br>
+<b><tt>Unicode</tt></b><br>
+<b><tt>Wansung</tt></b><br>
+</blockquote>
+
+In addition about on-the-fly CIDFontType2 conversion of TrueType fonts
+(of Big5, PRC, ShiftJIS, Wangsung), <tt>.openttcidfont</tt> requires
+more extra CMap files which are available from Asian font packages for
+Adobe Acrobat Reader. See <a href="Fonts.htm#CMap_Adobe"> "Adobe
+CMaps" subsection</a> of "Fonts and font facilities supplied with
+Ghostscript" section.
+
+
+
+<h2><a name="About_CIDFnmap"></a>About "CIDFnmap" of Ghostscript</h2>
+<p>
+By applying various CMap to single CIDFont, various font resources
+can be generated. To utilize this feature conveniently, "CIDFnmap"
+is introduced. CIDFnmap is similar to Fontmap, but it handles resource
+name of CIDFont.
+
+<p>
+To map all /Ryumin-Light-* fonts (/Ryumin-Light-H, /Ryumin-Light-RKSJ-H
+etc) derived from /Ryumin-Light CIDFont to those from /WadaMin-Regular,
+following single entry works enough:<br>
+
+<blockquote>
+<b><tt>/Ryumin-Light&nbsp;/WadaMin-Regular&nbsp;;</tt></b><br>
+</blockquote>
+
+Also CIDFnmap can define a resource from a file specified with full path,
+it is convenient to import resource from out of Ghostscript directory tree:<br>
+
+<blockquote>
+<b><tt>/WadaMin-Regular&nbsp;(/usr/lib/X11/fonts/CIDFont/WadaMin-Regular)&nbsp;;</tt></b><br>
+</blockquote>
+
+If the given file is TrueType font, CIDFnmap automatically detect it, and
+execute <b><tt>.openttcidfont</tt></b>:<br>
+
+<blockquote>
+<b><tt>/HG-MinchoL&nbsp;(/usr/openwin/lib/locale/ja/X11/fonts/TT/HG-MinchoL.ttf)&nbsp;;</tt></b><br>
+</blockquote>
+
+Other operands for <b><tt>.openttcidfont</tt></b> (TTC index, CID/encoding
+specification) can be specified as:<br>
+
+<blockquote>
+<b><tt>
+/HeiseiMin-W3H&nbsp;(/usr/openwin/lib/locale/ja/X11/fonts/TT/HeiseiMin-W3H.ttf)&nbsp;/Adobe-Japan2-Unicode&nbsp;;<br>
+</blockquote>
+<blockquote>
+/Ryobi-PGothic&nbsp;(/usr/X11R6/lib/X11/fonts/TrueType/tcgothb.ttc)&nbsp;2&nbsp;/Adobe-Japan1-Unicode&nbsp;;<br>
+</tt></b>
+</blockquote>
+
+
+<p>
+For detail, please refer included sample CIDFnmap. For the sites
+to get font itself, refer <a href="Fonts.htm">Fonts.htm</a>.
+
+<dl>
+<dt>CIDFnmap.Ore</dt>
+<dd>
+ For free CJK CIDFontType0 fonts manufactured by Adobe.
+</dd>
+
+<dt>CIDFnmap.Bae</dt>
+<dd>
+ For free Hangul TrueType fonts manufactured by Hwan Design Inc..
+</dd>
+
+<dt>CIDFnmap.ARP</dt>
+<dd>
+ For free Simplified/Traditional Chinese TrueType fonts
+ manifactured by Arphic Technology.
+</dd>
+
+<dt>CIDFnmap.Koc</dt>
+<dd>
+ Japanese TrueType fonts and free CIDFontType0 version of them,
+ Kochi Mincho and Gothic.
+</dd>
+
+<dt>CIDFnmap.Sol</dt>
+<dd>
+ For CJK TrueType fonts bundled on Solaris 8 International edition.
+</dd>
+
+<dt>CIDFnmap.Win</dt>
+<dd>
+ For CJK TrueType fonts bundled on Windows.
+</dd>
+
+<dt>CIDFnmap.CJK</dt>
+<dd>
+ Aliasing for printer-based CJK fonts
+ (/HYGoThic-Medium, /MSung-Light, /Ryumin-Light, /STSong-Light, etc)
+ and fallback font definitions for missing fonts in PDF.
+</dd>
+
+<dt>CIDFnmap.b5, CIDFnmap.gb, CIDFnmap.ksx, CIDFnmap.sj</dt>
+<dd>
+ Aliasing locale-specific CIDFontNames which are often required
+ with multi-byte encoding in PS/PDF files.
+</dd>
+
+</dl>
+
+
+<b>NOTE:</b>
+In gs7.2x and later release,
+"CIDFnmap" feature will be merged into new mapping feature:
+"cidfmap" and "CIDFnmap" itself will be removed.
+
+
+<p>
+There are CJK samples in <b><tt>examples/cjk</tt></b>:
+<b><tt>
+all_ac1.ps, all_ag1.ps, all_aj1.ps, all_aj2.ps, all_ak1.ps
+</tt></b>
+(drawing all glyphs in Adobe CID for Traditional Chinese,
+Simplified Chinese, Japanese, Japanese Hojo Kanji, Korean)
+<b><tt>
+gscjk_ac.ps, gscjk_ag.ps, gscjk_aj.ps, gscjk_ak.ps
+</tt></b>
+(drawing short texts in horizontal and vertical writing modes)
+and multilingual sample <b><tt>iso2022.ps</tt></b>
+(this sample loads many fonts for various scripts, quite heavy).
+<b><tt>gscjk_*</tt></b> samples are written in Asian character encoding and
+iso2022.ps is in ISO-2022, not pure ASCII.
+To modify them, an internationalized or binary capable editor
+are recommended.
+
+<p>
+For proofing by PostScript printers (for Asian market),
+these samples use standard printer-based CJK fonts:
+/HYGoThic-Medium, /MSung-Light, /Ryumin-Light, /STSong-Light etc.
+To display them correctly by Ghostscript,
+printer-based fonts must be aliased to available fonts on Ghostscript.
+CIDFnmap.CJK lists known printer-based CJK fonts,
+modify it for your own environment.
+
+
+
+
+
+<p>
+This section by Suzuki Toshiya and gs-cjk project.
+&lt;<a href="mailto:mpsuzuki@gyve.org">mpsuzuki@gyve.org</a>&gt;
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<font size=2>
+
+<p>Copyright &copy; 2001 gs-cjk project
+&lt;<a href="http://www.gyve.org/gs-cjk/">http://www.gyve.org/gs-cjk/</a>&gt;.
+<p>Copyright &copy; 2002 artofocode LLC. All rights reserved.
+
+<p>This file is part of GNU Ghostscript. See the
+<a href="COPYING">GNU General Public License</a> (the "License") for
+full details of the terms of using, copying, modifying, and redistributing
+GNU Ghostscript.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+</font>
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/CJKTTCID.htm b/Master/xemtex/doc/ghostscript/CJKTTCID.htm
new file mode 100644
index 00000000000..c777bc5b557
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/CJKTTCID.htm
@@ -0,0 +1,409 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Adobe CIDs and glyphs in CJK TrueType font</title>
+<!-- $Id: CJKTTCID.htm,v 1.1.4.8.2.5 2003/05/17 14:38:59 giles Exp $ -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Adobe CIDs and glyphs in CJK TrueType font</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Overview">Overview</a></li>
+<li><a href="#Notes">Adobe CIDs that current Ghostscript can fills by CJK TTF</a></li>
+<li><a href="#References">References</a></li>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+This article is written by Taiji Yamada
+&lt;<a href="mailto:taiji@aihara.co.jp">taiji@aihara.co.jp</a>&gt;.
+He takes full responsibility for the wording and content of this article.
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+
+<h2><a name="Overview"></a>Overview</h2>
+
+<p>
+This note provides information on utilization of CJK (Chinese,
+Japanese and Korean) TrueType fonts (TTF) as CIDFoneType 2 (Type11)
+CID-keyed fonts from the viewpoint of its validity and limitation.
+In order to compose CIDFontType 2 font from CJK TTF on the fly,
+Ghostscript uses not only standard CMaps (mapping from character
+encoding to CID, we call them ToCID CMaps in following) but also
+ToUnicode CMaps (mapping from CID to Unicode) and
+ToCode CMaps (mapping from CID to non-Unicode character encodings)
+which are freely distributed with Acrobat Reader by Adobe Systems
+Incorporated.
+
+For detail of ToUnicode CMaps, refer
+<blockquote>
+Adobe Systems Incorporated,
+"PDF Reference, Third Edition, Version 1.4",
+p. 368
+<a
+href="http://partners.adobe.com/asn/developer/acrosdk/docs/filefmtspecs/PDFReference.zip"
+class="offsite">
+http://partners.adobe.com/asn/developer/acrosdk/docs/filefmtspecs/PDFReference.zip
+</a><br>
+Adobe Systems Incorporated,
+"ToUnicode Mapping File Tutorial",
+Technical Note #5411</a><br>
+<a
+href="http://partners.adobe.com/asn/developer/pdfs/tn/5411.ToUnicode.pdf"
+class="offsite">
+http://partners.adobe.com/asn/developer/pdfs/tn/5411.ToUnicode.pdf</a><br>
+</blockquote>
+ToUnicode and ToCode CMaps are designed for text-searching in PDF,
+and you should not expect Adobe ToUnicode CMap as a one-to-one map
+between Adobe glyph collection and glyph/character in Unicode.
+
+The current algorithm of Ghostscript to map CIDs to TTF glyph ID
+completely depends on Adobe CMaps, TrueType cmap and GSUB tables.
+
+<p>
+The current revision of on-the-fly CIDFontType 2 technology
+supports the following kinds Registry-Ordering (RO) of CID-keyed
+fonts:
+
+<tt><pre>
+ [RO]
+ Adobe-CNS1
+ Adobe-GB1
+ Adobe-Japan1
+ Adobe-Japan2
+ Adobe-Korea1
+</pre></tt><br>
+
+and doesn't support the following kinds of CID-keyed fonts:<br>
+
+<tt><pre>
+ [RO]
+ Adobe-CNS2
+ Adobe-HongKong1
+ Adobe-Korea2
+ Adobe-Vietnam1
+</pre></tt><br>
+
+The current revision can handle the following kinds (Encoding in cmap
+table) of TrueType fonts as CID-keyed fonts:<br>
+
+<tt><pre>
+ [Encoding] [RO]
+ Unicode Adobe-*
+ ShiftJIS Adobe-Japan1
+ PRC Adobe-GB1
+ Big5 Adobe-CNS1
+ Wansung Adobe-Korea1
+ Johab Adobe-Korea1
+</pre></tt><br>
+
+and doesn't support UCS-4 Encoding TrueType fonts for the present. In
+the case of Unicode Encoding, RO can be detected by reading ``Code
+Page Character Range'' of OS/2 table of TTF as follows:<br>
+
+<tt><pre>
+ [Encoding] [Code Page] [RO]
+ Unicode Japanese Adobe-Japan1
+ Simplified Chinese Adobe-GB1
+ Korean Wansung Adobe-Korea1
+ Traditional Chinese Adobe-CNS1
+ Korean Johab Adobe-Korea1
+</pre></tt><br>
+
+For each combination of RO and TTF Encoding, following Adobe CMaps are
+applied:<br>
+
+<tt><pre>
+ [RO-Encoding] [Supplement limit]
+ [used CMap] - [Comment]
+
+ Adobe-CNS1-Big5 0
+ Adobe-CNS1-ETen-B5 - ToCode CMap
+ ETen-B5-V - ToCID CMap
+ ETen-B5-H - ToCID CMap
+
+ Adobe-CNS1-Unicode 3
+ Adobe-CNS1-UCS2 - ToUnicode CMap
+ UniCNS-UCS2-V - ToCID CMap
+ UniCNS-UCS2-H - ToCID CMap
+
+ Adobe-GB1-PRC 2
+ Adobe-GB1-GBK-EUC - ToCode CMap
+ GBK-EUC-V - ToCID CMap
+ GBK-EUC-H - ToCID CMap
+
+ Adobe-GB1-Unicode 4
+ Adobe-GB1-UCS2 - ToUnicode CMap
+ UniGB-UCS2-V - ToCID CMap
+ UniGB-UCS2-H - ToCID CMap
+
+ Adobe-Japan1-ShiftJIS 2
+ Adobe-Japan1-90ms-RKSJ - ToCode CMap
+ 90ms-RKSJ-V - ToCID CMap
+ 90ms-RKSJ-H - ToCID CMap
+
+ Adobe-Japan1-Unicode 4
+ Adobe-Japan1-UCS2 - ToUnicode CMap
+ UniJIS-UCS2-V - ToCID CMap
+ UniJIS-UCS2-H - ToCID CMap
+
+ Adobe-Japan2-Unicode 0
+ UniHojo-UCS2-V - ToCID CMap
+ UniHojo-UCS2-H - ToCID CMap
+
+ Adobe-Korea1-Johab 1
+ KSC-Johab-V - ToCID CMap
+ KSC-Johab-H - ToCID CMap
+
+ Adobe-Korea1-Unicode 2
+ Adobe-Korea1-UCS2 - ToUnicode CMap
+ UniKS-UCS2-V - ToCID CMap
+ UniKS-UCS2-H - ToCID CMap
+
+ Adobe-Korea1-Wansung 1
+ Adobe-Korea1-KSCms-UHC - ToCode CMap
+ KSCms-UHC-V - ToCID CMap
+ KSCms-UHC-H - ToCID CMap
+</pre></tt><br>
+
+where Supplement values are denoted as the limit determined by the
+maximum CID in used CMaps.
+
+<p>
+The Glyph Substitution table (GSUB) of TTF, Single Substitution Format
+2 is read for vertically-used glyphs in CIDs. The current revision
+doesn't handle any other formats of GSUB, so handling ligatures and
+variants as CID-keyed fonts might be tasks to be solved in future.
+
+<p>
+In recent CID-keyed fonts, pre-rotated Latin glyphs are defined, but
+the current revision merely maps to normal Latin glyphs.
+Ghostscript cannot handle them at present.
+
+<h2><a name="Notes"></a>
+Adobe CIDs that current Ghostscript can fills by CJK TTF</h2>
+<p>
+Following tables and comments provide the details of validity and
+limitation for the individual kinds of CID-keyed fonts composed from
+generally-circulated and Unicode TrueType fonts at the current
+revision. Naturally, these results of glyphs lacking are affected by
+TrueType fonts you use.<br>
+
+<tt><pre>
+Adobe-CNS1 CID-keyed font composed from Traditional Chinese Unicode TTF
+-----------------------------------------------------------------------
+[ROS] [CID range] [Comment]
+Adobe-CNS1-0 0- 505 96,97,124-127,228,260 are lacking
+ 506- 561 no problem
+ 562- 594 all glyphs are lacking
+ 595-13645 no problem
+ 13646-13748 13646,13647 are lacking
+ 13749-13998 13996-13998 are lacking
+ 13999-14098 some glyphs are lacking
+Adobe-CNS1-1 14099-17407 lots of glyphs are lacking (*1)
+Adobe-CNS1-2 17408-17600 17503,17504 are lacking (*2)
+Adobe-CNS1-3 17601-17605 17603 is lacking
+ 17606-18845 lots of glyphs are lacking (*3)
+Adobe-CNS1-4 18846-18961 all glyphs assignment is impossible (*4)
+(*1) HK GCCS
+(*2) not pre-rotated
+(*3) HK SCS
+(*4) HK SCS (unused in UniCNS-UCS-2 CMap, though used in UniCNS-UTF8,
+UniCNS-UTF16, UniCNS-UTF32, also ETHK-B5, needless to say HKscs-B5)
+
+
+Adobe-GB1 CID-keyed font composed from Simplified Chinese Unicode TTF
+---------------------------------------------------------------------
+[ROS] [CID range] [Comment]
+Adobe-GB1-0 0- 939 99,695,698,737,935,938 are lacking
+ 940- 7702 no problem
+ 7703- 7716 7705,7708 are incorrect
+Adobe-GB1-1 7717- 9896 no problem
+Adobe-GB1-2 9897-22126 no problem
+Adobe-GB1-3 22127-22352 22347,22350,22352 are lacking (*1)
+Adobe-GB1-4 22353-22427 all glyphs are not available (*2)
+ 22428-29058 all glyphs are not available (*3)
+ 29059-29063 all glyphs are not available (*4)
+(*1) not pre-rotated
+(*2) additional Hiragana and Katakana, extended Bopomofo glyphs
+(*3) the Unified Han Ideographs Extension A
+(*4) pre-rotated glyphs
+
+
+Adobe-Japan1 CID-keyed font composed from Japanese Unicode TTF
+--------------------------------------------------------------
+[ROS] [CID range] [Comment]
+Adobe-Japan1-0 0- 1124 lots of glyphs are lacking or incorrect:
+ 96-98,127,128,130-133,135-137,226,326,
+ 390,396,422,424,502,506-509,512,513,515,
+ 606,607,632
+ 1125- 7477 no problem
+ 7478- 7632 7478 is lacking and 7608,7609 are incorrect
+ 7633- 8004 lots of glyphs are lacking or incorrect (*4)
+ 8005- 8283 lots of glyphs are lacking or incorrect:
+ 8008,8053,8059-8061,8091,8102-8111,8166-8181,
+ 8189,8190,8227-8229,8260
+Adobe-Japan1-1 8284- 8358 lots of glyphs are lacking or incorrect:
+ 8295-8297,8300-8302,
+ 8306,8307,8321,8322,8325,8326
+Adobe-Japan1-2 8359- 8717 no problem
+ 8718- 8719 8718 is lacking and 8719 is incorrect
+Adobe-Japan1-3 8720- 9353 some glyphs are lacking or incorrect (*1)
+Adobe-Japan1-4 9354- 9737 some glyphs are lacking or incorrect (*2)
+ 9738-13319 lots of glyphs are lacking or incorrect (*3)
+ 13320-15443 all glyphs are variants or lacking (*4)
+(*1) not pre-rotated
+(*2) not italic form
+(*3) many ligature, pre-rotated, pre-rotated and italic form glyphs
+(*4) lots of variants are assigned substitutes
+
+
+Adobe-Japan2 CID-keyed font composed from Japanese Unicode TTF
+--------------------------------------------------------------
+[ROS] [CID range] [Comment]
+Adobe-Japan2-0 0- 6067 no problem
+
+
+Adobe-Korea1 CID-keyed font composed from Korean Unicode TTF
+------------------------------------------------------------
+[ROS] [CID range] [Comment]
+Adobe-Korea1-0 0- 357 some glyphs are lacking or incorrect:
+ 61,97,100,104,111,227
+ 358- 3435 no problem
+ 3436- 8055 no problem
+ 8056- 8190 lots of glyphs are lacking or incorrect:
+ 8059,8061,8075,8083-8085,8089,8091,8093,8190
+ 8191- 9332 no problem
+Adobe-Korea1-1 9333-18154 perhaps no problem, but cannot check (*)
+Adobe-Korea1-2 18155-18351 some glyphs are lacking
+(*) Technical Note on Adobe-Korea1-1,2 has not been published yet[6].
+</pre></tt>
+
+<p>
+The current mapping algorithm based on ToCID CMaps and ToUnicode
+CMaps still has problems. The gs-cjk project[7] is considering how
+to settle the matters.
+
+
+<h2><a name="References"></a>References</h2>
+<ol>
+<li>Microsoft Corporation, "OpenType specification"
+<a
+href="http://www.asia.microsoft.com/typography/otspec/"
+class="offsite">
+http://www.asia.microsoft.com/typography/otspec/</a>
+</li>
+
+<li>
+Adobe Systems Incorporated,
+"Adobe-CNS1-4 Character Collection for CID-Keyed Fonts",
+Technical Note #5080
+<a
+href="http://partners.adobe.com/asn/developer/pdfs/tn/5080.Adobe-CNS1-4.pdf"
+class="offsite">
+http://partners.adobe.com/asn/developer/pdfs/tn/5080.Adobe-CNS1-4.pdf</a>
+</li>
+
+<li>
+Adobe Systems Incorporated,
+"Adobe-GB1-4 Character Collection for CID-Keyed Fonts",
+Technical Note #5079
+<a
+href="http://partners.adobe.com/asn/developer/pdfs/tn/5079.Adobe-GB1-4.pdf"
+class="offsite">
+http://partners.adobe.com/asn/developer/pdfs/tn/5079.Adobe-GB1-4.pdf</a>
+</li>
+
+<li>
+Adobe Systems Incorporated,
+"Adobe-Japan1-4 Character Collection for CID-Keyed Fonts",
+Technical Note #5078
+<a
+href="http://partners.adobe.com/asn/developer/pdfs/tn/5078.Adobe-Japan1-4.pdf"
+class="offsite">
+http://partners.adobe.com/asn/developer/pdfs/tn/5078.Adobe-Japan1-4.pdf
+</a>
+</li>
+
+<li>
+Adobe Systems Incorporated,
+"Adobe-Japan2-0 Character Collection for CID-Keyed Fonts",
+Technical Note #5097
+<a
+href="http://partners.adobe.com/asn/developer/pdfs/tn/5097.Adobe-Japan2-0.pdf"
+class="offsite">
+http://partners.adobe.com/asn/developer/pdfs/tn/5097.Adobe-Japan2-0.pdf
+</a>
+</li>
+
+<li>
+Adobe Systems Incorporated,
+"Adobe-Korea1-0 Character Collection for CID-Keyed Fonts"
+Technical Note #5093
+<a
+href="http://partners.adobe.com/asn/developer/pdfs/tn/5093.Adobe-Korea1-0.pdf"
+class="offsite">
+http://partners.adobe.com/asn/developer/pdfs/tn/5093.Adobe-Korea1-0.pdf
+</a>
+</li>
+
+<li>
+Taiji Yamada, "Tips on PostScript"
+<a href="http://www.aihara.co.jp/~taiji/tops/" class="offsite">
+http://www.aihara.co.jp/~taiji/tops/</a></li>
+
+<li>"gs-cjk project"
+<a href="http://www.gyve.org/gs-cjk/" class="offsite">
+http://www.gyve.org/gs-cjk/</a></li>
+</ol>
+
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<font size=2>
+
+<p>Copyright &copy; 2001 Taiji Yamada &lt;<a href="mailto:taiji@aihara.co.jp">taiji@aihara.co.jp</a>&gt; and
+<a href="http://www.gyve.org/gs-cjk/" class="offsite">gs-cjk project</a>.
+<p>Copyright &copy; 2002 artofcode LLC. All rights reserved.
+
+<p>This file is part of GNU Ghostscript. See the
+<a href="COPYING">GNU General Public License</a> (the "License") for
+full details of the terms of using, copying, modifying, and redistributing
+GNU Ghostscript.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+</font>
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/COPYING b/Master/xemtex/doc/ghostscript/COPYING
new file mode 100644
index 00000000000..fbdd65f6f8b
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Master/xemtex/doc/ghostscript/COPYING.LGPL b/Master/xemtex/doc/ghostscript/COPYING.LGPL
new file mode 100644
index 00000000000..cf9b6b99726
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/COPYING.LGPL
@@ -0,0 +1,510 @@
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations
+below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+^L
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes a de-facto standard. To achieve this, non-free programs must
+be allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+^L
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control
+compilation and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+^L
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+^L
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at least
+ three years, to give the same user the materials specified in
+ Subsection 6a, above, for a charge no more than the cost of
+ performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+^L
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+^L
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply, and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License
+may add an explicit geographical distribution limitation excluding those
+countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+^L
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+^L
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms
+of the ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library.
+It is safest to attach them to the start of each source file to most
+effectively convey the exclusion of warranty; and each file should
+have at least the "copyright" line and a pointer to where the full
+notice is found.
+
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or
+your school, if any, to sign a "copyright disclaimer" for the library,
+if necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James
+ Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/Master/xemtex/doc/ghostscript/Changes.htm b/Master/xemtex/doc/ghostscript/Changes.htm
new file mode 100644
index 00000000000..e3626b64c5e
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Changes.htm
@@ -0,0 +1,288 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>Ghostscript 7.07 change history as of 2003-05-17 15:57:59</title>
+<link rel=stylesheet type="text/css" href="gs.css">
+</head><body>
+
+<!-- cvs command: cvs -d giles@cvs.ghostscript.com:/cvs/ghostscript -Q log -rGS_7_0X_GNU -->
+
+<ul>
+<li><a href="#7.07-Documentation">Documentation</a>,
+ <a href="#7.07-Procedures">Procedures</a>,
+ <a href="#7.07-Utilities">Utilities</a>,
+ <a href="#7.07-Drivers">Drivers</a>,
+ <a href="#7.07-PDF_Interpreter">PDF Interpreter</a>,
+ <a href="#7.07-Interpreter">Interpreter</a>,
+ <a href="#7.07-Library">Library</a>,
+ <a href="#7.07-Other">Other</a>
+</ul>
+
+
+<h2><a name="7.07-Documentation"></a>Documentation</h2><pre>
+
+Increment the version number after release. (doc/News.htm [1.90.2.18.2.6]:
+2003/04/08 11:05:47 giles)
+
+Apply standard FSF license banner to files missed the 7.06 release. Patch
+from Brett Smith. (doc/Readme.htm [1.31.2.16.2.5]: 2003/04/12 14:02:38
+giles)
+
+Update the version and data for the 7.07 release.
+(doc/API.htm [1.11.2.13.2.6], doc/C-style.htm [1.21.2.11.2.5],
+doc/DLL.htm [1.15.2.11.2.5], doc/Develop.htm [1.47.2.18.2.6],
+doc/Devices.htm [1.34.2.15.2.6], doc/Drivers.htm [1.21.2.11.2.5],
+doc/Fonts.htm [1.22.2.13.2.6], doc/Helpers.htm [1.17.2.11.2.5],
+doc/History1.htm [1.13.2.11.2.5], doc/History2.htm [1.13.2.11.2.6],
+doc/History3.htm [1.13.2.11.2.6], doc/History4.htm [1.13.2.11.2.6],
+doc/History5.htm [1.15.2.11.2.6], doc/History6.htm [1.30.2.11.2.6],
+doc/History7.htm [1.5.2.17.2.7], doc/Htmstyle.htm [1.18.2.11.2.5],
+doc/Install.htm [1.26.2.13.2.6], doc/Issues.htm [1.15.2.13.2.5],
+doc/Language.htm [1.34.2.16.2.5], doc/Lib.htm [1.14.2.11.2.5],
+doc/Maintain.htm [1.23.2.12.2.6], doc/Make.htm [1.36.2.19.2.6],
+doc/New-user.htm [1.30.2.14.2.6], doc/News.htm [1.90.2.18.2.7],
+doc/Projects.htm [1.33.2.11.2.6], doc/Ps-style.htm [1.13.2.11.2.5],
+doc/Ps2epsi.htm [1.15.2.12.2.6], doc/Ps2pdf.htm [1.32.2.11.2.5],
+doc/Psfiles.htm [1.22.2.12.2.5], doc/Readme.htm [1.31.2.16.2.6],
+doc/Release.htm [1.40.2.23.2.6], doc/Source.htm [1.13.2.11.2.5],
+doc/Unix-lpr.htm [1.13.2.11.2.5], doc/Use.htm [1.33.2.22.2.6],
+doc/Xfonts.htm [1.13.2.11.2.5], doc/gs-vms.hlp [1.12.2.10.2.5],
+man/dvipdf.1 [1.10.2.9.2.5], man/font2c.1 [1.10.2.9.2.5],
+man/gs.1 [1.10.2.10.2.5], man/gslp.1 [1.10.2.9.2.5],
+man/gsnd.1 [1.10.2.9.2.5], man/pdf2dsc.1 [1.10.2.9.2.5],
+man/pdf2ps.1 [1.12.2.9.2.5], man/pdfopt.1 [1.10.2.9.2.5],
+man/pf2afm.1 [1.10.2.9.2.5], man/pfbtopfa.1 [1.11.2.9.2.5],
+man/printafm.1 [1.10.2.9.2.5], man/ps2ascii.1 [1.10.2.9.2.5],
+man/ps2epsi.1 [1.10.2.10.2.5], man/ps2pdf.1 [1.14.2.11.2.5],
+man/ps2pdfwr.1 [1.13.2.10.2.5], man/ps2ps.1 [1.17.2.9.2.5],
+man/wftopfa.1 [1.10.2.9.2.5]: 2003/05/17 14:38:59 giles)
+
+Update the release notes. (doc/News.htm [1.90.2.18.2.8]: 2003/05/17 14:44:22
+giles)
+
+</pre><h2><a name="7.07-Procedures"></a>Procedures</h2><pre>
+
+Increment the version number after release. (version.mak [1.36.2.9.2.5]:
+2003/04/08 11:05:47 giles)
+
+Apply standard FSF license banner to files missed the 7.06 release. Patch
+from Brett Smith. (toolbin/3way.tcl [1.3.6.1.2.1],
+toolbin/cvs2hist.py [1.9.2.2.2.1], toolbin/errlist.tcl [1.3.6.1.2.1],
+toolbin/gsindent [1.3.6.1.2.1], toolbin/gsmake.tcl [1.5.6.1.2.1],
+toolbin/gssubst [1.1.4.1.2.1], toolbin/headers.tcl [1.3.6.1.2.1],
+toolbin/leaks.tcl [1.3.6.1.2.1], toolbin/makegnu.tcl [1.3.6.1.2.1],
+toolbin/makeset.tcl [1.10.2.3.2.1], toolbin/many2pdf.tcl [1.1.4.1.2.1],
+toolbin/pdfinflt.ps [1.1.2.1.2.1], toolbin/pre [1.11.2.3.2.1],
+toolbin/precheck.tcl [1.3.6.1.2.1], toolbin/suite.tcl [1.3.6.1.2.1],
+toolbin/tmake.tcl [1.3.6.1.2.1]: 2003/04/12 14:02:39 giles)
+
+Add the bbox device to the default macos shlib build. Bug 686811.
+(macos-mcp.mak [1.3.2.8.2.2]: 2003/04/27 23:50:11 giles)
+
+Add the display device to the default macos shlib build.
+(macos-mcp.mak [1.3.2.8.2.3]: 2003/04/27 23:52:55 giles)
+
+Log message: For the pngalpha device, set the default background color to
+white in the bKGD chunk. Add an option -dBackgroundColor=16#RRGGBB to
+explicitly set the background color. This is needed by a common web browser
+that doesn't correctly support PNG with alpha transparency. DETAILS:
+Programs that don't fully support alpha transparency let libpng convert an
+RGBA image to RGB. The background color used is either provided by the
+program, or in the bKGD chunk, or it falls back to gray. MSIE was defaulting
+to a gray background which is not commonly used on web pages. By writing a
+white bKGD chunk, PNG files will display correctly against a white
+background in MSIE. If a solid color for a web page background is used with
+&lt;body bgcolor="#CCCC00"&gt;, then PNG images appearing on that page would
+need to be created with -dBackgroundColor=16#CCCC00. For textured background
+there is no hope. Microsoft needs to fix Internet Explorer.
+(libpng.mak [1.10.2.3.2.2]: 2003/05/15 10:05:29 ghostgum)
+
+Update the version and data for the 7.07 release.
+(version.mak [1.36.2.9.2.6]: 2003/05/17 14:39:00 giles)
+
+</pre><h2><a name="7.07-Utilities"></a>Utilities</h2><pre>
+
+Apply standard FSF license banner to files missed the 7.06 release. Patch
+from Brett Smith. (lib/Fontmap.ATB [1.2.6.1.2.1],
+lib/Fontmap.ATM [1.2.6.1.2.1], lib/Fontmap.GS [1.2.6.1.2.1],
+lib/Fontmap.OS2 [1.2.6.1.2.1], lib/Fontmap.SGI [1.2.6.1.2.1],
+lib/Fontmap.Sol [1.2.6.1.2.1], lib/Fontmap.Ult [1.2.6.1.2.1],
+lib/addxchar.ps [1.2.6.1.2.1], lib/align.ps [1.2.6.1.2.1],
+lib/bdftops.ps [1.3.2.2.2.1], lib/caption.ps [1.2.6.1.2.1],
+lib/cid2code.ps [1.3.4.1.2.1], lib/docie.ps [1.2.6.1.2.1],
+lib/errpage.ps [1.2.6.1.2.1], lib/font2c.ps [1.3.2.1.2.1],
+lib/font2pcl.ps [1.2.6.2.2.1], lib/gslp.ps [1.2.6.2.2.1],
+lib/gsnup.ps [1.2.6.1.2.1], lib/image-qa.ps [1.3.2.1.2.1],
+lib/impath.ps [1.3.4.1.2.1], lib/jispaper.ps [1.2.6.1.2.1],
+lib/lines.ps [1.2.6.1.2.1], lib/markhint.ps [1.2.6.1.2.1],
+lib/markpath.ps [1.2.6.1.2.1], lib/packfile.ps [1.2.6.2.2.1],
+lib/pcharstr.ps [1.2.6.1.2.1], lib/pdf2dsc.ps [1.3.4.2.2.1],
+lib/pdfopt.ps [1.10.2.2.2.1], lib/pdfwrite.ps [1.7.2.1.2.1],
+lib/pfbtopfa.ps [1.2.6.1.2.1], lib/ppath.ps [1.2.6.1.2.1],
+lib/pphs.ps [1.3.2.1.2.1], lib/ps2ai.ps [1.2.6.1.2.1],
+lib/ps2ascii.ps [1.3.2.2.2.1], lib/ps2epsi.ps [1.5.2.3.2.1],
+lib/rollconv.ps [1.1.8.1], lib/showchar.ps [1.2.6.1.2.1],
+lib/stcinfo.ps [1.2.6.1.2.1], lib/stcolor.ps [1.2.6.1.2.1],
+lib/stocht.ps [1.3.6.1.2.1], lib/traceimg.ps [1.2.6.2.2.1],
+lib/traceop.ps [1.2.6.1.2.1], lib/type1enc.ps [1.2.6.1.2.1],
+lib/type1ops.ps [1.2.6.1.2.1], lib/uninfo.ps [1.2.6.1.2.1],
+lib/unprot.ps [1.2.6.1.2.1], lib/viewcmyk.ps [1.2.6.2.2.1],
+lib/viewgif.ps [1.2.6.1.2.1], lib/viewjpeg.ps [1.1.6.2.2.1],
+lib/viewmiff.ps [1.2.6.1.2.1], lib/viewpbm.ps [1.2.6.2.2.1],
+lib/viewpcx.ps [1.2.6.2.2.1], lib/viewps2a.ps [1.2.6.1.2.1],
+lib/wftopfa.ps [1.2.6.1.2.1], lib/winmaps.ps [1.2.6.1.2.1],
+lib/wrfont.ps [1.2.6.1.2.1], lib/zeroline.ps [1.2.6.1.2.1]: 2003/04/12
+14:02:38 giles)
+
+Avoid calling a null pgsdll_callback, as can happen with the new client api
+and CHECK_INTERRUPTS. This fix affects primarily MacOS; similar protections
+are already in place for other platforms, although the global was not
+explicitly initialized to null. Also return EOFC in the mac stdio stream
+process if no callback is defined. Closes bug 686768. Also backports some
+code cleanup from HEAD. (gp_mac.c [1.1.4.3.2.2], gp_macio.c [1.2.4.5.2.3]:
+2003/04/12 16:37:26 giles)
+
+Add a missing variable declaration for VMS. Patch from Forrest Cahoon and
+Jouk Jansen. (gp_vms.c [1.7.2.3.2.2]: 2003/04/14 13:58:04 giles)
+
+</pre><h2><a name="7.07-Drivers"></a>Drivers</h2><pre>
+
+Avoid calling a null pgsdll_callback, as can happen with the new client api
+and CHECK_INTERRUPTS. This fix affects primarily MacOS; similar protections
+are already in place for other platforms, although the global was not
+explicitly initialized to null. Also return EOFC in the mac stdio stream
+process if no callback is defined. Closes bug 686768. Also backports some
+code cleanup from HEAD. (gdevmac.c [1.1.4.3.2.2]: 2003/04/12 16:37:26 giles)
+
+In the display device, store the line pointers separately from the bits, so
+that the bits can be placed in special memory (e.g. allocated in video
+memory). Fixes Bug 686780 display_memalloc() asks for too much memory. If
+reopening the display device fails after setting the callback, display an
+error message. Allocate the large display bitmap using a low level allocator
+to avoid exceeding the memory limit of the previously used device stable
+memory allocator. Fixes bugs 686836 "-r doesn't work" and duplicate 686838
+"Ghostscript doesn't do anything". DETAILS: The display memory device and
+the raster including line pointers was allocated using the stable allocator
+of the display device. This had a limit of 1Mbyte, which was exceeded when
+the resolution was greater then 114dpi. This would cause subsequent
+allocations to fail, but it appears that nothing else tried to use this
+allocator after the display device. The display device was changed to
+allocate the line pointers separately to allow the raster to be allocated in
+special memory, e.g. video memory or shared memory. This caused the
+subsequent allocation of the line pointers to fail when resolution exceeded
+114dpi. The modified code now allocates the raster with
+gs_alloc_byte_array_immovable, which allocates directly from the C heap, not
+subject to any memory limit apart from the overall -K limit if specified,
+and is not subject to garbage collection. The normal allocator now has
+sufficient memory to allocate the line pointers without problem. The raster
+pointer is removed from the pointers that are enumerated during garbage
+collection. (gdevdsp.c [1.5.2.5.2.3]: 2003/05/01 10:06:26 ghostgum)
+
+Log message: For the pngalpha device, set the default background color to
+white in the bKGD chunk. Add an option -dBackgroundColor=16#RRGGBB to
+explicitly set the background color. This is needed by a common web browser
+that doesn't correctly support PNG with alpha transparency. DETAILS:
+Programs that don't fully support alpha transparency let libpng convert an
+RGBA image to RGB. The background color used is either provided by the
+program, or in the bKGD chunk, or it falls back to gray. MSIE was defaulting
+to a gray background which is not commonly used on web pages. By writing a
+white bKGD chunk, PNG files will display correctly against a white
+background in MSIE. If a solid color for a web page background is used with
+&lt;body bgcolor="#CCCC00"&gt;, then PNG images appearing on that page would
+need to be created with -dBackgroundColor=16#CCCC00. For textured background
+there is no hope. Microsoft needs to fix Internet Explorer.
+(gdevpng.c [1.4.2.1.2.3]: 2003/05/15 10:05:29 ghostgum)
+
+</pre><h2><a name="7.07-PDF_Interpreter"></a>PDF Interpreter</h2><pre>
+
+Apply standard FSF license banner to files missed the 7.06 release. Patch
+from Brett Smith. (lib/pdf_base.ps [1.14.2.1.2.1],
+lib/pdf_draw.ps [1.36.2.2.2.1], lib/pdf_font.ps [1.23.2.6.2.1],
+lib/pdf_main.ps [1.35.2.7.2.3], lib/pdf_ops.ps [1.17.2.2.2.1]: 2003/04/12
+14:02:39 giles)
+
+</pre><h2><a name="7.07-Interpreter"></a>Interpreter</h2><pre>
+
+Increment the version number after release. (lib/gs_init.ps [1.40.2.12.2.2]:
+2003/04/08 11:05:47 giles)
+
+Apply standard FSF license banner to files missed the 7.06 release. Patch
+from Brett Smith. (examples/waterfal.ps [1.3.2.1.2.1],
+lib/gs_agl.ps [1.2.6.1.2.1], lib/gs_btokn.ps [1.5.2.1.2.1],
+lib/gs_ccfnt.ps [1.5.2.1.2.1], lib/gs_ce_e.ps [1.2.6.1.2.1],
+lib/gs_cff.ps [1.10.2.1.2.1], lib/gs_cidcm.ps [1.5.2.2.2.1],
+lib/gs_cidfn.ps [1.18.4.5.2.1], lib/gs_cmap.ps [1.11.2.4.2.1],
+lib/gs_cmdl.ps [1.2.6.1.2.1], lib/gs_css_e.ps [1.2.6.1.2.1],
+lib/gs_dbt_e.ps [1.2.6.1.2.1], lib/gs_diskf.ps [1.2.6.1.2.1],
+lib/gs_dpnxt.ps [1.2.6.1.2.1], lib/gs_dps.ps [1.4.6.1.2.1],
+lib/gs_dps1.ps [1.2.6.1.2.1], lib/gs_dps2.ps [1.3.4.1.2.1],
+lib/gs_dscp.ps [1.4.2.1.2.1], lib/gs_epsf.ps [1.2.6.11.2.3],
+lib/gs_fform.ps [1.2.6.1.2.1], lib/gs_fonts.ps [1.13.2.3.2.1],
+lib/gs_frsd.ps [1.4.6.1.2.1], lib/gs_icc.ps [1.2.2.1.2.1],
+lib/gs_il1_e.ps [1.2.6.1.2.1], lib/gs_il2_e.ps [1.2.6.1.2.1],
+lib/gs_init.ps [1.40.2.12.2.3], lib/gs_kanji.ps [1.2.6.1.2.1],
+lib/gs_ksb_e.ps [1.2.6.1.2.1], lib/gs_l2img.ps [1.2.6.1.2.1],
+lib/gs_lev2.ps [1.7.2.4.2.3], lib/gs_lgo_e.ps [1.3.6.1.2.1],
+lib/gs_lgx_e.ps [1.2.6.1.2.1], lib/gs_ll3.ps [1.10.2.2.2.1],
+lib/gs_mex_e.ps [1.2.6.1.2.1], lib/gs_mgl_e.ps [1.3.6.1.2.1],
+lib/gs_mro_e.ps [1.2.6.1.2.1], lib/gs_pdf_e.ps [1.2.6.1.2.1],
+lib/gs_pdfwr.ps [1.11.2.1.2.1], lib/gs_pfile.ps [1.2.6.1.2.1],
+lib/gs_rdlin.ps [1.2.6.1.2.1], lib/gs_res.ps [1.16.2.2.2.1],
+lib/gs_setpd.ps [1.8.2.2.2.2], lib/gs_statd.ps [1.5.2.2.2.1],
+lib/gs_std_e.ps [1.2.6.1.2.1], lib/gs_sym_e.ps [1.2.6.1.2.1],
+lib/gs_trap.ps [1.3.6.2.2.1], lib/gs_ttf.ps [1.9.2.4.2.1],
+lib/gs_typ32.ps [1.3.2.2.2.1], lib/gs_typ42.ps [1.2.6.1.2.1],
+lib/gs_type1.ps [1.5.2.1.2.1], lib/gs_wan_e.ps [1.2.6.1.2.1],
+lib/gs_wl1_e.ps [1.2.6.1.2.1], lib/gs_wl2_e.ps [1.2.6.1.2.1],
+lib/gs_wl5_e.ps [1.2.6.1.2.1]: 2003/04/12 14:02:38 giles)
+
+Sort the list of devices in the output of 'gs -h' so they're easier to read.
+List the default device separately as it's no longer first. Based on a patch
+from Nelson Beebe. Closes bug 416746. Also correct a warning in argproc().
+(imainarg.c [1.13.2.3.2.2]: 2003/04/12 16:43:14 giles)
+
+In the display device, store the line pointers separately from the bits, so
+that the bits can be placed in special memory (e.g. allocated in video
+memory). Fixes Bug 686780 display_memalloc() asks for too much memory. If
+reopening the display device fails after setting the callback, display an
+error message. Allocate the large display bitmap using a low level allocator
+to avoid exceeding the memory limit of the previously used device stable
+memory allocator. Fixes bugs 686836 "-r doesn't work" and duplicate 686838
+"Ghostscript doesn't do anything". DETAILS: The display memory device and
+the raster including line pointers was allocated using the stable allocator
+of the display device. This had a limit of 1Mbyte, which was exceeded when
+the resolution was greater then 114dpi. This would cause subsequent
+allocations to fail, but it appears that nothing else tried to use this
+allocator after the display device. The display device was changed to
+allocate the line pointers separately to allow the raster to be allocated in
+special memory, e.g. video memory or shared memory. This caused the
+subsequent allocation of the line pointers to fail when resolution exceeded
+114dpi. The modified code now allocates the raster with
+gs_alloc_byte_array_immovable, which allocates directly from the C heap, not
+subject to any memory limit apart from the overall -K limit if specified,
+and is not subject to garbage collection. The normal allocator now has
+sufficient memory to allocate the line pointers without problem. The raster
+pointer is removed from the pointers that are enumerated during garbage
+collection. (idisp.c [1.2.2.2.2.2]: 2003/05/01 10:06:26 ghostgum)
+
+Security fixes. Add detection of %pipe% device when in SAFER mode. Also fix
+detection of 'renamefile' to prevent rename from a file that is not on the
+PermitFileControl list. (zfile.c [1.11.2.4.2.2]: 2003/05/17 14:28:33 ray)
+
+</pre><h2><a name="7.07-Library"></a>Library</h2><pre>
+
+Increment the version number after release. (gscdef.c [1.15.2.4.2.3]:
+2003/04/08 11:05:47 giles)
+
+Update the version and data for the 7.07 release. (gscdef.c [1.15.2.4.2.4]:
+2003/05/17 14:39:00 giles)
+
+</pre><h2><a name="7.07-Other"></a>Other</h2><pre>
+
+Test the optimization compiler flag '-O2' before using it since some vendor
+compilers have different syntax. (Makefile.in [1.1.4.13.2.3],
+configure.ac [1.4.4.12.2.2]: 2003/04/16 13:59:56 giles)
+
+Include the bbox device in the default autoconf build.
+(Makefile.in [1.1.4.13.2.4]: 2003/04/29 18:33:31 giles)
+
+</pre></body></html>
diff --git a/Master/xemtex/doc/ghostscript/Current.htm b/Master/xemtex/doc/ghostscript/Current.htm
new file mode 100644
index 00000000000..1d4fd4270f6
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Current.htm
@@ -0,0 +1,272 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Information specifically about the current release</title>
+<!-- $Id: Current.htm,v 1.13.2.11.2.5 2003/05/17 14:38:59 giles Exp $ -->
+<!-- Originally: current.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Information specifically about Ghostscript 6.0</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<ul>
+<li><a href="#New_features">New features (since release 5.50)</a>
+<li><a href="#Changes">Changes (since release 5.50)</a>
+<li><a href="#Known_problems">Known problems</a>
+ <ul>
+ <li><a href="#Usage">Usage</a>
+ <li><a href="#Limitations">Limitations</a>
+ <li><a href="#Graphics_bugs">Graphics bugs</a>
+ <li><a href="#Non_graphics_bugs">Non-graphics bugs</a>
+ </ul>
+</ul>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="New_features"></a>New features (since release 5.50)</h2>
+
+<p>
+(This is not a complete list of new features: see <a href="News.htm">the
+news</a> for details.)
+
+<p>
+Ghostscript now handles essentially all of PostScript LanguageLevel 3 and
+PDF 1.3 (Acrobat 4.x compatibility). See <a
+href="Language.htm"><b>Language.htm</b></a> for details.
+
+<p>
+The PDF writer now implements most of the Acrobat (TM) Distiller parameters
+for compressing and downsampling images.
+
+<p>
+The PDF writer now recognizes nearly all varieties of pdfmark, other than
+the Distiller 3.0 "named object" pdfmarks and the Distiller 4.0 "document
+structure" pdfmarks.
+
+<p>
+The PDF writer now handles text in all fonts, not just the 14 built-in ones,
+and implements the Distiller parameters affecting font embedding and
+subsetting. (It still usually converts double-byte fonts to bitmaps.)
+
+<p>
+16- and 24-bit X Windows displays are now fully supported.
+
+<p>
+You now need only the header files and shared libraries, not the source
+code, if you want to use precompiled versions of the jpeg, libpng, or zlib
+libraries.
+
+<p>
+The syntax
+<b><tt>%</tt></b><em>iodevice</em><b><tt>%</tt></b><em>filename</em> is now
+supported with the <b><tt>-sOutputFile=</tt></b> switch, allowing you to
+send raster output to a piped command.
+
+<p>
+You can now use MMK or MMS to build Ghostscript on OpenVMS systems.
+
+<p>
+For driver writers, there are improved facilities for planar output,
+rasterizing directly into a driver-provided buffer, detecting bands that are
+all white or that only use a subset of the colorants, and providing CRDs
+from the driver.
+
+<p>
+The driver API now includes facilities for passing high-level text
+operations, completing the set of high-level operations (bitmap images and
+vector graphics were implemented in 5.50). See <a href="Drivers.htm">the
+documentation</a> for details.
+
+<p>
+Ghostscript as a dynamically linked library is now supported on the Mac as
+well as on Windows.
+
+<p>
+GNU readline was supported in most of the beta distributions for 6.0, but
+was removed at the last minute because of objections from the Free Software
+Foundation. Please see <a href="Make.htm#GNU_readline">here</a> for more
+information.
+
+<h2><a name="Changes"></a>Changes (since release 5.50)</h2>
+
+<h3>Directories and build procedure</h3>
+
+<p>
+The files in the release now have a more complex directory structure. In
+the table below, <em>top</em> refers to the top-level directory,
+<b><tt>gs</tt></b><em>n.nn</em>.
+
+<p>
+The <em>top</em><b><tt>/</tt></b> is where you create a link to the
+appropriate makefile in <em>top</em><b><tt>/src/</tt></b>. On all systems
+other than MS Windows, the build procedure does not write into this
+directory.
+
+<p>
+The files included in the Ghostscript release now are found in five
+subdirectories.
+
+<ul>
+<li><em>top</em><b><tt>/src/</tt></b> contains the C/C++ source code, the
+makefiles, and all other files needed to build the program. The build
+procedure reads from this directory but does not write into it. Nothing in
+this directory is needed at run time.
+
+<li><p><em>top</em><b><tt>/lib/</tt></b> contains PostScript and script
+files needed at run time. The build procedure reads from this directory but
+does not write into it. The contents of this directory are needed at run
+time and are copied by the Unix <b><tt>make install</tt></b> command.
+
+<li><em>top</em><b><tt>/doc/</tt></b> contains documentation. Copied by
+<b><tt>make install</tt></b>.
+
+<li><em>top</em><b><tt>/man/</tt></b> contains Unix <b><tt>man</tt></b>
+pages. Copied by <b><tt>make install</tt></b>.
+
+<li><em>top</em><b><tt>/examples/</tt></b> contains sample PostScript and
+PDF files. Copied by <b><tt>make install</tt></b>.
+
+</ul>
+
+<p>
+The build procedure creates two additional subdirectories,
+<em>top</em><b><tt>/obj/</tt></b> (or <b><tt>debugobj</tt></b> or
+<b><tt>pgobj</tt></b>) and <em>top</em><b><tt>/bin/</tt></b>. See the
+documentation on <a href="Make.htm">how to build Ghostscript</a> for more
+information.
+
+<h2>Other changes</h2>
+
+<p>
+If you are a developer working with the Ghostscript code in any way other
+than writing or modifying drivers, please read all of the "Incompatible
+changes" sections of the <a href="News.htm">release news</a> for important
+information.
+
+<h2><a name="Known_problems"></a>Known problems</h2>
+
+<p>
+See the <a href="News.htm">release news</a> for details.
+
+<h3><a name="Usage"></a>Usage</h3>
+
+<p>
+On a DOS system, interrupting the interpreter by typing control-C doesn't
+restore the display mode.
+
+<h3><a name="Limitations"></a>Limitations</h3>
+
+<p>
+<b><tt>serialnumber</tt></b> returns the same value in all copies.
+
+<p>
+Some floating point exceptions terminate the interpreter, rather than
+producing a <b><tt>limitcheck</tt></b> error.
+
+<p>
+The <b><tt>DCTEncode</tt></b> filter disregards the <b><tt>Blend</tt></b>
+parameter, and uses different <b><tt>QuantTables</tt></b> and
+<b><tt>HuffTables</tt></b> from Adobe's.
+
+<p>
+The DCT filters do not support nonintegral sample ratios. Also,
+<b><tt>DCTEncode</tt></b> will not create files with Sum(HS&times;VS)&gt;10
+(regardless of the value of the <b><tt>Relax</tt></b> parameter) because
+they violate the JPEG standard; but <b><tt>DCTDecode</tt></b> will read
+such files.
+
+<p>
+The size of the execution stack cannot be changed dynamically. (However,
+the sizes of the operand and dictionary stacks can be changed.)
+
+<p>
+<b><tt>Separation</tt></b> and <b><tt>DeviceN</tt></b> color spaces are
+implemented, but devices that actually produce color separations are not
+supported: these color spaces always use the alternate space. The special
+color separations <b><tt>All</tt></b> and <b><tt>None</tt></b>, and the
+primary separations (<b><tt>Red</tt></b>, <b><tt>Green</tt></b>, etc.), are
+not supported.
+
+<p>
+<b><tt>execform</tt></b> and <b><tt>ucache</tt></b> are implemented, but
+they do not actually do any caching; <b><tt>setucacheparams</tt></b> and
+<b><tt>ucachestatus</tt></b> are dummies. (This only impacts performance,
+not functionality.)
+
+<p>
+The <b><tt>image</tt></b> operator honors the <b><tt>Interpolate</tt></b>
+flag in the image dictionary only for ImageType 1 and 3 images, only if the
+combined transformation (<b><tt>ImageMatrix</tt></b> + CTM) doesn't involve
+rotation, skewing, or X-reflection, and only for certain scalings and color
+spaces; <b><tt>imagemask</tt></b> doesn't honor <b><tt>Interpolate</tt></b>
+at all.
+
+<p>
+Some path-building operations that would generate a device coordinate
+larger than +/-2^<small><sup>19</sup></small> will cause a
+limitcheck. However, the common ones (<b><tt>[r]moveto</tt></b>,
+<b><tt>[r]lineto</tt></b>, <b><tt>[r]curveto</tt></b>, <b><tt>closepath</tt></b>) will not.
+
+<h3><a name="Graphics_bugs"></a>Graphics bugs</h3>
+
+<p>
+There are no known graphics bugs in this release.
+
+<h3><a name="Non_graphics_bugs"></a>Non-graphics bugs</h3>
+
+<p>
+The <b><tt>definefont</tt></b> operator (Subrs (type 1 fonts)) expects
+arrays but won't accept packed arrays.
+
+<p>
+Syntax errors occurring within a binary token do not produce the error
+message specified by the Adobe documentation.
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 1997, 1998, 1999 Aladdin Enterprises.
+All rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/DLL.htm b/Master/xemtex/doc/ghostscript/DLL.htm
new file mode 100644
index 00000000000..180d4218349
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/DLL.htm
@@ -0,0 +1,703 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>How to use the Ghostscript Dynamic Link Library (DLL)</title>
+<!-- $Id: DLL.htm,v 1.15.2.11.2.5 2003/05/17 14:38:59 giles Exp $ -->
+<!-- Originally: dll.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>How to use the Ghostscript Dynamic Link Library (DLL)</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<ul>
+<li><a href="#DLL">What is the Ghostscript DLL?</a>
+<li><a href="#Common_functions">Platform-independent DLL functions</a>
+<ul>
+<li><a href="#revision"><b><tt>gsdll_revision()</tt></b></a>
+<li><a href="#init"><b><tt>gsdll_init()</tt></b></a>
+<li><a href="#execute_begin"><b><tt>gsdll_execute_begin()</tt></b></a>
+<li><a href="#execute_cont"><b><tt>gsdll_execute_cont()</tt></b></a>
+<li><a href="#execute_end"><b><tt>gsdll_execute_end()</tt></b></a>
+<li><a href="#exit"><b><tt>gsdll_exit()</tt></b></a>
+<li><a href="#lock_device"><b><tt>gsdll_lock_device()</tt></b></a>
+</ul>
+<li><a href="#Callback">Callback function</a>
+<li><a href="#OS2_device">Ghostscript DLL device for OS/2</a>
+<ul>
+<li><a href="#OS2_bmp"><b><tt>gsdll_get_bitmap()</tt></b></a>
+<li><a href="#OS2_example">Example DLL usage for OS/2</a>
+</ul>
+<li><a href="#Win_device">Ghostscript DLL device for MS Windows</a>
+<ul>
+<li><a href="#Win_copydib"><b><tt>gsdll_copy_dib()</tt></b></a>
+<li><a href="#Win_copypalette"><b><tt>gsdll_copy_palette()</tt></b></a>
+<li><a href="#Win_draw"><b><tt>gsdll_draw()</tt></b></a>
+<li><a href="#Win_get_row"><b><tt>gsdll_get_bitmap_row()</tt></b></a>
+</ul>
+<li><a href="#Win16">Ghostscript DLL Device for 16-bit MS Windows</a>
+</ul>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<p>
+<b>WARNING: The API described in this document is obsolete and will
+be removed in the future.</b>
+The current Ghostscript Interpreter API
+is described in <a href="API.htm">API.htm</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="DLL"></a>What is the Ghostscript DLL?</h2>
+
+<p>
+For the OS/2, Win16 and Win32 platforms, Ghostscript is built as a dynamic
+link library (DLL), and to provide the interface described in the <a
+href="Use.htm">usage documentation</a>, a smaller independent executable
+(<b><tt>.EXE</tt></b>) loads this DLL, which provides all the interaction
+with the windowing system, including image windows and, if necessary, a
+text window. This document describes the DLL interface, which consists of
+eight main functions, <a href="#functions">seven platform-independent
+ones</a> provided by the DLL and one, <a href="#Callback">the callback
+function</a>, provided by the caller. The DLL provides some other
+platform-specific functions for display devices.
+
+<p>
+The DLL's name and characteristics differ among the three platforms:
+
+<ul>
+<li>The <a href="#OS2_device">OS/2 DLL <b><tt>GSDLL2.DLL</tt></b></a> has
+MULTIPLE NONSHARED data segments and can be called by multiple programs
+simultaneously.
+
+<li>The <a href="#Win_device">Win32 DLL <b><tt>GSDLL32.DLL</tt></b></a> has
+MULTIPLE NONSHARED data segments. Under Win32s it can be used by only one
+program at a time, but under Windows 95/98 or Windows NT it can be called by
+multiple programs simultaneously.
+
+<li>The <a href="#Win16">Win16 DLL <b><tt>GSDLL16.DLL</tt></b></a> is a
+large-memory model DLL with far static data. Due to the limitations of
+16-bit MS Windows -- Windows 3.n -- the DLL can be used by only one program
+at a time.
+</ul>
+
+<p>
+The source for the executable is in <b><tt>dp</tt></b>*.* (OS/2) and
+<b><tt>dw</tt></b>*.* (Windows). See these source files for examples of
+how to use the DLL.
+
+<hr>
+
+<h2><a name="Common_functions"></a>Platform-independent DLL functions</h2>
+
+<p>
+The seven functions provided by the DLL are
+<ul>
+<li><b><tt>int GSDLLAPI <a href="#revision">gsdll_revision</a>(char **product, char **copyright, long *gs_revision, long *gs_revisiondate)</tt></b>
+<li><b><tt>int GSDLLAPI <a href="#init">gsdll_init</a>(GSDLL_CALLBACK callback, HWND hwnd, int argc, char *argv[]);</tt></b>
+<li><b><tt>int GSDLLAPI <a href="#execute_begin">gsdll_execute_begin</a>(void);</tt></b>
+<li><b><tt>int GSDLLAPI <a href="#execute_cont">gsdll_execute_cont</a>(const char *str, int len);</tt></b>
+<li><b><tt>int GSDLLAPI <a href="#execute_end">gsdll_execute_end</a>(void);</tt></b>
+<li><b><tt>int GSDLLAPI <a href="#exit">gsdll_exit</a>(void);</tt></b>
+<li><b><tt>int GSDLLAPI <a href="#lock_device">gsdll_lock_device</a>(unsigned char *device, int flag);</tt></b>
+
+<p>
+where <b><tt>GSDLLAPI</tt></b> is defined under OS/2 as
+
+<blockquote><b><tt>
+#define GSDLLAPI
+</tt></b></blockquote>
+
+<p>
+and under MS Windows as
+
+<blockquote><b><tt>
+#define GSDLLAPI CALLBACK _export
+</tt></b></blockquote>
+</ul>
+
+<h3><a name="revision"></a><b><tt>gsdll_revision()</tt></b></h3>
+
+<blockquote>
+This function returns the revision numbers and strings of the Ghostscript
+DLL; you should call it before <b><tt>gsdll_init()</tt></b> to make sure
+that the correct version of the Ghostscript DLL has been loaded. For
+example
+
+<blockquote>
+<pre>char *product;
+char *copyright;
+long revision;
+long revisiondate;
+gsdll_revision(&amp;product, &amp;copyright, &amp;revision, &amp;revisiondate);
+</pre></blockquote>
+
+<p>
+You may use <b><tt>NULL</tt></b> pointers if you do not want a particular
+value.
+</blockquote>
+
+<h3><a name="init"></a><b><tt>gsdll_init()</tt></b></h3>
+
+<blockquote>
+<b><tt>gsdll_init()</tt></b> must be called after loading the DLL and
+before executing any Ghostscript commands. The arguments are the address
+of the callback function, a parent window handle, the count of arguments
+and an array of pointers to the arguments. For example
+
+<blockquote>
+<pre>char *argv[5];
+argv[0] = "gswin.exe";
+argv[1] = "-Ic:\\gs;c:\gs\\fonts";
+argv[2] = "-dNOPAUSE",
+argv[3] = "-sDEVICE=djet500",
+argv[4] = NULL;
+argc = 4;
+
+code = gsdll_init(gsdll_callback, hwnd, argc, argv);
+</pre></blockquote>
+
+<p>
+<b><tt>hwnd</tt></b> is used as the parent window handle for any windows
+created by Ghostscript. <b><tt>hwnd</tt></b> may be <b><tt>NULL</tt></b>
+if the caller has no windows, but if it is <b><tt>NULL</tt></b>, you should
+avoid using devices which may open windows.
+
+<p>
+A return code of 0 (zero) indicates no errors, and the code may now call
+<b><tt>gsdll_execute_begin()</tt></b> or <b><tt>gsdll_exit()</tt></b>. If
+the return value is non-zero then <b><tt>gsdll_exit()</tt></b> must not be
+called.
+
+<p>
+A return value of <b><tt>GSDLL_INIT_QUIT</tt></b> indicates that one of the
+command line files or arguments called "<b><tt>quit</tt></b>", or that
+Ghostscript was reading stdin and reached end-of-file. This is not an
+error. <b><tt>gsdll_exit()</tt></b> must not be called.
+
+<p>
+A return value of <b><tt>GSDLL_INIT_IN_USE</tt></b> indicates that the DLL
+is in use by another application (Windows 3.1 only). The DLL should be
+immediately unloaded (or the caller terminated).
+<b><tt>gsdll_exit()</tt></b> must not be called.
+</blockquote>
+
+<h3><a name="execute_begin"></a><b><tt>gsdll_execute_begin()</tt></b></h3>
+
+<blockquote>
+This must be called after <b><tt>gsdll_init()</tt></b> and before
+<b><tt>gsdll_execute_cont()</tt></b>.
+</blockquote>
+
+<h3><a name="execute_cont"></a><b><tt>gsdll_execute_cont()</tt></b></h3>
+
+<blockquote>
+After successfully calling <b><tt>gsdll_init()</tt></b> and
+<b><tt>gsdll_execute_begin()</tt></b>, commands may be given to Ghostscript
+with <b><tt>gsdll_execute_cont()</tt></b>. Examples are:
+
+<blockquote>
+<pre>char *command = "1 2 add == flush\n";
+code = gsdll_execute_cont(command, strlen(command));
+command = "qu"
+code = gsdll_execute_cont(command, strlen(command));
+command = "it\n"
+code = gsdll_execute_cont(command, strlen(command));
+</pre>
+
+<a name="cont_returns"></a>
+<table cellpadding=0 cellspacing=0>
+<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Return codes from <b><tt>gsdll_execute_cont()</tt></b></font><hr>
+<tr valign=bottom>
+ <th align=left>Code
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th align=left>Status
+<tr> <td colspan=3><hr>
+<tr valign=top> <td align=left>0
+ <td>&nbsp;
+ <td>No errors
+<tr valign=top> <td align=left>&lt; 0
+ <td>&nbsp;
+ <td>Error
+<tr valign=top> <td align=left>&lt;= -100
+ <td>&nbsp;
+ <td>"<b><tt>quit</tt></b>" has been executed, or fatal error.
+<b><tt>gsdll_exit()</tt></b> must then be called: do not call
+<b><tt>gsdll_execute_end()</tt></b>.
+</table>
+</blockquote>
+
+<b><tt>gsdll_execute_cont()</tt></b>
+does not flush stdio, so if you want to see output from Ghostscript you
+must do this explicitly as shown in the example above.
+
+<p>
+When executing a string with <b><tt>gsdll_execute_cont()</tt></b>,
+<b><tt>currentfile</tt></b> is the input from
+<b><tt>gsdll_execute_cont()</tt></b>. Reading from <b><tt>%stdin</tt></b>
+uses the callback.
+
+</blockquote>
+
+<h3><a name="execute_end"></a><b><tt>gsdll_execute_end()</tt></b></h3>
+
+<blockquote>
+If <b><tt>gsdll_execute_cont()</tt></b> did not return an error, then
+<b><tt>gsdll_execute_end()</tt></b> must be called after
+<b><tt>gsdll_execute_cont()</tt></b> and before
+<b><tt>gsdll_exit()</tt></b>.
+</blockquote>
+
+<h3><a name="exit"></a><b><tt>gsdll_exit()</tt></b></h3>
+
+<blockquote>
+Call gsdll_exit() to terminate the Ghostscript DLL. It must be called if a
+fatal error has occurred; see the <a href="#cont_returns">return value
+of <b><tt>gsdll_execute_cont()</tt></b></a>. After calling
+<b><tt>gsdll_exit()</tt></b>, there are two options:
+
+<ul>
+<li>Unload the DLL, either by terminating the application or by
+calling <b><tt>DosFreeModule</tt></b> (OS/2) or <b><tt>FreeLibrary</tt></b> (MS Windows).
+
+<li>Call <b><tt>gsdll_init()</tt></b> again to restart Ghostscript.
+</ul>
+</blockquote>
+
+<h3><a name="lock_device"></a><b><tt>gsdll_lock_device()</tt></b></h3>
+
+<blockquote>
+Since the caller may be multithreaded, a lock is needed to control access
+to the display device, and <b><tt>gsdll_lock_device()</tt></b> provides that
+locking.
+
+<blockquote>
+<pre>int gsdll_lock_device(unsigned char *device, int flag);
+ /* Lock the device if flag = TRUE */
+ /* Unlock the device if flag = FALSE */
+ /* device is a pointer to Ghostscript os2dll or mswindll device */
+ /* from GSDLL_DEVICE message. */
+ /* Return value is the lock count. */
+</pre>
+
+<table cellpadding=0 cellspacing=0>
+<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Locking and unlocking devices</font><hr>
+<tr valign=top> <td>To lock a device
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <td><b><tt>gsdll_lock_device(device, 1)</tt></b>;
+<tr valign=top> <td>To unlock a device
+ <td>&nbsp;
+ <td><b><tt>gsdll_lock_device(device, 0)</tt></b>;
+</table>
+</blockquote>
+
+<p>
+This function is typically used to lock the device while repainting a
+window or copying the device bitmap to the clipboard. Ghostscript may draw
+into the device bitmap or update the palette entries while the device is
+locked by the caller, but locking the device prevents the Ghostscript DLL
+from closing the device or changing its size or depth.
+
+<p>
+Under OS/2, Windows 95/98 and Windows NT, this lock is implemented using a
+mutual exclusion semaphore (mutex). The return value is the lock count,
+which is either 0 ("unlocked") or 1 ("locked"). The function blocks until
+the device is locked by the caller.
+
+<p>
+Under Win16 or Win32s, <b><tt>gsdll_lock_device()</tt></b> always returns
+immediately with a lock count as its return value. A lock count of 2 or
+more is definite indication of an error, probably calling the function
+twice. Access to the device should be controlled by checking the Windows
+message queue only when the bitmap is not being accessed.
+</blockquote>
+
+<hr>
+
+<h2><a name="Callback"></a>Callback function</h2>
+
+<blockquote>
+As an argument to <a href="#init"><b><tt>gsdll_init()</tt></b></a> the
+caller must provide a callback function which the DLL invokes for stdio and
+to notify the caller about device events. The function provided by the
+caller has this prototype:
+
+<blockquote><b><tt>
+int gsdll_callback(int&nbsp;message, char&nbsp;*str, unsigned&nbsp;long&nbsp;count);
+</tt></b></blockquote>
+
+<p>
+The Pascal calling convention is not used. An example callback function
+is:
+
+<blockquote>
+<pre>int
+gsdll_callback(int message, char *str, unsigned long count)
+{
+char *p;
+ switch (message) {
+ case GSDLL_STDIN:
+ p = fgets(str, count, stdin);
+ if (p)
+ return strlen(str);
+ else
+ return 0;
+ case GSDLL_STDOUT:
+ if (str != (char *)NULL)
+ fwrite(str, 1, count, stdout);
+ return count;
+ case GSDLL_DEVICE:
+ fprintf(stdout,"Callback: DEVICE %p %s\n", str,
+ count ? "open" : "close");
+ break;
+ case GSDLL_SYNC:
+ fprintf(stdout,"Callback: SYNC %p\n", str);
+ break;
+ case GSDLL_PAGE:
+ fprintf(stdout,"Callback: PAGE %p\n", str);
+ break;
+ case GSDLL_SIZE:
+ fprintf(stdout,"Callback: SIZE %p width=%d height=%d\n", str,
+ (int)(count &amp; 0xffff), (int)((count&gt;&gt;16) &amp; 0xffff) );
+ break;
+ case GSDLL_POLL:
+ return 0; /* no error */
+ default:
+ fprintf(stdout,"Callback: Unknown message=%d\n",message);
+ break;
+ }
+ return 0;
+}
+</pre>
+
+<table cellpadding=0 cellspacing=0>
+<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Messages used by callback</font><hr>
+<tr valign=bottom>
+ <th align=left>Symbol
+ <td>&nbsp;&nbsp;
+ <th align=left>
+ <td>&nbsp;&nbsp;
+ <th align=left>Use
+<tr> <td colspan=5><hr>
+<tr valign=top> <td><b><tt>GSDLL_STDIN</tt></b>
+ <td>&nbsp;
+ <td>1
+ <td>&nbsp;
+ <td>get <b><tt>count</tt></b> characters to <b><tt>str</tt></b> from stdin, return number of characters read
+<tr valign=top> <td><b><tt>GSDLL_STDOUT</tt></b>
+ <td>&nbsp;
+ <td>2
+ <td>&nbsp;
+ <td>put <b><tt>count</tt></b> characters from <b><tt>str</tt></b>
+ to stdout, return number of characters written
+<tr valign=top> <td><b><tt>GSDLL_DEVICE</tt></b>
+ <td>&nbsp;
+ <td>3
+ <td>&nbsp;
+ <td>device <b><tt>str</tt></b> has been opened if
+ <b><tt>count</tt></b>&nbsp;=&nbsp;1, closed if
+ <b><tt>count</tt></b>&nbsp;=&nbsp;0
+<tr valign=top> <td><b><tt>GSDLL_SYNC</tt></b>
+ <td>&nbsp;
+ <td>4
+ <td>&nbsp;
+ <td>sync_output for device <b><tt>str</tt></b>
+<tr valign=top> <td><b><tt>GSDLL_PAGE</tt></b>
+ <td>&nbsp;
+ <td>5
+ <td>&nbsp;
+ <td>output_page for device <b><tt>str</tt></b>
+<tr valign=top> <td><b><tt>GSDLL_SIZE</tt></b>
+ <td>&nbsp;
+ <td>6
+ <td>&nbsp;
+ <td>resize for device <b><tt>str</tt></b>:
+ LOWORD(<b><tt>count</tt></b>) is new <b><tt>xsize</tt></b>,
+ HIWORD(<b><tt>count</tt></b>) is new <b><tt>ysize</tt></b>
+<tr valign=top> <td><b><tt>GSDLL_POLL</tt></b>
+ <td>&nbsp;
+ <td>7
+ <td>&nbsp;
+ <td>Called from <b><tt>gp_check_interrupt()</tt></b><br>
+ Can be used by the caller to poll the message queue.
+ Normally returns 0. To abort
+ <b><tt>gsdll_execute_cont()</tt></b>, return a non-zero
+ error code until <b><tt>gsdll_execute_cont()</tt></b>
+ returns.
+</table>
+</blockquote>
+</blockquote>
+
+<hr>
+
+<h2><a name="OS2_device"></a>Ghostscript DLL device for OS/2</h2>
+
+<p>
+The <b><tt>os2dll</tt></b> device is provided in the Ghostscript DLL for
+use by the caller. No drawing facilities are provided by the DLL because
+the DLL may be loaded by a text-only (non-PM) application. The caller is
+notified via the <b><tt>gsdll_callback()</tt></b> when a new
+<b><tt>os2dll</tt></b> device is opened or closed
+(<b><tt>GSDLL_DEVICE</tt></b>), when the window should be redrawn
+(<b><tt>GSDLL_SYNC</tt></b> or <b><tt>GSDLL_PAGE</tt></b>) or when the
+bitmap size changes (<b><tt>GSDLL_SIZE</tt></b>).
+Note that more than one <b><tt>os2dll</tt></b> device may be opened.
+
+<h3><a name="OS2_bmp"></a><b><tt>gsdll_get_bitmap()</tt></b></h3>
+
+<blockquote>
+<b><tt>gsdll_get_bitmap()</tt></b> returns a pointer to a bitmap in BMP
+format. The <b><tt>os2dll</tt></b> device draws into this bitmap.
+
+<blockquote>
+<pre>unsigned long gsdll_get_bitmap(unsigned char *device, unsigned char **pbitmap);
+ /* return in pbitmap the address of the bitmap */
+ /* device is a pointer to Ghostscript os2dll device from GSDLL_DEVICE message */
+</pre></blockquote>
+
+<p>
+The caller can then display the bitmap however it likes, but should lock
+the bitmap with <b><tt>gsdll_lock_device()</tt></b> before painting from
+it, and unlock it afterwards. The bitmap address does not change until the
+<b><tt>os2dll</tt></b> device is closed; however the bitmap size and
+palette may change whenever the bitmap is not locked.
+</blockquote>
+
+<h3><a name="OS2_example"></a>Example DLL usage for OS/2</h3>
+
+<p>
+The example here shows a minimal usage of the Ghostscript DLL under OS/2.
+The sample callback function above is needed.
+
+<blockquote>
+<pre>#define INCL_DOS
+#include &lt;os2.h&gt;
+#include &lt;stdio.h&gt;
+#include "gsdll.h"
+
+PFN_gsdll_init pgsdll_init;
+PFN_gsdll_execute_begin pgsdll_execute_begin;
+PFN_gsdll_execute_cont pgsdll_execute_cont;
+PFN_gsdll_execute_end pgsdll_execute_end;
+PFN_gsdll_exit pgsdll_exit;
+
+HMODULE hmodule_gsdll;
+char buf[256];
+
+int
+main(int argc, char *argv[])
+{
+int code;
+APIRET rc;
+ if (!DosLoadModule(buf, sizeof(buf), "GSDLL2", &amp;hmodule_gsdll)) {
+ fprintf(stderr, "Loaded GSDLL2\n");
+ DosQueryProcAddr(hmodule_gsdll, 0, "gsdll_init", (PFN *)(&amp;pgsdll_init));
+ DosQueryProcAddr(hmodule_gsdll, 0, "gsdll_execute_begin", (PFN *)(&amp;pgsdll_execute_begin));
+ DosQueryProcAddr(hmodule_gsdll, 0, "gsdll_execute_cont", (PFN *)(&amp;pgsdll_execute_cont));
+ DosQueryProcAddr(hmodule_gsdll, 0, "gsdll_execute_end", (PFN *)(&amp;pgsdll_execute_end));
+ DosQueryProcAddr(hmodule_gsdll, 0, "gsdll_exit", (PFN *)(&amp;pgsdll_exit));
+ }
+ else {
+ fprintf(stderr, "Can't load GSDLL2\n");
+ }
+
+ code = (*pgsdll_init)(gsdll_callback, NULL, argc, argv);
+ fprintf(stdout,"gsdll_init returns %d\n", code);
+ code = (*pgsdll_execute_begin)();
+ if (code==0) {
+ while (fgets(buf, sizeof(buf), stdin)) {
+ code = (*pgsdll_execute_cont)(buf, strlen(buf));
+ fprintf(stdout,"gsdll_execute returns %d\n", code);
+ if (code &lt; 0)
+ break;
+ }
+ if (!code)
+ code = (*pgsdll_execute_end)();
+ code = (*pgsdll_exit)();
+ fprintf(stdout,"gsdll_exit returns %d\n", code);
+ }
+ rc = DosFreeModule(hmodule_gsdll);
+ fprintf(stdout,"DosFreeModule returns %d\n", rc);
+ return 0;
+}
+</pre></blockquote>
+
+<hr>
+
+<h2><a name="Win_device"></a>Ghostscript DLL device for MS Windows</h2>
+
+<p>
+The <b><tt>mswindll</tt></b> device is provided in the Ghostscript DLL for
+use by the caller. The caller is notified via the
+<b><tt>gsdll_callback()</tt></b> when a new <b><tt>mswindll</tt></b> device
+is opened or closed (<b><tt>GSDLL_DEVICE</tt></b>), when the window should
+be redrawn (<b><tt>GSDLL_SYNC</tt></b> or <b><tt>GSDLL_PAGE</tt></b>) or
+when the bitmap size changes (<b><tt>GSDLL_SIZE</tt></b>). Note that more
+than one <b><tt>mswindll</tt></b> device may be opened.
+
+<p>
+Four DLL functions are available to use the <b><tt>mswindll</tt></b>
+device.
+
+<h3><a name="Win_copydib"></a><b><tt>gsdll_copy_dib()</tt></b></h3>
+
+<blockquote>
+Copy the <b><tt>mswindll</tt></b> bitmap to the clipboard.
+
+<blockquote>
+<pre>HGLOBAL GSDLLAPI gsdll_copy_dib(unsigned char *device);
+ /* make a copy of the device bitmap and return shared memory handle to it */
+ /* device is a pointer to Ghostscript device from GSDLL_DEVICE message */
+</pre></blockquote>
+</blockquote>
+
+<h3><a name="Win_copypalette"></a><b><tt>gsdll_copy_palette()</tt></b></h3>
+
+<blockquote>
+Copy the <b><tt>mswindll</tt></b> palette to the clipboard.
+
+<blockquote>
+<pre>HPALETTE GSDLLAPI gsdll_copy_palette(unsigned char *device);
+/* make a copy of the device palette and return a handle to it */
+/* device is a pointer to Ghostscript device from GSDLL_DEVICE message */
+</pre></blockquote>
+</blockquote>
+
+<h3><a name="Win_draw"></a><b><tt>gsdll_draw()</tt></b></h3>
+
+<blockquote>
+Display output from the <b><tt>mswindll</tt></b> device. The caller should
+create a window and call <b><tt>gsdll_draw()</tt></b> in response to the
+<b><tt>WM_PAINT</tt></b> message. The device context <b><tt>hdc</tt></b>
+must be for a device because <b><tt>SetDIBitsToDevice()</tt></b> is used.
+
+<blockquote>
+<pre>void GSDLLAPI gsdll_draw(unsigned char *device, HDC hdc,
+ LPRECT dest, LPRECT src);
+/* copy the rectangle src from the device bitmap */
+/* to the rectangle dest on the device given by hdc */
+/* hdc must be a device context for a device (NOT a bitmap) */
+/* device is a pointer to Ghostscript device from GSDLL_DEVICE message */
+</pre></blockquote>
+</blockquote>
+
+<h3><a name="Win_get_row"></a><b><tt>gsdll_get_bitmap_row()</tt></b></h3>
+
+<blockquote>
+Get a BMP header, a palette, and a pointer to a row in the bitmap. This
+function exists to allow the bitmap to be copied to a file or structured
+storage without the overhead of having two copies of the bitmap in memory
+at the same time.
+
+<p>
+Ghostscript can change the palette while the device is locked. Do not call
+this function while Ghostscript is busy.
+
+<blockquote>
+<pre>int GSDLLAPI gsdll_get_bitmap_row(unsigned char *device, LPBITMAPINFOHEADER pbmih,
+ LPRGBQUAD prgbquad, LPBYTE *ppbyte, unsigned int row)
+/* If pbmih nonzero, copy the BITMAPINFOHEADER.
+ * If prgbquad nonzero, copy the palette.
+ * number of entries copied is given by pbmih-&gt;biClrUsed
+ * If ppbyte nonzero, return pointer to row.
+ * pointer is only valid while device is locked
+ */
+</pre></blockquote>
+</blockquote>
+
+<hr>
+
+<h2><a name="Win16"></a>Ghostscript DLL Device for 16-bit MS Windows</h2>
+
+<p>
+This platform has the most problems of the three. Support for it may be
+dropped in future.
+
+<p>
+The Win16 DLL <b><tt>GSDLL16.DLL</tt></b> is a large-memory model DLL with
+far static data. Due to the limitations of 16-bit MS Windows, the DLL can
+be used by only one program at a time.
+
+<p>
+However, <b><tt>GSDLL16</tt></b> is marked as having SINGLE SHARED data
+segments, allowing multiple applications to load it with no error
+indication. (The DLL wouldn't load at all if MULTIPLE NONSHARED was used).
+Nonetheless, <b>it cannot be used by more than one application at a
+time</b>, so applications loading <b><tt>GSDLL16</tt></b> should check the
+return value of <b><tt>gsdll_init()</tt></b>: if this value is non-zero,
+then <b><tt>GSDLL16</tt></b> is already in use by another application and
+should <b><em>not</em></b> be used: <b><tt>GSDLL16</tt></b> should be
+unloaded immediately using <b><tt>FreeLibrary()</tt></b>, or the calling
+program should quit without attempting to use the library..
+
+<p>
+The segmented architecture of the Intel 80286 causes the usual amount of
+grief when using <b><tt>GSDLL16</tt></b>. Because the callback is called
+from the DLL, which is using a different data segment, the callback must be
+declared as <b><tt>_far&nbsp;_export</tt></b>:
+
+<blockquote>
+<pre>int _far _export gsdll_callback(int message, char *str, unsigned long count);
+</pre></blockquote>
+
+<p>
+Instead of giving <b><tt>gsdll_init()</tt></b> the address of
+<b><tt>gsdll_callback()</tt></b>, it should instead be given the address of
+a thunk created by <b><tt>MakeProcInstance</tt></b>. This thunk changes
+the data segment back to that used by the caller:
+
+<blockquote>
+<pre>FARPROC lpfnCallback;
+lpfnCallback = (FARPROC)MakeProcInstance((FARPROC)gsdll_callback, hInstance);
+code = (*pgsdll_init)((GSDLL_CALLBACK)lpfnCallback, NULL, argc, argv);
+if (!code) {
+ fprintf(stderr, "GSDLL16 is already in use\n");
+ return -1;
+}
+</pre></blockquote>
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 1997, 1998 Aladdin Enterprises.
+All rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Develop.htm b/Master/xemtex/doc/ghostscript/Develop.htm
new file mode 100644
index 00000000000..d6080881fc8
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Develop.htm
@@ -0,0 +1,4327 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Information for Ghostscript developers</title>
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+<!-- $Id: Develop.htm,v 1.47.2.18.2.6 2003/05/17 14:38:59 giles Exp $ -->
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Information for Ghostscript developers</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Introduction">Introduction</a>
+<li><a href="#Architecture">Architecture</a>
+<ul>
+<li><a href="#Design_goals">Design goals</a>
+<li><a href="#Design_principles">Design principles</a>
+<li><a href="#Large_scale_structure">Large-scale structure</a>
+<li><a href="#Object_oriented_constructs">Object-oriented constructs</a>
+</ul>
+<li><a href="#File_roadmap">File roadmap</a>
+<ul>
+<li><a href="#Substrate">Substrate</a>
+<li><a href="#Graphics_library">Graphics library</a>
+<ul>
+<li><a href="#Library_support">Support</a>,
+ <a href="#Paths">Paths</a>,
+ <a href="#Text">Text</a>,
+ <a href="#Images">Images</a>,
+ <a href="#Paint">Paint</a>,
+ <a href="#Clipping">Clipping</a>,
+ <a href="#Other_graphics">Other graphics</a>,
+ <a href="#Driver_support">Driver support</a>
+</ul>
+<li><a href="#Device_drivers">Device drivers</a>
+<ul>
+<li><a href="#Internal_devices">Internal devices</a>,
+ <a href="#PS_and_PDF_writers">PostScript and PDF writers</a>,
+ <a href="#High_level_devices">Other high-level devices</a>,
+ <a href="#Other_maintained_drivers">Other maintained drivers</a>,
+ <a href="#Contributed_drivers">Contributed drivers</a>
+</ul>
+<li><a href="#PostScript_interpreter">PostScript interpreter</a>
+<ul>
+<li><a href="#Main_program">Main program</a>,
+ <a href="#Data_structures">Data structures</a>,
+ <a href="#Interpreter_loop">Interpreter loop</a>,
+ <a href="#Scanning_parsing">Scanning/parsing</a>,
+ <a href="#Standard_operators">Standard operators</a>,
+ <a href="#Non_standard_operators">Non-standard operators</a>,
+ <a href="#Interpreter_support">Interpreter support</a>,
+ <a href="#PostScript_code">PostScript code</a>
+</ul>
+<li><a href="#PDF_interpreter">PDF interpreter</a>
+<li><a href="#Build_process">Build process</a>
+<ul>
+<li><a href="#Makefile_structure">Makefile structure</a>,
+ <a href="#dev_files">.dev files</a>,
+ <a href="#Generators">Generators</a>,
+ <a href="#Build_support">Support</a>
+</ul>
+<li><a href="#Utilities">Utilities</a>
+<ul>
+<li><a href="#Utilities_in_PostScript">Utilities in PostScript</a>
+<li><a href="#Utility_scripts">Utility scripts</a>
+</ul>
+</ul>
+<li><a href="#Memory_management">Memory management</a>
+<ul>
+<li><a href="#Memory_manager_architecture">Memory manager architecture</a>
+<ul>
+<li><a href="#Objects_vs_strings">Objects vs strings</a>,
+ <a href="#Structure_descriptors">Structure descriptors</a>,
+ <a href="#Garbage_collection">Garbage collection</a>,
+ <a href="#Movability">Movability</a>,
+ <a href="#Parent_hierarchy">Parent hierarchy</a>,
+ <a href="#Allocator_API">Allocator API</a>
+</ul>
+<li><a href="#Freeing_storage">Freeing storage</a>
+<ul>
+<li><a href="#Explicit_freeing">Explicit freeing</a>,
+ <a href="#Reference_counting">Reference counting</a>,
+ <a href="#Real_garbage_collection">(Real) garbage collection</a>
+</ul>
+<li><a href="#Special_implementations">Special implementations</a>
+<ul>
+<li><a href="#malloc">malloc</a>,
+ <a href="#Locking">Locking</a>,
+ <a href="#Retrying">Retrying</a>
+</ul>
+<li><a href="#Standard_implementation">Standard implementation</a>
+<li><a href="#PostScript_interpreter_extensions">PostScript interpreter extensions</a>
+<ul>
+<li><a href="#Refs">Refs (PostScript "objects")</a>,
+ <a href="#save_forgetsave_restore">save/.forgetsave/restore</a>,
+ <a href="#Stable_allocators">Stable allocators</a>,
+ <a href="#Interpreter_GC">Garbage collection</a>
+</ul>
+</ul>
+<li><a href="#Portability">Portability</a>
+<ul>
+<li><a href="#Structural">Structural</a>
+<ul>
+<li><a href="#CPU_and_compiler">CPU and compiler</a>,
+ <a href="#Library_headers">Library headers</a>,
+ <a href="#Cross_platform_APIs">Cross-platform APIs</a>,
+ <a href="#Makefiles">Makefiles</a>
+</ul>
+<li><a href="#Coding">Coding</a>
+<ul>
+<li><a href="#Explicit_dependencies">Explicit dependencies</a>,
+ <a href="#Implicit_dependencies">Implicit dependencies</a>
+</ul>
+<li><a href="#Platform_specific_code">Platform-specific code</a>
+</ul>
+<li><a href="#Adding_features_and_options">Adding features and options</a>
+<li><a href="#Troubleshooting">Troubleshooting</a>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a> and the documentation related to <a
+href="Maintain.htm">maintaining Ghostscript</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="Introduction"></a>Introduction</h2>
+
+<p>
+This document provides a wealth of information about Ghostscript's
+internals, primarily for developers actively working on Ghostscript. It is
+primarily <strong>descriptive</strong>, documenting the way things are; the
+companion <a href="C-style.htm">C style guide</a> is primarily
+<strong>prescriptive</strong>, documenting what developers should do when
+writing new code.
+
+<p>
+THIS FILE IS A WORK IN PROGRESS. MANY SECTIONS ARE PLACE-HOLDERS.
+
+<h2><a name="Architecture"></a>Architecture</h2>
+
+<h3><a name="Design_goals"></a>Design goals</h3>
+
+<p>
+Ghostscript has the following high-level design goals (not listed in order
+of importance):
+
+<ul>
+<li>Functionality
+<ul>
+<li>Ability to interpret the current PostScript and PDF languages, as
+defined (and occasionally, in the case of conflict, as implemented) by
+Adobe.
+<li>Ability to convert PostScript to and from PDF, comparable to
+Adobe products.
+<li>Ability to produce output for a wide range of resolutions (from
+TV-resolution displays to imagesetters) and color models (black and white,
+multilevel gray, bilevel or multi-level RGB and CMYK, 6- or 8-color
+inkjet printers, spot color).
+</ul>
+<li>Performance
+<ul>
+<li>Ability to render PostScript and PDF with commercial-quality performance
+(memory usage, speed, and output quality) on all platforms.
+<li>Specifically, ability to render PostScript effectively in embedded
+environments with constrained RAM, including the ability to put the code and
+supporting data in ROM.
+</ul>
+<li>Licensing
+<ul>
+<li>Licensing that supports both the Open Source / Free software communities
+and a commercial licensing business.
+<li>Freedom from licensing restrictions or fees imposed by third parties.
+</ul>
+<li>Other
+<ul>
+<li>Easy source portability to any platform (CPU, operating system, and
+development tools) that has an ANSI or K&amp;R C compiler.
+<li>Support for writing new interpreters and new drivers with no change to
+any existing code; specifically, ability to support PCL 5e, PCL 5c, and PCL
+XL interpreters, and the ever-changing roster of inkjet printers.
+</ul>
+</ul>
+
+<p>
+These goals often conflict: part of Ghostscript's claim to quality is that
+the conflicts have been resolved well.
+
+<h3><a name="Design_principles"></a>Design principles</h3>
+
+<p>
+Part of what has kept Ghostscript healthy through many years of major code
+revisions and functional expansion is consistent and conscientious adherence
+to a set of design principles. We hope the following list captures the most
+important ones.
+
+<h4>Non-preemption</h4>
+
+<p>
+Ghostscript is designed to be used as a component. As such, it must share
+its environment with other components. Therefore, it must not require
+ownership of, or make decisions about, inherently shared resources.
+Specifically, it must not assume that it can "own" either the locus of
+control or the management of the address space.
+
+<p>
+Not owning control means that whenever Ghostscript passes control to its
+caller, it must do so in a way that doesn't constrain what the caller can do
+next. The caller must be able to call any other piece of software, wait for
+an external event, execute another task, etc., without having to worry about
+Ghostscript being in an unknown state. While this is easy to arrange in a
+multi-threaded environment (by running Ghostscript in a separate thread),
+multi-threading APIs are not well standardized at this time (December 2000),
+and may not be implemented efficiently, or at all, on some platforms.
+Therefore, Ghostscript must choose between only two options for interacting
+with its caller: to <em>return</em>, preserving its own state in data
+structures, or to <em>call back</em> through a caller-supplied procedure.
+Calling back constrains the client program unacceptably: the callback
+procedure only has the options of either returning, or aborting Ghostscript.
+In particular, if it wants (for whatever reason) to multi-task Ghostscript
+with another program, it cannot do so in general, especially if the other
+program also uses callback rather than suspension. Therefore, Ghostscript
+tries extremely hard to return, rather than calling back, for all caller
+interaction. In particular:
+
+<ul>
+
+<li>For callers that want to pass input to Ghostscript piece by piece,
+Ghostscript returns with an <b><tt>e_NeedInput</tt></b> code rather than
+using a callback. This allows the caller complete flexibility in its
+control structure for managing the source of input. (It might, for example,
+be generating the input dynamically.)
+
+<li>In the future, the same arrangement should be used for input from
+<b><tt>stdin</tt></b> and output to <b><tt>stdout</tt></b> and
+<b><tt>stderr</tt></b>.
+
+<li>Likewise, scheduling of Ghostscript's own threads (contexts), currently
+done with a callback, should be done with suspension. The Display
+Ghostscript project (GNU DGS) is working on this.
+
+</ul>
+
+<p>
+The one area where suspension is not feasible with Ghostscript's current
+architecture is device output. Device drivers are called from deep within
+the graphics library. (If Ghostscript were being redesigned from scratch,
+we might try to do this with suspension as well, or at least optional
+suspension.)
+
+<p>
+Not owning management of the address space means that even though
+Ghostscript supports garbage collection for its own data, it must not do any
+of the things that garbage collection schemes for C often require: it must
+not replace 'malloc' and 'free', must not require its clients to use its own
+allocator, must not rely on manipulating the read/write status of memory
+pages, must not require special compiler or run-time support (e.g., APIs for
+scanning the C stack), must not depend on the availability of
+multi-threading, and must not take possession of one of a limited number of
+timer interrupts. However, in order not to constrain its own code unduly,
+it must also not require using special macros or calls to enter or leave
+procedures or assign pointers, and must not constrain the variety of C data
+structures any more than absolutely necessary. It achieves all of these
+goals, at the expense of some complexity, some performance cost (mostly for
+garbage collection), and some extra manual work required for each structure
+type allocated by its allocator. The details appear in the <a
+href="#Memory_management">Memory management</a> section below.
+
+<h4>Multi-instantiability</h4>
+
+<p>
+From many years of experience with the benefits of object-oriented design,
+we have learned that when the word "the" appears in a software design --
+"the" process scheduler, "the" memory manager, "the" output device, "the"
+interpreter, "the" stack -- it often flags an area in which the software
+will have difficulty adapting to future needs. For this reason, Ghostscript
+attempts to make every internal structure capable of existing in multiple
+instances. For example, Ghostscript's memory manager is not a one-of-a-kind
+entity with global state and procedures: it is (or rather they are, since
+Ghostscript has multiple memory managers, some of which have multiple
+instances) objects with their own state and (virtual) procedures.
+Ghostscript's PostScript interpreter has no writable non-local data
+(necessary, but not sufficient, to allow multiple instances), and in the
+future will be extended to be completely reentrant and instantiable. The
+device driver API is designed to make this easy for drivers as well. The
+graphics library is currently not completely reentrant or instantiable: we
+hope this will occur in the future.
+
+<h4>Late configuration binding</h4>
+
+<p>
+Ghostscript is designed to make configuration choices as late as possible,
+subject to simplicity and performance considerations. The major binding
+times for such choices are compilation, linking, startup, and dynamic.
+
+<ul>
+
+<li>Compilation binds only CPU and compiler characteristics (including data
+type size, presence of floating point hardware, and data alignment), and
+whether the code will be used for production, debugging, or profiling.
+
+<li>Linking binds the choice of what features and device drivers will be
+included in the executable. (Work is underway to make the choice of drivers
+dynamic.)
+
+<li>Startup binds essentially nothing. Almost every option and parameter
+that can appear on the command line can also be changed dynamically.
+
+<li>The selection of output device, all parameters associated with the
+device, the selection of debugging printout and self-checking (in debugging
+configurations), the macro-allocation of memory, and almost all other
+operational parameters are dynamic.
+
+</ul>
+
+<p>
+In addition, a number of major implementation decisions are made dynamically
+depending on the availability of resources. For example, Ghostscript
+chooses between banded and non-banded rendering depending on memory
+availability.
+
+<h3><a name="Large_scale_structure"></a>Large-scale structure</h3>
+
+<p>
+At the largest design scale, Ghostscript consists of 4 layers. Layer N
+is allowed to use the facilities of all layers M &lt;= N.
+
+<ol>
+
+<li>The bottom layer is called the <a href="#Substrate">substrate</a>. It
+includes facilities like memory management, streams, fixed-point arithmetic,
+and low-level interfaces to the operating system. The substrate is written
+in C, with a little C++ and/or assembler code for some platforms.
+
+<li>The layer above the substrate is the graphics layer. It consists of two
+separate sub-parts. The graphics layer is written in C.
+
+<ul>
+
+<li>The <a href="#Graphics_library">graphics library</a> manages graphics
+state information for, and decomposes and renders 2-D images described
+using, a graphics model that is approximately the union of those of
+PostScript, PDF, and PCL 5e/5c/XL.
+
+<li>The <a href="#Device_drivers">device drivers</a> are called by the
+graphics library to produce actual output. The graphics library, and all
+higher layers, call device driver procedures only through virtual functions.
+
+</ul>
+
+<li>The principal clients of the graphics layer are language interpreters.
+Ghostscript as distributed includes the <a
+href="#PostScript_interpreter">PostScript interpreter</a>; there are also
+interpreters for PCL 5e, PCL 5c, and PCL XL, which are not currently freely
+redistributable and are not included in the standard Ghostscript package.
+The PostScript interpreter is written partly in C and partly in PostScript.
+
+<li>The <a href="#PDF_interpreter">PDF interpreter</a> is actually a client
+of the PostScript interpreter: it is written entirely in PostScript.
+
+</ol>
+
+<p>
+The most important interface in Ghostscript is the API between the graphics
+library and the device drivers: new printers (and, to a lesser extent,
+window systems, displays, plotters, film recorders, and graphics file
+formats) come on the scene frequently, and it must be possible to produce
+output for them with a minimum of effort and distruption. This API is the
+only one that is extensively documented (see <a
+href="Drivers.htm">Drivers.htm</a>) and kept stringently backward-compatible
+through successive releases.
+
+<h3><a name="Object_oriented_constructs"></a>Object-oriented constructs</h3>
+
+<p>
+Ghostscript makes heavy use of object-oriented constructs, including
+analogues of classes, instances, subclassing, and class-associated
+procedures. Since Ghostscript is written in C, not C++, implementing these
+constructs requires following coding conventions. The <a
+href="C-style.htm#Objects">"Objects"</a> section of the C style guide
+explains these.
+
+<p>
+The memory manager API provides run-time type information about each class,
+but this information does not include anything about subclassing. See under
+<a href="#Structure_descriptors">Structure descriptors</a> below.
+
+<hr>
+
+<h2><a name="File_roadmap"></a>File roadmap</h2>
+
+<p>
+This section of the document provides a roadmap to all of the Ghostscript
+source files.
+
+<h3><a name="Substrate"></a>Substrate</h3>
+
+<h4>Memory manager</h4>
+
+<p>
+See <a href="#Memory_management">below</a>.
+
+<h4>Streams</h4>
+
+<dl>
+
+<dt>
+Framework, file and string streams:
+<dd>
+<a href="../src/gsdsrc.c">src/gsdsrc.c</a>,
+<a href="../src/gsdsrc.h">src/gsdsrc.h</a>,
+<a href="../src/scommon.h">src/scommon.h</a>,
+<a href="../src/sfxboth.c">src/sfxboth.c</a>,
+<a href="../src/sfxfd.c">src/sfxfd.c</a>,
+<a href="../src/sfxstdio.c">src/sfxstdio.c</a>,
+<a href="../src/stream.h">src/stream.h</a>,
+<a href="../src/stream.c">src/stream.c</a>,
+<a href="../src/strimpl.h">src/strimpl.h</a>.
+
+<dt>
+Standard filters:
+<dd>
+
+<dl>
+
+<dt>
+CCITTFax:
+<dd>
+<a href="../src/scf.h">src/scf.h</a>,
+<a href="../src/scfd.c">src/scfd.c</a>,
+<a href="../src/scfdgen.c">src/scfdgen.c</a>,
+<a href="../src/scfdtab.c">src/scfdtab.c</a>,
+<a href="../src/scfe.c">src/scfe.c</a>,
+<a href="../src/scfetab.c">src/scfetab.c</a>,
+<a href="../src/scfparam.c">src/scfparam.c</a>,
+<a href="../src/scfx.h">src/scfx.h</a>.
+
+<dt>
+DCT (JPEG):
+<dd>
+<a href="../src/gsjconf.h">src/gsjconf.h</a>,
+<a href="../src/gsjmorec.h">src/gsjmorec.h</a>,
+<a href="../src/sdcparam.c">src/sdcparam.c</a>,
+<a href="../src/sdcparam.h">src/sdcparam.h</a>,
+<a href="../src/sdct.h">src/sdct.h</a>,
+<a href="../src/sdctc.c">src/sdctc.c</a>,
+<a href="../src/sdctd.c">src/sdctd.c</a>,
+<a href="../src/sdcte.c">src/sdcte.c</a>,
+<a href="../src/sddparam.c">src/sddparam.c</a>,
+<a href="../src/sdeparam.c">src/sdeparam.c</a>,
+<a href="../src/sjpeg.h">src/sjpeg.h</a>,
+<a href="../src/sjpegc.c">src/sjpegc.c</a>,
+<a href="../src/sjpegd.c">src/sjpegd.c</a>,
+<a href="../src/sjpege.c">src/sjpege.c</a>.
+
+<dt>
+Other compression/decompression:
+<dd>
+<a href="../src/slzwc.c">src/slzwc.c</a>,
+<a href="../src/slzwce.c">src/slzwce.c</a>,
+<a href="../src/slzwd.c">src/slzwd.c</a>,
+<a href="../src/slzwx.h">src/slzwx.h</a>,
+<a href="../src/srld.c">src/srld.c</a>,
+<a href="../src/srle.c">src/srle.c</a>,
+<a href="../src/srlx.h">src/srlx.h</a>.
+
+<dt>
+Other:
+<dd>
+<a href="../src/sa85d.c">src/sa85d.c</a>,
+<a href="../src/sa85d.h">src/sa85d.h</a>,
+<a href="../src/sa85x.h">src/sa85x.h</a>,
+<a href="../src/sfilter1.c">src/sfilter1.c</a>,
+<a href="../src/sfilter2.c">src/sfilter2.c</a>,
+<a href="../src/sstring.c">src/sstring.c</a>,
+<a href="../src/sstring.h">src/sstring.h</a>.
+
+</dl>
+
+<dt>
+Non-standard filters used to implement standard filters:
+<dd>
+<a href="../src/seexec.c">src/seexec.c</a>,
+<a href="../src/sfilter.h">src/sfilter.h</a>,
+<a href="../src/shc.c">src/shc.c</a>,
+<a href="../src/shc.h">src/shc.h</a>,
+<a href="../src/shcgen.c">src/shcgen.c</a>,
+<a href="../src/shcgen.h">src/shcgen.h</a>,
+<a href="../src/spdiff.c">src/spdiff.c</a>,
+<a href="../src/spdiffx.h">src/spdiffx.h</a>,
+<a href="../src/spngp.c">src/spngp.c</a>,
+<a href="../src/spngpx.h">src/spngpx.h</a>,
+<a href="../src/szlibc.c">src/szlibc.c</a>,
+<a href="../src/szlibd.c">src/szlibd.c</a>,
+<a href="../src/szlibe.c">src/szlibe.c</a>,
+<a href="../src/szlibx.h">src/szlibx.h</a>,
+<a href="../src/szlibxx.h">src/szlibxx.h</a>.
+
+<dt>
+Non-standard filters:
+<dd>
+<a href="../src/sbcp.c">src/sbcp.c</a>,
+<a href="../src/sbcp.h">src/sbcp.h</a>,
+<a href="../src/sbhc.c">src/sbhc.c</a>,
+<a href="../src/sbhc.h">src/sbhc.h</a>,
+<a href="../src/sbtx.h">src/sbtx.h</a>,
+<a href="../src/sbwbs.c">src/sbwbs.c</a>,
+<a href="../src/sbwbs.h">src/sbwbs.h</a>,
+<a href="../src/smd5.c">src/smd5.c</a>,
+<a href="../src/smd5.h">src/smd5.h</a>,
+<a href="../src/sarc4.c">src/sarc4.c</a>,
+<a href="../src/sarc4.h">src/sarc4.h</a>,
+<a href="../src/smtf.c">src/smtf.c</a>,
+<a href="../src/smtf.h">src/smtf.h</a>.
+
+<dt>
+Internal filters:
+<dd>
+a<a href="../src/siinterp.c">src/siinterp.c</a>,
+<a href="../src/siinterp.h">src/siinterp.h</a>,
+<a href="../src/siscale.c">src/siscale.c</a>,
+<a href="../src/siscale.h">src/siscale.h</a>,
+<a href="../src/sisparam.h">src/sisparam.h</a>.
+
+<dt>
+Higher-level stream support:
+<dd>
+<a href="../src/spprint.c">src/spprint.c</a>,
+<a href="../src/spprint.h">src/spprint.h</a>,
+<a href="../src/spsdf.c">src/spsdf.c</a>,
+<a href="../src/spsdf.h">src/spsdf.h</a>,
+<a href="../src/srdline.h">src/srdline.h</a>.
+
+</dl>
+
+<h4>Platform-specific code</h4>
+
+See <a href="#Cross_platform_APIs">below</a>.
+
+<h4>Miscellaneous</h4>
+
+<dl>
+
+<dt>
+Library top level:
+<dd>
+<a href="../src/gsinit.c">src/gsinit.c</a>,
+<a href="../src/gslib.h">src/gslib.h</a>.
+
+<dt>
+Configuration-related:
+<dd>
+<a href="../src/gconf.c">src/gconf.c</a>,
+<a href="../src/gconf.h">src/gconf.h</a>,
+<a href="../src/gscdef.c">src/gscdef.c</a>,
+<a href="../src/gscdefs.h">src/gscdefs.h</a>.
+
+<dt>
+Arithmetic:
+<dd>
+<a href="../src/gsfemu.c">src/gsfemu.c</a>,
+<a href="../src/gxarith.h">src/gxarith.h</a>,
+<a href="../src/gxdda.h">src/gxdda.h</a>,
+<a href="../src/gxfarith.h">src/gxfarith.h</a>,
+<a href="../src/gxfixed.h">src/gxfixed.h</a>,
+<a href="../src/gxfrac.h">src/gxfrac.h</a>.
+
+<dt>
+Operating system interface:
+<dd>
+<a href="../src/gserror.h">src/gserror.h</a>,
+<a href="../src/gsexit.h">src/gsexit.h</a>,
+<a href="../src/gxstdio.h">src/gxstdio.h</a>,
+<a href="../src/gxsync.c">src/gxsync.c</a>,
+<a href="../src/gxsync.h">src/gxsync.h</a>.
+
+<dt>
+Other:
+<dd>
+<a href="../src/gsargs.c">src/gsargs.c</a>,
+<a href="../src/gsargs.h">src/gsargs.h</a>,
+<a href="../src/gserrors.h">src/gserrors.h</a>,
+<a href="../src/gsnotify.c">src/gsnotify.c</a>,
+<a href="../src/gsnotify.h">src/gsnotify.h</a>,
+<a href="../src/gsrect.h">src/gsrect.h</a>,
+<a href="../src/gstypes.h">src/gstypes.h</a>,
+<a href="../src/gsuid.h">src/gsuid.h</a>,
+<a href="../src/gsutil.h">src/gsutil.h</a>,
+<a href="../src/gsutil.c">src/gsutil.c</a>,
+<a href="../src/gx.h">src/gx.h</a>,
+<a href="../src/md5.c">src/md5.c</a>,
+<a href="../src/md5.h">src/md5.h</a>.
+
+</dl>
+
+<h3><a name="Graphics_library"></a>Graphics library</h3>
+
+<h4><a name="Library_support"></a>Support</h4>
+
+<dl>
+
+<dt>
+Bitmap processing:
+<dd>
+<a href="../src/gsbitcom.c">src/gsbitcom.c</a>,
+<a href="../src/gsbitmap.h">src/gsbitmap.h</a>,
+<a href="../src/gsbitops.c">src/gsbitops.c</a>,
+<a href="../src/gsbitops.h">src/gsbitops.h</a>,
+<a href="../src/gsbittab.c">src/gsbittab.c</a>,
+<a href="../src/gsbittab.h">src/gsbittab.h</a>,
+<a href="../src/gsflip.c">src/gsflip.c</a>,
+<a href="../src/gsflip.h">src/gsflip.h</a>,
+<a href="../src/gxbitmap.h">src/gxbitmap.h</a>,
+<a href="../src/gxbitops.h">src/gxbitops.h</a>,
+<a href="../src/gxsample.c">src/gxsample.c</a>,
+<a href="../src/gxsample.h">src/gxsample.h</a>.
+
+<dt>
+Functions:
+<dd>
+<a href="../src/gsfunc.c">src/gsfunc.c</a>,
+<a href="../src/gsfunc.h">src/gsfunc.h</a>,
+<a href="../src/gsfunc0.c">src/gsfunc0.c</a>,
+<a href="../src/gsfunc0.h">src/gsfunc0.h</a>,
+<a href="../src/gsfunc3.c">src/gsfunc3.c</a>,
+<a href="../src/gsfunc3.h">src/gsfunc3.h</a>,
+<a href="../src/gsfunc4.c">src/gsfunc4.c</a>,
+<a href="../src/gsfunc4.h">src/gsfunc4.h</a>,
+<a href="../src/gsfuncv.c">src/gsfuncv.c</a>,
+<a href="../src/gsfuncv.h">src/gsfuncv.h</a>,
+<a href="../src/gxfunc.h">src/gxfunc.h</a>.
+
+<dt>
+Parameter lists:
+<dd>
+<a href="../src/gscparam.c">src/gscparam.c</a>,
+<a href="../src/gsparam.c">src/gsparam.c</a>,
+<a href="../src/gsparam.h">src/gsparam.h</a>,
+<a href="../src/gsparam2.c">src/gsparam2.c</a> (not used),
+<a href="../src/gsparams.c">src/gsparams.c</a>,
+<a href="../src/gsparams.h">src/gsparams.h</a>,
+<a href="../src/gsparamx.c">src/gsparamx.c</a>,
+<a href="../src/gsparamx.h">src/gsparamx.h</a>.
+
+<dt>
+I/O-related:
+<dd>
+<a href="../src/gdevpipe.c">src/gdevpipe.c</a>,
+<a href="../src/gsfname.c">src/gsfname.c</a>,
+<a href="../src/gsfname.h">src/gsfname.h</a>,
+<a href="../src/gsio.h">src/gsio.h</a>,
+<a href="../src/gsiodev.c">src/gsiodev.c</a>,
+<a href="../src/gsiodevs.c">src/gsiodevs.c</a>,
+<a href="../src/gxiodev.h">src/gxiodev.h</a>.
+
+</dl>
+
+<h4><a name="Paths"></a>Paths</h4>
+
+<dl>
+
+<dt>
+Coordinate transformation:
+<dd>
+<a href="../src/gscoord.c">src/gscoord.c</a>,
+<a href="../src/gscoord.h">src/gscoord.h</a>,
+<a href="../src/gsmatrix.c">src/gsmatrix.c</a>,
+<a href="../src/gsmatrix.h">src/gsmatrix.h</a>,
+<a href="../src/gxcoord.h">src/gxcoord.h</a>,
+<a href="../src/gxmatrix.h">src/gxmatrix.h</a>.
+
+<dt>
+Path building:
+<dd>
+<a href="../src/gsdps1.c">src/gsdps1.c</a>,
+<a href="../src/gspath.c">src/gspath.c</a>,
+<a href="../src/gspath.h">src/gspath.h</a>,
+<a href="../src/gspath1.c">src/gspath1.c</a>,
+<a href="../src/gspath2.h">src/gspath2.h</a>,
+<a href="../src/gxpath.c">src/gxpath.c</a>,
+<a href="../src/gxpath.h">src/gxpath.h</a>,
+<a href="../src/gxpath2.c">src/gxpath2.c</a>,
+<a href="../src/gxpcopy.c">src/gxpcopy.c</a>,
+<a href="../src/gxpdash.c">src/gxpdash.c</a>,
+<a href="../src/gxpflat.c">src/gxpflat.c</a>,
+<a href="../src/gzpath.h">src/gzpath.h</a>.
+
+<dt>
+Path rendering:
+<dd>
+<a href="../src/gdevddrw.c">src/gdevddrw.c</a>,
+<a href="../src/gsdps1.c">src/gsdps1.c</a>,
+<a href="../src/gspaint.c">src/gspaint.c</a>,
+<a href="../src/gspaint.h">src/gspaint.h</a>,
+<a href="../src/gspenum.h">src/gspenum.h</a>,
+<a href="../src/gxfill.c">src/gxfill.c</a>,
+<a href="../src/gxpaint.c">src/gxpaint.c</a>,
+<a href="../src/gxpaint.h">src/gxpaint.h</a>,
+<a href="../src/gxstroke.c">src/gxstroke.c</a>.
+
+<dt>
+Clipping:
+<dd>
+See under <a href="#Clipping">Clipping</a> below.
+
+</dl>
+
+<h4><a name="Text"></a>Text</h4>
+
+<dl>
+
+<dt>
+Fonts, generic:
+<dd>
+<a href="../src/gsfont.c">src/gsfont.c</a>,
+<a href="../src/gsfont.h">src/gsfont.h</a>,
+<a href="../src/gxfont.h">src/gxfont.h</a>.
+
+<dt>
+Fonts, specific FontTypes:
+<dd>
+<a href="../src/gsfcid.c">src/gsfcid.c</a>,
+<a href="../src/gsfcmap.c">src/gsfcmap.c</a>,
+<a href="../src/gsfcmap.h">src/gsfcmap.h</a>,
+<a href="../src/gsfont0.c">src/gsfont0.c</a>,
+<a href="../src/gxcid.h">src/gxcid.h</a>,
+<a href="../src/gxfcid.h">src/gxfcid.h</a>,
+<a href="../src/gxfcmap.h">src/gxfcmap.h</a>,
+<a href="../src/gxfont0.h">src/gxfont0.h</a>,
+<a href="../src/gxfont1.h">src/gxfont1.h</a>,
+<a href="../src/gxfont42.h">src/gxfont42.h</a>,
+<a href="../src/gxftype.h">src/gxftype.h</a>,
+<a href="../src/gxttf.h">src/gxttf.h</a>.
+
+<dt>
+Character rendering + font cache, generic:
+<dd>
+<a href="../src/gsccode.h">src/gsccode.h</a>,
+<a href="../src/gschar.c">src/gschar.c</a>,
+<a href="../src/gschar.h">src/gschar.h</a>,
+<a href="../src/gscpm.h">src/gscpm.h</a>,
+<a href="../src/gstext.c">src/gstext.c</a>,
+<a href="../src/gstext.h">src/gstext.h</a>,
+<a href="../src/gxbcache.c">src/gxbcache.c</a>,
+<a href="../src/gxbcache.h">src/gxbcache.h</a>,
+<a href="../src/gxccache.c">src/gxccache.c</a>,
+<a href="../src/gxccman.c">src/gxccman.c</a>,
+<a href="../src/gxchar.c">src/gxchar.c</a>,
+<a href="../src/gxchar.h">src/gxchar.h</a>,
+<a href="../src/gxfcache.h">src/gxfcache.h</a>,
+<a href="../src/gxtext.h">src/gxtext.h</a>.
+
+<dt>
+Character rendering, specific FontTypes:
+<dd>
+<a href="../src/gschar0.c">src/gschar0.c</a>,
+<a href="../src/gscrypt1.c">src/gscrypt1.c</a>,
+<a href="../src/gscrypt1.h">src/gscrypt1.h</a>,
+<a href="../src/gstype1.c">src/gstype1.c</a>,
+<a href="../src/gstype1.h">src/gstype1.h</a>,
+<a href="../src/gstype2.c">src/gstype2.c</a>,
+<a href="../src/gstype42.c">src/gstype42.c</a>,
+<a href="../src/gxchrout.c">src/gxchrout.c</a>,
+<a href="../src/gxchrout.h">src/gxchrout.h</a>,
+<a href="../src/gxhint1.c">src/gxhint1.c</a>,
+<a href="../src/gxhint2.c">src/gxhint2.c</a>,
+<a href="../src/gxhint3.c">src/gxhint3.c</a>,
+<a href="../src/gxop1.h">src/gxop1.h</a>,
+<a href="../src/gxtype1.c">src/gxtype1.c</a>,
+<a href="../src/gxtype1.h">src/gxtype1.h</a>.
+
+</dl>
+
+<h4><a name="Images"></a>Images</h4>
+
+<dl>
+
+<dt>
+Buffered API (mostly for PostScript interpreter):
+<dd>
+<a href="../src/gsimage.c">src/gsimage.c</a>,
+<a href="../src/gsimage.h">src/gsimage.h</a>.
+
+<dt>
+Generic support:
+<dd>
+<a href="../src/gsiparam.h">src/gsiparam.h</a>,
+<a href="../src/gxiclass.h">src/gxiclass.h</a>,
+<a href="../src/gximage.c">src/gximage.c</a>,
+<a href="../src/gximage.h">src/gximage.h</a>,
+<a href="../src/gxiparam.h">src/gxiparam.h</a>.
+
+<dt>
+Type 1 and 4 images:
+<dd>
+
+<dl>
+
+<dt>
+Setup:
+<dd>
+<a href="../src/gsiparm4.h">src/gsiparm4.h</a>,
+<a href="../src/gximage1.c">src/gximage1.c</a>,
+<a href="../src/gximage4.c">src/gximage4.c</a>.
+
+<dt>
+Rendering:
+<dd>
+<a href="../src/gxi12bit.c">src/gxi12bit.c</a>,
+<a href="../src/gxicolor.c">src/gxicolor.c</a>,
+<a href="../src/gxidata.c">src/gxidata.c</a>,
+<a href="../src/gxifast.c">src/gxifast.c</a>,
+<a href="../src/gximono.c">src/gximono.c</a>,
+<a href="../src/gxino12b.c">src/gxino12b.c</a>,
+<a href="../src/gxipixel.c">src/gxipixel.c</a>,
+<a href="../src/gxiscale.c">src/gxiscale.c</a>.
+
+</dl>
+
+<dt>
+Type 2 images (Display PostScript):
+<dd>
+<a href="../src/gsiparm2.h">src/gsiparm2.h</a>,
+<a href="../src/gximage2.c">src/gximage2.c</a>.
+
+<dt>
+Type 3 images:
+<dd>
+<a href="../src/gsipar3x.h">src/gsipar3x.h</a>,
+<a href="../src/gsiparm3.h">src/gsiparm3.h</a>,
+<a href="../src/gximag3x.c">src/gximag3x.c</a>,
+<a href="../src/gximag3x.h">src/gximag3x.h</a>,
+<a href="../src/gximage3.c">src/gximage3.c</a>,
+<a href="../src/gximage3.h">src/gximage3.h</a>.
+
+<dt>
+Other:
+<dd>
+<a href="../src/gsimpath.c">src/gsimpath.c</a>.
+
+</dl>
+
+<h4><a name="Paint"></a>Paint</h4>
+
+<p>
+Ghostscript uses 4 internal representations of color. We list them here in
+the order in which they occur in the rendering pipeline.
+
+<ol>
+
+<li>Clients of the graphics library normally specify colors using the
+<em>client color</em> structure (<b><tt>gs_client_color</tt></b>, defined in
+<a href="../src/gsccolor.h">src/gsccolor.h</a>), consisting of one or more
+numeric values and/or a pointer to a Pattern instance. This corresponds
+directly to the values that would be passed to the PostScript
+<b><tt>setcolor</tt></b> operator: one or more (floating-point) numeric
+components and/or a Pattern. Client colors are interpreted relative to a
+color space (<b><tt>gs_color_space</tt></b>, defined in <a
+href="../src/gscspace.h">src/gscspace.h</a> and <a
+href="../src/gxcspace.h">src/gxcspace.h</a>, with specific color spaces
+defined in other files). Client colors do not explicitly reference the
+color space in which they are are interpreted: <b><tt>setcolor</tt></b> uses
+the color space in the graphics state, while images and shadings explicitly
+specify the color space to be used.
+
+<li>For ordinary non-Pattern colors, the first step in color rendering
+reduces a client color to a <em>concrete</em> color -- a set of values in a
+color space that corresponds to the device's color model (except for
+possible conversions between DeviceGray, DeviceRGB, and DeviceCMYK),
+together with an identification of the associated color space. (The
+confusion here between color spaces and color models will have to be cleaned
+up when we implement native Separation/DeviceN colors.) Concrete colors are
+like the numeric values in a client color, except that they are represented
+by arrays of <b><tt>frac</tt></b> values (defined in <a
+href="../src/gxfrac.h">src/gxfrac.h</a>) rather than floats. The procedure
+for this step is the virtual <b><tt>concretize_color</tt></b> and
+<b><tt>concrete_space</tt></b> procedures in the (original) color space.
+This step reduces Indexed colors, CIEBased colors, and Separation and
+DeviceN colors that use the alternate space.
+
+<li>The final step requires mapping a concrete color to the device's color
+model, done by procedures in <a href="../src/gxcmap.c">src/gxcmap.c</a>.
+These procedures combine the following three conceptual sub-steps:
+
+<ul>
+
+<li>A possible mapping between Device color spaces, possibly involving black
+generation and undercolor removal. The non-trivial cases are implemented in
+<a href="../src/gxdcconv.c">src/gxdcconv.c</a>.
+
+<li>Application of the transfer function(s) (done in-line).
+
+<li>Halftoning if necessary: see below.
+
+</ul>
+
+The result is called (inappropriately) a <em>device color</em>
+(<b><tt>gx_device_color</tt></b>, defined in <a
+href="../src/gsdcolor.h">src/gsdcolor.h</a> and <a
+href="../src/gxdcolor.h">src/gxdcolor.h</a>). For ordinary non-Pattern
+colors, a device color is either a pure color, or a halftone. The device
+and color model associated with a device color are implicit. The procedure
+for this step is the virtual <b><tt>remap_concrete_color</tt></b> procedure
+in the color space.
+
+<li>The pure colors that underlie a device color are opaque <em>pixel
+values</em> defined by the device (misnamed <b><tt>gx_color_index</tt></b>,
+defined in <a href="../src/gscindex.h">src/gscindex.h</a>). The device with
+which they are associated is implicit. Although the format and
+interpretation of a pixel value are known only to the device, the device's
+color model and color representation capabilities are public, defined by a
+<b><tt>gx_color_info</tt></b> structure stored in the device (defined in <a
+href="../src/gxdevcli.h">src/gxdevcli.h</a>). Virtual procedures of the
+device driver map between pixel values and RGB or CMYK. (This area is
+untidy and will need to be cleaned up when we implement native
+Separation/DeviceN colors.)
+
+</ol>
+
+<p>
+Steps 2 and 3 are normally combined into a single step for efficiency, as
+the <b><tt>remap_color</tt></b> virtual procedure in a color space.
+
+<p>
+Using a device color to actually paint pixels requires a further step called
+<em>color loading</em>, implemented by the <b><tt>load</tt></b> virtual
+procedure in the device color. This does nothing for pure colors, but loads
+the caches for halftones and Patterns.
+
+<p>
+All of the above steps -- concretizing, mapping to a device color, and color
+loading -- are done as late as possible, normally not until the color is
+actually needed for painting.
+
+<p>
+All painting operations (fill, stroke, imagemask/show) eventually call a
+virtual procedure in the device color, either <b><tt>fill_rectangle</tt></b>
+or <b><tt>fill_mask</tt></b> to actually paint pixels. For rectangle fills,
+pure colors call the device's <b><tt>fill_rectangle</tt></b> procedure;
+halftones and tiled Patterns call the device's
+<b><tt>tile_rectangle</tt></b>; shaded Patterns, and painting operations
+that involve a RasterOp, do something more complicated.
+
+<dl>
+
+<dt>
+Color specification:
+<dd>
+<a href="../src/gsccolor.h">src/gsccolor.h</a>,
+<a href="../src/gscolor.c">src/gscolor.c</a>,
+<a href="../src/gscolor.h">src/gscolor.h</a>,
+<a href="../src/gscolor1.c">src/gscolor1.c</a>,
+<a href="../src/gscolor1.h">src/gscolor1.h</a>,
+<a href="../src/gscolor2.c">src/gscolor2.c</a>,
+<a href="../src/gscolor2.h">src/gscolor2.h</a>,
+<a href="../src/gscolor3.c">src/gscolor3.c</a>,
+<a href="../src/gscolor3.h">src/gscolor3.h</a>,
+<a href="../src/gshsb.c">src/gshsb.c</a>,
+<a href="../src/gshsb.h">src/gshsb.h</a>,
+<a href="../src/gxcolor2.h">src/gxcolor2.h</a>,
+<a href="../src/gxcvalue.h">src/gxcvalue.h</a>.
+
+<dt>
+Color spaces:
+<dd>
+<a href="../src/gscdevn.c">src/gscdevn.c</a>,
+<a href="../src/gscdevn.h">src/gscdevn.h</a>,
+<a href="../src/gscie.c">src/gscie.c</a>,
+<a href="../src/gscie.h">src/gscie.h</a>,
+<a href="../src/gscpixel.c">src/gscpixel.c</a>,
+<a href="../src/gscpixel.h">src/gscpixel.h</a>,
+<a href="../src/gscscie.c">src/gscscie.c</a>,
+<a href="../src/gscsepnm.h">src/gscsepnm.h</a>,
+<a href="../src/gscsepr.c">src/gscsepr.c</a>,
+<a href="../src/gscsepr.h">src/gscsepr.h</a>,
+<a href="../src/gscspace.c">src/gscspace.c</a>,
+<a href="../src/gscspace.h">src/gscspace.h</a>,
+<a href="../src/gscssub.c">src/gscssub.c</a>,
+<a href="../src/gscssub.h">src/gscssub.h</a>,
+<a href="../src/gxcdevn.h">src/gxcdevn.h</a>,
+<a href="../src/gxcie.h">src/gxcie.h</a>,
+<a href="../src/gxcspace.h">src/gxcspace.h</a>.
+
+<dt>
+Color mapping:
+<dd>
+<a href="../src/gsciemap.c">src/gsciemap.c</a>,
+<a href="../src/gscindex.h">src/gscindex.h</a>,
+<a href="../src/gscrd.c">src/gscrd.c</a>,
+<a href="../src/gscrd.h">src/gscrd.h</a>,
+<a href="../src/gscrdp.c">src/gscrdp.c</a>,
+<a href="../src/gscrdp.h">src/gscrdp.h</a>,
+<a href="../src/gscsel.h">src/gscsel.h</a>,
+<a href="../src/gsdcolor.h">src/gsdcolor.h</a>,
+<a href="../src/gxcindex.h">src/gxcindex.h</a>,
+<a href="../src/gxcmap.c">src/gxcmap.c</a>,
+<a href="../src/gxcmap.h">src/gxcmap.h</a>,
+<a href="../src/gxctable.c">src/gxctable.c</a>,
+<a href="../src/gxctable.h">src/gxctable.h</a>,
+<a href="../src/gxdcconv.c">src/gxdcconv.c</a>,
+<a href="../src/gxdcconv.h">src/gxdcconv.h</a>,
+<a href="../src/gxdcolor.c">src/gxdcolor.c</a>,
+<a href="../src/gxdcolor.h">src/gxdcolor.h</a>,
+<a href="../src/gxdither.c">src/gxdither.c</a>,
+<a href="../src/gxdither.h">src/gxdither.h</a>,
+<a href="../src/gxfmap.h">src/gxfmap.h</a>,
+<a href="../src/gxlum.h">src/gxlum.h</a>,
+<a href="../src/gxtmap.h">src/gxtmap.h</a>.
+
+<p>
+ICC profiles are in some ways a special case of color mapping, but are
+not standard in PostScript.
+
+<dt>
+Color mapping:
+<dd>
+<a href="../src/gsicc.c">src/gsicc.c</a>,
+<a href="../src/gsicc.h">src/gsicc.h</a>,
+
+</dl>
+
+<p>
+Ghostscript represents halftones internally by "whitening orders" --
+essentially, arrays of arrays of bit coordinates within a halftone cell,
+specifying which bits are inverted to get from halftone level K to level
+K+1. The code does support all of the PostScript halftone types, but they
+are all ultimately reduced to whitening orders.
+
+<p>
+Threshold arrays, the more conventional representation of halftones, can be
+mapped to whitening orders straightforwardly; however, whitening orders can
+represent non-monotonic halftones (halftones where the bits turned on for
+level K+1 don't necessarily include all the bits turned on for level K),
+while threshold arrays cannot. On the other hand, threshold arrays allow
+rapid conversion of images (using a threshold comparison for each pixel)
+with no additional space, while whitening orders do not: they require
+storing the rendered halftone cell for each possible level as a bitmap.
+
+<p>
+Ghostscript uses two distinct types of rendered halftones -- that is, the
+bitmap(s) that represent a particular level.
+
+<ul>
+
+<li>Binary halftones. The rendered halftone is a single bit plane; each bit
+selects one of two pure colors. These are fast but limited: they are used
+for monochrome output devices, or for color devices in those cases where
+only two distinct colors are involved in a halftone (e.g., a pure cyan shade
+on a CMYK device). The device color for a binary halftone stores a pointer
+to the halftone bitmap, and the two pure colors.
+
+<li>Multi-plane halftones. Internally, each plane is rendered individually.
+Since there isn't enough room to store all 2^N pure colors, multi-plane
+halftones only store the scaled values for the individual components; the
+halftone renderer maps these to the pure colors on the fly, then combines
+the planes to assemble an N-bit index into the list of colors for each
+pixel, and stores the color into the fully rendered halftone.
+
+</ul>
+
+<p>
+The halftone level for rendering a color is computed in <a
+href="../src/gxdither.c">src/gxdither.c</a>; the actual halftone mask or
+tile is computed either in <a href="../src/gxcht.c">src/gxcht.c</a> (for
+multi-plane halftones), or in <a href="../src/gxht.c">src/gxht.c</a> and <a
+href="../src/gxhtbit.c">src/gxhtbit.c</a> (for binary halftones).
+
+<dl>
+
+<dt>
+Halftoning:
+<dd>
+<a href="../src/gsht.c">src/gsht.c</a>,
+<a href="../src/gsht.h">src/gsht.h</a>,
+<a href="../src/gsht1.c">src/gsht1.c</a>,
+<a href="../src/gsht1.h">src/gsht1.h</a>,
+<a href="../src/gshtscr.c">src/gshtscr.c</a>,
+<a href="../src/gshtx.c">src/gshtx.c</a>,
+<a href="../src/gshtx.h">src/gshtx.h</a>,
+<a href="../src/gxcht.c">src/gxcht.c</a>,
+<a href="../src/gxdht.h">src/gxdht.h</a>,
+<a href="../src/gxdhtres.h">src/gxdhtres.h</a>,
+<a href="../src/gxht.c">src/gxht.c</a>,
+<a href="../src/gxht.h">src/gxht.h</a>,
+<a href="../src/gxhtbit.c">src/gxhtbit.c</a>,
+<a href="../src/gxhttile.h">src/gxhttile.h</a>,
+<a href="../src/gxhttype.h">src/gxhttype.h</a>,
+<a href="../src/gzht.h">src/gzht.h</a>.
+
+</dl>
+
+<p>
+Pattern colors (tiled patterns and shadings) each use a slightly different
+approach from solid colors.
+
+<p>
+The device color for a tiled (PatternType 1) pattern contains a pointer to a
+pattern instance, plus (for uncolored patterns) the device color to be
+masked. The pattern instance includes a procedure that actually paints the
+pattern if the pattern is not in the cache. For the PostScript interpreter,
+this procedure returns an <b><tt>e_RemapColor</tt></b> exception code: this
+eventually causes the interpreter to run the pattern's PaintProc, loading
+the rendering into the cache, and then re-execute the original drawing
+operator.
+
+<dl>
+
+<dt>
+Patterns:
+<dd>
+<a href="../src/gspcolor.c">src/gspcolor.c</a>,
+<a href="../src/gspcolor.h">src/gspcolor.h</a>,
+<a href="../src/gsptype1.c">src/gsptype1.c</a>,
+<a href="../src/gsptype1.h">src/gsptype1.h</a>,
+<a href="../src/gxp1fill.c">src/gxp1fill.c</a>,
+<a href="../src/gxp1impl.h">src/gxp1impl.h</a>,
+<a href="../src/gxpcache.h">src/gxpcache.h</a>,
+<a href="../src/gxpcmap.c">src/gxpcmap.c</a>,
+<a href="../src/gxpcolor.h">src/gxpcolor.h</a>.
+
+</dl>
+
+<p>
+The device color for a shading (PatternType 2) pattern also contains a
+pointer to a pattern instance. Shadings are not cached: painting with a
+shading runs the shading algorithm every time.
+
+<dl>
+
+<dt>
+Shading:
+<dd>
+<a href="../src/gsptype2.c">src/gsptype2.c</a>,
+<a href="../src/gsptype2.h">src/gsptype2.h</a>,
+<a href="../src/gsshade.c">src/gsshade.c</a>,
+<a href="../src/gsshade.h">src/gsshade.h</a>,
+<a href="../src/gxshade.c">src/gxshade.c</a>,
+<a href="../src/gxshade.h">src/gxshade.h</a>,
+<a href="../src/gxshade1.c">src/gxshade1.c</a>,
+<a href="../src/gxshade4.c">src/gxshade4.c</a>,
+<a href="../src/gxshade4.h">src/gxshade4.h</a>,
+<a href="../src/gxshade6.c">src/gxshade6.c</a>.
+
+</dl>
+
+<p>
+In addition to the PostScript graphics model, Ghostscript supports RasterOp,
+a weak form of alpha channel, and eventually the full PDF 1.4 transparency
+model. The implemention of these facilities is quite slipshod and
+scattered: only RasterOp is really implemented fully. There is a general
+compositing architecture, but it is hardly used at all, and in particular is
+not used for RasterOp. ****** TO BE COMPLETED ******
+
+<dl>
+
+<dt>
+Compositing architecture:
+<dd>
+<a href="../src/gscompt.h">src/gscompt.h</a>,
+<a href="../src/gxcomp.h">src/gxcomp.h</a>.
+
+<dt>
+RasterOp:
+<dd>
+<a href="../src/gdevdrop.c">src/gdevdrop.c</a>,
+<a href="../src/gdevrops.c">src/gdevrops.c</a>,
+<a href="../src/gsnorop.c">src/gsnorop.c</a>,
+<a href="../src/gsrop.c">src/gsrop.c</a>,
+<a href="../src/gsrop.h">src/gsrop.h</a>,
+<a href="../src/gsropc.c">src/gsropc.c</a>,
+<a href="../src/gsropc.h">src/gsropc.h</a>,
+<a href="../src/gsropt.h">src/gsropt.h</a>,
+<a href="../src/gsroptab.c">src/gsroptab.c</a>,
+<a href="../src/gxdevrop.h">src/gxdevrop.h</a>,
+<a href="../src/gxropc.h">src/gxropc.h</a>.
+
+<dt>
+Alpha channel and compositing:
+<dd>
+<a href="../src/gsalpha.c">src/gsalpha.c</a>,
+<a href="../src/gsalpha.h">src/gsalpha.h</a>,
+<a href="../src/gsalphac.c">src/gsalphac.c</a>,
+<a href="../src/gsalphac.h">src/gsalphac.h</a>,
+<a href="../src/gsdpnext.h">src/gsdpnext.h</a>,
+<a href="../src/gxalpha.h">src/gxalpha.h</a>.
+
+<dt>
+Advanced transparency:
+<dd>
+<a href="../src/gstparam.h">src/gstparam.h</a>,
+<a href="../src/gstrans.c">src/gstrans.c</a>,
+<a href="../src/gstrans.h">src/gstrans.h</a>,
+<a href="../src/gxblend.c">src/gxblend.c</a>,
+<a href="../src/gxblend.h">src/gxblend.h</a>,
+<a href="../src/gdevp14.c">src/gdevp14.c</a>.
+<a href="../src/gdevp14.h">src/gdevp14.h</a>.
+<a href="../src/gdevpnga.c">src/gdevpnga.c</a>.
+
+</dl>
+
+<h4><a name="Clipping"></a>Clipping</h4>
+
+<p>
+The Ghostscript graphics library implements clipping by inserting a clipping
+device in the device pipeline. The clipping device modifies all drawing
+operations to confine them to the clipping region.
+
+<p>
+The library supports three different kinds of clipping:
+
+<dl>
+
+<dt>
+Region/path clipping
+<dd>
+This corresponds to the PostScript concept of a clipping path. The clipping
+region is specified either by a list of rectangles (subject to the
+constraints documented in <a href="../src/gxcpath.h">src/gxcpath.h</a>), or
+by a path that is converted to such a list of rectangles.
+
+<dt>
+Stationary mask clipping
+<dd>
+This corresponds to the mask operand of a PostScript ImageType 3 image. The
+clipping region is specified by a bitmap and an (X,Y) offset in the
+coordinate space.
+
+<dt>
+Tiled mask clipping
+<dd>
+This corresponds to the region painted by a PostScript Pattern, for the case
+where the Pattern does not completely cover its bounding box but the
+combined transformation matrix has no skew or non-orthogonal rotation (i.e.,
+XStep and YStep map respectively to (X,0) and (0,Y) or vice versa). The
+clipping region is specified by a bitmap and an (X,Y) offset in the
+coordinate space, and is replicated indefinitely in both X and Y.
+
+</dl>
+
+<p>
+Note that simply scan-converting a clipping path in the usual way does not
+produce a succession of rectangles that can simply be stored as the list for
+region-based clipping: in general, the rectangles do not satisfy the
+constraint for rectangle lists specified in <a
+href="../src/gxcpath.h">src/gxcpath.h</a>, since they may overlap in X, Y,
+or both. A non-trivial "clipping list accumulator" device is needed to
+produce a rectangle list that does satisfy the constraint.
+
+<dl>
+
+<dt>
+Clipping support:
+<dd>
+<a href="../src/gxclip.c">src/gxclip.c</a>,
+<a href="../src/gxclip.h">src/gxclip.h</a>.
+
+<dt>
+Region/path clipping:
+<dd>
+<a href="../src/gxcpath.c">src/gxcpath.c</a>,
+<a href="../src/gxcpath.h">src/gxcpath.h</a>,
+<a href="../src/gzcpath.h">src/gzcpath.h</a>.
+
+<dt>
+Clipping list accumulator:
+<dd>
+<a href="../src/gxacpath.c">src/gxacpath.c</a>,
+<a href="../src/gzacpath.h">src/gzacpath.h</a>.
+
+<dt>
+Mask clipping support:
+<dd>
+<a href="../src/gxmclip.c">src/gxmclip.c</a>,
+<a href="../src/gxmclip.h">src/gxmclip.h</a>.
+
+<dt>
+Stationary mask clipping:
+<dd>
+<a href="../src/gxclipm.c">src/gxclipm.c</a>,
+<a href="../src/gxclipm.h">src/gxclipm.h</a>.
+
+<dt>
+Tiled mask clipping:
+<dd>
+<a href="../src/gxclip2.c">src/gxclip2.c</a>,
+<a href="../src/gxclip2.h">src/gxclip2.h</a>.
+
+</dl>
+
+<h4><a name="Other_graphics"></a>Other graphics</h4>
+
+<dl>
+
+<dt>
+Miscellaneous graphics state:
+<dd>
+<a href="../src/gsclipsr.c">src/gsclipsr.c</a>,
+<a href="../src/gsclipsr.h">src/gsclipsr.h</a>,
+<a href="../src/gsdps.c">src/gsdps.c</a>,
+<a href="../src/gsdps.h">src/gsdps.h</a>,
+<a href="../src/gsdps1.c">src/gsdps1.c</a>,
+<a href="../src/gsistate.c">src/gsistate.c</a>,
+<a href="../src/gsline.c">src/gsline.c</a>,
+<a href="../src/gsline.h">src/gsline.h</a>,
+<a href="../src/gslparam.h">src/gslparam.h</a>,
+<a href="../src/gsstate.c">src/gsstate.c</a>,
+<a href="../src/gsstate.h">src/gsstate.h</a>,
+<a href="../src/gstrap.c">src/gstrap.c</a>,
+<a href="../src/gstrap.h">src/gstrap.h</a>,
+<a href="../src/gxclipsr.h">src/gxclipsr.h</a>,
+<a href="../src/gxistate.h">src/gxistate.h</a>,
+<a href="../src/gxline.h">src/gxline.h</a>,
+<a href="../src/gxstate.h">src/gxstate.h</a>,
+<a href="../src/gzline.h">src/gzline.h</a>,
+<a href="../src/gzstate.h">src/gzstate.h</a>.
+
+</dl>
+
+<h4><a name="Driver_support"></a>Driver support</h4>
+
+<dl>
+
+<dt>
+Generic driver support:
+<dd>
+<a href="../src/gdevdcrd.c">src/gdevdcrd.c</a>,
+<a href="../src/gdevdcrd.h">src/gdevdcrd.h</a>,
+<a href="../src/gdevemap.c">src/gdevemap.c</a>,
+<a href="../src/gsdevice.c">src/gsdevice.c</a>,
+<a href="../src/gsdevice.h">src/gsdevice.h</a>,
+<a href="../src/gsdparam.c">src/gsdparam.c</a>,
+<a href="../src/gsxfont.h">src/gsxfont.h</a>,
+<a href="../src/gxdevbuf.h">src/gxdevbuf.h</a>,
+<a href="../src/gxdevcli.h">src/gxdevcli.h</a>,
+<a href="../src/gxdevice.h">src/gxdevice.h</a>,
+<a href="../src/gxrplane.h">src/gxrplane.h</a>,
+<a href="../src/gxxfont.h">src/gxxfont.h</a>.
+
+<dt>
+Accessing rendered bits:
+<dd>
+<a href="../src/gdevdbit.c">src/gdevdbit.c</a>,
+<a href="../src/gdevdgbr.c">src/gdevdgbr.c</a>,
+<a href="../src/gxbitfmt.h">src/gxbitfmt.h</a>,
+<a href="../src/gxgetbit.h">src/gxgetbit.h</a>.
+
+<dt>
+"Printer" driver support:
+<dd>
+<a href="../src/gdevmeds.c">src/gdevmeds.c</a>,
+<a href="../src/gdevmeds.h">src/gdevmeds.h</a>,
+<a href="../src/gdevppla.c">src/gdevppla.c</a>,
+<a href="../src/gdevppla.h">src/gdevppla.h</a>,
+<a href="../src/gdevprn.c">src/gdevprn.c</a>,
+<a href="../src/gdevprn.h">src/gdevprn.h</a>,
+<a href="../src/gdevprna.c">src/gdevprna.c</a>,
+<a href="../src/gdevprna.h">src/gdevprna.h</a>,
+<a href="../src/gxband.h">src/gxband.h</a>,
+<a href="../src/gxpageq.c">src/gxpageq.c</a>,
+<a href="../src/gxpageq.h">src/gxpageq.h</a>.
+
+<dt>
+High-level device support:
+<dd>
+<a href="../src/gdevvec.c">src/gdevvec.c</a>,
+<a href="../src/gdevvec.h">src/gdevvec.h</a>.
+
+<dt>
+Banding:
+<dd>
+<a href="../src/gxclbits.c">src/gxclbits.c</a>,
+<a href="../src/gxcldev.h">src/gxcldev.h</a>,
+<a href="../src/gxclfile.c">src/gxclfile.c</a>,
+<a href="../src/gxclimag.c">src/gxclimag.c</a>,
+<a href="../src/gxclio.h">src/gxclio.h</a>,
+<a href="../src/gxclist.c">src/gxclist.c</a>,
+<a href="../src/gxclist.h">src/gxclist.h</a>,
+<a href="../src/gxcllzw.c">src/gxcllzw.c</a>,
+<a href="../src/gxclmem.c">src/gxclmem.c</a>,
+<a href="../src/gxclmem.h">src/gxclmem.h</a>,
+<a href="../src/gxclpage.c">src/gxclpage.c</a>,
+<a href="../src/gxclpage.h">src/gxclpage.h</a>,
+<a href="../src/gxclpath.c">src/gxclpath.c</a>,
+<a href="../src/gxclpath.h">src/gxclpath.h</a>,
+<a href="../src/gxclrast.c">src/gxclrast.c</a>,
+<a href="../src/gxclread.c">src/gxclread.c</a>,
+<a href="../src/gxclrect.c">src/gxclrect.c</a>,
+<a href="../src/gxclutil.c">src/gxclutil.c</a>,
+<a href="../src/gxclzlib.c">src/gxclzlib.c</a>.
+
+</dl>
+
+<h3><a name="Device_drivers"></a>Device drivers</h3>
+
+<p>
+See <a href="Drivers.htm">doc/Drivers.htm</a> for extensive documentation on
+the interface between the core code and drivers.
+
+<p>
+The driver API includes high-level (path / image / text), mid-level
+(polygon), and low-level (rectangle / raster) operations. Most devices
+implement only the low-level operations, and let generic code break down the
+high-level operations. However, some devices produce high-level output, and
+therefore must implement the high-level operations.
+
+<h4><a name="Internal_devices"></a>Internal devices</h4>
+
+<p>
+There are a number of "devices" that serve internal purposes. Some of these
+are meant to be real rendering targets; others are intended for use in
+device pipelines. The rendering targets are:
+
+<dl>
+
+<dt>
+Memory devices, depth-independent:
+<dd>
+<a href="../src/gdevmem.c">src/gdevmem.c</a>,
+<a href="../src/gdevmem.h">src/gdevmem.h</a>,
+<a href="../src/gdevmpla.c">src/gdevmpla.c</a>,
+<a href="../src/gdevmpla.h">src/gdevmpla.h</a>,
+<a href="../src/gdevmrop.h">src/gdevmrop.h</a>,
+<a href="../src/gsdevmem.c">src/gsdevmem.c</a>,
+<a href="../src/gxdevmem.h">src/gxdevmem.h</a>.
+
+<dt>
+Memory devices, specific depths:
+<dd>
+<a href="../src/gdevm1.c">src/gdevm1.c</a>,
+<a href="../src/gdevm2.c">src/gdevm2.c</a>,
+<a href="../src/gdevm4.c">src/gdevm4.c</a>,
+<a href="../src/gdevm8.c">src/gdevm8.c</a>,
+<a href="../src/gdevm16.c">src/gdevm16.c</a>,
+<a href="../src/gdevm24.c">src/gdevm24.c</a>,
+<a href="../src/gdevm32.c">src/gdevm32.c</a>,
+<a href="../src/gdevmr1.c">src/gdevmr1.c</a>,
+<a href="../src/gdevmr2n.c">src/gdevmr2n.c</a>,
+<a href="../src/gdevmr8n.c">src/gdevmr8n.c</a>.
+
+<dt>
+Alpha-related devices:
+<dd>
+<a href="../src/gdevabuf.c">src/gdevabuf.c</a>,
+<a href="../src/gdevalph.c">src/gdevalph.c</a>.
+
+<dt>
+Other devices:
+<dd>
+<a href="../src/gdevdflt.c">src/gdevdflt.c</a>,
+<a href="../src/gdevhit.c">src/gdevhit.c</a>,
+<a href="../src/gdevht.c">src/gdevht.c</a>,
+<a href="../src/gdevht.h">src/gdevht.h</a>,
+<a href="../src/gdevmrun.c">src/gdevmrun.c</a>,
+<a href="../src/gdevmrun.h">src/gdevmrun.h</a>,
+<a href="../src/gdevplnx.c">src/gdevplnx.c</a>,
+<a href="../src/gdevplnx.h">src/gdevplnx.h</a>,
+
+</dl>
+
+<p>
+The forwarding devices meant for use in pipelines are:
+
+<dl>
+
+<dt>
+The bounding box device:
+<dd>
+<a href="../src/gdevbbox.h">src/gdevbbox.h</a>,
+<a href="../src/gdevbbox.c">src/gdevbbox.c</a>.
+
+<dt>
+Clipping devices:
+<dd>
+See under <a href="#Clipping">Clipping</a> above.
+
+<dt>
+Device filter stack:
+<dd>
+<a href="../src/gsdfilt.c">src/gsdfilt.c</a>,
+<a href="../src/gsdfilt.h">src/gsdfilt.h</a>,
+
+<dt>
+Other devices:
+<dd>
+<a href="../src/gdevcmap.c">src/gdevcmap.c</a>,
+<a href="../src/gdevcmap.h">src/gdevcmap.h</a>,
+<a href="../src/gdevnfwd.c">src/gdevnfwd.c</a>.
+
+</dl>
+
+<h4><a name="PS_and_PDF_writers"></a>PostScript and PDF writers</h4>
+
+<p>
+Because PostScript and PDF have the same graphics model, lexical syntax, and
+stack-based execution model, the drivers that produce PostScript and PDF
+output share a significant amount of support code. In the future, the
+PostScript output driver should be replaced with a slightly modified version
+of the PDF driver, since the latter is far more sophisticated (in
+particular, it has extensive facilities for image compression and for
+handling text and fonts).
+
+<dl>
+
+<dt>
+Shared support:
+<dd>
+
+<dl>
+Writing fonts:
+<dd>
+<a href="../src/gdevpsf.h">src/gdevpsf.h</a>,
+<a href="../src/gdevpsf1.c">src/gdevpsf1.c</a>,
+<a href="../src/gdevpsf2.c">src/gdevpsf2.c</a>,
+<a href="../src/gdevpsfm.c">src/gdevpsfm.c</a>,
+<a href="../src/gdevpsft.c">src/gdevpsft.c</a>,
+<a href="../src/gdevpsfu.c">src/gdevpsfu.c</a>,
+<a href="../src/gdevpsfx.c">src/gdevpsfx.c</a>.
+
+<dt>
+Other:
+<dd>
+<a href="../src/gdevpsdf.h">src/gdevpsdf.h</a>,
+<a href="../src/gdevpsdi.c">src/gdevpsdi.c</a>,
+<a href="../src/gdevpsdp.c">src/gdevpsdp.c</a>,
+<a href="../src/gdevpsds.c">src/gdevpsds.c</a>,
+<a href="../src/gdevpsds.h">src/gdevpsds.h</a>,
+<a href="../src/gdevpsdu.c">src/gdevpsdu.c</a>.
+
+</dl>
+
+<dt>
+PostScript output driver ([e]pswrite):
+<dd>
+<a href="../src/gdevps.c">src/gdevps.c</a>,
+<a href="../src/gdevpsu.c">src/gdevpsu.c</a>,
+<a href="../src/gdevpsu.h">src/gdevpsu.h</a>.
+
+<dt>
+PDF output driver (pdfwrite):
+<dd>
+<dl>
+
+<dt>
+Substrate:
+<dd>
+<a href="../src/gdevpdfo.c">src/gdevpdfo.c</a>,
+<a href="../src/gdevpdfo.h">src/gdevpdfo.h</a>,
+<a href="../src/gdevpdfr.c">src/gdevpdfr.c</a>,
+<a href="../src/gdevpdfu.c">src/gdevpdfu.c</a>.
+
+<dt>
+Text and fonts:
+<dd>
+<a href="../src/gdevpdfe.c">src/gdevpdfe.c</a>,
+<a href="../src/gdevpdff.c">src/gdevpdff.c</a>,
+<a href="../src/gdevpdff.h">src/gdevpdff.h</a>,
+<a href="../src/gdevpdfs.c">src/gdevpdfs.c</a>,
+<a href="../src/gdevpdft.c">src/gdevpdft.c</a>,
+<a href="../src/gdevpdfw.c">src/gdevpdfw.c</a>.
+
+<dt>
+Graphics:
+<dd>
+<a href="../src/gdevpdfc.c">src/gdevpdfc.c</a>,
+<a href="../src/gdevpdfd.c">src/gdevpdfd.c</a>,
+<a href="../src/gdevpdfg.c">src/gdevpdfg.c</a>,
+<a href="../src/gdevpdfg.h">src/gdevpdfg.h</a>,
+<a href="../src/gdevpdfv.c">src/gdevpdfv.c</a>.
+
+<dt>
+Images:
+<dd>
+<a href="../src/gdevpdfb.c">src/gdevpdfb.c</a>,
+<a href="../src/gdevpdfi.c">src/gdevpdfi.c</a>,
+<a href="../src/gdevpdfj.c">src/gdevpdfj.c</a>.
+
+<dt>
+Other:
+<dd>
+<a href="../src/gdevpdf.c">src/gdevpdf.c</a>,
+<a href="../src/gdevpdfm.c">src/gdevpdfm.c</a>,
+<a href="../src/gdevpdfp.c">src/gdevpdfp.c</a>,
+<a href="../src/gdevpdfx.h">src/gdevpdfx.h</a>.
+
+</dl>
+
+</dl>
+
+<h4><a name="High_level_devices"></a>Other high-level devices</h4>
+
+<p>
+Currently, the CGM driver is raster-only. If anyone cares seriously about
+CGM in the future, this driver should be upgraded to a higher level.
+
+<dl>
+
+<dt>
+PCL XL output device (pxlmono, pxlcolor):
+<dd>
+<a href="../src/gdevpx.c">src/gdevpx.c</a>,
+<a href="../src/gdevpxat.h">src/gdevpxat.h</a>,
+<a href="../src/gdevpxen.h">src/gdevpxen.h</a>,
+<a href="../src/gdevpxop.h">src/gdevpxop.h</a>,
+<a href="../src/gdevpxut.c">src/gdevpxut.c</a>,
+<a href="../src/gdevpxut.h">src/gdevpxut.h</a>.
+
+<dt>
+Other high-level devices:
+<dd>
+<a href="../src/gdevtrac.c">src/gdevtrac.c</a>.
+
+</dl>
+
+<h4><a name="Other_maintained_drivers"></a>Other maintained drivers</h4>
+
+<p>
+The standard Ghostscript distribution includes a collection of drivers,
+mostly written by Aladdin Enterprises, that are "maintained" in the same
+sense as the Ghostscript core code.
+
+<dl>
+
+<dt>
+Display drivers:
+<dd>
+<a href="../src/gdev8bcm.c">src/gdev8bcm.c</a>,
+<a href="../src/gdev8bcm.h">src/gdev8bcm.h</a>,
+<a href="../src/gdevegaa.asm">src/gdevegaa.asm</a>,
+<a href="../src/gdevevga.c">src/gdevevga.c</a>,
+<a href="../src/gdevl256.c">src/gdevl256.c</a>,
+<a href="../src/gdevpccm.c">src/gdevpccm.c</a>,
+<a href="../src/gdevpccm.h">src/gdevpccm.h</a>,
+<a href="../src/gdevpcfb.c">src/gdevpcfb.c</a>,
+<a href="../src/gdevpcfb.h">src/gdevpcfb.h</a>,
+<a href="../src/gdevs3ga.c">src/gdevs3ga.c</a>,
+<a href="../src/gdevsco.c">src/gdevsco.c</a>,
+<a href="../src/gdevsvga.c">src/gdevsvga.c</a>,
+<a href="../src/gdevsvga.h">src/gdevsvga.h</a>,
+<a href="../src/gdevvglb.c">src/gdevvglb.c</a>.
+
+<dt>
+Window system drivers:
+<dd>
+
+<dl>
+
+<dt>
+X Windows:
+<dd>
+<a href="../src/gdevx.c">src/gdevx.c</a>,
+<a href="../src/gdevx.h">src/gdevx.h</a>,
+<a href="../src/gdevxalt.c">src/gdevxalt.c</a>,
+<a href="../src/gdevxcmp.c">src/gdevxcmp.c</a>,
+<a href="../src/gdevxcmp.h">src/gdevxcmp.h</a>,
+<a href="../src/gdevxini.c">src/gdevxini.c</a>,
+<a href="../src/gdevxres.c">src/gdevxres.c</a>,
+<a href="../src/gdevxxf.c">src/gdevxxf.c</a>.
+
+<dt>
+Microsoft Windows:
+<dd>
+<a href="../src/gdevmswn.c">src/gdevmswn.c</a>,
+<a href="../src/gdevmswn.h">src/gdevmswn.h</a>,
+<a href="../src/gdevmsxf.c">src/gdevmsxf.c</a>,
+<a href="../src/gdevwddb.c">src/gdevwddb.c</a>,
+<a href="../src/gdevwdib.c">src/gdevwdib.c</a>.
+
+<dt>
+OS/2 Presentation Manager:
+<dd>
+<a href="../src/gdevpm.c">src/gdevpm.c</a>,
+<a href="../src/gdevpm.h">src/gdevpm.h</a>,
+<a href="../src/gspmdrv.c">src/gspmdrv.c</a>,
+<a href="../src/gspmdrv.h">src/gspmdrv.h</a>.
+
+</dl>
+
+<dt>
+Raster file output drivers:
+<dd>
+
+<dl>
+
+<dt>
+Fax and TIFF:
+<dd>
+<a href="../src/gdevfax.c">src/gdevfax.c</a>,
+<a href="../src/gdevfax.h">src/gdevfax.h</a>,
+<a href="../src/gdevtfax.c">src/gdevtfax.c</a>,
+<a href="../src/gdevtfax.h">src/gdevtfax.h</a>,
+<a href="../src/gdevtifs.c">src/gdevtifs.c</a>,
+<a href="../src/gdevtifs.h">src/gdevtifs.h</a>,
+<a href="../src/gdevtfnx.c">src/gdevtfnx.c</a>.
+
+<dt>
+(Low-level) CGM:
+<dd>
+<a href="../src/gdevcgm.c">src/gdevcgm.c</a>,
+<a href="../src/gdevcgml.c">src/gdevcgml.c</a>,
+<a href="../src/gdevcgml.h">src/gdevcgml.h</a>,
+<a href="../src/gdevcgmx.h">src/gdevcgmx.h</a>.
+
+<dt>
+Other raster file formats:
+<dd>
+<a href="../src/gdevbit.c">src/gdevbit.c</a>,
+<a href="../src/gdevbmp.c">src/gdevbmp.c</a>,
+<a href="../src/gdevbmp.h">src/gdevbmp.h</a>,
+<a href="../src/gdevbmpa.c">src/gdevbmpa.c</a>,
+<a href="../src/gdevbmpc.c">src/gdevbmpc.c</a>,
+<a href="../src/gdevjpeg.c">src/gdevjpeg.c</a>,
+<a href="../src/gdevmiff.c">src/gdevmiff.c</a>,
+<a href="../src/gdevp2up.c">src/gdevp2up.c</a>,
+<a href="../src/gdevpcx.c">src/gdevpcx.c</a>,
+<a href="../src/gdevpbm.c">src/gdevpbm.c</a>,
+<a href="../src/gdevpng.c">src/gdevpng.c</a>,
+<a href="../src/gdevpsim.c">src/gdevpsim.c</a>.
+
+</dl>
+
+<dt>
+Printer drivers:
+<dd>
+
+<dl>
+
+<dt>
+Operating system printer services:
+<dd>
+<a href="../src/gdevos2p.c">src/gdevos2p.c</a>,
+<a href="../src/gdevwpr2.c">src/gdevwpr2.c</a>,
+<a href="../src/gdevwprn.c">src/gdevwprn.c</a>.
+
+<dt>
+H-P monochrome printers:
+<dd>
+<a href="../src/gdevdljm.c">src/gdevdljm.c</a>,
+<a href="../src/gdevdljm.h">src/gdevdljm.h</a>,
+<a href="../src/gdevdjet.c">src/gdevdjet.c</a>,
+<a href="../src/gdevlj56.c">src/gdevlj56.c</a>.
+
+<dt>
+Other printers:
+<dd>
+<a href="../src/gdevatx.c">src/gdevatx.c</a>.
+
+</dl>
+
+</dl>
+
+<h4><a name="Contributed_drivers"></a>Contributed drivers</h4>
+
+<p>
+This list is likely to be incomplete and inaccurate: see <a
+href="../src/contrib.mak">src/contrib.mak</a> for the real one.
+
+<dl>
+
+<dt>
+Display and window system drivers:
+<dd>
+<a href="../src/gdev3b1.c">src/gdev3b1.c</a>,
+<a href="../src/gdevherc.c">src/gdevherc.c</a>,
+<a href="../src/gdevpe.c">src/gdevpe.c</a>,
+<a href="../src/gdevsnfb.c">src/gdevsnfb.c</a>,
+<a href="../src/gdevsun.c">src/gdevsun.c</a>.
+
+<dt>
+Raster file output drivers:
+<dd>
+<a href="../src/gdevcfax.c">src/gdevcfax.c</a>,
+<a href="../src/gdevcif.c">src/gdevcif.c</a>,
+<a href="../src/gdevdfax.c">src/gdevdfax.c</a>,
+<a href="../src/gdevifno.c">src/gdevifno.c</a>,
+<a href="../src/gdevmgr.c">src/gdevmgr.c</a>,
+<a href="../src/gdevmgr.h">src/gdevmgr.h</a>,
+<a href="../src/gdevsgi.c">src/gdevsgi.c</a>,
+<a href="../src/gdevsgi.h">src/gdevsgi.h</a>,
+<a href="../src/gdevsunr.c">src/gdevsunr.c</a>.
+
+<dt>
+Printer drivers:
+<dd>
+<a href="../lib/bj8.rpd">lib/bj8.rpd</a>,
+<a href="../lib/cbjc600.ppd">lib/cbjc600.ppd</a>,
+<a href="../lib/cbjc800.ppd">lib/cbjc800.ppd</a>,
+<a href="../src/gdev3852.c">src/gdev3852.c</a>,
+<a href="../src/gdev4081.c">src/gdev4081.c</a>,
+<a href="../src/gdev4693.c">src/gdev4693.c</a>,
+<a href="../src/gdev8510.c">src/gdev8510.c</a>,
+<a href="../src/gdevadmp.c">src/gdevadmp.c</a>,
+<a href="../src/gdevbj10.c">src/gdevbj10.c</a>,
+<a href="../src/gdevbjc.h">src/gdevbjc.h</a>,
+<a href="../src/gdevbjcl.c">src/gdevbjcl.c</a>,
+<a href="../src/gdevbjcl.h">src/gdevbjcl.h</a>,
+<a href="../src/gdevccr.c">src/gdevccr.c</a>,
+<a href="../src/gdevcdj.c">src/gdevcdj.c</a>,
+<a href="../src/gdevclj.c">src/gdevclj.c</a>,
+<a href="../src/gdevcljc.c">src/gdevcljc.c</a>,
+<a href="../src/gdevcp50.c">src/gdevcp50.c</a>,
+<a href="../src/gdevcslw.c">src/gdevcslw.c</a>,
+<a href="../src/gdevdjtc.c">src/gdevdjtc.c</a>,
+<a href="../src/gdevdm24.c">src/gdevdm24.c</a>,
+<a href="../src/gdevepsc.c">src/gdevepsc.c</a>,
+<a href="../src/gdevepsn.c">src/gdevepsn.c</a>,
+<a href="../src/gdevescp.c">src/gdevescp.c</a>,
+<a href="../src/gdevhl7x.c">src/gdevhl7x.c</a>,
+<a href="../src/gdevhpij.c">src/gdevhpij.c</a>,
+<a href="../src/gdevhpij.h">src/gdevhpij.h</a>,
+<a href="../src/gdevijs.c">src/gdevijs.c</a>,
+<a href="../src/gdevimgn.c">src/gdevimgn.c</a>,
+<a href="../src/gdevl31s.c">src/gdevl31s.c</a>,
+<a href="../src/gdevlbp8.c">src/gdevlbp8.c</a>,
+<a href="../src/gdevlp8k.c">src/gdevlp8k.c</a>,
+<a href="../src/gdevlxm.c">src/gdevlxm.c</a>,
+<a href="../src/gdevn533.c">src/gdevn533.c</a>,
+<a href="../src/gdevo182.c">src/gdevo182.c</a>,
+<a href="../src/gdevokii.c">src/gdevokii.c</a>,
+<a href="../src/gdevpcl.c">src/gdevpcl.c</a>,
+<a href="../src/gdevpcl.h">src/gdevpcl.h</a>,
+<a href="../src/gdevphex.c">src/gdevphex.c</a>,
+<a href="../src/gdevpjet.c">src/gdevpjet.c</a>,
+<a href="../src/gdevsj48.c">src/gdevsj48.c</a>,
+<a href="../src/gdevsppr.c">src/gdevsppr.c</a>,
+<a href="../src/gdevstp.c">src/gdevstp.c</a>,
+<a href="../src/gdevstc.c">src/gdevstc.c</a>,
+<a href="../src/gdevstc.h">src/gdevstc.h</a>,
+<a href="../src/gdevstc1.c">src/gdevstc1.c</a>,
+<a href="../src/gdevstc2.c">src/gdevstc2.c</a>,
+<a href="../src/gdevstc3.c">src/gdevstc3.c</a>,
+<a href="../src/gdevstc4.c">src/gdevstc4.c</a>,
+<a href="../src/gdevtknk.c">src/gdevtknk.c</a>,
+<a href="../src/gdevupd.c">src/gdevupd.c</a>.
+<a href="../src/gdevhl12.c">src/gdevhl12.c</a>.
+
+</dl>
+
+<h3><a name="PostScript_interpreter"></a>PostScript interpreter</h3>
+
+<p>
+The PostScript interpreter is conceptually simple: in fact, an interpreter
+that could execute "3 4 add =" and print "7" was running 3 weeks after the
+first line of Ghostscript code was written. However, a number of
+considerations make the code large and complex.
+
+<p>
+The interpreter is designed to run in environments with very limited memory.
+The main consequence of this is that it cannot allocate its stacks
+(dictionary, execution, operand) as ordinary arrays, since the
+user-specified stack size limit may be very large. Instead, it allocates
+them as a linked list of blocks. See below for more details.
+
+<p>
+The interpreter must never cause a C runtime error that it cannot trap.
+Unfortunately, C implementations almost never provide the ability to trap
+stack overflow. In order to put a fixed bound on the C stack size, the
+interpreter never implements PostScript recursion by C recursion. This
+means that any C code that logically needs to call the interpreter must
+instead push a continuation (including all necessary state information) on
+the PostScript execution stack, followed by the PostScript object to be
+executed, and then <em>return</em> to the interpreter. Unfortunately, since
+PostScript Level 2 introduces streams whose data source can be a PostScript
+procedure, any code that reads or writes stream data must be prepared to
+suspend itself, storing all necessary state in a continuation. There are
+some places where this is extremely awkward, such as the scanner/parser.
+
+<p>
+The use of continuations affects many places in the interpreter, and even
+some places in the graphics library. For example, when processing an image,
+one may need to call a PostScript procedure as part of mapping a CIE color
+to a device color. Ghostscript uses a variety of dodges to handle this: for
+example, in the case of CIE color mapping, all of the PostScript procedures
+are pre-sampled and the results cached. The Adobe implementation limits
+this kind of recursion to a fixed number of levels (5?): this would be
+another acceptable approach, but at this point it would require far more
+code restructuring than it would be worth.
+
+<p>
+A significant amount of the PostScript language implementation is in fact
+written in PostScript. Writing in PostScript leverages the C code for
+multi-threading, garbage collection, error handling, continuations for
+streams, etc., etc.; also, we have found PostScript in general more concise
+and easier to debug than C, mostly because of memory management issues. So
+given the choice, we tended to implement a feature in PostScript if it
+worked primarily with PostScript data structures, wasn't heavily used
+(example: font loading), or if it interacted with the stream or other
+callback machinery (examples: ReusableFileDecode streams, resourceforall).
+Often we would add non-standard PostScript operators for functions that had
+to run faster or that did more C-like things, such as the media matching
+algorithm for setpagedevice.
+
+</ul>
+
+<h4><a name="Main_program"></a>Main program</h4>
+
+<p>
+The main program of the interpreter is normally invoked from the command
+line, but it has an API as well. In fact, it has two APIs: one that
+recognizes the existence of multiple "interpreter instances" (although it
+currently provides a default instance, which almost all clients use), and a
+completely different one designed for Windows DLLs. These should be unified
+as soon as possible, since there are two steadily growing incompatible
+bodies of client code.
+
+<dl>
+
+<dt>
+Files:
+<dd>
+<a href="../src/gs.c">src/gs.c</a>,
+<a href="../src/gserver.c">src/gserver.c</a>,
+<a href="../src/iccinit0.c">src/iccinit0.c</a>,
+<a href="../src/iinit.c">src/iinit.c</a>,
+<a href="../src/iinit.h">src/iinit.h</a>,
+<a href="../src/imain.c">src/imain.c</a>,
+<a href="../src/imain.h">src/imain.h</a>,
+<a href="../src/imainarg.c">src/imainarg.c</a>,
+<a href="../src/imainarg.h">src/imainarg.h</a>,
+<a href="../src/iminst.h">src/iminst.h</a>,
+<a href="../src/main.h">src/main.h</a>.
+
+</dl>
+
+<h4><a name="Data_structures"></a>Data structures</h4>
+
+<p>
+The main data structures visible to the PostScript programmers are arrays,
+contexts, dictionaries, names, and stacks.
+
+<p>
+Arrays have no unusual properties. See under <a href="#Refs">Refs</a> below
+for more information about how array elements are stored.
+
+<p>
+Contexts are used to hold the interpreter state even in configurations that
+don't include the Display PostScript multiple context extension. Context
+switching is implemented by a complex cooperation of C and PostScript code.
+
+<p>
+Dictionaries have two special properties worth noting:
+
+<ul>
+
+<li>They use an optimized storage representation if all the keys are names,
+which is almost always the case.
+
+<li>They interact with a caching scheme used to accelerate name lookup in
+the interpreter.
+
+</ul>
+
+<p>
+Names are allocated in blocks. The characters and hash chains are stored
+separately from the lookup cache information, so that in the future, most of
+the former can be compiled into the executable and shared or put in ROM.
+(This is not actually done yet.)
+
+<p>
+As mentioned above, each stack is allocated as a linked list of blocks.
+However, for reasonable performance, operators must normally be able to
+access their operands and produce their results using indexing rather than
+an access procedure. This is implemented by ensuring that all the operands
+of an operator are in the topmost block of the stack, using guard entries
+that cause an internal error if the condition isn't met. See <a
+href="../src/iostack.h">src/iostack.h</a> for more details.
+
+<dl>
+
+<dt>
+General data structures:
+<dd>
+
+<dl>
+
+<dt>
+Contexts:
+<dd>
+<a href="../src/icontext.c">src/icontext.c</a>,
+<a href="../src/icontext.h">src/icontext.h</a>,
+<a href="../src/icstate.h">src/icstate.h</a>.
+
+<dt>
+Dictionaries:
+<dd>
+<a href="../src/iddict.h">src/iddict.h</a>,
+<a href="../src/idict.h">src/idict.h</a>,
+<a href="../src/idict.c">src/idict.c</a>,
+<a href="../src/idictdef.h">src/idictdef.h</a>.
+
+<dt>
+Names:
+<dd>
+<a href="../src/iname.c">src/iname.c</a>,
+<a href="../src/iname.h">src/iname.h</a>,
+<a href="../src/inamedef.h">src/inamedef.h</a>,
+<a href="../src/inameidx.h">src/inameidx.h</a>,
+<a href="../src/inames.h">src/inames.h</a>,
+<a href="../src/inamestr.h">src/inamestr.h</a>.
+
+<dt>
+Stacks:
+<dd>
+<a href="../src/isdata.h">src/isdata.h</a>,
+<a href="../src/istack.c">src/istack.c</a>,
+<a href="../src/istack.h">src/istack.h</a>,
+<a href="../src/istkparm.h">src/istkparm.h</a>.
+
+</dl>
+
+<dt>
+Specific stacks:
+<dd>
+
+<dl>
+
+<dt>
+Dictionary stack:
+<dd>
+<a href="../src/dstack.h">src/dstack.h</a>,
+<a href="../src/estack.h">src/estack.h</a>,
+<a href="../src/iddstack.h">src/iddstack.h</a>,
+<a href="../src/idsdata.h">src/idsdata.h</a>,
+<a href="../src/idstack.c">src/idstack.c</a>,
+<a href="../src/idstack.h">src/idstack.h</a>.
+
+<dt>
+Execution stack:
+<dd>
+<a href="../src/iesdata.h">src/iesdata.h</a>,
+<a href="../src/iestack.h">src/iestack.h</a>.
+
+<dt>
+Operand stack:
+<dd>
+<a href="../src/iosdata.h">src/iosdata.h</a>,
+<a href="../src/iostack.h">src/iostack.h</a>,
+<a href="../src/ostack.h">src/ostack.h</a>.
+
+</dl>
+
+</dl>
+
+<h4><a name="Interpreter_loop"></a>Interpreter loop</h4>
+
+<dl>
+
+<dt>
+Files:
+<dd>
+<a href="../src/interp.c">src/interp.c</a>,
+<a href="../src/interp.h">src/interp.h</a>.
+
+</dl>
+
+<h4><a name="Scanning_parsing"></a>Scanning/parsing</h4>
+
+<p>
+PostScript parsing consists essentially of token scanning, and is simple in
+principle. The scanner is complex because it must be able to suspend its
+operation at any time (i.e., between any two input characters) to allow an
+interpreter callout, if its input is coming from a procedure-based stream
+and the procedure must be called to provide more input data.
+
+<dl>
+
+<dt>
+Main scanner:
+<dd>
+<a href="../src/iscan.c">src/iscan.c</a>,
+<a href="../src/iscan.h">src/iscan.h</a>,
+<a href="../src/iscannum.c">src/iscannum.c</a>,
+<a href="../src/iscannum.h">src/iscannum.h</a>,
+<a href="../src/scanchar.h">src/scanchar.h</a>,
+<a href="../src/scantab.c">src/scantab.c</a>.
+
+<dt>
+Binary tokens:
+<dd>
+<a href="../src/btoken.h">src/btoken.h</a>,
+<a href="../src/ibnum.c">src/ibnum.c</a>,
+<a href="../src/ibnum.h">src/ibnum.h</a>,
+<a href="../src/inobtokn.c">src/inobtokn.c</a>,
+<a href="../src/iscanbin.c">src/iscanbin.c</a>,
+<a href="../src/iscanbin.h">src/iscanbin.h</a>.
+
+<dt>
+DSC parsing:
+<dd>
+<a href="../src/dscparse.c">src/dscparse.c</a>,
+<a href="../src/dscparse.h">src/dscparse.h</a>.
+
+</dl>
+
+<h4><a name="Standard_operators"></a>Standard operators</h4>
+
+<dl>
+
+<dt>
+Non-output-related:
+<dd>
+
+<dl>
+
+<dt>
+Filters:
+<dd>
+<a href="../src/ifilter.h">src/ifilter.h</a>,
+<a href="../src/ifilter2.h">src/ifilter2.h</a>,
+<a href="../src/ifrpred.h">src/ifrpred.h</a>,
+<a href="../src/ifwpred.h">src/ifwpred.h</a>,
+<a href="../src/istream.h">src/istream.h</a>,
+<a href="../src/zfbcp.c">src/zfbcp.c</a>,
+<a href="../src/zfdctd.c">src/zfdctd.c</a>,
+<a href="../src/zfdcte.c">src/zfdcte.c</a>,
+<a href="../src/zfdecode.c">src/zfdecode.c</a>,
+<a href="../src/zfilter.c">src/zfilter.c</a>,
+<a href="../src/zfilter2.c">src/zfilter2.c</a>,
+<a href="../src/zfilterx.c">src/zfilterx.c</a>,
+<a href="../src/zfmd5.c">src/zfmd5.c</a>,
+<a href="../src/zfarc4.c">src/zfarc4.c</a>,
+<a href="../src/zfproc.c">src/zfproc.c</a>,
+<a href="../src/zfrsd.c">src/zfrsd.c</a>,
+<a href="../src/zfzlib.c">src/zfzlib.c</a>.
+
+<dt>
+File and stream I/O:
+<dd>
+<a href="../src/files.h">src/files.h</a>,
+<a href="../src/itoken.h">src/itoken.h</a>,
+<a href="../src/zbseq.c">src/zbseq.c</a>,
+<a href="../src/zdscpars.c">src/zdscpars.c</a>,
+<a href="../src/zfile.c">src/zfile.c</a>,
+<a href="../src/zfileio.c">src/zfileio.c</a>,
+<a href="../src/ztoken.c">src/ztoken.c</a>.
+
+<dt>
+Data structures:
+<dd>
+<a href="../src/zarray.c">src/zarray.c</a>,
+<a href="../src/zdict.c">src/zdict.c</a>,
+<a href="../src/zgeneric.c">src/zgeneric.c</a>,
+<a href="../src/zpacked.c">src/zpacked.c</a>,
+<a href="../src/zstring.c">src/zstring.c</a>.
+
+<dt>
+Functions:
+<dd>
+<a href="../src/ifunc.h">src/ifunc.h</a>,
+<a href="../src/zfunc.c">src/zfunc.c</a>,
+<a href="../src/zfunc0.c">src/zfunc0.c</a>,
+<a href="../src/zfunc3.c">src/zfunc3.c</a>,
+<a href="../src/zfunc4.c">src/zfunc4.c</a>,
+
+<dt>
+Other:
+<dd>
+<a href="../src/ivmem2.h">src/ivmem2.h</a>,
+<a href="../src/zarith.c">src/zarith.c</a>,
+<a href="../src/zcontext.c">src/zcontext.c</a>,
+<a href="../src/zcontrol.c">src/zcontrol.c</a>,
+<a href="../src/zmath.c">src/zmath.c</a>,
+<a href="../src/zmatrix.c">src/zmatrix.c</a>,
+<a href="../src/zmisc.c">src/zmisc.c</a>,
+<a href="../src/zmisc1.c">src/zmisc1.c</a>,
+<a href="../src/zmisc2.c">src/zmisc2.c</a>,
+<a href="../src/zmisc3.c">src/zmisc3.c</a>,
+<a href="../src/zrelbit.c">src/zrelbit.c</a>,
+<a href="../src/zstack.c">src/zstack.c</a>,
+<a href="../src/ztype.c">src/ztype.c</a>,
+<a href="../src/zusparam.c">src/zusparam.c</a>,
+<a href="../src/zvmem.c">src/zvmem.c</a>,
+<a href="../src/zvmem2.c">src/zvmem2.c</a>.
+
+</dl>
+
+<dt>
+Output-related:
+<dd>
+
+<dl>
+
+<dt>
+Device management:
+<dd>
+<a href="../src/zdevcal.c">src/zdevcal.c</a>,
+<a href="../src/zdevice.c">src/zdevice.c</a>,
+<a href="../src/zdevice2.c">src/zdevice2.c</a>,
+<a href="../src/ziodev.c">src/ziodev.c</a>,
+<a href="../src/ziodev2.c">src/ziodev2.c</a>,
+<a href="../src/ziodevs.c">src/ziodevs.c</a>,
+<a href="../src/ziodevsc.c">src/ziodevsc.c</a>,
+<a href="../src/zmedia2.c">src/zmedia2.c</a>,
+<a href="../src/zdfilter.c">src/zdfilter.c</a>.
+
+<dt>
+Fonts and text:
+<dd>
+<a href="../src/bfont.h">src/bfont.h</a>,
+<a href="../src/ccfont.h">src/ccfont.h</a>,
+<a href="../src/iccfont.c">src/iccfont.c</a>,
+<a href="../src/icfontab.c">src/icfontab.c</a>,
+<a href="../src/ichar.h">src/ichar.h</a>,
+<a href="../src/ichar1.h">src/ichar1.h</a>,
+<a href="../src/icharout.h">src/icharout.h</a>,
+<a href="../src/icid.h">src/icid.h</a>,
+<a href="../src/ifcid.h">src/ifcid.h</a>,
+<a href="../src/ifont.h">src/ifont.h</a>,
+<a href="../src/ifont1.h">src/ifont1.h</a>,
+<a href="../src/ifont2.h">src/ifont2.h</a>,
+<a href="../src/ifont42.h">src/ifont42.h</a>,
+<a href="../src/zbfont.c">src/zbfont.c</a>,
+<a href="../src/zcfont.c">src/zcfont.c</a>,
+<a href="../src/zchar.c">src/zchar.c</a>,
+<a href="../src/zchar1.c">src/zchar1.c</a>,
+<a href="../src/zchar2.c">src/zchar2.c</a>,
+<a href="../src/zchar32.c">src/zchar32.c</a>,
+<a href="../src/zchar42.c">src/zchar42.c</a>,
+<a href="../src/zcharout.c">src/zcharout.c</a>,
+<a href="../src/zcharx.c">src/zcharx.c</a>,
+<a href="../src/zcid.c">src/zcid.c</a>,
+<a href="../src/zfcid.c">src/zfcid.c</a>,
+<a href="../src/zfcid0.c">src/zfcid0.c</a>,
+<a href="../src/zfcid1.c">src/zfcid1.c</a>,
+<a href="../src/zfcmap.c">src/zfcmap.c</a>,
+<a href="../src/zfont.c">src/zfont.c</a>,
+<a href="../src/zfont0.c">src/zfont0.c</a>,
+<a href="../src/zfont1.c">src/zfont1.c</a>,
+<a href="../src/zfont2.c">src/zfont2.c</a>,
+<a href="../src/zfont32.c">src/zfont32.c</a>,
+<a href="../src/zfont42.c">src/zfont42.c</a>.
+
+<dt>
+Color, pattern, and halftone:
+<dd>
+<a href="../src/icie.h">src/icie.h</a>,
+<a href="../src/icolor.h">src/icolor.h</a>,
+<a href="../src/icremap.h">src/icremap.h</a>,
+<a href="../src/icsmap.h">src/icsmap.h</a>,
+<a href="../src/iht.h">src/iht.h</a>,
+<a href="../src/ipcolor.h">src/ipcolor.h</a>,
+<a href="../src/zcie.c">src/zcie.c</a>,
+<a href="../src/zcolor.c">src/zcolor.c</a>,
+<a href="../src/zcolor1.c">src/zcolor1.c</a>,
+<a href="../src/zcolor2.c">src/zcolor2.c</a>,
+<a href="../src/zcrd.c">src/zcrd.c</a>,
+<a href="../src/zcsdevn.c">src/zcsdevn.c</a>,
+<a href="../src/zcsindex.c">src/zcsindex.c</a>,
+<a href="../src/zcspixel.c">src/zcspixel.c</a>,
+<a href="../src/zcssepr.c">src/zcssepr.c</a>,
+<a href="../src/zicc.c">src/zicc.c</a>,
+<a href="../src/zhsb.c">src/zhsb.c</a>,
+<a href="../src/zht.c">src/zht.c</a>,
+<a href="../src/zht1.c">src/zht1.c</a>,
+<a href="../src/zht2.c">src/zht2.c</a>,
+<a href="../src/zpcolor.c">src/zpcolor.c</a>,
+<a href="../src/zshade.c">src/zshade.c</a>,
+<a href="../src/ztrans.c">src/ztrans.c</a>.
+
+<dt>
+Images:
+<dd>
+<a href="../src/iimage.h">src/iimage.h</a>,
+<a href="../src/iimage2.h">src/iimage2.h</a>,
+<a href="../src/zimage.c">src/zimage.c</a>,
+<a href="../src/zimage2.c">src/zimage2.c</a>,
+<a href="../src/zimage3.c">src/zimage3.c</a>.
+
+<dt>
+Other graphics:
+<dd>
+<a href="../src/igstate.h">src/igstate.h</a>,
+<a href="../src/zdpnext.c">src/zdpnext.c</a>,
+<a href="../src/zdps.c">src/zdps.c</a>,
+<a href="../src/zdps1.c">src/zdps1.c</a>,
+<a href="../src/zgstate.c">src/zgstate.c</a>,
+<a href="../src/zpaint.c">src/zpaint.c</a>,
+<a href="../src/zpath.c">src/zpath.c</a>,
+<a href="../src/zpath1.c">src/zpath1.c</a>,
+<a href="../src/zrop.c">src/zrop.c</a>,
+<a href="../src/ztrap.c">src/ztrap.c</a>,
+<a href="../src/zupath.c">src/zupath.c</a>.
+
+</dl>
+
+<dt>
+Operator support:
+<dd>
+<a href="../src/oparc.h">src/oparc.h</a>,
+<a href="../src/opcheck.h">src/opcheck.h</a>,
+<a href="../src/opdef.h">src/opdef.h</a>,
+<a href="../src/oper.h">src/oper.h</a>,
+<a href="../src/opextern.h">src/opextern.h</a>.
+
+</dl>
+
+<h4><a name="Non_standard_operators"></a>Non-standard operators</h4>
+
+<p>
+The interpreter includes many non-standard operators. Most of these provide
+some part of the function of a standard operator, so that the standard
+operator itself can be implemented in PostScript: these are not of interest
+to users, and their function is usually obvious from the way they are used.
+However, some non-standard operators provide access to additional,
+non-standard facilities that users might want to know about, such as
+transparency, RasterOp, and in-memory rendering. These are documented at <a
+href="Language.htm#Additional_operators">Language.htm#Additional_operators</a>.
+
+<p>
+We don't document the complete set of non-standard operators here, because
+the set changes frequently. However, all non-standard operators are
+supposed to have names that begin with '.', so you can find them all by
+executing the following (Unix) command:
+
+<blockquote><pre>
+grep '{".[.]' src/[zi]*.c
+</pre></blockquote>
+
+<p>
+In addition to individual non-standard operators implemented in the same
+files as standard ones, there are several independent optional packages of
+non-standard operators. As with other non-standard operators, the names of
+all the operators in these packages begin with '.'. We list those packages
+here.
+
+<dl>
+
+<dt>
+<a href="../src/zdosio.c">src/zdosio.c</a>
+<dd>
+Provides access to PC hardware I/O through MS-DOS system calls. Probably no
+longer useful.
+
+<dt>
+<a href="../src/zdouble.c">src/zdouble.c</a>
+<dd>
+Provides "double" floating point arithmetic, using 8-byte strings to hold
+values. Developed under a contract; probably used only by the group that
+funded the development.
+
+<dt>
+<a href="../src/zsysvm.c">src/zsysvm.c</a>
+<dd>
+Provides operators for allocating objects in specific VM spaces,
+disregarding the current VM mode.
+
+<dt>
+<a href="../src/zccube.c">src/zccube.c</a>
+<dd>
+Provides an operator for building a color cube from an arbitrary tint
+transform, so that tint transforms can be applied from inside the
+graphics library without calling back to the PostScript interpreter.
+
+</dl>
+
+<h4><a name="Interpreter_support"></a>Interpreter support</h4>
+
+<p>
+Memory management (refs, GC, save/restore) -- see <a
+href="#PostScript_interpreter_extensions">below</a>.
+
+<dl>
+
+<dt>
+Miscellaneous support:
+<dd>
+<a href="../src/errors.h">src/errors.h</a>,
+<a href="../src/ghost.h">src/ghost.h</a>,
+<a href="../src/iconf.c">src/iconf.c</a>,
+<a href="../src/iconf.h">src/iconf.h</a>,
+<a href="../src/idparam.c">src/idparam.c</a>,
+<a href="../src/idparam.h">src/idparam.h</a>,
+<a href="../src/ilevel.h">src/ilevel.h</a>,
+<a href="../src/inouparm.c">src/inouparm.c</a>,
+<a href="../src/iparam.c">src/iparam.c</a>,
+<a href="../src/iparam.h">src/iparam.h</a>,
+<a href="../src/iparray.h">src/iparray.h</a>,
+<a href="../src/iutil.c">src/iutil.c</a>,
+<a href="../src/iutil.h">src/iutil.h</a>,
+<a href="../src/iutil2.c">src/iutil2.c</a>,
+<a href="../src/iutil2.h">src/iutil2.h</a>,
+<a href="../src/iutilasm.asm">src/iutilasm.asm</a>.
+
+</dl>
+
+<h4><a name="PostScript_code"></a>PostScript code</h4>
+
+<dl>
+
+<dt>
+Initialization and language support:
+<dd>
+
+<dl>
+
+<dt>
+All configurations:
+<dd>
+<a href="../lib/gs_init.ps">lib/gs_init.ps</a>,
+<a href="../lib/gs_statd.ps">lib/gs_statd.ps</a>.
+
+<dt>
+Level 2:
+<dd>
+<a href="../lib/gs_btokn.ps">lib/gs_btokn.ps</a>,
+<a href="../lib/gs_dps1.ps">lib/gs_dps1.ps</a>,
+<a href="../lib/gs_dps2.ps">lib/gs_dps2.ps</a>,
+<a href="../lib/gs_lev2.ps">lib/gs_lev2.ps</a>,
+<a href="../lib/gs_res.ps">lib/gs_res.ps</a>,
+<a href="../lib/gs_setpd.ps">lib/gs_setpd.ps</a>.
+
+<dt>
+LanguageLevel 3:
+<dd>
+<a href="../lib/gs_frsd.ps">lib/gs_frsd.ps</a>,
+<a href="../lib/gs_ll3.ps">lib/gs_ll3.ps</a>,
+<a href="../lib/gs_trap.ps">lib/gs_trap.ps</a>.
+
+<dt>
+Display PostScript:
+<dd>
+<a href="../lib/gs_dpnxt.ps">lib/gs_dpnxt.ps</a>,
+<a href="../lib/gs_dps.ps">lib/gs_dps.ps</a>.
+
+<dt>
+ICC color profiles:
+<dd>
+<a href="../lib/gs_icc.ps">lib/gs_icc.ps</a>.
+
+</dl>
+
+<dt>
+Font loading and support:
+<dd>
+
+<dl>
+
+<dt>
+Font name mapping:
+<dd>
+<a href="../lib/Fontmap">lib/Fontmap</a>,
+<a href="../lib/Fontmap.ATB">lib/Fontmap.ATB</a>,
+<a href="../lib/Fontmap.ATM">lib/Fontmap.ATM</a>,
+<a href="../lib/Fontmap.GS">lib/Fontmap.GS</a>,
+<a href="../lib/Fontmap.OS2">lib/Fontmap.OS2</a>,
+<a href="../lib/Fontmap.OSF">lib/Fontmap.OSF</a>,
+<a href="../lib/Fontmap.SGI">lib/Fontmap.SGI</a>,
+<a href="../lib/Fontmap.Sol">lib/Fontmap.Sol</a>,
+<a href="../lib/Fontmap.Ult">lib/Fontmap.Ult</a>,
+<a href="../lib/Fontmap.VMS">lib/Fontmap.VMS</a>.
+
+<dt>
+CIDFont name mapping:
+<dd>
+<a href="../lib/CIDFnmap">lib/CIDFnmap</a>,
+<a href="../lib/CIDFnmap.ARP">lib/CIDFnmap.ARP</a>,
+<a href="../lib/CIDFnmap.Bae">lib/CIDFnmap.Bae</a>,
+<a href="../lib/CIDFnmap.CJK">lib/CIDFnmap.CJK</a>,
+<a href="../lib/CIDFnmap.Koc">lib/CIDFnmap.Koc</a>,
+<a href="../lib/CIDFnmap.Ore">lib/CIDFnmap.Ore</a>,
+<a href="../lib/CIDFnmap.Sol">lib/CIDFnmap.Sol</a>,
+<a href="../lib/CIDFnmap.Win">lib/CIDFnmap.Win</a>,
+<a href="../lib/CIDFnmap.b5">lib/CIDFnmap.b5</a>,
+<a href="../lib/CIDFnmap.gb">lib/CIDFnmap.gb</a>,
+<a href="../lib/CIDFnmap.ksx">lib/CIDFnmap.ksx</a>,
+<a href="../lib/CIDFnmap.sj">lib/CIDFnmap.sj</a>.
+
+<dt>
+Generic:
+<dd>
+<a href="../lib/gs_ccfnt.ps">lib/gs_ccfnt.ps</a>,
+<a href="../lib/gs_fonts.ps">lib/gs_fonts.ps</a>.
+
+<dt>
+Type 1 and CFF:
+<dd>
+<a href="../lib/gs_cff.ps">lib/gs_cff.ps</a>,
+<a href="../lib/gs_diskf.ps">lib/gs_diskf.ps</a>,
+<a href="../lib/gs_type1.ps">lib/gs_type1.ps</a>.
+
+<dt>
+TrueType:
+<dd>
+<a href="../lib/gs_ttf.ps">lib/gs_ttf.ps</a>,
+<a href="../lib/gs_typ42.ps">lib/gs_typ42.ps</a>.
+
+<dt>
+CID-keyed:
+<dd>
+<a href="../lib/gs_cidcm.ps">lib/gs_cidcm.ps</a>,
+<a href="../lib/gs_cidfn.ps">lib/gs_cidfn.ps</a>,
+<a href="../lib/gs_cmap.ps">lib/gs_cmap.ps</a>.
+
+<dt>
+Other:
+<dd>
+<a href="../lib/gs_kanji.ps">lib/gs_kanji.ps</a>,
+<a href="../lib/gs_pfile.ps">lib/gs_pfile.ps</a>,
+<a href="../lib/gs_typ32.ps">lib/gs_typ32.ps</a>.
+
+</dl>
+
+<dt>
+Encodings:
+<dd>
+
+<dl>
+
+<dt>
+Adobe-specified:
+<dd>
+<a href="../lib/gs_ce_e.ps">lib/gs_ce_e.ps</a>,
+<a href="../lib/gs_dbt_e.ps">lib/gs_dbt_e.ps</a>,
+<a href="../lib/gs_il1_e.ps">lib/gs_il1_e.ps</a>,
+<a href="../lib/gs_mex_e.ps">lib/gs_mex_e.ps</a>,
+<a href="../lib/gs_mro_e.ps">lib/gs_mro_e.ps</a>,
+<a href="../lib/gs_pdf_e.ps">lib/gs_pdf_e.ps</a>,
+<a href="../lib/gs_std_e.ps">lib/gs_std_e.ps</a>,
+<a href="../lib/gs_sym_e.ps">lib/gs_sym_e.ps</a>,
+<a href="../lib/gs_wan_e.ps">lib/gs_wan_e.ps</a>.
+
+<dt>
+Additional:
+<dd>
+<a href="../lib/gs_il2_e.ps">lib/gs_il2_e.ps</a>,
+<a href="../lib/gs_ksb_e.ps">lib/gs_ksb_e.ps</a>,
+<a href="../lib/gs_wl1_e.ps">lib/gs_wl1_e.ps</a>,
+<a href="../lib/gs_wl2_e.ps">lib/gs_wl2_e.ps</a>,
+<a href="../lib/gs_wl5_e.ps">lib/gs_wl5_e.ps</a>.
+
+<dt>
+Pseudo-encodings for internal use:
+<dd>
+<a href="../lib/gs_css_e.ps">lib/gs_css_e.ps</a>,
+<a href="../lib/gs_lgo_e.ps">lib/gs_lgo_e.ps</a>,
+<a href="../lib/gs_lgx_e.ps">lib/gs_lgx_e.ps</a>,
+<a href="../lib/gs_mgl_e.ps">lib/gs_mgl_e.ps</a>.
+
+</dl>
+
+<dt>
+Miscellaneous:
+<dd>
+
+<dl>
+
+<dt>
+Other support:
+<dd>
+<a href="../lib/gs_agl.ps">lib/gs_agl.ps</a>,
+<a href="../lib/gs_dscp.ps">lib/gs_dscp.ps</a>,
+<a href="../lib/gs_epsf.ps">lib/gs_epsf.ps</a>,
+<a href="../lib/gs_pdfwr.ps">lib/gs_pdfwr.ps</a>,
+<a href="../lib/gs_rdlin.ps">lib/gs_rdlin.ps</a>.
+
+<dt>
+X Windows icon bitmaps:
+<dd>
+<a href="../lib/gs_l.xbm">lib/gs_l.xbm</a>,
+<a href="../lib/gs_l.xpm">lib/gs_l.xpm</a>,
+<a href="../lib/gs_l_m.xbm">lib/gs_l_m.xbm</a>,
+<a href="../lib/gs_m.xbm">lib/gs_m.xbm</a>,
+<a href="../lib/gs_m.xpm">lib/gs_m.xpm</a>,
+<a href="../lib/gs_m_m.xbm">lib/gs_m_m.xbm</a>,
+<a href="../lib/gs_s.xbm">lib/gs_s.xbm</a>,
+<a href="../lib/gs_s.xpm">lib/gs_s.xpm</a>,
+<a href="../lib/gs_s_m.xbm">lib/gs_s_m.xbm</a>,
+<a href="../lib/gs_t.xbm">lib/gs_t.xbm</a>,
+<a href="../lib/gs_t.xpm">lib/gs_t.xpm</a>,
+<a href="../lib/gs_t_m.xbm">lib/gs_t_m.xbm</a>.
+
+<dt>
+Not currently used:
+<dd>
+<a href="../lib/gs_cmdl.ps">lib/gs_cmdl.ps</a>,
+<a href="../lib/gs_fform.ps">lib/gs_fform.ps</a>,
+<a href="../lib/gs_l2img.ps">lib/gs_l2img.ps</a>.
+
+</dl>
+
+</dl>
+
+<h3><a name="PDF_interpreter"></a>PDF interpreter</h3>
+
+<p>
+Ghostscript's PDF interpreter is written entirely in PostScript, because its
+data structures are the same as PostScript's, and it is much more convenient
+to manipulate PostScript-like data structures in PostScript than in C.
+There is definitely a performance cost, but apparently not a substantial
+one: we considered moving the main interpreter loop (read a token using
+slightly different syntax than PostScript, push it on the stack if literal,
+look it up in a special dictionary for execution if not) into C, but we did
+some profiling and discovered that this wasn't accounting for enough of the
+time to be worthwhile.
+
+<p>
+Until recently, there was essentially no C code specifically for the purpose
+of supporting PDF interpretation. The one major exception is the PDF 1.4
+transparency features, which we (but not Adobe) have made available to
+PostScript code.
+
+<p>
+In addition to patching the <b><tt>run</tt></b> operator to detect PDF
+files, the interpreter provides some procedures in <a
+href="../lib/pdf_main.ps">lib/pdf_main.ps</a> that are meant to be called
+from applications such as previewers.
+
+<dl>
+
+<dt>
+Files:
+<dd>
+<a href="../lib/pdf_base.ps">lib/pdf_base.ps</a>,
+<a href="../lib/pdf_draw.ps">lib/pdf_draw.ps</a>,
+<a href="../lib/pdf_font.ps">lib/pdf_font.ps</a>,
+<a href="../lib/pdf_main.ps">lib/pdf_main.ps</a>,
+<a href="../lib/pdf_ops.ps">lib/pdf_ops.ps</a>,
+<a href="../lib/pdf_sec.ps">lib/pdf_sec.ps</a>.
+
+</dl>
+
+<h3><a name="Build_process"></a>Build process</h3>
+
+<h4><a name="Makefile_structure"></a>Makefile structure</h4>
+
+<p>
+Ghostscript's makefiles embody a number of design decisions and assumptions
+that may not be obvious from a casual reading of the code.
+
+<ul>
+
+<li>All files are stored in subdirectories. The names of all subdirectories
+used in the build process are defined in the top-level makefiles for the
+various platforms: there are no "hard wired" directory names in any makefile
+rule. Subdirectory names in the makefiles are relative to the directory
+that is current at build time: normally this directory is the parent of the
+various subdirectories, and holds only a <b><tt>makefile</tt></b>, which in
+turn simply references the real top-level makefile in the source
+subdirectory.
+
+<li>All compiler and linker switches are likewise defined by macros, again
+preferably in the top-level platform makefile.
+
+<li>There is an absolute distinction between "source-like" subdirectories,
+which are read-only during the build process, and "object-like"
+subdirectories, all of whose contents are generated by the build process and
+which can be emptied (<b><tt>rm&nbsp;*</tt></b>) at any time with no bad
+effects. The source subdirectories are defined by macros named
+<b><tt>xxxSRCDIR</tt></b>.
+
+<li>Object subdirectories may distinguish further between those that hold
+the results of the build process that are needed at run time (i.e., that
+should be included in a run-time distribution), defined by
+<b><tt>BINDIR</tt></b>, and those that are not needed at run time, defined
+by <b><tt>xxxGENDIR</tt></b> and <b><tt>xxxOBJDIR</tt></b>. (The
+distinction between these is historical and probably no longer relevant.)
+
+<li>There may be multiple object subdirectories for different build
+configurations. On Unix, the <b><tt>obj</tt></b> and <b><tt>bin</tt></b>
+directories are used for normal production builds, the
+<b><tt>debugobj</tt></b> directory for debugging builds, and the
+<b><tt>pgobj</tt></b> directory for profiling builds; other platforms may
+use different conventions. The Unix makefiles support targets named
+<b><tt>debug</tt></b> and <b><tt>pg</tt></b> for debugging and profiling
+builds respectively; other platforms generally do not.
+
+<li>Makefiles will be maintained by hand. This requires editing the
+following makefile elements whenever the relevant source files changes:
+
+<ul>
+
+<li>Every header (.h) file must have a corresponding macro definition in a
+makefile. If <b><tt>abc.h</tt></b> #includes <b><tt>def.h</tt></b> and
+<b><tt>xyz.h</tt></b>, the definition must have the form
+
+<blockquote><pre>
+xyz_h=$(xxxSRCD)xyz.h $(def_h) $(xyz_h)
+</pre></blockquote>
+
+where <b><tt>xxxSRCD</tt></b> is the macro defining the relevant source
+directory (including a trailing '/'). Note that the '.' in the file name
+has been replaced by an underscore. Note also that the definition must
+follow all definitions it references, since some <b><tt>make</tt></b>
+programs expand macros in definitions at the time of definition rather than
+at the time of use.
+
+<li>Every .c file must have a corresponding rule in a makefile. If
+<b><tt>abc.c</tt></b> #includes <b><tt>def.h</tt></b> and
+<b><tt>lmn.h</tt></b>, the rule must have approximately the form
+
+<blockquote><pre>
+$(xxxOBJD)abc.$(OBJ) : $(xxxSRCD)abc.c $(def_h) $(lmn_h)
+ $(xxCC) $(xxO_)abc.$(OBJ) $(C_) $(xxxSRCD)abc.c
+</pre></blockquote>
+
+where <b><tt>xxxSRCD</tt></b> is as before; <b><tt>xxxOBJD</tt></b> is the
+relevant object directory; <b><tt>xxCC</tt></b> defines the name of the C
+compiler plus the relevant compilation switches; and <b><tt>xxO_</tt></b>
+and <b><tt>C_</tt></b> are macros used to bridge syntactic differences
+between different <b><tt>make</tt></b> programs.
+
+</ul>
+
+</ul>
+
+<p>
+The requirement to keep makefiles up to date by hand has been controversial.
+Two alternatives are generally proposed.
+
+<ul>
+
+<li>Programs like <b><tt>makedeps</tt></b>, which generate build rules
+automatically from the #include lists in C files. We have found such
+programs useless: they "wire in" specific, concrete directory names, not
+only for our own code but even for the system header files; they have to be
+run manually whenever code files are added, renamed, or deleted, or whenever
+the list of #includes in any file changes; and they cannot deal with
+different source files requiring different compilation switches.
+
+<li>MSVC-style "project" files. These are equally useless: they are not
+portable across different vendors' tools -- in fact, there may not even be a
+usable import/export facility to convert their data to or from text form --
+and they cannot combine configuration-independent data with
+configuration-specific data.
+
+</ul>
+
+<p>
+We have seriously considered writing our own build program in Tcl or Python
+that would eliminate these problems, or perhaps porting the tools developed
+by Digital's Vesta research project (if we can get access to them); however,
+either of these approaches would create potential portability problems of
+its own, not to mention difficulties in integrating with others' build
+systems.
+
+<p>
+In the meantime, to ease the pain for mortal users and developers on
+Unix platforms, we have adopted the standard autoconf tool to
+systematically generate an appropriate top-level makefile for the
+target system. As currently implemented, its use makes no deep changes
+to the Ghostscript build system, but rather generates a makefile, more
+or less the same as would be achieved by starting from a
+platform-specific toplevel makefile and hand-editing. The relevant
+autoconf sources are in <a
+href="../src/Makefile.in">src/Makefile.in</a>, and <a
+href="../src/configure.ac">configure.ac</a>. These sources are used in
+the release process to create a <a href="../configure">configure</a>
+script in the toplevel directory of releases. Also, there is an <a
+href="../autogen.sh">autogen.sh</a> script to automate the autoconf
+process somewhat. The names and locations of these files were chosen
+to be clear to those familiar with autoconf, even though they represent
+a slight departure from Ghostscript tradition.
+
+<p>
+For more information about makefiles:
+
+<ul>
+
+<li>For a detailed list of makefiles, and a discussion of makefile issues
+related to portability, see the <a href="#Makefiles">Makefiles</a> section
+below.
+
+<li>For more detailed information about editing configuration information in
+makefiles, see <a
+href="Make.htm#Makefile_overview">doc/Make.htm#Makefile_overview</a>.
+
+<li>For a complete example of adding a new driver to a makefile, see <a
+href="Drivers.htm#Adding_drivers">doc/Drivers.htm#Adding_drivers</a>.
+
+<li>For a few more notes on makefile coding conventions, see <a
+href="C-style.htm#Makefiles">doc/C-style.htm#Makefiles</a>.
+
+</ul>
+
+<h4><a name="dev_files"></a>.dev files</h4>
+
+<p>
+On top of the general conventions just described, Ghostscript's makefiles
+add a further layer of structure in order to support an open-ended set of
+fine-grained, flexible configuration options. Selecting an option (usually
+called a "module") for inclusion in the build may affect the build in many
+ways:
+
+<ul>
+
+<li>Almost always, it requires linking in some compiled code files.
+
+<li>It may require running some additional initialization procedures at
+startup.
+
+<li>It may require reading in some additional PostScript files at startup.
+For example, a Level 2 PostScript build requires support for PostScript
+resources and for setpagedevice, which are implemented in PostScript code.
+
+<li>It may require adding entries to a variety of internal tables that
+catalogue such things as drivers, IODevices, Function types, etc.
+
+<li>It may require that other particular modules be included. For example,
+the "PostScript Level 2" module requires the modules for various filters,
+color spaces, etc.
+
+<li>It may require <em>removing</em> some other (default) module from the
+build. For example, the core (Level 1) PostScript build has a "stub" for
+binary tokens, which are a Level 2 feature but are referenced by the core
+scanner: a Level 2 build must remove the stub. For more information about
+this, look for the string <b><tt>-replace</tt></b> in the makefiles and in
+<a href="../src/genconf.c">src/genconf.c</a>.
+
+</ul>
+
+<p>
+Each module is defined in the makefiles by rules that create a file named
+<b><em>xxx</em><tt>.dev</tt></b>. The dependencies of the rule include all
+the files that make up the module (compiled code files, PostScript files,
+etc.); the body of the rule creates the .dev file by writing the description
+of the module into it. A program called <b><tt>genconf</tt></b>, described
+in the next section, merges all the relevant .dev files together. For
+examples of .dev rules, see any of the Ghostscript makefiles.
+
+<p>
+Ultimately, a person must specify the root set of modules to include in a
+build (which of course may require other modules, recursively).
+Ghostscript's makefiles do this with a set of macros called
+<b><tt>FEATURE_DEVS</tt></b> and <b><tt>DEVICE_DEVS</tt>n</b>, defined in
+each top-level makefile, but nothing in the module machinery depends on
+this.
+
+<h4><a name="Generators"></a>Generators</h4>
+
+<p>
+Ghostscript's build procedure is somewhat unusual in that it compiles and
+then executes some support programs during the build process. These
+programs then generate data or source code that is used later on in the
+build.
+
+<p>
+The most important and complex of the generator programs is
+<b><tt>genconf</tt></b>. <b><tt>genconf</tt></b> merges all the .dev files
+that make up the build, and creates three or more output files used in later
+stages:
+
+<ul>
+
+<li><b><tt>gconfig.h</tt></b>, consisting mainly of macro calls, one call
+per "resource" making up the build, other than "resources" listed in the
+other output files.
+
+<li><b><tt>gconfigf.h</tt></b>, produced only for PostScript builds with
+compiled-in fonts, consisting of one macro call per font.
+
+<li>A linker control file whose name varies from one platform to another,
+containing the list of compiled code files to be linked.
+
+<li>If necessary, another linker control file, also varying between
+platforms, that contains other information for the linker such as the list
+of system libraries to be searched. (On Unix platforms, the two linker
+control functions are combined in a single file.)
+
+</ul>
+
+<dl>
+
+<dt>
+Source generators:
+<dd>
+
+<dl>
+
+<dt>
+<a href="../src/genarch.c">src/genarch.c</a>
+<dd>
+Creates a header file containing a variety of information about the hardware
+and compiler that isn't provided in any standard system header file. Always
+used.
+
+<dt>
+<a href="../src/genconf.c">src/genconf.c</a> (also generates non-source)
+<dd>
+Constructs header files and linker control files from the collection of
+options and modules that make up the build. See above. Always used.
+
+<dt>
+<a href="../src/genht.c">src/genht.c</a>
+<dd>
+Converts a PostScript halftone (in a particular constrained format) to a C
+data structure that can be compiled into an executable. Only used if any
+such halftones are included in the build.
+
+<dt>
+<a href="../src/geninit.c">src/geninit.c</a>
+<dd>
+Converts PostScript initialization files to C data structures that can be
+compiled into an executable. Only used when building a PostScript
+interpreter, and only if <b><tt>COMPILE_INITS</tt></b> was set to 1 in the
+makefile.
+
+</dl>
+
+<dt>
+Other generators:
+<dd>
+
+<dl>
+
+<dt>
+<a href="../src/echogs.c">src/echogs.c</a>
+<dd>
+Implements a variety of shell-like functions to get around quirks,
+limitations, and omissions in the shells on various platforms. Always used.
+
+<dt>
+<a href="../src/genconf.c">src/genconf.c</a> (also generates source)
+<dd>
+See above.
+
+<dt>
+<a href="../src/gendev.c">src/gendev.c</a> (not used)
+<dd>
+Was intended as a replacement for <b><tt>genconf</tt></b>, but was never
+completed.
+
+</dl>
+
+</dl>
+
+<h4><a name="Build_support"></a>Support</h4>
+
+<p>
+There are a number of programs, scripts, and configuration files that exist
+only for the sake of the build process.
+
+<dl>
+
+<dt>
+Files for PC environments:
+<dd>
+<a href="../src/gswin.icx">src/gswin.icx</a>,
+<a href="../src/gswin16.icx">src/gswin16.icx</a>,
+<a href="../src/bcc32.cfg">src/bcc32.cfg</a>,
+<a href="../src/cp.bat">src/cp.bat</a>,
+<a href="../src/cp.cmd">src/cp.cmd</a>,
+<a href="../src/dw32c.def">src/dw32c.def</a>,
+<a href="../src/dwmain.rc">src/dwmain.rc</a>,
+<a href="../src/dwmain16.def">src/dwmain16.def</a>,
+<a href="../src/dwmain32.def">src/dwmain32.def</a>,
+<a href="../src/dwsetup.def">src/dwsetup.def</a>,
+<a href="../src/dwsetup.rc">src/dwsetup.rc</a>,
+<a href="../src/dwuninst.def">src/dwuninst.def</a>,
+<a href="../src/dwuninst.rc">src/dwuninst.rc</a>,
+<a href="../src/gs16spl.def">src/gs16spl.def</a>,
+<a href="../src/gs16spl.rc">src/gs16spl.rc</a>,
+<a href="../src/gsdll2.def">src/gsdll2.def</a>,
+<a href="../src/gsdll2.rc">src/gsdll2.rc</a>,
+<a href="../src/gsdll32.def">src/gsdll32.def</a>,
+<a href="../src/gsdll32.rc">src/gsdll32.rc</a>,
+<a href="../src/gsdll32w.lnk">src/gsdll32w.lnk</a>,
+<a href="../src/gsos2.def">src/gsos2.def</a>,
+<a href="../src/gsos2.icx">src/gsos2.icx</a>,
+<a href="../src/gsos2.rc">src/gsos2.rc</a>,
+<a href="../src/gspmdrv.def">src/gspmdrv.def</a>,
+<a href="../src/gspmdrv.icx">src/gspmdrv.icx</a>,
+<a href="../src/gspmdrv.rc">src/gspmdrv.rc</a>,
+<a href="../src/gswin.rc">src/gswin.rc</a>,
+<a href="../src/gswin32.rc">src/gswin32.rc</a>,
+<a href="../src/gswin386.rc">src/gswin386.rc</a>,
+<a href="../src/mv.bat">src/mv.bat</a>,
+<a href="../src/mv.cmd">src/mv.cmd</a>,
+<a href="../src/rm.bat">src/rm.bat</a>,
+<a href="../src/rm.cmd">src/rm.cmd</a>,
+<a href="../src/turboc.cfg">src/turboc.cfg</a>.
+
+<dt>
+Files for MacOS:
+<dd>
+<a href="../lib/Info-macos.plist">lib/Info-macos.plist</a>.
+
+<dt>
+Files for OpenVMS:
+<dd>
+<a href="../src/append_l.com">src/append_l.com</a>,
+<a href="../src/copy_one.com">src/copy_one.com</a>,
+<a href="../src/rm_all.com">src/rm_all.com</a>,
+<a href="../src/rm_one.com">src/rm_one.com</a>.
+
+<dt>
+Other files:
+<dd>
+<a href="../src/bench.c">src/bench.c</a>,
+<a href="../src/catmake">src/catmake</a>,
+<a href="../src/ccgs">src/ccgs</a>,
+<a href="../src/instcopy">src/instcopy</a>.
+
+</dl>
+
+<h3><a name="Utilities"></a>Utilities</h3>
+
+<p>
+Ghostscript comes with many utilities for doing things like viewing bitmap
+files and converting between file formats. Some of these are written in
+PostScript, some as scripts, and some as scripts that invoke special
+PostScript code.
+
+<h4><a name="Utilities_in_PostScript"></a>Utilities in PostScript</h4>
+
+<p>
+These are all documented in <a href="Psfiles.htm">doc/Psfiles.htm</a>, q.v.
+
+<h4><a name="Utility_scripts"></a>Utility scripts</h4>
+
+<p>
+Many of these scripts come in both Unix and MS-DOS (<b><tt>.bat</tt></b>
+versions; some also have an OS/2 (<b><tt>.cmd</tt></b>) version. The choice
+of which versions are provided is historical and irregular. These scripts
+should all be documented somewhere, but currently, many of them have man
+pages, a few have their own documentation in the doc directory, and some
+aren't documented at all.
+
+<dl>
+
+<dt>
+Script files without PC versions:
+<dd>
+<a href="../lib/afmdiff.awk">lib/afmdiff.awk</a>,
+<a href="../lib/dvipdf">lib/dvipdf</a>,
+<a href="../lib/fixmswrd.pl">lib/fixmswrd.pl</a>,
+<a href="../lib/lprsetup.sh">lib/lprsetup.sh</a>,
+<a href="../lib/pfbtopfa">lib/pfbtopfa</a>,
+<a href="../lib/pj-gs.sh">lib/pj-gs.sh</a>,
+<a href="../lib/pphs">lib/pphs</a>,
+<a href="../lib/printafm">lib/printafm</a>,
+<a href="../lib/pv.sh">lib/pv.sh</a>,
+<a href="../lib/sysvlp.sh">lib/sysvlp.sh</a>,
+<a href="../lib/unix-lpr.sh">lib/unix-lpr.sh</a>,
+<a href="../lib/wftopfa">lib/wftopfa</a>.
+
+<dt>
+Script files with PC versions:
+<dd>
+<a href="../lib/bdftops">lib/bdftops</a>,
+<a href="../lib/bdftops.bat">lib/bdftops.bat</a>,
+<a href="../lib/bdftops.cmd">lib/bdftops.cmd</a>,
+<a href="../lib/eps2eps">lib/eps2eps</a>,
+<a href="../lib/eps2eps.bat">lib/eps2eps.bat</a>,
+<a href="../lib/eps2eps.cmd">lib/eps2eps.cmd</a>,
+<a href="../lib/font2c">lib/font2c</a>,
+<a href="../lib/font2c.bat">lib/font2c.bat</a>,
+<a href="../lib/font2c.cmd">lib/font2c.cmd</a>,
+<a href="../lib/gsbj">lib/gsbj</a>,
+<a href="../lib/gsbj.bat">lib/gsbj.bat</a>,
+<a href="../lib/gsdj">lib/gsdj</a>,
+<a href="../lib/gsdj.bat">lib/gsdj.bat</a>,
+<a href="../lib/gsdj500">lib/gsdj500</a>,
+<a href="../lib/gsdj500.bat">lib/gsdj500.bat</a>,
+<a href="../lib/gslj">lib/gslj</a>,
+<a href="../lib/gslj.bat">lib/gslj.bat</a>,
+<a href="../lib/gslp">lib/gslp</a>,
+<a href="../lib/gslp.bat">lib/gslp.bat</a>,
+<a href="../lib/gsnd">lib/gsnd</a>,
+<a href="../lib/gsnd.bat">lib/gsnd.bat</a>,
+<a href="../lib/pdf2dsc">lib/pdf2dsc</a>,
+<a href="../lib/pdf2dsc.bat">lib/pdf2dsc.bat</a>,
+<a href="../lib/pdf2ps">lib/pdf2ps</a>,
+<a href="../lib/pdf2ps.bat">lib/pdf2ps.bat</a>,
+<a href="../lib/pdf2ps.cmd">lib/pdf2ps.cmd</a>,
+<a href="../lib/pdfopt">lib/pdfopt</a>,
+<a href="../lib/pdfopt.bat">lib/pdfopt.bat</a>,
+<a href="../lib/pf2afm">lib/pf2afm</a>,
+<a href="../lib/pf2afm.bat">lib/pf2afm.bat</a>,
+<a href="../lib/pf2afm.cmd">lib/pf2afm.cmd</a>,
+<a href="../lib/ps2ascii">lib/ps2ascii</a>,
+<a href="../lib/ps2ascii.bat">lib/ps2ascii.bat</a>,
+<a href="../lib/ps2ascii.cmd">lib/ps2ascii.cmd</a>,
+<a href="../lib/ps2epsi">lib/ps2epsi</a>,
+<a href="../lib/ps2epsi.bat">lib/ps2epsi.bat</a>,
+<a href="../lib/ps2epsi.cmd">lib/ps2epsi.cmd</a>,
+<a href="../lib/ps2pdf">lib/ps2pdf</a>,
+<a href="../lib/ps2pdf.bat">lib/ps2pdf.bat</a>,
+<a href="../lib/ps2pdf.cmd">lib/ps2pdf.cmd</a>,
+<a href="../lib/ps2pdf12">lib/ps2pdf12</a>,
+<a href="../lib/ps2pdf12.bat">lib/ps2pdf12.bat</a>,
+<a href="../lib/ps2pdf12.cmd">lib/ps2pdf12.cmd</a>,
+<a href="../lib/ps2pdf13">lib/ps2pdf13</a>,
+<a href="../lib/ps2pdf13.bat">lib/ps2pdf13.bat</a>,
+<a href="../lib/ps2pdf13.cmd">lib/ps2pdf13.cmd</a>,
+<a href="../lib/ps2pdf14">lib/ps2pdf14</a>,
+<a href="../lib/ps2pdf14.bat">lib/ps2pdf14.bat</a>,
+<a href="../lib/ps2pdf14.cmd">lib/ps2pdf14.cmd</a>,
+<a href="../lib/ps2pdfwr">lib/ps2pdfwr</a>,
+<a href="../lib/ps2pdfxx.bat">lib/ps2pdfxx.bat</a>,
+<a href="../lib/ps2ps">lib/ps2ps</a>,
+<a href="../lib/ps2ps.bat">lib/ps2ps.bat</a>,
+<a href="../lib/ps2ps.cmd">lib/ps2ps.cmd</a>.
+
+<dt>
+Script files with only PC versions:
+<dd>
+<a href="../lib/gsndt.bat">lib/gsndt.bat</a>,
+<a href="../lib/gssetgs.bat">lib/gssetgs.bat</a>,
+<a href="../lib/gst.bat">lib/gst.bat</a>,
+<a href="../lib/gstt.bat">lib/gstt.bat</a>,
+<a href="../lib/lp386.bat">lib/lp386.bat</a>,
+<a href="../lib/lp386r2.bat">lib/lp386r2.bat</a>,
+<a href="../lib/lpgs.bat">lib/lpgs.bat</a>,
+<a href="../lib/lpr2.bat">lib/lpr2.bat</a>,
+<a href="../lib/pftogsf.bat">lib/pftogsf.bat</a>,
+<a href="../lib/wmakebat.bat">lib/wmakebat.bat</a>.
+
+</dl>
+
+<hr>
+
+<h2><a name="Memory_management"></a>Memory management</h2>
+
+<h3><a name="Memory_manager_architecture"></a>Memory manager architecture</h3>
+
+<p>
+In many environments, the memory manager is a set of library facilities that
+implicitly manage the entire address space in a homogenous manner.
+Ghostscript's memory manager architecture has none of these properties:
+
+<ul>
+
+<li>Rather than a single library accessed as procedures, Ghostscript
+includes multiple allocator types, each of which in turn may have multiple
+instances (allocators). Allocators are 'objects' with a substantial set of
+virtual functions.
+
+<li>Rather than managing the entire address space, each allocator manages a
+storage pool, which it may or may not be able to expand or reduce by calling
+on a 'parent' allocator.
+
+<li>Rather than a single genus of untyped storage blocks, Ghostscript's
+allocators provide two genera -- type-tagged 'objects', and 'strings' --
+with substantially different properties.
+
+</ul>
+
+<h4><a name="Objects_vs_strings"></a>Objects vs strings</h4>
+
+<p>
+As noted above, allocators provide two different storage genera.
+
+<p>
+Objects:
+
+<ul>
+<li>Are aligned in storage to satisfy the most stringent alignment
+requirement imposed by the CPU or compiler;
+<li>Can be referenced only by pointers to their start, not to any internal
+location, unless special arrangements are made;
+<li>May contain pointers to other objects, or to strings;
+<li>Have an associated <em>structure descriptor</em> that specifies their
+size (usually) and the location of any pointers contained within them.
+</ul>
+
+<p>
+Given a pointer to an object, the allocator that allocated it must be able
+to return the object's size and the pointer to its structure descriptor.
+(It is up to the client to know what allocator allocated an object.)
+
+<p>
+Strings:
+
+<ul>
+<li>Are not aligned in storage;
+<li>Can be referenced by pointers (consisting of a starting address and a
+length) to any substring, starting anywhere within the string;
+<li>May not contain pointers;
+<li>Do not have a structure descriptor.
+</ul>
+
+<p>
+The object/string distinction reflects a space/capability tradeoff. The
+per-object space overhead of the standard type of allocator is typically 12
+bytes; this is too much to impose on every string of a few bytes. On the
+other hand, restricting object pointers to reference the start of the object
+currently makes object garbage collection and compaction more
+space-efficient. If we were to redesign the standard allocator, we would
+probably opt for a different design in which strings were allocated within
+container objects of a few hundred bytes, and pointers into the middle of
+all objects were allowed.
+
+<h4><a name="Structure_descriptors"></a>Structure descriptors</h4>
+
+<p>
+Every object allocated by a Ghostscript allocator has an associated
+structure descriptor, which the caller provides when allocating the object.
+The structure descriptor serves several purposes:
+
+<ul>
+<li>Specifying the size of the object for allocation;
+<li>Providing pointer-enumeration and pointer-relocation procedures for
+the garbage collector;
+<li>Providing an optional finalization procedure to be called when the
+object is freed (either explicitly or automatically).
+</ul>
+
+<p>
+Structure descriptors are read-only, and are normally defined statically
+using one of the large set of <b><tt>gs_private_st_</tt></b> or
+<b><tt>gs_public_st_</tt></b> macros in <a
+href="../src/gsstruct.h">src/gsstruct.h</a>.
+
+<p>
+While the structure descriptor normally specifies the size of the object,
+one can also allocate an array of bytes or objects, whose size is a multiple
+of the size in the descriptor. For this reason, every object stores its
+size as well as a reference to its descriptor.
+
+<p>
+Because the standard Ghostscript garbage collector is conservative and can
+move objects, every object allocated by a Ghostscript allocator must have an
+accurate structure descriptor. If you define a new type of object
+(structure) that will be allocated in storage managed by Ghostscript, you
+<em>must</em> create an accurate descriptor for it, and use that descriptor
+to allocate it. The process of creating accurate descriptors for all
+structures was long and painful, and accounted for many hard-to-diagnose
+bugs.
+
+<p>
+By convention, the structure descriptor for structure type
+<b><tt>xxx_t</tt></b> is named <b><tt>st_xxx</tt></b> (this is preferred),
+or occasionally <b><tt>st_xxx_t</tt></b>.
+
+<p>
+Note that a structure descriptor is only required for objects allocated by
+the Ghostscript allocator. A structure type <b><tt>xxx_t</tt></b> does not
+require a structure descriptor if instances of that type are used
+<em>only</em> in the following ways:
+
+<ul>
+
+<li>Instances are allocated only on the C stack, e.g., as
+<b><tt>xxx_t&nbsp;xxx1,&nbsp;xxx2;</tt></b>, or on the C heap, with
+<b><tt>malloc</tt></b> or through the Ghostscript "wrapper" defined in <a
+href="../src/gsmalloc.h">src/gsmalloc.h</a>.
+
+<li>Pointers to instances are not stored in places where the garbage
+collector will try to trace the pointer.
+
+<li>Code never attempts to get the structure type or size of an instance
+through the allocator API.
+
+</ul>
+
+<p>
+In general, structures without descriptors are problem-prone, and are
+deprecated; in new code, they should only be used if the structure is
+confined to a single .c file and its instances are only allocated on the C
+stack.
+
+<dl>
+<dt>
+Files:
+<dd>
+<a href="../src/gsstruct.h">src/gsstruct.h</a>,
+<a href="../src/gsstype.h">src/gsstype.h</a>.
+</dl>
+
+<h4><a name="Garbage_collection"></a>Garbage collection</h4>
+
+<p>
+The allocator architecture is designed to support compacting garbage
+collection. Every object must be able to enumerate all the pointers it
+contains, both for tracing and for relocation. As noted just above, the
+structure descriptor provides procedures that do this.
+
+<p>
+Whether or not a particular allocator type actually provides a garbage
+collector is up to the allocator: garbage collection is invoked through a
+virtual procedure. In practice, however, there are only two useful garbage
+collectors for Ghostscript's own allocator:
+
+<ul>
+<li>The "real" garbage collector associated with the PostScript interpreter,
+described <a href="#Interpreter_GC">below</a>;
+<li>A "non" garbage collector that only merges adjacent free blocks.
+</ul>
+
+<dl>
+<dt>
+Files:
+<dd>
+<a href="../src/gsgc.h">src/gsgc.h</a>,
+<a href="../src/gsnogc.c">src/gsnogc.c</a>,
+<a href="../src/gsnogc.h">src/gsnogc.h</a>.
+</dl>
+
+<h4><a name="Movability"></a>Movability</h4>
+
+<p>
+As just noted, objects are normally movable by the garbage collector.
+However, some objects must be immovable, usually because some other piece of
+software must retain pointers to them. The allocator API includes
+procedures for allocating both movable (default) and immovable objects.
+Note, however, that even immovable objects must be traceable (have a
+structure descriptor), and may be freed, by the garbage collector.
+
+<h4><a name="Parent_hierarchy"></a>Parent hierarchy</h4>
+
+<p>
+When an allocator needs to add memory to the pool that it manages, it
+requests the memory from its <em>parent</em> allocator. Every allocator has
+a pointer to its parent; multiple allocators may share a single parent. The
+ultimate ancestor of all allocators that can expand their pool dynamically
+is an allocator that calls <b><tt>malloc</tt></b>, described <a
+href="#malloc">below</a>. However, especially in embedded environments, an
+allocator may be limited to a fixed-size pool assigned to it when it is
+created.
+
+<h4><a name="Allocator_API"></a>Allocator API</h4>
+
+In summary, the allocator API provides the following principal operations:
+
+<ul>
+<li>Allocate and free movable (default) or immovable objects and strings.
+<li>Return the structure type and size of an object.
+<li>Resize (shrink or grow) movable objects and strings, preserving
+the contents insofar as possible.
+<li>Report the size of the managed pool, and how much of it is in use.
+<li>Register and unregister root pointers for the garbage collector.
+<li>Free the allocator itself.
+<li>Consolidate adjacent free blocks to reduce fragmentation.
+</ul>
+
+<p>
+For details, see <a href="../src/gsmemory.h">src/gsmemory.h</a>.
+
+<p>
+The allocator API also includes one special hook for the PostScript
+interpreter: the concept of stable allocators. See the section on <a
+href="#save_forgetsave_restore"><b><tt>save</tt></b> and
+<b><tt>restore</tt></b></a> below for details.
+
+<dl>
+<dt>
+Files:
+<dd>
+<a href="../src/gsmemraw.h">src/gsmemraw.h</a>,
+<a href="../src/gsmemory.c">src/gsmemory.c</a>,
+<a href="../src/gsmemory.h">src/gsmemory.h</a>,
+<a href="../src/gsstruct.h">src/gsstruct.h</a>,
+<a href="../src/gsstype.h">src/gsstype.h</a>.
+</dl>
+
+<h3><a name="Freeing_storage"></a>Freeing storage</h3>
+
+<p>
+Ghostscript's memory management architecture provides three different ways
+to free objects: explicitly, by reference counting, or by garbage
+collection. They provide different safety / performance / convenience
+tradeoffs; we believe that all three are necessary.
+
+<p>
+Objects are always freed as a whole; strings may be freed piecemeal.
+
+<p>
+An object may have an associated finalization procedure, defined in the
+structure descriptor. This procedure is called just before the object is
+freed, independent of which method is being used to free the object. A few
+types of objects have a virtual finalization procedure as well: the
+finalization procedure defined in the descriptor simply calls the one in the
+object.
+
+<h4><a name="Explicit_freeing"></a>Explicit freeing</h4>
+
+<p>
+Objects and strings may be freed explicitly, using the
+<b><tt>gs_free_</tt></b> virtual procedures in the allocator API. It is up
+to the client to ensure that all allocated objects are freed at most once,
+and that there are no dangling pointers.
+
+<p>
+Explicit freeing is the fastest method, but is the least convenient and
+least safe. It is most appropriate when storage is freed in the same
+procedure where it is allocated, or for storage that is known to be
+referenced by only one pointer.
+
+<h4><a name="Reference_counting"></a>Reference counting</h4>
+
+<p>
+Objects may be managed by reference counting. When an object is allocated,
+its reference count may be set to 0 or 1. Subsequently, when the reference
+count is decremented to 0, the object is freed.
+
+<p>
+The reference counting machinery provides its own virtual finalization
+procedure for all reference-counted objects. The machinery calls this
+procedure when it is about to free the object (but not when the object is
+freed in any other way, which is probably a design bug). This is in
+addition to (and called before) any finalization procedure associated with
+the object type.
+
+<p>
+Reference counting is as fast as explicit freeing, but takes more space in
+the object. It is most appropriate for relatively large objects which are
+referenced only from a small set of pointers. Note that reference counting
+cannot free objects that are involved in a pointer cycle (e.g., A -> B -> C
+-> A).
+
+<dl>
+<dt>
+Files:
+<dd>
+<a href="../src/gsrefct.h">src/gsrefct.h</a>.
+</dl>
+
+<h4><a name="Real_garbage_collection"></a>(Real) garbage collection</h4>
+
+<p>
+Objects and strings may be freed automatically by a garbage collector. See
+<a href="#Interpreter_GC">below</a>.
+
+<h3><a name="Special_implementations"></a>Special implementations</h3>
+
+<h4><a name="malloc"></a>malloc</h4>
+
+<p>
+As mentioned <a href="#Parent_hierarchy">above</a>, the ultimate ancestor of
+all allocators with an expandable pool is one that calls
+<b><tt>malloc</tt></b>.
+
+<dl>
+<dt>
+Files:
+<dd>
+<a href="../src/gsmalloc.h">src/gsmalloc.h</a>,
+<a href="../src/gsmalloc.c">src/gsmalloc.c</a>.
+</dl>
+
+<h4><a name="Locking"></a>Locking</h4>
+
+<p>
+In a multi-threaded environment, if an allocator must be callable from
+multiple threads (for example, if it is used to allocate structures in one
+thread that are passed to, and freed by, another thread), the allocator must
+provide mutex protection. Ghostscript provides this capability in the form
+of a <em>wrapper</em> allocator, that simply forwards all calls to a
+<em>target</em> allocator under protection of a mutex. Using the wrapper
+technique, any allocator can be made thread-safe.
+
+<dl>
+<dt>
+Files:
+<dd>
+<a href="../src/gsmemlok.h">src/gsmemlok.h</a>,
+<a href="../src/gsmemlok.c">src/gsmemlok.c</a>.
+</dl>
+
+<h4><a name="Retrying"></a>Retrying</h4>
+
+<p>
+In an embedded environment, job failure due to memory exhaustion is very
+undesirable. Ghostscript provides a wrapper allocator that, when an
+allocation attempt fails, calls a client-provided procedure that can attempt
+to free memory, then ask for the original allocation to be retried. For
+example, such a procedure can wait for a queue to empty, or can free memory
+occupied by caches.
+
+<dl>
+<dt>
+Files:
+<dd>
+<a href="../src/gsmemret.h">src/gsmemret.h</a>,
+<a href="../src/gsmemret.c">src/gsmemret.c</a>.
+</dl>
+
+<h3><a name="Standard_implementation"></a>Standard implementation</h3>
+
+<p>
+The standard Ghostscript allocator gets storage from its parent (normally
+the <b><tt>malloc</tt></b> allocator) in large blocks called
+<em>chunks</em>, and then allocates objects up from the low end and strings
+down from the high end. Large objects or strings are allocated in their own
+chunk.
+
+<p>
+The standard allocator maintains a set of free-block lists for small object
+sizes, one list per size (rounded up to the word size), plus a free-block
+list for large objects (but not for objects so large that they get their own
+chunk: when such an object is freed, its chunk is returned to the parent).
+The lists are not sorted; adjacent blocks are only merged if needed.
+
+<p>
+While the standard allocator implements the generic allocator API, and is
+usable with the library alone, it includes a special hook for the PostScript
+interpreter to aid in the efficient allocation of PostScript composite
+objects (arrays and dictionaries). See the section on <a
+href="#Refs">Refs</a> below for details.
+
+<dl>
+<dt>
+Files:
+<dd>
+<a href="../src/gsalloc.c">src/gsalloc.c</a>,
+<a href="../src/gsalloc.h">src/gsalloc.h</a>,
+<a href="../src/gxalloc.h">src/gxalloc.h</a>,
+<a href="../src/gxobj.h">src/gxobj.h</a>.
+</dl>
+
+<h3><a name="PostScript_interpreter_extensions"></a>PostScript interpreter extensions</h3>
+
+<p>
+The PostScript interpreter uses an allocator that extends the graphic
+library's standard allocator to handle PostScript objects,
+<b><tt>save</tt></b> and <b><tt>restore</tt></b>, and real garbage
+collection.
+
+<h4><a name="Refs"></a>Refs (PostScript "objects")</h4>
+
+<p>
+Ghostscript represents what the PLRM calls PostScript "objects" using a
+structure called a <b><tt>ref</tt></b>, defined in <a
+href="../src/iref.h">src/iref.h</a>; packed refs, used for the elements of
+packed arrays, are defined in <a href="../src/ipacked.h">src/ipacked.h</a>.
+See those files for detailed information.
+
+<dl>
+<dt>
+Files:
+<dd>
+<a href="../src/ipacked.h">src/ipacked.h</a>,
+<a href="../src/iref.h">src/iref.h</a>.
+</dl>
+
+<p>
+The PLRM calls for two types of "virtual memory" (VM) space: global and
+local. Ghostscript adds a third space, <em>system</em> VM, whose lifetime
+is an entire session -- i.e., it is effectively "permanent". All three
+spaces are subject to garbage collection. There is a separate allocator
+instance for each VM space (actually, two instances each for global and
+local spaces; see <a href="#save_forgetsave_restore">below</a>). In a
+system with multiple contexts and multiple global or local VMs, each global
+or local VM has its own allocator instance(s).
+
+<p>
+Refs that represent PostScript composite objects, and therefore include
+pointers to stored data, include a 2-bit VM space tag to indicate in which
+VM the object data are stored. In addition to system, global, and local VM,
+there is a tag for "foreign" VM, which means that the memory is not managed
+by a Ghostscript allocator at all. Every store into a composite object must
+check for <b><tt>invalidaccess</tt></b>: the VM space tag values are chosen
+to help make this check efficient. See <a
+href="../src/ivmspace.h">src/ivmspace.h</a>, <a
+href="../src/iref.h">src/iref.h</a>, and <a
+href="../src/store.h">src/store.h</a> for details.
+
+<dl>
+<dt>
+Files:
+<dd>
+<a href="../src/ivmspace.h">src/ivmspace.h</a>.
+</dl>
+
+<p>
+PostScript composite objects (arrays and dictionaries) are usually small.
+Using a separate memory manager object for each composite object would waste
+a lot of space for object headers. Therefore, the interpreter's memory
+manager packs multiple composite objects (also called "ref-containing
+objects") into a single memory manager object, similar to the way the memory
+manager packs multiple objects into a chunk (see <a
+href="#Standard_implementation">above</a>). See <a
+href="../src/gxalloc.h">src/gxalloc.h</a> for details. This memory manager
+object has a structure descriptor, like all other memory manager objects.
+
+<p>
+Note that the <b><tt>value.pdict</tt></b>, <b><tt>value.refs</tt></b>, or
+<b><tt>value.packed</tt></b> member of a ref must point to a PostScript
+composite object, and therefore can point into the middle of a memory
+manager object. This requires special handling by the garbage collector (<a
+href="#Interpreter_GC">q.v.</a>).
+
+<dl>
+<dt>
+Files:
+<dd>
+<a href="../src/ialloc.c">src/ialloc.c</a>,
+<a href="../src/ialloc.h">src/ialloc.h</a>,
+<a href="../src/iastate.h">src/iastate.h</a>,
+<a href="../src/iastruct.h">src/iastruct.h</a>,
+<a href="../src/ilocate.c">src/ilocate.c</a>,
+<a href="../src/imemory.h">src/imemory.h</a>,
+<a href="../src/istruct.h">src/istruct.h</a>.
+</dl>
+
+<h4><a name="save_forgetsave_restore"></a>save/.forgetsave/restore</h4>
+
+<p>
+In addition to <b><tt>save</tt></b> and <b><tt>restore</tt></b>, Ghostscript
+provides a <b><tt>.forgetsave</tt></b> operator that makes things as though
+a given <b><tt>save</tt></b> had never happened. (In data base terminology,
+<b><tt>save</tt></b> is "begin transaction", <b><tt>restore</tt></b> is
+"abort transaction", and <b><tt>.forgetsave</tt></b> is "end/commit
+transaction"). <b><tt>.forgetsave</tt></b> was implemented for a specific
+commercial customer (who may no longer even be using it): it was a pain to
+make work, but it's in the code now, and should be maintained. See the
+extensive comments in <a href="../src/isave.c">src/isave.c</a> for more
+information about how these operations work.
+
+<dl>
+<dt>
+Files:
+<dd>
+<a href="../src/idosave.h">src/idosave.h</a>,
+<a href="../src/isave.c">src/isave.c</a>,
+<a href="../src/isave.h">src/isave.h</a>,
+<a href="../src/isstate.h">src/isstate.h</a>,
+<a href="../src/store.h">src/store.h</a>.
+</dl>
+
+<h4><a name="Stable_allocators"></a>Stable allocators</h4>
+
+<p>
+Even though <b><tt>save</tt></b> and <b><tt>restore</tt></b> are concepts
+from the PostScript interpreter, the generic allocator architecture and API
+include a feature to support them, called <em>stable</em> allocators. Every
+allocator has an associated stable allocator, which tags pointers with the
+same VM space number but which is not subject to <b><tt>save</tt></b> and
+<b><tt>restore</tt></b>. System VM is intrinsically stable (its associated
+stable allocator is the same allocator), so there are only 5 allocators in
+ordinary single-context usage: system VM, stable global VM, ordinary global
+VM, stable local VM, ordinary local VM.
+
+<p>
+The reason that we cannot simply allocate all stable objects in system VM is
+that their refs must still be tagged with the correct VM space number, so
+that the check against storing pointers from global VM to local VM can be
+enforced properly.
+
+<p>
+All PostScript objects are normally allocated with the non-stable
+allocators. The stable allocators should be used with care, since using
+them can easily create dangling pointers: if storage allocated with a stable
+allocator contains any references to PostScript objects, the client is
+responsible for ensuring that the references don't outlive the referenced
+objects, normally by ensuring that any such referenced objects are allocated
+at the outermost <b><tt>save</tt></b> level. (The original reason for
+wanting stable allocators was the PostScript stacks, which are essentially
+PostScript arrays but are not subject to <b><tt>save</tt></b> and
+<b><tt>restore</tt></b>.) For more examples, search the sources for
+references to <b><tt>gs_memory_stable</tt></b>.
+
+<h4><a name="Interpreter_GC"></a>Garbage collection</h4>
+
+<p>
+The interpreter's garbage collector is a compacting, non-conservative,
+mark-and-sweep collector.
+
+<ul>
+<li>It compacts storage because that is the only way to avoid permanent
+sandbars, which is essential in limited-memory environments.
+<li>It is non-conservative because conservative collectors (which attempt
+to determine whether arbitrary bit patterns are pointers) cannot compact.
+<li>It uses mark-and-sweep, rather than a more modern copying approach,
+because it cannot afford the extra memory required for copying.
+</ul>
+
+<p>
+Roots for tracing must be registered with the allocator. Most roots are
+registered during initialization.
+
+<p>
+"Mark-and-sweep" is a bit of a misnomer. The garbage collector actually has
+5 main phases:
+
+<ul>
+<li>Sweep to clear marks;
+<li>Trace and mark;
+<li>Sweep to compute relocation;
+<li>Sweep to relocate pointers;
+<li>Sweep and compact.
+</ul>
+
+<p>
+There is some extra complexity to handle collecting local VM only. In this
+case, all pointers in global VM are treated as roots, and global VM is not
+compacted.
+
+<p>
+As noted above, PostScript arrays and strings can have refs that point
+within them (because of <b><tt>getinterval</tt></b>). Thus the garbage
+collector must mark each element of an array, and even each byte of a
+string, individually. Specifically, it marks objects, refs, and strings
+using 3 different mechanisms:
+
+<ul>
+
+<li>Objects have a mark bit in their header: see
+<a href="../src/gxobj.h">src/gxobj.h</a>,
+
+<li>Refs and packed refs have a reserved mark bit: see <a
+href="../src/iref.h">src/iref.h</a> and <a
+href="../src/ipacked.h">src/ipacked.h</a>.
+
+<li>Strings use a separate bit table, with one bit per string byte: see
+<a href="../src/gxalloc.h">src/gxalloc.h</a>,
+
+</ul>
+
+<p>
+Similarly, it records the relocation information for objects, refs, and
+strings differently:
+
+<ul>
+
+<li>Objects record relocation in the object header.
+
+<li>Refs record relocation in unused fields of refs such as nulls that
+don't use their <b><tt>value</tt></b> field. Every memory manager object
+that stores ref-containing objects as described above has an extra, unused
+ref at the end for this purpose.
+
+<li>Strings use a separate relocation table.
+
+</ul>
+
+<dl>
+<dt>
+Files:
+<dd>
+<a href="../src/igc.c">src/igc.c</a>,
+<a href="../src/igc.h">src/igc.h</a>,
+<a href="../src/igcref.c">src/igcref.c</a>,
+<a href="../src/igcstr.c">src/igcstr.c</a>,
+<a href="../src/igcstr.h">src/igcstr.h</a>,
+<a href="../src/ireclaim.c">src/ireclaim.c</a>.
+</dl>
+
+<hr>
+
+<h2><a name="Portability"></a>Portability</h2>
+
+<p>
+One of Ghostscript's most important features is its great portability across
+platforms (CPUs, operating systems, compilers, and build tools). The code
+supports portability through two mechanisms:
+
+<ul>
+
+<li><a href="#Structural">Structural mechanisms</a> -- segregating
+platform-dependent information into files in a particular way.
+
+<li><a href="#Coding">Coding standards</a> -- avoiding relying on byte
+order, scalar size, and platform-specific compiler or library features.
+
+</ul>
+
+<h3><a name="Structural"></a>Structural</h3>
+
+<h4><a name="CPU_and_compiler"></a>CPU and compiler</h4>
+
+<p>
+Ghostscript attempts to discover characteristics of the CPU and compiler
+automatically during the build process, by compiling and then executing a
+program called <b><tt>genarch</tt></b>. <b><tt>genarch</tt></b> generates a
+file <b><tt>obj/arch.h</tt></b>, which almost all Ghostscript files then
+include. This works well for things like word size, byte order, and
+floating point representation, but it can't determine whether or not a
+compiler supports a particular feature, because if a feature is absent, the
+compilation may fail.
+
+<dl>
+<dt>
+Files:
+<dd>
+<a href="../src/genarch.c">src/genarch.c</a>,
+<a href="../obj/arch.h">obj/arch.h</a>.
+</dl>
+
+<h4><a name="Library_headers"></a>Library headers</h4>
+
+<p>
+Despite the supposed standardization of ANSI C, platforms vary considerably
+in where (and whether) they provide various standard library facilities.
+Currently, Ghostscript's build process doesn't attempt to sort this out
+automatically. Instead, for each library header file
+<b><tt>&lt;</tt></b><em>xxx</em><b><tt>.h&gt;</tt></b> there is a
+corresponding Ghostscript source file
+<b><tt>src/</tt></b><em>xxx</em><b><tt>_.h</tt></b>, containing a set of
+compile-time conditionals that attempt to select the correct platform header
+file, or in some cases substitute Ghostscript's own code for a missing
+facility. You may need to edit these files when moving to platforms with
+unusually non-standard libraries.
+
+<dl>
+<dt>
+Files:
+<dd>
+<a href="../src/ctype_.h">src/ctype_.h</a>,
+<a href="../src/dirent_.h">src/dirent_.h</a>,
+<a href="../src/dos_.h">src/dos_.h</a>,
+<a href="../src/errno_.h">src/errno_.h</a>,
+<a href="../src/fcntl_.h">src/fcntl_.h</a>,
+<a href="../src/jerror_.h">src/jerror_.h</a>,
+<a href="../src/malloc_.h">src/malloc_.h</a>,
+<a href="../src/math_.h">src/math_.h</a>,
+<a href="../src/memory_.h">src/memory_.h</a>,
+<a href="../src/pipe_.h">src/pipe_.h</a>,
+<a href="../src/png_.h">src/png_.h</a>,
+<a href="../src/stat_.h">src/stat_.h</a>,
+<a href="../src/stdio_.h">src/stdio_.h</a>,
+<a href="../src/string_.h">src/string_.h</a>,
+<a href="../src/time_.h">src/time_.h</a>,
+<a href="../src/unistd_.h">src/unistd_.h</a>,
+<a href="../src/vmsmath.h">src/vmsmath.h</a>,
+<a href="../src/windows_.h">src/windows_.h</a>,
+<a href="../src/x_.h">src/x_.h</a>.
+</dl>
+
+<p>
+It has been suggested that the GNU <b><tt>configure</tt></b> scripts do the
+above better, for Unix systems, than Ghostscript's current methods. While
+this may be true, we have found <b><tt>configure</tt></b> scripts difficult
+to write, understand, and maintain; and the <b><tt>autoconf</tt></b> tool
+for generating <b><tt>configure</tt></b> scripts, which we found easy to
+use, doesn't cover much of the ground that Ghostscript requires.
+
+<h4><a name="Cross_platform_APIs"></a>Cross-platform APIs</h4>
+
+<p>
+For a few library facilities that are available on all platforms but are not
+well standardized, or that may need to be changed for special environments,
+Ghostscript defines its own APIs. It is an architectural property of
+Ghostscript that the implementations of these APIs are the only .c files for
+which the choice of platform (as opposed to choices of drivers or optional
+features) determines whether they are compiled and linked into an
+executable.
+
+<dl>
+
+<dt>
+API:
+<dd>
+<a href="../src/gp.h">src/gp.h</a>,
+<a href="../src/gpcheck.h">src/gpcheck.h</a>,
+<a href="../src/gpgetenv.h">src/gpgetenv.h</a>,
+<a href="../src/gpmisc.h">src/gpmisc.h</a>,
+<a href="../src/gpsync.h">src/gpsync.h</a>.
+
+<dt>
+Implementation files shared among multiple platforms:
+<dd>
+<a href="../src/gp_getnv.c">src/gp_getnv.c</a>,
+<a href="../src/gp_mktmp.c">src/gp_mktmp.c</a>,
+<a href="../src/gp_nsync.c">src/gp_nsync.c</a>,
+<a href="../src/gp_psync.c">src/gp_psync.c</a>,
+<a href="../src/gp_strdl.c">src/gp_strdl.c</a>,
+<a href="../src/gpmisc.c">src/gpmisc.c</a>.
+
+<dt>
+Platform-specific implementation files:
+<dd>
+<a href="../src/gp_dosfe.c">src/gp_dosfe.c</a>,
+<a href="../src/gp_dosfs.c">src/gp_dosfs.c</a>,
+<a href="../src/gp_dvx.c">src/gp_dvx.c</a>,
+<a href="../src/gp_iwatc.c">src/gp_iwatc.c</a>,
+<a href="../src/gp_msdos.c">src/gp_msdos.c</a>,
+<a href="../src/gp_mshdl.c">src/gp_mshdl.c</a>,
+<a href="../src/gp_msio.c">src/gp_msio.c</a>,
+<a href="../src/gp_mslib.c">src/gp_mslib.c</a>,
+<a href="../src/gp_mswin.c">src/gp_mswin.c</a>,
+<a href="../src/gp_mswin.h">src/gp_mswin.h</a>,
+<a href="../src/gp_ntfs.c">src/gp_ntfs.c</a>,
+<a href="../src/gp_os2.c">src/gp_os2.c</a>,
+<a href="../src/gp_os9.c">src/gp_os9.c</a>,
+<a href="../src/gp_stdia.c">src/gp_stdia.c</a>,
+<a href="../src/gp_stdin.c">src/gp_stdin.c</a>,
+<a href="../src/gp_sysv.c">src/gp_sysv.c</a>,
+<a href="../src/gp_unifn.c">src/gp_unifn.c</a>,
+<a href="../src/gp_unifs.c">src/gp_unifs.c</a>,
+<a href="../src/gp_unix.c">src/gp_unix.c</a>,
+<a href="../src/gp_vms.c">src/gp_vms.c</a>,
+<a href="../src/gp_wgetv.c">src/gp_wgetv.c</a>,
+<a href="../src/gp_win32.c">src/gp_win32.c</a>,
+<a href="../src/gp_wsync.c">src/gp_wsync.c</a>.
+
+</dl>
+
+<h4><a name="Makefiles"></a>Makefiles</h4>
+
+<p>
+For information on the structure and conventions used within makefiles, see
+the <a href="#Makefile_structure">Makefile structure</a> section above.
+
+<p>
+Ghostscript's makefiles are structured very similarly to the cross-platform
+library files. The great majority of the makefiles are portable across all
+platforms and all versions of <b><tt>make</tt></b>. To achieve this, the
+platform-independent makefiles must obey two constraints beyond those of the
+POSIX <b><tt>make</tt></b> program:
+
+<ul>
+
+<li>No conditionals or <b><tt>include</tt></b>s are allowed. While most
+<b><tt>make</tt></b> programs now provide some form of conditional execution
+and some form of inclusion, there is no agreement on the syntax.
+(Conditionals and includes are allowed in platform-dependent makefiles; in
+fact, an inclusion facility is required.)
+
+<li>There must be a space on both sides of the : that separates the target
+of a rule from its dependencies. This is required for compatibility with
+the OpenVMS <b><tt>MMS</tt></b> and <b><tt>MMK</tt></b> programs.
+
+</ul>
+
+<p>
+The top-level makefile for each platform (where "platform" includes the OS,
+the compiler, and the flavor of <b><tt>make</tt></b>) contains all the build
+options, plus <b><tt>include</tt></b>s for the generic makefiles and any
+platform-dependent makefiles that are shared among multiple platforms.
+
+<p>
+While most of the top-level makefiles build a PostScript and/or PDF
+interpreter configuration, there are also a few makefiles that build a test
+program that only uses the graphics library without any language
+interpreter. Among other things, this can be helpful in verifying that no
+accidental dependencies on the interpreter have crept into the library or
+drivers.
+
+<p>
+For families of similar platforms, the question arises whether to use
+multiple top-level makefiles, or whether to use a single top-level makefile
+that may require minor editing for some (or all) platforms. Ghostscript
+currently uses the following top-level makefiles for building interpreter
+configurations:
+
+<ul>
+
+<li>Unix (including GNU/Linux):
+<ul>
+<li><a href="../src/Makefile.in">src/Makefile.in</a>,
+template for autoconf-based builds.
+<li><a href="../src/unix-gcc.mak">src/unix-gcc.mak</a>,
+for Unix with gcc.
+<li><a href="../src/unixansi.mak">src/unixansi.mak</a>,
+for Unix with an ANSI C compiler other than gcc.
+</ul>
+
+<li>PC:
+<ul>
+<li><a href="../src/bcwin32.mak">src/bcwin32.mak</a>,
+for MS Windows with Borland C++ Builder.
+<li><a href="../src/msvc32.mak">src/msvc32.mak</a>,
+for MS Windows with Microsoft Visual C (MSVC).
+<li><a href="../src/os2.mak">src/os2.mak</a>,
+for MS-DOS or OS/2 GCC/EMX environment.
+<li><a href="../src/watc.mak">src/watc.mak</a>,
+for extended MS-DOS with Watcom C.
+<li><a href="../src/watcw32.mak">src/watcw32.mak</a>,
+for MS Windows with Watcom C.
+</ul>
+
+<li>Macintosh:
+<ul>
+<li><a href="../src/macosx.mak">src/macosx.mak</a>,
+commandline makefile for MacOS X.
+<li><a href="../src/macos-mcp.mak">src/macos-mcp.mak</a>,
+dummy makefile to generate an xml project file for Metrowerks Codewarrior.
+</ul>
+
+
+<li>Other:
+<ul>
+<li><a href="../src/all-arch.mak">src/all-arch.mak</a>,
+for building on many Unix systems in a networked test environment.
+<li><a href="../src/dvx-gcc.mak">src/dvx-gcc.mak</a>,
+for DesqView/X with gcc.
+<li><a href="../src/openvms.mak">src/openvms.mak</a>,
+for OpenVMS with Digital's CC compiler and the MMS build program.
+<li><a href="../src/openvms.mmk">src/openvms.mmk</a>,
+for OpenVMS with Digital's CC compiler and the MMK build program.
+</ul>
+
+</ul>
+
+<p>
+The following top-level makefiles build the library test program:
+
+<ul>
+<li><a href="../src/ugcclib.mak">src/ugcclib.mak</a>,
+on Unix with gcc.
+<li><a href="../src/msvclib.mak">src/msvclib.mak</a>,
+on MS Windows with MSVC.
+<li><a href="../src/watclib.mak">src/watclib.mak</a>,
+on extended MS-DOS with Watcom C.
+</ul>
+
+<p>
+The MSVC makefiles may require editing to select between different versions
+of MSVC, since different versions may have slightly incompatible command
+line switches or customary installation path names. The Unix makefiles
+often require editing to deal with differing library path names and/or
+library names. For details, see <a href="Make.htm#Unix_build">the Unix
+section</a> of the documentation for building Ghostscript.
+
+<dl>
+
+<dt>
+Library test program:
+<dd>
+<a href="../src/gslib.c">src/gslib.c</a>.
+
+<dt>
+Platform-independent makefiles:
+<dd>
+
+<dl>
+
+<dt>
+Graphics library and support:
+<dd>
+<a href="../src/contrib.mak">src/contrib.mak</a>,
+<a href="../src/devs.mak">src/devs.mak</a>,
+<a href="../src/gnudevs.mak">src/gnudevs.mak</a>,
+<a href="../src/gs.mak">src/gs.mak</a>,
+<a href="../src/lib.mak">src/lib.mak</a>,
+<a href="../src/version.mak">src/version.mak</a>.
+
+<dt>
+PostScript interpreter and fonts:
+<dd>
+<a href="../src/cfonts.mak">src/cfonts.mak</a>,
+<a href="../src/int.mak">src/int.mak</a>,
+<a href="../src/wmin.mak">src/wmin.mak</a>.
+
+<dt>
+Third-party libraries:
+<dd>
+<a href="../src/icclib.mak">src/icclib.mak</a>,
+<a href="../src/ijs.mak">src/ijs.mak</a>,
+<a href="../src/jpeg.mak">src/jpeg.mak</a>,
+<a href="../src/libpng.mak">src/libpng.mak</a>,
+<a href="../src/zlib.mak">src/zlib.mak</a>.
+
+</dl>
+
+<dt>
+Shared platform-dependent makefiles:
+<dd>
+
+<dl>
+
+<dt>
+Unix:
+<dd>
+<a href="../src/unix-aux.mak">src/unix-aux.mak</a>,
+<a href="../src/unix-dll.mak">src/unix-dll.mak</a>,
+<a href="../src/unix-end.mak">src/unix-end.mak</a>,
+<a href="../src/unixhead.mak">src/unixhead.mak</a>,
+<a href="../src/unixinst.mak">src/unixinst.mak</a>,
+<a href="../src/unixlink.mak">src/unixlink.mak</a>.
+
+<dt>
+Microsoft Windows and MS-DOS:
+<dd>
+<a href="../src/msvccmd.mak">src/msvccmd.mak</a>,
+<a href="../src/msvctail.mak">src/msvctail.mak</a>,
+<a href="../src/pcwin.mak">src/pcwin.mak</a>,
+<a href="../src/wccommon.mak">src/wccommon.mak</a>,
+<a href="../src/wctail.mak">src/wctail.mak</a>,
+<a href="../src/winint.mak">src/winint.mak</a>,
+<a href="../src/winlib.mak">src/winlib.mak</a>,
+<a href="../src/winplat.mak">src/winplat.mak</a>.
+
+<dt>
+Other:
+<dd>
+<a href="../src/dvx-head.mak">src/dvx-head.mak</a>,
+<a href="../src/dvx-tail.mak">src/dvx-tail.mak</a>,<br>
+<a href="../src/macos-fw.mak">src/macos-fw.mak</a>,
+for building as a MacOS X Framework.
+
+</dl>
+
+</dl>
+
+<h3><a name="Coding"></a>Coding</h3>
+
+<p>
+Coding for portability requires avoiding both <em>explicit</em>
+dependencies, such as platform-dependent <b><tt>#ifdef</tt></b>s, and
+<em>implicit</em> dependencies, such as dependencies on byte order or the
+size of the integral types.
+
+<h4><a name="Explicit_dependencies"></a>Explicit dependencies</h4>
+
+<p>
+The platform-independent .c files never, ever, use <b><tt>#ifdef</tt></b> or
+<b><tt>#if</tt></b> to select code for specific platforms. Instead, we
+always try to characterize some abstract property that is being tested. For
+example, rather than checking for macros that are defined on those specific
+platforms that have 64-bit <b><tt>long</tt></b> values, we define a macro
+<b><tt>ARCH_SIZEOF_LONG</tt></b> that can then be tested. Such macros are
+always defined in a .h file, either automatically in <b><tt>arch.h</tt></b>,
+or explicitly in a <em>xxx</em><b><tt>_.h</tt></b> file, as described in
+earlier sections.
+
+<dl>
+<dt>
+Files:
+<dd>
+<a href="../src/std.h">src/std.h</a>,
+<a href="../src/stdpre.h">src/stdpre.h</a>.
+</dl>
+
+<h4><a name="Implicit_dependencies"></a>Implicit dependencies</h4>
+
+<p>
+The most common source of byte ordering dependencies is casting between
+types (T1 *) and (T2 *) where T1 and T2 are numeric types that aren't merely
+signed/unsigned variants of each other. To avoid this, the only casts
+allowed in the code are between numeric types, from a pointer type to a long
+integral type, and between pointer types.
+
+<p>
+Ghostscript's code assumes the following about the sizes of various types:
+
+<dl>
+<dt>char<dd>8 bits
+<dt>short<dd>16 bits
+<dt>int<dd>32 or 64 bits
+<dt>long<dd>32 or 64 bits
+<dt>float<dd>32 bits (may work with 64 bits)
+<dt>double<dd>64 bits (may work with 128 bits)
+</dl>
+
+<p>
+The code does not assume that the <b><tt>char</tt></b> type is signed (or
+unsigned); except for places where the value is always a literal string, or
+for interfacing to library procedures, the code uses <b><tt>byte</tt></b> (a
+Ghostscript synonym for <b><tt>unsigned char</tt></b>) almost everywhere.
+
+<p>
+Pointers are signed on some platforms and unsigned on others. In the few
+places in the memory manager where it's necessary to reliably order-compare
+(as opposed to equality-compare) pointers that aren't known to point to the
+same allocated block of memory, the code uses the
+<b><tt>PTR_</tt></b><em>relation</em> macros rather than direct comparisons.
+
+<p>
+See the files listed above for other situations where a macro provides
+platform-independence or a workaround for bugs in specific compilers or
+libraries (of which there are a distressing number).
+
+<h4><a name="Platform_specific_code"></a>Platform-specific code</h4>
+
+<p>
+There are some features that are inherently platform-specific:
+
+<ul>
+
+<li>Microsoft Windows requires a lot of special top-level code, and also has
+an installer and uninstaller.
+
+<li>OS/2 requires a little special code.
+
+<li>MacOS also requires special top-level code (now distributed with the
+standard Ghostscript package).
+
+<li>All platforms supporting DLLs (currently all three of the above) share
+some special top-level code.
+
+</ul>
+
+<dl>
+
+<dt>
+MS Windows files:
+<dd>
+<a href="../src/dpmain.c">src/dpmain.c</a>,
+<a href="../src/dwdll.c">src/dwdll.c</a>,
+<a href="../src/dwdll.h">src/dwdll.h</a>,
+<a href="../src/dwimg.c">src/dwimg.c</a>,
+<a href="../src/dwimg.h">src/dwimg.h</a>,
+<a href="../src/dwinst.cpp">src/dwinst.cpp</a>,
+<a href="../src/dwinst.h">src/dwinst.h</a>,
+<a href="../src/dwmain.c">src/dwmain.c</a>,
+<a href="../src/dwmain.h">src/dwmain.h</a>,
+<a href="../src/dwmainc.c">src/dwmainc.c</a>,
+<a href="../src/dwnodll.c">src/dwnodll.c</a>,
+<a href="../src/dwreg.c">src/dwreg.c</a>,
+<a href="../src/dwreg.h">src/dwreg.h</a>,
+<a href="../src/dwsetup.cpp">src/dwsetup.cpp</a>,
+<a href="../src/dwsetup.h">src/dwsetup.h</a>,
+<a href="../src/dwtext.c">src/dwtext.c</a>,
+<a href="../src/dwtext.h">src/dwtext.h</a>,
+<a href="../src/dwuninst.cpp">src/dwuninst.cpp</a>,
+<a href="../src/dwuninst.h">src/dwuninst.h</a>,
+<a href="../src/gp_msdll.c">src/gp_msdll.c</a>,
+<a href="../src/gp_mspol.c">src/gp_mspol.c</a>,
+<a href="../src/gp_msprn.c">src/gp_msprn.c</a>,
+<a href="../src/gs16spl.c">src/gs16spl.c</a>,
+<a href="../src/gsdllwin.h">src/gsdllwin.h</a>.
+
+<dt>
+OS/2 files:
+<dd>
+<a href="../src/gsdllos2.h">src/gsdllos2.h</a>.
+
+<dt>
+Unix files:
+<dd>
+<a href="../src/dxmain.c">src/dxmain.c</a>.
+<a href="../src/dxmainc.c">src/dxmainc.c</a>.
+
+<dt>
+Macintosh files:
+<dd>
+<a href="../src/gdevmac.c">src/gdevmac.c</a>.
+<a href="../src/gdevmac.h">src/gdevmac.h</a>.
+<a href="../src/gdevmacpictop.h">src/gdevmacpictop.h</a>.
+<a href="../src/gdevmacttf.h">src/gdevmacttf.h</a>.
+<a href="../src/gdevmacxf.c">src/gdevmacxf.c</a>.
+<a href="../src/gp_mac.c">src/gp_mac.c</a>.
+<a href="../src/gp_mac.h">src/gp_mac.h</a>.
+<a href="../src/gp_macio.c">src/gp_macio.c</a>.
+<a href="../src/macgenmcpxml.sh">src/macgenmcpxml.sh</a>.
+<a href="../src/macsysstat.h">src/macsysstat.h</a>.
+<a href="../src/macsystypes.h">src/macsystypes.h</a>.
+
+<dt>
+VMS files:
+<dd>
+<a href="../src/vms_x_fix.h">src/vms_x_fix.h</a>.
+
+<dt>
+DLL files:
+<dd>
+<a href="../src/gsdll.c">src/gsdll.c</a>,
+<a href="../src/gsdll.h">src/gsdll.h</a>,
+<a href="../src/gdevdsp.c">src/gdevdsp.c</a>,
+<a href="../src/gdevdsp.h">src/gdevdsp.h</a>,
+<a href="../src/gdevdsp2.h">src/gdevdsp2.h</a>,
+<a href="../src/iapi.c">src/iapi.c</a>,
+<a href="../src/iapi.h">src/iapi.h</a>,
+<a href="../src/idisp.c">src/idisp.c</a>,
+<a href="../src/idisp.h">src/idisp.h</a>.
+<p>
+The new DLL interface (new as of 7.0) is especially useful with the
+new display device, so it is included here. Both are due to Russell
+Lang.
+
+</dl>
+
+
+<hr>
+
+<h2><a name="Adding_features_and_options"></a>Adding features and options</h2>
+
+<p>
+[Ray, please supply more information about what you want here]
+
+<h2><a name="Troubleshooting"></a>Troubleshooting</h2>
+
+<p>
+The Ghostscript code has many tracing and debugging features that can be
+enabled at run time using the <b><tt>-Z</tt></b> command line switch, if the
+executable was compiled with <b><tt>DEBUG</tt></b> defined. One
+particularly useful combination is <b><tt>-Z@\?</tt></b>, which fills free
+memory blocks with a pattern and also turns on run-time memory consistency
+checking. For more information, see <a
+href="Use.htm#Debugging">doc/Use.htm#Debugging</a>; you can also search for
+occurrences of <b><tt>if_debug</tt></b> or <b><tt>gs_debug_c</tt></b> in the
+source code. Note that many of these features are in the graphics library
+and do not require a PostScript interpreter.
+
+<p>
+The code also contains many run-time procedures whose only purpose is to be
+called from the debugger to print out various data structures, including all
+the procedures in <a href="../src/idebug.c">src/idebug.c</a> (for the
+PostScript interpreter) and the <b><tt>debug_dump_</tt></b> procedures in <a
+href="../src/gsmisc.c">src/gsmisc.c</a>.
+
+<dl>
+<dt>
+Files:
+<dd>
+<a href="Use.htm#Debugging">doc/Use.htm#Debugging</a>,
+<a href="../src/gdebug.h">src/gdebug.h</a>,
+<a href="../src/gsmdebug.h">src/gsmdebug.h</a>,
+<a href="../src/idebug.h">src/idebug.h</a>,
+<a href="../src/idebug.c">src/idebug.c</a>.
+</dl>
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 2001 artofcode LLC.
+All rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Devices.htm b/Master/xemtex/doc/ghostscript/Devices.htm
new file mode 100644
index 00000000000..57d39eec9da
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Devices.htm
@@ -0,0 +1,6046 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Details of Ghostscript output devices</title>
+<!-- $Id: Devices.htm,v 1.34.2.15.2.6 2003/05/17 14:38:59 giles Exp $ -->
+<!-- Originally: devices.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Details of Ghostscript output devices</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Measurements">Notes on measurements</a>
+<li><a href="#IJS">IJS - Inkjet and other raster devices</a>
+<li><a href="#Win">MS Windows printers</a>
+<li><a href="#File_formats">File formats</a>
+<ul>
+<li><a href="#JFIF">JPEG file format (JFIF)</a>
+<li><a href="#TIFF">TIFF file formats</a>
+</ul>
+<li><a href="#Display_devices">Display devices</a>
+<ul>
+<li><a href="#x11_devices">X Window System</a>
+</ul>
+<li><a href="#HP_ijs">HP Deskjet official drivers</a>
+<li><a href="#STP">Gimp-Print (stp) drivers</a>
+<li><a href="#HP_color_inkjet">Other H-P color inkjet printers</a>
+<ul>
+<li><a href="#HP_gdevcdj">Drivers contained in <b><tt>gdevcdj.c</tt></b></a>
+<li><a href="#HP_paper_size">Default paper size</a>
+<li><a href="#HP_limits">Deskjet physical limits</a>
+<li><a href="#HP_command_line">Printer properties (command-line parameters)</a>
+<ul>
+<li><a href="#HP_bpp">Bits per pixel</a>
+<li><a href="#HP_deskjet_properties">Deskjet properties</a>
+<li><a href="#HP_paintjet_properties">Paintjet XL300 / Paintjet XL properties</a>
+</ul>
+<li><a href="#HP_gamma">Gamma correction</a>
+<li><a href="#HP_resolution_enhance">HP's resolution-enhanced mode for Inkjet printers</a>
+<li><a href="#HP_tips">General tips</a>
+</ul>
+<li><a href="#BJC_8200">Canon BJC-8200 printer</a>
+<li><a href="#BJC">Other Canon BubbleJet (BJC) printers</a>
+<ul>
+<li><a href="#BJC_history">History</a>
+<li><a href="#BJC_build">Configuring and building the BJC drivers</a>
+<ul>
+<li><a href="#BJC_defaults">Modify values in <b><tt>gdevbjc.h</tt></b></a>
+<li><a href="#BJC_CMYK_RGB">CMYK-to-RGB color conversion</a>
+<li><a href="#BJC_vertical_centering">Vertical centering of the printable area</a>
+<li><a href="#BJC_margins">Page margins</a>
+<li><a href="#BJC_compile">Makefile and compilation</a>
+</ul>
+<li><a href="#BJC_usage">Use of the drivers</a>
+<ul>
+<li><a href="#BJC_options">Supported Options and Defaults</a>
+<li><a href="#BJC_device_info">Device information</a>
+<li><a href="#BJC_HW_margins">Hardware margins</a>
+<li><a href="#BJC_PPD">PostScript printer description (PPD) files</a>
+<li><a href="#BJC_PPD_custom">Customizing the PPD files</a>
+</ul>
+<li><a href="#BJC_bugs">How to report problems</a>
+<li><a href="#BJC_acks">Acknowledgements</a>
+</ul>
+<li><a href="#STC_epson_stylus">Epson Stylus color printer (see also <b><tt>uniprint</tt></b>)</a>
+<ul>
+<li><a href="#STC_usage">Usage</a>
+<li><a href="#STC_options">Options</a>
+<li><a href="#STC_FAQ">Application note and FAQ</a>
+<ul>
+<li><a href="#STC_FAQ_A3">Support for A3 paper</a>
+<li><a href="#STC_FAQ_margins">Margins, PageSize</a>
+<li><a href="#STC_FAQ_II_IIS_1500">Stylus Color II / IIs and 1500</a>
+</ul>
+<li><a href="#STC_recommendations">Recommendations</a>
+<ul>
+<li><a href="#STC_dither_experiment">Color dithering experiments with <b><tt>gdevstc</tt></b> 1.21</a>
+</ul>
+<li><a href="#STC_color_transform">Color transformation</a>
+<li><a href="#STC_CAM"><b><tt>ColorAdjustMatrix</tt></b></a>
+<li><a href="#STC_RGBCMYK_coding">RGB / CMYK coding and transfer, and <b><tt>BitsPerPixel</tt></b></a>
+<li><a href="#What_is_weaving">What is weaving?</a>
+<li><a href="#STC_print_modes">Print mode parameters</a>
+<ul>
+<li><a href="#STC_unidirectional"><b><tt>Unidirectional</tt></b></a>
+<li><a href="#STC_noweave"><b><tt>Microweave</tt></b>, <b><tt>noWeave</tt></b> and <b><tt>OutputCode=deltarow</tt></b></a>
+<li><a href="#STC_model"><b><tt>Model</tt></b></a>
+</ul>
+<li><a href="#STC_Pitfalls">Bugs and pitfalls</a>
+<li><a href="#STC_Tests">Tests</a>
+<ul>
+<li><a href="#STC_OutputCodes">The various OutputCodes</a>
+<li><a href="#STC_printing_time">Printing time related to other options</a>
+</ul>
+<li><a href="#STC_acks">Acknowledgments</a>
+</ul>
+<li><a href="#Uniprint">uniprint, a flexible unified printer driver</a>
+<ul>
+<li><a href="#Uni_state">The state of this driver</a>
+<li><a href="#Uni_background">Notes on <b><tt>uniprint</tt></b>'s background</a>
+<li><a href="#Uni_make_pfile">Godzilla's guide to the creation of Unified Printer Parameter (<b><tt>.upp</tt></b>) files</a>
+<li><a href="#Uni_all_parameters">All parameters in brief</a>
+<li><a href="#Uni_honors"><b><tt>Uniprint</tt></b>'s Roll of Honor</a>
+<li><a href="#Uni_weaving_howto"><b><tt>Uniprint</tt></b> weaving parameters howto</a></li>
+<li><a href="#Uni_esc300">Extension to <b><tt>uniprint</tt></b> for the Epson Stylus Color 300</a></li>
+</ul>
+<li><a href="#SPARCprinter">Sun SPARCprinter</a>
+<ul>
+<li><a href="#SPARC_install">Installation</a>
+<li><a href="#SPARC_problems">Problems</a>
+</ul>
+<li><a href="#Apple">Apple dot matrix printer</a>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>. You may also be interested in <a href="Make.htm">how to
+build Ghostscript</a> and <a href="Install.htm">install it</a>, as well as
+the description of the <a href="Drivers.htm">driver interface</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="Measurements"></a>Notes on measurements</h2>
+
+<p>
+Several different important kinds of measures appear throughout this
+document: inches, centimeters and millimeters, points, and bits per pixel.
+
+<dl>
+<dt><b>Inches</b>
+<dd>1 inch equals 2.54 centimeters. The inch measure is sometimes
+represented by "<b>in</b>" or a quotation mark (<b>&quot;</b>) to the right
+of a measure, like <b>8.5in</b> or <b>8.5""</b>. Dots per inch,
+"<b>dpi</b>", are the common measure of printing resolution for dot-matrix,
+laser, and ink-jet printers. U.S. "letter" paper is exactly
+8.5in&times;11in, approximately 21.6cm&times;27.9cm. (See in the usage
+documentation all the <a href="Use.htm#Known_paper_sizes">paper sizes
+predefined in Ghostscript</a>.)
+
+<dt><b>Centimeters</b> and <b>millimeters</b>
+<dd>ISO standard paper sizes such as A4 and A3 are commonly represented in
+the SI units of centimeters and millimeters. Centimeters are abbreviated
+"<b><tt>cm</tt></b>", millimeters "<b><tt>mm</tt></b>". ISO A4 paper is
+quite close to 21.0&times;29.7 centimeters (approximately 8.3&times;11.7
+inches).
+
+<dt><b>Points</b>
+<dd>Points are a measure traditionally used in the printing trade and now
+in PostScript, which specifies exactly 72 points per inch (approximately
+28.35 per centimeter). The <a href="Use.htm#Known_paper_sizes">paper sizes
+known to Ghostscript</a> are defined in the initialization file
+<b><tt>gs_statd.ps</tt></b> in terms of points.
+
+<dt><b>Bits per pixel</b>
+<dd>Commonly abbreviated "<b><tt>bpp</tt></b>".
+</dl>
+
+<hr>
+
+<h2><a name="IJS"></a>IJS - Inkjet and other raster devices</h2>
+
+<p>
+IJS is a relatively new initiative to improve the quality and ease of
+use of inkjet printing with Ghostscript. Using IJS, you can add new
+drivers or upgrade existing ones without recompiling Ghostscript.
+All driver authors are encouraged to adapt their drivers for IJS, and
+if there is an IJS driver available for your printer, it should be
+your first choice. The non-ijs raster printer drivers are deprecated
+and will be removed in future versions of ghostscript.
+</p>
+
+<p>
+Even more importantly, the vast majority of inkjet printers are now
+supported by one of the two free collections described below:
+<a href="#STP">Gimp-Print</a> and <a href="#HP_ijs">HPIJS</a>. Therefore
+the ijs interface is your best bet for such printers from a practical
+point of view as well.
+</p>
+
+<p>Please see the <a href="http://www.linuxprinting.org/ijs/">IJS web
+page</a> for more information about IJS, including a listing of
+IJS-compatible drivers.
+</p>
+
+<p>
+A typical command line for IJS is:
+</p>
+
+<blockquote>
+<b><tt>
+gs -DSAFER -sDEVICE=ijs -sIjsServer=hpijs
+ -sDeviceManufacturer=HEWLETT-PACKARD -sDeviceModel='DESKJET 990'
+ -DIjsUseOutputFD -sOutputFile=/dev/usb/lp1 -DNOPAUSE --
+ examples/tiger.eps
+</tt></b>
+</blockquote>
+
+
+<p>
+Individual IJS command line parameters are as follows:
+</p>
+
+<dl>
+<dt><b><tt>-sIjsServer=</tt></b><em>{path}</em>
+<dd>Sets the pathname for the IJS server (ie printer driver). Examples
+are "hpijs" and "ijsgimpprint".
+Ghostscript will spawn a new process for this driver, and communicate
+with it using the IJS protocol. The pathname need not be absolute,
+as the PATH environment variable is searched, but it's probably a good
+idea for robustness and security. Note also that if -dSAFER is not
+specified, it's possible for PostScript code to set this parameter,
+so it can cause arbitrary code to be executed. See the section on <a
+href="Use.htm#Security">Security</a> for more information.
+</dl>
+
+<dl>
+<dt><b><tt>-sDeviceManufacturer=</tt></b><em>{name}</em>
+<dt><b><tt>-sDeviceModel=</tt></b><em>{name}</em>
+<dd>These parameters select the device according to IEEE-1284 standard
+device ID strings. In general, consult the documentation for the
+driver to find the appropriate settings. Note that, if the value
+contains a space, you'll want to quote the value in your shell, as
+in the example above.
+</dl>
+
+<dl>
+<dt><b><tt>-sIjsParams=</tt></b><em>{params}</em>
+<dd>This parameter allows you to set arbitrary IJS parameters on
+the IJS driver. The format is a comma-separated list of
+<b><tt>key=value</tt></b> pairs. If it is necessary to send a
+value containing a comma or backslash, it can be escaped with
+a backslash. Thus, <b><tt>'-sIjsParams=Foo=bar,Baz=a\,b'</tt></b> sets
+the parameter Foo to "bar", and Baz to "a,b".
+</dl>
+
+<dl>
+<dt><b><tt>-dIjsUseOutputFD</tt></b>
+<dd>This flag indicates that Ghostscript should open the output file
+and pass a file descriptor to the server. If not set, Ghostscript
+simply passes the filename set in OutputFile to the server. In most
+cases, this flag won't matter, but if you have a driver which works
+only with OutputFD (such as hpijs 1.0.2), or if you're using the
+-sOutputFile="|cmd" syntax, you'll need to set it.
+</dl>
+
+<dl>
+<dt><b><tt>-dBitsPerSample=</tt></b><em>N</em>
+<dd>This parameter controls the number of bits per sample. The
+default value of 8 should be appropriate for most work. For monochrome
+images, use -dBitsPerSample=1.
+</dl>
+
+<p>Generic Ghostscript options that are particularly relevant for IJS
+are summarized below:
+</p>
+
+<dl>
+<dt><b><tt>-r</tt></b><em>number</em>
+<br><b><tt>-r</tt></b><em>number1</em><b><tt>x</tt></b><em>number2</em>
+<dd>Sets the resolution, in dpi. If the resolution is not specified,
+Ghostscript queries the IJS server to determine the preferred resolution.
+When the resolution is specified, it overrides the value (if any)
+preferred by the IJS server.
+</dl>
+
+<dl>
+<dt><b><tt>-dDuplex</tt></b>
+<dt><b><tt>-dTumble</tt></b>
+<dd>These flags enable duplex (two-sided) printing. Tumble controls
+the orientation. When Tumble is false, the pages
+are oriented suitably at the left or right. When Tumble is true,
+the pages are oriented suitably for binding at the top or
+bottom.
+</dl>
+
+<dl>
+<dt><b><tt>-sProcessColorModel=</tt></b><em>{name}</em>
+<dd>Use this flag to select the process color model. Suitable values
+include DeviceGray, DeviceRGB, and DeviceCMYK.
+</dl>
+
+<h3>Building IJS</h3>
+
+<p> IJS is included by default on Unix gcc builds, and also in
+autoconf'ed builds. Others may need some makefile tweaking. First,
+make sure the IJS device is selected:
+
+<blockquote>
+DEVICE_DEVS2=$(DD)ijs.dev
+</blockquote>
+
+<p> Next, make sure that the path and execution type are set in
+the toplevel makefile. The values for Unix are as follows:
+
+<blockquote>
+IJSSRCDIR=ijs
+IJSEXECTYPE=unix
+</blockquote>
+
+<p> At present, "unix" and "win" are the only supported values for
+IJSEXECTYPE. If neither sounds appropriate for your system, it's
+possible that more porting work is needed.
+
+<p> Last, make sure that ijs.mak is included in the toplevel makefile.
+It should be present right after the include of icclib.mak.
+
+<p> IJS is not inherently platform-specific. We're very much interested
+in taking patches from people who have ported it to non-mainstream
+platforms. And once it's built, you won't have to recompile Ghostscript
+to support new drivers!
+
+<hr>
+
+<h2><a name="STP"></a>Gimp-Print drivers</h2>
+
+<p>
+The Gimp-Print driver collection supports a wide variety of inkjet
+printers and supports Ghostscript's 'ijs' interface. Just set the
+IjsServer parameter to 'ijsgimpprint'.
+Please see <a href="http://gimp-print.sourceforge.net/"
+class="offsite">http://gimp-print.sourceforge.net/</a> for more
+information including supported printers and appropriate options.
+
+<p>
+GNU Ghostscript also includes a special client device for the Gimp-Print
+family of drivers. The device itself is called <tt>stp</tt> for historical
+reasons. This device will not be supported in future versions of Ghostscript
+or Gimp-print.
+
+<p>
+You will need to have the Gimp-Print library installed to use this
+device. The library distribution also includes extensive documentation
+on supported printers and the options available with each. Thanks to the
+Gimp-Print team for all their hard work integrating their excellent
+driver suite.
+
+<p>
+Please note that the stp driver interface is only supported through
+gimp-print version 4.2. If you have 4.2.1 or later, please use the IJS
+interface (described above) instead.
+
+<h2><a name="HP_ijs"></a>HP Inkjet official drivers</h2>
+
+<p>
+HP provides official drivers for many of their printer models.
+In order to use these drivers, you will need the HP Inkjet Server as
+well as Ghostscript, available from <a
+href="http://hpinkjet.sourceforge.net">http://hpinkjet.sourceforge.net</a>.
+
+<p>
+This version of ghostscript also contains a special client driver 'hpijs'
+that predates the current ijs interface. It will not be supported in future
+versions of Ghostscript.
+
+<p>
+Thanks to the folks at HP,
+especially David Suffield for making these drivers available and working to
+integrate it with Ghostscript.
+
+<hr>
+
+<h2><a name="Win"></a>MS Windows printers</h2>
+
+<p>
+This section was written by Russell Lang, the author of Ghostscript's
+MS&nbsp;Windows-specific printer driver, and updated by
+<a href="mailto:Pierre.Arnaud@opac.ch">Pierre Arnaud</a>,
+the current maintainer.
+</p>
+
+<p>
+The <b><tt>mswinpr2</tt></b> device uses MS&nbsp;Windows printer drivers, and
+thus should work with any printer with device-independent bitmap (DIB)
+raster capabilities. The printer resolution cannot be selected directly
+using PostScript commands from Ghostscript: use the printer setup in the
+Control Panel instead. It is however possible to specify a maximum resolution
+for the printed document (see below).
+</p>
+
+<p>
+If no Windows printer name is specified in <b><tt>-sOutputFile</tt></b>,
+Ghostscript prompts for a Windows printer using the standard Print Setup
+dialog box. You must set the orientation to Portrait and the page size to
+that expected by Ghostscript; otherwise the image will be clipped.
+Ghostscript sets the physical device size to that of the Windows printer
+driver, but it does not update the PostScript clipping path.
+</p>
+
+<p>
+If a Windows printer name is specified in <b><tt>-sOutputFile</tt></b> using
+the format <tt>"\\spool\printer_name"</tt>, for instance
+</p>
+
+<blockquote><b><tt>
+gs ... -sOutputFile="\\spool\Apple LaserWriter II NT"
+</tt></b></blockquote>
+
+<p>
+then Ghostscript attempts to open the Windows printer without prompting
+(except, of course, if the printer is connected to <b><tt>FILE:</tt></b>).
+Ghostscript attempts to set the Windows printer page size and orientation
+to match that expected by Ghostscript, but doesn't always succeed. It uses
+this algorithm:
+</p>
+
+<ol>
+<li>If the requested page size matches one of the Windows standard page
+sizes +/- 2mm, request that standard size.</li>
+
+<li>Otherwise if the requested page size matches one of the Windows
+standard page sizes in landscape mode, ask for that standard size in
+landscape.</li>
+
+<li>Otherwise ask for the page size by specifying only its dimensions.</li>
+
+<li>Merge the requests above with the defaults. If the printer driver
+ignores the requested paper size, no error is generated: it will print on
+the wrong paper size.</li>
+
+<li>Open the Windows printer with the merged orientation and size.</li>
+</ol>
+
+<p>
+The Ghostscript physical device size is updated to match the Windows
+printer physical device.
+</p>
+
+<h3><a name="Win_properties"></a>Supported command-line parameters</h3>
+
+<p>
+The <b><tt>mswinpr2</tt></b> device supports a limited number of command-line
+parameters (e.g. it does not support setting the printer resolution). The
+recognized parameters are the following:
+</p>
+
+<blockquote>
+<dl>
+<dt><b><tt>-sDEVICE=mswinpr2</tt></b></dt>
+<dd>Selects the MS&nbsp;Windows printer device. If Ghostscript was not
+compiled with this device as the default output device, you have to specify
+it on the command line.</dd>
+
+<dt><b><tt>-dNoCancel</tt></b></dt>
+<dd>Hides the progress dialog, which shows the percent of the document page
+already processed and also provides a <em>cancel</em> button. This option
+is useful if GS is intended to print pages in the background, without any
+user intervention.</dd>
+
+<dt><b><tt>-sOutputFile=</tt></b><b>"\\spool\<em>printer_name</em>"</b></dt>
+<dd>Specifies which printer should be used. The <em>printer_name</em> should be
+typed exactly as it appears in the Printers control panel, including spaces.</dd>
+
+</dl>
+</blockquote>
+
+<h3><a name="Win_options"></a>Supported options (device properties)</h3>
+
+<p>
+Several extra options exist which cannot be set through the command-line,
+but only by executing the appropriate PostScript setup code. These options
+can be set through the inclusion of a setup file on the command-line:
+</p>
+
+<blockquote><b><tt>
+gs ... setup.ps ...
+</tt></b></blockquote>
+
+<p>
+The <tt>setup.ps</tt> file is responsible for the device selection, therefore
+you should not specify the <b><tt>-sDEVICE=mswinpr2</tt></b> option on the
+command-line if you are using such a setup file. Here is an example of such
+a setup file:
+</p>
+
+<blockquote><pre>
+mark
+ /NoCancel true % don't show the cancel dialog
+ /BitsPerPixel 4 % force 4 bits/pixel
+ /UserSettings
+ &lt;&lt;
+ /DocumentName (Ghostscript document) % name for the Windows spooler
+ /MaxResolution 360 % maximum document resolution
+ &gt;&gt;
+ (mswinpr2) finddevice % select the Windows device driver
+ putdeviceprops
+setdevice
+</pre></blockquote>
+
+<p>
+This example disables the progress dialog (same as the <tt><b>-dNoCancel</b></tt>
+option), forces a 4 bits/pixel output resolution and specifies additional user
+settings, such as the document name (which will be displayed by the Windows
+spooler for the queued document) and the maximum resolution (here 360&nbsp;dpi).
+It then finds and selects an instance of the MS&nbsp;Windows device printer
+and activates it. This will show the standard printer dialog, since no
+<tt><b>/OutputFile</b></tt> property was specified.
+</p>
+
+<p>
+The following options are available:
+</p>
+
+<blockquote>
+<dl>
+<dt><b><tt>/NoCancel <em>boolean</em></tt></b></dt>
+<dd>Disables (hides) the progress dialog when set to <em><tt>true</tt></em> or
+show the progress dialog if not set or set to <em><tt>false</tt></em>.</dd>
+
+<dt><b><tt>/OutputFile <em>string</em></tt></b></dt>
+<dd>Specifies which printer should be used. The string should be of the form
+<tt><b>\\spool\<em>printer_name</em></b></tt>, where the <em>printer_name</em> should be
+typed exactly as it appears in the Printers control panel, including spaces.</dd>
+
+<dt><b><tt>/QueryUser <em>integer</em></tt></b></dt>
+<dd>Shows the standard printer dialog (<tt><b>1</b></tt> or any other value),
+shows the <em>printer setup dialog</em> (<tt><b>2</b></tt>) or selects the
+<em>default Windows printer</em> without any user interaction (<tt><b>3</b></tt>).</dd>
+
+<dt><b><tt>/BitsPerPixel <em>integer</em></tt></b></dt>
+<dd>Sets the device depth to the specified bits per pixel. Currently supported
+values are <tt><b>1</b></tt> (monochrome), <tt><b>4</b></tt> (CMYK with screening
+handled by Ghostscript) and <tt><b>24</b></tt> (True Color, dithering handled by
+the Windows printer driver; this option can produce huge print jobs).</dd>
+
+<dt><b><tt>/UserSettings <em>dict</em></tt></b></dt>
+<dd>Sets additional options, defined in a dictionary. The following properties can
+be set:
+
+<dl>
+<dt><b><tt>/DocumentName <em>string</em></tt></b></dt>
+<dd>Defines the user friendly document name which will be displayed by the
+Windows spooler.</dd>
+
+<dt><b><tt>/DocumentRange <em>[n1 n2]</em></tt></b></dt>
+<dd>Defines the range of pages contained in the document. This information can
+be used by the printer dialog, in conjunction with the following property.</dd>
+
+<dt><b><tt>/SelectedRange <em>[n1 n2]</em></tt></b></dt>
+<dd>Defines the selected range of pages. This information will be displayed in
+the printer dialog and will be updated after the user interaction. A PostScript
+program could check these values and print only the selected page range.</dd>
+
+<dt><b><tt>/MaxResolution <em>dpi</em></tt></b></dt>
+<dd>Specifies the maximum tolerated output resolution. If the selected printer has
+a higher resolution than <tt><b>dpi</b></tt>, then Ghostscript will render the
+document with a submultiple of the printer resolution. For example, if
+<tt><b>MaxResolution</b></tt> is set to 360 and the output printer supports
+up to 1200 dpi, then Ghostscript renders the document with an internal
+resolution of 1200/4=300 dpi. This can be very useful to reduce the memory
+requirements when printing in True Color on some high resolution ink-jet color
+printers.</dd>
+
+</dl></dd>
+
+</dl>
+</blockquote>
+
+<p>
+These properties can be queried through the <tt><b>currentpagedevice</b></tt>
+operator. The following PostScript code snippet shows how to do it for some
+of the properties:
+</p>
+
+<blockquote><pre>
+currentpagedevice /BitsPerPixel get == % displays the selected depth
+
+currentpagedevice /UserSettings get % get the additional options..
+/us exch def % ..and assign them to a variable
+
+us /DocumentName get == % displays the document name
+us /SelectedRange get == % displays the selected page range
+
+% other misc. informations (don't rely on them)
+
+us /Color get == % 1 => monochrome output, 2 => color output
+us /PrintCopies get == % displays the number of copies requested
+</pre></blockquote>
+
+<p>
+There are a few undocumented informations stored in the <tt><b>UserSettings</b></tt>
+dictionary. You should not rely on them. Their use is still experimental and
+they could be removed in a future version.
+</p>
+
+<h3><a name="Win_duplex"></a>Duplex printing</h3>
+
+<p>
+If the Windows printer supports the duplex printing feature, then it will
+also be available through the <b><tt>mswinpr2</tt></b> device. You can query
+for this support through the <b><tt>/Duplex</tt></b> propery of the
+<b><tt>currentpagedevice</tt></b>. If it returns <b><tt>null</tt></b>, then
+the feature is not supported by the selected printer. Otherwise, <b><tt>true</tt></b>
+means that the printer is currently set up to print on both faces of the paper
+and <b><tt>false</tt></b> that it is not, but that it can.
+</p>
+
+<p>
+The following example shows how to print on both faces of the paper (using
+the long side of the paper as the reference):
+</p>
+
+<blockquote><pre>
+&lt;&lt; /Duplex true /Tumble false &gt;&gt; setpagedevice
+</pre></blockquote>
+
+<p>
+</p>
+
+
+<hr>
+
+<h2><a name="File_formats"></a>File formats</h2>
+
+<h3><a name="JFIF"></a>JPEG file format (JFIF)</h3>
+
+<p>
+Ghostscript includes output drivers that can produce <a
+href="http://www.ijg.org/">Independent JPEG Group</a> JFIF (JPEG File
+Interchange Format) files from PostScript images. <b>Please note</b> that
+JPEG is a compression method specifically intended for continuous-tone
+images such as photographs, not for graphics, and it is therefore quite
+unsuitable for the vast majority of page images produced with PostScript,
+which should be saved in a form better for graphics, such as
+<a href="http://www.libpng.org/pub/png/">Portable Network Graphics</a>
+(PNG) format. If you get crummy-looking JPEG files, don't blame
+Ghostscript; instead consult a reference about uses and abuses of JPEG,
+such as the JPEG FAQ
+
+<blockquote>
+<a href="http://www.faqs.org/faqs/jpeg-faq/">http://www.faqs.org/faqs/jpeg-faq/</a>
+</blockquote>
+
+<p>
+You can use the JPEG output drivers -- <b><tt>jpeg</tt></b> to produce
+color JPEG files and <b><tt>jpeggray</tt></b> for grayscale JPEGs -- the
+same as other file-format drivers: by specifying the device name and an
+output file name, for example
+
+<blockquote><b><tt>
+gs -sDEVICE=jpeg -sOutputFile=foo.jpg foo.ps
+</tt></b></blockquote>
+
+<p>
+You can also use the <a href="Use.htm#Resolution_switch"><b><tt>-r</tt></b>
+switch</a> to specify the imaging resolution and thus the output file's
+size in pixels. The default resolution is normally 72&times;72dpi.
+
+<p>
+The JPEG devices support several special parameters to control the JPEG
+"quality setting" (DCT quantization level).
+
+<blockquote>
+<dl>
+<dt><b><tt>-dJPEGQ=</tt></b><b><em>N</em></b> (integer from 0 to 100, default 75)
+<dd>Set the quality level <b><em>N</em></b> according to the widely used
+IJG quality scale, which balances the extent of compression against the
+fidelity of the image when reconstituted. Lower values drop more
+information from the image to achieve higher compression, and therefore
+have lower quality when reconstituted.
+
+<dt><b><tt>-dQFactor=</tt></b><b><em>M</em></b> (float from 0.0 to 1.0)
+<dd>Adobe's QFactor quality scale, which you may use in place of
+<b><tt>JPEGQ</tt></b> above. The QFactor scale is used by PostScript's
+DCTEncode filter but is nearly unheard-of elsewhere.
+</dl>
+</blockquote>
+
+<p>
+At this writing the default JPEG quality level of 75 is equivalent to
+<b><tt>-dQFactor=0.5</tt></b>, but the JPEG default might change in the
+future. The JPEG drivers could be extended to support additional JPEG
+compression options, such as the other DCTEncode filter parameters, but so
+far they haven't been.
+
+<h3><a name="TIFF"></a>TIFF file formats</h3>
+
+<p>
+There are two unrelated sets of TIFF drivers. There are two color TIFF
+drivers that produce uncompressed output:
+
+<blockquote>
+<dl>
+<dt><b><tt>tiff12nc</tt></b>
+<dd>Produces 12-bit RGB output (4 bits per component).
+<dt><b><tt>tiff24nc</tt></b>
+<dd>Produces 24-bit RGB output (8 bits per component).
+</dl>
+</blockquote>
+
+<p>
+The remaining TIFF drivers all produce black-and-white output with different
+compression modes:
+
+<blockquote>
+<dl>
+<dt><b><tt>tiffcrle</tt></b>
+<dd>G3 fax encoding with no EOLs
+<dt><b><tt>tiffg3</tt></b>
+<dd>G3 fax encoding with EOLs
+<dt><b><tt>tiffg32d</tt></b>
+<dd>2-D G3 fax encoding
+<dt><b><tt>tiffg4</tt></b>
+<dd>G4 fax encoding
+<dt><b><tt>tifflzw</tt></b>
+<dd>LZW-compatible (tag = 5) compression
+<dt><b><tt>tiffpack</tt></b>
+<dd>PackBits (tag = 32773) compression
+</dl>
+</blockquote>
+
+<p>
+The black-and-white TIFF drivers support creation of files that are
+comprised of more than a single strip. Multi-strip files reduce the memory
+requirement on the reader, since readers need only store and process one
+strip at a time. These drivers provide two parameters beyond the standard
+set:
+
+<blockquote>
+<dl>
+<dt><b><tt>-dMaxStripSize=</tt><em>N</em></b> (non-negative integer; default = 0)
+<dd>Set the maximum (uncompressed) size of a strip.
+
+<dt><b><tt>-dAdjustWidth=</tt><em>true|false</em></b> (Boolean; default =
+true)
+<dd>If true, then if the requested page width is close to either A4 (1728
+columns) or B4 (2048 columns), set the page width to A4 or B4 respectively.
+</dl></blockquote>
+
+<p>
+The TIFF 6.0 specification, Section 7, page 27, recommends that the size of
+each strip be about 8 Kbytes. As an example, to generate the 'tiger' in
+tiffg4 format that has the recommended strip size, use:
+
+<blockquote><pre>
+gs -sDEVICE=tiffg4 -sOutputFile=tiger.tif -dMaxStripSize=8192 examples/tiger.ps
+</pre></blockquote>
+
+<p>
+If the value of the <b><tt>MaxStripSize</tt></b> parameter is smaller than a
+single image row, then no error will be generated, and the TIFF file will be
+generated correctly using one row per strip. Note that smaller strip sizes
+increase the size of the file by increasing the size of the StripOffsets and
+StripByteCounts tables, and by reducing the effectiveness of the compression
+which must start over for each strip.
+
+<p>
+If the value of MaxStripSize is 0 (the default), then the entire image will
+be a single strip.
+
+
+<hr>
+
+<h2><a name="Display_devices"></a>Display Devices</h2>
+
+<p>
+Ghostscript is often used for screen display of postscript and pdf documents.
+In many cases, a client or 'viewer' application calls the ghostscript engine
+to do the rasterization and handles the display of the resulting image itself,
+but it is also possible to invoke ghostscript directly and select an output
+device which directly handles displaying the image on screen.
+
+<p>
+This section describes the various display-oriented devices that are available
+in ghostscript.
+
+<h3><a name="x11_devices"></a>X Window System</h3>
+
+<p>
+Perhaps the most common use of of a display device is with the X Window System
+on unix-like systems. It is the default device on the command line client on
+such systems, and is used more creatively by the gv client application.
+
+<p>
+The available devices are:
+
+<dl>
+<dt><b>x11</b>
+<dd>This is the default device, handling display on X11R6.
+
+<dt><b>x11alpha</b>
+<dd>This is the x11 device, but with antialiasing. It is equivalent to
+invoking the x11 device with the options <tt>-dGraphicsAlphaBits=4
+-dTextAlphaBits=4 -dMaxBitmap=50000000</tt>.
+
+<dt><b>x11cmyk</b>
+<dd>This device rasterizes the image in the CMKY color space, then flattens
+it to RGB for display. It's intended for testing only.
+
+<dt><b>x11mono</b>
+<dd>This is a strict black-and-white device for 1-bit monochrome displays.
+
+<dt><b>x11gray2</b>
+<dd>This is a device for 2 bpp (4-level) monochrome displays.
+
+<dt><b>x11gray4</b>
+<dd>This is a device for 4 bpp (16-level) monochrome displays.
+</dl>
+
+
+<hr>
+
+<h2><a name="HP_color_inkjet"></a>H-P color inkjet printers</h2>
+
+<p>
+This section, written by George Cameron, deals with the DeskJet 500C,
+DeskJet 550C, PaintJet, PaintJet XL, PaintJet XL300, the DEC LJ250
+operating in PaintJet-compatible mode.
+
+<h3><a name="HP_gdevcdj"></a>Drivers contained in <b><tt>gdevcdj.c</tt></b></h3>
+
+<p>
+The source module <b><tt>gdevcdj.c</tt></b> contains six generic drivers:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <td><b><tt>cdj500</tt></b>
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <td>HP DeskJet 500C and 540C
+<tr valign=top> <td><b><tt>cdj550</tt></b>
+ <td>&nbsp;
+ <td>HP DeskJet 550C, 560C, 660C, 660Cse
+<tr valign=top> <td><b><tt>pjxl300</tt></b>
+ <td>&nbsp;
+ <td>HP PaintJet XL300, DeskJet 1200C, and CopyJet
+<tr valign=top> <td><b><tt>pjtest</tt></b>
+ <td>&nbsp;
+ <td>HP PaintJet
+<tr valign=top> <td><b><tt>pjxltest</tt></b>
+ <td>&nbsp;
+ <td>HP PaintJet XL
+<tr valign=top> <td><b><tt>declj250</tt></b>
+ <td>&nbsp;
+ <td>DEC LJ250
+</table></blockquote>
+
+<p>
+All these drivers have 8-bit (monochrome), 16-bit and 24-bit (colour) and
+for the DJ 550C, 32-bit (colour, CMYK mode) options in addition to standard
+colour and mono drivers. It is also possible to set various
+printer-specific parameters from the command line, for example
+
+<blockquote><b><tt>
+gs&nbsp;-sDEVICE=cDeskJet&nbsp;-dBitsPerPixel=16&nbsp;-dDepletion=1&nbsp;-dShingling=2&nbsp;tiger.ps
+</tt></b></blockquote>
+
+<p>
+<b>Note:</b> the old names <b><tt>cDeskJet</tt></b>,
+<b><tt>cdjcolor</tt></b> and <b><tt>cdjmono</tt></b> drivers have been
+retained; however, their functionality duplicates that available using the
+drivers above (and <b><tt>cDeskJet</tt></b> is identical to
+<b><tt>cdj500</tt></b>). That is, we can use
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <td><b><tt>gs -sDEVICE=cdj500 -dBitsPerPixel=24</tt></b>
+ <td>&nbsp;&nbsp;&nbsp;
+ <td>for <b><tt>cdjcolor</tt></b>, and
+<tr valign=top> <td><b><tt>gs -sDEVICE=cdj500 -dBitsPerPixel=1</tt></b>
+ <td>&nbsp;
+ <td>for <b><tt>cdjmono</tt></b>
+</table></blockquote>
+
+<h3><a name="HP_paper_size"></a>Default paper size</h3>
+
+<p>
+If the preprocessor symbol <b><tt>A4</tt></b> is defined, the default paper
+size is ISO A4; otherwise it is U.S. letter size (see about
+<a href="Use.htm#Known_paper_sizes">paper sizes</a> in the usage
+documentation). You can <a href="Use.htm#Paper_size">specify other paper
+sizes</a> on the command line, including A3 for the PaintJet XL and
+PaintJet XL300, as also explained in the usage documentation.
+
+<h3><a name="HP_limits"></a>DeskJet physical limits</h3>
+
+<p>
+The DeskJet's maximum printing width is 2400 dots, or 8 inches
+(20.32cm). The printer manuals say that the maximum recommended printing
+height on the page is 10.3 inches (26.16cm), but since this is obviously
+not true for A4 paper, and I have been unable to detect any problems in
+printing longer page lengths, this would seem to be a rather artificial
+restriction.
+
+<p>
+All DeskJets have 0.5 inches (1.27cm) of unprintable bottom margin, due to the mechanical
+arrangement used to grab the paper. Side margins are approximately 0.25 inches (0.64cm)
+for U.S. letter paper, and 0.15 inches (0.38cm) for A4.
+
+<h4><a name="HP_command_line"></a>Printer properties (command-line parameters)</h4>
+
+<p>
+Several printer "properties" have been implemented for these printers.
+Those available so far are all integer quantities, and thus may be
+specified, for instance, like
+
+<blockquote>
+<b><tt>gs -dBitsPerPixel=32 -dShingling=1</tt></b> ...
+</blockquote>
+
+<p>
+which sets the <b><tt>BitsPerPixel</tt></b> parameter to 32 and the
+<b><tt>Shingling</tt></b> parameter to 1.
+
+<h4><a name="HP_bpp"></a>Bits per pixel</h4>
+
+<p>
+If the preprocessor symbol <b><tt>BITSPERPIXEL</tt></b> is defined as an
+integer (see below for the range of allowable values), that number defines
+the default bits per pixel (bit depth) for the generic drivers. If the
+symbol is undefined, the default is 24 bits per pixel. It is, of course,
+still possible to specify the value from the command line as described
+below. Note also that the <b><tt>cDeskJet</tt></b>,
+<b><tt>cdjcolor</tt></b> and <b><tt>cdjmono</tt></b> drivers are unaffected
+by setting this symbol, as their default settings are predefined to be 1, 3
+and 24 respectively.
+
+<p>
+All of the drivers in <b><tt>gdevcdj.c</tt></b> accept a command line
+option to set the <b><tt>BitsPerPixel</tt></b> property. This gives
+considerable flexibility in choosing various tradeoffs among speed,
+quality, colour, etc. The valid numbers are:
+
+<blockquote><dl compact>
+<dt><b>1</b>
+<dd>A standard Ghostscript monochrome driver, using black ink (by
+installing the separate mono cartridge in the case of the DeskJet 500C, or
+automatically for the other printers).
+
+<dt><b>3</b>
+<dd>A standard Ghostscript colour driver, using internal dithering. This
+is fast to compute and to print, but the clustered dithering can lose some
+detail and colour fidelity.
+
+<dt><b>8</b>
+<dd>An "error-diffusion" monochrome driver which uses Floyd-Steinberg
+dithering to print greyscale images. The patterns are much more randomised
+than with the normal clustered dithering, but the data files can be much
+larger and somewhat slower to print.
+
+<dt><b>16</b>
+<dd>A "cheaper" version of the 24-bit driver, which generates
+Floyd-Steinberg colour dithered output using the minimum memory (this may
+be helpful when using Ghostscript has not been compiled using a 16-bit
+build environment). The quality can be almost as good as the 24-bit
+version.
+
+<dt><b>24</b>
+<dd>A high-quality colour driver using Floyd-Steinberg dithering for
+maximum detail and colour range. However, it is very memory-intensive, and
+thus can be slow to compute. It tends to produce rather larger raw data
+files, so they can also take longer to print.
+
+<dt><b>32</b>
+<dd>Only for the DeskJet 550C, which uses the black cartridge and the
+colour cartridge simultaneously (that is, CMYK printing). This printer can
+both be faster and give higher quality than the DeskJet 500C, because of
+the true black ink. (Note that the 24-bit mode also permits CMYK printing
+on this printer, and uses less memory. Any differences between 24-bit and
+32-bit should be small.)
+</dl></blockquote>
+
+<h4><a name="HP_DeskJet_properties"></a>DeskJet properties</h4>
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=bottom>
+ <th align=left>Name
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th align=left>Type
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th align=left>&nbsp;
+<tr> <td colspan=5><hr>
+<tr valign=top> <td><b><tt>BlackCorrect</tt></b>
+ <td>&nbsp;
+ <td><b><tt>int</tt></b>
+ <td>&nbsp;
+ <td>Colour correction to give better blacks when using the DJ500C in colour mode. For example, the default of 4 reduces the cyan component to 4/5. Range accepted: 0 - 9 (0 = none).
+<tr valign=top> <td><b><tt>Shingling</tt></b>
+ <td>&nbsp;
+ <td><b><tt>int</tt></b>
+ <td>&nbsp;
+ <td>Interlaced, multi-pass printing: 0 = none, 1 = 50%, 2 = 25%, 2 is best and slowest.
+<tr valign=top> <td><b><tt>Depletion</tt></b>
+ <td>&nbsp;
+ <td><b><tt>int</tt></b>
+ <td>&nbsp;
+ <td>"Intelligent" dot-removal: 0 = none, 1 = 25%, 2 = 50%, 1 best for graphics? Use 0 for transparencies.
+</table></blockquote>
+
+<h4><a name="HP_PaintJet_properties"></a>PaintJet XL300 / PaintJet XL properties</h4>
+
+<blockquote>
+<table cellpadding=0 cellspacing=0>
+<tr valign=bottom>
+ <th align=left>Name
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th align=left>Type
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th align=left>
+<tr> <td colspan=5><hr>
+<tr valign=top> <td><b><tt>PrintQuality</tt></b>
+ <td>&nbsp;
+ <td><b><tt>int</tt></b>
+ <td>&nbsp;
+ <td>Mechanical print quality: -1 = fast, 0 = normal, 1 = presentation. Fast mode reduces ink usage and uses single-pass operation for some media types. Presentation uses more ink and the maximum number of passes, giving slowest printing for highest quality
+<tr valign=top> <td><b><tt>RenderType</tt></b>
+ <td>&nbsp;
+ <td><b><tt>int</tt></b>
+ <td>&nbsp;
+ <td><dl compact>
+ <dt><b>0</b><dd>driver does dithering
+ <dt><b>1</b><dd>snap to primaries
+ <dt><b>2</b><dd>snap black to white, others to black
+ <dt><b>3</b><dd>ordered dither
+ <dt><b>4</b><dd>error diffusion
+ <dt><b>5</b><dd>monochrome ordered dither
+ <dt><b>6</b><dd>monochrome error diffusion
+ <dt><b>7</b><dd>cluster ordered dither
+ <dt><b>8</b><dd>monochrome cluster ordered dither
+ <dt><b>9</b><dd>user-defined dither (not supported)
+ <dt><b>10</b><dd>monochrome user-defined dither ns.
+ </dl>
+</table>
+
+<p>
+The PaintJet (non-XL) has no additional properties.
+
+</blockquote>
+
+<h3><a name="HP_gamma"></a>Gamma correction</h3>
+
+<p>
+One consequence of using Floyd-Steinberg dithering rather than Ghostscript's
+default clustered ordered dither is that it is much more obvious that the
+ink dots are rather larger on the page than their nominal 1/180-inch or 1/300-inch
+size (clustering the dots tends to minimise this effect). Thus it is often
+the case that the printed result is rather too dark. A simple empirical
+correction for this may be achieved by preceding the actual PostScript
+file to be printed by a short file which effectively sets the gamma for
+the device, such as
+
+<blockquote><b><tt>
+gs ... gamma.ps colorpic.ps -c quit
+</tt></b></blockquote>
+
+<p>
+where <b><tt>gamma.ps</tt></b> is
+
+<blockquote>
+<pre>%!
+/.fixtransfer {
+ currentcolortransfer 4 {
+ mark exch
+ dup type dup /arraytype eq exch /packedarraytype eq or
+ 1 index xcheck and { /exec load } if
+ 0.333 /exp load
+ ] cvx 4 1 roll
+ } repeat setcolortransfer
+} bind odef
+.fixtransfer
+/setpagedevice { setpagedevice .fixtransfer } bind odef</pre>
+</blockquote>
+
+<p>
+This does the gamma correction <b><em>after</em></b> whatever correction
+the device might be doing already. To do the correction
+<b><em>before</em></b> the current correction,
+
+<blockquote>
+<pre>%!
+/.fixtransfer {
+ currentcolortransfer 4 {
+ mark 0.333 /exp load 4 -1 roll
+ dup type dup /arraytype eq exch /packedarraytype eq or
+ 1 index xcheck and { /exec load } if
+ ] cvx 4 1 roll
+ } repeat setcolortransfer
+} bind odef
+.fixtransfer
+/setpagedevice { setpagedevice .fixtransfer } bind odef</pre>
+</blockquote>
+
+<p>
+This example sets the gamma for R, G, and B to 3, which seems to work
+reasonably well in practice.
+
+<h3><a name="HP_resolution_enhance"></a>HP's resolution-enhanced mode for Inkjet printers</h3>
+
+<p>
+This feature is available on HP's more recent inkjet printers, including
+the DeskJet 520 (mono), 540 (mono or colour) and 560C (mono and colour).
+The colour and monochrome drivers for the HP DeskJet 550c are (probably)
+the best you will get for use with Ghostscript, for the following reasons.
+
+<p>
+These printers do not offer true 600&times;300dpi resolution. Those that
+print in colour are strictly 300&times;300dpi in colour mode, while in mono
+mode there is a pseudo 600&times;300dpi mode with the restriction that you
+can't print two adjacent dots. In effect what you have is 600dpi dot
+positioning, but on average you don't get more dots per line. This
+provides the possibility, for instance, to have sharper character outlines,
+because you can place dots on the edges nearer to their ideal positions.
+This is why it is worth doing.
+
+<p>
+However, HP will not support user-level programming of this
+resolution-enhanced mode, one reason being that (I understand) all the dot
+spacing has to be done by the driver, and if you get it wrong, you can
+actually damage the print head.
+
+<p>
+To summarise, you may lose a smidgin of (potential) text clarity using the
+550c drivers (<b><tt>cdj550</tt></b>, <b><tt>cdjcolor</tt></b>,
+<b><tt>cdjmono</tt></b> etc.), but other than that, they are the ones for
+the job.
+
+<h3><a name="HP_tips"></a>General tips</h3>
+
+<p>
+For all the printers above, the choice of paper is critically important to
+the final results. The printer manuals suggest type of paper, but in
+general, smoother, less fibrous types give better results. In particular,
+the special ink-jet paper can make a big difference: colours are brighter,
+but most importantly, there is almost no colour bleed, even with adjacent
+areas of very heavy inking. Similarly the special coated transparencies
+also work well (and ordinary transparencies do not work at all!).
+
+<p>
+The Unix procedure <a href="Unix-lpr.htm"><b><tt>unix-lpr.sh</tt></b></a>
+provides one example of setting up a multi-option colour PostScript
+<b><tt>lpr</tt></b> queue on Unix systems, and includes the ability to
+choose a range of different colour options and printer accounting and error
+logging.
+
+<p>
+<b>Caveat emptor!</b> It is not always easy for me to test all of these
+drivers, as the only colour printer I have here is the DeskJet 500C. I rely
+on others to test drivers for the additional machines and report their
+findings back to me.
+
+<hr>
+
+<h2><a name="BJC_8200"></a>Canon BJC-8200 printer</h2>
+
+<p>
+This section was contributed by the author of the <b><tt>uniprint</tt></b>
+configuration files for the Canon BJC-8200, Stephan C. Buchert &lt;<a
+href="mailto:scb@stelab.nagoya-u.ac.jp">scb@stelab.nagoya-u.ac.jp</a>&gt;.
+These files also handle the Japanese Canon F850 printer.
+
+<p>
+Warning: Usage of this program is neither supported nor endorsed by
+the Canon corporation. Please see the Ghostscript <a
+href="Public.htm">license</a> regarding warranty.
+
+<h3>Introduction</h3>
+
+<p>
+The Canon Bubble Jet printer BJC-8200 is designed for printing digital
+photos and halftone images. Software drivers for Windows 95-2000 and Mac are
+usually included and can be downloaded from the Canon web sites like
+<a href="http://consumer.usa.canon.com/bjc/bjc8200/">http://consumer.usa.canon.com/bjc/bjc8200/</a>
+for the US market. If these drivers cannot be used for some reason, then at
+present Ghostscript is probably the alternative giving the best results.
+
+<p>
+The BJC-8200 has features not found among the specs of earlier bubble jet
+models (except the even more advanced BJC-8500) and is advertised to offer:
+
+<ol>
+
+<li>microfine droplet technology;
+
+<li>support for printing on a new type of paper, Photo Paper Pro;
+
+<li>a printhead capable of printing up to 1200 DpI;
+
+<li>individual ink tanks for 6 colors;
+
+<li>an internal status monitor reporting low ink back to a driver;
+
+<li>an optional color scanner cartridge for up to 600 DpI resolution.
+
+</ol>
+
+<p>
+Access to features 5 and 6 requires use of the original Canon drivers for
+the foreseeable future. This README is about getting the printer features
+1-3 working with Ghostscript. No (re)compilation of Ghostscript is normally
+required.
+
+<p>
+Ghostscript comes with a relatively highly configurable driver, called
+<a href="#Uniprint">uniprint</a>, for printers which understand raster
+images in various propriety formats. Most options for this driver are
+usually organized into files having the suffix ".upp." Ghostscript
+versions >= 5.10 (or even earlier) include such uniprint control files
+for the Canon BJC-610. They work also well for some other Canon Bubble
+Jet models, for example for my BJC-35vII. But when using them for a
+BJC-8200 the result is unsatisfactory.
+
+<h3>The uniprint control files for the BJC-8200</h3>
+
+<p>
+After some experimenting with the options for uniprint I have obtained quite
+satisfactory prints with my printer(*). This distribution includes six new
+uniprint control files:
+
+<ul>
+<li>bj8pp12f.upp
+<li>bj8hg12f.upp
+<li>bj8gc12f.upp
+<li>bj8oh06n.upp
+<li>bj8ts06n.upp
+<li>bj8pa06n.upp
+</ul>
+
+<p>
+They are included in Ghostscript >=6.21. For older versions you can put
+them anywhere in the Ghostscript search path (type "gs -h" to see the
+path), but should perhaps add the files to the directory with the
+other *.upp files. This is "/usr/share/ghostscript/gs6.01/lib" in my
+RedHat Linux 6.1 box with Aladdin Ghostscript 6.01.
+
+<p>
+Here is an explanation of my file name convention: the prefix "bj8" should
+perhaps be used for the Canon BJC-8200 and compatible (like the Japanese
+F850 and perhaps the non-Japanese BJC-8500) models. The next two letters
+indicate the print media:
+
+<ul>
+<li>pp "Photo Paper Pro"
+<li>hg "High Gloss Photo Film"
+<li>gc "Glossy Photo Cards"
+<li>oh "OHP transparencies"
+<li>ts "T-shirt transfer"
+<li>pa "Plain Paper"
+</ul>
+
+<p>
+The numbers at positions 6 and 7 indicate the resolution
+
+<ul>
+<li>12 1200x1200 DpIxDpI
+<li>06 600x600 DpIxDpI
+</ul>
+
+<p>
+The last letter stands for a quality factor that effects also the print
+speed (presumably related to the number of passes that the printhead makes).
+
+<ul>
+<li>f highest quality
+<li>n normal quality
+</ul>
+
+<p>
+Printing a postcard size (~10x15 cm^2) image at 1200x1200 DpI^2 takes about
+3 minutes. The output of Ghostscript is then typically 4-5 MByte. The
+bootleneck seems to be the transfer of the raster image in run-length
+encoded Canon format to the printer (via the parallel port on my system) or
+the printer's speed, not Ghostscript or the uniprint renderer.
+
+<h3>Further Optimization for the Canon BJC-8200</h3>
+
+So far I have only experimented with the printer initialization code at the
+beginning of each page (-dupBeginPageCommand) and the resolution (-r). Other
+options, particularly the transfer arrays (-dupBlackTransfer,
+-dupCyanTransfer, -dupMagentaTransfer, -dupYellowTransfer) and the margins
+(-dupMargins) were simply copied from the files for the BJC-610, but they
+may need to be changed for optimized performance.
+
+<p>
+Here is information useful for changing or adding uniprint control files for
+the BJC-8200:
+
+<p>
+In "-dupBeginPageCommand=..." use the line
+
+<blockquote>
+ 1b28 64 0400 04b0 04b0
+</blockquote>
+
+<p>
+for 1200x1200 resolution, and
+
+<blockquote>
+ 1b28 64 0400 0258 0258
+</blockquote>
+
+<p>
+for 600x600. The "-r" option in the control file must of course match this
+line. Other resolutions might work as well, but I didn't try.
+
+<p>
+Crucial are the numbers in the lines like
+
+<blockquote><pre>
+ 1b28 63 0300 3005 04
+ ^ ^
+ Plain Paper 0 4 Highest quality
+ OHP transparency 2 .
+ T-shirt transfer 3 .
+ Glossy Photo Film 5 .
+ High Gloss Paper 6 0 Lowest quality
+ Photo Paper Pro 9
+</pre></blockquote>
+
+<h3>Outlook</h3>
+
+<p>
+Presently uniprint can use the black (K), cyan (C), magenta (M), and
+yellow (Y) colors in the BJC-8200. The unused colors are photo (or
+light) cyan (c) and magenta (m). Also the Canon driver seems to use
+only CMYK, for example when printing on Photo Paper Pro in "Camera" or
+"SuperPhoto" mode. These modes supposedly produce prints of the best
+quality that the Canon driver can offer. Other modes of Canon driver
+do use up to all six color cartridges (CMYKcm). Therefore expanding
+uniprint's capabilities for six colors would be interesting, but it may
+not increase the output quality of 6-color printers such as the
+BJC-8200 drastically.
+
+<p>
+More control files for uniprint could be added in order to offer more
+versatility for controlling the BJC-8200 within a Ghostscript
+installation. The number of possible combinations for media type, resolution
+and print quality factor is very large, many combinations would not make
+much sense, many might be used here and there, but relatively rarely. The
+user would have to remember a name for each combination that is used.
+
+<p>
+A better way would be to let the user patch optionally a user owned or
+system wide uniprint control file before each print via some print
+tool. This is similar to the approach taken by Canon with their driver for
+Windows. Similarly a uniprint tool could also incorporate other functions
+such as printing test and demo pages and the low ink warning once the
+protocol for this is known. Clearly it would be difficult to code such a
+uniprint tool for all the platforms where Ghostscript is running.
+
+<h3>Usage on RedHat Linux</h3>
+
+<p>
+In order to install a BJC-8200 printer on a RedHat Linux system with
+RedHat's printtool, you need also to insert with a text editor the contents
+of the file <b><tt>bj8.rpd</tt></b> into the RedHat printer database
+<b><tt>/usr/lib/rhs/rhs-printfilters/printerdb</tt></b>. Insert it most
+appropriately after the section
+
+<blockquote><pre>
+StartEntry: U_CanonBJC610
+.
+.
+.
+EndEntry
+
+< --- insert here "bj8.rpd" from this distribution:
+< --- StartEntry: U_CanonBJC8200
+ .
+ .
+ .
+</pre></blockquote>
+
+<h3>Contacting the Author</h3>
+
+<p>
+E-mail address: &lt;<a
+href="mailto:scb@stelab.nagoya-u.ac.jp">scb@stelab.nagoya-u.ac.jp</a>&gt;
+
+<p>
+Footnotes:
+
+<p>
+(*) Actually I have a F850, not a BJC-8200. That model is sold for the
+Japanese market only. The specs and also the external look are the
+same as those of the BJC-8200 models for the American and European
+markets. I expect that the raster image mode which is used exclusively
+by Ghostscript is entirely compatible for both models.
+
+<p>
+Stephan C. Buchert
+
+<hr>
+
+<h2><a name="BJC"></a>Other Canon BubbleJet (BJC) printers</h2>
+
+<p>
+This section was contributed by the author of the drivers, Yves Arrouye
+(&lt;<a href="mailto:yves.arrouye@usa.net">yves.arrouye@usa.net</a>&gt;, but
+please do not send questions to him: he no longer maintains these drivers.)
+The drivers handle Canon BJC-600, BJC-4xxx, BJC-70, Stylewriter 2x00, and
+BJC-800 printers.
+
+<h3><a name="BJC_history"></a>History</h3>
+
+<p>
+The BJC-600 driver was written in the first place by Yoshio Kuniyoshi and
+later modified by Yves Arrouye. We tried to make it evolve synchronously,
+though Yoshio cannot be reached since a long time ago. The drivers are
+based on code for the HP printers by George Cameron (in fact, they are in
+the same file!), so he's the first person to thank.
+
+<p>
+The 2.00 version of the drivers was a complete rewrite of the driver
+(arguments, optimization, colour handling, in short: everything!) by Yves
+Arrouye. That release was also the first one to be able to use the full
+width of an A3 paper size. PostScript Printer Description (PPD) files for
+the drivers were released with version 2.15. They are incomplete,
+but they can be used to drive the printers' main features.
+
+<h3><a name="BJC_build"></a>Configuring and building the BJC drivers</h3>
+
+<h4><a name="BJC_defaults"></a>Modify values in
+<b><tt>gdevbjc.h</tt></b></h4>
+
+<p>
+Configure the drivers by modifying the default values in the file
+<b><tt>gdevbjc.h</tt></b> or on the compilation line. If you don't do
+that, the drivers use reasonable defaults that make them work "as
+expected". All default values shown here are defined in that file.
+
+<h4><a name="BJC_CMYK_RGB"></a>CMYK-to-RGB color conversion</h4>
+
+<p>
+By default, the drivers use the same algorithm as Ghostscript to convert
+CMYK colors to RGB. If you prefer to use Adobe formulas, define
+<b><tt>USE_ADOBE_CMYK_RGB</tt></b> when compiling. (See the top of the
+file <b><tt>gdevcdj.c</tt></b> to see the difference between the two.)
+
+<h4><a name="BJC_vertical_centering"></a>Vertical centering of the
+printable area</h4>
+
+<p>
+The drivers center the imageable area horizontally but not vertically, so
+that what can be printed does use the most of the output media. If you
+define <b><tt>BJC_DEFAULT_CENTEREDAREA</tt></b> when compiling, then the
+top and bottom margins will be the same, resulting in a (smaller)
+vertically centered imageable area also.
+
+<h4><a name="BJC_margins"></a>Page margins</h4>
+
+<p>
+If you define <b><tt>USE_RECOMMENDED_MARGINS</tt></b>, then the top and
+bottom margins will be the same (that is,
+<b><tt>BJC_DEFAULT_CENTEREDAREA</tt></b> will be defined for you) and the
+margins will be the 12.4mm recommended by Canon. Since margins are
+complicated (because one must rely on the mechanical precision of the
+printer), the drivers do something about the bottom margin: by default the
+bottom margin is 9.54mm for the BJC-600 driver and 7mm for the BJC-800. If
+you define <b><tt>USE_TIGHT_MARGINS</tt></b>, then the bottom margin is 7mm
+for both drivers (but I never managed to get my own BJC-600 to print a line
+on this low bound, hence the larger default). Regardless of the presence
+of this definition, <b><tt>USE_FIXED_MARGINS</tt></b> will not allow the
+BJC-800 to use the lower 7mm bottom margin, so if you have a problem with
+the bottom margin on a BJC-800, just define that (without defining
+<b><tt>USE_TIGHT_MARGINS</tt></b>, of course).
+
+<p>
+A quick way to be sure the margins you selected is to print a file whose
+contents are:
+
+<blockquote><b><tt>
+%!<br>
+clippath stroke showpage
+</tt></b></blockquote>
+
+<p>
+If the margins are okay, you will get a rectangle visibly surrounding
+the printable area. If they're not correct, one or more of the sides will
+be either incomplete or completely unprinted.
+
+<h4><a name="BJC_compile"></a>Makefile and compilation</h4>
+
+<p>
+Make sure the <b><tt>bjc600</tt></b> or <b><tt>bjc800</tt></b> devices are
+in <a href="Make.htm#Features_and_devices"><b><tt>DEVICE_DEVS</tt></b> in
+the makefile</a>; that is, look in the makefile for your platform and add
+them if necessary -- they may already be there. As of Ghostscript 5.10,
+for instance, one makefile has
+
+<blockquote><b><tt>
+DEVICE_DEVS6=bj10e.dev&nbsp;bj200.dev&nbsp;bjc600.dev&nbsp;bjc800.dev
+</tt></b></blockquote>
+
+<h3><a name="BJC_usage"></a>Use of the drivers</h3>
+
+<p>
+There are two drivers here. The "<b><tt>bjc600</tt></b>" one supports the BJC-600 and
+BJC-4xxx (maybe the BJC-70 as well) and the "<b><tt>bjc800</tt></b>" one supports the
+BJC-800 series. Remarks here that apply to both drivers use the name
+"bjc".
+
+<h4><a name="BJC_options"></a>Supported Options and Defaults</h4>
+
+<p>
+Note: "options", "properties", and "parameters" designate the same thing:
+device parameters that you can change.
+
+<p>
+Giving an option an incorrect value causes an error. Unless stated
+otherwise, this error will be a rangecheckerror. Options may be set from
+the Ghostscript command line (using the <b><tt>-d</tt></b> and
+<b><tt>-s</tt></b> switches or other predetermined switches if they have an
+effect on the driver) or using the PostScript Level 2
+<b><tt>setpagedevice</tt></b> operator if Ghostscript has been compiled
+with the <b><tt>level2</tt></b> or <b><tt>level3</tt></b> device (which it should
+<b><tt>;-)</tt></b>). There are <b>no</b> special-purpose operators such as
+one was able to find in Level 1 printers.
+
+<p>
+The bjc uses 24 bits per pixel by default (unless you change the value of
+<b><tt>BJC_BITSPERPIXEL</tt></b>), corresponding to CMYK printing.
+Supported modes are 1 bpp and 4 bpp (gray levels), 8 bpp, 16 bpp, 24 bpp
+and 32 bpp (colours). Colours are preferably stored in the CMYK model
+(which means, for example, that with 16 bpp there are only 16 different
+shades of each color) but it is possible to store them as RGB color for
+some depths. Some modes do Floyd-Steinberg dithering and some don't, but
+use the default Ghostscript halftoning (in fact, when halftoning is used,
+dithering takes also place but because of the low point density it is
+usually not efficient, and thus invisible).
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Descriptions of printing modes by bpp and <b><tt>Colors</tt></b></font><hr>
+<tr valign=bottom>
+ <th align=left>bpp
+ <td>&nbsp;&nbsp;&nbsp;
+ <th align=left><b><tt>Colors</tt></b>
+ <td>&nbsp;&nbsp;&nbsp;
+ <th align=left>Mode
+<tr> <td colspan=5><hr>
+<tr valign=top> <td>32
+ <td>&nbsp;
+ <td align=center>4
+ <td>&nbsp;
+ <td>CMYK colour printing, Floyd-Steinberg dithering
+<tr valign=top> <td>24
+ <td>&nbsp;
+ <td align=center>4
+ <td>&nbsp;
+ <td>The same. (But each primary colour is stored on 6 bits instead of 8.)
+<tr valign=top> <td>24
+ <td>&nbsp;
+ <td align=center>3
+ <td>&nbsp;
+ <td>RGB colour printing, Floyd-Steinberg dithering. This mode does
+ <b><tt>not</tt></b> use the black cartridge (that's why it
+ exists, for when you don't want to use it <b><tt>;-)</tt></b>).
+ Each primary colour is stored in 8 bits as in the 32/4 mode,
+ but black generation and under-color removal are done on the
+ driver side and not by Ghostscript, so you have no control over
+ it. (This mode is no longer supported in this driver.)
+<tr valign=top> <td>16
+ <td>&nbsp;
+ <td align=center>4
+ <td>&nbsp;
+ <td>CMYK colour printing, halftoned by Ghostscript. F-S dithering
+ is still visible here (but the halftone patterns are visible
+ too!).
+<tr valign=top> <td>8
+ <td>&nbsp;
+ <td align=center>4
+ <td>&nbsp;
+ <td>The same. (But each primary colour is stored in 2 bits instead of 4.)
+<tr valign=top> <td>8
+ <td>&nbsp;
+ <td align=center>3
+ <td>&nbsp;
+ <td>RGB colour printing. This mode is not intended for use. What I
+ mean is that it should be used only if you want to use custom
+ halftone screens <b>and</b> the halftoning is broken using the
+ 8/4 mode (some versions of Ghostscript have this problem).
+<tr valign=top> <td>8
+ <td>&nbsp;
+ <td align=center>1
+ <td>&nbsp;
+ <td>Gray-level printing, Floyd-Steinberg dithering
+<tr valign=top> <td>1
+ <td>&nbsp;
+ <td align=center>1
+ <td>&nbsp;
+ <td>Gray-level printing halftoned by Ghostscript
+</table></blockquote>
+
+<p>
+These modes are selected using the <b><tt>BitsPerPixel</tt></b> <b>and</b>
+<b><tt>Colors</tt></b> integer options (either from the command line or in
+a PostScript program using <b><tt>setpagedevice</tt></b>). See below.
+
+<p>
+A note about darkness of what is printed: Canon printers do print dark,
+really. And the Floyd-Steinberg dithering may eventually darken your image
+too. So you may need to apply gamma correction by calling Ghostscript as in
+
+<blockquote><b><tt>
+gs -sDEVICE=bjc600 gamma.ps myfile.ps
+</tt></b></blockquote>
+
+<p>
+where <b><tt>gamma.ps</tt></b> changes the gamma correction (here to 3 for
+all colors); 0.45 gives me good results, but your mileage may vary. The
+bigger the value the lighter the output:
+
+<blockquote><b><tt>
+{ 0.45 exp } dup dup currenttransfer setcolortransfer
+</tt></b></blockquote>
+
+<p>
+The drivers support printing at 90dpi, 180dpi and 360dpi. Horizontal and
+vertical resolutions must be the same or a limitcheck error will happen. A
+rangecheck will happen too if the resolution is not
+90&nbsp;&times;2^<small><sup><b>N</b></sup></small>. If the driver
+is compiled with <b><tt>-DBJC_STRICT</tt></b> a rangecheck also happens if
+the resolution is not one of those supported. This is not the case, as we
+expect that there may be a 720dpi bjc some day.
+
+<p>
+Here are the various options supported by the bjc drivers, along with
+their types, supported values, effects, and usage:
+
+<dl>
+<dt><b><tt>BitsPerPixel</tt></b> (int)
+<dd>Choose the depth of the page. Valid values are 1, 8, 16, 24 (the
+default) and 32.
+
+<p>
+Note that when this is set for the first time, the <b><tt>Colors</tt></b>
+property is automatically adjusted unless it is also specified. The table
+here shows the corresponding color models and the rendering method visible:
+"GS" for Ghostscript halftoning and "F-S" for Floyd-Steinberg dithering.
+When both are present it means that the dithering of halftones is visible.
+Default choices are indicated by asterisk "*".
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=9 bgcolor="#CCCC00"><hr><font size="+1">Valid <b><tt>Colors</tt></b> values for<br>allowed <b><tt>BitsPerPixel</tt></b> values
+</font><hr>
+<tr valign=bottom>
+ <th align=left>bpp
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th align=left><b><tt>Colors</tt></b>
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th align=left>&nbsp;
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th align=left>Color model
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th align=left>Dithering
+<tr> <td colspan=9><hr>
+<tr valign=top> <td>32
+ <td>&nbsp;
+ <td align=center>4
+ <td>&nbsp;
+ <td>&nbsp;
+ <td align=center>&nbsp;
+ <td>CMYK
+ <td>&nbsp;
+ <td>F-S
+<tr valign=top> <td>24
+ <td>&nbsp;
+ <td align=center>4
+ <td>&nbsp;
+ <td><b>*</b>
+ <td align=center>&nbsp;
+ <td>CMYK
+ <td>&nbsp;
+ <td>F-S
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td align=center>3
+ <td>&nbsp;
+ <td>&nbsp;
+ <td align=center>&nbsp;
+ <td>RGB
+ <td>&nbsp;
+ <td>F-S
+<tr valign=top> <td>16
+ <td>&nbsp;
+ <td align=center>4
+ <td>&nbsp;
+ <td>&nbsp;
+ <td align=center>&nbsp;
+ <td>CMYK
+ <td>&nbsp;
+ <td>GS, F-S
+<tr valign=top> <td>8
+ <td>&nbsp;
+ <td align=center>4
+ <td>&nbsp;
+ <td><b>*</b>
+ <td align=center>&nbsp;
+ <td>CMYK
+ <td>&nbsp;
+ <td>GS
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td align=center>3
+ <td>&nbsp;
+ <td>&nbsp;
+ <td align=center>&nbsp;
+ <td>RGB
+ <td>&nbsp;
+ <td>GS
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td align=center>1
+ <td>&nbsp;
+ <td>&nbsp;
+ <td align=center>&nbsp;
+ <td>K (CMYK)
+ <td>&nbsp;
+ <td>F-S
+<tr valign=top> <td>1
+ <td>&nbsp;
+ <td align=center>1
+ <td>&nbsp;
+ <td><b>*</b>
+ <td align=center>&nbsp;
+ <td>K (CMYK)
+ <td>&nbsp;
+ <td>GS
+</table></blockquote>
+
+<p>Also note that automagical change of one parameter depending on the
+other one does not work in a <b><tt>setpagedevice</tt></b> call. This
+means that if you want to change <b><tt>BitsPerPixel</tt></b> to a value
+whose valid <b><tt>Colors</tt></b> values do not include the actual
+<b><tt>Colors</tt></b> value, you must change <b><tt>Colors</tt></b> too.
+</dl>
+
+<dl>
+<dt><b><tt>Colors</tt></b> (int)
+<dd>Choose the number of color components from among 1, 3 and 4 (the
+default). This setting cannot be used in a PostScript program, only on
+Ghostscript's command line. See <b><tt>ProcessColorModel</tt></b> below
+for what to use to change the number of colors with PostScript code.
+
+<p>
+Note that setting this property does limit the choices of
+<b><tt>BitsPerPixel</tt></b>. As for the previous property, its first
+setting may induce a setting of the "other value"
+(<b><tt>BitsPerPixel</tt></b> here). The table here indicates valid
+combinations with "V", default values with asterisk "*".
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=13 bgcolor="#CCCC00"><hr><font size="+1">Valid <b><tt>BitsPerPixel</tt></b> values<br>for allowed <b><tt>Colors</tt></b> values</font><hr>
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <th align=left colspan=9><b><tt>BitsPerPixel</tt></b> OK values<hr>
+<tr valign=top> <th>Colors
+ <td>&nbsp;&nbsp;
+ <th>Type
+ <td>&nbsp;&nbsp;
+ <td>32
+ <td>&nbsp;&nbsp;
+ <td>24
+ <td>&nbsp;&nbsp;
+ <td>16
+ <td>&nbsp;&nbsp;
+ <td>8
+ <td>&nbsp;&nbsp;
+ <td>1
+<tr> <td colspan=13><hr>
+<tr valign=top> <td>4
+ <td>&nbsp;
+ <td>CMYK
+ <td>&nbsp;
+ <td><b>V</b>
+ <td>&nbsp;
+ <td><b>*</b>
+ <td>&nbsp;
+ <td><b>V</b>
+ <td>&nbsp;
+ <td><b>V</b>
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>3
+ <td>&nbsp;
+ <td>RGB
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td><b>*</b>
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td><b>V</b>
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>1
+ <td>&nbsp;
+ <td>K
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td><b>V</b>
+ <td>&nbsp;
+ <td><b>*</b>
+</table></blockquote>
+
+<p>Also note that automagical change of one parameter depending on the
+other one does not work in a <b><tt>setpagedevice</tt></b> call. This
+means that if you want to change <b><tt>Colors</tt></b> to a value whose
+valid <b><tt>BitsPerPixel</tt></b> values don't include the actual
+<b><tt>BitsPerPixel</tt></b> value, you must change
+<b><tt>BitsPerPixel</tt></b> too.
+</dl>
+
+<dl>
+<dt><b><tt>ProcessColorModel</tt></b> (symbol)
+<dd>A symbol taken from <b><tt>/DeviceGray</tt></b>,
+<b><tt>/DeviceRGB</tt></b> or <b><tt>/DeviceCMYK</tt></b> which can be used
+to select 1, 3 or 4 colors respectively. Note that this parameter takes
+precedence over <b><tt>Colors</tt></b>, and that both affect the same
+variable of the driver. (See <b><tt>Colors</tt></b> above for values
+combined with <b><tt>BitsPerPixel</tt></b>.)
+</dl>
+
+<dl>
+<dt><b><tt>HWResolution</tt></b> (floats array)
+<dd>An array of two floats giving the horizontal and vertical resolution in
+dots per inch from among 90, 180 and 360 (the default). Both values must
+be the same. On the Ghostscript command line, the resolution may be
+changed with the <a href="Use.htm#Resolution_switch"><b><tt>-r</tt></b>
+switch</a>.
+</dl>
+
+<dl>
+<dt><b><tt>ManualFeed</tt></b> (bool)
+<dd>Indicate that the sheets won't be fed automatically by the printer,
+<b><tt>false</tt></b> by default. (Not meaningful on the BJC-600, I fear.)
+</dl>
+
+<dl>
+<dt><b><tt>MediaType</tt></b> (string)
+<dd>The media to print on, chosen from among "<b><tt>PlainPaper</tt></b>",
+"<b><tt>CoatedPaper</tt></b>", "<b><tt>TransparencyFilm</tt></b>",
+"<b><tt>Envelope</tt></b>", "<b><tt>Card</tt></b>" and
+"<b><tt>Other</tt></b>". Default is "<b><tt>PlainPaper</tt></b>". For
+"<b><tt>Envelope</tt></b>", "<b><tt>Card</tt></b>" or
+"<b><tt>Other</tt></b>" the driver puts the printer into thick mode
+automatically regardless of the actual media weight.
+</dl>
+
+<dl>
+<dt><b><tt>MediaWeight</tt></b> (int or null)
+<dd>The weight of the media in grams per square meter. Null (the default)
+indicates that the weight is of no importance. If the specified media
+weight is greater than 105 (that is, the value of the compilation default
+<b><tt>BJC</tt></b>???<b><tt>_MEDIAWEIGHT_THICKLIMIT</tt></b>) then the
+printer will be set to use thick paper.
+</dl>
+
+<dl>
+<dt><b><tt>PrintQuality</tt></b> (string)
+<dd>The quality of printing.
+<table cellpadding=0 cellspacing=0>
+<tr valign=bottom>
+ <th align=left>Value
+ <td>&nbsp;&nbsp;
+ <th align=left><b><tt>bjc600</tt></b>
+ <td>&nbsp;&nbsp;
+ <th align=left><b><tt>bjc800</tt></b>
+ <td>&nbsp;&nbsp;
+ <th align=left>&nbsp;
+<tr> <td colspan=7><hr>
+<tr valign=top> <td><b><tt>Low</tt></b>
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td align=center><b>X</b>
+ <td>&nbsp;
+ <td>Has the effect of making only two printing passes instead of four, so should be twice the speed; known as "CN" (Color Normal) mode
+<tr valign=top> <td><b><tt>Draft</tt></b>
+ <td>&nbsp;
+ <td align=center><b>X</b>
+ <td>&nbsp;
+ <td align=center><b>X</b>
+ <td>&nbsp;
+ <td>Unlights the "HQ" light on a BJC-600
+<tr valign=top> <td><b><tt>Normal</tt></b>
+ <td>&nbsp;
+ <td align=center><b>X</b>
+ <td>&nbsp;
+ <td align=center><b>X</b>
+ <td>&nbsp;
+ <td>Default for both drivers; lights the "HQ" light on a BJC-600
+<tr valign=top> <td><b><tt>High</tt></b>
+ <td>&nbsp;
+ <td align=center><b>X</b>
+ <td>&nbsp;
+ <td align=center><b>X</b>
+ <td>&nbsp;
+ <td>Means 200% black and 100% CMY; lights the "Bk+" light on a BJC-600
+</table>
+</dl>
+
+<dl>
+<dt><b><tt>DitheringType</tt></b> (string)
+<dd>Dithering algorithm from between "<b><tt>Floyd-Steinberg</tt></b>" and
+"<b><tt>None</tt></b>". "<b><tt>None</tt></b>" is the default for 1/1 print
+mode, "<b><tt>Floyd-Steinberg</tt></b>" for other modes. At the moment
+this parameter is read-only, though no error is generated if one tries to
+change it. This parameter is not of much value at the moment and is here
+mainly to reserve the name for future addition of dithering algorithms.
+</dl>
+
+<dl>
+<dt><b><tt>PrintColors</tt></b> (int)
+<dd>Mask for printing color. If 0, use black for any color; otherwise the
+value must be the sum of any of 1 (cyan), 2 (magenta), 4 (yellow) and 8
+(black), indicating which colors will be used for printing. When printing
+colour, only colours specified will be printed (this means that some planes
+will be missing if a color's value above is omitted). When printing grays,
+black is used if it is present in the <b><tt>PrintColors</tt></b>;
+otherwise, the image is printed by superimposing each requested color.
+</dl>
+
+<dl>
+<dt><b><tt>MonochromePrint</tt></b> (bool)
+<dd><b>For <tt>bjc600</tt> only</b>, <b><tt>false</tt></b> by default.
+Substitute black for Cyan, Magenta and Yellow when printing -- useful, for
+example, to get some monochrome output of a dithered printing This is a
+hardware mechanism as opposed to the previous software one. I think that
+using this or setting <b><tt>PrintColors</tt></b> to 0 will give the same
+results.
+</dl>
+
+<p>
+Note that the <b><tt>MediaType</tt></b> and <b><tt>ThickMedia</tt></b>
+options will be replaced by the use of the device
+<b><tt>InputAttributes</tt></b> and <b><tt>OutputAttributes</tt></b> as
+soon as possible. Please note too that the print mode may be reset at the
+start of printing, not at the end. This is the expected behaviour. If you
+need to reset the printer to its default state, simply print a file that
+does just a <b><tt>showpage</tt></b>.
+
+<h4><a name="BJC_device_info"></a>Device information</h4>
+
+<p>
+Here is other information published by the driver that you will find
+in the <b><tt>deviceinfo</tt></b> dictionary.
+
+<dl>
+<dt><b><tt>OutputFaceUp</tt></b> (bool)
+<dd>This has the boolean value <b><tt>true</tt></b>, indicating that the
+sheets are stacked face up.
+</dl>
+
+<dl>
+<dt><b><tt>Version</tt></b> (float)
+<dd>In the form <b>M.</b><em>mm</em>pp, where <b>M</b> is the major
+version, <em>mm</em> the bjc driver's minor version, and pp the specific
+driver minor version (that is, <b><tt>M.</tt></b><em>mm</em> will always be
+the same for the <b><tt>bjc600</tt></b> and <b><tt>bjc800</tt></b>
+drivers).
+</dl>
+
+<dl>
+<dt><b><tt>VersionString</tt></b> (string)
+<dd> A string showing the driver version and other indications. At the
+moment, things like "a" or "b" may follow the version to indicate alpha or
+beta versions. The date of the last change to this version is given in the
+form MM/DD/YY (no, it won't adapt to your locale).
+</dl>
+
+<h4><a name="BJC_HW_margins"></a>Hardware margins</h4>
+
+<p>
+The BJC printers have top and bottom hardware margins of 3mm and 7.1mm
+respectively (Canon says 7mm, but this is unusable because of the rounding
+of paper sizes to PostScript points). The left margin is 3.4mm for A4 and
+smaller paper sizes, 6.4mm for U.S. paper sizes, envelopes and cards. It
+is 4.0mm for A3 paper on the BJC-800.
+
+<p>
+The maximum printing width of a BJC-600 printer is 203mm. The maximum
+printing width of a BJC-800 printer is 289mm on A3 paper, 203mm on
+U.S. letter and ISO A4 paper.
+
+<h4><a name="BJC_PPD"></a>PostScript printer description (PPD) files</h4>
+
+<p>
+The files <b><tt>CBJC600.PPD</tt></b> and <b><tt>CBJC800.PPD</tt></b> (whose
+long names are, respectively, <b><tt>Canon_BubbleJetColor_600.ppd</tt></b>
+and <b><tt>Canon_BubbleJetColor_800.ppd</tt></b>) are PPD files to drive the
+features of the <b><tt>bjc600</tt></b> and <b><tt>bjc800</tt></b> drivers.
+They can be used, for example, on NextStep systems (presumably on OpenStep
+systems too) and on Unix systems with Adobe's TranScript and
+<b><tt>pslpr</tt></b> (not tested). The files are not complete at the
+moment. Please note that NextStep's printing interface does not
+correctly enforce constraints specified in these files (in UIConstraints
+descriptions): you must force yourself to use valid combinations of
+options.
+
+<h4><a name="BJC_PPD_custom"></a>Customizing the PPD files</h4>
+
+<p>
+By default the PPD files are set for U.S. letter size paper, and they use a
+normalized transfer function. If you choose to use A4 printing by default,
+you must replace "<b><tt>Letter</tt></b>" with "<b><tt>A4</tt></b>" in
+these (noncontiguous) lines:
+
+<blockquote>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[...]<br>
+<b><tt>*DefaultPageSize: Letter<br></tt></b>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[...]<br>
+<b><tt>*DefaultRegion: Letter<br></tt></b>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[...]<br>
+<b><tt>*DefaultImageableArea: Letter</tt></b><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[...]<br>
+</blockquote>
+
+<p>
+Some versions of Ghostscript have problems with normalized colors, which
+makes them add magenta in gray levels. If you experience this problem,
+in the PPD file replace the line
+
+<blockquote><b><tt>
+*DefaultTransfer: Normalized
+</tt></b></blockquote>
+
+<p>
+with the alternate line
+
+<blockquote><b><tt>
+*DefaultTransfer: Null
+</tt></b></blockquote>
+
+<p>
+The "thick media" option is implemented by choosing a value of 120 or 80
+(for thick and thin media respectively) for the <b><tt>MediaWeight</tt></b>
+feature of the drivers. If you ever change the threshold for thick media
+in the driver code, you may need to change the values in the PPD files too.
+
+<p>
+All customization should be done using the "<b><tt>*Include:</tt></b>"
+feature of PPD files so that your local changes will be retained if you
+update the PPD files.
+
+<h3><a name="BJC_bugs"></a>How to report problems</h3>
+
+<p>
+Yves Arrouye no longer maintains this driver, and will not answer questions
+about it. If you are posting a question about it in a public form, please
+be as descriptive as possible, and please send information that can be used
+to reproduce the problem. Don't forget to say which driver you use, and in
+what version. Version information can be found in the source code of the
+driver or by issuing the following command in a shell:
+
+<blockquote><b><tt>
+echo&nbsp;"currentpagedevice&nbsp;/VersionString&nbsp;get&nbsp;=="&nbsp;|&nbsp;gs&nbsp;-q&nbsp;-sDEVICE=bjc600&nbsp;-
+</tt></b></blockquote>
+
+<h3><a name="BJC_acks"></a>Acknowledgements</h3>
+
+<p>
+I am particularly grateful to Yoshio Kuniyoshi &lt;<a
+href="mailto:yoshio@nak.math.keio.ac.jp">yoshio@nak.math.keio.ac.jp</a>&gt;
+without whom I'd never make these drivers, and also to L. Peter Deutsch,
+who answered all my (often silly) questions about Ghostscript's driver
+interface.
+
+<p>
+Thanks also to the people who volunteered to beta-test the v2.x BJC
+drivers: David Gaudine
+&lt;<a href="mailto:david@donald.concordia.ca">david@donald.concordia.ca</a>&gt;,
+Robert M. Kenney &lt;<a href="mailto:rmk@unh.edu">rmk@unh.edu</a>&gt;,
+James McPherson
+&lt;<a href="mailto:someone@erols.com">someone@erols.com</a>&gt;
+and Ian Thurlbeck
+&lt;<a href="mailto:ian@stams.strath.ac.uk">ian@stams.strath.ac.uk</a>&gt;
+(listed alphabetically) were particularly helpful by discovering bugs and
+helping find out exact paper margins on printers I don't have access to.
+
+<p>
+And many thanks to Klaus-Gunther Hess
+&lt;<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>&gt; for looking
+at the dithering code and devising a good CMYK dithering algorithm for the
+Epson Stylus Color, which I then adapted to the code of these drivers.
+
+<hr>
+
+<h2><a name="STC_epson_stylus"></a>Epson Stylus color printer (see also <b><tt>uniprint</tt></b>)</h2>
+
+<p>
+This section was contributed by Gunther Hess
+&lt;<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>&gt;, who also wrote
+<b><tt>uniprint</tt></b>, a later set of drivers. You should probably see
+the section on <a href="#Uniprint"><b><tt>uniprint</tt></b></a> for whether
+it might be better for your uses than this driver.
+
+<h3><a name="STC_usage"></a>Usage</h3>
+
+<p>
+
+This driver is selected with "<b><tt>-sDEVICE=stcolor</tt></b>", producing
+output for an Epson Stylus Color at 360dpi resolution by default. But it
+can do much more with this printer, and with significantly better quality,
+than with the default mode; and it can also produce code for monochrome
+versions of the printer. This can be achieved via either command-line
+options or Ghostscript input. For convenience a PostScript file is
+supplied for use as an initial input file. Try the following command:
+
+<blockquote>
+<b><tt>gs -sDEVICE=stcolor -r</tt></b><b>{Xdpi}</b><b><tt>x</tt></b><b>{Ydpi}</b><b><tt> stcolor.ps</tt></b> <b>{YourFile.ps}</b>
+</blockquote>
+
+<p>
+where <b>{Xdpi}</b> is one of 180, 360, or 720 and <b>{Ydpi}</b> is one of
+90, 180, 360, or 720. The result should be significantly better. You may
+use <b><tt>stcolor.ps</tt></b> with other devices too, but I do not
+recommend this, since it does nothing then. <b><tt>stcolor.ps</tt></b>
+should be available with binary distributions and should reside in the same
+directory as other Ghostscript initialization files or in the same
+directory as the files to be printed. Thus if Ghostscript is part of your
+printer-spooler, you can insert
+
+<blockquote><b><tt>
+(stcolor.ps) findlibfile { pop run } if pop
+</tt></b></blockquote>
+
+<p>
+in files you want to use the improved algorithms. You may want to adapt
+<b><tt>stcolor.ps</tt></b> file to your specific needs. The methods and
+options for this are described here, but this description is restricted to
+Ghostscript options, while their manipulation at the PostScript level is
+documented in the material on <a href="Language.htm">the relationship of
+Ghostscript and PostScript</a> and in <b><tt>stcolor.ps</tt></b>.
+
+<h3><a name="STC_options"></a>Options</h3>
+
+<p>
+Now to explain the options (as written on my UNIX system). The order is
+somehow related to their use during the printing process:
+
+<dl>
+<dt><b><tt>-dUnidirectional</tt></b>
+<dd>Force unidirectional printing, recommended for transparencies
+</dl>
+
+<dl>
+<dt><b><tt>-dMicroweave</tt></b>
+<dd>Enable the printer's "microweave" feature; see
+"<a href="#What_is_weaving">What is weaving?</a>" below.
+</dl>
+
+<dl>
+<dt><b><tt>-dnoWeave</tt></b>
+<dd>Disable any Weaving (overrides <b><tt>-dMicroweave</tt></b>)
+</dl>
+
+<dl>
+<dt><b><tt>-dSoftweave</tt></b>
+<dd>Enable the driver's internal weaving. Note that <b><tt>Softweave</tt></b> works <b>only</b> with the original Stylus Color and the PRO-Series.
+</dl>
+
+<dl>
+<dt><b><tt>-sDithering=</tt></b><em>{name}</em>
+<dd>Select another dithering algorithm (name) from among
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <td><b><tt>gscmyk</tt></b>
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <td>fast color output, CMYK process color model (default)
+<tr valign=top> <td><b><tt>gsmono</tt></b>
+ <td>&nbsp;
+ <td>fast monochrome output
+<tr valign=top> <td><b><tt>gsrgb</tt></b>
+ <td>&nbsp;
+ <td>fast color output, RGB process color model
+<tr valign=top> <td><b><tt>fsmono</tt></b>
+ <td>&nbsp;
+ <td>Floyd-Steinberg, monochrome
+<tr valign=top> <td><b><tt>fsrgb</tt></b>
+ <td>&nbsp;
+ <td>Floyd-Steinberg, RGB process color model (almost identical to the <b><tt>cdj550</tt></b>/<b><tt>bjc</tt></b> algorithm)
+<tr valign=top> <td><b><tt>fsx4</tt></b>
+ <td>&nbsp;
+ <td>Floyd-Steinberg, CMYK process color model (shares code with <b><tt>fsmono</tt></b> and <b><tt>fsrgb</tt></b>, but is algorithmically really bad)
+<tr valign=top> <td><b><tt>fscmyk</tt></b>
+ <td>&nbsp;
+ <td>Floyd-Steinberg, CMYK process color model and proper modifications for CMYK
+<tr valign=top> <td><b><tt>hscmyk</tt></b>
+ <td>&nbsp;
+ <td>modified Floyd-Steinberg with CMYK model ("hs" stands for "hess" not for "high speed", but the major difference from <b><tt>fscmyk</tt></b> is speed)
+<tr valign=top> <td><b><tt>fs2</tt></b>
+ <td>&nbsp;
+ <td>algorithm by Steven Singer (RGB) should be identical to <b><tt>escp2cfs2</tt></b>.
+</table></blockquote>
+</dl>
+
+<dl>
+<dt><b><tt>-dBitsPerPixel=</tt></b><em>{1...32}</em>
+<dd>number of bits used for pixel storage; the larger the value, the better
+the quality -- at least in theory. In <b><tt>fsrgb</tt></b> one can gain
+some speed by restricting to 24 bits rather than the default 30.
+</dl>
+
+<dl>
+<dt><b><tt>-dFlag0</tt></b>
+<dd>causes some algorithms to select a uniform initialisation rather than a
+set of random values. May yield a sharper image impression at the cost of
+dithering artifacts. (Applies to <b><tt>hscmyk</tt></b> and all fs modes,
+except for fs2, which always uses a constant initialization.)
+</dl>
+
+<dl>
+<dt><b><tt>-dFlag1</tt></b> ... <b><tt>-dFlag4</tt></b>
+<dd>Available for future algorithms.
+</dl>
+
+<dl>
+<dt><b><tt>-dColorAdjustMatrix='{</tt></b><em>three, nine, or sixteen
+floating-point values</em><b><tt>}'</tt></b>
+<dd>This is a matrix to adjust the colors. Values should be between -1.0
+and 1.0, and the number of values depends on the color model the selected
+algorithm uses. In RGB and CMYK modes a matrix with 1.0 on the diagonal
+produces no transformation. This feature is really required, but I could
+not identify a similar feature at the language level, so I implemented it,
+but I don't know reasonable values yet.
+</dl>
+
+<dl>
+<dt><b><tt>-dCtransfer='{</tt></b><em>float float ...</em><b><tt>}'</tt></b> or
+<dt><b><tt>-dMtransfer=</tt></b>..., <b><tt>-dY</tt></b>..., <b><tt>-dK</tt></b>... or
+<dt><b><tt>-dRtransfer='{</tt></b><em>float float ...</em><b><tt>}'</tt></b> or
+<dt><b><tt>-dG</tt></b>..., <b><tt>-dB</tt></b>... or
+<dt><b><tt>-dKtransfer='{</tt></b><em>float float ...</em><b><tt>}'</tt></b>
+<dd>Which you use depends on the algorithm, which may be either either
+CMYK, RGB or monochrome. The values are arrays of floats in the range from
+0 to 1.0, representing the visible color intensity for the device. One may
+achieve similar effects with <b><tt>setcolortransfer</tt></b> at the
+language level, but this takes more time and the underlying code for the
+driver-specific parameters is still required. The size of the arrays is
+arbitrary and the defaults are "<b><tt>{0.0&nbsp;1.0}</tt></b>", which is a
+linear characteristic. Most of the code in <b><tt>stcolor.ps</tt></b> are
+better transfer arrays.
+</dl>
+
+<dl>
+<dt><b><tt>-dKcoding='{</tt></b><em>float...</em><b><tt>}'</tt></b>
+<dt><b><tt>-dC</tt></b>..., <b><tt>-dM</tt></b>... etc.
+<dd>Arrays between 0.0 and 1.0, controlling the internal coding of the
+color values. Clever use of these arrays may yield further enhancements,
+but I have no experience yet. (To be discontinued with version 2.x.)
+</dl>
+
+<dl>
+<dt><b><tt>-sModel=st800</tt></b>
+<dd>Causes output to be suitable for the monochrome Stylus 800 (no weaving,
+no color).
+</dl>
+
+<dl>
+<dt><b><tt>-sOutputCode=</tt></b><em>{name}</em>
+<dd>Can be either "<b><tt>plain</tt></b>", "<b><tt>runlength</tt></b>" or
+"<b><tt>deltarow</tt></b>" and changes the ESC/P2 coding technique
+used by the driver. The default is to use runlength encoding.
+"<b><tt>plain</tt></b>" selects uncompressed encoding and generates
+enormous amounts of data.
+</dl>
+
+<dl>
+<dt><b><tt>-descp_Band=</tt></b><em>1/8/15/24</em>
+<dd>Number of nozzles of scanlines used in printing, Useful only with
+<b><tt>-dnoWeave</tt></b>. Larger Values yield smaller code, but this
+doesn't increase the printing speed.
+</dl>
+
+<dl>
+<dt><b><tt>-descp_Width=</tt></b><em>N</em>
+<dd>Number of pixels Printed in each scan Line. (Useful only when tuning
+margins; see below)
+</dl>
+
+<dl>
+<dt><b><tt>-descp_Height=</tt></b><em>pixels</em>
+<dd>Length of the entire page in pixels. (Parameter of
+"<b><tt>ESC(C</tt></b>" in default initialization.)
+</dl>
+
+<dl>
+<dt><b><tt>-descp_Top=</tt></b><em>scan lines</em>
+<dd>Top margin in scan lines. (First parameter of "<b><tt>ESC(c</tt></b>"
+in default initialization.)
+</dl>
+
+<dl>
+<dt><b><tt>-descp_Bottom=</tt></b><em>scan lines</em>
+<dd>Bottom margin in scan lines. (Second parameter of
+"<b><tt>ESC(c</tt></b>" in default initialization.)
+</dl>
+
+<dl>
+<dt><b><tt>-sescp_Init=</tt></b>"<em>string</em>"
+<dd>Override for the initialization sequence. (Must set graphics mode 1
+and units.)
+</dl>
+
+<dl>
+<dt><b><tt>-sescp_Release=</tt></b>"<em>string</em>"
+<dd>Overrides the release sequence, "<b><tt>ESC&nbsp;@&nbsp;FF</tt></b>" by
+default.
+</dl>
+
+<p>
+ESC/P2 allows any resolutions to be valid in theory, but only
+<b><tt>-r360x360</tt></b> (the default) and <b><tt>-r720x720</tt></b> (not
+on STC-IIs ? and st800) are known to work with most printers.
+
+<p>
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=7 bgcolor="#CCCC00"><hr><font size="+1">Valid option combinations<br>Stylus I &amp; Pro-Series only</font><hr>
+<tr valign=bottom>
+ <th valign=bottom align=left>Resolution
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th valign=bottom align=left><b><tt>escp_Band</tt></b>
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th valign=bottom align=left>Weave usable
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th valign=bottom align=left><b><tt>escp_Band</tt></b> &amp;<br>number of passes
+<tr> <td colspan=7><hr>
+<tr valign=top> <td>180x90
+ <td>&nbsp;
+ <td>15
+ <td>&nbsp;
+ <td><b><tt>noWeave</tt></b>
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>180x180
+ <td>&nbsp;
+ <td>1 , 8, 24
+ <td>&nbsp;
+ <td><b><tt>noWeave</tt></b>, <b><tt>Microweave</tt></b>
+ <td>&nbsp;
+ <td>15/2 <b><tt>SoftWeave</tt></b>
+<tr valign=top> <td>180x360
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>15/4 <b><tt>SoftWeave</tt></b>
+<tr valign=top> <td>180x720
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>15/8 <b><tt>SoftWeave</tt></b>
+<tr valign=top> <td>360x90
+ <td>&nbsp;
+ <td>15
+ <td>&nbsp;
+ <td><b><tt>noWeave</tt></b>
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>360x180
+ <td>&nbsp;
+ <td>1, 8, 24
+ <td>&nbsp;
+ <td><b><tt>noWeave</tt></b>, <b><tt>Microweave</tt></b>
+ <td>&nbsp;
+ <td>15/2 <b><tt>SoftWeave</tt></b>
+<tr valign=top> <td>360x360
+ <td>&nbsp;
+ <td>1, 8, 24
+ <td>&nbsp;
+ <td><b><tt>noWeave</tt></b>, <b><tt>Microweave</tt></b>
+ <td>&nbsp;
+ <td>15/4 <b><tt>SoftWeave</tt></b>
+<tr valign=top> <td>360x720
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>15/8 <b><tt>SoftWeave</tt></b>
+<tr valign=top> <td>720x90
+ <td>&nbsp;
+ <td>15
+ <td>&nbsp;
+ <td><b><tt>noWeave</tt></b>
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>720x180
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>15/2 <b><tt>SoftWeave</tt></b>
+<tr valign=top> <td>720x360
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>15/4 <b><tt>SoftWeave</tt></b>
+<tr valign=top> <td>720x720
+ <td>&nbsp;
+ <td>1
+ <td>&nbsp;
+ <td><b><tt>noWeave</tt></b>, <b><tt>Microweave</tt></b>
+ <td>&nbsp;
+ <td>15/8 <b><tt>SoftWeave</tt></b>
+</table></blockquote>
+
+<blockquote>
+<b>Beware:</b> there are only few validity checks for parameters. A good
+example is <b><tt>escp_Band</tt></b>: if you set this, the driver uses your
+value even if the value is not supported by the printer. <b>You asked for
+it and you got it!</b>
+</blockquote>
+
+<h3><a name="STC_FAQ"></a>Application note and FAQ</h3>
+
+<p>
+Quite a bunch of parameters. Hopefully you never need any of them, besides
+feeding <b><tt>stcolor.ps</tt></b> to Ghostscript in front of your input.
+
+<p>
+After answering some questions over fifty times I prepared a FAQ. Here is
+version 1.3 of the FAQ, as of <b><tt>stcolor</tt></b> version 1.20 (for
+Ghostscript 3.50).
+
+<h4><a name="STC_FAQ_A3"></a>Support for A3 paper</h4>
+
+<p>
+Yes, this driver supports the A3-size printer: merely set the required
+pagesize and margins. A simple way to do this is to specify the
+command-line switch "<b><tt>-sPAPERSIZE=a3</tt></b>" or include the
+procedure call "<b><tt>a3</tt></b>" in the PostScript prolog section. To
+optimize the printable area or set the proper margins, see the next
+paragraph.
+
+<h4><a name="STC_FAQ_margins"></a>Margins, PageSize</h4>
+
+<p>
+I refuse to add code to <b><tt>stcolor</tt></b> that tries to guess the
+proper margins or page size, because I found that such guessing is usually
+wrong and needs correction in either the source or the parameters. You can
+modify <b><tt>stcolor.ps</tt></b> to do that, however. After the line
+
+<blockquote><b><tt>
+mark % prepare stack for "putdeviceprops"
+</tt></b></blockquote>
+
+<p>
+insert these lines, which define page size and margins in points:
+
+<blockquote>
+<pre>/.HWMargins [9.0 39.96 12.6 9.0] % Left, bottom, right, top (1/72")
+/PageSize [597.6 842.4] % Paper, including margins (1/72")
+/Margins [ % neg. Offset to Left/Top in Pixels
+ 4 index 0 get STCold /HWResolution get 0 get mul 72 div neg
+ 5 index 3 get STCold /HWResolution get 1 get mul 72 div neg
+]</pre></blockquote>
+
+<p>
+Feel free to change the values of <b><tt>.HWMargins</tt></b> and
+<b><tt>PageSize</tt></b> to match your needs; the values given are the
+defaults when the driver is compiled with "<b><tt>-DA4</tt></b>". This
+option or its omission may cause trouble: the Stylus Color can print up to
+exactly 8 inches (2880 pixels) at 360dpi. The remaining paper is the
+margin, where the left margin varies only slightly with the paper size,
+while the right margin is significantly increased for wider paper, such as
+U.S. letter size.
+
+<p>
+<b>Note</b> that if you are using an ISO paper size with a version of
+<b><tt>stcolor</tt></b> after 1.20 and compiled without
+"<b><tt>-DA4</tt></b>", then the default margin is too large, and you need
+to add the proper "<b><tt>.HWMargins</tt></b>" to the command line or to
+<b><tt>stcolor.ps</tt></b>.
+
+<h4><a name="STC_FAQ_II_IIS_1500"></a>Stylus Color II / IIs and 1500</h4>
+
+<p>
+First the good news: the driver can print on the Stylus Color II.
+Now the bad news:
+<ul>
+<li>According to Epson support the driver "abuses" the color
+capabilities. (See "Future Plans" for details.)
+<li>You need some parameters on the command line (or in
+<b><tt>stcolor.ps</tt></b>).
+<li>I doubted that it would be usable with the Stylus Color IIs, but
+it <b>is</b> usable and suffers from mixing problems!
+</ul>
+
+<p>
+
+To make things work, you <b>MUST</b> disable the driver's internal
+weaving (<b><tt>Softweave</tt></b>), in one of these two ways:
+
+<blockquote>
+<b><tt>gs -dMicroweave</tt></b> ...<br>
+<b><tt>gs -dnoWeave -descp_Band=1</tt></b> ...
+</blockquote>
+
+<p>
+Version 1.90, current as of Ghostscript 5.10, fixes this bug by new default
+behaviour. I experienced significantly increased printing speed with the
+second variant on the old Stylus Color, when printing mostly monochrome
+data.
+
+<h3><a name="STC_recommendations"></a>Recommendations</h3>
+
+<p>
+The next section is a contribution from Jason Patterson &lt;jason@reflections.com.au&gt;
+who evaluated a previous version (1.17). Ghostscript was invoked as follows:
+
+<blockquote><dl compact>
+<dt><b><tt>gs</tt></b>
+<dd><b><tt>-sDEVICE=stcolor -r720x720
+-sDithering=</tt></b>... <b><tt>-sOutputFile=escp.out stcolor.ps
+whatsoever.ps</tt></b>
+
+</dl></blockquote>
+
+<p>
+where "..." is the name of the desired algorithm.
+<b><tt>stcolor.ps</tt></b> was omitted for the gs-algorithms
+(<b><tt>gsmono</tt></b>, <b><tt>gsrgb</tt></b> and <b><tt>gscmyk</tt></b>),
+for which it is useless and would not allow the selection of
+"<b><tt>gscmyk</tt></b>".
+
+<h4><a name="STC_dither_experiment"></a>Color dithering experiments with
+<b><tt>gdevstc</tt></b> 1.21</h4>
+
+<p>
+Here are data about the EPSON Stylus Color driver's different dithering
+methods, based on a little experiment using four good quality scanned
+images of quite varied nature, to begin with, a summary of the results of
+the four experiments. <b>Sanity note:</b> the results here are from only
+four images and a total of 24 printouts (eight on 720dpi paper, sixteen on
+plain paper). Your results will almost certainly vary, and your standards
+might not be the same as mine, so use these results only as a guide, not as
+a formal evaluation.
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Quality of output by method</font><hr>
+<tr valign=bottom>
+ <th align=left>
+ <td>&nbsp;&nbsp;
+ <th align=left>
+<tr> <td colspan=3><hr>
+<tr> <td valign=top><b><tt>gsmono</tt></b>
+<td>&nbsp;&nbsp;&nbsp;&nbsp;
+<td>Pretty much what you'd expect from a mono ordered pattern.
+Looks like what a lot of mono laser printers produce.
+<tr> <td valign=top><b><tt>fsmono</tt></b>
+<td>&nbsp;
+<td>Excellent for monochrome.
+<tr> <td valign=top><b><tt>gscmyk</tt></b>
+<td>&nbsp;
+<td>Not very good, but expected from an ordered pattern.
+<tr> <td valign=top><b><tt>gsrgb</tt></b>
+<td>&nbsp;
+<td>A little better than <b><tt>gscmyk</tt></b>. More consistent
+looking.
+<tr> <td valign=top><b><tt>fs2</tt></b>
+<td>&nbsp;
+<td>Good, but not quite as good as <b><tt>fsrgb</tt></b>. Gets the
+brightness wrong: too light at 720dpi, too dark at 360dpi.
+<tr> <td valign=top><b><tt>fsrgb</tt></b>
+<td>&nbsp;
+<td>Very good, but a little too dark and has a slight blue tint.
+<tr> <td valign=top><b><tt>hscmyk</tt></b>
+<td>&nbsp;
+<td>Excellent. Slightly better than <b><tt>fsrgb</tt></b> and
+<b><tt>fs2</tt></b>. Better than <b><tt>fscmyk</tt></b> on
+some images, almost the same on most.
+<tr> <td valign=top><b><tt>fscmyk</tt></b>
+<td>&nbsp;
+<td>Best. Very, very slightly better than <b><tt>hscmyk</tt></b>.
+On some images nearly as good as the EPSON demos done with
+the MS Windows driver.
+</table></blockquote>
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=4 bgcolor="#CCCC00"><hr><font size="+1">Overall visual quality (1-10), best to worst</font><hr>
+<tr valign=top> <th colspan=4 align=left>Monochrome
+<tr> <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <td><b><tt>fsmono</tt></b>
+ <td>&nbsp;&nbsp;
+ <td><b><tt>******************</tt></b>
+<tr> <td>&nbsp;
+ <td><b><tt>gsmono</tt></b>
+ <td>&nbsp;
+ <td><b><tt>**********</tt></b>
+<tr> <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td><b><tt>0&nbsp;1&nbsp;2&nbsp;3&nbsp;4&nbsp;5&nbsp;6&nbsp;7&nbsp;8&nbsp;9&nbsp;10</tt></b>
+<tr> <td colspan=4><hr>
+<tr valign=top> <th colspan=4 align=left>Colour
+<tr> <td>&nbsp;
+ <td><b><tt>fscmyk</tt></b>
+ <td>&nbsp;
+ <td><b><tt>*******************</tt></b>
+<tr> <td>&nbsp;
+ <td><b><tt>hscmyk</tt></b>
+ <td>&nbsp;
+ <td><b><tt>*******************</tt></b>
+<tr> <td>&nbsp;
+ <td><b><tt>fsrgb</tt></b>
+ <td>&nbsp;
+ <td><b><tt>******************</tt></b>
+<tr> <td>&nbsp;
+ <td><b><tt>fs2</tt></b>
+ <td>&nbsp;
+ <td><b><tt>*****************</tt></b>
+<tr> <td>&nbsp;
+ <td><b><tt>gsrgb</tt></b>
+ <td>&nbsp;
+ <td><b><tt>**********</tt></b>
+<tr> <td>&nbsp;
+ <td><b><tt>gscmyk</tt></b>
+ <td>&nbsp;
+ <td><b><tt>*********</tt></b>
+<tr> <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td><b><tt>0&nbsp;1&nbsp;2&nbsp;3&nbsp;4&nbsp;5&nbsp;6&nbsp;7&nbsp;8&nbsp;9&nbsp;10</tt></b>
+</table></blockquote>
+
+<h3><a name="STC_color_transform"></a>Color transformation</h3>
+
+<p>
+In the initial version of the driver distributed with Ghostscript 3.33, the
+parameter "<b><tt>SpotSize</tt></b>" was the only way to manipulate the
+colors at the driver level. According to the parameters enumerated above,
+this has changed significantly with version 1.16 and above as a result an
+ongoing discussion about dithering algorithms and "false color" on the
+Epson Stylus Color. This initiated the transformation of the
+<b><tt>stcolor</tt></b> driver into a framework for different dithering
+algorithms, providing a generalized interface to the internal Ghostscript
+color models and the other data structures related to Ghostscript drivers.
+
+<p>
+The main thing such a framework should be able to do is to deliver the
+values the dithering algorithm needs; and since this directly influences
+the optical image impression, this transformation should be adjustable
+without the need for recompilation and relinking. In general the process
+can be described as follows:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <td colspan=3><b><tt>ColorAdjustMatrix</tt></b>
+ <td align=center>Coding
+ <td colspan=3>&nbsp;
+ <td align=center>Transfer
+ <td colspan=3>&nbsp;
+<tr valign=top> <td>|
+ <td align=center>Ghostscript color
+ <td>|
+ <td align=center>=&gt;
+ <td>|
+ <td align=center>Ghostscript raster
+ <td>|
+ <td align=center>=&gt;
+ <td>|
+ <td align=center>Dithering data
+ <td>|
+<tr valign=top> <td>|
+ <td>&nbsp;
+ <td>|
+ <td>&nbsp;
+ <td>|
+ <td align=center>1/2/4/8/16/32-bit
+ <td>|
+ <td>&nbsp;
+ <td>|
+ <td>&nbsp;
+ <td>|
+<tr valign=top> <td>|
+ <td align=center>1/3/4 16-bit values
+ <td>|
+ <td>&nbsp;
+ <td>|
+ <td align=center>1/3/4 values
+ <td>|
+ <td>&nbsp;
+ <td>|
+ <td align=center>(arbitrary type)
+ <td>|
+</table></blockquote>
+
+<p>
+Due to the limitations on raster storage, information is lost in the first
+transformation step, except for the 16-bit monochrome mode. So any color
+adjustment should take place before this step and this is where the optional
+<b><tt>ColorAdjustMatrix</tt></b> works.
+
+<p>
+The first transformation step, called "coding", is controlled by the
+<b><tt>?coding</tt></b> arrays. The decoding process expands the range of
+values expontentially to a larger range than that provided by the initial
+Ghostscript color model, and is therefore a reasonable place to make
+device- or algorithm-specific adjustments. This is where the
+<b><tt>?transfer</tt></b> arrays are used. Array access might be not the
+fastest method, but its generality is superior, so this step is always
+based upon internally algorithm-specific array access. If 8 bits are stored
+per color component and if the algorithm uses bytes too, the second
+transformation is included within the first, which saves significant
+computation time when printing the data.
+
+<h3><a name="STC_CAM"></a><b><tt>ColorAdjustMatrix</tt></b></h3>
+
+<p>
+The driver supports different values for <b><tt>ProcessColorModel</tt></b>,
+which raises the need for different color adjustments. Here
+"<b><tt>CAM</tt></b>" stands for "<b><tt>ColorAdjustMatrix</tt></b>".
+
+<dl>
+<dt><b><tt>DeviceGray</tt></b> (three floats)
+<dd><pre>if ((r == g) &amp;&amp; (g == b))
+ K' = 1.0 - R;
+else
+ K' = 1.0 - CAM[0] * R + CAM[1] * G + CAM[2] * B;</pre>
+
+<p>
+According to the <a href="Drivers.htm">documentation on drivers</a>, the
+latter (the "else" clause) should never happen.
+</dl>
+
+<dl>
+<dt><b><tt>DeviceRGB</tt></b> (nine floats)
+<dd><pre>if((r == g) &amp;&amp; (g == b))
+ R' = B' = G' = R;
+else
+ R' = CAM[0]*R + CAM[1]*G + CAM[2]*B;
+ G' = CAM[3]*R + CAM[4]*G + CAM[5]*B;
+ B' = CAM[6]*R + CAM[7]*G + CAM[8]*B;</pre>
+
+<p>
+The printer always uses four inks, so a special treatment of black is
+provided. Algorithms may take special action if R, G, and B are all
+equal.
+</dl>
+
+<dl>
+<dt><b><tt>DeviceCMYK</tt></b> (sixteen floats)
+<dd>
+<pre>if((c == m) &amp;&amp; (m == y))
+ K' = max(C,K);
+ C' = M' = Y' = 0;
+else
+ K = min(C,M,Y);
+ if((K &gt; 0) &amp;&amp; ColorAdjustMatrix_present) { =&gt; UCR
+ C -= K;
+ M -= K;
+ Y -= K;
+ }
+
+ C' = CAM[ 0]*C + CAM[ 1]*M + CAM[ 2]*Y + CAM[ 3]*K;
+ M' = CAM[ 4]*C + CAM[ 5]*M + CAM[ 6]*Y + CAM[ 7]*K;
+ Y' = CAM[ 8]*C + CAM[ 9]*M + CAM[10]*Y + CAM[11]*K;
+ K' = CAM[12]*C + CAM[13]*M + CAM[14]*Y + CAM[15]*K;</pre>
+
+<p>
+Again we have a special black treatment. "<b><tt>max(C,K)</tt></b>" was introduced
+because of a slight misbehaviour of Ghostscript, which delivers
+black under certain circumstances as (1,1,1,0). Normally, when
+no special black separation and undercolor removal procedures
+are defined at the PostScript level, either (C,M,Y,0) or (0,0,0,K)
+values are mapped. This would make the extended <b><tt>ColorAdjustMatrix</tt></b>
+quite tedious, and so during mapping, black separation is done for
+(C,M,Y,0) requests; and if there is a <b><tt>ColorAdjustMatrix</tt></b>, undercolor
+removal is used too. In other words the default matrix is:
+
+<blockquote><table>
+<tr> <td>1 <td>0 <td>0 <td>1
+<tr> <td>0 <td>1 <td>0 <td>1
+<tr> <td>0 <td>0 <td>1 <td>1
+<tr> <td>0 <td>0 <td>0 <td>1
+</table></blockquote>
+
+<p>
+and it is applied to CMYK values with separated and removed black. Raising
+the CMY coefficients while lowering the K coefficients reduces black and
+intensifies color. But be careful, because even small deviations from the
+default cause drastic changes.
+</dl>
+
+<p>
+If no <b><tt>ColorAdjustMatrix</tt></b> is set, the matrix computations are
+skipped. Thus the transformation reduces to range inversion in monochrome
+mode and black separation in CMYK mode.
+
+<h3><a name="STC_RGBCMYK_coding"></a>RGB / CMYK coding and transfer, and <b><tt>BitsPerPixel</tt></b></h3>
+
+<p>
+These two (groups of) parameters are arrays of floating-point numbers in
+the range 0.0 to 1.0. They control the truncation to the desired number of
+bits stored in raster memory (<b><tt>BitsPerPixel</tt></b>) and the ink
+density. The "truncation" may become a nonlinear function if any of the
+<b><tt>?coding</tt></b> arrays is set. Assume the following Ghostscript
+invocation:
+
+<blockquote><pre>gs -sDEVICE=stcolor -sDithering=fscmyk -dBitsPerPixel=16 \
+ -dKcoding='{ 0.0 0.09 0.9 1.0 }' \
+ -dMcoding='{ 0.0 0.09 0.9 1.0 }' \
+ -dKtransfer='{ 0.0 0.09 0.9 1.0 }' \
+ -dYtransfer='{ 0.0 0.09 0.9 1.0 }'</pre>
+</blockquote>
+
+<p>
+We may have either or both of <b><tt>?coding</tt></b> and
+<b><tt>?transfer</tt></b>, giving four possible combinations. (These four
+combinations appear in the given example.) The resulting mapping appears
+in the following tables, where except for the internal Indices (4
+components &times; 4 bits = 16 <b><tt>BitsPerPixel</tt></b>), all values
+are normalized to the range 0 to 1. The actual range is 0 to 65535 for the
+Ghostscript color and 0 to 16777215 for the ink values delivered to the
+<b><tt>fscmyk</tt></b> algorithm. Sorry for the bunch of numbers
+following, but you may try this example in conjunction with
+<b><tt>stcinfo.ps</tt></b>, which should give you a graphical printout of
+the following numbers when you issue a <b><tt>showpage</tt></b> command.
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr> <td>&nbsp;
+ <td>&nbsp;
+ <th colspan=5>Cyan<hr>
+ <td>&nbsp;
+ <th colspan=5>Magenta<hr>
+<tr valign=top> <th>CI/15
+ <td>&nbsp;
+ <th>gs_color_values
+ <td>&nbsp;
+ <th>CI
+ <td>&nbsp;
+ <th>Ink
+ <td>&nbsp;
+ <th>gs_color_values
+ <td>&nbsp;
+ <th>CI
+ <td>&nbsp;
+ <th>Ink
+<tr> <td colspan=13><hr>
+<tr valign=top> <td align=center>0.000
+ <td>&nbsp;
+ <td align=center>0.000 - 0.062
+ <td>&nbsp;
+ <td align=right>0
+ <td>&nbsp;
+ <td align=center>0.000
+ <td>&nbsp;
+ <td align=center>-0.123 - 0.123
+ <td>&nbsp;
+ <td align=right>0
+ <td>&nbsp;
+ <td align=center>0.000
+<tr valign=top> <td align=center>0.067
+ <td>&nbsp;
+ <td align=center>0.063 - 0.125
+ <td>&nbsp;
+ <td align=right>1
+ <td>&nbsp;
+ <td align=center>0.067
+ <td>&nbsp;
+ <td align=center>0.123 - 0.299
+ <td>&nbsp;
+ <td align=right>1
+ <td>&nbsp;
+ <td align=center>0.247
+<tr valign=top> <td align=center>0.133
+ <td>&nbsp;
+ <td align=center>0.125 - 0.187
+ <td>&nbsp;
+ <td align=right>2
+ <td>&nbsp;
+ <td align=center>0.133
+ <td>&nbsp;
+ <td align=center>0.299 - 0.365
+ <td>&nbsp;
+ <td align=right>2
+ <td>&nbsp;
+ <td align=center>0.351
+<tr valign=top> <td align=center>0.200
+ <td>&nbsp;
+ <td align=center>0.188 - 0.250
+ <td>&nbsp;
+ <td align=right>3
+ <td>&nbsp;
+ <td align=center>0.200
+ <td>&nbsp;
+ <td align=center>0.365 - 0.392
+ <td>&nbsp;
+ <td align=right>3
+ <td>&nbsp;
+ <td align=center>0.379
+<tr valign=top> <td align=center>0.267
+ <td>&nbsp;
+ <td align=center>0.250 - 0.312
+ <td>&nbsp;
+ <td align=right>4
+ <td>&nbsp;
+ <td align=center>0.267
+ <td>&nbsp;
+ <td align=center>0.392 - 0.420
+ <td>&nbsp;
+ <td align=right>4
+ <td>&nbsp;
+ <td align=center>0.406
+<tr valign=top> <td align=center>0.333
+ <td>&nbsp;
+ <td align=center>0.313 - 0.375
+ <td>&nbsp;
+ <td align=right>5
+ <td>&nbsp;
+ <td align=center>0.333
+ <td>&nbsp;
+ <td align=center>0.420 - 0.447
+ <td>&nbsp;
+ <td align=right>5
+ <td>&nbsp;
+ <td align=center>0.433
+<tr valign=top> <td align=center>0.400
+ <td>&nbsp;
+ <td align=center>0.375 - 0.437
+ <td>&nbsp;
+ <td align=right>6
+ <td>&nbsp;
+ <td align=center>0.400
+ <td>&nbsp;
+ <td align=center>0.447 - 0.475
+ <td>&nbsp;
+ <td align=right>6
+ <td>&nbsp;
+ <td align=center>0.461
+<tr valign=top> <td align=center>0.467
+ <td>&nbsp;
+ <td align=center>0.438 - 0.500
+ <td>&nbsp;
+ <td align=right>7
+ <td>&nbsp;
+ <td align=center>0.467
+ <td>&nbsp;
+ <td align=center>0.475 - 0.502
+ <td>&nbsp;
+ <td align=right>7
+ <td>&nbsp;
+ <td align=center>0.488
+<tr valign=top> <td align=center>0.533
+ <td>&nbsp;
+ <td align=center>0.500 - 0.562
+ <td>&nbsp;
+ <td align=right>8
+ <td>&nbsp;
+ <td align=center>0.533
+ <td>&nbsp;
+ <td align=center>0.502 - 0.529
+ <td>&nbsp;
+ <td align=right>8
+ <td>&nbsp;
+ <td align=center>0.516
+<tr valign=top> <td align=center>0.600
+ <td>&nbsp;
+ <td align=center>0.563 - 0.625
+ <td>&nbsp;
+ <td align=right>9
+ <td>&nbsp;
+ <td align=center>0.600
+ <td>&nbsp;
+ <td align=center>0.529 - 0.557
+ <td>&nbsp;
+ <td align=right>9
+ <td>&nbsp;
+ <td align=center>0.543
+<tr valign=top> <td align=center>0.667
+ <td>&nbsp;
+ <td align=center>0.625 - 0.687
+ <td>&nbsp;
+ <td align=right>10
+ <td>&nbsp;
+ <td align=center>0.667
+ <td>&nbsp;
+ <td align=center>0.557 - 0.584
+ <td>&nbsp;
+ <td align=right>10
+ <td>&nbsp;
+ <td align=center>0.571
+<tr valign=top> <td align=center>0.733
+ <td>&nbsp;
+ <td align=center>0.688 - 0.750
+ <td>&nbsp;
+ <td align=right>11
+ <td>&nbsp;
+ <td align=center>0.733
+ <td>&nbsp;
+ <td align=center>0.584 - 0.612
+ <td>&nbsp;
+ <td align=right>11
+ <td>&nbsp;
+ <td align=center>0.598
+<tr valign=top> <td align=center>0.800
+ <td>&nbsp;
+ <td align=center>0.750 - 0.812
+ <td>&nbsp;
+ <td align=right>12
+ <td>&nbsp;
+ <td align=center>0.800
+ <td>&nbsp;
+ <td align=center>0.612 - 0.639
+ <td>&nbsp;
+ <td align=right>12
+ <td>&nbsp;
+ <td align=center>0.626
+<tr valign=top> <td align=center>0.867
+ <td>&nbsp;
+ <td align=center>0.813 - 0.875
+ <td>&nbsp;
+ <td align=right>13
+ <td>&nbsp;
+ <td align=center>0.867
+ <td>&nbsp;
+ <td align=center>0.639 - 0.715
+ <td>&nbsp;
+ <td align=right>13
+ <td>&nbsp;
+ <td align=center>0.653
+<tr valign=top> <td align=center>0.933
+ <td>&nbsp;
+ <td align=center>0.875 - 0.937
+ <td>&nbsp;
+ <td align=right>14
+ <td>&nbsp;
+ <td align=center>0.933
+ <td>&nbsp;
+ <td align=center>0.715 - 0.889
+ <td>&nbsp;
+ <td align=right>14
+ <td>&nbsp;
+ <td align=center>0.778
+<tr valign=top> <td align=center>1.000
+ <td>&nbsp;
+ <td align=center>0.938 - 1.000
+ <td>&nbsp;
+ <td align=right>15
+ <td>&nbsp;
+ <td align=center>1.000
+ <td>&nbsp;
+ <td align=center>0.889 - 1.111
+ <td>&nbsp;
+ <td align=right>15
+ <td>&nbsp;
+ <td align=center>1.000
+</table></blockquote>
+
+<p>
+The difference between cyan and magenta is the presence of a coding array.
+The coding process must map a range of color values to each of the sixteen
+component indices. If no coding array is given, this is accomplished
+by dividing by 4096, equivalent to a right shift by 12 bits. The
+final ink density resides in the given interval and moves from the left to
+the right side from 0 to 15. For magenta there is a coding array
+and the ink value matches the center of the intervals. But the distribution
+of the mapped intervals follows the given coding array and is nonlinear in
+the linear color space of Ghostscript.
+
+<p>
+Now let us take a look at the case with transfer arrays:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr> <td>&nbsp;
+ <td>&nbsp;
+ <th colspan=5>Yellow<hr>
+ <td>&nbsp;
+ <th colspan=5>Black<hr>
+<tr valign=top> <th>CI/15
+ <td>&nbsp;
+ <th>gs_color_values
+ <td>&nbsp;
+ <th>CI
+ <td>&nbsp;
+ <th>Ink
+ <td>&nbsp;
+ <th>gs_color_values
+ <td>&nbsp;
+ <th>CI
+ <td>&nbsp;
+ <th>Ink
+<tr> <td colspan=13><hr>
+<tr valign=top> <td align=center>0.000
+ <td>&nbsp;
+ <td align=center>0.000 - 0.062
+ <td>&nbsp;
+ <td align=right>0
+ <td>&nbsp;
+ <td align=center>0.000
+ <td>&nbsp;
+ <td align=center>-0.123 - 0.123
+ <td>&nbsp;
+ <td align=right>0
+ <td>&nbsp;
+ <td align=center>0.000
+<tr valign=top> <td align=center>0.067
+ <td>&nbsp;
+ <td align=center>0.063 - 0.125
+ <td>&nbsp;
+ <td align=right>1
+ <td>&nbsp;
+ <td align=center>0.018
+ <td>&nbsp;
+ <td align=center>0.123 - 0.299
+ <td>&nbsp;
+ <td align=right>1
+ <td>&nbsp;
+ <td align=center>0.067
+<tr valign=top> <td align=center>0.133
+ <td>&nbsp;
+ <td align=center>0.125 - 0.187
+ <td>&nbsp;
+ <td align=right>2
+ <td>&nbsp;
+ <td align=center>0.036
+ <td>&nbsp;
+ <td align=center>0.299 - 0.365
+ <td>&nbsp;
+ <td align=right>2
+ <td>&nbsp;
+ <td align=center>0.133
+<tr valign=top> <td align=center>0.200
+ <td>&nbsp;
+ <td align=center>0.188 - 0.250
+ <td>&nbsp;
+ <td align=right>3
+ <td>&nbsp;
+ <td align=center>0.054
+ <td>&nbsp;
+ <td align=center>0.365 - 0.392
+ <td>&nbsp;
+ <td align=right>3
+ <td>&nbsp;
+ <td align=center>0.200
+<tr valign=top> <td align=center>0.267
+ <td>&nbsp;
+ <td align=center>0.250 - 0.312
+ <td>&nbsp;
+ <td align=right>4
+ <td>&nbsp;
+ <td align=center>0.072
+ <td>&nbsp;
+ <td align=center>0.392 - 0.420
+ <td>&nbsp;
+ <td align=right>4
+ <td>&nbsp;
+ <td align=center>0.267
+<tr valign=top> <td align=center>0.333
+ <td>&nbsp;
+ <td align=center>0.313 - 0.375
+ <td>&nbsp;
+ <td align=right>5
+ <td>&nbsp;
+ <td align=center>0.090
+ <td>&nbsp;
+ <td align=center>0.420 - 0.447
+ <td>&nbsp;
+ <td align=right>5
+ <td>&nbsp;
+ <td align=center>0.333
+<tr valign=top> <td align=center>0.400
+ <td>&nbsp;
+ <td align=center>0.375 - 0.437
+ <td>&nbsp;
+ <td align=right>6
+ <td>&nbsp;
+ <td align=center>0.252
+ <td>&nbsp;
+ <td align=center>0.447 - 0.475
+ <td>&nbsp;
+ <td align=right>6
+ <td>&nbsp;
+ <td align=center>0.400
+<tr valign=top> <td align=center>0.467
+ <td>&nbsp;
+ <td align=center>0.438 - 0.500
+ <td>&nbsp;
+ <td align=right>7
+ <td>&nbsp;
+ <td align=center>0.414
+ <td>&nbsp;
+ <td align=center>0.475 - 0.502
+ <td>&nbsp;
+ <td align=right>7
+ <td>&nbsp;
+ <td align=center>0.467
+<tr valign=top> <td align=center>0.533
+ <td>&nbsp;
+ <td align=center>0.500 - 0.562
+ <td>&nbsp;
+ <td align=right>8
+ <td>&nbsp;
+ <td align=center>0.576
+ <td>&nbsp;
+ <td align=center>0.502 - 0.529
+ <td>&nbsp;
+ <td align=right>8
+ <td>&nbsp;
+ <td align=center>0.533
+<tr valign=top> <td align=center>0.600
+ <td>&nbsp;
+ <td align=center>0.563 - 0.625
+ <td>&nbsp;
+ <td align=right>9
+ <td>&nbsp;
+ <td align=center>0.738
+ <td>&nbsp;
+ <td align=center>0.529 - 0.557
+ <td>&nbsp;
+ <td align=right>9
+ <td>&nbsp;
+ <td align=center>0.600
+<tr valign=top> <td align=center>0.667
+ <td>&nbsp;
+ <td align=center>0.625 - 0.687
+ <td>&nbsp;
+ <td align=right>10
+ <td>&nbsp;
+ <td align=center>0.900
+ <td>&nbsp;
+ <td align=center>0.557 - 0.584
+ <td>&nbsp;
+ <td align=right>10
+ <td>&nbsp;
+ <td align=center>0.667
+<tr valign=top> <td align=center>0.733
+ <td>&nbsp;
+ <td align=center>0.688 - 0.750
+ <td>&nbsp;
+ <td align=right>11
+ <td>&nbsp;
+ <td align=center>0.920
+ <td>&nbsp;
+ <td align=center>0.584 - 0.612
+ <td>&nbsp;
+ <td align=right>11
+ <td>&nbsp;
+ <td align=center>0.733
+<tr valign=top> <td align=center>0.800
+ <td>&nbsp;
+ <td align=center>0.750 - 0.812
+ <td>&nbsp;
+ <td align=right>12
+ <td>&nbsp;
+ <td align=center>0.940
+ <td>&nbsp;
+ <td align=center>0.612 - 0.639
+ <td>&nbsp;
+ <td align=right>12
+ <td>&nbsp;
+ <td align=center>0.800
+<tr valign=top> <td align=center>0.867
+ <td>&nbsp;
+ <td align=center>0.813 - 0.875
+ <td>&nbsp;
+ <td align=right>13
+ <td>&nbsp;
+ <td align=center>0.960
+ <td>&nbsp;
+ <td align=center>0.639 - 0.715
+ <td>&nbsp;
+ <td align=right>13
+ <td>&nbsp;
+ <td align=center>0.867
+<tr valign=top> <td align=center>0.933
+ <td>&nbsp;
+ <td align=center>0.875 - 0.937
+ <td>&nbsp;
+ <td align=right>14
+ <td>&nbsp;
+ <td align=center>0.980
+ <td>&nbsp;
+ <td align=center>0.715 - 0.889
+ <td>&nbsp;
+ <td align=right>14
+ <td>&nbsp;
+ <td align=center>0.933
+<tr valign=top> <td align=center>1.000
+ <td>&nbsp;
+ <td align=center>0.938 - 1.000
+ <td>&nbsp;
+ <td align=right>15
+ <td>&nbsp;
+ <td align=center>1.000
+ <td>&nbsp;
+ <td align=center>0.889 - 1.111
+ <td>&nbsp;
+ <td align=right>15
+ <td>&nbsp;
+ <td align=center>1.000
+</table></blockquote>
+
+<p>
+Yellow uses a transfer array. There is no linear correspondence between
+the color and the ink values: this correspondence is defined through the
+given array. In other words, the transfer arrays define a nonlinear ink
+characteristic, which is exactly the same functionality that PostScript's
+"(color)transfer" function provides.
+
+<p>
+While for yellow the intervals match the intervals used with cyan, for
+black the intervals match the magenta intervals. But watch the
+correspondence between the CI/15 values and the ink density for black: this
+is a linear distribution in the ink domain.
+
+<p>
+Not a bad idea, I think. Consider the <b><tt>fs2</tt></b> algorithm: it
+uses values in the range 0 to 255. If any transfer array were alone, some
+of the 256 possible values would never be used and others would be used for
+adjacent intervals several times. Establishing an identical coding array
+solves this problem, so the full potential of the algorithm is used.
+
+<p>
+Another useful feature of the coding arrays is that they are internally
+normalized to the range 0-1. In 720x720dpi mode the transfer arrays in
+<b><tt>stcolor.ps</tt></b> limit the dot density to about 50%, so these
+arrays end at 0.5 (and begin at 0.5 for RGB). Because of automatic
+normalization, these arrays can also be used as coding arrays. But of
+course in the <b><tt>fs2</tt></b> case mentioned above, values from 0 to
+127 will never be delivered to the algorithm, while values 128-255 are
+delivered for adjacent intervals.
+
+<p>
+To clarify the intended use of the three parameters (parameter groups), keep this in mind:
+
+<blockquote><ul>
+<li><b><tt>ColorAdjustMatrix</tt></b> is never used when transferring gray
+values. This restricts it to what the name says: adjustment of colors,
+that is, correction for miscolored ink. Do not use it for saturation or
+brightness control.
+
+<li><b><tt>?transfer</tt></b> arrays control the values delivered to the
+driver, which in turn controls the ink quantity. Use these arrays to
+control saturation and brightness. In general these arrays are identical
+for all inks. If they differ they provide a simpler scheme for color
+correction, which is not necessarily faster than the
+<b><tt>ColorAdjustMatrix</tt></b>.
+
+<li><b><tt>?coding</tt></b> arrays control the color value intervals mapped
+to the internal color indices.
+</ul></blockquote>
+
+<h3><a name="What_is_weaving"></a>What is weaving?</h3>
+
+<p>
+The Epson Stylus Color has a head assembly that contains two physically
+identifiable heads, one for black and one for cyan, magenta, and yellow
+(CMY). This makes four "logical" heads, one for each color component.
+Each of these four heads has several jets at some vertical (Y) distance
+from one another, so several horizontal lines can be printed of a given
+color during one pass of the heads. From experience I think there are
+fifteen jets per color, spaced at 1/90in.
+
+<p>
+So the question arises of how to print at a Y resolution of 360dpi with
+90dpi jets. Simply by division one gets 360dpi/90dpi = 4, which tells us
+that 4 passes of the head assembly are needed to achieve a Y resolution of
+360dpi.
+
+<p>
+Weaving is the method of how the fifteen jets are used to print adjacent
+horizontal rows separated here by 1/360 inch:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=17 bgcolor="#CCCC00"><hr><font size="+1">Print-head jets used with and without weaving</font><hr>
+<tr> <td>&nbsp;
+ <td>&nbsp;
+ <th valign=bottom colspan=7>Weaving<hr>
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th valign=bottom colspan=7>noWeave<hr>
+<tr valign=top> <td>&nbsp;
+ <th>Pass
+ <th>1
+ <td>&nbsp;
+ <th>2
+ <td>&nbsp;
+ <th>3
+ <td>&nbsp;
+ <th>4
+ <td>&nbsp;
+ <th>1
+ <td>&nbsp;
+ <th>2
+ <td>&nbsp;
+ <th>3
+ <td>&nbsp;
+ <th>4
+<tr> <th>Row
+<tr valign=top> <td align=center>0
+ <td>&nbsp;
+ <td align=center>jet 0
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>jet 0
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+<tr valign=top> <td align=center>1
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>jet 1
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>jet 0
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+<tr valign=top> <td align=center>2
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>jet 2
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>jet 0
+ <td>&nbsp;
+ <td align=center>--
+<tr valign=top> <td align=center>3
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>jet 3
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>jet 0
+<tr valign=top> <td align=center>4
+ <td>&nbsp;
+ <td align=center>jet 1
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>jet 1
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+<tr valign=top> <td align=center>5
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>jet 2
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>jet 1
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+<tr valign=top> <td align=center>6
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>jet 3
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>jet 1
+ <td>&nbsp;
+ <td align=center>--
+<tr valign=top> <th>...
+</table></blockquote>
+
+<p>
+Now let's assume that the dot diameter is different for each individual
+jet, but the average among the jets matches the desired resolution. With
+weaving, adjacent rows are printed by different jets, thus some averaging
+takes place. Without weaving, adjacent rows are printed by the same jet
+and this makes the dot diameter deviations visible as 1/90in stripes on
+the paper.
+
+<h3><a name="STC_print_modes"></a>Print mode parameters</h3>
+
+<p>
+The parameters "<b><tt>Unidirectional</tt></b>",
+"<b><tt>Microweave</tt></b>", "<b><tt>noWeave</tt></b>",
+"<b><tt>OutputCode</tt></b>", "<b><tt>Model</tt></b>" and the given
+resolution control the data generated for the printer.
+
+<h4><a name="STC_unidirectional"></a><b><tt>Unidirectional</tt></b></h4>
+
+<p>
+Simply toggles the unidirectional mode of the printer. Setting
+"<b><tt>Unidirectional</tt></b>" definitely slows printing speed, but may
+improve the quality. I use this for printing transparencies, where fast
+head movement could smear the ink.
+
+<h4><a name="STC_noweave"></a><b><tt>Microweave</tt></b>,
+<b><tt>noWeave</tt></b> and <b><tt>OutputCode=deltarow</tt></b></h4>
+
+<p>
+The first are two booleans, which implies that four combinations are
+possible. Actually only three exist (if you don't count for
+<b><tt>deltarow</tt></b>): <b><tt>Softweave</tt></b>,
+<b><tt>Microweave</tt></b>, and <b><tt>noWeave</tt></b>. The first and
+second are functionally identical, the difference being whether the driver
+or the printer does the job.
+
+<p>
+In the default <b><tt>Softweave</tt></b> mode the driver sends the data
+properly arranged to the printer, while in <b><tt>Microweave</tt></b> mode,
+it is the printer that arranges the data. But in general the host processor
+is much faster than the printer's processor, and thus it is faster for the
+host do the job. In addition to that, for 720dpi eight passes are
+required, and the amount of buffer space needed to buffer the data for the
+passes is far beyond the printer's memory. <b><tt>Softweave</tt></b>
+requires an odd value of "<b><tt>escp_Band</tt></b>"; the Stylus Color
+provides fifteen for that.
+
+<p>
+"<b><tt>OutputCode</tt></b>" controls the encoding used. In the basic
+modes, the choice consists of "plain" and "runlength". The computation of
+runlength-encoded data does not take much time, less than the data tranfer
+to the printer; thus this is the recommended mode, and of course the
+default. With the Stylus Color, Epson introduced some new encoding
+principles, namely "tiff" and "deltarow". While the first was omitted from
+this driver for lack of apparent advantages, "<b><tt>deltarow</tt></b>" is
+available as an option. "<b><tt>Softweave</tt></b>" cannot be used with
+this encoding, so if <b><tt>OutputCode=deltarow</tt></b> is set,
+<b><tt>Microweave</tt></b> becomes the default. Maybe that the size of the
+ESC/P2 code becomes smaller, but I have never observed faster printing
+speed. Things tend to become slower with <b><tt>deltarow</tt></b> compared
+to <b><tt>Softweave</tt></b>.
+
+<h4><a name="STC_model"></a><b><tt>Model</tt></b></h4>
+
+<p>
+Some ESC/P2 printers such as the Stylus 800 do not offer
+<b><tt>Microweave</tt></b> or the commands required to do
+<b><tt>Softweave</tt></b>. Setting <b><tt>Model</tt></b> just changes the
+defaults and omits some parts of the initialization sequence which are not
+compatible with the given printer model. Currently only
+"<b><tt>st800</tt></b>" is supported besides the default
+<b><tt>stcolor</tt></b>.
+
+<h3><a name="STC_Pitfalls"></a>Bugs and pitfalls</h3>
+
+<ul>
+<li>The given <b><tt>?coding</tt></b> and <b><tt>?transfer</tt></b> arrays
+should be strictly monotonic.
+
+<li>It is impossible to change <b><tt>WHITE</tt></b>: that's your paper.
+Thus RGB transfer should end at 1.0 and CMYK transfer should start at 0.0.
+
+<li>Usually 8 bits per component yields fastest operation.
+
+<li>The <b><tt>ColorAdjustMatrix</tt></b> is not used in the reverse
+transformation used when Ghostscript does the dithering
+(<b><tt>gs</tt></b>* modes). Expect funny results.
+
+<li>If <b><tt>BitsPerPixel</tt></b> is less than 6, the entire coding and
+transfer process does not work. This is always true for the
+<b><tt>gs</tt></b>* modes and becomes true for the other modes if
+<b><tt>BitsPerPixel</tt></b> is forced to low values.
+
+<li>720&times;720dpi printing should never select the <b><tt>gs</tt></b>*
+modes and should always use <b><tt>stcolor.ps</tt></b>. (I prefer
+360&times;720.)
+</ul>
+
+<h3><a name="STC_Tests"></a>Tests</h3>
+
+<p>
+This section gives an overview of performance in terms of processing and
+printing times, from tests run after version 1.13. Printing was done
+offline (simply copying a processed file to the printer) to measure real
+printing speed without regard to speed of processing on the host, since at
+high resolutions, processing time is the same order of magnitude and thus
+may become the limiting factor.
+
+<h4><a name="STC_OutputCodes"></a>The various OutputCodes</h4>
+
+<p>
+I ran several files though Ghostscript and recorded the size of the
+resulting print code, the processing time, and the printing time, at least
+for some of the files, always using these options:
+
+<blockquote><b><tt>
+gs -sDEVICE=stcolor -sPAPERSIZE=a4 stcolor.ps - &lt; file.ps
+</tt></b></blockquote>
+
+<p>
+(Actually "<b><tt>-sPAPERSIZE=a4</tt></b>" is in my
+<b><tt>gs_init.ps</tt></b> since I'm a germ.)
+
+<p>"<b><tt>deltarow</tt></b>" is the new encoding principle
+("<b><tt>ESC&nbsp;.&nbsp;3&nbsp;10&nbsp;10&nbsp;1</tt></b>") with
+<b><tt>Microweave</tt></b> on. It is activated with
+"<b><tt>-sOutputCode=deltarow</tt></b>".
+
+<p>"<b><tt>Softweave</tt></b>" actually means that nothing else was used:
+it is the default, and implies that odd v=40/h=10/m=15 mode
+("<b><tt>ESC&nbsp;.&nbsp;1&nbsp;40&nbsp;10&nbsp;15</tt></b>").
+
+<p>"<b><tt>Microweave</tt></b>" means "<b><tt>-dMicroweave</tt></b>",
+equivalent to "<b><tt>ESC&nbsp;.&nbsp;1&nbsp;10&nbsp;10&nbsp;1</tt></b>",
+with full skip optimization and microweave activated.
+
+<p>
+Finally I wanted to see the plain Kathy Ireland, and used
+"<b><tt>-sOutputCode=plain</tt></b>", which just replaces runlength
+encoding (RLE) by no encoding, thus using
+"<b><tt>ESC&nbsp;.&nbsp;0&nbsp;40&nbsp;10&nbsp;15</tt></b>". [So sorry
+<b><tt>;-)</tt></b> Kathy was still dressed in blue in front of the blue
+sea on a blue air cushion -- nice to see but hard to dither.]
+
+<p>
+So here are the results.
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=9 bgcolor="#CCCC00"><hr><font size="+1">File sizes and printing speeds with various weaving methods</font><hr>
+<tr valign=bottom>
+ <td>&nbsp;
+ <td>&nbsp;
+ <th><b><tt>golfer.ps</tt></b>
+ <td>&nbsp;
+ <th><b><tt>colorcir.ps</tt></b>
+ <td>&nbsp;
+ <th><b><tt>drawing.ps</tt></b>
+ <td>&nbsp;
+ <th><b><tt>brief.ps</tt></b>
+<tr> <td colspan=9><hr>
+<tr valign=top> <td><b><tt>deltarow</tt></b>
+ <td>&nbsp;
+ <td>572751/48.180u
+ <td>&nbsp;
+ <td>643374/41.690u
+ <td>&nbsp;
+ <td>90142/46.180u/1:50
+ <td>&nbsp;
+ <td>178563/49.350u/2:22
+<tr valign=top> <td><b><tt>Softweave</tt></b>
+ <td>&nbsp;
+ <td>559593/46.810u
+ <td>&nbsp;
+ <td>669966/44.960u
+ <td>&nbsp;
+ <td>296168/48.160u/1:30
+ <td>&nbsp;
+ <td>269808/43.320u/1:55
+<tr valign=top> <td><b><tt>Microweave</tt></b>
+ <td>&nbsp;
+ <td>590999/56.060u
+ <td>&nbsp;
+ <td>754276/42.890u
+ <td>&nbsp;
+ <td>338885/47.060u/1:50
+ <td>&nbsp;
+ <td>282314/44.690u/2:22
+</table></blockquote>
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Kathy Ireland</font><hr>
+<tr valign=bottom>
+ <td>&nbsp;
+ <td>&nbsp;
+ <th><b><tt>kathy.ps</tt></b>
+<tr> <td colspan=3><hr>
+<tr valign=top> <td><b><tt>deltarow</tt></b>
+ <td>&nbsp;
+ <td>3975334/111.940u/5:35
+<tr valign=top> <td><b><tt>Softweave</tt></b>
+ <td>&nbsp;
+ <td>3897112/101.940u/3:10
+<tr valign=top> <td><b><tt>Microweave</tt></b>
+ <td>&nbsp;
+ <td>4062829/100.990u/3:15
+<tr valign=top> <td><b><tt>plain/soft</tt></b>
+ <td>&nbsp;
+ <td>5072255/104.390u/3:05
+</table></blockquote>
+
+<p>
+It may be that I've not chosen the optimal <b><tt>deltarow</tt></b> code,
+but even if it saves at lot of bytes, printing-speed is not increased.
+
+<p>
+At least the printer prefers plain Kathy. In other words, sending 1
+Megabyte or 20% more data has no impact on printing speed.
+<b><tt>drawing.ps</tt></b> is an exception to this rule: plain prints
+slower than RLE.
+
+<p>
+"Unclever" coding -- especially with <b><tt>deltarow</tt></b> -- can
+significantly slow down printing. But even if very significant advantages
+in the size of the code are achieved, "<b><tt>deltarow</tt></b>" is not
+competitive. <b><tt>colorcir.ps</tt></b> shows savings with
+<b><tt>deltarow</tt></b>, but printing is a mess.
+
+<h4><a name="STC_printing_time"></a>Printing time related to other options</h4>
+
+<p>
+Full page halftone images printed, unless otherwise noted.
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=11 bgcolor="#CCCC00"><hr><font size="+1">Printing time related to other options</font><hr>
+<tr valign=top> <th>dpi
+ <td>&nbsp;
+ <th colspan=3>Print mode
+ <td>&nbsp;
+ <th>Size KB
+ <td>&nbsp;
+ <th>Time
+ <td>&nbsp;
+ <th align=left>Comments
+<tr> <td colspan=11><hr>
+<tr valign=top> <td>180x180
+ <td>&nbsp;
+ <td>mono
+ <td>&nbsp;
+ <td align=right>-/uni
+ <td>&nbsp;
+ <td align=right>358
+ <td>&nbsp;
+ <td align=right>1:15
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td align=right>&nbsp;
+ <td>&nbsp;
+ <td align=right>-/bi
+ <td>&nbsp;
+ <td align=right>358
+ <td>&nbsp;
+ <td align=right>0:45
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td align=right>&nbsp;
+ <td>&nbsp;
+ <td align=right>micro/bi
+ <td>&nbsp;
+ <td align=right>205
+ <td>&nbsp;
+ <td align=right>0:45
+ <td>&nbsp;
+ <td>Not weaving
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td align=right>&nbsp;
+ <td>&nbsp;
+ <td align=right>soft/bi
+ <td>&nbsp;
+ <td align=right>179
+ <td>&nbsp;
+ <td align=right>1:25
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td>color
+ <td>&nbsp;
+ <td align=right>-/bi
+ <td>&nbsp;
+ <td align=right>641
+ <td>&nbsp;
+ <td align=right>2:45
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td align=right>&nbsp;
+ <td>&nbsp;
+ <td align=right>soft/bi
+ <td>&nbsp;
+ <td align=right>556
+ <td>&nbsp;
+ <td align=right>1:32
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>360x360
+ <td>&nbsp;
+ <td>mono
+ <td>&nbsp;
+ <td align=right>-/uni
+ <td>&nbsp;
+ <td align=right>269
+ <td>&nbsp;
+ <td align=right>0:50
+ <td>&nbsp;
+ <td>Monochrome text
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td align=right>&nbsp;
+ <td>&nbsp;
+ <td align=right>-/bi
+ <td>&nbsp;
+ <td align=right>269
+ <td>&nbsp;
+ <td align=right>0:35
+ <td>&nbsp;
+ <td>Monochrome text
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td align=right>&nbsp;
+ <td>&nbsp;
+ <td align=right>micro/bi
+ <td>&nbsp;
+ <td align=right>269
+ <td>&nbsp;
+ <td align=right>2:25
+ <td>&nbsp;
+ <td>Monochrome text
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td align=right>&nbsp;
+ <td>&nbsp;
+ <td align=right>soft/uni
+ <td>&nbsp;
+ <td align=right>250
+ <td>&nbsp;
+ <td align=right>3:15
+ <td>&nbsp;
+ <td>Monochrome text
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td align=right>&nbsp;
+ <td>&nbsp;
+ <td align=right>soft/bi
+ <td>&nbsp;
+ <td align=right>250
+ <td>&nbsp;
+ <td align=right>1:55
+ <td>&nbsp;
+ <td>Monochrome text
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td>color
+ <td>&nbsp;
+ <td align=right>-/bi
+ <td>&nbsp;
+ <td align=right>346
+ <td>&nbsp;
+ <td align=right>1:00
+ <td>&nbsp;
+ <td>Sparse-color page, visible displacements
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td align=right>&nbsp;
+ <td>&nbsp;
+ <td align=right>micro/bi
+ <td>&nbsp;
+ <td align=right>346
+ <td>&nbsp;
+ <td align=right>1:50
+ <td>&nbsp;
+ <td>Sparse-color page, looks buggy -- printer?
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td align=right>&nbsp;
+ <td>&nbsp;
+ <td align=right>soft/bi
+ <td>&nbsp;
+ <td align=right>294
+ <td>&nbsp;
+ <td align=right>1:30
+ <td>&nbsp;
+ <td>Sparse-color page, O.K.
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td align=right>&nbsp;
+ <td>&nbsp;
+ <td align=right>-/bi
+ <td>&nbsp;
+ <td align=right>2218
+ <td>&nbsp;
+ <td align=right>2:45
+ <td>&nbsp;
+ <td>Visible stripes
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td align=right>&nbsp;
+ <td>&nbsp;
+ <td align=right>micro/bi
+ <td>&nbsp;
+ <td align=right>5171
+ <td>&nbsp;
+ <td align=right>3:17
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td align=right>&nbsp;
+ <td>&nbsp;
+ <td align=right>soft/bi
+ <td>&nbsp;
+ <td align=right>3675
+ <td>&nbsp;
+ <td align=right>3:05
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>360x720
+ <td>&nbsp;
+ <td>mono
+ <td>&nbsp;
+ <td align=right>soft/bi
+ <td>&nbsp;
+ <td align=right>2761
+ <td>&nbsp;
+ <td align=right>5:40
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td>color
+ <td>&nbsp;
+ <td align=right>soft/bi
+ <td>&nbsp;
+ <td align=right>7789
+ <td>&nbsp;
+ <td align=right>6:15
+ <td>&nbsp;
+ <td>Just a small difference!
+<tr valign=top> <td>720x360
+ <td>&nbsp;
+ <td>color
+ <td>&nbsp;
+ <td align=right>soft/bi
+ <td>&nbsp;
+ <td align=right>7182
+ <td>&nbsp;
+ <td align=right>5:40
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>720x720
+ <td>&nbsp;
+ <td>color
+ <td>&nbsp;
+ <td align=right>micro/bi
+ <td>&nbsp;
+ <td align=right>14748
+ <td>&nbsp;
+ <td align=right>30:26
+ <td>&nbsp;
+ <td>Actually beyond printer's capabilities
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td align=right>&nbsp;
+ <td>&nbsp;
+ <td align=right>soft/bi
+ <td>&nbsp;
+ <td align=right>14407
+ <td>&nbsp;
+ <td align=right>11:08
+ <td>&nbsp;
+ <td>&nbsp;
+</table></blockquote>
+
+<h3><a name="STC_acks"></a>Acknowledgments</h3>
+
+<p>
+This driver was copied from <b><tt>gdevcdj.c</tt></b> (Ghostscript 3.12),
+which was contributed by George Cameron, Koert Zeilstra, and Eckhard
+Rueggeberg. Some of the ESC/P2 code was drawn from Richard Brown's
+<b><tt>gdevescp.c</tt></b>. The POSIX interrupt code (compilation option
+<b><tt>-DSTC_SIGNAL</tt></b>) is from Frederic Loyer. Several improvements
+are based on discussions with Brian Converse, Bill Davidson, Gero Guenther,
+Jason Patterson, ? Rueschstroer, and Steven Singer.
+
+<p>
+While I wish to thank everyone mentioned above, they are by no means
+responsible for bugs in the stcolor driver -- just for the features.
+
+<address>
+Gunther Hess<br>
+Richard Wagner Strasse 112<br>
+D-47057 Duisburg<br>
+Germany<br>
++49 203 376273 telephone (MET evening hours)<br>
+&lt;<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>&gt;
+</address>
+
+<hr>
+
+<h2><a name="Uniprint"></a>uniprint, a flexible unified printer driver</h2>
+
+<p>
+<b><tt>uniprint</tt></b> is a unified parametric driver by Gunther Hess
+&lt;<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>&gt; for several
+kinds of printers and devices, including
+
+<blockquote>
+<ul>
+<li>any Epson Stylus Color, Stylus, or Stylus Pro
+<li>HP PCL/RTL
+<li>Canon BubbleJet Color 610
+<li>NEC P2X
+<li>Sun raster file format
+</ul></blockquote>
+
+<p>
+This driver is intended to <em>become</em> a unified printer driver. If you
+consider it ugly, please send me your suggestions for improvements. The
+driver will be updated with them. Thus the full explanation of the driver's
+name is:
+
+<blockquote>
+Ugly- -&gt; Updated- -&gt; Unified Printer Driver
+</blockquote>
+
+<p>
+But you probably want to know something about the functionality.
+At the time of this writing uniprint drives:
+
+<ul>
+<li>NEC Pinwriter P2X (24-pin monochrome impact printer, ESC/P style)
+<li>Several Epson Stylus Color models (ESC/P2 style)
+<li>HP-DeskJet 550c (basic HP-RTL)
+<li>Canon BJC 610
+</ul>
+
+<p>
+It can be configured for various other printers without recompilation
+and offers uncompressed (ugly) Sun rasterfiles as another format, but
+this format is intended for testing purposes rather than real use.
+The usage of this driver is quite simple. The typical command line looks
+like this:
+
+<blockquote>
+<b><tt>gs @</tt></b>{MODEL}<b><tt>.upp -sOutputFile=</tt></b>{printable file}<b><tt> MyFile.ps -c quit</tt></b>
+</blockquote>
+
+<p>
+For example, from my GNU/Linux box:
+
+<blockquote><b><tt>
+gs @stc.upp -sOutputFile=/dev/lp1 tiger.ps -c quit
+</tt></b></blockquote>
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=6 bgcolor="#CCCC00"><hr><font size="+1">Unified Printer Parameter files distributed with Ghostscript</font><hr>
+<tr> <th align=left colspan=6>Canon BJC 610 (color, rendered)
+<tr valign=top> <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <td><b><tt>bjc610a0.upp</tt></b>
+ <td>&nbsp;&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;&nbsp;
+ <td>plain paper, high speed
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>bjc610a1.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>plain paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>bjc610a2.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>coated paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>bjc610a3.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>transparency film
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>bjc610a4.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>back print film
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>bjc610a5.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>fabric sheet
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>bjc610a6.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>glossy paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>bjc610a7.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>high gloss film
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>bjc610a8.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>high resolution paper
+<tr> <td>&nbsp;
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>bjc610b1.upp</tt></b>
+ <td>&nbsp;
+ <td>720&times;720dpi
+ <td>&nbsp;
+ <td>plain paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>bjc610b2.upp</tt></b>
+ <td>&nbsp;
+ <td>720&times;720dpi
+ <td>&nbsp;
+ <td>coated paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>bjc610b3.upp</tt></b>
+ <td>&nbsp;
+ <td>720&times;720dpi
+ <td>&nbsp;
+ <td>transparency film
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>bjc610b4.upp</tt></b>
+ <td>&nbsp;
+ <td>720&times;720dpi
+ <td>&nbsp;
+ <td>back print film
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>bjc610b6.upp</tt></b>
+ <td>&nbsp;
+ <td>720&times;720dpi
+ <td>&nbsp;
+ <td>glossy paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>bjc610b7.upp</tt></b>
+ <td>&nbsp;
+ <td>720&times;720dpi
+ <td>&nbsp;
+ <td>high-gloss paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>bjc610b8.upp</tt></b>
+ <td>&nbsp;
+ <td>720&times;720dpi
+ <td>&nbsp;
+ <td>high resolution paper
+<tr> <td>&nbsp;
+<tr> <th align=left colspan=6>HP Ink-Printers
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>cdj550.upp</tt></b>
+ <td>&nbsp;
+ <td>300&times;300dpi
+ <td>&nbsp;
+ <td>32-bit CMYK
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>cdj690.upp</tt></b>
+ <td>&nbsp;
+ <td>300&times;300dpi
+ <td>&nbsp;
+ <td>Normal mode
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>cdj690ec.upp</tt></b>
+ <td>&nbsp;
+ <td>300&times;300dpi
+ <td>&nbsp;
+ <td>Economy mode
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>dnj750c.upp</tt></b>
+ <td>&nbsp;
+ <td>300&times;300dpi
+ <td>&nbsp;
+ <td>Color -- also good for 450C
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>dnj750m.upp</tt></b>
+ <td>&nbsp;
+ <td>600&times;600dpi
+ <td>&nbsp;
+ <td>Monochrome
+<tr> <td>&nbsp;
+<tr> <th align=left colspan=6>NEC P2X
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>necp2x.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>8-bit (Floyd-Steinberg)
+<tr> <td>&nbsp;
+<tr> <th align=left colspan=6>Any Epson Stylus Color
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stcany.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>4-bit, PostScript halftoning
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stcany_h.upp</tt></b>
+ <td>&nbsp;
+ <td>720&times;720dpi
+ <td>&nbsp;
+ <td>4-bit, PostScript halftoning
+<tr> <td>&nbsp;
+<tr> <th align=left colspan=6>Original Epson Stylus and Stylus Pro Color
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>32-bit CMYK, 15-pin
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc_l.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>4-bit, PostScript halftoning, weaved noWeave
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc_h.upp</tt></b>
+ <td>&nbsp;
+ <td>720&times;720dpi
+ <td>&nbsp;
+ <td>32-bit CMYK, 15-pin Weave
+<tr> <td>&nbsp;
+<tr> <th align=left colspan=6>Epson Stylus Color II
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc2.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>32-bit CMYK, 20-pin, Epson Stylus Color II(s)
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc2_h.upp</tt></b>
+ <td>&nbsp;
+ <td>720&times;720dpi
+ <td>&nbsp;
+ <td>32-bit CMYK, 20-pin, Epson Stylus Color II
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc2s_h.upp</tt></b>
+ <td>&nbsp;
+ <td>720&times;720dpi
+ <td>&nbsp;
+ <td>32-bit CMYK, 20-pin, Epson Stylus Color IIs
+<tr> <td>&nbsp;
+<tr> <th align=left colspan=6>Epson Stylus Color 200
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc200.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;720dpi
+ <td>&nbsp;
+ <td>Plain Paper
+<tr> <td>&nbsp;
+<tr> <th align=left colspan=6>Epson Stylus Color 300
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc300.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>32-bit CMYK, plain paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc300bl.upp</tt></b>
+ <td>&nbsp;
+ <td>180&times;180dpi
+ <td>&nbsp;
+ <td>black only, plain paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc300bm.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>black only, plain paper
+<tr> <td>&nbsp;
+<tr> <th align=left colspan=6>Epson Stylus Color 500 (good transfer curves for plain paper)
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc500p.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>32-bit CMYK, noWeave, plain paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc500ph.upp</tt></b>
+ <td>&nbsp;
+ <td>720&times;720dpi
+ <td>&nbsp;
+ <td>32-bit CMYK, noWeave, plain paper
+<tr> <td>&nbsp;
+<tr> <th align=left colspan=6>Epson Stylus Color 600, 32/90-inch weaving
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc600pl.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>32-bit CMYK, 32-pin, plain paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc600p.upp</tt></b>
+ <td>&nbsp;
+ <td>720&times;720dpi
+ <td>&nbsp;
+ <td>32-bit CMYK, 32-pin, plain paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc600ih.upp</tt></b>
+ <td>&nbsp;
+ <td>1440&times;720dpi
+ <td>&nbsp;
+ <td>32-bit CMYK, 30-pin, inkjet paper
+<tr> <td>&nbsp;
+<tr> <th align=left colspan=6>Epson Stylus Color 640
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc640p.upp</tt></b>
+ <td>&nbsp;
+ <td>720&times;720dpi
+ <td>&nbsp;
+ <td>plain paper?
+
+
+
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>st640p.upp</tt></b>
+ <td>&nbsp;
+ <td>720&times;720dpi
+ <td>&nbsp;
+ <td>CMYK, plain paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>st640pg.upp</tt></b>
+ <td>&nbsp;
+ <td>720&times;720dpi
+ <td>&nbsp;
+ <td>grayscale, plain paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>st640pl.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>CMYK, plain paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>st640plg.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>grayscale, plain paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>st640ih.upp</tt></b>
+ <td>&nbsp;
+ <td>1440&times;720dpi
+ <td>&nbsp;
+ <td>CMYK, inkjet paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>st640ihg.upp</tt></b>
+ <td>&nbsp;
+ <td>1440&times;720dpi
+ <td>&nbsp;
+ <td>grayscale, inkjet paper
+
+
+
+
+
+
+<tr> <td>&nbsp;
+<tr> <th align=left colspan=6>Epson Stylus Color 800, 64/180-inch weaving
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc800pl.upp</tt></b>
+ <td>&nbsp;
+ <td>360&times;360dpi
+ <td>&nbsp;
+ <td>32-bit CMYK, 64-pin, plain paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc800p.upp</tt></b>
+ <td>&nbsp;
+ <td>720&times;720dpi
+ <td>&nbsp;
+ <td>32-bit CMYK, 64-pin, plain paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc800ih.upp</tt></b>
+ <td>&nbsp;
+ <td>1440&times;720dpi
+ <td>&nbsp;
+ <td>32-bit CMYK, 62-pin, inkjet paper
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>stc1520.upp</tt></b>
+ <td>&nbsp;
+ <td>1440&times;720dpi
+ <td>&nbsp;
+ <td>32-bit CMYK, 62-pin, inkjet paper
+<tr> <td>&nbsp;
+<tr> <th align=left colspan=6>Sun raster file
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>ras1.upp</tt></b>
+ <td>&nbsp;
+ <td>1-bit
+ <td>&nbsp;
+ <td>monochrome (Ghostscript)
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>ras3.upp</tt></b>
+ <td>&nbsp;
+ <td>3-bit
+ <td>&nbsp;
+ <td>RGB (Ghostscript)
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>ras4.upp</tt></b>
+ <td>&nbsp;
+ <td>4-bit
+ <td>&nbsp;
+ <td>CMYK (Ghostscript)
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>ras8m.upp</tt></b>
+ <td>&nbsp;
+ <td>8-bit
+ <td>&nbsp;
+ <td>grayscale (Floyd-Steinberg)
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>ras24.upp</tt></b>
+ <td>&nbsp;
+ <td>24-bit
+ <td>&nbsp;
+ <td>RGB (Floyd-Steinberg)
+<tr valign=top> <td>&nbsp;
+ <td><b><tt>ras32.upp</tt></b>
+ <td>&nbsp;
+ <td>32-bit
+ <td>&nbsp;
+ <td>CMYK (CMYK-Floyd-Steinberg)
+</table></blockquote>
+
+<p>
+Thanks to Danilo Beuche, Guido Classen, Mark Goldberg and Hans-Heinrich
+Viehmann for providing the files for the stc200, hp690, stc500 and the
+stc640. Thanks to Michael Lossin &lt;losse@germanymail.com&gt; for the
+newer st640 parameter sets.
+
+<p>
+Please note the following:
+
+<blockquote><ul>
+<li>Changing the resolution with Ghostscript's
+<a href="Use.htm#Resolution_switch"><b><tt>-r</tt></b> switch</a> is
+usually not possible.
+<li>For Epson Stylus Color models not listed above, the two
+<b><tt>stc500</tt></b> variants are likely to work in addition to
+<b><tt>stcany</tt></b>, but their gamma correction might be wrong.
+</ul></blockquote>
+
+<h3><a name="Uni_state"></a>The state of this driver</h3>
+
+<p>
+The coding of <b><tt>uniprint</tt></b> was triggered by the requirements of
+the various Stylus Color models and some personal needs for HP and NEC
+drivers. Thus the Epson models are well represented among the distributed
+parameter files. When this driver entered the beta test phase, three other
+drivers appreared on the scene that could be at least partially integrated
+into <b><tt>uniprint</tt></b>: <b><tt>cdj850</tt></b> by Uli Wortmann
+(available at <a href="http://www.erdw.ethz.ch/~bonk/hp850/hp850.html">http://www.erdw.ethz.ch/~bonk/hp850/hp850.html</a>),
+<b><tt>hpdj</tt></b> by Martin Lottermoser, and <b><tt>bjc610</tt></b> by
+Helmut Riegler.
+
+<p>
+Uli addresses features of the more recent DeskJet models that will not be
+available in <b><tt>uniprint</tt></b> soon. Martin taught me a lesson on
+HP-PCL3 headers that will be available in <b><tt>uniprint</tt></b>
+soon. Helmut in turn followed an almost similar idea, but targetted
+primarily for printing on Canon printers from the pbmplus library. Starting
+with version 1.68 of uniprint, BJC support is available. Work on the
+<b><tt>hpdj</tt></b> integration will start after the update of my website.
+
+<h3><a name="Uni_background"></a>Notes on <b><tt>uniprint</tt></b>'s background</h3>
+
+<p>
+<b><tt>uniprint</tt></b> is actually an update of <b><tt>stcolor</tt></b>,
+but much more versatile than its predecessor; <b><tt>stcolor</tt></b>, in
+its turn, started as a clone of the color DeskJet family of drivers
+(<b><tt>cdj</tt></b>*). Finally, <b><tt>cdj</tt></b>* can be considered an
+addition of features to the simpler monochrome drivers of Ghostscript. This
+addition of features is useful to get an idea of the functionality of
+<b><tt>uniprint</tt></b>:
+
+<blockquote>
+<dl>
+<dt>Monochrome to advanced color (<b><tt>cdj</tt></b>*):
+<dd>This adds color mapping and rendering functions to the driver.
+Error diffusion is especially important for the quality of printing.
+</dl>
+
+<dl>
+<dt>HP color to Epson Color (<b><tt>stcolor</tt></b>)
+<dd>The Epson Stylus Color offered two features simultaneously: it could
+produce 720&times;720dpi output and it could soak the paper. In other
+words, it required more color management features inside the driver. This
+is still the major conceptual difference in the data generation for HP and
+Epson printers.
+</dl>
+
+<dl>
+<dt>Weaving techniques (<b><tt>stcolor</tt></b>)
+<dd>Besides the internal color management, the Stylus Color did not provide
+enough buffer space to operate the printer fast at 720&times;720dpi. The
+use of weaving could yield triple the print speed. Weaving, also called
+interleaving, is present in some monochrome drivers too. The new thing in
+<b><tt>stcolor</tt></b> was the combination with error diffusion.
+Unfortunately the weaving was somehow hard-coded, as the problems with the
+newer members of the Stylus Color family of printers demonstrated.
+</dl>
+
+<dl>
+<dt>Generalized output format and weaving (<b><tt>uniprint</tt></b>)
+<dd>The features mentioned above yield about 90% of
+<b><tt>stcolor</tt></b>'s source code; only 10% is related to the
+formatting of the output. The idea to make the output format switchable
+came up soon after completing <b><tt>stcolor</tt></b>, but its final design
+was triggered by the (personal) necessity to drive a NEC P2X and a
+Designjet 750c.
+</dl></blockquote>
+
+<p>
+Thus <b><tt>uniprint</tt></b> accumulates almost any features that can be
+found among the other printer drivers, which clearly has some disadvantage
+in processing speed -- true in particular of version 1.75, since it was
+targetted for functionality, and several speed-gaining features were
+(knowingly) omitted.
+
+<p>
+To summarize and to introduce the terms used in the description of the
+parameters, the features of <b><tt>uniprint</tt></b> that can be
+parameterized are:
+
+<blockquote><ul>
+<li>color mapping,
+<li>color rendering (error diffusion or Floyd-Steinberg),
+<li>output format, including
+<li>weaving.
+</ul></blockquote>
+
+<h3><a name="Uni_make_pfile"></a>Godzilla's guide to the creation of Unified Printer Parameter (<b><tt>.upp</tt></b>) files</h3>
+
+<p>
+Here is one of the distributed parameter files (<b><tt>stc_l.upp</tt></b>)
+with some added comments. Also see the section that describes
+<a href="#Uni_all_parameters">all <b><tt>uniprint</tt></b>'s parameters in
+brief</a>.
+
+<pre>
+-supModel="Epson Stylus Color I (and PRO Series), 360x360DpI, noWeave"
+-sDEVICE=uniprint -- Select the driver
+-dNOPAUSE -- Useful with printers
+-dSAFER -- Provides some security
+-dupColorModel=/DeviceCMYK -- Selects the color mapping
+-dupRendering=/ErrorDiffusion -- Selects the color rendering
+-dupOutputFormat=/EscP2 -- Selects the output format
+-r360x360 -- Adjusts the resolution
+-dupMargins="{ 9.0 39.96 9.0 9.0}" -- Establishes (L/B/R/T margins in points)
+-dupComponentBits="{1 1 1 1}" -- Map: bits per component (default: 8)
+-dupWeaveYPasses=4 -- Weave: Y-passes (default: 1)
+-dupOutputPins=15 -- Format/weave: scans per Command
+-dupBeginPageCommand="&lt; -- Goes to the printer
+ 1b40 1b40 -- ESC '@' ESC '@' -&gt; dual reset
+ 1b2847 0100 01 -- ESC '(' 'G' 1 0 1 -&gt; graphics
+ 1b2869 0100 00 -- ESC '(' 'i' 1 0 1 -&gt; no HW weave
+ 1b2855 0100 0A -- ESC '(' 'U' 1 0 10 -&gt; 360dpi
+ 1b5500 -- ESC 'U' 0 -&gt; bidir print
+ 1b2843 0200 0000 -- ESC '(' 'C' 2 0 xx -&gt; page length
+ 1b2863 0400 0000 0000 -- ESC '(' 'c' 4 0 xxxx -&gt; margins
+&gt;" -- as it is, unless:
+-dupAdjustPageLengthCommand -- Adjust page length in BOP requested
+-dupAdjustTopMarginCommand -- Adjust top margin in BOP
+-dupAdjustBottomMarginCommand -- Adjust bottom margin in BOP
+-dupEndPageCommand="(\033@\014)" -- Last (but one) data to the printer
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
+</pre>
+
+<p>
+That's short, and if one removes <b><tt>upWeaveYPasses</tt></b> and
+<b><tt>upOutputPins</tt></b> it becomes shorter, almost
+<b><tt>stcany.upp</tt></b>. This miniature size is because I am most
+familiar with ESC/P2, and was able to add defaults for the omitted
+parameters. Now a few notes about the parameters used in this example:
+
+<ul>
+<li><b><tt>upModel</tt></b> is a string serving as a comment (and nothing else).
+
+<li><a href="Use.htm#Output_device"><b><tt>DEVICE</tt></b></a>,
+<a href="Use.htm#NoPause"><b><tt>NOPAUSE</tt></b></a>, <a
+href="Use.htm#Safer"><b><tt>SAFER</tt></b></a> are well-known Ghostscript
+parameters described in the <a href="Use.htm">usage documentation</a>.
+
+<li><b><tt>upColorModel</tt></b> is one of major <b><tt>uniprint</tt></b>
+parameters: it selects the color mapping and in turn the PostScript color
+model. It supports the devices <b><tt>/DeviceGray</tt></b>, <b><tt>/DeviceRGBW</tt></b>, <b><tt>/DeviceRGB</tt></b>, <b><tt>/DeviceCMYK</tt></b>, and <b><tt>/DeviceCMYKgenerate</tt></b>.
+
+<li><b><tt>upRendering</tt></b> selects the (color) rendering, supporting
+the values <b><tt>/ErrorDiffusion</tt></b> and <b><tt>/FSCMYK32</tt></b>.
+<b><tt>/ErrorDiffusion</tt></b> is similar to <b><tt>fsmono</tt></b>,
+<b><tt>fsrgb</tt></b> and <b><tt>fsx4</tt></b> of <b><tt>stcolor</tt></b>,
+while <b><tt>/FSCMYK32</tt></b> is (almost) identical to
+<b><tt>fscmyk</tt></b> and <b><tt>hscmyk</tt></b>, but is restricted to
+32-bit data and should be used in conjunction with
+<b><tt>/DeviceCMYKgenerate</tt></b>.
+
+<li><b><tt>upOutputFormat</tt></b> selects the output method, supporting the values
+<b><tt>/SunRaster</tt></b>, <b><tt>/Epson</tt></b>, <b><tt>/EscP2</tt></b>, <b><tt>/EscP2XY</tt></b>, and<b><tt>/Pcl</tt></b>.
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <td><b><tt>/SunRaster</tt></b>
+ <td>&nbsp;
+ <td>creates Sun raster files and requires no other parameters
+<tr valign=top> <td><b><tt>/Epson</tt></b>
+ <td>&nbsp;
+ <td>is used for the elderly ESC/P format (used by many printers)
+<tr valign=top> <td><b><tt>/EscP2</tt></b>
+ <td>&nbsp;
+ <td>is used by more recent Epson printers (no X weaving supported)
+<tr valign=top> <td><b><tt>/EscP2XY</tt></b>
+ <td>&nbsp;
+ <td>supports X-Weaving, used with 1440dpi printers and in <b><tt>stc2s_h</tt></b>
+<tr valign=top> <td><b><tt>/Pcl</tt></b>
+ <td>&nbsp;
+ <td>HP PCL/RTL-style output formatter without weaving
+</table></blockquote>
+
+<li><b><tt>-r360x360</tt></b> is Ghostscript's standard
+<a href="Use.htm#Resolution_switch">resolution switch</a>.
+
+<li><b><tt>upMargins="{&nbsp;9.0&nbsp;39.96&nbsp;9.0&nbsp;9.0}"</tt></b>
+has function similar to the Ghostscript parameter
+<b><tt>.HWMargins</tt></b>: it sets the left, bottom, right, and top
+margins in points. <b><tt>uniprint</tt></b> provides this parameter to
+enable automatic left-right exchange if <b><tt>upYFlip</tt></b> is active.
+
+<li><b><tt>upComponentBits</tt></b> is an array of integers that selects
+the bits stored in raster memory, by default 8 bits per component. In this
+example, 1 bit is selected for each component, thus turning down the
+Floyd-Steinberg algorithm (but still carrying out the time-consuming
+computation). The related parameter "<b><tt>upComponentShift</tt></b>"
+controls positioning the components within raster memory. Each of the
+numbers given corresponds to a component which depends on the selected
+"<b><tt>upColorModel</tt></b>":
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <td align=center>&nbsp;
+ <td>&nbsp;
+ <td align=center><b><tt>/DeviceGray</tt></b>
+ <td>&nbsp;
+ <td align=center><b><tt>/DeviceRGBW</tt></b>
+ <td>&nbsp;
+ <td align=center><b><tt>/DeviceRGB</tt></b>
+ <td>&nbsp;
+ <td align=center><b><tt>/DeviceCMYK</tt></b>
+ <td>&nbsp;
+ <td align=center><b><tt>/DeviceCMYKgenerate</tt></b>
+<tr> <td colspan=11><hr>
+<tr valign=top> <td align=center>0
+ <td>&nbsp;
+ <td align=center>White
+ <td>&nbsp;
+ <td align=center>White
+ <td>&nbsp;
+ <td align=center>Red
+ <td>&nbsp;
+ <td align=center>Black
+ <td>&nbsp;
+ <td align=center>Black
+<tr valign=top> <td align=center>1
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>Red
+ <td>&nbsp;
+ <td align=center>Green
+ <td>&nbsp;
+ <td align=center>Cyan
+ <td>&nbsp;
+ <td align=center>Cyan
+<tr valign=top> <td align=center>2
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>Green
+ <td>&nbsp;
+ <td align=center>Blue
+ <td>&nbsp;
+ <td align=center>Magenta
+ <td>&nbsp;
+ <td align=center>Magenta
+<tr valign=top> <td align=center>3
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>Blue
+ <td>&nbsp;
+ <td align=center>--
+ <td>&nbsp;
+ <td align=center>Yellow
+ <td>&nbsp;
+ <td align=center>Yellow
+</table>
+
+<p>
+This order may not be suitable for some printers, so another parameter
+"<b><tt>upOutputComponentOrder</tt></b>", also an array of integers,
+selects the output order using the numbers on the left.
+</blockquote>
+
+<p>
+One group of very important parameters not used in the example above
+deserves to be mentioned here: the transfer arrays, named
+"<b><tt>up</tt><em>{color}</em><tt>Transfer</tt></b>", where
+<b><em>{color}</em></b> is one of the names in the table above. These are
+arrays of floats in the range 0.0 - 1.0 representing the color transfer
+functions. They are used during mapping and rendering. In the simplest
+case, these arrays ensure an equidistant distribution of the stored values
+within the device space (which means a nonlinear mapping from Ghostscript's
+point of view). If the given array does not cover the entire range from 0
+to 1, which applies for the Stylus Color family at high resolution for some
+media, only the relevant part gets mapped to raster memory (meaning that
+is's fully utilized) and the rendering takes care of the "overhang" (in
+this case the post-diffusion of 1-bit components makes sense).
+
+<p>
+Finally an important note on the transfer arrays: for monochrome devices
+the stored component is <b><tt>White</tt></b>, which is the way PostScript
+defines these devices, but most printers require <b><tt>Black</tt></b>.
+Thus one has to provide a falling "<b><tt>upWhiteTransfer</tt></b>" for
+such printers.
+
+<li><b><tt>upWeaveYPasses</tt></b> is an integer that gives the number of
+print head passes required to achieve the requested Ydpi. This makes sense
+only if
+
+<li><b><tt>upOutputPins</tt></b> is set to something greater than 1. Thus
+multiple pins or nozzles are transferred with a single command, and of
+course such a command must be supported by the device.
+
+</ul>
+
+<p>
+If no other weave parameters are given, <b><tt>uniprint</tt></b> computes
+several defaults which together do no weaving. The <b><tt>/Epson</tt></b>
+and <b><tt>/EscP2XY</tt></b> formats take care of
+"<b><tt>upWeaveXPasses</tt></b>" too.
+
+<ul>
+
+<li><b><tt>upBeginPageCommand</tt></b> represents the data transferred to
+the printer whenever a new page begins. Before that,
+"<b><tt>upBeginJobCommand</tt></b>" is written to the device only once per
+output file. (Intended for the HP PJL sequences).
+
+<li><b><tt>upAdjustBottomMarginCommand</tt></b>,
+<b><tt>upAdjustMediaSize</tt></b>,
+<b><tt>upAdjustPageLengthCommand</tt></b>,
+<b><tt>upAdjustPageWidthCommand</tt></b>,
+<b><tt>upAdjustResolutionCommand</tt></b>, and
+<b><tt>upAdjustTopMarginCommand</tt></b>
+
+<p>
+Normally <b><tt>uniprint</tt></b> does not change the
+"<b><tt>upBeginPageCommand</tt></b>", nor does it provide a default.
+However, if the above boolean values are set, the corresponding values are
+changed (provided that the code of the formatters supports this change and
+the commands to be adjusted are included in the BOP string).
+
+<li><b><tt>upEndPageCommand</tt></b> is the fixed termination sequence for
+each page, and of course there is an "<b><tt>upEndJobCommand</tt></b>" too.
+
+<li><b><tt>upAbortCommand</tt></b> is written if <b><tt>uniprint</tt></b>'s
+interrupt detection is enabled and a signal is caught. It replaces
+"<b><tt>upEndPageCommand</tt></b>" and "<b><tt>upEndJobCommand</tt></b>",
+thus allowing the indication of an aborted job. (Ghostscript gets an error
+return from <b><tt>uniprint</tt></b> in this case, and abandons further
+processing.)
+
+</ul>
+
+<p>
+For the ESC/P(2) formats all commands represent binary data, while for
+the PCL/RTL formatter some of them are formats for <b><tt>fprintf</tt></b>. These strings
+<b><em>must</em></b> explicitly have a trailing "\0'.
+
+<p>
+I should write more, but the only recommendation is to
+take a look at the various parameter files. Here are a few more hints.
+
+<ul>
+<li>If the Driver rejects a configuration, nothing happens until
+<b><tt>showpage</tt></b>; then an error is raised and a message with
+"CALL-REJECTED upd_print_page..." is printed on stderr.
+
+<li><b><tt>uniprint</tt></b> has lots of messages that can be activated by
+setting bits in the preprocessor macro <b><tt>UPD_MESSAGES</tt></b>. I
+usually use the compile-time option <b><tt>-DUPD_MESSAGES=0x17</tt></b> for
+configuration development. (For the semantics, check the
+<b><tt>UPD_M_</tt></b> macros in the source.)
+
+<li>A program "<b><tt>uninfo.ps</tt></b>" distributed with Ghostscript
+displays interactively in alphabetical order the contents of the current
+pagedevice dictionary. This includes any parameters generated or changed by
+<b><tt>uniprint</tt></b>.
+</ul>
+
+<h3><a name="Uni_all_parameters"></a>All parameters in brief</h3>
+
+<p>
+This table gives a brief explanation of every parameter known to
+<b><tt>uniprint</tt></b>, listing them in alphabetical order. "[&nbsp;]"
+denotes that a parameter is an array, and "(RO)" that it is read-only.
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">All <b><tt>uniprint</tt></b> parameters</font><hr>
+<tr valign=bottom>
+ <th align=left>Parameter
+ <td>&nbsp;
+ <th align=left>Type
+ <td>&nbsp;&nbsp;&nbsp;
+ <th align=left>Use
+<tr> <td colspan=5><hr>
+<tr valign=top> <td><b><tt>upAbortCommand</tt></b>
+ <td>&nbsp;
+ <td>String
+ <td>&nbsp;
+ <td>End of page and file on interrupt
+<tr valign=top> <td><b><tt>upAdjustBottomMarginCommand</tt></b>
+ <td>&nbsp;
+ <td>Bool
+ <td>&nbsp;
+ <td>Manipulate bottom margin in <b><tt>upBeginPageCommand</tt></b>
+<tr valign=top> <td><b><tt>upAdjustMediaSizeCommand</tt></b>
+ <td>&nbsp;
+ <td>Bool
+ <td>&nbsp;
+ <td>Manipulate <b><tt>Mediasize</tt></b> [intended]
+<tr valign=top> <td><b><tt>upAdjustPageLengthCommand</tt></b>
+ <td>&nbsp;
+ <td>Bool
+ <td>&nbsp;
+ <td>Manipulate page length in <b><tt>upBeginPageCommand</tt></b>
+<tr valign=top> <td><b><tt>upAdjustPageWidthCommand</tt></b>
+ <td>&nbsp;
+ <td>Bool
+ <td>&nbsp;
+ <td>Manipulate page width in <b><tt>upBeginPageCommand</tt></b>
+<tr valign=top> <td><b><tt>upAdjustResolutionCommand</tt></b>
+ <td>&nbsp;
+ <td>Bool
+ <td>&nbsp;
+ <td>Manipulate resolution
+<tr valign=top> <td><b><tt>upAdjustTopMarginCommand</tt></b>
+ <td>&nbsp;
+ <td>Bool
+ <td>&nbsp;
+ <td>Manipulate top margin in <b><tt>upBeginPageCommand</tt></b>
+<tr valign=top> <td><b><tt>upBeginJobCommand</tt></b>
+ <td>&nbsp;
+ <td>String
+ <td>&nbsp;
+ <td>Begin each output file
+<tr valign=top> <td><b><tt>upBeginPageCommand</tt></b>
+ <td>&nbsp;
+ <td>String
+ <td>&nbsp;
+ <td>Begin each page
+<tr valign=top> <td><b><tt>upBlackTransfer</tt></b>
+ <td>&nbsp;
+ <td>Float[&nbsp;]
+ <td>&nbsp;
+ <td>Black transfer (CMYK only!)
+<tr valign=top> <td><b><tt>upBlueTransfer</tt></b>
+ <td>&nbsp;
+ <td>Float[&nbsp;]
+ <td>&nbsp;
+ <td>Blue transfer
+<tr valign=top> <td><b><tt>upColorInfo</tt></b>
+ <td>&nbsp;
+ <td>Int[&nbsp;]
+ <td>&nbsp;
+ <td>struct <b><tt>gx_device_color_info</tt></b>
+<tr valign=top> <td><b><tt>upColorModel</tt></b>
+ <td>&nbsp;
+ <td>Name
+ <td>&nbsp;
+ <td>Select color mapping
+<tr valign=top> <td><b><tt>upColorModelInitialized</tt></b>
+ <td>&nbsp;
+ <td>Bool (RO)
+ <td>&nbsp;
+ <td>Color mapping OK
+<tr valign=top> <td><b><tt>upComponentBits</tt></b>
+ <td>&nbsp;
+ <td>Int[&nbsp;]
+ <td>&nbsp;
+ <td>Bits stored per component
+<tr valign=top> <td><b><tt>upComponentShift</tt></b>
+ <td>&nbsp;
+ <td>Int[&nbsp;]
+ <td>&nbsp;
+ <td>Positioning within <b><tt>gx_color_index</tt></b>
+<tr valign=top> <td><b><tt>upCyanTransfer</tt></b>
+ <td>&nbsp;
+ <td>Float[&nbsp;]
+ <td>&nbsp;
+ <td>Cyan transfer
+<tr valign=top> <td><b><tt>upEndJobCommand</tt></b>
+ <td>&nbsp;
+ <td>String
+ <td>&nbsp;
+ <td>End each file unless <b><tt>upAbortCommand</tt></b>
+<tr valign=top> <td><b><tt>upEndPageCommand</tt></b>
+ <td>&nbsp;
+ <td>String
+ <td>&nbsp;
+ <td>End each page unless <b><tt>upAbortCommand</tt></b>
+<tr valign=top> <td><b><tt>upErrorDetected</tt></b>
+ <td>&nbsp;
+ <td>Bool (RO)
+ <td>&nbsp;
+ <td>Severe (VM) error, not fully operational
+<tr valign=top> <td><b><tt>upFSFixedDirection</tt></b>
+ <td>&nbsp;
+ <td>Bool
+ <td>&nbsp;
+ <td>Inhbits direction toggling in rendering
+<tr valign=top> <td><b><tt>upFSProcessWhiteSpace</tt></b>
+ <td>&nbsp;
+ <td>Bool
+ <td>&nbsp;
+ <td>Causes white-space rendering
+<tr valign=top> <td><b><tt>upFSReverseDirection</tt></b>
+ <td>&nbsp;
+ <td>Bool
+ <td>&nbsp;
+ <td>Run rendering in reverse (if fixed)
+<tr valign=top> <td><b><tt>upFSZeroInit</tt></b>
+ <td>&nbsp;
+ <td>Bool
+ <td>&nbsp;
+ <td>Non-random rendering initialization
+<tr valign=top> <td><b><tt>upFormatXabsolute</tt></b>
+ <td>&nbsp;
+ <td>Bool
+ <td>&nbsp;
+ <td>Write absolute X coordinates
+<tr valign=top> <td><b><tt>upFormatYabsolute</tt></b>
+ <td>&nbsp;
+ <td>Bool
+ <td>&nbsp;
+ <td>Write absolute Y coordinates
+<tr valign=top> <td><b><tt>upGreenTransfer</tt></b>
+ <td>&nbsp;
+ <td>Float[&nbsp;]
+ <td>&nbsp;
+ <td>Green transfer
+<tr valign=top> <td><b><tt>upMagentaTransfer</tt></b>
+ <td>&nbsp;
+ <td>Float[&nbsp;]
+ <td>&nbsp;
+ <td>Magenta transfer
+<tr valign=top> <td><b><tt>upMargins</tt></b>
+ <td>&nbsp;
+ <td>Float[&nbsp;]
+ <td>&nbsp;
+ <td>L/B/R/T margins in points
+<tr valign=top> <td><b><tt>upModel</tt></b>
+ <td>&nbsp;
+ <td>String
+ <td>&nbsp;
+ <td>Comment string, holds some info
+<tr valign=top> <td><b><tt>upOutputAborted</tt></b>
+ <td>&nbsp;
+ <td>Bool (RO)
+ <td>&nbsp;
+ <td>Caught an interrupt
+<tr valign=top> <td><b><tt>upOutputBuffers</tt></b>
+ <td>&nbsp;
+ <td>Int
+ <td>&nbsp;
+ <td>Number of rendering buffers (2^<small><sup><b>N</b></sup></small>)
+<tr valign=top> <td><b><tt>upOutputComponentOrder</tt></b>
+ <td>&nbsp;
+ <td>Int[&nbsp;]
+ <td>&nbsp;
+ <td>Order of components when printing
+<tr valign=top> <td><b><tt>upOutputComponents</tt></b>
+ <td>&nbsp;
+ <td>Int
+ <td>&nbsp;
+ <td>Number of written components, not fully operational
+<tr valign=top> <td><b><tt>upOutputFormat</tt></b>
+ <td>&nbsp;
+ <td>Name
+ <td>&nbsp;
+ <td>Select output format
+<tr valign=top> <td><b><tt>upOutputFormatInitialized</tt></b>
+ <td>&nbsp;
+ <td>Bool (RO)
+ <td>&nbsp;
+ <td>Format data OK
+<tr valign=top> <td><b><tt>upOutputHeight</tt></b>
+ <td>&nbsp;
+ <td>Int
+ <td>&nbsp;
+ <td>Output height in pixels
+<tr valign=top> <td><b><tt>upOutputPins</tt></b>
+ <td>&nbsp;
+ <td>Int
+ <td>&nbsp;
+ <td>Number of pins / nozzles per command
+<tr valign=top> <td><b><tt>upOutputWidth</tt></b>
+ <td>&nbsp;
+ <td>Int
+ <td>&nbsp;
+ <td>Output width in pixels
+<tr valign=top> <td><b><tt>upOutputXOffset</tt></b>
+ <td>&nbsp;
+ <td>Int
+ <td>&nbsp;
+ <td>Offset in pixels, if <b><tt>upFormatXabsolute</tt></b>
+<tr valign=top> <td><b><tt>upOutputXStep</tt></b>
+ <td>&nbsp;
+ <td>Int
+ <td>&nbsp;
+ <td>Divisor or multiplier for X coords
+<tr valign=top> <td><b><tt>upOutputYOffset</tt></b>
+ <td>&nbsp;
+ <td>Int
+ <td>&nbsp;
+ <td>Offset in pixels, if <b><tt>upFormatYabsolute</tt></b>
+<tr valign=top> <td><b><tt>upOutputYStep</tt></b>
+ <td>&nbsp;
+ <td>Int
+ <td>&nbsp;
+ <td>Divisor or multiplier for Y coords
+<tr valign=top> <td><b><tt>upRasterBufferInitialized</tt></b>
+ <td>&nbsp;
+ <td>Bool (RO)
+ <td>&nbsp;
+ <td>GS buffer OK
+<tr valign=top> <td><b><tt>upRedTransfer</tt></b>
+ <td>&nbsp;
+ <td>Float[&nbsp;]
+ <td>&nbsp;
+ <td>Red transfer
+<tr valign=top> <td><b><tt>upRendering</tt></b>
+ <td>&nbsp;
+ <td>Name
+ <td>&nbsp;
+ <td>Select rendering algorithm
+<tr valign=top> <td><b><tt>upRenderingInitialized</tt></b>
+ <td>&nbsp;
+ <td>Bool (RO)
+ <td>&nbsp;
+ <td>Rendering parameters OK
+<tr valign=top> <td><b><tt>upSelectComponentCommands</tt></b>
+ <td>&nbsp;
+ <td>String[&nbsp;]
+ <td>&nbsp;
+ <td>Establish color (output order!)
+<tr valign=top> <td><b><tt>upSetLineFeedCommand</tt></b>
+ <td>&nbsp;
+ <td>String
+ <td>&nbsp;
+ <td>Adjust linefeed (Epson only)
+<tr valign=top> <td><b><tt>upVersion</tt></b>
+ <td>&nbsp;
+ <td>String (RO)
+ <td>&nbsp;
+ <td>Source code version
+<tr valign=top> <td><b><tt>upWeaveFinalPins</tt></b>
+ <td>&nbsp;
+ <td>Int[&nbsp;]
+ <td>&nbsp;
+ <td>Number of bottom pins on EOP passes
+<tr valign=top> <td><b><tt>upWeaveFinalScan</tt></b>
+ <td>&nbsp;
+ <td>Int
+ <td>&nbsp;
+ <td>Begin EOP passes (Y-coord)
+<tr valign=top> <td><b><tt>upWeaveFinalXStarts</tt></b>
+ <td>&nbsp;
+ <td>Int[&nbsp;]
+ <td>&nbsp;
+ <td>X-pass indices for EOP passes
+<tr valign=top> <td><b><tt>upWeaveFinalYFeeds</tt></b>
+ <td>&nbsp;
+ <td>Int[&nbsp;]
+ <td>&nbsp;
+ <td>Y increments for EOP passes
+<tr valign=top> <td><b><tt>upWeaveInitialPins</tt></b>
+ <td>&nbsp;
+ <td>Int[&nbsp;]
+ <td>&nbsp;
+ <td>Number of top pins on BOP passes
+<tr valign=top> <td><b><tt>upWeaveInitialScan</tt></b>
+ <td>&nbsp;
+ <td>Int
+ <td>&nbsp;
+ <td>End BOP passes (Y coord)
+<tr valign=top> <td><b><tt>upWeaveInitialXStarts</tt></b>
+ <td>&nbsp;
+ <td>Int[&nbsp;]
+ <td>&nbsp;
+ <td>X-pass indices for BOP passes
+<tr valign=top> <td><b><tt>upWeaveInitialYFeeds</tt></b>
+ <td>&nbsp;
+ <td>int[&nbsp;]
+ <td>&nbsp;
+ <td>Y increments for BOP passes
+<tr valign=top> <td><b><tt>upWeavePasses</tt></b>
+ <td>&nbsp;
+ <td>Int
+ <td>&nbsp;
+ <td>XPasses &times; YPasses
+<tr valign=top> <td><b><tt>upWeaveXPasses</tt></b>
+ <td>&nbsp;
+ <td>Int
+ <td>&nbsp;
+ <td>Number of X passes
+<tr valign=top> <td><b><tt>upWeaveXStarts</tt></b>
+ <td>&nbsp;
+ <td>Int[&nbsp;]
+ <td>&nbsp;
+ <td>X-pass indices for normal passes
+<tr valign=top> <td><b><tt>upWeaveYFeeds</tt></b>
+ <td>&nbsp;
+ <td>Int[&nbsp;]
+ <td>&nbsp;
+ <td>Y increments for normal passes
+<tr valign=top> <td><b><tt>upWeaveYOffset</tt></b>
+ <td>&nbsp;
+ <td>Int
+ <td>&nbsp;
+ <td>Number of blank or incomplete scans at BOP
+<tr valign=top> <td><b><tt>upWeaveYPasses</tt></b>
+ <td>&nbsp;
+ <td>Int
+ <td>&nbsp;
+ <td>Number of X passes
+<tr valign=top> <td><b><tt>upWhiteTransfer</tt></b>
+ <td>&nbsp;
+ <td>Float[&nbsp;]
+ <td>&nbsp;
+ <td>White transfer (monochrome devices!)
+<tr valign=top> <td><b><tt>upWriteComponentCommands</tt></b>
+ <td>&nbsp;
+ <td>String[&nbsp;]
+ <td>&nbsp;
+ <td>Commands to write each component
+<tr valign=top> <td><b><tt>upWroteData</tt></b>
+ <td>&nbsp;
+ <td>Bool (RO)
+ <td>&nbsp;
+ <td>Something (<b><tt>BeginJob</tt></b>) written to output
+<tr valign=top> <td><b><tt>upXMoveCommand</tt></b>
+ <td>&nbsp;
+ <td>String
+ <td>&nbsp;
+ <td>X positioning command
+<tr valign=top> <td><b><tt>upXStepCommand</tt></b>
+ <td>&nbsp;
+ <td>String
+ <td>&nbsp;
+ <td>Single step to the right
+<tr valign=top> <td><b><tt>upYFlip</tt></b>
+ <td>&nbsp;
+ <td>Bool
+ <td>&nbsp;
+ <td>Flips output along the Y axis
+<tr valign=top> <td><b><tt>upYMoveCommand</tt></b>
+ <td>&nbsp;
+ <td>String
+ <td>&nbsp;
+ <td>Y positioning command
+<tr valign=top> <td><b><tt>upYStepCommand</tt></b>
+ <td>&nbsp;
+ <td>String
+ <td>&nbsp;
+ <td>Single step down
+<tr valign=top> <td><b><tt>upYellowTransfer</tt></b>
+ <td>&nbsp;
+ <td>Float[&nbsp;]
+ <td>&nbsp;
+ <td>Yellow transfer
+</table></blockquote>
+
+<h3><a name="Uni_honors"></a><b><tt>uniprint</tt></b>'s Roll of Honor</h3>
+
+<p>
+I should mention all of the people who were involved in
+<b><tt>stcolor</tt></b>'s evolution, but I've decided to start from scratch
+here for <b><tt>uniprint</tt></b>:
+
+<blockquote>
+<dl>
+<dt>John P. Beale
+<dd>for testing the <b><tt>stc600</tt></b> modes
+<dt>Bill Davidson
+<dd>who triggered some weaving research and tested <b><tt>stc2s_h</tt></b>
+<dt>L. Peter Deutsch
+<dd>who triggered ease of configuration
+<dt>Mark Goldberg
+<dd>who prepared the <b><tt>stc500</tt></b> transfers
+<dt>Scott F. Johnston and Scott J. Kramer
+<dd>for testing the <b><tt>stc800</tt></b> modes
+<dt>Martin Lottermoser
+<dd>for his great commented H-P DeskJet driver
+<dt>Helmut Riegler
+<dd>for the BJC extension
+<dt>Hans-Gerd Straeter
+<dd>for some measured transfer curves and more
+<dt>Uli Wortmann
+<dd>for discussions and his <b><tt>cdj850</tt></b> driver
+<dt>My family
+<dd>for tolerating my printer-driver hacking
+</dl>
+</blockquote>
+
+<address>
+Gunther Hess<br>
+Duesseldorfer Landstr. 16b<br>
+D-47249 Duisburg<br>
+Germany<br>
++49 203 376273 telephone (MET evening hours)<br>
+&lt;<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>&gt;
+</address>
+<h3><a name="Uni_weaving_howto"></a><tt>Uniprint</tt> weaving parameters howto</h3>
+This section was contributed by Glenn Ramsey.<p>
+<p>I wrote this because the documentation was very brief and I really struggled
+with it for a while, but it is very simple once you understand what is going
+on.
+<p>This only describes how to work out the Y parameters, I haven't looked
+at the X parameters yet.
+<ol>
+<li>
+<b>Determine the nozzle geometry (upOutputPins)</b>
+<p>
+You need to know how many nozzles the printer has and the spacing between
+them. Usually you can find this out from the printer manual, or the printer
+supplier, but you may have to dissect a couple of printer output files
+produced with the driver supplied with the printer. There is a utility
+called escp2ras<a href="#escp2ras"><sup>*</sup></a> that will help with that.
+Sometimes the term pin is used instead of nozzle but they mean the same thing.
+<p>The number of nozzles will be the value assigned to the upOutputPins
+parameter.
+<p>Actually you don't have to print with all the pins available but for
+the purpose of demonstration I'll assume that we are using them all.
+<p>
+<a name="escp2ras"></a>* escp2ras is available from Gunther Hess' page at <a href="http://www-md.e-technik.uni-rostock.de/ma/gunther/gs/index.html">http://www-md.e-technik.uni-rostock.de/ma/gunther/gs/index.html</a>
+</li>
+<p>
+<li><b>Determine how many passes are required (upWeaveYPasses)</b>
+<p>The number of passes required is going to depend on the required resolution
+and the nozzle spacing.
+<blockquote>
+<tt>passes = resolution * nozzle spacing
+</tt>
+</blockquote>
+This will be the value assigned to the upWeaveYPasses parameter.
+<p>For example if the desired resolution is 360 dpi and the nozzles are
+spaced at 1/90in then 360 * 1/90 = 4 passes are required. For 720 dpi 8
+passes would be required. The printer would, of course, have to be capable
+of moving the paper in increments of either 360 or 720 dpi too.
+</li>
+<p>
+<li>
+<b>Determine the normal Y feed increment (upWeaveYFeeds)</b>
+<p>
+You need to work out how much to feed the paper so that when the paper
+has moved by one head length in however many passes you have then each
+row space on the paper has been passed over by at least one nozzle. There
+will be one feed value for each pass and the feed values must comply with
+the following rules:
+<blockquote>
+<tt>
+<p>sum of feeds = passes * nozzles
+<br>feed%passes != 0 (feed is not exactly divisible by passes)
+<br>sum of (nozzles - feed) = 0
+</tt>
+</blockquote>
+<p>For example if passes=4 and nozzles=15, then sum of feeds=60. The feed
+values could be 1,1,1,57 or 15,15,15,15 or 14,15,18,13.
+<p>These values will be assigned to the upWeaveYFeeds parameter.
+<p>You would need to experiment to see what combination looks best on the
+printer.
+<p>I found it convenient to draw several lines of nozzles and then move
+them around to see how the different combinations would fill the paper.
+A computer drawing tool makes this easier than pencil and paper (I used
+Dia, a GNOME app). The number of nozzles would probably be be a good place
+to start.
+<p>Remember that if the number of passes is more than 1 then the feed increment
+will be less than the nozzle spacing and <tt>passes &times; feed increment size</tt>
+must equal the physical distance between each nozzle.
+</li>
+<p>
+<li>
+<b>Determine the beginning of page pins (upWeaveInitialPins)</b>
+<p>
+These values will be assigned to the upWeaveInitialPins parameter and are
+the numbers of nozzles to operate in each of the initial passes at the top
+of a page. The nozzles that the values refer to are the topmost nozzles
+on the head, nearest the top margin. If the image doesn't start at the
+top margin then uniprint doesn't use these feeds.
+<p>I don't know a mathematical relation for this except that at least one
+of the values must be the number of nozzles, but I'm sure that there must
+be one. I used a graphical method, the description that follows refers
+to the ascii diagram in below.
+<p>Draw a line of nozzles for each pass arranged as they would be using
+the normal Y feed increment determined in step 3. In the diagram below
+this would be passes 5-8.
+<p>Draw a line of nozzles that would print just before the first normal
+pass. The feed increment for this pass will be close to and most likely
+1 or 2 units less than the feed increment of the last normal pass. In the
+example below this line is pass 4 and the feed increment is 13 whereas
+the normal feed increment is 15.
+<p>Draw each pass before that with a small feed increment so that if all
+of the nozzles appearing above the first nozzle of the first normal pass
+operate then all of the spaces will be filled. This feed increment is usually
+1 except in cases where some jiggery pokery is going on to make the printer
+print at an apparent higher resolution than the nozzle diameter.
+<p>Now select the nozzles that will operate in each of theses initial passes
+so that the paper is filled. In each pass the nozzles must be adjacent
+to each other and at least one of the passes will have all the nozzles
+operating. I suspect that for each combination of normal Y feed increments
+there will only be one set of valid beginning of page increments.
+</li>
+</ol>
+<h4>Example: stc.upp from Aladdin Ghostscript 6.01</h4>
+15 nozzles spaced at 1/90 in, 360 dpi requires 4 passes.
+<blockquote><tt><pre>
+-dupWeaveYPasses=4
+-dupOutputPins=15
+-dupWeaveYFeeds="{15 15 15 15}"
+-dupWeaveInitialYFeeds="{1 1 1 13}"
+-dupWeaveInitialPins="{ 4 15 11 7}"
+</pre></tt></blockquote>
+The following diagram shows which nozzles operate during each pass.
+<br>Passes 1-4 are beginning of page passes and passes 5-8 are normal passes.
+<blockquote>
+<p>x=nozzle operates, o=nozzle not used in this pass<tt></tt>
+<p><tt>&nbsp; 1 2 3 4 5 6 7 8 - pass no</tt>
+<br><tt>0 x</tt>
+<br><tt>1&nbsp;&nbsp; x</tt>
+<br><tt>2&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>4 x</tt>
+<br><tt>5&nbsp;&nbsp; x</tt>
+<br><tt>6&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>8 x</tt>
+<br><tt>9&nbsp;&nbsp; x</tt>
+<br><tt>0&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>2 x</tt>
+<br><tt>3&nbsp;&nbsp; x</tt>
+<br><tt>4&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>6 o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>7&nbsp;&nbsp; x</tt>
+<br><tt>8&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>0 o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>1&nbsp;&nbsp; x</tt>
+<br><tt>2&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>4 o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>5&nbsp;&nbsp; x</tt>
+<br><tt>6&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>8 o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>9&nbsp;&nbsp; x</tt>
+<br><tt>0&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp;&nbsp; x</tt>
+<br><tt>2 o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>3&nbsp;&nbsp; x</tt>
+<br><tt>4&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp;&nbsp; x</tt>
+<br><tt>6 o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>7&nbsp;&nbsp; x</tt>
+<br><tt>8&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp;&nbsp; x</tt>
+<br><tt>0 o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>1&nbsp;&nbsp; x</tt>
+<br><tt>2&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp;&nbsp; x</tt>
+<br><tt>4 o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>5&nbsp;&nbsp; x</tt>
+<br><tt>6&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp;&nbsp; x</tt>
+<br><tt>8 o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>9&nbsp;&nbsp; x</tt>
+<br><tt>0&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp;&nbsp; x</tt>
+<br><tt>2 o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>3&nbsp;&nbsp; x</tt>
+<br><tt>4&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp;&nbsp; x</tt>
+<br><tt>6 o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>7&nbsp;&nbsp; x</tt>
+<br><tt>8&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp;&nbsp; x</tt>
+<br><tt>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>6</tt>
+<br><tt>7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>0</tt>
+<br><tt>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>4</tt>
+<br><tt>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x</tt>
+<br><tt>8</tt>
+<br><tt>9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>1</tt>
+<br><tt>2</tt>
+<br><tt>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>5</tt>
+<br><tt>6</tt>
+<br><tt>7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>9</tt>
+<br><tt>0</tt>
+<br><tt>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>3</tt>
+<br><tt>4</tt>
+<br><tt>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>6</tt>
+<br><tt>7</tt>
+<br><tt>8</tt>
+<br><tt>9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>0</tt>
+<br><tt>1</tt>
+<br><tt>2</tt>
+<br><tt>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+<br><tt>4</tt>
+<br><tt>5</tt>
+<br><tt>6</tt>
+<br><tt>7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+x</tt>
+</blockquote>
+<p>These parameters would also work:
+<blockquote><tt><pre>
+-dupWeaveYPasses=4
+-dupOutputPins=15
+-dupWeaveYFeeds="{14 15 18 13}"
+-dupWeaveInitialYFeeds="{1 1 1 13}"
+-dupWeaveInitialPins="{ 4 11 7 15}"
+</pre></tt></blockquote>
+<p>
+<hr>
+<h3><a name="Uni_esc300"></a>Extension to <tt>uniprint</tt> for the Epson Stylus Color 300</h3>
+This section was contributed by Glenn Ramsey.<p>
+The Epson Stylus Color 300 uses a different command set to other Epson
+Stylus Color printers that use the ESC/P2 language. As far as I can
+tell its commands are a subset of ESC/P2. In ESC/P2 the colour to be
+printed is selected by a 'set colour' command and then the data sent
+is only printed in that colour until the colour is changed with another
+'set colour' command. The Stylus Color 300 lacks this functionality.
+The data sent to the printer maps directly to the ink nozzles and colour
+of an output scan line in the printed output is determined by the position
+of the scan line within the data. This means that the driver must know
+how the nozzles are arranged and must format the output accordingly.
+The extension adds a format that I have called EscNozzleMap and adds some
+ additional parameters to uniprint.<br>
+<ul>
+ <li><b><tt>upOutputFormat</tt></b>selects the output method, and should be set to the value
+<b><tt>/EscNozzleMap</tt></b> to select this format.
+ <blockquote>
+ <table cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr valign="Top">
+ <td><b><tt>/EscNozzleMap</tt></b></td>
+ <td>&nbsp;</td>
+ <td>produces output for the Epson Stylus Color 300
+ </td>
+ </tr>
+ <tbody>
+ </table>
+ </blockquote>
+</ul>
+
+<blockquote>
+ <table cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <th colspan="5" bgcolor="#cccc00">
+ <hr><font size="+1"><b><tt>uniprint</tt></b> parameters for the
+ EscNozzleMap format</font>
+ <hr></th>
+ </tr>
+ <tr valign="Bottom">
+ <th align="Left">Parameter
+ </th>
+ <td>&nbsp;
+ </td>
+ <th align="Left">Type
+ </th>
+ <td>&nbsp;&nbsp;&nbsp;
+ </td>
+ <th align="Left">Use
+ </th>
+ </tr>
+ <tr>
+ <td colspan="5">
+ <hr></td>
+ </tr>
+ <tr valign="Top">
+ <td><b><tt>upNozzleMapRowsPerPass</tt></b></td>
+ <td>&nbsp;
+ </td>
+ <td>Int
+ </td>
+ <td>&nbsp;
+ </td>
+ <td>output rows to generate for each pass of the head
+ </td>
+ </tr>
+ <tr valign="Top">
+ <td><b><tt>upNozzleMapPatternRepeat</tt></b></td>
+ <td>&nbsp;
+ </td>
+ <td>Int
+ </td>
+ <td>&nbsp;
+ </td>
+ <td>no. of rows that correspond to the repeat pattern of the
+ nozzles
+ </td>
+ </tr>
+ <tr valign="Top">
+ <td><b><tt>upNozzleMapRowMask</tt></b></td>
+ <td>&nbsp;
+ </td>
+ <td>Int[]
+ </td>
+ <td>&nbsp;
+ </td>
+ <td>mask indicating the colour of the nozzles
+ </td>
+ </tr>
+ <tr valign="Top">
+ <td><b><tt>upNozzleMapMaskScanOffset</tt></b></td>
+ <td>&nbsp;
+ </td>
+ <td>Int[]
+ </td>
+ <td>&nbsp;
+ </td>
+ <td>mask indicating the physical position of the nozzles
+ </td>
+ </tr>
+ </tbody>
+ </table>
+</blockquote>
+
+<h4>A more detailed description of the new parameters</h4>
+<ul>
+ <li><b><tt>upNozzleMapRowsPerPass</tt></b><br>
+ The number of rows of data that are required to address all nozzles for a
+ single pass of the head. There will always be this number of rows of output
+ data generated. I'd expect it to be the same as the total number of nozzles but
+ it wouldn't break the formatter if it wasn't. So if you wanted to print with
+ only the 10th nozzle then row 10 would contain data corresponding to the bit
+ pattern and all of the others would be padded with zeros.
+ </li>
+ <li><b><tt>upNozzleMapPatternRepeat</tt></b><br>
+ The number of nozzles in each repeated group on the printing head.
+ This parameter must correspond with the length of the upNozzleMapRowMask array.
+ </li>
+ <li><b><tt>upNozzleMapRowMask</tt></b><br>
+ An array of integers that defines the colour of the nozzles on the
+ head and whether the nozzles will be used to print. The array index
+ defines the row index for the nozzle in the output data
+ and the value defines the colour of the nozzle. The mapping
+ of colours to values is defined in the table below.
+ <blockquote>
+ <table cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr valign="Bottom">
+ <th align="Left">colour
+ </th>
+ <td>&nbsp;
+ </td>
+ <th align="center">mask value
+ </th>
+ </tr>
+ <tr>
+ <td colspan="5">
+ <hr></td>
+ </tr>
+ <tr valign="Top" align="middle">
+ <td><b><tt>K</tt></b></td>
+ <td>&nbsp;
+ </td>
+ <td>1
+ </td>
+ </tr>
+ <tr valign="Top" align="middle">
+ <td><b><tt>C</tt></b></td>
+ <td>&nbsp;
+ </td>
+ <td>2
+ </tr>
+ <tr valign="Top" align="middle">
+ <td><b><tt>M</tt></b></td>
+ <td>&nbsp;
+ </td>
+ <td>3
+ </td>
+ </tr>
+ <tr valign="Top" align="middle">
+ <td><b><tt>Y</tt></b></td>
+ <td>&nbsp;
+ </td>
+ <td>4
+ </td>
+ </tr>
+ <tr valign="Top" align="middle">
+ <td><b><tt>no data</tt></b></td>
+ <td>&nbsp;
+ </td>
+ <td>0
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </blockquote>
+ A value of 0 means that the nozzle is not used and the row in the output data will be
+ padded with zeros.<br>
+ </li>
+ <li><b><tt>upNozzleMapMaskScanOffset</tt></b><br>
+ An array of integers that defines the physical position of the nozzles relative
+ to the first nozzle in the repeated group. The relative distance is measured in
+ printed line widths and will be different for different printing resolutions.
+ This parameter is used because the physical spacing of the nozzles may not
+ correspond to their mapping in the output data. For example the ESC300 has nozzles
+ physically arranged something like this:
+ <table>
+ <tr>
+ <td bgcolor="#00ffff">&nbsp;
+ </td>
+ <td bgcolor="#ffff00">&nbsp;
+ </td>
+ <td bgcolor="#000000">&nbsp;
+ </td>
+ <td bgcolor="#ff00ff">&nbsp;
+ </td>
+ <td bgcolor="#000000">&nbsp;
+ </td>
+ <td>&nbsp;
+ </td>
+ <td bgcolor="#000000">&nbsp;
+ </td>
+ <td>&nbsp;
+ </td>
+ <td>&nbsp;
+ </td>
+ <td>&nbsp;
+ </td>
+ <td>&nbsp;
+ </td>
+ <td>&nbsp;
+ </td>
+ <td bgcolor="#00ffff">&nbsp;
+ </td>
+ <td bgcolor="#ffff00">&nbsp;
+ </td>
+ <td bgcolor="#000000">&nbsp;
+ </td>
+ <td bgcolor="#ff00ff">&nbsp;
+ </td>
+ <td bgcolor="#000000">&nbsp;
+ </td>
+ <td>&nbsp;
+ </td>
+ <td bgcolor="#000000">&nbsp;
+ </td>
+ <td bgcolor="#ffffff">&nbsp;
+ </td>
+ </tr>
+ <td>&nbsp;
+ </td>
+ <td>&nbsp;
+ </td>
+ <td>&nbsp;
+ </td>
+ <td>&nbsp;
+ </td>
+ <td>&nbsp;
+ </td>
+ <td>&nbsp;
+ </td>
+ <td bgcolor="#00ffff">&nbsp;
+ </td>
+ <td bgcolor="#ffff00">&nbsp;
+ </td>
+ <td bgcolor="#000000">&nbsp;
+ </td>
+ <td bgcolor="#ff00ff">&nbsp;
+ </td>
+ <td bgcolor="#000000">&nbsp;
+ </td>
+ <td>&nbsp;
+ </td>
+ <td bgcolor="#000000">&nbsp;
+ </td>
+ <td>&nbsp;
+ </td>
+ <td>&nbsp;
+ </td>
+ <td>&nbsp;
+ </td>
+ <td>&nbsp;
+ </td>
+ <td>&nbsp;
+ </td>
+ <td bgcolor="#00ffff">&nbsp;
+ </td>
+ <td bgcolor="#ffff00">&nbsp;
+ </td>
+ <td>etc ...
+ </td>
+
+ <tr>
+ </tr>
+ </table>
+ There is a one nozzle width space between the last two nozzles in each group.
+ In the output data the data for the last nozzle in the group would be in row 5
+ (numbering starts at 0) but the nozzle is physically positioned at 6 spaces from
+ the first nozzle.
+</ul>
+<h4>Example 1 - Epson Stylus Color 300 - 360 dpi colour</h4>
+<blockquote><pre>
+-dupWeaveYPasses=6
+-dupOutputPins=11
+-dupWeaveYFeeds="{ 11 11 11 11 11 11 }"
+-dupWeaveInitialYFeeds="{ 1 1 1 1 1 7 }"
+-dupWeaveInitialPins="{ 2 11 9 7 5 3 }"
+-dupNozzleMapRowsPerPass=64
+-dupNozzleMapPatternRepeat=6
+-dupNozzleMapRowMask="{ 2 4 1 3 0 0 }"
+-dupNozzleMapMaskScanOffset="{ 0 1 2 3 0 0 }"
+</pre></blockquote>
+The weaving parameters are the same as for any other uniprint driver
+but they must be consistent with the nozzle map parameters. In this printer
+the coloured nozzles are spaced at 1/60" so 6 passes are required for 360
+dpi resolution.
+<p>
+In the example there are 64 rows of data required for each head pass. Each
+row must be completely filled with data for each pass so if certain nozzles
+do not print in the pass then the rows for those nozzles will be padded
+with zeroes.
+<P>
+The row mask translates to "C Y K M 0 0" so in the output data rows 0,7,13,...
+will contain data for cyan, rows 1,8,14,... will contain data for yellow, etc. Rows 4,10,16,...
+and 5, 11,15,... will always be padded with zeroes. The <i>upNozzleMapPatternRepeat</i>
+parameter defines the length of the mask.
+<p>
+The row mask is repeated for each group of <i>upNozzleMapPatternRepeat</i> rows
+in the output data. In this case there are 64 rows so there will be 10 groups
+of "C Y K M 0 0" followed by "C Y K M" which is equivalent to 11 output
+pins.
+<P>
+The <i>upNozzleMaskScanOffset</i> array indicates how the data from the scan
+buffer is mapped to the output data. The data is presented to the formatter
+as a buffer of four colour scanlines. The index of the scanline being printed,
+lets call it y, always corresponds, in this example, to the physical position of
+the cyan nozzle but since the nozzles are not on the same horizontal
+line then the other colours for the current pass must come from other
+scanlines in the scan buffer. The example is { 0 1 2 3 0 0 }, this means that
+when printing a 4 colour image the magenta data would come from scanline y+3,
+the black from scanline y+2, etc. It would have been possible in this case
+to use the array index instead of the <i>upNozzleMaskScanOffset</i> parameter
+however the parameter is necessary to be able to use the full capability of the
+printer in black only mode.
+
+<h4>Example 2 - Epson Stylus Color 300 - 180 dpi black only</h4>
+<blockquote>
+<pre>
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupWeaveYPasses=1
+-dupOutputPins=31
+-dupNozzleMapRowsPerPass=64
+-dupNozzleMapPatternRepeat=6
+-dupNozzleMapRowMask="{ 0 0 1 0 1 1}"
+-dupNozzleMapMaskScanOffset="{ 0 0 0 0 1 2 }"
+</pre>
+</blockquote>
+In this example there is no weaving.
+<p>
+The ESC300 has black nozzles evenly physically arranged as K K K but the data must
+be sent to the printer as 00K0KK. This is handled by the <i>upNozzleMapRowMask</i>
+and <i>upNozzleMaskScanOffset</i> arrays. The <i>upNozzleMapRowMask</i> array is
+{ 0 0 1 0 1 1} which translates to { 0 0 K 0 K K } so rows 0, 1 and 3 will always
+contain zeros and the other rows will contain data.
+<p>
+The <i>upNozzleMaskScanOffset</i> array
+in this case is { 0 0 0 0 1 2 } so if the data for the 1st nozzle comes from row
+y in the scan buffer then the data for the 2nd and 3rd nozzles will come from rows
+y+1 and y+2.
+
+<h4>Example 3 - Epson Stylus Color 300 - 360 dpi black only</h4>
+<blockquote>
+<pre>
+-dupWeaveYPasses=2
+-dupOutputPins=31
+-dupWeaveYFeeds="{31 31}"
+-dupWeaveInitialYFeeds="{1 31}"
+-dupWeaveInitialPins="{16 31}"
+-dupNozzleMapRowsPerPass=64
+-dupNozzleMapPatternRepeat=6
+-dupNozzleMapRowMask="{ 0 0 1 0 1 1}"
+-dupNozzleMapMaskScanOffset="{ 0 0 0 0 2 4 }"
+</pre>
+</blockquote>
+In this example 2 weave passes are required to achieve the desired resolution.
+<p>
+The <i>upNozzleMaskScanOffset</i> array in this case is { 0 0 0 0 2 4 } because
+there are two weave passes so if the data for the first nozzle comes from row y
+in the scan buffer then the data for the 2nd and 3rd nozzles must come from rows
+y+(1*2) and y+(2*2).
+<p>
+<address>
+Glenn Ramsey<br>
+glennr at users.sourceforge.net<br>
+February 2001
+</address>
+<br>
+<hr>
+
+<h2><a name="SPARCprinter"></a>Sun SPARCprinter</h2>
+
+<p>
+This section was contributed by Martin Schulte.
+
+<p>
+With a SPARCprinter you always buy software that enables you to do
+PostScript printing on it. A page image is composed on the host, which
+sends a bitmap to the SPARCprinter through a special SBUS video interface.
+So the need for a Ghostscript interface to the SPARCPrinter seems low, but
+on the other hand, Sun's software prints some PostScript drawings
+incorrectly: some pages contain a thin vertical line of rubbish, and on
+some Mathematica drawings the text at the axes isn't rotated. Ghostscript,
+however, gives the correct results. Moreover, replacing proprietary
+software should never be a bad idea.
+
+<p>
+The problem is that there has yet been no effort to make the SPARCPrinter
+driver behave like a BSD output filter. I made my tests using the script
+shown here.
+
+<h3><a name="SPARC_install"></a>Installation</h3>
+
+<p>
+Add <b><tt>sparc.dev</tt></b> to <b><tt>DEVICE_DEVS</tt></b> and compile
+Ghostscript as described in the documentation on <a href="Make.htm">how to
+build Ghostscript</a>. Afterwards you can use the following script as an
+example for printing after modifying it with the right pathnames --
+including for <b>{GSPATH}</b> the full pathname of the Ghostscript
+executable:
+
+<blockquote>
+<pre>outcmd1='/vol/local/lib/troff2/psxlate -r'
+outcmd2='<b><em>{GSPATH}</em></b> -sDEVICE=sparc -sOUTPUTFILE=/dev/lpvi0 -'
+
+if [ $# -eq 0 ]
+then
+ $outcmd1 | $outcmd2
+else
+ cat $* | $outcmd1 | $outcmd2
+fi
+</pre></blockquote>
+
+<h3><a name="SPARC_problems"></a>Problems</h3>
+
+<p>
+Since <b><tt>/dev/lpi</tt></b> can be opened only for exclusive use, if
+another job has it open (engine_ctl_sparc or another Ghostscript are the
+most likely candidates), Ghostscript stops with "Error: /invalidfileaccess
+in --.outputpage--"
+
+<p>
+In case of common printer problems like being out of paper, a warning
+describing the reason is printed to stdout. The driver tries access again
+each five seconds. Due to a problem with the device driver (in the kernel)
+the reason for printer failure isn't always reported correctly to the
+program. This is the case, for instance, if you open the top cover (error
+E5 on the printer's display). Look at the display on the printer itself if
+a "Printer problem with unknown reason" is reported. Fatal errors cause
+the print job to be terminated.
+
+<hr>
+
+<h2><a name="Apple"></a>Apple dot matrix printer</h2>
+
+<p>
+This section was contributed by Mark Wedel
+&lt;<a href="mailto:master@cats.ucsc.edu">master@cats.ucsc.edu</a>&gt;.
+
+<p>
+The Apple Dot Matrix Printer (DMP) was a parallel predecessor to the
+Imagewriter printer. As far as I know, Imagewriter commands are a superset
+of the Dot Matrix printer's, so the driver should generate output that can
+be printed on Imagewriters.
+
+<p>
+To print images, the driver sets the printer for unidirectional printing
+and 15 characters per inch (cpi), or 120dpi. It sets the line feed to 1/9
+inch. When finished, it sets the printer to bidirectional printing,
+1/8-inch line feeds, and 12 cpi. There appears to be no way to reset the
+printer to initial values.
+
+<p>
+This code does not set for 8-bit characters (which is required). It also
+assumes that carriage return-newline is needed, and not just carriage
+return. These are all switch settings on the DMP, and I have configured
+them for 8-bit data and carriage return exclusively. Ensure that the Unix
+printer daemon handles 8-bit (binary) data properly; in my SunOS 4.1.1
+<b><tt>printcap</tt></b> file the string "<b><tt>ms=pass8,-opost</tt></b>"
+works fine for this.
+
+<p>
+Finally, you can search <b><tt>devdemp.c</tt></b> for
+"<b><tt>Init</tt></b>" and "<b><tt>Reset</tt></b>" to find the strings that
+initialize the printer and reset things when finished, and change them to
+meet your needs.
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996-2002 artofcode LLC.
+All rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
+
diff --git a/Master/xemtex/doc/ghostscript/Drivers.htm b/Master/xemtex/doc/ghostscript/Drivers.htm
new file mode 100644
index 00000000000..c97bfaeb642
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Drivers.htm
@@ -0,0 +1,2538 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>The interface between Ghostscript and device drivers</title>
+<!-- $Id: Drivers.htm,v 1.21.2.11.2.5 2003/05/17 14:38:59 giles Exp $ -->
+<!-- Originally: drivers.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>The interface between Ghostscript and device drivers</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Adding_drivers">Adding a driver</a>
+<li><a href="#KISS">Keeping things simple</a>
+<li><a href="#Structure">Driver structure</a>
+<ul>
+<li><a href="#Structure_definition">Structure definition</a>
+<li><a href="#Sophisticated">For sophisticated developers only</a>
+</ul>
+<li><a href="#coordinates_and_types">Coordinates and types</a>
+<ul>
+<li><a href="#Coordinate_system">Coordinate system</a>
+<li><a href="#Color_definition">Color definition</a>
+<li><a href="#Types">Types</a>
+</ul>
+<li><a href="#Coding_conventions">Coding conventions</a>
+<ul>
+<li><a href="#Allocating_storage">Allocating storage</a>
+<li><a href="#Driver_instance_allocation">Driver instance allocation</a>
+</ul>
+<li><a href="#Printer_drivers">Printer drivers</a>
+<li><a href="#Driver_procedures">Driver procedures</a>
+<ul>
+<li><a href="#Life_cycle">Life cycle</a>
+<li><a href="#Open_close">Open, close, sync, copy</a>
+<li><a href="#Color_mapping">Color and alpha mapping</a>
+<li><a href="#Pixel_level_drawing">Pixel-level drawing</a>
+<ul>
+<li><a href="#Bitmap_imaging">Bitmap imaging</a>
+<li><a href="#Pixmap_imaging">Pixmap imaging</a>
+<li><a href="#Compositing">Compositing</a>
+ [<a href="#S_spec">S</a>, <a href="#T_spec">T</a>, <a href="#F_spec">f</a>,
+ <a href="#Compositing_notes">Notes</a>]
+</ul>
+<li><a href="#Polygon_level_drawing">Polygon-level drawing</a>
+<li><a href="#High_level_drawing">High-level drawing</a>
+<ul>
+<li><a href="#Paths">Paths</a>
+<li><a href="#Images">Images</a> [<a href="#Images_notes">Notes</a>]
+<li><a href="#Text">Text</a> [<a href="#Text_notes">Notes</a>]
+</ul>
+<li><a href="#Reading_bits_back">Reading bits back</a>
+<li><a href="#Parameters">Parameters</a>
+<ul>
+<li><a href="#Default_CRD_parameters">Default color rendering dictionary (CRD) parameters</a>
+</ul>
+<li><a href="#External_fonts">External fonts</a>
+<li><a href="#Page_devices">Page devices</a>
+<li><a href="#Miscellaneous">Miscellaneous</a>
+</ul>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a> and the documentation on <a href="Make.htm">how to build
+Ghostscript</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="Adding_drivers"></a>Adding a driver</h2>
+
+<p>
+To add a driver to Ghostscript, first pick a name for your device, say
+"<b><tt>smurf</tt></b>". (Device names must be 1 to 8 characters, begin
+with a letter, and consist only of letters, digits, and underscores. Case
+is significant: all current device names are lower case.) Then all you
+need do is edit <b><tt>contrib.mak</tt></b> in two places.
+
+<ol>
+<li>The list of devices, in the section headed "Catalog". Add
+<b><tt>smurf</tt></b> to the list.
+
+<li>The section headed "Device drivers".
+
+<p>
+Suppose the files containing the smurf driver are called
+"<b><tt>joe</tt></b>" and "<b><tt>fred</tt></b>". Then you should add the
+following lines:
+
+<blockquote>
+<pre># ------ The SMURF device ------ #
+
+smurf_=$(GLOBJ)joe.$(OBJ) $(GLOBJ)fred.$(OBJ)
+$(DD)smurf.dev: $(smurf_)
+ $(SETDEV) $(DD)smurf $(smurf_)
+
+$(GLOBJ)joe.$(OBJ) : $(GLSRC)joe.c
+ $(GLCC) $(GLO_)joe.$(OBJ) $(C_) $(GLSRC)joe.c
+
+$(GLOBJ)fred.$(OBJ) : $(GLSRC)fred.c
+ $(GLCC) $(GLO_)fred.$(OBJ) $(C_) $(GLSRC)fred.c</pre>
+</blockquote>
+
+<p>
+and whatever <b><tt>joe.c</tt></b> and <b><tt>fred.c</tt></b> depend on.
+If the smurf driver also needs special libraries, for instance a library
+named "<b><tt>gorf</tt></b>", then the entry should look like this:
+
+<blockquote>
+<pre>$(DD)smurf.dev : $(smurf_)
+ $(SETDEV) $(DD)smurf $(smurf_)
+ $(ADDMOD) $(DD)smurf -lib gorf</pre>
+</blockquote>
+
+<p>
+If, as will usually be the case, your driver is a printer driver (as
+<a href="#Printer_drivers">discussed below</a>), the device entry should
+look like this:
+
+<blockquote>
+<pre>$(DD)smurf.dev : $(smurf_) $(GLD)page.dev
+ $(SETPDEV) $(DD)smurf $(smurf_)</pre>
+</blockquote>
+
+<p>
+or
+
+<blockquote>
+<pre>$(DD)smurf.dev : $(smurf_) $(GLD)page.dev
+ $(SETPDEV) $(DD)smurf $(smurf_)
+ $(ADDMOD) $(DD)smurf -lib gorf</pre>
+</blockquote>
+
+<p>
+Note that the space before the :, and the explicit compilation rules for the
+.c files, are required for portability,
+</ol>
+
+<hr>
+
+<h2><a name="KISS"></a>Keeping things simple</h2>
+
+<p>
+If you want to add a simple device (specifically, a monochrome printer), you
+probably don't need to read the rest of this document; just use the code in
+an existing driver as a guide. The Epson and Canon BubbleJet drivers <a
+href="../src/gdevepsn.c">gdevepsn.c</a> and <a
+href="../src/gdevbj10.c">gdevbj10.c</a> are good models for dot-matrix
+printers, which require presenting the data for many scan lines at once; the
+DeskJet/LaserJet drivers in <a href="../src/gdevdjet.c">gdevdjet.c</a> are
+good models for laser printers, which take a single scan line at a time but
+support data compression. For color printers, there are unfortunately no
+good models: the two major color inkjet printer drivers, <a
+href="../src/gdevcdj.c">gdevcdj.c</a> and <a
+href="../src/gdevstc.c">gdevstc.c</a>, are far too complex to read.
+
+<p>
+On the other hand, if you're writing a driver for some more esoteric
+device, you probably do need at least some of the information in the rest
+of this document. It might be a good idea for you to read it in
+conjunction with one of the existing drivers.
+
+<p>
+Duplication of code, and sheer volume of code, is a serious maintenance and
+distribution problem for Ghostscript. If your device is similar to an
+existing one, try to implement your driver by adding some parameterization
+to an existing driver rather than by copying code to create an entirely new
+source module. <a href="../src/gdevepsn.c">gdevepsn.c</a> and <a
+href="../src/gdevdjet.c">gdevdjet.c</a> are good examples of this approach.
+
+<hr>
+
+<h2><a name="Structure"></a>Driver structure</h2>
+
+<p>
+A device is represented by a structure divided into three parts:
+
+<ul>
+<li>procedures that are (normally) shared by all instances of each device;
+
+<li>parameters that are present in all devices but may be different for
+each device or instance; and
+
+<li>device-specific parameters that may be different for each instance.
+</ul>
+
+<p>
+Normally the procedure structure is defined and initialized at compile
+time. A prototype of the parameter structure (including both generic and
+device-specific parameters) is defined and initialized at compile time, but
+is copied and filled in when an instance of the device is created. Both of
+these structures should be declared as <b><tt>const</tt></b>, but for backward
+compatibility reasons the latter is not.
+
+<p>
+The <b><tt>gx_device_common</tt></b> macro defines the common structure
+elements, with the intent that devices define and export a structure along
+the following lines. Do not fill in the individual generic parameter values
+in the usual way for C structures: use the macros defined for this purpose
+in <a href="../src/gxdevice.h">gxdevice.h</a> or, if applicable, <a
+href="../src/gdevprn.h">gdevprn.h</a>.
+
+<blockquote>
+<pre>typedef struct smurf_device_s {
+ gx_device_common;
+ <b><em>... device-specific parameters ...</em></b>
+} smurf_device;
+smurf_device gs_smurf_device = {
+ <b><em>... macro for generic parameter values ...,</em></b>
+ { <b><em>... procedures ...</em></b> }, /* std_procs */
+ <b><em>... device-specific parameter values if any ...</em></b>
+};</pre>
+</blockquote>
+
+<p>
+The device structure instance <b>must</b> have the name
+<b><tt>gs_smurf_device</tt></b>, where <b><tt>smurf</tt></b> is the device
+name used in <b><tt>contrib.mak</tt></b>. <b><tt>gx_device_common</tt></b>
+is a macro consisting only of the element definitions.
+
+<p>
+All the device procedures are called with the device as the first argument.
+Since each device type is actually a different structure type, the device
+procedures must be declared as taking a <b><tt>gx_device&nbsp;*</tt></b> as
+their first argument, and must cast it to
+<b><tt>smurf_device&nbsp;*</tt></b> internally. For example, in the code
+for the "memory" device, the first argument to all routines is called
+<b><tt>dev</tt></b>, but the routines actually use <b><tt>mdev</tt></b> to
+refer to elements of the full structure, using the following standard
+initialization statement at the beginning of each procedure:
+
+<blockquote>
+<pre>gx_memory_device *const mdev = (gx_device_memory *)dev;</pre>
+</blockquote>
+
+<p>
+(This is a cheap version of "object-oriented" programming: in C++, for
+example, the cast would be unnecessary, and in fact the procedure table
+would be constructed by the compiler.)
+
+<h3><a name="Structure_definition"></a>Structure definition</h3>
+
+<p>
+You should consult the definition of struct <b><tt>gx_device_s</tt></b> in
+<a href="../src/gxdevice.h">gxdevice.h</a> for the complete details of the
+generic device structure. Some of the most important members of this
+structure for ordinary drivers are:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <td><b><tt>const char *dname;</tt></b>
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <td>The device name
+<tr valign=top> <td><b><tt>bool is_open;</tt></b>
+ <td>&nbsp;
+ <td>True if device has been opened
+<tr valign=top> <td><b><tt>gx_device_color_info color_info;</tt></b>
+ <td>&nbsp;
+ <td>Color information
+<tr valign=top> <td><b><tt>int width;</tt></b>
+ <td>&nbsp;
+ <td>Width in pixels
+<tr valign=top> <td><b><tt>int height;</tt></b>
+ <td>&nbsp;
+ <td>Height in pixels
+</table></blockquote>
+
+<p>
+The name in the structure (<b><tt>dname</tt></b>) should be the same as the
+name in <a href="../src/contrib.mak">contrib.mak</a>.
+
+<h3><a name="Sophisticated"></a>For sophisticated developers only</h3>
+
+<p>
+If for any reason you need to change the definition of the basic device
+structure, or to add procedures, you must change the following places:
+
+<blockquote><ul>
+<li>This document and the <a href="News.htm">news document</a> (if you want
+ to keep the documentation up to date).
+<li>The definition of <b><tt>gx_device_common</tt></b> and the procedures
+ in <a href="../src/gxdevcli.h">gxdevcli.h</a>.
+<li>Possibly, the default forwarding procedures declared in
+ <a href="../src/gxdevice.h">gxdevice.h</a> and implemented in
+ <a href="../src/gdevnfwd.c">gdevnfwd.c</a>.
+<li>The device procedure record completion routines in
+ <a href="../src/gdevdflt.c">gdevdflt.c</a>.
+<li>Possibly, the default device implementation in
+ <a href="../src/gdevdflt.c">gdevdflt.c</a>,
+ <a href="../src/gdevddrw.c">gdevddrw.c</a>, and
+ <a href="../src/gxcmap.c">gxcmap.c</a>.
+<li>The bounding box device in <a href="../src/gdevbbox.c">gdevbbox.c</a>
+ (probably just adding <b><tt>NULL</tt></b> procedure entries if the
+ new procedures don't produce output).
+<li>These devices that must have complete (non-defaulted) procedure vectors:
+<ul>
+<li>The null device in <a href="../src/gdevnfwd.c">gdevnfwd.c</a>.
+<li>The command list "device" in <a href="../src/gxclist.c">gxclist.c</a>.
+ This is not an actual device; it only defines procedures.
+<li>The "memory" devices in <a href="../src/gdevmem.h">gdevmem.h</a> and
+ <b><tt>gdevm*.c</tt></b>.
+<li>The halftoning device in <a href="../src/gdevht.c">gdevht.c</a>.
+</ul>
+<li>The clip list accumulation "device" in
+ <a href="../src/gxacpath.c">gxacpath.c</a>.
+<li>The clipping "devices" <a href="../src/gxclip.c">gxclip.c</a>,
+ <a href="../src/gxclip2.c">gxclip2.c</a>,
+ and <a href="../src/gxclipm.c">gxclipm.c</a>.
+<li>The pattern accumulation "device" in
+ <a href="../src/gxpcmap.c">gxpcmap.c</a>.
+<li>The hit detection "device" in <a href="../src/gdevhit.c">gdevhit.c</a>.
+<li>The generic printer device macros in
+ <a href="../src/gdevprn.h">gdevprn.h</a>.
+<li>The generic printer device code in
+ <a href="../src/gdevprn.c">gdevprn.c</a>.
+<li>The RasterOp source device in
+ <a href="../src/gdevrops.c">gdevrops.c</a>.
+</ul></blockquote>
+
+<p>
+You may also have to change the code for
+<b><tt>gx_default_get_params</tt></b> or
+<b><tt>gx_default_put_params</tt></b> in <a
+href="../src/gsdparam.c">gsdparam.c</a>.
+
+<p>
+You should not have to change any of the real devices in the standard
+Ghostscript distribution (listed in <a href="../src/devs.mak">devs.mak</a>
+and <a href="../src/contrib.mak">contrib.mak</a>) or any of your own
+devices, because all of them are supposed to use the macros in <a
+href="../src/gxdevice.h">gxdevice.h</a> or <a
+href="../src/gdevprn.h">gdevprn.h</a> to define and initialize their state.
+
+<hr>
+
+<h2><a name="coordinates_and_types"></a>Coordinates and types</h2>
+
+<h3><a name="Coordinate_system"></a>Coordinate system</h3>
+
+<p>
+Since each driver specifies the initial transformation from user
+coordinates to device coordinates, the driver can use any coordinate system
+it wants, as long as a device coordinate will fit in an
+<b><tt>int</tt></b>. (This is only an issue on DOS systems, where ints are
+only 16 bits. User coordinates are represented as floats.) Most current
+drivers use a coordinate system with (0,0) in the upper left corner, with
+<b><em>X</em></b> increasing to the right and <b><em>Y</em></b> increasing
+toward the bottom. However, there is supposed to be nothing in the rest of
+Ghostscript that assumes this, and indeed some drivers use a coordinate
+system with (0,0) in the lower left corner.
+
+<p>
+Drivers must check (and, if necessary, clip) the coordinate parameters given
+to them: they should not assume the coordinates will be in bounds. The
+<b><tt>fit_fill</tt></b> and <b><tt>fit_copy</tt></b> macros in <a
+href="../src/gxdevice.h">gxdevice.h</a> are very helpful in doing this.
+
+<h3><a name="Color_definition"></a>Color definition</h3>
+
+<p>
+Ghostscript represents colors internally as RGB or CMYK values. In
+communicating with devices, however, it assumes that each device has a
+palette of colors identified by integers (to be precise, elements of type
+<b><tt>gx_color_index</tt></b>). Drivers may provide a uniformly spaced
+gray ramp or color cube for halftoning, or they may do their own color
+approximation, or both.
+
+<p>
+The <b><tt>color_info</tt></b> member of the device structure defines the
+color and gray-scale capabilities of the device. Its type is defined as
+follows:
+
+<blockquote>
+<pre>typedef struct gx_device_color_info_s {
+ int num_components; /* 1 = gray only, 3 = RGB, */
+ /* 4 = CMYK */
+ int depth; /* # of bits per pixel */
+ gx_color_value max_gray; /* # of distinct gray levels -1 */
+ gx_color_value max_rgb; /* # of distinct color levels -1 */
+ /* (only relevant if num_comp. &gt; 1) */
+ gx_color_value dither_gray; /* size of gray ramp for halftoning */
+ gx_color_value dither_rgb; /* size of color cube ditto */
+ /* (only relevant if num_comp. &gt; 1) */
+} gx_device_color_info;</pre>
+</blockquote>
+
+<p>
+The following macros (in <a href="../src/gxdevice.h">gxdevice.h</a>) provide
+convenient shorthands for initializing this structure for ordinary
+black-and-white or color devices:
+
+<blockquote>
+<b><tt>#define dci_black_and_white</tt></b> ...<br>
+<b><tt>#define dci_color(depth,maxv,dither)</tt></b> ...
+</blockquote>
+
+<p>
+The idea is that a device has a certain number of gray levels
+(<b><tt>max_gray</tt></b>+1) and a certain number of colors
+(<b><tt>max_rgb</tt></b>+1) that it can produce directly. When Ghostscript
+wants to render a given RGB or CMYK color as a device color, it first tests
+whether the color is a gray level (if <b><tt>num_components</tt></b> is 1,
+it converts all colors to gray levels), and if so:
+
+<blockquote>
+If <b><tt>max_gray</tt></b> is large (&gt;= 31), Ghostscript asks the
+device to approximate the gray level directly. If the device returns a
+valid <b><tt>gx_color_index</tt></b>, Ghostscript uses it. Otherwise,
+Ghostscript assumes that the device can represent
+<b><tt>dither_gray</tt></b> distinct gray levels, equally spaced along the
+diagonal of the color cube, and uses the two nearest ones to the desired
+color for halftoning.
+</blockquote>
+
+<p>
+If the color is not a gray level:
+
+<blockquote>
+If <b><tt>max_rgb</tt></b> is large (&gt;= 31), Ghostscript asks the device
+to approximate the color directly. If the device returns a valid
+<b><tt>gx_color_index</tt></b>, Ghostscript uses it. Otherwise,
+Ghostscript assumes that the device can represent
+
+<blockquote>
+<b><tt>dither_rgb</tt></b> &times; <b><tt>dither_rgb</tt></b> &times; <b><tt>dither_rgb</tt></b>
+</blockquote>
+
+<p>
+distinct colors, equally spaced throughout the color cube, and uses two of
+the nearest ones to the desired color for halftoning.
+</blockquote>
+
+<h3><a name="Types"></a>Types</h3>
+
+<p>
+Here is a brief explanation of the various types that appear as parameters
+or results of the drivers.
+
+<dl>
+<dt><b><tt>gx_color_value</tt></b> (defined in <b><tt>gxdevice.h</tt></b>)
+<dd>This is the type used to represent RGB or CMYK color values. It is
+currently equivalent to unsigned short. However, Ghostscript may use less
+than the full range of the type to represent color values:
+<b><tt>gx_color_value_bits</tt></b> is the number of bits actually used,
+and <b><tt>gx_max_color_value</tt></b> is the maximum value, equal to
+(2^<small><sup><b><tt>gx_max_color_value_bits</tt></b></sup></small>)-1.
+</dl>
+
+<dl>
+<dt><b><tt>gx_device</tt></b> (defined in <b><tt>gxdevice.h</tt></b>)
+<dd>This is the device structure, as explained above.
+</dl>
+
+<dl>
+<dt><b><tt>gs_matrix</tt></b> (defined in <b><tt>gsmatrix.h</tt></b>)
+<dd>This is a 2-D homogeneous coordinate transformation matrix, used by
+many Ghostscript operators.
+</dl>
+
+<dl>
+<dt><b><tt>gx_color_index</tt></b> (defined in <b><tt>gxdevice.h</tt></b>)
+<dd>This is meant to be whatever the driver uses to represent a device
+color. For example, it might be an index in a color map, or it might be R,
+G, and B values packed into a single integer. Ghostscript doesn't ever do
+any computations with <b><tt>gx_color_index</tt></b> values: it gets them
+from <b><tt>map_rgb_color</tt></b> or <b><tt>map_cmyk_color</tt></b> and
+hands them back as arguments to several other procedures. The special
+value <b><tt>gx_no_color_index</tt></b> (defined as
+<b><tt>(gx_color_index)(-1)</tt></b>&nbsp;) means "transparent" for some of
+the procedures. The type definition is simply:
+
+<blockquote><b><tt>
+typedef unsigned long gx_color_index;
+</tt></b></blockquote>
+</dl>
+
+<dl>
+<dt><b><tt>gs_param_list</tt></b> (defined in <a
+href="../src/gsparam.h">gsparam.h</a>)
+<dd>This is a parameter list, which is used to read and set attributes in a
+device. See the comments in <a href="../src/gsparam.h">gsparam.h</a>, and
+the <a href="#Parameters">description of the <b><tt>get_params</tt></b> and
+<b><tt>put_params</tt></b> procedures</a> below, for more detail.
+</dl>
+
+<dl>
+<dt><b><tt>gx_tile_bitmap</tt></b> (defined in
+<a href="../src/gxbitmap.h">gxbitmap.h</a>)
+<br><b><tt>gx_strip_bitmap</tt></b> (defined in
+<a href="../src/gxbitmap.h">gxbitmap.h</a>)
+<dd>These structure types represent bitmaps to be used as a tile for
+filling a region (rectangle). <b><tt>gx_tile_bitmap</tt></b> is an older
+type lacking <b><tt>shift</tt></b> and <b><tt>rep_shift</tt></b>;
+<b><tt>gx_strip_bitmap</tt></b> has superseded it, and it should not be
+used in new code. Here is a copy of the relevant part of the file:
+
+<blockquote>
+<pre>/*
+ * Structure for describing stored bitmaps.
+ * Bitmaps are stored bit-big-endian (i.e., the 2^7 bit of the first
+ * byte corresponds to x=0), as a sequence of bytes (i.e., you can't
+ * do word-oriented operations on them if you're on a little-endian
+ * platform like the Intel 80x86 or VAX). Each scan line must start on
+ * a (32-bit) word boundary, and hence is padded to a word boundary,
+ * although this should rarely be of concern, since the raster and width
+ * are specified individually. The first scan line corresponds to y=0
+ * in whatever coordinate system is relevant.
+ *
+ * For bitmaps used as halftone tiles, we may replicate the tile in
+ * X and/or Y, but it is still valuable to know the true tile dimensions
+ * (i.e., the dimensions prior to replication). Requirements:
+ * width % rep_width = 0
+ * height % rep_height = 0
+ *
+ * For halftones at arbitrary angles, we provide for storing the halftone
+ * data as a strip that must be shifted in X for different values of Y.
+ * For an ordinary (non-shifted) halftone that has a repetition width of
+ * W and a repetition height of H, the pixel at coordinate (X,Y)
+ * corresponds to halftone pixel (X mod W, Y mod H), ignoring phase;
+ * for a shifted halftone with shift S, the pixel at (X,Y) corresponds
+ * to halftone pixel ((X + S * floor(Y/H)) mod W, Y mod H). Requirements:
+ * strip_shift &lt; rep_width
+ * strip_height % rep_height = 0
+ * shift = (strip_shift * (size.y / strip_height)) % rep_width
+ */
+typedef struct gx_strip_bitmap_s {
+ byte *data;
+ int raster; /* bytes per scan line */
+ gs_int_point size; /* width, height */
+ gx_bitmap_id id;
+ ushort rep_width, rep_height; /* true size of tile */
+ ushort strip_height;
+ ushort strip_shift;
+ ushort shift;
+} gx_strip_bitmap;</pre>
+</blockquote>
+</dl>
+
+<hr>
+
+<h2><a name="Coding_conventions"></a>Coding conventions</h2>
+
+<p>
+All the driver procedures defined below that return <b><tt>int</tt></b>
+results return 0 on success, or an appropriate negative error code in the
+case of error conditions. The error codes are defined in <a
+href="../src/gserrors.h">gserrors.h</a>; they correspond directly to the
+errors defined in the PostScript language reference manuals. The most
+common ones for drivers are:
+
+<blockquote><dl>
+<dt><b><tt>gs_error_invalidfileaccess</tt></b>
+<dd>An attempt to open a file failed.
+
+<dt><b><tt>gs_error_ioerror</tt></b>
+<dd>An error occurred in reading or writing a file.
+
+<dt><b><tt>gs_error_limitcheck</tt></b>
+<dd>An otherwise valid parameter value was too large for the
+implementation.
+
+<dt><b><tt>gs_error_rangecheck</tt></b>
+<dd>A parameter was outside the valid range.
+
+<dt><b><tt>gs_error_VMerror</tt></b>
+<dd>An attempt to allocate memory failed. (If this happens, the procedure
+should release all memory it allocated before it returns.)
+</dl></blockquote>
+
+<p>
+If a driver does return an error, rather than a simple return statement it
+should use the <b><tt>return_error</tt></b> macro defined in <a
+href="../src/gx.h">gx.h</a>, which is automatically included by <a
+href="../src/gdevprn.h">gdevprn.h</a> but not by <a
+href="../src/gserrors.h">gserrors.h</a>. For example
+
+<blockquote><b><tt>
+return_error(gs_error_VMerror);
+</tt></b></blockquote>
+
+<h3><a name="Allocating_storage"></a>Allocating storage</h3>
+
+<p>
+While most drivers (especially printer drivers) follow a very similar
+template, there is one important coding convention that is not obvious from
+reading the code for existing drivers: driver procedures must not use
+<b><tt>malloc</tt></b> to allocate any storage that stays around after the
+procedure returns. Instead, they must use <b><tt>gs_malloc</tt></b> and
+<b><tt>gs_free</tt></b>, which have slightly different calling conventions.
+(The prototypes for these are in <a href="../src/gsmemory.h">gsmemory.h</a>,
+which is included in <a href="../src/gx.h">gx.h</a>, which is included in <a
+href="../src/gdevprn.h">gdevprn.h</a>.) This is necessary so that
+Ghostscript can clean up all allocated memory before exiting, which is
+essential in environments that provide only single-address-space
+multi-tasking (some versions of Microsoft Windows).
+
+<blockquote>
+<pre>char *gs_malloc(uint num_elements, uint element_size,
+ const char *client_name);</pre>
+</blockquote>
+
+<p>
+Like <b><tt>calloc</tt></b>, but unlike <b><tt>malloc</tt></b>,
+<b><tt>gs_malloc</tt></b> takes an element count and an element size. For
+structures, <b><tt>num_elements</tt></b> is 1 and
+<b><tt>element_size</tt></b> is <b><tt>sizeof</tt></b> the structure; for
+byte arrays, <b><tt>num_elements</tt></b> is the number of bytes and
+<b><tt>element_size</tt></b> is 1. Unlike <b><tt>calloc</tt></b>,
+<b><tt>gs_malloc</tt></b> does <b>not</b> clear the block of storage.
+
+<p>
+The <b><tt>client_name</tt></b> is used for tracing and debugging. It must
+be a real string, not <b><tt>NULL</tt></b>. Normally it is the name of the
+procedure in which the call occurs.
+
+<blockquote>
+<pre>void gs_free(char *data, uint num_elements, uint element_size,
+ const char *client_name);</pre>
+</blockquote>
+
+<p>
+Unlike <b><tt>free</tt></b>, <b><tt>gs_free</tt></b> demands that
+<b><tt>num_elements</tt></b> and element_size be supplied. It also
+requires a client name, like <b><tt>gs_malloc</tt></b>.
+
+<h3><a name="Driver_instance_allocation"></a>Driver instance allocation</h3>
+
+<p>
+All driver instances allocated by Ghostscript's standard allocator must
+point to a "structure descriptor" that tells the garbage collector how to
+trace pointers in the structure. For drivers registered in the normal way
+(using the makefile approach described above), no special care is needed as
+long as instances are created only by calling the
+<b><tt>gs_copydevice</tt></b> procedure defined in <a
+href="../src/gsdevice.h">gsdevice.h</a>. If you have a need to define
+devices that are not registered in this way, you must fill in the stype
+member in any dynamically allocated instances with a pointer to the same
+structure descriptor used to allocate the instance. For more information
+about structure descriptors, see <a href="../src/gsmemory.h">gsmemory.h</a>
+and <a href="../src/gsstruct.h">gsstruct.h</a>.
+
+<hr>
+
+<h2><a name="Printer_drivers"></a>Printer drivers</h2>
+
+<p>
+Printer drivers (which include drivers that write some kind of raster file)
+are especially simple to implement. Of the driver procedures defined in the
+next section, they only need implement two: <b><tt>map_rgb_color</tt></b>
+(or <b><tt>map_cmyk_color</tt></b>) and <b><tt>map_color_rgb</tt></b>. In
+addition, they must implement a <b><tt>print_page</tt></b> or
+<b><tt>print_page_copies</tt></b> procedure. There are macros in <a
+href="../src/gdevprn.h">gdevprn.h</a> that generate the device structure for
+such devices, of which the simplest is <b><tt>prn_device</tt></b>; for an
+example, see <a href="../src/gdevbj10.c">gdevbj10.c</a>. If you are writing
+a printer driver, we suggest you start by reading <a
+href="../src/gdevprn.h">gdevprn.h</a> and the <a
+href="#Color_mapping">subsection on "Color mapping"</a> below; you may be
+able to ignore all the rest of the driver procedures.
+
+<p>
+The <b><tt>print_page</tt></b> procedures are defined as follows:
+
+<blockquote>
+<pre>int (*print_page)(P2(gx_device_printer *, FILE *))
+int (*print_page_copies)(P3(gx_device_printer *, FILE *, int))</pre>
+</blockquote>
+
+<p>
+This procedure must read out the rendered image from the device and write
+whatever is appropriate to the file. To read back one or more scan lines
+of the image, the <b><tt>print_page</tt></b> procedure must call one of the
+following procedures:
+
+<blockquote>
+<pre>int gdev_prn_copy_scan_lines(P4(gx_device_printer *pdev, int y, byte *str,
+ uint size)</pre>
+</blockquote>
+
+<p>
+For this procedure, <b><tt>str</tt></b> is where the data should be copied to, and <b><tt>size</tt></b> is
+the size of the buffer starting at <b><tt>str</tt></b>. This procedure returns the number
+of scan lines copied, or &lt;0 for an error. <b><tt>str</tt></b> need not be aligned.
+
+<blockquote>
+<pre>int gdev_prn_get_bits(gx_device_printer *pdev, int y, byte *str,
+ byte **actual_data)</pre>
+</blockquote>
+
+<p>
+This procedure reads out exactly one scan line. If the scan line is
+available in the correct format already, <b><tt>*actual_data</tt></b> is
+set to point to it; otherwise, the scan line is copied to the buffer
+starting at <b><tt>str</tt></b>, and <b><tt>*actual_data</tt></b> is set to
+<b><tt>str</tt></b>. This saves a copying step most of the time.
+<b><tt>str</tt></b> need not be aligned; however, if
+<b><tt>*actual_data</tt></b> is set to point to an existing scan line, it
+will be aligned. (See the description of the <b><tt>get_bits</tt></b>
+procedure below for more details.)
+
+<p>
+In either case, each row of the image is stored in the form described in
+the comment under <b><tt>gx_tile_bitmap</tt></b> above; each pixel takes
+the number of bits specified as <b><tt>color_info.depth</tt></b> in the
+device structure, and holds values returned by the device's
+<b><tt>map_</tt></b>{<b><tt>rgb</tt></b>,<b><tt>cmyk</tt></b>}<b><tt>_color</tt></b>
+procedure.
+
+<p>
+The <b><tt>print_page</tt></b> procedure can determine the number of bytes
+required to hold a scan line by calling:
+
+<blockquote>
+<pre>uint gdev_prn_raster(P1(gx_device_printer *))</pre>
+</blockquote>
+
+<p>
+For a very simple concrete example, we suggest reading the code in
+<b><tt>bit_print_page</tt></b> in <a href="../src/gdevbit.c">gdevbit.c</a>.
+
+<p>
+If the device provides <b><tt>print_page</tt></b>, Ghostscript will call
+<b><tt>print_page</tt></b> the requisite number of times to print the
+desired number of copies; if the device provides
+<b><tt>print_page_copies</tt></b>, Ghostscript will call
+<b><tt>print_page_copies</tt></b> once per page, passing it the desired
+number of copies.
+
+<hr>
+
+<h2><a name="Driver_procedures"></a>Driver procedures</h2>
+
+<p>
+Most of the procedures that a driver may implement are optional. If a
+device doesn't supply an optional procedure <b><tt>WXYZ</tt></b>, the entry
+in the procedure structure may be either <b><tt>gx_default_WXYZ</tt></b>,
+for instance <b><tt>gx_default_tile_rectangle</tt></b>, or
+<b><tt>NULL</tt></b> or 0. (The device procedure must also call the
+<b><tt>gx_default_</tt></b> procedure if it doesn't implement the function
+for particular values of the arguments.) Since C compilers supply 0 as the
+value for omitted structure elements, this convention means that statically
+initialized procedure structures continue to work even if new (optional)
+members are added.
+
+<h3><a name="Life_cycle"></a>Life cycle</h3>
+
+<p>
+A device instance begins life in a closed state. In this state, no output
+operations will occur. Only the following procedures may be called:
+
+<blockquote><b><tt>
+open_device<br>
+finish_copydevice<br>
+get_initial_matrix<br>
+get_params<br>
+put_params<br>
+get_hardware_params
+</tt></b></blockquote>
+
+<p>
+When <b><tt>setdevice</tt></b> installs a device instance in the graphics
+state, it checks whether the instance is closed or open. If the instance
+is closed, <b><tt>setdevice</tt></b> calls the open routine, and then sets
+the state to open. There is currently no user-accessible operation to
+close a device instance. Device instances are only closed when they are
+about to be freed, which occurs in three situations:
+
+<ul>
+<li>When a <b><tt>restore</tt></b> occurs, if the instance was created since
+the corresponding <b><tt>save</tt></b> and is in a VM being restored. I.e.,
+if the instance was created in local VM since a <b><tt>save</tt></b>, it
+will always be closed and freed by the corresponding
+<b><tt>restore</tt></b>; if it was created in global VM, it will only be
+closed by the outermost <b><tt>restore</tt></b>, regardless of the save
+level at the time the instance was created.
+
+<li>By the garbage collector, if the instance is no longer accessible.
+
+<li>When Ghostscript exits (terminates).
+</ul>
+
+<h3><a name="Open_close"></a>Open, close, sync, copy</h3>
+
+<dl>
+<dt><b><tt>int (*open_device)(P1(gx_device *))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Open the device: do any initialization associated with making the device
+instance valid. This must be done before any output to the device. The
+default implementation does nothing. <b>NOTE</b>: Clients should never call
+a device's <b><tt>open_device</tt></b> procedure directly: they should
+always call <b><tt>gs_opendevice</tt></b> instead.
+</dl>
+
+<dl>
+<dt><b><tt>int (*finish_copydevice)(P2(gx_device *dev, const gx_device
+*from_dev))</tt></b> <b><em>[OPTIONAL]</em></b> <dd>Perform any cleanup
+required after <b><tt>copydevice</tt></b> has created a new device instance
+by copying <b><tt>from_dev</tt></b>. If the copy operation should not be
+allowed, this procedure should return an error; the copy will be freed. The
+default implementation allows copying the device prototype, but does not
+allow copying device instances, because instances may contain internal
+pointers that should not be shared between copies, and there is no way to
+determine this from outside the device. <b>NOTE</b>: Clients should never
+call a device's <b><tt>finish_copydevice</tt></b> procedure: this procedure
+is only intended for use by <b><tt>gs_copydevice[2]</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>void (*get_initial_matrix)(P2(gx_device *, gs_matrix *))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Construct the initial transformation matrix mapping user coordinates
+(nominally 1/72 inch per unit) to device coordinates. The default
+procedure computes this from width, height, and
+[<b><tt>xy</tt></b>]<b><tt>_pixels_per_inch</tt></b> on the assumption that
+the origin is in the upper left corner, that is
+<blockquote>
+<b><tt>xx</tt></b> = <b><tt>x_pixels_per_inch</tt></b>/72, <b><tt>xy</tt></b> = 0,<br>
+<b><tt>yx = 0, yy = -y_pixels_per_inch</tt></b>/72,<br>
+<b><tt>tx = 0, ty = height</tt></b>.
+</blockquote>
+</dl>
+
+<dl>
+<dt><b><tt>int (*sync_output)(P1(gx_device *))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Synchronize the device. If any output to the device has been
+buffered, send or write it now. Note that this may be called several times
+in the process of constructing a page, so printer drivers should <b>not</b>
+implement this by printing the page. The default implementation does
+nothing.
+</dl>
+
+<dl>
+<dt><b><tt>int (*output_page)(P3(gx_device *, int num_copies, int flush))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Output a fully composed page to the device. The
+<b><tt>num_copies</tt></b> argument is the number of copies that should be
+produced for a hardcopy device. (This may be ignored if the driver has
+some other way to specify the number of copies.) The <b><tt>flush</tt></b>
+argument is true for <b><tt>showpage</tt></b>, false for
+<b><tt>copypage</tt></b>. The default definition just calls
+<b><tt>sync_output</tt></b>. Printer drivers should implement this by
+printing and ejecting the page.
+</dl>
+
+<dl>
+<dt><b><tt>int (*close_device)(P1(gx_device *))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Close the device: release any associated resources. After this, output
+to the device is no longer allowed. The default implementation does
+nothing. <b>NOTE</b>: Clients should never call a device's
+<b><tt>close_device</tt></b> procedure directly: they should always call
+<b><tt>gs_closedevice</tt></b> instead.
+</dl>
+
+<h3><a name="Color_mapping"></a>Color and alpha mapping</h3>
+
+<p>
+A given driver normally implements either <b><tt>map_rgb_color</tt></b> or
+<b><tt>map_cmyk_color</tt></b>, but not both. Black-and-white drivers need
+implement neither. Note that the <b><tt>map_xxx_color</tt></b> procedures
+must not return <b><tt>gx_no_color_index</tt></b> (all 1s).
+
+<p>
+Note that code in the Ghostscript library may cache the results of calling
+one or more of the color mapping procedures. If the result returned by any
+of these procedures would change (other than as a result of a change made by
+the driver's <b><tt>put_params</tt></b> procedure), the driver must call
+<b><tt>gx_device_decache_colors(dev)</tt></b>.
+
+<dl>
+<dt><b><tt>gx_color_index (*map_rgb_color)(P4(gx_device&nbsp;*,
+gx_color_value&nbsp;red, gx_color_value&nbsp;green,
+gx_color_value&nbsp;blue))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Map a RGB color to a device color. The range of legal values of the
+RGB arguments is 0 to <b><tt>gx_max_color_value</tt></b>. The default
+algorithm uses the <b><tt>map_cmyk_color</tt></b> procedure if the driver
+supplies one, otherwise returns 1 if any of the values exceeds
+<b><tt>gx_max_color_value</tt></b>&nbsp;/&nbsp;2, 0 otherwise.
+
+<p>
+Ghostscript assumes that for devices that have color capability (that is,
+<b><tt>color_info.num_components</tt></b> &gt; 1),
+<b><tt>map_rgb_color</tt></b> returns a color index for a gray level (as
+opposed to a non-gray color) iff red = green = blue.
+</dl>
+
+<dl>
+<dt><b><tt>gx_color_index (*map_cmyk_color)(P5(gx_device&nbsp;*,
+gx_color_value&nbsp;cyan, gx_color_value&nbsp;magenta,
+gx_color_value&nbsp;yellow, gx_color_value&nbsp;black))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Map a CMYK color to a device color. The range of legal values of the
+CMYK arguments is 0 to <b><tt>gx_max_color_value</tt></b>. The default
+algorithm calls the <b><tt>map_rgb_color</tt></b> procedure, with suitably
+transformed arguments.
+
+<p>
+Ghostscript assumes that for devices that have color capability (that is,
+<b><tt>color_info.num_components</tt></b> &gt; 1),
+<b><tt>map_cmyk_color</tt></b> returns a color index for a gray level (as
+opposed to a non-gray color) iff cyan = magenta = yellow.
+</dl>
+
+<dl>
+<dt><b><tt>int (*map_color_rgb)(P3(gx_device&nbsp;*,
+gx_color_index&nbsp;color, gx_color_value&nbsp;rgb[3]))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Map a device color code to RGB values. The default algorithm returns
+(0 if <b><tt>color</tt></b>==0 else <b><tt>gx_max_color_value</tt></b>) for
+all three components.
+</dl>
+
+<dl>
+<dt><b><tt>gx_color_index (*map_rgb_alpha_color)(P5(gx_device&nbsp;*,
+gx_color_value&nbsp;red, gx_color_value&nbsp;green,
+gx_color_value&nbsp;blue, gx_color_value&nbsp;alpha))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Map a RGB color and an opacity value to a device color. The range of
+legal values of the RGB and alpha arguments is 0 to
+<b><tt>gx_max_color_value</tt></b>; <b><tt>alpha</tt></b> = 0 means
+transparent, <b><tt>alpha</tt></b> = <b><tt>gx_max_color_value</tt></b>
+means fully opaque. The default is to use the
+<b><tt>map_rgb_color</tt></b> procedure and ignore alpha.
+
+<p>
+Note that if a driver implements <b><tt>map_rgb_alpha_color</tt></b>, it
+must also implement <b><tt>map_rgb_color</tt></b>, and must implement them
+in such a way that
+<b><tt>map_rgb_alpha_color(dev,&nbsp;r,&nbsp;g,&nbsp;b,&nbsp;gx_max_color_value)</tt></b>
+returns the same value as
+<b><tt>map_rgb_color(dev,&nbsp;r,&nbsp;g,&nbsp;b)</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>int (*map_color_rgb_alpha)(P3(gx_device&nbsp;*,
+gx_color_index&nbsp;color, gx_color_value&nbsp;rgba[4]))</tt></b>
+<b><em>[OPTIONAL]</em></b>
+<dd>Map a device color code to RGB and alpha values. The default
+implementation calls <b><tt>map_color_rgb</tt></b> and fills in
+<b><tt>gx_max_color_value</tt></b> for alpha.
+
+<p>
+Note that if a driver implements <b><tt>map_color_rgb_alpha</tt></b>, it
+must also implement <b><tt>map_color_rgb</tt></b>, and must implement them
+in such a way that the first 3 values returned by
+<b><tt>map_color_rgb_alpha</tt></b> are the same as the values returned by
+<b><tt>map_color_rgb</tt></b>.
+
+<p>
+Note that CMYK devices currently do not support variable opacity; alpha is
+ignored on such devices.
+</dl>
+
+<dl>
+<dt><b><tt>typedef&nbsp;enum&nbsp;{&nbsp;go_text,
+go_graphics&nbsp;}&nbsp;graphic_object_type;&nbsp;int
+(*get_alpha_bits)(P4(gx_device&nbsp;*dev,
+graphic_object_type&nbsp;type))</tt></b> <b><em>[OPTIONAL] [OBSOLETE]</em></b>
+<dd>This procedure is no longer used: it is replaced by the
+color_info.anti_alias member of the driver structure. However, it still
+appears in the driver procedure vector for backward compatibility. It
+should never be called, and drivers should not implement it.
+</dl>
+
+<h3><a name="Pixel_level_drawing"></a>Pixel-level drawing</h3>
+
+<p>
+This group of drawing operations specifies data at the pixel level. All
+drawing operations use device coordinates and device color values.
+
+<dl>
+<dt><b><tt>int (*fill_rectangle)(P6(gx_device&nbsp;*, int&nbsp;x,
+int&nbsp;y, int&nbsp;width, int&nbsp;height,
+gx_color_index&nbsp;color))</tt></b>
+<dd>Fill a rectangle with a color. The set of pixels filled is {(px,py) |
+x &lt;= px &lt; x + width and y &lt;= py &lt; y + height}. In other words,
+the point <em>(x,y)</em> is included in the rectangle, as are
+<em>(x+w-1,y)</em>, <em>(x,y+h-1)</em>, and <em>(x+w-1,y+h-1)</em>, but
+<b><em>not</em></b> <em>(x+w,y)</em>, <em>(x,y+h)</em>, or
+<em>(x+w,y+h)</em>. If <b><tt>width</tt></b>&nbsp;&lt;=&nbsp;0 or
+height&nbsp;&lt;=&nbsp;0, <b><tt>fill_rectangle</tt></b> should return 0
+without drawing anything.
+
+<p>
+Note that <b><tt>fill_rectangle</tt></b> is the only non-optional procedure
+in the driver interface.
+</dl>
+
+<h4><a name="Bitmap_imaging"></a>Bitmap imaging</h4>
+
+<p>
+Bitmap (or pixmap) images are stored in memory in a nearly standard way.
+The first byte corresponds to <em>(0,0)</em> in the image coordinate
+system: bits (or polybit color values) are packed into it left to right.
+There may be padding at the end of each scan line: the distance from one
+scan line to the next is always passed as an explicit argument.
+
+<dl>
+<dt><b><tt>int (*copy_mono)(P11(gx_device&nbsp;*,
+const&nbsp;unsigned&nbsp;char&nbsp;*data, int&nbsp;data_x, int&nbsp;raster,
+gx_bitmap_id&nbsp;id, int&nbsp;x, int&nbsp;y, int&nbsp;width,
+int&nbsp;height, gx_color_index&nbsp;color0,
+gx_color_index&nbsp;color1))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Copy a monochrome image (similar to the PostScript image operator).
+Each scan line is raster bytes wide. Copying begins at
+(<b><tt>data_x</tt></b>,0) and transfers a rectangle of the given width and
+height to the device at device coordinate <em>(x,y)</em>. (If the transfer
+should start at some non-zero y value in the data, the caller can adjust
+the data address by the appropriate multiple of the raster.) The copying
+operation writes device color <b><tt>color0</tt></b> at each 0-bit, and
+<b><tt>color1</tt></b> at each 1-bit: if <b><tt>color0</tt></b> or
+<b><tt>color1</tt></b> is <b><tt>gx_no_color_index</tt></b>, the device
+pixel is unaffected if the image bit is 0 or 1 respectively. If
+<b><tt>id</tt></b> is different from <b><tt>gx_no_bitmap_id</tt></b>, it
+identifies the bitmap contents unambiguously; a call with the same
+<b><tt>id</tt></b> will always have the same <b><tt>data</tt></b>,
+<b><tt>raster</tt></b>, and data contents.
+
+<p>
+This operation, with
+<b><tt>color0</tt></b>&nbsp;=&nbsp;<b><tt>gx_no_color_index</tt></b>, is
+the workhorse for text display in Ghostscript, so implementing it
+efficiently is very important.
+</dl>
+
+<dl>
+<dt><b><tt>int (*tile_rectangle)(P10(gx_device&nbsp;*,
+const&nbsp;gx_tile_bitmap&nbsp;*tile, int&nbsp;x, int&nbsp;y,
+int&nbsp;width, int&nbsp;height, gx_color_index&nbsp;color0,
+gx_color_index&nbsp;color1, int&nbsp;phase_x, int&nbsp;phase_y))</tt></b>
+<b><em>[OPTIONAL] [OBSOLETE]</em></b>
+<dd>This procedure is still supported, but has been superseded by
+<b><tt>strip_tile_rectangle</tt></b>. New drivers should implement
+<b><tt>strip_tile_rectangle</tt></b>; if they cannot cope with non-zero
+shift values, they should test for this explicitly and call the default
+implementation (<b><tt>gx_default_strip_tile_rectangle</tt></b>) if
+shift&nbsp;!=&nbsp;0. Clients should call
+<b><tt>strip_tile_rectangle</tt></b>, not <b><tt>tile_rectangle</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>int (*strip_tile_rectangle)(P10(gx_device&nbsp;*,
+const&nbsp;gx_strip_bitmap&nbsp;*tile, int&nbsp;x, int&nbsp;y,
+int&nbsp;width, int&nbsp;height, gx_color_index&nbsp;color0,
+gx_color_index&nbsp;color1, int&nbsp;phase_x, int&nbsp;phase_y))</tt></b>
+<b><em>[OPTIONAL]</em></b>
+<dd>Tile a rectangle. Tiling consists of doing multiple
+<b><tt>copy_mono</tt></b> operations to fill the rectangle with copies of
+the tile. The tiles are aligned with the device coordinate system, to
+avoid "seams". Specifically, the (<b><tt>phase_x</tt></b>,
+<b><tt>phase_y</tt></b>) point of the tile is aligned with the origin of
+the device coordinate system. (Note that this is backwards from the
+PostScript definition of halftone phase.) <b><tt>phase_x</tt></b> and
+<b><tt>phase_y</tt></b> are guaranteed to be in the range
+<em>[0..</em><b><tt>tile-&gt;width</tt></b><em>)</em> and
+<em>[0..</em><b><tt>tile-&gt;height</tt></b><em>)</em> respectively.
+
+<p>
+If <b><tt>color0</tt></b> and <b><tt>color1</tt></b> are both
+<b><tt>gx_no_color_index</tt></b>, then the tile is a color pixmap, not a
+bitmap: see the next section.
+
+<p>
+This operation is the workhorse for halftone filling in Ghostscript, so
+implementing it efficiently for solid tiles (that is, where either
+<b><tt>color0</tt></b> and <b><tt>color1</tt></b> are both
+<b><tt>gx_no_color_index</tt></b>, for colored halftones, or neither one is
+<b><tt>gx_no_color_index</tt></b>, for monochrome halftones) is very
+important.
+</dl>
+
+<h4><a name="Pixmap_imaging"></a>Pixmap imaging</h4>
+
+<p>
+Pixmaps are just like bitmaps, except that each pixel occupies more than
+one bit. All the bits for each pixel are grouped together (this is
+sometimes called "chunky" or "Z" format). For <b><tt>copy_color</tt></b>,
+the number of bits per pixel is given by the
+<b><tt>color_info.depth</tt></b> parameter in the device structure: the
+legal values are 1, 2, 4, 8, 16, 24, or 32. The pixel values are device
+color codes (that is, whatever it is that <b><tt>map_rgb_color</tt></b>
+returns).
+
+<dl>
+<dt><b><tt>int (*copy_color)(P9(gx_device&nbsp;*,
+const&nbsp;unsigned&nbsp;char&nbsp;*data, int&nbsp;data_x, int&nbsp;raster,
+gx_bitmap_id&nbsp;id, int&nbsp;x, int&nbsp;y, int&nbsp;width,
+int&nbsp;height))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Copy a color image with multiple bits per pixel. The raster is in
+bytes, but <b><tt>x</tt></b> and <b><tt>width</tt></b> are in pixels, not
+bits. If <b><tt>id</tt></b> is different from
+<b><tt>gx_no_bitmap_id</tt></b>, it identifies the bitmap contents
+unambiguously; a call with the same <b><tt>id</tt></b> will always have the
+same <b><tt>data</tt></b>, <b><tt>raster</tt></b>, and data contents.
+
+<p>
+We do not provide a separate procedure for tiling with a pixmap; instead,
+<b><tt>tile_rectangle</tt></b> can also take colored tiles. This is
+indicated by the <b><tt>color0</tt></b> and <b><tt>color1</tt></b>
+arguments' both being <b><tt>gx_no_color_index</tt></b>. In this case, as
+for <b><tt>copy_color</tt></b>, the <b><tt>raster</tt></b> and
+<b><tt>height</tt></b> in the "bitmap" are interpreted as for real bitmaps,
+but the <b><tt>x</tt></b> and <b><tt>width</tt></b> are in pixels, not
+bits.
+</dl>
+
+<h4><a name="Compositing"></a>Compositing</h4>
+
+<p>
+In addition to direct writing of opaque pixels, devices must also support
+compositing. Currently two kinds of compositing are defined
+(<b><tt>RasterOp</tt></b> and alpha-based), but more may be added in the
+future.
+
+<blockquote>
+<b><em>THIS AREA OF THE INTERFACE IS SOMEWHAT UNSTABLE: USE AT YOUR OWN
+RISK.</em></b>
+</blockquote>
+
+<dl>
+<dt><b><tt>int (*copy_alpha)(P11(gx_device&nbsp;*dev,
+const&nbsp;unsigned&nbsp;char&nbsp;*data, int&nbsp;data_x, int&nbsp;raster,
+gx_bitmap_id&nbsp;id, int&nbsp;x, int&nbsp;y, int&nbsp;width,
+int&nbsp;height, gx_color_index&nbsp;color, int&nbsp;depth))</tt></b>
+<b><em>[OPTIONAL]</em></b>
+<dd>This procedure is somewhat misnamed: it was added to the interface
+before we really understood alpha channel and compositing.
+
+<p>
+Fill a given region with a given color modified by an individual alpha
+value for each pixel. For each pixel, this is equivalent to
+alpha-compositing with a source pixel whose alpha value is obtained from
+the pixmap (<b><tt>data</tt></b>, <b><tt>data_x</tt></b>, and
+<b><tt>raster</tt></b>) and whose color is the given color (which has
+<b><em>not</em></b> been premultiplied by the alpha value), using the Sover
+rule. <b><tt>depth</tt></b>, the number of bits per alpha value, is either
+2 or 4, and in any case is always a value returned by a previous call on
+the <b><tt>get_alpha_bits</tt></b> procedure. Note that if
+<b><tt>get_alpha_bits</tt></b> always returns 1, this procedure will never
+be called.
+</dl>
+
+<dl>
+<dt><b><tt>int (*create_compositor)(P5(dev_t&nbsp;*dev,
+gx_device_t&nbsp;**pcdev, const&nbsp;gs_composite_t&nbsp;*pcte,
+const&nbsp;gs_imager_state&nbsp;*pis, gs_memory_t&nbsp;*memory))</tt></b>
+<b><em>[OPTIONAL]</em></b>
+<dd>Create a new device (called a "compositing device" or "compositor")
+that will composite data written to it with the device's existing data,
+according to the compositing function defined by <b><tt>*pcte</tt></b>.
+Devices will normally implement this in one of the following standard ways:
+
+<ul>
+<li>Devices that don't do any imaging and don't forward any imaging
+operations (for example, the null device, the hit detection device, and the
+clipping list accumulation device) simply return themselves, which
+effectively ignores the compositing function.
+
+<li>"Leaf" devices that do imaging and have no special optimizations for
+compositing (for example, some memory devices) ask the
+<b><tt>gs_composite_t</tt></b> to create a default compositor.
+
+<li>Leaf devices that can implement some kinds of compositing operation
+efficiently (for example, monobit memory devices and RasterOp) inspect the
+type and values of <b><tt>*pcte</tt></b> to determine whether it specifies
+such an operation: if so, they create a specialized compositor, and if not,
+they ask the <b><tt>gs_composite_t</tt></b> to create a default compositor.
+</ul>
+
+<p>
+Other kinds of forwarding devices, which don't fall into any of these
+categories, require special treatment. In principle, what they do is ask
+their target to create a compositor, and then create and return a copy of
+themselves with the target's new compositor as the target of the copy.
+There is a possible default implementation of this approach: if the
+original device was <b>D</b> with target <b>T</b>, and <b>T</b> creates a
+compositor <b>C</b>, then the default implementation creates a device
+<b>F</b> that for each operation temporarily changes <b>D</b>'s target to
+<b>C</b>, forwards the operation to <b>D</b>, and then changes <b>D</b>'s
+target back to <b>T</b>. However, the Ghostscript library currently only
+creates a compositor with an imaging forwarding device as target in a few
+specialized situations (banding, and bounding box computation), and these
+are handled as special cases.
+
+<p>
+Note that the compositor may have a different color space, color
+representation, or bit depth from the device to which it is compositing.
+For example, alpha-compositing devices use standard-format chunky color
+even if the underlying device doesn't.
+
+<p>
+Closing a compositor frees all of its storage, including the compositor
+itself. However, since the <b><tt>create_compositor</tt></b> call may
+return the same device, clients must check for this case, and only call the
+close procedure if a separate device was created.
+</dl>
+
+<p>
+<font size="+1">
+<b><em>[strip_]copy_rop WILL BE SUPERSEDED BY COMPOSITORS</em></b>
+</font>
+
+<dl>
+<dt><b><tt>int (*copy_rop)(P15(gx_device&nbsp;*dev,
+const&nbsp;byte&nbsp;*sdata, int&nbsp;sourcex, uint&nbsp;sraster,
+gx_bitmap_id&nbsp;id, const&nbsp;gx_color_index&nbsp;*scolors,
+const&nbsp;gx_tile_bitmap&nbsp;*texture,
+const&nbsp;gx_color_index&nbsp;*tcolors, int&nbsp;x, int&nbsp;y,
+int&nbsp;width, int&nbsp;height, int&nbsp;phase_x, int&nbsp;phase_y,
+int&nbsp;command))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>This procedure is still supported, but has been superseded by
+<b><tt>strip_copy_rop</tt></b>. New drivers should implement
+<b><tt>strip_copy_rop</tt></b>; if they cannot cope with non-zero shift
+values in the texture, they should test for this explicitly and call the
+default implementation (<b><tt>gx_default_strip_copy_rop</tt></b>) if
+shift&nbsp;!=&nbsp;0. Clients should call <b><tt>strip_copy_rop</tt></b>,
+not <b><tt>copy_rop</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>int (*strip_copy_rop)(P15(gx_device&nbsp;*dev,
+const&nbsp;byte&nbsp;*sdata, int&nbsp;sourcex, uint&nbsp;sraster,
+gx_bitmap_id&nbsp;id, const&nbsp;gx_color_index&nbsp;*scolors,
+const&nbsp;gx_strip_bitmap&nbsp;*texture,
+const&nbsp;gx_color_index&nbsp;*tcolors, int&nbsp;x, int&nbsp;y,
+int&nbsp;width, int&nbsp;height, int&nbsp;phase_x, int&nbsp;phase_y,
+int&nbsp;command))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Combine an optional source image <b>S</b> (as for
+<b><tt>copy_mono</tt></b> or <b><tt>copy_color</tt></b>) and an optional
+texture <b>T</b> (a tile, as for <b><tt>tile_rectangle</tt></b>) with the
+existing bitmap or pixmap <b>D</b> held by the driver, pixel by pixel,
+using any 3-input Boolean operation as modified by "transparency" flags:
+schematically, set <b>D&nbsp;=&nbsp;f(D,S,T)</b>, computing <b>f</b> in RGB
+space rather than using actual device pixel values. <b>S</b> and <b>T</b>
+may each (independently) be a solid color, a bitmap with "foreground" and
+"background" colors, or a pixmap. This is a complex (and currently rather
+slow) operation. The arguments are as follows:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <td><b><tt>dev</tt></b>
+ <td>&nbsp;
+ <td>the device, as for all driver procedures
+<tr valign=top> <td><b><tt>sdata</tt></b>, <b><tt>sourcex</tt></b>, <b><tt>sraster</tt></b>, <b><tt>id</tt></b>, <b><tt>scolors</tt></b>
+ <td>&nbsp;
+ <td>specify <b>S</b>, <a href="#S_spec">see below</a>
+<tr valign=top> <td><b><tt>texture</tt></b>, <b><tt>tcolors</tt></b>
+ <td>&nbsp;
+ <td>specify <b>T</b>, <a href="#T_spec">see below</a>
+<tr valign=top> <td><b><tt>x</tt></b>, <b><tt>y</tt></b>, <b><tt>width</tt></b>, <b><tt>height</tt></b>
+ <td>&nbsp;
+ <td>as for the other copy and fill procedures
+<tr valign=top> <td><b><tt>phase_x</tt></b>, <b><tt>phase_y</tt></b>
+ <td>&nbsp;
+ <td>part of <b>T</b> specification, <a href="#T_spec">see below</a>
+<tr valign=top> <td><b><tt>command</tt></b>
+ <td>&nbsp;
+ <td><a href="#F_spec">see below</a>
+</table></blockquote>
+</dl>
+
+<h5><a name="S_spec"></a>The source specification S</h5>
+
+<p>
+As noted above, the source <b>S</b> may be a solid color, a bitmap, or a
+pixmap. If <b>S</b> is a solid color:
+
+<ul>
+<li><b><tt>sdata</tt></b>, <b><tt>sourcex</tt></b>,
+<b><tt>sraster</tt></b>, and <b><tt>id</tt></b> are irrelevant.
+
+<li><b><tt>scolors</tt></b> points to two <b><tt>gx_color_index</tt></b>
+values; <b><tt>scolors[0]</tt></b> = <b><tt>scolors[1]</tt></b> = the
+color.
+</ul>
+
+<p>
+If <b>S</b> is a bitmap:
+
+<ul>
+<li><b><tt>sdata</tt></b>, <b><tt>sourcex</tt></b>,
+<b><tt>sraster</tt></b>, and <b><tt>id</tt></b> arguments are as for
+<b><tt>copy_mono</tt></b> or <b><tt>copy_color</tt></b>
+(<b><tt>data</tt></b>, <b><tt>data_x</tt></b>, <b><tt>raster</tt></b>,
+<b><tt>id</tt></b>), and specify a source bitmap.
+
+<li><b><tt>scolors</tt></b> points to two <b><tt>gx_color_index</tt></b>
+values; <b><tt>scolors[0]</tt></b> is the background color (the color
+corresponding to 0-bits in the bitmap), <b><tt>scolors[1]</tt></b> is the
+foreground color (the color corresponding to 1-bits in the bitmap).
+</ul>
+
+<p>
+If <b>S</b> is a pixmap:
+
+<ul>
+<li><b><tt>sdata</tt></b>, <b><tt>sourcex</tt></b>,
+<b><tt>sraster</tt></b>, and <b><tt>id</tt></b> arguments are as for
+<b><tt>copy_mono</tt></b> or <b><tt>copy_color</tt></b>
+(<b><tt>data</tt></b>, <b><tt>data_x</tt></b>, <b><tt>raster</tt></b>,
+<b><tt>id</tt></b>), and specify a source pixmap whose depth is the same as
+the depth of the destination.
+
+<li><b><tt>scolors</tt></b> is <b><tt>NULL</tt></b>.
+</ul>
+
+<p>
+Note that if the source is a bitmap with background=0 and foreground=1, and
+the destination is 1 bit deep, then the source can be treated as a pixmap
+(scolors=<b><tt>NULL</tt></b>).
+
+<h5><a name="T_spec"></a>The texture specification T</h5>
+
+<p>
+Similar to the source, the texture <b>T</b> may be a solid color, a bitmap,
+or a pixmap. If <b>T</b> is a solid color:
+
+<ul>
+<li>The texture pointer is irrelevant.
+
+<li><b><tt>tcolors</tt></b> points to two <b><tt>gx_color_index</tt></b>
+values; <b><tt>tcolors[0]</tt></b> = <b><tt>tcolors[1]</tt></b> = the
+color.
+</ul>
+
+<p>
+If <b>T</b> is a bitmap:
+
+<ul>
+<li>The texture argument points to a <b><tt>gx_tile_bitmap</tt></b>, as for
+the <b><tt>tile_rectangle</tt></b> procedure. Similarly,
+<b><tt>phase_x</tt></b> and <b><tt>phase_y</tt></b> specify the offset of
+the texture relative to the device coordinate system origin, again as for
+<b><tt>tile_rectangle</tt></b>. The tile is a bitmap (1 bit per pixel).
+
+<li><b><tt>tcolors</tt></b> points to two <b><tt>gx_color_index</tt></b>
+values; <b><tt>tcolors[0]</tt></b> is the background color (the color
+corresponding to 0-bits in the bitmap), <b><tt>tcolors[1]</tt></b> is the
+foreground color (the color corresponding to 1-bits in the bitmap).
+</ul>
+
+<p>
+If <b>T</b> is a pixmap:
+
+<ul>
+<li>The texture argument points to a <b><tt>gx_tile_bitmap</tt></b> whose
+depth is the same as the depth of the destination.
+
+<li>tcolors is <b><tt>NULL</tt></b>.
+</ul>
+
+<p>
+Again, if the texture is a bitmap with background=0 and foreground=1, and
+the destination depth is 1, the texture bitmap can be treated as a pixmap
+(tcolors=<b><tt>NULL</tt></b>).
+
+<p>
+Note that while a source bitmap or pixmap has the same width and height as
+the destination, a texture bitmap or pixmap has its own width and height
+specified in the <b><tt>gx_tile_bitmap</tt></b> structure, and is
+replicated or clipped as needed.
+
+<h5><a name="F_spec"></a>The function specification f</h5>
+
+<p>
+"Command" indicates the raster operation and transparency as follows:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=bottom>
+ <th>Bits
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>7-0
+ <td>&nbsp;
+ <td>raster op
+<tr valign=top> <td>8
+ <td>&nbsp;
+ <td>0 if source opaque, 1 if source transparent
+<tr valign=top> <td>9
+ <td>&nbsp;
+ <td>0 if texture opaque, 1 if texture transparent
+<tr valign=top> <td>?-10
+ <td>&nbsp;
+ <td>unused, must be 0
+</table></blockquote>
+
+<p>
+The raster operation follows the Microsoft and H-P specification. It is an
+8-element truth table that specifies the output value for each of the
+possible 2&times;2&times;2 input values as follows:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=bottom>
+ <th>Bit
+ <td>&nbsp;
+ <th>Texture
+ <td>&nbsp;
+ <th>Source
+ <td>&nbsp;
+ <th>Destination
+<tr> <td colspan=7><hr>
+<tr valign=top> <td align=center>7
+ <td>&nbsp;
+ <td align=center>1
+ <td>&nbsp;
+ <td align=center>1
+ <td>&nbsp;
+ <td align=center>1
+<tr valign=top> <td align=center>6
+ <td>&nbsp;
+ <td align=center>1
+ <td>&nbsp;
+ <td align=center>1
+ <td>&nbsp;
+ <td align=center>0
+<tr valign=top> <td align=center>5
+ <td>&nbsp;
+ <td align=center>1
+ <td>&nbsp;
+ <td align=center>0
+ <td>&nbsp;
+ <td align=center>1
+<tr valign=top> <td align=center>4
+ <td>&nbsp;
+ <td align=center>1
+ <td>&nbsp;
+ <td align=center>0
+ <td>&nbsp;
+ <td align=center>0
+<tr valign=top> <td align=center>3
+ <td>&nbsp;
+ <td align=center>0
+ <td>&nbsp;
+ <td align=center>1
+ <td>&nbsp;
+ <td align=center>1
+<tr valign=top> <td align=center>2
+ <td>&nbsp;
+ <td align=center>0
+ <td>&nbsp;
+ <td align=center>1
+ <td>&nbsp;
+ <td align=center>0
+<tr valign=top> <td align=center>1
+ <td>&nbsp;
+ <td align=center>0
+ <td>&nbsp;
+ <td align=center>0
+ <td>&nbsp;
+ <td align=center>1
+<tr valign=top> <td align=center>0
+ <td>&nbsp;
+ <td align=center>0
+ <td>&nbsp;
+ <td align=center>0
+ <td>&nbsp;
+ <td align=center>0
+</table></blockquote>
+
+<p>
+Transparency affects the output in the following way. A source or texture
+pixel is considered transparent if its value is all 1s (for instance, 1 for
+bitmaps, <tt>0xffffff</tt> for 24-bit RGB pixmaps) <b><em>and</em></b> the
+corresponding transparency bit is set in the command. For each pixel, the
+result of the Boolean operation is written into the destination iff neither
+the source nor the texture pixel is transparent. (Note that the H-P
+RasterOp specification, on which this is based, specifies that if the
+source and texture are both all 1s and the command specifies transparent
+source and opaque texture, the result <b><em>should</em></b> be written in
+the output. We think this is an error in the documentation.)
+
+<h5><a name="Compositing_notes"></a>Notes</h5>
+
+<p>
+<b><tt>copy_rop</tt></b> is defined to operate on pixels in RGB space,
+again following the H-P and Microsoft specification. For devices that
+don't use RGB (or gray-scale with black = 0, white = all 1s) as their
+native color representation, the implementation of <b><tt>copy_rop</tt></b>
+must convert to RGB or gray space, do the operation, and convert back (or
+do the equivalent of this). Here are the <b><tt>copy_rop</tt></b>
+equivalents of the most important previous imaging calls. We assume the
+declaration:
+
+<blockquote><b><tt>
+static const gx_color_index white2[2] = { 1, 1 };
+</tt></b></blockquote>
+
+<p>
+Note that <b><tt>rop3_S</tt></b> may be replaced by any other Boolean operation.
+For monobit devices, we assume that black = 1.
+
+<blockquote>
+<pre>/* For all devices: */
+(*fill_rectangle)(dev, x, y, w, h, color) ==&gt;
+
+ { gx_color_index colors[2];
+ colors[0] = colors[1] = color;
+ (*dev_proc(dev, copy_rop))(dev, NULL, 0, 0, gx_no_bitmap_id, colors,
+ NULL, colors /*irrelevant*/,
+ x, y, w, h, 0, 0, rop3_S);
+ }
+
+/* For black-and-white devices only: */
+(*copy_mono)(dev, base, sourcex, sraster, id,
+ x, y, w, h, (gx_color_index)0, (gx_color_index)1) ==&gt;
+
+ (*dev_proc(dev, copy_rop))(dev, base, sourcex, sraster, id, NULL,
+ NULL, white2 /*irrelevant*/,
+ x, y, w, h, 0, 0, rop3_S);
+
+/* For color devices, where neither color0 nor color1 is gx_no_color_index: */
+(*copy_mono)(dev, base, sourcex, sraster, id,
+ x, y, w, h, color0, color1) ==&gt;
+
+ { gx_color_index colors[2];
+ colors[0] = color0, colors[1] = color1;
+ (*dev_proc(dev, copy_rop))(dev, base, sourcex, sraster, id, colors,
+ NULL, white2 /*irrelevant*/,
+ x, y, w, h, 0, 0, rop3_S);
+ }
+
+/* For black-and-white devices only: */
+(*copy_mono)(dev, base, sourcex, sraster, id,
+ x, y, w, h, gx_no_color_index, (gx_color_index)1) ==&gt;
+
+ (*dev_proc(dev, copy_rop))(dev, base, sourcex, sraster, id, NULL,
+ NULL, white2 /*irrelevant*/,
+ x, y, w, h, 0, 0,
+ rop3_S | lop_S_transparent);
+
+/* For all devices: */
+(*copy_color)(dev, base, sourcex, sraster, id,
+ x, y, w, h) ==&gt; [same as first copy_mono above]
+
+/* For black-and-white devices only: */
+(*tile_rectangle)(dev, tile, x, y, w, h,
+ (gx_color_index)0, (gx_color_index)1, px, py) ==&gt;
+
+ (*dev_proc(dev, copy_rop))(dev, NULL, 0, 0, gx_no_bitmap_id,
+ white2 /*irrelevant*/,
+ tile, NULL,
+ x, y, w, h, px, py, rop3_T)
+</pre></blockquote>
+
+<h3><a name="Polygon_level_drawing"></a>Polygon-level drawing</h3>
+
+<p>
+In addition to the pixel-level drawing operations that take integer device
+coordinates and pure device colors, the driver interface includes
+higher-level operations that draw polygons using fixed-point coordinates,
+possibly halftoned colors, and possibly a non-default logical operation.
+
+<p>
+The <b><tt>fill_</tt></b>* drawing operations all use the center-of-pixel
+rule: a pixel is colored iff its center falls within the polygonal region
+being filled. If a pixel center <em>(X+0.5,Y+0.5)</em> falls exactly on
+the boundary, the pixel is filled iff the boundary is horizontal and the
+filled region is above it, or the boundary is not horizontal and the filled
+region is to the right of it.
+
+<dl>
+<dt><b><tt>int (*fill_trapezoid)(P10(gx_device&nbsp;*dev,
+const&nbsp;gs_fixed_edge&nbsp;*left, const&nbsp;gs_fixed_edge&nbsp;*right,
+fixed&nbsp;ybot, fixed&nbsp;ytop, bool&nbsp;swap_axes,
+const&nbsp;gx_drawing_color&nbsp;*pdcolor,
+gs_logical_operation_t&nbsp;lop))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Fill a trapezoid. The bottom and top edges are parallel to the x
+axis, and are defined by <b><tt>ybot</tt></b> and <b><tt>ytop</tt></b>,
+respectively. The left and right edges are defined by <b><tt>left</tt></b>
+and <b><tt>right</tt></b>. Both of these respresent lines (<b><tt>gs_fixed_edge</tt></b>
+is defined in <a href="../src/gxdevcli.h">gxdevcli.h</a> and consists
+of <b><tt>gs_fixed_point</tt></b> <b><tt>start</tt></b> and <b><tt>end</tt></b> points).
+The y coordinates of these lines need not have any specific relation to
+<b><tt>ybot</tt></b> and <b><tt>ytop</tt></b>. The routine is defined this way so
+that the filling algorithm can subdivide edges and still guarantee
+that the exact same pixels will be filled. If
+<b><tt>swap_axes</tt></b> is set, the meanings of X and Y are
+interchanged.
+</dl>
+
+<dl>
+<dt><b><tt>int (*fill_parallelogram)(P9(gx_device&nbsp;*dev,
+fixed&nbsp;px, fixed&nbsp;py, fixed&nbsp;ax, fixed&nbsp;ay, fixed&nbsp;bx,
+fixed&nbsp;by, const&nbsp;gx_drawing_color&nbsp;*pdcolor,
+gs_logical_operation_t&nbsp;lop))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Fill a parallelogram whose corners are <em>(px,py)</em>,
+<em>(px+ax,py+ay)</em>, <em>(px+bx,py+by)</em>, and
+<em>(px+ax+bx,py+ay+by)</em>. There are no constraints on the values of
+any of the parameters, so the parallelogram may have any orientation
+relative to the coordinate axes.
+</dl>
+
+<dl>
+<dt><b><tt>int (*fill_triangle)(P9(gx_device&nbsp;*dev, fixed&nbsp;px,
+fixed&nbsp;py, fixed&nbsp;ax, fixed&nbsp;ay, fixed&nbsp;bx, fixed&nbsp;by,
+const&nbsp;gx_drawing_color&nbsp;*pdcolor,
+gs_logical_operation_t&nbsp;lop))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Fill a triangle whose corners are <em>(px,py)</em>,
+<em>(px+ax,py+ay)</em>, and <em>(px+bx,py+by)</em>.
+</dl>
+
+<dl>
+<dt><b><tt>int (*draw_thin_line)(P7(gx_device&nbsp;*dev,
+fixed&nbsp;fx0, fixed&nbsp;fy0, fixed&nbsp;fx1, fixed&nbsp;fy1,
+const&nbsp;gx_drawing_color&nbsp;*pdcolor,
+gs_logical_operation_t&nbsp;lop))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Draw a one-pixel-wide line from <em>(fx0,fy0)</em> to
+<em>(fx1,fy1)</em>.
+</dl>
+
+<dl>
+<dt><b><tt>int (*draw_line)(P6(gx_device&nbsp;*dev, int&nbsp;x0, int&nbsp;y0,
+int&nbsp;x1, int&nbsp;y1, gx_color_index&nbsp;color))</tt></b>
+<b><em>[OPTIONAL] [OBSOLETE]</em></b>
+<dd>This procedure is no longer used: it is replaced by the draw_thin_line
+procedure. However, still appears in the driver procedure vector for
+backward compatibility. It should never be called, and drivers should not
+implement it.
+</dl>
+
+<h3><a name="High_level_drawing"></a>High-level drawing</h3>
+
+<p>
+In addition to the lower-level drawing operations described above, the
+driver interface provides a set of high-level operations. Normally these
+will have their default implementation, which converts the high-level
+operation to the low-level ones just described; however, drivers that
+generate high-level output formats such as CGM, or communicate with devices
+that have firmware for higher-level operations such as polygon fills, may
+implement these high-level operations directly. For more details, please
+consult the source code, specifically:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <th align=left>Header
+ <td>&nbsp;&nbsp;&nbsp;
+ <th align=left>Defines
+<tr valign=top> <td><a href="../src/gxpaint.h">gxpaint.h</a>
+ <td>&nbsp;
+ <td><b><tt>gx_fill_params</tt></b>, <b><tt>gx_stroke_params</tt></b>
+<tr valign=top> <td><a href="../src/gxfixed.h">gxfixed.h</a>
+ <td>&nbsp;
+ <td><b><tt>fixed</tt></b>, <b><tt>gs_fixed_point</tt></b> (used by
+ <b><tt>gx_*_params</tt></b>)
+<tr valign=top> <td><a href="../src/gxistate.h">gxistate.h</a>
+ <td>&nbsp;
+ <td><b><tt>gs_imager_state</tt></b> (used by <b><tt>gx_*_params</tt></b>)
+<tr valign=top> <td><a href="../src/gxline.h">gxline.h</a>
+ <td>&nbsp;
+ <td><b><tt>gx_line_params</tt></b> (used by <b><tt>gs_imager_state</tt></b>)
+<tr valign=top> <td><a href="../src/gslparam.h">gslparam.h</a>
+ <td>&nbsp;
+ <td>line cap/join values (used by <b><tt>gx_line_params</tt></b>)
+<tr valign=top> <td><a href="../src/gxmatrix.h">gxmatrix.h</a>
+ <td>&nbsp;
+ <td><b><tt>gs_matrix_fixed</tt></b> (used by <b><tt>gs_imager_state</tt></b>)
+<tr valign=top> <td><a href="../src/gspath.h">gspath.h</a>, <a href="../src/gxpath.h">gxpath.h</a>, <a href="../src/gzpath.h">gzpath.h</a>
+ <td>&nbsp;
+ <td><b><tt>gx_path</tt></b>
+<tr valign=top> <td><a href="../src/gxcpath.h">gxcpath.h</a>, <a href="../src/gzcpath.h">gzcpath.h</a>
+ <td>&nbsp;
+ <td><b><tt>gx_clip_path</tt></b>
+</table></blockquote>
+
+<p>
+For a minimal example of how to implement the high-level drawing operations,
+see <a href="../src/gdevtrac.c">gdevtrac.c</a>.
+
+<h4><a name="Paths"></a>Paths</h4>
+
+<dl>
+<dt><b><tt>int (*fill_path)(P6(gx_device&nbsp;*dev,
+const&nbsp;gs_imager_state&nbsp;*pis, gx_path&nbsp;*ppath,
+const&nbsp;gx_fill_params&nbsp;*params,
+const&nbsp;gx_drawing_color&nbsp;*pdcolor,
+const&nbsp;gx_clip_path&nbsp;*pcpath))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Fill the given path, clipped by the given clip path, according to the
+given parameters, with the given color. The clip path pointer may be
+<b><tt>NULL</tt></b>, meaning do not clip.
+</dl>
+
+<dl>
+<dt><b><tt>int (*stroke_path)(P6(gx_device&nbsp;*dev,
+const&nbsp;gs_imager_state&nbsp;*pis, gx_path&nbsp;*ppath,
+const&nbsp;gx_stroke_params&nbsp;*params,
+const&nbsp;gx_drawing_color&nbsp;*pdcolor,
+const&nbsp;gx_clip_path&nbsp;*pcpath))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Stroke the given path, clipped by the given clip path, according to the
+given parameters, with the given color. The clip path pointer may be
+<b><tt>NULL</tt></b>, meaning not to clip.
+</dl>
+
+<dl>
+<dt><b><tt>int (*fill_mask)(P13(gx_device&nbsp;*dev,
+const&nbsp;byte&nbsp;*data, int&nbsp;data_x, int&nbsp;raster,
+gx_bitmap_id&nbsp;id, int&nbsp;x, int&nbsp;y, int&nbsp;width,
+int&nbsp;height, const&nbsp;gx_drawing_color&nbsp;*pdcolor, int&nbsp;depth,
+int&nbsp;command, const&nbsp;gx_clip_path&nbsp;*pcpath))</tt></b>
+<b><em>[OPTIONAL]</em></b>
+<dd>Color the 1-bits in the given mask (or according to the alpha values,
+if <b><tt>depth</tt></b>&nbsp;&gt;&nbsp;1), clipped by the given clip path,
+with the given color and logical operation. The clip path pointer may be
+<b><tt>NULL</tt></b>, meaning do not clip. The parameters
+<b><tt>data</tt></b>, ..., <b><tt>height</tt></b> are as for
+<b><tt>copy_mono</tt></b>; depth is as for <b><tt>copy_alpha</tt></b>;
+command is as for <b><tt>copy_rop</tt></b>.
+</dl>
+
+<h4><a name="Images"></a>Images</h4>
+
+<p>
+Similar to the high-level interface for fill and stroke graphics, a high-level
+interface exists for bitmap images. The procedures in this part of the
+interface are optional.
+
+<p>
+Bitmap images come in a variety of types, corresponding closely (but not
+precisely) to the PostScript ImageTypes. The generic or common part of all
+bitmap images is defined by:
+
+<blockquote>
+<pre>typedef struct {
+ const gx_image_type_t *type;
+ gs_matrix ImageMatrix;
+} gs_image_common_t;</pre>
+</blockquote>
+
+<p>
+Bitmap images that supply data (all image types except
+<b><tt>image_type_from_device</tt></b> (2)) are defined by:
+
+<blockquote>
+<pre>#define gs_image_max_components 5
+typedef struct {
+ &lt;&lt; gs_image_common_t &gt;&gt;
+ int Width;
+ int Height;
+ int BitsPerComponent;
+ float Decode[gs_image_max_components * 2];
+ bool Interpolate;
+} gs_data_image_t;</pre>
+</blockquote>
+
+<p>
+Images that supply pixel (as opposed to mask) data are defined by:
+
+<blockquote>
+<pre>typedef enum {
+ /* Single plane, chunky pixels. */
+ gs_image_format_chunky = 0,
+ /* num_components planes, chunky components. */
+ gs_image_format_component_planar = 1,
+ /* BitsPerComponent * num_components planes, 1 bit per plane */
+ gs_image_format_bit_planar = 2
+} gs_image_format_t;
+typedef struct {
+ &lt;&lt; gs_data_image_t &gt;&gt;
+ const gs_color_space *ColorSpace;
+ bool CombineWithColor;
+} gs_pixel_image_t;</pre>
+</blockquote>
+
+<p>
+Ordinary PostScript Level 1 or Level 2 (<b><tt>ImageType</tt></b> 1) images
+are defined by:
+
+<blockquote>
+<pre>typedef enum {
+ /* No alpha. */
+ gs_image_alpha_none = 0,
+ /* Alpha precedes color components. */
+ gs_image_alpha_first,
+ /* Alpha follows color components. */
+ gs_image_alpha_last
+} gs_image_alpha_t;
+typedef struct {
+ &lt;&lt; gs_pixel_image_t &gt;&gt;
+ bool ImageMask;
+ bool adjust;
+ gs_image_alpha_t Alpha;
+} gs_image1_t;
+typedef gs_image1_t gs_image_t;</pre>
+</blockquote>
+
+<p>
+Of course, standard PostScript images don't have an alpha component. For
+more details, consult the source code in <a
+href="../src/gsiparam.h">gsiparam.h</a> and <b><tt>gsiparm*.h</tt></b>,
+which define parameters for an image.
+
+<p>
+The <b><tt>begin[_typed_]image</tt></b> driver procedures create image
+enumeration structures. The common part of these structures consists of:
+
+<blockquote>
+<pre>typedef struct gx_image_enum_common_s {
+ const gx_image_type_t *image_type;
+ const gx_image_enum_procs_t *procs;
+ gx_device *dev;
+ gs_id id;
+ int num_planes;
+ int plane_depths[gs_image_max_planes]; /* [num_planes] */
+ int plane_widths[gs_image_max_planes] /* [num_planes] */
+} gx_image_enum_common_t;</pre>
+</blockquote>
+
+<p>
+where <b><tt>procs</tt></b> consists of:
+
+<blockquote>
+<pre>typedef struct gx_image_enum_procs_s {
+
+ /*
+ * Pass the next batch of data for processing.
+ */
+#define image_enum_proc_plane_data(proc)\
+ int proc(P4(gx_device *dev,\
+ gx_image_enum_common_t *info, const gx_image_plane_t *planes,\
+ int height))
+
+ image_enum_proc_plane_data((*plane_data));
+
+ /*
+ * End processing an image, freeing the enumerator.
+ */
+#define image_enum_proc_end_image(proc)\
+ int proc(P3(gx_device *dev,\
+ gx_image_enum_common_t *info, bool draw_last))
+
+ image_enum_proc_end_image((*end_image));
+
+ /*
+ * Flush any intermediate buffers to the target device.
+ * We need this for situations where two images interact
+ * (currently, only the mask and the data of ImageType 3).
+ * This procedure is optional (may be 0).
+ */
+#define image_enum_proc_flush(proc)\
+ int proc(P1(gx_image_enum_common_t *info))
+
+ image_enum_proc_flush((*flush));
+
+} gx_image_enum_procs_t;</pre>
+</blockquote>
+
+<p> In other words, <b><tt>begin[_typed]_image</tt></b> sets up an
+enumeration structure that contains the procedures that will process the
+image data, together with all variables needed to maintain the state of the
+process. Since this is somewhat tricky to get right, if you plan to create
+one of your own you should probably read an existing implementation of
+<b><tt>begin[_typed]_image</tt></b>, such as the one in <a
+href="../src/gdevbbox.c">gdevbbox.c</a> or <a
+href="../src/gdevps.c">gdevps.c</a>.
+
+<p>
+The data passed at each call of <b><tt>image_plane_data</tt></b> consists of
+one or more planes, as appropriate for the type of image.
+<b><tt>begin[_typed]_image</tt></b> must initialize the
+<b><tt>plane_depths</tt></b> array in the enumeration structure with the
+depths (bits per element) of the planes. The array of
+<b><tt>gx_image_plane_t</tt></b> structures passed to each call of
+<b><tt>image_plane_data</tt></b> then defines where the data are stored, as
+follows:
+
+<blockquote>
+<pre>typedef struct gx_image_plane_s {
+ const byte *data;
+ int data_x;
+ uint raster;
+} gx_image_plane_t;</pre>
+</blockquote>
+
+<dl>
+<dt><b><tt>int (*begin_image)(P9(gx_device&nbsp;*dev,
+const&nbsp;gs_imager_state&nbsp;*pis, const&nbsp;gs_image_t&nbsp;*pim,
+gs_image_format_t&nbsp;format, gs_int_rect&nbsp;*prect,
+const&nbsp;gx_drawing_color&nbsp;*pdcolor,
+const&nbsp;gx_clip_path&nbsp;*pcpath, gs_memory_t&nbsp;*memory,
+gx_image_enum_common_t&nbsp;**pinfo))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Begin the transmission of an image. Zero or more calls of
+<b><tt>image_plane_data</tt></b> will follow, and then a call of
+<b><tt>end_image</tt></b>. The parameters of <b><tt>begin_image</tt></b>
+are as follows:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <td><b><tt>pis</tt></b>
+ <td>&nbsp;&nbsp;&nbsp;
+ <td>pointer to an imager state. The only relevant elements of the
+ imager state are the CTM (coordinate transformation matrix),
+ the logical operation (<b><tt>RasterOp</tt></b> or
+ transparency), and the color rendering information.
+<tr valign=top> <td><b><tt>pim</tt></b>
+ <td>&nbsp;
+ <td>pointer to the <b><tt>gs_image_t</tt></b> structure that
+ defines the image parameters
+<tr valign=top> <td><b><tt>format</tt></b>
+ <td>&nbsp;
+ <td>defines how pixels are represented for
+ <b><tt>image_plane_data</tt></b>. See the description of
+ <b><tt>image_plane_data</tt></b> below
+<tr valign=top> <td><b><tt>prect</tt></b>
+ <td>&nbsp;
+ <td>if not <b><tt>NULL</tt></b>, defines a subrectangle of the
+ image; only the data for this subrectangle will be passed to
+ <b><tt>image_plane_data</tt></b>, and only this subrectangle should
+ be drawn
+<tr valign=top> <td><b><tt>pdcolor</tt></b>
+ <td>&nbsp;
+ <td>defines a drawing color, only needed for masks or if
+ <b><tt>CombineWithColor</tt></b> is true
+<tr valign=top> <td><b><tt>pcpath</tt></b>
+ <td>&nbsp;
+ <td>if not <b><tt>NULL</tt></b>, defines an optional clipping path
+<tr valign=top> <td><b><tt>memory</tt></b>
+ <td>&nbsp;
+ <td>defines the allocator to be used for allocating bookkeeping
+ information
+<tr valign=top> <td><b><tt>pinfo</tt></b>
+ <td>&nbsp;
+ <td>the implementation should return a pointer to its state
+ structure here
+</table></blockquote>
+
+<p>
+<b><tt>begin_image</tt></b> is expected to allocate a structure for its
+bookkeeping needs, using the allocator defined by the memory parameter, and
+return it in <b><tt>*pinfo</tt></b>. <b><tt>begin_image</tt></b> should not assume that
+the structures in <b><tt>*pim</tt></b>, <b><tt>*prect</tt></b>, or
+<b><tt>*pdcolor</tt></b> will survive the call on
+<b><tt>begin_image</tt></b> (except for the color space in
+<b><tt>*pim-&gt;ColorSpace</tt></b>): it should copy any necessary parts of
+them into its own bookkeeping structure. It may, however, assume that
+<b><tt>*pis</tt></b>, <b><tt>*pcpath</tt></b>, and of course
+<b><tt>*memory</tt></b> will live at least until <b><tt>end_image</tt></b>
+is called.
+
+<p>
+<b><tt>begin_image</tt></b> returns 0 normally, or 1 if the image does not
+need any data. In the latter case, <b><tt>begin_image</tt></b> does not
+allocate an enumeration structure.
+</dl>
+
+<dl>
+<dt><b><tt>int (*begin_typed_image)(P9(gx_device&nbsp;*dev,
+const&nbsp;gs_imager_state&nbsp;*pis, const&nbsp;gs_matrix&nbsp;*pmat,
+const&nbsp;gs_image_common_t&nbsp;*pim, gs_int_rect&nbsp;*prect,
+const&nbsp;gx_drawing_color&nbsp;*pdcolor,
+const&nbsp;gx_clip_path&nbsp;*pcpath, gs_memory_t&nbsp;*memory,
+gx_image_enum_common_t&nbsp;**pinfo))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>This has the same function as <b><tt>begin_image</tt></b>, except
+<ul>
+<li>The image may be of any <b><tt>ImageType</tt></b>, not only
+<b><tt>image_type_simple</tt></b> (1);
+
+<li>The image format is included in the image structure, not supplied as a
+separate argument;
+
+<li>The optional <b><tt>pmat</tt></b> argument provides a matrix that
+substitutes for the one in the imager state;
+
+<li>For mask images, if <b><tt>pmat</tt></b> is not <b><tt>NULL</tt></b>
+and the color is pure, <b><tt>pis</tt></b> may be <b><tt>NULL</tt></b>.
+</ul>
+</dl>
+
+<p>
+The actual transmission of data uses the procedures in the enumeration
+structure, not driver procedures, since the handling of the data usually
+depends on the image type and parameters rather than the device. These
+procedures are specified as follows.
+
+<dl>
+<dt><b><tt>int (*image_plane_data)(P4(gx_device&nbsp;*dev,
+gx_image_enum_common_t&nbsp;*info,
+const&nbsp;gx_image_plane_t&nbsp;*planes, int&nbsp;height))</tt></b>
+<dd>This call provides more of the image source data: specifically,
+<b><tt>height</tt></b> rows, with <b><tt>Width</tt></b> pixels supplied for
+each row.
+
+<p>
+The data for each row are packed big-endian within each byte, as for
+<b><tt>copy_color</tt></b>. The <b><tt>data_x</tt></b> (starting X position
+within the row) and <b><tt>raster</tt></b> (number of bytes per row) are
+specified separately for each plane, and may include some padding at the
+beginning or end of each row. Note that for non-mask images, the input data
+may be in any color space and may have any number of bits per component (1,
+2, 4, 8, 12); currently mask images always have 1 bit per component, but in
+the future, they might allow multiple bits of alpha. Note also that each
+call of <b><tt>image_plane_data</tt></b> passes complete pixels: for example, for
+a chunky image with 24 bits per pixel, each call of
+<b><tt>image_plane_data</tt></b> passes 3N bytes of data (specifically,
+3&nbsp;&times;&nbsp;Width&nbsp;&times;&nbsp;height).
+
+<p>
+The interpretation of planes depends on the <b><tt>format</tt></b> member of
+the <b><tt>gs_image[_common]_t</tt></b> structure:
+
+<ul>
+<li>If the format is <b><tt>gs_image_format_chunky</tt></b>,
+<b><tt>planes[0].data</tt></b> points to data in "chunky" format, in which
+the components follow each other (for instance, RGBRGBRGB....)
+
+<li>If the format is <b><tt>gs_image_format_component_planar</tt></b>,
+<b><tt>planes[0&nbsp;..&nbsp;N-1].data</tt></b> point to data for the
+<b><em>N</em></b> components (for example, <b><em>N</em></b>=3 for RGB
+data); each plane contains samples for a single component, for instance,
+RR..., GG..., BB.... Note that the planes are divided by component, not by
+bit: for example, for 24-bit RGB data, <b><em>N</em></b>=3, with 8-bit
+values in each plane of data.
+
+<li>If the format is <b><tt>gs_image_format_bit_planar</tt></b>,
+<b><tt>planes[0&nbsp;..&nbsp;N*B-1].data</tt></b> point to data for the
+<b><em>N</em></b> components of <b><em>B</em></b> bits each (for example,
+<b><em>N</em></b>=3 and <b><em>B</em></b>=4 for RGB data with 4 bits per
+component); each plane contains samples for a single bit, for instance, R0
+R1 R2 R3 G0 G1 G2 G3 B0 B1 B2 B3. Note that the most significant bit of
+each plane comes first.
+</ul>
+
+<p>
+If, as a result of this call, <b><tt>image_plane_data</tt></b> has been called with all
+the data for the (sub-)image, it returns 1; otherwise, it returns 0 or an
+error code as usual.
+
+<p>
+<b><tt>image_plane_data</tt></b>, unlike most other procedures that take bitmaps as
+arguments, does not require the data to be aligned in any way.
+
+<p>
+Note that for some image types, different planes may have different
+numbers of bits per pixel, as defined in the <b><tt>plane_depths</tt></b> array.
+</dl>
+
+<dl>
+<dt><b><tt>int (*end_image)(P3(gx_device&nbsp;*dev, void&nbsp;*info,
+bool&nbsp;draw_last))</tt></b>
+<dd>Finish processing an image, either because all data have been supplied
+or because the caller has decided to abandon this image.
+<b><tt>end_image</tt></b> may be called at any time after
+<b><tt>begin_image</tt></b>. It should free the info structure and any
+subsidiary structures. If <b><tt>draw_last</tt></b> is true, it should
+finish drawing any buffered lines of the image.
+</dl>
+
+<h5><a name="Images_notes"></a>Notes</h5>
+
+<p>
+While there will almost never be more than one image enumeration in
+progress -- that is, after a <b><tt>begin_image</tt></b>,
+<b><tt>end_image</tt></b> will almost always be called before the next
+<b><tt>begin_image</tt></b> -- driver code should not rely on this
+property; in particular, it should store all information regarding the
+image in the info structure, not in the driver structure.
+
+<p>
+Note that if <b><tt>begin_[typed_]image</tt></b> saves its parameters in
+the info structure, it can decide on each call whether to use its own
+algorithms or to use the default implementation. (It may need to call
+<b><tt>gx_default_begin</tt></b>/<b><tt>end_image</tt></b> partway
+through.) [A later revision of this document may include an example here.]
+
+<h4><a name="Text"></a>Text</h4>
+
+<p>
+The third high-level interface handles text. As for images, the interface
+is based on creating an enumerator which then may execute the operation in
+multiple steps. As for the other high-level interfaces, the procedures are
+optional.
+
+<dl>
+<dt><b><tt>int (*text_begin)(P9(gx_device&nbsp;*dev,
+gs_imager_state&nbsp;*pis, const&nbsp;gs_text_params_t&nbsp;*text,
+gs_font&nbsp;*font, gx_path&nbsp;*path,
+const&nbsp;gx_device_color&nbsp;*pdcolor,
+const&nbsp;gx_clip_path&nbsp;*pcpath, gs_memory_t&nbsp;*memory,
+gs_text_enum_t&nbsp;**ppte))</tt></b> <b><em>[OPTIONAL]</em></b>
+
+<dd>
+Begin processing text, by creating a state structure and storing it in
+<b><tt>*ppte</tt></b>. The parameters of <b><tt>text_begin</tt></b> are as
+follows:
+</dl>
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <td><b><tt>dev</tt></b>
+ <td>&nbsp;&nbsp;&nbsp;
+ <td>The usual pointer to the device.
+<tr valign=top> <td><b><tt>pis</tt></b>
+ <td>&nbsp;&nbsp;&nbsp;
+ <td>A pointer to an imager state. All elements may be relevant,
+ depending on how the text is rendered.
+<tr valign=top> <td><b><tt>text</tt></b>
+ <td>&nbsp;
+ <td>A pointer to the structure that defines the text operation
+ and parameters. See <a href="../src/gstext.h">gstext.h</a> for details.
+<tr valign=top> <td><b><tt>font</tt></b>
+ <td>&nbsp;
+ <td>Defines the font for drawing.
+<tr valign=top> <td><b><tt>path</tt></b>
+ <td>&nbsp;
+ <td>Defines the path where the character outline will be appended
+ (if the text operation includes <b><tt>TEXT_DO_...PATH</tt></b>),
+ and whose current point indicates where drawing should occur
+ and will be updated by the string width (unless the text
+ operation includes <b><tt>TEXT_DO_NONE</tt></b>).
+<tr valign=top> <td><b><tt>pdcolor</tt></b>
+ <td>&nbsp;
+ <td>Defines the drawing color for the text. Only relevant if
+ the text operation includes <b><tt>TEXT_DO_DRAW</tt></b>.
+<tr valign=top> <td><b><tt>pcpath</tt></b>
+ <td>&nbsp;
+ <td>If not <b><tt>NULL</tt></b>, defines an optional clipping path.
+ Only relevant if the text operation includes
+ <b><tt>TEXT_DO_DRAW</tt></b>.
+<tr valign=top> <td><b><tt>memory</tt></b>
+ <td>&nbsp;
+ <td>Defines the allocator to be used for allocating bookkeeping
+ information.
+<tr valign=top> <td><b><tt>ppte</tt></b>
+ <td>&nbsp;
+ <td>The implementation should return a pointer to its state
+ structure here.
+</table></blockquote>
+
+<p>
+<b><tt>text_begin</tt></b> must allocate a structure for its bookkeeping
+needs, using the allocator defined by the <b><tt>memory</tt></b> parameter,
+and return it in <b><tt>*ppte</tt></b>. <b><tt>text_begin</tt></b> may
+assume that the structures passed as parameters will survive until text
+processing is complete.
+
+<p>
+Clients should not call the driver <b><tt>text_begin</tt></b> procedure
+directly. Instead, they should call <b><tt>gx_device_text_begin</tt></b>,
+which takes the same parameters and also initializes certain common elements
+of the text enumeration structure, or <b><tt>gs_text_begin</tt></b>, which
+takes many of the parameters from a graphics state structure. For details,
+see <a href="../src/gstext.h">gstext.h</a>.
+
+<p>
+The actual processing of text uses the procedures in the enumeration
+structure, not driver procedures, since the handling of the text may depend
+on the font and parameters rather than the device. Text processing may also
+require the client to take action between characters, either because the
+client requested it (<b><tt>TEXT_INTERVENE</tt></b> in the operation) or
+because rendering a character requires suspending text processing to call an
+external package such as the PostScript interpreter. (It is a deliberate
+design decision to handle this by returning to the client, rather than
+calling out of the text renderer, in order to avoid potentially unknown
+stack requirements.) Specifically, the client must call the following
+procedures, which in turn call the procedures in the text enumerator.
+
+<dl>
+<dt><b><tt>int gs_text_process(P1(gs_text_enum_t&nbsp;*pte))</tt></b>
+<dd>Continue processing text. This procedure may return 0 or a negative
+error code as usual, or one of the following values (see
+<a href="../src/gstext.h">gstext.h</a> for details).
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <td><b><tt>TEXT_PROCESS_RENDER</tt></b>
+ <td>The client must cause the current character to be rendered.
+ This currently only is used for PostScript Type 0-4 fonts
+ and their CID-keyed relatives.
+<tr valign=top> <td><b><tt>TEXT_PROCESS_INTERVENE</tt></b>
+ <td>The client has asked to intervene between characters.
+ This is used for <b><tt>cshow</tt></b> and <b><tt>kshow</tt></b>.
+</table></blockquote>
+</dl>
+
+<dl>
+<dt><b><tt>int gs_text_release(P2(gs_text_enum_t&nbsp;*pte,
+client_name_t&nbsp;cname))</tt></b> <dd>Finish processing text and release
+all associated structures. Clients must call this procedure after
+<b><tt>gs_text_process</tt></b> returns 0 or an error, and may call it at
+any time.
+</dl>
+
+<p>
+There are numerous other procedures that clients may call during text
+processing. See <a href="../src/gstext.h">gstext.h</a> for details.
+
+<h5><a name="Text_notes"></a>Notes</h5>
+
+<p>
+Note that unlike many other optional procedures, the default implementation
+of <b><tt>text_begin</tt></b> cannot simply return: like the default
+implementation of <b><tt>begin[_typed]_image</tt></b>, it must create and
+return an enumerator. Furthermore, the implementation of the
+<b><tt>process</tt></b> procedure (in the enumerator structure, called by
+<b><tt>gs_text_process</tt></b>) cannot simply return without doing
+anything, even if it doesn't want to draw anything on the output. See the
+comments in <a href="../src/gxtext.h">gxtext.h</a> for details.
+
+<h3><a name="Reading_bits_back"></a>Reading bits back</h3>
+
+<dl>
+<dt><b><tt>int (*get_bits_rectangle)(P4(gx_device&nbsp;*dev,
+const&nbsp;gs_int_rect&nbsp;*prect, gs_get_bits_params_t&nbsp;*params,
+gs_int_rect&nbsp;**unread))</tt></b> <b><em>[OPTIONAL]</em></b>
+
+<dd>
+Read a rectangle of bits back from the device. The <b><tt>params</tt></b>
+structure consists of:
+
+<table cellpadding=0 cellspacing=0>
+<tr valign=top> <td><b><tt>options</tt></b>
+ <td>&nbsp;
+ <td>the allowable formats for returning the data
+<tr valign=top> <td><b><tt>data[32]</tt></b>
+ <td>&nbsp;
+ <td>pointers to the returned data
+<tr valign=top> <td><b><tt>x_offset</tt></b>
+ <td>&nbsp;
+ <td>the X offset of the first returned pixel in data
+<tr valign=top> <td><b><tt>raster</tt></b>
+ <td>&nbsp;
+ <td>the distance between scan lines in the returned data
+</table>
+
+<p>
+<b><tt>options</tt></b> is a bit mask specifying what formats the client is
+willing to accept. (If the client has more flexibility, the implementation
+may be able to return the data more efficiently, by avoiding representation
+conversions.) The options are divided into groups.
+
+<blockquote><dl>
+<dt><b><em>alignment</em></b>
+<dd>Specifies whether the returned data must be aligned in the normal
+manner for bitmaps, or whether unaligned data are acceptable.
+
+<dt><b><em>pointer or copy</em></b>
+<dd>Specifies whether the data may be copied into storage provided by the
+client and/or returned as pointers to existing storage. (Note that if
+copying is not allowed, it is much more likely that the implementation will
+return an error, since this requires that the client accept the data in the
+implementation's internal format.)
+
+<dt><b><em>X offset</em></b>
+<dd>Specifies whether the returned data must have a specific X offset
+(usually zero, but possibly other values to avoid skew at some later stage
+of processing) or whether it may have any X offset (which may avoid skew in
+the <b><tt>get_bits_rectangle</tt></b> operation itself).
+
+<dt><b><em>raster</em></b>
+<dd>Specifies whether the raster (distance between returned scan lines)
+must have its standard value, must have some other specific value, or may
+have any value. The standard value for the raster is the device width
+padded out to the alignment modulus when using pointers, or the minimum
+raster to accommodate the X offset + width when copying (padded out to the
+alignment modulus if standard alignment is required).
+
+<dt><b><em>format</em></b>
+<dd>Specifies whether the data are returned in chunky (all components of a
+single pixel together), component-planar (each component has its own scan
+lines), or bit-planar (each bit has its own scan lines) format.
+
+<dt><b><em>color space</em></b>
+<dd>Specifies whether the data are returned as native device pixels, or in
+a standard color space. Currently the only supported standard space is
+RGB.
+
+<dt><b><em>standard component depth</em></b>
+<dd>Specifies the number of bits per component if the data are returned in
+the standard color space. (Native device pixels use
+<b><tt>dev</tt></b>-&gt;<b><tt>color_info.depth</tt></b> bits per pixel.)
+
+<dt><b><em>alpha</em></b>
+<dd>Specifies whether alpha channel information should be returned as the
+first component, the last component, or not at all. Note that for devices
+that have no alpha capability, the returned alpha values will be all 1s.
+</dl></blockquote>
+
+<p>
+The client may set more than one option in each of the above groups; the
+implementation will choose one of the selected options in each group to
+determine the actual form of the returned data, and will update
+<b><tt>params[].options</tt></b> to indicate the form. The returned
+<b><tt>params[].options</tt></b> will normally have only one option set per
+group.
+
+<p>
+For further details on <b><tt>params</tt></b>, see <a
+href="../src/gxgetbit.h">gxgetbit.h</a>. For further details on
+<b><tt>options</tt></b>, see <a href="../src/gxbitfmt.h">gxbitfmt.h</a>.
+
+<p>
+Define w = <b><tt>prect</tt></b>-&gt;q.x - <b><tt>prect</tt></b>-&gt;p.x, h
+= <b><tt>prect</tt></b>-&gt;q.y - <b><tt>prect</tt></b>-&gt;p.y. If the
+bits cannot be read back (for example, from a printer), return
+<b><tt>gs_error_unknownerror</tt></b>; if raster bytes is not enough space
+to hold <b><tt>offset_x</tt></b> + w pixels, or if the source rectangle
+goes outside the device dimensions (p.x &lt; 0 || p.y &lt; 0 || q.x &gt;
+<b><tt>dev</tt></b>-&gt;width || q.y &gt; <b><tt>dev</tt></b>-&gt;height),
+return <b><tt>gs_error_rangecheck</tt></b>; if any regions could not be
+read, return <b><tt>gs_error_ioerror</tt></b> if unpainted is
+<b><tt>NULL</tt></b>, otherwise the number of rectangles (see below);
+otherwise return 0.
+
+<p>
+The caller supplies a buffer of <b><tt>raster</tt></b>&nbsp;&times;&nbsp;h
+bytes starting at <b><tt>data[0]</tt></b> for the returned data in chunky
+format, or <b><em>N</em></b> buffers of
+<b><tt>raster</tt></b>&nbsp;&times;&nbsp;h bytes starting at
+<b><tt>data[0]</tt></b> through
+<b><tt>data[</tt></b><b><em>N-1</em></b><b><tt>]</tt></b> in planar format
+where <b><em>N</em></b> is the number of components or bits. The contents
+of the bits beyond the last valid bit in each scan line (as defined by w)
+are unpredictable. data need not be aligned in any way. If
+<b><tt>x_offset</tt></b> is non-zero, the bits before the first valid bit
+in each scan line are undefined. If the implementation returns pointers to
+the data, it stores them into <b><tt>data[0]</tt></b> or
+<b><tt>data[</tt></b><b><em>0..N-1</em></b><b><tt>]</tt></b>.
+
+<p>
+If not all the source data are available (for example, because the source
+was a partially obscured window and backing store was not available or not
+used), or if the rectangle does not fall completely within the device's
+coordinate system, any unread bits are undefined, and the value returned
+depends on whether unread is <b><tt>NULL</tt></b>. If unread is
+<b><tt>NULL</tt></b>, return <b><tt>gs_error_ioerror</tt></b>; in this case,
+some bits may or may not have been read. If unread is not
+<b><tt>NULL</tt></b>, allocate (using <b><tt>dev</tt></b>-&gt;memory) and
+fill in a list of rectangles that could not be read, store the pointer to
+the list in <b><tt>*unread</tt></b>, and return the number of rectangles; in
+this case, all bits not listed in the rectangle list have been read back
+properly. The list is not sorted in any particular order, but the
+rectangles do not overlap. Note that the rectangle list may cover a
+superset of the region actually obscured: for example, a lazy implementation
+could return a single rectangle that was the bounding box of the region.
+</dl>
+
+<dl>
+<dt><b><tt>int (*get_bits)(P4(gx_device&nbsp;*dev, int&nbsp;y,
+byte&nbsp;*data, byte&nbsp;**actual_data))</tt></b>
+<b><em>[OPTIONAL]</em></b>
+<dd>Read scan line <b><tt>y</tt></b> of bits back from the device into the
+area starting at data. This call is functionally equivalent to
+
+<blockquote>
+<pre>(*get_bits_rectangle)
+ (dev, {0, y, dev-&gt;width, y+1},
+ {(GB_ALIGN_ANY | (GB_RETURN_COPY | GB_RETURN_POINTER) | GB_OFFSET_0 |
+ GB_RASTER_STANDARD | GB_FORMAT_CHUNKY | GB_COLORS_NATIVE |
+ GB_ALPHA_NONE),
+ {data}})</pre></blockquote>
+
+<p>
+with the returned value of
+<b><tt>params</tt></b>-&gt;<b><tt>data[0]</tt></b> stored in
+<b><tt>*actual_data</tt></b>, and will in fact be implemented this way if
+the device defines a <b><tt>get_bits_rectangle</tt></b> procedure and does
+not define one for <b><tt>get_bits</tt></b>. (If
+<b><tt>actual_data</tt></b> is <b><tt>NULL</tt></b>,
+<b><tt>GB_RETURN_POINTER</tt></b> is omitted from the options.)
+</dl>
+
+<h3><a name="Parameters"></a>Parameters</h3>
+
+<p>
+Devices may have an open-ended set of parameters, which are simply pairs
+consisting of a name and a value. The value may be of various types:
+integer (int or long), boolean, float, string, name, <b><tt>NULL</tt></b>,
+array of integer, array of float, or arrays or dictionaries of mixed types.
+For example, the <b><tt>Name</tt></b> of a device is a string; the
+<b><tt>Margins</tt></b> of a device is an array of two floats. See
+<a href="../src/gsparam.h">gsparam.h</a> for more details.
+
+<p>
+If a device has parameters other than the ones applicable to all devices
+(or, in the case of printer devices, all printer devices), it must provide
+<b><tt>get_params</tt></b> and <b><tt>put_params</tt></b> procedures. If
+your device has parameters beyond those of a straightforward display or
+printer, we strongly advise using the <b><tt>_get_params</tt></b> and
+<b><tt>_put_params</tt></b> procedures in an existing device (for example,
+<a href="../src/gdevcdj.c">gdevcdj.c</a> or <a
+href="../src/gdevbit.c">gdevbit.c</a>) as a model for your own code.
+
+<dl>
+<dt><b><tt>int (*get_params)(P2(gx_device&nbsp;*dev,
+gs_param_list&nbsp;*plist))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Read the parameters of the device into the parameter list at
+<b><tt>plist</tt></b>, using the <b><tt>param_write_*</tt></b>
+macros or procedures defined in <a href="../src/gsparam.h">gsparam.h</a>.
+</dl>
+
+<dl>
+<dt><b><tt>int (*get_hardware_params)(P2(gx_device&nbsp;*dev,
+gs_param_list&nbsp;*plist))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Read the hardware-related parameters of the device into the parameter
+list at plist. These are any parameters whose values are under control of
+external forces rather than the program -- for example, front panel
+switches, paper jam or tray empty sensors, etc. If a parameter involves
+significant delay or hardware action, the driver should only determine the
+value of the parameter if it is "requested" by the
+<b><tt>gs_param_list</tt></b> [<b><tt>param_requested</tt></b>(plist,
+<b><tt>key_name</tt></b>)]. This function may cause the asynchronous
+rendering pipeline (if enabled) to be drained, so it should be used
+sparingly.
+</dl>
+
+<dl>
+<dt><b><tt>int (*put_params)(P2(gx_device&nbsp;*dev,
+gs_param_list&nbsp;*plist))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Set the parameters of the device from the parameter list at
+<b><tt>plist</tt></b>, using the <b><tt>param_read_</tt></b>*
+macros/procedures defined in <a href="../src/gsparam.h">gsparam.h</a>. All
+<b><tt>put_params</tt></b> procedures must use a "two-phase commit"
+algorithm; see <a href="../src/gsparam.h">gsparam.h</a> for details.
+</dl>
+
+<h4><a name="Default_CRD_parameters"></a>Default color rendering
+dictionary (CRD) parameters</h4>
+
+<p>
+Drivers that want to provide one or more default CIE color rendering
+dictionaries (CRDs) can do so through <b><tt>get_params</tt></b>. To do
+this, they create the CRD in the usual way (normally using the
+<b><tt>gs_cie_render1_build</tt></b> and <b><tt>_initialize</tt></b>
+procedures defined in <a href="../src/gscrd.h">gscrd.h</a>), and then write
+it as a parameter using <b><tt>param_write_cie_render1</tt></b> defined in
+<a href="../src/gscrdp.h">gscrdp.h</a>. However, the TransformPQR procedure
+requires special handling. If the CRD uses a TransformPQR procedure
+different from the default (identity), the driver must do the following:
+
+<ul>
+<li>The TransformPQR element of the CRD must include a
+<b><tt>proc_name</tt></b>, and optionally <b><tt>proc_data</tt></b>. The
+<b><tt>proc_name</tt></b> is an arbitrary name chosen by the driver to
+designate the particular TransformPQR function. It must not be the same as
+any device parameter name; we strongly suggest it include the device name,
+for instance, "<b><tt>bitTPQRDefault</tt></b>".
+
+<li>For each such named TransformPQR procedure, the driver's
+<b><tt>get_param</tt></b> procedure must provide a parameter of the same
+name. The parameter value must be a string whose bytes are the actual
+procedure address.
+</ul>
+
+<p>
+For a complete example, see the <b><tt>bit_get_params</tt></b> procedure in
+<a href="../src/gdevbit.c">gdevbit.c</a>. Note that it is essential that
+the driver return the CRD or the procedure address only if specifically
+requested (<b><tt>param_requested(...)</tt></b> &gt; 0); otherwise, errors
+will occur.
+
+<h3><a name="External_fonts"></a>External fonts</h3>
+
+<p>
+Drivers may include the ability to display text. More precisely, they may
+supply a set of procedures that in turn implement some font and text
+handling capabilities, described in <a href="Xfonts.htm">a separate
+document</a>. The link between the two is the driver procedure that
+supplies the font and text procedures:
+
+<dl>
+<dt><b><tt>xfont_procs&nbsp;*(*get_xfont_procs)(P1(gx_device&nbsp;*dev))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Return a structure of procedures for handling external fonts and text
+display. A <b><tt>NULL</tt></b> value means that this driver doesn't
+provide this capability.
+</dl>
+
+<p>
+For technical reasons, a second procedure is also needed:
+
+<dl>
+<dt><b><tt>gx_device&nbsp;*(*get_xfont_device)(P1(gx_device&nbsp;*dev))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Return the device that implements <b><tt>get_xfont_procs</tt></b> in a
+non-default way for this device, if any. Except for certain special
+internal devices, this is always the device argument.
+</dl>
+
+<h3><a name="Page_devices"></a>Page devices</h3>
+
+<dl>
+<dt><b><tt>gx_device&nbsp;*(*get_page_device)(P1(gx_device&nbsp;*dev))</tt></b>
+<b><em>[OPTIONAL]</em></b>
+<dd>According to the Adobe specifications, some devices are "page devices"
+and some are not. This procedure returns <b><tt>NULL</tt></b> if the
+device is not a page device, or the device itself if it is a page device.
+In the case of forwarding devices, <b><tt>get_page_device</tt></b> returns
+the underlying page device (or <b><tt>NULL</tt></b> if the underlying
+device is not a page device).
+</dl>
+
+<h3><a name="Miscellaneous"></a>Miscellaneous</h3>
+
+<dl>
+<dt><b><tt>int (*get_band)(P3(gx_device&nbsp;*dev, int&nbsp;y,
+int&nbsp;*band_start))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>If the device is a band device, this procedure stores in
+<b><tt>*band_start</tt></b> the scan line (device Y coordinate) of the band
+that includes the given Y coordinate, and returns the number of scan lines
+in the band. If the device is not a band device, this procedure returns 0.
+The latter is the default implementation.
+</dl>
+
+<dl>
+<dt><b><tt>void (*get_clipping_box)(P2(gx_device&nbsp;*dev,
+gs_fixed_rect&nbsp;*pbox))</tt></b> <b><em>[OPTIONAL]</em></b>
+<dd>Stores in <b><tt>*pbox</tt></b> a rectangle that defines the device's
+clipping region. For all but a few specialized devices, this is
+<em>((0,0),(width,height))</em>.
+</dl>
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 2000 Aladdin Enterprises.
+All rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Fonts.htm b/Master/xemtex/doc/ghostscript/Fonts.htm
new file mode 100644
index 00000000000..add24f89d7f
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Fonts.htm
@@ -0,0 +1,1288 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Fonts and font facilities supplied with Ghostscript</title>
+<!-- $Id: Fonts.htm,v 1.22.2.13.2.6 2003/05/17 14:38:59 giles Exp $ -->
+<!-- Originally: fonts.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Fonts and font facilities supplied with Ghostscript</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#About">About Ghostscript fonts</a>
+<li><a href="#Free_fonts">Ghostscript's free fonts</a>
+<li><a href="#Other_fonts">Other free fonts</a>
+<ul>
+<li><a href="#Computer_Modern">Computer Modern Fontmap</a>
+<li><a href="#CID_Adobe">CJK CID-keyed fonts by Adobe</a>
+<li><a href="#CMap_Adobe">Adobe CMaps</a>
+<li><a href="#Chinese">Free Chinese (Hanzi) fonts</a>
+<li><a href="#Japanese">Free Japanese (Kanji) fonts</a>
+<li><a href="#Korean">Free Korean (Hangul and Hanja) fonts</a>
+<li><a href="#Cyrillic">Free Cyrillic fonts</a>
+<li><a href="#Partial_Unicode_fonts">(Partial) Unicode fonts</a>
+</ul>
+<li><a href="#Get_fonts">How Ghostscript gets fonts when it runs</a>
+<li><a href="#Platform_fonts">Platform fonts</a>
+<li><a href="#Add_fonts">Adding your own fonts</a>
+<ul>
+<li><a href="#Convert_BDF">Converting BDF fonts</a>
+</ul>
+<li><a href="#For_developers">For developers only</a>
+<ul>
+<li><a href="#Font_contents">Contents of fonts</a>
+<li><a href="#Precompiling">Precompiling fonts</a>
+<li><a href="#Short_identifiers">Precompiling fonts on platforms with identifier length limits</a>
+<li><a href="#Unique_IDs">Font names and unique IDs</a>
+<li><a href="#Codes">Codes used to make font file names</a>
+</ul>
+<li><a href="#Use_gs_fonts_with_X">Using Ghostscript fonts on X Windows displays</a>
+<ul>
+<li><a href="#Using_xset">Using <b><tt>xset</tt></b></a>
+<li><a href="#Font_permanent_installation">Permanent installation</a>
+<ul>
+<li><a href="#Configure_xfs">Configuring the <b><tt>xfs</tt></b> font server</a>
+<li><a href="#Configure_Xfree86">Xfree86 display servers</a>
+</ul>
+</ul>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="About"></a>About Ghostscript fonts</h2>
+
+<p>
+Ghostscript is distributed with two kinds of files related to fonts:
+
+<ul>
+<li>the fonts themselves in individual files, and
+<li>a file "<tt><b>Fontmap</b></tt>" that defines for
+Ghostscript which file represents which font.
+</ul>
+
+<p>
+Most of the font files supplied with Ghostscript have the extension
+<tt><b>.pfb</b></tt>, and a few have <tt><b>.pfa</b></tt> or
+<tt><b>.gsf</b></tt>. Each file defines one ordinary PostScript Type 1
+outline font which any PostScript language interpreter can use. Files with
+<tt><b>.pfa</b></tt> or <tt><b>.pfb</b></tt> extensions are also compatible
+with Adobe Type Manager (ATM) and with tools that don't include a full
+PostScript language interpreter; files with <tt><b>.gsf</b></tt> extension
+are incompatible with ATM and other tools. Ghostscript compiled with the
+"ttfont" option can also use TrueType fonts with the extension
+<tt><b>.ttf</b></tt>.
+
+<p><a name="Fontmap"></a>
+When Ghostscript needs a font, it must have some way to know where to look
+for it: that's the purpose of the <b><tt>Fontmap</tt></b> file, which
+associates the names of <em>fonts</em> such as <b><tt>/Times-Roman</tt></b>
+with the names of font <em>files</em>, such as
+<tt><b>n021003l.pfb</b></tt>. <b><tt>Fontmap</tt></b> can also create
+aliases for font names, so that for instance,
+<b><tt>/NimbusNo9L-Regu</tt></b> means the same font as
+<b><tt>/Times-Roman</tt></b>.
+
+<hr>
+
+<h2><a name="Free_fonts"></a>Ghostscript's free fonts</h2>
+
+<p>
+Two sets of free fonts are supplied for Ghostscript:
+
+<ul>
+<li>35 commercial-quality Type 1 basic PostScript fonts -- Times,
+Helvetica, Courier, Symbol, etc. -- contributed by URW++ Design and
+Development Incorporated, of Hamburg, Germany
+(<a href="http://www.urwpp.de/">http://www.urwpp.de/</a>). Fontmap names
+them all.
+
+<li>A miscellaneous set including Cyrillic, kana, and fonts derived from
+the free Hershey fonts, with improvements (such as adding accented
+characters) by Thomas Wolff. The Hershey-based fonts are quite different
+from traditional printer or display fonts; you can read about them in more
+detail in the <a href="Hershey.htm">documentation on Hershey fonts</a>.
+
+</ul>
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=7 bgcolor="#CCCC00"><hr><font size="+1">Font packages</font><hr>
+<tr> <td><b>System</b>
+ <td>&nbsp;&nbsp;
+ <td><b>File name</b>
+ <td>&nbsp;&nbsp;
+ <td><b>Contents</b>
+ <td>&nbsp;&nbsp;
+ <td><b>Types</b>
+<tr> <td colspan=7><hr>
+<tr valign=top> <td>Unix
+ <td>&nbsp;
+ <td><b><tt>gnu-gs-fonts-std-#.##.tar.gz</tt></b>
+ <td>&nbsp;
+ <td>Basic
+ <td>&nbsp;
+ <td><b><tt>.afm</tt></b>,
+ <b><tt>.pfb</tt></b>,<br><b><tt>.pfm</tt></b> <tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td><b><tt>gnu-gs-fonts-other-#.##.tar.gz</tt></b>
+ <td>&nbsp;
+ <td>Miscellaneous
+ <td>&nbsp;
+ <td><b><tt>.afm</tt></b>,
+ <b><tt>.gsf</tt></b>,<br><b><tt>.pfa</tt></b>, <b><tt>.pfm</tt></b>
+
+</table>
+</blockquote>
+
+<p>
+"#.##" and "###" are the version number with and without punctuation. The
+fonts are not updated every release, so just use the most recent
+versions.
+Fonts can be found at
+
+<blockquote>
+<a href="ftp://ftp.gnu.org/gnu/ghostscript/"
+class="offsite">ftp://ftp.gnu.org/gnu/ghostscript/</a> (and mirrors)<br>
+</blockquote>
+
+<hr>
+
+<h2><a name="Other_fonts"></a>Other free fonts</h2>
+
+<h3><a name="Computer_Modern"></a>Computer Modern Fontmap</h3>
+
+<p>
+Don Knuth's Computer Modern fonts are popular, free, and widely available.
+A Fontmap appropriate for these fonts is available from:
+
+<blockquote>
+<a
+href="ftp://tug.ctan.org/tex-archive/fonts/cm/ps-type1/contrib/Fontmap.cmr"
+class="offsite">
+ftp://tug.ctan.org/tex-archive/fonts/cm/ps-type1/contrib/Fontmap.cmr</a>
+</blockquote>
+
+<p>
+or from other <a href="New-user.htm#CTAN">CTAN</a> sites.
+
+<h3><a name="Chinese"></a>Free Chinese (Hanzi) fonts</h3>
+
+<p>
+A free PostScript font for Traditional Chinese "KaiSu" in
+<a href="CJK.htm#About_OCF_fonts">OCF</a> format,
+originally provided courtesy of Jackson Technology,
+Ltd., Taiwan under the GPL and now distributed by the Taiwan NeXT User
+Group, is available from:
+
+<blockquote>
+<a
+href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/hanzi/"
+class="offsite">
+ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/hanzi/
+</a>
+</blockquote>
+
+<h3><a name="Japanese"></a>Free Japanese (Kanji) fonts</h3>
+
+<p>
+Mr. Norio Katayama has done some work to make Ghostscript work well with
+Kanji fonts. An easy-to-install Kanji font for Ghostscript, with
+installation instructions, is at
+
+<blockquote>
+<a
+href="http://www.enel.ucalgary.ca/People/far/howto/gs-ttf.html"
+class="offsite">
+http://www.enel.ucalgary.ca/People/far/howto/gs-ttf.html
+</a>
+</blockquote>
+
+<p>
+The same site has patches to make Ghostscript work with Japanese OCF fonts via VFlib,
+with documentation in both English and Japanese:
+
+<blockquote>
+<a
+href="http://www.enel.ucalgary.ca/People/far/howto/gs-vflib.html"
+class="offsite">
+http://www.enel.ucalgary.ca/People/far/howto/gs-vflib.html
+</a>
+</blockquote>
+
+<p>
+Here are some other resources in Japanese relating to VFlib and using
+Ghostscript with Japanese OCF fonts:
+
+<blockquote><dl compact>
+<dt><a href="http://kakugawa.aial.hiroshima-u.ac.jp/~kakugawa/Hacks/"
+class="offsite">http://kakugawa.aial.hiroshima-u.ac.jp/~kakugawa/Hacks/</a>
+<dt><a href="http://itohws03.ee.noda.sut.ac.jp/~matsuda/VFlib-FT/"
+class="offsite">http://itohws03.ee.noda.sut.ac.jp/~matsuda/VFlib-FT/</a>
+<dd>Author &lt;<a href="mailto:matsuda@itohws01.ee.noda.sut.ac.jp">matsuda@itohws01.ee.noda.sut.ac.jp</a>&gt;
+</dl></blockquote>
+
+<h3><a name="Korean"></a>Free Korean (Hangul and Hanja) fonts</h3>
+
+<p>
+Hwan Design Inc. created Hangul TrueType fonts (including Hanja)
+and released under license similar to BSD.
+These fonts can be used as <a href="CJK.htm#About_CID_keyed_fonts">
+CID-keyed font</a> via on-the-fly CIDFontType2 conversion. Refer
+<a href="CJK.htm">CJK.htm</a>
+
+<blockquote>
+<a href="ftp://ftp.mizi.com/pub/baekmuk/"
+class="offsite">
+ftp://ftp.mizi.com/pub/baekmuk/</a>
+</blockquote>
+
+
+<h3><a name="Cyrillic"></a>Free Cyrillic fonts</h3>
+
+<p>
+N. Glonty and A. Samarin created in 1989 a Cyrillic extension of TeX's
+"Computer Modern" fonts, now freely available through the
+<a href="New-user.htm#CTAN">Comprehensive TeX Archive Network</a> (CTAN),
+for instance at
+
+<blockquote>
+<a
+href="ftp://ctan.tug.org/tex-archive/fonts/cyrillic/cmcyr/"
+class="offsite">
+ftp://ctan.tug.org/tex-archive/fonts/cyrillic/cmcyr/
+</a>
+</blockquote>
+
+<hr>
+
+<h3><a name="Partial_Unicode_fonts"></a>(Partial) Unicode fonts</h3>
+
+<p>
+George W. Wilson is distributing some free partial Unicode fonts he created.
+These fonts currently lack Arabic and CJK characters, but they include a
+very large subset of the remaining Unicode set. They are available in both
+Type 1 and TrueType formats. See
+
+<blockquote>
+<a href="http://bibliofile.mc.duke.edu/gww/fonts/Unicode.html"
+class="offsite">http://bibliofile.mc.duke.edu/gww/fonts/Unicode.html</a>
+</blockquote>
+
+<h2><a name="Get_fonts"></a>How Ghostscript gets fonts when it runs</h2>
+
+<p>
+Fonts occupy about 50KB each, so Ghostscript doesn't load them all
+automatically when it runs. Instead, as part of normal initialization
+Ghostscript runs a file <tt><b>gs_fonts.ps</b></tt>, which arranges to load
+fonts on demand using information from the font map. To preload all of the
+known fonts, invoke the procedure
+
+<blockquote><tt><b>
+loadallfonts
+</b></tt></blockquote>
+
+<p>
+The file <tt><b>prfont.ps</b></tt> contains code to print a sample page of
+a font. Load this program by including it in the <tt><b>gs</b></tt>
+command line or by invoking
+
+<blockquote><tt><b>
+(prfont.ps) run
+</b></tt></blockquote>
+
+<p>
+Then to produce a sampler of a particular font XYZ, invoke
+
+<blockquote><tt><b>
+/XYZ DoFont
+</b></tt></blockquote>
+
+<p>For example,
+
+<blockquote><tt><b>
+/Times-Roman DoFont
+</b></tt></blockquote>
+
+<p>
+For more information about how Ghostscript loads fonts during execution,
+see <a href="Use.htm#Font_lookup">here</a>.
+
+<hr>
+
+<h2><a name="Platform_fonts"></a>Platform fonts</h2>
+
+<p>
+Ghostscript displays text on screen using whatever font technology is
+provided by the system on which it runs, by calling the system's API to
+display text. On platforms with X Windows, this is X Windows; on MS
+Windows it may be TrueType or ATM; Ghostscript neither knows nor cares.
+
+<p>
+The PostScript language specifies that fonts are data structures with
+particular contents (for instance, they include a bounding box for the
+font, an Encoding vector to specify the character set, etc.), and it is
+common for PostScript files to use this fact; also, characters can be used
+as clipping regions, and can be arbitrarily algorithmically rotated,
+skewed, expanded or condensed, etc. Most of this information is available
+in some form from the underlying graphics system, but one crucial piece is
+not: the actual scalable outlines of the characters, which Ghostscript
+needs in order to implement both clipping with character shapes and
+arbitrarily transformed characters. Consequently
+
+<blockquote>
+Ghostscript needs the scalable outlines of any font mentioned in a
+document, and loads them from the disk (<tt><b>.pfa</b></tt>,
+<tt><b>.pfb</b></tt>, or <tt><b>.gsf</b></tt>
+file) in the usual way, even if it uses the platform's font machinery to
+display the characters. In other words, Ghostscript must still be able to
+find its font files.
+</blockquote>
+
+<p>
+To make matters worse, platforms use different names for their standard
+fonts. For example, the Times Roman font, for which PostScript files use
+the name "<b><tt>Times-Roman</tt></b>", may be known as
+"<b><tt>Times-Roman</tt></b>", "<b><tt>Times&nbsp;Roman</tt></b>",
+"<b><tt>Tms&nbsp;Rmn</tt></b>",
+"<b><tt>Times&nbsp;New&nbsp;Roman</tt></b>", or
+"<b><tt>TimesNewRoman</tt></b>". The name may even be completely
+different: the usual Helvetica-equivalent TrueType font is called
+"<b><tt>Arial</tt></b>". It is possible to deal with this situation by
+introducing aliases in Fontmap, but there are two reasons why Ghostscript
+does not currently do this:
+
+<ol>
+<li>Methods of naming in different systems are so unstandardized that there
+seems to be no small set of alternative names likely to cover most
+situations. All five of the names above for Times Roman have been seen
+under Windows and OS/2, depending on the version of the system, whether it
+uses TrueType or ATM, and other unknown factors.
+
+<li>Each alias takes up space at run time. If each of the standard fonts
+has three additional aliases, this might amount to 50KB of wasted space,
+which may be a lot on some smaller systems.
+</ol>
+
+<p>
+If you don't seem to be getting nice characters on the screen under MS
+Windows, you can try adding aliases to Fontmap, according to the
+documentation you'll find in there.
+
+<hr>
+
+<h2><a name="Add_fonts"></a>Adding your own fonts</h2>
+
+<p>
+Ghostscript can use any Type 0, 1, 3, 4, or 42 font acceptable to
+other PostScript language interpreters or to ATM, including MultiMaster
+fonts. Beginning with release 4.0, Ghostscript can also use TrueType fonts
+if it was compiled with the "ttfont" option.
+
+<p>
+To add fonts of your own, you must edit Fontmap to include at the end an
+entry for your new font; the format for entries is documented
+in Fontmap itself. Since later entries in Fontmap override earlier
+entries, a font you add at the end supersedes any corresponding fonts supplied
+with Ghostscript and defined earlier in the file.
+In the PC world, Type 1 fonts are customarily given names ending in
+<tt><b>.PFA</b></tt> or <tt><b>.PFB</b></tt>. Ghostscript can use these
+directly: you just need to make the entry in Fontmap.
+To add CID-keyed fonts, refer <a href="CJK.htm">CJK.htm</a>.
+
+<p>
+If you want to use with Ghostscript a commercial fonts
+(fonts sold as individual package,
+ Type 1 and CID fonts bundled to Adobe products,
+ TrueType fonts bundled to Microsoft Windows and Apple Macintosh, etc),
+please read carefully the license that accompanies the font to
+satisfy yourself that you may do so legally.
+
+The license of bundled fonts are usually quite varied:
+browsing-only, printable, and embeddable.
+The license of the system and the license of fonts on
+the system must be descriminated.
+Even if you have officially licensed system,
+it does not mean you can use bundled fonts as you want.
+In addition to, TrueType and OpenType format have internal
+flags to restrict embedding, but, unfortunately,
+sometimes they does not reflect the license
+correctly.
+You have to check the license of EACH fonts which you want to
+use with Ghostscript.
+
+We take no responsibility for any possible violations of such licenses.
+
+
+<h3><a name="Convert_BDF"></a>Converting BDF fonts</h3>
+
+<p>
+Ghostscript provides a way to construct a (low-quality) Type 1 font from a
+bitmap font in the BDF format popular in the Unix world. The shell script
+<tt><b>bdftops</b></tt> (Unix) or the command file
+<tt><b>bdftops.bat</b></tt> (DOS) converts a BDF file to a
+scalable outline using <tt><b>bdftops.ps</b></tt> . Run the
+shell command
+
+<blockquote><tt><b>
+bdftops&nbsp;BDF_filename&nbsp;[AFM_file1_name&nbsp;...]&nbsp;gsf_filename&nbsp;fontname<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UniqueID&nbsp;[XUID]&nbsp;[encodingname]
+</b></tt></blockquote>
+
+<p>
+The arguments have these meanings:
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <td><tt><b>BDF_filename</b></tt>
+ <td>&nbsp;&nbsp;
+ <td>Input bitmap file in BDF format
+ <td>&nbsp;&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td><tt><b>AFM_file1_name</b></tt>
+ <td>&nbsp;
+ <td>AFM files giving metrics
+ <td>&nbsp;
+ <td>(Optional)
+<tr valign=top> <td><tt><b>gsf_filename</b></tt>
+ <td>&nbsp;
+ <td>Output file
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td><tt><b>fontname</b></tt>
+ <td>&nbsp;
+ <td>Name of the font
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td><tt><b>UniqueID</b></tt>
+ <td>&nbsp;
+ <td>UniqueID (<a href="#Unique_IDs">as described below</a>)
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td><tt><b>XUID</b></tt>
+ <td>&nbsp;
+ <td>XUID, in the form <tt><b>n1.n2.n3...</b></tt> (<a href="#Unique_IDs">as described below</a>)
+ <td>&nbsp;
+ <td>(Optional)
+<tr valign=top> <td><tt><b>encodingname</b></tt>
+ <td>&nbsp;
+ <td>"StandardEncoding" (the default), "ISOLatin1Encoding",<br>"SymbolEncoding", "DingbatsEncoding"
+ <td>&nbsp;
+ <td>(Optional)
+</table></blockquote>
+
+<p>
+For instance
+
+<blockquote><tt><b>
+bdftops&nbsp;pzdr.bdf&nbsp;ZapfDingbats.afm&nbsp;pzdr.gsf&nbsp;ZapfDingbats&nbsp;4100000&nbsp;1000000.1.41
+</b></tt></blockquote>
+
+<p>
+Then make an entry in Fontmap for the <tt><b>.gsf</b></tt>
+file (<tt><b>pzdr.gsf</b></tt> in the example) as
+<a href="#Add_fonts">described above</a>.
+
+<hr>
+
+<h2><a name="For_developers"></a>For developers only</h2>
+
+<p>
+The rest of this document is very unlikely to be of value to ordinary
+users.
+
+<h3><a name="Font_contents"></a>Contents of fonts</h3>
+
+<p>
+As noted above, Ghostscript accepts fonts in the same formats as PostScript
+interpreters. Type 0, 1, and 3 fonts are documented in the PostScript
+Language Reference Manual (Second Edition); detailed documentation for Type
+1 fonts appears in a separate Adobe book. Type 2 (compressed format) fonts
+are documented in separate Adobe publications. Type 4 fonts are not
+documented anywhere; they are essentially Type 1 fonts with a BuildChar or
+BuildGlyph procedure. Types 9, 10, and 11 (CIDFontType 0, 1, and 2) and
+Type 32 (downloaded bitmap) fonts are documented in Adobe supplements.
+Type 42 (encapsulated TrueType) fonts are documented in an Adobe
+supplement; the TrueType format is documented in publications available
+from Apple and Microsoft. Ghostscript does not support Type 14 (Chameleon)
+fonts, which use a proprietary Adobe format.
+
+<h3><a name="Precompiling"></a>Precompiling fonts</h3>
+
+<p>
+You can precompile -- convert -- any Type 1 font into C, then compile and
+build it into the Ghostscript executable. (Type 1 fonts include any font
+whose name ends with <tt><b>.pfa</b></tt> or
+<tt><b>.pfb</b></tt>, and it also includes all the
+Ghostscript <tt><b>.gsf</b></tt> fonts except the Hershey
+fonts.) This has no effect on rendering speed, but it eliminates the time
+to load the font dynamically, which may make a big improvement in total
+rendering time, especially for multi-page documents. It also reduces the
+number of auxiliary files required at run time. Fonts precompiled and
+built into Ghostscript this way need not appear in Fontmap, although if
+they do appear there, no harm is done.
+
+<p><a name="font2c"></a> The utility for precompiling fonts is named
+<tt><b>font2c</b></tt>. Note that since
+<tt><b>font2c</b></tt> uses the PostScript language program
+<tt><b>font2c.ps</b></tt>, Ghostscript must already be
+available to run it, and Fontmap must contain entries for the fonts you
+want to compile. For example, to precompile the Times-Italic font,
+
+<blockquote><tt><b>
+font2c Times-Italic ptmri.c
+</b></tt></blockquote>
+
+<p>
+The first argument ("<b><tt>Times-Italic</tt></b>" above) is the font's
+name and the second ("<b><tt>ptmri.c</tt></b>") is the name of the
+resulting C file. You can use any file name you want, as long as it ends
+in "<tt><b>.c</b></tt>". It needn't be limited to eight characters unless
+your operating system requires this. If "<b><tt>XYZ.gsf</tt></b>" or
+"<b><tt>XYZ.pfa</tt></b>" is the font file's name in Fontmap,
+"<b><tt>XYZ.c</tt></b>" is a good choice for the C file.
+
+<p>
+Under VMS, or other systems whose the C compilers limit the length of
+identifiers, you must do something slightly more complicated; for that see
+the section on <a href="#Short_identifiers">short identifiers in C</a>. On
+VMS also, you must quote the font name ("{font name}") to preserve the
+name's mixed upper and lower case. For VMS environments in general see
+<a href="Make.htm#VMS">the VMS directions</a> in the documentation on
+building Ghostscript, and ignore the rest of this section.
+
+<p>
+Note that fonts are not supplied with Ghostscript in precompiled form, since
+those files are quite large and can easily be recreated using <a
+href="#font2c"><tt><b>font2c</b></tt></a>. There is a makefile target to
+run <tt><b>font2c</b></tt> on all the fonts supplied with Ghostscript.
+Invoke it with
+
+<blockquote><b><tt>
+make fonts_standard_c
+</tt></b></blockquote>
+
+<p>Besides running <tt><b>font2c</b></tt>, you must compile the fonts and
+link them into the executable. To do this, add the compiled fonts feature
+to your platform-specific makefile. See the
+<a href="Make.htm#Makefile_overview">overview of makefiles</a> in the
+documentation on building Ghostscript for the list of makefiles for each
+platform. Find the definition of the <tt><b>FEATURE_DEVS</b></tt> macro in
+the makefile, which looks something like this:
+
+<blockquote><tt><b>
+FEATURE_DEVS=$(PSD)psl3.dev&nbsp;$(PSD)pdf.dev&nbsp;$(PSD)dpsnext.dev&nbsp;$(PSD)pipe.dev
+</b></tt></blockquote>
+
+<p>
+and add "ccfonts.dev":
+
+<blockquote><tt><b>
+FEATURE_DEVS=$(PSD)psl3.dev&nbsp;$(PSD)pdf.dev&nbsp;$(PSD)dpsnext.dev&nbsp;$(PSD)pipe.dev&nbsp;$(PSD)ccfonts.dev
+</b></tt></blockquote>
+
+<p>
+Next you must add the specific fonts to <tt><b>int.mak</b></tt>, the
+platform-independent makefile for the interpreter. This makefile already
+has rules for the standard fonts supplied with Ghostscript, so if you just
+want to compile the standard fonts, you needn't do anything else. Now we
+describe how to compile other fonts into the executable, such as the Utopia
+or Kana fonts, or your own fonts.
+
+<p>
+Suppose you want to compile the Kana fonts into the executable. First pick
+one of <b><tt>ccfonts10</tt></b> through <b><tt>ccfonts15</tt></b> as the
+place you will do this, say <b><tt>ccfonts10</tt></b>. Add your compiled
+font file names, for instance
+
+<blockquote><tt><b>
+ccfonts10_=$(CFOBJ)fhirw.$(OBJ)
+</b></tt></blockquote>
+
+<p>
+(Note the underscore "_".) If this makes the line too long, use another
+line of the same form, for instance,
+
+<blockquote><tt><b>
+ccfonts11_=$(CFOBJ)fkarw.$(OBJ)
+</b></tt></blockquote>
+
+<p>
+Just below the <b><tt>ccfonts10_=</tt></b> line is a line
+
+<blockquote><tt><b>
+ccfonts10=
+</b></tt></blockquote>
+
+<p>
+(Note no underscore.) Add your own fonts to the end of this line, replacing
+dashes ("-") with underscores ("_") in the font names. For instance:
+
+<blockquote><tt><b>
+ccfonts10=Calligraphic_Hiragana
+</b></tt></blockquote>
+
+<p>
+Again, if a line becomes too long, add another line of the same form, for
+instance,
+
+<blockquote><tt><b>
+ccfonts10=Calligraphic_Hiragana<br>
+ccfonts11=Calligraphic_Katakana
+</b></tt></blockquote>
+
+<p>
+After all the lines of this form, add a pair of lines to compile each font,
+separating these entries from the "ccfonts*" lines and from each other with
+a blank line. In our example this becomes
+
+<blockquote>
+<pre>$(CFOBJ)fhirw.$(OBJ): $(CFGEN)fhirw.c $(CCFONT)
+ $(CFCC) $(CFO_)fhirw.$(OBJ) $(C_) $(CFGEN)fhirw.c
+
+$(CFOBJ)fkarw.$(OBJ): $(CFGEN)fkarw.c $(CCFONT)
+ $(CFCC) $(CFO_)fkarw.$(OBJ) $(C_) $(CFGEN)fkarw.c
+</pre></blockquote>
+
+<p>
+Finally, run <tt><b>make</b></tt> to build an executable that includes the
+fonts you added. They are present in <b><tt>FontDirectory</tt></b> when
+Ghostscript starts up.
+
+<h3><a name="Short_identifiers"></a>Precompiling fonts on platforms with identifier length limits</h3>
+
+<p>
+On some platforms the C compiler or linker limits the number of significant
+characters usable in an identifier. On such platforms, you must do a
+little extra work.
+
+<p>
+Let <em><b>N</b></em> be the maximum number of significant characters in an
+identifier (typically 31). For each font whose name is longer than
+<em><b>N</b></em>-5 characters, pick an arbitrary identifier that we will
+call the "short name". This can be any string you want, as long as it
+contains only letters, digits, and underscores; is no longer than
+<em><b>N</b></em>-5 characters; and is different from all other font names
+and short names. A good choice for this is the name of the C file. There
+is no harm in doing this for fonts with names shorter than
+<em><b>N</b></em>-5 characters, but it's unnecessary.
+
+<p>
+You must do two different things for fonts that require a short name.
+
+<ol>
+<li>You must supply the short name as a third argument to
+<tt><b>font2c</b></tt>. For example, to compile
+<b><tt>NewCenturySchlbk-BoldItalic</tt></b> using the short name
+<b><tt>pncbi</tt></b>,
+
+<blockquote><tt><b>
+font2c&nbsp;NewCenturySchlbk-BoldItalic&nbsp;pncbi.c&nbsp;pncbi
+</b></tt></blockquote>
+
+<li>
+Then when you add the font name to the definition of one of the ccfonts*
+macros in the makefile, use the short name, not the actual font name, for
+instance,
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr> <td>Use
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <td><tt><b>ccfonts12=pncbi</b></tt>
+<tr> <td>Rather than
+ <td>&nbsp;
+ <td><tt><b>ccfonts12=NewCenturySchlbk_BoldItalic</b></tt>
+</table></blockquote>
+</ol>
+
+<p>
+Everything else is as described above. This procedure doesn't change the
+name of the font in Fontmap or as seen from within Ghostscript; it just
+works around a limitation of some older compilers.
+
+<hr>
+
+<h3><a name="Unique_IDs"></a>Font names and unique IDs</h3>
+
+<p>
+If you create your own fonts and will use them only within your own
+organization, you should use <tt><b>UniqueID</b></tt> values between
+4000000 and 4999999, coded like this (see the <a href="#Codes">tables of
+codes</a> for font file names below):
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Coding of UniqueID "<tt><b>4TTWVE0</b></tt>"</font><hr>
+<tr> <td><tt><b>TT</b></tt>
+ <td>&nbsp;&nbsp;
+ <td><a href="#Typeface">Typeface</a>
+ <td>&nbsp;&nbsp;
+ <td>two-digit identifier
+<tr> <td><tt><b>W</b></tt>
+ <td>&nbsp;
+ <td><a href="#Weight">Weight</a>
+ <td>&nbsp;
+ <td>normal, bold, etc.
+<tr> <td><tt><b>V</b></tt>
+ <td>&nbsp;
+ <td><a href="#Variant">Variant</a>
+ <td>&nbsp;
+ <td>normal, italic, etc.
+<tr> <td><tt><b>E</b></tt>
+ <td>&nbsp;
+ <td><a href="#Expansion">Expansion</a>
+ <td>&nbsp;
+ <td>normal, condensed, etc.
+</table></blockquote>
+
+<p>
+This scheme will not work forever: as soon there are more than 99
+typefaces, or more than 9 weights or variants, we will have to do something
+else. But it suffices for the near future.
+
+<p>
+If you plan to distribute fonts, ask Adobe to assign you some UniqueIDs and
+also an <tt><b>XUID</b></tt> for your organization. Contact
+
+<blockquote><address>
+Unique ID Coordinator<br>
+Adobe Developers Association<br>
+Adobe Systems, Inc.<br>
+345 Park Avenue<br>
+San Jose, CA 95110-2704<br>
++1-408-536-9000 telephone (ADA)<br>
++1-408-536-6883 fax<br>
+<a href="mailto:fontdev-person@adobe.com">fontdev-person@adobe.com</a><br>
+</address></blockquote>
+
+<p>
+The XUID is a Level 2 PostScript feature that serves the same function as
+the UniqueID, but is not limited to a single 24-bit integer. The
+<tt><b>bdftops</b></tt> program creates XUIDs of the form
+"<tt><b>[-X-&nbsp;0&nbsp;-U-]</b></tt>" where "<tt><b>-X-</b></tt>" is the
+organization XUID and "<tt><b>-U-</b></tt>" is the UniqueID. (Aladdin
+Enterprises' organization XUID, which appears in a few places in various
+font-related files distributed with Ghostscript, is 107; do not use this for
+your own fonts that you distribute.)
+
+<p>
+Because Ghostscript runs on many different systems, including DOS, the
+names of font files can be no longer than 8 characters. We therefore
+construct a font's filename <tt><b>FTTWVVVE.gsf</b></tt>
+similarly to the construction for temporary UniqueIDs.
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Coding of font file name "<tt><b>FTTWVVVE.gsf</b></tt>"</font><hr>
+<tr> <td><tt><b>F</b></tt>
+ <td>&nbsp;&nbsp;
+ <td><a href="#Foundries">Foundry</a>
+ <td>&nbsp;&nbsp;
+ <td>&nbsp;
+<tr> <td><tt><b>TT</b></tt>
+ <td>&nbsp;
+ <td><a href="#Typeface">Typeface</a>
+ <td>&nbsp;
+ <td>two-digit identifier
+<tr> <td><tt><b>W</b></tt>
+ <td>&nbsp;
+ <td><a href="#Weight">Weight</a>
+ <td>&nbsp;
+ <td>normal, bold, etc.
+<tr> <td><tt><b>V</b></tt>
+ <td>&nbsp;
+ <td><a href="#Variant">Variant</a>
+ <td>&nbsp;
+ <td>normal, italic, etc.
+<tr> <td><tt><b>E</b></tt>
+ <td>&nbsp;
+ <td><a href="#Expansion">Expansion</a>
+ <td>&nbsp;
+ <td>normal, condensed, etc.
+</table></blockquote>
+
+<p>
+Since a font can have multiple variants (for example, Lucida Regular Sans
+Typewriter Italic) we allocate three letters to that; if a font has four
+variants, you're on your own. If a font does have multiple variants, it's
+best to add the expansion letter "<b><tt>r</tt></b>" to make clear which
+letters are variants and which the expansion. This scheme is very close to
+the one proposed in "Filenames for fonts", published in the first 1990
+issue of <em>TUGboat</em> (the journal of the TeX Users Group).
+
+<h3><a name="Codes"></a>Codes used to make font file names</h3>
+
+<p>
+In the following tables we make no attempt to be exhaustive: instead we
+have simply allocated entries for those things that we needed for the fonts
+that we are actually distributing.
+
+<p>
+<a name="Foundries"></a>
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Font foundry codes</font><hr>
+<tr> <th>ID
+ <th>&nbsp;&nbsp;
+ <th align=left>Foundry
+<tr> <td colspan=3><hr>
+<tr> <td><tt><b>b</b></tt>
+ <td>&nbsp;&nbsp;
+ <td>Bitstream
+<tr> <td><tt><b>f</b></tt>
+ <td>&nbsp;
+ <td>Freely distributable and public-domain
+<tr> <td><tt><b>hr</b></tt>
+ <td>&nbsp;
+ <td>Hershey
+<tr> <td><tt><b>n</b></tt>
+ <td>&nbsp;
+ <td>IBM
+<tr> <td><tt><b>p</b></tt>
+ <td>&nbsp;
+ <td>Adobe ("p" for PostScript)
+<tr> <td><tt><b>u</b></tt>
+ <td>&nbsp;
+ <td>URW[++]
+</table></blockquote>
+
+<p>
+<a name="Typeface"></a>
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=7 bgcolor="#CCCC00"><hr><font size="+1">Typeface codes</font><hr>
+<tr valign=bottom> <th>ID
+ <td>&nbsp;&nbsp;
+ <th align=left>Name
+ <td>&nbsp;&nbsp;
+ <th align=left>Filename<br>prefix
+ <td>&nbsp;&nbsp;
+ <th align=left>Source
+<tr> <td colspan=7><hr>
+<tr> <td><tt><b>08</b></tt>
+ <td>&nbsp;
+ <td>Avant Garde
+ <td>&nbsp;
+ <td><tt><b>pag</b></tt>
+ <td>&nbsp;
+ <td>Adobe
+<tr> <td><tt><b>11</b></tt>
+ <td>&nbsp;
+ <td>Bookman
+ <td>&nbsp;
+ <td><tt><b>pbk</b></tt>
+ <td>&nbsp;
+ <td>Adobe
+<tr> <td><tt><b>01</b></tt>
+ <td>&nbsp;
+ <td>CharterBT
+ <td>&nbsp;
+ <td><tt><b>bch</b></tt>
+ <td>&nbsp;
+ <td>Bitstream
+<tr> <td><tt><b>02</b></tt>
+ <td>&nbsp;
+ <td>Courier
+ <td>&nbsp;
+ <td><tt><b>ncr</b></tt>
+ <td>&nbsp;
+ <td>IBM
+<tr> <td><tt><b>03</b></tt>
+ <td>&nbsp;
+ <td>Helvetica
+ <td>&nbsp;
+ <td><tt><b>phv</b></tt>
+ <td>&nbsp;
+ <td>Adobe
+<tr> <td><tt><b>04</b></tt>
+ <td>&nbsp;
+ <td>New Century Schoolbook
+ <td>&nbsp;
+ <td><tt><b>pnc</b></tt>
+ <td>&nbsp;
+ <td>Adobe
+<tr> <td><tt><b>09</b></tt>
+ <td>&nbsp;
+ <td>Palatino
+ <td>&nbsp;
+ <td><tt><b>ppl</b></tt>
+ <td>&nbsp;
+ <td>Adobe
+<tr> <td><tt><b>05</b></tt>
+ <td>&nbsp;
+ <td>Symbol
+ <td>&nbsp;
+ <td><tt><b>psy</b></tt>
+ <td>&nbsp;
+ <td>Adobe
+<tr> <td><tt><b>06</b></tt>
+ <td>&nbsp;
+ <td>Times
+ <td>&nbsp;
+ <td><tt><b>ptm</b></tt>
+ <td>&nbsp;
+ <td>Adobe
+<tr> <td>--
+ <td>&nbsp;
+ <td>Utopia
+ <td>&nbsp;
+ <td><tt><b>put</b></tt>
+ <td>&nbsp;
+ <td>Adobe
+<tr> <td><tt><b>07</b></tt>
+ <td>&nbsp;
+ <td>Zapf Chancery
+ <td>&nbsp;
+ <td><tt><b>zc</b></tt>
+ <td>&nbsp;
+ <td>public domain
+<tr> <td><tt><b>10</b></tt>
+ <td>&nbsp;
+ <td>Zapf Dingbats
+ <td>&nbsp;
+ <td><tt><b>pzd</b></tt>
+ <td>&nbsp;
+ <td>Adobe
+<tr> <td><tt><b>12</b></tt>
+ <td>&nbsp;
+ <td>public domain Cyrillic
+ <td>&nbsp;
+ <td><tt><b>fcy</b></tt>
+ <td>&nbsp;
+ <td>public domain
+<tr> <td><tt><b>13</b></tt>
+ <td>&nbsp;
+ <td>Kevin Hartig Hiragana
+ <td>&nbsp;
+ <td><tt><b>fhi</b></tt>
+ <td>&nbsp;
+ <td>shareware
+<tr> <td><tt><b>14</b></tt>
+ <td>&nbsp;
+ <td>Kevin Hartig Katakana
+ <td>&nbsp;
+ <td><tt><b>fka</b></tt>
+ <td>&nbsp;
+ <td>shareware
+<tr> <td><tt><b>90</b></tt>
+ <td>&nbsp;
+ <td>Hershey Gothic English
+ <td>&nbsp;
+ <td><tt><b>hrge</b></tt>
+ <td>&nbsp;
+ <td>freeware
+<tr> <td><tt><b>91</b></tt>
+ <td>&nbsp;
+ <td>Hershey Gothic Italian
+ <td>&nbsp;
+ <td><tt><b>hrit</b></tt>
+ <td>&nbsp;
+ <td>freeware
+<tr> <td><tt><b>92</b></tt>
+ <td>&nbsp;
+ <td>Hershey Gothic German
+ <td>&nbsp;
+ <td><tt><b>hrgr</b></tt>
+ <td>&nbsp;
+ <td>freeware
+<tr> <td><tt><b>93</b></tt>
+ <td>&nbsp;
+ <td>Hershey Greek
+ <td>&nbsp;
+ <td><tt><b>hrgk</b></tt>
+ <td>&nbsp;
+ <td>freeware
+<tr> <td><tt><b>94</b></tt>
+ <td>&nbsp;
+ <td>Hershey Plain
+ <td>&nbsp;
+ <td><tt><b>hrpl</b></tt>
+ <td>&nbsp;
+ <td>freeware
+<tr> <td><tt><b>95</b></tt>
+ <td>&nbsp;
+ <td>Hershey Script
+ <td>&nbsp;
+ <td><tt><b>hrsc</b></tt>
+ <td>&nbsp;
+ <td>freeware
+<tr> <td><tt><b>96</b></tt>
+ <td>&nbsp;
+ <td>Hershey Symbol
+ <td>&nbsp;
+ <td><tt><b>hrsy</b></tt>
+ <td>&nbsp;
+ <td>freeware
+</table></blockquote>
+
+<p>
+<a name="Weight"></a>
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Font weight codes</font><hr>
+<tr> <th>ID
+ <td>&nbsp;&nbsp;
+ <th align=left>Type
+ <td>&nbsp;&nbsp;
+ <th align=left>Filename
+<tr> <td colspan=5><hr>
+<tr> <td><tt><b>0</b></tt>
+ <td>&nbsp;&nbsp;
+ <td>normal
+ <td>&nbsp;&nbsp;
+ <td><tt><b>r</b></tt>
+<tr> <td><tt><b>1</b></tt>
+ <td>&nbsp;
+ <td>bold
+ <td>&nbsp;
+ <td><tt><b>b</b></tt>
+<tr> <td><tt><b>2</b></tt>
+ <td>&nbsp;
+ <td>book
+ <td>&nbsp;
+ <td><tt><b>k</b></tt>
+<tr> <td><tt><b>3</b></tt>
+ <td>&nbsp;
+ <td>demi
+ <td>&nbsp;
+ <td><tt><b>d</b></tt>
+<tr> <td><tt><b>4</b></tt>
+ <td>&nbsp;
+ <td>light
+ <td>&nbsp;
+ <td><tt><b>l</b></tt>
+<tr> <td>&nbsp;
+<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1"><a name="Variant"></a>Font variants</font><hr>
+<tr> <th>ID
+ <td>&nbsp;&nbsp;
+ <th align=left>Type
+ <td>&nbsp;&nbsp;
+ <th align=left>Filename
+<tr> <td colspan=5><hr>
+<tr> <td><tt><b>0</b></tt>
+ <td>&nbsp;&nbsp;
+ <td>normal
+ <td>&nbsp;&nbsp;
+ <td><tt><b>r</b></tt> (omitted when weight is normal)
+<tr> <td><tt><b>1</b></tt>
+ <td>&nbsp;
+ <td>italic
+ <td>&nbsp;
+ <td><tt><b>i</b></tt>
+<tr> <td><tt><b>2</b></tt>
+ <td>&nbsp;
+ <td>oblique
+ <td>&nbsp;
+ <td><tt><b>o</b></tt>
+<tr valign=top> <td><tt><b>3</b></tt>
+ <td>&nbsp;
+ <td>script, handwritten, swash
+ <td>&nbsp;
+ <td><tt><b>w</b></tt>
+<tr> <td>&nbsp;
+<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1"><a name="Expansion"></a>Expansion</font><hr>
+<tr> <th>ID
+ <td>&nbsp;&nbsp;
+ <th align=left>Type
+ <td>&nbsp;&nbsp;
+ <th align=left>Filename
+<tr> <td colspan=5><hr>
+<tr> <td><tt><b>0</b></tt>
+ <td>&nbsp;&nbsp;
+ <td>normal
+ <td>&nbsp;&nbsp;
+ <td><tt><b>r</b></tt> (omitted when weight and variant are normal)
+<tr> <td><tt><b>1</b></tt>
+ <td>&nbsp;
+ <td>narrow
+ <td>&nbsp;
+ <td><tt><b>n</b></tt>
+</table></blockquote>
+
+<hr>
+
+<h2><a name="Use_gs_fonts_with_X"></a>Using Ghostscript fonts on X Windows displays</h2>
+
+<p>
+The standard X11 distribution can display various kinds of fonts, including
+the Adobe Type 1 format, so font files distributed with Ghostscript can be
+used on X Windows displays. Beginning with Ghostscript version 6.0, the
+font archive contains the directory files needed to map Ghostscript's font
+files to XLFDs. Those files are named "<b><tt>fonts.dir</tt></b>" and
+"<b><tt>fonts.scale</tt></b>". There are two main methods to configure
+your display to use these files.
+
+<ul>
+<li><a href="#Using_xset">With <b><tt>xset</tt></b></a> any user can add a
+new directory to the font search path for the duration of a session.
+<li>An administrator with root access can <a
+href="#Font_permanent_installation">add the Ghostscript font directory
+permanently</a> to the <a href="#X_font_catalog">X font server's
+catalog</a> or to an <a href="#Xfree86_fontpath">X display server's list of
+directories</a>.
+</ul>
+
+<h3><a name="Using_xset"></a>Using <b><tt>xset</tt></b></h3>
+
+<p>
+Users without root access can add the Ghostscript font directories to the
+font search path using <b><tt>xset</tt></b>. Such a setting is transient
+and must be repeated each time the display server is reset or restarted,
+typically at login, so the call to <b><tt>xset</tt></b> should be added to
+the user's "<b><tt>.xsession</tt></b>" or "<b><tt>.xinitrc</tt></b>"
+startup script to make the fonts available at each login.
+
+<p>
+To add a new font directory, invoke <b><tt>xset</tt></b> like this:
+
+<blockquote>
+<b><tt>xset fp+</tt> <em>{directory}</em></b>
+</blockquote>
+
+<p>
+where <b><em>{directory}</em></b> is the full pathname to the directory
+containing the fonts on the host running the X display server. For common
+Ghostscript installations the path is
+
+<blockquote>
+<b><tt>/usr/local/Ghostscript/share/fonts</tt></b>
+</blockquote>
+
+<h3><a name="Font_permanent_installation"></a>Permanent installation</h3>
+
+<p> A system administrator, or anyone with the necessary root privilege,
+can make Ghostscript's fonts permanently available to the managed X display
+servers. This setup depends on the servers and the methods used
+to make the fonts available.
+
+<h4><a name="Configure_xfs"></a>Configuring the <b><tt>xfs</tt></b> font server</h4>
+
+<p>
+An X display server can obtain its font resources from a dedicated X font
+server. <b><tt>xfs</tt></b> is a prototype font server included in the X
+Consortium X11 distribution. It is configured with a file located in a
+directory whose exact location is installation-dependent and could be any
+of
+
+<blockquote><b><tt>
+/usr/lib/X11/fs/config
+<br>/usr/X11/lib/X11/fs/config
+<br>/usr/X11R6/lib/X11/fs/config
+</tt></b></blockquote>
+
+<p>
+or some similar name. You can also use <b><tt>xfs</tt></b>'s
+"<b><tt>-config</tt></b>" command-line option to specify the location of
+the configuration file.
+
+<p><a name="X_font_catalog"></a>
+The configuration file designates a list ("catalog") of directories, each
+of which contains fonts and a font mapping database (the file
+"<b><tt>fonts.dir</tt></b>"). This list is specified with the
+"<b><tt>catalogue=</tt></b>" keyword followed by a list of absolute
+directory paths separated by commas. To add the Ghostscript directory,
+include its full name in the catalog list, for example:
+
+<blockquote><b><tt>
+catalogue&nbsp;=&nbsp;/usr/local/share/Ghostscript/fonts/,
+<br>/usr/X11R6/lib/X11/fonts/misc/,
+<br>/usr/X11R6/lib/X11/fonts/Speedo/,
+<br>/usr/X11R6/lib/X11/fonts/Type1/,
+<br>/usr/X11R6/lib/X11/fonts/75dpi/,
+<br>/usr/X11R6/lib/X11/fonts/100dpi/
+</tt></b></blockquote>
+
+<p>
+The fonts are searched in the order the directories are specified, so an
+XLFD mapped by the Ghostscript directory could shadow a previous similar
+description specified in the following directories. Once the file is
+modified, instruct the font server to reload the configuration file by
+sending it the USR1 signal:
+
+<blockquote>
+<b><tt>kill -HUP</tt> <em>{pid}</em></b>
+</blockquote>
+
+<p>
+where <b><em>{pid}</em></b> is the font server process's numeric process
+ID, as obtained with the "<b><tt>ps</tt></b>" command. Be sure to check
+that the server is still alive after signaling it: it is very picky and
+could decide to shut itself down if something is wrong in the new
+configuration. If this happens, restart the server by hand and try to
+figure out from its output what's happening. If the font server dies,
+display servers using it will experience problems, so be sure to send the
+signal from the console or from a display not using that font server!
+
+<h4><a name="Configure_Xfree86"></a>Xfree86 display servers</h4>
+
+<p><a name="Xfree86_fontpath"></a>
+With the family of Xfree86 display servers, adding a new font directory
+permanently requires editing the "<b><tt>/etc/XF86Config</tt></b>" setup
+file to add a new "<b><tt>FontPath</tt></b>" to the "<b><tt>Files</tt></b>"
+section:
+
+<blockquote>
+<b><tt>Section "Files"
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RgbPath&nbsp;&nbsp;&nbsp;&nbsp;"/usr/X11R6/lib/X11/rgb"
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FontPath&nbsp;&nbsp;&nbsp;"/usr/local/share/Ghostscript/fonts"
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FontPath&nbsp;&nbsp;&nbsp;"/usr/X11R6/lib/X11/fonts/misc:unscaled"
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FontPath&nbsp;&nbsp;&nbsp;"/usr/X11R6/lib/X11/fonts/75dpi:unscaled"
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FontPath&nbsp;&nbsp;&nbsp;"/usr/X11R6/lib/X11/fonts/100dpi:unscaled"
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FontPath&nbsp;&nbsp;&nbsp;"/usr/X11R6/lib/X11/fonts/Type1"
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FontPath&nbsp;&nbsp;&nbsp;"/usr/X11R6/lib/X11/fonts/Speedo"
+<br>EndSection</tt></b>
+</blockquote>
+
+<p>
+The fonts are searched in the order the directories are specified, so an
+XLFD mapped by the Ghostscript directory could shadow a previous similar
+description specified in the following directories. Once this global
+configuration is edited, the new fonts become available to all Xfree86
+servers in use on that host. If a server is running, it must be restarted
+to take effect: just quit the current session in the usual way. If the
+server is under the control of <b><tt>xdm</tt></b>, you may have to kill
+it, because it is usually reset only between successive sessions.
+
+<p>
+This section by Bertrand Petit
+&lt;<a href="mailto:eegs@phoe.frmug.org">eegs@phoe.frmug.org</a>&gt;
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 1997, 1998, 1999, 2000 Aladdin
+Enterprises. All rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Helpers.htm b/Master/xemtex/doc/ghostscript/Helpers.htm
new file mode 100644
index 00000000000..993388cfbde
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Helpers.htm
@@ -0,0 +1,303 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>People who have helped with Ghostscript</title>
+<!-- $Id: Helpers.htm,v 1.17.2.11.2.5 2003/05/17 14:38:59 giles Exp $ -->
+<!-- Originally: helpers.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>People who have helped with Ghostscript</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<p>
+Many people have contributed to the development of Ghostscript. In the
+<a href="New-user.htm#Acknowledgments">new-user documentation</a> we give special thanks to a few major contributors; here
+we wish to acknowledge and thank the following other people (in
+alphabetical order) who have contributed substantially to improving
+Ghostscript since its inception in 1986:
+
+<blockquote>
+<dl>
+<dt>Hitoshi Aida
+ <dd>for help with the SunView driver
+<dt>Pierre Arnaud
+ <dd>for bug reports and fixes
+<dt>Juan Manuel Acosta
+ <dd>for LN03+ driver and fixes of arc and circle rendering on SunOS
+<dt>William Bader
+ <dd>for several drivers and bug reports
+<dt>Alan Barclay
+ <dd>for the RGB TIFF drivers
+<dt>Nelson H. F. Beebe
+ <dd>for testing on a wide variety of Unix architectures, and for
+ the multi-architecture makefile
+<dt>Karl Berry and Kathy Hargreaves
+ <dd>for helping create the fonts originally distributed with
+ Ghostscript
+<dt>James W. Birdsall
+ <dd>for the IBM ProPrinter driver
+<dt>Andrew Birrell
+ <dd>for a challenging application
+<dt>Jan Bottorff
+ <dd>for help with the Microsoft Windows driver
+<dt>Tom Brosnan
+ <dd>for the Desqview/X port
+<dt>Philip Brown
+ <dd>for the LaserJet IIID duplex additions
+<dt>Tobias Burnus
+ <dd>for many challenging bug reports
+<dt>George Cameron
+ <dd>for DeskJet 500C and 550C drivers
+<dt>Maurice Castro
+ <dd>a collaborator of Russell Lang's
+<dt>Jeff Chua
+ <dd>for the idea and first implementation of
+ <b><tt>ReopenPerPage</tt></b>
+<dt>Phil Conrad
+ <dd>for originating the PPM utilities and the PCX and GIF drivers,
+ and lots of bug reports
+<dt>Michel Dagenais
+ <dd>for major help with the DeskJet driver
+<dt>John Desrosiers
+ <dd>for the final work on the Microsoft Visual C++ makefiles,
+ and for enhancements to the memory manager
+<dt>Jim Dunham
+ <dd>for the OpenVMS makefile
+<dt>Gershon Elber
+ <dd>for improvements to the BGI driver
+<dt>Fritz Elfert
+ <dd>for the Unix file enumeration routine
+<dt>George Ferguson
+ <dd>for some added man pages
+<dt>Mike Ferrara
+ <dd>for help with the LaserJet driver and HP-UX
+<dt>Andy Fyfe
+ <dd>for the BJ200 driver modifications to the BJ10e driver, and for
+ the 3B1 driver
+<dt>Tim Gallivan
+ <dd>for a port to the Atari ST
+<dt>J. Greely
+ <dd>for help with the PostScript-to-ASCII filter
+<dt>Gintautas Grigelionis
+ <dd>for a set of XBM/XPM icons
+<dt>Paul Haeberli
+ <dd>for the ideas behind better color selection and trapezoid fill
+ algorithms
+<dt>Karl Hakimian
+ <dd>for the Tek 4693d drivers
+<dt>Richard Hesketh
+ <dd>for GSPreview
+<dt>Gunther Hess
+ <dd>for the unified inkjet printer driver
+<dt>Thomas Hiller
+ <dd>for the Trident TVGA driver
+<dt>Frans van Hoesel
+ <dd>for improvements to the DeskJet driver
+<dt>Berthold K. P. Horn
+ <dd>for a better spot halftone screen
+<dt>B. Jackowski and GUST (the Polish TeX users group)
+ <dd>for improvements to the TrueType font reader, and for the
+ <b><tt>tiff2ps</tt></b> and <b><tt>ttf2pf</tt></b> utilities
+<dt>Jouk Jansen
+ <dd>for motivating, testing, and providing some of the script
+ file for the MMK/MMS build procedure
+<dt>Earl Johnson
+ <dd>for the motivation for the <b><tt>ps2ascii</tt></b> utility
+<dt>Ray Johnston
+ <dd>for a first draft of FAKEFONTS and EPSF recognition, and for
+ many small bug fixes
+<dt>Larry Jones
+ <dd>for simplifying and improving the portability of the pthreads
+ interface code
+<dt>Pete Kaiser
+ <dd>for beta testing, several versions of the OSF/1 font map, and
+ an HTML version of the documentation
+<dt>Norio Katayama
+ <dd>for the first implementation of composite fonts, and for
+ testing and helping debug the later implementation
+<dt>Alfred Kayser
+ <dd>for a DeskJet 500C driver and beta testing
+<dt>Richard Keeney
+ <dd>for help with the SunView driver
+<dt>Markku Koppinen
+ <dd>for a better circle-to-curve algorithm
+<dt>Eleftherios Koutsofios
+ <dd>for help with the SunView driver
+<dt>Tom Lane
+ <dd>for major help with adapting and integrating the IJG code
+<dt>Sam Leffler
+ <dd>for the original TIFF G3 driver, and for finding some subtle
+ bugs in the CCITTFaxEncode filter
+<dt>Jonathan Luckey
+ <dd>for the high-resolution Imagewriter drivers
+<dt>Ken Lunde
+ <dd>for providing pointers to freely available CJKV font-related
+ resource
+<dt>Ian MacPhedran
+ <dd>for a sixel driver
+<dt>Jim Mayer
+ <dd>for help with the DeskJet and LaserJet drivers
+<dt>Paul McJones
+ <dd>for help in identifying a variety of bugs
+<dt>William L. Menninger
+ <dd>for a version of the PC display state save/restore code
+<dt>Richard Mlynarik
+ <dd>for a nearly overwhelming volume of improvements and
+ suggestions
+<dt>Ulrich Mueller
+ <dd>for the LN03 driver
+<dt>Daniel Newman
+ <dd>for major help with VMS and the CCITTFax filters
+<dt>Bjorn S. Nilsson
+ <dd>for major help with VMS, including many updates of the DCL
+ build scripts and creating the VMS help file
+<dt>Roque Donizete de Oliveira
+ <dd>for testing and debugging, and a "man" page
+<dt>Gerbert Orasche
+ <dd>for some minor bug fixes
+<dt>Marc Paquette
+ <dd>for the original PaintJet driver
+<dt>Hal Peterson
+ <dd>for major help with BDF fonts
+<dt>Andy Piper
+ <dd>for the first draft of the WindowID feature
+<dt>Martin Pirker
+ <dd>for fixing two major problems with TrueType fonts
+<dt>Tom Quinn
+ <dd>for the Canon LBP-8II driver
+<dt>Matthias Rabe
+ <dd>for work on an OS/2 port
+<dt>Jerry Roylance
+ <dd>for help with statusdict
+<dt>Dave St. Clair
+ <dd>for the color Epson/Fujitsu driver
+<dt>Jan Sanislo
+ <dd>for two subtle but vital fixes
+<dt>Clemens Schrimpe
+ <dd>for help with accented characters
+<dt>Scott Schwartz
+ <dd>for improvements to <b><tt>gslp.ps</tt></b>
+<dt>Mike Smolenski
+ <dd>for the Sony drivers
+<dt>Snoopy
+ <dd>for major help with Hershey fonts, and many other contributions
+<dt>Karsten Spang
+ <dd>for the Tektronix 4695/4696 driver
+<dt>Andreas Stolcke
+ <dd>for help with the SunView driver
+<dt>Hans-Gerd Straeter
+ <dd>for finding many obscure bugs
+<dt>Christoph Strozyk
+ <dd>for getting the URW fonts made available
+<dt>Alexey Subbotin
+ <dd>for contributing an interface to GNU readline, and for the
+ rewritten implementation of ==
+<dt>Michael Sweet
+ <dd>for help with the high-density Epson driver
+<dt>Guenther Thomsen
+ <dd>for the mid-density Epson driver
+<dt>Gregg Townsend
+ <dd>for the low-resolution dithering algorithm
+<dt>Christian Tschudin
+ <dd>for fixes to the virtual memory package, and for the original
+ BubbleJet driver
+<dt>Stephen Turnbull
+ <dd>for help with the DesqView/X port
+<dt>Jos Vos
+ <dd>for the original PBM/PGM/PPM driver, and for much beta testing
+<dt>Renze de Waal
+ <dd>for an improvement to the "<b><tt>SAFER</tt></b>" feature
+<dt>Allan Wax
+ <dd>for the AT&amp;T 6300 modification to the BGI driver
+<dt>Mark Wedel
+ <dd>for the Apple DMP driver
+<dt>David Wexelblat
+ <dd>for the high-resolution 9-pin Epson driver
+<dt>George N. White III
+ <dd>for testing the PDF writer and contributing documentation
+<dt>Elizabeth Zwicky
+ <dd>for some very challenging examples
+</dl>
+</blockquote>
+
+<p>
+The following people have also helped out by beta testing, by reporting
+bugs and/or fixes, or in other ways:
+
+<blockquote>
+Vikas Aggarwal, Michael Almond,
+Abramo Bagnara, Malcolm Bennett, David Brooks,
+Alex Cherepanov, Jim Collins,
+Peter da Silva, Art Dederick, Paul DuBois,
+Toerless Eckert,
+Bernhard Fabricius, Mark Friedman, Richard Foulk,
+Glenn Geers, Dave Goldblatt, Ben Goren, Dirk Grunwald,
+Lars Haakedal, Howard B. Halstead, Adam Hammer, George Hartzell, Mike Hoffmann, Charles Hulse,
+Brad Jones, Terry Jones,
+David Keppel,
+Anthony Lee, Marty Leisner, John Lundin Jr., Lee McLoughlin,
+Stergios Marinopoulos, Herb Martin, David Mathog, David Maynard, Doug McDonald, Rich Murphey,
+Russ Nelson,
+Peter Phillips,
+Mark Rawling, Philippe Robert, Tomas Rokicki, Wolfgang Rupprecht,
+Bill Schelter, Larry Schwimmer, Bakul Shah,
+Erik Talvola, Henrik Theiling, Mark A. Thomas, Kjetil Bernhard Thomassen,
+Amanda Walker, Peter Wan, John L. Wehle, Carsten Wiethoff, Carl Witty,
+Frank Yellin,
+Jamie Zawinski
+</blockquote>
+
+<p>
+If your name appears on the above list and we've omitted a particular
+contribution you made, or if we've accidentally overlooked you entirely,
+please forgive us: just let us know at <a href="mailto:raph@artofcode.com">raph@artofcode.com</a>, and you will be
+properly acknowledged in the next release.
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 1997, 1998 Aladdin Enterprises. All
+rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Hershey.htm b/Master/xemtex/doc/ghostscript/Hershey.htm
new file mode 100644
index 00000000000..a08bae318b9
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Hershey.htm
@@ -0,0 +1,305 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Hershey fonts for Ghostscript</title>
+<!-- $Id: Hershey.htm,v 1.3 2000/11/04 05:00:00 giles Exp $ -->
+<!-- Originally: hershey.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Hershey fonts for Ghostscript</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>
+This file, unlike the rest of Ghostscript, consists entirely of information
+copied from public sources. It therefore is not covered by the
+Ghostscript copyright or license: it is in the public domain.
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>. You can also read about <a href="Fonts.htm">Ghostscript
+fonts</a> in general.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<pre>
+Mod.sources: Volume 4, Issue 42
+Submitted by: pyramid!octopus!pete (Pete Holzmann)
+
+This is part 1 of five parts of the first Usenet distribution of
+the Hershey Fonts. See the README file for more details.
+
+Peter Holzmann, Octopus Enterprises
+USPS: 19611 La Mar Court, Cupertino, CA 95014
+UUCP: {hplabs!hpdsd,pyramid}!octopus!pete
+Phone: 408/996-7746
+
+This distribution is made possible through the collective encouragement
+of the Usenet Font Consortium, a mailing list that sprang to life to get
+this accomplished and that will now most likely disappear into the mists
+of time... Thanks are especially due to Jim Hurt, who provided the packed
+font data for the distribution, along with a lot of other help.
+
+This file describes the Hershey Fonts in general, along with a description of
+the other files in this distribution and a simple re-distribution restriction.
+
+USE RESTRICTION:
+ This distribution of the Hershey Fonts may be used by anyone for
+ any purpose, commercial or otherwise, providing that:
+ 1. The following acknowledgements must be distributed with
+ the font data:
+ - The Hershey Fonts were originally created by Dr.
+ A. V. Hershey while working at the U. S.
+ National Bureau of Standards.
+ - The format of the Font data in this distribution
+ was originally created by
+ James Hurt
+ Cognition, Inc.
+ 900 Technology Park Drive
+ Billerica, MA 01821
+ (mit-eddie!ci-dandelion!hurt)
+ 2. The font data in this distribution may be converted into
+ any other format *EXCEPT* the format distributed by
+ the U.S. NTIS (which organization holds the rights
+ to the distribution and use of the font data in that
+ particular format). Not that anybody would really
+ *want* to use their format... each point is described
+ in eight bytes as "xxx yyy:", where xxx and yyy are
+ the coordinate values as ASCII numbers.
+
+*PLEASE* be reassured: The legal implications of NTIS' attempt to control
+a particular form of the Hershey Fonts *are* troubling. HOWEVER: We have
+been endlessly and repeatedly assured by NTIS that they do not care what
+we do with our version of the font data, they do not want to know about it,
+they understand that we are distributing this information all over the world,
+etc etc etc... but because it isn't in their *exact* distribution format, they
+just don't care!!! So go ahead and use the data with a clear conscience! (If
+you feel bad about it, take a smaller deduction for something on your taxes
+next week...)
+
+The Hershey Fonts:
+ - are a set of more than 2000 glyph (symbol) descriptions in vector
+ ( &lt;x,y&gt; point-to-point ) format
+ - can be grouped as almost 20 'occidental' (english, greek,
+ cyrillic) fonts, 3 or more 'oriental' (Kanji, Hiragana,
+ and Katakana) fonts, and a few hundred miscellaneous
+ symbols (mathematical, musical, cartographic, etc etc)
+ - are suitable for typographic quality output on a vector device
+ (such as a plotter) when used at an appropriate scale.
+ - were digitized by Dr. A. V. Hershey while working for the U.S.
+ Government National Bureau of Standards (NBS).
+ - are in the public domain, with a few caveats:
+ - They are available from NTIS (National Technical Info.
+ Service) in a computer-readable from which is *not*
+ in the public domain. This format is described in
+ a hardcopy publication "Tables of Coordinates for
+ Hershey's Repertory of Occidental Type Fonts and
+ Graphic Symbols" available from NTIS for less than
+ $20 US (phone number +1 703 487 4763).
+ - NTIS does not care about and doesn't want to know about
+ what happens to Hershey Font data that is not
+ distributed in their exact format.
+ - This distribution is not in the NTIS format, and thus is
+ only subject to the simple restriction described
+ at the top of this file.
+
+Hard Copy samples of the Hershey Fonts are best obtained by purchasing the
+book described above from NTIS. It contains a sample of all of the Occidental
+symbols (but none of the Oriental symbols).
+
+This distribution:
+ - contains
+ * a complete copy of the Font data using the original
+ glyph-numbering sequence
+ * a set of translation tables that could be used to generate
+ ASCII-sequence fonts in various typestyles
+ * a couple of sample programs in C and Fortran that are
+ capable of parsing the font data and displaying it
+ on a graphic device (we recommend that if you
+ wish to write programs using the fonts, you should
+ hack up one of these until it works on your system)
+
+ - consists of the following files...
+ hershey.doc - details of the font data format, typestyles and
+ symbols included, etc.
+ hersh.oc[1-4] - The Occidental font data (these files can
+ be catenated into one large database)
+ hersh.or[1-4] - The Oriental font data (likewise here)
+ *.hmp - Occidental font map files. Each file is a translation
+ table from Hershey glyph numbers to ASCII
+ sequence for a particular typestyle.
+ hershey.f77 - A fortran program that reads and displays all
+ of the glyphs in a Hershey font file.
+ hershey.c - The same, in C, using GKS, for MS-DOS and the
+ PC-Color Graphics Adaptor.
+
+Additional Work To Be Done (volunteers welcome!):
+
+ - Integrate this complete set of data with the hershey font typesetting
+ program recently distributed to mod.sources
+ - Come up with an integrated data structure and supporting routines
+ that make use of the ASCII translation tables
+ - Digitize additional characters for the few places where non-ideal
+ symbol substitutions were made in the ASCII translation tables.
+ - Make a version of the demo program (hershey.c or hershey.f77) that
+ uses the standard Un*x plot routines.
+ - Write a banner-style program using Hershey Fonts for input and
+ non-graphic terminals or printers for output.
+ - Anything else you'd like!
+
+This file provides a brief description of the contents of the Occidental
+Hershey Font Files. For a complete listing of the fonts in hard copy, order
+NBS Special Publication 424, "A contribution to computer typesetting
+techniques: Tables of Coordinates for Hershey's Repertory of Occidental
+Type Fonts and Graphic Symbols". You can get it from NTIS (phone number is
++1 703 487 4763) for less than twenty dollars US.
+
+Basic Glyph (symbol) data:
+
+ hersh.oc1 - numbers 1 to 1199
+ hersh.oc2 - numbers 1200 to 2499
+ hersh.oc3 - numbers 2500 to 3199
+ hersh.oc4 - numbers 3200 to 3999
+
+ These four files contain approximately 19 different fonts in
+the A-Z alphabet plus greek and cyrillic, along with hundreds of special
+symbols, described generically below.
+
+ There are also four files of Oriental fonts (hersh.or[1-4]). These
+files contain symbols from three Japanese alphabets (Kanji, Hiragana, and
+Katakana). It is unknown what other symbols may be contained therein, nor
+is it known what order the symbols are in (I don't know Japanese!).
+
+ Back to the Occidental files:
+
+Fonts:
+ Roman: Plain, Simplex, Duplex, Complex Small, Complex, Triplex
+ Italic: Complex Small, Complex, Triplex
+ Script: Simplex, Complex
+ Gothic: German, English, Italian
+ Greek: Plain, Simplex, Complex Small, Complex
+ Cyrillic: Complex
+
+Symbols:
+ Mathematical (227-229,232,727-779,732,737-740,1227-1270,2227-2270,
+ 1294-1412,2294-2295,2401-2412)
+ Daggers (for footnotes, etc) (1276-1279, 2276-2279)
+ Astronomical (1281-1293,2281-2293)
+ Astrological (2301-2312)
+ Musical (2317-2382)
+ Typesetting (ffl,fl,fi sorts of things) (miscellaneous places)
+ Miscellaneous (mostly in 741-909, but also elsewhere):
+ - Playing card suits
+ - Meteorology
+ - Graphics (lines, curves)
+ - Electrical
+ - Geometric (shapes)
+ - Cartographic
+ - Naval
+ - Agricultural
+ - Highways
+ - Etc...
+
+ASCII sequence translation files:
+
+ The Hershey glyphs, while in a particular order, are not in an
+ ASCII sequence. I have provided translation files that give the
+ sequence of glyph numbers that will most closely approximate the
+ ASCII printing sequence (from space through ~, with the degree
+ circle tacked on at the end) for each of the above fonts:
+
+ File names are made up of fffffftt.hmp,
+
+ where ffffff is the font style, one of:
+ roman Roman
+ greek Greek
+ italic Italic
+ script Script
+ cyril Cyrillic (some characters not placed in
+ the ASCII sequence)
+ gothgr Gothic German
+ gothgb Gothic English
+ gothit Gothic Italian
+
+ and tt is the font type, one of:
+ p Plain (very small, no lower case)
+ s Simplex (plain, normal size, no serifs)
+ d Duplex (normal size, no serifs, doubled lines)
+ c Complex (normal size, serifs, doubled lines)
+ t Triplex (normal size, serifs, tripled lines)
+ cs Complex Small (Complex, smaller than normal size)
+
+The three sizes are coded with particular base line (bottom of a capital
+ letter) and cap line (top of a capital letter) values for 'y':
+
+ Size Base Line Cap Line
+
+ Very Small -5 +4
+ Small -6 +7
+ Normal -9 +12
+
+ (Note: some glyphs in the 'Very Small' fonts are actually 'Small')
+
+The top line and bottom line, which are normally used to define vertical
+ spacing, are not given. Maybe somebody can determine appropriate
+ values for these!
+
+The left line and right line, which are used to define horizontal spacing,
+ are provided with each character in the database.
+
+Format of Hershey glyphs:
+
+5 bytes - glyphnumber
+3 bytes - length of data length in 16-bit words including left&amp;right numbers
+1 byte - x value of left margin
+1 byte - x value of right margin
+(length*2)-2 bytes - stroke data
+
+left&amp;right margins and stroke data are biased by the value of the letter 'R'
+Subtract the letter 'R' to get the data.
+
+e.g. if the data byte is 'R', the data is 0
+ if the data byte is 'T', the data is +2
+ if the data byte is 'J', the data is -8
+
+and so on...
+
+The coordinate system is x-y, with the origin (0,0) in the center of the
+glyph. X increases to the right and y increases *down*.
+
+The stroke data is pairs of bytes, one byte for x followed by one byte for y.
+
+An 'R' in the stroke data indicates a 'lift pen and move' instruction.
+</pre>
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+
+<hr>
+
+<p>
+<small>Public Domain.</small>
+<small>Distributed with Ghostscript 6.50, November 2000</small>
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/History1.htm b/Master/xemtex/doc/ghostscript/History1.htm
new file mode 100644
index 00000000000..58dab2ecfc5
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/History1.htm
@@ -0,0 +1,436 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>History of Ghostscript versions 1.n</title>
+<!-- $Id: History1.htm,v 1.13.2.11.2.5 2003/05/17 14:38:59 giles Exp $ -->
+<!-- Originally: history1.txt -->
+<!--
+ WARNING: do not use Pete Kaiser's emacs function "gs-toc" alone to
+ re-create the table of contents here, because it will replace the
+ hand-edited TOC subheads with a separate subhead for each H2 in
+ the body of the file. Or if you do, first look at the original
+ TOC to see how to edit it for visual conciseness.
+-->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>History of Ghostscript versions 1.n</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Version1.3">Version 1.3 (6/20/89)</a>
+<ul>
+<li><a href="#V1.3_Interpreter">Interpreter</a>,
+ <a href="#V1.3_Fonts">Fonts</a>,
+ <a href="#V1.3_Library">Library</a>,
+ <a href="#V1.3_Usage_procedures">Usage procedures</a>
+</ul>
+<li><a href="#Version1.2">Version 1.2 (2/22/89)</a>
+<ul>
+<li><a href="#V1.2_Interpreter">Interpreter</a>,
+ <a href="#V1.2_Library">Library</a>,
+ <a href="#V1.2_Usage_procedures">Usage procedures</a>
+</ul>
+<li><a href="#Version1.1">Version 1.1 (2/12/89)</a>
+<ul>
+<li><a href="#V1.1_Interpreter">Interpreter</a>,
+ <a href="#V1.1_Initialization">Initialization (ghost.ps, gfonts.ps)</a>,
+ <a href="#V1.1_Library">Library</a>,
+ <a href="#V1.1_Usage_procedures">Usage procedures</a>
+</ul>
+<li><a href="#Version1.0">Version 1.0 (8/11/88)</a>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>
+This document is a history of Ghostscript releases numbered 1.n. For more
+recent changes, see the the other history documents and, for the latest
+versions, the news:
+
+<blockquote>
+<a href="News.htm">News</a><br>
+<a href="History4.htm">History of Ghostscript versions 4.n</a><br>
+<a href="History3.htm">History of Ghostscript versions 3.n</a><br>
+<a href="History2.htm">History of Ghostscript versions 2.n</a><br>
+History of Ghostscript versions 1.n (this document)<br>
+</blockquote>
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+
+<h2><a name="Version1.3"></a>Version 1.3 (6/20/89)</h2>
+<pre>
+This release should have had a lot more things in it, but time pressure
+and the already long delay in getting it out made it necessary to push it
+out the door in an incomplete state (e.g., no testing on X systems
+whatsoever).
+
+</pre>
+<h3><a name="V1.3_Interpreter"></a>Interpreter</h3>
+
+<pre>
+Makes -d and -D equivalent on the command line. Adds a new switch -s / -S
+that defines a name as a string rather than a token.
+
+Arranges things so that if -sLIB=_a_prefix_ is defined on the command
+line, (filename) run will look for _a_prefix_filename before giving up if
+filename isn't the name of an accessible file.
+
+Changes showpage from an operator to a procedure. The definition of
+showpage in ghost.ps does a copypage, beeps the console, waits for the
+user to type a character (normally a &lt;return&gt;, since line buffering is
+always enabled), and then does an erasepage and an initgraphics.
+
+Adds a new initialization file, gdevs.ps, containing device-dependent
+parameters. The default window size for X Windows is properly set to 612
+x 792, i.e., 8.5" x 11".
+
+Adds a new optional initialization file, statusd.ps, that provides dummy
+definitions for the names found in statusdict on LaserWriters.
+
+Adds a new operator, getenv, to get information from the shell
+environment.
+
+Adds a new predefined operator, defaultdevicename, that returns either (X)
+or (EGA) according to how the interpreter was built.
+
+Adds a new type, devicetype, and new operators deviceparams, getscanlines,
+makedevice, makeimagedevice, and setdevice. Changes currentdevice to
+return a device object rather than a set of parameters.
+
+Makes the scanner recognize reals with 'e' exponent notation, and handle
+reals with more than 9 digits.
+
+Fixes a bug that made names starting with digits read incorrectly.
+
+Fixes a bug in the exp operator that made it not pop its first argument
+from the stack.
+
+Fixes a bug in the rand operator that made it return negative values about
+half the time.
+
+Fixes a bug in equality comparison (eq, ne, and several other operators)
+that made unequal operator objects occasionally appear to be equal on DOS
+systems.
+
+Fixes a bug in the bind operator that made it not work on packed arrays.
+
+Changes the internal representation of dictionaries so they can be
+expanded or contracted dynamically. Adds a new operator, setmaxlength, to
+change the allocated size of a dictionary.
+
+Changes sstorei.h so that non-DOS compilers don't encounter the #pragma
+directive used by Turbo C.
+
+Restores the display mode (on MS-DOS systems) when exiting.
+
+</pre>
+<h3><a name="V1.3_Fonts"></a>Fonts</h3>
+
+<pre>
+Makes undefined characters in the standard font display as tilde rather
+than blank (or causing an error). Unmapped character codes (those mapped
+to .notdef in the encoding) still display as nothing, per the PostScript
+manual.
+
+</pre>
+<h3><a name="V1.3_Library"></a>Library</h3>
+
+<pre>
+Adds a new header file, gxbitmap.h, with some new documentation describing
+the internal storage format for bitmaps.
+
+Makes numerous internal changes in the character / font cache, affecting
+many of the routines in gxcache.c.
+
+Fixes a bug in gz_draw_line / gz_fill_trapezoid that made nearly
+horizontal lines display wrong.
+
+Fixes a bug in gs_scale that made scaling not work if the coordinate
+system was rotated or skewed.
+
+Extends the font cache so it will handle characters rotated by multiples
+of 90 degrees.
+
+Changes the second argument of gx_path_bbox and gx_path_is_rectangle to be
+a gs_fixed_rect * rather than a fixed [4].
+
+Changes gs_matrix_rotate so it handles multiples of 90 degrees as a
+special case.
+
+Changes the definition of the gx_device structure to accommodate the new
+device operators, and adds corresponding library calls.
+
+Changes the type for a device color index from int to gx_color_index
+(equivalent to unsigned long). ***NOTE***: this affects existing clients
+and drivers in a non-trivial way on MS-DOS systems.
+
+Changes gs_malloc and gs_free to take a client name string as an argument.
+
+</pre>
+<h3><a name="V1.3_Usage_procedures"></a>Usage procedures</h3>
+
+<pre>
+Changes the compilation rules for Unix systems to not use the -o and -c
+compiler flags together, to be compatible with more versions of cc.
+
+Changes the gcc makefile to use $(GCC) rather than gcc as the compiler
+name.
+
+Moves the -1 flag for the MS-DOS compiler from the cc*.bat files to the
+makefile.
+
+Changes CCDEBUG to CCFLAGS, and adds ASMFLAGS, in DOS makefile.
+
+Adds -DFOR80386 and /DFOR80386 to enable use of 80386 instructions in
+assembly code on DOS systems.
+
+Merges the DEBUG and gs_DEBUG switches. There is now only a single DEBUG
+switch that affects both the interpreter and the library.
+
+Adds a new compilation switch, -DNOPRIVATE, that makes private (static)
+variables and procedures public for debugging and profiling (only needed
+on DOS systems).
+
+Adds the DOS executable (gs.exe and gs.map) to the distribution fileset.
+
+Adds new platform-specific code files, gp-*.c, for a few things like
+reading the clock.
+
+Adds a new documentation file, drivers.doc, that describes the interface
+between Ghostscript and device drivers.
+
+</pre>
+
+<hr>
+
+<h2><a name="Version1.2"></a>Version 1.2 (2/22/89)</h2>
+
+<h3><a name="V1.2_Interpreter"></a>Interpreter</h3>
+
+<pre>
+Adds the new facilities in version 25 of PostScript: //name for immediate
+lookup, packed arrays (setpacking, currentpacking, packedarray operators),
+and new font cache parameters (setcacheparams, currentcacheparams
+operators).
+
+Adds new operators (setfileposition, currentfileposition) for random
+access to files.
+
+Extends readhexstring to take either a string or a file, just like token.
+
+Fixes a bug that caused the 'for' operator (and a couple of others) to
+randomly smash memory locations on PC platforms.
+
+</pre>
+<h3><a name="V1.2_Library"></a>Library</h3>
+
+<pre>
+Renames the init_device driver procedure as open_device, and adds a
+corresponding close_device.
+
+Adds new procedures to read and set the cache limit values (implementing
+the currentcacheparams and setcacheparams operators).
+
+</pre>
+<h3><a name="V1.2_Usage_procedures"></a>Usage procedures</h3>
+
+<pre>
+Changes the name of the Unix makefile to ux-cc-x.mak, and adds a new Unix
+makefile, ux-gcc-x.mak, for using gcc instead of cc. (The latter doesn't
+actually work yet.)
+
+Changes the name of the single built-in font from uglyfont.cp to
+ugly10.cp.
+
+</pre>
+
+<hr>
+
+<h2><a name="Version1.1"></a>Version 1.1 (2/12/89)</h2>
+
+<h3><a name="V1.1_Interpreter"></a>Interpreter</h3>
+
+<pre>
+Makes the scanner treat ^Z (ASCII code 26) as whitespace: it erroneously
+treated ^R (ASCII code 22, or octal 26) as whitespace.
+
+Makes the token and readline operators, and the syntax for comments,
+recognize \r (code 13), \n (code 10), and \r\n as equivalent end-of-line
+indicators. The token and readline operators will skip over any of these
+sequences at the end of a token or line respectively, and a comment will
+read through any of these sequences. The other file operators (read,
+write, readstring, writestring) do nothing special with these characters.
+
+Changes the debug switch name from -D to -Z. Adds a -D switch for
+defining names in systemdict from the command line. Defines -DDEBUG for
+printing out debugging information during initialization, and -DNODISPLAY
+for suppressing display output.
+
+Corrects a bug that prevented the error machinery from working -- in
+version 1.0, errors always dumped the stacks and aborted interpretation.
+
+Corrects a bug that made eq and ne not work for strings.
+
+Makes the atan (arctangent) operator normalize its results according to
+the PostScript convention.
+
+Makes the div operator check for zero divisor.
+
+Makes unimplemented operators (resetfile, echo, save, restore, strokepath,
+reversepath) truly undefined.
+
+Makes the interactive loop exit gracefully on end-of-file: in version 1.0
+this caused an infinite loop.
+
+Implements the status operator.
+
+Corrects a bug that made the 'for' operator deliver garbage values if one
+or more of the operands (start, increment, end) was a real.
+
+Corrects a bug that made the arc and arcn operators not pop their operands
+from the stack.
+
+Corrects a bug that made the kshow operator crash the interpreter.
+
+Corrects a bug that made the print operator fail on machines that don't
+pass structure arguments by simply pushing the contents of the structure.
+
+Adds a new operator, imagecharpath, to convert images to
+addcharpath-compatible outlines.
+
+Changes alloc and alloc_free to use char * rather than byte *, and
+alloc_free to return void rather than int, making them compatible with the
+library's expectations and with malloc/free.
+
+Explicitly casts all expressions of the form (ptr1 - ptr2) used as
+procedure arguments to unsigned, to handle an incompatibility between
+Turbo C versions 1.5 and 2.0.
+
+Changes some of the internal conventions for operators: operators that
+push on the operand stack must check for overflow explicitly, and
+operators that modify the execution stack must return a special code.
+(See oper.h for details.)
+
+</pre>
+<h3><a name="V1.1_Initialization"></a>Initialization (ghost.ps, gfonts.ps)</h3>
+
+<pre>
+Modifies ghost.ps and gfonts.ps so they print debugging information only
+if the name DEBUG is defined. (Presumably the user will set this from the
+command line with -DDEBUG.)
+
+Changes ghost.ps so it initializes the nominal screen size to 640 x 350 on
+MS-DOS systems as before, but to 612 x 792 on Unix systems, which is an
+8.5" x 11" page at 72 pixels per inch.
+
+</pre>
+<h3><a name="V1.1_Library"></a>Library</h3>
+
+<pre>
+Corrects a bug that made the fill and eofill operators (gs_fill and
+gs_eofill) not perform a newpath afterward.
+
+Corrects the bug that made thin, nearly horizontal lines display wrong (as
+a series of disconnected dots) in the MS-DOS implementation.
+
+Fixes a bug in the EGA driver that often made it fill rectangular regions
+with black around information being displayed in white.
+
+Completely changes the internal representation of outline fonts, and
+changes btoi.ps (a Ghostscript language program for converting bitmaps to
+outlines) to use a new library call, gs_imagecharpath.
+
+Changes the extension for outline font files from .gf to .cp.
+
+Adds a new debugging switch, q, that traces all rectangle fill operations.
+
+Adds a new debugging switch, v, that traces all device-level output calls.
+
+Explicitly casts pointer differences passed as procedure arguments, as in
+the interpreter.
+
+Makes stringwidth work if there is no current point. In version 1.0, this
+gave a nocurrentpoint error.
+
+</pre>
+<h3><a name="V1.1_Usage_procedures"></a>Usage procedures</h3>
+
+<pre>
+Changes the name of the 'read me' file from READ.ME to README.
+
+Removes a bogus line (invoking the 'mcopy' utility) from the makefile.
+
+Splits up the makefile into a generic part (ghost.mak) and
+platform-specific parts (dos-ega.mak, unix-x11.mak). The latter are what
+is actually executed.
+
+Puts the definitions of the DEBUG and gs_DEBUG compilation flags into the
+makefile instead of in ghost.h and gx.h respectively.
+
+Changes the names of the documentation files to be a little less cryptic.
+Changes all the file names to lower-case in the documentation. Adds
+installation information to make.doc.
+
+Changes all function definitions (but not prototype declarations) to ANSI
+syntax, and adds a preprocessing step (ansi2knr) to convert them to K&amp;R
+syntax on Unix systems.
+
+Changes the normal MS-DOS link configuration to not assume the presence of
+an 80x87 coprocessor, and describes how to increase performance if a
+coprocessor is present.
+
+Changes the names of all the interpreter .c files, except stream.c, to
+begin with 'i'.
+
+</pre>
+
+<hr>
+
+<h2><a name="Version1.0"></a>Version 1.0 (8/11/88)</h2>
+
+<pre>
+First version released to the public.
+</pre>
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p><small>Copyright &copy; 1996, 1997, 1998 Aladdin Enterprises.
+All rights reserved.</small>
+
+<p>This software is provided AS-IS with no warranty, either express or
+implied.
+
+<p>
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/History2.htm b/Master/xemtex/doc/ghostscript/History2.htm
new file mode 100644
index 00000000000..62964ee41af
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/History2.htm
@@ -0,0 +1,5231 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>History of Ghostscript versions 1.n</title>
+<!-- $Id: History2.htm,v 1.13.2.11.2.6 2003/05/17 14:38:59 giles Exp $ -->
+<!-- Originally: history2.txt -->
+<!--
+ WARNING: do not use Pete Kaiser's emacs function "gs-toc" alone to
+ re-create the table of contents here, because it will replace the
+ hand-edited TOC subheads with a separate subhead for each H2 in
+ the body of the file. Or if you do, first look at the original
+ TOC to see how to edit it for visual conciseness.
+-->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>History of Ghostscript versions 2.n</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Version2.9.10b">Version 2.9.10-beta (7/28/94)</a>
+<ul>
+<li><a href="#V2.9.10b_Documentation">Documentation</a>,
+ <a href="#V2.9.10b_Procedures">Procedures</a>,
+ <a href="#V2.9.10b_Utilities">Utilities</a>,
+ <a href="#V2.9.10b_Drivers">Drivers</a>,
+ <a href="#V2.9.10b_Platforms">Platforms</a>,
+ <a href="#V2.9.10b_Fonts">Fonts</a>,
+ <a href="#V2.9.10b_Interpreter">Interpreter</a>,
+ <a href="#V2.9.10b_Streams">Streams</a>,
+ <a href="#V2.9.10b_Library">Library</a>
+</ul>
+<li><a href="#Version2.9.9b">Version 2.9.9-beta (6/23/94)</a>
+<ul>
+<li><a href="#V2.9.9b_Documentation">Documentation</a>,
+ <a href="#V2.9.9b_Platforms">Platforms</a>,
+ <a href="#V2.9.9b_Fonts">Fonts</a>,
+ <a href="#V2.9.9b_Interpreter">Interpreter</a>,
+ <a href="#V2.9.9b_Library">Library</a>
+</ul>
+<li><a href="#Version2.9.8">Version 2.9.8 (6/20/94)</a>
+<ul>
+<li><a href="#V2.9.8_Documentation">Documentation</a>,
+ <a href="#V2.9.8_Procedures">Procedures</a>,
+ <a href="#V2.9.8_Utilities">Utilities</a>,
+ <a href="#V2.9.8_Drivers">Drivers</a>,
+ <a href="#V2.9.8_Platforms">Platforms</a>,
+ <a href="#V2.9.8_Fonts">Fonts</a>,
+ <a href="#V2.9.8_Interpreter">Interpreter</a>,
+ <a href="#V2.9.8_Library">Library</a>
+</ul>
+<li><a href="#Version2.9.7b">Version 2.9.7-beta (6/5/94)</a>
+<ul>
+<li><a href="#V2.9.7b_Documentation">Documentation</a>,
+ <a href="#V2.9.7b_Procedures">Procedures</a>,
+ <a href="#V2.9.7b_Utilities">Utilities</a>,
+ <a href="#V2.9.7b_Drivers">Drivers</a>,
+ <a href="#V2.9.7b_Platforms">Platforms</a>,
+ <a href="#V2.9.7b_Fonts">Fonts</a>,
+ <a href="#V2.9.7b_Interpreter">Interpreter</a>,
+ <a href="#V2.9.7b_Library">Library</a>
+</ul>
+<li><a href="#Version2.9.6b">Version 2.9.6-beta (5/23/94, not distributed to the public)</a>
+<ul>
+<li><a href="#V2.9.6b_Documentation">Documentation</a>,
+ <a href="#V2.9.6b_Procedures">Procedures</a>,
+ <a href="#V2.9.6b_Utilities">Utilities</a>,
+ <a href="#V2.9.6b_Drivers">Drivers</a>,
+ <a href="#V2.9.6b_Platforms">Platforms</a>,
+ <a href="#V2.9.6b_Fonts">Fonts</a>,
+ <a href="#V2.9.6b_Interpreter">Interpreter</a>,
+ <a href="#V2.9.6b_Library">Library</a>
+</ul>
+<li><a href="#Version2.9.5b">Version 2.9.5-beta (4/11/94)</a>
+<ul>
+<li><a href="#V2.9.5b_Documentation">Documentation</a>,
+ <a href="#V2.9.5b_Procedures">Procedures</a>,
+ <a href="#V2.9.5b_Utilities">Utilities</a>,
+ <a href="#V2.9.5b_Drivers">Drivers</a>,
+ <a href="#V2.9.5b_Platforms">Platforms</a>,
+ <a href="#V2.9.5b_Interpreter">Interpreter</a>,
+ <a href="#V2.9.5b_Library">Library</a>
+</ul>
+<li><a href="#Version2.9.4b">Version 2.9.4-beta (2/19/94)</a>
+<ul>
+<li><a href="#V2.9.4b_Procedures">Procedures</a>,
+ <a href="#V2.9.4b_Utilities">Utilities</a>,
+ <a href="#V2.9.4b_Drivers">Drivers</a>,
+ <a href="#V2.9.4b_Platforms">Platforms</a>,
+ <a href="#V2.9.4b_Interpreter">Interpreter</a>,
+ <a href="#V2.9.4b_Library">Library</a>
+</ul>
+<li><a href="#Version2.9.3b">Version 2.9.3-beta (1/19/94)</a>
+<ul>
+<li><a href="#V2.9.3b_Documentation">Documentation</a>,
+ <a href="#V2.9.3b_Procedures">Procedures</a>,
+ <a href="#V2.9.3b_Drivers">Drivers</a>,
+ <a href="#V2.9.3b_Platforms">Platforms</a>,
+ <a href="#V2.9.3b_Interpreter">Interpreter</a>,
+ <a href="#V2.9.3b_Library">Library</a>
+</ul>
+<li><a href="#Version2.9.2b">Version 2.9.2-beta (1/2/94)</a>
+<ul>
+<li><a href="#V2.9.2b_Documentation">Documentation</a>,
+ <a href="#V2.9.2b_Utilities">Utilities</a>,
+ <a href="#V2.9.2b_Drivers">Drivers</a>,
+ <a href="#V2.9.2b_Platforms">Platforms</a>,
+ <a href="#V2.9.2b_Fonts">Fonts</a>,
+ <a href="#V2.9.2b_Interpreter">Interpreter</a>,
+ <a href="#V2.9.2b_Library">Library</a>
+</ul>
+<li><a href="#Version2.9.1b">Version 2.9.1-beta (12/7/93)</a>
+<ul>
+<li><a href="#V2.9.1b_Utilities">Utilities</a>,
+ <a href="#V2.9.1b_Interpreter">Interpreter</a>,
+ <a href="#V2.9.1b_Library">Library</a>
+</ul>
+<li><a href="#Version2.9b">Version 2.9-beta (12/6/93)</a>
+<ul>
+<li><a href="#V2.9b_Documentation">Documentation</a>,
+ <a href="#V2.9b_Procedures">Procedures</a>,
+ <a href="#V2.9b_Utilities">Utilities</a>,
+ <a href="#V2.9b_Drivers">Drivers</a>,
+ <a href="#V2.9b_Platforms">Platforms</a>,
+ <a href="#V2.9b_Interpreter">Interpreter</a>,
+ <a href="#V2.9b_Library">Library</a>
+</ul>
+<li><a href="#Version2.8b">Version 2.8-beta (11/10/93)</a>
+<ul>
+<li><a href="#V2.8b_Documentation">Documentation</a>,
+ <a href="#V2.8b_Procedures">Procedures</a>,
+ <a href="#V2.8b_Utilities">Utilities</a>,
+ <a href="#V2.8b_Drivers">Drivers</a>,
+ <a href="#V2.8b_Platforms">Platforms</a>,
+ <a href="#V2.8b_Fonts">Fonts</a>,
+ <a href="#V2.8b_Interpreter">Interpreter</a>,
+ <a href="#V2.8b_Library">Library</a>
+</ul>
+<li><a href="#Version2.7.2b">Version 2.7.2-beta (10/11/93)</a>
+<ul>
+<li><a href="#V2.7.2b_Utilities">Utilities</a>,
+ <a href="#V2.7.2b_Interpreter">Interpreter</a>,
+ <a href="#V2.7.2b_Library">Library</a>
+</ul>
+<li><a href="#Version2.7.1b">Version 2.7.1-beta (10/4/93, not distributed to the public)</a>
+<ul>
+<li><a href="#V2.7.1b_Documentation">Documentation</a>,
+ <a href="#V2.7.1b_Utilities">Utilities</a>,
+ <a href="#V2.7.1b_Drivers">Drivers</a>,
+ <a href="#V2.7.1b_Platforms">Platforms</a>,
+ <a href="#V2.7.1b_Fonts">Fonts</a>,
+ <a href="#V2.7.1b_Interpreter">Interpreter</a>,
+ <a href="#V2.7.1b_Library">Library</a>
+</ul>
+<li><a href="#Version2.7b">Version 2.7-beta (9/20/93, not distributed to the public)</a>
+<ul>
+<li><a href="#V2.7b_Documentation">Documentation</a>,
+ <a href="#V2.7b_Procedures">Procedures</a>,
+ <a href="#V2.7b_Utilities">Utilities</a>,
+ <a href="#V2.7b_Drivers">Drivers</a>,
+ <a href="#V2.7b_Platforms">Platforms</a>,
+ <a href="#V2.7b_Fonts">Fonts</a>,
+ <a href="#V2.7b_Interpreter">Interpreter</a>,
+ <a href="#V2.7b_Library">Library</a>
+</ul>
+<li><a href="#Version2.6.1">Version 2.6.1 (5/28/93)</a>
+<ul>
+<li><a href="#V2.6.1_Documentation">Documentation</a>,
+ <a href="#V2.6.1_Procedures">Procedures</a>,
+ <a href="#V2.6.1_Utilities">Utilities</a>,
+ <a href="#V2.6.1_Drivers">Drivers</a>,
+ <a href="#V2.6.1_Platforms">Platforms</a>,
+ <a href="#V2.6.1_Fonts">Fonts</a>,
+ <a href="#V2.6.1_Interpreter">Interpreter</a>,
+ <a href="#V2.6.1_Library">Library</a>
+</ul>
+<li><a href="#Version2.6">Version 2.6 (5/9/93)</a>
+<ul>
+<li><a href="#V2.6_Documentation">Documentation</a>,
+ <a href="#V2.6_Procedures">Procedures</a>,
+ <a href="#V2.6_Utilities">Utilities</a>,
+ <a href="#V2.6_Platforms">Platforms</a>,
+ <a href="#V2.6_Fonts">Fonts</a>,
+ <a href="#V2.6_Drivers">Drivers</a>,
+ <a href="#V2.6_Interpreter">Interpreter</a>,
+ <a href="#V2.6_Library">Library</a>
+</ul>
+<li><a href="#Version2.5.2">Version 2.5.2 (9/20/92)</a>
+<ul>
+<li><a href="#V2.5.2_Procedures">Procedures</a>,
+ <a href="#V2.5.2_Utilities">Utilities</a>,
+ <a href="#V2.5.2_Platforms">Platforms</a>,
+ <a href="#V2.5.2_Drivers">Drivers</a>,
+ <a href="#V2.5.2_Interpreter">Interpreter</a>,
+ <a href="#V2.5.2_Library">Library</a>
+</ul>
+<li><a href="#Version2.5.1">Version 2.5.1 (9/11/92)</a>
+<ul>
+<li><a href="#V2.5.1_Procedures">Procedures</a>,
+ <a href="#V2.5.1_Utilities">Utilities</a>,
+ <a href="#V2.5.1_Platforms">Platforms</a>,
+ <a href="#V2.5.1_Fonts">Fonts</a>,
+ <a href="#V2.5.1_Drivers">Drivers</a>,
+ <a href="#V2.5.1_Interpreter">Interpreter</a>,
+ <a href="#V2.5.1_Library">Library</a>
+</ul>
+<li><a href="#Version2.5">Version 2.5 (8/18/92)</a>
+<ul>
+<li><a href="#V2.5_Procedures">Procedures</a>,
+ <a href="#V2.5_Utilities">Utilities</a>,
+ <a href="#V2.5_Platforms">Platforms</a>,
+ <a href="#V2.5_Fonts">Fonts</a>,
+ <a href="#V2.5_Drivers">Drivers</a>,
+ <a href="#V2.5_Interpreter">Interpreter</a>,
+ <a href="#V2.5_Library">Library</a>
+</ul>
+<li><a href="#Version2.4.2">Version 2.4.2 (5/8/92)</a>
+<ul>
+<li><a href="#V2.4.2_Procedures">Procedures</a>,
+ <a href="#V2.4.2_Utilities">Utilities</a>,
+ <a href="#V2.4.2_Platforms">Platforms</a>,
+ <a href="#V2.4.2_Fonts">Fonts</a>,
+ <a href="#V2.4.2_Drivers">Drivers</a>,
+ <a href="#V2.4.2_Interpreter">Interpreter</a>,
+ <a href="#V2.4.2_Library">Library</a>
+</ul>
+<li><a href="#Version2.4.1">Version 2.4.1 (4/21/92)</a>
+<ul>
+<li><a href="#V2.4.1_Procedures">Procedures</a>,
+ <a href="#V2.4.1_Utilities">Utilities</a>,
+ <a href="#V2.4.1_Drivers">Drivers</a>,
+ <a href="#V2.4.1_Fonts">Fonts</a>,
+ <a href="#V2.4.1_Interpreter">Interpreter</a>,
+ <a href="#V2.4.1_Library">Library</a>
+</ul>
+<li><a href="#Version2.4">Version 2.4 (3/25/92)</a>
+<ul>
+<li><a href="#V2.4_Procedures">Procedures</a>,
+ <a href="#V2.4_Utilities">Utilities</a>,
+ <a href="#V2.4_Drivers">Drivers</a>,
+ <a href="#V2.4_Fonts">Fonts</a>,
+ <a href="#V2.4_Interpreter">Interpreter</a>,
+ <a href="#V2.4_Library">Library</a>
+</ul>
+<li><a href="#Version2.3">Version 2.3 (8/28/91)</a>
+<ul>
+<li><a href="#V2.3_Utilities">Utilities</a>,
+ <a href="#V2.3_Drivers">Drivers</a>
+</ul>
+<li><a href="#Version2.2">Version 2.2 (6/1/91)</a>
+<ul>
+<li><a href="#V2.2_Procedures">Procedures</a>,
+ <a href="#V2.2_Drivers">Drivers</a>,
+ <a href="#V2.2_Fonts">Fonts</a>,
+ <a href="#V2.2_Utilities">Utilities</a>,
+ <a href="#V2.2_Interpreter">Interpreter</a>,
+ <a href="#V2.2_Library">Library</a>
+</ul>
+<li><a href="#Version2.1.1">Version 2.1.1 (1/15/91)</a>
+<ul>
+<li><a href="#V2.1.1_Build_procedures">Build procedures</a>,
+ <a href="#V2.1.1_Interpreter">Interpreter</a>,
+ <a href="#V2.1.1_Drivers">Drivers</a>,
+ <a href="#V2.1.1_Library">Library</a>
+</ul>
+<li><a href="#Version2.1">Version 2.1 (12/31/90)</a>
+<ul>
+<li><a href="#V2.1_Build_procedures">Build procedures</a>,
+ <a href="#V2.1_Drivers">Drivers</a>,
+ <a href="#V2.1_Fonts">Fonts</a>,
+ <a href="#V2.1_Interpreter">Interpreter</a>,
+ <a href="#V2.1_Library">Library</a>
+</ul>
+<li><a href="#Version2.0">Version 2.0 (9/12/90)</a>
+<ul>
+<li><a href="#V2.0_Miscellaneous">Miscellaneous</a>,
+ <a href="#V2.0_Drivers">Drivers</a>,
+ <a href="#V2.0_Build_procedures">Build procedures</a>,
+ <a href="#V2.0_Interpreter">Interpreter</a>,
+ <a href="#V2.0_Library">Library</a>
+</ul>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>
+This document is a history of Ghostscript releases numbered 2.n. For more
+recent changes, see the the other history documents and, for the latest
+versions, the new:
+
+<blockquote>
+<a href="News.htm">News</a><br>
+<a href="History4.htm">History of Ghostscript versions 4.n</a><br>
+<a href="History3.htm">History of Ghostscript versions 3.n</a><br>
+History of Ghostscript versions 2.n (this document)<br>
+<a href="History1.htm">History of Ghostscript versions 1.n</a>
+</blockquote>
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<h2><a name="Version2.9.10b"></a>Version 2.9.10-beta (7/28/94)</h2>
+
+<p>
+This is the last 2.9 beta, since 3.0 will be released on July 31.
+
+<h3><a name="V2.9.10b_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - A | in gs.1 had a \ in front of it instead of \\.
+
+Adds a paragraph in gs.1 that tells how to select paper size.
+
+Notes in devs.mak that the cdj550 driver is the best one for the H-P
+DeskJet 520, and the pjxl300 driver is the right one for the H-P DeskJet
+1200C.
+
+Notes in make.doc that Watcom C++ 10.0 may require a change in a makefile.
+
+</pre><h3><a name="V2.9.10b_Procedures"></a>Procedures</h3><pre>
+Removes ICCINIT from MODULES.LIS for VMS systems.
+
+Updates VMS.MAK to support Motif V1.2.
+
+Updates jpeg.mak to work with version 5alpha4 of the IJG JPEG code.
+
+</pre><h3><a name="V2.9.10b_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+ - font2c didn't leave extra room in Type 0 font dictionaries for
+entries added by definefont.
+ - font2c left extra information on the stack.
+ - ansi2knr would remove newline characters within formal argument
+lists.
+ - font2c got an Error: /undefined in makefontprocname.
+
+Updates ansi2knr to work better with the GNU configure program.
+
+Updates ansi2knr to handle procedure formal arguments automatically.
+
+</pre><h3><a name="V2.9.10b_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - If a file contained color or gray-scale information followed by a
+masked image, the X driver would sometimes invert the polarity of the
+image.
+
+</pre><h3><a name="V2.9.10b_Platforms"></a>Platforms</h3><pre>
+Fixes bugs:
+ - Unix systems with a 2-argument gettimeofday returned garbage
+values for the current time.
+ - The VMS build script for compiled fonts omitted the requirement
+to load gs_ccfnt.ps.
+ - memory_.h didn't note that System V Unix platforms need memmove.
+
+On Unix systems, changes the subdirectory of $datadir/ghostscript to just
+be the version number (e.g., 2.9.10 rather than gs-2.9.9).
+
+</pre><h3><a name="V2.9.10b_Fonts"></a>Fonts</h3><pre>
+Adds support code for the Wadalab (University of Tokyo) free Kanji font.
+
+Notes in the documentation in Fontmap that .pfa and .pfb fonts are
+compatible with ATM, but .gsf fonts are not.
+
+Changes the names of Thomas Wolff's expanded Hershey fonts, replacing .gsf
+with .pfa.
+
+</pre><h3><a name="V2.9.10b_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - The scanner became confused if the literal names /&lt;&lt; or /&gt;&gt;
+straddled an input buffer boundary.
+ - .setlanguagelevel gave an invalidaccess error when
+switching from level 2 to level 1.
+ - currentgstate, setgstate, and copy for gstates didn't do
+the necessary access checks.
+ - The Category resource category didn't define .ResourceFile, so
+/Category resourcestatus gave an error.
+ - The garbage collector didn't trace the structures used by
+filenameforall properly on most platforms.
+ - Automatically expanding systemdict didn't work, but didn't give
+an error.
+ - Automatically expanding a dictionary usually expanded it by too
+much.
+ - systemdict was created too small.
+ - The garbage collector didn't trace the structures referenced only
+from allocator objects, leading to attempts to access freed storage.
+ - If a chunk was empty, the GC tried to free it even if it had
+inner chunks.
+* - The outer loop in dict_find_name_by_index() could cause an
+addressing fault on segmented machines when looking up Level 2 operators,
+because the offset could get decremented past 0.
+ - The heap_available procedure in gsmemory.c didn't convert
+properly to non-ANSI syntax. (New bug in 2.9.9.)
+ - The ledgertray procedure wasn't implemented.
+ - The xxxtray procedures didn't set the page size.
+ - The settumble operator wasn't implemented, even as a dummy.
+ - glyphshow didn't work with Type 3 fonts.
+ - Supplying a RenderTable for a CIE color space caused an error.
+ - The DCT filter code had the jpeg/ subdirectory name "wired in" to
+the source files.
+
+Adds experimental filters for Burrows/Wheeler block sorting compression
+(BWBlockSortEncode/Decode), described in DEC SRC Research Report #124,
+move-to-front coding (MoveToFrontEncode/Decode), and a simple form of
+Huffman coding (BoundedHuffmanEncode/Decode). These are experimental -- do
+not rely on them remaining the same (or existing at all) in future
+releases!
+
+Adds all function prototypes needed to pacify strict compilers.
+
+Removes all explicit references to userdict from the C code.
+
+Changes the SAFER switch so that it disallows not only explicit writing,
+deleting, or renaming of files, but also disallows specifying an explicit
+OutputFile for any device (except for the initial device, by means of
+-sOutputFile= on the command line).
+
+</pre><h3><a name="V2.9.10b_Streams"></a>Streams</h3><pre>
+Fixes bugs:
+ - Hex decoding (ASCIIHexDecode stream and &lt;&gt; literals) didn't treat
+the data source as read-only (although it restored it to its original
+contents).
+
+Implements move-to-front coding, a simple form of Huffman coding, and
+Burrows/Wheeler block sorting compression.
+
+</pre><h3><a name="V2.9.10b_Library"></a>Library</h3><pre>
+Fixes bugs:
+* - (The following bug fix was actually implemented somewhere around
+version 2.7.) restore didn't purge character cache entries whose keys were
+names created more recently than the save.
+ - gstype1.h declared gs_type1_state_sizeof as an extern, but this
+wasn't defined anywhere.
+ - gs_makeimagedevice didn't set the size of the palette correctly,
+which confused the GC.
+ - gs_makeimagedevice didn't set num_components to 1 for
+mapped-color devices with only gray values.
+* - The two-color halftoning algorithms truncated when computing the
+halftone level, rather than rounding it.
+* - If a path being filled had line segments that fell entirely to
+the right of the clipping region, part of the path might not be filled.
+ - The optimized code for 24-bit color didn't ensure properly that
+32-bit accesses would be aligned appropriately.
+ - The miter join check had gotten reversed somewhere along the way.
+* - Because x and y were interchanged in the miter check computation,
+in some situations the check was inverted. (This is a very old bug!)
+ - It was believed that strokepath didn't work with dashed lines;
+the problem appears to have been an incorrect testing program.
+
+Adds all function prototypes needed to pacify strict compilers.
+
+Changes fixed2float so it doesn't cast the result to float, and removes
+fixed2double. This produces slightly more accurate results in many places,
+and may even be faster (for FPUs that normally generate double rather than
+single precision results).
+
+</pre>
+
+<h2><a name="Version2.9.9b"></a>Version 2.9.9-beta (6/23/94)</h2>
+
+<h3><a name="V2.9.9b_Documentation"></a>Documentation</h3><pre>
+Puts a pointer to devs.mak in the section of use.doc that talks about
+MS-DOS displays.
+
+</pre><h3><a name="V2.9.9b_Platforms"></a>Platforms</h3><pre>
+Fixes bugs:
+ - The %pipe% IODevice was omitted on System V platforms.
+ - The AXP VMS build script needed /NESTED_INCLUDE=PRIMARY in
+CC_QUAL to work around a bug in the DEC C compiler.
+
+</pre><h3><a name="V2.9.9b_Fonts"></a>Fonts</h3><pre>
+Fixes bugs:
+ - gs_lev2.ps redefined .loadFontmap incorrectly.
+
+</pre><h3><a name="V2.9.9b_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - stream_compact used memcpy even though the source and destination
+might overlap.
+ - filter applied to a closed file could cause a crash.
+
+</pre><h3><a name="V2.9.9b_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - putdeviceparams to a printer didn't close and reopen the device
+if only the page size or resolution was changed.
+
+</pre>
+
+<h2><a name="Version2.9.8"></a>Version 2.9.8 (6/20/94)</h2>
+
+<p>
+This is the first version that claims to be a full Level 2
+implementation.
+It was distributed to satisfy a contractual requirement.
+</p>
+
+<h3><a name="V2.9.8_Documentation"></a>Documentation</h3><pre>
+In make.doc:
+ - Adds a reference to the generic System V section at the end of
+the SCO section.
+ - Notes that DEC OSF/1 systems may require changing the name of the
+install program to installbsd.
+
+Updates drivers.doc to reflect the change from "properties" to
+"parameters".
+
+Updates the Aladdin Enterprises Free Public License to version 1.
+
+In language.doc, notes that certain device parameters will be phased out.
+
+</pre><h3><a name="V2.9.8_Procedures"></a>Procedures</h3><pre>
+Fixes bugs:
+ - The file aa.ps was included in the distribution by mistake.
+
+Notes in the Unix makefiles that X11R6 probably needs SM and ICE added to
+XLIBS.
+
+</pre><h3><a name="V2.9.8_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+ - viewjpeg.ps used a non-existent file as its example.
+ - A temporary string in wrfont.ps was allocated too small.
+
+Upgrades font2c.ps so it will handle (simple) Type 0 fonts as well as Type
+1.
+
+</pre><h3><a name="V2.9.8_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - The TIFF drivers didn't byte-align each scan line.
+ - gdevtfax.c applied &amp; to an array member of a structure.
+
+Changes the param_list interface slightly: Implementations of the
+put_params driver procedure should now use param_signal_error to report
+errors, and should not give up at the first error. (Even though this is a
+non-backward-compatible change, old implementations will continue to work;
+they just won't deliver complete results to the setpagedevice Policies
+machinery.)
+
+</pre><h3><a name="V2.9.8_Platforms"></a>Platforms</h3><pre>
+Fixes bugs:
+ - Removes the time zone adjustment from gp_get_clock in gp_unix.c,
+since the value returned by all Unix systems is bogus.
+ - The DV/X makefile still included the dfaxhigh and dfaxlow drivers.
+ - gssetmod.com (VMS command file) didn't work properly if the
+argument list was empty.
+ - vms.mak, vms-axp.mak, and modules.lis hadn't been updated to
+reflect changes in 2.9.7.
+ - The MS Windows version wouldn't link (overflowed the 64K primary
+data segment).
+
+</pre><h3><a name="V2.9.8_Fonts"></a>Fonts</h3><pre>
+Makes the font substitution algorithm somewhat more intelligent.
+
+</pre><h3><a name="V2.9.8_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - Enumerating the pointers of a zero-length array of structures
+caused a divide by zero.
+ - iref.h didn't protect itself against multiple inclusion.
+ - The CCITTFaxEncode filter didn't byte-align the final
+end-of-block code if EndOfBlock and EncodedByteAlign were both true.
+ - make_initial_dict in iinit.c used `name' as a formal parameter
+name, which some compilers believe conflicts with a typedef.
+ - Not all internal operators had registered names.
+ - The GC used memcpy, rather than bytes_copy, when compacting
+objects, even though the source and destination might overlap.
+ - When debugging was enabled, gc_string_mark could give a spurious
+error indication.
+ - vmstatus returned too small a value for the maximum VM.
+ - The scanner could get into a loop when reading a radix-85 string.
+ - The GC could get into a state where it was called after every
+allocation (because of the patch setting global = true in ireclaim).
+ - The general path filling algorithm didn't skip regions that were
+completely outside the clipping box.
+ - The gs_screen_enum structure contained a pointer (porder) that
+pointed into the middle of a structure, confusing the GC.
+
+Implements the BitmapWidths flag in fonts. The default of false means that
+we use scalable widths even with xfonts.
+
+Changes the Generic resource category so that ResourceFileName is optional.
+
+Changes the .getdeviceparams operator so that it takes an optional
+dictionary giving the set of keys whose values are wanted. Changes the
+.putdeviceparams operator so that it takes an optional policy dictionary
+specifying the action to be taken on errors, and returns a list of keys and
+errors if it fails, rather than causing an error. These are
+non-backward-compatible changes, but ordinary programs do not use these
+operators.
+
+Changes the names of some internal operators and procedures by adding
+a . to the beginning:
+ currenttime
+ devicename
+
+Implements currentpagedevice, and a small subset of setpagedevice. Only
+the following keys in the page device dictionary are known to the current
+implementation, and the ones marked with * are not actually processed:
+ PageSize
+ InputAttributes
+ MediaColor, MediaWeight, MediaType, InsertSheet
+ (for InputAttributes matching only)
+ *ImagingBBox
+ OutputAttributes
+ OutputType
+ (for OutputAttributes matching only)
+ NumCopies
+ HWResolution
+ *Margins
+ *Orientation (for all devices, not just roll devices)
+ Policies
+ Install
+ BeginPage
+ EndPage
+Does not implement:
+ - Updating InputAttributes or OutputAttributes by sensing the state
+ of the device;
+ - Retrying media matching after an initial failure;
+ - Automatic handling of portrait vs. landscape page size;
+ - Recording the CTM after Install as the one to be used for
+ defaultmatrix, initmatrix, and initgraphics.
+Also, media matching is normally disabled (with InputAttributes = null)
+for all devices. ****** We had to disable setpagedevice just before
+shipping this release, because of interactions with the older device
+handling machinery that we could not fix in the time available.
+
+</pre><h3><a name="V2.9.8_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - 24-bit color (mem_true24_fill_rectangle and _copy_mono) had
+algorithm bugs.
+ - A complex conditional expression in gx_render_gray wouldn't
+compile properly with the DECStation 3100 Ultrix 4.3 compiler.
+ - The GC routines for gx_device_clip didn't handle the case where
+the 'current' pointer pointed to list.single.
+ - gx_add_char_bits used memcpy, rather than bytes_copy, for
+compressing character bitmaps, even though the source and destination might
+overlap.
+ - Some compilers require the definition of st_gstate_contents to
+precede the definitions of the GC procedures.
+ - Filling a large rectangle (more than 1K of bitmap) with a colored
+halftone overwrote random areas of the stack.
+
+Changes gs_setcachedevice[2] to take a pointer to an array of floats,
+rather than 6 or 10 individual floats. THIS IS A NON-BACKWARD-COMPATIBLE
+CHANGE.
+
+Implements the BitmapWidths flag in fonts.
+
+</pre>
+
+<h2><a name="Version2.9.7b"></a>Version 2.9.7-beta (6/5/94)</h2>
+
+<p>
+Yet another pre-3.0 beta. The main features are a fairly reliable
+garbage
+collector, and function prototypes almost everywhere they are needed.
+
+<h3><a name="V2.9.7b_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - The comment at the beginning of the zfindlibfile procedure was
+incorrect.
+
+Replaces the GNU License (the COPYING file) with version 0 of the new
+Aladdin Enterprises Free Public License (the PUBLIC file).
+
+</pre><h3><a name="V2.9.7b_Procedures"></a>Procedures</h3><pre>
+Fixes bugs:
+ - The definition of cmykread.dev in gs.mak was incorrect (it
+modified color.dev).
+
+Adds the ability to specify a value for FONTPATH on the command line
+(-sFONTPATH=), overriding GS_FONTPATH.
+
+Replaces the -oper2 configuration resource type with the ability to specify
+in the op_def list the dictionary in which operators will be defined. (See
+opdef.h for more details.) This is an internal change only.
+
+</pre><h3><a name="V2.9.7b_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+ - viewgif.ps got an error on interlaced GIF files whose height
+wasn't a multiple of 8.
+
+Changes traceop.ps so it stores the traced operator in the same dictionary
+where the operator is currently defined, if possible.
+
+</pre><h3><a name="V2.9.7b_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - The new G3 fax drivers crashed on page widths greater than 2623
+(40 * 64 + 63) pixels. (We fixed this by disallowing page widths greater
+than approximately twice this.)
+ - The 24-bit PCX driver had some debugging code accidentally left
+in it that produced large volumes of useless console output.
+
+Removes the previous (Leffler) TIFF/F driver and the TruFax driver.
+
+</pre><h3><a name="V2.9.7b_Platforms"></a>Platforms</h3><pre>
+Fixes bugs:
+ - time_.h, gp_unix.c, and gp_sysv.c didn't do the right thing on
+SVR4 platforms, where gettimeofday only takes 1 argument.
+ - The final linking command on Turbo C platforms didn't specify the
+COMPDIR directory for the linker.
+
+</pre><h3><a name="V2.9.7b_Fonts"></a>Fonts</h3><pre>
+
+Changes the standard Fontmap to use the URW contributed fonts as
+work-alikes for Helvetica and Times Roman.
+
+</pre><h3><a name="V2.9.7b_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - The garbage collector wasn't in a consistent state.
+ - In Level 2 mode, statusdict was allocated in global VM rather
+than local VM.
+ - resourceforall gave an error on the built-in categories such as
+Filter.
+ - The file searching algorithm didn't check the current directory
+first.
+ - When opening a file failed, it didn't return a different error
+depending on the problem.
+ - The CCITTFaxEncode filter crashed on widths larger than 2623 (64
+* 40 + 63) pixels. (We fixed this by disallowing page widths greater than
+approximately twice this.)
+ - The .type1getsbw operator gave an invalidfont error if a
+CharString started with anything other than a [h]sbw. (Adobe's published
+specs say this is invalid, but some Adobe MultiMaster fonts start with a
+callsubr and/or a callothersubr.)
+ - When printing out the stack with == after an error, the error
+handler got a repeated (and ultimately fatal) typecheck error if it
+encountered an object of non-standard type.
+ - The token operator could incorrectly attempt to free a structure
+on the stack if it encountered an input buffer boundary.
+ - string_to_ref didn't correctly set the a_local flag in the string
+object it created.
+ - If the -c switch was the last switch on the command line,
+Ghostscript always exited without going into interactive mode.
+ - copy didn't check for errors when copying a dictionary.
+
+Makes many minor changes (mostly adding prototypes) to reduce error and
+warning messages from gcc and other strict compilers.
+
+Adds files containing the 4 predefined PDF encodings (MacRoman, MacExpert,
+WinAnsi, and PDFDoc).
+
+</pre><h3><a name="V2.9.7b_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - image_bbox in gxccman.c could produce a division by 0 if a
+0-width character was being entered into the cache.
+ - gx_image_cached_char incorrectly specified a scale of 2x2 rather
+than 1x1 if it had to read bits from an xfont.
+ - Stale pointers in the halftone cache weren't cleared properly by
+a restore. (We fixed this by making grestoreall clear the halftone cache.)
+ - setdash used gs_malloc, rather than the current allocator, for
+allocating the dash pattern.
+ - If one attempted to fill a very wide region with a colored
+halftone, gx_dc_ht_colored_fill_rectangle would loop indefinitely.
+ - The container_offset in clipping devices was set incorrectly,
+causing the garbage collector to mangle pointers.
+
+Changes the fopen routine in IODevices so that it can return an arbitrary
+error code, rather than simply succeeding or failing. THIS IS A
+NON-BACKWARD-COMPATIBLE CHANGE. It only affects IODevice implementations,
+of which there are very few. (It doesn't affect ordinary device drivers.)
+
+Changes the char_metrics xfont procedure so it returns the width as
+floating point numbers rather than integers. THIS IS A
+NON-BACKWARD-COMPATIBLE CHANGE. It only affects xfont implementations, of
+which there are very few.
+
+Makes many minor changes (mostly adding prototypes) to reduce error and
+warning messages from gcc and other strict compilers.
+
+</pre>
+
+<h2><a name="Version2.9.6b"></a>Version 2.9.6-beta (5/23/94, not
+distributed to the public)</h2>
+
+<p>
+This, too, was supposed to be the last beta release for public
+release 3.0.
+It was created primarily for a user who desperately needed a Level 1 system
+that would run properly on a 64-bit hardware architecture. The garbage
+collector is badly broken (it's in the middle of an architectural change);
+setpagedevice is still not implemented.
+
+<h3><a name="V2.9.6b_Documentation"></a>Documentation</h3>
+
+<pre>
+Documents the standard location of Type 1 fonts on AIX.
+
+Changes the last few mentions of Ghostview for Microsoft Windows to GSview
+for Windows.
+
+Notes that Solaris 2.n provides the X11 header files in a different place.
+
+Changes README to reflect the differentiation between Aladdin Ghostscript
+and GNU Ghostscript.
+
+</pre>
+<h3><a name="V2.9.6b_Procedures"></a>Procedures</h3>
+
+<pre>
+Fixes bugs:
+ - The compilation rules for the modules that call the IJG library
+used -Ijpeg rather than -I$(JPEGSRC).
+ - The rule for gslib.dev omitted echogs$(XE) as a prerequisite.
+
+Makes it possible to define the values of buildtime, copyright, revision,
+revisiondate, and serialnumber in the makefile.
+
+</pre><h3><a name="V2.9.6b_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+ - The viewgif.ps utility didn't handle local color tables.
+
+Updates ps2ai.ps to version 1.81.
+
+</pre><h3><a name="V2.9.6b_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - The TIFF and fax devices used some identical names, causing
+linker complaints.
+ - The bj10e/bj200 driver inadvertently disabled the sheet feeder.
+(The change may not actually fix this bug, since we don't have either of
+these printers with a sheet feeder to test it on.)
+ - The 'bit' device didn't map colors to pixel values correctly.
+ - The monochrome PCL driver didn't work around the fact that the
+Canon LBP4i printer didn't clear its seed row correctly.
+
+Adds new drivers:
+ - A user-contributed driver for the H-P DesignJet 650C.
+ - A user-contributed driver for the Canon LIPS III printer.
+ - A completely new tiffg3 driver with one based on the new, fast
+faxg3 code. This driver does not include any external code, and carries an
+Aladdin copyright.
+ - A tiffg4 driver, also based on the fast CCITT filter code.
+
+Removes the tiffg3x driver that appeared briefly in 2.9.5, and renames the
+previous (Leffler) tiffg3 driver as tiffg3x.
+
+Adds support for A0, A1, and A2 paper sizes to PCL drivers.
+
+Changes all the names involving "props" to "params", for consistency with
+the header files, some other internal interfaces, and Adobe's terminology.
+THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. However, it only affects devices
+that implement their own get_props and put_props procedures, of which there
+aren't very many.
+
+</pre><h3><a name="V2.9.6b_Platforms"></a>Platforms</h3><pre>
+Fixes bugs:
+ - The DV/X makefile used X11 rather than X for the X11 library name.
+ - The DV/X makefile incorrectly included the PC display drivers.
+ - The DV/X makefile omitted gp_dosfs.$(OBJ) from the list of
+platform-specific files.
+ - The DV/X makefile used : rather than ; for separating directory
+names in GS_LIB_DEFAULT.
+ - x_.h omitted a needed alias for XtAppSetFallbackResources.
+ - The makefile entry for System V Unix systems didn't include
+gp_unifn.$(OBJ).
+ - The comment before LDFLAGS in the gcc makefiles incorrectly
+suggested using the -x switch on Ultrix platforms.
+ - The forward declaration of quant_params in zfdct.c upset the Sun
+compiler because it declared a parameter as float rather than floatp.
+* - The Microsoft C compiler, like the Borland C compilers, only
+compares the offset part of segmented pointers.
+
+</pre><h3><a name="V2.9.6b_Fonts"></a>Fonts</h3><pre>
+
+Adds a fontmap suitable for use with Adobe Type Basics.
+
+</pre><h3><a name="V2.9.6b_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - The STACK_LOOP_BEGIN macro in istack.h didn't work correctly on
+segmented systems.
+ - The end_phase procedure in igc.c didn't work correctly on
+segmented systems.
+ - Indexed color spaces didn't mark their base space properly when
+garbage collecting.
+ - The garbage collector didn't work on segmented systems, because
+it smashed the lsize field of large objects with mark/reloc information.
+ - Some structures didn't have correct associated GC procedures:
+gs_indexed_map, gs_client_pattern, gs_pattern_instance.
+ - restore could free names or stack segments that were still
+referenced.
+* - If a packed object caused an error, the error object could be set
+to garbage rather than the correct object.
+* - Badly designed error handlers which use $error for temporary
+storage could cause a dictfull error.
+ - Some compilers objected to the use of "dict" as a variable name
+in a scope where it was defined as a type.
+ - IODevices were declared const and non-const inconsistently.
+ - setpagedevice popped one object too many off the stack if the
+request included any subdictionaries that needed to be merged.
+ - More garbage collector bugs were fixed.
+ - If the current stack block was empty, Level 2 restore would give
+a spurious typecheck error.
+ - The CCITTFaxEncode filter could get confused if it emptied the
+input and filled the output at the same time.
+ - The CCITTFaxEncode filter could insert an extra EOL if it had to
+suspend at certain times.
+ - The new parser for literal strings (as of 2.9.5) could mis-count
+internal parentheses if a parenthesis caused the internal buffer collecting
+the string to overflow.
+ - If the current stack block had fewer than 3 elements,
+.type1addpath could report a spurious typecheck error.
+ - Text rendering operations (show, stringwidth, etc.) caused a
+crash if the current color was a Pattern that hadn't already been
+rasterized.
+ - If a program did a grestore when the graphics state stack was
+empty, the graphics state was initialized to unexpected (and, in some
+cases, invalid) values.
+ - pathforall could cause a bogus stackoverflow if it overflowed the
+current stack block.
+ - Closing an encoding filter with a procedure as target left the
+filter on the stack.
+* - The outer loop in dict_lookup() could cause an addressing fault
+on segmented machines when looking up Level 2 operators, because the offset
+could get decremented past 0.
+ - There was an = instead of an == in a test in scanner_reloc_ptrs.
+ - The call on gs_reloc_refs in sproc_reloc_ptrs in zfproc.c omitted
+the last (gcst) argument.
+
+(Re-)implements the 2-D case of CCITTFaxEncode, and fixes a couple of bugs
+in it.
+
+Adds DiffEncode and DiffDecode filters that implement color prediction for
+the PDF variant of the LZWDecode filter.
+
+Changes the specification of .oserrorstring to be similar to getenv,
+where, etc. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, no
+user-written code should be using .oserrorstring.
+
+Adds oversampling for better character rasterizing.
+
+</pre><h3><a name="V2.9.6b_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - gx_dc_ht_colored_fill_rectangle gave a compiler warning because
+of a problem with const pointers.
+ - dfmul2fixed_vars (in gxfixed.h) omitted the &amp; before vda on
+big-endian platforms, causing compilation errors.
+ - IODevices were declared const and non-const inconsistently.
+ - The Type 1 rasterizer never enabled overshoot suppression.
+ - stroke didn't fatten the line properly if stroke adjustment was
+enabled, or if the line was horizontal or vertical.
+* - The clipping test for characters was too strict by almost 1
+pixel, leading to unnecessary clipping of text at the edge of the clipping
+box.
+* - The initial clipping box was computed incorrectly for devices
+whose initial transformation matrix included a rotation.
+
+Changed the implementation of clipping lists and show enumerators to use
+separate objects rather than embedded objects, to pacify the GC. (This is
+an internal change, not visible at the PostScript or API level.)
+
+Makes the character cache trim off left and right blank areas, as well as
+top and bottom. (Internal change.)
+
+Adds oversampling for better character rasterizing.
+
+</pre>
+
+<h2><a name="Version2.9.5b"></a>Version 2.9.5-beta (4/11/94)</h2>
+
+<p>
+This was supposed to be the last beta release before 3.0, but it
+won't be.
+The only known major defects are the unreliable garbage collector, and the
+dummy implementation of setpagedevice/currentpagedevice.
+
+<h3><a name="V2.9.5b_Documentation"></a>Documentation</h3>
+
+<pre>
+Fixes bugs:
+ - The file commnew.doc didn't belong in the fileset.
+
+Notes in the makefiles that SVR4 systems may need to set EXTRALIBS=-lnsl.
+
+Adds a user-contributed `man' page for the ps2epsi utility.
+
+</pre><h3><a name="V2.9.5b_Procedures"></a>Procedures</h3><pre>
+Fixes bugs:
+ - The IJG files didn't compile properly by themselves, because they
+didn't have $(AK) in their dependency list.
+
+Changes back the handling of files named on the command line, so that they
+are first sought in the current directory, and if that fails, use the
+search path. (2.9.4-beta changed things so that files on the command line
+did not use the search path, because as of that version, the search path
+doesn't necessarily include the current directory. I consider the "check
+the current directory and then use the search path" rule, which is the
+MS-DOS standard and was used in Ghostscript prior to 2.9.4, a serious
+mistake, since it is one of the best-known security holes in Unix and can
+also produce confusing and unexpected results depending on the current
+directory; I would much rather have a clear distinction between
+user-specified files, which should not use any path searching, and system
+files, that only use the defined search path. However, as of this moment,
+users seem to want the convenience at the expense of insecurity and
+confusion.)
+
+Adds '.' to the beginning of the search path for MS-DOS platforms, to
+conform to the usual MS-DOS file searching convention.
+
+Adds a -c ("code") switch, which interprets following arguments (until the
+next switch) as PostScript tokens.
+
+Changes the handling of FEATURE_DEVS so that either level1.dev or
+level2.dev must normally be selected. THIS IS A NON-BACKWARD-COMPATIBLE
+CHANGE for Level 1 systems, which formerly set FEATURE_DEVS to an empty
+definition.
+
+</pre><h3><a name="V2.9.5b_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+ - bench.ps didn't switch back to local VM properly before running
+the program being benchmarked.
+
+Adds a ppmsetpagesize command to the pstoppm utility.
+
+</pre><h3><a name="V2.9.5b_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - The PCX and GIF drivers used an incorrect algorithm for computing
+the blue component of the color palette, which could cause colors to come
+out with not quite enough blue.
+ - The SPARCprinter driver wouldn't compile with non-ANSI compilers.
+
+Adds new drivers:
+ - A user-contributed driver for DEC sixel displays like the VT240
+(sxlcrt, in gdevln03.c, which has a FSF copyright.)
+ - A much larger and supposedly faster version of the TIFF/F driver
+(tiffg3x, in gdevtifx.c), contributed by a user. This has the same
+copyright as the TIFF/F driver (gdevtiff.c).
+ - A driver (faxg3, in gdevfax.c) that produces plain Group 3 fax
+output with no header, using the CCITTFaxEncode filter to do the work.
+(This is around 2.5-3 times as fast as the other fax drivers distributed
+with Ghostscript.)
+ - A user-contributed driver for the Mitsubishi CP50 color printer.
+
+Changes the `bit' driver so one can set the Colors and *Values properties.
+
+Makes the color mapping for PC displays, PCX files, and GIF files identical
+(they differed slightly before).
+
+</pre><h3><a name="V2.9.5b_Platforms"></a>Platforms</h3><pre>
+Fixes bugs:
+ - VMS used DISPLAY rather than DECW$DISPLAY to get the display name
+if opening the display failed.
+ - Many minor bugs relating to OS/2 and Win32 were fixed.
+ - On Unix and DV/X platforms, the install script didn't mkdir
+$(gsdir), and didn't mkdir the intermediate directory for the man page.
+ - On BSD and UTek platforms, the declaration of memset in
+memory_.h, and the definition in gsmisc.c, conflicted with the ANSI
+declaration.
+ - One of the SPARC compilers compiled the intersection computation
+in arc_either (gspath.c) incorrectly.
+ - The temporary file names created under OS/2 could exceed the 8.3
+length limit.
+
+</pre><h3><a name="V2.9.5b_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - The test files for the IJG library had been damaged by EOL
+conversion.
+ - The garbage collector didn't mark some of the most recently
+created names.
+ - The interpreter would sometimes report a typecheck instead of a
+stackunderflow.
+ - If aload didn't have enough room on the stack, it would report a
+rangecheck rather than a stackoverflow.
+ - zcontext wouldn't compile, because it hadn't been updated to the
+new GC interfaces.
+ - The definition of private_st_stream_proc_state in ifilter.h ended
+with a semicolon, which upset some compilers.
+ - load didn't check to make sure that the dictionaries it examined
+had read access.
+ - cvrs didn't handle negative numbers in radix 2 or 3 properly.
+ - The allocator could become confused if it was asked to allocate a
+large array.
+ - readline gave an ioerror rather than a rangecheck if it
+overflowed the string.
+ - The allocator didn't free packed arrays properly.
+ - The allocator's check for LIFO freeing of arrays was off by 1, so
+it never succeeded.
+ - The undercolor removal and black generation procedures weren't
+initialized properly.
+ - If the interpreter couldn't find gs_init.ps, it returned a random
+exit code.
+ - If an operator expected a procedure and didn't get one, it
+sometimes gave an invalidaccess rather than a typecheck.
+ - Unix file enumeration often did the wrong thing if there were
+directories in the pattern.
+ - The ASCIIHexDecode filter read an extra character after the
+terminating &gt;.
+ - scalefont didn't fill in ScaleMatrix properly.
+ - The CCITTFaxEncode filter crashed if the width of the page wasn't
+a multiple of 8 bits.
+ - The error printing code used .languagelevel, which wasn't defined
+in Level 1 configurations.
+ - setpagedevice didn't pop its argument.
+ - Definitions in statusdict didn't change according to the current
+language level.
+ - Separation color spaces didn't allow strings as color space names.
+ - Due to a bug in chunk_locate_ptr, the garbage collector sometimes
+decided incorrectly that a pointer was pointing outside collectable space.
+ - (Many other garbage collector bugs were fixed.)
+
+Implements additional Level 2 features:
+ - Garbage collection for strings.
+ - Expandable operand and dictionary stacks, and the ability to set
+ the maximum size of these stacks.
+ - Additional user and system parameters. The following are dummies:
+ AccurateScreens, JobName, JobTimeout, WaitTimeout.
+ - Procedure-based filters usable with cvx/exec and token.
+ - Separation color spaces (always using the alternate space).
+ (These were theoretically implemented in version 2.6, but they were
+ never tested and were actually missing most of the implementation.)
+ - VMThreshold and VMReclaim for invoking GC automatically.
+
+Adds a hook in iscan.c for parsing DSC comments.
+
+Adds encoding and decoding filters for the BCP and TBCP protocols. These
+are not fully implemented yet:
+ - The interrupt and status request characters are ignored on input,
+ and never generated on output;
+ - The TBCP encoder doesn't emit the start-of-protocol string;
+ - The TBCP decoder doesn't recognize the end-of-protocol string.
+
+Factors out Type 1 font capability as a separate feature.
+
+Changes the names of some files:
+ packed.h to ipacked.h;
+ bnum.h to ibnum.h.
+
+Changes the name of the value.index member of a ref to value.boolval.
+(Internal change only.)
+
+</pre><h3><a name="V2.9.5b_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - The definition of RELOC_PTRS_BEGIN in gsstruct.h wouldn't compile
+properly with non-ANSI compilers.
+ - The JPEG library wouldn't compile properly with non-ANSI compilers.
+* - The platform font machinery gave up too easily in some cases.
+ - CMYK devices needing halftoning converted the CMYK color to RGB.
+ - The debugging code in arc_add (gspath.c) didn't print the output
+values correctly.
+
+Factors out Type 1 font capability as a separate feature.
+
+</pre>
+
+<h2><a name="Version2.9.4b"></a>Version 2.9.4-beta (2/19/94)</h2>
+
+<h3><a name="V2.9.4b_Procedures"></a>Procedures</h3>
+
+<pre>
+Changes Ghostscript's path searching algorithm so that it does not
+automatically look in the current directory first. (The former algorithm
+was more MS-DOS-like; the new one is more Unix-like.) If you want to
+include the current directory, you must include '.' in the search path.
+THIS IS A NON-BACKWARD-COMPATIBLE CHANGE.
+
+Adds two new resource types for genconf.c:
+ - -header filexxx.h adds #include "filexxx.h" to gconfig.h.
+ - -libpath dir adds dir to the list of library search paths.
+
+</pre><h3><a name="V2.9.4b_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+ - impath.ps (used by bdftops) computed the starting X coordinate
+incorrectly, typically causing characters to be displaced slightly to the
+right.
+ - pstoppm.ps didn't handle local and global VM properly.
+
+Adds a ps2ai.ps utility, contributed by a user, for converting arbitrary
+PostScript files into a form compatible with Adobe Illustrator.
+
+</pre><h3><a name="V2.9.4b_Drivers"></a>Drivers</h3><pre>
+
+Adds new drivers:
+ - A user-contributed driver for Imagen Impress laser printers.
+ - A user-contributed driver for the DEC LA75plus printer.
+
+</pre><h3><a name="V2.9.4b_Platforms"></a>Platforms</h3><pre>
+
+Under OS/2, adds the ability to keep Ghostscript in memory for a
+specified number of minutes.
+
+Adds support for Win32 and Win32s.
+
+Changes the MS Windows platform font interface so that it does not attempt
+to render fonts at sizes smaller than 6 pixels. Changes the X Windows
+interface, which already did this for 4-point and smaller fonts, to also
+use a lower limit of 6 pixels. Also changes the X Windows platform font
+machinery so it does not render fonts at sizes larger than 36 pixels: at
+large sizes, Ghostscript does a perfectly good job, and some X font servers
+rasterize the entire font and lock up the entire window system while doing
+so.
+
+</pre><h3><a name="V2.9.4b_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - currentdash always returned a new array of reals, rather than the
+actual argument of setdash.
+ - Strings in binary object sequences read in as integers.
+ - Because of a bug in chunk_locate_ptr, some large objects didn't
+get freed properly.
+ - If an error occurred while processing an image, Ghostscript would
+attempt to free random blocks of storage.
+ - Input filters discarded trailing data, rather than filling it out
+with zeros. (This is now fixed for ASCIIHexDecode and ASCII85Decode; it's
+not clear what other filters it should affect.)
+ - The ASCII85Encode filter produced garbage output for the final
+1-4 bytes before EOD.
+* - The TIFF output driver produced incorrect output for the second
+and subsequent pages if the output was being produced on multiple files.
+* - The default handleerror did a 'stop', which was not correct.
+ - gpcheck.h converted all positive return codes to 0 if interrupt
+checking was enabled.
+ - Images with multiple data sources didn't work.
+ - Images with 12-bit sample values didn't work.
+ - Images with a file as the data source read additional data beyond
+what was required.
+ - 2 vmreclaim worked (pretty much), but 1 vmreclaim didn't.
+ - If %lineedit was opened multiple times, characters from later
+openings overwrote characters from earlier ones.
+ - token returned garbage for the "remaining string" result when
+reading from a string, if it actually read all of the string. (New bug in
+2.9.2, probably.)
+
+Implements additional Level 2 features:
+ - DCTEncode and DCTDecode filters.
+ - Filters with procedures as the data source or target.
+ (Except for token and cvx/exec.)
+ - Garbage collection for names.
+
+Changes the error printout so that strings are always truncated at 200
+characters.
+
+For Level 2 systems, changes the initial setting of the object format
+parameter from 0 to an appropriate non-zero value.
+
+* Changes the .quit operator so that it takes two operands, an error object
+and an error code; if the latter is negative, the interpreter returns this
+as the error code, rather than e_Quit.
+
+Makes StandardEncoding and ISOLatin1Encoding arrays, rather than packed
+arrays, on large-memory systems, for compatibility with certain test
+suites. Changes .registerencoding to accept arrays as well as packed
+arrays.
+
+</pre><h3><a name="V2.9.4b_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - Due to an error in cie_mult3, CIE-based colors were badly
+mis-mapped.
+* - Very narrow (but not empty) rectangles would disappear.
+* - Small halftone cells could smash the next higher entry in the
+halftone cache.
+ - The orientation algorithm in gxstroke.c still interchanged
+clockwise and counter-clockwise coordinate systems (after having been
+"fixed" at least 3 times).
+ - Stroking 1-pixel-wide lines shortened them, instead of
+lengthening them, if non-butt caps were requested.
+
+Refactors mem_mapped8_copy_mono because of limitations in the bcc32
+compiler.
+
+</pre>
+
+<h2><a name="Version2.9.3b"></a>Version 2.9.3-beta (1/19/94)</h2>
+
+<p>This version was created for evaluation purposes for a few users who
+needed Level 2 capability; it was never released to anyone else, even
+beta testers.
+
+<h3><a name="V2.9.3b_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - The description of psview and xpsview was incorrect.
+
+</pre><h3><a name="V2.9.3b_Procedures"></a>Procedures</h3><pre>
+Changes the installation directories for Unix and similar systems to put
+Ghostscript data in $(datadir)/ghostscript/gs-NN.NN.NN rather than directly
+in $(datadir)/ghostscript. (Fonts still go in $(datadir)/ghostscript/fonts.)
+
+</pre><h3><a name="V2.9.3b_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - Some spaces were incorrectly replaced with tabs in the help
+message in the 3B1 display driver.
+ - The BMP driver wrote a spurious scan line at the beginning
+of its output.
+ - The monochrome PCX driver had the two palette elements
+interchanged.
+
+Adds new drivers:
+ - A user-contributed driver for the Xerox XES printer format. This
+has a FSF copyright.
+ - A user-contributed driver for the Epson AP3250 printer. (This is
+the same as the Stylus 800, with slightly different margins.)
+ - A user-contributed driver for the DEC LA70 printer with some
+algorithms for improving text at low resolutions. This has a FSF
+copyright.
+ - A user-contributed driver for an intermediate-resolution mode
+for 9-pin "Epson-compatible" printers.
+
+Changes the name of the Stylus 800 driver from escp2 to st800.
+
+Adds a compile-time flag to the Epson driver to cope with Panasonic 9-pin
+printers, which sometimes have trouble mixing graphics and tabs.
+
+</pre><h3><a name="V2.9.3b_Platforms"></a>Platforms</h3><pre>
+Fixes bugs:
+ - The MS Windows driver (gp_mswin.c) referred to iodev.h rather
+than gxiodev.h.
+ - On Unix System V platforms, gp_unifs.c and gdevpipe.c were
+incorrectly omitted from the link list.
+ - (Some?) System V platforms don't have the S_ISDIR macro,
+requiring a change in stat_.h.
+ - The Unix `install' target didn't install gs_std_e.ps and
+gs_iso_e.ps.
+ - No MODULES.LIS file was provided for VMS.
+
+Adds Desqview/X makefiles that actually work.
+
+Documents the set of H-P-supplied patches needed to make H-P's
+compilers process Ghostscript.
+
+Changes the MS Windows driver so that if the user presses the Enter key
+while the image window has the focus, the text window will be brought to
+the top and made the active window. This is useful when viewing a
+multi-page document with Ghostscript.
+
+</pre>
+<h3><a name="V2.9.3b_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - The definition of public_st_client_color() in gxccolor.h
+included an extraneous semicolon.
+ - The definition of private_st_AXD_state() in sfilter.h included an
+extraneous semicolon.
+ - saxx.c didn't include sfilter.h, which it needed for the
+definition of private_st_AXD_state().
+ - ialloc_struct failed to create a separate chunk if the structure
+was very large.
+ - setcolorspace didn't allocate the colorspace object in the same
+VM space as the graphics state, causing problems when the colorspace was
+freed.
+ - In rare circumstances, currentfile could return an empty array
+rather than a file.
+ - Dictionary keys were always allocated in global VM.
+ - If NOPLATFONTS was true, definefont didn't check whether the
+dictionary was read-only before trying to insert an ExactSize key.
+ - startjob could get an invalidaccess error, because serverdict was
+allocated in global VM.
+ - Using definefont with an already registered font created a
+circular list structure.
+ - If a PostScript procedure appeared as a CharString in a Type 1
+font, it was always called with the character name, never the character
+code.
+ - The SubFileDecode filter didn't work with a non-empty EOD string
+(went into an endless loop). (Probably a new bug in 2.8.)
+ - save/restore didn't properly restore the maxlength of a
+dictionary, causing data to get smashed at random. (New bug in 2.9.)
+ - save didn't mark objects as old, so a nested restore had no
+effect. (New bug in 2.9.2.)
+ - After returning from an OtherSubrs callback, op_type1_free
+freed the saved interpreter state incorrectly. (New bug in 2.7.)
+ - Level 1 configurations didn't work because .makeoperator gave an
+invalidaccess error. (New bug in 2.9.2.)
+ - ASCII85 string literals didn't work. (Probably a new bug in 2.8.)
+ - If the current global/local allocation mode was different at the
+end of a file than at the beginning, an addressing fault could occur
+(gs_unregister_root in gs_run_string). (New bug in 2.9.2.)
+ - After a setfileposition on a file open for reading,
+fileposition would return an incorrect value, even though the stream
+was actually repositioned properly.
+
+Brings the dictionary unpacking code for the DCT filters into line with
+Adobe Technical Note 5116, which describes the Picky parameter for
+DCTDecode and the NoMarker, Resync, Blend, Picky, and Relax parameters for
+DCTEncode.
+
+Changes the .quit operator so that if given a negative argument, the
+interpreter returns this as the error code, rather than e_Quit.
+
+Changes the Ghostscript integer version number from 100P+10S+T to
+10000P+100S+T.
+
+Changes the default halftone screen for high-resolution devices, both
+black-and-white and color.
+
+</pre><h3><a name="V2.9.3b_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - The software floating multiply code used with USE_FPU=-1 only
+worked on little-endian platforms.
+ - Specifying a left side bearing to .type1addpath produced an
+inappropriate offset.
+
+</pre>
+
+<h2><a name="Version2.9.2b"></a>Version 2.9.2-beta (1/2/94)</h2>
+
+<p>This version was distributed only to beta testers. It adds a garbage
+collector and full local and global VM support. It is the first version
+that sets languagelevel = 2, i.e., claims to be a Level 2 implementation.
+
+<h3><a name="V2.9.2b_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - make.doc still referred to use_* variables in gdevx.c, and
+use.doc didn't explain the use* X resources.
+
+Notes that -Olimit=1000 is needed to compile Ghostscript on AXP systems
+under OSF/1 1.3.
+
+</pre>
+
+<h3><a name="V2.9.2b_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+ - viewgif.ps did not work with interlaced images.
+ - font2c.ps omitted gsmemory.h from the #include list in compiled
+fonts.
+
+</pre><h3><a name="V2.9.2b_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - The MS Windows driver hadn't been updated to work with the
+new additions to the gx_device structure.
+ - The BMP file driver wrote one scan line too many.
+ - The cdj driver omitted an important cast to int in the error
+diffusion code (FSdither macro).
+
+Changes the SuperVGA drivers to recognize erasepage and reset the
+color table, like the X driver.
+
+Adds some fragmentary code to begin implementing the PostScript fax
+extensions.
+
+</pre><h3><a name="V2.9.2b_Platforms"></a>Platforms</h3><pre>
+Fixes bugs:
+ - The procedure initializers for the MS Windows console I/O
+were missing the new reset element.
+ - The makefile entry in bcwin.mak used -fdev rather than -iodev.
+ - The Borland C++ makefiles exceeded MS-DOS's line length limit if
+the compiler files were in the standard Borland directory (BORLANDC).
+ - Some procedures weren't declared with prototypes in gp_vms.c.
+ - Some declarations had to be reordered to pacify the VAX compiler.
+ - Under MS Windows, Ghostscript didn't automatically de-iconify the
+text window to display messages on an error exit.
+ - The Unix makefile rule for gconfig_.h used echogs rather than
+./echogs.
+ - The Microsoft C makefile referred to an obsolete file gs.tr.
+ - gp_unifs.c used strpbrk and strrchr, which some systems lack.
+
+Updates the OS/2 code and documentation for compatibility with the current
+Ghostscript version.
+
+</pre><h3><a name="V2.9.2b_Fonts"></a>Fonts</h3><pre>
+Fixes bugs:
+ - The X11 .pfa fonts replaced their .gsf requirements in the
+fontmap, but not distributed with the previous (beta) release.
+
+Adds fontmaps appropriate for use with DEC Ultrix and OSF/1 systems.
+
+</pre><h3><a name="V2.9.2b_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - 4-value entries in the Metrics dictionary were interpreted with
+the width and side bearing interchanged.
+ - Objects large enough to require their own chunk were not freed
+properly.
+ - The GS_FONTPATH scanner didn't deal with the possibility that
+opening a file might fail.
+ - The interrupt and timeout errors incorrectly pushed an error
+object on the operand stack.
+ - imagemask gave an error if it was invoked with a dictionary
+argument with a current color space with more than 1 parameter.
+ - definefont insisted that a new font not have a FID entry.
+ - Some places didn't cast char to byte when needed.
+ - An extra element was left on the stack when substituting the
+default font for a font whose file couldn't be found.
+ - The CCITTFaxDecode filter didn't allow the dictionary to be
+omitted. (The Adobe documentation doesn't allow this, but Adobe
+implementations do.)
+ - When the input came from a pipe (`-') switch, opening a filter on
+currentfile that required more than 1 input byte to make progress would
+cause Ghostscript to hang (in sreadbuf).
+ - The interpreter didn't call gs_set_lib_paths before executing a
+compiled-in initialization file.
+ - A stream could be closed more than once. (New bug in 2.8.)
+ - The LZW decoder produced incorrect output if a code string was
+too long to fit into a single output buffer. (New bug as of 2.8.)
+
+Implements a special check in def to allow construction of systemdict,
+which is stored in global VM but references dictionaries in local VM.
+
+Implements additional Level 2 features:
+ - %null% and %ram% IODevices.
+ - startjob, exitserver.
+ - Local and global VM (finish).
+ - Garbage collection (for everything except names and strings).
+
+Moves the procedures for selecting paper size from systemdict to userdict.
+
+Sets languagelevel to 2 in Level 2 mode, since essentially all of
+Level 2 is now implemented.
+
+Factors out the Level 1 extended color facilities (CMYK color and
+colorimage) as a separate configuration feature.
+
+Adds some preliminary code to begin implementing the Adobe BCP and TBCP
+communication protocols.
+
+Changes the implementation of save and restore so that the bookkeeping
+structures are allocated in the new area, not the old. (This is an
+internal change not visible at the PostScript level.)
+
+</pre><h3><a name="V2.9.2b_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - gdevprn used some preprocessor macros in formal argument
+lists that ansi2knr couldn't handle.
+ - pick_cell_size called gs_distance_transform with a 0 argument
+that non-ANSI compilers didn't automatically promote to floating point.
+ - gs_screen_init called hypot with integer arguments that
+non-ANSI compilers didn't automatically promote to floating point.
+ - Some places didn't cast char to byte when needed.
+ - The vx/vy origin adjustment for WMode=1 wasn't implemented.
+ - The pattern cache wasn't initialized properly.
+ - Composite fonts didn't properly decode strings that started with
+an escape sequence, which have a special (undocumented) decoding rule, and
+also didn't properly decode strings with multiple consecutive escape
+sequences.
+
+Factors out the Level 1 extended color facilities (CMYK color and
+colorimage) as a separate configuration feature.
+
+</pre>
+
+<h2><a name="Version2.9.1b"></a>Version 2.9.1-beta (12/7/93)</h2>
+
+<p>This version was distributed only to beta testers.
+
+<h3><a name="V2.9.1b_Utilities"></a>Utilities</h3><pre>
+Adds a viewgif.ps utility to view GIF files. The current version does not
+work with interlaced data, local color tables, or files containing more
+than one image.
+
+</pre><h3><a name="V2.9.1b_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - putinterval and copy didn't do the right thing if the source and
+destination were aliases for overlapping sections of the same array or
+string.
+ - The DCT filter stub didn't allow the dictionary to be omitted.
+(The Adobe documentation doesn't allow this, but Adobe implementations
+do.)
+
+Adds an optional dictionary argument to the LZWDecode filter, containing
+InitialCodeLength, FirstBitLowOrder, BlockData, and EarlyChange entries.
+Setting these parameters appropriately allows reading (non-interlaced) GIF
+data directly.
+
+</pre><h3><a name="V2.9.1b_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - setdash produced inverted output if the pattern had an odd
+number of elements and the offset O had the property that L &lt;= O mod
+2*L, where L was the sum of the pattern elements.
+
+</pre>
+
+<h2><a name="Version2.9b"></a>Version 2.9-beta (12/6/93)</h2>
+
+<p>Like 2.7, this version was created to satisfy a contractual
+requirement,
+and will never be distributed to anyone other than the other party to the
+contract.
+
+<h3><a name="V2.9b_Documentation"></a>Documentation</h3><pre>
+Notes that Ghostscript runs on IBM PCs and compatibles under DR DOS
+6.0.
+
+Notes that Ghostscript will run on IBM PCs and compatibles with
+Hercules display cards if you redirect text output to a file.
+
+Notes that the alternate DeskJet 500C driver (djet500c) does not work
+on the 550C.
+
+Gives a list of system-specific directories where Type 1 fonts are
+likely to be installed, as a suggested setting for GS_FONTPATH.
+
+</pre><h3><a name="V2.9b_Procedures"></a>Procedures</h3><pre>
+Changes the distribution script so that it stores all text files in the
+main source archive with Unix end-of-line conventions, but with DOS
+end-of-line conventions in the MS-DOS-specific archive.
+
+Changes the MS-DOS, MS Windows, and OS/2 makefiles so that 486SX and 486DX
+processors are different CPU_TYPEs. (The former, designated by
+CPU_TYPE=485, does not include an on-chip FPU.)
+
+Adds a line to gs_init.ps which can be uncommented to select A4 as
+the default paper size.
+
+Adds a definable CFLAGS macro to the makefiles, allowing -DA4 to
+select A4 as the default paper size.
+
+Adds the H-P printer drivers to the standard Unix configurations.
+
+</pre><h3><a name="V2.9b_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+ - If there were no unencoded characters, prfont.ps would get
+an error.
+
+Changes ansi2knr to accept a wider range of function declaration syntax,
+and to not depend on any Ghostscript header files.
+
+</pre><h3><a name="V2.9b_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - Several drivers (DigiFax, Epson LQ-2550, NEC P6) didn't handle
+A4 paper width.
+ - The IBM ProPrinter wasn't being initialized properly.
+ - The Epson driver didn't work properly with compilers that
+insisted on 'char' being a signed type.
+ - The Epson driver ignored its end_string argument, producing
+incorrect end-of-page behavior on some printers.
+
+Adds new drivers:
+ - User-contributed drivers for Bellcore MGR (a window manager most
+commonly used with OS-9) devices.
+ - A user-contributed driver for the CIF file format.
+ - A user-contributed driver for the HP 2563B line printer.
+
+Changes the LaserJet 2p, 3, and 4 drivers so they set the initial position
+to (0,0) rather than (0,0.25"). (I don't remember why it was the other
+way.)
+
+Implements the PageCount property in all drivers, not just printer
+drivers.
+
+Introduces a new gx_tile_bitmap type, and changes the tile_rectangle
+device procedure to take it in place of gx_bitmap. THIS IS A
+NON-BACKWARD-COMPATIBLE CHANGE. However, it only affects devices that
+implement their own tile_rectangle procedures, of which there aren't very
+many.
+
+</pre><h3><a name="V2.9b_Platforms"></a>Platforms</h3><pre>
+Fixes bugs:
+ - The VMS module lists referred to SDCTD and SDCTE instead of
+SDCT.
+ - The Unix install script tried to install the non-existent file
+readme.doc.
+ - Microsoft C does something bizarre with empty macro parameters,
+which caused a problem with the gs_struct_type_... macros.
+ - The Unix platforms didn't automatically handle the presence
+or absence of &lt;dirent.h&gt;.
+ - The DEC Alpha OSF/1 1.3 library lacks `const' in the prototype
+for popen, which requires a workaround.
+ - The DEC Alpha OSF/1 1.3 X Windows library uses `private' as a
+member name.
+
+Splits off gp_unifs.c, containing code common to "Unix-like" file systems.
+
+Adds a user-contributed OS-9 platform.
+
+</pre><h3><a name="V2.9b_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - The currentfile cache wasn't updated properly if an executable
+file appeared in the middle of a procedure. In particular, eexec-encoded
+.PFB fonts often didn't work.
+ - There was an extraneous `goto top' in scfd.c.
+ - An integer constant overflowed in iname.c.
+ - -2147483648 (i.e., -1 &lt;&lt; 31) was converted to a float.
+ - eexec didn't skip the first 4 characters correctly if they were
+split across a buffer boundary.
+ - The font/matrix pair cache didn't properly free entries with only
+an XUID that was being deallocated.
+
+Implements additional Level 2 features:
+ - Patterns, makepattern, setpattern.
+ - IODevice resource, setdevparams, currentdevparams.
+ - OutputDevice resource, setpagedevice, currentpagedevice.
+ (Partially implemented.)
+
+Adds a new type t_struct to handle miscellaneous types that are allocated
+as objects and that the interpreter doesn't handle specially, and changes
+condition, fontID, gstate, lock, and save types to use t_struct. (This is
+an internal change, not visible at the language level.)
+
+Moves the maxlength of a dictionary to its own ref, eliminating the "size
+of integer" hack. (This is an internal change, not visible at the
+language level.)
+
+Adds the last OS error number to the error printout.
+
+Removes the obsolete framedevice operator.
+
+Implements resetfile (the only Level 1 operator not yet implemented!).
+
+Changes the name of the getdevice operator to .getdevice.
+
+</pre><h3><a name="V2.9b_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - A couple of necessary casts from char * to byte * were omitted.
+ - A Sun compiler required an extra cast to (void *) in the e1
+macro in clip_rect_enum_ptrs in gxcpath.c.
+ - The gx_dc_ procedures defined in gxdraw.c weren't marked as
+'private'.
+ - The number of "on" pixels in a halftone cell sometimes varied by
+1 from cell to cell.
+ - Mapping a gray level to CMYK didn't subtract it from 1 (to
+produce the K component).
+* - charpath took hints into account.
+
+Shuffles the order of some declarations to pacify the VMS C compiler.
+
+</pre>
+
+<hr>
+
+<h2><a name="Version2.8b"></a>Version 2.8-beta (11/10/93)</h2>
+
+<p>This version was distributed only to beta testers. It adds Type 0
+font
+support. It also includes extensive redesign of streams (to eventually
+support procedure streams) and device properties (to eventually support
+get/setpagedevice and get/setdevparams).
+
+<h3><a name="V2.8b_Documentation"></a>Documentation</h3>
+
+<pre>
+Notes the change in X11 foreground/background handling.
+
+Changes README so it no longer claims that Ghostscript works with X11R3.
+
+Notes (in devs.mak) that the cdjmono driver is the best one to use for the
+DeskJet 510.
+
+</pre><h3><a name="V2.8b_Procedures"></a>Procedures</h3><pre>
+Fixes bugs:
+ - echogs wasn't always invoked with ./ on Unix systems.
+
+Changes the file name unix-ansi.mak to unixansi.mak, so it can be created
+on a MS-DOS system.
+
+Adds a new "feature", ccinit.dev, which compiles and links the
+initialization files (gs_*.ps) into the executable, just as ccfonts.dev
+compiles and links fonts. If ccinit and ccfonts are both selected, the
+only external file needed at run time is Fontmap. Note that you must have
+a working version of Ghostscript already in order to create a version that
+uses the ccinit feature, just as for ccfonts.
+
+</pre><h3><a name="V2.8b_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+ - the ps2image utility didn't put a %! on the first line of the
+output.
+
+</pre><h3><a name="V2.8b_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - The Hercules display driver didn't include definitions for
+outport2 and PAGE_HEIGHT_INCHES, which it uses.
+ - The BGI driver didn't call setactivepage or setvisualpage,
+which it needs to do in general.
+ - The Apple DMP driver declared dmp_print_page rather than
+appledmp_print_page, causing a compilation error.
+
+Changes the X11 driver so that it doesn't use the default foreground and
+background colors: you must set foreground and background explicitly for
+Ghostscript if you want them to be other than black and white
+respectively.
+
+Adds new user-contributed drivers for:
+ - The StarJet 48 inkjet printer;
+ - The GNU/Linux VGALIB display interface.
+ - OS/2 Presentation Manager.
+
+Changes the margins of the Epson driver to 0.2, 0.0, 0.0, 0.0, which
+more accurately reflect the printer's capabilities.
+
+Changes the get_props and put_props device procedures to take property
+list "objects" with a procedural interface, rather than a data structure
+interface. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. It affects all
+get_props and put_props procedures. Fortunately, there were only a few
+devices that implemented their own get_props and put_props procedures (the
+H-P color printers, and the three window systems -- X Windows, MS Windows,
+and OS/2 PM).
+
+</pre><h3><a name="V2.8b_Platforms"></a>Platforms</h3><pre>
+Fixes bugs:
+ - The meaning of the -p switch for the Watcom compile-and-link
+program was changed between Watcom C/386 versions 8.5 and 9.5, causing the
+make process to malfunction.
+ - The SCFTAB and SCFDTAB modules were omitted from the VMS link
+list.
+
+Adds user-contributed code for OS/2.
+
+Removes the assumption that an 80486 CPU implies the presence of hardware
+floating point, since the 486SX and Cyrix 486SLC don't have it.
+
+</pre><h3><a name="V2.8b_Fonts"></a>Fonts</h3><pre>
+Fixes bugs:
+* - The GS_FONTPATH scanner didn't recognize .PFB fonts beginning
+with %!PS-AdobeFont.
+* - The GS_FONTPATH scanner often didn't recognize .PFB fonts at all.
+ - Type 1 fonts always set the line join, line cap, and miter limit
+to known values, rather than using the current values. (Using the current
+values doesn't make much sense, but it's apparently what the Adobe
+implementations do.)
+ - DISKFONTS didn't work, because of the change in the Ghostscript
+fonts to do a systemdict begin/end (in version 2.7.1).
+
+</pre><h3><a name="V2.8b_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - == didn't produce exactly the same output as the Adobe
+interpreters. (Some automated debugging and testing programs care.)
+ - The CCITTFaxEncode filter could get caught in an infinite loop,
+because it failed to mask a byte datum when scanning for runs of black
+pixels.
+ - The write operator gave an error for values outside the range 0
+to 255, rather than just using the low-order 8 bits.
+ - Some applications call a statusdict procedure named
+setresolution without checking first whether it is present; Ghostscript
+didn't provide one.
+ - Reading from a closed stream caused an error instead of
+returning EOF.
+ - Input streams didn't close automatically at EOF.
+ - findfont was defined as an operator, not a procedure.
+ - closefile on a closed file gave an error. (It isn't obvious
+that the Adobe documentation specifies that it shouldn't, but that's what
+Adobe says they do.)
+ - The LZWDecode filter didn't handle codes representing strings
+longer than the buffer size correctly.
+ - The LZWDecode filter only allowed 4095 codes to be used, rather
+than 4096.
+ - The rand operator produced an infinite string of zeros if
+given 0 or 0x7fffffff as the seed.
+ - When a CDevProc procedure was called, there was an extra
+copy of the character name on the operand stack below the operands of
+CDevProc.
+
+Replaces all stream implementations with new ones designed to allow
+interruption at arbitrary times. ****** The 2-D case of CCITTFaxEncode
+hasn't been converted (but it probably didn't work before, either).
+
+Implements additional Level 2 features:
+ - Type 0 (composite) fonts.
+
+Adds an eexecEncode filter.
+
+Implements setcolorscreen, which was accidentally omitted from 2.7.
+
+</pre><h3><a name="V2.8b_Library"></a>Library</h3><pre>
+Fixes bugs:
+* - In colorimage, if the color space of the image was different
+from the current color space, and the first data values on a scan line
+were zeros, the wrong color could result.
+ - The new flatness testing algorithm could overflow, producing
+straight lines or obvious polygons instead of curves.
+ - Images could fail to display pixels after the first non-blank
+pixel on a line if halftoned color was required. (This bug was probably
+introduced in 2.7.)
+ - Interpolation between transfer map entries didn't work, because
+of a rounding/truncation bug in frac2bits (bug introduced in 2.7.1.)
+ - cshow did an extra grestore at the end.
+
+* Implements a hack to slightly displace 1-bit-wide or -high images. This
+is necessary to work around a bug in TeX (or dvips?), which uses such
+images to draw horizontal and vertical lines without positioning them to
+ensure that they cover device pixel centers.
+
+Adds support for composite fonts (no new client procedures).
+
+</pre>
+
+<hr>
+
+<h2><a name="Version2.7.2b"></a>Version 2.7.2-beta (10/11/93)</h2>
+
+<p>This version was distributed only to alpha testers.
+
+<h3><a name="V2.7.2b_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+ - prfont.ps didn't print unencoded characters.
+
+Improves mergeini.ps to remove embedded comments.
+
+</pre><h3><a name="V2.7.2b_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - An error occurring within the scope of an internal .stopped
+didn't pop the command and error name off the stack.
+* - The = and == procedures weren't re-entrant.
+
+* Adds a .writecvs operator that does a cvs to an internal string followed
+by a writestring.
+
+</pre><h3><a name="V2.7.2b_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - grestore freed the path and the clip path in an order that
+was likely to lead to memory sandbars.
+ - moveto + closepath didn't actually close the path.
+ - moveto + reversepath produced an empty path (no moveto).
+ - moveto + closepath + reversepath produced an extra lineto.
+ - reversepath didn't set the current point to the end (i.e., the
+former beginning) of the last subpath.
+
+Adds a "planar" memory device.
+
+</pre>
+
+<h2><a name="Version2.7.1b"></a>Version 2.7.1-beta (10/4/93, not distributed to the public)</h2>
+
+<p>Like 2.7, this version was created to satisfy a contractual
+requirement,
+and will never be distributed to anyone other than the other party to the
+contract.
+
+<h3><a name="V2.7.1b_Documentation"></a>Documentation</h3><pre>
+Documents the GS_OPTIONS environment variable.
+
+Adds a summary of all environment variables to the documentation
+(use.doc).
+
+Documents the existence of a third free viewer built on Ghostscript.
+
+</pre><h3><a name="V2.7.1b_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+ - wrfont didn't wrap a systemdict begin / end around the body of
+the font.
+ - wrfont wrote out the Symbol and ZapfDingbats encodings in a way
+that only worked if the encoding was known by name.
+
+Changes bdftops to include an XUID if desired.
+
+Changes bdftops so that it uses 'show' for unknown ligatures, rather than
+executing the characters as subroutines; this makes such ligatures work
+properly with xfonts.
+
+</pre><h3><a name="V2.7.1b_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - The PCL drivers sent a printer reset (&lt;ESC&gt;E) at the beginning
+of every page, instead of only before the first page.
+ - The PCX driver didn't round up the scan line width in the
+header, even though it produced scan lines with the correct (rounded)
+number of bytes.
+
+Adds a new map_rgb_alpha_color procedure. This is a backward-compatible
+change; this procedure defaults to calling map_rgb_color.
+
+</pre><h3><a name="V2.7.1b_Platforms"></a>Platforms</h3><pre>
+Fixes bugs:
+ - On Unix platforms, the value of the TEMP environment variable
+had to end with a '/'.
+ - On MS-DOS systems, printer output to devices other than PRN
+(specifically, LPTn) didn't put the device into binary mode.
+
+Adds FPU_TYPE to the Unix makefiles, with a default value of 1.
+
+Removes the mention of Xmu linking problems on the SunOS platform,
+since the problem no longer exists.
+
+Changes the order of X Windows libraries from Xt X11 Xext to Xt Xext X11.
+This makes the OSF/1 linker happier.
+
+</pre><h3><a name="V2.7.1b_Fonts"></a>Fonts</h3><pre>
+Fixes bugs:
+ - All the fonts originated by Aladdin, and the shareware fonts,
+had UniqueIDs in the 4xxxxxx range, which is only supposed to be used for
+limited-distribution fonts.
+* - When Ghostscript loaded a font, it pushed a scratch dictionary
+on the dictionary stack, rather than userdict. (Note that this fix also
+requires fixing the fonts to include a protective systemdict begin /
+end; see below.)
+* - When loading a font failed, Ghostscript didn't check the font
+name against the default font name properly.
+ - Ghostscript's own fonts didn't include a systemdict begin /
+end to guard against redefinition of names used in the reading
+procedures (e.g., index).
+* - When Ghostscript scanned a .PFB font to get the FontName, it
+didn't skip over the 6-byte header, which could cause confusion or a
+syntaxerror.
+ - Loading a .PFB font that left extra information on the
+operand stack didn't work.
+
+Changes the ZapfDingbats font to use DingbatsEncoding rather than include
+a copy of the encoding in itself, if DingbatsEncoding is known. Changes
+the Symbol font similarly.
+
+Removes eexec encryption from the 4 URW fonts, so they will work with
+DISKFONTS.
+
+Adds shareware Hiragana and Katakana fonts (Calligraphic-Hiragana and
+Calligraphic-Katakana, by Kevin Hartig).
+
+Adds GS on the end of the family names of all of Aladdin's own converted
+fonts.
+
+Replaces many of the Hershey fonts with new ones (mostly Type 1) created
+by Thomas Wolff, who added accents, accented characters, and other
+non-alphabetics. These too now have proper UniqueIDs.
+
+</pre><h3><a name="V2.7.1b_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+* - imagemask interpreted the Decode array incorrectly (inverted).
+ - Running out of memory when constructing a path incorrectly
+signalled a limitcheck rather than a VMerror.
+ - restore didn't purge uncached scaled fonts properly.
+
+Adds alpha (opacity) to the graphics state, and setalpha and
+currentalpha operators.
+
+Redefines erasepage in terms of a new .fillpage operator that fills
+the current page with the current color and then does a sync_output.
+
+Redefines setdevice and putdeviceprops in terms of new .setdevice and
+.putdeviceprops operators that return a boolean indicating whether the
+page needs to be erased. With this change, operators that erase the page
+always call erasepage at the interpreter level rather than calling
+gs_erasepage directly.
+
+</pre><h3><a name="V2.7.1b_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - The null device allowed its size to be reset.
+ - clippath didn't establish a current point if the clipping
+path was empty.
+* - The Type 1 font interpreter (gs_type1_interpret) flattened
+curves even if it was being invoked for charpath.
+ - Colored halftones usually didn't come out with the correct
+phase, and had several other problems.
+ - A show or charpath within a BuildChar procedure didn't work.
+ - Accented characters composed with seac used the base
+character width instead of the composed character width. (The Adobe
+documentation says these must be the same, but some commercial fonts
+don't obey this.)
+ - setcurrentpoint in the accent of a character composed with
+seac didn't take the accent's displacement into account.
+
+Adds an alpha (coverage) value to the graphics state, and
+gs_setalpha/currentalpha procedures. Currently Ghostscript just passes
+the alpha value to the driver; it doesn't attempt to emulate alpha
+handling if the driver doesn't support it.
+
+Redefines gs_erasepage to call gs_fillpage.
+
+Bypasses the fill code if the clipping box is empty. This makes a big
+difference for stringwidth, and doesn't hurt anything else.
+
+Changes frac_1 from 0x7fff to 0x7ff8. This allows exact representation of
+practically all useful fractions, since this number (32760) is
+2*2*2*3*3*5*7*13.
+
+Changes float to double in several matrix routines for better accuracy.
+
+Adds new device properties to implement the deviceinfo operator:
+Colors, GrayValues, RedValues, GreenValues, BlueValues, ColorValues.
+Also adds HWBitsPerPixel and HWColorMap.
+
+Changes the sorting algorithm for halftones to use qsort instead of
+special code.
+
+Changes the Type 1 interpreter so that it uses the current point, rather
+than (0,0), as the character origin.
+
+</pre>
+
+<h2><a name="Version2.7b"></a>Version 2.7-beta (9/20/93, not distributed to the public)</h2>
+
+<p>This is the first of a series of beta-only versions planned for
+release
+between 2.6.n and 3.0. This version, in particular, was created to
+satisfy a contractual requirement, and will never be distributed to anyone
+other than the other party to the contract.
+
+<h3><a name="V2.7b_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - The "HP XLFD extensions" to X11R5 are not specific to H-P
+platforms.
+ - The configuration generation script used rm rather than rm -f.
+ - gs.1 was installed in $(docdir) rather than $(mandir);
+$(mandir) wasn't defined.
+ - ansi2knr.1 was installed in $(docdir), which was
+inappropriate because ansi2knr itself wasn't installed anywhere.
+
+Moves documentation for versions 2.4.x and 2.5.x to history.doc.
+
+Moves the documentation on how to add devices to the configuration
+from devs.mak to make.doc.
+
+Changes the name of readme.doc to current.doc, since the presence of
+two "readme" files was confusing to users.
+
+Documents how to use the Microsoft Windows PostScript printer driver
+to convert TrueType fonts to Type 1 fonts embedded in the document.
+
+Corrects several errors in the documentation of the get_bits driver
+procedure.
+
+Documents the fact that X11R3 is no longer supported.
+
+Removes the last references to "Ghostscript" from the comments in the
+gs_*.ps files. The only remaining reference, other than the boilerplate
+comments at the beginning of each file, is in the message at the end of
+gs_init.ps.
+
+Documents the use of WMAKEL rather than WMAKE with the Watcom compiler.
+
+</pre><h3><a name="V2.7b_Procedures"></a>Procedures</h3><pre>
+Fixes bugs:
+* - The Unix install script used gs rather than $(GS) as the name of
+the executable.
+* - The Unix install script didn't copy gs_dbt_e.ps to $(gsdatadir).
+ - genconf.c used ps2 as a variable name; ps2 is a predefined
+preprocessor symbol in the VSC compiler used by IBM.
+ - @-expansion didn't interact properly with -- and -+.
+ - The Unix install script didn't copy COPYING to $(docdir),
+and copied README to $(gsdatadir) rather than $(docdir).
+ - ps2ascii used /bin/sh -f, which is an incorrect flag.
+
+Removes all uses and mentions of USG (a now-obsolete GNU convention)
+as a synonym for SYSV.
+
+Removes filter.dev and dps.dev from FEATURE_DEVS if level2.dev is
+included, since they don't add anything beyond level2.dev.
+
+Changes the ccgs script to explictly remove the old .o file before
+doing the mv, for the benefit of people who have changed mv to prompt
+before overwriting. Changes the configuration script to use rm -f
+for the same reason.
+
+Changes the -Z switch so an empty list of options does nothing, rather
+than turning on all options.
+
+Adds a -@ switch which is like -- and -+ except that it does
+@-expansion of arguments.
+
+Changes genconf so it takes patterns from the command line that describe
+how to write the linker control files, rather than having the patterns
+built in.
+
+Changes -d and -D so that if no value is supplied, the default is
+true rather than null.
+
+</pre><h3><a name="V2.7b_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+* - The ps2ascii script still referenced ps2ascii.ps under its
+old name gs_2asc.ps.
+* - ps2image.ps had a 'pop' missing in the written-out
+definition of 'max' in the boilerplate code it put at the beginning
+of compressed files.
+* - ps2image.ps got a typecheck if a scan line had no repeated
+data in it anywhere.
+ - wrfont.ps didn't handle CharStrings or Subrs that weren't
+strings.
+ - mergeini.ps produced an init file that incorrectly
+attempted to load the Symbol and Dingbats encodings dynamically.
+
+Removes the gsview.bat file, since it was confusingly named and not
+generally useful.
+
+Changes bdftops back to using encrypted CharStrings, for compatibility
+with Adobe interpreters, but also changes lenIV to 0, to save a little
+more space.
+
+Changes the traceop utility so it makes traced operators appear to be
+operators, and so it will replace a definition in systemdict if explicitly
+requested to do so and systemdict is writable.
+
+Adds a printafm utility for printing the metrics of fonts in AFM format.
+
+</pre><h3><a name="V2.7b_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - The cdj driver was missing a few type casts that were needed to
+satisfy pedantic compilers.
+ - For banded devices, many of the non-displaying target routines
+were getting called with the original device as the first argument, not
+the target device. (This didn't make any difference in practice, because
+gdev_prn_open explicitly copied the non-rendering procedures back into the
+procedure vector.)
+* - The X driver didn't catch and discard bogus errors on
+XFreeColors, which faulty servers generate.
+* - The X driver gave up on color allocation too easily.
+* - The X driver dynamic color table size could become negative.
+* - x_lookup_font could return platform fonts of very small sizes,
+which have very inaccurate metrics.
+* - The ESCP/2 driver was incorrectly named gdevescp2 in devs.mak.
+ - The Apple DMP driver used #if 0 / #endif instead of comment
+brackets, and was incorrectly named "dmp" instead of "appledmp" in
+the source code.
+* - The X driver didn't free dynamic colors at the start of each page.
+* - The X driver didn't bind foreground/background defaults tightly.
+* - The X driver didn't check for GHOSTVIEW_COLORS properly.
+* - The X driver freed too many colors if an allocation request failed.
+* - The X driver didn't check return value of gs_malloc for being NULL.
+* - The DeskJet/LaserJet driver used an incorrect command for
+end-of-page.
+* - The DeskJet/LaserJet driver incorrectly reset the printer at the
+beginning of every page.
+* - The PCX driver put an old version number in the header, and
+didn't pad scan lines to an even number of bytes.
+ - The BMP driver used a variable named `quad', which is a
+reserved word on some platforms.
+* - The TIFF driver didn't handle A4 or B4 size paper correctly.
+* - The X11 driver incorrectly demanded the Xmu library, which was
+not needed and which caused link errors on some versions of SunOS.
+* - X11 font matching scheme was too loose, causing overlaps and
+other problems.
+* - X11 Font Extensions (rotated and mirrored fonts) did not work
+properly on NCD terminals.
+* - When freeing the rgb cube/gray ramp, the parameters to gs_free()
+did not exactly match the parameters to gs_malloc().
+* - Ghostscript failed to warn the user when it could not allocate
+the original color cube/gray ramp and dropped back to a smaller
+cube/ramp, or from color to mono.
+* - x_release could cause Ghostscript to fail if a font was freed
+after the device was closed.
+ - The X driver continued to ask the server for colors even after a
+request failed, causing colored images to display very slowly.
+
+* Adds a pcxgray driver to provide 8-bit gray scale output in PCX format.
+
+Adds a pcx24b driver to provide 24-bit RGB color PCX output.
+
+* Adds a LaserJet 4 driver.
+
+Adds a user-contributed driver for the DEC LA70 (very similar to the LA75).
+
+Substantially improves the performance of the PxM drivers by eliminating
+an unnecessary copying step and by writing each scan line with a single
+fwrite when possible.
+
+Moves the gray-scale and 24-bit RGB device color mapping routines to
+gxcmap.c from gdevpcx.c and (nowhere).
+
+Allows window granularities smaller than 64K in the VESA driver.
+
+Changes the LaserJet margins again.
+
+</pre><h3><a name="V2.7b_Platforms"></a>Platforms</h3><pre>
+Fixes bugs:
+ - Platforms where stat doesn't return a st_blocks value
+computed the block count wrong.
+ - In gp_vms.c, the call on SYS$FILESCAN needed two uint *s
+rather than a long * and a struct *.
+* - The VMS script files referenced IBSCAN instead of ISCAN2,
+and omitted GDEVXXF.
+* - The UUENCODEd icons for the MS Windows platform were omitted
+from the fileset.
+* - On MS-DOS systems, filenameforall didn't interpret * alone
+as a pattern matching all files.
+
+Adds wildcard matching capability to filenameforall under Unix.
+
+Removes gp_file_status from the platform interface, since all
+platforms provide identical stat calls in the C library.
+
+Adds DesqView/X (using djgcc and go32) as a platform.
+
+Removes the S3 driver from the standard PC configurations.
+
+Adds documentation for compiling Ghostscript on the Intergraph Clipper.
+
+Updates the documentation to add a better list of X Windows font
+names for the Sun platform.
+
+</pre><h3><a name="V2.7b_Fonts"></a>Fonts</h3><pre>
+
+Creates an external file (gs_dbt_e.ps) with the ZapfDingbats encoding
+(actually in 2.6.1, but not documented there).
+
+Changes the names of the Cyrillic fonts to Shareware-Cyrillic-Regular
+and Shareware-Cyrillic-Italic, keeping Cyrillic, Cyrillic-Regular,
+and Cyrillic-Italic as aliases.
+
+* Removes the requirement that the FontName in the font file be the same
+as the name in Fontmap. (This requirement led to the need for aliases,
+and was extremely confusing to users.)
+
+* Adds a GS_FONTPATH environment variable containing a list of directories
+that should be scanned automatically for fonts.
+
+* Gets rid of the Ugly font, and changes the default to the IBM Courier
+font, which is freely distributable.
+
+</pre><h3><a name="V2.7b_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - cvs didn't check for stack underflow.
+* - zht2.c didn't include alloc.h.
+* - execstackoverflow cleared the e-stack instead of just
+cutting it back.
+ - if and ifelse incorrectly reported typecheck instead of
+stackunderflow.
+ - Copying a dictionary could alter some items even if a later
+item causes an invalidaccess error because of an attempted store of a
+local object into global VM.
+ - bitshift and cvrs assumed that longs occupied 32 bits.
+* - exitserver didn't check the password, and always succeeded.
+ - Font loading didn't suppress all output messages if QUIET
+was set.
+* - The interpreter incorrectly pushed its exit procedure on
+the e-stack if it was called again after an interrupt.
+* - The interpreter didn't treat timeout like interrupt in
+terms of re-executing the current operation.
+* - `show' operators popped their operands before they were
+sure they wouldn't be interrupted.
+* - rotate with a matrix operand didn't check for multiples of
+90 degrees.
+ - In the system name table, ge was misspelled eg, and
+pathforall was misspelled pathfoall.
+* - file_close_file attempted to free the buffer even if it was an
+externally supplied string (specifically, the argument of gs_run_string).
+ - setprintername (in gs_statd.ps) set printername rather than
+.printername.
+
+Implements additional Level 2 features:
+ - Indexed color space with lookup procedure.
+ - sethalftone, except for the transfer function override,
+ and currenthalftone.
+
+Implements OtherSubrs for indices greater than 3 (required for
+MultiMaster fonts).
+
+Implements black generation and undercolor removal.
+
+Changes `store' from a C procedure to a PostScript procedure.
+
+Changes idiv back so it requires integer operands, per the Adobe
+documentation but not per some old Adobe interpreters.
+
+* Adds many new paper sizes to gs_statd.ps. It now includes ISO a0-a10
+and b0-b10, and CAD sizes archA-archE.
+
+Implements `status' for non-%os% files. (This is currently a no-op,
+but the framework is there.)
+
+Changes the error handler so it normally uses = rather than == to print
+the operand stack, to avoid recursive errors.
+
+* Adds time slicing capability to the interpreter.
+
+Implements setcolorscreen/currentcolorscreen.
+
+</pre><h3><a name="V2.7b_Library"></a>Library</h3><pre>
+Fixes bugs:
+* - Rectangles with vertices specified in clockwise order were
+drawn as 0-width lines.
+* - The string matching function reported that 'abcdefg'
+matched the pattern 'abcde'.
+* - The bounding box of non-rectangular clipping paths was not
+being marked as valid, so cached characters would simply get
+discarded as being outside the bounding box.
+ - erasepage filled the page with the device's white color,
+not with gray level 1 passed through the transfer function.
+* - Colors with equal R/G/B or C/M/Y components were rendered
+incorrectly if the 3 or 4 transfer functions were not all the same.
+* - Because of a bug in rc_unshare, using CIE color would give
+random errors (such as /invalidaccess in --for--).
+* - setbbox didn't round the coordinates properly, which could
+cause erroneous rangecheck errors with coordinates on the edge of the
+box.
+* - Color halftones "flipped over" at the 50% point, inverting
+foreground and background.
+ - Quite a few places assumed that longs occupied 32 bits.
+* - kshow passed an incorrect c1 value to the procedure.
+ - The debugging code in update_x_list in gxfill.c didn't take
+into account the possibility that the active line at x_first might be
+deleted.
+ - gx_image_cached_char called the xfont render_char procedure an
+extra time if it failed with required=0 and succeeded with required=1.
+(This was just a small inefficiency, not a logic bug.)
+ - Non-rectangular clipping regions weren't computed correctly,
+because accum_add_rect didn't handle overlapping rectangles.
+ - Drivers didn't report file system errors (such as file system
+full) as an ioerror.
+* - setdevice didn't reset the charpath and setcachedevice flags.
+ - The Zortech compiler produced wrong code for the uid_equal
+macro; uid_equal is now a procedure.
+
+Passes OtherSubrs arguments back to the caller correctly for indices
+greater than 3.
+
+Implements black generation and undercolor removal.
+
+Removes gdev_mem_ensure_byte_order, which was no longer used or useful.
+
+Removes gstdev.c (device tracing), since it hasn't been used in a
+long time and is of little value given a reasonable debugger.
+
+Changes the interface to the xfont char_metrics and render_char
+procedures to allow them to return 1.
+
+Changes 32-bit memory devices so they use CMYK color mapping rather
+than RGB mapping with an unused byte.
+
+Implements gs_setcolorscreen/currentcolorscreen.
+
+Implements Level 2 halftones, except for the transfer function override.
+
+Implements a hack to make zero-width rectangles display as one pixel wide,
+to work around a bug in the Microsoft Windows PostScript driver.
+Currently the hack only works for vertical lines, not horizontal ones.
+
+</pre>
+
+<hr>
+
+<h2><a name="Version2.6.1"></a>Version 2.6.1 (5/28/93)</h2>
+
+<p>This is primarily a bug-fix release for 2.6, with a couple of minor
+additions.
+
+<h3><a name="V2.6.1_Documentation"></a>Documentation</h3><pre>
+
+Adds proper `man' pages ansi2knr.1 and gs.1.
+
+</pre><h3><a name="V2.6.1_Procedures"></a>Procedures</h3><pre>
+Fixes bugs:
+ - The Unix makefile produced an incorrect linker command if
+EXTRALIBS was not empty.
+ - The Unix install commands didn't copy devices.doc,
+ps2epsi.doc, and xfonts.doc to the documentation directory.
+ - echogs.c didn't include &lt;sys/types.h&gt;, which is needed for
+time_t on some systems.
+ - malloc_.h used &lt;malloc.h&gt; rather than &lt;stdlib.h&gt; on
+NeXTStep systems.
+
+Changes the configuration procedure to use a C program rather than
+complex shell scripts.
+
+</pre><h3><a name="V2.6.1_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+ - The boilerplate produced by ps2image used the 'max'
+operator, which is not a standard PostScript operator.
+ - The winmaps.ps utility had 'floring' instead of 'florin' in
+the OEMEncoding table.
+ - quit.ps was omitted from the PC distribution.
+
+Changes the name of the dicttomark procedure to .dicttomark.
+
+Renames gs_2asc.ps as ps2ascii.ps, so it matches the names of the
+script files.
+
+</pre><h3><a name="V2.6.1_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - The pbmraw driver was writing out RGG instead of RGB values.
+ - The X11 driver used NULL in a place where it should have
+used None.
+ - For multi-file output, the GIF driver didn't write a header
+at the beginning of each file.
+ - The Epson driver didn't honor the -A4 compilation switch,
+didn't put (0,0) at the physical corner of the page, and was too
+liberal about using tabs instead of spaces.
+
+Replaces the color handling algorithms in the X Windows driver with
+new, much better ones.
+
+Makes the PC display drivers recognize the -A4 compilation switch,
+like the printer drivers.
+
+Adds new user-contributed drivers:
+ - A driver for Epson printers that use the ESC/P 2 control
+language, such as the Stylus 800.
+ - A driver for the Apple Dot Matrix Printer and Imagewriter.
+
+Adds a new get_xfont_device driver procedure. This is a
+backward-compatible change, since there is a sensible default.
+
+</pre><h3><a name="V2.6.1_Platforms"></a>Platforms</h3><pre>
+Fixes bugs:
+ - On VMS, gconfig.h didn't have #include "gsconfig.h" as its
+first line.
+ - gconfig.c compiled incorrectly on the RS/6000 because the
+compiler evaluated a constant of the form (x&lt;&lt;y)+z incorrectly.
+ - Quite a few files that used the mem... functions didn't
+include memory_.h, which caused trouble on some bsd4.2 systems.
+ - The definition of zfont_char_xglyph confused one of the AIX
+compilers.
+ - On VMS, DEC C allows extra arguments for fopen, but gcc doesn't.
+ - On the MS Windows platform, 2.6 used gdevwddb rather than
+gdevwdib; the latter is almost always faster.
+ - The PC .zip files didn't include the Windows .ICO and .RES
+files in either GSEXE.ZIP or GSFILES.ZIP.
+
+On PC platforms, adds an option (FPU_TYPE=-1) to optimize for
+machines lacking a floating point processor.
+
+</pre><h3><a name="V2.6.1_Fonts"></a>Fonts</h3><pre>
+
+Adds 4 new fonts contributed by URW. These have a URW copyright and
+are governed by the GNU License.
+
+Documents the fact that font names in Fontmap can be strings, not
+only names.
+
+Adds DingbatsEncoding as a predefined encoding (in addition to
+Standard, ISOLatin1, and Symbol).
+
+</pre><h3><a name="V2.6.1_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - memchr (used in zfile.c) isn't available on all platforms.
+ - languagelevel was defined as an operator rather than an
+integer.
+ - iccfont.c referred to name_StandardEncoding instead of
+#include'ing font.h and referring just to StandardEncoding.
+ - The CCITTFaxDecode filter didn't work on 32- (or 64-) bit
+machines, because of a bug in more_bits().
+ - The structures recording an allocation within the scope of
+a save could get allocated unnecessarily, because they weren't
+properly marked as free when an array was freed.
+
+Renames the following Ghostscript-specific operators by adding a '.'
+at the front: makeoperator, setdebug, setmaxlength, stringmatch,
+type1decrypt, type1encrypt.
+
+Adds a real implementation of glyphshow.
+
+</pre><h3><a name="V2.6.1_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - Discarding fractional character coordinates in the Type 1
+rasterizer led to some rendering anomalies (e.g., characters 1 pixel
+too high).
+ - If a font had a non-standard encoding (i.e., not
+StandardEncoding, ISOLatin1Encoding, or SymbolEncoding), Ghostscript
+would never invoke the platform font code.
+ - The RGB to HSB color conversion algorithms produced
+nonsensical values.
+ - struct cached_char_s was defined redundantly in gxcdir.h,
+causing compilation problems on some systems.
+ - 32-bit color devices didn't work properly on little-endian
+machines (arrange_bytes in gdevmem2 was wrong).
+ - The scaled font cache could confuse two fonts with the same
+UniqueID and different Encodings.
+ - Under many common circumstances (first use of a character
+was with stringwidth, the font was renamed, the font encoding was
+changed), xfonts would not be used.
+
+Adds gs_glyphshow.
+
+</pre>
+
+<h2><a name="Version2.6"></a>Version 2.6 (5/9/93)</h2>
+
+<p>The main new feature in this release is the ability to use platform
+fonts. It also adds many more Level 2 PostScript facilities.
+
+<h3><a name="V2.6_Documentation"></a>Documentation</h3><pre>
+
+Corrects some errors in the documentation of the makeimagedevice operator.
+
+Adds operand and result types to the comments at the beginning of all the
+operators.
+
+Adds new sections on installation in use.doc.
+
+Reinstates history.doc as a repository for old and no longer interesting
+history information.
+
+Adds a new file, devices.doc, with documentation for specific devices.
+
+Points out that font2c must be run with a Fontmap that includes the fonts
+being converted, and that its arguments must be quoted with "" on VMS
+systems.
+
+Notes that the font name in the Fontmap must be the same as the FontName
+in the font.
+
+Adds a list of the Level 2 facilities not provided by Ghostscript.
+
+Identifies bug-ghostscript@prep.ai.mit.edu as an alias for the
+gnu.ghostscript.bug newsgroup.
+
+Points out explicitly that -sOutputFile=- sends output to stdout, and
+requires using the -q switch.
+
+Documents the use of tar_cat to construct the Unix makefiles.
+
+Adds a new file, xfonts.doc, that describes the external font interface.
+
+Documents the fact that drivers must use gs_malloc and gs_free rather than
+malloc and free.
+
+Documents the *.sh (shell script) files.
+
+Adds brief documentation on some additional development tool .ps files.
+
+Documents the TEMP and GS_OPTIONS environment variable.
+
+Points out the need to run Windows in 386 Enhanced mode on machines
+that have less than 6 Mb of RAM.
+
+Consolidates documentation on compiler switches in make.doc (some of
+it had been in the unix*.mak files).
+
+</pre><h3><a name="V2.6_Procedures"></a>Procedures</h3><pre>
+Fixes bugs:
+ - \'s in arguments following -- were doubled.
+
+Includes the full set of filters automatically if the level2 feature
+is selected.
+
+Extends DEVICE_DEVS... up to DEVS9. Adds DEVICE_DEVS1 as well.
+
+Renames turboc.mak and tbcplus.mak as tc.mak and bc.mak.
+
+Makes @-files use the library path (GS_LIB, -I).
+
+Changed the Unix install script to use install &lt;file&gt; &lt;destfile&gt;
+rather than install &lt;file&gt; &lt;directory&gt;.
+
+Adds a GS_OPTIONS environment variable that acts like an implicit @-file
+at the beginning of the command line (i.e., may contain switches and
+initialization files).
+
+Renames sym__enc.ps as gs_sym_e.ps.
+
+Adds a user-contributed shell script for using Ghostscript with an
+H-P printer spooler.
+
+Adds level1.ps to the set of installed utility files.
+
+Extends the TEMP environment variable (the directory for scratch
+files) to work on Unix as well as MS-DOS.
+
+Changes the MS Windows makefile to generate gswin.exe rather than
+gs.exe, and the Watcom makefile to generate gs386.exe.
+
+Moves the "product" string from gs_init.ps to iinit.c.
+
+Adds a GS macro to the makefiles, to allow choosing the name of the
+executable.
+
+</pre><h3><a name="V2.6_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+* - font2c did the wrong thing (still) for fonts that didn't
+use StandardEncoding, ISOLatin1Encoding, or SymbolEncoding.
+* - impath.ps had a fatal bug (wrong operand order for
+charstack_write) that caused bdftops to fail.
+ - gslp didn't wrap or truncate lines.
+ - gslp didn't handle tabs in a second or subsequent column
+properly.
+ - The definition of ashow in gs_2asc.ps incorrectly undid the
+increment following the last character.
+ - The definition of awidthshow in gs_2asc.ps failed to pop
+two entries from the stack, and also tested the character against the
+wrong value.
+
+Adds a shell script (sysvlp.sh) that interfaces Ghostscript with the
+System V 3.2 lp interface.
+
+Adds ps2ascii and ps2epsi script/batch files.
+
+Adds a new utility, mergeini.ps, for concatenating all the
+Ghostscript initialization files into a single file, optionally
+removing comments and blank lines.
+
+Adds new switches to gslp:
+ -q: suppress all printed output.
+ --detect: check whether the file begins with %!, and if so,
+ interpret it directly as a PostScript file.
+ --first-page &lt;page#&gt;: replaces the former -P switch.
+ --last-page &lt;page#&gt;: replaces the former -Q switch.
+ --(heading|footing)-(left|center|right) &lt;string&gt;: define
+ headers/footers. # inserts the page number.
+ --margin-(top|bottom|left|right) &lt;inches&gt;: define margins.
+ --spacing &lt;n&gt;: for double, triple, etc. spacing.
+Also makes gslp ignore all the enscript flags it doesn't implement.
+
+Adds an option to wrfont.ps to do encryption at read-in time. (This
+allows much better compression of the standard Ghostscript fonts.)
+Changes bdftops to use this option.
+
+Changes gslp to accept wild cards in file names.
+
+Replaces landscap.ps with a new one contributed by a user.
+
+Changes the compression scheme used in ps2image to a much more
+effective one. Writing images is much slower than with the previous
+scheme, but reading is not.
+
+</pre><h3><a name="V2.6_Platforms"></a>Platforms</h3><pre>
+Fixes bugs:
+ - SCFDTAB and SCFTAB were omitted from the VMS module lists.
+ - Function prototypes were not being used with the Watcom
+compiler.
+ - On MS-DOS platforms, if the value of the TEMP variable had
+a trailing : or \, Ghostscript appended a \ anyway.
+ - Under Windows, changing the size or resolution of the image
+closed and reopened the window.
+ - Ghostscript would not build correctly with the Watcom compiler
+if DOS4G=quiet was not set, because the DOS4GW copyright message was sent
+to stdout.
+* - Finally gets Ghostscript to run properly on the RS/6000, by
+adding a compiler bug workaround to arc_add and arc_either.
+* - Finally gets Ghostscript to compile properly on Sun SPARC
+systems, by adding a compiler bug workaround in scan_number.
+
+Changes the default MS-DOS configuration from 8086/8088 to 80286.
+
+Adds all the SuperVGA drivers to the BC++ and Watcom executables
+(except for the VESA driver in the Watcom executable).
+
+Adds a makefile (msc.mak) for the Microsoft C/C++ 7.0 platform. This
+is currently a MS-DOS, not a MS Windows, platform.
+
+Changes gp_enumerate_files_init so it takes a gs_memory_procs *, not
+separate proc_alloc_t and proc_free_t arguments; also, it must
+enumerate precisely the requested set of files, not a superset. THIS
+IS A NON-BACKWARD-COMPATIBLE CHANGE. It affects all gp_*.c files.
+
+Adds the P*M drivers and bit.dev to the standard configuration on
+Unix platforms.
+
+Changes the Watcom makefile so it uses the WATCOM environment variable (by
+default) as the base directory for the Watcom executables.
+
+Adds the MS Windows COMMDLG.DLL and SHELL.DLL files to the set of
+files incorporated in GSEXE.ZIP, since the new MS Windows code uses
+them, and they aren't provided with Windows 3.0.
+
+Makes major revisions to the MS Windows platform and driver code, to
+support the gsview front end, and also to remove the dependence on the
+Borland EasyWin library. NOTE: Compiling the MS Windows code now requires
+Borland C++ 3.1 (not 3.0).
+
+Changes time_.h so that Ghostscript will compile and run on A/UX.
+
+Changes the MS-DOS implementation of file enumeration so it always
+treats \s in the file name as literal characters, not escapes, unless
+there are two \\s in a row. This does the most sensible thing given
+the DOS file naming conventions.
+
+Adds a %pipe% file device under Unix.
+
+Adds a makefile for Watcom C under MS Windows. This is very preliminary;
+in particular, NO display output is supported.
+
+</pre><h3><a name="V2.6_Fonts"></a>Fonts</h3><pre>
+Fixes bugs:
+ - fonts.mak referred to ncri and puti rather than ncrri and
+putri.
+ - cyr and cyri had the wrong protection.
+ - The Hershey fonts left the font on the stack when they were
+loaded.
+* - The FontName of an aliased font was the original FontName
+from the file, not the alias.
+* - Fontmap.BTS had incorrect entries for AvantGarde-Demi and
+AvantGarde-DemiOblique.
+ - Ghostscript pushed userdict, rather than an empty writable
+dictionary, onto the stack when loading a font, leading to name clashes.
+
+Adds a new cfonts.mak with a full set of rules for compiling all the
+standard Ghostscript fonts (except the Hershey fonts) into C.
+
+Adds UniqueIDs to the Hershey fonts, and removes the UniqueIDs from
+the Hershey entries in the Fontmap.
+
+Adds a new Fontmap for VAX/VMS with DECWindows/Motif.
+
+Changes MakeHersheyFont so it takes the encoding as an additional
+parameter, and changes the Hershey-Symbol font to use SymbolEncoding.
+
+</pre><h3><a name="V2.6_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - The !@*&amp;^%#@$ PCL drivers *still* didn't do the right thing
+about vertical spacing: the &lt;ESC&gt;*p+&lt;n&gt;Y command works on all PCL 3,
+4, and 5 printers *except* the LaserJet IIp.
+ - The cdj driver used recursive macros (height, t_margin,
+b_margin) that not all compilers handled correctly.
+ - The djtc driver used some assignments including =*, which
+some compilers dislike.
+ - The S3 driver wouldn't compile correctly with the Watcom
+compiler.
+ - The makefile entry for the S3 driver was wrong.
+ - The SuperVGA drivers returned an error, rather than using
+the highest available resolution, if a too-high resolution was
+requested.
+ - The GIF driver produced an incorrect header for images
+wider or taller than 32K pixels.
+ - The GIF driver wasn't able to handle multi-page documents
+correctly.
+ - The margins on the DeskJet were still not correct.
+ - Some ANSI C compilers rejected a complex expression in
+gdevpccm.c.
+ - Printer drivers didn't recover cleanly from problems in
+opening the scratch files.
+ - The BJ-10e driver used the same name `out' for a label and
+a variable.
+ - The SCO ODT compiler couldn't handle sizeof(ppdev-&gt;fname).
+ - The Epson driver used the wrong value for ESC in the
+initialization string.
+
+Adds new drivers:
+ - Drivers to produce MS Windows .BMP format output.
+ - A new ATI Wonder display driver (800x600, 16 colors) and a
+1024x768 mode for the existing driver.
+
+Adds new user-contributed drivers:
+ - A driver for the Tektronix 4693d color printer. This carries a
+university copyright.
+ - A driver for the SPARCprinter.
+ - A driver for the Canon BJ200 printer.
+ - A driver for the IBM ProPrinter.
+ - A driver for the DEC LJ250 printer, which has a
+PaintJet-compatible mode.
+ - A replacement driver for the Sony NWP533.
+ - A driver that writes TIFF/F (Group 3 fax) files. This carries
+an external copyright.
+ - A driver for the C.Itoh M8510 printer.
+ - A driver for the Okidata MicroLine 182 9-pin dot-matrix printer.
+ - A Hercules Graphics driver.
+ - A driver for printers under MS Windows.
+ - A driver for direct frame buffer addressing under SCO Unix
+and Xenix and AT&amp;T SVR4.
+
+Changes the get_bits driver procedure so it always reads a single
+scan line, and optionally does not copy the data. THIS IS A
+NON-BACKWARD-COMPATIBLE CHANGE. However, this change does not affect
+any existing printer driver, since these all go through intermediate
+routines in gdevprn.c.
+
+Changes gdevprn.h, and the relevant printer drivers, so that -DA4
+will change the default paper size for any printer driver.
+
+Allows the use of NULL or 0 for default procedures in the driver
+procedure vector.
+
+Adds an optional map_cmyk_color procedure to the driver procedure
+vector.
+
+Changes the Epson driver so that the minimum amount of white space
+required to use a tab is an easily changed parameter.
+
+Changes the BGI driver to use separate segments for the Borland
+device drivers, to reduce the risk of overflowing a segment.
+
+Adds an optimization option (normally enabled) to the PGM and PPM drivers
+such that they revert to PBM or (for PPM) PGM if the page can be
+represented that way.
+
+Adds a new (optional) driver procedure to get the procedure vector
+for external fonts.
+
+Adds an argument to gp_open_printer to indicate whether the file should be
+opened in binary or text mode. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE.
+However, this change does not affect any existing printer driver, since
+these all go through intermediate routines in gdevprn.c.
+
+Changes the LN03/LA50/LA75 driver so it uses a text record mode to open
+the output file under VMS (by adding an argument to gp_open_printer to
+indicate this.)
+
+Allows (indeed, encourages) drivers to use far_data to declare the device
+structure, primarily to avoid overflowing the 64K data segment under MS
+Windows. Changes the file output drivers and many of the printer drivers
+to declare their device structures as far_data.
+
+Replaces the AT&amp;T 3B1 driver with an updated version (from the same
+contributor).
+
+Changes the Epson BJ driver and the SPARCprinter driver so they align
+the (0,0) point of the page with the physical corner of the paper
+rather than with the origin of the printable area.
+
+Removes the EIZO MDB-10 driver, since it caused complications for the
+EGA and VGA drivers and is not a widely used device.
+
+</pre><h3><a name="V2.6_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - The entry for the copydevice operator in the operator table
+was initialized incorrectly.
+ - printobject and writeobject didn't handle nested arrays.
+ - restore didn't properly close the current file (if
+appropriate), causing an invalidaccess error.
+ - buildfont required the presence of a valid, 4-element
+FontBBox. (The Red Books say it's required, but Adobe interpreters
+don't require it; some DEC software generates a 3-element FontBBox.)
+ - resourceforall had several bugs; it didn't do even
+approximately the right thing. There were quite a few other problems
+with the implementation of resources.
+ - setfont, makefont, and scalefont would accept a font with
+no FID entry.
+* - Loading a .PFB font left the file open (until the next
+restore or quit).
+ - The default (null) font didn't include a PaintType entry,
+which some PostScript files expected.
+* - The ASCIIHexDecode filter sometimes thought the underlying
+stream was at EOF even when there was (at most one buffer's worth of)
+data left.
+ - iscan.c included &lt;ctype.h&gt; before std.h, causing type name
+clashes on some systems.
+* - save and restore didn't handle the pointers in the graphics
+state correctly; for example, the current font wasn't restored
+properly.
+ - Binary object sequences at the top interpreter level didn't
+get executed immediately.
+ - On high-resolution devices, the default transfer function
+converted almost-white grays to very light grays rather than white.
+ - The `string' operator was checking the string length
+against max_uint rather than max_ushort, which could cause invalid
+lengths to be accepted.
+* - deviceinfo caused a stackunderflow error.
+* - idiv could give incorrect results for quotients or
+remainders that didn't fit in 24 bits.
+* - The ASCII85Encode filter padded trailing bytes with 1's
+rather than 0's.
+* - The ASCII85Decode filter had a typo that produced incorrect
+results if there were exactly 2 trailing bytes.
+ - findlibfile didn't push a copy of the file name if it was
+the name of a special (%) file.
+ - setduplexmode was not defined in statusdict, causing
+/undefined errors from some poorly designed input files.
+* - The CCITTFaxDecode filter had several bugs in 2-D decoding.
+* - The ASCII85Decode filter didn't read ahead to detect EOD if
+it fell precisely on a buffer boundary.
+ - If a file mentioned on the command line redefined `start',
+Ghostscript would run the new definition rather than the built-in one
+after processing all the files on the command line.
+ - The SCO ODT compiler couldn't handle the conditionals in the
+ngetc (iscan.c) and sgetc* (stream.h) macros.
+ - makefont and scalefont didn't cache the PostScript dictionaries
+for scaled fonts.
+ - Changing the elements of the Encoding of a font dynamically
+didn't take effect if the character was already cached.
+ - makefont and scalefont didn't add the (undocumented) OrigFont
+and ScaleMatrix entries to the new font.
+* - findfont insisted that the font name be a string or a name.
+ - filenameforall could cause an incorrect transfer of control
+if no files matched the pattern.
+* - ISOLatin1Encoding had hyphen instead of minus at code 45.
+ - restore didn't reset saved_cbot and saved_ctop correctly;
+as a result, some freed blocks could get abandoned rather than put on
+the free list.
+ - Some numerical constants in zarith.c assumed that longs
+occupied 32 bits.
+
+Implements additional Level 2 features:
+ - %device%file names (only the "os" device is provided).
+ - &lt;~ ~&gt; for ASCII-85 strings.
+ - Binary error messages.
+ - BuildGlyph.
+ - CCITTFaxDecode filter entries EndOfBlock, Rows, and
+ (undocumented) FirstBitLowOrder.
+ - {set/current}{color/colorspace/overprint/colorrendering/
+ blackgeneration/undercolorremoval}. (See below under library
+ for limitations.)
+ - Decode for the dictionary form of image.
+ - File access modes a, r/w/a+.
+ - Font entries CDevProc, Metrics2, and WMode.
+ - Font operators cshow, findencoding, rootfont, and
+ setcachedevice2.
+ - glyphshow (emulated with PostScript code).
+ - languagelevel.
+ - realtime.
+ - setbbox.
+ - (Subset of) system and user parameters.
+ - xshow, yshow, and xyshow.
+ - XUIDs for fonts.
+
+Moves the installation of systemdict and the initial allocation of
+globaldict (if relevant) and userdict from gs_init.ps to iinit.c.
+
+Makes Level 2 features dynamically selectable through the
+.setlanguagelevel operator; disables all Level 2 features
+(specifically including automatic dictionary expansion) unless the
+level2 feature is included and active.
+
+Adds the .knownget operator for speeding up system procedures.
+
+Renames the type1addpath operator as .type1addpath; adds an optional
+left side bearing argument; changes it so it does not do the
+setcachedevice, fill, or stroke, but does do a moveto for the
+character width. Changes Type1BuildChar appropriately. (All this is
+needed to make WMode work.)
+
+Removes the .setmetrics operator, which is no longer needed.
+
+* Changes the meaning of the user_errors argument to gs_run_file and
+gs_run_string so that -1 means always return on an error, 0 means
+only return on an error not within a `stopped'.
+
+Adds all the necessary checks and operators for local/global VM, but
+doesn't actually implement local/global mode.
+
+Changes setcachedevice back so that it requires 4 numbers on the
+stack rather than a 4-element array. (It was changed to be the other
+way in release 2.0, but that was because I didn't realize that fonts
+had to have an executable FontBBox, and some of the Ghostscript fonts
+didn't.)
+
+Changes all the filter operators from .filterxxx to .filter_xxx, and
+removes the need to enumerate them in gs_init.ps.
+
+Adds .oserrno and .oserrorstring operators for getting the last OS
+error (in the current context).
+
+Changes gs_finit similarly to gp_exit. Adds gs_exit_with_code that
+takes both an exit status and a Ghostscript error code.
+
+Changes the name of name.h to iname.h.
+
+Adds support for the `interrupt' error (but doesn't provide any standard
+way of generating one, other than through the gp_check_interrupts polling
+function).
+
+Adds copyright to systemdict.
+
+Changes the spot halftone screen to an elliptical screen supplied by
+Berthold K. P. Horn.
+
+Adds a check that the first token in gs_init.ps is an integer. In
+conjunction with other code in gs_init.ps, this should catch all attempts
+to run Ghostscript with a gs_init.ps that doesn't match the executable.
+
+Changes all relevant occurrences of sizeof to size_of in order to
+work with the buggy SVR4.2 C compiler.
+
+Changes gp_exit so it is passed both the Ghostscript error code and
+the exit status code as arguments. This is backward-compatible for
+all but the pickiest compilers.
+
+Adds a call on gp_check_interrupts() after fwrite calls in the stream
+machinery. This prevents lengthy console output from locking out
+other programs.
+
+Changes a couple of occurrences of op_def_ptr in iinit.c to work around a
+`const' bug in Sun's SC1.0 compiler.
+
+Adds a special hack in the 'where' operator to work around a bug in Aldus
+Freehand 2.x.
+
+Changes all empty argument lists from () to (void), which is the ANSI
+C syntax.
+
+Adds a hack to ignore ^[ and ^D^[ tokens, to work around the prologue
+and epilogue emitted by the MS Windows LaserJet IV driver.
+
+Defines the processcolors operator, which should not be needed, but
+is required because of bugs in Lotus 1-2-3 and Adobe PhotoShop.
+
+Changes the allocator (ialloc) to fill all allocated and/or freed
+blocks with a marker if gs_alloc_debug is set, as gs_malloc and
+gs_free already do.
+
+</pre><h3><a name="V2.6_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - 16-bit memory devices stored the bytes of each pixel in the
+wrong order.
+ - copy_mono did the wrong thing when copying 1 source chunk
+to 2 destination chunks with polarity inverted. (This probably
+didn't affect any actual uses of Ghostscript.)
+* - The compile-time check for ints being 2 or 4 bytes used the
+#error directive, which most compilers don't recognize.
+ - arc and arcn didn't do the right thing for degenerate
+(single-point) arcs, or for arcs drawn in the "wrong" direction that
+were multiples of 360 degrees.
+ - charpath did the wrong thing with Type 3 fonts.
+ - copyscanlines gave an error if the buffer was too large.
+ - The copy_mono procedure (used for text and halftones) for
+2- and 4-bit-per-pixel memory and printer devices incorrectly
+incremented the destination pointer after every pixel, instead of
+only after every byte.
+ - The fill_rectangle procedure (used for graphics) for 2- and
+4-bit-per-pixel memory and printer devices, if given any color other
+than all 0's or all 1's, multiplied the X coordinate and width by 2
+or 4, thereby filling the wrong area.
+ - The use of 'data' in both gs_type1_data and gs_font upset
+the VMS compiler.
+ - The `Flex' feature wasn't implemented for Type 1 fonts,
+which caused serious errors in rendering some fonts that use it.
+(Unfortunately, some Adobe fonts violate the specification, so we had
+to implement Flex to always use a curve.)
+* - Stem width adjustment was too eager, producing very strange
+effects on small characters with tight curves (a curve point could
+get snapped to the other side of the open area).
+ - The allocator didn't align structures adequately on
+machines where sizeof(long) or sizeof(char *) was 8 bytes.
+ - The test for IEEE floating point gave an incorrect
+(negative) result on machines where sizeof(long) was 8 bytes.
+ - genarch.c assumed that the result of subtracting two
+pointers was an int, leading to a garbage arch.h file on systems
+where this was false.
+* - The Type 1 font interpreter incorrectly reset the adjusted
+path position to be the same as the unadjusted path position whenever
+it returned control to the client (in particular, for callothersubr),
+leading to discontinuities and distortions in the character shapes.
+* - Accented characters in Type 1 fonts often misplaced the
+accent to the left.
+ - gsmisc.c wouldn't compile on machines with 64-bit pointers,
+because _pad was 0, and ANSI compilers don't accept 0-length arrays.
+ - pathforall got confused if the client procedures modified
+the path.
+ - The command list file representation limited X and Y
+coordinates to 15 bits.
+* - stroke could produce spikes or other garbage for mitered
+joins as a result of stroke adjustment.
+ - The params_size field of the null device was wrong, so
+scaling the null device produced unpredictable results.
+
+Changes monobit memory devices to always store data big-endian. This
+eliminates byte-swapping, at the cost of slightly slower rendering.
+
+Removes the memswab* routines, since they are no longer needed.
+
+Implements gs_cshow_[n_]init, which provides support for cshow, and
+gs_xyshow_[n_]init, which provides support for {x,y,xy}show.
+
+Adds an optional left side bearing argument to gs_type1_interpret.
+
+Changes gs_type1_interpret so it does not do a setcachedevice, fill,
+or stroke, but only appends the character outline to the path
+(including a moveto for the character width.)
+
+Removes gs_setmetrics, which is no longer needed.
+
+Implements gs_setcachedevice2, which provides support for
+setcachedevice2.
+
+Speeds up gsave/grestore by allocating, deallocating, and copying as
+much as possible of the graphics state in a single operation.
+
+Implements gs_{set/current}{color/colorspace/overprint/colorrendering/
+blackgeneration/undercolorremoval}. Device, indexed (with table, not
+with procedure), CIE, and (substituted) separation colors are
+supported; some of the setup code for patterns is also present.
+
+Increases the size of temporary file names in gdevprn.h from 30
+characters to 60.
+
+Changes the character cache to be allocated dynamically in chunks.
+
+Splits gxcache.c into gxccache.c (fast "hit" code) and gxccman.c (all
+other code).
+
+Changes all occurrences of sizeof to size_of in order to work with the
+buggy SVR4.2 C compiler.
+
+Adds a new concept of "external fonts", which allow a driver to
+substitute its own fonts for the ones obtained through the normal
+font machinery.
+
+Changes all empty argument lists from () to (void), which is the ANSI
+C syntax.
+
+</pre>
+
+<hr>
+
+<h2><a name="Version2.5.2"></a>Version 2.5.2 (9/20/92)</h2>
+
+<p>This is yet another bug fix release to (finally!) get the PCL drivers
+working again.
+
+<h3><a name="V2.5.2_Procedures"></a>Procedures</h3><pre>
+Fixes bugs:
+ - The comment in devs.mak for cdjcolor said it used 8 bits
+per pixel, rather than the correct 24.
+
+Adds gsbj/dj/lj/lp and gslp.ps to the installed files on Unix
+systems.
+
+Removes dps.dev and level2.dev from the standard configurations on
+all platforms, since the presence of the setcolor operator was
+causing the output of some common applications to fail.
+
+</pre>
+
+<h3><a name="V2.5.2_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+ - font2c produced invalid output for any font that didn't use
+StandardEncoding or ISOLatin1Encoding.
+
+</pre>
+
+<h3><a name="V2.5.2_Platforms"></a>Platforms</h3><pre>
+Fixes bugs:
+ - gp_sysv.c required an extern long timezone.
+
+</pre>
+
+<h3><a name="V2.5.2_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - The PCL drivers were *still* doing the wrong thing about
+zeroing the seed row for Mode 3 compression.
+ - Setting the resolution with -r didn't work under Windows.
+ - The Windows driver got a stack overflow if it was ever
+asked to display a bit image wider than 32 pixels.
+ - The Tseng driver didn't sense the model (ET3000 vs. ET4000)
+correctly.
+
+Adds the eps9high device to the standard MS-DOS makefiles.
+
+</pre>
+
+<h3><a name="V2.5.2_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - gs_run_string used gs_user_errors (a global) rather than
+user_errors (its argument) to control error handling. (This does not
+affect normal operation of Ghostscript, only use as a server.)
+ - eexec popped the top element of the dictionary stack
+afterwards even if the encrypted code had pushed something onto it.
+This caused problems for some badly written PostScript code.
+ - The printed form of real numbers didn't always include a
+decimal point, causing compatibility problems.
+
+Makes -s and -d work for device properties.
+
+Increases the cache limit on large-memory systems.
+
+Adds a check to ensure that the revision of gs_init.ps matches that
+of the interpreter.
+
+Adds the .knownget operator.
+
+</pre><h3><a name="V2.5.2_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - The raster computation in clist_render_init, and the
+computation of state_size in clist_open, didn't widen an operand to
+long, leading to possibly incorrect operation for 24-bit-per-pixel
+printers on MS-DOS systems.
+ - The flatness was set too large for Type 1 characters,
+leading to visible straight edges instead of curves at large sizes.
+ - Type 1 fonts that contained out-of-range coordinates would
+produce garbled output. (This was not a problem with the standard
+Ghostscript fonts, or with Adobe Type Manager fonts.)
+ - gschar0.c wouldn't compile, because it referred to a
+non-existing structure member penum-&gt;chr. (This had no effect on
+Ghostscript's operation.)
+ - The curve flattener required line segments to be no more
+than 8 x the flatness in length, leading to an enormous number of
+segments.
+ - pathforall would cause an addressing fault if the path
+consisted of only a moveto.
+
+Refactors some header files so that std.h is always included before
+any system header file that might include sys/types.h.
+
+Adds logic for removing top and bottom blank rows in cached
+characters. (This is the beginning of compression for the cache.)
+
+Changes the arguments of memswab2/4 from char * to byte *, for more
+accurate type conformance.
+
+</pre>
+
+<h2><a name="Version2.5.1"></a>Version 2.5.1 (9/11/92)</h2>
+
+<p>This is the usual bug fix re-release.
+
+<h3><a name="V2.5.1_Procedures"></a>Procedures</h3><pre>
+Fixes bugs:
+ - The makefile rules for compiled fonts had a circular
+dependency.
+ - `make begin' didn't work properly on all platforms.
+
+Ensures that all batch files end with a newline. (The absence of the
+newline was confusing the GNU diff program.)
+
+Documents the fact that the -dASCIIOUT switch no longer exists.
+
+</pre><h3><a name="V2.5.1_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+ - pstoppm didn't `bind' its internal procedures.
+ - grestoreall would undo the output device selected by
+pstoppm.
+
+Changes the utilities for reading and writing Type 1 character
+outlines so they can work with stack representations as well as
+arrays.
+
+Removes the pfbtogs.ps, phonbook.ps, and showpbm.ps utilities from
+the distribution.
+
+Adds a gslj utility to parallel gslp and gsdj.
+
+</pre><h3><a name="V2.5.1_Platforms"></a>Platforms</h3>
+
+<pre>
+Adds the DeskJet 500C drivers (cdeskjet/cdj*) to the MS-DOS / Borland
+C++, MS-DOS / Watcom C/386, and MS-Windows configurations.
+
+Removes the PCX file driver from the MS Windows executable, because
+the static data segment exceeded 64K.
+
+Makes some changes in the Unix System V platform file (gp_sysv.c) and
+in time_.h and unixtail.mak to accommodate the 3B1.
+
+</pre><h3><a name="V2.5.1_Fonts"></a>Fonts</h3><pre>
+Fixes bugs:
+ - The Charter-Italic font was named bchi.pfa rather than
+bchri.pfa.
+ - The Cyrillic fonts (cyr.gsf, cyri.gsf) were omitted from
+the fileset.
+ - Ghostscript incorrectly assumed that all Type 1 fonts had a
+FontInfo dictionary.
+ - .loadfont used false PFBDecode, so a few .PFB fonts would
+get errors because the first eexec byte would be whitespace.
+
+Changes font2c and its supporting code so that compiled fonts are
+location-independent.
+
+</pre><h3><a name="V2.5.1_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - The margins for the H-P printers were still wrong.
+ - The H-P drivers accidentally cleared the compression seed
+row when switching compression modes.
+ - Some of the H-P drivers used the wrong control codes for
+skipping blank lines.
+
+Adds user-supported drivers for the AT&amp;T 3B1 console device, and for
+the NEC P6+ printer.
+
+Updates the SunView driver with a new version supplied by a(nother)
+user.
+
+Changes the X Windows driver so the Ghostscript window doesn't get
+input focus.
+
+Changes the common code for the printer drivers so that if it can
+allocate a full bitmap but there isn't at least a minimum amount of
+memory left afterwards, it switches to banding.
+
+Changes the Windows driver so it handles devices with more than 8
+bits per pixel. (We haven't been able to test this.)
+
+Adds a read-only PageCount device property (for printer devices
+only).
+
+Changes all Aladdin-supported drivers to clip drawing requests to the
+((0,0), (width,height)) rectangle of device space.
+
+</pre><h3><a name="V2.5.1_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - Closing a NullEncode filter always gave an ioerror.
+ - If a single-character name occurred 1 character before the
+end of an input buffer, the character would be doubled.
+ - The procedures in gs_statd.ps didn't use "bind".
+ - Setting the page size didn't work properly with devices
+with rotated coordinate systems.
+ - If an error occurred, and the error object wasn't the last
+element of its procedure, the interpreter would re-execute the error
+object after running the error handler.
+ - Memory devices didn't get resized if HWSize was changed,
+leading to out-of-bounds memory accesses.
+
+Moves revision and revisiondate from gs_init.ps to iinit.c. Adds a
+-v switch that just prints these out.
+
+Arranges things so that if Ghostscript is reading from a pipe (`-'
+switch on the command line) and encounters an error, it exits with
+status 1 rather than 0.
+
+Changes the interpreter interface so the caller explicitly passes a
+pointer for storing an error object.
+
+</pre><h3><a name="V2.5.1_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - The automatic adjustment of the scaling for variant paper
+sizes caused the image to get expanded when it should have been
+contracted, and vice versa.
+ - The curve flattener insisted that each line segment be no
+more than 2 x the flatness in length, leading to an enormous number
+of segments even when not necessary for accuracy.
+ - flattenpath and strokepath discarded a trailing moveto.
+ - strokepath treated "0-width" lines as really having a width
+of zero, rather than one pixel.
+ - Buffered devices weren't closed and reopened if the amount
+of buffer space was changed.
+ - stroke used the line cap at the beginning of each subpath
+even if the subpath was closed.
+
+Removes the requirement that the clipping rectangle fall in the
+non-negative quadrant of device space. (This was causing problems
+for Ghostview, but removing it required adding the extra clipping
+step to the drawing routines in the drivers.)
+
+</pre>
+
+<h2><a name="Version2.5"></a>Version 2.5 (8/18/92)</h2>
+
+<p>This version adds Type 1 hinting, CCITTFax encoding and decoding, and
+Microsoft Windows support, as well as the usual minor improvements
+and bug fixes.
+
+<h3><a name="V2.5_Procedures"></a>Procedures</h3><pre>
+Fixes bugs:
+ - GSIMPATH, SLZWD, and SLZWE were omitted from the VMS
+makefiles, and GSIM2OUT was not removed.
+ - landscap.ps messed up the current path.
+
+Adds new switches:
+ -dSAFER disables file writing and directory modification.
+ -dESTACKPRINT causes errors to print the execution stack with
+== instead of =.
+ -sOutputFile=&lt;string&gt; replaces -sOUTPUTFILE (which is still
+recognized) for setting the output file or pipe for the default
+(printer) device.
+ -sPAPERSIZE=&lt;sizename&gt; initializes the paper size.
+ -dBufferSpace=&lt;number&gt; sets the buffer size for the default
+(printer) device.
+
+For Unix systems, changes the directories in GS_LIB_DEFAULT from
+`pwd` to $(gsdatadir), i.e., normally $(datadir)/ghostscript, where
+datadir is normally /usr/local/lib.
+
+Adds a note in the header file to the effect that the X Windows
+driver expects to find header files in $(XINCLUDE)/X11, not in
+$(XINCLUDE).
+
+Changes -q so it defines QUIET as true instead of null (so it can be
+used in the middle of the command line as well as at the beginning).
+
+Renames the history.doc file as NEWS.
+
+</pre>
+
+<h3><a name="V2.5_Utilities"></a>Utilities</h3>
+
+<h3><a name="V2.5_Platforms"></a>Platforms</h3><pre>
+Fixes bugs:
+ - The stack size was not getting increased on the Watcom
+platform.
+
+Removes "b" from the scratch file opening modes in gp_unix.c and
+(conditionally) in gdevprn.c, to pacify the DECstation Ultrix system.
+
+Adds a makefile (bcwin.mak) and a platform file (gp_mswin.c) for
+Microsoft Windows.
+
+On MS-DOS platforms (including Windows), uses the TEMP environment
+variable to designate the directory for scratch files.
+
+Changes std.h so that the VMS C compiler uses function prototypes and
+'const'.
+
+Changes the VMS cc makefile so it doesn't use ansi2knr.
+
+</pre><h3><a name="V2.5_Fonts"></a>Fonts</h3><pre>
+Fixes bugs:
+ - findfont left an extra entry on the stack if it couldn't
+find the default font.
+
+Renames bchi, ncri, and puti as bchri, ncrri, and putri, to conform
+with the naming scheme for other fonts.
+
+Adds $(CCFLAGS) to the command line used for compiling fonts.
+
+Converts the .pfa fonts (CharterBT, IBM Courier, and Utopia) to .gsf,
+by removing eexec encryption and also removing some mysterious
+unmapped characters from Courier. This makes these fonts work with
+DISKFONTS.
+
+Changes the implementation of compiled fonts so they are read-only
+and sharable (no external references). (They are, however, not
+position-independent.)
+
+Provides a way to use compiled fonts on platforms that limit the
+number of characters in an identifier.
+
+Adds public-domain Cyrillic and Cyrillic-Italic fonts.
+
+Adds a 'userdict begin' to .loadfont, because Type 3 fonts produced
+by Fontographer expect a writable dictionary on the top of the stack.
+
+Changes definefont for Type 1 fonts to insert UnderlinePosition and
+UnderlineThickness entries in FontInfo if they are absent, because
+many word processors incorrectly assume these entries are present.
+
+</pre><h3><a name="V2.5_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - The documentation in use.doc said that the densities for
+9-pin Epson printers were 60x60 to 240x60, rather than 60x72 to
+240x72.
+ - gdevprn.c smashed one byte beyond the end of the string
+given as the OutputFile device property.
+ - The X11 driver used XVisualIDFromVisual, which is not
+defined in X11R3.
+ - The SunView driver modified the input data, which was
+declared as const.
+ - The LaserJet IIP and III drivers shifted the page 185
+pixels to the left and 0.25" down, because the initialization string
+was incorrect.
+ - The PCX driver wrote 16-bit values using the byte ordering
+of the platform, rather than always LSB first.
+ - For vertical spacing, the LaserJet and DeskJet drivers used
+a command that spaces N/300", rather than N scan lines, but gave it a
+parameter in scan lines.
+ - The VESA driver didn't allocate a full 256-byte buffer for
+reading the mode information from the BIOS, causing the stack to get
+smashed by newer VESA implementations.
+ - The VESA driver didn't use the scan line length returned by
+the BIOS, causing garbage output for some cards and some resolutions.
+ - The generic printer driver didn't free the bitmap when
+closing the device, if it fit entirely in memory.
+ - The PaintJet driver allocated its data areas on the stack
+instead of with gs_malloc.
+ - The generic printer driver didn't attempt to increase the
+buffer size if it was too small.
+ - The band list driver didn't split large bitmaps properly,
+leading to garbled characters at high resolutions.
+ - The GIF and PCX drivers used a color map that often turned
+gray colors into non-grays.
+
+Changes the default put_props procedure so that if the device is
+open, setting HWSize and/or HWResolution closes the device and
+reopens it.
+
+Adds a driver for Microsoft Windows 3.n.
+
+Updates the 'cdj' and 'dj500c' DeskJet 500C drivers with new versions.
+(This are user-contributed drivers.)
+
+Changes gdev_prn_put_props so OutputFile can be changed dynamically.
+
+Updates the DEC LN03 driver to also handle the LA50 and LA75. (This
+is a user-contributed driver with a FSF copyright.)
+
+Changes the LaserJet/DeskJet driver so that -DA4 in the makefile
+makes A4 paper the default. The driver now also sends an appropriate
+page size selection command to the printer if the printer supports it.
+
+Changes all the Aladdin-supported drivers to return appropriate error
+codes rather than -1.
+
+Adds a driver for the S3 86C911, a PC graphics accelerator used in
+the popular Diamond Stealth board. This is the first driver that
+uploads character bitmaps to a device; others will probably follow.
+
+Adds user-supplied code to the Epson driver so it will do triple
+passes on 9-pin printers for higher resolution.
+
+Adds user-supplied code for the PaintJet XL to the PaintJet driver.
+
+</pre><h3><a name="V2.5_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - zdps1.c didn't include alloc.h.
+ - On 32-bit systems, if maxlength of a dictionary was less
+than the actual allocated space, length could become larger than
+maxlength.
+ - flushfile didn't actually flush data when reading.
+ - The ASCII85Decode filter signalled EOF prematurely.
+ - The scanner interpreted .3D.glorp as the number 0.3, rather
+than as a name.
+ - Closing a file freed the stream structure, creating
+dangling references if there were other file objects pointing to the
+same stream.
+ - eexec called handleerror if an error occurred, instead of
+letting the error propagate to an enclosing stopped.
+ - gs.h made perror illegal, instead of defining it in terms
+of strerror.
+ - One-character names weren't being allocated at
+initialization, so they could be left dangling after a restore.
+ - Internal gsaves (i.e., the ones in show and setcachedevice)
+didn't also save istate, so setfont inside a BuildChar procedure
+might cause the font outside to get changed.
+ - The allocator incorrectly freed objects in the current
+chunk that were older than the current save.
+ - mark was just an object, rather than an operator, so 'bind'
+didn't bind it. (This is theoretically a problem for null, true, and
+false also, but even more unlikely to be a problem in practice.)
+ - packed_get didn't cast packed integers to int, so negative
+integer elements of packed arrays came out wrong.
+ - quit just did a gs_exit, instead of returning to the driver
+in an orderly way.
+ - Because check_type_access checked for errors in the wrong
+order, sometimes type errors were reported as access errors.
+ - eq didn't check for stack underflow.
+ - Some of the stream_procs structures weren't properly
+declared const, leading to link errors on VMS.
+
+Implements currentcolor, currentcolorspace, setcolor, and
+setcolorspace (for DeviceGray, DeviceRGB, and DeviceCMYK only).
+
+Implements the dictionary form of image and imagemask. All the pairs
+in the Decode array must be the same; Interpolate is ignored. The
+only supported color spaces are DeviceGray, DeviceRGB, and
+DeviceCMYK.
+
+Implements files as allowable sources for the image operators.
+
+Removes the index field from the name structure, moving it to the
+'size' field of name refs.
+
+Changes the unread/sungetc operation to require that the character be
+the same as the last one read from the file.
+
+Adds fflush calls to some debugging printout routines, because Unix
+sometimes buffers terminal output.
+
+Implements the CCITTFaxEncode and CCITTFaxDecode filters. Implements
+the general case of the SubFileDecode filter.
+
+Changes definefont to treat a UniqueID of 0 as equivalent to no
+UniqueID, because Fontographer output apparently often violates the
+specification in this way.
+
+Changes the default printer screen from 32.5 to 46 cells/inch. (The
+old value was appropriate for a hand-rotated cell with two spots in
+it.)
+
+Changes the utility routines to allow an integral real wherever an
+integer parameter is expected in a dictionary, because Fontographer
+produces fonts that violate the Adobe specification in this way.
+
+Adds a `dosio' feature that provides direct access to memory and to
+I/O ports under MS-DOS. (This feature is not included in the
+standard executables, of course.)
+
+Changes the default character cache limit to a 1/4" x 1/4" character
+at the default resolution, rather than basing it on the preallocated
+cache size.
+
+Removes support for t_color objects, which haven't actually been used
+for several releases.
+
+Implements setcmykcolor and currentcmykcolor as operators, so they
+will interact properly with setcolorspace and currentcolorspace.
+
+Changes the name of the file.h header file to files.h, to work around
+a bug in the VMS header library.
+
+Adds command line switches @file (to treat file as more command line,
+to get around the DOS 128-character command line limit) and -ffile
+(so one can specify file names that begin with - or @).
+
+Changes the PFBDecode filter so it takes an additional boolean that
+says whether or not to convert binary packets to hex. (Conversion to
+hex and back to binary accounted for a substantial amount of the time
+required to load .PFB fonts.)
+
+Splits off `copydevice' as a separate operator again.
+
+</pre><h3><a name="V2.5_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - In the VMS environment, string_.h used its own prototypes
+for the str... and mem... functions instead of &lt;string.h&gt;
+ - gx_alloc_char_bits declared cdsize as long, but didn't
+shorten it when passing it to shorten_cached_char.
+ - Stroking didn't suppress fattening of the lines.
+ - kshow didn't update the cached CTM information in the show
+enumerator when returning from the callout, so further characters
+could get drawn in the wrong place.
+ - When a memory device returned its initial matrix, it
+smashed the padding fields, which contained the interpreter's type
+information.
+ - setcachedevice didn't set the initial matrix in the cache
+memory device.
+ - image_set_rgb (in the image operators) didn't do a
+gx_color_from_rgb, so in principle one could sometimes get incorrect
+colors in an image.
+ - The decision about whether or not to cache a character
+bitmap incorrectly compared the character size against cmax rather
+than cdata_size.
+ - show didn't reset the in_cachedevice flag in the graphics
+state, so characters rendered by a recursive show were never cached.
+ - clip and eoclip didn't release the intermediate flattened
+clip path, causing memory to be lost.
+ - The tile_diff routine didn't handle the case of two
+identical tiles properly; this produced garbage in the band list
+file.
+ - stringwidth didn't round the character origin to an
+integral pixel; this interacted badly with hinting, causing
+improperly hinted characters to wind up in the cache.
+ - Bitmaps (including characters) were displaced, as well as
+being clipped, if they intersected the top of a clipping region.
+ - In gxclist and gdevmem1, the raster computation (although
+not the result) could overflow an int on 16-bit machines.
+
+Implements decoding (sample mapping) for image and imagemask.
+
+Implements hinting for Type 1 fonts, based on (but not copying) the
+algorithms from the X11R5 tape.
+
+Changes curve rasterizing to use sampling, rather than recursive
+subdivision, for characters. This produces noticeably better output.
+Speed penalty for non-cached characters is less than 10% at display
+resolutions, up to 50% for 300 dpi printers.
+
+Implements gs_setcmykcolor and gs_currentcmykcolor. These are
+semi-fake, since they simply convert the color to and from RGB, but
+the former does set the current color space properly.
+
+Changes clipping regions so they use the any-part-of-pixel rule
+rather than the center-of-pixel rule. This helps avoid dropouts when
+using very small regions.
+
+Implements stroke adjustment.
+
+</pre>
+
+<hr>
+
+<h2><a name="Version2.4.2"></a>Version 2.4.2 (5/8/92)</h2>
+
+<p>
+This is another quick release. It finally fixes rotated halftone
+screens, and cleans up a few minor problems from 2.4.1.
+
+<p>
+This release is being distributed only to beta testers and commercial
+licensees, since I don't want to be distracted from working on 2.5.
+
+<h3><a name="V2.4.2_Procedures"></a>Procedures</h3><pre>
+Fixes bugs:
+ - UTRACE still appeared in the VMS makefiles.
+ - The support files (*.bat, *.doc, *.gsf, *.ps, Fontmap,
+COPYING, README) weren't included in the MS-DOS tar file.
+ - The Unix install script didn't install landscap.ps.
+
+Replaces the type1imagepath operator with PostScript code (impath.ps,
+type1ops.ps) based on the new .imagepath operator.
+
+Renames LICENSE as COPYING.
+
+</pre><h3><a name="V2.4.2_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+ - pcharstr.ps had an occurrence of Subrs rather than /Subrs,
+causing it to not print the Subrs, or to get an error if there were
+none.
+ - font2c.ps didn't get the const declarations for string
+dictionaries quite right.
+ - The missing newline at the end of gsbj.bat confused GNU
+diff.
+ - ansi2knr would go into an infinite loop if a statement
+exceeded its internal buffer size.
+ - Compiled fonts would get processed by ansi2knr, which
+messed them up.
+
+</pre><h3><a name="V2.4.2_Platforms"></a>Platforms</h3><pre>
+Fixes bugs:
+ - Ghostscript didn't supply equivalents for rename and
+gettimeofday, which some System V platforms lack.
+ - The missing newline at the end of gp_dosfb.c confused GNU
+diff.
+
+Changes the Borland makefiles so that stack checking is only enabled
+if DEBUG or TDEBUG is set.
+
+</pre><h3><a name="V2.4.2_Fonts"></a>Fonts</h3>
+
+<pre>
+Changes the names of the Utopia fonts from utrg/utb/utbi/uti to
+putr/putb/putbi/puti, for consistency with the rest of the font names.
+Changes cour/courb/courbi/couri to ncrr/ncrb/ncrbi/ncri likewise.
+
+Replaces the Charter fonts with the CharterBT fonts donated by
+Bitstream to the X11R5 distribution.
+
+Adds font aliasing capability to Fontmap. Replaces
+Courier-[Bold]Oblique and ZapfChancery-MediumItalic by aliases.
+
+Changes the FontBBox of the Hershey fonts to be an executable, rather
+than a literal, array.
+
+</pre><h3><a name="V2.4.2_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - The GIF driver omitted a `private' on the definition of
+gif_print_page.
+ - The GIF driver wrote 16-bit values using the byte ordering
+of the platform, rather than always LSB first.
+ - George Cameron's DeskJet 500C driver had an incorrect
+control sequence for skipping blank lines.
+
+Adds 'const' in many places, including the tile and bitmap arguments
+of the tile_rectangle, copy_mono, and copy_color driver routines.
+THIS IS A DRIVER INTERFACE CHANGE. (Printer drivers are not
+affected, since they don't implement these routines.)
+
+Adds a driver for the Trident TVGA.
+
+</pre><h3><a name="V2.4.2_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - alloc_free sometimes incorrectly chose to put an unaligned
+block in an old segment on a freelist.
+ - The default undercolor removal function returned its
+argument rather than returning 0.
+
+Adds NullEncode and SubFileDecode to the standard filters, since
+bdftops uses the latter.
+
+Adds RunLengthEncode and RunLengthDecode to the optional filters.
+
+Removes the type1imagepath operator. (It is still available as
+PostScript code, impath.ps.) Replaces it with a simpler outline
+tracing operator .imagepath.
+
+Adds 'const' in many places.
+
+Makes fileposition (but not setfileposition) legal for NullEncode
+filters.
+
+Changes the default transfer function for high-resolution devices
+from the identity function to the square root function.
+
+Moves array_get from zgeneric.c to iutil.c.
+
+Changes uses of fopen to add a "b" to the access mode, rather than
+relying on the _fmode global variable on MS-DOS platforms.
+
+Allows use of the -Z switch even when gsmain.c wasn't compiled with
+-DDEBUG, since other modules might have been.
+
+Reorganizes gs.c and gsmain.c so that the latter can be used in
+server environments.
+
+Replaces all uses of stdin/out/err with gs_stdin/out/err.
+
+Makes the number of permanent entries on the dictionary stack a
+parameter, to allow inserting globaldict in the future.
+
+Changes BlueShift in the Type 1 font Private dictionary to allow real
+numbers. (This differs from the Adobe specification, but at least
+one commercial font has a real number for BlueShift.)
+
+</pre><h3><a name="V2.4.2_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - The doubling check in init_ht (gxht.c) still sometimes
+thought there was enough room to double the tile when there actually
+wasn't.
+ - Rotated halftone screens didn't work.
+ - gxarith.h used #ifdef vax, rather than #if
+!arch_floats_are_IEEE, to test whether IEEE floats were being used.
+ - pathforall didn't report a trailing moveto.
+
+Replaces gs_type1imagepath with gs_imagepath.
+
+Allows sOUTPUTFILE=-, meaning output to stdout.
+
+Adds 'const' in many places.
+
+Replaces all uses of stdin/out/err with gs_stdin/out/err.
+
+</pre>
+
+<h2><a name="Version2.4.1"></a>Version 2.4.1 (4/21/92)</h2>
+
+<p>This is a quick release to fix minor problems discovered in 2.4, and
+to add a few improvements that didn't quite make it into 2.4. It
+also adds GIF and PCX file support.
+
+<h3><a name="V2.4.1_Procedures"></a>Procedures</h3><pre>
+Fixes bugs:
+ - Some makefile dependencies, and the ccgs script, caused trouble
+for parallel versions of `make'.
+ - Compiling genarch with -O with gcc on the RS/6000 produced a
+buggy executable.
+
+Fixes some minor problems in make.doc.
+
+Adds DEVICE_DEVS2..5 to handle long device lists.
+
+Removes the need to set GS_RUN_EXE when using the Watcom compiler on
+MS-DOS systems.
+
+Gets rid of gs_ccfnt.ps, merging its function into gs_fonts.ps.
+
+Gets rid of gconfig.ps; this information is now compiled in gconfig.c.
+
+</pre><h3><a name="V2.4.1_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+ - The palette for pstoppm in 8-bit mode didn't contain all 8
+primary colors.
+ - font2c used just values_ to mean &amp;values_[0]; some compilers
+couldn't handle this.
+
+Makes font2c insert `const' in many appropriate places.
+
+</pre><h3><a name="V2.4.1_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - The SunView driver had not been updated properly for 2.4 and was
+pretty thoroughly broken.
+ - None of the printer drivers worked properly with the Watcom
+compiler, because stdprn was doing \n -&gt; \r\n substitution.
+ - If the generic printer driver couldn't allocate the requested
+size command list buffer, it gave up rather than trying to allocate a
+smaller buffer.
+ - The SuperVGA drivers (except for the VESA driver) didn't
+work with the Watcom compiler, because a couple of places in the
+drivers weren't truncating the offset of "segmented" pointers
+properly.
+ - Some of the H-P used &lt;esc&gt;*b#Y rather than &lt;esc&gt;*p+#Y for
+vertical positioning; this apparently is wrong, at least for the
+LJIIp.
+
+Removes the dependence of the X Windows driver on Xt, Xext, and Xmu. As a
+result, Ghostscript will not install a standard colormap itself, but it
+will use one if one is already installed.
+
+Adds a set of drivers for Portable Bitmap, Graymap, and Pixmap file
+formats.
+
+Adds drivers for monochrome, EGA/VGA-style, and SuperVGA-style PCX
+file formats.
+
+Adds drivers for monochrome and 256-color GIF file formats.
+
+</pre><h3><a name="V2.4.1_Fonts"></a>Fonts</h3><pre>
+Adds ZapfChancery-MediumItalic as a copy of ZapfChancery-Oblique.
+
+</pre><h3><a name="V2.4.1_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - A value with l_new set could 'escape' to save level 0 on a
+stack; if stored, it prevented the slot from being saved and restored
+properly.
+ - 16#7fffffff + 1 gave the floating point equivalent of -2^31, not
+2^31.
+ - The PFBDecode filter computed the packet length incorrectly if
+the 0x8000-bit of the length was set.
+ - 5-byte numbers in Type 1 CharStrings complained of a rangecheck
+if they exceeded 16 bits, rather than if they exceeded the integer part of
+a fixed.
+ - (, ), and \ appearing in file name arguments in the command
+line did not work properly.
+
+Adds 'const' in many places.
+
+Changes the random number generator to be the same as the one used in
+Level 2 PostScript (as reported by Ed Taft on comp.lang.postscript).
+
+Exits with code 1 rather than code 0 on an unrecoverable error detected at
+the PostScript level.
+
+Makes dictionaries expand automatically when they fill up.
+
+Adds gp_exit to complement gp_init.
+
+Changes dictionaries to always allocate a power of 2 entries on
+32-bit machines. Changes the name table to allocate indices
+scattered, so dictionary lookup doesn't have to do a multiply to
+scramble the index.
+
+Changes the handling of currentfile to do "shallow binding" so stack
+searching is almost never required.
+
+</pre><h3><a name="V2.4.1_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - arc and arcn got a numeric exception if the radius was zero.
+ - The undocumented 15 opcode in Type 1 fonts wasn't ignored.
+ - PaintType 3 wasn't allowed. (It isn't clear what it should
+mean; we treat it as equivalent to 0.)
+ - The VAX/VMS C compiler was generating incorrect code for the
+chi_bits and cmask macros in gdevmem, producing incorrect output.
+ - If the result of the slow algorithm for intersecting clipping
+paths was a rectangle, the wrong thing happened (cbox didn't get set).
+ - gx_path_is_rectangle didn't recognize open rectangles.
+ - clist_change_tile didn't check properly whether the tile
+size had changed, so changing the screen could produce invalid band
+files.
+ - The image operators did the wrong thing in the 1-for-1
+case, interleaving N bytes of data with 7*N bytes of garbage.
+ - stroke sometimes handled bevel and miter joins wrong in
+reflected coordinate systems.
+ - init_ht checked incorrectly whether there was enough room
+to Y-replicate tiles, so sometimes it did it when it shouldn't have.
+ - stroke sometimes thought lines were thin when they weren't.
+
+Adds 'const' in many places.
+
+Adds support for 2- and 4-bit-per-pixel memory devices.
+
+</pre>
+
+<h2><a name="Version2.4"></a>Version 2.4 (3/25/92)</h2>
+
+<p>This is a major release that adds SuperVGA support, support for
+Metrics,
+settable device properties, and incremental font loading. It also
+includes important performance improvements, based on rewrites of some key
+algorithms, and quite a few new Level 2 / Display PostScript facilities.
+
+<h3><a name="V2.4_Procedures"></a>Procedures</h3><pre>
+Fixes bugs:
+ - The rule for compiling gconfig.c didn't include the -I switches.
+ - .bat files were being distributed with a \n line terminator
+rather than \r\n.
+ - A CLOSE MODULE_LIST was needed after END_COMPILE: in the VMS
+command files.
+ - Unix systems couldn't handle multiple drivers with overlapping
+sets of files.
+ - -s&lt;name&gt; defined &lt;name&gt; as a null, rather than as an empty string.
+
+Adds gconfig.ps to the list of needed configuration files.
+
+Changes the way that the makefile handles nested .h files, so that it
+doesn't have to `touch' them.
+
+Adds the loadallfonts procedure to gs_fonts.ps.
+
+Changes the standard DOS configuration to include VGA, EGA, VESA, Epson,
+BubbleJet, and H-P printer drivers.
+
+Renames ghost.mak as gs.mak, and gdevs.mak as devs.mak.
+
+Adds a USE_ASM flag so that one can build a DOS version of Ghostscript
+without having an assembler.
+
+Splits off common code from the two MS-DOS makefiles into tccommon.mak.
+
+Replaces the COPYING and LICENSE files with a new LICENSE file containing
+version 2 of the GNU General Public License.
+
+Removes DEVICES and DEVICE_OBJS from the makefiles, since they are no
+longer needed.
+
+Adds a GS_DEVICE environment variable to supply a default device name if
+desired.
+
+Adds ansihead.mak and unix-ansi.mak, to parallel [g]cc-head.mak and
+unix-[g]cc.mak, for other ANSI C compilers.
+
+Changes the way that optional features are defined in the makefiles, so
+that they actually work.
+
+Adds support for the Watcom C/386 compiler.
+
+Allows # in the command line as equivalent to =, to compensate for
+brain-damaged MS-DOS shell.
+
+Adds -sOUTPUTFILE= to set the output file or pipe.
+
+Adds -dWRITESYSTEMDICT to leave systemdict writable.
+
+</pre><h3><a name="V2.4_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+ - pcharstr.ps insisted on having Subrs be present in the font.
+ - pcharstr.ps decoded negative numbers between -108 and -1131
+incorrectly.
+ - pfbtogs.ps didn't handle packets longer than 64K correctly.
+
+Changes the bdftops utility so that it makes entries for UnderlinePosition
+and UnderlineThickness in FontInfo, and so that it always records a
+FullName (the FontName if no other is provided).
+
+Changes the name of the pfbtops utility to pfbtogs, because groff already
+includes a program called pfbtops.
+
+Adds the gslp utility for doing "line printing" of text files, similar to
+enscript + lpr.
+
+Adds a new variable DITHERPPI that enables a different dither pattern,
+claimed to be better for printers.
+
+Adds the font2c utility for compiling Type 1 fonts into C, so they can be
+linked into an executable rather than loaded dynamically.
+
+</pre><h3><a name="V2.4_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - gdev_prn_copy_scan_lines was erroneously masking the last byte
+of data even on color printers, as was paintjet_print_page.
+ - The TruFax driver had a couple of compilation errors, since it
+hadn't been compiled in a while.
+ - The BGI driver sometimes didn't consult BGIPATH when looking for
+.BGI files.
+ - initclip did the wrong thing with memory devices.
+ - The BGI driver didn't look in BGIDIR for .BGI files.
+ - The Epson driver didn't set the right margin properly with
+ESC+Q.
+ - The BJ-10e driver was badly broken.
+ - gdev_prn_open/close_printer didn't reset the command list file,
+so it was taking quadratic time to print multi-page documents.
+
+Adds color to the SunView driver.
+
+Adds selectable resolution (75, 100, 150, or 300 DPI) to the
+DeskJet/LaserJet driver.
+
+Changes gssetdev so that drivers can specify special libraries to be
+loaded, as well as object files.
+
+Adds a driver for VESA-compliant SuperVGA displays. This driver handles
+all resolutions from 640 x 400 up to 1280 x 1024, in 256-color mode. The
+default is VGA resolution (640 x 480).
+
+Adds a driver for the ATI Wonder SuperVGA card, and for SuperVGA cards
+using the Tseng Labs ET3000 or ET4000 chip such as the STB VGA EM-16 and
+the Orchid ProDesigner II (256-color modes only).
+
+Adds a driver for Trident and Tseng Labs SuperVGA cards in 800 x 600,
+16-color modes (for cards with only 256K of memory).
+
+Adds user-contributed drivers for the Ricoh 4081, DEC LN03, Canon LBP-8II,
+and H-P DeskJet 500C printers.
+
+Adds Tim Theisen's Ghostview changes to the X11 driver.
+
+MAKES NON-BACKWARD-COMPATIBLE CHANGES TO THE DRIVER PROCEDURE INTERFACE as
+follows:
+
+ - Changes map_rgb_color and map_color_rgb to always work in a
+ 16-bit color value space, rather than a space defined by the
+ maximum number of distinct colors provided by the device.
+
+ - Adds an argument to the output_page procedure to indicate
+ whether the procedure is being called for copypage or
+ showpage, and a num_copies argument.
+
+ - Adds a gx_bitmap_id to the copy_ and tile_ procedures, so that
+ drivers can cache bitmaps in the server or device if they want
+ to.
+
+ - Removes fill_trapezoid and tile_trapezoid.
+
+ - Adds a new get_bits procedure for reading the bits back from the
+ driver buffer (when possible), replacing copy_scan_lines.
+ This procedure takes a new argument describing padding and
+ byte swapping, and returns a different value from
+ copy_scan_lines.
+
+ - Adds get_props and put_props procedures for accessing arbitrary
+ additional properties of devices. The interface is quite
+ complex, but provides a great deal of flexibility.
+
+See drivers.doc for details.
+
+Changes gdev_mem_bytes_per_scan_line to gdev_prn_bytes_per_scan_line.
+
+Adds a user-contributed driver for DigiBoard, Inc.'s fax software.
+
+</pre><h3><a name="V2.4_Fonts"></a>Fonts</h3>
+
+<pre>
+Changes Type1BuildChar so it uses the information from the Metrics
+dictionary in the font, if Metrics is present.
+
+Changes findfont (.loadfont) so it recognizes .PFB fonts and can load them
+directly. Also changes .loadfont to disable packing temporarily, because
+some fonts rely on procedures being writable (!).
+
+</pre><h3><a name="V2.4_Interpreter"></a>Interpreter</h3><pre>
+Fixes bugs:
+ - The hypot function is not available on some Unix systems.
+ - Ghostscript didn't flush and close files when exiting.
+ - In statusdict, the /margins procedure used .leftmargin, but
+/setmargins used .lmargin.
+ - An out-of-range putinterval would simply do nothing, rather than
+reporting an error.
+ - If an attempt to allocate a block larger than the allocator's
+chunk size (20K) failed, the allocator would erroneously think it had
+succeeded.
+ - The bind operator made the top-level procedure read-only, as
+well as interior procedures.
+ - gs.c copied 1 extra character for the value of strings defined
+on the command line with -s...=, which could smash the first byte of the
+next object in memory.
+ - copying a dictionary erroneously required the maxlength of the
+destination to be greater than or equal to the maxlength of the source,
+rather than the length of the source.
+ - undef didn't correctly decide when to mark a deleted entry as
+deleted vs. free; as a result, some keys couldn't be looked up properly
+after an undef.
+ - type1encrypt and type1decrypt didn't set the size of the result
+properly.
+ - cvi and cvr didn't allow leading or trailing whitespace in
+strings.
+ - cvs didn't cause an error if the destination string was too
+short.
+ - Many operators didn't check correctly for stack underflow (off
+by 1).
+ - `for' used reals, rather than integers, if the limit was a real,
+even if the initial value and increment were integers.
+ - `restore' didn't properly invalidate copies of the save object
+being restored from; `save dup restore restore' would crash.
+ - `restore' sometimes didn't undo stores into matrices that were
+stored into by operators. (The identity matrix always had l_new set.)
+ - readline gave a rangecheck if the input line exactly filled the
+string.
+ - `--' as the last switch on the command line caused a crash
+rather than an error message.
+ - On MS-DOS systems, filenameforall didn't handle patterns with a
+drive or directory specifier properly.
+ - stroke sometimes called gz_draw_line_fixed even if the line went
+outside the clipping box by 1 pixel.
+
+Changes the loop that binds procedure "operators" to entirely disable the
+handling of the typecheck error, rather than to use stopped. This cuts
+initialization time significantly, and also eliminates about 35K of wasted
+space (for saving the stacks).
+
+Changes the version "operator" so it returns 47.0. Adds "revision" to
+define the Ghostscript version # x 100.
+
+Adds gscurrentresolution and gssetresolution procedures for getting and
+setting the device resolution.
+
+Adds -r&lt;res&gt; and -r&lt;xres&gt;x&lt;yres&gt; as command line options for setting
+device resolution.
+
+Adds a facility for incrementally loading the individual CharStrings of a
+Ghostscript font from the disk. This can save a lot of memory, at the
+expense of slower rendering. (It is intended primarily for MS-DOS
+systems.)
+
+Changes findlibfile to return the name of the file that was actually
+opened, as well as the file itself, when the operation succeeds.
+
+Changes the name of the main entry to the interpreter from interpret to
+gs_interpret, because of a conflict with a Data General library procedure.
+
+Adds the .setmetrics operator to set the metrics for the current
+character for Type 1 fonts.
+
+Adds more LaserWriter-specific entries to statusdict.
+
+Gives names to all the internal `operators', so they will print out
+reasonably when an error occurs.
+
+Extends the status operator to accept a string and return file
+information, as defined for Level 2 PostScript.
+
+Adds the filter operator and some specific filters: ASCII85Encode,
+ASCII85Decode, ASCIIHexEncode, ASCIIHexDecode, eexecDecode, NullEncode,
+PFBDecode, and the null case of SubFileDecode.
+
+Extends the scanner to recognize the Level 2 &lt;&lt; and &gt;&gt; tokens.
+
+Adds a facility for extracting the text strings from a PostScript file and
+writing them out in a simple format (selected by -dASCIIOUT, implemented
+by gs_2asc.ps).
+
+Implements all of the remaining Display PostScript facilities that are
+also in Level 2 (i.e., everything in section A.1.3 of the PostScript
+Language Reference Manual, Second Edition, that is not also in section
+A.1.2). The virtual memory operations are all stubs; the new halftone
+options are not fully implemented.
+
+Changes makeimagedevice to use a string of gray or RGB values, rather than
+an array of color objects, to specify the palette. Removes
+currentgscolor and setgscolor from the interpreter, but leaves t_color
+objects in, since they may be useful later.
+
+Adds getdeviceprops and putdeviceprops for manipulating device properties.
+Currently defined properties for all devices: InitialMatrix, HWResolution,
+HWSize, Name. Currently defined properties for printers: BufferSpace,
+MaxBitmap, OutputFile. OutputFile allows |command for piping on Unix
+systems.
+
+Removes deviceparams and makedevice. Adds devicedefaultmatrix.
+
+Implements reversepath.
+
+Makes copy work on devices.
+
+MS-DOS specific
+- - - - - - - -
+
+Fixes bugs:
+ - iutilasm.asm wouldn't assemble with newer versions of MASM if
+CPU_TYPE was set to 286 or above.
+ - CPU_TYPE=386 didn't properly substitute the faster
+multiply/divide routines under Turbo C++ or Borland C++, only under the
+original Turbo C.
+
+</pre><h3><a name="V2.4_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - A curve whose first and last points were the same wouldn't get
+drawn at all.
+ - A bug in the Turbo C++ compiler generated bad code when shifting
+a long right by 1 bit.
+ - If stroking a dashed line ever encountered a segment that was
+completely blank, Ghostscript would indirect through a null pointer.
+ - arc and arcn gave an error if the radius was negative.
+ - stroke always used the general algorithm, even if the line was
+guaranteed to be thin.
+ - arc and arcn erroneously reduced the angles mod 360.
+ - Very large or negative 32-bit numbers in Type 1 fonts didn't
+work properly on MS-DOS systems (the ff0000 bits got set to zero).
+ - Color printer devices rendering entirely in memory only
+allocated a monochrome-sized bitmap.
+ - clip and eoclip didn't intersect the paths properly in the
+general case.
+ - charpath erroneously rounded the current point to an integral
+value, causing characters to be spaced improperly.
+ - The definition of max_color_param got some compilers confused.
+ - charpath always used quadratic time and space, and dropped all
+but the last character when used with a Type 3 font.
+ - Stroking a path with a 180 degree angle would incorrectly miter
+instead of beveling.
+ - Type 1 fonts used the current flatness for curves, which could
+produce bad (and inconsistent) results.
+ - Stroking a degenerate line segment produced incorrect results.
+
+Changes the character cache to use the UniqueID as the key, when
+available, instead of the font pointer. This dramatically improves
+performance when fonts are getting removed and reloaded because of page
+isolation with save/restore.
+
+Removes some unnecessary casts to (float) from gsmatrix.c and gscoord.c.
+
+Changes the Type 1 interpreter so that it rounds line and curve endpoints
+to the center of the nearest half-pixel, and omits null line segments.
+This both speeds up rendering at small sizes and improves output quality.
+
+Changes gs_deviceparams to return resolution as well as extent; changes
+gs_makedevice to accept resolution as well as extent.
+
+Replaces the algorithm for approximating circular arcs with curves with a
+more accurate one.
+
+Changes gs_point and gs_rect to use doubles rather than floats.
+
+Adds gs_setmetrics, for overriding Type 1 font metrics for the current
+character.
+
+Changes clipping to use lists of rectangles rather than path intersection.
+ This makes a big difference when clipping bitmaps (including characters).
+
+Changes the character cache to discard entries incrementally, rather than
+clearing the entire cache when it fills up.
+
+Changes the implementation of transfer functions to use a cached map,
+built when the transfer function is set. This makes transfer functions
+work properly in all situations, including images.
+
+Defines a .quit operator that takes an exit code, and redefines quit in
+terms of it.
+
+Adds support for 16-bit-per-pixel devices in gdevmem.
+
+Adds gs_copydevice and gs_deviceinitialmatrix; removes gs_deviceparams and
+gs_makedevice.
+
+Changes setscreen to ensure that the cell is always at least 4x4 pixels in
+size.
+
+</pre>
+
+<h2><a name="Version2.3"></a>Version 2.3 (8/28/91)</h2>
+
+<p>This is a minor release to fix two bugs and add the PaintJet driver,
+which
+didn't make it into 2.2.
+
+<h3><a name="V2.3_Utilities"></a>Utilities</h3><pre>
+Changes the pstoppm utility so it counts pages correctly even in the
+presence of arbitrary saves and restores.
+
+</pre><h3><a name="V2.3_Drivers"></a>Drivers</h3><pre>
+Adds a new, "supported" PaintJet driver.
+
+Changes the Epson driver to use ESC+D rather than ESC+\ for horizontal
+positioning, since many printers don't support the latter.
+
+Adds horizontal double-density (two-pass) printing to the Epson driver, so
+it can do 240 x 60 and 360 x 180 densities. (Vertical double density is
+not supported yet.)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version2.2"></a>Version 2.2 (6/1/91)</h2>
+
+<p>
+The purpose of this release is to add save/restore, and a few
+miscellaneous Level 2 P*stScr*pt features such as undef. It also includes
+major improvements in graphics quality and in handling of high-resolution
+printers.
+
+<h3><a name="V2.2_Procedures"></a>Procedures</h3><pre>
+Changes the version numbering to M.mpp rather than M.m.p, so that
+`version' can be a real number for those programs that insist on it.
+
+Renames ghost.ps as gs_init.ps, gfonts.ps as gs_fonts.ps, and statusd.ps
+as gs_statd.ps. The initialization files now all are named gs_*.ps.
+
+Renames gdevs.{c,h,tl} as gconfig.{c,h,tl}.
+
+Changes the relevant makefiles and command files so that a single build
+can contain several drivers that share code, e.g., the Epson driver and
+the DeskJet driver.
+
+Changes gs_init.ps so it relies on an external gconfig.ps file rather than
+making a specific test for the presence of Level 2 features.
+
+Adds an entry for uglyr.gsf to the makefile.
+
+Removes the distinction between CCA and CCNA, since most of the files now
+contain constructs that require non-ANSI compilation on MS-DOS platforms.
+
+Adds a `man' page for the ansi2knr utility.
+
+Changes the documentation (use.doc) to show how to use -sDEVICE=&lt;device&gt;,
+or the selectdevice procedure, to select devices by name.
+
+Adds DEVICE_DEVS to the makefiles (analogous to DEVICES and DEVICE_OBJS).
+This finally makes the make procedure fully automatic.
+
+Adds the name of the initialization file (gs_init.ps) as a
+platform-specific makefile parameter, GS_INIT.
+
+Removes the test program gt.{c,tr} from the fileset, since it is not
+useful to users.
+
+Moves the Symbol encoding vector to a separate file (symbol_e.ps), from
+which it is loaded when first used.
+
+Changes the error handler so it can handle errors that occur while reading
+the initialization files.
+
+Extends ansi2knr so it can handle `void' and `...' in parameter lists.
+
+Adds quit.ps to the set of installed files.
+
+MS-DOS-specific changes
+- - - - - - - - - - - -
+
+Adds the VGA and BGI drivers to the standard MS-DOS configuration, and
+makes VGA the default.
+
+Adds a `+' and a newline at the end of gs.tr, to avoid problems with file
+transfer programs or editors that add a newline at the end of files.
+
+Changes the name of msdos.mak to turboc.mak, and creates a new tbcplus.mak
+makefile for use with Turbo C++ and Borland C++.
+
+Changes the extension of the loader response files from .tl to .tr.
+
+Changes the default search path from c:/ghost and c:/ghost/fonts to c:/gs
+and c:/gs/fonts.
+
+Changes the directory separator from `|' back to ';', since it appears
+that DOS can handle a ; in a command line if it is prefixed with \.
+
+Unix-specific changes
+- - - - - - - - - - -
+
+Changes the uses of install in unixtail.mak so they only install a single
+file at a time, which is all that the standard Unix install allows.
+
+Removes the duplicate files (README/readme, LICENSE/license,
+COPYING/copying, Fontmap/fontmap).
+
+Changes the ld flags from LDPLAT to LDFLAGS.
+
+Adds XCFLAGS and XLDFLAGS. These are concatenated with CFLAGS and LDFLAGS
+respectively. The intention is that they be set from the `make' command
+line if desired.
+
+VMS-specific changes
+- - - - - - - - - -
+
+Repairs the omission of ZPACKED from the VMS build lists.
+
+</pre>
+
+<h3><a name="V2.2_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - The SunView driver produced semi-garbage on little-endian
+platforms (Sun-386i) because it didn't swap the bit order.
+ - The X driver would dump core if it couldn't open the display and
+the DISPLAY environment variable wasn't set.
+ - The X driver relied on white = 0, black = ones in a couple of
+places;
+ - The X driver would return an error, instead of clipping, if
+asked to display outside the window.
+ - The X driver would create inappropriately sized windows, because
+it believed the server's report of the screen resolution.
+
+Adds Fran Taylor's Private Eye driver to gdevs.mak and the fileset (not
+supported by Aladdin Enterprises).
+
+Adds Neil Ostroff's TruFax driver to gdevs.mak and the fileset (not
+supported by Aladdin Enterprises).
+
+Makes the scratch file template for the printer drivers a per-platform
+quantity (gp_scratch_file_name_template). Puts the default scratch files
+for Unix in /usr/tmp rather than /tmp.
+
+Changes the SunView driver to prevent the Ghostscript window from being
+destroyed (which badly confuses the interpreter).
+
+Extends the Epson driver to handle a variety of print densities in both X
+and Y, to handle 24-pin as well as 8-pin graphics, and to allow optional
+specification of default density in the makefile (gdevs.mak).
+
+Refactors the printer drivers so that a single driver handles both DeskJet
+and LaserJet. Adds LaserJet drivers that use the new compression modes on
+the LJ IId/IIp and LJ III.
+
+Changes all the printer drivers to use band lists rather than bitmap
+paging as the buffering method. (The individual drivers need only a
+one-line change to replace mem_copy_scan_lines with
+gdev_prn_copy_scan_lines with a different argument.)
+
+Adds the halftone phase as additional arguments to tile_rectangle and
+tile_trapezoid.
+
+Adds an entirely new and much simpler PaintJet driver, using the new band
+list interface.
+
+Adds margin information to the device structure. This is currently only
+relevant for printer devices.
+
+Adds BGIPATH and BGIUSER environment variables, allowing additional
+control of the BGI driver.
+
+Changes the x/y_pixels_per_inch member of the device structure from int to
+float.
+
+</pre>
+
+<h3><a name="V2.2_Fonts"></a>Fonts</h3>
+
+<pre>
+Patches gs_fonts.ps so definefont will add an isFixedPitch entry to
+FontInfo if there isn't one there.
+
+Removes the old "type 7 path" encoding code from gs_fonts.ps.
+
+Changes bdftops so it puts isFixedWidth and ItalicAngle entries in the
+FontInfo dictionary of the fonts it creates, since some P*stScr*pt
+programs rely on this.
+
+Changes bdftops so it synthesizes as many missing characters as possible
+out of the ones that are there (in particular: synthesizes accents out of
+punctuation marks, and accented characters using seac.) The results
+aren't all that good, but they're a lot better than having characters
+missing out of the font.
+
+</pre><h3><a name="V2.2_Utilities"></a>Utilities</h3><pre>
+Adds a pfbtops utility for converting .PFB fonts to standard Ghostscript
+fonts.
+
+Fixes bugs:
+ - ps2image didn't reset things properly between pages for
+multi-page documents.
+
+</pre><h3><a name="V2.2_Interpreter"></a>Interpreter</h3><pre>
+Makes Ghostscript recognize `-' alone as meaning that it should read from
+standard input as though it were a file. This allows Ghostscript to
+accept a pipe as input.
+
+Fixes bugs:
+ - seac in type1addpath used the current font's encoding, not
+StandardEncoding.
+ - type1decryptfile (eexec) didn't recognize binary (as opposed to
+hex) representation.
+ - Mentioning a name whose value was a no-access object caused an
+invalidaccess error.
+ - There was a bogus definition of `run' in zfile.c.
+ - The interpreter didn't handle end-of-file on stdin properly.
+ - Real numbers with an 'e' or 'E' but no decimal point were not
+recognized.
+ - On MS-DOS systems, inside strings, \ followed by a newline was
+not discarded properly.
+ - On MS-DOS systems, the long unsigned divide routine sometimes
+gave incorrect answers. Among other things, this caused alternate-radix
+numbers sometimes to crash the interpreter.
+ - cvrs didn't do the right thing about reals or negative integers.
+ - .echo.mode was being reset with def instead of store, and was
+defined in systemdict rather than userdict.
+ - setgray and settransfer didn't interact properly.
+ - 16#80000000 was being interpreted as a signed integer (and
+converted to a real) rather than an unsigned one.
+ - atan returned 0 sometimes when it should have returned 180.
+ - currentcmykcolor was defined wrong.
+
+Removes the filename operator, since no standard Ghostscript code used it,
+and it caused problems with some P*stScr*pt files.
+
+Implements new operators: filenameforall, selectfont (as a procedure),
+stringmatch, undef.
+
+Adds new standard procedures: selectdevice.
+
+For MS-DOS, requires that the operand and execution stacks be located in
+the data segment, and uses short pointers to address them. This produces
+significantly smaller and faster code. (These changes are not visible to
+users or library clients.)
+
+Changes the assignment of attribute bits, and adds new bits for
+save/restore and the garbage collector. Changes many of the macros in
+store.h to support save/restore. (These changes are not visible to users
+or library clients.) Implements save and restore.
+
+Moves type names from gs_init.ps to ghost.h and ztype.c.
+
+Moves error names from gs_init.ps to errors.h and iinit.c.
+
+Introduces gp.h as a documented interface to the platform-specific files.
+
+Adds the -- switch, which allows Ghostscript programs to take arguments
+from the command line.
+
+Changes many uses of the name `name' to something else, to avoid upsetting
+the Microsoft C compiler.
+
+Really implements packed arrays -- they took the same amount of space as
+ordinary arrays in previous versions.
+
+Changes exitserver in serverdict so that it just clears the stacks. (This
+isn't the correct fix, but it will do as a workaround.)
+
+Makes many miscellaneous small changes to pacify various compilers.
+
+Changes gs_fonts.ps so that when "quiet" mode is selected (-q switch),
+Ghostscript doesn't print anything when loading fonts or when substituting
+for undefined characters.
+
+Defines the name consisting of just a control-D as a no-op, because some
+P*stScr*pt-generating applications put control-Ds in their output.
+
+Implements halftone phase (sethalftonephase and currenthalftonephase
+operators).
+
+Removes the -E switch, since it is no longer useful.
+
+Changes the -w and -h switches to a single -g (geometry) switch, with
+usage -g&lt;width&gt;x&lt;height&gt;. Makes the -h switch, and a new -? switch, print
+usage help.
+
+Implements correct handling of stack overflow errors (makes an array out
+of the contents of the overflowing stack, and resets the stack, before
+invoking the error handler).
+
+Adds t_oparray (`operators' defined as procedures) and the makeoperator
+operator. This is so that programs like the Distillery that rely on all
+operators being bound by `bind' will work properly.
+
+Adds a new NOPAUSE flag to suppress the prompt and pause at copypage and
+showpage.
+
+</pre><h3><a name="V2.2_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - gs_type1_interpret didn't store the encryption state or the skip
+count before returning to let the client handle a seac or an endchar in
+the middle of a seac.
+ - The definition of the Type 1 operator ce_testadd was based on
+wrong information; the operator takes only 2 operands and does something
+unknown.
+ - mem_true24_copy_mono wasn't incrementing the destination pointer
+if the color was transparent, leading to garbled characters.
+ - gx_lookup_fm_pair would sometimes look at one entry beyond the
+end of the cached font/matrix pair area. (This probably had no practical
+effect.)
+ - gs_type1_interpret didn't save the current point when returning
+to the client for a callothersubr, causing some characters to be rendered
+displaced (such as some of the chess pieces in chess.ps).
+ - gs_setgray, gs_sethsbcolor, gs_setrgbcolor, gs_setflat, and
+gs_setlinewidth gave errors for out-of-range operands rather than forcing
+them into range.
+ - Transfer functions were not actually supported.
+ - The area fill algorithm failed on certain complex paths.
+ - The current point was sometimes defined when a BuildChar
+procedure was called.
+ - Stroking a degenerate line didn't display anything for round
+caps or joins.
+ - If the ends of a curve had exactly the same X coordinate, the
+curve sometimes wouldn't be displayed.
+ - Very thin lines that went outside the clipping region would
+sometimes be displayed as dashed, or not at all.
+ - The translation in a FontMatrix was ignored.
+ - Very wide, shallow lines would color extraneous pixels when
+using bevel or miter joins.
+ - Dashed lines didn't join properly at the beginning of a closed
+path.
+ - 0-degree arcs didn't add the appropriate line (possibly
+degenerate) to the path.
+ - gs_type1_interpret didn't reset the callsubr stack when starting
+the base character of a seac, which caused confusion if the accent's
+endchar fell inside a Subr.
+ - Non-monochrome memory memory devices weren't checking the
+arguments of the drawing procedures properly.
+ - The initial clipping rectangle for memory devices was being
+computed wrong.
+ - Null devices had a semi-infinite clipping rectangle instead of
+an empty one.
+ - gs_setlinewidth was treating negative arguments as zero, instead
+of taking the absolute value.
+ - imagemask with a dithered color used a solid color rather than
+the dithered one.
+
+Tweaks the area fill and image rendering algorithms to be a little more
+liberal with paint when being used to render characters.
+
+Changes the name of the 8-bit mapped color memory device from
+mem_mapped_color_device to mem_mapped8_color_device.
+
+Changes the memory devices so that on little-endian platforms, they can
+store the bytes within a word in either order. (Little-endian order
+allows efficient 32-bit updating, big-endian is required when displaying
+or writing to a printer or a file.)
+
+Implements halftone phase.
+
+Replaces the trapezoid fill algorithm with a much more accurate one
+inspired by a contribution from Paul Haeberli. This also changes the
+graphics convention back to filling only pixels whose center falls within
+the region to be filled.
+
+Changes the character cache to allocate headers and bits contiguously out
+of a single ring buffer.
+
+Changes gs_imagemask and gs_imagemask_init to take a thickness adjustment
+parameter.
+
+Changes gs_setcachedevice and gs_setcharwidth to take the graphics state
+as a parameter.
+
+Renames gx_device_memory_bitmap_size as gdev_mem_bitmap_size,
+mem_copy_scan_lines as gdev_mem_copy_scan_lines, and
+mem_bytes_per_scan_line as gdev_mem_bytes_per_scan_line.
+
+</pre>
+
+<hr>
+
+<h2><a name="Version2.1.1"></a>Version 2.1.1 (1/15/91)</h2>
+
+<p>This is a sub-release distributed to fix a few early bugs in 2.1,
+just in
+time for the new GNU master tape.
+
+<h3><a name="V2.1.1_Build_procedures"></a>Build procedures</h3><pre>
+Removes all of the (undebugged) Level 2 code from the fileset, as well as
+the (unused) file gdevvga.c.
+
+Changes the tar file so that the files are stored in the directory
+gs&lt;version&gt; rather than simply gs, e.g., gs211.
+
+</pre><h3><a name="V2.1.1_Interpreter"></a>Interpreter</h3><pre>
+Changes the scanner so that \ is recognized within strings regardless of
+whether the scanner is reading from a string or from a file. This is
+compatible with newer P*stScr*pt interpreters, and with the newer
+P*stSc*pt language specification, but not with the older specification in
+the original PostScript Language Reference Manual.
+
+</pre><h3><a name="V2.1.1_Drivers"></a>Drivers</h3><pre>
+Fixes the max_value macro in gdevmem.c so that compilers won't complain
+about a left shift by 32.
+
+Adds 'byte' to the list of types that gdevx.c must sidestep because header
+files use them.
+
+</pre><h3><a name="V2.1.1_Library"></a>Library</h3><pre>
+Changes the computation of penum-&gt;unpack in gsimage.c so as not to upset
+compilers that don't treat procedures and pointers to procedures as
+compatible types for conditional expressions.
+
+</pre>
+<h2><a name="Version2.1"></a>Version 2.1 (12/31/90)</h2>
+
+<p>This is primarily a bug fix release to clean up problems in 2.0. It
+also implements a first cut at the new color operators.
+
+<h3><a name="V2.1_Build_procedures"></a>Build procedures</h3><pre>
+Changes the separator for multiple directories in MS-DOS from ';' to '|',
+since there is no way to include a ';' in a command line.
+
+Adds &lt;dir&gt;/fonts to the default search path, where &lt;dir&gt; is c:/ghost for
+MS-DOS systems and `pwd` for Unix systems.
+
+Adds new documentation describing how to direct output to the printer.
+
+Changes the PROCTYPE and USE8087 options in MSDOS.MAK to CPU_TYPE and
+FPU_TYPE. The latter now indicates the type of FPU to generate code for,
+if any.
+
+</pre>
+
+<h3><a name="V2.1_Drivers"></a>Drivers</h3>
+
+<pre>
+Adds a driver for the Canon BubbleJet BJ10e.
+
+Modifies the EGA driver to handle (non-standard) frame buffers larger than
+64K. Adds drivers for the VGA and for the EIZO MDB-10 (a 1024 x 768 frame
+buffer).
+
+Changes the X driver so that it clips to the window dimensions, rather
+than reporting an error.
+
+Notes that the H-P LaserJet driver, like the DeskJet driver, works under
+Unix as well as MS-DOS.
+
+Adds support for 120 X DPI mode, and for the LQ-1500, to the Epson driver.
+
+</pre><h3><a name="V2.1_Fonts"></a>Fonts</h3><pre>
+Fixes bugs in bdftops:
+ - It was using /UniqueId instead of /UniqueID as the key for the
+font unique ID. This effectively disabled the font cache.
+ - The definition for .notdef was bogus -- an invalid CharString.
+
+Changes ghost.ps and gfonts.ps so that NullFont is the initial font,
+rather than Ugly.
+
+Arranges things so that when attempting a font substitution, if the
+default font is not found, NullFont is used instead.
+
+Extends bdftops so that if certain easily synthesized characters are
+missing from a font, it will attempt to synthesize them using available
+characters.
+
+</pre><h3><a name="V2.1_Interpreter"></a>Interpreter</h3><pre>
+Extends the -T switch to allow specifying a printf template for the
+arguments of the procedure being traced.
+
+Fixes bugs:
+ - /0 was interpreted as equivalent to 0 (a number) rather than a
+literal name.
+ - packedarray was defined as being like array, instead of like
+array followed by astore.
+ - Many minor and harmless type mismatches (and a couple of very
+minor genuine bugs) were upsetting the Apollo C compiler.
+ - exp was incorrectly failing in certain cases with a negative
+first argument.
+ - copyscanlines incorrectly required at least 4 elements on the
+operand stack, although it correctly only used the top 3.
+ - readhexstring incorrectly read 1 byte even if the string length
+was zero.
+ - Not every place that expected an array would accept a packed
+array.
+ - Very complex paths (and infrequently other things) could produce
+a 'memory leak'.
+ - / alone would skip following whitespace and gather following
+characters, rather than creating an empty name.
+ - ghost.ps left newerror defined as true in $error, which resulted
+in an erroneous error report if a program executed a 'stop'.
+ - The definition of exitserver in serverdict didn't clear the
+stack.
+ - currentfile returned an executable file, rather than a literal
+one.
+ - setfont for Type 1 fonts didn't check the UniqueID in the font
+dictionary against the one in the font's Private dictionary.
+ - A value stored in a dictionary under the key /xxx couldn't be
+retrieved using the key (xxx), and vice versa.
+ - charpath with a Type 1 font on a string containing a 'space'
+would produce garbage (it released the parent path inappropriately).
+ - bytesavailable did not work properly for terminal input.
+
+Changes the interface to the memory allocator so that it always takes an
+element size and an element count, like calloc instead of malloc (but note
+that alloc does *not* clear just-allocated blocks). Gets rid of the
+special 'dynamic' allocation procedures.
+
+Changes the random number operators to use a better implementation.
+
+Changes the idiv operator so it will accept any numbers, not just
+integers, as arguments. (The PostScript manual doesn't allow this, but
+implementations apparently do.)
+
+Provides semi-fake but usable definitions for all of the color PostScript
+extensions, including a real implementation of colorimage.
+
+No longer uses the name 'null', which is apparently reserved by Microsoft
+C. Makes a number of other minor changes required to pacify the Microsoft
+C compiler.
+
+Implements %statementedit and %lineedit. (%statementedit is equivalent to
+%lineedit, which is wrong.) Changes the interactive interpreter to use
+%statementedit.
+
+Changes the scanner to accept null, ctrl-K (vertical tab), and ctrl-L
+(form feed) as whitespace. Ctrl-L terminates a comment, null and ctrl-K
+do not.
+
+Allows a literal string as the 'proc' argument(s) for image, imagemask,
+and colorimage.
+
+Adds the following operators/procedures: arct, cleardictstack, deletefile,
+renamefile.
+
+Defines =print as a synonym for =, for the benefit of LaserPrep.
+
+Implements non-zero PaintType for the show operators (but not for
+charpath) for Type 1 fonts.
+
+Adds the ISOLatin1Encoding encoding vector.
+
+Renames currentcolor and setcolor as currentgscolor and setgscolor, to
+avoid conflict with the Level 2 PostScript names. Removes colorhsb,
+colorrgb, hsbcolor, and rgbcolor.
+
+</pre><h3><a name="V2.1_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - In a couple of places, a 0 was being passed as a pointer
+argument without casting, which confused the Microsoft C compiler.
+ - Image devices were not recognized properly in debugging
+configurations.
+ - Inverted-color monochrome image devices were not recognized
+properly.
+ - Images that exactly fill the drawing area rendered very slowly,
+because they erroneously used the general clipping algorithm.
+ - Images that are 1-for-1 with the device were incorrectly scaled
+by a factor of 8 in X.
+ - Rounding artifacts sometimes caused characters to be unevenly
+offset vertically by 1 pixel.
+ - Type 1 fonts that used the Flex feature resulted in garbled
+images.
+ - The show operator routines would incorrectly fill or stroke a
+path that existed at the time the show was started.
+ - setscreen truncated the cell size instead of rounding, which
+could produce off-by-1 anomalies.
+ - stroke would sometimes produce garbage (or nothing at all) for
+very narrow lines.
+ - path filling would only color the pixels whose centers fell
+inside the path: the Adobe specification requires coloring a pixel if any
+part of it falls inside the path.
+
+Changes the Epson printer driver so that it drives the printer directly
+rather than writing to a file.
+
+Changes pathbbox so that if the path is empty but there is a current
+point, it returns a null rectangle at the current point.
+
+Changes gs_image_init to take an additional parameter (after bps) giving
+the number of samples per pixel (1, 3, or 4), and an indication of whether
+the samples for each pixel are together or separated (-3 or -4).
+
+Renames the gs_image_data and gs_imagemask_data procedures as gs_image and
+gs_imagemask, and removes the old versions of the latter.
+
+Adds gs_colorimage.
+
+Replaces Snoopy's color dithering algorithm with one contributed by Paul
+Haeberli.
+
+Changes gs_setgray, gs_[set]hsbcolor, and gs_[set]rgbcolor so that they
+coerce arguments outside the range [0..1] back into the range, instead of
+signalling an error.
+
+Makes a number of minor changes required to pacify the Microsoft C
+compiler.
+
+Changes gs_arcto so that if the last argument is a null pointer, the
+tangent points are not returned.
+
+Removes gs_type1addpath, which is not useful. (Clients must call
+gs_type1_init and gs_type1_interpret directly.)
+
+Implements the 'seac' opcode for Type 1 fonts, allowing fonts with accented
+characters to display properly.
+
+Implements the undocumented 'testadd' opcode for Type 1 fonts, which is
+used by some Adobe fonts.
+
+Renames gs_currentcolor and gs_setcolor as gs_currentgscolor and
+gs_setgscolor. Removes gs_colorhsb, gs_colorrgb, gs_hsbcolor, and
+gs_rgbcolor.
+
+</pre>
+
+<hr>
+
+<h2><a name="Version2.0"></a>Version 2.0 (9/12/90)</h2>
+
+<p>The main purpose of this release is to add fonts, support for
+multiple
+devices, and imaging into memory. It also fixes a number of miscellaneous
+bugs. (Unfortunately, accurate records of the bugs fixed are not
+available.) The changes were so extensive that we chose to increment the
+major version number.
+
+<h3><a name="V2.0_Miscellaneous"></a>Miscellaneous</h3><pre>
+Doesn't attempt to open the .MAP file on Unix systems.
+
+Adds mention of statusd.ps to interp.doc.
+
+Notes that Turbo C 2.0, not 1.5, is required for building the MS-DOS
+version.
+
+Adds a DEVICES= line to the makefile, and allows multiple devices.
+
+Documents, in interp.doc, the X Windows resources that Ghostscript
+recognizes.
+
+Adds three PostScript masters to the fileset: chess.ps (+ cheq.ps),
+golfer.ps, and escher.ps.
+
+</pre><h3><a name="V2.0_Drivers"></a>Drivers</h3><pre>
+Changes the names of all the device drivers. See gdevs.mak for the
+updated list.
+
+Adds a (working) driver for SunView.
+
+Adds drivers for the Sony NeWS frame buffer, and the Sony Microsystems
+NWP533 printers. These drivers were contributed by users, so we aren't
+prepared to answer questions about them.
+
+Adds a driver for the Borland Graphics Interface (BGI) for MS-DOS systems.
+Note that to use this driver with a non-EGA/VGA display, you need a .BGI
+file appropriate for your hardware. (The Ghostscript executable includes
+the EGA/VGA driver.)
+
+Adds a driver for Epson printers. The driver has only been tested on an
+LX-800, and on an H-P DeskJet in FX-80 emulation mode, but may work on
+other models. The driver could be adapted to work on Unix systems, but as
+distributed, it only works on MS-DOS systems.
+
+Adds a driver for the Hewlett-Packard DeskJet printer. The driver could
+be adapted to work on Unix systems, but as distributed, it only works on
+MS-DOS systems.
+
+The X Windows driver no longer waits for the user to type a character
+before bringing up the initial display.
+
+Adds information to drivers.doc describing how to change the definition of
+the device structure and procedure table.
+
+Extends the tile_rectangle and tile_trapezoid driver procedures to
+interpret color0 = color1 = gx_no_color_index as meaning that the tile is
+actually colored, not a mask.
+
+</pre><h3><a name="V2.0_Build_procedures"></a>Build procedures</h3><pre>
+Changes the tar file so it puts everything in a directory called gs.
+
+Removes the -ansi switch for gcc (this was causing problems with &lt;math.h&gt;
+on some systems).
+
+Changes LDPLAT to the string -X, which is appropriate for most Unix
+systems (but not for SunOS 4.n).
+
+Adds EXTRALIBS to the makefile, for specifying additional libraries to be
+linked in.
+
+Adds a 'clean' target for 'make', to get rid of all temporary files, the
+binaries, and the executable.
+
+Changes names of system-specific files from gp-xxx.c to gp_xxx.c.
+
+Adds support for VMS (gp_vms.c and ghost.dcl).
+
+Creates a new file gdevs.mak, and reorganizes the other makefiles, so that
+the choice of which device driver(s) to include is isolated in a single
+line in the platform-specific makefile.
+
+Changes the standard MS-DOS makefile so it builds for 8088/86 (not 80386),
+with neither -DNOPRIVATE nor -DDEBUG.
+
+Changes the name of the MS-DOS makefile from dos-ega.mak to msdos.mak, and
+the Unix makefiles from ux-[g]cc-x.mak to unix-[g]cc.mak.
+
+Updates drivers.doc to describe how to add new drivers in gdevs.mak.
+
+Removes gdevs.ps: the drivers are now responsible for specifying the size
+of the imaging region.
+
+</pre><h3><a name="V2.0_Interpreter"></a>Interpreter</h3><pre>
+Adds a makefile macro GS_LIB_DEFAULT and an environment variable GS_LIB to
+define a search path for the library (initialization and font) files, and
+implements the -I switch for the same purpose (replacing -sLIB=, which was
+never actually implemented). See interp.doc for details.
+
+No longer clears the operand stack between interactive inputs. No longer
+prints the contents of the operand stack after every input in debug mode.
+
+Doesn't "eat" the character that the user types to proceed after a
+showpage, unless it's an isolated &lt;return&gt;.
+
+Changes the prompt so that it says
+ GS&gt;
+if the operand stack is empty, or
+ GS&lt;n&gt;
+if there are n &gt; 0 elements on the operand stack.
+
+Adds -w and -h switches to the command line, equivalent to -dWIDTH= and
+-dHEIGHT= except that they require numeric arguments.
+
+Adds -q (quiet startup) switch to the command line, which suppresses some
+initial messages and also has an effect equivalent to -dQUIET.
+
+Fixes bugs:
+ - = and == caused an error on some kinds of objects if the object
+didn't have read access.
+ - cvs didn't print operator names.
+ - The definition of dynamic_begin in iscan.c caused the DEC VMS C
+compiler to produce incorrect code.
+ - mul didn't return a correct (real) result when multiplying a
+very large integer by an integer that wasn't very large.
+ - eq and ne didn't work on files, fonts, save objects, and some
+operators.
+ - The scanner would sometimes blow up on floating point numbers
+beginning with a '.'.
+ - flushfile didn't pop its argument from the stack.
+ - put and putinterval would store into a packed array.
+ - a few operators didn't check properly for stack underflow.
+ - cvrs produced wrong output for radix values greater than 10.
+ - The scanner would convert upper-case letters in alternate-radix
+numbers wrong on Unix systems.
+ - String comparisons other than equality often produced the wrong
+result if the strings were of different lengths.
+ - An ifelse as the last thing inside a forall would confuse the
+execution stack.
+ - There were some omitted casts and 'private' declarations that
+made the GNU compiler unhappy.
+ - There was a memory leak in the image[mask] operators that caused
+516 bytes to be permanently lost each time one of them was used.
+ - Quoted strings of length greater than 50 and less than 100 would
+get mangled when being read in.
+ - The scanner didn't consume the whitespace character following a
+token, so programs that read data out of the program file could get
+confused.
+ - Under rare circumstances, an object of size between 249 and 255
+bytes could get allocated on top of another object.
+
+Allows bind to bind packed arrays, even though they aren't normally
+writable.
+
+Changes the length operator to allow a name as the argument. (The
+PostScript manual doesn't allow this, but implementations apparently do.)
+
+Changes the setcachedevice operator to allow the bounding box to be
+specified as a 4-element array instead of 4 scalars. (The PostScript
+manual doesn't allow this, but implementations apparently do.)
+
+Removes a line from ghost.ps that accidentally disabled the font cache.
+
+Implements memory devices (makeimagedevice, copyscanlines, and makedevice
+for image devices). makeimagedevice is implemented only for 1, 8, 24, and
+32 bits per pixel.
+
+Changes the deviceparams operator so it pushes a mark on the stack below
+the parameters. This is to allow for devices that have more than the
+standard set of parameters.
+
+Replaces defaultdevicename with two new operators, getdevice and
+devicename.
+
+Adds a flushpage operator that flushes any outstanding buffered output to
+the screen. This is not the same as copypage: on printers, copypage
+actually prints a page, whereas flushpage may do nothing; on displays,
+flushpage and copypage may both flush output to a server.
+
+Adds an unread operator for pushing back a character into a file.
+
+Adds a description of proposed grayimage and colorimage operators to
+ghost.doc, even though they aren't implemented yet.
+
+Changes the name of the currentfileposition operator to fileposition.
+
+Removes the framedevice operator, since the new device operators supersede
+it.
+
+Adds a writeppmfile operator, for writing the contents of a memory device
+to a ppm file.
+
+Makes Ghostscript work even when the &gt;&gt; operator doesn't sign-extend
+negative numbers. (This has not been tested.)
+
+Adds the Symbol encoding to ghost.ps.
+
+Adds two new file-related operators, filename and findlibfile. See
+ghost.doc and interp.doc for details.
+
+Adds type1encrypt and type1decrypt operators for manipulating Adobe Type 1
+encoded fonts.
+
+Changes the imagecharpath and addcharpath operators to type1imagepath and
+type1addpath. These operators now work with the Adobe Type 1 font
+encoding.
+
+Adds the type1decryptfile operator for reading Adobe Type 1 encrypted
+fonts.
+
+</pre><h3><a name="V2.0_Library"></a>Library</h3><pre>
+Fixes bugs:
+ - curveto and lineto didn't check for the current point being
+defined.
+ - stringwidth would fail if there was no current point.
+ - There were omitted casts that made the GNU compiler unhappy.
+ - Line caps and joins didn't always work.
+ - Dashed lines didn't work at all.
+ - If you read out the current matrix while inside a BuildChar
+procedure, the result was garbage.
+ - image[mask] would crash if you gave it a single string with more
+than 64K-1 pixels (MS-DOS only).
+ - Filling with a gray pattern sometimes wrote into pixels beyond
+the right edge of the region (MS-DOS only).
+ - The font cache would mistake fonts for each other if both fonts
+had a default (unsupplied) "unique ID".
+ - When a character was entered into the font cache for the first
+time, sometimes it would display as garbage and/or displaced vertically
+from its proper position.
+
+Implements gs_makeimagedevice, gs_copyscanlines, gs_getdevice,
+gs_devicename, gs_flushpage, gs_writeppmfile, gs_type1encrypt,
+gs_type1decrypt, gs_type1imagepath, and gs_type1addpath procedures
+corresponding to the new operators in the interpreter (see preceding
+section).
+
+Changes [gs_]setdevice so that it does an erasepage when it first opens
+the device.
+
+Changes definition of gx_device structure as follows. NOTE: THIS AFFECTS
+ALL DRIVERS.
+
+ - Removes bits_from_MSB (which wasn't actually used, in any case).
+ Ghostscript now assumes officially, as it always did in
+ practice, that device bitmaps are stored MSB first, i.e., X=0
+ corresponds to the 0x80 bit in the first byte.
+
+ - Removes the initial_matrix member, which wasn't actually being
+ set up.
+
+ - Adds a new member 'name', a string giving the device name.
+
+ - Adds new members 'x_pixels_per_inch' and 'y_pixels_per_inch'.
+ These are only used by the default initial_matrix procedure
+ (see below).
+
+ - Adds a new procedure 'output_page'. The default implementation
+ (gx_default_output_page) just calls the sync_output procedure.
+
+ - Adds a new procedure 'get_initial_matrix'. The default
+ procedure uses the width, height, and x/y_pixels_per_inch
+ members to compute the matrix, assuming that X values run from
+ right to left, and Y values run from top to bottom.
+
+Changes the names of the allocation procedure types gs_proc_alloc and
+gs_proc_free to proc_alloc_t and proc_free_t, and moves them from gs.h to
+std.h.
+
+Makes Ghostscript work even when the &gt;&gt; operator doesn't sign-extend
+negative numbers. (This has not been tested.)
+
+</pre>
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 1997, 1998 Aladdin Enterprises.
+All rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/History3.htm b/Master/xemtex/doc/ghostscript/History3.htm
new file mode 100644
index 00000000000..88fdbb934a1
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/History3.htm
@@ -0,0 +1,8597 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>History of Ghostscript versions 3.n</title>
+<!-- $Id: History3.htm,v 1.13.2.11.2.6 2003/05/17 14:38:59 giles Exp $ -->
+<!-- Originally: history3.txt -->
+<!--
+ WARNING: do not use Pete Kaiser's emacs function "gs-toc" alone to
+ re-create the table of contents here, because it will replace the
+ hand-edited TOC subheads with a separate subhead for each H2 in
+ the body of the file. Or if you do, first look at the original
+ TOC to see how to edit it for visual conciseness.
+-->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>History of Ghostscript versions 3.n</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Version3.70p1">Version 3.70 patch 1 (6/24/96)</a>
+<ul>
+<li><a href="#V3.70p1_Procedures">Procedures</a>,
+ <a href="#V3.70p1_Drivers">Drivers</a>
+</ul>
+<li><a href="#Version3.70">Version 3.70 (limited) (6/23/96)</a>
+<ul>
+<li><a href="#V3.70_Documentation">Documentation</a>,
+ <a href="#V3.70_Procedures">Procedures</a>,
+ <a href="#V3.70_Drivers">Drivers</a>,
+ <a href="#V3.70_Platforms">Platforms</a>,
+ <a href="#V3.70_Fonts">Fonts</a>,
+ <a href="#V3.70_Interpreter">Interpreter</a>,
+ <a href="#V3.70_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.70_Streams">Streams</a>,
+ <a href="#V3.70_Library">Library</a>
+</ul>
+<li><a href="#Version3.69">Version 3.69 (limited) (6/14/96)</a>
+<ul>
+<li><a href="#V3.69_Documentation">Documentation</a>,
+ <a href="#V3.69_Procedures">Procedures</a>,
+ <a href="#V3.69_Utilities">Utilities</a>,
+ <a href="#V3.69_Drivers">Drivers</a>,
+ <a href="#V3.69_Platforms">Platforms</a>,
+ <a href="#V3.69_Fonts">Fonts</a>,
+ <a href="#V3.69_Interpreter">Interpreter</a>,
+ <a href="#V3.69_Library">Library</a>
+</ul>
+<li><a href="#Version3.68p4">Version 3.68 patch 4 (5/23/96)</a>
+<ul>
+<li><a href="#V3.68p4_Documentation">Documentation</a>,
+ <a href="#V3.68p4_Procedures">Procedures</a>,
+ <a href="#V3.68p4_Drivers">Drivers</a>,
+ <a href="#V3.68p4_Platforms">Platforms</a>,
+ <a href="#V3.68p4_Fonts">Fonts</a>,
+ <a href="#V3.68p4_Interpreter">Interpreter</a>,
+ <a href="#V3.68p4_Library">Library</a>
+</ul>
+<li><a href="#Version3.68p3">Version 3.68 patch 3 (5/17/96)</a>
+<ul>
+<li><a href="#V3.68p3_Procedures">Procedures</a>,
+ <a href="#V3.68p3_Utilities">Utilities</a>,
+ <a href="#V3.68p3_Drivers">Drivers</a>,
+ <a href="#V3.68p3_Platforms">Platforms</a>,
+ <a href="#V3.68p3_Interpreter">Interpreter</a>,
+ <a href="#V3.68p3_Library">Library</a>
+</ul>
+<li><a href="#Version3.68p2">Version 3.68 patch 2 (5/13/96)</a>
+<ul>
+<li><a href="#V3.68p2_Documentation">Documentation</a>,
+ <a href="#V3.68p2_Procedures">Procedures</a>,
+ <a href="#V3.68p2_Drivers">Drivers</a>,
+ <a href="#V3.68p2_Interpreter">Interpreter</a>,
+ <a href="#V3.68p2_Streams">Streams</a>,
+ <a href="#V3.68p2_Library">Library</a>
+</ul>
+<li><a href="#Version3.68p1">Version 3.68 patch 1 (5/10/96)</a>
+<ul>
+<li><a href="#V3.68p1_Procedures">Procedures</a>
+</ul>
+<li><a href="#Version3.68">Version 3.68 (limited) (5/9/96)</a>
+<ul>
+<li><a href="#V3.68_Documentation">Documentation</a>,
+ <a href="#V3.68_Procedures">Procedures</a>,
+ <a href="#V3.68_Utilities">Utilities</a>,
+ <a href="#V3.68_Drivers">Drivers</a>,
+ <a href="#V3.68_Platforms">Platforms</a>,
+ <a href="#V3.68_Fonts">Fonts</a>,
+ <a href="#V3.68_Interpreter">Interpreter</a>,
+ <a href="#V3.68_Streams">Streams</a>,
+ <a href="#V3.68_Library">Library</a>
+</ul>
+<li><a href="#Version3.67">Version 3.67 (limited) (4/12/96)</a>
+<ul>
+<li><a href="#V3.67_Documentation">Documentation</a>,
+ <a href="#V3.67_Procedures">Procedures</a>,
+ <a href="#V3.67_Platforms">Platforms</a>,
+ <a href="#V3.67_Interpreter">Interpreter</a>,
+ <a href="#V3.67_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.67_Library">Library</a>
+</ul>
+<li><a href="#Version3.66">Version 3.66 (limited) (4/8/96)</a>
+<ul>
+<li><a href="#V3.66_Documentation">Documentation</a>,
+ <a href="#V3.66_Procedures">Procedures</a>,
+ <a href="#V3.66_Utilities">Utilities</a>,
+ <a href="#V3.66_Drivers">Drivers</a>,
+ <a href="#V3.66_Platforms">Platforms</a>,
+ <a href="#V3.66_Fonts">Fonts</a>,
+ <a href="#V3.66_Interpreter">Interpreter</a>,
+ <a href="#V3.66_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.66_Streams">Streams</a>,
+ <a href="#V3.66_Library">Library</a>
+</ul>
+<li><a href="#Version3.65">Version 3.65 (limited) (3/9/96)</a>
+<ul>
+<li><a href="#V3.65_Documentation">Documentation</a>,
+ <a href="#V3.65_Procedures">Procedures</a>,
+ <a href="#V3.65_Utilities">Utilities</a>,
+ <a href="#V3.65_Drivers">Drivers</a>,
+ <a href="#V3.65_Platforms">Platforms</a>,
+ <a href="#V3.65_Interpreter">Interpreter</a>,
+ <a href="#V3.65_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.65_Streams">Streams</a>,
+ <a href="#V3.65_Library">Library</a>
+</ul>
+<li><a href="#Version3.64">Version 3.64 (limited, incremental) (1/27/96)</a>
+<ul>
+<li><a href="#V3.64_Documentation">Documentation</a>,
+ <a href="#V3.64_Procedures">Procedures</a>,
+ <a href="#V3.64_Utilities">Utilities</a>,
+ <a href="#V3.64_Drivers">Drivers</a>,
+ <a href="#V3.64_Platforms">Platforms</a>,
+ <a href="#V3.64_Interpreter">Interpreter</a>,
+ <a href="#V3.64_Streams">Streams</a>,
+ <a href="#V3.64_Library">Library</a>
+</ul>
+<li><a href="#Version3.63">Version 3.63 (limited, incremental) (1/14/96)</a>
+<ul>
+<li><a href="#V3.63_Documentation">Documentation</a>,
+ <a href="#V3.63_Procedures">Procedures</a>,
+ <a href="#V3.63_Utilities">Utilities</a>,
+ <a href="#V3.63_Drivers">Drivers</a>,
+ <a href="#V3.63_Platforms">Platforms</a>,
+ <a href="#V3.63_Interpreter">Interpreter</a>,
+ <a href="#V3.63_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.63_Streams">Streams</a>,
+ <a href="#V3.63_Library">Library</a>
+</ul>
+<li><a href="#Version3.62">Version 3.62 (limited, incremental) (12/26/95)</a>
+<ul>
+<li><a href="#V3.62_Documentation">Documentation</a>,
+ <a href="#V3.62_Procedures">Procedures</a>,
+ <a href="#V3.62_Interpreter">Interpreter</a>,
+ <a href="#V3.62_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.62_Library">Library</a>
+</ul>
+<li><a href="#Version3.61">Version 3.61 (limited) (12/10/95)</a>
+<ul>
+<li><a href="#V3.61_Documentation">Documentation</a>,
+ <a href="#V3.61_Procedures">Procedures</a>,
+ <a href="#V3.61_Utilities">Utilities</a>,
+ <a href="#V3.61_Drivers">Drivers</a>,
+ <a href="#V3.61_Platforms">Platforms</a>,
+ <a href="#V3.61_Fonts">Fonts</a>,
+ <a href="#V3.61_Interpreter">Interpreter</a>,
+ <a href="#V3.61_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.61_Streams">Streams</a>,
+ <a href="#V3.61_Library">Library</a>
+</ul>
+<li><a href="#Version3.60">Version 3.60 (limited) (11/20/95)</a>
+<ul>
+<li><a href="#V3.60_Documentation">Documentation</a>,
+ <a href="#V3.60_Procedures">Procedures</a>,
+ <a href="#V3.60_Utilities">Utilities</a>,
+ <a href="#V3.60_Drivers">Drivers</a>,
+ <a href="#V3.60_Platforms">Platforms</a>,
+ <a href="#V3.60_Fonts">Fonts</a>,
+ <a href="#V3.60_Interpreter">Interpreter</a>,
+ <a href="#V3.60_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.60_Streams">Streams</a>,
+ <a href="#V3.60_Library">Library</a>
+</ul>
+<li><a href="#Version3.53">Version 3.53 (1/10/96)</a>
+<ul>
+<li><a href="#V3.53_Documentation">Documentation</a>,
+ <a href="#V3.53_Procedures">Procedures</a>,
+ <a href="#V3.53_Utilities">Utilities</a>,
+ <a href="#V3.53_Drivers">Drivers</a>,
+ <a href="#V3.53_Platforms">Platforms</a>,
+ <a href="#V3.53_Fonts">Fonts</a>,
+ <a href="#V3.53_Interpreter">Interpreter</a>,
+ <a href="#V3.53_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.53_Streams">Streams</a>,
+ <a href="#V3.53_Library">Library</a>
+</ul>
+<li><a href="#Version3.52">Version 3.52 (limited) (10/6/95)</a>
+<ul>
+<li><a href="#V3.52_Procedures">Procedures</a>,
+ <a href="#V3.52_Interpreter">Interpreter</a>,
+ <a href="#V3.52_Library">Library</a>
+</ul>
+<li><a href="#Version3.51">Version 3.51 (9/27/95)</a>
+<ul>
+<li><a href="#V3.51_Documentation">Documentation</a>,
+ <a href="#V3.51_Procedures">Procedures</a>,
+ <a href="#V3.51_Utilities">Utilities</a>,
+ <a href="#V3.51_Drivers">Drivers</a>,
+ <a href="#V3.51_Platforms">Platforms</a>,
+ <a href="#V3.51_Interpreter">Interpreter</a>,
+ <a href="#V3.51_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.51_Library">Library</a>
+</ul>
+<li><a href="#Version3.50">Version 3.50 (limited) (9/24/95)</a>
+<ul>
+<li><a href="#V3.50_Procedures">Procedures</a>,
+ <a href="#V3.50_Utilities">Utilities</a>,
+ <a href="#V3.50_Drivers">Drivers</a>,
+ <a href="#V3.50_Interpreter">Interpreter</a>,
+ <a href="#V3.50_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.50_Library">Library</a>
+</ul>
+<li><a href="#Version3.49">Version 3.49 (limited) (9/20/95)</a>
+<ul>
+<li><a href="#V3.49_Documentation">Documentation</a>,
+ <a href="#V3.49_Procedures">Procedures</a>,
+ <a href="#V3.49_Drivers">Drivers</a>,
+ <a href="#V3.49_Platforms">Platforms</a>,
+ <a href="#V3.49_Interpreter">Interpreter</a>,
+ <a href="#V3.49_Library">Library</a>
+</ul>
+<li><a href="#Version3.48">Version 3.48 (limited) (9/17/95)</a>
+<ul>
+<li><a href="#V3.48_Documentation">Documentation</a>,
+ <a href="#V3.48_Procedures">Procedures</a>,
+ <a href="#V3.48_Drivers">Drivers</a>,
+ <a href="#V3.48_Platforms">Platforms</a>,
+ <a href="#V3.48_Interpreter">Interpreter</a>,
+ <a href="#V3.48_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.48_Library">Library</a>
+</ul>
+<li><a href="#Version3.47">Version 3.47 (limited) (9/14/95)</a>
+<ul>
+<li><a href="#V3.47_Documentation">Documentation</a>,
+ <a href="#V3.47_Procedures">Procedures</a>,
+ <a href="#V3.47_Utilities">Utilities</a>,
+ <a href="#V3.47_Drivers">Drivers</a>,
+ <a href="#V3.47_Platforms">Platforms</a>,
+ <a href="#V3.47_Fonts">Fonts</a>,
+ <a href="#V3.47_Interpreter">Interpreter</a>,
+ <a href="#V3.47_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.47_Streams">Streams</a>,
+ <a href="#V3.47_Library">Library</a>
+</ul>
+<li><a href="#Version3.46">Version 3.46 (limited) (9/4/95)</a>
+<ul>
+<li><a href="#V3.46_Documentation">Documentation</a>,
+ <a href="#V3.46_Procedures">Procedures</a>,
+ <a href="#V3.46_Utilities">Utilities</a>,
+ <a href="#V3.46_Drivers">Drivers</a>,
+ <a href="#V3.46_Platforms">Platforms</a>,
+ <a href="#V3.46_Interpreter">Interpreter</a>,
+ <a href="#V3.46_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.46_Library">Library</a>
+</ul>
+<li><a href="#Version3.45">Version 3.45 (limited) (8/27/95)</a>
+<ul>
+<li><a href="#V3.45_Documentation">Documentation</a>,
+ <a href="#V3.45_Procedures">Procedures</a>,
+ <a href="#V3.45_Utilities">Utilities</a>,
+ <a href="#V3.45_Drivers">Drivers</a>,
+ <a href="#V3.45_Platforms">Platforms</a>,
+ <a href="#V3.45_Interpreter">Interpreter</a>,
+ <a href="#V3.45_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.45_Streams">Streams</a>,
+ <a href="#V3.45_Library">Library</a>
+</ul>
+<li><a href="#Version3.44">Version 3.44 (limited) (8/21/95)</a>
+<ul>
+<li><a href="#V3.44_Documentation">Documentation</a>,
+ <a href="#V3.44_Procedures">Procedures</a>,
+ <a href="#V3.44_Utilities">Utilities</a>,
+ <a href="#V3.44_Drivers">Drivers</a>,
+ <a href="#V3.44_Platforms">Platforms</a>,
+ <a href="#V3.44_Interpreter">Interpreter</a>,
+ <a href="#V3.44_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.44_Library">Library</a>
+</ul>
+<li><a href="#Version3.43">Version 3.43 (limited) (8/10/95)</a>
+<ul>
+<li><a href="#V3.43_Documentation">Documentation</a>,
+ <a href="#V3.43_Procedures">Procedures</a>,
+ <a href="#V3.43_Platforms">Platforms</a>,
+ <a href="#V3.43_Fonts">Fonts</a>,
+ <a href="#V3.43_Interpreter">Interpreter</a>,
+ <a href="#V3.43_Streams">Streams</a>,
+ <a href="#V3.43_Library">Library</a>
+</ul>
+<li><a href="#Version3.42">Version 3.42 (limited) (8/2/95)</a>
+<ul>
+<li><a href="#V3.42_Documentation">Documentation</a>,
+ <a href="#V3.42_Procedures">Procedures</a>,
+ <a href="#V3.42_Platforms">Platforms</a>,
+ <a href="#V3.42_Interpreter">Interpreter</a>,
+ <a href="#V3.42_Streams">Streams</a>,
+ <a href="#V3.42_Library">Library</a>
+</ul>
+<li><a href="#Version3.41">Version 3.41 (limited) (7/27/95)</a>
+<ul>
+<li><a href="#V3.41_Documentation">Documentation</a>,
+ <a href="#V3.41_Procedures">Procedures</a>,
+ <a href="#V3.41_Utilities">Utilities</a>,
+ <a href="#V3.41_Drivers">Drivers</a>,
+ <a href="#V3.41_Platforms">Platforms</a>,
+ <a href="#V3.41_Fonts">Fonts</a>,
+ <a href="#V3.41_Interpreter">Interpreter</a>,
+ <a href="#V3.41_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.41_Streams">Streams</a>,
+ <a href="#V3.41_Library">Library</a>
+</ul>
+<li><a href="#Version3.40">Version 3.40 (limited) (6/28/95)</a>
+<ul>
+<li><a href="#V3.40_Documentation">Documentation</a>,
+ <a href="#V3.40_Procedures">Procedures</a>,
+ <a href="#V3.40_Utilities">Utilities</a>,
+ <a href="#V3.40_Platforms">Platforms</a>,
+ <a href="#V3.40_Interpreter">Interpreter</a>,
+ <a href="#V3.40_Streams">Streams</a>,
+ <a href="#V3.40_Library">Library</a>
+</ul>
+<li><a href="#Version3.39">Version 3.39 (limited) (6/24/95)</a>
+<ul>
+<li><a href="#V3.39_Documentation">Documentation</a>,
+ <a href="#V3.39_Procedures">Procedures</a>,
+ <a href="#V3.39_Utilities">Utilities</a>,
+ <a href="#V3.39_Platforms">Platforms</a>,
+ <a href="#V3.39_Fonts">Fonts</a>,
+ <a href="#V3.39_Interpreter">Interpreter</a>,
+ <a href="#V3.39_Streams">Streams</a>,
+ <a href="#V3.39_Library">Library</a>
+</ul>
+<li><a href="#Version3.38">Version 3.38 (limited) (6/18/95)</a>
+<ul>
+<li><a href="#V3.38_Documentation">Documentation</a>,
+ <a href="#V3.38_Procedures">Procedures</a>,
+ <a href="#V3.38_Utilities">Utilities</a>,
+ <a href="#V3.38_Drivers">Drivers</a>,
+ <a href="#V3.38_Platforms">Platforms</a>,
+ <a href="#V3.38_Fonts">Fonts</a>,
+ <a href="#V3.38_Interpreter">Interpreter</a>,
+ <a href="#V3.38_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.38_Streams">Streams</a>,
+ <a href="#V3.38_Library">Library</a>
+</ul>
+<li><a href="#Version3.37">Version 3.37 (limited) (5/11/95)</a>
+<ul>
+<li><a href="#V3.37_Documentation">Documentation</a>,
+ <a href="#V3.37_Procedures">Procedures</a>,
+ <a href="#V3.37_Utilities">Utilities</a>,
+ <a href="#V3.37_Drivers">Drivers</a>,
+ <a href="#V3.37_Fonts">Fonts</a>,
+ <a href="#V3.37_Interpreter_PostScript">Interpreter (PostScript)</a>,
+ <a href="#V3.37_Interpreter_PDF">Interpreter (PDF)</a>
+</ul>
+<li><a href="#Version3.36">Version 3.36 (limited) (5/4/95)</a>
+<ul>
+<li><a href="#V3.36_Documentation">Documentation</a>,
+ <a href="#V3.36_Procedures">Procedures</a>,
+ <a href="#V3.36_Drivers">Drivers</a>,
+ <a href="#V3.36_Interpreter">Interpreter</a>,
+ <a href="#V3.36_Library">Library</a>
+</ul>
+<li><a href="#Version3.35">Version 3.35 (internal) (5/2/95)</a>
+<ul>
+<li><a href="#V3.35_Documentation">Documentation</a>,
+ <a href="#V3.35_Procedures">Procedures</a>,
+ <a href="#V3.35_Utilities">Utilities</a>,
+ <a href="#V3.35_Drivers">Drivers</a>,
+ <a href="#V3.35_Platforms">Platforms</a>,
+ <a href="#V3.35_Fonts">Fonts</a>,
+ <a href="#V3.35_Interpreter">Interpreter</a>,
+ <a href="#V3.35_Library">Library</a>
+</ul>
+<li><a href="#Version3.34">Version 3.34 (internal) (4/18/95)</a>
+<ul>
+<li><a href="#V3.34_Documentation">Documentation</a>,
+ <a href="#V3.34_Procedures">Procedures</a>,
+ <a href="#V3.34_Interpreter">Interpreter</a>,
+ <a href="#V3.34_Library">Library</a>
+</ul>
+<li><a href="#Version3.33">Version 3.33 (4/13/95)</a>
+<ul>
+<li><a href="#V3.33_Documentation">Documentation</a>,
+ <a href="#V3.33_Procedures">Procedures</a>,
+ <a href="#V3.33_Utilities">Utilities</a>,
+ <a href="#V3.33_Drivers">Drivers</a>,
+ <a href="#V3.33_Platforms">Platforms</a>,
+ <a href="#V3.33_Fonts">Fonts</a>,
+ <a href="#V3.33_Library">Library</a>
+</ul>
+<li><a href="#Version3.32">Version 3.32 (4/7/95)</a>
+<ul>
+<li><a href="#V3.32_Documentation">Documentation</a>,
+ <a href="#V3.32_Procedures">Procedures</a>,
+ <a href="#V3.32_Utilities">Utilities</a>,
+ <a href="#V3.32_Drivers">Drivers</a>,
+ <a href="#V3.32_Platforms">Platforms</a>,
+ <a href="#V3.32_Interpreter">Interpreter</a>,
+ <a href="#V3.32_Streams">Streams</a>,
+ <a href="#V3.32_Library">Library</a>
+</ul>
+<li><a href="#Version3.31">Version 3.31 (4/2/95)</a>
+<ul>
+<li><a href="#V3.31_Documentation">Documentation</a>,
+ <a href="#V3.31_Procedures">Procedures</a>,
+ <a href="#V3.31_Utilities">Utilities</a>,
+ <a href="#V3.31_Drivers">Drivers</a>,
+ <a href="#V3.31_Platforms">Platforms</a>,
+ <a href="#V3.31_Interpreter">Interpreter</a>,
+ <a href="#V3.31_Streams">Streams</a>,
+ <a href="#V3.31_Library">Library</a>
+</ul>
+<li><a href="#Version3.30">Version 3.30 (beta) (3/21/95)</a>
+<ul>
+<li><a href="#V3.30_Documentation">Documentation</a>,
+ <a href="#V3.30_Utilities">Utilities</a>,
+ <a href="#V3.30_Drivers">Drivers</a>,
+ <a href="#V3.30_Interpreter_PostScript">Interpreter (PostScript)</a>,
+ <a href="#V3.30_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.30_Library">Library</a>
+</ul>
+<li><a href="#Version3.29">Version 3.29 (internal) (3/8/95)</a>
+<ul>
+<li><a href="#V3.29_Documentation">Documentation</a>,
+ <a href="#V3.29_Procedures">Procedures</a>,
+ <a href="#V3.29_Utilities">Utilities</a>,
+ <a href="#V3.29_Fonts">Fonts</a>,
+ <a href="#V3.29_Drivers">Drivers</a>,
+ <a href="#V3.29_Interpreter_PostScript">Interpreter (PostScript)</a>,
+ <a href="#V3.29_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.29_Streams">Streams</a>,
+ <a href="#V3.29_Library">Library</a>
+</ul>
+<li><a href="#Version3.28">Version 3.28 (beta) (2/13/95)</a>
+<ul>
+<li><a href="#V3.28_Documentation">Documentation</a>,
+ <a href="#V3.28_Procedures">Procedures</a>,
+ <a href="#V3.28_Utilities">Utilities</a>,
+ <a href="#V3.28_Drivers">Drivers</a>,
+ <a href="#V3.28_Interpreter">Interpreter</a>,
+ <a href="#V3.28_Library">Library</a>
+</ul>
+<li><a href="#Version3.27">Version 3.27 (beta)(withdrawn) (2/8/95)</a>
+<ul>
+<li><a href="#V3.27_Documentation">Documentation</a>,
+ <a href="#V3.27_Procedures">Procedures</a>,
+ <a href="#V3.27_Utilities">Utilities</a>,
+ <a href="#V3.27_Drivers">Drivers</a>,
+ <a href="#V3.27_Platforms">Platforms</a>,
+ <a href="#V3.27_Fonts">Fonts</a>,
+ <a href="#V3.27_Interpreter">Interpreter</a>,
+ <a href="#V3.27_Streams">Streams</a>,
+ <a href="#V3.27_Library">Library</a>
+</ul>
+<li><a href="#Version3.26">Version 3.26 (beta) (2/1/95)</a>
+<ul>
+<li><a href="#V3.26_Documentation">Documentation</a>,
+ <a href="#V3.26_Procedures">Procedures</a>,
+ <a href="#V3.26_Utilities">Utilities</a>,
+ <a href="#V3.26_Drivers">Drivers</a>,
+ <a href="#V3.26_Platforms">Platforms</a>,
+ <a href="#V3.26_Interpreter">Interpreter</a>,
+ <a href="#V3.26_Streams">Streams</a>,
+ <a href="#V3.26_Library">Library</a>
+</ul>
+<li><a href="#Version3.25">Version 3.25 (beta) (1/24/95)</a>
+<ul>
+<li><a href="#V3.25_Documentation">Documentation</a>,
+ <a href="#V3.25_Procedures">Procedures</a>,
+ <a href="#V3.25_Drivers">Drivers</a>,
+ <a href="#V3.25_Platforms">Platforms</a>,
+ <a href="#V3.25_Interpreter">Interpreter</a>,
+ <a href="#V3.25_Library">Library</a>
+</ul>
+<li><a href="#Version3.24">Version 3.24 (beta) (1/17/95)</a>
+<ul>
+<li><a href="#V3.24_Documentation">Documentation</a>,
+ <a href="#V3.24_Procedures">Procedures</a>,
+ <a href="#V3.24_Drivers">Drivers</a>,
+ <a href="#V3.24_Platforms">Platforms</a>,
+ <a href="#V3.24_Fonts">Fonts</a>,
+ <a href="#V3.24_Interpreter">Interpreter</a>,
+ <a href="#V3.24_Interpreter_PostScript">Interpreter (PostScript)</a>,
+ <a href="#V3.24_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.24_Streams">Streams</a>,
+ <a href="#V3.24_Library">Library</a>
+</ul>
+<li><a href="#Version3.23">Version 3.23 (beta) (1/5/95)</a>
+<ul>
+<li><a href="#V3.23_Documentation">Documentation</a>,
+ <a href="#V3.23_Procedures">Procedures</a>,
+ <a href="#V3.23_Utilities">Utilities</a>,
+ <a href="#V3.23_Drivers">Drivers</a>,
+ <a href="#V3.23_Platforms">Platforms</a>,
+ <a href="#V3.23_Fonts">Fonts</a>,
+ <a href="#V3.23_Interpreter_PostScript">Interpreter (PostScript)</a>,
+ <a href="#V3.23_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V3.23_Streams">Streams</a>,
+ <a href="#V3.23_Library">Library</a>
+</ul>
+<li><a href="#Version3.22">Version 3.22 (beta) (11/30/94)</a>
+<ul>
+<li><a href="#V3.22_Procedures">Procedures</a>,
+ <a href="#V3.22_Drivers">Drivers</a>,
+ <a href="#V3.22_Platforms">Platforms</a>,
+ <a href="#V3.22_Fonts">Fonts</a>,
+ <a href="#V3.22_Interpreter">Interpreter</a>,
+ <a href="#V3.22_Streams">Streams</a>,
+ <a href="#V3.22_Library">Library</a>
+</ul>
+<li><a href="#Version3.21">Version 3.21 (beta) (11/17/94)</a>
+<ul>
+<li><a href="#V3.21_Documentation">Documentation</a>,
+ <a href="#V3.21_Procedures">Procedures</a>,
+ <a href="#V3.21_Utilities">Utilities</a>,
+ <a href="#V3.21_Drivers">Drivers</a>,
+ <a href="#V3.21_Platforms">Platforms</a>,
+ <a href="#V3.21_Fonts">Fonts</a>,
+ <a href="#V3.21_Interpreter">Interpreter</a>,
+ <a href="#V3.21_Streams">Streams</a>,
+ <a href="#V3.21_Library">Library</a>
+</ul>
+<li><a href="#Version3.20">Version 3.20 (beta) (10/31/94)</a>
+<ul>
+<li><a href="#V3.20_Documentation">Documentation</a>,
+ <a href="#V3.20_Procedures">Procedures</a>,
+ <a href="#V3.20_Utilities">Utilities</a>,
+ <a href="#V3.20_Drivers">Drivers</a>,
+ <a href="#V3.20_Platforms">Platforms</a>,
+ <a href="#V3.20_Fonts">Fonts</a>,
+ <a href="#V3.20_Interpreters">Interpreters</a>,
+ <a href="#V3.20_Library">Library</a>
+</ul>
+<li><a href="#Version3.13">Version 3.13(private) (10/3/94)</a>
+<ul>
+<li><a href="#V3.13_Documentation">Documentation</a>,
+ <a href="#V3.13_Procedures">Procedures</a>,
+ <a href="#V3.13_Utilities">Utilities</a>,
+ <a href="#V3.13_Drivers">Drivers</a>,
+ <a href="#V3.13_Platforms">Platforms</a>,
+ <a href="#V3.13_Fonts">Fonts</a>,
+ <a href="#V3.13_Interpreter">Interpreter</a>,
+ <a href="#V3.13_Streams">Streams</a>,
+ <a href="#V3.13_Library">Library</a>
+</ul>
+<li><a href="#Version3.12">Version 3.12 (9/29/94)</a>
+<ul>
+<li><a href="#V3.12_Documentation">Documentation</a>,
+ <a href="#V3.12_Procedures">Procedures</a>,
+ <a href="#V3.12_Drivers">Drivers</a>,
+ <a href="#V3.12_Platforms">Platforms</a>,
+ <a href="#V3.12_Interpreter">Interpreter</a>,
+ <a href="#V3.12_Streams">Streams</a>,
+ <a href="#V3.12_Library">Library</a>
+</ul>
+<li><a href="#Version3.1.1">Version 3.1.1 (9/25/94)</a>
+<ul>
+<li><a href="#V3.1.1_Documentation">Documentation</a>,
+ <a href="#V3.1.1_Procedures">Procedures</a>,
+ <a href="#V3.1.1_Drivers">Drivers</a>,
+ <a href="#V3.1.1_Platforms">Platforms</a>,
+ <a href="#V3.1.1_Interpreter">Interpreter</a>
+</ul>
+<li><a href="#Version3.1">Version 3.1 (9/20/94)</a>
+<ul>
+<li><a href="#V3.1_Documentation">Documentation</a>,
+ <a href="#V3.1_Procedures">Procedures</a>,
+ <a href="#V3.1_Drivers">Drivers</a>,
+ <a href="#V3.1_Interpreter">Interpreter</a>,
+ <a href="#V3.1_Streams">Streams</a>,
+ <a href="#V3.1_Library">Library</a>
+</ul>
+<li><a href="#Version3.0.3">Version 3.0.3 (9/16/94)</a>
+<ul>
+<li><a href="#V3.0.3_Documentation">Documentation</a>,
+ <a href="#V3.0.3_Procedures">Procedures</a>,
+ <a href="#V3.0.3_Utilities">Utilities</a>,
+ <a href="#V3.0.3_Drivers">Drivers</a>,
+ <a href="#V3.0.3_Platforms">Platforms</a>,
+ <a href="#V3.0.3_Fonts">Fonts</a>,
+ <a href="#V3.0.3_Streams">Streams</a>,
+ <a href="#V3.0.3_Interpreter">Interpreter</a>,
+ <a href="#V3.0.3_Library">Library</a>
+</ul>
+<li><a href="#Version3.02">Version 3.02 (8/30/94)</a>
+<ul>
+<li><a href="#V3.02_Documentation">Documentation</a>,
+ <a href="#V3.02_Procedures">Procedures</a>,
+ <a href="#V3.02_Utilities">Utilities</a>,
+ <a href="#V3.02_Drivers">Drivers</a>,
+ <a href="#V3.02_Platforms">Platforms</a>,
+ <a href="#V3.02_Fonts">Fonts</a>,
+ <a href="#V3.02_Interpreter">Interpreter</a>,
+ <a href="#V3.02_Streams">Streams</a>,
+ <a href="#V3.02_Library">Library</a>
+</ul>
+<li><a href="#Version3.01">Version 3.01 (8/14/94)</a>
+<ul>
+<li><a href="#V3.01_Documentation">Documentation</a>,
+ <a href="#V3.01_Procedures">Procedures</a>,
+ <a href="#V3.01_Utilities">Utilities</a>,
+ <a href="#V3.01_Drivers">Drivers</a>,
+ <a href="#V3.01_Platforms">Platforms</a>,
+ <a href="#V3.01_Fonts">Fonts</a>,
+ <a href="#V3.01_Interpreter">Interpreter</a>,
+ <a href="#V3.01_Streams">Streams</a>,
+ <a href="#V3.01_Library">Library</a>
+</ul>
+<li><a href="#Version3.0">Version 3.0 (8/1/94)</a>
+<ul>
+<li><a href="#V3.0_Documentation">Documentation</a>,
+ <a href="#V3.0_Procedures">Procedures</a>,
+ <a href="#V3.0_Utilities">Utilities</a>,
+ <a href="#V3.0_Drivers">Drivers</a>,
+ <a href="#V3.0_Platforms">Platforms</a>,
+ <a href="#V3.0_Fonts">Fonts</a>,
+ <a href="#V3.0_Interpreter">Interpreter</a>,
+ <a href="#V3.0_Streams">Streams</a>,
+ <a href="#V3.0_Library">Library</a>
+</ul>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>
+This document is a history of Ghostscript releases numbered 3.n. For more
+recent changes, see the the other history documents and, for the latest
+versions, the news:
+
+<blockquote>
+<a href="News.htm">News</a><br>
+<a href="History4.htm">History of Ghostscript versions 4.n</a><br>
+History of Ghostscript versions 3.n (this document)<br>
+<a href="History2.htm">History of Ghostscript versions 2.n</a><br>
+<a href="History1.htm">History of Ghostscript versions 1.n</a>
+</blockquote>
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<h2><a name="Version3.70p1"></a>Version 3.70 patch 1 (6/24/96)</h2>
+
+<p>
+This contains a few last-minute patches before the release.
+
+<h3><a name="V3.70p1_Procedures"></a>Procedures</h3><pre>
+Comments out the color inkjet drivers in the cc-based makefile, because a
+bug in Sun's cc prevents them from compiling. (cc-head.mak)
+
+</pre><h3><a name="V3.70p1_Drivers"></a>Drivers</h3><pre>
+Fixes bugs:
+ - The os2prn driver smashed memory. (gdevos2p.c)
+ - Some initialized structures weren't declared 'static'.
+(gdevpdf.c, gdevpdfm.c)
+ - The PNG driver wouldn't compile with some older versions of the
+PNG library. (gdevpng.c)
+
+</pre>
+
+<h2><a name="Version3.70"></a>Version 3.70 (limited) (6/23/96)</h2>
+
+<p>
+This is the candidate fileset for 4.0. Aside from one optimization
+for the PDF writer, the only changes are bug fixes.
+
+<h3><a name="V3.70_Documentation"></a>Documentation</h3><pre>
+
+Renames all the documentation files from *.doc to *.txt, since the .doc
+extension didn't give any information about the format of the file.
+(readme, *.doc, *.txt)
+
+Notes that IJG JPEG library v6[a] is now required. (jpeg.mak)
+
+Brings ps2pdf.1 up to date. (ps2pdf.1)
+
+Adds a new file describing Aladdin's C coding practices. (c-style.txt)
+
+Updates the man pages to refer to version 4.0. (gs.1, pdf2ps.1, ps2ascii.1,
+ps2pdf.1)
+
+</pre><h3><a name="V3.70_Procedures"></a>Procedures</h3><pre>
+
+Changes some file names to fit within the MS-DOS 8.3 limit. (gs.mak)
+
+Adds the PDF writer to the remaining 32-bit configurations (Watcom, OS/2,
+MSC). (watc.mak, watcwin.mak, os2.mak, msc.mak, msvcwint.mak)
+
+Changes the -sFONTMAP= switch so it can take a list of font names, like a
+search path. (use.txt)
+
+</pre><h3><a name="V3.70_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - Signed and unsigned values were mixed inconsistently. (gdevcdj.c)
+ - PDF files could contain e-format floating point numbers, which the
+PDF specification doesn't allow. (gdevpdfx.h, gdevpdf*.c)
+ - The PDF writer didn't handle glyphshow properly. (gs_pdfwr.ps)
+ - The PDF writer did the wrong thing with fonts whose FontMatrix had
+a non-zero translation component. (gs_pdfwr.ps, gdevpdft.c)
+ - The stand-alone bounding box device could crash when setting
+parameters. (gdevbbox.c)
+ - The mswinpr2 driver smashed memory. (gdevwpr2.c)
+
+Changes the PDF writer so that if it encounters a re-encoded character, it
+tries to map it to an encoded character in the standard (ISO Latin-1)
+encoding rather than converting the entire string containing it to a bitmap.
+This dramatically improves output file size for files with a few divergently
+encoded characters, but it may cause the text in the PDF file to differ from
+the text in the PostScript input. (gdevpdft.c)
+
+Disallows BitsPerPixel=16 in the MS Windows and OS/2 drivers, since this bit
+depth is not supported by Windows and would require special extra buffering.
+(install.txt, dwtext.h, dwtext.cpp, gdevmswn.c, gdevpm.c, gdevwpr2.c)
+
+</pre><h3><a name="V3.70_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - On the PC platforms, file names weren't changed to reflect the
+value of CONFIG. (gs.mak, bc*.mak, ms*.mak, os2.mak, tc*.mak, watc*.mak,
+wccommon.mak)
+
+Modifies some makefiles for greater reusability. (bclib.mak, watclib.mak)
+
+</pre><h3><a name="V3.70_Fonts"></a>Fonts</h3><pre>
+
+Changes the font searching rules in the following NON-BACKWARD-COMPATIBLE
+way: (gs_fonts.ps, gs_res.ps)
+ - -sFONTMAP=files specifies a list of files containing fontmaps;
+previously, it specified only a single fontmap file.
+ - If -sFONTMAP= is not used, the interpreter reads the Fontmaps from
+*all* directories on the search path, and does so even if FONTPATH or
+GS_FONTPATH is set; previously, it read only the first Fontmap, and only if
+[GS_]FONTPATH was not set.
+ - Fontmap(s) take precedence over [GS_]FONTPATH; previously,
+[GS_]FONTPATH caused Fontmap to be ignored. (You can still force Fontmap to
+be ignored with -dNOFONTMAP.)
+ - Earlier [GS_]FONTPATH entries take precedence over later;
+previously, later entries took precedence over earlier. Note that this is
+different from Fontmap: earlier Fontmaps in the search path take precedence
+over later, but within a single Fontmap, later entries take precedence over
+earlier (for backward compatibility).
+ - [GS_]FONTPATH is consulted only if there is no Fontmap entry for a
+font, or no Fontmap entry leads to successful loading; previously,
+[GS_]FONTPATH was always consulted at startup.
+ - If loading a font fails, the interpreter tries the next Fontmap
+entry; previously, it fell back to font substitution.
+
+</pre><h3><a name="V3.70_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Filters didn't peek ahead for an EOD (see Streams below).
+(zfileio.c, zpaint.c)
+
+Splits up a file to allow internal access to user and system parameters even
+in Level 1. (zmisc2.c, zusparam.c)
+
+Adds LIBPATH as a predefined name in systemdict. Its value is an array of
+strings comprising the library search path. (imain.c)
+
+</pre><h3><a name="V3.70_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - A Dests dictionary entry with an array (rather than a dictionary)
+value caused an error. (pdf_main.ps)
+ - Rotated pages could have incorrect translation and/or clipping.
+(pdf_main.ps)
+
+</pre><h3><a name="V3.70_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - If a buffer boundary fell just before an EOD, and the client read
+exactly as much data as was present before the EOD, filters didn't consume
+the EOD. (This is required as a tricky consequence of the Adobe
+specification.) (stream.h, strimpl.h, stream.c)
+
+</pre><h3><a name="V3.70_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - An extra column of bits could get turned on at the right edge of
+masked or monochrome images. (gximage2.c)
+ - Rasterizing very long curves could cause arithmetic errors or
+floating point overflows. (gxpcopy.c)
+ - Banding with large line widths could truncate curves or introduce
+spurious lines. (gxclpath.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version3.69"></a>Version 3.69 (limited) (6/14/96)</h2>
+
+<p>
+More bug fixes, plus one irresistible new feature: the ability to use
+TrueType fonts as freely as Type 1 fonts. Also, one new feature (outside
+clipping) that was needed for Aladdin's PCL XL project. We incremented the
+version number because of the change in trapezoid and path filling (see
+under Library below).
+
+<h3><a name="V3.69_Documentation"></a>Documentation</h3><pre>
+Brings documentation about fonts up to date. (fonts.doc)
+
+Updates current.doc to reflect changes since 3.53. (current.doc)
+
+Updates the DLL documentation to reflect recent changes. (dll.doc)
+
+Documents a workaround for the code generation bug in gcc 2.7.x. (make.doc)
+
+Changes the contact information for potential commercial customers in
+Europe. (new-user.doc)
+
+Updates the OS/2 documentation to make it current. (install.doc, make.doc)
+
+Documents -dCOLORSCREEN=0. (use.doc)
+
+</pre><h3><a name="V3.69_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - 'make clean' didn't work in the Watcom environment.
+(wmakebat.bat, gs.mak, msc.mak, msvcwint.mak, os2.mak, tccommon.mak,
+unixhead.mak, wccommon.mak)
+ - The X11 libraries were listed in an incorrect order.
+(ansihead.mak, cc-head.mak, gcc-head.mak, ugcclib.mak, unix-end.mak)
+ - The OS/2 makefile didn't ignore errors from `erase' commands.
+(os2.mak)
+
+Adds the PDF writer to the 32-bit MS Windows configuration. (bcwin32.mak)
+
+Adds the PNG drivers to the 32-bit MS Windows platform, since they now
+compile properly. (bcwin32.mak)
+
+Changes the ttfont feature so that it refers to support for direct usage of
+TrueType fonts; puts support for Type 42 fonts into a separate feature
+(type42). (gs.mak, int.mak)
+
+Adds direct TrueType font support to the Windows platforms. (bcwin.mak,
+bcwin32.mak)
+
+Rewrites vms.mak to be structured more like the other makefiles. (vms.mak,
+modules.lis)
+
+Makes the device lists in vms-*.mak the same as those for the Unix
+configurations. (vms-cc.mak, vms-decc.mak, vms-gcc.mak)
+
+Changes the default X library directory for gcc to /usr/X11/lib.
+(gcc-head.mak)
+
+Adds the list of devices to --help, since HylaFax depends on this.
+(imainarg.c)
+
+Adds -dCOLORSCREEN=0 to indicate use of 4 separate color screens with the
+same frequency and angle. (gs_init.ps)
+
+</pre><h3><a name="V3.69_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - When ps2epsi encountered a blank page, it called the
+(undocumented) .quit operator with only one argument, causing a stack
+underflow. (ps2epsi.ps)
+ - An extraneous file was included in the fileset. (checkacc.ps)
+ - A file was omitted from the fileset. (bench.c)
+ - Images in PostScript files produced by pdf2ps were processed about
+50 times slower than they should have been. (gs_pdf.ps)
+
+</pre><h3><a name="V3.69_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - An #include was omitted. (gdevpdfi.c)
+ - The BJC driver could get into an inconsistent state. (gdevcdj.c)
+ - Braces were omitted around the values for two initialized byte
+arrays. (gdevpcx.c)
+ - A function used 'float' in its argument list, causing problems in
+mixed ANSI/non-ANSI compilation. (gdevcdj.c)
+ - signed and unsigned char pointers were used inconsistently.
+(gdevcdj.c, gdevcgml.c)
+ - Some header files weren't protected against double inclusion.
+(gdevprn.h, gdevtifs.h)
+ - The 24-bit PNG driver included unnecessary copies of the color
+mapping procedures. (gdevpng.c)
+
+Fixes bugs in the PDF writer:
+ - The PDF writer sometimes produced a double // in front of a filter
+name. (gdevpdfi.c)
+ - The PDF writer produced zero-width, zero-height images for
+non-standard fonts. (bug introduced since 3.68) (gdevpdfi.c)
+ - The PDF writer got confused if the input file invoked
+setpagedevice. (gdevpdfp.c)
+ - The PDF writer put annotations on the page after the one they were
+supposed to be on. (gdevpdf.c)
+ - The PDF writer sometimes failed to set the font when needed.
+(gdevpdf.c)
+ - The PDF writer could produce in-line images that were too large.
+(gdevpdfi.c)
+ - The PDF writer didn't scale explicit character and word spacing
+(ashow/widthshow/awidthshow) properly. (gdevpdft.c)
+ - The PDF writer didn't copy named destination or article title
+strings, possibly leading to dangling pointers. (gdevpdf.c, gdevpdfm.c)
+ - The PDF writer produced incorrect output for re-encoded fonts.
+(It now converts any string containing characters in non-standard positions
+to bitmaps; this will be fixed in a later release.) (gs_pdfwr.ps,
+gdevpdfx.h, gdevpdfp.c, gdevpdft.c)
+
+Updates a few drivers for the change in the handling of band device
+procedures. (gdevcp50.c, gdevdjet.c)
+
+Updates the X Windows driver for strip halftones. (gdevx.c)
+
+Adds anti-aliasing capability to the os2pm device. (gdevpm.c)
+
+Increases the sizes of some tables in the PDF writer. (gdevpdfx.h)
+
+</pre><h3><a name="V3.69_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - A patch for the MS Windows platform was accidentally omitted.
+(gp_mswin.c)
+ - A block of code was accidentally duplicated. (dwmain.cpp)
+ - An identifier exceeded VAX VMS C's limit of 31 characters.
+(gscspace.h)
+ - File name enumeration didn't work properly on Unix systems
+(still/again). (gp_unifs.c)
+ - On MS Windows, If you closed Ghostscript with the system menu, you
+only closed the text window; Ghostscript kept running and you had to use the
+task manager to kill it. (dwmain.cpp, dwmainc.cpp, dwtext.cpp)
+ - Some DLL-related typedefs were not consistent. (dwdll.h, gsdll.h,
+dpmainc.c, dwdll.cpp)
+ - Attempts to call the DLL before it was initialized were not
+detected. (gsdll.c)
+ - Bitmap line lengths were rounded up even on 32-bit Windows, which
+doesn't want this. (gdevwdib.c)
+
+Further improves the handling of attempts to use the DLL when it is already
+in use. (dwdll.cpp, gsdll.c)
+
+Adds a DLL-compatible main program for OS/2. (dpmainc.c, gp_os2.c, gsdll.c)
+
+</pre><h3><a name="V3.69_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - The WingDings TrueType font wasn't loaded properly. (gs_ttf.ps)
+
+Makes changes so that TrueType fonts can appear in the Fontmap and can be
+loaded directly. (gs_fonts.ps, gs_ttf.ps)
+
+</pre><h3><a name="V3.69_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Executing a .quit with only 1 element on the operand stack caused
+an invalid access. (zcontrol.c)
+ - The usage help message contained incorrect double %%s.
+(imainarg.c)
+ - If an initialization file tried to use any Encodings other than
+the 4 registered ones, it couldn't find them. (gs_init.ps, gs_res.ps)
+ - Places that expected arrays of coordinates (rectangles,
+x/y/xyshow) didn't accept packed arrays. (ibnum.c, zdps1.c)
+ - filterdict was still visible after initialization. (gs_init.ps)
+ - The usage error message wasn't terminated by a newline.
+(imainarg.c)
+ - setcacheparams (or setting the MaxFontCache user parameter) didn't
+actually affect the size of the character cache. (zfont.c, zmisc2.c)
+ - The main interpreter loop declared iref as a ref *, even though it
+may only be a ref_packed *. (iref.h, interp.c)
+
+Changes the character cache so it ignores absurd FontBBox values. Nothing
+in the Adobe spec suggests doing this, but it is necessary for handling
+questionable output produced by PageMaker 5.0 (an Adobe product!).
+(zchar1.c)
+
+Changes some type declarations slightly to reduce the number of 'discarding
+const' compiler warnings. (igc.h, igc.c, igcref.c)
+
+Adds .setclipoutside and .currentclipoutside operators for accessing the new
+outside clipping capability. (zpath.c)
+
+Adds the dictionary stack to the information printed in case of a fatal
+problem. (imain.c)
+
+Adds .set/currentrenderalgorithm operators for testing. (zrop.c)
+
+</pre><h3><a name="V3.69_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The TrueType rasterizer didn't map quadratic to cubic splines
+well, and didn't handle off-curve points at the end of a contour properly.
+(gstype42.c)
+ - An #include was omitted. (gsimage.c, gxclimag.c)
+ - Some compilers complained about statements with no effect, or
+comma operators with no effect on the left. (gschar.c, gxcpath.c, gxfill.c)
+ - TrueType or Type 42 glyphs with a repeat count that crossed a
+contour boundary produced incorrect output. (gstype42.c)
+ - TrueType / Type 42 composite glyphs involving rotation were placed
+incorrectly. (gstype42.c)
+ - Type 42 fonts with an absent or incorrect FontBBox could fail to
+produce output. (gstype42.c)
+ - Some header files weren't protected against double inclusion.
+(gsio.h, gdebug.h)
+ - Decoding filters didn't "look ahead" to detect EOD, so if the last
+read operation before closing the filter ended just before the EOD mark, the
+EOD mark might not be absorbed. (stream.h, stream.c)
+ - Filling paths consisting of multiple subpaths that overlap in Y
+produced slightly inaccurate output. We were unable to find a way to fix
+this without making a NON-BACKWARD-COMPATIBLE change in the interface for
+the recently introduced fill_trapezoid device procedure. (gxdevice.h,
+gdevbbox.c, gdevddrw.c, gdevnfwd.c, gxfill.c)
+ - When banding, get_bits didn't detect calls with out-of-range Y
+values. (gxclread.c)
+ - setcacheparams didn't actually affect the size of the character
+cache. (gsfont.h, gxbcache.h, gxfcache.h, gschar.c, gsfont.c, gxbcache.c,
+gxccman.c, gxclbits.c)
+ - When banding, colored halftones could be mangled. (gxclread.c)
+
+Fixes bugs in the bounding box device:
+ - The bounding box device could give bizarre results if any objects
+crossed the lower edge of the page. (gdevbbox.c)
+ - The bounding box device could get a memory access error when
+processing image data. (gdebbox.c)
+ - The bounding box device ran the default drawing algorithms even if
+it had no target (performance bug only). (gdevbbox.c)
+ - The bounding box device computed an incorrect (too small) box for
+partially clipped bitmap images. (gdevbbox.c)
+ - The bounding box device got confused by files that filled the
+entire page with a background color. (gdevbbox.c)
+ - The bounding box device produced infinite-height boxes for certain
+kinds of data. (gdevbbox.c)
+
+Changes some type declarations slightly to reduce the number of 'discarding
+const' compiler warnings. (gsmemory.h, gsstruct.h)
+
+Adds the capability of clipping to the outside rather than the inside of the
+clipping path. This is required for emulating an obscure feature of the
+Microsoft Windows GDI. (gspath.h, gxclpath.h, gxpath.h, gxcpath.h,
+gzcpath.h, gspath.c, gxacpath.c, gxclpath.c, gxclread.c, gxcpath.c.)
+
+Makes it possible for band devices to select the underlying memory device
+used to accumulate the actual bits. This is required for (at least) PCL5
+emulation. This requires adding a procedure to the gx_device_printer
+structure, which, for devices that initialize the structure without using
+the macros in gdevprn.h or access the printer-specific procedures directly,
+is a NON-BACKWARD-COMPATIBLE change. (gdevprn.h, gxclist.h, gxdevice.h,
+gdevdflt.c, gdevprn.c, gxclread.c)
+
+Speeds up handling of rotated or halftoned masked images. (gximage2.c)
+
+Adds an output_page procedure to the bounding box device, for testing.
+(gdevbbox.c)
+
+Adds a sample device that keeps track of the "render algorithm", for PCL5c
+emulation. (gdevrrgb.c)
+
+</pre>
+
+<h2><a name="Version3.68p4"></a>Version 3.68 patch 4 (5/23/96)</h2>
+
+<p>
+More minor bug fixes, mostly related to the MS Windows implementation.
+
+<h3><a name="V3.68p4_Documentation"></a>Documentation</h3><pre>
+Further updates various doc files to make them more useful to new users.
+(NEWS, README, current.doc, helpers.doc, new-user.doc)
+
+Adds user-contributed documentation for ps2pdf. (ps2pdf.doc, unix-end.mak)
+
+Documents a bug in the Borland C++ 4.52 compiler, and where to find the
+patch for it. (make.doc)
+
+</pre><h3><a name="V3.68p4_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - A command line exceeded the MS-DOS 120 character limit.
+(devs.mak)
+
+A file was accidentally omitted from the fileset. (wmakebat.bat)
+
+</pre><h3><a name="V3.68p4_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - Many of the 'show' operators didn't work properly if the PDF
+writer was included in the configuration. (gs_pdfwr.ps)
+ - x_wrap_get_bits was ridiculously slow. (It still is, but not
+quite as ridiculously.) (gxcindex.h, gdevxalt.c)
+ - The PDF writer generated CR instead of CalRGB, which is legal per
+the Adobe spec but not compatible with some Adobe Acrobat products.
+(gdevpdfi.c)
+ - Some signed/unsigned discrepancies caused compilation warnings.
+(gdevpdfm.c, gdevpdfp.c, gdevpdft.c)
+
+Fixes bugs in the Windows driver:
+ - An accidentally opened tiny window didn't get closed.
+(gdevwdib.c)
+ - The name DllInit was misleading, and this procedure wasn't being
+called whtn the DLL was loaded, so the DLL couldn't know the instance
+handle. (gp_mswin.c)
+ - The code didn't recognize Win32s (vs. Windows 95) correctly.
+(dwmain.cpp, gdevwdib.c, gp_mswin.h, gp_mswin.c, gsdll16.rc)
+ - Some compiler warnings needed fixing. (gdevwdib.c)
+ - gsdll16.def and gsdll32.def were different. (gsdll32.def)
+ - A GPF leaving the 16-bit DLL loaded could make the DLL permanently
+unusable. (dwmain.cpp)
+ - Two obsolete files were still included in the fileset.
+(gswin.def, gswin32.def)
+
+Adds a compile-time option to the 'bit' drivers to expand 4-bit pixels to
+32-bit. This was required for tracking down customer problems, because the
+only tools we have available for displaying CMYK images require 32 bits per
+pixel. (gdevbit.c)
+
+</pre><h3><a name="V3.68p4_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - In DEC C, &lt;time.h&gt; does define the timeval struct. (time_.h)
+
+Changes gsdll_init() to take an additional argument, a window handle. This
+is a NON-BACKWARD-COMPATIBLE change. (dll.doc, dwdll.h, gsdll.h, dwdll.cpp,
+dwmain.cpp, dwmainc.cpp, gsdll.c)
+
+</pre><h3><a name="V3.68p4_Fonts"></a>Fonts</h3><pre>
+
+Updates more Fontmaps to include the new URW++ fonts. (Fontmap.OS2,
+Fontmap.ATM)
+
+</pre><h3><a name="V3.68p4_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - The default operator array table wasn't big enough. (iinit.c)
+ - Some signed/unsigned discrepancies caused compilation warnings.
+(imain.c, imainarg.c, zfile.c)
+
+Adds encoding vectors for Windows 3.1 Latin 1, Latin 2, and Latin 5
+encodings. None of these are loaded in the standard configuration.
+(gs_wl{1,2,5}_e.ps)
+
+</pre><h3><a name="V3.68p4_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Some tracing output was incorrect or missing. (gxdither.c)
+ - Resized objects in the C heap had incorrect bookkeeping
+information (bug introduced in 3.68). (gsmemory.c)
+ - Image pixels that fell exactly on device half-pixel boundaries
+could get discarded. (gximage0.c)
+ - The bounding box device didn't set a variable properly and didn't
+implement end_image, leading to invalid memory accesses. (gdevbbox.c)
+ - Fonts with BuildChar routines written in C didn't work properly
+with kshow or xyshow. (gschar.c)
+
+Adds some additional tracing output for Patterns. (gxpcmap.c)
+
+Adds tracing output for freeing malloc'ed blocks at the end of execution.
+(gsmemory.c)
+
+Adds a gs_dashpath procedure that expands dashes in the same way that
+gs_flattenpath expands curves. (gspath.h, gspath1.c)
+
+</pre>
+
+<h2><a name="Version3.68p3"></a>Version 3.68 patch 3 (5/17/96)</h2>
+
+<p>
+More bug fixes during the beta test period. AccurateScreens now works
+properly.
+
+<h3><a name="V3.68p3_Procedures"></a>Procedures</h3><pre>
+Fixes bugs:
+ - The help message was too long to fit on a PC screen or standard
+terminal. (imainarg.c)
+ - Failure to run tar_cat wasn't detected. (unix-end.mak,
+unixtail.mak)
+
+</pre><h3><a name="V3.68p3_Utilities"></a>Utilities</h3><pre>
+Fixes bugs:
+ - In the PostScript files produced by pdf2ps, images using ASCII85
+encoding would cause a typecheck error. (gs_pdf.ps)
+ - pdf2ps wrote out strings longer than 200 characters incorrectly.
+(pdf_2ps.ps)
+
+</pre><h3><a name="V3.68p3_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs in gdevcdj.c (according to the author, we have no way to test
+this):
+ - The driver used to use Colors as well as ProcessColorModel to
+define the process color model. (devices.doc, gdevbjc.h, gdevcdj.c)
+ - Incorrect or inconsistent settings of BitsPerPixel and
+ProcessColorModel, or setting one but not the other, could leave the driver
+in an inconsistent state. (gdevcdj.c)
+
+Fixes bugs in the MS Windows driver:
+ - Insufficient memory for the backing bitmap could cause a GPF.
+(gdevmswn.c, gdevwdib.c)
+ - Invalid parameters could cause a crash within the DLL code.
+(gdevwdib.c)
+
+Adds a user-contributed driver for the CalComp Raster Format. (devs.mak,
+gdevccr.c)
+
+Adds an anti-aliasing option for MS Windows. (gdevmswn.c, gdevwdib.c)
+
+</pre><h3><a name="V3.68p3_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs in the Windows platform:
+ - One had to type "quit" twice to exit. (dwdll.h, dwdll.cpp)
+
+</pre><h3><a name="V3.68p3_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Platform fonts didn't work properly if the document's primary
+encoding was the standard MS Windows encoding. (ifont.h, gs_wan_e.ps)
+ - stringwidth with a Type 1 font could give a spurious typecheck
+error (bug introduced in 3.65). (zcharout.c)
+ - If a DOS editor added a ^Z to the end of the Fontmap file, an
+error occurred during initialization. (gs_fonts.ps)
+ - Halftones that didn't specify a value for AccurateScreens
+sometimes ignored the setting of the AccurateScreens user parameter.
+(zht2.c)
+
+</pre><h3><a name="V3.68p3_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - gs_join_none was defined, but not implemented. (gxstroke.c)
+ - A bookkeeping list for fonts could get confused, causing invalid
+memory accesses. (gsfont.c)
+ - An I/O error or internal error would cause the band list
+rasterizer to go into an infinite loop. (gxclread.c)
+ - The algorithm for choosing screen angles and frequencies produced
+poor results. (gshtscr.c)
+ - Color screens were broken (bug introduced in 3.68). (gxdht.h,
+gzht.h, gsht.c, gshtscr.c)
+
+</pre>
+
+<h2><a name="Version3.68p2"></a>Version 3.68 patch 2 (5/13/96)</h2>
+
+<p>
+This is another set of patches for the next general release.
+
+<h3><a name="V3.68p2_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - Windows NT and Windows 95 implementations were identified as
+"under development" rather than available. (README)
+ - There were several other minor errors in the README file.
+(README)
+ - The claimed current IJG JPEG version was incorrect. (jpeg.mak)
+
+Splits off information for new users into a separate file. (README,
+new-user.doc)
+
+</pre><h3><a name="V3.68p2_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - gettimeofday takes 2 arguments on SVR4 systems more recent than
+SVR4.0. (make.doc, ansihead.mak, cc-head.mak, gcc-head.mak, time_.h)
+
+Changes the default Unix data installation directory from /usr/local/lib to
+/usr/local/share, which seems to be favored by more recent Unix systems
+(except for some GNU/Linux versions, which still use /usr/local/lib, and BSD/OS,
+which puts Ghostscript in /usr/contrib/lib.) (ansihead.mak, cc-head.mak,
+gcc-head.mak, ugcclib.mak)
+
+Changes the unset commands in the Unix script to assignments, because a few
+older Unix shells don't provide unset. (unixtail.mak)
+
+</pre><h3><a name="V3.68p2_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - An #include incorrectly referred directly to a system header.
+(gdevpdft.c)
+ - CMYK devices took an excessive amount of time clearing the page to
+white. (gdevm32.c)
+
+Adds a compile-time option to the 'bit' drivers to remove top and bottom
+whitespace. This change was required in order to track down a customer bug.
+(gdevbit.c)
+
+</pre><h3><a name="V3.68p2_Interpreter"></a>Interpreter</h3><pre>
+
+Updates the interpreter for the split in the gstate API. (igstate.h)
+
+</pre><h3><a name="V3.68p2_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - Some compilers don't define NULL widely enough. (spngp.c)
+
+</pre><h3><a name="V3.68p2_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - There was a minor typo (&amp; for &amp;&amp;) that didn't affect execution.
+(gxccman.c)
+ - There was a trailing comma in an enumeration. (gsiparam.h)
+ - Internal and public interfaces weren't separated properly. THIS
+IS A NON-BACKWARD-COMPATIBLE CHANGE for clients using certain undocumented
+interfaces to the graphics state. (gsstate.h, gxstate.h, gzstate.h,
+gsstate.c)
+ - A 'private' declaration was missing (yet again). (gxclimag.c)
+
+</pre>
+
+<h2><a name="Version3.68p1"></a>Version 3.68 patch 1 (5/10/96)</h2>
+
+<p>
+This is the first bug fix (patch) incremental release for the next
+general release.
+
+<h3><a name="V3.68p1_Procedures"></a>Procedures</h3><pre>
+Fixes bugs:
+ - Many Windows-specific files were omitted from the previous
+fileset: dw*.rc, dw*.cpp.
+
+</pre>
+
+<h2><a name="Version3.68"></a>Version 3.68 (limited) (5/9/96)</h2>
+
+<p>
+This release cleans up the new Windows files, mostly implements the
+high-level driver API for bitmap images, and adds practical strip
+(AccurateScreens) halftoning. This is the first "serious beta" fileset for
+the next general release. It still has more problems than I would have
+liked.
+
+<h3><a name="V3.68_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - The names of the executable files for MS Windows were out of date.
+(make.doc)
+ - gxcindex.h still referred to "drawing color". (gxcindex.h)
+ - The name of the default font directory for Unix systems was
+incorrect. (make.doc)
+
+Moves the list of files required for installation, and some other
+installation instructions, from make.doc to install.doc. (install.doc,
+make.doc)
+
+Adds a description of the PNGPredictor filters. (language.doc)
+
+Updates the documentation of the higher-level driver procedures to match the
+specification changes. (drivers.doc)
+
+Documents the change in the Watcom build procedure. (make.doc)
+
+Improves the documentation of bitmap IDs. (gxbitmap.h)
+
+Adds documentation for the new strip_tile_rectangle and strip_copy_rop
+driver procedures. (drivers.doc)
+
+Changes the few remaining direct FTP addresses in README to URLs. (README)
+
+Notes that zlib does not compile correctly on IRIX 6.n with optimization.
+(make.doc)
+
+Adds references to PDF and TrueType fonts to language.doc. (language.doc)
+
+Updates fonts.doc to remove references to fonts.mak. (fonts.doc)
+
+Describes how to substitute an LZW compressor for the LZW-compatible
+compressor provided in the standard release. (make.doc)
+
+</pre><h3><a name="V3.68_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - Some lines had exceeded the 120-character limit of the
+MS-DOS shell. (int.mak)
+ - The configuration files weren't generated correctly when CONFIG
+wasn't an empty string. (unixhead.mak)
+
+Factors out shared DLL makefile rules into a new file. (bcwin.mak,
+bcwin32.mak, dwcommon.mak)
+
+Makes the cp and rm commands into makefile parameters, allowing automatic
+generation of build scripts even in the MS-DOS and MS Windows environments
+where the shell requires the CALL command for sub-scripts. (*.mak,
+genconf.c)
+
+Adds the PDF writer to the default Unix configurations. (ansihead.mak,
+cc-head.mak, gcc-head.mak)
+
+Adds TrueType support to all Level 2 configurations. (int.mak)
+
+Removes fonts.mak, which is no longer relevant. (fonts.mak)
+
+Brings the font compilation procedures up to date. (cfonts.mak, int.mak)
+
+</pre><h3><a name="V3.68_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - There was an extra 'show' in one file. (align.ps)
+
+</pre><h3><a name="V3.68_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The bit devices were missing the map_color_rgb procedure.
+(gdevbit.c)
+ - The MS Windows driver sent a redundant message. (gdevmswn.c)
+
+Adds a device that keeps track of the page bounding box. This device is not
+included in any standard configuration. (drivers.doc, gdevbbox.h,
+gsmatrix.h, gsstruct.h, gxdevice.h, gdevbbox.c, gdevnfwd.c, gsmatrix.c)
+
+Updates the PDF writer to track the changes in the high-level driver API,
+and to write out images in a reasonable way. NOTE: the current
+implementation doesn't write out CIE color space parameters, so CIE-color
+images won't be colored accurately. (gdevpdf.c, gdevpdfi.c)
+
+Adds a forwarding procedure for tile_rectangle. (gxdevice.h, gdevnfwd.c)
+
+Changes the copyright notices on the PDF writer to be the same as on the
+rest of Ghostscript. (gdevpdf*.[ch])
+
+Updates Gunther Hess's Epson Stylus Color driver from 1.21 to 1.90. (Aladdin
+Enterprises takes no responsibility for this driver: if you have questions,
+contact the author.) (devices.doc, devs.mak, gdevstc*.c, gdevstc.h)
+
+</pre><h3><a name="V3.68_Platforms"></a>Platforms</h3><pre>
+
+Removes some obsolete MS Windows files and #defines. (gp_mswtx.h,
+gp_mswtx.c, gp_mswin.h)
+
+Works around a memory limitation in the Watcom make utility. (wmakebat.bat)
+
+</pre><h3><a name="V3.68_Fonts"></a>Fonts</h3><pre>
+
+Changes the standard Fontmap from using the low-quality fonts converted from
+bitmaps to using high-quality fonts recently contributed by URW++.
+(Fontmap, Fontmap.GS)
+
+</pre><h3><a name="V3.68_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - A macro containing an if-else, and a macro generating a compound
+statement, could cause incorrect grouping of 'if' statements. (files.h,
+ostack.h)
+ - .setrasterop didn't pop its operand. (zrop.c)
+ - A rounding inaccuracy could cause bounding box rangecheck errors.
+(gsdps1.c)
+ - CIE-based images in PDF files didn't work. (gs_pdf.ps)
+ - The page parameter .MediaSize didn't get updated when PageSize was
+set. (This is just the most recent manifestation of the setpagedevice
+morass.) (gs_setpd.ps)
+ - %lineedit and %statementedit were limited to 160 characters.
+(zfileio.c, ziodev.c)
+ - Compiled initialization files didn't work properly. (geninit.c,
+gs_l2img.ps)
+ - Attempting to parse a command line with argc = 0 caused a crash.
+(imainarg.c)
+
+Renames some files to allow separating the non-DLL 'main' procedure into a
+separate file, and to make the file naming more consistent:
+ gs.c (except for 'main') =&gt; imainarg.c
+ gsmain.c =&gt; imain.c
+gs.c now consists only of 'main'. The name gs.c is still inconsistent (it
+should be i- something), but at least it's consistent with the name of the
+executable. (*.mak, imain.h, iminst.h, imainarg.h, gs.c, gsmain.c, imain.c,
+imainarg.c)
+
+Adds PNGPredictorEncode/Decode filters, and increases the size of filterdict
+slightly to make room for them. (iinit.c, zfpngp.c)
+
+Makes zwrite external, per a customer request. (opextern.h, zfileio.c)
+
+Updates clients to work with the new API-based bitmap imaging calls.
+(iimage.h, zcolor1.c, zimage2.c, zpaint.c)
+
+Updates clients for the split in gscspace.h. (zcie.c, zcolor1.c, zcolor2.c,
+zcsindex.c, zcssepr.c, zimage2.c, zpaint.c, zpcolor.c)
+
+Updates clients for strip-based halftones. (zpcolor.c)
+
+Updates the initialization code to pass the correct (system) allocator to
+the library initialization. (imain.c)
+
+</pre><h3><a name="V3.68_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - If a filter reached EOD exactly at the end of reading data for
+certain operations, it didn't get closed automatically. (stream.c)
+ - The LZW-compatible encoding filter reset procedure had an
+incorrect return type. (slzwce.c)
+
+Changes the ASCIIHexEncode filter to insert \ns in fewer places, to be
+somewhat more compatible with the Adobe implementation. (sstring.c)
+
+Adds PNGPredictorEncode/Decode filters that implement the pixel prediction
+algorithms in the PNG specification. (We'd like to use the code in the PNG
+library, but it's too deeply embedded in the rest of the PNG machinery, and
+it also doesn't provide for suspendable I/O.) (spngpx.h, spngp.c)
+
+</pre><h3><a name="V3.68_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - A test for pure color was backwards, causing garbage output or
+possible address or floating point exceptions. (gxclpath.c)
+ - A macro containing an if-else could cause incorrect grouping of
+'if' statements. (gsrefct.h)
+ - The default implementation of RasterOp didn't handle the device
+depth correctly. (gdevmrop.c)
+ - The memory device implementation of RasterOp truncated 24-bit
+constant source or texture values to 8 bits. (gdevmrop.c)
+ - A typo caused the garbage collector to miss an internal buffer
+used when rendering images. (gximage.h)
+ - gs_debug_out was only defined if DEBUG was set. (gdebug.h)
+ - The raster of horizontally replicated tiles was incorrect.
+(gxht.c)
+ - A data type might not be declared, causing a compilation error.
+(gscoord.h)
+ - Empty TrueType glyphs weren't handled properly. (gstype42.c)
+ - Fonts with a build procedure written in C could cause an invalid
+memory access. (gschar.c)
+ - The initial point of a band list path sometimes didn't get
+written, causing excess or missing filled regions. (gxclpath.c)
+ - Characters between 49 and 56 bits wide were rendered incorrectly
+when banding. (gxclbits.c)
+
+Renames gsimage*.c as gximage*.c, to reflect more accurately the position of
+these files in the architecture. (gsimage*.c, gximage*.c)
+
+Fully implements the high-level bitmap image calls in the driver API. This
+includes some driver API changes; however, this part of the API was clearly
+documented as not stable enough to rely on. (gxdevice.h, gximage.h,
+gdevbbox.c, gdevddrw.c, gdevnfwd.c, gsimage.c, gximage*.c)
+
+Splits the color space header into client and implementation, as with many
+others. (gscspace.h, gxcspace.h, gximage.h, gscie.c, gscolor.c, gscolor1.c,
+gscolor2.c, gscsepr.c, gsimage.c, gspcolor.c, gsstate.c, gxcmap.c,
+gxpcmap.c)
+
+Extends band lists to handle high-level images. NOTE: This facility is
+patched out because there is not yet a way to pass the necessary color
+rendering information through the band list. (gxcldev.h, gxclist.h,
+gxclpath.h, gxclimag.c, gxclist.c, gxclpath.c, gxclread.c)
+
+Implements fixed2float and float2fixed more efficiently on machines with
+slow floating point. (gxfixed.h, gscoord.c, gsmisc.c)
+
+Makes one further NON-BACKWARD-COMPATIBLE change in the existing
+higher-level driver procedures (fill_path, stroke_path, fill_mask): we make
+the imager state pointer an explicit argument, rather than a member of the
+gx_fill/stroke_params structure. We now consider the specification of these
+procedures stable, and have removed the "subject to change" notice from the
+documentation. (gxdevice.h, gxpaint.h, gdevbbox.c, gdevnfwd.c, gxacpath.c,
+gxclpath.c, gxclread.c, gxfill.c, gxpaint.c, gxstroke.c)
+
+Extends halftone bitmaps to include "strip" and "shift" information,
+allowing halftone cells with arbitrary angles to be stored in space
+proportional to the number of bits in the cell rather than the square of the
+number of bits. This requires adding new (optional) strip_tile_rectangle
+and strip_copy_rop driver procedures that are like tile_rectangle and
+copy_rop respectively but accept a strip bitmap rather than an ordinary
+tile; these procedures supersede tile_rectangle and copy_rop (although these
+also remain, defined in terms of the new ones). This also requires making
+small but NON-BACKWARD-COMPATIBLE changes in several internal interfaces.
+(gdevmem.h, gdevprn.h, gsdcolor.h, gxbcache.h, gxbitmap.h, gxcldev.h,
+gxclip2.h, gxclist.h, gxdevice.h, gxdevrop.h, gxdht.h, gxfcache.h,
+gxhttile.h, gxpcolor.h, gzht.h; gdevabuf.c, gdevbbox.c, gdevdflt.c,
+gdevm*.c, gdevmpla.c, gdevmrop.c, gdevnfwd.c, gsht.c, gsht1.c, gshtscr.c,
+gspcolor.c, gsstate.c, gxcht.c, gxclbits.c, gxclip2.c, gxclist.c,
+gxclpath.c, gxclread.c, gxcpath.c, gxdcolor.c, gxdither.c, gxht.c,
+gximage2.c, gxpcmap.c, ...)
+
+Adds "no join" as a line join type. NOTE: this is not actually implemented
+yet. (gslparam.h)
+
+Changes the initialization code so that it passes the system allocator as an
+argument to module initialization procedures. While this is theoretically a
+NON-BACKWARD-COMPATIBLE change, module initialization procedures are not
+documented and presumably are not used by any code outside the
+implementation. (gscdefs.h, gconf.c, gdevmrop.c, gsinit.c, gxclimag.c,
+gxclpath.c)
+
+Splits up gs_lib_init into two procedures, allowing specification of a
+different default allocator for the library. (gslib.h, gsinit.c)
+
+Adds a resize_object operation to the allocator API. (gsmemory.h,
+gsalloc.c, gsmemory.c)
+
+</pre>
+
+<h2><a name="Version3.67"></a>Version 3.67 (limited) (4/12/96)</h2>
+
+<p>
+This release restructures the MS Windows and OS/2 code to be primarily DLL-
+rather than EXE-based. See under Platforms below for more news. This
+release was put out in a hurry in order to get the new DLL code into
+testers' hands; it has more rough edges than usual.
+
+<h3><a name="V3.67_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - A definition &amp; use comment was incorrect. (scanchar.h)
+ - William Bader's e-mail address was wrong. (README)
+
+Adds documentation for the new begin_image, image_data, and end_image
+procedures. THIS INTERFACE IS STILL SUBJECT TO CHANGE. (drivers.doc)
+
+</pre><h3><a name="V3.67_Procedures"></a>Procedures</h3><pre>
+
+Renames all the *core.dev modules as *lib.dev. (int.mak, *lib.mak, vms.mak,
+gdevmrop.c)
+
+Updates all the remaining makefiles to IJG JPEG version 6a. (*.mak)
+
+Moves the configuration parameter definitions from gconf.c to a new file
+gscdefs.c. (bcwin*.mak, *lib.mak, gs.mak, int.mak, lib.mak, unixtail.mak,
+vms.mak, gconf.c, gscdefs.c)
+
+</pre><h3><a name="V3.67_Platforms"></a>Platforms</h3><pre>
+
+Restructures the MS Windows and OS/2 code to be primarily DLL- rather than
+EXE-based. This involves two minor NON-BACKWARD-COMPATIBLE changes to the DLL
+interface, documented near the end of dll.doc:
+
+ - Adding argv and argc as arguments to gsdll_init.
+
+ - Adding a new message type, GSDLL_POLL, to the callback procedure.
+
+(bcwin*.mak, devs.mak, os2.mak, dll.doc, install.doc, dw*.*, gsdll*.*,
+gdevms*.*, gdevpm.c, gdevw*.c, gp_mswin.c, gp_os2.c, gsos2.def, gswin.rc)
+
+Adds the BMP drivers to the Watcom platform. (watc.mak)
+
+</pre><h3><a name="V3.67_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - gs.c assumed the presence of stdio. (gs.c)
+
+Defines a new API entry point that is the equivalent of command line
+invocation. (imain.h, imainarg.h, gs.c)
+
+Changes clients to conform to the changes in gsimage.h. (zimage2.c,
+zpaint.c)
+
+Speeds up the search operator slightly. (zstring.c)
+
+</pre><h3><a name="V3.67_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - If the PDF interpreter was present, running a PostScript file
+didn't close the file properly if it caused an error. (pdf_main.ps)
+
+Speeds up embedded font loading by making an internal buffer bigger.
+(pdf_font.ps)
+
+</pre><h3><a name="V3.67_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - There could be some non-zero garbage between the width and the
+next multiple of bitmap_align_mod for copy_alpha. (The driver API
+specification explicitly allows this, but it upset one customer.)
+(gxccman.c)
+ - Nibble-swapped alpha values could be displaced in memory by one
+pixel, damaging the output. (gdevabuf.c)
+
+Makes further changes towards adding high-level bitmap image calls to the
+driver API. This includes the following minor NON-BACKWARD-COMPATIBLE
+changes to the interface defined in gsimage.h:
+
+ - changing MultipleDataSources from a member of the gs_image_t
+ structure to an argument of gs_image_init;
+
+ - changing the default image parameter values from constant
+ structures to procedures that initialize the structure.
+
+As far as we know, this doesn't affect any existing client code.
+(gsimage.h, gsiparam.h, gxdevice.h, gdevddrw.c, gdevnfwd.c, gsimage.c,
+gspcolor.c, gxccache.c)
+
+Removes an unnecessary level of call for path filling. (gxpaint.h,
+gxfill.c, gxpaint.c)
+
+</pre>
+
+<h2><a name="Version3.66"></a>Version 3.66 (limited) (4/8/96)</h2>
+
+<p>
+This release adds support for TrueType fonts and Type 42 (encapsulated
+TrueType) PostScript fonts. The MS Windows driver now interacts properly
+with the garbage collector. This release also includes a new, high-quality
+set of free fonts.
+
+<h3><a name="V3.66_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - The list of generic makefiles had gotten out of date. (make.doc)
+
+Adds a mention of the bmv program, created by a user and available under the
+GPL. (README)
+
+Notes that a bug in gcc 2.7.x prevents these versions from compiling
+Ghostscript. (make.doc)
+
+Clarifies the meaning of "inverted" masks. (gsimage.h)
+
+Improves the documentation of the stack sizing parameters. (interp.c)
+
+Improves the documentation of the copy_rop driver procedure.
+(drivers.doc)
+
+Notes that all subclasses of gx_device must explicitly include the
+device_finalize finalization procedure. (gxdevice.h)
+
+Updates the documentation of the high-level driver API to reflect the change
+in gx_drawing_color, and the addition of the new polygon and image drawing
+procedures. (drivers.doc)
+
+Updates the documentation for building zlib and libpng. (make.doc)
+
+</pre><h3><a name="V3.66_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The environment space overflowed on some inferior Unix systems.
+(unixtail.mak)
+
+Adds a ttfont.dev "feature" for including the TrueType interpreter and the
+ability to handle Type 42 fonts. A new procedure, .loadttfont, allows
+loading a TrueType font directly (by converting it to a Type 42 on the fly).
+(gs.mak, int.mak, lib.mak)
+
+Updates the makefiles and procedures to libpng 0.88 and zlib 1.0.
+(libpng.mak, zlib.mak)
+
+</pre><h3><a name="V3.66_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - pdf2ps could produce lines longer than 255 characters.
+(pdf_2ps.ps)
+
+Removes some unnecessary and error-inviting code from pdf2dsc. (pdf2dsc.ps)
+
+Updates lines.ps to test the new stroke code more fully. (lines.ps)
+
+Allows omitting the second argument of ps2pdf, as for ps2epsi. (ps2pdf)
+
+</pre><h3><a name="V3.66_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - A routine was incorrectly declared "private". (I wish gcc caught
+this!) (gdevpdf.c)
+ - A 'const' was omitted in a parameter list. (gdevpdfp.c)
+ - Some imported procedures didn't have prototypes declared.
+(gdevpdft.c)
+ - The ProcSet list for PDF files didn't include Text when it was
+needed. (gdevpdfx.h, gdevpdf.c, gdevpdft.c)
+ - Text in PDF output ignored the color setting. (gs_pdfwr.ps,
+gdevpdft.c)
+ - Text in PDF output could be positioned incorrectly. (gdevpdft.c)
+ - pdfmarks could produce an error when producing PDF output.
+(gs_pdfwr.ps)
+
+Slightly improves the text output of the PDF writer. (gs_pdfwr.ps,
+gdevpdft.c)
+
+Defines driver procedures for filling trapezoids (with the parallel edges
+parallel to a coordinate axis), parallelograms (with arbitrary orientation),
+triangles (ditto), and minimum-width lines (ditto). (Note that the last of
+these obsoletes the former draw_line procedure.) (gdevmem.h, gdevprn.h,
+gxdevice.h, gxdraw.h (deleted), gdevddrw.c, gdevdflt.c, gdevht.c,
+gdevnfwd.c, gsimage[12345].c, gxacpath.c, gxclist.c, gxclip2.c, gxcpath.c,
+gxdraw.c (deleted), gxfill.c, gxpcmap.c, gxstroke.c)
+
+Adds "sketched" driver procedures for high-level bitmap / pixmap image
+drawing. In this release, the argument lists are incomplete, and the
+procedures are stubs: don't try to use them! [see previous entry]
+
+Changes the screen update strategy for the X Windows driver from a
+compile-time option to a settable run-time variable. (gdevx.c)
+
+Patches around a problem with libpng 0.88 that can't be fixed without
+editing a configuration file. (gdevpng.c)
+
+</pre><h3><a name="V3.66_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - %g formats with sscanf don't work on NeXT systems. (gdevpdft.c,
+iutil.c, zdouble.c)
+ - getenv could be declared inconsistently. (gp_unix.c)
+
+</pre><h3><a name="V3.66_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - The Type 1 font interpreter sometimes set the flatness too large.
+(gstype1.c)
+ - Fonts defined by definefont could never be garbage collected.
+(gsstruct.h, gxfcache.h, gxfont.h, gxfont0.h, gxfont1.h, gsfont.c,
+gsfont0.c)
+ - Type 0 fonts weren't garbage collected properly. (gsfont0.c)
+ - Compiled fonts caused a compilation error (bug introduced in
+3.65). (ifont.h)
+ - If a Type 1 font used hint replacement, hints could be applied
+more than once, distorting the character shape. (gxtype1.h, gxhint3.c)
+ - Oversampling wasn't applied to large enough characters.
+(gschar.c)
+
+</pre><h3><a name="V3.66_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - The scanner accepted /[, /], /&lt;&lt;, and /&gt;&gt; as literal names (and
+similarly for //). It isn't obvious from the Red Book, but the Adobe
+implementations don't accept these. What a nuisance! (gs_btokn.ps,
+gs_init.ps, pdf_2ps.ps, pdf_base.ps, pdf_main.ps, iscan.c)
+ - A spurious stackoverflow could occur under unusual conditions.
+(istack.c)
+ - The values of OrigFont and ScaleMatrix in scaled fonts reflected
+only the most recent scaling operation, not the original font and the
+combined scaling operation. (zfont.c)
+ - The default size of systemdict had become slightly too small.
+(iinit.c)
+ - Type 1 characters defined by PostScript procedures were called
+incorrectly. (zcharout.c)
+
+Removes the papersize operator from statusdict, since it is not documented
+anywhere in the Adobe literature and didn't interact properly with the
+various ways of setting the page size. (gs_statd.ps)
+
+Changes the one client of sskip to match the changed API. (zpaint.c)
+
+Changes clients to reflect the creation of sstring.h. (iscan.h, zfilter.c)
+
+Adds PSStringEncode as an accessible filter. (zfilter.c)
+
+Adds support for TrueType and Type 42 fonts. (gs_fonts.ps, gs_ttf.ps,
+gs_typ42.ps, bfont.h, icharout.h, ifont.h, zchar1.c, zchar42.c, zcharout.c,
+zfont1.c, zfont2.c, zfont42.c)
+
+Adds a few ANSI sheet sizes (commented out, for documentation only).
+(gs_statd.ps)
+
+</pre><h3><a name="V3.66_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - Clients who called pdfopen/close rather than runpdf could get an
+error (PSLevel1 undefined). (pdf_main.ps)
+ - Some masked images were displayed with black and white inverted.
+(gs_pdf.ps)
+ - In Level 1 output produced by pdf2ps, images caused a syntaxerror.
+(gs_pdf.ps)
+ - If a PDF file had multiple xref sections and later sections added
+new objects, an error occurred. (pdf_main.ps)
+ - Some very old Level 1 interpreters couldn't deal with a file
+object embedded in a procedure. (gs_pdf.ps)
+
+</pre><h3><a name="V3.66_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The PSStringEncode filter didn't always produce printable 7-bit
+output. (sstring.c)
+ - The CCITTFaxDecode filter didn't implement DamagedRowsBeforeError.
+(scfx.h, scfd.c)
+ - Interpolated images displayed nothing if the data stream ended
+before the image height was reached. (siscale.h, gsimage5.c, siscale.c)
+
+Changes the sskip stream procedure so that it takes an additional argument
+where it returns the actual number of bytes skipped. THIS IS A
+NON-BACKWARD-COMPATIBLE CHANGE in the API. However, as far as we know,
+there are no external clients of this procedure. (stream.h, stream.c)
+
+Splits up sfilter.h so that the headers correspond more directly with the
+implementations. (sfilter.h, sstring.h, sstring.c)
+
+</pre><h3><a name="V3.66_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The default device in the library configuration was device 1, not
+device 0. (bclib.mak, ugcclib.mak, watclib.mak, gslib.c)
+ - Patterns could be rendered with small gaps between them.
+(gspcolor.c)
+ - Large characters could render inaccurately because of a numerical
+boundary condition. (gxpcopy.c)
+ - The show_gstate pointer in the graphics state was not managed
+properly, possibly leading to dangling pointers or GC errors. (gsstate.c)
+ - Bitmaps could get shifted to the left if ALPHA_LSB_FIRST was
+selected (bug introduced in 3.53). (gsbitops.c)
+ - The garbage collector could move devices in memory, causing
+problems with command list devices. (gxdevice.h, gsdevice.c)
+
+Continues restructuring the image handling code in preparation for adding a
+high-level driver operation. (gsimage[12345].c)
+
+Starts to implement passing color mapping information (transfer function,
+black generation, undercolor removal, CRD, halftoning) in the band list.
+(gxfmap.h, gscolor.c, gscolor1.c, gsht1.c, gsstate.c)
+
+Speeds up the path filling code a little more. (gxdraw.c)
+
+Removes the workaround for the gcc 2.7.0/1/2 optimizer bug, since this
+turned out to cause more trouble than it was worth. (stdpre.h)
+
+Speeds up stroking dramatically for the case of butt or square caps, bevel
+or beveled miter joins, and no fill adjustment, by filling parallelograms
+and triangles directly rather than constructing and filling paths. This is
+an important common case for CAD drawings. (gxdraw.h, gxdraw.c, gxstroke.c)
+
+Adds support for TrueType and Type 42 fonts. (gxfont.h, gxfont42.h,
+gstype42.c)
+
+Extends the memory manager to allow allocating objects that the garbage
+collector won't move. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE for
+implementors of memory managers, but clients aren't supposed to have any of
+these. (gsmemory.h, gsmemory.c, gsalloc.c)
+
+Makes dynamically created instances of registered devices immovable.
+(gsdevice.c)
+
+Unifies gx_drawing_color with (makes it equivalent to) gx_device_color.
+THIS IS A NON-BACKWARD-COMPATIBLE CHANGE for implementors of the
+higher-level driver procedures (fill_path, stroke_path, fill_mask). We
+regret that this was necessary, but the documentation in drivers.doc does
+warn the reader: "DO NOT ASSUME THESE OPERATIONS WILL REMAIN UNCHANGED IN
+FUTURE RELEASES." These three procedures, at least, should now be stable.
+(gsdcolor.h, gxcindex.h, gxdcolor.h, gxdevice.h, gximage.h, gxpaint.h,
+gxpcolor.h, gdevdflt.c, gdevpdf.c, gdevpdfi.c, gdevxalt.c, gsimage.c,
+gsimage2.c, gspcolor.c, gxacpath.c, gxccache.c, gxcht.c, gxclpath.c,
+gxclread.c, gxdcconv.c, gxdither.c, gxfill.c, gxdraw.c, gxht.c, gxpaint.c,
+gxpcmap.c, gxstroke.c)
+
+</pre>
+
+<h2><a name="Version3.65"></a>Version 3.65 (limited) (3/9/96)</h2>
+
+<p>
+This release adds garbage collection for device instances. ****** NOTE:
+Because of changes in memory management, if you are using the MS Windows
+driver (mswin), you must run with -dNOGC. This is a temporary problem which
+will be fixed before the next beta release.
+
+<h3><a name="V3.65_Documentation"></a>Documentation</h3><pre>
+Documents the C API equivalent of a -d switch for setting a flag like
+NOPAUSE. (imain.h)
+
+Splits off the NEWS entries for versions 3.0 through 3.33 into a new
+file. (history3.doc)
+
+Adds a man page for ps2pdf. (ps2pdf.1)
+
+Documents the new memory management aspects of device drivers, and corrects
+many other aspects of driver documentation that had become inaccurate.
+(drivers.doc)
+
+Updates the documentation for the gs_*.ps files. (psfiles.doc)
+
+Replaces .type1addpath with .type1execchar. (language.doc)
+
+Adds some more documentation on how band lists do read/write switching.
+(gxclist.h)
+
+Adds a reference to the new Genscript program, a free Ghostscript-based
+replacement for enscript. (README)
+
+Notes that no further changes will be accepted for the gdevcdj.c file, which
+has gotten completely out of hand. (gdevcdj.c).
+
+Documents the TextAlphaBits and GraphicsAlphaBits device parameters.
+(language.doc)
+
+</pre><h3><a name="V3.65_Procedures"></a>Procedures</h3><pre>
+Fixes bugs:
+ - gs_pdfwr.ps and pdf2ps.1 weren't installed on Unix systems.
+(unix-end.mak)
+ - The pdf2ps shell script didn't accept any options. (pdf2ps)
+ - The rule for srle.$(OBJ) incorrectly specified a dependency on
+srld.c. (lib.mak)
+ - The rule for command lists didn't include stream.$(OBJ).
+(lib.mak)
+ - The stack size for one configuration was set too small.
+(watclib.mak)
+
+Speeds up genconf by eliminating redundant file reading and processing.
+(genconf.c)
+
+Moves the pixel-difference filters from int.mak to lib.mak. (int.mak,
+lib.mak)
+
+Moves the library parts of the HSB color and Level 1 path (arcs, pathbbox,
+path enumeration) options from int.mak to lib.mak, and adds them to the
+library makefiles. (int.mak, lib.mak; bclib.mak. ugcclib.mak, watclib.mak)
+
+</pre><h3><a name="V3.65_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - pdf2ps would fail if it encountered a font with a standard
+encoding. (pdf_2ps.ps)
+
+Adds new switches to pdf2ps:
+ -dPSBinaryOK allows writing binary image data in the output.
+(pdf_2ps.ps)
+ -dPSLevel1 forces Level 1 compatible output. (int.mak,
+unix-end.mak, gs_l2img.ps, gs_pdf.ps, pdf_2ps.ps, pdf_main.ps)
+ -dPSNoProcSet causes the ProcSet to be loaded at run time, not at
+conversion time -- primarily useful for debugging. (pdf_2ps.ps)
+
+Adds a utility for viewing PCX files, so we can preview high-resolution
+output in a reasonable compressed format. (unix-end.mak, viewpcx.ps)
+
+</pre><h3><a name="V3.65_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - Some compilers require an extra #include to define structures even
+if they are only referenced by pointers. (int.mak, gdevpdf.c, gdevpdfp.c)
+ - A procedure name was duplicated. (gdevpdfi.c)
+ - A pdfmark between a gsave and a grestore could cause a
+rangecheck error. (gdevpdfp.c)
+ - A pdfmark between a gsave and a grestore could cause the
+grestore to do an inappropriate initgraphics. (gs_pdfwr.ps)
+ - The pdfwrite driver could reinitialize the output file
+unpredictably. (gdevpdfp.c)
+ - The PCX drivers didn't clear padding bytes at the ends of scan
+lines. (gdevpcx.c)
+ - The PCX drivers didn't set the "version" field correctly (this was
+OK in 2.6.1, bug introduced sometime since then). (gdevpcx.c)
+ - Whoever last touched the color inkjet drivers completely broke the
+handling of the BitsPerPixel parameter, again. We were able to half-fix it,
+but the code is impossible to understand, let alone modify safely.
+(gdevcdj.c)
+ - Anti-aliased characters didn't work with banding. (gxclpath.c)
+ - The PGM/PPM drivers didn't recognize black-and-white pages for
+optimization to PBM, only gray or colored. (gdevpbm.c)
+ - The color inkjet drivers initialized the params_size field of the
+static instance incorrectly, resulting in garbage in the last few structure
+members when instances were copied. (gdevcdj.c)
+ - The 24-bit PCX driver didn't pad each scan line to an even number
+of bytes. (gdevpcx.c)
+ - The svga16 driver initialized its procedures incorrectly.
+(gdevpcfb.c)
+
+Adds text writing capability to the PDF writer. In its present form, this
+is a very bad hack: it only works for the 14 built-in fonts with their
+standard encodings. (gdevpdfx.h, gdevpdf.c, gdevpdfp.c, gdevpdft.c)
+
+Adds garbage collection and finalization for device instances (gscdefs.h,
+gsdevice.h, gxdevice.h, gconf.c, gdevmrop.c, gsdevice.c, gslib.c, gsmain.c).
+(See the "Driver instance allocation" section of drivers.doc for more
+details about what is required to make this work.)
+
+ - When an open device is freed (explicitly, by garbage collection,
+or by 'restore'), if the device was allocated dynamically by Ghostscript's
+standard allocator, the device's close procedure will be called. THIS IS A
+NON-BACKWARD-COMPATIBLE CHANGE for dynamically created devices, which
+formerly were not closed automatically, even when Ghostscript exited.
+
+ - Device instances allocated in GC-able space will be traced
+like other objects, assuming they have proper structure descriptors.
+
+Provides a (very slow but correct) default implementation of copy_alpha.
+(gxcindex.h, gdevdflt.c, gsimage4.c)
+
+Removes the implementation of copy_alpha in gdevpbm.c, since this is now
+implemented (more efficiently) in gdevm24.c. (gdevpbm.c)
+
+Adds TextAlphaBits and GraphicsAlphaBits as readable parameters for all
+devices. (gsdparam.c, gdevpbm.c, gdevsvga.c)
+
+</pre><h3><a name="V3.65_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - There were some attempts to coerce long to short pointers
+on segmented platforms. (gsdparam.c, gstype1.c)
+ - The stack could overflow on the 16-bit MS Windows platform.
+(gxfill.c, gxclread.c)
+ - The DLL callback parameter for window resize events was computed
+incorrectly on 16-bit systems. (gdevwdib.c)
+ - A file included gxdevice.h unnecessarily. (bcwin.mak,
+bcwin32.mak, msvcwint.mak, gp_mswin.c)
+
+</pre><h3><a name="V3.65_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Storing into a read-only dictionary with def or store was
+allowed. (dstack.h)
+ - If the interpreter allocated extra space for a dictionary
+to round its storage size up to a power of 2, it was possible for
+length to exceed maxlength. (idict.c, iinit.c)
+ - The if and ifelse operators didn't check that their
+'procedure' arguments were actually procedures. (interp.c, zcontrol.c)
+ - The undef operator was defined even in Level 1
+configurations. (We need this capability for all configurations, so
+we always define .undef.) (zdict.c, gs_*.ps, pdf_*.ps)
+ - In Level 1 configurations, copying a dictionary should copy the
+access attributes, but it didn't. We have to work around this
+compatibility quirk in a lot of places. (gs_cidfn.ps, gs_cmap.ps,
+gs_dps1.ps, gs_fonts.ps, gs_init.ps, gs_l2img.ps, gs_lev2.ps, gs_pdf.ps,
+gs_pfile.ps, gs_res.ps, gs_setpd.ps, gs_type1.ps, zdict.c)
+ - DSC comments that crossed a buffer boundary didn't call the
+scan_dsc_proc. (iscan.c)
+ - "statusdict /setpage get exec" caused an error. (gs_statd.ps)
+ - The default size of systemdict had become slightly too small.
+(iinit.c)
+ - Doing a showpage or copypage would cause the equivalent of a
+setpagedevice at the next restore or grestore. We aren't entirely sure that
+the fix we made doesn't have bad side-effects. (gs_setpd.ps)
+ - Not all filters accepted (and ignored) an optional dictionary
+parameter on the stack. (ifilter.h, zfbcp.c, zfdecode.c, zfilter.c,
+zfilterx.c, zfzlib.c, zmisc1.c)
+ - The PixelDifference filters required a Columns parameter, rather
+than defaulting it to 1. (spdiffx.h, zfdecode.c)
+ - Contrary to the NEWS entry for release 3.60, the LZW filters did
+not implement pixel differencing. (zfdecode.c, zfilter2.c)
+ - readstring with a 0-length string didn't signal a rangecheck.
+This doesn't make a lot of sense to me, but it's what the Adobe
+documentation specifies. Unfortunately, we have to work around this in a
+number of places that assumed the sensible definition (return () true
+without reading anything). (gs_l2img.ps, pdf_font.ps, zfileio.c)
+ - Encoded number strings didn't work (bug introduced in 3.64).
+(ibnum.c)
+ - The allocator could produce spurious "free large 0x...... chunk
+not found" messages. (These didn't cause any harm, but they were
+disturbing.) (gsalloc.c)
+
+Changes the default transfer function for high-resolution devices so
+that it is the identity function if the device is continuous-tone.
+(gs_init.ps)
+
+Undoes the "subversion" of zgetdevice noted in release 3.61, since it
+is now possible to copy devices safely. (zdevice.c)
+
+Changes the implementation of the garbage collector and restore so that
+object finalization code may safely free objects. (igc.c, isave.c)
+
+Reimplements essentially all of Type 1 BuildChar in C. (gs_init.ps,
+gs_type0.ps (deleted), gs_type1.ps, ifont.h, zchar.c, zchar1.c, zfont.c)
+
+Reimplements DISKFONTS as a separate feature (diskfont.dev), and changes it
+to use Type 4 fonts rather than special machinery. Currently this feature
+is included only in the makefiles for 16-bit architectures. (bc.mak,
+bcwin.mak, int.mak, tc.mak, gs_diskf.ps, gs_fonts.ps, gs_type1.ps)
+
+Converts the library search path from a list of strings to a (PostScript)
+array of strings, one string per directory. (iminst.h, main.h, gs.c,
+gsmain.c, zfile.c)
+
+Adds a hook procedure scan_comment_proc for processing all comments,
+similar to scan_dsc_proc. If both are set, scan_comment_proc is used only
+for non-DSC comments. (iscan.h, iscan.c)
+
+</pre><h3><a name="V3.65_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - Encrypted PDF files produced a random error (usually ioerror in
+--token--) rather than a meaningful message. (pdf_main.ps)
+ - Color space setting didn't work. (gs_pdf.ps)
+ - The algorithm for skipping a possible blank line following the
+'stream' keyword wasn't robust enough. (We aren't sure the new algorithm is
+exactly right, either.) (pdf_base.ps)
+
+Gets rid of the special handling of the LZW decoding filter, since the
+filter itself now handles the Predictor facility. (pdf_base.ps)
+
+</pre><h3><a name="V3.65_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - Configurations with LZW encoding but not decoding had an
+undefined reference. (lib.mak, slzwc.c, slzwd.c)
+ - The LZW-compatible encoder didn't provide a 'reset' procedure.
+(slzwce.c)
+ - The PixelDifference filters didn't work for most parameter
+combinations in which each pixel took up more than 1 byte. (spdiff.c)
+ - Temporary write streams could cause an infinite loop. (We only
+need such streams for the Predictor = 2 case of LZWEncode: this is why the
+bug never showed up before.) (stream.c)
+
+Adds an optional reinitialization procedure to the stream template. Note
+that this is not the same as the PostScript 'reset' operation or the stream
+resetting operation invoked by sreset: the reinit procedure in the template
+reinitializes any internal state of the encoder or decoder without affecting
+buffered data. (scommon.h, strimpl.h, sbcp.c, sbhc.c, slzwce.c, slzwd.c,
+slzwe.c, smtf.c, spdiff.c, srle.c) ****** NOT DONE YET: sbwbs.c, szlibd.c,
+szlibe.c
+
+Adds a decoding stream for the run-length compression used in PCX.
+(spcxx.h, spcxd.c)
+
+</pre><h3><a name="V3.65_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - A recent edit introduced an extraneous right parenthesis.
+(gpcheck.h)
+ - A minor nit in a macro could cause incorrect grouping of 'if'
+statements under implausible conditions. (gsmdebug.h)
+ - The first data plane buffer of an image enumerator didn't get
+marked during garbage collection. (gsimage.c)
+ - The Watcom C compiler required splitting up a declaration.
+(gxcmap.h)
+ - The extern declarations for the tables in gconf.c weren't gathered
+together in one place. (gscdefs.h, gxiodev.h, gconf.c, gsdevice.c, gslib.c,
+gsinit.c, gsiodev.c)
+ - charpath and show produced different output. We fixed this by
+undoing a "bug fix", introduced in version 2.9, which suppressed hinting and
+coordinate rounding for charpath; we aren't sure this won't cause some
+obscure problems to reappear. (gstype1.c)
+ - Clipping with a rectangle usually created a 3-rectangle clipping
+list, slowing down all drawing operations (performance bug only).
+(gxacpath.c)
+ - stroking in a rotated coordinate system sometimes thought lines
+were always thin when they actually weren't. (gxstroke.c)
+ - An unsigned quantity wasn't properly converted to signed, possibly
+causing band path coordinates to get mangled. (gxclread.c)
+ - A bug in the Borland compiler caused an unsigned quantity to be
+interpreted as signed, causing band path coordinates to get mangled.
+(gxclread.c)
+
+Changes structure type pointers on 16-bit segmented systems to full
+32-bit pointers. This will increase time and space requirements very
+slightly on these systems. (gsmemory.h, gxobj.h)
+
+Changes the memory manager so that object finalization code may safely free
+objects. (gsmemory.h, gsstruct.h, gsalloc.c, gsmemory.c)
+
+Refactors the Type 1 CharString interpreter so it can be included in
+the imager library. (gstype1.h, gxtype1.h, gstype1.c)
+
+Starts to refactor the implementation of band lists in memory so that it can
+use any encoding/decoding filter. Currently this choice is made at compile
+time, but it could easily be made dynamic. (gxclmem.h, gxclmem.c)
+
+Starts to refactor image rendering so that, like path filling and stroking,
+it only uses imager state and can be done after banding. (gxcmap.h,
+gxdraw.h, gximage.h, gsimage*.c, gxcmap.c)
+
+Speeds up copy_mono for 2-bit-per-pixel devices a little. (gdevm2.c)
+
+Implements an optimized copy_alpha for 24-bit memory devices. (gdevmem.h,
+gdevm24.c)
+
+Speeds up filling rectangles significantly. (gsbitops.c)
+
+Changes the band list rasterizer to use the memory space of the device
+rather than the C heap: our allocator is considerably faster than malloc.
+(gxclread.c)
+
+Speeds up stroking a little, especially in 90 degree rotated coordinate
+systems. (gxstroke.c)
+
+</pre>
+
+<h2><a name="Version3.64"></a>Version 3.64 (limited, incremental) (1/27/96)</h2>
+
+<p>
+This release fixes a few more bugs, including some serious bugs in band
+lists, and adds pdfmark processing to the PDF writer. The PDF writer is
+still not fit for real use, since it converts all text characters into 720
+dpi bitmaps and turns images into zillions of tiny rectangles (!), but it
+should be producing legal output.
+
+<h3><a name="V3.64_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - Frans van Hoesel's e-mail address was incorrect. (gdevdjet.c)
+ - The man page for ansi2knr was out of date. (ansi2knr.1)
+ - The description of a procedure was out of date. (gxdcolor.h)
+
+Notes that several "optional" features are required in order to obtain the
+full PostScript Level 1 functionality at the library level. (lib.doc)
+
+Documents the top-level interpreter API. (imain.h)
+
+Adds details on differences between the imager API and the PostScript
+graphics operators. (lib.doc)
+
+Notes (here, in NEWS) that the change for device prototypes in 3.61 made the
+protection attributes of a device significant for the first time. Only the
+writable attribute is significant so far. (news)
+
+</pre><h3><a name="V3.64_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The .dev rules in the library makefiles didn't list echogs as a
+dependency. (jpeg.mak, libpng.mak, zlib.mak)
+ - The install rule tried to install gs.1.1 etc. rather than gs.1
+etc. (unix-end.mak)
+ - The install rule tried to install some nonexistent *.1 files.
+(unix-end.mak)
+
+Adds 'help' and '?' procedures to assist users who don't read the
+documentation. (gs_init.ps)
+
+Adds -A-, -E-, and -Z-... to turn off debugging flags. (gs.c)
+
+Adds a -dDELAYBIND switch to delay binding operators, to allow special
+packages like pstotext to redefine them. (gs_init.ps)
+
+</pre><h3><a name="V3.64_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - Fonts produced by rollconv.ps left a couple of items on the
+operand stack, and left array packing set to true. (rollconv.ps)
+
+Makes ansi2knr require that the first token after a function header be a
+left brace on the next line, so it can cope with some macros in IJG release
+6a. Also updates it to work better without the GNU configure machinery, and
+on some old compilers. (ansi2knr.c)
+
+Changes align.ps so it can be used directly to determine the margin
+parameters. (align.ps, psfiles.doc)
+
+</pre><h3><a name="V3.64_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The TIFF/F (G3 and G4) drivers were broken (bug introduced in
+3.60). (gdevtfax.c)
+ - The PDF writer produced invalid output for 0-width, 0-height
+images. (gdevpdfi.c)
+ - The PDF writer wasn't a page device. (gdevpdf.c)
+ - The PDF writer assigned the Contents node rather than the Pages
+node as the Parent of each page. (gdevpdfx.h, gdevpdf.c)
+
+Corrects the margin information for the DeskJet printers to be the actual
+values observed on a printer; all of the values in the file were wrong.
+(gdevdjet.c)
+
+Adds pdfmark recognition and conversion to the PDF writer. All documented
+pdfmarks (ANN, ARTICLE, DEST, DOCINFO, DOCVIEW, LNK, OUT, PAGE, PAGES, PS)
+are recognized and converted, but some of them are not converted correctly.
+(gs_pdfwr.ps, gdevpdfx.h, gdevpdf.c, gdevpdfm.c)
+
+Adds recognition of all Distiller parameters, except *ImageDict, to the PDF
+writer. Currently only ASCII85EncodePages actually has any effect.
+(gs_pdfwr.ps, gdevpdfx.h, gdevpdfp.c)
+
+Ensures that PDF output files include at least a default Info dictionary.
+(gdevpdf.c)
+
+Changes the handling of coordinates in PDF output files so that the scale is
+always 72 dpi, and so that each graphics operator is on a line by itself,
+for compatibility with Adobe Illustrator. (gdevpdfx.h, gdevpdf*.c)
+
+Adds a driver for ImageMagick's MIFF format. The driver currently only
+produces 24-bit, direct color, RLE compressed output. (gdevmiff.c)
+
+</pre><h3><a name="V3.64_Platforms"></a>Platforms</h3><pre>
+
+Changes the gp_check_interrupts platform procedure so that instead of just
+returning a Boolean, it can now also return a negative error code. THIS IS
+(THEORETICALLY) A NON-BACKWARD-COMPATIBLE CHANGE. However, since all
+implementations of this procedure should only have been returning 0 or 1 up
+to now, no existing code should need to be changed. (gpcheck.h, gsmisc.c)
+
+</pre><h3><a name="V3.64_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - devicenames was accidentally deleted. (gs_init.ps)
+ - -dFAKEFONTS could cause the memory manager to waste a lot of time.
+(gs_dps1.ps)
+ - Using -r or -dFIXEDMEDIA with a non-page device caused an error.
+(gs_init.ps)
+ - A VMS compiler reserves the word "readonly", which was used as a
+parameter name. (imain.h, gsmain.c)
+ - A garbage collection during the execution of x/y/xyshow with an
+array providing the values could get confused. (ibnum.h, ichar.h, stream.h,
+ibnum.c, iscanbin.c, zchar.c, zchar2.c, zdps1.c, zupath.c)
+ - Errors in encoded number strings produced a typecheck rather than
+a rangecheck error. (ibnum.c, zupath.c)
+
+Updates the DCT filters for IJG release 6a. (zfdctc.c)
+
+Provides an API call for getting the real stdio files. (imain.h,
+gs.c, gsmain.c)
+
+</pre><h3><a name="V3.64_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - If the CCITTFaxEncode stream encountered an output buffer boundary
+while processing the last scan line of input, it could fail to process some
+the scan line. (scfe.c)
+ - A couple of pointers weren't always initialized, possibly
+confusing the garbage collector. (stream.c)
+ - The weighting coefficient structures used for image scaling
+weren't declared properly for the garbage collector. (siscale.h, siscale.c)
+
+</pre><h3><a name="V3.64_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Unrotated patterns always used the bounding box size as the step,
+rather than XStep/YStep. (gspcolor.c)
+ - Alpha computations for graphics could be seriously incorrect (bug
+introduced in 3.6x). (gdevabuf.c)
+ - The length of the next_data_x command for the fill_mask operation
+was incorrect, causing the band list to become confused (bug introduced in
+3.63). (gxclpath.c)
+ - An extern was omitted, causing linker warnings. (gxdevice.h)
+ - RasterOps could cause an invalid access because the palette
+for a memory device wasn't set. (gdevmrop.c)
+ - gximage.h was included unnecessarily. (gspaint.c)
+ - Color screens caused a segmentation fault (bug introduced in
+3.6x). (gxcht.c)
+ - cshow returned the width in an incorrect coordinate system.
+(gscoord.h, gschar.c)
+ - Filling or stroking a path that lay entirely off the page in the
++X or +Y direction could corrupt memory (bug introduced in 3.6x).
+(gxclpath.c)
+ - When banding, painting characters with halftones produced random
+results (bug introduced in 3.6x). (gxclpath.c)
+ - When banding, characters could get clipped when they shouldn't be
+(bug introduced in 3.6x). (gxclpath.c)
+ - The default implementation of fill_mask could discard clipped
+bitmaps (bug introduced in 3.6x). (gdevdflt.c)
+ - Non-halftoned 24-bit colors could get garbled when banding (bug
+introduced in 3.6x). (gxclist.c)
+ - When banding, if a stroked path had subpaths that fell entirely
+outside the current band, the rest of the path was drawn in the wrong place
+(bug introduced in 3.6x). (gxclpath.c)
+
+Speeds up image interpolation on machines with slow floating point.
+(siscale.h, siscale.c)
+
+Speeds up interpolated images when using device color spaces. (gxcvalue.h,
+gxfrac.h, gdevht.c, gxcmap.c, gsimage.c, gsimage3.c)
+
+Speeds up color mapping a little by removing tests and calls in favor of
+code copying. (gxcmap.c)
+
+Implements RasterOp for 24-bit RGB devices. (gdevm8.c, gdevm24.c,
+gdevmrop.c)
+
+</pre>
+
+<h2><a name="Version3.63"></a>Version 3.63 (limited, incremental) (1/14/96)</h2>
+
+<p>
+This release has the usual collection of bug fixes, and two significant
+additions: AccurateScreens, and the first draft of a PostScript-&gt;PDF
+converter ("distiller").
+
+<h3><a name="V3.63_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - Some documentation for pstoppm.ps was out of date. (psfiles.doc)
+ - Documentation for acctest.ps, view*.ps, and zeroline.ps was
+missing. (psfiles.doc)
+ - The documentation for rollconv.ps omitted the .CSR file.
+(rollconv.ps)
+
+Removes an inappropriate RCS Id line. (gs.1)
+
+Adds a list of paper sizes to the man page. (gs.1)
+
+Suggests that driver authors use parameterization rather than copying when
+possible. (drivers.doc)
+
+Adds an announcement of Ghostscript support on CompuServe. (README)
+
+Documents the new -dCOLORSCREEN switch and the existing -dDITHERPPI=lpi
+switch. (use.doc)
+
+Notes that the OS/2 implementation now requires EMX/GCC 0.9b rather than
+0.9a. (install.doc)
+
+Adds some new man pages. (pdf2ps.1, ps2ascii.1)
+
+Greatly expands lib.doc. (lib.doc)
+
+</pre><h3><a name="V3.63_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The pg target for Unix platforms didn't include some necessary
+additional X11 libraries. (unix-end.mak)
+ - The Unix library makefile didn't define CCAUX or CCLEAF.
+(ugcclib.mak)
+ - Unix systems didn't `install' some .ps files. (unix-end.mak)
+
+Extends genconf so that features at the library level can have
+initialization procedures. (gconf.c, genconf.c, gsinit.c)
+
+Adds a -dCOLORSCREEN[=false] switch to force enabling or disabling of
+4-color screens. (gs_init.ps, gs_setpd.ps)
+
+</pre><h3><a name="V3.63_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - The prfont utility didn't leave enough of a margin on the left.
+(prfont.ps)
+ - The ps2ascii utility still created files _temp_.out and _temp_.err
+even though they are no longer used. (ps2ascii.ps)
+ - The acctest.ps file was empty, rather than including a test
+program. (acctest.ps)
+
+Adds ps2pdf[.bat] scripts for invoking the new pdfwrite driver. (ps2pdf,
+ps2pdf.bat, unix-end.mak)
+
+</pre><h3><a name="V3.63_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The x11alpha driver had a patch that suppressed output in many
+cases. (gdevxalt.c)
+ - The X driver set up a parameter incorrectly in copy_color.
+(gdevx.c)
+ - An explicit cast was needed to handle a 'const' problem.
+(gdevpng.c)
+
+Adds a pdfwrite driver that creates syntactically correct PDF output. The
+output is only reasonable for fill/stroke graphics, not for text or images.
+(iscan.h, sa85x.h, sfilter.h, gdevpdf.c, sfilter2.c, zfdecode.c)
+
+</pre><h3><a name="V3.63_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The test for WinExec failure on Win32 was incorrect. (gp_mswin.c)
+ - getenv was declared redundantly on OS/2. (gp_os2.c)
+ - gs16spl.c was missing &lt;string.h&gt;. (gs16spl.c)
+
+</pre><h3><a name="V3.63_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Images read data in smaller and smaller increments (performance
+bug only). (zpaint.c)
+ - Images with MultipleDataSources=true and two or more DataSources
+referencing the same stream could get confused. (zpaint.c)
+ - Invoking setpagedevice with an undefined key, even with Policy =
+1, caused an error. (gs_setpd.ps)
+ - IEEE floats in binary tokens or encoded number strings were read
+incorrectly on CPUs that use non-IEEE floating point. (ibnum.c)
+
+Adds a 'const' to the second parameter of zimage_setup. (zimage2.c,
+zpaint.c)
+
+Encapsulates the filling of free memory blocks in a macro. (igc.c,
+igcstr.c)
+
+</pre><h3><a name="V3.63_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - If the first line of a file began with % but the line was longer
+than 255 characters, an error occurred. (pdf_main.ps)
+ - Masked images didn't set the color before drawing. (gs_pdf.ps)
+ - Extraneous blank lines in the trailer or cross-reference region
+caused an error. (pdf_base.ps, pdf_main.ps)
+
+</pre><h3><a name="V3.63_Streams"></a>Streams</h3><pre>
+
+Speeds up image interpolation a little. Much more could be still be done.
+(siscale.c)
+
+</pre><h3><a name="V3.63_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - An error in handling a boundary condition could cause a horizontal
+streak of pixels to be turned on or off when it shouldn't be. (gxfill.c)
+ - The new scan-line-based filling loop could write pixels twice.
+(The old trapezoid-based loop still does write pixels twice.) (gxfill.c)
+ - For multi-plane images, gs_image_next only sets *pused for the
+last plane; this wasn't documented. (gsimage.h)
+ - Images with MultipleDataSources=true and two or more DataSources
+referencing the same stream could get confused. (gsimage.h, gsimage0.c)
+ - 12-bit gray images caused an invalid memory access. (gsimage.c)
+ - Nearly-zero-thickness lines didn't get filled, because the hack
+that compensates for this peculiarity of the MS Windows PostScript driver
+accidentally got disabled. (gxfill.c)
+ - Some casts to remove 'const' were omitted. (gxclread.c)
+ - 1-line-high bitmaps could get written in the band list with an
+inconsistent number of bytes, causing errors when reading. (gxcldev.h,
+gxclbits.c, gxclist.c, gxclpath.c, gxclread.c)
+ - Isolated dots produced by round caps usually disappeared. (They
+still disappear sometimes.) (gxstroke.c)
+ - On 16-bit platforms, the computation of t2 and t3 in
+gx_curve_x_at_y could overflow, leading to incorrect output. (gxpcopy.c)
+ - Stroking horizontal or vertical lines could produce variations of
+1 pixel in the line width. (gxstroke.c)
+ - The default clipping region for band rendering was too large,
+leading to wasted work. (gxclread.c)
+ - Guarantees no double pixel writing when necessary, i.e., when a
+non-idempotent RasterOp is selected. (gsropt.h, gxfill.c)
+ - For unrotated black-and-white images, one column of pixels at the
+right edge of the image might be incorrect. (gsimage1.c)
+ - A const pointer was passed inappropriately. (gxistate.h,
+gscoord.c)
+ - CIE color conversion could address 1 element beyond the end of an
+array, with unpredictable results. (gscie.c)
+
+Separates out the higher-level band list facilities, so they can be an
+optional feature. (lib.mak, gxcldev.h, gxclpath.h, gxclbits.c, gxclist.c,
+gxclpath.c, gxclread.c)
+
+Implements bitmap (fill_mask) clipping in the band list. (gxcldev.h,
+gxclpath.h, gxclist.c, gxclpath.c, gxclread.c)
+
+Starts to separate out the RasterOp facility as an optional feature.
+(lib.mak, gxdevice.h, gxdevrop.h, gdevdflt.c, gdevmrop.c)
+
+Encapsulates the filling of free memory blocks in a macro, at the request of
+a licensee. (gdebug.h, gsmdebug.h, gsmemory.h, gs.c, gsalloc.c, gsmemory.c,
+gxbcache.c)
+
+Speeds up fill_rectangle for 32-bit devices. (gdevm32.c)
+
+Speeds up path writing in band lists a little. (gxclpath.c)
+
+Implements AccurateScreens along the lines described in the Adobe
+documentation. The current implementation can produce very large
+super-cells, so it will not always be able to actually increase the screen
+accuracy. (gxdht.h, gsht.c, gshtscr.c)
+
+</pre>
+
+<h2><a name="Version3.62"></a>Version 3.62 (limited, incremental) (12/26/95)</h2>
+
+<p>
+This release makes some licensee-requested improvements in the garbage
+collector and fixes a couple of minor bugs. It also constitutes a
+checkpoint for the forthcoming forked 3.53 release.
+
+<h3><a name="V3.62_Documentation"></a>Documentation</h3><pre>
+Notes that for Win32s, gs16spl.exe must be in the same directory as
+gswin32.exe. (install.doc)
+
+Changes `3.N' to a real version number in the man page. (gs.1)
+
+Adds a reference to dos-psv, another "dumb terminal" user interface for
+Ghostscript intended for MS-DOS users. (README)
+
+</pre><h3><a name="V3.62_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The stack size for some of the PC platforms was set too small.
+(watc.mak, watcwin.mak)
+
+Changes the default value of ORIENT1 from false to true, i.e., assumes that
+a value of 1 for the orientation parameter of setpageparams indicates
+portrait orientation. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. It only
+affects files created for roll-media imagesetters. (gs_init.ps, use.doc)
+
+</pre><h3><a name="V3.62_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - The definition of the op_index_op_array_table macro had an
+incorrect trailing semicolon. (opdef.h)
+ - Setting the PageSize policy to 1 and then trying to set the page
+size caused an error if FIXEDMEDIA was selected. (gs_setpd.ps)
+
+Changes the garbage collector marking phase so that instead of just using a
+single block (allocated, free, or default) for the mark stack, it can chain
+all three types of block together. (igc.h, igc.c, igcstr.c, ilocate.c)
+
+Refactors the garbage collector slightly to reduce inter-module
+dependencies. (int.mak, igc.h, igcstr.h, igcstr.c)
+
+Changes the garbage collector to keep track of ranges within each chunk that
+must be scanned if the mark stack overflows. (gxalloc.h, igc.c)
+
+Adds [write]===[only] procedures, which act like == but also print the
+contents of dictionaries, and ppstack, which acts like pstack but uses ===.
+Changes ESTACKPRINT and OSTACKPRINT to use === rather than ==. (gs_init.ps,
+gs_setpd.ps)
+
+</pre><h3><a name="V3.62_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - If a PDF file substituted a calibrated color space for the
+DeviceGray or DeviceRGB color space using a ColorSpace resource, the
+PostScript file that pdf2ps produced from that PDF file caused an error.
+(gs_pdf.ps)
+
+</pre><h3><a name="V3.62_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The debugging code for checking the sorting of line lists didn't
+check for an empty list. (gxfill.c)
+
+</pre>
+
+<h2><a name="Version3.61"></a>Version 3.61 (limited) (12/10/95)</h2>
+
+<p>
+This limited release fixes a few bugs (including a couple that significantly
+affected character quality) and also includes some substantial performance
+improvements.
+
+<h3><a name="V3.61_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - The directory name for the PNG library was incorrect.
+(libpng.mak)
+ - The analysis of curve monotonocity in gxpcopy.c had an error.
+(gxpcopy.c)
+
+Changes the subdirectory names for zlib and libpng to be consistent.
+(make.doc)
+
+Documents a possible problem with object file format incompatibilities in
+certain versions of GNU/Linux. (make.doc)
+
+Documents the new distinction between devices and device prototypes.
+(language.doc)
+
+Adds a pointer to DEC's free pstotext utility. (README)
+
+</pre><h3><a name="V3.61_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - zlib.mak omitted some files in the encoding module dependencies.
+(zlib.mak)
+ - os2.mak referred to png.mak rather than libpng.mak. (os2.mak)
+ - The png devices didn't include gdevpccm.$(OBJ) as a required file.
+(devs.mak)
+ - Some modules in lib.mak referred to stream.h, which was defined in
+int.mak. (int.mak, lib.mak)
+ - Quite a few dependencies on header files were missing from the
+makefiles. (int.mak, lib.mak, *.mak)
+
+Adds a 'pg' target to the Unix makefiles, for building profiling
+configurations. (unix-end.mak)
+
+</pre><h3><a name="V3.61_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - Type 1 fonts in which some characters are defined by PostScript
+procedures couldn't be compiled. (ccfont.h, iccfont.c, font2c.ps)
+ - pdf2ps didn't write Widths or Encoding in the converted file,
+producing incorrect spacing and incorrect characters. (pdf_2ps.ps)
+ - markhint.ps didn't handle the Type 1 'div' operator, causing
+typecheck errors. (markhint.ps)
+ - markhint.ps ignored the hstem3 and vstem3 hints. (markhint.ps)
+
+Changes the rollconv.ps utility to produce files whose names conform to the
+8.3 length restriction, and to reduce the fixed RAM overhead for Kanji
+fonts. (rollconv.ps)
+
+Adds a utility for detecting compiler problems that affect Ghostscript.
+(bughunt.sh)
+
+</pre><h3><a name="V3.61_Drivers"></a>Drivers</h3><pre>
+
+Adds anti-aliasing capability (-dTextAlphaBits and -dGraphicsAlphaBits) to
+the PGM and PPM drivers. (gdevpbm.c)
+
+Declares the static_procs member of the device structure as const *. This
+should have been done a long time ago! (drivers.doc, gxdevice.h)
+
+</pre><h3><a name="V3.61_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - Printing didn't work in 32-bit MS Windows environments.
+(bcwin32.mak, gdevmswn.c, gp_mswin.c)
+ - There were some compatibility problems with IBM C. (os2.mak,
+gsdll.h, gdevpm.c, gp_os2.c)
+
+Adds the PNG drivers to the 32-bit MS Windows and OS/2 makefiles.
+(bcwin32.mak, os2.mak)
+
+Adds a conditional to work around a bug in gcc 2.7.x (it didn't recognize
+that the target of a const T * might still be mutable through aliasing).
+(stdpre.h)
+
+</pre><h3><a name="V3.61_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - Rasterizing a character in a Type 1 font with an invalid FontBBox
+left some garbage on the operand stack (bug introduced in 3.52 or 3.60).
+(gs_type1.ps)
+ - The font substitution algorithm could fail or loop. (gs_fonts.ps)
+
+Adds a little more support for CID fonts and CMaps. (gs_cidfn.ps,
+gs_cmap.ps)
+
+</pre><h3><a name="V3.61_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - An #include &lt;memory_.h&gt; was missing. (ziodev.h)
+ - Scanner-detected errors (primarily syntaxerror) didn't report the
+file position. (gs_init.ps)
+ - Rotated characters were rendered incorrectly (bug introduced in
+3.52). (gstype1.c)
+ - Some compilers got upset about the use of 'dict' as a variable
+name. (zdict.c)
+ - Operand stack overflows sometimes didn't set the "requested" field
+correctly. (interp.c)
+ - Using -dBufferSpace= with a non-printer device caused an error.
+(gs_init.ps)
+
+Adds zlibEncode/Decode filters. (int.mak, zfzlib.c)
+
+Separates devices from device prototypes. Prototypes, which lack the
+writable attribute, cannot be installed as the current device or have their
+parameters changed. This change allows Ghostscript to be exited and
+restarted without being reloaded, which solves some problems with DLL
+usage. ****** WE HAD TO SUBVERT THIS CHANGE BECAUSE OF MEMORY MANAGER
+PROBLEMS, by making zgetdevice return a writable reference to the
+prototype. (We finally fixed this in release 3.65.) (gs_init.ps, iref.h,
+opcheck.h, zdevice.c, ztype.c, zwppm.c)
+
+Extends the client API to allow for pushing values onto the operand stack.
+(imain.h, gs.c, gsmain.c)
+
+Defines a .setdefaultscreen procedure that sets the default halftone screen,
+transfer function, and stroke adjustment for the current device. Changes
+selectdevice and setpagedevice so that they call .setdefaultscreen;
+setpagedevice calls .setdefaultscreen before calling the Install procedure,
+so that Install can set different parameters if it wishes. Note that
+setdevice does not do this. (gs_init.ps, gs_setpd.ps)
+
+</pre><h3><a name="V3.61_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - Tf set the current text font twice, and interacted with pdf2ps in
+an awkward way. (gs_pdf.ps, pdf_2ps.ps, pdf_font.ps)
+ - If a font had variant Widths, it could get confused in the cache
+with the underlying font. (pdf_font.ps)
+ - If a character appeared twice in an encoding and the font
+specified different Widths values for the two occurrences, the last Width
+would be used. We patched this to ignore zero Widths, which is not the
+correct solution but which almost always produces correct output.
+(pdf_font.ps)
+ - Arrays containing nulls didn't print out correctly (bug introduced
+in 3.60). (gs_init.ps)
+ - Some PDF files contain very large dictionaries, which caused a
+stackoverflow. (pdf_base.ps)
+
+Speeds up the initial processing of PDF files by caching the map from page
+numbers to page objects, and by not scanning the outlines if we aren't
+producing PostScript output. (pdf_2ps.ps, pdf_base.ps, pdf_main.ps)
+
+</pre><h3><a name="V3.61_Streams"></a>Streams</h3><pre>
+
+Adds zlibEncode/Decode filters. (lib.mak, szlibx.h, szlibc.c, szlibd.c,
+szlibe.c)
+
+</pre><h3><a name="V3.61_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - glyphshow displayed a character with code 0 rather than the
+requested character (bug introduced in 3.60.) (gschar.c)
+ - If trimming white space around a character reduced its raster, the
+character was garbled in the cache (bug introduced in 3.60.) (gxccman.c)
+ - colorimage would incorrectly convert white pixels to black if the
+image color space was CMYK, the current color space was not CMYK, and the
+number of bits per pixel was 4 or 8. (gsimage2.c)
+ - One of the clipping tests for images was backwards (bug introduced
+in 3.60). (gsimage.c)
+ - Type 1 fonts that used the Flex feature applied hints to the path
+multiple times, causing dropouts, uneven stems, and other problems (bug
+probably introduced in 3.21). (gstype1.c)
+ - If a Type 1 font used the Flex feature within the accent of an
+accented character defined with seac, the shape of the accent could be
+distorted. (gxtype1.h, gstype1.c)
+ - If a Type 1 font changed hints using the hint replacement facility
+when the last operation was a closepath, the old hints would be applied a
+second time, distorting the shape. (gxhint3.c)
+ - Band lists could read garbage beyond the end of data for a band,
+causing unpredictable errors (bug introduced in 3.60). (gxclread.c)
+ - If the bounding box of the path for fill_path or stroke_path went
+outside the device page boundary when banding, out-of-bounds memory
+references occurred (bug introduced in 3.60). (gxdevice.h, gxclpath.c)
+
+Adds an alternative implementation of the core path filling algorithm that
+is much faster on objects with curves but doesn't handle Y fattening. This
+is the implementation that will normally be used for rasterizing characters.
+This implementation rasterizes curves directly, without flattening them.
+(gxfixed.h, gxpath.h, gzpath.h, gsdps1.c, gxfill.c, gxpcopy.c, gxpdash.c)
+
+Speeds up the flattening of curves substantially by omitting more redundant
+points. (gxpcopy.c)
+
+Speeds up character bitmap compression a little more. (gsbitops.h,
+gdevabuf.c, gsbitops.c, gxccman.c)
+
+Speeds up anti-aliased graphics a bit by computing a bounding box before
+converting from oversampling to alpha values, and by speeding up the
+bounding box computation itself. (gsbitops.h, gdevabuf.c, gsbitops.c,
+gxccman.c)
+
+</pre>
+
+<h2><a name="Version3.60"></a>Version 3.60 (limited) (11/20/95)</h2>
+
+<p>
+(Note: release numbers 3.54 through 3.59 were deliberately skipped.) This
+internal release includes a major redesign of band lists in order to reduce
+their size for embedded implementations, to move towards supporting "vector"
+output formats, and to further separate the imager library from the language
+interpreters.
+
+<h3><a name="V3.60_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - A comment was incorrect. (viewpbm.ps)
+ - The PixelDifference filters were not documented. (language.doc)
+ - The change from currenttime to .currenttime wasn't documented.
+(language.doc)
+ - gs.1 incorrectly stated that the default font directory name
+included the version number. (gs.1)
+ - The -g and -r switches didn't specify that the units for their
+arguments are pixels and pixels per inch respectively. (use.doc)
+ - The PageOffset page device parameter wasn't listed.
+(language.doc)
+
+Changes copy_mono and copy_color to optional procedures. (drivers.doc)
+
+Adds a reference to ps_view.ps, a "dumb terminal" user interface for
+Ghostscript intended for MS-DOS users. (README)
+
+Splits off the documentation on installing Ghostscript into a separate file.
+(readme, install.doc, use.doc)
+
+Adds documentation on the data format produced by the standard LZWEncode
+filter. (readme, lzwce.doc)
+
+Clarifies XLIBDIR vs. XLIBDIRS. (make.doc)
+
+Adds user-contributed documentation on building Ghostscript under QNX.
+(make.doc)
+
+</pre><h3><a name="V3.60_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The rule for building dfaxhigh.dev had a typo. (devs.mak)
+ - The dependencies for gdevpipe.h were missing errno__h and
+string__h. (unixtail.mak)
+ - The geninit program (the implementation of COMPILE_INITS=1) didn't
+parse the command line properly, and didn't check for PostScript files
+properly. (geninit.c)
+ - ccfontab.c was omitted from the fileset. The easiest way to fix
+this was to rename it to icfontab.c. (gs.mak, int.mak, ccfontab.c)
+ - The Unix makefiles installed caption.ls (a typo) rather than
+caption.ps. (unix-end.mak)
+ - XLIBDIR, for dynamic library access, wasn't defined. (*head.mak,
+*tail.mak, ugcclib.mak)
+
+Adds the PNG and ZLIB makefiles to the fileset. (*.mak, png.mak, zlib.mak,
+tar_cat)
+
+Puts the PixelDifference filters in the standard Level 2 set, since the LZW
+filters may invoke them (a post-Red Book addition to the PostScript language
+definition). (int.mak)
+
+Adds -Wcast-qual to the gcc compiler flags. (gcc-head.mak)
+
+Adds the PNG drivers to the standard Unix configurations.
+(ansi/cc-/gcc-head.mak)
+
+Adds a -dNOFONTPATH switch to suppress any consultation of the FONTPATH
+variable or the GS_FONTPATH environment variable. (gs_fonts.ps, gs_init.ps)
+
+</pre><h3><a name="V3.60_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - The default scaling for viewing PBM files was computed
+incorrectly. (viewpbm.ps)
+ - ps2ascii left a value on the stack for each unrecognized character
+it processed, eventually causing a stackoverflow. (ps2ascii.ps)
+
+Changes viewpbm.ps so that it simply defines P1 through P6, allowing PBM
+files to be executed with 'run'. (viewpbm.ps)
+
+Adds a small benchmark to crudely measure hardware/system performance. The
+same file can either be compiled as a C program or executed as a PostScript
+program. (bench.c)
+
+Adds a few PPD files to the distribution. There will probably be more as
+time goes on. (tar_gs, unix-end.mak)
+
+Updates the Unix lpr scripts to handle a wider variety of device options.
+(unix-lpr.doc, lprsetup.sh, unix-lpr.sh)
+
+Adds a utility for converting files produced by Macromedia's Rollup program
+to a Type 0 form directly usable by Ghostscript. (rollconv.ps)
+
+</pre><h3><a name="V3.60_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - Forwarding devices passed an incorrect first argument when
+forwarding a copy_rop operation. (gsdevice.c)
+ - Because of a typo, the LaserJet drivers had incorrect margins.
+This was probably a new bug in 3.5x. (gdevdjet.c)
+ - A private name was duplicated. (gdevtfax.c)
+ - The x11alpha driver passed invalid colors to the X library.
+(gdevxalt.c)
+ - The x11alpha driver set the blue component of colors incorrectly.
+(gdevxalt.c)
+ - Some `const' declarations were missing. (gdevtifs.c, gdevtfnx.c,
+gdevxxf.c)
+ - The size of A4 paper was slightly inconsistent across drivers.
+(gdevdjet.c, gdevl256.c)
+
+Provides default implementations of copy_mono and copy_color in terms of
+fill_rectangle. (gxdevice.h, gsdevice.c)
+
+Adds forwarders for sync_output and output_page. (gxdevice.h, gsdevice.c)
+
+Adds new optional procedures to the driver interface:
+ - fill_path for filling a path with a color;
+ - stroke_path for stroking a path;
+ - fill_mask for painting a color through a mask.
+The default implementations use the existing rasterizer algorithms. This
+involves a NON-BACKWARD-COMPATIBLE change to the parameters of a few
+internal routines:
+ gs_currentlineparams
+ gx_fill_path, gx_fill_path_only, gx_path_expand_dashes, gx_path_flatten
+and two externally visible routines not part of standard PostScript:
+ gs_setfilladjust, gs_currentfilladjust
+(gdevmem.h, gdevprn.h, gspath.h, gspenum.h, gxcpath.h, gxdevice.h, gxdraw.h,
+gxpaint.h, gxpath.h, gscoord.c, gsdevice.c, gspaint.c, gsstate.c,
+gxacpath.c, gxclist.c, gxclread.c, gxcpath.c, gxdraw.c, gxfill.c, gxpaint.c,
+gxpcmap.c, gxpcopy.c, gxstroke.c)
+
+Makes major changes to the dithering algorithm for the color DeskJet and
+BubbleJet drivers, contributed by a user. (gdevcdj.c)
+
+Adds a contributed 12-bit RGB TIFF driver. (gdevtfnx.c)
+
+</pre><h3><a name="V3.60_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The printjob created by Ghostscript was called "Ghostscirpt"
+instead of "Ghostscript". (gp_os2.c)
+ - An "export" declaration was omitted from DllInit. (gp_mswin.c)
+
+Removes gp_get_clock (its interface was changed from calendar
+days/milliseconds to epoch seconds/nanoseconds in an undocumented,
+NON-BACKWARD-COMPATIBLE change in 3.51), and adds a new gp_get_realtime
+procedure that returns epoch seconds/nanoseconds. This too is a
+NON-BACKWARD-COMPATIBLE change; it is required because we overlooked the
+prior change in a batch of user-contributed code. (gp.h, gp_*.c)
+
+</pre><h3><a name="V3.60_Fonts"></a>Fonts</h3><pre>
+
+Adds Heavy as a synonym for Bold when doing intelligent font substitution.
+(gs_fonts.ps)
+
+</pre><h3><a name="V3.60_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - The setup for the CCITTFax filters set the 'raster' element
+redundantly. (zfdecode.c)
+ - currentscreen and currentcolorscreen could give an error if the
+current screen was set with sethalftone (or, for currentscreen,
+setcolorscreen). (gs_dps1.ps)
+ - The font operators didn't work properly if a PostScript file
+redefined certain operator names. (gs_res.ps)
+ - The CCITTFax filters imposed a limit of 9999 Rows or Columns. The
+new limit is 32000. (zfdecode.c)
+ - Streams could get removed from a bookkeeping list prematurely, and
+wind up dangling. (zfile.c)
+ - The garbage collector didn't ask for large enough a mark stack,
+and only used half of what it got. (This was only a performance problem.)
+(igc.c)
+ - Two private names duplicated names in a vendor library. (zbseq.c)
+ - Type 1 fonts didn't enforce the maximum value of BlueScale, which
+caused some faulty fonts produced by Fontographer to produce incorrect
+output. (zfont1.c)
+ - cvs / cvrs / = didn't produce Adobe-compatible output.
+(gs_init.ps, iutil.h, iutil.c, zfileio.c)
+ - Multiple -I switches set the search path incorrectly. (gsmain.c)
+ - Many `const' declarations were missing. (icie.h, idparam.h,
+iref.h, iutil.h, idparam.c, iinit.c, ilocate.c, iname.c, interp.c, iparam.c,
+iutil.c, zcie.c, zfile.c, zgstate.c, ziodev.c, ztype.c)
+ - Fonts could wind up with a pointer to the wrong VM space, causing
+potential GC or save/restore confusion. (zfont2.c)
+ - upath could leave garbage on the stack if it failed. (gs_dps1.ps)
+
+Speeds up rasterizing characters into the cache a little. (gs_type0.ps)
+
+Changes the default limit on the size of cached characters from the maximum
+of (18 points or 5 times the "average" character size) to (18 points or 1%
+of the total cache size). (gs_init.ps)
+
+Adds the DecodedByteAlign parameter to the CCITTFax filters. (zfdecode.c)
+
+Updates some code for compatibility with the new fill_path driver procedure.
+(zupath.c)
+
+Replaces .set/currentfilladjust with .set/currentfilladjust2, and defines
+the former in terms of the latter. (gs_init.ps, zgstate.c)
+
+Extends the make[word]imagedevice operators to accept palette values of 16,
+24, and 32, for creating true-color image devices. (zdevice.c)
+
+Changes realtime to match the definition of gp_get_realtime. (zmisc.c)
+
+Removes the [.]currenttime operator. realtime provides interval timing in
+milliseconds; the %Calendar% IODevice provides calendar times. (zmisc.c)
+
+Extends the LZW filters to handle the PDF Predictor (pixel-differencing)
+option. (zfdecode.c, zfilter2.c, zfpdiff.c (deleted))
+
+</pre><h3><a name="V3.60_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - The length of an image's data was sometimes calculated
+incorrectly, causing an error when converting PDF to PostScript.
+(pdf_draw.ps)
+ - If word spacing and/or text spacing was non-zero, an error could
+occur. (gs_pdf.ps)
+ - Text that was both filled and stroked caused an error.
+(gs_pdf.ps)
+
+</pre><h3><a name="V3.60_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - When closing an encoding filter stream whose target was also a
+filter, the latter could get called incorrectly with last = 1, possibly more
+than once, leading to premature EOD markers. (stream.c)
+ - The LZW-compatible encoder put out an incorrect end-of-data code.
+(slzwce.c)
+ - The LZW-compatible encoder didn't put out a reset code soon
+enough. (slzwce.c)
+ - Some `const' declarations were missing. (siscale.c)
+ - Doing a sgets on a closed stream could call sreadbuf, possibly
+causing an error. (stream.c)
+
+Adds a new (optional) set_defaults procedure to the stream template, which
+sets the stream parameters to default values. We only implement it for a
+few stream types. (scfx.h, scommon.h, slzwx.h, spdiffx.h, srlx.h,
+strimpl.h, scfd.c, scfe.c, slzwce.c, slzwd.c, slzwe.c, spdiff.c, srld.c,
+srle.c)
+
+Adds a new parameter to the CCITTFax filters, DecodedByteAlign. This is an
+integer N, which must be a power of 2 between 1 (2^0) and 16 (2^4), that
+specifies that decoded data scan lines are always a multiple of N bytes.
+The encoding filter skips data in each scan line from Columns to the next
+multiple of N bytes; the decoding filter pads each scan line to a multiple
+of N bytes. Default value: 1. (scfx.h, scfd.c, scfe.c)
+
+Increases the maximum width of a scan line for the CCITTFaxEncode filter to
+32000 pixels. (scf.h)
+
+</pre><h3><a name="V3.60_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Cached characters sometimes had extra blank space on the left,
+leading to some unnecessary bit-shuffling when imaging them. (gxccman.c)
+ - In rare cases, gray halftones called gx_color_load unnecessarily.
+(gxdither.c)
+ - The list of all-bands commands wasn't initialized/reset properly.
+(gxclist.c, gxclread.c)
+ - Rendering an anti-aliased character to a non-anti-aliased device
+didn't free the temporary bitmap, causing memory to be lost. (gxccache.c)
+ - Dash patterns where the offset exactly reached a run of length 0
+skipped over the 0-length run. (gsline.c)
+ - Rectangles closed with both lineto and closepath weren't
+recognized as rectangles. This is only a performance bug. (gxpath2.c)
+ - Because of a typo in a macro formal parameter list, a private name
+was duplicated. (gsstruct.h)
+ - Text display operations didn't update the current character in the
+enumerator structure during the fastest path through the code. This only
+matters to one very unusual commercial client. (gschar.c)
+ - Some `const' declarations were missing. (gsparam.h, gxistate.h,
+stdpre.h; gdevm1.c, gsalloc.c, gsfont.c, gsimage3.c, gsmemory.c, gsmisc.c,
+gspcolor.c, gstype1.c, gxfill.c, gxpcopy.c)
+
+Changes the header files to assume that gcc on Solaris defines
+__svr4__ and that, in this case, &lt;string.h&gt; has the right stuff in it.
+(memory_.h)
+
+Refactors the character cache to share structures with a similar cache
+used by band lists. Eventually the band list may be able to reference
+the character cache directly, saving a lot of copying. (gxbcache.h,
+gxfcache.h, gsfont.c, gxbcache.c, gxccache.c, gxccman.c)
+
+Speeds up getting the side bearing and width of a Type 1 charstring a
+little. (gxtype1.h, gstype1.c)
+
+Redesigns band lists so that they can cache character bitmaps as well as
+halftone bitmaps. Characters may be written for all bands, not just the
+band(s) they appear in, depending on the setting of the CHAR_ALL_BANDS_COUNT
+parameter in gxclbits.c. (gxcldev.h, gxclist.h, gxclbits.c, gxclist.c,
+gxclread.c)
+
+Adds G4 fax compression for band list bitmaps. (gxcldev.h, gxclist.c,
+gxclread.c)
+
+Incorporates the new set_defaults procedure into the memory-based band list
+implementation. (gxclmem.c)
+
+Implements a halftoning device that can be used in a device pipeline.
+(gdevht.h, gzht.h, gdevht.c, gxcht.c)
+
+Factors out imager state from the full graphics state. This division is
+preliminary and subject to change. (gxistate.h, gxop1.h, gzstate.h,
+gsline.c, gsstate.c, gstype1.c, gxhint*.c)
+
+Implements passing fill operations in the band list, except for pattern
+color or colored halftones. (gxcldev.h, gxclist.h, gxclist.c, gxclread.c)
+
+Implements passing stroke operations in the band list, except for pattern
+color or colored halftones. (gsline.h, gslparam.h, gxline.h, gzline.h,
+gsline.c; gxcldev.h, gxclist.h, gxclist.c, gxclread.c)
+
+Implements the ability to represent halftoned characters in the band list.
+(gxccache.c)
+
+Starts to implement the ability to do halftoning during the rendering phase
+rather than before writing the band list (currently for black-and-white
+devices only). Doing this required NON-BACKWARD-COMPATIBLE changes to the
+interfaces of a few internal procedures:
+ gx_check_tile_size, gx_render_device_{color,gray}
+(gxdcolor.h, gxdht.h, gzht.h, gsht.c, gsimage1.c, gsmisc.c, gspcolor.c,
+gsstate.c, gxcht.c, gxclbits.c, gxdither.c, gxht.c)
+
+Implements passing clipping information in the band list. (gzcpath.h,
+gxacpath.c, gxclpath.c, gxclread.c, gxcpath.c)
+
+Removes the gs_state * parameter from the device color fill_rectangle
+procedures and many of their callers, since it is no longer needed. This is
+a non-backward-compatible change to an internal API. (gdevmrop.h,
+gxdcolor.h, gxdraw.h, gxpaint.h, gdevmrop.c, gsimage.c, gspcolor.c, gxcht.c,
+gxclread.c, gxdraw.c, gxfill.c, gxht.c, gxpaint.c, gxstroke.c)
+
+Removes gxdevice.h from gzstate.h, since not all modules requiring access to
+the graphics state need to know the implementation of devices. This entails
+adding gxdevice.h to the include lists for some modules. (gxchar.h,
+gxcpath.h, gxcvalue.h, gxdevice.h, gxtype1.h, gzstate.h; gschar.c,
+gscoord.c, gsdevice.c, gsimage1.c, gsimage2.c, gsimage3.c, gspaint.c,
+gspath.c, gsstate.c, gstype1.c, gxccache.c, gxccman.c, gxhint1.c, gxhint2.c,
+gxhint3.c, gxpaint.c)
+
+Adds a compile-time option, ALPHA_LSB_FIRST, which causes alpha-sampled
+characters to be nibble-reversed in the cache. This was created for a
+specialized application and does not interact well with the rest of the
+code. (gsbitops.c)
+
+Substantially reduces the space required to represent 24- or 32-bit colors
+in the band list, by using more aggressive color differencing. (gxcldev.h,
+gxclist.c, gxclread.c)
+
+Changes the allocation of unique IDs for halftone tiles to use the gray
+level rather than the number of 1-bits as the increment to a base ID; this
+allows more efficient (delta) representation of halftone indices in the band
+list. (gxcldev.h, gxclist.c, gxclread.c, gxht.c)
+
+Substantially speeds up entering anti-aliased characters in the cache, by
+removing white space before compressing rather than vice versa.
+(gsbitops.c, gxccman.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version3.53"></a>Version 3.53 (1/10/96)</h2>
+
+<p>
+This is an anomalous, out-of-sequence release requested by a commercial
+licensee. It consists of 3.52 plus the following retrofits from 3.60
+through 3.63:
+ - PDF interpreter and pdf2ps;
+ - Type 1 rasterizer fixes;
+ - Type 1 rasterizer and polygon fill performance improvements;
+ - MS Windows and OS/2 fixes;
+ - A few other important fixes.
+It does NOT fix all problems reported since 3.52.
+
+<p>
+The list of changes below indicates which subsequent release was the source
+of each change. In several cases, minor editing of the change was required
+to make it compatible with 3.52.
+
+<h3><a name="V3.53_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ [3.61] The analysis of curve monotonocity in gxpcopy.c had an error.
+(gxpcopy.c)
+
+[3.63] Notes that the OS/2 implementation now requires EMX/GCC 0.9b rather
+than 0.9a. (use.doc)
+
+[3.62] Notes that for Win32s, gs16spl.exe must be in the same directory as
+gswin32.exe. (use.doc)
+
+[3.62] Adds a reference to dos-psv, another "dumb terminal" user interface
+for Ghostscript intended for MS-DOS users. (README)
+
+[3.61] Adds a pointer to DEC's free pstotext utility. (README)
+
+[3.60] Adds a reference to ps_view.ps, a "dumb terminal" user interface for
+Ghostscript intended for MS-DOS users. (README)
+
+</pre><h3><a name="V3.53_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ [3.60] The geninit program (the implementation of COMPILE_INITS=1)
+didn't parse the command line properly, and didn't check for PostScript
+files properly. (geninit.c)
+ [3.60] ccfontab.c was omitted from the fileset. The easiest way to
+fix this was to rename it to icfontab.c. (gs.mak, int.mak, ccfontab.c)
+ [3.60] The definition of pdfread.dev did an ADDMOD, not a SETMOD.
+(int.mak)
+
+[3.60] Adds a -dNOFONTPATH switch to suppress any consultation of the
+FONTPATH variable or the GS_FONTPATH environment variable. (gs_fonts.ps,
+gs_init.ps)
+
+</pre><h3><a name="V3.53_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ [3.61] pdf2ps didn't write Widths or Encoding in the converted file,
+producing incorrect spacing and incorrect characters. (pdf_2ps.ps)
+ [3.60] ps2ascii left a value on the stack for each unrecognized
+character it processed, eventually causing a stackoverflow. (ps2ascii.ps)
+
+[3.61] Changes the rollconv.ps utility to produce files whose names conform
+to the 8.3 length restriction, and to reduce the fixed RAM overhead for
+Kanji fonts. (rollconv.ps)
+
+[3.60] Adds a utility for converting files produced by Macromedia's Rollup
+program to a Type 0 form directly usable by Ghostscript. (rollconv.ps)
+
+</pre><h3><a name="V3.53_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ [3.60] Because of a typo, the LaserJet drivers had incorrect
+margins. This was probably a new bug in 3.5x. (gdevdjet.c)
+ [3.60] A private name was duplicated. (gdevtfax.c)
+ [3.60] The x11alpha driver passed invalid colors to the X library.
+(gdevxalt.c)
+ [3.60] The x11alpha driver set the blue component of colors
+incorrectly. (gdevxalt.c)
+
+</pre><h3><a name="V3.53_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ [3.63] The test for WinExec failure on Win32 was incorrect.
+(gp_mswin.c)
+ [3.63] getenv was declared redundantly on OS/2. (gp_os2.c)
+ [3.63] gs16spl.c was missing &lt;string.h&gt;. (gs16spl.c)
+ [3.61] Printing didn't work in 32-bit MS Windows environments.
+(bcwin32.mak, gdevmswn.c, gp_mswin.c)
+ [3.61] There were some compatibility problems with IBM C. (os2.mak,
+gsdll.h, gdevpm.c, gp_os2.c)
+ [3.60] The printjob created by Ghostscript was called "Ghostscirpt"
+instead of "Ghostscript". (gp_os2.c)
+ [3.60] An "export" declaration was omitted from DllInit.
+(gp_mswin.c)
+
+[3.61] Adds a conditional to work around a bug in gcc 2.7.x (it didn't
+recognize that the target of a const T * might still be mutable through
+aliasing). (stdpre.h)
+
+</pre><h3><a name="V3.53_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ [3.61] Rasterizing a character in a Type 1 font with an invalid
+FontBBox left some garbage on the operand stack (bug introduced in 3.52 or
+3.60). (gs_type1.ps)
+ [3.61] The font substitution algorithm could fail or loop.
+(gs_fonts.ps)
+
+[3.60] Adds Heavy as a synonym for Bold when doing intelligent font
+substitution. (gs_fonts.ps)
+
+</pre><h3><a name="V3.53_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ [3.63] Invoking setpagedevice with an undefined key, even with
+Policy = 1, caused an error. (gs_setpd.ps)
+ [3.62] Setting the PageSize policy to 1 and then trying to set the
+page size caused an error if FIXEDMEDIA was selected. (gs_setpd.ps)
+ [3.61] Rotated characters were rendered incorrectly (bug introduced
+in 3.52). (gstype1.c)
+ [3.60] currentscreen and currentcolorscreen could give an error if
+the current screen was set with sethalftone (or, for currentscreen,
+setcolorscreen). (gs_dps1.ps)
+ [3.60] Streams could get removed from a bookkeeping list
+prematurely, and wind up dangling. (zfile.c)
+ [3.60] Multiple -I switches set the search path incorrectly.
+(gsmain.c)
+ [3.60] Fonts could wind up with a pointer to the wrong VM space,
+causing potential GC or save/restore confusion. (zfont2.c)
+ [3.60] upath could leave garbage on the stack if it failed.
+(gs_dps1.ps)
+
+[3.61] Extends the client API to allow for pushing values onto the operand
+stack. (imain.h, gs.c, gsmain.c)
+
+[3.61] Defines a .setdefaultscreen procedure that sets the default halftone
+screen, transfer function, and stroke adjustment for the current device.
+Changes selectdevice and setpagedevice so that they call .setdefaultscreen;
+setpagedevice calls .setdefaultscreen before calling the Install procedure,
+so that Install can set different parameters if it wishes. Note that
+setdevice does not do this. (gs_init.ps, gs_setpd.ps)
+
+[3.60] Speeds up rasterizing characters into the cache a little.
+(gs_type0.ps)
+
+[3.60] Changes the default limit on the size of cached characters from the
+maximum of (18 points or 5 times the "average" character size) to (18 points
+or 1% of the total cache size). (gs_init.ps)
+
+[3.60] Implements parts of the Type 1 BuildChar callout in C. (gs_type1.ps,
+zchar.c)
+
+</pre><h3><a name="V3.53_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ [3.62] If a PDF file substituted a calibrated color space for the
+DeviceGray or DeviceRGB color space using a ColorSpace resource, the
+PostScript file that pdf2ps produced from that PDF file caused an error.
+(gs_pdf.ps)
+ [3.61] Tf set the current text font twice, and interacted with
+pdf2ps in an awkward way. (gs_pdf.ps, pdf_2ps.ps, pdf_font.ps)
+ [3.61] If a font had variant Widths, it could get confused in the
+cache with the underlying font. (pdf_font.ps)
+ [3.61] If a character appeared twice in an encoding and the font
+specified different Widths values for the two occurrences, the last Width
+would be used. We patched this to ignore zero Widths, which is not the
+correct solution but which almost always produces correct output.
+(pdf_font.ps)
+ [3.61] Arrays containing nulls didn't print out correctly (bug
+introduced in 3.60). (gs_init.ps)
+ [3.61] Some PDF files contain very large dictionaries, which caused
+a stackoverflow. (pdf_base.ps)
+ [3.60] The length of an image's data was sometimes calculated
+incorrectly, causing an error when converting PDF to PostScript.
+(pdf_draw.ps)
+ [3.60] If word spacing and/or text spacing was non-zero, an error
+could occur. (gs_pdf.ps)
+ [3.60] Text that was both filled and stroked caused an error.
+(gs_pdf.ps)
+
+[3.61] Speeds up the initial processing of PDF files by caching the map from
+page numbers to page objects, and by not scanning the outlines if we aren't
+producing PostScript output. (pdf_2ps.ps, pdf_base.ps, pdf_main.ps)
+
+</pre><h3><a name="V3.53_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ [3.60] When closing an encoding filter stream whose target was also
+a filter, the latter could get called incorrectly with last = 1, possibly
+more than once, leading to premature EOD markers. (stream.c)
+ [3.60] The LZW-compatible encoder put out an incorrect end-of-data
+code. (slzwce.c)
+ [3.60] The LZW-compatible encoder didn't put out a reset code soon
+enough. (slzwce.c)
+ [3.60] Doing a sgets on a closed stream could call sreadbuf,
+possibly causing an error. (stream.c)
+
+</pre><h3><a name="V3.53_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ [3.63] On 16-bit platforms, the computation of t2 and t3 in
+gx_curve_x_at_y could overflow, leading to incorrect output. (gxpcopy.c)
+ [3.61] glyphshow displayed a character with code 0 rather than the
+requested character (bug introduced in 3.60.) (gschar.c)
+ [3.61] If trimming white space around a character reduced its
+raster, the character was garbled in the cache (bug introduced in 3.60.)
+(gxccman.c)
+ [3.61] colorimage would incorrectly convert white pixels to black if
+the image color space was CMYK, the current color space was not CMYK, and
+the number of bits per pixel was 4 or 8. (gsimage2.c)
+ [3.61] Type 1 fonts that used the Flex feature applied hints to the
+path multiple times, causing dropouts, uneven stems, and other problems (bug
+probably introduced in 3.21). (gstype1.c)
+ [3.61] If a Type 1 font used the Flex feature within the accent of
+an accented character defined with seac, the shape of the accent could be
+distorted. (gxtype1.h, gstype1.c)
+ [3.61] If a Type 1 font changed hints using the hint replacement
+facility when the last operation was a closepath, the old hints would be
+applied a second time, distorting the shape. (gxhint2.c, gxhint3.c)
+ [3.60] Cached characters sometimes had extra blank space on the
+left, leading to some unnecessary bit-shuffling when imaging them.
+(gxccman.c)
+ [3.60] The list of all-bands commands wasn't initialized/reset
+properly. (gxclist.c)
+ [3.60] Because of a typo in a macro formal parameter list, a private
+name was duplicated. (gsstruct.h)
+ [3.60] Text display operations didn't update the current character
+in the enumerator structure during the fastest path through the code. This
+only matters to one very unusual commercial client. (gschar.c)
+
+[3.61] Adds an alternative implementation of the core path filling algorithm
+that is much faster on objects with curves but doesn't handle Y fattening.
+This is the implementation that will normally be used for rasterizing
+characters. This implementation rasterizes curves directly, without
+flattening them. (gxfixed.h, gxpath.h, gzpath.h, gxdraw.c, gxfill.c,
+gxpcopy.c)
+
+[3.61] Speeds up the flattening of curves substantially by omitting more
+redundant points. (gxpcopy.c)
+
+[3.61] Speeds up character bitmap compression a little more. (gsbitops.h,
+gdevabuf.c, gsbitops.c, gxccman.c)
+
+[3.61] Speeds up anti-aliased graphics a bit by computing a bounding box
+before converting from oversampling to alpha values, and by speeding up the
+bounding box computation itself. (gsbitops.h, gdevabuf.c, gsbitops.c,
+gxccman.c)
+
+[3.60] Speeds up getting the side bearing and width of a Type 1 charstring a
+little. (gxtype1.h, gstype1.c)
+
+[3.60] Adds a compile-time option, ALPHA_LSB_FIRST, which causes
+alpha-sampled characters to be nibble-reversed in the cache. This was
+created for a specialized application and does not interact well with the
+rest of the code. (gsbitops.c)
+
+[3.60] Substantially speeds up entering anti-aliased characters in the
+cache, by removing white space before compressing rather than vice versa.
+(gsbitops.c, gxccman.c)
+
+</pre>
+
+<h2><a name="Version3.52"></a>Version 3.52 (limited) (10/6/95)</h2>
+
+<p>
+This is an incremental release to fix a few problems in 3.51. Since it is
+being made in an environment with no network connectivity, it will probably
+not be released to the general public. ****** THE CHANGES MARKED WITH ***
+BELOW WERE LOST IN THE PROCESS OF SHUFFLING FILESETS BETWEEN ENVIRONMENTS.
+THEY ARE INCORPORATED IN 3.60 BUT NOT IN 3.52. ******
+
+<h3><a name="V3.52_Procedures"></a>Procedures</h3><pre>
+Fixes bugs:
+ - The fileset included a meaningless empty file. (acctest.ps)
+ *** The definition of pdfread.dev did an ADDMOD, not a SETMOD.
+(int.mak)
+
+</pre><h3><a name="V3.52_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - The RunLengthEncode filter used with a dictionary argument could
+give a spurious error. (zfilter.c)
+ - The fast form of the 'dup' operator failed to check for stack
+overflow, which could lead to memory smashing. (interp.c)
+ *** Level 1 configurations gave errors during initialization.
+(ialloc.c, iinit.c, ireclaim.c)
+ *** Attempting to look up or insert a noaccess string as a
+dictionary key converted the string to a name rather than giving an error.
+(idict.h, idict.c)
+
+Adds a C implementation of the .dicttomark (&gt;&gt;) procedure. (gs_init.ps,
+zdict.c)
+
+*** Implements parts of the Type 1 BuildChar callout in C. (gs_type1.ps,
+ifont.h, zchar.c, zfont1.c, zfont2.c)
+
+</pre><h3><a name="V3.52_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Braces were missing in an initializer. (gxdcolor.h)
+ - Composite fonts with a non-zero translation in the FontMatrix
+positioned characters incorrectly. (gschar.c)
+ *** gsparam.c wouldn't compile with some versions of the Borland
+compiler. (gsparam.c)
+
+Speeds up the handling of curve segments in Type 1 fonts a little.
+(gstype1.c)
+
+Speeds up displaying very short strings a little. (gschar.c)
+
+*** Implements parts of the Type 1 BuildChar callout in C. (gxfont.h)
+
+</pre>
+
+<h2><a name="Version3.51"></a>Version 3.51 (9/27/95)</h2>
+
+<p>
+This is the first public release since 3.33. Its main features are a
+working setpagedevice, a working PDF interpreter, and a working PDF to PS
+converter.
+
+<h3><a name="V3.51_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - The -dSHORTERRORS switch wasn't documented in enough places.
+(current.doc, use.doc)
+ - The DLL documentation was internally inconsistent. (dll.doc)
+ - The %pipe% file name syntax wasn't documented. (language.doc)
+
+</pre><h3><a name="V3.51_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - caption.ps wasn't installed properly. (unix-end.mak)
+ - geninit depended on $(gconfig_h) in an improper way. (geninit.c,
+int.mak, *.mak)
+ - One script lacked the #!/bin/sh header. (gsdj500)
+
+Adds the 24-bit color TIFF driver to all configurations that support
+black-and-white TIFF. (*.mak)
+
+</pre><h3><a name="V3.51_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - align.ps was omitted from the fileset. (psfiles.doc, align.ps,
+unix-end.mak)
+
+</pre><h3><a name="V3.51_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - A driver had some \s in formal parameter lists. (gdevcdj.c)
+ - A driver had some improper &amp;s. (gdevtifs.c)
+ - The default MS Windows printer driver was very slow. (gdevwpr2.c)
+ - The (newly restructured) TIFF drivers could produce a memory
+access error. (gdevtifs.c)
+ - The CGM drivers referred to an obsolete structure member.
+(gdevcgm.c)
+ - The black-and-white H-P drivers didn't set the margins properly
+(again). (gdevdjet.c)
+ - Several of the most common printer drivers omitted some scan lines
+at the bottom of the page. (gdevprn.h, gdevprn.c)
+
+At the request of the main OS/2 developer, adds a printer device for OS/2.
+(gdevos2p.c, os2.mak)
+
+Makes many changes to the stcolor driver, submitted by the developer just
+before the release. (devices.doc, unix-end.mak, gdevstc.h, gdevstc*.c,
+stcinfo.ps, stcolor.ps, stcinfo.ps)
+
+</pre><h3><a name="V3.51_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - usertime (and realtime) were broken on VMS. (gp_vms.c)
+ - The 32-bit MS Windows DLL control file had a typo. (gsdll32.def)
+
+Removes the color inkjet drivers from the 16-bit Windows executable, because
+they overflow the 64K default data segment; adds PCX, TIFF, and BMP output
+formats. (bcwin.mak)
+
+</pre><h3><a name="V3.51_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - A routine was declared 'private' inconsistently. (zcie.c)
+ - -dSHORTERRORS didn't remove enough non-Adobe error output.
+(gs_init.ps)
+
+</pre><h3><a name="V3.51_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - The ProcSet relied on the presence of NullFont. (gs_pdf.ps)
+
+</pre><h3><a name="V3.51_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - There was an extraneous \ outside a macro. (gsline.c)
+ - Scaling up a black-and-white image could caused many scan lines to
+be inverted. (gsimage1.c)
+ - The initial clipping path did not take Margins into account
+properly. (gxdevice.h, gdevxalt.c, gscoord.c, gsdevice.c, gsdevmem.c,
+gsdparam.c, gspath.c)
+ - If banding was required, characters could come out as solid black
+rectangles. (gxclist.c, gxclread.c)
+
+</pre>
+
+<h2><a name="Version3.50"></a>Version 3.50 (limited) (9/24/95)</h2>
+
+<p>
+This is the last limited bug-fix release during beta test. The color
+DeskJet drivers are broken (they sometimes produce black rectangles instead
+of characters); we will fix this in the next release.
+<p>
+The following issues have been postponed to an unspecified future release:
+<ul>
+<li> - Filling areas often writes pixels twice, causing incorrect
+output
+with certain unusual RasterOp values. [1.814]
+<li> - The tar.gz archives should include a subdirectory like
+gs-3.46/ in
+the file names.
+<li> - The CCITTFaxDecode filter should skip initial junk if
+EndOfLine =
+true. [1844 8/24/95, NRE]
+</ul>
+
+<h3><a name="V3.50_Procedures"></a>Procedures</h3><pre>
+Fixes bugs:
+ - The name of the new 24-bit TIFF driver was incorrect in one place.
+(vms.mak)
+
+</pre><h3><a name="V3.50_Utilities"></a>Utilities</h3><pre>
+
+Adds a new utility to put a caption in a box at the bottom of each page.
+(caption.ps)
+
+</pre><h3><a name="V3.50_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The PC display devices weren't page devices. Probably all the
+other display and window system devices should be made page devices too, but
+we aren't going to bother tracking them down. (gdevpcfb.c)
+ - There was a lot of duplicated code in the TIFF drivers.
+(gdevtifs.h, gdevtfax.c, gdevtfnx.c, gdevtifs.c)
+
+Updates the bjc600 / bjc800 drivers with changes from the author.
+(devices.doc, gdevbjc.h, gdevcdj.c)
+
+</pre><h3><a name="V3.50_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Building with COMPILE_INITS=1 produced a stackunderflow error.
+(gs_pdf_e.ps)
+ - An internal operator didn't have a name. (ztoken.c)
+ - Some error and information messages weren't in the Adobe format.
+(gs_fonts.ps, gs_init.ps)
+ - Some common Adobe compatibility operators weren't implemented:
+pagemargin, pageparams, setpagemargin. (gs_statd.ps, gs_lev2.ps)
+ - setpageparams set Margins rather than PageOffset. (gs_lev2.ps)
+ - setpage and setpageparams didn't set Orientation. (gs_lev2.ps)
+ - If the end of an input buffer fell just after the / of a literal
+name, a memory access error could occur. (iscan.c)
+ - When the interpreter returned from gs_[main_]run_string_continue,
+there could be an extra value on the operand stack. (iscan.h, istream.h,
+interp.c, iscan.c, zfileio.c, zfproc.c, zpaint.c, ztoken.c)
+ - If the character cache was disabled, or if a character was too
+large to be cached, returning from a font BuildChar procedure could do an
+erasepage. (zchar.c)
+
+A minor change was required for compatibility with the library change for
+image devices. (zdevice.c)
+
+Adds a -dSHORTERRORS switch that changes some of the common error and
+warning messages for greater Adobe compatibility. (gs_init.ps, gs_fonts.ps)
+
+</pre><h3><a name="V3.50_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - If a CharProc for a Type 3 font did a BT/ET, the graphics state
+could get confused. (gs_pdf.ps)
+ - If a Tf occurred inside a BT/ET, it didn't take effect on
+subsequent BT/ETs. (gs_pdf.ps)
+
+</pre><h3><a name="V3.50_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - There was no way to control whether an image device was a page
+device. Fixing this required a NON-BACKWARD-COMPATIBLE CHANGE to
+gs_makewordimagedevice and gs_initialize_wordimagedevice to take a Boolean
+page_device argument. Fortunately, this change affects only a few obscure
+library clients. (gsdevice.h, gsdevmem.c)
+
+Adds translation capability to clipping devices. This isn't used anywhere
+yet. (gxcpath.h, gxcpath.c)
+
+Adds procedures for doing unaligned copy_xxx operations. These were added
+for a customer. (gxdevice.h, gsdevice.c)
+
+Changes the (undocumented) return value of gs_setcachedevice[2]: they used
+to return 1 if the current show operation was a non-displaying one
+(stringwidth or cshow), and now return 1 if the cache device was just
+installed. This change was required to fix the BuildChar page clearing bug
+in the interpreter. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE, but as far as
+I know, there aren't any external clients of these routines. (gschar.h,
+gschar.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version3.49"></a>Version 3.49 (limited) (9/20/95)</h2>
+
+<p>
+This is another bug-fix release during beta test. There are other bugs
+outstanding, but the ones I know about right now are all platform-specific.
+
+<h3><a name="V3.49_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - make.doc didn't mention that the .def files are needed to build a
+MS Windows executable. (make.doc)
+
+</pre><h3><a name="V3.49_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - There were some forward references to macro definitions in the
+makefiles. (int.mak, lib.mak)
+ - The default device for library configurations was the null page
+device, not the first device in DEVICE_DEVS. (ugcclib.mak)
+
+</pre><h3><a name="V3.49_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The BJC600 / BJC800 drivers were missing a header file.
+(gdevbjc.h, gdevcdj.c)
+ - A procedure name was used in two different files. (gdevcdj.c)
+ - The PCX driver didn't return an error code in case of failure.
+(gdevpcx.c)
+ - The X Windows driver produced some confusing warning messages.
+(gdevxini.c)
+ - Some names were duplicated between drivers. (gdevepsc.c)
+ - The X driver maintained its own, peculiar initial matrix even if
+Ghostview wasn't involved. (gdevx.c)
+
+With the permission of the author, changes the 24-bit TIFF license from GNU
+to Aladdin. (gdevtfnx.c)
+
+</pre><h3><a name="V3.49_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The VMS build scripts were out of sync with the makefiles (again).
+(modules.lis, vms.mak)
+
+</pre><h3><a name="V3.49_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - When the requested media size matched an available size exactly
+with a 90 degree rotation, Orientation was ignored. (zmedia2.c)
+
+Makes zcurrentdevice extern. (opextern.h, zdevice.c)
+
+</pre><h3><a name="V3.49_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - A couple of places used memcpy instead of memmove. (gxclread.c)
+ - If a bitmap image was compressed with RLE compression in a band
+list, it would cause an error on decompression. (gxclread.c)
+ - The representation of colors in the band list was needlessly
+inefficient. (gxcldev.h, gxclist.c, gxclread.c)
+ - When using colored halftones, snowflak.ps crashed with an invalid
+memory access. More generally, any use of halftones could cause the garbage
+collector to make an invalid access. (gsstate.c)
+
+Adds some more code for paths in band lists, but again doesn't activate it.
+(gxcldev.h, gxpath.h, gzline.h, gsline.c, gspath1.c, gxclist.c, gxclread.c,
+gxpath.c)
+
+</pre>
+
+<h2><a name="Version3.48"></a>Version 3.48 (limited) (9/17/95)</h2>
+
+<p>
+This is the second bug-fix release during beta test. Among other things, it
+fixes a bug introduced in 3.47 that caused all PDF files to give an error.
+
+<p>
+******NOTE: the BJC600 and BCJ800 drivers do not work in this release,
+because we didn't get a file from the author in time. They will compile,
+but not run. This will be fixed in the next round.
+
+<h3><a name="V3.48_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - Alan Barclay's contact information was wrong. (README)
+
+</pre><h3><a name="V3.48_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The linker path for Watcom C++ 10.5 was wrong. (wccommon.mak)
+ - There was a syntax error in a batch file. (pdf2ps.bat)
+ - The VMS build script didn't have entries for some printers.
+(vms.mak)
+
+Adds the bjc600 and bjc800 devices on all platforms that already include the
+color DeskJet devices. (*.mak)
+
+</pre><h3><a name="V3.48_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The H-P drivers didn't reposition the cursor properly at the
+beginning of pages after the first page, causing the image to be shifted
+down slightly and cut off at the bottom. (gdevdjet.c)
+ - The x11alpha driver was extremely slow. (gdevxalt.c)
+ - The -g switch by itself didn't work for the X Windows driver.
+(gdevxini.c)
+ - .installpagedevice can get a rangecheck on MS Windows because the
+HWColorMap can change spontaneously. (gs_setpd.ps)
+
+Updates the bjc600 and bjc800 drivers with new versions from Yves Arrouye.
+(gdevcdj.c)
+
+Adds a user-contributed driver that writes uncompressed 24-bit RGB TIFF
+images in a format that is standard on NeXT platforms. This driver is
+governed by the GNU license and is therefore separated from the rest of the
+Aladdin distribution. (gdevtfnx.c)
+
+</pre><h3><a name="V3.48_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - There was an undefined reference to clock_gettime on some Unix
+systems. (gp_unix.c)
+ - The new gp_fopen routine had several errors. (gp_vms.c)
+
+</pre><h3><a name="V3.48_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Some routines that should be main-instance-specific weren't.
+(imain.h, main.h, gsmain.c)
+ - sethalftone with a Type 2 or Type 4 halftone didn't work on CMYK
+devices. (zht2.c)
+ - Setting A4 paper as the default in gs_init.ps, or specifying
+-dPAPERSIZE, conflicted with -g. (gs_init.ps)
+ - The maximum value of a single-precision float wasn't correct on
+VAX systems. (math_.h, iscannum.c)
+ - Some integer expressions were passed as floating point arguments.
+(gs.c, zmedia2.c)
+ - Media selection in setpagedevice was broken (again), as of 3.46.
+(gs_setpd.ps, zmedia2.c)
+
+</pre><h3><a name="V3.48_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - Substituted color spaces caused an error. (gs_pdf.ps,
+pdf_draw.ps)
+
+</pre><h3><a name="V3.48_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - If a halftone had no non-default components that matched the
+device's primary colors, the result would be a solid color rather than a
+halftone using the default screen. (gsht.c)
+ - sethalftone with a Type 2 or Type 4 halftone didn't work on CMYK
+devices. (gxht.h, gsht.c, gsht1.c)
+ - The new gp_fopen routine wasn't being used. (gsiodev.c)
+ - A mixing of float and fixed values caused a clipping region to be
+possibly incorrect by up to 1 pixel. (gspaint.c)
+ - A function definition was inconsistent with the prototype.
+(gspath1.c)
+
+Adds preliminary code for including paths in band lists, but doesn't
+activate any of it. (lib.mak, gxcldev.h, gxclist.c, gxclread.c)
+
+</pre>
+
+<h2><a name="Version3.47"></a>Version 3.47 (limited) (9/14/95)</h2>
+
+<p>
+This is a bug-fix release during beta test. It is meant to have no new
+functionality, although in the case of setpagedevice that's stretching
+things a little.
+
+<h3><a name="V3.47_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - The Mac documentation still referred to IJG JPEG v5a rather than
+v6. (make.doc)
+ - The RasterOp texture device was identified incorrectly.
+(gdevmrop.c)
+ - use.doc and psfiles.doc didn't mention the PDF-related files.
+(psfiles.doc, use.doc)
+ - psview is no longer available. (README)
+ - current.doc didn't document the recognized setpagedevice keys.
+(current.doc)
+
+</pre><h3><a name="V3.47_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - Many utility programs weren't included in the Unix 'install' list.
+(unix-end.mak)
+ - It wasn't at all convenient to make configurations without the BCP
+or other non-standard filters. (*.mak, int.mak, modules.lis, zfilter2.c,
+zfilterx.c)
+ - The gconfig.c and iconfig.c files weren't deleted after
+compilation. (int.mak, lib.mak)
+ - unix-end.mak referred to the nonexistent macros INT{1,2}_MAK.
+(unix-end.mak)
+ - The rules for building the dfax drivers were incorrect. (devs.mak)
+ - Omitting filter.dev produced an undefined reference. (int.mak)
+
+Adds a customer-contributed makefile for Microsoft Visual C++ 2.n under
+Windows NT. (msvcwint.mak)
+
+</pre><h3><a name="V3.47_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - The JPEG utility didn't support the new progressive JPEG modes,
+and didn't invert Adobe Photoshop output as needed. (viewjpeg.ps)
+ - The printafm utility had a single font name wired in. (printafm,
+printafm.ps)
+ - The CIE lookup simulation had several bugs. (docie.ps)
+ - pdf2ps[.bat] were missing from the fileset.
+ - Files produced by pdf_2ps didn't include the GS_PDF ProcSet.
+(gs_pdf.ps, pdf_2ps.ps, pdf_base.ps, pdf_main.ps)
+
+</pre><h3><a name="V3.47_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - Bits read back from an EGA or VGA device were incorrect.
+(gdevpcfb.c)
+ - The 24-bit PCX run length compressor used a slow algorithm.
+(gdevpcx.c)
+ - gdevstc.c wouldn't compile with the Borland compiler. (gdevstc.c)
+ - There was a typo in the OS/2 PM driver. (gdevpm.c)
+ - .installpagedevice gets a rangecheck on X Windows because the
+HWColorMap can change spontaneously. (gs_setpd.ps)
+ - The left margin for the DeskJet 500 was wrong. (gdevdjet.c)
+ - The two notions of "margin" (offset of 0,0 from physical page
+corner vs. unprintable area around edges of physical page) were still
+confused. We've now fixed this for the H-P monochrome printers, but it's
+probably still confused for all other printers. (gdevprn.h, gdevdjet.c)
+
+</pre><h3><a name="V3.47_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The Windows print spooler header file wasn't included when it
+needed to be, and some other Win32-specific changes were missing.
+(gsdll32.def, gp_mswin.c)
+ - Windows DLLs didn't parse "s in the command "arguments" correctly.
+(gsdll.c)
+
+</pre><h3><a name="V3.47_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - FAKEFONTS could get the font directories into inconsistent states.
+(gs_dps1.ps, gs_fonts.ps)
+ - The substitutions for Adobe's Myriad and Minion fonts weren't
+appropriate. (gs_fonts.ps)
+
+</pre><h3><a name="V3.47_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - If pathforall got an error computing the user-space points on a
+path, it could cause an invalid access. (zpath1.c)
+ - A 'private' declaration were omitted. (Why doesn't gcc catch
+this??) (zcie.c)
+ - Setting GS_FONTPATH produced a stackunderflow error.
+(gs_fonts.ps)
+ - currentscreen caused a typecheck if the screen had been set by
+setcolorscreen. (gs_dps1.ps)
+ - setcolorrendering tried to cache values computed from the color
+space even if the current color space wasn't a CIE space. (zcrd.c)
+ - Out-of-range numbers like 10E38 caused a floating point exception.
+(iscannum.c)
+ - Giving a closed readable file as input for a filter caused an
+invalidaccess. (files.h, interp.c, zfilter.c)
+ - setpagedevice opened the default device even with -dNODISPLAY.
+(gs_init.ps, gs_setpd.ps)
+ - realtime returned the same value as usertime. (gs_lev2.ps,
+zmisc.c)
+ - Storing a local value into systemdict caused some redundant code
+to be executed. (zdict.c)
+ - Files with a very long first line could cause a rangecheck error.
+(gs_init.ps)
+ - The PageOffset page device parameter was ignored. (gs_setpd.ps)
+ - The Orientation page device parameter wasn't handled properly.
+(gs_setpd.ps, idparam.h, idparam.c, zmedia2.c)
+ - setpagedevice could set device parameters twice, with an
+incomplete update the first time. (gs_setpd.ps)
+
+</pre><h3><a name="V3.47_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - Readers confused the internal pdfrun procedure with the public
+runpdf procedure. (pdf_*.ps)
+
+</pre><h3><a name="V3.47_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - Closed streams had a NULL state pointer, causing problems for some
+clients. (stream.c)
+ - Group 4 decoding could get an ioerror if an end-of-buffer occurred
+in a horizontal code sequence between a makeup code and the termination
+code. (scfd.c)
+
+</pre><h3><a name="V3.47_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Some 'private' declarations were omitted. (Why doesn't gcc catch
+these??) (gdevmrop.c, gxht.c)
+ - Patterns could produce bad output in the band list. (gxclist.c)
+ - RasterOp wasn't implemented at all for 2- or 4-bit devices. (In
+this release, we implement only a subset, and without handling transparency
+properly.) (gdevm2.c, gdevm4.c, gdevmrop.c)
+ - Drawing operations and text sometimes didn't apply the RasterOp
+when they should, and vice versa. (gxdcolor.h, gxdraw.c)
+ - setcolorrendering tried to cache values computed from the color
+space even if the current color space wasn't a CIE space. (gscie.h,
+gscie.c)
+ - Some CIE color spaces produced very distorted colors. (gscie.c)
+ - setpagedevice opened a window even with -dNODISPLAY. (gsdevice.c,
+gsdparam.c)
+ - realtime returned the same value as usertime. (gp.h, time_.h,
+gp_*.c)
+ - The library level attempted to handle the Orientation page device
+parameter. (gxdevice.h, gdevbit.c, gsdevice.c, gsdparam.c, gspath.c)
+ - Severely non-linear CIE encoding/decoding functions produced
+seriously skewed colors near the ends of the color value range. This
+problem can now be alleviated, at a significant cost in performance, by
+changing configuration parameters at the beginning of gscie.h. (gscie.h,
+gscie.c)
+ - Files FTP'ed in binary mode weren't being opened properly on VMS.
+(gp.h, gp_*.c, gsiodev.c)
+ - A header file had an inconsistent declaration. (math_.h)
+
+Adds a new gp_get_usertime procedure to gp.h. THIS IS A
+NON-BACKWARD-COMPATIBLE CHANGE, affecting only platform implementors. It
+was necessary to fix the realtime/usertime bug. (gp.h, time_.h, gp_*.c)
+
+Adds a new gp_fopen procedure to gp.h. THIS IS A NON-BACKWARD-COMPATIBLE
+CHANGE, affecting only platform implementors. It was necessary to fix the
+binary file problem on VMS. (gp.h, gp_*.c)
+
+</pre>
+
+<h2><a name="Version3.46"></a>Version 3.46 (limited) (9/4/95)</h2>
+
+<p>
+This is the "serious beta test" release for the next public release. It
+finishes implementing RasterOp in the graphics state, and the remaining
+commonly used parts of setpagedevice.
+
+<h3><a name="V3.46_Documentation"></a>Documentation</h3><pre>
+Documents some possible problems when building with DJGPP v2.0-beta.
+(make.doc)
+
+Adds documentation on using Ghostscript as a PDF interpreter. (use.doc)
+
+Notes linking problems with the Watcom 10.0 environment. (make.doc)
+
+</pre><h3><a name="V3.46_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The rule for $(ccfonts).dev was wrong. (gs.mak)
+
+Makes some additional filters into 'features'. (devs.mak, gs.mak)
+
+Splits off 2 new makefiles from gs.mak, which had gotten very large: lib.mak
+(graphics library) and int.mak (interpreters). (tar_cat, tar_cat.bat,
+*.mak)
+
+Adds a new 'config-clean' target that may be helpful in changing
+configuration definitions. (gs.mak)
+
+Notes in the relevant makefiles that on Unix and DVX systems, one should not
+edit 'makefile' or the concatenated makefile, but should edit the individual
+subfile and run tar_cat. (ansihead.mak, cc-head.mak, dgc-head.mak,
+gcc-head.mak, devs.mak)
+
+Updates the Watcom makefiles to handle Watcom release 10.5, in which many
+executables moved to different directories. (watc.mak, watcwin.mak,
+wccommon.mak)
+
+Adds a pdf2ps shell script. (pdf2ps, pdf2ps.bat)
+
+Adds a -sFONTMAP= switch to specify the name of the Fontmap file.
+(gs_fonts.ps)
+
+Adds a -u&lt;name&gt; switch to undefine a name from systemdict. (interp.h, gs.c,
+iinit.c)
+
+Adds a -dFIXEDRESOLUTION switch to parallel -dFIXEDMEDIA. Makes -g set
+FIXEDMEDIA and -r set FIXEDRESOLUTION. (gs_init.ps, gs_setpd.ps, gs.c)
+
+Changes some build procedures to avoid problems with read-only source files.
+(gs.mak, int.mak, lib.mak)
+
+</pre><h3><a name="V3.46_Utilities"></a>Utilities</h3><pre>
+
+Adds a utility for emulating the CIE color mapping algorithms. (docie.ps)
+
+</pre><h3><a name="V3.46_Drivers"></a>Drivers</h3><pre>
+
+Changes the x11alpha device so that it uses 32-bit pixels with 8 bits of
+alpha. (gdevxalt.c)
+
+Updates the Epson Stylus Color driver to Gunther Hess's release 1.17.
+(devs.mak, unix-end.mak, devices.doc, stcolor.ps, gdevstc.h, gdevstc*.c)
+
+Updates the alternate X drivers for the change from PageSize to MediaSize.
+(gdevxalt.c)
+
+Makes Duplex an optional parameter of printer devices rather than of all
+devices. (gdevprn.h, gxdevice.h, gsdparam.c, gdevdjet.c, gdevprn.c)
+
+</pre><h3><a name="V3.46_Platforms"></a>Platforms</h3><pre>
+
+Makes pipes (%pipe% file syntax) a selectable option on Unix platforms,
+rather than always being included. (ansihead.mak, cc-head.mak,
+gcc-head.mak, ugcclib.mak, unixtail.mak)
+
+</pre><h3><a name="V3.46_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - colorimage, and the dictionary form of image with
+MultipleDataSources = true, didn't check that all the data sources were of
+the same type. (zpaint.c)
+ - colorimage, and dictionary-type images with MultipleDataSources =
+true, usually didn't work properly with files. (zpaint.c)
+ - grestoreall left a dangling pointer to the transfer function
+cache. (gsstate.c)
+ - Changes made by setpagedevice could get 'lost' and not installed
+in the current page device dictionary. (gs_setpd.ps)
+ - The Install procedure was called before the new page device
+dictionary had gotten installed. (gs_setpd.ps)
+ - If a grestore/grestoreall/restore/setgstate operation switched
+page devices, the new page device didn't get installed properly.
+(gs_setpd.ps, opextern.h, zdevice2.c, zdps1.c)
+ - If the current screen was a Type 1 halftone, currentscreen and
+currentcolorscreen returned frequency = 60, angle = 0 rather than the
+Frequency and Angle from the halftone (see Adobe TN 5085). (gs_dps1.ps,
+gs_init.ps)
+ - setscreen with a Type 1 halftone dictionary didn't insert the
+frequency and angle into the dictionary (see Adobe TN 5085). (gs_dps1.ps)
+ - upath didn't include a trailing moveto in the bounding box.
+(gs_dps1.ps, zpath1.c)
+ - setpagedevice didn't automatically rotate or scale the image when
+necessary. (gs_setpd.ps, zmedia2.c)
+
+Moves the RasterOp operators to a separate file. (iutil.h, iutil.c,
+zgstate.c, zrop.c)
+
+Eliminates the unnecessary "wrapper" around .setdevice. (zdevice2.c)
+
+Establishes the convention that all interpreter callbacks into PostScript
+code use procedure names that begin with %; documents this in gs_init.ps.
+Changes Type1BuildChar and Type1BuildGlyph to %Type1BuildChar and
+%Type1BuildGlyph. (gs_init.ps, gs_type1.ps, zfont0.c, zfont1.c)
+
+Changes image / imagemask / colorimage for the new library API. (zimage2.c,
+zpaint.c)
+
+Reorganizes font loading to make compiled fonts and Fontmap interact better
+with each other. (gs_ccfnt.ps, gs_fonts.ps, gs_init.ps, gs_res.ps)
+
+Implements parameter collection for the new CIEBasedDEF[G] color spaces, but
+doesn't actually implement the color spaces themselves. (icie.h, zcie.c,
+zcrd.c)
+
+Renames iconfig.c as iconf.c to avoid problems with read-only source files.
+(iconf.c)
+
+</pre><h3><a name="V3.46_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - PDF to PostScript conversion didn't work. (pdf_main.ps)
+
+Shifts most of the work in the PDF interpreter from the reader to the
+ProcSet. This simplifies the code considerably and also makes it easier to
+modify. (gs_pdf.ps, pdf_draw.ps, pdf_font.ps, pdf_main.ps)
+
+</pre><h3><a name="V3.46_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - 'static' was omitted in a place that some compilers require it.
+(gxccman.c)
+ - Some compilers don't allow a variable with the same name as a
+preprocessor macro with arguments. (gscie.c)
+ - Some places did a "return -1" rather than a proper error return.
+(gsdevice.c, gxclist.c)
+ - An external declaration had a typo. (gsrop.h)
+ - An extra semicolon upset some compilers. (gzpath.h)
+ - Printer devices that didn't use the standard macros for generating
+their procedure vector wound up being considered as non-page devices.
+(gdevprn.c)
+ - Some compilers truncated identifiers longer than 31 characters.
+(gscspace.h, zcie.c, gscie.c)
+ - upath didn't include a trailing moveto in the bounding box.
+(gspath.h, gspath1.c)
+ - RasterOp value 126 returned an incorrect result. (gsroptab.c)
+
+Finishes implementing RasterOp in the graphics state. (gdevmrop.h, gsrop.h,
+gsropt.h, gsstate.h, gxbitmap.h, gxcindex.h, gxdcolor.h, gxdevice.h,
+gzstate.h, gdevmrop.c, gscolor.c, gsdevice.c, gsimage.c, gsimage1.c,
+gsimage2.c, gsimage3.c, gspcolor.c, gsrop.c, gsstate.c, gxacpath.c,
+gxccache.c, gxcht.c, gxcmap.c, gxdither.c, gxdraw.c, gxht.c)
+
+Changes forwarding devices so they forward get_bits by default. This
+probably doesn't affect any existing code. (gxdevice.h, gsdevice.c)
+
+Changes the API for gs_image[mask]_init to pass a structure rather than a
+very large number of scalars. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE,
+motivated by the addition of further image parameters to support RasterOp.
+Since there are no external clients of the library yet, it shouldn't matter.
+(gsimage.h, gsimage.c, gslib.c, gxccache.c)
+
+Redefines the device "page size" as being the size of the actual media,
+changing the name of the gx_device PageSize member to MediaSize, the name of
+the PageSize device parameter to .MediaSize (but keeping PageSize as
+equivalent, for backward compatibility), and the name of the
+gx_device_set_page_size procedure to gx_device_set_media_size (keeping the
+old name as a macro). THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. It is
+necessary to make setpagedevice work, and to avoid confusion about what
+"page size" means. It potentially affects any device driver, but almost
+none of the device drivers distributed with Ghostscript are affected, and
+those have been updated. (gsparam.h, gxdevice.h, gsdevice.c, gsdparam.c,
+gspath.c)
+
+Renames gconfig.c as gconf.c to avoid problems with read-only source files.
+(gconf.c)
+
+Adds an API procedure for setting a bitmap pattern. (gscolor2.h,
+gspcolor.c)
+
+</pre>
+
+<h2><a name="Version3.45"></a>Version 3.45 (limited) (8/27/95)</h2>
+
+<p>
+The purpose of this release is to fix some minor bugs reported by commercial
+licensees, and to add two enhancements: optional RenderTable interpolation
+for CIE color, and reducing the temporary space used during character
+caching (also for a licensee).
+
+<h3><a name="V3.45_Documentation"></a>Documentation</h3><pre>
+
+Notes that the only valid return values from get_alpha_bits are 1, 2, and 4.
+(drivers.doc)
+
+Notes that the get_bits driver procedure will return a pointer to aligned
+data, but does not require the caller's data area to be aligned.
+(drivers.doc)
+
+</pre><h3><a name="V3.45_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - Many of the printer and file output drivers in devs.mak still
+included gdevprn.$(OBJ) in their dependencies. (devs.mak)
+ - PDEVH was used before it was defined. (devs.mak)
+ - GENCONF_XE was used before it was defined. (unixhead.mak,
+unix-end.mak)
+
+Makes it possible to switch sfile implementations without editing gs.mak.
+(gs.mak)
+
+Makes it possible to specify alternate compiled font tables without editing
+gs.mak. (gs.mak)
+
+Allows quoted arguments in @-files, e.g.,
+ -sOutputFile="a file name with spaces"
+(gs.c)
+
+</pre><h3><a name="V3.45_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - The ps2ascii script could fail to delete temporary files in case
+of an abnormal exit. (ps2ascii)
+
+</pre><h3><a name="V3.45_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The MS Windows printer capability test was wrong. (gdevwpr2.c)
+ - The MS Windows and OS/2/PM displays weren't page devices.
+(gdevwdib.c, gdevpm.c)
+
+Gets rid of all direct references to dev-&gt;PageSize in drivers. (gdevl256.c,
+gdevvglb.c)
+
+</pre><h3><a name="V3.45_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The 32-bit MS Windows configuration file for the Borland C++
+compiler was missing from the fileset. (bcc32.cfg, tar_gs)
+
+Makes the printer devices in the OS/2 implementation capable of outputting
+directly to the print spooler. (use.doc, gp_os2.c)
+
+Makes printing on Windows NT and Windows 95 use the printer queue.
+(gp_mswin.c, gswin32.rc)
+
+</pre><h3><a name="V3.45_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Copying a null device produced an uninitialized pointer.
+(gsdevice.c)
+ - The dictionary returned by deviceinfo wasn't read-only.
+(gs_lev2.ps)
+ - If a filter's init code failed, an entry on the operand stack
+(usually the top) could be smashed. (files.h, zfile.c, zfilter.c)
+
+Adds const in a few places that needed it. (zwppm.c)
+
+Adds interpolation to the CIE RenderTable lookup. (icie.h, zcie.c, zcrd.c)
+
+</pre><h3><a name="V3.45_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Allows PDF files with control-character garbage at the end, and up to 250
+characters of garbage at the beginning. The latter is only supported by
+runpdf, not by run. (pdf_base.ps, pdf_main.ps)
+
+</pre><h3><a name="V3.45_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - A 1-D CCITTFaxDecode stream could give an error if an input buffer
+boundary fell just before a 0-length termination code. (scfx.h, scfd.c)
+
+</pre><h3><a name="V3.45_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - A variable was used before being set, which could cause band
+devices to become confused when processing colored halftones. (gxclist.c)
+ - Some of the color and tile bookkeeping for band lists was wrong
+(as of 3.44), causing tiled areas to be filled with garbage. (gxclist.c,
+gxclread.c)
+ - Colored Patterns showed up blank on devices whose native
+representation of `black' was a non-zero value. The fix removes the
+'cached' member of the gx_device structure, and requires monobit memory
+devices to have a palette; this is a NON-BACKWARD-COMPATIBLE CHANGE for
+anyone who was foolish enough to statically initialize a gx_device structure
+without using the macros in gxdevice.h or gdevprn.h. (gdevmem.h,
+gxdevice.h, gxdevmem.h, gdevm1.c, gdevmrop.c, gsdevice.c, gxcpath.c,
+gxdither.c)
+
+Provides the framework for band devices to implement alpha (anti-aliasing).
+(gxcldev.h, gdevprn.c, gsdevice.c, gxclist.c, gxclread.c)
+
+Implements an efficient API for enumerating paths using device coordinates.
+(gspath.h, gxpath.h, gzpath.h, gspath1.c, gxpath2.c)
+
+Changes the character cache logic so that when rasterizing large
+anti-aliased characters, it converts the oversampled bits to alpha values on
+the fly rather than waiting until it has rasterized the entire character.
+This saves a lot of temporary space, at the expense of some extra time and
+lower quality results for Type 3 characters that don't use a single fill or
+imagemask operation to draw the character. This enhancement requires adding
+a member to the gx_device structure (max_fill_band), which is a
+NON-BACKWARD-COMPATIBLE CHANGE for badly written drivers (see above).
+(gxchar.h, gxdevice.h, gxpaint.h, gdevabuf.c, gschar.c, gspaint.c,
+gxccache.c, gxccman.c, gxfill.c)
+
+Changes the palette member of memory devices from gs_string to
+gs_const_string. (gdevmem.h, gxdevmem.h, gdevmem.c, gdevm1.c)
+
+Starts to decouple halftoning from the graphics state machinery, so
+it can be applied after banding rather than before. (gxdcolor.h,
+gxdht.h, gxdither.h, gzht.h, gxcmap.c, gxdither.c, gxdraw.c)
+
+Starts to decouple path filling from the graphics state machinery, so
+that we can pass paths through band lists. (gxpaint.h, gxfill.c)
+
+Adds interpolation to the CIE RenderTable lookup. This is optional, enabled
+by #define CIE_RENDER_TABLE_INTERPOLATE in gscie.h. (gscie.h, gxctable.h,
+gscie.c, gxctable.c)
+
+</pre>
+
+<h2><a name="Version3.44"></a>Version 3.44 (limited) (8/21/95)</h2>
+
+<p>
+This includes a few bug fixes, but its main purpose is to add two new
+features: monobit and 8-bit gray-scale RasterOp (at the driver level, not at
+the gstate level yet), and (compressed) band lists in RAM. Of course, these
+new features may have introduced new bugs!
+
+<h3><a name="V3.44_Documentation"></a>Documentation</h3><pre>
+Adds contact information for a user working on NeXT machines. (README)
+
+Notes that Ghostscript runs on FreeBSD. (README)
+
+Adds copy_rop (the RasterOp operation) to the driver interface.
+(drivers.doc)
+
+Adds FONTPATH information for more operating systems. (use.doc)
+
+</pre><h3><a name="V3.44_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The tar_cat script needed a #!/bin/sh to execute correctly on all
+platforms. (tar_cat)
+ - There were a number of minor errors in the makefiles. (gs.mak,
+unixhead.mak)
+ - Level 2 configurations without command lists had two undefined
+references. (gs.mak)
+ - Some shells required an extra ';' to terminate an 'if' command.
+(ugcclib.mak, unix-end.mak, unixtail.mak)
+
+Updates the JPEG code to the officially released version 6 of the IJG
+library. See jpeg.mak for information on where to find this library.
+(jpeg/*, jpeg.mak, *.mak, modules.lis)
+
+Adds a definition of XEAUX to the makefiles to parallel CCAUX, primarily for
+cross-compilation environments. All references to &lt;some-program&gt;$(XE) must
+be replaced by $(&lt;SOME-PROGRAM&gt;_XE), where some-program={$(GS), ansi2knr,
+echogs, genarch, genconf, geninit}. This is a NON-BACKWARD-COMPATIBLE
+CHANGE, required in order for the makefiles to work in cross-compiled
+environments. (For non-cross-compiled environments, it currently doesn't
+matter.) (gs.mak, *.mak)
+
+</pre><h3><a name="V3.44_Utilities"></a>Utilities</h3><pre>
+
+Updates ps2ai.ps to version 2.13. (ps2ai.ps)
+
+Changes all the utility shell scripts to include #!/bin/sh, to use exec, and
+to pass the original arguments using "$@". (bdftops, font2c, gsbj, gsdj,
+gslj, gslp, gsnd, wftopfa)
+
+</pre><h3><a name="V3.44_Drivers"></a>Drivers</h3><pre>
+
+Adds the requirement that all page-oriented devices (i.e., those that use
+gdevprn.h and implement the print_page procedure) include page.dev in their
+dependencies and use $(SETPDEV) rather than $(SETDEV) in their makefile rule
+bodies. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. Without this change, the
+command list logic (over 25K of unnecessary object code) would have to be
+included in every configuration. (gs.mak, devs.mak, echogs.c)
+
+Adds a user-contributed driver for the Okidata Microline (IBM compatible)
+dot matrix printers. (gdevokii.c)
+
+Adds copy_rop (the RasterOp operation) to the driver interface. Currently,
+only monobit and 8-bit gray-scale devices implement it. (gxdevice.h,
+gsdevice.c)
+
+Adds the ability to read back bits from the display to the x11 devices.
+(x_.h, gdevx.c, gdevxalt.c)
+
+</pre><h3><a name="V3.44_Platforms"></a>Platforms</h3><pre>
+
+Makes some minor changes to support QNX. (stat_.h)
+
+Removes the mswinprn driver from the 16-bit Windows configuration, because
+the 64K default data segment overflowed. (bcwin.mak)
+
+</pre><h3><a name="V3.44_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Type 1 fonts didn't accept packed arrays for Subrs or OtherSubrs.
+(zchar1.c, zfont1.c)
+ - TBCP-encoded files (yes, I know there isn't supposed to be any
+such thing) didn't automatically activate TBCP decoding. (gs_init.ps)
+ - Fonts with invalid FID entries weren't detected. (zfont.c)
+
+Speeds up dictionary operations slightly by removing redundant checks for
+nulls. (zdict.c)
+
+Starts adding support for the new CIEBasedDEF and CIEBasedDEFG color spaces.
+(gs_l2img.ps, gs_lev2.ps, igstate.h, zcrd.c)
+
+Adds access operators for RasterOp and transparency in the graphics state.
+(They don't actually do anything yet.) (zgstate.c)
+
+</pre><h3><a name="V3.44_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - PDFDocEncoding was missing characters 24-31. (gs_pdf_e.ps)
+
+Moves the definition of pdfmark from systemdict to userdict so that Adobe
+PostScript files won't think the interpreter is a distiller. (gs_pdf.ps)
+
+</pre><h3><a name="V3.44_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Some JPEG images had bands of garbage alternating with bands of
+valid data. IJG v6 fixed this -- see above.
+ - With FPU_TYPE = -1, the cosine routine returned incorrect values
+for angles above 270 degrees. (gsmisc.c)
+ - CIE color conversion didn't work on 16-bit systems. (gscie.h,
+gscie.c)
+
+Partially implements reducing the intermediate space for rasterizing
+anti-aliased characters by compressing the oversampled representation to an
+alpha array incrementally. (gdevmem.h, gxchar.h, gxdevmem.h, gdevabuf.c,
+gschar.c, gspaint.c, gxccman.c)
+
+Starts adding support for the new CIEBasedDEF and CIEBasedDEFG color spaces.
+(gscie.h, gscspace.h, gscie.c)
+
+Completes the implementation of band lists in RAM. To select this feature,
+change the definition of cl_impl in gs.mak from clfile to clmem. (Someday
+we'll make this easier.) (gxclmem.h, gxclmem.c)
+
+Finishes implementing RasterOp and transparency at the driver level for
+monobit and 8-bit gray-scale devices, and implements some of the framework
+for general multiple-bit-per-pixel devices. See drivers.doc for
+documentation. (gsropt.h, gxcldev.h, gxclist.h, gdevm1.c, gdevm8.c,
+gdevmem.c, gdevmrop.c, gschar.c, gxclist.c, gxclread.c)
+
+Implements the ability to include commands applicable to all bands, rather
+than an individual band, in the band list. Eventually this will be used for
+passing halftones through the band list. (gxcldev.h, gxclist.h, gxclist.c)
+
+Adds support for 2-bit-deep 'word' memory devices. (gdevmem.h, gxdevmem.c,
+gdevm2.c)
+
+Changes the initialization for memory devices so that they determine their
+polarity from the device for which they are buffering the image (if any).
+This is a subtle change. (gdevmem.h, gdevmem.c, gdevm1.c, gsdevmem.c)
+
+</pre>
+
+<h2><a name="Version3.43"></a>Version 3.43 (limited) (8/10/95)</h2>
+
+<p>
+Fixes a few more minor bugs, and changes FEATURE selection back to
+essentially the way it was before 3.41.
+
+<h3><a name="V3.43_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - A ~ was missing in a URL. (README)
+
+Adds information about an Amiga port of Ghostscript. (README)
+
+Removes a file called gs.1.c, which appears to be an obsolete version of
+gs.1.
+
+Adds DCX documentation to the PCX driver. (We don't support DCX yet, but we
+might in the future.) (gdevpcx.c)
+
+Adds information about getting Type 1 fonts from H-P if you have an H-P
+PostScript printer. (use.doc)
+
+</pre><h3><a name="V3.43_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The auxiliary programs wouldn't compile with ANSI compilers that
+don't accept K&amp;R syntax. (ccgs, gs.mak, ugcclib.mak, *head.mak,
+unixtail.mak, echogs.c, genarch.c, genconf.c, geninit.c)
+
+Reinstates FEATURE_DEVS in the makefiles, getting rid of FEATURE1..10. THIS
+IS A NON-BACKWARD-COMPATIBLE CHANGE, but it puts things back the way they
+were before 3.41, with one exception: compiling the PostScript
+initialization code into the executable is now a separate macro
+COMPILE_INITS with a definition of 0 or 1, instead of the ccinit 'feature'.
+(gs.mak, *.mak, fonts.doc, make.doc)
+
+Adds a CCLEAF macro to the makefiles, for optimizing the compilation of
+modules containing only leaf procedures. (gs.mak, *.mak)
+
+Adds a CONFIG makefile variable that helps in maintaining multiple variants
+in a single directory. (gs.mak, *.mak)
+
+</pre><h3><a name="V3.43_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - An extern for exit() (in &lt;stdlib.h&gt;) was omitted. (gp_vms.c)
+
+</pre><h3><a name="V3.43_Fonts"></a>Fonts</h3><pre>
+
+Reorganizes the compiled font facility so that fonts can be compiled and
+turned into a library by third parties. (gs.mak, font2c.ps, gs_ccfnt.ps,
+ccfont.h, iccfont.c, ccfontab.c)
+
+</pre><h3><a name="V3.43_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - internaldict was implemented as a dictionary in systemdict and an
+operator in userdict, rather than as an operator in systemdict. This caused
+a noaccess error when loading certain Type 1 fonts. (gs_init.ps,
+gs_type1.ps)
+ - xfonts couldn't handle modified encodings. (zfont2.c)
+
+Changes the build date printout in the help message to YYYY-MM-DD. (gs.c)
+
+Adds native support for Multiple Master fonts (WeightVector). (zfont1.c)
+
+Implements sin and cos more efficiently (by table lookup with linear
+interpolation) on machines with slow (or no) floating point. (zmath.c)
+
+Separates out the code for 'reading' the .ps initialization files, for the
+new COMPILE_INITS arrangement. (imain.h, gconfig.c, gsmain.c, iconfig.c,
+iccinit0.c, iinit.c)
+
+</pre><h3><a name="V3.43_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The CCITTFaxDecode filter could read up to 3 bytes beyond EOD.
+This fix doesn't quite cover all cases, but at least it makes things better.
+(ghc.h, sbhc.c, scfd.c)
+
+</pre><h3><a name="V3.43_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - After a nocurrentpoint error from a show operation with a
+composite font, the bookkeeping was confused and could cause an access
+error. (gschar.c)
+ - xfonts couldn't handle modified encodings. (gsccode.h, gxchar.h,
+gxfont.h, gxxfont.h, gschar.c, gxccache.c)
+
+Makes .charboxpath able to use cached character information. (gxchar.h,
+gschar.c)
+
+Adds native support for Multiple Master fonts (OtherSubrs 14-18).
+(gxfont1.h, gstype1.c)
+
+Improves the hashing functions for the character cache. (gxfcache.h,
+gxccman.c)
+
+Adjusts the character oversampling algorithm to reduce thickening for
+devices with alpha capability. (gsbitops.c)
+
+Improves the encoding of the band list for certain kinds of small
+rectangles. (gxcldev.h, gxclist.c, gxclread.c)
+
+Implements sin and cos efficiently on machines with slow (or no) floating
+point. (gxfarith.h, gsmatrix.c, gsmisc.c, gspath1.c)
+
+</pre>
+
+<h2><a name="Version3.42"></a>Version 3.42 (limited) (8/2/95)</h2>
+
+<p>
+Fixes a few significant problems in 3.41, and brings the DLL code up to
+date.
+
+<h3><a name="V3.42_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - language.doc still referred to rectappend rather than .rectappend.
+(language.doc)
+
+Adds documentation on the Macintosh port. (readme, make.doc)
+
+Updates the DLL documentation. (dll.doc)
+
+Documents the BCP and TBCP filters as non-experimental. (language.doc)
+
+</pre><h3><a name="V3.42_Procedures"></a>Procedures</h3><pre>
+
+Changes the build date printout to YYYY-MM-DD. (gs_init.ps)
+
+</pre><h3><a name="V3.42_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The VMS build script had gotten out of sync with the makefiles
+(again). (vms.mak, modules.lis)
+
+Brings the MS Windows and OS/2 platforms up to date with the rest of the
+code, including DLL support for OS/2. (os2.mak, gsdll*.def, gdevswn.c,
+gdevpm.c, gdevwdib.c, gp_mswin.c, gp_os2.c, gsdll.c, gsmain.c)
+
+Adds a new platform-specific routine gp_do_exit, as an alias for the C
+library `exit' call. (gp.h, gsdll.c, gsmain.c, gp_*.c)
+
+</pre><h3><a name="V3.42_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - .forgetsave at the outermost level didn't clear the l_new bit,
+causing changes to be undone improperly. (isave.c)
+ - A 'void' formal parameter list upset some compilers (as it should
+have). (gsmain.c)
+
+Adds a .charboxpath operator that appends to the current path the bounding
+boxes of the characters of a string. (zchar.c, zchar1.c)
+
+</pre><h3><a name="V3.42_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - A procedure was declared private inconsistently. (siscale.c)
+
+</pre><h3><a name="V3.42_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The library test program didn't do a necessary initial gsave.
+(gslib.c)
+ - The fix for landscape monobit images in 3.41 could smash memory.
+(gsimage1.c)
+ - 1-pixel-wide lines drawn with image or imagemask still disappeared
+sometimes. (gsimage.c)
+
+Does some more preparatory work for the implementation of command lists in
+RAM. (gdevprn.h, gxclio.h, gxclist.h, gxclfile.c, gxclist.c, gxclread.c)
+
+Adds a gs_charboxpath procedure that appends to the current path the
+bounding boxes of the characters of a string. (gschar.h, gscpm.h,
+gstype1.h, gxchar.h, gxpath.h, gxtype1.h, gzstate.h, gschar.c, gspaint.c,
+gstype1.c, gxpath.c)
+
+</pre>
+
+<h2><a name="Version3.41"></a>Version 3.41 (limited) (7/27/95)</h2>
+<p>
+Another incremental release with bug fixes and customer-requested
+enhancements. This release was intended to include the full setpagedevice
+media matching and adjustment algorithm, but we discovered some
+architectural problems during development, and have postponed it.
+
+<h3><a name="V3.41_Documentation"></a>Documentation</h3><pre>
+
+Replaces the build instructions for NeXTSTEP with more up-to-date and
+accurate ones. (make.doc)
+
+Notes that some extra manual steps are required when cross-compiling.
+(make.doc)
+
+Documents how to define new 'features' in the makefile. (gs.mak)
+
+</pre><h3><a name="V3.41_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The build rule for ccinit.dev was circular. Fixing this required
+a small but NON-BACKWARD-COMPATIBLE change in the way that features are
+selected in the makefiles (FEATURE_DEVS replaced by FEATURE1..10). (*.mak,
+fonts.doc, make.doc)
+
+Changes the build rule for gconfig.h to be less likely to overrun MS-DOS's
+command line length limit. (gs.mak)
+
+Adds a -dFIXEDMEDIA switch to indicate that the media size should be
+considered fixed after initialization. (gs_init.ps)
+
+</pre><h3><a name="V3.41_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - traceimg.ps incorrectly referred to .stdout. (traceimg.ps)
+ - prfont.ps didn't display unencoded characters correctly.
+(prfont.ps)
+ - ps2epsi didn't give correct bounding box information. (ps2epsi,
+ps2epsi.ps)
+ - ps2epsi produced DSC comments that didn't fully conform to the
+Adobe standard. (ps2epsi, ps2epsi.ps)
+
+Allows viewpbm.ps to take multiple files on the command line. (viewpbm.ps)
+
+</pre><h3><a name="V3.41_Drivers"></a>Drivers</h3><pre>
+
+Adds a preliminary, contributed PNG driver. THIS IS NOT USABLE YET -- DON'T
+TRY TO USE IT. (png.mak, gdevpng.c)
+
+Increases the maximum allowable scan line width for the TIFF drivers from
+5183 pixels to 12863 pixels. (scf.h)
+
+</pre><h3><a name="V3.41_Platforms"></a>Platforms</h3><pre>
+
+Updates the MS Windows DLL code to export the new, suspendable run_string
+interface. (gsdll.h, gsdll.c, dll.doc)
+
+</pre><h3><a name="V3.41_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - There were several errors in cfonts.mak. (cfonts.mak)
+ - The compiled fonts option didn't offer both free and standard
+configurations. (gs.mak)
+ - A bug in the handling of Encoding resources prevented compiled
+fonts from working. (gs_res.ps)
+
+Adds a little more support for CID-keyed fonts. They still aren't anywhere
+near usable. (gs_cidfn.ps, gs_type1.ps)
+
+Adds a new Fontmap for Solaris 2.3. (Fontmap.Solaris)
+
+Adds support for Type 4 fonts (Type 1 fonts with their own BuildChar
+procedures), including the CCRun procedure in internaldict. (gs_fonts.ps,
+gs_res.ps, gs_type1.ps)
+
+</pre><h3><a name="V3.41_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - showpage and copypage didn't honor NumCopies in a page device.
+(gs_setpd.ps, zdevice2.c)
+ - currentpagedevice returned incorrect information if the current
+device wasn't a page device. (gs_setpd.ps)
+ - currentpagedevice didn't guarantee the presence of InputAttributes
+and OutputAttributes. (gs_setpd.ps)
+ - The l_new bit wasn't set properly when a dictionary changed from
+packed to unpacked keys, leading to unnecessary saves. (idict.c)
+ - Streams requiring intermediate buffering could read ahead too far,
+causing input data to be skipped. (zfilter.c)
+ - cshow didn't reset the font to the base font when calling the
+procedure. (zchar2.c)
+ - The Install procedure in a page device didn't set the default CTM.
+(gs_setpd.ps, zmatrix.c)
+ - findlibfile didn't handle special files like %stdin correctly.
+(zfile.c)
+ - setpagedevice didn't implement media matching. (gs_setpd.ps,
+zdevice2.c, zmedia2.c, zmatrix.c)
+ - Some floating point numbers didn't print out with enough digits to
+read back in with the identical value. (iutil.c)
+ - Integers that overflowed 31 bits (but not 32 bits) were converted
+to negative integers rather than correct positive reals. (iscannum.c)
+
+Removes an experimental operator that called the image scaling/interpolation
+code. (zimage2.c)
+
+Adds a -sSUBSTFONT=&lt;fontname&gt; switch that substitutes the given font for all
+unknown fonts, bypassing the normal intelligent substitution algorithm.
+(gs_fonts.ps)
+
+Adds the Revision system parameter. (zmisc2.c)
+
+Adds a .knownundef operator that does an undef and returns true iff the key
+was formerly present. (zdict.c)
+
+Makes the maximum length of names be 256 if EXTEND_NAMES is being used, 16K
+otherwise. (inamedef.h, iname.c)
+
+Adds internaldict. (gs_init.ps, iinit.c)
+
+Adds support for Type 4 fonts. (bfont.h, zchar.c, zchar1.c, zfont1.c,
+zfont2.c)
+
+Changes .encodingdict to EncodingDirectory, for compatibility with Adobe
+interpreters. (gs_init.ps, gs_kanji.ps, gs_res.ps)
+
+Adds superexec, an undocumented operator that is equivalent to exec but
+suppresses all invalidaccess checks. NOT COMPLETED YET; currently superexec
+is equivalent to exec. (zcontrol.c)
+
+</pre><h3><a name="V3.41_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - .stderr was used but is no longer defined. (pdf_base.ps)
+
+</pre><h3><a name="V3.41_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - Not all streams initialized their state pointer. (stream.c,
+sfile.c, sfileno.c)
+
+Adds a filter for the smoothed image scaling algorithm. Eventually this
+filter will require very little intermediate storage; right now it still
+needs to buffer the entire intermediate image. (siscale.h, siscale.c)
+
+Increases the maximum allowable scan line width for the CCITTFaxEncode
+filter from 5183 pixels to 12863 pixels. (scf.h)
+
+</pre><h3><a name="V3.41_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - setpagedevice didn't update NumCopies correctly. (gdevprn.c,
+gsdparam.c)
+ - The newly optimized code for monobit bitmaps could cause an
+out-of-bounds memory access and/or make unaligned references. (gsimage1.c)
+ - setpagedevice with unknown keys could cause an /undefined error.
+(gsdparam.c)
+ - cshow didn't reset the font to the base font when calling the
+procedure. (gschar.h, gschar.c)
+ - The Install procedure in a page device didn't set the default CTM.
+(gzstate.h, gschar.c, gscoord.c, gsdevice.c)
+ - Very non-linear EncodeABC procedures in a color rendering
+dictionary could produce very inaccurate results. (gscie.h, gscie.c)
+ - The line_ptrs pointer in memory devices didn't get relocated if
+the bitmap was moved during garbage collection, leading to memory smashing.
+(gdevmem.c)
+ - setpagedevice didn't implement media matching. (gsdparam.c,
+gscoord.c)
+ - 'word' memory devices weren't recognized as memory devices.
+(gdevmem.c)
+ - makeimagedevice allocated, and then didn't free, an unnecessary
+palette for monobit devices. (gsdevmem.c)
+ - The hack for 1-bit-wide images didn't work consistently,
+particularly in landscape orientation. (gsimage.c, gsimage0.c)
+
+Adds an .IgnoreNumCopies page device parameter that causes #copies and
+NumCopies to be ignored. (gxdevice.h, gsdevice.c, gsdparam.c)
+
+Removes the .IsPageDevice device parameter. (gsdparam.c)
+
+Converts the image scaling/interpolation code to a filter. (gximage.h,
+gsimage.c, gsimage0.c, gsimage3.c)
+
+Adds support for Type 4 fonts. (gxfont.h)
+
+Adds a default implementation of parameter lists, designed to be usable
+easily from C code. (gsparam.h, gsparam.c)
+
+</pre>
+
+<h2><a name="Version3.40"></a>Version 3.40 (limited) (6/28/95)</h2>
+
+<p>
+This is another incremental limited release for delivery of a couple of
+important bug fixes (pixel 'holes' in rotated images, setpagedevice errors
+on some platforms) and an enhancement (architectural support for band lists
+in RAM).
+
+<h3><a name="V3.40_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - The FTP location of the EMX DLLs was incorrect. (use.doc)
+
+</pre><h3><a name="V3.40_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - A couple of build rules for IJG v6 were omitted. (jpeg.mak)
+
+</pre><h3><a name="V3.40_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - prfont.ps wouldn't print more than 128 unencoded characters.
+(prfont.ps)
+
+</pre><h3><a name="V3.40_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - setpagedevice often caused /undefined errors on MS Windows and
+OS/2 platforms. (gdevmswn.c, gdevpm.c)
+ - The VMS module list had gotten out of sync with the makefiles
+(again). (modules.lis)
+
+</pre><h3><a name="V3.40_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - A couple of casts betwen char * and byte * were omitted.
+(gsmain.c)
+ - gs_[main_]run_file_open wasn't exported properly. (imain.h,
+main.h, gsmain.c)
+
+</pre><h3><a name="V3.40_Streams"></a>Streams</h3><pre>
+
+Changes the DCTEncode filter to return an error if it wasn't supplied enough
+data before being closed. (sdcte.c)
+
+</pre><h3><a name="V3.40_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The coordinate computations for all filling operations were
+slightly inaccurate, leading to pixel 'holes' in rotated images. (gxdda.h,
+gximage.h, gsimage*.c, gxdraw.c, gxfill.c)
+
+Undoes an "optimization" (inlining the normal, fast case of a procedure)
+that actually hurt performance. (gxclist.c)
+
+Refactors the command list code so that it in the future it will be able to
+store command lists either in RAM or in the file system. (gdevprn.h,
+gxcldev.h, gxclio.h, gxclist.h, gdevprn.c, gxclfile.c, gxclist.c,
+gxclread.c)
+
+Changes the interface to the path filling code to take separate X and Y
+adjustment values. (gxpaint.h, gspaint.c, gxfill.c)
+
+Makes the command list allocate a small tile cache if the device doesn't
+need halftones. (gxclist.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version3.39"></a>Version 3.39 (limited) (6/24/95)</h2>
+
+<p>
+This is again an incremental release primarily for delivery of enhancements
+(suspendable string input in particular) to commercial customers, and with a
+few bug fixes.
+
+<h3><a name="V3.39_Documentation"></a>Documentation</h3><pre>
+Notes that PDF files and repositioning PostScript files do not work if
+Ghostscript was compiled with VAX C. (use.doc)
+
+Notes the requirement for EOD lookahead in decoding filters. (strimpl.h)
+
+</pre><h3><a name="V3.39_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - There were a number of undefined or used-before-defined variables
+in the makefiles. (devs.mak, dvx-head.mak, unixhead.mak, gs.mak)
+ - Some commands in the makefile exceeded the MS-DOS limit of 120
+characters. (gs.mak)
+
+Adds a -P and -P- switch to control whether the search path automatically
+includes `.' as its first element. Moves the default value of this choice
+(SEARCH_HERE_FIRST) from gsmain.c to iminst.h. (iminst.h, gs.c, gsmain.c,
+use.doc)
+
+Makes some makefile changes in anticipation of the IJG v6 release. (*.mak)
+
+</pre><h3><a name="V3.39_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - font2c generated invalid C procedure names from font names that
+contained non-alphanumerics other then '-'. (font2c.ps)
+ - font2c generated a single element of incorrect type for numeric
+arrays of zero length. (font2c.ps)
+
+</pre><h3><a name="V3.39_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The VMS build scripts had gotten out of sync (again). (vms*.mak,
+modules.lis)
+
+</pre><h3><a name="V3.39_Fonts"></a>Fonts</h3><pre>
+
+Makes the FONTPATH directory scanner accept fonts that begin with
+%!PS-AdobeFont or %!FontType1 with no following `-'. (gs_fonts.ps)
+
+</pre><h3><a name="V3.39_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - eq and ne on arrays or dictionaries required read access.
+(zrelbit.c)
+ - An include was missing. (zcsindex.c)
+ - .forgetsave at the outermost level didn't reset the l_new flag in
+changed slots, leading to an anomalous (although perhaps not harmful) state.
+(isave.c)
+ - Dictionary growing or unpacking would both save and free the old
+keys array, leading to a dangling reference. (idict.c)
+
+Changes gs_interpret so that for .quit with a negative operand &lt;= -100,
+gs_interpret returns e_Fatal rather than the operand. THIS IS A
+NON-BACKWARD-COMPATIBLE CHANGE, but as far as we know, it doesn't affect
+anyone. (interp.c)
+
+Adds an API to allow feeding string input to the interpreter in pieces.
+(errors.h, imain.h, main.h, gs.c, gsmain.c, interp.c, zcontrol.c, zfilter.c)
+
+Adds new predicates .identeq and .identne that test "pointer equality", even
+for numbers and strings. (iutil.h, iutil.c, zrelbit.c)
+
+Changes a few uses of return_error to return in places that don't lead
+directly to a PostScript error. (idict.c)
+
+</pre><h3><a name="V3.39_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The logic for skipping up to a 0xff byte when decoding JPEG data
+could skip too much. (sdctd.c, sjpegd.c)
+ - If a buffer boundary fell in the middle of, or just before, an
+EOD, some decoding filters could stop reading too soon. (sbcp.c, smtf.c,
+sstring.c)
+
+Makes some minor changes in anticipation of the IJG v6 release.
+(gsjmorec.h)
+
+</pre><h3><a name="V3.39_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - A declaration should have been removed. (gsdll.c)
+ - The library initialization/termination API wasn't declared.
+(gslib.h, gsinit.c, gsmain.c)
+ - A variable and a preprocessor macro with the same name confused
+VAX C. (gxclist.c)
+ - Image devices with depth 2-8 and only gray shades in the palette
+didn't set color_info correctly. (gsdevice.c)
+
+Speeds up unrotated black-and-white images further by making them render
+directly into a memory device when possible. (gxdevmem.h, gsimage1.c)
+
+</pre>
+
+<h2><a name="Version3.38"></a>Version 3.38 (limited) (6/18/95)</h2>
+
+<p>
+This release incorporates several customer-requested enhancements (cleaner
+separation of the graphics library from the interpreter, option for &gt;64K
+names, true garbage collection of names, better handling of halftones on
+band devices). It is intended primarily for those customers, but is
+intended as a dry run for the next public release.
+
+<h3><a name="V3.38_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - gx_bitmap had not been updated to gx_tile_bitmap.
+(drivers.doc)
+
+</pre><h3><a name="V3.38_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The man page extension in the Unix makefiles was still $(manext),
+not $(man1ext). (unix-end.mak)
+ - 'make clean' didn't remove gs_init.c. (gs.mak)
+
+Restructures the makefiles to better separate the language interpreters from
+the graphics core. (gs.mak)
+
+Adds a -dNOPROMPT switch to suppress the end-of-page prompts (but still wait
+for the user to type a newline). This is different from -dNOPAUSE, which
+suppresses both the prompts and the wait. (gs_init.ps)
+
+</pre><h3><a name="V3.38_Utilities"></a>Utilities</h3><pre>
+
+Replaces the mergeini.ps program with an equivalent (actually slightly
+better) version written in C. (gs.mak, *.mak, psfiles.doc, use.doc,
+geninit.c)
+
+</pre><h3><a name="V3.38_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The color DeskJet drivers wouldn't compile with a K&amp;R compiler,
+because some of the procedure definitions weren't in the restricted syntax
+that ansi2knr requires. (gdevcdj.c)
+ - The color DeskJet drivers wouldn't compile because of a bug in
+Sun's cc. (gdevcdj.c)
+
+Changes the BJ-10e(x) margins to be identical to those of the BJ-200.
+(gdevbj10.c)
+
+Changes the LaserJet margins in response to a user's request. (gdevdjet.c)
+
+Changes the psmono driver to produce slightly larger files that execute
+faster on typical Level 1 printers. (gdevpsim.c)
+
+Changes the psmono driver so that it does not scale the image to fit the
+page size, but instead scales it to be the same physical size on the page.
+THIS IS A NON BACKWARD COMPATIBLE CHANGE. However, for full-page images, it
+will not have any visible effect. (gdevpsim.c)
+
+</pre><h3><a name="V3.38_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - There were some problems associated with printing in 32-bit
+Windows environments. (gp_mswin.c)
+ - The IBM RS/6000 needs both &lt;time.h&gt; and &lt;sys/time.h&gt;. (time_.h)
+
+Adds the PDF interpreter to the standard MS Windows configuration.
+(bcwin.mak)
+
+</pre><h3><a name="V3.38_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - The entry for Courier-BoldItalic in cfonts.mak incorrectly named
+it as Courier-Italic. (cfonts.mak)
+ - The files for Courier-Italic in cfonts.mak were inconsistently
+named ncrri instead of ncri. (cfonts.mak)
+ - The rules in cfonts.mak covered only the fonts distributed with
+the free versions of Ghostscript, omitting some of the standard set of 35.
+(cfonts.mak)
+ - The maximum number of stem hints per character in Type 1 fonts
+wasn't large enough for complex Asian characters. (gxtype1.h)
+
+Adds a -dNOFONTMAP switch to suppress loading the Fontmap file.
+(gs_init.ps, gs_fonts.ps)
+
+</pre><h3><a name="V3.38_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - One of the GC marking routines for halftones had a typo,
+possibly leading to an invalid access. (zht2.c)
+ - The GC could store beyond the end of the mark stack,
+possibly smashing some characters of a string or name. (igc.c)
+ - If the allocator allocated a new ref object from a
+freelist, the bookkeeping for the current ref object could get
+confused. (ialloc.c)
+ - The GC didn't remove names properly from the hash table.
+(iname.c)
+ - If a DOS editor added a ^Z to the end of an initialization file,
+an error occurred during initialization. (gs_init.ps)
+ - If an initialization file had any lines longer than 128
+characters, .skipeof would get an error. (gs_init.ps)
+ - makepattern could create structures in global VM pointing to
+structures in local VM. (zpcolor.c)
+ - The default color rendering dictionary didn't specify large enough
+ranges for some intermediate values. (gs_lev2.ps)
+ - Files being freed by a restore weren't unlinked properly, leading
+to dangling pointers. (zfile.c)
+ - The interpreter used strlen without a prototype. (interp.c)
+ - Indexed or Separation colors with a CIE base or alternate space
+didn't work. (zcie.c)
+ - The Watcom C 10.0 compiler produced incorrect code for an
+overlapping structure assignment. (zcsindex.c)
+
+Removes limit of 64K names, if EXTEND_NAMES is defined at compile
+time. (*.mak, idebug.h, iminst.h, iname.h, gs.c, gsmain.c, idebug.c,
+iname.c)
+
+Makes the garbage collector really collect names. (iname.h, inamedef.h,
+isstate.h, igc.c, iname.c, isave.c)
+
+Restructures some files to better separate the language interpreters
+from their support code. (gconfig.c, iconfig.c, iinit.c)
+
+Restructures some files to better separate the language interpreters
+from the graphics core. (iastate.h, iastruct.h, ialloc.c)
+
+Allows the operands of cshow to be in either order on the stack. Adobe
+interpreters apparently allow this, even though it's not documented.
+(zchar2.c)
+
+Adds a hack in cvs to truncate non-standard operator names, rather than
+giving a rangecheck, to work around the "max err string" problem in some
+common error handlers. (ztype.c)
+
+Changes the print string for unregistered operators from operator_0x... to
+@0x.... (iutil.c)
+
+Changes the garbage collector so it tries to allocate a large mark stack, to
+avoid going into its 'slow' mode if the mark stack overflows. (igc.c)
+
+</pre><h3><a name="V3.38_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - Stroked text used the text matrix, rather than just the
+CTM, for scaling the line width, which could lead to inappropriately
+wide lines. (gs_pdf.ps)
+ - Fonts based on other than a 1000-unit scale (i.e., with a
+FontMatrix other than [0.001 0 0 0.001 0 0]) didn't scale Widths to
+match the font scaling. (pdf_font.ps)
+
+Implements the PDF 1.1 color space extensions, except for Lab space.
+(gs_pdf.ps, pdf_draw.ps)
+
+Implements the Rotate key for pages. (pdf_main.ps)
+
+</pre><h3><a name="V3.38_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - When the garbage collector closed a file stream, the stream
+incorrectly attempted to free the buffer. (stream.c)
+
+Separates out some stream implementations to better distinguish the
+graphics core from the language interpreters. (smtf.h, sfilter1.c,
+smtf.c, srld.c, srle.c)
+
+</pre><h3><a name="V3.38_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Compressing characters being entered in the cache could cause an
+invalid memory access. (gsbitops.c)
+ - The setbbox bounding box check was slightly inaccurate.
+(gsdps1.c)
+ - makepattern could create structures in global VM pointing to
+structures in local VM. (gscolor2.h, gspcolor.c)
+ - Out-of-range values during CIE color conversion led to random
+results. (gscie.c)
+ - On output devices with non-inverted Y axes (such as MS Windows),
+Interpolated images would smash memory. (gsimage.c)
+ - 90 degree rotated zero-width images caused an invalid memory
+access. (gsimage1.c)
+ - If #copies was zero, showpage could create bogus empty output
+files. (gdevprn.c)
+ - PageCount didn't take #copies into account. (gsdevice.c)
+ - Indexed or Separation colors with a CIE base or alternate space
+didn't work. (gscie.h, gscie.c)
+
+Implements triangular line caps and joins, in anticipation of adding
+a PCL5 interpreter. (gsline.h, gxstroke.c)
+
+Moves some procedures around for better separation of library from
+interpreter. (gsinit.c, gslib.c, gsmain.c, gsmisc.c)
+
+Moves the standard allocator from the interpreter to the library.
+(gsalloc.h, gxalloc.h, gxobj.h, gsalloc.c)
+
+Starts to change the representation of paths slightly to make it possible to
+identify arcs. This change is backward-compatible for all code except
+callers of gx_path_add_arc. (gxpath.h, gspath1.c, gxpath.c, gxstroke.c)
+
+Adds some framework for keeping track of RasterOp and "transparency" in the
+graphics state, although these don't actually have any effect yet.
+(gsrop.h, gsropt.h, gsstate.h, gxcldev.h, gzstate.h, gsrop.c, gsstate.c,
+gxclist.c, gxclread.c)
+
+Adds a compile-time option for using the Adobe RGB&lt;-&gt;CMYK conversion rules.
+(gxdcconv.c)
+
+Adds a driver procedure for identifying band devices. This change is
+backward-compatible for all existing devices. (gdevmem.h, gxdevice.h,
+gsdevice.c, gxclip2.c, gxclist.c, gxcpath.c)
+
+Speeds up gray-scale images on devices requiring banding, and enables
+further optimizations, by reintroducing the distinction between banded and
+non-banded devices. (gxdevice.h, gdevprn.c, gsimage1.c)
+
+Reduces the size of the band list for halftoned images by encoding tile
+indices more compactly. (gxcldev.h, gxclist.h, gxclist.c, gxclread.c)
+
+Extends the band list so it can cache more than 256 halftone tiles, and to
+make better decisions about tile caching. (gxcldev.h, gxclist.h, gxclist.c,
+gxclread.c)
+
+</pre>
+
+<h2><a name="Version3.37"></a>Version 3.37 (limited) (5/11/95)</h2>
+
+<p>
+Another bug fix release distributed only to customers.
+
+<h3><a name="V3.37_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - Some documentation about parameter lists was incorrect.
+(gsparam.h)
+ - The documentation did not note that one cannot "pipe" PDF files
+into the interpreter. (use.doc)
+
+Adds documentation for the BJC-600 to devices.doc. (devices.doc)
+
+</pre><h3><a name="V3.37_Procedures"></a>Procedures</h3><pre>
+
+Changes the debugging switch for OS calls from -Z0 to -Ze, and adds -Z0 for
+high-level GC tracing. (use.doc, gp_unifs.c, ialloc.c, igc.c)
+
+</pre><h3><a name="V3.37_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - The ps2ascii shell script included an erroneous @d. (ps2ascii)
+
+Enhances ps2ascii to output color and rectangle fill/stroke information if
+COMPLEX is defined. (ps2ascii.ps)
+
+</pre><h3><a name="V3.37_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - the BJC-600 driver didn't handle BitsPerPixel correctly.
+(gdevcdj.c)
+
+</pre><h3><a name="V3.37_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - Some buggy Type 1 fonts confused the Type 1 font reader.
+(gs_fonts.ps, gs_type1.ps, pdf_font.ps)
+
+</pre><h3><a name="V3.37_Interpreter_PostScript"></a>Interpreter (PostScript)</h3><pre>
+
+Fixes bugs:
+ - .registerencoding didn't accept mixedarrays, which could cause an
+error if an encoding was loaded long after initialization. (zfont2.c)
+ - If a program did a lot of saves and restores, the garbage
+collector could get invoked much too often. (iastate.h, ialloc.c, igc.c,
+isave.c)
+
+Changes the name of the rectappend operator to .rectappend, since it isn't a
+standard PostScript operator. (zdps1.c)
+
+</pre><h3><a name="V3.37_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - PDF files didn't interact properly with ps2ascii. (gs_pdf.ps)
+ - setdash wouldn't accept a packed array. (zgstate.c)
+ - PDF files with incorrect generation numbers in object references
+produced an error rather than a warning. (pdf_base.ps)
+
+</pre>
+
+<h2><a name="Version3.36"></a>Version 3.36 (limited) (5/4/95)</h2>
+
+<p>
+This is a limited-distribution release for distributing bug fixes to a few
+customers.
+
+<h3><a name="V3.36_Documentation"></a>Documentation</h3><pre>
+Adds some environment variables to the man page. (gs.1)
+
+</pre><h3><a name="V3.36_Procedures"></a>Procedures</h3><pre>
+
+Adds the psmono device to all 32-bit configurations. (*.mak)
+
+Moves the psmono and 'bit' devices to DEVICE_DEVS12 to avoid exceeding the
+120-character maximum length of the DOS command line. (*.mak)
+
+</pre><h3><a name="V3.36_Drivers"></a>Drivers</h3><pre>
+
+Changes the pgm[raw] and ppm[raw] drivers so they do *not* automatically
+switch to pbm or pgm/ppm respectively if this is possible for the particular
+page being rendered; adds pgnm[raw] and pnm[raw] drivers that *do* do this.
+THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. However, existing programs will
+still work; they just won't produce the smallest and simplest possible
+output. (devs.mak, gdevpbm.c)
+
+</pre><h3><a name="V3.36_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - A multi-level restore didn't free gstates allocated by
+intermediate saves, causing some global VM to be lost until a garbage
+collection. (isave.h, isave.c, zvmem.c)
+
+Speeds up restore by skipping the scan of the character cache if no new
+names have been allocated since the save. (zfont.c)
+
+Extends the client API to allow for popping return values off the operand
+stack. (imain.h, gs.c, gsmain.c)
+
+</pre><h3><a name="V3.36_Library"></a>Library</h3><pre>
+
+Modifies the character oversampling algorithms to help prevent dropouts.
+(gsbitops.c, gschar.c)
+
+</pre>
+
+<h2><a name="Version3.35"></a>Version 3.35 (internal) (5/2/95)</h2>
+
+<p>
+This is another internal "snapshot" version.
+
+<h3><a name="V3.35_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - Some of the file names in the `man' page had gotten out of date.
+(gs.1)
+ - Two references to .PageCount hadn't been changed to PageCount.
+(language.doc, devarch.doc)
+
+</pre><h3><a name="V3.35_Procedures"></a>Procedures</h3><pre>
+
+Puts writeppmfile back in the standard Unix and DV/X configurations, since
+gsftopk uses it. Also puts the PDF reader in all 32-bit configurations.
+(*.mak)
+
+Moves the BMP devices to DEVICE_DEVS11 to avoid exceeding the 120-character
+maximum length of the DOS command line. (bcwin.mak, bcwin32.mak, os2.mak)
+
+</pre><h3><a name="V3.35_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - unix-lpr.sh didn't handle 32-bit devices. (unix-lpr.sh)
+ - unix-lpr.sh still used the name .PageCount rather than PageCount.
+(unix-lpr.sh)
+ - font2c gave an error when trying to write general procedures in
+font dictionaries. (font2c.ps)
+
+Adds a pdf2dsc.ps utility for writing out fake DSC-compliant PostScript code
+to invoke the PDF reader, for the benefit of viewer programs that aren't
+PDF-aware. (unix-end.mak, pdf2dsc.ps)
+
+</pre><h3><a name="V3.35_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The TIFF drivers put out incorrect PageNumber values.
+(gdevtfax.c)
+ - Printer (and file output) devices got closed and reopened
+unnecessarily when changing parameters. (gdevprn.c)
+ - Printer (and file output) devices didn't check for invalid formats
+following a % in OutputFile. (devs.mak, gdevprn.c)
+ - 1-bit memory devices were not considered page devices, unlike all
+other memory devices. (gsdevice.c)
+ - The black-and-white H-P printers didn't close the printer
+properly, causing printing not to happen under MS Windows. (gdevprn.c)
+ - Some compilers didn't like initializing a const char * to NULL.
+(gdevlbp8.c)
+
+Changes the X Windows driver so that if Ghostview specifies a bounding box,
+this also sets ImagingBBox. (gdevxini.c)
+
+At the request of a customer, adds 1-, 4-, 8-, 24-, and 32-bit-deep memory
+devices that store bits in 32-bit units rather than byte units. (gdevmem.h,
+gxdevmem.h, gdevmem.c, gdevm1.c, gdevm2.c, gdevm4.c, gdevm8.c, gdevm16.c,
+gdevm24.c, gdevm32.c)
+
+Adds a new MS Windows printer driver, mswinpr2, that uses a DIB rather than
+a DDB. (gdevwpr2.c)
+
+</pre><h3><a name="V3.35_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - A routine wouldn't compile because of a bug in the SGI C compiler.
+(zcsindex.c)
+ - Some declarations were inconsistent when compiling for segmented
+environments. (gscie.c)
+ - A routine wouldn't compile because of a bug in the VAX C compiler.
+(gscie.c)
+
+Turns on compiler optimization for OS/2; adds PDF support and more devices
+for Win32 and OS/2. (bcwin.mak, bcwin32.mak, os2.mak)
+
+</pre><h3><a name="V3.35_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - Font loading used 'setglobal' without binding it, which caused
+some EPS files to signal errors. (gs_fonts.ps)
+ - A zero-length string with offset = 0 in a binary object sequence
+caused an error. (iscanbin.c)
+
+Adds a LOCALFONTS switch that causes Ghostscript to load Type 1 fonts into
+the current VM, rather than global VM. According to Adobe, this is what
+Adobe printers (but not other interpreters, such as DPS and CPSI) do.
+(gs_init.ps, gs_fonts.ps)
+
+</pre><h3><a name="V3.35_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - The 'note' page size command caused pages to be clipped
+improperly. (gs_statd.ps)
+
+Adds "word" image devices. (gs_init.ps, zdevice.c)
+
+Starts converting the interpreter to use an explicit instance pointer. This
+is very fragmentary so far and not really supported. (main.h, gs.c,
+gsmain.c, iccinit.c)
+
+</pre><h3><a name="V3.35_Library"></a>Library</h3><pre>
+
+Adds "word" image devices. (gsdevice.h, gsdevice.c)
+
+Removes the requirement that ImagingBBox[0] and [1] be non-negative. (The
+Adobe specification requires this, but Ghostscript supports more general
+initial CTMs than the Adobe spec.) (gsdparam.c)
+
+</pre>
+
+<h2><a name="Version3.34"></a>Version 3.34 (internal) (4/18/95)</h2>
+
+<p>
+This is a "snapshot" version made for internal purposes. It was never
+released to anyone.
+
+<h3><a name="V3.34_Documentation"></a>Documentation</h3><pre>
+Updates commprod.doc to be fully consistent with the AGFPL. (commprod.doc)
+
+</pre><h3><a name="V3.34_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - tar_x was out of date. (tar_x)
+ - tar_gs assumed that if any PC executables were present, gs.exe
+would exist. (tar_gs)
+ - jpeg.mak said the current IJG version was 5b, but the makefiles
+actually referred to version 5a. (jpeg.mak)
+ - The build rule for the LIPS III driver was incorrect. (devs.mak)
+ - Some definitions in the makefiles occurred out of order.
+(ansihead.mak, cc-head.mak, gcc-head.mak, unixhead.mak, unixtail.mak)
+ - The build rule for dvx-gcc.mak was incorrect. (unix-end.mak)
+
+</pre><h3><a name="V3.34_Interpreter"></a>Interpreter</h3><pre>
+
+Restructures the CIE caches to move much more of the computation from color
+mapping time to cache loading time. (zcie.c)
+
+</pre><h3><a name="V3.34_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Color conversion of 12-bit images was very slightly inaccurate.
+(gxfrac.h)
+
+Changes the transfer function, black generation, and undercolor removal
+caches so that they sample at 1024 points and don't interpolate, rather than
+sampling at 256 points and interpolating. This significantly improves the
+speed of colored image rendering. ****** LIMITED TO 256 POINTS BECAUSE OF
+O-STACK SIZE LIMIT. ****** (gxfmap.h, gxcmap.c)
+
+Restructures the CIE caches to move much more of the computation from color
+mapping time to cache loading time. (gscie.h, gscie.c)
+
+</pre>
+
+<h2><a name="Version3.33"></a>Version 3.33 (4/13/95)</h2>
+
+<p>
+A few more last-minute bug fixes. This is, finally, the first public
+release since 3.12.
+
+<h3><a name="V3.33_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - There was a reference to "VAX with OSF/1", which doesn't exist,
+and an incorrect reference to VAX with Ultrix. (make.doc)
+ - The Unix makefiles incorrectly stated that gsdatadir was only
+relevant to `make install'. (ansihead.mak, cc-head.mak, dgc-head.mak,
+gcc-head.mak)
+ - Notes that DV/X users should use the zip version of the JPEG
+library. (jpeg.mak)
+
+</pre><h3><a name="V3.33_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - A command line had gotten too long for the MS-DOS shell.
+(gs.mak)
+ - The VMS DEC C script didn't explicitly select DEC C.
+(vms-decc.mak)
+ - The VMS MODULES.LIS omitted SPDIFF and ZFPDIFF. (modules.lis)
+ - The VMS script had an incorrect entry. (vms.mak)
+ - The `if' fix in 3.31 broke some Unix systems with different
+implementations of sh. (unix-end.mak)
+ - The makefile definition of gscspace_h was out of order. (gs.mak)
+ - An extra ; got written in gconfig_.h on DV/X platforms.
+(dvx-tail.mak)
+ - '.' was incorrectly prepended to the library search list on DV/X
+platforms. (dgc-head.mak)
+ - The build rules for unix*.mak didn't work on DV/X. (unix-end.mak)
+
+Adds a description of the -c quit switch to the help message. (gs.c)
+
+For the DV/X platform, changes /usr/include to /djgpp/include as the place
+to look for header files. I'm not sure this is always correct.
+(dvx-tail.mak)
+
+</pre><h3><a name="V3.33_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - ps2ascii would cause an error if given a font that didn't have an
+'X' character. (ps2ascii.ps)
+ - ps2ascii didn't intercept the Level 2 string display operators.
+(ps2ascii.ps)
+
+</pre><h3><a name="V3.33_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The Stylus Color driver had an incorrect type name. (gdevstc.c)
+
+</pre><h3><a name="V3.33_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - -dBitsPerPixel= didn't work properly for MS Windows or OS/2 PM.
+(gdevmswn.c, gdevpm.c)
+ - The Win32 platform didn't compile properly. (memory_.h)
+
+</pre><h3><a name="V3.33_Fonts"></a>Fonts</h3><pre>
+
+Improves the font substitution algorithm to take the face name into account
+in more cases. (gs_fonts.ps)
+
+</pre><h3><a name="V3.33_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Unrotated black-and-white bitmaps with an inverted device X axis
+were displaced in X. (gsimage1.c)
+
+</pre>
+
+<h2><a name="Version3.32"></a>Version 3.32 (4/7/95)</h2>
+
+<p>
+More bug fixes. This is still not a public release.
+
+<h3><a name="V3.32_Documentation"></a>Documentation</h3><pre>
+Further clarifies the "two-phase commit" algorithm for device put_params
+procedures. (drivers.doc, gsparam.h)
+
+Adds a note about a compiler bug under Ultrix 4.4. (make.doc)
+
+</pre><h3><a name="V3.32_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - Some installation scripts could fail because some implementations
+of sh take the status of an `if' condition as the status of the `if'
+command. (unix-end.mak)
+
+Adds "maintainer-clean" as a synonym for "real-clean". (gs.mak)
+
+Adds a -dORIENT1 switch that defines orientation = 1 as portrait for
+setpage[params]. (use.doc, gs_init.ps, gs_lev2.ps, gs_statd.ps)
+
+</pre><h3><a name="V3.32_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - ps2ascii didn't redirect %stdout completely. (ps2ascii.ps)
+ - ps2ascii didn't preserve the local/global VM mode. (ps2ascii.ps)
+ - ps2ascii didn't handle fonts with an all-zero or missing bounding
+box correctly. (ps2ascii.ps)
+ - viewpbm didn't scale the image properly. (viewpbm.ps)
+
+</pre><h3><a name="V3.32_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The CGM driver wrote out an incorrect color precision value.
+(gdevcgm.c)
+ - The SGI bitmap driver was named "sgi" rather than "sgirgb".
+(gdevsgi.c)
+ - The PCX driver didn't round up an odd line length for gray-scale
+output. (gdevpcx.c)
+ - The PCX driver produced incorrect output for gray-scale or 4- or
+8-bit color. (gdevpcx.c)
+
+</pre><h3><a name="V3.32_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The VMS MODULES.LIS file had gotten out of sync with the Unix
+makefiles (again). (modules.lis)
+
+</pre><h3><a name="V3.32_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Some compilers won't accept '\l', even in the false arm of a
+preprocessor conditional. (scanchar.h)
+ - A procedure was declared with an incorrect argument type.
+(zcsindex.c)
+ - The scaled font cache didn't copy XUIDs properly. (bfont.h,
+zfont.c, zfont2.c)
+ - status could return true even if the file was closed. (zfile.c)
+
+</pre><h3><a name="V3.32_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The LZW filters were factored improperly. (modules.lis, gs.mak,
+vms.mak, slzwx.h, slzwc.c, slzwd.c)
+
+Changes the DCTDecode filter for compatibility with Adobe implementations:
+ - Ignore bytes preceding the 0xff that marks the beginning of the
+JPEG data. (sdctd.c)
+ - Set MAX_BLOCKS_IN_MCU to 64. (jpeg.mak, gsjpglib.h)
+
+</pre><h3><a name="V3.32_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The "two-phase commit" for device parameters wasn't fully
+implemented. (gsiodev.c)
+ - Asking for a device color map before the device was opened could
+cause a crash. (gsdparam.c)
+ - The scaled font cache didn't copy XUIDs properly. (gxfont.h,
+gsfont.c)
+ - 90 or 270 degree rotated black-and-white bitmaps (including
+bitmapped fonts such as downloaded TrueType fonts) with an inverted device Y
+axis were displaced in Y. (gsimage1.c)
+ - On high-resolution devices, parts of regions filled with halftones
+could fail to be painted. (gxclist.c)
+
+</pre>
+
+<h2><a name="Version3.31"></a>Version 3.31 (4/2/95)</h2>
+
+<p>
+A few final bug fixes for the release. Includes significant speed
+improvements for CIE color, and a first draft of a low-level CGM driver.
+
+<h3><a name="V3.31_Documentation"></a>Documentation</h3><pre>
+Notes that the BJC600 driver also works for the BJC4000. (devs.mak)
+
+</pre><h3><a name="V3.31_Procedures"></a>Procedures</h3><pre>
+
+At the suggestion of a user, changes the default protections for installed
+files on Unix and DV/X systems from 775/664 to 755/644. (*head.mak)
+
+At the suggestion of a user, adds a -dNOCIE switch to substitute DeviceGray
+and DeviceRGB color spaces for CIEBasedA and CIEBasedABC spaces
+respectively. (gs_init.ps, gs_lev2.ps)
+
+</pre><h3><a name="V3.31_Utilities"></a>Utilities</h3><pre>
+
+Changes gslp and its relatives to use ISOLatin1Encoding for output, and to
+send almost all printout to stderr rather than stdout (for use as a filter
+under Unix). (gslp.ps)
+
+</pre><h3><a name="V3.31_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The fax/TIFF driver no longer exported gdev_fax_print_page, which
+the DigiFax driver needs. (gdevtfax.c)
+ - The color DeskJet drivers gave an error for BitsPerPixel=3.
+(gdevcdj.c)
+ - The "Windows printer" driver was setting its margins in points
+rather than inches. (gdevwprn.c)
+ - The BJ10 and BJ200 drivers calculated vertical skip distances
+wrong. (gdevbj10.c)
+ - The BJ10 and BJ200 drivers output two garbage bytes following the
+initialization string. (gdevbj10.c)
+
+Adds a preliminary driver that produces low-level CGM output. (gdevcgml.h,
+gdevcgmx.h, gdevcgm.c, gdevcgml.c)
+
+</pre><h3><a name="V3.31_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The VMS files had gotten out of sync with the other makefiles
+(again). (modules.lis, vms.mak)
+ - The MS Windows and OS/2-PM drivers hadn't been updated to handle
+BitsPerPixel as a standard parameter. (gdevmswn.c, gdevpm.c)
+
+Removes the TIFF drivers from the Windows platform, and restores the BMP
+drivers. (bcwin.mak)
+
+</pre><h3><a name="V3.31_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - The CIE color mapping cache could produce anomalous results
+for the default (all zero values) color if some of the mapping
+functions were non-linear. (zcie.c)
+ - MultiMaster font substitution got confused if substituted
+fonts had their FontName changed. (gs_fonts.ps)
+ - A procedure was declared as private inconsistently. (zdevcal.c)
+ - Some pointer relocation procedures didn't work correctly on
+systems with sizeof(T *) &gt; sizeof(int). (istack.c)
+ - The freelist vector wasn't large enough to handle graphics state
+objects on 64-bit systems, leading to severe memory sandbars. (iastate.h)
+ - The debugging messages from the allocator had gotten inconsistent
+and hard to use. (ialloc.c)
+ - Mixing save/restore with allocation could cause the GC never to
+get run. (isave.c)
+
+Speeds up the mapping of CIE colors. (zcie.c)
+
+Adds a .namestring operator for getting the string of a name without having
+to copy it. (zstring.c)
+
+</pre><h3><a name="V3.31_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The IJG code needed a couple more flags set for IJG v6.
+(gsjmorec.h)
+ - Some pointer relocation procedures didn't work correctly on
+systems with sizeof(T *) &gt; sizeof(int). (stream.c)
+
+</pre><h3><a name="V3.31_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The end-test for the fast case of monobit images was wrong,
+leading to out-of-range memory accesses. (gsimage1.c)
+ - Monobit images rotated by 270 degrees displayed incorrectly.
+(gsimage1.c)
+ - If a Type 1 font used hint replacement, some parts of the outline
+before the hint replacement ignored the old hints. (gstype1.c)
+ - Some compilers didn't accept a variable name that was the same as
+a macro with parameters. (gxht.c)
+ - A procedure was declared as private inconsistently. (gdevm1.c)
+ - Some pointer relocation procedures didn't work correctly on
+systems with sizeof(T *) &gt; sizeof(int). (gdevmem.c, gsstate.c)
+ - The test on FORCE_HINTS_TO_BIG_PIXELS was backwards. This bug was
+supposed to have been fixed in 3.30, but somehow the fix got lost.
+(gstype1.c)
+ - 90 degree rotated monobit images could drop some scan lines.
+(gsimage*.c)
+
+Speeds up the mapping of CIE colors. (gscie.h, gxcmap.h, gscie.c, gxcmap.c)
+
+Speeds up color images (non-interpolated, 1-8 bits per component) by adding
+a cache for mapped color values. (gximage.h, gsimage.c, gsimage1.c,
+gsimage2.c)
+
+Shrinks the band list file slightly by using only as many bytes as necessary
+for writing out colors, rather than always using 4 bytes. (gxclist.c,
+gxclread.c)
+
+</pre>
+
+<h2><a name="Version3.30"></a>Version 3.30 (beta) (3/21/95)</h2>
+
+<p>
+More bug fixes. The garbage collector and PDF interpreter finally appear to
+work reliably.
+
+<h3><a name="V3.30_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - language.doc had gotten out of date. (language.doc)
+
+</pre><h3><a name="V3.30_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - Changes in the handling of %stdout had broken ps2ascii.
+(gs_dps1.ps, ps2ascii.ps)
+
+Improves ps2ascii to skip empty strings and not output redundant font
+changes. (ps2ascii.ps)
+
+</pre><h3><a name="V3.30_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The fax and TIFF drivers didn't free all their working storage.
+(This bug was fixed in 3.27, and the fix somehow got lost.) (gdevtfax.c)
+
+Adds new drivers:
+ - sgirgb, to produce SGI RGB raster files. (gdevsgi.c)
+ - tiffcrle, to produce output in TIFF "CCITT 1-dimensional Huffman
+RLE" format (Group 3 fax with no EOLs). (gdevtfax.c)
+ - tifflzw, to produce output in TIFF LZW format (using the existing
+CCITTFaxEncode filter code). (gdevtfax.c)
+ - tiffpack, to produce output in TIFF PackBits format. (gdevtfax.c)
+
+</pre><h3><a name="V3.30_Interpreter_PostScript"></a>Interpreter (PostScript)</h3><pre>
+
+Fixes bugs:
+ - If the current screen was set with a halftone, setcolorscreen
+wouldn't accept what currentcolorscreen returned. (gs_dps1.ps)
+ - debug_print_full_ref didn't print t_oparray objects correctly.
+(idebug.c)
+ - The internal data for a font could be allocated in a different VM
+space from the font dictionary, causing dangling pointers. (zfont2.c)
+ - definefont became confused if a program failed to delete the FID
+from a re-encoded font. (This is questionable PostScript, but dvips does
+it.) (zfont2.c)
+ - If a BuildChar procedure did a save before the setcachedevice and
+a restore afterwards, the memory manager would attempt to free the cache
+device after it had already been freed by the restore, leading to damaged
+freelists. (gschar.c)
+ - setresolution (in statusdict) was ignored. (gs_lev2.ps,
+gs_statd.ps)
+ - If a string containing a string containing a \ was passed to the
+token operator, the \ was not recognized properly in a Level 2 environment.
+(iscan.c)
+ - A couple of default dictionary sizes had become too small.
+(iinit.c)
+
+Makes DOS EOF (control-Z, 0x1a) a self-delimiting token, like left bracket.
+THIS IS A NON-BACKWARD-COMPATIBLE CHANGE, but it should not have any adverse
+effects. (gs_init.ps, iscan.c, iscantab.c)
+
+Distinguishes arch_small_memory from arch_ints_are_short, and adds a new
+-Z. switch to force small-memory table sizes regardless of actual memory
+size. (dstack.h, idict.c, zpcolor.c, zvmem2.c)
+
+</pre><h3><a name="V3.30_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - A page with no Contents caused an error. (pdf_main.ps)
+ - Executing a Form resource caused an error. (pdf_draw.ps)
+ - Outlines with open entries caused an error. (pdf_main.ps)
+ - Embedded Type 3 fonts caused an error. (pdf_draw.ps, pdf_font.ps)
+ - The Widths array of fonts was ignored. (pdf_font.ps)
+
+</pre><h3><a name="V3.30_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Freeing an entry in the pattern cache didn't clear the pointers to
+the raster data, producing a dangling reference that confused the garbage
+collector. (gxpcmap.c)
+ - The test on FORCE_HINTS_TO_BIG_PIXELS was backwards. (gstype1.c)
+ - The pattern cache bookkeeping was incorrect. (gxpcmap.c)
+ - Depending on the order in which pointers were relocated, the
+garbage collector could incorrectly relocate pointers from the character
+cache. (gxfcache.h, gsfont.c, gxccache.c, gxccman.c)
+
+Changes the fast case of black-and-white images so it aligns scaled images
+with the device coordinate system, to improve performance. (gsimage1.c)
+
+Extends the coordinate transformation routines to handle absurdly large
+translation values in the CTM as long as the final device device coordinates
+are within fixed-point range. (gxmatrix.h, gxpath.h, gschar.c, gscoord.c,
+gsmatrix.c, gxhint2.c, gxpath2.c)
+
+Distinguishes arch_small_memory from arch_ints_are_short, and adds a new
+-Z. switch to force small-memory table sizes regardless of actual memory
+size. (gdevprn.h, gxpcolor.h, gzht.h, std.h, gsfont.c, gsht1.c, gspaint.c,
+gsstate.c, gxcht.c, gxht.c, gxpcmap.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version3.29"></a>Version 3.29 (internal) (3/8/95)</h2>
+
+<p>
+Another bug-fix release. This release processes all but 7 of the 500+ files
+on the Adobe Acrobat Sampler CD-ROM without giving an error. The garbage
+collector finally appears to be stable. This version was created for a
+customer; it was not released to the general public or even to the beta test
+list.
+
+<h3><a name="V3.29_Documentation"></a>Documentation</h3><pre>
+Documents the possible need to set LD_RUN_PATH on SVR4 platforms.
+(make.doc)
+
+Expands the description of the device life cycle, and of the constraints on
+put_params procedures. (drivers.doc)
+
+Adds an explicit copyright notice to the Aladdin Ghostscript Free Public
+License. (PUBLIC)
+
+Clarifies that the Win32s documentation also applies to Windows NT.
+(make.doc)
+
+</pre><h3><a name="V3.29_Procedures"></a>Procedures</h3><pre>
+
+Removes the obsolete writeppmfile operator from the standard configurations.
+(gs.mak)
+
+Changes the Watcom makefiles to work properly with Watcom C/C++ 10.0.
+(make.doc, msc.mak, watc.mak, watcwin.mak, wccommon.mak)
+
+</pre><h3><a name="V3.29_Utilities"></a>Utilities</h3><pre>
+
+Adds a wftopfa utility for converting the Wadalab fonts to usable Type 0 and
+Type 1 form. (wftopfa)
+
+</pre><h3><a name="V3.29_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - Entries added automatically by definefont (FontInfo, ExactSize)
+could cause a font dictionary to become full. (gs_fonts.ps, gs_type1.ps)
+ - wrfont.ps couldn't deal with very long CharStrings. (wrfont.ps)
+
+Makes the name of the Fontmap file an easily editable parameter.
+(gs_fonts.ps)
+
+Adds a utility for converting the Wadalab font to usable Type 0 and Type 1
+form. (wrfont.ps, wftopfa.ps)
+
+</pre><h3><a name="V3.29_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The top margin for printer (and fax) devices was computed
+incorrectly, using the X resolution rather than the Y resolution.
+(gdevprn.h)
+ - Changing the page size or resolution of a printer device closed
+and reopened the device unnecessarily. (gdevprn.c)
+ - Changing the page size of the X11 device didn't change the initial
+matrix, so (0,0) didn't wind up in the lower left corner. (gdevx.c)
+ - The bit devices didn't allow changing the number of bits per
+pixel. (gdevbit.c)
+
+Adds a settable .IsPageDevice boolean device parameter to the X Windows
+driver. The default value is true. (gdevx.h, gdevx.c)
+
+Changes the PPM driver so that it chooses between PBM/PGM/PPM on a
+page-by-page basis, rather retaining the most general format ever required
+by any page. (gdevpbm.c)
+
+</pre><h3><a name="V3.29_Interpreter_PostScript"></a>Interpreter (PostScript)</h3><pre>
+
+Fixes bugs:
+ - The current page device could be null, rather than an empty
+dictionary. (igstate.h, zchar.c, zdevice.c, zdevice2.c, zgstate.c)
+ - The scanner didn't signal an error for names or strings that were
+too long. (iscan.c)
+ - A missing header file upset the VAX compilers. (ztype.c)
+ - Some places expecting dictionary operands didn't check the type,
+because they incorrectly assumed that the dict_check_read/write macro did
+this. (idict.h, zdevice2.c, zht2.c, zmisc2.c)
+ - The definition of quit in systemdict wasn't disabled within
+encapsulated jobs. (gs_lev2.ps)
+ - resetfile gave an error if the file was closed, rather than doing
+nothing. (zfileio.c)
+ - The scanner attempted to free an uninitialized pointer if it
+reached EOF after a / or //. (iscan.c)
+ - A restore in a different file than the corresponding save caused
+an invalidrestore error. (gs_init.ps)
+ - The default value of EndOfData in RunLengthDecode streams was set
+to false. (zfilter.c)
+ - .registerencoding didn't invoke the save machinery correctly,
+leading to GC problems. (zfont2.c)
+ - The facility for overriding .printerror didn't work correctly.
+(gs_init.ps)
+ - gs_run_file_open wasn't public. (gsmain.c)
+ - The interpreter returned e_undefined for undefined error names,
+rather than the error code. (interp.c)
+ - Allocation in system memory (specifically, adding a block to a
+stack) couldn't trigger automatic garbage collection. (interp.c, igc.c,
+zvmem2.c)
+ - A restore in a different invocation of gs_run_string than the
+corresponding save would stop reading the string. (files.h, gsmain.c,
+iccinit.c, zfile.c)
+ - The Type 1 rasterizer state included a pointer into the middle of
+an object, confusing the garbage collector. (zchar1.c, zfont1.c)
+ - When the garbage collector deleted a name, it didn't zero out the
+string pointer. (iname.c)
+ - On platforms where obj_align_mod &gt; 4, the memory manager could
+access 1 beyond the end of its freelists. (iastate.h)
+ - makefont and scalefont didn't check the type of their font operand
+soon enough. (zfont.c)
+ - restore didn't finalize the objects it freed. (isave.c)
+ - restore didn't free system VM. (isave.c)
+ - Freeing a ref array that occupied an entire chunk didn't free the
+chunk. (ialloc.c)
+
+Adds a .runexec operator which implements the 'close if error' function of
+run. (zfile.c, zfileio.c)
+
+Moves the obsolete writeppmfile operator into a separate file. (zfileio.c,
+zwppm.c)
+
+Makes the statistics returned by the memory manager more accurate.
+(ialloc.c, zvmem.c)
+
+Adds a (read-only) %Calendar% IODevice. (zdevcal.c)
+
+Adds a "hook" in the character operators to allow external code to
+intervene; this is needed for a customer. (ichar.h, zchar.c, zchar2.c)
+
+Makes control-D (0x04) a self-delimiting token, like left bracket. THIS IS
+A NON-BACKWARD-COMPATIBLE CHANGE, but it should not have any adverse
+effects. (scanchar.h, iscan.c, iscantab.c)
+
+Changes the error stack printout so that it puts line breaks between items
+iff the items are being printed with ==. (gs_init.ps)
+
+Uses finalization to close streams being freed. (igc.c, zfile.c, ziodev.c)
+
+</pre><h3><a name="V3.29_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - Embedded Type 1 fonts that invoked save and restore while being
+read caused an error. (pdf_font.ps)
+ - Large files that referenced a non-alphabetic font for the first
+time late in the file could cause an error. (pdf_main.ps)
+
+</pre><h3><a name="V3.29_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - SubFileDecode streams didn't copy partial matches of the EOD
+string into their output. (sfilter1.c)
+
+Makes switching between read and write modes a stream procedure. (stream.h,
+sfile.c, sfileno.c, stream.c, zfileio.c)
+
+Makes file streams close themselves when finalized. (We can't do this for
+other streams, because finalization procedures aren't allowed to free
+storage explicitly.) (stream.h, sfile.c, sfileno.c, stream.c)
+
+</pre><h3><a name="V3.29_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The obsolete files gcdefs.h and gsfile.c were still included in
+the fileset.
+ - A number of places didn't deal with null patterns properly (p_tile
+== 0). (gxdcolor.h, gspcolor.c, gxpcmap.c)
+ - The pattern tiling algorithm was numerically unstable, especially
+if the X/YStep vectors were close to the axes. (gxcolor2.h, gspcolor.c,
+gxpcmap.c)
+ - setdeviceparams checked the values of read-only byte array
+parameters incorrectly. (gsdparam.c)
+ - The statistics macros in gxfill.c didn't use DO_NOTHING when
+disabled. (gxfill.c)
+ - Changing the orientation of a device closed and reopened the
+device unnecessarily. (gsdparam.c)
+ - ioerrors occurring when writing command lists weren't reported
+properly. (gxclist.h, gxclist.c)
+ - Errors from device procedures weren't always propagated up to
+clients. (gsimage1.c, gsimage3.c, gxclip2.c, gxclist.c)
+ - Overflowing the fixed-point translation values in the CTM caused a
+floating point exception rather than a limitcheck. (gxmatrix.h, gscoord.c)
+ - charpath set the current point correctly, but didn't append a
+moveto element to the path. (This mostly affected Mathematica output.)
+(gzpath.h)
+ - Image devices mapped colors incorrectly. (gdevmem.c, gdevm16.c)
+ - On devices with color capability but fewer than 4 bits per pixel,
+color halftones didn't work (and could cause an arithmetic exception).
+(gxdither.c)
+ - Black-on-white memory devices didn't map colors properly.
+(gdevprn.h, gxdevice.h, gxdevmem.h, gdevmem.c, gdevm1.c, gsdevice.c)
+ - Memory devices with a non-zero origin in their initial matrix
+clipped the image improperly. (gsdevice.c)
+ - The Type 1 rasterizer state included a pointer into the middle of
+an object, confusing the garbage collector. (gstype1.h, gxfont1.h,
+gxtype1.h, gstype1.c, gxhint2.c)
+ - The band rasterizer could produce garbled output for images
+(including characters) on 64-bit architectures. (gxclread.c)
+ - Bounding boxes (for pathbbox and setbbox) could be slightly
+inaccurate. (gsmatrix.c)
+ - On 64-bit architectures, halftone tiles less than 16 bits wide
+were handled incorrectly. (gxclist.c)
+
+Adds an .IsPageDevice boolean device parameter (normally read-only).
+(gsdparam.c)
+
+Removes the library code for implementing the obsolete writeppmfile
+operator. (gswppm.c)
+
+Makes the default matrix (for initmatrix and defaultmatrix) a settable
+parameter in the graphics state. (gscoord.h, gzstate.h, gscoord.c,
+gsdevice.c, gsdparam.c)
+
+Makes the statistics returned by the memory manager more accurate.
+(gsmemory.h)
+
+Adds a compile-time flag to choose whether or not to force Type 1 hints to
+"big pixel" boundaries when oversampling. (gstype1.c)
+
+Changes the .PageCount device parameter back to PageCount, because the
+change broke some scripts. (gsdparam.c)
+
+Adds optimization for 90 degree rotated images with pure colors.
+(gximage.h, gsimage.c, gsimage1.c)
+
+Changes the band rasterizer so that replicated halftone tiles are written on
+the band list in unreplicated form. (gsbitops.h, gxcldev.h, gsbitops.c,
+gxclist.c, gxclread.c, gxht.c)
+
+Changes the .HWBitsPerPixel device parameter to BitsPerPixel. (drivers.doc,
+language.doc, gdevcdj.c, gdevstc.c, gsdparam.c)
+
+</pre>
+
+<h2><a name="Version3.28"></a>Version 3.28 (beta) (2/13/95)</h2>
+
+<p>
+Another bug-fix beta release. The number of bugs being fixed in each of
+these sub-releases does exceed the number of new bugs introduced, but the
+latter number is discouragingly high.
+
+<h3><a name="V3.28_Documentation"></a>Documentation</h3><pre>
+Adds some information about handling VMS file attributes for files
+transferred by FTP. (use.doc)
+
+</pre><h3><a name="V3.28_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - unix-gcc.mak said the static linkage switch for SunOS was -Bstatic
+rather than -static. (unix-gcc.mak)
+ - Some dependency lists in gs.mak were out of date. (gs.mak)
+
+</pre><h3><a name="V3.28_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - markhint.ps didn't check for protected fonts. (markhint.ps)
+
+</pre><h3><a name="V3.28_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The cdj driver had a byte/char agreement problem. (gdevcdj.c)
+ - The cdj driver attempted to initialize a dynamic array.
+(gdevcdj.c)
+
+Removes the setting of InputAttributes and OutputAttributes from the H-P
+drivers, since this causes more problems than it solves. (gdevdjet.c)
+
+</pre><h3><a name="V3.28_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - makeoperator assigned incorrect attributes to operators. (bug
+introduced in 3.27) (opdef.h, iinit.c, iutil.c, zmisc.c)
+
+</pre><h3><a name="V3.28_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - gs_makeimagedevice didn't set the caller's pointer to the newly
+created device. (bug introduced in 3.27) (gsdevice.c)
+ - There were still some mismatches between char * and byte * values.
+(gsdparam.c)
+ - The halftone replication algorithm could produce inappropriately
+large replicated masks. (gxht.c)
+ - stroke usually did the wrong thing for degenerate (single-point)
+subpaths. (gxstroke.c)
+
+</pre>
+
+<h2><a name="Version3.27"></a>Version 3.27 (beta)(withdrawn) (2/8/95)</h2>
+
+<p>
+Yet another bug-fix beta release. This release had so many serious problems
+(the most serious being at least one changed file that the release tool
+failed to include in the fileset) that it was withdrawn less than a day
+after it was issued.
+
+<h3><a name="V3.27_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - The NEWS for 3.26 didn't mention the fact that the stdxxx stream
+interface used by MS Windows, OS/2, and Macintosh implementations had
+changed. (NEWS)
+ - The file public.doc wasn't distributed with the previous fileset.
+
+Brings the NeXTSTEP documentation up to date for NeXTSTEP releases 3.2 and
+subsequent. (make.doc)
+
+</pre><h3><a name="V3.27_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - Some dependency lists in gs.mak were out of date. (gs.mak)
+ - A 'fi;' was missing in the Unix install script. (unix-end.mak)
+ - There was no VMS build script for the PDF options. (vms.mak)
+ - The VMS script used CC_QUALI instead of CC_QUAL in several places.
+(vms.mak)
+
+</pre><h3><a name="V3.27_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - ps2epsi's usage prompt referred to "pstoepsi". (ps2epsi)
+ - ps2epsi set PATH and LOCALPATH unilaterally. (ps2epsi)
+
+Comments out the sample usage line at the end of viewjpeg.ps. (viewjpeg.ps)
+
+</pre><h3><a name="V3.27_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The fax and tiff drivers didn't free all of their working storage.
+(gdevtfax.c)
+
+Adds user-contributed drivers for the BJC 600 and ESC/P printers.
+(devs.mak, gdevcdj.c)
+
+</pre><h3><a name="V3.27_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - Some necessary casts of string parameters to (const byte *) were
+omitted. (gp_mswin.c, gp_os2.c)
+
+Adds the psmono and bit* drivers, and removes the p*m drivers, in the OS/2,
+32-bit MS-DOS, and 32-bit Windows configurations. (bcwin32.mak, os2.mak,
+watc.mak)
+
+</pre><h3><a name="V3.27_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - The Fontmap for Ultrix had somehow become slightly incorrect.
+(Fontmap.Ult)
+
+Removes the font file names from the dependency lists in cfonts.mak. This
+makes cfonts.mak readily usable with any set of fonts, but it also means
+that it will always run font2c, rather than being able to avoid this if the
+.c file is up to date. (cfonts.mak)
+
+</pre><h3><a name="V3.27_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Some operators could fail if the stdxxx streams weren't currently
+open. (files.h, zfileio.c, ziodev.c)
+ - setpagedevice didn't handle unrecognized keys properly.
+(gs_setpd.ps)
+ - The value returned for the HWColorMap device parameter was
+allocated incorrectly, confusing the garbage collector. (iparam.c)
+ - Typing ahead at the &gt;&gt;showpage&lt;&lt; prompt no longer caused all
+further pages to be processed without stopping. (gs_init.ps)
+ - Setting DEVICEWIDTHPOINTS or DEVICEHEIGHTPOINTS on the command
+line caused a typecheck. (gs_init.ps)
+ - The garbage collector didn't handle halftone threshold arrays
+properly. (zht2.c)
+ - setdefaulttimeouts caused an error on Level 2 systems.
+(gs_lev2.ps)
+ - cvi and cvr weren't equivalent to token followed by a type check.
+(iscan.h, iscannum.h, iscan.c, iscannum.c, ztoken.c, ztype.c)
+ - In Level 2 systems, image and colorimage didn't allow 12 bits per
+sample. (zpaint.c)
+ - If debugging was enabled, the garbage collector printed spurious
+error messages about the allocator objects not being in a chunk. (ialloc.c)
+ - restore didn't reset the count of operator procedures, so the
+operator procedure table could fill up. Fixing this required splitting the
+op_array_table into a global table and a local table. (opdef.h, iinit.c,
+iutil.c, zmisc.c)
+ - .forgetsave could leave a dangling pointer in the memory manager,
+causing an access error. (ialloc.c, isave.c)
+ - Freed objects weren't always marked as freed, which could confuse
+the memory validator. (ialloc.c)
+ - .forgetsave didn't mark inner chunk headers as free, leading to
+access errors. (isave.c)
+
+Changes the representation of operator procedures so that they point
+directly to their definition in the op_array_table. (iref.h, opdef.h,
+idebug.c, igc.c, igcref.c, interp.c, zmisc.c)
+
+Removes .makeglobaloperator. (zmisc.c)
+
+Adds patches to discard some common garbage produced by H-P-oriented
+applications and drivers. (gs_init.ps)
+
+Changes the &gt;&gt;showpage&lt;&lt; prompt so that if the input reaches EOF, the
+interpreter still stops after the next &gt;&gt;showpage&lt;&lt;, rather than processing
+all subsequent pages. This is a consequence of the bug fix that
+automatically reopens the stdxxx files.
+
+Adds an optional dictionary parameter for the RunLengthEncode/Decode
+filters, to allow specifying EndOfData. The default is true. (zfilter.c)
+
+Adds ByteTranslateEncode/Decode filters. (zfilter2.c)
+
+</pre><h3><a name="V3.27_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The K &gt; 0 option of the CCITTFaxDecode filter switched back to 2-D
+encoding if an output buffer boundary fell in the middle of a 1-D line, and
+signalled an error if an input buffer boundary fell in the middle of an EOL.
+(scfd.c)
+
+Adds an EndOfData flag to the RunLengthEncode/Decode filters. If true, RLE
+generates 128 as EOD, and RLD recognizes it; if false, RLE does not mark
+EOD, and RLD ignores 128. (srlx.h, gxclist.c, gxclread.c, sfilter1.c)
+
+Adds ByteTranslateEncode/Decode streams. (sbtx.h, sfilter2.c)
+
+</pre><h3><a name="V3.27_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - There were some mismatches between char * and byte * values.
+(gsdparam.c)
+ - Failure to round a scaling coordinate caused one-for-one
+black-and-white images to render slower than they should. (gsimage.c)
+ - Setting PageSize without setting HWResolution could cause an
+invalid memory access. (gsdparam.c)
+ - The garbage collector didn't handle halftone threshold arrays
+properly. (gxht.h, gsht.c, gsht1.c)
+
+</pre>
+
+<h2><a name="Version3.26"></a>Version 3.26 (beta) (2/1/95)</h2>
+
+<p>
+Yet another bug-fix beta release, still not ready for public release.
+
+<h3><a name="V3.26_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - The description of device properties had gotten out of sync with
+the code. (language.doc)
+
+Splits off documentation specific to the Aladdin (non-GNU) release into a
+separate file. (readme, public.doc, unix-end.mak)
+
+Adds a pointer to a collection of other free fonts (including some Cyrillic
+ones) available on the net. (public.doc)
+
+</pre><h3><a name="V3.26_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - On VMS systems with both VAX C and DEC C installed, the build script
+used VAX C rather than DEC C. (vms.mak)
+ - zfdecode.c didn't have a build rule. (gs.mak)
+ - Several macros in the makefile were used before they were defined.
+(gs.mak)
+ - Several macros in the makefile were used without being defined.
+(gs.mak)
+
+Replaces the gssetdev, gssetmod, and gsaddmod scripts with more variants of
+echogs. (echogs.c, gs.mak)
+
+</pre><h3><a name="V3.26_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - The ps2ascii shell script passed a -f flag to the shell, which not
+all shells recognize. (ps2ascii)
+
+</pre><h3><a name="V3.26_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - Due to a typo in an initialization string, the H-P printers didn't
+reset the top margin to zero. (gdevdjet.c)
+
+Adds InputAttributes and OutputAttributes entries to the H-P drivers. (This
+should probably be generic to all printers.) (gdevdjet.c)
+
+Replaces the contributed Epson Stylus Color driver with a newer version.
+(devices.doc, gdevstc.c)
+
+</pre><h3><a name="V3.26_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - DEC C complained about 'abs' and 'exit' not being declared. (x_.h)
+ - gp_mswin.c and gp_os2.c wouldn't compile. (gp_mswin.c, gp_os2.c,
+ziodev.c)
+
+</pre><h3><a name="V3.26_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - The default CIE rendering dictionary gave everything a magenta tint.
+(gs_lev2.ps)
+ - Changing HWResolution and PageSize in the same call of
+setpagedevice produced an incorrect HWSize. (gsdparam.c)
+ - .putdeviceparams didn't accept all the keys that .getdeviceparams
+returned. (gsdparam.c)
+ - The default handler for interrupt and timeout errors didn't push a
+current object (command) on the stack. (gs_init.ps)
+ - The garbage collector didn't handle strings larger than 64K
+properly. (iastate.h, ialloc.c, igcstr.c)
+
+Adds media matching and Policy consultation to the implementation of
+setpagedevice. (gs_setpd.ps)
+
+Adds a MaxGlobalVM system parameter. (zmisc2.c)
+
+</pre><h3><a name="V3.26_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The CCITTFaxEncode filter could access a byte beyond the end of
+the allocated area. (scfe.c)
+ - The CCITTFaxDecode filter could get an ioerror if a buffer
+boundary fell in exactly the wrong place. (scfd.c)
+
+</pre><h3><a name="V3.26_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The garbage collector didn't trace colored halftones properly.
+(gzht.h)
+ - The garbage collector didn't relocate the bitmap pointers in
+halftone caches properly. (gzht.h, gxht.c)
+
+Adds the ability to transmit dictionaries through the param_list mechanism
+(specifically, as device parameters). This change is
+non-backward-compatible only for implementors of parameter lists, which only
+exist within the Ghostscript core. (gsparam.h, iparam.h, iparam.c)
+
+Removes the InitialMatrix device property. (gsdparam.c)
+
+</pre>
+
+<h2><a name="Version3.25"></a>Version 3.25 (beta) (1/24/95)</h2>
+
+<p>
+Yet another bug-fix beta release. There are still at least half a dozen
+significant known bugs to be fixed before a public release.
+
+<h3><a name="V3.25_Documentation"></a>Documentation</h3><pre>
+Notes that on Unix systems, one should not edit 'makefile', but should edit
+the individual subfile and run tar_cat. THIS IS A NON-BACKWARD-COMPATIBLE
+CHANGE. (make.doc)
+
+Adds information on the Macintosh implementation. (readme)
+
+</pre><h3><a name="V3.25_Procedures"></a>Procedures</h3><pre>
+Fixes bugs:
+ - make clean failed on Unix systems where rm -f requires at least one
+file name. (gs.mak)
+ - math_.h was omitted from many dependency lists. (gs.mak)
+
+</pre><h3><a name="V3.25_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The X Windows and MS Windows draw-line routines couldn't possibly
+produce sufficiently correct output (since the interface only provides integer
+coordinates). (gdevx.c, gdevwddb.c)
+
+In response to patent-related actions by Unisys and CompuServe, removes the
+GIF driver. (*.mak)
+
+Changes dci_std_color (and std_device_std_color_* and prn_device_std_*) so
+that if the number of bits per pixel is 32, the device is defined as CMYK
+rather than RGB. (gxdevice.h)
+
+Removes the tseng8 device, which is no longer useful. (devs.mak, gdevsvga.c)
+
+Adds pseudo-alpha support to the SVGA drivers, via the TextAlphaBits and
+GraphicsAlphaBits device parameters. (gdevsvga.h, gdevsvga.c)
+
+Adds a user-contributed driver for the Epson Stylus Color printer. (devs.mak,
+gdevstc.c, devices.doc)
+
+</pre><h3><a name="V3.25_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The VMS build scripts had gotten out of sync (again). (vms*.mak)
+
+</pre><h3><a name="V3.25_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - The emulator name array was incorrectly declared const in one place.
+(gs.c)
+ - A closed file could incorrectly appear to be 'eq' to another file
+(open or closed). (iutil.c)
+ - If %stdin/%stdout/%stderr was ever closed, it couldn't be
+reopened. (gs_btokn.ps, gs_init.ps, files.h, zfile.c, zfileio.c, zfilter.c,
+zfproc.c, ziodev.c)
+
+Changes (almost) all the operator routines to 'static'. (z*.c)
+
+</pre><h3><a name="V3.25_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The raster value for replicated tiles in the halftone cache was
+incorrect, causing unaligned memory accesses. (gxht.c)
+ - stroke and strokepath could produce slightly inaccurate output
+(leading to slight visible anomalies) as a result of stroke adjustment.
+(gxstroke.c)
+ - Attempting to draw an arc with zero radius could cause a numeric
+exception. (gspath1.c)
+ - Setting the Orientation of a device to null resulted in actually
+setting it to a random value. (gsdparam.c)
+ - charpath, stringwidth, and cshow attempted to remap the current
+color unnecessarily. (gschar.c)
+
+Adds the ability to trace calls on the sqrt function (and possibly other math
+functions in the future.) (math_.h, gsmisc.c)
+
+Adds additional interrupt checks in the banding code. (gxclist.c, gxclread.c)
+
+</pre>
+
+<h2><a name="Version3.24"></a>Version 3.24 (beta) (1/17/95)</h2>
+
+<p>
+This was supposed to be a public release, but too many bugs showed up in 3.23,
+so this is another bug-fix beta release. This is the first release with a
+working PDF reader.
+
+<h3><a name="V3.24_Documentation"></a>Documentation</h3><pre>
+Notes that Solaris requires using installbsd instead of install. (make.doc)
+
+</pre><h3><a name="V3.24_Procedures"></a>Procedures</h3><pre>
+
+Changes 'make mostlyclean' so that it doesn't delete the Ghostscript
+executable (but deletes everything else that 'make clean' does). (gs.mak)
+
+Changes the link list generator so it eliminates duplicate library requests.
+(genconf.c)
+
+Factors the interpreter further so as to include less unnecessary PostScript
+support in the PDF interpreter. (gs.mak, zpath.c, zpath1.c)
+
+Adds a printout of the available language interpreters to the -h message.
+(genconf.c, gs.c, iinit.c, gs.mak)
+
+</pre><h3><a name="V3.24_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The alternate X drivers used a cast in an initializer, causing a
+compilation error on some platforms. (gdevxalt.c)
+
+Adds a driver for the LaserJet IIID, including duplex printing if specified by
+the Duplex page device parameter. (gdevdjet.c)
+
+Adds Orientation to the bit device. (gdevbit.c)
+
+</pre><h3><a name="V3.24_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - There was an extraneous pfen-&gt; in the NT file system module, causing
+a compilation error. (gp_ntfs.c)
+ - The DLL code referred to an obsolete symbol a_foreign. (gsdll.c)
+ - The VMS build scripts omitted the LaserJet 4 driver. (vms-*.mak)
+ - The VMS build scripts had several other minor errors. (vms.mak)
+
+</pre><h3><a name="V3.24_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - Defining a font alias in global VM with a name that was a string in
+local VM caused an error. (gs_fonts.ps)
+ - The font compiler referred to an obsolete symbol a_foreign.
+(font2c.ps)
+
+</pre><h3><a name="V3.24_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - There was an extraneous '#' before an extern declaration.
+(gsmain.c)
+ - The interpreter could (incorrectly) attempt to expand the e-stack.
+(istack.h, interp.c, istack.c)
+ - zfproc.c called memcpy but didn't include memory_.h. (zfproc.c)
+ - A garbage collection occurring within a 'save' would often smash
+memory. (igc.c)
+ - If the last character returned by the procedure of a procedure-based
+filter was \r, readline could get an endless loop. (zfileio.c)
+ - Saving a change to a ref member of a structure confused the garbage
+collector. (isave.h, isave.c, zdict.c)
+ - The -Zu debugging printout could cause an access error under rare
+circumstances. (isave.c)
+ - Save objects could get allocated in global VM, causing dangling
+references. (zvmem.c)
+ - The vmsave object created by the interpreter for a save didn't get
+freed properly if the memory manager created an invisible save level, which
+could cause the next garbage collection to crash. (zvmem.c)
+ - 'run' always printed an error message, rather than letting the
+top-level control loop do it. (gs.c, gs_init.ps)
+
+Adds support for duplex devices. (gxdevice.h, gsdparam.c, gs_statd.ps,
+gs_setpd.ps)
+
+Adds the beginnings of support for CID-keyed fonts. (gs_cidfn.ps)
+
+Changes the format of the stack dump printed for errors, to make it easier to
+read. (gs_init.ps)
+
+</pre><h3><a name="V3.24_Interpreter_PostScript"></a>Interpreter (PostScript)</h3><pre>
+
+Fixes bugs:
+ - The .local/global allocation operators always allocated in system
+VM. (zsysvm.c)
+ - setpage[params] caused an error. (gs_lev2.ps)
+ - If an error occurred during a cshow or (x|y|xy)show, the interpreter
+freed the enumerator twice. (zchar.c, zchar2.c)
+
+Changes setpageparams so that orientation = 0 means portrait. This is not
+compatible with AGFA's convention for roll-feed devices, but it is compatible
+with the more common cut-sheet printers. (gs_statd.ps)
+
+Adds meaningful values for the Emulator resource. (gsmain.c, gs_res.ps)
+
+Makes -Z? validate the state of memory before and after save and restore.
+(ialloc.h, igc.h, ialloc.c, igc.c, ilocate.c, zvmem.c)
+
+</pre><h3><a name="V3.24_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - The Unix install script didn't install the PDF files if they were
+present. (unix-end.mak)
+ - PDF to PostScript conversion didn't work at all. (It still doesn't
+work very well.) (pdf_2ps.ps, pdf_main.ps)
+ - Images with an Indexed color space and no Decode entry caused an
+error. (pdf_draw.ps)
+ - The 'Page &lt;n&gt;' messages were printed even if QUIET was set.
+(pdf_main.ps)
+
+Changes the interpreter so that when it encounters an unknown operator, it
+prints an error message and continues, rather than signalling an error.
+(pdf_base.ps)
+
+Makes F a synonym for f if there is nothing on the operand stack, to
+compensate for a bug in some Adobe software. (pdf_base.ps)
+
+Changes pdfgetpage so it uses 1-origin rather than 0-origin indexing. THIS IS
+A NON-BACKWARD-COMPATIBLE CHANGE. (pdf_main.ps)
+
+</pre><h3><a name="V3.24_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The Group 3 2-D and Group 4 encoders produced incorrect output if a
+scan line beginning with a black pixel was followed by a scan line beginning
+with a white pixel. (scfe.c)
+ - A SubFileDecode filter with a count of 1 and a non-empty EOD string
+would smash memory. (sfilter1.c)
+
+Updates the DCT filters so they will work with the latest version (5a) of the
+IJG library. (*.mak, jpeg.mak, sjpegerr.c)
+
+</pre><h3><a name="V3.24_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - A call with integer parameters to a procedure with floating point
+arguments didn't work on non-ANSI compilers. (gsimage.c)
+ - Arcs could get turned into polygons if the scaling values in the CTM
+were very large and the radius was (in user space coordinates) very small.
+(gspath.c)
+ - The current point was defined when a BuildChar procedure was called.
+(This bug was documented as fixed in version 2.2!) (gschar.c)
+
+Adds support for Orientation and Duplex page device parameters, for those
+devices that support these. (gdevprn.h, gxdevice.h, gsdevice.c, gsdparam.c)
+
+</pre>
+
+<h2><a name="Version3.23"></a>Version 3.23 (beta) (1/5/95)</h2>
+
+<p>
+This is almost entirely a bug fix release. It also includes a largely working
+PDF reader. This is intended as the beta test release for the next public
+release.
+
+<h3><a name="V3.23_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - COPYLEFT, COPYING, NEWS, PUBLIC, README, and the standard Fontmap
+were omitted from the 3.22 fileset.
+
+Documents the use of the -oldc switch to work around a compiler crash on
+the DECstation.
+
+Expands and clarifies the documentation for building the DesqView/X version
+with djgcc. (make.doc)
+
+Adds documentation on the "600x300" H-P inkjet printers, explaining why
+this alleged higher resolution is not available. (devices.doc)
+
+Adds to the PUBLIC license a warning that it is not a GNU License, and a
+requirement to include a copy of or a pointer to the License in any written
+material. (PUBLIC)
+
+Documents the fact that Ghostscript *does* attempt to look up files in the
+current directory first. (use.doc)
+
+</pre><h3><a name="V3.23_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - In VMS.MAK, .JPEG should have been changed to .JPEG-5 in a few
+places. (vms.mak)
+
+Adds the pjxl300 driver to all configurations that include the other color
+DeskJet drivers. Replaces pjet and pjetxl with pj and pjxl. (*.mak)
+
+Makes 'run' recognize PDF files if the PDF reader is included.
+(pdf_main.ps)
+
+</pre><h3><a name="V3.23_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - viewjpeg.ps needed the test for languagelevel = 2 at the
+beginning of the file. (viewjpeg.ps)
+ - prfont.ps used 'min', which isn't a standard PostScript operator.
+(prfont.ps)
+ - prfont.ps created Encoding vectors that weren't 256 elements
+long. (prfont.ps)
+
+Adds the gsdj500 script to the installation list. (unix-end.mak)
+
+Changes the Unix "line printer" shell scripts to add the date to the page
+header. (gsbj, gsdj, gsdj500, gslj)
+
+Changes ansi2knr so that it will work properly on systems where the ctype
+macros don't handle 8-bit characters correctly. (ansi2knr.c)
+
+</pre><h3><a name="V3.23_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - Some compilers don't allow casts in initialization expressions.
+(gdevx.c, gdevxalt.c)
+ - The cdj drivers didn't initialize the color_info structure
+properly. (gdevcdj.c)
+
+Adds another alternate X Windows driver, x11mono, that is a black-and-white
+device. (devs.mak, gdevxalt.c)
+
+Adds a user-contributed driver for the Apple Imagewriter LQ. (devs.mak,
+gdevadmp.c)
+
+</pre><h3><a name="V3.23_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The VMS MODULES.LIS file had gotten out of sync with the makefile
+(again); GDEVABUF and GSBITOPS were missing. (modules.lis)
+ - The VMS script file had gotten out of sync with the makefile
+(again). (vms.mak)
+ - The MS Windows platform code didn't recognize Windows 95 (Windows
+4.0) as equivalent to Windows NT. (gp_mswin.c)
+ - File name enumeration didn't work on OS/2 or win32. (gp_ntfs.c,
+gp_os2.c)
+ - -sOutputFile= didn't work under MS Windows. (gp_mswin.c)
+
+Changes the SCO Unix direct frame buffer driver so it generates in-line
+instructions to access the frame buffer, for a dramatic speed improvement.
+(gdevpcfb.h, gdevsco.c)
+
+</pre><h3><a name="V3.23_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - If a font couldn't be found in the Fontmap, a recursion loop
+sometimes occurred. (gs_fonts.ps)
+ - Aliases for global fonts weren't automatically created as global,
+possibly leading to a recursion loop. (gs_dps1.ps, gs_fonts.ps)
+ - If a font was loaded into global VM within an inner save, the restore
+deleted it from FontDirectory but not from SharedFontDirectory, causing a
+possible recursion loop. (gs_dps1.ps, gs_fonts.ps, idict.h, idict.c, zdict.c)
+
+Further improves the algorithm for substituting for unknown fonts.
+(gs_fonts.ps)
+
+</pre><h3><a name="V3.23_Interpreter_PostScript"></a>Interpreter (PostScript)</h3><pre>
+
+Fixes bugs:
+ - zcontrol.c had an assignment of const char * to const byte *,
+which some compilers don't like. (zcontrol.c)
+ - Setting an Indexed color space based on a CIE space caused an
+attempt to free a random block of memory. (zcsindex.c)
+ - Some compilers don't like mixing conditionals and casts in
+initialization expressions. (iref.h)
+ - Some calculations of table sizes for string garbage collection
+didn't work if sizeof(long) != 4, leading to smashed strings. (iastate.h,
+ialloc.c, igcstr.c)
+ - Strings longer than about 7000 bytes smashed their chunk header
+and confused the garbage collector. (ialloc.c)
+ - Some compilers needed iccfont.c to include strimpl.h.
+(iccfont.c)
+ - The obsolete file zcspace2.c was still included in the fileset.
+ - If the command line included any @-files that required searching
+the library path, a limitcheck would occur. (zfile.c)
+ - The insideness testing operators caused a memory access error,
+because the procedure vector hadn't been updated to provide a default
+get_alpha_bits procedure. (zupath.c)
+ - gcheck didn't check for stack underflow. (zvmem2.c)
+ - cleardictstack could fail to clear the dictionary stack if the
+stack had overflowed into additional blocks. (zdict.c)
+ - If the '-' switch was selected, resources weren't released
+properly on exit. (gs.c)
+ - Setting a Pattern color space based on a CIE space caused an
+invalid memory access. (zcsindex.c)
+ - The garbage collector didn't treat refs properly on machines with
+short ints. (igcref.c)
+ - Operators with more than 16 arguments could break the
+interpreter. (interp.h, iinit.c, interp.c)
+ - save/restore didn't restore the setting of the current allocator
+VM (local/global). (isstate.h, isave.c)
+ - stdpre.h declared exit as an extern, instead of letting gsmain.c
+declare it. (stdpre.h, gsmain.c)
+ - gs.c used fputs to print help messages rather than fprintf.
+(gs.c)
+ - Interrupts failed to re-execute the operation that was
+interrupted. (interp.c)
+ - Low-resolution CMYK devices didn't use separate screens for each
+color plane as the default. (gs_init.ps)
+ - filterdict wasn't getting undef'ed at the end of initialization.
+(gs_init.ps)
+ - gstate operations were broken (bug introduced in 3.02).
+(zdevice2.c)
+ - resourceforall didn't remove the resource dictionary from the
+dictionary stack when calling the client-supplied procedure. (gs_res.ps)
+ - currentcolor with an Indexed color space returned a real rather
+than an integer. (zcolor2.c)
+ - setshared / setglobal left the stack in an unobvious state if
+they were given a non-Boolean argument. (gs_dps1.ps)
+ - sethalftone followed by currenthalftone returned an invalid value.
+(zht2.c)
+ - Empty strings produced spurious garbage collector error messages.
+(gsstruct.h, scommon.h, igc.c, igcstr.c, iname.c)
+ - The garbage collector didn't trace Separation color spaces properly.
+(gscsepr.c)
+
+Changes defineresource so that it does not, by default, make instances
+read-only. (gs_res.ps)
+
+Adds .{local,global}{array,dict,packedarray,string} operators for creating
+objects in a specific VM space. (zsysvm.c, gs_dps1.ps)
+
+Adds definitions of setpage and setpageparams to statusdict. (gs_setpd.ps,
+gs_statd.ps)
+
+Alleviates some performance problems in the garbage collector. (igc.c)
+
+</pre><h3><a name="V3.23_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - PDF files that used filters with parameters caused a typecheck
+error because the arguments to 'filter' were reversed. (pdf_base.ps)
+ - The (undocumented) PDF 1.1 ability to specify link and annotation
+destinations indirectly was not supported. (pdf_main.ps)
+ - The (undocumented) PDF ability to specify a null page in a link
+destination was not supported. (pdf_main.ps)
+ - The PDF encodings weren't loaded properly in a system with both
+PS Level 2 and PDF features. (gs_res.ps, gs_init.ps)
+ - If the next line after a stream keyword was blank, the line
+wasn't skipped, which matters for binary data. (pdf_base.ps)
+ - A Q operator with no matching q operator caused an error.
+(pdf_draw.ps)
+ - The text position wasn't preserved across a fill or stroke
+operator. (gs_pdf.ps, pdf_draw.ps)
+ - Embedded Type 3 fonts didn't work. (pdf_base.ps, pdf_draw.ps,
+pdf_main.ps)
+ - Masked images with no Decode value had their polarity inverted.
+(pdf_draw.ps)
+ - Embedded Type 1 fonts referenced from within a stream didn't
+work. (pdf_font.ps)
+
+Changes the PDF code so that it automatically recognizes PDF files as such.
+(pdf_main.ps)
+
+Splits out the PixelDifference filters as a separate "feature". (gs.mak)
+
+</pre><h3><a name="V3.23_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - Closing the primary input stream caused an invalid memory access.
+(stream.c)
+ - Increasing the size of a buffer within a save resulted in a
+dangling reference after the restore. (files.h, sfilter.h, zfile.c,
+zfilter.c)
+ - The garbage collector didn't properly trace streams that referenced
+strings directly. (stream.h, stream.c, ziodev.c)
+
+</pre><h3><a name="V3.23_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - An extraneous \ upset some compilers. (gdevabuf.c)
+ - Uncolored Patterns that completely filled their bounding box
+caused an invalid memory access. (gspcolor.c)
+ - If a color image required clipping, black or white pixels might
+be rendered with incorrect (random) colors. (gxcpath.c)
+ - Reference counts for color spaces were sometimes set too high, so
+they would only be freed by restore or garbage collection. (gscolor.c)
+ - The character cache could get confused if the Encoding for the
+character wasn't a name. (gschar.c)
+ - Character outlines were always rendered with flatness = 0,
+causing very bad performance for large characters. (gzstate.h, gschar.c,
+gsimage.c, gxfill.c, gxstroke.c)
+ - If a device (presumably uninitialized) had a
+color_info.num_components of zero, an invalid memory access could occur.
+(gsdparam.c)
+ - Intersecting clipping paths that are not both rectangular didn't
+properly set the outer box of new clipping path, leading to unnecessary
+computation. (gxcpath.h, gxacpath.c, gxcpath.c)
+ - A call passed false instead of NULL. (gschar.c)
+ - On machines where sizeof returns a long, genarch.c failed.
+(genarch.c)
+ - xfonts were consulted, incorrectly, even for stroked characters.
+(gxccman.c)
+ - gstate/currentgstate/setgstate didn't work properly. (gsline.c,
+gsstate.c)
+ - On CMYK devices needing halftoning, colors with C = M = Y were
+always converted to gray shades. (gxcmap.c)
+ - Isolated horizontal lines, or the horizontal edges of rectangles,
+could get drawn with one or both end pixels missing. (gxfill.c)
+
+Changes the character cache back so it oversamples characters at small
+sizes. (gschar.c)
+
+Changes all occurrences of (void)x to discard(x), and defines discard in
+stdpre.h as a cast to void, to make it possible to pacify compilers that
+don't accept this construct for some kinds of x. (gpcheck.h, stdpre.h,
+store.h, gdevmswn.c, gp_mswin.c, gscoord.c, gxclread.c, igc.c, sfile.c,
+sfileno.c, zcie.c, zht2.c, ziodev.c, zmisc1.c)
+
+Increases the size of the halftone cache on large-memory machines from 35K
+to 100K. This substantially improves halftoning performance at higher
+resolutions. (gxht.c)
+
+</pre>
+
+<h2><a name="Version3.22"></a>Version 3.22 (beta) (11/30/94)</h2>
+
+<p>
+This is primarily a bug fix release. It also includes limited anti-aliased
+graphics capability. This release was not distributed to the public.
+
+<h3><a name="V3.22_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The definition of ghost_h was misplaced, so changes in it or its
+antecedents didn't force recompilation of its dependents. (gs.mak)
+
+Actually implements the -Z+ switch, for forcing small stack blocks.
+(interp.c)
+
+Makes the -dSAFER switch disable the %pipe syntax for file names, even for
+reading. (gs_init.ps)
+
+</pre><h3><a name="V3.22_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The dfax drivers incorrectly set EncodedByteAlign to false.
+(gdevdfax.c)
+ - softwareValue and dateTimeValue were declared as byte rather than
+char. (gdevtfax.c)
+
+</pre><h3><a name="V3.22_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The VMS DEC C compilers declare delete in unixio.h, and doesn't
+declare unlink anywhere. (stdio_.h)
+ - The VMS compilers declare malloc and free in stdlib.h, which
+wasn't being included in malloc_.h. (malloc_.h)
+ - The SCO Unix C compiler needs both &lt;sys/time.h&gt; and &lt;time.h&gt;.
+(time_.h)
+ - The VMS compilers declare abs in stdlib.h, which wasn't being
+included anywhere. (gshtscr.c)
+ - The definition for A4 paper in VMS-AXP.MAK was incorrect.
+(vms-axp.mak)
+
+Renames VMS-AXP.MAK as VMS-DECC.MAK, with some changes that make it
+appropriate for DEC C on both VAX and AXP platforms. (vms-axp.mak =&gt;
+vms.decc.mak)
+
+</pre><h3><a name="V3.22_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - gs_kanji.ps got an invalidaccess error. (gs_kanji.ps)
+
+</pre><h3><a name="V3.22_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - An off-by-1 test in the roll operator caused it to smash the
+stack if the operand stack had overflowed into additional blocks.
+(zstack.c)
+ - The default CIE color rendering dictionary didn't assume a
+reasonable intermediate (XYZ) space. (gs_lev2.ps)
+ - CIE color mapping tables weren't traced properly by the garbage
+collector. (gscie.h, gscie.c, zcie.c)
+ - If the very last character of a file was a ^M, the scanner
+(incorrectly) signaled a syntaxerror. (iscan.c)
+ - If an operator could return both a typecheck and a
+stackunderflow, it always returned a stackunderflow, which doesn't match
+the behavior of Adobe interpreters. (opcheck.h, idparam.c, interp.c,
+iutil.c, z*.c)
+ - astore, dictstack, and execstack could return a spurious
+invalidaccess error (or fail to detect an invalid access) if the operand
+stack had overflowed into additional blocks. (istack.c)
+ - The garbage collector didn't relocate pointers to names! (Bug
+introduced in 3.20.) (iname.h)
+ - If the dictionary stack overflowed into additional blocks, the
+cached value pointer for a name could get set incorrectly, and also not get
+relocated by the garbage collector. (idict.c)
+ - If the dictionary stack overflowed into additional blocks, the
+post-GC fixup of cached value pointers in names could cause an addressing
+error. (igc.c)
+ - With the -Z? switch set, the garbage collector could incorrectly
+report that objects or strings weren't in any chunk. (igc.c)
+ - &lt;&lt; /a 1 /a 2 &gt;&gt; /a get gave the value 2 rather than 1.
+(gs_init.ps)
+ - Numbers in binary object sequences and encoded number arrays
+didn't work properly on machines where sizeof(short) != 2 or sizeof(long)
+!= 4. (ibnum.c)
+ - The put operator for dictionaries allowed null as a key.
+(idict.h, idict.c)
+ - &gt;&gt; didn't give an error if there were an odd number of values on
+the stack above the next mark. (gs_init.ps)
+ - Operations that explicitly freed ref objects (setting a CIE
+colorspace, resizing a dictionary, popping a block off a stack) could
+corrupt storage. (ialloc.c)
+ - The -Z@ switch, which fills freed blocks with a recognizable bit
+pattern, could incorrectly overwrite freed blocks in previous save levels,
+causing invalid memory accesses. (ialloc.c)
+ - Since streams freed by a restore weren't marked as free, they
+could confuse the garbage collector and lead to invalid memory accesses.
+(zfile.c)
+ - If one of the built-in dictionaries overflowed during
+initialization, no error was reported -- entries were simply discarded.
+(iinit.c)
+ - If the level2.dev feature was combined with certain other
+features, the current languagelevel was 2 when some gs_*.ps files were
+loaded, causing them to load incorrectly. (gs_btokn.ps, gs_setpd.ps)
+ - If readline read a line that ended with only a CR (no LF)
+followed by an end-of-file, it incorrectly closed the stream. (zfileio.c)
+
+Adds a .cond operator, similar to the Lisp multi-arm conditional.
+(zcontrol.c)
+
+Adds a .makeglobaloperator operator, allowing the definition of operator
+procedures in local VM that turn into global operators, provided the save
+level is zero. (iref.h, opdef.h, iinit.c, interp.c, zmisc.c)
+
+Note: the fix for returning typecheck vs. stackunderflow requires that all
+operators (or other code) that uses return_error(e_typecheck) to indicate
+an incorrect object type on the operand stack must change this to
+return_op_typecheck(op), where op points to the operand. THIS IS A
+NON-BACKWARD-COMPATIBLE CHANGE.
+
+Implements string array and name array parameters for parameter lists.
+(gsparam.h, iparam.c)
+
+Brings filterdict inside the INITIAL_DICTIONARIES conditional. (iinit.c)
+
+Adds a .currentscreenlevels operator that returns the number of
+distinguishable halftone levels. (zht.c)
+
+</pre><h3><a name="V3.22_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The 2-D case of CCITTFaxDecode could get confused by an input
+data buffer boundary that fell immediately after a horizontal code.
+(scfd.c)
+ - The LZW decoder didn't detect invalid data unless DEBUG was
+selected at build time. (slzwd.c)
+
+</pre><h3><a name="V3.22_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The clipping region accumulator could refer to a clipping
+rectangle even after it had been freed. (No effect on execution unless the
+-Z@ switch was selected.) (gxacpath.c)
+ - setbbox expanded the bounding box, but didn't place a limit on
+further path elements, if the current path wasn't empty. (gsdps1.c)
+ - setbbox didn't make sufficient allowance for rounding.
+(gsdps1.c)
+
+Implements the ProcessColorModel parameter (read-only) for all devices.
+(gsdparam.c)
+
+Adds a gs_currentscreenlevels procedure that returns the number of
+distinguishable halftone levels. (gsht.c)
+
+</pre>
+
+<h2><a name="Version3.21"></a>Version 3.21 (beta) (11/17/94)</h2>
+
+<p>
+This is primarily a bug fix release. It also includes a substantial
+improvement in the Type 1 font hinting algorithms. This release was not
+distributed to the public.
+
+<h3><a name="V3.21_Documentation"></a>Documentation</h3><pre>
+Fixes bugs:
+ - The `man' page referred to gnu.ghostscript.bug rather than
+comp.lang.postscript. (gs.1)
+
+Documents the special entries in operator definition tables that allow
+switching dictionaries. (opdef.h)
+
+</pre><h3><a name="V3.21_Procedures"></a>Procedures</h3><pre>
+
+Moves the definition of JSRCDIR to the individual platform makefiles, to
+make it easier to change on platforms that don't have file links. (*.mak)
+
+</pre><h3><a name="V3.21_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - ansi2knr didn't recognize that a line ending with } couldn't be a
+function definition. (ansi2knr.c)
+ - ps2epsi always returned an empty bounding box. (ps2epsi,
+ps2epsi.bat)
+
+</pre><h3><a name="V3.21_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The bitrgb device had an invalid depth of 3. (gdevbit.c)
+
+Replaces the color mapping code in the X driver with a much faster
+algorithm, courtesy of Tim Theisen. (gdevx.h, gdevx.c, gdevxini.c)
+
+</pre><h3><a name="V3.21_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - Two variable names were misspelled. (gdevpm.c, gp_mswin.c)
+ - It wasn't possible to compile a non-DLL configuration under OS/2.
+(os2.mak)
+ - Compilation under Microsoft C/C++ 8.0 gave errors. (gp_mswin.h,
+gp_mswin.c, gshtscr.c)
+
+Adds some more devices to the OS/2 makefile. (os2.mak)
+
+</pre><h3><a name="V3.21_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - wrfont.ps, and hence bdftops, didn't write out the FontType or
+PaintType. (Bug introduced since 2.6.1) (wrfont.ps)
+ - wrfont.ps omitted a 'begin' and 'end', causing -! or -| to be
+undefined when the font was loaded. (Bug introduced since 2.6.1)
+(wrfont.ps)
+
+</pre><h3><a name="V3.21_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - make_tasv_old called make_tasv_new with extra arguments.
+(store.h)
+ - currentcacheparams only returned 2 values instead of 3.
+(zfont.c)
+ - ustroke popped one element too many off the stack if a matrix was
+supplied. (zupath.c)
+ - inu[eo]fill popped one element too many off the stack.
+(zupath.c)
+ - The color rendering dictionary was initialized to null rather
+than a valid dictionary. (gs_lev2.ps)
+ - An invalid IODevice resource named "9" got created. (gs_res.ps)
+ - bytesavailable often caused an error rather than returning -1.
+(zfileio.c, stream.c)
+ - The insideness testing operators always returned true if the
+aperture was defined by a user path rather than a point. (zupath.c)
+ - If INITIAL_DICTIONARIES was defined in the makefile, the
+definition of the initial_dictionaries array was missing a comma.
+(iinit.c)
+ - Even if userdict appeared in INITIAL_DICTIONARIES, gs_init.ps set
+its maxlength to 200. (gs_init.ps)
+ - Setting a CIE color space left a garbage value on the stack.
+(zcie.c)
+ - If a file or filter was opened and then closed, opening a file
+subsequently within a 'save' could lead to a memory access error in the
+garbage collector. (zfile.c)
+ - Setting an Indexed or Separation color space could cause a crash
+either in the garbage collector or when printing out the e-stack.
+(icsmap.h, zcsindex.c, zcssepr.c)
+ - Invoking a filter with an invalid data source or sink could cause
+a memory access error (bug introduced in 3.20). (zfilter.c)
+ - Invoking stringwidth on a font whose BuildChar procedure did a
+save could cause a memory manager error or infinite loop, because
+stringwidth attempted to use an inapplicable shortcut. (gschar.c)
+ - The bounding box for rendering stroked Type 1 characters didn't
+take square caps and miter joins into account. (gs_type1.ps)
+ - Invoking filter with DCTDecode or DCTEncode could cause an
+addressing error if no dictionary argument was supplied. (zfdctd.c,
+zfdcte.c)
+ - The Generic resource, the Font resource, and half a dozen
+resources with no predefined instances all shared the same Instances
+dictionary. (gs_res.ps)
+ - The temporary null device allocated for stringwidth was never
+freed. (gschar.h, gschar.c, zchar.c)
+ - Internal operators, and structures that might be freed on stack
+unwinding, could "escape" from the e-stack. (zcontrol.c, ztype.c)
+ - makefont and scalefont didn't properly handle a font whose
+Encoding had been changed. (bfont.h, zfont.c, zfont2.c)
+ - Type 1 fonts with PaintType = 2 incorrectly checked for an xfont.
+(gxfont.h, gschar.c, gsfont.c, zchar1.c, zfont1.c, zfont2.c)
+ - Specifying a string argument with -d...=(...) or -d...=&lt;...&gt;
+would cause an invalidaccess error. (gs.c)
+ - The environment for encapsulated jobs didn't rebind quit to stop
+in userdict. (gs_lev2.ps)
+ - restore didn't deal properly with open files on the e-stack.
+(zvmem.c)
+ - Even with the '-' switch, Ghostscript would try to read ahead in
+the input stream rather than processing input character-by-character.
+(ziodev.c)
+ - If an error occurred with a unreadable dictionary on any stack,
+the standard error printer would get into an error loop and exit the
+interpreter. (gs_init.ps)
+ - The for_roots macro in igc.c used ap rather than mem as its
+second formal parameter. (This typo had no effect on the executable
+program.) (igc.c)
+ - If saving the stacks for an error caused a GC request, a value
+could get stored into an improper variable on the C stack, causing havoc.
+(interp.c)
+ - setdash checked to make sure that the distance array had read
+access; Adobe interpreters don't check this. (zgstate.c)
+ - The roots for gs_run_string and gs_interpret weren't registered
+properly, which could cause a dangling reference in the case of a restore
+whose save had been done earlier. (gsmain.c, interp.c)
+
+Adds an OpenOutputFile Boolean device parameter for printer devices; if
+true, the device opens the OutputFile at the time the device is opened,
+instead of waiting for the first showpage. This helps with synchronization
+when the OutputFile is a pipe. (gdevprn.h, gdevprn.c)
+
+Changes the BEGIN/END_OP_DEFS macros to require an explicit { and } at each
+use. (gsmain.c, interp.c, z*.c)
+
+Arranges things so that the operators that the interpreter handles
+specially are assigned the first N operator indices [internal change only].
+(interp.h, iinit.c, interp.c)
+
+Changes the operators max and min to .max and .min, to avoid conflicts with
+PostScript programs that use these names for variables and also use 'bind'.
+THIS IS A NON-BACKWARD-COMPATIBLE CHANGE from programs that depend on
+'bind' binding in these operators; however, we have also defined procedures
+max and min that just call the operators, which should take care of any
+ordinary code. (*.ps, zrelbit.c)
+
+</pre><h3><a name="V3.21_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The pfb_state pointer in the eexecDecode filter state wasn't
+marked as traceable for the garbage collector. (sfilter.h)
+ - The eexec decoding filter could access invalid memory or return
+garbage under some conditions. (Bug introduced in 3.12.) (zmisc1.c)
+ - The eexec decoding filter would incorrectly ask for more input if
+the output buffer was full. (seexec.c)
+
+</pre><h3><a name="V3.21_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Some compilers reserve the word 'try'. (gshtscr.c)
+ - Some compilers don't like line continuations (\) within a
+preprocessor macro formal parameter list. (gdevprn.h, gxdevice.h)
+ - Memory devices created with an inverted palette (0=white,
+1=black) interchanged white and black in fill operations. (gdevmem1.c)
+ - The 'bits' variable in mem_mono_copy_mono was unused on
+little-endian machines. (gdevmem1.c)
+ - Some garbage collector procedures were declared 'private'
+inconsistently. (gscie.c)
+ - The new anti-aliased text capability accidentally caused all
+characters to be oversampled. (gschar.c)
+ - Type 1 fonts with PaintType = 2 and StrokeWidth = 0 came out with
+many pixels missing because of oversampling. (gschar.c)
+ - Type 1 font stem hints were not being processed correctly.
+(gstype1.h, gxtype1.h, gstype1.c, gxhint2.c, gxhint3.c, gxpath.c)
+ - The tracing message for 9/7 composite fonts incorrectly
+identified them as 1/7 fonts. (gschar0.c)
+ - If a 1/7 or 9/7 composite font was a child of a non-modal font,
+the font number of the child font was computed incorrectly. (gschar0.c)
+
+Splits up the various memory devices into one file per depth [internal
+change only]. (gdevm*.c)
+
+</pre>
+
+<h2><a name="Version3.20"></a>Version 3.20 (beta) (10/31/94)</h2>
+
+<p>
+This version contains some support for a PDF interpreter; however, the PDF
+code itself is not ready for release yet. It also includes anti-aliased text
+capability. This release was not distributed to the public.
+
+<h3><a name="V3.20_Documentation"></a>Documentation</h3><pre>
+Notes that the FAQ has moved to smallo.ruhr.de:pub/ghost/gs.faq. (readme)
+
+Documents various implementation limits. (language.doc)
+
+</pre><h3><a name="V3.20_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - bcp.dev wasn't included in the list of dependencies for
+level1.dev. (gs.mak)
+
+Changes the printout of version numbers so that it is always A.BC,
+rather than A.B if C is zero. (gs.c, gs_init.ps)
+
+</pre><h3><a name="V3.20_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - font2c didn't correctly handle Metrics or Metrics2 dictionaries
+whose entries were arrays rather than scalars. (font2c.ps, ccfont.h,
+iccfont.c)
+ - font2c didn't handle CDevProc. (font2c.ps, ccfont.h, iccfont.c)
+ - genconf could get a stack overflow on small machines.
+(genconf.c)
+
+Changes mergeini.ps so it can take arguments on the command line specifying
+the input and output files. (mergeini.ps)
+
+Adds a gsdj500 shell script to parallel gsdj500.bat. (gsdj500)
+
+</pre><h3><a name="V3.20_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The X driver didn't mask dynamically assigned colors properly, so
+it could request the same color over and over again. (gdevx.c)
+
+Adds two alternate X Windows drivers, for helping debug drivers with other
+color models:
+ - x11alpha, an RGB device with 4-bit alpha capability (for
+ copy_alpha only);
+ - x11cmyk, a 1-bit-per-component CMYK device.
+(devs.mak, gdevxalt.c)
+
+Changes the left margin of the lj4dith driver to 0.26". (gdevcdj.c)
+
+</pre><h3><a name="V3.20_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - If &lt;sys/time.h&gt; didn't exist, time_.h didn't always include
+&lt;time.h&gt;. (time_.h)
+ - The OS/2 platform wouldn't compile. (gdevpm.c)
+ - The auxiliary VMS command files sometimes got blank lines
+inserted when going through EOL conversion. (vms.mak; delete gs_.com)
+ - The VMS makefiles didn't include the Level 1 operators in
+level1.dev. (vms.mak)
+ - The VMS gcc makefile didn't handle undefined DEVICE_DEVSn
+variables properly. (vms*.mak)
+ - The VMS makefiles didn't recognize DEVICE_DEVS{1,2,5,7}.
+(vms.mak)
+
+At the request of a Unix expert, changes all the Unix shell scripts to use
+exec gs ... "$@" rather than gs ... $*. (gsnd, gsbj, gsdj, gslj, gslp)
+
+Modifies the JPEG library so that it uses 4K less of the automatic data
+segment in 16-bit environments. (bcwin.mak, jpeg.mak, sjpeg.c, sjpegerr.c)
+
+Adds the bmp drivers back into the 16-bit MS Windows executable, since they
+will fit now. (bcwin.mak)
+
+</pre><h3><a name="V3.20_Fonts"></a>Fonts</h3><pre>
+
+Makes the font substitution algorithm recognize the word Roman as calling
+for a serif font. (gs_fonts.ps)
+
+</pre><h3><a name="V3.20_Interpreters"></a>Interpreters</h3><pre>
+
+Fixes bugs:
+ - The fix in 3.13 for the inexact function values at 0 didn't work.
+(zcontrol.c)
+ - Level 1 configurations referenced an undefined procedure
+gs_currenthalftone. (gsht.c, gsht1.c)
+ - Specifying any device properties (including -r and -g) on the
+command line caused an error. (gs_init.ps)
+ - The forward declaration of cfont_name_array_create was
+incorrect. (iccfont.c)
+ - save and restore could get called before the graphics state stack
+had been initialized properly. (gs_mex_e.ps)
+ - Some encodings weren't loaded properly. (gs.mak, gs_mex_e.ps,
+gs_mro_e.ps, gs_pdf_e.ps, gs_wan_e.ps)
+ - Zero-height images were allowed, but zero-width images
+weren't. (zpaint.c)
+ - Neither zero-width nor zero-height images popped their
+arguments from the operand stack. (zpaint.c)
+ - lib_file_fopen overwrote its file name argument, causing havoc
+with @-files. (gxiodev.h, gdevpipe.c, gsiodev.c, zfile.c)
+ - The garbage collector got confused if there were any arrays or
+dictionaries with 8K or more elements. (igcref.c)
+ - &gt;&gt; could leave the stacks in a questionable state if it failed.
+(gs_init.ps)
+ - The Category resource category didn't implement undefineresource.
+(gs_res.ps)
+ - When the token operator read the last token from a string, it
+left an unchanged string on the stack instead of an empty string.
+(stream.c)
+ - noaccess didn't give an invalidaccess error when applied to the
+permanent dictionaries. (dstack.h, idict.c, ztype.c)
+ - Overflowing the exec stack wasn't handled properly. (istack.h,
+istack.c)
+ - The garbage collector cleared the cached value pointers in names,
+causing interpretation to slow down substantially. (idict.c, igc.c,
+iname.c)
+ - 0 dict created a dictionary with a maxlength of 1. (idict.c)
+
+Changes the default size of the execution stack from 150 to 250, to match
+the Adobe "typical" value. (interp.c)
+
+Moves the operator definitions out of the automatic data segment.
+(opdef.h, iinit.c, z*.c)
+
+Adds operators that allow creation of objects in system space:
+.systemvmstring, .systemvmarray, .systemvmpackedarray, .systemvmdict,
+.systemvmcheck. (zsysvm.c)
+
+Renames gcdefs.h as gscdefs.h.
+
+Allocates names in system space rather than global space. (gsmain.c)
+
+Changes the memory manager so that it allows programs to create objects in
+system space. (iref.h, iutil.h, ivmspace.h, ...)
+
+Changes the implementation of filters so they appear in their own
+dictionary named filterdict. (gs_init.ps, z*.c)
+
+Changes the implementation of color spaces so each one has its own
+setcolorspace procedure, defined in a new dictionary named
+colorspacedict. (gs_lev2.ps, z*.c)
+
+Adds a new debugging switch, $, that always initializes all fields in a
+ref, in order to keep Purify happy. (store.h)
+
+</pre><h3><a name="V3.20_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The page size for image devices was always set to (0, 0).
+(gsdevice.c)
+ - The PageSize computation in gx_default_put_params could overflow
+on 16-bit machines. (gsdparam.c)
+ - An omitted 'static' on an initialized array caused a compiler
+error. (gxccman.c)
+ - If interpolated image rendering was requested but not
+actually carried out, gs_image_cleanup could attempt to free a random
+pointer. (gsimage.c)
+ - Some compilers only retain 23 characters of procedure names, but
+some procedure names weren't unique in the first 23 characters. (gscie.c,
+gscolor.c, gscolor1.c, gxcmap.c)
+ - The garbage collector didn't trace device colors properly.
+(gxdcolor.h, gzht.h, gsimage1.c, gspcolor.c, gxcht.c, gxcmap.c, gxdraw.c,
+gxht.c)
+ - For CMYK devices, the transfer functions were being applied to
+the CMYK values rather than the complemented RGBW values. (gxcmap.c)
+ - Memory devices used their own color mapping procedures rather
+than those of the target; this could cause incorrect colors for patterns on
+devices with more than 1 bit per pixel. (gxdevmem.h, gdevmem1.c, gdevpm.c,
+gdevprn.c, gdevwdib.c, gschar.c, gsdevice.c, gxccache.c, gxccman.c,
+gxclip2.c, gxclread.c, gxpcmap.c)
+ - The garbage collector didn't trace image enumerators properly in
+the image_render_simple case. (gsimage.c)
+ - stroke produced different-looking output for thin (zero-width)
+lines depending on whether or not clipping was invoked. (gxstroke.c)
+ - If a clipping list changed from multiple rectangles to a single
+rectangle, it could fail to clip properly thereafter. (gxacpath.c)
+
+Adds two new device procedures: alpha_bits and copy_alpha. This change is
+backward-compatible for all existing devices. (gdevmem.h, gxdevice.h,
+gsdevice.c, gxclip2.c, gxclist.c, gxcpath.c)
+
+Changes the implementation of color halftones so that, when appropriate, it
+generates a single cell and uses the device tile_rectangle procedure.
+(gzht.h, gsht.c, gxcht.c, gxclist.c, gxclread.c)
+
+Adds partial support for the Orientation page device parameter.
+(gsdevice.c)
+
+Adds support for anti-aliased characters using 2 or 4 bits of alpha.
+(gxfcache.h, gschar.c, gxccache.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version3.13"></a>Version 3.13(private) (10/3/94)</h2>
+
+<p>
+This release was created for a customer; it was not distributed to the
+public.
+
+<h3><a name="V3.13_Documentation"></a>Documentation</h3><pre>
+Notes in make.doc that the file names in the IJG archive distributed with
+Ghostscript do not include the gsA.BC/ prefix. (make.doc)
+
+Adds a cross-reference to make.doc to the Watcom makefiles. (watc.mak,
+watcwin.mak, wccommon.mak)
+
+</pre><h3><a name="V3.13_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The makefile rule for gconfig.h et al had a couple of blank lines
+in the middle of it. (gs.mak)
+
+</pre><h3><a name="V3.13_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - wrfont.ps didn't add a lenIV entry to the Private dictionary if
+it was needed. (wrfont.ps)
+
+Adds a packfile.ps utility that allows compressing multiple files into a
+single file for environments with very little permanent storage.
+(gs_pfile.ps, packfile.ps, wrfont.ps)
+
+</pre><h3><a name="V3.13_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The {tiff,fax}{g32d,g4} devices could produce incorrect output.
+See under Streams below.
+ - The dfax drivers referred to the obsolete structure member
+EncodedEOLAlign. (gdevdfax.c)
+
+Changes the default bit order for TIFF/F output to little-endian, which is
+apparently what the majority of TIFF decoders like best. The bit order for
+the fax drivers is still big-endian. (gdevdfax.c, gdevtfax.c)
+
+</pre><h3><a name="V3.13_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The VMS build script used -a rather than -w for creating
+gconfig_.h. (vms.mak)
+ - The VMS build script didn't create gconfigv.h. (vms.mak)
+ - The VMS Fontmap had incorrect entries for the Bitstream Charter
+fonts. (fontmap.vms)
+ - The VMS MODULES.LIS file assumed the JPEG library files were in
+directory JPEG rather than JPEG-5. (modules.lis)
+
+</pre><h3><a name="V3.13_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - Using DISKFONTS resulted in an invalidaccess error.
+(gs_fonts.ps)
+
+</pre><h3><a name="V3.13_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - The standard transfer function considered gray values above
+roughly 0.994 equivalent to white; 0.999 is a better value. (gs_init.ps)
+ - The transfer, black generation, and undercolor removal functions
+gave slightly inexact results for an input value of 0. (zcolor.c,
+zcontrol.c)
+ - setpagedevice gave an /undefined error if it did not recognize a
+key, rather than ignoring the key. (zdevice.c, gs_init.ps, gs_lev2.ps,
+gs_setpd.ps)
+
+Changes .putdeviceparams to take an additional argument, a Boolean that
+says whether or not unrecognized keys should be reported as /undefined
+errors. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, no user-written
+code should be calling .putdeviceparams. (zdevice.c)
+
+</pre><h3><a name="V3.13_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The Group 3 2-D and Group 4 fax encoders could emit incorrect
+output. (scfe.c)
+ - The algorithm for constructing optimal Huffman codes could
+produce invalid codes in some rare cases. (shcgen.c)
+
+</pre><h3><a name="V3.13_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Rectangles closed with lineto rather than closepath weren't
+recognized as rectangles. (This only affected performance, not
+functionality.) (gxpath2.c)
+ - The xfont lookup_font procedure could get called with a matrix
+whose translation components had never been initialized. (gxccman.c)
+ - Some compilers don't allow \ in the formal argument list of a
+preprocessor macro. (gdevprn.h, gxdevice.h)
+
+</pre>
+
+<h2><a name="Version3.12"></a>Version 3.12 (9/29/94)</h2>
+
+<p>
+This is another bug fix release, the first Level 2 release that we believe
+is reasonably reliable.
+
+<h3><a name="V3.12_Documentation"></a>Documentation</h3><pre>
+
+Adds some text warning about making copies of the makefile. (make.doc)
+
+</pre><h3><a name="V3.12_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - There were a number of unnecessary dependencies on $(MAKEFILE) in
+gs.mak, left over from before the existence of gconfigv.h. (gs.mak)
+ - JPEGSRC was defined in gs.mak rather than in jpeg.mak. (gs.mak,
+jpeg.mak)
+
+Changes the version numbering scheme back to A.BC, since people seem to be
+adapting to the change, and this allows using the version number directly
+as a MS-DOS directory name. (gconfig.c, gdevtfax.c, gs.c, gs_init.ps)
+
+Updates the JPEG library to version 5 (official release) of the IJG code.
+(jpeg/*, jpeg.mak)
+
+</pre><h3><a name="V3.12_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The TIFF/F driver put out invalid PageNumber and Software
+entries. (gdevtifs.h, gdevtfax.c)
+ - The TIFF/F and fax Group 3 2-D drivers used K=3 and K=5 instead
+of K=2 and K=4. (gdevtfax.c)
+ - The TIFF/F and fax Group 3 2-D drivers emitted improperly aligned
+output. (See under Streams below.)
+ - The MS Windows driver didn't resize the window properly in
+response to changing the device parameters. (gdevmswn.c)
+
+Because of complementary bugs in various C compilers, changes all the
+non-printer devices to use a different set of macros. (gdevmem.h,
+gdevpcfb.h, gdevprn.h, gdevsvga.h, gxdevice.h, gdev{3b1, bgi, herc, l256,
+pe, pm, sun, vglb, wddb, wdib, wprn, x}.c, gsdevice.c, gxacpath.c,
+gxclip2.c, gxcpath.c, gxpcmap.c, zupath.c)
+
+Changes the X11 driver to ignore the "margins" specified by Ghostview.
+This is apparently necessary for Ghostview to handle landscape display
+properly. (gdevxini.c)
+
+Adds a WindowID parameter to the X11 device, to allow setting the window
+for the output. (gdevx.h, gdevx.c, gdevxini.c)
+
+</pre><h3><a name="V3.12_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The definition of BEGINFILES in os2.mak occurred too late in the
+file to have the desired effect. (os2.mak)
+
+</pre><h3><a name="V3.12_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Updating the list of allocated file objects at a restore didn't
+clear the prev pointer of the new head, which could cause the garbage
+collector to encounter an invalid pointer. (Bug introduced by .forgetsave
+in 3.0.3.) (zfile.c)
+
+</pre><h3><a name="V3.12_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The CCITTFaxEncode filter with K &gt; 0 and EncodedByteAlign = true
+incorrectly aligned the 1-D/2-D bit as the last bit of a byte, rather than
+the first bit. (scfx.h, scfe.c)
+ - eexec could loop indefinitely under certain conditions.
+(seexec.c)
+ - eexec's algorithm for recognizing text vs. binary encoding didn't
+work properly in some cases that don't conform to the Adobe Type 1 Font
+Format documentation. (seexec.c)
+ - Closing a stream didn't clear out the strm and state pointers,
+which could cause invalid accesses by the garbage collector. (stream.c)
+
+</pre><h3><a name="V3.12_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - fill_loop could loop indefinitely under certain conditions.
+(Introduced by a bug fix in 3.1.) (gxfill.c)
+ - fill/eofill sometimes failed to paint parts of a region.
+(Introduced by a bug fix in 3.1.1.) (gxfill.c)
+ - Non-convex clipping paths sometimes omitted thin horizontal
+slivers of the region. (Probably introduced by the "thin graphics" fix in
+3.1.) (gxacpath.c)
+
+</pre>
+
+<h2><a name="Version3.1.1"></a>Version 3.1.1 (9/25/94)</h2>
+
+<p>
+This is primarily a bug fix release. It was originally intended for some
+commercial licensees, but beta testers found too many problems with it.
+
+<h3><a name="V3.1.1_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - NEWS didn't indicate that there was a non-backward-compatible
+change in the gx_device structure -- specifically, that l_margin,
+b_margin, r_margin, and t_margin were replaced by macros named
+dev_l_margin(dev), etc. (news)
+
+Describes the two-phase commit requirement for device put_params
+procedures. (drivers.doc, gsparam.h)
+
+</pre><h3><a name="V3.1.1_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The new S macro in genarch.c didn't work on compilers that do
+macro substitution within string constants (which is forbidden by the ANSI
+standard). (genarch.c)
+
+</pre><h3><a name="V3.1.1_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - Driver put_params implementations didn't observe a "two-phase
+commit" discipline; this could lead to the current device in the graphics
+state being closed, and other inconsistencies. (gsparam.h, gxdevice.h,
+iparam.h, gdevbit.c, gdevcdj.c, gdevmswn.c, gdevpcfb.c, gdevpm.c,
+gdevprn.c, gdevx.c, gsdevice.c, gsdparam.c, zdevice.c, ziodev2.c, zmisc2.c)
+THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, it only affects
+put_params implementations, of which there are few.
+
+NOTE THE NON-BACKWARD-COMPATIBLE CHANGE IN THE gx_device STRUCTURE UNDER
+'Documentation' ABOVE. (gdevescp.c, gdevsj48.c, gdevsppr.c, gdevxini.c)
+
+</pre><h3><a name="V3.1.1_Platforms"></a>Platforms</h3><pre>
+
+Ensures that the Unix makefiles all include all the variants of TIFF/F and
+fax drivers. (ansihead.mak, cc-head.mak, gcc-head.mak)
+
+</pre><h3><a name="V3.1.1_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Most of the contents of statusdict were missing when
+running a Level 2 system in Level 1 mode. (zmisc2.c)
+
+</pre>
+
+<h2><a name="Version3.1"></a>Version 3.1 (9/20/94)</h2>
+
+<p>
+This release finally includes a usable subset implementation of
+setpagedevice, including all the machinery needed to address the
+long-standing "margins" problems.
+
+<h3><a name="V3.1_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - t_oparray objects weren't identified as behaving differently
+depending on whether they were marked executable. (iref.h)
+ - drivers.doc had gx_color_value instead of gx_color_index in
+the description of color mapping. (drivers.doc)
+
+Updates drivers.doc to reflect the change from static_procs to
+std_procs in the gx_device structure. (drivers.doc)
+
+</pre><h3><a name="V3.1_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The commands for building the JPEG library used rm instead
+of rm -f. (jpeg.mak)
+
+</pre><h3><a name="V3.1_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The X Windows driver hadn't been updated to reflect some
+name changes in members of the gx_color_info structure. (gdevx.h,
+gdevx.c, gdevxini.c)
+
+Changes all non-printer drivers so that they use the new std_device_body
+macros. (gdev*.c)
+
+Adds a print_page_copies procedure for printer drivers, allowing the
+driver to receive num_copies. (gdevprn.h, gdevprn.c)
+
+</pre><h3><a name="V3.1_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - ref_memory_enum/reloc_ptrs were declared inconsistently.
+(ialloc.c)
+ - If the operand of restore was invalid, the restore did
+nothing, instead of giving a typecheck. (zvmem.c)
+ - In Level 2, the margins and setmargins compatibility
+operators were defined incorrectly in terms of current/setpagedevice.
+(gs_lev2.ps)
+
+Enables .makeoperator to make local operators as well as global ones.
+(opdef.h, iinit.c, zmisc.c, zpacked.c)
+
+Finishes implementing the TransferFunction entry in halftone
+dictionaries. (zht1.c, zht2.c)
+
+Adds .set/currentfilladjust operators for access to the fill
+adjustment parameter in the graphics state. (zgstate.h)
+
+Removes the deviceinitialmatrix operator. (zdevice.c)
+
+Changes defaultmatrix from a procedure to an operator. (zmatrix.c)
+
+Sets the fill adjustment to 0.5 for high-resolution devices, effectively
+implementing Adobe's any-part-of-pixel filling rule. (gs_init.ps)
+
+Implements a small but useful subset of setpagedevice. (gs_lev2.ps)
+
+</pre><h3><a name="V3.1_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The eexec decoder incorrectly concluded that its data was
+in hex form if the first data character was whitespace. (seexec.c)
+
+</pre><h3><a name="V3.1_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Thin graphics (e.g., lines or rectangles) with small angles
+relative to the X axis rendered with many points missing. (gxdraw.c,
+gxfill.c)
+ - The character cache rejected oversampled characters if the
+scaled-up size was too large, even if the scaled-down size wasn't.
+(gxchar.h, gschar.c, gxccache.c, gxccman.c)
+ - A call on sqrt with an integer argument didn't promote it
+explicitly to double, which is required for non-ANSI compilers.
+(gshtscr.c)
+
+Finishes implementing the TransferFunction entry in halftone
+dictionaries. (gsht1.c)
+
+Modifies the character oversampler so it can produce gray scale
+output instead of a 1-bit mask. We don't actually make use of this
+ability yet. (gxccman.c)
+
+Adds gs_set/currentfilladjust for access to the fill adjustment
+parameter in the graphics state. (gsstate.h, gsstate.c)
+
+Changes the names of the last few routines beginning with gz_ to
+begin with gx_ instead. (gzdraw.h =&gt; gxdraw.h, gsimage*.c, gxdraw.c,
+gxfill.c, gxstroke.c)
+
+Properly implements the PageSize, Margins, .HWMargins, and ImagingBBox
+device parameters for all devices. (gscoord.c, gsdparam.c, gspath2.c)
+Implements the NumCopies device parameter for printer devices.
+(gdevprn.c)
+
+Implements std_device_body macros to help insulate statically initialized
+non-printer devices from future changes in the gx_device structure.
+(gxdevice.h, ... many .c files ...)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version3.0.3"></a>Version 3.0.3 (9/16/94)</h2>
+
+<p>
+This is primarily a bug fix release; it also implements most of the
+remaining Level 2 loose ends (except for setpagedevice).
+
+<h3><a name="V3.0.3_Documentation"></a>Documentation</h3><pre>
+
+Changes code that refers to "Ghostscript" to use the correct product
+name from gs_product. (gs.mak, gdevpbm.c, gdevsun.c, gswppm.c)
+
+Documents the new .forgetsave operator. (language.doc)
+
+Clarifies the distinction between commercial licensing and single-copy
+end-user sales. (readme)
+
+</pre><h3><a name="V3.0.3_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The compilation rule for gdevadmp.c was missing from the
+makefile. (devs.mak)
+
+Changes the version numbering scheme back to A.B.C, since too many
+people got confused by the change to A.BC. (gconfig.c, gs.c,
+gs_init.ps)
+
+Adds a -dNOGC switch to prevent the garbage collector from being
+enabled. (gs_init.ps)
+
+</pre><h3><a name="V3.0.3_Utilities"></a>Utilities</h3><pre>
+
+Removes the ps2image utility, since the new psmono driver replaces it.
+
+</pre><h3><a name="V3.0.3_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The TIFF drivers incorrectly assumed that short and ulong
+were the same size as TIFF_short and TIFF_ulong, causing problems on
+64-bit systems. (gdevtfax.c)
+ - The EGA/VGA driver didn't do gray halftones properly if it
+was configured as a monochrome or 8-color device. (gdevpcfb.h)
+ - The comment in gdevevga.c incorrectly identified the file
+as gdevpcfb.c. (gdevevga.c)
+
+Changes the PC display drivers to save and restore more of the BIOS
+state. (gdevpcfb.h, gdevevga.c, gdevpcfb.c, gdevsco.c)
+
+Adds a new psmono driver that does the same thing as ps2image, faster
+and more conveniently. (gdevpsim.c)
+
+Replaces the X11 driver with the one from 3.01, since the color
+handling rewrite in 3.02 introduced serious bugs. (gdevx.h, gdevx.c,
+gdevxini.c)
+
+</pre><h3><a name="V3.0.3_Platforms"></a>Platforms</h3><pre>
+
+Changes the definition of gx_no_color_index to work around one of the
+bugs in the SGI Irix compiler. (gxdcolor.h)
+
+Rewrites the installation commands in unix-end.mak so they don't have
+very long lines. (unix-end.mak)
+
+</pre><h3><a name="V3.0.3_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - Fonts that used 2- or 4-element arrays in the Metrics dictionary
+interpreted the width and side bearing interchanged with each other.
+(gs_type1.ps)
+ - Setting FONTPATH on the command line didn't work. (gs_fonts.ps)
+
+</pre><h3><a name="V3.0.3_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The stream position wasn't updated properly if sgets
+crossed a buffer boundary. (stream.c)
+
+Extends the BoundedHuffman filters so they can encode and decode runs of
+zeros specially, and so they mark and detect EOD. (sbhc.h, shc.h, sbhc.c,
+zfilter2.c)
+
+Provides an alternate implementation of file streams which doesn't use
+stdio buffering and which works around the System V "interrupted system
+call" problem. (stream.c, sfile.c, sfileno.c)
+
+Increases the maximum LZW output code from 3000 to 4095. (slzwe.c)
+
+</pre><h3><a name="V3.0.3_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Opening a filter on a file of the wrong access type (read
+vs. write) didn't cause an error. (stream.h, sbasic.c, zfile.c, zfileio.c)
+ - save performed an extra, unnecessary gsave. (zvmem.c)
+ - sethalftone always gave a /undefined error. (zht2.c)
+ - eexec decryption read too much data from the input -- in
+Level 2, it isn't allowed to read 512 characters ahead. (sfilter.h,
+strimpl.h, seexec.c, sstring.c, zfileio.c, zmisc1.c)
+ - The scanner was too aggressive about allocating additional
+space for strings on small machines. (iscan.c)
+ - The AccurateScreens flag in Type 1 and Type 2 halftone
+dictionaries was being ignored. (zht2.c)
+ - The Level 2 definition of margins in statusdict didn't
+allow for Margins being undefined in the current page device.
+(gs_lev2.ps)
+ - The Interpolate flag was being ignored in image
+dictionaries. [implemented in library]
+ - The TransferFunction option was being ignored in halftone
+dictionaries. (zht2.c)
+ - Type 5 halftones usually didn't work, because they called
+the wrong (or an invalid) spot function. (zht2.c)
+
+Implements a .forgetsave operator that effectively causes a given save (and
+all more recent saves) to disappear. (isave.h, stream.h, isave.c, zfile.c,
+zvmem.c)
+
+</pre><h3><a name="V3.0.3_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - In the 1-operand form of the image operator, a Decode value of [1
+0] with 8-bit sample values and a single data source was treated the same
+as [0 1]. (gsimage1.c)
+ - Some Monotype fonts put a callsubr between an OtherSubr call and
+the following 'pop' opcodes (which the Adobe documentation forbids); The
+Type 1 font interpreter gave an invalidfont error rather than allowing
+this. (gxtype1.h, gstype1.c)
+ - Patterns didn't implement XStep and YStep properly.
+(gxpcolor.h, gspcolor.c, gxclip2.c)
+ - Clipping regions were sometimes 1 pixel too small at the edges;
+this could cause vertical and horizontal lines produced by certain Windows
+drivers to disappear. (gzpath.h, gxacpath.c, gxcpath.c, gxfill.c)
+ - Oversampling cached rotated characters produced very bad
+results (many dropouts). (gschar.c)
+ - Rendering a DeviceGray color on a DeviceCMYK device applied
+the transfer function to all 4 components, not just to the K
+component. (gxcmap.c)
+ - A screen specified with setcolorscreen didn't take effect
+properly on CMYK devices. (gsht.c)
+
+Implements the Interpolate option for images. Currently this is only
+implemented for portrait-orientation images (no rotation, skewing, or
+X-reflection). (gscspace.h, gximage.h, gscie.c, gscolor.c, gscolor1.c,
+gscolor2.c, gspcolor.c, gxcmap.c, gsimage.c, gsimage2.c, gsimage3.c)
+
+Implements AccurateScreens, but only in the form of a larger limit on
+the size of a halftone super-cell. (gxht.h, gsht.c, gsht1.c)
+
+Starts to implement the TransferFunction option for halftones.
+(gzht.h, gzstate.h, gsht.c, ...too many others to list...)
+
+</pre>
+
+<h2><a name="Version3.02"></a>Version 3.02 (8/30/94)</h2>
+
+<p>
+This is another bug fix release. It was distributed only to a few people,
+since the new X Windows color mapping code is not reliable yet.
+
+<h3><a name="V3.02_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - make.doc, but not unixtail.mak, called for setting PLATFORM=unix_
+on SVR4 platforms. (unixtail.mak)
+ - drivers.doc contained some wording that suggested that
+Ghostscript always used RGB colors internally. (drivers.doc)
+ - The definition of gx_device in drivers.doc had gotten out of sync
+with gxdevice.h. (drivers.doc)
+ - README claimed that Ghostscript is not compatible with the
+VAX/VMS DEC C compiler, which is no longer true. (readme)
+
+Adds a new section on printer drivers to drivers.doc. (drivers.doc)
+
+Adds a large number of new display boards to the 800x600 SVGA section of
+use.doc. (use.doc)
+
+Adds a bug report form to the README file. (readme)
+
+Notes that OSF/1 AXP systems require changing the definition of INSTALL
+from install to installbsd. (make.doc)
+
+</pre><h3><a name="V3.02_Procedures"></a>Procedures</h3><pre>
+
+Removes -Wno-uninitialized from the gcc flags, and fixes all the places (in
+Aladdin's code only) that need to be fixed to pacify gcc after doing this.
+(gcc-head.mak, gdevgif.c, gdevmem2.c, gdevpcl.c, gs.c, gsht1.c, gsimpath.c,
+gsutil.c, gxclread.c, gxpcopy.c, gxstroke.c, idict.c, iscannum.c, stream.c,
+zdevice2.c) (NOT FINISHED YET)
+
+Adds a FAKEFONTS switch that makes fake entries in FontDirectory for
+unloaded fonts, for the benefit of programs that think they can find all
+the available fonts by scanning FontDirectory. (gs_fonts.ps, gs_init.ps)
+
+</pre><h3><a name="V3.02_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - ps2epsi didn't work, because setdevice now erases the page.
+(ps2epsi.ps)
+ - ps2epsi didn't work, because -dNODISPLAY installs a null device
+with 0 width and height. The fix -- to remove the -dNODISPLAY -- is not
+satisfactory, because it opens an unnecessary window. (ps2epsi)
+
+</pre><h3><a name="V3.02_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - gdev_fax_open was incorrectly declared static in gdevtfax.c,
+causing the extern reference in the dfax drivers not to be resolved.
+(gdevtfax.c)
+ - devs.mak included a duplicate definition of gdevmswn_h.
+(devs.mak)
+ - The fax drivers didn't link properly in Level 1 systems, because
+shc.c was omitted from their dependency list. (gs.mak, devs.mak)
+ - The TIFF/F drivers didn't set RowsPerStrip properly.
+(gdevtfax.c)
+ - The TIFF/F drivers didn't byte-align the EOL properly. (scfx.h,
+gdevdfax.c, gdevtfax.c, scfe.c, zfilter2.c)
+ - The rule for compiling gdevpccm.c incorrectly specified
+dependency on gs.h rather than gx.h. (devs.mak)
+ - The rule for compiling gdevtfax.c didn't include time_.h as a
+dependency. (devs.mak)
+ - The mode 2 compression routine for the DeskJet/LaserJet printers
+was broken. (gdevpcl.c)
+
+Removes the -O0 from the compilation rule for gdevsco.c, since it was
+misplaced to begin with. (devs.mak)
+
+Adds a maxDynamicColors X resource to control dynamic allocation in the
+color map. Replaces the X color lookup algorithms with completely new
+ones, for a substantial performance gain. (gdevx.h, gdevx.c, gdevxini.c)
+
+Adds PageNumber, Software, and DateTime entries to the TIFF/F drivers.
+(gdevtifs.h, gdevtfax.c)
+
+Changes the margins for the LaserJet 4 to 0. (gdevdjet.c)
+
+Adds a user-contributed LaserJet 4 driver that does Floyd-Steinberg
+dithering. (gdevcdj.c)
+
+</pre><h3><a name="V3.02_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The exit codes for Ghostscript should be different on VMS.
+(iastate.h, gs.c, gsmain.c, igc.c, igcref.c)
+ - The VMS DEC C compiler declares malloc and free in stdlib.h, and
+delete and unlink in stdlib.h. (malloc_.h, stdio_.h)
+ - st_prn_device wasn't defined, which upset the VMS linker even
+though there were no references. (gdevprn.h)
+ - stdpre.h didn't bring in the right headers when running gcc on
+SCO Unix, causing compilation warnings/errors. (stdpre.h)
+ - The definition of rename in gp_sysv didn't include const for the
+arguments. (gp_sysv.c)
+ - The definition of gettimeofday in gp_sysv didn't return any
+value. (gp_sysv.c)
+ - time_.h didn't work on MS-DOS systems. (time_.h)
+ - math_.h didn't include &lt;math.h&gt; when compiling with gcc on VMS
+systems. (math_.h)
+ - DesqView/X doesn't have a 'cat' command, which caused problems in
+the linking step. (dvx-tail.mak)
+
+Changes the definitions of popen in gdevpipe.c and gp_unix.c so they don't
+specify the argument list. This is an attempt to get around the fact that
+there is no easy way to detect whether the available header files declare
+popen correctly (with const arguments), incorrectly (with non-const
+arguments), or not at all. (gdevpipe.c, gp_unix.c)
+
+Replaces VMS.MAK, VMS-CC.MAK, and VMS-AXP.MAK with new versions provided by
+a user. (vms.mak, vms-cc.mak, vms-axp.mak)
+
+Changes the 16-bit Borland makefiles so their standard configuration is
+Level 1 plus color.dev (CMYK color and colorimage). (bc.mak, bcwin.mak)
+
+</pre><h3><a name="V3.02_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - cfonts.mak still referred to some .gsf files that have been
+replaced by .pfa files. (cfonts.mak)
+ - Compiled fonts got entered into FontDirectory, but didn't get
+registered as resources. (gs_ccfnt.ps)
+ - The Cyrillic, Kana, Hershey .gsf, and URW fonts didn't include a
+necessary systemdict begin/end, which caused them to fail in badly designed
+environments. (fonts/f*.gsf, fonts/h*.gsf, fonts/?0*.gsf)
+
+Changes the default target directory in cfonts.mak from fonts/c to .;
+changes the names of the Zapf Chancery compiled font procedures from c* to
+zc*. (cfonts.mak)
+
+Adds more fonts from the Adobe Type Manager package for MS Windows to
+Fontmap.ATM. (fontmap.atm)
+
+Adds the entire set of 35 standard fonts to the ccfonts feature in gs.mak;
+removes all the compilation rules for compiled fonts, since these rules are
+in cfonts.mak already. (gs.mak)
+
+</pre><h3><a name="V3.02_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - kshow executed a null, rather than the correct procedure, between
+the characters of the string, and got a typecheck error at the end.
+(zchar.c)
+ - MultiMaster fonts computed their side bearing and width
+incorrectly, producing incorrect output. (zchar1.c)
+ - There was no structure definition for gs_type1_state, so a GC
+during the execution of an OtherSubrs procedure could scramble pointers in
+the saved state. (zchar1.c, zfont1.c; also affects library, see below)
+ - kshow didn't work properly if the kerning procedure changed the
+depth of the operand or dictionary stack. (zchar.c)
+ - If the element count for roll was too large by only 1 or 2, the
+result was a crash rather than a rangecheck. (zstack.c)
+ - restore didn't undo currentgstate. (igstate.h, store.h,
+gsstate.c, zdevice2.c, zdps1.c, ztype.c)
+ - The scanner didn't set the local bit properly in a suspended
+state. (iscan.c)
+ - copypage disregarded #copies. (gs_init.ps)
+ - An incorrectly declared pointer led to addressing faults on
+16-bit systems. (zchar1.c)
+ - The cache for Separation colors was allocated with one element
+too few. (zcsindex.c)
+
+Changes `executive' so that if an error other than EOF occurs in the
+reading of the statement, the interpreter prints the error message, but
+control remains in the executive loop. (This isn't a very good fix; a
+better one will require refactoring executive / execute / run.)
+(gs_init.ps)
+
+Changes dictionary undo saving to use the new ref_must_save macro [internal
+change only]. (idict.c)
+
+Moves configuration definitions from iinit.c to gconfig.c. (gcdefs.h,
+interp.h, gconfig.c, gs.c, iinit.c, zmisc2.c, gs.mak)
+
+Moves =string from systemdict to userdict for Adobe compatibility.
+(gs_init.ps)
+
+Starts to implement the Interpolate flag in image dictionaries. See under
+Library below for restrictions. (zpaint.c, zimage2.c)
+
+</pre><h3><a name="V3.02_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - stream_compact attempted to compact a read-only string being used
+as the data source of a filter. (sbasic.c, stream.c)
+
+Adds an EncodedEOLAlign flag to the CCITTFaxEncode stream, to allow direct
+generation of TIFF/F output. (scfx.h, scfe.c, zfilter2.c)
+
+</pre><h3><a name="V3.02_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - There was no structure definition for gs_type1_state, so a GC
+during the execution of an OtherSubrs procedure could scramble pointers in
+the saved state. (gxfont1.h, gxtype1.h, gstype1.c, gxhint2.c)
+ - A couple of calls had to discard const, but didn't include the
+necessary cast. (gxpcmap.c)
+ - makeimagedevice refused to accept an empty image. (gsdevice.c)
+ - The extra parentheses around arguments in memory_.h caused some
+compilers to fail. (memory_.h)
+ - Floating point overflows during coordinate conversion terminated
+Ghostscript. (gxfarith.h, gxfixed.h, gsmatrix.c, gsmisc.c)
+ - Accents still weren't getting placed properly on characters
+created with seac. (gstype1.c, gxhint2.c)
+ - The SGI C compiler couldn't handle the (perfectly legal)
+definitions of dev_init_[open_]misc. (gxdevice.h)
+ - string_.h caused some problems with gcc on some versions of
+Solaris. (string_.h)
+ - The halftone levels for color screens were computed incorrectly.
+(gzht.h, gxdither.c)
+ - Color screens sometimes had vertical stripes of solid color
+interspersed. (gxcht.c)
+ - Colors could get mapped incorrectly if a compiler aggressively
+(and incorrectly) reordered the computation of procedure arguments
+involving the unit_frac macro. (gxcmap.c)
+ - setcachedevice[2] insisted that the corners of the bounding box
+be given in the correct order, i.e., llx &lt; urx and lly &lt; ury. (gschar.c)
+ - The image operator gave a limitcheck on unrotated 1-bit-per-pixel
+images whose width in device coordinates exceeded 65529. (gsimage.c)
+ - The garbage collector didn't trace the input data of an
+in-progress image operator correctly. (gsimage.c)
+
+Changes the max_rgb and dither_rgb members of gx_device_color_info to
+max_color and dither_colors, since Ghostscript now uses these for CMYK
+devices as well. Also changes dither_gray to dither_grays. (gdevmem.h,
+gdevprn.h, gxdevice.h, gdevbit.c, gdevcdj.c, gdevprn.c, gdevxini.c,
+gsdparam.c, gxcht.c, gxcmap.c)
+
+Starts to implement the Interpolate option for images. Currently this is
+only implemented for image, not imagemask, and only for rotations that are
+multiples of 90 degrees (possibly with reflection). (gsimage.h,
+gsiscale.h, gximage.h, gsimage.c, gsimage1.c, gsiscale.c)
+
+Starts to implement XStep and YStep in pattern dictionaries. (gxdcolor.h,
+gxpcolor.h, gspcolor.c, gxpcmap.c)
+
+</pre>
+
+<h2><a name="Version3.01"></a>Version 3.01 (8/14/94)</h2>
+
+<p>
+This is a patch release to fix early problems in release 3.0, and to clean
+up a few known loose ends.
+
+<h3><a name="V3.01_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - language.doc still documented the devicename procedure, which has
+been withdrawn. (language.doc)
+ - drivers.doc didn't specify under what circumstances each
+procedure could be called. (drivers.doc)
+ - current.doc said that setcachedevice and makeimagedevice wouldn't
+accept packed arrays, but neither of these operators takes any array
+arguments. (current.doc)
+ - current.doc said that definefont didn't interact properly with
+the resource machinery, which apparently is no longer true. (current.doc)
+ - make.doc incorrectly gave the name of the DVX makefile as
+dvx-djg.mak rather than dvx-gcc.mak. (make.doc)
+ - In one place, devices.doc incorrectly used -sBitsPerPixel= rather
+than -dBitsPerPixel=. (devices.doc)
+
+Notes that a kernel bug in SCO Unix makes Ghostscript not work correctly in
+some circumstances. (use.doc)
+
+</pre><h3><a name="V3.01_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - devs.mak incorrectly referred to gdevjetp.c instead of
+gdev3852.c. (devs.mak)
+ - The obsolete file gsprops.c was accidentally included in the
+fileset.
+
+Changes the version numbering scheme from A.BCC to A.B[C]. E.g., this
+release will be 3.01, not 3.001. (gs_init.ps, gs.c, iinit.c)
+
+Adds the LaserJet 4 driver to all makefiles that already include the
+LaserJet 3 driver. (*.mak)
+
+Adds the BJ-200 driver to all makefiles that already included the BJ-10e
+driver. (*.mak)
+
+Splits the Unix 'install' target into install-exec and install-data. Moves
+the executable scripts from gsdatadir to a new directory scriptdir, which
+defaults to bindir. (ansihead.mak, cc-head.mak, gcc-head.mak,
+unix-end.mak)
+
+</pre><h3><a name="V3.01_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - genconf had fixed buffer sizes built into it, which it could
+overrun its working storage without checking. (genconf.c)
+
+Removes RCS or SCCS headers from two utility files. (pj-gs.sh,
+printafm.ps)
+
+</pre><h3><a name="V3.01_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The new dfaxhigh and dfaxlow drivers didn't set
+state.EncodedByteAlign to false. (gdevdfax.c)
+ - The sunview driver assumed that the device would be open before
+map_rgb_color was called. (gdevsun.c)
+ - The CP50 driver incremented page_count itself, rather than
+letting the core library do it. (gdevcp50.c)
+ - The GIF driver(s) could loop indefinitely under certain
+circumstances. (gdevgif.c)
+ - The Group 4 fax drivers incorrectly included end-of-line codes in
+the output. (gdevtfax.c, gdevdfax.c)
+ - The Group 4 fax drivers could put out an EOB in the middle of the
+data. (scfe.c)
+ - The DesignJet 650C driver didn't use the correct compression
+mode. (gdevcdj.c)
+ - The Hercules and EGA/VGA/SVGA drivers computed the page height
+incorrectly according to the A4 switch. (gdevherc.c, gdevpcfb.h)
+
+Changes the page_count and showpage_count members of the device structure
+from int to long. (gxdevice.h, gdevprn.c, gsdparam.c)
+
+Changes the faxg3, faxg32d, and faxg4 drivers so that, like the TIFF and
+dfax drivers, they adjust the page size to one of the three CCITT standard
+sizes if this is reasonable. (gdevtfax.c)
+
+Splits the bit driver into bit, bitrgb, and bitcmyk. Adds bitrgb and
+bitcmyk to all makefiles that included bit. (*.mak, devs.mak, gdevbit.c)
+
+Replaces the atiw16, tseng16, and tvga16 SuperVGA drivers with a single
+svga16 driver that allows specifying the display mode number. (devs.mak,
+gdevpcfb.c)
+
+</pre><h3><a name="V3.01_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The MS Windows and OS/2 drivers allocated their terminal input
+buffers in a way that could cause the GC to crash. (gp_mswin.c, gp_os2.c)
+ - The handling of gettimeofday on SVR4 platforms was incorrect.
+(time_.h, gp_sysv.c, gp_unix.c)
+ - On some platforms, function prototypes were not enabled even if
+__STDC__ was defined. (stdpre.h)
+ - The VMS build script referred to an obsolete feature lev2only.
+(vms.mak)
+
+Changes the DVX platform so that stdprn is buffered. This should improve
+printing performance dramatically. (gp_dvx.c)
+
+</pre><h3><a name="V3.01_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - Setting DISKFONTS resulted in a reference to FontFileDirectory
+before it was defined. (gs_type1.ps, gs_fonts.ps)
+ - /Font findresource gave an error rather than doing font
+substitution. (gs_res.ps)
+ - FontDirectory wasn't rebound to GlobalFontDirectory when global
+VM was current. (gs_res.ps, zdict.c)
+ - Type 1 fonts weren't loaded into global VM. (gs_fonts.ps)
+ - In the standard Fontmap, the Utopia fonts had extension .gsf
+rather than .pfa. (fontmap.gs)
+ - Fonts whose FontBBox was [0 0 0 0] were not displayed, or were
+displayed as tiny dots. (gs_type1.ps)
+
+</pre><h3><a name="V3.01_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - dict_put could read from the variable pvslot before it was used.
+(This was harmless, since the value was never actually used; it just upset
+Purify.) (idict.c)
+ - Binary object sequences could cause addressing faults.
+(iscanbin.c)
+ - The attributes on names were set incorrectly in binary object
+sequences. (iscanbin.c)
+ - gs.c duplicated (in some cases incorrectly) some definitions in
+interp.h. (gs.c)
+ - gs_lib_paths was declared const in one place and non-const in
+another. (zfile.c)
+ - file_restore and font_restore had inconsistent const declarations
+for their argument. (isave.c)
+ - iodev_os_open_file was missing its last formal parameter.
+(ziodev.c)
+ - gs.c declared gs_devicename with an incorrect extern. (gs.c)
+ - undefinefont didn't interact properly with the resource
+machinery. (gs_lev2.ps)
+ - The declaration for swap_entry used a typedef name as a formal
+parameter, which upset some compilers. (zmisc2.c)
+ - Including the ccinit feature could cause the garbage collector to
+make an invalid access. (stream.c)
+ - The check for t_[a]struct types in ztype.c was incorrect.
+(ztype.c)
+ - After the collection of halftone samples, temporary data
+structures were freed incorrectly. (gzht.h, gsht1.c, zht.c)
+ - Images with source width between 489 and 492 crashed the
+memory manager. (iastate.h)
+
+Makes it possible to define SEARCH_HERE_FIRST (gsmain.c) in the makefile.
+(gsmain.c)
+
+Splits the Level 2 resource machinery into a separate file. (gs_lev2.ps,
+gs_res.ps, gs.mak, unix-end.mak, vms.mak).
+
+Changes the names of the DiffEncode/Decode filters to
+PixelDifferenceEncode/Decode, and splits them off into a separate
+"feature". (gs.mak, zfilter2.c, zfpdiff.c, spdiff.c, spdiffx.h)
+
+Adds experimental code for filtered image scaling. DON'T USE THIS CODE.
+(zimage2.c)
+
+</pre><h3><a name="V3.01_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The CCITTFaxEncode filter could put out an EOB in the middle of
+the data. (scfe.c)
+
+Splits off the PixelDifferenceEncode/Decode filters into a separate
+"feature". (gs.mak)
+
+</pre><h3><a name="V3.01_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - gs_setcachedevice could return a garbage error code. (gschar.c)
+ - joins on stroked lines were incorrect if the device coordinate
+system mapped +Y to +Y. (gxstroke.c)
+ - If gsmisc.c supplied versions of missing library routines, they
+could clash with the names of the real ones if those were present
+unexpectedly. (memory_.h, gsmisc.c)
+ - The initialization expression for is_open in the
+dev_init_misc_open macro included a cast, which some compilers don't allow.
+(gxdevice.h, gsdevice.c, gxclip2.c, gxpcmap.c)
+ - In Type 1 fonts, character that specified their side bearing and
+width with sbw rather than hsbw gave an invalidfont error. (gstype1.c)
+ - Some procedures were declared inconsistently with regard to const
+arguments. (gscie.c, gxpcmap.c, gxacpath.c, gxcmap.c)
+ - A few places still assumed that pointers occupied 4 bytes.
+(gxclist.c)
+ - Rendering a gray halftone on a CMYK device called the device's
+map_rgb_color procedure instead of map_cmyk_color. (gxdither.c)
+
+Renames gsfile.c as gswppm.c. (gsfile.c, gswppm.c)
+
+Implements the ability to cache arbitrarily transformed characters. This
+is currently enabled by a compile-time flag in gschar.c. (gschar.c)
+
+</pre>
+
+<h2><a name="Version3.0"></a>Version 3.0 (8/1/94)</h2>
+
+<p>
+This is the first full Level 2 version released to the public.
+Unfortunately, we were not able to include setpagedevice in this release.
+
+<h3><a name="V3.0_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - README didn't mention Aladdin's European distributor.
+ - psfiles.doc didn't describe some of the newer gs_*.ps files.
+
+Notes that gcc -O2 (version 2.5.8 of gcc) generates incorrect code for some
+modules on the H-P RISC architecture.
+
+Notes that on AXP platforms running VMS, DEC C V4.0 is required.
+
+</pre><h3><a name="V3.0_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - 'make clean' didn't delete devs.tr or t.tr.
+ - devs.mak was missing the entry for faxg32d.
+ - unixansi.mak omitted some drivers that were included in
+unix-cc.mak and unix-gcc.mak.
+
+Updates jpeg.mak to reference version 5beta1 of the IJG JPEG code.
+
+Changes the version numbering scheme from A.B.C to A.B[CC]. I.e., the
+first sub-release after 3.0 will be 3.01 or 3.001, not 3.0.1.
+
+</pre><h3><a name="V3.0_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - ps2ascii didn't do a setglobal.
+
+Adds an option to ansi2knr to convert ... to va_alist/va_dcl.
+
+</pre><h3><a name="V3.0_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The newly added faxg32d driver didn't have an entry in devs.mak.
+ - The BMP, GIF, and PCX drivers wrote out an incorrect color
+palette (the blue values were too small).
+ - The vgalib driver had some compilation problems.
+ - The TIFF drivers didn't produce correct multi-page output.
+
+Adds faxg32d and tiffg32d drivers.
+
+Reinstates the DigiFax drivers, which were withdrawn when the new fax
+drivers were added.
+
+</pre><h3><a name="V3.0_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - gs_btokn.ps and gs_ccfnt.ps weren't installed on Unix platforms.
+ - The VMS module list omitted SBHC, included a non-existent GXDASH,
+and had incorrect names for some of the IJG JPEG files.
+ - The VMS build scripts (vms*.mak) had incorrect "boilerplate".
+ - The VMS script file gssetmod.com had \r characters in it, as well
+as \n characters.
+ - The echogs and genarch utilities didn't return the correct exit
+codes under VMS.
+ - The VMS Fontmap had incorrect entries for the Courier and Charter
+fonts.
+ - When running under Ghostview, Ghostscript didn't drain the input
+pipe. (We fixed this with a temporary patch in gs.c; this isn't a good
+solution for the longer term.)
+
+</pre><h3><a name="V3.0_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - The free AvantGarde, Bookman, and Palatino font families had
+incorrect FontBBox values.
+ - The 'f' and 'j' in the free AvantGarde-DemiOblique,
+Bookman-DemiItalic, Bookman-LightItalic, and Palatino-Italic fonts were
+chopped off on the right. (The bitmaps were chopped off in the original
+BDF fonts from which these fonts were made.) ****** THIS PROBLEM WAS NOT
+ACTUALLY FIXED. ******
+
+</pre><h3><a name="V3.0_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - gs -h and gs -v didn't print the tertiary version number correctly.
+ - Binary object sequences with no strings or names didn't read in
+correctly.
+ - Binary object sequences that crossed an input buffer boundary
+didn't read in correctly.
+ - Binary object sequences read in as {[e1 .. en] e1 ... en} instead
+of {[e1 ... en]}. (New bug in 2.9.x.)
+ - setpattern didn't set the current color space correctly if the
+current color space wasn't a Pattern space.
+ - If the current color space was an uncolored Pattern space but the
+current color was a colored Pattern, currentcolor returned extra values on
+the operands stack.
+ - .buildfont1 in gs_type1.ps didn't force binding of the old
+definition, causing ps2ascii to loop endlessly.
+
+Adds a facility for writing and reading dictionaries in binary object
+sequences. This is experimental and subject to change in the future.
+
+</pre><h3><a name="V3.0_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - gs_run_string and ccinit didn't have any way to mark the string
+as "foreign", which confused the GC.
+
+</pre><h3><a name="V3.0_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - gxchar.h had an extra comma after the last element of the
+show_width_status enum, which upset some compilers.
+ - stroke and strokepath didn't correctly skip zero-length segments
+if the line width was less than one pixel, or if there was a closed subpath
+consisting entirely of zero-length segments.
+ - strokepath sometimes incorrectly added a moveto at the end of the
+path.
+</pre>
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 1997, 1998 Aladdin Enterprises.
+All rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/History4.htm b/Master/xemtex/doc/ghostscript/History4.htm
new file mode 100644
index 00000000000..35e67000138
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/History4.htm
@@ -0,0 +1,3980 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>History of Ghostscript versions 4.n</title>
+<!-- $Id: History4.htm,v 1.13.2.11.2.6 2003/05/17 14:38:59 giles Exp $ -->
+<!-- Originally: history4.txt -->
+<!--
+ WARNING: do not use Pete Kaiser's emacs function "gs-toc" alone to
+ re-create the table of contents here, because it will replace the
+ hand-edited TOC subheads with a separate subhead for each H2 in
+ the body of the file. Or if you do, first look at the original
+ TOC to see how to edit it for visual conciseness.
+-->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>History of Ghostscript versions 4.n</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Version4.81">Version 4.81 (6/1/97)</a>
+<ul>
+<li><a href="#V4.81_Documentation">Documentation</a>,
+ <a href="#V4.81_Procedures">Procedures</a>,
+ <a href="#V4.81_Utilities">Utilities</a>,
+ <a href="#V4.81_Drivers">Drivers</a>,
+ <a href="#V4.81_Platforms">Platforms</a>,
+ <a href="#V4.81_Interpreter">Interpreter</a>,
+ <a href="#V4.81_Library">Library</a>
+</ul>
+<li><a href="#Version4.80">Version 4.80 (limited) (5/28/97)</a>
+<ul>
+<li><a href="#V4.80_Documentation">Documentation</a>,
+ <a href="#V4.80_Procedures">Procedures</a>,
+ <a href="#V4.80_Utilities">Utilities</a>,
+ <a href="#V4.80_Drivers">Drivers</a>,
+ <a href="#V4.80_Platforms">Platforms</a>,
+ <a href="#V4.80_Fonts">Fonts</a>,
+ <a href="#V4.80_Interpreter">Interpreter</a>,
+ <a href="#V4.80_Streams">Streams</a>,
+ <a href="#V4.80_Library">Library</a>
+</ul>
+<li><a href="#Version4.74">Version 4.74 (limited) (5/5/97)</a>
+<ul>
+<li><a href="#V4.74_Documentation">Documentation</a>,
+ <a href="#V4.74_Utilities">Utilities</a>,
+ <a href="#V4.74_Drivers">Drivers</a>,
+ <a href="#V4.74_Interpreter">Interpreter</a>,
+ <a href="#V4.74_Streams">Streams</a>,
+ <a href="#V4.74_Library">Library</a>
+</ul>
+<li><a href="#Version4.73">Version 4.73 (limited) (4/19/97)</a>
+<ul>
+<li><a href="#V4.73_Documentation">Documentation</a>,
+ <a href="#V4.73_Procedures">Procedures</a>,
+ <a href="#V4.73_Utilities">Utilities</a>,
+ <a href="#V4.73_Drivers">Drivers</a>,
+ <a href="#V4.73_Platforms">Platforms</a>,
+ <a href="#V4.73_Interpreter">Interpreter</a>,
+ <a href="#V4.73_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V4.73_Streams">Streams</a>,
+ <a href="#V4.73_Library">Library</a>
+</ul>
+<li><a href="#Version4.72">Version 4.72 (limited) (4/14/97)</a>
+<ul>
+<li><a href="#V4.72_Documentation">Documentation</a>,
+ <a href="#V4.72_Procedures">Procedures</a>,
+ <a href="#V4.72_Drivers">Drivers</a>,
+ <a href="#V4.72_Platforms">Platforms</a>,
+ <a href="#V4.72_Interpreter">Interpreter</a>,
+ <a href="#V4.72_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V4.72_Streams">Streams</a>,
+ <a href="#V4.72_Library">Library</a>
+</ul>
+<li><a href="#Version4.71">Version 4.71 (limited) (3/31/97)</a>
+<ul>
+<li><a href="#V4.71_Documentation">Documentation</a>,
+ <a href="#V4.71_Procedures">Procedures</a>,
+ <a href="#V4.71_Drivers">Drivers</a>,
+ <a href="#V4.71_Interpreter">Interpreter</a>,
+ <a href="#V4.71_Streams">Streams</a>,
+ <a href="#V4.71_Library">Library</a>
+</ul>
+<li><a href="#Version4.70">Version 4.70 (limited) (3/26/97)</a>
+<ul>
+<li><a href="#V4.70_Documentation">Documentation</a>,
+ <a href="#V4.70_Procedures">Procedures</a>,
+ <a href="#V4.70_Drivers">Drivers</a>,
+ <a href="#V4.70_Platforms">Platforms</a>,
+ <a href="#V4.70_Interpreter">Interpreter</a>,
+ <a href="#V4.70_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V4.70_Streams">Streams</a>,
+ <a href="#V4.70_Library">Library</a>
+</ul>
+<li><a href="#Version4.61">Version 4.61 (limited) (3/13/97)</a>
+<ul>
+<li><a href="#V4.61_Documentation">Documentation</a>,
+ <a href="#V4.61_Procedures">Procedures</a>,
+ <a href="#V4.61_Drivers">Drivers</a>,
+ <a href="#V4.61_Platforms">Platforms</a>,
+ <a href="#V4.61_Interpreter">Interpreter</a>,
+ <a href="#V4.61_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V4.61_Streams">Streams</a>,
+ <a href="#V4.61_Library">Library</a>
+</ul>
+<li><a href="#Version4.60">Version 4.60 (limited) (3/2/97)</a>
+<ul>
+<li><a href="#V4.60_Documentation">Documentation</a>,
+ <a href="#V4.60_Procedures">Procedures</a>,
+ <a href="#V4.60_Drivers">Drivers</a>,
+ <a href="#V4.60_Platforms">Platforms</a>,
+ <a href="#V4.60_Fonts">Fonts</a>,
+ <a href="#V4.60_Interpreter">Interpreter</a>,
+ <a href="#V4.60_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V4.60_Streams">Streams</a>,
+ <a href="#V4.60_Library">Library</a>
+</ul>
+<li><a href="#Version4.51">Version 4.51 (limited) (2/9/97)</a>
+<ul>
+<li><a href="#V4.51_Procedures">Procedures</a>,
+ <a href="#V4.51_Drivers">Drivers</a>,
+ <a href="#V4.51_Platforms">Platforms</a>,
+ <a href="#V4.51_Interpreter">Interpreter</a>,
+ <a href="#V4.51_Streams">Streams</a>,
+ <a href="#V4.51_Library">Library</a>
+</ul>
+<li><a href="#Version4.50">Version 4.50 (limited) (1/31/97)</a>
+<ul>
+<li><a href="#V4.50_Documentation">Documentation</a>,
+ <a href="#V4.50_Procedures">Procedures</a>,
+ <a href="#V4.50_Drivers">Drivers</a>,
+ <a href="#V4.50_Platforms">Platforms</a>,
+ <a href="#V4.50_Interpreter">Interpreter</a>,
+ <a href="#V4.50_Streams">Streams</a>,
+ <a href="#V4.50_Library">Library</a>
+</ul>
+<li><a href="#Version4.41">Version 4.41 (private) (1/21/97)</a>
+<ul>
+<li><a href="#V4.41_Procedures">Procedures</a>,
+ <a href="#V4.41_Drivers">Drivers</a>,
+ <a href="#V4.41_Fonts">Fonts</a>,
+ <a href="#V4.41_Interpreter">Interpreter</a>,
+ <a href="#V4.41_Streams">Streams</a>,
+ <a href="#V4.41_Library">Library</a>
+</ul>
+<li><a href="#Version4.40">Version 4.40 (private) (1/13/97)</a>
+<ul>
+<li><a href="#V4.40_Documentation">Documentation</a>,
+ <a href="#V4.40_Utilities">Utilities</a>,
+ <a href="#V4.40_Drivers">Drivers</a>,
+ <a href="#V4.40_Interpreter">Interpreter</a>,
+ <a href="#V4.40_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V4.40_Library">Library</a>
+</ul>
+<li><a href="#Version4.39">Version 4.39 (limited) (1/1/97)</a>
+<ul>
+<li><a href="#V4.39_Documentation">Documentation</a>,
+ <a href="#V4.39_Procedures">Procedures</a>,
+ <a href="#V4.39_Utilities">Utilities</a>,
+ <a href="#V4.39_Drivers">Drivers</a>,
+ <a href="#V4.39_Interpreter">Interpreter</a>,
+ <a href="#V4.39_Streams">Streams</a>,
+ <a href="#V4.39_Library">Library</a>
+</ul>
+<li><a href="#Version4.38">Version 4.38 (limited) (12/20/96)</a>
+<ul>
+<li><a href="#V4.38_Interpreter">Interpreter</a>,
+ <a href="#V4.38_Streams">Streams</a>,
+ <a href="#V4.38_Library">Library</a>
+</ul>
+<li><a href="#Version4.37">Version 4.37 (limited) (12/10/96)</a>
+<ul>
+<li><a href="#V4.37_Fonts">Fonts</a>,
+ <a href="#V4.37_Interpreter">Interpreter</a>,
+ <a href="#V4.37_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V4.37_Library">Library</a>
+</ul>
+<li><a href="#Version4.36">Version 4.36 (limited) (12/3/96)</a>
+<ul>
+<li><a href="#V4.36_Documentation">Documentation</a>,
+ <a href="#V4.36_Drivers">Drivers</a>,
+ <a href="#V4.36_Interpreter">Interpreter</a>,
+ <a href="#V4.36_Library">Library</a>
+</ul>
+<li><a href="#Version4.35">Version 4.35 (limited) (11/24/96)</a>
+<ul>
+<li><a href="#V4.35_Documentation">Documentation</a>,
+ <a href="#V4.35_Procedures">Procedures</a>,
+ <a href="#V4.35_Interpreter">Interpreter</a>,
+ <a href="#V4.35_Streams">Streams</a>,
+ <a href="#V4.35_Library">Library</a>
+</ul>
+<li><a href="#Version4.34">Version 4.34 (limited) (11/18/96)</a>
+<ul>
+<li><a href="#V4.34_Documentation">Documentation</a>,
+ <a href="#V4.34_Procedures">Procedures</a>,
+ <a href="#V4.34_Drivers">Drivers</a>,
+ <a href="#V4.34_Interpreter">Interpreter</a>,
+ <a href="#V4.34_Streams">Streams</a>,
+ <a href="#V4.34_Library">Library</a>
+</ul>
+<li><a href="#Version4.33">Version 4.33 (limited) (11/6/96)</a>
+<ul>
+<li><a href="#V4.33_Documentation">Documentation</a>,
+ <a href="#V4.33_Procedures">Procedures</a>,
+ <a href="#V4.33_Interpreter">Interpreter</a>,
+ <a href="#V4.33_Library">Library</a>
+</ul>
+<li><a href="#Version4.32">Version 4.32 (limited) (11/1/96)</a>
+<ul>
+<li><a href="#V4.32_Documentation">Documentation</a>,
+ <a href="#V4.32_Drivers">Drivers</a>,
+ <a href="#V4.32_Platforms">Platforms</a>,
+ <a href="#V4.32_Fonts">Fonts</a>,
+ <a href="#V4.32_Interpreter">Interpreter</a>,
+ <a href="#V4.32_Library">Library</a>
+</ul>
+<li><a href="#Version4.31">Version 4.31 (limited) (10/27/96)</a>
+<ul>
+<li><a href="#V4.31_Documentation">Documentation</a>,
+ <a href="#V4.31_Procedures">Procedures</a>,
+ <a href="#V4.31_Platforms">Platforms</a>,
+ <a href="#V4.31_Interpreter">Interpreter</a>,
+ <a href="#V4.31_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V4.31_Streams">Streams</a>,
+ <a href="#V4.31_Library">Library</a>
+</ul>
+<li><a href="#Version4.30">Version 4.30 (limited) (10/23/96)</a>
+<ul>
+<li><a href="#V4.30_Documentation">Documentation</a>,
+ <a href="#V4.30_Drivers">Drivers</a>,
+ <a href="#V4.30_Platforms">Platforms</a>,
+ <a href="#V4.30_Fonts">Fonts</a>,
+ <a href="#V4.30_Interpreter">Interpreter</a>,
+ <a href="#V4.30_Library">Library</a>
+</ul>
+<li><a href="#Version4.21">Version 4.21 (limited) (10/17/96)</a>
+<ul>
+<li><a href="#V4.21_Documentation">Documentation</a>,
+ <a href="#V4.21_Procedures">Procedures</a>,
+ <a href="#V4.21_Drivers">Drivers</a>,
+ <a href="#V4.21_Platforms">Platforms</a>,
+ <a href="#V4.21_Fonts">Fonts</a>,
+ <a href="#V4.21_Interpreter">Interpreter</a>,
+ <a href="#V4.21_Library">Library</a>
+</ul>
+<li><a href="#Version4.20">Version 4.20 (limited) (10/13/96)</a>
+<ul>
+<li><a href="#V4.20_Documentation">Documentation</a>,
+ <a href="#V4.20_Procedures">Procedures</a>,
+ <a href="#V4.20_Utilities">Utilities</a>,
+ <a href="#V4.20_Drivers">Drivers</a>,
+ <a href="#V4.20_Interpreter">Interpreter</a>,
+ <a href="#V4.20_Library">Library</a>
+</ul>
+<li><a href="#Version4.10">Version 4.10 (limited) (9/25/96)</a>
+<ul>
+<li><a href="#V4.10_Documentation">Documentation</a>,
+ <a href="#V4.10_Utilities">Utilities</a>,
+ <a href="#V4.10_Drivers">Drivers</a>,
+ <a href="#V4.10_Interpreter">Interpreter</a>,
+ <a href="#V4.10_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V4.10_Library">Library</a>
+</ul>
+<li><a href="#Version4.03">Version 4.03 (9/23/96)</a>
+<ul>
+<li><a href="#V4.03_Documentation">Documentation</a>,
+ <a href="#V4.03_Procedures">Procedures</a>,
+ <a href="#V4.03_Drivers">Drivers</a>,
+ <a href="#V4.03_Fonts">Fonts</a>,
+ <a href="#V4.03_Streams">Streams</a>
+</ul>
+<li><a href="#Version4.02">Version 4.02 (9/19/96)</a>
+<ul>
+<li><a href="#V4.02_Documentation">Documentation</a>,
+ <a href="#V4.02_Procedures">Procedures</a>,
+ <a href="#V4.02_Utilities">Utilities</a>,
+ <a href="#V4.02_Drivers">Drivers</a>,
+ <a href="#V4.02_Platforms">Platforms</a>,
+ <a href="#V4.02_Interpreter">Interpreter</a>,
+ <a href="#V4.02_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V4.02_Streams">Streams</a>,
+ <a href="#V4.02_Library">Library</a>
+</ul>
+<li><a href="#Version4.01">Version 4.01 (7/10/96)</a>
+<ul>
+<li><a href="#V4.01_Documentation">Documentation</a>,
+ <a href="#V4.01_Procedures">Procedures</a>,
+ <a href="#V4.01_Utilities">Utilities</a>,
+ <a href="#V4.01_Platforms">Platforms</a>,
+ <a href="#V4.01_Platforms">Platforms</a>,
+ <a href="#V4.01_Interpreter">Interpreter</a>,
+ <a href="#V4.01_Library">Library</a>
+</ul>
+<li><a href="#Version4.0">Version 4.0 (6/28/96)</a>
+<ul>
+<li><a href="#V4.0_Documentation">Documentation</a>,
+ <a href="#V4.0_Procedures">Procedures</a>,
+ <a href="#V4.0_Utilities">Utilities</a>,
+ <a href="#V4.0_Drivers">Drivers</a>,
+ <a href="#V4.0_Platforms">Platforms</a>,
+ <a href="#V4.0_Interpreter">Interpreter</a>,
+ <a href="#V4.0_Streams">Streams</a>,
+ <a href="#V4.0_Library">Library</a>
+</ul>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>
+This document is a history of Ghostscript releases numbered 4.n. For more
+recent changes, see the the other history documents and, for the latest
+versions, the news:
+
+<blockquote>
+<a href="News.htm">News</a><br>
+History of Ghostscript versions 4.n (this document)<br>
+<a href="History3.htm">History of Ghostscript versions 3.n</a><br>
+<a href="History2.htm">History of Ghostscript versions 2.n</a><br>
+<a href="History1.htm">History of Ghostscript versions 1.n</a>
+</blockquote>
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<h2><a name="Version4.81"></a>Version 4.81 (6/1/97)</h2>
+
+<p>
+This is a last-minute set of bug fixes before the 5.0 release.
+
+<h3><a name="V4.81_Documentation"></a>Documentation</h3><pre>
+
+Adds some overlooked helpers to the list. (helpers.txt)
+
+</pre><h3><a name="V4.81_Procedures"></a>Procedures</h3><pre>
+
+Makes a distinction between 2-part and 3-digit version numbers.
+(version.mak, vms.mak)
+
+</pre><h3><a name="V4.81_Utilities"></a>Utilities</h3><pre>
+
+Develops the Type 1 to CFF converter a little further; it is still NOT
+USABLE. (t1tot2.ps)
+
+Removes the pstoppm.ps script, since the p*m drivers supersede it.
+(pstoppm.ps, unix-end.mak)
+
+</pre><h3><a name="V4.81_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The PDF writer sometimes omitted an ET command before setting the
+clip path. (gdevpdf.c)
+ - The PDF writer didn't initialize the "vector" state, leading to
+some redundant output (performance bug only). (gdevpdf.c)
+ - The PDF writer wrote clip paths even when they included the entire
+page (performance bug only). (gdevpdf.c)
+
+Changes the PDF writer so that it recognizes not only the 14 built-in fonts
+but any font with the same UniqueID and metrics. This covers some common
+cases of re-registering a font with a variant Encoding. (gs_pdfwr.ps)
+
+</pre><h3><a name="V4.81_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - SEARCH_HERE_FIRST was accidentally set to 0 on MS Windows
+platforms. (bcwin32.mak, msvc4.mak, msvc5.mak, watcw32.mak)
+
+Adds code to remove "" around arguments in the command line passed to
+WinMain (MS Windows platforms). (dwmain.cpp, dwmainc.cpp)
+
+</pre><h3><a name="V4.81_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - setsystemparams was broken. (gs_lev2.ps)
+ - restore was broken if -dNOBIND was invoked. (gs_dps1.ps)
+ - deviceinfo returned much more information than it should.
+(gs_dps.ps)
+ - The fix for the default EndPage procedures not popping their page
+count operand from the stack was wrong. (gs_init.ps, gs_setpd.ps)
+
+</pre><h3><a name="V4.81_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The saved character origin took the translation component of the
+FontMatrix into account, which caused charpath on fonts with non-zero
+translation in the FontMatrix to produce incorrect results. (gschar.c)
+
+Removes incorrect access attributes on a couple of files. (gdevpdfm.c,
+gxclist.h)
+
+</pre>
+
+<h2><a name="Version4.80"></a>Version 4.80 (limited) (5/28/97)</h2>
+
+<p>
+This is the candidate fileset for the 5.0 release.
+
+<h3><a name="V4.80_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - The one-line description of the color image rendering module was
+incorrect. (gximage3.c)
+ - Some of the VMS documentation was out of date. (make.txt,
+use.txt)
+ - The description of the file name separator for -sFONTMAP= was
+wrong. (use.txt)
+ - PSFile was misspelled PSfile. (use.txt)
+ - There were some minor typos. (gstype1.h)
+ - The build instructions had a lot of obsolete information for PC
+environments, and didn't cover Microsoft Visual C++. (make.txt)
+
+Explains that -sPAPERSIZE= only specifies the default papersize, and that
+forcing a particular paper size also requires -dFIXEDMEDIA. (use.txt)
+
+Adds information about building with GNU make on OpenVMS. (make.txt)
+
+Clarifies the meaning of EOFC for streams. (strimpl.h)
+
+Documents the new dictionary argument for the eexecDecode filter.
+(language.doc)
+
+</pre><h3><a name="V4.80_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - gs_epsf.ps didn't get installed on Unix systems. (unix-end.mak)
+ - The code wouldn't build with libpng 0.95b. (libpng.mak)
+ - One of the VMS scripts used CC_QUAL instead of CC_DEF.
+(vms-cc.mak)
+ - version.mak wasn't included in a dependency list. (unix-end.mak)
+
+Brings the VMS DCL script up to date again (for the last time, we hope).
+(vms.mak)
+
+Modifies all platform-independent uses of upper-case command line arguments
+to deal properly with VMS, where the shell converts all command line
+arguments to lower case, without requiring quotation. (devs.mak, gs.mak,
+int.mak, lib.mak, zlib.mak)
+
+Moves the compilation rules for the third-party libraries into gs.mak, so
+they can be used to compile the callers as well. (gs.mak, jpeg.mak,
+libpng.mak, zlib.mak)
+
+Adds a set of files that allow building on OpenVMS using GNU make (slightly
+patched). The timing on this is unfortunate, but we've wanted this for a
+very long time. NOTE: be sure to look in the OpenVMS section of make.txt
+for information on patching GNU make. (openvms.mak, append_l.com,
+rm_all.com, rm_one.com, copy_one.com)
+
+Adds new makefiles for building on 32-bit Windows with Borland, Watcom, and
+Microsoft Visual C++ (versions 4.x and 5.0). The timing on this is
+unfortunate too, but having this capability is so important that we couldn't
+pass it up. (bcwin32.mak, msvc4.mak, msvc5.mak, msvccom.mak, watcw32.mak,
+wincom.mak)
+
+Removes now-obsolete makefiles. (dwcommon.mak, msc.mak, msvcwint.mak,
+mscbegin.bat, watcwin.mak)
+
+</pre><h3><a name="V4.80_Utilities"></a>Utilities</h3><pre>
+
+Extends echogs to work in VMS environments, where the shell converts all
+command line arguments to lower case, without requiring quotation.
+(echogs.c)
+
+Adds a sketch of a utility for converting Type 1 fonts to CFF. DOESN'T WORK
+YET: DON'T TRY TO USE IT. (t1tot2.ps, type1ops.ps, writecff.ps)
+
+</pre><h3><a name="V4.80_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - A type declaration wasn't compatible with libpng 0.95.
+(gdevpng.c)
+ - kshow wasn't handled properly when producing PDF output.
+(gs_pdfwr.ps)
+ - The PDF writer put out unnecessary ET/BT commands. (gdevpdfx.h,
+gdevpdf.c, gdevpdfi.c, gdevpdfm.c, gdevpdft.c)
+ - The PCL XL writer put out real numbers for the miter limit, which
+are not allowed (!). (gdevpx.c)
+ - The PCL XL writer didn't combine successive curves into a single
+curve command (performance bug only). (gdevpx.c)
+ - The PCL XL writer could write uncompressed images with a tag
+saying they were compressed. (gdevpx.c)
+ - The PCL XL writer always selected U.S. letter paper, rather than
+the requested size. (gdevpxen.h, gdevpx.c)
+ - The PCL XL writer reselected the paper size on every page, even if
+it hadn't changed. (gdevpx.c)
+ - The PCL XL writer always used shorts for line and curve
+coordinates, rather than using bytes when possible (performance bug only).
+(gdevpx.c)
+ - Because of a compiler bug, a macro with argument conflicted with a
+variable name. (gdevpdfx.h, gdevpdf.c)
+ - A picky compiler objected to an extern for an undefined structure.
+(gdevpsdf.h)
+ - The PDF writer sometimes didn't reset the clipping path, causing
+bitmaps or rectangle to disappear. (gdevpdf.c, gdevpdfi.c)
+ - The PDF writer produced invalid output if the first page was
+blank. (gdevpdf.c)
+ - The AutoRotatePages parameter for PostScript and PDF output (which
+doesn't actually do anything yet) incorrectly expected a Boolean value
+rather than an enumeration. (gdevpsdf.h, gdevpsdf.c)
+ - Some places returned -1 for an error without calling gs_note_error
+or gs_return_error. (gdevm1.c, gdevmpla.c, gdevrun.c, gxclpath.c)
+ - The PCL XL writer produced extremely large files because it didn't
+download character bitmaps. (OK, this isn't really a bug fix.) (gdevpx.c)
+ - The forwarding implementation of get_page_device didn't do the
+right thing. (gdevnfwd.c)
+ - The x11alpha device didn't implement get_params properly, leading
+to anomalous behavior. (gdevxalt.c)
+ - The PDF writer produced incorrect Count values for outlines: the
+count only counted descendant leaves, omitting intermediate nodes.
+(gdevpdfm.c)
+
+Removes an assumption that images have at most 4 components. (gdevpdfi.c)
+
+Adds an x11gray2 device, primarily for debugging. (devs.mak, gdevxalt.c)
+
+Updates the unified printer driver with a newer version. (uninfo.ps,
+gdevupd.c, *.upp)
+
+</pre><h3><a name="V4.80_Platforms"></a>Platforms</h3><pre>
+
+Adds the P*M devices and the X11 devices (commented out) to the OS/2
+makefile. (os2.mak)
+
+Updates the MS Windows platform to be compatible with Microsoft Visual C++
+(as well as Watcom and Borland compilers). (gsdll32.def, gdevmswn.h,
+gp_mswin.h, gsdll.h, dwimg.cpp, dwmain.cpp, dwmainc.cpp, dwtext.cpp,
+gdevwdib.c, gdevwprn.c, gdevwpr2.c, gp_mswin.c, gsdll.c)
+
+</pre><h3><a name="V4.80_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - Certain synthetic fonts incorrectly were loaded into local rather
+than global VM. (These fonts are not part of the standard distribution.)
+(gs_fonts.ps, gs_pfile.ps, *ss*.ps)
+
+</pre><h3><a name="V4.80_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - The FAKEFONTS scan could leave junk on the stack. (gs_fonts.ps)
+ - Dynamically loading known encodings on demand left junk on the
+stack, causing a typecheck error. (gs_res.ps)
+ - Some 'static' declarations were missing (gcc lossage). (iname.c)
+ - Some internal operators didn't have names, leading to unhelpful
+error printout. (zfileio.c)
+ - The resource "operators" didn't always restore the stacks properly
+on an error. (gs_res.ps)
+ - The CID font code left a garbage value on the stack during
+loading. (gs_cidfn.ps)
+ - The defineresource implementation for built-in resources like
+FMapType didn't leave the resource "value" on the stack. (gs_res.ps)
+ - If an operator defined by a procedure was bound into a packed
+procedure, the stack-protection feature wasn't effective. (interp.c)
+ - findfont didn't restore the stack if it failed. (gs_res.ps)
+ - The showpage count passed to the BeginPage and EndPage procedures
+was incremented only if a page was printed, rather than for every invocation
+of showpage. (gs_init.ps, zdevice2.c)
+ - The default EndPage procedures didn't pop their page count operand
+from the stack. (gs_init.ps, gs_setpd.ps)
+ - If the argument of findfont wasn't a name or a string, and no font
+with that key had been registered, an error occurred. (gs_fonts.ps,
+gs_res.ps)
+
+Updates most of the remaining pseudo-operators to take advantage of stack
+protection. (gs_btokn.ps, gs_cmap.ps, gs_dps1.ps, gs_dps2.ps, gs_fonts.ps,
+gs_lev2.ps, gs_pdfwr.ps)
+
+Splits the image operators into a separate file from the path painting
+operators. (This should have been done a long time ago.) (iimage.h,
+zimage.c, zpaint.c)
+
+Adds more of the implementation of the NeXT alpha and compositing
+operations, under an #ifdef DPNEXT. (iimage.h, zcolor1.c, zdpnext.c,
+zimage.c)
+
+Adds more of the implementation of DPS contexts. These are still not
+usable. (icontext.h, icontext.c, zcontext.c, zmath.c)
+
+Changes the help message to describe -dBATCH instead of -c quit.
+(imainarg.c)
+
+Recognizes the dictionary argument for the eexecDecode filter. (zmisc1.c)
+
+</pre><h3><a name="V4.80_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The tracing message when starting to decode 1-D fax data reported
+the run_color incorrectly. (scfd.c)
+ - In the CCITTFaxDecode filter, if a buffer boundary fell between a
+makeup code and a final zero-length termination code, an ioerror could
+occur. (scfd.c)
+ - Per Adobe, in the CCITTFaxDecode filter, EndOfBlock = true should
+cause Rows to be ignored. (scfd.c)
+ - If an output stream returned EOFC, an infinite loop might result.
+This problem (and the fix) are in the same fragile code as the EOD fix in
+4.74, and we may again have introduced a new bug. (stream.c)
+
+Changes the eexecDecode filter so that instead of a number, it can take a
+dictionary with two keys, seed and lenIV. (Having eexecDecode skip initial
+bytes at all was a design bug that is too late to fix.) (sfilter.h,
+seexec.c)
+
+</pre><h3><a name="V4.80_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The default mapping from RGB+alpha to RGB didn't lighten
+(premultiply) the color according to the alpha value. (gxcmap.c)
+ - The angle error metric for rational tangent screen parameters
+should be simply the difference in angle, not a ratio. (gshtscr.c)
+ - gs_setcolorscreen and gs_sethalftone didn't initialize an
+allocator pointer, leading to memory access errors. (gsht1.c)
+ - If a banded image was clipped, an invalid band list could be
+produced. (gxclimag.c)
+ - A picky compiler wouldn't allow an enum to be &amp;&amp;'ed with a
+boolean. (gschar.c)
+ - A short-sighted compiler didn't allow the use of actual procedure
+names (as opposed to procedure variables) in a conditional expression.
+(gxfill.c)
+ - A compiler objected to a name longer than 31 characters. (gzht.h,
+gsht.c, gxclread.c)
+ - The height computations for banded images were not consistent,
+possibly leading to invalid band lists. (gxclimag.c)
+ - copypage didn't reset the band writer and band reader bookkeeping
+consistently, leading to incorrect output and possible errors. (gxcldev.h,
+gxclist.c, gxclread.c)
+ - When banding, changing the halftone could lead to accessing memory
+after freeing it. (gxclread.c)
+ - When using disk files for band storage, showpage didn't actually
+delete or truncate the band list file, possibly causing subsequent copypage
+operations to become confused. (gxclfile.c)
+ - When banding, having more than one image operator in progress at a
+time confused the rasterizing pass and could produce arbitrary errors. From
+PostScript, this can only happen in the case of an image whose data source
+was a procedure-based stream that itself invoked an image operator: this is
+a senseless and perverse thing to do, but it shouldn't break the code (and a
+Genoa CET file actually does it). (gxclist.h, gxclimag.c, gxclist.c)
+ - Some picky compilers objected to negating unsigned values.
+(gsuid.h, gsht.c, gsmemory.c, gxpcopy.c)
+ - When banding, if a 90- or 270-degree rotated monobit image was
+clipped, invalid memory accesses could occur. (gximage.h, gximage1.c)
+ - The showpage count passed to the BeginPage and EndPage procedures
+was incremented only if a page was printed, rather than for every invocation
+of showpage. Fixing this requires removing the incrementing of the count
+from the library level altogether. (gsdevice.c)
+ - When rendering a subrectangle of an image, the X DDA was
+initialized incorrectly, causing possible errors. We think this only
+affected certain banded images. (gxdda.h)
+
+Adds a provision for images with an alpha component, under an #ifdef DPNEXT.
+****** THE BANDING CODE HAS NOT BEEN UPDATED YET. ****** (gsiparam.h,
+gxcmap.h, gxdither.h, gximage.h, gsimage.c, gxclimag.c, gxclread.c,
+gxcmap.c, gximage.c, gximage3.c, gximage4.c ****** NOT DONE YET ******,
+gximage5.c)
+
+Adds a return_if_error macro to capture the common idiom of making a call
+and then returning its value if that value is negative (error). (gserror.h)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version4.74"></a>Version 4.74 (limited) (5/5/97)</h2>
+
+<p>
+This fileset is supposed to fix all remaining errors reported by the Genoa
+CET, and is intended to be the last incremental test fileset before the 5.0
+release.
+
+<h3><a name="V4.74_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - Mark procedures are *not* executed in the normal return case.
+(estack.h)
+ - The line_params element of a gs_imager_state is *not* allocated
+separately. (gsstate.c)
+ - The value passed to the PDF writer for text is a dictionary, not
+an array. (gdevpdft.c)
+
+Improves the documentation of gstate memory management. (gsstate.c)
+
+Documents end_status = EOFC for writing streams. (stream.h, strimpl.h)
+
+Clarifies memory management for halftones and device halftones. (gsht1.h,
+gxdht.h, gxht.h, gzht.h)
+
+Removes the "experimental" tag from the PostScript and EPS writers.
+(devs.mak)
+
+</pre><h3><a name="V4.74_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - The viewpcx utility scaled images improperly. (viewpcx.ps)
+ - If a PDF file used F instead of f for filling a path, pdf2ps
+didn't output the fill operation. (pdf_base.ps)
+
+Changes the ps2pdf script so that, like pdf2ps, it allows debugging
+switches. (ps2pdf)
+
+</pre><h3><a name="V4.74_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The vgalib driver didn't clip monobit images properly.
+(gdevvglb.c)
+ - The X driver asked for exposure events to be reported, but never
+read them, causing the event queue to grow indefinitely. (gdevxini.c)
+ - The "vector" drivers and the PDF writer didn't properly keep track
+of whether the current clipping region was the default one. (gs_pdfwr.ps,
+gdevvec.h, gdevvec.c, gdevpdf.c, gdevpdft.c)
+ - The PDF writer had word and character spacing interchanged.
+(gdevpdft.c)
+ - The PDF writer scaled word and character spacing incorrectly.
+(gdevpdft.c)
+
+</pre><h3><a name="V4.74_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - The user object operators didn't leave the stack in a clean state
+if they failed. (gs_dps2.ps)
+ - UserObjects wasn't actually defined. (gs_dps2.ps)
+ - deviceinfo and set/currenthalftonephase were defined even if the
+dps feature wasn't selected. (int.mak, gs_dps.ps, gs_dps1.ps, gs_lev2.ps,
+zdps.c, zdps1.c)
+ - The dps feature didn't automatically include the level2 feature,
+which it needs. (int.mak)
+ - The DPS user names mechanism didn't work, since the user names
+array was subject to save and restore. (It still doesn't really work --
+there is no provision for expanding the user names array, which is created
+with length 0.) (gs_btokn.ps, ivmspace.h, zbseq.c, zdps.c)
+ - The DPS context operators didn't do all the necessary error
+checking. (zcontext.c)
+ - The debugging printout for names printed the name index in hex
+without identifying it as such. (idebug.c)
+ - Adding the first non-name key (or name key with a name index
+beyond 4K) to a dictionary that had any deleted entries could cause some
+entries to apparently disappear. (idict.c)
+ - If a sub-table of the name table was freed during garbage
+collection, memory could be left in an inconsistent state. (iname.c, igc.c)
+ - findfont didn't restore the stacks reliably if an error occurred.
+(gs_fonts.ps)
+ - definefont with an invalid Type 0 font sometimes added a FID entry
+(with a dangling pointer) if it failed. (Recovering properly from a VMerror
+during font creation would require a much more complicated fix than this,
+but since we expect a garbage collection to occur in that case, we aren't
+concerned about it.) (zfont0.c)
+ - Reading parameter values from a dictionary could access beyond the
+end of the array that keeps track of which entries had been referenced.
+(idict.h, idict.c, iparam.c)
+ - Halftone data was allocated in the current VM rather than in the
+same VM as the halftone dictionary or procedure. (Fixing this includes
+updating code as necessary for the change in halftone and device halftone
+allocation.) (iht.h, ivmspace.h, zht.c, zht1.c, zht2.c)
+ - Closed non-executable files on the e-stack could cause a restore
+to be invalid. (zvmem.c)
+
+Adds skeleton code for the NeXT Display PostScript alpha and compositing
+operators. This is not ready for use yet! (errors.h, gs_dpnxt.ps,
+zdpsnext.c)
+
+Implements more of state saving and restoring for Display PostScript
+contexts. This is not ready for use yet either. (int.mak, icontext.h,
+istack.h, icontext.c, zcontext.c)
+
+Adds stub code for the Display PostScript view clip operators. (gs_dps.ps,
+zdps.c)
+
+Removes the obsolete PPM-writing operator. (int.mak, vms.mak, *.mak,
+zwppm.c)
+
+Makes the random number generator state public so it can be stored in the
+context state. (zmath.c)
+
+Changes the flag for forcing global garbage collection to a run-time
+variable, for debugging. (igc.c)
+
+Changes the handling of job control so that it doesn't use procedures that
+produce an execstackoverflow when being printed. (gs_init.ps)
+
+Updates code as necessary for the change in reference counting. (zcie.c,
+zcrd.c)
+
+Updates code as necessary for the change in off-stack gstate copying.
+(zdps1.c)
+
+Removes a small bit of obsolete code. (interp.c)
+
+</pre><h3><a name="V4.74_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - An output stream that was not the last one in a pipeline could
+incorrectly be asked to write its EOD marker more than once. (The fix is
+very fragile and may have introduced new bugs.) (stream.c)
+
+</pre><h3><a name="V4.74_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The gx_device_halftone_release procedure was declared in two
+different header files. (gzht.h)
+ - Off-stack copying of gstates could lead to a situation where
+different parts of a single gstate were owned by different allocators; this
+could cause them to be freed improperly, corrupting memory. We fixed this
+partly by making the mixed ownership situation work, and partly by copying
+more of the gstate when off-stack gstates are involved. Unfortunately, the
+fixes are subtle and may have introduced new bugs. (gsstate.h, gsht.c,
+gsht1.c, gspcolor.c, gsstate.c)
+ - If an error occurred while creating a Pattern instance, the
+partially initialized instance structure wasn't freed. (gspcolor.c)
+ - Halftones and device halftones didn't allocate their clones or
+their subsidiary structures with the correct allocator. (gsht.c, gsht1.c)
+ - The error statement when allocating a reference-counted object had
+to be a control transfer. (gsrefct.h)
+ - Copying gstates incorrectly copied the memory and saved pointers,
+and the pointer to the dash pattern. (gsstate.c)
+ - Flatness values less than 0.5 produced far more line segments than
+necessary (roughly the square of the required number). Fixing this may have
+bad effects on character quality -- this remains to be seen. (gxpflat.c)
+ - An error during installation of a halftone could leave things in
+an inconsistent state. (gsht.c)
+ - The API didn't provide enough flexibility with respect to memory
+management for halftones, or guarantee consistent allocation of a halftone
+and its subelements. (gsht1.h, gsht.c, gsht1.c, gshtscr.c)
+ - Releasing a path didn't clear enough pointers to ensure clean
+garbage collection. (gxpath.c)
+ - Finalizing or discarding a (cached) scaled font didn't properly
+unlink it from the scaled_fonts list. (gsfont.c)
+ - Invoking an image operator within the BuildChar procedure for a
+charpath caused an infinite loop. (gsimage.c)
+ - The bookkeeping for the scaled font cache was incorrect: the count
+didn't always get decremented when a scaled font was freed. (gsfont.c)
+ - "High level" masked images were written incorrectly in the band
+list as black-and-white images. (gxclimag.c)
+ - For "high level" images with fewer than 4 samples per pixel,
+non-standard Decode values were written incorrectly in the band list.
+(gxclimag.c)
+ - The color wasn't set correctly for "high level" masked images.
+(gxclimag.c)
+ - The fastest case of monobit image rendering could get a memory
+access error if the image lay partly outside the page. (gximage1.c)
+ - Clipping with an empty path was a no-op, rather than clipping out
+everything. (gxcpath.c)
+
+Makes reference-counted objects remember which allocator owns them: this
+entails a NON-BACKWARD-COMPATIBLE change to some of the macros for reference
+counting. This was necessary to fix the off-stack gstate copying problem.
+(gsrefct.h, gscie.c, gscolor.c, gscolor1.c, gscolor2.c, gscsepr.c,
+gsstate.c, gxclread.c)
+
+Refactors the unpacking of image data, to make unpacking available as a
+general facility. (gximage.h, gxsample.h, gximage.c, gximage0.c,
+gximage1.c, gximage4.c, gxsample.c)
+
+Enhances -Z? so that before freeing an object, it checks that the object was
+owned by the correct allocator. (gsalloc.c)
+
+</pre>
+
+<h2><a name="Version4.73"></a>Version 4.73 (limited) (4/19/97)</h2>
+
+<p>
+This is an incremental bug fix release made primarily to provide a
+synchronization point for an upcoming trip.
+
+<h3><a name="V4.73_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - A reference to the uniprint documentation was incorrect.
+(current.txt)
+ - -Olimit 1000 is not enough now for DEC Ultrix, 1200 is required;
+this is also required for SGI IRIX. (make.txt)
+
+Adds argument/result comments to all the operators defined in gs_lev2.ps.
+(Eventually we will do this for all operators defined as PostScript
+procedures.) (gs_lev2.ps)
+
+</pre><h3><a name="V4.73_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The makefiles didn't provide a default value for GCONFIG_EXTRAS.
+(gs.mak)
+
+</pre><h3><a name="V4.73_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - pdf2ps didn't work with TrueType or compressed Type 1 fonts.
+(gs_pdf.ps, pdf_2ps.ps, pdf_font.ps)
+
+</pre><h3><a name="V4.73_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - A cast from byte to char was omitted. (gdevpdfm.c)
+
+</pre><h3><a name="V4.73_Platforms"></a>Platforms</h3><pre>
+
+Updates the VMS script (again). (vms.mak)
+
+</pre><h3><a name="V4.73_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - A module that used strlen didn't include string_.h. (zdevice.c)
+ - Because of some bad PostScript code in FrameMaker output, identity
+rather than unity black generation and undercolor removal functions are
+required on black-and-white devices. (gs_init.ps)
+ - A harmless internal error during initialization left bogus
+information in $error. (gs_cidfn.ps)
+ - startjob didn't clear the execution stack. Fixing this required
+NON-BACKWARD-COMPATIBLE changes to the internal operators .instopped, .stop,
+and .stopped, which are not supposed to be used by any external code.
+(startjob will still give errors if executed in a file that isn't being
+piped from stdin; this will take longer to fix.) (gs_init.ps, gs_lev2.ps,
+iref.h, imain.c, interp.c, zcontrol.c, zfile.c)
+
+Adds a new .execn operator, part of the startjob changes, that allows
+pushing multiple items on the exec stack. Eventually this will allow us to
+get rid of many dynamically created closures. (zcontrol.c)
+
+</pre><h3><a name="V4.73_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - Landscape-mode PDF files weren't rotated properly. (gs_pdf.ps,
+pdf_main.ps)
+
+Makes the default PDF configuration notify users more informatively when
+encountering an encrypted file. (pdf_sec.ps)
+
+</pre><h3><a name="V4.73_Streams"></a>Streams</h3><pre>
+
+Makes the RunLengthEncode filter always generate optimally compressed
+output. We did this because we thought one of the Genoa CET files loops
+forever if this is not the case; but we were wrong. (srle.c)
+
+</pre><h3><a name="V4.73_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - If one coordinate of a position or distance overflowed the
+internal representable range, the other coordinate became garbage. (bug
+introduced in 4.70) (gspath.c)
+ - The bounding box computation for strokes was slightly too large
+(sometimes much too large). (gxpaint.h, gdevbbox.c, gxclpath.c, gxstroke.c)
+
+Adds (under an #if 0) an experimental alternate halftone cell choice
+algorithm. (gshtscr.c)
+
+Adds a better comment to a particularly obscure line of C code.
+(gxclimag.c)
+
+</pre>
+
+<h2><a name="Version4.72"></a>Version 4.72 (limited) (4/14/97)</h2>
+
+<p>
+This is another bug fix release, motivated mostly by Genoa testing. It also
+updates the new uniprint driver with a major revision, and upgrades CFF
+support a little bit.
+
+<h3><a name="V4.72_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - -dNOGC only disables default automatic garbage collection, not all
+garbage collection. (use.txt)
+ - Apparently a different set of flags is needed for newer H-P
+compilers. (make.txt)
+
+Replaces the tiny FAQ with a pointer to the on-line FAQ. (use.txt)
+
+Updates the documentation for the uniprint driver. (devices.txt)
+
+Clarifies the fact that Ghostscript reads Fontmap files from *all*
+directories in the search list. (use.txt)
+
+Notes that building on GNU/Linux may require SM and ICE in the list of X
+libraries. (make.txt)
+
+</pre><h3><a name="V4.72_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - An -include type42 was omitted from the level2 module description.
+(int.mak)
+ - A mention of $(ECHOGS) in the rule for sfile should have been
+$(ECHOGS_XE). (lib.mak)
+ - The pcx2up sample device should have been put in devs.mak rather
+than lib.mak. (devs.mak, lib.mak)
+ - scanchar.h and scantab.c belong in the library, not the
+interpreter. (devs.mak, int.mak, lib.mak)
+ - Some _h definitions were used before being defined, or weren't
+defined at all. (devs.mak, lib.mak)
+ - The JPEG driver was missing a dependency. (devs.mak)
+ - The PDF writer was missing a dependency. (devs.mak)
+ - Building Level 1 systems was no longer possible. (int.mak)
+
+Updates the VMS build scripts. (vms.mak, vms-decc.mak)
+
+Adds *.upp to the list of files installed under Unix. (unix-end.mak)
+
+Adds rules to the Unix makefiles to build two library files: gs.a,
+consisting of the entire PostScript/PDF interpreter lacking only gs.c, and
+gslib.a, consisting of the graphics library without the gslib.c test driver.
+(ansihead.mak, cc-head.mak, gcc-head.mak, unixtail.mak)
+
+</pre><h3><a name="V4.72_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The PS/EPS writers could generate a reference to an undefined
+name. (gdevps.c)
+ - The PDF writer produced incorrect output for multi-level outlines.
+(gdevpdfm.c)
+ - The PDF writer didn't convert /Action to /A, and /Action/Subtype
+to /S, in Annot dictionaries. (gdevpdfm.c)
+ - The PDF writer didn't work in Level 1 systems. (gs_pdfwr.ps)
+ - The PDF writer didn't transform /Rect and /R values to current
+user coordinates. (gs_pdfwr.ps, gdevpdfx.h, gdevpdfm.c)
+ - The PNG writer could refer to the 3 predefined stdio files even in
+environments where this was undesirable. (gdevpng.c)
+ - The PDF writer had a compiled-in limit of 100 pages of output.
+(gdevpdfx.h, gdevpdf.c)
+
+Updates the uniprint driver with a major revision that uses device
+parameters that can be set from the command line, rather than PostScript
+code, for configuration choices. (gdevupd.c, *.upp)
+
+</pre><h3><a name="V4.72_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - gp_enumerate_files_next had no way to return an error. (gp.h,
+gp_dosfe.c, gp_ntfs.c, gp_os2.c, gp_unifs.c, gp_vms.c) ****** NOT
+IMPLEMENTED YET ******
+ - On the Watcom platform, CPU_TYPE &gt;= 486 didn't automatically set
+FPU_TYPE to 387. (wccommon.mak)
+
+</pre><h3><a name="V4.72_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Caching the current device in userdict could create dangling
+references. (gs_init.ps, gs_pdfwr.ps, zdevice.c)
+ - If an error occurred in a BuildChar or BuildGlyph procedure, the
+graphics state stack wasn't restored. (ichar.h, zchar.c, zchar2.c)
+ - There was an obsolete check for a structure when cleaning up after
+a show operator. (zchar.c)
+ - Attempting to show a character with no associated glyph in a Type
+3 font with a BuildGlyph procedure caused an error. (zchar.c)
+ - noaccess on a read-only dictionary didn't give an error.
+(ztype.c)
+ - The dictionary passed to a Pattern's PaintProc was the original
+template, not the copy made by makepattern. (gs_lev2.ps)
+ - Invalid font parameters could result in partially constructed
+fonts, which caused problems for restore. (zfont0.c, zfont2.c)
+ - Files run under job control caused an error when terminating.
+(gs_init.ps)
+ - setpagedevice didn't protect itself against malfunctioning
+BeginPage or EndPage procedures. (The protection is still not perfect.)
+(gs_setpd.ps)
+ - .type42execchar called font_param redundantly. (zchar42.c)
+ - The font operators didn't protect themselves well enough against
+bogus font dictionaries. (zfont.c, zfont0.c)
+ - If an error occurred within a stringwidth, the graphics state
+stack wasn't restored properly. (zchar.c)
+ - If an error occurred within the PaintProc of a form, the graphics
+state stack was left with an extra entry. (gs_lev2.ps)
+ - Registering a font under a second name could corrupt data
+structures. (zfont2.c)
+ - Different scalings of the same font should have "equal" fontIDs,
+to match the Adobe implementations. (iutil.c)
+ - Errors detected by PostScript code during initialization either
+allowed execution to continue or produced a hex stack dump, instead of just
+producing a message and exiting. (interp.c)
+ - The memory validator didn't validate chunks at previous save
+levels. (ilocate.c)
+ - The Level 1 size of systemdict was too small. (iinit.c)
+ - Attempting to define a Category resource in local VM gave a
+typecheck error rather than an invalidaccess. (gs_res.ps)
+ - Building Level 1 systems was no longer possible. (zusparam.c)
+
+Rearranges the interpreter code slightly so that all operator invocations go
+through a single procedure when debugging. (interp.c)
+
+Adds a -K&lt;numK&gt; switch to limit the total amount of memory that Ghostscript
+can acquire. (imainarg.c)
+
+Makes the memory validator check packed refs more carefully. (ilocate.c)
+
+Makes the memory validator check explicitly for pointers to freed objects.
+(igc.c, ilocate.c)
+
+Makes the memory validator check dictionaries more carefully. (ilocate.c)
+
+Makes the memory validator check refs embedded in structures. (ilocate.c)
+
+Adds a debugging option that bypasses the garbage collector entirely.
+(igc.c)
+
+Adds debugging options to validate memory before/after save/restore.
+(zvmem.c)
+
+Removes the patch for the uniprint driver, since it is no longer needed.
+(gs_init.ps)
+
+Implements real-number operands in CFF fonts. (gs_cff.ps)
+
+Implements non-default charsets in CFF fonts. (gs_cff.ps)
+
+</pre><h3><a name="V4.72_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - The PDF 1.2 "marked content" operators weren't defined.
+(pdf_main.ps)
+ - Streams with binary data whose first character was an EOL (\n)
+didn't parse properly. Unfortunately, the way we fixed this may break some
+other files. (pdf_base.ps)
+ - PDF 1.2 #nn escape syntax in names wasn't recognized. ****** This
+is implemented with an inefficient hack that should be moved down into C.
+However, I don't want to risk introducing new bugs during the beta test
+period. ****** (pdf_base.ps)
+ - The interpreter had a limit of 64K objects. Removing this limit
+required changing a basic data structure -- admittedly a risky thing to do
+during beta test. (pdf_base.ps, pdf_main.ps)
+ - TJ didn't multiply the offsets by the font size, causing incorrect
+character positioning. (gs_pdf.ps)
+
+</pre><h3><a name="V4.72_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The ASCIIHexDecode filter read an extra character in case of
+error. (sstring.c)
+
+Adds more tracing output to the CCITTFaxDecode stream. (scfd.c)
+
+</pre><h3><a name="V4.72_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The allocator client name for rendering bitmap patterns was
+incorrect. (Only affects tracing output.) (gspcolor.c)
+ - The check for exceeding the overall allocation limit was
+incorrect, because of unsigned arithmetic. (Only affects limitation of
+total allocation, which is only used for debugging and benchmarking.)
+(gsmemory.c)
+ - The 0'th component of colored screens wasn't passed through the
+band list, possibly causing access errors when rasterizing. (gxclimag.c,
+gxclread.c)
+ - setbbox could get an overflow without detecting it. (gsdps1.c)
+ - Images with only one component but MultipleDataSources = true
+could cause a memory access error. (gximage.c)
+ - The buffer for unpacking 12-bit-per-sample image data was too
+small, causing memory corruption. (gximage.c)
+ - 12-bit-per-sample images with multiple data sources sometimes
+didn't pass correct pointers to image_data. (gsimage.c)
+ - If an image data stream reached EOF before supplying enough data
+for the entire image, memory corruption could occur. (zpaint.c)
+ - When a device halftone was freed, some pointers in the halftone
+cache weren't cleared, leading to possible dangling references. (gsstate.c)
+ - Invalid font parameters could result in partially constructed
+fonts, which caused problems for restore. (gxfont0.h, gsfont.c)
+ - If an error occurred within a stringwidth, the graphics state
+stack wasn't restored properly. (gschar.c)
+ - The (static) limit on the size of a command line argument was too
+small. (gsargs.h)
+ - Building Level 1 systems was no longer possible. (gxdht.h,
+gsht.c, gsht1.c)
+ - Truncation instead of rounding caused colors on gray-scale devices
+to come out very slightly too dark. (gxcmap.c)
+ - The Decode mapping table constructed for images was slightly
+inaccurate for ranges other than [0 1] or [1 0]. (gximage.c)
+
+</pre>
+
+<h2><a name="Version4.71"></a>Version 4.71 (limited) (3/31/97)</h2>
+
+<p>
+This is a bug fix release during the beta test period.
+
+<h3><a name="V4.71_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - A larger value of -Olimit is now needed to optimize gxclread.c.
+(make.txt)
+ - Some comments were incorrect. (gdevbbox.h, sfilter1.c)
+
+Updates the GPL with a newer version from FSF. (COPYLEFT)
+
+Notes that the gcc 2.7.x code generation bug is fixed in 2.7.2.1.
+(make.txt)
+
+</pre><h3><a name="V4.71_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - Some streams required by high-level drivers were incorrectly
+grouped with the interpreter rather than the library. (int.mak, lib.mak)
+ - The choice of implementation for file streams was buried in an
+obscure place, rather than being included in the configuration definitions
+at the head of each makefile. (We believe there are no more such buried
+parameters.) This involved a NON-BACKWARD-COMPATIBLE change in the way this
+choice was specified. (lib.mak, *.mak)
+ - Some dependencies were missing. (lib.mak)
+
+</pre><h3><a name="V4.71_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - A variable was used before being initialized, causing get_bits
+(and raster ops) to fail when using alternate X devices. (bug introduced in
+4.70.) (gdevxalt.c)
+ - Some 'private' declarations were omitted. (It is infuriating that
+gcc doesn't check for this!) (gdevps.c, gdevpx.c)
+ - A few character strings were used as byte arrays without a cast.
+(gdevpx.c)
+ - The EPS writer didn't write a correct bounding box, and didn't
+write it at the beginning of the file. (gdevvec.h, gsstruct.h, gdevps.c,
+gdevvec.c)
+ - x_copy_color specified an incorrect (too large) image width.
+Apparently this only mattered because it could cause invalid memory
+accesses. (gdevx.c)
+ - x_copy_mono also specified too large an image width. It's not
+clear this made any difference. (gdevx.c)
+ - The default implementation of strip_copy_rop didn't clamp Y values
+to legal values for get_bits. (gdevmrop.c)
+
+</pre><h3><a name="V4.71_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Some initialization files prematurely switched the interpreter
+into Level 2 mode, causing some Level 2 operators not to be defined. (bug
+introduced in 4.60 or later.) (gs_cff.ps, gs_cidfn.ps, gs_cmap.ps,
+gs_init.ps, gs_res.ps)
+
+</pre><h3><a name="V4.71_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The choice of procedure names for the file-descriptor-based
+implementation of file streams was buried in a .c file, rather than being
+chosen in the makefile. (sfile.c[deleted], sfileno.c[deleted], sfxstdio.c,
+sfxfd.c, sfxboth.c)
+
+</pre><h3><a name="V4.71_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - rcurveto was broken -- it drew curves to random points. (bug
+introduced in 4.61.) (gspath.c)
+ - A trailing comma in an enum definition upset some compilers. (bug
+introduced in 4.70.) (gstype1.h)
+ - Type 1 fonts with hint replacement could produce anomalous or
+clipped output, or even missing lines. (Also cleans up some out-of-date
+formatting.) (gxtype1.h, gstype1.c, gxhint2.c)
+ - Removes some conditionals for choosing between old and new
+algorithms. (gxhint3.c)
+ - makebitmappattern required that the bitmap consist of only a
+single tile repetition. (gspcolor.c)
+ - Some computations on RasterOps didn't take transparency into
+account properly. (gdevmrop.c)
+ - The structure definition for imager and graphics states had an
+incorrect offset for line_params, causing the garbage collector not to mark
+or relocate dash patterns, possibly causing memory faults, FPEs, or invalid
+output. (bug introduced since 4.03.) (gsstate.c)
+ - 'show' operators gave a limitcheck for unreasonable coordinates,
+even if limit clamping was enabled. (gschar.c)
+
+Implements banded filling and stroking with colored halftones, in addition
+to pure colors and binary halftones. Since we are in a beta test period,
+actual use of this feature (but *not* all the code implementing it) is
+disabled under an #ifdef FUTURE. (gsdcolor.h, gxcldev.h, gxclpath.h,
+gxdht.h, gxhttype.h, gsht.c, gxclimag.c, gxclpath.c, gxclread.c)
+
+</pre>
+
+<h2><a name="Version4.70"></a>Version 4.70 (limited) (3/26/97)</h2>
+
+<p>
+This fileset fixes the one outstanding compilation problem on PC platforms
+and the old problem of limitchecks for out-of-bounds coordinates, and adds a
+variety of new features, including the ability to save away the band lists
+for pages and rasterize them later and/or elsewhere in any order and
+combination. This is the first "serious beta" candidate for the next
+general release.
+
+<p>
+Fileset numbers 4.62 through 4.69 were skipped deliberately.
+
+<h3><a name="V4.70_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - The list of special -d and -s switches was out of date. (use.txt)
+ - The name of the zlibDecode filter was incorrectly written
+zlibEncode. (language.txt)
+
+Documents where to find out how to install gcc 2.7.x on SGI IRIX 6.x.
+(make.txt)
+
+Documents a makefile patch required on NeXTStep. (make.txt)
+
+Documents how to patch gcc to fix the AXP code generation bug. (make.txt)
+
+Adds documentation for the new unified printer driver. (devices.txt)
+
+</pre><h3><a name="V4.70_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - 'make distclean' didn't remove a couple of files. (gs.mak)
+ - A library module didn't include a necessary dependency. (lib.mak)
+ - A new .ps file wasn't installed properly. (unix-end.mak)
+ - File write dates weren't updated properly on PC platforms, causing
+unnecessary rebuilding. (cp.bat, gs.mak, msc.mak, msvcwint.mak, os2.mak,
+tccommon.mak, wccommon.mak, zlib.mak)
+ - An unnecessary explicit compilation line for gdevcdj.c caused
+problems in the Mac environment. (devs.mak)
+ - The VMS scripts were out of sync again. (vms.mak)
+ - The VMS build scripts didn't include the new JPEG driver.
+(vms-*.mak)
+ - A number of makefile macros were referenced before being defined.
+(devs.mak, lib.mak, int.mak, *.mak)
+ - libpng.mak didn't work with PVERSION=90. (libpng.mak, zlib.mak)
+
+Separates install-scripts from install-exec and install-data.
+(unix-end.mak)
+
+Moves the definition of SEARCH_HERE_FIRST from iminst.h to the makefiles.
+(*.mak, iminst.h, iconf.c, imain.c)
+
+Adds a -dBATCH switch that causes Ghostscript to exit after processing the
+files named on the command line. (gs_init.ps)
+
+Adds the PostScript, EPS, and PCL XL writers, and the color and gray-scale
+JPEG drivers, to all Unix configurations. (ansihead.mak, cc-head.mak,
+gcc-head.mak)
+
+</pre><h3><a name="V4.70_Drivers"></a>Drivers</h3><pre>
+
+NOTE: because of a change in an internal interface (clist_output_page), the
+cp50 driver no longer works. This is a user-contributed driver for which we
+take no responsibility.
+
+Fixes bugs:
+ - gdevcdj.c wasn't compatible with ansi2knr. (gdevcdj.c)
+ - 'private' was omitted from some declarations. (gdevjpeg.c)
+ - The PostScript writer didn't keep track of the current color
+properly. (gdevps.c)
+ - RESOLUTION was misspelled in a header. (gdevbjc.h)
+ - Some compilers objected to the use of a floating point initial
+resolution value. (gdevbjc.h)
+ - Some compilers didn't allow static initialization of a union.
+(gsdcolor.h)
+ - If a TIFF driver got an error when initializing the CCITTFax
+encoder, it returned a bogus error code. (gdevtfax.c)
+ - The PDF writer produced incorrect output for Indexed color space
+images. (gdevpdfi.c)
+ - For many fatal error conditions, the X driver called exit()
+instead of returning an error. (gdevx*.c)
+
+Adds new drivers:
+ - epswrite, an EPS-writing driver (instead of making EPS output a
+parametric option of the PostScript-writing device). (devs.mak, gdevps.c)
+ - pcxcmyk, a 4-bit CMYK PCX driver. This is probably only useful
+for debugging CMYK color rendering. (gdevpcx.c)
+ - jpeggray, a JPEG driver that produces gray-scale rather than color
+output. Thanks to Tom Lane for contributing this. (gdevjpeg.c)
+ - uniprint, a unified printer driver for a wide variety of inkjet
+printers. Thanks to Gunther Hess for contributing this. (gdevupd.c)
+
+Adds the resolution (pHYs) to the output of the PNG drivers. (gdevpng.c)
+
+Adds recognition of the ASCII85EncodePages parameter to the PostScript and
+EPS writers. (gdevps.c)
+
+Makes the new JPEG driver write a JFIF header, which contains the image
+resolution. (gdevjpeg.c)
+
+Changes the "vector" device support interface so relative movement can be
+detected easily. THIS IS STILL SUBJECT TO CHANGE WITHOUT NOTICE.
+(gdevvec.h, gdevpsdf.c, gdevps.c, gdevpx.c, gdevvec.c)
+
+Changes the PostScript, EPS, and PDF writers to recognize curves and lines
+that can be represented more efficiently. (gdevpsdf.h, gdevpsdf.c,
+gdevps.c)
+
+Adds a new parameter to the PDF writer, FirstObjectNumber. This defines the
+first object number that will be used in the output. The default, and
+minimum, value is 1; the maximum value is approximately 2^31. This is for
+the benefit of dvipdf; we don't expect it to be used otherwise. In fact,
+using it appears to produce files that Adobe Acrobat Reader won't accept,
+even though the files are perfectly compliant with the published PDF
+specification. (gdevpdfx.h, gdevpdf.c, gdevpdfp.c)
+
+</pre><h3><a name="V4.70_Platforms"></a>Platforms</h3><pre>
+
+Removes the makefile for the 16-bit Borland C++ platform. This was the last
+supported 16-bit platform; we expect to gradually drop all 16-bit
+concessions from the code itself. (bcwin.mak)
+
+</pre><h3><a name="V4.70_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - The initial size of systemdict was too small, causing the
+interpreter to slow down substantially. (iinit.c)
+ - A library module depended on an interpreter module. (zcsindex.c)
+ - A logically necessary (but accidentally always available) #include
+was missing. (ifont.h)
+
+Moves set/currentoverprint to a more appropriate module. (zcolor2.c,
+zcssepr.c)
+
+Changes the default transfer functions so that they do something reasonable
+when given operands outside the legal [0..1] range. We only do this to work
+around a bug in FrameMaker output, which uses the transfer function as the
+screen function (!). (gs_init.ps)
+
+Changes the CMap construction algorithm to use the new, more compact
+representation. (zfcmap.c)
+
+Adds support for Adobe's Compact Font Format. Many individual features are
+not implemented yet: see the comment in the source code for details.
+(gs_cff.ps)
+
+Adds support for Type 2 charstrings in Type 1 fonts. (ifont.h, zfont1.c)
+
+Changes the Type 1 character rendering operator for the library change in
+Type 1 fonts. (zchar1.c, zfont1.c)
+
+Initializes the graphics state limit clamp flag to true. (zgstate.c)
+
+Temporarily adds a configuration file for the new unified printer driver,
+and arranges for it to be read at startup. This arrangement will be
+replaced very soon by a different one based on command line parameters.
+(gs_init.ps, uniprint.ps)
+
+</pre><h3><a name="V4.70_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Adds support for Compact Font Format fonts. (pdf_font.ps)
+
+</pre><h3><a name="V4.70_Streams"></a>Streams</h3><pre>
+
+Adds a glue procedure needed for the new jpeggray driver. (sjpeg.h,
+sjpege.c)
+
+Removes the width limit of 32K in the CCITTFaxEncode filter. The new limit
+is absurdly large (about 50M). (scf.h, scfx.h, scfe.c)
+
+</pre><h3><a name="V4.70_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - A library module depended on an interpreter module. (gxcolor2.h,
+gscolor2.c)
+ - When rendering a band, clipping was sometimes used when it wasn't
+necessary. (Performance only.) (gxclread.c)
+ - Stroking didn't check the path against the device clipping box in
+the absence of an explicit (non-default) clipping path. (Performance only.)
+(gxstroke.c)
+ - A reference to an opaque type upset a couple of compilers.
+(gxclread.c)
+ - Negative 32-bit numbers in Type 1 fonts didn't work properly on
+64-bit systems. (gstype1.c)
+ - A logically necessary (but accidentally always available) #include
+was missing. (gxbitmap.h)
+ - A header wasn't protected against double inclusion. (gxclist.h)
+ - Clipping devices didn't store their actual width and height.
+(gxcpath.c)
+ - The slow-case check for thin lines was incorrect. (gxstroke.c)
+ - Images didn't compute their clipping boxes correctly if there
+wasn't an explicit clipping path. (This must be a very recent bug, since it
+creates an overflow condition that prevents monochrome images from being
+rendered at all.) (gximage.c)
+
+Moves set/currentoverprint to a more appropriate module. For clients of
+gs_set/currentoverprint, this is a NON-BACKWARD-COMPATIBLE CHANGE, since the
+header file is now separate. (gscolor2.h, gscsepr.h, gscolor2.c, gscsepr.c)
+
+Replace the MetroWerks work-around with a different, more general one.
+(gdevmem.h, gdevmem.c, gxdevice.h)
+
+Speeds up the Type 1 interpreter a little. (gstype1.c, gxhint3.c)
+
+Redesigns the internal representation of CMaps to be more space-efficient.
+(gxfcmap.h, gschar0.c, gsfcmap.c)
+
+Implements a facility for saving away pages and rendering them later.
+Currently this requires the pages to be represented as band lists on files,
+and only allows X translation when rendering. This involves adding the
+following new printer device parameters:
+ BandHeight
+ BandWidth
+ BandBufferSpace
+Also changes the names of the printer device parameter elements from
+use_buffer_space to BufferSpace and from max_bitmap to MaxBitmap for
+consistency. (gdevprn.h, gxcldev.h, gxclio.h, gxclist.h, gxclmem.h,
+gxclpage.h, gxdevmem.h, gdevmem.c, gdevp2up.c, gdevprn.c, gxclmem.c,
+gxclpath.c, gxclread.c)
+
+Changes the band list implementation API to allow closing a file without
+deleting it, and to allow reopening an existing file. This is a
+NON-BACKWARD-COMPATIBLE change to a deep internal interface. (gxclio.h,
+gxclmem.h, gxclfile.c, gxclist.c, gxclmem.c)
+
+Speeds up rendering of colored halftones, by recognizing cases where one or
+more planes don't actually require screening, unrolling a loop, and doing
+basic clipping before halftoning. (gxcht.c)
+
+Adds a graphics state parameter, gs_set/currentlimitclamp, that changes the
+handling of out-of-range coordinates to clamp them in a way that produces
+approximately the intended output most of the time, rather than causing a
+limitcheck. Currently this is only designed to work with the basic path
+construction operations ([r]moveto, [r]lineto, [r]curveto, closepath); it
+does not work with many other operations such as show, flattenpath or the
+rectangle operations. Note also that while currentpoint will return the
+correct (unclamped) value, reading out the path with pathforall will return
+clamped values. This involves NON-BACKWARD-COMPATIBLE changes to the path
+structure (but not to any public interfaces). (gxpath.h, gxtype1.h,
+gzpath.h, gzstate.h, gspath.c, gspath1.c, gsstate.c, gstype1.c, gxpaint.c,
+gxpath.c, gxpath2.c, gxpcopy.c)
+
+Adds support for Type 2 charstrings. Some features are not implemented yet:
+see gstype2.c for details. (gscrypt1.h, gstype1.h, gxfont1.h, gxop1.h,
+gxtype1.h, gstype1.c, gstype2.c, gxhint2.c, gxhint3.c, gxtype1.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version4.61"></a>Version 4.61 (limited) (3/13/97)</h2>
+
+<p>
+This fileset cleans up many compiler warnings. It adds support for
+CMap-encoded fonts, and a driver that writes JPEG images.
+
+<h3><a name="V4.61_Documentation"></a>Documentation</h3><pre>
+
+Corrects an error in the description of the internal CodeMap structure.
+(gs_cmap.ps)
+
+Documents the fact that the optimizer in gcc 2.7.2.1 is broken on AXP
+machines. (make.txt)
+
+Corrects the name of the .setglobal/.currentglobal procedures. (zvmem2.c)
+
+Updates current.txt in preparation for the release. (current.txt)
+
+</pre><h3><a name="V4.61_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The VMS script was out of date again. (vms.mak)
+ - CIDFont support unnecessarily required composite font support.
+(int.mak)
+ - CMap and CIDFont support had improper dependencies on
+initialization order. (lib.mak, int.mak)
+ - Some dependencies were missing in the JPEG library code.
+(jpeg.mak)
+
+Adds the new JPEG driver to all standard configurations. (*.mak)
+
+</pre><h3><a name="V4.61_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - A dependency was omitted from the makefile. (devs.mak, gdevps.c)
+
+Cleans up some warnings from picky compilers. Some of these actually
+indicated problems, such as unreachable code. (gdevpdfx.h, gdevbj10.c,
+gdevcdj.c, gdevpdfp.c, gdevstc.c)
+
+Adds a JPEG-writing driver. Currently this only produces RGB output and
+only has a QFactor parameter, but eventually it could take all the other
+parameters of the DCTEncode filter. (devs.mak, int.mak, lib.mak,
+gdevjpeg.c)
+
+Refactors the PDF and PostScript output drivers so that both of them
+understand all the relevant documented PDF distiller parameters. (The
+PostScript driver currently disregards nearly all of them.) (gdevpdfx.h,
+gdevpsdf.h, gdevvec.h, gdevpdf*.c, gdevps.c, gdevpsdf.c, gdevpx.c)
+
+</pre><h3><a name="V4.61_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The MetroWerks C compiler gave an inexplicable error on a
+particular initialization. (gdevmem.h, gdevmem.c)
+
+</pre><h3><a name="V4.61_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - The insideness testing operators sometimes reported hits
+incorrectly. (zupath.c)
+ - Mixed-type arithmetic used floats rather than doubles when
+converting integers, possibly leading to loss of precision. (zarith.c,
+zrelbit.c)
+ - composefont was defined in a private dictionary, not in
+systemdict. (gs_cmap.ps)
+ - composefont didn't work, for several different reasons.
+(gs_cmap.ps)
+ - After a Type 1 font called an OtherSubr, an invalid memory access
+usually occurred, because of an incorrect attempt to free a data structure.
+(zchar1.c)
+ - 2 .setlanguagelevel gave an error if globaldict hadn't been
+defined yet. (zmisc2.c)
+
+Cleans up some warnings from picky compilers. Some of these actually
+indicated problems, such as unreachable code, or failure to check for
+(implausible) out-of-range data. (idict.c, idparam.c, igc.c, iinit.c,
+imain.c, iscan.c, zbseq.c, zchar1.c, zdps1.c)
+
+Adjusts clients for a change in the internal character cache structure and
+the introduction of the font next-glyph procedure. (zfont.c, zfont0.c)
+
+Refactors the Level 1 / Level 2 interpreter split slightly so that composite
+fonts don't require all of Level 2. (int.mak, gs_dps1.ps, gs_dps2.ps)
+
+Adds FMapType 9 (CMap-encoded) composite font support. (int.mak,
+gs_cmap.ps, ifont.h, zfcmap.c, zfont.c, zfont0.c)
+
+</pre><h3><a name="V4.61_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Adds recognition of /Identity values for BG, UCR, and TR functions in
+ExtGState resources. (General function values still aren't recognized.)
+(pdf_draw.ps)
+
+Centralizes the handling of inherited attributes. (pdf_draw.ps,
+pdf_main.ps)
+
+Starts to add support for Type 0 fonts. (pdf_font.ps, pdf_main.ps)
+
+</pre><h3><a name="V4.61_Streams"></a>Streams</h3><pre>
+
+Cleans up some warnings from picky compilers. Some of these actually
+indicated problems, such as unreachable code. (shc.h, scfd.c, sfilter2.c,
+siscale.c, stream.c)
+
+</pre><h3><a name="V4.61_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Some picky compilers disliked certain conditional expressions.
+(gxclread.c)
+ - Some picky compilers couldn't handle an extraneous semicolon.
+(gdevvec.h)
+ - A cast from byte ** to const byte ** was missing. (gdevvec.c)
+ - Resizing the levels array of a halftone order when banding could
+cause invalid memory accesses. (bug introduced in 4.60) (gxclread.c)
+ - One picky compiler didn't allow taking the address of an extern
+undefined structure. (lib.mak, gxclread.c)
+ - When rendering Type 1 fonts, character overshoot was usually
+suppressed when it shouldn't have been, often producing "squashed"
+characters. (gxhint1.c)
+ - On systems where sizeof(long) &gt; sizeof(int), coordinate values of
+more than 22 bits were passed through the band list incorrectly, producing
+incorrect output. (gxclread.c)
+
+Cleans up some warnings from picky compilers. Some of these actually
+indicated problems, such as unreachable code or (hypothetical) loss of
+precision. (gsdevice.c, gshsb.c, gsht.c, gsstate.c, gstype1.c, gxclimag.c,
+gxclpath.c, gxclread.c, gxpdash.c)
+
+Makes using font hints conditional, for debugging. (gxhint1.c)
+
+Adds library-level support for FMapType 9 (CMap-encoded) composite fonts.
+There is still no support for rearranged fonts. (gsccode.h, gsfcmap.h,
+gsstruct.h, gxfcache.h, gxfcmap.h, gxfont.h, gxfont0.h, gschar.c, gschar0.c,
+gsfcmap.c, gsfont.c, gsfont0.c)
+
+Splits band list control and utilities from rectangle-oriented commands,
+because a file was getting too big. (gxclist.c, gxclrect.c)
+
+Moves the temporary file names for command lists from the printer device
+structure to the command list structure; moves opening and closing the
+temporary files from gdev_prn_alloc/free to clist_open/close. (gdevprn.h,
+gxclist.h, gdevprn.c, gxclist.c, gxclread.c)
+
+Changes the command list storage implementation interface to pass the file
+name to the clist_rewind and clist_fseek functions, for the benefit of OSs
+that require closing and reopening a file to switch between reading and
+writing. This is a NON-BACKWARD-COMPATIBLE change in a non-public
+interface. (gxclio.h, gxclmem.h, gxclfile.c, gxclist.c, gxclmem.c)
+
+Changes the get_outline procedure in Type 42 fonts to return the length of
+the outline data as well as the pointer. This is a NON-BACKWARD-COMPATIBLE
+change in a semi-public interface. (gxfont42.h, gstype42.c)
+
+</pre>
+
+<h2><a name="Version4.60"></a>Version 4.60 (limited) (3/2/97)</h2>
+
+<p>
+This fileset moves color rendering up from the graphics state to the imager
+state so that color rendering can happen after banding. It also shifts
+image rendering to the rendering pass of banding for many common cases
+(often referred to inaccurately as "high-level image" capability). The
+changes involved are substantial and in some respects subtle, so
+unfortunately it is quite possible that some new bugs have been introduced.
+
+<p>
+This fileset also includes improvements to the new PCL XL driver
+(pxlmono/color), and introduces an experimental PostScript driver (pswrite).
+
+<h3><a name="V4.60_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - The argument list of colorimage was incorrect. (zcolor1.c)
+ - false .charboxpath incorrectly claimed to create the correct path
+even when the CTM was not well-behaved. (language.txt)
+ - The discussion of the "main program" files was out of date.
+(make.txt)
+
+Updates the OS/2 EMX documentation. (make.txt)
+
+Modifies the Aladdin Ghostscript Free Public License slightly so it may be
+applied to other software packages. (PUBLIC)
+
+Updates inaccurate build documentation for several Unix platforms.
+(make.txt, ansihead.mak, cc-head.mak, gcc-head.mak, libpng.mak)
+
+Notes a problem with the MIPSpro 7.1 compiler. (make.txt)
+
+</pre><h3><a name="V4.60_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - Most makefiles didn't include version.mak. (msc.mak,
+msvcwint.mak, os2.mak, tctail.mak, wctail.mak)
+ - There was an incorrect dependency for the Windows printer device.
+(devs.mak)
+
+Moves the PDF writer to devs.mak. (devs.mak, int.mak)
+
+Updates the main VMS script to be structured like version.mak. (vms.mak)
+
+</pre><h3><a name="V4.60_Drivers"></a>Drivers</h3><pre>
+
+Factors out the stream-writing procedures from the PDF writer, so they can
+be shared with the new PostScript writer. (gdevpdfs.h =&gt; gdevpstr.h,
+gdevpdfx.h, gdevpsdf.h, gdevpdf.c, gdevpdfi.c, gdevpdfs.c =&gt; gdevpstr.c,
+gdevpdft.c, gdevpsdf.c)
+
+Adds a PostScript writer (pswrite), similar to the PDF and PCL XL drivers.
+Currently this handles fill/stroke graphics and Level 1 images; everything
+else (including text) is turned into bitmaps. (devs.mak, gdevps.c)
+
+Changes the names of the PCL XL drivers from hpxmono/color to pxlmono/color.
+(devs.mak, gdevpx.c)
+
+Updates the "vector" device support interface. THIS IS STILL SUBJECT TO
+CHANGE WITHOUT NOTICE. (gdevvec.h, gdevpx.c, gdevvec.c)
+
+Makes the vgalib driver a page device. This seems bizarre, but it's
+necessary for setpagedevice to work with it. (gdevvglb.c)
+
+Updates some drivers for the new color mapping interfaces. (gdevpx.c)
+
+Updates the user-contributed Canon LBP-8II and LIPS III driver.
+(gdevlbp8.c)
+
+</pre><h3><a name="V4.60_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The workaround for Ultrix's incorrect implementation of sh -e
+still didn't work. (unixtail.mak)
+ - The definition of offset_of didn't work on the Mac. (stdpre.h)
+
+Updates the OS/2 EMX linker command per input from a user. (os2.mak)
+
+</pre><h3><a name="V4.60_Fonts"></a>Fonts</h3><pre>
+
+Adds .pss (apparently used by Adobe for Multiple Master font instances) to
+the list of extensions skipped by the GS_FONTPATH directory scanner.
+(gs_fonts.ps)
+
+</pre><h3><a name="V4.60_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Programs that rebind null, true, and/or false could cause all
+kinds of problems. We've only fixed a couple of the places that might be
+affected (findfont, quit), by wrapping an explicit "systemdict begin/end"
+around the code; fixing this completely would probably require wrapping this
+implicitly around almost every pseudo-operator, which would be too
+expensive. (gs_fonts.ps, gs_lev2.ps)
+ - In a Level 2 system, grestoreall stopped one level too early.
+(zdevice2.c)
+ - setpagedevice didn't restore the stack properly if it got an
+error. (gs_setpd.ps)
+
+Changes the GC pointer enumeration interface to reduce the number of
+'discarding const' warnings. See under Library below. (igc.c)
+
+Updates the interpreter for the change in the imager / graphics state split.
+(zpcolor.c)
+
+Makes the stack-restoring behavior of pseudo-operators non-optional.
+(interp.c)
+
+</pre><h3><a name="V4.60_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - PDFDocEncoding and WinAnsiEncoding incorrectly had `minus' at
+position 45 rather than `hyphen'. (gs_pdf_e.ps, gs_wan_e.ps)
+
+</pre><h3><a name="V4.60_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - A header file wasn't protected against double inclusion.
+(stream.h)
+ - any_abs was redefined. (spngp.c)
+ - The CCITTFaxDecode filter didn't fully initialize the "previous
+line" for 2-D decoding, so if the very first line of data was 2-D, an
+out-of-bounds memory access could occur. (scfd.c)
+
+</pre><h3><a name="V4.60_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - gs_image_next could read too much data, causing errors at the
+interpreter level. (gsimage.c)
+ - The bitmaps stored in the Pattern cache were usually freed,
+leaving dangling pointers. (gsdcolor.h, gxpcache.h, gxpcolor.h, gsstate.c,
+gxpcmap.c)
+ - There was still one assignment to a const structure, and there
+were some unnecessary const-discarding casts. (gxclread.c)
+ - If a character in a Type 3 font was defined by executing 'show'
+type commands, charpath did the wrong thing (didn't pick up the paths
+created by the inner show). Similarly, if it uses 'stroke', true charpath
+did the wrong thing (appended the path rather than the strokepath path).
+(gxchar.h, gschar.c, gspaint.c)
+ - A header file wasn't protected against double inclusion.
+(gserror.h)
+ - The new fast implementation of rectfill didn't handle rectangles
+with negative width/height. (bug introduced in 4.32) (gsdps1.c)
+ - Reading banded high-level images calculated the image height
+incorrectly, (usually) causing a rangecheck. (gxclread.c)
+ - When reading band data, a memory fault could occur if the halftone
+cache hadn't been allocated yet. (gxht.c)
+ - The imager state data for high-level images wasn't written soon
+enough. (gxclimag.c)
+ - High-level images computed bounding boxes incorrectly, so they
+could write some garbage data in the band list, and could also fail to write
+some information. (gsmatrix.h, gxmatrix.h, gxclimag.c)
+ - High-level images wrote the raster value incorrectly in the band
+list. (gxclimag.c)
+ - Images with non-zero initial source X and non-portrait orientation
+were displaced on the page. (In practice, this only applied to some banded
+high-level images.) (gximage.c)
+ - The bounding box device didn't forward output_page calls, causing
+pages to be dropped or overprinted. (gdevbbox.c)
+ - The band renderer considered all non-zero return codes as errors,
+rather than only negative codes. (gxclread.c)
+ - An unnecessary extern hadn't been removed. (gxclimag.c)
+ - Some macros didn't parenthesize uses of their arguments, causing
+syntax errors. (gsrefct.h)
+ - The screen phase and color_info weren't set correctly when
+rendering bands. (gsstate.h, gsht.c, gxclread.c)
+ - A header file didn't declare all the opaque types it used.
+(gsdevice.h)
+ - Indexed color spaces didn't work with banded images. (They still
+don't -- the check for writing the color space, and the code for reading the
+table or map, are incomplete.) (gxclist.h, gxclpath.h, gxclimag.c,
+gxclpath.c, gxclread.c)
+
+In preparation for implementing post-banding halftoning:
+
+ - Moves color rendering information, including alpha value, from
+graphics state to imager state; also moves the allocator pointer. This is
+quite a subtle change, and may have a significant bug tail. (gxdcolor.h,
+gxht.h, gxistate.h, gzstate.h, gschar.c, gsdps1.c, gspaint.c, gsstate.c,
+gxclread.c)
+
+ - Changes all the relevant color space and color mapping procedures
+so they take a const gs_imager_state * (and, in some cases, a [const]
+gx_device *) instead of a const gs_state *. This is a
+non-backward-compatible change, but it only affects internal interfaces.
+(gsdcolor.h, gxcmap.h, gxcspace.h, gxdcconv.h, gxdcolor.h, gxdither.h,
+gxpcolor.h, gzht.h, gschar.c, gscie.c, gscolor.c, gscolor1.c, gscolor2.c,
+gscsepr.c, gsdevice.c, gsimage.c, gspcolor.c, gxcht.c, gxcmap.c, gxdcconv.c,
+gxdcolor.c, gxht.c, gximage.c, gximage[2345].c, gxpcmap.c)
+
+ - Changes the color and color space reference count adjustment
+procedures similarly, to take a gs_memory_t * instead of a gs_state_t *.
+(gxcspace.h, gscie.c, gscolor.c, gscolor2.c, gscsepr.c, gspcolor.c)
+
+ - Changes the gs_halftone in the graphics state from being part of
+the gs_state_contents to being an independent reference-counted object.
+This too may have a significant bug tail. (gxht.h, gxistate.h, gsht.c,
+gsstate.c)
+
+ - Changes the image processing code so it no longer assumes that the
+gs_imager_state is actually a gs_state. (gximage.h, gximage.c, gximage2.c,
+gximage3.c, gximage4.c, gximage5.c)
+
+ - Adds a unique ID value to device halftones, so that it's possible
+to detect (non-)changes quickly. (gxdht.h, gsht.c)
+
+Finishes the code for writing and reading color rendering information in the
+band list. This involves changes to several band list opcodes. (gsht.h,
+gsht1.h, gxcldev.h, gxclist.h, gxclpath.h, gxdht.h, gzht.h, gsht.c, gsht1.c,
+gxclbits.c, gxclimag.c, gxclist.c, gxclread.c)
+
+Changes the garbage collector pointer enumeration procedure interface
+slightly to reduce the number of 'discarding const' warnings. THIS IS A
+NON-BACKWARD-COMPATIBLE CHANGE for anyone who didn't use the
+ENUM_PTRS_BEGIN[_PROC] macro to start a pointer enumeration procedure (which
+should be no one). (gsstruct.h, gsmemory.c)
+
+Corrects a few more needlessly const-discarding casts. (gxfcache.h,
+gxccache.c)
+
+Checks for file reading errors when rasterizing bands. (gxclread.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version4.51"></a>Version 4.51 (limited) (2/9/97)</h2>
+
+<p>
+This version contains a more reasonable high-level PCL XL driver. The VMS
+build script is working again, we think.
+
+<h3><a name="V4.51_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The gsdll_h macro wasn't defined all the places it was needed.
+(devs.mak, os2.mak)
+
+</pre><h3><a name="V4.51_Drivers"></a>Drivers</h3><pre>
+
+Continues to develop the "vector" driver infrastructure and the PCL XL
+driver. EVERYTHING IN THESE FILES IS SUBJECT TO CHANGE WITHOUT NOTICE.
+(gdevvec.h, gdevvec.c)
+
+Brings the PCL XL driver up to usable quality for graphics. Most
+fill/stroke graphics, and portrait-orientation bitmap images up to 8 bits
+per pixel, are converted directly to their PCL XL equivalents. Text is
+still treated as bitmaps. Both gray-scale and color output are now
+supported. (devs.mak, gdevpx.c)
+
+</pre><h3><a name="V4.51_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - When using gsos2.exe with gsdll2.dll, reducing the size of the
+page bitmap caused a limitcheck error with the message
+ Failed to decommit memory in pm_alloc_bitmap, rc = 87 (gdevpm.c)
+ - The scripts that construct gconfig_.h failed on Ultrix, because
+Ultrix's implementation of sh -e is incorrect. (unixtail.mak, ugcclib.mak)
+ - Some systems that have sys/times.h don't define CLK_TCK, making a
+compilation fail. (time_.h)
+
+</pre><h3><a name="V4.51_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - An omitted semicolon wasn't detected by gcc. (idict.c)
+
+Removes a source of unnecessary duplication by getting the revision number
+and date from version.mak. (gs.mak, int.mak, version.mak, gscdef.c)
+
+</pre><h3><a name="V4.51_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The minimum buffer sizes for the RunLengthDecode filter hadn't
+been changed to reflect the algorithm improvement made in release 4.38.
+(srld.c)
+
+Changes the RunLengthEncode filter so it can make progress with only a
+2-byte output buffer. (srlx.h, srle.c)
+
+</pre><h3><a name="V4.51_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Because of a typo, the slow general algorithm was always used for
+monochrome images. (Performance bug only, but a serious one.) (gximage2.c)
+ - Dots (zero-length lines with round caps and zero dot length)
+caused an infinite loop. (bug introduced in 4.40) (gxstroke.c)
+ - Some image data unpacking procedures were always required, but
+weren't always included. (bug introduced in 4.50) (gximage.c, gximage0.c,
+gximage3.c)
+ - Images with 8 bits per pixel and non-identity Decode produced
+garbage. (bug introduced later than 4.03) (gximage0.c)
+ - Some necessary casts and omitted punctuation weren't detected by
+gcc. (gxpath.h, gsargs.c, gsstate.c, gxclread.c, gxpdash.c)
+ - The band list became confused if a band had no commands at all.
+(gxclread.c)
+ - If a path included a closepath followed by a moveto to the same
+point, it could be written incorrectly in the band list. (bug probably
+introduced in 3.60) (gxclpath.c)
+
+Changes some internal computations for arcs from float to double for greater
+accuracy. (gspath1.c)
+
+</pre>
+
+<h2><a name="Version4.50"></a>Version 4.50 (limited) (1/31/97)</h2>
+
+<p>
+This release contains an experimental high-level PCL XL driver, a little
+more support for CID/CMap fonts, and the usual bug fixes. NOTE: the VMS
+build script is known to be out of sync with the makefiles again; we still
+don't see any alternative to constant struggles with this problem.
+
+<h3><a name="V4.50_Documentation"></a>Documentation</h3><pre>
+
+Corrects the -h message, which gave an incorrect file name for the bug
+report form. (imainarg.c)
+
+Removes documentation for 16-bit MS-DOS platforms with the Borland compiler.
+(fonts.txt, make.txt, new-user.txt, use.txt)
+
+</pre><h3><a name="V4.50_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The Watcom library makefile didn't define the directory
+information for libpng and zlib. (watclib.mak)
+
+Moves the selection of band list implementation (file- vs. RAM-based) and
+the compression filter for RAM-based band lists up to the top-level
+makefiles. Again, this is a NON-BACKWARD-COMPATIBLE procedure change.
+(lib.mak, *.mak)
+
+Moves the selection of version number for all platforms (except VMS, as
+usual) to a separate file. This will reduce the number of files that need
+editing when the version number changes. (ansihead.mak, cc-head.mak,
+gcc-head.mak, ugcclib.mak, version.mak, tar_cat)
+
+</pre><h3><a name="V4.50_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - An error in the (unsupported) SGI RGB driver could cause crashes
+or incorrect output. (gdevsgi.c)
+
+Starts to create a framework for structured output ("vector") drivers (PDF,
+PostScript, PCL XL, etc.) (gdevbbox.h, gdevvec.h, gsdcolor.h, gsstruct.h,
+gxdevice.h, gdevvec.c)
+
+Moves default page size parameters to a more accessible header. (gdevprn.h,
+gxdevice.h, gdevx.c)
+
+Adds a driver that produces properly structured PCL XL output. This is
+highly experimental and not ready for use yet. (gdevpx.c)
+
+</pre><h3><a name="V4.50_Platforms"></a>Platforms</h3><pre>
+
+Removes support for 16-bit MS-DOS platforms with the Borland compiler. For
+the moment, 16-bit MS Windows is still supported. (bc.mak, bcflags.mak,
+bclib.mak, tc.mak)
+
+</pre><h3><a name="V4.50_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - File-based CIDFonts (with delayed, incremental loading of
+character outlines) didn't work. (gs_cidfn.ps)
+
+Finishes implementing the definition of CMap resources, except for
+rearranged fonts. (gs_cidfn.ps, gs_cmap.ps)
+
+Adds a little more CMap support code. (zcid.c)
+
+Removes the .setcurrentfile operator, since it doesn't solve the problem it
+was intended to address. (zcontrol.c)
+
+Adapts the interpreter to use the new argument processing code.
+(imainarg.c)
+
+</pre><h3><a name="V4.50_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The CCITTFaxDecode filter could access as much as 3 bytes beyond
+the end of a buffer, causing an invalid memory access. (This is essentially
+the same bug that was fixed for the CCITTFaxEncode filter in 4.38.)
+(scfd.c)
+
+</pre><h3><a name="V4.50_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Painting an image without having set up any halftone could cause a
+crash. (gxht.c)
+ - In a very obscure case, an occasional scan line of landscape
+images could get corrupted. (gximage0.c)
+ - Because of a rounding error, patterns could fail to be painted in
+certain cases. (gxpcolor.h, gspcolor.c, gxpcmap.c)
+ - Very large line widths or miter limits could cause the computation
+of stroke expansion to overflow. (gxpaint.h, gdevbbox.c, gxclpath.c,
+gxstroke.c)
+ - The phase could be incorrect for simple patterns. (gspcolor.c)
+ - The default implementation of copy_mono used an incorrect
+RasterOp. (gdevdflt.c)
+ - The default implementation of fill_masked didn't increment the row
+pointer, causing characters to appear as solid rectangular blocks.
+(gxdcolor.c)
+
+Eliminates an unnecessary gsave and grestore from rectfill and rectstroke if
+the path was null. (gsdps1.c)
+
+Adds a limit on the amount of space that the default (C heap) allocator will
+allocate, and a record of the maximum amount allocated, to help testing
+embedded products. (gsmemory.c)
+
+Changes the band list algorithm for deciding how many replicas of a halftone
+tile to store in the tile cache. The previous algorithm was too liberal,
+which could cause the cache to overflow and many unnecessary bitmaps to be
+written in the band list. (gxclbits.c)
+
+Writes clipping with a rectangle more compactly in the band list.
+(gxfixed.h, gxclpath.c)
+
+Adds new band list commands for representing 90- and 180-degree arcs
+compactly. (gxclpath.h, gxclpath.c, gxclread.c)
+
+Repackages handling of general monochrome images, color images, and 12-bit
+and interpolated images, so that they are included optionally rather than in
+all configurations. (int.mak, lib.mak, gximage.h, gximage.c,
+gximage[12345].c)
+
+Changes the structure definition for devices to include no-op pointer
+enumeration and relocation, so they can have subclasses. (gxdevice.h)
+
+Adds a library facility for processing command line arguments with
+@-expansion. (gsargs.h, gsargs.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version4.41"></a>Version 4.41 (private) (1/21/97)</h2>
+
+<p>
+This release adds a PCL XL output driver, and a few performance
+improvements.
+
+<h3><a name="V4.41_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The zlib library used an incorrect header file when compiling.
+(zlib.mak)
+
+Changes the names of the preprocessor symbols indicating the presence of
+system header files to be consistent with the ones used by GNU configure.
+(dvx-tail.mak, ugcclib.mak, unixtail.mak, vms.mak; dirent_.h, time_.h;
+gp_unix.c)
+
+Changes the method for choosing the compression filter for RAM-based band
+lists. This is a NON-BACKWARD-COMPATIBLE change in the makefile. (lib.mak)
+
+</pre><h3><a name="V4.41_Drivers"></a>Drivers</h3><pre>
+
+Adds black-and-white and 8-bit gray PCL XL (PCL 6) drivers for the LaserJet
+5 and 6 family. This driver is extremely simple and just emits bitmaps;
+future drivers will use more PCL XL high-level constructs. (gdevlj56.c)
+
+</pre><h3><a name="V4.41_Fonts"></a>Fonts</h3><pre>
+
+Updates the free font distribution to add the URW Grotesk and Antiqua fonts.
+
+</pre><h3><a name="V4.41_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - gs -h and -v returned with a non-zero exit code on all platforms.
+(This is necessary under Windows, to keep the message visible on the screen,
+but nowhere else.) (imainarg.c)
+ - Resizing a dictionary could exceed dict_max_size, causing memory
+corruption. (dstack.h, idict.h, idict.c, zdict.c)
+
+Adds .setlinecap and .setlinejoin that can use the extended range of line
+cap/join values, and redefines setlinecap and setlinejoin in terms of them.
+(gs_init.ps, zgstate.c)
+
+</pre><h3><a name="V4.41_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The CCITTFaxDecode filter with EncodedByteAlign = true skipped to
+a byte boundary before checking for an EOL. This may be wrong if EndOfLine
+= true; we aren't at all sure what should happen if EndOfLine = false.
+(scfd.c)
+
+Adds a "no wrapper" option to the zlib streams, to optionally suppress the
+time-consuming integrity checksum computation. (szlibx.h, szlibc.c,
+szlibd.c, szlibe.c)
+
+</pre><h3><a name="V4.41_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Dashed lines with zero-length drawn segments (dots) that fell
+exactly on a corner produced inappropriate output. (pcl/test19.pxs)
+(gxpdash.c, gxstroke.c)
+ - Dashed lines didn't set the segment notes properly. (gxpdash.c)
+ - The bounding box device didn't free a bookkeeping structure at the
+end of processing an image. (gdevbbox.c)
+ - Curve points could get computed incorrectly when using emulated
+floating point. (gxpcopy.c)
+ - The 1-element cache for curve_x_at_y didn't work if Y was
+decreasing. (gxfixed.h, gxpcopy.c)
+
+Distinguishes between error and informational exits. (stdpre.h)
+
+Defines and checks maximum values for line cap and join parameters.
+(gslparam.h, gsline.c)
+
+Removes the 'not last' segment note, since it is not used for anything.
+(gxpath.h, gspath1.c, gxpath2.c, gxpcopy.c, gxpflat.c, gxstroke.c)
+
+Changes the memory freeing algorithm for RAM-based band lists back to the
+original one, since the "improved" one had more bugs than it was worth
+chasing. (gxclmem.c)
+
+Speeds up the A * B / C algorithm a little. (gsmisc.c)
+
+Speeds up curve_x_at_y by recognizing more cases that don't require the slow
+A * B / C algorithm. (gxpcopy.c)
+
+Changes the path filling code so it uses fill-by-trapezoids even if
+fill_adjust is zero, as long as the flatness is at least 1 pixel.
+(gxfill.c)
+
+Removes the (unneeded) floating point operations from gx_curve_log2_samples.
+(gxpflat.c)
+
+Changes the memory-based implementation of band lists so that it constructs
+the compressor and decompressor by calling procedures rather than
+instantiating templates: this allows setting filter parameters to
+non-default values. (gxclmem.h, gxcllzw.c, gxclmem.c, gxclzlib.c)
+
+</pre>
+
+<h2><a name="Version4.40"></a>Version 4.40 (private) (1/13/97)</h2>
+
+<p>
+This version finally handles the last graphics model discrepancies between
+PostScript and PCL, by correctly implementing null joins, minimum dot
+lengths, and tangent-aligned curve ends. It also contains some significant
+performance improvements, and as usual a few bug fixes.
+
+<h3><a name="V4.40_Documentation"></a>Documentation</h3><pre>
+
+Documents the new accurate curves and path dashing operators.
+(language.txt)
+
+</pre><h3><a name="V4.40_Utilities"></a>Utilities</h3><pre>
+
+Adds switches for genconf to set and unset a prefix for file names.
+(genconf.c)
+
+</pre><h3><a name="V4.40_Drivers"></a>Drivers</h3><pre>
+
+Adds recognition of the new Distiller 3.0 parameters to the PDF writer.
+(None of them have any effect yet.) (gs_pdfwr.ps, gdevpdfx.h, gdevpdf.c,
+gdevpdfp.c)
+
+Converts all the output functions in the PDF writer from being file-based to
+using streams, in anticipation of adding compression. (gdevpdfs.h,
+gdevpdfx.h, gdevpdf*.c, gdevpdfs.c)
+
+</pre><h3><a name="V4.40_Interpreter"></a>Interpreter</h3><pre>
+
+Adds operators for accessing the new accurate curves flag in the graphics
+state. (zgstate.c)
+
+Adds an operator for invoking gs_dashpath. (zpath1.c)
+
+</pre><h3><a name="V4.40_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - Indexed color spaces whose base space was a CIE space caused an
+error. (pdf_draw.ps)
+
+</pre><h3><a name="V4.40_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - A pointer was declared const incorrectly. (gxcpath.c)
+ - Filling with a pattern often failed to pass a non-null bitmap ID,
+causing excessive writing in the band list. (Performance bug only.)
+(gspcolor.c)
+ - The bounding box device didn't discount copy_mono or draw_line
+operations drawing in white. (gdevbbox.c)
+ - The bounding box device didn't read out the bounding box correctly
+as the PageBoundingBox device parameter. (It did return it correctly
+through the gx_device_bbox_bbox procedure.) (gdevbbox.c)
+ - The default implementation of fill_triangle drew nothing or
+incorrect output if the corners of the triangle were specified in certain
+orders (ax &lt; 0 or bx &lt; 0) (i.e., the previous "fix" had a bug).
+(gdevddrw.c)
+
+Changes tile size from always being set in all bands to being 'known' by
+bands individually. (gxclist.h, gxcldev.h, gxclbits.c, gxclist.c)
+
+Computes an additional value in advance when rendering images. (gximage.h,
+gximage1.c, gximage2.c)
+
+Replaces some slow loops with calls of memmove. (gxclmem.c)
+
+Provides a fixed-point implementation of A * B / C for machines with slow
+floating point. (gxfixed.h, gsmisc.c)
+
+Extends the "device color" type to implement filling masked regions as well
+as rectangles. (gxdcolor.h, gdevdflt.c, gspcolor.c, gxcht.c, gxdcolor.c,
+gxht.c)
+
+Makes unclipped monobit portrait and landscape images and image masks use
+the new masked fill capability of device colors. (gximage.h, gximage.c,
+gximage1.c, gximage2.c)
+
+Adds a macro for determining pointer alignment. (stdpre.h, gdevdflt.c)
+
+When floating point is slow, uses a different, faster algorithm for
+gx_curve_x_at_y. (gxpcopy.c)
+
+Improves performance by adding a one-element cache for gx_curve_x_at_y.
+(gzpath.h, gxpcopy.c)
+
+Reduces overhead when banded images are pre-rasterized (currently, always).
+(gxclimag.c)
+
+Adds a rendering cost estimate field to each band in a band list. This
+field isn't actually used for anything yet; eventually, the intent is that
+bands with a high cost will get rendered, and stored in compressed form,
+before starting the engine. (gxclist.h)
+
+Adds the concept of 'notes' for path segments, to allow remember what
+segments constitute a single curve or arc. Currently we set these properly
+for everything except dashed paths. (gxclpath.h, gxpath.h, gzpath.h,
+gspath1.c, gxclpath.c, gxclread.c, gxpath.c, gxpath2.c, gxpcopy.c)
+
+When the dot length is non-zero, changes curve stroking to always use bevel
+joins within each curve rather than the current join. This prevents a
+"bristly" look with no join and butt caps. (gxstroke.c)
+
+Adds an "accurate curves" capability that makes the last line segment of a
+flattened curve actually be tangent to the curve, which in turn makes
+flat-end caps be correctly perpendicular to the tangent. (gxpath.h,
+gxpcopy.c)
+
+Adds an "accurate curves" flag in the graphics state. (gsline.h,
+gxclpath.h, gxistate.h, gsline.c, gspath.c, gspath1.c, gxclpath.c,
+gxclread.c, gxfill.c, gxstroke.c)
+
+Changes the meaning of "no join" (gs_join_none) so that instead of producing
+no join and butt caps, it produces whatever the current cap is. This is
+compatible with the H-P definition. (gxstroke.c)
+
+Implements non-zero dot length for dash patterns. (gxpdash.c)
+
+Splits off the curve flattening algorithms into a separate file.
+(gxpcopy.c, gxpflat.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version4.39"></a>Version 4.39 (limited) (1/1/97)</h2>
+
+<p>
+This version was created only to accompany a release of the PCL XL
+interpreter. It was withdrawn the day after it was released, because the
+tools used to produce it put the wrong files in the filesets.
+
+<h3><a name="V4.39_Documentation"></a>Documentation</h3><pre>
+
+Adds a more detailed description of the third-party ps_view viewer
+interface. (new-user.txt)
+
+Corrects an error in a reference to the PSLRM. (lib.txt)
+
+Documents the change in .makeoperator. (language.txt)
+
+Updates the FTP location of the zlib sources. (zlib.mak)
+
+</pre><h3><a name="V4.39_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The Unix library makefile didn't include the necessary definitions
+for libpng and zlib. (ugcclib.mak)
+
+Allows selecting the compression filters for memory-based band lists in the
+makefile. Makes zlib (deflate) the default compressor for memory-based band
+lists. (lib.mak)
+
+</pre><h3><a name="V4.39_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - prfont.ps wouldn't print unencoded characters in Type 42 fonts.
+(prfont.ps)
+
+</pre><h3><a name="V4.39_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The H-P monochrome driver didn't put out enough initialization
+commands at the beginning of each page to make each page printable
+independently. (gdevdjet.c)
+
+</pre><h3><a name="V4.39_Interpreter"></a>Interpreter</h3><pre>
+
+Changes ref_stack_count_inline so it never does a procedure call.
+(istack.h)
+
+Changes .makeoperator so that operator procedures save the stack depths, and
+restore the stack pointers (if possible) if the operator encounters an
+error. This is a NON-BACKWARD-COMPATIBLE CHANGE; it requires rewriting the
+'stop' and 'stopped' pseudo-operators (and, if there were any, any other
+pseudo-operators that interact with the error handling machinery) in C.
+(gs_init.ps, interp.c, zcontrol.c)
+
+Adds recognition of the LeadingEdge, MediaClass, and RollFedMedia keys in a
+page device dictionary, per the Adobe supplement for their version 2017
+interpreter. This involves a NON-BACKWARD-COMPATIBLE change to the
+(undocumented) .matchpagesize operator. (gs_setpd.ps, zmedia2.c)
+
+Makes necessary changes for compatibility with the added parameters for the
+zlib filters. (zfzlib.c)
+
+</pre><h3><a name="V4.39_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The zlib encoder returned EOFC when it should have returned 0.
+(szlibe.c)
+
+Adds optional parameters and reset procedures for the zlib filters.
+(szlibx.h, szlibc.c, szlibd.c, szlibe.c)
+
+</pre><h3><a name="V4.39_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Displaying characters with a non-standard RasterOp could cause an
+invalid memory access. (gdevdflt.c)
+ - Banding sometimes used an incorrect RasterOp. (gxclread.c)
+ - When banding, mixing Patterns and halftones could confuse the
+bookkeeping of tile size, leading to incorrect generation of the band list
+and error messages or confusion when rasterizing. (gxclist.h, gxclbits.c,
+gxclread.c)
+ - If only the dash pattern offset changed, and not any of the other
+dash-related parameters, the new offset wasn't written in the band list,
+causing incorrect output. (gxclpath.c)
+ - Oversized halftone tiles didn't report their error code properly.
+(gxclbits.c)
+ - Oversized halftone tiles with RasterOp caused an error.
+(gxclist.c)
+ - When banding, RasterOp transfers that crossed a band boundary
+didn't access the correct source data on bands other than the first.
+(gxclist.c)
+ - There were redundant copies of the code for writing a RasterOp
+value in the band list. (gxclimag.c, gxclpath.c)
+ - Oversized patterns or halftones produced garbled output.
+(gxclbits.c)
+ - The check for oversized patterns or halftones was slightly
+incorrect, leading to the possibility of writing out a tile that would
+overflow the reading buffer and corrupt memory. (gxclbits.c)
+ - When banding, RasterOp wasn't applied to fill and stroke
+operations, and wasn't applied correctly to characters. (gdevdflt.c,
+gxclimag.c, gxclread.c)
+ - The RasterOp-related optimizations for black-and-white images
+sometimes produced incorrect output. (gximage.c, gximage2.c)
+ - The default implementation of fill_triangle didn't draw anything
+if the corners of the triangle were specified in certain orders (ax &lt; 0 or
+bx &lt; 0). (gdevddrw.c)
+ - Painting with a Pattern could pass out-of-range phase values to
+driver procedures. (gspcolor.c)
+ - Because of an off-by-1 error, halftones or patterns passed through
+the band list could write past the end of their allocated space in the band
+tile cache, leading to incorrect output or possible arithmetic exceptions or
+memory access errors. (gsbitops.c)
+
+Adds -Z: for printing only the minimal command list statistics. (gxclist.c,
+gxclread.c)
+
+Expands band list tracing so it includes all of the data associated with the
+command, not just the command name and a few command parameters.
+(gxclread.c)
+
+Adds free lists for strings. Currently these are only used in
+non-garbage-collected environments. (gxalloc.h, gsalloc.c, gsnogc.c)
+
+Adds a procedure for copying a path structure, and an (internal) accessor
+for the current path in the graphics state. (gxpath.h, gspath.c, gxpath.c)
+
+Speeds up filling characters with halftones a little bit. (gdevdflt.c)
+
+Changes the memory-based implementation of band lists so it can use any
+compression / decompression filter, so it only compresses when it has
+allocated a specified amount of buffer storage, and so it releases its
+buffer storage at the end of each page. (gxclmem.h, gxclmem.c)
+
+Speeds up counting the number of 1-bits in a byte, which is used in some
+image processing algorithms. (gsbittab.h, gsbittab.c)
+
+Reduces the band list space required for changing tile size. (gxcldev.h,
+gxclbits.c, gxclread.c)
+
+</pre>
+
+<h2><a name="Version4.38"></a>Version 4.38 (limited) (12/20/96)</h2>
+
+<p>
+Adds support for a couple of undocumented features in Type 1 fonts.
+
+<h3><a name="V4.38_Interpreter"></a>Interpreter</h3><pre>
+
+Adds handling of the Type 1 font subroutineNumberBias (an optional entry in
+the Private dictionary) and lenIV = -1 features at the interpreter level.
+(zchar1.c, zfont1.c)
+
+</pre><h3><a name="V4.38_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The CCITTFaxEncode filter could access as much as 3 bytes beyond
+the end of a buffer, causing an invalid memory access. (scfe.c)
+
+Changes the RunLengthDecode filter so it can make progress (produce output)
+with only a 1-byte output buffer. (srlx.h, srld.c)
+
+</pre><h3><a name="V4.38_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The sine and cosine of multiples of 90 degrees weren't exact.
+(gxfarith.h, gsmisc.c)
+ - The expanded bounding box computation for strokes didn't take into
+account the possibility of overflow. (gxstroke.c)
+ - The allocator didn't fill freed strings with the 'free' mark.
+(gsalloc.c)
+ - When using a pattern with RasterOp, the phase was computed
+incorrectly, leading to anomalous filling patterns. (gspcolor.c)
+ - Patterns with a non-zero translation in the matrix passed to
+makepattern didn't translate the pattern origin properly. (gxcolor2.h,
+gxpcolor.h, gspcolor.c)
+
+Adds a subroutineNumberBias field to Type 1 fonts. This is an undocumented
+feature of the Type 1 font format. (gxfont1.h, gstype1.c)
+
+Interprets lenIV = -1 in Type 1 fonts as meaning that the CharStrings are
+unencrypted. This too is an undocumented feature of the Type 1 format.
+(gxfont1.h, gxtype1.h, gstype1.c, gstype2.c)
+
+Changes gs_clippath so it returns more reasonable outlines. (There are too
+many programs that rely on being able to stroke the result of clippath, even
+though both the Adobe and H-P literature specifically say the results are
+unpredictable.) (gxcpath.h, gxcpath.c)
+
+</pre>
+
+<h2><a name="Version4.37"></a>Version 4.37 (limited) (12/10/96)</h2>
+
+<p>
+This version implements separate halftone phase for source and texture,
+required for PCL XL implementation.
+
+<h3><a name="V4.37_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - Loading a native TrueType font without a 'post' table caused an
+error. (gs_ttf.ps)
+
+</pre><h3><a name="V4.37_Interpreter"></a>Interpreter</h3><pre>
+
+Extends the interpreter to handle the new separate halftone phases for the
+RasterOp source and texture. (gs_dps1.ps, zdps1.c)
+
+Makes a small change to accommodate a library change supporting Type 2
+charstrings. (zfont1.c)
+
+</pre><h3><a name="V4.37_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Implements the FontFile2 key for embedded TrueType fonts. (pdf_font.ps)
+
+Starts to implement the FontFile3 key for compressed Type 1 fonts. This
+code is currently disabled, because none of the necessary underlying C is
+written yet. (pdf_font.ps)
+
+</pre><h3><a name="V4.37_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The floating point emulator often returned incorrect results (too
+many bugs to list). (This is not used in any standard configuration.)
+(gsfemu.c)
+ - The new copy_for procedure for gstates incorrectly declared an
+argument as const. (gxstate.h, gsstate.c)
+ - If a curve had to be split twice along the same axis to make it
+monotonic, the split points could still be returned in the wrong order,
+possibly causing curved edges to turn into straight lines, and the algorithm
+still produced the wrong results if the curve had to be split twice along a
+single axis. This is the second time we have "fixed" these problems and the
+4th time we have "fixed" the curve monotonizing algorithm. (gxpcopy.c)
+ - Setting halftones cause a memory leak, because the subsidiary
+objects of the device halftone weren't freed properly. Fixing this required
+changing the graphics state implementation from allocating a device halftone
+for each gstate to managing the device halftone with reference counting.
+(gxdht.h, gzstate.h, gsht.c, gsstate.c)
+
+Provides an optimized version of ldexp for FPU-less configurations, and
+changes one key algorithm to use it. (gxfixed.h, gsmisc.c, gxpcopy.c)
+
+Speeds up imagemask with a halftone a little. (This will eventually require
+more serious optimization.) (gximage2.c)
+
+Adds a -Z* switch for tracing varieties of image rendering. (gximage.c)
+
+Recognizes that if the logical operation is equivalent to D = S (after
+accounting for a constant texture, if any), or if it is equivalent to D = ~S
+or D = D {&amp;,|}{S,~S} and D and S are both monobit and both colors are pure,
+imaging with RasterOp can be executed without invoking RasterOp. (gsropt.h,
+gximage.c)
+
+Makes coordinate transformations with landscape matrices execute as fast as
+with portrait matrices. (gxmatrix.h, gscoord.c, gsmatrix.c)
+
+Adds some sketch code for interpreting Type 2 charstrings. It compiles, but
+it makes no pretense of being runnable. (gstype1.h, gxop1.h, gxtype1.h,
+gstype2.h, gxfont1.h, gstype1.c, gstype2.c)
+
+Extends the library to allow setting separate halftone phases for the
+RasterOp source and texture, which is needed to implement halftone screens
+that behave like those in H-P's PCL XL printers. (gscsel.h, gsstate.h,
+gxcmap.h, gxcspace.h, gxdcolor.h, gxdither.h, gxpcolor.h, gzht.h, gzstate.h,
+gscie.c, gscsepr.c, gsht.c, gspcolor.c, gxcht.c, gxcmap.c, gxdcolor.c,
+gxht.c, gximage.c, gximage[2345].c, gspcmap.c) ****** STILL NEED TO UPDATE
+BANDING CODE, grep FOR phase ******
+
+Removes the rc_header member from the gs_halftone structure, since we don't
+need it after all. (gxht.h)
+
+</pre>
+
+<h2><a name="Version4.36"></a>Version 4.36 (limited) (12/3/96)</h2>
+
+<p>
+This version fixes a number of library bugs related to RasterOp, Patterns,
+and memory management.
+
+<h3><a name="V4.36_Documentation"></a>Documentation</h3><pre>
+
+Changes the definition of texture transparency to match the peculiar H-P
+specification. (drivers.txt, language.txt)
+
+</pre><h3><a name="V4.36_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - x_get_bits didn't flush updates to the frame buffer, leading to
+possibly incorrect data being returned. (gdevx.c)
+ - x_get_bits added padding to the scan line being copied, possibly
+corrupting memory. (gdevx.c)
+
+Changes the x11mono driver to define white = 0, black = 1 to more closely
+model black-and-white printers. (This is an internal change that doesn't
+affect the output.) (gdevxalt.c)
+
+</pre><h3><a name="V4.36_Interpreter"></a>Interpreter</h3><pre>
+
+Removes some code that is no longer needed, by virtue of the fix for the
+memory leak in Pattern remapping. (zpcolor.c)
+
+</pre><h3><a name="V4.36_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Patterns wider than 1024 bits caused a rangecheck. (gxclip2.h,
+gxclip2.c)
+ - Dash patterns never got freed. The fix for this slows down gsave
+and grestore slightly, but we don't see any way around it. (gsline.c,
+gsstate.c)
+ - If the CTM was very non-uniform in X and Y, stroke sometimes
+didn't recognize thin lines as being thin, leading to dropouts.
+(gxstroke.c)
+ - RasterOps that didn't use S or T still took S or T transparency
+into account. (gdevmrop.c)
+ - RasterOps with no source didn't handle the possibility that the
+device color for black might have a value other than 0. (gxdcolor.h,
+gspcolor.c, gxcht.c, gxdcolor.c, gxht.c)
+ - White pixels in halftones on black-and-white devices apparently
+are *not* supposed to be treated as opaque for RasterOp. (gxcht.c, gxht.c)
+ - clippath caused memory to be lost until a restore or a garbage
+collection. (gspath.c)
+ - Clipping lists weren't ever freed, and clipping paths sometimes
+weren't freed, causing memory to be lost until a restore or a garbage
+collection. (gzacpath.h, gxacpath.c, gxcpath.c)
+ - Freeing a pattern instance referenced a pointer after it had been
+freed, causing an invalid memory access. (gspcolor.c)
+ - Remapping a Pattern color lost track of the temporary gstate,
+memory devices, and possibly the mask, causing memory to be lost until a
+restore or GC. (gxpcolor.h, gxpcmap.c)
+ - Remapping a Pattern color could cause paths to be marked as
+shared, preventing them from being freed until a restore or GC. (gxpcmap.c)
+
+Enhances the non-tracing garbage collector so that if there are no strings
+allocated at all, it resets the string allocation pointers. (gsnogc.c)
+
+Optimizes the black-and-white RasterOp implementation by recognizing cases
+that can be implemented directly by fill_rectangle, copy_mono, or
+tile_rectangle. (gdevmrop.h, gsropt.h, gdevmrop.c, gsroptab.c)
+
+Changes -ZA so it no longer produces [P] tracing messages for path
+construction. (gxpath.c)
+
+Adds a gx_pattern_cache_winnow procedure for selectively removing entries
+from the Pattern cache, similar to gx_purge_selected_cached_chars.
+(gscolor2.h, gxpcolor.h, gxpcmap.c)
+
+Adds the Pattern UID to Pattern cache entries. (gxpcolor.h, gxpcmap.c)
+****** MUST HANDLE XUID POINTERS ON GC (RELOC) &amp; RESTORE (CLEAR LIKE HT
+CACHE) ******
+
+Makes gs_gstate free the path representation of the clipping path if it's a
+rectangle, since reconstructing it is cheap and otherwise the path segments
+would not be freeable until a restore or GC. (gsstate.c)
+
+Extends the "client data" interface for gstates so that the copy procedure
+can determine why it is being called. (gxstate.h, gsstate.c)
+
+</pre>
+
+<h2><a name="Version4.35"></a>Version 4.35 (limited) (11/24/96)</h2>
+
+<p>
+This contains the usual bug fixes, and two minor enhancements: an option for
+handling EPSF files with binary headers, and support for file-based
+resources.
+
+<h3><a name="V4.35_Documentation"></a>Documentation</h3><pre>
+
+Documents the new EPSF-reading capability. (gs.mak)
+
+</pre><h3><a name="V4.35_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - Some obsolete definitions were accidentally left in the rules for
+compiling fonts into the executable. (int.mak)
+
+</pre><h3><a name="V4.35_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - initgraphics left the current color space in an inconsistent
+state. (bug introduced in 4.32) (zgstate.c)
+ - restore didn't properly rebind FontDirectory to either Local or
+SharedFontDirectory according to the current VM selection. (gs_dps1.ps)
+ - If FontDirectory was redefined, many things broke. (gs_ccfnt.ps,
+gs_dps1.ps, gs_fonts.ps, gs_pdfwr.ps)
+ - If a resource provided a file name but the file couldn't be
+opened, an error occurred. (gs_res.ps)
+ - flushfile didn't work with procedure-based streams. (zfileio.c)
+
+Adds a feature (epsf.dev) that allows the interpreter to recognize and
+handle MS-DOS EPSF files with a binary header. (int.mak, gs_epsf.ps,
+gs_init.ps, pdf_main.ps)
+
+Adds (internal) .getuserparam and .getsystemparam operators for getting the
+value of a single user or system parameter. (gs_lev2.ps, zusparam.c)
+
+To support file-based resources, implements the FontResourceDir,
+GenericResourceDir, and GenericResourcePathSep system parameters, and
+ResourceFileName for the built-in resource categories. (gs_init.ps,
+gs_lev2.ps, gs_res.ps)
+
+</pre><h3><a name="V4.35_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The 2-D CCITTFaxDecode filter became confused if a buffer boundary
+fell between a horizontal make-up code and its terminating code, typically
+causing an ioerror. (scfd.c)
+
+</pre><h3><a name="V4.35_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Using the null color could confuse the reference counts for color
+spaces, causing memory access errors. (gscolor.c)
+ - Images with CombineWithColor = true caused memory access error,
+because a structure element wasn't initialized. (gdevmrop.c)
+ - gs_setnullcolor tried to return an error code, even though it was
+declared as returning void. (Why doesn't gcc catch this??) (gscolor.h,
+gscolor.c)
+ - gs_setnullcolor was declared inconsistently as taking a const or
+non-const argument. (gscolor.h)
+ - Small color tiles in the band list were not read in correctly.
+(gxclread.c)
+ - The band list could get confused, causing ioerrors, invalid memory
+accesses, or garbled output, because the algorithms for computing the size
+of bitmaps when writing and when reading had gotten inconsistent. This code
+has been broken and "fixed" at least 4 or 5 times. (gxcldev.h, gxclbits.c,
+gxclread.c)
+ - When using banding, characters that extended off the page
+vertically in the -Y direction came out garbled. (gxclimag.c)
+ - The bounding box device didn't compute the box correctly for
+trapezoids. (gdevbbox.c)
+ - The fastest case of rendering monochrome images could cause
+unaligned data accesses. (bug introduced recently.) (gximage.h,
+gximage1.c)
+ - TrueType characters with no contours could cause an invalid memory
+access. (gstype42.c)
+ - Composite TrueType characters weren't rendered properly.
+(gstype42.c)
+
+Adds a get_outline procedure to the Type 42 font header, to provide a
+callback for getting the outline data for a glyph. (gxfont42.h, gstype42.c)
+
+</pre>
+
+<h2><a name="Version4.34"></a>Version 4.34 (limited) (11/18/96)</h2>
+
+<p>
+This release adds a little more support for CID-keyed fonts and for PCL
+emulation, and a bit more of the machinery for passing images through the
+band list.
+
+<h3><a name="V4.34_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - The RasterOp source device wasn't listed as an internal device in
+drivers.txt. (drivers.txt)
+
+Corrects a statement regarding the pstotext license. (new-user.txt)
+
+</pre><h3><a name="V4.34_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The Watcom makefile for the library didn't work properly if
+certain variables were overridden from the command line. (watclib.mak)
+ - The library code inadvertently depended on an interpreter header
+file. (*.mak)
+
+</pre><h3><a name="V4.34_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - Some very picky compilers complained about assigning 0 to a
+variable of an enum type. (gdevpdfx.h, gdevpdf.c)
+
+</pre><h3><a name="V4.34_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Some very picky compilers didn't like a cast from a pointer type
+to an int type. (idebug.c)
+ - Some very picky (and non-ANSI-compliant) compilers didn't allow
+assigning an int to a variable of enumerated type. (zfont2.c, zht2.c)
+ - The library code inadvertently depended on an interpreter header
+file. (iref.h)
+
+Restructures the font building code slightly to support CID fonts better.
+(gs_cidfn.ps, bfont.h, zcid.c, zfont0.c, zfont1.c, zfont2.c, zfont42.c)
+
+Adds a .setcurrentfile operator to allow disk-based fonts to keep their file
+open. (gs_cidfn.ps, zcontrol.c)
+
+</pre><h3><a name="V4.34_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - Some very picky compilers didn't like the computation (const byte
+*)0 - 1. (stream.c)
+ - A cast to ulong was omitted. (smtf.c)
+ - Some compilers got confused by typedefs in the zlib header files.
+(szlibd.c, szlibe.c)
+
+</pre><h3><a name="V4.34_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - A header file didn't select the proper system header on all POSIX
+systems. (malloc_.h)
+ - A subclass/superclass type discrepancy upset some compilers.
+(gsline.h, gsline.c, gxpdash.c)
+ - Some very picky compilers didn't accept the previous definition of
+the offset_of macro. (stdpre.h)
+ - Some very picky (and non-ANSI-compliant) compilers didn't like
+mixing int and enumerated types. (gsropt.h, gzstate.h, gdevmrop.c,
+gdevrrgb.c, gsrop.c, gxclist.c)
+ - A cast was missing. (gslib.c)
+ - The gs_setxxxtransparent procedures interpreted their argument
+backwards (i.e., as "opaque" rather than "transparent"). (gsrop.c)
+ - Intersecting clipping paths didn't reset the logical operation to
+the default, causing a possible crash. (gsrop.h, gsrop.c, gxacpath.c)
+ - Pattern accumulation didn't reset the logical operation to the
+default, possibly causing incorrect output. (gspcolor.c)
+ - If a Type 1 character ended with a curve and a closepath, a
+microscopic line could result, causing output anomalies. (gstype1.c)
+ - Stroking a path with a mix of thin and non-thin lines could cause
+extraneous lines to appear. (gxstroke.c)
+ - Zero-width rectangles were painted even when fill adjustment was
+turned off. (gxpaint.c, gxstroke.c)
+ - The algorithm for dividing a curve into monotonic pieces could
+produce incorrect results, causing anomalies when filling curved regions
+with zero fill adjustment. (gxpcopy.c)
+ - The algorithms for outside clipping were wrong, causing some
+inside regions not to be clipped. (gxcpath.c)
+ - The white pixels in halftones weren't treated as unconditionally
+opaque for RasterOp. (gxht.c, gxcht.c)
+ - Images with RasterOp didn't work properly. (gdevmrop.c,
+gximage[2345].c, gxpcmap.c)
+ - The library code inadvertently depended on an interpreter header
+file. (gxalloc.h, genarch.c)
+ - An important optimization for stroking (recognizing portrait,
+landscape, and unscaled CTMs) was commented out. WE DON'T HAVE ANY RECORD
+OF WHY WE DID THIS, AND RESTORING IT MAY INTRODUCE NEW BUGS. (gxstroke.c)
+ - Bitmap images with non-zero data_x values were passed through the
+band list incorrectly, possibly causing vertical "streaks" in the output.
+(gxcldev.h, gxclread.c)
+ - If a curve had to be split twice along the same axis to make it
+monotonic, the split points were returned in the wrong order, possibly
+causing curved edges to turn into straight lines. (gxpcopy.c)
+
+Changes the debugging printout format for paths so the output can be
+processed mechanically more easily. (gxpath.c)
+
+Adds gs_glyphpath, like charpath but taking a glyph rather than a string of
+character codes. (gschar.h, gschar.c)
+
+Adds an internal concept of a "null color", a color that doesn't actually
+mark any pixels. (gscolor.h, gsdcolor.h, gxdcolor.h, gscolor.c, gxdcolor.c)
+
+Takes the next incremental steps towards passing images through the band
+list:
+ - Implements the ability to pass some color mapping information
+(transfer functions, black generation, undercolor removal) through the band
+list. (gxclist.h, gxclimag.c, gxclist.c, gxclread.c)
+
+</pre>
+
+<h2><a name="Version4.33"></a>Version 4.33 (limited) (11/6/96)</h2>
+
+<p>
+This release fixes yet another obscure bug in the recently rewritten fast
+loops for image rendering. (These loops have caused more problems than any
+other single module of the entire library.) It also adds preliminary
+support for CID-keyed fonts (CIDFonts only, not CMaps yet) and some library
+extensions for supporting HP-GL/2.
+
+<h3><a name="V4.33_Documentation"></a>Documentation</h3><pre>
+
+Adds considerable new material to the C style document. (c-style.txt)
+
+Changes -cckr to -ansi in the SGI build procedure. (make.txt)
+
+Corrects an error in the description of the .type42execchar operator.
+(gs_typ42.ps)
+
+</pre><h3><a name="V4.33_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The 'man' pages were installed in the documentation directory as
+well as in the man directory. (unix-end.mak)
+
+</pre><h3><a name="V4.33_Interpreter"></a>Interpreter</h3><pre>
+
+Adds support for CID-keyed fonts. There is no CMap support yet, and some
+things are done with hacks. (int.mak, gs_cidfn.ps, gs_cmap.ps, ichar.h,
+zchar.c, zchar2.c, zchar42.c, zfont2.c, zfont42.c, zcid.c)
+
+Adds operators for accessing the new dash adaptation and dot length
+parameters in the graphics state. (gs_init.ps, zgstate.c)
+
+</pre><h3><a name="V4.33_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The fast case of monobit image rendering could overwrite memory.
+(gximage1.c)
+ - The new fast implementation of rectfill didn't check for
+fixed-point overflow. (gsdps1.c)
+ - Internally, fonts with no name all appeared to have the same name,
+possibly confusing the xfont machinery. (gxccman.c)
+ - A cast to remove const was omitted, upsetting some compilers.
+(gximage1.c)
+ - The driver's stroke_path routine was not called if the logical
+operation was not the default one. (gxpaint.c)
+
+Adds support for CID-keyed fonts. (gsccode.h, gxfont.h)
+
+Adds a new "dash pattern adaptation" flag in the imager state. When this
+flag is set and a dash pattern is in effect, each line segment will receive
+an integral number of repetitions of the dash pattern (if necessary, rounded
+up). (gsline.h, gxline.h, gsline.c, gsstate.c, gxpdash.c)
+
+Adds a new "dot length" parameter to the imager state. If this parameter is
+non-zero, it gives a length for rendering dots (zero-length lines). See
+language.txt for details. (gsline.h, gxline.h, gsline.c, gsstate.c,
+gxstroke.c)
+
+Extends band lists so they can handle dash pattern adaptation and dot
+length. (gxcldev.h, gxclpath.h, gxclpath.c, gxclread.c)
+
+Adds a floating point emulator to allow more realistic profiling of
+configurations without a FPU. (gsfemu.c)
+
+</pre>
+
+<h2><a name="Version4.32"></a>Version 4.32 (limited) (11/1/96)</h2>
+
+<p>
+This fixes a couple more bugs, most notably the infamous "pixel stripe" bug.
+
+<h3><a name="V4.32_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - The documentation said that Ghostscript could not interpret
+encrypted PDF files. (language.txt)
+ - A number of Ghostscript's extensions to the PostScript language
+were missing. (language.txt)
+
+</pre><h3><a name="V4.32_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - A compiler complained about initializing an unsigned variable with
+a negative value. (gdevx.c)
+ - An off-by-1 allocation error could cause memory overwriting.
+(gdevepsc.c)
+
+</pre><h3><a name="V4.32_Platforms"></a>Platforms</h3><pre>
+
+Declares a pointer 'const' that is actually only used for reading.
+(gp_unifs.c)
+
+</pre><h3><a name="V4.32_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - The code for adding nominal UnderlinePosition and
+UnderlineThickness entries to FontInfo assumed (incorrectly) that all Type 1
+fonts had FontBBox entries. (gs_type1.ps)
+
+Brings CIDFont support closer to reality. It doesn't work yet, though.
+(gs_cidfn.ps, gs_fonts.ps, gs_init.ps, gs_res.ps, gs_typ42.ps)
+
+</pre><h3><a name="V4.32_Interpreter"></a>Interpreter</h3><pre>
+
+Removes a redundant implementation of initgraphics. (gs_init.ps)
+
+Speeds up rectfill a little for the common case (4 numbers on the stack).
+(zdps1.c)
+
+</pre><h3><a name="V4.32_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Zero-width, 1-bit-deep, landscape or portrait images could
+overwrite memory ad lib. (gximage1.c)
+ - A procedure was declared 'static' inconsistently, upsetting many
+compilers (but not gcc, which, in contradiction to the ANSI standard,
+doesn't check this properly). (gxcpath.c)
+ - A local variable was initialized with a value computed from a
+variable that hadn't been set yet, leading to possibly incorrect coloring of
+the first run of pixels in images with 12 bits per sample. (gximage4.c)
+ - A compiler complained about initializing an unsigned variable with
+a negative value. (shcgen.c)
+ - A rounding problem could produce a vertical stripe of 1 (or on
+very large images possibly more) incorrect pixels at the right edge of a
+1-bit-deep image. (gxdda.h, gximage1.c)
+
+Speeds up gs_rectfill substantially for the portrait/landscape case with a
+rectangular clipping region. (gsdps1.c)
+
+Adds a parameter so we can include gx_line_params in subclasses. (gzline.h)
+
+</pre>
+
+<h2><a name="Version4.31"></a>Version 4.31 (limited) (10/27/96)</h2>
+
+<p>
+This is primarily a bug fix release for 4.30, which we had hoped wouldn't be
+necessary....
+
+<h3><a name="V4.31_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - The comment describing the order of coefficients in a CTM written
+on the band list was wrong. (gxclpath.h)
+
+</pre><h3><a name="V4.31_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - bug-form.txt wasn't installed by 'make install'. (unix-end.mak)
+ - The default flags in ugcclib.mak didn't take the gcc code
+generation bug into account. (ugcclib.mak)
+
+</pre><h3><a name="V4.31_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - MetroWerks CodeWarrior predefines true and false, causing
+compilation errors on the Mac. (stdpre.h)
+
+</pre><h3><a name="V4.31_Interpreter"></a>Interpreter</h3><pre>
+
+Updates code for the change in the ENUM_PTR macros. (iscan.c)
+
+Changes the allocator to keep track of "lost" ref space separately, to allow
+an independent check on its activities. (gxalloc.h, ialloc.c, isave.c)
+
+Changes the garbage collector API slightly to allow implementation of the
+API in applications other than PostScript interpreters. (ivmspace.h,
+ireclaim.c, igc.c)
+
+</pre><h3><a name="V4.31_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Implements the PDF 1.1 BX and EX operators. (pdf_base.ps, pdf_main.ps)
+
+</pre><h3><a name="V4.31_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - Some (harmless) pointer incompatibilities upset some compilers.
+(szlibd.c, szlibe.c)
+
+Updates code for the change in the ENUM_PTR macros. (stream.c)
+
+</pre><h3><a name="V4.31_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - A label in the ENUM_PTR procedure generating macros was often not
+referenced, leading to compiler warnings. (gsstruct.h, gxxfont.h,
+gdevmem.c, gschar.c, gscolor2.c, gsdevice.c, gsfont0.c, gsht.c, gsstate.c,
+gxcpath.c, gximage.c)
+ - Using the gstate version of setflat rather than the imager version
+caused compiler warnings (and, in some cases, errors). (gstype1.c)
+ - Non-standard ImageMatrix values for banded images didn't work.
+(This wasn't actually used.) (gxclread.c)
+ - imagemask with a halftone and portrait orientation colored some
+inappropriate pixels. (bug introduced in 4.30) (gximage2.c)
+ - When banding, if a character straddled a band boundary the first
+time it occurred, all occurrences of it were clipped. (bug introduced in
+4.2x or 4.30) (gxclimag.c)
+ - Degenerate clipping rectangles sometimes got turned into
+non-degenerate ones by swapping the min and max coordinates. (gxcpath.c)
+ - Resizing an object either allocated a new object unnecessarily
+(performance bug only), or in very rare cases could corrupt memory.
+(gsalloc.c)
+ - Very small objects didn't get put on a free list when freed.
+(Performance bug only.) (gsalloc.c)
+ - Some pointers were incorrectly declared 'const', upsetting some
+compilers. (gxclread.c)
+
+Adds more tracing output for -ZL. (gxclread.c)
+
+Changes the -Za tracing output slightly to aid mechanical analysis of
+allocation traces: allocation events now always include a '+', deallocation
+events always include a '-', and the address is always the address of the
+object data and not the header. (gsalloc.c, gsmemory.c)
+
+Changes the allocator to keep track of "lost" object and string space
+separately, to allow an independent check on its activities. (gxalloc.h,
+gsalloc.c)
+
+Changes the allocator to use 'memmove' in an obvious place. (gsalloc.c)
+
+Provides a garbage collector API at the library level to allow
+implementation of the API in applications other than PostScript
+interpreters. (gsgc.h)
+
+</pre>
+
+<h2><a name="Version4.30"></a>Version 4.30 (limited) (10/23/96)</h2>
+
+<p>
+The main purpose of this release is to implement a substantial change in the
+"high level" image API, after which we believe this API will be stable.
+
+<h3><a name="V4.30_Documentation"></a>Documentation</h3><pre>
+
+Documents the changes in the begin_image and image_data device procedures.
+(drivers.txt)
+
+</pre><h3><a name="V4.30_Drivers"></a>Drivers</h3><pre>
+
+Speeds up the PDF writer a little by reducing the amount of allocation,
+which was causing very frequent garbage collections. (gs_pdfwr.ps,
+gdevpdft.c)
+
+Updates the PDF writer for the change in begin_image/image_data.
+(gdevpdfi.c)
+
+</pre><h3><a name="V4.30_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - Some versions of the SGI IRIX compiler have a bug that causes them
+to try to expand macros that require arguments even when the macro name
+isn't followed by a left parenthesis. (gdevsgi.h, gdevsgi.c)
+ - The IBM RS6000 compilers now provide &lt;stdlib.h&gt;, so our
+definitions of malloc and free caused a conflict. (malloc_.h)
+
+</pre><h3><a name="V4.30_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - Many Fontmaps included obsolete references to an old
+Helvetica-Narrow font. (Fontmap.*)
+
+Makes the GS_FONTPATH directory scanner a little more liberal about what
+files it examines: it will now examine any file whose first line begins with
+%!PS-Adobe or %!FontType. (gs_fonts.ps)
+
+To match an apparent Adobe convention, augments findfont so that if a font
+isn't in the Fontmap, it will try to load a file whose name is the same as
+the font name. (gs_fonts.ps)
+
+To make some questionable Apple font inquiry code work, augments the
+FAKEFONTS facility so that it sets the FontType of fake fonts to 1.
+(gs_fonts.ps)
+
+</pre><h3><a name="V4.30_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - .checkpassword, .putdeviceparams, .putdevparams, setsystemparams,
+and setuserparams didn't free the results byte array, causing a memory leak
+(until the next garbage collection). (zdevice.c, ziodev.c, zusparam.c)
+
+</pre><h3><a name="V4.30_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The code for emulating floating point multiplication with
+conversion to fixed point didn't detect overflow correctly, which could
+produce incorrect results instead of a limitcheck. (gsmisc.c)
+ - A macro cast a pointer incorrectly, leading to spurious compiler
+warnings. (gxfixed.h)
+ - The code for emulating fixed-to-float conversion computed the
+exponent incorrectly. (gsmisc.c)
+ - The algorithm for advancing a DDA a given number of steps (not
+actually used anywhere before this version) was wrong. (gxdda.h)
+ - The clipping box returned by clipping devices was incorrect,
+causing parts of the page to disappear. (bug introduced in 4.20)
+(gxcpath.c)
+
+Changes the begin_image and image_data device procedures:
+ - begin_image now takes an optional subrectangle instead of a set of
+shape flags.
+ - image_data now always takes complete rows of pixels, takes a
+source X offset, and returns 1 when it has received all the data.
+
+The change in begin_image and image_data is a NON-BACKWARD-COMPATIBLE CHANGE
+IN A PUBLIC INTERFACE; however, this interface was still designated "subject
+to change", per the notes for release 3.67 and the documentation in
+drivers.txt. (gsiparam.h, gxclpath.h, gxdda.h, gxdevice.h, gximage.h,
+gdevbbox.c, gdevnfwd.c, gsimage.c, gxclimag.c, gxclread.c, gximage.c,
+gximage?.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version4.21"></a>Version 4.21 (limited) (10/17/96)</h2>
+
+<p>
+The purpose of this release is to fix bugs reported in 4.0x, 4.10, and 4.20.
+
+<h3><a name="V4.21_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - The Ghostscript man page had a .TH in the middle. (gs.1)
+
+</pre><h3><a name="V4.21_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The shared version of zlib was always called libgz; on most
+systems, it is now called libz (but not on Red Hat Linux, where libz is a
+library for dealing with time zones). (*.mak, gs.mak, libpng.mak, zlib.mak)
+ - The pdf2dsc.1 man page wasn't installed on Unix systems.
+(unix-end.mak)
+ - font2c generated procedures named gsf_xxx, but genconf assumed
+they were named gs_f_xxx. (int.mak)
+
+</pre><h3><a name="V4.21_Drivers"></a>Drivers</h3><pre>
+
+Updates the user-contributed LBP-8II driver to correct unspecified problems.
+(gdevlbp8.c)
+
+Adds a user-contributed driver for Avance Logic SuperVGA cards.
+(gdevsvga.c, devs.mak)
+
+</pre><h3><a name="V4.21_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - On Windows NT, a 32-bit parameter was truncated to 16 bits,
+preventing drawing of scroll bars of the image window when the window is
+uncovered. (dwimg.cpp)
+
+</pre><h3><a name="V4.21_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - The free URW Grotesk and Antiqua fonts were omitted from the
+distribution.
+
+</pre><h3><a name="V4.21_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Defining a new global instance of a built-in resource
+(ColorRendering, ColorSpace, Form, Halftone, Pattern, ProcSet) caused an
+invalidaccess error. (gs_res.ps)
+ - pathbbox with no current path left an extra item on the stack when
+the error occurred. (gs_init.ps)
+ - findresource for an undefined resource instance didn't preserve
+the contents of the stack. (gs_res.ps)
+
+Adds a new file providing a procedural interface with a very rudimentary
+form of job encapsulation. (gserver.c)
+
+Changes the initial value of MaxOpStack to 20000, for the sake of a few
+badly-behaved files. (gs_init.ps, pdf_base.ps)
+
+</pre><h3><a name="V4.21_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - If the image operators failed to allocated their bookkeeping
+structure, the result was a crash rather than VMerror. (gximage.c)
+ - gx_default_fill_triangle (currently used only to implement the
+fastest case of stroke) had a typo that could cause a numeric exception or
+incorrect output, and another typo that could produce incorrect output.
+(gdevddrw.c)
+ - When banding, if the first occurrence of a character fell partly
+off the page, all occurrences of that character on the page could be clipped
+or mangled. (gxclbits.c, gxclimag.c)
+ - When testing whether it's worthwhile compressing a bitmap for
+banding, the compressor was allowed to generate a lot more output than
+needed to make the test. (gxclbits.c)
+ - Certain cases of unrotated gray-scale images dropped the first or
+last pixel of each scan line. (gximage2.c)
+ - In rare cases, a run of pixels in a image could get erroneously
+displayed in the same color as the previous run, because of a cache
+bookkeeping bug. (gximage3.c)
+ - The sample driver for the library had gotten inconsistent with a
+header file. (gslib.c)
+ - A declaration was followed by an extraneous semicolon, which upset
+some compilers. (gxht.h)
+ - Missing parentheses caused a test for thin lines to be incorrect.
+(gxstroke.c)
+
+</pre>
+
+<h2><a name="Version4.20"></a>Version 4.20 (limited) (10/13/96)</h2>
+
+<p>
+This release has internal changes for future support of banded image
+processing, but no externally visible changes. Its primary purpose is to
+incorporate speedups for clipped images. It does *not* incorporate fixes
+for all problems reported in 4.0x or 4.10.
+
+<h3><a name="V4.20_Documentation"></a>Documentation</h3><pre>
+
+Documents the new get_clipping_box device procedure. (drivers.txt)
+
+</pre><h3><a name="V4.20_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - There were many, many minor inconsistencies between the makefiles
+and the source code. (We finally have an automated tool to detect these.)
+(devs.mak, int.mak, lib.mak, unixtail.mak; gsutil.c, zwppm.c)
+ - Some makefile rules weren't properly terminated by a blank line.
+(lib.mak)
+
+</pre><h3><a name="V4.20_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - The comments in gslp.ps had gotten out of date. (gslp.ps)
+
+Adds --no-eject-file and --no-eject-formfeed switches to gslp.ps, to allow
+packing files in multi-column printouts. (gslp.ps)
+
+</pre><h3><a name="V4.20_Drivers"></a>Drivers</h3><pre>
+
+Adds a user-contributed driver for the Epson LP-8000 laser printer.
+(gdevlp8k.c)
+
+Adds a DisplayMode parameter to the vgalib device. (gdevvglb.c)
+
+Removes the requirement of typing a character at the end of each page using
+the vgalib driver. THIS IS A USER-VISIBLE, NON-BACKWARD-COMPATIBLE CHANGE.
+(gdevvglb.c)
+
+</pre><h3><a name="V4.20_Interpreter"></a>Interpreter</h3><pre>
+
+Updates code to accommodate the new get_clipping_box device procedure.
+(zupath.c)
+
+</pre><h3><a name="V4.20_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - When a CTM was passed through the band list, it didn't get
+translated to match the band coordinate system. (This had no effect,
+because the translation part of the CTM was never used.) (gxclread.c)
+
+Adds a ',' debugging switch to disable high-level operations when banding.
+(gxclpath.c)
+
+Adds an optional get_clipping_box device procedure, so that filling and
+stroking can clip more aggressively. (gdevmem.h, gdevprn.h, gxdevice.h,
+gxpaint.h, gxpath.h, gzacpath.h, gdevdflt.c, gdevht.c, gdevnfwd.c,
+gxacpath.c, gxclip2.c, gxclist.c, gxcpath.c, gxpcmap.c, gxfill.c,
+gxstroke.c)
+
+Speeds up clipped filling and stroking, by checking against the device
+clipping box. (gxfill.c, gxstroke.c)
+
+Adds the ability to clip with a rectangle a clipping path being accumulated,
+and uses it to do more aggressive clipping when banding. (gzacpath.h,
+gxacpath.c, gxclread.c)
+
+Speeds up clipping of objects lying partly above or below the clipping
+region. (gxcpath.c)
+
+Speeds up clipping vertically-oriented objects (such as 90 degree rotated
+images or vertical rectangles) with convex clipping regions, by checking for
+vertical rectangles contained in multiple clipping rectangles. (gxcpath.c)
+
+Speeds up the handling of 90 degree rotated gray-scale images. (gximage2.c)
+
+Enhances the band list so that it can contain commands for a range of bands,
+not just a single band or all bands. (gxcldev.h, gxclist.h, gxclbits.c,
+gxclist.c, gxclread.c)
+
+Adds an operation to the DDA structure, for eventual support of clipped
+images. (gxdda.h)
+
+Factors out some macros useful for generating bit-transformation tables.
+(gsbittab.h, gsbittab.c, gsflip.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version4.10"></a>Version 4.10 (limited) (9/25/96)</h2>
+
+<p>
+This release adds local garbage collection, and a number of performance
+improvements for garbage collection in general. We will support it for one
+or two OEMs, but it is not a public release.
+
+<h3><a name="V4.10_Documentation"></a>Documentation</h3><pre>
+
+Moves documentation for all releases before 4.0 to history3.txt. (NEWS,
+history3.txt)
+
+</pre><h3><a name="V4.10_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - pdf2dsc.ps didn't have a proper license notice. (pdf2dsc.ps)
+
+</pre><h3><a name="V4.10_Drivers"></a>Drivers</h3><pre>
+
+Adds a psgray driver, like psmono, to produce 8-bit gray PostScript (level
+1) images. (devs.mak, *.mak, gdevpsim.c)
+
+Changes the psmono driver to allow runs of up to 255 repeated bytes.
+(gdevpsim.c)
+
+</pre><h3><a name="V4.10_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - setdevice erased the page even if this wasn't necessary.
+(zdevice.c)
+
+Speeds up the garbage collector, primarily by speeding up pointer
+relocation. (int.mak, ipacked.h, iref.h, ialloc.c, igc.c, igcref.c)
+
+Actually implements local garbage collection. (igc.h, ivmspace.h, igc.c,
+igcref.c, igcstr.c, ireclaim.c)
+
+Adds some additional error checking for the -Z? switch. (ilocate.c)
+
+Moves a utility for color mapping from the interpreter to the library.
+(icolor.h, zcolor.c)
+
+Adds a MinScreenLevels user parameter. (zusparam.c)
+
+</pre><h3><a name="V4.10_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Adds partial support for the PDF 1.2 gs operator, reverse engineered from a
+PDF 1.2 file. (pdf_draw.ps)
+
+</pre><h3><a name="V4.10_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The test for "thin" stroked lines incorrectly claimed some
+non-thin lines were thin. (gxstroke.c)
+ - The computations for halftone cells didn't work for non-square
+pixels. (gxdht.h, gsht.c, gsht1.c, gshtscr.c)
+
+Speeds up the garbage collector a little. (gsstruct.h, gxalloc.h,
+gxfcache.h, gsfont.c)
+
+Replaces references to private statically allocated color spaces with
+references to shared dynamically allocated ones, which are guaranteed to be
+fully filled-in. (gscie.c)
+
+Moves a utility for color mapping from the interpreter to the library.
+(gxfmap.h, gxcmap.c)
+
+Makes available an imager analogue of setmatrix. (gscoord.h, gscoord.c)
+
+Adds a parameter to control the minimum number of halftone screen levels.
+If a halftone cell has fewer pixels than this number, it will be replicated
+(similar to what AccurateScreens does) until the replicated screen has
+enough levels. (gxht.h, gshtscr.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version4.03"></a>Version 4.03 (9/23/96)</h2>
+
+<p>
+This was an emergency re-release of 4.02 to fix the stdin redirection
+problem. It has essentially no other changes.
+
+<h3><a name="V4.03_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - Solaris 2.x has /usr/ucb/install, not installbsd. (make.txt)
+
+Updates current.txt to mention the ability to share libpng and libgz.
+(current.txt)
+
+</pre><h3><a name="V4.03_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - A rule assumed that the makefile was named `makefile'.
+(unixtail.mak)
+
+</pre><h3><a name="V4.03_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The stcolor drivers had an off-by-1 error that could cause them to
+write into unallocated memory. (gdevstc.c)
+ - The Imagen driver wouldn't compile with gcc. (gdevimgn.c)
+
+</pre><h3><a name="V4.03_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - The Solaris fontmap had gotten out of date. (Fontmap.Sol)
+
+</pre><h3><a name="V4.03_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The test for stdin being non-seekable could leave the file error
+flag set, which caused an infinite loop when trying to read from the file
+later. (sfile.c, sfileno.c)
+
+</pre>
+
+<h2><a name="Version4.02"></a>Version 4.02 (9/19/96)</h2>
+
+<p>
+This release fixes a few more bugs, and adds the ability to read encrypted
+PDF files and some PDF 1.2 files.
+
+<p>
+This release was withdrawn after a few days because the stdin redirection
+fix, which was made at the last minute, cause Ghostview to hang.
+
+<h3><a name="V4.02_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - The list of required support files was incorrect. (install.txt)
+ - The descriptions of file name lookup weren't accurate. (use.txt)
+ - A J should have been an H. (gxbitmap.h)
+
+Updates the documentation about encrypted PDF files. (new-user.txt)
+
+Documents what the 13 base PDF fonts are. (ps2pdf.txt)
+
+Fixes a tiny typo. (c-style.txt)
+
+Adds a user-contributed man page for the new pdf2dsc script. (pdf2dsc.1)
+
+Updates the government restricted rights notice in the Aladdin Ghostscript
+Free Public License. (PUBLIC)
+
+Adds the URL of test files to the bug report form. (new-user.txt)
+
+Puts the bug reporting form in a separate file. (readme, bug-form.txt,
+new-user.txt)
+
+Notes that map_xxx_color procedures should not return gx_no_color_index.
+(drivers.txt)
+
+Notes that Ghostscript supports the Flate filters. (language.txt)
+
+Documents the use of the system libpng and zlib. (make.txt, gs.mak)
+
+Notes that Borland C++ 5.0 and 5.01 will not compile Ghostscript correctly.
+(make.txt)
+
+</pre><h3><a name="V4.02_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - Using both DELAYBIND and SAFER caused problems. (pstotext uses
+DELAYBIND.) (gs_init.ps)
+
+</pre><h3><a name="V4.02_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - Some pdf2ps machinery interfered with the PDF interpreter.
+(pdf_2ps.ps, pdf_main.ps)
+ - In the output of pdf2ps, page numbers in link destinations were
+too high by 1. (pdf_main.ps)
+ - viewpbm didn't handle value ranges other than [0..255] correctly.
+(viewpbm.ps)
+
+Adds a user-contributed shell script to invoke pdf2dsc.ps. (pdf2dsc,
+unix-end.mak)
+
+Adds a switch to the genconf utility to set the prefix for generated
+procedure names. (genconf.c)
+
+Adds the option of using system libraries (possibly shared) for libpng
+and/or zlib. (*head.mak, msc*.mak, os2.mak, tccommon.mak, wccommon.mak;
+libpng.mak, zlib.mak)
+
+</pre><h3><a name="V4.02_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The X11 display devices ignored the -DA4 compile-time option.
+(gdevx.c)
+ - The garbage collector could scramble the state of the CGM drivers.
+(gxdevice.h, gdevcgm.c)
+ - An identifier of more than 31 characters upset the VAX DEC C
+compiler. (gdevcgml.h, gdevcgml.c)
+ - In case of an error in trying to set the CoreDistVersion distiller
+parameter, a variable could be used without initialization. (gdevpdfp.c)
+ - When DEBUG is selected, the X Windows driver referenced _Xdebug,
+which is not defined in (at least the VMS version of) DECWindows. (x_.h,
+gdevxini.c)
+ - Some map_cmyk_color implementations could return "transparent".
+(gdevbit.c)
+ - Setting GraphicsAlphaBits or TextAlphaBits in the P*M drivers
+caused an error. (gdevpbm.c)
+ - If a user cancelled printing under MS Windows, a confusing error
+resulted, and a temporary file wasn't deleted. (gdevwpr2.c)
+ - The map_color_rgb procedure for the bit devices produced incorrect
+results. (This probably had no effect in practice.) (gdevbit.c)
+ - The os2prn device produced incorrect output. (gdevos2p.c)
+ - The OS/2 PM device didn't detect PM applications correctly.
+(gdevpm.c)
+ - The MS Windows printer driver didn't automatically detect the
+printer's color capabilities. (gdevwpr2.c)
+ - The BJC-610 driver didn't print at 720 dpi. (gdevcdj.c)
+ - The static prototypes of many devices didn't include the far_data
+keyword. (gdev3852.c, gdev4081.c, gdevbgi.c, gdevcgm.c, gdevht.c,
+gdevimgn.c, gdevl256.c, gdevmrop.c, gdevn533.c, gdevnfwd.c, gdevnp6.c,
+gdevo182.c, gdevpcfb.c, gdevpdf.c, gdevpe.c, gdevpm.c, gdevs3ga.c,
+gdevsnfb.c, gdevsppr.c, gdevsun.c, gdevsvga.c, gdevtknk.c, gdevvglb.c,
+gdevwddb.c, gdevwprn.c, gdevx.c, gdevxalt.c)
+ - The (original) deskjet driver collapsed print lines towards the
+left margin. (gdevdjet.c)
+
+Adds to the pgm/pgnm/ppm/pnm[raw] drivers the ability to set the maximum
+pixel value, by setting any of the Gray/Red/Green/BlueValues device
+parameters. (gdevpbm.c)
+
+Adds pkm[raw] drivers, which do all their internal computations in CMYK and
+convert the data to RGB as they write the file. (gdevpbm.c)
+
+</pre><h3><a name="V4.02_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The VMS script referred to old versions of the third-party
+libraries. (vms.mak)
+ - Under VMS with DEC C, attempting to open a new file fails.
+(gp_vms.c)
+ - If you tried to print (gp_printfile) under Windows on a system
+with no printers installed, Ghostscript caused a GPF. (gp_mswin.c)
+
+Restores support for a non-DLL MS Windows platform. (bcwin32.mak,
+dwnodll.cpp)
+
+Adds a new MS Windows DLL call, gsdll_get_bitmap. (gsdll16.def,
+gsdll32.def, dll.txt, gdevwdib.c)
+
+Fixes a variety of other small Windows- and OS/2-related problems, mostly
+related to printing. (gp_mswin.h, dpmainc.c, dwmain.cpp, dwmainc.cpp,
+gdevmswn.c, gdevpm.c, gdevwpr2.c, gp_mswin.c)
+
+</pre><h3><a name="V4.02_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - The value of /newerror in $error was true at the end of
+initialization. We now reset it after each internal use of stopped if
+necessary. (gs_dps1.ps, gs_fform.ps, gs_fonts.ps, gs_init.ps, gs_pdf.ps,
+gs_res.ps, gs_type1.ps)
+ - setpagedevice (and finddevice) didn't recognize Default.
+(gs_init.ps)
+ - When running with -dNODISPLAY, calling gssetresolution would cause
+a crash. (gs_init.ps)
+ - A particular combination of save, .forgetsave, and garbage
+collection could cause a memory access error in restore. (isave.c)
+ - Some references to systemdict were affected if a user redefined
+the name /systemdict. (gs_cmdl.ps, gs_fonts.ps, gs_kanji.ps, gs_dps1.ps,
+gs_init.ps, gs_res.ps, gs_statd.ps, gs_type1.ps)
+ - The insideness testing operators caused an invalid memory access.
+(drivers.txt, zupath.c)
+ - If a readline reached an input buffer boundary between the \r and
+\n of a 2-character EOL, an error could occur. (zfileio.c)
+ - setdevparams caused an error. (gs_lev2.ps)
+
+Changes file names beginning with ./ or ../ so they are recognized as
+"absolute" and not subject to the search path. (gp_dosfs.c, gp_ntfs.c,
+gp_os2.c, gp_unifn.c)
+
+Changes the exit code for -h or --help from 0 to 1, so an invoking program
+will keep the output around for the user to look at. (imainarg.c)
+
+Adds the FlateEncode and FlateDecode filters; adds PNG pixel prediction to
+the LZW filters. These additions are required for PDF 1.2 and will be part
+of PostScript Level 3. (int.mak, lib.mak, zfdecode.c, zfilter2.c, zfzlib.c,
+zfpngp.c [deleted])
+
+</pre><h3><a name="V4.02_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - The copyright notices on some files didn't mention the Aladdin
+free license. (pdf_*.ps)
+ - Some references to systemdict were affected if a user redefined
+the name /systemdict. (pdf_font.ps)
+ - The value of /newerror in $error was true at the end of
+initialization. We now reset it after each internal use of stopped if
+necessary. (pdf_main.ps)
+ - stdin redirection failed for PDF files even if the new stdin was
+seekable. (pdf_main.ps)
+ - The Rotate key rotated pages in the wrong direction.
+(pdf_main.ps)
+
+Adds a minimal "security socket" to the interpreter. This does not include
+any actual decryption code; such code is available elsewhere (see
+new-user.txt). (int.mak, pdf_base.ps, pdf_main.ps, pdf_sec.ps)
+
+Adds a PDF 1.2 capability:
+ - The destination in a Dest array can be a page number as well as a
+page object. (pdf_main.ps)
+
+</pre><h3><a name="V4.02_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - stdin was assumed to be non-seekable. (sfile.c, sfileno.c)
+
+</pre><h3><a name="V4.02_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Garbage collection could corrupt a pointer in Type 0 fonts.
+(gxfont0.h, gsfont0.c)
+ - When applying hints to a Type 1 font outline, the last point could
+sometimes get moved twice, causing output anomalies. (gxhint3.c)
+ - An #include needed for debugging was missing. (gxcmap.h)
+ - Graphics states included a no-longer-used private color space
+object. (gsstate.c)
+ - Images could get clipped randomly in the X direction. (I don't
+understand why this problem hasn't shown up more often, since it's been
+there since release 4.00.) (gximage.c)
+ - The arct and arcto operators failed to draw the line to the
+starting point of the arc. (bug introduced in 4.01) (gspath1.c)
+ - Prefix subclasses of simple structures caused an invalid memory
+access. (gsstruct.h)
+ - The variable fheight was sometimes unused. (gstype1.c)
+ - igcd and imod didn't have prototypes in an appropriate header
+file, and were declared extern in several places. (gsdcolor.h, gsline.h,
+gxarith.h, gxdht.h, gsht.c, gshtscr.c, gsimage.c, gsline.c, gstype1.c,
+gxclimag.c)
+ - When using a non-identity RenderTable in a CIE rendering
+dictionary, all colors came out too light. (gscie.c)
+ - When using anti-aliased graphics, stroked lines were rendered too
+thin. (gspaint.c)
+ - The default map_cmyk_color implementations could return
+"transparent". (gxcmap.c)
+ - The number of bits of alpha requested when rendering anti-aliased
+characters could exceed 4. (gschar.c)
+ - Multi-screen halftones could cause errors or infinite looping when
+banding. (This problem predates 4.0; I don't know why it didn't show up
+before.) (gxcldev.h, gxclist.c, gxclread.c)
+ - Skewed or rotated gray-scale images, or masks with a halftoned
+color, omitted one line of pixels and displaced the image by one pixel.
+(gximage2.c)
+
+Adds an implementation of realloc, for systems that don't have one that
+works. I don't know how to determine this automatically, so for the moment,
+the code uses our own implementation on GNU/Linux (where realloc is known to be
+broken, at least in some releases) and nowhere else. (malloc_.h,
+gsmemory.c, gsmisc.c)
+
+Removes the "OLD" algorithms from the Type 1 hinting source code, since they
+are no longer executed. (If necessary, they can be retrieved from an older
+version.) (gxhint3.c)
+
+</pre>
+
+<h2><a name="Version4.01"></a>Version 4.01 (7/10/96)</h2>
+
+<p>
+This fixes a few minor bugs discovered since the 4.0 release.
+
+<h3><a name="V4.01_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - An installation directory name was wrong. (make.txt,
+unix-lpr.txt)
+ - A URL was wrong. (devices.txt)
+ - A reference to use.doc hadn't been updated. (gs.1)
+ - Some references to /usr/local/lib hadn't been updated. (gs.1)
+ - The NEWS file and history* files still referred to *.doc rather
+than *.txt. (NEWS, history*.txt)
+
+Adds a note about compilation on Digital Unix. (make.txt)
+
+Clarifies that calling gs_exit calls gs_finit automatically. (imain.h)
+
+Adds a pointer to the PDF encryption patch. (Ridiculous U.S. export control
+laws don't allow including the patch itself in the main fileset.)
+(new-user.txt)
+
+Adds a help file for VMS. (gs-vms.hlp)
+
+</pre><h3><a name="V4.01_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - vms.mak had gotten out of sync with the makefiles (again).
+(vms.mak)
+ - DEVICE{WIDTH,HEIGHT}POINTS didn't override PAPERSIZE.
+(gs_init.ps)
+ - The Microsoft C makefiles had gotten out of date. (msc.mak)
+
+The (few) GNU-Licensed drivers were accidentally omitted from the fileset.
+
+Modifies a makefile for greater reusability. (watclib.mak)
+
+Adds a 'debug' target for making Unix debugging configurations.
+(unix-end.mak)
+
+</pre><h3><a name="V4.01_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - Some uses of 'run' should be changed to runlibfile. (bdftops.ps,
+impath.ps, markhint.ps, packfile.ps, showchar.ps, waterfal.ps, wftopfa.ps,
+wrfont.ps)
+ - Some debugging code hadn't been removed. (gslp.ps)
+
+Adds a new utility, viewcmyk.ps, for viewing 4-bit CMYK data. (psfiles.txt,
+unix-end.mak, viewcmyk.ps)
+
+Improves pdf2dsc by including Title and CreationDate DSC comments (these are
+displayed by Ghostview) and reducing the size of typical output files by a
+factor of about 3. (pdf2dsc.ps)
+
+Incorporates major changes (claimed to be improvements) to ps2ascii
+contributed by a user. If you have problems with it, please contact him,
+not Aladdin. (ps2ascii.ps)
+
+</pre><h3><a name="V4.01_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The X value of a bounding box could be computed incorrectly.
+(gdevbbox.c)
+
+</pre><h3><a name="V4.01_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The Windows DLL sometimes didn't clean up properly. (dll.txt,
+dpmainc.c, dwdll.cpp, dwmain.cpp, dwmainc.cpp, gsdll.c, gsdll.h)
+
+</pre><h3><a name="V4.01_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Reading from a filter could hang forever, because a buffer was
+allocated 1 byte too small. (zfilter.c)
+ - The search path could become garbage under some circumstances.
+(imain.c)
+ - A dangling reference to a stack-allocated variable could corrupt
+memory if a client mixed interpreter calls and direct C calls. (interp.c)
+ - Printing an object to a procedure-based filter could cause an
+invalid memory access. (zfileio.c)
+
+</pre><h3><a name="V4.01_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Setting parameters for an unopened device could cause an access
+error or invoke the wrong put_params procedure. (gsdparam.c)
+ - Reading from a filter could hang forever, because a buffer was
+allocated 1 byte too small. (stream.h)
+ - If the current device was the nullpage device, doing a [g]save,
+selecting a different device, and doing a [g]restore caused an error.
+(gsdparam.c)
+
+Adds the ability to append arcs without the initial lineto, for PCL
+emulation. (gspath.h, gspath1.c)
+
+</pre>
+
+<h2><a name="Version4.0"></a>Version 4.0 (6/28/96)</h2>
+
+<p>
+This is the first public release since 3.53, with a few more last-minute
+patches beyond 3.70.
+
+<h3><a name="V4.0_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - Many makefiles still referred to .doc files rather than .txt.
+(cfonts.mak, devs.mak, gs.mak, int.mak, libpng.mak, unix-end.mak, watc.mak,
+watcwin.mak, wccommon.mak, zlib.mak)
+ - Some FONTPATH-related information was out of date. (use.txt)
+ - The installation directory for fonts was incorrect. (install.txt)
+ - The libpng and zlib versions were out of date. (libpng.mak,
+zlib.mak)
+ - Some information about GSview was incorrect or incomplete.
+(new-user.txt)
+ - make.txt said it described installation as well as building.
+(make.txt)
+
+Notes that the current release of zlib won't compile and link correctly with
+Sun cc. (make.txt)
+
+Adds a little more detail to the C style document. (c-style.txt)
+
+</pre><h3><a name="V4.0_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - Some documentation files weren't installed. (unix-end.mak)
+ - Some dependencies were incorrect. (bcwin32.mak)
+ - 'make begin' and 'make clean' deleted too many and/or the wrong
+files. (bcwin.mak, bcwin32.mak)
+ - libpng.mak didn't work with libpng version 0.89c. (libpng.mak)
+ - -d&lt;var&gt;=&lt;name&gt; was equivalent to -d&lt;var&gt;=/&lt;name&gt;, and there was no
+way to set a variable to true, false, or null. (use.txt, gs_init.ps,
+iinit.c, imainarg.c)
+
+Removes the modules.lis file, which is no longer used.
+
+Undoes detecting automatically the need to run tar_cat -- the mechanism
+didn't work, and caused confusion. (unix-end.mak)
+
+Updates the makefiles to libpng version 0.89, but allows them to work with
+either 0.88 or 0.89. (*.mak)
+
+</pre><h3><a name="V4.0_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - Showing the details of a protected font caused an error.
+(markhint.ps)
+
+</pre><h3><a name="V4.0_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - A copyright notice was wrong. (gs_pdfwr.ps)
+ - PDF link annotations could get written with two Dest keys.
+(gdevpdfm.c)
+ - MakeProcInstance and FreeProcInstance were called on platforms
+where it wasn't appropriate. (gdevwpr2.c, gdevwprn.c, gp_mswin.c)
+ - On X servers that return very large values for the "virtual
+screen" size in millimeters but correct values for the screen size in
+pixels, a rangecheck could occur. (gdevxini.c)
+ - The bounding box device could return garbage if stroke or fill was
+ever invoked with an empty path. (gdevbbox.c)
+
+Replaces the LBP8 driver with a revised one contributed by a user.
+(gdevlbp8.c, devs.mak)
+
+</pre><h3><a name="V4.0_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - Some Windows menu parameters were incorrect. (gsdll16.rc,
+gsdll32.rc)
+
+</pre><h3><a name="V4.0_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - .getdevparams sometimes returned duplicate entries for /Type.
+(ziodev2.c)
+ - File names weren't parsed or concatenated properly on all
+platforms. (gs_fonts.ps, zfile.c)
+ - Filter lookahead caused problems with special files. (zfproc.c)
+ - If a TransformPQR procedure in a CIE color rendering dictionary
+didn't pop its 4 array arguments, an error occurred. (gs_lev2.ps, zcrd.c)
+
+</pre><h3><a name="V4.0_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - Filter lookahead caused problems with special files. (bug
+introduced in 3.70) (stream.h)
+
+</pre><h3><a name="V4.0_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - .getdevparams sometimes returned duplicate entries for /Type.
+(gxiodev.h, gsiodev.c)
+
+</pre>
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 1997, 1998 Aladdin Enterprises.
+All rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/History5.htm b/Master/xemtex/doc/ghostscript/History5.htm
new file mode 100644
index 00000000000..ec62a06d68d
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/History5.htm
@@ -0,0 +1,13454 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>History of Ghostscript versions 5.n</title>
+<!-- $Id: History5.htm,v 1.15.2.11.2.6 2003/05/17 14:38:59 giles Exp $ -->
+<!--
+ WARNING: do not use Pete Kaiser's emacs function "gs-toc" alone to
+ re-create the table of contents here, because it will replace the
+ hand-edited TOC subheads with a separate subhead for each H2 in
+ the body of the file. Or if you do, first look at the original
+ TOC to see how to edit it for visual conciseness.
+-->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>History of Ghostscript versions 5.n</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Version5.99">Version 5.99 (beta) (1999-12-18)</a>
+<ul>
+<li><a href="#5.99_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.99_Documentation">Documentation</a>,
+ <a href="#5.99_Procedures">Procedures</a>,
+ <a href="#5.99_Utilities">Utilities</a>,
+ <a href="#5.99_Drivers">Drivers</a>,
+ <a href="#5.99_Platforms">Platforms</a>,
+ <a href="#5.99_Fonts">Fonts</a>,
+ <a href="#5.99_PDF_writer">PDF writer</a>,
+ <a href="#5.99_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.99_Interpreter">Interpreter</a>,
+ <a href="#5.99_Streams">Streams</a>,
+ <a href="#5.99_Library">Library</a>
+</ul>
+<li><a href="#Version5.98">Version 5.98 (beta) (1999-12-01)</a>
+<ul>
+<li><a href="#5.98_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.98_Documentation">Documentation</a>,
+ <a href="#5.98_Procedures">Procedures</a>,
+ <a href="#5.98_Utilities">Utilities</a>,
+ <a href="#5.98_Drivers">Drivers</a>,
+ <a href="#5.98_Fonts">Fonts</a>,
+ <a href="#5.98_PDF_writer">PDF writer</a>,
+ <a href="#5.98_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.98_Interpreter">Interpreter</a>,
+ <a href="#5.98_Streams">Streams</a>,
+ <a href="#5.98_Library">Library</a>
+</ul>
+<li><a href="#Version5.97">Version 5.97 (beta) (11/22/99)</a>
+<ul>
+<li><a href="#5.97_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.97_Documentation">Documentation</a>,
+ <a href="#5.97_Procedures">Procedures</a>,
+ <a href="#5.97_Utilities">Utilities</a>,
+ <a href="#5.97_Drivers">Drivers</a>,
+ <a href="#5.97_Platforms">Platforms</a>,
+ <a href="#5.97_PDF_writer">PDF writer</a>,
+ <a href="#5.97_Interpreter">Interpreter</a>,
+ <a href="#5.97_Library">Library</a>
+</ul>
+<li><a href="#Version5.96">Version 5.96 (beta) (11/12/99)</a>
+<ul>
+<li><a href="#5.96_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.96_Documentation">Documentation</a>,
+ <a href="#5.96_Procedures">Procedures</a>,
+ <a href="#5.96_Utilities">Utilities</a>,
+ <a href="#5.96_Drivers">Drivers</a>,
+ <a href="#5.96_Platforms">Platforms</a>,
+ <a href="#5.96_PDF_writer">PDF writer</a>,
+ <a href="#5.96_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.96_Interpreter">Interpreter</a>,
+ <a href="#5.96_Streams">Streams</a>,
+ <a href="#5.96_Library">Library</a>
+</ul>
+<li><a href="#Version5.95">Version 5.95 (beta) (11/1/99)</a>
+<ul>
+<li><a href="#5.95_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.95_Documentation">Documentation</a>,
+ <a href="#5.95_Procedures">Procedures</a>,
+ <a href="#5.95_Utilities">Utilities</a>,
+ <a href="#5.95_Drivers">Drivers</a>,
+ <a href="#5.95_Platforms">Platforms</a>,
+ <a href="#5.95_Fonts">Fonts</a>,
+ <a href="#5.95_PDF_writer">PDF writer</a>,
+ <a href="#5.95_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.95_Interpreter">Interpreter</a>,
+ <a href="#5.95_Library">Library</a>
+</ul>
+<li><a href="#Version5.94">Version 5.94 (beta) (9/30/99)</a>
+<ul>
+<li><a href="#5.94_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.94_Documentation">Documentation</a>,
+ <a href="#5.94_Procedures">Procedures</a>,
+ <a href="#5.94_Utilities">Utilities</a>,
+ <a href="#5.94_Drivers">Drivers</a>,
+ <a href="#5.94_Platforms">Platforms</a>,
+ <a href="#5.94_Fonts">Fonts</a>,
+ <a href="#5.94_PDF_writer">PDF writer</a>,
+ <a href="#5.94_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.94_Interpreter">Interpreter</a>,
+ <a href="#5.94_Streams">Streams</a>,
+ <a href="#5.94_Library">Library</a>
+</ul>
+<li><a href="#Version5.93">Version 5.93 (beta) (9/11/99)</a>
+<ul>
+<li><a href="#5.93_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.93_Documentation">Documentation</a>,
+ <a href="#5.93_Procedures">Procedures</a>,
+ <a href="#5.93_Utilities">Utilities</a>,
+ <a href="#5.93_Drivers">Drivers</a>,
+ <a href="#5.93_Platforms">Platforms</a>,
+ <a href="#5.93_PDF_writer">PDF writer</a>,
+ <a href="#5.93_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.93_Interpreter">Interpreter</a>,
+ <a href="#5.93_Streams">Streams</a>,
+ <a href="#5.93_Library">Library</a>
+</ul>
+<li><a href="#Version5.92">Version 5.92 (beta) (9/2/99)</a>
+<ul>
+<li><a href="#5.92_Documentation">Documentation</a>,
+ <a href="#5.92_Procedures">Procedures</a>,
+ <a href="#5.92_Utilities">Utilities</a>,
+ <a href="#5.92_Drivers">Drivers</a>,
+ <a href="#5.92_PDF_writer">PDF writer</a>,
+ <a href="#5.92_Interpreter">Interpreter</a>,
+ <a href="#5.92_Streams">Streams</a>
+</ul>
+<li><a href="#Version5.91">Version 5.91 (beta) (8/30/99)</a>
+<ul>
+<li><a href="#5.91_Documentation">Documentation</a>,
+ <a href="#5.91_Utilities">Utilities</a>,
+ <a href="#5.91_Drivers">Drivers</a>,
+ <a href="#5.91_Platforms">Platforms</a>,
+ <a href="#5.91_Fonts">Fonts</a>,
+ <a href="#5.91_PDF_writer">PDF writer</a>,
+ <a href="#5.91_Library">Library</a>
+</ul>
+<li><a href="#Version5.90">Version 5.90 (beta) (8/20/99)</a>
+<ul>
+<li><a href="#5.90_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.90_Documentation">Documentation</a>,
+ <a href="#5.90_Procedures">Procedures</a>,
+ <a href="#5.90_Utilities">Utilities</a>,
+ <a href="#5.90_Drivers">Drivers</a>,
+ <a href="#5.90_Platforms">Platforms</a>,
+ <a href="#5.90_Fonts">Fonts</a>,
+ <a href="#5.90_PDF_writer">PDF writer</a>,
+ <a href="#5.90_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.90_Interpreter">Interpreter</a>,
+ <a href="#5.90_Streams">Streams</a>,
+ <a href="#5.90_Library">Library</a>
+</ul>
+<li>(Version 5.89 deliberately omitted.)
+<li><a href="#Version5.88">Version 5.88 (tester) (8/3/99)</a>
+<ul>
+<li><a href="#5.88_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.88_Documentation">Documentation</a>,
+ <a href="#5.88_Procedures">Procedures</a>,
+ <a href="#5.88_Drivers">Drivers</a>,
+ <a href="#5.88_Platforms">Platforms</a>,
+ <a href="#5.88_Fonts">Fonts</a>,
+ <a href="#5.88_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.88_Interpreter">Interpreter</a>,
+ <a href="#5.88_Streams">Streams</a>,
+ <a href="#5.88_Library">Library</a>
+</ul>
+<li><a href="#Version5.87">Version 5.87 (tester) (6/29/99)</a>
+<ul>
+<li><a href="#5.87_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.87_Documentation">Documentation</a>,
+ <a href="#5.87_Procedures">Procedures</a>,
+ <a href="#5.87_Drivers">Drivers</a>,
+ <a href="#5.87_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.87_Interpreter">Interpreter</a>,
+ <a href="#5.87_Library">Library</a>
+</ul>
+<li><a href="#Version5.86">Version 5.86 (tester) (6/14/99)</a>
+<ul>
+<li><a href="#5.86_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.86_Documentation">Documentation</a>,
+ <a href="#5.86_Procedures">Procedures</a>,
+ <a href="#5.86_Utilities">Utilities</a>,
+ <a href="#5.86_Drivers">Drivers</a>,
+ <a href="#5.86_Platforms">Platforms</a>,
+ <a href="#5.86_Fonts">Fonts</a>,
+ <a href="#5.86_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.86_Interpreter">Interpreter</a>,
+ <a href="#5.86_Streams">Streams</a>,
+ <a href="#5.86_Library">Library</a>
+</ul>
+<li><a href="#Version5.85">Version 5.85 (tester) (5/29/99)</a>
+<ul>
+<li><a href="#5.85_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.85_Documentation">Documentation</a>,
+ <a href="#5.85_Procedures">Procedures</a>,
+ <a href="#5.85_Utilities">Utilities</a>,
+ <a href="#5.85_Drivers">Drivers</a>,
+ <a href="#5.85_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.85_Interpreter">Interpreter</a>,
+ <a href="#5.85_Library">Library</a>
+</ul>
+<li><a href="#Version5.84">Version 5.84 (tester) (5/19/99)</a>
+<ul>
+<li><a href="#5.84_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.84_Procedures">Procedures</a>,
+ <a href="#5.84_Utilities">Utilities</a>,
+ <a href="#5.84_Drivers">Drivers</a>,
+ <a href="#5.84_Platforms">Platforms</a>,
+ <a href="#5.84_Interpreter">Interpreter</a>,
+ <a href="#5.84_Streams">Streams</a>,
+ <a href="#5.84_Library">Library</a>
+</ul>
+<li><a href="#Version5.83">Version 5.83 (tester) (5/13/99)</a>
+<ul>
+<li><a href="#5.83_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.83_Documentation">Documentation</a>,
+ <a href="#5.83_Procedures">Procedures</a>,
+ <a href="#5.83_Utilities">Utilities</a>,
+ <a href="#5.83_Interpreter">Interpreter</a>,
+ <a href="#5.83_Library">Library</a>
+</ul>
+<li><a href="#Version5.82">Version 5.82 (tester) (4/24/99)</a>
+<ul>
+<li><a href="#5.82_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.82_Documentation">Documentation</a>,
+ <a href="#5.82_Procedures">Procedures</a>,
+ <a href="#5.82_Utilities">Utilities</a>,
+ <a href="#5.82_Drivers">Drivers</a>,
+ <a href="#5.82_Platforms">Platforms</a>,
+ <a href="#5.82_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.82_Interpreter">Interpreter</a>,
+ <a href="#5.82_Library">Library</a>
+</ul>
+<li><a href="#Version5.81">Version 5.81 (tester) (4/14/99)</a>
+<ul>
+<li><a href="#5.81_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.81_Procedures">Procedures</a>,
+ <a href="#5.81_Utilities">Utilities</a>,
+ <a href="#5.81_Drivers">Drivers</a>,
+ <a href="#5.81_Fonts">Fonts</a>,
+ <a href="#5.81_Platforms">Platforms</a>,
+ <a href="#5.81_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.81_Interpreter">Interpreter</a>,
+ <a href="#5.81_Library">Library</a>
+</ul>
+<li><a href="#Version5.80">Version 5.80 (tester) (4/6/99)</a>
+<ul>
+<li><a href="#5.80_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.80_Procedures">Procedures</a>,
+ <a href="#5.80_Utilities">Utilities</a>,
+ <a href="#5.80_Drivers">Drivers</a>,
+ <a href="#5.80_Fonts">Fonts</a>,
+ <a href="#5.80_Platforms">Platforms</a>,
+ <a href="#5.80_Interpreter">Interpreter</a>,
+ <a href="#5.80_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.80_Streams">Streams</a>,
+ <a href="#5.80_Library">Library</a>
+</ul>
+<li>(Versions 5.74 - 5.79 deliberately omitted.)
+<li><a href="#Version5.73">Version 5.73 (tester) (3/19/99)</a>
+<ul>
+<li><a href="#5.73_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.73_Documentation">Documentation</a>,
+ <a href="#5.73_Procedures">Procedures</a>,
+ <a href="#5.73_Drivers">Drivers</a>,
+ <a href="#5.73_Interpreter">Interpreter</a>,
+ <a href="#5.73_Library">Library</a>
+</ul>
+<li><a href="#Version5.72">Version 5.72 (tester) (3/17/99)</a>
+<ul>
+<li><a href="#5.72_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.72_Documentation">Documentation</a>,
+ <a href="#5.72_Procedures">Procedures</a>,
+ <a href="#5.72_Utilities">Utilities</a>,
+ <a href="#5.72_Drivers">Drivers</a>,
+ <a href="#5.72_Fonts">Fonts</a>,
+ <a href="#5.72_Interpreter">Interpreter</a>,
+ <a href="#5.72_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.72_Streams">Streams</a>,
+ <a href="#5.72_Library">Library</a>
+</ul>
+<li><a href="#Version5.71">Version 5.71 (tester) (3/3/99)</a>
+<ul>
+<li><a href="#5.71_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.71_Documentation">Documentation</a>,
+ <a href="#5.71_Procedures">Procedures</a>,
+ <a href="#5.71_Utilities">Utilities</a>,
+ <a href="#5.71_Drivers">Drivers</a>,
+ <a href="#5.71_Fonts">Fonts</a>,
+ <a href="#5.71_Interpreter">Interpreter</a>,
+ <a href="#5.71_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.71_Streams">Streams</a>,
+ <a href="#5.71_Library">Library</a>
+</ul>
+<li><a href="#Version5.70">Version 5.70 (internal) (2/20/99)</a>
+<ul>
+<li><a href="#5.70_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.70_Documentation">Documentation</a>,
+ <a href="#5.70_Procedures">Procedures</a>,
+ <a href="#5.70_Utilities">Utilities</a>,
+ <a href="#5.70_Drivers">Drivers</a>,
+ <a href="#5.70_Fonts">Fonts</a>,
+ <a href="#5.70_Interpreter">Interpreter</a>,
+ <a href="#5.70_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.70_Streams">Streams</a>,
+ <a href="#5.70_Library">Library</a>
+</ul>
+<li><a href="#Version5.69">Version 5.69 (internal) (2/4/99)</a>
+<ul>
+<li><a href="#5.69_Procedures">Procedures</a>,
+ <a href="#5.69_Utilities">Utilities</a>,
+ <a href="#5.69_Drivers">Drivers</a>,
+ <a href="#5.69_Interpreter">Interpreter</a>,
+ <a href="#5.69_Streams">Streams</a>,
+ <a href="#5.69_Library">Library</a>
+</ul>
+<li><a href="#Version5.68">Version 5.68 (internal) (1/29/99)</a>
+<ul>
+<li><a href="#5.68_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.68_Documentation">Documentation</a>,
+ <a href="#5.68_Procedures">Procedures</a>,
+ <a href="#5.68_Utilities">Utilities</a>,
+ <a href="#5.68_Drivers">Drivers</a>,
+ <a href="#5.68_Fonts">Fonts</a>,
+ <a href="#5.68_Platforms">Platforms</a>,
+ <a href="#5.68_Interpreter">Interpreter</a>,
+ <a href="#5.68_Streams">Streams</a>,
+ <a href="#5.68_Library">Library</a>
+</ul>
+<li><a href="#Version5.67">Version 5.67 (internal) (1/8/99)</a>
+<ul>
+<li><a href="#5.67_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.67_Documentation">Documentation</a>,
+ <a href="#5.67_Procedures">Procedures</a>,
+ <a href="#5.67_Utilities">Utilities</a>,
+ <a href="#5.67_Drivers">Drivers</a>,
+ <a href="#5.67_Fonts">Fonts</a>,
+ <a href="#5.67_Interpreter">Interpreter</a>,
+ <a href="#5.67_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.67_Streams">Streams</a>,
+ <a href="#5.67_Library">Library</a>
+</ul>
+<li><a href="#Version5.66">Version 5.66 (internal) (11/25/98)</a>
+<ul>
+<li><a href="#5.66_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.66_Documentation">Documentation</a>,
+ <a href="#5.66_Procedures">Procedures</a>,
+ <a href="#5.66_Utilities">Utilities</a>,
+ <a href="#5.66_Drivers">Drivers</a>,
+ <a href="#5.66_Platforms">Platforms</a>,
+ <a href="#5.66_Interpreter">Interpreter</a>,
+ <a href="#5.66_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.66_Streams">Streams</a>,
+ <a href="#5.66_Library">Library</a>
+</ul>
+<li><a href="#Version5.65">Version 5.65 (internal) (11/13/98)</a>
+<ul>
+<li><a href="#5.65_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.65_Documentation">Documentation</a>,
+ <a href="#5.65_Procedures">Procedures</a>,
+ <a href="#5.65_Utilities">Utilities</a>,
+ <a href="#5.65_Drivers">Drivers</a>,
+ <a href="#5.65_Platforms">Platforms</a>,
+ <a href="#5.65_Interpreter">Interpreter</a>,
+ <a href="#5.65_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.65_Library">Library</a>
+</ul>
+<li><a href="#Version5.64">Version 5.64 (internal) (11/5/98)</a>
+<ul>
+<li><a href="#5.64_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.64_Documentation">Documentation</a>,
+ <a href="#5.64_Procedures">Procedures</a>,
+ <a href="#5.64_Drivers">Drivers</a>,
+ <a href="#5.64_Library">Library</a>
+</ul>
+<li><a href="#Version5.63">Version 5.63 (internal) (11/4/98)</a>
+<ul>
+<li><a href="#5.63_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.63_Documentation">Documentation</a>,
+ <a href="#5.63_Procedures">Procedures</a>,
+ <a href="#5.63_Drivers">Drivers</a>,
+ <a href="#5.63_Interpreter">Interpreter</a>,
+ <a href="#5.63_Library">Library</a>
+</ul>
+<li><a href="#Version5.62">Version 5.62 (internal) (10/31/98)</a>
+<ul>
+<li><a href="#5.62_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.62_Documentation">Documentation</a>,
+ <a href="#5.62_Drivers">Drivers</a>,
+ <a href="#5.62_Interpreter">Interpreter</a>,
+ <a href="#5.62_Library">Library</a>
+</ul>
+<li><a href="#Version5.61">Version 5.61 (internal) (10/28/98)</a>
+<ul>
+<li><a href="#5.61_Documentation">Documentation</a>,
+ <a href="#5.61_Procedures">Procedures</a>,
+ <a href="#5.61_Utilities">Utilities</a>,
+ <a href="#5.61_Drivers">Drivers</a>,
+ <a href="#5.61_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.61_Streams">Streams</a>,
+ <a href="#5.61_Library">Library</a>
+</ul>
+<li><a href="#Version5.60">Version 5.60 (internal) (10/18/98)</a>
+<ul>
+<li><a href="#5.60_Incompatible_changes">Incompatible changes</a>,
+ <a href="#5.60_Documentation">Documentation</a>,
+ <a href="#5.60_Procedures">Procedures</a>,
+ <a href="#5.60_Utilities">Utilities</a>,
+ <a href="#5.60_Drivers">Drivers</a>,
+ <a href="#5.60_Platforms">Platforms</a>,
+ <a href="#5.60_Interpreter">Interpreter</a>,
+ <a href="#5.60_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.60_Streams">Streams</a>,
+ <a href="#5.60_Library">Library</a>
+</ul>
+<li>(Versions 5.51 - 5.59 deliberately omitted.)
+<li><a href="#Version5.50">Version 5.50 (9/16/98)</a>
+<ul>
+<li><a href="#5.50_Documentation">Documentation</a>,
+ <a href="#5.50_Procedures">Procedures</a>,
+ <a href="#5.50_Utilities">Utilities</a>,
+ <a href="#5.50_Drivers">Drivers</a>,
+ <a href="#5.50_Platforms">Platforms</a>,
+ <a href="#5.50_Interpreter">Interpreter</a>,
+ <a href="#5.50_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.50_Library">Library</a>
+</ul>
+<li><a href="#Version5.40">Version 5.40 (beta) (9/10/98)</a>
+<ul>
+<li><a href="#5.40_Documentation">Documentation</a>,
+ <a href="#5.40_Procedures">Procedures</a>,
+ <a href="#5.40_Utilities">Utilities</a>,
+ <a href="#5.40_Drivers">Drivers</a>,
+ <a href="#5.40_Platforms">Platforms</a>,
+ <a href="#5.40_Library">Library</a>
+</ul>
+<li><a href="#Version5.39">Version 5.39 (beta) (9/8/98)</a>
+<ul>
+<li><a href="#5.39_Drivers">Drivers</a>,
+ <a href="#5.39_Library">Library</a>
+</ul>
+<li><a href="#Version5.38">Version 5.38 (beta) (9/3/98)</a>
+<ul>
+<li><a href="#5.38_Documentation">Documentation</a>,
+ <a href="#5.38_Drivers">Drivers</a>,
+ <a href="#5.38_Interpreter">Interpreter</a>,
+ <a href="#5.38_Library">Library</a>
+</ul>
+<li><a href="#Version5.37">Version 5.37 (beta) (8/31/98)</a>
+<ul>
+<li><a href="#5.37_Documentation">Documentation</a>,
+ <a href="#5.37_Procedures">Procedures</a>,
+ <a href="#5.37_Utilities">Utilities</a>,
+ <a href="#5.37_Drivers">Drivers</a>,
+ <a href="#5.37_Fonts">Fonts</a>,
+ <a href="#5.37_Interpreter">Interpreter</a>,
+ <a href="#5.37_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.37_Streams">Streams</a>,
+ <a href="#5.37_Library">Library</a>
+</ul>
+<li><a href="#Version5.36">Version 5.36 (beta) (8/25/98)</a>
+<ul>
+<li><a href="#5.36_Documentation">Documentation</a>,
+ <a href="#5.36_Utilities">Utilities</a>,
+ <a href="#5.36_Drivers">Drivers</a>,
+ <a href="#5.36_Platforms">Platforms</a>,
+ <a href="#5.36_Fonts">Fonts</a>,
+ <a href="#5.36_Interpreter">Interpreter</a>,
+ <a href="#5.36_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.36_Streams">Streams</a>,
+ <a href="#5.36_Library">Library</a>
+</ul>
+<li><a href="#Version5.35">Version 5.35 (beta) (8/18/98)</a>
+<ul>
+<li><a href="#5.35_Documentation">Documentation</a>,
+ <a href="#5.35_Drivers">Drivers</a>,
+ <a href="#5.35_Fonts">Fonts</a>,
+ <a href="#5.35_Interpreter">Interpreter</a>,
+ <a href="#5.35_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#5.35_Library">Library</a>
+</ul>
+<li><a href="#Version5.34">Version 5.34 (beta) (8/16/98)</a>
+<ul>
+<li><a href="#V5.34_Documentation">Documentation</a>,
+ <a href="#V5.34_Procedures">Procedures</a>,
+ <a href="#V5.34_Drivers">Drivers</a>,
+ <a href="#V5.34_Interpreter">Interpreter</a>,
+ <a href="#V5.34_Library">Library</a>
+</ul>
+<li><a href="#Version5.33">Version 5.33 (beta) (8/14/98)</a>
+<ul>
+<li><a href="#V5.33_Platforms">Platforms</a>,
+ <a href="#V5.33_Fonts">Fonts</a>,
+ <a href="#V5.33_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V5.33_Library">Library</a>
+</ul>
+<li><a href="#Version5.32">Version 5.32 (beta) (8/13/98)</a>
+<ul>
+<li><a href="#V5.32_Procedures">Procedures</a>,
+ <a href="#V5.32_Interpreter">Interpreter</a>,
+ <a href="#V5.32_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V5.32_Library">Library</a>
+</ul>
+<li><a href="#Version5.31">Version 5.31 (limited) (8/11/98)</a>
+<ul>
+<li><a href="#V5.31_Drivers">Drivers</a>,
+ <a href="#V5.31_Interpreter">Interpreter</a>,
+ <a href="#V5.31_Library">Library</a>
+</ul>
+<li><a href="#Version5.30">Version 5.30 (limited) (8/10/98)</a>
+<ul>
+<li><a href="#V5.30_Documentation">Documentation</a>,
+ <a href="#V5.30_Procedures">Procedures</a>,
+ <a href="#V5.30_Drivers">Drivers</a>,
+ <a href="#V5.30_Platforms">Platforms</a>,
+ <a href="#V5.30_Fonts">Fonts</a>,
+ <a href="#V5.30_Interpreter">Interpreter</a>,
+ <a href="#V5.30_Streams">Streams</a>,
+ <a href="#V5.30_Library">Library</a>
+</ul>
+<li><a href="#Version5.28">Version 5.28 (limited) (8/3/98)</a>
+<ul>
+<li><a href="#V5.28_Documentation">Documentation</a>,
+ <a href="#V5.28_Procedures">Procedures</a>,
+ <a href="#V5.28_Utilities">Utilities</a>,
+ <a href="#V5.28_Drivers">Drivers</a>,
+ <a href="#V5.28_Platforms">Platforms</a>,
+ <a href="#V5.28_Interpreter">Interpreter</a>,
+ <a href="#V5.28_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V5.28_Streams">Streams</a>,
+ <a href="#V5.28_Library">Library</a>
+</ul>
+<li><a href="#Version5.27">Version 5.27 (limited) (7/18/98)</a>
+<ul>
+<li><a href="#V5.27_Documentation">Documentation</a>,
+ <a href="#V5.27_Procedures">Procedures</a>,
+ <a href="#V5.27_Drivers">Drivers</a>,
+ <a href="#V5.27_Platforms">Platforms</a>,
+ <a href="#V5.27_Interpreter">Interpreter</a>,
+ <a href="#V5.27_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V5.27_Library">Library</a>
+</ul>
+<li><a href="#Version5.26">Version 5.26 (limited) (7/7/98)</a>
+<ul>
+<li><a href="#V5.26_Procedures">Procedures</a>,
+ <a href="#V5.26_Drivers">Drivers</a>,
+ <a href="#V5.26_Fonts">Fonts</a>,
+ <a href="#V5.26_Interpreter">Interpreter</a>,
+ <a href="#V5.26_Library">Library</a>
+</ul>
+<li><a href="#Version5.25">Version 5.25 (limited) (7/1/98)</a>
+<ul>
+<li><a href="#V5.25_Documentation">Documentation</a>,
+ <a href="#V5.25_Procedures">Procedures</a>,
+ <a href="#V5.25_Platforms">Platforms</a>,
+ <a href="#V5.25_Fonts">Fonts</a>,
+ <a href="#V5.25_Interpreter">Interpreter</a>,
+ <a href="#V5.25_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V5.25_Drivers">Drivers</a>,
+ <a href="#V5.25_Library">Library</a>
+</ul>
+<li><a href="#Version5.24">Version 5.24 (limited) (6/17/98)</a>
+<ul>
+<li><a href="#V5.24_Documentation">Documentation</a>,
+ <a href="#V5.24_Procedures">Procedures</a>,
+ <a href="#V5.24_Utilities">Utilities</a>,
+ <a href="#V5.24_Drivers">Drivers</a>,
+ <a href="#V5.24_Platforms">Platforms</a>,
+ <a href="#V5.24_Fonts">Fonts</a>,
+ <a href="#V5.24_Interpreter">Interpreter</a>,
+ <a href="#V5.24_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V5.24_Streams">Streams</a>,
+ <a href="#V5.24_Library">Library</a>
+</ul>
+<li><a href="#Version5.23">Version 5.23 (limited) (5/14/98)</a>
+<ul>
+<li><a href="#V5.23_Documentation">Documentation</a>,
+ <a href="#V5.23_Procedures">Procedures</a>,
+ <a href="#V5.23_Utilities">Utilities</a>,
+ <a href="#V5.23_Drivers">Drivers</a>,
+ <a href="#V5.23_Platforms">Platforms</a>,
+ <a href="#V5.23_Fonts">Fonts</a>,
+ <a href="#V5.23_Interpreter">Interpreter</a>,
+ <a href="#V5.23_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V5.23_Streams">Streams</a>,
+ <a href="#V5.23_Library">Library</a>
+</ul>
+<li><a href="#Version5.22">Version 5.22 (limited) (2/19/98)</a>
+<ul>
+<li><a href="#V5.22_Documentation">Documentation</a>,
+ <a href="#V5.22_Procedures">Procedures</a>,
+ <a href="#V5.22_Utilities">Utilities</a>,
+ <a href="#V5.22_Drivers">Drivers</a>,
+ <a href="#V5.22_Interpreter">Interpreter</a>,
+ <a href="#V5.22_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V5.22_Streams">Streams</a>,
+ <a href="#V5.22_Library">Library</a>
+</ul>
+<li><a href="#Version5.21">Version 5.21 (limited) (1/19/98)</a>
+<ul>
+<li><a href="#V5.21_Documentation">Documentation</a>,
+ <a href="#V5.21_Procedures">Procedures</a>,
+ <a href="#V5.21_Drivers">Drivers</a>,
+ <a href="#V5.21_Fonts">Fonts</a>,
+ <a href="#V5.21_Interpreter">Interpreter</a>,
+ <a href="#V5.21_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V5.21_Library">Library</a>
+</ul>
+<li><a href="#Version5.20">Version 5.20 (limited) (1/8/98)</a>
+<ul>
+<li><a href="#V5.20_Documentation">Documentation</a>,
+ <a href="#V5.20_Procedures">Procedures</a>,
+ <a href="#V5.20_Utilities">Utilities</a>,
+ <a href="#V5.20_Drivers">Drivers</a>,
+ <a href="#V5.20_Platforms">Platforms</a>,
+ <a href="#V5.20_Fonts">Fonts</a>,
+ <a href="#V5.20_Interpreter">Interpreter</a>,
+ <a href="#V5.20_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V5.20_Streams">Streams</a>,
+ <a href="#V5.20_Library">Library</a>
+</ul>
+<li><a href="#Version5.10">Version 5.10 (11/23/97)</a>
+<ul>
+<li><a href="#V5.10_Documentation">Documentation</a>,
+ <a href="#V5.10_Procedures">Procedures</a>,
+ <a href="#V5.10_Utilities">Utilities</a>,
+ <a href="#V5.10_Drivers">Drivers</a>,
+ <a href="#V5.10_Interpreter">Interpreter</a>,
+ <a href="#V5.10_Library">Library</a>
+</ul>
+<li><a href="#Version5.07">Version 5.07 (limited) (10/31/97)</a>
+<ul>
+<li><a href="#V5.07_Documentation">Documentation</a>,
+ <a href="#V5.07_Drivers">Drivers</a>,
+ <a href="#V5.07_Library">Library</a>
+</ul>
+<li><a href="#Version5.06">Version 5.06 (limited) (10/7/97)</a>
+<ul>
+<li><a href="#V5.06_Documentation">Documentation</a>,
+ <a href="#V5.06_Procedures">Procedures</a>,
+ <a href="#V5.06_Utilities">Utilities</a>,
+ <a href="#V5.06_Drivers">Drivers</a>,
+ <a href="#V5.06_Interpreter">Interpreter</a>,
+ <a href="#V5.06_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V5.06_Library">Library</a>
+</ul>
+<li><a href="#Version5.05">Version 5.05 (limited) (9/24/97)</a>
+<ul>
+<li><a href="#V5.05_Platforms">Platforms</a>,
+ <a href="#V5.05_Drivers">Drivers</a>,
+ <a href="#V5.05_Interpreter">Interpreter</a>,
+ <a href="#V5.05_Interpreter_PDF">Interpreter (PDF)</a>
+</ul>
+<li><a href="#Version5.04">Version 5.04 (limited) (9/21/97)</a>
+<ul>
+<li><a href="#V5.04_Documentation">Documentation</a>,
+ <a href="#V5.04_Procedures">Procedures</a>,
+ <a href="#V5.04_Utilities">Utilities</a>,
+ <a href="#V5.04_Drivers">Drivers</a>,
+ <a href="#V5.04_Interpreter">Interpreter</a>,
+ <a href="#V5.04_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V5.04_Library">Library</a>
+</ul>
+<li><a href="#Version5.03">Version 5.03 (8/8/97)</a>
+<ul>
+<li><a href="#V5.03_Documentation">Documentation</a>,
+ <a href="#V5.03_Procedures">Procedures</a>,
+ <a href="#V5.03_Drivers">Drivers</a>,
+ <a href="#V5.03_Platforms">Platforms</a>,
+ <a href="#V5.03_Fonts">Fonts</a>,
+ <a href="#V5.03_Interpreter">Interpreter</a>,
+ <a href="#V5.03_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V5.03_Library">Library</a>
+</ul>
+<li><a href="#Version5.02">Version 5.02 (7/28/97)</a>
+<ul>
+<li><a href="#V5.02_Documentation">Documentation</a>,
+ <a href="#V5.02_Procedures">Procedures</a>,
+ <a href="#V5.02_Utilities">Utilities</a>,
+ <a href="#V5.02_Drivers">Drivers</a>,
+ <a href="#V5.02_Platforms">Platforms</a>,
+ <a href="#V5.02_Fonts">Fonts</a>,
+ <a href="#V5.02_Interpreter">Interpreter</a>,
+ <a href="#V5.02_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V5.02_Library">Library</a>
+</ul>
+<li><a href="#Version5.01">Version 5.01 (6/22/97)</a>
+<ul>
+<li><a href="#V5.01_Documentation">Documentation</a>,
+ <a href="#V5.01_Procedures">Procedures</a>,
+ <a href="#V5.01_Utilities">Utilities</a>,
+ <a href="#V5.01_Drivers">Drivers</a>,
+ <a href="#V5.01_Platforms">Platforms</a>,
+ <a href="#V5.01_Interpreter">Interpreter</a>,
+ <a href="#V5.01_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#V5.01_Library">Library</a>
+</ul>
+<li><a href="#Version5.0">Version 5.0 (6/6/97)</a>
+<ul>
+<li><a href="#V5.0_Documentation">Documentation</a>,
+ <a href="#V5.0_Procedures">Procedures</a>,
+ <a href="#V5.0_Interpreter">Interpreter</a>,
+ <a href="#V5.0_Library">Library</a>
+</ul>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>
+This document is a record of changes in Ghostscript releases numbered 5.n.
+For earlier versions, see the the history documents:
+
+<blockquote>
+<a href="History4.htm">History of Ghostscript versions 4.n</a><br>
+<a href="History3.htm">History of Ghostscript versions 3.n</a><br>
+<a href="History2.htm">History of Ghostscript versions 2.n</a><br>
+<a href="History1.htm">History of Ghostscript versions 1.n</a>
+</blockquote>
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<p>
+Within each release, news appears in the following order: Incompatible
+changes, Documentation, Procedures, Utilities, Drivers, Platforms, Fonts,
+Interpreter, Streams (included under Interpreter through release 2.9.9),
+Library. Changes marked with a * were made available as patches to a
+previous release.
+
+<hr>
+
+<h2><a name="Version5.99"></a>Version 5.99 (beta) (1999-12-18)</h2>
+
+<h3><a name="5.99_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Procedures)
+ - All platform-specific makefiles must now define the Q macro.
+ - Ghostscript now exits with an error status if an error occurs in a
+file named on the command line, a -c command, or piped input.
+(Utilities)
+ - ps2epsi now disables setpagedevice: the bounding box of the EPSI
+output file is recorded only in the %%BoundingBox comment.
+(Drivers)
+ - The return type of gdev_vector_close_file is changed from void
+to int.
+(Interpreter)
+ - The name of the predefined stochastic halftone is changed to
+StochasticDefault. (This change was actually made in 5.98.)
+ - The compht feature is replaced by stocht.
+ - Font searching now looks in FontResourceDir.
+ - The ASCIIHexEncode filter now produces upper-case output.
+(Library)
+ - The type returned by compiled halftone resource access procedures
+is changed.
+
+</pre><h3><a name="5.99_Documentation"></a>Documentation</h3><pre>
+
+Fixes problems:
+ - A stray character had gotten added to the beginning of a file.
+(doc/Use.htm)
+ - Many minor HTML errors had crept in. (doc/*.htm, doc/gsdoc.el)
+
+Updates the docmentation on the mswinpr2 driver. (doc/Devices.htm)
+
+Notes that GNU make currently does not work on OpenVMS. (doc/Make.htm)
+
+Documents the fact that x/y_pixels_per_inch are deprecated. (gxdevcli.h)
+
+Documents certain bugs in ps2pdf. (doc/Ps2pdf.htm)
+
+Documents the addition of FontResourceDir to the font search process.
+(doc/Use.htm)
+
+Documents the new arrangement for B paper sizes. (doc/Psfiles.htm,
+doc/Use.htm, doc/gs-vms.hlp, man/gs.1)
+
+Removes the "under development" warning from the text API and
+get_bits_rectangle documentation, and adds a little more detail.
+(doc/Drivers.htm)
+
+Adds new user-contributed documentation for installing and using Ghostscript
+fonts with X Windows. (doc/Fonts.htm, doc/Readme.htm, doc/Use.htm)
+
+Adds building with the Watcom compiler to the release process.
+(doc/Release.htm)
+
+Adds an "Improving performance" section to the user documentation.
+(doc/Use.htm)
+
+Adds a note to the C style guide about order of evaluation.
+(doc/C-style.htm)
+
+Documents the new stocht.ps file. (doc/Psfiles.htm)
+
+</pre><h3><a name="5.99_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - A missing dependency caused builds on certain platforms to fail.
+(int.mak)
+ - $(EXP) was missing before various utility invocations. (int.mak)
+ - VMS converts all unquoted arguments to lower case. In order to
+work around this, we have added a platform-specific makefile macro Q, which
+is defined as a quote mark on VMS and as an empty string on all other
+platforms, and used it to quote the few mixed-case values in the makefiles.
+We removed the obsolete QQ macro from os2.mak as well. (cfonts.mak,
+dvx-head.mak, int.mak, openvms.mak, openvms.mmk, os2.mak, unixhead.mak,
+wccommon.mak, winlib.mak)
+ - PSRCDIR was incorrectly referenced as PNGSRCDIR in one place.
+(all-arch.mak)
+ - winint.mak had a conditional that Watcom's make program didn't
+accept. (winint.mak)
+
+Adds a makefile entry to allow compilation with libpng 1.0.5. (libpng.mak)
+
+Updates the Borland C++ makefile to work with C++Builder 4. (bcwin32.mak)
+
+Updates the Unix installation makefile to install stocht.ps. (unixinst.mak)
+
+</pre><h3><a name="5.99_Utilities"></a>Utilities</h3><pre>
+
+Fixes problems:
+ - ps2epsi didn't disable setpagedevice. (lib/ps2epsi)
+ - geninit needed &lt;stdlib.h&gt; for 'exit'. (geninit.c)
+ - Some invocations of utilities didn't deal with VMS's habit of
+converting arguments to lower case. (geninit.c, cfonts.mak)
+ - The ps2pdf*.bat files didn't produce a usage message if no
+arguments were provided. (lib/ps2pdf.bat, lib/ps2pdf12.bat,
+lib/ps2pdf13.bat)
+ - Removes some warnings from the Windows uninstaller.
+(dwuninst.cpp)
+
+Upgrades the halftone compiler to handle Type 5 halftones. (genht.c)
+
+Makes the initialization string compiler recognize sections of the code
+where binary tokens are allowed, and convert literal hex strings within such
+sections to binary-token strings, which take less space and load faster.
+(geninit.c)
+
+Adds a utility file to define b0 ... b6 as selecting JIS B paper sizes.
+(unixinst.mak, lib/jispaper.ps)
+
+Modifies the font printing utility to sort unencoded characters.
+(lib/prfont.ps)
+
+Adds a small utility to help use the StochasticDefault halftone.
+(lib/stocht.ps)
+
+</pre><h3><a name="5.99_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - The output of the epswrite driver couldn't be embedded in another
+file, because it assumed it was invoked with an empty operand stack.
+(gdevps.c)
+ - "Vector" drivers didn't detect I/O errors such as filling up the
+disk. (gdevvec.h, gdevpdf.c, gdevps.c, gdevpx.c, gdevvec.c)
+ - The bookkeeping for image color spaces when banding was incorrect,
+possibly causing memory access errors. (gxclist.h, gxclimag.c, gxclist.c)
+ - The cljet5 driver didn't place the image on the page correctly.
+(gdevclj.c)
+ - 16-bit X11 devices with R/G/B widths other than 5/6/5 sometimes
+failed to map colors correctly. (gdevxcmp.h, gdevxcmp.c)
+ - The cljet5c driver omitted a needed cast. (gdevcljc.c)
+
+Adds new x11rg16x and x11rg32x devices to test X Windows with unusual pixel
+layout. (devs.mak, gdevxalt.c)
+
+Works around a bug in Acrobat Distiller 4 (and perhaps some other PostScript
+interpreters) that causes an error if CCITTFaxDecode with /EndOfBlock = true
+is given data with no EOB (terminated by the end of the data stream
+instead). (gdevps.c)
+
+</pre><h3><a name="5.99_Platforms"></a>Platforms</h3><pre>
+
+Fixes problems:
+ - The absence of mktemp on the Watcom platform caused a linking
+error under Windows. (watc.mak, watcw32.mak, gp_iwatc.c, gp_mktmp.c)
+
+</pre><h3><a name="5.99_Fonts"></a>Fonts</h3><pre>
+
+Fixes problems:
+ - findfont, /Font resourcestatus, and /Font resourceforall weren't
+consistent. (lib/gs_fonts.ps, lib/gs_res.ps)
+ - Very large TrueType fonts caused a stackoverflow. (lib/gs_ttf.ps)
+
+</pre><h3><a name="5.99_PDF_writer"></a>PDF writer</h3><pre>
+
+Fixes problems:
+ - Errors in pdfmark and setdistillerparams were ignored (!).
+(lib/gs_pdfwr.ps)
+ - The PUT pdfmark didn't allow adding dictionaries to stream-type
+objects. (The pdfmark documentation says this isn't allowed, but we think
+this is an oversight, since it is reasonable and unambiguous and Acrobat
+Distiller allows it.) (gdevpdfm.c)
+ - The token scanner used to substitute object names in pdfmark
+parameters sometimes added an extra character on the end. (gdevpdfr.c)
+ - ashow and [a]widthshow produced incorrect text spacing. (bug
+introduced by an optimization in 5.97) (gdevpdft.c)
+ - setdistillerparams left its argument on the stack.
+(lib/gs_pdfwr.ps)
+ - 0-height images caused errors either at conversion or at rendering
+time. (gdevpdfi.c)
+ - If the FontMatrix included a translation component, text was
+positioned incorrectly. NOTE: this fix may not handle x/y/xyshow.
+(gdevpdft.c)
+ - Out-of-range user-space coordinates could get generated for
+rectangles. NOTE: they can still get generated for general paths.
+(gdevpdfd.c)
+ - Widths weren't written for renamed built-in fonts. We fixed this
+partly by improving the algorithm for recognizing built-in fonts.
+(gdevpdff.h, gdevpdff.c, gdevpdft.c)
+
+Works around the Acrobat limitation that user-space coordinates must not
+exceed 32K. (fix from Artifex) (gdevpdfp.c)
+
+Works around an Acrobat Reader 3 bug with printing files including Type 3
+fonts: with the "Download Fonts Once" option, AR3 only emits the font subset
+referenced on the first page where the font appears. (gdevpdfx.h,
+gdevpdf.c, gdevpdft.c)
+
+</pre><h3><a name="5.99_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - Type 3 fonts weren't handled properly as a marking context, so if
+a CharProc referenced a resource in the font, an error would occur.
+(lib/pdf_fonts.ps)
+ - 0-height images caused an error. (lib/pdf_draw.ps)
+
+</pre><h3><a name="5.99_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - Errors weren't propagated properly. (bug introduced in 5.98 by
+enhanced error recovery code) (imainarg.h, gs.c, imainarg.c)
+ - Errors in -c commands or in files named on the command line
+sometimes allowed execution to continue, and did not terminate with an
+abnormal status. (lib/gs_init.ps)
+
+Changes the binary token scanner so that if the stream buffer is in foreign
+space, binary-token strings will not be copied, but will be referenced
+directly in the buffer. This parallels what is done for name strings.
+(iscanbin.c)
+
+Changes the stochastic halftone from multiple Type 3s to a Type 5.
+(lib/ht_ccsto.ps, int.mak)
+
+Replaces the compht feature with a new feature called stocht. If this
+feature is selected, the StochasticDefault halftone resource will be
+pre-loaded into Ghostscript. If COMPILE_INITS=1, all the halftone data
+(threshold array, order and bits arrays) will be efficiently compiled into
+the executable. (int.mak)
+
+Replaces (...\n) print with (...) = everywhere. (lib/gs_cmdl.ps,
+lib/gs_fonts.ps, lib/gs_init.ps, lib/gs_setpd.ps, lib/pdf_base.ps,
+lib/pdf_font.ps, lib/pdf_main.ps, lib/pdf_sec.ps)
+
+Adds support for JIS B paper sizes: statusdict will now include isob0..6 and
+jisb0..6 operators, with b0..6 normally aliased to the former.
+(lib/gs_statd.ps, lib/jispaper.ps)
+
+Adds a b5tray procedure; limits the valid arguments for setpagetype to the
+Adobe-defined values 0 and 1. (lib/gs_statd.ps)
+
+Updates clients for the change in the gs_image_* API. (zimage.c)
+
+Makes the default halftone lookup procedure more reasonable.
+(lib/gs_init.ps, lib/gs_ll3.ps)
+
+</pre><h3><a name="5.99_Streams"></a>Streams</h3><pre>
+
+Fixes problems:
+ - An error condition when closing a file stream wasn't reported
+properly. (sfxfd.c, sfxstdio.c)
+
+For greater Adobe compatibility, changes the ASCIIHexEncode filter to
+produce upper-case output. (sstring.c)
+
+</pre><h3><a name="5.99_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - The gs_image_* API didn't work for ImageType 3 images. Fixing
+this required a small (but backward-compatible) API change. (fix mostly
+provided by Artifex) (gsimage.h, gsimage.c)
+ - The change in the bbox device in 5.95 broke it for the case where
+it was being used in a pipeline. (gdevbbox.c)
+ - A possible overflow wasn't detected when stroking lines with very
+large coordinates. (gxstroke.c)
+ - A mask was sized incorrectly. (gsdcolor.h)
+
+Updates the runtime support for compiled halftones. (gxdhtres.h, gscdefs.h,
+gconf.c, gxclrast.c, gxhtbit.c)
+
+Replaces all references to the now-deprecated x/y_pixels_per_inch with
+HWResolution[0/1]. (gsdevice.c, gxclist.c, gxpcmap.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.98"></a>Version 5.98 (beta) (1999-12-01)</h2>
+
+<h3><a name="5.98_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Library)
+ - The return type of init_proc is changed from void to int.
+ - The return types of gs_lib_init* are changed from void to int.
+(Interpreter)
+ - The return types of gs_[main_]init*, gs_[main_]add_lib_path,
+gs_[main_]set_lib_paths, and a number of internal initialization-related
+procedures are changed from void to int.
+
+</pre><h3><a name="5.98_Documentation"></a>Documentation</h3><pre>
+
+Improves the documentation of the clist_render_rectangle procedure.
+(gxclist.h)
+
+Makes it clear that pre-public-release filesets should not be redistributed.
+(doc/Tester.htm)
+
+Clarifies that the parameters for the X driver are command line switches,
+not X resources. (doc/Use.htm)
+
+Improves the documentation of ps2pdf in response to some user comments.
+(doc/Ps2pdf.htm)
+
+Documents the initial settings of the distiller parameters.
+(doc/Ps2pdf.htm)
+
+Documents the UniqueIDs assigned to Aladdin. (lib/gs_fonts.ps)
+
+Updates the documentation for the stochastic halftone mask. (doc/Make.htm)
+
+Removes some obsolete material. (doc/Release.htm)
+
+</pre><h3><a name="5.98_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - The new ps2pdf* scripts weren't included in the Unix install list.
+(unixinst.mak)
+ - The directory names were missing in BEGINFILES. (openvms.mak)
+ - The .pl and .sh scripts weren't included in the Unix install list.
+(unixinst.mak)
+
+Updates all-arch.mak with a newer version from its contributor.
+(all-arch.mak)
+
+Updates the makefiles for a change in eexec modularization. (devs.mak,
+int.mak, lib.mak)
+
+</pre><h3><a name="5.98_Utilities"></a>Utilities</h3><pre>
+
+Fixes problems:
+ - The dvipdf usage message was incorrect. (lib/dvipdf)
+
+Adds a utility for mechanically adding the Adobe extended Latin characters
+(primarily Central European accented letters) to a font. Eventually we
+would like to integrate this into the font loader and/or make extended
+versions of the standard 35 fonts. (lib/addxchar.ps)
+
+</pre><h3><a name="5.98_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - psdf_sorted_glyphs_include didn't handle empty lists correctly.
+(gdevpsdf.c)
+ - A reference to a #defined constant hadn't been converted to upper
+case. (gdevpsdf.h)
+ - Acrobat Reader couldn't handle &lt;&gt; as the definition of
+Notice in an embedded font's FontInfo dictionary: it requires a ()
+string. (gdevpsd1.c)
+ - The [e]pswrite driver didn't take stroked paths into account when
+computing the bounding box. (gdevps.c)
+
+Updates gdevwpr2.c with a new version from its most recent author.
+(gdevwpr2.c)
+
+</pre><h3><a name="5.98_Fonts"></a>Fonts</h3><pre>
+
+Fixes problems:
+ - The FONTPATH file scanner wasn't protected against errors.
+(lib/gs_fonts.ps)
+ - Some badly designed Chinese TrueType fonts, whose 'post' table
+gives the name .null to all glyphs, didn't work properly. (lib/gs_ttf.ps)
+ - The shareware Katakana font had an incorrect UniqueID.
+(fonts/fkarw.gsf)
+
+Adds all of the PostScript 3 fonts to the intelligent substitution tables.
+(lib/gs_fonts.ps)
+
+Changes the FONTPATH scanner to allow a %%BeginFont: line as the first line
+of a font. Nothing in Adobe's documentation suggests that this is
+acceptable, but some fonts have it. (lib/gs_fonts.ps)
+
+Releases an updated set of the URW fonts, fixing the braceleftbt problem in
+the Symbol font and a couple of missing characters in the ZapfDingbats
+fonts, and adding the Euro glyph to the alphabetic fonts. The new archive
+also includes fonts.scale and fonts.dir files for use with X Windows
+(mkfontdir and xfs).
+
+Centralizes the definition of Aladdin's XUIDs. (lib/gs_fonts.ps,
+lib/gs_ttf.ps)
+
+</pre><h3><a name="5.98_PDF_writer"></a>PDF writer</h3><pre>
+
+Fixes problems:
+ - The algorithm for making font names unique didn't take subset
+prefixes into account. (gdevpdff.h, gdevpdff.c, gdevpdfw.c)
+ - Computing character bounding boxes was taking an inordinate amount
+of time. (performance problem only) (gdevpdff.c)
+ - The pdf_image_writer and pdf_image_enum structures didn't have GC
+descriptors, possibly causing memory corruption. (gdevpdfi.c)
+ - PostScript files containing images with premature end-of-data were
+converted to PDF files with premature end-of-data, which Acrobat doesn't
+accept. (gdevpdfo.h, gdevpdfx.h, gdevpdfi.c, gdevpdfo.c, gdevpdfu.c)
+ - Pattern resources whose image was written in-line omitted a needed
+gsave (q). (bug introduced in 5.94) (gdevpdfi.c)
+ - The similarity between a font and a base font wasn't computed
+correctly, leading to some unnecessary writing of Widths for standard fonts.
+(gdevpdft.c)
+ - Embedding a stream in the psdf_binary_writer caused garbage
+collector problems, because there could be pointers to that stream from
+elsewhere. (gdevpsdf.h, gdevpsdf.c)
+ - The algorithms for deciding whether a font was script or serif
+were very inaccurate. (The revised ones are only somewhat better.)
+(gdevpdff.c)
+ - Re-encoded characters in subset fonts weren't handled correctly.
+We work around this by writing the entire font if the character doesn't
+appear in the font's encoding. This is inefficient but will always produce
+correct output. (gdevpdff.h, gdevpdff.c, gdevpdft.c, gdevpdfw.c)
+ - The meaning of bit 6 in the Flags was supposed to have changed in
+PDF 1.2, but didn't. (gdevpdff.h, gdevpdff.c, gdevpdfw.c)
+ - The Widths array didn't get written out for embedded subsets of
+the built-in fonts. (gdevpdfw.c)
+ - Planar images weren't handled correctly, and could cause memory
+corruption. (gdevpdfi.c)
+ - Patterns still weren't scaled correctly; in fact, the "fix" in
+5.94 can't possibly have worked, and we don't understand why it seemed to.
+(gdevpdfi.c)
+
+Recants the belief that the default encoding for embedded fonts is
+StandardEncoding (see 5.95): the appearance of this was a symptom of having
+multiple fonts with the same name. (gdevpdft.c)
+
+Removes FONT_EMBED_UNKNOWN, which is meaningless (a decision is always made
+about whether to embed a font). (gdevpdff.h, gdevpdff.c, gdevpdft.c)
+
+Changes the algorithm for picking the base font so that it produces more
+efficient output for certain cases of re-encoded fonts. (gdevpdft.c)
+
+</pre><h3><a name="5.98_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - Fonts were getting renamed unnecessarily. (performance and PDF
+output size problem only) (lib/pdf_font.ps)
+ - Fonts with Widths but no FontDescriptor caused an error.
+(lib/pdf_font.ps)
+ - TrueType fonts processed the Encoding key in the font the same way
+as other font types, which is not correct. (lib/pdf_font.ps)
+ - For embedded Type 3 fonts, the Widths entry in a font didn't
+override the width in the CharProc. (lib/pdf_font.ps, lib/pdf_ops.ps)
+ - If a page had multiple Contents streams, and one of the streams
+ended with values on the operand stack, an error might occur.
+(lib/pdf_main.ps)
+ - Ts and Tz within a text object didn't take effect immediately.
+(lib/pdf_ops.ps)
+ - sc[n] and SC[N] could cause an error because Do left an extra item
+on the stack temporarily. (lib/pdf_draw.ps)
+
+</pre><h3><a name="5.98_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - Getting the unscaled outline for a Type 1 font didn't disable
+hinting. (mostly a performance problem) (zchar1.c)
+ - Error conditions during initialization weren't recognized. Fixing
+this required changing various return types from void to int. (ialloc.h,
+iinit.h, imain.h, interp.h, ialloc.c, iinit.c, imain.c)
+ - HalftoneMode didn't affect setscreen or setcolorscreen.
+(lib/gs_init.ps, lib/gs_ll3.ps)
+
+Makes the interpreter quit with a message, rather than a stack dump, if it
+can't open the initial device and DEBUG is not set. (lib/gs_init.ps)
+
+Adds .setlimitclamp and .currentlimitclamp operators to access the limit
+clamp flag in the graphics state. (zgstate.c)
+
+Changes the names of the stochastic halftone mask to be more descriptive.
+(lib/ht_ccsto.ps, int.mak, unixinst.mak)
+
+</pre><h3><a name="5.98_Streams"></a>Streams</h3><pre>
+
+Adds the ability to forbid using hex encoding when writing strings.
+(spsdf.h, spsdf.c)
+
+</pre><h3><a name="5.98_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - Computing the width of a glyph unnecessarily constructed the
+entire outline. (performance problem only) (gxtype1.c)
+ - Getting the unscaled width of a glyph in a Type 1 font didn't
+disable hinting. (mostly a performance problem) (gxtype1.c.)
+ - The "unknown device" GC descriptor is no longer used. (gsdevice.c)
+ - Some compilers *still* complained about end-of-loop code not being
+reached. (gxpath2.c)
+ - Mixing float and double values sometimes caused spurious lines to
+be drawn when stroking very short lines with large widths. (fix from
+Artifex) (gxpdash.c)
+ - The code for handling crossing lines in the path filling algorithm
+sometimes computed line crossings incorrectly, causing excessive
+computation. (gxfill.c)
+ - When oversampling for anti-aliasing, the flatness parameter was
+not scaled, leading to unnecessarily accurate curve rendering. (gspaint.c)
+ - An extra grestore in a Pattern PaintProc could cause a crash.
+(gxpcmap.c)
+ - Error conditions during initialization weren't recognized. Fixing
+this required changing the return type of init_proc, and various other
+internal procedures, from void to int. (std.h, gslib.h, gscdefs.h,
+gshtscr.c, gsiodev.c, gslib.c, gsutil.c)
+
+Splits off the Type 1 encryption/decryption code into a separate file for
+sharing with the eexec streams. (gscrypt1.c, gxtype1.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.97"></a>Version 5.97 (beta) (11/22/99)</h2>
+
+<p>
+This is the next beta for 6.0. We believe the pdfwrite driver (ps2pdf) now
+finally produces Acrobat-acceptable output, with reasonable handling of
+fonts, and have also fixed the problem with high-level image banding. We
+are cautiously hopeful that this is a "real" beta candidate.
+
+<h3><a name="5.97_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Drivers)
+ - The default CompatibilityLevel in the pdfwrite driver is now back
+to 1.3.
+(Library)
+ - The seac_data procedure of a Type 1 font must now be able to
+return the glyph and/or the actual outline data.
+
+</pre><h3><a name="5.97_Documentation"></a>Documentation</h3><pre>
+
+Fixes problems:
+ - A &lt;br&gt; was missing. (doc/Release.htm)
+ - The final step of copying releases to www.aladdin.com was missing.
+(doc.Release.htm)
+
+Documents the new situation with the ps2pdf* scripts. (doc/Ps2pdf.htm)
+
+Documents the simplification of the pthreads code. (doc/Helpers.htm,
+doc/Make.htm)
+
+Adds a requirement to the license that modifications include the name and
+e-mail address of the author, and the date and purpose of the modification.
+(doc/Public.htm)
+
+Adds a link to the documentation for setdistillerparams. (doc/Ps2pdf.htm)
+
+</pre><h3><a name="5.97_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - On OpenVMS, the test for whether the bin and obj subdirectories
+already existed was incorrect. (openvms.mak, openvms.mmk)
+ - The recently updated Borland/Inprise makefile deleted some temp
+files prematurely. (bcwin32.mak)
+ - The dependencies for the Unix install-scripts and install-data
+targets were incorrect. (unixinst.mak)
+
+Updates the RPM spec files. (gs.rps, gs-fonts.rps, rpm-conf.dif)
+
+Adds support for compilation with Borland/Inprise C++Builder 3.
+(bcwin32.mak, winint.mak)
+
+Adds a note on font installation under Red Hat Linux 6. (doc/Install.htm)
+
+</pre><h3><a name="5.97_Utilities"></a>Utilities</h3><pre>
+
+Adds ps2pdf12 and ps2pdf13 scripts to select the PDF output level
+explicitly; makes ps2pdf a wrapper for ps2pdf12. (lib/ps2pdf,
+lib/ps2pdf.bat, lib/ps2pdf12, lib/ps2pdf12.bat, lib/ps2pdf13,
+lib/ps2pdf13.bat, lib/ps2pdfwr, lib/ps2pdfwr.bat)
+
+Updates the Windows install/setup program to display the Aladdin start menu
+folder on a successful install, so that the user gets some feedback that all
+went well. (dwinst.cpp, dwsetup.cpp)
+
+</pre><h3><a name="5.97_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - The lj5{mono,gray} drivers didn't send the page size to the
+printer. (gdevpxut.h, gdevlj56.c, gdevpx.c, gdevpxut.c)
+ - The pxl drivers didn't handle out-of-range points properly.
+(gdevvec.c, gdevpx.c)
+ - The bmpa drivers didn't produce multi-page output files correctly
+-- all pages but the first were blank. (The bmp format is supposed to be
+single-page, but at least some readers handle multi-page files correctly.)
+(gdevbmpa.c)
+ - The code for writing embedded TrueType fonts was broken. (bug
+probably introduced in 5.9x) (gdevpsdt.c)
+
+Removes an unused variable. (gdevbmpa.c)
+
+</pre><h3><a name="5.97_Platforms"></a>Platforms</h3><pre>
+
+Replaces the 4 pthreads files, which included a dependence on the non-POSIX
+&lt;semaphore.h&gt;, with a single file that uses only pthreads procedures.
+(gp_psync.c, gp_posem.c [deleted], gp_pthr.c [deleted], gp_ptsem.c
+[deleted], gp_semon.c [deleted])
+
+</pre><h3><a name="5.97_PDF_writer"></a>PDF writer</h3><pre>
+
+Fixes problems:
+ - Whether or not to write the Widths array was implicit in the data
+structures rather than explicit, so it was sometimes written unnecessarily.
+(gdevpdfx.h, gdevpdff.c, gdevpdft.c)
+ - Fonts based on the 14 built-in fonts didn't set BaseFont to the
+name of the built-in font. (gdevpdff.c)
+ - The determination of whether a glyph was available was incorrect
+for embedded fonts, leading some glyphs to be turned into bitmaps
+unnecessarily. (gdevpdft.c)
+ - Apparently Acrobat Reader gets confused if different subsets of
+the same font have different FirstChar and LastChar values, so we have to
+write the full Widths array each time. (gdevpdfx.h, gdevpdff.c, gdevpdft.c)
+ - A structure member wasn't initialized when processing pdfmark
+annotations, possibly causing a memory access error. (gdevpdfm.c)
+ - The typedef for gx_device_pdf had a typo. (gdevpdfx.h)
+ - Each embedded font subset had its own FontDescriptor and its own
+font data, confusing Acrobat Reader. Fixing this required sharing
+FontDescriptors among multiple fonts and making FontDescriptors
+pseudo-resources. (gdevpdff.h, gdevpdfx.h, gdevpdf.c, gdevpdff.c,
+gdevpdft.c, gdevpdfw.c)
+ - Incrementally defined embedded Type 1 fonts didn't write out
+correct Widths. (gdevpdff.c)
+ - PDF resources didn't consistently record the gs_id of the
+structure they represented, possibly causing resources to be duplicated
+unnecessarily. (gdevpdff.c, gdevpdfu.c)
+
+Reinstates PDF text output. (gdevpdf.c)
+
+Changes the default CompatibilityLevel in the pdfwrite device back to 1.3,
+since the ps2pdf scripts now make it easy to choose the PDF level.
+(gdevpdf.c)
+
+When possible, uses the widths obtained from the font, rather than the
+default implementation of text_process, to complete the text_process
+operation. This greatly speeds up the conversion process. (gdevpdft.c)
+
+Allows character remapping (but not reencoding) of TrueType fonts.
+(gdevpdft.c)
+
+Factors the definitions for cos objects and font-related objects into header
+files more thoroughly. (gdevpdff.h, gdevpdfo.h, gdevpdfx.h, gdevpdf.c,
+gdevpdff.c, gdevpdfi.c, gdevpdfm.c, gdevpdfr.c, gdevpdft.c, gdevpdfu.c)
+
+Makes the names of some structure elements correspond more directly to keys
+in PDF directories. (gdevpdff.h, gdevpdff.c, gdevpdft.c)
+
+Splits off the font-writing code, since a source file was getting too big.
+(gdevpdff.h, gdevpdff.c, gdevpdfw.c)
+
+Adds CharSet information to embedded Type 1 font descriptors. (gdevpdfw.c)
+
+Makes all font names in the output unique, selected by static bool
+MAKE_FONT_NAMES_UNIQUE. (gdevpdff.h, gdevpdff.c, gdevpdft.c)
+
+Reinstates support for one special case of composite fonts (8/8 mapping with
+the high order byte always zero) that is used by the AdobePS4 Windows
+driver. (gdevpdft.c)
+
+Changes the assumption about the default encoding for embedded TrueType
+fonts from StandardEncoding to no known encoding. (gdevpdft.c)
+
+Changes FONT_EMBED_BASE14 to FONT_EMBED_STANDARD for greater
+descriptiveness. (gdevpdff.h, gdevpdff.c, gdevpdft.c)
+
+</pre><h3><a name="5.97_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - The same-font test for Type 1 fonts didn't correctly identify
+re-encoded fonts with unchanged metrics. (zfont1.c)
+ - If a save level was split into multiple internal save objects,
+some changes could get undone before objects were finalized. (isave.c)
+ - When releasing all of memory, stable allocators weren't finalized.
+(isave.c)
+ - Some compilers gave annoying and needless warnings about integer
+overflow. (store.h)
+ - There was a signed/unsigned char * mismatch. (iccfont.c)
+
+Adds a debugging procedure. (idebug.h, idebug.c)
+
+Changes the Type 1 font seac_data procedure to match the new API.
+(zchar1.c)
+
+</pre><h3><a name="5.97_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - The GC didn't know about the pointers to the tables for Indexed
+color spaces when banding, occasionally causing the tables to be written as
+garbage. This is the real fix for the problem discovered in 5.96.
+(gsiparam.h, gxclist.h, gxiparam.h, gxclimag.c, gxclist.c, gxclpath.c)
+ - With 'async' drivers, multi-page files didn't render properly
+(they got a rangecheck error on every page after the first one).
+(gdevprna.c)
+ - Some compilers still complained about end-of-loop code not being
+reached. (gxpath2.c)
+ - The scaled font cache required that a font have a UID in order to
+be a candidate for caching. (gsfont.c)
+ - An obsolete check caused slight discrepancies between banded and
+non-banded output. (gxstroke.c)
+ - The glyph_outline procedure for TrueType fonts transformed the
+width by the scaling matrix twice. (gstype42.c)
+
+Removes some now-unnecessary extern_st declarations. (gdevbbox.c,
+gdevplnx.c, gximage3.c)
+
+Removes some initializations that read uninitialized locations and are
+logically unnecessary. (gsalloc.c, gscolor.c)
+
+Adds makefile rules for compiling the MD5 implementation. (lib.mak)
+
+Makes the seac_data of a Type 1 font return the glyph and/or the actual
+outline data. This is necessary because some Type 1 fonts don't have the
+accents in the same positions as StandardEncoding, but use seac anyway.
+(gxfont1.h)
+
+Changes the Type 1 font interpreter to match the new seac_data API.
+(gxtype1.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.96"></a>Version 5.96 (beta) (11/12/99)</h2>
+
+<p>
+This is the next beta for 6.0. To meet a need of our commercial licensing
+partner for a PostScript LL3 release, we are releasing this fileset with all
+font handling in the PDF writer disabled, as well as high-level image
+banding. This is a temporary measure: we will reinstate PDF text in 5.97,
+and high-level image banding as soon as we can straighten out its memory
+management problems.
+
+<h3><a name="5.96_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Procedures)
+ - All Unix 'make' programs must now predefine MAKE as the name of
+the program.
+(Interpreter)
+ - zcolor_remap_one now returns o_push_estack rather than 0 in the
+case where it doesn't actually have to sample the procedure.
+(Library)
+ - Multi-plane halftones (when needed) are now used for all CMYK
+devices, not only if setcolorscreen was executed.
+ - Font implementors must now provide a same_font procedure.
+
+</pre><h3><a name="5.96_Documentation"></a>Documentation</h3><pre>
+
+Makes it clear that gsnup.ps is very simple and naive. (doc/Psfiles.htm,
+lib/gsnup.ps)
+
+Documents the new -Z_ switch. (doc/Use.htm)
+
+Documents that SYNC=nosync allows building on systems that don't support
+multi-threading. (doc/Make.htm)
+
+Adds documentation for building on Macintosh Rhapsody systems.
+(doc/Make.htm)
+
+Adds a reference to the new all-arch.mak file. (doc/Helpers.htm,
+doc/Make.htm)
+
+Notes that ps2pdf does preserve the color space for images.
+(doc/Ps2pdf.htm)
+
+Documents the new self-extracting archive for MS Windows. (doc/Install.htm,
+doc/Release.htm)
+
+Further improves the documentation of the PDF text machinery. (gdevpdfx.h)
+
+Reorganizes the build information for Unix. (doc/Make.htm)
+
+Adds information on building Ghostscript under BSDI. (doc/Make.htm)
+
+Notes that versions of zlib before 1.1.3 may cause an error on rare
+occasions. (zlib.mak)
+
+Fixes a few other minor problems. (doc/Current.htm, doc/Devices.htm,
+doc/DLL.htm, doc/Install.htm, doc/Language.htm, doc/Make.htm,
+doc/New-user.htm, doc/Ps2pdf.htm, doc/Source.htm, doc/Use.htm)
+
+</pre><h3><a name="5.96_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - dctd.dev and dcte.dev were defined in $(PSD), but referenced in
+$(GLD). (devs.mak, int.mak, lib.mak)
+ - pipe.dev was defined in $(GLD), but referenced in $(PSD).
+(bcwin32.mak, dvx-gcc.mak, msvc32.mak, unix-gcc.mak, unixansi.mak,
+unixtrad.mak)
+ - XLIBDIRS was included in the linker command even if none of the
+X drivers were used. (devs.mak, dvx-tail.mak, ugcclib.mak, unixlink.mak)
+ - The OpenVMS makefile didn't create the obj and bin directories
+properly. (openvms.mak)
+ - 'make debug' and 'make pg' didn't work on Unix systems where the
+make program was named something other than make. (unix-end.mak)
+
+Introduces a new top-level makefile macro, STDLIBS, that is -lm for all
+reasonable platforms but null for Rhapsody. (dvx-gcc.mak, dvx-tail.mak,
+ugcclib.mak, unix-gcc.mak, unixansi.mak, unixlink.mak, unixtrad.mak)
+
+Adds Nelson Beebe's contributed multi-architecture Unix makefile.
+(all-arch.mak)
+
+Makes it theoretically possible in theory to build the new Windows
+install/uninstall program with the Borland compiler. However, since this
+requires Borland C++ 4.52 and we only have 4.5, this is disabled in
+bcwin32.mak. (bcwin32.mak, winint.mak)
+
+</pre><h3><a name="5.96_Utilities"></a>Utilities</h3><pre>
+
+Fixes problems:
+ - The default for gsnup.ps was 3x2 landscape, rather than 2x2
+portrait. (lib/gsnup.ps)
+ - gslp.ps was broken (by the changes made to support gsnup.ps).
+(lib/gslp.ps)
+
+Adds a -link switch to genconf, to allow verbatim copying of commands into
+the linker command line. (genconf.c)
+
+Edits files to add missing $Id lines and module summary comments, and to
+delimit module summary comments from further material. (dwinst.h,
+dwsetup.h, dwuninst.h, bench.c, dwuninst.cpp)
+
+Makes it possible to build the new Windows install/uninstall program with
+the Borland compiler. (dwinst.cpp, dwsetup.cpp, dwsetup.def, dwsetup.rc,
+dwuninst.cpp, dwuninst.def)
+
+</pre><h3><a name="5.96_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - Embedded Type 1 fonts lacked some 'def' commands. (gdevpsd1.c)
+ - Multiple Master Font instances weren't written out correctly.
+(gdevpsd1.c)
+
+Edits files to add missing $Id lines and module summary comments, and to
+delimit module summary comments from further material. (gdev8bcm.h,
+gdevht.h, gdevpccm.h, gdevpcl.h, gdevsvga.h, gdevx.h, gdev3852.c,
+gdev8510.c, gdevadmp.c, gdevcd8.c, gdevcif.c, gdevclj.c, gdevhl7x.c,
+gdevifno.c, gdevimgn.c, gdevl31s.c, gdevmeds.c, gdevmswn.c, gdevos2p.c,
+gdevpe.c, gdevpm.c, gdevsj48.c, gdevtknk.c, gdevupd.c, gdevwddb.c,
+gdevwpr2.c, gdevwprn.c)
+
+</pre><h3><a name="5.96_Platforms"></a>Platforms</h3><pre>
+
+Fixes problems:
+ - The pthreads wrapper had a procedure type mismatch. We fixed this
+by making it allocate and free a wrapper object, as the Windows wrapper
+does. (gp_pthr.c)
+
+Edits files to add missing $Id lines and module summary comments, and to
+delimit module summary comments from further material. (dwimg.h, dwmain.h,
+gsdll.h, gp_msio.c, gp_mswin.c)
+
+Removes an unnecessary #include &lt;semaphore.h&gt;. (gp_semon.c)
+
+Adds a module that implements semaphores using the pthreads mutex
+facilities, as an alternative to gp_posem.c. Unfortunately, using this
+module causes immediate crashes on both GNU/Linux and BSDI, and we don't know
+why. (Let us know if you figure it out.) (gp_ptsem.c)
+
+</pre><h3><a name="5.96_PDF_writer"></a>PDF writer</h3><pre>
+
+Fixes problems:
+ - The character and word spacing weren't recognized as being reset
+by a PDF grestore. (gdevpdfx.h, gdevpdfu.c)
+ - Fonts that couldn't be embedded were always converted to bitmaps,
+rather than becoming candidates for non-embedded representation (if
+EmbedAllFonts is false and the font doesn't appear on the AlwaysEmbed list).
+(gdevpdfx.h, gdevpdff.c, gdevpdft.c)
+ - Stream-type Cos objects were written with no (0-length) data.
+(gdevpdfm.c)
+ - Reencoded base 14 fonts were not recognized as such, leading to
+excessive font embedding. (gdevpdfx.h, gdevpdf.c, gdevpdff.c, gdevpdft.c)
+ - Fonts were embedded by default even if EmbedAllFonts was false.
+(gdevpdft.c)
+
+Changes MaxSubsetPct to 35 to match Acrobat Distiller. (gdevpsdf.h)
+
+Adds some tracing output (-Z_). (gdevpdff.c, gdevpdft.c)
+
+Temporarily disables font handling in the PDF writer, to meet a need of our
+commercial licensing partner. All text will be converted to code-scrambled
+Type 3 bitmap fonts. (gdevpdf.c)
+
+</pre><h3><a name="5.96_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - The sh operator caused an invalidaccess error for shadings that
+required a DataSource. (lib/pdf_draw.ps)
+ - The test for whether a Widget appearance was a Form or a
+collection of sub-appearances was incorrect, causing an /undefined error in
+the latter case. (lib/pdf_draw.ps)
+ - If the FontName in a Font descriptor differed from the BaseFont
+name in the Font object, the interpreter used the two inconsistently,
+sometimes causing the wrong font to be used. (lib/pdf_font.ps)
+ - ICCBased color spaces caused an error. (lib/pdf_draw.ps)
+
+Works around the fact that Acrobat Distiller produces files in which a
+Widget's Form appearance lacks Type and Subtype keys. (lib/pdf_draw.ps)
+
+</pre><h3><a name="5.96_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - Failure in allocating the name table would cause a crash.
+(iname.c)
+ - Shadings with procedure-based filters didn't work.
+(lib/gs_ll3.ps, ifilter.h, zfileio.c, zfproc.c)
+ - Some compilers complained about arithmetic on an enum. (iparam.c)
+ - Setting a transfer or similar function to the identity function
+didn't set the cached values, so the setting didn't consistently take
+effect. (icolor.h, zcolor.c)
+ - If the C library's implementation of sprintf with a %g format ever
+produced a number with an exponent but no decimal point, a crash would
+occur. (iutil.c)
+ - The PageDeviceName page device parameter wasn't supported.
+(lib/gs_lev2.ps, lib/gs_setpd.ps)
+ - A public procedure wasn't declared extern if DEBUG wasn't set.
+(igc.h)
+ - Because of a typo, loading resources automatically from a file
+always failed. (bug introduced in 5.94) (lib/gs_res.ps)
+
+Edits files to add missing $Id lines and module summary comments, and to
+delimit module summary comments from further material. (files.h, iastate.h,
+ibnum.h, ichar.h, ifilter.h, iimage.h, iimage2.h, iparam.h, isave.h,
+iscan.h, isstate.h, istream.h, iutil.h, opcheck.h, scanchar.h)
+
+Adds a font similarity testing procedure for Type 1/2/4 fonts. (zfont1.c)
+
+</pre><h3><a name="5.96_Streams"></a>Streams</h3><pre>
+
+Edits files to add missing $Id lines and module summary comments, and to
+delimit module summary comments from further material. (sbhc.h, sbtx.h,
+sbwbs.h, sdct.h, scfdgen.c, scfdtab.c, shcgen.h, siscale.h, sjpeg.h,
+slzwx.h, smtf.h, spdiffx.h, spngpx.h, srlx.h)
+
+</pre><h3><a name="5.96_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - Making a transformed font inappropriately copied the font's
+notification list. (gsfont.c)
+ - Some compilers complained about end-of-loop code not being
+reached. (gxpath2.c)
+ - The first two arguments of scale_delta was swapped, causing
+anomalous output for certain Type 1 fonts with curves where the starting and
+ending points had the same X or Y coordinate. (gxhint3.c)
+ - Large smoothness values produced blocky output. (gxshade.c)
+ - When banding, in a region where a CMYK halftone had no K at all,
+the output was likely to be black rather than the correct color. (gxcht.c)
+ - Interpolated images with mirrored X scaling weren't mirrored.
+(gxiscale.c)
+ - Interpolated images were truncated. (gxiscale.c)
+ - Halftone caches could have a dangling pointer to a transfer map in
+the halftone order. (gxht.c)
+ - The next-character code returned for kshow was the same as the
+current character. (bug probably introduced in 5.86) (gstext.c)
+ - The GC didn't know about the pointers to the tables for Indexed
+color spaces when banding, occasionally causing the tables to be written as
+garbage. In the process of investigating this, we discovered that the GC
+didn't know about *any* of the pointers in the structures used to track
+banded images. ****** NOT FIXED, TOO MUCH RISK OF INTRODUCING FURTHER
+BUGS. ****** Instead, we disabled high-level image banding in this fileset.
+(gxclimag.c)
+
+Changes the name of a variable from ppc to ppcr, because an Apple compiler
+inappropriately defines the name ppc when compiling on a PowerPC.
+(gxshade6.c)
+
+Edits files to add missing $Id lines and module summary comments, and to
+delimit module summary comments from further material. (gdevbbox.h,
+gscoord.h, gscpixel.h, gsfname.h, gsfont.h, gsimage.h, gslib.h, gsmdebug.h,
+gspaint.h, gspath.h, gspath2.h, gxalloc.h, gxclipm.h, gxclpage.h,
+gxclpath.h, gxcmap.h, gxcoord.h, gxcpath.h, gxdda.h, gxdevmem.h, gxfcache.h,
+gxfont.h, gximage.h, gxiodev.h, gxpaint.h, gxpath.h, gxpcolor.h, gzacpath.h,
+gzcpath.h, gzht.h, gzpath.h, md5.h, gxdither.c, md5.c)
+
+Adds a prototype for debug_find_pointers. (gxalloc.h)
+
+Adds a font procedure for testing whether two fonts are the same in various
+ways. This is needed so that the PDF writer can do a reasonable job of
+identifying reencoded and renamed versions of the base 14 fonts. (gxfont.h,
+gsfont.c)
+
+Changes a macro to a procedure and improves some commenting. (gxhint3.c)
+
+Changes the halftoning code so that multi-plane halftones are always used on
+CMYK devices, even if only a single halftone is set (setscreen or
+HalftoneType 1). (gxcht.c, gxdither.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.95"></a>Version 5.95 (beta) (11/1/99)</h2>
+
+<p>
+There were several new problems in 5.94, some of them severe. We hope this
+beta candidate fixes them without introducing any new ones. It also fixes
+some minor problems not reported in 5.93.
+
+<p>
+We think we have finally found the right workarounds for Acrobat and
+specification problems so that pdfwrite output (with CompatibilityLevel
+either 1.2 or 1.3) both conforms as closely as possible to the published PDF
+specification and works with Acrobat Reader (3 or 4 respectively) for both
+displaying and printing.
+
+<p>
+NOTE: The default level of output from the pdfwrite device (ps2pdf) has been
+changed back to PDF 1.2 (Acrobat 3 compatible), because this is what the
+majority of users want. For PDF 1.3 output, use -dCompatibilityLevel=1.3.
+
+<p>
+Note: some post-6.0 code is included under an #ifdef POST60.
+
+<h3><a name="5.95_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Drivers)
+ - The default CompatibilityLevel in the pdfwrite device (ps2pdf) is
+now 1.2 rather than 1.3.
+ - pdfwrite now discards information after the last showpage rather
+than producing an additional page.
+(Library)
+ - The is_monotonic procedure of a function now returns a result that
+indicates the direction of monotonicity of each value separately.
+ - The coordinate system used internally by the bbox device is now
+upright (lower left corner = (0,0) rather than upper left corner). (This
+should not make any difference to clients, who should always have been using
+default user space coordinate.)
+
+</pre><h3><a name="5.95_Documentation"></a>Documentation</h3><pre>
+
+Fixes problems:
+ - A couple of URLs were incorrect or out of date. (doc/Readme.htm,
+doc/Use.htm)
+ - There was a typo in a comment. (gxfont.h)
+ - An old bug had been fixed, but the documentation had not been
+updated to reflect this. (doc/Current.htm)
+
+Documents the requirement to change SYNC from posync to fbsdsync on FreeBSD.
+(doc/Make.htm)
+
+Adds references to Adobe's on-line documentation. (doc/Readme.htm)
+
+Updates the release procedure to mention adding .ps files.
+(doc/Release.htm)
+
+Adds documentation for the bbox device. (doc/Use.htm)
+
+Documents the new gsnup.ps utility. (doc/Psfiles.htm)
+
+Modifies the gslp utility for greater page independence and smaller output
+files. (lib/gslp.ps)
+
+Documents the fact that the default output from pdfwrite is PDF 1.2.
+(doc/Ps2pdf.htm)
+
+Adds Inprise (as the new name of the Borland tools) in a few places.
+(doc/Make.htm)
+
+Updates the release documentation slightly. (doc/Release.htm)
+
+</pre><h3><a name="5.95_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - FreeBSD uses a different name for the pthreads implementation.
+(lib.mak, unixansi.mak, unix-gcc.mak, unixtrad.mak)
+
+Encapsulates gsnogc.$(OBJ) in a gsnogc.dev module, to make it more sharable.
+(lib.mak)
+
+</pre><h3><a name="5.95_Utilities"></a>Utilities</h3><pre>
+
+Fixes problems:
+ - guilsinglleft and guilsinglright were misspelled.
+(lib/ps2ascii.ps)
+ - The ps2pdf script didn't handle the -I switch correctly. We fixed
+this by including the options twice, both before and after the automatically
+supplied options. (lib/ps2pdf, lib/ps2pdf.bat)
+
+Adds an install/uninstall program for Windows 9x, including optional
+generation of a self-extracting executable, written by Ghostgum Software Pty
+Ltd. This program is not actually used yet. (msvc32.mak, winint.mak,
+dwinst.*, dwsetup.*, dwuninst.*)
+
+Adds a new environment parameter to arch.h, ARCH_DIV_NEG_POS_TRUNCATES.
+(genarch.c)
+
+Adds a utility for N-up printing. (unixinst.mak, lib/gsnup.ps)
+
+Changes ps2pdf so that if showpage has ever been executed, any partial page
+after the last showpage is discarded rather than made into an additional
+page. This is consistent with printers, and correctly handles BeginPage
+procedures that draw backgrounds. (gdevpdf.c)
+
+</pre><h3><a name="5.95_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - The TIFF drivers could produce incorrectly sorted tag tables.
+(gdevtifs.c)
+ - The OS/2 PM driver had an incorrect #include. (gdevpm.c)
+ - Embedded Type 1 fonts that used seac didn't automatically include
+the constituent glyphs. (gdevpsd1.c)
+ - Embedded Type 1 fonts wrote the wrong font name in the first
+(comment) line. (gdevpsd1.c)
+ - Deleting elements from the AlwaysEmbed or NeverEmbed list could
+cause a memory access error. (gdevpsdp.c)
+ - The string and string array members of psdf_distiller_params were
+omitted from the GC descriptor, causing memory corruption. (gdevpsdf.h,
+gdevpsdf.c, gdevpsdp.c)
+ - When using "async" printing, the buffer device was destroyed too
+soon. (fix from Artifex) (gdevbmpa.c)
+
+Adds (partial) parsing for the new Acrobat Distiller 4.0 parameters, under
+#ifdef POST60. The put_params code isn't finished. (gdevpsdf.h,
+gdevpsdp.c)
+
+</pre><h3><a name="5.95_Platforms"></a>Platforms</h3><pre>
+
+Changes product to productfamily as the Windows registry key. (gp_wgetv.c)
+
+</pre><h3><a name="5.95_Fonts"></a>Fonts</h3><pre>
+
+Fixes problems:
+ - guilsinglleft and guilsinglright were misspelled in
+MacRomanEncoding and MacGlyphEncoding. (lib/gs_mro_e.ps)
+ - plusminus was misspelled in MacGlyphEncoding. (lib/gs_mgl_e.ps)
+ - braceleftbt was misspelled as bracelefttbt in the Symbol font.
+(fonts/s050000l.pfb) ****** NOT DISTRIBUTED YET ******
+ - euro was incorrectly included at position 240 in the Symbol
+encoding. (lib/gs_sym_e.ps)
+ - Zcaron and zcaron weren't included in WinAnsiEncoding (this is new
+for PDF 1.3). (lib/gs_wan_e.ps)
+ - Euro replaced currency in MacRomanEncoding. We had to change this
+back, even though the Mac does use code 219 for Euro, for compatibility with
+Adobe documentation. (lib/gs_mro_e.ps)
+ - TrueType fonts with more glyphencoding entries than glyphs could
+cause errors. (lib/gs_ttf.ps)
+
+Adds the Adobe Central European encoding. (lib/gs_ce_e.ps, unixinst.mak)
+
+Adds more tracing to the TrueType font loader. (lib/gs_ttf.ps)
+
+Adds the remaining PDF Encodings to the predefined set. (lib/gs_lgo_e.ps,
+lib/gs_lgx_e.ps, lib/gs_mex_e.ps, lib/gs_mgl_e.ps, lib/gs_mro_e.ps)
+
+</pre><h3><a name="5.95_PDF_writer"></a>PDF writer</h3><pre>
+
+Fixes problems:
+ - When printing an error message, a pointer/length string was
+incorrectly treated as a C string. (gdevpdfm.c)
+ - The treatment of text was completely broken by "improvements" made
+in 5.94. We think we've put things back to a state that at least isn't any
+worse than 5.93. (gdevpdfx.h, gdevpdff.c, gdevpdft.c)
+ - The test for whether a glyph was present in a glyph set was wrong,
+possibly causing an infinite loop. (This never happened, because the code
+was masked by other bugs.) (gdevpdft.c)
+ - Testing the PDF compatibility level didn't work correctly, because
+of float/double mismatches. (gdevpdfx.h, gdevpdfp.c)
+ - Embedded TrueType fonts were still written in binary even if
+ASCII85EncodePages was true. (gdevpdff.c)
+ - Embedded TrueType subsets didn't use Flags to indicate that they
+had a non-standard cmap. (gdevpdff.c)
+ - Contrary to the obvious reading of the PDF specification, it
+appears that the default encoding for embedded fonts, if no BaseEncoding is
+specified, is StandardEncoding, *not* the built-in encoding of the font
+itself; and that any differences from StandardEncoding must be listed
+explicitly. (gdevpdft.c)
+
+Adds parsing for the new Acrobat Distiller 4.0 parameters, under #ifdef
+POST60. (lib/gs_pdfwr.ps, gdevpdfx.h, gdevpdfp.c)
+
+Ensures that the Mac encodings are loaded when writing PDF. (devs.mak)
+
+Works around an Acrobat 3 bug: The only cmap table that works in TrueType
+fonts is format 0, which can only reference glyphs up to 255. Consequently,
+a TrueType font whose Encoding references glyphs above 255 cannot be
+embedded (as a font). (gdevpdft.c)
+
+Changes the default CompatibilityLevel from 1.3 to 1.2. The majority of
+users are running Acrobat 3. (gdevpdf.c)
+
+</pre><h3><a name="5.95_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - The T* operator was changed incorrectly to use the negative of the
+leading value. (lib/pdf_ops.ps)
+ - The Tz value scaled the X offset for Td and TD (which it
+shouldn't), occasionally causing strings to be displaced horizontally.
+(lib/pdf_ops.ps)
+ - sc[n]/SC[N] didn't work with 1-value color spaces, because the
+code incorrectly assumed the operand stack contained only the values on the
+PDF operand stack. (bug introduced by Annotation rendering in 5.94)
+(lib/pdf_base.ps, lib/pdf_draw.ps, lib/pdf_main.ps, lib/pdf_ops.ps)
+ - The HTP key in the graphics state caused an error if the
+interpreter didn't implement sethalftonephase. (lib/pdf_draw.ps)
+ - If there was no Names tree, invalid links (string Dest values)
+caused an error instead of being ignored. (lib/pdf_main.ps)
+ - An annotation with a Thread action caused an error.
+(lib/pdf_main.ps)
+
+Adds table entries, but not implementation, for the op and OPM keys in
+ExtGState dictionaries. (lib/pdf_draw.ps)
+
+Works around a bug in Adobe Acrobat Distiller 4.0 for Windows: it uses the
+value /Default with the BG, UCR, and TR keys in an ExtGState.
+(lib/pdf_draw.ps, lib/pdf_main.ps)
+
+Adds additional tracing for Functions. (lib/pdf_draw.ps)
+
+Implements the BG2, UCR2, and TR2 keys in ExtGStates. (lib/pdf_draw.ps)
+
+</pre><h3><a name="5.95_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - There was a (harmless) signed/unsigned mismatch. (imainarg.c)
+ - If build_gs_simple_font had to add any elements to the font
+dictionary, a temporary pointer to the CharStrings could become invalid,
+causing crashes or confusion. (zbfont.c)
+ - The check for known Encodings included some pseudo-Encodings.
+(zbfont.c)
+ - The error object wasn't reset to null before each call of the
+interpreter, possibly causing the garbage collector to mark it even if it no
+longer existed. (interp.c)
+
+Adds productfamily as a new predefined name, for the benefit of the Windows
+registry. (iinit.c)
+
+Changes the default color smoothness to 0.02 to match Adobe RIPs.
+(lib/gs_ll3.ps)
+
+Adds using the glyph_info procedure for Type 1 fonts, needed to fix the
+problem with seac and Type 1 embedded fonts. (zfont1.c)
+
+</pre><h3><a name="5.95_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - Memory devices that may execute RasterOp must be initialized with
+an allocator (for temporary bitmaps), but sometimes they weren't.
+(gdevdrop.c)
+ - The computation of colors_used for images could cause arithmetic
+exceptions and/or produce incorrect results. (fix from Artifex)
+(gxclimag.c)
+ - A dead variable was getting incremented in a loop. (Small
+performance bug only.) (gsfunc0.c)
+ - The cached is_monotonic value in a function head was incorrectly
+declared bool rather than int. (gsfunc.h)
+ - The clip operators didn't always recognize empty clipping regions:
+sometimes they retained a 1-pixel-wide region. (gxcpath.c)
+ - The bbox device could get into a recursion loop if it had a
+non-null target with a non-standard fill_path procedure. (gdevbbox.c)
+ - The procedure u32 was defined in two places. (gsutil.h,
+gdevpsdt.c, gsutil.c, gstype42.c)
+ - The DataSource member of a sampled function wasn't reported to the
+garbage collector. (gsfunc0.h, gsfunc0.c) ****** MUST DO THE SAME FOR
+SHADINGS ******
+ - All name-type parameters (device and other) were converted as
+strings rather than names. (gsparam.c)
+ - Using a mask Pattern with an anti-aliased device could make
+invalid memory accesses and cause a crash. (gxpcmap.c)
+ - math_.h was included unnecessarily. (gxfill.c, gxhint3.c)
+ - In a few places, (fixed-point) coordinates were truncated towards
+zero rather than taking the floor. (It's likely that this had no effect.)
+(gxfill.c, gxpcopy.c)
+ - The join and cap values weren't taken into account when dividing a
+stroked path into bands, possibly causing some caps or joins to be dropped
+if they fell exactly at band boundaries. (gxclpath.c)
+ - An arithmetic overflow in gx_adjust_if_empty could produce
+incorrect output. (gxfill.c)
+ - Because the bbox device used a Y-inverted coordinate system, it
+could produce incorrect results for out-of-bounds coordinates. (gdevbbox.c)
+ - The default font_info procedure didn't compute MISSING_WIDTH if
+IS_FIXED_WIDTH wasn't requested. (gsfont.c)
+ - space_params wasn't managed properly, causing problems if the
+device altered the default values. (fix from Artifex) (gdevprn.c)
+ - The Macintosh cmap table for embedded TrueType fonts was written
+incorrectly. (gdevpsdt.c)
+ - The OS/2 table for embedded TrueType fonts could be inconsistent
+with the cmap table. (gdevpsdt.c)
+ - In embedded subset TrueType fonts, loca entries beyond the last
+occupied glyph contained garbage. (gdevpsdt.c)
+ - Embedded TrueType subsets didn't include the components of
+composite glyphs. (gdevpsdf.h, gdevpsd1.c, gdevpsdf.c, gdevpsdt.c)
+
+Changes the is_monotonic procedure of Functions so that it reports the
+direction of monotonicity of each value independently. This allows a larger
+class of functions to be detected as monotonic. (gsfunc.h, gsfunc0.c,
+gsfunc3.c)
+
+Works around a bug in Fontographer that causes it to produce (or at least
+allow users to produce) Type 1 fonts using seac in which the side bearing of
+the accented character differs from the side bearing of the base glyph. The
+published Type 1 specification and Adobe's engineers agree that such fonts
+are invalid, but the authors of Fontographer don't seem to care (this is the
+4th Fontographer bug that we have had to patch around so far). (gxtype1.h,
+gstype1.c, gxtype1.c)
+
+Adds gs_productfamily, for the benefit of the Windows registry. (gscdefs.h,
+gscdef.c)
+
+Adds a glyph_info procedure for Type 1 fonts, needed to fix the problem with
+seac and Type 1 embedded fonts. (gxfont1.h, gxtype1.c)
+
+Adds a gs_resize_struct_array procedure that either allocates or resizes an
+object. We have wanted this for quite a while. (gsmemory.h, gsmemory.c)
+
+Adds the remaining PDF Encodings to the predefined set. Also adds string
+names for the "real" encodings. (gsccode.h)
+
+Adjusts the format of embedded TrueType fonts to be closer to that produced
+by Acrobat Distiller, in the hope of making Acrobat Reader accept them.
+(gdevpsdf.h, gdevpsdt.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.94"></a>Version 5.94 (beta) (9/30/99)</h2>
+
+<p>
+This is (intended to be) the last beta candidate for the 6.0 release. Most
+changes other than added documentation are bug fixes. In order to address a
+last-minute problem report, we implemented a subset of Annotation rendering
+for PDF files.
+
+<p>
+At the request of the Free Software Foundation, we removed support for GNU
+readline from the Aladdin Ghostscript fileset. See <a
+href="Make.htm#GNU_readline">here</a> for more information.
+
+<p>
+We suspect that Acrobat's bugs and limitations still prevent embedded
+TrueType fonts in files created by the pdfwrite device from working
+properly, but we have neither the time nor the means to test this properly.
+
+<h3><a name="5.94_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Procedures)
+ - For OpenVMS with MMK or MMS, the third-party libraries are now
+located in [.&lt;lib&gt;] rather than [-.&lt;lib&gt;].
+ - The OpenVMS makefiles now select the same set of devices as the
+Unix makefiles.
+ - The MS Windows and MS-DOS default installation directory is now
+c:\Aladdin\gs#.# rather than c:\gs.
+ - All top-level makefiles now need a definition of BUILD_TIME_GS.
+(Drivers)
+ - The cljet5 driver is renamed cljet5pr; there is a new cljet5
+driver that doesn't attempt (and fail) to handle page rotation.
+(Interpreter)
+ - .getiodevice may return null.
+(Library)
+ - IODevices may now have a null name.
+
+</pre><h3><a name="5.94_Documentation"></a>Documentation</h3><pre>
+
+Fixes problems:
+ - The documentation of font searching was still wrong in both
+places. (doc/Fonts.htm, doc/Use.htm)
+
+Notes that certain CodeWarrior code generation options produce incorrect
+code. (doc/Make.htm)
+
+Removes an inaccurate and obsolete comment. (lib/pdf_font.ps)
+
+Notes that newer versions of the SGI compiler use a different switch for
+setting the optimization limit. (doc/Make.htm)
+
+Notes that there may be code generation bugs in MSVC5 and later.
+(doc/Make.htm)
+
+Documents the new Fontmap.SGI file. (doc/Use.htm)
+
+Updates the documentation on installing Ghostscript on MS Windows.
+(doc/Install.htm)
+
+Documents the removal of the GNU readline interface. (doc/Current.htm,
+doc/Make.htm)
+
+</pre><h3><a name="5.94_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - The instcopy script, supposed to handle incompatibilities between
+Unix `install' commands, didn't work. (instcopy, unixinst.mak)
+ - The Windows makefiles had an extra occurrence of `.' at the
+beginning of the default search path. (bcwin32.mak, msvc32.mak,
+msvclib.mak, watc*.mak)
+ - The OpenVMS makefile didn't automatically create the bin and obj
+directories if needed. (openvms.mak)
+
+Changes the OpenVMS MMK/MMS makefile to expect the third-party libraries in
+a subdirectory of the current directory, rather than a subdirectory of the
+parent. This makes it compatible with all the other makefiles.
+(openvms.mmk)
+
+Changes the OpenVMS makefiles to select the same set of devices as the Unix
+makefiles. (openvms.mak, openvms.mmk, unixansi.mak)
+
+Changes the Windows and OS/2 default search paths to match the new
+convention of installation rooted at c:\Aladdin. (bcwin32.mak, msvc32.mak,
+msvclib.mak, os2.mak, watc.mak, watclib.mak, watcw32.mak)
+
+</pre><h3><a name="5.94_Utilities"></a>Utilities</h3><pre>
+
+Fixes problems:
+ - The Type 1/2 CharString printer didn't handle undefined opcodes
+correctly. (lib/type1ops.ps)
+ - There was no Unix script for pf2afm. (lib/pf2afm)
+ - The Type 1/2 font printing utilities didn't default lenIV to -1
+for Type 2, and didn't handle lenIV = -1 correctly in some places.
+(lib/type1ops.ps)
+ - The font2c utility used the version of font2c.ps from whatever
+existing Ghostscript executable was in the search path. Fixing this
+required adding a new parameter in all top-level makefiles, BUILD_TIME_GS.
+(cfonts.mak, bcwin32.mak, dvx-gcc.mak, msvc32.mak, openvms.mak, openvms.mmk,
+os2.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak, watc.mak, watcw32.mak)
+ - The pfbtopfa usage message was incorrect. (lib/pfbtopfa.ps)
+
+</pre><h3><a name="5.94_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - The pswrite driver didn't reset the clipping path when writing
+low-level images, possibly causing output to be clipped incorrectly.
+(gdevps.c)
+ - The PNG drivers implicitly declared png_init_io. Fixing this is
+only possible in libpng versions 1.0.3 and later. (gdevpng.c)
+ - The cljet5 driver (now cljet5pr) set rotated = true if the page
+was rotated, but didn't set it to false if the page wasn't rotated.
+(gdevclj.c)
+ - Embedded Type 1 fonts didn't include any FontInfo elements.
+(gdevpsd1.c)
+ - Specifying the DCTEncode filter for compressing images caused a
+crash. This problem is hard to fix correctly because of the complicated
+initialization requirements of the JPEG encoder. We patched around it by
+substituting FlateEncode (when available) for DCTEncode. (gdevpsdi.c)
+
+Renames the cljet5 driver, which has special (and incorrect) hacks to handle
+page rotation for the PCL interpreter, as cljet5pr; adds a new cljet5 driver
+without the hacks. (gdevclj.c)
+
+</pre><h3><a name="5.94_Platforms"></a>Platforms</h3><pre>
+
+Fixes problems:
+ - On MS Windows and OS/2 systems, the wstdio pseudo-IODevice showed
+up as an instance of the IODevice resource category, causing problems.
+(gp_msio.c, gp_os2.c)
+
+Adds a set of XBM/XPM icons in 4 sizes, contributed by Gintautas Grigelionis
+(eragigr@ki.ericsson.se). (lib/gs*.xbm, lib/gs*.xpm, unixinst.mak)
+
+Brings the Windows and OS/2 code up to date, fixing some minor problems.
+(gdevpm.c, gp_os2.c, gsos2.rc, gspmdrv.rc, os2.mak, pcwin.mak)
+
+</pre><h3><a name="5.94_Fonts"></a>Fonts</h3><pre>
+
+Fixes problems:
+ - The font directory scanner (FONTPATH) didn't recognize TrueType
+fonts tagged as 'true' rather than 0x00010000. (lib/gs_ttf.ps)
+
+Changes the TrueType font loader to use ISOLatin1Encoding for constructing
+the CharStrings if there is a Microsoft Unicode cmap and no glyph names in
+the post table. This seems like a hack, but we aren't sure what the right
+approach would be. (lib/gs_ttf.ps)
+
+Adds a Fontmap for SGI IRIX. This just comments out those fonts that are
+provided by DPS. (lib/Fontmap.SGI)
+
+</pre><h3><a name="5.94_PDF_writer"></a>PDF writer</h3><pre>
+
+Fixes problems:
+ - Writing Patterns could cause a memory access error. (bug
+introduced recently) (gdevpdfi.c)
+ - Filling with a pattern didn't reset the clipping path, possibly
+causing output to be clipped incorrectly. (gdevpdfi.c)
+ - Patterns weren't scaled correctly. (gdevpdfi.c)
+ - The data for large Patterns could exceed Acrobat Reader's limit on
+the length of a string. (gdevpdfi.c)
+ - copy_color did an extra gsave and concat. (gdevpdfi.c)
+ - Repeated color images weren't detected (performance bug only).
+(gdevpdfi.c)
+ - Names including control characters or spaces produced invalid
+output. (gdevpdfx.h, gdevpdfu.c)
+ - A matrix multiply was in the wrong order, causing fonts with
+non-zero translation in the FontMatrix to render at incorrect coordinates
+(sometimes off the page).
+ - If a font had one of the 14 standard names but had some characters
+defined by PostScript procedures, the output file would be invalid.
+(gdevpdft.c)
+ - The graphics state line parameters were kept in two different
+copies, causing bookkeeping errors. (gdevpdfx.h, gdevpdf.c, gdevpdfd.c,
+gdevpdfu.c)
+ - If a page's BeginPage procedure did anything other than erase the
+page to white, the resulting PDF file was invalid. (gdevpdf.c)
+ - Articles with the same title weren't merged properly.
+(gdevpdfm.c)
+ - The Threads element of the catalog wasn't an indirect object.
+(gdevpdf.c)
+ - Thread actions incorrectly converted the destination (thread
+title) to a name, rather than leaving it as a string. (gdevpdfm.c)
+ - Fonts with the same name as the built-in ones, but not the
+standard definitions, produced possibly incorrect output. (gdevpdff.c)
+ - The writer didn't recognize attempts to use Encodings with the
+standard fonts that mentioned characters not present in the font's glyph
+set. (gdevpdft.c)
+
+Ensures that the WinAnsiEncoding is loaded when writing PDF. (devs.mak)
+
+</pre><h3><a name="5.94_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - The default (identity) CMap didn't map CID 0 to glyph 0.
+(pdf_fonts.ps)
+ - TrueType fonts with an explicit Encoding didn't work properly.
+(lib/gs_ttf.ps)
+ - If an embedded Type 1 font executed definefont more than once,
+the wrong thing would happen. (lib/pdf_font.ps)
+ - The T* operator used the negative of the leading value.
+(lib/pdf_ops.ps)
+
+Implements a subset of Annotation rendering: only Widget annotations, only
+Normal appearance, only S and D borders, no rounded-corner borders. We did
+this at the very last minute before the release, in order to respond to a
+bug report, and it probably has some bugs. (lib/pdf_draw.ps,
+lib/pdf_main.ps)
+
+</pre><h3><a name="5.94_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - If an input buffer boundary fell at exactly the wrong place, an
+image whose input was coming from a stream could fail to read the stream EOD
+marker. (This is quite an old bug.) (zimage.c)
+ - On MS Windows and OS/2 systems, the wstdio pseudo-IODevice showed
+up as an instance of the IODevice resource category, causing problems.
+(lib/gs_res.ps, ziodev.c)
+ - errorinfo in $error was undefined, rather than null, initially and
+after errors that didn't set it deliberately. (lib/gs_init.ps)
+ - The InkParams resource category was defined even in systems that
+didn't support in-RIP trapping. (lib/gs_ll3.ps, lib/gs_res.ps,
+lib/gs_trap.ps)
+ - CID fonts with 0-length data caused an error. (lib/gs_cidfn.ps)
+ - Type 10 halftone dictionaries were broken -- perhaps they never
+had worked. (lib/gs_ll3.ps)
+
+Makes FontInfo entries available through the extended font API, needed to
+allow embedded Type 1 fonts to include those entries. (zfont1.c)
+
+Makes it possible to determine whether the current file is a resource file,
+needed to allow distinguishing between built-in and input-embedded fonts.
+(lib/gs_ccfnt.ps, lib/gs_fonts.ps, lib/gs_init.ps, lib/gs_res.ps,
+lib/gs_type1.ps, zfont.c)
+
+Moves support for GNU readline from the main Ghostscript fileset to the
+GNU-specific fileset. (unix-gcc.mak, int.mak, gp_gnrdl.c =>
+src/gnu/gp_gnrdl.c, gnu/src/gnudevs.mak)
+
+</pre><h3><a name="5.94_Streams"></a>Streams</h3><pre>
+
+Fixes problems:
+ - The CCITTFaxDecode filter didn't correctly handle the case where
+the last code of a 1-D row was a black code and occurred less than 7 or 8
+bits before the end of the input stream. (We thought we fixed this in 5.86,
+but we missed one case.) (scfd.c)
+ - If an input buffer boundary fell at exactly the wrong place, an
+image whose input was coming from a stream could fail to read the stream EOD
+marker. (This is quite an old bug.) Fixing this involved a possibly risky
+change to the definition of sbuf_min_left and the already fragile logic in
+sreadbuf: the fix does solve this problem, but we aren't at all certain it
+didn't introduce new ones. (stream.h, stream.c)
+
+</pre><h3><a name="5.94_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - The default implementation of copy_tile didn't pass the bitmap id
+for complete tiles, missing potential optimizations (performance bug only).
+(gdevdbit.c)
+ - The patch edges of ShadingType 7 shadings were ordered
+incorrectly, producing incorrect output in some cases where the surface
+folds over itself. (gxshade6.c)
+ - Flushing internal buffers when rendering an image didn't clip the
+flushed data, producing incorrect output. (gxidata.c)
+ - Non-zero data_x values for banded images produced incorrect band
+list data. (It's astounding that this problem hasn't shown up before.)
+(gxclimag.c)
+ - Banded images rotated by 90 degrees could produce "seams" or
+garbage if they crossed band boundaries. (This is at least the third time
+we have "fixed" this problem.) (gxclimag.c, gxifast.c)
+ - Circles or ellipses defined by pairs of 180-degree arcs produced
+incorrect output when banding. (gxclpath.c, gxclrast.c)
+ - setgray et al simply cleared the Pattern pointer in the client
+color rather than adjusting its reference count. (gscolor.c, gscolor1.c)
+ - The saved graphics state for bitmap/pixmap patterns contained a
+reference to the Pattern color, causing Patterns to be retained when they
+shouldn't be and causing unwanted recursion when freeing them. (gsptype1.c)
+ - Patterns containing halftoned CMYK colors rendered as all black.
+(bug probably introduced in 5.6x) (gxcht.c)
+ - Because of a typo, CMYK halftoning with only a single plane could
+put too much yellow into the output. This appears to be quite an old bug.
+(gxdither.c)
+ - The error code from running out of band list memory wasn't
+propagated if the condition was detected in cmd_put_drawing_color, causing
+low-memory recovery not to be invoked. (gxclpath.c)
+ - (Same error code problem) in clist_change_tile. (gxclbits.c)
+
+Adds more font attributes to the set available through a standard API.
+(gxfont.h)
+
+Adds more statistics to the filling algorithm. (gxfill.c)
+
+Adds an is_resource flag to fonts, to indicate that they originated from a
+resource rather than being embedded in an input file. (gxfont.h, gsfont.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.93"></a>Version 5.93 (beta) (9/11/99)</h2>
+
+<p>
+This is the next candidate for the 6.0 release. As with 5.92, all changes
+other than added documentation are bug fixes.
+
+<h3><a name="5.93_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Library)
+ - Every stream whose state includes any GC-traceable pointers must
+now have a set_defaults procedure that clears those pointers.
+
+</pre><h3><a name="5.93_Documentation"></a>Documentation</h3><pre>
+
+Fixes problems:
+ - There was an extra /ul tag. (doc/Release.htm)
+ - Fontmap.GS wasn't mentioned as needing to be installed.
+(doc/Install.htm)
+ - Some documentation for the handling of seac was incorrect.
+(gxtype1.c)
+
+Removes references to installbsd, which are no longer relevant.
+(doc/Install.htm)
+
+Updates the information on building with NeXTSTEP. (doc/Make.htm)
+
+</pre><h3><a name="5.93_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - The install command had unpredictably different syntax from one
+"standard" Unix system to another, causing `make install' to fail. We
+replaced the install command with our own script. (instcopy, dvx-gcc.mak,
+unix-gcc.mak, unixansi.mak, unixtrad.mak)
+
+</pre><h3><a name="5.93_Utilities"></a>Utilities</h3><pre>
+
+Fixes problems:
+ - pcharstr.ps loaded type1ops.ps with run rather than runlibfile,
+causing an error. (lib/pcharstr.ps)
+
+</pre><h3><a name="5.93_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - Attempting to embed a font whose Encoding included characters not
+present in the font produced invalid output. (gdevpsd1.c)
+ - Allocating a stream state didn't (automatically) clear all its
+internal pointers, possibly causing GC memory access errors. (gdevpsds.c)
+ - An #include of string_.h should have been memory_.h. (gdevpsdf.c)
+
+Disables compression for very small images. (gdevpsdi.c)
+
+</pre><h3><a name="5.93_Platforms"></a>Platforms</h3><pre>
+
+Fixes problems:
+ - Compiling gp_msio with MSVC's /MD switch caused a compile-time
+error. (gp_msio.c)
+
+</pre><h3><a name="5.93_PDF_writer"></a>PDF writer</h3><pre>
+
+Fixes problems:
+ - A bookkeeping object was allocated with the wrong allocator,
+possibly causing access errors or garbage output. (gdevpdfu.c)
+ - Certain Patterns weren't treated as such, leading to very large
+output files. (gdevpdfi.c)
+ - If one of the base 14 fonts had a non-standard FontMatrix, the
+output disregarded this fact. This could cause double obliquing.
+(gdevpdfx.h, gdevpdff.c, gdevpdft.c)
+ - Articles never got an object ID assigned. (bug introduced in
+5.91) (gdevpdfm.c)
+
+</pre><h3><a name="5.93_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Changes the PDF interpreter to allow abbreviated filter names like /Fl for
+all streams, not just in-line images. This directly contradicts the
+published PDF specification, but Acrobat Reader allows it.
+(lib/pdf_base.ps)
+
+</pre><h3><a name="5.93_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - Compiled fonts were broken by the introduction of i_ctx_p.
+(lib/font2c.ps, ccfont.h, iccfont.c)
+ - Allocating a stream state didn't (automatically) clear all its
+internal pointers, possibly causing GC memory access errors. (zfproc.c)
+
+</pre><h3><a name="5.93_Streams"></a>Streams</h3><pre>
+
+Fixes problems:
+ - Allocating a stream state didn't (automatically) clear all its
+internal pointers, possibly causing GC memory access errors. (scfx.h,
+slzwx.h, spngpx.h, strimpl.h, sbwbs.c, sdctc.c, seexec.c, sfilter1.c,
+siscale.c, szlibc.c)
+ - The PNG predictor streams could fail to process some data at the
+end of the input. (spngp.c)
+
+</pre><h3><a name="5.93_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - Some obsolete definitions for Turbo C could produce references to
+an undefined procedure (setmem) at link time. (memory_.h, string_.h)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.92"></a>Version 5.92 (beta) (9/2/99)</h2>
+
+<p>
+This is the next candidate for the 6.0 release. All changes other than
+added documentation are bug fixes.
+
+<h3><a name="5.92_Documentation"></a>Documentation</h3><pre>
+
+Fixes problems:
+ - The News for 5.91 didn't include a summary. (doc/News.htm)
+ - The documentation for Microsoft platforms didn't mention that you
+must add the Ghostscript bin and lib directories to the PATH. (doc/Use.htm)
+
+Adds a file describing Aladdin's process for building, testing, and
+releasing Ghostscript. (doc/Readme.htm, doc/Release.htm)
+
+</pre><h3><a name="5.92_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - Fontmap.GS is now required, but wasn't installed. (unixinst.mak)
+ - A couple of documentation files weren't installed. (unixinst.mak)
+
+</pre><h3><a name="5.92_Utilities"></a>Utilities</h3><pre>
+
+Fixes problems:
+ - The ps2pdf script for MS Windows used the wrong name for the
+executable. (lib/ps2pdf.bat)
+
+</pre><h3><a name="5.92_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - An uninitialized variable annoyed some compilers. (gdevpsdt.c)
+ - The PostScript-writing driver used the wrong allocator, causing
+possible memory access errors. (gdevps.c)
+ - The PostScript-writing driver didn't clear a pointer, causing
+possible GC errors. (gdevps.c)
+ - The PostScript-writing driver didn't have a correct GC descriptor,
+causing pointers to be corrupted. (gdevpsdf.h, gdevps.c, gdevpsdf.c)
+ - Embedded Type 1 fonts unnecessarily filled individual Encoding
+slots with /.notdef. (gdevpsd1.c)
+ - A large constant produced warnings on some compilers. (gdevpsdt.c)
+
+</pre><h3><a name="5.92_PDF_writer"></a>PDF writer</h3><pre>
+
+Fixes problems:
+ - Once again, gcc didn't complain about an ANSI-illegal extra
+semicolon in a declaration list. (gdevpdfo.h)
+ - Adds a cast to work around the fact that some compilers declare
+the return type of memchr as char * rather than void *. (gdevpdfr.c)
+ - The bookkeeping for whether a font had been written and freed was
+inverted, causing some fonts to be written many times and other fonts not to
+be written at all. (gdevpdf.c)
+
+</pre><h3><a name="5.92_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - More places needed workarounds for the alignment aliasing gcc bug.
+The bug only occurs if a pointer variable is dereferenced through a cast to
+a stricter alignment and then dereferenced later in its original form, so it
+doesn't affect very many places. (igc.c, igcref.c, isave.c)
+
+</pre><h3><a name="5.92_Streams"></a>Streams</h3><pre>
+
+Makes the stream GC descriptor public for subclassing. (stream.h, stream.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.91"></a>Version 5.91 (beta) (8/30/99)</h2>
+
+<p>
+This is the next beta for 6.0. It includes a major rewrite of the parts of
+the PDF writer that deal with resources and pdfmarks, as well as the usual
+bug fixes. There are still problems with embedded fonts, both TrueType
+(which sometimes don't show up at all) and Type 1 (which sometimes confuse
+Acrobat Reader 3).
+
+<h3><a name="5.91_Documentation"></a>Documentation</h3><pre>
+
+Fixes problems:
+ - An HTML tag was misplaced in the News file. (doc/News.htm)
+
+Notes that the Solaris FONTPATH scanning problem may be fixed.
+(doc/Use.htm)
+
+</pre><h3><a name="5.91_Utilities"></a>Utilities</h3><pre>
+
+Fixes problems:
+ - Many of the margin and width computations in ps2epsi.ps (not
+written by Aladdin) were wrong -- off by 1. It's only because the bugs
+masked each other or cancelled each other out that the code didn't produce
+errors more of the time. (lib/ps2epsi.ps)
+
+</pre><h3><a name="5.91_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - Font subset glyphs weren't sorted early enough, causing Type 1
+embedded fonts to be written with inconsistent lengths. (gdevpsd1.c)
+
+Changes the BMP drivers so that they set the resolution in the BMP header
+rather than leaving it at 0. This solves some problems reported by users,
+but may cause others. (gdevbmpc.c)
+
+</pre><h3><a name="5.91_Platforms"></a>Platforms</h3><pre>
+
+Fixes problems:
+ - A change made in 5.90 was incorrect (we couldn't test it, because
+MS Windows and OS/2 systems can't be used over a network). (gp_msio.c,
+gp_os2.c)
+
+Adds some conditionalization to work around a bug in some recent versions of
+gcc/egcs. (stdpre.h, interp.c)
+
+</pre><h3><a name="5.91_Fonts"></a>Fonts</h3><pre>
+
+Fixes problems:
+ - If the extension of a font file name on GS_FONTPATH included any
+upper-case characters, the font would not be found. (lib/gs_fonts.ps)
+
+Allows fontmaps to contain &lt;string&gt; run or .runlibfile, to get rid of the
+Fontmap -&gt; Fontmap.GS link that VMS can't handle. (lib/gs_fonts.ps)
+
+</pre><h3><a name="5.91_PDF_writer"></a>PDF writer</h3><pre>
+
+Fixes problems:
+ - Very long arguments for pdfmark caused an ioerror, because the
+buffer used for converting them was fixed-length. (lib/gs_pdfwr.ps)
+ - pdfmarks couldn't refer to objects that hadn't been defined yet.
+(gdevpdfx.h, gdevpdfo.c)
+ - When a DOCVIEW pdfmark added an OpenAction key to the Catalog,
+it omitted the / before the name. (gdevpdfm.c)
+ - Font resources could be written in the middle of a page contents
+stream. (bug introduced in 5.90) (gdevpdff.c, gdevpdfu.c)
+ - As usual, there were some signed/unsigned char * mismatches that
+gcc didn't detect. (gdevpdff.c, gdevpdfm.c, gdevpdfo.c)
+ - Fonts used on a page but freed before the end of the page were
+omitted from the page's resource dictionary. (gdevpdfx.h, gdevpdf.c,
+gdevpdff.c, gdevpdft.c)
+ - /D or /Dest keys in Action pdfmark dictionaries dropped the first
+character of their value. (gdevpdfm.c)
+ - If a pdfmark added annotations to a page after the end of that
+page had been reached, those annotations would be lost. (gdevpdf.c)
+ - ANN, LNK, DEST, and PS pdfmarks ignored the object name, if any.
+(Only OBJ and BP processed the name.) Unfortunately, fixing this required a
+complete overhaul of the way that resources and PDF objects were represented
+internally. The result is both simpler and more general, but it involved a
+major upheaval in the PDF writer code. (lib/gs_pdfwr.ps, gdevpdfo.h,
+gdevpdfx.h, gdevpdf.c, gdevpdff.c, gdevpdfi.c, gdevpdfm.c, gdevpdfo.c,
+gdevpdfr.c, gdevpdft.c, gdevpdfu.c)
+ - EP pdfmarks didn't close any open text context. (gdevpdfm.c)
+
+Adds debugging code to check the consistency of the embedded Type 1 font
+writer. (gdevpdff.c)
+
+Makes /A and /F at the top level of an annotation or outline pdfmark
+equivalent to /Action and /File respectively. See the code for more
+information. (gdevpdfm.c)
+
+</pre><h3><a name="5.91_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - Degenerate Bezier curves could cause a division by zero.
+(gxpcopy.c)
+ - Some macros used in non-FPU configurations were missing some
+needed uses of const, and in one case an additional cast. (gxfarith.h,
+gxfixed.h)
+
+Changes the discard macro to upper-case. (stdpre.h)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.90"></a>Version 5.90 (beta) (8/20/99)</h2>
+
+<p>
+This is the first real candidate for the 6.0 release. It does not fix all
+known bugs, but it includes all planned functionality. New in this fileset:
+<ul>
+<li> - FunctionType 4 for PDF files.
+<li> - Alternate printer images for PDF files (-dUsePrinterImages
+ switch).
+<li> - pdfwrite support for PDF "Cos objects" (without compression for
+ streams).
+<li> - pdfwrite support for graphics objects named with BP/EP/SP
+ (without compression for the object definition).
+<li> - pdfwrite font subsetting and embedded TrueType fonts.
+</ul>
+
+<h3><a name="5.90_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Interpreter)
+ - ref_stack_init now takes an additional argument.
+ - no_time_slice_proc is removed -- use 0 instead.
+(Library)
+ - Notification client procedures and the gs_notify_ procedures
+take different arguments.
+ - The common part of a gs_function_t structure has changed.
+ - gs_text_enum_init now returns a value that can indicate an error.
+ - The font font_info procedure now takes an additional argument.
+ - The IODevice open_device procedure is now defined as returning
+0 or 1 under specific circumstances.
+ - gxp1fill.h is renamed gxp1impl.h.
+ - Allocators now have an additional procedure they must implement,
+and a state member they must initialize.
+ - Most of the gs..basic.. structure definition macros have been
+renamed. The ptrs1_stringsN structure definition macros are removed.
+ - Implementations of the text API now must provide a resync
+procedure rather than a restart procedure.
+
+</pre><h3><a name="5.90_Documentation"></a>Documentation</h3><pre>
+
+Documents the new -dUsePrinterImages switch, and the expanded meaning of
+-Z~. (doc/Use.htm)
+
+Updates FSF's address in documentation. (lib/Fontmap.GS, lib/Fontmap.Sol,
+gdevcd8.c)
+
+Brings the PDF writer (ps2pdf) documentation up to date. (doc/Ps2pdf.htm)
+
+Updates the current-release documentation. (doc/Current.htm,
+doc/Readme.htm)
+
+Updates the problem-reporting procedure for contributed drivers, and some
+other new-user information. (doc/New-user.htm)
+
+</pre><h3><a name="5.90_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - Because of a typo, the file gs_mgl_e.ps wasn't installed (on Unix
+systems) by 'make install'. (unixinst.mak)
+ - The .dev files for drivers didn't depend on devs.mak. (devs.mak)
+ - The X driver didn't include a needed dependency on the bbox
+device. (devs.mak)
+
+Incorporates the pdfmin package into the pdf package, since pdfmin was only
+provided for very small-memory environments and is no longer useful.
+(int.mak)
+
+Adds additional prototype-checking switches, which are important on 64-bit
+platforms and useful on all platforms, to the gcc compilation line.
+(unix-gcc.mak)
+
+</pre><h3><a name="5.90_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - A backquote was misplaced in the Unix ps2pdf script. (lib/ps2pdf)
+ - Some example files didn't have %! headers. (examples/alphabet.ps,
+examples/waterfal.ps)
+ - ansi2knr didn't handle preprocessor directives within a function
+header. (ansi2knr.c)
+
+Cleans up some minor compiler complaints. (genarch.c, genconf.c, echogs.c)
+
+</pre><h3><a name="5.90_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The PostScript writer sometimes failed to reset the clip path,
+causing parts of the output to be omitted or to appear incorrectly.
+(gdevvec.c)
+ - There was a type mismatch in a conditional. (gdevxini.c)
+ - A constant array wasn't declared as static. (gdevpsdt.c)
+ - Once again, there were some signed / unsigned char mismatches that
+gcc apparently can't be forced to detect. (gdevpsdt.c)
+ - The alternative X drivers didn't have GC descriptors, which could
+lead to memory corruption. (gdevxalt.c)
+ - The alternative X drivers didn't handle the closing of the
+underlying X driver correctly, leading to a dangling pointer. (gdevxalt.c)
+ - Font subsetting didn't eliminate duplicate glyphs (glyphs
+referenced more than once from the Encoding vector.) (gdevpsd1.c,
+gdevpsdt.c)
+ - Type 1 font subsetting didn't ensure the presence of .notdef.
+(gdevpsd1.c)
+ - The embedded TrueType font writer wrote all 16-bit values
+incorrectly. This could explain a lot! (gdevpsdt.c)
+
+Cleans up public functions with no previous prototype. (gdevtfax.h,
+gdevx.h, gdevdfax.c, gdevtfax.c, gdevx.c, gdevxini.c, gdevxxf.c)
+
+Adds some procedures to support font subsetting. (gdevpsdf.h, gdevpsdf.c)
+
+Adds an alternate font name for writing TrueType fonts. (gdevpsdt.c)
+
+Makes the TrueType font writer generate an OS/2 table, a Macintosh cmap, and
+a name table (for the font name), as well as a Windows cmap and post, if
+necessary. (gdevpsdf.h, gdevpsdt.c)
+
+</pre><h3><a name="5.90_Platforms"></a>Platforms</h3><pre>
+
+Updates a couple of clients for the change in the IODevice open_device
+procedure, eliminating some undesirable externs. (gp_msio.c, gp_os2.c)
+
+</pre><h3><a name="5.90_Fonts"></a>Fonts</h3><pre>
+
+Adds OS/2 and maxp to the list of tables that must be preserved when loading
+TrueType fonts. (lib/gs_ttf.ps)
+
+Registers the complete lists of glyphs in the Adobe Latin fonts as
+pseudo-encodings. (lib/gs_lgo_e.ps, lib/gs_lgx_e.ps, unixinst.mak)
+
+</pre><h3><a name="5.90_PDF_writer"></a>PDF writer</h3><pre>
+
+Fixes bugs:
+ - One built-in font was sometimes substituted for another.
+(gdevpdff.c)
+ - Use of composite fonts often produced a rangecheck error.
+(gdevpdft.c)
+ - The structures for named objects were freed twice. (gdevpdfx.h,
+gdevpdf.c, gdevpdfo.c)
+ - The code to avoid writing a blank between a Td command and
+following text was fragile and still incorrect after being "fixed" twice.
+We removed this minor optimization, at a small cost in file size when not
+compressing. (gdevpdft.c)
+ - No Names tree was generated for named destinations specified as
+strings. Rather than do this, we now convert string destinations to names.
+This doesn't scale up well, but it is simple and also is compatible with all
+PDF versions from 1.1 on. (gdevpdfm.c)
+ - Fonts that define characters incrementally, such as the TrueType
+fonts written by some versions of the AdobePS Windows driver, could omit
+characters if embedded. Fixing this required delaying writing out fonts
+until the font was about to be freed or the writer was closed. (gdevpdfx.h,
+gdevpdff.c, gdevpdft.c)
+
+Cleans up public functions with no previous prototype. (gdevpdfx.h,
+gdevpdf.c, gdevpdfm.c)
+
+Updates client code for the change in gs_text_enum_init. (gdevpdft.c)
+
+Makes some changes towards handling show operations that must be split up
+internally into multiple operations using different fonts. (gdevpdfx.h,
+gdevpdff.c, gdevpdft.c)
+
+Implements the PUT pdfmark for the built-in objects (Catalog, DocInfo,
+Page<#>, ThisPage, PrevPage, NextPage). This required deferring writing out
+page objects until the end of the document. (lib/gs_pdfwr.ps, gdevpdfx.h,
+gdevpdf.c, gdevpdff.c, gdevpdfm.c, gdevpdfo.c, gdevpdfu.c)
+
+Adds table entries, but not parsing, checking, or functionality, for the new
+Acrobat 4 pdfmarks related to document logical structure. (gdevpdfm.c)
+
+Implements stream-type Cos objects. (lib/gs_pdfwr.ps, gdevpdfx.h,
+gdevpdf.c, gdevpdfm.c, gdevpdfo.c, gdevpdfp.c, gdevpdfu.c)
+
+Implements BP/EP/SP pdfmarks. (gdevpdfx.h, gdevpdf.c, gdevpdfi.c,
+gdevpdfm.c)
+
+Changes enumeration and #defined names to upper case, and adds _t to type
+names. (gdevpdfx.h, gdevpdf*.c)
+
+Adds an OS/2 table for embedded fonts if missing. (gdevpdff.c)
+
+Makes the allocator for the PDF device's internal structures be the stable
+allocator of the device's allocator, not the C heap. This required
+correcting a number of GC descriptors. (gdevpdfx.h, gdevpdf.c, gdevpdfu.c)
+
+Replaces the text restart procedure with the new resync procedure.
+(gdevpdft.c)
+
+</pre><h3><a name="5.90_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - Failure to find a font in the Resources dictionary signalled an
+/undefinedfont error (which does not exist) rather than /invalidfont.
+(lib/pdf_font.ps)
+
+Implements FunctionType 4 functions. (lib/pdf_draw.ps, zfunc4.c)
+
+Implements the -dUsePrinterImages switch to use "alternate" printer images
+when rendering. (lib/pdf_draw.ps)
+
+</pre><h3><a name="5.90_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - Some pointers were declared as ref * that actually could be
+ref_packed *, potentially confusing compilers that follow the new, stricter
+ANSI C rules about alignment aliasing. (idebug.h, idebug.c, igc.c,
+igcref.c, zmisc.c)
+ - cshow didn't restore the root font after executing the procedure,
+producing incorrect results if the procedure did a setfont. (ichar.h,
+zcfont.c, zchar.c)
+ - A needed const-breaking cast was omitted. (zmisc.c)
+ - The memory validator could cause an unaligned access. (ilocate.c)
+ - restore could free parts of the stacks that were still in use. We
+fixed this long-standing problem using the new concept of stable allocators.
+(interp.c)
+
+Moves the implementation of the abs operator to C, required for FunctionType
+4 support. (lib/gs_init.ps, zarith.c)
+
+Makes more operator procedures public, required for FunctionType 4 support.
+(zarith.c, zmath.c, zrelbit.c, ztype.c)
+
+Adds an additional parameter to ref_stack_init, to allow creating a
+temporary stack without having an allocator. (istkparm.h, istack.h,
+interp.c, istack.c)
+
+Cleans up public functions with no previous prototype. (files.h, ichar.h,
+icstate.h, ifilter2.h, ifrpred.h, ifwpred.h, igcstr.h, iimage.h, iimage2.h,
+iinit.h, imain.h, interp.h, iscanbin.h, ivmem2.h, oparc.h, opextern.h,
+icontext.c, igc.c, iinit.c, imain.c, inobtokn.c, interp.c, iscan.c,
+iscanbin.c, zchar.c, zcharout.c, zcolor.c, zcolor1.c, zcontrol.c, zdevice.c,
+zdpnext.c, zdps.c, zfdecode.c, zfile.c, zfilter2.c, zfont0.c, zfunc0.c,
+zfunc3.c, zfzlib.c, zgeneric.c, zht1.c, zht2.c, zimage.c, zimage2.c,
+ziodev.c, zmath.c, zpath1.c, zupath.c, zusparam.c, zvmem.c, zvmem2.c)
+
+Updates client code for the tweak in the definition of the IODevice
+open_device procedure. (ziodev.c)
+
+Implements stable local and global VM allocators. This required changing
+more places than we would have liked. (ialloc.c, igc.c, ilocate.c, imain.c,
+interp.c, ireclaim.c, isave.c, zcontext.c)
+
+Removes the global member of gs_ref_memory_t, since it isn't used.
+(gxalloc.h, ialloc.c, zcontext.c)
+
+Adds more tracing to the relocation phase of the garbage collector.
+(igcref.c)
+
+</pre><h3><a name="5.90_Streams"></a>Streams</h3><pre>
+
+Fixes problems:
+ - jpeg_open_backing_store no longer had the correct arguments.
+(This had no effect in practice, since the procedure was never called.)
+(sjpegc.c)
+
+Cleans up public functions with no previous prototype. (scfdgen.c,
+scfetab.c, sjpegc.c, slzwce.c, slzwd.c, stream.c)
+
+Adds some tracing to the image scaling stream. (siscale.c)
+
+</pre><h3><a name="5.90_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - A null OutputFile name could cause an error. (gxdevice.h,
+gsdevice.c, gsfname.c)
+ - Shading with non-monotonic Functions produced incorrect output.
+(gxshade1.c)
+ - An #undef didn't match the #define it was supposed to cancel.
+(gxchar.c)
+ - The default next_char_glyph procedure didn't handle FROM_CHARS or
+FROM_SINGLE_CHAR data sources. (gstext.c)
+ - When finalizing a forwarding device, the target pointer in the
+device wasn't cleared, leading to an incorrect attempt to access it later.
+(gdevnfwd.c)
+ - Interpolated images were broken, probably since 5.81.
+(gxiscale.c)
+ - Some color space implementation procedures hadn't been updated to
+add 'const' to the color space argument. (gscie.c)
+ - A constant had a signed/unsigned ambiguity on systems where
+sizeof(long) > 4. (gsccode.h)
+ - The font font_info procedure didn't provide for scaling.
+(gxfont.h)
+
+Simplifies the notification mechanism to remove the concept of client and
+generating object. Registration now just takes a closure (procedure +
+opaque data); events pass the closure data and event data. (gsnotify.h,
+gsfont.c, gsnotify.c)
+
+Changes gs_notify_unregister so that it can unregister all registrations of
+a particular client rather than only one. (gsnotify.h, gsnotify.c)
+
+Adds support for "vanilla" Functions at the library level. (gsfunc.h,
+gsfunc.c)
+
+Adds some tracing for Functions. (gsfunc3.c)
+
+Redefines function monotonicity to indicate whether the function is
+increasing or decreasing, and implements monotonicity correctly for all
+FunctionTypes except 4. (gsfunc.h, gxfunc.h, gsfunc0.c, gsfunc3.c)
+
+Makes Type 0 fonts check that they are being used with a string, not a
+character or (a) glyph(s). (gxtext.h, gschar.c, gschar0.c, gstext.c,
+gxchar.c)
+
+Cleans up public functions with no previous prototype. (gdevmem.h,
+gpcheck.h, gscie.h, gserror.h, gsmemory.h, gxcie.h, gxcldev.h, gxclpath.h,
+gxcmap.h, gxcspace.h, gxfixed.h, gxfont0.h, gxp1fill.h [deleted],
+gxp1impl.h, math_.h, std.h, gconf.c, gdevdrop.c, gdevm1.c, gdevm2.c,
+gdevm4.c, gdevm8.c, gdevm24.c, gdevmr1.c, gdevmr2n.c, gdevprn.c, gsbittab.c,
+gscdef.c, gscie.c, gsciemap.c, gscspace.c, gscscie.c, gsdevmem.c,
+gsdparam.c, gshtscr.c, gsimpath.c, gsiodev.c, gsmisc.c, gsnorop.c, gspath.c,
+gspcolor.c, gsptype1.c, gsropc.c, gsutil.c, gxacpath.c, gxclist.c,
+gxcpath.c, gxi12bit.c, gxicolor.c, gxifast.c, gximono.c, gxiscale.c,
+gxp1fill.c, gxpath2.c)
+
+Gets rid of some remaining vestiges of 16-bit ints. (gdevm1.c, gsbitops.c)
+
+Adds procedures to register clients for notification when a font is freed.
+(gxfont.h, gsfont.c)
+
+Defines the IODevice open_device procedure as returning 1 if it opened a new
+stream, 0 if it returned an existing stream. This eliminates some awkward
+externs.
+
+Adds the concept of a stable allocator -- an allocator that allocates from
+the same heap and in the same VM space as another allocator, but is not
+subject to save and restore. (gsmemory.h, gsmemraw.h, gsalloc.c,
+gsmalloc.c, gsmemlok.c, gsmemret.c, gsnogc.c)
+
+Adds some new macros to make defining new kinds of fixed-format structures
+simpler. (gsstruct.h)
+
+Replaces the text processing restart procedure with a more general resync
+procedure, which can be used to restart partway through a string. We retain
+gs_text_restart for backward compatibility and general usefulness.
+(gstext.h, gxtext.h, gdevbbox.c, gstext.c, gxchar.c)
+
+Adds the Adobe Latin glyph sets as pseudo-encodings. (gsccode.h)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.88"></a>Version 5.88 (tester) (8/3/99)</h2>
+
+<p>
+This fileset adds the ability to reference and embed TrueType fonts in PDF
+output. Unfortunately, even though the resulting PDF files work fine with
+Ghostscript itself, Acrobat Reader apparently can't handle embedded TrueType
+fonts with non-standard Encodings. We hope to fix this problem during the
+6.0 beta test period.
+
+<p>
+This fileset also adds the ability to buffer X Windows output in a
+client-side bitmap. This is typically more efficient than trying to push
+many small commands through the X client/server knothole, especially if
+bitmap images or RasterOp are involved.
+
+<p>
+Some reported problems have been deliberately left unfixed: we will need
+every minute of the 13 days before the start of the 6.0 beta test period to
+implement the last few items of functionality scheduled for the 6.0 release,
+and we can fix problems (but not add functionality) during the beta test
+period.
+
+<h3><a name="5.88_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Library)
+ - The box_device member of the bbox device is replaced by the
+box_data member, with a different meaning.
+ - The x_rect structure is removed; all uses are changed to
+gs_int_rect.
+ - gdevpstr.h is renamed spprint.h.
+ - The parameter printing procedures are moved from gdevpsdf.[hc] to
+spsdf.[hc].
+ - Clients must now allocate gs_font* objects using gs_font_alloc or
+gs_font_base_alloc, not directly with gs_alloc_struct.
+ - The first (vptr) argument of enum_ptrs procedures is now const *.
+EV_CONST is no longer defined.
+ - The pep argument of enum_ptrs procedures is now enum_ptr_t *
+rather than const void **.
+ - The font glyph_pieces procedure is replaced with an option for
+glyph_info.
+ - The font encode_char procedure now takes an additional glyph_space
+argument.
+ - The o_large flag in object headers is renamed o_alone; o_lmark and
+o_lsize no longer exist. The DO_LARGE and DO_SMALL macros for enumerating
+objects in a chunk are also removed.
+
+</pre><h3><a name="5.88_Documentation"></a>Documentation</h3><pre>
+
+Fixes problems:
+ - News entries since 5.72 had a missing &lt;li&gt; in the table of
+contents entry. (doc/News.htm)
+ - gs_text_params_t still referred to REPLACE_X_WIDTHS and
+REPLACE_Y_WIDTHS rather than REPLACE_WIDTHS. (gstext.h)
+
+Clarifies that the font glyph_outline procedure must append a final moveto
+for the advance width. (gxfont.h)
+
+Clarifies that the font enumerate_glyph procedure enumerates glyphs in an
+unpredictable order. (gxfont.h)
+
+Documents that reference counted freeing procedures for structures with
+finalization must free the structure itself first rather than last.
+(gsrefct.h)
+
+Updates documentation on building Ghostscript on MS-DOS and MS Windows.
+(doc/Make.htm)
+
+Adds some documentation on how the makefiles are / should be structured.
+(doc/Source.htm)
+
+Documents the new parameters for the X driver. (doc/Use.htm)
+
+Updates the language documentation to refer properly to PostScript
+LanguageLevel 3 and PDF 1.3. (doc/Language.htm)
+
+</pre><h3><a name="5.88_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - An omitted space in a makefile caused an incompatibility with the
+VMS build utilities. (lib.mak)
+ - The gsindent script was omitted from the fileset. (gsindent)
+ - The core library didn't include stream.c, which is now required.
+(lib.mak)
+ - The workaround for the peculiarities of the Watcom compiler's
+command line syntax didn't work. (zlib.mak)
+ - A DOS command line overflowed in the makefile. We patched this by
+deleting the bmpgray device from the Borland Windows platform.
+(bcwin32.mak)
+
+Provides a .lnk file required by the revised linking procedures on MS
+Windows. (gsdll32w.lnk)
+
+Straightens out the Watcom makefiles so that it is possible to build a
+Windows executable and DLL using the Watcom compiler. This required moving
+some parameters around in the other PC makefiles. (bcwin32.mak,
+msvccmd.mak, watc.mak, watcw32.mak, wccommon.mak, winint.mak, winlib.mak)
+
+</pre><h3><a name="5.88_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - The X driver reported the wrong parameter name for errors in the
+value of the WindowID or .IsPageDevice parameter. (gdevxini.c)
+ - The X driver calculated the Y window dimension incorrectly when
+resizing the window if X and Y resolutions were different. (Never happens
+in practice.) (gdevxini.c)
+ - The bmpasep8 device was defined as gx_device_printer rather than
+gx_device_async. (gdevbmpa.c)
+ - Some casts between signed and unsigned char * were missing.
+(gdevpdff.c, gdevpdft.c)
+ - The PDF writer didn't handle reencoded characters properly in
+non-embedded fonts. (gdevpdfx.h)
+ - The PDF writer allocated new structures while being closed,
+causing memory corruption if the close procedure was called for
+finalization. (gdevpdff.c, gdevpsd1.c)
+ - The PDF writer tried to close the resource file twice. (bug
+introduced since 5.50) (gdevpdf.c)
+ - The PDF writer failed to work around a bug in Acrobat 3 Reader's
+Print function related to re-encoded fonts. (gdevpdft.c)
+ - The PDF writer incorrectly specified ASCII85Encode rather than
+ASCII85Decode for non-binary embedded fonts. (gdevpdff.c)
+ - The PDF writer didn't handle embedded fonts with a non-standard
+FontMatrix correctly. (gdevpdft.c)
+ - The PDF writer didn't handle reassigned characters correctly.
+(gdevpdft.c)
+ - When embedding a Type 1 font, the PDF writer didn't check that the
+font contains only CharStrings (no PostScript procedures), no non-standard
+OtherSubrs, and no CDevProc. (gdevpsd1.c)
+ - There was an unused label in the mswinpr2 driver. (gdevwpr2.c)
+ - The X driver didn't flush buffered output before reading back
+bits from the display. (gdevx.c)
+ - The X driver still didn't set up the color mapping tables
+correctly -- in particular, it didn't initialize cman.color_to_rgb before
+setting up the dither ramp or cube. This is at least the third time we have
+"fixed" this problem. (gdevxcmp.c)
+
+Removes the remaining uses of gs_malloc, gs_free, and gs_memory_default from
+Aladdin's non-display drivers. (gdevbit.c, gdevbmp.c, gdevbmpa.c,
+gdevcgm.c, gdevclj.c, gdevcljc.c, gdevdjet.c, gdevlj56.c, gdevmiff.c,
+gdevpbm.c, gdevpcx.c, gdevpng.c, gdevpsim.c, gdevtfax.c, gdevtfnx.c,
+gdevxalt.c)
+
+Adds a MaxBitmap parameter to the X driver: the driver will maintain a
+full-window pixmap in memory if it requires no more space than MaxBitmap.
+The default value of this parameter is 0, meaning never use a client-side
+bitmap. (gdevx.h, gdevx.c, gdevxini.c, gdevxxf.c)
+
+Moves the X device closing and get/put parameters procedures from gdevx.c to
+gdevxini.c. (gdevx.c, gdevxini.c)
+
+Removes some remaining uses of gs_malloc and gs_free from the X driver.
+Note that this requires making the X device structure properly
+garbage-collectable. (gdevx.h, gsstruct.h, gdevxini.c)
+
+Removes the remaining uses of 'register' from the X driver. (gdevx.c,
+gdevxini.c)
+
+Removes the remaining uses of the obsolete far_data keyword from Aladdin's
+non-PC drivers. (gdevbmp.c, gdevbmpa.c, gdevcgm.c, gdevlj56.c, gdevmiff.c,
+gdevp2up.c)
+
+Improves the X driver's algorithm for deciding when to update the screen,
+and makes its parameters available for reading and setting. (gdevx.h,
+gdevx.c, gdevxini.c)
+
+In the X driver's color mapper, improves performance slightly by replacing
+multiplies and divides with shifts and table lookups in the normal case of
+standard color maps. (gdevxcmp.h, gdevxcmp.c)
+
+Moves some filter-related code from the driver level to the stream level.
+(gdevpsdf.c)
+
+Moves some utilities for printing values in ASCII form from the driver level
+to the stream level. (devs.mak, gdevpdfx.h, gdevpstr.h [deleted], gdevps.c,
+gdevpsde.c, gdevpsdf.c, gdevpsdp.c, gdevpstr.c [deleted])
+
+Upgrades the PDF writer to handle TrueType fonts as well as Type 1.
+(gdevpdfx.h, gdevpsdf.h, gdevpdff.c, gdevpdft.c, gdevpsde.c => gdevpsd1.c,
+gdevpsdt.c)
+
+Starts to implement font subsetting in the PDF writer. (gdevpdfx.h,
+gdevpsdf.h, gdevpdff.c, gdevpsd1.c, gdevpsdt.c)
+
+Partially implements WMode when writing font descriptors. (gdevpdff.c)
+
+Changes psdf_binary_writer so that adding the ASCII85 filter in
+psdf_begin_binary doesn't require allocating any memory. (gdevpsdf.h,
+gdevpsdf.c)
+
+Makes the PDF writer guess the Ascent and StemV values for embedded fonts
+when it can't determine them by examining the font. (gdevpdff.c)
+
+Makes the PDF writer able to handle xshow and yshow (TEXT_REPLACE_WIDTHS).
+(gdevpdft.c)
+
+Updates code to reflect the addition of glyph_space to the font encode_char
+and enumerate_glyph procedures. (gdevpsdf.h, gdevpdff.c, gdevpdft.c,
+gdevpsd1.c, gdevpsdf.c, gdevpsdt.c)
+
+Removes some unnecessary #includes. (gdevxres.c)
+
+Removes the sample driver-based CRD from the variant X drivers, since this
+created a pointless dependency. (The `bit' drivers still provide this
+feature, for testing.) (gdevxalt.c)
+
+Changes the default compatibility level of PDF output from 1.2 (Acrobat 3)
+to 1.3 (Acrobat 4). (gdevpdf.c)
+
+</pre><h3><a name="5.88_Platforms"></a>Platforms</h3><pre>
+
+Fixes problems:
+ - A comment included an extra /*. (gp_mswin.c)
+ - The definitions for min and max in a couple of files disagreed
+with the ones typically provided in system header files. (dwimg.cpp,
+dwtext.cpp)
+
+Removes some unnecessary code related to generating temporary file names.
+(gp_iwatc.c)
+
+</pre><h3><a name="5.88_Fonts"></a>Fonts</h3><pre>
+
+Changes the loader for TrueType fonts to keep the 'instructions', which are
+required if the font is going to be written out in a PDF file.
+(lib/gs_ttf.ps)
+
+Adds some more debugging output to the TrueType font loader.
+(lib/gs_ttf.ps)
+
+Registers the MacGlyphEncoding so it can be made available to the PDF
+writer. (lib/gs_mgl_e.ps, lib/gs_ttf.ps, unixinst.mak, gsccode.h, ifont.h)
+
+</pre><h3><a name="5.88_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - The serif and small-caps flags in the FontDescriptor were ignored
+when doing font substitution. (lib/gs_fonts.ps, lib/pdf_font.ps)
+ - The ri operator was undefined. We added a dummy definition.
+(lib/pdf_ops.ps)
+ - The redefinitions of restore could cause a recursion loop.
+(lib/gs_fform.ps, lib/gs_lev2.ps)
+ - There was an extra gsave executed for each page, causing the
+graphics state stack to grow deeper and deeper, which caused problems when
+wrapping up at the end of execution. (lib/pdf_main.ps)
+
+Implements the sh operator. (lib/pdf_draw.ps)
+
+Works around a bug in some PDF files generated by Adobe's PDF library (?),
+which attempt to create a font Encoding array with more than 256 elements.
+(lib/pdf_font.ps)
+
+</pre><h3><a name="5.88_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - The GNU readline completion code (which Aladdin did not write) was
+completely wrong. (gp_gnrdl.c)
+ - The top-level restore sometimes tried to restore global VM an
+extra time, leading to memory corruption. (bug probably introduced in 5.85)
+(isave.c)
+ - The glyph_ref procedure was defined in two different places
+(inconsistently). (ichar.h, zchar.c, zchar1.c)
+
+Restructures the name table to improve cache coherence and to make it
+possible to store initial name strings in ROM. (iname.h, inamedef.h,
+inames.h, inamestr.h, igc.c, iname.c, isave.c)
+
+Changes the scanner so it doesn't copy name strings when scanning a compiled
+init string. This reduces RAM requirements by about 20K when using compiled
+initialization. (iscan.c)
+
+Removes redundant FontBBox correction code, since this is now handled by the
+library. (zfont42.c)
+
+Updates the Type 1 and Type 42 font code to implement the new font
+procedures. (icharout.h, zcharout.c, zchar1.c, zchar42.c, zfont1.c,
+zfont42.c)
+
+Simplifies the code that checks whether a grestore needs to do a
+setpagedevice. (zdevice2.c)
+
+Updates code to reflect the change of the vptr argument of enum_ptrs
+procedures to const *. (igcref.c)
+
+Updates code to reflect the change in the pep argument of enum_ptrs
+procedures to enum_ptr_t *. (igc.h, iscan.h, istruct.h, igc.c, igcref.c,
+ilocate.c, iscan.c)
+
+Updates code to reflect the addition of glyph_space to the font encode_char
+and enumerate_glyph procedures. (bfont.h, ifont.h, zbfont.c, zfont1.c,
+zfont32.c, zfont42.c)
+
+Cleans up some code details. (idebug.h, ifunc.h, iparray.h, istream.h,
+zfunc.c)
+
+Removes some no longer needed test code. (zfont1.c)
+
+Updates memory manager code to reflect the change from o_large to o_alone.
+(igc.c, igcref.c, ilocate.c, isave.c)
+
+Changes the printed font substitution message to be closer to what some
+Adobe products print if SHORTERRORS is defined. (Thanks to Andrew Chilvers
+for the suggestion.) (lib/gs_fonts.ps)
+
+</pre><h3><a name="5.88_Streams"></a>Streams</h3><pre>
+
+Fixes problems:
+ - The fix in 5.85 for ASCII85Encode EOLs was wrong and caused a word
+of data to be dropped occasionally. (sfilter2.c)
+
+Moves some filter-related code from the driver level to the stream level.
+(stream.h, stream.c)
+
+Moves some utilities for printing values in ASCII form from the driver level
+to the stream level. (lib.mak, spprint.h, spsdf.h, spprint.c, spsdf.c)
+
+Adds some more tracing output for image scaling. (siscale.c)
+
+</pre><h3><a name="5.88_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - The bbox device's check for whether a rectangle filled the entire
+page was wrong. (gdevbbox.c)
+ - The bbox device didn't correctly handle parallelograms, triangles,
+or thin lines with points specified in other than ascending order.
+(gdevbbox.c)
+ - The bbox device smashed the reference count of the text enumerator
+it created, causing a memory leak. (gdevbbox.c)
+ - The bbox device didn't copy back all the dynamic information from
+a subsidiary text enumerator, with unpredictable results. (gxtext.h,
+gdevbbox.c, gstext.c)
+ - The default implementation of glyph_info for fonts incorrectly
+reported that it returned values for all members, not just the ones it knew
+about. (gsfont.c)
+ - The profiling implementation of memset was incorrect, leading to
+memory smashing. (gsmisc.c)
+ - The default implementation of glyph_info had a memory leak.
+(gsfont.c)
+ - The default implementation of character rendering didn't correctly
+handle the case where the character was in the cache and only the character
+width was requested. (gxchar.c)
+ - Text processing didn't correctly handle REPLACE_WIDTHS if the X
+and Y width arrays were different. (The PostScript interpreter never does
+this.) (gstext.h, gstext.c, gxchar.c)
+ - Compositing devices weren't initialized properly, leading to
+invalid accesses. This is the last (?) bit of the device reference counting
+bug tail. (gsalphac.c, gsropc.c)
+
+Changes the bbox device to make the procedures for managing the bounding box
+virtual, so the X device can be a subclass. (gdevbbox.h, gdevbbox.c)
+
+Changes the bbox device so it always adds the bounding box after doing the
+drawing operation rather than before, for the benefit of the buffering X
+device. (gdevbbox.c)
+
+Removes some remaining uses of gs_memory_default. (gdevdrop.c)
+
+Removes all uses of the obsolete far_data keyword from the library.
+(gconf.c, gdevbbox.c)
+
+Changes the bbox device so it doesn't run drawing algorithms twice if it has
+a target that uses the default implementation. (gdevbbox.c)
+
+Speeds up the implementation of fill_rectangle for 16-bit memory devices.
+(gdevm16.c)
+
+Makes TrueType fonts implement the new font procedures. (gxfont42.h,
+gxmatrix.h, gsmatrix.c, gstype42.c)
+
+Adds a gs_id to gs_font objects, so that fonts with the same name can be
+distinguished reliably without relying on the address. (gxfont.h, gsfont.c)
+
+Makes the vptr argument of enum_ptrs procedures be const *. This is a
+long-overdue change. (gsstype.h, gxxfont.h, gsalloc.c, gsfont.c,
+gsmemory.c) ****** REDO THE CONST-BREAKING CASTS IN gsfont.c ******
+
+Changes the pep argument of enum_ptrs from const void ** to enum_ptr_t *, to
+get rid of some hacks in enum_ptrs implementations that had to construct
+temporary gs_strings. (gsstruct.h, gsstype.h, gstext.h, gsalloc.c,
+gscolor2.c, gsfont.c, gsmemory.c, gstext.c)
+
+Adds a general mechanism that provides for an arbitrary number of clients to
+be notified when an event occurs. For the moment, we only use it to notify
+PDF writers when a font is about to be freed. (gsnotify.h, gsnotify.c)
+
+Makes fonts use the new notification mechanism to notify clients when the
+font is about to be freed. (gxfont.h, gsfont.c)
+
+Adds a gs_text_set_cache procedure to parallel restart and retry.
+(gstext.h, gxtext.h, gstext.c)
+
+Adds a glyph_space argument to the font encode_char and enumerate_glyph
+procedures, so that clients can choose between glyph names and glyph indices
+in environments that use both. (gsccode.h, gxchar.h, gxfont.h, gxfont42.h,
+gsfont.c, gstype42.c, gxchar.c)
+
+Changes the bbox device so it optionally considers white to be opaque.
+(gdevbbox.h, gdevbbox.c)
+
+Cleans up some code details. (gshsb.h)
+
+Adds a hack to suppress warning messages from the Watcom compiler about
+testing constant values. (stdpre.h)
+
+Replaces the glyph_pieces font procedure with a GLYPH_INFO_PIECES option for
+glyph_info. (gxfont.h, gxfont42.h, gsfont.c, gstype42.c)
+
+Adds a font_info font procedure, similar to glyph_info but giving
+information about the font as a whole. (gxfont.h)
+
+In order to fix a bug in resizing large objects, gets rid of the concept of
+large objects entirely, replacing it with the concept of an 'alone' object
+that is guaranteed to be the only object in its chunk. (gxalloc.h, gxobj.h,
+gsalloc.c)
+
+Adds some more tracing output for interpolated images. (gxiscale.c)
+
+Adds a _long parameter setting procedure to parallel _bool, _enum, and _int.
+(gsparamx.h, gsparamx.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.87"></a>Version 5.87 (tester) (6/29/99)</h2>
+
+<p>
+In this fileset, the pdfwrite device finally handles general Type 1 fonts,
+and can write them in both embedded and non-embedded form. This fileset
+also contains a few more changes to the text API, and some incompatible
+changes to the gs_font procedure vector: more such changes are likely. It
+also fixes a couple of long-standing pdfmark bugs.
+
+<p>
+NOTE: there are known problems in PDF output with non-embedded fonts (fonts
+represented only by a descriptor): some characters will be missing, and
+because of bugs in Acrobat's Print function, even more characters will be
+missing or wrong when printing from Acrobat. We will fix our problems, and
+work around Acrobat's bugs, in the next couple of filesets.
+
+<h3><a name="5.87_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Library)
+ - Text enumerators now have a release procedure.
+ - gx_device_text_begin no longer stores its arguments into the
+enumerator: the driver text_begin procedure must do this.
+ - The argument list for the font encode_char procedure no longer
+includes the enumerator, and the second argument is now a gs_char rather
+than a gs_char *.
+ - The font next_char procedure is removed. (It has been obsolete
+for a while.) The next_glyph procedure is renamed next_char_glyph.
+ - The first argument of the font init_fstack, build_char, and
+next_glyph procedures is changed from gs_show_enum * to gs_text_enum_t *.
+ - gx_font_stack[_item] is renamed gx_font_stack[_item]_t.
+ - New font procedures have been added, of which two (enumerate_glyph
+and glyph_outline) are required. The font procedure vector has been
+reorganized.
+ - The Type 1 font next_glyph procedure is replaced by the gs_font
+enumerate_glyph procedure.
+ - psdf_embed_type1_font is renamed psdf_write_type1_font, and has
+an additional argument.
+ - psdf_alloc_param_printer takes slightly different arguments;
+print_binary_ok and print_ASCII85_ok are now upper-case.
+
+</pre><h3><a name="5.87_Documentation"></a>Documentation</h3><pre>
+
+Reorganizes the driver API documentation slightly, documents the fact that
+get_alpha_bits and draw_line are obsolete, and documents the driver text
+API. (doc/Drivers.htm)
+
+Documents an additional Irix configuration where the compiler doesn't work.
+(doc/Make.htm)
+
+</pre><h3><a name="5.87_Procedures"></a>Procedures</h3><pre>
+
+Moves the %pipe% IODevice into lib.mak, since it is now included on Windows
+as well as Unix. (lib.mak, unix-aux.mak)
+
+Adds the bmpgray driver to all platforms that include the other BMP drivers.
+(bcwin32.mak, msvc32.mak, os2.mak, unix-gcc.mak, watc.mak, watcw32.mak)
+
+</pre><h3><a name="5.87_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - The PS and PDF writers didn't maintain the font embedding lists
+correctly. (gdevpsdp.c)
+ - The CreationDate in PDF output was always set to the current date,
+and couldn't be set with a pdfmark. We now don't set CreationDate at all,
+since it is supposed to be the creation date of the original document, not
+of the PDF file. (gdevpdfm.c, gdevpdfu.c)
+ - The Producer in PDF output couldn't be set with a pdfmark.
+(gdevpdfx.h, gdevpdf.c, gdevpdfm.c, gdevpdfu.c)
+ - pdfmarks with /Action /GoTo incorrectly retained the Action key.
+(gdevpdfm.c)
+ - pdfmarks didn't substitute /Dest => /D or /File => /F correctly.
+(gdevpdfm.c)
+
+Updates the PDF writer to use the new text API rather than the show
+pseudo-parameter. (gdevpdfx.h, gdevpdf.c, gdevpdfp.c, gdevpdft.c)
+
+Changes pdf_open_document so that it opens the document even if some
+resources have been allocated. (gdevpdf.c)
+
+Splits off pdfwrite utilities from top-level control, since the file was
+getting too big. (gdevpdfx.h, gdevpdf.c, gdevpdfu.c)
+
+When writing PDF, avoids resetting the word spacing parameter if the string
+doesn't contain any spaces, and the character spacing parameter if the
+string has no more than 1 character. (gdevpdft.c)
+
+Splits off PDF font handling from text handling, since the file was getting
+too big. (gdevpdfx.h, gdevpdff.c, gdevpdft.c)
+
+Implement both embedded and non-embedded fonts beyond the base 14 in the PDF
+writer. This code doesn't work very reliably yet. (gdevpdfx.h, gdevpdff.c,
+gdevpdft.c)
+
+Adds a bmpgray driver that produces 8-bit gray-scale output. (devs.mak,
+gdevbmp.c)
+
+Updates the PDF writer for changes in the gs_font procedure vector.
+(gdevpdff.c, gdevpdft.c)
+
+Updates the Type 1 font writer for changes in the gs_font procedure vector,
+and adds some output options. (gdevpsdf.h, gdevpsde.c)
+
+Changes the printing parameter list implementation to take all of its
+parametric arguments in the params structure, and changes the names of the
+options. (gdevpsdf.h, gdevpsde.c, gdevpsdf.c, gdevpdff.c, gdevpdfi.c,
+gdevpdfu.c)
+
+</pre><h3><a name="5.87_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - Indexed color spaces didn't allow the base space to be an indirect
+reference. (lib/pdf_draw.ps)
+ - The CS and cs operators didn't accept a literal color space name
+(as opposed to a color space resource name). (lib/pdf_draw.ps)
+ - Some PDF 1.2 files had a SM entry in graphics state dictionaries,
+even though this is not documented and requires a LL3 interpreter.
+(lib/pdf_draw.ps)
+ - Generated font names included a % character, which could cause
+problems for ps2pdf. (lib/pdf_font.ps)
+
+</pre><h3><a name="5.87_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - The calculation of the final index when enumerating the pointers
+in a context state was incorrect. (source bug only, no effect on execution)
+(icontext.c)
+
+Updates the interpreter's glue code for the changes in the PDF writer.
+(lib/gs_pdfwr.ps)
+
+Updates a client to use gs_font_alloc. (zbfont.c)
+
+Updates clients for changes in the gs_font procedure vector. (zbfont.c,
+zchar1.c, zfont0.c, zfont1.c, zfont32.c)
+
+Updates a client for the change to psdf_write_type1_font. (zfont1.c)
+
+</pre><h3><a name="5.87_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - Some code used rc_decrement_only instead of gx_device_retain.
+(Stylistic bug only.) (gschar.c)
+ - The finalize procedure for the character cache device could get
+unset and/or the retained flag cleared, leading to a reference count not
+getting decremented. (gxccman.c)
+ - Allocating a show enumerator didn't clear the show_gstate member.
+(Probably no effect in practice.) (gschar.c)
+ - Cleaning up at the end of text processing was not consistent and
+sometimes didn't get done. The old API used explicit and separate client
+allocation (gs_show_enum_alloc), release (gs_show_enum_release), and freeing
+(gs_free_object); release, but not free, was automatic at the end of
+processing (in show_finish). The new API has allocation in gs_text_begin or
+gx_device_text_begin, no implicit release or free, and a single
+gs_text_release call to handle both release and free. Reconciling these
+required adding an auto_release flag in the gs_show_enum structure to
+indicate which API was used to create it, and a release procedure. (The
+auto_release flag is only needed for backward compatibility with clients
+that use the old API. Ghostscript itself no longer has such clients, but
+the PCL interpreters do.) (gxchar.h, gxtext.h, gdevbbox.c, gschar.c,
+gstext.c, gxchar.c)
+ - We were burned once again by gcc's acceptance of private/public
+procedure mismatches. (gxchar.c)
+ - A line break was missing between the return type and a procedure
+name. (gsstate.c)
+ - Show enumerators had an incorrect GC descriptor. (gxchar.c)
+ - Text enumerators didn't terminate their list properly. (gstext.c)
+
+Adds a debugging procedure that finds all the pointers to an object. This
+uses the GC's pointer enumeration procedures, so it will only work if all
+structures have correct GC descriptors. (Of course, we think this is true
+of all of Ghostscript.) The current implementation doesn't trace refs.
+(gsalloc.c)
+
+Removes remaining references from gxchar.c to procedures defined in
+gschar.c. The standard Ghostscript build now no longer needs gschar.c,
+although we will keep it for the moment for backward compatibility.
+(gschar.c, gxchar.c)
+
+Removes an obsolete reference to gs_show_enum. (gstype1.h)
+
+Adds definitions for the built-in encoding indices. (gsccode.h, gxfont.h,
+gxxfont.h)
+
+To make text_begin implementations callable, requires them, rather than
+gx_device_text_begin, to save their parameters in the enumerator structure.
+(gxtext.h, gstext.c, gxchar.c)
+
+Adds a TEXT_DO_CHARWIDTH alternative to the text operation, to just advance
+the current point by the character width (stringwidth rmoveto). (gscpm.h,
+gstext.h, gxchar.c, gxpath.c)
+
+Adds procedures to allocate and initialize fonts. (gxfont.h, gsfont.c)
+
+Starts to revise the gs_font procedure vector to create a real "font socket"
+API, adding several new procedures. This is a NON-BACKWARD-COMPATIBLE
+change, and there probably are more to come. (gxchar.h, gxfont.h, gsfont.c,
+gstext.c, gxchar.c)
+
+Moves the Type 0 font stack from gs_show_enum to gs_text_enum_t, and renames
+its types to gx_font_stack_[item_]t. Also moves cmap_code. (gxchar.h,
+gxtext.h, gschar0.c, gstext.c, gxchar.c)
+
+Moves the glyph enumeration procedure from Type 1 fonts to general fonts,
+changing its name to enumerate_glyph. (gxfont1.h)
+
+Changes the debugging code for reference counting to call procedures, to
+allow better breakpointing. (gsrefct.h, gsmemory.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.86"></a>Version 5.86 (tester) (6/14/99)</h2>
+
+<p>
+This fileset includes the first batch of changes for the new driver-based
+text API. Unfortunately, a few of them are non-backward-compatible.
+WARNING: This API is UNSTABLE and should not be used yet. This includes the
+APIs and structures in gxtext.h, and to a lesser extent those in gstext.h.
+
+<h3><a name="5.86_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Interpreter)
+ - The default initialization of fonts now sets next_glyph rather
+than next_char.
+(Library)
+ - The font argument of the driver text_begin procedure is no
+longer declared as const.
+ - Text enumerators now have a is_width_only and current_width
+procedures; the restart procedure is renamed retry, and there is a new
+restart procedure that does something different.
+ - The scale member of gs_text_enum_t is renamed log2_scale.
+ - gs_show_restore_font is removed.
+ - The current_char, current_glyph, width, and log2_current_scale
+members of gs_show_enum are removed (replaced by members of gs_text_enum_t).
+ - The current_width member of gs_text_enum_t is removed.
+ - Replaces TEXT_REPLACE_{X,Y}_WIDTHS with a single
+TEXT_REPLACE_WIDTHS.
+
+</pre><h3><a name="5.86_Documentation"></a>Documentation</h3><pre>
+
+Fixes a number of outdated URLs. (doc/Devices.htm, doc/Fonts.htm,
+doc/Install.htm, doc/Language.htm, doc/Make.htm, doc/New-user.htm)
+
+Documents the name change from gs_iso_e.ps to gs_il1_e.ps.
+(doc/Psfiles.htm)
+
+Documents the fact that a double % may be needed on MS systems.
+(doc/Use.htm)
+
+Documents that reversepath discards a trailing moveto, for compatibility
+with Adobe implementations. (gxpath2.c)
+
+</pre><h3><a name="5.86_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - Some punctuation was omitted that affects builds on VMS systems.
+(gs.mak)
+ - 'make install' didn't install doc/History5.htm. (unixinst.mak)
+ - The Borland makefile put some generated files in the top-level
+directory rather than the build directory. (bcwin32.mak)
+
+Updates the Unix install script for the name change of gs_iso_e.ps.
+(unixinst.mak)
+
+Moves the GNU-licensed drivers to a separate makefile. (contrib.mak,
+gnu/src/gnudevs.mak)
+
+Adds pipe.dev to the BC++, MSVC++, and OS/2 (GCC/EMX) platforms.
+(bcwin32.mak, dvx-gcc.mak, msvc32.mak, msvclib.mak)
+
+</pre><h3><a name="5.86_Utilities"></a>Utilities</h3><pre>
+
+Fixes problems: - The usage message for pdf2ps was incorrect. (lib/pdf2ps,
+ lib/pdf2ps.bat)
+
+</pre><h3><a name="5.86_Drivers"></a>Drivers</h3><pre>
+
+Removes all remaining uses of #define'd casts in connection with ENUM_PTRS
+and RELOC_PTRS procedures. (gdevpdf.c, gdevpdfo.c)
+
+Adds a user-contributed driver for the Oki Data OkiPage 4w+ LED printer.
+This is a GPL'ed driver. (contrib.mak, gnu/src/gdevop4w.c)
+
+</pre><h3><a name="5.86_Platforms"></a>Platforms</h3><pre>
+
+Adds a %handle% IODevice (mshandle.dev) to recognize file names of the form
+%handle%NNNNNNNN under MS Windows. GSview uses this feature in place of
+pipes, which are an open industry standard not supported by MS Windows.
+(msvc32.mak, winlib.mak, gp_mshdl.c)
+
+</pre><h3><a name="5.86_Fonts"></a>Fonts</h3><pre>
+
+Adds the ISO 8859-2 encoding to the stock of built-in encodings.
+(lib/gs_il2_e.ps, lib/gs_iso_e.ps => lib/gs_il1_e.ps)
+
+</pre><h3><a name="5.86_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - Using a colored pattern with an uncolored Pattern color space
+caused an error. (lib/pdf_draw.ps)
+ - Embedded CIDFontType 2 fonts didn't work, and embedded TrueType
+fonts did an extra definefont. (lib/gs_ttf.ps, lib/pdf_font.ps,
+lib/pdf_ops.ps) ****** IN PROGRESS ******
+
+</pre><h3><a name="5.86_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - Some files hadn't been updated for the removal of the gs_imemory
+static. (int.mak, gp_gnrdl.c, imain.c, ztrap.c)
+ - %statementedit could append a spurious character if the last
+character of the statement was not whitespace. (bug probably introduced in
+5.8x) (ziodev.c)
+ - The show operators didn't properly handle the special case of
+executing within a cshow procedure for a non-CID font. (zchar.c)
+ - cshow applied to a composite font didn't scale the current font
+correctly (in fact, at all). (zcfont.c)
+ - If an error occurred within the procedure called by
+resourceforall, it wasn't reported. (lib/gs_res.ps)
+ - flushfile and closefile didn't correctly handle filters that only
+write a fixed amount of data. (zfileio.c)
+ - cshow didn't restore the font reliably after executing the
+procedure. (ichar.h, zcfont.c, zchar.c)
+ - An execstackoverflow error might temporarily leave the execution
+stack in an invalid state. (interp.c)
+
+Cleans up some macros. (iname.c, isave.c, iscan.c)
+
+Removes all remaining uses of #define'd casts in connection with ENUM_PTRS
+and RELOC_PTRS procedures. (icontext.c, iname.c, isave.c, iscan.c,
+istack.c, zcontext.c, zfproc.c)
+
+Adds a run-time warning message if gp_gnrdl.c is included in a non-GNU
+build. (gp_gnrdl.c)
+
+Converts clients to use the gs_text procedures that replace the gs_show
+procedures, and to use gs_text_enum_t rather than gs_show_enum as the
+enumerator type. (ichar.h, zbfont.c, zcfont.c, zchar.c, zchar1.c,
+zchar32.c, zchar42.c, zcharout.c, zcharx.c, zfont.c, zfont0.c, zfont1.c,
+zfont32.c, zimage.c, zimage2.c)
+
+Updates the initialization code for the name change of gs_iso_e.ps.
+(lib/gs_init.ps)
+
+Splits off the definitions relating to name indices, in anticipation of
+defining some name indices statically. (inamedef.h, inameidx.h, iname.c)
+
+</pre><h3><a name="5.86_Streams"></a>Streams</h3><pre>
+
+Fixes problems:
+ - The pixel-difference filters didn't initialize the previous sample
+to 0 at the beginning of each row. (spdiff.c)
+ - The CCITTFaxDecode filter didn't correctly handle the case where
+the last code of a row occurred less than 7 or 8 bits before the end of the
+input stream. (scf.h, shc.h, scfd.c)
+ - Flushing filters didn't work. (stream.c)
+ - The DCTEncode filter gave an error if asked to write to a string
+with less than 100 bytes of free space left when the end of the input data
+was reached. (sdct.h, sdcte.c)
+
+Removes all remaining uses of #define'd casts in connection with ENUM_PTRS
+and RELOC_PTRS procedures. (stream.c)
+
+Changes the ASCII85Encode stream to reliably insert a newline at least once
+every 80 characters, rather than unreliably after at most 80 characters of
+data. (sfilter2.c)
+
+Cleans up some formatting. (stream.c)
+
+</pre><h3><a name="5.86_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - A client wasn't updated for the change in the declaration of
+gx_dht_proc. (bug introduced in 5.84) (genht.c)
+ - When rendering a 12-bit-per-sample color image, the device color
+wasn't initialized, possibly causing a memory access error when comparing
+the current color with the previous one. (gxi12bit.c)
+ - arch_floats_are_IEEE was incorrectly defined as
+arch_floats_are_ieee. (bug introduced in 5.83) (std.h)
+ - Decoding of IEEE floats on non-IEEE systems was wrong. (ibnum.c)
+ - The fast case of masked images in Pattern color spaces didn't
+work. (bug introduced since 5.50) (gxifast.c)
+ - cshow gave an error if there was no current point. (gxchar.c)
+
+Replaces TEXT_REPLACE_{X,Y}_WIDTHS with a single TEXT_REPLACE_WIDTHS.
+(gstext.h, gstext.c)
+
+Cleans up some macros. (gdevddrw.c, gsfont.c, gsht1.c)
+
+Removes all remaining uses of #define'd casts in connection with ENUM_PTRS
+and RELOC_PTRS procedures. (gdevddrw.c, gdevplnx.c, gsalloc.c, gschar.c,
+gscolor.c, gscolor2.c, gscrd.c, gscsepr.c, gscspace.c, gsdevice.c, gsdsrc.c,
+gsfcmap.c, gsfont.c, gsfont0.c, gsht1.c, gshtscr.c, gsimage.c, gspcolor.c,
+gsptype1.c, gsstate.c, gstext.c, gxcmap.c, gxht.c, gxipixel.c, gxmclip.c,
+gxtype1.c)
+
+Adds gs_c_param_list_write_more, to switch a C parameter list back to write
+mode without clearing it. (gsparam.h, gscparam.c)
+
+Adds gs_grestore_only, to do a grestore without requiring 2 entries on the
+graphics state stack. (gsstate.h, gsstate.c)
+
+Completes a first bridge between the new driver text_begin procedure and the
+existing text API defined in gschar.h. The changes are backward-compatible
+for both clients of the APIs and (the few) implementors of text_begin,
+except that the font argument of text_begin is no longer const. Note that
+gschar.h is no longer used by any client, and in fact is deprecated.
+(gschar.h, gstext.h, gxfcache.h, gxtext.h, gzstate.h, gdevbbox.c,
+gdevnfwd.c, gschar.c, gsfont.c, gsfont0.c, gstext.c)
+
+Mostly splits off the existing text procedures from the default
+implementation of the new text facilities. (lib.mak, gxchar.h, gschar.c,
+gxchar.c)
+
+Makes the structure descriptor for gs_state public, for testing in gxchar.c.
+(gzstate.h, gsstate.c)
+
+Adds is_width_only and current_width procedures to the text enumerator;
+renames restart as retry, and adds a restart procedure for restarting with
+different parameters. (gstext.h, gxtext.h, gdevbbox.c, gschar.c, gstext.c,
+gxchar.c)
+
+Makes the masks for the subgroups of text operation parameters public.
+(gstext.h)
+
+Removes members of gs_show_enum that are superseded by members of
+gs_text_enum_t: current_char, current_glyph, width, and log2_current_scale.
+(gxchar.h, gxchar.c)
+
+Adds aliases for popen and pclose under WIN32. (pipe_.h)
+
+Moves gs_incachedevice from gschar.h to gsstate.h. (gschar.h, gsstate.h)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.85"></a>Version 5.85 (tester) (5/29/99)</h2>
+
+<p>
+This fileset removes a few more writable statics, and adds uniform support
+for %filedevice%filename syntax in OutputFile. Unfortunately, removing the
+static that held the interpreter's allocator group was almost as much of an
+upheaval as removing the statics for the interpreter stacks.
+
+<h3><a name="5.85_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Interpreter)
+ - context_state_alloc now takes an additional parameter, as do
+obj_cvp, make_packed_array, parse_real_file_name, ref_stack_store,
+sread/write_proc, terminate_file_name, and a number of other internal
+interpreter procedures.
+ - scan_number now does not mark the result as new.
+ - The _param_list_read/write procedures now take an additional
+gs_ref_memory_t * parameter.
+ - It is no longer possible to store pointers to the interpreter's
+allocator group (gs_dual_memory_t) in structures or variables across a
+garbage collection.
+ - The save_level instance variable is moved from gs_dual_memory_t
+to gs_ref_memory_t.
+ - op_show_finish_setup can now fail.
+ - fname.h is renamed gsfname.h; the procedure names and parameters
+for %device%name file names are changed.
+ - gx_imager_stroke_add now takes an additional argument; a NULL
+value for the device argument of gx_stroke_path_only is no longer valid.
+ - gx_make_clip_translate_device now takes a memory parameter, and no
+container parameter; gx_make_clip_device no longer takes a container
+parameter; gx_mask_clip_initialize and tile_clip_initialize now take a
+memory parameter.
+
+</pre><h3><a name="5.85_Documentation"></a>Documentation</h3><pre>
+
+Fixes problems:
+ - The language documentation still referred to outside clipping.
+(doc/Language.htm)
+
+Documents the new curve join graphics state parameter. (doc/Language.htm)
+
+Documents the fact that the OutputFile device parameter now supports the
+%device%file syntax. (gp.h, doc/Use.htm)
+
+Documents the licensing problems related to GNU readline. (int.mak,
+unix-gcc.mak, gp_gnrdl.c)
+
+</pre><h3><a name="5.85_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - The bmpa devices needed gdevppla. (bug introduced in 5.84)
+(devs.mak)
+ - The bmpa devices were accidentally included in the DEVICE_DEVS
+setting in the distributed fileset. (unix-gcc.mak)
+ - msvclib.mak was missing some definitions. (msvclib.mak)
+
+Adds a CC_NO_WARN macro for those few files that produce tons of warnings
+that we can't work around. (bcwin32.mak, dvx-gcc.mak, msvccmd.mak,
+openvms.mak, openvms.mmk, os2.mak, ugcclib.mak, unix-gcc.mak, unixansi.mak,
+unixtrad.mak, watcw32.mak, wccommon.mak, devs.mak, lib.mak, zlib.mak)
+
+Adds version.mak to msvclib.mak, so library clients can track the version.
+(msvclib.mak)
+
+</pre><h3><a name="5.85_Utilities"></a>Utilities</h3><pre>
+
+Fixes problems:
+ - -replace didn't work if it was the last item of a module
+description. (genconf.c)
+
+</pre><h3><a name="5.85_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - CCITTFax-compressed bitmaps sometimes used both a Rows value and
+an end-of-block indicator, which some PostScript implementations don't
+handle properly. (gdevpsdf.h, gdevps.c, gdevpsdf.c)
+
+Removes an unused procedure and macro. (gdevlj56.c)
+
+</pre><h3><a name="5.85_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - The interpreter cached objects even if the reference had the wrong
+generation number, causing errors if a correct reference occurred later.
+(lib/pdf_base.ps)
+ - Embedded TrueType fonts using the Macintosh encoding sometimes
+caused an error. (lib/gs_ttf.ps)
+
+</pre><h3><a name="5.85_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - Multiple contexts were broken (probably since 5.80). Fixing this
+required adding a parameter to context_state_alloc, to provide systemdict.
+(icontext.h, icontext.c, interp.c)
+ - setpagedevice didn't accept the 4-element PageSize values that
+appear in the InputAttributes dictionary. (zmedia2.c)
+ - BuildChar/BuildGlyph was "short circuited" even in some cases
+where it wasn't safe to do so. (ichar.h, zchar.c, zcharout.c)
+ - The show operators didn't properly handle the special case of
+executing within a cshow procedure. (ichar.h, zcfont.c, zchar.c, zcharx.c)
+ - The -dDOINTERPOLATE switch had gotten broken somehow.
+(lib/gs_init.ps)
+ - The is_identity flag wasn't properly cleared when loading cached
+CIE mapping values, causing incorrect output. (zcie.c)
+
+Removes the writable static for the context scheduler. (zcontext.c)
+
+Removes the writable static for the interpreter's group of allocators
+(gs_imemory). This too turned out to be a massive change with many
+NON-BACKWARD-COMPATIBLE changes required in internal procedures. (bfont.h,
+files.h, fname.h, ialloc.h, ifunc.h, imemory.h, interp.h, iparam.h,
+iparray.h, ipcolor.h, isave.h, iscannum.h, istack.h, istream.h, iutil.h,
+store.h, ialloc.c, icontext.c, idebug.c, idict.c, iinit.c, imain.c,
+imainarg.c, interp.c, iparam.c, ireclaim.c, isave.c, iscan.c, iscanbin.c,
+iscannum.c, isstate.h, istack.c, iutil.c, zarray.c, zbfont.c, zcontext.c,
+zdict.c, zfname.c, zdps.c, zdps1.c, zfcmap.c, zdict.c, zfile.c, zfilter.c,
+zfont.c, zfont0.c, zfproc.c, zfreuse.c, zfunc.c, zfunc0.c, zfunc3.c,
+zgeneric.c, zht2.c, ziodev.c, ziodev2.c, zpacked.c, zpcolor.c, zshade.c,
+zupath.c, zvmem.c)
+
+Adds a gs_memory_t * argument to obj_cvp. This is part of the work for
+removing the gs_imemory static: we note it separately because it affects
+code beyond the interpreter. (iutil.h, gp_gnrdl.c, iutil.c, zfileio.c)
+
+Updates interpreter code for the addition of new_mask, test_mask, and
+save_level to gs_ref_memory_t, and the removal of save_level from
+gs_dual_memory_t. (ialloc.h, ialloc.c, isave.c)
+
+Adds a gs_ref_memory_t * argument to all the _param_list_read/write
+procedures. (iparam.h, iparam.c, zcrd.c, zdevice.c, zfdctd.c, zfdcte.c,
+zfdecode.c, zfilter2.c, ziodev2.c, zusparam.c)
+
+Changes the hack in file_alloc_stream that determines whether a gs_memory_t
+* is actually a gs_ref_memory_t *. The former code tested specifically
+whether the allocator was one of the current interpreter allocators; the new
+code simply tests the procedure vector. We aren't 100% sure that this
+change will work reliably. (zfile.c)
+
+Factors common code out of isave.h and store.h. (idosave.h, isave.h,
+store.h)
+
+Removes the reclaim_data member of gs_dual_memory_t, since it is no longer
+useful. (imemory.h, ialloc.c, ireclaim.c)
+
+Makes the default InputAttributes and OutputAttributes elements of page
+device dictionaries writable and (if possible) allocated in local VM, to
+work around bugs in the output of Word Perfect. (lib/gs_setpd.ps)
+
+Modifies the interpreter's error printout to indicate whether dictionaries
+on the stack(s) are writable. (lib/gs_init.ps)
+
+Moves support for %device%name file naming into the library. (fname.h,
+zfile.c, zfname.c [deleted])
+
+Adds interpreter support for the new curve join graphics state parameter.
+(zgstate.c)
+
+</pre><h3><a name="5.85_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - bbox_fill_path device didn't interact with compositors correctly.
+(This problem had no practical effect.) (gdevbbox.c)
+ - kshow didn't check for CID fonts. (gschar.c)
+ - The bbox and ImageType 3 image enumerators had incorrect GC
+descriptors, possibly causing memory-related crashes. (gsstruct.h,
+gdevbbox.c, gximage3.c)
+ - gx_make_clip_[translate_]device took an obsolete container
+parameter. (gxcpath.h, gsshade.c, gxccache.c, gxfill.c, gxstroke.c)
+ - Non-transient clipping devices were used for image clipping, but
+the API didn't support creating them. (gxcpath.h, gxclip.c, gximage3.c,
+gxipixel.c)
+ - Some devices were created without setting their memory member,
+which caused the GC not to trace pointers to them. (gxmclip.h, gxclip2.h,
+gxclip2.c, gximage3.c, gxmclip.c, gxp1fill.c)
+ - The bbox device didn't handle ImageType 3 images correctly.
+(gdevbbox.c)
+ - When the bbox device passed a stroke operation to the library, it
+didn't pass the device, causing absolute-length dots to render incorrectly.
+Fixing this required adding a device parameter to the gx_imager_stroke_add
+procedure. (gxpaint.h, gdevbbox.c, gxpaint.c)
+ - The counter control OtherSubrs (12 and 13) weren't implemented.
+(This probably had no effect.) (gstype1.c)
+ - Type 1 stem hints with negative widths didn't work properly.
+(gxhint2.c)
+ - The debugging output for hintmask and cntrmask printed the vstem
+and hstem counts in the wrong order. (gstype2.c)
+ - If the value of the OutputFile device parameter was too long,
+the result could be memory corruption rather than a rangecheck error.
+(gsdevice.c)
+ - The dash pattern pointer in the saved imager state of a band list
+writer could point inside the writer structure, confusing the garbage
+collector. (gxclist.h, gxclpath.c)
+
+Adds new_mask, test_mask, and save_level instance variables to
+gs_ref_memory_t. This too is part of the gs_imemory work: we note it
+separately because it is the only piece of this work that affects the
+library. (gxalloc.h, gsalloc.c)
+
+Makes cntrmask at the beginning of a charstring act like vstemhm + cntrmask,
+as with hintmask. This is not documented, but we see it used this way in
+Type 2 CharStrings. (gstype2.c)
+
+Cleans up formatting and macros. (gp.h)
+
+Speeds up the bounding box device by skipping path filling if the entire
+path falls within the already-accumulated bounding box, and by defining the
+device as 8-bit gray to avoid halftone computation. (gdevbbox.c)
+
+Adds a procedure, gs_show_use_glyph, for implementing the show-in-cshow
+hack. (gschar.h, gschar.c)
+
+Moves support for %device%file file naming into the library. (lib.mak,
+gsfname.h, gxiodev.h, gdevpipe.c, gsfname.c)
+
+Makes the OutputFile device parameter recognize %device%file syntax, as well
+as "-" and (on platforms that support pipes) |command. (gp.h, gxdevice.h,
+gdevprn.c, gsdevice.c, gp_unix.c)
+
+Adds a separate graphics state parameter to indicate how to treat joins
+between segments of a flattened curve, for compatibility with Adobe
+interpreters (which apparently always use bevel joins). (gsline.h,
+gxclpath.h, gxline.h, gsline.c, gsstate.c, gxclpath.c, gxclrast.c,
+gxstroke.c)
+
+Changes code slightly, introducing an unnecessary assignment, in order to
+suppress a compiler warning. (gxclpath.c)
+
+Tweaks the CIE_LOAD_CACHE_BODY macro slightly. (gscie.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.84"></a>Version 5.84 (tester) (5/19/99)</h2>
+
+<p>
+This fileset completes the implementation of planar rendering, and fixes a
+few more bugs, some of them surprisingly old.
+
+<h3><a name="5.84_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Drivers)
+ - The dopath vector device implementation procedure was changed to
+take an optional matrix argument.
+(Library)
+ - The internal memory__need_ macros are changed to upper case.
+
+</pre><h3><a name="5.84_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - There was a duplicate entry for GENINIT_XE in the Watcom makefile.
+(wctail.mak)
+
+Adds the duplex-capable LaserJet drivers (ljet3d and ljet4d) to all standard
+configurations. (bcwin32.mak, dvx-gcc.mak, msvc32.mak, openvms.mak,
+openvms.mmk, os2.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak, watc.mak,
+watcw32.mak)
+
+Adds a PROFILE compilation switch, similar to DEBUG, to work around the fact
+that gprof under GNU/Linux doesn't count time in memset, memcpy, or other C
+library procedures. PROFILE will substitute our own versions of memset,
+memcpy, and memmove. Currently, this switch is supported only on Unix.
+(unix-end.mak)
+
+Defines a new makefile macro, SYNC, that gives the module name for thread /
+synchronization facilities; makes async.dev include this module. This is
+posync on Unix and VMS platforms, winsync on MS Windows and OS/2 platforms.
+(bcwin32.mak, dvx-gcc.mak, lib.mak, msvc32.mak, msvclib.mak, openvms.mak,
+openvms.mmk, os2.mak, ugcclib.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak,
+watc.mak, watclib.mak, watcw32.mak)
+
+Splits off the rules common to the 3 Windows makefiles (watc, watclib,
+winlib) into a separate file, defining new modules winplat.dev and
+winsync.dev. (watc.mak, watclib.mak, winlib.mak, winplat.mak)
+
+Removes -Wcast-align from the gcc switches, since this produces huge numbers
+of warnings that we will certainly never get rid of. (unix-gcc.mak)
+
+</pre><h3><a name="5.84_Utilities"></a>Utilities</h3><pre>
+
+Enhances the ps2pdf script with a patch contributed by Jim Avera
+(avera@fjst.com) so that it can be used as a pipe by specifying "-" for the
+input and/or output file. (lib/ps2pdf)
+
+Modifies ps2ascii to handle landscape pages better. (lib/ps2ascii.ps)
+
+</pre><h3><a name="5.84_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - PDF output that used Pattern colors on more than one page failed
+to include the color space resource in the resource dictionaries of pages
+other than the first. (gdevpdf.c)
+ - The PDF writer emitted bitmap patterns inverted in Y.
+(gdevpdfi.c)
+ - The PCL XL driver's GC descriptor had become incorrect, causing
+crashes. (gdevpx.c)
+ - The pdfwrite driver could still emit coordinates too large for
+Acrobat Reader to handle, for stroked lines with an unusual CTM.
+(gdevpdfd.c)
+ - The pxl drivers emitted invalid output for dashed lines.
+(gdevpx.c)
+ - The [e]pswrite and pxl drivers scaled line widths and dash
+patterns incorrectly. Fixing this properly involved refactoring the
+handling of scaling for paths, and removing gdev_vector_stroke_path.
+(gdevpsdf.h, gdevvec.h, gdevpdfd.c, gdevps.c, gdevpsdf.c, gdevpx.c,
+gdevvec.c)
+ - The lj5 drivers didn't pad images to a multiple of 4 bytes per
+scan line, producing invalid PCL XL output. (We don't see how they could
+ever have worked, in fact.) (gdevpcl.h, gdevlj56.c, gdevpcl.c)
+
+Adds a user-contributed driver for the DEClaser 2100. This is a GPL'ed
+driver. (contrib.mak, gnu/src/gdevln03.c)
+
+Makes the UsePlanarBuffer parameter, and planar buffering capability, from
+the PPM devices available to general printer devices, but in a separate
+module to avoid making all printer devices require gdevmpla.c. (gdevppla.h,
+gdevpbm.c, gdevppla.c)
+
+Adds a UsePlanarBuffer parameter to the async BMP drivers, for testing.
+(gdevbmpa.c)
+
+Removes the comment about the instability of the "vector" driver interface.
+(gdevvec.h, gdevvec.c)
+
+</pre><h3><a name="5.84_Platforms"></a>Platforms</h3><pre>
+
+Splits off the Windows thread and synchronization primitives into a new file
+and a new module, winsync.dev. (watc.mak, watclib.mak, winlib.mak,
+gp_win32.c, gp_wsync.c)
+
+</pre><h3><a name="5.84_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - As usual, gcc failed to flag some signed/unsigned char mismatches.
+(gp_gnrdl.c, iutil.c)
+
+Moves the indexed color space cache lookup procedure from the interpreter to
+the library. (zcsindex.c)
+
+</pre><h3><a name="5.84_Streams"></a>Streams</h3><pre>
+
+Fixes problems:
+ - If a 2-D CCITTFax stream ended with 1 or 2 "vertical 0" codes,
+those codes would be ignored. (scfd.c)
+
+</pre><h3><a name="5.84_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - gsnogc.h contained an extern for gs_gc_reclaim rather than for
+gs_nogc_reclaim. (gsnogc.h)
+ - Banded images in Indexed color spaces rendered incorrectly.
+(gximage.c)
+ - A function declared some arguments as float rather than floatp.
+(gshtx.h, gshtx.c)
+ - As usual, gcc failed to flag some public/private mismatches.
+(gdevmrun.c)
+ - The tracing output for monobit images printed 8 bits per pixel
+rather than 1 bit per pixel. (gxidata.c)
+ - A Pn macro was used in a header file that didn't include stdpre.h.
+(gscdefs.h, gconf.c, genht.c, gxhtbit.c, gxclrast.c)
+ - get_bits_rectangle for the planar memory device didn't flush the
+last byte of each row. (gdevmpla.c)
+ - When banding, Indexed color spaces using a procedure rather than a
+lookup table caused a crash. (gxcolor2.h, gscolor2.c, gxclrast.c)
+ - When filling a region with a Pattern with a rotated matrix, some
+parts of the region could be missed. (bug introduced by a fix in 5.38)
+(gxp1fill.c)
+
+When compiling with gcc, replaces inline with __inline__ to get rid of a
+potential warning. (stdpre.h)
+
+Adds our own implementations of memset, memcpy, and memmove, to work around
+the fact that gprof under GNU/Linux doesn't count time in C library procedures.
+(memory_.h, string_.h, gsmisc.c)
+
+Finishes implementing planar rendering for printer / banded devices.
+(gdevprn.h, gxclist.h, gxdevbuf.h, gdevprn.c, gxclread.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.83"></a>Version 5.83 (tester) (5/13/99)</h2>
+
+<p>
+This fileset was driven mostly by commercial licensee demands; it doesn't
+fix most of the problems reported in 5.82. It features smaller threshold
+halftones, the ability to store halftones in ROM, and a nearly complete
+implementation of a planar memory device.
+
+<p>
+Items pushed off to the next fileset:
+<ul>
+<li> - Finish multi-planar band buffers (requires changing
+gdev_prn_render_lines to be based on memory devices rather than buffer
+pointers).
+<li> - For Adobe compatibility, change stroking so that it always
+uses
+bevel joins between the segments of a curve (this directly contradicts the
+Red Book, but it's what Adobe interpreters do).
+<li> - Implement an IdiomSet for Corel Draw fountain fills?
+(idioms.ps)
+<li> - Change shading so it doesn't install a clip device (make this
+a
+driver procedure instead), because that prevents clist_fill_path from being
+called.
+</ul>
+
+<h3><a name="5.83_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Interpreter)
+ - The spaces.indexed member of a vm_spaces structure has been
+renamed spaces_indexed (a macro).
+ - The gs_reclaim procedure is changed to a macro, GS_RECLAIM.
+(Library)
+ - The bits member of a halftone order is now called bit_data, and is
+opaque; halftone orders are now "objects"; gx_ht_alloc_[ht_]order now take
+an additional argument.
+ - The architectural values in arch.h are now all upper-case.
+(std.h defines lower-case synonyms for backward compatibility.)
+ - The buffer device procedures for printer devices are now collected
+in a structure; this also changes the parameters of clist_init_params.
+ - The parameters of the buffered device setup_buf_device procedure
+are changed.
+ - gx_path_copy_reducing now takes an additional argument, an imager
+state, for flattening stroked paths.
+ - Memory devices now must be created by copying a prototype device,
+rather than by initializing individual members, even if they are only being
+used for limited purposes.
+
+</pre><h3><a name="5.83_Documentation"></a>Documentation</h3><pre>
+
+Documents the new facility for compiled halftones, and the old one for
+compiling initialization files. (doc/Make.htm)
+
+</pre><h3><a name="5.83_Utilities"></a>Utilities</h3><pre>
+
+Adds a utility for compiling halftones into the executable. Also defines
+the dependency lists for the auxiliary programs in lib.mak and int.mak,
+rather than replicating them for every platform. (bcwin32.mak,
+dvx-tail.mak, gs.mak, int.mak, lib.mak, msvctail.mak, openvms.mak,
+openvms.mmk, os2.mak, unix-aux.mak, wctail.mak, genht.c)
+
+Adds support for halftone "resources" in the makefile. (genconf.c)
+
+Adds code to determine the primary and secondary CPU cache sizes
+empirically. (genarch.c)
+
+Changes the architecture definition macros from lower to upper case, with
+lower-case synonyms in std.h for backward compatibility. (gsjconf.h, std.h,
+genarch.c)
+
+Changes the ps2ai utility so that jtxt3 can be set from the command line, to
+allow pstoedit to generate AI3-compatible output. (lib/ps2ai.ps)
+
+</pre><h3><a name="5.83_Procedures"></a>Procedures</h3><pre>
+
+Adds some optional library modules to the base library compilation list, so
+that compilation errors won't slip through. (lib.mak)
+
+</pre><h3><a name="5.83_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - A change from char to byte needed to be undone (gcc didn't catch
+this). (iutil.c)
+
+Adds a 167x167 stochastic halftone that CalComp put in the public domain.
+(lib/ht_ccbnm.ps, int.mak, unixinst.mak)
+
+Updates the interpreter for the change to per-VM-spaces garbage collection.
+(igc.h, ialloc.c, icontext.c, igc.c, ilocate.c, imain.c, interp.c,
+ireclaim.c, isave.c, zfile.c, zht.c, zht1.c, zht2.c)
+
+Updates places that only use gsstruct.h for extern_st to use gsstype.h
+instead. (icontext.h, ifont.h)
+
+</pre><h3><a name="5.83_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - Some types needed updating to reflect the change in the string
+freelists. (gsalloc.c, gsnogc.c)
+ - clip_copy_color didn't initialize some variables in the fastest
+case. (bug probably introduced in 5.83) (gxclip.c)
+ - The fit_fill_ and fit_copy_ macros didn't always parenthesize
+their dev argument. (gxdevice.h)
+ - The sample_load macros returned the wrong results for depth 1 and
+2. Amazingly enough, it appears that this case had never been used.
+(gsbitops.h)
+ - The standard allocator would free chunks even if is_controlled was
+true. (gsalloc.c)
+ - Stroking drew semicircles rather than full circles for round
+joins. (gxstroke.c)
+ - The calculation of how finely to sample a curve to achieve a
+particular flatness didn't take line width into account when stroking (the
+flatness has to apply to the outside of the stroked curve). (gxpath.h,
+gxpcopy.c, gxstroke.c)
+
+Speeds up the bbox device a little. (gdevbbox.c)
+
+Speeds up the most common cases of clipping a little. (gxclip.h,
+gxacpath.c, gxclip.c)
+
+Makes halftone orders more "object-oriented", so we can use an alternate
+representation that trades time for space. This requires a
+NON-BACKWARD-COMPATIBLE CHANGE in the gx_ht_order structure and the
+arguments of gx_ht_alloc_[ht_]order. (gxcldev.h, gxdht.h, gzht.h, gsht.c,
+gsht1.c, gshtscr.c, gshtx.c, gsistate.c, gxcht.c, gxclimag.c, gxclrast.c,
+gxht.c, gxhtbit.c)
+
+Makes it possible to compile-in halftone threshold arrays and orders (e.g.,
+in ROM) so they don't take up RAM at execution time. (gscdefs.h, gxdht.h,
+gxdhtres.h, gzht.h, gconf.c, gsht.c, gsht1.c, gxclrast.c, gxhtbit.c)
+
+Adds some statistics to the 24-bit memory device (in DEBUG mode only, as
+usual). (gdevm24.c)
+
+Makes the 24-bit memory device optionally use memcpy for wide rectangle
+fills. We thought this got us a factor of 3 speedup on a Pentium with gcc's
+library, but it turned out to be a profiler artifact. (gdevm24.c)
+
+Cleans up some formatting. (gxclip.h)
+
+Dusts off the run-length-encoded memory device, changing it so it reverts to
+the unencoded representation when necessary. This code hasn't been tested,
+and is not currently used. (gdevmrun.h, gdevrun.c [deleted], gdevmrun.c)
+
+Adds more statistics to the clipping device. (gxclip.c)
+
+Adds an implementation of the MD5 Algorithm defined in RFC 1321, derived
+directly from the text of the RFC and not from the reference implementation.
+This code uses the zlib license, which is more liberal than the Aladdin or
+GNU licenses. (md5.h, md5.c)
+
+Finishes implementing the planar memory device, including generalizing it to
+store varying numbers of bits per plane rather than 1 bit per plane.
+(gdevmem.h, gdevmpla.h, gxdevmem.h, gdevmem.c, gdevmpla.c)
+
+Updates clients to initialize memory devices more fully, now required to
+distinguish chunky from planar devices. (gxpcmap.c)
+
+Mostly implements enhancing printer / banded devices so they can use a
+planar memory device for rendering and/or band buffering. The code
+currently works only in the non-banded case. (gdevprn.h, gxclist.h,
+gxdevbuf.h, gxdevcli.h, gdevprn.c, gxclist.c, gxclread.c)
+
+For testing, adds a -dUsePlanarBuffer=&lt;boolean&gt; parameter to the PPM devices
+to make them use a planar memory device. (gdevpbm.c)
+
+Cleans up some code formatting. (gdevmem.c)
+
+Makes the garbage collection procedure separately settable for each group of
+VM spaces. (In an environment with "async" rendering, the renderer has its
+owm VM space group.) Unfortunately, this involved a NON-BACKWARD-COMPATIBLE
+change in the vm_spaces structure. (gsgc.h, gsnogc.h, gsnogc.c)
+
+Updates a client for the change in gs_reclaim; also makes the renderer
+thread use the non-tracing garbage collector. (gdevprna.c)
+
+Updates the non-tracing GC to reflect its role as a garbage collection
+procedure in a vm_spaces. (gsnogc.c)
+
+Enhances the non-tracing GC so that if a chunk ever contains no strings, the
+string marking area reserved for the tracing GC is added to free space.
+(gxalloc.h, gsalloc.c, gsnogc.c)
+
+Changes the font cache allocator to use a different structure descriptor for
+its data so that memory dumps will show "font cache bytes" rather than just
+"bytes". (gxccman.c)
+
+Splits gsstruct.h into gsstype.h, which contains enough of the definition of
+structure type descriptors to support extern_st, and gsstruct.h, which is
+needed to actually define structure types. (gsstruct.h, gsstype.h,
+gxfmap.h)
+
+Updates places that only use gsstruct.h for extern_st to use gsstype.h
+instead. (gsbitmap.h, gsccolor.h, gscie.h, gxfont.h, gzpath.h, scommon.h,
+gscdevn.c, gscrd.c, gscrdp.c, gsshade.c, gxpath2.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.82"></a>Version 5.82 (tester) (4/24/99)</h2>
+
+<p>
+This fileset fixes a few odds and ends, removes a couple more writable
+statics, and improves performance in a couple of areas.
+
+<h3><a name="5.82_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Interpreter)
+ - dict_uid_param now takes an additional argument, the interpreter
+context pointer.
+ - obj_cvp now takes a stream rather than a string.
+
+</pre><h3><a name="5.82_Documentation"></a>Documentation</h3><pre>
+
+Documents the -dGraphicsAlphaBits and -dTextAlphaBits switches; reorganizes
+the documentation of the -d/-s switches by function. (doc/Use.htm)
+
+</pre><h3><a name="5.82_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - Building with MSVC didn't work if COMPILE_INITS was selected.
+(msvctail.mak)
+ - The cp script didn't work on all MS-DOS systems, since the systems
+are incompatible with each other in undocumented ways. (cp.bat)
+ - Using ^ in a command line failed on Windows 98. (wccommon.mak)
+ - Watcom compilation under Windows NT didn't include some needed
+headers. (wccommon.mak)
+ - The Watcom compiler's quoting requirements were inconsistent.
+(gs.mak)
+ - GLCCWIN was used without being defined. The MS DOS/Windows
+makefiles really are a tangled mess.... (watc.mak)
+ - The build directories didn't get created automatically when
+compiling with the Watcom compiler. (watc.mak)
+
+Adds more optimization switches for Watcom compilation. (wccommon.mak)
+
+</pre><h3><a name="5.82_Utilities"></a>Utilities</h3><pre>
+
+Adds a pfbtopfa script. (unixinst.mak, lib/pfbtopfa, lib/pfbtopfa.bat,
+lib/pfbtopfa.ps)
+
+</pre><h3><a name="5.82_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - "Vector" drivers (currently only the PCL XL driver) filled
+polygons incorrectly. (gdevvec.c)
+ - The PCL XL drivers produced incorrect output for images. (We
+can't understand how they ever could have worked.) (gdevpx.c)
+ - The PCL XL drivers skipped blank pages. (gdevpx.c)
+ - The page origin for the clj driver was set incorrectly. (fix from
+Artifex) (gdevclj.c)
+ - The map_color_rgb procedure for the 32-bit CMYK bmp device was
+wrong, causing RasterOps to produce incorrect output. (fix from Artifex)
+(gdevbmp.c)
+
+Works around a bug in Acrobat Reader's Print command, by changing the
+scaling for bitmap patterns. (gdevpdfi.c)
+
+Cleans up some formatting and macros. (gdevpx.c)
+
+Factors out some common parameter-putting utilities. (gdevpsdf.h,
+gdevpdfp.c, gdevpsdp.c)
+
+</pre><h3><a name="5.82_Platforms"></a>Platforms</h3><pre>
+
+Fixes problems:
+ - The DLL code "knew" it could only be compiled on Windows and OS/2
+platforms. (gsdll.c)
+
+Removes a Mac-specific file that is now moved to the Mac-specific archive.
+(gsdllmac.h [deleted])
+
+</pre><h3><a name="5.82_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - An invalidaccess could occur when repositioning the file after
+executing an image XObject. (lib/pdf_draw.ps)
+ - Indexed color spaces gave an error if the underlying space was
+represented as a name rather than an array. (bug introduced in 5.80)
+(lib/pdf_draw.ps)
+
+</pre><h3><a name="5.82_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - The interpreter reentrancy changes broke the GNU readline
+interface. (gp_gnrdl.c, ziodev.c)
+ - The TrappingType resource category wasn't defined.
+(lib/gs_res.ps, lib/gs_trap.ps)
+ - CIE color spaces in shading patterns didn't work. (lib/gs_ll3.ps)
+ - Printing a string of more than 200 characters with == was broken.
+Fixing this required a NON-BACKWARD-COMPATIBLE change in the argument list
+of obj_cvp. (bug introduced in 5.80) (iutil.h, gp_gnrdl.c, idebug.c,
+iutil.c, zfileio.c)
+
+Changes the interpreter trace output to be somewhat more readable.
+(interp.c)
+
+Makes the linking of the binary token scanning procedure static rather than
+dynamic. (int.mak, inobtokn.c, iscan.c, zbseq.c)
+
+Makes the language level a property of the context, eliminating a writable
+static. (icstate.h, idparam.h, ilevel.h, icontext.c, idparam.c, iinit.c,
+interp.c, zcontext.c, zmisc2.c)
+
+Updates clients for the change in dict_uid_param. (zbfont.c, zfcmap.c,
+zpcolor.c, zshade.c)
+
+</pre><h3><a name="5.82_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - There was a signed/unsigned char * mismatch. (sfxfd.c)
+ - Some very picky compilers complained inappropriately about a
+const/non-const mismatch. (gxcht.c)
+ - The format of the string freelists didn't allow chunks with more
+than 64K bytes of string area. (gxalloc.h, gsnogc.c)
+
+Moves the interface definitions for the memory dump debugging code into a
+header file. (gxalloc.h, gsalloc.c)
+
+Makes the standard memory manager recognize more effectively when it can
+reset the high-water mark for occupied space in the current chunk. This
+turns out to make a big difference in preventing sandbars. (gxalloc.h,
+gsalloc.c)
+
+Makes clipping lists keep track of their minimum and maximum X values, so
+that they can return accurate outer clipping boxes, which in turn allows
+more effective pre-clipping of filled regions. (gxcpath.h, gxacpath.c,
+gxclip.c, gxcpath.c)
+
+Makes clipping devices cache their clipping box, so they can return it
+quickly. (gxcpath.h, gxclip.c)
+
+Makes the colored halftone logic check bounding boxes before running the
+expensive algorithms. This improves performance dramatically for some files
+without costing much for the rest. (gxcht.c)
+
+Adds some more debugging printout for clipping lists. (gxcpath.c)
+
+Cleans up formatting and macros. (gdevdflt.c, gdevhit.c, gdevnfwd.c)
+
+Factors out some common parameter-putting utilities. (gsparamx.h,
+gsparamx.c, gstrap.c)
+
+Adds some more tracing output for images. (gxidata.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.81"></a>Version 5.81 (tester) (4/14/99)</h2>
+
+<p>
+This fileset cleans up most of the bug tail from 5.80, but it doesn't fix
+all the reported problems. It also factors out the platform-specific DLL
+calls, and extends the DLL API to the Mac.
+
+<h3><a name="5.81_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Platforms)
+ - gsdll_get_bitmap is now defined in gsdllos2.h; gsdll_copy_dib,
+_copy_palette, _draw, and _get_bitmap_row are now defined in gsdllwin.h.
+
+(Interpreter)
+ - zcolor_remap_one may return 0 rather than o_push_estack. (This
+change actually occurred in 5.80, but was not documented.)
+
+(Library)
+ - The initialized parameters of an image scaling filter are now
+stored in a subsidiary structure.
+ - The names max_support and log2_max_support are changed to
+MAX_ISCALE_SUPPORT and LOG2_MAX_ISCALE_SUPPORT.
+ - The structure definition for the smoothed image scaling filter is
+now private, although its descriptor remains public.
+ - The criteria for when to use Interpolate are now more stringent.
+
+</pre><h3><a name="5.81_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - gs_trap.ps wasn't installed by `make install'. (unixinst.mak)
+ - A semicolon was missing in one definition of GS_LIB_DEFAULT.
+(watc.mak)
+ - ll.tr and _temp_.tr weren't created in the obj directory.
+(watc.mak, wctail.mak)
+ - RM_ was defined incorrectly on one platform. (wccommon.mak)
+
+</pre><h3><a name="5.81_Utilities"></a>Utilities</h3><pre>
+
+Makes some minor edits in ansi2knr, contributed by a user, to remove gcc
+warnings. (ansi2knr.c)
+
+</pre><h3><a name="5.81_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - There was an int/uint mismatch. (gdevbmpa.c)
+ - There was a const/non-const mismatch. (gdevbmpa.c)
+
+Changes the p*m drivers so that they use the default color mapper when
+possible, speeding up execution. (gdevpbm.c)
+
+</pre><h3><a name="5.81_Fonts"></a>Fonts</h3><pre>
+
+Adds Black as indicating that a bold font should be substituted if
+necessary. (lib/gs_fonts.ps)
+
+</pre><h3><a name="5.81_Platforms"></a>Platforms</h3><pre>
+
+Fixes problems:
+ - The Watcom NT compiler implements setmode and fileno but not
+_setmode and _fileno. (gp_ntfs.c)
+ - The procedure parameter passed to the Windows _beginthread
+procedure had the wrong prototype. (gp_win32.c)
+ - Watcom's _beginthread procedure takes an extra argument.
+(windows_.h, gp_win32.c)
+
+Extends the DLL API to work on the Mac. This required some restructuring of
+the code, and some NON-BACKWARD-COMPATIBLE changes to move
+environment-specific calls into environment-specific header files.
+(pcwin.mak, os2.mak, winint.mak, dwdll.h, gsdll.h, gsdllmac.h, gsdllos2.h,
+gsdllwin.h, dpmainc.c, dwdll.cpp, dwnodll.cpp, gdevmswn.c, gdevpm.c,
+gdevwdib.c, gsdll.c)
+
+</pre><h3><a name="5.81_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Changes the interpreter to handle two more specification-violating
+conditions that Adobe Acrobat accepts: truncation of %%EOF to %%EO, and use
+of Dest links with no Dests dictionary. (lib/pdf_main.ps)
+
+</pre><h3><a name="5.81_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - gcc failed to flag initialization of an automatic aggregate, which
+is allowed in neither ANSI nor traditional C. (iutil.c)
+ - The system name table lacked the last 3 entries.
+(lib/gs_btokn.ps)
+ - Interpolated images always wound up at (0, 0). (bug introduced in
+5.80) (gxipixel.c)
+ - The Watcom compiler didn't consider "const uint" and "const
+unsigned" to be compatible. (ifunc.h)
+ - The code to detect identity transfer functions could cause
+transfer functions not to be processed at all. (icolor.h, zcolor.c,
+zcolor1.c, zht2.c)
+ - The Level 2 redefinition of restore could do an extra grestore,
+possibly creating a temporary reference to a freed object. (zdevice2.c)
+
+Adds more tracing for undo-saves, and changes a macro to a procedure.
+(isave.c)
+
+Removes some #define'd casts. (isave.c)
+
+</pre><h3><a name="5.81_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - When banding, the color space wasn't reinitialized for each page.
+(gxclist.c)
+ - The criterion for allowing image interpolation still produced
+"mush" for some important classes of image. (gxiscale.c)
+ - The Watcom compiler didn't consider "const uint" and "const
+unsigned" to be compatible. (gscdefs.h, gconf.c)
+ - Identity black generation and undercolor removal functions weren't
+passed through the band list correctly. (gxcldev.h, gxclbits.c, gxclrast.c)
+ - Once again, gcc failed to give a warning for extern followed by
+private. (gxcdevn.h)
+ - glyphshow set up the text operation in a way that created a
+garbage collector error. (gschar.c)
+
+Makes gs_opendevice complete the device procedure vector if the device
+wasn't already open. (gsdevice.c)
+
+Factors out the image scaling filter so that we can use either Adobe's
+algorithm or the Mitchell filter. This involves a NON-BACKWARD-COMPATIBLE
+CHANGE in the way the filter parameters are defined. (gximage.h, siscale.h,
+sisparam.h, gxclimag.c, gxidata.c, gxiscale.c, siscale.c)
+
+Makes the criteria for when to use interpolation stricter, since we are
+still using the Mitchell filter. (gxiscale.c)
+
+Starts to implement Adobe's image interpolation algorithm. (siinterp.h,
+siinterp.c, gxiscale.c)
+
+Speeds up RGB interpolated images by detecting runs of output color.
+(gxiscale.c)
+
+Makes the default RGB color mapper a "known" mapper that can be propagated
+through device pipelines. (gxdevice.h, gsdevice.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.80"></a>Version 5.80 (tester) (4/6/99)</h2>
+
+<p>
+This version contains the first, and, we hope, largest wave of changes in
+the interpreter required to make the interpreter fully reentrant.
+Unfortunately, many externally visible APIs, including the argument list for
+operator procedures, required changes.
+
+<p>
+Because of the magnitude of the change, we incremented the version number to
+5.80.
+
+<p>
+The non-backward-compatible API changes were confined to the interpreter:
+the (very minor) changes to the library required to support interpreter
+reentrancy are fully backward-compatible.
+
+<p>
+This fileset also implements DeviceN color spaces (always using the
+alternate space), including Indexed spaces over DeviceN spaces, for all uses
+except smooth shading.
+
+<h3><a name="5.80_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Interpreter)
+ - names_init now takes a gs_ref_memory_t * rather than a gs_memory_t
+*.
+ - type_print_strings, type_name_strings, and
+ref_type_properties_data are now REF_TYPE_DEBUG_PRINT_STRINGS,
+REF_TYPE_NAME_STRINGS, and REF_TYPE_PROPERTIES_DATA.
+ - The undocumented .writecvp operator, and obj_cvp, now take an
+integer instead of a Boolean to define the type of output desired.
+ - The argument list for operators is changed from os_ptr to
+i_ctx_t *. Many internal interpreter APIs have changed.
+ - The typedef name for operator procedures is changed from op_proc_p
+to op_proc_t.
+ - gs_interpret now takes an additional context (i_ctx_t **)
+argument.
+ - The interpreter's rescheduling and time-slicing procedures,
+gs_interp_reschedule_proc and gs_interp_time_slice_proc, now take a context
+(i_ctx_t **) argument.
+ - The Type 1 interpreter push_value callback is renamed push_values;
+the first argument of push_values and pop_value has changed from
+gs_font_type1 * to void *.
+ - dict_put*, dict_copy*, dict_undef, dict_resize, dict_grow, and
+dict_unpack now take an additional argument, a dictionary stack where the
+dictionary may be present.
+
+</pre><h3><a name="5.80_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - The dependency list for the (dummy) trapping feature was wrong.
+(int.mak)
+ - The directory for jerror_.h was incorrect. (jpeg.mak)
+
+Removes the never-used -header switch from genconf. (genconf.c)
+
+Adds priority-sorted resources to genconf, currently used only for image
+classes. (genconf.c)
+
+Adds an imageclass resource to genconf, for what used to be called image
+strategies. (genconf.c)
+
+</pre><h3><a name="5.80_Utilities"></a>Utilities</h3><pre>
+
+Fixes problems:
+ - ansi2knr didn't recognize id1(id2, xxxxx) as not being a function.
+(ansi2knr.c)
+ - viewpcx still referred to the deleted PCXDecode filter.
+(lib/viewpcx.ps)
+ - strlen was called without being declared. (genarch.c)
+
+</pre><h3><a name="5.80_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - Some drivers that called gdev_prn_open_printer didn't check the
+return code for errors. (gdevdjet.c, gdevhl7x.c)
+ - The cljet5 driver didn't handle long-edge feed properly. (from
+Artifex) (gdevclj.c)
+ - The [e]pswrite driver could produce incorrect output if the input
+file had zero-length lines. (gdevps.c)
+ - The X driver didn't handle byte-swapped 16-bit displays.
+(gdevx.c)
+ - There was an int/uint mismatch. (gdevbmp.c)
+ - Some needed headers weren't included. (gdevdcrd.c, gdevpdfo.c)
+ - The updated mswinpr2 driver wouldn't compile with older Windows
+header files. (gdevwpr2.c)
+
+Removes some unnecessary #includes. (gdevps.c)
+
+Adds user-contributed drivers for the CoStar LabelWriter II Plus and XL
+label printers. (gdevcslw.c)
+
+Speeds up color mapping for the bitrgb driver a little, by using the default
+procedure. (gdevbit.c)
+
+</pre><h3><a name="5.80_Fonts"></a>Fonts</h3><pre>
+
+Fixes problems:
+ - TrueType fonts with odd-length glyf definitions caused an
+invalidfont error. (lib/gs_ttf.ps)
+
+Changes the font substitution mechanism slightly to be more useful to the
+PDF interpreter. (lib/gs_fonts.ps)
+
+</pre><h3><a name="5.80_Platforms"></a>Platforms</h3><pre>
+
+Fixes problems:
+ - Some needed headers weren't included. (watc.mak, watclib.mak,
+winlib.mak, gp_win32.c)
+
+</pre><h3><a name="5.80_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - There were many signed/unsigned char type errors that gcc didn't
+catch. (gp_gnrdl.c)
+ - The operator definition list for zdouble was too long. (int.mak,
+zdouble.c)
+
+Removes some unnecessary #includes. (zchar.c)
+
+Speeds up names_string_ref. (inamedef.h, inames.h, imain.c, iname.c)
+
+Speeds up reading string/name array parameters. (iparam.c)
+
+Refactors the implementation of ==, so that all types other than arrays and
+dictionaries are handled in C code. (lib/gs_init.ps, iutil.h, iref.h,
+gp_gnrdl.c, idebug.c, iutil.c, zfileio.c, ztype.c)
+
+Changes the type name for operator procedures from op_proc_p to op_proc_t,
+for consistency and also to help detect places that need the argument list
+changed. (ichar.h, interp.h, iref.h, opdef.h, interp.c, iutil.c, zchar.c,
+zcharx.c, zcontrol.c, zupath.c)
+
+Changes the argument type for operators from os_ptr to i_ctx_t *. (i_ctx_t
+is an alias for gs_context_state_t.) This also requires adding a context
+pointer to many internal procedures, or changing an os_ptr argument to
+i_ctx_t *. This is a MASSIVE NON-BACKWARD-COMPATIBLE change which we simply
+saw no way to avoid if the interpreter was to be made fully re-entrant. See
+"Incompatible changes" above for externally visible changes.
+(lib/gs_init.ps, bfont.h, btoken.h, dstack.h, estack.h, files.h, ichar.h,
+ichar1.h, icharout.h, icie.h, icolor.h, icontext.h, icsmap.h, ifilter.h,
+ifont1.h, igstate.h, iht.h, iimage.h, iimage2.h, imain.h, imemory.h,
+interp.h, ipacked.h, iref.h, iscan.h, istream.h, opdef.h, oper.h,
+opextern.h, ostack.h, ialloc.c, icontext.c, iinit.c, imain.c, inouparm.c,
+interp.c, ireclaim.c, iscan.c, iscanbin.c, zarith.c, zarray.c, zbfont.c,
+zbseq.c, zcfont.c, zchar.c, zchar1.c, zchar2.c, zchar32.c, zchar42.c,
+zcharout.c, zcharx.c, zcid.c, zcie.c, zcolor.c, zcolor1.c, zcolor2.c,
+zcontext.c, zcontrol.c, zcrd.c, zcsdevn.c, zcsindex.c, zcspixel.c,
+zcssepr.c, zdevice.c, zdevice2.c, zdict.c, zdosio.c, zdouble.c, zdpnext.c,
+zdps.c, zdps1.c, zfbcp.c, zfcmap.c, zfdctd.c, zfdcte.c, zfdecode.c, zfile.c,
+zfileio.c, zfilter.c, zfilter2.c, zfilterx.c, zfont.c, zfont0.c, zfont1.c,
+zfont2.c, zfont32.c, zfont42.c, zfproc.c, zfreuse.c, zfunc.c, zfzlib.c,
+zgeneric.c, zgstate.c, zhsb.c, zht.c, zht1.c, zht2.c, zimage.c, zimage2.c,
+zimage3.c, ziodev.c, ziodev2.c, zmath.c, zmatrix.c, zmedia2.c, zmisc.c,
+zmisc1.c, zmisc2.c, zmisc3.c, zpacked.c, zpaint.c, zpath.c, zpath1.c,
+zpcolor.c, zrelbit.c, zrop.c, zshade.c, zstack.c, zstring.c, zsysvm.c,
+ztoken.c, ztrap.c, ztype.c, zupath.c, zusparam.c, zvmem.c, zvmem2.c)
+
+Changes caching for the interpreter's CIE color spaces so that instead of
+changing the color space installation procedure to one that schedules the
+sampling of the procedures though a back door, it leaves the installation
+procedure alone and schedules the sampling in the color-space-specific
+setcolorspace operator. This is needed for interpreter reentrancy.
+(icie.h, zcie.c, zcrd.c)
+
+Makes the linkage from the dictionary machinery to the cached values in the
+dictionary stack and the name table explicit, by adding a dstack pointer to
+all the relevant dict_* procedures. This is needed for interpreter
+reentrancy. (iddstack.h, idict.h, idstack.h, idict.c)
+
+Updates clients for the change in the dictionary API. For each changed
+dict_ procedure, we add an idict_ procedure that uses i_ctx_p-&gt;dict_stack as
+the additional argument. (iddict.h, icontext.c, iinit.c, interp.c,
+iparam.c, iscanbin.c, zdps.c, zfcmap.c, zdict.c, zfont.c, zfont0.c,
+zgeneric.c, zht2.c, zmisc2.c)
+
+Changes Pattern color remapping so that it saves information in the
+interpreter's part of the graphics state, rather than manipulating the
+e-stack directly. This is needed for interpreter reentrancy. (errors.h,
+icremap.h, igstate.h, interp.c, zgstate.c, zpcolor.c)
+
+Adds to the "main instance" structure a pointer to the currently executing
+context. This is needed for interpreter reentrancy. (imain.h, iminst.h,
+main.h, imain.c, imainarg.c)
+
+Changes the argument list for operator initialization procedures from void
+to i_ctx_t *. (opdef.h, ireclaim.c, zbfont.c, zbseq.c, zcontext.c, zfile.c,
+zfont.c, zpcolor.c)
+
+Changes the initialization of the interpreter's allocators so it doesn't
+presume the allocator structure is global. (ialloc.h, ialloc.c, imain.c)
+
+Factors out the structure definition of the stacks, which is needed for
+defining the state of a context, from the API, which is only needed by
+actual clients. (icstate.h, idsdata.h, idstack.h, iesdata.h, iestack.h,
+iosdata.h, iostack.h, isdata.h, istack.h)
+
+Changes filter error reporting so that the report_error procedure doesn't
+need access to the interpreter. (interp.h, interp.c, zfile.c, zfileio.c)
+
+Completes the implementation of DeviceN color spaces at the interpreter
+level. (lib/gs_res.ps, lib/gs_lev2.ps, lib/gs_ll3.ps, icsmap.h, zcsdevn.c,
+zcsindex.c, zcssepr.c, zimage.c)
+
+Speeds up color mapping for identity transfer, BG, or UCR functions.
+(zcolor.c)
+
+</pre><h3><a name="5.80_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - The L range for Lab color spaces was wrong. (lib/pdf_draw.ps)
+ - Images in Lab color spaces came out all black. (lib/pdf_draw.ps)
+
+Improves the font substitution mechanism slightly. (lib/pdf_font.ps)
+
+</pre><h3><a name="5.80_Streams"></a>Streams</h3><pre>
+
+Adds an error string to the stream state structure, which stream
+implementations can set when returning an error. The motivation is to allow
+the PostScript interpreter to put this into $error.errorinfo. (scommon.h,
+stream.c)
+
+</pre><h3><a name="5.80_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - The S_ISCHR fix in 5.73 had a typo. (stat_.h)
+ - The garbage collector traced dash pattern pointers even if the
+pattern had no elements. (gzline.h, gsistate.c)
+ - Always tracing the clip_path element of gx_device_clist for
+garbage collection could cause crashes, because this pointer could be stale.
+However, we have to trace this pointer if an image is being processed.
+(gxclist.c)
+ - A close-brace was positioned incorrectly. (No effect on the
+working of the code.) (gximage3.c)
+ - Some macros caused some compilers to complain about functions that
+didn't return values. (gsmemlok.c)
+ - A procedure vector wasn't declared const. (gsmemlok.c)
+ - Some needed headers weren't included. (gscrdp.c)
+ - A const pointer was being treated as non-const. (gxcpath.c)
+ - The algorithm for choosing halftone cell dimensions required an
+unreasonably close angle tolerance (0.01 degrees, rather than 1% of a
+90-degree possible difference). (gshtscr.c)
+
+Speeds up arcs a little more. (gspath1.c)
+
+Removes some unnecessary #includes. (gxclpath.h, gxcpath.h, gzcpath.h,
+gxccman.c, gxclip.c, gxcpath.c, gxi12bit.c, gxicolor.c, gxifast.c,
+gximono.c, gxiscale.c, gxpcmap.c)
+
+Cleans up some formatting. (gxpath.c)
+
+Re-enables image interpolation for images that have at least 8 bits of input
+data per pixel. This is still a compromise.... (gxiscale.c)
+
+Enhances the default implementation of parameter lists so that a C parameter
+list can forward unrecognized param_read calls to another parameter list.
+This allows constructing incrementally modified parameter lists for internal
+purposes. (gsparam.h, gscparam.c)
+
+Changes the first argument of the Type 1 charstring interpreter push_value
+(which is renamed push_values) and pop_value callbacks from the font pointer
+to an arbitrary pointer passed in to the interpreter. This is needed for
+PostScript interpreter reentrancy. (gstype1.h, gxfont1.h, gxtype1.h,
+gstype1.c, gxtype1.c)
+
+Adds an allocator wrapper that calls a closure to attempt to free up memory
+if an allocation fails. This is used for asynchronous operation (waiting
+for the page queue to empty) and operation with an optional disk for the
+band list. (gsmemret.h, gsmemret.c)
+
+Adds the retrying wrapper to the malloc allocator. (gsmalloc.c)
+
+Makes "async" printer devices use the retrying wrapper. (gdevprna.c)
+
+Makes clist_fill_parallelogram recognize rectangles. This makes a big
+difference for images rotated 90 degrees. (gsrect.h, gdevddrw.c,
+gxclpath.c)
+
+Arranges to construct the list of image classes (formerly called strategies)
+statically rather than dynamically. (lib.mak, gscdefs.h, gxiclass.h,
+gximage.h, gconf.c, gxi12bit.c, gxicolor.c, gxifast.c, gximono.c,
+gxipixel.c, gxiscale.c)
+
+Implements Indexed color spaces for high-level image banding. (gxclist.h,
+gxclpath.h, gxclimag.c, gxclrast.c)
+
+Arranges to construct the blank bitmap for colored patterns statically
+rather than dynamically. (gsbitmap.h, gxbitmap.h, gxcht.c)
+
+Changes FORCE_STRIP_HALFTONES from a #define to a static Boolean.
+(gshtscr.c)
+
+Implements alternate-space DeviceN color spaces. (gscspace.h, gxcdevn.h,
+gscdevn.c)
+
+Implements DeviceN color spaces for images. (gximage.h, gsimage.c,
+gxi12bit.c, gxicolor.c, gxidata.c, gximage3.c, gximono.c, gxipixel.c)
+
+Speeds up color mapping a bit. (gxfmap.h, gsdevice.c, gsstate.c,
+gxclbits.c, gxclrast.c, gxcmap.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.73"></a>Version 5.73 (tester) (3/19/99)</h2>
+
+<p>
+This fileset fixes a few bugs and adds a couple of minor performance
+improvements. Its purpose is to fix a fairly serious memory management bug
+and a Microsoft-platform compilation problem, both introduced in 5.72.
+
+<h3><a name="5.73_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Library)
+ - Removes the restriction on device registration that was introduced
+in 5.72.
+ - gx_[c]path_scale_exp2 are replaced by gx_[c]path_scale_exp2_shared.
+
+</pre><h3><a name="5.73_Documentation"></a>Documentation</h3><pre>
+
+Identifies GNU readline support as user-contributed, and adds the author's
+name. (int.mak, unix-gcc.mak, gp_gnrdl.c)
+
+Notes that an edit is required for GNU readline for AIX. (doc/Make.htm)
+
+Changes the bug reporting e-mail address to bug-gs@aladdin.com.
+(doc/Bug-form.htm, doc/New-user.htm, doc/Use.htm, imainarg.c)
+
+</pre><h3><a name="5.73_Procedures"></a>Procedures</h3><pre>
+
+Adds FEATURE_DEVS_EXTRA and DEVICE_DEVS_EXTRA, reserved for setting from the
+command line. (gs.mak)
+
+</pre><h3><a name="5.73_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - A needed cast was missing. (gdevx.c)
+
+</pre><h3><a name="5.73_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - A needed cast was missing. (zfname.c)
+ - The CFF loader didn't handle empty subsections correctly.
+(lib/gs_cff.ps)
+ - GNU readline gave an error, rather than expanding the input
+buffer, when called in response to %lineedit. (files.h, zfileio.c,
+ziodev.c)
+ - GNU readline wasn't always initialized, causing a crash when an
+attempt was made to shut it down. (iminst.h, imain.c)
+
+Adds more tracing to the CFF loader. (lib/gs_cff.ps)
+
+Adds some deconstifying casts to compensate for broken headers in the GNU
+readline package. (gp_gnrdl.c)
+
+</pre><h3><a name="5.73_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - The bounding box device didn't ignore filling paths consisting
+only of a moveto. (gdevbbox.c)
+ - Some systems have S_IFCHR but not S_ISCHR. (stat_.h)
+ - The clipping list accumulator didn't merge single rectangles
+correctly. (gxacpath.c)
+ - The clipping list accumulator wasn't aggressive enough about
+merging rectangles. (Performance effect only.) (gxacpath.c)
+ - The page wasn't cleared when installing a new device. (bug
+introduced in 5.72) (gsdevice.c)
+ - With graphics anti-aliasing enabled, executing clip or eoclip
+followed by fill or stroke produced incorrect output. (bug introduced
+between 5.10 and 5.50) (gxpath.h, gspaint.c, gxcpath.c, gxpath2.c)
+ - The garbage collector could crash if any banded devices were
+active. (bug introduced in 5.72) (gdevprn.c)
+
+Changes memory management for device instances to allocate the structure
+type objects dynamically. This gets rid of a static, and also gets rid of
+the requirement that device prototypes be registered, at the expense of an
+extra copy of the (small) structure type object per instance of certain
+devices. (gscdefs.h, gxdevcli.h, gxdevice.h, gconf.c, gsdevice.c)
+
+Disables image interpolation for all high-resolution images, not just
+black-and-white, since this produces better-looking output. (gxiscale.c)
+
+Speeds up path bounding box computation a little. (gxpath2.c)
+
+Speeds up clipping a little. (gxclip.c)
+
+Cleans up formatting a bit. (gxacpath.c)
+
+Adds support for libpng version 1.0.3, but (for now) updates only the
+OpenVMS and Unix makefiles to use it. (libpng.mak, openvms.mak,
+openvms.mmk, ugcclib.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak)
+
+Attempts to work around picky compilers that don't allow assigning T[M][N]
+to const T[M][N]. (gxcht.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.72"></a>Version 5.72 (tester) (3/17/99)</h2>
+
+<p>
+This fileset finally gets rid of the need to have jpeg, libpng, or zlib
+source code on Unix systems that already have these libraries available. It
+also starts to add support for general DeviceN color spaces.
+
+<p>
+Works in progress:
+<ul>
+<li> - Fix Fontmap -&gt; Fontmap.GS link, which VMS can't handle.
+<li> - Make x11alpha do real alpha blending.
+<li> - spdiff.c is unfinished, partly wrong.
+<li> - DeviceN support is in progress. In gxcht.c,
+set_ht_colors_le_4
+and set_color_ht_gt_4 don't have any way to color-map >4 planes.
+</ul>
+
+<h3><a name="5.72_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Interpreter)
+ - The str argument of arg_push_memory_string is no longer const.
+ - The last argument of print_reloc is now const.
+
+(Library)
+ - Clients should never call the device open_device or close_device
+procedure directly: they should call gs_opendevice or gs_closedevice.
+ - The fn_free_functions procedure has been made private.
+ - The first argument of gs_currentpoint is no longer const.
+ - References to header files in the third-party libraries must now
+include a trailing _, i.e.: jerror_.h jmorecf_.h jpeglib_.h png_.h zconf_.h
+ - IJG JPEG library versions before v5a are no longer supported.
+ - ilog2 replaces small_exact_log2.
+ - Support for "outside" clipping has been removed.
+ - Clients that define their own devices now must either register
+them in the makefile (using the SET[P]DEV[2] macros) or set the stype
+pointer in the static prototype to the correct structure type (or at least a
+structure type with the correct procedures).
+
+</pre><h3><a name="5.72_Documentation"></a>Documentation</h3><pre>
+
+Clarifies the fact that clients should never call the device open_device or
+close_device procedure directly. (doc/Drivers.htm)
+
+Updates contact information for Artifex Software. (doc/Commprod.htm,
+doc/New-user.htm)
+
+Clarifies the fact that Aladdin did not write gdevcdj.c. (gdevcdj.c)
+
+Documents the new -TTYPAUSE switch. (doc/Use.htm)
+
+Adds SCO OpenServer 5.0.5 to the list of systems where Ghostscript is known
+to build. (doc/Make.htm)
+
+Notes that the MIPSpro 7.2.1.3m compiler produces incorrect output.
+(doc/Make.htm)
+
+</pre><h3><a name="5.72_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - The Unix install directory ($(gsdatadir)) and the Unix default
+search path ($(gsdatadir)/lib) weren't compatible. (bug introduced since
+5.50) (unixinst.mak)
+ - The compilation rule for echogs omitted a dependency and also
+failed to specify a directory for header files. (unix-aux.mak)
+ - Third-party library source code was required even if the
+corresponding SHARE_xxx option was set to 1. (devs.mak, gs.mak, int.mak,
+lib.mak, jpeg.mak)
+
+Adds a -dTTYPAUSE switch to cause .confirm to read from /dev/tty instead of
+stdin, useful when the data input is a pipe. (lib/gs_init.ps)
+
+</pre><h3><a name="5.72_Utilities"></a>Utilities</h3><pre>
+
+Fixes problems:
+ - Some preprocessor macros were defined twice on VMS. (echogs.c)
+ - traceop.ps didn't build operator-tracing procedures in global VM.
+(This didn't matter before we introduced local pseudo-operators.)
+(lib/traceop.ps)
+ - geninit produced invalid output or hung if the input files didn't
+have the correct EOL representation for the platform. (geninit.c)
+
+Updates a (probably otherwise obsolete) file for the deletion of the private
+JPEG library error message table. (bughunt.sh)
+
+</pre><h3><a name="5.72_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - A procedure returning void tried to return a value. (gdevtfax.c)
+ - For 24-bit displays, XGetImage can return an image in which
+bits_per_pixel is 32 rather than 24, which is not at all obvious from the
+documentation; also, the bit and byte ordering may not be MSBFirst.
+(gdevx.c)
+ - XFree takes a char *, not a void *. (gdevx.c)
+ - The fix in 5.71 to adjust the width of TIFF images introduced
+another bug. (gdevtfax.c)
+ - If the X driver used a standard colormap, pixel values 255 and
+less didn't map back to RGB properly. (bug introduced in 5.71) (gdevxcmp.c)
+ - The ForceMono addition to gdevbit.c (in 5.71) was incorrect.
+(gdevbit.c)
+ - There was a const mismatch in an extern. (gdevxalt.c)
+ - Third-party library source code was required even if the
+corresponding SHARE_xxx option was set to 1. Fixing this required
+referencing all third-party library header files through *_.h files.
+(gdevjpeg.c, gdevpdfi.c, gdevpng.c, gdevpsdi.c, gdevpsdp.c)
+ - There was no way to cause the bounding box device to give up its
+reference to the target. (gdevbbox.h, gdevbbox.c)
+ - pdfwrite crashed if given a 12-bit-per-sample CMYK image when
+ConvertCMYKImagesToRGB was true, and produced invalid output for other
+12-bit-per-sample images (PDF limits bits-per-sample to 8). (gdevpsdi.c)
+ - pdfwrite mangled planar images if bits-per-sample was other than
+8. (bug introduced since 5.50) (gdevpdfi.c)
+
+Changes some code to reduce compiler warnings about casts discarding const.
+(gdevxalt.c)
+
+Removes a test that allowed referencing the statically allocated instance of
+the alternative X drivers. (gdevxalt.c)
+
+Changes a reference to small_exact_log2. (gdevsvga.c)
+
+Greatly improves the PDF writer's handling of simple pattern fills, by
+retaining them as pattern fills. (gdevpdfx.h, gdevpdf.c, gdevpdfi.c)
+
+</pre><h3><a name="5.72_Fonts"></a>Fonts</h3><pre>
+
+Fixes problems:
+ - Cn in a font name wasn't recognized as indicating a condensed
+font. (lib/gs_fonts.ps)
+
+</pre><h3><a name="5.72_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - Third-party library source code was required even if the
+corresponding SHARE_xxx option was set to 1. Fixing this required
+referencing all third-party library header files through *_.h files.
+(zfdctd.c, zfdcte.c)
+ - An /undefined error occurred on floating point numbers whose
+integer part exceeded the size of a long (normally 31 bits) and that also
+included a fraction. (iscannum.c)
+ - ialloc.c included gxarith.h unnecessarily. (ialloc.c)
+
+When opening a terminal for reading, always sets the buffer size to 1. This
+does not apply to %stdin, %lineedit, or %statementedit. (zfile.c)
+
+Changes code to use the new deconstifying freeing procedures, to remove
+deconstifying casts. (gsargs.h, ialloc.h, gsargs.c, zfname.c, zfunc.c)
+
+Adds a writable packed ref pointer variant to ref.value, to remove compiler
+warnings about casts discarding const. (igc.h, iref.h, idict.c, igc.c,
+igcref.c)
+
+Changes the help printouts to use the new printf_program_ident procedure.
+(imainarg.c)
+
+Generalizes clients to handle color spaces that may have more than 4
+components. (zcsdevn.c, zcsindex.c, zcssepr.c, zdpnext.c, zfdecode.c)
+
+Removes support for outside clipping, which we implemented only because we
+misinterpreted a requirement. (zpath.c)
+
+</pre><h3><a name="5.72_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - Selecting a colored Pattern color space caused an error.
+(lib/pdf_draw.ps, lib/pdf_ops.ps)
+ - Reading data from a subfile with no filter caused an error.
+(lib/pdf_base.ps)
+
+Allows mask images to omit BitsPerComponent: Acrobat Reader accepts this
+even though the PDF specification requires it to be present (with value =
+1). (lib/pdf_draw.ps)
+
+</pre><h3><a name="5.72_Streams"></a>Streams</h3><pre>
+
+Fixes problems:
+ - The PixelDifference filters didn't propagate leftover bits in the
+last byte of a row. (bug probably introduced in 5.60) (spdiff.c)
+ - The 1- and 2-bit-per-pixel PixelDifferenceEncode filters were
+broken. (spdiff.c)
+
+Changes code slightly to remove a warning about an uninitialized variable.
+(spdiff.c)
+
+Extends the PixelDifference filters to handle more than 4 Colors.
+s_PDiff_max_Colors is the maximum value. (spdiffx.h, spdiff.c)
+
+Adds a stream for converting 12-bit samples to 8-bit. (gdevpsds.h,
+gdevpsds.c)
+
+Gets rid of the no longer needed private copy of the JPEG error message
+table. (sdcte.c, sdeparam.c, sjpegerr.c [deleted], sjpegc.c)
+
+</pre><h3><a name="5.72_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - If a 1-bit-per-pixel image terminated early, the last few scan
+lines might not be written out. (gxidata.c)
+ - The bbox device could leave its target in a half-open state,
+because it called the open/close_device procedures directly rather than
+going through gs_open/closedevice. We "fixed" this by making this device
+forward open and close, but conditionally, so that clients can choose.
+(gdevbbox.c)
+ - Third-party library source code was required even if the
+corresponding SHARE_xxx option was set to 1. Fixing this required
+referencing all third-party library header files through *_.h files.
+(sdcparam.c, sdctc.c, sdctd.c, sddparam.c, sjpegc.c, sjpegd.c, sjpege.c,
+sjpegerr.c)
+ - Low-memory recovery in the band list writer sometimes didn't work,
+because a test was backwards. (gxcldev.h, gxclist.c)
+ - Executing a put_params during band rasterizing didn't update
+cached values in the imager state. This was probably not a problem in
+practice, since the only parameters that affect cached values (device color
+space, depth, and color mapping) were very rarely set. (gxclrast.c)
+ - Converting 12-bit planar images to chunky format could store
+beyond the end of the output area and corrupt memory. (gsflip.h, gsflip.c)
+ - The algorithms for converting 4-plane, 1- and 2-bit planar images
+to chunky format were wrong. (gsflip.c)
+ - Images that lay entirely outside the page could cause a memory
+access error. (gxclimag.c)
+ - The bbox device could return excessively conservative values for
+stroked paths. (gxpaint.h, gdevbbox.c, gxpaint.c, gxstroke.c)
+ - Banding devices now include some pointers that the garbage
+collector must trace. (gdevprn.h, gxclist.h, gxdevice.h, gdevprn.c,
+gsdevice.c, gxclist.c)
+
+Adds a gs_opendevice procedure to mirror gs_closedevice. (gsdevice.h,
+gsdevice.c)
+
+Adds deconstifying freeing procedures to the memory manager. This allows us
+to have pointers as structure members that should be const * for all
+ordinary clients, and still be able to free the referenced objects without a
+compiler warning. (gsmemory.h, gsmemory.c)
+
+Changes code, often to use the new deconstifying freeing procedures, to
+remove deconstifying casts. (gspath.h, gxfunc.h, gsfunc.c, gsfunc0.c,
+gsfunc3.c, gspath.c, gsptype1.c)
+
+Changes the eprintf macros so they print the version as well as the program
+name. (std.h, gscdef.c, gsmisc.c)
+
+Adds procedures that update cached values in graphics or imager states after
+setting device parameters. Clients should use these when setting parameters
+of devices that may be current in graphics or imager states. Note that this
+is only a partial solution for a much deeper problem, and may even have to
+be replaced at some point. (gsdevice.h, gsdevice.c)
+
+Defines GS_CLIENT_COLOR_MAX_COMPONENTS (in gsccolor.h),
+GX_DEVICE_COLOR_MAX_COMPONENTS (in gxcindex.h), and GS_IMAGE_MAX_COMPONENTS,
+and starts to use them where needed, in anticipation of implementing DeviceN
+color spaces. (gsccolor.h, gsdcolor.h, gsiparam.h, gsiparm4.h, gxcindex.h,
+gxctable.h, gximage.h, gxshade.h, gdevplnx.c, gscdevn.c, gscolor2.c,
+gxcht.c, gxclimag.c, gxcmap.c, gxicolor.c, gxctable.c, gxi12bit.c)
+
+Replaces small_exact_log2 by a procedure ilog2 that computes floor(log2(n)).
+(gxarith.h, gsmisc.c, gspaint.c, gxccman.c, gxclimag.c, gxclrect.c)
+
+Upgrades gsflip.c to handle >4 planes. (gsbitops.h, gsflip.h, gsflip.c)
+
+Speeds up getting and testing memory device prototypes a little. (gdevmem.c)
+
+Speeds up adding arcs to a path a little. (gspath1.c)
+
+Increases the precision of a precomputed constant from float to double.
+(gxpath.h)
+
+Adds a new band list operation to make circles smaller and faster.
+(gxclpath.h, gxclpath.c, gxclrast.c)
+
+Adds an accessor procedure for the start point of the current subpath.
+(gxpath.h, gxpath2.c)
+
+Removes support for outside clipping, which we implemented only because we
+misinterpreted a requirement. (gspath.h, gxcldev.h, gxcpath.h, gxpath.h,
+gspath.c, gxacpath.c, gxclip.c, gxclpath.c, gxclrast.c, gxcpath.c)
+
+Changes gs_copydevice to require that static prototypes either be registered
+in gx_device_list or have a correct stype pointer. (This is already the
+case for all devices in code we distribute.) (gsdevice.c)
+
+Adds ENUM_PTRS_PROC and RELOC_PTRS_PROC macros for giving a name to the
+typed pointer to the object being processed. (gsstruct.h)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.71"></a>Version 5.71 (tester) (3/3/99)</h2>
+
+<p>
+This fileset reinstates support for TrueColor X displays, and adds optional
+support for GNU readline. It also includes a little more work on the new
+driver text API.
+
+<h3><a name="5.71_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Library)
+ - The *line_accum* macros are now capitalized; declare_line_accum is
+renamed DECLARE_LINE_ACCUM_COPY, and DECLARE_LINE_ACCUM is new.
+
+</pre><h3><a name="5.71_Documentation"></a>Documentation</h3><pre>
+
+Documents the CIE joint cache invariant more accurately. (gscie.h)
+
+Adds a request for xdpyinfo/xwininfo output to the problem reporting form.
+(doc/Bug-form.htm)
+
+</pre><h3><a name="5.71_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - The default search path was missing the lib subdirectory on many
+platforms. (dvx-gcc.mak, os2.mak, ugcclib.mak, unix-gcc.mak, unixansi.mak,
+unixtrad.mak, watc.mak, watclib.mak, watcw32.mak)
+ - The dependency list for the X Windows drivers was incorrect,
+sometimes causing needed recompilation to be omitted. (devs.mak)
+
+</pre><h3><a name="5.71_Utilities"></a>Utilities</h3><pre>
+
+Fixes problems:
+ - The representation of maximum unsigned values produced warnings on
+some compilers (specifically, gcc with -Wtraditional). (genarch.c)
+ - Some string variables weren't declared const. (echogs.c,
+genarch.c)
+ - The viewpbm utility was broken for pgm and ppm (but not pbm).
+(bug introduced in 5.66) (lib/viewpbm.ps)
+
+</pre><h3><a name="5.71_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - The X driver didn't handle TrueColor displays properly.
+(gdevxcmp.h, gdevxcmp.c)
+ - The alternative X drivers didn't implement get_bits properly.
+(gdevxalt.c)
+ - The X driver specified the byte order incorrectly for displays
+with more than 8 bits per pixel. (gdevx.c)
+ - The X driver used the wrong number of bits for comparing colors on
+visuals with fixed color maps. (gdevxcmp.h, gdevxcmp.c)
+ - Some symbols were multiply defined with -DNOPRIVATE. (gdevbit.c)
+ - If a file specified a paper size, rather than using the default,
+the G3/G4 fax output drivers didn't adjust the width to a legal one for fax
+systems. (gdevtfax.c)
+
+Segregates the resource lists, for which warnings about casting of const to
+non-const string types should be suppressed, into a separate file.
+(devs.mak, gdevx.h, gdevxini.c, gdevxres.c)
+
+Splits off the code related to color mapping for X Windows, for greater
+understandability. (devs.mak, gdevx.h, gdevxcmp.h, gdevx.c, gdevxcmp.c,
+gdevxini.c)
+
+Changes code slightly to remove warnings about signed/unsigned integer
+constants. (gdevxalt.c)
+
+Changes code to remove unused variables. (gdevx.c, gdevxalt.c)
+
+Adds a user-contributed driver for the H-P LaserJet 4D. (devs.mak,
+gdevdjet.c)
+
+Makes the bitcmyk driver reset its map_cmyk_color procedure dynamically
+according to the depth, allowing more efficient execution in the 1- and
+8-bit cases. (gdevbit.c)
+
+Adds a settable option, AdjustWidth, to control whether the fax-format
+drivers (faxg*, tiffcrle, tiffg*) adjust the page width to legal fax values.
+Its default value is 1 (do adjust). (devs.mak, gdevtfax.c)
+
+Adds a ForceMono parameter to the bitcmyk/bitrgb devices to implement a
+special monochrome-in-CMYK mode requested by a customer. (gdevbit.c)
+
+Removes the TRIM_ and EXPAND_BITS_TO_BYTES options from the bit devices,
+since they are no longer needed. (gdevbit.c)
+
+</pre><h3><a name="5.71_Fonts"></a>Fonts</h3><pre>
+
+Changes the substitution mechanism for condensed / narrow fonts, so that the
+PDF interpreter can use it. (lib/gs_fonts.ps)
+
+</pre><h3><a name="5.71_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - The bind operator generated unaligned accesses and might not
+operate reliably. (bug introduced in 5.70) (zmisc.c)
+ - If the BuildChar procedure of a font included an image or
+imagemask operator, charpath would (incorrectly) display the character.
+(zimage.c)
+
+Adds a bogus return statement to suppress a compiler warning. (gs.c)
+
+Changes code slightly to remove warnings about signed/unsigned integer
+constants. (store.h, ibnum.c)
+
+Changes the build date format to %d-%02d-%02d. (lib/gs_init.ps, imainarg.c)
+
+Rearranges some code to add readline support. (files.h, imain.c, zfileio.c,
+ziodev.c)
+
+Adds support for GNU readline, with several completion keys, contributed by
+a user. (int.mak, gs_rdlin.ps, gp_gnrdl.c)
+
+Changes the font substitution machinery slightly so the PDF interpreter can
+use it. (lib/gs_fonts.ps)
+
+</pre><h3><a name="5.71_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - In-line images caused a syntaxerror or stackunderflow.
+(lib/pdf_draw.ps)
+ - The font substitution mechanism didn't detect Condensed fonts.
+(lib/pdf_font.ps)
+ - The font substitution mechanism didn't use the intelligent
+algorithm used for PostScript files. (lib/pdf_font.ps)
+
+Prints a message when substituting for a font on the basis of its
+descriptor. (lib/pdf_font.ps)
+
+</pre><h3><a name="5.71_Streams"></a>Streams</h3><pre>
+
+Adds an interface and default implementation for readline. (srdline.h,
+stream.h, stream.c)
+
+</pre><h3><a name="5.71_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - A void procedure attempted to return a value. (stream.c)
+ - A pointer was declared with an extra *. (gsmemory.c)
+ - An argument would be stringified with traditional C. (gdevdbit.c)
+ - The check for validity of the CIE joint caches was wrong, leading
+to incorrect output in some obscure cases. (gsciemap.c)
+ - A tiny rounding inaccuracy could cause an occasional blank line
+when rendering adjacent images. (gxipixel.c)
+ - Some symbols were multiply defined with -DNOPRIVATE. (gsptype2.h)
+ - If a character was too large to be cached, it didn't use
+anti-aliasing, even if TextAlphaBits was >1. (gspaint.c)
+
+Changes code slightly to remove warnings about signed/unsigned integer
+constants. (gsccode.h, gsmisc.c, gxcht.c)
+
+Changes code to remove a warning about an unhandled case in a switch.
+(gsstruct.h, gsmemory.c)
+
+Changes code to remove unused variables. (gxcindex.h, gdevdbit.c,
+gdevprn.c, gxiscale.c)
+
+Restructures the header files for the new text API, adding the SINGLE
+options in text_params, enough new elements in text_enum to store all the
+arguments of text_begin, and new elements in text_enum to hold results
+returned by text_process. This code is no longer "subject to [arbitrary]
+change without notice", although it is still not very stable. (gstext.h,
+gxtext.h, gstext.c)
+
+Changes code to remove warnings about uninitialized variables. (gxipixel.c)
+
+Changes the syntactic form of some constants yet again to suppress a
+different set of compiler warnings. (gxsample.c)
+
+Adds a procedure to fix the charpath-in-BuildChar problem. (gsimage.h,
+gsimage.c, gsptype1.c)
+
+Speeds up the handling of certain RasterOp cases for CMYK devices.
+(gxdevice.h, gxdevmem.h, gdevdrop.c, gdevmem.c, gdevmr8n.c, gdevrops.c)
+
+Adds a platform-specific interface for reading lines from stdin. This is
+intended primarily to support GNU readline. (lib.mak, gp.h, gp_strdl.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.70"></a>Version 5.70 (internal) (2/20/99)</h2>
+
+<p>
+This fileset includes substantial changes to the interpreter in support of
+making it fully reentrant (eliminating writable globals).
+
+<h3><a name="5.70_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Interpreter)
+ - The ref_stack structure has been renamed ref_stack_t, and has been
+changed substantially. Clients should now access all of its members, other
+than the pointers to the current block, through the macros or procedures
+defined in istack.h. The STACK_LOOP_{BEGIN,END} macros have been removed.
+ - The argument of context_state_load is no longer const.
+ - Each file's table of operator definitions is now limited to 16
+entries. op_def_table[] no longer exists: use op_index_def() instead.
+ - invalid_file_entry now has an associated VM space,
+avm_invalid_file_entry, that must be used in constructing invalid file refs.
+ - restore will now undo binding of pseudo-operators. Attempting to
+bind a local pseudo-operator into a global procedure will cause an
+invalidaccess error.
+
+</pre><h3><a name="5.70_Documentation"></a>Documentation</h3><pre>
+
+Updates the driver documentation a bit. It probably still includes a lot of
+out-of-date text. (doc/Drivers.htm)
+
+Improves the problem reporting form to make it absolutely clear that test
+data are required, and that the problem must be reproducible without using a
+viewer. (doc/Bug-form.htm)
+
+Documents the -dDOINTERPOLATE switch. (doc/Use.htm)
+
+Documents the difference between public and tester releases, in connection
+with making tester releases available to everyone. (doc/New-user.htm)
+
+Updates the list of history files. (doc/Readme.htm)
+
+Adds a questionnaire for people who want to be notified of new test
+releases. (doc/Readme.htm, doc/Tester.htm)
+
+</pre><h3><a name="5.70_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - A ! was missing before an include. (bcwin32.mak, msvc32.mak)
+ - A trailing \ in some macro definitions was quoted incorrectly.
+(bcwin32.mak, msvc32.mak)
+ - An editing error prevented a makefile from working. (bcwin32.mak)
+ - The 16-bit spooler executable didn't reference its icon correctly.
+(gs16spl.rc)
+ - The Watcom makefiles had gotten badly out of date. (watc.mak,
+watclib.mak, wccommon.mak)
+ - Some DEVICE_DEVS lines were too long for the shell to handle.
+(openvms.mmk)
+ - A space was missing before a colon. (openvms.mmk)
+
+Updates MSVC support to handle version 6. (msvc32.mak)
+
+Extends genconf to handle function types as well as image types, and changes
+the output for image types. (genconf.c)
+
+Desupports the use of CONFIG for selecting between multiple configurations,
+since parameterized output directories do this better. (bcwin32.mak,
+dvx-gcc.mak, gs.mak, int.mak, lib.mak, msvc32.mak, msvclib.mak, openvms.mak,
+openvms.mmk, os2.mak, ugcclib.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak,
+watc.mak, watclib.mak, watcw32.mak)
+
+Adds a -dDOINTERPOLATE switch to force Interpolate in all images.
+(lib/gs_init.ps)
+
+</pre><h3><a name="5.70_Utilities"></a>Utilities</h3><pre>
+
+Rewrites viewpcx to eliminate dependence on a special filter.
+(lib/viewpcx.ps)
+
+</pre><h3><a name="5.70_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - The [e]pswrite and pdfwrite drivers wrote out clipping paths using
+the winding number rule even if the path had been set with eoclip.
+(gdevpdfd.c, gdevvec.c)
+ - Some occurrences of ushort should have been gx_color_value.
+(gdevpbm.c)
+ - A comment was accidentally left outside comment quotes.
+(gdev3852.c)
+ - There was a char/byte mismatch not covered by a cast.
+(gdevdcrd.c)
+ - There were still some references to the 'huge' keyword, which has
+been superseded by FAR. (gdevwdib.c)
+ - Some obsolete references to which_colors hadn't been removed.
+(gdevwdib.c)
+ - The [e]pswrite driver produced incorrect output for a curveto or
+closepath followed by a lineto and then a moveto. (gdevps.c)
+ - The [e]pswrite driver could produce incorrect output for paths
+ending with a lineto. (gdevps.c)
+ - The name paper_sizes was used both by a driver and by other code,
+causing a problem when building with -dNOPRIVATE. (gdevclj.c)
+
+Consolidates the X error handling statics into a structure. (gdevxini.c)
+
+Updates the pdfwrite driver to reflect the addition of state to the
+ASCII85Encode filter. (gdevpsdf.c)
+
+Adds a user-contributed driver for the Lexmark 5700 printer (black-and-white
+only). (contrib.mak, gdevlxm.c)
+
+Updates the mswinpr2 driver with a new, user-contributed one that includes
+interaction with the user. (gdevwpr2.c)
+
+</pre><h3><a name="5.70_Fonts"></a>Fonts</h3><pre>
+
+Fixes problems:
+ - When TrueType support was present, the FONTPATH scanner didn't
+recognize TrueType fonts whose 'type' was "true" rather than the documented
+<00 01 00 00>. (lib/gs_ttf.ps)
+ - When DEBUG was set, loading a TrueType font could cause an
+/undefined error. (lib/gs_ttf.ps)
+
+</pre><h3><a name="5.70_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - Local (pseudo-)operators could get bound into global procedures
+with 'bind', causing dangling references. Attempting this now causes an
+invalidaccess error. Fixing this also required making restore undo binding
+of pseudo-operators. (zmisc.c)
+ - A harmless dictfull error occurring during language level
+switching caused an error. (zmisc2.c)
+ - If given a closed input file, flushfile caused an error, rather
+than doing nothing. (zfileio.c)
+
+Renames the ref_stack structure as ref_stack_t, and factors it so that the
+parts set only at initialization are separated from the dynamic parts, in
+support of moving the stacks from static to dynamic storage. (icstate.h,
+idebug.h, idstack.h, iestack.h, iostack.h, iparam.h, iparray.h, istack.h,
+idebug.c, interp.c, iparam.c, istack.c, zcontext.c, zpacked.c, zvmem.c)
+
+Moves the dynamic part of the stacks in-line in the context structure; gets
+rid of the statically allocated stacks. (dstack.h, estack.h, icontext.h,
+icstate.h, idstack.h, iestack.h, interp.h, iostack.h, ostack.h, icontext.c,
+iinit.c, interp.c, zcontext.c)
+
+Packages the dictionary lookup statistics in a structure, like the other
+statistics. (idict.c)
+
+Changes from dynamic to static initialization of the function type table.
+(int.mak, ifunc.h, iconf.c, zfunc.c, zfunc0.c, zfunc3.c)
+
+Removes the PCXDecode filter. (zfilterx.c)
+
+Removes more writable statics. (int.mak, btoken.h, files.h, icstate.h,
+igstate.h, ipacked.h, iscan.h, icontext.c, imain.c, iscan.c, iscanbin.c,
+zbseq.c, zcolor2.c, zcontext.c, zgstate.c, ziodev.c, zmath.c, zpcolor.c,
+zpacked.c)
+
+Changes the representation of the operator table to avoid allocating a
+dynamic copy. This introduces a limit of 16 entries per definition set.
+(int.mak, opdef.h, iconf.c, idebug.c, iinit.c, interp.c, iutil.c,
+zcontext.c, zcontrol.c, zdict.c, zfileio.c, zgstate.c, ztype.c)
+
+Includes the ASCII85Decode filter in all configurations, for simplicity.
+(iscan.c, zfdecode.c)
+
+Makes the invalid file reference point to a static object. (files.h,
+icontext.c, zfile.c, ziodev.c)
+
+Changes all dictfull error returns from the dictionary code to use
+return_error. This should have been done a long time ago! (idict.c)
+
+Increases the predefined size of systemdict a little more because .upp files
+may define a lot of new entries. (iinit.c)
+
+Adds a few more interpreter statistics. (interp.c)
+
+</pre><h3><a name="5.70_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - Images never closed the data stream, placing a heavy load on the
+garbage collector to clean up streams and stream states. (lib/pdf_draw.ps)
+ - Streams stored on external files didn't work. (lib/pdf_base.ps)
+
+Reorganizes code slightly to allocate less memory for in-line images.
+(lib/pdf_draw.ps)
+
+Speeds up some common operations a little. (lib/pdf_base.ps)
+
+</pre><h3><a name="5.70_Streams"></a>Streams</h3><pre>
+
+Removes the PCXDecode filter. (spcxx.h [deleted], spcxd.c [deleted])
+
+Changes the name of a variable for greater clarity. (stream.c)
+
+Splits off the ASCII85Decode filter into a separate file, since it turns out
+to be convenient to include it in all configurations. (sa85d.h, sa85x.h,
+sa85d.c, sfilter2.c)
+
+Makes an initialization entry point available for non-heap-allocated
+streams. (stream.h, stream.c)
+
+Changes the ASCII85Encode filter so it always produces lines of at most 80
+characters, not counting the EOD marker. THIS IS A NON-BACKWARD-COMPATIBLE
+CHANGE, because this filter now needs a state structure, which it didn't
+before. (sa85x.h, sfilter2.c)
+
+</pre><h3><a name="5.70_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - Reference counting of graphics state elements was wrong when
+creating multiple contexts, causing memory corruption. (bug probably
+introduced in 5.68) (gsstate.c)
+ - If CIE joint caches were created because the reference count of
+the existing caches was >1, the new caches weren't initialized correctly.
+(bug introduced in 5.60, found by Ray Johnston.) (gscie.c)
+ - If Margins are set so that part of the default clipping region
+lies outside the ((0,0),(width,height)) device coordinate space, the fast
+case of images could cause a memory access error. (gxifast.c)
+ - In the case of a halftone with more bits than levels,
+gx_check_tile_cache could incorrectly return false, causing images to render
+more slowly than they should. (gzht.h, gxht.c)
+ - There was a const mismatch between an argument and the formal
+parameter. (gdevprn.h, gdevprn.c, gxclread.c)
+ - An error in the definition of st_imager_state_num_ptrs caused the
+garbage collector to omit marking one pointer in imager states, possibly
+causing memory corruption. (gxistate.h)
+ - The bbox device, used with no target, didn't properly handle
+images where more data was provided than needed. (gdevbbox.c)
+
+Removes any pretense of supporting multiple threads in a single-threaded
+environment. Dummy synchronization primitives, however, are still provided.
+(gp_nsync.c)
+
+Removes more writable statics. (gximage.h, gxi12bit.c, gxino12b.c,
+gxipixel.c)
+
+Changes the handling of image types, and adds similar handling for function
+types. (gscdefs.h, gconf.c)
+
+Consolidates the gs_std* files into a structure. (gsio.h, gsmisc.c)
+
+Speeds up the fastest (common) case of clipping fill_rectangle and copy_mono
+operations. We could do the same for the other operations if we wanted.
+(gxclip.c)
+
+Identifies this fileset as a tester release. (gscdef.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.69"></a>Version 5.69 (internal) (2/4/99)</h2>
+
+<p>
+This incremental fileset fixes minor compilation problems, as well as many
+problems with driver-based CRDs (not used by PostScript or PDF).
+
+<h3><a name="5.69_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - The OpenVMS makefile had not been updated properly to reflect the
+division of files into subdirectories. (openvms.mak)
+ - A space was missing before a :. (devs.mak)
+ - The MMK makefile had not been updated to reflect the renaming of
+the psm[raw] devices to pksm[raw]. (openvms.mmk)
+
+Changes the default name of the build directory for the library test program
+from debugobj to libobj, so that one can work with both library and
+interpreter builds without interference. (ugcclib.mak)
+
+Adds -fno-builtin to the gcc switches, to detect failure to declare
+functions like memcpy, at a small cost in performance. (ugcclib.mak,
+unix-gcc.mak)
+
+</pre><h3><a name="5.69_Utilities"></a>Utilities</h3><pre>
+
+Makes a couple of minor fixes to ansi2knr, suggested by users. (ansi2knr.c)
+
+Updates ps2ai.ps with an improved version from its author. (lib/ps2ai.ps)
+
+</pre><h3><a name="5.69_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - The 32-bit CMYK "async" BMP driver was declared incorrectly as a
+non-async device. (gdevbmpa.c)
+ - Some #includes were missing, because gcc didn't warn about
+failures to declare certain standard functions. (x_.h, gdevdcrd.c, gdevx.c)
+ - The PC frame buffer device still referred to _ss and near.
+(gdevpcfb.c)
+ - The [e]pswrite driver didn't handle bitmaps with a non-zero X bit
+offset correctly. (gdevps.c)
+ - The pdfwrite driver wrote all clipping paths with the winding
+number rule, even if they were established by eoclip. (gdevpdfd.c)
+ - "Vector" drivers wrote all clipping paths with the winding number
+rule, even if they were established by eoclip. (gdevvec.c)
+
+Adds the CRDName parameter to the sample driver-based CRD. (gdevdcrd.c)
+
+Tweaks the sample driver-based CRD to make it a more realistic (closer to
+the PostScript default). (gdevdcrd.c)
+
+Adds the sample driver-based CRD to the modified X drivers. (devs.mak,
+gdevxalt.c)
+
+</pre><h3><a name="5.69_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - Some #includes were missing, because gcc didn't warn about
+failures to declare certain standard functions. (zchar1.c)
+ - Driver CRDs were not supported properly. (zcrd.c, lib/gs_lev2.ps)
+
+Changes some code because non-int switch expressions are not handled
+correctly in pre-ANSI C. (igcref.c, zdevice.c)
+
+Adds the ability to set the orientation of zero-length "dots". (zgstate.c)
+
+Adds comments on an alternative shallow-binding design. (dstack.h)
+
+Changes the threshold for repeatedly rescanning change lists so that it is
+based on the cumulative amount of rescanning and not the amount in a single
+pass. (isave.c)
+
+</pre><h3><a name="5.69_Streams"></a>Streams</h3><pre>
+
+Changes some code because non-int switch expressions are not handled
+correctly in pre-ANSI C. (sfilter1.c)
+
+</pre><h3><a name="5.69_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - Some casts to (gx_device *) were missing. (gschar.c)
+ - Some #includes were missing, because gcc doesn't warn about
+failures to declare certain standard functions. (gdevdgbr.c, gscie.c,
+gsmatrix.c, gxshade1.c)
+ - gxclread.c now needs gdevprn.h to declare certain procedures. We
+tried very hard to make the command list machinery not depend on anything
+related to printer devices, but at this point we have not succeeded.
+(gxclread.c)
+ - For CRDs set by library clients, the is_identity flags in the
+caches were set incorrectly, producing incorrect output. (gscie.h, gscie.c,
+gscrd.c, gscrdp.c)
+ - For CRDs set by library clients, the EncodeABC and RenderTable T
+procedures were sampled incorrectly. (gsciemap.c, gscrd.c)
+ - The interpreter tried to sample the TransformPQR functions in the
+PostScript CRD even for driver CRDs. (gscie.h, gscie.c)
+ - Library assistance was needed for the interpreter to support
+driver CRDs properly. (gscrdp.h, gscrdp.c)
+ - The procedures that accessed cached CIE values didn't round the
+index, so accessing already-cached values could wipe out the cache.
+(gscie.c)
+ - The procedure that accessed cached RenderTable.T values simply
+wasn't implemented. (gscrd.c)
+
+Adds an "if (1)" to a macro to suppress "statement not reached" warnings
+from stupid compilers. (gsmemlok.c)
+
+Changes the syntactic form of some constant tables to suppress
+signed/unsigned warning messages. (gsbitops.c, gxsample.c)
+
+Changes some switch statements to if/else because non-int switch expressions
+are not handled correctly in pre-ANSI C. (gdevmr8n.c, gxdcolor.c)
+
+Adds the ability to set the orientation of zero-length "dots". (gsline.h,
+gxline.h, gsline.c, gsstate.c, gxstroke.c)
+
+Adds an allocator state variable to support the change in the rescanning
+algorithm. (gxalloc.h)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.68"></a>Version 5.68 (internal) (1/29/99)</h2>
+
+<p>
+This fileset implements PatternType 2 (gradient fill) Patterns. All
+significant PostScript LanguageLevel 3 features are now implemented, except
+for DeviceN color spaces. We have also verified that the MMK script for
+OpenVMS also works with MMS.
+
+<p>
+Note that there are significant non-backward compatible changes to memory
+management for device instances: we are sorry about this, but just as with
+paths in 5.22, we had to fix this design problem at some point.
+
+<h3><a name="5.68_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Procedures)
+ - A new makefile, unix-aux.mak, must be included in all Unix
+top-level makefiles. (It is included in the ones we distribute.)
+unixtail.mak is renamed unixlink.mak.
+
+(Library)
+ - The names of the anti-aliasing parameters in the device color_info
+structure have been changed.
+ - Dummy definitions for PC-specific C keywords (_cs, _ds, _ss, near,
+far, huge) are no longer provided: these keywords should be removed from
+non-PC-specific code.
+ - The names of the alignment_mod, ptr_le, ptr_lt, ptr_ge, ptr_gt,
+and ptr_between macros have been changed to upper case (ALIGNMENT_MOD etc.)
+ - gs_make_null_device now takes an additional argument.
+ - The ccolor member of a gx_device_color is no longer inside a
+substructure.
+ - Clients now must initialize Pattern templates with
+gs_patternN_init, where N is the PatternType (normally 1), before filling in
+the members.
+ - gs_pattern_instance_common_t is renamed gs_pattern_instance_t;
+gs_pattern_instance is renamed gs_pattern1_instance.
+ - To set the target of a forwarding device, you must now use
+gx_device_set_target rather than setting the target member directly.
+ - Memory management for devices has changed substantially, and in a
+subtle way. If you have code that calls the library, please read the
+documentation in gxdevcli.h.
+ - Callers of the driver create_buf_device procedure must always call
+it through gdev_create_buf_device, never directly.
+ - For composite and CID-keyed fonts, the character code returned by
+gs_show_current_char and gs_kshow_previous_char is now the full multi-byte
+character code rather than just the last byte of the code.
+ - gdev_cmap_set_method has been replaced by a device parameter,
+ColorMappingMethod.
+ - The CRD pointer parameter for param_write_cie_render1 and
+param_put_cie_render1 is no longer const.
+
+</pre><h3><a name="5.68_Documentation"></a>Documentation</h3><pre>
+
+Fixes problems:
+ - The documentation for resize_object and resize_string didn't allow
+the new size to be the same as the old size, didn't describe what data was
+preserved, and didn't guarantee to return the same object if the new size
+was the same as the old size. (gsmemraw.h, gsmemory.h)
+ - The documentation for the value returned by the internal
+.getmetrics32 operator was incorrect. (zchar32.c)
+ - The documentation for the special color mapping device didn't say
+that the caller had to call gs_setdevice_no_init to update graphics states.
+(gdevcmap.h)
+
+Notes that OPENVMS.MMK works with both MMK and MMS. (doc/Make.htm)
+
+Adds a note to the C style guide about nested vs. multi-branch 'if'
+statements. (doc/C-style.htm)
+
+Notes that the multi-threaded ("async") drivers require libc version 6 or
+higher under GNU/Linux. (doc/Make.htm)
+
+Notes additional Irix/MIPSpro combinations that compile idict.c incorrectly,
+and gives a workaround. (doc/Make.htm)
+
+Adds a couple more acknowledgements. (doc/Helpers.htm)
+
+Documents the new -Z^ switch. (doc/Use.htm)
+
+Documents the new rules about memory management for device instances
+(gxdevcli.h, gxdevice.h)
+
+</pre><h3><a name="5.68_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - The "async" BMP devices were accidentally included in the default
+list for Unix, leading to a requirement for the POSIX thread package, which
+is not available on all systems. (unix-gcc.mak)
+ - There was a minor typo in the new MMK script. (openvms.mmk)
+ - The MMK script redefines macros, which MMS does not allow.
+(openvms.mmk)
+ - The gcc version test used gcc rather than $(CC) for the compiler
+name. (unix-gcc.mak)
+ - There was a minor typo in the pcx2up device makefile entry.
+(devs.mak)
+ - Some commands in the Unix install rules referenced sh rather than
+$(SHELL). (unixinst.mak)
+
+Makes (dummy) in-RIP trapping an optional feature, and removes it from the
+default configuration. (int.mak, lib.mak)
+
+Splits off the build rules for the Unix auxiliary programs, so they can be
+shared between interpreter and library configurations. (ugcclib.mak,
+unix-aux.mak, unix-gcc.mak, unixansi.mak, unixtail.mak [deleted],
+unixlink.mak, unixtrad.mak)
+
+Adds the bitcmyk device to the list of devices for the library test program.
+(ugcclib.mak)
+
+</pre><h3><a name="5.68_Utilities"></a>Utilities</h3><pre>
+
+Fixes problems:
+ - ansi2knr didn't handle occurrences of '/' or quoted strings inside
+an argument list correctly. (ansi2knr.c)
+
+At the suggestion of a GNU person, makes ansi2knr check for output errors.
+(ansi2knr.c)
+
+</pre><h3><a name="5.68_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - Setting the resolution on the SPARCprinter didn't work.
+(gdevsppr.c)
+ - Even in PDF 1.1 compatibility mode, the PDF writer used a
+predictor to compress images. (gdevpsdi.c)
+ - Reference counting for devices was not implemented consistently.
+(gdevxalt.c)
+ - gcc (again) missed some static / non-static inconsistencies.
+(gdevbmpa.c, gdevifno.c)
+
+Removes all remaining uses of segment identifiers (_cs, _ds, _ss) from
+non-PC-specific code. (gdev3852.c, gdevcdj.c, gdevhl7x.c, gdevl256.c,
+gdevmgr.c, gdevsgi.c, gdevsppr.c, gdevvglb.c)
+
+Removes all remaining uses of the 'near' keyword from non-PC-specific code.
+(gdevcd8.c, gdevcdj.c, gdevcgm.c)
+
+Changes uses of round_up to ROUND_UP. (gdevmsxf.c, gdevpcx.c, gdevpx.c,
+gdevxxf.c)
+
+Adds user-contributed support for 16-bit displays to the MS Windows driver.
+(gdevmswn.c, gdevwdib.c)
+
+Adds a user-contributed driver (sunhmono) for the Harlequin variant of 1-bit
+Sun raster files. We expect to add other varieties of Sun Raster file
+eventually as well. (contrib.mak, gdevsunr.c)
+
+Adds a user-contributed driver (fs600) for the Kyocera FS-600 laser printer.
+(devs.mak, gdevdjet.c)
+
+Replaces the sample device CRD with a slightly hacked version of the default
+PostScript CRD, and moves it to a separate file for greater flexibility in
+testing. (gdevdcrd.h, gdevbit.c, gdevdcrd.c)
+
+Adds standard and "async" 32-bit CMYK BMP drivers (even though this is
+outside the published BMP format). (gdevbmp.c, gdevbmpa.c)
+
+Changes the names of the separated-CMYK PBM drivers from psm to pksm, to be
+more descriptive. (devs.mak, openvms.mak, unix-gcc.mak, gdevpbm.c)
+
+</pre><h3><a name="5.68_Platforms"></a>Platforms</h3><pre>
+
+Fixes problems:
+ - On MS Windows and OS/2, "(%stdin) (r) file bytesavailable" caused
+a crash. (gp_msio.c, gp_os2.c)
+
+</pre><h3><a name="5.68_Fonts"></a>Fonts</h3><pre>
+
+Fixes problems:
+ - TrueType fonts with fewer glyph names in post than entries in loca
+caused an error. (gs_ttf.ps)
+
+Adds additional tracing to the TrueType font loader. (lib/gs_ttf.ps)
+
+Per Adobe, adds the Euro symbol under the name /Euro (capitalized) to
+various built-in Encodings. (lib/gs_mro_e.ps, lib/gs_pdf_e.ps,
+lib/gs_sym_e.ps, lib/gs_wan_e.ps)
+
+</pre><h3><a name="5.68_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - An extraneous file got left in the fileset. (lib/pdf_main.ps.sav
+[deleted])
+ - The number of required arguments for .pathbbox was incorrectly
+specified as 0 rather than 1. (zpath1.c)
+ - Opening a ReusableStreamDecode filter with a string source and no
+decoding filters left an extra value on the stack. (lib/gs_ll3.ps)
+ - Type 32 fonts sometimes didn't display the characters, or
+displayed them offset. (lib/gs_typ32.ps)
+ - In LanguageLevel 3, copypage still called EndPage with 1 rather
+than 0. (lib/gs_init.ps)
+ - The HalftoneName parameter was missing from the trapping parameter
+set. (lib/gs_ll3.ps)
+ - CMap character entries were processed in the wrong order.
+(lib/gs_cmap.ps)
+ - CMap'ed non-CID fonts didn't work properly, because they called
+BuildChar with the original character code rather than BuildGlyph with the
+mapped glyph. (zchar.c)
+ - Using an out-of-range CID value with a CIDFont caused an error
+rather than substituting a notdef. (lib/gs_cidfn.ps)
+ - CIDFontType 0 fonts with a GlyphDirectory didn't fall back to the
+indexed character data if the CID wasn't in the GlyphDirectory.
+(lib/gs_cidfn.ps)
+ - CIDFontType 0 fonts didn't substitute a notdef at all.
+(lib/gs_cidfn.ps)
+
+Changes uses of round_up to ROUND_UP. (igcstr.c)
+
+Updates clients for the object-oriented changes to Patterns. (zcolor2.c,
+zpcolor.c)
+
+Implements the rest of PatternType 2. (ipcolor.h, zpcolor.c, zshade.c)
+
+Makes in-RIP trapping an optional feature. (lib/gs_ll3.ps, lib/gs_trap.ps)
+
+Updates clients for the change in gs_show_current_char. (zcfont.c, zchar.c)
+
+Changes the dict_*_param macros to procedures, for easier tracing. This
+includes a change in the return value of dict_matrix3_param. (icie.h,
+zcie.c, zcrd.c)
+
+</pre><h3><a name="5.68_Streams"></a>Streams</h3><pre>
+
+Changes uses of round_up to ROUND_UP. (scfd.c, scfe.c)
+
+</pre><h3><a name="5.68_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - Once again, gcc failed to flag a static procedure declaration
+followed by a non-static definition. (gdevprna.c, gximage3.c)
+ - Anti-aliasing no longer worked for the x11alpha device. To fix
+this, we factored out the anti-aliasing information in the
+gx_device_color_info structure. (bug introduced in 5.65) (gxdevcli.h,
+gdevabuf.c, gdevdflt.c, gdevxalt.c, gsdparam.c)
+ - An empty declaration generated an extraneous semicolon.
+(gxclip2.h)
+ - Some macros that generated an if-else construct didn't enclose it
+in BEGIN/END, possibly leading to incorrect parsing. (gxobj.h)
+ - A comment was missing a closing */. (gxpageq.h)
+ - The handling of the phase in Pattern filling was broken again. We
+probably broke it with the "fix" introduced in 5.24. (gxp1fill.c)
+ - Looking up an undefined IODevice name caused a memory access
+error. (bug claimed to be fixed in 5.24) (gsiodev.c)
+ - The null device installed for stringwidth didn't copy the color
+mapping information from its target, causing confusion if the current device
+was a pattern accumulator. (gxdevcli.h, gxdevice.h, gschar.c, gsdevice.c,
+gxpcmap.c)
+ - mem_mapped2_copy_mono produced incorrect results for byte-aligned
+rectangles exactly 1 byte wide (fix from John D.), and could also access
+data 1 byte beyond the end of each source row. (gdevm2.c)
+ - In the case of a masked image or a RasterOp involving a Pattern,
+the garbage collector could fail to follow a pointer, possibly causing
+memory corruption. (gsdcolor.h)
+ - Assigning a double value to a float variable caused an infinite
+recursion. (gxshade1.c)
+ - Failure to detect when the region being filled had become very
+small caused excessive recursion. (gxshade4.c)
+ - The default implementations of resize_object didn't always return
+the old object if the old and new sizes were the same. (gsalloc.c,
+gsmalloc.c)
+ - The left side bearing of TrueType characters was sometimes
+calculated incorrectly. (gstype42.c)
+ - The TrueType renderer disregarded the left side bearing values.
+We aren't sure that the change we made is right, but it seems to produce
+better output. (gstype42.c)
+ - Shadings used the first Decode entry for both X and Y values.
+(gxshade.c)
+ - Function-based Shadings sometimes omitted part of their output.
+(gxshade1.c)
+ - Function-based Shadings didn't access 4-bit-per-sample data
+correctly. (gsfunc0.c)
+ - The malloc/free-based allocator didn't finalize objects when
+freeing them. (gsmalloc.c)
+ - Reference counting for device instances was not implemented even
+close to consistently. THIS IS THE BUG TAIL WE WORRIED ABOUT IN 5.24.
+(gxdevcli.h, gxdevice.h, gdevbbox.c, gdevcmap.c, gdevmem.c, gdevnfwd.c,
+gdevplnx.c, gdevprn.c, gdevrops.c, gsalphac.c, gschar.c, gsdevice.c,
+gsropc.c, gxidata.c, gxmclip.c, gxipixel.c, gxpcmap.c)
+ - Some device structure definitions failed to include finalization.
+(gdevmrop.h, gsstruct.h, gxclip2.h, gxcpath.h, gxdevmem.h, gxmclip.h)
+ - Reference counting for the device halftone wasn't correct in the
+band rasterizer. This must be a recently introduced bug, because otherwise
+banding couldn't have worked. (gxclrast.c)
+ - When banding, high-level images that extended off the page in the
+Y direction caused memory access errors. (gxclimag.c)
+ - [a]widthshow didn't use the correct value for comparison for
+composite fonts with FMapType 9 (CMap). (gxchar.h, gschar.c, gschar0.c,
+gsfcmap.c)
+ - The special color mapping device only worked for
+device_cmap_monochrome. (gdevcmap.h, gdevcmap.c)
+ - The definition of gs_memory_locked_release was wrong.
+(gsmemlok.h, gsmemlok.c)
+ - An opaque structure definition (for gx_device) was missing,
+creating a need for an otherwise unnecessary #include. (gscrdp.h)
+ - Certain cached values weren't computed when needed. Fixing this
+required removing 'const' from a parameter type. (gscrdp.h, gscrdp.c)
+ - gxclmem.c #included "gsmalloc.h", which is no longer needed.
+(gxclmem.c)
+ - Memory management for device halftones was incorrect, leading to
+objects being freed twice or other memory corruption during band rendering.
+(gzht.h, gsht.c, gsstate.c, gxclrast.c, gxistate.c)
+ - Setting a driver-originated CRD didn't invalidate cached
+information, leading to incorrect output. (gscrdp.c)
+ - A consistency check on driver-originated CRDs was incorrect,
+causing valid CRDs to be rejected. (gscrdp.c)
+
+Removes dummy definitions for old PC-specific language extensions.
+(stdpre.h)
+
+Removes uses of the PC-specific 'huge' keyword. (gdevmem.c)
+
+Removes uses of the PC-specific 'near' keyword. (gdevabuf.c, gdevbbox.c)
+
+Changes the pointer comparison macros to upper-case names. (gxalloc.h,
+stdpre.h, gsalloc.c, gsmisc.c)
+
+Changes the alignment_mod macro to upper case. (stdpre.h, gdevdbit.c,
+gdevdgbr.c, gsparams.c, gxifast.c)
+
+Changes the round_up and round_down macros to upper case. We retain the
+lower-case definitions for the sake of the PCL code. (gxfcache.h, gxobj.h,
+stdpre.h, gdevalph.c, gdevmem.c, gsalloc.c, gspath1.c, gxccman.c,
+gxclimag.c, gxifast.c)
+
+Makes Pattern colors more object-oriented, to support PatternType 2,
+splitting gsptype1.c off from gspcolor.c in the process. (gsccolor.h,
+gsdcolor.h, gspcolor.h, gsptype1.h, gsptype2.h, gxcolor2.h, gxpcolor.h,
+gspcolor.c, gsptype1.c, gxpcmap.c)
+
+Implements PatternType 2. (gspcolor.h, gsptype1.h, gsptype2.h, gxcolor2.h,
+gxpcolor.h, gxshade.h, gspcolor.c, gsptype2.c)
+
+Changes the interface to shaded filling to make filling rectangles more
+efficient. (gsshade.h, gscolor3.c, gsshade.c)
+
+Improves some macros that didn't handle expressions as arguments.
+(gsrect.h)
+
+Improves tracing of loading the CIE caches. (gscie.c)
+
+Cleans up some formatting, and replaces some floating point divides with
+multiplies. (gstype42.c)
+
+Adds default values for the MaxSeparations (1), Separations (false), and
+SeparationColorNames (empty array) device parameters. (gsdparam.c)
+
+Adds -Z^ to trace reference counting. (gsrefct.h, gsmemory.c)
+
+Changes the definition of finalization so that finalization procedures *can*
+assume that objects they reference still exist. This is necessary so that
+forwarding devices can decrement the reference counts of their targets.
+Fortunately, all invocations of finalization (in 'restore', the garbage
+collector, and freeing) already have this property. (gsstruct.h)
+
+Extends CRD initialization so that cached values may be copied from an
+existing CRD. (gscrd.h, gscrd.c)
+
+Adds a wrapper to the driver create_buf_device procedure to increment the
+reference count, so that buffer devices can be freely used in graphics
+states and as a target. (gxdevcli.h, gdevprn.c, gxclread.c)
+
+Removes recursion from the shading rendering code, in preparation for making
+it interruptible (required for DeviceN color mapping callouts).
+(gxshade4.h, gxshade1.c, gxshade4.c, gxshade6.c)
+
+Monitor-locks the default allocator based on the C heap, if multi-threading
+is being supported at all. (lib.mak, gsmalloc.h, gsmalloc.c)
+
+Speeds up the implementation of mem_true32_copy_mono for the common case.
+(gdevm32.c)
+
+Adds a (disabled) option for defining gx_color_index as a pointer or a
+structure, for testing. (gxcindex.h)
+
+Makes the library test program test the special color mapper more
+thoroughly. (gslib.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.67"></a>Version 5.67 (internal) (1/8/99)</h2>
+
+<p>
+This fileset adds more PostScript LanguageLevel 3 capability:
+<ul>
+<li> - Complete implementation of shfill.
+<li> - Most of the expanded CMap capabilities.
+<li> - ReusableStreamDecode filter.
+<li> - FontType 2 for CFFs (formerly done in an incompatible way).
+<li> - HalftoneMode user parameter.
+<li> - HalftoneTypes 6, 10, and 16.
+<li> - ImageType 3 images.
+<li> - UseCIEColor device parameter.
+</ul>
+
+<p>
+It also adds a build script for MMK (which may also work with MMS) under
+OpenVMS, and Uli Wortmann's drivers for the H-P color inkjet printers.
+Among other bug fixes, it eliminates about half the "possibly uninitialized
+variable" compiler warnings.
+
+<h3><a name="5.67_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Library)
+ - The default UCR and BG functions are now f(k) = k rather than f(k)
+= 0.
+ - The set_[d]fmul2fixed_vars macros have been removed from
+gxfixed.h. Clients must use the new CHECK/FINISH_[D]FMUL2FIXED_VARS macros.
+(We don't think there are any such clients outside Ghostscript itself.)
+ - The internal procedure gx_cpath_intersect_slow is replaced with
+gx_cpath_intersect_path_slow, with different arguments.
+ - gs_color_space_type_Device{Gray,RGB,CMYK} are now private.
+Clients should use the gs_cspace_Device{Gray,RGB,CMYK} access procedures in
+gscspace.h to obtain device color space objects.
+ - FontType 2 was renamed from ft_CFF to ft_encrypted2.
+ - FontType 2 fonts now have FontType = ft_encrypted2, rather than
+ft_encrypted with CharstringType = 2. CharstringType no longer exists.
+ - Type 1 / Type 2 fonts now have an additional member, interpret,
+that must be initialized.
+ - gdev_prn_render_lines and gdev_prn_get_band_buffer replace
+gdev_prn_locate_overlay_buffer and gdev_prn_get_overlay_bits. "Async"
+drivers must now use the new procedures to implement partial-page rendering
+recovery.
+ - Clients that pass ImageType 3 images where the mask and the image
+are not scaled identically, or that call image_plane_data without knowing
+the image type, must now call gs_image_planes_wanted or
+gx_image_planes_wanted in order to find out which subset of the data planes
+to pass to the next call of image_plane_data.
+ - gx_image_enum_common_init now takes slightly different arguments.
+ - gs_imager_state_initialize now initializes the entire imager
+state, including halftone, dev_ht, and ht_cache.
+ - The argument lists for the plane_data and end_image procedures in
+image enumerators have changed.
+
+</pre><h3><a name="5.67_Documentation"></a>Documentation</h3><pre>
+
+Fixes problems:
+ - The 5.66 News mentioned the non-existent WAITFILE macro, and had
+another minor typo. (doc/News.htm)
+ - The URL for the user-contributed H-P 850c driver was incorrect.
+(doc/Devices.htm, contrib.mak)
+ - The documentation for the driver image API had gotten out of date.
+(doc/Drivers.htm)
+
+Greatly improves documentation for the page queue. (from Artifex 5.50c)
+(gxpageq.h)
+
+Documents the fact that Solaris builds now need -lposix4 for &lt;semaphore.h&gt;.
+(doc/Make.htm)
+
+Adds a stack status comment in .pdfshow. (lib/gs_pdfwr.ps)
+
+Documents the new -Z` debugging switch. (doc/Use.htm)
+
+Touches up some formatting in the C style guide, and adds a mention of the
+space-before-: rule for makefiles. (doc/C-style.htm)
+
+Adds documentation for the new H-P 8xx drivers. (doc/Devices.htm)
+
+Splits off news for versions 5.0 - 5.50 into a separate file.
+(doc/History5.htm)
+
+</pre><h3><a name="5.67_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - On MS Windows platforms, the DLL object file wasn't created in the
+proper directory. (from Artifex 5.55) (msvc32.mak)
+ - cfonts.mak didn't have no-op commands for rules that didn't
+contain any commands. (cfonts.mak)
+ - The version number for libpng was different from libpng's own
+version numbering system. (libpng.mak)
+ - Solaris builds now need -lposix4 for &lt;semaphore.h&gt;.
+(unix-gcc.mak, unixansi.mak, unixtrad.mak)
+ - The makefiles redefined a number of macros, which MMS doesn't
+allow. (bcwin32.mak, gs.mak, int.mak, lib.mak, libpng.mak, msvc32.mak,
+openvms.mak, openvms.mmk, unix-gcc.mak, unixansi.mak, unixtrad.mak,
+version.mak)
+
+Changes cp.bat and rm.bat to eliminate "File not found" messages. (from
+Artifex 5.55) (cp.bat, rm.bat)
+
+Changes all platform-independent makefiles to add a space before the : that
+separates the targets from the dependencies, to allow the makefiles to be
+used with MMS/MMK. (cfonts.mak, contrib.mak, devs.mak, gs.mak, int.mak,
+jpeg.mak, lib.mak, libpng.mak, zlib.mak)
+
+Adds a script for compiling Ghostscript on OpenVMS systems with MMK. This
+has not been tested extensively. (doc/Make.htm, openvms.mmk)
+
+Changes the set of optimization switches for MSVC++. We believe the new
+switches produce working executables, which /O2 didn't. (msvc32.mak,
+msvccmd.mak)
+
+Updates the default expected libpng version to 1.0.2. (bcwin32.mak,
+dvx-gcc.mak, msvc32.mak, msvclib.mak, openvms.mak, os2.mak, ugcclib.mak,
+unix-gcc.mak, unixansi.mak, unixtrad.mak, watc.mak, watclib.mak,
+watcw32.mak)
+
+</pre><h3><a name="5.67_Utilities"></a>Utilities</h3><pre>
+
+Fixes problems:
+ - Default scaling in viewcmyk.ps was broken. (lib/viewcmyk.ps)
+
+Updates pdf2dsc.ps with a newer (user-contributed) version that generates
+DocumentMedia and PageMedia comments. (lib/pdf2dsc.ps)
+
+</pre><h3><a name="5.67_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - An int * was provided where a uint * was required. (gdevpbm.c)
+ - ps2ps -dLanguageLevel=1 generated invalid output. (gdevps.c)
+ - The X drivers crashed on gray-scale displays. (bug probably
+introduced in 5.61) (gdevx.c)
+ - The width and height of the cljet5 device were interchanged.
+(from Artifex) (gdevclj.c)
+ - The PDF writer didn't clip cached characters properly. (bug
+introduced somewhere between 3.51 and 5.10) (gdevpdfi.c)
+ - For stroked paths with a non-uniform CTM, the PDF writer could
+emit coordinates larger than 32K, which Acrobat handles incorrectly.
+(gdevpdfd.c)
+
+Restructures some code to suppress bogus "possibly uninitialized variable"
+warnings. (gdevpdfm.c, gdevps.c)
+
+Adds some unnecessary initializations to suppress bogus "possibly
+uninitialized variable" warnings. (gdevpbm.c, gdevpdfd.c, gdevvec.c,
+gdevxalt.c)
+
+Rewrites the (contributed) X11 xfont code to remove code duplication.
+(gdevx.h, gdevx.c, gdevxini.c, gdevxxf.c)
+
+Adds a user-contributed driver for the H-P LaserJet 3100 with H-P software.
+(gdevmeds.h, gdevl31s.c, gdevmeds.c)
+
+Adds a user-contributed option for 600 dpi output on H-P DesignJet
+650C-compatible printers. (gdevcdj.c)
+
+Removes unnecessary references to device color spaces. (gdevpdfi.c)
+
+Changes the [e]pswrite and pdfwrite drivers to use EndOfBlock rather than
+Rows for CCITTFax image encoding, producing slightly smaller output.
+(gdevpsdf.c)
+
+Changes the sample async driver to use gdev_prn_render_lines and
+gdev_prn_get_band_buffer instead of locate_overlay_buffer and
+get_overlay_bits. Unfortunately, because "async" memory management is
+broken, we have no way to test the code. (gdevbmpa.c)
+
+Updates clients for the change in gx_image_enum_common_init. (gdevpdfi.c,
+gdevvec.c)
+
+Adds Uli Wortmann's drivers for the H-P color inkjet printers.
+(contrib.mak, gdevcd8.c)
+
+Adds mode 9 compression to the PCL printer utilities. (gdevpcl.h,
+gdevcdj.c, gdevpcl.c)
+
+Updates implementors for the change in the plane_data and image_end image
+processing procedures. (gdevpdfi.c, gdevps.c, gdevpx.c)
+
+</pre><h3><a name="5.67_Fonts"></a>Fonts</h3><pre>
+
+Fixes problems:
+ - The PFM files for URW Grotesk and Antiqua had some extraneous ^M
+characters inserted before ^J characters. (fonts/u003043t.pfm,
+fonts/u004006t.pfm)
+ - CID-keyed fonts didn't handle GlyphDirectory correctly.
+(lib/gs_cidfn.ps)
+ - CIDFontType 0 fonts with 0-length Subrs caused an error.
+(lib/gs_cidfn.ps)
+ - Malformed TrueType fonts with overlapping tables (which are
+nevertheless apparently acceptable to Windows) caused an error.
+(lib/gs_ttf.ps)
+ - The Hershey font repairs documented in fileset 5.24 apparently
+never happened: the makeher.ps program was fixed, but the derived fonts were
+still broken. (fonts/h*.ps)
+ - In some Fontmaps, the /Charter-* font names were linked directly
+to the Bitstream fonts, rather than being aliases for /CharterBT-*.
+(lib/Fontmap.GS, lib/Fontmap.Sol, lib/Fontmap.Ult)
+
+Makes undefined fonts execute the SubstituteFont procedure in $error, per a
+posting by Stephen Zisk of Adobe on pdf-prepress-l on 10/8/97.
+(lib/gs_fonts.ps)
+
+Changes the interpreter-level CIE color space install procedures to reflect
+the addition of const to the color space argument. (zcie.c)
+
+</pre><h3><a name="5.67_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - The interpreter appeared to be a distiller even when the current
+device was not pdfwrite. We fixed this by patching 'where' to make the
+distiller operators visible iff the current device is pdfwrite. We also
+moved the setcolor hack in 'where' into PostScript code. (lib/gs_init.ps,
+lib/gs_lev2.ps, lib/gs_pdfwr.ps, zmisc2.c)
+ - The current color space for shfill wasn't identically the same
+color space as the one in the shading. (gs_ll3.ps)
+
+Changes the default UCR and BG functions from f(k) = 0 to f(k) = k.
+(lib/gs_init.ps)
+
+Adds some unnecessary initializations to suppress bogus "possibly
+uninitialized variable" warnings. (igc.c, zcie.c)
+
+Restructures some code slightly to suppress a bogus "possibly uninitialized
+variable" warning. (zdevice.c)
+
+Brings the CMap machinery up to LL3, by allowing a single CMap to reference
+multiple fonts (usefont, usematrix, and array CIDSystemInfo).
+(lib/gs_cmap.ps, zfcmap.c)
+
+Finishes implementing ReusableStreamDecode. The implementation is very
+inefficient -- it reads the entire contents into a string -- but it passes
+the Genoa FTS. (lib/gs_ll3.ps, lib/gs_res.ps, zfreuse.c)
+
+Changes CFFs with CharstringType = 2 to generate FontType 2 fonts, rather
+than FontType 1 with CharstringType = 2, for compatibility with Adobe's LL3
+implementations. (lib/gs_cff.ps, lib/gs_type1.ps, lib/type1ops.ps, bfont.h,
+ichar1.h, ifont.h, ifont1.h, zbfont.c, zchar1.c, zchar2.c, zcharx.c,
+zfont.c, zfont1.c, zfont2.c)
+
+Adds the ability to create (with .bytestring) and do a few operations
+(currently only length, put, putinterval) on byte arrays. This is needed
+for implementing ReusableStringDecode filters with >64K bytes of data, and
+for the LL3 halftone types. (zgeneric.c, zstring.c)
+
+Implements HalftoneMode, and HalftoneTypes 6, 10, and 16. To do this, we
+introduce an internal HalftoneType 7. (lib/gs_dps2.ps, lib/gs_init.ps,
+lib/gs_ll3.ps, lib/gs_res.ps, zht2.c)
+
+Finishes implementing ImageType 3 images. (zimage.c, zimage3.c)
+
+Adds the hooks in ColorSpace defineresource and undefineresource for
+detecting definitions that interact with UseCIEColor. (gs_res.ps)
+
+Implements UseCIEColor at the interpreter level. (lib/gs_dps1.ps,
+lib/gs_ll3.ps, zcolor1.c, zcolor2.c, zimage.c, zmisc3.c)
+
+Touches up some formatting. (igstate.h)
+
+</pre><h3><a name="5.67_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - A MediaBox with a non-zero llx or lly would produce incorrect
+output. The way we fixed this doesn't exactly match Acrobat, but it
+produces reasonable output. (based on a change from Artifex 5.55)
+(lib/pdf_main.ps)
+ - Colored patterns didn't work properly. (lib/pdf_draw.ps)
+ - The resources in a Pattern dictionary weren't made available
+during the execution of the PaintProc. (fix from Artifex) (lib/pdf_draw.ps)
+
+</pre><h3><a name="5.67_Streams"></a>Streams</h3><pre>
+
+Adds a flag to the ASCIIHexEncode filter to indicate whether or not to write
+an EOD, required for Level 1 output from the pswrite device. (sstring.h,
+sstring.c)
+
+Adds a close_at_eod flag to the stream state, for implementing reusable
+streams; also cleans up some formatting. (stream.h, stream.c)
+
+</pre><h3><a name="5.67_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - Black-and-white images with Interpolate = true produced
+undesirable artifacts if the image resolution was close to that of the
+device. We now disable Interpolate in this case. (gxiscale.c)
+ - In "async" mode, get_hardware_params did an unnecessary flush and
+reopen. (from Artifex 5.50c) (gdevprna.c)
+ - The computation of the minimum band height for the "async" reader
+was incorrect. (from Artifex 5.50c) (gdevbmpa.c)
+ - The "fix" for reallocating async buffer memory in 5.50 was
+incorrect. (from Artifex 5.55) (gdevprn.c)
+ - The "async" reader called clist_finish_page, which it shouldn't.
+(from Artifex 5.50c) (gdevprn.c)
+ - The image enumeration procedures for ImageType 4 were unnecessary,
+since the ImageType 1 code now handles ImageType 4 as well. (gximage4.c)
+ - The structure descriptor for tile clipping devices was
+unnecessary, since these are the same as mask clipping devices. (gxclip2.h)
+ - There was a trailing comma in an enumeration list. (gsbitops.c)
+ - Some compilers didn't like initializing a uint with ~0.
+(gdevm1.c)
+ - shfill unnecessarily saved, reset, and restored the graphics
+state. (gscolor3.c)
+ - Radial shadings always extended the shading to radius = 0.
+(gxshade1.c)
+ - An identifier exceeded VMS's limit of 31 characters. (gdevprn.h,
+gdevprn.c)
+ - A header file didn't #include enough of its prerequisites.
+(gxpcolor.h)
+ - Images with non-default ImageMatrix weren't written correctly in
+the band list. (bug introduced in 5.60) (gximage1.c)
+ - Banded images that had to use the default implementation incurred
+an extra level of procedure call for each block of data. (gxclimag.c)
+ - Images rotated by other than a multiple of 90 degrees produced
+incorrect output, because pie-&gt;rect.p.y was updated after each block of
+data, causing image_band_box to produce inconsistent results. (bug
+introduced by async changes in 5.50) (gxclimag.c)
+ - The client_data pointer in client_order halftones wasn't traced
+correctly, possibly causing memory corruption if this type of halftone was
+used. (These are not currently used by the PostScript interpreter.)
+(gsht.c, gsht1.c)
+ - ImageType 3 images didn't handle subrectangles. (Not a problem
+for PostScript, which doesn't generate subrectangles, or for PCL, which
+doesn't use them.) (gximage3.c)
+ - If a VMerror occurred when setting up an ImageType 3 image. an
+attempt could be made to free an uninitialized pointer. (gximage3.c)
+ - ImageType 4 images with 1 to 8 bits per sample and Decode = [1 0]
+didn't test transparency correctly. (bug introduced in 5.60) (gximage.h,
+gxicolor.c, gximono.c, gxipixel.c)
+ - setgray, setrgbcolor, sethsbcolor, and setcmykcolor didn't use
+gs_cspace_assign, causing code duplication. After this fix, we made the
+device color space types private, since there are no longer any references
+to them outside gscspace.c. (gxcspace.h, gscolor.c, gscolor1.c, gscspace.c)
+ - gs_cspace_assign was misspelled cs_cspace_assign. (gscspace.h)
+ - setgray didn't set the pattern pointer of the current color to 0,
+possibly causing the GC to retain patterns it shouldn't. (gscolor.c)
+ - The dev_ht member of an imager (or graphics) state wasn't included
+in the macro that enumerates reference-counted pointers. This probably had
+no effect, since the macro isn't used. (gxistate.h)
+ - When the band rasterizer freed its imager state, the halftone and
+device halftone structures weren't freed, possibly causing memory leakage.
+(gsistate.c)
+
+Changes the default UCR and BG functions from f(k) = 0 to f(k) = k, per a
+user's suggestion. We aren't sure which matches the Adobe implementations
+on color devices. (gxdcconv.c)
+
+Conditionally removes some variables that are not needed on big-endian
+systems. (gdevm1.c)
+
+Restructures some code to suppress bogus "possibly uninitialized variable"
+warnings. (gxfixed.h, gdevddrw.c, gsmatrix.c, gsmisc.c, gxclimag.c)
+
+Adds a couple of unnecessary initializations to suppress bogus "possibly
+uninitialized variable" warnings. (gsbitops.c)
+
+Implements BBox, Background, and Extend for shadings. (Background isn't
+tested yet, because it only takes effect for pattern shading, which isn't
+implemented yet.) (gsshade.h, gxacpath.h, gxistate.h, gxpath.h, gscolor3.c,
+gsshade.c, gxacpath.c, gxacpath.c, gxcpath.c)
+
+Brings the CMap machinery up to LL3, by allowing a single CMap to reference
+multiple fonts (usefont, usematrix, and array CIDSystemInfo). (gsfcmap.h,
+gxfcmap.h, gsfcmap.c)
+
+Adds more tracing output to the band list reader. (gxclrast.c)
+
+Cleans up some formatting. (gstext.h, gxtext.h)
+
+Replaces FontType = 1, CharstringType = 2 with FontType = 2, to match the
+Adobe implementations. (gxfont1.h, gxftype.h, gxtype1.h, gstype1.c,
+gstype2.c, gxtype1.c)
+
+Adds new gs_bytestring and gs_const_bytestring structures that may reference
+either string or (byte) object storage. (gsstruct.h, gstypes.h, gsmemory.c)
+
+Implements an additional halftone type (ht_type_threshold2) needed for
+HalftoneTypes 6, 10, and 16. We don't extend gshtx.[hc] to deal with this
+at this time, since the new type is only needed for the PostScript
+interpreter. (gxht.h, gxhttype.h, gzht.h, gsht.c, gsht1.c, gshtscr.c)
+
+Adds a procedure for division mod M, possibly needed for halftones.
+(gxarith.h, gsmisc.c)
+
+Adds a -Z` debugging switch to turn off high-level images in the band list.
+(gxclimag.c)
+
+Implements gdev_prn_render_lines, as the lowest-level external API for
+rendering lines in a banded device. This call replaces the "overlay" calls
+for async rendering. (gdevprn.h, gdevprna.h, gxclist.h, gdevprn.c,
+gxclread.c)
+
+Extends the image enumeration API so that the enumerator can indicate what
+subset of the input planes it wants delivered on the next call to
+image_plane_data. Currently this is only needed for ImageType 3.
+(gsimage.h, gxdevcli.h, gxiparam.h, gdevddrw.c, gsimage.c, gximage.c,
+gximage3.c)
+
+Extends the image enumeration structures to handle images that require a
+different amount of data for plane N than Width * plane_depths[N]. This
+requires a NON-BACKWARD-COMPATIBLE change to the argument list of the
+gx_image_enum_common_init procedure. (gxiparam.h, gdevbbox.c, gsimage.c,
+gxclimag.c, gximage.c, gximage2.c, gximage3.c, gxipixel.c)
+
+Updates the copyright date to 1999. (gscdef.c)
+
+Cleans up formatting, capitalizes macro names, etc. (gximage.h, gxsample.h,
+gxipixel.c)
+
+Adds the UseCIEColor device parameter. (gxdevcli.h, gxdevice.h, gsdparam.c)
+
+Implements color space substitution (UseCIEColor). (gscolor2.h, gscspace.h,
+gscssub.h, gxistate.h, gzstate.h, gscolor.c, gscolor1.c, gscolor2.c,
+gscolor3.c, gscssub.c, gslib.c, gspcolor.c, gsstate.c)
+
+Changes the color space install procedure so that its color space argument
+is const. Now all color space implementation procedures take a const
+argument. (gscie.h, gxcspace.h, gscdevn.c, gscolor2.c, gscscie.c,
+gscspace.c, gscsepr.c, gspcolor.c)
+
+Changes gs_setcolorspace so its color space argument is const. (gscolor2.h,
+gscolor2.c)
+
+Splits imager state procedures out of gsstate.c, which was getting too
+large. (gxistate.h, gsstate.c, gsistate.c)
+
+Changes gs_imager_state_initialize so it really initializes the whole imager
+state. (gsistate.c, gxclrast.c)
+
+Removes the now-redundant first (device) argument from the plane_data and
+end_image procedures in image enumerators. Implementors of these procedures
+must now get the device from the enumerator structure. This is a
+NON-BACKWARD-COMPATIBLE design cleanup that we have been putting off for
+most of a year. Also adds an argument to plane_data so it can tell its
+client how many rows of data was used: this is needed for the implementation
+of ImageType 3. (gxdevcli.h, gxiparam.h, gdevbbox.c, gdevplnx.c, gsimage.c,
+gxclimag.c, gxidata.c, gximage.c, gximage3.c)
+
+Changes CFFs with CharstringType = 2 to FontType 2 fonts, rather than
+FontType 1 with CharstringType = 2, for compatibility with Adobe's LL3
+implementations. (gstype1.h)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.66"></a>Version 5.66 (internal) (11/25/98)</h2>
+
+<p>
+This fileset includes the ability to efficiently and conveniently obtain
+planar rather than chunky raster output. It also fixes a large number of
+minor compilation problems on non-ANSI compilers, and a small number of real
+problems. It also implements the PostScript LanguageLevel 3 clipsave and
+cliprestore operators. Unfortunately, because of fragility in third-party
+code changes that we were forced to include in the base graphics library,
+overlapped rasterizing ("async mode") fails:
+<ul>
+<li> - At 300 dpi, for 4-bit planar devices in the low-memory
+("partial
+ page") condition, and always for 32-bit planar devices.
+
+<li> - At 600 dpi, for all devices other than monochrome.
+</ul>
+
+<h3><a name="5.66_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Procedures)
+ - Every platform-specific makefile must now define _D_, the internal
+separator for defining preprocessor macros.
+ - Every platform-specific makefile must now define PSLIBDIR, the
+directory holding the PS initialization files at build time. (This need not
+be the same as where these files are stored at run time.)
+
+(Library)
+ - New elements arch_float_mantissa_bits and
+arch_double_mantissa_bits have been added to arch.h. Cross-build
+environments that supply arch.h rather than generating it at build time must
+add these elements.
+ - A new GB_SELECT_PLANES option has been added to the options mask
+for the get_bits_rectangle driver procedure. Implementations of this
+procedure must take this option into account (although they do not have to
+implement it).
+ - The make_buffer_device printer device procedure has been replaced
+with create_buf_device, setup_buf_device, and destroy_buf_device. All
+clients and implementors of make_buffer_device must be changed, including
+users of the clist_init_params macro.
+ - The gx_device_cmap_procs procedure has been replaced with
+gx_get_cmap_procs, which also take an imager state as an argument. Callers
+of gx_device_cmap_procs must be changed.
+
+</pre><h3><a name="5.66_Documentation"></a>Documentation</h3><pre>
+
+Updates Make.htm to clarify the standard directory structure.
+(doc/Make.htm)
+
+Adds a note about DEC C vs. VAX C for remapping of exit codes.
+(doc/Make.htm)
+
+Clarifies that the end_image procedure frees the enumerator. (gxiparam.h)
+
+</pre><h3><a name="5.66_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - The genxxx utilities didn't compile properly on systems where the
+C compiler doesn't automatically search for .h files in the directory of the
+.c file. (unixtail.mak)
+ - Preprocessor definitions require special quoting with Watcom C.
+Fixing this required adding a _D_ macro similar to II. This is a
+NON-BACKWARD-COMPATIBLE change, since this definition is now required in
+each platform-specific makefile. (dvx-head.mak, openvms.mak, os2.mak,
+unixhead.mak, wccommon.mak, winlib.mak, zlib.mak)
+ - The VMS subdirectories didn't include the "." to make the
+directory name relative. (openvms.mak)
+ - Some of the OpenVMS command files were omitted from the
+distribution. (copy_one.com, rm_one.com, rm_all.com)
+ - MMK interprets a final - on a command line as a continuation
+marker. (gs.mak)
+ - gsiparm4_h was used before being defined. (lib.mak)
+ - Compiled initialization code (COMPILE_INITS=1) was broken because
+of the introduction of subdirectories. (bcwin32.mak, dvx-gcc.mak,
+msvc32.mak, openvms.mak, os2.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak,
+watc.mak, watcw32.mak, int.mak, geninit.c)
+ - Level 1 configurations would no longer build with the standard set
+of drivers. (devs.mak)
+ - wmake interpreted "&amp;" in a rule command line as calling for
+background execution. (wccommon.mak)
+
+Makes the standard set of features the same on all platforms, namely, psl3
+(PostScript LanguageLevel 3) + pdf (PDF 1.2/1.3) + dpsnext (DPS with NeXT
+extensions) + ttfont (ability to load TrueType fonts directly). Unix
+platforms add pipe (recognition of %pipe% file names). (bcwin32.mak,
+dvx-gcc.mak, msvc32.mak, openvms.mak, os2.mak, unix-gcc.mak, unixansi.mak,
+unixtrad.mak, watc.mak, watcw32.mak)
+
+Adds minimal support for Windows 95/NT compiler versions. (wccommon.mak)
+
+Notes a set of switches that may work around the optimizer bug in MSVC++
+5.0. (msvccmd.mak)
+
+</pre><h3><a name="5.66_Utilities"></a>Utilities</h3><pre>
+
+Adds a switch to genconf to set the escape character, since wmake interprets
+"&amp;" in a rule command line as calling for background execution. (genconf.c)
+
+Makes echogs recognize -+ alone as equivalent to - alone, for the sake of
+VMS systems, which interpret a final - as a line continuation marker.
+(echogs.c)
+
+Adds a viewpsm procedure to viewpbm.ps, for reassembling plane-separated
+files. (lib/viewpbm.ps)
+
+</pre><h3><a name="5.66_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - There were places where the code assumed that void * could be
+coerced to byte *, which not all C compilers support. (gdevpdfx.h,
+gdevpdfo.c)
+ - The name put_bytes was defined in two places, causing an error
+when linking with NOPRIVATE=1. (gdevpx.c)
+ - The minimum space computation for high-level images and for the
+scan line length for the sample async driver was slightly too small.
+(gdevbmpa.c)
+
+Improves the tracing output from the psm driver. (gdevpbm.c)
+
+Rewrites some macros to eliminate "statement not reached" compiler warnings.
+(gdevpx.c)
+
+Revises the (only) client for changes in the plane-extraction device API.
+(gdevpbm.c)
+
+Adds plane-separated BMP drivers, primarily for testing but also as an
+example. bmp[a]sep1 and bmp[a]sep8 produce 1- and 8-bit-per-pixel separated
+CMYK. (gdevbmp.h, gdevbmp.c, gdevbmpa.c, gdevbmpc.c)
+
+</pre><h3><a name="5.66_Platforms"></a>Platforms</h3><pre>
+
+Fixes problems:
+ - The Watcom environment doesn't provide the st_blocks member of the
+stat structure. (stat_.h)
+ - In its standard configuration, the Watcom environment doesn't
+provide stdprn. (gp_iwatc.c)
+ - Newer versions of DEC C on OpenVMS don't require the remapping
+of the exit codes. (stdpre.h)
+
+Revises the dummy implementation of semaphores, monitors, and threads in an
+attempt to make async rendering (just barely) work for the non-overlay case.
+Unfortunately, this turned out not to be feasible. (gp_nsync.c)
+
+</pre><h3><a name="5.66_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - Certain DEC compilers assume that a pointer is aligned even if it
+is cast to a pointer whose target type has weaker alignment; this produced
+"unaligned access" errors in the interpreter. (interp.c)
+ - A necessary cast was omitted. (zcrd.c)
+ - Level 1 configurations would no longer run. (lib/gs_init.ps)
+
+Updates clients to set mask image fattening properly. (zimage.c, zimage2.c)
+
+Rewrites some macros to eliminate "statement not reached" compiler warnings.
+(files.h, istruct.h)
+
+</pre><h3><a name="5.66_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - The test for whether to honor the Rotate key was backwards. (bug
+probably introduced in 5.24) (lib/pdf_main.ps)
+
+Updates the code to handle improper PDF files in which the startxref and the
+following file position appear on the same line rather than (as required by
+the spec) two successive lines. (lib/pdf_main.ps)
+
+</pre><h3><a name="5.66_Streams"></a>Streams</h3><pre>
+
+Notes a bug in s_DCT_get_quantization_tables. (sdcparam.c)
+
+</pre><h3><a name="5.66_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - The algorithm for reducing 4-bit chunky to 1-bit separated colors
+didn't handle the trailing pixels of a transfer correctly. (gdevplnx.c)
+ - Banding for RGB devices with multi-plane halftones was broken.
+(bug introduced recently) (gxdcolor.c)
+ - Mask images were written in the band list with inverted polarity.
+(bug introduced in 5.60) (gximage1.c)
+ - Mask images were always fattened. Fixing this required extending
+the API, since gs_image_t_init_mask set adjust = true by default (a bad
+decision) and we didn't want to change it. (gschar.h, gscpm.h, gsiparam.h,
+gzstate.h, gschar.c, gximage1.c)
+ - The member names push and pop caused problems for compilers whose
+preprocessors consider it an error to use a macro defined with arguments as
+a name without arguments. (gxfont1.h, gstype1.c)
+ - Once again, gcc didn't detect some private/non-private mismatches.
+(gdevplnx.c, gsalphac.c, gximage2.c, gximage4.c)
+ - &amp; was used with an array (which gcc doesn't complain about).
+(gxshade6.c)
+ - There were several uses of automatic aggregate initialization,
+which not all C compilers support. (gdevprn.c, gdevps.c)
+ - There were places where the code assumed that void * could be
+coerced to byte *, which not all C compilers support. (gdevprn.c)
+ - Some \ line continuation characters were used inappropriately
+(in a macro argument list). (gxclimag.c)
+ - Some function prototypes didn't use the Pn macros. (gsalloc.c)
+ - A function definition not at the left margin confused ansi2knr.
+(gsfont.c)
+ - A cast for the result of malloc, needed on systems where malloc
+returns a char * rather than a void *, was missing. (gsmalloc.c)
+ - An occurrence of dev should be pdev. (I can't understand how we
+missed this in 5.65.) (gdevprna.c)
+ - A value was missing from a list of initial structure values,
+causing mismatches between subsequent values and the members they
+initialized. (gcc treated this as a warning: it should have given an
+error.) (gxband.h)
+ - When setting the tile phase during banding, the old value of the
+tile phase was written out rather than the new one. (gxclutil.c)
+ - The definition of fixed_mult_quo wasn't consistent between systems
+with FPU (where it took the floor, and might be slightly inaccurate) and
+systems without FPU (where it truncated towards zero, and was accurate).
+(gxfixed.h, genarch.c, gsmisc.c)
+ - Banding devices using multi-screen halftones didn't set the
+halftone phase correctly. We have now "fixed" this problem at least 4
+times. (gxclrast.c)
+ - The name put_bytes was defined in two places, causing an error
+when linking with NOPRIVATE=1. (gsparams.c)
+ - For [x][y]show, the pointers to the width arrays weren't
+initialized, causing memory access errors when checking or garbage
+collecting. (gschar.c)
+ - Due to a typo, bitmap characters were fattened too much.
+(gximage1.c)
+ - Some identifiers exceeded VMS's limit of 31 characters.
+(gdevprn.h, gscsepr.h, gsdevice.h, gxdevice.h, gdevdflt.c, gdevprn.c,
+gscsepr.c, gsdparam.c)
+ - The device halftone parameter was declared const inappropriately
+in some places. (gsdcolor.h, gxdither.h, gxdcolor.c, gxdither.c)
+ - gdev_mem_raster was used (misleadingly, even though it happened to
+produce the correct result) on possibly non-memory devices. (gxclread.c)
+ - Pure Level 1 configurations had some undefined procedures.
+(gscolor1.c, gscspace.c)
+ - Indexed color images could incorrectly conclude that they didn't
+need to re-render halftones, producing incorrect output. (gximono.c)
+ - gs_device_is_memory returned false for non-banding printer
+devices: this didn't used to matter, but it matters now. We changed it to
+test the procedures rather than the device name. (gdevmem.c)
+ - The plane extraction device didn't handle halftoned colors
+correctly. (gdevplnx.c)
+ - If an error occurred while building a Function object, a crash
+could occur while freeing the partially built object. (gsfunc.c)
+ - The plane extraction device didn't handle RasterOps correctly.
+(gdevplnx.c)
+ - The colors-used mask could include some additional, invalid bits.
+(gxclrect.c)
+ - The colors-used mask was updated incorrectly for RasterOps on
+subtractive-color devices. (gxclrect.c)
+ - Memory devices didn't set enough option bits for the case where
+get_bits_rectangle had to do conversion. (gdevmem.c)
+ - The TrueType font rasterizer didn't accept fonts whose 'type' was
+"true" rather than the documented <00 01 00 00>. (gstype42.c)
+ - A bug in the Watcom compiler caused two conditional expressions to
+execute incorrectly. (gstype42.c)
+ - When a page queue was freed, it attempted to free the page_info
+resource in the reserve entry, which is actually unused. (gxpageq.c)
+ - A necessary #include was missing. (gdevmr2n.c)
+
+Reduces the size of band list entries for halftoned colors somewhat.
+(gxclpath.h, gxclpath.c, gxclrast.c)
+
+Increases the number of saved band color masks per page, mostly for testing.
+(gxband.h)
+
+Rewrites some macros, and one 'for' statement, to eliminate "statement not
+reached" compiler warnings. (gxcldev.h, gxpath2.c)
+
+Corrects a tiny inaccuracy in the computation of trapezoid coordinates.
+(gdevddrw.c)
+
+Edits the trapezoid fill code for greater readability and better
+documentation of its functioning. The new code runs a little slower on
+compilers that don't support 'inline'. (gdevddrw.c)
+
+Improves the documentation of the tile phase bookkeeping. (gxclrast.c)
+
+Documents the fact that fixed_mult_quo takes the floor if the first argument
+is negative. (gxfixed.h)
+
+Finishes implementing clipsave and cliprestore. (gxclipsr.h, gxistate.h,
+gzstate.h, gsclipsr.c, gsstate.c)
+
+Implements driver access to planar, rather than chunky, banding.
+(gdevplnx.h, gdevprn.h, gxclist.h, gxdevcli.h, gxrplane.h, gdevplnx.c,
+gdevprn.c, gxclread.c)
+
+Makes it possible to set up memory devices that allocate just the line
+pointer table (but not the bitmap), or neither the line pointers nor the
+bitmap. (gxdevmem.h, gdevmem.c)
+
+Moves gx_device_white/black to a more appropriate header file. (gxdcolor.h)
+
+Moves gx_default_make_buffer_device to a more appropriate file.
+(gdevdflt.c, gdevprn.c)
+
+Adds plane extraction and expansion utility procedures, required for the
+extended capability of get_bits_rectangle. (gsbitops.h, gsbitops.c)
+
+Extends get_bits_rectangle so it can return individual planes rather than
+all planes. (gdevplnx.h, gsbittab.h, gxbitfmt.h, gxgetbit.h, gdevdgbr.c,
+gdevdrop.c, gdevmem.c, gdevplnx.c, gsalphac.c, gsbittab.c)
+
+Factors out the two more complex cases of gx_get_bits_copy into single-use
+procedures for readability. (gdevdgbr.c)
+
+Makes public the procedure for reducing a colored halftone to a pure or
+binary halftone, needed for planar rendering. (gxdither.h, gxdither.c)
+
+Moves the client_data pointer from gs_state to gs_imager_state.
+(gxistate.h, gzstate.h, gsstate.c)
+
+Extends the plane extraction device to handle fill_mask and images
+efficiently. (gxcmap.h, gdevplnx.h, gdevplnx.c)
+
+Creates a procedure to make a temporary copy of a gs_imager_state, needed
+for planar image processing. (gxistate.h, gsstate.c)
+
+Makes getting the color mapping procedures for a device a virtual procedure
+of the imager state, needed for planar image processing. (gxcmap.h,
+gxistate.h, gxcmap.c, gxicolor.c, gximono.c, gxi12bit.c)
+
+Increases the amount of memory allocated to the asynchronous rasterizer,
+since we now may need a dynamically allocated line pointer table for the
+target (plane) memory device. (gdevprna.c)
+
+Adds a record of which bands have "difficult" RasterOps -- RasterOps that
+can't be executed, even in principle, in CMYK space. We don't do anything
+with this information yet, but we will have to. (gsropt.h, gxband.h,
+gxcldev.h, gxclpath.h, gxclist.c, gxclpath.c, gxclrect.c)
+
+Makes conversion from render_plane indices to bit ranges the responsibility
+of the device, not the client. (gxrplane.h)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.65"></a>Version 5.65 (internal) (11/13/98)</h2>
+
+<p>
+The main purpose of this fileset is to fix the MS Windows and OpenVMS build
+procedures, which have been broken since 5.60. It also adds the ability for
+a driver to determine efficiently which colors are used in a given page or
+band, which is important for separated color printing, and contains some
+early support for plane-separated color printing.
+
+<h3><a name="5.65_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Procedures)
+ - Every platform-specific makefile must now define D_ and _D, the
+brackets for defining preprocessor macros.
+ - The unix-cc.mak makefile has been renamed unixtrad.mak, since it
+only applies to "traditional C" compilers.
+
+(Drivers, Library)
+ - Devices now store their TextAlphaBits and GraphicsAlphaBits values
+explicitly. The former get_alpha_bits procedure is obsoleted, and no
+longer implemented or called by any code we distribute.
+ - gx_device_color_info now has additional fields. Code that
+constructed gx_color_info_values in any way other than by using the dci_
+macros will no longer work.
+
+</pre><h3><a name="5.65_Documentation"></a>Documentation</h3><pre>
+
+Fixes problems:
+ - The -sPSFile= switch was still documented, even though it no
+longer exists. (doc/Use.htm)
+ - The - "switch" wasn't documented in the list of switches,
+although it was documented elsewhere. (doc/Use.htm)
+ - The documentation for the PC environments was out of date -- it
+didn't mention the use of subdirectories. (doc/Make.htm)
+
+Updates the documentation on PostScript files to indicate in what directory
+the files are distributed. (doc/Psfiles.htm)
+
+Documents more of the utility procedures used by printer drivers.
+(gdevprn.h)
+
+Notes that the public tar archives may not be compatible with the tar
+program in SunOS 4.1.3. (doc/Make.htm)
+
+Adds documentation on the Unix "make pg" target. (doc/Make.htm)
+
+Updates documentation to reflect the name change from unix-cc.mak to
+unixtrad.mak. (doc/Make.htm)
+
+Adds some links for the benefit of people who have built Ghostscript before
+and therefore skip reading the initial sections of the documentation.
+(doc/Make.htm)
+
+Documents the new -_ switch. (doc/Use.htm)
+
+Updates the documentation to mention PostScript LanguageLevel 3 and to
+remove many references to 16-bit systems. (doc/Language.htm)
+
+</pre><h3><a name="5.65_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - A cast discarded `const' needlessly. (genconf.c)
+ - Upper-case echogs switches were getting converted to lower case
+on VMS. (jpeg.mak)
+ - $(EXP) was missing before some invocations of executables.
+(gs.mak, jpeg.mak, lib.mak)
+ - Some dependencies in the Unix install script were incorrect.
+(unixinst.mak)
+ - Because of differences between shells, putting *.upp in the list
+of files to be installed didn't work with some shells. (unixinst.mak)
+ - The PC makefiles were out of date. (bcwin32.mak, pcwin.mak,
+winint.mak, winlib.mak, dwmain.rc, gsdll32.rc)
+ - Some makefiles still used $(DEV) instead of dev. (dvx-tail.mak,
+msvclib.mak, openvms.mak, os2.mak, pcwin.mak, watclib.mak, winlib.mak)
+ - The DEVICE_DEVSn lists overflowed the DOS 120-character command
+line limit again. We had to add DEVICE_DEVS16 through 20 to work around
+this. (*.mak)
+ - Preprocessor definitions have a different syntax on VMS. Fixing
+this required adding D_ and _D macros, similar to I_ and _I. This is a
+NON-BACKWARD-COMPATIBLE change, since these definitions are now required in
+each platform-specific makefile. (dvx-head.mak, openvms.mak, os2.mak,
+unixhead.mak, wccommon.mak, winlib.mak, zlib.mak)
+
+Adds command line switches to generate additional warnings when compiling
+the auxiliary programs with gcc. (unix-gcc.mak)
+
+Gets rid of the EXPP and SHP macros, since they aren't used or needed any
+longer. (gs.mak, bcwin32.mak, dvx-head.mak, msvccmd.mak, openvms.mak,
+os2.mak, unixhead.mak, watcw32.mak, wccommon.mak)
+
+Changes the Unix EXP to null, since all executables now use an explicit
+directory prefix. (unixhead.mak)
+
+Renames unix-cc.mak as unixtrad.mak, since people with ANSI-compatible cc
+were getting confused. (unix-cc.mak [deleted], unixtrad.mak)
+
+Adds a -_ switch, for piped execution with buffering. (iminst.h,
+imainarg.c)
+
+</pre><h3><a name="5.65_Utilities"></a>Utilities</h3><pre>
+
+Fixes problems:
+ - The revised ansi2knr didn't recognize "foo(void)" as a procedure
+definition. (ansi2knr.c)
+ - ansi2knr didn't handle function definitions where the last
+formal parameter was a procedure parameter. (ansi2knr.c)
+
+Adds a utility for printing an informative error page if a PostScript job
+fails. (lib/errpage.ps, doc/Psfiles.htm, unixinst.mak)
+
+</pre><h3><a name="5.65_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - The [e]pswrite drivers produced incorrect output for images in
+non-Device color spaces. We fixed this by causing all other images to be
+handled as rectangles. This is clearly not satisfactory: we need to unify
+the PS and PDF writers in this area. (gdevps.c)
+ - The CCITTFaxEncoded data produced by the [e]pswrite driver had
+both a Rows value and an EndOfBlock marker, which wasn't compatible with
+some Adobe interpreters. (gdevpsdf.c)
+ - X devices couldn't be copied, because the copy didn't clear the
+list of X fonts and therefore tried to free it a second time. (gdevx.c,
+gdevxini.c)
+ - gdevx.h declared a type called rect, conflicting with variables
+named rect. (gdevx.h, gdevx.c)
+ - A function definition wasn't formatted properly to be
+recognized by ansi2knr. (gdevupd.c)
+ - The PCL XL drivers crashed if given a masked image. (gdevpx.c)
+
+Adds a PBM driver that writes separated CMYK, using the colors-used masks to
+skip bands. (devs.mak, gdevpbm.c)
+
+Updates drivers that formerly supported the TextAlphaBits and
+GraphicsAlphaBits parameters themselves. (gdevmswn.h, gdevsvga.h,
+gdevpbm.c, gdevmswn.c, gdevpm.c, gdevwdib.c, gdevsvga.c, gdevxalt.c)
+
+</pre><h3><a name="5.65_Platforms"></a>Platforms</h3><pre>
+
+Fixes problems:
+ - The stack size on the Watcom platform was set too small.
+(watc.mak)
+ - The OpenVMS platform code and makefiles had gotten out of date.
+(gp_vms.c, openvms.mak)
+
+</pre><h3><a name="5.65_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - The size of Indexed color space lookup tables wasn't set, possibly
+causing them to be corrupted during garbage collection. (zcsindex.c)
+ - A function definition wasn't formatted properly to be
+recognized by ansi2knr. (icontext.c)
+ - quit was only rebound to stop in encapsulated jobs, rather than in
+any context under control of a job server. Since we don't currently have
+any explicit way to indicate whether execution is under control of a job
+server, we consider that it is under a job server iff startjob has ever been
+executed. (lib/gs_lev2.ps)
+
+Adds tracing output for removing an entry from a dictionary. (idict.c)
+
+Slightly improves dictionary deletion so that it can replace a run of
+deleted keys with empty keys. (idict.c)
+
+Adds statistics-gathering to the interpreter. (interp.c)
+
+Adds more statistics-gathering to the dictionary stack search. (idstack.c)
+
+Improves the debugging printout of packed arrays. (idebug.c)
+
+Increases the name table allocation increment from 128 names (1.5K) to 256
+names (3K), to provide better scattering of name indices. (inamedef.h)
+
+Changes the name count / index mapping to provide better scattering.
+(inamedef.h)
+
+</pre><h3><a name="5.65_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - If a font other than the base 14 wasn't embedded and lacked a
+descriptor, an error occurred. (The PDF specification explicitly prohibits
+this, but Acrobat PDFWriter 3.02 for Windows produces PDF files with
+TrueType fonts that lack a descriptor.) (lib/pdf_font.ps)
+
+</pre><h3><a name="5.65_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - The computation of colors used by CMYK halftones was incorrect.
+(gxclpath.c)
+ - Some header files had preprocessor directives with a space before
+the #, which pre-ANSI compilers don't accept. (gpsync.h, gsjconf.h,
+gsmemlok.h, gxsync.h, gxxfont.h)
+ - A number of prototypes didn't use the Pn macros. (gscolor2.h,
+gscsepr.h, gsptype1.h, gspcolor.c)
+ - A function definition wasn't formatted properly to be
+recognized by ansi2knr. (gxcht.c)
+ - The algorithm for reducing single-plane CMYK halftones to binary
+halftones was incorrect (bug introduced in 5.60). (gxdither.c)
+ - Writing a degenerate triangle or parallelogram in the band list
+could cause a memory access error when rasterizing. (gxclrast.c)
+
+Adds per-band "colors used" information to the information for a saved page,
+and procedures (gdev_prn_colors_used and gx_page_info_colors_used, defined
+in gdevprn.h) for accessing it. (gdevprn.h, gxband.h, gxclist.h, gdevprn.c,
+gxclist.c)
+
+Adds an internal device that appears to clients as a multi-plane color
+device, and extracts a single plane for actual rendering. This device will
+be used to support planar output devices. (gdevplnx.h, gsbitops.h,
+gdevplnx.c)
+
+Adds explicit color_info.text_anti_alias_bits and graphics_anti_alias_bits
+values in the device state, obsoleting the get_alpha_bits procedure, and
+makes them settable for all devices. (gxdevcli.h, gxdevice.h, gdevabuf.c,
+gdevdflt.c, gdevnfwd.c, gdevprn.c, gsdparam.c)
+
+Reformats some code for readability. (gxdither.c)
+
+Adds a tentative API for a procedure that allows band rasterizing directly
+into client's memory. This is tentative because we may need to add the
+ability to select an individual plane. (gdevprn.h)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.64"></a>Version 5.64 (internal) (11/5/98)</h2>
+
+<p>
+This is another incremental fileset to fix problems for an external
+customer.
+
+<h3><a name="5.64_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Drivers)
+ - The output_page procedure of all drivers now must call
+gx_finish_output_page as its last action. (This doesn't affect ordinary
+printer or raster file drivers, which already call a common procedure.)
+
+</pre><h3><a name="5.64_Documentation"></a>Documentation</h3><pre>
+
+Fixes problems:
+ - The instructions for creating 'makefile' on Unix systems were
+out of date. (doc/Make.htm)
+
+</pre><h3><a name="5.64_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - An omitted return statement caused genconf to malfunction on some
+platforms. (genconf.c)
+ - The replacement of MAKEFILES by TOP_MAKEFILES accidentally changed
+some comments that should not have been changed. (bcwin32.mak, gs.mak,
+msvctail.mak, openvms.mak, os2.mak, watcw32.mak, wctail.mak, winlib.mak)
+
+</pre><h3><a name="5.64_Drivers"></a>Drivers</h3><pre>
+
+Updates drivers to call gx_finish_output_page where needed. (gdev3b1.c,
+gdevcgm.c, gdevcp50.c, gdevpdf.c, gdevmswn.c, gdevpm.c, gdevps.c, gdevpx.c,
+gdevsnfb.c, gdevwprn.c, gdevx.c)
+
+</pre><h3><a name="5.64_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - The FontBBox workaround introduced in 5.63 didn't work properly.
+(zchar1.c)
+ - PageCount was getting incremented in the first device of a device
+pipeline, rather than in the last one and being propagated back.
+(gxdevice.h, gdevbbox.c, gdevdflt.c, gdevnfwd.c, gdevprn.c, gdevprna.c,
+gsdevice.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.63"></a>Version 5.63 (internal) (11/4/98)</h2>
+
+<p>
+This fileset was driven by the development needs of an external customer,
+primarily related to asynchronous rendering. It includes a few bug fixes as
+well.
+
+<h3><a name="5.63_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Procedures)
+ - In the makefiles, changes the name MAKEFILES to TOP_MAKEFILES.
+
+(Library)
+ - The pis member of the Type 1 interpreter state was renamed in
+order to catch places that assumed it was set. (It may now be 0.) This
+should not affect any client code.
+ - gx_page_queue_dnit and gx_page_queue_finish_dequeue now free the
+band list information associated with the page_info in the queue entry. An
+explicit call of gx_page_queue_entry_free_page_info is now required to free
+this information before any other call of gx_page_queue_entry_free.
+
+</pre><h3><a name="5.63_Documentation"></a>Documentation</h3><pre>
+
+Fixes problems:
+ - devs.mak incorrectly referred to msdevs.mak rather than pcwin.mak.
+(devs.mak)
+
+</pre><h3><a name="5.63_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - There was a $ in the makefile that wasn't quoted. (unix-gcc.mak)
+ - The name MAKEFILES has a special meaning in GNU make which only be
+disabled by using a directive that is a syntactic error for standard 'make'
+implementations. We had to work around this by changing all occurrences of
+MAKEFILES to TOP_MAKEFILES. (*.mak)
+ - genconf did the wrong thing for modules with names shorter than
+5 characters. (genconf.c)
+
+</pre><h3><a name="5.63_Drivers"></a>Drivers</h3><pre>
+
+Updates the Canon BJC library, changing the names of the files. This code
+is still very preliminary. (gdevbjcl.h, gdevbjcl.c)
+
+</pre><h3><a name="5.63_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - Some Type 1 fonts have a plausible but incorrect (too-small)
+FontBBox, causing some characters to be clipped. We work around this by
+enlarging the FontBBox and restarting the rasterization if the outline goes
+outside the FontBBox. (zchar1.c)
+
+</pre><h3><a name="5.63_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - gx_default_strip_copy_rop didn't check for zero width before
+dividing by it. (gdevdrop.c)
+ - Some places that called a procedure returning void tried to use
+the return value. (gximage.c, gximage1.c, gximage4.c)
+ - The flatness for rendering Type 1 characters was set incorrectly
+(always set to 0, producing best accuracy at extra cost) for characters not
+in portrait orientation. (gxtype1.c)
+ - clist_begin_typed_image incorrectly used the memory manager client
+name "clist_begin_image". (gxclimag.c)
+ - If a page queue entry was created without a page_info, the entry's
+page_info wasn't initialized, probably causing a crash when attempting to
+free the (nonexistent) associated band files later. (gxpageq.c)
+
+More fully supports the use of saved page_info objects for decoupling banded
+rendering from band list construction:
+ - Adds the ability to close and free the command list associated
+with a saved page. (gxclist.h, gxclist.c)
+ - Separates freeing of the band list information associated with a
+page queue entry from freeing the entry itself. (gxpageq.h, gxpageq.c)
+ - Changes the rendering thread for asynchronous band rendering so
+that it doesn't try to free the band list information twice. (gdevprna.c)
+
+Implements triangles and parallelograms in the band list, primarily for the
+sake of smooth shading. (gxclpath.h, gxclist.c, gxclpath.c, gxclrast.c)
+
+Adds a rectangle merging procedure, parallel to rectangle intersection.
+This is needed for the FontBBox fix. (gsrect.h)
+
+Adds logic for keeping track of what pixel values are used in which bands.
+Currently this information is not used for anything. (gdevmrop.h, gsropt.h,
+gxcldev.h, gxclpath.h, gxclrect.c, gxclpath.c, gxclimag.c)
+
+Updates a few more files for readability and coding conventions.
+(gxband.h, gxpageq.c)
+
+Updates users of gxband.h and gxpageq.h. (gdevprn.h, gxclist.h, gxpageq.h,
+gdevprna.c, gxclpage.c, gxclread.c)
+
+Moves the definition of the page queue into the (private) implementation
+file. (gxpageq.h, gxpageq.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.62"></a>Version 5.62 (internal) (10/31/98)</h2>
+
+<p>
+This fileset concludes this round of work on (primarily color) performance
+improvement. It contains almost no new bug fixes.
+
+<h3><a name="5.62_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Library)
+ - Clients that load the CIE caches themselves must now reset the
+procedures to the _from_cache values. (This affects the PostScript
+interpreter, but no ordinary library clients.)
+ - gs_cie_compute_wbsd (an internal procedure) was changed to
+gs_cie_compute_points_sd, with different parameters.
+
+</pre><h3><a name="5.62_Documentation"></a>Documentation</h3><pre>
+
+Adds information about problems with PDF files copied from Macintosh
+environments. (doc/Use.htm)
+
+</pre><h3><a name="5.62_Drivers"></a>Drivers</h3><pre>
+
+Adds a library for generating Canon BJC commands. This code is subject to
+change without notice! (gdevcbjc.h, gdevcbjc.c)
+
+</pre><h3><a name="5.62_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - The structures allocated for CIE RenderTables weren't marked
+correctly for garbage collection, possibly mangling the output. (zcie.c)
+ - The CIE color space procedures weren't reset after the cache was
+loaded, producing incorrect output now that it matters. (zcie.c, zcrd.c)
+
+</pre><h3><a name="5.62_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - Under some circumstances, a setbbox didn't take effect.
+(gxpcopy.c)
+ - The last step of CIE color mapping didn't clamp the very top end
+of the range correctly. (gsciemap.c)
+
+Speeds up bits_replicate_horizontally a bit more. (gsbitops.c)
+
+Separates the CIE color mapping code from CIE cache loading, since the file
+was getting too big. (gscie.h, gscie.c, gsciemap.c)
+
+Finishes adding the hooks for skipping steps during CIE color mapping when
+possible, and implements one case of step-skipping. (gscie.h, gscie.c,
+gsciemap.c, gscrd.c)
+
+Adds more tracing to the CIE color machinery. (gscie.c)
+
+Changes the default number of tiles for the colored halftone screen caches
+from 1 to 4, substantially reducing cache turnover. (gsht1.c, gshtx.c,
+gxclrast.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.61"></a>Version 5.61 (internal) (10/28/98)</h2>
+
+<p>
+More rendering speedups, and fixes for many of the minor problems reported
+in 5.50.
+
+<h3><a name="5.61_Documentation"></a>Docmentation</h3><pre>
+
+Fixes problems:
+ - There were still some incorrect references to .txt files.
+(gs.mak, libpng.mak)
+ - Two references to libpng should have referred to libjpeg.
+(gs.mak)
+
+</pre><h3><a name="5.61_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - GNU 'make' treats the name MAKEFILES specially. (unix-gcc.mak)
+ - genconf didn't sort libraries in the right order. (genconf.c)
+ - The dependency for ansi2knr, and the invocation of ccgs, didn't
+include the directory name. (ccgs, unix-cc.mak)
+ - The CC_ and CCAUX rules didn't invoke the new ccgs correctly.
+(unix-cc.mak)
+ - There was a typo in a comment. (unixtail.mak)
+ - gcc versions of the form 2.7.2.f.1 weren't recognized as having
+the const-related code generation bug. (unix-gcc.mak)
+
+Documents workaround for bugs in newer IRIX compilers. (doc/Make.htm)
+
+</pre><h3><a name="5.61_Utilities"></a>Utilities</h3><pre>
+
+Fixes problems:
+ - ansi2knr didn't understand the new formatting of the enum_ptrs and
+reloc_ptrs procedures, which now don't have a left brace on the same line as
+the macro call that defines the procedure. (ansi2knr.c)
+
+Adds a utility for viewing MIFF files. (lib/viewmiff.ps)
+
+</pre><h3><a name="5.61_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - The X driver could report a depth (e.g., 15 bits) that caused
+problems elsewhere. (gdevxini.c)
+ - With the X driver, if the display is grey-scale or does not have
+enough colors to allocate a color ramp, Ghostscript crashed in
+x_map_color_rgb due to an array index overflow. (gdevx.c)
+ - The PDF writer used the X scaling of fonts to determine the point
+size rather than the Y scaling, which gives the wrong result for synthetic
+condensed fonts. (gdevpdft.c)
+ - If the last thing written before a flushpage was text, the X
+driver might fail to display it. (gdevx.c)
+ - The PDF writer didn't free the streams created for image
+compression, causing a memory leak. (gdevpsdf.c)
+ - pswrite didn't output a command to set the page size. (gdevps.c)
+
+Removes an obsolete comment and commented-out line. (gdevxalt.c)
+
+</pre><h3><a name="5.61_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - Explicit (not resource) Indexed color spaces caused an error.
+(lib/pdf_draw.ps)
+
+</pre><h3><a name="5.61_Streams"></a>Streams</h3><pre>
+
+Fixes problems:
+ - The PNGPredictor filters didn't free their row buffer. (spngp.c)
+ - The PNGPredictor filters didn't handle end-of-data correctly.
+(spngp.c)
+
+Changes the eexec filter to ignore % characters when reading
+ASCIIHex-encoded data. This is contrary to the Adobe documentation, but one
+badly coded prologue requires it. (seexec.c)
+
+</pre><h3><a name="5.61_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - The definition of TRANSPARENCY_PER_H_P was in the wrong module,
+causing it to be ignored. (gdevmrop.h, gdevdrop.c)
+ - There was a typo in the tracing output for init_tile_cursor.
+(gxcht.c)
+ - gx_get_bits_copy computed the standard raster incorrectly if
+the destination used a different color representation from the source,
+causing multi-line transfers to be done incorrectly. (gdevdgbr.c)
+ - Parentheses were missing around the use of width_bits in the
+definition of bitmap_raster, possibly causing incorrect computation.
+(gxbitmap.h)
+ - When rendering a Pattern, a singular CTM caused an error even if
+the Pattern was empty. (gspcolor.c)
+ - The lookup table wasn't allocated for device-originated CRDs.
+(gscrdp.c)
+ - If an error occurred when setting up to rasterize a band,
+data_bits could be freed without ever having been initialized. (gxclrast.c)
+ - Processing a CIE-color image with a color space different from the
+current color space caused an error. (gscie.c)
+ - The speedup for bits_replicate_horizontally had an algorithm
+error, producing incorrect output. (gsbitops.c)
+
+Splits up the memory device implementation of RasterOp, since the file was
+getting too large. (gdevmem.h, gdevm1.c, gdevm8.c, gdevm16.c, gdevm24.c,
+gdevm32.c, gdevmrop.c [deleted], gdevmr1.c, gdevmr2n.c, gdevmr8n.c,
+gsnorop.c)
+
+Cleans up a little formatting. (gsbittab.h)
+
+Speeds up the default RasterOp implementation some more. (gdevdgbr.c,
+gdevdrop.c, gdevmem.c)
+
+Speeds up testing whether a given halftone level is already present in its
+cache. (gzht.h, gxht.c)
+
+Speeds up 1-bit CMYK halftones a bit more. (gxcht.c)
+
+Makes filling always use the (much faster) trapezoid-based algorithm if the
+region being filled is a rectangle. (gxfill.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.60"></a>Version 5.60 (internal) (10/18/98)</h2>
+
+<p>
+This fileset incorporates many performance enhancements for 1-bit CMYK
+devices, especially for PCL 5c interpretation.
+
+<p>
+This fileset divides the files into subdirectories. In the lists of changed
+files, files with no explicit subdirectory name are in the src subdirectory.
+The revised OpenVMS and OS/2 makefiles have not been tested.
+
+<h3><a name="5.60_Incompatible_changes"></a>Incompatible changes</h3><pre>
+
+(Procedures)
+ - The instructions for font compilation in doc/Fonts.htm are
+different.
+ - The fileset has been split into multiple directories; the source
+code and makefiles are now in src/.
+ - The top-level makefile requires a definition for BINDIR for the
+directory to hold the final executable.
+ - Every .dev rule of the form
+ xxx.dev: &lt;list&gt;
+ $(SETyyy) xxx &lt;items&gt;
+ $(ADDMOD) xxx &lt;items&gt;
+must be changed to
+ $(DD)xxx.dev: &lt;list&gt;
+ $(SETyyy) $(DD)xxx &lt;items&gt;
+ $(ADDMOD) $(DD)xxx &lt;items&gt;
+(DD for drivers, PSD for PostScript/PDF-interpreter features, GLD for
+graphics library features). Every -include and -replace option in the
+makefiles rules, and every element of FEATURE_DEVS and DEVICE_DEVS*, must be
+changed similarly. This is very unfortunate, especially since people
+editing FEATURE_DEVS and DEVICE_DEVS* must now know which subsystem
+implements a particular feature; but we tried 3 different ways to get the
+generated .dev files out of the top-level directory, and this was the only
+one we could make work.
+ - Top-level makefiles must define both MAKEFILE and MAKEFILES,
+the latter to include any subsidiary makefiles that define configuration
+parameters. Dependencies on $(MAKEFILE) must be changed to $(MAKEFILES).
+ - Color space objects now must either be allocated with the
+gs_cspace_build_ procedures or initialized with the gs_cspace_init_
+procedures: building color spaces "by hand" is no longer allowed.
+
+(Library)
+ - There are new required elements of the gs_image_type_t structure.
+ - The binary and colored variants of gx_device_halftone have
+changed. (No APIs are affected.)
+ - If a device changes its (effective) color mapping algorithm other
+than as a side effect of put_params, it must call
+gx_device_decache_colors(dev).
+
+</pre><h3><a name="5.60_Documentation"></a>Documentation</h3><pre>
+
+Fixes problems:
+ - Some files still referred to .doc files rather than .htm.
+(gsiparam.h, imain.h)
+ - Version 5.50 was incorrectly identified as a beta version.
+(doc/News.htm)
+ - The instructions for cross-compilation were seriously
+incomplete. (doc/Make.htm)
+
+Adds a text-only README file. (doc/README)
+
+Updates the instructions for font compilation. (doc/Fonts.htm)
+
+Updates the instructions for device and feature selection. (doc/Make.htm)
+
+Adds material on 8.3 file names, compiler warning messages, and graphics
+library error codes to the C style guide. (doc/C-style.htm)
+
+Adds a note about gx_device_decache_colors. (doc/Drivers.htm)
+
+Improves formatting slightly. (doc/Install.htm, doc/Use.htm)
+
+</pre><h3><a name="5.60_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - The Unix install script referred to an obsolete ps2image.ps file.
+(unixinst.mak)
+ - The Unix CC script had some duplicated definitions. (unix-cc.mak)
+ - The DVX makefile referred to int.mak in GLSRC rather than PSSRC.
+(dvx-gcc.mak)
+ - rollconv.ps wasn't installed with the other utilities.
+(unixinst.mak)
+ - Some definitions of MAKEFILE lacked a directory name. (os2.mak,
+unix-cc.mak, unixansi.mak, watclib.mak)
+ - There were inappropriate dependencies on a file with the literal
+name `makefile'. (bcwin32.mak, gs.mak, watc32.mak)
+ - Unix systems didn't use -fomit-frame-pointer when possible.
+(unix-cc.mak, unix-gcc.mak, unixansi.mak, unix-end.mak)
+
+Restructures the source files into multiple subdirectories:
+ src/ - files needed at build time: *.mak, *.h, *.c, *.cpp, *.icx, *.rc,
+ *.cmd, ??.bat, *.com, *.rps, *.dif, *.cfg
+ lib/ - files needed at run time: *_*.ps, *.ppd, *.upp, *.bat
+ doc/ - documentation other than man pages: *.htm, *.txt
+ man/ - man pages: *.1
+ examples/ - sample input data: *.ps, *.eps, *.pdf
+Also incorporates the font compilation makefile into the main makefile,
+since the former now depends on parameters defined in the latter. (*.mak)
+
+****** HAVEN'T SETTLED HOW TO HANDLE .ico FILES ******
+
+NOTE: Still need to update: openvms.mak, os2.mak.
+
+Updates the Unix install script for the directory split. (unixinst.mak)
+
+Updates the font compilation makefile rules to handle alternate directories.
+(cfonts.mak, int.mak)
+
+****** PROBLEM: cfonts.mak NEEDS CCFONT, BUT int.mak NEEDS CF* FOR ADDING
+ONE'S OWN FONTS ******
+
+Removes useless dependencies on gs_*.ps files. (int.mak)
+
+Moves the .dev files into the GEN directories where they belong. (gs.mak,
+dvx-tail.mak, msvclib.mak, openvms.mak, os2.mak, pcwin.mak, ugcclib.mak,
+unixhead.mak, unixtail.mak, unix-end.mak, watc.mak, watclib.mak, winlib.mak,
+echogs.c, genconf.c) ****** NO_OP FOR dvx HASN'T BEEN VERIFIED ******
+NOTE: Still to do:
+src/bcwin32.mak
+src/dvx-gcc.mak
+src/dvx-head.mak
+src/dvx-tail.mak
+src/msvc32.mak
+src/msvccmd.mak
+src/msvclib.mak
+src/msvctail.mak
+src/openvms.mak
+src/os2.mak
+src/pcwin.mak
+src/ugcclib.mak
+src/watc.mak
+src/watclib.mak
+src/watcw32.mak
+src/wccommon.mak
+src/wctail.mak
+src/winint.mak
+src/winlib.mak
+
+Adds a new BINDIR directory for the final executable (and associated files
+like resource files). After building, only the contents of BINDIR and lib
+are needed for execution. (gs.mak, unix-end.mak) ****** NEED TO DO
+openvms.mak, os2.mak, OTHER PC MAKEFILES ******
+
+Updates libpng to version 1.0.2. (libpng.mak)
+
+</pre><h3><a name="5.60_Utilities"></a>Utilities</h3><pre>
+
+Adds a new switch, -b, to echogs. (echogs.c)
+
+</pre><h3><a name="5.60_Drivers"></a>Drivers</h3><pre>
+
+Updates the PDF writer for the change in color space initialization.
+(gdevpdfi.c)
+
+Speeds up the pkmraw driver a bit more. (gdevpbm.c)
+
+Updates some drivers to use the new CMYK color mapping procedures.
+(gdevpbm.c, gdevpcx.c, gdevxalt.c)
+
+Updates one driver that maintained its own color cache. (gdevxalt.c)
+
+Removes some compiler warnings (mostly about "uninitialized" variables).
+(gdevpdfo.c, gdevpdft.c, gdevpx.c)
+
+Adds another driver for the H-P Color LaserJet 5/5M. (gdevcljc.c)
+
+</pre><h3><a name="5.60_Platforms"></a>Platforms</h3><pre>
+
+Fixes problems:
+ - A change in the MetroWerks C compiler caused the hypot function
+to become declared. (math_.h)
+
+</pre><h3><a name="5.60_Interpreter"></a>Interpreter</h3><pre>
+
+Updates the compiled font code for updates in the type declarations.
+(iccfont.c, icfontab.c)
+
+Cleans up some more formatting and macros. (ccfont.h, errors.h, icfontab.c,
+interp.c)
+
+Updates clients for the change in color space initialization. (zcsdevn.c,
+zcsindex.c, zcspixel.c, zcssepr.c, zpcolor.c)
+
+Updates the memory validator for the addition of the large-block freelist.
+(ilocate.c)
+
+</pre><h3><a name="5.60_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - If the final %%EOF was followed by any blanks before the newline,
+an error would occur. (lib/pdf_main.ps)
+
+</pre><h3><a name="5.60_Streams"></a>Streams</h3><pre>
+
+Fixes problems:
+ - The LZWDecode filter wouldn't handle a file that had 4096-256-2+1
+data items before the reset. (We think this is a bug in the file, but
+Acrobat accepts it.) (slzwx.h, slzwd.c)
+
+Rearranges code slightly to improve readability. (spdiff.c)
+
+</pre><h3><a name="5.60_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - Changing the resolution (or any other parameter) of the bbox
+device from the command line caused an invalid memory access. (gdevbbox.c)
+ - When banding, if the very first drawing operation involved a
+halftone with non-zero phase, an arithmetic exception occurred.
+(gxclpath.c)
+ - When banding, the X offset of the band was negated, producing
+incorrect output when placing multiple source pages on a single output page.
+(gxclread.c)
+ - When banding, rotated images crossing band boundaries produced
+incorrect output, because the subrectangle X value was inconsistent with the
+amount of data transmitted. (gxclimag.c)
+ - When banding, the clipping check didn't take interpolation support
+into account. (gxclimag.c)
+ - The clipping check for banding used (int) to take the floor of
+floating point values, which is wrong for negative values. (gxclimag.c)
+ - The bounding box device didn't return an empty bounding
+rectangle if nothing had been written to it. (gdevbbox.c)
+ - A value was conditional on a debugging switch even if DEBUG wasn't
+defined. (gxcht.c)
+ - Filling a region with a large colored halftone, a non-default
+RasterOp, and a non-null RasterOp source could cause only part of the region
+to be filled. (gxcht.c) ****** NOT FIXED YET ******
+ - Type 1 fonts that used very large numbers (&gt;= 2^19) caused a
+rangecheck. We've fixed this for the only case that seems to matter, namely
+&lt;very-large-number&gt; &lt;number&gt; div. (gxtype1.h, gstype1.c)
+ - The memory-based band list allocator failed to return an error
+code from memfile_next_blk. (gxclmem.c)
+ - When recovering from a low-band-list-memory condition while
+writing an image, the record of the current image enumeration
+(cdev-&gt;image_enum_id) wasn't updated. (gxclimag.c)
+ - The estimated memory requirement for the band list rasterizer was
+too small. (gdevprna.c)
+
+Adds some tracing to mask clipping. (gxclipm.c)
+
+Speeds up masked images by doing mask clipping before halftoning, using a
+more efficient mask scanning algorithm, and checking for vertical blocks of
+1s. (gxclipm.c)
+
+Speeds up ImageType 4 images greatly by incorporating the color-key check
+into the ImageType 1 rendering code. NOTE: the 12-bit case has not been
+tested. (gxcpath.h, gximage.h, gxi12bit.c, gxicolor.c, gxifast.c,
+gxiinit.c, gximage4.c, gximono.c, gxiscale.c)
+
+Implements passing ImageType 4 images (and potentially others) through the
+band list. This involves adding image parameter writing and reading
+procedures to the image type structure. (gscdefs.h, gsiparam.h, gsiparm2.h,
+gsiparm4.h, gsmatrix.h, gxclpath.h, gxiparam.h, gconf.c, genconf.c,
+gsmatrix.c, gxclimag.c, gxclist.c, gxclpath.c, gxclrast.c, gxiinit.c,
+gximage2.c, gximage3.c, gximage4.c)
+
+Splits off the generic image support code from the ImageType 1 code.
+(gxiinit.c [deleted], gximage.c, gximage1.c, gxipixel.c)
+
+Removes some vestiges of support for 16-bit environments. (gsmisc.c)
+
+Implements bit-planar images, important for PCL interpretation.
+(gsiparam.h, gximage.h, gxiparam.h, gdevddrw.c, gdevpdfi.c, gdevps.c,
+gsimage.c, gxclimag.c, gxidata.c, gximage.c, gxipixel.c) ****** NOT TESTED
+YET ******
+
+Makes closing a memory device that owns its bitmap set the bitmap pointer to
+0, for the sake of an application that doesn't handle is_open properly.
+(gdevmem.c)
+
+Speeds up floating-point emulation for single-precision add, subtract, and
+multiply. (gsfemu.c)
+
+Speeds up sampling of transfer functions. (gshtx.c)
+
+Makes the CIE cache used fixed-point values if the CPU has slow floating
+point. (gscie.h)
+
+Adds a unique ID to color spaces to allow fast detection of reselecting the
+same color space. This matters for certain client code that repeatedly
+reselects the same color space, since selecting certain color spaces is
+expensive. (gscpixel.h, gscspace.h, gxcspace.h, gscolor2.c, gscpixel.c,
+gscscie.c, gscspace.c, gspcolor.c, gsstate.c, gximage2.c) ****** NEED TO FIX
+gxclrast.c TO ALLOC INDEXED COLOR SPACE ******
+
+Speeds up setting Pattern color spaces, by bypassing the install code for
+the base space. (gspcolor.c)
+
+Adds a unique ID to CRDs to allow fast detection of reselecting the same
+CRD. This matters for certain client code that does this repeatedly.
+(gscie.h, gscrd.h, gscrd.c)
+
+Detects setting the CRD to one with identical PQR components, and bypasses
+an expensive setup step. (gscie.c)
+
+Speeds up converting pixels between representations (gx_get_bits_copy) for
+devices with up to 4 bits per pixel, by caching the pixel values.
+(gdevdgbr.c)
+
+Speeds up the slow default RasterOp algorithm a little. (gdevdrop.c)
+
+Defines standard mapping procedures for 1-bit-per-component CMYK colors.
+Other code can then test for the presence of these procedures and use more
+efficient algorithms. (gxdevice.h, gxcmap.c)
+
+Speeds up some algorithms in the bbox device by making some recursive calls
+use a pure color rather than a client-supplied one. (gdevbbox.h, gdevbbox.c)
+
+Adds a cache for the black and white pixel values to the device structure.
+(gxdevcli.h, gxdevice.h, gdevalph.c, gdevnfwd.c, gsdparam.c, gxdcolor.c)
+
+Makes the code for colored halftones a little more readable. (gxcht.c)
+
+Speeds up color mapping for CMYK devices by copying the color mapping
+procedures into forwarding devices, when applicable. (gdevcmap.c,
+gdevmem.c, gsdevice.c, gxclip.c)
+
+Removes some compiler warnings (mostly about "uninitialized" variables).
+(gxcldev.h, gsdevmem.c, gsshade.c, gstype42.c, gxclpath.c, gxfill.c,
+gximage3.c, gxpath2.c, gxpcopy.c)
+
+For the benefit of certain client code that commonly sets a CRD and then
+doesn't use it, makes loading of the joint CIE caches lazy (at the library
+level). (gscie.h, gscie.c)
+
+Changes CIE color restriction from a macro to a procedure, since it is
+rarely used. (gscie.c)
+
+Adds code and structures for detecting when CIE Decode and/or Encode
+procedures are simply linear transformations, which would allow collapsing
+them into the adjacent matrix, but doesn't actually do the collapsing.
+(gscie.h, gscie.c)
+
+Speeds up color halftoning by pre-computing the mask of planes that need to
+be halftoned, and preconverting multi-plane halftones to binary or solid
+colors when possible. (gsdcolor.h, gxcht.c, gxdcolor.c, gxdither.c, gxht.c)
+
+Optimizes color mapping for 1-bit-per-component CMYK halftones. (gxcht.c)
+
+Optimizes null RasterOp sources for black = 1 as well as black = 0.
+(gxdcolor.c)
+
+Modifies the standard allocator so it keeps track of large free blocks as
+well as small ones, and uses them to satisfy requests when appropriate.
+(gxalloc.h, gsalloc.c)
+
+Speeds up the horizontal bitmap replication code a bit. (Much more is
+possible.) (gsbitops.c)
+
+Changes gs_image_max_planes to gs_image_max_components to reflect its
+function more accurately. (gdevddrw.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.50"></a>Version 5.50 (9/16/98)</h2>
+
+<p>
+This is the first public release since 5.10. See
+<a href="Current.htm">the release summary</a>
+for a list of major additions and changes.
+
+<h3><a name="5.50_Documentation"></a>Documentation</h3><pre>
+
+Fixes problems:
+ - Many files still referred to .txt rather than .htm files.
+(DLL.htm, Make.htm, New-user.htm, Readme.htm, bcwin32.mak, cfonts.mak,
+devs.mak, dvx-gcc.mak, dwmainc.cpp, gs-vms.hlp, gxdevcli.h, gxdevice.h,
+int.mak, jpeg.mak, libpng.mak, msvc32.mak, msvclib.mak, openvms.mak,
+os2.mak, unix-cc.mak, unix-gcc.mak, unixansi.mak, watc.mak, watcw32.mak,
+wccommon.mak, zlib.mak)
+
+Notes that ps2epsi.1 and ps2epsi.txt may be inconsistent or obsolete.
+(ps2epsi.1, ps2epsi.txt)
+
+Adds a reference to Thomas Merz's Ghostscript manual. (Readme.htm)
+
+Adds instructions for making RPMs. (Install.htm, Make.htm)
+
+Changes the URL for post-release notes. (Bug-form.htm, Make.htm,
+New-user.htm)
+
+Notes problems with Watcom compilation. (Make.htm)
+
+</pre><h3><a name="5.50_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - On Unix systems, the documentation files didn't get installed by
+`make install'. (unixinst.mak)
+ - $() was missing around MAKEFILE in a Windows makefile.
+(msvc32.mak)
+ - The dfax drivers didn't include all the necessary files in the
+linker list. (contrib.mak)
+ - The MSVC makefiles didn't allow building the executable in a
+different directory. (bcwin32.mak, gs.mak, lib.mak, msvc32.mak,
+msvccmd.mak, msvclib.mak, msvctail.mak, os2.mak, watcw32.mak, winint.mak,
+winlib.mak)
+ - The default build directory for the Borland compiler was debugobj
+rather than obj. (bcwin32.mak)
+
+Adds a patch file and some specification files for making RPMs. (gs.rps,
+gs-fonts.rps, rpm-conf.dif)
+
+Removes the docs target in the makefile, since this function is now
+performed by another program. (unix-end.mak)
+
+</pre><h3><a name="5.50_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - The jpeg drivers caused a memory access error. (bug introduced in
+5.20 by an incorrectly made fix) (gdevjpeg.c)
+ - The x11cmyk driver implemented map_rgb_color, which it should not
+do. (gdevxalt.c)
+
+Updates a high-level driver for the addition of the bit-planar image format.
+(gdevps.c)
+
+</pre><h3><a name="5.50_Utilities"></a>Utilities</h3><pre>
+
+Fixes problems:
+ - echogs -h didn't work in environments where char is signed.
+(echogs.c)
+
+</pre><h3><a name="5.50_Platforms"></a>Platforms</h3><pre>
+
+Fixes problems:
+ - MSVC++ 5.0 produced incorrect code with TDEBUG=0. We "fixed" this
+problem by noting in the makefile that TDEBUG must be left set to 1.
+(msvc32.mak, msvclib.mak)
+
+Updates the icons for the MS Windows and OS/2 platforms. (gsgraph.icx,
+gsos2.icx, gspmdrv.icx, gstext.icx)
+
+</pre><h3><a name="5.50_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - setpagedevice didn't update the state correctly when switching to
+a new type of device (different OutputDevice value). (gs_setpd.ps)
+ - The interpreter's initialization depended on BSS being initialized
+to 0. (files.h, zfile.c)
+
+Removes all references to reloc_struct_ptr other than in gsstruct.h.
+(igcref.c)
+
+Adds DEBUG tracing for pdfmarks. (gs_pdfwr.ps)
+
+Disables TEST code for release. (zcrd.c, zfdcte.c)
+
+</pre><h3><a name="5.50_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - Some third-party software still referred to the obsolete #?
+procedure. (pdf_main.ps)
+ - Destinations with string names weren't properly converted to
+pdfmarks. (pdf_main.ps)
+ - Destinations with S = /Named weren't supported. (pdf_main.ps)
+
+</pre><h3><a name="5.50_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - Dropout prevention wasn't applied to landscape image masks.
+(gximono.c)
+ - When using async rendering, the renderer's allocator was allocated
+with the wrong allocator. (gdevprna.c)
+ - gx_strip_bitmap and gx_device_mask_clip didn't have proper GC
+descriptors, causing crashes if a GC occurred while rendering an ImageType 3
+or 4 image. (gsstruct.h, gxbitmap.h, gxclip2.h, gxclipm.h, gxmclip.h,
+gspcolor.c, gxclipm.c, gxmclip.c)
+ - The buffer for printer devices wasn't reallocated properly for
+async devices when the page size changed. We aren't entirely comfortable
+with the fix, but it's the best we've got right now. (gdevprn.c)
+ - Some files wouldn't compile with -dNOPRIVATE. (gxcspace.h,
+gscdevn.c, gscolor2.c, gscscie.c, gscsepr.c)
+ - gp_semaphore_close and gp_monitor_close were defined as not
+returning an error code. (gpsync.h, gp_nsync.c, gp_posem.c, gp_semon.c,
+gp_win32.c)
+ - Initialization code depended on BSS being initialized to 0.
+(gsiodev.c)
+ - The special PCL color mapping device didn't handle CMYK devices
+correctly in other than "identity" mode. (gdevcmap.c)
+
+Cleans up a little formatting. (gscie.h, gscpixel.c, gxmclip.c)
+
+Removes all references to reloc_struct_ptr other than in gsstruct.h.
+(gsstruct.h, gsalloc.c, gsdevice.c, gsfont.c, gxcpath.c)
+
+Patches the async code so that it allocates twice as much space for the
+renderer as should be needed, to deal with sandbars. (gdevprna.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.40"></a>Version 5.40 (beta) (9/10/98)</h2>
+
+<p>
+A few more fixes. This is intended as the candidate fileset for the 5.50
+release.
+
+<h3><a name="5.40_Documentation"></a>Documentation</h3><pre>
+
+Fixes problems:
+ - The current GNU Ghostscript version was documented as 3.33, not
+4.03. (New-user.htm)
+ - The ansi2knr usage documentation didn't mention --filename.
+(ansi2knr.1)
+ - A projected completion date was too optimistic. (ps2pdf.1)
+
+Replaces all documentation files with new HTML versions. (*.txt [deleted],
+*.htm, index.html, imainarg.c)
+
+Adds a contributed set of Emacs macros useful for working with Ghostscript
+documentation. (gsdoc.el)
+
+Changes the version and date format slightly in one file for consistency.
+(gs-vms.hlp)
+
+</pre><h3><a name="5.40_Procedures"></a>Procedures</h3><pre>
+
+Adds a make target (make docs) to touch up documentation files before a
+release. (unix-end.mak)
+
+</pre><h3><a name="5.40_Utilities"></a>Utilities</h3><pre>
+
+Removes the long-obsolete ps2image.ps utility. (ps2image.ps [deleted])
+
+</pre><h3><a name="5.40_Drivers"></a>Drivers</h3><pre>
+
+Adds a driver for the Color LaserJet 5. (devs.mak, gdevclj.c)
+
+</pre><h3><a name="5.40_Platforms"></a>Platforms</h3><pre>
+
+Fixes problems:
+ - Blanks in command lines weren't handled properly. (dwmain.cpp,
+dwmainc.cpp)
+
+</pre><h3><a name="5.40_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - 16-bit devices didn't convert colors to RGB correctly.
+(gdevm16.c)
+ - 16- and 32-bit RasterOp didn't work, because pack_from_standard
+didn't handle depths greater than 8. (gdevdrop.c)
+ - RasterOps with devices with non-standard color representation
+sometimes substituted black or white for the source or target. (gdevdrop.c)
+ - The non-orthogonal case of Axial shading executed the axial-case
+code as well. (gxshade1.c)
+ - copy_color on 4-bit-deep memory devices did an unnecessary
+fit_copy check. (gdevm4.c)
+ - An upcast was missing. (gdevbbox.c)
+ - View clipping was applied to internal devices, incorrectly.
+(gspath.c)
+
+Revises the implementation of shading so as to reduce the use of macros,
+update formatting, and help prepare for PatternType 2 patterns. (gsshade.h,
+gxshade.h, gxshade4.h, gscolor3.c, gsshade.c, gxshade.c, gxshade1.c,
+gxshade4.c, gxshade6.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.39"></a>Version 5.39 (beta) (9/8/98)</h2>
+
+<p>
+A couple more small fixes.
+
+<h3><a name="5.39_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - The pkm[raw] drivers didn't work with 32-bit pixels. (gdevpbm.c)
+
+Adds (fake) 8-, 16-, and 32-bit X11 CMYK devices, for debugging.
+Unfortunately, the 16- and 32-bit devices consume the hardware color map and
+then no longer behave reasonably; the 8-bit device produces output with
+garbled colors (fixed in 5.40). (devs.mak, gdevxalt.c)
+
+</pre><h3><a name="5.39_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - All banded devices caused a memory access error. (bug introduced
+in 5.38) (gsstate.c)
+ - The special color mapping device didn't update its state after
+put_params. (gdevcmap.c)
+ - RasterOp on 8-bit non-gray-scale devices didn't handle filling
+with constant 0 or 1 properly. (gdevmrop.c)
+ - The halftone machinery didn't switch from full-size to strip
+halftones early enough, possibly allocating very large halftone data
+structures. (gshtscr.c)
+ - If an ioerror (such as a disk- or memory-full condition) occurred
+while writing out the band list, the bookkeeping structures were left in an
+inconsistent state, causing further problems. (gxclutil.c)
+ - Some shaded fills didn't check for errors when filling
+sub-regions. (gxshade1.c, gxshade4.c)
+
+Cleans up some formatting. (gxshade6.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.38"></a>Version 5.38 (beta) (9/3/98)</h2>
+
+<p>
+The sole purpose of this release was to fix some obscure bugs detected by
+the Genoa tests and by another Aladdin project.
+
+<h3><a name="5.38_Documentation"></a>Documentation</h3><pre>
+
+Updates the list of implemented PostScript LanguageLevel 3 features.
+(current.txt)
+
+</pre><h3><a name="5.38_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - The PDF writer did the wrong thing for multi-source images with
+more than 180 bytes of data (total) per scan line. (gdevpdfi.c)
+ - If one used setdistillerparams, [g]restore caused a rangecheck in
+.setpagedevice. ****** DISABLED FOR DCT DICTS, SINCE THIS CAUSES A SEGV
+****** (gdevpsdp.c)
+
+</pre><h3><a name="5.38_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - 0-length parameter arrays were given an arbitrary type, confusing
+clients. (iparam.c)
+ - EOD on a write stream caused an error. (zfileio.c)
+
+</pre><h3><a name="5.38_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - 0-length parameter arrays confused clients that wanted arrays of a
+particular type. (gsparam.c)
+ - Patterns with XStep or YStep smaller than the bounding box didn't
+work properly. (gxp1fill.c)
+ - Resizing an object sometimes copied it unnecessarily. (gsalloc.c)
+ - Freeing the shared part of a graphics state didn't free its
+sub-objects. (gsstate.c)
+ - The standard allocator didn't free its initial (self-containing)
+chunk when asked to free itself. (gsalloc.c)
+ - The standard allocator didn't attempt to merge free blocks before
+giving up. We implemented this by adding another virtual procedure to
+allocators, consolidate_free. (gsmemory.h, gsmemraw.h, gsalloc.c,
+gsmalloc.c, gsmemlok.c, gsmemory.c)
+ - The free object merging algorithm thought there were free objects
+even when there weren't. (Small performance bug only.) (gsalloc.c)
+
+Adds some more tracing to pattern filling. (gxclip2.c, gxp1fill.c)
+
+Replaces the cs_alloc, cs_copy, and cs_undo_alloc macros with procedures.
+(gxcspace.h, gscolor2.c, gscsepr.c, gscspace.c, gspcolor.c)
+
+Moves the free-object merging code from gsnogc.c to gsalloc.c, so it can be
+used even in systems that have a garbage collector. (gsalloc.h, gxalloc.h,
+gsalloc.c, gsnogc.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.37"></a>Version 5.37 (beta) (8/31/98)</h2>
+
+<h3><a name="5.37_Documentation"></a>Documentation</h3><pre>
+
+Mentions the new cid2code utility in the documentation. (psfiles.txt)
+
+Documents dpsnext.dev. (gs.mak)
+
+Notes that clients of ImageType 3 images are responsible for providing the
+mask data before the pixel data. (gsiparm3.h)
+
+</pre><h3><a name="5.37_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - The makefiles were missing a dependency of jconfig.h on arch.h.
+With this fix, parallel builds (make -jN) work reliably. (jpeg.mak)
+
+</pre><h3><a name="5.37_Utilities"></a>Utilities</h3><pre>
+
+Adds a utility for creating maps from CIDs to Unicode. (unixinst.mak,
+cid2code.ps)
+
+</pre><h3><a name="5.37_Drivers"></a>Drivers</h3><pre>
+
+Removes the %Fax% IODevice code, since it was only a skeleton and Adobe no
+longer supports this facility. (devs.mak, gdevpfax.c [deleted])
+
+</pre><h3><a name="5.37_Fonts"></a>Fonts</h3><pre>
+
+Fixes problems:
+ - TrueType fonts whose first code wasn't 0 or 0xf000 didn't display
+correctly. (bug introduced in 5.36) (gs_ttf.ps)
+ - CIDFontType 0 fonts didn't handle being redefined with another
+name. (gs_cidfn.ps)
+ - CIDFontType 0 fonts could get local-into-global-store errors.
+(gs_cidfn.ps)
+ - PDF files couldn't use already-defined CMap resources.
+(pdf_font.ps)
+ - Out-of-range CIDs gave an error rather than using a notdef
+character. (gs_cidfn.ps)
+
+</pre><h3><a name="5.37_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - CIDFontType 4 fonts weren't recognized as CID-keyed. (zchar2.c,
+zchar32.c, zfont32.c)
+ - When recovering from an error in an operator procedure, the
+interpreter didn't update the dictionary stack caches. (interp.c)
+ - startjob didn't reinitialize the stacks or VM space. (gs_lev2.ps)
+ - Encoding filters with a Predictor always caused an error.
+(zfilter2.c)
+ - currenttrapparams gave an error. (gs_ll3.ps)
+ - settrapparams had no effect, and left the dictionary on the stack.
+(gs_ll3.ps)
+
+Finishes implementing Type 32 fonts. These fonts don't actually work
+directly with the cache -- they store the bitmaps in a compressed form in an
+ordinary Dictionary -- but they do behave the way they are specified.
+(gs_typ32.ps, zchar32.c, zfont32.c)
+
+Cleans up formatting and macros in a few more files. (ccfont.h, icharout.h,
+icstate.h, iutil.h, iutil2.h, ibnum.c, iccfont.c, iccinit0.c, ilocate.c,
+isave.h, isave.c, iscannum.c, iutil.c, iutil2.c)
+
+Removes or capitalizes a few more macros. (zcontext.c, zcssepr.c,
+zusparam.c)
+
+</pre><h3><a name="5.37_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - Color spaces with subsidiary spaces (Indexed, Separation, DeviceN)
+sometimes didn't work properly, because they were translated to PostScript
+structures more than once. (pdf_draw.ps)
+ - Type 3 fonts didn't rebind the resource context when executing the
+CharProc procedure. (pdf_font.ps)
+
+</pre><h3><a name="5.37_Streams"></a>Streams</h3><pre>
+
+Fixes problems:
+ - The CCITTFax decoder signaled an error if it saw an EOB with
+EndOfBlock = false. (According to e-mail from Adobe, EOBs should be
+recognized even if EndOfBlock is false, even though the Red Book implies the
+opposite.) (scfd.c)
+
+Cleans up macros and formatting in a few more files. (slzwce.c, sfxfd.c,
+sfxstdio.c)
+
+</pre><h3><a name="5.37_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - Landscape color images usually didn't display. (bug introduced in
+5.32) (gxicolor.c)
+ - If gs_heap_free_object was called with ptr != 0 but bp = 0 (which
+is an error), an invalid memory access would occur. (gsmalloc.c)
+ - The left side bearing was still being added in a second time for
+the accent of a seac. (bug probably introduced in 5.20) (gxtype1.c)
+ - An access error occurred when rendering the very last glyph of a
+TrueType font with a 2-byte loca table. (gstype42.c)
+ - In the fast portrait case of monochrome images, a numerical error
+sometimes produced a 1-bit-wide vertical stripe of an incorrect color at the
+right edge of the image. (gxifast.c)
+ - ImageType 3 images with InterleaveType = 3 gave memory access
+errors. (gximage3.c)
+ - Hit detection ignored any part of the aperture that had negative X
+or Y coordinates. (gdevhit.c)
+ - The special color mapping device didn't copy all necessary values
+back from its target. (gxdevice.h, gdevbbox.c, gdevcmap.c, gsdevice.c)
+ - The special color mapping device didn't handle ordinary (Type 1)
+images correctly. (gdevcmap.c)
+ - CMYK halftones complemented both the color and the halftone level:
+this produced the right number of pixels turned on (only for linear spot
+functions or threshold arrays), but wasn't consistent with either the Adobe
+specification or the user's intentions. (gxcht.c)
+ - The phase of mask Patterns wasn't always set correctly.
+(gxp1fill.c)
+ - The reader side of overlapped band devices was confused about its
+open/closed status. (gdevprna.c)
+
+Renames Type 32 fonts from ft_bitmap to ft_CID_bitmap. (gxftype.h)
+
+Adds some more tracing for composite font decoding. (gsfcmap.c)
+
+Adds some more tracing for images. (gxiinit.c)
+
+Cleans up formatting and macros in a few more files. (gxifast.c)
+
+Moves the image*_type_data and image*_enum_procs_data definitions from
+header files into more appropriate .c files. (gsiparm2.h, gsiparm3.h,
+gsiparm4.h, gxiparam.h, gxiinit.c, gximage2.c, gximage3.c, gximage4.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.36"></a>Version 5.36 (beta) (8/25/98)</h2>
+
+<p>
+Another set of fixes. The free-standing bbox device now produces convenient
+%%BoundingBox messages. This fileset also includes support for double-byte
+TrueType fonts.
+
+<h3><a name="5.36_Documentation"></a>Documentation</h3><pre>
+
+Fixes problems:
+ - There was a minor spacing glitch in one man page. (gs.1)
+ - The page printed by align.ps didn't make it clear enough what to
+do with the numbers it asks users to calculate. (align.ps)
+ - The sample code for adding gamma adjustment didn't work most of
+the time. (devices.txt)
+ - The prolog produced by pswrite was completely uncommented.
+(gdevps.c)
+ - The documentation didn't note that the string block freelist
+(sfree) is sorted in address order. (gxalloc.h)
+
+Notes that FirstBitLowOrder and LowBitFirst are equivalent. (slzwx.h)
+
+Notes a change in the FTP site of the free Kanji ("Wadalab") fonts.
+(fonts.txt)
+
+Adds a pointer to the freely available Unicode CMaps. (fonts.txt)
+
+Changes an obsolete e-mail address for Carsten Emde. (contrib.mak)
+
+</pre><h3><a name="5.36_Utilities"></a>Utilities</h3><pre>
+
+Fixes problems:
+ - The viewgif utility sometimes left 1-scan-line gaps when rendering
+interlaced images. (viewgif.ps)
+
+</pre><h3><a name="5.36_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - In the PDF writer, downsampled images were always written with 8
+bits per sample, not the requested depth. (gdevpsdi.c)
+ - The 8-to-N-bit compression filter produced an extra byte at the
+end of each row, and the N-to-8-bit expansion filter skipped an input byte
+at the end of each row. (gdevpsds.c)
+ - In the PDF writer, the size of downsampled images for changing the
+pixel width was set incorrectly, leading to inconsistent image parameters in
+the output. (gdevpsdi.c)
+ - The subsampling filters didn't take a clear position about what to
+do with excess input samples beyond a multiple of the reduction factor,
+leading to inconsistent image parameters. We added a Boolean to indicate
+whether they should discard the samples or use them to create an additional
+output sample. (gdevpsds.h, gdevpsdi.c, gdevpsds.c)
+ - The subsampling filters didn't provide the necessary set_defaults
+procedures. (gdevpsds.h, gdevpsds.c)
+ - Because of a typo, pdfwrite and pswrite printed sequences of 4
+decimal values wrong. (bug introduced during macro removal in 5.25)
+(gdevpstr.c)
+
+Makes the PS writer produce a %%HiResBoundingBox as well as a %%BoundingBox.
+(gdevps.c)
+
+</pre><h3><a name="5.36_Platforms"></a>Platforms</h3><pre>
+
+Fixes problems:
+ - The Borland makefile didn't include the MT libraries. We added a
+MULTITHREAD option to this makefile. (bcwin32.mak)
+ - The MSVC makefile didn't include the MT switches in the right
+place. (msvccmd.mak)
+ - 'make clean' in the Windows makefiles didn't clean up quite
+enough. (bcwin32.mak, msvc32.mak, msvccmd.mak)
+ - The OS/2 makefile had gotten slightly out of date. (os2.mak)
+
+Cleans up some formatting. (gp_win32.c)
+
+</pre><h3><a name="5.36_Fonts"></a>Fonts</h3><pre>
+
+Fixes problems:
+ - Loading large TrueType fonts caused excessive garbage collection.
+(gs_ttf.ps)
+
+Finishes implementing support for turning double-byte TrueType fonts into
+CIDFontType 2 fonts. (gs_ttf.ps)
+
+</pre><h3><a name="5.36_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - We thought the dictionary returned by currentuserparams should
+always be allocated in local VM, but in fact the correct definition is that
+it should be allocated in the current VM. The simplest way to make this
+work is for setuserparams to copy any string values into global VM.
+(gs_lev2.ps)
+ - 1-input stitching functions didn't allow k = 0. (ifunc.h,
+zfunc.c)
+ - OtherSubrs defined in PostScript no longer worked. (bug probably
+introduced when we rewrote the Type 1 code in C) (zchar1.c)
+
+Cleans up a few compiler warnings (missing empty 'default' cases, unused
+variables). (igc.c, iname.c)
+
+Replaces some uses of RELOC_*_PTR (now deprecated) with RELOC_*_VAR.
+(isave.c, iscan.c)
+
+</pre><h3><a name="5.36_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - Resources were re-created on each page, causing (sometimes a lot
+of) unnecessary computation. We implemented most of the machinery for
+avoiding this, but not the mechanism for actually storing resources in
+global VM. (pdf_base.ps, pdf_main.ps)
+
+Adds a little more debugging code. (pdf_draw.ps)
+
+</pre><h3><a name="5.36_Streams"></a>Streams</h3><pre>
+
+Cleans up formatting in a few more files. (sbtx.h, sfilter.h, slzwx.h,
+spngpx.h, srlx.h, sstring.h, seexec.c, sfilter1.c, sfilter2.c, smtf.c,
+spcxd.c, srld.c, srle.c)
+
+Replaces a couple of #defines with duplicated (small) structures. (sbtx.h,
+sfilter.h, sfilter1.c, sfilter2.c)
+
+Replaces all uses of RELOC_*_PTR (now deprecated) with RELOC_*_VAR.
+(stream.c)
+
+</pre><h3><a name="5.36_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - If a garbage collection occurred during a string show operation,
+memory could be corrupted. (bug introduced in 5.24) (gstext.h, gstext.c)
+ - A debugging check incorrectly indicated an error when
+miter-checking lines with a 0 degree angle between them. (gxstroke.c)
+ - A structure created for bitmap/pixmap patterns was never freed.
+(gspcolor.c)
+ - Colored halftones didn't work with 24-bit devices. (This case was
+never actually used.) (gxcht.c)
+ - CIE colors didn't remap properly if the current color space was a
+Pattern space. (gscie.c)
+ - In a non-garbage-collected environment, freeing a string in the
+current chunk made an unnecessary test. (Minor performance impact only.)
+(gsnogc.c)
+
+Cleans up a few compiler warnings (missing empty 'default' cases, unused
+variables). (gsht.c, gsht1.c, gshtscr.c, gsimage.c, gxacpath.c, gxclread.c,
+gxicolor.c, gxshade4.c)
+
+Replaces some uses of RELOC_*_PTR with RELOC_*_VAR. (gsht1.c)
+
+Changes the printed output of the free-standing bbox device so it produces
+%%BoundingBox and %%HiResBoundingBox lines that can be dropped directly into
+a DSC header. (gdevbbox.c)
+
+Speeds up the 4-bit case of copy_mono by about 30%. (gdevm4.c)
+
+Expands some macros and cleans up formatting, for easier reading and
+debugging. Speeds up the color halftone generation algorithm substantially
+(up to 40%), by skipping the halftone computation for planes that are known
+to be solid-color, and using copy_mono directly if only one plane is not
+solid-color. (gxcht.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.35"></a>Version 5.35 (beta) (8/18/98)</h2>
+
+<p>
+More updates for 5.3x, specifically fixing problems with halftones on banded
+CMYK devices.
+
+<h3><a name="5.35_Documentation"></a>Documentation</h3><pre>
+
+Fixes problems:
+ - The URLs for the third-party libraries were out of date.
+(make.txt, jpeg.mak, libpng.mak, zlib.mak)
+
+</pre><h3><a name="5.35_Drivers"></a>Drivers</h3><pre>
+
+Adds an x11gray4 device for help in debugging. (devs.mak, gdevxalt.c)
+
+</pre><h3><a name="5.35_Fonts"></a>Fonts</h3><pre>
+
+Fixes problems:
+ - TrueType fonts with more than 64K of data before or after the
+glyfs caused an error. (gs_ttf.ps)
+
+</pre><h3><a name="5.35_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - The dictionary returned by currentuserparams was allocated in the
+current VM rather than always in local VM. (gs_lev2.ps)
+
+</pre><h3><a name="5.35_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - CID-keyed fonts caused an error, because their CDevProc was
+incorrect. (pdf_font.ps)
+
+</pre><h3><a name="5.35_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - A comment was duplicated. (gxht.h)
+ - The main procedure of the command list reader was so large that it
+couldn't be optimized by many compilers, and was very hard to read.
+(gxclrast.c)
+ - Banding devices using multi-screen halftones could get memory
+access errors because they didn't clear the halftone caches when changing
+halftone parameters. (gxclrast.c)
+ - Banding devices using multi-screen halftones didn't set the
+halftone phase correctly. (gxcht.c, gxclrast.c)
+ - RasterOp didn't work for 2- or 4-bit gray-scale devices. It still
+doesn't work right, but it's closer. (gdevm2.c, gdevm4.c, gdevmrop.c)
+ - Undefined characters in CMap-based composite fonts caused errors
+and possible invalid memory accesses. (gschar0.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.34"></a>Version 5.34 (beta) (8/16/98)</h2>
+
+<p>
+More updates for 5.3x.
+
+<h3><a name="V5.34_Documentation"></a>Documentation</h3><pre>
+
+Updates all of the man pages to new versions. (gs-vms.hlp, gs.1, pdf2dsc.1,
+pdf2ps.1, ps2ascii.1, ps2epsi.1, ps2pdf.1, ps2ps.1)
+
+</pre><h3><a name="V5.34_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - The MSVC library makefile incorrectly included gp_msio.c.
+(msvclib.mak, winlib.mak)
+
+</pre><h3><a name="V5.34_Drivers"></a>Drivers</h3><pre>
+
+Fixes problems:
+ - The PDF writer unnecessarily checked for other parameters after a
+failing show or pdfmark. (gdevpdfp.c)
+ - The device's BufferSpace parameter was ignored. (bug introduced
+by async rendering code in 5.30) (gdevprn.c)
+ - Banding devices smashed the first 4 bytes of each scan line. (bug
+introduced in 5.28) (gxdevmem.h, gdevmem.c, gxclread.c)
+ - The phase for colored halftones was set wrong. (We have "fixed"
+this innumerable times, and it is still probably wrong.) (gxclrast.c)
+
+Replaces the deprecated gx_device_image_xxx calls with the new gx_image_xxx
+calls. (gdevpdfi.c, gdevps.c, gdevpx.c, gdevvec.c)
+
+</pre><h3><a name="V5.34_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - The equality test for idiom recognition sometimes incorrectly
+returned false. (zmisc3.c)
+ - shfill didn't take the BBox into account. (It still doesn't.)
+(gxshade.c)
+ - The status operator could return an incorrect pages or bytes value
+for files larger than 2 Gb, rather than giving an error. (zfile.c)
+
+</pre><h3><a name="V5.34_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - The hint tables weren't reset after processing the base character
+of a 'seac', leading to incorrect hinting and (for Type 2 CharStrings)
+possible mis-parsing of the outline data. (gstype2.c)
+ - When processing a 'seac', the left side bearing was added in
+twice, displacing characters to the right. (bug probably introduced in
+5.20) (gstype1.c)
+ - RasterOps didn't set the size of the RasterOp texture device,
+which caused filling operations involving a colored halftone to be clipped
+to an empty rectangle. (gdevrops.c)
+ - When filling with a colored halftone, the RasterOp source was
+often disregarded. (gxcht.c)
+ - gx_device_image[_plane]_data and gx_device_end_image took an
+unused dev argument, leading to potential confusion. We deprecated the
+gx_device_image_plane_data and gx_device_end_image procedures, replacing
+them with macros that call their replacements gx_image_plane_data and
+gx_image_end (which no longer have the spurious dev argument). (gxdevcli.h,
+gxdevice.h, gxiparam.h, gdevbbox.c, gdevddrw.c, gdevdflt.c, gsimage.c,
+gslib.c, gxclimag.c, gxclrast.c, gximage2.c, gximage3.c, gximage4.c)
+ - gs_color_adjust_count, introduced in 5.33 to address the problem
+of freeing free-standing patterns, just made things worse. We are replacing
+them with gs_pattern_reference, essentially the procedure introduced in 5.31
+that we deleted in 5.33. (gsccolor.h, gspcolor.h, gscolor.c, gspcolor.c)
+
+Changes hint suppression from a #define to a debugger-settable static.
+(gxhint1.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.33"></a>Version 5.33 (beta) (8/14/98)</h2>
+
+<p>
+This is the third set of updates for 5.30. These updates have been driven
+mostly by the needs of another Aladdin project, so they haven't included as
+many problem fixes as we would normally make.
+
+<h3><a name="V5.33_Platforms"></a>Platforms</h3><pre>
+
+Fixes problems:
+ - The thread creation procedure for Win32 called a Windows function
+rather than the proper C library function. (gp_win32.c)
+ - In some MS-DOS implementations, the copy command doesn't recognize
+the /Y switch. (bcwin32.mak)
+
+</pre><h3><a name="V5.33_Fonts"></a>Fonts</h3><pre>
+
+Fixes problems:
+ - TrueType fonts with *less* than 64K of glyf data stopped working.
+(bug introduced in 5.31) (gs_ttf.ps)
+
+</pre><h3><a name="V5.33_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - Using an Identity function left an extra element on the stack.
+(pdf_draw.ps)
+ - The syntax of # in names is different in PDF 1.1 and PDF 1.2, but
+the PDF 1.2 syntax was always used. (pdf_base.ps, pdf_main.ps)
+
+</pre><h3><a name="V5.33_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - Color images still always caused an error. (bug introduced in
+5.32) (gxicolor.c)
+ - Because of a typo, the implementation of image types didn't
+compile. (bug introduced in 5.32) (gxiparam.h)
+ - Free-standing colors (specifically pattern colors) and color
+spaces couldn't be freed. This required a NON-BACKWARD-COMPATIBLE change in
+an internal API used for managing color and color space reference counts.
+(gxcspace.h, gsccolor.h, gscdevn.c, gscolor.c, gscolor2.c, gscscie.c,
+gscsepr.c, gscspace.c, gspcolor.c)
+
+Cleans up a little more formatting. (gscspace.h)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.32"></a>Version 5.32 (beta) (8/13/98)</h2>
+
+<p>
+This is the second set of updates for 5.30.
+
+<h3><a name="V5.32_Procedures"></a>Procedures</h3><pre>
+
+Fixes problems:
+ - The OS/2 makefile accidentally omitted the OS/2-PM driver.
+(os2.mak)
+ - The MSVC library makefile didn't work. (msvclib.mak)
+ - Debugging was turned on in the Borland Windows makefile.
+(bcwin32.mak)
+ - The BEGINFILES2 list was too long in the MSVC makefile.
+(msvc32.mak)
+
+</pre><h3><a name="V5.32_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes problems:
+ - .execn wouldn't accept pseudo-operators. (iref.h)
+ - inustroke with a matrix operand didn't work correctly. (zupath.c)
+ - ImageType 4 images didn't work. (bug introduced in 5.31)
+(zimage3.c)
+
+</pre><h3><a name="V5.32_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes problems:
+ - Forms used more than once caused an invalidaccess error.
+(pdf_draw.ps)
+
+</pre><h3><a name="V5.32_Library"></a>Library</h3><pre>
+
+Fixes problems:
+ - Using a colored pattern with a Pattern color space that included a
+base space could access uninitialized floating point values, possibly
+causing an arithmetic trap. (gspcolor.c)
+ - RasterOp wasn't implemented for 16- and 32- bit devices.
+(gdevm16.c, gdevm32.c, gdevmrop.c)
+ - The library test program relied on copysign, which some C
+libraries lack. (gslib.c)
+ - The gs_free and gs_heap_free_all debugging printout were included
+even if DEBUG wasn't defined. (bug introduced in 5.30) (gsmalloc.c)
+ - Color images always caused an error. (bug introduced in 5.30)
+(gxicolor.c)
+ - Masked images with pis = NULL could cause an error. (gximono.c)
+ - In landscape orientation, masked images didn't guarantee that the
+buffer of mask scan lines would be flushed to the mask clipping device
+before processing the data being masked. (gxiparam.h, gxidata.c, gxifast.c,
+gximage3.c)
+ - Images with source transparency set but CombineWithColor = false
+could get an error because of trying to paint with an unloaded
+color. (caused by a bug fix in 5.30) (gxdcolor.c, gxiinit.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.31"></a>Version 5.31 (limited) (8/11/98)</h2>
+
+<p>
+This is the first set of updates for 5.30. They fix a few minor build
+problems, and some significant problems with bitmap patterns that do not
+affect the PostScript or PDF interpreters.
+
+<h3><a name="V5.31_Drivers"></a>Drivers</h3><pre>
+
+Moves some casting macros from generic files to the few specific files that
+use them. (gdev4693.c, gdevn533.c, gdevsnfb.c)
+
+</pre><h3><a name="V5.31_Interpreter"></a>Interpreter</h3><pre>
+
+Changes ImageType 4 images to match the change in the library interface.
+(zimage3.c)
+
+</pre><h3><a name="V5.31_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The MaskColor elements of ImageType 4 images were defined as int
+rather than uint, truncating the range by 1 bit and causing problems in
+comparing the mask color against the pixel samples. (gsiparm4.h,
+gximage4.c)
+ - A needed cast was missing from gs_malloc_memory_release.
+(gsmalloc.h)
+ - A needed cast from byte to char was missing. (gsparams.c)
+ - Patterns always allocated a mask for rendering, which for large
+patterns specified directly as bitmaps allocated a lot of unnecessary
+memory. (gxcolor2.h, gspcolor.c, gxp1fill.c, gxpcmap.c)
+ - Macros simply defining casted versions of variables made the code
+hard to debug. We have only removed the ones that are in generic code (not
+drivers) and that cast pointers to gx_device or its subclasses: the only
+ones removed from header files were prn_dev in gdevprn.h, mdev in gdevmem.h,
+and ccdev, crdev, and cwdev in gxcldev.h. gdevmem.h, (gdevprn.h, gxclist.h,
+gdevabuf.c, gdevm1.c, gdevm2.c, gdevm4.c, gdevm8.c, gdevm16.c, gdevm24.c,
+gdevm32.c, gdevmpla.c, gdevnfwd.c, gdevprn.c, gxacpath.c, gxclimag.c,
+gxclist.c, gxclpage.c, gxclpath.c, gxclread.c, gxclrect.c)
+ - There was no way to free a pattern instance outside the graphics
+state. (gspcolor.h, gspcolor.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.30"></a>Version 5.30 (limited) (8/10/98)</h2>
+
+<p>
+This is the first beta candidate for the 5.50 release. It completes the
+merge of the overlapped rasterizing code into the main development line.
+
+<h3><a name="V5.30_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - Yves Arrouye's e-mail address was out of date. (gdevbjc.h,
+gdevcdj.c, contrib.mak, devices.txt, unix-lpr.txt)
+
+Makes the warning against using SHARE_JPEG=1 even stronger. (make.txt,
+dvx-gcc.mak, ugcclib.mak. unix*.mak)
+
+Removes information about using DCL files on VMS to build Ghostscript.
+(make.txt)
+
+Updates the documentation for begin_typed_image. (drivers.txt)
+
+</pre><h3><a name="V5.30_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The Unix build procedure didn't create the obj subdirectory
+automatically. (unixhead.mak, unix-end.mak)
+ - gsdll_h wasn't defined for the OS/2 PM device. Fixing this
+properly required moving the OS/2 drivers into the same makefile as the MS
+Windows drivers, and renaming the file. (devs.mak, msdevs.mak =&gt; pcwin.mak,
+winlib.mak)
+ - gsiparm4_h was used before it was defined. (lib.mak)
+ - Building with shared libaries still used header files in
+Ghostscript's directories, not the ones in /usr/include. ****** NOT DONE
+YET ******
+ - The makefiles all assumed they were located in the current
+directory, not in the source directory. (*.mak)
+
+Adds new 'debugclean' and 'pgclean' targets, parallel to 'debug' and 'pg',
+for the Unix platforms. (unix-end.mak)
+
+Changes the management of .dev files so that on Unix platforms, one can
+really maintain standard, debugging, and profiling builds simultaneously.
+This is a hack, but a fairly reliable one. (gs.mak, unixhead.mak,
+unix-end.mak)
+
+Adds a dummy thread / semaphore / monitor implementation to all platforms
+other than Windows. (dvx-tail.mak, openvms.mak, os2.mak, ugcclib.mak,
+unixtail.mak, watc.mak, watclib.mak)
+
+</pre><h3><a name="V5.30_Drivers"></a>Drivers</h3><pre>
+
+Updates driver support to use the new write-position stream. (gdevpsdf.c)
+
+</pre><h3><a name="V5.30_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The Windows Registry calls didn't deal properly with a null
+pointer. (gp_wgetv.c)
+
+Makes a small change in the platform semaphore / monitor API. (gpsync.h,
+gxsync.h, gp_win32.c, gxsync.c)
+
+Adds a dummy thread / semaphore / monitor implementation. Note that with
+this implementation, async rendering WILL NOT WORK. (gp_nsync.c)
+
+Adds pthreads thread creation and POSIX semaphores for Unix platforms. (We
+still need to add System V semaphores, which is all that is available on
+Solaris and BSDI.) (gp_semon.c, gp_posem.c, gp_pthr.c).
+
+</pre><h3><a name="V5.30_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - CIDFontType 0 fonts didn't select the proper VM space for adding
+entries to font dictionaries, and for loading Subrs strings. (gs_cidfn.ps)
+ - TrueType fonts with an odd glyfs length didn't work. (gs_ttf.ps)
+ - TrueType fonts with a Format 3 'post' table didn't work.
+(gs_ttf.ps)
+ - TrueType fonts where the encoding in the 'post' table didn't cover
+the entire set of glyfs didn't work. (gs_ttf.ps)
+ - TrueType fonts with more than 128K of glyfs didn't work.
+(gs_ttf.ps)
+ - TrueType cmap format 6 didn't work. (gs_ttf.ps)
+ - CIDFontType 0 fonts with hex data didn't skip over the &gt; at the
+end of the data. (gs_cidfn.ps)
+
+</pre><h3><a name="V5.30_Interpreter"></a>Interpreter</h3><pre>
+
+Works around the fact that gs_shfill can't do a gs_setcolorspace for color
+spaces that require interpreter assistance. (gs_ll3.ps)
+
+Moves clipsave and cliprestore to C code. (gs_ll3.ps, zmisc3.c)
+
+Updates some files to reflect the redivision of gsmemory.h and gsstruct.h.
+(imemory.h, istruct.h, ialloc.c)
+
+</pre><h3><a name="V5.30_Streams"></a>Streams</h3><pre>
+
+Adds a stream that just keeps track of the write position. (stream.h,
+stream.c)
+
+Removes the compilation dependency that required all clients of the zlib
+filters to be compiled with the zlib source directory in the search path.
+(szlibx.h, szlibxx.h, szlib[cde].c)
+
+</pre><h3><a name="V5.30_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - ImageType 4 images with &gt;1 input component didn't work.
+(gximage4.c)
+ - Sampled functions didn't keep the fractional part when
+interpolating, possibly leading to infinite recursion in shading.
+(gsfunc0.c)
+ - The color error value for shadings was computed incorrectly for
+CIE color spaces. (gxshade.c)
+ - The CharstringType 2 'roll' operator rolled the operands in the
+wrong direction. (gstype2.c)
+ - Images with RasterOp or transparency didn't retain the current
+color properly, leading to unpredictable results. (gdevmrop.h, gsropt.h,
+gdevddrw.c, gdevrops.c, gxdcolor.c, gxiinit.c, gximage3.c)
+ - A cast to void * was needed to remove a const modifier.
+(gscrdp.c)
+ - On 8-bit non-gray-scale devices, RasterOp values of all-0s or
+all-1s produced the wrong output. (gdevmrop.c)
+ - The GC procedure for halftone screen enumerators was wrong,
+possibly causing invalid memory access errors. This bug predates 5.10.
+(gshtscr.c)
+ - An extra pair of string quotes confused some compilers.
+(gsshade.c)
+ - There were several errors in the CharstringType 2 'flex'
+operators. (gstype2.c)
+ - The structure descriptors for devices weren't initialized in
+library-only configurations. (int.mak, gconf.c)
+ - The Pattern cache got confused if the current device when a
+Pattern color was used wasn't the same as the current device when the
+Pattern instance was created. (gxpcmap.c)
+ - The target of forwarding devices wasn't reference-counted
+properly. (gsdevice.c) ****** FIXING THIS PROPERLY WILL BE A LOT OF WORK:
+WE ONLY FIXED gs_setdevice_no_erase ******
+ - As a result of fixing a typo, the structure declaration for
+gx_page_queue was private, causing clients not to compile. We left it
+private and added an instance allocation procedure. (gxpageq.h, gdevprna.c,
+gxpageq.c)
+ - The mask for ImageType 3 images was clipped (incorrectly).
+(gximage3.c)
+ - Interpolated images with negative X-&gt;X values in the CTM were
+displaced on the page. (gxiscale.c)
+
+Finishes integrating the asynchronous rendering code. (gpsync.h, gxclist.h,
+gdevprna.c, gsmemlok.c, gxclimag.c, gxclpath.c, gxclutil.c)
+
+Updates the memory manager API for additional flexibility needed for
+asynchronous rendering. (gsmalloc.h, gsmemlok.h, gsmemraw.h, gsalloc.c,
+gsmalloc.c, gsmemlok.c)
+
+Updates the standard memory manager to work with a fixed (externally
+supplied) set of chunks, needed for asynchronous rendering, removing some
+macros in the process. (gsalloc.h, gsalloc.c)
+
+Updates some code to use more mnemonic variable names. (gstype2.c,
+gxicolor.c)
+
+Removes some macros for better readability. (gdevmrop.c)
+
+Adds dummy implementations of clipsave and cliprestore. (gsclipsr.h,
+gsclipsr.c)
+
+Implements an alternative, but completely untested, parameter list
+serializer based on streams. (gsparam2.c)
+
+Moves more of the internal memory manager structures from gsmemory.h to
+gsstruct.h. (gsmemory.h, gsstruct.h, gsmemory.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.28"></a>Version 5.28 (limited) (8/3/98)</h2>
+
+<p>
+This fileset almost finishes merging in the code for overlapped
+("asynchronous") interpretation and rasterizing that gave rise to the
+side-branch versions 5.13 and 5.14; eliminates all initialized non-constant
+globals from the graphics library (but not from the interpreter); and adds a
+few more LanguageLevel 3 features (CIEBasedDEF[G] color spaces, CloseSource
+and CloseTarget for streams, Separation base space for Indexed color
+spaces).
+
+<p>
+We were not originally planning to produce another fileset until the code
+merge was completed; however, the schedule demands of another Aladdin
+project justify another intermediate fileset.
+
+<h3><a name="V5.28_Documentation"></a>Documentation</h3><pre>
+
+Notes that the MSVC++ 5.0 compiler may lock up when compiling gxi12bit.c
+with optimization. (make.txt)
+
+</pre><h3><a name="V5.28_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - psl3 didn't include fzlib. (int.mak)
+ - The Windows makefile had the wrong name for a DLL. (winint.mak)
+ - The Borland Windows makefile had several errors. (bcwin32.mak)
+
+At the request of a user, changes the creation of jconfig.h so it #includes,
+rather than copies, arch.h. (jpeg.mak, gsjconf.h)
+
+</pre><h3><a name="V5.28_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - viewpbm.ps scaled the image wrong. (viewpbm.ps)
+
+</pre><h3><a name="V5.28_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - clist_close was declared as an open proc rather than a close proc.
+(As it happens, this didn't make any difference.) (gxclist.c)
+ - A comment was improperly terminated. (gxpageq.h)
+ - A needed #include of memory_.h was missing. (gdevpsde.c)
+
+Integrates nearly all the rest of the code for asynchronous rendering.
+(gdevprn.h, gdevprna.h, gxcldev.h, gxclist.h, gxclpath.h, gxclmem.h,
+gdevbmpa.c, gdevprn.c, gdevprna.c, gxclbits.c, gxclimag.c, gxclist.c,
+gxclmem.c, gxclpath.c, gxclread.c, gxclrect.c)
+
+Changes tracing of memory-based clists to occur only if -Z: is selected,
+rather than always if the code was compiled with -DDEBUG. Note that this is
+a NON-BACKWARD-COMPATIBLE CHANGE (but only affects debugging). (gxclmem.c)
+
+Implements the NumCopies parameter for all page devices, not just printers.
+(gxdevcli.h, gxdevice.h, gdevprn.c, gsdparam.c)
+
+Splits off command list writing utilities into a separate file, since
+gxclist.c was getting too large. (gxclist.h, gxclist.c, gxclutil.c)
+
+Splits command list reading into control (gxclread.c) and the actual list
+interpreter (gxclrast.c), since the file was getting too large. (gxcldev.h,
+gxclrast.c, gxclread.c)
+
+Distinguishes dev_proc_* (defining a general driver procedure) from
+prn_dev_proc_* (defining a printer driver procedure). Unfortunately, we
+have to keep dev_proc_print_page and _print_page_copies for backward
+compatibility. (gdevprn.h)
+
+Splits out of the BMP driver the parts shared with the async version
+(gdevbmp.h, gdevbmp.c, gdevbmpc.c).
+
+Changes the band rasterizer to implement get_bits_rectangle rather than
+get_bits. In some cases, this results in much less computation.
+(gxclist.c, gxclread.c)
+
+Makes the monochrome H-P printer drivers emit a printer reset when closing
+the device. According to a user, this helps prevent the ink nozzles from
+clogging. (gdevdjet.c)
+
+</pre><h3><a name="V5.28_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The Windows DLL entry point procedure didn't return a value as it
+was supposed to. (gp_mswin.c)
+
+Removes all remaining initialized but non-constant globals, and ensures that
+all non-debugging-related BSS variables in the library are explicitly set to
+0 at initialization time. (gp_unix.c)
+
+Improves an error message slightly. (dwmainc.cpp)
+
+</pre><h3><a name="V5.28_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - The tracing code for restore_resources could access an invalid
+address. (isave.c)
+ - sizeof(procedure) is not allowed in ANSI C++. (opdef.h,
+iccfont.c, interp.c, ireclaim.c)
+ - A variable was declared incorrectly as bin_token_type_t rather
+than bin_seq_type_t. (iscanbin.c)
+ - The behavior of copypage didn't change in LanguageLevel 3.
+(gs_init.ps)
+ - When grestore et al reactivated a page device, they performed an
+initgraphics, which should only be performed by showpage. (gs_setpd.ps)
+ - The RunLengthEncode filter was broken in cases where the caller
+supplied a record size. (bug introduced in 5.2x) (zfilter.c)
+ - A needed #include of memory_.h was missing. (zfreuse.c)
+ - On machines with sizeof(long) &gt; sizeof(int), the dictionary form
+of image and imagemask didn't work. (bug introduced in 5.2x) (zimage2.c)
+ - exitserver left a 'true' on the operand stack. (gs_lev2.ps)
+
+Replaces the STACK_LOOP_BEGIN/END macros with procedures. (We retain the
+macros for backward compatibility.) (istack.h, istack.c, zchar.c,
+zcontrol.c, zdict.c, zvmem.c)
+
+Reviews the remaining operator files for ease of reading / debugging,
+including removing macros where appropriate. (z*.c)
+
+Changes the dictionary stack printer to indicate whether the dictionary is
+allocated in global or local VM. (gs_init.ps)
+
+Redefines countexecstack and execstack as operators, solely for the sake of
+the Genoa [count]execstack tests. (gs_init.ps, zcontrol.c)
+
+Changes array/string/packedarray forall not to keep an index on the stack,
+solely for the sake of the Genoa [count]execstack tests. (zgeneric.c)
+
+Finishes implementing CIEBasedDEF[G] color spaces. (icie.h, zcie.c)
+
+Adds a ColorSpace resource instance for sRGB. (gs_lev2.ps, gs_res.ps)
+
+Implements CloseSource and CloseTarget for filters. ****** DOESN'T WORK IF
+AN EXCEPTION OCCURS DURING A NESTED CLOSE. ****** (zfile.c)
+
+Allows Separation and DeviceN color spaces as the base space for an Indexed
+color space. (zcsdevn.c, zcsindex.c, zcssepr.c)
+
+</pre><h3><a name="V5.28_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - In PDF files, Indexed color spaces with a CIEBasedABC base space
+gave an /undefined error. (pdf_draw.ps)
+
+</pre><h3><a name="V5.28_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The report_error member of the DCT streams wasn't initialized
+early enough. (ifilter.h, zfdctd.c, zfdcte.c, zfile.c)
+
+Changes the zlib filters to use the stream's allocator, rather than the
+default allocator, for their private storage. Note that this requires the
+stream itself to keep pointers to this storage, for garbage collection.
+(szlibx.h, szlibc.c, szlibd.c, szlibe.c)
+
+Updates some clients to use new, simpler GC structure descriptors. (sdct.h,
+sfilter.h, sdctc.c, sfilter1.c)
+
+Adds a close_strm member for the interpreter's use (CloseSource /
+CloseTarget). (stream.h, stream.c)
+
+</pre><h3><a name="V5.28_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - gstate, currentgstate, and setgstate didn't handle the effective
+clip path properly, possibly leading to dangling pointers. (gsstate.c)
+ - setrasterop, setsourcetransparent, and settexturetransparent
+should all return int rather than void, since they can fail. (gsrop.h,
+gsrop.c)
+ - FunctionType 1 functions didn't clip the output value to the
+Range. (gsfunc3.c)
+ - A needed cast from byte * to char * was missing. (gscrdp.c)
+ - Some needed #includes of *_.h were missing. (gscrd.c, gscrdp.c,
+gxshade6.c)
+ - The prototype for gx_effective_clip_path wasn't #included in a
+needed place. (gsimage.c)
+ - RasterOp sometimes didn't work properly for devices whose
+representation of white wasn't a pixel value of 0. (gxdcolor.h, gdevbbox.c,
+gdevdbit.c, gdevvec.c, gslib.c, gxdcolor.c)
+ - The variable used to detect double declaration of
+gs_get_bits_params_t was named incorrectly. (gxdevcli.h, gxgetbit.h)
+ - gs_[eo]clip never retained the clipping path in its original form.
+These routines now retain it in the simple case (the old clipping path is a
+rectangle, and the new path is completely contained within it). This
+requires a small NON-BACKWARD-COMPATIBLE change in the gx_cpath_intersect
+procedure: it no longer updates the new path, and it flattens the path if
+needed. To avoid problems, we renamed this procedure as gx_cpath_clip.
+(gsdps.c, gspath.c, gxcpath.c)
+ - If the image was empty, gs_image_common_init didn't free the
+lower-level enumerator. (gsimage.c, gxccache.c)
+
+Removes all remaining initialized but non-constant globals, and ensures that
+all non-debugging-related BSS variables in the library are explicitly set to
+0 at initialization time. (gxdevice.h, gconf.c, gsdevice.c, gshtscr.c,
+gsiodev.c, gsutil.c, gxcht.c)
+
+Finishes implementing table-driven GC descriptors. We expected it to save
+considerable space at negligible time cost; it actually shrank the 1Mb
+executable by only about 5K, and slowed down garbage collection by about
+2%. (gsfcmap.h, gsstrtab.h [deleted], gsstruct.h, gzpath.h, gsfcmap.c,
+gsmemory.c, gsstrtab.c [deleted])
+
+Finishes implementing CIEBasedDEF[G] color spaces. (gscie.h, gscie.c)
+
+Simplifies some code by removing or redefining macros. (gxi12bit.c)
+
+Removes all patches made for easier retrofitting of 5.2x code into 5.1x
+filesets. (gdevdrop.c, gdevmrop.c, gslib.c, gspcolor.c)
+
+Reviews a few more files for style and readability. (gxbitfmt.h,
+gxgetbit.h)
+
+Allows Separation (and, if included, DeviceN) color spaces as the base space
+of an Indexed color space. Unfortunately, this involves introducing a new
+distinction in color space types, which entails NON-BACKWARD-COMPATIBLE
+changes in the color space and color space type structures. (gxcspace.h,
+gscdevn.c, gscolor1.c, gscolor2.c, gscpixel.c, gscscie.c, gscsepr.c,
+gscspace.c, gspcolor.c)
+
+Makes a small addition in order to fix an interpreter bug. (gxfixed.h,
+gdevbbox.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.27"></a>Version 5.27 (limited) (7/18/98)</h2>
+
+<p>
+This is another "in-flight" snapshot made in preparation for the 5.2x / 5.1x
+code merge. It completes the driver CRD API.
+
+<h3><a name="V5.27_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - The reference to psview was out of date. (new-user.txt)
+
+Adds some pointers to Aladdin Ghostscript mirror sites. (new-user.txt)
+
+Updates the C style guide a little further. (c-style.txt)
+
+Adds documentation on driver-supplied CRDs. (drivers.txt)
+
+Updates the JPEG makefile to mention IJG release 6b. (jpeg.mak)
+
+Updates documentation to reflect the devs.mak / contrib.mak split. (README,
+devices.txt, drivers.txt, make.txt, new-user.txt, source.txt, use.txt)
+
+</pre><h3><a name="V5.27_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - sjpegerr.o was needed even when using the shared JPEG library.
+(jpeg.mak)
+
+Changes the name of the jpeg library directory from jpeg-&lt;version&gt; to just
+jpeg, to parallel libpng and zlib. (make.txt, *.mak)
+
+Creates a separate makefile for contributed drivers. Eventually these
+drivers will go in a separate directory. (devs.mak, contrib.mak, *.mak)
+
+</pre><h3><a name="V5.27_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The pkm driver was absurdly inefficient. (gdevpbm.c)
+ - The psfax driver (which, admittedly, doesn't come close to
+working) no longer compiled. (gdevpfax.c)
+ - The ARCHAIC mode of the Epson driver emitted an incorrect
+character ('r' instead of ^R). (gdevepsn.c)
+ - The X driver didn't check the calls of XInitImage for error
+status. (gdevx.c)
+
+Updates a client for the change in the names of the gb_ values. (gdevx.c)
+
+Updates a client for the added param_request procedure. (gdevpsdf.c)
+
+Reformats all Aladdin-maintained drivers to the new Ghostscript standard
+format, using indent. We deliberately did not reformat user-contributed
+drivers, since indent mangles a line once in a while and we do not want to
+take responsibility for fixing others' code. (*.h, *.c)
+
+Adds a default CRD specification to the 'bit' device, for testing.
+(gdevbit.c)
+
+Integrates a bit more of the support code for asynchronous rasterizing.
+(gxband.h, gxclio.h, gxclist.h, gxclmem.h, gxclfile.c, gxclist.c, gxclmem.c,
+gxclread.c, gxpageq.h, gxpageq.c)
+
+</pre><h3><a name="V5.27_Platforms"></a>Platforms</h3><pre>
+
+Adds thread support to the Win32 platform. (gp_win32.c)
+
+</pre><h3><a name="V5.27_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Composite fonts with CID-keyed descendants didn't run the
+BuildGlyph procedure. (zchar.c)
+ - The internal representation of CMaps was built incorrectly.
+(zfcmap.c)
+ - Category resources didn't load from files automatically.
+(gs_res.ps)
+
+Reformats all files to the new Ghostscript standard format, using indent.
+(*.h, *.c)
+
+Reviews most of the operator files for ease of reading / debugging,
+including removing macros where appropriate. (z*.c)
+
+Updates a client for the change in the names of the gb_ values. (zdevice.c)
+
+Updates a client for the added param_request procedure. (iparam.c)
+
+Updates clients for the completion of the CRD API. (zcie.c, zcrd.c)
+
+Increases the initial size of systemdict a little more, to allow for -d and
+-s. (iinit.c)
+
+</pre><h3><a name="V5.27_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - Text modes other than 0 didn't work with multiple-byte fonts.
+(pdf_ops.ps)
+ - There were many bugs in the code for Type 0 and CIDFontType 0
+fonts. (pdf_font.ps)
+
+</pre><h3><a name="V5.27_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - cshow returned a character code of -1 for composite fonts with
+FMapType 9 (CMap-based). (gsfcmap.h, gschar0.c, gsfcmap.c)
+ - The GC procedure for enumerating show enumerators was broken.
+(bug introduced in 5.24 or 5.25) (gschar.c)
+ - dashpath always copied the path, instead of only copying it if
+needed. (gspath1.c)
+ - The hint replacement fix in 5.24 sometimes thought a path was
+closed when it wasn't, producing gross distortions of some characters.
+(gxhint3.c)
+
+Cleans up code for debugging by expanding macros, etc. (gstext.h,
+gschar0.c)
+
+Changes the gb_ values to all caps, in line with general C convention. This
+is a NON-BACKWARD-COMPATIBLE change to an as yet rarely-used API.
+(gxbitfmt.h, gdevalph.c, gdevdgbr.c, gdevmem.c, gsalphac.c, gximage2.c)
+
+Enhances the default implementation of parameter lists to allow requesting
+individual parameters. This is needed for the driver CRD API. (gsparam.h,
+gscparam.c, gsparam.c)
+
+Completes the API for driver CRDs, also moving some code from gscie.c to
+gscrd.c. This involves a NON-BACKWARD-COMPATIBLE change in the prototype of
+the TransformPQR procedures. (gscie.h, gscrd.h, gscrdp.h, gscie.c, gscrd.c,
+gscrdp.c)
+
+Reformats all files to the new Ghostscript standard format, using indent.
+(*.h, *.c)
+
+Splits up gdevmrop.c into 3 files: gdevmrop.c (RasterOp implementation for
+memory devices), gdevdrop.c (default and device-independent RasterOp
+algorithms), and gdevrops.c (RasterOp-source device). (gdevmrop.h,
+gdevdrop.c, gdevmrop.c, gdevrops.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.26"></a>Version 5.26 (limited) (7/7/98)</h2>
+
+<p>
+The purpose of this fileset is to add an API for drivers to provide one or
+more device-appropriate CIE rendering dictionaries. Like 5.25, it is a
+"snapshot" fileset not made available even to beta testers.
+
+<h3><a name="V5.26_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - An !endif was omitted. (msvc32.mak)
+ - A newly needed Windows library was omitted. (msvctail.mak)
+ - The /Za and /Ze switches were set incorrectly for MSVC.
+(bcwin32.mak, msvccmd.mak, watcw32.mak, winint.mak, winlib.mak)
+
+</pre><h3><a name="V5.26_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - A closing bracket was omitted (in code that is ifdef'd out).
+(gdevpdf.c)
+
+</pre><h3><a name="V5.26_Fonts"></a>Fonts</h3><pre>
+
+Changes the font loader so that instead of pushing systemdict and a small
+empty dictionary on the stack before loading a font, it pushes userdict.
+This is what Adobe interpreters do, but this will probably break some
+PostScript files, specifically ones that redefine 'index'. I don't see how
+the Adobe interpreters can possibly do the right thing for such files.
+(gs_fonts.ps, gs_type1.ps)
+
+</pre><h3><a name="V5.26_Interpreter"></a>Interpreter</h3><pre>
+
+Updates clients for changes in CRD API. This involves some changes in
+internal procedures. (gs_lev2.ps, icie.h, zcie.c, zcrd.c)
+
+</pre><h3><a name="V5.26_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Pickling string, name, and array parameters tried to force
+inappropriate alignment. (gsparams.c)
+ - Pickling dictionary parameters wrote the result in the wrong
+place. (gsparams.c)
+ - An occurrence of dev_t should have been gx_device. The compiler
+didn't catch this because there happens to be a type named dev_t in
+&lt;types.h&gt; (!). (gxclread.c)
+
+Adds an API for drivers to provide one or more CRDs (as device parameters).
+Makes a small but NON-BACKWARD-COMPATIBLE change in the names and argument
+lists of the existing CRD API (which is not used by anything in the standard
+configuration). (gscie.h, gscrd.h, gscrdp.h, gscie.c, gscrd.c, gscrdp.c,
+gslib.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.25"></a>Version 5.25 (limited) (7/1/98)</h2>
+
+<p>
+This is a "snapshot" fileset created for the purpose of merging with a
+separate development branch. While it fixes some significant bugs in 5.24,
+it doesn't represent substantial additional progress.
+
+<h3><a name="V5.25_Documentation"></a>Documentation</h3><pre>
+
+Completely rearranges the C style guide, updates it to reflect current
+practice, and adds a 1-page summary of the most important points.
+(c-style.txt)
+
+Updates the man pages for consistency and to correct minor errors. (*.1)
+
+Notes that the pjxl300 driver works with the H-P CopyJet. (devices.txt,
+devs.mak).
+
+Notes that in order to deal with over-zealous Solaris security checking,
+additional linker switches are needed. (make.txt, unix*.mak)
+
+</pre><h3><a name="V5.25_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - 'make install' didn't get the executable from the right place.
+unixinst.mak)
+ - COMPILE_INITS=1 didn't work. (int.mak, geninit.c)
+ - The MSVC makefile updates hadn't been applied to the MSVC-only
+devices. (devs.mak)
+ - The other PC makefiles didn't define GLCCWIN. (bcwin32.mak,
+watcw32.mak)
+
+Adds bounding box testing to the library test program. (ugcclib.mak)
+
+Reviews and reformats code for maintainability. (genarch.c, geninit.c)
+
+Moves the MS Windows-specific devices to a new file. (bcwin32.mak,
+devs.mak, msdevs.mak, msvc32.mak, watcw32.mak)
+
+</pre><h3><a name="V5.25_Platforms"></a>Platforms</h3><pre>
+
+Reviews and reformats header files for maintainability. (vmsmath.h,
+windows_.h)
+
+Removes some no-longer-used files from the fileset. (overlay.h, gp_itbc.c)
+
+</pre><h3><a name="V5.25_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - Substituted fonts had their FontName set to the requested one.
+There was a comment in the code saying that some files that depend on this
+happening, but Adobe implementations don't do it. However, aliased fonts in
+Fontmap will continue to have the FontName set to the Fontmap key.
+(gs_fonts.ps)
+
+Adds the euro symbol at position 240 (0360) in SymbolEncoding. This is a
+PostScript 3 addition, but it's too much work to make it appear there only
+if languagelevel &gt;= 3. (gs_sym_e.ps)
+
+</pre><h3><a name="V5.25_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - The bbox device didn't work if its target was itself a forwarding
+device. (gdevbbox.c)
+ - User parameters maintained at the PostScript (as opposed to VM)
+level didn't work. (gs_init.ps)
+ - Idiom recognition didn't work. (gs_init.ps, gs_ll3.ps, zmisc3.c)
+ - .beginpage and .endpage could cause an error if the current device
+was a page device but was installed with setdevice rather than
+setpagedevice. (gs_setpd.ps)
+
+In the interest of readability, replaces all casting macros with separate
+variables, other than those used in enum_ptrs and reloc_ptrs procedures.
+Note that doing this for rptr in gc_trace in igc.c will have a significant
+performance cost on Intel CPUs, unless the compiler has a very good
+optimizer, because it introduces another variable competing for scarce
+registers in the most performance-critical section of code in the garbage
+collector. (ialloc.c, igc.c, iparam.c, isave.c, istack.c, zchar42.c,
+zfproc.c, zusparam.c)
+
+Changes some macros to procedures. (igc.c, ilocate.c, zusparam.c)
+
+Changes some macros to static quasi-constants (only variable for debugging).
+(zvmem.c)
+
+Adds #include "errors.h" to oper.h, removing it from z*.c. (oper.h, z*.c)
+
+Reviews and reformats some header files for maintainability. This is an
+ongoing project. (bfont.h, errors.h, iinit.c)
+
+Consolidates and simplifies the reading and writing of binary tokens and
+binary object sequences. (bseq.h [deleted], btoken.h, ibnum.h, ibnum.c,
+iscanbin.c, zbseq.c)
+
+Adds dummy user and system parameter entries for all the parameters listed
+in Appendix C of the PostScript Red Book: even though the book clearly says
+that no PostScript program should rely on the presence of any particular
+parameter, PostScript files routinely assume the existence of the parameters
+listed in Appendix C. (gs_init.ps, gs_lev2.ps, gs_res.ps)
+
+Adds dummy user and system parameter entries for the new parameters listed
+in the 3010 Supplement. (gs_ll3.ps)
+
+Adds double-inclusion protection to all header files. (*.h)
+
+Moves the creation of binary object sequence headers from C to PostScript
+code. (zbseq.c, gs_btokn.ps)
+
+Adds support for multiple FormTypes and ColorRenderingTypes. (gs_init.ps,
+gs_lev2.ps, gs_res.ps, zcrd.c)
+
+Updates structures and clients for the introduction of "raw memory"
+allocators. (ialloc.h, igc.h, ialloc.c, imain.c, isave.c)
+
+In the interest of readability and being able to use GNU indent to create
+standard formatting, changes the operator tables from procedures back to
+data structures. This change is backward-compatible for all operator files,
+although we also edited all of Ghostscript's own operator definitions to
+remove the BEGIN_OP_DEFS and END_OP_DEFS macros (which now have to generate
+a little unnecessary code for backward compatibility). (opdef.h, iconf.c,
+iinit.c, iutil.c, z*.c)
+
+Splits zchar2.c into a Level 1+ part and a Level 2 part. (zcfont.c,
+zchar2.c)
+
+</pre><h3><a name="V5.25_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Adds font synthesis based on the FontDescriptor. Currently this is very
+rudimentary. (pdf_font.ps)
+
+</pre><h3><a name="V5.25_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The PDF writer didn't default to A4 paper size if A4 was selected
+as the default in the makefile. (gdevpdf.c)
+ - The default implementation of the begin_image procedure always
+called the image's begin_image implementation, rather than the device's
+begin_typed_image implementation. (gdevddrw.c)
+ - The bbox device didn't initialize its reference count.
+(gdevbbox.c)
+ - A necessary cast was omitted. (gdevpsde.c)
+
+Changes some macros to procedures. (gdevpstr.h, gdevpstr.c)
+
+Adds an internal device to implement the PCL5 special color mapping
+algorithms. (gdevcmap.h, gxdevice.h, gdevcmap.c, gdevnfwd.c)
+
+Adds double-inclusion protection to all header files. (*.h)
+
+Updates drivers for the change in begin_image. (gdevbbox.c, gdevpdfi.c,
+gdevvec.c, gxclimag.c)
+
+</pre><h3><a name="V5.25_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The non-ANSI definitions of CLEAR_MARKS_PROC, ENUM_PTRS_BEGIN_PROC
+and RELOC_PTRS_BEGIN were missing a parameter. (gsstruct.h)
+ - A few necessary casts were omitted. (gsparam.c, gxpcmap.c)
+ - Images or Patterns with non-default RasterOps could cause crashes.
+(gdevmrop.c, gxp1fill.c)
+ - Exponential Interpolation functions with non-integral positive
+exponents incorrectly required the lower bound of the domain to be strictly
+positive rather than only non-negative. (gsfunc3.c)
+ - The attempt to achieve the desired color smoothness when shading
+could compute (nearly) forever. (gxshade.c, gxshade1.c)
+ - The arc change in 5.24 caused arcs to render incorrectly.
+(gspath1.c)
+ - The macro-reducing cleanup in 5.24 introduced a bug in handling
+copy operations with negative skew. (gdevm1.c)
+
+Adds unmasked images and bounding box testing to the library test program.
+(gxdevcli.h, gslib.c)
+
+Changes some macros to procedures. (gxfunc.h, gsfunc.c, gsfunc0.c,
+gsfunc3.c)
+
+Adds double-inclusion protection to all header files. (*.h)
+
+Reviews and reformats header files for maintainability. (*_.h, dodebug.h
+[deleted])
+
+Changes the structure of the common part of the image enumerator to include
+the device (which may be different from the original device, because of
+forwarding), and to access the procedures through a pointer to a const
+structure. This is a NON-BACKWARD-COMPATIBLE CHANGE for implementors of
+begin_image, since they now must pass the device to
+gx_image_enum_common_init. (gximage.h, gxiparam.h, gdevddrw.c, gdevdflt.c,
+gxiinit.c, gximage3.c, gximage4.c)
+
+Adds tests of the new color mapping device to the library test program.
+(gslib.c)
+
+Removes the last vestiges of segmented pointers. (genarch.c, std.h)
+
+Introduces a "raw memory" API, primarily for managing the underlying memory
+pool for embedded systems. This involves a NON-BACKWARD-COMPATIBLE-CHANGE
+in the implementation (but not ordinary clients) of allocators.
+(gsmemory.h, gsmemraw.h, gxalloc.h, gsalloc.c, gsmalloc.c, gsmemory.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.24"></a>Version 5.24 (limited) (6/17/98)</h2>
+
+<p>
+In addition to the usual bug fixes, and a few enhancements where temptation
+proved irresistible or in response to an external need, this fileset:
+<ul>
+<li> - Takes the first steps on a major readability cleanup
+ (4-space indentation instead of 2, replacement of macros by
+ procedures, ....)
+
+<li> - Implements a bit more of the DPS functionality, including view
+ clipping, and gstate stack copying for 'fork'.
+
+<li> - Starts to sketch a text API for drivers.
+
+<li> - Changes the Unix makefiles so that they create production
+binaries
+ in a separate directory.
+</ul>
+
+<p>
+Again, there are some non-backward-compatible changes required by other
+architectural improvements. As always, we have tried to minimize the impact
+of such changes on users' code.
+
+<h3><a name="V5.24_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - The -Kn switch wasn't documented. (use.txt)
+ - The term "Software" was used instead of "Program" in the last
+paragraphs of the license. (PUBLIC)
+
+Adds a couple of missing operators to the list at the end of ostack.h.
+(ostack.h)
+
+Documents more precisely which gstate points to which objects after various
+gstate operations. (gsstate.c)
+
+Corrects some addresses for the Free Software Foundation. (commprod.txt,
+new-user.txt)
+
+Improves the documentation for memory management of color spaces. (gscie.h,
+gscolor2.h)
+
+Updates the list of hardware available to Aladdin. (new-user.txt)
+
+Documents ReopenPerPage. (language.txt)
+
+Moves the documentation of image rendering procedures to a better place.
+(gximage.h, gxiinit.c)
+
+Clarifies that old slzwe.c files may not work with current Ghostscript
+versions. (make.txt)
+
+</pre><h3><a name="V5.24_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - psl3.dev didn't include func.dev. (int.mak)
+ - device and device2 devices weren't sorted together, causing
+devices to appear in the list out of order (including, possibly, selecting
+the wrong device as default). (genconf.c)
+ - The mswindll module definition omitted some needed files.
+(devs.mak)
+
+Changes the optimization level for gcc from -O to -O2 for both standard and
+profiling builds. (unix-gcc.mak)
+
+Defines 3 new makefile macros for the Unix platforms,
+CFLAGS_{STANDARD|DEBUG|PROFILE}, that give the additional compiler switches
+for these 3 compilation options. (unixansi.mak, unix-cc.mak, unix-gcc.mak)
+
+Changes the Unix makefiles so that by default they create the binaries in an
+'obj' subdirectory of the source directory. (unixansi.mak, unix-cc.mak,
+unix-gcc.mak, unix-end.mak)
+
+Updates the MSVC++ makefiles so they allow setting any configuration
+parameter from the make command line. (msvc32.mak, msvccmd.mak, msvccom.mak
+[deleted], msvclib.mak, msvctail.mak)
+
+</pre><h3><a name="V5.24_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - ps2ascii was broken. (ps2ascii.ps)
+
+Adds capability to gslp.ps:
+
+ - Variable-width fonts (but without automatic line breaking);
+
+ - Pair kerning (from AFM file);
+
+ - Inter-character and space width adjustment.
+
+This project was done for a paying customer. (gslp.ps)
+
+</pre><h3><a name="V5.24_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The name of the plan9bm device was wrong. (gdevpbm.c)
+ - The PDF writer wrote incorrect parameters for the CCITTFax filter
+used to compress Type 3 font bitmaps. (bug introduced in 5.23) (gdevpdfi.c)
+ - The PDF writer emitted two 'endobj' lines for Type 3 bitmap fonts.
+(gdevpdf.c)
+
+Removes all remaining uses of _ds and _ss in Aladdin's drivers. (gdevprn.h,
+gdevsvga.h, gdevbit.c, gdevcgm.c, gdevdjet.c, gdevmsxf.c, gdevpbm.c,
+gdevpccm.c, gdevpcfb.c, gdevpdfi.c, gdevprn.c, gdevsvga.c, gdevtfax.c)
+
+Renames a local macro named END. (gdevcgml.c)
+
+Removes all uses of far_data other than for device (but not device2)
+prototypes. (gdevbit.c, gdevdjet.c, gdevemap.c, gdevmsxf.c, gdevpbm.c,
+gdevpcfb.c, gdevpcx.c, gdevpdf.c, gdevpng.c, gdevps.c, gdevpsim.c, gdevpx.c,
+gdevtfax.c, gdevtfnx.c, gdevvglb.c, gdevx.c, gdevxalt.c)
+
+Adds a psrgb driver that writes PostScript (Level 2) planar,
+run-length-compressed, 24-bit RGB images. (gdevpsci.c)
+
+Starts to define and implement a driver procedure for text. This interface
+will certainly change in the future as we get more insight into the division
+of responsibility and control flow between generic code, individual drivers,
+and internal and external fonts. This involves a major
+NON-BACKWARD-COMPATIBLE CHANGE in the gs_show_enum structure (which no
+client should be accessing directly). (gdevmem.h, gdevprn.h, gstext.h,
+gxchar.h, gxdevcli.h, gxdevice.h, gxtext.h, gdevbbox.c, gdevht.c,
+gdevnfwd.c, gschar.c, gschar0.c, gstext.c, gxacpath.c, gxclip.c, gxclip2.c,
+gxclipm.c, gxclist.c, gxpcmap.c)
+
+Extends the parameter list printer to handle names and arrays. (gdevpsdf.c)
+
+Implements the ability to write out a Type 1 font definition, for embedding
+fonts in PDF output. Currently this code isn't called from anywhere, and it
+will certainly be subject to change in the future. (gdevpsdf.h, gdevpdfi.c,
+gdevpsde.c, gdevpsdf.c)
+
+Adds the PCL XL Protocol Class 2.0 operators, attributes, and enumerated
+values to the relevant header files. (gdevpxat.h, gdevpxen.h, gdevpxop.h)
+
+Converts some additional devices to -dev2, to make them const. (devs.mak,
+gdevjpeg.c)
+
+To help in debugging, changes all uses of
+ #define ss ((stream_xxx_state *)st)
+to
+ stream_xxx_state * const ss = (stream_xxx_state *)st;
+(gdevpdfi.c, gdevpsdi.c, gdevpsdp.c, gdevpsds.c)
+
+Massages mem_mono_copy_mono and mem_mono_strip_tile_rectangle to reduce the
+use of macros somewhat. (gdevm1.c, gdevmem.h)
+
+Makes a change to support the change in gs_param_list_common. (gdevpsdf.c)
+
+Replaces all remaining uses of do { ... } while (0) with BEGIN ... END.
+(gdevpdfm.c, gdevpx.c, gdevx.c, gdevxalt.c)
+
+Adds a ReopenPerPage Boolean device parameter for printers, which causes the
+output file to be closed and reopened for each page. This may be helpful in
+persuading spoolers to start printing as soon as the first page is
+available. (gdevprn.h, gdevprn.c)
+
+Makes the %-format validator for output file names a procedure, even though
+it's only called in one place. (gdevprn.c)
+
+Updates some clients for the change from std_procs to procs. (gdevp2up.c,
+gdevpbm.c, gdevupd.c,
+
+Removes the use of the CleanFaxData tag (327) from TIFF output, since many
+applications don't recognize it and it isn't in the TIFF 6 documentation.
+(gdevtifs.h, gdevtfax.c)
+
+</pre><h3><a name="V5.24_Platforms"></a>Platforms</h3><pre>
+
+Adds a new gp_setmode_binary platform procedure, to set a file into binary
+mode on platforms that distinguish text and binary. (gp.h, gp_*.c)
+
+</pre><h3><a name="V5.24_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - The derived (Bold, Oblique, ...) Hershey fonts were broken.
+(fonts/makeher.ps, fonts/h*.ps)
+
+</pre><h3><a name="V5.24_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - As always, gcc failed to report some signed/unsigned char *
+mismatches. (imainarg.c)
+ - Some needed #includes were missing. (zcrd.c, ztype.c)
+ - Contexts were always allocated in global VM (should be local VM),
+and were freed in the current VM (should be local VM). Fixing this required
+changing some internal interfaces defined in icontext.h. (icontext.h,
+icontext.c, interp.c, zcontext.c)
+ - restore did some unnecessary gsaves. (zvmem.c)
+ - Creating a new context didn't initialize the graphics state
+properly, and didn't do the first gsave that grestoreall relies on.
+(gs_dps.ps)
+ - The bookkeeping for open files didn't work with multiple contexts.
+Fixing this required a substantial (simplifying) redesign of the
+interpreter's bookkeeping for streams in general: this may have introduced
+new bugs. (files.h, ireclaim.c, isave.c, zfile.c)
+ - fork didn't copy the graphics state stack. (zcontext.c)
+ - The space bits were set incorrectly in the array reference for the
+operand stack, causing the garbage collector not to mark the operand stack
+of contexts other than the current one. (interp.c)
+ - LanguageLevel 3 facilities weren't enabled when desired.
+(gs_ll3.ps, ilevel.h, opdef.h, iinit.c, zcsdevn.c, zimage3.c, zmisc2.c,
+zmisc3.c, zshade.c, ztrap.c)
+ - flushfile with a procedure-target stream didn't pass the buffered
+data to the procedure. We tinkered with this a little, but it still isn't
+fixed. (zfilter.c, zfproc.c)
+ - The top-level color space objects allocated by the CIE color space
+setting operators were never freed (until garbage collection). (zcie.c)
+ - setpagedevice with a 0-size page didn't fail. (gs_setpd.ps,
+zmedia2.c)
+ - If one or more of the matrices in a CIE color space or CRD was
+singular, setcolorspace or setcolorrendering could cause a stackoverflow.
+(zcie.c)
+ - defineuserobject didn't work. (I don't see how it could ever have
+worked.) (gs_dps2.ps)
+ - The version string wasn't read-only. (gs_init.ps, gs_lev2.ps,
+gs_ll3.ps)
+ - Some standard resource categories weren't defined (which they need
+to be, even if they have no instances). (gs_res.ps, gs_ll3.ps)
+ - The Trapping ProcSet was empty. (gs_ll3.ps)
+ - setvmthreshold didn't accept a value of -1. (gs_lev2.ps,
+gs_pdfwr.ps, zusparam.c, zvmem2.c)
+ - Binary tokens containing native reals with swapped byte order
+didn't read in properly. (ibnum.c, iscanbin.c)
+ - In binary object sequences, many executable objects were
+incorrectly written out as literal. (zbseq.c)
+ - String DataSources for shadings didn't work. (zshade.c)
+ - Parameter dictionaries with integer keys didn't work. (iparam.c)
+ - A "can't happen" condition caused massive confusion instead of a
+rangecheck error. (gs_setpd.ps)
+ - setcachelimit and setcacheparams were broken, because they no
+longer interacted correctly with setuserparams and setsystemparams.
+(gs_lev2.ps)
+ - The source width and height of images was arbitrarily limited to
+32767. (zimage2.c)
+ - The optional dictionary parameter for filters was the last
+operand, not the first. (zfbcp.c, zfdecode.c, zfilter.c, zfilter2.c,
+zfilterx.c, zfzlib.c)
+ - If the current color space was Indexed, Separation using the
+alternative space, or DeviceN using the alternative space,
+currentgray/cmykcolor/hsbcolor/rgbcolor returned 0 rather than the
+underlying color. (This was a correction to the Red Book in the 3010
+Language Supplement, Section D.2.4 and D.2.5.) (gscolor.c, gscolor1.c,
+gxcspace.h)
+
+Implements some additional LanguageLevel 3 stream facilities:
+ - CloseSource and CloseTarget (parsing only). (ilevel.h, zfilter.c)
+ - Dictionary argument for SubFileDecode. (zfilter.c)
+ - UnitSize (fully implemented) and LowBitFirst (parsing only) for
+ LZWDecode. (zfdecode.c)
+ - ReusableStreamDecode (incomplete). (gs_ll3.ps, zfreuse.c)
+
+Removes all remaining uses of _ds and _ss. (bfont.h, errors.h, files.h,
+icie.h, idict.h, idparam.h, ifunc.h, iscan.h, iutil2.h, opdef.h; iccfont.c,
+idict.c, idparam.c, igc.c, iinit.c, iparam.c, iscan.c, iscannum.c, iutil2.c,
+zcid.c, zcie.c, zdevice2.c, zfdecode.c, zfile.c, zfileio.c, zfont0.c,
+zfont2.c, zfont42.c, zfunc.c, zht2.c, zusparam.c)
+
+Removes the use of gs_if_debug_c. (zvmem2.c)
+
+Updates clients for the change in color space num_components. (zcolor2.c,
+zcsindex.c, zcssepr.c, zpcolor.c)
+
+Changes the stack manager so it can ensure an unused margin above the top
+element. This is needed for a possible change in the operator API.
+(istack.h, istack.c)
+
+Decouples the definition of the interpreter instance from the definition of
+the exported procedures that use it, so that we can use it in more places
+internally. (iminst.h, main.h)
+
+Removes all initialization of static per-context state. (iinit.c, iscan.c,
+zmath.c)
+
+Makes the freeing of VM spaces entirely dependent on the number of contexts
+referencing them, removing the special handling of interpreter termination.
+(icontext.h, gsalloc.c, icontext.c, inouparm.c, interp.c, zcontext.c,
+zusparam.c) ****** IN PROGRESS ******
+
+Enables printing of time and memory usage even in non-DEBUG systems, for
+benchmarking. (imain.c)
+
+Adds a .forceundef operator to parallel .forceput. (gs_init.ps, zdict.c)
+
+Rewrites the Form caching code to use the Pattern cache. (gs_fform.ps)
+
+Removes all uses of far_data. (imain.c, imainarg.c, iname.c, opdef.h)
+
+Moves responsibility for null page devices from C code to PostScript code.
+(gs_setpd.ps, igstate.h, zdevice2.c, zgstate.c)
+
+Changes the context scheduler to not store or reload the state when
+switching from a context to the same context. (zcontext.c)
+
+Moves .registerencoding from C code to PostScript code. (gs_init.ps,
+zfont2.c)
+
+Splits off inames.h (API for names and the name table) from iname.h (API for
+the interpreter's name table); renames the_nt as the_gs_name_table, and
+moves it to imain.c. We would like to rename iname.h as names.h, but there
+are too many places that include it. (igc.h, iname.h, inamedef.h, inames.h,
+imain.h, idict.c, idstack.c, igc.c, iname.c, interp.c, isave.c)
+
+Splits off iestack.h and iostack.h from estack.h and ostack.h, as was done
+for [i]dstack.h in 5.23. (estack.h, iestack.h, iostack.h, ostack.h,
+interp.c)
+
+Splits off the hit detection device from the user path code, moving it to
+the library level where it belongs. (zupath.c)
+
+Updates the interpreter for the changes in the enum_ptrs, reloc_ptrs, and
+clear_marks memory management procedures. (igc.c, igcref.c, ilocate.c,
+zcontext.c)
+
+Removes all uses of 'near' from the interpreter: if short and long calls
+have different formats, we rely on the compiler to generate the most
+efficient one. (iccfont.c, imainarg.c, iparam.c, zdevice2.c, zdouble.c,
+zdps.c, zgstate.c, zmatrix.c, zpath.c, zpath1.c, zrelbit.c, ztype.c)
+
+Makes a couple of minor changes to support the change in
+gs_param_list_common. (iparam.h, iparam.c)
+
+Changes internaldict to an operator, and executive and findencoding to
+procedures, in order to satisfy the Genoa FTS. (gs_dps.ps, gs_init.ps,
+gs_res.ps)
+
+Updates clients for the addition of device reference counting. (zpcolor.c,
+zupath.c)
+
+Replaces all remaining uses of do { ... } while (0) with BEGIN ... END.
+(istruct.h, opcheck.h)
+
+Adds a debugging operator for printing out a Type 1 font. (zfont1.c)
+
+Updates the Type 1 font operators for the change in the procedure structure.
+(zchar1.c, zfont1.c)
+
+Updates one client for the change in the gs_show_enum structure. (zchar.c)
+
+Removes an obsolete "hook" put in for a customer. (zchar.c)
+
+Removes the BigStringEncode filter, which was only used by a former
+customer. (zfilter.c)
+
+</pre><h3><a name="V5.24_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - Images defined in non-Device color spaces were broken.
+(pdf_draw.ps)
+
+Removes some vestiges of the old pdf2ps. (pdf_draw.ps, pdf_main.ps)
+
+Adds some leftover PDF 1.2 features:
+
+ - F, FFilter, and FDecodeParms keys in stream dictionaries.
+ (pdf_base.ps)
+
+ - Functions, including predefined spot functions. (pdf_draw.ps)
+
+ - Name trees. (pdf_base.ps)
+
+Adds some PDF 1.3 features. Note that these require a fair amount of
+PostScript LanguageLevel 3 support. Note also that none of these have been
+tested yet, because we don't have any source of test files.
+
+ - DeviceN and (stubbed) ICCBased color spaces. (pdf_draw.ps,
+ pdf_ops.ps)
+
+ - Additional extended graphics state parameters. (pdf_draw.ps)
+
+ - Number trees. (pdf_base.ps)
+
+ - Masked images. (pdf_draw.ps)
+
+Works around a bug in pdfTeX, which can generate Encoding vectors containing
+nulls. (pdf_font.ps)
+
+</pre><h3><a name="V5.24_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - A needed #include of memory_.h was missing. (sdeparam.c)
+ - The needed input buffer size for the RunLengthEncode filter was
+128, but should be 129. (srle.c)
+ - The ASCII85Encode and ASCIIHexEncode filters sometimes didn't
+insert \n characters often enough. (sfilter2.c, sstring.c)
+ - In one obscure boundary case, the CCITTFaxEncode filter with K =
+-1 could emit an extra, incorrect code. (scfe.c)
+ - The CCITTFaxDecode filter didn't default DamagedRowsBeforeError to
+0. (scfx.h)
+
+Removes all remaining uses of _ds and _ss. (sfilter.h, sbcp.c, scfe.c,
+seexec.c, sfilter1.c, sstring.c)
+
+Removes the use of do_debug. (scfd.c)
+
+Removes all uses of far_data. (scf.h, scfdgen.c, scfdtab.c, scfetab.c,
+sjpegerr.c)
+
+Removes the save_count member of streams, which is now no longer needed.
+(stream.h)
+
+To help in debugging, changes all uses of
+ #define ss ((stream_xxx_state *)st)
+to
+ stream_xxx_state * const ss = (stream_xxx_state *)st;
+(sbcp.c, sbhc.c, sbwbs.c, scfd.c, scfe.c, sdctc.c, sdctd.c, sdcte.c,
+seexec.c, sfilter1.c, sfilter2.c, sfxfd.c, sfxstdio.c, siscale.c, slzwc.c,
+slzwce.c, slzwd.c, smtf.c, spdiff.c, spngp.c, srld.c, srle.c, sstring.c,
+szlibc.c, szlibd.c, szlibe.c)
+
+Changes all groups of statistic-gathering variables to be structure
+variables named stats_*. (scfe.c)
+
+Rewrites the CCITTFaxEncode filter to cut down one particularly large and
+obnoxious macro, and to simplify the code by allocating an output buffer as
+well as an input buffer. (scf.h, scfdgen.c, scfe.c, scfetab.c)
+
+</pre><h3><a name="V5.24_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The masked image clipper sequenced through mask rows incorrectly.
+(gxclipm.c)
+ - gx_[c]path_init_local_shared were declared as returning void, but
+could actually return an error. (gxpath.h, gxcpath.c, gxpath.c)
+ - As always, gcc failed to report some static/non-static
+inconsistencies. However, to my dismay, I find that the ANSI C standard
+allows these, so I'll have to stop complaining about them. (gxclimag.c,
+gxclipm.c)
+ - As always, gcc failed to report some signed/unsigned char *
+mismatches. (gdevpdfi.c, gsparam.c)
+ - A loop counted on a non-existent zero value to mark the end of the
+IODevice table. (gsiodev.c)
+ - Some needed #includes of memory_.h were missing. (gdevddrw.c,
+gscolor2.c, gscrdp.c, gscspace.c, gxclipm.c, gximage3.c, gxshade4.c)
+ - Pattern device colors didn't have access to the original halftone
+phase, making it impossible to handle non-standard X/YStep correctly.
+(gsdcolor.h, gspcolor.c)
+ - Pattern filling disregarded the phase. THIS MAY UNDO A FIX MADE
+IN 5.02. WE NEED TO RE-TEST PATTERNS CAREFULLY. (gxp1fill.c)
+ - restore did some unnecessary gsaves. (gsstate.h, gsstate.c)
+ - The reference counting macros could read from an object after
+freeing it. (gsrefct.h)
+ - setgstate and currentgstate freed the view clipping path, which
+they shouldn't do. (gsstate.c)
+ - If no view clipping path was set, viewclippath returned the entire
+extent of the device, not the imageable area. (gxpath.h, gsdps.c, gspath.c)
+ - Assigning one stack-allocated path to another incorrectly wound up
+sharing their segments. (gxcpath.c, gxpath.c)
+ - dot_length_absolute was incorrectly declared as float rather than
+bool. (gxline.h)
+ - The test for varying-depth banded images was incorrect, causing
+varying-depth images to be treated as constant-depth. (This only affected
+ImageType 3 images.) (gxclimag.c)
+ - Failure to clamp Y values when processing banded images could
+cause crashes or invalid band list data. (gxclimag.c)
+ - The changes in gsparam.c introduced in 5.23 made the coercion of
+int arrays to float arrays fail. (gsparam.h, gsparam.c)
+ - Interpolated banded images could be transmitted incompletely,
+causing narrow stripes to be chopped out of their rendering. (gxclimag.c)
+ - FunctionType 0 functions with 32-bit samples didn't read their
+data correctly. (gsfunc0.c)
+ - Lattice-form Shadings with packed coordinates could crash or
+produce incorrect results. (gxshade.c)
+ - Lattice-form Shadings with packed coordinates always returned an
+error. (gxshade4.c)
+ - If the PaintProc of a Pattern or a Form, or a CharString
+procedure, or a similar callback copied the current graphics state with
+gstate or currentgstate, a dangling reference to the device could result.
+Fixing this required adding a reference count to devices: internally created
+devices initialize it to 0, externally visible devices initialize it to 1.
+THIS IS A DELICATE CHANGE AND WILL PROBABLY HAVE A BUG TAIL. (gsdevice.h,
+gxdevcli.h, gxdevice.h, gdevmem.c, gdevmrop.c, gdevnfwd.c, gschar.c,
+gsdevice.c, gsmemory.c, gspaint.c, gsstate.c, gxacpath.c, gxccman.c,
+gxclip.c, gxmclip.c, gxpcmap.c)
+ - The return_if_error macro referred to code rather than code_.
+(gserror.h)
+ - Non-monotonic halftones didn't allocate enough slots in the
+halftone cache. (gxht.c)
+ - setpagedevice with a 0-size page didn't fail. Fixing this
+required making the nullpage device provide explicit InputAttributes.
+(gdevnfwd.c)
+ - Halftone angles were often slightly off. (gshtscr.c)
+ - Banded fill_mask operations (used for characters) were sometimes
+broken. This bug was obviously introduced since 5.10; I'm surprised that it
+didn't have more serious effects. (gxclread.c)
+ - Partially transparent patterns didn't work with non-default
+RasterOp values. (gxp1fill.c)
+ - The default implementation of strip_copy_rop didn't handle color
+space conversion properly. (gdevmrop.c)
+ - Hint replacement could cause the initial moveto and final
+closepath of a Type 1 outline to differ, confusing the filling code.
+(gxhint3.c)
+ - Interpolated images were truncated at the bottom. (bug probably
+introduced in 5.23) (gxiscale.c)
+ - Using an unsigned type for the index passed to enum_ptrs
+procedures caused comparisons against signed values to be incorrect.
+(gsstruct.h)
+
+Rewrites the rectangle list and mask clipping algorithms to use callback
+procedures rather than macros. The rectangle list source code grew by 20%,
+but the compiled code shrank from 10K to less than 4K; the mask clip source
+code and compiled code both shrank. (gxclip.h, gxmclip.h, gxclip.c,
+gxclip2.c, gxclipm.c, gxcpath.c)
+
+Removes all remaining uses of _ds and _ss. (gsmemory.h, gsstruct.h, gzht.h,
+stdpre.h, gp_dosfb.c, gsbitops.c, gscie.c, gsht.c, gstype1.c, gstype2.c,
+gxclpath.c, gxclread.c, gxcmap.c, gxfill.c, gxi12bit.c, gxop1.h, gxpflat.c,
+gxstroke.c, gxtype1.c)
+
+Changes some GC procedures from explicit code to standard macros.
+(gsstruct.h, gscscie.c, gxcht.c)
+
+For easier debugging, changes gs_debug_c to a procedure; removes
+gs_if_debug_c and do_debug. (gdebug.h, gsht1.c, gsmisc.c, gspaint.c,
+gxcht.c, gxht.c, gxpcmap.c)
+
+Changes the num_components member of the color space structure to a
+procedure, which is needed because DeviceN color spaces have a variable
+number of components; also makes Pattern spaces return -1 - the correct
+num_components instead of -1. This is a NON-BACKWARD-COMPATIBLE CHANGE.
+Also adds a base_space procedure. (gxcspace.h, gscdevn.c, gscolor1.c,
+gscolor2.c, gscpixel.c, gscscie.c, gscsepr.c, gscspace.c, gspcolor.c,
+gxiinit.c, gxiscale.c)
+
+Changes all groups of statistic-gathering variables to be structure
+variables named stats_*. (gxclip.c, gxclist.c, gxclpath.c, gxfill.c,
+gxifast.c)
+
+Starts to pull apart gs_makebitmap/pixmappattern to remove the dependency on
+masked images. (gspcolor.c)
+
+Splits the C heap allocator from generic allocator support. (gsmemory.c,
+gsmalloc.c)
+
+Removes all uses of far_data other than references to device (but not
+device2) prototypes. (gdevmem.h, gdevmrop.h, gxdevcli.h, gconf.c,
+gdevabuf.c, gdevht.c, gdevm*.c, gdevmpla.c, gdevmrop.c, gdevnfwd.c,
+gsbittab.c, gsflip.c, gsroptab.c, gxcht.c)
+
+Adds a streams member to gs_ref_memory_t. The library doesn't use this, but
+it greatly simplifies the interpreter's bookkeeping. (gsalloc.h, gxalloc.h,
+gsalloc.c)
+
+Adds some more opaque types to the graphics state structure, rather than
+using naked struct types. (gsccolor.h, gzstate.h)
+
+Introduces the notion of the "effective clip path" in a graphics state.
+Painting operators should now call gx_effective_clip_path rather than using
+the clip_path member directly. (gxpath.h, gschar.c, gsdps1.c, gsimage.c,
+gspaint.c, gspath.c, gxccache.c, gxpaint.c)
+
+Implements view clipping. (gzstate.h, gspath.c, gsstate.c)
+
+Starts to pare down the fit_* macros in gxdevice.h, since some people feel
+strongly they are hard to follow, and also adds BEGIN/END wrapping.
+(gxdevice.h, gdevabuf.c, gdevmem.c, gxclpath.c)
+
+Refactors the structure definition macros in anticipation of moving to a
+more table-driven approach. Replaces ENUM_CALL, ENUM_RETURN_CALL, and
+RELOC_CALL with ENUM_USING and RELOC_USING. (gsstruct.h, gdevmem.c,
+gshtscr.c, gxcpath.c, gxiinit.c)
+
+Sketches a table-driven rather than procedural representation for GC
+descriptors. We believe this will improve readability, reduce code size,
+and perhaps reduce cache thrashing during garbage collection. This requires
+a NON-BACKWARD-COMPATIBLE CHANGE to the enum_ptrs, reloc_ptrs, and
+clear_marks procedures (to add the structure descriptor as a parameter).
+This should not affect any ordinary clients, because they should already
+define these procedures using the macros in gsstruct.h, which *are*
+backward-compatible; however, they do affect two internal clients that use
+their own type tags with unions (color spaces and device colors).
+(gsstrtab.h, gsstruct.h, gsalloc.c, gsstrtab.c)
+
+Updates color spaces for the change in enum_ptrs and reloc_ptrs.
+(gxcspace.h, gscdevn.c, gscolor1.c, gscolor2.c, gscpixel.c, gscscie.c,
+gscsepr.c, gscspace.c, gspcolor.c)
+
+Updates device colors for the change in enum_ptrs and reloc_ptrs.
+(gsdcolor.h, gxdcolor.h, gxpcolor.h, gspcolor.c, gxcht.c, gxcmap.c,
+gxdcolor.c, gxht.c, gxp1fill.c)
+
+Implements a hit detection device at the library level. (gserrors.h,
+gdevhit.c)
+
+Changes some configuration parameters from #defines to statics. (gschar.c)
+
+Changes "simple" structures so they no longer have 0 for the enum_ptrs or
+reloc_ptrs procedure. This is a NON-BACKWARD-COMPATIBLE CHANGE for
+structure-definers that don't use the macros in gsstruct.h (of which there
+shouldn't be any). (gsstruct.h, gsalloc.c)
+
+Adds the structure type name to the debugging printout for freeing objects.
+(gsalloc.c)
+
+To help in debugging, changes all uses of
+ #define ss ((stream_xxx_state *)st)
+to
+ stream_xxx_state * const ss = (stream_xxx_state *)st;
+(gxclread.c)
+
+Removes all uses of 'near' from the library: if short and long calls have
+different formats, we rely on the compiler to generate the most efficient
+one. (gscie.c, gscoord.c, gsimpath.c, gsstate.c, gstype2.c, gxclpath.c,
+gxclread.c, gxfill.c, gxhint1.c, gxhint2.c, gxhint3.c, gxstroke.c)
+
+Adds 'inline' to stdpre.h, defined as the empty string on compilers other
+than the ones we know accept it. (stdpre.h)
+
+Adds printout of the subrectangle to ImageType 1 tracing. (gxiinit.c)
+
+Replaces a few uses of gs_memory_default with dev-&gt;memory. (gdevdbit.c,
+gxclread.c)
+
+Improves support for halftone objects not associated with graphics states.
+This involves a minor change to the definitions of gs_spot_halftone and
+gs_threshold_halftone, to define the transfer function as a closure. This
+is slightly NON-BACKWARD-COMPATIBLE in that it requires clients to set
+transfer_closure.proc to 0 if they also set transfer to 0. NOTE: the API
+defined in gshtx.h is subject to future change. (gscsepnm.h, gshtx.h,
+gxdht.h, gxfmap.h, gxht.h, gxtmap.h, gscolor.c, gsht.c, gsht1.c, gshtx.c)
+
+Changes the Bezier approximation of arcs to cut arcs at absolute multiples
+of 90 degrees rather than at intervals of 90 degrees (e.g., an arc from 45
+to 105 would now be cut at 90 rather than being treated as a single
+60-degree curve) in order to produce more uniform output and also to ensure
+that the bounding box for arcs is more accurate (to pacify the Genoa FTS).
+(gxfarith.h, gsmisc.c, gspath1.c)
+
+Replaces all remaining uses of do { ... } while (0) with BEGIN ... END.
+(gsbitops.h, gsdsrc.h, gserror.h, gsmdebug.h, gsrect.h, gxcldev.h, gxfunc.h,
+gxop1.h, gxtype1.h, gsalphac.c, gsshade.c, gstype2.c, gstype42.c,
+gxclread.c, gxcpath.c, gximage4.c, gxpath.c)
+
+Adds a user-defined halftone type, to support non-monotonic halftones. We
+could make any of the following structures fully object-oriented:
+ - Halftones (client level)
+ - Halftone orders (device level, but not rendered)
+ - Device halftones (device level, fully rendered)
+The right place to do this for non-monotonic halftones, which are specified
+directly by bit masks, is at the device halftone level. However, there are
+too many places that know too much about the implementation of device
+halftones and halftone orders right now. WE NEED TO REVISIT THIS AFTER THE
+5.1x CODE BRANCH IS TERMINATED. SHOULD ALSO CONVERT UNION TO TYPED UNION
+FOR GC -- CODE IS DUPLICATED IN gsht.c VS gshtx.c. (gxdht.h, gxht.h,
+gxhttype.h, gshtx.h, gsht.c, gsht1.c, gshtx.c)
+
+Moves the procedures in Type 1 font data into a structure. This is a
+NON-BACKWARD-COMPATIBLE CHANGE, but an internal one. (gxfont1.h, gstype1.c,
+gstype2.c, gxtype1.c)
+
+Extends Type 1 / 2 / 4 fonts to require that they be able to enumerate the
+set of glyphs that they define, to allow writing them out. We may propagate
+this to all base fonts in the future. (gxfont1.h)
+
+Provides some utilities for devices that want to define their own
+InputAttributes and OutputAttributes. (gdevprn.h, gxdevice.h, gdevprn.c,
+gsdparam.c)
+
+Removes all of the text-display procedures that took null-terminated C
+strings as operands. This is NON-BACKWARD-COMPATIBLE. However, since the
+memory manager required that all such operands be allocated using
+gs_alloc_string, the procedures were never usable with arbitrary C strings
+anyway. (gschar.h, gschar.c)
+
+Renames the gx_device procedure record from std_procs to procs, in
+anticipation of more unified support for "objects". This is a
+NON-BACKWARD-COMPATIBLE CHANGE for a surprisingly large number of clients
+that should have been using dev_proc and set_dev_proc. (gdevbbox.h,
+gxdevcli.h, gxdevice.h, gdevdflt.c, gdevdgbr.c, gdevmem.c, gdevprn.c,
+gsalphac.c, gsdevice.c, gsropc.c, gxccache.c, gxifast.c)
+
+Disallows setting of the RasterOp-related graphics state parameters when
+a cache device is active. (gsrop.c)
+
+Changes the tracing printout of path segments to provide enough accuracy to
+cover all the fraction bits of a 'fixed'. (gxpath.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.23"></a>Version 5.23 (limited) (5/14/98)</h2>
+
+<p>
+This fileset adds a number of PostScript LanguageLevel 3 features: library
+support for ImageType 3 and 4 (masked) images, PostScript-level support for
+ImageType 4, and the shfill operator for smooth shading. It also adds RCS
+Id lines to all the files we maintain. It also changes the Unix makefiles
+so that they create debugging or profiling binaries in separate directories.
+
+<p>
+This fileset includes an unusually large number of non-backward-compatible
+API changes. Most of them don't affect ordinary library clients, but a few
+do. These changes, and a few more to come, result from the next (large)
+increment in our ongoing project to make the code completely re-entrant (no
+non-idempotent writable globals in our own code). This necessarily involves
+putting some things that used to be global into structures, some of which
+must be added to some interfaces.
+
+<p>
+NOTE: because of a combination of hardware problems, time pressure, and
+belated discovery of sloppiness by the original developers of the PC
+makefiles, none of the PC makefiles in this fileset work. The Borland
+makefiles probably come the closest.
+
+<h3><a name="V5.23_Documentation"></a>Documentation</h3><pre>
+
+Adds documentation for:
+ - The changes in begin_image and related facilities. (drivers.txt)
+ - The addition of -Z/. (use.txt)
+ - The new ps2ps utility. (ps2ps.1)
+ - The new get_hardware_params procedure. (drivers.txt)
+ - The new -B&lt;size&gt; / -B- switch. (use.txt).
+
+Improves the documentation for the sample_ macros. (gsbitops.h)
+
+Adds some documentation on how the debugging/tracing flags work. (gdebug.h)
+
+Improves the documentation of DDAs. (gxdda.h)
+
+Documents a subtle change in the meaning of a flag in the PDF
+FontDescriptor. (pdf_font.ps)
+
+Changes the location of the authoritative site for zlib sources. (zlib.mak)
+
+Corrects a typo. (gsht1.h)
+
+Removes pdf_2ps.ps from the fileset. (psfiles.txt)
+
+Adds standard file name comments to all .c and .h files that didn't already
+have them. (dodebug.h, gdev3b1.c, gdev8510.c, gdevadmp.c, gdevhl7x.c,
+gdevimgn.c, gdevo182.c, gdevpdfx.h, gdevpe.c gdevsco.c, gdevsj48.c,
+gdevvglb.c, gsalpha.c, gscolor1.c, gscsepr.h, gsdsc.c, scfetab.c string_.h,
+zfunc3.c, zmedia2.c)
+
+Unifies the nroff styles of the various man pages a bit. (*.1)
+
+Adds a reference to the CTAN mirror sites. (new-user.txt)
+
+Notes that the result of rect_intersect may be anomalous. (gsrect.h)
+
+Improves the documentation for the Distiller parameter handling code.
+(gdevpdfp.c, gdevpsdp.c)
+
+Corrects an ambiguity in the definition of the int_keys argument of
+param_begin_xmit_dict. (gsparam.h)
+
+Adds a new file that will evolve into a reasonable guide to the source code.
+(README, source.txt)
+
+Adds the convention for 'status' and 'code' to the C style guide.
+(c-style.txt)
+
+Improves the documentation for the '-' pseudo-switch. (use.txt)
+
+Updates the problem reporting form to include the URL for known post-release
+problems. (bug-form.txt)
+
+Documents the availability of sources and binaries for Plan 9.
+(new-user.txt)
+
+</pre><h3><a name="V5.23_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The 'tags' target in the Unix makefiles had an incorrect directory
+name. (bug probably introduced since 5.20) (unix-end.mak)
+ - The ld_tr and CCFLAGS macros were used in the makefiles before
+they were defined, causing problems with `make' implementations that
+substitute macros into definitions at definition time rather than at use
+time. (*.mak)
+ - Recent Digital Unix versions (4.0 and later) require -std1 when
+compiling. (make.txt)
+ - The Unix library-only makefile had gotten out of date.
+(ugcclib.mak)
+ - pf2afm[.bat] were omitted from the fileset. (master/package.tcl)
+ - The Borland makefile didn't work, because the Borland compiler
+requires specifying the output file name (-o) before the input file name
+(-c)! This required changing the order of every compilation command in
+every platform-independent makefile. The win*.mak files still need work.
+(*.mak)
+ - None of the non-Unix makefiles specified directory names for the
+auxiliary programs. (dvx-tail.mak, os2.mak, wctail.mak, winlib.mak)
+ - The Windows makefiles lacked build rules for gp_ntfs and gp_win32.
+(msvclib.mak, winlib.mak)
+
+Adds a new debugging switch -Z/ that prints the file name and line number on
+all trace messages. (gdebug.h, std.h)
+
+Changes the Unix 'pg' and 'debug' build targets so that they create the
+binaries in a 'pgobj' or 'debugobj' subdirectory of the standard build
+directory. This allows keeping all 3 configurations active. (unix-end.mak)
+
+Adds GEN directories for jpeg, libpng, and zlib. (devs.mak, gs.mak,
+jpeg.mak, lib.mak, libpng.mak, zlib.mak)
+
+Adds a gendev.c that will eventually replace genconf.c. (gendev.c, *.mak)
+
+Adds -Wcast-align to the gcc compilation switches. (unix-gcc.mak)
+
+Adds support for libpng 1.0.1. (libpng.mak)
+
+Notes the use of -R on Solaris and other SVR4 systems. (unix*.mak)
+
+Removes pdf_2ps.ps from the fileset. (int.mak, unixinst.mak,
+pdf_2ps.ps[deleted])
+
+Ensures that every file that is copyright, maintained, and distributed by
+Aladdin Enterprises has a RCS Id line. In .c and .h files, these lines
+currently are only comments, but they could be converted easily to static
+strings later if we want to. We had to touch almost every file in the
+fileset to do this, but we did *not* change the write dates. (*)
+
+Makes the build procedure auto-detect whether the installed version of gcc
+has the 'const' code generation bug. (gs.mak, lib.mak, unix-gcc.mak)
+
+Removes 'makefile' as a precondition for ccf32.tr. (I can't quite figure
+out why it was there in the first place.) (msvccom.mak)
+
+Replaces the -F&lt;file&gt; switch with a -B&lt;buffer size&gt; switch that forces all
+files to use the run_string interfaces. -B- turns it off. (iminst.h,
+imainarg.c)
+
+Adds a new resource to genconf.c, -replace &lt;module&gt;. This causes &lt;module&gt;
+*not* to be included if the module with the -replace resource *is* included.
+If two modules -replace each other, either directly or indirectly through
+-includes, the result is undefined. (genconf.c)
+
+Uses -replace to implement a default roplib package. (lib.mak)
+
+</pre><h3><a name="V5.23_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - unprot.ps stopped working because of the stricter prohibition
+against storing local-VM objects into systemdict. (unprot.ps)
+
+Adds a new ps2ps utility, like pdf2ps, that "distills" PostScript.
+(ps2ps, ps2ps.bat)
+
+Modifies the ps2epsi utility so it can be run outside the ps2epsi script for
+testing. (ps2epsi.ps)
+
+Changes the pdf2ps utility to use the pswrite device. This gets rid of all
+conversion problems, at the expense of larger and stupider output files.
+(pdf2ps, pdf2ps.bat)
+
+</pre><h3><a name="V5.23_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - Two procedures were declared 'private' inconsistently (thank you
+again, gcc). (gdevps.c)
+ - The author of the uniprint driver sent a fix for an
+allocation-related bug and an off-by-one bug. (gdevupd.c)
+ - The PDF writer incorrectly converted open stroked rectangles (only
+3 sides drawn) to closed (4 sides drawn). (gxpath.h, gzpath.h, gdevpdfd.c,
+gxpath2.c)
+ - When banding, filling a character within the PaintProc of a
+Pattern could produce memory access errors. (The problem was in
+gx_forward_fill_mask, which might affect filling characters in other
+situations as well.) (gdevnfwd.c)
+ - The [e]pswrite driver produced incorrect line widths for stroked
+graphics. (gdevps.c)
+ - The [e]pswrite driver didn't invoke colorimage correctly, so
+didn't handle Patterns right. (gdevps.c)
+ - Vector devices didn't set the color before writing trapezoids,
+possibly causing incorrectly colored output. (gdevvec.c)
+ - Vector devices could give errors on Pattern fills. (gdevvec.c)
+ - The bbox device retained a pointer to the clipping path, which,
+since the path was embedded in the gs_state_contents, confused the garbage
+collector, causing memory access errors. We fixed this by de-embedding the
+path object: see below. (gsstate.c)
+ - On some GNU/Linux systems, the X driver could get a memory access
+error when displaying patterns. We fixed this by adding calls on XInitImage
+in the necessary places when running X11R6. (gdevx.c)
+ - PDF output didn't check names for unusual characters, and could
+produce invalid output if the input included names with those characters.
+(gdevpdfx.h, gdevpdf.c, gdevpdfm.c, gdevpdfo.c)
+ - In the PDF writer, DEST pdfmarks with /Dest but no /Page or /View
+didn't generate named destinations. (gdevpdfm.c)
+ - Printer devices didn't allow . in %-formats in the output file
+name. (gdevprn.c)
+ - The x11cmyk driver didn't read bits back from the screen
+correctly. (gdevxalt.c)
+ - The pcxmono and pcxgray drivers used colored rather than
+gray-scale palettes. (gdevpcx.c)
+ - The PCX drivers could emit repetition counts greater than 15,
+confusing some readers. (gdevpcx.c)
+
+Removes some vestiges of the obsolete draw_line driver procedure. We also
+rename the draw_line member of the driver procedure structure as
+obsolete_draw_line, so that any uses of it will cause compilation errors,
+but we don't remove it from the structure, so that existing driver procedure
+vectors will continue to compile (although the draw_line procedure will
+never be called). (gxdevcli.h, gdevbbox.c, gdevddrw.c, gdevdflt.c)
+
+To repair a design error, and at the same time add flexibility needed for
+ImageType 3:
+
+ - Removes the image_data and end_image driver procedures,
+associating them with the gx_image_enum(_common)_t structure instead.
+Clients should call gx_device_image_data and gx_device_end_image instead: we
+set the image_data and end_image procedures in the device structures to
+these procedures when filling in defaulted procedures. This is a
+NON-BACKWARD-COMPATIBLE CHANGE for drivers that implement begin_image, since
+they now have to fill the procedures into the enumerator structure.
+(gsiparm*.h, gxdevcli.h, gxdevice.h, gxiparam.h, gdevbbox.c, gdevddrw.c,
+gdevdflt.c, gdevnfwd.c, gsimage.c, gxclist.c, gxidata.c, gxifast.c,
+gxiinit.c, gximage3.c, gximage4.c)
+
+ - Replaces the image_data driver procedure with a plane_data
+procedure (now associated with the image enumerator, not the device) that
+allows specifying the X offset and raster independently for each plane, and
+(depending on the image type) may allow omitting some planes. We provide a
+gx_device_image_plane_data procedure parallel to _image_data and _end_image
+(see above). (gsiparm*.h, gxdevcli.h, gxiparam.h, gdevbbox.c, gdevddrw.c,
+gxidata.c, gxiinit.c, gximage3.c, gximage4.c)
+
+Updates clients for image processing changes. (gdevvec.h, gdevpdf.c,
+gdevpdfi.c, gdevps.c, gdevpx.c, gdevvec.c)
+
+Enhances [e]pswrite to detect other kinds of opportunities for producing
+smaller output. This involves a change in the moveto procedure in the
+'vector' interface. (gdevps.c)
+
+Changes the bbox device so that it automatically detects whether it is being
+used as a component in a device pipeline or as a free-standing device,
+rather than having to select this in the makefile. (lib.mak, gdevbbox.h,
+gdevbbox.c)
+
+Moves the halftoning driver a bit closer to real usability. (gdevht.h,
+gdevht.c)
+
+Adds some tracing to the color mapping code in the X driver. (gdevx.c)
+
+Implements setting the Dict and ACSDict parameters for pswrite and pdfwrite.
+Dict is effective with the CCITTFaxEncode filter for black-and-white images;
+otherwise, these parameters still don't do anything. (gdevpdfi.c,
+gdevpsdp.c) ****** READING HUFFMAN TABLES IS NYI, SEE sdcparam.c; SETTING
+DOESN'T WORK BECAUSE DCT_set_defaults DOESN'T DO WHAT IT SHOULD ******
+
+Updates the PS/PDF writers to reflect the fact that the ASCIIHexEncode
+filter now has a state. (gdevpsdf.c)
+
+Modifies the X driver so that it can draw multiple platform characters at a
+time rather than one character per call. (gdevx.h, gdevx.c, gdevxxf.c)
+
+Takes advantage of the filter stream procedures now available in stream.c.
+(gdevjpeg.c, gdevpdf.c, gdevpsdf.c)
+
+Adds a get_hardware_params procedure, similar to get_params except that it
+reads parameters whose values depend on hardware state that may change
+without program intervention (e.g., panel switches). The default is that
+there are no hardware parameters. (gdevmem.h, gdevprn.h, gsdevice.h,
+gxdevcli.h, gxdevice.h, gxacpath.c, gxclip2.c, gxclipm.c, gxclist.c,
+gxcpath.c, gdevbbox.c, gdevdflt.c, gdevht.c, gdevmrop.c, gdevnfwd.c,
+gdevprn.c, gsdparam.c)
+
+Updates the PS/PDF writer for the change in the parameter list API.
+(gdevpsdf.c)
+
+Makes a few more writable statics const. (gdevos2p.c, gdevpipe.c,
+gdevpsim.c, gdevx.c)
+
+Removes the rrgb sample device, since it now no longer serves any purpose.
+(gdevrrgb.c[deleted])
+
+Converts some additional devices to -dev2, to make them const. (devs.mak,
+gdevbit.c, gdevpbm.c, gdevpcx.c, gdevpsim.c, gdevpng.c, gdevtfax.c,
+gdevtfnx.c, gdevx.c, gdevxalt.c)
+
+Updates a client accessing the preallocated color spaces. (gdevpsdi.c)
+
+Renames the debugging-related statics in the X driver as X_SOMETHING.
+(gdevx.c)
+
+</pre><h3><a name="V5.23_Platforms"></a>Platforms</h3><pre>
+
+Makes a few minor changes to support Plan 9. (make.txt, devs.mak, stat_.h,
+stdio_.h, time_.h, gdevpbm.c)
+
+</pre><h3><a name="V5.23_Fonts"></a>Fonts</h3><pre>
+
+Documents the availability of a free Chinese font. (fonts.txt,
+new-user.txt)
+
+Works around a bug in the Adobe PostScript driver. We though it just output
+the FontBBox for Type 42 fonts in the 2048- or 4096-unit character space
+rather than a 1-unit space, but in fact it outputs garbage. (zfont42.c,
+gstype42.c)
+
+Augments the handling of Type 42 fonts to recognize the gdir /
+GlyphDirectory method of outline definition in addition to the loca / glyf
+method, per Adobe versions 2015 and later (undocumented!). (ifont.h,
+zfont42.c)
+
+</pre><h3><a name="V5.23_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Memory management for argument strings was wrong. (gsargs.h,
+gsargs.c)
+ - 1 .setlanguagelevel was broken, because it didn't allow for the
+possibility that values could get deleted from systemdict that existed in
+level2dict. (bug introduced in 5.x, x &lt;= 10) (zmisc2.c)
+ - -dFAKEFONTS was broken. (gs_fonts.ps, gs_init.ps)
+ - copyscanlines was broken. (bug introduced in 5.20) (gs_init.ps)
+ - The matrix returned by sizeimage was incorrect. (zdpnext.c)
+ - The implementation of .buildpattern for PatternType 2 was wrong.
+(gs_ll3.ps)
+ - Ghostscript couldn't load TrueType fonts where the amount of data
+either before or after the glyf section exceeds 64K. (gs_ttf.ps) ****** WE
+BACKED OUT THIS CHANGE, BECAUSE WE HAD TO BACK OUT THE NEXT ONE. ******
+ - Ghostscript couldn't load TrueType fonts where the total data is
+more than 64K and the offset or length of the glyfs is odd. (gs_ttf.ps)
+****** WE BACKED OUT THIS CHANGE: IT BROKE THE PDF INTERPRETER, BECAUSE IT
+IMPOSES A NEW REQUIREMENT THAT TTF FILES BE POSITIONABLE. ******
+ - Some compilers complained about arithmetic on enums. (interp.c)
+ - The CIE color space and CRD GC structure definitions were in the
+interpreter rather than the library. (zcie.c, zcrd.c)
+ - NullFont was still present in FontDirectory when currentglobal was
+false. (gs_init.ps)
+ - execform failed with Form resources, because it tried to insert
+the Implementation in a read-only dictionary. (gs_fform.ps, gs_lev2.ps)
+
+Finishes implementing ImageType 4 images, and moves closer to implementing
+ImageType 3. (iimage.h, zdps.c, zimage.c, zimage2.c, zimage3.c)
+
+Updates tracing output to use the new dlprintf macros. (idict.c, igc.c,
+igcref.c, igcstr.c, iname.c, interp.c, isave.c, iscan.c, zcie.c, zcontext.c)
+
+Implements multiproc=true for readimage. (gs_dpnxt.ps)
+
+Does a bit more work on implementing shading with PatternType 2.
+(gs_ll3.ps, zfunc.c, zshade.c)
+
+Adds a .bitadd operator for adding integers modulo the word size.
+(zarith.c)
+
+Updates filter operators to use the new stream parameter facility.
+(iparam.h, iparam.c, zfdecode.c, zfdctc.c[deleted], zfdctd.c, zfdcte.c)
+
+Updates the implementation of parameter lists for the change from _dict to
+_collection. (iparam.c, iparam.h)
+
+Takes advantage of the filter stream procedures now available in stream.c.
+(zfilter.c)
+
+Adds get_hardware_params to one device procedure vector. (zupath.c)
+
+Adds .gethardwareparams to parallel .getdeviceparams. (zdevice.c)
+
+Updates the interpreter's parameter list machinery to match the change in
+gsparam.h. (iparam.h, iparam.c)
+
+Makes more writable statics const. (gs_init.ps, btoken.h, dstack.h, iref.h,
+opextern.h, icontext.c, idict.c, igc.c, igcref.c, iinit.c, imainarg.c,
+interp.c, iscanbin.c, iutil.c, zbseq.c, zcie.c, zcontrol.c, zdevcal.c,
+zdevice2.c, zdps.c, zdps1.c, zfont2.c, zgeneric.c, zgstate.c, ziodev.c,
+ziodev2.c, ztype.c)
+
+Removes an inappropriate reference to PROGRAM_NAME. (imainarg.c)
+
+Removes set/currentrenderalgorithm, since they are useless for the purpose
+for which they were intended. (zrop.c)
+
+Uncomments code for CIEBasedDEF[G] color spaces, even though these aren't
+fully implemented yet. (zcie.c)
+
+Reimplements StartJobPassword and SystemParamsPassword as no-access strings
+in systemdict. (gs_lev2.ps, iutil2.h, iutil2.c, ziodev2.c, zusparam.c)
+
+Splits off the context state record from icontext.h, so that places that
+only need access to state variables don't need to import the
+procedures. (icontext.h, icstate.h)
+
+Updates a client for the change in gs_malloc_limit. (imainarg.c)
+
+Updates clients for the change in the accessors for predefined color spaces.
+(zcolor1.c, zimage.c, zimage2.c)
+
+Renames the (few) debugging-related statics as I_SOMETHING. (igc.c)
+
+Splits off idstack.h (API for dictionary stacks) from dstack.h (API for the
+interpreter's dictionary stack), and idstack.c (dictionary stack
+implementation) from idict.c (dictionary implementation). We should have
+done this a long time ago! (dstack.h, idictdef.h, idstack.h, idict.c,
+idstack.c, iinit.c, ireclaim.c)
+
+Folds the cached currentfile pointer into the exec-stack structure.
+(estack.h, interp.c)
+
+Changes clients of gs_register_*_root to eliminate statically allocated
+roots. (iinit.c, iname.c, interp.c, zbseq.c, zcontext.c, zfile.c, zfont.c,
+zfont2.c, zgstate.c, ziodev.c)
+
+Adds a ref_free_stack procedure, and reformats the implementation of stacks.
+(istack.h, interp.c, istack.c)
+
+</pre><h3><a name="V5.23_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - Pattern colors sometimes caused errors. (gs_pdf.ps)
+ - A file ending with %%EOF without an EOL caused an error.
+(pdf_main.ps)
+ - Fl wasn't recognized as an abbreviation for FlateDecode in in-line
+images. (pdf_draw.ps)
+
+Removes all code related to converting PDF to PS: it never worked reliably,
+and we now support this function with the pswrite device instead.
+(gs_pdf.ps =&gt; pdf_ops.ps, pdf*.ps)
+
+</pre><h3><a name="V5.23_Streams"></a>Streams</h3><pre>
+
+Updates tracing output to use the new dlprintf macros. (shc.h, scfd.c,
+scfe.c, shcgen.c)
+
+Provides the ability to read and set stream initial parameters to/from a
+parameter list. This is currently needed only by the PDF/PS writers and the
+filter operator, so it is implemented in modules separate from the stream
+implementation per se, but it might be useful for other clients too.
+(scommon.h, scfparam.c, sdcparam.c, sdct*.c, sdeparam.c, sddparam.c,
+gdevpsfp.c[deleted])
+
+Changes the ASCII85Encode filter so it never produces two %% at the
+beginning of a line, which could mislead document managers or spoolers.
+(sfilter2.c)
+
+Changes the ASCIIHexEncode filter so it always produces lines of exactly 64
+characters, except for the last one. THIS IS A NON-BACKWARD-COMPATIBLE
+CHANGE, because this filter now needs a state structure, which it didn't
+before. (sstring.h, sstring.c)
+
+Moves filter_{read,write}_procs to stream.c, changing the names to
+s_filter_{read,write}_procs. (stream.h, stream.c)
+
+Makes creation of JPEG filters set default values for parameters that are
+outside the IJG library (Picky and Relax). (sdct.h, sjpegd.c, sjpege.c)
+
+</pre><h3><a name="V5.23_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - An error in dda_step_add could theoretically produce anomalies in
+images (although we don't think we've ever seen any). (gxdda.h)
+ - A boundary error in dda_state_next/previous/advance could
+theoretically produce anomalies in images by allowing R = 0 (although we
+don't think we've ever seen any). (gxdda.h)
+ - A rounding error in computing the size of portrait images could
+produce a spurious 1-pixel-wide line at the edge of the image. (gxifast.c)
+ - When banding, images with singular or nearly singular CTM or
+ImageMatrix could confuse things badly enough to cause memory access errors.
+(gxclimag.c)
+ - Patterns were broken. (bug introduced in 5.21) (gxclip2.c)
+ - Because some image processing code retained a pointer to the
+clipping path, which was embedded inside the gs_state_contents object,
+garbage collection could cause crashes. (The only case where we know this
+happened was the bounding box device, since we think all other image
+enumerators preconstruct a clipping device, which does not retain a pointer
+to the clipping path, rather than constructing one from the path on the
+fly.) We fixed this by replacing gs_state_contents with individual objects:
+see below.
+ - The *_.h files didn't have double-inclusion protection. (*_.h)
+ - ImageType 2 images were broken by the change in begin_typed_image.
+(gximage2.c)
+ - Color-setting operators that "substitute the nearest legal value"
+didn't substitute it in storage, only when using it. E.g., after
+gs_setgray(pgs, 2.0), gs_currentgray(pgs) returned 2.0 rather than 1.0.
+This bug has been there since release 1.0! (gxcspace.h, gscie.c, gscolor.c,
+gscolor1.c, gscolor2.c, gscdevn.c, gscsepr.c, gscpixel.c, gspcolor.c)
+ - The RasterOp implementation for 2-bit, 4-bit, and non-gray 8-bit
+devices didn't work. (gdevmrop.c)
+ - The test of whether to use copy_mono, fill_mask, or general
+imaging for rendering characters sometimes used copy_mono when not
+appropriate. (gxccache.c)
+ - The default implementation of fill_mask produced solid rectangles,
+rather than properly masked output, if the logical operation didn't use its
+source operand. (gdevdbit.c)
+ - Some more files needed double inclusion protection. (gscie.h)
+ - Checking for interrupts before a return always returned 0 rather
+than the correct return code if there was no interrupt. (gsmisc.c)
+ - Characters within Pattern PaintProcs sometimes didn't get drawn.
+(gxpcmap.c)
+ - The CIE color space and CRD GC structure definitions were in the
+interpreter rather than the library. (gscie.h, gscie.c)
+ - Numeric overflows when setting up the character cache caused
+errors rather than simply disabling caching for that character. (gschar.c)
+ - FORCE_STRIP_HALFTONES was accidentally left set to 1 (in 5.10!),
+slowing down all uses of monobit halftones. (gshtscr.c)
+
+Implements mask clipping, which is needed for ImageType 3 images.
+(gxclip2.h, gxclipm.h, gxmclip.h, gxclip2.c, gxclipm.c, gxmclip.c)
+
+Finishes implementing ImageType 3 and 4 images. (gsimage.h, gsiparam.h,
+gsimage.c, gsiparm3.h, gximage3.c, gximage4.c)
+
+Starts to update the banding code to handle ImageType 3 and 4 images.
+(gxclist.h, gxiparam.h, gxclimag.c, gxclist.c, gxiinit.c)
+
+Make eprintf_program_name, lprintf_file_{and_line,only}, and new
+dlprintf_file_{and_line,only} always be procedures, rather than sometimes
+macros and sometimes procedures. (std.h, gdebug.h, gsmisc.c)
+
+Adds new dlprintf, dlputc, and dlputs macros that are like
+dprintf/dputc/dputs but also print the source file name and line number at
+the beginning of the line if the -Z/ debugging switch is set. The if_debug*
+macros now use dlprintf rather than dprintf; many other places also needed
+changing. Note that if any place was overlooked, no great harm is done:
+printout produced there simply won't include the source file and line number
+even if -Z/ is set. (std.h, gdebug.h, gsmisc.c; gdevbbox.c, gdevdbit.c,
+gdevdgbr.c, gdevmrop.c, gdevrun.c, gdevsvga.c, gdevx.c, gp_unifs.c,
+gsalloc.c, gschar.c, gscoord.c, gsfont.c, gshsb.c, gsht.c, gshtscr.c,
+gsmemory.c, gspath.c, gstype1.c, gstype2.c, gxacpath.c, gxccache.c,
+gxclimag.c, gxclist.c, gxclpath.c, gxclread.c, gxcpath.c, gxfill.c,
+gxidata.c, gxpath.c, gxpcopy.c, gxpflat.c, gxstroke.c)
+
+Simplifies storage management for graphics states by replacing
+gs_state_contents with individual objects. This slows down gsave and
+grestore a bit, but eliminates a class of potential obscure bugs.
+(gxpath.h, gzstate.h, gsstate.c, gxcpath.c, gxpath.c)
+
+Adds some more information to the deubgging printout for paths. (gxpath.c)
+
+Modifies the library test program to test ImageType 3 and 4 images.
+(ugcclib.mak, gslib.c)
+
+Extends the @-file parser to be more shell-like:
+
+ - The sequence \ &lt;newline&gt; is ignored everywhere.
+
+ - If a # appears as the first character on a line outside quotes,
+ the entire line (including the terminating newline) is ignored.
+
+(gsargs.h, gsargs.c)
+
+Changes a stem hint tracing message so that it will print with the correct
+line number. (gxhint2.c)
+
+Moves the 'format' information for images to the image parameter structure.
+This entails a NON-BACKWARD-COMPATIBLE CHANGE in the begin_typed_image
+driver procedure (which was not guaranteed stable). (gsiparam.h,
+gxdevcli.h, gsimage.c, gxiinit.c)
+
+Adds an optional matrix argument to begin_typed_image, overriding the CTM in
+the imager state if present. This is needed to make masks and masked images
+line up precisely; this too is a NON-BACKWARD-COMPATIBLE CHANGE.
+(gxdevcli.h, gdevbbox.c, gdevddrw.c, gdevnfwd.c, gdevx.c, gxclimag.c,
+gxiinit.c, gximage2.c, gximage3.c, gximage4.c)
+
+Adds a procedure for testing monotonicity of Functions over a given range.
+(gsfunc.h, gsfunc0.c, gsfunc3.c)
+
+Implements smooth shading with shfill. All documented ShadingTypes (1-7)
+are implemented. (gscspace.h, gsdsrc.h, gspath.h, gsshade.h, gxshade.h,
+gxshade4.h, gscolor.c, gscolor3.c, gsdsrc.c, gsfunc0.c, gsfunc3.c,
+gspath1.c, gsshade.c, gxshade.c, gxshade1.c, gxshade4.c, gxshade6.c)
+
+Changes the TrueType rasterizer to remove the assumption that the entire
+loca table is stored contiguously. This may not have any practical effect,
+since currently Type 42 fonts never split the loca table across segments.
+(gstype42.c)
+
+Adds a new interface for creating CIE CRDs that provides the parameters as
+separate arguments. (gscrd.h, gscrd.c)
+
+Starts to add the ability for a device to provide one or more default CIE
+CRDs as (read-only) device parameters. (Not ready for use yet.) (gscie.h,
+gscrdp.h, gscie.c, gscrdp.c)
+
+Adds a multiple-bit-per-pixel analogue of gs_makebitmappattern,
+gs_makepixmappattern, for use by another Aladdin project. (lib.mak,
+gsbitmap.h, gsptype1.h, gxbitmap.h, gspcolor.c)
+
+Changes the API of param_begin_write_dict so that the client can request the
+creation of an array rather than a dictionary. This is a
+NON-BACKWARD-COMPATIBLE CHANGE for implementors (of which there are only
+2.5), but not for clients. (gsparam.h, gsparam.c)
+
+Adds dynamically typed data to the parameter list interface, and removes the
+statically typed procedures. This isn't important for any standard facility
+yet. This too is a NON-BACKWARD-COMPATIBLE CHANGE for implementors of
+parameter lists. (gsparam.h, gsparams.h, gsparam.c, gsparams.c)
+
+Adds a new platform-specific API for thread creation and synchronization,
+and a memory manager "wrapper" that monitor-locks each call. No code
+normally included in this fileset uses any of this machinery as yet. (gp.h,
+gpsync.h, gxsync.h, gsmemlok.h, gsmemlok.c, gxsync.c)
+
+Splits off (PatternType 1) Pattern filling into a separate file, since the
+file was getting too big; refactors the filling code to use procedures
+rather than macros. (gxp1fill.h, gspcolor.c, gxp1fill.c)
+
+Makes a few more writable statics const. (gscie.h, gscscie.c, gsdll.c,
+gsmemory.c, gsmisc.c, gstype1.c, gstype2.c, gxclpath.c)
+
+Adds a compile-time option, SYSTEM_CONSTANTS_ARE_WRITABLE, to choose whether
+the system configuration values (buildtime, copyright, product, revision,
+revisiondate, serialnumber) are const or not. By default they are now
+const: THIS IS A NON-BACKWARD-COMPATIBLE CHANGE (affecting only one user).
+(lib.mak, openvms.mak, os2.mak, unix-end.mak, wctail.mak, winlib.mak,
+gscdefs.h, gscdef.c)
+
+Removes the dependence of std.h on PROGRAM_NAME. (std.h, gsdll.c, gsmisc.c,
+gscdef.c)
+
+Adds a new member of the color space type structure, the size of the
+smallest color space structure that will hold a color space of the given
+type. Also removes the obsolete _ds modifier. (gscspace.h, gxcspace.h,
+gscdevn.c, gscie.c, gscolor.c, gscolor1.c, gscolor2.c, gscpixel.c,
+gscsepr.c, gspcolor.c, gxiinit.c)
+
+Removes set/currentrenderalgorithm, since they are useless for the purpose
+for which they were intended. (gsrop.h, gsropt.h, gdevmrop.c, gsrop.c)
+
+Splits off gscspace.c from gscolor.c, and gscscie.c from gscie.c. (gscie.c,
+gscolor.c, gscscie.c, gscspace.c)
+
+Adds constructor and accessor procedures for color spaces. (gscie.h,
+gscolor2.h, gscsepr.h, gscspace.h, gsptype1.h, gxcolor2.h, gxcspace.h,
+gscolor.c, gscolor2.c, gscscie.c, gscsepr.c, gscspace.c, gslib.c,
+gspcolor.c)
+
+Changes the CIEBased color space structures slightly to allow implementation
+of the CIEBasedDEF[G] color spaces. (gscie.h, gscie.c)
+
+Changes gs_malloc_limit from a static to a member of the allocator
+structure. This is a NON-BACKWARD-COMPATIBLE CHANGE for clients that
+declared this variable as an extern. (gsmalloc.h, gsmemory.c)
+
+In order to eliminate some statics, changes the static color space accessors
+(gs_color_space_Device*) so they require a const gx_imager_state as
+parameter, and changes their names as well to avoid confusion. This is a
+NON-BACKWARD-COMPATIBLE CHANGE not only in these accessors, but also in
+gs_image_t_init_{gray,color}. This is very unfortunate, but we see no way
+to avoid it. (gscspace.h, gsiparam.h, gxistate.h, gscolor1.c, gscscie.c,
+gscspace.c, gsimage.c, gspcolor.c, gsstate.c, gxclread.c, gxiinit.c,
+gximage2.c, gximage3.c, gximage4.c)
+
+Unifies the handling of const for the IODevice table. (gscdefs.h,
+gxiodev.h, gconf.c, gsiodev.c)
+
+Changes the register_root memory manager call so that a NULL as the pointer
+to the root structure asks the memory manager to allocate the root structure
+itself. This is a NON-BACKWARD-COMPATIBLE CHANGE for implementors of the
+memory manager API (of which there are only 3). (gsmemory.h, gsstruct.h,
+gsalloc.c, gsmemory.c)
+
+Adds a new GC structure type, suffix_add0_local, which is a more efficient
+form of suffix_add0 that can be used when the supertype is defined in the
+same file as the subtype. (gsbitmap.h, gscie.h, gsshade.h, gsstruct.h)
+
+Uses the new package replacement facility in the makefile to make RasterOp
+optional without tinkering with statics at runtime. (lib.mak, gxdevice.h,
+gxdevrop.h, gdevdbit.c, gdevdflt.c, gdevmrop.c, gdevnfwd.c, gsnorop.c,
+gsropc.c)
+
+Makes RasterOp really optional. (gdevmrop.h, gsrop.h, gdevmrop.c, gsrop.c,
+gxiinit.c)
+
+Rewrites bits_fill_rectangle to get rid of nearly all the macros.
+(gxbitops.h, gsbitops.c)
+
+Removes the obsolete _ds from gs_log_error. (gserror.h, gsmisc.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.22"></a>Version 5.22 (limited) (2/19/98)</h2>
+
+<p>
+This fileset has a few more bug fixes, a major overhaul of memory management
+for paths so that we can do view clipping in a reasonable way, and the
+ability to build executables in a different directory from the sources.
+
+<h3><a name="V5.22_Documentation"></a>Documentation</h3><pre>
+
+Designates gv as the preferred VMS and Unix previewer. (new-user.txt,
+use.txt)
+
+Adds a pointer to post-release documentation. (README)
+
+Notes that compilation with certain platforms and compilers must turn off
+optimization. (make.txt)
+
+Improves the documentation of the fit_fill and fit_copy macros.
+(gxdevice.h)
+
+</pre><h3><a name="V5.22_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The ccgs script for non-ANSI compilers was no longer flexible
+enough to handle all the possible command lines. (ccgs)
+ - The pdfwrite device was missing on the DesqView/X platform.
+(dvx-gcc.mak)
+ - The System V build procedure was broken. (unixtail.mak)
+ - A Watcom makefile lacked parentheses around a macro name.
+(wctail.mak)
+ - Some `make' programs drop trailing spaces in macro definitions: we
+didn't work around this. (os2.mak, unixhead.mak, winlib.mak)
+
+Adds support for WCVERSION=11.0 in the Watcom makefiles. (watc.mak,
+wccommon.mak)
+
+Adds a shell script for removing the 'includes' from makefiles, since a very
+few Unix systems don't support this capability. (catmake)
+
+Changes -dNOPROMPT to -dNOPAGEPROMPT, and adds -dNOPROMPT to suppress both
+the end-of-page prompt and the executive prompt. (use.txt, gs_init.ps)
+
+Adds definitions of {GL,PS}{SRC,GEN,OBJ}DIR to the top-level makefiles,
+removing these definitions from gs.mak. (*.mak, gs.mak)
+
+Adds explicit directories to more makefile rules. We can now do builds with
+source, GL/PS generated files, and GL/PS object files in 5 different
+directories! (*.mak, gsjconf.h)
+
+</pre><h3><a name="V5.22_Utilities"></a>Utilities</h3><pre>
+
+Adds a user-contributed utility that runs dvips followed by ps2pdf.
+(dvipdf, unixinst.mak)
+
+</pre><h3><a name="V5.22_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - A pointer was incorrectly declared const. (gdevpdfm.c)
+ - pdfwrite handled the Title element of ARTICLE pdfmarks
+incorrectly. (gdevpdfm.c)
+ - pdfwrite inserted a Dest element in Link annotations even if an A
+(Action) key was present. (gdevpdfm.c)
+ - pdfwrite didn't recognize and convert /Article actions in
+pdfmarks. (gdevpdfm.c)
+
+Replaces some open-coded accesses to path structure elements with macros, in
+anticipation of a representation change. (gdevpdfd.c)
+
+Moves pdfwrite further towards supporting Dict and ACSDict Distiller
+parameters. (gdevpsdf.h, gdevpsdp.c, gdevpsfp.c)
+
+Updates a few places for the change in the path API. (gdevpdfd.c,
+gdevvec.c)
+
+Adds recognition of named object references to the PDF writer, fixing many
+bugs in the named object code in the process. (gdevpdfx.h, gdevpdfm.c,
+gdevpdfo.c)
+
+Enhances pswrite to skip fills or strokes of completely empty paths, to
+recognize horizontal and vertical lines, and to abbreviate color settings
+based on 8-bit fractions. This requires a NON-BACKWARD-COMPATIBLE CHANGE in
+the "vector" device interface (which was, however, clearly identified as
+subject to change without notice). (gdevpsdf.h, gdevvec.h, gdevps.c,
+gdevpsdf.c, gdevpx.c, gdevvec.c)
+
+</pre><h3><a name="V5.22_Interpreter"></a>Interpreter</h3><pre>
+
+Updates a few places for the change in the path API. (zupath.c)
+
+Implements %statementedit properly. (iscan.h, iscan.c, ziodev.c)
+
+Changes the initialization code so that if DELAYBIND is set, .forcedef and
+.forceput remain accessible until .bindnow is called. (gs_init.ps)
+
+</pre><h3><a name="V5.22_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - An empty Differences array, which Acrobat Distiller 3.02 can emit,
+caused a rangecheck error. (pdf_font.ps)
+
+</pre><h3><a name="V5.22_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - The alternative LZWEncode filter didn't emit a reset code as the
+first code, and waited one code too long to emit a reset. (slzwce.c)
+
+Adds some double-inclusion protection. (scfx.h)
+
+</pre><h3><a name="V5.22_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - There was an (incorrect) assignment to a read-only structure
+member. (gximage2.c)
+ - A formal parameter list was incorrect if __PROTOTYPES__ wasn't
+defined. (gsroptab.c)
+ - Some images didn't get clipped properly when banding. This was a
+fix for 5.03 that somehow didn't make it into 5.10. (gxclimag.c)
+ - When banding, dashed lines could cause an invalid memory access.
+This was apparently caused by an error in a fix made in 5.04. (gsline.c)
+ - Images with non-zero data_x could cause an invalid memory access.
+(gxiinit.c, gxidata.c)
+ - The band list rasterizer didn't initialize the image structure
+properly, causing control to go to a random address. (gxclread.c)
+
+Replaces some open-coded accesses to path structure elements with macros, in
+anticipation of a representation change. (gxpath.h, gzpath.h, gspath1.c,
+gxfill.c, gxpath2.c, gxstroke.c)
+
+Changes the path and clipping path structures so that segments and clipping
+lists are stored in separate, reference-counted structures. This finally
+supports reliable freeing of path segments and clipping lists even in the
+presence of off-stack gstates, and the ability to store the original
+segments of a clipping path, both of which we have wanted for a long time.
+Unfortunately, it requires SIGNIFICANT NON-BACKWARD-COMPATIBLE CHANGES TO
+THE API FOR PATHS:
+ Paths:
+ - adds gx_path_alloc_contained;
+ - gx_path_init =&gt; gx_path_init_local (or nothing);
+ - gx_path_reset =&gt; gx_path_new;
+ - removes gx_path_share and gx_path_release;
+ - gx_path_assign =&gt; gx_path_assign_{preserve,release};
+ - renames gx_path_expand_dashes =&gt; gx_path_add_dash_expansion,
+ gx_path_flatten[_accurate] =&gt; gx_path_add_flattened[_accurate],
+ gx_path_monotonize =&gt; gx_path_add_monotonized;
+ - removes the init Boolean from gx_path_copy[_reversed].
+ Clipping paths:
+ - gx_cpath_init =&gt; gx_cpath_init_local (or nothing);
+ - removes gx_cpath_share and gx_cpath_release_segments;
+ - gx_cpath_path =&gt; gx_cpath_to_path;
+ - removes the mem argument from gx_cpath_from_rectangle.
+We believe that we either renamed or changed the argument list of every API
+function that was affected in a non-backward-compatible way, so incompatible
+clients will get either compilation or linking errors. (gxpath.h,
+gzcpath.h, gzpath.h, gschar.c, gsdps.c, gsdps1.c, gspaint.c, gspath.c,
+gspath1.c, gsstate.c, gxacpath.c, gxccache.c, gxclpath.c, gxclread.c,
+gxcpath.c, gxfill.c, gxpath.c, gxpath2.c, gxpcmap.c, gxpcopy.c, gxpdash.c,
+gxstroke.c)
+
+Reimplements view clipping bookkeeping to use reference-counted paths.
+(gzstate.h, gsdps.c, gsstate.c)
+
+Adds const in a couple more places. (gxpath2.c)
+
+If -Z? is enabled, makes the reference counting machinery check for
+reference counts going negative. (gsrefct.h)
+
+Adds the first bit of code for rendering smooth shadings. The code is
+nowhere near usable. (gsshade.h, gxshade.h, gsshade.c, gxshade.c)
+
+Adds BEGIN ... END macros for creating compound statements that are
+syntactically equivalent to single statements. (stdpre.h)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.21"></a>Version 5.21 (limited) (1/19/98)</h2>
+
+<p>
+This is primarily a bug fix fileset for 5.20, with a little new
+functionality (pdfwrite image downsampling and more complete pdfmark
+processing).
+
+<h3><a name="V5.21_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - The build procedures still referred to tar_cat. (make.txt)
+
+Documents some user-developed patches for using certain kinds of Japanese
+fonts with Ghostscript. (new-user.txt)
+
+Notes that on Solaris 2.x systems, it is probably not a good idea to use
+Sun's fonts. (use.txt)
+
+Documents -dSTRICT. (use.txt)
+
+</pre><h3><a name="V5.21_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The definitions of MAKEFILE in several makefiles was incorrect.
+(dvx-gcc.mak, unix-cc.mak, unixansi.mak)
+ - The build rules for the gp_*.$(OBJ) files lacked a directory name,
+confusing most 'make' programs. (*.mak)
+ - geninit didn't work, because the syntax of psfile_() entries in
+gconfig.h had changed. (geninit.c)
+ - Some files were created and then deleted during building,
+preventing [gnu]make -j from working. (lib.mak, int.mak)
+
+Adds an explicit directory name to more files in the makefiles. (jpeg.mak,
+lib.mak) Added in this fileset:
+ .$(OBJ): jpeg.mak, {dvx-tail,msvclib,openvms,os2,ugcclib,unixtail,
+ watc,watclib,winint,winlib}.mak
+ .dev: jpeg.mak
+
+Removes the default suppression of 'const' with gcc. You must now compile
+with gcc 2.7.2.1 or newer, or patch the makefile. (ugcclib.mak,
+unix-gcc.mak)
+
+Removes -DPNG_USE_CONST from the command line for compiling libpng, since
+this has never actually worked, and is handled in a different way starting
+with libpng 0.97. (gs.mak)
+
+Adds a -dSTRICT switch that disables some Ghostscript extensions, to be more
+helpful in debugging applications that produce output for Adobe and other
+RIPs. (gs_init.ps, gs_statd.ps)
+
+</pre><h3><a name="V5.21_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - Many occurrences of 'const' were missing or incorrect.
+(gdevpdfd.c, gdevpdfi.c, gdevpdfo.c, gdevpdft.c)
+ - pdfmark processing was broken by changes introduced in 5.20.
+(gs_pdfwr.ps)
+ - pdfwrite didn't convert /Color =&gt; /C or /Title =&gt; /T in ANN and
+LNK pdfmarks. (gdevpdfm.c)
+ - pdfwrite didn't convert /Dest =&gt; /D or /File =&gt; /F in the Action
+dictionary of ANN and LNK pdfmarks. (gdevpdfm.c)
+ - pdfwrite didn't convert a /Launch annotation to an Action with a
+dictionary. (gdevpdfm.c)
+ - pdfwrite didn't convert \n in annotation Contents strings to \r.
+(gdevpdfm.c)
+ - jstrm.state was used before being set. (gdevjpeg.c)
+ - The SVGA devices were not identified as page devices.
+(gdevsvga.c)
+ - The SPARCPrinter driver returned the address of a local buffer
+containing an error string. (gdevsppr.c)
+ - pdfwrite no longer compressed character bitmaps. (bug introduced
+in 5.20) (gdevpdfi.c)
+ - pdfwrite didn't recognize _objdef syntax everywhere. (gdevpdfx.h,
+gdevpdfm.c, gdevpdfo.c)
+ - pdfwrite didn't recognize and convert Launch and GoToR OUT
+pdfmarks. (gdevpdfm.c)
+ - pdfwrite used a /Dest key rather than a /P key for the page number
+in articles. (gdevpdfx.h, gdevpdfm.c)
+ - pdfwrite didn't save and write the /I dictionary for articles.
+(gdevpdfx.h, gsstruct.h, gdevpdf.c, gdevpdfm.c)
+
+Implements a parameter list "reader" that prints the parameter values on a
+stream in PS/PDF syntax. (We need something like this for printing filter
+parameters.) (gdevpsdf.h, gdevpdf.c, gdevpsdf.c)
+
+Implements a write stream that just keeps track of the position. We use
+this to determine how much space to allocate for data we're going to save.
+(gdevpsdf.h, gdevpsdf.c)
+
+Implements image downsampling, but not anti-aliasing, for the PDF writer.
+(gdevpsdf.h, gdevpsds.h, gdevpsdi.c, gdevpsds.c)
+
+</pre><h3><a name="V5.21_Fonts"></a>Fonts</h3><pre>
+
+Adds Frutiger to the built-in list of sans-serif fonts. (gs_fonts.ps)
+
+</pre><h3><a name="V5.21_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Many occurrences of 'const' were missing. (gsargs.c, ialloc.c,
+zdpnext.c, zfunc3.c, zshade.c)
+ - Some byte * =&gt; char * casts were missing. (imainarg.c)
+ - The stack limit check in .eqproc was wrong. (zmisc3.c)
+ - The paper sizes a4small and lettersmall weren't implemented.
+(gs_statd.ps)
+ - setuserparams signalled errors on 64-bit systems. (zusparam.c)
+
+Changes .image2 to track the change in the library. (zdps.c)
+
+Some improvements were made to the (still not entirely functional) Type 32
+font code. (zchar32.c)
+
+Updates some filters to use the new procedure for transmitting collections
+of parameters. (zfdecode.c)
+
+Adds ISO paper sizes C0 through C6. (gs_statd.ps)
+
+Trims down the list of #includes in iconf.c. (iconf.c)
+
+</pre><h3><a name="V5.21_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - CalGray color spaces with a Gamma value caused an error.
+(gs_pdf.ps)
+
+</pre><h3><a name="V5.21_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - There was a 'const' conflict in the code for handling ImageType 2
+images. Fixing this properly required a small change in the ImageType 2
+structure. (gsiparm2.h, gximage2.c)
+ - Many occurrences of 'const' were missing. (gsfunc3.h, gstrap.h,
+gxgetbit.h, gdevdgbr.c, gstrap.c, gxclist.c, gxclread.c)
+ - A couple of enumerations had trailing commas. (gsshade.h,
+gxbitfmt.h)
+ - The gcst parameter was omitted in the non-ANSI version of the
+ENUM_PTRS_BEGIN_PROC macro. (gsstruct.h)
+ - gcc missed a private / non-private discrepancy. (gxpcmap.c)
+ - An uninitialized variable was used by mistake
+(copy_params.options). (gdevdgbr.c)
+ - The last statement of a procedure was unreachable. (gxclpath.c)
+ - If a Type 2 font was transformed so that hints were not being
+used, hintmask and cntrmask didn't compute the number of following bytes
+correctly. (gxtype1.h, gstype2.c, gxtype1.c)
+
+Factors out some common code in gxclip2.c into macros. (gxclip2.c)
+
+Starts to reimplement RasterOp using the compositing framework. (gsropc.h,
+gxropc.h, gsropc.c) ****** IN PROGRESS ******
+
+Adds an equality-testing procedure for device colors. This is used both for
+color images (which previously did this adhoc) and for RasterOp compositing.
+(gxdcolor.h, gximage.h, gxcht.c, gxdcolor.c, gxht.c, gspcolor.c)
+
+Implements hintmask (but not cntrmask) for Type 2 CharString fonts. I don't
+know any reasonable way to test whether it's working, though. (gxtype1.h,
+gstype2.c, gxhint2.c, gxhint3.c, gxtype1.c)
+
+Adds a more convenient interface for reading and setting sets of parameters.
+(gsparam.h, gsparam.c)
+
+Pulls the decision as to whether to halftone for a given device out into a
+macro. Eventually we will do something more sophisticated about this.
+(gxdevice.h, gxclist.c, gxcmap.c)
+
+Breaks apart a macro in anticipation of future usage. (gsrefct.h)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.20"></a>Version 5.20 (limited) (1/8/98)</h2>
+
+<p>
+This fileset provides enough of the Display PostScript capabilities to start
+running real programs. It also adds the first few LanguageLevel 3 features
+(none of which have been tested) and reorganizes the makefile structure
+somewhat. There are many internal changes since 5.10, some of them still in
+progress, so we expect more problems than usual.
+
+<p>
+This fileset is being provided for testing in two different configurations:
+a full release, and a DPS-only package. The latter will be released with
+the GPL when it is reasonably complete and reliable.
+
+<h3><a name="V5.20_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - TrueType fonts on GS_FONTPATH weren't recognized. (use.txt)
+ - The argument list for gstate was incorrect. (zdevice2.c)
+ - There were a couple of minor errors in the e-stack documentation.
+(estack.h)
+ - fonts.txt had several errors regarding compiled fonts.
+(fonts.txt)
+ - An out-of-date Aladdin address still appeared in documentation.
+(new-user.txt)
+
+Updates make.txt to reflect the changes in makefile structure. (make.txt)
+
+Notes the addition of -Z' and -Z". (use.txt)
+
+Documents the new begin_typed_image, get_bits_rectangle,
+map_color_rgb_alpha, and create_compositor driver procedures. (drivers.txt)
+
+Moves documentation for all releases before 5.0 to history4.txt. (NEWS,
+history4.txt)
+
+Documents the addition of SHARE_JPEGLIB. (make.txt)
+
+Removes the author's name and e-mail address from the ps2ascii man page, at
+his request. (ps2ascii.1)
+
+Documents the addition of (some) image compression facilities to ps2pdf /
+pdfwrite. (ps2pdf.txt)
+
+Documents the new -dNOINTERPOLATE and -F&lt;n&gt; switches. (use.txt)
+
+Adds documentation for a user-contributed port to the SMS/QDOS operating
+system. (new-user.txt)
+
+Removes documentation for BGI, which is no longer supported. (use.txt)
+
+Documents the use of the Registry and the GS_DLL environment variable on
+Windows platforms. (install.txt)
+
+</pre><h3><a name="V5.20_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The OpenVMS makefile referred to EXTEND_NAME rather than
+EXTEND_NAMES. (openvms.mak)
+ - A typo caused a spurious error message from lpr. (unix-lpr.sh)
+ - The PDF writer didn't include a needed dependency on zlib
+compression. (devs.mak)
+ - The rule for the OS/2 printer device was wrong. (devs.mak)
+ - The -migrate switch was incorrectly removed from the command line
+for pre-4.0 Digital Unix. (make.txt)
+ - The -r switch was ignored with -dNODISPLAY. (gs_init.ps)
+
+Adds targets for Type 32 fonts (type32.dev) and PostScript LanguageLevel 3
+(psl3.dev, psl3core.dev, psl3read.dev). (gs.mak, int.mak, lib.mak)
+
+Changes the documented feature names for PostScript Level 1 and 2
+interpreters from level1/2 to psl1/2. The old names are still recognized
+for backward compatibility. (gs.mak, int.mak, *.mak)
+
+Removes support for building with DCL under VMS. Building under VMS now
+requires some version of make, preferably GNU make. THIS IS A
+NON-BACKWARD-COMPATIBLE CHANGE, but there was plenty of lead time for users
+(it was announced in 5.01, 6/22/97). (vms*.mak[deleted])
+
+Starts to add an explicit directory name to every file in the makefiles, to
+allow building multiple object versions (e.g., debug, profile, product) or
+cross-building for multiple platforms in separate directories without any
+makefile editing. (*.mak) Done so far:
+(done) _h= devs.mak gs.mak int.mak jpeg.mak lib.mak
+(done) .h devs.mak gs.mak int.mak lib.mak zlib.mak
+ openvms.mak os2.mak ugcclib.mak unix-end.mak
+ unixtail.mak wctail.mak winint.mak winlib.mak
+ .$(OBJ): devs.mak int.mak (except ccfonts)
+ lib.mak (except special compilations)
+ libpng.mak zlib.mak
+ .dev: libpng.mak zlib.mak
+
+Gets rid of tar_cat. Building on Unix platforms now requires that make
+recognize the include directive. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE:
+rather than editing the *head.mak files, users should now edit the unix*.mak
+or dvx*.mak files (which they previously were instructed NOT to do). Aside
+from this, we think the change won't actually affect anyone, since most Unix
+make programs (include GNU make) do recognize this directive. (*.mak,
+ansihead.mak[deleted], cc-head.mak[deleted], gcc-head.mak[deleted],
+dgc-head.mak[deleted], tar_*cat[deleted], dvx-gcc.mak, unixansi.mak,
+unix-cc.mak, unix-gcc.mak)
+
+Includes the basic context machinery in every PostScript interpreter
+configuration. (int.mak)
+
+Removes the division between 'low-level' and 'high-level' band list
+facilities: we once thought we might make the latter optional, but this no
+longer seems useful. (lib.mak)
+
+Introduces a new category of devices, identified to genconf as -dev2 and
+created with SETDEV2 and SETPDEV2. For the moment, these are the same as
+existing devices except that their static instance is const, but we plan to
+make them quite different in the future: don't attempt to create any.
+(devs.mak, gs.mak, genconf.c, gconf.c)
+
+Removes the obsolete -includef resource from genconf. (genconf.c)
+
+Removes support for IJG JPEG library v5* from the makefile, since we no
+longer support these library versions. (jpeg.mak, lib.mak,
+gsjerror.h[deleted], gsjpglib.h[deleted], gsjerror.c[deleted])
+
+Makes the JPEG library use floating point if it is fast. (gsjmorec.h)
+
+Adds a SHARE_JPEG option to the makefiles, with the necessary warning about
+possible incompatibilities. (*.mak)
+
+Replaces the CCC macro in the makefiles with CC_, the various CC* macros
+with CC_* (except for CCA2K and CCAUX), and the O macro with O_; removes the
+'begin' target and the CCBEGIN macro. THIS IS A NON-BACKWARD-COMPATIBLE
+CHANGE, required for the new arrangement of files into directories. (*.mak)
+
+Replaces all occurrences of -Idir1 -Idir2 ... -Idirn in platform-generic
+makefiles with $(I_)dir1 $(II)dir2 ... $(_I)dirn, and defines these macros
+in platform-specific makefiles, in order to accommodate OpenVMS command
+syntax. (*.mak)
+
+Adds -fno-common to the default gcc compilation and linking switches, to
+improve checking for doubly-defined externs. (unix-gcc.mak)
+
+Adds a -dNOINTERPOLATE switch to turn off image interpolation. (gs_init.ps)
+
+Adds a -F&lt;file&gt; switch that runs files through the run_string interface with
+an 1-byte buffer. (imainarg.c)
+
+Allows specifying the name of the gconfig.h file with -DGCONFIG_H= in the
+compilation command line, to support certain multi-configuration build
+procedures. (int.mak, lib.mak, gconf.h, gconf.c, gscdef.c, iconf.c)
+
+Splits off the installation targets from unix-end.mak. (unix-end.mak,
+unixinst.mak, unix*.mak, ugcclib.mak)
+
+</pre><h3><a name="V5.20_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - A case label was misplaced. (No effect on normal operation.)
+(genconf.c)
+ - ps2ascii had some Encoding-related problems, and a serious bug
+causing the stack to grow indefinitely. (ps2ascii.ps)
+
+Adds a new font2pcl.ps utility, for converting outline fonts to bitmapped
+PCL fonts. (font2pcl.ps)
+
+At the request of a user, modifies ansi2knr to read stdin if no input file
+is supplied, and to accept an optional --filename switch to set the file
+name in the #line directive. Also makes ansi2knr write the usage message on
+stderr rather than stdout. (ansi2knr.c)
+
+Adds a user-contributed Perl script that fixes compatibility problems
+between MS Word output and Ghostview 1.5. (fixmswrd.pl)
+
+Adds a new test file that produces some pretty color output. (vasarely.ps,
+unix-end.mak)
+
+Adds a user-contributed utility for producing AFM files from PFA/PFB and
+optionally PFM files. (pf2afm.bat, pf2afm.ps)
+
+</pre><h3><a name="V5.20_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - Some 'static' declarations were missing (gcc lossage). (gdevht.c,
+gdevmgr.c, gdevpcfb.c, gdevrrgb.c)
+ - Some 'char *' should have been 'unsigned char *'. (gdevccr.c)
+ - The PDF writer represented non-rectangular clipping paths in a way
+that could cause Acrobat to produce incorrect output. (The fix relies on
+the new clipping path enumeration facility.) (gdevpdfd.c)
+ - get_params for the X device didn't read the WINDOWID and
+.IsPageDevice parameters. (gdevx.c)
+ - A superseded driver was still in the distribution.
+(gdevnp6.c[deleted])
+ - The PDF writer's default parameters didn't quite match the default
+parameters of Adobe Acrobat(TM). (gdevpsdf.h)
+ - A cast from const byte * to const char * was omitted.
+(gdevpdft.c)
+ - x_map_color_rgb returned incorrect values for values in the dither
+cube/ramp. (gdevx.c)
+
+Adds user-contributed drivers for:
+ - the Brother HL 720/730 laser printer (gdevhl7x.c);
+ - the Cirrus Logic CL-GD54xx SuperVGA chipset (in gdevsvga.c).
+
+Adds stubs or dummy implementations for the new Acrobat Distiller 3.0
+pdfmark features (BP/EP/SP, _objdef/OBJ, PUT/PUTINTERVAL/CLOSE). Features
+not yet implemented:
+ - Predefining Catalog and DocInfo.
+ - Writing out added Catalog and Info keys.
+ - Special handling for Page#, Prev/This/NextPage.
+ - Writing out added keys in Page objects.
+ - Defining objects for ANN, DEST, LNK, PS.
+ - Writing out added keys for ANN, BP, DEST, LNK, PS.
+ - Adding information to streams (PUT, CLOSE).
+ - Writing out streams.
+(gs_pdfwr.ps, gdevpdfx.h, gdevpdf.c, gdevpdfi.c, gdevpdfm.c, gdevpdfo.c)
+
+Removes the DoThumbnails distiller parameter, which Acrobat Distiller 3.0 no
+longer supports. (gs_pdfwr.ps, gdevpdfx.h, gdevpdf.c, gdevpdfp.c)
+
+Starts to eliminate or segregate writable globals that point to
+heap-allocated data, as in the interpreter (see below); specifically, makes
+all device and xfont procedure structures const in devices that Aladdin
+maintains. Note that this involves a NON-BACKWARD-COMPATIBLE CHANGE in the
+get_xfont_procs device procedure (to add const to the return type); this
+only affects the 3 implementations of xfonts. (gdevprn.h, gdevdjet.c,
+gdevm1.c, gdevpccm.c, gdevpdf.c, gdevpdfm.c, gdevpdft.c, gdevps.c,
+gdevpsdf.c, gdevpx.c; gxdevice.h, gxxfont.h, gdevbgi.c, gdevbit.c,
+gdevbmp.c, gdevdflt.c, gdevdjet.c, gdevlj56.c, gdevmiff.c, gdevmsxf.c,
+gdevnfwd.c, gdevpbm.c, gdevpcfb.c, gdevpdf.c, gdevpng.c, gdevprn.c,
+gdevps.c, gdevpx.c, gdevs3ga.c, gdevsvga.c, gdevtfax.c, gdevtfnx.c,
+gdevvglb.c, gdevwddb.c, gdevwdib.c, gdevwpr2.c, gdevwprn.c, gdevx.c,
+gdevxalt.c, gdevxxf.c, gxccman.c)
+
+Makes the statically allocated device templates const in some devices, using
+the new -dev2 device resource type. NOTE: the meaning of -dev2 is subject
+to change without notice in future releases. (gdevdjet.c, gdevpdf.c,
+gdevps.c, gdevpx.c, gdevvglb.c)
+
+Adds a new begin_typed_image driver procedure which is called for all types
+of images, not just ImageType 1. The default implementation calls
+begin_image if the ImageType is 1. (gdevmem.h, gdevprn.h, gsiparam.h,
+gxdevice.h, gdevbbox.c, gdevdflt.c, gdevht.c, gdevmrop.c, gdevnfwd.c,
+gxacpath.c, gxclimag.c, gxclip2.c, gxclist.c, gxcpath.c, gxpcmap.c)
+
+Adds a new get_bits_rectangle driver procedure which allows reading back an
+arbitrary rectangle of bits from the device, not just a single full scan
+line. The default implementation calls get_bits, being careful to avoid a
+recursion loop; the default implementation of get_bits calls
+get_bits_rectangle similarly. This procedure has a lot of flexibility,
+almost all of which is ultimately provided by the implementation in memory
+devices. (gdevmem.h, gsbitops.h, gxcindex.h, gxdevice.h, gdevbbox.c,
+gdevdflt.c, gdevdgbr.c, gdevht.c, gdevm*.c, gdevmem.c, gdevmpla.c,
+gdevnfwd.c, gxbitfmt.h, gxclip2.c, gxclist.c, gxclread.c, gxcpath.c,
+gxgetbit.h)
+
+Removes support for the BGI (Borland Graphics Interface) device, since we no
+longer support the Borland compilers for MS-DOS. (devs.mak, dvx-head.mak,
+openvms.mak, unixhead.mak, gdevbgi.c[deleted])
+
+Speeds up x_map_color_rgb by avoiding server access in most cases.
+(gdevx.h, gdevx.c, gdevxini.c)
+
+Implements get_bits_rectangle in the X driver in place of get_bits.
+(gdevx.c, gdevxalt.c)
+
+Implements begin_typed_image for ImageType 2 images in the X driver, as an
+example of how a driver can implement this function itself. (gdevx.c)
+
+Adds a call on the DCTEncode set_defaults procedure, which is now required
+(see under Streams below). (gdevjpeg.c)
+
+Implements a substantial part of the Distiller image compression machinery.
+See ps2pdf.txt for details. (gdevpdfx.h, gdevpsdf.h, gdevpdf.c, gdevpdfi.c,
+gdevps.c, gdevpsdf.c, gdevpsdi.c, gdevpsdp.c, gdevpsds.c)
+
+Adds a map_color_rgb_alpha driver procedure, complementing
+map_rgb_alpha_color. (gdevmem.h, gdevprn.h, gxdevice.h,
+gdevbbox.c, gdevdflt.c, gdevht.c, gdevmrop.c, gdevnfwd.c, gdevprn.c,
+gxclip2.c, gxclist.c, gxcmap.c, gxcpath.c)
+
+Splits off gxdevcli.h (client definitions) from gxdevice.h, which had gotten
+very large. This doesn't do much good yet in terms of reducing dependencies
+and compilation time, because every client still includes gxdevice.h, but
+it's the raw material for doing so in the future. (gxdevcli.h, gxdevice.h)
+
+Adds alpha tracking to the command list. (gxclpath.h, gxclimag.c,
+gxclpath.c, gxclread.c)
+
+Changes the 'show' pseudo-parameter for the PDF writer so that it takes
+multiple additional parameters instead of a dictionary. This greatly
+reduces garbage collection overhead. (gs_pdfwr.ps, gdevpdfx.h, gdevpdfp.c,
+gdevpdft.c)
+
+Adds a create_compositor driver call for handling compositing. (gdevbbox.h,
+gdevmem.h, gdevprn.h, gsdevice.h, gxdevcli.h, gxdevice.h, gdevbbox.c,
+gdevdflt.c, gdevht.c, gdevnfwd.c, gsdevice.c, gxclimag.c, gxclip2.c,
+gxclist.c, gxcpath.c, gxpcmap.c)
+
+Updates drivers to account for the more careful handling of file name
+length. (gdevpdfx.h, gdevwprn.c)
+
+Adds a user-contributed enhancement to make the Epson dot matrix driver work
+at 180x60dpi and 240x180dpi for 24 pin printers. (gdevepsn.c)
+
+</pre><h3><a name="V5.20_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The Windows platform didn't put stdin into binary mode.
+(dwmainc.cpp)
+
+Removes all remaining uses of gs_malloc and gs_free in platform-specific
+code. (gp_dosfb.c, gp_vms.c)
+
+Adds a platform-specific gp_getenv call, to allow the Windows implementation
+to consult the Registry. (gp.h, gpgetenv.h, gp_getnv.c, gp_wgetv.c, *.mak,
+gp_win32.c)
+
+Separates out the declaration of popen and pclose, which may be declared
+correctly in stdio.h, incorrectly in stdio.h, or not at all, depending on
+the platform. (lib.mak, unixtail.mak, pipe_.h, gdevpipe.c, gp_os2.c,
+gp_os9.c, gp_unix.c)
+
+Tweaks the platform-workaround header file conditionals a little more.
+(malloc_.h, memory_.h).
+
+Makes the Windows DLL check the GS_DLL environment/registry variable for the
+location of the DLL. (dwdll.cpp)
+
+Defines the maximum length for the file name returned by
+gp_open_scratch_file, and possibly by gp_open_printer. (gp.h, gp_*.c)
+
+</pre><h3><a name="V5.20_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - A 'flush' was missing from a debugging message. (gs_fonts.ps)
+ - Type 2 fonts didn't always have a PaintType entry. (gs_cff.ps)
+ - CIDFontType 0 fonts were broken, probably because of a recently
+added validity test in the C code. (gs_cidfn.ps)
+ - Font types without an Encoding caused an error (in .completefont).
+(gs_fonts.ps)
+ - composefont required the elements of the font array to be actual
+fonts, rather than allowing font names. (gs_cidfn.ps)
+ - composefont required that all elements of the font array have
+CIDSystemInfo dictionaries. (Adobe has said that their interpreters don't
+check for this in some cases, but it's a bug. Unfortunately, by now it's an
+established one.) (zfcmap.c)
+
+Adds .dir to the list of file suffixes known not to be fonts. (gs_fonts.ps)
+
+</pre><h3><a name="V5.20_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - A Type 2 font that provided fewer CharStrings than charset
+elements caused an error. (gs_cff.ps)
+ - If a context was joined before it terminated, its stack was never
+copied to the joining context. (zcontext.c)
+ - Freeing a context didn't free most of its substructures.
+(icontext.h, istack.h, icontext.c, interp.c, istack.c, zcontext.c)
+ - save and restore didn't save and restore the user parameters.
+(gs_lev2.ps, zvmem2.c)
+ - %stdin and %stdout weren't defined per-context. (files.h,
+icontext.h, icontext.c, ziodev.c)
+ - Switching contexts didn't clean up the stacks. (The current way
+we do this is very inefficient: we should use a special null for filling the
+untouched area, so we can use it to detect the high water mark.)
+(icontext.c)
+ - A cast from const to non-const was missing. (zdpnext.c)
+ - User parameters weren't managed per-context. (The current way we
+do this is inefficient.) (gs_dps.ps, gs_init.ps, gs_lev2.ps, isave.h,
+icontext.c, iinit.c, isave.c, zcontext.c, zusparam.c)
+ - Some operand checks weren't wrapped in do { ... } while(0),
+possibly leading to incorrect parsing of 'if's. (opcheck.h)
+ - If a context terminated with unmatched saves, the restores weren't
+executed. (isave.h, isave.c, zcontext.c)
+ - If two or more contexts shared the same global VM, the outermost
+restore (which in this case saves only local VM) checked for invalidrestore
+incorrectly. (isave.c)
+ - resourceforall didn't remove its own temporary values from the
+operand stack when calling the procedure. (gs_res.ps)
+ - resourceforall returned local instances even when currentglobal
+was true. (gs_res.ps)
+ - If a context had unmatched saves, other contexts sharing the same
+local VM weren't blocked from running. (zcontext.c)
+ - The NeXT compositing operations (Copy, etc.) weren't defined in
+systemdict. (gs_dpnxt.ps)
+ - In the case of a stack overflow, some garbage could get left on
+the stack. (istack.c)
+ - Stack overflow was reported prematurely -- typically when the
+stack depth had reached half the specified limit. (istack.c)
+ - Freed ref arrays weren't filled with nulls, which could confuse
+the garbage collector later. (ialloc.c)
+ - Certain stack overflow conditions could put a stack into an
+anomalous state that confused the garbage collector. (istack.c)
+ - The maximum stack size could not be set to a value smaller than
+the current allocated space, but the minimum value should be the number of
+entries actually in use. (istack.c)
+ - If .buildfont* had to add any elements to the font dictionary, a
+temporary pointer to the Encoding, FDepVector, or sfnts could become
+invalid, causing crashes or confusion. (zfont0.c, zfont2.c, zfont42.c)
+
+Changes exit, stop, and .stop so that if there is no matching dynamically
+enclosing context (loop or stopped), the effect is a quit, like the Adobe
+interpreters, and not an invalidexit. (zcontrol.c)
+
+Adds support for ImageTypes other than 1. (gs_init.ps, gs_lev2.ps,
+gs_res.ps, zimage2.c)
+
+Adds support for LanguageLevel 3 features:
+ - Idiom recognition in 'bind'. (gs_init.ps, gs_dps.ps, gs_lev2.ps,
+gs_ll3.ps, zmisc3.c)
+ - HalftoneTypes 6, 10, and 16. (gs_ll3.ps)
+ - FunctionType resource category. (gs_ll3.ps)
+ - FunctionType 2 and 3 Functions. (zfunc3.c)
+ - PatternType 2 and smooth shading (structures and API only, no
+algorithms). (gs_init.ps, gs_ll3.ps, gs_res.ps, zshade.c)
+ - In-RIP trapping (structures and API only, no algorithms).
+(gs_ll3.ps, ztrap.c)
+ - ImageType 3 and 4 (masked images) (structures and parsing only, no
+algorithms). (gs_ll3.ps, gs_res.ps, iimage2.h, zimage.c, zimage2.c,
+zimage3.c)
+ - DevicePixel color space. (gs_lev2.ps, zcolor2.c, zcspixel.c)
+ - DeviceN color space. (gs_lev2.ps, igstate.h, zcsdevn.c)
+
+Adds support for Type 32 fonts. (gs_cidfn.ps, gs_init.ps, gs_typ32.ps,
+zchar32.c, zfont32.c)
+
+Adds debugging printout to the CFF loader. (gs_cff.ps)
+
+Removes support for _ds pointers referencing the stacks, since we no longer
+support 16-bit implementations. (iref.h, istack.h, interp.c, ireclaim.c,
+istack.c)
+
+Removes all #ifdef DPNEXT conditionalization. (We had intended to use this
+to delimit blocks of code to be released with the GPL, but we're now
+planning to release a much larger number of files.) (igstate.h, interp.h,
+istruct.h, interp.c, zgstate.c)
+
+Allows user parameters to be implemented partly in PostScript code, since
+this is required for some LanguageLevel 3 features (currently only
+IdiomRecognition). (gs_lev2.ps)
+
+Removes most of the references to a global process scheduler. Completing
+this will require passing an interpreter state structure to all operators in
+place of the operand stack pointer, which we aren't prepared to contemplate
+yet. (zcontext.c)
+
+Adds tracing for context operations, -Z' and -Z". (zcontext.c)
+
+Changes def so that it doesn't have a special exception for storing
+references to local objects into systemdict or its subsidiary dictionaries
+during initialization: such stores now must use .forceput (or .forcedef,
+defined in gs_init.ps using .forceput); changes .forceput to allow storing a
+local reference into any global dictionary, not only systemdict, if the save
+level is 0. (gs_dps1.ps, gs_init.ps, gs_lev2.ps, gs_pdfwr.ps, gs_res.ps,
+gs_statd.ps, zdict.c)
+
+Moves all of the initialization of internaldict to PostScript code.
+(gs_init.ps, iinit.c, zcontrol.c)
+
+Moves the JobName user parameter from C to PostScript code. (gs_lev2.ps,
+zusparam.c)
+
+Adds to every dictionary a pointer to the allocator that created it. This
+allows us to create and grow dictionaries without having to reference any
+global variables. (idict.h, idict.c, iinit.c)
+
+Implements the localfork operator, which creates contexts with private local
+VM. (gs_dps.ps, gs_init.ps, dstack.h, gsalloc.h, ialloc.c, icontext.c,
+iinit.c, interp.c, zcontext.c)
+
+Systematizes reliable access to variables in systemdict and userdict.
+(gs_dps1.ps, gs_dps2.ps, gs_fonts.ps, gs_init.ps, gs_lev2.ps, gs_statd.ps,
+gs_type1.ps)
+
+Starts to eliminate or segregate writable globals that point to
+heap-allocated data. (Writable globals containing procedures,
+run-time-settable switches, pointers to static data, or non-pointer values
+that are initialized once and idempotently are OK.) (iconf.c, iinit.c,
+imain.c, imainarg.c, interp.c, zfont1.c, zht2.c, ziodev.c, ztype.c,
+zupath.c, zusparam.c)
+
+Adds support for ImageType 2 (device source) images. (gs_dps.ps, zdps.c)
+
+Adds begin_typed_image to internal device procedure vectors. (zupath.c)
+
+Increases the maximum stack sizes to match the Adobe implementation more
+closely. (gs_init.ps)
+
+Adds a file_is_invalid macro to work around a bug in the Borland 5.0
+compiler. (files.h, ziodev.c, zvmem.c)
+
+Changes the character cache to be allocated in the C heap rather than global
+VM. This is required because cache chunks are now allocated from the same
+allocator as the cache. (zfont.c)
+
+Implements sizeimage and readimage, including a new .getbitsrect operator.
+(gs_dpnxt.ps, gs_init.ps, zdevice.c, zdpnext.c)
+
+Resets the maximum stack sizes earlier in initialization. (gs_init.ps)
+
+Tweaks the default CRD slightly (syntactically, not the content).
+(gs_lev2.ps)
+
+Adds support for PatternTypes other than 1. (gs_init.ps, gs_lev2.ps,
+gs_res.ps, zpcolor.c)
+
+Adds a pointer to the C heap allocator to the gs_main_instance structure,
+working towards the goal of removing all references to gs_memory_default.
+(iminst.h)
+
+Removes all remaining uses of gs_malloc and gs_free from the interpreter.
+(igc.h, igc.c, imain.c, zfdctd.c, zfdcte.c)
+
+Adds an explicit #include for all remaining uses of gs_memory_default in the
+interpreter. (zfdctd.c, zfdcte.c, zvmem.c)
+
+Adds a map_color_rgb_alpha driver procedure, complementing
+map_rgb_alpha_color. (zupath.c)
+
+Removes the obsolete writeppmfile operator. (zwppm.c[deleted])
+
+Updates the implementation of the image operators to match the change from
+HasAlpha to Alpha in the image definition structure. (iimage.h, zcolor1.c,
+zimage.c)
+
+Reimplements upath in C code, since UnpaintedPath requires it. (zupath.c)
+
+Updates interpreter code for the change in the GC interface. (imemory.h,
+istruct.h, icontext.c, igc.c, igcref.c, igcstr.c, ilocate.c, iname.c,
+isave.c, iscan.c, istack.c, zfproc.c)
+
+Implements the compositing operators. (zdpnext.c, zdps.c, zupath.c)
+
+Changes some matrix operators to pass unpacked matrices on the stack.
+(zmatrix.c)
+
+Moves the alpha-related operators to where they belong. (zcolor.c,
+zdpnext.c)
+
+Changes all calls on getenv to gp_getenv. (imainarg.c, zmisc.c)
+
+</pre><h3><a name="V5.20_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - PostScript pass-throughs caused an error. They are now always
+executed; probably we should offer the option of not executing them, for
+closer compatibility with Acrobat. (pdf_draw.ps, pdf_main.ps)
+ - Font resources, unlike all other types of resources, couldn't be
+inherited from an ancestor Page(s) object. (pdf_font.ps)
+ - Resources appearing only in Form or Pattern dictionaries weren't
+recognized as being present. (pdf_base.ps, pdf_draw.ps, pdf_main.ps)
+
+Moves closer to supporting Type 0 (and CID) fonts. (pdf_font.ps)
+
+</pre><h3><a name="V5.20_Streams"></a>Streams</h3><pre>
+
+Fixes bugs:
+ - If the image was very narrow or very shallow, the interpolated
+image scaling stream could make an invalid memory reference. (siscale.c)
+
+Removes the last few references to gs_malloc and gs_free from stream code.
+Clients now *must* call the set_defaults procedure for the DCT filters
+before initializing them: THIS IS A NON-BACKWARD-COMPATIBLE CHANGE.
+(sdct.h, sdctd.c, sdcte.c, sjpegc.c)
+
+Adds an explicit #include for all remaining uses of gs_memory_default.
+(sdctd.c, sdcte.c, szlibd.c, szlibe.c)
+
+</pre><h3><a name="V5.20_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Some files that included shc.h didn't include scommon.h. (shc.h)
+ - A file didn't include std.h before &lt;stdio.h&gt;. (gslib.c)
+ - There was an unnecessary extern (cleanup only). (gscsepr.c)
+ - The uid.xvalues member of gs_client_pattern structures wasn't
+traced by the GC. (gspcolor.h)
+ - If an Interpolated image reached the end of the input at exactly
+the wrong time, an assertion could fail. (gxiscale.c)
+ - With non-ANSI compilers, an integer constant passed to the fmod
+library function, which requires a floating point argument, could cause a
+floating point exception or an incorrect result. (gsmisc.c)
+ - An error in computing the bounding box sometimes caused strokes to
+print incorrectly (for example, some graduated fills printed incorrectly).
+(gxstroke.c)
+
+Implements an undocumented (!) feature of Type 2 CharStrings, namely that if
+the endchar operator is invoked with 4 or 5 operands on the stack, it is
+equivalent to the Type 1 seac operator (without the asb operand). This
+required changing the implementation of seac so that it does the base
+character first, rather than the accent. (gxtype1.h, gstype1.c, gstype2.c,
+gxtype1.c)
+
+Adds support for ImageTypes other than 1. (gsiparam.h, gximage.h,
+gxiparam.h, gdevddrw.c, gsimage.c, gximage.c, gximage0.c)
+
+Adds support for ImageType 2 (device source) images. Currently we only
+handle the simplest case (source is not transformed). (gsimage.h,
+gsiparm2.h, gsimage.c, gximage2.c)
+
+Adds support for LanguageLevel 3 features:
+ - FunctionType 2 and 3 Functions. (gsfunc3.h, gsfunc3.c)
+ - PatternType 2 and smooth shading (structures and API only, no
+algorithms). (gscolor3.h, gsptype2.h, gsshade.h, gxistate.h, gscolor3.c,
+gsshade.c)
+ - In-RIP trapping (structures and API only, no algorithms).
+(gstrap.h, gstrap.c)
+ - ImageType 3 (masked images) (structures and API only, no
+algorithms). (gsiparm3.h, gximage3.c)
+ - ImageType 4 (chroma-keyed masked images). (gsiparm4.h,
+gximage4.c)
+ - DevicePixel color space. (gscpixel.h, gscspace.h, gscpixel.c,
+gximono.c)
+ - DeviceN color space. (gscspace.h, gscdevn.c)
+
+Removes the #ifdef FUTURE around the code for passing multi-plane and
+interpolated images through the band list (version 5.01) and for banded
+filling and stroking with colored halftones (version 4.71). This code is
+now part of the standard release. (gxcldev.h, gxclpath.h, gxdht.h,
+gxhttype.h, gsht.c, gxclimag.c, gxclread.c, gximage.c)
+
+Adds a _ptrs6 structure definition macro. (gsstruct.h)
+
+Removes #ifdef DPNEXT conditionalization, as in the interpreter (see above).
+(gzstate.h, gsdps.c, gsstate.c, gximage.c, gximage5.c)
+
+Starts to eliminate or segregate writable globals that point to
+heap-allocated data, as in the interpreter (see above). (gsbittab.h,
+gscdefs.h, gsdcolor.h, gxclist.h, gxsample.h, gzht.h, gconf.c, gsbitops.c,
+gsbittab.c, gscdef.c, gsdparam.c, gsflip.c, gsinit.c, gsmatrix.c,
+gspcolor.c, gsstate.c, gxcht.c, gxclist.c, gxcmap.c, gxdcolor.c, gxdither.c,
+gxht.c, gximage.c)
+
+Removes the division between 'low-level' and 'high-level' band list
+facilities. (gxcldev.h, gxclimag.c, gxclist.c, gxclpath.c)
+
+Renames gximage*.c as gxi*.c, since these files apply only to ImageType 1
+images and the use of numerical suffixes was confusing. (gximage.c =&gt;
+gxiinit.c, gximage0.c =&gt; gxidata.c, gximage1.c =&gt; gxifast.c,
+gximage2.c =&gt; gximono.c, gximage3.c =&gt; gxicolor.c, gximage4.c =&gt;
+gxi12bit.c, gximage5.c =&gt; gxiscale.c)
+
+Provides the ability to enumerate a clipping path (based on the clipping
+list) using an enumerator, in the same way as an ordinary path. (gxpath.h,
+gzcpath.h, gzpath.h, gxcpath.c, gxpath2.c)
+
+Speeds up mem_mapped4_copy_mono substantially. (gdevm4.c)
+
+Removes all remaining uses of gs_malloc and gs_free in the library, other
+than in drivers. This turned out to require changing a couple of
+initialization APIs. (gsfont.h, gslib.h, gxdevice.h, gxfcache.h, gsfont.c,
+gxccman.c)
+
+Reduces the writable statics related to the default (C heap) allocator to a
+single pointer. (gsmalloc.h, gsmemory.h, gsinit.c, gsmemory.c)
+
+Adds support for PatternTypes other than 1. (gscolor2.h, gspcolor.h,
+gsptype1.h, gxcolor2.h, gspcolor.c)
+
+Adds an explicit #include for all remaining uses of gs_memory_default that
+aren't covered by gxdevice.h. (gxclmem.c)
+
+Splits off the default implementations of the bit-copying device procedures,
+because the file was getting too large. (gdevdbit.c, gdevdflt.c)
+
+Adds a procedure for calculating the difference of two rectangles, needed
+for Type 2 images. (gsrect.h, gxpath.h, gsutil.c)
+
+Extends the image machinery to allow alpha values to either precede or
+follow color values in image data, replacing HasAlpha with Alpha in the
+ImageType 1 image structure. (gsiparam.h, gximage.h, gsimage.c, gxclimag.c,
+gxclread.c, gxicolor.c, gxiinit.c, gxiscale.c)
+
+Extends the path enumeration API to decouple path copying from coordinate
+transformation. (gspath.h, gzpath.h, gspath1.c, gxpath2.c)
+
+Changes the garbage collector interface so that all procedures are passed
+through a structure rather than being referenced as externs. This allows
+programs other than the GC itself to enumerate and relocate pointers, and
+also removes all static dependencies on the GC from the library. This
+involves a NON-BACKWARD-COMPATIBLE CHANGE to the argument list of enum_ptrs
+procedures, and to the implementation of both enum_ptrs and reloc_ptrs. (We
+hope that the new macros we've introduced will avoid non-backward-compatible
+changes in the future.) (gsstruct.h, gdevmem.c, gsalloc.c, gscdevn.c,
+gscolor.c, gscolor2.c, gscsepr.c, gsdevice.c, gsfont.c, gshtscr.c,
+gsimage.c, gsmemory.c, gspcolor.c, gsstate.c, gxcmap.c, gxcpath.c, gxht.c,
+gxiinit.c)
+
+Moves the image compositing code into the library from its inappropriate
+home in the interpreter. (gsdpnext.h)
+
+Splits up gsbitops.h into client interface and implementation support.
+Removes some obsolete code at the same time. (gdevmem.h, gsbitops.h,
+gxbitops.h, gsbitops.c)
+
+Creates the concept of compositing functions and compositing devices
+(compositors). (gscompt.h, gxcomp.h)
+
+Implements the default compositor for alpha-based compositing. (gsalphac.h,
+gsalphac.c)
+
+Creates a store_alpha device that adds alpha channel storage to any other
+device. (gdevalph.c)
+
+Moves alpha channel capability into the dpsnext feature, where it should
+have been all along. (gsalpha.h, gscolor.h, gsalpha.c, gscolor.c,
+gsstate.c)
+
+Implements color premultiplying by (non-unity) alpha values. Currently we
+always premultiply towards white: see gxalpha.h for some comments.
+(gxalpha.h, gxcmap.c)
+
+Reduces the amount of boilerplate in the RasterOp implementation table.
+(gsroptab.c)
+
+Adds an arg_push_temp_string procedure to accommodate the new gp_getenv
+call. (gsargs.h, gsargs.c)
+
+Updates various library APIs to account for the more careful handling of
+file name length. (gdevprn.h, gxclio.h, gxclist.h, gsdevice.c, gxclfile.c,
+gxclmem.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.10"></a>Version 5.10 (11/23/97)</h2>
+
+<p>
+This release, not originally planned, greatly reduces the size of PDF files
+produced by the pdfwrite device, fixes a number of minor problems in PDF
+output, and optionally produces output compatible with Acrobat 2.x, in order
+to address problems reported by NSF in processing these files as part of
+their FastLane electronic proposal submission process. Aside from that, and
+some localized bug fixes, it has minimal changes from 5.03.
+
+<h3><a name="V5.10_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - ansihead.mak referred to unix-ansi.mak, which is actually named
+unixansi.mak. (ansihead.mak)
+ - README referred to an "If you need help" section that was moved to
+new-user.txt. (README)
+
+Updates build information for HP-UX systems. (make.txt)
+
+Updates the information for getting Martin Lottermoser's hpdj driver.
+(new-user.txt)
+
+Improves the error message when a user tries to invoke gswin32c without
+explicitly selecting a device. (dwmainc.cpp)
+
+Removes the author's name and e-mail address from the pdf2ps man page, at
+his request. (pdf2ps.1)
+
+Improves the documentation for BandBufferSpace. (language.txt)
+
+</pre><h3><a name="V5.10_Procedures"></a>Procedures</h3><pre>
+
+Changes the VMS command files so that they don't echo the commands.
+(append_l.com, copy_one.com, rm_all.com, rm_one.com)
+
+</pre><h3><a name="V5.10_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - The "lp" command files all inappropriately set the top margin to
+0.1". (lp386.bat, lp386r2.bat, lpgs, lpgs.bat, lpr2, lpr2.bat)
+ - The lp386[r2].bat command files inappropriately set the
+LanguageLevel to 1. (lp386.bat, lp386r2.bat)
+
+</pre><h3><a name="V5.10_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The PDF writer got confused about the current color if the input
+contained text strings separated only by color changes. (gdevpdf.c)
+ - Some casts between const char * and const byte * were incorrect
+(warnings only). (gdevpdft.c)
+
+Adds a NoCancel parameter to the winpr2 device, which suppresses display of
+the dialog box. (gdevwpr2.c)
+
+</pre><h3><a name="V5.10_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - An "extern" was omitted, causing a duplicate definition of
+build_function_procs. (ifunc.h)
+ - The global pseudo-operator table was too small, causing a
+limitcheck in ps2ascii. (iinit.c)
+ - setcolorspace with a Pattern space with no underlying space would
+cause an error if the current color space was a Pattern space. (zpcolor.c)
+ - The Decode key was optional, not required, in the dictionary form
+of image[mask]. (zimage2.c)
+
+Adds two more PCL/PJL reset sequences to the list of sequences to ignore.
+(gs_init.ps)
+
+</pre><h3><a name="V5.10_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Multi-screen color halftones could produce "seams". (gxcht.c)
+ - A bug in the gcc optimizer on H-P RISC workstations caused all
+curves to be output as lines. (gxpflat.c)
+ - If a non-standard OtherSubr was called before the [h]sbw in a Type
+1 font, a crash could occur. (gxhint3.c)
+ - gxclist.c didn't include string_.h. (gxclist.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.07"></a>Version 5.07 (limited) (10/31/97)</h2>
+
+<p>
+A few more bug fixes for the 5.10 release.
+
+<h3><a name="V5.07_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - Some file and directory names hadn't been updated to match the new
+directory structure on the primary server. (make.txt, new-user.txt)
+
+Adds the URL for reaching URW++. (Fontmap.*)
+
+</pre><h3><a name="V5.07_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - Because the C % operator isn't equivalent to 'modulus' for
+negative numerators, gx_default_strip_tile_rectangle could crash in some
+cases. (gxdevice.h, gdevdflt.c)
+ - In the PDF writer, Dest values were correct (page numbers) for
+GoToR actions, but were incorrect (should be page object references) for
+other actions; also, Rect values were transformed, but should not be.
+(gdevpdfm.c)
+ - In the PDF writer, articles and bookmarks could attempt to write
+multiple Contents streams, which is not allowed. (gdevpdfx.h, gdevpdf.c,
+gdevpdfm.c)
+ - The PDF writer ignored PS (PostScript pass-through) pdfmarks.
+(gdevpdfm.c)
+ - The PDF writer didn't write out the color space parameters for
+CIE-based spaces. (gdevpdfi.c)
+
+</pre><h3><a name="V5.07_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Suffix subclass structures with 4 added pointers skipped the first
+pointer in the superclass when garbage collecting, possibly causing invalid
+memory accesses. (gsstruct.h)
+ - An argument list incompatibility in a procedure used in a static
+structure initialization upset some compilers. (gsfunc.h, gsfunc0.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.06"></a>Version 5.06 (limited) (10/7/97)</h2>
+
+<p>
+This fixes a few more bugs in the PDF writer, and a few other very obscure
+problems. It also adds support for Functions and brings multiple contexts
+closer to working, neither of which we expect actually to be used any time
+soon. This is intended to be the candidate fileset for the 5.10 release,
+but since we had to tinker with a delicate part of the PDF writer to fix a
+problem affecting visual quality with Acrobat, there may be new bugs that
+will have to be fixed in yet another candidate fileset.
+
+<h3><a name="V5.06_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - Jim McPherson's e-mail address was out of date. (devices.txt)
+ - Invoking ps2pdf with only a single file name is supported on some
+versions of Windows NT and OS/2, not only on Unix. (ps2pdf.txt)
+ - The ps2pdf documentation didn't indicate that ps2pdf can use the
+Windows "console mode" executable as well as the MS-DOS executable.
+(ps2pdf.txt)
+ - The list of which Distiller parameters actually have an effect was
+incorrect. (gdevpdfp.c)
+
+Notes that the cdj550 driver is compatible with the H-P 660C and 660Cse.
+(devs.mak, devices.txt)
+
+Adds a note about using Acrobat Reader fonts. (install.txt, use.txt)
+
+Notes that the LJ 5P, like the 5L, is not a PCL XL printer. (devs.mak)
+
+Notes problems and possible problems with certain versions of the Borland
+C++ compiler. (make.txt)
+
+Notes the change in -Z:. (use.txt)
+
+Updates the uniprint documentation for this release. (devices.txt)
+
+Expands the rationale for the large resolution in the bbox device.
+(gdevbbox.c)
+
+Notes that the H-P DeskJet 600 series can use the djet500 driver with -r600.
+(devs.mak)
+
+</pre><h3><a name="V5.06_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - Vector devices didn't include a necessary dependency on the stream
+package. (lib.mak)
+ - There were several bugs in the ps2pdf.bat file. (ps2pdf.bat)
+
+Changes -Z: so it prints some summary lines as well as minimal information
+about banding. This makes the -ZA trace compatible with our memory leak
+tool. (iminst.h, imain.c)
+
+</pre><h3><a name="V5.06_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - ps2epsi sometimes produced a too-large bounding box, or even
+caused a rangecheck. (ps2epsi)
+
+At the advice of a user, removes the RESOLUTION=100 line from pv.sh.
+(pv.sh)
+
+</pre><h3><a name="V5.06_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The PDF writer produced incorrect output for stroke operations
+with unusual CTMs, because PDF, unlike PostScript, applies the CTM to the
+path at the time of the fill or stroke, not as the path is being
+constructed. (gdevpdfd.c)
+ - Vector devices returned an error, instead of falling back to the
+default implementations, when filling or stroking with a pattern.
+(gdevvec.c)
+ - The PDF writer freed an internal stream structure using the wrong
+allocator, possibly causing memory corruption. (gdevpdf.c)
+ - The uniprint driver had some compilation problems, and possibly
+other problems as well (consult the source file). (gdevupd.c, *.upp)
+ - With -dNOCACHE, the PDF writer wrote all text in the base 14 fonts
+twice, once as text and once as outlines. (gs_pdfwr.ps, gdevpdfd.c)
+ - The PDF writer didn't properly recognize Symbol and ZapfDingbats
+as being among the base 14 fonts. (gs_pdfwr.ps)
+ - When using Acrobat Reader with font smoothing turned on, the base
+14 fonts appeared too bold on the screen in files produced by ps2pdf,
+because Reader decides that a 100-unit font at 1 unit = 0.1 point should be
+bolder than a 10-unit font at 1 unit = 1 point. (gdevpdfx.h, gdevpdf.c,
+gdevpdft.c)
+ - The PDF writer didn't convert View/Page specifications for
+bookmark pdfmarks to a Dest key, causing bookmarks not to work.
+(gdevpdfm.c)
+
+Speeds up the PDF writer by only passing the encoding if it isn't
+StandardEncoding. (gs_pdfwr.ps, gdevpdft.c)
+
+Changes the PDF writer's handling of unencoded glyphs. Adds device
+parameters ReEncodeCharacters and ReAssignCharacters to control how
+unencoded glyphs are handled. (These parameters will go away when we handle
+variant encodings in full generality.) (gdevpdfx.h, gdevpdf.c, gdevpdfp.c,
+gdevpdft.c)
+
+</pre><h3><a name="V5.06_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - setpagedevice didn't restore the stack properly if it failed.
+(gs_setpd.ps)
+ - 0 identmatrix didn't cause an error. (gs_init.ps)
+ - Devices expecting array-valued parameters didn't accept packed
+arrays. (iparam.c)
+
+Starts to de-implement support for special handling of the stacks on
+machines with 16:16 addressing. Currently this only happens if DPNEXT is
+defined. (istack.h)
+
+Brings multiple contexts closer to working. The interpreter can now run
+some very simple test cases. (int.mak, icontext.h, igstate.h, interp.h,
+istruct.h, icontext.c, interp.c, zcontext.c, zgstate.c)
+
+Adds support for FunctionType 0 Functions. (ifunc.h, iref.h, store.h,
+zfunc.c, zfunc0.c)
+
+Updates a few remaining pseudo-operators in gs_init.ps to take advantage of
+automatic operand and dictionary stack restoration: eexec, identmatrix,
+pathbbox. Not updated yet: filter. (gs_init.ps)
+
+</pre><h3><a name="V5.06_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - Separation color spaces weren't supported. (gs_pdf.ps,
+pdf_draw.ps)
+
+</pre><h3><a name="V5.06_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The size argument to gs_free was wrong in an out-of-memory case.
+(This was irrelevant, since gs_free only uses the size argument for
+error-checking during debugging.) (gdevprn.c)
+ - When freeing a block on the C heap, if -Z@ was set, the block's
+header wasn't filled with the sentinel pattern. (Only relevant when
+debugging.) (gsmemory.c)
+ - The C heap allocator didn't fix up pointers properly when freeing
+a block, causing unpredictable memory corruption after a 'resize' call.
+(gsmemory.c)
+ - Using a show operator inside the procedure of a cshow with a
+composite font could cause an invalid access. (gschar.c)
+
+Adds support for FunctionType 0 Functions. (gsdsrc.h, gsfunc.h, gsfunc0.h,
+gxfunc.h, gsdsrc.c, gsfunc.c, gsfunc0.c)
+
+Moves the GC descriptor for arrays of constant strings to a place where it
+is more visible. (gscie.h, gsstruct.h, gscie.c, gsmemory.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.05"></a>Version 5.05 (limited) (9/24/97)</h2>
+
+<p>
+This fixes a few bugs found in the first few days of testing 5.04. There
+will probably be several more small incremental filesets before the next
+public release.
+
+<h3><a name="V5.05_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - The Windows code wouldn't compile with the latest MSVC++, because
+Microsoft changed the prototype for fprintf. (gp_msio.c)
+
+</pre><h3><a name="V5.05_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - A picky compiler complained about some omitted casts. (gdevpdf.c,
+gdevpdft.c)
+ - Writing a PDF file with any synthesized fonts could produce
+slightly garbled output or possibly even an invalid memory access, because a
+string was not terminated. (gdevpdft.c)
+ - When writing a PDF file, the first character of a string could get
+placed off the page, because of a matrix bookkeeping error. (gdevpdft.c)
+
+</pre><h3><a name="V5.05_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - In case of an error, setpagedevice executed a 'stop'
+unconditionally, rather than just signalling an error through the error
+machinery. (gs_setpd.ps)
+
+</pre><h3><a name="V5.05_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - Files with unknown operators caused errors, even if the BX
+operator was used to disable the error report. (pdf_base.ps)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.04"></a>Version 5.04 (limited) (9/21/97)</h2>
+
+<p>
+This is a test fileset for an unplanned release that greatly reduces the
+size of PDF files produced by the pdfwrite device, and also optionally
+produces output compatible with Acrobat 2.x, in order to address problems
+reported by NSF in processing these files as part of their FastLane
+electronic proposal submission process. Aside from that, and some localized
+bug fixes, it has minimal changes from 5.03.
+
+<h3><a name="V5.04_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - George Cameron's address was listed with a domain of .ukis rather
+than .uk. (devices.txt)
+ - The default value of ORIENT1 was given as false rather than true.
+(use.txt)
+ - The documentation for ps2pdf said one can omit the output file
+name, but this is only true on Unix systems. (ps2pdf.txt)
+ - The documentation for ps2pdf didn't make clear that the executable
+must be named gs on Microsoft OSs. (ps2pdf.txt)
+ - ht_cache is actually allocated with the first gstate, not on
+demand. (gsstate.c)
+
+Slightly improves the documentation of .type1execchar. (zchar1.c)
+
+Clarifies the distinction between Ghostscript (PostScript) commands and
+shell commands, for the benefit of users brainwashed by Microsoft.
+(use.txt)
+
+Improves the usage synopsis in the ps2epsi man page. (ps2epsi.1)
+
+Adds a reference to Uli Wortmann's H-P drivers. (new-user.txt)
+
+Improves the documentation of GS_FONTPATH, distinguishing it from GS_LIB and
+the search path. (use.txt)
+
+Notes that on some systems, one must substitute 'installbsd' for 'install'
+in the makefile and make other edits. (install.txt, ansihead.mak,
+cc-head.mak, gcc-head.mak)
+
+Notes that ps2epsi is no longer maintained. (ps2epsi.ps)
+
+Clarifies the availability of support. (new-user.txt)
+
+</pre><h3><a name="V5.04_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - The uniprint driver was accidentally omitted from the default
+Watcom (MS-DOS) and OS/2 configurations. (watc.mak, os2.mak)
+ - The suggested compiler switches for Digital Unix were incorrect.
+(make.txt)
+ - The cp.cmd script file didn't work in the newest versions of OS/2.
+(cp.cmd)
+ - The compilation rules for some Windows-specific files didn't
+include ccf32.tr in their dependencies, which could cause the compilation to
+fail. (winint.mak)
+
+Removes the lev2min configuration, since we no longer support 16-bit Windows
+environments. (int.mak)
+
+</pre><h3><a name="V5.04_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - ps2epsi.bat always appended to the output file, rather than
+writing over it. (There are probably other bugs in this script file.)
+(ps2epsi.bat)
+ - The output of pdf2ps didn't execute properly on some printers,
+especially Level 1 printers. (gs_pdf.ps)
+
+Makes ps2pdf do an initial 'save', which causes fonts to be retained better
+across pages. (ps2pdf, ps2pdf.bat)
+
+Adds an option to pcharstr.ps to produce C-like rather than PostScript-like
+output. (pcharstr.ps)
+
+</pre><h3><a name="V5.04_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The LaserJet III and higher printers weren't able to print in the
+narrow strip between 1/6" and 1/4" from the left edge of the page.
+(gdevdjet.c)
+ - The PCL XL drivers produced incorrect output which often caused a
+PCL XL NoCurrentFont error at the beginning of the second page. (gdevpx.c)
+ - The GC descriptors for the pswrite device and for PS/PDF devices
+were incorrect, causing the GC to smash memory. (gdevpsdf.h, gdevps.c)
+ - The pdfwrite device didn't have a GC descriptor at all. ******
+DISABLED because the device allocates all its temporary structures directly
+on the C heap. ****** (gdevpdf.c)
+ - When the PDF writer wrote out the Dest key in an action
+dictionary, it always used a page object instead of a page number, even if
+the page was in another file or didn't exist; it now always uses a page
+number. (gdevpdfm.c)
+ - The PDF writer gave an error if a file redefined any of the 14
+known fonts. (gs_pdfwr.ps)
+ - The PDF writer didn't handle copy_mono with a non-zero sourcex.
+(This probably had no effect in practice.) (gdevpdfi.c)
+
+Splits off gdevpdfd.c (driver drawing procedures) from gdevpdf.c, since the
+file was getting too large. (gdevpdfx.h, gdevpdf.c, gdevpdfd.c)
+
+Adds recognition of the CompressPages, CompatibilityLevel, and
+UseFlateCompression device (distiller) parameters to the PDF writer. If
+CompressPages is true (default), CompatibilityLevel is 1.2 (default), and
+UseFlateCompression is true (default), page contents will be compressed with
+Flate ("zip") compression; otherwise, they will not be compressed.
+
+Restructures the PDF writer to produce much smaller and faster PDF files, by
+restructuring its handling of text to defer all resources to the end of the
+file, eliminate duplicate Font resources, turn characters into Type 3 fonts
+rather than Image XObjects, use more efficient text positioning commands,
+and optionally (but by default) Flate-compress the contents streams. Also
+removes some unnecessary spaces in the output. (gdevpdfx.h, gdevpdf.c,
+gdevpdfd.c, gdevpdfi.c, gdevpdfm.c, gdevpdft.c)
+
+Improves the PDF writer so that it no longer converts stroke operations with
+non-uniform CTMs to fills, and doesn't bother to stroke empty paths at all.
+(gdevpdfd.c)
+
+Speeds up the "alternate" X devices substantially. (gdevxalt.c)
+
+</pre><h3><a name="V5.04_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - Filling a string with a Pattern caused a crash with the PDF
+writer. (gs_pdfwr.ps)
+ - Converting a file with no marks at all to PDF produced invalid
+output. (gdevpdf.c)
+ - .endpage, which is called at the end of every page, sometimes left
+2 extra values on the stack. (gs_setpd.ps)
+ - A definefont with a Type 1 font lacking a .notdef character didn't
+cause an invalidfont error. (bfont.h, zfont1.c, zfont2.c)
+ - On anti-aliased devices, characters from Type 1 fonts with an
+incorrect or missing FontBBox came out a factor of 2 or 4 too small if the
+character was small enough to cache. (zchar1.c)
+ - If a file redefined certain operators, loading Type 1 fonts could
+fail. This problem was fixed in an earlier release, and somehow the fix got
+undone. (gs_type1.ps)
+ - cshow didn't set the correct current font when running the
+procedure, and didn't restore it properly afterwards. (zchar.c, zchar2.c)
+ - With certain compilers, the interpreter loop caused unaligned
+memory accesses on DEC Alpha systems running Windows NT. (iref.h)
+
+Adds freelist validation to the memory checker. (ilocate.c)
+
+Changes the debugging switch for bypassing the garbage collector from
+compile-time to run-time. (igc.c)
+
+Adds the real operators for view clipping (but they don't do anything yet,
+because view clipping isn't implemented at the library level). (zdps.c,
+zvmem.c)
+
+Completes the implementation of defineusername. (zdps.c)
+
+Adds an implementation of wtranslation, by simply reading a device parameter
+of the same name. (gs_dps.ps)
+
+</pre><h3><a name="V5.04_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - Lab color spaces weren't implemented, and gave an error.
+(gs_pdf.ps)
+ - Images only worked with built-in color spaces, not color space
+resources. (pdf_draw.ps)
+ - Embedded font subsets were treated as undefined. (pdf_font.ps)
+
+</pre><h3><a name="V5.04_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - strokepath sometimes clipped the path to the current clipping
+region, which it should never do. (gxstroke.c)
+ - The initial X/Y position for Type 2 charstrings (CFFs) sometimes
+was set incorrectly. (gstype2.c)
+ - Memory management for dash patterns was still incorrect (despite
+the fix in 4.36), possibly causing snarled freelists and invalid memory
+references. (gsline.c, gsstate.c)
+ - The saved gstate of a Pattern instance was freed properly when the
+instance was freed by reference counting as a result of setting the color or
+color space, but not when the instance was freed by reference counting
+anywhere else. (gspcolor.c)
+ - A test for whether to use a slower form of oversampling was
+incorrect. (Probably only a performance bug.) (gschar.c)
+ - cshow didn't set the correct current font when running the
+procedure, and didn't restore it properly afterwards. (gsfont.h, gschar.c,
+gsfont.c)
+
+Improves allocator validity checking when DEBUG is set. (gsalloc.c)
+
+Adds a couple of missing FontType values. (gxftype.h)
+
+Changes the default conversions between CMYK and RGB colors back to the
+Adobe rules documented in the Red Book, to reduce output differences from
+Adobe implementations. (gxdcconv.c)
+
+Adds a graphics state element for view clipping, under an #ifdef DPNEXT, and
+implementations of the view clipping operators (but not the logic for doing
+the actual clipping). (gsstate.h, gzstate.h, gsstate.c)
+
+Removes the redundant clip_rule variable from the graphics state (which
+wasn't used for anything). (gzstate.h, gspath.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.03"></a>Version 5.03 (8/8/97)</h2>
+
+<p>
+The only reason for this release is to fix two serious bugs introduced
+between 5.01 and 5.02. We fixed a few other very localized and low-risk
+bugs at the same time.
+
+<h3><a name="V5.03_Documentation"></a>Documentation</h3><pre>
+
+Removes the "(if relevant)" from the bug reporting form, since about 25% of
+the forms are submitted without a URL or any other data. (bug-form.txt)
+
+Adds a discussion of single-use procedures to the style guide.
+(c-style.txt)
+
+Updates the information about obtaining Ghostscript on physical media.
+(new-user.txt)
+
+Updates the information about ps_view. (new-user.txt)
+
+</pre><h3><a name="V5.03_Procedures"></a>Procedures</h3><pre>
+
+Adds the uniprint driver to all platforms. (*.mak)
+
+Changes the contents of the pc.tar.gz archives:
+ - Adds *.upp.
+ - Removes *.res.
+ - Removes cp.bat, font2c.bat, mv.bat, rm.bat, wmakebat.bat,
+ cp.cmd, mv.cmd and rm.cmd, and gv-vms.hlp.
+
+Removes an obsolete script file. (tar_mv)
+
+</pre><h3><a name="V5.03_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The uniprint driver didn't handle an increase in media height
+correctly. (gdevupd.c)
+
+</pre><h3><a name="V5.03_Platforms"></a>Platforms</h3><pre>
+
+Fixes bugs:
+ - Printing to printers other than LPT1 under MS Windows no longer
+worked. (bug introduced in 5.02) (gp_mswin.c)
+ - Drag-and-drop didn't work under Windows NT (or other 32-bit
+Windows environments). (dwtext.cpp)
+ - Sequent systems needed an additional system header file.
+(time_.h)
+
+</pre><h3><a name="V5.03_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - The substitutions Myriad =&gt; Times and Minion =&gt; Helvetica were
+incorrect; they should be the other way around. (gs_fonts.ps)
+ - MyriadPkg wasn't recognized as a condensed font. (gs_fonts.ps)
+ - Univers wasn't recognized as mapping to Helvetica. (gs_fonts.ps)
+
+</pre><h3><a name="V5.03_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - A line of debugging code, printing the sections of 3 regions of
+TrueType fonts being loaded, was accidentally left in. (gs_ttf.ps)
+ - TrueType fonts whose pre-glyf data had odd length were broken
+(typically gave a rangecheck error), because of the fix to treat the odd
+byte of individual sfnts strings as padding per Adobe documentation. (bug
+introduced in 5.02) (gs_ttf.ps)
+
+</pre><h3><a name="V5.03_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - If a real-number token in a CFF had an even number of nibbles, a
+unmatchedmark error would occur. (gs_cff.ps)
+ - If the strings Index in a CFF included an empty string, a
+rangecheck error would occur. (gs_cff.ps)
+ - CFFs with non-standard Encodings that included standard strings
+would get a typecheck error. (gs_cff.ps)
+
+</pre><h3><a name="V5.03_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Using %d in an OutputFile name didn't substitute the page number.
+(bug introduced in 5.02) (gsdevice.c)
+ - In Type 2 CharStrings, if a hintmask occurred at the beginning, it
+wasn't recognized as also incorporating the function of vstemhm.
+(gstype2.c)
+ - The data bytes for hintmask and cntrmask weren't printed for
+debugging. (gstype2.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.02"></a>Version 5.02 (7/28/97)</h2>
+
+<p>
+Because of an ISP failure that delayed the 5.0 announcement for 12 days, the
+5.01 release only responded to a few days of bug reports; 5.02 fixes some
+problems that should have been fixed in 5.01, as well as a large number of
+obscure problems uncovered by Genoa testing.
+
+<h3><a name="V5.02_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - The documentation for building on the Intergraph Clipper was out
+of date. (make.txt)
+ - ESC was claimed to be a self-delimiting character. (gs_init.ps)
+ - Removes the documentation claiming that ^D and ^Z are
+self-delimiting. (language.txt)
+ - Document that -dSUBSTFONT doesn't create a font with the requested
+font name. (use.txt)
+ - Ghostscript was defined as compatible with PDF 1.1 rather than PDF
+1.2. (language.txt)
+ - The description of gcc problems on Alpha didn't make it clear that
+the use of gcc was optional, not required. (make.txt)
+ - The description of how to use GNU make on VMS systems was
+inaccurate. (make.txt)
+
+Improves the documentation for building on H-P RISC systems. (make.txt)
+
+Corrects the discussion of Cygnus' licensing terms for the cygwin32
+environment. (make.txt)
+
+Removes the apology for the poor quality of Ghostscript's TrueType
+rasterizer, since the quality is now quite good. (fonts.txt)
+
+Documents the fact that one must use # rather than = with Watcom C.
+(use.txt)
+
+Documents the updates and additions to the uniprint driver. (devices.txt)
+
+Adds some material to Aladdin's C style guide. (c-style.txt)
+
+Documents the fact that using gmake requires VMS 6.2 or later on Alphas and
+7.1 (perhaps 7.0) or later on VAXen. (make.txt)
+
+Adds an example EPS file. (psfiles.txt)
+
+Adds some information about compiling and linking under OS/2. (make.txt)
+
+Expands the description of XLIBDIR and XLIBDIRS. (*head.mak)
+
+Adds a new pointer to information on using a Kanji font with Ghostscript.
+(new-user.txt)
+
+Documents the use of /Resource/&lt;category&gt;/&lt;resource&gt; as the default place
+where resources are sought. (use.txt)
+
+Updates the documentation on building with MSVC++ to reflect the makefile
+changes. (make.txt)
+
+</pre><h3><a name="V5.02_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - In openvms.mak, several ifdef tests were wrong. (openvms.mak)
+ - One CP command was slightly inconsistent with the others.
+(zlib.mak)
+ - If libz and libpng were both shared, libz was linked first,
+resulting in some undefined references. (libpng.mak)
+ - The VMS makefile didn't interact properly with VMS's version
+numbering facility. (copy_one.com)
+
+Updates the VMS DCL script one last time, to handle libpng version 96.
+(vms.mak)
+
+Restructures the MSVC++ makefiles to allow building the graphics library
+without the PostScript interpreter. (bcwin32.mak, msvc4.mak[deleted],
+msvc5.mak[deleted], msvc32.mak, msvccom.mak, watcw32.mak,
+wincom.mak[deleted], winint.mak, winlib.mak)
+
+Adds a makefile to create a library-only demo program under MSVC++, like the
+ones for Unix/gcc and MS-DOS/Watcom. (msvclib.mak)
+
+Adds an example EPS file. (ridt91.eps, unix-end.mak)
+
+Removes support for libpng release 0.88, which is now quite obsolete.
+(libpng.mak)
+
+</pre><h3><a name="V5.02_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - ps2pdf.bat, unlike ps2pdf, didn't accept options. (ps2pdf.bat)
+ - echogs used 'const' in one place, which wasn't accepted by some
+very old compilers. (echogs.c)
+ - pdf2ps output Orientation, which it shouldn't. (pdf_main.ps)
+
+Makes the usage message from ps2pdf.bat include the options, like ps2pdf.
+(ps2pdf.bat)
+
+Changes the printpath utility so that its output is legal PostScript code.
+(ppath.ps)
+
+Makes pdf2dsc add DSC comments for the bounding box (if a CropBox is
+available in the PDF file) and the orientation. (pdf2dsc.ps)
+
+</pre><h3><a name="V5.02_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - The get_bits operation wasn't implemented for the vgalib driver.
+(gdevvglb.c)
+ - The dnj650c driver output an extra % near the end of the file.
+(gdevcdj.c)
+ - The definition of pprintd2 didn't have a line break before the
+procedure name, confusing ansi2knr. (gdevpstr.c)
+ - EPS files produced invalid PDF output. (gdevpdf.c)
+ - "Vector" output devices didn't recognize %d in output file names,
+or - for output to stdout. (gdevprn.h, gxdevice.h, gdevprn.c, gdevvec.c,
+gsdevice.c)
+ - With the pdfwrite driver, restore or grestore would cause a
+rangecheck error in .installpagedevice if a setpagedevice had been executed.
+(gdevpdfp.c)
+ - The pdfwrite driver produced garbage output for text rotated by
+angles that were only infinitesimally different from multiples of 90
+degrees. (gdevpdft.c)
+ - The pnm[raw] driver didn't handle anti-aliasing properly.
+(gdevpbm.c)
+ - The PDF writer didn't scale the parameters for [a][width]show
+correctly. (gs_pdfwr.ps, gdevpdft.c)
+
+Fixes some minor compilation warnings not affecting code functionality.
+(gdevbbox.c, gdevpdfm.c, gshtscr.c, gsmemory.c, gxccman.c, gxfill.c,
+gximage0.c)
+
+Fixes some bugs in the uniprint driver and adds some more printer models.
+(gdevupd.c, bjc610a*.upp, bjc610b*.upp, necp2x6.upp, stc1520h.upp)
+
+Makes a small change for clean compilation on BeOS. (gdevcdj.c)
+
+Updates the PNG driver to use updated API calls for allocating/initializing
+and freeing the PNG structures. (gdevpng.c)
+
+</pre><h3><a name="V5.02_Platforms"></a>Platforms</h3><pre>
+
+Refactors the MS Windows code to allow building the library without the
+interpreter. (gs_msio.c, gs_mslib.c, gp_mswin.c)
+
+</pre><h3><a name="V5.02_Fonts"></a>Fonts</h3><pre>
+
+Fixes bugs:
+ - definefont was executed twice on TrueType fonts. (No bad
+consequences, just unnecessary work.) (gs_ttf.ps)
+
+</pre><h3><a name="V5.02_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - The fix for the 'stopped' around run_string_* in 5.01 was made
+incorrectly. (gs_init.ps)
+ - Many operators that expect a matrix operand didn't accept packed
+arrays. (iutil.c)
+ - The default CRD didn't have an explicit BlackPoint, which some
+Genoa tests require. (gs_lev2.ps)
+ - A stack protection fix caused setscreen and setcolorscreen with
+dictionary operands to give a typecheck. (gs_dps2.ps)
+ - Executing a string didn't handle tail recursion properly if the
+last token was followed by a single whitespace character. (interp.c)
+ - Clearing the error indication didn't set errorname to null.
+(gs_init.ps)
+ - Some unexpected items appeared on the execution stack, confusing
+some of the Genoa tests. (gs_init.ps, istack.h, istack.c, zcontrol.c)
+ - The dummy definitions for setucacheparams/ucachestatus didn't look
+enough like the real ones. (gs_dps2.ps)
+ - Insideness tests didn't work, because the hit detection device
+width and height weren't set up. (zupath.c)
+ - defineuserobject didn't use the same algorithm for growing the
+array as Adobe interpreters. (gs_dps2.ps)
+ - eq and ne didn't work correctly on save objects. (iutil.c)
+ - findfont used =string internally, interfering with PostScript
+programs that also used it. (gs_fonts.ps)
+ - cshow didn't set up scaled versions of base fonts as the current
+font. (zchar2.c)
+ - defineresource didn't make the resource value read-only.
+(gs_res.ps)
+ - If inustroke got an error, it could return without an error
+indication and without changing the stack. (zupath.c)
+ - The arrays returned by different invocations of currentcolorspace
+with the same device color space weren't guaranteed to be eq. (gs_lev2.ps)
+ - Out-of-range integers followed by a '.' were converted to names
+rather than reals. (iscan.c, iscannum.c)
+ - resourceforall caused an invalidaccess error if currentglobal was
+true but the procedure, template, or scratch string was in local VM.
+(gs_res.ps)
+ - In many places, integer values were converted to floats rather
+than doubles, losing precision. (ichar.h, icharout.h, ifont.h, iutil.h,
+idparam.c, iparam.c, iutil.c, zchar.c, zchar1.c, zchar42.c, zcharout.c,
+zcie.c, zcolor.c, zcolor1.c, zcolor2.c, zcontrol.c, zcsindex.c, zcssepr.c,
+zdpnext.c, zdps1.c, zfont.c, zfont2.c, zgstate.c, zhsb.c, zht.c, zmath.c,
+zmatrix.c, zmedia2.c, zpath.c, zpath1.c, zupath.c)
+ - The TransformPQR procedure in the default CRD didn't pop its
+auxiliary operands from the stack. (gs_lev2.ps)
+ - Because of an incorrect stack depth check, setcolorrendering
+sometimes produced a stackunderflow. (zcrd.c)
+ - sethalftone caused an invalidaccess error if the HalfTone type was
+not 5, the dictionary was in local VM, and the current VM was global.
+(gs_dps2.ps)
+ - writeobject and printobject caused an invalidaccess error if the
+object being written was in local VM and the current VM was global.
+(gs_btokn.ps)
+ - ustrokepath appended the strokepath segments to the current path,
+rather than replacing the path. (zupath.c)
+ - restore incorrectly purged from the character cache any characters
+in a font being freed, even if the font had a UID. (zfont.c)
+ - The definition of zimage_opaque_setup confused ansi2knr.
+(zimage.c)
+ - Type 42 fonts that included the padding byte in each sfnts string
+didn't work if sfnts had more than one string. (zfont42.c)
+ - Doing a garbage collection at the same time as handling a
+stackoverflow failed to update the object that needed re-execution, causing
+the interpreter to execute random data. (interp.c)
+ - %stdout and %stderr weren't flushed if they were closed
+explicitly. (ziodev.c)
+
+For greater Adobe compatibility:
+ - Changes setdash to limit dash patterns to 11 elements. (This is
+enforced at the PostScript level: the graphics library doesn't have a
+limit.) (gs_init.ps)
+ - Changes ^D and ^Z so they are not self-delimiting characters, and
+changes ^K so it is not a whitespace character. (gs_init.ps, iscan.c,
+scantab.c)
+ - Makes = cause an error on non-read-accessible objects rather than
+printing them as --nostringval--. (gs_init.ps)
+ - When -dSUBSTFONT= is used, makes findfont return the actual named
+font, rather than a copy with the FontName changed to the requested one.
+(gs_fonts.ps)
+ - CFF fonts with a non-default FontMatrix caused an error.
+(gs_cff.ps)
+
+Fixes some minor compilation warnings not affecting code functionality.
+(iparam.c, zfcmap.c)
+
+Strengthens the test of o-stack validity in the main interpreter loop in
+debug mode. (interp.c)
+
+Changes the filling rule for Type 1 fonts from winding-number to even-odd.
+This affects no properly designed fonts, and seems to match Adobe
+interpreters better. (zchar1.c)
+
+Implements non-standard Encodings in CFF fonts. (gs_cff.ps)
+
+Changes the default halftone screen for 600 dpi printers from 85 to 106 lpi,
+which reduces the number of halftone levels from 50 to 32 but produces
+visually better output. (gs_init.ps)
+
+</pre><h3><a name="V5.02_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - Pattern color spaces weren't supported. (gs_pdf.ps, pdf_draw.ps)
+
+Causes references to undefined named Destinations to be ignored rather than
+giving an error. (pdf_main.ps)
+
+</pre><h3><a name="V5.02_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - A 'const' was omitted in a declaration, upsetting several
+compilers. (gxclread.c)
+ - arct and arcto gave an error for negative radii. (gspath1.c)
+ - The collinearity check for arct[o] could cause some arcs to be
+rendered as single points. (gspath1.c)
+ - Uncolored patterns sometimes came out blank, because the color
+wasn't set before calling the PaintProc. (gspcolor.c)
+ - The phase for masking colored patterns was wrong, producing
+incorrect output. (gspcolor.c)
+ - reversepath always appended the current position to the new path,
+rather than only doing so if the path just consisted of a single moveto.
+(gxpath2.c)
+ - cshow didn't restore the current font properly. (gschar.h,
+gschar.c)
+ - The check for whether characters can be cached didn't consider
+PaintType values other than 0 and 2. (gschar.c)
+ - The bounding box device didn't handle PageCount properly.
+(gdevbbox.c)
+ - Uncached fonts with a next_char procedure didn't set the glyph
+properly. (gschar.c)
+ - Parallelograms with ax &lt; bx, ay &lt; by, and the 'a' edge to the
+right of the 'b' edge weren't filled, causing pixels to be omitted from some
+highly skewed images. (gdevddrw.c)
+ - 12-bit-per-pixel images in portrait orientation filled each scan
+line with the value of the last pixel -- i.e., didn't work. (gximage4.c)
+ - The path representation of a clipping path could include some
+inappropriate, leftover path segments. (gxcpath.c)
+ - The angle for the miter check was computed in device space rather
+than in user space. (gxstroke.c)
+ - TrueType fonts were lumpy, and the accents of accented characters
+were placed incorrectly. (gstype42.c)
+ - Some macros used for generating device prototypes didn't
+parenthesize all uses of their parameters, causing possible errors if the
+parameters were expressions rather than numeric constants. (gdevprn.h)
+ - When banding, strip halftones (typically produced by
+AccurateScreens) sometimes didn't have the correct phase. (gxbitmap.h,
+gxclread.c)
+ - A minor change was required for correct compilation with Microsoft
+VC++. (memory_.h)
+ - Under certain conditions, character shapes could get wildly
+distorted by hints. (bug introduced in 5.01) (gxhint3.c)
+
+For greater Adobe compatibility:
+ - Changes reversepath so that the implicit line created by closepath
+is not considered a "segment". (gxpath2.c)
+
+Fixes some minor compilation warnings not affecting code functionality.
+(gstype1.c)
+
+Changes the font and scaled-font caches so that if the font has a UID
+(UniqueID or XUID), the UID and FontType are both considered part of the
+key, and we don't cache fonts with non-zero PaintType. (The Red Book says
+that changing anything except the Encoding should also change or remove the
+UID, but some files don't do this. The current fix is probably not
+sufficient, but it is a step in the right direction.) (gxfcache.h,
+gxccache.c, gxccman.c)
+
+Splits off the definitions of font_type and fbit_type into a separate file,
+since gxfcache.h now needs font_type. (gxfcache.h, gxfont.h, gxftype.h)
+
+Makes the Flex feature in Type 1 fonts conform to the published
+specification, rather than always producing curves. The comment in the code
+(and in the NEWS entry for release 2.6) says that this breaks some very old
+Adobe fonts: if this turns out to be a problem, we'll figure out a test that
+will do the right thing for these fonts. (gstype1.c)
+
+Provides 'double' versions of some API functions to accommodate the
+increased use of doubles in the interpreter. (gschar.h, gschar.c)
+
+Adds a compile-time option to force the use of strip halftones, for
+debugging. (gshtscr.c)
+
+Changes the hint snapping algorithm in the Type 1 rasterizer so that it will
+only change a stem width by a maximum of 1/2 pixel rather than 1 pixel.
+This appears to help with dropouts at certain sizes. (gxhint2.c)
+
+Makes a few changes for clean compilation on BeOS. (stdpre.h, stat_.h,
+gxcpath.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.01"></a>Version 5.01 (6/22/97)</h2>
+
+<p>
+This fixes a few bugs reported in the 5.0 release. This will be a
+commercially supported release.
+
+<h3><a name="V5.01_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - README referred to an obsolete file devarch.txt. (README)
+ - The comment on flip4x12 had a typo. (gsflip.c)
+ - The algorithm comments for adjusted_y_spans_pixel weren't precise
+enough. (gxfill.c)
+ - The usage message printed by the ps2pdf script didn't indicate
+that one can now insert options before the input file name. (ps2pdf)
+ - The file searching documentation didn't indicate that paths
+beginning with ./ or ../ are considered "explicit" and not subject to
+searching. (use.txt)
+ - The description of SEARCH_HERE_FIRST in the per-platform makefiles
+indicated that it only applied to initialization files, not to files
+specified on the command line as well. (*.mak)
+ - There were still some references to 16-bit implementations.
+(install.txt)
+
+Clarifies that -dNODISPLAY also suppresses output to other devices.
+(use.txt)
+
+Adds the e-mail address for reporting problems to the bug report form, and
+also a space to report makefile changes. (bug-form.txt)
+
+Adds a note under -g indicating that it fixes the media size. (use.txt)
+
+Adds an explanation of why Ghostscript can't use the system libraries for
+the JPEG package. (make.txt)
+
+Notes that ps2ai doesn't work properly with Adobe's Helvetica-Oblique font,
+and other fonts whose original FontMatrix involves skewing or rotation.
+(psfiles.txt)
+
+Updates the uniprint documentation slightly. (devices.txt)
+
+Notes that the new lj5 drivers do not work with the LJ5L. (devs.mak)
+
+Modifies the Aladdin Free Public License slightly to make it clearer that
+the exception for freely redistributable CD-ROMs only applies if the CD-ROM
+is being distributed by itself, not with anything else commercial. (This
+has always been the case, but the previous wording wasn't clear enough.)
+(PUBLIC)
+
+Notes that gcc with -O still has code generation problems on H-P RISC
+machines. (make.txt)
+
+Adds a pointer to Martin Lottermoser's hpdj driver. (new-user.txt)
+
+Enhances and reorganizes the documentation for building Ghostscript, in
+response to user feedback. (make.txt, install.txt)
+
+Adds a description of the EPSF recognition feature. (language.txt)
+
+</pre><h3><a name="V5.01_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - string__h was misspelled string_h in one place. (lib.mak)
+ - gs_dps.ps wasn't installed by "make install". (unix-end.mak)
+ - ccgs (used with non-ANSI C compilers) didn't do the right thing
+with -DPNG_USE_CONST. (ccgs)
+
+Adds support for version 96 of libpng, and updates all the makefiles to
+reference it. (libpng.mak, *.mak)
+
+Updates the MSVC makefiles to get rid of some warning messages and provide a
+way to specify a library path for the final link. (msvc*.mak)
+
+</pre><h3><a name="V5.01_Utilities"></a>Utilities</h3><pre>
+
+Fixes bugs:
+ - The usage message for the gslp utility had a minor typo.
+(gslp.ps)
+ - The "line printer" utility didn't expand tabs properly when
+producing PostScript output. (gslp.ps)
+ - The gslp utility didn't automatically include the date. (gslp)
+ - The line printer scripts didn't pass the script name to the
+utility program, so the usage message didn't use the correct name. (gsbj*,
+gsdj*, gslj*, gslp*, lp*)
+
+Modifies the gslp utility so that invoking it with no arguments prints the
+usage message. (gslp.ps)
+
+Adds the ability to specify the number of bits per component to the
+CMYK-viewing utility. (viewcmyk.ps)
+
+Changes the ps2pdf script so that on Windows NT, as on Unix, it allows
+omitting the output file name, automatically replacing the extension of the
+input file with .pdf. (ps2pdf.bat)
+
+</pre><h3><a name="V5.01_Drivers"></a>Drivers</h3><pre>
+
+Fixes bugs:
+ - Some compilers didn't accept a #define with the macro name on the
+next line. (gdevpx.c)
+ - The procedure dash_pattern_eq was defined in two places.
+(gdevpdf.c)
+ - The uniprint driver sometimes dropped some output or got confused,
+because of a misunderstanding about how to update device procedure vectors
+properly. (gdevupd.c)
+ - The PostScript and EPS writers produced binary output for images,
+which generally can't be sent to PostScript printers. (gdevpsdf.h,
+gdevpdf.c, gdevps.c)
+ - The EPS writer put a %%EOF at the end of the file, which might
+cause problems for some spoolers if the file is embedded in another.
+(gdevps.c)
+
+Changes the implementation of printer drivers so that they flush the output
+stream after each page. We aren't absolutely sure that this is a good idea,
+but it prevents certain anomalous behavior where the last page isn't ejected
+properly. (gdevprn.c)
+
+Implements a long-delayed update to the mgr drivers, to restore the color
+mapping to an older one. (gdevmgr.h, gdevmgr.c)
+
+Updates the uniprint driver with a number of changes from its author.
+(gdevupd.c)
+
+</pre><h3><a name="V5.01_Platforms"></a>Platforms</h3><pre>
+
+Adds the JPEG, Postscript, and PCL XL drivers, which are included on all
+other platforms, to the MS Windows platforms. (bcwin32.mak, msvc4.mak,
+msvc5.mak, watcw32.mak)
+
+</pre><h3><a name="V5.01_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - composefont defined the resource with the font name and font
+directory interchanged. (gs_cmap.ps)
+ - With dFIXEDMEDIA, documents requesting other sizes caused an error
+instead of clipping the page. (gs_init.ps)
+ - PageSize Policy = 7 wasn't implemented. (However, the current
+implementation is wrong.) (gs_setpd.ps, zmedia2.c)
+ - FontType resource 42 wasn't defined even if Type 42 fonts were
+supported; similarly for FontType 9, 10, and 11 for CIDFonts. (gs_cidfn.ps,
+gs_res.ps)
+ - The error handling machinery would break if the name /errordict
+was redefined. (gs_init.ps)
+ - Level 1 systems got an /undefined in .doneshowpage. (zdevice.c,
+zdevice2.c)
+ - Because of an initialization order problem, copy didn't work on
+gstates. (zgeneric.c)
+
+Adds a naive implementation of findcolorrendering. (gs_lev2.ps, gs_res.ps)
+
+Removes the 'stopped' around run_string[_begin/continue/end] so that, as in
+4.03, errors print a hex dump and exit with a non-zero code instead of
+printing a readable message and continuing. (We aren't sure that this
+change didn't undo the fix in 5.0 regarding calling startjob from
+run_string.) (gs_init.ps)
+
+</pre><h3><a name="V5.01_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
+
+Fixes bugs:
+ - stdin redirection failed for PDF files even if the new stdin was
+seekable. This was fixed in 4.02, but the fix stopped working with the
+introduction of .runexec. (pdf_main.ps)
+
+Makes the cross-reference reader accept a startxref value that points at the
+EOL before the xref line. The Adobe documentation doesn't allow this, but
+some real files are this way. (pdf_main.ps)
+
+</pre><h3><a name="V5.01_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - The bounding box of a completely empty path was reported as
+garbage. (gxpath2.c)
+ - Stroking a path with more than one segment didn't produce correct
+output when anti-aliasing was used. (gspaint.c)
+ - The alpha-buffer device returned an incorrect clipping box,
+causing output to be discarded. (gdevabuf.c)
+ - gx_forward_get_clipping_box passed the wrong device to the target
+procedure, producing incorrect results. (gdevnfwd.c)
+ - The sin/cos procedure did some unnecessary computations
+(performance bug only). (gsmisc.c)
+ - The procedure for adjusting the ends of curves to match the
+tangents did some unnecessary computations (performance bug only).
+(gxpcopy.c)
+ - RAM-based banding always gave an invalidfileaccess error, due to a
+typo in memfile_fopen. (gxclmem.c)
+ - The algorithms for deciding whether a line is thin still weren't
+correct. (gxstroke.c)
+ - The fill adjustment values for the any-part-of-pixel case (adjust
+= 0.5) were (0.5-epsilon, 0.5+epsilon), which colored inappropriate
+additional pixels if the higher coordinate was integral. With considerable
+trepidation, we have changed this to (0.5-epsilon,0.5), which does the right
+thing in every case we can think of. (gxfill.c)
+ - When banding, paths were clipped to only 0.5 pixel outside their
+bounding box, which may be slightly too conservative; 1 pixel is safer.
+(gxclpath.c)
+ - The algorithm for testing whether an adjusted Y value spanned a
+pixel center was incorrect, causing some pixels to get colored incorrectly.
+(gxfill.c)
+ - 24-bit devices could cause a memory fault, by accessing a pointer
+just beyond the end of the line pointer array. (gdevm24.c)
+ - Astonishingly enough, the determination of which hints were
+applicable to a given segment of a Type 1 character was wrong in several
+different places. Fixing this in a way that correctly handled all allowed
+permutations of the coordinate system was not simple. (gxfont1.h,
+gxhint1.c, gxhint3.c)
+ - The debugging printout macros didn't include the syntactic hack to
+prevent an 'else' from begin assigned to the wrong 'if'. (gdebug.h)
+ - The bbox device was accidentally limited to 130 x 130 pixels (not
+130" x 130"). (bug introduced in 5.0) (gdevbbox.c)
+ - The bbox device didn't recognize PageBoundingBox in put_params,
+causing a possible /undefined error on [g]restore. (gdevbbox.c)
+ - setlinewidth didn't take the absolute value of its operand.
+(zgstate.c)
+ - Some code formatting was slightly off. (gximage5.c)
+ - Some extra pixels were written for Interpolated images, but they
+were immediately overwritten, so the output was correct. (gximage5.c)
+
+Changes the data flipping API from a macro to a procedure, adds a return
+value, and makes the individual flipping procedures private. (gsflip.h,
+gsflip.c)
+
+Adds (under an #ifdef FUTURE) code to allow passing multi-plane images
+through the band list. (gxclpath.h, gxclimag.c, gxclread.c)
+
+Adds (under an #ifdef FUTURE) code to allow passing interpolated images
+through the band list. NOTE: interpolated images will appear slightly
+different than without banding, because the part of the image intersecting
+each band will be scaled slightly differently in the (device) Y direction.
+(gxclpath.h, gxclimag.c, gxclread.c, gximage.c)
+
+Changes Type 1 hinting so that when it moves points on a curve, it does so
+by properly scaling the curve in the given direction. (gxhint3.c)
+
+</pre>
+
+<hr>
+
+<h2><a name="Version5.0"></a>Version 5.0 (6/6/97)</h2>
+
+<p>
+This is the first public release since 4.03.
+
+<h3><a name="V5.0_Documentation"></a>Documentation</h3><pre>
+
+Fixes bugs:
+ - Fontmap.Sol was incorrectly referred to as Fontmap.Solaris.
+(use.txt)
+ - There was still a reference to pstoppm in the documentation.
+(psfiles.txt)
+ - The JPEG DOS source site information was out of date. (jpeg.mak)
+ - The list of devices included in the distributed Unix makefiles was
+out of date. (make.txt)
+ - The MCU size limitation on the DCT filters was documented
+incorrectly. (current.txt)
+ - The URL for the uniprint driver home page was incorrect.
+(devices.txt)
+ - The makefiles referred to sfilefd.c, which is now named sfxfd.c.
+(gs.mak, *.mak)
+
+Adds a VMS help file. (gs-vms.hlp)
+
+Removes documentation for Digital Unix (OSF/1) 1.2 and 1.3, which are now
+long obsolete, and updates the documentation for current versions.
+(make.txt)
+
+Notes that there may be a problem with libpng version 0.95. (libpng.mak)
+
+Adds some specific documentation for the JPEG drivers. (devices.txt)
+
+Adds a suggestion that people compiling Ghostscript check the values of
+JVERSION and PVERSION. (make.txt)
+
+Removes the requirement for setting the LIB environment variable when
+compiling with MSVC. (make.txt)
+
+</pre><h3><a name="V5.0_Procedures"></a>Procedures</h3><pre>
+
+Fixes bugs:
+ - There were a number of small errors in the new OpenVMS makefile.
+(openvms.mak)
+ - The MSVC makefiles omitted a necessary switch to work around some
+"unspecified Pentium bugs". (msvccom.mak)
+ - The Borland makefile wasn't even close to working; fixing it
+required moving the compilation rule for genarch.exe into the
+compiler-specific makefiles. (bcwin32.mak, msvccom.mak, watcw32.mak,
+wincom.mak)
+ - There were some (harmless) undefined macro references in the MSVC
+makefile. (msvccom.mak)
+
+Makes it unnecessary to set the LIB environment variable for MSVC.
+(msvc4.mak, msvc5.mak, wincom.mak)
+
+Adds a note on compiling with the cygwin32 gcc compiler for Windows NT.
+(make.txt)
+
+Updates vms.mak yet again, hopefully for the last time. (vms.mak)
+
+Moves the CGM, JPEG, and MIFF file formats from DEVICE_DEVS8 to
+DEVICE_DEVS14 to shorten command lines; adds pcxcmyk to all platforms that
+include PCX format at all; adds jpeggray to all platforms that include jpeg.
+(devs.mak, *.mak)
+
+Adds -DPNG_USE_CONST for compiling libpng, to get rid of compiler warning
+messages. (gs.mak)
+
+Removes obsolete makefiles from the fileset. (tccommon.mak, tctail.mak)
+
+</pre><h3><a name="V5.0_Interpreter"></a>Interpreter</h3><pre>
+
+Fixes bugs:
+ - restore was broken if -dNOBIND was invoked. This fix should have
+been in the 4.81 fileset, but was left out due to operator error.
+(gs_dps1.ps)
+ - Some compilers complained about macro argument replacement within
+a string literal. (isave.c)
+ -dSAFER didn't allow opening the %stdxxx files, which caused the
+combination of -dSAFER and -dNOBIND to cause an infinite error.
+(gs_init.ps)
+ - If C code used run_string to execute a startjob, an error
+occurred. (gs_init.ps)
+
+</pre><h3><a name="V5.0_Library"></a>Library</h3><pre>
+
+Fixes bugs:
+ - Some compilers complained about macro argument replacement within
+a string literal. (gxclbits.c, gdevpdfi.c)
+ - At certain resolutions, a 1-pixel line of the wrong color could
+appear at one edge of landscape-oriented monobit images. (This is the 4th
+or 5th time we have "fixed" this one infuriatingly fragile piece of code.)
+(gxfixed.h, gximage1.c)
+ - The optimized code for landscape monobit images overlooked the
+possibility of partial images, causing parts of images to be translated and
+possibly clipped. (Yes, it's that same fragile piece of code.)
+(gximage1.c)
+ - The bounding box device allowed resetting its resolution, which
+could cause limitchecks from coordinate overflow. Our fix is to initialize
+the device to a very high resolution (4000 dpi), which reduces the maximum
+page size it can handle to about 130" on a side. (gdevbbox.c)
+ - The bounding box device wasn't identified as a page device.
+(gdevbbox.c)
+ - The bounding box device used alone disregarded changes in page
+size. (gdevbbox.c)
+ - One old compiler didn't allow a structure member name to be the
+same as a typedef name. (gximage.h, gximage.c, gximage4.c)
+ - The height and band intersection computations for banded images
+still weren't right, leading to inconsistencies in the band list and errors
+in the output (typically, thin horizontal white stripes at band boundaries).
+(gxclimag.c)
+
+Adds an extensive memory dump facility to the standard allocator.
+Eventually this should be moved into a separate file, but it would be too
+disruptive to do this just before a release. (gsalloc.c)
+
+</pre>
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1997, 1998, 1999, 2000 Aladdin Enterprises.
+All rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/History6.htm b/Master/xemtex/doc/ghostscript/History6.htm
new file mode 100644
index 00000000000..c6229760705
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/History6.htm
@@ -0,0 +1,7293 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>History of Ghostscript versions 6.n</title>
+<!-- $Id: History6.htm,v 1.30.2.11.2.6 2003/05/17 14:39:00 giles Exp $ -->
+<!--
+ WARNING: do not use Pete Kaiser's emacs function "gs-toc" alone to
+ re-create the table of contents here, because it will replace the
+ hand-edited TOC subheads with a separate subhead for each H2 in
+ the body of the file. Or if you do, first look at the original
+ TOC to see how to edit it for visual conciseness.
+-->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<table width="100%" border="0">
+<tr><th align="center" bgcolor="#CCCC00"><font size=6>History of Ghostscript versions 6.n</font>
+</table>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Version6.64">Version 6.64 (2001-04-07)</a>
+<ul>
+<li><a href="#6.64_Incompatible_changes">Incompatible changes</a>,
+ <a href="#6.64-Documentation">Documentation</a>,
+ <a href="#6.64-Procedures">Procedures</a>,
+ <a href="#6.64-Utilities">Utilities</a>,
+ <a href="#6.64-Drivers">Drivers</a>,
+ <a href="#6.64-PDF_writer">PDF writer</a>,
+ <a href="#6.64-PDF_Interpreter">PDF Interpreter</a>,
+ <a href="#6.64-Interpreter">Interpreter</a>,
+ <a href="#6.64-Streams">Streams</a>,
+ <a href="#6.64-Library">Library</a>,
+ <a href="#6.64-Other">Other</a>
+</ul>
+<li><a href="#Version6.63">Version 6.63 (2001-03-31)</a>
+<ul>
+<li><a href="#6.63_Incompatible_changes">Incompatible changes</a>,
+ <a href="#6.63-Documentation">Documentation</a>,
+ <a href="#6.63-Procedures">Procedures</a>,
+ <a href="#6.63-Utilities">Utilities</a>,
+ <a href="#6.63-Drivers">Drivers</a>,
+ <a href="#6.63-PDF_writer">PDF writer</a>,
+ <a href="#6.63-PDF_Interpreter">PDF Interpreter</a>,
+ <a href="#6.63-Interpreter">Interpreter</a>,
+ <a href="#6.63-Streams">Streams</a>,
+ <a href="#6.63-Library">Library</a>
+</ul>
+<li><a href="#Version6.62">Version 6.62 (2001-03-19)</a>
+<ul>
+<li><a href="#6.62-Documentation">Documentation</a>,
+ <a href="#6.62-Procedures">Procedures</a>,
+ <a href="#6.62-Utilities">Utilities</a>,
+ <a href="#6.62-Drivers">Drivers</a>,
+ <a href="#6.62-PDF_writer">PDF writer</a>,
+ <a href="#6.62-PDF_Interpreter">PDF Interpreter</a>,
+ <a href="#6.62-Interpreter">Interpreter</a>,
+ <a href="#6.62-Streams">Streams</a>,
+ <a href="#6.62-Library">Library</a>,
+ <a href="#6.62-Other">Other</a>
+</ul>
+<li><a href="#Version6.61">Version 6.61 (2001-02-21)</a>
+<ul>
+<li><a href="#6.61-Documentation">Documentation</a>,
+ <a href="#6.61-Procedures">Procedures</a>,
+ <a href="#6.61-Utilities">Utilities</a>,
+ <a href="#6.61-Drivers">Drivers</a>,
+ <a href="#6.61-PDF_writer">PDF writer</a>,
+ <a href="#6.61-PDF_Interpreter">PDF Interpreter</a>,
+ <a href="#6.61-Interpreter">Interpreter</a>,
+ <a href="#6.61-Streams">Streams</a>,
+ <a href="#6.61-Library">Library</a>,
+ <a href="#6.61-Other">Other</a>
+</ul>
+<li><a href="#Version6.60">Version 6.60 (2000-12-31)</a>
+<ul>
+<li><a href="#6.60_Incompatible_changes">Incompatible changes</a>,
+ <a href="#6.60-Documentation">Documentation</a>,
+ <a href="#6.60-Procedures">Procedures</a>,
+ <a href="#6.60-Utilities">Utilities</a>,
+ <a href="#6.60-Drivers">Drivers</a>,
+ <a href="#6.60-PDF_writer">PDF writer</a>,
+ <a href="#6.60-PDF_Interpreter">PDF Interpreter</a>,
+ <a href="#6.60-Interpreter">Interpreter</a>,
+ <a href="#6.60-Streams">Streams</a>,
+ <a href="#6.60-Library">Library</a>,
+ <a href="#6.60-Other">Other</a>
+</ul>
+<li><a href="#Version6.30">Version 6.30 (2000-10-03)</a>
+<ul>
+<li><a href="#6.30_Incompatible_changes">Incompatible changes</a>,
+ <a href="#6.30 Documentation">Documentation</a>,
+ <a href="#6.30 Procedures">Procedures</a>,
+ <a href="#6.30 Utilities">Utilities</a>,
+ <a href="#6.30 Drivers">Drivers</a>,
+ <a href="#6.30 PDF writer">PDF writer</a>,
+ <a href="#6.30 Interpreter (PDF)">Interpreter (PDF)</a>,
+ <a href="#6.30 Interpreter">Interpreter</a>,
+ <a href="#6.30 Streams">Streams</a>,
+ <a href="#6.30 Library">Library</a>,
+ <a href="#6.30 ???Other???">???Other???</a>
+</ul>
+<li><a href="#Version6.23">Version 6.23 (2000-08-07)</a>
+<ul>
+<li><a href="#6.23_Incompatible_changes">Incompatible changes</a>,
+ <a href="#6.23 Documentation">Documentation</a>,
+ <a href="#6.23 Procedures">Procedures</a>,
+ <a href="#6.23 Utilities">Utilities</a>,
+ <a href="#6.23 Drivers">Drivers</a>,
+ <a href="#6.23 PDF writer">PDF writer</a>,
+ <a href="#6.23 Interpreter (PDF)">Interpreter (PDF)</a>,
+ <a href="#6.23 Interpreter">Interpreter</a>,
+ <a href="#6.23 Library">Library</a>
+</ul>
+<li><a href="#Version6.22">Version 6.22 (2000-07-05)</a>
+<ul>
+<li><a href="#6.22_Incompatible_changes">Incompatible changes</a>,
+ <a href="#6.22 Documentation">Documentation</a>,
+ <a href="#6.22 Procedures">Procedures</a>,
+ <a href="#6.22 Utilities">Utilities</a>,
+ <a href="#6.22 Drivers">Drivers</a>,
+ <a href="#6.22 PDF writer">PDF writer</a>,
+ <a href="#6.22 Interpreter (PDF)">Interpreter (PDF)</a>,
+ <a href="#6.22 Interpreter">Interpreter</a>,
+ <a href="#6.22 Streams">Streams</a>,
+ <a href="#6.22 Library">Library</a>
+</ul>
+<li><a href="#Version6.21">Version 6.21 (2000-04-28)</a>
+<ul>
+<li><a href="#6.21_Incompatible_changes">Incompatible changes</a>,
+ <a href="#6.21 Documentation">Documentation</a>,
+ <a href="#6.21 Procedures">Procedures</a>,
+ <a href="#6.21 Utilities">Utilities</a>,
+ <a href="#6.21 Drivers">Drivers</a>,
+ <a href="#6.21 PDF writer">PDF writer</a>,
+ <a href="#6.21 Interpreter (PDF)">Interpreter (PDF)</a>,
+ <a href="#6.21 Interpreter">Interpreter</a>,
+ <a href="#6.21 Streams">Streams</a>,
+ <a href="#6.21 Library">Library</a>
+</ul>
+<li><a href="#Version6.20">Version 6.20 (2000-04-06)</a>
+<ul>
+<li><a href="#6.20_Incompatible_changes">Incompatible changes</a>,
+ <a href="#6.20 Documentation">Documentation</a>,
+ <a href="#6.20 Procedures">Procedures</a>,
+ <a href="#6.20 Utilities">Utilities</a>,
+ <a href="#6.20 Drivers">Drivers</a>,
+ <a href="#6.20 PDF writer">PDF writer</a>,
+ <a href="#6.20 Interpreter (PDF)">Interpreter (PDF)</a>,
+ <a href="#6.20 Interpreter">Interpreter</a>,
+ <a href="#6.20 Streams">Streams</a>,
+ <a href="#6.20 Library">Library</a>
+</ul>
+<li>(Versions 6.02 - 6.19 deliberately omitted.)
+<li><a href="#Version6.01">Version 6.01 (2000-03-17)</a>
+<ul>
+<li><a href="#6.01_Incompatible_changes">Incompatible changes</a>,
+ <a href="#6.01 Documentation">Documentation</a>,
+ <a href="#6.01 Procedures">Procedures</a>,
+ <a href="#6.01 Utilities">Utilities</a>,
+ <a href="#6.01 Drivers">Drivers</a>,
+ <a href="#6.01 PDF writer">PDF writer</a>,
+ <a href="#6.01 Interpreter (PDF)">Interpreter (PDF)</a>,
+ <a href="#6.01 Interpreter">Interpreter</a>,
+ <a href="#6.01 Streams">Streams</a>,
+ <a href="#6.01 Library">Library</a>
+</ul>
+<li><a href="#Version6.0">Version 6.0 (2000-02-03)</a>
+<ul>
+<li><a href="#6.0_Documentation">Documentation</a>,
+ <a href="#6.0_Procedures">Procedures</a>,
+ <a href="#6.0_Utilities">Utilities</a>,
+ <a href="#6.0_Drivers">Drivers</a>,
+ <a href="#6.0_Platforms">Platforms</a>,
+ <a href="#6.0_Fonts">Fonts</a>,
+ <a href="#6.0_PDF_writer">PDF writer</a>,
+ <a href="#6.0_Interpreter_PDF">Interpreter (PDF)</a>,
+ <a href="#6.0_Interpreter">Interpreter</a>,
+ <a href="#6.0_Streams">Streams</a>,
+ <a href="#6.0_Library">Library</a>
+</ul>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>
+This document is a record of changes in Ghostscript releases numbered 6.n.
+For earlier versions, see the the history documents:
+
+<blockquote>
+<a href="History5.htm">History of Ghostscript versions 5.n</a><br>
+<a href="History4.htm">History of Ghostscript versions 4.n</a><br>
+<a href="History3.htm">History of Ghostscript versions 3.n</a><br>
+<a href="History2.htm">History of Ghostscript versions 2.n</a><br>
+<a href="History1.htm">History of Ghostscript versions 1.n</a>
+</blockquote>
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<p>
+Within each release, news appears in the following order: Incompatible
+changes, Documentation, Procedures, Utilities, Drivers, Platforms, Fonts,
+PDF writer (included under Drivers through fileset 5.88), Interpreter,
+Streams (included under Interpreter through release 2.9.9), Library.
+Changes marked with a * were made available as patches to a previous
+release.
+
+<hr>
+
+<h1><a name="Version6.64"></a>Version 6.64 (2001-04-07)</h1>
+
+<p>
+This is probably the last beta release before 7.0. Most of the patches
+since last time are bug and portability fixes.
+
+<p>
+All problems registered on SourceForge numbered 414104 or lower are
+closed, except for the following: 209350, 215256, 219798, 221582,
+222534, 222727, 224056, 224863, 226477, 226584, 227684, 227709,
+228180, 228641, 230694, 231390, 404255, 404482, 405342, 406285,
+406689, 406696, 406979, 407342, 409887, 410371, 411753, 413114,
+413669, 413747, 414022, 414104.
+
+<h3><a name="6.64_Incompatible_changes"></a>Incompatible changes</h3>
+
+<pre>
+(Library)
+ - The gs_logical_operation_t type now has a bit indicating
+PDF 1.4 transparency.
+(Build process)
+ - The default directories for XLIBDIR and XINCLUDE now point
+to /usr/X11R6.
+
+
+<h2><a name="6.64-Documentation"></a>Documentation</h2><pre>
+
+1. Removing the article "Minor Bugs. kshow doesn't restore currentfont after
+running proc." due to fixed. 2. Adding article "Buffering in input filters"
+to "Differences from Adobe Implementation". (doc/Issues.htm [1.6]:
+2001/04/03 15:53:01 igorm)
+
+Updates Glenn Ramsey's email address in the Epson 300 documentation.
+(doc/Devices.htm [1.24]: 2001/04/04 04:25:00 raph)
+
+Adds request for code-review submissions to identify intended branches.
+(doc/Maintain.htm [1.14]: 2001/04/04 07:22:48 raph)
+
+Move SourceForge bug #226943 to the "Other implementation" section of this
+document. The %ram% device has never been a user or customer issue, but it
+might be handy to have. (doc/Projects.htm [1.27]: 2001/04/04 16:36:36 rayjj)
+
+Updates to documentation. Remove the statement that the Inprise compiler is
+used for Windows distribution archives. (doc/Bug-info.htm [1.14],
+doc/Fonts.htm [1.16], doc/Install.htm [1.20], doc/Make.htm [1.26],
+doc/New-user.htm [1.23], doc/Release.htm [1.32], doc/Tester.htm [1.10]:
+2001/04/05 08:49:57 ghostgum)
+
+Adds issues from SourceForge bug numbers: 232334, 233403, 406643. Also adds
+missing bug ID for #228808. (doc/Issues.htm [1.7]: 2001/04/05 14:44:39
+rayjj)
+
+Various documenation fixups. Removes pointer to external pdf_sec.ps now that
+the full implementation is in our distribution. Adds note on the
+class="offset" attribute to the html style guidelines. (doc/API.htm [1.5],
+doc/Bug-form.htm [1.18], doc/Htmstyle.htm [1.13], doc/New-user.htm [1.24],
+doc/Psfiles.htm [1.17], doc/Readme.htm [1.25]: 2001/04/06 11:27:00 giles)
+
+Uses better test for avoiding crash on "gs -h". Also updates API document.
+Thanks to Russell Lang. (doc/API.htm [1.6]: 2001/04/07 00:08:08 raph)
+
+adds a last few doc fixups before the 6.64 beta release.
+(doc/Bug-info.htm [1.15], doc/C-style.htm [1.15], doc/Htmstyle.htm [1.14]:
+2001/04/07 00:15:02 giles)
+
+Integrates patch from hpijs 0.94 so that Ghostscript can use hpijs drivers.
+(doc/Devices.htm [1.25]: 2001/04/07 00:33:29 raph)
+
+Corrections to interpreter API documentation. If "gs -h" executed,
+gsapi_exit() must be called next. Assign copyright to artofcode LLC.
+(doc/API.htm [1.7]: 2001/04/07 01:17:50 ghostgum)
+
+Updates version number and date in preparation for 6.64 release. Updates
+Develop.htm to accurately list source files. (doc/API.htm [1.8],
+doc/Bug-form.htm [1.19], doc/Bug-info.htm [1.16], doc/C-style.htm [1.16],
+doc/Commprod.htm [1.12], doc/Copying.htm [1.10], doc/Current.htm [1.10],
+doc/DLL.htm [1.12], doc/Develop.htm [1.36], doc/Devices.htm [1.26],
+doc/Drivers.htm [1.18], doc/Fonts.htm [1.17], doc/Helpers.htm [1.14],
+doc/History1.htm [1.10], doc/History2.htm [1.10], doc/History3.htm [1.10],
+doc/History4.htm [1.10], doc/History5.htm [1.12], doc/History6.htm [1.25],
+doc/Htmstyle.htm [1.15], doc/Install.htm [1.21], doc/Issues.htm [1.8],
+doc/Language.htm [1.29], doc/Lib.htm [1.10], doc/Maintain.htm [1.15],
+doc/Make.htm [1.27], doc/New-user.htm [1.25], doc/News.htm [1.83],
+doc/Projects.htm [1.28], doc/Ps-style.htm [1.10], doc/Ps2epsi.htm [1.11],
+doc/Ps2pdf.htm [1.28], doc/Psfiles.htm [1.18], doc/README [1.9],
+doc/Readme.htm [1.26], doc/Release.htm [1.33], doc/Source.htm [1.10],
+doc/Tester.htm [1.11], doc/Unix-lpr.htm [1.10], doc/Use.htm [1.26],
+doc/Xfonts.htm [1.10], doc/gs-vms.hlp [1.9], man/dvipdf.1 [1.7],
+man/font2c.1 [1.7], man/gs.1 [1.7], man/gslp.1 [1.7], man/gsnd.1 [1.7],
+man/pdf2dsc.1 [1.7], man/pdf2ps.1 [1.9], man/pdfopt.1 [1.7],
+man/pf2afm.1 [1.7], man/pfbtopfa.1 [1.8], man/printafm.1 [1.7],
+man/ps2ascii.1 [1.7], man/ps2epsi.1 [1.7], man/ps2pdf.1 [1.11],
+man/ps2pdfwr.1 [1.8], man/ps2ps.1 [1.14], man/wftopfa.1 [1.7]: 2001/04/07
+07:55:24 raph)
+
+Trivial doc patch. (doc/Develop.htm [1.37]: 2001/04/07 07:58:50 raph)
+
+Documentation fixups for broken internal links. (doc/Devices.htm [1.27],
+doc/Maintain.htm [1.16], doc/Make.htm [1.28], doc/Release.htm [1.34]:
+2001/04/07 08:18:53 giles)
+
+</pre><h2><a name="6.64-Procedures"></a>Procedures</h2><pre>
+
+Fixes problems:
+ - Speed up shading type 1. (lib.mak [1.47]: 2001/04/05 08:32:28
+igorm)
+
+Adds target to OS/2 makefile to build distribution zip archive. Disables
+multiple image windows for OS/2 because we can't tell when subsequent
+windows are closed. To allow multiple windows we would need to rewrite
+gspmdrv.c. (os2.mak [1.14]: 2001/04/01 10:13:24 ghostgum)
+
+Remove the bmpa*** devices from the default build. These are example devices
+to demonstrate async rendering but do not have any advantages to users over
+the bmp*** devices, and their inclusion requires thread support which is not
+available on all systems. Resolves SourceForge bug #213799.
+(unix-gcc.mak [1.15], unixansi.mak [1.11], unixtrad.mak [1.11]: 2001/04/03
+20:04:46 rayjj)
+
+updates to support libpng v1.0.9. (all-arch.mak [1.7], bcwin32.mak [1.9],
+dvx-gcc.mak [1.9], libpng.mak [1.5], msvc32.mak [1.14], msvclib.mak [1.11],
+openvms.mak [1.10], os2.mak [1.15], ugcclib.mak [1.10], unix-gcc.mak [1.16],
+unixansi.mak [1.12], unixtrad.mak [1.12], watc.mak [1.11],
+watclib.mak [1.11], watcw32.mak [1.10]: 2001/04/04 07:51:15 giles)
+
+updates to support libpng v1.0.10. OS/2 makefile fixup for v1.0.9 and above
+from Russell Lang. (all-arch.mak [1.8], bcwin32.mak [1.10],
+dvx-gcc.mak [1.10], libpng.mak [1.6], msvc32.mak [1.15], msvclib.mak [1.12],
+openvms.mak [1.11], os2.mak [1.16], ugcclib.mak [1.11], unix-gcc.mak [1.17],
+unixansi.mak [1.13], unixtrad.mak [1.13], watc.mak [1.12],
+watclib.mak [1.12], watcw32.mak [1.11]: 2001/04/06 07:27:22 giles)
+
+Integrates patch from hpijs 0.94 so that Ghostscript can use hpijs drivers.
+(contrib.mak [1.23]: 2001/04/07 00:33:29 raph)
+
+Changes default XLIBDIR and XINCLUDE to /usr/X11R6, which is far more likely
+than the previous values. (contrib.mak [1.24], ugcclib.mak [1.12],
+unix-gcc.mak [1.18], unixtrad.mak [1.14]: 2001/04/07 06:50:27 raph)
+
+Updates version number and date in preparation for 6.64 release. Updates
+Develop.htm to accurately list source files. (version.mak [1.32]: 2001/04/07
+07:55:25 raph)
+
+</pre><h2><a name="6.64-Utilities"></a>Utilities</h2><pre>
+
+Fixes problems:
+ - -dDELAYSAFER flag added; append operator fixed in Windows and OS/2
+scripts; literal newlines removed from sed script. Bugs #223896, #230699
+(lib/ps2epsi [1.5], lib/ps2epsi.bat [1.4], lib/ps2epsi.cmd [1.2],
+lib/ps2epsi.ps [1.5]: 2001/04/04 04:45:42 alexcher)
+ - The fileposition operator cannot be used on some data sources. Use
+.fileposition (if on Ghostscript) and make some other changes to make this
+portable to other PostScript interpreters. SourceForge bug #223005.
+(lib/image-qa.ps [1.3]: 2001/04/04 04:54:53 rayjj)
+ - Previous fix had OutputFile set to a debug value. Restoring it to
+NUL (lib/ps2epsi.bat [1.5]: 2001/04/04 05:19:33 alexcher)
+ - Adds whitespace to sed command in ps2epsi, needed on RedHat Linux 6.2.
+(lib/ps2epsi [1.6]: 2001/04/04 21:05:00 raph)
+
+</pre><h2><a name="6.64-Drivers"></a>Drivers</h2><pre>
+
+Fixes problems:
+ - JPEG data made GC-traceable to prevent early freeing. Bug # 227090
+gdevjpeg.c gdevpsdu.c sdeparam.c zfdctd.c zfdcte.c : JPEG control structure
+is allocated with a descriptor. sdct.h : defines descriptors for JPEG
+structures. sjpegc.c : implements the linked list of JPEG core blocks
+sjpegd.c sjpege.c : corrects the initialization order of (de)compress
+struct's gsstruct.h : yet another macro for a structure with 1 string and 1
+ptr (gdevjpeg.c [1.3], gdevpsdu.c [1.10]: 2001/04/04 19:20:27 alexcher)
+
+Integrates patch from hpijs 0.94 so that Ghostscript can use hpijs drivers.
+(gdevhpij.c [1.1], gdevhpij.h [1.1]: 2001/04/07 00:33:29 raph)
+
+</pre><h2><a name="6.64-PDF_writer"></a>PDF writer</h2><pre>
+
+Fixes problems:
+ - Emits W or W* after path construction operators when outputting
+clip paths in the pdfwrite driver, to be correct with respect to the PDF
+spec. (gdevpdfd.c [1.14]: 2001/04/07 07:12:52 raph)
+
+</pre><h2><a name="6.64-PDF_Interpreter"></a>PDF Interpreter</h2><pre>
+
+Fixes problems:
+ - The search area for %%EOF at the end of PDF file is increased to
+4K to cover a file generated by Distiller 3.02b for AIX 4.1.1 Customer #580
+(lib/pdf_main.ps [1.31]: 2001/04/07 01:34:23 alexcher)
+ - A comment is corrected to match the source.
+(lib/pdf_main.ps [1.32]: 2001/04/07 01:47:00 alexcher)
+
+PDF 1.4 improvements: Fixes garbage collection of device filter stack.
+Forces idempotent path drawing in transparency mode. Corrects handling of
+Group at toplevel page. (lib/pdf_draw.ps [1.29], lib/pdf_main.ps [1.30]:
+2001/04/06 22:23:44 raph)
+
+</pre><h2><a name="6.64-Interpreter"></a>Interpreter</h2><pre>
+
+Fixes problems:
+ - Windows poll function now returns a code to interrupt Ghostscript
+if the text window is closing. Don't show message box on exit if user closed
+the text window. (dwmain.c [1.4], dwtext.c [1.3]: 2001/04/03 11:12:58
+ghostgum)
+ - equality operation between a pointer and enum constant (with 0
+value) is a syntax error on CodeWarrior. Replacing the enum with NULL. From
+Bernd Heller (zdscpars.c [1.10]: 2001/04/04 05:25:32 alexcher)
+ - Register /All and /None in the name table on look-up. Otherwise an
+attempt to set the separation color space fails with /undefined
+(zcssepr.c [1.7]: 2001/04/04 16:09:15 alexcher)
+ - JPEG data made GC-traceable to prevent early freeing. Bug # 227090
+gdevjpeg.c gdevpsdu.c sdeparam.c zfdctd.c zfdcte.c : JPEG control structure
+is allocated with a descriptor. sdct.h : defines descriptors for JPEG
+structures. sjpegc.c : implements the linked list of JPEG core blocks
+sjpegd.c sjpege.c : corrects the initialization order of (de)compress
+struct's gsstruct.h : yet another macro for a structure with 1 string and 1
+ptr (zfdctd.c [1.4], zfdcte.c [1.4]: 2001/04/04 19:20:27 alexcher)
+ - Set default size of MAX_ESTACK to 5000. This is the minimal fix
+recommended by L. Peter Deutsch in the followup to SourceForge bug #224095.
+This should be fixed later to handle automatic stack expansion. The
+approaches are defined by Peter as #2 and #3. Interim resolution to
+SorceForge bug #224095. (interp.c [1.8]: 2001/04/06 06:42:45 rayjj)
+ - Apparently Japanese Windows uses WM_USER+1 internally and
+conflicts with gswin32c messages starting from WM_USER+1. So gswin32c
+messages are moved to WM_USER+101 range. Fix from Akira Kakuto
+(dwmainc.c [1.4]: 2001/04/06 08:36:02 ghostgum)
+ - Do not put Windows stdin into binary mode if it is the console
+because this returns CR and LF each time the Enter key is pressed. This
+caused Ghostscript to not pause at following showpage prompts.
+(dwmainc.c [1.5]: 2001/04/06 08:43:29 ghostgum)
+ - Genoa FTS 035-07.ps got a SEGV error caused by data being
+allocated in non-GC memory, but pointer enumumeration giving these pointers
+to the GC for tracing. Since these objects didn't have GC type headers bad
+things happened. Also change one of the allocations in sjpegc.c to immovable
+that was not -- this change was not needed to prevent the crash.
+(zfdctd.c [1.5]: 2001/04/07 00:33:22 rayjj)
+ - Compressed fonts are now recognized as narrow during font
+substitution. Customer #580 (lib/gs_fonts.ps [1.11]: 2001/04/07 01:07:01
+alexcher)
+ - two small issues with compilation under xlc on IBM AIX RS6000, a
+name conflict with structures names (u)int64, and trailing commas in enum
+declarations. Patch from Dan Coby. Sourceforge bug #414328.
+(dscparse.h [1.4]: 2001/04/07 07:28:33 giles)
+
+Adds target to OS/2 makefile to build distribution zip archive. Disables
+multiple image windows for OS/2 because we can't tell when subsequent
+windows are closed. To allow multiple windows we would need to rewrite
+gspmdrv.c. (dpmain.c [1.3]: 2001/04/01 10:13:24 ghostgum)
+
+updates to support libpng v1.0.10. OS/2 makefile fixup for v1.0.9 and above
+from Russell Lang. (imain.c [1.11]: 2001/04/06 07:27:22 giles)
+
+Removed unecessary include of Macintosh QDOffscreen.h header (iapi.h [1.2]:
+2001/04/06 22:57:46 bdheller)
+
+Uses better test for avoiding crash on "gs -h". Also updates API document.
+Thanks to Russell Lang. (imain.c [1.12]: 2001/04/07 00:08:08 raph)
+
+Updates version number and date in preparation for 6.64 release. Updates
+Develop.htm to accurately list source files. (lib/gs_init.ps [1.33]:
+2001/04/07 07:55:25 raph)
+
+Removes \r\n line ends inadvertently added. (dscparse.h [1.5]: 2001/04/07
+08:07:17 raph)
+
+</pre><h2><a name="6.64-Streams"></a>Streams</h2><pre>
+
+Fixes problems:
+ - JPEG data made GC-traceable to prevent early freeing. Bug # 227090
+gdevjpeg.c gdevpsdu.c sdeparam.c zfdctd.c zfdcte.c : JPEG control structure
+is allocated with a descriptor. sdct.h : defines descriptors for JPEG
+structures. sjpegc.c : implements the linked list of JPEG core blocks
+sjpegd.c sjpege.c : corrects the initialization order of (de)compress
+struct's gsstruct.h : yet another macro for a structure with 1 string and 1
+ptr (sdct.h [1.3], sdeparam.c [1.3], sjpegc.c [1.3], sjpegd.c [1.3],
+sjpege.c [1.3]: 2001/04/04 19:20:27 alexcher)
+ - Genoa FTS 035-07.ps got a SEGV error caused by data being
+allocated in non-GC memory, but pointer enumumeration giving these pointers
+to the GC for tracing. Since these objects didn't have GC type headers bad
+things happened. Also change one of the allocations in sjpegc.c to immovable
+that was not -- this change was not needed to prevent the crash.
+(sjpegc.c [1.4]: 2001/04/07 00:33:22 rayjj)
+
+</pre><h2><a name="6.64-Library"></a>Library</h2><pre>
+
+Fixes problems:
+ - Register /All and /None in the name table on look-up. Otherwise an
+attempt to set the separation color space fails with /undefined
+(gscsepr.c [1.8]: 2001/04/04 16:09:15 alexcher)
+ - JPEG data made GC-traceable to prevent early freeing. Bug # 227090
+gsstruct.h : yet another macro for a structure with 1 string and 1 ptr
+(gsstruct.h [1.8]: 2001/04/04 18:45:08 alexcher)
+ - Speed up shading type 1. (gsshade.c [1.4], gxshade1.c [1.9]:
+2001/04/05 08:32:28 igorm)
+ - Some compilers complain that: "Argument of type "stream *" is
+incompatible with parameter of type "FILE *". Thanks to Nelson Beebe for
+finding this (on SGI). (gs_stdio.h [1.2]: 2001/04/06 03:19:07 rayjj)
+ - Fixes crashes in Type 4 function evaluator when stack is empty.
+(gsfunc4.c [1.5]: 2001/04/06 22:22:38 raph)
+
+Adds a lop_pdf14 field to logical operators, which is used to force non-
+idempotent drawing of paths. (gsropt.h [1.4]: 2001/04/05 23:21:15 raph)
+
+PDF 1.4 improvements: Fixes garbage collection of device filter stack.
+Forces idempotent path drawing in transparency mode. Corrects handling of
+Group at toplevel page. (gdevp14.c [1.2], gsstate.c [1.11]: 2001/04/06
+22:23:44 raph)
+
+</pre><h2><a name="6.64-Other"></a>Other</h2><pre>
+
+Fixes problems:
+ - two small issues with compilation under xlc on IBM AIX RS6000, a
+name conflict with structures names (u)int64, and trailing commas in enum
+declarations. Patch from Dan Coby. Sourceforge bug #414328.
+(icclib/icc.c [1.2], icclib/icc.h [1.2]: 2001/04/07 07:28:33 giles)
+
+Removes \r\n line ends inadvertently added. (icclib/icc.c [1.3],
+icclib/icc.h [1.3]: 2001/04/07 08:07:16 raph)
+
+<hr>
+
+<h1><a name="Version6.63"></a>Version 6.63 (2001-03-31)</h1>
+
+<p>
+This is the second beta release for the upcoming 7.0 release. This
+fileset contains a number of stability improvements for the new
+display device, integration of PDF 1.4 rendering with all devices, and
+the usual round of bug fixes.
+
+<p>
+All problems registered on SourceForge numbered 411753 or lower are
+closed, except for the following: 201955, 202735, 206652, 209350,
+213799, 215256, 219798, 220967, 221582, 222534, 222727, 223005,
+223754, 223896, 223992, 224056, 224095, 224863, 226477, 226584,
+226943, 227090, 227684, 227709, 228180, 228641, 230694, 230699,
+231390, 232334, 233403, 404255, 404482, 405313, 406285, 406643,
+406689, 406696, 406979, 407342, 409887, 410371, 410722, 411753.
+
+<h3><a name="6.63_Incompatible_changes"></a>Incompatible changes</h3>
+
+<pre>
+(Library)
+ - The gs_text_enum_common structure has a new imaging_dev field
+which is used by the bbox device to intercept low-level drawing
+operations when drawing text.
+ - There is a new pdf14 device filter used for rendering PDF 1.4
+documents.
+
+
+<h2><a name="6.63-Documentation"></a>Documentation</h2><pre>
+
+Moves the following SourceForge bugs to the Issues.htm documentation:
+201955, 220967, 223992. (doc/Issues.htm [1.2]: 2001/03/20 07:36:30 rayjj)
+
+Added 2 issues related to JPEG in PDF, Bug 226391 (doc/Issues.htm [1.3]:
+2001/03/20 16:41:28 alexcher)
+
+Adds %printer% device to Windows to allow a printer to be specified as
+-sOutputFile="%printer%Printer Name". This replaces the use of
+"\\spool\Printer Name" for all but Windows 3.1/Win32s. Unlike the old
+\\spool\, the new %printer% device does not write a large temporary file.
+(doc/Install.htm [1.17]: 2001/03/26 11:28:20 ghostgum)
+
+Change the search order for the Ghostscript Windows DLL to try the
+executable directory before the location specified in the GS_DLL environment
+variable. (doc/Install.htm [1.18]: 2001/03/27 09:35:22 ghostgum)
+
+Some attributes of Catalog object are lost during PDF to PDF conversion
+(doc/Issues.htm [1.4]: 2001/03/27 21:03:18 alexcher)
+
+Increments version number after 6.62 release. (doc/News.htm [1.81]:
+2001/03/28 21:27:15 raph)
+
+Updates dates in preparation for 6.63 beta release. News updated.
+(doc/API.htm [1.4], doc/Bug-form.htm [1.17], doc/Bug-info.htm [1.13],
+doc/C-style.htm [1.14], doc/Commprod.htm [1.11], doc/Copying.htm [1.9],
+doc/Current.htm [1.9], doc/DLL.htm [1.11], doc/Develop.htm [1.35],
+doc/Devices.htm [1.23], doc/Drivers.htm [1.17], doc/Fonts.htm [1.15],
+doc/Helpers.htm [1.13], doc/History1.htm [1.9], doc/History2.htm [1.9],
+doc/History3.htm [1.9], doc/History4.htm [1.9], doc/History5.htm [1.11],
+doc/History6.htm [1.23], doc/Htmstyle.htm [1.12], doc/Install.htm [1.19],
+doc/Issues.htm [1.5], doc/Language.htm [1.28], doc/Lib.htm [1.9],
+doc/Maintain.htm [1.13], doc/Make.htm [1.25], doc/New-user.htm [1.22],
+doc/News.htm [1.82], doc/Projects.htm [1.26], doc/Ps-style.htm [1.9],
+doc/Ps2epsi.htm [1.10], doc/Ps2pdf.htm [1.27], doc/Psfiles.htm [1.16],
+doc/README [1.8], doc/Readme.htm [1.24], doc/Release.htm [1.31],
+doc/Source.htm [1.9], doc/Tester.htm [1.9], doc/Unix-lpr.htm [1.9],
+doc/Use.htm [1.25], doc/Xfonts.htm [1.9], doc/gs-vms.hlp [1.8],
+man/dvipdf.1 [1.6], man/font2c.1 [1.6], man/gs.1 [1.6], man/gslp.1 [1.6],
+man/gsnd.1 [1.6], man/pdf2dsc.1 [1.6], man/pdf2ps.1 [1.8],
+man/pdfopt.1 [1.6], man/pf2afm.1 [1.6], man/pfbtopfa.1 [1.7],
+man/printafm.1 [1.6], man/ps2ascii.1 [1.6], man/ps2epsi.1 [1.6],
+man/ps2pdf.1 [1.10], man/ps2pdfwr.1 [1.7], man/ps2ps.1 [1.13],
+man/wftopfa.1 [1.6]: 2001/04/01 01:10:54 raph)
+
+</pre><h2><a name="6.63-Procedures"></a>Procedures</h2><pre>
+
+Adds %printer% device to Windows to allow a printer to be specified as
+-sOutputFile="%printer%Printer Name". This replaces the use of
+"\\spool\Printer Name" for all but Windows 3.1/Win32s. Unlike the old
+\\spool\, the new %printer% device does not write a large temporary file.
+(winlib.mak [1.9]: 2001/03/26 11:28:20 ghostgum)
+
+Adds Windows %printer% device to MS Visual C++ build. (msvc32.mak [1.13]:
+2001/03/26 12:00:07 ghostgum)
+
+Adds icclib subdirectory to tarballs. (toolbin/makeset.tcl [1.7]: 2001/03/28
+21:24:00 raph)
+
+Increments version number after 6.62 release. (version.mak [1.30]:
+2001/03/28 21:27:15 raph)
+
+Applies PDF 1.4 rendering with all devices. Previously, only pnga device
+contained PDF 1.4 rendering capabilities. Now, when the PDF 1.4 imaging
+model is detected in the source file, it installs the pdf 1.4 rendering
+device as a device filter. (lib.mak [1.46]: 2001/04/01 00:30:41 raph)
+
+Updates dates in preparation for 6.63 beta release. News updated.
+(version.mak [1.31]: 2001/04/01 01:10:55 raph)
+
+</pre><h2><a name="6.63-Utilities"></a>Utilities</h2><pre>
+
+Fixes problems:
+ - closefile added for procedure based stdio to prevent disabled
+stream from appearing valid. (ziodevsc.c [1.2]: 2001/03/27 09:37:10
+ghostgum)
+ - Avoid rangecheck error when character code exceeds 255. Support
+zero-size bitmap used by some fonts for space character.
+(lib/bdftops.ps [1.3]: 2001/03/27 20:53:36 alexcher)
+ - BATCH parameter is added to all bdftops* scripts
+(lib/bdftops [1.2], lib/bdftops.bat [1.3], lib/bdftops.cmd [1.2]: 2001/03/27
+21:15:55 alexcher)
+ - Corrects memory allocation of command line arguments in the
+programs which load the Ghostscript interpreter DLL / shared object.
+(dxmain.c [1.2]: 2001/03/31 10:09:47 ghostgum)
+
+Adds %printer% device to Windows to allow a printer to be specified as
+-sOutputFile="%printer%Printer Name". This replaces the use of
+"\\spool\Printer Name" for all but Windows 3.1/Win32s. Unlike the old
+\\spool\, the new %printer% device does not write a large temporary file.
+(gp_msprn.c [1.1]: 2001/03/26 11:28:20 ghostgum)
+
+</pre><h2><a name="6.63-Drivers"></a>Drivers</h2><pre>
+
+Fixes problems:
+ - AutoFilter.* options now select lossless compression for the image
+smaller than 64 pixels in any dimension. Bug # 226391 from a free user.
+(gdevpsdi.c [1.14]: 2001/03/24 04:17:07 alexcher)
+ - In the display device, allow NULL as a valid value for
+DisplayHandle. Correct the code which requires the device to be closed
+before changing the DisplayHandle and DisplayFormat parameters. SourceForge
+bug # 411101. (gdevdsp.c [1.2]: 2001/03/28 08:46:15 ghostgum)
+ - mdev-&gt;memory member was set to 0 causing gx_device_enum_ptr()
+not enumerate mdev. This led to freeing of mdev by GC and memory exceptions
+during de-allocation of the display device. (gdevdsp.c [1.3]: 2001/03/28
+21:50:56 alexcher)
+ - Correct memory allocation problems in the display device. Return
+correct pointers from display_enum_ptrs so that the memory device and bitmap
+are not moved or prematurely freed. Adds a finalize procedure. Change the
+memory device to not forward to the display device. Mark the memory device
+as retained so it gets freed at the correct time. (gdevdsp.c [1.4],
+gdevdsp2.h [1.2]: 2001/03/29 07:26:57 ghostgum)
+ - Prevents the buffered mode of the x11 device from missing updates
+from the bitmap buffer to the X display. Fix for Artifex customer #1130
+(gdevx.c [1.8]: 2001/03/30 18:22:28 rayjj)
+
+Adds Tumble parameter to mswinpr2 device for specifying the duplex
+arrangement. Adds QueryUser to the parameters returned by
+win_pr2_get_params, so that it works from the command line.
+(gdevwpr2.c [1.8]: 2001/03/26 09:44:08 ghostgum)
+
+Adds %printer% device to Windows to allow a printer to be specified as
+-sOutputFile="%printer%Printer Name". This replaces the use of
+"\\spool\Printer Name" for all but Windows 3.1/Win32s. Unlike the old
+\\spool\, the new %printer% device does not write a large temporary file.
+(gdevwpr2.c [1.9]: 2001/03/26 11:28:20 ghostgum)
+
+Applies PDF 1.4 rendering with all devices. Previously, only pnga device
+contained PDF 1.4 rendering capabilities. Now, when the PDF 1.4 imaging
+model is detected in the source file, it installs the pdf 1.4 rendering
+device as a device filter. (gdevp14.h [1.1]: 2001/04/01 00:30:41 raph)
+
+Change: The Ghostscript 'pwrite' function name conflicted with the standard
+pwrite function defined in unistd.h on several systems. To avoid confusion
+with the standard function change the name to stream_write. Also change
+'pputc' to 'stream_putc' and 'pputs' to 'stream_puts'. Fixes SourceForge bug
+#410772. Fix by Ray Johnston. (gdevps.c [1.16], gdevpsdu.c [1.9],
+gdevpsu.c [1.4]: 2001/04/01 00:35:26 raph)
+
+</pre><h2><a name="6.63-PDF_writer"></a>PDF writer</h2><pre>
+
+Fixes problems:
+ - coordinate range is reduced to +/- 16383 to satisfy actual AR4
+restrictions. When CTM was scaled to reduce the range, line width in stroke
+and CTM in fill were wrong. Bug # 409105 from raf_mellen at
+users.sourceforge.net (gdevpdfd.c [1.12]: 2001/03/21 04:25:48 alexcher)
+ - ARTICLE pdfmark generated invalid bead object if /Page key was
+left out. Bug # 227651 from mbentley at users.sourceforge.net
+(gdevpdfm.c [1.10]: 2001/03/21 05:10:31 alexcher)
+ - initial values of fill and stroke color didn't change when
+ProcessColorModel changed. An attempt to set white color in CMYK mode was
+ignored because it was considered equal to the default color. Bug #410441
+from a free user. (gdevpdf.c [1.30]: 2001/03/22 15:12:48 alexcher)
+ - pdf_reset_graphics() didn't set correct default color (black) in
+/DeviceCMYK color model. An attempt to set white color was ignored because
+it was considered equal to the default color causing white objects rendered
+black. Bug #410441 from a free user. (gdevpdfg.c [1.11]: 2001/03/23 22:04:19
+alexcher)
+ - Maximum depth of an outline tree increased from 8 to 32. Bug
+#410595 from a free user. (gdevpdfx.h [1.29]: 2001/03/23 22:18:28 alexcher)
+
+Change: The Ghostscript 'pwrite' function name conflicted with the standard
+pwrite function defined in unistd.h on several systems. To avoid confusion
+with the standard function change the name to stream_write. Also change
+'pputc' to 'stream_putc' and 'pputs' to 'stream_puts'. Fixes SourceForge bug
+#410772. Fix by Ray Johnston. (gdevpdf.c [1.31], gdevpdfb.c [1.4],
+gdevpdfc.c [1.15], gdevpdfd.c [1.13], gdevpdfe.c [1.9], gdevpdfg.c [1.12],
+gdevpdfj.c [1.6], gdevpdfm.c [1.11], gdevpdfo.c [1.7], gdevpdfs.c [1.3],
+gdevpdft.c [1.32], gdevpdfu.c [1.15], gdevpdfw.c [1.10]: 2001/04/01 00:35:26
+raph)
+
+</pre><h2><a name="6.63-PDF_Interpreter"></a>PDF Interpreter</h2><pre>
+
+Fixes problems:
+ - OmniForm generates PDF files with endobj missing in some objects.
+Adobe Acrobat Reader ignores this. Generally speaking, Ghostscript does not
+attempt to accept files that grossly fail to obey the Adobe specification
+and are produced by software other than a very few extremely widespread
+applications. However work-around for this case is easy and unlikely to
+break anything. SourceForge bug #406694. (lib/pdf_base.ps [1.14]: 2001/03/20
+05:04:59 alexcher)
+ - URI action was not converted to corresponding pdfmark and lost
+during PDF to PDF conversion. Bug #409245, patch Leon Bottou with some
+changes. (lib/pdf_main.ps [1.28]: 2001/03/24 23:59:23 alexcher)
+
+Implementation of security hooks for PDF reader by Geoffrey Keating is
+merged into the main GS code base. (lib/pdf_sec.ps [1.3]: 2001/03/25
+02:03:44 alexcher)
+
+Applies PDF 1.4 rendering with all devices. Previously, only pnga device
+contained PDF 1.4 rendering capabilities. Now, when the PDF 1.4 imaging
+model is detected in the source file, it installs the pdf 1.4 rendering
+device as a device filter. (lib/pdf_main.ps [1.29]: 2001/04/01 00:30:41
+raph)
+
+</pre><h2><a name="6.63-Interpreter"></a>Interpreter</h2><pre>
+
+Fixes problems:
+ - flush procedure based stdout and stderr on exit. (imain.c [1.8]:
+2001/03/27 09:38:39 ghostgum)
+ - Fix for CIDFontType 0 : 1. Erroneous glyphs are drawn by cshow
+(with -dNOCACHE); 2. Glyphs written in horizontal direction instead vertical
+(with anti-aliasing); 3. Erroneous glyphs and awkward metrics (with
+anti-aliasing and -dNOCACHE); Patches 1 &amp; 3 from Hideyuki Suzuki
+(hideyuki), improved by igorm. SourceForge bug #222683. (zchar1.c [1.7]:
+2001/03/27 09:56:39 igorm)
+ - Changes to introduce the min_left stream state variable set this
+to 1 for procedure streams, which caused 1 character to be retained in the
+stream buffer which was not passed to the client. This broke the DLL
+interface where procedure callouts were used to get the string from the
+callback. Procedure streams have no need for EOD lookahead (to force
+closure) so the correct min_left value is 0. SourceForge bug #404331.
+(zfproc.c [1.9]: 2001/03/29 04:09:40 rayjj)
+ - After recognizing a number the scanner wrongly interpreted it as a
+name, if the number ends at the end of input buffer. Change from Raph.
+SourceForge bug #224205. (iscannum.c [1.3]: 2001/03/29 13:27:59 igorm)
+ - Correct the Windows virtual key code passed from the image window
+to the console. (dwimg.c [1.2]: 2001/03/31 10:07:48 ghostgum)
+ - Put Windows console stdout and stderr in binary mode. Ignore the
+initial callout for stdout and stderr as the procedure stream acquires a
+buffer. (dwmainc.c [1.2], imain.c [1.9]: 2001/03/31 10:08:43 ghostgum)
+ - Corrects memory allocation of command line arguments in the
+programs which load the Ghostscript interpreter DLL / shared object.
+(dpmain.c [1.2], dwmain.c [1.2], dwmainc.c [1.3]: 2001/03/31 10:09:47
+ghostgum)
+ - When gswin32 text window is closed, exit the interpreter on next
+access to stdin and then destroy the text window. (dwmain.c [1.3],
+dwtext.c [1.2], imain.c [1.10]: 2001/03/31 10:11:55 ghostgum)
+
+Change the search order for the Ghostscript Windows DLL to try the
+executable directory before the location specified in the GS_DLL environment
+variable. (dwdll.c [1.2]: 2001/03/27 09:35:22 ghostgum)
+
+Update mail address from bug-gs@aladdin.com to bug-gs@ghostscript.com.
+(imainarg.c [1.10]: 2001/03/28 18:30:35 rayjj)
+
+Increments version number after 6.62 release. (lib/gs_init.ps [1.32]:
+2001/03/28 21:27:15 raph)
+
+Applies PDF 1.4 rendering with all devices. Previously, only pnga device
+contained PDF 1.4 rendering capabilities. Now, when the PDF 1.4 imaging
+model is detected in the source file, it installs the pdf 1.4 rendering
+device as a device filter. (zdfilter.c [1.2]: 2001/04/01 00:30:41 raph)
+
+Change: The Ghostscript 'pwrite' function name conflicted with the standard
+pwrite function defined in unistd.h on several systems. To avoid confusion
+with the standard function change the name to stream_write. Also change
+'pputc' to 'stream_putc' and 'pputs' to 'stream_puts'. Fixes SourceForge bug
+#410772. Fix by Ray Johnston. (zfcmap.c [1.9]: 2001/04/01 00:35:26 raph)
+
+</pre><h2><a name="6.63-Streams"></a>Streams</h2><pre>
+
+Fixes problems:
+ - Changes to introduce the min_left stream state variable set this
+to 1 for procedure streams, which caused 1 character to be retained in the
+stream buffer which was not passed to the client. This broke the DLL
+interface where procedure callouts were used to get the string from the
+callback. Procedure streams have no need for EOD lookahead (to force
+closure) so the correct min_left value is 0. SourceForge bug #404331.
+(stream.c [1.11], stream.h [1.8]: 2001/03/29 04:09:40 rayjj)
+
+Change: The Ghostscript 'pwrite' function name conflicted with the standard
+pwrite function defined in unistd.h on several systems. To avoid confusion
+with the standard function change the name to stream_write. Also change
+'pputc' to 'stream_putc' and 'pputs' to 'stream_puts'. Fixes SourceForge bug
+#410772. Fix by Ray Johnston. (spprint.c [1.3], spprint.h [1.3],
+spsdf.c [1.5]: 2001/04/01 00:35:26 raph)
+
+</pre><h2><a name="6.63-Library"></a>Library</h2><pre>
+
+Fixes problems:
+ - The old code can mis-identify ShadingType 1 function as constant
+due to testing it at insufficient set of points. Replacing it with slower
+accurate code. SourceForge bug #228714. (gxshade.c [1.6], gxshade.h [1.4],
+gxshade1.c [1.8]: 2001/03/25 10:18:50 igorm)
+ - Fix for CIDFontType 0 : 1. Erroneous glyphs are drawn by cshow
+(with -dNOCACHE); 2. Glyphs written in horizontal direction instead vertical
+(with anti-aliasing); 3. Erroneous glyphs and awkward metrics (with
+anti-aliasing and -dNOCACHE); Patches 1 &amp; 3 from Hideyuki Suzuki
+(hideyuki), improved by igorm. SourceForge bug #222683. (gxchar.c [1.4]:
+2001/03/27 09:56:39 igorm)
+ - Adds imaging_dev field to text enumeration, so that bbox device
+can intercept low level drawing operations caused by implementation of
+forwarded high level text operations. (gdevbbox.c [1.4], gstext.c [1.6],
+gxccache.c [1.4], gxtext.h [1.7]: 2001/04/01 00:33:36 raph)
+
+Applies PDF 1.4 rendering with all devices. Previously, only pnga device
+contained PDF 1.4 rendering capabilities. Now, when the PDF 1.4 imaging
+model is detected in the source file, it installs the pdf 1.4 rendering
+device as a device filter. (gdevp14.c [1.1], gsdfilt.c [1.2],
+gsdfilt.h [1.2]: 2001/04/01 00:30:41 raph)
+
+Change: The Ghostscript 'pwrite' function name conflicted with the standard
+pwrite function defined in unistd.h on several systems. To avoid confusion
+with the standard function change the name to stream_write. Also change
+'pputc' to 'stream_putc' and 'pputs' to 'stream_puts'. Fixes SourceForge bug
+#410772. Fix by Ray Johnston. (gdevpsf1.c [1.9], gdevpsfm.c [1.5],
+gdevpsft.c [1.7], gsfunc4.c [1.4]: 2001/04/01 00:35:26 raph)
+
+<hr>
+
+<h1><a name="Version6.62"></a>Version 6.62 (2001-03-19)</h1>
+
+<p>
+This is the first beta release for the upcoming 7.0 release. This fileset
+adds ICC profile support using Graeme Gill's icclib, and the new DLL
+interface from Russell Lang.
+
+<p>
+All problems registered on SourceForge numbered 409245 or lower are
+closed, except for the following: 201955, 202735, 206652, 209350,
+213799, 215256, 219677, 219798, 220967, 221582, 222534, 222683,
+222727, 223005, 223091, 223754, 223896, 223992, 224056, 224095,
+224134, 224205, 224863, 226364, 226391, 226462, 226477, 226584,
+226943, 227090, 227190, 227276, 227382, 227651, 227684, 227709,
+228180, 228354, 228423, 228641, 228714, 228788, 228808, 229439,
+230694, 230699, 231390, 232334, 232696, 233403, 404255, 404255,
+404482, 404933, 405313, 406285, 406643, 406689, 406694, 406696,
+406699, 406979, 407342, 409105, 409133, 409244, 409245. Note that,
+since the 6.61 release, SourceForge has renumbered all bugs in the
+1xxxxx range by adding 100000 (thus, they are now 2xxxxxx).
+
+
+<h2><a name="6.62-Documentation"></a>Documentation</h2><pre>
+
+Increments version number to 6.62 as part of 6.61 release process.
+(doc/News.htm [1.77]: 2001/02/24 01:56:01 raph)
+
+Adds Epson Stylus Color 300 support to uniprint, also some code cleanups.
+Thanks to Glenn Ramsey and Gunther Hess for the patch.
+(doc/Devices.htm [1.20]: 2001/03/03 00:45:01 raph)
+
+Added documentation for Ghostscript interpreter API as used by Windows and
+OS/2 DLL and GNU/Linux shared object. (doc/API.htm [1.1], doc/DLL.htm [1.8],
+doc/Readme.htm [1.20]: 2001/03/13 07:12:06 ghostgum)
+
+Documentation changes in preparation for 6.62 beta release.
+(doc/API.htm [1.2], doc/Bug-form.htm [1.15], doc/Bug-info.htm [1.11],
+doc/C-style.htm [1.12], doc/Commprod.htm [1.9], doc/Copying.htm [1.7],
+doc/Current.htm [1.7], doc/DLL.htm [1.9], doc/Develop.htm [1.33],
+doc/Devices.htm [1.21], doc/Drivers.htm [1.15], doc/Fonts.htm [1.13],
+doc/Helpers.htm [1.10], doc/History1.htm [1.7], doc/History2.htm [1.7],
+doc/History3.htm [1.7], doc/History4.htm [1.7], doc/History5.htm [1.9],
+doc/History6.htm [1.19], doc/Htmstyle.htm [1.10], doc/Install.htm [1.15],
+doc/Language.htm [1.26], doc/Lib.htm [1.7], doc/Maintain.htm [1.11],
+doc/Make.htm [1.23], doc/New-user.htm [1.20], doc/News.htm [1.78],
+doc/Projects.htm [1.24], doc/Ps-style.htm [1.7], doc/Ps2epsi.htm [1.8],
+doc/Ps2pdf.htm [1.25], doc/Psfiles.htm [1.14], doc/README [1.6],
+doc/Readme.htm [1.21], doc/Release.htm [1.29], doc/Source.htm [1.7],
+doc/Tester.htm [1.7], doc/Unix-lpr.htm [1.7], doc/Use.htm [1.23],
+doc/Xfonts.htm [1.7], doc/gs-vms.hlp [1.6], man/dvipdf.1 [1.4],
+man/font2c.1 [1.4], man/gs.1 [1.4], man/gslp.1 [1.4], man/gsnd.1 [1.4],
+man/pdf2dsc.1 [1.4], man/pdf2ps.1 [1.6], man/pdfopt.1 [1.4],
+man/pf2afm.1 [1.4], man/pfbtopfa.1 [1.5], man/printafm.1 [1.4],
+man/ps2ascii.1 [1.4], man/ps2epsi.1 [1.4], man/ps2pdf.1 [1.8],
+man/ps2pdfwr.1 [1.5], man/ps2ps.1 [1.11], man/wftopfa.1 [1.4]: 2001/03/17
+01:26:48 raph)
+
+Updates Changes and History6 files from cvs commit logs, in preparation for
+6.62 beta release. (doc/Changes.htm [1.22], doc/History6.htm [1.20]:
+2001/03/17 01:30:16 raph)
+
+There was a spelling error in Juan Manuel Acosta's name. His entry is also
+moved to "major contributers" section. (doc/Helpers.htm [1.11]: 2001/03/19
+16:46:05 alexcher)
+
+Updates date for 6.62 release to 2001-03-19. (doc/API.htm [1.3],
+doc/Bug-form.htm [1.16], doc/Bug-info.htm [1.12], doc/C-style.htm [1.13],
+doc/Commprod.htm [1.10], doc/Copying.htm [1.8], doc/Current.htm [1.8],
+doc/DLL.htm [1.10], doc/Develop.htm [1.34], doc/Devices.htm [1.22],
+doc/Drivers.htm [1.16], doc/Fonts.htm [1.14], doc/Helpers.htm [1.12],
+doc/History1.htm [1.8], doc/History2.htm [1.8], doc/History3.htm [1.8],
+doc/History4.htm [1.8], doc/History5.htm [1.10], doc/History6.htm [1.21],
+doc/Htmstyle.htm [1.11], doc/Install.htm [1.16], doc/Language.htm [1.27],
+doc/Lib.htm [1.8], doc/Maintain.htm [1.12], doc/Make.htm [1.24],
+doc/New-user.htm [1.21], doc/News.htm [1.79], doc/Projects.htm [1.25],
+doc/Ps-style.htm [1.8], doc/Ps2epsi.htm [1.9], doc/Ps2pdf.htm [1.26],
+doc/Psfiles.htm [1.15], doc/README [1.7], doc/Readme.htm [1.22],
+doc/Release.htm [1.30], doc/Source.htm [1.8], doc/Tester.htm [1.8],
+doc/Unix-lpr.htm [1.8], doc/Use.htm [1.24], doc/Xfonts.htm [1.8],
+doc/gs-vms.hlp [1.7], man/dvipdf.1 [1.5], man/font2c.1 [1.5],
+man/gs.1 [1.5], man/gslp.1 [1.5], man/gsnd.1 [1.5], man/pdf2dsc.1 [1.5],
+man/pdf2ps.1 [1.7], man/pdfopt.1 [1.5], man/pf2afm.1 [1.5],
+man/pfbtopfa.1 [1.6], man/printafm.1 [1.5], man/ps2ascii.1 [1.5],
+man/ps2epsi.1 [1.5], man/ps2pdf.1 [1.9], man/ps2pdfwr.1 [1.6],
+man/ps2ps.1 [1.12], man/wftopfa.1 [1.5]: 2001/03/19 17:26:17 raph)
+
+Inital version of this file that will be used to capture notes about minor
+bugs or compatibility that are identified when action will not be undertaken
+immediately. (doc/Issues.htm [1.1]: 2001/03/19 19:27:04 rayjj)
+
+</pre><h2><a name="6.62-Procedures"></a>Procedures</h2><pre>
+
+Fixes problems:
+ - Minor changes to fix compilation on VMS, thanks to Jacob
+=JoukJansen for the patch. (devs.mak [1.42]: 2001/03/01 22:16:02 raph)
+ - Corrects whitespace for new entries in devs.mak for VMS build.
+Thanks to Jouk Jansen. (devs.mak [1.44]: 2001/03/13 20:01:35 raph)
+ - Fixes SourceForge bug #219677. Adds debug and debugclean targets
+to MSVC++ makefile that build in the debugobj and debugbin directories.
+Fixes BEGINFILES and BEGINFILES2 so that 'make clean' removes all files.
+(msvc32.mak [1.10], winlib.mak [1.7]: 2001/03/16 22:53:18 ghostgum)
+ - /None and /All separations are now supported. SourceForge bug
+#228354. (lib.mak [1.45]: 2001/03/18 19:15:50 igorm)
+ - Adds lib directory to MS-Windows distribution archive. Change
+copyright message in MS-Windows setup program to artofcode LLC. Thanks to
+Russell Lang for the patch. (winint.mak [1.7]: 2001/03/19 17:12:45 raph)
+
+Increments version number to 6.62 as part of 6.61 release process.
+(version.mak [1.27]: 2001/02/24 01:56:01 raph)
+
+Provide alternate %stdin/out/err implementation using procedure based
+streams and callouts. Previous stdio implementation with
+STDIO_IMPLEMENTATION= New callout stdio implementation with
+STDIO_IMPLEMENTATION=c Bug fix to zflush and zpeekstring. New stdio stream
+code is in ziodevsc.c which will be in next commit. (bcwin32.mak [1.5],
+dvx-gcc.mak [1.6], gs.mak [1.3], int.mak [1.43], msvc32.mak [1.7],
+msvclib.mak [1.7], openvms.mak [1.7], os2.mak [1.10], ugcclib.mak [1.7],
+unix-gcc.mak [1.10], unixansi.mak [1.8], unixtrad.mak [1.8], watc.mak [1.7],
+watclib.mak [1.7], watcw32.mak [1.6]: 2001/03/12 04:05:19 ghostgum)
+
+Adds device filter pipeline, which will be used by PDF 1.4 and other
+enhanced imaging operations. (int.mak [1.44], lib.mak [1.43]: 2001/03/13
+00:41:10 raph)
+
+Implement new Ghostscript interpreter API for DLL or shared object.
+Reimplement old DLL interface using new API. See iapi.h and iapi.c for new
+API. For unix, build using "make so". Added loader programs for Ghostscript
+interpreter library for GNU/Linux (dxmain.c), Windows (dw*.c) and OS/2
+(dpmain.c). Add new "display" device for use with the new API. GNU/Linux
+dxmain.c uses the "display" device, Gtk+ and GdkRgb for faster drawing than
+the "x11" device. (devs.mak [1.43], gsdll2.def [1.2], gsdll32.def [1.2],
+int.mak [1.45], msvc32.mak [1.8], os2.mak [1.11], unix-dll.mak [1.1],
+unix-gcc.mak [1.11], winint.mak [1.6], winlib.mak [1.6]: 2001/03/13 07:09:28
+ghostgum)
+
+When building the GNU/Linux shared object, separate directories soobj and sobin
+are used to prevent 'make' from mixing the object files and building a
+corrupt executable. Added 'API.htm' to the installed documentation files.
+(unix-dll.mak [1.2], unix-gcc.mak [1.12], unixinst.mak [1.18]: 2001/03/15
+09:11:28 ghostgum)
+
+Change path on Windows and OS/2 platforms from c:/aladdin
+to c:/gs. (bcwin32.mak [1.6], msvc32.mak [1.9], msvclib.mak [1.8],
+watc.mak [1.8], watclib.mak [1.8], watcw32.mak [1.7]: 2001/03/16 22:19:16
+ghostgum)
+
+Integrates ICC profile input support from Jan Stoeckenius. Also includes
+slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme
+Gill. (bcwin32.mak [1.7], devs.mak [1.45], dvx-gcc.mak [1.7], gs.mak [1.4],
+icclib.mak [1.1], int.mak [1.46], lib.mak [1.44], msvc32.mak [1.11],
+msvclib.mak [1.9], openvms.mak [1.8], os2.mak [1.12], ugcclib.mak [1.8],
+unix-gcc.mak [1.13], unixansi.mak [1.9], unixtrad.mak [1.9],
+version.mak [1.28], watc.mak [1.9], watclib.mak [1.9], watcw32.mak [1.8],
+wctail.mak [1.3], winlib.mak [1.8]: 2001/03/17 01:15:42 raph)
+
+Moves patched icclib 1.23 files into the new icclib/ subdirectory, with
+makefile changes to match. Adds missing COPYRIGHT and other documentation to
+icclib. Thanks to L. Peter Deutsch for pointing out the need.
+(bcwin32.mak [1.8], dvx-gcc.mak [1.8], msvc32.mak [1.12],
+msvclib.mak [1.10], openvms.mak [1.9], os2.mak [1.13], ugcclib.mak [1.9],
+unix-gcc.mak [1.14], unixansi.mak [1.10], unixtrad.mak [1.10],
+watc.mak [1.10], watclib.mak [1.10], watcw32.mak [1.9]: 2001/03/19 17:11:15
+raph)
+
+Updates date for 6.62 release to 2001-03-19. (version.mak [1.29]: 2001/03/19
+17:26:18 raph)
+
+</pre><h2><a name="6.62-Utilities"></a>Utilities</h2><pre>
+
+Replace many references to exit() with returns. (gp_dvx.c [1.3],
+gp_os2.c [1.7], gp_unix.c [1.4]: 2001/03/12 03:50:02 ghostgum)
+
+Cleanup of MS-Windows and OS/2 code. Remove old 16-bit MS-Windows code.
+Remove references to stdout/err, replacing with eprintf(). Remove global
+variables. Disable mswindll and os2dll devices if a callback function is not
+provided. (gp_mswin.c [1.4], gp_os2.c [1.8]: 2001/03/12 03:56:13 ghostgum)
+
+stdio implementation using callouts. Missing file from last commit.
+(ziodevsc.c [1.1]: 2001/03/12 04:11:28 ghostgum)
+
+Implement new Ghostscript interpreter API for DLL or shared object.
+Reimplement old DLL interface using new API. See iapi.h and iapi.c for new
+API. For unix, build using "make so". Added loader programs for Ghostscript
+interpreter library for GNU/Linux (dxmain.c), Windows (dw*.c) and OS/2
+(dpmain.c). Add new "display" device for use with the new API. GNU/Linux
+dxmain.c uses the "display" device, Gtk+ and GdkRgb for faster drawing than
+the "x11" device. (dxmain.c [1.1], gp_msdll.c [1.1], gp_mswin.c [1.5],
+gp_os2.c [1.9], gsdll.c [1.4]: 2001/03/13 07:09:28 ghostgum)
+
+Integrates ICC profile input support from Jan Stoeckenius. Also includes
+slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme
+Gill. (icc.c [1.1]: 2001/03/17 01:15:42 raph)
+
+Moves patched icclib 1.23 files into the new icclib/ subdirectory, with
+makefile changes to match. Adds missing COPYRIGHT and other documentation to
+icclib. Thanks to L. Peter Deutsch for pointing out the need. (icc.c [1.2]:
+2001/03/19 17:11:15 raph)
+
+</pre><h2><a name="6.62-Drivers"></a>Drivers</h2><pre>
+
+Fixes problems:
+ - to achieve page independence, every page must in the general case
+set page parameters. To preserve duplexing the page cannot set page
+parameters. New code checks the current page size and sets it only if it is
+necessary. Bug #404376 reported by bannis at users.sourceforge.net
+(gdevpsu.c [1.3]: 2001/03/03 03:27:03 alexcher)
+
+Adds Epson Stylus Color 300 support to uniprint, also some code cleanups.
+Thanks to Glenn Ramsey and Gunther Hess for the patch. (gdevupd.c [1.4],
+lib/stc300.upp [1.1], lib/stc300bl.upp [1.1], lib/stc300bm.upp [1.1]:
+2001/03/03 00:45:01 raph)
+
+Cleanup of MS-Windows and OS/2 code. Remove old 16-bit MS-Windows code.
+Remove references to stdout/err, replacing with eprintf(). Remove global
+variables. Disable mswindll and os2dll devices if a callback function is not
+provided. (gdevmswn.c [1.3], gdevpm.c [1.3], gdevwdib.c [1.3],
+gdevwpr2.c [1.6], gdevwprn.c [1.3]: 2001/03/12 03:56:13 ghostgum)
+
+Redirect all user messages from stdout and stderr to outwrite() and
+errwrite(). This is needed to allow stdout/err to be redirected to the
+caller for DLL / shared object builds. (gdev4693.c [1.2], gdevcdj.c [1.5],
+gdevhl7x.c [1.4], gdevifno.c [1.2], gdevimgn.c [1.3], gdevos2p.c [1.4],
+gdevsppr.c [1.3], gdevsunr.c [1.3], gdevupd.c [1.5], gdevwddb.c [1.3],
+gdevwpr2.c [1.7]: 2001/03/13 06:51:39 ghostgum)
+
+Implement new Ghostscript interpreter API for DLL or shared object.
+Reimplement old DLL interface using new API. See iapi.h and iapi.c for new
+API. For unix, build using "make so". Added loader programs for Ghostscript
+interpreter library for GNU/Linux (dxmain.c), Windows (dw*.c) and OS/2
+(dpmain.c). Add new "display" device for use with the new API. GNU/Linux
+dxmain.c uses the "display" device, Gtk+ and GdkRgb for faster drawing than
+the "x11" device. (gdevdsp.c [1.1], gdevdsp.h [1.1], gdevdsp2.h [1.1],
+gdevmswn.c [1.4], gdevpm.c [1.4]: 2001/03/13 07:09:28 ghostgum)
+
+Adds typed image rendering to pnga (prototype PDF 1.4) device.
+(gdevpnga.c [1.3]: 2001/03/17 00:16:53 raph)
+
+Integrates ICC profile input support from Jan Stoeckenius. Also includes
+slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme
+Gill. (gdevpx.c [1.6]: 2001/03/17 01:15:42 raph)
+
+</pre><h2><a name="6.62-PDF_writer"></a>PDF writer</h2><pre>
+
+Fixes problems:
+ - properly include unistd_.h in files that call unlink()
+(gdevpdf.c [1.29]: 2001/03/16 22:12:34 giles)
+
+Redirect all user messages from stdout and stderr to outwrite() and
+errwrite(). This is needed to allow stdout/err to be redirected to the
+caller for DLL / shared object builds. (gdevpdfm.c [1.9]: 2001/03/13
+06:51:39 ghostgum)
+
+Integrates ICC profile input support from Jan Stoeckenius. Also includes
+slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme
+Gill. (gdevpdfc.c [1.14]: 2001/03/17 01:15:42 raph)
+
+</pre><h2><a name="6.62-PDF_Interpreter"></a>PDF Interpreter</h2><pre>
+
+Fixes problems:
+ - When the stream is located in an external file (i.e. the stream
+dictionary contains an /F entry) GS fails with "typecheck in .knownget"
+because of a minor bug in stack handling in pdf_base.ps. Bug #229425, the
+fix from Andreas Bolsch &lt;meromorphic at users.sourceforge.net&gt;
+(lib/pdf_base.ps [1.13]: 2001/03/04 16:59:19 alexcher)
+ - GS can override image interpolation using INTERPOLATE or
+NOINTERPOLATE flags. These flags had no effect on PDF because the PDF
+interpreter is bound earlier than image operator is redefined. New version
+takes image and imagemask values from systemdict at run time.
+(lib/pdf_draw.ps [1.27]: 2001/03/11 05:15:26 alexcher)
+
+Integrates ICC profile input support from Jan Stoeckenius. Also includes
+slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme
+Gill. (lib/pdf_draw.ps [1.28], lib/pdf_ops.ps [1.16]: 2001/03/17 01:15:41
+raph)
+
+</pre><h2><a name="6.62-Interpreter"></a>Interpreter</h2><pre>
+
+Fixes problems:
+ - Allocate filter in local VM when currentglobal is false. Prevents
+a problem with some QuarkXpress ProcSets that turn off vmreclaim and expect
+save/restore to free memory which only works on local VM. Fix for problem
+reported by Artifex customer #150, file "japan.ps". (zfilter.c [1.5]:
+2001/02/28 00:39:26 rayjj)
+ - Speed-up JPEG decompression by increasing file buffer to 2K. This
+avoids installation of an intermediate buffering filter that resulted in a
+byte-by-byte filling of the buffer to the JPEG code. When the buffer was not
+full enough a recoverable error would result in a round trip for the next
+byte. Fixes SourcForge bug #405342 for Artifex customer #350.
+(zfile.c [1.7]: 2001/03/02 03:06:50 alexcher)
+ - Removes Category dictionary from dictionary stack during the
+execution of the /Font resourceforall procedure, needed for proper access
+from the procedure to underlying dictionary. Fixes SourceForge bug #224973.
+(lib/gs_cidcm.ps [1.2]: 2001/03/03 15:09:12 igorm)
+ - GS didn't accept packed array as data source in image with
+multiple data sources. From internal bug report. (zimage2.c [1.4]:
+2001/03/12 22:53:22 alexcher)
+ - ztype9mapcid now allocates string in global memory space to match
+allocation of contents. Thanks to Masatake YAMATO for the patch.
+(zfcid0.c [1.6]: 2001/03/13 19:57:06 raph)
+ - Define to DefaultGray, DefaultRGB, DefaultCMYK color spaces to
+allow UseCIEColor to work. SourceForge bugs #216461, #219676.
+(lib/gs_ll3.ps [1.8]: 2001/03/14 12:00:37 igorm)
+ - /None and /All separations are now supported. SourceForge bug
+#228354. (zcssepr.c [1.6]: 2001/03/18 19:17:50 igorm)
+
+Increments version number to 6.62 as part of 6.61 release process.
+(lib/gs_init.ps [1.30]: 2001/02/24 01:56:01 raph)
+
+Replace many references to exit() with returns. (errors.h [1.3], gs.c [1.3],
+igcref.c [1.3], imain.c [1.4], imainarg.c [1.7], imainarg.h [1.3],
+zcontext.c [1.7]: 2001/03/12 03:50:02 ghostgum)
+
+Provide alternate %stdin/out/err implementation using procedure based
+streams and callouts. Previous stdio implementation with
+STDIO_IMPLEMENTATION= New callout stdio implementation with
+STDIO_IMPLEMENTATION=c Bug fix to zflush and zpeekstring. New stdio stream
+code is in ziodevsc.c which will be in next commit. (errors.h [1.4],
+files.h [1.3], imain.c [1.5], iminst.h [1.3], interp.c [1.7], zfile.c [1.8],
+zfileio.c [1.10], zfproc.c [1.8], ziodev.c [1.4]: 2001/03/12 04:05:19
+ghostgum)
+
+This fix corrects a problem with VM usage in the DSC parser. Previously the
+dictionary dsc_dict was allocated in global VM but the DSC parser would try
+to insert items while in local VM mode. This fix forces the DSC parser into
+global VM mode. (lib/gs_dscp.ps [1.4]: 2001/03/12 22:41:22 dancoby)
+
+Adds device filter pipeline, which will be used by PDF 1.4 and other
+enhanced imaging operations. (zdfilter.c [1.1]: 2001/03/13 00:41:10 raph)
+
+Redirect all user messages from stdout and stderr to outwrite() and
+errwrite(). This is needed to allow stdout/err to be redirected to the
+caller for DLL / shared object builds. (gs.c [1.4], idebug.c [1.3],
+igc.c [1.3], imain.c [1.6], imainarg.c [1.8]: 2001/03/13 06:51:39 ghostgum)
+
+Implement new Ghostscript interpreter API for DLL or shared object.
+Reimplement old DLL interface using new API. See iapi.h and iapi.c for new
+API. For unix, build using "make so". Added loader programs for Ghostscript
+interpreter library for GNU/Linux (dxmain.c), Windows (dw*.c) and OS/2
+(dpmain.c). Add new "display" device for use with the new API. GNU/Linux
+dxmain.c uses the "display" device, Gtk+ and GdkRgb for faster drawing than
+the "x11" device. (dpmain.c [1.1], dpmainc.c [1.3], dwdll.c [1.1],
+dwdll.cpp [1.3], dwdll.h [1.3], dwimg.c [1.1], dwimg.cpp [1.4],
+dwimg.h [1.3], dwmain.c [1.1], dwmain.cpp [1.3], dwmain.h [1.3],
+dwmainc.c [1.1], dwmainc.cpp [1.4], dwnodll.c [1.1], dwnodll.cpp [1.3],
+dwtext.c [1.1], dwtext.cpp [1.3], dwtext.h [1.3], files.h [1.4], gs.c [1.5],
+iapi.c [1.1], iapi.h [1.1], iconf.c [1.3], idisp.c [1.1], idisp.h [1.1],
+imain.c [1.7], imainarg.c [1.9], iminst.h [1.4], main.h [1.3]: 2001/03/13
+07:09:28 ghostgum)
+
+Interpolation overriding is modified to support - colorimage; old version
+did nothing - ImageType 3 dictionaries; old version did nothing - local data
+source in global mode; old version failed (lib/gs_init.ps [1.31]: 2001/03/13
+22:50:03 alexcher)
+
+Integrates ICC profile input support from Jan Stoeckenius. Also includes
+slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme
+Gill. (icie.h [1.3], lib/gs_icc.ps [1.1], zcie.c [1.5], zicc.c [1.1]:
+2001/03/17 01:15:41 raph)
+
+</pre><h2><a name="6.62-Streams"></a>Streams</h2><pre>
+
+Fixes problems:
+ - eexecDecode filter returned EOF immediately if the input stream
+was shorter than 9 characters. New code may misidentify short streams but
+old code always failed. (seexec.c [1.4]: 2001/02/23 03:00:13 alexcher)
+
+Replace many references to exit() with returns. (stdpre.h [1.3]: 2001/03/12
+03:50:02 ghostgum)
+
+Redirect all user messages from stdout and stderr to outwrite() and
+errwrite(). This is needed to allow stdout/err to be redirected to the
+caller for DLL / shared object builds. (std.h [1.4]: 2001/03/13 06:51:39
+ghostgum)
+
+Integrates ICC profile input support from Jan Stoeckenius. Also includes
+slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme
+Gill. (stream.c [1.10]: 2001/03/17 01:15:42 raph)
+
+Minor patch to header files so that unlink() prototype doesn't conflict when
+const is disabled through #define. (stdio_.h [1.4]: 2001/03/17 01:18:34
+raph)
+
+</pre><h2><a name="6.62-Library"></a>Library</h2><pre>
+
+Fixes problems:
+ - Minor changes to fix compilation on VMS, thanks to Jacob
+=JoukJansen for the patch. (gstrans.c [1.13]: 2001/03/01 22:16:02 raph)
+ - gp_file_name_sizeof is increased to 260 bytes, == MAX_PATH on MS
+Windows. The platform-specific fix is too difficult because some platforms
+may have very long or unlimited file names. Bug #231514 submitted by
+anonymous user. (gp.h [1.6]: 2001/03/03 04:38:19 alexcher)
+ - When objects were resized or trimmed, the objects o_size was not
+being updated if the rounded_size didn't change. This could lead to
+alignment issues on some systems (causing a crash). Problem reported by
+Artifex customer #460. (gsalloc.c [1.9]: 2001/03/12 00:04:28 rayjj)
+ - Some device color components were missed while serializing
+halftone to clist, causing segment fault during playback. Changes use proper
+number of device color components to be written to clist and read from it.
+SourceForge bug #211449. (gxclpath.c [1.9], gxclrast.c [1.9]: 2001/03/13
+08:38:03 igorm)
+ - kshow now restores currentfont if changed while running proc.
+Fixes SourceForge bug #221715. (gxchar.c [1.3]: 2001/03/14 13:03:49 igorm)
+ - properly include unistd_.h in files that call unlink()
+(gsiodev.c [1.5], gxclfile.c [1.3]: 2001/03/16 22:12:34 giles)
+ - /None and /All separations are now supported. SourceForge bug
+#228354. (gscsepr.c [1.7]: 2001/03/18 19:17:50 igorm)
+
+Replace many references to exit() with returns. (gsargs.c [1.3],
+gsargs.h [1.4], gsexit.h [1.3], gxalloc.h [1.6]: 2001/03/12 03:50:02
+ghostgum)
+
+Adds device filter pipeline, which will be used by PDF 1.4 and other
+enhanced imaging operations. (gsdfilt.c [1.1], gsdfilt.h [1.1],
+gsstate.c [1.10], gzstate.h [1.5]: 2001/03/13 00:41:10 raph)
+
+Redirect all user messages from stdout and stderr to outwrite() and
+errwrite(). This is needed to allow stdout/err to be redirected to the
+caller for DLL / shared object builds. (gp_unifs.c [1.4], gsargs.c [1.4],
+gsinit.c [1.3], gsio.h [1.5], gslib.c [1.4], gsmisc.c [1.10],
+gxclutil.c [1.4]: 2001/03/13 06:51:39 ghostgum)
+
+Implement new Ghostscript interpreter API for DLL or shared object.
+Reimplement old DLL interface using new API. See iapi.h and iapi.c for new
+API. For unix, build using "make so". Added loader programs for Ghostscript
+interpreter library for GNU/Linux (dxmain.c), Windows (dw*.c) and OS/2
+(dpmain.c). Add new "display" device for use with the new API. GNU/Linux
+dxmain.c uses the "display" device, Gtk+ and GdkRgb for faster drawing than
+the "x11" device. (gsexit.h [1.4]: 2001/03/13 07:09:29 ghostgum)
+
+Integrates ICC profile input support from Jan Stoeckenius. Also includes
+slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme
+Gill. (gs_stdio.h [1.1], gscdef.c [1.12], gscie.c [1.4], gscie.h [1.3],
+gsciemap.c [1.5], gscolor.c [1.5], gscolor1.c [1.4], gscscie.c [1.4],
+gscspace.h [1.6], gscssub.c [1.3], gsicc.c [1.1], gsicc.h [1.1],
+gxcie.h [1.3], gxshade.c [1.5], icc.h [1.1]: 2001/03/17 01:15:42 raph)
+
+Minor patch to header files so that unlink() prototype doesn't conflict when
+const is disabled through #define. (unistd_.h [1.2]: 2001/03/17 01:18:34
+raph)
+
+Moves patched icclib 1.23 files into the new icclib/ subdirectory, with
+makefile changes to match. Adds missing COPYRIGHT and other documentation to
+icclib. Thanks to L. Peter Deutsch for pointing out the need. (icc.h [1.2]:
+2001/03/19 17:11:15 raph)
+
+</pre><h2><a name="6.62-Other"></a>Other</h2><pre>
+
+Cleanup of MS-Windows and OS/2 code. Remove old 16-bit MS-Windows code.
+Remove references to stdout/err, replacing with eprintf(). Remove global
+variables. Disable mswindll and os2dll devices if a callback function is not
+provided. (gp_mswin.h [1.3]: 2001/03/12 03:56:13 ghostgum)
+
+Implement new Ghostscript interpreter API for DLL or shared object.
+Reimplement old DLL interface using new API. See iapi.h and iapi.c for new
+API. For unix, build using "make so". Added loader programs for Ghostscript
+interpreter library for GNU/Linux (dxmain.c), Windows (dw*.c) and OS/2
+(dpmain.c). Add new "display" device for use with the new API. GNU/Linux
+dxmain.c uses the "display" device, Gtk+ and GdkRgb for faster drawing than
+the "x11" device. (gp_mswin.h [1.4], gsdll.h [1.3], gsdllwin.h [1.3]:
+2001/03/13 07:09:28 ghostgum)
+
+Integrates ICC profile input support from Jan Stoeckenius. Also includes
+slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme
+Gill. (icc9809.h [1.1]: 2001/03/17 01:15:42 raph)
+
+Moves patched icclib 1.23 files into the new icclib/ subdirectory, with
+makefile changes to match. Adds missing COPYRIGHT and other documentation to
+icclib. Thanks to L. Peter Deutsch for pointing out the need.
+(icc9809.h [1.2], icclib/COPYRIGHT [1.1], icclib/NOTES [1.1],
+icclib/README [1.1], icclib/icc.c [1.1], icclib/icc.h [1.1],
+icclib/icc9809.h [1.1]: 2001/03/19 17:11:14 raph)
+
+<hr>
+
+<h1><a name="Version6.61"></a>Version 6.61 (2001-02-21)</h1>
+
+<p>
+The primary updates in this fileset are in the PDF 1.4 transparency and
+blending code (available for testing with the pnga driver). The usual
+bug fixes are also present.
+
+<p>
+All problems registered on SourceForge numbered 133403 or lower are
+closed, except for the following: 101814, 101955, 102735, 106652,
+109350, 111449, 113116, 113799, 114084, 115256, 116461, 119676,
+119677, 119798, 120967, 121582, 121715, 122534, 122683, 122727,
+123005, 123091, 123754, 123896, 123992, 124056, 124095, 124134,
+124205, 124863, 124973, 126364, 126391, 126462, 126477, 126584,
+126943, 127090, 127190, 127244, 127276, 127382, 127651, 127684,
+127709, 127802, 128180, 128354, 128423, 128641, 128714, 128808,
+129425, 129439, 130694, 130699, 131001, 131390, 131514, 132334,
+132696, 133403.
+
+
+<h2><a name="6.61-Documentation"></a>Documentation</h2><pre>
+
+Fixes problems:
+ - Ps-style.htm was missing from the index/blurbs in Readme.htm Adds
+a note about documentation to the "Adding and Removing Files" section, and
+moves that section to Maintain.htm from Release.htm. Closes sourceforge bug
+#126771 (doc/Maintain.htm [1.9], doc/Readme.htm [1.18],
+doc/Release.htm [1.27]: 2001/02/09 01:59:35 giles)
+
+Brings prototypes for fill_path, stroke_path, and fill_trapezoid in sync
+with code. New description for fill_trapezoid, as the parameters changed
+considerably. (doc/Drivers.htm [1.13]: 2001/01/04 19:08:25 raph)
+
+Adds a link to Adobe's Technote #5407 regarding transparency.
+(doc/Language.htm [1.24]: 2001/01/07 18:21:55 giles)
+
+Updates png and zlib urls to the new canonical domain. Patch from Tobias
+Burnus. (doc/Devices.htm [1.18], doc/Make.htm [1.20],
+doc/New-user.htm [1.18]: 2001/01/07 18:36:35 giles)
+
+Increments CVS version number to 6.61 as part of (very delayed) 6.60 release
+process. (doc/News.htm [1.75]: 2001/02/03 01:23:03 raph)
+
+Added DOPDFMARKS to allow pdfmark to be called for annotations, links and
+cropboxes for PDF files on any device. Fixes SourceForge bug # 127062.
+(doc/Use.htm [1.21]: 2001/02/09 23:38:12 ghostgum)
+
+Added addition comments about how to build GS on am IBM RS6000 under AIX
+version 4.3.3 using the IBM C compiler (xlc) version 5.
+(doc/Make.htm [1.21]: 2001/02/20 06:09:31 dancoby)
+
+Updates dates and version numbers in preparation for 6.61 release.
+(doc/Bug-form.htm [1.14], doc/Bug-info.htm [1.10], doc/C-style.htm [1.11],
+doc/Commprod.htm [1.8], doc/Copying.htm [1.6], doc/Current.htm [1.6],
+doc/DLL.htm [1.7], doc/Develop.htm [1.32], doc/Devices.htm [1.19],
+doc/Drivers.htm [1.14], doc/Fonts.htm [1.12], doc/Helpers.htm [1.9],
+doc/History1.htm [1.6], doc/History2.htm [1.6], doc/History3.htm [1.6],
+doc/History4.htm [1.6], doc/History5.htm [1.8], doc/History6.htm [1.17],
+doc/Htmstyle.htm [1.9], doc/Install.htm [1.14], doc/Language.htm [1.25],
+doc/Lib.htm [1.6], doc/Maintain.htm [1.10], doc/Make.htm [1.22],
+doc/New-user.htm [1.19], doc/News.htm [1.76], doc/PUBLIC [1.4],
+doc/Projects.htm [1.23], doc/Ps-style.htm [1.6], doc/Ps2epsi.htm [1.7],
+doc/Ps2pdf.htm [1.24], doc/Psfiles.htm [1.13], doc/README [1.5],
+doc/Readme.htm [1.19], doc/Release.htm [1.28], doc/Source.htm [1.6],
+doc/Tester.htm [1.6], doc/Unix-lpr.htm [1.6], doc/Use.htm [1.22],
+doc/Xfonts.htm [1.6], doc/gs-vms.hlp [1.5], man/dvipdf.1 [1.3],
+man/font2c.1 [1.3], man/gs.1 [1.3], man/gslp.1 [1.3], man/gsnd.1 [1.3],
+man/pdf2dsc.1 [1.3], man/pdf2ps.1 [1.5], man/pdfopt.1 [1.3],
+man/pf2afm.1 [1.3], man/pfbtopfa.1 [1.4], man/printafm.1 [1.3],
+man/ps2ascii.1 [1.3], man/ps2epsi.1 [1.3], man/ps2pdf.1 [1.7],
+man/ps2pdfwr.1 [1.4], man/ps2ps.1 [1.10], man/wftopfa.1 [1.3]: 2001/02/22
+07:30:37 raph)
+
+</pre><h2><a name="6.61-Procedures"></a>Procedures</h2><pre>
+
+Updates png and zlib urls to the new canonical domain. Patch from Tobias
+Burnus. (libpng.mak [1.4], zlib.mak [1.3]: 2001/01/07 18:36:35 giles)
+
+First cut of the PDF 1.4 transparency and blending operations.
+(contrib.mak [1.21], lib.mak [1.42]: 2001/01/14 00:25:27 raph)
+
+Increments CVS version number to 6.61 as part of (very delayed) 6.60 release
+process. (version.mak [1.25]: 2001/02/03 01:23:03 raph)
+
+Continuing development of PDF 1.4 transparency and blending. This round of
+commits implements groups, including non-isolated and knockout variants.
+Also, moves the build rule for the pnga device from contrib to devs.
+(contrib.mak [1.22], devs.mak [1.41]: 2001/02/22 07:27:10 raph)
+
+Updates dates and version numbers in preparation for 6.61 release.
+(version.mak [1.26]: 2001/02/22 07:30:39 raph)
+
+</pre><h2><a name="6.61-Utilities"></a>Utilities</h2><pre>
+
+Fixes problems:
+ - Temporary _.at file was not deleted. (lib/pdf2ps.bat [1.4]:
+2001/02/03 16:12:29 alexcher)
+ - Added -dSAFER (lib/pdf2ps.cmd [1.2]: 2001/02/03 18:31:12 alexcher)
+ - Defines prototypes for fputs only for (broken) Sun platforms, to
+avoid type mismatches when compiling with -Dconst=. Fixes SourceForge bug
+133358. (echogs.c [1.3]: 2001/02/22 03:59:39 raph)
+
+branches: 1.1.2; file vdtrace.c was initially added on branch HINTER.
+(vdtrace.c [1.1]: 2001/01/12 06:19:36 igorm)
+
+branches: 1.1.2; file _type1.c was initially added on branch HINTER.
+(_type1.c [1.1]: 2001/02/02 20:27:09 igorm)
+
+Converted to SAFER mode. (lib/pf2afm [1.2], lib/pf2afm.bat [1.2],
+lib/pf2afm.cmd [1.2], lib/pf2afm.ps [1.3]: 2001/02/03 21:31:40 alexcher)
+
+</pre><h2><a name="6.61-Drivers"></a>Drivers</h2><pre>
+
+Fixes problems:
+ - Changes tiff12nc to output correct number of bytes for odd widths.
+(gdevtfnx.c [1.5]: 2001/02/03 18:50:01 raph)
+ - Added down cast from gx_device_printer to gx_device_fax The fix is
+suggested by the user. (gdevdfax.c [1.4]: 2001/02/12 21:02:51 alexcher)
+ - pswrite ProcSet is reordered to eliminate forward references and
+please a simplistic parser used by one of GS customers. (gdevps.c [1.15]:
+2001/02/21 05:52:07 alexcher)
+
+First cut of the PDF 1.4 transparency and blending operations.
+(gdevpnga.c [1.1]: 2001/01/14 00:25:27 raph)
+
+Continuing development of PDF 1.4 transparency and blending. This round of
+commits implements groups, including non-isolated and knockout variants.
+Also, moves the build rule for the pnga device from contrib to devs.
+(gdevpnga.c [1.2]: 2001/02/22 07:27:10 raph)
+
+</pre><h2><a name="6.61-PDF_writer"></a>PDF writer</h2><pre>
+
+Fixes problems:
+ - in pdfwrite mode kshow called its procedure in infinite loop
+bacause the character indes was not updated. Unexpected number of calls to
+the procedure often caused various errors such as /stackunderfloe.
+(gdevpdfs.c [1.2]: 2001/02/06 21:42:38 alexcher)
+ - imagemask used the color of previous object if the object had
+smaller clipping path than imagemask. Deferred grestore and setcolor were
+transposed. (gdevpdfi.c [1.21]: 2001/02/07 03:49:27 alexcher)
+
+</pre><h2><a name="6.61-PDF_Interpreter"></a>PDF Interpreter</h2><pre>
+
+Fixes problems:
+ - skip all bytes after the end of the stream in the inline image
+until EOL or EI is found. Some buggy PDF files require this. Fix: In PDF 1.3
+/Matrix key in XObject is optional. Add unitary matrix to the form
+dictionary if XObject has none. (lib/pdf_draw.ps [1.25]: 2001/02/02 22:08:33
+alexcher)
+
+Added DOPDFMARKS to allow pdfmark to be called for annotations, links and
+cropboxes for PDF files on any device. Fixes SourceForge bug # 127062.
+(lib/pdf_main.ps [1.27]: 2001/02/09 23:38:12 ghostgum)
+
+Continuing development of PDF 1.4 transparency and blending. This round of
+commits implements groups, including non-isolated and knockout variants.
+Also, moves the build rule for the pnga device from contrib to devs.
+(lib/pdf_draw.ps [1.26]: 2001/02/22 07:27:10 raph)
+
+</pre><h2><a name="6.61-Interpreter"></a>Interpreter</h2><pre>
+
+Fixes problems:
+ - cvs operator did't report rangecheck when source operand is a name
+or string and it's longer than the destination string. Bug # 130975
+(iutil.c [1.3]: 2001/02/05 20:43:40 alexcher)
+ - memmove() was used without portability header file memory_.h
+(ztrans.c [1.13]: 2001/02/13 19:45:38 alexcher)
+ - New TransformPQR implements a relative colorimetric intent by
+scaling the XYZ values relative to the white and black points. Bug #129771
+(lib/gs_lev2.ps [1.7]: 2001/02/21 04:23:44 alexcher)
+
+branches: 1.1.2; file dwtrace.h was initially added on branch HINTER.
+(dwtrace.h [1.1]: 2001/01/12 06:18:35 igorm)
+
+branches: 1.1.2; file dwtrace.cpp was initially added on branch HINTER.
+(dwtrace.cpp [1.1]: 2001/01/12 06:22:06 igorm)
+
+Increments CVS version number to 6.61 as part of (very delayed) 6.60 release
+process. (lib/gs_init.ps [1.29]: 2001/02/03 01:23:03 raph)
+
+</pre><h2><a name="6.61-Streams"></a>Streams</h2><pre>
+
+Minor patches for clean VMS compile. Thanks to Jacob (=Jouk) Jansen.
+(stdio_.h [1.3]: 2001/02/02 07:52:26 raph)
+
+</pre><h2><a name="6.61-Library"></a>Library</h2><pre>
+
+Fixes problems:
+ - egcc - 2.91.66 generates incorrect code for dda_step_add(dxx4,
+dxx4); Using the intermediate variable now to wark around the problem. This
+bug corrupted memory block headers and caused random crashes.
+(gxifast.c [1.3]: 2001/01/25 21:36:17 alexcher)
+
+Changes gx_image_cached_char so that it now images to the device in the text
+enumeration, rather than the current device. This change gives more
+flexibility for implementations of begin_text to interpose a device of their
+own for actual imaging. (gxccache.c [1.3]: 2001/01/04 19:39:24 raph)
+
+Updates documentation in gxdevcli.h on creating device instances.
+(gxdevcli.h [1.4]: 2001/01/14 00:24:30 raph)
+
+First cut of the PDF 1.4 transparency and blending operations.
+(gxblend.c [1.1], gxblend.h [1.1]: 2001/01/14 00:25:27 raph)
+
+Minor patches for clean VMS compile. Thanks to Jacob (=Jouk) Jansen.
+(gsnogc.c [1.6], gxblend.c [1.2]: 2001/02/02 07:52:25 raph)
+
+Continuing development of PDF 1.4 transparency and blending. This round of
+commits implements groups, including non-isolated and knockout variants.
+Also, moves the build rule for the pnga device from contrib to devs.
+(gstrans.c [1.12], gxdevcli.h [1.5]: 2001/02/22 07:27:10 raph)
+
+</pre><h2><a name="6.61-Other"></a>Other</h2><pre>
+
+branches: 1.1.2; file _type1.h was initially added on branch HINTER.
+(_type1.h [1.1]: 2001/01/12 06:22:23 igorm)
+
+branches: 1.1.2; file vdtrace.h was initially added on branch HINTER.
+(vdtrace.h [1.1]: 2001/02/02 20:27:09 igorm)
+
+<hr>
+
+<h1><a name="Version6.60"></a>Version 6.60 (2000-12-31)</h1>
+
+<p>
+This long-overdue fileset includes major new developer documentation, major
+improvements in the PDF writer (for embedded fonts and for DSC comments),
+and lots of bug fixes. Unfortunately, for unknown reasons, the release
+"smoke test" loops forever on the file data/ps/screen.ps -- but only when
+compiled in 'production' mode, not in 'debug' mode. We suspect a gcc bug,
+but don't have the time to track it down before the end of the millennium.
+
+<p>
+All problems registered on SourceForge numbered 127190 or lower are closed,
+except for the following: 101814, 101955, 102735, 105289, 106652, 109350,
+111449, 113116, 113799, 114084, 115256, 116461, 117260, 119676, 119677,
+119798, 120967, 121582, 121715, 122426, 122532, 122534, 122683, 122727,
+123005, 123091, 123702, 123754, 123867, 123896, 123992, 124042, 124056,
+124095, 124134, 124205, 124863, 124973, 126364, 126391, 126462, 126477,
+126506, 126584, 126771, 126943, 127062, 127090, 127190.
+
+<h3><a name="6.60_Incompatible_changes"></a>Incompatible changes</h3>
+
+<pre>
+(Interpreter)
+ - With WMode = 1, CID-keyed fonts with no Metrics2 now use default
+metrics computed from FontBBox rather than the horizontal metrics.
+(PDF interpreter)
+ - The interpreter now skips to the next EOL after reading the data
+following the ID operator.
+ - The incorrectly named ViewerOrientation DSC comment is now
+corrected to ViewingOrientation.
+(Streams)
+ - All decoding filters that recognize an EOD in the source data
+must now have an init procedure that sets state->min_left = 1.
+(Library)
+ - The glyph_data, subr_data, and seac_data procedures in a Type 1
+font (gs_type1_data_procs), and the glyph_data procedure passed to
+psf_{check,get}_outline_glyphs, must now return 1 iff the outline string was
+newly allocated and should be freed by the caller, like the get_outline
+procedure of Type 42 fonts (gs_type42_data).
+ - The ip_state structure is renamed ip_state_t, and has a new
+member, free_char_string.
+ - The incorrectly named ViewerOrientation DSC comment is now
+corrected to ViewingOrientation, and the viewer_orientation members of
+the DSC parsing structure are corrected to viewing_orientation.
+
+
+
+<h2><a name="6.60-Documentation"></a>Documentation</h2><pre>
+
+Fixes problems:
+ - An isolated ampersand needed to be converted to the HTML form.
+(doc/Bug-form.htm [1.12]: 2000/11/04 17:53:57 lpd)
+ - cvs2hist was generating invalid anchor names and not escaping
+special charaters. also enable '-r' commandline option, and pass '-b' if
+it's not specified for default branch logs only. Changes.htm now passes the
+validator. Minor url cleanup in Release.htm (doc/Changes.htm [1.19],
+doc/Release.htm [1.23]: 2000/11/10 01:52:35 giles)
+ - Removes obsolete documentation reference to -DUsePrinterImages and
+clarifies the entry for the replacing -DPrinted. Fixes sourceforge bug #
+121907. (doc/Use.htm [1.16]: 2000/11/20 20:34:23 giles)
+ - Type 1 CharStrings loaded from disk for type 0 CIDFonts were never
+freed, except by garbage collection (which doesn't reclaim chunks with only
+a small amount of surviving data). In practice, this probably only affects
+the PDF writer. (doc/News.htm [1.71]: 2000/11/23 23:34:23 lpd)
+ - The pswrite device couldn't write to pipes. The fix involved
+expanding the API for opening device OutputFiles so that the individual
+driver could specify whether it required, requested, or did not want a
+positionable file. Fixes SourceForge bug # 122223. (doc/Use.htm [1.17]:
+2000/11/29 02:25:13 lpd)
+ - The default ps2pdf "distiller parameters" weren't documented
+correctly; the parameter values for the other PDFSETTINGS (screen, printer,
+prepress) weren't documented at all; the xxxImageDownsampleThreshold
+parameters were incorrectly documented as xxxDownsampleThreshold.
+(doc/Ps2pdf.htm [1.22]: 2000/12/19 17:55:55 lpd)
+ - The documentation of the -dSAFER command line switch was
+inaccurate. (doc/Use.htm [1.18]: 2000/12/23 01:33:06 lpd)
+ - documentation for gs_cidcm.ps and gs_dscp.ps was missing.
+(doc/Psfiles.htm [1.11]: 2000/12/29 02:17:12 lpd)
+
+Adds developer documentation on the color mapping pipeline.
+(doc/Develop.htm [1.16]: 2000/11/03 04:53:00 lpd)
+
+switch to Tobias Burnus' stylesheet for the B-D html documentation, along
+with some minor cleanups (doc/Bug-form.htm [1.10], doc/Bug-info.htm [1.8],
+doc/C-style.htm [1.6], doc/Commprod.htm [1.4], doc/Copying.htm [1.4],
+doc/Current.htm [1.4], doc/DLL.htm [1.4], doc/Develop.htm [1.17],
+doc/Devices.htm [1.14], doc/Drivers.htm [1.10], doc/gs.css [1.1]: 2000/11/03
+06:42:42 giles)
+
+update remaining file links in Develop.htm to &lt;dl&gt; format, plus
+additional cleanup (doc/Commprod.htm [1.5], doc/DLL.htm [1.5],
+doc/Develop.htm [1.18], doc/Devices.htm [1.15], doc/Drivers.htm [1.11]:
+2000/11/03 20:15:55 giles)
+
+Lists all the monochrome TIFF drivers individually, rather than as a class.
+(doc/Devices.htm [1.16]: 2000/11/03 23:33:18 lpd)
+
+Switches the rest of the human-maintained html documentation to the new
+stylesheet. We now pass validator.w3.org for HTML 4.01 with the exception of
+an error I couldn't figure out in Bug-form.htm. (doc/Bug-form.htm [1.11],
+doc/Fonts.htm [1.9], doc/Helpers.htm [1.7], doc/Hershey.htm [1.3],
+doc/Htmstyle.htm [1.7], doc/Humor.htm [1.2], doc/Install.htm [1.10],
+doc/Language.htm [1.21], doc/Lib.htm [1.4], doc/Maintain.htm [1.7],
+doc/Make.htm [1.17], doc/New-user.htm [1.15], doc/Projects.htm [1.20],
+doc/Ps-style.htm [1.4], doc/Ps2epsi.htm [1.5], doc/Ps2pdf.htm [1.19],
+doc/Psfiles.htm [1.10], doc/Public.htm [1.4], doc/Readme.htm [1.15],
+doc/Release.htm [1.22], doc/Source.htm [1.4], doc/Tester.htm [1.4],
+doc/Unix-lpr.htm [1.4], doc/Use.htm [1.15], doc/Xfonts.htm [1.4],
+doc/index.html [1.2]: 2000/11/04 05:00:00 giles)
+
+updated News.htm to use gs.css (doc/News.htm [1.70]: 2000/11/04 21:59:35
+giles)
+
+Adds documentation on Ghostscript's object-oriented coding conventions, and
+more documentation on error generation. (doc/C-style.htm [1.7],
+doc/Develop.htm [1.19]: 2000/11/07 07:34:57 lpd)
+
+Expands the description of the color mapping process.
+(doc/Develop.htm [1.20]: 2000/11/09 05:41:46 lpd)
+
+updates history files 1-4 (historical) to valid html4 and the new stylesheet
+(doc/History1.htm [1.4], doc/History2.htm [1.4], doc/History3.htm [1.4],
+doc/History4.htm [1.4]: 2000/11/28 22:55:34 giles)
+
+updates the version 5.x history file to the conforming html4
+(doc/History5.htm [1.6]: 2000/12/01 00:47:08 giles)
+
+Adds documentation on creating a release directory, including checking the
+version numbers of the third-party libraries.
+(doc/Release.htm [1.24]: 2000/12/05 21:16:25 lpd)
+
+Updates documentation to reflect recent improvements in text and DSC comment
+handling. (doc/Ps2pdf.htm [1.20]: 2000/12/09 08:01:56 lpd)
+
+Documents the change from ViewerOrientation to ViewingOrientation in the DSC
+parser. (doc/News.htm [1.72]: 2000/12/09 19:53:48 lpd)
+
+Makes the PDF writer extract orientation and bounding box information from
+DSC comments, if present. The orientation is used to set Rotate if
+AutoRotatePages is not selected; the bounding box is not yet used for
+anything. (doc/Ps2pdf.htm [1.21]: 2000/12/09 19:54:55 lpd)
+
+adds a brief blurb for Develop.htm (doc/Readme.htm [1.16]: 2000/12/11
+19:39:36 giles)
+
+In the developer documentation, breaks down several long file lists into
+shorter, more focused ones. (doc/Develop.htm [1.21]: 2000/12/12 19:52:49
+lpd)
+
+Adds some additional documentation on halftones. (doc/Develop.htm [1.22]:
+2000/12/15 01:46:57 lpd)
+
+Adds additional documentation on makefile conventions, and improves a few
+other areas. (doc/Develop.htm [1.23]: 2000/12/18 06:45:23 lpd)
+
+Adds more documentation on makefiles, .dev files, and related topics.
+(doc/Develop.htm [1.24]: 2000/12/20 05:09:31 lpd)
+
+Adds more developer documentation on the PostScript interpreter; divides up
+some lists of files to provide more helpful detail. (doc/Develop.htm [1.25]:
+2000/12/20 20:15:41 lpd)
+
+Documents the preferred line breaking and indentation format for assignment
+statements, including chain assignments. (doc/C-style.htm [1.8]: 2000/12/22
+16:58:55 lpd)
+
+Makes some minor corrections and improvements to the developer
+documentation. (doc/Develop.htm [1.26]: 2000/12/28 05:57:18 lpd)
+
+Adds substantial new material on coding conventions for structures, classes,
+and subclasses. (doc/C-style.htm [1.9]: 2000/12/28 07:12:38 lpd)
+
+Documents about 15 additional non-standard operators (the ones most likely
+to be used in future code). (doc/Develop.htm [1.27],
+doc/Language.htm [1.22]: 2000/12/28 18:29:49 lpd)
+
+Documents the need to run hrefcov as part of the release process; also fixes
+some minor inaccuracies. (doc/Release.htm [1.25]: 2000/12/29 02:12:08 lpd)
+
+Adds more files to the developer "roadmap" documentation.
+(doc/Develop.htm [1.28]: 2000/12/29 02:18:47 lpd)
+
+Adds the Fontmaps and the contributed drivers to the developer documentation
+"roadmap", which is now complete. (doc/Develop.htm [1.29]: 2000/12/29
+02:33:40 lpd)
+
+Adds some developer documentation on design principles.
+(doc/Develop.htm [1.30]: 2000/12/30 22:07:37 lpd)
+
+Removes or updates no longer appropriate references to Aladdin Enterprises.
+(doc/Commprod.htm [1.6], doc/Fonts.htm [1.10], doc/Install.htm [1.11],
+doc/Make.htm [1.18], doc/New-user.htm [1.16], doc/Projects.htm [1.21],
+doc/Use.htm [1.19]: 2000/12/31 21:43:59 lpd)
+
+Updates documentation for the Windows uninstall program to reflect a name
+change.
+(doc/Install.htm [1.12]: 2000/12/31 22:26:08 lpd)
+
+Updates repository for 6.60 release. (doc/Bug-form.htm [1.13],
+doc/Bug-info.htm [1.9], doc/C-style.htm [1.10], doc/Commprod.htm [1.7],
+doc/Copying.htm [1.5], doc/Current.htm [1.5], doc/DLL.htm [1.6],
+doc/Develop.htm [1.31], doc/Devices.htm [1.17], doc/Drivers.htm [1.12],
+doc/Fonts.htm [1.11], doc/Helpers.htm [1.8], doc/History1.htm [1.5],
+doc/History2.htm [1.5], doc/History3.htm [1.5], doc/History4.htm [1.5],
+doc/History5.htm [1.7], doc/History6.htm [1.15], doc/Htmstyle.htm [1.8],
+doc/Install.htm [1.13], doc/Language.htm [1.23], doc/Lib.htm [1.5],
+doc/Maintain.htm [1.8], doc/Make.htm [1.19], doc/New-user.htm [1.17],
+doc/News.htm [1.73], doc/Projects.htm [1.22], doc/Ps-style.htm [1.5],
+doc/Ps2epsi.htm [1.6], doc/Ps2pdf.htm [1.23], doc/Psfiles.htm [1.12],
+doc/Readme.htm [1.17], doc/Release.htm [1.26], doc/Source.htm [1.5],
+doc/Tester.htm [1.5], doc/Unix-lpr.htm [1.5], doc/Use.htm [1.20],
+doc/Xfonts.htm [1.5], doc/gs-vms.hlp [1.4], man/dvipdf.1 [1.2],
+man/eps2eps.1 [1.3], man/font2c.1 [1.2], man/gs.1 [1.2], man/gslp.1 [1.2],
+man/gsnd.1 [1.2], man/pdf2dsc.1 [1.2], man/pdf2ps.1 [1.4],
+man/pdfopt.1 [1.2], man/pf2afm.1 [1.2], man/pfbtopfa.1 [1.3],
+man/printafm.1 [1.2], man/ps2ascii.1 [1.2], man/ps2epsi.1 [1.2],
+man/ps2pdf.1 [1.6], man/ps2pdfwr.1 [1.3], man/ps2ps.1 [1.9],
+man/wftopfa.1 [1.2]: 2001/01/01 00:24:05 lpd)
+
+</pre><h2><a name="6.60-Procedures"></a>Procedures</h2><pre>
+
+Fixes problems:
+ - cvs2hist was generating invalid anchor names and not escaping
+special charaters. also enable '-r' commandline option, and pass '-b' if
+it's not specified for default branch logs only. Changes.htm now passes the
+validator. Minor url cleanup in Release.htm (toolbin/cvs2hist.py [1.4]:
+2000/11/10 01:52:35 giles)
+ - The OS/2 platform code would no longer compile, because the stdio
+files are no longer available. (fix from rjl) (os2.mak [1.9]: 2000/12/05
+01:16:26 lpd)
+ - Embedded font subsets always used similar sequences of prefixes,
+making it likely that combining multiple PDF files would lead to clashes;
+the code now generates truly random prefixes, using an external source of
+random data. (devs.mak [1.39]: 2000/12/10 00:12:23 lpd)
+ - Fixes a couple of dependency lists that had gotten out of sync.
+(devs.mak [1.40]: 2000/12/10 00:17:51 lpd)
+ - Seek was broken and PDF interpreter failed when
+FILE_IMPLEMENTATION=fd The implementation of streams using direct OS calls
+is extended to support MSVC &amp;&amp; Win32. close_.h is replaced by more
+general unistd_.h (lib.mak [1.40]: 2000/12/19 03:35:40 alexcher)
+ - In the previous fix unistd__h was misspelt as unistd_h .
+(lib.mak [1.41]: 2000/12/19 05:35:53 alexcher)
+ - The recent change for localized man pages didn't update 2 of the 3
+top-level Unix makefiles. (unixansi.mak [1.7], unixtrad.mak [1.7]:
+2000/12/23 16:29:53 lpd)
+ - The list of doc files to be installed had gotten out of date
+(Develop.htm, Maintain.htm, and Ps-style.htm were missing).
+(unixinst.mak [1.16]: 2000/12/23 16:30:36 lpd)
+ - unixinst.mak was checked in with the previous fix only partly
+done. (unixinst.mak [1.17]: 2000/12/23 16:34:12 lpd)
+
+Collect some stray configuration related externs into iconf.h
+(int.mak [1.40]: 2000/11/04 06:12:02 rayjj)
+
+Adds DSC parsing capability to the PostScript interpreter, with an optional
+'feature' to use the DSC Orientation comments to compensate for sloppy
+PostScript producers that don't emit an appropriate setpagedevice command.
+(int.mak [1.41]: 2000/11/05 18:33:53 lpd)
+
+Adds the 'hook' for passing DSC comments to the PDF writer, but doesn't
+actually process any of the comments. NOTE: Part of this code was
+accidentally included in the recent fix for local/global VM problems in the
+PostScript code for using the DSC parser. (devs.mak [1.36]: 2000/11/07
+18:54:26 lpd)
+
+Reorganizes some text-writing code in anticipation of adding CIDFont and
+CMap support. (devs.mak [1.37]: 2000/11/17 22:11:44 lpd)
+
+Avoids exporting empty LD_RUN_PATH environment variable to the link process.
+This was causing binaries to search the current directory for libraries,
+which was a security hole. Fixes SourceForge bug 122532. (ugcclib.mak [1.6],
+unixlink.mak [1.3]: 2000/11/28 00:14:48 raph)
+
+Updates the date and version checker for compatibility with the newest
+documentation standards; also makes it check the makefile values of JVERSION
+and PVERSION against the currently installed third-party source code.
+(toolbin/pre [1.9]: 2000/12/05 21:14:14 lpd)
+
+Extensively revises and updates the pdfwrite text handling code to support
+processing and embedding of all types of fonts (except for Type 3 and
+CIDFontType 1, which are defined by PostScript procedures), and all variants
+of 'show' (including kshow and glyphshow). In particular, Type 0 fonts with
+all FMapTypes (including CMap-based), CIDFontType 0 and 2 fonts, and both
+standard and non-standard CMaps are supported. (devs.mak [1.38],
+int.mak [1.42], lib.mak [1.38]: 2000/12/08 23:35:37 lpd)
+
+removes a spurious import of the cgi module (toolbin/cvs2hist.py [1.5]:
+2000/12/11 19:40:23 giles)
+
+Splits off the code for downsampling an oversampled character bitmap into a
+separate file. (lib.mak [1.39]: 2000/12/14 00:14:52 lpd)
+
+Adds a '-t' option to enable text output rather than html, replacing the old
+behavior, which was to return text unless a version string was passed with
+'-v'. The version string is now set to 'CVS' if no explicit version is
+passed, and this is used in the named anchors within the html output.
+(toolbin/cvs2hist.py [1.6]: 2000/12/23 09:38:10 giles)
+
+Adds support for localized manpages to the make 'install' target. On unix
+the makefile will now intall any files with the $MAN1EXT extension it finds
+under locale subdirs of the man directory that are listed in the MAN_LCDIRS
+variable. The $man1dir is correspondingly removed from unix-gcc.mak. Also
+adds separate targets: install-doc install-man install-examples
+install-libdata (unix-gcc.mak [1.9], unixinst.mak [1.15]: 2000/12/23
+10:10:37 giles)
+
+Improves the set of files checked by hrefcov +lib.
+(toolbin/hrefcov.tcl [1.5]: 2000/12/29 02:16:13 lpd)
+
+Adds a script for batch-converting PostScript files to PDF, intended to be
+useful for testing. (toolbin/many2pdf.tcl [1.1]: 2000/12/31 22:28:09 lpd)
+
+Updates repository for 6.60 release. (toolbin/pre [1.10],
+version.mak [1.24]: 2001/01/01 00:24:06 lpd)
+
+</pre><h2><a name="6.60-Utilities"></a>Utilities</h2><pre>
+
+Fixes problems:
+ - pdfopt.ps used the "unresolved?" procedure from pdf_base.ps, which
+has been replaced by the slightly different "resolved?" procedure.
+(lib/pdfopt.ps [1.4]: 2000/12/01 04:15:52 lpd)
+ - The OS/2 platform code would no longer compile, because the stdio
+files are no longer available. (fix from rjl) (gp_os2.c [1.5]: 2000/12/05
+01:16:26 lpd)
+ - File flush method uses file member in stream. On Windows and OS/2
+it is NULL for %stdout or %stderr. So the standard flush method is
+installed. (gp_msio.c [1.3], gp_os2.c [1.6]: 2000/12/19 03:44:24 alexcher)
+ - /NullEncode filter no longer supports fileposition. Replacing
+fileposition with .fileposition (lib/impath.ps [1.3]: 2000/12/28 17:06:07
+alexcher)
+ - _.at file was not deleted in BAT file; SAFER option added to CMD
+file. (lib/eps2eps.bat [1.4], lib/eps2eps.cmd [1.2]: 2000/12/30 18:45:37
+alexcher)
+
+Improves documentation of cid2code.ps by adding a complete usage example.
+(lib/cid2code.ps [1.3]: 2000/11/30 18:22:11 lpd)
+
+Adds extensive documentation to genconf.c; also brings it into line with
+current Ghostscript coding standards. (genconf.c [1.4]: 2000/12/20 04:20:34
+lpd)
+
+Safe mode implemented using DELAYSAFER flag. (lib/pdf2dsc [1.3],
+lib/pdf2dsc.bat [1.1], lib/pdf2dsc.ps [1.3]: 2000/12/29 05:03:49 alexcher)
+
+</pre><h2><a name="6.60-Drivers"></a>Drivers</h2><pre>
+
+Fixes problems:
+ - In PDF output, color values of 1.0 were usually written as 0.999.
+(bug introduced in version 6.22) (gdevpsdu.c [1.8]: 2000/11/12 07:13:26 lpd)
+ - The pswrite device couldn't write to pipes. The fix involved
+expanding the API for opening device OutputFiles so that the individual
+driver could specify whether it required, requested, or did not want a
+positionable file. Fixes SourceForge bug # 122223. (gdevps.c [1.13],
+gdevpx.c [1.5]: 2000/11/29 02:25:13 lpd)
+ - Invalid (uninitialized) StripByteCount was being left in file for
+the tiff12nc and tiff24nc devices. Needed to call gdev_tiff_end_strip().
+(gdevtfnx.c [1.4]: 2000/12/15 06:09:27 rayjj)
+ - Fixes bug introduced in gdevxini.c revision 1.5. Don't overwrite
+the pixmap handle provided in the GHOSTVIEW environment variable.
+(gdevxini.c [1.10]: 2000/12/15 10:18:47 ghostgum)
+ - The pswrite device produced an extra page if the transfer function
+didn't map "1 setgray" to device white. (gdevps.c [1.14]: 2000/12/21
+03:58:54 lpd)
+
+</pre><h2><a name="6.60-PDF_writer"></a>PDF writer</h2><pre>
+
+Fixes problems:
+ - kshow caused the PDF writer to revert to bitmapped fonts. Fixes
+SourceForge bug # 104118. (gdevpdft.c [1.21]: 2000/11/06 04:17:14 lpd)
+ - The PDF writer didn't handle stroked fonts correctly (they were
+filled instead of stroked). (gdevpdf.c [1.23], gdevpdfd.c [1.11],
+gdevpdft.c [1.22], gdevpdfx.h [1.23]: 2000/11/12 06:52:08 lpd)
+ - When mixing filled and stroked fonts, the color wasn't set
+correctly. (gdevpdft.c [1.23]: 2000/11/12 07:14:30 lpd)
+ - The PDF writer incorrectly assumed that in PDF 1.3, the standard
+Latin character set was the PostScript 3 extended set (it's actually the old
+PostScript Level 2 set). (gdevpdft.c [1.28]: 2000/11/20 18:13:55 lpd)
+ - Embedded CIDFontType 2 fonts had an incorrect BoundingBox.
+(gdevpdff.c [1.14]: 2000/12/09 06:53:25 lpd)
+ - Embedded font subsets always used similar sequences of prefixes,
+making it likely that combining multiple PDF files would lead to clashes;
+the code now generates truly random prefixes, using an external source of
+random data. (gdevpdf.c [1.26], gdevpdfe.c [1.8], gdevpdff.c [1.15],
+gdevpdff.h [1.9], gdevpdfx.h [1.27]: 2000/12/10 00:12:23 lpd)
+ - Non-embedded Multiple Master instances weren't identified as such
+(font Subtype = /MMType1). (gdevpdfw.c [1.7]: 2000/12/11 08:52:01 lpd)
+ - pdfwrite would crash if a bitmap character was larger than 10Kb
+(compressed). The fix simply raises the limit to 1 Mb. (gdevpdft.c [1.30]:
+2000/12/13 01:33:37 lpd)
+ - When processing DSC comments, some constant strings weren't copied
+to the heap, possibly causing memory access errors. (gdevpdfp.c [1.16]:
+2000/12/16 07:02:35 lpd)
+ - If the same standard (base 14) font was loaded more than once
+(because of save/restore), the PDF file could contain fonts that had
+suffixed names (e.g., Helvetica~2) but with data missing as though they were
+standard fonts, upsetting Acrobat Reader. Fixes SourceForge bug # 101905.
+THIS FIX IS IN A VERY FRAGILE AREA AND MAY INTRODUCE NEW PROBLEMS.
+(gdevpdff.c [1.16]: 2000/12/16 08:00:53 lpd)
+ - The previous fix for copying DSC comment keys to the heap was
+unnecessarily complex. (gdevpdfp.c [1.17]: 2000/12/16 19:28:51 lpd)
+ - Resource usage wasn't tracked separately for Form XObjects (BP/EP
+pdfmarks), producing non-compliant files that caused errors from Acrobat.
+Fixes SourceForge bug # 102146. (gdevpdf.c [1.28], gdevpdff.c [1.17],
+gdevpdff.h [1.10], gdevpdfm.c [1.8], gdevpdfo.c [1.6], gdevpdfo.h [1.6],
+gdevpdft.c [1.31], gdevpdfu.c [1.14], gdevpdfw.c [1.8], gdevpdfx.h [1.28]:
+2000/12/16 19:36:32 lpd)
+ - Strict type correctness is required on VMS system. Contributed by
+Jouk Jansen joukj@hrem.stm.tudelft.nl (gdevpdfw.c [1.9]: 2000/12/18 21:58:03
+alexcher)
+
+Adds the 'hook' for passing DSC comments to the PDF writer, but doesn't
+actually process any of the comments. NOTE: Part of this code was
+accidentally included in the recent fix for local/global VM problems in the
+PostScript code for using the DSC parser. (gdevpdfp.c [1.13]: 2000/11/07
+18:54:26 lpd)
+
+Changes the internal indication of whether to allow font subsetting from a
+Boolean to OK, YES, NO. (Unfortunately, I no longer remember why this change
+is needed.) (gdevpdfe.c [1.6], gdevpdff.c [1.10], gdevpdff.h [1.5],
+gdevpdft.c [1.24]: 2000/11/14 06:57:21 lpd)
+
+When writing PDF output, adds the ability to convert text in Type 0 fonts to
+text in the descendant leaf fonts. This completes the handling of text
+output except for CID-keyed fonts. (gdevpdft.c [1.25]: 2000/11/14 16:47:09
+lpd)
+
+Reorganizes some text-writing code in anticipation of adding CIDFont and
+CMap support. (gdevpdff.c [1.11], gdevpdff.h [1.6], gdevpdft.c [1.26]:
+2000/11/17 22:11:44 lpd)
+
+Makes glyphshow no longer revert to bitmapped fonts. Also adds a CIDFont
+pseudo-resource, in anticipation of adding CID-keyed font support.
+(gdevpdff.c [1.12], gdevpdff.h [1.7], gdevpdft.c [1.27], gdevpdfx.h [1.24]:
+2000/11/20 08:31:20 lpd)
+
+Extensively revises and updates the pdfwrite text handling code to support
+processing and embedding of all types of fonts (except for Type 3 and
+CIDFontType 1, which are defined by PostScript procedures), and all variants
+of 'show' (including kshow and glyphshow). In particular, Type 0 fonts with
+all FMapTypes (including CMap-based), CIDFontType 0 and 2 fonts, and both
+standard and non-standard CMaps are supported. (gdevpdf.c [1.24],
+gdevpdfe.c [1.7], gdevpdff.c [1.13], gdevpdff.h [1.8], gdevpdfs.c [1.1],
+gdevpdft.c [1.29], gdevpdfu.c [1.13], gdevpdfw.c [1.6], gdevpdfx.h [1.25]:
+2000/12/08 23:35:38 lpd)
+
+If ParseDSCCommentsForDocInfo is set to true, copies information from DSC
+comments Creator, CreationDate, For, and Title into the output's Info
+dictionary. (gdevpdfp.c [1.14]: 2000/12/09 07:49:22 lpd)
+
+Makes the PDF writer extract orientation and bounding box information from
+DSC comments, if present. The orientation is used to set Rotate if
+AutoRotatePages is not selected; the bounding box is not yet used for
+anything. (gdevpdf.c [1.25], gdevpdfp.c [1.15], gdevpdfx.h [1.26]:
+2000/12/09 19:54:54 lpd)
+
+Slightly changes the initialization of the random offset for font subset
+prefixes, to work better with low-resolution clocks such as those typical on
+PCs. (gdevpdf.c [1.27]: 2000/12/16 19:31:10 lpd)
+
+</pre><h2><a name="6.60-PDF_Interpreter"></a>PDF Interpreter</h2><pre>
+
+Fixes problems:
+ - Type 0 fonts with a non-standard (embedded) CMap didn't work at
+all. (lib/pdf_font.ps [1.15]: 2000/12/02 20:41:52 lpd)
+ - The PDF interpreter ignored the CIDToGIDMap entry in (embedded)
+CIDFontType 2 fonts, producing incorrect output if the map wasn't /Identity.
+(lib/pdf_font.ps [1.16]: 2000/12/07 23:41:10 lpd)
+ - GS didn't dereference indirect objects in Widths array.
+(lib/pdf_font.ps [1.17]: 2000/12/17 19:06:19 alexcher)
+ - Fixes a slight oversight in the true/false/null improvement for
+the PDF interpreter. (lib/pdf_base.ps [1.12]: 2000/12/26 04:10:12 lpd)
+ - When a non-TrueType font was substituted for a TrueType font, the
+Encoding in the font descriptor was ignored. This hack was intended to fix
+SF bug # 104702, an invalid PDF file, but it broke another case. Removal of
+the hack makes GS render both cases similar to AR 4.
+(lib/pdf_font.ps [1.18]: 2000/12/26 04:29:30 alexcher)
+ - The PDF interpreter didn't rotate the CropBox for landscape pages,
+producing incorrect output if the input of ps2pdf was a landscape PDF file.
+(lib/pdf_main.ps [1.26]: 2000/12/31 01:07:18 lpd)
+
+Improves font substitution by taking the "Narrow" property into account.
+Fixes SourceForge bug 116460. Fix due to Leon Bottou.
+(lib/pdf_font.ps [1.13]: 2000/11/05 17:36:28 raph)
+
+Wraps the showpagecontents call in gsave/grestore, so that the graphics
+state for drawing annotations is pristine. Fixes Sourceforge bug 123310.
+(lib/pdf_main.ps [1.23]: 2000/11/25 22:00:21 raph)
+
+The published PDF specification says the Encoding name "must be" one of the
+3 predefined Encodings, implying that an error should occur if it isn't.
+However, Acrobat Reader simply ignores unknown names, and since there are
+some buggy applications that rely on this, we do the same.
+(lib/pdf_font.ps [1.14]: 2000/11/28 18:55:24 alexcher)
+
+The PDF specification says that the 'xref' must be on a line by itself. The
+code formerly used readline and linene to check this. However, Acrobat
+Reader only requires the line to begin with 'xref', and there are enough
+applications producing non-compliant PDF files that we have to do this too.
+(lib/pdf_main.ps [1.24]: 2000/12/18 03:41:35 alexcher)
+
+AI8 writes bogus encoding array [0 1 0 0 0 0 0 0] AR doesn't care. So we
+have to straighten it up here. (lib/pdf_draw.ps [1.24]: 2000/12/20 19:02:24
+alexcher)
+
+Makes the PDF interpreter handle true, false, and null specially, rather
+than by dictionary lookup, so that the PostScript interpreter can still
+process these names using the special fast case for names defined only in
+systemdict. (lib/pdf_base.ps [1.11], lib/pdf_main.ps [1.25]: 2000/12/26
+04:08:44 lpd)
+
+</pre><h2><a name="6.60-Interpreter"></a>Interpreter</h2><pre>
+
+Fixes problems:
+ - The recently updated code for activating the DSC comment parser
+had several local/global VM problems, causing invalidaccess errors.
+(lib/gs_dps2.ps [1.3], lib/gs_init.ps [1.27], lib/gs_pdfwr.ps [1.7]:
+2000/11/07 18:51:24 lpd)
+ - There was still a bug in the code for passing DSC comments to the
+PDF writer, causing typecheck errors. (lib/gs_pdfwr.ps [1.8]: 2000/11/07
+19:27:14 lpd)
+ - If the procedure of a FunctionType 4 Function was syntactically
+valid but exceeded the maximum stack depth, an attempt was made to free a
+string as an object, causing memory corruption. (zfunc4.c [1.6]: 2000/11/11
+17:34:06 lpd)
+ - Disk-based TrueType fonts caused a memory leak. (Currently, there
+are no such fonts, but CIDFontType 2 fonts, and directly-accessed TrueType
+fonts, should be made disk-based.) (zfcid1.c [1.4]: 2000/11/22 08:32:07 lpd)
+ - Type 1 CharStrings loaded from disk for type 0 CIDFonts were never
+freed, except by garbage collection (which doesn't reclaim chunks with only
+a small amount of surviving data). In practice, this probably only affects
+the PDF writer. (zfcid0.c [1.5]: 2000/11/23 23:34:22 lpd)
+ - Single-byte notdef ranges in CMaps incorrectly incremented the CID
+number, rather than assigning the same CID to all characters in the range.
+(lib/gs_cmap.ps [1.9]: 2000/11/29 06:58:36 lpd)
+ - In dictionaries, an int lookup key sometimes didn't match a real
+stored key, and vice versa. Fixes SourceForge bug # 123678. (idict.c [1.3]:
+2000/11/30 07:13:08 lpd)
+ - Further tweaking of the logic to clear end_status flags in a
+pipeline in the continuation of a procedure write, making it more aggressive
+than the previous fix, but less aggressive than the original code. This is a
+revised fix for Sourceforge bug 119777. (zfproc.c [1.7]: 2000/12/02 19:58:45
+raph)
+ - 'gstate' was allowed in global VM even if the current graphics
+state included references to structures in local VM (which is, in fact,
+normally the case) and the save level was non-zero: this could create a
+dangling pointer after the 'restore'. This "fix" is a workaround that simply
+prohibits doing this, but a correct fix would copy any such structures.
+(zdps1.c [1.3]: 2000/12/02 20:39:37 lpd)
+ - The first call of check_psc_function in gs_build_function_4 didn't
+initialize size to 0, causing the computed value of size to be garbage,
+possibly leading to a VMerror or memory corruption. (zfunc4.c [1.7]:
+2000/12/03 16:56:31 alexcher)
+ - The font_info procedure for PostScript fonts other than Type 1
+didn't return information from the FontInfo dictionary (Copyright,
+FamilyName, FullName, Notice), causing this information to be omitted when
+embedding the font in a PDF file. (ifont.h [1.6], zbfont.c [1.7],
+zfont.c [1.3], zfont1.c [1.9]: 2000/12/03 23:35:30 lpd)
+ - The %%ViewingOrientation: DSC comment was misspelled
+%%ViewerOrientation:. This also corrects the CDSC_VIEWINGORIENTATION enum
+value (formerly CDSC_VIEWERORIENTATION, and the viewing_orientation members
+of the CDSCPAGE structure and the CDSC structure (formerly
+viewer_orientation). (dscparse.c [1.3], dscparse.h [1.3], zdscpars.c [1.8]:
+2000/12/09 18:28:23 lpd)
+ - Unitialized member of CDSCPAGE caused random crashes.
+(dscparse.c [1.4]: 2000/12/13 07:18:46 alexcher)
+ - systemdict was being created too small for LanguageLevel 3
+systems. (It expanded properly, but left a sandbar.) (iinit.c [1.3]:
+2000/12/26 04:25:54 lpd)
+ - Expanding a permanent dictionary (systemdict or userdict)
+destroyed the single-definition bookkeeping for names defined in that
+dictionary, slowing down subsequent interpretation. (idict.c [1.4]:
+2000/12/26 06:09:58 lpd)
+ - Fix to dscparse.c for parsing DOS EPS files. Code now looks for
+%!PS-Adobe- at the start of the PostScript section, not at the start of the
+DOS EPS header. (dscparse.c [1.5]: 2000/12/28 01:45:01 ghostgum)
+
+Collect some stray configuration related externs into iconf.h
+(imain.c [1.3], imainarg.c [1.5]: 2000/11/04 06:12:02 rayjj)
+
+branches: 1.1.2; Collect some stray configuration related externs into
+iconf.h (iconf.h [1.1]: 2000/11/04 06:12:02 rayjj)
+
+Add COMPILE_INITS information line to -h help output. (imainarg.c [1.6]:
+2000/11/04 06:13:42 rayjj)
+
+Adds DSC parsing capability to the PostScript interpreter, with an optional
+'feature' to use the DSC Orientation comments to compensate for sloppy
+PostScript producers that don't emit an appropriate setpagedevice command.
+(lib/gs_dscp.ps [1.1], zdscpars.c [1.1]: 2000/11/05 18:33:52 lpd)
+
+branches: 1.1.2; Adds DSC parsing capability to the PostScript interpreter,
+with an optional 'feature' to use the DSC Orientation comments to compensate
+for sloppy PostScript producers that don't emit an appropriate setpagedevice
+command. (dscparse.c [1.1], dscparse.h [1.1]: 2000/11/05 18:33:53 lpd)
+
+Polishes the DSC parser interface: improves comments and formatting, and
+fixes a couple of very minor glitches. (zdscpars.c [1.2]: 2000/11/06
+07:34:21 lpd)
+
+branches: 1.3.2; ... and fixes an overlooked const discrepancy.
+(zdscpars.c [1.3]: 2000/11/06 07:35:51 lpd)
+
+branches: 1.2.2; Fix: The recently updated code for activating the DSC
+comment parser had several local/global VM problems, causing invalidaccess
+errors. (lib/gs_dscp.ps [1.2]: 2000/11/07 18:51:25 lpd)
+
+Return code variables (code and comment_code) in zparse_dsc_comments(). need
+to be signed. (zdscpars.c [1.4]: 2000/11/08 00:54:48 dancoby)
+
+Rewrites .parse_dsc_comment to use the parameter list machinery, removing a
+little functionally duplicated code; changes two incorrect uints to ints
+(fix from dan@artifex.com); adds additional comment types (BoundingBox,
+PageBoundingBox, BeginDefaults, EndDefaults) to the interface.
+(zdscpars.c [1.5]: 2000/11/08 07:07:32 lpd)
+
+DSC parser changes: adds %%ViewerOrientation to DSC parser; doesn't flag an
+error if %%Pages is absent but one %%Page is found; frees memory if
+initialization fails; recognizes general whitespace in some places where
+only spaces were recognized before. (changes from gsview@ghostgum.com.au)
+(dscparse.c [1.2], dscparse.h [1.2]: 2000/11/13 05:44:58 lpd)
+
+Adds DSC comment tracing to ps2pdf, if -dDEBUG is specified on the command
+line. (lib/gs_pdfwr.ps [1.9]: 2000/11/13 17:03:51 lpd)
+
+Adds %%EndDefaults, %%For:, and %%ViewerOrientation: to the set of DSC
+comments handled by the .parse_dsc_comments operator. (zdscpars.c [1.6]:
+2000/11/13 17:06:18 lpd)
+
+Slightly simplifies the code for creating the internal representation of
+CMaps. (lib/gs_cmap.ps [1.8]: 2000/11/16 00:32:00 lpd)
+
+Changes .buildshading to always apply a ReusableStreamDecode filter to file
+and stream DataSources, so that multiple passes over the stream work. This
+patch closes SourceForge bug 121810. (lib/gs_ll3.ps [1.7]: 2000/11/16
+00:37:32 raph)
+
+Makes single-byte CMap ranges convert into a single range in the internal
+representation, rather than (largest - smallest + 1) separate single-element
+ranges. (lib/gs_cmap.ps [1.10]: 2000/11/29 07:10:27 lpd)
+
+Adds documentation for the procedures declared in ifont.h. (ifont.h [1.5]:
+2000/12/03 23:14:28 lpd)
+
+Extensively revises and updates the pdfwrite text handling code to support
+processing and embedding of all types of fonts (except for Type 3 and
+CIDFontType 1, which are defined by PostScript procedures), and all variants
+of 'show' (including kshow and glyphshow). In particular, Type 0 fonts with
+all FMapTypes (including CMap-based), CIDFontType 0 and 2 fonts, and both
+standard and non-standard CMaps are supported. (lib/gs_cidfn.ps [1.18]:
+2000/12/08 23:35:38 lpd)
+
+Makes the default value of ParseDSCCommentsForDocInfo true rather than
+false. (lib/gs_pdfwr.ps [1.10]: 2000/12/09 08:00:52 lpd)
+
+Changes the parsing of the DSC Orientation comments to return -1 .. 3 rather
+than 0 or 1. (lib/gs_dscp.ps [1.3], zdscpars.c [1.7]: 2000/12/09 17:52:29
+lpd)
+
+Changes .parse_dsc_comments to distinguish (document default)
+ViewingOrientation from PageViewingOrientation, as for [Page]Orientation.
+(zdscpars.c [1.9]: 2000/12/09 19:52:49 lpd)
+
+Updates the comments with a new proposal for speeding up name lookup in the
+interpreter. (dstack.h [1.3]: 2000/12/26 01:20:58 lpd)
+
+The old code caused gswin crash when console window closes.
+(dwimg.cpp [1.3]: 2000/12/26 13:41:40 igorm)
+
+New flag DELAYSAFER added to defer activation of safety checks. SAFER=false
+=&gt; no safety checks SAFER=true, DELAYSAFER=false =&gt; safety checks
+always SAFER=true, DELAYSAFER=true =&gt; safety checks after .setsafe
+(lib/gs_init.ps [1.28]: 2000/12/29 04:13:56 alexcher)
+
+</pre><h2><a name="6.60-Streams"></a>Streams</h2><pre>
+
+Fixes problems:
+ - Seek was broken and PDF interpreter failed when
+FILE_IMPLEMENTATION=fd The implementation of streams using direct OS calls
+is extended to support MSVC &amp;&amp; Win32. close_.h is replaced by more
+general unistd_.h (sfxfd.c [1.6]: 2000/12/19 03:35:40 alexcher)
+
+</pre><h2><a name="6.60-Library"></a>Library</h2><pre>
+
+Fixes problems:
+ - Several places in the band list code didn't call s_init_state to
+initialize locally allocated stream states: this is now required (see the
+"Incompatible changes" section above). We suspect there are a few more
+places that will need this fix. (gxclbits.c [1.3], gxcldev.h [1.4],
+gxclread.c [1.3], gxclutil.c [1.3]: 2000/11/05 00:34:24 lpd)
+ - Fixes infinite loops when writing large bitmaps into clist. Now,
+cmd_put_bits never requests an allocation in the clist buffer larger than
+cbuf_size. (gxclbits.c [1.4]: 2000/11/05 18:44:57 raph)
+ - Works around an Acrobat Reader 4 bug that causes AR4 to draw a
+single pixel, rather than nothing, when filling a subpath consisting only of
+a moveto. (gdevvec.c [1.8]: 2000/11/07 16:42:28 lpd)
+ - The PDF writer didn't handle stroked fonts correctly (they were
+filled instead of stroked). (gdevvec.c [1.9], gdevvec.h [1.5]: 2000/11/12
+06:52:08 lpd)
+ - The pdfwrite and pswrite drivers could emit a lineto or rlineto
+without a moveto at the beginning of the path. (bug introduced very
+recently, by a workaround for an Acrobat Reader bug) (gdevvec.c [1.10]:
+2000/11/14 07:41:08 lpd)
+ - Attempting to write a CFF Type 2 font larger than 32K but smaller
+than 64K caused a rangecheck. (gdevpsf2.c [1.8]: 2000/11/19 17:48:08 lpd)
+ - Computing the default width or the fixed width for a CIDFont or
+TrueType font could do a huge amount of unnecessary work. (Probably only
+affects the PDF writer.) (gsfont.c [1.3]: 2000/11/20 21:09:09 lpd)
+ - The Type 1 to Type 2 CharString converter (currently used only by
+the PDF writer) often didn't detect invalid CharStrings as input.
+(gdevpsfx.c [1.6]: 2000/11/21 02:33:55 lpd)
+ - The code for writing a CIDFontType0 CFF font mistook Type 2
+CharStrings for Type 1, and tried to convert them to Type 2. (This currently
+affects only the PDF writer.) (gdevpsf2.c [1.9]: 2000/11/21 02:35:59 lpd)
+ - Disk-based TrueType fonts caused a memory leak. (Currently, there
+are no such fonts, but CIDFontType 2 fonts, and directly-accessed TrueType
+fonts, should be made disk-based.) (gdevpsft.c [1.5], gstype42.c [1.10]:
+2000/11/22 08:32:07 lpd)
+ - Type 1 CharStrings loaded from disk for type 0 CIDFonts were never
+freed, except by garbage collection (which doesn't reclaim chunks with only
+a small amount of surviving data). In practice, this probably only affects
+the PDF writer. (gsfcid.c [1.5], gstype1.c [1.6], gstype2.c [1.9],
+gxfont1.h [1.5], gxtype1.c [1.8], gxtype1.h [1.5]: 2000/11/23 23:34:22 lpd)
+ - The pswrite device couldn't write to pipes. The fix involved
+expanding the API for opening device OutputFiles so that the individual
+driver could specify whether it required, requested, or did not want a
+positionable file. Fixes SourceForge bug # 122223. (gdevpipe.c [1.4],
+gdevvec.c [1.11], gdevvec.h [1.6], gsdevice.c [1.8]: 2000/11/29 02:25:13
+lpd)
+ - The change for freeing transient CharStrings introduced two bugs,
+possibly causing the code to free data twice, or to free data that should be
+retained. (gdevpsfx.c [1.8]: 2000/11/30 05:58:19 lpd)
+ - Allocates graphics state path in stable memory. This prevents
+paths in Type 3 fonts allocated inside a save ... setcachedevice ... restore
+sequence from being prematurely freed. Fixes SourceForge bug 101549.
+(gspath1.c [1.3], gsstate.c [1.6]: 2000/12/04 21:13:55 raph)
+ - An inadvertent change caused the graphics state not to be freed on
+grestore. This fix, due to lpd, restores the freeing statement.
+(gsstate.c [1.7]: 2000/12/05 09:24:57 raph)
+ - The pointers to the substituted color spaces in the graphics state
+weren't included in the structure descriptor, causing memory access errors
+if UseCIEColor was used. (gsstate.c [1.8]: 2000/12/11 04:06:22 alexcher)
+ - In TrueType fonts, glyph outlines starting with an off-curve point
+didn't render correctly, replacing the curve with a pair of straight lines.
+(gstype42.c [1.11]: 2000/12/12 22:27:56 alexcher)
+ - Strict type correctness is required on VMS system. Contributed by
+Jouk Jansen joukj@hrem.stm.tudelft.nl (gdevpsf2.c [1.12], gsfcmap.c [1.13]:
+2000/12/18 21:58:03 alexcher)
+ - Seek was broken and PDF interpreter failed when
+FILE_IMPLEMENTATION=fd The implementation of streams using direct OS calls
+is extended to support MSVC &amp;&amp; Win32. close_.h is replaced by more
+general unistd_.h (gpmisc.c [1.9]: 2000/12/19 03:35:40 alexcher)
+ - Fixes a subtle logic bug in the scan line path filling code, which
+unfortunately involved rewriting the code from scratch. The new code is also
+somewhat subtle, and may contain new bugs: DON'T TRUST IT YET. Fixes
+SourceForge bug # 117066. (gxfill.c [1.7]: 2000/12/23 06:02:39 lpd)
+ - Embedded Type 1 fonts omitted StdVW. (Acrobat Reader requires
+this, even though the Type 1 specification says it is optional.)
+(gdevpsf1.c [1.8]: 2000/12/29 01:18:55 lpd)
+
+Adds developer documentation on the color mapping pipeline. (gxfrac.h [1.3]:
+2000/11/03 04:53:00 lpd)
+
+Improves the documentation of the minimum responsibilities of the 'process'
+procedure in a text enumerator. (gxtext.h [1.6]: 2000/11/06 00:44:37 lpd)
+
+Adds a param_string_from_transient_string macro, to parallel
+param_string_from_string for non-permanent C strings. (gsparam.h [1.8]:
+2000/11/08 06:56:50 lpd)
+
+Adds a macro for declaring suffix subclasses with 5 added pointers (in
+addition to the existing 1, 2, 3, 4, and 6). (gsstruct.h [1.6]: 2000/11/21
+16:46:55 lpd)
+
+Adds a procedure for testing whether a glyph is a "notdef" in a font,
+necessary for fixing a memory consumption problem when accessing type 0
+CIDFonts. (gsfont.c [1.4], gxfont.h [1.3]: 2000/11/23 23:23:40 lpd)
+
+Speeds up the slow case of fixed_mult_quo by nearly a factor of 2, by using
+a tiny bit of numerical analysis. (gsmisc.c [1.9], gxfixed.h [1.3]:
+2000/11/24 06:53:23 lpd)
+
+Improves the performance of embedded font writing by freeing strings when no
+longer needed, and by removing redundant computation. (Currently relevant
+only to the PDF writer.) (gdevpsf1.c [1.7], gdevpsf2.c [1.10],
+gdevpsfu.c [1.5], gdevpsfx.c [1.7]: 2000/11/24 07:10:41 lpd)
+
+Adds a procedure for creating an Identity CMap, needed by the PDF writer.
+(gsfcmap.c [1.11], gxfcmap.h [1.6]: 2000/11/26 04:08:41 lpd)
+
+Implements the stopgap measure of increasing fill_adjust for Coons patch
+shading, to cover the dropouts caused by incorrect triangulation of the mesh
+surface. See SourceForge Bug 119588 for a more thorough analysis.
+(gsptype2.c [1.4], gxshade4.c [1.4]: 2000/11/29 01:31:30 raph)
+
+Adds an internal unique ID to CMap structures (gs_cmap_t), for use as a
+cache or comparison key. (gsfcmap.c [1.12], gxfcmap.h [1.7]: 2000/11/29
+05:50:03 lpd)
+
+The old code did not comply ISO/IEC C language standard and compiled wrongly
+to Mac, causing halftone problem on Mac. (gshtscr.c [1.5]: 2000/11/29
+14:41:34 igorm)
+
+Adds macros for suffix subclass structures with 7 or 8 additional pointers
+(1-6 and 9 existed already). (gsstruct.h [1.7]: 2000/12/04 01:11:53 lpd)
+
+Extensively revises and updates the pdfwrite text handling code to support
+processing and embedding of all types of fonts (except for Type 3 and
+CIDFontType 1, which are defined by PostScript procedures), and all variants
+of 'show' (including kshow and glyphshow). In particular, Type 0 fonts with
+all FMapTypes (including CMap-based), CIDFontType 0 and 2 fonts, and both
+standard and non-standard CMaps are supported. (gdevpsf.h [1.9],
+gdevpsf2.c [1.11], gdevpsfm.c [1.4], gdevpsft.c [1.6], gdevpsfu.c [1.6]:
+2000/12/08 23:35:38 lpd)
+
+Moves definitions of gs_state_do_ptrs and gs_state_num_ptrs from gsstate.c
+to gzstate.h since they depend on the contents of struct gs_state_s defined
+there. (gsstate.c [1.9], gzstate.h [1.4]: 2000/12/11 12:52:16 alexcher)
+
+Splits off the code for downsampling an oversampled character bitmap into a
+separate file. (gsbitcom.c [1.1], gsbitops.c [1.3]: 2000/12/14 00:14:52 lpd)
+
+branches: 1.1.2; Fix: Seek was broken and PDF interpreter failed when
+FILE_IMPLEMENTATION=fd The implementation of streams using direct OS calls
+is extended to support MSVC &amp;&amp; Win32. close_.h is replaced by more
+general unistd_.h (unistd_.h [1.1]: 2000/12/19 03:35:40 alexcher)
+
+Brings gxfill.c up to date with current coding standards (except for adding
+_t to the names of locally defined structure types); also puts #ifdef
+FILL_TRAPEZOIDS around a little more code that tests 'if (fill_trapezoids)'.
+(gxfill.c [1.6]: 2000/12/21 16:10:36 lpd)
+
+Updates repository for 6.60 release. (gscdef.c [1.11]: 2001/01/01 00:24:06
+lpd)
+
+</pre><h2><a name="6.60-Other"></a>Other</h2><pre>
+
+Fixes problems:
+ - Seek was broken and PDF interpreter failed when
+FILE_IMPLEMENTATION=fd The implementation of streams using direct OS calls
+is extended to support MSVC &amp;&amp; Win32. close_.h is replaced by more
+general unistd_.h (close_.h [1.3]: 2000/12/19 03:35:40 alexcher)
+
+<hr>
+
+<h1><a name="Version6.30"></a>Version 6.30 (2000-10-03)</h1>
+
+<p>
+This fileset consists of xxx.
+
+<p>
+All problems registered on SourceForge numbered 110922 or lower are closed,
+except for the following: 101549, 101814, 101905, 101955, 102146, 102735,
+104118, 105289, 105558, 106340, 106652, 109350, 110445, 110898, 110922.
+
+<p>
+The following projects are in a partially completed state:
+
+<ul>
+
+<li>CID-keyed fonts in the PDF writer (gdevpdf[eftw].c) -- barely started.
+
+</ul>
+
+<pre>
+
+<h2><a name="6.24_Incompatible_changes"></a>Incompatible changes</h2>
+
+(Procedures)
+ - The -Zv and -ZV switches now trace alpha/transparency features.
+ - The program name has changed.
+ - The default Windows installation directory is now c:\gs rather
+than c:\Aladdin.
+(Utilities)
+ - lib/pdfeof.ps is deleted; its functionality is included in the
+standard code.
+(Drivers)
+ - The X driver now implements sync_output using XSync(False) rather
+than XFlush().
+(Library)
+ - gdev_vector_dopath now never returns 1.
+ - Color space types now have a new, required, "equal" procedure.
+
+
+<h2><a name="6.30 Documentation"></a>Documentation</h2><pre>
+
+Fixes problems:
+ - the "User parameters" section was incorrectly titled "Device
+parameters". (doc/Language.htm [1.11]: 2000/08/17 17:00:42 lpd)
+
+Initializes files for the 6.24 fileset. (doc/News.htm [1.57]: 2000/08/09
+16:54:01 lpd)
+
+Adds Alex Cherepanov to the roster of helpers. (doc/Helpers.htm [1.2]:
+2000/08/09 16:54:39 lpd)
+
+Documents the -dDEVICE{WIDTH,HEIGHT}POINTS= switches. (doc/Use.htm [1.10]:
+2000/08/17 01:31:52 lpd)
+
+Notes the change in the return value of gdev_vector_dopath.
+(doc/News.htm [1.58]: 2000/08/20 00:20:42 lpd)
+
+Changes text to make it clear that Yves Arrouye no longer maintains the BJC
+drivers that he wrote. (doc/Devices.htm [1.11]: 2000/08/21 14:38:27 lpd)
+
+Puts the logic for detecting garbage after %%EOF (and some similar invalid
+constructs) back into the main code, making it produce a message on stderr.
+(doc/Psfiles.htm [1.6]: 2000/08/23 02:22:39 lpd)
+
+Documents the deletion of lib/pdfeof.ps. (doc/News.htm [1.59]: 2000/08/23
+02:23:54 lpd)
+
+Starts to implement the PDF 1.4 transparency features. All API and operator
+additions are now implemented (at least as stubs) and documented, as is
+bookkeeping for the new scalar graphics state members (but not for the soft
+masks or the transparency group stack). (doc/Language.htm [1.12]: 2000/08/23
+21:46:31 lpd)
+
+Adds a project to avoid DCT-decoding followed by DCT-encoding images when
+writing PDF files. (doc/Projects.htm [1.16]: 2000/08/24 03:43:12 lpd)
+
+Adds a new equality-testing virtual procedure for color spaces.
+(doc/News.htm [1.60]: 2000/08/24 05:42:30 lpd)
+
+Brings the (still mostly stubbed) transparency code to a more
+self-consistent state. (doc/Language.htm [1.13]: 2000/08/30 01:34:40 lpd)
+
+Completes the parsing of .{begin,end}transparency{group,mask}, except for
+the TransferFunction for masks. The specification is still subject to
+change. (doc/Language.htm [1.14]: 2000/08/30 15:03:36 lpd)
+
+Divides the list of documents according to whether the document is for
+users, for developers, or both. (doc/Readme.htm [1.11]: 2000/08/30 21:24:00
+lpd)
+
+Adds more documentation for the transparency rendering stack.
+(doc/Language.htm [1.15]: 2000/08/31 03:34:41 lpd)
+
+Adds a requirement to only use ANSI standard C library facilities.
+(doc/C-style.htm [1.2]: 2000/09/08 04:53:14 lpd)
+
+Changes the -Zv switch to trace alpha/transparency-related features.
+(doc/News.htm [1.61], doc/Use.htm [1.11]: 2000/09/10 05:23:10 lpd)
+
+Implements another chunk of the PDF 1.4 transparency features, fixing some
+bugs in the previous code. (doc/Language.htm [1.16]: 2000/09/10 05:26:27
+lpd)
+
+Documents the addition of (limited) PDF 1.4 output capabilities.
+(doc/Ps2pdf.htm [1.16]: 2000/09/11 02:08:58 lpd)
+
+Moves the Matte entry of soft mask images from the main structure to the
+mask structures, and changes Matted to has_Matte. (doc/Language.htm [1.17]:
+2000/09/11 04:08:13 lpd)
+
+Documents division of bug-gs mailbox into bug-gs, bug-gs-dev, and
+bug-gs-beta. (doc/Bug-form.htm [1.7], doc/Bug-info.htm [1.5]: 2000/09/15
+23:44:21 lpd)
+
+Adds a paragraph explaining license details. (doc/PUBLIC [1.2],
+doc/Public.htm [1.2]: 2000/09/18 22:26:32 lpd)
+
+Updates the license notices to reflect the name change; also updates many
+internal references. (doc/Bug-form.htm [1.8], doc/Bug-info.htm [1.6],
+doc/C-style.htm [1.3], doc/Changes.htm [1.17], doc/Commprod.htm [1.2],
+doc/Copying.htm [1.2], doc/Current.htm [1.2], doc/DLL.htm [1.2],
+doc/Devices.htm [1.12], doc/Drivers.htm [1.7], doc/Fonts.htm [1.7],
+doc/Helpers.htm [1.3], doc/History1.htm [1.2], doc/History2.htm [1.2],
+doc/History3.htm [1.2], doc/History4.htm [1.2], doc/History5.htm [1.4],
+doc/History6.htm [1.12], doc/Htmstyle.htm [1.5], doc/Install.htm [1.6],
+doc/Language.htm [1.18], doc/Lib.htm [1.2], doc/Maintain.htm [1.3],
+doc/Make.htm [1.14], doc/New-user.htm [1.11], doc/News.htm [1.62],
+doc/PUBLIC [1.3], doc/Projects.htm [1.17], doc/Ps2epsi.htm [1.3],
+doc/Ps2pdf.htm [1.17], doc/Psfiles.htm [1.7], doc/Public.htm [1.3],
+doc/Readme.htm [1.12], doc/Release.htm [1.18], doc/Source.htm [1.2],
+doc/Tester.htm [1.2], doc/Unix-lpr.htm [1.2], doc/Use.htm [1.12],
+doc/Xfonts.htm [1.2], doc/gs-vms.hlp [1.2]: 2000/09/19 21:37:50 lpd)
+
+Updates README from Readme.htm. (doc/README [1.3]: 2000/09/19 23:39:31 lpd)
+
+Changes the default Windows installation directory from c:\Aladdin to c:\gs.
+(doc/Install.htm [1.7], doc/News.htm [1.63]: 2000/09/22 05:32:17 lpd)
+
+Replaces the OpenVMS installation instructions with an improved set
+contributed by a user. (doc/Helpers.htm [1.4], doc/Install.htm [1.8]:
+2000/09/22 20:33:19 lpd)
+
+Adds a project for fixing PDF files that have gotten mangled by EOL
+conversion. (doc/Projects.htm [1.18]: 2000/09/25 14:40:37 lpd)
+
+Adds a reference to PreScript, another free text extraction program based on
+Ghostscript. (doc/New-user.htm [1.12]: 2000/09/26 01:04:40 lpd)
+
+Documentation changes in preparation for 6.30 release. Replaced some contact
+information, updated version numbers. (doc/Bug-form.htm [1.9],
+doc/Bug-info.htm [1.7], doc/Commprod.htm [1.3], doc/Copying.htm [1.3],
+doc/Current.htm [1.3], doc/DLL.htm [1.3], doc/Devices.htm [1.13],
+doc/Drivers.htm [1.8], doc/Fonts.htm [1.8], doc/Helpers.htm [1.5],
+doc/History1.htm [1.3], doc/History2.htm [1.3], doc/History3.htm [1.3],
+doc/History4.htm [1.3], doc/History5.htm [1.5], doc/History6.htm [1.13],
+doc/Htmstyle.htm [1.6], doc/Install.htm [1.9], doc/Language.htm [1.19],
+doc/Lib.htm [1.3], doc/Maintain.htm [1.4], doc/Make.htm [1.15],
+doc/New-user.htm [1.13], doc/News.htm [1.64], doc/Projects.htm [1.19],
+doc/Ps2epsi.htm [1.4], doc/Ps2pdf.htm [1.18], doc/Psfiles.htm [1.8],
+doc/README [1.4], doc/Readme.htm [1.13], doc/Release.htm [1.19],
+doc/Source.htm [1.3], doc/Tester.htm [1.3], doc/Unix-lpr.htm [1.3],
+doc/Use.htm [1.13], doc/Xfonts.htm [1.3], doc/gs-vms.hlp [1.3]: 2000/10/04
+04:33:27 raph)
+
+Bring version numbers and dates up to date. Small bug fix in toolbin/pre to
+make it able to handle months with leading zeros. (doc/C-style.htm [1.4],
+doc/Helpers.htm [1.6], man/ps2ps.1 [1.7]: 2000/10/04 05:18:54 raph)
+
+</pre><h2><a name="6.30 Procedures"></a>Procedures</h2><pre>
+
+Fixes problems:
+ - The PostScript image writing drivers (psmono/gray/rgb) didn't set
+the page size in the output, and didn't produce DSC-compliant output.
+(devs.mak [1.31]: 2000/08/09 06:55:45 lpd)
+ - The FlateEncode and zlibEncode filters didn't implement the
+"Effort" parameter. (fix from Alex Cherepanov) (int.mak [1.28]: 2000/08/09
+16:55:24 lpd)
+ - Because "-" as an OutputFile now references the %stdout IODevice,
+it no longer worked in configurations without a PostScript interpreter.
+Fixing this required factoring out the stdin/out/err IODevices and providing
+an implementation that didn't reference the PostScript interpreter.
+(int.mak [1.32], lib.mak [1.34], ugcclib.mak [1.3]: 2000/09/07 06:14:45 lpd)
+ - Configurations including PDF but not PostScript didn't include all
+the PostScript LL3 features needed to interpret PDF 1.3 et seq.
+(int.mak [1.33]: 2000/09/07 06:35:06 lpd)
+ - Cleans up some missing and incorrect dependencies.
+(devs.mak [1.33], int.mak [1.34], lib.mak [1.35]: 2000/09/11 04:43:09 lpd)
+ - The definition of PSRCDIR was inconsistent with the definition of
+PVERSION. (openvms.mak [1.5]: 2000/09/22 04:05:40 lpd)
+ - The pgnm and pnm drivers didn't properly detect the presence of
+gray shades or color in images, sometimes causing gray or color information
+to be lost in the output. (fix contributed by a user) (devs.mak [1.35]:
+2000/09/23 04:52:56 lpd)
+
+Initializes files for the 6.24 fileset. (version.mak [1.19]: 2000/08/09
+16:54:02 lpd)
+
+Adds a mention of the Color LaserJet 4500 as a color PCL XL printer.
+(devs.mak [1.32]: 2000/08/17 20:43:50 lpd)
+
+Changes text to make it clear that Yves Arrouye no longer maintains the BJC
+drivers that he wrote. (contrib.mak [1.19]: 2000/08/21 14:38:28 lpd)
+
+Puts the logic for detecting garbage after %%EOF (and some similar invalid
+constructs) back into the main code, making it produce a message on stderr.
+(unixinst.mak [1.12]: 2000/08/23 02:22:39 lpd)
+
+Starts to implement the PDF 1.4 transparency features. All API and operator
+additions are now implemented (at least as stubs) and documented, as is
+bookkeeping for the new scalar graphics state members (but not for the soft
+masks or the transparency group stack). (int.mak [1.29], lib.mak [1.30]:
+2000/08/23 21:46:31 lpd)
+
+Adds a new equality-testing virtual procedure for color spaces.
+(lib.mak [1.31]: 2000/08/24 05:42:30 lpd)
+
+Partly implements opacity and shape mask bookkeeping. gsave/grestore/etc.
+and banding don't do the right thing yet. (int.mak [1.30],
+version.mak [1.20]: 2000/08/25 01:46:48 lpd)
+
+Brings the (still mostly stubbed) transparency code to a more
+self-consistent state. (lib.mak [1.32]: 2000/08/30 01:34:40 lpd)
+
+Finishes the code for parsing ImageType 103 (soft-mask) images.
+(int.mak [1.31], lib.mak [1.33]: 2000/08/30 04:30:05 lpd)
+
+*** empty log message *** (int.mak [1.35]: 2000/09/14 19:46:05 alexcher)
+
+Undoes uncommented and in some cases inappropriate changes. (int.mak [1.36]:
+2000/09/18 06:28:58 lpd)
+
+Updates license notices
+rather than simply saying "All rights reserved". (toolbin/3way.tcl [1.2],
+toolbin/cvs2hist.py [1.2], toolbin/errlist.tcl [1.2],
+toolbin/gsindent [1.2], toolbin/gsmake.tcl [1.4], toolbin/headers.tcl [1.2],
+toolbin/leaks.tcl [1.2], toolbin/makegnu.tcl [1.2],
+toolbin/makeset.tcl [1.4], toolbin/pre [1.6], toolbin/precheck.tcl [1.2],
+toolbin/suite.tcl [1.2], toolbin/tmake.tcl [1.2]: 2000/09/19 17:30:25 lpd)
+
+Updates the license notices to reflect the name change, and changes
+internal references in various scripts. (toolbin/3way.tcl [1.3],
+toolbin/cvs2hist.py [1.3], toolbin/errlist.tcl [1.3], toolbin/gsindent
+[1.3], toolbin/gsmake.tcl [1.5], toolbin/headers.tcl [1.3],
+toolbin/leaks.tcl [1.3], toolbin/makegnu.tcl [1.3], toolbin/makeset.tcl
+[1.5], toolbin/pre [1.7], toolbin/precheck.tcl [1.3], toolbin/suite.tcl
+[1.3], toolbin/tmake.tcl [1.3]: 2000/09/19 18:10:51 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (all-arch.mak [1.5], bcwin32.mak
+[1.3], cfonts.mak [1.2], contrib.mak [1.20], devs.mak [1.34], dvx-gcc.mak
+[1.4], dvx-head.mak [1.2], dvx-tail.mak [1.3], dwmain.rc [1.2], dwsetup.def
+[1.2], dwsetup.rc [1.2], dwuninst.def [1.2], dwuninst.rc [1.3]: 2000/09/19
+19:00:08 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gs.mak [1.2], gs16spl.rc [1.2],
+gsdll2.rc [1.2], gsdll32.rc [1.2]: 2000/09/19 19:00:25 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gsos2.rc [1.2], gspmdrv.rc [1.2]:
+2000/09/19 19:00:30 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gswin.rc [1.2]: 2000/09/19
+19:00:33 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (int.mak [1.37], jpeg.mak [1.3],
+lib.mak [1.36], libpng.mak [1.2], msvc32.mak [1.5], msvccmd.mak [1.5],
+msvclib.mak [1.5], msvctail.mak [1.4], openvms.mak [1.4], openvms.mmk
+[1.5], os2.mak [1.7], pcwin.mak [1.2]: 2000/09/19 19:00:45 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (ugcclib.mak [1.4], unix-aux.mak
+[1.3], unix-end.mak [1.2], unix-gcc.mak [1.7], unixansi.mak [1.5],
+unixhead.mak [1.2], unixinst.mak [1.13], unixlink.mak [1.2], unixtrad.mak
+[1.5], version.mak [1.21], watc.mak [1.5], watclib.mak [1.5], watcw32.mak
+[1.4], wccommon.mak [1.3], wctail.mak [1.2], winint.mak [1.5], winlib.mak
+[1.4], winplat.mak [1.2], wmin.mak [1.2], zlib.mak [1.2]: 2000/09/19
+19:00:52 lpd)
+
+Add commands to make the target GLGENDIR and BINDIR directories so that a
+clean build works automatically. (msvctail.mak [1.5]: 2000/09/21 15:14:37
+rayjj)
+
+Changes the default Windows installation directory from c:\Aladdin to c:\gs.
+(dwsetup.rc [1.3]: 2000/09/22 05:32:17 lpd)
+
+Changes the default Windows Start Menu Folder from "Aladdin" to
+"Ghostscript". (dwsetup.rc [1.4]: 2000/09/22 05:35:02 lpd)
+
+Updates the makefiles from libpng version 1.0.5 to 1.0.8.
+(all-arch.mak [1.6], bcwin32.mak [1.4], dvx-gcc.mak [1.5], libpng.mak [1.3],
+msvc32.mak [1.6], msvclib.mak [1.6], openvms.mak [1.6], openvms.mmk [1.6],
+os2.mak [1.8], ugcclib.mak [1.5], unix-gcc.mak [1.8], unixansi.mak [1.6],
+unixtrad.mak [1.6], watc.mak [1.6], watclib.mak [1.6], watcw32.mak [1.5]:
+2000/09/25 15:06:28 lpd)
+
+Documentation changes in preparation for 6.30 release. Replaced some contact
+information, updated version numbers. (version.mak [1.22]: 2000/10/04
+04:33:29 raph)
+
+Bring version numbers and dates up to date. Small bug fix in toolbin/pre to
+make it able to handle months with leading zeros. (toolbin/pre [1.8]:
+2000/10/04 05:18:54 raph)
+
+</pre><h2><a name="6.30 Utilities"></a>Utilities</h2><pre>
+
+Fixes problems:
+ - ps2pdf13.cmd set the output PDF version to 1.2 rather than 1.3.
+(lib/ps2pdf13.cmd [1.2]: 2000/09/10 19:32:44 lpd)
+ - The OpenVMS Fontmap had gotten badly out of date; specifically, it
+didn't reference the URW++ fonts distributed with Ghostscript.
+(lib/Fontmap.VMS [1.2]: 2000/09/22 03:30:21 lpd)
+
+Puts the logic for detecting garbage after %%EOF (and some similar invalid
+constructs) back into the main code, making it produce a message on stderr.
+(lib/pdfeof.ps [1.2]: 2000/08/23 02:22:39 lpd)
+
+Adds script / batch / command files for producing PDF 1.4 output.
+(lib/ps2pdf14 [1.1], lib/ps2pdf14.bat [1.1], lib/ps2pdf14.cmd [1.1]:
+2000/09/10 19:33:47 lpd)
+
+Updates the license notices to reflect the name change, and changes a few
+other internal references. (lib/Fontmap.ATB [1.2], lib/Fontmap.ATM [1.2],
+lib/Fontmap.GS [1.2], lib/Fontmap.OS2 [1.2], lib/Fontmap.SGI [1.2],
+lib/Fontmap.Sol [1.2], lib/Fontmap.Ult [1.2], lib/addxchar.ps [1.2],
+lib/afmdiff.awk [1.2], lib/align.ps [1.2], lib/bdftops.ps [1.2],
+lib/caption.ps [1.2], lib/cbjc600.ppd [1.2], lib/cbjc800.ppd [1.2],
+lib/cid2code.ps [1.2], lib/docie.ps [1.2], lib/errpage.ps [1.2],
+lib/font2c.ps [1.2], lib/font2pcl.ps [1.2], lib/gslp.ps [1.2], lib/gsnup.ps
+[1.2], lib/image-qa.ps [1.2], lib/impath.ps [1.2], lib/jispaper.ps [1.2],
+lib/lines.ps [1.2], lib/markhint.ps [1.2], lib/markpath.ps [1.2],
+lib/packfile.ps [1.2], lib/pcharstr.ps [1.2], lib/pdf2dsc.ps [1.2],
+lib/pdfopt.ps [1.3], lib/pdfwrite.ps [1.3], lib/pfbtopfa.ps [1.2],
+lib/ppath.ps [1.2], lib/ps2ai.ps [1.2], lib/ps2ascii.ps [1.2], lib/ps2epsi
+[1.4], lib/ps2epsi.ps [1.4], lib/showchar.ps [1.2], lib/stcinfo.ps [1.2],
+lib/stcolor.ps [1.2], lib/stocht.ps [1.3], lib/traceimg.ps [1.2],
+lib/traceop.ps [1.2], lib/type1enc.ps [1.2], lib/type1ops.ps [1.2],
+lib/uninfo.ps [1.2], lib/unprot.ps [1.2], lib/viewcmyk.ps [1.2],
+lib/viewgif.ps [1.2], lib/viewmiff.ps [1.2], lib/viewpbm.ps [1.2],
+lib/viewpcx.ps [1.2], lib/viewps2a.ps [1.2], lib/wftopfa.ps [1.2],
+lib/winmaps.ps [1.2], lib/wrfont.ps [1.2], lib/zeroline.ps [1.2]:
+2000/09/19 18:29:11 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (bench.c [1.3], echogs.c [1.2]:
+2000/09/19 19:00:08 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (genarch.c [1.2], genconf.c [1.3],
+gendev.c [1.2], genht.c [1.2], geninit.c [1.3], gp_dvx.c [1.2], gp_iwatc.c
+[1.4], gp_mktmp.c [1.2], gp_mshdl.c [1.2], gp_msio.c [1.2], gp_mslib.c
+[1.2], gp_mswin.c [1.3], gp_ntfs.c [1.4], gp_os2.c [1.4], gp_os9.c [1.3],
+gp_sysv.c [1.2], gp_unix.c [1.3], gp_vms.c [1.4], gp_wgetv.c [1.3],
+gp_win32.c [1.2], gp_wsync.c [1.2], gs16spl.c [1.2]: 2000/09/19 19:00:23
+lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gsdll.c [1.3], gserver.c [1.2]:
+2000/09/19 19:00:27 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gspmdrv.c [1.2]: 2000/09/19
+19:00:31 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (scfdgen.c [1.2]: 2000/09/19
+19:00:48 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (zdosio.c [1.2]: 2000/09/19
+19:00:53 lpd)
+
+When GSC environment variable is not set, gssetgs.bat fails to set it, which
+makes ps2pdf.bat and several other scripts fail on Windows NT 4.0 with the
+following misleading error message: "_.at" This file doesn't have a program
+associated with it ... This change fixes the problem.
+(lib/gssetgs.bat [1.2]: 2000/10/01 15:25:37 alexcher)
+
+</pre><h2><a name="6.30 Drivers"></a>Drivers</h2><pre>
+
+Fixes problems:
+ - The PostScript image writing drivers (psmono/gray/rgb) didn't set
+the page size in the output, and didn't produce DSC-compliant output.
+(gdevps.c [1.11], gdevpsci.c [1.2], gdevpsim.c [1.3], gdevpsu.c [1.1],
+gdevpsu.h [1.1]: 2000/08/09 06:55:45 lpd)
+ - the user-contributed cfax driver didn't correctly handle page
+widths other than the standard fax widths, and didn't write the required
+end-of-document marker. (gdevcfax.c [1.2]: 2000/08/17 04:43:25 lpd)
+ - Setting parameters for the PS/PDF writer reset any unspecified
+*Dict parameter dictionaries to the empty dictionary, rather than leaving
+them alone. (gdevpsdp.c [1.6]: 2000/08/18 03:18:59 lpd)
+ - BJC printers with different X and Y resolution produced incorrect
+output. Also removes the comment asking users to report problems to Yves
+Arrouye, since he no longer maintains this code. (gdevcdj.c [1.3]:
+2000/08/21 14:43:17 lpd)
+ - The emulation of XPutImage (Ghostscript*useXPutImage: 0) was
+broken. (gdevx.c [1.6]: 2000/08/21 17:23:26 lpd)
+ - Dictionary-valued device parameters for high-level devices could
+be freed while the device still referred to them. (gdevpsdp.c [1.7]:
+2000/08/31 15:55:46 lpd)
+ - Cleans up some missing and incorrect dependencies.
+(gdevsco.c [1.2]: 2000/09/11 04:43:09 lpd)
+ - Works around a gcc code generation bug that sometimes caused gray
+colors to be written out as RGB in PDF files. (Minor performance issue
+only.) (gdevpsdu.c [1.6]: 2000/09/11 21:12:12 lpd)
+ - The pgnm and pnm drivers didn't properly detect the presence of
+gray shades or color in images, sometimes causing gray or color information
+to be lost in the output. (fix contributed by a user) (gdevpbm.c [1.3]:
+2000/09/23 04:52:57 lpd)
+
+In the X Windows driver, changes XFlush() to XSync(False) so that updates
+will actually complete before the command prompt appears. (gdevx.c [1.5],
+gdevxini.c [1.8]: 2000/08/19 03:31:44 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gdev3852.c [1.2], gdev3b1.c
+[1.2], gdev4081.c [1.2], gdev8510.c [1.2], gdev8bcm.c [1.2], gdev8bcm.h
+[1.2], gdevadmp.c [1.2], gdevatx.c [1.6], gdevbit.c [1.2], gdevbj10.c
+[1.3], gdevbjc.h [1.2], gdevbjcl.c [1.2], gdevbjcl.h [1.2], gdevbmp.c
+[1.3], gdevbmp.h [1.2], gdevbmpa.c [1.3], gdevbmpc.c [1.2], gdevccr.c
+[1.2], gdevcdj.c [1.4], gdevcfax.c [1.3], gdevcgm.c [1.2], gdevcgml.c
+[1.2], gdevcgml.h [1.2], gdevcgmx.h [1.2], gdevcif.c [1.2], gdevclj.c
+[1.2], gdevcljc.c [1.2], gdevcp50.c [1.2], gdevcslw.c [1.2], gdevdcrd.c
+[1.2], gdevdcrd.h [1.2], gdevdfax.c [1.3], gdevdjet.c [1.6], gdevdjtc.c
+[1.2], gdevdljm.c [1.4], gdevdljm.h [1.4], gdevdm24.c [1.2], gdevegaa.asm
+[1.2], gdevepsc.c [1.2], gdevepsn.c [1.2], gdevescp.c [1.2], gdevevga.c
+[1.2], gdevfax.c [1.2], gdevfax.h [1.2], gdevherc.c [1.2], gdevhl7x.c
+[1.3], gdevimgn.c [1.2], gdevjpeg.c [1.2], gdevl256.c [1.3], gdevl31s.c
+[1.2], gdevlbp8.c [1.2], gdevlj56.c [1.2], gdevlp8k.c [1.2], gdevlxm.c
+[1.2], gdevmeds.c [1.2]: 2000/09/19 19:00:11 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gdevmeds.h [1.2], gdevmgr.c
+[1.2], gdevmgr.h [1.2], gdevmiff.c [1.2], gdevmswn.c [1.2], gdevmswn.h
+[1.2], gdevmsxf.c [1.2], gdevn533.c [1.2], gdevo182.c [1.2], gdevokii.c
+[1.2], gdevos2p.c [1.3], gdevp2up.c [1.2], gdevpbm.c [1.2], gdevpccm.c
+[1.2], gdevpccm.h [1.3], gdevpcfb.c [1.2], gdevpcfb.h [1.2], gdevpcl.c
+[1.4]: 2000/09/19 19:00:14 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gdevpcl.h [1.4], gdevpcx.c [1.2],
+gdevpe.c [1.2]: 2000/09/19 19:00:17 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gdevphex.c [1.2], gdevpjet.c
+[1.2], gdevpm.c [1.2], gdevpm.h [1.2], gdevpng.c [1.3], gdevps.c [1.12],
+gdevpsdf.h [1.8], gdevpsdi.c [1.12], gdevpsdp.c [1.8], gdevpsds.c [1.4],
+gdevpsds.h [1.4], gdevpsdu.c [1.7], gdevpsim.c [1.4], gdevpsu.c [1.2],
+gdevpsu.h [1.2], gdevpx.c [1.4], gdevpxat.h [1.3], gdevpxen.h [1.3],
+gdevpxop.h [1.2], gdevpxut.c [1.2], gdevpxut.h [1.2], gdevs3ga.c [1.2],
+gdevsco.c [1.3], gdevsj48.c [1.2], gdevsnfb.c [1.2], gdevsppr.c [1.2],
+gdevstc.c [1.2], gdevstc.h [1.2], gdevstc1.c [1.2], gdevstc2.c [1.2],
+gdevstc3.c [1.2], gdevstc4.c [1.2], gdevsun.c [1.2]: 2000/09/19 19:00:20
+lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gdevsunr.c [1.2], gdevsvga.c
+[1.2], gdevsvga.h [1.2], gdevtfax.c [1.4], gdevtfax.h [1.4], gdevtfnx.c
+[1.3], gdevtifs.c [1.3], gdevtifs.h [1.3], gdevtknk.c [1.2], gdevupd.c
+[1.3], gdevvglb.c [1.3], gdevwddb.c [1.2], gdevwdib.c [1.2], gdevwpr2.c
+[1.5], gdevwprn.c [1.2], gdevx.c [1.7], gdevx.h [1.4], gdevxalt.c [1.2],
+gdevxcmp.c [1.2], gdevxcmp.h [1.2], gdevxini.c [1.9], gdevxres.c [1.3],
+gdevxxf.c [1.5]: 2000/09/19 19:00:23 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (png_.h [1.2]: 2000/09/19 19:00:47
+lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (x_.h [1.2]: 2000/09/19 19:00:52
+lpd)
+
+</pre><h2><a name="6.30 PDF writer"></a>PDF writer</h2><pre>
+
+Fixes problems:
+ - The SrcPg entry in ANN pdfmarks was (effectively) ignored. (bug
+introduced between 5.50 and 6.01.) (gdevpdfm.c [1.5]: 2000/08/31 18:49:59
+lpd)
+ - When CompatibilityLevel < 1.4, transparency was ignored rather
+than being rendered explicitly. (gdevpdfg.c [1.9]: 2000/09/11 21:13:49 lpd)
+
+Works around the bug in Acrobat Reader (all versions) that apparently treats
+stroked fonts as filled fonts, ignoring the PaintType. (gdevpdft.c [1.15]:
+2000/08/31 03:23:26 lpd)
+
+Adds the ability to write some PDF 1.4 constructs: graphics state parameters
+AIS, BM, ca/CA, and TK, and images with soft masks (except for Matte).
+(gdevpdfg.c [1.8], gdevpdfg.h [1.8], gdevpdfi.c [1.18]: 2000/09/11 02:14:09
+lpd)
+
+Adds the ability to write PDF 1.4 soft-masked images. (gdevpdfi.c [1.19],
+gdevpdfo.c [1.4], gdevpdfo.h [1.4], gdevpdfv.c [1.2]: 2000/09/11 04:10:42
+lpd)
+
+Replaces "Distiller" with our program name in the Info Producer string.
+(gdevpdf.c [1.20], gdevpdfm.c [1.6], gdevpdfu.c [1.11], gdevpdfx.h [1.21]:
+2000/09/12 02:03:35 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gdevpdf.c [1.21], gdevpdfb.c
+[1.2], gdevpdfc.c [1.12], gdevpdfd.c [1.10], gdevpdfe.c [1.4], gdevpdff.c
+[1.8], gdevpdff.h [1.4], gdevpdfg.c [1.10], gdevpdfg.h [1.9], gdevpdfi.c
+[1.20], gdevpdfj.c [1.5], gdevpdfm.c [1.7], gdevpdfo.c [1.5], gdevpdfo.h
+[1.5], gdevpdfp.c [1.10], gdevpdfr.c [1.4], gdevpdft.c [1.16], gdevpdfu.c
+[1.12], gdevpdfv.c [1.3], gdevpdfw.c [1.5], gdevpdfx.h [1.22]: 2000/09/19
+19:00:17 lpd)
+
+</pre><h2><a name="6.30 Interpreter (PDF)"></a>Interpreter (PDF)</h2><pre>
+
+Fixes problems:
+ - PDF files with embedded CID fonts with FontName != BaseFont
+(prohibited by the PDF specification, but produced by some Adobe software)
+caused an error. (lib/pdf_font.ps [1.11], lib/pdf_ops.ps [1.8]: 2000/08/08
+22:29:12 lpd)
+ - Setting the color (fill or stroke) sometimes overwrote the color
+associated with an outer gsave level. (lib/pdf_ops.ps [1.9]: 2000/08/24
+01:55:37 lpd)
+ - The PDF text rendering modes that included clipping (modes 4-7)
+didn't work. The fix is a bit of a hack, but it's much closer to being
+right. (lib/pdf_ops.ps [1.12]: 2000/08/31 02:05:55 lpd)
+ - The new code for detecting whether a page used any transparency
+features could cause an error. (lib/pdf_main.ps [1.14]: 2000/09/10 18:48:26
+lpd)
+ - Filters with indirect object parameters caused an error. (Fix from
+Artifex.) (lib/pdf_base.ps [1.9]: 2000/09/14 00:38:05 lpd)
+ - The page dictionary was left on the operand stack while the page
+was being rendered, causing the sc[n]/SC[N] operators to give an error if
+the color consisted of only a single value. (bug introduced after 6.23)
+(lib/pdf_main.ps [1.18]: 2000/09/18 06:38:38 lpd)
+
+Puts the logic for detecting garbage after %%EOF (and some similar invalid
+constructs) back into the main code, making it produce a message on stderr.
+(lib/pdf_main.ps [1.11]: 2000/08/23 02:22:39 lpd)
+
+Implements the op, OP, and OPM (overprint control) elements of ExtGStates.
+(lib/pdf_draw.ps [1.17], lib/pdf_ops.ps [1.10]: 2000/08/24 02:26:52 lpd)
+
+Implements the new PDF 1.4 scalar graphics state parameters (ca, CA, SMask,
+AIS, BM, TK). The implementation of SMask is a stub.
+(lib/pdf_draw.ps [1.18], lib/pdf_ops.ps [1.11]: 2000/08/24 03:04:29 lpd)
+
+If a PDF file is invalid but repairable, prints out the Producer as part of
+the warning message. (lib/pdf_main.ps [1.12]: 2000/08/24 04:18:40 lpd)
+
+Adds most of the code needed to support PDF 1.4 transparency groups and soft
+masks in the graphics state. (lib/pdf_draw.ps [1.19], lib/pdf_ops.ps [1.13]:
+2000/09/08 04:54:10 lpd)
+
+Implements another chunk of the PDF 1.4 transparency features, fixing some
+bugs in the previous code. (lib/pdf_draw.ps [1.20], lib/pdf_main.ps [1.13],
+lib/pdf_ops.ps [1.14]: 2000/09/10 05:26:27 lpd)
+
+Moves the Matte entry of soft mask images from the main structure to the
+mask structures, and changes Matted to has_Matte. (lib/pdf_draw.ps [1.21]:
+2000/09/11 04:08:13 lpd)
+
+Renders pages that use any transparency features as transparency groups.
+(lib/pdf_main.ps [1.15]: 2000/09/12 20:36:23 lpd)
+
+*** empty log message *** (lib/pdf_main.ps [1.16]: 2000/09/15 03:51:54
+alexcher)
+
+Undoes uncommented and in some cases inappropriate changes.
+(lib/pdf_main.ps [1.17]: 2000/09/18 06:28:58 lpd)
+
+Updates the license notices to reflect the name change, and changes a few
+other internal references. (lib/pdf_base.ps [1.10], lib/pdf_draw.ps [1.22],
+lib/pdf_font.ps [1.12], lib/pdf_main.ps [1.19], lib/pdf_ops.ps [1.15],
+lib/pdf_sec.ps [1.2]: 2000/09/19 18:29:11 lpd)
+
+</pre><h2><a name="6.30 Interpreter"></a>Interpreter</h2><pre>
+
+Fixes problems:
+ - The FlateEncode and zlibEncode filters didn't implement the
+"Effort" parameter. (fix from Alex Cherepanov) (zfzlib.c [1.2]: 2000/08/09
+16:55:25 lpd)
+ - The *ACSImageDict parameter dictionaries weren't being set for the
+/default configuration; the *ACSImageDict parameters were never recognized,
+because their names were spelled incorrectly as *ACSDict. (Two separate
+bugs.) (lib/gs_pdfwr.ps [1.5]: 2000/08/18 03:20:12 lpd)
+ - When given an array of the wrong size, a number of operators
+produced a limitcheck error rather than a rangecheck. (idparam.c [1.2],
+idparam.h [1.2], zcie.c [1.3], zfont1.c [1.7], zfunc.c [1.5],
+zfunc0.c [1.2], zimage2.c [1.2], zimage3.c [1.2], zpcolor.c [1.2],
+zshade.c [1.3]: 2000/08/23 01:45:08 lpd)
+ - The stub implementations of .{set,current}{opacity,shape}mask
+didn't {pop the argument}{push null}. (ztrans.c [1.2]: 2000/08/24 03:03:18
+lpd)
+ - The BeOS C compiler objected to some int/bool mismatches.
+(icontext.c [1.5]: 2000/08/31 03:51:29 lpd)
+ - If changing LanguageLevels caused a dictionary to grow, memory
+could be corrupted. (zmisc2.c [1.2]: 2000/08/31 14:43:58 lpd)
+ - Because "-" as an OutputFile now references the %stdout IODevice,
+it no longer worked in configurations without a PostScript interpreter.
+Fixing this required factoring out the stdin/out/err IODevices and providing
+an implementation that didn't reference the PostScript interpreter.
+(ziodev.c [1.2], ziodevs.c [1.1]: 2000/09/07 06:14:45 lpd)
+ - .LocalDefaults was stored in a local array in the (global)
+ColorSpace category dictionary, causing memory anomalies with multiple
+contexts. (lib/gs_ll3.ps [1.6], lib/gs_res.ps [1.13]: 2000/09/20 07:15:11
+lpd)
+ - A missing cast caused the picky OpenVMS compiler to complain.
+(zdevcal.c [1.3]: 2000/09/22 04:18:17 lpd)
+ - Attempting to show an undefined character code in a TrueType font
+with no .notdef entry caused an error. (lib/gs_ttf.ps [1.8]: 2000/09/23
+18:47:06 lpd)
+
+Initializes files for the 6.24 fileset. (lib/gs_init.ps [1.21]: 2000/08/09
+16:54:02 lpd)
+
+Adds the PDF "overprint mode" to the graphics state. THE ACTUAL
+FUNCTIONALITY IS NOT IMPLEMENTED YET. (zcssepr.c [1.4]: 2000/08/23 17:54:16
+lpd)
+
+Starts to implement the PDF 1.4 transparency features. All API and operator
+additions are now implemented (at least as stubs) and documented, as is
+bookkeeping for the new scalar graphics state members (but not for the soft
+masks or the transparency group stack). (ztrans.c [1.1]: 2000/08/23 21:46:31
+lpd)
+
+Partly implements opacity and shape mask bookkeeping. gsave/grestore/etc.
+and banding don't do the right thing yet. (igstate.h [1.2], ztrans.c [1.3]:
+2000/08/25 01:46:48 lpd)
+
+Implements some minor improvements to the freelist algorithms that can
+produce nearly a factor of 2 speedup in some allocation-intensive
+situations. (isave.c [1.2]: 2000/08/26 03:21:34 lpd)
+
+Brings the (still mostly stubbed) transparency code to a more
+self-consistent state. (ztrans.c [1.4]: 2000/08/30 01:34:40 lpd)
+
+Finishes the code for parsing ImageType 103 (soft-mask) images.
+(ztrans.c [1.5]: 2000/08/30 04:30:06 lpd)
+
+Completes the parsing of .{begin,end}transparency{group,mask}, except for
+the TransferFunction for masks. The specification is still subject to
+change. (ztrans.c [1.6]: 2000/08/30 15:03:36 lpd)
+
+*Really* finishes the transparency rendering stack operators (the previous
+version didn't even compile), except for TransferFunction. (ztrans.c [1.7]:
+2000/08/30 21:11:55 lpd)
+
+Implements another chunk of the PDF 1.4 transparency features, fixing some
+bugs in the previous code. (lib/gs_ll3.ps [1.4], ztrans.c [1.8]: 2000/09/10
+05:26:27 lpd)
+
+Checks that the TransferFunction of a soft mask is 1-in, 1-out; sets Matted
+correctly in the soft mask parameters passed to the graphics library.
+(ztrans.c [1.9]: 2000/09/11 02:10:28 lpd)
+
+Moves the Matte entry of soft mask images from the main structure to the
+mask structures, and changes Matted to has_Matte. (ztrans.c [1.10]:
+2000/09/11 04:08:13 lpd)
+
+Upgrades the proposed driver interface transparency extension from comments
+to macros, changing the name 'discard_transparency_level' to
+'discard_transparency_layer'. (ztrans.c [1.11]: 2000/09/11 20:13:31 lpd)
+
+*** empty log message *** (lib/gs_init.ps [1.22], zmatrix.c [1.2]:
+2000/09/14 19:46:05 alexcher)
+
+Undoes uncommented and in some cases inappropriate changes.
+(lib/gs_init.ps [1.23], zmatrix.c [1.3]: 2000/09/18 06:28:58 lpd)
+
+Updates the license notice to reflect the name change, and changes a few
+other internal references. (lib/gs_agl.ps [1.2], lib/gs_btokn.ps [1.3],
+lib/gs_ccfnt.ps [1.4], lib/gs_ce_e.ps [1.2], lib/gs_cff.ps [1.7],
+lib/gs_cidfn.ps [1.17], lib/gs_cmap.ps [1.6], lib/gs_cmdl.ps [1.2],
+lib/gs_css_e.ps [1.2], lib/gs_dbt_e.ps [1.2], lib/gs_diskf.ps [1.2],
+lib/gs_dpnxt.ps [1.2], lib/gs_dps.ps [1.4], lib/gs_dps1.ps [1.2],
+lib/gs_dps2.ps [1.2], lib/gs_epsf.ps [1.2], lib/gs_fform.ps [1.2],
+lib/gs_fonts.ps [1.9], lib/gs_frsd.ps [1.4], lib/gs_il1_e.ps [1.2],
+lib/gs_il2_e.ps [1.2], lib/gs_init.ps [1.24], lib/gs_kanji.ps [1.2],
+lib/gs_ksb_e.ps [1.2], lib/gs_l2img.ps [1.2], lib/gs_lev2.ps [1.6],
+lib/gs_lgo_e.ps [1.3], lib/gs_lgx_e.ps [1.2], lib/gs_ll3.ps [1.5],
+lib/gs_mex_e.ps [1.2], lib/gs_mgl_e.ps [1.3], lib/gs_mro_e.ps [1.2],
+lib/gs_pdf_e.ps [1.2], lib/gs_pdfwr.ps [1.6], lib/gs_pfile.ps [1.2],
+lib/gs_rdlin.ps [1.2], lib/gs_res.ps [1.12], lib/gs_setpd.ps [1.5],
+lib/gs_statd.ps [1.4], lib/gs_std_e.ps [1.2], lib/gs_sym_e.ps [1.2],
+lib/gs_trap.ps [1.3], lib/gs_ttf.ps [1.7], lib/gs_typ32.ps [1.2],
+lib/gs_typ42.ps [1.2], lib/gs_type1.ps [1.4], lib/gs_wan_e.ps [1.2],
+lib/gs_wl1_e.ps [1.2], lib/gs_wl2_e.ps [1.2], lib/gs_wl5_e.ps [1.2]:
+2000/09/19 18:29:11 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (bfont.h [1.3], btoken.h [1.4],
+ccfont.h [1.2], dpmainc.c [1.2], dstack.h [1.2], dwdll.cpp [1.2], dwdll.h
+[1.2], dwimg.cpp [1.2], dwimg.h [1.2], dwinst.cpp [1.2], dwinst.h [1.2],
+dwmain.cpp [1.2], dwmain.h [1.2], dwmainc.cpp [1.3], dwnodll.cpp [1.2],
+dwsetup.cpp [1.3], dwsetup.h [1.2], dwtext.cpp [1.2], dwtext.h [1.2],
+dwuninst.cpp [1.2], dwuninst.h [1.2], errors.h [1.2], estack.h [1.2],
+files.h [1.2]: 2000/09/19 19:00:09 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (ghost.h [1.2], gs.c [1.2]:
+2000/09/19 19:00:23 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (ialloc.c [1.2], ialloc.h [1.2],
+iastate.h [1.2], iastruct.h [1.2], ibnum.c [1.2], ibnum.h [1.2], iccfont.c
+[1.2], iccinit0.c [1.2], icfontab.c [1.2], ichar.h [1.3], ichar1.h [1.3],
+icharout.h [1.2], icid.h [1.2], icie.h [1.2], icolor.h [1.2], iconf.c
+[1.2], icontext.c [1.6], icontext.h [1.2], icremap.h [1.2], icsmap.h [1.2],
+icstate.h [1.4], iddict.h [1.2], iddstack.h [1.2], idebug.c [1.2], idebug.h
+[1.2], idict.c [1.2], idict.h [1.2], idictdef.h [1.2], idosave.h [1.2],
+idparam.c [1.3], idparam.h [1.3], idsdata.h [1.2], idstack.c [1.2],
+idstack.h [1.2], iesdata.h [1.2], iestack.h [1.2], ifcid.h [1.2], ifilter.h
+[1.3], ifilter2.h [1.2], ifont.h [1.4], ifont1.h [1.3], ifont2.h [1.2],
+ifont42.h [1.3], ifrpred.h [1.2], ifunc.h [1.3], ifwpred.h [1.2], igc.c
+[1.2]: 2000/09/19 19:00:41 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (igc.h [1.2], igcref.c [1.2],
+igcstr.c [1.3], igcstr.h [1.2], igstate.h [1.3], iht.h [1.2], iimage.h
+[1.2], iimage2.h [1.2], iinit.c [1.2], iinit.h [1.2], ilevel.h [1.2],
+ilocate.c [1.3], imain.c [1.2], imain.h [1.2], imainarg.c [1.4], imainarg.h
+[1.2], imemory.h [1.2], iminst.h [1.2], iname.c [1.3], iname.h [1.2],
+inamedef.h [1.2], inameidx.h [1.2], inames.h [1.2], inamestr.h [1.2],
+inobtokn.c [1.2], inouparm.c [1.2], interp.c [1.6], interp.h [1.2],
+iosdata.h [1.2], iostack.h [1.2], ipacked.h [1.2], iparam.c [1.5], iparam.h
+[1.2], iparray.h [1.2], ipcolor.h [1.2], ireclaim.c [1.2], iref.h [1.3],
+isave.c [1.3], isave.h [1.2], iscan.c [1.5], iscan.h [1.4], iscanbin.c
+[1.5], iscanbin.h [1.2], iscannum.c [1.2], iscannum.h [1.2], isdata.h
+[1.2], isstate.h [1.2], istack.c [1.2], istack.h [1.2], istkparm.h [1.2],
+istream.h [1.2], istruct.h [1.2], itoken.h [1.2], iutil.c [1.2], iutil.h
+[1.2], iutil2.c [1.2], iutil2.h [1.2], ivmem2.h [1.2]: 2000/09/19 19:00:44
+lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (ivmspace.h [1.2], main.h [1.2],
+oparc.h [1.2], opcheck.h [1.2], opdef.h [1.2], oper.h [1.2], opextern.h
+[1.2], ostack.h [1.2], sbhc.c [1.2], sbhc.h [1.2], sbwbs.c [1.2], sbwbs.h
+[1.2], sfilter1.c [1.5]: 2000/09/19 19:00:47 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (shcgen.c [1.2], shcgen.h [1.2],
+smtf.c [1.2], smtf.h [1.2], store.h [1.2], zarith.c [1.4], zarray.c [1.2],
+zbfont.c [1.6], zbseq.c [1.4], zcfont.c [1.2], zchar.c [1.3], zchar1.c
+[1.5], zchar2.c [1.2], zchar32.c [1.2], zchar42.c [1.2], zcharout.c [1.2],
+zcharx.c [1.3], zcid.c [1.3], zcie.c [1.4], zcolor.c [1.4]: 2000/09/19
+19:00:50 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (zcolor1.c [1.3], zcolor2.c [1.3],
+zcontext.c [1.6], zcontrol.c [1.3], zcrd.c [1.2], zcsdevn.c [1.3],
+zcsindex.c [1.3], zcspixel.c [1.2], zcssepr.c [1.5], zdevcal.c [1.2],
+zdevice.c [1.3], zdevice2.c [1.3], zdict.c [1.3], zdouble.c [1.2],
+zdpnext.c [1.2], zdps.c [1.4], zdps1.c [1.2], zfbcp.c [1.3], zfcid.c
+[1.10], zfcid0.c [1.4], zfcid1.c [1.2], zfcmap.c [1.8], zfdctd.c [1.3],
+zfdcte.c [1.3], zfdecode.c [1.3], zfile.c [1.5], zfileio.c [1.9], zfilter.c
+[1.4], zfilter2.c [1.3], zfilterx.c [1.2], zfmd5.c [1.2], zfont.c [1.2],
+zfont0.c [1.3], zfont1.c [1.8], zfont2.c [1.3], zfont32.c [1.2], zfont42.c
+[1.5], zfproc.c [1.4], zfrsd.c [1.4], zfunc.c [1.6], zfunc0.c [1.3],
+zfunc3.c [1.2], zfunc4.c [1.5], zfzlib.c [1.3], zgeneric.c [1.3], zgstate.c
+[1.2], zhsb.c [1.2], zht.c [1.2], zht1.c [1.2], zht2.c [1.2], zimage.c
+[1.5], zimage2.c [1.3], zimage3.c [1.3], ziodev.c [1.3], ziodev2.c [1.3],
+ziodevs.c [1.2], zmath.c [1.3], zmatrix.c [1.4], zmedia2.c [1.2], zmisc.c
+[1.2], zmisc1.c [1.3], zmisc2.c [1.3], zmisc3.c [1.2], zpacked.c [1.2],
+zpaint.c [1.2], zpath.c [1.2], zpath1.c [1.2], zpcolor.c [1.3], zrelbit.c
+[1.2], zrop.c [1.2], zshade.c [1.4], zstack.c [1.2], zstring.c [1.2],
+zsysvm.c [1.2], ztoken.c [1.6], ztrans.c [1.12], ztrap.c [1.2], ztype.c
+[1.3], zupath.c [1.2], zusparam.c [1.3], zvmem.c [1.2], zvmem2.c [1.2]:
+2000/09/19 19:00:53 lpd)
+
+Change to avoid multiply defined rect_param when NOPRIVATE is used. This
+module uses 4 element X/Y/width/Height, not a gs_rect so xywh_param is a
+better name. (zdpnext.c [1.3]: 2000/09/21 15:12:01 rayjj)
+
+Changes the default Windows installation directory from c:\Aladdin to c:\gs.
+(dwsetup.cpp [1.4]: 2000/09/22 05:32:17 lpd)
+
+Changes the default Windows Start Menu Folder from "Aladdin" to
+"Ghostscript". (dwsetup.cpp [1.5]: 2000/09/22 05:35:02 lpd)
+
+Documentation changes in preparation for 6.30 release. Replaced some contact
+information, updated version numbers. (lib/gs_init.ps [1.25]: 2000/10/04
+04:33:29 raph)
+
+</pre><h2><a name="6.30 Streams"></a>Streams</h2><pre>
+
+Fixes problems:
+ - s_add_filter used min_out_size rather than min_in_size for the
+minimum buffer size, which could cause an endless loop when writing to the
+filter. (This only affected filters allocated by C code, not by the
+PostScript filter operator.) (stream.c [1.7], stream.h [1.6]: 2000/08/16
+01:26:22 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (sa85d.c [1.2], sa85d.h [1.2],
+sa85x.h [1.3], sbcp.c [1.3], sbcp.h [1.2], sbtx.h [1.2], scanchar.h [1.2],
+scantab.c [1.2], scf.h [1.2], scfd.c [1.2], scfe.c [1.2], scfetab.c [1.2],
+scfparam.c [1.2], scfx.h [1.2], scommon.h [1.2], sdcparam.c [1.2],
+sdcparam.h [1.2], sdct.h [1.2], sdctc.c [1.2], sdctd.c [1.2], sdcte.c
+[1.2], sddparam.c [1.2], sdeparam.c [1.2], seexec.c [1.3], sfilter.h [1.6],
+sfilter2.c [1.3], sfxboth.c [1.2], sfxfd.c [1.5]: 2000/09/19 19:00:47 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (sfxstdio.c [1.4], shc.c [1.2],
+shc.h [1.2], siinterp.c [1.2], siinterp.h [1.2], siscale.c [1.4], siscale.h
+[1.2], sisparam.h [1.2], sjpeg.h [1.2], sjpegc.c [1.2], sjpegd.c [1.2],
+sjpege.c [1.2], slzwc.c [1.2], slzwce.c [1.2], slzwd.c [1.2], slzwx.h
+[1.2], smd5.c [1.3], smd5.h [1.2], spdiff.c [1.3], spdiffx.h [1.2], spngp.c
+[1.2], spngpx.h [1.2], spprint.c [1.2], spprint.h [1.2], spsdf.c [1.4],
+spsdf.h [1.2], srdline.h [1.2], srld.c [1.2], srle.c [1.2], srlx.h [1.2],
+sstring.c [1.2], sstring.h [1.2], stat_.h [1.5], std.h [1.3], stdio_.h
+[1.2], stdpre.h [1.2], stream.c [1.8], stream.h [1.7], strimpl.h [1.2],
+string_.h [1.2], szlibc.c [1.2], szlibd.c [1.2], szlibe.c [1.2], szlibx.h
+[1.2], szlibxx.h [1.2]: 2000/09/19 19:00:50 lpd)
+
+</pre><h2><a name="6.30 Library"></a>Library</h2><pre>
+
+Fixes problems:
+ - Parameter lists didn't have proper GC descriptors; garbage
+collection could mangle keys and collection values in non-transient
+parameter lists (such as distiller parameters). (gscparam.c [1.5]:
+2000/08/19 03:01:30 lpd)
+ - gdev_vector_dopath could return 1, which value was then propagated
+to callers that interpreted it differently. (gdevvec.c [1.5],
+gdevvec.h [1.3]: 2000/08/20 00:21:42 lpd)
+ - An AIX compiler could get confused if the last elements of a
+structure were individual bytes. (gzpath.h [1.2]: 2000/08/24 19:43:48 lpd)
+ - If the OutputFile of a high-level device was ever set, any
+subsequent execution of setpagedevice would cause a rangecheck in
+.installpagedevice. (gdevvec.c [1.6]: 2000/08/31 02:04:50 lpd)
+ - Type 2 CharStrings didn't insert an explicit closepath at the end
+of each subpath. (This matters for charpath followed by stroke.)
+(gstype2.c [1.5]: 2000/08/31 02:16:45 lpd)
+ - Type 2 fonts should insert an explicit closepath only if the
+font's PaintType != 1. (gstype2.c [1.6]: 2000/08/31 03:21:45 lpd)
+ - The BeOS C compiler objected to some int/bool mismatches.
+(gp.h [1.4], gxfill.c [1.4], gxtext.h [1.2]: 2000/08/31 03:51:29 lpd)
+ - Because "-" as an OutputFile now references the %stdout IODevice,
+it no longer worked in configurations without a PostScript interpreter.
+Fixing this required factoring out the stdin/out/err IODevices and providing
+an implementation that didn't reference the PostScript interpreter.
+(gsiodevs.c [1.1], gslib.c [1.2]: 2000/09/07 06:14:45 lpd)
+ - Fixes a type error caused by a change in the TransferFunction
+member of gs_transparency_mask_params_t. (gstrans.c [1.7]: 2000/09/10
+18:20:09 lpd)
+ - Several places in the code for ImageType 3x (soft-masked) images
+didn't correctly handle the case where only one of the two masks was
+supplied (which is always the case for PDF). (gximag3x.c [1.4]: 2000/09/11
+02:12:19 lpd)
+ - The -Zv tracing messages for gs_begin_transparency_{group,mask}
+were incorrect. (gstrans.c [1.10]: 2000/09/12 20:35:05 lpd)
+ - Printing the program name and version didn't use fprintf, so it
+didn't work properly with the stdout redirection on Windows. (fix from
+Artifex) (gsmisc.c [1.7]: 2000/09/18 06:22:35 lpd)
+ - Undefined characters in CID-keyed (FMapType 9) composite fonts
+caused an infinite loop, because the parsing index was never advanced past
+the character. (gsfcmap.c [1.7]: 2000/09/21 02:44:44 lpd)
+ - CID-keyed (FMapType 9) composite fonts didn't return the correct
+parsed character code, possibly causing widthshow or cshow to produce
+incorrect output. (gsfcmap.c [1.8], gsfcmap.h [1.4]: 2000/09/21 03:02:03
+lpd)
+ - Works around ANSI C's unreasonable new aliasing restrictions.
+(gsnogc.c [1.5]: 2000/09/22 04:17:52 lpd)
+ - The 'head' table in embedded TrueType fonts had a length of 56; it
+should have a length of 54 and be followed by 2 padding bytes.
+(gdevpsft.c [1.4]: 2000/09/26 06:42:05 lpd)
+
+Initializes files for the 6.24 fileset. (gscdef.c [1.7]: 2000/08/09 16:54:02
+lpd)
+
+Adds the PDF "overprint mode" to the graphics state. THE ACTUAL
+FUNCTIONALITY IS NOT IMPLEMENTED YET. (gscsepr.c [1.4], gscsepr.h [1.3],
+gsstate.c [1.2], gxclpath.c [1.3], gxclpath.h [1.2], gxclrast.c [1.4],
+gxistate.h [1.2]: 2000/08/23 17:54:14 lpd)
+
+Starts to implement the PDF 1.4 transparency features. All API and operator
+additions are now implemented (at least as stubs) and documented, as is
+bookkeeping for the new scalar graphics state members (but not for the soft
+masks or the transparency group stack). (gsistate.c [1.2], gsstate.c [1.3],
+gstparam.h [1.1], gstrans.c [1.1], gstrans.h [1.1], gxclpath.c [1.4],
+gxclpath.h [1.3], gxclrast.c [1.5], gxistate.h [1.3], gzstate.h [1.2]:
+2000/08/23 21:46:31 lpd)
+
+Adds a new equality-testing virtual procedure for color spaces.
+(gscdevn.c [1.4], gscolor2.c [1.5], gscpixel.c [1.2], gscscie.c [1.2],
+gscsepr.c [1.5], gscspace.c [1.3], gscspace.h [1.3], gspcolor.c [1.3],
+gxcspace.h [1.3]: 2000/08/24 05:42:30 lpd)
+
+Changes the band list representation of mask images to allow
+BitsPerComponent > 1 (for soft masks). (gximage1.c [1.2]: 2000/08/24
+17:58:18 lpd)
+
+Adds Matte and has_Matte members to ImageType 1 images. These are only used
+with the new transparency features. (gsiparam.h [1.2], gximage1.c [1.3]:
+2000/08/24 19:20:12 lpd)
+
+Partly implements opacity and shape mask bookkeeping. gsave/grestore/etc.
+and banding don't do the right thing yet. (gstparam.h [1.2],
+gstrans.c [1.2], gstrans.h [1.2], gxcldev.h [1.2], gxclpath.c [1.5],
+gxclpath.h [1.4]: 2000/08/25 01:46:48 lpd)
+
+Changes remove_range_from_freelist to only scan relevant freelists, rather
+than all of them. On some files, the speedup is dramatic. (gsalloc.c [1.6]:
+2000/08/26 01:18:33 lpd)
+
+Completes an edit that accidentally left the repository in an inconsistent
+state. (gxclpath.c [1.6], gxclrast.c [1.6]: 2000/08/26 03:19:56 lpd)
+
+Implements some minor improvements to the freelist algorithms that can
+produce nearly a factor of 2 speedup in some allocation-intensive
+situations. (gsalloc.c [1.7], gxalloc.h [1.4]: 2000/08/26 03:21:34 lpd)
+
+Brings the (still mostly stubbed) transparency code to a more
+self-consistent state. (gsipar3x.h [1.1], gsiparam.h [1.3],
+gsstruct.h [1.4], gstparam.h [1.3], gstrans.c [1.3], gstrans.h [1.3],
+gxclpath.c [1.7], gxclpath.h [1.5], gxclrast.c [1.7], gximag3x.c [1.1],
+gximag3x.h [1.1], gximage1.c [1.4], gxistate.h [1.4]: 2000/08/30 01:34:40
+lpd)
+
+Finishes the code for parsing ImageType 103 (soft-mask) images.
+(gximag3x.c [1.2]: 2000/08/30 04:29:56 lpd)
+
+Completes the parsing of .{begin,end}transparency{group,mask}, except for
+the TransferFunction for masks. The specification is still subject to
+change. (gstparam.h [1.4], gstrans.c [1.4], gstrans.h [1.4]: 2000/08/30
+15:03:36 lpd)
+
+Adds documentation on proposed driver interface additions for managing the
+transparency rendering stack. (gstrans.c [1.5]: 2000/08/31 20:22:47 lpd)
+
+Adds color space type names for tracing/debugging. (gscspace.h [1.4]:
+2000/09/10 05:21:44 lpd)
+
+Changes the -Zv switch to trace alpha/transparency-related features.
+(gdevabuf.c [1.2]: 2000/09/10 05:23:10 lpd)
+
+Implements another chunk of the PDF 1.4 transparency features, fixing some
+bugs in the previous code. (gstparam.h [1.5], gstrans.c [1.6],
+gximag3x.c [1.3]: 2000/09/10 05:26:27 lpd)
+
+Moves the Matte entry of soft mask images from the main structure to the
+mask structures, and changes Matted to has_Matte. (gsipar3x.h [1.2],
+gximag3x.c [1.5], gximag3x.h [1.2]: 2000/09/11 04:08:13 lpd)
+
+Adds a default implementation of soft-masked images that simply ignores the
+mask. (gximag3x.c [1.6]: 2000/09/11 04:38:01 lpd)
+
+Upgrades the proposed driver interface transparency extension from comments
+to macros, changing the name 'discard_transparency_level' to
+'discard_transparency_layer'. (gstrans.c [1.8], gstrans.h [1.5]: 2000/09/11
+20:13:31 lpd)
+
+Finishes the (dummy) implementation of the transparency layer stack in the
+graphics library. (gsistate.c [1.3], gsstate.c [1.4], gstparam.h [1.6],
+gstrans.c [1.9], gxistate.h [1.5]: 2000/09/11 22:20:05 lpd)
+
+Makes the default string matching parameters public. (gsutil.c [1.3],
+gsutil.h [1.2]: 2000/09/12 02:02:52 lpd)
+
+*** empty log message *** (gsmisc.c [1.6]: 2000/09/15 03:01:51 alexcher)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (close_.h [1.2], ctype_.h [1.2],
+dirent_.h [1.2], dos_.h [1.2], errno_.h [1.2], fcntl_.h [1.3], gconf.c
+[1.2], gconf.h [1.2], gdebug.h [1.2], gdevabuf.c [1.3], gdevalph.c [1.2],
+gdevbbox.c [1.3], gdevbbox.h [1.2]: 2000/09/19 19:00:09 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gdevcmap.c [1.2], gdevcmap.h
+[1.2], gdevdbit.c [1.2], gdevddrw.c [1.2], gdevdflt.c [1.3], gdevdgbr.c
+[1.2], gdevdrop.c [1.3], gdevemap.c [1.2], gdevhit.c [1.2], gdevht.c [1.3],
+gdevht.h [1.2], gdevm1.c [1.2], gdevm16.c [1.2], gdevm2.c [1.2], gdevm24.c
+[1.2], gdevm32.c [1.2], gdevm4.c [1.2], gdevm8.c [1.2], gdevmem.c [1.2],
+gdevmem.h [1.3], gdevmpla.c [1.2], gdevmpla.h [1.2], gdevmr1.c [1.2],
+gdevmr2n.c [1.2], gdevmr8n.c [1.2], gdevmrop.h [1.3], gdevmrun.c [1.2],
+gdevmrun.h [1.2], gdevnfwd.c [1.3]: 2000/09/19 19:00:12 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gdevpipe.c [1.3], gdevplnx.c
+[1.2], gdevplnx.h [1.2], gdevppla.c [1.2], gdevppla.h [1.2], gdevprn.c
+[1.5], gdevprn.h [1.6], gdevprna.c [1.2], gdevprna.h [1.2], gdevpsf.h
+[1.7], gdevpsf1.c [1.5], gdevpsf2.c [1.7], gdevpsfm.c [1.3], gdevpsft.c
+[1.3], gdevpsfu.c [1.4], gdevpsfx.c [1.5], gdevrops.c [1.3]: 2000/09/19
+19:00:20 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gdevtrac.c [1.2], gdevvec.c
+[1.7], gdevvec.h [1.4], gp.h [1.5], gp_dosfe.c [1.2], gp_dosfs.c [1.2],
+gp_getnv.c [1.2], gp_msdos.c [1.2], gp_nsync.c [1.2], gp_psync.c [1.2],
+gp_strdl.c [1.2], gp_unifn.c [1.2], gp_unifs.c [1.3], gpcheck.h [1.2],
+gpgetenv.h [1.2], gpmisc.c [1.7], gpmisc.h [1.2], gpsync.h [1.2], gsalloc.c
+[1.8], gsalloc.h [1.2], gsalpha.c [1.2], gsalpha.h [1.2], gsalphac.c [1.2],
+gsalphac.h [1.2], gsargs.c [1.2], gsargs.h [1.3], gsbitmap.h [1.2],
+gsbitops.c [1.2], gsbitops.h [1.2], gsbittab.c [1.2], gsbittab.h [1.2]:
+2000/09/19 19:00:23 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gsccode.h [1.4], gsccolor.h
+[1.2], gscdef.c [1.8], gscdefs.h [1.2], gscdevn.c [1.5], gscdevn.h [1.3],
+gschar.c [1.3], gschar.h [1.3], gschar0.c [1.2], gscie.c [1.3], gscie.h
+[1.2], gsciemap.c [1.3], gscindex.h [1.2], gsclipsr.c [1.2], gsclipsr.h
+[1.2], gscolor.c [1.4], gscolor.h [1.3], gscolor1.c [1.3], gscolor1.h
+[1.2], gscolor2.c [1.6], gscolor2.h [1.3], gscolor3.c [1.4], gscolor3.h
+[1.2], gscompt.h [1.2], gscoord.c [1.5], gscoord.h [1.2], gscparam.c [1.6],
+gscpixel.c [1.3], gscpixel.h [1.2], gscpm.h [1.2], gscrd.c [1.2], gscrd.h
+[1.2], gscrdp.c [1.2], gscrdp.h [1.2], gscrypt1.c [1.2], gscrypt1.h [1.2],
+gscscie.c [1.3], gscsel.h [1.2], gscsepnm.h [1.2], gscsepr.c [1.6],
+gscsepr.h [1.4], gscspace.c [1.4], gscspace.h [1.5], gscssub.c [1.2],
+gscssub.h [1.2], gsdcolor.h [1.3], gsdevice.c [1.7], gsdevice.h [1.3],
+gsdevmem.c [1.2], gsdparam.c [1.4], gsdpnext.h [1.2], gsdps.c [1.2],
+gsdps.h [1.2], gsdps1.c [1.2], gsdsrc.c [1.2], gsdsrc.h [1.3], gserror.h
+[1.2], gserrors.h [1.2], gsexit.h [1.2], gsfcid.c [1.4], gsfcmap.c [1.6],
+gsfcmap.h [1.3], gsfemu.c [1.2], gsflip.c [1.2], gsflip.h [1.2], gsfname.c
+[1.2], gsfname.h [1.2], gsfont.c [1.2], gsfont.h [1.2], gsfont0.c [1.2],
+gsfunc.c [1.4], gsfunc.h [1.4], gsfunc0.c [1.3], gsfunc0.h [1.2], gsfunc3.c
+[1.4], gsfunc3.h [1.2], gsfunc4.c [1.3], gsfunc4.h [1.2], gsfuncv.c [1.2],
+gsfuncv.h [1.2]: 2000/09/19 19:00:26 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gsgc.h [1.2], gshsb.c [1.2],
+gshsb.h [1.2], gsht.c [1.2], gsht.h [1.2], gsht1.c [1.2], gsht1.h [1.2],
+gshtscr.c [1.3], gshtx.c [1.2], gshtx.h [1.2], gsimage.c [1.3], gsimage.h
+[1.2], gsimpath.c [1.2], gsinit.c [1.2], gsio.h [1.4], gsiodev.c [1.3],
+gsiodevs.c [1.2], gsipar3x.h [1.3], gsiparam.h [1.4], gsiparm2.h [1.2],
+gsiparm3.h [1.4], gsiparm4.h [1.2], gsistate.c [1.4], gsjconf.h [1.2],
+gslib.c [1.3], gslib.h [1.2], gsline.c [1.2], gsline.h [1.2], gslparam.h
+[1.2], gsmalloc.c [1.3], gsmalloc.h [1.2], gsmatrix.c [1.2], gsmatrix.h
+[1.2], gsmdebug.h [1.2], gsmemlok.c [1.3], gsmemlok.h [1.2], gsmemory.c
+[1.2], gsmemory.h [1.2], gsmemraw.h [1.2], gsmemret.c [1.2], gsmemret.h
+[1.2], gsmisc.c [1.8], gsnogc.c [1.4], gsnogc.h [1.2], gsnorop.c [1.2],
+gsnotify.c [1.2], gsnotify.h [1.2], gspaint.c [1.2], gspaint.h [1.2],
+gsparam.c [1.4], gsparam.h [1.7], gsparam2.c [1.2], gsparams.c [1.2],
+gsparams.h [1.2], gsparamx.c [1.3], gsparamx.h [1.3], gspath.c [1.2],
+gspath.h [1.2], gspath1.c [1.2], gspath2.h [1.2], gspcolor.c [1.4],
+gspcolor.h [1.2], gspenum.h [1.2], gsptype1.c [1.2], gsptype1.h [1.2]:
+2000/09/19 19:00:29 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gsptype2.c [1.3], gsptype2.h
+[1.2], gsrect.h [1.2], gsrefct.h [1.2], gsrop.c [1.2], gsrop.h [1.2],
+gsropc.c [1.2], gsropc.h [1.2], gsropt.h [1.3], gsroptab.c [1.2], gsshade.c
+[1.3], gsshade.h [1.3], gsstate.c [1.5], gsstate.h [1.2], gsstruct.h [1.5],
+gsstype.h [1.2], gstext.c [1.3], gstext.h [1.3], gstparam.h [1.7],
+gstrans.c [1.11], gstrans.h [1.6], gstrap.c [1.3], gstrap.h [1.3],
+gstype1.c [1.5], gstype1.h [1.2], gstype2.c [1.7], gstype42.c [1.7],
+gstypes.h [1.2], gsuid.h [1.2], gsutil.c [1.4], gsutil.h [1.3], gsxfont.h
+[1.2], gx.h [1.2], gxacpath.c [1.3], gxalloc.h [1.5], gxalpha.h [1.2],
+gxarith.h [1.2], gxband.h [1.2], gxbcache.c [1.2], gxbcache.h [1.2],
+gxbitfmt.h [1.2], gxbitmap.h [1.2], gxbitops.h [1.2], gxccache.c [1.2],
+gxccman.c [1.2], gxcdevn.h [1.2], gxchar.c [1.2], gxchar.h [1.2],
+gxchrout.c [1.2], gxchrout.h [1.2], gxcht.c [1.2], gxcid.h [1.3], gxcie.h
+[1.2], gxcindex.h [1.2], gxclbits.c [1.2], gxcldev.h [1.3], gxclfile.c
+[1.2], gxclimag.c [1.2], gxclio.h [1.2], gxclip.c [1.3], gxclip.h [1.2],
+gxclip2.c [1.3], gxclip2.h [1.2], gxclipm.c [1.3], gxclipm.h [1.2],
+gxclipsr.h [1.2], gxclist.c [1.3], gxclist.h [1.2], gxcllzw.c [1.2],
+gxclmem.c [1.2], gxclmem.h [1.2]: 2000/09/19 19:00:32 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gxclpage.c [1.2], gxclpage.h
+[1.2], gxclpath.c [1.8], gxclpath.h [1.6], gxclrast.c [1.8], gxclread.c
+[1.2], gxclrect.c [1.2], gxclutil.c [1.2], gxclzlib.c [1.2], gxcmap.c
+[1.3], gxcmap.h [1.2], gxcolor2.h [1.4], gxcomp.h [1.2], gxcoord.h [1.2],
+gxcpath.c [1.3], gxcpath.h [1.2], gxcspace.h [1.4], gxctable.c [1.3],
+gxctable.h [1.2], gxcvalue.h [1.2], gxdcconv.c [1.3], gxdcconv.h [1.2],
+gxdcolor.c [1.3], gxdcolor.h [1.3], gxdda.h [1.2], gxdevbuf.h [1.2],
+gxdevcli.h [1.3], gxdevice.h [1.4], gxdevmem.h [1.2], gxdevrop.h [1.2],
+gxdht.h [1.4], gxdhtres.h [1.2], gxdither.c [1.2], gxdither.h [1.2],
+gxfarith.h [1.3], gxfcache.h [1.2], gxfcid.h [1.6], gxfcmap.h [1.5],
+gxfill.c [1.5], gxfixed.h [1.2], gxfmap.h [1.3], gxfont.h [1.2], gxfont0.h
+[1.3], gxfont1.h [1.4], gxfont42.h [1.4], gxfrac.h [1.2], gxftype.h [1.2],
+gxfunc.h [1.3], gxgetbit.h [1.2], gxhint1.c [1.2], gxhint2.c [1.2],
+gxhint3.c [1.2], gxht.c [1.2], gxht.h [1.2], gxhtbit.c [1.3], gxhttile.h
+[1.2], gxhttype.h [1.2], gxi12bit.c [1.2], gxiclass.h [1.2], gxicolor.c
+[1.2], gxidata.c [1.4], gxifast.c [1.2], gximag3x.c [1.7]: 2000/09/19
+19:00:35 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gximag3x.h [1.3], gximage.c
+[1.2], gximage.h [1.2], gximage1.c [1.5], gximage2.c [1.2], gximage3.c
+[1.6], gximage3.h [1.4], gximage4.c [1.3], gximono.c [1.2], gxino12b.c
+[1.2], gxiodev.h [1.2], gxiparam.h [1.2], gxipixel.c [1.2], gxiscale.c
+[1.2], gxistate.h [1.6], gxline.h [1.2], gxlum.h [1.2], gxmatrix.h [1.4],
+gxmclip.c [1.2], gxmclip.h [1.2], gxobj.h [1.2], gxop1.h [1.2], gxp1fill.c
+[1.2], gxp1impl.h [1.2], gxpageq.c [1.2], gxpageq.h [1.2], gxpaint.c [1.2],
+gxpaint.h [1.2], gxpath.c [1.2], gxpath.h [1.2], gxpath2.c [1.2],
+gxpcache.h [1.2], gxpcmap.c [1.3], gxpcolor.h [1.2], gxpcopy.c [1.3],
+gxpdash.c [1.2], gxpflat.c [1.2], gxropc.h [1.2], gxrplane.h [1.2],
+gxsample.c [1.2], gxsample.h [1.2], gxshade.c [1.4], gxshade.h [1.3],
+gxshade1.c [1.5], gxshade4.c [1.3], gxshade4.h [1.2], gxshade6.c [1.3],
+gxstate.h [1.2], gxstdio.h [1.2], gxstroke.c [1.2], gxsync.c [1.2],
+gxsync.h [1.2], gxtext.h [1.3], gxtmap.h [1.2], gxttf.h [1.2], gxtype1.c
+[1.6], gxtype1.h [1.4], gxxfont.h [1.2], gzacpath.h [1.2], gzcpath.h [1.2],
+gzht.h [1.3], gzline.h [1.2], gzpath.h [1.3]: 2000/09/19 19:00:38 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gzstate.h [1.3]: 2000/09/19
+19:00:41 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (jerror_.h [1.2], malloc_.h [1.2],
+math_.h [1.2], memory_.h [1.2], pipe_.h [1.2]: 2000/09/19 19:00:47 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (time_.h [1.2], vmsmath.h [1.2],
+windows_.h [1.2]: 2000/09/19 19:00:51 lpd)
+
+Bring version numbers and dates up to date. Small bug fix in toolbin/pre to
+make it able to handle months with leading zeros. (gscdef.c [1.9]:
+2000/10/04 05:18:54 raph)
+
+</pre><h2><a name="6.30 ???Other???"></a>???Other???</h2><pre>
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gp_mswin.h [1.2]: 2000/09/19
+19:00:24 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gsdll.h [1.2], gsdll32w.lnk
+[1.2], gsdllos2.h [1.2], gsdllwin.h [1.2], gsjmorec.h [1.2]: 2000/09/19
+19:00:27 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (gspmdrv.h [1.2]: 2000/09/19
+19:00:31 lpd)
+
+Updates the license notices to reflect the name change, as well as some
+internal references to the program name. (iutilasm.asm [1.2]: 2000/09/19
+19:00:46 lpd)
+
+<hr>
+
+<h1><a name="Version6.23"></a>Version 6.23 (2000-08-07)</h1>
+
+<p>
+This fileset consists mostly of bug fixes.
+
+<p>
+All problems registered on SourceForge numbered 110922 or lower are closed,
+except for the following: 101549, 101814, 101905, 101955, 102146, 102735,
+104118, 105289, 105558, 106340, 106652, 109350, 110445, 110898, 110922.
+
+<p>
+The following projects are in a partially completed state in the PDF writer:
+
+<ul>
+
+<li>CID-keyed fonts (gdevpdf[eftw].c) -- barely started.
+
+</ul>
+
+<pre>
+
+<h2><a name="6.23_Incompatible_changes"></a>Incompatible changes</h2>
+
+(Drivers)
+ - With high-level drivers ([e]pswrite, pdfwrite, pxl*, cgm*),
+changing the OutputFile after writing one or more pages now causes an error.
+(Interpreter)
+ - By default, copydevice will only copy a device prototype.
+ - Some internal references to contexts in zcontext.c are changed
+from direct pointers to context indices.
+ - Renames internal types to add a _t: ctx_list, ctx_status,
+gs_context, gs_condition, gs_lock.
+(Library)
+ - By default, gs_copydevice[2] will only copy a device prototype.
+
+
+<h2><a name="6.23 Documentation"></a>Documentation</h2><pre>
+
+Fixes problems:
+ - Local GC in a multi-context system caused a crash. Also updates
+all the internal type names in zcontext.c by adding a _t suffix if
+necessary. (doc/News.htm [1.54]: 2000/07/10 23:56:55 lpd)
+ - With some high-level drivers, changing the OutputFile after
+opening the device could cause a crash. After the fix, doing this works
+properly if no pages have actually been written out, but causes a rangecheck
+error if any pages have been written. (This is required to maintain internal
+consistency.) (doc/News.htm [1.55]: 2000/07/12 14:02:03 lpd)
+ - The documented limit on the length of a file name was incorrect.
+(doc/Language.htm [1.9]: 2000/08/03 06:45:25 lpd)
+
+Increments the version number, in preparation for the next fileset.
+(doc/News.htm [1.52]: 2000/07/06 02:45:06 lpd)
+
+Adds a finish_copydevice device procedure, for cleaning up after copying the
+bits of a device prototype or instance. For safety, the default
+implementation only allows copying the prototype, not instances. This is a
+NON-BACKWARD-COMPATIBLE change; however, using copydevice on a device
+instance never worked reliably, so it should not have been used this way
+before. (doc/Drivers.htm [1.4], doc/News.htm [1.53]: 2000/07/06 04:13:24
+lpd)
+
+Updates the references to the Computer Modern Fontmap on CTAN.
+(doc/Fonts.htm [1.5], doc/New-user.htm [1.8]: 2000/07/09 23:29:25 lpd)
+
+Updates a couple of release procedures. (doc/Release.htm [1.15]: 2000/07/10
+19:32:59 lpd)
+
+Adds documentation and a script for preparing GNU releases from Aladdin
+releases. (doc/Release.htm [1.16]: 2000/07/17 17:10:57 lpd)
+
+Clarifies that device parameters set with -d or -s can be changed
+subsequently. (doc/Use.htm [1.8]: 2000/07/17 20:13:03 lpd)
+
+Adds a project for making Ghostscript work as a Netscape browser plug-in.
+(doc/Projects.htm [1.13]: 2000/07/19 22:50:18 lpd)
+
+Removes the SVG driver from the list of projects, since there is a group
+close to completing one (referenced from the Ghostscript home page on the
+Web). (doc/Projects.htm [1.14]: 2000/07/20 14:49:52 lpd)
+
+Directs users to the Ghostscript home page on the Web for information about
+third-party drivers. (doc/New-user.htm [1.9]: 2000/07/20 14:50:34 lpd)
+
+Adds a partially implemented driver that just produces a trace of its
+drawing calls. This driver also serves as a minimal example of how to
+implement the high-level driver operations. (doc/Drivers.htm [1.5]:
+2000/07/29 04:00:00 lpd)
+
+Updates dates and version #s for the 6.23 fileset. (doc/Bug-info.htm [1.4],
+doc/Changes.htm [1.15], doc/Drivers.htm [1.6], doc/Fonts.htm [1.6],
+doc/History5.htm [1.3], doc/Htmstyle.htm [1.4], doc/Install.htm [1.5],
+doc/Language.htm [1.10], doc/New-user.htm [1.10], doc/News.htm [1.56],
+doc/Projects.htm [1.15], doc/Ps2pdf.htm [1.15], doc/Release.htm [1.17],
+doc/Use.htm [1.9], man/ps2ps.1 [1.6]: 2000/08/07 17:48:09 lpd)
+
+</pre><h2><a name="6.23 Procedures"></a>Procedures</h2><pre>
+
+Fixes problems:
+ - $(GLGEN)/md5.h wasn't deleted after compilation. (lib.mak [1.26]:
+2000/07/09 23:19:59 lpd)
+ - TrueType font loading now requires the Adobe glyph list, but this
+dependency was missing from the makefile. (int.mak [1.26]: 2000/07/19
+08:11:15 lpd)
+ - During compilation, GLSRCDIR was searched before GLGENDIR. (We're
+very surprised that this didn't cause detectable trouble before.)
+(lib.mak [1.27]: 2000/07/19 14:32:00 lpd)
+ - The dependency on gsparamx.$(OBJ) was incorrectly attached to
+pdfwrite.dev rather than psdf.dev. (devs.mak [1.30]: 2000/08/03 17:42:52
+lpd)
+ - 'pre' didn't work with dates in August or September (Tcl doesn't
+accept 08 and 09 as valid numbers). (toolbin/pre [1.5]: 2000/08/07 17:35:27
+lpd)
+
+Increments the version number, in preparation for the next fileset.
+(version.mak [1.17]: 2000/07/06 02:45:06 lpd)
+
+Adds some user-contributed comments about using the Canon BJ200 driver with
+the BJ300. (contrib.mak [1.18]: 2000/07/11 15:33:19 lpd)
+
+Updates the (user-contributed) all-architecture build script to work around
+a detail in the SGI IRIX C library header files. (all-arch.mak [1.4]:
+2000/07/15 19:23:45 lpd)
+
+Adds documentation and a script for preparing GNU releases from Aladdin
+releases. (toolbin/makegnu.tcl [1.1]: 2000/07/17 17:10:57 lpd)
+
+Adds a partially implemented driver that just produces a trace of its
+drawing calls. This driver also serves as a minimal example of how to
+implement the high-level driver operations. (lib.mak [1.28]: 2000/07/29
+04:00:00 lpd)
+
+Changes 'gsmake' to report line number rather than character position for
+errors and warnings. (toolbin/gsmake.tcl [1.3]: 2000/08/07 17:22:27 lpd)
+
+Updates dates and version #s for the 6.23 fileset. (version.mak [1.18]:
+2000/08/07 17:48:10 lpd)
+
+Adds some missing dependencies. (int.mak [1.27], lib.mak [1.29]: 2000/08/07
+17:52:22 lpd)
+
+</pre><h2><a name="6.23 Utilities"></a>Utilities</h2><pre>
+
+Fixes problems:
+ - An invalid file name or pattern passed to filenameforall would
+(incorrectly) return an empty string rather than not returning any file
+names at all. (gp_vms.c [1.3]: 2000/07/09 21:09:51 lpd)
+ - Some DOS/Windows script files didn't use 'call', so they would
+terminate execution prematurely if called from another script file.
+(lib/ps2pdf.bat [1.5], lib/ps2pdf12.bat [1.4], lib/ps2pdf13.bat [1.4],
+lib/ps2pdfxx.bat [1.8]: 2000/07/24 15:12:21 lpd)
+
+</pre><h2><a name="6.23 Drivers"></a>Drivers</h2><pre>
+
+Implements finish_copydevice for X windows, to allow copying instances as
+well as the prototype. (gdevx.c [1.4], gdevx.h [1.3], gdevxini.c [1.7]:
+2000/07/06 05:29:46 lpd)
+
+Adds some user-contributed comments about using the Canon BJ200 driver with
+the BJ300. (gdevbj10.c [1.2]: 2000/07/11 15:33:19 lpd)
+
+</pre><h2><a name="6.23 PDF writer"></a>PDF writer</h2><pre>
+
+Fixes problems:
+ - M_2PI was predefined on some systems. (gdevpdfg.c [1.6]:
+2000/07/09 23:11:31 lpd)
+ - The word and character spacing values were not tracked correctly
+when mixing text and graphics, sometimes producing horizontally misplaced
+text. (gdevpdf.c [1.18], gdevpdfg.c [1.7], gdevpdfu.c [1.10],
+gdevpdfx.h [1.19]: 2000/07/11 14:33:54 lpd)
+ - 'show'ing an empty string could cause the next string to be
+positioned incorrectly. (gdevpdft.c [1.14]: 2000/07/27 14:18:11 lpd)
+
+Updates font embedding code to handle CIDFontType 2 fonts. NOT TESTED.
+(gdevpdfe.c [1.3]: 2000/07/27 04:18:13 lpd)
+
+Adds glyphs_used to FontDescriptors and pfd to std_fonts in the device
+structure. WORK IN PROGRESS. (gdevpdf.c [1.19], gdevpdff.c [1.7],
+gdevpdff.h [1.3], gdevpdfx.h [1.20]: 2000/07/27 04:19:24 lpd)
+
+</pre><h2><a name="6.23 Interpreter (PDF)"></a>Interpreter (PDF)</h2><pre>
+
+Fixes problems:
+ - If a badly-constructed PDF file referenced one of the 12 base
+alphabetic fonts explicitly as a TrueType font (e.g., /BaseFont
+/TimesNewRoman /Subtype /TrueType) without embedding it, the substituted
+Type 1 font had the wrong Encoding. (lib/pdf_font.ps [1.10]: 2000/07/10
+13:18:28 lpd)
+ - Piped input beginning with a % caused an ioerror. (bug introduced
+in 6.22) (lib/pdf_main.ps [1.10]: 2000/07/14 05:30:19 lpd)
+ - As a result of some recent changes to fix other problems, setting
+certain text state parameters (Tf, Ts, Tz) outside of text mode (BT/ET)
+caused an error. (lib/pdf_ops.ps [1.6]: 2000/07/19 15:57:54 lpd)
+ - Setting a singular text matrix (e.g., 0 0 0 0 <x> <y> Tm) caused
+an error. (lib/pdf_ops.ps [1.7]: 2000/08/04 16:08:05 lpd)
+
+</pre><h2><a name="6.23 Interpreter"></a>Interpreter</h2><pre>
+
+Fixes problems:
+ - Removes the '?' procedure, which was defined solely for the
+convenience of users who don't read the documentation and which interfered
+with the operation of some code produced by the Adobe PS5 Windows driver.
+(lib/gs_init.ps [1.18]: 2000/07/09 22:34:30 lpd)
+ - A constant 1 should have been 1L, causing a warning on systems
+where sizeof(long) > sizeof(int). (zarith.c [1.3]: 2000/07/09 23:10:58 lpd)
+ - The workaround for attempting to set a 4-element PageSize value in
+a page device sometimes caused an error. (bug introduced in 6.21)
+(lib/gs_setpd.ps [1.4]: 2000/07/10 12:48:54 lpd)
+ - Redefining setcolorspace could cause an infinite recursion.
+(lib/gs_lev2.ps [1.5]: 2000/07/10 13:35:24 lpd)
+ - Local GC in a multi-context system caused a crash. Also updates
+all the internal type names in zcontext.c by adding a _t suffix if
+necessary. (zcontext.c [1.4]: 2000/07/10 23:56:55 lpd)
+ - A garbage collection occurring within a save could cause a memory
+access error. (bug introduced in 6.22) (zcontext.c [1.5]: 2000/07/14
+05:28:56 lpd)
+ - Piped input beginning with a % caused an ioerror. (bug introduced
+in 6.22) (zfileio.c [1.8]: 2000/07/14 05:30:19 lpd)
+ - A garbage collection occurring while scanning a binary token
+sequence could cause a syntaxerror or corrupted data. (iscan.c [1.3]:
+2000/07/18 15:39:02 lpd)
+ - (correction) An interruption (including a callout for a
+procedure-based stream), not a garbage collection, while scanning a binary
+token sequence could cause a syntaxerror or corrupted data. (iscan.c [1.4]:
+2000/07/18 15:41:55 lpd)
+ - When loading a TrueType font, invalid glyph numbers in the 'post'
+table (which appear in some Adobe-created PDF files) caused an error instead
+of being ignored; a test was backwards, causing some embedded TrueType fonts
+in PDF files to produce a rangecheck error. (lib/gs_ttf.ps [1.6]: 2000/07/19
+08:12:41 lpd)
+ - When NOPROMPT was set, no flush or flushpage occurred at the end
+of a page. (fix from an anonymous user on SourceForge)
+(lib/gs_init.ps [1.19]: 2000/07/20 01:40:50 lpd)
+ - Type 1 or Type 2 fonts with invalid LanguageGroup values < 0
+caused an error. (Such fonts are invalid, but some real fonts have garbage
+LanguageGroup values, and Adobe software doesn't give an error.)
+(zfont1.c [1.6]: 2000/07/24 18:08:38 lpd)
+ - Errors while executing gs_init.ps and other PostScript
+initialization files were sometimes ignored, leading to mysterious error
+messages later. (imainarg.c [1.3]: 2000/08/03 06:43:17 lpd)
+ - Showing text with a singular matrix (scaling matrix x CTM) could
+leave extraneous values on the operand stack. (zchar1.c [1.4]: 2000/08/04
+16:09:30 lpd)
+
+Increments the version number, in preparation for the next fileset.
+(lib/gs_init.ps [1.15]: 2000/07/06 02:45:06 lpd)
+
+Redefines [gs_]copydevice in terms of a new gs_copydevice2/.copydevice2,
+which adds a Boolean keep_open argument that requests (but does not
+guarantee) that a copy of an open device remain open.
+(lib/gs_init.ps [1.16], zdevice.c [1.2]: 2000/07/06 03:26:13 lpd)
+
+Adds a finish_copydevice device procedure, for cleaning up after copying the
+bits of a device prototype or instance. For safety, the default
+implementation only allows copying the prototype, not instances. This is a
+NON-BACKWARD-COMPATIBLE change; however, using copydevice on a device
+instance never worked reliably, so it should not have been used this way
+before. (lib/gs_init.ps [1.17]: 2000/07/06 04:13:24 lpd)
+
+Adds the ability to load CIDFont resources from CFF OpenType font files.
+(lib/gs_cff.ps [1.6], lib/gs_cidfn.ps [1.16]: 2000/07/29 05:58:28 lpd)
+
+Ensures that errordict has at least one empty entry, for the sake of some
+astonishingly bad PostScript code that tests for this and has a bug in the
+case where it isn't true. (lib/gs_init.ps [1.20]: 2000/08/04 04:29:45 lpd)
+
+</pre><h2><a name="6.23 Library"></a>Library</h2><pre>
+
+Fixes problems:
+ - Some coordinate computations for Type 1 fonts could lose far too
+much precision if _fixed_shift was reduced. (gscoord.c [1.2],
+gxmatrix.h [1.2]: 2000/07/11 09:25:46 lpd)
+ - If the current color space was DeviceRGB, gs_currentgray returned
+the wrong value. (bug introduced in 6.22) (gscolor.c [1.3]: 2000/07/11
+14:00:09 lpd)
+ - With some high-level drivers, changing the OutputFile after
+opening the device could cause a crash. After the fix, doing this works
+properly if no pages have actually been written out, but causes a rangecheck
+error if any pages have been written. (This is required to maintain internal
+consistency.) (gdevvec.c [1.4]: 2000/07/12 14:02:04 lpd)
+ - A file had accidentally acquired an incorrect license notice.
+(gscoord.c [1.4]: 2000/07/13 02:02:09 lpd)
+ - Type 2 fonts that used the 'hflex' operator could produce
+distorted characters (e.g., slanted bottoms). (gstype2.c [1.4]: 2000/07/13
+02:09:21 lpd)
+ - The use of macros within procedure argument lists confused
+ansi2knr. (gximage3.c [1.5], gximage3.h [1.3]: 2000/07/19 14:30:45 lpd)
+ - Freeing a locking allocator could cause infinite recursion.
+(gsmemlok.c [1.2]: 2000/07/19 21:32:12 lpd)
+ - "Accurate curves" was a no-op for certain cases of horizontal or
+vertical tangents. (gxpcopy.c [1.2]: 2000/08/05 01:04:28 lpd)
+
+Increments the version number, in preparation for the next fileset.
+(gscdef.c [1.5]: 2000/07/06 02:45:06 lpd)
+
+Redefines [gs_]copydevice in terms of a new gs_copydevice2/.copydevice2,
+which adds a Boolean keep_open argument that requests (but does not
+guarantee) that a copy of an open device remain open. (gsdevice.c [1.5],
+gsdevice.h [1.2]: 2000/07/06 03:26:13 lpd)
+
+Adds a finish_copydevice device procedure, for cleaning up after copying the
+bits of a device prototype or instance. For safety, the default
+implementation only allows copying the prototype, not instances. This is a
+NON-BACKWARD-COMPATIBLE change; however, using copydevice on a device
+instance never worked reliably, so it should not have been used this way
+before. (gdevbbox.c [1.2], gdevdflt.c [1.2], gdevht.c [1.2],
+gdevmem.h [1.2], gdevnfwd.c [1.2], gdevprn.h [1.5], gdevrops.c [1.2],
+gsdevice.c [1.6], gxacpath.c [1.2], gxclip.c [1.2], gxclip2.c [1.2],
+gxclipm.c [1.2], gxclist.c [1.2], gxdevcli.h [1.2], gxdevice.h [1.3],
+gxpcmap.c [1.2]: 2000/07/06 04:13:24 lpd)
+
+Adds a little more tracing output for images. (gxidata.c [1.3]: 2000/07/09
+21:04:25 lpd)
+
+Adds _simple_final structure type definition macros. (gsstruct.h [1.3]:
+2000/07/10 15:43:30 lpd)
+
+Removes a structure member no longer needed after a recent fix.
+(gscoord.c [1.3], gxmatrix.h [1.3]: 2000/07/12 04:49:43 lpd)
+
+Adds the ability to write subsetted CIDFontType 2 (TrueType-based) fonts.
+(gdevpsf.h [1.6], gdevpsft.c [1.2], gdevpsfu.c [1.3], gxfcid.h [1.5]:
+2000/07/21 01:09:16 lpd)
+
+Adds a partially implemented driver that just produces a trace of its
+drawing calls. This driver also serves as a minimal example of how to
+implement the high-level driver operations. (gdevtrac.c [1.1]: 2000/07/29
+04:00:00 lpd)
+
+Improves the smoothness of ShadingType 4 - 7 gradient fills.
+(gxshade4.c [1.2], gxshade6.c [1.2]: 2000/08/03 20:47:48 lpd)
+
+Updates dates and version #s for the 6.23 fileset. (gscdef.c [1.6]:
+2000/08/07 17:48:10 lpd)
+
+<hr>
+
+<h1><a name="Version6.22"></a>Version 6.22 (2000-07-05)</h1>
+
+<p>
+This fileset consists mostly of bug fixes. It also further improves the PDF
+writer, which now handles ImageType 3 images and PatternType 2 (shading)
+patterns.
+
+<p>
+All problems registered on SourceForge numbered 108819 or lower are closed,
+except for the following: 101549, 101814, 101905, 101955, 102146, 102735,
+104118, 105289, 105558, 106340, 106652, 108639.
+
+<p>
+The following projects are in a partially completed state in the PDF writer:
+
+<ul>
+
+<li>CID-keyed fonts (gdevpdf[eftw].c) -- barely started.
+
+</ul>
+
+<pre>
+
+<h2><a name="6.22_Incompatible_changes"></a>Incompatible changes</h2>
+
+(Procedures)
+ - Versions now have odd numbers during development, even numbers
+when released.
+ - The TMPDIR environment variable, if set, now takes precedence
+over TEMP.
+ - On MS-DOS, MS Windows, and OS/2 platforms, the batch files that
+invoke Ghostscript now use a default name of gswin32 or gswin32c rather than
+simply gs.
+(Drivers)
+ - The PCL drivers now select a given paper size if the requested
+height is at least 0.1" greater than the height of the next smaller paper
+size, rather than if the requested height is at least as large as that of
+the given paper size.
+(Interpreter)
+ - user_names_p and system_names_p may now be NULL: clients must
+check this.
+ - scan_comment_proc and scan_dsc_proc are now deprecated, and will
+disappear in the near future.
+ - The values in psuserparams are now checking procedures rather
+than parameter values.
+ - Comments beginning with %! are treated as "DSC comments", like
+comments beginning with %%.
+(Library)
+ - The macro for declaring the fill_rectangle procedure of a shading
+is now upper-case. The fill_rectangle procedure is now a member of a procs
+structure; there is a new macro for calling it.
+ - The parameter list and return value for gs_currentgray have
+changed. This is very unfortunate, but it was unavoidable.
+
+
+<h2><a name="6.22 Documentation"></a>Documentation</h2><pre>
+
+Fixes problems:
+ - The batch files for MS-DOS, MS Windows, and OS/2 referred to the
+executable by the name 'gs'. They now use environment variables GS
+(graphical) and GSC (console) for the executable names, defaulting to
+gswin32 and gswin32c respectively. (doc/News.htm [1.45], doc/Use.htm [1.6]:
+2000/05/20 20:53:04 lpd)
+ - The -dCompatibilityLevel= switch was incorrectly identified in one
+place as -dCompatibility=. (doc/Ps2pdf.htm [1.11]: 2000/05/22 21:29:45 lpd)
+ - [gs_]currentgray didn't return the correct value if the current
+color space was a DeviceN space using the alternate space.
+(doc/News.htm [1.49]: 2000/07/03 15:28:26 lpd)
+ - Fixes a couple of typos. (doc/Release.htm [1.12]: 2000/07/04
+19:19:38 lpd)
+ - The "smoke test" procedure for fileset releases didn't stress the
+banding code nearly as hard as intended. (doc/Release.htm [1.13]: 2000/07/05
+04:50:13 lpd)
+
+Adds predefined pdfwrite settings similar to the three standard settings in
+Adobe Acrobat Distiller 4, plus a "default" setting, with
+-dPDFSETTINGS=/settingname. (doc/Ps2pdf.htm [1.10]: 2000/04/29 02:29:20 lpd)
+
+Increments the version number to 6.23. From now on, we use odd numbers
+during development, even numbers for released filesets.
+(doc/Changes.htm [1.12], doc/History6.htm [1.7], doc/News.htm [1.40],
+doc/Release.htm [1.11]: 2000/04/29 16:49:43 lpd)
+
+Implements ImageType 3 images in the PDF writer. (doc/News.htm [1.41]:
+2000/04/30 06:21:58 lpd)
+
+Creates a procs structure for shadings, moving the fill_rectangle procedure
+into it, in anticipation of adding a get_params procedure.
+(doc/News.htm [1.42]: 2000/04/30 19:37:37 lpd)
+
+Implements PatternType 2 patterns and shfill in the PDF writer.
+(doc/News.htm [1.43]: 2000/05/02 07:14:58 lpd)
+
+Adds a reference to Karel Kulhavy's pdf2html program.
+(doc/New-user.htm [1.6]: 2000/05/04 21:16:44 lpd)
+
+Adds a small project to remove the limit on the length of the OutputFile
+parameter for printer drivers. (doc/Projects.htm [1.9]: 2000/05/06 00:32:08
+lpd)
+
+Documents the addition of TMPDIR for specifying the directory for temporary
+files. (doc/News.htm [1.44], doc/Use.htm [1.5]: 2000/05/19 17:59:28 lpd)
+
+Adds (more) user-contributed uniprint parameter files for the Epson Stylus
+Color 640. (doc/Devices.htm [1.8]: 2000/05/23 18:58:56 lpd)
+
+Adds implementation of the %font% IODevice to the list of projects.
+(doc/Projects.htm [1.10]: 2000/05/24 23:30:15 lpd)
+
+Documents the change in the paper size selection for PCL drivers.
+(doc/News.htm [1.46]: 2000/05/30 03:26:15 lpd)
+
+Adds glyph decaching notification to the list of projects.
+(doc/Projects.htm [1.11]: 2000/05/30 05:54:23 lpd)
+
+Documents that user_names_p and system_names_p may now be NULL.
+(doc/News.htm [1.47]: 2000/06/05 01:26:05 lpd)
+
+Adds the ability to write multi-strip monochrome TIFF files, controlled by a
+new MaxStripSize parameter for the monochrome TIFF drivers.
+(doc/Devices.htm [1.9]: 2000/06/05 05:41:55 lpd)
+
+Updates the open ICC color support project to reference Graeme Gill's icclib
+package. (doc/Projects.htm [1.12]: 2000/06/08 02:55:37 lpd)
+
+Adds an umbrella document for maintenance procedures, initially describing
+the procedure for uploading bug report test data to SourceForge.
+(doc/Maintain.htm [1.1], doc/Readme.htm [1.8]: 2000/06/13 20:27:26 lpd)
+
+Updates documentation to reflect the use of the GSC environment variable to
+set the name of the executable for ps2pdf. (doc/Ps2pdf.htm [1.12]:
+2000/06/21 17:10:41 lpd)
+
+Updates documentation on the ProcessColorModel and ColorConversionStrategy
+parameters. (doc/Ps2pdf.htm [1.13]: 2000/06/21 18:06:07 lpd)
+
+Adds user parameters ProcessComment and ProcessDSCComment. If not null,
+these procedures are called with the file and the comment line whenever the
+scanner detects a comment (or non-DSC comment) or DSC comment. NOTE: the
+interpreter is currently patched so that ProcessComment is never called.
+(doc/Language.htm [1.4], doc/News.htm [1.48]: 2000/06/27 00:53:38 lpd)
+
+Adds a reference to a user-maintained Czech translation of the Ghostscript
+'man' pages. (doc/Readme.htm [1.9]: 2000/06/27 14:03:29 lpd)
+
+Brings the language documentation (more) up to date.
+(doc/Language.htm [1.5]: 2000/06/29 16:00:48 lpd)
+
+Improves the documentation of copydevice regarding where it allocates the
+copy, and documents finddevice. (doc/Drivers.htm [1.2],
+doc/Language.htm [1.6]: 2000/06/30 00:09:15 lpd)
+
+Adds a findprotodevice "operator", to find a device prototype by name.
+(doc/Language.htm [1.7]: 2000/07/05 04:49:11 lpd)
+
+Changes the version numbering system back to sequential (not odd/even).
+Between numbered filesets, GS_PRODUCT will say "CVS PRE-RELEASE".
+(doc/History6.htm [1.8], doc/News.htm [1.50]: 2000/07/05 17:23:54 lpd)
+
+Updates documentation related to version numbering, reflecting the move back
+to sequential numbering. (doc/Maintain.htm [1.2], doc/Release.htm [1.14]:
+2000/07/05 18:27:50 lpd)
+
+Updates documentation dates for making a fileset. (doc/Changes.htm [1.13],
+doc/Devices.htm [1.10], doc/Drivers.htm [1.3], doc/History6.htm [1.9],
+doc/Language.htm [1.8], doc/New-user.htm [1.7], doc/News.htm [1.51],
+doc/Ps2pdf.htm [1.14], doc/Readme.htm [1.10], doc/Use.htm [1.7]: 2000/07/06
+00:01:39 lpd)
+
+</pre><h2><a name="6.22 Procedures"></a>Procedures</h2><pre>
+
+Fixes problems:
+ - The rule for the recently-added gdevhl12 driver omitted the space
+before the colon. (contrib.mak [1.12]: 2000/05/02 01:42:12 lpd)
+ - Once again, corrects an incorrect dependency list.
+(lib.mak [1.19]: 2000/05/02 07:14:11 lpd)
+ - smd5.c didn't compile properly with "traditional C" compilers.
+(lib.mak [1.20]: 2000/05/19 06:08:01 lpd)
+ - Temporary files weren't created as private or exclusive.
+(lib.mak [1.21], os2.mak [1.6], watc.mak [1.4], watclib.mak [1.4],
+winlib.mak [1.3]: 2000/05/19 17:52:51 lpd)
+ - The definitions of user names weren't properly associated with
+local VM (they were stored in a static variable). (int.mak [1.22]:
+2000/05/26 02:27:58 lpd)
+ - 'make install' on Unix systems didn't install pdfopt.ps and
+pdfwrite.ps. (unixinst.mak [1.11]: 2000/05/30 23:07:34 lpd)
+ - The dependency list for the new Epson Stylus Photo driver was
+wrong, causing build problems if this driver was included.
+(contrib.mak [1.13]: 2000/06/01 20:25:39 lpd)
+ - The change to implement stripped TIFF files broke non-TIFF fax
+output formats (faxg* drivers). Also factors plain-fax writing from TIFF
+writing. (devs.mak [1.26]: 2000/06/06 06:37:37 lpd)
+ - Corrects a typo introduced by recent changes. (msvctail.mak [1.3]:
+2000/06/07 06:36:54 lpd)
+ - Rendering TrueType fonts didn't adjust the flatness to ensure
+accurate results. (lib.mak [1.23]: 2000/06/20 15:46:53 lpd)
+ - The makefile missed a dependency (CIDFontType 0 fonts require
+FontType 2 fonts). (int.mak [1.23]: 2000/06/27 17:23:13 lpd)
+ - The makefiles didn't include the requirement that gs_mro_e.ps be
+loaded before gs_mgl_e.ps. (devs.mak [1.28], int.mak [1.24]: 2000/06/27
+17:36:42 lpd)
+ - A dependency was missing. (lib.mak [1.24]: 2000/07/04 19:05:12
+lpd)
+ - Fixes a typo; reduces the number of false warnings for
+documentation date mismatches. (toolbin/pre [1.4]: 2000/07/04 19:19:17 lpd)
+ - Fixes a typo. (contrib.mak [1.16]: 2000/07/04 22:30:10 lpd)
+ - Adds a missing dependency. (devs.mak [1.29]: 2000/07/04 22:30:33
+lpd)
+ - Adds a missing dependency. (contrib.mak [1.17]: 2000/07/06
+00:00:13 lpd)
+
+Increments the version number to 6.23. From now on, we use odd numbers
+during development, even numbers for released filesets. (version.mak [1.15]:
+2000/04/29 16:49:43 lpd)
+
+Restructures the code for handling ImageType 3 images, for the benefit of
+the PDF writer. (lib.mak [1.18]: 2000/04/30 03:08:15 lpd)
+
+Implements ImageType 3 images in the PDF writer. (devs.mak [1.23]:
+2000/04/30 06:21:58 lpd)
+
+Implements PatternType 2 patterns and shfill in the PDF writer.
+(devs.mak [1.24]: 2000/05/02 07:14:58 lpd)
+
+Adds the first draft of a driver for the Practical Automation ATX-23, -24,
+and -38 label/ticket printers, developed under contract. This has a dual
+GPL/AFPL license. (devs.mak [1.25]: 2000/05/03 20:30:06 lpd)
+
+Works around the fact that Microsoft Visual C++ (only) doesn't define the O_
+flags for the `open' library call. (lib.mak [1.22]: 2000/05/31 20:34:43 lpd)
+
+Makes it possible to build on MSVC++ systems without specifying the paths
+for the tools, headers, or libraries. See msvc{32,lib}.mak for details.
+(msvc32.mak [1.4], msvccmd.mak [1.4], msvclib.mak [1.4], msvctail.mak [1.2],
+winint.mak [1.4]: 2000/06/05 02:46:07 lpd)
+
+Adds a user-contributed driver for SFF (the file format for CAPI fax
+devices). (contrib.mak [1.14]: 2000/06/06 06:38:31 lpd)
+
+Notes that the vgalib driver only suppotrs 16-color modes. (devs.mak [1.27]:
+2000/06/06 15:28:01 lpd)
+
+Removes an obsolete file. (toolbin/package.tcl [1.2]: 2000/06/06 18:05:32
+lpd)
+
+Documents the fact that the IJG JPEG library header files must be available
+when compiling, even if SHARE_JPEG=1. (dvx-gcc.mak [1.3], jpeg.mak [1.2],
+unix-gcc.mak [1.6], unixansi.mak [1.4], unixtrad.mak [1.4]: 2000/06/07
+13:32:44 lpd)
+
+Finishes implementing the Process[DSC]Comment callout. (int.mak [1.25]:
+2000/06/28 20:17:00 lpd)
+
+Removes some third-party drivers with incompatible licenses.
+(contrib.mak [1.15]: 2000/07/02 22:11:31 lpd)
+
+Finishes working around the fact that Microsoft C, in defiance of multiple
+standards, by default doesn't define the O_ flags for 'open' in fcntl.h (or
+anywhere else). (lib.mak [1.25]: 2000/07/05 00:48:21 lpd)
+
+Changes the version numbering system back to sequential (not odd/even).
+Between numbered filesets, GS_PRODUCT will say "CVS PRE-RELEASE".
+(version.mak [1.16]: 2000/07/05 17:23:54 lpd)
+
+</pre><h2><a name="6.22 Utilities"></a>Utilities</h2><pre>
+
+Fixes problems:
+ - Fixes a couple of minor Windows NT compatibility problems in
+script files. (lib/ps2pdf.bat [1.3], lib/ps2pdfxx.bat [1.5]: 2000/05/05
+03:21:03 lpd)
+ - Temporary files weren't created as private or exclusive.
+(gp_iwatc.c [1.3], gp_mswin.c [1.2], gp_os2.c [1.3]: 2000/05/19 17:52:51
+lpd)
+ - gsdll_init didn't propagate an error return from
+gs_main_init_with_args, causing clients to think Ghostscript was initialized
+properly when it wasn't. (gsdll.c [1.2]: 2000/05/20 14:39:42 lpd)
+ - The batch files for MS-DOS, MS Windows, and OS/2 referred to the
+executable by the name 'gs'. They now use environment variables GS
+(graphical) and GSC (console) for the executable names, defaulting to
+gswin32 and gswin32c respectively. (lib/bdftops.bat [1.2],
+lib/eps2eps.bat [1.3], lib/font2c.bat [1.2], lib/gsbj.bat [1.2],
+lib/gsdj.bat [1.2], lib/gsdj500.bat [1.2], lib/gslj.bat [1.2],
+lib/gslp.bat [1.2], lib/gsnd.bat [1.2], lib/gsndt.bat [1.2],
+lib/gssetgs.bat [1.1], lib/gst.bat [1.2], lib/gstt.bat [1.2],
+lib/lpgs.bat [1.2], lib/lpr2.bat [1.2], lib/pdf2ps.bat [1.3],
+lib/pdfopt.bat [1.2], lib/pftogsf.bat [1.2], lib/ps2ascii.bat [1.3],
+lib/ps2epsi.bat [1.3], lib/ps2pdfxx.bat [1.7], lib/ps2ps.bat [1.3]:
+2000/05/20 20:53:05 lpd)
+ - The ps2pdf.bat script didn't set the default PDF level, so it
+normally produced PDF 1.3 rather than 1.2, which was contrary to the
+documentation and different from the Unix ps2pdf script.
+(lib/ps2pdf.bat [1.4]: 2000/06/08 02:33:09 lpd)
+
+Adds a user-contributed program for displaying the differences between two
+AFM (font metric) files. This has a dual AFPL/GPL copyright.
+(lib/afmdiff.awk [1.1]: 2000/04/29 20:51:41 lpd)
+
+Removes an out-of-date e-mail address. (lib/ps2pdfxx.bat [1.4]: 2000/05/04
+16:40:08 lpd)
+
+Adds -dSAFER to all the format conversion scripts in which the input is
+executed as PostScript or PDF code. (lib/eps2eps [1.2],
+lib/eps2eps.bat [1.2], lib/pdf2dsc [1.2], lib/pdf2ps [1.3],
+lib/pdf2ps.bat [1.2], lib/ps2ascii [1.2], lib/ps2ascii.bat [1.2],
+lib/ps2epsi [1.3], lib/ps2epsi.bat [1.2], lib/ps2pdfwr [1.5],
+lib/ps2pdfxx.bat [1.6], lib/ps2ps [1.2], lib/ps2ps.bat [1.2]: 2000/05/19
+06:38:25 lpd)
+
+Adds -dSAFER to one more script. (lib/pdfopt [1.2]: 2000/05/30 05:28:22 lpd)
+
+Refactors some PDF-writing code for use in a PDF decompressor.
+(lib/pdfwrite.ps [1.2]: 2000/06/27 17:06:32 lpd)
+
+Adds a number of (user-maintained) command files for OS/2.
+(lib/bdftops.cmd [1.1], lib/eps2eps.cmd [1.1], lib/font2c.cmd [1.1],
+lib/pdf2ps.cmd [1.1], lib/pf2afm.cmd [1.1], lib/ps2ascii.cmd [1.1],
+lib/ps2epsi.cmd [1.1], lib/ps2pdf.cmd [1.1], lib/ps2pdf12.cmd [1.1],
+lib/ps2pdf13.cmd [1.1], lib/ps2ps.cmd [1.1]: 2000/07/05 16:21:13 lpd)
+
+</pre><h2><a name="6.22 Drivers"></a>Drivers</h2><pre>
+
+Fixes problems:
+ - The "compressed data" command encoding was wrong in one place in
+the documentation, and the code used the incorrect encoding.
+(gdevatx.c [1.2]: 2000/05/06 00:31:25 lpd)
+ - If a file made no marks at all, ps2[e]ps produced bad output.
+(gdevps.c [1.8]: 2000/05/07 15:38:27 lpd)
+ - Returning an image compression parameter dictionary didn't close
+an enumeration, failing to free a bookkeeping structure. (gdevpsdp.c [1.5]:
+2000/05/11 16:13:16 lpd)
+ - The epswrite driver could produce output that used initclip, which
+is not allowed in EPS files. (gdevps.c [1.9]: 2000/05/20 06:36:30 lpd)
+ - The change to implement stripped TIFF files broke non-TIFF fax
+output formats (faxg* drivers). Also factors plain-fax writing from TIFF
+writing. (gdevfax.c [1.1], gdevfax.h [1.1], gdevtfax.c [1.3],
+gdevtfax.h [1.3]: 2000/06/06 06:37:37 lpd)
+ - In the X driver, resetting MaxBitmap didn't have the proper
+effect, and could cause a crash. (This is probably only a partial fix.)
+(gdevxini.c [1.4]: 2000/06/12 01:52:16 lpd)
+ - Finishes fixing the handling of MaxBitmap in the X driver.
+(gdevxini.c [1.5]: 2000/06/12 02:45:25 lpd)
+ - In the ATX drivers, the word count for compressed scan lines was
+written as 2 bytes rather than 1; the drivers wouldn't accept a page width
+greater than 2400 pixels. (gdevatx.c [1.4]: 2000/06/12 04:39:48 lpd)
+ - Works around a bug in the MSVC++ 5.0 compiler that treats (int <<
+unsigned) as unsigned rather than int. (gdevcd8.c [1.2], gdevcdj.c [1.2],
+gdevdj9.c [1.3]: 2000/06/20 14:21:34 lpd)
+ - Uncolored Patterns used with a gray color produced incorrect PDF
+output. (Bug introduced in 6.2x.) (gdevpsdu.c [1.5]: 2000/06/28 05:13:19
+lpd)
+ - Moves an assignment to eliminate a bogus warning from some picky
+compilers about a variable supposedly clobbered by longjmp.
+(gdevpng.c [1.2]: 2000/07/03 21:10:33 lpd)
+ - Two values were computed and not used. (gdevpx.c [1.3]: 2000/07/03
+21:30:41 lpd)
+ - [e]pswrite didn't guarantee a maximum line length of 255
+characters, and didn't mark binary data with %%BeginData:/%%EndData.
+(gdevps.c [1.10]: 2000/07/04 18:34:38 lpd)
+ - Fixes references to undeclared functions. (gdevdfax.c [1.2],
+gdevl256.c [1.2]: 2000/07/04 22:25:08 lpd)
+ - X Windows platform fonts were broken when using multiple device
+instances (windows). (gdevxxf.c [1.4]: 2000/07/05 18:20:41 lpd)
+
+Improves the test for whether compressing an image is worthwhile.
+(gdevpsdi.c [1.11]: 2000/04/30 01:26:41 lpd)
+
+When printing color values derived from 8-bit fields, rounds the output to 3
+decimal places for compactness with no loss of precision. (gdevpsdu.c [1.4]:
+2000/04/30 19:24:28 lpd)
+
+Adds the first draft of a driver for the Practical Automation ATX-23, -24,
+and -38 label/ticket printers, developed under contract. This has a dual
+GPL/AFPL license. (gdevatx.c [1.1]: 2000/05/03 20:30:06 lpd)
+
+Updates the ATX printer drivers to handle the unprintable margins.
+(gdevatx.c [1.3]: 2000/05/19 05:48:30 lpd)
+
+Adds (more) user-contributed uniprint parameter files for the Epson Stylus
+Color 640. (lib/st640ih.upp [1.1], lib/st640ihg.upp [1.1],
+lib/st640p.upp [1.1], lib/st640pg.upp [1.1], lib/st640pl.upp [1.1],
+lib/st640plg.upp [1.1]: 2000/05/23 18:58:56 lpd)
+
+Adds support for 11x17 paper in PCL printers; changes the paper size tests
+so that paper size N+1 is selected if the requested height is at least 0.1"
+greater than the height of paper size N. (gdevpcl.c [1.2], gdevpcl.h [1.2]:
+2000/05/30 03:24:17 lpd)
+
+Adds comments about H-P's inconsistent use of different names and size codes
+for the 11x17 paper size. (gdevpcl.c [1.3], gdevpcl.h [1.3]: 2000/05/30
+20:45:45 lpd)
+
+Adds the ability to write multi-strip monochrome TIFF files, controlled by a
+new MaxStripSize parameter for the monochrome TIFF drivers.
+(gdevtfax.c [1.2], gdevtfax.h [1.2], gdevtfnx.c [1.2], gdevtifs.c [1.2],
+gdevtifs.h [1.2]: 2000/06/05 05:41:55 lpd)
+
+Adds a user-contributed driver for SFF (the file format for CAPI fax
+devices). (gdevcfax.c [1.1]: 2000/06/06 06:38:31 lpd)
+
+Notes that the vgalib driver only suppotrs 16-color modes.
+(gdevvglb.c [1.2]: 2000/06/06 15:28:01 lpd)
+
+Adds some code contributed by Leon Bottou <leonb@research.att.com> that
+makes the X driver prefer TrueColor visuals. We aren't sure of the
+ramifications of this.... (gdevxini.c [1.6]: 2000/06/12 04:41:15 lpd)
+
+Updates the ATX driver(s) to enforce maximum page width and minimum page
+length. (gdevatx.c [1.5]: 2000/06/22 14:55:53 lpd)
+
+Removes some third-party drivers with incompatible licenses.
+(gdevcd8.c [1.3], gdevdj9.c [1.4], gdevhl12.c [1.2]: 2000/07/02 22:11:31
+lpd)
+
+Per user request, changes the license on the basic monochrome
+DeskJet/LaserJet drivers from AFPL to dual AFPL/GPL. (gdevdjet.c [1.5],
+gdevdljm.c [1.3], gdevdljm.h [1.3]: 2000/07/05 17:36:14 lpd)
+
+</pre><h2><a name="6.22 PDF writer"></a>PDF writer</h2><pre>
+
+Fixes problems:
+ - A "0 ||" was omitted, potentially causing some kinds of errors
+that never happen in practice to be overlooked. (gdevpdfi.c [1.17]:
+2000/05/02 01:55:10 lpd)
+ - Fixes minor syntactic incompatibilities with "traditional C"
+compilers. (gdevpdfg.c [1.5]: 2000/05/11 16:14:51 lpd)
+ - The PDF writer could still produce coordinates for paths that
+exceeded Acrobat Reader's user-coordinate limit of +/- 32K.
+(gdevpdfd.c [1.9]: 2000/05/23 21:05:00 lpd)
+ - In PDF 1.2 output, several synthesized Type 3 fonts could have the
+same name, producing errors and/or incorrect output. (bug introduced since
+6.01) (gdevpdf.c [1.17], gdevpdft.c [1.11], gdevpdfx.h [1.18]: 2000/05/24
+20:39:30 lpd)
+ - The FontDescriptor flags for non-embedded alphabetic fonts with
+non-Standard encodings incorrectly identified the font as a small-caps font.
+(gdevpdff.c [1.6]: 2000/05/30 23:04:23 lpd)
+ - Works around the fact that Acrobat Reader won't accept /MMType1
+fonts, but will accept MM Type 1 instances if they're tagged as /Type1
+rather than /MMType1. (gdevpdft.c [1.12], gdevpdfw.c [1.4]: 2000/06/12
+18:13:51 lpd)
+ - Embedded Type 1 (but not Type 2 / 1C) fonts were written without
+eexec encryption. We can't figure out how this happened, because the PDF
+spec requires eexec encryption and the correct code was commented out; we
+suppose this was a debugging or testing modification that got left in. (bug
+introduced since 6.01) (gdevpdfe.c [1.2]: 2000/06/12 18:15:20 lpd)
+ - Text in Type 3 synthesized fonts was often positioned incorrectly,
+usually too far to the left. (bug introduced since 6.01) (gdevpdft.c [1.13]:
+2000/06/13 16:34:42 lpd)
+ - Images that ended prematurely still (again?) weren't written
+correctly. (gdevpdfj.c [1.4]: 2000/06/27 06:32:03 lpd)
+
+Implements ImageType 3 images in the PDF writer. (gdevpdfb.c [1.1],
+gdevpdfg.h [1.6], gdevpdfi.c [1.16], gdevpdfj.c [1.3], gdevpdfx.h [1.16]:
+2000/04/30 06:21:58 lpd)
+
+Implements PatternType 2 patterns and shfill in the PDF writer.
+(gdevpdfc.c [1.11], gdevpdfg.h [1.7], gdevpdfo.c [1.3], gdevpdfo.h [1.3],
+gdevpdfv.c [1.1], gdevpdfx.h [1.17]: 2000/05/02 07:14:58 lpd)
+
+</pre><h2><a name="6.22 Interpreter (PDF)"></a>Interpreter (PDF)</h2><pre>
+
+Fixes problems:
+ - PatternType 2 (shaded) Patterns caused errors.
+(lib/pdf_draw.ps [1.14]: 2000/05/02 07:03:09 lpd)
+ - -q (-dQUIET) didn't suppress all warnings from the PDF
+interpreter. (lib/pdf_base.ps [1.8]: 2000/05/07 15:51:18 lpd)
+ - FunctionType 3 functions with indirect /Bounds or /Encode entries
+caused a typecheck error. (lib/pdf_draw.ps [1.15]: 2000/06/07 19:08:00 lpd)
+ - If the TR element of an ExtGState was an array of Functions (for
+setcolortransfer) rather a single Function (for settransfer), an error
+occurred. (fix from Artifex) (lib/pdf_draw.ps [1.16]: 2000/06/12 00:40:45
+lpd)
+ - The code for keeping the Install procedure from getting more and
+more deeply nested didn't actually work, and also caused pages with a
+non-zero MediaBox offset to be translated incorrectly.
+(lib/pdf_main.ps [1.8]: 2000/06/12 19:17:03 lpd)
+ - PDF files with embedded TrueType fonts didn't map characters to
+glyph indices correctly (i.e., using the same algorithm as Acrobat Reader).
+(lib/pdf_font.ps [1.8]: 2000/06/21 02:15:01 lpd)
+ - The built-in Identity CMaps had an incorrect entry count for
+begincodespacerange and begincidrange; these CMaps, and all Type 0 fonts,
+were constructed in a way that was incompatible with some old Adobe font
+loading software. (lib/pdf_font.ps [1.9]: 2000/06/28 01:36:30 lpd)
+ - If PDF interpretation was included in the build, the very first
+line of a non-PDF file wouldn't be processed (if applicable) as a comment.
+(lib/pdf_main.ps [1.9]: 2000/06/29 15:55:13 lpd)
+
+</pre><h2><a name="6.22 Interpreter"></a>Interpreter</h2><pre>
+
+Fixes problems:
+ - localfork didn't properly initialize userdict in the new context.
+(lib/gs_dps.ps [1.2]: 2000/05/01 07:20:37 lpd)
+ - A null Pattern color caused an error. (zcolor2.c [1.2]: 2000/05/01
+15:15:06 lpd)
+ - Fixes minor syntactic incompatibilities with "traditional C"
+compilers. (zbfont.c [1.5], zfcid0.c [1.3]: 2000/05/11 16:14:51 lpd)
+ - The 'monitor' operator was broken (probably had never been
+tried!). (zcontext.c [1.2]: 2000/05/15 19:14:25 lpd)
+ - -dSTRICT caused an error, /undefined in SIZES.
+(lib/gs_statd.ps [1.3]: 2000/05/17 19:17:40 lpd)
+ - CFF CID fonts in which the FDSelect array occurred before the
+CharStrings caused an error. (lib/gs_cff.ps [1.5]: 2000/05/17 20:39:20 lpd)
+ - dict_matrix3_param didn't work correctly on platforms where the
+compiler aligned structures to a boundary larger than sizeof(float), causing
+incorrect output or arithmetic exceptions for CIE color spaces.
+(zcie.c [1.2]: 2000/05/18 19:02:25 lpd)
+ - Flushing or closing a procedure-based output stream still wasn't
+implemented correctly (it could cause an endless loop). (zfproc.c [1.3]:
+2000/05/19 19:35:01 lpd)
+ - 'monitor' left its operand on the stack. (zcontext.c [1.3]:
+2000/05/22 21:15:23 lpd)
+ - The definitions of user names weren't properly associated with
+local VM (they were stored in a static variable). (btoken.h [1.2],
+iref.h [1.2], iscanbin.c [1.3], zbseq.c [1.2], zdps.c [1.2]: 2000/05/26
+02:27:58 lpd)
+ - Invoking an image operator with an empty string data source caused
+an infinite loop. (zimage.c [1.4]: 2000/05/30 03:43:19 lpd)
+ - The fix for associating the user name array with local VM didn't
+create the user name table properly for new contexts with their own local
+VM. The user name array is now created lazily. (btoken.h [1.3],
+iscanbin.c [1.4], zbseq.c [1.3], zdps.c [1.3]: 2000/05/30 04:38:26 lpd)
+ - As a result of the fix removing the incorrect same-local-VM check
+in context_state_load, userparams wasn't updated properly when switching
+contexts. (icontext.c [1.3]: 2000/05/30 20:40:17 lpd)
+ - MAX_HALF_INTVAL was defined incorrectly, causing the mul operator
+to run slower than necessary when multiplying two small integers.
+(zarith.c [1.2]: 2000/06/04 17:00:29 lpd)
+ - Shadings with an array of Functions caused a rangecheck or
+typecheck error. (zshade.c [1.2]: 2000/06/04 18:26:17 lpd)
+ - If the new value of a device parameter was an array with some
+integers and some reals, and the first element was a real, a typecheck error
+would occur. (iparam.c [1.4]: 2000/06/19 22:22:51 lpd)
+ - PDF files with embedded TrueType fonts didn't map characters to
+glyph indices correctly (i.e., using the same algorithm as Acrobat Reader).
+(lib/gs_agl.ps [1.1], lib/gs_ttf.ps [1.5]: 2000/06/21 02:15:01 lpd)
+ - The dictionary used to hold Encodings wasn't large enough.
+(lib/gs_init.ps [1.10]: 2000/06/27 17:55:05 lpd)
+ - The change in parameter type checking required for the new
+Process[DSC]Comment user parameters broke type checking for system
+parameters. (lib/gs_lev2.ps [1.4]: 2000/06/27 17:56:04 lpd)
+ - Calling out to process a comment during scanning left an extra
+element on the operand stack if the comment appeared within { }.
+(ztoken.c [1.3]: 2000/06/28 00:47:05 lpd)
+ - In some cases, two successive DSC comments produced a syntaxerror.
+(ztoken.c [1.4]: 2000/06/28 05:14:17 lpd)
+ - The code for registering compiled fonts was sensitive to its
+position in the order of loading the initialization files (caused an error
+if loaded too early). (lib/gs_ccfnt.ps [1.3]: 2000/06/29 23:31:14 lpd)
+ - [gs_]currentgray didn't return the correct value if the current
+color space was a DeviceN space using the alternate space. (zcolor.c [1.3],
+zcolor1.c [1.2]: 2000/07/03 15:28:26 lpd)
+
+Adds predefined pdfwrite settings similar to the three standard settings in
+Adobe Acrobat Distiller 4, plus a "default" setting, with
+-dPDFSETTINGS=/settingname. (lib/gs_pdfwr.ps [1.4]: 2000/04/29 02:29:21 lpd)
+
+Increments the version number to 6.23. From now on, we use odd numbers
+during development, even numbers for released filesets.
+(lib/gs_init.ps [1.8]: 2000/04/29 16:49:43 lpd)
+
+Changes .buildfont1 to accept Type 1 fonts with LanguageGroup other than 0
+or 1. This is contrary to the spec, but we've seen a few fonts with other
+values. (zfont1.c [1.5]: 2000/05/06 08:19:37 lpd)
+
+Cleans up code and comments slightly. (lib/gs_dps.ps [1.3]: 2000/05/30
+20:35:56 lpd)
+
+Adds user parameters ProcessComment and ProcessDSCComment. If not null,
+these procedures are called with the file and the comment line whenever the
+scanner detects a comment (or non-DSC comment) or DSC comment. NOTE: the
+interpreter is currently patched so that ProcessComment is never called.
+(interp.c [1.4], iscan.c [1.2], iscan.h [1.2], lib/gs_init.ps [1.9],
+lib/gs_lev2.ps [1.3], ztoken.c [1.2], ztype.c [1.2]: 2000/06/27 00:53:38
+lpd)
+
+Finishes implementing the Process[DSC]Comment callout. (icontext.c [1.4],
+icstate.h [1.3], interp.c [1.5], iscan.h [1.3], itoken.h [1.1],
+lib/gs_init.ps [1.11], ztoken.c [1.5], zusparam.c [1.2]: 2000/06/28 20:17:00
+lpd)
+
+Changes the name of the unread operator to .unread, retaining unread as a
+synonym for backward compatibility. (lib/gs_init.ps [1.12], zfileio.c [1.7]:
+2000/06/29 15:58:24 lpd)
+
+Adds a findprotodevice "operator", to find a device prototype by name.
+(lib/gs_init.ps [1.13]: 2000/07/05 04:49:11 lpd)
+
+Changes the version numbering system back to sequential (not odd/even).
+Between numbered filesets, GS_PRODUCT will say "CVS PRE-RELEASE".
+(lib/gs_init.ps [1.14]: 2000/07/05 17:23:54 lpd)
+
+</pre><h2><a name="6.22 Streams"></a>Streams</h2><pre>
+
+Fixes problems:
+ - file_limit wasn't initialized properly in some cases.
+(sfxfd.c [1.4], sfxstdio.c [1.3]: 2000/05/02 02:06:41 lpd)
+ - smd5.c didn't compile properly with "traditional C" compilers.
+(smd5.c [1.2]: 2000/05/19 06:08:01 lpd)
+ - The workaround for Microsoft C's omission of O_APPEND et al caused
+warnings or errors with other compilers. (stat_.h [1.3]: 2000/07/03 21:07:05
+lpd)
+
+Works around the fact that Microsoft Visual C++ (only) doesn't define the O_
+flags for the `open' library call. (stat_.h [1.2]: 2000/05/31 20:34:43 lpd)
+
+Finishes working around the fact that Microsoft C, in defiance of multiple
+standards, by default doesn't define the O_ flags for 'open' in fcntl.h (or
+anywhere else). (stat_.h [1.4]: 2000/07/05 00:48:21 lpd)
+
+</pre><h2><a name="6.22 Library"></a>Library</h2><pre>
+
+Fixes problems:
+ - A null Pattern color caused an error. (gspcolor.c [1.2]:
+2000/05/01 15:15:07 lpd)
+ - A procedure name exceeded VMS's 31-character limit.
+(gsparam.h [1.6]: 2000/05/02 01:47:50 lpd)
+ - If the DataSource of a shading was a reusable stream, the stream
+wasn't reset before rendering the shading. (gxshade.c [1.2]: 2000/05/02
+07:05:10 lpd)
+ - shfill didn't go through the device fill_path procedure,
+preventing it from being written out as a high-level PostScript or PDF
+construct. (gscolor3.c [1.2]: 2000/05/02 07:06:23 lpd)
+ - Once again, corrects an incorrect dependency list.
+(gscolor3.c [1.3]: 2000/05/02 07:14:11 lpd)
+ - The code for adding elements to small-string free lists was wrong,
+possibly causing an endless loop. (gsnogc.c [1.3]: 2000/05/04 01:29:53 lpd)
+ - Fixes minor syntactic incompatibilities with "traditional C"
+compilers. (gsfunc4.c [1.2], gstype42.c [1.5]: 2000/05/11 16:14:51 lpd)
+ - CIEBasedDEF[G] color spaces computed incorrect results or caused
+invalid memory accesses, especially if DecodeDEF[G] is not the identity
+function. (This bug had probably been there since these color spaces were
+first implemented, unnoticed because DecodeDEF[G] is almost always the
+identity.) (gscie.c [1.2], gsciemap.c [1.2], gxctable.c [1.2]: 2000/05/15
+19:58:38 lpd)
+ - Temporary files weren't created as private or exclusive.
+(close_.h [1.1], gp_unifs.c [1.2], gpmisc.c [1.1], gpmisc.h [1.1]:
+2000/05/19 17:52:51 lpd)
+ - OutputFile values starting with a %d format string caused an
+error. (bug introduced in 5.85) (gsdevice.c [1.4]: 2000/05/20 06:58:11 lpd)
+ - In rare cases, an overflow could occur in the filling loop,
+producing distorted output. (Fix from Artifex Software.) (gxfill.c [1.3]:
+2000/05/23 05:46:52 lpd)
+ - When writing PDF or PostScript, stroked rectangles could sometimes
+be omitted from the output. (gdevvec.c [1.3]: 2000/05/24 18:48:14 lpd)
+ - In PDF output, the conversion of Type 1 to Type 2 CharStrings
+didn't adjust the X offset of the accent for 'seac', causing accents to be
+displaced to the right. (gdevpsfx.c [1.3]: 2000/05/24 23:20:43 lpd)
+ - The definitions of user names weren't properly associated with
+local VM (they were stored in a static variable). (gsalloc.c [1.3],
+gxalloc.h [1.2]: 2000/05/26 02:27:58 lpd)
+ - The change for local user names didn't update the structure
+descriptor for gs_ref_memory_t. (gsalloc.c [1.4], gxalloc.h [1.3]:
+2000/05/26 02:33:38 lpd)
+ - The fix for 'seac' when converting Type 1 to Type 2 CharStrings
+wasn't quite complete. (gdevpsfx.c [1.4]: 2000/05/26 20:48:37 lpd)
+ - If [eo]clip set a rectangular region, clippath would return the
+rounded clipping box, not the correct clipping path. (gxcpath.c [1.2]:
+2000/05/31 22:20:04 lpd)
+ - ShadingType 2 shadings could cause an invalid memory access.
+(gsfunc3.c [1.3]: 2000/06/04 18:25:33 lpd)
+ - Printer drivers that didn't implement print_page_copies didn't
+print multiple copies of the same page on separate files if the OutputFile
+name included %d, and some drivers (such as the TIFF drivers) produced
+invalid output. (gdevprn.c [1.4]: 2000/06/05 02:04:26 lpd)
+ - 32-bit sample values in shading data didn't work, because some
+CPUs execute (1 << 32) as (1 << 0). (gxshade.c [1.3]: 2000/06/07 19:07:17
+lpd)
+ - Type 1 fonts without eexec encryption still included the 4 eexec
+padding bytes. (bug probably introduced since 6.0) (gdevpsf1.c [1.4]:
+2000/06/12 17:38:48 lpd)
+ - Axial shadings with a non-orthogonal CTM could fail to fill the
+required region. (fix from Artifex) (gxshade1.c [1.4]: 2000/06/12 21:45:19
+lpd)
+ - When allocator debugging was enabled (-Z@), 'restore' didn't clear
+vacated space in inner chunks. (gsalloc.c [1.5]: 2000/06/13 07:04:18 lpd)
+ - the row buffers for images weren't allocated with a stable
+allocator, possibly causing data corruption or invalid accesses if a
+PostScript program invoked save/restore within the data-reading procedure
+for an image. (gsimage.c [1.2]: 2000/06/13 07:05:21 lpd)
+ - Rendering TrueType fonts didn't adjust the flatness to ensure
+accurate results. (gstype42.c [1.6], gxchrout.c [1.1], gxchrout.h [1.1],
+gxtype1.c [1.5]: 2000/06/20 15:46:53 lpd)
+ - Calling get_params with a static (read-only) device prototype
+could cause a memory access error. (gsdparam.c [1.3]: 2000/06/22 14:05:49
+lpd)
+ - [gs_]currentgray didn't return the correct value if the current
+color space was a DeviceN space using the alternate space. (gscolor.c [1.2],
+gscolor.h [1.2], gscolor1.c [1.2]: 2000/07/03 15:28:26 lpd)
+ - Some picky compilers complained about "integer constant is
+unsigned in ANSI C, signed with -traditional". (md5.c [1.2]: 2000/07/03
+21:55:18 lpd)
+ - If TMPDIR wasn't defined, TEMP would be ignored. (bug introduced
+in 6.23) (gpmisc.c [1.4]: 2000/07/04 19:54:00 lpd)
+ - Watcom C requires the non-standard O_BINARY mode flag when opening
+(with open) a file that will later be opened in binary mode with fdopen.
+(gpmisc.c [1.6]: 2000/07/05 17:08:27 lpd)
+
+Restructures the code for handling ImageType 3 images, for the benefit of
+the PDF writer. (gximage3.c [1.3], gximage3.h [1.1]: 2000/04/30 03:08:15
+lpd)
+
+Implements ImageType 3 images in the PDF writer. (gximage3.c [1.4],
+gximage3.h [1.2]: 2000/04/30 06:21:58 lpd)
+
+Creates a procs structure for shadings, moving the fill_rectangle procedure
+into it, in anticipation of adding a get_params procedure. (gsshade.c [1.2],
+gsshade.h [1.2], gxshade.h [1.2]: 2000/04/30 19:37:37 lpd)
+
+Implements PatternType 2 patterns and shfill in the PDF writer.
+(gsptype2.c [1.2]: 2000/05/02 07:14:58 lpd)
+
+Changes gdev_prn_file_is_new from a macro to a procedure. (gdevprn.c [1.3],
+gdevprn.h [1.4]: 2000/05/20 20:25:48 lpd)
+
+Works around the fact that Microsoft Visual C++ defines S_IREAD and S_IWRITE
+but not their newer equivalents S_IRUSR and S_IWUSR. (gpmisc.c [1.2]:
+2000/05/24 18:49:54 lpd)
+
+Changes some assignments to work around over-zealous compiler warnings.
+(gxtype1.c [1.4]: 2000/05/24 23:52:58 lpd)
+
+Works around the fact that Microsoft Visual C++ (only) doesn't define the O_
+flags for the `open' library call. (gpmisc.c [1.3]: 2000/05/31 20:34:43 lpd)
+
+Improves some comments in A_fill_stripe. (gxshade1.c [1.3]: 2000/06/04
+20:58:23 lpd)
+
+Finishes working around the fact that Microsoft C, in defiance of multiple
+standards, by default doesn't define the O_ flags for 'open' in fcntl.h (or
+anywhere else). (fcntl_.h [1.1], gpmisc.c [1.5]: 2000/07/05 00:48:21 lpd)
+
+Adds O_BINARY to the Microsoft compatibility fcntl.h patch. (fcntl_.h [1.2]:
+2000/07/05 17:21:43 lpd)
+
+Changes the version numbering system back to sequential (not odd/even).
+Between numbered filesets, GS_PRODUCT will say "CVS PRE-RELEASE".
+(gscdef.c [1.3]: 2000/07/05 17:23:54 lpd)
+
+Updates GS_PRODUCT for making a fileset. (gscdef.c [1.4]: 2000/07/06
+00:01:03 lpd)
+
+<hr>
+
+<h1><a name="Version6.21"></a>Version 6.21 (2000-04-28)</h1>
+
+<p>
+This fileset includes more PDF writer enhancements: conversion of embedded
+Type 1 fonts to Type 1C (smaller), handling of more color spaces for images,
+ImageType 4 images, compression of mask images, support for (tiled) Pattern
+colors, more graphics state distiller parameters, recording of graphics
+state functions in the output. It also greatly improves the space usage and
+loading time for CMaps.
+
+<p>
+All problems registered on SourceForge numbered 104890 or lower are closed,
+except for the following: 101549, 101814, 101905, 101955, 102146, 102735,
+103528, 104118, 104375.
+
+<p>
+The following projects are in a partially completed state in the PDF writer:
+
+<ul>
+
+<li>CID-keyed fonts (gdevpdf[eftw].c) -- barely started.
+
+<li>ImageType 3 images (gdevpdf[ij].c) -- started.
+
+</ul>
+
+<pre>
+
+<h2><a name="6.21_Incompatible_changes"></a>Incompatible changes</h2>
+
+(Drivers)
+ - The downsampling filters now require WidthIn and HeightIn,
+replacing Columns.
+ - The gp_ procedures for managing screen swapping between console
+and graphics are removed.
+ - Any driver that processes the pdfmark pseudo-parameter must now
+also return null for the "value" of the pdfmark parameter when (and only
+when) specifically requested.
+(PDF writer)
+ - The last argument of pdf_alloc_font has changed.
+ - pdf_set_color is renamed pdf_set_pure_color.
+ - When producing PDF 1.3 output, the base 14 fonts are now
+candidates for embedding just like any other fonts.
+(Interpreter)
+ - The .fontproperties procedure in gs_fonts.ps now takes an
+additional argument.
+ - The interpreter must no longer reference stdin/out/err directly.
+(Library)
+ - The internal representation of CMaps is changed completely, and
+has several new required members.
+ - gs_cmap is renamed gs_cmap_t; gx_code_map is renamed
+gx_code_map_t.
+ - Clients creating CMaps must call gs_cmap_init to initialize them.
+ - The library must no longer reference stdin/out/err directly.
+
+
+<h2><a name="6.21 Documentation"></a>Documentation</h2><pre>
+
+Fixes problems:
+ - The PDF writer could get an ioerror when downsampling images whose
+size wasn't an exact multiple of the downsampling factor.
+(doc/News.htm [1.31]: 2000/04/13 16:44:59 lpd)
+ - When processing a PDF file, the font substitution heuristic based
+on the FontName sometimes overrode the Flags information in the
+FontDescriptor. (doc/News.htm [1.34]: 2000/04/20 06:36:02 lpd)
+ - When pdfwrite was producing PDF 1.3 output, the base 14 fonts were
+never embedded, rather than being handled like all other fonts.
+(doc/News.htm [1.37]: 2000/04/20 23:49:40 lpd)
+ - The URL for the Arphic free Chinese fonts had become incorrect.
+(doc/Fonts.htm [1.3]: 2000/04/27 13:44:52 lpd)
+ - Fixes a few typos, and adds GS_FONTPATH to the list of environment
+variables to be unset for a pristine test run. (doc/Release.htm [1.10]:
+2000/04/28 22:08:41 lpd)
+
+Adds projects related to SVG and to pswrite image compression.
+(doc/Projects.htm [1.4]: 2000/04/07 18:39:12 lpd)
+
+Makes the ps2pdf scripts replace a .eps extension with .pdf, as they do with
+.ps. (doc/Ps2pdf.htm [1.7], man/ps2pdf.1 [1.5], man/ps2pdfwr.1 [1.2]:
+2000/04/07 19:28:14 lpd)
+
+Completely redesigns the representation of CMaps, to reduce space
+requirements and make comparing them more reasonable, changing gs_cmap to
+gs_cmap_t and gx_code_map to gx_code_map_t. (****** NOTE ****** The
+PostScript code currently only handles a few well-behaved CMap structures.)
+(doc/News.htm [1.27]: 2000/04/08 03:54:38 lpd)
+
+Documents the need to set SYNC=nosync on NextStep / OpenStep systems.
+(doc/Make.htm [1.10]: 2000/04/10 04:45:37 lpd)
+
+Overhauls font embedding in the PDF writer: splits off the code into a new
+file (gdevpdfe.c), writes embedded Type 1 fonts as Type 1C (CFF Type 2), and
+adds a little bit of code for future support of Type 0 and CID-keyed fonts.
+(doc/News.htm [1.28]: 2000/04/10 07:48:37 lpd)
+
+Documents the fact that building on NeXTSTEP 3.3 systems requires removing
+-Wmissing-declarations from GCFLAGS. (doc/Make.htm [1.11]: 2000/04/11
+14:06:54 lpd)
+
+Enhances pdf2ps to allow defaulting the output file name.
+(man/pdf2ps.1 [1.2]: 2000/04/11 14:23:24 lpd)
+
+Factors out code for writing functions and for adding filter-related entries
+to a stream dictionary; implements the DefaultRenderingIntent distiller
+parameter. (doc/Ps2pdf.htm [1.8]: 2000/04/11 16:06:57 lpd)
+
+Implements additional distiller parameters: PreserveHalftoneInfo,
+PreserveOverprintSetting, TransferFunctionInfo (except for Apply vs.
+Remove), UCRandBGInfo. Splits off graphics state management into separate
+files. Implements the remaining graphics state parameters (halftone,
+transfer function, black generation, undercolor removal, halftone phase,
+smoothness, overprint, stroke adjustment) ****** EXCEPT FOR IMAGES ******.
+In anticipation of handling more general colors, renames pdf_set_color as
+pdf_set_pure_color, and adds pdf_set_drawing_color. (doc/News.htm [1.29]:
+2000/04/11 18:31:32 lpd)
+
+Updates documentation to match recent changes in the pdfwrite driver.
+(doc/Ps2pdf.htm [1.9]: 2000/04/11 22:56:17 lpd)
+
+Makes the second argument of the pfbtopfa script optional, so 'pfbtopfa
+dir/x.pfb' is equivalent to 'pfbtopfa dir/x.pfb x.pfa'.
+(man/pfbtopfa.1 [1.2]: 2000/04/12 17:41:41 lpd)
+
+In pdfwrite, rewrites the image writing code to use Cos objects rather than
+direct printing, and splits off the creation of image dictionaries into a
+new file; adds support for tiling with uncolored Patterns; implements
+converting ImageType 4 images to their PDF 1.3 counterpart; starts to do the
+same for ImageType 3. This code is "in progress" and likely to have problems
+for a while. (doc/News.htm [1.30]: 2000/04/12 18:44:35 lpd)
+
+Implements pdfwrite compression for mask images, using the same parameters
+as for monochrome images. (doc/News.htm [1.32]: 2000/04/13 18:40:23 lpd)
+
+Adds user-contributed uniprint parameter files for the Canon BJC-8200,
+including an addition for the Red Hat printer data base.
+(doc/Devices.htm [1.4]: 2000/04/14 03:59:57 lpd)
+
+Slightly updates the user-contributed documentation on the new BJC-8200
+uniprint parameters. (doc/Devices.htm [1.5]: 2000/04/15 00:20:54 lpd)
+
+Completes code for reading and writing CMaps. (doc/News.htm [1.33]:
+2000/04/16 03:05:29 lpd)
+
+Clarifies some details of posting releases on SourceForge.
+(doc/Release.htm [1.9]: 2000/04/17 22:59:24 lpd)
+
+Converts the ps2epsi documentation to HTML. (doc/Ps2epsi.htm [1.1],
+doc/Readme.htm [1.6], doc/ps2epsi.txt [1.2]: 2000/04/18 17:59:13 lpd)
+
+Adds a couple of graphics library optimization projects.
+(doc/Projects.htm [1.5]: 2000/04/19 04:05:11 lpd)
+
+Adds a project for creating an OutputDevice resource instance for each
+device. (doc/Projects.htm [1.6]: 2000/04/19 21:37:47 lpd)
+
+Checks in the accumulated change log. (doc/Changes.htm [1.10]: 2000/04/20
+07:24:22 lpd)
+
+Removes the gp_ procedures for managing screen swapping between console and
+graphics, which haven't been used for a long time and are no longer useful.
+(doc/News.htm [1.35]: 2000/04/20 22:47:35 lpd)
+
+Removes all remaining direct references to stdin/out/err from the library,
+interpreter, and non-contributed drivers; moves the ersatz definitions of
+stdin/out/err to a new header file. (doc/News.htm [1.36]: 2000/04/20
+23:30:22 lpd)
+
+Reduces the startup time for displaying PDF files, by skipping the creation
+of pdfmarks for annotations and outlines when the output device doesn't
+process pdfmarks. (doc/News.htm [1.38]: 2000/04/21 16:58:28 lpd)
+
+Notes that even if SHARE_JPEG=1, the IJG library sources are required.
+(doc/Make.htm [1.12]: 2000/04/27 07:39:05 lpd)
+
+Documents the new -dPrinted[=true/false] switch for PDF files.
+(doc/Use.htm [1.3]: 2000/04/27 08:17:05 lpd)
+
+Adds a MD5Encode filter, which computes the 16-byte MD5 digest of the input.
+No output is produced until the filter is closed. (doc/Language.htm [1.2]:
+2000/04/27 14:39:57 lpd)
+
+Updates the description of the project to produce higher-level PCL output.
+(doc/Projects.htm [1.7]: 2000/04/28 10:42:02 lpd)
+
+Adds a sample file containing a wide variety of PDF annotations; updates
+documentation for this and some other overlooked files.
+(doc/Psfiles.htm [1.4]: 2000/04/28 10:51:02 lpd)
+
+Notes that the uniprint dnj750c.upp parameters are also good for the 450C.
+(doc/Devices.htm [1.6]: 2000/04/28 14:27:02 lpd)
+
+Updates release dates. (man/pdf2ps.1 [1.3], man/ps2ps.1 [1.5]: 2000/04/28
+18:29:32 lpd)
+
+Updates version numbers and dates for the 6.21 fileset.
+(doc/Bug-form.htm [1.6], doc/Devices.htm [1.7], doc/Fonts.htm [1.4],
+doc/Language.htm [1.3], doc/Make.htm [1.13], doc/Projects.htm [1.8],
+doc/Ps2epsi.htm [1.2], doc/Psfiles.htm [1.5], doc/Readme.htm [1.7],
+doc/Use.htm [1.4]: 2000/04/28 22:06:25 lpd)
+
+Updates the news for the 6.21 fileset. (doc/News.htm [1.39]: 2000/04/28
+22:18:16 lpd)
+
+</pre><h2><a name="6.21 Procedures"></a>Procedures</h2><pre>
+
+Fixes problems:
+ - Some makefile macros were used before being defined.
+(devs.mak [1.9], lib.mak [1.9]: 2000/04/07 16:02:03 lpd)
+ - `make install-data' didn't install lib/gs_frsd.ps or
+lib/pdfopt.ps. (unixinst.mak [1.7]: 2000/04/07 19:17:48 lpd)
+ - gsmake would get into a loop if the makefile was not a symbolic
+link; `gsmake check' didn't accept a makefile name on the command line.
+(toolbin/gsmake.tcl [1.2]: 2000/04/07 19:37:21 lpd)
+ - `makemaster' referred to an undefined variable. (How could it ever
+have worked?) (toolbin/makeset.tcl [1.3]: 2000/04/07 19:39:27 lpd)
+ - A dependency wasn't updated when moving the gdevpsf* rules from
+devs.mak to lib.mak. (lib.mak [1.10]: 2000/04/07 19:40:25 lpd)
+ - The dependencies in the makefile weren't updated for the pdfwrite
+font embedding overhaul. (devs.mak [1.11]: 2000/04/10 18:57:33 lpd)
+ - Once again, the dependencies hadn't been updated. (int.mak [1.17]:
+2000/04/11 15:59:42 lpd)
+ - Setting pdfwrite parameters for a DCTEncode filter could cause a
+crash (memory fault). (devs.mak [1.16]: 2000/04/13 01:53:07 lpd)
+ - `make install' didn't install all the documentation files.
+(unixinst.mak [1.9]: 2000/04/14 04:06:13 lpd)
+ - The Color LaserJet 5 drivers were incorrectly identified as
+"supported" rather than "contributed". (contrib.mak [1.7], devs.mak [1.17]:
+2000/04/20 17:12:54 lpd)
+ - PDF images with a bitmap Mask caused errors or produced incorrect
+output. (int.mak [1.20]: 2000/04/24 00:59:04 lpd)
+
+Completely redesigns the representation of CMaps, to reduce space
+requirements and make comparing them more reasonable, changing gs_cmap to
+gs_cmap_t and gx_code_map to gx_code_map_t. (****** NOTE ****** The
+PostScript code currently only handles a few well-behaved CMap structures.)
+(int.mak [1.16]: 2000/04/08 03:54:38 lpd)
+
+Updates version #s to 6.21. (We should have done this earlier.)
+(version.mak [1.12]: 2000/04/10 04:46:36 lpd)
+
+Overhauls font embedding in the PDF writer: splits off the code into a new
+file (gdevpdfe.c), writes embedded Type 1 fonts as Type 1C (CFF Type 2), and
+adds a little bit of code for future support of Type 0 and CID-keyed fonts.
+(devs.mak [1.10]: 2000/04/10 07:48:37 lpd)
+
+Adds Function-based tint_transform procedures for Separation and DeviceN
+color spaces. (lib.mak [1.11]: 2000/04/10 19:02:19 lpd)
+
+Factors out code for writing functions and for adding filter-related entries
+to a stream dictionary; implements the DefaultRenderingIntent distiller
+parameter. (devs.mak [1.12]: 2000/04/11 16:06:57 lpd)
+
+Implements additional distiller parameters: PreserveHalftoneInfo,
+PreserveOverprintSetting, TransferFunctionInfo (except for Apply vs.
+Remove), UCRandBGInfo. Splits off graphics state management into separate
+files. Implements the remaining graphics state parameters (halftone,
+transfer function, black generation, undercolor removal, halftone phase,
+smoothness, overprint, stroke adjustment) ****** EXCEPT FOR IMAGES ******.
+In anticipation of handling more general colors, renames pdf_set_color as
+pdf_set_pure_color, and adds pdf_set_drawing_color. (devs.mak [1.13]:
+2000/04/11 18:31:32 lpd)
+
+Splits off creation and writing of color spaces, and writing color values,
+into a separate file. Adds support for (Function-based) Separation and
+DeviceN color spaces, general Pattern color spaces, and procedure-based
+Indexed color spaces. Adds some code to support Pattern colors, but stubs it
+out because it depends on changes in the image writing code that haven't
+been integrated yet. In fact, most of the new code isn't called yet, either.
+(devs.mak [1.14]: 2000/04/11 19:10:13 lpd)
+
+In pdfwrite, rewrites the image writing code to use Cos objects rather than
+direct printing, and splits off the creation of image dictionaries into a
+new file; adds support for tiling with uncolored Patterns; implements
+converting ImageType 4 images to their PDF 1.3 counterpart; starts to do the
+same for ImageType 3. This code is "in progress" and likely to have problems
+for a while. (devs.mak [1.15]: 2000/04/12 18:44:35 lpd)
+
+Adds user-contributed uniprint parameter files for the Canon BJC-8200,
+including an addition for the Red Hat printer data base.
+(unixinst.mak [1.8]: 2000/04/14 03:59:57 lpd)
+
+Adds code to write out CMaps, similar to the code for writing fonts, for
+eventual embedding in PDF output. (int.mak [1.18], lib.mak [1.12]:
+2000/04/14 07:17:24 lpd)
+
+Completes code for reading and writing CMaps. (int.mak [1.19],
+lib.mak [1.13]: 2000/04/16 03:05:29 lpd)
+
+Adds a user-contributed driver for the Epson Stylus (Color) Photo printers.
+(contrib.mak [1.6]: 2000/04/18 06:34:26 lpd)
+
+Converts the ps2epsi documentation to HTML. (unixinst.mak [1.10]: 2000/04/18
+17:59:13 lpd)
+
+Checks in the accumulated change log. (version.mak [1.13]: 2000/04/20
+07:24:22 lpd)
+
+Converts the bmp* and bmpa* devices to -dev2, to make them const.
+(devs.mak [1.18]: 2000/04/20 17:19:21 lpd)
+
+Removes the gp_ procedures for managing screen swapping between console and
+graphics, which haven't been used for a long time and are no longer useful.
+(dvx-tail.mak [1.2], lib.mak [1.14], openvms.mak [1.3], openvms.mmk [1.4],
+os2.mak [1.5], unix-aux.mak [1.2], watc.mak [1.3], watclib.mak [1.3],
+winlib.mak [1.2]: 2000/04/20 22:47:35 lpd)
+
+Removes all remaining direct references to stdin/out/err from the library,
+interpreter, and non-contributed drivers; moves the ersatz definitions of
+stdin/out/err to a new header file. (lib.mak [1.15], unix-gcc.mak [1.5]:
+2000/04/20 23:30:22 lpd)
+
+Adds compression for pdfwrite Patterns. (devs.mak [1.19]: 2000/04/24
+06:13:02 lpd)
+
+Adds a MD5Encode filter, which computes the 16-byte MD5 digest of the input.
+No output is produced until the filter is closed. (devs.mak [1.20],
+int.mak [1.21], lib.mak [1.16]: 2000/04/27 14:39:57 lpd)
+
+Adds a user-contributed driver for the H-P 970Cxi inkjet printer.
+(contrib.mak [1.8]: 2000/04/27 14:55:56 lpd)
+
+Factors the H-P monochrome laser and inkjet drivers into a generic driver
+and printer-specific clients. (devs.mak [1.21]: 2000/04/27 20:16:33 lpd)
+
+Adds a user-contributed driver for the Brother HL-1250 laser printer. This
+has a dual AFPL/GPL license, and a non-Aladdin copyright.
+(contrib.mak [1.9]: 2000/04/27 20:18:39 lpd)
+
+Once again, updates some dependency lists that had become inconsistent with
+the code. (contrib.mak [1.10], devs.mak [1.22], lib.mak [1.17]: 2000/04/27
+21:36:19 lpd)
+
+Yet again, updates an out-of-date dependency list. (contrib.mak [1.11]:
+2000/04/28 18:28:42 lpd)
+
+Changes the check for documentation files having the correct embedded date.
+(toolbin/pre [1.3]: 2000/04/28 18:29:14 lpd)
+
+Updates version numbers and dates for the 6.21 fileset. (version.mak [1.14]:
+2000/04/28 22:06:26 lpd)
+
+</pre><h2><a name="6.21 Utilities"></a>Utilities</h2><pre>
+
+Fixes problems:
+ - The e-mail address for reporting problems was out of date.
+(lib/ps2epsi.ps [1.2]: 2000/04/10 02:27:21 lpd)
+ - If a font didn't have a FontName (which is the case for bitmap
+fonts produced by recent versions of dvips), ps2epsi caused an error.
+(lib/ps2epsi.ps [1.3]: 2000/04/11 16:32:51 lpd)
+ - Backs out contributed changes of 2000-03-05 because of bugs.
+(ansi2knr.c [1.3]: 2000/04/13 03:41:48 lpd)
+ - ps2epsi removed all ^M characters in the input, possibly
+corrupting binary data. (lib/ps2epsi [1.2]: 2000/04/27 01:44:04 lpd)
+
+Makes the ps2pdf scripts replace a .eps extension with .pdf, as they do with
+.ps. (lib/ps2pdfwr [1.2], lib/ps2pdfxx.bat [1.2]: 2000/04/07 19:28:14 lpd)
+
+Enhances pdf2ps to allow defaulting the output file name. (lib/pdf2ps [1.2]:
+2000/04/11 14:23:24 lpd)
+
+Makes the second argument of the pfbtopfa script optional, so 'pfbtopfa
+dir/x.pfb' is equivalent to 'pfbtopfa dir/x.pfb x.pfa'. (lib/pfbtopfa [1.2]:
+2000/04/12 17:41:41 lpd)
+
+Adds user-contributed uniprint parameter files for the Canon BJC-8200,
+including an addition for the Red Hat printer data base. (lib/bj8.rpd [1.1]:
+2000/04/14 03:59:57 lpd)
+
+Increases the VMThreshold when converting PostScript to PDF, to reduce
+garbage collection overhead. (lib/ps2pdfwr [1.3]: 2000/04/17 19:06:58 lpd)
+
+Moves the optimization prologue for ps2pdf from the command line to a
+procedure, to avoid shell length limits. (lib/ps2pdfwr [1.4],
+lib/ps2pdfxx.bat [1.3]: 2000/04/18 16:40:14 lpd)
+
+Removes the gp_ procedures for managing screen swapping between console and
+graphics, which haven't been used for a long time and are no longer useful.
+(bench.c [1.2], gp_dosfb.c [1.2], gp_iwatc.c [1.2], gp_nofb.c [1.2]:
+2000/04/20 22:47:35 lpd)
+
+Checks in a file overlooked in the elimination of the gp_ console
+procedures. (gp_os2.c [1.2]: 2000/04/20 23:27:21 lpd)
+
+</pre><h2><a name="6.21 Drivers"></a>Drivers</h2><pre>
+
+Fixes problems:
+ - The pdfwrite driver sometimes compressed images in an Indexed
+color space with the DCTEncode filter, producing garbage. (gdevpsdi.c [1.4]:
+2000/04/12 19:25:56 lpd)
+ - Setting pdfwrite parameters for a DCTEncode filter could cause a
+crash (memory fault). (gdevpsdf.h [1.7], gdevpsdi.c [1.5], gdevpsdp.c [1.4],
+gdevpsdu.c [1.2]: 2000/04/13 01:53:07 lpd)
+ - Compressing with DCTEncode tried to add the compression filter
+twice. (gdevpsdi.c [1.6]: 2000/04/13 04:52:38 lpd)
+ - The PDF writer could get an ioerror when downsampling images whose
+size wasn't an exact multiple of the downsampling factor. (gdevpsdi.c [1.7],
+gdevpsds.c [1.2], gdevpsds.h [1.2]: 2000/04/13 16:44:59 lpd)
+ - Downsampled mask images could cause a memory access error.
+(gdevpsdi.c [1.9]: 2000/04/18 16:37:04 lpd)
+ - PDF Patterns weren't written correctly if the ProcessColorModel
+wasn't Device RGB. (gdevpsdu.c [1.3]: 2000/04/24 05:40:30 lpd)
+ - The [e]pswrite driver produced incorrect output for color images
+with multiple data sources. (gdevps.c [1.5]: 2000/04/25 19:35:07 lpd)
+
+Implements pdfwrite compression for mask images, using the same parameters
+as for monochrome images. (gdevpsdi.c [1.8]: 2000/04/13 18:40:23 lpd)
+
+Adds user-contributed uniprint parameter files for the Canon BJC-8200,
+including an addition for the Red Hat printer data base.
+(lib/bj8gc12f.upp [1.1], lib/bj8hg12f.upp [1.1], lib/bj8oh06n.upp [1.1],
+lib/bj8pa06n.upp [1.1], lib/bj8pp12f.upp [1.1], lib/bj8ts06n.upp [1.1]:
+2000/04/14 03:59:57 lpd)
+
+Adds a user-contributed driver for the Epson Stylus (Color) Photo printers.
+(gdevphex.c [1.1]: 2000/04/18 06:34:26 lpd)
+
+Converts the bmp* and bmpa* devices to -dev2, to make them const.
+(gdevbmp.c [1.2], gdevbmpa.c [1.2]: 2000/04/20 17:19:21 lpd)
+
+Documents the astounding fact that the Xt implementation actually writes
+into the XtResource tables. (gdevxres.c [1.2]: 2000/04/20 19:59:28 lpd)
+
+Removes all remaining direct references to stdin/out/err from the library,
+interpreter, and non-contributed drivers; moves the ersatz definitions of
+stdin/out/err to a new header file. (gdevxxf.c [1.3]: 2000/04/20 23:30:22
+lpd)
+
+When writing PDF output, reduces the size of compressed images in Indexed
+color spaces by not using a Predictor for them. (gdevpsdi.c [1.10]:
+2000/04/21 06:46:08 lpd)
+
+Adds an internal filter for converting images to Indexed form if possible.
+(gdevpsds.c [1.3], gdevpsds.h [1.3]: 2000/04/21 19:26:37 lpd)
+
+Cleans up code by replacing macros with procedures or variables.
+(gdevps.c [1.6]: 2000/04/25 20:35:46 lpd)
+
+Makes the [e]pswrite and pdfwrite drivers merge adjacent horizontal or
+vertical line segments going in the same direction. This makes a big
+difference for PostScript files produced by certain applications.
+(gdevps.c [1.7]: 2000/04/25 22:39:54 lpd)
+
+Adds a user-contributed driver for the H-P 970Cxi inkjet printer.
+(gdevdj9.c [1.1]: 2000/04/27 14:55:56 lpd)
+
+Factors the H-P monochrome laser and inkjet drivers into a generic driver
+and printer-specific clients. (gdevdjet.c [1.3], gdevdljm.c [1.1],
+gdevdljm.h [1.1]: 2000/04/27 20:16:33 lpd)
+
+Adds a user-contributed driver for the Brother HL-1250 laser printer. This
+has a dual AFPL/GPL license, and a non-Aladdin copyright. (gdevhl12.c [1.1]:
+2000/04/27 20:18:39 lpd)
+
+Once again, updates some dependency lists that had become inconsistent with
+the code. (gdevdj9.c [1.2]: 2000/04/27 21:36:19 lpd)
+
+Makes the printers in gdevdjet.c that support setting the number of copies
+use this feature when multiple copies are requested. (gdevdjet.c [1.4],
+gdevdljm.c [1.2], gdevdljm.h [1.2]: 2000/04/28 13:37:47 lpd)
+
+</pre><h2><a name="6.21 PDF writer"></a>PDF writer</h2><pre>
+
+Fixes problems:
+ - The Cos objects of resources not shared between pages weren't
+freed at the end of each page. (gdevpdf.c [1.9]: 2000/04/10 04:17:56 lpd)
+ - gdevpdfe.c was omitted from the check-in for the overhaul of
+pdfwrite font embedding. (gdevpdfe.c [1.1]: 2000/04/10 16:01:29 lpd)
+ - pdfwrite output could contain commands to set the line width to a
+negative value, which PostScript allows but PDF doesn't. (gdevpdfd.c [1.6]:
+2000/04/12 19:51:14 lpd)
+ - The changes for the new color handling code caused stroked
+graphics not to output the line width. (new bug since 6.20)
+(gdevpdfd.c [1.7]: 2000/04/13 03:47:21 lpd)
+ - Pattern resources were written with incorrectly scaled XStep and
+YStep, and without a Type entry. (gdevpdfc.c [1.3], gdevpdfi.c [1.10]:
+2000/04/13 04:12:33 lpd)
+ - The PDF writer could get an ioerror when downsampling images whose
+size wasn't an exact multiple of the downsampling factor.
+(gdevpdfi.c [1.11]: 2000/04/13 16:44:59 lpd)
+ - Bitmapped characters weren't written properly on the output file
+(new bug since 6.20). (gdevpdfg.h [1.4], gdevpdfi.c [1.12],
+gdevpdfj.c [1.2]: 2000/04/13 17:24:54 lpd)
+ - gxdcolor.h was required for gxpcolor.h, but wasn't included.
+(gdevpdfc.c [1.4]: 2000/04/18 17:42:55 lpd)
+ - A table of constant strings wasn't declared as const.
+(gdevpdfp.c [1.7]: 2000/04/20 17:37:31 lpd)
+ - When pdfwrite was producing PDF 1.3 output, the base 14 fonts were
+never embedded, rather than being handled like all other fonts.
+(gdevpdff.c [1.4]: 2000/04/20 23:49:40 lpd)
+ - Indexed color spaces used in in-line images were being written
+incorrectly. Also optimizes Indexed images by converting RGB palettes to
+Gray if all the entries are actually gray. (gdevpdfc.c [1.5]: 2000/04/21
+15:29:20 lpd)
+ - The recent optimization for using the ' command in PDF output lost
+track of the leading value between blocks of text, causing lines in later
+blocks to overprint each other. (gdevpdfu.c [1.9]: 2000/04/21 22:29:05 lpd)
+ - Backs out the change that allowed embedding of the base 14 fonts,
+because it produces invalid output. (gdevpdff.c [1.5]: 2000/04/22 00:13:11
+lpd)
+ - Colored Patterns requiring masking weren't written properly.
+(gdevpdfc.c [1.6]: 2000/04/24 00:09:37 lpd)
+ - Patterns were written upside-down. (gdevpdfc.c [1.7]: 2000/04/24
+01:11:36 lpd)
+ - PDF Patterns weren't written correctly if the ProcessColorModel
+wasn't Device RGB. (gdevpdf.c [1.15], gdevpdfc.c [1.8], gdevpdfg.h [1.5],
+gdevpdfi.c [1.13], gdevpdfx.h [1.15]: 2000/04/24 05:40:30 lpd)
+ - The color space for images wasn't always written in the correct
+form (an object reference for image XObjects, a resource name for in-line
+images). (gdevpdfi.c [1.14]: 2000/04/28 12:07:37 lpd)
+ - Patterns were sometimes written with a duplicate Type element.
+(gdevpdfc.c [1.10]: 2000/04/28 12:23:54 lpd)
+ - Patterns were sometimes written twice, with an empty definition
+the second time. (gdevpdfi.c [1.15]: 2000/04/28 12:24:42 lpd)
+
+Overhauls font embedding in the PDF writer: splits off the code into a new
+file (gdevpdfe.c), writes embedded Type 1 fonts as Type 1C (CFF Type 2), and
+adds a little bit of code for future support of Type 0 and CID-keyed fonts.
+(gdevpdff.c [1.3], gdevpdff.h [1.2], gdevpdft.c [1.6], gdevpdfw.c [1.3]:
+2000/04/10 07:48:37 lpd)
+
+Factors out code for writing functions and for adding filter-related entries
+to a stream dictionary; implements the DefaultRenderingIntent distiller
+parameter. (gdevpdf.c [1.10], gdevpdfu.c [1.6], gdevpdfx.h [1.8]: 2000/04/11
+16:06:57 lpd)
+
+Adds ExtGState resources. These should be written and freed at the end of
+each page, but they aren't yet. (gdevpdfx.h [1.9]: 2000/04/11 16:38:14 lpd)
+
+Implements additional distiller parameters: PreserveHalftoneInfo,
+PreserveOverprintSetting, TransferFunctionInfo (except for Apply vs.
+Remove), UCRandBGInfo. Splits off graphics state management into separate
+files. Implements the remaining graphics state parameters (halftone,
+transfer function, black generation, undercolor removal, halftone phase,
+smoothness, overprint, stroke adjustment) ****** EXCEPT FOR IMAGES ******.
+In anticipation of handling more general colors, renames pdf_set_color as
+pdf_set_pure_color, and adds pdf_set_drawing_color. (gdevpdf.c [1.11],
+gdevpdfd.c [1.4], gdevpdfg.c [1.1], gdevpdfg.h [1.1], gdevpdfi.c [1.8],
+gdevpdft.c [1.7], gdevpdfu.c [1.7], gdevpdfx.h [1.10]: 2000/04/11 18:31:32
+lpd)
+
+Splits off creation and writing of color spaces, and writing color values,
+into a separate file. Adds support for (Function-based) Separation and
+DeviceN color spaces, general Pattern color spaces, and procedure-based
+Indexed color spaces. Adds some code to support Pattern colors, but stubs it
+out because it depends on changes in the image writing code that haven't
+been integrated yet. In fact, most of the new code isn't called yet, either.
+(gdevpdf.c [1.12], gdevpdfc.c [1.1], gdevpdfd.c [1.5], gdevpdfg.c [1.2],
+gdevpdfg.h [1.2], gdevpdft.c [1.8], gdevpdfx.h [1.11]: 2000/04/11 19:10:13
+lpd)
+
+Integrates a couple of minor overlooked changes in the text-writing code.
+(gdevpdf.c [1.13], gdevpdft.c [1.9], gdevpdfx.h [1.12]: 2000/04/11 19:20:56
+lpd)
+
+In pdfwrite, rewrites the image writing code to use Cos objects rather than
+direct printing, and splits off the creation of image dictionaries into a
+new file; adds support for tiling with uncolored Patterns; implements
+converting ImageType 4 images to their PDF 1.3 counterpart; starts to do the
+same for ImageType 3. This code is "in progress" and likely to have problems
+for a while. (gdevpdf.c [1.14], gdevpdfc.c [1.2], gdevpdfg.c [1.3],
+gdevpdfg.h [1.3], gdevpdfi.c [1.9], gdevpdfj.c [1.1], gdevpdfx.h [1.13]:
+2000/04/12 18:44:35 lpd)
+
+Tweaks the PDF writer to use the ' command for positioning text when
+possible (small optimization only). (gdevpdfg.c [1.4], gdevpdft.c [1.10],
+gdevpdfu.c [1.8], gdevpdfx.h [1.14]: 2000/04/18 16:08:16 lpd)
+
+Reduces the startup time for displaying PDF files, by skipping the creation
+of pdfmarks for annotations and outlines when the output device doesn't
+process pdfmarks. (gdevpdfp.c [1.8]: 2000/04/21 16:58:28 lpd)
+
+Adds compression for pdfwrite Patterns. (gdevpdfc.c [1.9]: 2000/04/24
+06:13:02 lpd)
+
+Makes the [e]pswrite and pdfwrite drivers merge adjacent horizontal or
+vertical line segments going in the same direction. This makes a big
+difference for PostScript files produced by certain applications.
+(gdevpdf.c [1.16], gdevpdfd.c [1.8]: 2000/04/25 22:39:54 lpd)
+
+Updates the list of remaining pdfwrite tasks. (gdevpdfp.c [1.9]: 2000/04/27
+21:36:52 lpd)
+
+</pre><h2><a name="6.21 Interpreter (PDF)"></a>Interpreter (PDF)</h2><pre>
+
+Fixes problems:
+ - Embedded subset CFF fonts in PDF files were defined using the name
+in the font data rather than the font name in the PDF resource object. (bug
+#102901) (lib/pdf_ops.ps [1.5]: 2000/04/11 05:33:13 lpd)
+ - When processing a PDF file, the font substitution heuristic based
+on the FontName sometimes overrode the Flags information in the
+FontDescriptor. (lib/pdf_font.ps [1.6]: 2000/04/20 06:36:02 lpd)
+ - PDF images with a bitmap Mask caused errors or produced incorrect
+output. (lib/pdf_draw.ps [1.10]: 2000/04/24 00:59:04 lpd)
+ - Masked images weren't drawn properly, because the two data sources
+could reference the same file. (lib/pdf_draw.ps [1.11]: 2000/04/24 05:39:45
+lpd)
+ - *Really* fixes the problem of data source aliasing for masked
+images. (lib/pdf_draw.ps [1.12]: 2000/04/24 05:53:43 lpd)
+ - If a font specified Subtype = /TrueType but the actual font used
+was not a TrueType font, any Encoding in the Font object should be ignored.
+(This is a hack required by the PDF specification.) (lib/pdf_font.ps [1.7]:
+2000/04/24 06:37:18 lpd)
+ - Colored annotation borders caused an error; 0-width borders were
+drawn even though they shouldn't be; Link and Stamp annotations weren't
+drawn at all. Also adds a new -dPrinted[=true/false] switch to choose
+whether to produce "screen" or "printer" output. (code from Artifex)
+(lib/pdf_draw.ps [1.13], lib/pdf_main.ps [1.7]: 2000/04/27 08:16:40 lpd)
+
+Makes undefined XObject resources for the Do operator produce a warning
+rather than an error, to parallel Acrobat Reader. (lib/pdf_draw.ps [1.9]:
+2000/04/16 07:48:23 lpd)
+
+Tweaks up the performance of the PDF interpreter loop slightly.
+(lib/pdf_base.ps [1.7]: 2000/04/18 05:45:49 lpd)
+
+Reduces the startup time for displaying PDF files, by skipping the creation
+of pdfmarks for annotations and outlines when the output device doesn't
+process pdfmarks. (lib/pdf_main.ps [1.6]: 2000/04/21 16:58:28 lpd)
+
+</pre><h2><a name="6.21 Interpreter"></a>Interpreter</h2><pre>
+
+Fixes problems:
+ - Fixes some signed/unsigned char * mismatches. (zfrsd.c [1.3]:
+2000/04/07 15:27:14 lpd)
+ - Automatic loading of fonts from resource files didn't work
+(usually caused an unmatchedmark or typecheck error).
+(lib/gs_fonts.ps [1.5], lib/gs_res.ps [1.9]: 2000/04/08 03:45:41 lpd)
+ - A -> should have been a . (only shows up on 64-bit systems).
+(zfunc4.c [1.3]: 2000/04/09 20:04:00 lpd)
+ - the most recent 'fixes' for loading font resources caused all
+built-in fonts to be returned as null. (lib/gs_res.ps [1.10]: 2000/04/09
+22:51:01 lpd)
+ - /Category defineresource didn't make the category definition
+dictionary read-only. (lib/gs_res.ps [1.11]: 2000/04/10 18:29:04 lpd)
+ - Attempting to build an invalid FunctionType 4 function could cause
+a memory access error. (zfunc4.c [1.4]: 2000/04/10 19:38:53 lpd)
+ - Embedded subset CFF fonts in PDF files were defined using the name
+in the font data rather than the font name in the PDF resource object. (bug
+#102901) (lib/gs_cff.ps [1.4]: 2000/04/11 05:33:13 lpd)
+ - CMaps with more than one code space range weren't converted to the
+internal form correctly; begincidchar and beginnotdefchar caused errors.
+(lib/gs_cmap.ps [1.3], zfcmap.c [1.6]: 2000/04/14 07:53:10 lpd)
+ - flushfile and closefile didn't properly flush streams whose final
+target was a procedure, and closefile didn't actually close them. (This is a
+very old bug.) (zfproc.c [1.2]: 2000/04/18 05:50:15 lpd)
+ - CIDFontType 0 CIDFonts in which some FDArray element had no Subrs
+caused an error. (lib/gs_cidfn.ps [1.14]: 2000/04/18 05:58:08 lpd)
+ - Attempting to set a PageSize with 4 elements actually set the
+PageSize (to the first 2 elements), rather than ignoring the attempt. (This
+is just a patch to prevent some PageMaker files from being thrown off by the
+4-element PageSizes in Input Attributes.) (lib/gs_setpd.ps [1.2]: 2000/04/19
+06:01:19 lpd)
+ - When choosing a substituted font, 'Serif' had priority over
+'Sans', so unknown fonts with 'SansSerif' in their name would have a serif
+font substituted. (lib/gs_fonts.ps [1.6]: 2000/04/19 13:48:48 lpd)
+ - The fix to make setpagedevice ignore 4-element PageSizes in
+InputAttributes was broken. (It's impossible that it could ever have worked,
+despite the fact that we tested it.) (lib/gs_setpd.ps [1.3]: 2000/04/20
+06:24:39 lpd)
+ - When processing a PDF file, the font substitution heuristic based
+on the FontName sometimes overrode the Flags information in the
+FontDescriptor. (lib/gs_fonts.ps [1.7]: 2000/04/20 06:36:02 lpd)
+ - Showing a string in a Type 1 font with a singular combined matrix
+(e.g., after 0 scalefont setfont) caused an error instead of doing nothing.
+(zchar1.c [1.3]: 2000/04/22 00:34:46 lpd)
+ - Images with multiple file DataSources where two or more of the
+files were the same caused a crash. (zimage.c [1.3]: 2000/04/24 00:07:41
+lpd)
+ - .reusablestreamdecode wasn't defined for use in LanguageLevel 2.
+(The ReusableStreamDecode filter itself was properly defined.)
+(lib/gs_frsd.ps [1.3]: 2000/04/24 00:45:38 lpd)
+ - Loading an unknown font gave a spurious "non-string font name"
+message; unknown fonts with names containing style strings like Bold or
+Italic caused an error. (bug introduced since 6.20) (lib/gs_fonts.ps [1.8]:
+2000/04/28 22:03:58 lpd)
+
+Adds a workaround for misnamed glyphs in some Microsoft TrueType font 'post'
+tables. (lib/gs_mgl_e.ps [1.2], lib/gs_ttf.ps [1.4]: 2000/04/08 01:53:16
+lpd)
+
+Completely redesigns the representation of CMaps, to reduce space
+requirements and make comparing them more reasonable, changing gs_cmap to
+gs_cmap_t and gx_code_map to gx_code_map_t. (****** NOTE ****** The
+PostScript code currently only handles a few well-behaved CMap structures.)
+(lib/gs_cmap.ps [1.2], zfcmap.c [1.4], zfont0.c [1.2]: 2000/04/08 03:54:38
+lpd)
+
+Updates version #s to 6.21. (We should have done this earlier.)
+(lib/gs_init.ps [1.7]: 2000/04/10 04:46:36 lpd)
+
+Makes Separation and DeviceN color spaces detect that their tint transform
+procedure is a Function, and call it rather than using its cached values.
+(zcsdevn.c [1.2], zcssepr.c [1.3]: 2000/04/10 19:39:44 lpd)
+
+Adds code to write out CMaps, similar to the code for writing fonts, for
+eventual embedding in PDF output. (zfcmap.c [1.5]: 2000/04/14 07:17:24 lpd)
+
+Completes code for reading and writing CMaps. (lib/gs_cmap.ps [1.4],
+zfcmap.c [1.7]: 2000/04/16 03:05:29 lpd)
+
+Works around a bug in the AdobePS5 Windows driver, which emits CMaps lacking
+the required CMapName entry. (lib/gs_cidfn.ps [1.15], lib/gs_cmap.ps [1.5]:
+2000/04/18 07:18:42 lpd)
+
+Moves the optimization prologue for ps2pdf from the command line to a
+procedure, to avoid shell length limits. (lib/gs_pdfwr.ps [1.3]: 2000/04/18
+16:40:14 lpd)
+
+Removes all remaining direct references to stdin/out/err from the library,
+interpreter, and non-contributed drivers; moves the ersatz definitions of
+stdin/out/err to a new header file. (imainarg.c [1.2]: 2000/04/20 23:30:22
+lpd)
+
+Speeds up Type 1 font loading slightly by removing a conversion from binary
+to hex and back again. (zmisc1.c [1.2]: 2000/04/22 16:03:18 lpd)
+
+Adds a MD5Encode filter, which computes the 16-byte MD5 digest of the input.
+No output is produced until the filter is closed. (zfmd5.c [1.1]: 2000/04/27
+14:39:57 lpd)
+
+Adds a sample file containing a wide variety of PDF annotations; updates
+documentation for this and some other overlooked files.
+(examples/annots.pdf [1.1]: 2000/04/28 10:51:02 lpd)
+
+</pre><h2><a name="6.21 Streams"></a>Streams</h2><pre>
+
+Fixes problems:
+ - FILE_IMPLEMENTATION=both was broken (by the introduction of
+sread_subfile). (sfxfd.c [1.3]: 2000/04/10 02:41:48 lpd)
+ - flushfile and closefile didn't properly flush streams whose final
+target was a procedure, and closefile didn't actually close them. (This is a
+very old bug.) (stream.c [1.6]: 2000/04/18 05:50:15 lpd)
+ - The PixelDifference filters (Predictor = 2) weren't implemented
+for Colors > 4 and BitsPerComponent != 8, and they dropped trailing bytes if
+the length of the data wasn't an exact multiple of the pixel size.
+(spdiff.c [1.2]: 2000/04/22 03:55:22 lpd)
+
+Enhances the ASCII85Encode filter to avoid %! at the beginning of a line of
+output, in addition to avoiding %% which it did already. (sa85x.h [1.2],
+sfilter2.c [1.2]: 2000/04/08 01:30:36 lpd)
+
+Removes all remaining direct references to stdin/out/err from the library,
+interpreter, and non-contributed drivers; moves the ersatz definitions of
+stdin/out/err to a new header file. (std.h [1.2]: 2000/04/20 23:30:22 lpd)
+
+Speeds up Type 1 font loading slightly by removing a conversion from binary
+to hex and back again. (seexec.c [1.2], sfilter.h [1.5]: 2000/04/22 16:03:18
+lpd)
+
+Adds a MD5Encode filter, which computes the 16-byte MD5 digest of the input.
+No output is produced until the filter is closed. (smd5.c [1.1],
+smd5.h [1.1]: 2000/04/27 14:39:57 lpd)
+
+</pre><h2><a name="6.21 Library"></a>Library</h2><pre>
+
+Fixes problems:
+ - Fixes some signed/unsigned char * mismatches. (gdevpsf2.c [1.5]:
+2000/04/07 15:27:14 lpd)
+ - Writing a Type 2 CFF with multiply-encoded glyphs produced an
+incorrect Encoding. Also, when producing output for PDF 1.2 files, no longer
+emits certain opcodes that cause an (unjustified) error in Acrobat Reader 3
+for GNU/Linux. (gdevpsf.h [1.3], gdevpsf2.c [1.6]: 2000/04/10 07:42:31 lpd)
+ - gsmisc.c didn't compile in DEBUG mode on systems with a
+non-standard prototype for the sqrt function. (gsmisc.c [1.3]: 2000/04/10
+16:00:31 lpd)
+ - One picky compiler complained about (1L << 31). (gsmisc.c [1.4]:
+2000/04/10 17:21:41 lpd)
+ - putdeviceparams allowed a PageSize or .MediaSize value with the
+wrong number of elements to take effect. (gsdparam.c [1.2]: 2000/04/19
+05:59:05 lpd)
+ - The elimination of stdin/out/err also eliminated some #defines
+that are needed for error printout. (gsio.h [1.3]: 2000/04/21 06:39:17 lpd)
+ - The structure descriptor for ImageType 3 images was public rather
+than private. (gsiparm3.h [1.3], gximage3.c [1.2]: 2000/04/22 07:02:18 lpd)
+ - The "point matching" feature of TrueType composite glyphs wasn't
+implemented, causing some composite (accented) characters to have their
+accents misplaced. (gstype42.c [1.4]: 2000/04/25 07:22:50 lpd)
+
+Completely redesigns the representation of CMaps, to reduce space
+requirements and make comparing them more reasonable, changing gs_cmap to
+gs_cmap_t and gx_code_map to gx_code_map_t. (****** NOTE ****** The
+PostScript code currently only handles a few well-behaved CMap structures.)
+(gsfcmap.c [1.4], gsfcmap.h [1.2], gxfcmap.h [1.3], gxfont0.h [1.2]:
+2000/04/08 03:54:38 lpd)
+
+Adds Function-based tint_transform procedures for Separation and DeviceN
+color spaces. (gscdevn.c [1.3], gscdevn.h [1.2], gscsepr.c [1.3],
+gscsepr.h [1.2]: 2000/04/10 19:02:19 lpd)
+
+Adds code to write out CMaps, similar to the code for writing fonts, for
+eventual embedding in PDF output. (gdevpsf.h [1.4], gdevpsfm.c [1.1]:
+2000/04/14 07:17:24 lpd)
+
+Completes code for reading and writing CMaps. (gdevpsf.h [1.5],
+gdevpsfm.c [1.2], gsccode.h [1.3], gsfcid.c [1.3], gsfcmap.c [1.5],
+gxcid.h [1.2], gxfcmap.h [1.4]: 2000/04/16 03:05:29 lpd)
+
+Removes the gp_ procedures for managing screen swapping between console and
+graphics, which haven't been used for a long time and are no longer useful.
+(gp.h [1.3]: 2000/04/20 22:47:35 lpd)
+
+Removes all remaining direct references to stdin/out/err from the library,
+interpreter, and non-contributed drivers; moves the ersatz definitions of
+stdin/out/err to a new header file. (gsdevice.c [1.3], gsio.h [1.2],
+gsmisc.c [1.5], gxdevice.h [1.2]: 2000/04/20 23:30:22 lpd)
+
+Adds an essential new file overlooked in the removal of references to
+stdin/out/err. (gxstdio.h [1.1]: 2000/04/20 23:50:20 lpd)
+
+Makes the [e]pswrite and pdfwrite drivers merge adjacent horizontal or
+vertical line segments going in the same direction. This makes a big
+difference for PostScript files produced by certain applications.
+(gdevvec.c [1.2], gdevvec.h [1.2]: 2000/04/25 22:39:54 lpd)
+
+Adds template macros for printer devices that implement print_page_copies
+rather than print_page. (gdevprn.c [1.2], gdevprn.h [1.3]: 2000/04/28
+13:36:16 lpd)
+
+<hr>
+
+<h1><a name="Version6.20"></a>Version 6.20 (2000-04-06)</h1>
+
+<p>
+This fileset includes the first steps towards bringing the pdfwrite driver
+closer to matching Acrobat Distiller 4. Highlights:
+
+<ul>
+
+<li> Reimplementation of CIDFontType 0 support in C rather than PostScript;
+
+<li> Parsing (but not functional implementation) of nearly all the Acrobat
+Distiller 4 parameters;
+
+<li> Implementation of AutoRotatePages and DCTEncode filtering in the PDF
+writer;
+
+<li> A PDF linearizer ("optimizer").
+
+</ul>
+
+<p>
+All problems registered on SourceForge numbered 103963 or lower are closed,
+except for the following: 101549, 101814, 101829, 101905, 101955, 102046,
+102047, 102132, 102146, 102735, 102901, 103016, 103528, 103963.
+
+<pre>
+
+<h2><a name="6.20_Incompatible_changes"></a>Incompatible changes</h2>
+
+(Procedures)
+ - The default value of FPU_TYPE in all Windows and OS/2 makefiles
+is now 387 rather than 0.
+ - The process for reporting problems has changed significantly.
+(PDF writer)
+ - The Cos procedures no longer take the device as an argument,
+except for object-creating procedures, which now take the device rather
+than an allocator.
+ - The is_object member of Cos values is replaced by value_type.
+Clients must use COS_VALUE_IS_OBJECT() to test whether a value is an object
+reference.
+ - The Cos procedures that take C strings no longer copy the string.
+ - The argument of cos_write_object is no longer const.
+(Drivers)
+ - The default BufferSpace for printer drivers is now 4 Mb.
+ - Device halftone order implementations must now provide a new
+bit_index procedure.
+ - The image argument for psdf_setup_image_filters is changed from
+gs_image_t to gs_pixel_image_t.
+ - The font-related psdf_ procedures are renamed psf_.
+(Streams)
+ - The interface to the [T]BCP filters is now in a separate file,
+sbcp.h.
+(PDF interpreter)
+ - The internal beginpage procedure is renamed dictbeginpage, and
+now takes a dictionary argument.
+(Interpreter)
+ - The argument list for the internal build_gs_TrueType_font
+procedure has changed.
+ - The zcharstring_glyph_outline procedure is renamed
+zchar1_glyph_outline.
+ - The Instances dictionary of resources is renamed .Instances.
+(Library)
+ - ImageType 4 images now give an error if a MaskColor value is out
+of the range of possible sample values.
+ - The definition of gs_param_key_t, the key type returned by
+parameter list enumeration, is changed.
+ - Implementors of parameter lists must now call gs_param_list_init
+to initialize the common members.
+ - st_indexed_map is now private. Clients allocating instances of
+this structure must now call alloc_indexed_map.
+ - Setting a transfer map as the identity mapping now requires
+calling gx_set_identity_transfer.
+ - gs_cid_system_info is renamed gs_cid_system_info_t.
+ - The get_outline procedure of a Type 42 or Type 11 (CIDFontType 0)
+font now returns 1 if the string was newly allocated and can be freed by the
+client.
+ - The procs member of gs_type1_data is now an in-line structure
+rather than a pointer to a const structure.
+
+
+<h2><a name="6.20 Documentation"></a>Documentation</h2><pre>
+
+Fixes problems:
+ - If log2_transfer_map_size > 8, identity transfer functions
+returned garbage. The fix requires that if a client wants to set a transfer
+function to the identity mapping, it must call gx_set_identity_transfer
+rather than simply setting the procedure to gs_identity_transfer.
+(doc/News.htm [1.13]: 2000/03/19 17:14:47 lpd)
+ - In PDF files, the page CropBox was not being used to clip the
+output. (doc/News.htm [1.18]: 2000/03/21 23:08:32 lpd)
+ - Fixes several problems in resourceforall and resource loading: the
+operands of resourceforall were restored even in the case of an error in the
+client's procedure; the name Instances had special meaning for some Adobe
+code; resourceforall caused an invalidaccess error if an operand was in
+local VM but the current VM was global; loading a resource from a file could
+cause a typecheck error if the file left values on the operand stack.
+(doc/News.htm [1.25]: 2000/04/04 22:26:02 lpd)
+ - The location of the lists of supported and unsupported drivers was
+incorrect. (doc/Bug-info.htm [1.2]: 2000/04/07 03:01:52 lpd)
+
+Undoes an accidental RCS ID substitution in what was supposed to be literal
+text. (doc/Htmstyle.htm [1.2]: 2000/03/18 22:29:03 lpd)
+
+Increments the version number to 6.20, in anticipation of the next release.
+(We do this at the beginning of the development for a release, not the end.)
+(doc/History6.htm [1.4], doc/News.htm [1.6]: 2000/03/19 00:27:22 lpd)
+
+Splits out the [T]BCP filter interface into a separate file.
+(doc/News.htm [1.7]: 2000/03/19 02:40:18 lpd)
+
+Documents the fact that ImageType 4 images now cause an error for
+out-of-range MaskColor values. (doc/News.htm [1.8]: 2000/03/19 04:32:09 lpd)
+
+Updates the change log with recent changes. (doc/Changes.htm [1.4]:
+2000/03/19 05:39:58 lpd)
+
+Adds a new document listing projects with which we are seeking help. Also
+makes the description of Changes.htm and News.htm more accurate.
+(doc/New-user.htm [1.2], doc/Projects.htm [1.1], doc/Readme.htm [1.3]:
+2000/03/19 06:07:15 lpd)
+
+Changes the default value of BufferSpace to 4 Mb. In desktop applications,
+this is a reasonable value that can substantially improve performance
+(especially for color printers); embedded applications will want to set
+BufferSpace themselves in any case. (doc/News.htm [1.9]: 2000/03/19 06:51:13
+lpd)
+
+Changes the key type returned by parameter list enumeration to include a
+persistence flag, makes C parameter lists support non-persistent keys, and
+upgrades GC descriptors so that parameter lists can be used non-transiently;
+updates implementors of parameter lists to call gs_param_list_init to
+initialize the common members, which is now required. (doc/News.htm [1.10]:
+2000/03/19 15:16:11 lpd)
+
+Documents the fact that drivers that device halftone order implementations
+must now provide the new bit_index procedure. (This should have been
+documented when bit_index was introduced!) (doc/News.htm [1.11]: 2000/03/19
+15:47:47 lpd)
+
+Makes st_indexed_map private. Clients must now use the constructor procedure
+alloc_indexed_map rather than allocating instances directly.
+(doc/News.htm [1.12]: 2000/03/19 16:37:28 lpd)
+
+Update the date and change log for the latest batches of checked-in changes.
+(doc/Changes.htm [1.5]: 2000/03/19 17:29:57 lpd)
+
+Adds a PDF linearizer ("optimizer"). This is a separate utility (not
+integrated with the pdfwrite driver), written in PostScript.
+(doc/Psfiles.htm [1.2]: 2000/03/20 04:31:22 lpd)
+
+Adds parsing for the remaining Acrobat Distiller 4 parameters. Implements
+the LockDistillerParams, xxxDownsampleThreshold, xxxImageDict, and
+xxxACSImageDict distiller parameters. Implements DCTEncode as an
+xxxImageFilter option (it used to cause a crash). Makes the
+AutoFilterxxxImages distiller parameters select JPEG encoding (with ACSDict)
+if the image has 8 bits per component and is not Indexed, and LZW/Flate
+otherwise: this still isn't right, but it's closer. Implementation changes:
+Changes the implementation of distiller parameter dictionaries from stream
+states to parameter lists; changes the test for masks in
+psdf_setup_image_filters, and changes the image argument from gs_image_t to
+gs_pixel_image_t. (doc/News.htm [1.14]: 2000/03/20 05:40:04 lpd)
+
+Moves font-writing support into a new module (gdevpsf*), changing the source
+file names. Adds the ability to write CFF fonts, with either Type 1 or Type
+2 CharStrings; unfortunately, Acrobat Reader appears not to accept CFF fonts
+with Type 1 CharStrings. Adds the ability to convert Type 1 CharStrings to
+Type 2, including optimizing sequences of Type 1 operators into a single
+Type 2 operator. Implements writing CIDFontType 0 CFF fonts (CIDFonts) [NOT
+TESTED]. Starts (just barely) to remove more unneeded information from
+embedded TrueType fonts. (doc/News.htm [1.15]: 2000/03/20 07:02:12 lpd)
+
+Updates the consolidated change log with today's changes.
+(doc/Changes.htm [1.6]: 2000/03/20 07:18:38 lpd)
+
+Starts to move support for CIDFontType 0 and 2 into C code, needed by the
+PDF writer for handling CID-keyed fonts. Implements GlyphDirectory for
+CIDFonts. Makes GDBytes and CIDMapOffset optional for CIDFontType 0 fonts
+that have a GlyphDirectory (not documented in the PLRM, but clearly
+correct). Implements Adobe 3011 features: integer and dictionary CIDMaps,
+and the MetricsCount entry, in CIDFontType 2 fonts (but only in the C code,
+which isn't hooked in yet, not in the PostScript code in gs_cidfn.ps.)
+(doc/News.htm [1.16]: 2000/03/20 19:53:06 lpd)
+
+Notes that the argument list for the internal build_gs_TrueType_font
+procedure has changed, as part of the CIDFont migration to C code.
+(doc/News.htm [1.17]: 2000/03/20 20:04:20 lpd)
+
+Adds invocation scripts and documentation for the PDF "optimizer".
+(man/pdfopt.1 [1.1]: 2000/03/21 17:01:33 lpd)
+
+Updates information about reporting problems when using Ghostview or GSview.
+(doc/Bug-form.htm [1.3], doc/New-user.htm [1.3]: 2000/03/22 22:13:49 lpd)
+
+Checks in the latest consolidated change log. (doc/Changes.htm [1.7]:
+2000/03/24 05:04:55 lpd)
+
+Substantially enhances the Cos object machinery. Interface: Adds a few more
+procedures, including a procedure to create a stream that writes directly
+into a Cos stream object, procedures for putting more kinds of values into
+arrays and dictionaries, and a param_list interface. Changes Cos objects to
+store a reference to the PDF device, and removes the device argument from
+all Cos procedures other than object creation. Replaces the Boolean
+is_object member of Cos values by a value_type enum: clients must now use
+COS_VALUE_IS_OBJECT() to test whether a value is an object reference. To
+reduce allocator overhead, makes the Cos procedures that take C strings no
+longer copy the string. Records whether each Cos object has been written
+into the output, so that in the future (but not in this batch of changes)
+resource definitions can be copied at the end of each page. Implementation:
+Moves more of the implementation of Cos objects to the .c file.
+(doc/News.htm [1.19]: 2000/03/24 06:12:52 lpd)
+
+Adds parsing for the remaining Acrobat Distiller 4 parameters, although most
+of them don't have any effect yet; brings documentation up to date.
+(doc/Ps2pdf.htm [1.3]: 2000/03/28 07:36:58 lpd)
+
+Implements LockDistillerParams; completes the StartPage/EndPage fix checked
+in just before. (doc/Ps2pdf.htm [1.4]: 2000/03/28 07:52:06 lpd)
+
+Changes the default value of FPU_TYPE in all Windows and OS/2 makefiles from
+0 to 387, since all current desktop CPUs include floating point hardware.
+(doc/News.htm [1.20]: 2000/03/28 17:03:48 lpd)
+
+Changes the get_outline / glyph_data procedure for getting encoded font
+outline data to return an indication of whether the outline data were just
+allocated and can be freed by the client. (This is a possibly
+non-backward-compatible change.) (doc/News.htm [1.21]: 2000/03/28 18:47:02
+lpd)
+
+Adds a note about bogus "ANSI aliasing" warnings from the DEC C compiler.
+(doc/Make.htm [1.8]: 2000/03/29 19:29:08 lpd)
+
+Changes the procs structure of gs_type1_data to an in-line structure rather
+than a pointer to a const structure. (Needed for moving CIDFontType 0
+support into C.) (doc/News.htm [1.22]: 2000/03/29 22:10:31 lpd)
+
+Updates the change log with recent changes. (doc/Changes.htm [1.8]:
+2000/03/30 07:59:39 lpd)
+
+Creates a real list of projects on which help would be appreciated.
+(doc/Projects.htm [1.2]: 2000/04/01 00:43:11 lpd)
+
+Finishes implementing the ability to write CIDFontType 0 CFFs. This involved
+a surprising number of changes in other font-related files.
+(doc/News.htm [1.23]: 2000/04/02 07:38:46 lpd)
+
+Updates the documentation on preparing releases to reflect the addition of
+the toolbin directory. (doc/Release.htm [1.7]: 2000/04/02 18:56:58 lpd)
+
+Implements the AutoRotatePages distiller parameter. (doc/Ps2pdf.htm [1.5]:
+2000/04/03 02:54:41 lpd)
+
+Updates the problem reporting procedure to use SourceForge; separates the
+description of the procedure from the reporting form.
+(doc/Bug-form.htm [1.4], doc/Bug-info.htm [1.1], doc/New-user.htm [1.4],
+doc/News.htm [1.24], doc/Readme.htm [1.4]: 2000/04/04 04:14:02 lpd)
+
+Updates release dates and version numbers. (doc/Bug-form.htm [1.5],
+doc/Bug-info.htm [1.3], doc/Htmstyle.htm [1.3], doc/Make.htm [1.9],
+doc/New-user.htm [1.5], doc/Projects.htm [1.3], doc/Ps2pdf.htm [1.6],
+doc/Psfiles.htm [1.3], doc/Readme.htm [1.5], man/ps2pdf.1 [1.4],
+man/ps2ps.1 [1.4]: 2000/04/07 05:21:45 lpd)
+
+Removes redundant material, and the www.aladdin.com distribution point, from
+the release procedure documentation. (doc/Release.htm [1.8]: 2000/04/07
+05:24:29 lpd)
+
+</pre><h2><a name="6.20 Procedures"></a>Procedures</h2><pre>
+
+Fixes problems:
+ - pdfread.dev incorrectly depended on dpsnext_. (int.mak [1.4]:
+2000/03/19 02:00:09 lpd)
+ - The referenced libpng version hadn't been updated to 1.0.5.
+(openvms.mmk [1.3]: 2000/03/20 16:38:46 lpd)
+ - The MSVC++ 6 compiler no longer recognizes the /FPi87 switch.
+(msvccmd.mak [1.2]: 2000/03/31 05:06:53 lpd)
+ - MSVC versions before 5, not before 6, recognize /FPi87.
+(msvccmd.mak [1.3]: 2000/03/31 05:50:33 lpd)
+ - Removes some occurrences of $,I,d,: that shouldn't be substituted.
+(toolbin/pre [1.2]: 2000/04/07 05:20:35 lpd)
+
+Increments the version number to 6.20, in anticipation of the next release.
+(We do this at the beginning of the development for a release, not the end.)
+(version.mak [1.6]: 2000/03/19 00:27:22 lpd)
+
+Adds a pseudo-encoding for the CFF StandardStrings that represent
+characters. (devs.mak [1.3], int.mak [1.3], unixinst.mak [1.5]: 2000/03/19
+00:38:50 lpd)
+
+Updates makefiles with dependencies for recent changes. (int.mak [1.5],
+lib.mak [1.3]: 2000/03/19 05:37:38 lpd)
+
+Adds dependencies for the new implementation of FunctionType 4 functions.
+(int.mak [1.6]: 2000/03/19 07:03:53 lpd)
+
+Splits off "vanilla" Functions into separate files, in anticipation of
+removing them (they were only used to implement PostScript Calculator
+Functions). (lib.mak [1.4]: 2000/03/19 07:33:08 lpd)
+
+Update the date and change log for the latest batches of checked-in changes.
+(version.mak [1.7]: 2000/03/19 17:29:57 lpd)
+
+Moves font-writing support into a new module (gdevpsf*), changing the source
+file names. Adds the ability to write CFF fonts, with either Type 1 or Type
+2 CharStrings; unfortunately, Acrobat Reader appears not to accept CFF fonts
+with Type 1 CharStrings. Adds the ability to convert Type 1 CharStrings to
+Type 2, including optimizing sequences of Type 1 operators into a single
+Type 2 operator. Implements writing CIDFontType 0 CFF fonts (CIDFonts) [NOT
+TESTED]. Starts (just barely) to remove more unneeded information from
+embedded TrueType fonts. (devs.mak [1.4], lib.mak [1.5]: 2000/03/20 07:02:12
+lpd)
+
+Updates dependencies to reflect today's batches of checked-in changes.
+(devs.mak [1.5], int.mak [1.7], lib.mak [1.6]: 2000/03/20 07:16:35 lpd)
+
+Updates the makefile for the renaming of gdevpsdf.c => gdevpsdu.c.
+(devs.mak [1.6]: 2000/03/20 19:30:35 lpd)
+
+Starts to move support for CIDFontType 0 and 2 into C code, needed by the
+PDF writer for handling CID-keyed fonts. Implements GlyphDirectory for
+CIDFonts. Makes GDBytes and CIDMapOffset optional for CIDFontType 0 fonts
+that have a GlyphDirectory (not documented in the PLRM, but clearly
+correct). Implements Adobe 3011 features: integer and dictionary CIDMaps,
+and the MetricsCount entry, in CIDFontType 2 fonts (but only in the C code,
+which isn't hooked in yet, not in the PostScript code in gs_cidfn.ps.)
+(int.mak [1.8], lib.mak [1.7]: 2000/03/20 19:53:06 lpd)
+
+Extends the C support for CIDFontType 0 fonts to include those with FontType
+2 subfonts in the FDArray (an Adobe 3011 addition, specifically for CFF
+fonts). (int.mak [1.9]: 2000/03/21 07:43:42 lpd)
+
+Adds invocation scripts and documentation for the PDF "optimizer".
+(unixinst.mak [1.6]: 2000/03/21 17:01:33 lpd)
+
+Splits off the ReusableStreamDecode filter as a separate module, since
+CIDFontType 0 fonts will use it even in LanguageLevels below 3.
+(int.mak [1.10]: 2000/03/21 21:34:57 lpd)
+
+Makes file streams remember the file name, needed for efficiently
+implementing reusable streams. (int.mak [1.11]: 2000/03/23 02:13:40 lpd)
+
+Checks in the latest consolidated change log. (version.mak [1.8]: 2000/03/24
+05:04:55 lpd)
+
+Changes the implementation of incrementally loaded CIDFontType 0 fonts to
+use a ReusableStreamDecode filter, in anticipation of moving the BuildGlyph
+procedure for these fonts from PostScript to C. (int.mak [1.12],
+version.mak [1.9]: 2000/03/27 16:36:24 lpd)
+
+Changes the default value of FPU_TYPE in all Windows and OS/2 makefiles from
+0 to 387, since all current desktop CPUs include floating point hardware.
+(msvc32.mak [1.3], msvclib.mak [1.3], os2.mak [1.4], watcw32.mak [1.3]:
+2000/03/28 17:03:48 lpd)
+
+Updates the change log with recent changes. (version.mak [1.10]: 2000/03/30
+07:59:39 lpd)
+
+Cleans up some dependencies missed at the last checkin. (devs.mak [1.7],
+int.mak [1.13]: 2000/03/31 05:03:30 lpd)
+
+Finishes implementing the ability to write CIDFontType 0 CFFs. This involved
+a surprising number of changes in other font-related files. (int.mak [1.14]:
+2000/04/02 07:38:46 lpd)
+
+Adds a variety of tools used to build and distribute Ghostscript releases.
+The only documentation is comments in the files themselves, and there isn't
+much of it. All aspects of these tools are subject to change without notice.
+(toolbin/3way.tcl [1.1], toolbin/cvs2hist.py [1.1],
+toolbin/errlist.tcl [1.1], toolbin/gsmake.tcl [1.1],
+toolbin/headers.tcl [1.1], toolbin/leaks.tcl [1.1],
+toolbin/makeset.tcl [1.1], toolbin/package.tcl [1.1], toolbin/pre [1.1],
+toolbin/pre.chk [1.1], toolbin/precheck.tcl [1.1], toolbin/smoke.ps [1.1],
+toolbin/suite.tcl [1.1], toolbin/tmake.tcl [1.1]: 2000/04/02 18:44:27 lpd)
+
+Moves gsindent from src to toolbin. (toolbin/gsindent [1.1]: 2000/04/02
+18:56:25 lpd)
+
+Adds an #include required by the Watcom compiler. (devs.mak [1.8]:
+2000/04/05 19:51:54 lpd)
+
+Adds a missing dependency. (lib.mak [1.8]: 2000/04/07 03:00:56 lpd)
+
+Updates a few dependencies for the release. (int.mak [1.15]: 2000/04/07
+05:23:12 lpd)
+
+Updates the build date for the release. (version.mak [1.11]: 2000/04/07
+05:25:18 lpd)
+
+Adds .cvsignore files, to prevent bogus warnings on cvs update.
+(.cvsignore [1.1], src/.cvsignore [1.1]: 2000/04/05 19:46:04 lpd)
+
+</pre><h2><a name="6.20 Utilities"></a>Utilities</h2><pre>
+
+Fixes problems:
+ - A couple of places in the Windows code didn't correctly handle
+Ghostscript version 6.64, 7 April 2001
+21:45:03 lpd)
+ - Replaces a final exit() with a return, to avoid a compiler
+warning. (genconf.c [1.2]: 2000/04/05 19:53:27 lpd)
+
+Makes geninit remove whitespace adjacent to hex and base-85 string literals.
+(geninit.c [1.2]: 2000/03/18 22:51:24 lpd)
+
+Adds a PDF linearizer ("optimizer"). This is a separate utility (not
+integrated with the pdfwrite driver), written in PostScript.
+(lib/pdfopt.ps [1.1], lib/pdfwrite.ps [1.1]: 2000/03/20 04:31:22 lpd)
+
+Replaces the O(N^2) sorting algorithm for printing unencoded characters with
+a O(N log N) algorithm, which makes printing Unicode and Chinese/Japanese
+fonts practical. (lib/prfont.ps [1.2]: 2000/03/21 06:39:49 lpd)
+
+Adds invocation scripts and documentation for the PDF "optimizer".
+(lib/pdfopt [1.1], lib/pdfopt.bat [1.1], lib/pdfopt.ps [1.2]: 2000/03/21
+17:01:33 lpd)
+
+Splits off the ReusableStreamDecode filter as a separate module, since
+CIDFontType 0 fonts will use it even in LanguageLevels below 3.
+(zfreuse.c [1.2]: 2000/03/21 21:34:57 lpd)
+
+Adds a variety of tools used to build and distribute Ghostscript releases.
+The only documentation is comments in the files themselves, and there isn't
+much of it. All aspects of these tools are subject to change without notice.
+(gsindent [1.2]: 2000/04/02 18:44:27 lpd)
+
+</pre><h2><a name="6.20 Drivers"></a>Drivers</h2><pre>
+
+Fixes problems:
+ - The color_info member of the Windows and OS/2 printer devices (and
+other devices using PC-style palettes) wasn't initialized properly, causing
+improper behavior. (gdevos2p.c [1.2], gdevpccm.h [1.2], gdevwpr2.c [1.3]:
+2000/03/20 21:05:11 lpd)
+ - Fixes a bug in the mswinpr2 driver in the handling of
+BitsPerPixel. (gdevwpr2.c [1.4]: 2000/03/22 17:08:33 lpd)
+ - In PCL XL output (pxl* drivers), if a PostScript image didn't
+provide enough source data, the remainder of the output image was
+erroneously filled with pixel value 0 (typically black or the foreground
+color). (gdevpx.c [1.2]: 2000/03/22 20:55:21 lpd)
+ - In the output of the pswrite driver (pdf2ps, ps2ps), the showpage
+for each page occurred before, not after, the restore that ended the page
+contents. This contradicted Adobe's documentation, and made utilities like
+N-up printing not work properly. (gdevps.c [1.4]: 2000/03/28 00:52:46 lpd)
+ - The PCL XL 2.0 value for sRGB color space was wrong, and the
+attribute for writing mode was missing. (gdevpxat.h [1.2], gdevpxen.h [1.2]:
+2000/03/29 18:19:44 lpd)
+ - When printing on monochrome LaserJet/DeskJet printers, the driver
+didn't set the number of copies to 1; on the LJ 4si, this sometimes caused
+double printing. (gdevdjet.c [1.2]: 2000/04/03 14:36:12 lpd)
+ - Updates clients for the change in the last argument of
+cff_string_index from uint * to int *. (gdevpsf2.c [1.4]: 2000/04/05
+19:55:29 lpd)
+
+Adds parsing for the remaining Acrobat Distiller 4 parameters. Implements
+the LockDistillerParams, xxxDownsampleThreshold, xxxImageDict, and
+xxxACSImageDict distiller parameters. Implements DCTEncode as an
+xxxImageFilter option (it used to cause a crash). Makes the
+AutoFilterxxxImages distiller parameters select JPEG encoding (with ACSDict)
+if the image has 8 bits per component and is not Indexed, and LZW/Flate
+otherwise: this still isn't right, but it's closer. Implementation changes:
+Changes the implementation of distiller parameter dictionaries from stream
+states to parameter lists; changes the test for masks in
+psdf_setup_image_filters, and changes the image argument from gs_image_t to
+gs_pixel_image_t. (gdevpsdf.h [1.4], gdevpsdi.c [1.3], gdevpsdp.c [1.3]:
+2000/03/20 05:40:04 lpd)
+
+Moves font-writing support into a new module (gdevpsf*), changing the source
+file names. Adds the ability to write CFF fonts, with either Type 1 or Type
+2 CharStrings; unfortunately, Acrobat Reader appears not to accept CFF fonts
+with Type 1 CharStrings. Adds the ability to convert Type 1 CharStrings to
+Type 2, including optimizing sequences of Type 1 operators into a single
+Type 2 operator. Implements writing CIDFontType 0 CFF fonts (CIDFonts) [NOT
+TESTED]. Starts (just barely) to remove more unneeded information from
+embedded TrueType fonts. (gdevpsd1.c [1.2], gdevpsdf.c [1.3],
+gdevpsdf.h [1.5], gdevpsdt.c [1.2], gdevpsf.h [1.1], gdevpsf1.c [1.1],
+gdevpsf2.c [1.1], gdevpsft.c [1.1], gdevpsfu.c [1.1], gdevpsfx.c [1.1]:
+2000/03/20 07:02:12 lpd)
+
+Renames an inappropriately named file. (gdevpsdf.c [1.4], gdevpsdf.h [1.6],
+gdevpsdu.c [1.1]: 2000/03/20 19:03:43 lpd)
+
+Extends the C support for CIDFontType 0 fonts to include those with FontType
+2 subfonts in the FDArray (an Adobe 3011 addition, specifically for CFF
+fonts). (gdevpsf.h [1.2]: 2000/03/21 07:43:42 lpd)
+
+Changes the procs structure of gs_type1_data to an in-line structure rather
+than a pointer to a const structure. (Needed for moving CIDFontType 0
+support into C.) (gdevpsf1.c [1.2], gdevpsf2.c [1.2], gdevpsfx.c [1.2]:
+2000/03/29 22:10:31 lpd)
+
+Finishes implementing the ability to write CIDFontType 0 CFFs. This involved
+a surprising number of changes in other font-related files.
+(gdevpsf2.c [1.3], gdevpsfu.c [1.2]: 2000/04/02 07:38:45 lpd)
+
+Slightly simplifies the output of the psmono and psgray drivers.
+(gdevpsim.c [1.2]: 2000/04/02 19:57:37 lpd)
+
+Adds an #include required by the Watcom compiler. (gdevpsf1.c [1.3]:
+2000/04/05 19:51:54 lpd)
+
+</pre><h2><a name="6.20 PDF writer"></a>PDF writer</h2><pre>
+
+Fixes problems:
+ - The pointer enumeration procedure for pdf_image_enum was wrong,
+possibly producing a mangled pointer and a memory access error if a garbage
+collection occured while writing an image in a PDF file. (gdevpdfi.c [1.5]:
+2000/03/20 05:54:13 lpd)
+ - The computation for testing whether a tiled pattern could be
+represented in line, and whether it exceeded Acrobat Reader's size limit,
+was wrong, causing some patterns not to be represented as Patterns.
+(gdevpdfi.c [1.6]: 2000/03/20 05:58:15 lpd)
+ - When ProcessColorModel=/DeviceCMYK, if the first object on a page
+or after changing the clipping path was white, the PDF writer would write it
+as black. (gdevpdfu.c [1.3]: 2000/03/21 18:36:36 lpd)
+ - If a page ended with an incomplete outline tree, an invalid memory
+access occurred. (gdevpdf.c [1.3], gdevpdfm.c [1.2]: 2000/03/24 05:09:56
+lpd)
+ - The SP pdfmark didn't check that its argument was a graphics
+stream. (gdevpdfm.c [1.4]: 2000/03/24 06:18:39 lpd)
+ - The name of the EndPage Distiller parameter collided with the
+EndPage page device parameter. (gdevpdfp.c [1.4]: 2000/03/28 07:45:25 lpd)
+ - If two embedded fonts had the same base font, the PDF file could
+wind up with an invalid entry in the xref table. (gdevpdft.c [1.4]:
+2000/04/01 01:18:32 lpd)
+
+Adds parsing for the remaining Acrobat Distiller 4 parameters. Implements
+the LockDistillerParams, xxxDownsampleThreshold, xxxImageDict, and
+xxxACSImageDict distiller parameters. Implements DCTEncode as an
+xxxImageFilter option (it used to cause a crash). Makes the
+AutoFilterxxxImages distiller parameters select JPEG encoding (with ACSDict)
+if the image has 8 bits per component and is not Indexed, and LZW/Flate
+otherwise: this still isn't right, but it's closer. Implementation changes:
+Changes the implementation of distiller parameter dictionaries from stream
+states to parameter lists; changes the test for masks in
+psdf_setup_image_filters, and changes the image argument from gs_image_t to
+gs_pixel_image_t. (gdevpdfi.c [1.4]: 2000/03/20 05:40:04 lpd)
+
+Moves font-writing support into a new module (gdevpsf*), changing the source
+file names. Adds the ability to write CFF fonts, with either Type 1 or Type
+2 CharStrings; unfortunately, Acrobat Reader appears not to accept CFF fonts
+with Type 1 CharStrings. Adds the ability to convert Type 1 CharStrings to
+Type 2, including optimizing sequences of Type 1 operators into a single
+Type 2 operator. Implements writing CIDFontType 0 CFF fonts (CIDFonts) [NOT
+TESTED]. Starts (just barely) to remove more unneeded information from
+embedded TrueType fonts. (gdevpdff.c [1.2], gdevpdfw.c [1.2]: 2000/03/20
+07:02:12 lpd)
+
+Substantially enhances the Cos object machinery. Interface: Adds a few more
+procedures, including a procedure to create a stream that writes directly
+into a Cos stream object, procedures for putting more kinds of values into
+arrays and dictionaries, and a param_list interface. Changes Cos objects to
+store a reference to the PDF device, and removes the device argument from
+all Cos procedures other than object creation. Replaces the Boolean
+is_object member of Cos values by a value_type enum: clients must now use
+COS_VALUE_IS_OBJECT() to test whether a value is an object reference. To
+reduce allocator overhead, makes the Cos procedures that take C strings no
+longer copy the string. Records whether each Cos object has been written
+into the output, so that in the future (but not in this batch of changes)
+resource definitions can be copied at the end of each page. Implementation:
+Moves more of the implementation of Cos objects to the .c file.
+(gdevpdf.c [1.4], gdevpdfi.c [1.7], gdevpdfm.c [1.3], gdevpdfo.c [1.2],
+gdevpdfo.h [1.2], gdevpdfr.c [1.2], gdevpdfu.c [1.4], gdevpdfx.h [1.3]:
+2000/03/24 06:12:52 lpd)
+
+Changes a few initializations to suppress warnings from one picky compiler
+that doesn't like ptr = buf - 1 where buf is an array. (gdevpdfr.c [1.3]:
+2000/03/28 02:01:34 lpd)
+
+Adds parsing for the remaining Acrobat Distiller 4 parameters, although most
+of them don't have any effect yet; brings documentation up to date.
+(gdevpdf.c [1.5], gdevpdfp.c [1.3], gdevpdfx.h [1.4]: 2000/03/28 07:36:58
+lpd)
+
+Implements LockDistillerParams; completes the StartPage/EndPage fix checked
+in just before. (gdevpdf.c [1.6], gdevpdfp.c [1.5], gdevpdfx.h [1.5]:
+2000/03/28 07:52:06 lpd)
+
+Changes the initial values of the "job control" parameters to match Acrobat
+Distiller 4. (gdevpdf.c [1.7], gdevpdfp.c [1.6], gdevpdfx.h [1.6]:
+2000/03/28 07:57:14 lpd)
+
+Implements the AutoRotatePages distiller parameter. (gdevpdf.c [1.8],
+gdevpdft.c [1.5], gdevpdfu.c [1.5], gdevpdfx.h [1.7]: 2000/04/03 02:54:41
+lpd)
+
+</pre><h2><a name="6.20 Interpreter (PDF)"></a>Interpreter (PDF)</h2><pre>
+
+Fixes problems:
+ - Reading embedded compressed CIDFonts wasn't implemented.
+(lib/pdf_font.ps [1.3]: 2000/03/19 01:28:59 lpd)
+ - PDF images with DeviceN color spaces caused an error.
+(lib/pdf_draw.ps [1.2]: 2000/03/19 01:44:53 lpd)
+ - PDF images with a Mask ignored the mask. (lib/pdf_draw.ps [1.3]:
+2000/03/19 01:46:27 lpd)
+ - the PDF interpreter hadn't been updated for the move to
+library-based FunctionType 4 Functions, and still tried to bind the names
+true and false to the no longer existing operators .true and .false.
+(lib/pdf_draw.ps [1.5]: 2000/03/19 07:37:03 lpd)
+ - FunctionType 2 and 3 functions didn't work.
+(lib/pdf_draw.ps [1.6]: 2000/03/19 15:23:10 lpd)
+ - In PDF files, the page CropBox was not being used to clip the
+output. (lib/pdf_main.ps [1.4], lib/pdf_ops.ps [1.3]: 2000/03/21 23:08:32
+lpd)
+ - The "fix" for FunctionTypes 2 and 3 in PDF files had made things
+worse, because the code didn't distinguish between resolving to a PostScript
+function (for shadings) and resolving to a PostScript procedure (for
+halftones, BG/UCR, alternate color space mapping, etc.)
+(lib/pdf_draw.ps [1.7]: 2000/03/23 18:31:46 lpd)
+ - Text with a Pattern color scaled the pattern according to the text
+matrix, not the default matrix of the marking context.
+(lib/pdf_base.ps [1.6], lib/pdf_main.ps [1.5], lib/pdf_ops.ps [1.4]:
+2000/03/30 18:01:58 lpd)
+ - Resolving a Shading didn't create a reusable stream for the
+shading data; since the data was then read at unpredictable times, the
+shading or other constructs in the PDF file could read incorrect data.
+(lib/pdf_draw.ps [1.8]: 2000/04/03 06:01:25 lpd)
+
+Adds a lforall procedure for the PDF linearizer. (lib/pdf_base.ps [1.3]:
+2000/03/19 01:50:05 lpd)
+
+Changes the PDF interpreter so that following an object reference doesn't
+store the result back into the referring slot, and so that # # R always
+creates an indirect object. This is necessary for the PDF linearizer. It
+shouldn't have any visible effect (other than a possible small performance
+cost). (lib/pdf_base.ps [1.4], lib/pdf_draw.ps [1.4]: 2000/03/19 01:53:58
+lpd)
+
+Refactors some code to make it usable by the PDF linearizer.
+(lib/pdf_main.ps [1.3]: 2000/03/19 17:26:42 lpd)
+
+Speeds up loading embedded Type 1 fonts a little. (lib/pdf_base.ps [1.5],
+lib/pdf_font.ps [1.4]: 2000/03/24 07:42:16 lpd)
+
+Speeds up reading embedded Type 1 fonts a little more.
+(lib/pdf_font.ps [1.5]: 2000/03/24 16:28:26 lpd)
+
+</pre><h2><a name="6.20 Interpreter"></a>Interpreter</h2><pre>
+
+Fixes problems:
+ - Font substitution was broken. (lib/gs_fonts.ps [1.3]: 2000/03/19
+00:22:05 lpd)
+ - The CFF reader gave an error if a font included any Subrs (it's
+very surprising that this hasn't surfaced before, but apparently Acrobat
+Distiller always produces CFF fonts with no Subrs); the CFF reader didn't
+default lenIV to -1 for Type 1 CharStrings; the CFF reader wasn't able to
+read CIDFonts. (lib/gs_cff.ps [1.3], lib/gs_cidfn.ps [1.4]: 2000/03/19
+00:45:40 lpd)
+ - EXTEND_NAMES had stopped working, because not all places that
+needed the index of a name ref used name_index rather than r_size
+(ilocate.c), and because the high_index value in the name sub-table was set
+incorrectly (iname.c). (ilocate.c [1.2], iname.c [1.2]: 2000/03/19 01:33:23
+lpd)
+ - The attribute check for Functions being executed was incorrect
+(always succeeded). (zfunc.c [1.2]: 2000/03/19 02:12:37 lpd)
+ - s_add_filter didn't ensure enough buffering. This entailed moving
+the NullEncode/Decode filters to stream.[hc]. (sfilter1.c [1.2]: 2000/03/19
+03:15:02 lpd)
+ - The parameters of SubFileDecode filters weren't initialized fully
+(required by a change in this version). (zfilter.c [1.3]: 2000/03/19
+04:03:45 lpd)
+ - The AutoPositionEPSFiles Distiller parameter was misspelled
+AutoPositionEPSFile. (lib/gs_pdfwr.ps [1.2]: 2000/03/19 05:03:31 lpd)
+ - Enumerating the elements of a dictionary-based parameter list
+returned garbage for the keys. (iparam.c [1.2]: 2000/03/19 15:13:13 lpd)
+ - .buildfont0 should not check CIDSystemInfo compatibility. The
+PLRM3 says PostScript interpreters do not make this check, even though the
+PLRM2 says compatibility is required (!). (zfcmap.c [1.2]: 2000/03/19
+16:53:50 lpd)
+ - If log2_transfer_map_size > 8, identity transfer functions
+returned garbage. The fix requires that if a client wants to set a transfer
+function to the identity mapping, it must call gx_set_identity_transfer
+rather than simply setting the procedure to gs_identity_transfer.
+(zcolor.c [1.2]: 2000/03/19 17:14:47 lpd)
+ - Separation color spaces didn't store the separation name.
+(zcssepr.c [1.2]: 2000/03/19 17:21:36 lpd)
+ - The addition of the dummy cid_Setup procedure in gs 6.01 was
+accidentally commented out. (lib/gs_cidfn.ps [1.5]: 2000/03/21 00:11:55 lpd)
+ - The test for whether an CIDFontType 2 outline string was large
+enough to include prefixed metrics was backwards, which would have caused
+problems with any font that used MetricsCount. (zfcid.c [1.3]: 2000/03/21
+00:43:17 lpd)
+ - A couple of places in the Windows code didn't correctly handle
+Ghostscript version numbers of the form #.0#. (dwsetup.cpp [1.2]: 2000/03/22
+21:45:03 lpd)
+ - In some cases, re-registering an existing font or CIDFont with
+definefont would cause an invalidfont error. (zbfont.c [1.4],
+zfont42.c [1.3]: 2000/03/28 18:20:39 lpd)
+ - Re-registering a CIDFont with definefont, or defining a CIDFont
+with definefont instead of /CIDFont defineresource, caused an invalidfont
+error or a crash. (lib/gs_cidfn.ps [1.9], lib/gs_fonts.ps [1.4]: 2000/03/28
+18:21:50 lpd)
+ - The new C BuildGlyph code for CIDFontType 0 fonts didn't handle
+GlyphDirectory or Type 2 CharStrings correctly. (lib/gs_cidfn.ps [1.12],
+zfcid.c [1.8]: 2000/03/31 23:21:57 lpd)
+ - The internaldict "operator" was allocated in local VM, preventing
+it from being bound into procedures allocated in global VM.
+(lib/gs_init.ps [1.6]: 2000/04/04 22:16:02 lpd)
+ - If there was a CIDInit ProcSet defined in the filesystem, the code
+for initializing the built-in CIDInit ProcSet became confused.
+(lib/gs_cidfn.ps [1.13]: 2000/04/04 22:17:33 lpd)
+ - Fixes several problems in resourceforall and resource loading: the
+operands of resourceforall were restored even in the case of an error in the
+client's procedure; the name Instances had special meaning for some Adobe
+code; resourceforall caused an invalidaccess error if an operand was in
+local VM but the current VM was global; loading a resource from a file could
+cause a typecheck error if the file left values on the operand stack.
+(interp.c [1.3], lib/gs_ccfnt.ps [1.2], lib/gs_res.ps [1.3]: 2000/04/04
+22:26:02 lpd)
+ - resourceforall didn't enumerate external (loadable) instances, and
+would enumerate an instance twice if it had both a local and a global
+definition. (lib/gs_res.ps [1.4]: 2000/04/05 21:07:02 lpd)
+ - The implementation of resourcestatus wasn't compatible with some
+badly written code in an Adobe font downloader that assumes that the
+implementation of resourcestatus in Generic and Font is the same.
+(lib/gs_res.ps [1.5]: 2000/04/05 21:20:07 lpd)
+ - The just-checked-in fixed for resourceforall didn't work properly
+for the IdiomSet category. (They probably failed for other categories that
+had no instances, but we didn't check this.) (lib/gs_res.ps [1.6]:
+2000/04/05 21:51:43 lpd)
+ - Some Adobe font downloading code assumed that loading a resource
+file would never leave extra values on the stack; our implementation didn't
+ensure this (by popping them if needed). (lib/gs_res.ps [1.8]: 2000/04/06
+04:50:28 lpd)
+ - If an alphabetic font defined and used a .notdef character,
+pdfwrite always converted it to a bitmap. (lib/gs_lgo_e.ps [1.2]: 2000/04/07
+02:48:23 lpd)
+
+Provides a gs_atan2_degrees procedure to parallel sin and cos.
+(zmath.c [1.2]: 2000/03/18 23:10:39 lpd)
+
+Speeds up string garbage collection by scanning unmodified string regions
+faster. (igcstr.c [1.2]: 2000/03/18 23:29:32 lpd)
+
+Adds the ImagemaskTrapping parameter to the trapping state.
+(lib/gs_trap.ps [1.2]: 2000/03/18 23:35:53 lpd)
+
+Increments the version number to 6.20, in anticipation of the next release.
+(We do this at the beginning of the development for a release, not the end.)
+(lib/gs_init.ps [1.4]: 2000/03/19 00:27:22 lpd)
+
+Adds a pseudo-encoding for the CFF StandardStrings that represent
+characters. (lib/gs_cff.ps [1.2], lib/gs_css_e.ps [1.1]: 2000/03/19 00:38:50
+lpd)
+
+Refactors the code for getting Type 1/2/4 font parameters so it can be used
+for FDArray entries of CIDFontType 0 fonts. (ifont1.h [1.2], zfont1.c [1.2]:
+2000/03/19 02:07:45 lpd)
+
+Speeds up Function evaluation slightly, by preallocating space for a
+reasonable number of operands and results on the C stack rather than always
+allocating it on the heap. (zfunc.c [1.3]: 2000/03/19 02:16:58 lpd)
+
+Adds a public procedure for determining whether a PostScript object is a
+Function, and if so, returning the pointer to the gs_function_t structure.
+(ifunc.h [1.2], zfunc.c [1.4]: 2000/03/19 02:22:01 lpd)
+
+Splits out the [T]BCP filter interface into a separate file. (zfbcp.c [1.2]:
+2000/03/19 02:40:18 lpd)
+
+Adds a skip_count parameter to the SubFileDecode filter, giving the number
+of initial bytes or records to skip over. (Needed for printing FunctionType
+4 functions, possibly useful for other things.) (sfilter1.c [1.3]:
+2000/03/19 03:20:18 lpd)
+
+Replaces the implementation of FunctionType 4 functions at the PostScript
+language level with one that uses the new library-based facilities.
+(zdevice2.c [1.2], zfunc4.c [1.2]: 2000/03/19 06:56:23 lpd)
+
+Changes the key type returned by parameter list enumeration to include a
+persistence flag, makes C parameter lists support non-persistent keys, and
+upgrades GC descriptors so that parameter lists can be used non-transiently;
+updates implementors of parameter lists to call gs_param_list_init to
+initialize the common members, which is now required. (iparam.c [1.3]:
+2000/03/19 15:16:11 lpd)
+
+Makes Separation and DeviceN color spaces convert their tint transform
+function to a FunctionType 4 Function if possible, for better accuracy and
+to allow writing in PDF files. (lib/gs_lev2.ps [1.2], lib/gs_ll3.ps [1.2]:
+2000/03/19 15:28:34 lpd)
+
+Makes st_indexed_map private. Clients must now use the constructor procedure
+alloc_indexed_map rather than allocating instances directly.
+(zcsindex.c [1.2]: 2000/03/19 16:37:28 lpd)
+
+Refactors the code for building fonts so it can be used for FDArray entries
+of CIDFontType 0 fonts. (bfont.h [1.2], zbfont.c [1.2]: 2000/03/19 16:45:47
+lpd)
+
+Adds a .fileposition operator that will read the position even of
+non-positionable streams, needed for the PDF linearizer. (zfileio.c [1.3]:
+2000/03/20 04:30:49 lpd)
+
+Starts to move support for CIDFontType 0 and 2 into C code, needed by the
+PDF writer for handling CID-keyed fonts. Implements GlyphDirectory for
+CIDFonts. Makes GDBytes and CIDMapOffset optional for CIDFontType 0 fonts
+that have a GlyphDirectory (not documented in the PLRM, but clearly
+correct). Implements Adobe 3011 features: integer and dictionary CIDMaps,
+and the MetricsCount entry, in CIDFontType 2 fonts (but only in the C code,
+which isn't hooked in yet, not in the PostScript code in gs_cidfn.ps.)
+(icid.h [1.1], ifont.h [1.2], ifont42.h [1.1], zcid.c [1.2], zfcid.c [1.1],
+zfcmap.c [1.3], zfont42.c [1.2]: 2000/03/20 19:53:06 lpd)
+
+Hooks the new CIDMap code into the BuildGlyph procedure for CIDFontType 2
+fonts. (Contrary to a previous log comment, MetricsCount is already hooked
+in.) Support for CIDFontType 2 fonts is now implemented entirely in C, as
+for Type 42 fonts. (lib/gs_cidfn.ps [1.6], zfcid.c [1.2]: 2000/03/21
+00:32:15 lpd)
+
+Extends the C support for CIDFontType 0 fonts to include those with FontType
+2 subfonts in the FDArray (an Adobe 3011 addition, specifically for CFF
+fonts). (ifont2.h [1.1], zfcid.c [1.4], zfont2.c [1.2]: 2000/03/21 07:43:42
+lpd)
+
+Changes Subr loading for CIDFontType 0 fonts from lazy to immediate, so that
+C code can be guaranteed access to the Subrs. (In every CIDFontType 0 font
+that we have seen, SubrCount is 5, so this has no significant time or space
+cost.) Also adds support for FDBytes > 1 in GlyphDirectory definitions.
+(lib/gs_cidfn.ps [1.7]: 2000/03/21 20:06:44 lpd)
+
+Splits off the ReusableStreamDecode filter as a separate module, since
+CIDFontType 0 fonts will use it even in LanguageLevels below 3.
+(lib/gs_frsd.ps [1.1], lib/gs_ll3.ps [1.3], zfrsd.c [1.1]: 2000/03/21
+21:34:57 lpd)
+
+Makes file streams remember the file name, needed for efficiently
+implementing reusable streams. (zfile.c [1.3], zfileio.c [1.4]: 2000/03/23
+02:13:40 lpd)
+
+Changes the new .filename operator to return true/false rather than causing
+an error; redefines findlibfile in terms of a simpler .libfile operator +
+.filename. (lib/gs_init.ps [1.5], zfile.c [1.4], zfileio.c [1.5]: 2000/03/23
+18:47:17 lpd)
+
+Finishes implementing the file case of ReusableStreamDecode. This required
+adding the ability to restrict file-reading streams to a subfile.
+(lib/gs_frsd.ps [1.2], sfilter1.c [1.4], zfileio.c [1.6], zfrsd.c [1.2]:
+2000/03/24 03:59:42 lpd)
+
+Changes the implementation of incrementally loaded CIDFontType 0 fonts to
+use a ReusableStreamDecode filter, in anticipation of moving the BuildGlyph
+procedure for these fonts from PostScript to C. (lib/gs_cidfn.ps [1.8],
+zbfont.c [1.3], zfcid.c [1.5]: 2000/03/27 16:36:24 lpd)
+
+Changes the get_outline / glyph_data procedure for getting encoded font
+outline data to return an indication of whether the outline data were just
+allocated and can be freed by the client. (This is a possibly
+non-backward-compatible change.) (zfcid.c [1.6]: 2000/03/28 18:47:02 lpd)
+
+Changes the procs structure of gs_type1_data to an in-line structure rather
+than a pointer to a const structure. (Needed for moving CIDFontType 0
+support into C.) (zfont1.c [1.3]: 2000/03/29 22:10:31 lpd)
+
+Finishes moving support for CIDFontType 0 fonts from PostScript to C.
+(ifont.h [1.3], ifont42.h [1.2], lib/gs_cidfn.ps [1.10], zfcid.c [1.7],
+zfont42.c [1.4]: 2000/03/31 04:55:18 lpd)
+
+Allows dictionaries as the value of CIDMap resources. (Also removes an
+unrelated obsolete comment.) (lib/gs_cidfn.ps [1.11]: 2000/03/31 05:11:30
+lpd)
+
+Finishes implementing the ability to write CIDFontType 0 CFFs. This involved
+a surprising number of changes in other font-related files. (ichar1.h [1.2],
+ifcid.h [1.1], zchar1.c [1.2], zfcid.c [1.9], zfcid0.c [1.1],
+zfcid1.c [1.1], zfont1.c [1.4]: 2000/04/02 07:38:46 lpd)
+
+Makes the .writefont9 operator (used only for testing) available in both
+DEBUG and PROFILE configurations. (zfcid0.c [1.2]: 2000/04/03 02:37:55 lpd)
+
+Extends .forceput to handle arrays as well as dictionaries, required to fix
+a bug with internaldict. (zdict.c [1.2], zgeneric.c [1.2]: 2000/04/04
+22:13:23 lpd)
+
+Works around an Adobe code assumption that the default FindResource
+procedure does *not* call the ResourceStatus procedure if the requested
+instance is already defined in VM. (lib/gs_res.ps [1.7]: 2000/04/05 23:31:54
+lpd)
+
+Implements the framework for superexec (but none of the actual access check
+bypasses). (icontext.c [1.2], icstate.h [1.2], zcontrol.c [1.2]: 2000/04/06
+04:40:06 lpd)
+
+Extends the undocumented CCRun procedure to take an additional argument, a
+Private dictionary, required by some Adobe font downloading code.
+(lib/gs_type1.ps [1.3]: 2000/04/06 05:25:10 lpd)
+
+</pre><h2><a name="6.20 Streams"></a>Streams</h2><pre>
+
+Fixes problems:
+ - s_add_filter didn't ensure enough buffering. This entailed moving
+the NullEncode/Decode filters to stream.[hc]. (sfilter.h [1.3],
+stream.c [1.3], stream.h [1.3]: 2000/03/19 03:15:02 lpd)
+ - When FPU_TYPE <= 0, the image interpolation code lost too much
+accuracy, producing color streaks in the output. (Fix by DanCoby.)
+(siscale.c [1.2]: 2000/03/29 20:34:45 lpd)
+ - Fixes a couple of typos in the recently checked-in image
+interpolation fix. (siscale.c [1.3]: 2000/03/30 06:55:26 lpd)
+
+Splits out the [T]BCP filter interface into a separate file. (sbcp.c [1.2],
+sbcp.h [1.1], sfilter.h [1.2]: 2000/03/19 02:40:18 lpd)
+
+Adds a skip_count parameter to the SubFileDecode filter, giving the number
+of initial bytes or records to skip over. (Needed for printing FunctionType
+4 functions, possibly useful for other things.) (sfilter.h [1.4]: 2000/03/19
+03:20:18 lpd)
+
+Changes the key type returned by parameter list enumeration to include a
+persistence flag, makes C parameter lists support non-persistent keys, and
+upgrades GC descriptors so that parameter lists can be used non-transiently;
+updates implementors of parameter lists to call gs_param_list_init to
+initialize the common members, which is now required. (spsdf.c [1.2]:
+2000/03/19 15:16:11 lpd)
+
+Makes file streams remember the file name, needed for efficiently
+implementing reusable streams. (stream.c [1.4], stream.h [1.4]: 2000/03/23
+02:13:40 lpd)
+
+Finishes implementing the file case of ReusableStreamDecode. This required
+adding the ability to restrict file-reading streams to a subfile.
+(sfxfd.c [1.2], sfxstdio.c [1.2], stream.c [1.5], stream.h [1.5]: 2000/03/24
+03:59:42 lpd)
+
+Changes a few initializations to suppress warnings from one picky compiler
+that doesn't like ptr = buf - 1 where buf is an array. (spsdf.c [1.3]:
+2000/03/28 02:01:34 lpd)
+
+</pre><h2><a name="6.20 Library"></a>Library</h2><pre>
+
+Fixes problems:
+ - Two comments in the file were incorrect. (gsiparm3.h [1.2]:
+2000/03/19 02:46:11 lpd)
+ - param_coerce_typed, which works with any parameter list
+implementation, was incorrectly described as associated with the default
+implementation. (gsparam.h [1.2]: 2000/03/19 03:37:08 lpd)
+ - TrueType fonts didn't use vhea/vmtx if WMode = 1. Also makes
+gs_font_type42 subclassable, for implementing CIDFontType 2 fonts, and makes
+its procedure for getting a glyph's side bearing and width virtual, required
+to support MetricsCount in CIDFontType 2 fonts. (gstype42.c [1.3],
+gxfont42.h [1.2]: 2000/03/19 03:58:51 lpd)
+ - ImageType 4 images didn't give an error for out-of-range MaskColor
+values. The file also had an unnecessary #include. (gximage4.c [1.2]:
+2000/03/19 04:10:09 lpd)
+ - If log2_transfer_map_size > 8, identity transfer functions
+returned garbage. The fix requires that if a client wants to set a transfer
+function to the identity mapping, it must call gx_set_identity_transfer
+rather than simply setting the procedure to gs_identity_transfer.
+(gxclrast.c [1.3], gxcmap.c [1.2], gxfmap.h [1.2]: 2000/03/19 17:14:47 lpd)
+ - Fixes a warning about aliasing produced by one extremely picky
+compiler. (gsnogc.c [1.2]: 2000/03/22 21:39:32 lpd)
+ - Filling or clipping with ridiculously large (out-of-bounds)
+coordinates could cause an internal overflow that produced incorrect
+results. (This is probably not the last such bug.) (gxfill.c [1.2]:
+2000/03/30 07:03:59 lpd)
+
+Provides a gs_atan2_degrees procedure to parallel sin and cos.
+(gsmisc.c [1.2], gxfarith.h [1.2]: 2000/03/18 23:10:39 lpd)
+
+Improves the 8x8 bitmap "flipping" procedure to take advantage of 32-bit
+ints. (gsutil.c [1.2]: 2000/03/18 23:16:16 lpd)
+
+Adds a public procedure for restricting a color to its legal range.
+(gscspace.c [1.2], gscspace.h [1.2], gxcspace.h [1.2]: 2000/03/18 23:19:17
+lpd)
+
+Adds the new ImagemaskTrapping parameter to the trapping state.
+(gstrap.c [1.2], gstrap.h [1.2]: 2000/03/18 23:26:17 lpd)
+
+Increments the version number to 6.20, in anticipation of the next release.
+(We do this at the beginning of the development for a release, not the end.)
+(gscdef.c [1.2]: 2000/03/19 00:27:22 lpd)
+
+Adds a pseudo-encoding for the CFF StandardStrings that represent
+characters. (gsccode.h [1.2]: 2000/03/19 00:38:50 lpd)
+
+Adds a bit_index procedure to the implementation of device halftones,
+required for writing halftones in PDF files. (The only implementors are
+internal ones.) (gxdht.h [1.2], gxhtbit.c [1.2]: 2000/03/19 05:10:55 lpd)
+
+Adds a public procedure for getting a palette entry of an Indexed color
+space, used when writing Indexed color spaces in PDF files.
+(gscindex.h [1.1], gscolor2.c [1.2], gscolor2.h [1.2]: 2000/03/19 05:20:28
+lpd)
+
+Reimplements "PostScript calculator" (FunctionType 4) functions entirely in
+C, to allow them to be written out in PDF files. (gsfunc4.c [1.1],
+gsfunc4.h [1.1], gsstruct.h [1.2]: 2000/03/19 05:25:53 lpd)
+
+Moves gx_device_color_equal to the public API, for detecting redundant color
+setting when writing PDF files. (gsdcolor.h [1.2], gxdcolor.c [1.2],
+gxdcolor.h [1.2]: 2000/03/19 06:46:08 lpd)
+
+Changes the default value of BufferSpace to 4 Mb. In desktop applications,
+this is a reasonable value that can substantially improve performance
+(especially for color printers); embedded applications will want to set
+BufferSpace themselves in any case. (gdevprn.h [1.2]: 2000/03/19 06:51:13
+lpd)
+
+Adds virtual procedures for Functions to write their parameters to a
+parameter list, and to access their data source and subfunctions. This is
+needed for writing Functions in PDF files. This change is also a
+prerequisite for the C implemention of FunctionType 4 functions, even though
+it appears later in the change log. (gsdsrc.h [1.2], gsfunc.c [1.2],
+gsfunc.h [1.2], gsfunc0.c [1.2], gsfunc3.c [1.2], gsparam.c [1.2],
+gsparam.h [1.3], gxfunc.h [1.2]: 2000/03/19 07:24:53 lpd)
+
+Splits off "vanilla" Functions into separate files, in anticipation of
+removing them (they were only used to implement PostScript Calculator
+Functions). (gsfunc.c [1.3], gsfunc.h [1.3], gsfuncv.c [1.1],
+gsfuncv.h [1.1]: 2000/03/19 07:33:08 lpd)
+
+Adds a procedure for allocating a C parameter list. (gscparam.c [1.2],
+gsparam.h [1.4]: 2000/03/19 15:00:05 lpd)
+
+Undoes a premature change that depends on an update not yet checked in.
+(gscparam.c [1.3]: 2000/03/19 15:07:59 lpd)
+
+Changes the key type returned by parameter list enumeration to include a
+persistence flag, makes C parameter lists support non-persistent keys, and
+upgrades GC descriptors so that parameter lists can be used non-transiently;
+updates implementors of parameter lists to call gs_param_list_init to
+initialize the common members, which is now required. (gscparam.c [1.4],
+gsparam.c [1.3], gsparam.h [1.5]: 2000/03/19 15:16:11 lpd)
+
+Adds a procedure for copying one parameter list to another.
+(gsparamx.c [1.2], gsparamx.h [1.2]: 2000/03/19 15:35:31 lpd)
+
+Records the CTM used for sampling HalftoneType 1 spot functions. This is
+needed for recognizing the standard spot functions when producing PDF
+output. Also factors the code for initializing spot functions for the
+benefit of the PDF writer. (gshtscr.c [1.2], gxdht.h [1.3], gzht.h [1.2]:
+2000/03/19 15:43:36 lpd)
+
+Adds a proc_data member to the map for Separation and Indexed color spaces.
+(gscolor2.c [1.3], gxcolor2.h [1.2]: 2000/03/19 16:23:46 lpd)
+
+Makes st_indexed_map private. Clients must now use the constructor procedure
+alloc_indexed_map rather than allocating instances directly.
+(gscolor2.c [1.4], gscsepr.c [1.2], gxclrast.c [1.2], gxcolor2.h [1.3]:
+2000/03/19 16:37:28 lpd)
+
+Adds procedures for building and accessing DeviceN color spaces.
+(gscdevn.c [1.2], gscdevn.h [1.1]: 2000/03/19 17:02:37 lpd)
+
+Exports the 'blend' operators of the Type 1 interpreter, for use by the Type
+1 / Type 2 font writer. (gstype1.c [1.3], gxtype1.c [1.2], gxtype1.h [1.3]:
+2000/03/19 18:46:44 lpd)
+
+Starts to move support for CIDFontType 0 and 2 fonts into C code. (These
+header files are the ones needed to compile the new gdevpsf* files; they
+don't interact with any existing code.) (gxcid.h [1.1], gxfcid.h [1.1]:
+2000/03/20 06:40:22 lpd)
+
+Moves font-writing support into a new module (gdevpsf*), changing the source
+file names. Adds the ability to write CFF fonts, with either Type 1 or Type
+2 CharStrings; unfortunately, Acrobat Reader appears not to accept CFF fonts
+with Type 1 CharStrings. Adds the ability to convert Type 1 CharStrings to
+Type 2, including optimizing sequences of Type 1 operators into a single
+Type 2 operator. Implements writing CIDFontType 0 CFF fonts (CIDFonts) [NOT
+TESTED]. Starts (just barely) to remove more unneeded information from
+embedded TrueType fonts. (gxttf.h [1.1]: 2000/03/20 07:02:12 lpd)
+
+Starts to move support for CIDFontType 0 and 2 into C code, needed by the
+PDF writer for handling CID-keyed fonts. Implements GlyphDirectory for
+CIDFonts. Makes GDBytes and CIDMapOffset optional for CIDFontType 0 fonts
+that have a GlyphDirectory (not documented in the PLRM, but clearly
+correct). Implements Adobe 3011 features: integer and dictionary CIDMaps,
+and the MetricsCount entry, in CIDFontType 2 fonts (but only in the C code,
+which isn't hooked in yet, not in the PostScript code in gs_cidfn.ps.)
+(gsfcid.c [1.1], gsfcmap.c [1.3], gxfcmap.h [1.2], gxfont1.h [1.2]:
+2000/03/20 19:53:06 lpd)
+
+Changes a few initializations to suppress warnings from one picky compiler
+that doesn't like ptr = buf - 1 where buf is an array. (gxclpath.c [1.2]:
+2000/03/28 02:01:34 lpd)
+
+Changes the get_outline / glyph_data procedure for getting encoded font
+outline data to return an indication of whether the outline data were just
+allocated and can be freed by the client. (This is a possibly
+non-backward-compatible change.) (gxfcid.h [1.2], gxfont42.h [1.3]:
+2000/03/28 18:47:02 lpd)
+
+Changes the procs structure of gs_type1_data to an in-line structure rather
+than a pointer to a const structure. (Needed for moving CIDFontType 0
+support into C.) (gstype1.c [1.4], gstype2.c [1.3], gxfont1.h [1.3],
+gxtype1.c [1.3]: 2000/03/29 22:10:31 lpd)
+
+Finishes moving support for CIDFontType 0 fonts from PostScript to C.
+(gxfcid.h [1.3]: 2000/03/31 04:55:18 lpd)
+
+Finishes implementing the ability to write CIDFontType 0 CFFs. This involved
+a surprising number of changes in other font-related files. (gsfcid.c [1.2],
+gxfcid.h [1.4]: 2000/04/02 07:38:46 lpd)
+
+<hr>
+
+<h1><a name="Version6.01"></a>Version 6.01 (2000-03-17)</h1>
+
+This is a bug-fix release for 6.0.
+
+This release fixes the following reported bugs: #101555, #101813, #101816,
+#101818, #101827, #101830, #101871, #101853, #101906, #101949, #101950,
+#102003, #102004, #102038, #102081, #102936.
+
+<h2><a name="6.01_Incompatible_changes"></a>Incompatible changes</h2>
+
+(Platforms)
+ - OpenVMS using VAX C is no longer supported. (OpenVMS with DEC C
+and gcc are still supported.)
+(Drivers)
+ - The third argument of psdf_set_color is changed from const char *
+to const psdf_set_color_commands_t *.
+(Interpreter)
+ - The non-standard feature of writing dictionaries in binary object
+output is now disabled by default, but can now be enabled dynamically.
+(Library)
+ - The definition of TRANSPARENCY_PER_H_P is moved from gdevmrop.h to
+gsropt.h.
+ - The handling of the source opaque, texture transparent case of
+RasterOp when TRANSPARENCY_PER_H_P is defined is changed slightly.
+
+
+<h2><a name="6.01 Documentation"></a>Documentation</h2><pre>
+
+Fixes problems:
+ - Fixes a typo. (man/ps2pdf.1 [1.2]: 2000/03/10 03:11:06 lpd)
+ - When converting PostScript to PDF, selecting /Bicubic as an image
+DownsampleType caused an error instead of defaulting to /Average.
+(doc/Ps2pdf.htm [1.2]: 2000/03/10 04:16:09 lpd)
+ - The gs###src.zip and gs###lib.zip files weren't mentioned as being
+included in distributions; News.htm and Changes.htm weren't mentioned at
+all. (doc/Release.htm [1.5]: 2000/03/15 07:23:52 lpd)
+ - Fixes a problem producing too much black in the output; also adds
+support for 5 new printers (H-P Color DeskJet 690, H-P DesignJet 750, and
+Epson Stylus Color 200). Note that this is user-contributed code.
+(doc/Devices.htm [1.2]: 2000/03/16 02:01:36 lpd)
+
+In ansi2knr, adds user-contributed support for concatenated string literals
+and character constants, and fixes for a couple of minor bugs.
+(man/ansi2knr.1 [1.2]: 2000/03/10 03:16:17 lpd)
+
+Removes an inappropriate copying notice. (doc/Hershey.htm [1.2]: 2000/03/10
+07:03:57 lpd)
+
+Clarifies when xdpyinfo and xwininfo are needed. Adds privacy options for
+problem reports. (doc/Bug-form.htm [1.2]: 2000/03/10 07:06:08 lpd)
+
+Adds a new eps2eps utility analogous to ps2ps. (man/eps2eps.1 [1.1],
+man/ps2ps.1 [1.2]: 2000/03/10 07:51:55 lpd)
+
+Updates the documentation on making RPMs, which is no longer supported.
+(doc/Install.htm [1.2], doc/Make.htm [1.2]: 2000/03/10 07:58:00 lpd)
+
+Adds a recommendation to use gcc on SGI platforms. (doc/Make.htm [1.3]:
+2000/03/10 07:59:53 lpd)
+
+Updates documentation regarding Unix systems that do/don't use libpthread.
+(doc/Make.htm [1.4]: 2000/03/10 08:01:35 lpd)
+
+Removes support for VAX C, which DEC stopped supporting 9 (!) years ago.
+(doc/Make.htm [1.5], doc/Use.htm [1.2]: 2000/03/10 08:02:59 lpd)
+
+Updates the documentation for building Aladdin releases to reflect revised
+procedures for the Windows executable, and a few other minor changes.
+(doc/Release.htm [1.2]: 2000/03/10 15:55:39 lpd)
+
+Adds the ability to compile on OS/2 with XFree86. (doc/Install.htm [1.3],
+doc/Make.htm [1.6]: 2000/03/10 19:50:49 lpd)
+
+Moves all history for versions 5.n into History5.htm; creates History6.htm
+for versions 6.n; redefines News.htm as containing only news for the current
+release; adds (a link to) Changes.htm for the mechanically generated change
+log. (doc/History5.htm [1.2], doc/History6.htm [1.1], doc/News.htm [1.2],
+doc/README [1.2], doc/Readme.htm [1.2]: 2000/03/14 06:14:43 lpd)
+
+Partially updates the release procedure documentation to reflect the use of
+SourceForge and CVS. (doc/Release.htm [1.3]: 2000/03/14 06:39:23 lpd)
+
+Adds a change log generated mechanically from the CVS logs. Future releases
+may omit this file (doc/Changes.htm) from their change log.
+(doc/Changes.htm [1.1], doc/News.htm [1.3]: 2000/03/14 06:48:44 lpd)
+
+Revises the release procedures to reflect use of SourceForge, and to
+separate out the procedures for building Windows executables.
+(doc/Release.htm [1.4]: 2000/03/15 02:24:58 lpd)
+
+Adds information on uninstalling Ghostscript on Windows.
+(doc/Install.htm [1.4]: 2000/03/15 07:29:53 lpd)
+
+Adds the ability to set the ProcessColorModel of the pdfwrite device to
+/DeviceGray, /DeviceRGB, or /DeviceCMYK. This affects the color space used
+for fill, stroke, text, and imagemask, and for images that (for whatever
+reason) can't be written in their specified color space. Note that this is a
+short-term fix: pdfwrite should output colors in the color space in which
+they were specified. However, a proper fix will require more significant
+architectural changes. (doc/News.htm [1.4]: 2000/03/16 01:21:23 lpd)
+
+Adds a reference to a third-party Fontmap for the Computer Modern fonts.
+(doc/Fonts.htm [1.2]: 2000/03/16 04:05:07 lpd)
+
+Adds documentation and a makefile entry for Matthew Gelhaus' cdj880 driver.
+The code will eventually be included in gdevcd8.c, but it is not yet mature
+enough. (doc/Devices.htm [1.3]: 2000/03/16 08:09:42 lpd)
+
+Updates the version number reference in the troff header.
+(man/ps2pdf.1 [1.3], man/ps2ps.1 [1.3]: 2000/03/17 00:47:08 lpd)
+
+Removes the attempted documentation on building Windows executable
+distributions: it was never correct, and Aladdin will no longer be creating
+such distributions. Also reorganizes the document slightly and brings the
+rest of it fully into line with reality. (doc/Release.htm [1.6]: 2000/03/17
+04:40:47 lpd)
+
+Adds information on building with the Intel C/C++ optimizing compiler
+(requires the Microsoft Visual C++ environment), and fixes a typo in the
+link to ftp.cdrom.com. (doc/Make.htm [1.7]: 2000/03/17 17:42:59 lpd)
+
+Checks in the first wrap-up for the 6.01 release. (doc/Changes.htm [1.2],
+doc/History6.htm [1.2], doc/News.htm [1.5]: 2000/03/18 04:13:40 lpd)
+
+</pre><h2><a name="6.01 Procedures"></a>Procedures</h2><pre>
+
+Fixes problems:
+ - The terminating $ on the $Id: line in gsmalloc.c was missing, and
+dwuninst.rc lacked a $Id: line. (dwuninst.rc [1.2]: 2000/03/10 03:44:33 lpd)
+ - The %ram% IODevice was defined, but should not be (it represents a
+RAM-based file system, which Ghostscript does not provide). Fix: The type of
+the %null% IODevice was /FileSystem rather than /Special. (int.mak [1.2]:
+2000/03/10 07:02:07 lpd)
+ - The dependency list for coslwxl omitted a $(DD).
+(contrib.mak [1.2]: 2000/03/10 07:30:54 lpd)
+ - The makefile still referred to a long-gone driver for the DEC
+LA70. (contrib.mak [1.3]: 2000/03/10 07:32:43 lpd)
+ - The Unix install process tried to make links without deleting them
+first. (unixinst.mak [1.2]: 2000/03/10 07:49:21 lpd)
+ - The Watcom compiler switches didn't force enums to occupy a full
+int, leading to execution errors because the code casts (enum *) pointers to
+(int *). (wccommon.mak [1.2]: 2000/03/10 08:15:31 lpd)
+ - The Windows zip archive didn't include font metrics files. (This
+change only fixes the build procedure: it doesn't actually update the
+currently released zip archive.) (winint.mak [1.2]: 2000/03/10 08:17:06 lpd)
+ - the "all architectures" build and test script hadn't been updated
+to use different STDLIBS values depending on where the platform provides the
+pthreads library. (all-arch.mak [1.2]: 2000/03/10 15:40:43 lpd)
+ - The documentation for building with pthreads on FreeBSD hadn't
+been updated. (unix-gcc.mak [1.2], unixansi.mak [1.2], unixtrad.mak [1.2]:
+2000/03/10 15:44:01 lpd)
+ - gsmalloc.c didn't include the prototype for gs_exit(), which it
+calls. (lib.mak [1.2]: 2000/03/10 15:53:08 lpd)
+
+Because of rampant confusion, disagreement, and lack of standardization,
+removes the RPM-related spec and patch files. (gs-fonts.rps [1.2],
+gs.rps [1.2], rpm-conf.dif [1.2]: 2000/03/10 03:22:04 lpd)
+
+Increases the stack size for the PC platforms, since a user had reported
+that the OS/2 stack size was too small. (dw32c.def [1.2],
+dwmain32.def [1.2], gsos2.def [1.2]: 2000/03/10 03:33:21 lpd)
+
+Updates the Brother HL7xx drivers with a new user-contributed version, plus
+a couple of minor fixes. (contrib.mak [1.4]: 2000/03/10 07:33:44 lpd)
+
+Adds a new eps2eps utility analogous to ps2ps. (unixinst.mak [1.3]:
+2000/03/10 07:51:55 lpd)
+
+Removes support for VAX C, which DEC stopped supporting 9 (!) years ago.
+(openvms.mak [1.2], openvms.mmk [1.2]: 2000/03/10 08:02:59 lpd)
+
+Updates all makefiles to the current libpng version, 1.0.5.
+(bcwin32.mak [1.2], dvx-gcc.mak [1.2], msvc32.mak [1.2], msvclib.mak [1.2],
+os2.mak [1.2], ugcclib.mak [1.2], unix-gcc.mak [1.3], unixansi.mak [1.3],
+unixtrad.mak [1.3], watc.mak [1.2], watclib.mak [1.2], watcw32.mak [1.2]:
+2000/03/10 15:48:58 lpd)
+
+Updates the version # to 6.01, and the version date. (version.mak [1.2]:
+2000/03/10 17:18:29 lpd)
+
+Adds the ability to compile on OS/2 with XFree86. (os2.mak [1.3]: 2000/03/10
+19:50:49 lpd)
+
+Moves all history for versions 5.n into History5.htm; creates History6.htm
+for versions 6.n; redefines News.htm as containing only news for the current
+release; adds (a link to) Changes.htm for the mechanically generated change
+log. (unixinst.mak [1.4], version.mak [1.3]: 2000/03/14 06:14:44 lpd)
+
+Adds entries for ibm-rs6000-aix-4.3, sgi-mips-irix6.5-64bit, and
+sun-sparc-solaris-64bit. (all-arch.mak [1.3]: 2000/03/15 18:38:29 lpd)
+
+Adds the ability to set the ProcessColorModel of the pdfwrite device to
+/DeviceGray, /DeviceRGB, or /DeviceCMYK. This affects the color space used
+for fill, stroke, text, and imagemask, and for images that (for whatever
+reason) can't be written in their specified color space. Note that this is a
+short-term fix: pdfwrite should output colors in the color space in which
+they were specified. However, a proper fix will require more significant
+architectural changes. (version.mak [1.4]: 2000/03/16 01:21:24 lpd)
+
+Adds documentation and a makefile entry for Matthew Gelhaus' cdj880 driver.
+The code will eventually be included in gdevcd8.c, but it is not yet mature
+enough. (contrib.mak [1.5]: 2000/03/16 08:09:42 lpd)
+
+Adds a missing dependency of gdevpdft.o on gxfont42.h. (devs.mak [1.2]:
+2000/03/17 02:59:26 lpd)
+
+Adds a disclaimer of responsibility for the makefile section for creating
+distribution archives, which Aladdin is no longer maintaining.
+(winint.mak [1.3]: 2000/03/17 03:01:58 lpd)
+
+Checks in the first wrap-up for the 6.01 release. (unix-gcc.mak [1.4],
+version.mak [1.5]: 2000/03/18 04:13:40 lpd)
+
+</pre><h2><a name="6.01 Utilities"></a>Utilities</h2><pre>
+
+Fixes problems:
+ - The loader for the stochastic halftone incorrectly assumed that
+the resource file left the resource on the stack, causing a stackunderflow
+error. (lib/stocht.ps [1.2]: 2000/03/10 03:34:44 lpd)
+ - The ps2pdf*.bat scripts didn't set PS2PDFSW to the empty string if
+there were no arguments, causing the same file to be processed again.
+(lib/ps2pdf12.bat [1.2], lib/ps2pdf13.bat [1.2]: 2000/03/10 07:40:00 lpd)
+ - Fixes a typo in the fix for putting stdout in binary mode.
+(gp_ntfs.c [1.3]: 2000/03/18 01:15:16 lpd)
+ - For printer devices, a non-null definition for OutputFile was
+required even on platforms that had a default printer (as implemented by
+gp_open_printer for that platform). (gp_os9.c [1.2], gp_unix.c [1.2],
+gp_vms.c [1.2]: 2000/03/18 01:45:16 lpd)
+
+In ansi2knr, adds user-contributed support for concatenated string literals
+and character constants, and fixes for a couple of minor bugs.
+(ansi2knr.c [1.2]: 2000/03/10 03:16:17 lpd)
+
+Updates the pf2afm.ps utility with a revised version from its authors.
+(lib/pf2afm.ps [1.2]: 2000/03/10 03:35:37 lpd)
+
+Adds a new eps2eps utility analogous to ps2ps. (lib/eps2eps [1.1],
+lib/eps2eps.bat [1.1]: 2000/03/10 07:51:55 lpd)
+
+Removes a temporary file that was included in the fileset by mistake.
+(lib/history [1.2]: 2000/03/10 08:18:36 lpd)
+
+Changes the ps2pdf MS Windows / MS-DOS scripts to use temporary files to
+avoid the absurdly low limits on the length of a command line and the total
+size of environment variable definitions. (lib/ps2pdf.bat [1.2],
+lib/ps2pdf12.bat [1.3], lib/ps2pdf13.bat [1.3], lib/ps2pdfwr.bat [1.2],
+lib/ps2pdfxx.bat [1.1]: 2000/03/14 20:20:20 lpd)
+
+On Windows, puts stdout into binary mode as well as stdin, to allow piping
+printer output through stdout (not a good idea, but it should be supported
+as well as on other platforms). (gp_ntfs.c [1.2]: 2000/03/17 06:22:59 lpd)
+
+</pre><h2><a name="6.01 Drivers"></a>Drivers</h2><pre>
+
+Fixes problems:
+ - When converting PostScript to PDF, selecting /Bicubic as an image
+DownsampleType caused an error instead of defaulting to /Average.
+(gdevpsdf.h [1.2], gdevpsdi.c [1.2], gdevpsdp.c [1.2]: 2000/03/10 04:16:09
+lpd)
+ - The mswinpr2 driver didn't handle setting BitsPerPixel to the same
+value when the device was already open, possibly causing an error on restore
+or grestore. (gdevwpr2.c [1.2]: 2000/03/10 04:26:07 lpd)
+ - When operating in buffered mode (MaxBitmap > 0), the X driver
+sometimes failed to copy all of the updated area to the screen.
+(gdevx.c [1.2], gdevx.h [1.2], gdevxini.c [1.2], gdevxxf.c [1.2]: 2000/03/10
+06:56:27 lpd)
+ - The [e]pswrite driver produced invalid output if the input file
+didn't end with a showpage. Also cleans up some formatting and removes a
+redundant test. (gdevps.c [1.2]: 2000/03/10 07:44:27 lpd)
+ - Fixes a problem producing too much black in the output; also adds
+support for 5 new printers (H-P Color DeskJet 690, H-P DesignJet 750, and
+Epson Stylus Color 200). Note that this is user-contributed code.
+(gdevupd.c [1.2], lib/bjc610a0.upp [1.2], lib/bjc610a1.upp [1.2],
+lib/bjc610a2.upp [1.2], lib/bjc610a3.upp [1.2], lib/bjc610a4.upp [1.2],
+lib/bjc610a5.upp [1.2], lib/bjc610a6.upp [1.2], lib/bjc610a7.upp [1.2],
+lib/bjc610a8.upp [1.2], lib/bjc610b1.upp [1.2], lib/bjc610b2.upp [1.2],
+lib/bjc610b3.upp [1.2], lib/bjc610b4.upp [1.2], lib/bjc610b6.upp [1.2],
+lib/bjc610b7.upp [1.2], lib/bjc610b8.upp [1.2], lib/cdj550.upp [1.2],
+lib/cdj690.upp [1.1], lib/cdj690ec.upp [1.1], lib/dnj750c.upp [1.1],
+lib/dnj750m.upp [1.1], lib/ras32.upp [1.2], lib/stc.upp [1.2],
+lib/stc1520h.upp [1.2], lib/stc2.upp [1.2], lib/stc200_h.upp [1.1],
+lib/stc2_h.upp [1.2], lib/stc2s_h.upp [1.2], lib/stc500p.upp [1.2],
+lib/stc500ph.upp [1.2], lib/stc600ih.upp [1.2], lib/stc600p.upp [1.2],
+lib/stc600pl.upp [1.2], lib/stc800ih.upp [1.2], lib/stc800p.upp [1.2],
+lib/stc800pl.upp [1.2], lib/stc_h.upp [1.2], lib/stc_l.upp [1.2],
+lib/stcany.upp [1.2]: 2000/03/16 02:01:36 lpd)
+ - The X driver's algorithm for deciding when to update the screen
+was changed several times between 5.50 and 6.0, and one of the more recent
+changes caused it to copy many more pixels to the screen than necessary if
+the file was making marks on the page in widely separated places.
+(gdevx.c [1.3]: 2000/03/17 07:35:43 lpd)
+ - In the X driver, the full-page buffer controlled by -dMaxBitmap=
+wasn't allocated with a stable allocator, possibly leading to memory access
+errors if save/restore were used. (gdevxini.c [1.3]: 2000/03/18 04:11:59
+lpd)
+
+Updates the Brother HL7xx drivers with a new user-contributed version, plus
+a couple of minor fixes. (gdevhl7x.c [1.2]: 2000/03/10 07:33:44 lpd)
+
+Enhances the [e]pswrite driver to handle Indexed color spaces over Device
+color spaces, only with the standard Decode. (gdevps.c [1.3]: 2000/03/10
+07:45:50 lpd)
+
+Adds the ability to set the ProcessColorModel of the pdfwrite device to
+/DeviceGray, /DeviceRGB, or /DeviceCMYK. This affects the color space used
+for fill, stroke, text, and imagemask, and for images that (for whatever
+reason) can't be written in their specified color space. Note that this is a
+short-term fix: pdfwrite should output colors in the color space in which
+they were specified. However, a proper fix will require more significant
+architectural changes. (gdevpsdf.c [1.2], gdevpsdf.h [1.3]: 2000/03/16
+01:21:24 lpd)
+
+Adds two more user-contributed 'uniprint' printer parameter sets: Epson
+Stylus Color 640, and a generic Epson Stylus Color in high resolution mode
+(720x720 dpi). (lib/stc640p.upp [1.1], lib/stcany_h.upp [1.1]: 2000/03/16
+02:03:40 lpd)
+
+</pre><h2><a name="6.01 PDF writer"></a>PDF writer</h2><pre>
+
+Fixes problems:
+ - In-line images emitted an extra 'q' (gsave), causing the CTM to
+become incorrect, entries to pile up on the dictionary stack, and an
+invalidrestore error to occur at the end of the page. (gdevpdfi.c [1.2]:
+2000/03/10 03:47:37 lpd)
+ - The change in 5.99 to work around Acrobat Reader's 32K limit on
+user space coordinates caused all 0-width rectangles to disappear, which had
+major effects on some files. (gdevpdfd.c [1.2]: 2000/03/10 03:48:10 lpd)
+ - Incrementally downloaded TrueType fonts produced truncated Widths
+tables in the output. We have patched this with a ******HACK****** that
+causes such fonts to be converted to bitmaps: the correct fix (to delay
+determining the range of valid characters until the font is written) is too
+large a change to make in a bug fix release. (gdevpdft.c [1.2]: 2000/03/10
+03:48:48 lpd)
+
+Adds the ability to set the ProcessColorModel of the pdfwrite device to
+/DeviceGray, /DeviceRGB, or /DeviceCMYK. This affects the color space used
+for fill, stroke, text, and imagemask, and for images that (for whatever
+reason) can't be written in their specified color space. Note that this is a
+short-term fix: pdfwrite should output colors in the color space in which
+they were specified. However, a proper fix will require more significant
+architectural changes. (gdevpdf.c [1.2], gdevpdfd.c [1.3], gdevpdfi.c [1.3],
+gdevpdfp.c [1.2], gdevpdft.c [1.3], gdevpdfu.c [1.2], gdevpdfx.h [1.2]:
+2000/03/16 01:21:24 lpd)
+
+</pre><h2><a name="6.01 Interpreter (PDF)"></a>Interpreter (PDF)</h2><pre>
+
+Fixes problems:
+ - When interpreting a PDF file, the Install page device procedure
+got more and more deeply nested after every page, eventually causing an
+execstackoverflow. (lib/pdf_main.ps [1.2]: 2000/03/10 03:56:11 lpd)
+ - When interpreting a PDF file, text drawing operators didn't reset
+the text position, so strings could get displayed on top of each other. (bug
+introduced by a fix in 5.98) (lib/pdf_ops.ps [1.2]: 2000/03/10 03:57:03 lpd)
+ - When interpreting a PDF file, substituted small-cap fonts were
+created with incorrect scaling. (lib/pdf_font.ps [1.2]: 2000/03/10 03:57:50
+lpd)
+
+Cleans up some formatting. (lib/pdf_base.ps [1.2]: 2000/03/10 03:58:14 lpd)
+
+</pre><h2><a name="6.01 Interpreter"></a>Interpreter</h2><pre>
+
+Fixes problems:
+ - There were extraneous 'def' commands that caused definitions to be
+made in the wrong dictionary. (lib/gs_ttf.ps [1.2]: 2000/03/10 03:31:39 lpd)
+ - If an error occurred while loading a font, it wouldn't produce an
+error message. (This is a 'fix' of a 'fix' of a 'fix': it might well break
+something else.) (lib/gs_type1.ps [1.2]: 2000/03/10 03:37:14 lpd)
+ - When reading the strings of a binary object sequence, having to
+get more data from a procedure-based stream sometimes caused a syntaxerror.
+Fix: If the reserved (0) field in binary objects or binary object sequences
+was not 0, no syntaxerror occurred. (iscanbin.c [1.2]: 2000/03/10 03:38:50
+lpd)
+ - The code for handling execstackoverflow errors didn't cut back the
+stack correctly, possibly causing invalid memory accesses if an incorrect
+attempt was made to run a cleanup procedure. (interp.c [1.2]: 2000/03/10
+04:04:38 lpd)
+ - Writing of dictionaries in binary object output, a non-standard
+extension, was enabled by default, and also had to be enabled at startup
+time if it was ever going to be used. Fix: Binary error messages caused an
+error if the command wasn't of a type that printobject could handle. We now
+do what the Adobe implementations appear to do in this case, namely, convert
+the object with cvs. (lib/gs_btokn.ps [1.2]: 2000/03/10 04:27:31 lpd)
+ - CloseSource and CloseTarget were effectively ignored for Flate and
+LZW filters with a Predictor, and for the DCT filters. (ifilter.h [1.2],
+zfdctd.c [1.2], zfdcte.c [1.2], zfdecode.c [1.2], zfilter.c [1.2],
+zfilter2.c [1.2]: 2000/03/10 04:32:51 lpd)
+ - findlibfile didn't handle %iodevice% prefixes correctly.
+(zfile.c [1.2]: 2000/03/10 04:35:08 lpd)
+ - fileposition didn't give an error for filters or non-seekable
+streams. (zfileio.c [1.2]: 2000/03/10 04:35:53 lpd)
+ - Images with input from a file or filter demanded 1 byte of data
+too many, sometimes causing the last line of the image to be dropped. (bug
+probably introduced in 6.0) (zimage.c [1.2]: 2000/03/10 04:37:02 lpd)
+ - The check for a show within a cshow procedure for a CID font was
+wrong. Fix: Character widths in CIDFontType 0 fonts were ignored (!). Adds a
+.glyphwidth operator to support correct handling of character widths for CID
+fonts. Adds a glyphwidth procedure to the library, like glyphshow and
+glyphpath, in order to support correct handling of widths for CID fonts.
+(ichar.h [1.2], lib/gs_cidfn.ps [1.2], zchar.c [1.2], zcharx.c [1.2]:
+2000/03/10 04:41:47 lpd)
+ - resourcestatus for fonts was broken. (lib/gs_res.ps [1.2]:
+2000/03/10 04:54:15 lpd)
+ - Fixes incorrect documentation of several procedures.
+(lib/gs_fonts.ps [1.2]: 2000/03/10 07:00:28 lpd)
+ - The %ram% IODevice was defined, but should not be (it represents a
+RAM-based file system, which Ghostscript does not provide). Fix: The type of
+the %null% IODevice was /FileSystem rather than /Special. (ziodev2.c [1.2]:
+2000/03/10 07:02:07 lpd)
+ - Directly-loaded TrueType fonts (including embedded TrueType fonts
+in PDF files) could get confused with each other in the cache, because their
+XUIDs were based on the font checksum field, which some fonts don't have set
+correctly. (lib/gs_ttf.ps [1.3]: 2000/03/16 07:38:07 lpd)
+
+Adds a new example file, a 3-D synthetic image. (examples/doretree.ps [1.1]:
+2000/03/10 04:00:45 lpd)
+
+Adds implementations of the devforall, devstatus, and diskonline
+compatibility operators. (lib/gs_statd.ps [1.2]: 2000/03/10 04:01:55 lpd)
+
+Some Adobe CIDFonts include a line /Setup /cid_Setup load def that
+apparently is intended only to prevent the fonts from being loaded by a
+standard PostScript interpreter (as opposed to ATM or a special font
+loader), since cid_Setup is not defined anywhere and Setup is never
+referenced; this change adds a dummy definition of cid_Setup to work around
+this. (lib/gs_cidfn.ps [1.3]: 2000/03/10 04:53:25 lpd)
+
+Updates the version # to 6.01, and the version date. (lib/gs_init.ps [1.2]:
+2000/03/10 17:18:29 lpd)
+
+Changes the default undercolor removal and black generation functions back
+from f(k) = k to f(k) = 0. This fixes some, but not all, of the reported
+problems with color inkjet output in 6.0. (lib/gs_init.ps [1.3]: 2000/03/10
+18:47:31 lpd)
+
+On Windows, puts stdout into binary mode as well as stdin, to allow piping
+printer output through stdout (not a good idea, but it should be supported
+as well as on other platforms). (dwmainc.cpp [1.2]: 2000/03/17 06:22:59 lpd)
+
+</pre><h2><a name="6.01 Streams"></a>Streams</h2><pre>
+
+Changes the sbuf_min_left macro to a procedure for readability and in
+preparation for later revision. (stream.c [1.2], stream.h [1.2]: 2000/03/10
+03:40:13 lpd)
+
+</pre><h2><a name="6.01 Library"></a>Library</h2><pre>
+
+Fixes problems:
+ - (%os%) currentdevparams didn't return (fixed) values for
+InitializeAction, Mounted, Removable, Searchable, SearchOrder, and
+Writeable, or (meaningful) values for BlockSize, Free, and LogicalSize.
+Currently, the latter values are dummies. (gsiodev.c [1.2]: 2000/03/10
+03:43:06 lpd)
+ - The terminating $ on the $Id: line in gsmalloc.c was missing, and
+dwuninst.rc lacked a $Id: line. (gsmalloc.c [1.2]: 2000/03/10 03:44:33 lpd)
+ - RasterOps with source transparency = 0, texture transparency = 1
+didn't match the (very peculiar) H-P specification even if
+TRANSPARENCY_PER_H_P was defined. (gdevdrop.c [1.2], gdevmrop.h [1.2],
+gsropt.h [1.2]: 2000/03/10 04:06:15 lpd)
+ - The prototype for gs_exit() was not included even though gs_exit()
+was called. Fix: A cast discarded const unnecessarily. (gsalloc.c [1.2]:
+2000/03/10 04:08:23 lpd)
+ - The type of the %pipe% IODevice was /FileSystem, whereas it should
+be /Special. (gdevpipe.c [1.2]: 2000/03/10 04:13:57 lpd)
+ - An incorrectly formatted procedure couldn't be converted correctly
+by ansi2knr. (gxidata.c [1.2]: 2000/03/10 04:30:58 lpd)
+ - The check for a show within a cshow procedure for a CID font was
+wrong. Fix: Character widths in CIDFontType 0 fonts were ignored (!). Adds a
+.glyphwidth operator to support correct handling of character widths for CID
+fonts. Adds a glyphwidth procedure to the library, like glyphshow and
+glyphpath, in order to support correct handling of widths for CID fonts.
+(gschar.c [1.2], gschar.h [1.2], gstext.c [1.2], gstext.h [1.2]: 2000/03/10
+04:41:47 lpd)
+ - The description of the value returned by code_map_decode_next in
+*pchr was incorrect. (documentation bug only) (gsfcmap.c [1.2]: 2000/03/10
+07:03:09 lpd)
+ - Fixes a problem producing too much black in the output; also adds
+support for 5 new printers (H-P Color DeskJet 690, H-P DesignJet 750, and
+Epson Stylus Color 200). Note that this is user-contributed code.
+(gsargs.h [1.2]: 2000/03/16 02:01:36 lpd)
+ - The code for Axial shadings incorrectly assumed that if the
+shading axis was horizontal or vertical in user space, it was also
+horizontal or vertical in device space: this caused incorrect results when
+the CTM wasn't orthogonal. (gxshade1.c [1.2]: 2000/03/17 08:17:55 lpd)
+ - For printer devices, a non-null definition for OutputFile was
+required even on platforms that had a default printer (as implemented by
+gp_open_printer for that platform). (gp.h [1.2], gsdevice.c [1.2]:
+2000/03/18 01:45:16 lpd)
+
+Clears the glyf and loca offsets in TrueType fonts that lack these tables,
+so that clients who care can tell whether the font is being downloaded
+incrementally. (gstype42.c [1.2]: 2000/03/10 03:45:29 lpd)
+
+Changes a few macro definitions to work around over-zealous compiler
+warnings. (gstype1.c [1.2], gstype2.c [1.2], gxtype1.h [1.2]: 2000/03/10
+04:29:37 lpd)
+
+Changes the default undercolor removal and black generation functions back
+from f(k) = k to f(k) = 0. This fixes some, but not all, of the reported
+problems with color inkjet output in 6.0. (gxdcconv.c [1.2]: 2000/03/10
+18:47:31 lpd)
+
+<hr>
+
+<h1><a name="Version6.0"></a>Version 6.0 (2000-02-03)</h1>
+
+This is the first public release since 5.50. See <a href="Current.htm">the
+release summary</a> for information about new capabilities and known
+problems.
+
+<h2><a name="6.0_Documentation"></a>Documentation</h2>
+
+Documents the fact that the plane_depths of a gx_image_enum structure may
+vary, and that planes_wanted procedure of a gx_image_enum must return false
+if the depths *or* widths can change. (gxiparam.h)
+
+Documents the fact that a wanted plane's wanted status, width, or depth can
+only be changed by a call of plane_data that provides data for that plane.
+(gxiparam.h)
+
+Documents the change in the handling of the pthreads library.
+(doc/Make.htm)
+
+Documents the fact that setting parameters for the DCTEncode filter in
+ps2pdf causes a crash. (doc/Ps2pdf.htm)
+
+Documents another bug in the MIPSpro 7.x / IRIX 6.5.x compilers, with
+isave.c. (doc/Make.htm)
+
+Corrects Russell Lang's e-mail address. (doc/New-user.htm)
+
+Documents the new image operator test file and the pdfeof file.
+(doc/Psfiles.htm)
+
+Documents the 'w' argument for image_render procedures. (gxiclass.h)
+
+Adds a little more checking to the release process. (doc/Release.htm)
+
+Documents the return values from the font build_char procedure. (gxfont.h)
+
+Documents the fact that the free 'zip' program is needed to build the
+self-extracting Windows executable, as well as WinZipSE. (doc/Make.htm,
+msvc32.mak, winint.mak)
+
+Adds references to several new free fonts. (doc/Fonts.htm)
+
+Documents an important invariant for streams. (stream.h)
+
+Adds a reference for user-supported Watcom / GNU make makefiles.
+(doc/Make.htm, doc/New-user.htm)
+
+Documents the dependence of gs_ttf.ps on some of the gs_*_e.ps files.
+(lib/gs_ttf.ps)
+
+Documents how to make self-extracting Windows executables.
+(doc/Release.htm)
+
+Adds a number of new user-contributed man pages. (unixinst.mak, man/gslp.1,
+man/wftopfa.1, man/printafm.1, man/pfbtopfa.1, man/font2c.1, man/dvipdf.1,
+man/ps2pdfwr.1, man/gsnd.1, man/pf2afm.1, man/ps2pdf.1)
+
+<h2><a name="6.0_Procedures"></a>Procedures</h2>
+
+Fixes problems:
+ - Building on BSDI didn't work. The simplest way to fix this was to
+change the linking of the pthreads library on Unix platforms to be included
+in STDLIBS rather than the "sync" implementation. (fix contributed by a
+user) (lib.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak)
+ - Once again, some runtime files weren't installed. (unixinst.mak)
+ - Building the self-extracting executable didn't work. (winint.mak)
+
+Updates the user-contributed all-architectures makefile. (all-arch.mak)
+
+<h2><a name="6.0_Utilities"></a>Utilities</h2>
+
+Fixes problems:
+ - A needed #include was missing. (geninit.c)
+ - There were signed/unsigned char mismatches. (genht.c, geninit.c)
+ - The MacOS compiler imposes a 32K limit on the size of a stack
+frame: we changed the code to use malloc/free. (geninit.c)
+
+Removes an unnecessary variable. (echogs.c)
+
+Adds a file that attempts to test the image operators exhaustively.
+(lib/image-qa.ps, unixinst.mak)
+
+Enhances the prfont.ps utility to print CIDFonts. (lib/prfont.ps)
+
+Adds a utility file that patches the PDF interpreter to allow garbage after
+the %%EOF (or the %%EOF to be missing completely). (lib/pdfeof.ps)
+
+<h2><a name="6.0_Drivers"></a>Drivers</h2>
+
+Fixes problems:
+ - The X driver compared too many bits of color value, leading to
+unnecessary halftoning. (bug introduced by a fix in 5.99) (gdevxcmp.c)
+ - Output from the pswrite driver got a dictfull error on Level 1
+printers. (gdevps.c)
+ - Anti-aliasing had stopped working on MS Windows and OS/2. (bug
+probably introduced in 5.65) (gdevmswn.c, gdevpm.c)
+
+<h2><a name="6.0_Platforms"></a>Platforms</h2>
+
+Adds a conditional definition of PTHREAD_CREATE_DETACHED for old versions of
+the pthreads library. (gp_psync.c)
+
+Updates the Microsoft Visual C++ library makefile for VC++ 6. (msvclib.mak)
+
+Updates some copyright dates. (winint.mak, dwsetup.rc)
+
+<h2><a name="6.0_Fonts"></a>Fonts</h2>
+
+Updates the URW fonts to include the expanded Adobe character set, including
+many Eastern European accented characters. (doc/New-user.htm)
+
+Removes a 'readonly' that inconvenienced the authors of ttf2pf.
+(lib/gs_ttf.ps)
+
+<h2><a name="6.0_PDF_writer"></a>PDF writer</h2>
+
+Fixes problems:
+ - The Dest key was deleted from GoTo and GoToR link annotation
+pdfmarks. (gdevpdfm.c)
+ - {name} references were substituted even in stream data for the
+/PUT pdfmark. (gdevpdfm.c)
+ - The revision number was sometimes printed incorrectly if its
+fraction part was zero. (gdevpdf.c)
+ - Embedded Multiple Master font instances weren't identified as
+MMType1 rather than Type1. (gdevpdff.h, gdevpdff.c, gdevpdft.c, gdevpdfw.c)
+ - The test against MaxSubsetPct was incorrect when the percentages
+were equal. (gdevpdfw.c)
+ - Font registrations weren't removed when the device was closed.
+(gdevpdff.h, gdevpdfx.h, gdevpdff.c, gdevpdfw.c)
+ - Multiple /OBJ pdfmarks with the same name caused an error. For
+Distiller compatibility, we now allow this if the type is the same, even
+though the pdfmark specification doesn't say anything about this being
+legal. (gdevpdfm.c)
+
+Removes an unnecessary variable. (gdevpdff.c, gdevpdfr.c)
+
+Disables embedding Multiple Master font instances, since Acrobat Reader
+doesn't accept what appear to be correct output and we don't have time
+before the release to track down the problem. (gdevpdft.c)
+
+<h2><a name="6.0_Interpreter_PDF"></a>Interpreter (PDF)</h2>
+
+Factors some code to allow patching the PDF reader to allow garbage after
+the %%EOF (or the %%EOF to be missing completely). (lib/pdf_main.ps)
+
+<h2><a name="6.0_Interpreter"></a>Interpreter</h2>
+
+Fixes problems:
+ - Type 1 fonts with non-standard OtherSubrs had stopped working.
+(bug introduced since 5.60) (zchar1.c)
+ - usecmap didn't work. (lib/gs_cmap.ps)
+ - The glyph_info procedure for Type 1 fonts didn't take Metrics[2]
+or CDevProc into account. (zchar1.c, zfont1.c)
+ - The multiple-data-source case of images was broken. (bug
+introduced in 5.99) (zimage.c)
+ - If a page device Install procedure caused an error, things could
+be left in an inconsistent state. (lib/gs_setpd.ps)
+ - Using a DeviceN color space could access uninitialized data in a
+color value. (zcsdevn.c)
+ - DeviceN images with procedure data sources were broken.
+(zimage.c)
+ - Images with a procedure data source could terminate prematurely if
+their processing was interrupted. (zimage.c)
+ - The garbage collector only marked half the name table sub-tables,
+and attempted to mark an equal number of invalid pointers, leading to
+invalid accesses or memory corruption. (iname.c)
+
+Removes an unused variable. (zmisc.c)
+
+<h2><a name="6.0_Streams"></a>Streams</h2>
+
+Fixes problems:
+ - sgets didn't reset the cursor pointers, so sgets into a client
+buffer followed by sseek (for some kinds of streams, including files) could
+get confused. (stream.c)
+
+<h2><a name="6.0_Library"></a>Library</h2>
+
+Fixes problems:
+ - A 'const' qualifier was omitted, leading to a type mismatch.
+(gxclrast.c)
+ - The revision number was sometimes printed incorrectly if its
+fraction part was zero. (gsmisc.c)
+ - gs_image_next returned the wrong value in *pused if it incremented
+the plane number. (bug introduced in 5.99) (gsimage.c)
+ - Only the last of the data_x and raster values in the local
+'planes' array in gs_image_next_planes were initialized. (bug introduced in
+5.99) (gsimage.c)
+ - The multiple-data-source case of images was broken. (bug
+introduced in 5.99) (gsimage.h, gsimage.c)
+ - ImageType 3 images with unequal scaling for the mask and data
+didn't work. (We thought they once did, but it appears they never have.)
+(gximage3.c)
+ - Images with 12-bit samples treated a Decode entry of [1 0] the
+same as [0 1]. (Other, general Decode entries worked correctly.)
+(gxipixel.c)
+ - ImageType 3 images didn't work if processing was ever interrupted
+for remapping a color. (gximage3.c)
+ - Images in DeviceN color spaces with 12-bit samples didn't work.
+(gxi12bit.c, gxidata.c)
+ - Images in DeviceN color spaces could fail to render properly
+because the interruption of rendering left a half-built entry in an internal
+cache. (gxi12bit.c, gxicolor.c)
+ - Images with non-idempotent RasterOps in 1-component DeviceN color
+spaces didn't render properly, because the same pixel was rendered multiple
+times after a color remapping interruption. (gximono.c)
+ - The fast case of masked images caused a crash if invoked without
+an imager state. (gximono.c)
+ - Flushing buffered image data could cause coordinate bookkeeping
+to get out of sync. (gxidata.c)
+ - ImageType 3, InterleaveType 2 images sometimes failed to render
+the last row. (gximage3.c)
+ - The fix in 5.88 for resizing large objects had a bug itself.
+(gsalloc.c)
+ - Whan banding, if a client supplied more data than necessary for an
+image, the client was told (incorrectly) that all of the data was used.
+(fix from Artifex) (gxclimag.c)
+ - Null patterns caused a crash. (bug probably introduced by changes
+to support PatternType 2) (gspcolor.c)
+ - On hand-initialized memory devices where line_ptrs[0] != base,
+monobit RasterOps could cause invalid or stray memory accesses. (gdevmr1.c)
+
+Removes an unnecessary variable. (gdevppla.c, gsfont.c)
+
+Adds the ability to call a specified procedure when unregistering
+notification, needed for removing PDF font registrations. (gsnotify.h,
+gsnotify.c)
+
+Updates the copyright year. (gscdef.c)
+
+</pre>
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 2000 Aladdin Enterprises.
+All rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/History7.htm b/Master/xemtex/doc/ghostscript/History7.htm
new file mode 100644
index 00000000000..7e71a4f3b3f
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/History7.htm
@@ -0,0 +1,5109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>History of Ghostscript versions 7.n</title>
+<!-- $Id: History7.htm,v 1.5.2.17.2.8 2003/05/17 15:00:53 giles Exp $ -->
+<!--
+ WARNING: do not use Pete Kaiser's emacs function "gs-toc" alone to
+ re-create the table of contents here, because it will replace the
+ hand-edited TOC subheads with a separate subhead for each H2 in
+ the body of the file. Or if you do, first look at the original
+ TOC to see how to edit it for visual conciseness.
+-->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<table width="100%" border="0">
+<tr><th align="center" bgcolor="#CCCC00"><font size=6>History of Ghostscript versions 7.xx</font>
+</table>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Version7.07">Version 7.07 (2003-05-17)</a>
+<ul>
+<li><a href="#7.07_Incompatible_changes">Incompatible changes</a>,
+ <a href="#7.07-Documentation">Documentation</a>,
+ <a href="#7.07-Procedures">Procedures</a>,
+ <a href="#7.07-Utilities">Utilities</a>,
+ <a href="#7.07-Drivers">Drivers</a>,
+ <a href="#7.07-PDF_Interpreter">PDF Interpreter</a>,
+ <a href="#7.07-Interpreter">Interpreter</a>,
+ <a href="#7.07-Library">Library</a>,
+ <a href="#7.07-Other">Other</a>
+</ul>
+<li><a href="#Version7.06">Version 7.06 (2003-04-01)</a>
+<ul>
+<li><a href="#7.06_Incompatible_changes">Incompatible changes</a>,
+ <a href="#7.06-Documentation">Documentation</a>,
+ <a href="#7.06-Procedures">Procedures</a>,
+ <a href="#7.06-Utilities">Utilities</a>,
+ <a href="#7.06-Drivers">Drivers</a>,
+ <a href="#7.06-PDF_writer">PDF writer</a>,
+ <a href="#7.06-PDF_Interpreter">PDF Interpreter</a>,
+ <a href="#7.06-Interpreter">Interpreter</a>,
+ <a href="#7.06-Streams">Streams</a>,
+ <a href="#7.06-Library">Library</a>,
+ <a href="#7.06-Other">Other</a>
+</ul>
+<li><a href="#Version7.05">Version 7.05 (2002-04-22)</a>
+<ul>
+<li><a href="#7.05_Incompatible_changes">Incompatible changes</a>,
+ <a href="#7.05-Documentation">Documentation</a>,
+ <a href="#7.05-Procedures">Procedures</a>,
+ <a href="#7.05-Utilities">Utilities</a>,
+ <a href="#7.05-Drivers">Drivers</a>,
+ <a href="#7.05-PDF_writer">PDF writer</a>,
+ <a href="#7.05-PDF_Interpreter">PDF Interpreter</a>,
+ <a href="#7.05-Interpreter">Interpreter</a>,
+ <a href="#7.05-Streams">Streams</a>,
+ <a href="#7.05-Library">Library</a>,
+ <a href="#7.05-Other">Other</a>
+</ul>
+<li><a href="#Version7.04">Version 7.04 (2002-01-30)</a>
+<ul>
+<li><a href="#7.04_Incompatible_changes">Incompatible changes</a>,
+ <a href="#7.04-Documentation">Documentation</a>,
+ <a href="#7.04-Procedures">Procedures</a>,
+ <a href="#7.04-Utilities">Utilities</a>,
+ <a href="#7.04-Drivers">Drivers</a>,
+ <a href="#7.04-PDF_Interpreter">PDF Interpreter</a>,
+ <a href="#7.04-Interpreter">Interpreter</a>,
+ <a href="#7.04-Library">Library</a>,
+ <a href="#7.04-Other">Other</a>
+</ul>
+<li><a href="#Version7.03">Version 7.03 (2001-10-20)</a>
+<ul>
+<li><a href="#7.03_Incompatible_changes">Incompatible changes</a>,
+ <a href="#7.03-Documentation">Documentation</a>,
+ <a href="#7.03-Procedures">Procedures</a>,
+ <a href="#7.03-Utilities">Utilities</a>,
+ <a href="#7.03-Drivers">Drivers</a>,
+ <a href="#7.03-PDF_writer">PDF writer</a>,
+ <a href="#7.03-PDF_Interpreter">PDF Interpreter</a>,
+ <a href="#7.03-Interpreter">Interpreter</a>,
+ <a href="#7.03-Streams">Streams</a>,
+ <a href="#7.03-Library">Library</a>,
+ <a href="#7.03-Other">Other</a>
+</ul>
+<li><a href="#Version7.02">Version 7.02 (2001-09-22)</a>
+<ul>
+<li><a href="#7.02_Incompatible_changes">Incompatible changes</a>,
+ <a href="#7.02-Documentation">Documentation</a>,
+ <a href="#7.02-Procedures">Procedures</a>,
+ <a href="#7.02-Utilities">Utilities</a>,
+ <a href="#7.02-Drivers">Drivers</a>,
+ <a href="#7.02-PDF_writer">PDF writer</a>,
+ <a href="#7.02-PDF_Interpreter">PDF Interpreter</a>,
+ <a href="#7.02-Interpreter">Interpreter</a>,
+ <a href="#7.02-Streams">Streams</a>,
+ <a href="#7.02-Library">Library</a>,
+ <a href="#7.02-Other">Other</a>
+</ul>
+<li><a href="#Version7.00">Version 7.00 (2001-04-08)</a>
+<ul>
+<li><a href="#7.00_Incompatible_changes">Incompatible changes</a>,
+ <a href="#7.00-Documentation">Documentation</a>,
+ <a href="#7.00-Procedures">Procedures</a>,
+ <a href="#7.00-Utilities">Utilities</a>,
+ <a href="#7.00-PDF_writer">PDF writer</a>,
+ <a href="#7.00-Interpreter">Interpreter</a>,
+ <a href="#7.00-Library">Library</a>
+</ul>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>
+This document is a record of changes in Ghostscript releases numbered 7.xx.
+For earlier versions, see the the history documents:
+
+<blockquote>
+<a href="History6.htm">History of Ghostscript versions 6.n</a><br>
+<a href="History5.htm">History of Ghostscript versions 5.n</a><br>
+<a href="History4.htm">History of Ghostscript versions 4.n</a><br>
+<a href="History3.htm">History of Ghostscript versions 3.n</a><br>
+<a href="History2.htm">History of Ghostscript versions 2.n</a><br>
+<a href="History1.htm">History of Ghostscript versions 1.n</a>
+</blockquote>
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<p>
+Within each release, news appears in the following order: Incompatible
+changes, Documentation, Procedures, Utilities, Drivers, Platforms, Fonts,
+PDF writer (included under Drivers through fileset 5.88), Interpreter,
+Streams (included under Interpreter through release 2.9.9), Library.
+Changes marked with a * were made available as patches to a previous
+release.
+
+<hr>
+
+<h1><a name="Version7.07"></a>Version 7.07 (2003-05-17)</h1>
+
+<p>This is the third release of the stable 7.0x series under the GNU
+GPL. It includes an important security update; upgrading is strongly
+recommended.</p>
+
+<h3><a name="7.07_Incompatible_changes"></a>Incompatible changes</h3>
+
+<p>
+No incompatible changes have been recorded for this version. Users of the 6.5x versions of GNU
+Ghostscript will want to check the History for a complete list of changes since that version.
+
+<pre>
+
+
+
+<h2><a name="7.07-Documentation"></a>Documentation</h2><pre>
+
+Increment the version number after release. (doc/News.htm [1.90.2.18.2.6]:
+2003/04/08 11:05:47 giles)
+
+Apply standard FSF license banner to files missed the 7.06 release. Patch
+from Brett Smith. (doc/Readme.htm [1.31.2.16.2.5]: 2003/04/12 14:02:38
+giles)
+
+Update the version and data for the 7.07 release.
+(doc/API.htm [1.11.2.13.2.6], doc/C-style.htm [1.21.2.11.2.5],
+doc/DLL.htm [1.15.2.11.2.5], doc/Develop.htm [1.47.2.18.2.6],
+doc/Devices.htm [1.34.2.15.2.6], doc/Drivers.htm [1.21.2.11.2.5],
+doc/Fonts.htm [1.22.2.13.2.6], doc/Helpers.htm [1.17.2.11.2.5],
+doc/History1.htm [1.13.2.11.2.5], doc/History2.htm [1.13.2.11.2.6],
+doc/History3.htm [1.13.2.11.2.6], doc/History4.htm [1.13.2.11.2.6],
+doc/History5.htm [1.15.2.11.2.6], doc/History6.htm [1.30.2.11.2.6],
+doc/History7.htm [1.5.2.17.2.7], doc/Htmstyle.htm [1.18.2.11.2.5],
+doc/Install.htm [1.26.2.13.2.6], doc/Issues.htm [1.15.2.13.2.5],
+doc/Language.htm [1.34.2.16.2.5], doc/Lib.htm [1.14.2.11.2.5],
+doc/Maintain.htm [1.23.2.12.2.6], doc/Make.htm [1.36.2.19.2.6],
+doc/New-user.htm [1.30.2.14.2.6], doc/News.htm [1.90.2.18.2.7],
+doc/Projects.htm [1.33.2.11.2.6], doc/Ps-style.htm [1.13.2.11.2.5],
+doc/Ps2epsi.htm [1.15.2.12.2.6], doc/Ps2pdf.htm [1.32.2.11.2.5],
+doc/Psfiles.htm [1.22.2.12.2.5], doc/Readme.htm [1.31.2.16.2.6],
+doc/Release.htm [1.40.2.23.2.6], doc/Source.htm [1.13.2.11.2.5],
+doc/Unix-lpr.htm [1.13.2.11.2.5], doc/Use.htm [1.33.2.22.2.6],
+doc/Xfonts.htm [1.13.2.11.2.5], doc/gs-vms.hlp [1.12.2.10.2.5],
+man/dvipdf.1 [1.10.2.9.2.5], man/font2c.1 [1.10.2.9.2.5],
+man/gs.1 [1.10.2.10.2.5], man/gslp.1 [1.10.2.9.2.5],
+man/gsnd.1 [1.10.2.9.2.5], man/pdf2dsc.1 [1.10.2.9.2.5],
+man/pdf2ps.1 [1.12.2.9.2.5], man/pdfopt.1 [1.10.2.9.2.5],
+man/pf2afm.1 [1.10.2.9.2.5], man/pfbtopfa.1 [1.11.2.9.2.5],
+man/printafm.1 [1.10.2.9.2.5], man/ps2ascii.1 [1.10.2.9.2.5],
+man/ps2epsi.1 [1.10.2.10.2.5], man/ps2pdf.1 [1.14.2.11.2.5],
+man/ps2pdfwr.1 [1.13.2.10.2.5], man/ps2ps.1 [1.17.2.9.2.5],
+man/wftopfa.1 [1.10.2.9.2.5]: 2003/05/17 14:38:59 giles)
+
+Update the release notes. (doc/News.htm [1.90.2.18.2.8]: 2003/05/17 14:44:22
+giles)
+
+</pre><h2><a name="7.07-Procedures"></a>Procedures</h2><pre>
+
+Increment the version number after release. (version.mak [1.36.2.9.2.5]:
+2003/04/08 11:05:47 giles)
+
+Apply standard FSF license banner to files missed the 7.06 release. Patch
+from Brett Smith. (toolbin/3way.tcl [1.3.6.1.2.1],
+toolbin/cvs2hist.py [1.9.2.2.2.1], toolbin/errlist.tcl [1.3.6.1.2.1],
+toolbin/gsindent [1.3.6.1.2.1], toolbin/gsmake.tcl [1.5.6.1.2.1],
+toolbin/gssubst [1.1.4.1.2.1], toolbin/headers.tcl [1.3.6.1.2.1],
+toolbin/leaks.tcl [1.3.6.1.2.1], toolbin/makegnu.tcl [1.3.6.1.2.1],
+toolbin/makeset.tcl [1.10.2.3.2.1], toolbin/many2pdf.tcl [1.1.4.1.2.1],
+toolbin/pdfinflt.ps [1.1.2.1.2.1], toolbin/pre [1.11.2.3.2.1],
+toolbin/precheck.tcl [1.3.6.1.2.1], toolbin/suite.tcl [1.3.6.1.2.1],
+toolbin/tmake.tcl [1.3.6.1.2.1]: 2003/04/12 14:02:39 giles)
+
+Add the bbox device to the default macos shlib build. Bug 686811.
+(macos-mcp.mak [1.3.2.8.2.2]: 2003/04/27 23:50:11 giles)
+
+Add the display device to the default macos shlib build.
+(macos-mcp.mak [1.3.2.8.2.3]: 2003/04/27 23:52:55 giles)
+
+Log message: For the pngalpha device, set the default background color to
+white in the bKGD chunk. Add an option -dBackgroundColor=16#RRGGBB to
+explicitly set the background color. This is needed by a common web browser
+that doesn't correctly support PNG with alpha transparency. DETAILS:
+Programs that don't fully support alpha transparency let libpng convert an
+RGBA image to RGB. The background color used is either provided by the
+program, or in the bKGD chunk, or it falls back to gray. MSIE was defaulting
+to a gray background which is not commonly used on web pages. By writing a
+white bKGD chunk, PNG files will display correctly against a white
+background in MSIE. If a solid color for a web page background is used with
+&lt;body bgcolor="#CCCC00"&gt;, then PNG images appearing on that page would
+need to be created with -dBackgroundColor=16#CCCC00. For textured background
+there is no hope. Microsoft needs to fix Internet Explorer.
+(libpng.mak [1.10.2.3.2.2]: 2003/05/15 10:05:29 ghostgum)
+
+Update the version and data for the 7.07 release.
+(version.mak [1.36.2.9.2.6]: 2003/05/17 14:39:00 giles)
+
+</pre><h2><a name="7.07-Utilities"></a>Utilities</h2><pre>
+
+Apply standard FSF license banner to files missed the 7.06 release. Patch
+from Brett Smith. (lib/Fontmap.ATB [1.2.6.1.2.1],
+lib/Fontmap.ATM [1.2.6.1.2.1], lib/Fontmap.GS [1.2.6.1.2.1],
+lib/Fontmap.OS2 [1.2.6.1.2.1], lib/Fontmap.SGI [1.2.6.1.2.1],
+lib/Fontmap.Sol [1.2.6.1.2.1], lib/Fontmap.Ult [1.2.6.1.2.1],
+lib/addxchar.ps [1.2.6.1.2.1], lib/align.ps [1.2.6.1.2.1],
+lib/bdftops.ps [1.3.2.2.2.1], lib/caption.ps [1.2.6.1.2.1],
+lib/cid2code.ps [1.3.4.1.2.1], lib/docie.ps [1.2.6.1.2.1],
+lib/errpage.ps [1.2.6.1.2.1], lib/font2c.ps [1.3.2.1.2.1],
+lib/font2pcl.ps [1.2.6.2.2.1], lib/gslp.ps [1.2.6.2.2.1],
+lib/gsnup.ps [1.2.6.1.2.1], lib/image-qa.ps [1.3.2.1.2.1],
+lib/impath.ps [1.3.4.1.2.1], lib/jispaper.ps [1.2.6.1.2.1],
+lib/lines.ps [1.2.6.1.2.1], lib/markhint.ps [1.2.6.1.2.1],
+lib/markpath.ps [1.2.6.1.2.1], lib/packfile.ps [1.2.6.2.2.1],
+lib/pcharstr.ps [1.2.6.1.2.1], lib/pdf2dsc.ps [1.3.4.2.2.1],
+lib/pdfopt.ps [1.10.2.2.2.1], lib/pdfwrite.ps [1.7.2.1.2.1],
+lib/pfbtopfa.ps [1.2.6.1.2.1], lib/ppath.ps [1.2.6.1.2.1],
+lib/pphs.ps [1.3.2.1.2.1], lib/ps2ai.ps [1.2.6.1.2.1],
+lib/ps2ascii.ps [1.3.2.2.2.1], lib/ps2epsi.ps [1.5.2.3.2.1],
+lib/rollconv.ps [1.1.8.1], lib/showchar.ps [1.2.6.1.2.1],
+lib/stcinfo.ps [1.2.6.1.2.1], lib/stcolor.ps [1.2.6.1.2.1],
+lib/stocht.ps [1.3.6.1.2.1], lib/traceimg.ps [1.2.6.2.2.1],
+lib/traceop.ps [1.2.6.1.2.1], lib/type1enc.ps [1.2.6.1.2.1],
+lib/type1ops.ps [1.2.6.1.2.1], lib/uninfo.ps [1.2.6.1.2.1],
+lib/unprot.ps [1.2.6.1.2.1], lib/viewcmyk.ps [1.2.6.2.2.1],
+lib/viewgif.ps [1.2.6.1.2.1], lib/viewjpeg.ps [1.1.6.2.2.1],
+lib/viewmiff.ps [1.2.6.1.2.1], lib/viewpbm.ps [1.2.6.2.2.1],
+lib/viewpcx.ps [1.2.6.2.2.1], lib/viewps2a.ps [1.2.6.1.2.1],
+lib/wftopfa.ps [1.2.6.1.2.1], lib/winmaps.ps [1.2.6.1.2.1],
+lib/wrfont.ps [1.2.6.1.2.1], lib/zeroline.ps [1.2.6.1.2.1]: 2003/04/12
+14:02:38 giles)
+
+Avoid calling a null pgsdll_callback, as can happen with the new client api
+and CHECK_INTERRUPTS. This fix affects primarily MacOS; similar protections
+are already in place for other platforms, although the global was not
+explicitly initialized to null. Also return EOFC in the mac stdio stream
+process if no callback is defined. Closes bug 686768. Also backports some
+code cleanup from HEAD. (gp_mac.c [1.1.4.3.2.2], gp_macio.c [1.2.4.5.2.3]:
+2003/04/12 16:37:26 giles)
+
+Add a missing variable declaration for VMS. Patch from Forrest Cahoon and
+Jouk Jansen. (gp_vms.c [1.7.2.3.2.2]: 2003/04/14 13:58:04 giles)
+
+</pre><h2><a name="7.07-Drivers"></a>Drivers</h2><pre>
+
+Avoid calling a null pgsdll_callback, as can happen with the new client api
+and CHECK_INTERRUPTS. This fix affects primarily MacOS; similar protections
+are already in place for other platforms, although the global was not
+explicitly initialized to null. Also return EOFC in the mac stdio stream
+process if no callback is defined. Closes bug 686768. Also backports some
+code cleanup from HEAD. (gdevmac.c [1.1.4.3.2.2]: 2003/04/12 16:37:26 giles)
+
+In the display device, store the line pointers separately from the bits, so
+that the bits can be placed in special memory (e.g. allocated in video
+memory). Fixes Bug 686780 display_memalloc() asks for too much memory. If
+reopening the display device fails after setting the callback, display an
+error message. Allocate the large display bitmap using a low level allocator
+to avoid exceeding the memory limit of the previously used device stable
+memory allocator. Fixes bugs 686836 "-r doesn't work" and duplicate 686838
+"Ghostscript doesn't do anything". DETAILS: The display memory device and
+the raster including line pointers was allocated using the stable allocator
+of the display device. This had a limit of 1Mbyte, which was exceeded when
+the resolution was greater then 114dpi. This would cause subsequent
+allocations to fail, but it appears that nothing else tried to use this
+allocator after the display device. The display device was changed to
+allocate the line pointers separately to allow the raster to be allocated in
+special memory, e.g. video memory or shared memory. This caused the
+subsequent allocation of the line pointers to fail when resolution exceeded
+114dpi. The modified code now allocates the raster with
+gs_alloc_byte_array_immovable, which allocates directly from the C heap, not
+subject to any memory limit apart from the overall -K limit if specified,
+and is not subject to garbage collection. The normal allocator now has
+sufficient memory to allocate the line pointers without problem. The raster
+pointer is removed from the pointers that are enumerated during garbage
+collection. (gdevdsp.c [1.5.2.5.2.3]: 2003/05/01 10:06:26 ghostgum)
+
+Log message: For the pngalpha device, set the default background color to
+white in the bKGD chunk. Add an option -dBackgroundColor=16#RRGGBB to
+explicitly set the background color. This is needed by a common web browser
+that doesn't correctly support PNG with alpha transparency. DETAILS:
+Programs that don't fully support alpha transparency let libpng convert an
+RGBA image to RGB. The background color used is either provided by the
+program, or in the bKGD chunk, or it falls back to gray. MSIE was defaulting
+to a gray background which is not commonly used on web pages. By writing a
+white bKGD chunk, PNG files will display correctly against a white
+background in MSIE. If a solid color for a web page background is used with
+&lt;body bgcolor="#CCCC00"&gt;, then PNG images appearing on that page would
+need to be created with -dBackgroundColor=16#CCCC00. For textured background
+there is no hope. Microsoft needs to fix Internet Explorer.
+(gdevpng.c [1.4.2.1.2.3]: 2003/05/15 10:05:29 ghostgum)
+
+</pre><h2><a name="7.07-PDF_Interpreter"></a>PDF Interpreter</h2><pre>
+
+Apply standard FSF license banner to files missed the 7.06 release. Patch
+from Brett Smith. (lib/pdf_base.ps [1.14.2.1.2.1],
+lib/pdf_draw.ps [1.36.2.2.2.1], lib/pdf_font.ps [1.23.2.6.2.1],
+lib/pdf_main.ps [1.35.2.7.2.3], lib/pdf_ops.ps [1.17.2.2.2.1]: 2003/04/12
+14:02:39 giles)
+
+</pre><h2><a name="7.07-Interpreter"></a>Interpreter</h2><pre>
+
+Increment the version number after release. (lib/gs_init.ps [1.40.2.12.2.2]:
+2003/04/08 11:05:47 giles)
+
+Apply standard FSF license banner to files missed the 7.06 release. Patch
+from Brett Smith. (examples/waterfal.ps [1.3.2.1.2.1],
+lib/gs_agl.ps [1.2.6.1.2.1], lib/gs_btokn.ps [1.5.2.1.2.1],
+lib/gs_ccfnt.ps [1.5.2.1.2.1], lib/gs_ce_e.ps [1.2.6.1.2.1],
+lib/gs_cff.ps [1.10.2.1.2.1], lib/gs_cidcm.ps [1.5.2.2.2.1],
+lib/gs_cidfn.ps [1.18.4.5.2.1], lib/gs_cmap.ps [1.11.2.4.2.1],
+lib/gs_cmdl.ps [1.2.6.1.2.1], lib/gs_css_e.ps [1.2.6.1.2.1],
+lib/gs_dbt_e.ps [1.2.6.1.2.1], lib/gs_diskf.ps [1.2.6.1.2.1],
+lib/gs_dpnxt.ps [1.2.6.1.2.1], lib/gs_dps.ps [1.4.6.1.2.1],
+lib/gs_dps1.ps [1.2.6.1.2.1], lib/gs_dps2.ps [1.3.4.1.2.1],
+lib/gs_dscp.ps [1.4.2.1.2.1], lib/gs_epsf.ps [1.2.6.11.2.3],
+lib/gs_fform.ps [1.2.6.1.2.1], lib/gs_fonts.ps [1.13.2.3.2.1],
+lib/gs_frsd.ps [1.4.6.1.2.1], lib/gs_icc.ps [1.2.2.1.2.1],
+lib/gs_il1_e.ps [1.2.6.1.2.1], lib/gs_il2_e.ps [1.2.6.1.2.1],
+lib/gs_init.ps [1.40.2.12.2.3], lib/gs_kanji.ps [1.2.6.1.2.1],
+lib/gs_ksb_e.ps [1.2.6.1.2.1], lib/gs_l2img.ps [1.2.6.1.2.1],
+lib/gs_lev2.ps [1.7.2.4.2.3], lib/gs_lgo_e.ps [1.3.6.1.2.1],
+lib/gs_lgx_e.ps [1.2.6.1.2.1], lib/gs_ll3.ps [1.10.2.2.2.1],
+lib/gs_mex_e.ps [1.2.6.1.2.1], lib/gs_mgl_e.ps [1.3.6.1.2.1],
+lib/gs_mro_e.ps [1.2.6.1.2.1], lib/gs_pdf_e.ps [1.2.6.1.2.1],
+lib/gs_pdfwr.ps [1.11.2.1.2.1], lib/gs_pfile.ps [1.2.6.1.2.1],
+lib/gs_rdlin.ps [1.2.6.1.2.1], lib/gs_res.ps [1.16.2.2.2.1],
+lib/gs_setpd.ps [1.8.2.2.2.2], lib/gs_statd.ps [1.5.2.2.2.1],
+lib/gs_std_e.ps [1.2.6.1.2.1], lib/gs_sym_e.ps [1.2.6.1.2.1],
+lib/gs_trap.ps [1.3.6.2.2.1], lib/gs_ttf.ps [1.9.2.4.2.1],
+lib/gs_typ32.ps [1.3.2.2.2.1], lib/gs_typ42.ps [1.2.6.1.2.1],
+lib/gs_type1.ps [1.5.2.1.2.1], lib/gs_wan_e.ps [1.2.6.1.2.1],
+lib/gs_wl1_e.ps [1.2.6.1.2.1], lib/gs_wl2_e.ps [1.2.6.1.2.1],
+lib/gs_wl5_e.ps [1.2.6.1.2.1]: 2003/04/12 14:02:38 giles)
+
+Sort the list of devices in the output of 'gs -h' so they're easier to read.
+List the default device separately as it's no longer first. Based on a patch
+from Nelson Beebe. Closes bug 416746. Also correct a warning in argproc().
+(imainarg.c [1.13.2.3.2.2]: 2003/04/12 16:43:14 giles)
+
+In the display device, store the line pointers separately from the bits, so
+that the bits can be placed in special memory (e.g. allocated in video
+memory). Fixes Bug 686780 display_memalloc() asks for too much memory. If
+reopening the display device fails after setting the callback, display an
+error message. Allocate the large display bitmap using a low level allocator
+to avoid exceeding the memory limit of the previously used device stable
+memory allocator. Fixes bugs 686836 "-r doesn't work" and duplicate 686838
+"Ghostscript doesn't do anything". DETAILS: The display memory device and
+the raster including line pointers was allocated using the stable allocator
+of the display device. This had a limit of 1Mbyte, which was exceeded when
+the resolution was greater then 114dpi. This would cause subsequent
+allocations to fail, but it appears that nothing else tried to use this
+allocator after the display device. The display device was changed to
+allocate the line pointers separately to allow the raster to be allocated in
+special memory, e.g. video memory or shared memory. This caused the
+subsequent allocation of the line pointers to fail when resolution exceeded
+114dpi. The modified code now allocates the raster with
+gs_alloc_byte_array_immovable, which allocates directly from the C heap, not
+subject to any memory limit apart from the overall -K limit if specified,
+and is not subject to garbage collection. The normal allocator now has
+sufficient memory to allocate the line pointers without problem. The raster
+pointer is removed from the pointers that are enumerated during garbage
+collection. (idisp.c [1.2.2.2.2.2]: 2003/05/01 10:06:26 ghostgum)
+
+Security fixes. Add detection of %pipe% device when in SAFER mode. Also fix
+detection of 'renamefile' to prevent rename from a file that is not on the
+PermitFileControl list. (zfile.c [1.11.2.4.2.2]: 2003/05/17 14:28:33 ray)
+
+</pre><h2><a name="7.07-Library"></a>Library</h2><pre>
+
+Increment the version number after release. (gscdef.c [1.15.2.4.2.3]:
+2003/04/08 11:05:47 giles)
+
+Update the version and data for the 7.07 release. (gscdef.c [1.15.2.4.2.4]:
+2003/05/17 14:39:00 giles)
+
+</pre><h2><a name="7.07-Other"></a>Other</h2><pre>
+
+Test the optimization compiler flag '-O2' before using it since some vendor
+compilers have different syntax. (Makefile.in [1.1.4.13.2.3],
+configure.ac [1.4.4.12.2.2]: 2003/04/16 13:59:56 giles)
+
+Include the bbox device in the default autoconf build.
+(Makefile.in [1.1.4.13.2.4]: 2003/04/29 18:33:31 giles)
+
+<hr>
+
+<h1><a name="Version7.06"></a>Version 7.06 (2003-04-01)</h1>
+
+<p>This is the second release of the stable 7.0x series under the GNU
+GPL, following one year after the release of 7.00. It includes a number
+of small bug fixes and documentation cleanup to comply with the GNU
+coding guidelines.
+
+<p>Also new in this release is the 'pngalpha' device which produces png output
+with a transparent background (page) color so they can be composited against a
+separate background. The transparency is based only on what parts of the page
+have been drawn and does not support PDF 1.4 trasparent painting.</p>
+
+<h3><a name="7.06_Incompatible_changes"></a>Incompatible changes</h3>
+
+<p>
+No incompatible changes have been recorded for this version. Users of the 6.5x versions of GNU
+Ghostscript will want to check the History for a complete list of changes since that version.
+Authors of drivers with potential security implications are also encouraged to review
+the security changes introduced with 6.53/7.04.
+
+<p>
+Additionally, the scripts which create the project file for bulding
+ghostscript on MacOS have been updated for Metrowerks CodeWarrior 7.2 and 8.3.
+Edit the LIBS entries in macgenmcpxml.sh to recover the settings for
+CW6.
+
+<h2><a name="7.06-Documentation"></a>Documentation</h2><pre>
+
+Fixes problems:
+ - Add the option -dUseCropBox to set the page size from the CropBox
+rather than the MediaBox. This is appropriate when using ghostscript to view
+PDF files or convert to bitmaps. It probably isn't appropriate for printing.
+Fixes SourceForge bugs #522486, "Wromg size EPS generated from PDF" and
+#538267 "Problems with Media Box in PDF and PS interpreter".
+(doc/Use.htm [1.33.2.13]: 2002/06/28 10:59:01 ghostgum)
+ - When ghostscript is given a PDF file on standard input, copy it to
+a temporary file before processing. Prior to version 7, ghostscript could
+read PDF from standard input redirected from a file, but not from a pipe.
+Standard input was changed in version 7 to use callouts, which prevented PDF
+reading from standard input. Fixes SourceForge bug #583413, /ioerror with gs
+- &lt; file.pdf vers 7.xx (doc/Use.htm [1.33.2.15]: 2002/09/14 12:05:58
+ghostgum)
+ - Fix: Mentions the autoconf build method in the installation
+documentation. Inspired by a user report of having looked there first rather
+than at Make.htm; an understandible choice based on GNU/Linux packaging
+conventions. Also removes a reference to using the Acrobat Reader fonts.
+(doc/Install.htm [1.26.2.9]: 2002/09/16 21:41:40 giles)
+ - Fix a broken documentation link. (doc/Use.htm [1.33.2.17]:
+2002/09/16 22:50:31 giles)
+ - Keep pagedevice and device views of .LockSafetyParams correct even
+after a 'restore' is used to unlock. The dictionary fed to the setpagedevice
+operator is allocated in the same VM space as currentpagedevice to avoid
+invalidaccess problems. Fixed SF #580029 and does not revert to the
+incorrect behaviour of bug #516379. (doc/Language.htm [1.34.2.12]:
+2002/09/19 17:05:05 ray)
+ - adds missing files to the developer documentation.
+(doc/Develop.htm [1.47.2.16]: 2002/10/10 13:22:31 giles)
+ - release number must be updated in lib/gs_init.ps as well.
+(doc/Release.htm [1.40.2.19]: 2002/10/10 13:25:25 giles)
+
+Update the url for the zlib website and source. Fixes SF Bug #550585.
+(doc/Make.htm [1.36.2.13], doc/New-user.htm [1.30.2.9]: 2002/05/09 17:04:50
+giles)
+
+Prefer {} to () for manditory alteration groups in commandline arguments.
+Patch from Eric S. Raymond. (man/de/ps2pdf.1 [1.1.4.1],
+man/ps2pdf.1 [1.14.2.8], man/ps2pdfwr.1 [1.13.2.8]: 2002/08/08 12:27:21
+giles)
+
+Add missing "Summary of environment variables" header to Use.htm.
+(doc/Use.htm [1.33.2.14]: 2002/08/09 11:00:04 ghostgum)
+
+Delete all temporary files when the interpreter closes.
+(doc/Language.htm [1.34.2.11]: 2002/09/05 12:21:45 ghostgum)
+
+Add command line options -dEPS, -dEPSCrop and -dEPSFitPage for handling
+Encapsulated PostScript files. (doc/Use.htm [1.33.2.16]: 2002/09/14 12:17:25
+ghostgum)
+
+Removes mention of the gdevcd8.c drivers from the documentation. All of
+these printers are supported by the gimp-print and/or hpijs projects. The
+(GPL) third party drivers for them were never added to the 7.0x series.
+Closes SourceForge bug #557177. (doc/Devices.htm [1.34.2.12]: 2002/09/22
+23:02:38 giles)
+
+Add documentation to the .setsafe operator that was added to .locksafe
+operator that says that .setsafe uses setpagedevice, thus it will erase the
+page. Related to SourceForge bug #580029. (doc/Language.htm [1.34.2.13]:
+2002/09/23 06:19:58 ray)
+
+Remove excessive trademark symbols to improve compliance with the GNU coding
+guidelines. (man/de/ps2pdf.1 [1.1.4.2], man/ps2pdf.1 [1.14.2.9]: 2002/09/23
+14:53:40 giles)
+
+Attempt to update version info on the german manpages and port Thomas
+Hoffmann's fixes from HEAD. (man/de/ansi2knr.1 [1.1.4.1],
+man/de/dvipdf.1 [1.1.4.1], man/de/font2c.1 [1.1.4.1],
+man/de/gsnd.1 [1.2.4.1], man/de/pdf2dsc.1 [1.1.4.1],
+man/de/pdf2ps.1 [1.2.4.1], man/de/pdfopt.1 [1.1.4.1],
+man/de/printafm.1 [1.1.4.1], man/de/ps2ascii.1 [1.1.4.1],
+man/de/ps2pdf.1 [1.1.4.3], man/de/ps2ps.1 [1.2.4.1],
+man/de/wftopfa.1 [1.1.4.1]: 2002/09/23 15:57:35 giles)
+
+Improve compliance with GNU coding standards by removing references to
+other software. (doc/API.htm [1.11.2.11], doc/C-style.htm [1.21.2.9],
+doc/Current.htm [1.13.2.9], doc/DLL.htm [1.15.2.9], doc/Develop.htm
+[1.47.2.14], doc/Devices.htm [1.34.2.13], doc/Drivers.htm [1.21.2.9],
+doc/Fonts.htm [1.22.2.10], doc/Helpers.htm [1.17.2.9], doc/Hershey.htm
+[1.3.4.1], doc/History1.htm [1.13.2.9], doc/History2.htm [1.13.2.9],
+doc/History3.htm [1.13.2.9], doc/History4.htm [1.13.2.9], doc/History5.htm
+[1.15.2.9], doc/History6.htm [1.30.2.9], doc/History7.htm [1.5.2.13],
+doc/Htmstyle.htm [1.18.2.9], doc/Humor.htm [1.3.2.2], doc/Install.htm
+[1.26.2.10], doc/Issues.htm [1.15.2.10], doc/Language.htm [1.34.2.14],
+doc/Lib.htm [1.14.2.9], doc/Maintain.htm [1.23.2.9], doc/Make.htm
+[1.36.2.14], doc/New-user.htm [1.30.2.10], doc/News.htm [1.90.2.15],
+doc/Projects.htm [1.33.2.9], doc/Ps-style.htm [1.13.2.9], doc/Ps2epsi.htm
+[1.15.2.10], doc/Ps2pdf.htm [1.32.2.9], doc/Psfiles.htm [1.22.2.10],
+doc/Readme.htm [1.31.2.11], doc/Release.htm [1.40.2.16], doc/Source.htm
+[1.13.2.9], doc/Unix-lpr.htm [1.13.2.9], doc/Use.htm [1.33.2.18],
+doc/Xfonts.htm [1.13.2.9]: 2002/09/23 16:26:21 giles)
+
+Additional german manpage cleanup thanks to the Jens Harting.
+(man/de/ansi2knr.1 [1.1.4.2], man/de/dvipdf.1 [1.1.4.2],
+man/de/font2c.1 [1.1.4.2], man/de/gsnd.1 [1.2.4.2],
+man/de/pdf2dsc.1 [1.1.4.2], man/de/pdf2ps.1 [1.2.4.2],
+man/de/pdfopt.1 [1.1.4.2], man/de/ps2ascii.1 [1.1.4.2],
+man/de/ps2pdf.1 [1.1.4.4], man/de/ps2ps.1 [1.2.4.2]: 2002/09/23 17:24:44
+giles)
+
+Improve compliance with the GNU coding guidelines on references to other
+software. (doc/Readme.htm [1.31.2.12]: 2002/09/25 14:58:34 giles)
+
+Further improvement of compliance with the GNU coding guidelines on
+references to other software. (doc/Make.htm [1.36.2.15], doc/New-user.htm
+[1.30.2.11]: 2002/09/25 18:13:29 giles)
+
+Further improvement of compliance with the GNU coding guidelines on
+references to other software. (doc/gs-vms.hlp [1.12.2.8]: 2002/10/07
+22:18:20 giles)
+
+Remove Tester.htm. It's (probably) out of date. (doc/Readme.htm
+[1.31.2.13]: 2002/10/07 22:19:40 giles)
+
+Last round of refinement for compliance with GNU coding
+standards. (doc/Fonts.htm [1.22.2.11], doc/Install.htm [1.26.2.11],
+doc/Issues.htm [1.15.2.11], doc/Maintain.htm [1.23.2.10], doc/Make.htm
+[1.36.2.16], doc/New-user.htm [1.30.2.12], doc/Readme.htm [1.31.2.14],
+doc/Release.htm [1.40.2.17]: 2002/10/08 08:24:34 giles)
+
+Remove remaining elements of support for K&amp;R (pre-ansi) C. We no longer
+support building ghostscript tt way, but the remaining dead code causes
+confusion for some users. Closes Sourceforge bug #618048.
+(doc/Develop.htm [1.47.2.15], doc/Make.htm [1.36.2.17],
+doc/Release.htm [1.40.2.18]: 2002/10/10 00:28:26 giles)
+
+Update version number and date for release. (doc/API.htm [1.11.2.12],
+doc/C-style.htm [1.21.2.10], doc/Current.htm [1.13.2.10],
+doc/DLL.htm [1.15.2.10], doc/Develop.htm [1.47.2.17],
+doc/Devices.htm [1.34.2.14], doc/Drivers.htm [1.21.2.10],
+doc/Fonts.htm [1.22.2.12], doc/Helpers.htm [1.17.2.10],
+doc/History1.htm [1.13.2.10], doc/History2.htm [1.13.2.10],
+doc/History3.htm [1.13.2.10], doc/History4.htm [1.13.2.10],
+doc/History5.htm [1.15.2.10], doc/History6.htm [1.30.2.10],
+doc/History7.htm [1.5.2.14], doc/Htmstyle.htm [1.18.2.10],
+doc/Install.htm [1.26.2.12], doc/Issues.htm [1.15.2.12],
+doc/Language.htm [1.34.2.15], doc/Lib.htm [1.14.2.10],
+doc/Maintain.htm [1.23.2.11], doc/Make.htm [1.36.2.18],
+doc/New-user.htm [1.30.2.13], doc/News.htm [1.90.2.16],
+doc/Projects.htm [1.33.2.10], doc/Ps-style.htm [1.13.2.10],
+doc/Ps2epsi.htm [1.15.2.11], doc/Ps2pdf.htm [1.32.2.10],
+doc/Psfiles.htm [1.22.2.11], doc/Readme.htm [1.31.2.15],
+doc/Release.htm [1.40.2.20], doc/Source.htm [1.13.2.10],
+doc/Unix-lpr.htm [1.13.2.10], doc/Use.htm [1.33.2.19],
+doc/Xfonts.htm [1.13.2.10], doc/gs-vms.hlp [1.12.2.9]: 2002/10/10 13:36:49
+giles)
+
+Update version number and date for release. (man/dvipdf.1 [1.10.2.8],
+man/font2c.1 [1.10.2.8], man/gs.1 [1.10.2.9], man/gslp.1 [1.10.2.8],
+man/gsnd.1 [1.10.2.8], man/pdf2dsc.1 [1.10.2.8], man/pdf2ps.1 [1.12.2.8],
+man/pdfopt.1 [1.10.2.8], man/pf2afm.1 [1.10.2.8], man/pfbtopfa.1 [1.11.2.8],
+man/printafm.1 [1.10.2.8], man/ps2ascii.1 [1.10.2.8],
+man/ps2epsi.1 [1.10.2.9], man/ps2pdf.1 [1.14.2.10],
+man/ps2pdfwr.1 [1.13.2.9], man/ps2ps.1 [1.17.2.8], man/wftopfa.1 [1.10.2.8]:
+2002/10/10 13:37:00 giles)
+
+Improvements to processing of EPS files. (doc/Use.htm [1.33.2.20]:
+2002/10/31 11:12:12 ghostgum)
+
+Correct the documented paper sizes in Use.htm to match gs_statd.ps after fix
+for SF bug # 536877. Change cm units to the more common mm.
+(doc/Use.htm [1.33.2.21]: 2002/11/04 22:55:35 ghostgum)
+
+Add working 'distclean' and 'maintainer-clean' targets to the autoconf
+makefile. Backport from HEAD. (doc/Release.htm [1.40.2.22]: 2002/12/02
+00:10:23 giles)
+
+Update release date for second candidate. (doc/API.htm [1.11.2.13],
+doc/C-style.htm [1.21.2.11], doc/DLL.htm [1.15.2.11],
+doc/Develop.htm [1.47.2.18], doc/Devices.htm [1.34.2.15],
+doc/Drivers.htm [1.21.2.11], doc/Fonts.htm [1.22.2.13],
+doc/Helpers.htm [1.17.2.11], doc/History1.htm [1.13.2.11],
+doc/History2.htm [1.13.2.11], doc/History3.htm [1.13.2.11],
+doc/History4.htm [1.13.2.11], doc/History5.htm [1.15.2.11],
+doc/History6.htm [1.30.2.11], doc/History7.htm [1.5.2.16],
+doc/Htmstyle.htm [1.18.2.11], doc/Install.htm [1.26.2.13],
+doc/Issues.htm [1.15.2.13], doc/Language.htm [1.34.2.16],
+doc/Lib.htm [1.14.2.11], doc/Maintain.htm [1.23.2.12],
+doc/Make.htm [1.36.2.19], doc/New-user.htm [1.30.2.14],
+doc/News.htm [1.90.2.18], doc/Projects.htm [1.33.2.11],
+doc/Ps-style.htm [1.13.2.11], doc/Ps2epsi.htm [1.15.2.12],
+doc/Ps2pdf.htm [1.32.2.11], doc/Psfiles.htm [1.22.2.12],
+doc/Readme.htm [1.31.2.16], doc/Release.htm [1.40.2.23],
+doc/Source.htm [1.13.2.11], doc/Unix-lpr.htm [1.13.2.11],
+doc/Use.htm [1.33.2.22], doc/Xfonts.htm [1.13.2.11],
+doc/gs-vms.hlp [1.12.2.10]: 2002/12/02 01:54:36 giles)
+
+Update release date for second candidate. (man/dvipdf.1 [1.10.2.9],
+man/font2c.1 [1.10.2.9], man/gs.1 [1.10.2.10], man/gslp.1 [1.10.2.9],
+man/gsnd.1 [1.10.2.9], man/pdf2dsc.1 [1.10.2.9], man/pdf2ps.1 [1.12.2.9],
+man/pdfopt.1 [1.10.2.9], man/pf2afm.1 [1.10.2.9], man/pfbtopfa.1 [1.11.2.9],
+man/printafm.1 [1.10.2.9], man/ps2ascii.1 [1.10.2.9],
+man/ps2epsi.1 [1.10.2.10], man/ps2pdf.1 [1.14.2.11],
+man/ps2pdfwr.1 [1.13.2.10], man/ps2ps.1 [1.17.2.9],
+man/wftopfa.1 [1.10.2.9]: 2002/12/02 01:54:43 giles)
+
+Change documentation and changelogs to better comply with GNU coding
+guidelines. Patch from Brett Smith. (doc/API.htm [1.11.2.13.2.1],
+doc/Changes.htm [1.28.2.8.2.1], doc/Develop.htm [1.47.2.18.2.1],
+doc/Devices.htm [1.34.2.15.2.1], doc/Fonts.htm [1.22.2.13.2.1],
+doc/History2.htm [1.13.2.11.2.1], doc/History3.htm [1.13.2.11.2.1],
+doc/History4.htm [1.13.2.11.2.1], doc/History5.htm [1.15.2.11.2.1],
+doc/History6.htm [1.30.2.11.2.1], doc/History7.htm [1.5.2.17.2.1],
+doc/Install.htm [1.26.2.13.2.1], doc/Maintain.htm [1.23.2.12.2.1],
+doc/Make.htm [1.36.2.19.2.1], doc/New-user.htm [1.30.2.14.2.1],
+doc/Projects.htm [1.33.2.11.2.1], doc/Ps2epsi.htm [1.15.2.12.2.1],
+doc/Release.htm [1.40.2.23.2.1], doc/Use.htm [1.33.2.22.2.1]: 2003/01/17
+00:58:51 giles)
+
+Update release date for final 7.06 release. (doc/API.htm [1.11.2.13.2.2],
+doc/C-style.htm [1.21.2.11.2.1], doc/DLL.htm [1.15.2.11.2.1],
+doc/Develop.htm [1.47.2.18.2.2], doc/Devices.htm [1.34.2.15.2.2],
+doc/Drivers.htm [1.21.2.11.2.1], doc/Fonts.htm [1.22.2.13.2.2],
+doc/Helpers.htm [1.17.2.11.2.1], doc/History1.htm [1.13.2.11.2.1],
+doc/History2.htm [1.13.2.11.2.2], doc/History3.htm [1.13.2.11.2.2],
+doc/History4.htm [1.13.2.11.2.2], doc/History5.htm [1.15.2.11.2.2],
+doc/History6.htm [1.30.2.11.2.2], doc/History7.htm [1.5.2.17.2.2],
+doc/Htmstyle.htm [1.18.2.11.2.1], doc/Install.htm [1.26.2.13.2.2],
+doc/Issues.htm [1.15.2.13.2.1], doc/Language.htm [1.34.2.16.2.1],
+doc/Lib.htm [1.14.2.11.2.1], doc/Maintain.htm [1.23.2.12.2.2],
+doc/Make.htm [1.36.2.19.2.2], doc/New-user.htm [1.30.2.14.2.2],
+doc/News.htm [1.90.2.18.2.1], doc/Projects.htm [1.33.2.11.2.2],
+doc/Ps-style.htm [1.13.2.11.2.1], doc/Ps2epsi.htm [1.15.2.12.2.2],
+doc/Ps2pdf.htm [1.32.2.11.2.1], doc/Psfiles.htm [1.22.2.12.2.1],
+doc/Readme.htm [1.31.2.16.2.1], doc/Release.htm [1.40.2.23.2.2],
+doc/Source.htm [1.13.2.11.2.1], doc/Unix-lpr.htm [1.13.2.11.2.1],
+doc/Use.htm [1.33.2.22.2.2], doc/Xfonts.htm [1.13.2.11.2.1],
+doc/gs-vms.hlp [1.12.2.10.2.1], man/dvipdf.1 [1.10.2.9.2.1],
+man/font2c.1 [1.10.2.9.2.1], man/gs.1 [1.10.2.10.2.1],
+man/gslp.1 [1.10.2.9.2.1], man/gsnd.1 [1.10.2.9.2.1],
+man/pdf2dsc.1 [1.10.2.9.2.1], man/pdf2ps.1 [1.12.2.9.2.1],
+man/pdfopt.1 [1.10.2.9.2.1], man/pf2afm.1 [1.10.2.9.2.1],
+man/pfbtopfa.1 [1.11.2.9.2.1], man/printafm.1 [1.10.2.9.2.1],
+man/ps2ascii.1 [1.10.2.9.2.1], man/ps2epsi.1 [1.10.2.10.2.1],
+man/ps2pdf.1 [1.14.2.11.2.1], man/ps2pdfwr.1 [1.13.2.10.2.1],
+man/ps2ps.1 [1.17.2.9.2.1], man/wftopfa.1 [1.10.2.9.2.1]: 2003/02/09
+16:20:03 giles)
+
+Correct a typo in the release date. (doc/API.htm [1.11.2.13.2.3],
+doc/C-style.htm [1.21.2.11.2.2], doc/DLL.htm [1.15.2.11.2.2],
+doc/Develop.htm [1.47.2.18.2.3], doc/Devices.htm [1.34.2.15.2.3],
+doc/Drivers.htm [1.21.2.11.2.2], doc/Fonts.htm [1.22.2.13.2.3],
+doc/Helpers.htm [1.17.2.11.2.2], doc/History1.htm [1.13.2.11.2.2],
+doc/History2.htm [1.13.2.11.2.3], doc/History3.htm [1.13.2.11.2.3],
+doc/History4.htm [1.13.2.11.2.3], doc/History5.htm [1.15.2.11.2.3],
+doc/History6.htm [1.30.2.11.2.3], doc/History7.htm [1.5.2.17.2.3],
+doc/Htmstyle.htm [1.18.2.11.2.2], doc/Install.htm [1.26.2.13.2.3],
+doc/Issues.htm [1.15.2.13.2.2], doc/Language.htm [1.34.2.16.2.2],
+doc/Lib.htm [1.14.2.11.2.2], doc/Maintain.htm [1.23.2.12.2.3],
+doc/Make.htm [1.36.2.19.2.3], doc/New-user.htm [1.30.2.14.2.3],
+doc/News.htm [1.90.2.18.2.2], doc/Projects.htm [1.33.2.11.2.3],
+doc/Ps-style.htm [1.13.2.11.2.2], doc/Ps2epsi.htm [1.15.2.12.2.3],
+doc/Ps2pdf.htm [1.32.2.11.2.2], doc/Psfiles.htm [1.22.2.12.2.2],
+doc/Readme.htm [1.31.2.16.2.2], doc/Release.htm [1.40.2.23.2.3],
+doc/Source.htm [1.13.2.11.2.2], doc/Unix-lpr.htm [1.13.2.11.2.2],
+doc/Use.htm [1.33.2.22.2.3], doc/Xfonts.htm [1.13.2.11.2.2],
+doc/gs-vms.hlp [1.12.2.10.2.2], man/dvipdf.1 [1.10.2.9.2.2],
+man/font2c.1 [1.10.2.9.2.2], man/gs.1 [1.10.2.10.2.2],
+man/gslp.1 [1.10.2.9.2.2], man/gsnd.1 [1.10.2.9.2.2],
+man/pdf2dsc.1 [1.10.2.9.2.2], man/pdf2ps.1 [1.12.2.9.2.2],
+man/pdfopt.1 [1.10.2.9.2.2], man/pf2afm.1 [1.10.2.9.2.2],
+man/pfbtopfa.1 [1.11.2.9.2.2], man/printafm.1 [1.10.2.9.2.2],
+man/ps2ascii.1 [1.10.2.9.2.2], man/ps2epsi.1 [1.10.2.10.2.2],
+man/ps2pdf.1 [1.14.2.11.2.2], man/ps2pdfwr.1 [1.13.2.10.2.2],
+man/ps2ps.1 [1.17.2.9.2.2], man/wftopfa.1 [1.10.2.9.2.2]: 2003/02/09
+17:07:08 giles)
+
+Update changelog and release date. (doc/News.htm [1.90.2.18.2.3]: 2003/03/31
+13:56:42 giles)
+
+Propagate new release date to all documentation.
+(doc/API.htm [1.11.2.13.2.4], doc/C-style.htm [1.21.2.11.2.3],
+doc/DLL.htm [1.15.2.11.2.3], doc/Develop.htm [1.47.2.18.2.4],
+doc/Devices.htm [1.34.2.15.2.4], doc/Drivers.htm [1.21.2.11.2.3],
+doc/Fonts.htm [1.22.2.13.2.4], doc/Helpers.htm [1.17.2.11.2.3],
+doc/History1.htm [1.13.2.11.2.3], doc/History2.htm [1.13.2.11.2.4],
+doc/History3.htm [1.13.2.11.2.4], doc/History4.htm [1.13.2.11.2.4],
+doc/History5.htm [1.15.2.11.2.4], doc/History6.htm [1.30.2.11.2.4],
+doc/History7.htm [1.5.2.17.2.4], doc/Htmstyle.htm [1.18.2.11.2.3],
+doc/Install.htm [1.26.2.13.2.4], doc/Issues.htm [1.15.2.13.2.3],
+doc/Language.htm [1.34.2.16.2.3], doc/Lib.htm [1.14.2.11.2.3],
+doc/Maintain.htm [1.23.2.12.2.4], doc/Make.htm [1.36.2.19.2.4],
+doc/New-user.htm [1.30.2.14.2.4], doc/News.htm [1.90.2.18.2.4],
+doc/Projects.htm [1.33.2.11.2.4], doc/Ps-style.htm [1.13.2.11.2.3],
+doc/Ps2epsi.htm [1.15.2.12.2.4], doc/Ps2pdf.htm [1.32.2.11.2.3],
+doc/Psfiles.htm [1.22.2.12.2.3], doc/Readme.htm [1.31.2.16.2.3],
+doc/Release.htm [1.40.2.23.2.4], doc/Source.htm [1.13.2.11.2.3],
+doc/Unix-lpr.htm [1.13.2.11.2.3], doc/Use.htm [1.33.2.22.2.4],
+doc/Xfonts.htm [1.13.2.11.2.3], doc/gs-vms.hlp [1.12.2.10.2.3],
+man/dvipdf.1 [1.10.2.9.2.3], man/font2c.1 [1.10.2.9.2.3],
+man/gs.1 [1.10.2.10.2.3], man/gslp.1 [1.10.2.9.2.3],
+man/gsnd.1 [1.10.2.9.2.3], man/pdf2dsc.1 [1.10.2.9.2.3],
+man/pdf2ps.1 [1.12.2.9.2.3], man/pdfopt.1 [1.10.2.9.2.3],
+man/pf2afm.1 [1.10.2.9.2.3], man/pfbtopfa.1 [1.11.2.9.2.3],
+man/printafm.1 [1.10.2.9.2.3], man/ps2ascii.1 [1.10.2.9.2.3],
+man/ps2epsi.1 [1.10.2.10.2.3], man/ps2pdf.1 [1.14.2.11.2.3],
+man/ps2pdfwr.1 [1.13.2.10.2.3], man/ps2ps.1 [1.17.2.9.2.3],
+man/wftopfa.1 [1.10.2.9.2.3]: 2003/03/31 14:00:26 giles)
+
+</pre><h2><a name="7.06-Procedures"></a>Procedures</h2><pre>
+
+Fixes problems:
+ - .pushpdf14devicefilter was defined in zdfilter.c, but depended on
+the optional pdf module's transparency features. Moves the definition of
+this routine to the conditionally included ztrans.c. Fix by L. Peter
+Deutsch, resolves SourceForge Bug 565019. (int.mak [1.50.2.4]: 2002/06/14
+09:53:12 giles)
+ - As a result of a recent fix, an opdef table had more than 16
+entries, causing initialization to abort. backporting a fix by L. Peter
+Deutsch from HEAD. (int.mak [1.50.2.5]: 2002/06/14 15:26:00 giles)
+ - When building an archive of the graphics library or interpreter,
+add only the object files, not the .dev and interpreter files. Fixes
+SourceForge bug # 538311 - files missing from library archive.
+(gs.mak [1.5.2.4], ugcclib.mak [1.13.2.6], unixlink.mak [1.3.4.2]:
+2002/06/22 03:34:43 ghostgum)
+ - Provide an implementation of popen for Windows, to avoid the
+broken implementation in MSVC++ 5 and 6. This allows pswrite to output to a
+pipe on Windows. Fixes SourceForge bug #482038, pswrite does not write to
+pipe. (winlib.mak [1.12.2.3]: 2002/09/05 10:19:00 ghostgum)
+ - provide a meaningful error message when an immediately evaluated
+name can not be found. Fixes SourceForge bug #543185, Confusing diagnostics
+for //undefined. (int.mak [1.50.2.6]: 2002/09/14 11:59:15 ghostgum)
+
+Update the url for the zlib website and source. Fixes SF Bug #550585.
+(zlib.mak [1.3.2.2]: 2002/05/09 17:04:50 giles)
+
+Add a 32 bit/pixel CMYK driver named pam using the Portable Arbitrary Map
+file format, one of the netpbm family. This driver has problems with
+anti-aliasing that will be fixed in a later patch. (devs.mak [1.47.2.7]:
+2002/06/22 03:44:00 ghostgum)
+
+Remove spurious build of the gtk client along with the macos framework.
+Backport the 'framework_install' target from HEAD. (macos-fw.mak [1.1.2.3]:
+2002/08/07 13:05:17 giles)
+
+Add command line options -dEPS, -dEPSCrop and -dEPSFitPage for handling
+Encapsulated PostScript files. (bcwin32.mak [1.12.2.6],
+msvc32.mak [1.20.2.8]: 2002/09/14 12:17:26 ghostgum)
+
+Remove some interpreter references from the graphics library. Partial fix
+for SourceForge bug #542848, "library #includes interpreter headers".
+(lib.mak [1.53.2.5], msvclib.mak [1.16.2.4], msvctail.mak [1.6.2.2],
+pcwin.mak [1.2.6.2]: 2002/09/14 12:25:55 ghostgum)
+
+Prune the dead 'begin' makefile target. This was supposedly removed in
+release 5.20. (gs.mak [1.5.2.5]: 2002/10/09 22:07:08 giles)
+
+Remove remaining elements of support for K&amp;R (pre-ansi) C. We no longer
+support building ghostscript tt way, but the remaining dead code causes
+confusion for some users. Closes Sourceforge bug #618048.
+(dvx-gcc.mak [1.12.2.6], dvx-tail.mak [1.5.2.2], gs.mak [1.5.2.6],
+macos-mcp.mak [1.3.2.5], macosx.mak [1.3.2.7], openvms.mak [1.16.2.6],
+openvms.mmk [1.12.2.3], os2.mak [1.19.2.6], ugcclib.mak [1.13.2.7],
+unix-aux.mak [1.5.2.3], unix-gcc.mak [1.23.2.10], unixansi.mak [1.16.2.9],
+wccommon.mak [1.3.6.2], winlib.mak [1.12.2.4]: 2002/10/10 00:24:01 giles)
+
+Set USE_ASM to zero explicitly. (unix-gcc.mak [1.23.2.11],
+unixansi.mak [1.16.2.10]: 2002/10/10 12:47:49 giles)
+
+Update libpng version number to latest release. (all-arch.mak [1.9.2.4],
+bcwin32.mak [1.12.2.7], dvx-gcc.mak [1.12.2.7], macos-mcp.mak [1.3.2.6],
+macosx.mak [1.3.2.8], msvc32.mak [1.20.2.9], msvclib.mak [1.16.2.5],
+openvms.mak [1.16.2.7], os2.mak [1.19.2.7], ugcclib.mak [1.13.2.8],
+unix-gcc.mak [1.23.2.12], unixansi.mak [1.16.2.11], watc.mak [1.16.2.4],
+watclib.mak [1.13.2.5], watcw32.mak [1.13.2.5]: 2002/10/10 13:35:51 giles)
+
+Update version number and date for release. (version.mak [1.36.2.8]:
+2002/10/10 13:37:03 giles)
+
+Module gslib removed from the library archive. Further fix for [ 538311 ]
+files missing from library archive. (ugcclib.mak [1.13.2.9]: 2002/11/02
+04:31:13 ghostgum)
+
+Backport MacOS build updates for Metrowerks CW8 from HEAD.
+(macos-mcp.mak [1.3.2.7], macosx.mak [1.3.2.9]: 2002/12/01 23:29:37 giles)
+
+Update libpng version makefile variables to 10205. These were accidentally
+reverted in the last commit. (macos-mcp.mak [1.3.2.8],
+macosx.mak [1.3.2.10]: 2002/12/01 23:32:56 giles)
+
+Add working 'distclean' and 'maintainer-clean' targets to the autoconf
+makefile. Backport from HEAD. (gs.mak [1.5.2.7]: 2002/12/02 00:10:24 giles)
+
+Update release date for second candidate. (version.mak [1.36.2.9]:
+2002/12/02 01:55:46 giles)
+
+Apply standard GNU license banner at the request of RMS. Patch from Brett
+Smith. (all-arch.mak [1.9.2.4.2.1], bcwin32.mak [1.12.2.7.2.1],
+cfonts.mak [1.2.6.1.2.1], contrib.mak [1.24.2.1.2.1],
+devs.mak [1.47.2.7.2.1], dvx-gcc.mak [1.12.2.7.2.1],
+dvx-head.mak [1.2.6.1.2.1], dvx-tail.mak [1.5.2.2.2.1],
+dwmain.rc [1.2.6.2.2.1], dwsetup.rc [1.5.2.4.2.1],
+dwuninst.rc [1.3.6.2.2.1], gs.mak [1.5.2.7.2.1], gs16spl.rc [1.2.6.2.2.1],
+gsdll2.rc [1.2.6.1.2.1], gsdll32.rc [1.2.6.2.2.1]: 2003/01/17 00:49:00
+giles)
+
+Apply standard GNU license banner at the request of RMS. Patch from Brett
+Smith. (gsos2.rc [1.2.6.1.2.1], gspmdrv.rc [1.2.6.1.2.1],
+gswin.rc [1.2.6.2.2.1], icclib.mak [1.3.2.2.2.1], ijs.mak [1.2.2.2.2.1],
+int.mak [1.50.2.6.2.1], jpeg.mak [1.4.2.1.2.1], lib.mak [1.53.2.5.2.1],
+libpng.mak [1.10.2.3.2.1], macos-fw.mak [1.1.2.3.2.1],
+macos-mcp.mak [1.3.2.8.2.1], macosx.mak [1.3.2.10.2.1],
+msvc32.mak [1.20.2.9.2.1], msvccmd.mak [1.6.2.1.2.1],
+msvclib.mak [1.16.2.5.2.1], msvctail.mak [1.6.2.2.2.1],
+openvms.mak [1.16.2.7.2.1], openvms.mmk [1.12.2.3.2.1],
+os2.mak [1.19.2.7.2.1], pcwin.mak [1.2.6.2.2.1], ugcclib.mak [1.13.2.9.2.1],
+unix-aux.mak [1.5.2.3.2.1], unix-dll.mak [1.6.2.2.2.1],
+unix-end.mak [1.2.6.1.2.1], unix-gcc.mak [1.23.2.12.2.1],
+unixansi.mak [1.16.2.11.2.1], unixhead.mak [1.2.6.1.2.1],
+unixinst.mak [1.20.2.9.2.1], unixlink.mak [1.3.4.2.2.1],
+version.mak [1.36.2.9.2.1], watclib.mak [1.13.2.5.2.1],
+watcw32.mak [1.13.2.5.2.1], wccommon.mak [1.3.6.2.2.1],
+wctail.mak [1.3.2.2.2.1], winint.mak [1.8.2.5.2.1],
+winlib.mak [1.12.2.4.2.1], winplat.mak [1.2.6.1.2.1],
+wmin.mak [1.2.6.1.2.1]: 2003/01/17 00:49:03 giles)
+
+Apply standard GNU license banner at the request of RMS. Patch from Brett
+Smith. (zlib.mak [1.3.2.2.2.1]: 2003/01/17 00:49:06 giles)
+
+Makefile banner lines should be comments. (gs.mak [1.5.2.7.2.2]: 2003/01/28
+12:02:09 ghostgum)
+
+Update release date for final 7.06 release. (version.mak [1.36.2.9.2.2]:
+2003/02/09 16:20:05 giles)
+
+Add pngalpha device that uses RGBA, with the alpha channel providing pixel
+coverage. Used for generating PNG images with a transparent background.
+(bcwin32.mak [1.12.2.7.2.2], devs.mak [1.47.2.7.2.2],
+macosx.mak [1.3.2.10.2.2], msvc32.mak [1.20.2.9.2.2],
+openvms.mak [1.16.2.7.2.2], os2.mak [1.19.2.7.2.2],
+unix-gcc.mak [1.23.2.12.2.2], unixansi.mak [1.16.2.11.2.2],
+watcw32.mak [1.13.2.5.2.2]: 2003/03/11 11:59:10 ghostgum)
+
+Backport MacOS build updates for Metrowerks CW8 from HEAD.
+(gp_mac.c [1.1.4.3], gp_macio.c [1.2.4.4], macgenmcpxml.sh [1.1.4.4]:
+2002/12/01 23:29:37 giles)
+Update changelog and release date. (version.mak [1.36.2.9.2.3]: 2003/03/31
+13:56:42 giles)
+
+Correct the copyright date and avoid putting NT security attributes into the
+Windows distribution archive. (winint.mak [1.8.2.5.2.2]: 2003/04/01 09:30:59
+ghostgum)
+
+</pre><h2><a name="7.06-Utilities"></a>Utilities</h2><pre>
+
+Fixes problems:
+ - Reinstate ps2epsi.bat and ps2epsi.cmd. Correctly embed the
+original EPS file in the output of ps2epsi on Windows and OS/2.
+(lib/ps2epsi.bat [1.6.2.2], lib/ps2epsi.cmd [1.3.2.2]: 2002/04/26 00:24:45
+ghostgum)
+ - Temporary files weren't being put in the proper location under
+MacOS X/Carbon. Updates the the proper prameter block type for the Carbon
+interface so this works properly on both OS 9/X. Patch from Erik Strik.
+(gp_macio.c [1.2.4.3]: 2002/06/13 15:40:59 giles)
+ - Provide an implementation of popen for Windows, to avoid the
+broken implementation in MSVC++ 5 and 6. This allows pswrite to output to a
+pipe on Windows. Fixes SourceForge bug #482038, pswrite does not write to
+pipe. (gp_mswin.c [1.7.2.2]: 2002/09/05 10:19:00 ghostgum)
+
+Remove the DOS and OS/2 versions of the ps2epsi code. They have been broken
+for some time. (lib/ps2epsi.bat [1.6.2.1], lib/ps2epsi.cmd [1.3.2.1]:
+2002/04/22 20:38:01 giles)
+
+Changes to the gtk+ client to request a suitable window size based on the
+screen and image sizes, to reduce unnecessary redraws and erase the window
+area outside the image. (dxmain.c [1.7.2.2]: 2002/04/26 05:03:20 ghostgum)
+
+Update project file generation script to support Metrowerks CodeWarrior 7.
+(macgenmcpxml.sh [1.1.4.3]: 2002/09/04 09:02:38 giles)
+
+Backport MacOS build updates for Metrowerks CW8 from HEAD.
+(gp_mac.c [1.1.4.3], gp_macio.c [1.2.4.4], macgenmcpxml.sh [1.1.4.4]:
+2002/12/01 23:29:37 giles)
+
+Apply standard GNU license banner at the request of RMS. Patch from Brett
+Smith. (bench.c [1.4.4.1.2.1], dxmain.c [1.7.2.2.2.1],
+dxmainc.c [1.4.2.2.2.1], echogs.c [1.3.2.1.2.1], genarch.c [1.2.6.1.2.1],
+genconf.c [1.4.4.1.2.1], gendev.c [1.2.6.1.2.1], genht.c [1.2.6.1.2.1],
+geninit.c [1.3.6.1.2.1], gp_dvx.c [1.4.2.1.2.1], gp_iwatc.c [1.6.2.2.2.1],
+gp_mac.c [1.1.4.3.2.1], gp_macio.c [1.2.4.5.2.1], gp_mktmp.c [1.2.6.1.2.1],
+gp_msdll.c [1.1.2.1.2.1], gp_mshdl.c [1.2.6.1.2.1], gp_msio.c [1.3.4.1.2.1],
+gp_mslib.c [1.3.2.1.2.1], gp_mspol.c [1.1.2.1.2.1],
+gp_msprn.c [1.1.2.1.2.1], gp_mswin.c [1.7.2.3.2.1], gp_ntfs.c [1.5.2.4.2.1],
+gp_os2.c [1.10.2.3.2.1], gp_os9.c [1.4.2.1.2.1], gp_stdia.c [1.3.2.1.2.1],
+gp_stdin.c [1.2.2.1.2.1], gp_sysv.c [1.2.6.1.2.1], gp_unix.c [1.5.2.1.2.1],
+gp_vms.c [1.7.2.3.2.1], gp_wgetv.c [1.4.2.2.2.1], gp_win32.c [1.2.6.1.2.1],
+gp_wsync.c [1.2.6.1.2.1], gs16spl.c [1.2.6.1.2.1], gsdll.c [1.6.2.1.2.1],
+gserver.c [1.2.6.1.2.1]: 2003/01/17 00:49:00 giles)
+
+Apply standard GNU license banner at the request of RMS. Patch from Brett
+Smith. (gspmdrv.c [1.2.6.1.2.1], scfdgen.c [1.2.6.1.2.1],
+zdosio.c [1.2.6.1.2.1]: 2003/01/17 00:49:03 giles)
+
+Apply standard GNU license banner at the request of RMS. Patch from Brett
+Smith. (ziodevs.c [1.5.2.1.2.1], ziodevsc.c [1.3.2.1.2.1]: 2003/01/17
+00:49:06 giles)
+
+Correct an incorrectly applied patch to the macos implementation of
+gp_pathstring_not_bare(). (gp_macio.c [1.2.4.5.2.2]: 2003/04/01 12:21:50
+giles)
+
+</pre><h2><a name="7.06-Drivers"></a>Drivers</h2><pre>
+
+Fixes problems:
+ - Correct the display device color mapping functions that were
+wrong. Change 4-bit mapping functions to standard VGA. Correct 16-bit native
+RGB and 32-bit xRGB mapping functions. Add RGB to color mapping functions
+for CMYK formats, needed by anti-aliasing. (gdevdsp.c [1.5.2.5]: 2002/06/22
+03:10:10 ghostgum)
+ - When compiled for A4 default page size, the initial page size is
+now 595x842pts. The initial printer page size in tenths of an inch now uses
+floating point. This may cause problems with old compilers that do not allow
+floating point calculations in initializers for integers. Add some casts to
+suppress warnings with the MS compiler. Fixes SourceForge bug #535997,
+"ps2pdf produces incorrect A4 page size". (gdevbmpc.c [1.2.6.2]: 2002/07/18
+11:11:40 ghostgum)
+
+To improve clarity, use hexadecimal for -dDisplayFormat=16#XXXXXX in the
+display device example code. (gdevdsp.c [1.5.2.4]: 2002/06/19 11:36:36
+ghostgum)
+
+Add a 32 bit/pixel CMYK driver named pam using the Portable Arbitrary Map
+file format, one of the netpbm family. This driver has problems with
+anti-aliasing that will be fixed in a later patch. (gdevpbm.c [1.3.6.2]:
+2002/06/22 03:44:00 ghostgum)
+
+Remove some interpreter references from the graphics library. Partial fix
+for SourceForge bug #542848, "library #includes interpreter headers".
+(gdevmswn.c [1.4.2.2]: 2002/09/14 12:25:55 ghostgum)
+
+Backport MacOS build updates for Metrowerks CW8 from HEAD.
+(gdevmac.h [1.1.4.3]: 2002/12/01 23:29:37 giles)
+
+Apply standard GNU license banner at the request of RMS. Patch from Brett
+Smith. (gdev3852.c [1.3.2.1.2.1], gdev3b1.c [1.2.6.1.2.1],
+gdev4081.c [1.3.2.1.2.1], gdev8510.c [1.3.2.1.2.1],
+gdev8bcm.c [1.2.6.1.2.1], gdev8bcm.h [1.2.6.1.2.1],
+gdevadmp.c [1.3.2.1.2.1], gdevatx.c [1.6.8.1], gdevbit.c [1.2.6.1.2.1],
+gdevbj10.c [1.4.2.1.2.1], gdevbjc.h [1.2.6.1.2.1], gdevbjcl.c [1.2.6.1.2.1],
+gdevbjcl.h [1.2.6.1.2.1], gdevbmp.c [1.4.2.1.2.1], gdevbmp.h [1.2.6.1.2.1],
+gdevbmpa.c [1.3.6.1.2.1], gdevbmpc.c [1.2.6.2.2.1], gdevccr.c [1.2.6.1.2.1],
+gdevcdj.c [1.5.2.1.2.1], gdevcfax.c [1.3.6.1.2.1], gdevcgm.c [1.2.6.2.2.1],
+gdevcgml.c [1.2.6.1.2.1], gdevcgml.h [1.2.6.1.2.1],
+gdevcgmx.h [1.2.6.1.2.1], gdevcif.c [1.3.2.1.2.1], gdevclj.c [1.2.6.1.2.1],
+gdevcljc.c [1.4.2.1.2.1], gdevcp50.c [1.3.2.1.2.1],
+gdevcslw.c [1.2.6.1.2.1], gdevdcrd.c [1.2.6.1.2.1],
+gdevdcrd.h [1.2.6.1.2.1], gdevdfax.c [1.4.2.1.2.1], gdevdjet.c [1.6.8.1],
+gdevdjtc.c [1.3.2.1.2.1], gdevdljm.c [1.4.8.1], gdevdljm.h [1.4.8.1],
+gdevdm24.c [1.3.2.1.2.1], gdevdsp.c [1.5.2.5.2.1],
+gdevegaa.asm [1.2.6.1.2.1], gdevepsc.c [1.3.2.1.2.1],
+gdevepsn.c [1.3.2.1.2.1], gdevescp.c [1.3.2.1.2.1],
+gdevevga.c [1.2.6.1.2.1], gdevfax.c [1.2.6.1.2.1], gdevfax.h [1.2.6.1.2.1],
+gdevherc.c [1.2.6.1.2.1], gdevhl7x.c [1.5.2.1.2.1], gdevijs.c [1.1.2.3.2.1],
+gdevimgn.c [1.4.2.1.2.1], gdevjpeg.c [1.3.2.1.2.1],
+gdevl256.c [1.3.6.1.2.1], gdevl31s.c [1.2.6.1.2.1],
+gdevlbp8.c [1.3.2.1.2.1], gdevlj56.c [1.3.2.1.2.1],
+gdevlp8k.c [1.2.6.1.2.1], gdevlxm.c [1.2.6.1.2.1], gdevmac.c [1.1.4.3.2.1],
+gdevmac.h [1.1.4.3.2.1], gdevmacpictop.h [1.1.4.2.2.1],
+gdevmacttf.h [1.1.4.2.2.1], gdevmacxf.c [1.1.4.2.2.1],
+gdevmeds.c [1.2.6.1.2.1], gdevmeds.h [1.2.6.1.2.1], gdevmgr.c [1.2.6.1.2.1],
+gdevmgr.h [1.2.6.1.2.1], gdevmiff.c [1.3.2.1.2.1], gdevmswn.c [1.4.2.2.2.1],
+gdevmswn.h [1.2.6.1.2.1], gdevmsxf.c [1.2.6.1.2.1],
+gdevn533.c [1.3.2.1.2.1], gdevo182.c [1.3.2.1.2.1],
+gdevokii.c [1.3.2.1.2.1], gdevos2p.c [1.4.2.1.2.1], gdevp14.h [1.1.2.1.2.1],
+gdevp2up.c [1.2.6.1.2.1], gdevpbm.c [1.3.6.2.2.1], gdevpccm.c [1.2.6.1.2.1],
+gdevpccm.h [1.3.6.1.2.1], gdevpcfb.c [1.2.6.1.2.1],
+gdevpcfb.h [1.2.6.1.2.1], gdevpcl.c [1.5.2.1.2.1], gdevpcl.h [1.5.2.1.2.1],
+gdevpcx.c [1.2.6.1.2.1], gdevpe.c [1.2.6.1.2.1], gdevphex.c [1.2.6.2.2.1],
+gdevpjet.c [1.3.2.1.2.1], gdevpm.c [1.4.2.1.2.1], gdevpm.h [1.2.6.1.2.1],
+gdevpng.c [1.4.2.1.2.1], gdevpnga.c [1.4.2.1.2.1], gdevps.c [1.19.2.2.2.1],
+gdevpsdf.h [1.9.4.1.2.1], gdevpsdi.c [1.15.2.1.2.1],
+gdevpsdp.c [1.8.6.1.2.1], gdevpsds.c [1.4.6.1.2.1],
+gdevpsds.h [1.4.6.1.2.1], gdevpsdu.c [1.10.2.1.2.1],
+gdevpsim.c [1.6.2.1.2.1], gdevpsu.c [1.7.2.2.2.1], gdevpsu.h [1.4.2.1.2.1],
+gdevpx.c [1.6.2.1.2.1], gdevpxat.h [1.3.6.1.2.1], gdevpxen.h [1.3.6.1.2.1],
+gdevpxop.h [1.2.6.1.2.1], gdevpxut.c [1.2.6.1.2.1],
+gdevpxut.h [1.2.6.1.2.1], gdevs3ga.c [1.2.6.1.2.1], gdevsco.c [1.3.6.1.2.1],
+gdevsj48.c [1.2.6.1.2.1], gdevsnfb.c [1.3.2.1.2.1],
+gdevsppr.c [1.5.2.1.2.1], gdevstc.c [1.2.6.1.2.1], gdevstc.h [1.2.6.1.2.1],
+gdevstc1.c [1.2.6.1.2.1], gdevstc2.c [1.2.6.1.2.1],
+gdevstc3.c [1.2.6.1.2.1], gdevstc4.c [1.2.6.1.2.1], gdevsun.c [1.2.6.1.2.1],
+gdevsunr.c [1.4.2.1.2.1], gdevsvga.c [1.2.6.1.2.1],
+gdevsvga.h [1.2.6.1.2.1], gdevtfax.c [1.4.6.1.2.1],
+gdevtfax.h [1.4.6.1.2.1], gdevtfnx.c [1.5.2.1.2.1],
+gdevtifs.c [1.4.2.1.2.1], gdevtifs.h [1.3.6.1.2.1],
+gdevtknk.c [1.3.2.1.2.1], gdevupd.c [1.5.2.1.2.1], gdevvglb.c [1.3.6.1.2.1],
+gdevwddb.c [1.3.2.1.2.1], gdevwdib.c [1.3.2.1.2.1],
+gdevwpr2.c [1.9.2.1.2.1], gdevwprn.c [1.3.2.1.2.1], gdevx.c [1.8.2.3.2.1],
+gdevx.h [1.4.6.1.2.1], gdevxalt.c [1.2.6.2.2.1], gdevxcmp.c [1.2.6.2.2.1],
+gdevxcmp.h [1.2.6.1.2.1], gdevxini.c [1.10.4.1.2.1],
+gdevxres.c [1.3.6.1.2.1], gdevxxf.c [1.5.6.1.2.1]: 2003/01/17 00:49:00
+giles)
+
+Apply standard GNU license banner at the request of RMS. Patch from Brett
+Smith. (gdevpdf.c [1.38.2.3.2.1], gdevpdfb.c [1.6.2.1.2.1],
+gdevpdfc.c [1.17.2.1.2.1], gdevpdfd.c [1.16.2.1.2.1],
+gdevpdfg.c [1.14.2.1.2.1], gdevpdfg.h [1.9.6.1.2.1],
+gdevpdfi.c [1.24.2.1.2.1], gdevpdfj.c [1.7.2.1.2.1],
+gdevpdfm.c [1.14.2.1.2.1], gdevpdfo.c [1.9.2.1.2.1],
+gdevpdfo.h [1.6.4.1.2.1], gdevpdfp.c [1.19.2.1.2.1],
+gdevpdfr.c [1.4.6.1.2.1], gdevpdfu.c [1.16.2.1.2.1],
+gdevpdfv.c [1.10.2.1.2.1], gdevpdfx.h [1.34.2.1.2.1]: 2003/01/17 00:49:01
+giles)
+
+</pre><h2><a name="7.06-PDF_writer"></a>PDF writer</h2><pre>
+
+Fixes problems:
+ - (pdfwrite) Completely replacing the Rotation computation logics.
+Source Forge bug "[ 475147 ] GS 7.03 produces everthing upsidedown"
+(gdevpdf.c [1.38.2.2]: 2002/06/28 10:44:18 igor)
+
+</pre><h2><a name="7.06-PDF_Interpreter"></a>PDF Interpreter</h2><pre>
+
+Fixes problems:
+ - Add the option -dUseCropBox to set the page size from the CropBox
+rather than the MediaBox. This is appropriate when using ghostscript to view
+PDF files or convert to bitmaps. It probably isn't appropriate for printing.
+Fixes SourceForge bugs #522486, "Wromg size EPS generated from PDF" and
+#538267 "Problems with Media Box in PDF and PS interpreter".
+(lib/pdf_main.ps [1.35.2.3]: 2002/06/28 10:59:02 ghostgum)
+ - When drawing PDF annotation links which are missing a /Border,
+assume the default /Border [0 0 1]. Previously ghostscript assumed that
+links without a /Border should not be drawn, which is contrary to the PDF
+specification. (lib/pdf_draw.ps [1.36.2.2]: 2002/06/28 23:12:21 ghostgum)
+ - If a PDF annotation specified other than the default color with
+/C, pass this into the pdfmark logic as /Color. (lib/pdf_main.ps [1.35.2.4]:
+2002/06/28 23:13:06 ghostgum)
+ - When using -dUseCropBox, use an inherited CropBox. The previous
+fix would only use a CropBox on the page being displayed.
+(lib/pdf_main.ps [1.35.2.5]: 2002/07/18 10:45:42 ghostgum)
+ - When ghostscript is given a PDF file on standard input, copy it to
+a temporary file before processing. Prior to version 7, ghostscript could
+read PDF from standard input redirected from a file, but not from a pipe.
+Standard input was changed in version 7 to use callouts, which prevented PDF
+reading from standard input. Fixes SourceForge bug #583413, /ioerror with gs
+- &lt; file.pdf vers 7.xx (lib/pdf_main.ps [1.35.2.6]: 2002/09/14 12:05:58
+ghostgum)
+
+Move code from pdfshowpage to pdfshowpage_finish for the benefit of GSview
+which calls pdfshowpage_init and pdfshowpage_finish, but not
+pdfshowpage_setpage. (lib/pdf_main.ps [1.35.2.7]: 2002/11/05 20:58:19
+ghostgum)
+
+Makes the PDF interpreter run files under a level of 'save'. This improves
+memory utilization significantly, although we don't understand why. Patch
+originally applied as revision 1.45 by lpd. (lib/pdf_main.ps [1.35.2.7.2.1]:
+2003/01/28 11:08:36 ghostgum)
+
+Treat files starting with %Pxxx as PostScript, not PDF. Process empty files
+without error. Fixes SourceForge bug #663150, Some PS files half-recognized
+as PDF files DETAILS: Changes for the 8.00 release to allow reading of PDF
+files from stdin caused files starting with %Pxxx to be half recognised as
+PDF files. This patch simplifies the PDF recognition code and makes it treat
+only files starting with "%PDF-" as PDF. Testing of this code found that
+zero length input files caused a PostScript error. This was an existing
+error which is fixed by the gs_epsf.ps patch and last line of the
+pdf_main.ps patch. (lib/pdf_main.ps [1.35.2.7.2.2]: 2003/01/28 11:54:11
+ghostgum)
+
+</pre><h2><a name="7.06-Interpreter"></a>Interpreter</h2><pre>
+
+Fixes problems:
+ - .pushpdf14devicefilter was defined in zdfilter.c, but depended on
+the optional pdf module's transparency features. Moves the definition of
+this routine to the conditionally included ztrans.c. Fix by L. Peter
+Deutsch, resolves SourceForge Bug 565019. (zdfilter.c [1.2.2.2],
+ztrans.c [1.13.2.2]: 2002/06/14 09:53:12 giles)
+ - As a result of a recent fix, an opdef table had more than 16
+entries, causing initialization to abort. backporting a fix by L. Peter
+Deutsch from HEAD. (ztrans.c [1.13.2.3]: 2002/06/14 15:26:00 giles)
+ - Correct the display device color mapping functions that were
+wrong. Change 4-bit mapping functions to standard VGA. Correct 16-bit native
+RGB and 32-bit xRGB mapping functions. Add RGB to color mapping functions
+for CMYK formats, needed by anti-aliasing. (dpmain.c [1.5.2.2],
+dwimg.c [1.3.2.2]: 2002/06/22 03:10:10 ghostgum)
+ - correct the ISO paper sizes in gs_statd.ps to match those in the
+Adobe PPD specification, technical note 5003. Fixes SourceForge bug #536877,
+"Paper sizes wrong in gs_statd.ps". (lib/gs_statd.ps [1.5.2.2]: 2002/07/18
+10:43:42 ghostgum)
+ - process comment lines when they straddle a buffer boundary, so
+that all DSC comments can be processed by the PDF writer. Fixes SourceForge
+bug #432040, DSC ignored when reading stdin. (iscan.c [1.5.6.2]: 2002/09/05
+08:30:38 ghostgum)
+ - copy comment lines inside a procedure which require a scanner
+refill to the operand stack, not the execution stack. Fixes SourceForge bug
+#605240, 070-01.ps fails in .parse_dsc_comments. (iscan.c [1.5.6.3]:
+2002/09/06 20:54:10 ghostgum)
+ - provide a meaningful error message when an immediately evaluated
+name can not be found. Fixes SourceForge bug #543185, Confusing diagnostics
+for //undefined. (interp.c [1.8.2.2], ziodev.c [1.6.2.2]: 2002/09/14
+11:59:15 ghostgum)
+ - Keep pagedevice and device views of .LockSafetyParams correct even
+after a 'restore' is used to unlock. The dictionary fed to the setpagedevice
+operator is allocated in the same VM space as currentpagedevice to avoid
+invalidaccess problems. Fixed SF #580029 and does not revert to the
+incorrect behaviour of bug #516379. (lib/gs_init.ps [1.40.2.11]: 2002/09/19
+17:05:05 ray)
+ - Fix : Overlapping format 4 CMap ranges, while arguably buggy, are
+commonly found in quite a few popular CJK TrueType fonts. Patch from Anthony
+Fok Tung-Ling. (lib/gs_ttf.ps [1.9.2.3]: 2002/09/20 15:35:22 igor)
+ - The constraint for FontBBox to be non-zero was not conforming and
+now is removed. (bfont.h [1.3.6.2], zbfont.c [1.7.4.2], zfcid0.c [1.7.2.3],
+zfcid1.c [1.4.4.2]: 2002/09/21 08:36:49 igor)
+ - Fix : Unwinding the patch from Anthony Fok Tung-Ling, because it
+caused regression with comparefiles/fonts.pdf . (lib/gs_ttf.ps [1.9.2.4]:
+2002/09/22 12:43:55 igor)
+ - Provide a meaningful error message when an immediately evaluated
+name in a procedure can not be found. Additional fix for SourceForge bug
+#543185, Confusing diagnostics for //undefined. (iscan.c [1.5.6.4],
+ziodev.c [1.6.2.3]: 2002/11/01 23:50:42 ghostgum)
+ - Redefine .runstdin with one bound to EPSF 'run' operator so that
+EPS files are handled correctly from %stdin. Code for skipping DOS EPS
+header now uses the EPS encapsulating run, instead of directly calling
+.runexec. (lib/gs_epsf.ps [1.2.6.5]: 2002/11/01 23:53:32 ghostgum)
+ - When processing an EPS file, remove any left over items on the
+operand and dictionary stacks. (lib/gs_epsf.ps [1.2.6.7]: 2002/11/12
+20:32:59 ghostgum)
+ - Fix the remaining security patch problems so that local/global
+state is correctly handled, both for the pagedevice as well as the
+PermitFile... userparam dictionary entries. Fixes bug #647685. Patch from
+Ray Johnston. (lib/gs_epsf.ps [1.2.6.11.2.2],
+lib/gs_init.ps [1.40.2.12.2.1], lib/gs_lev2.ps [1.7.2.4.2.2],
+lib/gs_setpd.ps [1.8.2.2.2.1]: 2003/03/31 13:02:22 giles)
+
+Delete all temporary files when the interpreter closes. (imain.c [1.19.2.2]:
+2002/09/05 10:26:09 ghostgum)
+
+Add command line options -dEPS, -dEPSCrop and -dEPSFitPage for handling
+Encapsulated PostScript files. (lib/gs_epsf.ps [1.2.6.2],
+lib/gs_init.ps [1.40.2.10]: 2002/09/14 12:17:26 ghostgum)
+
+Remove a debug message from previous EPS commit. (lib/gs_epsf.ps [1.2.6.3]:
+2002/09/14 12:45:02 ghostgum)
+
+Update version number and date for release. (lib/gs_init.ps [1.40.2.12]:
+2002/10/10 13:36:56 giles)
+
+Improvements to processing of EPS files. (lib/gs_epsf.ps [1.2.6.4]:
+2002/10/31 11:12:13 ghostgum)
+
+Correct -dEPSFitPage when the device has non-zero margins.
+(lib/gs_epsf.ps [1.2.6.6]: 2002/11/07 07:16:34 ghostgum)
+
+Correct the display device color mapping intended for the Macintosh.
+(gdevdsp.h [1.1.2.3]: 2002/11/13 07:19:56 ghostgum)
+
+Make sure resource use of .forcedef works with -dDELAYBIND. Patch by Alex
+Cherepanov. (lib/gs_res.ps [1.16.2.2]: 2002/11/18 20:31:52 ghostgum)
+
+Prevent access to .forceput. (lib/gs_epsf.ps [1.2.6.8]: 2002/11/20 06:44:59
+ghostgum)
+
+When processing multiple EPS files, call showpage if necessary for
+subsequent files. (lib/gs_epsf.ps [1.2.6.9]: 2002/11/20 06:46:35 ghostgum)
+
+When processing EPS files, empty the path after checking the page size.
+(lib/gs_epsf.ps [1.2.6.10]: 2002/11/21 09:59:46 ghostgum)
+
+Backport debug and unitialized variable fixes from HEAD. After a patch from
+Alexei A. Podtelezhnikov. (icontext.c [1.6.6.3], interp.c [1.8.2.3],
+iscan.c [1.5.6.5], ziodev.c [1.6.2.4]: 2002/12/01 15:10:20 giles)
+
+Apply standard GNU license banner at the request of RMS. Patch from Brett
+Smith. (bfont.h [1.3.6.2.2.1], btoken.h [1.4.6.1.2.1],
+ccfont.h [1.2.6.1.2.1], dpmain.c [1.5.2.2.2.1], dscparse.c [1.7.2.1.2.1],
+dscparse.h [1.6.2.2.2.1], dstack.h [1.3.4.1.2.1], dwdll.c [1.2.2.1.2.1],
+dwdll.h [1.3.2.1.2.1], dwimg.c [1.3.2.2.2.1], dwimg.h [1.4.2.2.2.1],
+dwinst.cpp [1.2.6.2.2.1], dwinst.h [1.2.6.3.2.1], dwmain.c [1.6.2.2.2.1],
+dwmain.h [1.3.2.2.2.1], dwmainc.c [1.8.2.2.2.1], dwnodll.c [1.1.2.2.2.1],
+dwreg.c [1.1.2.2.2.1], dwreg.h [1.1.2.2.2.1], dwsetup.cpp [1.5.6.2.2.1],
+dwsetup.h [1.2.6.2.2.1], dwtext.c [1.5.2.1.2.1], dwtext.h [1.4.2.2.2.1],
+dwuninst.cpp [1.2.6.2.2.1], dwuninst.h [1.2.6.2.2.1],
+errors.h [1.4.2.1.2.1], estack.h [1.2.6.1.2.1], files.h [1.4.2.1.2.1],
+gdevdsp.h [1.1.2.3.2.1], gdevdsp2.h [1.2.2.2.2.1], ghost.h [1.2.6.1.2.1],
+gs.c [1.6.2.1.2.1]: 2003/01/17 00:49:00 giles)
+
+Apply standard GNU license banner at the request of RMS. Patch from Brett
+Smith. (ialloc.c [1.2.6.1.2.1], ialloc.h [1.2.6.1.2.1],
+iapi.c [1.1.2.2.2.1], iapi.h [1.2.2.1.2.1], iastate.h [1.2.6.1.2.1],
+iastruct.h [1.2.6.1.2.1], ibnum.c [1.2.6.1.2.1], ibnum.h [1.2.6.1.2.1],
+iccfont.c [1.2.6.2.2.1], iccinit0.c [1.2.6.1.2.1], icfontab.c [1.2.6.1.2.1],
+ichar.h [1.3.6.1.2.1], ichar1.h [1.3.6.1.2.1], icharout.h [1.3.4.1.2.1],
+icid.h [1.2.6.1.2.1], icie.h [1.3.2.1.2.1], icolor.h [1.2.6.1.2.1],
+iconf.c [1.3.2.1.2.1], iconf.h [1.1.6.1.2.1], icontext.c [1.6.6.3.2.1],
+icontext.h [1.2.6.1.2.1], icremap.h [1.2.6.1.2.1], icsmap.h [1.2.6.1.2.1],
+icstate.h [1.4.6.2.2.1], iddict.h [1.2.6.1.2.1], iddstack.h [1.2.6.1.2.1],
+idebug.c [1.4.2.1.2.1], idebug.h [1.2.6.1.2.1], idict.c [1.4.4.1.2.1],
+idict.h [1.2.6.1.2.1], idictdef.h [1.2.6.1.2.1], idisp.c [1.2.2.2.2.1],
+idisp.h [1.1.2.1.2.1], idosave.h [1.2.6.1.2.1], idparam.c [1.3.6.1.2.1],
+idparam.h [1.3.6.1.2.1], idsdata.h [1.2.6.1.2.1], idstack.c [1.2.6.1.2.1],
+idstack.h [1.2.6.1.2.1], iesdata.h [1.2.6.1.2.1], iestack.h [1.2.6.1.2.1],
+ifcid.h [1.2.6.1.2.1], ifilter.h [1.3.6.1.2.1], ifilter2.h [1.2.6.1.2.1],
+ifont.h [1.6.4.1.2.1], ifont1.h [1.3.6.1.2.1], ifont2.h [1.2.6.1.2.1],
+ifont42.h [1.3.6.1.2.1], ifrpred.h [1.2.6.1.2.1], ifunc.h [1.3.6.3.2.1],
+ifwpred.h [1.2.6.1.2.1], igc.c [1.5.2.1.2.1], igc.h [1.2.6.1.2.1],
+igcref.c [1.3.2.1.2.1], igcstr.c [1.3.6.1.2.1], igcstr.h [1.2.6.1.2.1],
+igstate.h [1.3.6.1.2.1], iht.h [1.2.6.1.2.1], iimage.h [1.2.6.1.2.1],
+iimage2.h [1.2.6.1.2.1], iinit.c [1.3.4.1.2.1], iinit.h [1.2.6.1.2.1],
+ilevel.h [1.2.6.1.2.1], ilocate.c [1.4.2.1.2.1], imain.c [1.19.2.2.2.1],
+imain.h [1.3.2.1.2.1], imainarg.c [1.13.2.3.2.1], imainarg.h [1.3.2.1.2.1],
+imemory.h [1.2.6.1.2.1], iminst.h [1.5.2.1.2.1], iname.c [1.3.6.1.2.1],
+iname.h [1.2.6.1.2.1], inamedef.h [1.2.6.1.2.1], inameidx.h [1.2.6.1.2.1],
+inames.h [1.2.6.1.2.1], inamestr.h [1.2.6.1.2.1], inobtokn.c [1.2.6.1.2.1],
+inouparm.c [1.2.6.1.2.1], interp.c [1.8.2.3.2.1], interp.h [1.2.6.1.2.1],
+iosdata.h [1.2.6.1.2.1], iostack.h [1.2.6.1.2.1], ipacked.h [1.2.6.1.2.1],
+iparam.c [1.5.6.1.2.1], iparam.h [1.2.6.1.2.1], iparray.h [1.2.6.1.2.1],
+ipcolor.h [1.2.6.1.2.1], ireclaim.c [1.3.2.1.2.1], iref.h [1.5.4.1.2.1],
+isave.c [1.3.6.1.2.1], isave.h [1.2.6.1.2.1], iscan.c [1.5.6.5.2.1],
+iscan.h [1.4.6.1.2.1], iscanbin.c [1.5.6.1.2.1], iscanbin.h [1.2.6.1.2.1],
+iscannum.c [1.3.2.1.2.1], iscannum.h [1.2.6.1.2.1], isdata.h [1.2.6.1.2.1],
+isstate.h [1.2.6.1.2.1], istack.c [1.2.6.1.2.1], istack.h [1.2.6.1.2.1],
+isstate.h [1.2.6.1.2.1], istack.c [1.2.6.1.2.1], istack.h [1.2.6.1.2.1],
+istkparm.h [1.2.6.1.2.1], istream.h [1.2.6.1.2.1], istruct.h [1.2.6.1.2.1],
+itoken.h [1.2.6.1.2.1], iutil.c [1.3.2.1.2.1], iutil.h [1.2.6.1.2.1],
+iutil2.c [1.2.6.2.2.1], iutil2.h [1.2.6.2.2.1], ivmem2.h [1.2.6.1.2.1],
+ivmspace.h [1.2.6.1.2.1], main.h [1.3.2.1.2.1], oparc.h [1.2.6.1.2.1],
+opcheck.h [1.2.6.1.2.1], opdef.h [1.3.2.1.2.1], oper.h [1.2.6.1.2.1],
+opextern.h [1.2.6.1.2.1], ostack.h [1.2.6.1.2.1], sbhc.c [1.3.4.1.2.1],
+sbhc.h [1.2.6.1.2.1], sbwbs.c [1.2.6.1.2.1], sbwbs.h [1.2.6.1.2.1],
+sfilter1.c [1.6.4.1.2.1], shcgen.c [1.2.6.1.2.1], shcgen.h [1.2.6.1.2.1],
+smtf.c [1.2.6.1.2.1], smtf.h [1.2.6.1.2.1], store.h [1.2.6.1.2.1],
+zarith.c [1.4.6.1.2.1], zarray.c [1.2.6.1.2.1], zbfont.c [1.7.4.2.2.1],
+zbseq.c [1.4.6.1.2.1], zcfont.c [1.2.6.2.2.1], zchar.c [1.4.2.2.2.1],
+zchar1.c [1.7.2.2.2.1], zchar2.c [1.2.6.1.2.1], zchar32.c [1.2.6.1.2.1],
+zchar42.c [1.3.4.2.2.1], zcharout.c [1.4.4.2.2.1], zcharx.c [1.3.6.1.2.1],
+zcid.c [1.3.6.1.2.1], zcie.c [1.5.2.1.2.1], zcolor.c [1.4.6.1.2.1],
+zcolor1.c [1.3.6.1.2.1], zcolor2.c [1.4.2.1.2.1], zcontext.c [1.7.2.1.2.1],
+zcontrol.c [1.3.6.2.2.1], zcrd.c [1.2.6.1.2.1], zcsdevn.c [1.5.2.2.2.1],
+zcsindex.c [1.3.6.1.2.1], zcspixel.c [1.2.6.1.2.1], zcssepr.c [1.8.2.1.2.1],
+zdevcal.c [1.3.6.1.2.1], zdevice.c [1.3.6.2.2.1], zdevice2.c [1.4.2.2.2.1],
+zdfilter.c [1.2.2.2.2.1], zdict.c [1.3.6.1.2.1], zdouble.c [1.2.6.1.2.1],
+zdpnext.c [1.3.6.1.2.1], zdps.c [1.4.6.1.2.1], zdps1.c [1.3.4.1.2.1],
+zdscpars.c [1.12.2.1.2.1], zfarc4.c [1.2.2.1.2.1], zfbcp.c [1.3.6.1.2.1],
+zfcid.c [1.11.4.1.2.1], zfcid0.c [1.7.2.3.2.1], zfcid1.c [1.4.4.2.2.1],
+zfcmap.c [1.9.2.1.2.1], zfdctd.c [1.6.2.1.2.1], zfdcte.c [1.5.2.1.2.1],
+zfdecode.c [1.3.6.1.2.1], zfile.c [1.11.2.4.2.1], zfileio.c [1.12.2.1.2.1],
+zfilter.c [1.5.2.1.2.1], zfilter2.c [1.3.6.1.2.1], zfilterx.c [1.2.6.1.2.1],
+zfmd5.c [1.2.6.1.2.1], zfont.c [1.3.4.1.2.1], zfont0.c [1.3.6.1.2.1],
+zfont1.c [1.9.4.1.2.1], zfont2.c [1.4.2.1.2.1], zfont32.c [1.2.6.1.2.1],
+zfont42.c [1.5.6.1.2.1], zfproc.c [1.9.2.1.2.1], zfrsd.c [1.4.6.1.2.1],
+zfunc.c [1.6.6.3.2.1], zfunc0.c [1.3.6.2.2.1], zfunc3.c [1.2.6.2.2.1],
+zfunc4.c [1.7.4.2.2.1], zfzlib.c [1.3.6.1.2.1], zgeneric.c [1.3.6.1.2.1],
+zgstate.c [1.2.6.1.2.1], zhsb.c [1.2.6.1.2.1], zht.c [1.2.6.1.2.1],
+zht1.c [1.2.6.1.2.1], zht2.c [1.2.6.1.2.1], zicc.c [1.2.2.2.2.1],
+zimage.c [1.5.6.1.2.1], zimage2.c [1.4.2.1.2.1], zimage3.c [1.3.6.1.2.1],
+ziodev.c [1.6.2.4.2.1], ziodev2.c [1.3.6.1.2.1], zmath.c [1.3.6.1.2.1],
+zmatrix.c [1.4.6.1.2.1], zmedia2.c [1.3.2.1.2.1], zmisc.c [1.2.6.1.2.1],
+zmisc1.c [1.3.6.1.2.1], zmisc2.c [1.3.6.1.2.1], zmisc3.c [1.2.6.1.2.1],
+zpacked.c [1.2.6.1.2.1], zpaint.c [1.2.6.1.2.1], zpath.c [1.2.6.1.2.1],
+zpath1.c [1.2.6.1.2.1], zpcolor.c [1.3.6.1.2.1], zrelbit.c [1.2.6.1.2.1],
+zrop.c [1.2.6.1.2.1], zshade.c [1.4.6.2.2.1], zstack.c [1.2.6.1.2.1],
+zstring.c [1.2.6.1.2.1], zsysvm.c [1.2.6.1.2.1], ztoken.c [1.6.6.1.2.1],
+ztrans.c [1.13.2.3.2.1], ztrap.c [1.2.6.1.2.1], ztype.c [1.3.6.1.2.1],
+zupath.c [1.2.6.1.2.1], zusparam.c [1.3.6.2.2.1], zvmem.c [1.3.2.2.2.1],
+zvmem2.c [1.3.2.1.2.1]: 2003/01/17 00:49:04 giles)
+
+Update DSC parser to current Ghostgum Software version. Fixes SourceForge
+bug #657289, SEGV on Alpha in DSC parser. DETAILS: A %%Page line with
+mismatched parentheses around the page label was ignored, but parser state
+was updated to scanning pages, not setup section. This resulted in access to
+dsc-&gt;page[-1] which is invalid and caused a SEGV on Alpha. The updated
+code now checks that dsc-&gt;page_count is non-zero before accessing dsc-
+&gt;page[dsc-&gt;page_count-1]. It also makes a second attempt at finding
+the page ordinal at the end of a line like: %%Page: (label with closing
+parentheses 1 Other parser updates include support for DCS2 files (which is
+not quite compliant with DSC), removing a few compiler warnings,
+%%HiResBoundingBox, %%CropBox, %%PageCropBox, and being more resilient to
+incorrect DSC. (dscparse.c [1.7.2.1.2.2], dscparse.h [1.6.2.2.2.2]:
+2003/01/28 11:44:44 ghostgum)
+
+Treat files starting with %Pxxx as PostScript, not PDF. Process empty files
+without error. Fixes SourceForge bug #663150, Some PS files half-recognized
+as PDF files DETAILS: Changes for the 8.00 release to allow reading of PDF
+files from stdin caused files starting with %Pxxx to be half recognised as
+PDF files. This patch simplifies the PDF recognition code and makes it treat
+only files starting with "%PDF-" as PDF. Testing of this code found that
+zero length input files caused a PostScript error. This was an existing
+error which is fixed by the gs_epsf.ps patch and last line of the
+pdf_main.ps patch. (lib/gs_epsf.ps [1.2.6.11.2.1]: 2003/01/28 11:54:11
+ghostgum)
+
+</pre><h2><a name="7.06-Streams"></a>Streams</h2><pre>
+
+Remove some interpreter references from the graphics library. Partial fix
+for SourceForge bug #542848, "library #includes interpreter headers".
+(sarc4.c [1.5.2.2]: 2002/09/14 12:25:55 ghostgum)
+
+Backport MacOS build updates for Metrowerks CW8 from HEAD.
+(stat_.h [1.6.2.2], stdpre.h [1.4.2.2]: 2002/12/01 23:29:37 giles)
+
+</pre><h2><a name="7.06-Library"></a>Library</h2><pre>
+
+Fixes problems:
+ - When drawing with anti-aliasing on devices with less than
+8-bit/pixel, extract the correct existing pixel value.
+(gdevdbit.c [1.2.6.2]: 2002/06/22 03:09:05 ghostgum)
+ - (pdfwrite) Enforce writing FontBBox into CFF. Source Forge bug "[
+578899 ] Missing /FontBBox when converting to ps?" (gdevpsf.h [1.10.2.2],
+gdevpsf2.c [1.15.2.2]: 2002/07/16 13:33:49 igor)
+ - When compiled for A4 default page size, the initial page size is
+now 595x842pts. The initial printer page size in tenths of an inch now uses
+floating point. This may cause problems with old compilers that do not allow
+floating point calculations in initializers for integers. Add some casts to
+suppress warnings with the MS compiler. Fixes SourceForge bug #535997,
+"ps2pdf produces incorrect A4 page size". (gdevprn.h [1.6.6.2],
+gxdevice.h [1.4.6.3]: 2002/07/18 11:11:40 ghostgum)
+ - Provide an implementation of popen for Windows, to avoid the
+broken implementation in MSVC++ 5 and 6. This allows pswrite to output to a
+pipe on Windows. Fixes SourceForge bug #482038, pswrite does not write to
+pipe. (pipe_.h [1.2.6.2]: 2002/09/05 10:19:00 ghostgum)
+ - Propagate error codes from gs_distance_transform_inverse. Patch
+from Forrest Cahoon, improved. (gxstroke.c [1.2.6.2]: 2002/10/31 09:02:54
+igor)
+
+Remove some interpreter references from the graphics library. Partial fix
+for SourceForge bug #542848, "library #includes interpreter headers".
+(gsargs.c [1.4.2.2]: 2002/09/14 12:25:55 ghostgum)
+
+Apply standard GNU license banner at the request of RMS. Patch from Brett
+Smith. (ctype_.h [1.2.6.1.2.1], dirent_.h [1.2.6.1.2.1],
+dos_.h [1.2.6.1.2.1], errno_.h [1.2.6.1.2.1], fcntl_.h [1.3.6.1.2.1],
+gconf.c [1.2.6.1.2.1], gconf.h [1.2.6.1.2.1], gdebug.h [1.3.2.1.2.1],
+gdevabuf.c [1.3.6.1.2.1], gdevbbox.c [1.4.2.1.2.1],
+gdevbbox.h [1.2.6.1.2.1], gdevcmap.c [1.2.6.1.2.1],
+gdevcmap.h [1.2.6.1.2.1], gdevdbit.c [1.2.6.2.2.1],
+gdevddrw.c [1.2.6.1.2.1], gdevdflt.c [1.3.6.1.2.1],
+gdevdgbr.c [1.2.6.1.2.1], gdevdrop.c [1.3.6.1.2.1],
+gdevemap.c [1.2.6.1.2.1], gdevhit.c [1.2.6.1.2.1], gdevm1.c [1.2.6.1.2.1],
+gdevm16.c [1.2.6.1.2.1], gdevm2.c [1.2.6.1.2.1], gdevm24.c [1.2.6.1.2.1],
+gdevm32.c [1.2.6.1.2.1], gdevm4.c [1.2.6.1.2.1], gdevm8.c [1.2.6.1.2.1],
+gdevmem.c [1.2.6.1.2.1], gdevmem.h [1.3.6.1.2.1], gdevmpla.c [1.2.6.1.2.1],
+gdevmpla.h [1.2.6.1.2.1], gdevmr1.c [1.2.6.1.2.1], gdevmr2n.c [1.2.6.1.2.1],
+gdevmr8n.c [1.2.6.1.2.1], gdevmrop.h [1.3.6.1.2.1],
+gdevmrun.c [1.2.6.1.2.1], gdevmrun.h [1.2.6.1.2.1],
+gdevnfwd.c [1.3.6.1.2.1], gdevp14.c [1.4.2.3.2.1], gdevpipe.c [1.4.4.1.2.1],
+gdevplnx.c [1.2.6.1.2.1], gdevplnx.h [1.2.6.1.2.1],
+gdevppla.c [1.2.6.1.2.1], gdevppla.h [1.2.6.1.2.1], gdevprn.c [1.5.6.2.2.1],
+gdevprn.h [1.6.6.2.2.1], gdevprna.c [1.2.6.1.2.1], gdevprna.h [1.2.6.1.2.1],
+gdevpsf.h [1.10.2.2.2.1], gdevpsf1.c [1.9.2.1.2.1],
+gdevpsf2.c [1.15.2.2.2.1], gdevpsfm.c [1.5.2.2.2.1],
+gdevpsft.c [1.8.2.1.2.1], gdevpsfu.c [1.7.2.1.2.1],
+gdevpsfx.c [1.9.2.1.2.1], gdevrops.c [1.3.6.1.2.1],
+gdevtrac.c [1.2.6.1.2.1], gdevvec.c [1.12.2.2.2.1], gdevvec.h [1.7.2.1.2.1],
+gp.h [1.8.2.3.2.1], gp_dosfe.c [1.2.6.2.2.1], gp_dosfs.c [1.2.6.3.2.1],
+gp_getnv.c [1.2.6.1.2.1], gp_msdos.c [1.2.6.1.2.1],
+gp_nsync.c [1.2.6.1.2.1], gp_psync.c [1.2.6.1.2.1],
+gp_strdl.c [1.2.6.1.2.1], gp_unifn.c [1.2.6.3.2.1],
+gp_unifs.c [1.6.2.2.2.1], gpcheck.h [1.2.6.1.2.1], gpgetenv.h [1.2.6.1.2.1],
+gpmisc.c [1.9.4.1.2.1], gpmisc.h [1.2.6.1.2.1], gpsync.h [1.2.6.1.2.1],
+gsalloc.c [1.11.2.2.2.1], gsalloc.h [1.2.6.1.2.1], gsalpha.c [1.2.6.1.2.1],
+gsalpha.h [1.2.6.1.2.1], gsalphac.c [1.2.6.1.2.1], gsalphac.h [1.2.6.1.2.1],
+gsargs.c [1.4.2.2.2.1], gsargs.h [1.4.2.1.2.1], gsbitcom.c [1.1.4.1.2.1],
+gsbitmap.h [1.2.6.1.2.1], gsbitops.c [1.3.4.1.2.1],
+gsbitops.h [1.2.6.1.2.1], gsbittab.c [1.2.6.1.2.1],
+gsbittab.h [1.2.6.1.2.1], gsccode.h [1.4.6.1.2.1], gsccolor.h [1.2.6.1.2.1],
+gscdef.c [1.15.2.4.2.1], gscdefs.h [1.2.6.1.2.1], gscdevn.c [1.6.2.1.2.1],
+gscdevn.h [1.3.6.1.2.1], gschar.c [1.3.6.1.2.1], gschar.h [1.3.6.1.2.1],
+gschar0.c [1.3.4.3.2.1], gscie.c [1.4.2.1.2.1], gscie.h [1.3.2.1.2.1],
+gsciemap.c [1.6.2.1.2.1], gscindex.h [1.2.6.1.2.1],
+gsclipsr.c [1.2.6.1.2.1], gsclipsr.h [1.2.6.1.2.1], gscolor.c [1.5.2.1.2.1],
+gscolor.h [1.3.6.1.2.1], gscolor1.c [1.4.2.1.2.1], gscolor1.h [1.2.6.1.2.1],
+gscolor2.c [1.6.6.1.2.1], gscolor2.h [1.3.6.1.2.1],
+gscolor3.c [1.4.6.1.2.1], gscolor3.h [1.2.6.1.2.1], gscompt.h [1.2.6.1.2.1],
+gscoord.c [1.5.6.1.2.1], gscoord.h [1.2.6.1.2.1], gscparam.c [1.7.2.1.2.1],
+gscpixel.c [1.3.6.1.2.1], gscpixel.h [1.2.6.1.2.1], gscpm.h [1.2.6.1.2.1],
+gscrd.c [1.2.6.1.2.1], gscrd.h [1.2.6.1.2.1], gscrdp.c [1.2.6.1.2.1],
+gscrdp.h [1.2.6.1.2.1], gscrypt1.c [1.2.6.1.2.1], gscrypt1.h [1.2.6.1.2.1],
+gscscie.c [1.4.2.1.2.1], gscsel.h [1.2.6.1.2.1], gscsepr.c [1.12.2.2.2.1],
+gscsepr.h [1.4.6.1.2.1], gscspace.c [1.4.6.1.2.1], gscspace.h [1.8.2.1.2.1],
+gscssub.c [1.3.2.1.2.1], gscssub.h [1.2.6.1.2.1], gsdcolor.h [1.3.6.1.2.1],
+gsdevice.c [1.11.2.1.2.1], gsdevice.h [1.3.6.1.2.1],
+gsdevmem.c [1.2.6.1.2.1], gsdfilt.c [1.3.2.1.2.1], gsdfilt.h [1.2.2.2.2.1],
+gsdparam.c [1.4.6.2.2.1], gsdpnext.h [1.2.6.1.2.1], gsdps.c [1.2.6.1.2.1],
+gsdps.h [1.2.6.1.2.1], gsdps1.c [1.2.6.1.2.1], gsdsrc.c [1.2.6.1.2.1],
+gsdsrc.h [1.3.6.1.2.1], gserror.h [1.2.6.1.2.1], gserrors.h [1.2.6.2.2.1],
+gsexit.h [1.4.2.1.2.1], gsfcid.c [1.5.4.1.2.1], gsfcmap.c [1.14.2.2.2.1],
+gsfcmap.h [1.4.6.1.2.1], gsfemu.c [1.2.6.1.2.1], gsflip.c [1.2.6.1.2.1],
+gsflip.h [1.2.6.1.2.1], gsfname.c [1.2.6.1.2.1], gsfname.h [1.2.6.1.2.1],
+gsfont.c [1.4.4.1.2.1], gsfont.h [1.2.6.1.2.1], gsfont0.c [1.2.6.1.2.1],
+gsfunc.c [1.4.6.1.2.1], gsfunc.h [1.4.6.1.2.1], gsfunc0.c [1.5.4.1.2.1],
+gsfunc0.h [1.2.6.1.2.1], gsfunc3.c [1.4.6.1.2.1], gsfunc3.h [1.2.6.1.2.1],
+gsfunc4.c [1.7.2.1.2.1], gsfunc4.h [1.2.6.1.2.1], gsgc.h [1.3.2.1.2.1],
+gshsb.c [1.2.6.1.2.1], gshsb.h [1.2.6.1.2.1], gsht.c [1.2.6.1.2.1],
+gsht.h [1.2.6.1.2.1], gsht1.c [1.3.2.1.2.1], gsht1.h [1.2.6.1.2.1],
+gshtscr.c [1.6.2.1.2.1], gshtx.c [1.2.6.1.2.1], gshtx.h [1.2.6.1.2.1],
+gsicc.c [1.5.2.1.2.1], gsicc.h [1.3.2.1.2.1], gsimage.c [1.4.2.1.2.1],
+gsimage.h [1.2.6.1.2.1], gsimpath.c [1.2.6.1.2.1], gsinit.c [1.3.2.1.2.1],
+gsio.h [1.5.2.1.2.1], gsiodev.c [1.5.2.1.2.1], gsiodevs.c [1.2.6.1.2.1],
+gsipar3x.h [1.3.6.1.2.1], gsiparam.h [1.4.6.1.2.1],
+gsiparm2.h [1.2.6.1.2.1], gsiparm3.h [1.4.6.1.2.1],
+gsiparm4.h [1.2.6.1.2.1], gsistate.c [1.4.6.1.2.1], gsjconf.h [1.2.6.1.2.1],
+gslib.c [1.5.2.1.2.1], gslib.h [1.2.6.1.2.1], gsline.c [1.2.6.1.2.1]:
+2003/01/17 00:49:00 giles)
+
+Apply standard GNU license banner at the request of RMS. Patch from Brett
+Smith. (gsline.h [1.2.6.1.2.1], gslparam.h [1.2.6.1.2.1],
+gsmalloc.c [1.3.6.1.2.1], gsmalloc.h [1.2.6.1.2.1],
+gsmatrix.c [1.2.6.1.2.1], gsmatrix.h [1.2.6.1.2.1],
+gsmdebug.h [1.3.2.1.2.1], gsmemlok.c [1.3.6.1.2.1],
+gsmemlok.h [1.2.6.1.2.1], gsmemory.c [1.4.2.1.2.1],
+gsmemory.h [1.3.2.1.2.1], gsmemraw.h [1.2.6.1.2.1],
+gsmemret.c [1.2.6.1.2.1], gsmemret.h [1.2.6.1.2.1], gsmisc.c [1.12.2.1.2.1],
+gsnogc.c [1.7.2.1.2.1], gsnogc.h [1.2.6.1.2.1], gsnorop.c [1.2.6.1.2.1],
+gsnotify.c [1.2.6.1.2.1], gsnotify.h [1.2.6.1.2.1], gspaint.c [1.2.6.1.2.1],
+gspaint.h [1.2.6.1.2.1], gsparam.c [1.4.6.1.2.1], gsparam.h [1.8.4.1.2.1],
+gsparam2.c [1.2.6.1.2.1], gsparams.c [1.2.6.1.2.1],
+gsparams.h [1.2.6.1.2.1], gsparamx.c [1.4.2.1.2.1],
+gsparamx.h [1.3.6.1.2.1], gspath.c [1.2.6.1.2.1], gspath.h [1.2.6.1.2.1],
+gspath1.c [1.3.4.1.2.1], gspath2.h [1.2.6.1.2.1], gspcolor.c [1.4.6.1.2.1],
+gspcolor.h [1.2.6.1.2.1], gspenum.h [1.2.6.1.2.1], gsptype1.c [1.3.2.1.2.1],
+gsptype1.h [1.2.6.1.2.1], gsptype2.c [1.5.2.1.2.1],
+gsptype2.h [1.4.2.1.2.1], gsrect.h [1.2.6.1.2.1], gsrefct.h [1.2.6.1.2.1],
+gsrop.c [1.2.6.1.2.1], gsrop.h [1.2.6.1.2.1], gsropc.c [1.2.6.1.2.1],
+gsropc.h [1.2.6.1.2.1], gsropt.h [1.4.2.1.2.1], gsroptab.c [1.2.6.1.2.1],
+gsshade.c [1.4.2.1.2.1], gsshade.h [1.3.6.1.2.1], gsstate.c [1.11.2.1.2.1],
+gsstate.h [1.2.6.1.2.1], gsstruct.h [1.8.2.1.2.1], gsstype.h [1.2.6.1.2.1],
+gstext.c [1.6.2.2.2.1], gstext.h [1.3.6.1.2.1], gstparam.h [1.7.6.1.2.1],
+gstrans.c [1.13.2.1.2.1], gstrans.h [1.6.6.1.2.1], gstrap.c [1.3.6.1.2.1],
+gstrap.h [1.3.6.1.2.1], gstype1.c [1.6.4.1.2.1], gstype1.h [1.2.6.1.2.1],
+gstype2.c [1.10.2.3.2.1], gstype42.c [1.12.2.2.2.1],
+gstypes.h [1.3.2.1.2.1], gsuid.h [1.2.6.1.2.1], gsutil.c [1.4.6.2.2.1],
+gsutil.h [1.3.6.2.2.1], gsxfont.h [1.2.6.1.2.1], gx.h [1.2.6.1.2.1],
+gxacpath.c [1.3.6.1.2.1], gxalloc.h [1.6.2.1.2.1], gxalpha.h [1.2.6.1.2.1],
+gxarith.h [1.2.6.1.2.1], gxband.h [1.2.6.1.2.1], gxbcache.c [1.2.6.1.2.1],
+gxbcache.h [1.2.6.1.2.1], gxbitfmt.h [1.2.6.1.2.1],
+gxbitmap.h [1.2.6.1.2.1], gxbitops.h [1.2.6.1.2.1], gxblend.c [1.2.2.1.2.1],
+gxblend.h [1.1.2.1.2.1], gxccache.c [1.5.2.1.2.1], gxccman.c [1.2.6.1.2.1],
+gxcdevn.h [1.2.6.1.2.1], gxchar.c [1.5.2.5.2.1], gxchar.h [1.2.6.2.2.1],
+gxchrout.c [1.2.6.1.2.1], gxchrout.h [1.2.6.1.2.1], gxcht.c [1.3.2.1.2.1],
+gxcid.h [1.3.6.1.2.1], gxcie.h [1.3.2.1.2.1], gxcindex.h [1.2.6.1.2.1],
+gxclbits.c [1.4.4.1.2.1], gxcldev.h [1.4.4.1.2.1], gxclfile.c [1.3.2.1.2.1],
+gxclimag.c [1.3.2.1.2.1], gxclio.h [1.2.6.1.2.1], gxclip.c [1.4.2.1.2.1],
+gxclip.h [1.2.6.1.2.1], gxclip2.c [1.3.6.1.2.1], gxclip2.h [1.2.6.1.2.1],
+gxclipm.c [1.3.6.1.2.1], gxclipm.h [1.2.6.1.2.1], gxclipsr.h [1.2.6.1.2.1],
+gxclist.c [1.3.6.1.2.1], gxclist.h [1.2.6.1.2.1], gxcllzw.c [1.2.6.1.2.1],
+gxclmem.c [1.2.6.1.2.1], gxclmem.h [1.2.6.1.2.1], gxclpage.c [1.2.6.1.2.1],
+gxclpage.h [1.2.6.1.2.1], gxclpath.c [1.9.2.1.2.1],
+gxclpath.h [1.6.6.1.2.1], gxclrast.c [1.9.2.1.2.1],
+gxclread.c [1.3.4.1.2.1], gxclrect.c [1.2.6.1.2.1],
+gxclutil.c [1.5.2.1.2.1], gxclzlib.c [1.2.6.1.2.1], gxcmap.c [1.3.6.1.2.1],
+gxcmap.h [1.2.6.1.2.1], gxcolor2.h [1.4.6.1.2.1], gxcomp.h [1.2.6.1.2.1],
+gxcoord.h [1.2.6.1.2.1], gxcpath.c [1.3.6.1.2.1], gxcpath.h [1.2.6.1.2.1],
+gxcspace.h [1.4.6.1.2.1], gxctable.c [1.3.6.1.2.1],
+gxctable.h [1.2.6.1.2.1], gxcvalue.h [1.2.6.1.2.1],
+gxdcconv.c [1.3.6.1.2.1], gxdcconv.h [1.2.6.1.2.1],
+gxdcolor.c [1.3.6.1.2.1], gxdcolor.h [1.3.6.1.2.1], gxdda.h [1.2.6.1.2.1],
+gxdevbuf.h [1.2.6.1.2.1], gxdevcli.h [1.5.2.2.2.1],
+gxdevice.h [1.4.6.3.2.1], gxdevmem.h [1.2.6.1.2.1],
+gxdevrop.h [1.2.6.1.2.1], gxdht.h [1.4.6.1.2.1], gxdhtres.h [1.2.6.1.2.1],
+gxdither.h [1.2.6.1.2.1], gxfarith.h [1.3.6.1.2.1],
+gxfcache.h [1.2.6.1.2.1], gxfcid.h [1.6.6.1.2.1], gxfcmap.h [1.8.2.1.2.1],
+gxfill.c [1.8.2.1.2.1], gxfixed.h [1.3.4.1.2.1], gxfmap.h [1.3.6.1.2.1],
+gxfont.h [1.3.4.1.2.1], gxfont0.h [1.3.6.1.2.1], gxfont1.h [1.5.4.1.2.1],
+gxfont42.h [1.4.6.1.2.1], gxfrac.h [1.3.4.1.2.1], gxftype.h [1.2.6.1.2.1],
+gxfunc.h [1.3.6.1.2.1], gxgetbit.h [1.2.6.1.2.1], gxhint1.c [1.2.6.1.2.1],
+gxhint2.c [1.2.6.1.2.1], gxhint3.c [1.3.2.1.2.1], gxht.c [1.2.6.2.2.1],
+gxht.h [1.2.6.1.2.1], gxhtbit.c [1.3.6.1.2.1], gxhttile.h [1.2.6.1.2.1],
+gxhttype.h [1.2.6.1.2.1], gxi12bit.c [1.2.6.1.2.1],
+gxiclass.h [1.2.6.1.2.1], gxicolor.c [1.3.2.1.2.1], gxidata.c [1.4.6.1.2.1],
+gxifast.c [1.4.2.1.2.1], gximag3x.c [1.7.6.1.2.1], gximag3x.h [1.3.6.1.2.1],
+gximage.c [1.2.6.1.2.1], gximage.h [1.2.6.1.2.1], gximage1.c [1.5.6.1.2.1],
+gximage2.c [1.2.6.1.2.1], gximage3.c [1.6.6.1.2.1],
+gximage3.h [1.4.6.1.2.1], gximage4.c [1.3.6.1.2.1], gximono.c [1.2.6.1.2.1],
+gxino12b.c [1.2.6.1.2.1], gxiodev.h [1.2.6.1.2.1], gxiparam.h [1.2.6.1.2.1],
+gxipixel.c [1.2.6.1.2.1], gxiscale.c [1.2.6.2.2.1],
+gxistate.h [1.6.6.1.2.1], gxline.h [1.2.6.1.2.1], gxlum.h [1.2.6.1.2.1],
+gxmatrix.h [1.4.6.1.2.1], gxmclip.c [1.2.6.1.2.1], gxmclip.h [1.2.6.1.2.1],
+gxobj.h [1.2.6.1.2.1], gxop1.h [1.2.6.1.2.1], gxp1fill.c [1.2.6.1.2.1],
+gxp1impl.h [1.2.6.1.2.1], gxpageq.c [1.2.6.1.2.1], gxpageq.h [1.2.6.1.2.1],
+gxpaint.c [1.2.6.1.2.1], gxpaint.h [1.2.6.1.2.1], gxpath.c [1.2.6.1.2.1],
+gxpath.h [1.2.6.1.2.1], gxpath2.c [1.2.6.1.2.1], gxpcache.h [1.2.6.1.2.1],
+gxpcmap.c [1.3.6.1.2.1], gxpcolor.h [1.2.6.1.2.1], gxpcopy.c [1.3.6.1.2.1],
+gxpdash.c [1.2.6.1.2.1], gxpflat.c [1.2.6.1.2.1], gxropc.h [1.2.6.1.2.1],
+gxrplane.h [1.2.6.1.2.1], gxsample.c [1.2.6.1.2.1],
+gxsample.h [1.2.6.1.2.1], gxshade.c [1.6.2.1.2.1], gxshade.h [1.4.2.1.2.1],
+gxshade1.c [1.9.2.1.2.1], gxshade4.c [1.6.2.1.2.1],
+gxshade4.h [1.2.6.1.2.1], gxshade6.c [1.3.6.1.2.1], gxstate.h [1.2.6.1.2.1],
+gxstdio.h [1.2.6.1.2.1], gxstroke.c [1.2.6.2.2.1], gxsync.c [1.2.6.1.2.1],
+gxsync.h [1.2.6.1.2.1], gxtext.h [1.7.2.1.2.1], gxtmap.h [1.2.6.1.2.1],
+gxttf.h [1.2.6.1.2.1], gxtype1.c [1.8.4.1.2.1], gxtype1.h [1.5.4.1.2.1],
+gxxfont.h [1.2.6.1.2.1], gzacpath.h [1.2.6.1.2.1], gzcpath.h [1.2.6.1.2.1],
+gzht.h [1.4.4.1.2.1], gzline.h [1.2.6.1.2.1], gzpath.h [1.3.6.1.2.1],
+gzstate.h [1.5.2.1.2.1], jerror_.h [1.2.6.2.2.1], malloc_.h [1.2.6.1.2.1],
+math_.h [1.2.6.1.2.1], md5.c [1.2.8.1], md5.h [1.1.8.1],
+memory_.h [1.2.6.1.2.1], pipe_.h [1.2.6.2.2.1], time_.h [1.3.2.2.2.1],
+unistd_.h [1.4.2.1.2.1], vmsmath.h [1.2.6.1.2.1], windows_.h [1.2.6.1.2.1]:
+2003/01/17 00:49:03 giles)
+
+Update release date for final 7.06 release. (gscdef.c [1.15.2.4.2.2]:
+2003/02/09 16:20:05 giles)
+
+Add pngalpha device that uses RGBA, with the alpha channel providing pixel
+coverage. Used for generating PNG images with a transparent background.
+(gdevprn.h [1.6.6.2.2.2]: 2003/03/11 11:59:10 ghostgum)
+
+</pre><h2><a name="7.06-Other"></a>Other</h2><pre>
+
+Add a configure option to enable COMPILE_INITS. After a patch from Michael
+Sweet. (Makefile.in [1.1.4.8], configure.ac [1.4.4.10]: 2002/05/03 03:40:11
+giles)
+
+Add a configure option for setting the name of the ghostscript executable.
+From a patch by Michael Sweet. (Makefile.in [1.1.4.9],
+configure.ac [1.4.4.11]: 2002/05/03 07:26:21 giles)
+
+Add a .cvsignore. (ijs/.cvsignore [1.1.2.1]: 2002/09/29 17:53:27 giles)
+
+Remove remaining elements of support for K&amp;R (pre-ansi) C. We no longer
+support building ghostscript tt way, but the remaining dead code causes
+confusion for some users. Closes Sourceforge bug #618048.
+(Makefile.in [1.1.4.10]: 2002/10/10 00:24:01 giles)
+
+Set USE_ASM to zero explicitly. (Makefile.in [1.1.4.11]: 2002/10/10 12:47:49
+giles)
+
+Backport debug and unitialized variable fixes from HEAD. After a patch from
+Alexei A. Podtelezhnikov. (gdevp14.c [1.4.2.2], gsalloc.c [1.11.2.2],
+gxht.c [1.2.6.2]: 2002/12/01 15:10:20 giles)
+
+Backport additional cast and initialization fixes. (gdevp14.c [1.4.2.3]:
+2002/12/01 18:02:41 giles)
+
+Backport MacOS build updates for Metrowerks CW8 from HEAD.
+(time_.h [1.3.2.2]: 2002/12/01 23:29:37 giles)
+
+Backport MacOS build updates for Metrowerks CW8 from HEAD.
+(macsystypes.h [1.1.4.3]: 2002/12/01 23:29:37 giles)
+
+Add working 'distclean' and 'maintainer-clean' targets to the autoconf
+makefile. Backport from HEAD. (Makefile.in [1.1.4.12]: 2002/12/02 00:10:24
+giles)
+
+Update release date for second candidate. Also adds a dummy 'check' target
+to the autoconf makefile for standards compliance. (Makefile.in [1.1.4.13]:
+2002/12/02 01:55:46 giles)
+
+Apply standard GNU license banner at the request of RMS. Patch from Brett
+Smith. (Makefile.in [1.1.4.13.2.1], gp_mac.h [1.1.4.2.2.1],
+gp_mswin.h [1.4.2.1.2.1], gsdll.h [1.3.2.2.2.1], gsdllos2.h [1.2.6.1.2.1],
+gsdllwin.h [1.3.2.1.2.1], gsjmorec.h [1.3.4.1.2.1]: 2003/01/17 00:49:00
+giles)
+
+Apply standard GNU license banner at the request of RMS. Patch from Brett
+Smith. (gspmdrv.h [1.2.6.1.2.1], iutilasm.asm [1.2.6.1.2.1],
+macsystypes.h [1.1.4.3.2.1], vms_x_fix.h [1.1.2.2.2.1]: 2003/01/17 00:49:03
+giles)
+
+Define the RM macro for the benifit of the 'clean' targets in the autoconf
+build. (Makefile.in [1.1.4.13.2.2]: 2003/02/09 17:20:51 giles)
+
+<hr>
+
+<h1><a name="Version7.05"></a>Version 7.05 (2002-04-22)</h1>
+
+<p>This is the first release of the stable 7.0x series under the GNU
+GPL, following one year after the release of 7.00. The license change in
+the major reason for this release, and we hope the community of
+Free Software users will enjoy the much improved features of the new
+stable branch.
+
+<p>Another major change over the 7.04 release is a improved asian
+language support from the gs-cjk team. This is a new version of the
+work released with 6.53.
+
+<p>And of course there are the usual bug fixes and minor improvements.
+
+<p>At the time of release, the following bugs were open against all
+ghostscript versions:
+
+219798,
+405342,
+406979,
+407342,
+414947,
+414985,
+415142,
+418241,
+423838,
+427193,
+427347,
+428891,
+428973,
+432040,
+434277,
+437285,
+446344,
+446672,
+448199,
+453969,
+458261,
+458500,
+458775,
+458780,
+459647,
+462221,
+465720,
+465936,
+468762,
+474745,
+475147,
+477644,
+482038,
+483629,
+484752,
+484753,
+485510,
+487953,
+493348,
+495319,
+498595,
+503794,
+505429,
+506375,
+508081,
+508675,
+509646,
+510808,
+511232,
+513905,
+514616,
+514616,
+515475,
+516653,
+517349,
+520686,
+521354,
+521664,
+521916,
+522486,
+524292,
+525508,
+526099,
+526491,
+528647,
+529103,
+529578,
+530011,
+530588,
+533467,
+534637,
+535366,
+535752,
+535836,
+535997,
+536877,
+538033,
+538042,
+538055,
+538267,
+538311,
+538428,
+539239,
+539327,
+539359,
+542535,
+542625,
+542664,
+542786,
+542848,
+543185,
+544247,
+544365,
+544774,
+544996,
+545003,
+545177,
+545478,
+546823,
+547102,
+547111.
+
+<h3><a name="7.05_Incompatible_changes"></a>Incompatible changes</h3>
+
+<p>
+No incompatible changes have been recorded for this version. Users of the 6.5x versions of GNU
+Ghostscript will want to check the History for a complete list of changes since that version.
+Authors of drivers with potential security implications are also encouraged to review
+the security changes introduced with 6.53/7.04.
+
+<pre>
+
+
+
+<h2><a name="7.05-Documentation"></a>Documentation</h2><pre>
+
+Fixes problems:
+ - corrects a typo in the new Id: line (doc/index.html [1.2.4.2]:
+2002/04/10 09:45:40 giles)
+ - the url for the guide to international paper sizes has changed.
+Thanks to Nelson Beebe for finding th e update. (doc/Use.htm [1.33.2.7]:
+2002/04/14 01:10:01 giles)
+ - Fix typo in cvs2hist invocation example
+(doc/Release.htm [1.40.2.12]: 2002/04/17 01:42:58 giles)
+
+Documents the work-around of using '#' instead of '=' to separate command
+line options from their arguments. The was previously listed only as a quirk
+of the Wacom build on MS-DOS, but is also needed on win32 because the
+command shell treats '=' as whitespace in passing arguments to batch files
+(like ps2pdf.bat). Closes SourceForge bug #483066. Also documents that
+MS-DOS is no longer a supported operating system. (doc/Use.htm [1.33.2.4]:
+2002/02/01 19:43:02 giles)
+
+Improves branch handling in cvs2hist, raph's patch from HEAD. Also documents
+the new options. (doc/Release.htm [1.40.2.4]: 2002/02/06 23:31:10 giles)
+
+Removes mention of SourceForge Bug #223005, which was closed before the 7.00
+release. (doc/Issues.htm [1.15.2.3]: 2002/02/21 20:33:08 giles)
+
+Update banner to the new format common to all releases. References file
+LICENSE. Note that the $Id: line is not altered by this change.
+(doc/API.htm [1.11.2.4],
+doc/Bug-form.htm [1.23.2.3], doc/Bug-info.htm [1.20.2.3],
+doc/C-style.htm [1.21.2.3], doc/Commprod.htm [1.15.2.3],
+doc/Current.htm [1.13.2.3], doc/DLL.htm [1.15.2.3],
+doc/Develop.htm [1.47.2.4], doc/Devices.htm [1.34.2.5],
+doc/Drivers.htm [1.21.2.3], doc/Fonts.htm [1.22.2.3],
+doc/Helpers.htm [1.17.2.3], doc/History1.htm [1.13.2.3],
+doc/History2.htm [1.13.2.3], doc/History3.htm [1.13.2.3],
+doc/History4.htm [1.13.2.3], doc/History5.htm [1.15.2.3],
+doc/History6.htm [1.30.2.3], doc/History7.htm [1.5.2.4],
+doc/Htmstyle.htm [1.18.2.3], doc/Humor.htm [1.3.2.1],
+doc/Install.htm [1.26.2.3], doc/Issues.htm [1.15.2.4],
+doc/Language.htm [1.34.2.5], doc/Lib.htm [1.14.2.3],
+doc/Maintain.htm [1.23.2.3], doc/Make.htm [1.36.2.6],
+doc/New-user.htm [1.30.2.3], doc/News.htm [1.90.2.5],
+doc/Projects.htm [1.33.2.3], doc/Ps-style.htm [1.13.2.3],
+doc/Ps2epsi.htm [1.15.2.3], doc/Ps2pdf.htm [1.32.2.3],
+doc/Psfiles.htm [1.22.2.3], doc/Readme.htm [1.31.2.3],
+doc/Release.htm [1.40.2.5], doc/Source.htm [1.13.2.3],
+doc/Tester.htm [1.14.2.3], doc/Unix-lpr.htm [1.13.2.3],
+doc/Use.htm [1.33.2.5], doc/Xfonts.htm [1.13.2.3]: 2002/02/22 19:45:53 ray)
+
+Removes auto-generated plain text versions of html documentation from cvs
+and makes their creation an explicit part of the release process.
+(doc/Release.htm [1.40.2.6]: 2002/02/25 21:43:20 giles)
+
+Add example code to doc/API.htm showing how to call the Ghostscript DLL as a
+PostScript to PDF convertor. (doc/API.htm [1.11.2.5]: 2002/03/12 07:15:16
+ghostgum)
+
+Update msvc32.mak and documentation to support compilation with Microsoft
+Visual Studio .NET. This requires MSVC_VERSION=7. (doc/Make.htm [1.36.2.7]:
+2002/03/12 07:21:30 ghostgum)
+
+Documents how to build a Windows self-extracting archive for a ghostscript
+distribution (doc/Release.htm [1.40.2.7]: 2002/03/12 07:25:12 ghostgum)
+
+gs-cjk project : add new documents CJK.htm and CJKTTCID.htm, add references
+to Fonts.htm, Readme.htm, Use.htm add targets to unixinst.mak. Fix by Suzuki
+Toshiya and Taiji Yamada. (doc/Fonts.htm [1.22.2.4],
+doc/Readme.htm [1.31.2.4], doc/Use.htm [1.33.2.6]: 2002/04/02 14:26:38
+mpsuzuki)
+
+gs-cjk project : add CIDFnmap samples add references to Develop.htm add
+targets to unixinst.mak (doc/Develop.htm [1.47.2.5]: 2002/04/02 14:47:42
+mpsuzuki)
+
+add a missing Id: line (doc/index.html [1.2.4.1]: 2002/04/10 09:19:35 giles)
+
+add new files to the Developer documentation (doc/Develop.htm [1.47.2.6]:
+2002/04/10 09:44:24 giles)
+
+mark this as a GNU version and bump the release number
+(doc/News.htm [1.90.2.6]: 2002/04/15 05:47:56 giles)
+
+Update version and date for the 7.05rc1. (doc/API.htm [1.11.2.6],
+doc/Bug-form.htm [1.23.2.4], doc/Bug-info.htm [1.20.2.4],
+doc/C-style.htm [1.21.2.4], doc/Commprod.htm [1.15.2.4],
+doc/Current.htm [1.13.2.4], doc/DLL.htm [1.15.2.4],
+doc/Develop.htm [1.47.2.7], doc/Devices.htm [1.34.2.6],
+doc/Drivers.htm [1.21.2.4], doc/Fonts.htm [1.22.2.5],
+doc/Helpers.htm [1.17.2.4], doc/History1.htm [1.13.2.4],
+doc/History2.htm [1.13.2.4], doc/History3.htm [1.13.2.4],
+doc/History4.htm [1.13.2.4], doc/History5.htm [1.15.2.4],
+doc/History6.htm [1.30.2.4], doc/History7.htm [1.5.2.5],
+doc/Htmstyle.htm [1.18.2.4], doc/Install.htm [1.26.2.4],
+doc/Issues.htm [1.15.2.5], doc/Language.htm [1.34.2.6],
+doc/Lib.htm [1.14.2.4], doc/Maintain.htm [1.23.2.4],
+doc/Make.htm [1.36.2.8], doc/New-user.htm [1.30.2.4],
+doc/News.htm [1.90.2.7], doc/Projects.htm [1.33.2.4],
+doc/Ps-style.htm [1.13.2.4], doc/Ps2epsi.htm [1.15.2.4],
+doc/Ps2pdf.htm [1.32.2.4], doc/Psfiles.htm [1.22.2.4],
+doc/Readme.htm [1.31.2.5], doc/Release.htm [1.40.2.8],
+doc/Source.htm [1.13.2.4], doc/Tester.htm [1.14.2.4],
+doc/Unix-lpr.htm [1.13.2.4], doc/Use.htm [1.33.2.8],
+doc/Xfonts.htm [1.13.2.4], doc/gs-vms.hlp [1.12.2.3],
+man/dvipdf.1 [1.10.2.3], man/font2c.1 [1.10.2.3], man/gs.1 [1.10.2.3],
+man/gslp.1 [1.10.2.3], man/gsnd.1 [1.10.2.3], man/pdf2dsc.1 [1.10.2.3],
+man/pdf2ps.1 [1.12.2.3], man/pdfopt.1 [1.10.2.3], man/pf2afm.1 [1.10.2.3],
+man/pfbtopfa.1 [1.11.2.3], man/printafm.1 [1.10.2.3],
+man/ps2ascii.1 [1.10.2.3], man/ps2epsi.1 [1.10.2.3],
+man/ps2pdf.1 [1.14.2.3], man/ps2pdfwr.1 [1.13.2.3], man/ps2ps.1 [1.17.2.3],
+man/wftopfa.1 [1.10.2.3]: 2002/04/15 19:20:09 giles)
+
+Document the -dBATCH option in the manpage. Strengthen the wording for
+-dSAFER and improve the ordering of the option descriptions.
+(man/gs.1 [1.10.2.4]: 2002/04/15 19:54:06 giles)
+
+Update the release documentation to better reflect current practice.
+(doc/Release.htm [1.40.2.9]: 2002/04/15 21:40:02 giles)
+
+Documentation updates for a revised 7.05rc1. (doc/API.htm [1.11.2.7],
+doc/Bug-form.htm [1.23.2.5], doc/Bug-info.htm [1.20.2.5],
+doc/C-style.htm [1.21.2.5], doc/Commprod.htm [1.15.2.5],
+doc/Current.htm [1.13.2.5], doc/DLL.htm [1.15.2.5],
+doc/Develop.htm [1.47.2.8], doc/Devices.htm [1.34.2.7],
+doc/Drivers.htm [1.21.2.5], doc/Fonts.htm [1.22.2.6],
+doc/Helpers.htm [1.17.2.5], doc/History1.htm [1.13.2.5],
+doc/History2.htm [1.13.2.5], doc/History3.htm [1.13.2.5],
+doc/History4.htm [1.13.2.5], doc/History5.htm [1.15.2.5],
+doc/History6.htm [1.30.2.5], doc/History7.htm [1.5.2.6],
+doc/Htmstyle.htm [1.18.2.5], doc/Install.htm [1.26.2.5],
+doc/Issues.htm [1.15.2.6], doc/Language.htm [1.34.2.7],
+doc/Lib.htm [1.14.2.5], doc/Maintain.htm [1.23.2.5],
+doc/Make.htm [1.36.2.9], doc/New-user.htm [1.30.2.5],
+doc/News.htm [1.90.2.8], doc/Projects.htm [1.33.2.5],
+doc/Ps-style.htm [1.13.2.5], doc/Ps2epsi.htm [1.15.2.5],
+doc/Ps2pdf.htm [1.32.2.5], doc/Psfiles.htm [1.22.2.5],
+doc/Readme.htm [1.31.2.6], doc/Release.htm [1.40.2.10],
+doc/Source.htm [1.13.2.5], doc/Tester.htm [1.14.2.5],
+doc/Unix-lpr.htm [1.13.2.5], doc/Use.htm [1.33.2.9],
+doc/Xfonts.htm [1.13.2.5], doc/gs-vms.hlp [1.12.2.4]: 2002/04/17 01:08:26
+giles)
+
+Documentation updates for a revised 7.05rc1. (man/dvipdf.1 [1.10.2.4],
+man/font2c.1 [1.10.2.4], man/gs.1 [1.10.2.5], man/gslp.1 [1.10.2.4],
+man/gsnd.1 [1.10.2.4], man/pdf2dsc.1 [1.10.2.4], man/pdf2ps.1 [1.12.2.4],
+man/pdfopt.1 [1.10.2.4], man/pf2afm.1 [1.10.2.4], man/pfbtopfa.1 [1.11.2.4],
+man/printafm.1 [1.10.2.4], man/ps2ascii.1 [1.10.2.4],
+man/ps2epsi.1 [1.10.2.4], man/ps2pdf.1 [1.14.2.4],
+man/ps2pdfwr.1 [1.13.2.4], man/ps2ps.1 [1.17.2.4], man/wftopfa.1 [1.10.2.4]:
+2002/04/17 01:08:37 giles)
+
+Update release date for revised 7.05rc1. (doc/API.htm [1.11.2.8],
+doc/Bug-form.htm [1.23.2.6], doc/Bug-info.htm [1.20.2.6],
+doc/C-style.htm [1.21.2.6], doc/Commprod.htm [1.15.2.6],
+doc/Current.htm [1.13.2.6], doc/DLL.htm [1.15.2.6],
+doc/Develop.htm [1.47.2.9], doc/Devices.htm [1.34.2.8],
+doc/Drivers.htm [1.21.2.6], doc/Fonts.htm [1.22.2.7],
+doc/Helpers.htm [1.17.2.6], doc/History1.htm [1.13.2.6],
+doc/History2.htm [1.13.2.6], doc/History3.htm [1.13.2.6],
+doc/History4.htm [1.13.2.6], doc/History5.htm [1.15.2.6],
+doc/History6.htm [1.30.2.6], doc/History7.htm [1.5.2.7],
+doc/Htmstyle.htm [1.18.2.6], doc/Install.htm [1.26.2.6],
+doc/Issues.htm [1.15.2.7], doc/Language.htm [1.34.2.8],
+doc/Lib.htm [1.14.2.6], doc/Maintain.htm [1.23.2.6],
+doc/Make.htm [1.36.2.10], doc/New-user.htm [1.30.2.6],
+doc/News.htm [1.90.2.9], doc/Projects.htm [1.33.2.6],
+doc/Ps-style.htm [1.13.2.6], doc/Ps2epsi.htm [1.15.2.6],
+doc/Ps2pdf.htm [1.32.2.6], doc/Psfiles.htm [1.22.2.6],
+doc/Readme.htm [1.31.2.7], doc/Release.htm [1.40.2.11],
+doc/Source.htm [1.13.2.6], doc/Tester.htm [1.14.2.6],
+doc/Unix-lpr.htm [1.13.2.6], doc/Use.htm [1.33.2.10],
+doc/Xfonts.htm [1.13.2.6], doc/gs-vms.hlp [1.12.2.5]: 2002/04/17 01:13:15
+giles)
+
+Update release date for revised 7.05rc1. (man/dvipdf.1 [1.10.2.5],
+man/font2c.1 [1.10.2.5], man/gs.1 [1.10.2.6], man/gslp.1 [1.10.2.5],
+man/gsnd.1 [1.10.2.5], man/pdf2dsc.1 [1.10.2.5], man/pdf2ps.1 [1.12.2.5],
+man/pdfopt.1 [1.10.2.5], man/pf2afm.1 [1.10.2.5], man/pfbtopfa.1 [1.11.2.5],
+man/printafm.1 [1.10.2.5], man/ps2ascii.1 [1.10.2.5],
+man/ps2epsi.1 [1.10.2.5], man/ps2pdf.1 [1.14.2.5],
+man/ps2pdfwr.1 [1.13.2.5], man/ps2ps.1 [1.17.2.5], man/wftopfa.1 [1.10.2.5]:
+2002/04/17 01:13:21 giles)
+
+update changelog for 7.05rc1 (doc/Changes.htm [1.28.2.4],
+doc/History7.htm [1.5.2.8], doc/News.htm [1.90.2.10]: 2002/04/17 01:43:27
+giles)
+
+Minor clean-up for GNU coding standards. (doc/Readme.htm [1.31.2.8]: 2002/04/17
+01:52:38 giles)
+
+Remove the chess.ps example file due to license ambiguity.
+(doc/Psfiles.htm [1.22.2.7]: 2002/04/18 06:01:27 giles)
+
+update the language describing the gnu portion of the license options to
+reflect current practice. (doc/Commprod.htm [1.15.2.7]: 2002/04/19 01:45:01
+giles)
+
+Add the 'stp' driver from the gimp-print project, and compile it in by
+default from the autoconf build if libgimprint is found.
+(doc/Devices.htm [1.34.2.9]: 2002/04/19 22:23:09 giles)
+
+bump release date for 7.05rc2 (doc/API.htm [1.11.2.9],
+doc/Bug-form.htm [1.23.2.7], doc/Bug-info.htm [1.20.2.7],
+doc/C-style.htm [1.21.2.7], doc/Commprod.htm [1.15.2.8],
+doc/Current.htm [1.13.2.7], doc/DLL.htm [1.15.2.7],
+doc/Develop.htm [1.47.2.10], doc/Devices.htm [1.34.2.10],
+doc/Drivers.htm [1.21.2.7], doc/Fonts.htm [1.22.2.8],
+doc/Helpers.htm [1.17.2.7], doc/History1.htm [1.13.2.7],
+doc/History2.htm [1.13.2.7], doc/History3.htm [1.13.2.7],
+doc/History4.htm [1.13.2.7], doc/History5.htm [1.15.2.7],
+doc/History6.htm [1.30.2.7], doc/History7.htm [1.5.2.9],
+doc/Htmstyle.htm [1.18.2.7], doc/Install.htm [1.26.2.7],
+doc/Issues.htm [1.15.2.8], doc/Language.htm [1.34.2.9],
+doc/Lib.htm [1.14.2.7], doc/Maintain.htm [1.23.2.7],
+doc/Make.htm [1.36.2.11], doc/New-user.htm [1.30.2.7],
+doc/News.htm [1.90.2.11], doc/Projects.htm [1.33.2.7],
+doc/Ps-style.htm [1.13.2.7], doc/Ps2epsi.htm [1.15.2.7],
+doc/Ps2pdf.htm [1.32.2.7], doc/Psfiles.htm [1.22.2.8],
+doc/Readme.htm [1.31.2.9], doc/Release.htm [1.40.2.13],
+doc/Source.htm [1.13.2.7], doc/Tester.htm [1.14.2.7],
+doc/Unix-lpr.htm [1.13.2.7], doc/Use.htm [1.33.2.11],
+doc/Xfonts.htm [1.13.2.7], doc/gs-vms.hlp [1.12.2.6],
+man/dvipdf.1 [1.10.2.6], man/font2c.1 [1.10.2.6], man/gs.1 [1.10.2.7],
+man/gslp.1 [1.10.2.6], man/gsnd.1 [1.10.2.6], man/pdf2dsc.1 [1.10.2.6],
+man/pdf2ps.1 [1.12.2.6], man/pdfopt.1 [1.10.2.6], man/pf2afm.1 [1.10.2.6],
+man/pfbtopfa.1 [1.11.2.6], man/printafm.1 [1.10.2.6],
+man/ps2ascii.1 [1.10.2.6], man/ps2epsi.1 [1.10.2.6],
+man/ps2pdf.1 [1.14.2.6], man/ps2pdfwr.1 [1.13.2.6], man/ps2ps.1 [1.17.2.6],
+man/wftopfa.1 [1.10.2.6]: 2002/04/19 22:38:45 giles)
+
+Update the open bug list. (doc/News.htm [1.90.2.12]: 2002/04/19 22:47:14
+giles)
+
+add gnudevs.mak and gdevstp.c to Develop.htm (doc/Develop.htm [1.47.2.11]:
+2002/04/19 22:53:14 giles)
+
+Update changelog for the 7.05rc2 pre-release. (doc/Changes.htm [1.28.2.5],
+doc/History7.htm [1.5.2.10]: 2002/04/19 23:03:02 giles)
+
+Add a step to create the configure script for ijs.
+(doc/Release.htm [1.40.2.14]: 2002/04/22 18:11:46 giles)
+
+Remove the DOS and OS/2 versions of the ps2epsi code. They have been broken
+for some time. (doc/Develop.htm [1.47.2.12], doc/Ps2epsi.htm [1.15.2.8],
+man/ps2epsi.1 [1.10.2.7]: 2002/04/22 20:38:01 giles)
+
+Update version date for release. (doc/API.htm [1.11.2.10],
+doc/Bug-form.htm [1.23.2.8], doc/Bug-info.htm [1.20.2.8],
+doc/C-style.htm [1.21.2.8], doc/Commprod.htm [1.15.2.9],
+doc/Current.htm [1.13.2.8], doc/DLL.htm [1.15.2.8],
+doc/Develop.htm [1.47.2.13], doc/Devices.htm [1.34.2.11],
+doc/Drivers.htm [1.21.2.8], doc/Fonts.htm [1.22.2.9],
+doc/Helpers.htm [1.17.2.8], doc/History1.htm [1.13.2.8],
+doc/History2.htm [1.13.2.8], doc/History3.htm [1.13.2.8],
+doc/History4.htm [1.13.2.8], doc/History5.htm [1.15.2.8],
+doc/History6.htm [1.30.2.8], doc/History7.htm [1.5.2.11],
+doc/Htmstyle.htm [1.18.2.8], doc/Install.htm [1.26.2.8],
+doc/Issues.htm [1.15.2.9], doc/Language.htm [1.34.2.10],
+doc/Lib.htm [1.14.2.8], doc/Maintain.htm [1.23.2.8],
+doc/Make.htm [1.36.2.12], doc/New-user.htm [1.30.2.8],
+doc/News.htm [1.90.2.13], doc/Projects.htm [1.33.2.8],
+doc/Ps-style.htm [1.13.2.8], doc/Ps2epsi.htm [1.15.2.9],
+doc/Ps2pdf.htm [1.32.2.8], doc/Psfiles.htm [1.22.2.9],
+doc/Readme.htm [1.31.2.10], doc/Release.htm [1.40.2.15],
+doc/Source.htm [1.13.2.8], doc/Tester.htm [1.14.2.8],
+doc/Unix-lpr.htm [1.13.2.8], doc/Use.htm [1.33.2.12],
+doc/Xfonts.htm [1.13.2.8], doc/gs-vms.hlp [1.12.2.7]: 2002/04/22 21:15:32
+giles)
+
+Update version date for release.Update version date for release.
+(man/dvipdf.1 [1.10.2.7], man/font2c.1 [1.10.2.7], man/gs.1 [1.10.2.8],
+man/gslp.1 [1.10.2.7], man/gsnd.1 [1.10.2.7], man/pdf2dsc.1 [1.10.2.7],
+man/pdf2ps.1 [1.12.2.7], man/pdfopt.1 [1.10.2.7], man/pf2afm.1 [1.10.2.7],
+man/pfbtopfa.1 [1.11.2.7], man/printafm.1 [1.10.2.7],
+man/ps2ascii.1 [1.10.2.7], man/ps2epsi.1 [1.10.2.8],
+man/ps2pdf.1 [1.14.2.7], man/ps2pdfwr.1 [1.13.2.7], man/ps2ps.1 [1.17.2.7],
+man/wftopfa.1 [1.10.2.7]: 2002/04/22 21:15:55 giles)
+
+Update the open bug list for release. (doc/News.htm [1.90.2.14]: 2002/04/22
+21:26:46 giles)
+
+</pre><h2><a name="7.05-Procedures"></a>Procedures</h2><pre>
+
+Fixes problems:
+ - ps2pdf14 was not being installed by unixinst.mak. Fixes
+SourceForge bug #508607. (unixinst.mak [1.20.2.2]: 2002/02/06 07:19:17
+jackiem)
+ - make symlinks to equivalent manpages with relative rather than
+absolute paths to facilitate moving the directory to another location.
+Closes SourceForge Bug #416131. (unixinst.mak [1.20.2.7]: 2002/04/18
+01:56:12 giles)
+ - Adds -p parameter to mkdir to suppress warning messages when the
+target already exists and to create parent directories automatically if they
+don't exist. Fixes Sourceforge bug #518742. (unix-dll.mak [1.6.2.2],
+unixinst.mak [1.20.2.9]: 2002/04/19 01:10:40 jack)
+
+Improves branch handling in cvs2hist, raph's patch from HEAD. Also documents
+the new options. (toolbin/cvs2hist.py [1.9.2.1]: 2002/02/06 23:31:10 giles)
+
+Update banner to the new format common to all releases. References file
+LICENSE. Note that the $Id: line is not altered by this change.
+(all-arch.mak [1.9.2.2],
+bcwin32.mak [1.12.2.3], cfonts.mak [1.2.6.1], contrib.mak [1.24.2.1],
+devs.mak [1.47.2.3], dvx-gcc.mak [1.12.2.3], dvx-head.mak [1.2.6.1],
+dvx-tail.mak [1.5.2.1], dwmain.rc [1.2.6.1], dwsetup.rc [1.5.2.1],
+dwuninst.rc [1.3.6.1], gs.mak [1.5.2.3], gs16spl.rc [1.2.6.1],
+gsdll2.rc [1.2.6.1], gsdll32.rc [1.2.6.1]: 2002/02/22 19:45:55 ray)
+
+Update banner to the new format common to all releases. References file
+LICENSE. Note that the $Id: line is not altered by this change.
+(gsos2.rc [1.2.6.1],
+gspmdrv.rc [1.2.6.1], gswin.rc [1.2.6.1], icclib.mak [1.3.2.2],
+ijs.mak [1.2.2.2], int.mak [1.50.2.3], jpeg.mak [1.4.2.1],
+lib.mak [1.53.2.2], libpng.mak [1.10.2.2], macos-fw.mak [1.1.2.2],
+macos-mcp.mak [1.3.2.3], macosx.mak [1.3.2.2], msvc32.mak [1.20.2.4],
+msvccmd.mak [1.6.2.1], msvclib.mak [1.16.2.2], msvctail.mak [1.6.2.1],
+openvms.mak [1.16.2.3], openvms.mmk [1.12.2.1], os2.mak [1.19.2.3],
+pcwin.mak [1.2.6.1], ugcclib.mak [1.13.2.3], unix-aux.mak [1.5.2.1],
+unix-dll.mak [1.6.2.1], unix-end.mak [1.2.6.1], unix-gcc.mak [1.23.2.4],
+unixansi.mak [1.16.2.4], unixhead.mak [1.2.6.1], unixinst.mak [1.20.2.3],
+unixlink.mak [1.3.4.1], version.mak [1.36.2.3], watc.mak [1.16.2.2],
+watclib.mak [1.13.2.3], watcw32.mak [1.13.2.3], wccommon.mak [1.3.6.1],
+wctail.mak [1.3.2.2], winint.mak [1.8.2.1], winlib.mak [1.12.2.2],
+winplat.mak [1.2.6.1], wmin.mak [1.2.6.1], zlib.mak [1.3.2.1]: 2002/02/22
+19:45:58 ray)
+
+Update banner to the new format common to all releases. References file
+LICENSE. Note that the $Id: line is not altered by this change.
+(toolbin/3way.tcl [1.3.6.1],
+toolbin/cvs2hist.py [1.9.2.2], toolbin/errlist.tcl [1.3.6.1],
+toolbin/gsindent [1.3.6.1], toolbin/gsmake.tcl [1.5.6.1],
+toolbin/gssubst [1.1.4.1], toolbin/headers.tcl [1.3.6.1],
+toolbin/leaks.tcl [1.3.6.1], toolbin/makegnu.tcl [1.3.6.1],
+toolbin/makeset.tcl [1.10.2.3], toolbin/many2pdf.tcl [1.1.4.1],
+toolbin/pdfinflt.ps [1.1.2.1], toolbin/pre [1.11.2.1],
+toolbin/precheck.tcl [1.3.6.1], toolbin/suite.tcl [1.3.6.1],
+toolbin/tmake.tcl [1.3.6.1]: 2002/02/22 19:46:03 ray)
+
+Removes auto-generated plain text versions of html documentation from cvs
+and makes their creation an explicit part of the release process.
+(toolbin/pre [1.11.2.2]: 2002/02/25 21:43:20 giles)
+
+Add gdevpccm.obj to the display device dependencies. (devs.mak [1.47.2.4]:
+2002/02/28 22:22:25 ghostgum)
+
+When building the distribution archive, don't flag an error if gsv16spl.exe
+doesn't exist. This file is only needed for Win32s which is no longer
+supported. (winint.mak [1.8.2.2]: 2002/02/28 22:23:03 ghostgum)
+
+Update msvc32.mak and documentation to support compilation with Microsoft
+Visual Studio .NET. This requires MSVC_VERSION=7. (msvc32.mak [1.20.2.5]:
+2002/03/12 07:21:30 ghostgum)
+
+Replace Windows icons with new versions that include 48x48 pixel and 32-bit
+versions for Windows XP. Change the 16x16 pixel icons to use the full 'g'
+instead of just the head. Use a restricted icon gswin16.ico for WinZip SE
+which can't handle the new icon. (bcwin32.mak [1.12.2.4],
+dwmain.rc [1.2.6.2], dwsetup.rc [1.5.2.2], dwuninst.rc [1.3.6.2],
+gs16spl.rc [1.2.6.2], gsdll32.rc [1.2.6.2], gswin.rc [1.2.6.2],
+gswin32.rc [1.1.6.1], gswin386.rc [1.1.6.1], winint.mak [1.8.2.3]:
+2002/03/30 01:33:03 ghostgum)
+
+gs_cjk project : bugfix for nested FMapType4/5 OCF. Fix by Suzuki Toshiya.
+(lib.mak [1.53.2.3]: 2002/04/02 13:29:35 mpsuzuki)
+
+gs-cjk project : add new documents CJK.htm and CJKTTCID.htm, add references
+to Fonts.htm, Readme.htm, Use.htm add targets to unixinst.mak. Fix by Suzuki
+Toshiya and Taiji Yamada. (unixinst.mak [1.20.2.4]: 2002/04/02 14:26:39
+mpsuzuki)
+
+gs-cjk project : add CIDFnmap samples add references to Develop.htm add
+targets to unixinst.mak (unixinst.mak [1.20.2.5]: 2002/04/02 14:47:42
+mpsuzuki)
+
+gs-cjk project : add CJK samples and fix install targets, by Taiji Yamada
+(unixinst.mak [1.20.2.6]: 2002/04/02 14:53:39 mpsuzuki)
+
+Create the bboxutil pseudo-device to allow inclusion of the bbox device for
+internal use by those drivers that require it without putting it on the list
+of devices. Also some minor makefile cleanup. Patch by Ray Johnston from
+7.20. (devs.mak [1.47.2.5], lib.mak [1.53.2.4], macosx.mak [1.3.2.3],
+msvc32.mak [1.20.2.6], openvms.mak [1.16.2.4], os2.mak [1.19.2.4],
+unix-gcc.mak [1.23.2.5], unixansi.mak [1.16.2.5]: 2002/04/10 00:53:33 giles)
+
+Adds support for compilation against a standard shared libjpeg. It is
+believed that non-baseline compliant DCTEncoded data, permitted by early
+versions of postscript, is now extremely rare and the prohibition against
+SHARE_JPEG=1 may reasonably be removed. The autoconf build will prefer a
+local copy of the jpeg source, in which case the D_MAX_BLOCKS_IN_MCU patch
+will still be applied. If no such local copy is found, it will try to find a
+shared library on the system. For all unix builds, if $(JSRCDIR)/jmemsys.h
+cannot be found, we define DONT_HAVE_JMEMSYS_H and include our own versions
+of the libjpeg memory manager prototypes. The default allocator in the
+shared library is overridden by the ghostscript one at link-time. While this
+may be implementation-dependent, it appears to function as desired on at
+least GNU/Linux and Solaris. Also changes the autoconf build to prefer local
+zlib and libpng source, and cleans up some variable names. Patch by Raph
+Levien from 7.20. (dvx-gcc.mak [1.12.2.4], macosx.mak [1.3.2.4],
+ugcclib.mak [1.13.2.4], unix-aux.mak [1.5.2.2], unixansi.mak [1.16.2.6]:
+2002/04/10 01:44:27 giles)
+
+remove the warning against SHARE_JPEG=1, omitted in the last commit
+(unix-gcc.mak [1.23.2.6]: 2002/04/10 02:33:31 giles)
+
+use relative paths for the smoke test data files
+(toolbin/smoke.ps [1.1.6.1]: 2002/04/10 02:33:31 giles)
+
+makefile cleanup. remove a redundant -fno-common from the linker flags
+(unix-gcc.mak [1.23.2.7]: 2002/04/10 02:37:36 giles)
+
+add a missing Id: line (toolbin/smoke.ps [1.1.6.2]: 2002/04/10 09:17:30
+giles)
+
+mark this as a GNU version and bump the release number
+(version.mak [1.36.2.4]: 2002/04/15 05:47:56 giles)
+
+update the libpng version (macosx.mak [1.3.2.5]: 2002/04/15 19:24:22 giles)
+
+Documentation updates for a revised 7.05rc1. (version.mak [1.36.2.5]:
+2002/04/17 01:08:44 giles)
+
+Check release dates in UTC to avoid conflicts due to timezone.
+(toolbin/pre [1.11.2.3]: 2002/04/17 01:16:22 giles)
+
+Remove the chess.ps example file due to license ambiguity.
+(unixinst.mak [1.20.2.8]: 2002/04/18 06:01:27 giles)
+
+Committing in . Back-ports from the main stream such that OpenVMS is happy
+Modified Files: Tag: GS_7_0X gs/src/devs.mak gs/src/gschar0.c
+gs/src/gserrors.h gs/src/imainarg.c
+----------------------------------------------------------------------
+(devs.mak [1.47.2.6]: 2002/04/18 09:58:45 joukj)
+
+Update libpng version numbers to the latest 1.2.2. (all-arch.mak [1.9.2.3],
+bcwin32.mak [1.12.2.5], dvx-gcc.mak [1.12.2.5], libpng.mak [1.10.2.3],
+macos-mcp.mak [1.3.2.4], macosx.mak [1.3.2.6], msvc32.mak [1.20.2.7],
+msvclib.mak [1.16.2.3], openvms.mak [1.16.2.5], openvms.mmk [1.12.2.2],
+os2.mak [1.19.2.5], ugcclib.mak [1.13.2.5], unix-gcc.mak [1.23.2.8],
+unixansi.mak [1.16.2.7], watc.mak [1.16.2.3], watclib.mak [1.13.2.4],
+watcw32.mak [1.13.2.4]: 2002/04/19 06:32:22 giles)
+
+Add the 'stp' driver from the gimp-print project, and compile it in by
+default from the autoconf build if libgimprint is found.
+(unix-gcc.mak [1.23.2.9], unixansi.mak [1.16.2.8]: 2002/04/19 22:23:09
+giles)
+
+bump the release date in the makefile (version.mak [1.36.2.6]: 2002/04/19
+22:39:53 giles)
+
+Update licensing information in the Windows distribution archive.
+(winint.mak [1.8.2.4]: 2002/04/20 10:14:02 ghostgum)
+
+Update licensing information in Windows distribution archive.
+(winint.mak [1.8.2.5]: 2002/04/20 10:32:37 ghostgum)
+
+Update licensing information in Windows files. (dwsetup.def [1.2.6.1],
+dwsetup.rc [1.5.2.3], dwuninst.def [1.2.6.1]: 2002/04/20 22:11:39 ghostgum)
+
+Update version date for release.Update version date for release.Update
+version date for release. (version.mak [1.36.2.7]: 2002/04/22 21:16:23
+giles)
+
+Change the license reference in the installer dialog and update the
+copyright year. (dwsetup.rc [1.5.2.4]: 2002/04/23 01:41:13 giles)
+
+</pre><h2><a name="7.05-Utilities"></a>Utilities</h2><pre>
+
+Fixes problems:
+ - Fixes pdf2dsc to open input file before .setsafe, so that it works
+even when SAFER locks down read file access. Backport patch by raph from
+HEAD. (lib/pdf2dsc.ps [1.3.4.1]: 2002/02/13 23:29:52 giles)
+ - ps2epsi generated an invalid DSC header. Also, encapsulate the
+original file in %%Begin/EndDocument t o protect against confusion with
+multiple DSC comments. Patch from Russell Lang. (lib/ps2epsi [1.7.2.1]:
+2002/04/22 20:18:24 giles)
+ - Calculate more accurate BoundingBox and prevent invalidaccess by
+using an 8-bit deep preview image. Patch from Ray Johnston. SF bug #525508.
+(lib/ps2epsi.ps [1.5.2.3]: 2002/04/22 20:30:39 giles)
+
+Update licensing information, with permission from Thomas Merz. Also
+updates the author's email address and removes the obsolete physical
+address.
+(lib/viewjpeg.ps [1.1.6.1]: 2002/02/08 09:44:43 giles)
+
+Update banner to the new format common to all releases. References file
+LICENSE. Note that the $Id: line is not altered by this change.
+(bench.c [1.4.4.1],
+dxmain.c [1.7.2.1], dxmainc.c [1.4.2.2], echogs.c [1.3.2.1],
+lib/Fontmap.ATB [1.2.6.1], lib/Fontmap.ATM [1.2.6.1],
+lib/Fontmap.GS [1.2.6.1], lib/Fontmap.OS2 [1.2.6.1],
+lib/Fontmap.SGI [1.2.6.1], lib/Fontmap.Sol [1.2.6.1],
+lib/Fontmap.Ult [1.2.6.1], lib/addxchar.ps [1.2.6.1],
+lib/align.ps [1.2.6.1], lib/bdftops.ps [1.3.2.1], lib/caption.ps [1.2.6.1],
+lib/cid2code.ps [1.3.4.1], lib/docie.ps [1.2.6.1], lib/errpage.ps [1.2.6.1],
+lib/font2c.ps [1.3.2.1], lib/font2pcl.ps [1.2.6.1], lib/gslp.ps [1.2.6.1],
+lib/gsnup.ps [1.2.6.1], lib/image-qa.ps [1.3.2.1], lib/impath.ps [1.3.4.1],
+lib/jispaper.ps [1.2.6.1], lib/lines.ps [1.2.6.1],
+lib/markhint.ps [1.2.6.1], lib/markpath.ps [1.2.6.1],
+lib/packfile.ps [1.2.6.1], lib/pcharstr.ps [1.2.6.1],
+lib/pdf2dsc.ps [1.3.4.2], lib/pdfopt.ps [1.10.2.1],
+lib/pdfwrite.ps [1.7.2.1], lib/pfbtopfa.ps [1.2.6.1],
+lib/ppath.ps [1.2.6.1], lib/pphs.ps [1.3.2.1], lib/ps2ai.ps [1.2.6.1],
+lib/ps2ascii.ps [1.3.2.1], lib/ps2epsi.ps [1.5.2.1],
+lib/showchar.ps [1.2.6.1], lib/stcinfo.ps [1.2.6.1],
+lib/stcolor.ps [1.2.6.1], lib/stocht.ps [1.3.6.1],
+lib/traceimg.ps [1.2.6.1], lib/traceop.ps [1.2.6.1],
+lib/type1enc.ps [1.2.6.1], lib/type1ops.ps [1.2.6.1],
+lib/uninfo.ps [1.2.6.1], lib/unprot.ps [1.2.6.1], lib/viewcmyk.ps [1.2.6.1],
+lib/viewgif.ps [1.2.6.1], lib/viewjpeg.ps [1.1.6.2],
+lib/viewmiff.ps [1.2.6.1], lib/viewpbm.ps [1.2.6.1],
+lib/viewpcx.ps [1.2.6.1], lib/viewps2a.ps [1.2.6.1],
+lib/wftopfa.ps [1.2.6.1], lib/winmaps.ps [1.2.6.1], lib/wrfont.ps [1.2.6.1],
+lib/zeroline.ps [1.2.6.1]: 2002/02/22 19:45:54 ray)
+
+Update banner to the new format common to all releases. References file
+LICENSE. Note that the $Id: line is not altered by this change.
+(genarch.c [1.2.6.1],
+genconf.c [1.4.4.1], gendev.c [1.2.6.1], genht.c [1.2.6.1],
+geninit.c [1.3.6.1], gp_dvx.c [1.4.2.1], gp_iwatc.c [1.6.2.1],
+gp_mac.c [1.1.4.1], gp_mktmp.c [1.2.6.1], gp_msdll.c [1.1.2.1],
+gp_mshdl.c [1.2.6.1], gp_msio.c [1.3.4.1], gp_mslib.c [1.3.2.1],
+gp_mspol.c [1.1.2.1], gp_msprn.c [1.1.2.1], gp_mswin.c [1.7.2.1],
+gp_ntfs.c [1.5.2.3], gp_os2.c [1.10.2.2], gp_os9.c [1.4.2.1],
+gp_stdia.c [1.3.2.1], gp_stdin.c [1.2.2.1], gp_sysv.c [1.2.6.1],
+gp_unix.c [1.5.2.1], gp_vms.c [1.7.2.2], gp_wgetv.c [1.4.2.1],
+gp_win32.c [1.2.6.1], gp_wsync.c [1.2.6.1], gs16spl.c [1.2.6.1],
+gsdll.c [1.6.2.1], gserver.c [1.2.6.1], gspmdrv.c [1.2.6.1]: 2002/02/22
+19:45:57 ray)
+
+Update banner to the new format common to all releases. References file
+LICENSE. Note that the $Id: line is not altered by this change.
+(scfdgen.c [1.2.6.1],
+zdosio.c [1.2.6.1], ziodevs.c [1.5.2.1], ziodevsc.c [1.3.2.1]: 2002/02/22
+19:46:00 ray)
+
+gs_cjk project : replace "min" &amp; "max" by ".min" &amp; ".max". Fix by
+Suzuki Toshiya. (lib/bdftops.ps [1.3.2.2], lib/font2pcl.ps [1.2.6.2],
+lib/gslp.ps [1.2.6.2], lib/packfile.ps [1.2.6.2], lib/pdfopt.ps [1.10.2.2],
+lib/prfont.ps [1.2.6.1], lib/ps2ascii.ps [1.3.2.2],
+lib/traceimg.ps [1.2.6.2], lib/viewcmyk.ps [1.2.6.2],
+lib/viewpbm.ps [1.2.6.2], lib/viewpcx.ps [1.2.6.2]: 2002/04/02 13:57:27
+mpsuzuki)
+
+add missing Id: lines (lib/acctest.ps [1.1.6.1], lib/decrypt.ps [1.1.6.1],
+lib/landscap.ps [1.1.6.1], lib/level1.ps [1.1.6.1], lib/pf2afm.ps [1.3.2.1],
+lib/printafm.ps [1.1.6.1]: 2002/04/10 09:22:58 giles)
+
+adds missing Id: lines. (gp_mac.c [1.1.4.2]: 2002/04/10 09:33:26 giles)
+
+Updating licensing information in Windows files. (gp_wgetv.c [1.4.2.2]:
+2002/04/20 22:11:39 ghostgum)
+
+Use sed in preference to tail to avoid conflicts between posix and
+traditional implementations. Patch from Paul Eggert. Closes SourceForge bug
+#521597. (lib/unix-lpr.sh [1.1.6.1]: 2002/04/22 19:54:55 giles)
+
+Add new license header to some files.
+(gp_macio.c [1.2.4.2]: 2002/04/23 01:32:26 giles)
+
+</pre><h2><a name="7.05-Drivers"></a>Drivers</h2><pre>
+
+Fixes problems:
+ - Changes XPutImage to use xdev-&gt;vinfo-&gt;depth rather than
+xdev-&gt;color_info.depth. These are the same in all cases except a visual
+depth of 15, in which the latter is 16. (gdevx.c [1.8.2.2]: 2002/02/20
+21:11:49 raph)
+ - improve pswrite with compatibility to interpreters which don't
+consume ASCII85Decode EOD when reader stops immediately before it. Source
+Forge bug #525044 "pswrite incompatible with some RIPs". Thanks to Paul
+Vojta for spotting this. (gdevps.c [1.19.2.2]: 2002/03/13 17:09:11 igor)
+ - epswrite was incompatible with HP LaserJet 4000 TN. Source Forge
+bug #529202 "Wrong PostScript in pswrite prolog". (gdevpsu.c [1.7.2.2]:
+2002/03/20 20:17:31 igor)
+ - Fixes incorrect margins on IJS devices. Thanks to Dave Suffield
+for the patch. (gdevijs.c [1.1.2.3]: 2002/03/28 20:44:53 raph)
+ - Initializes the green and blue components of cmap and their
+multipliers. A floating point exception was occuring on static gray X
+displays when these were left at 0. (gdevxcmp.c [1.2.6.2]: 2002/04/19
+00:46:41 jack)
+
+Update banner to the new format common to all releases. References file
+LICENSE. Note that the $Id: line is not altered by this change.
+(gdev3852.c [1.3.2.1],
+gdev3b1.c [1.2.6.1], gdev4081.c [1.3.2.1], gdev8510.c [1.3.2.1],
+gdev8bcm.c [1.2.6.1], gdev8bcm.h [1.2.6.1], gdevadmp.c [1.3.2.1],
+gdevbit.c [1.2.6.1], gdevbj10.c [1.4.2.1], gdevbjc.h [1.2.6.1],
+gdevbjcl.c [1.2.6.1], gdevbjcl.h [1.2.6.1], gdevbmp.c [1.4.2.1],
+gdevbmp.h [1.2.6.1], gdevbmpa.c [1.3.6.1], gdevbmpc.c [1.2.6.1],
+gdevccr.c [1.2.6.1], gdevcdj.c [1.5.2.1], gdevcfax.c [1.3.6.1],
+gdevcgm.c [1.2.6.2], gdevcgml.c [1.2.6.1], gdevcgml.h [1.2.6.1],
+gdevcgmx.h [1.2.6.1], gdevcif.c [1.3.2.1], gdevclj.c [1.2.6.1],
+gdevcljc.c [1.4.2.1], gdevcp50.c [1.3.2.1], gdevcslw.c [1.2.6.1],
+gdevdcrd.c [1.2.6.1], gdevdcrd.h [1.2.6.1], gdevdfax.c [1.4.2.1],
+gdevdjtc.c [1.3.2.1], gdevdm24.c [1.3.2.1], gdevdsp.c [1.5.2.2],
+gdevegaa.asm [1.2.6.1], gdevepsc.c [1.3.2.1], gdevepsn.c [1.3.2.1],
+gdevescp.c [1.3.2.1], gdevevga.c [1.2.6.1], gdevfax.c [1.2.6.1],
+gdevfax.h [1.2.6.1], gdevherc.c [1.2.6.1], gdevhl7x.c [1.5.2.1],
+gdevijs.c [1.1.2.2], gdevimgn.c [1.4.2.1], gdevjpeg.c [1.3.2.1],
+gdevl256.c [1.3.6.1], gdevl31s.c [1.2.6.1], gdevlbp8.c [1.3.2.1],
+gdevlj56.c [1.3.2.1], gdevlp8k.c [1.2.6.1], gdevlxm.c [1.2.6.1],
+gdevmac.h [1.1.4.1], gdevmacxf.c [1.1.4.1], gdevmeds.c [1.2.6.1],
+gdevmeds.h [1.2.6.1], gdevmgr.c [1.2.6.1], gdevmgr.h [1.2.6.1],
+gdevmiff.c [1.3.2.1], gdevmswn.c [1.4.2.1], gdevmswn.h [1.2.6.1],
+gdevmsxf.c [1.2.6.1], gdevn533.c [1.3.2.1], gdevo182.c [1.3.2.1],
+gdevokii.c [1.3.2.1], gdevos2p.c [1.4.2.1], gdevp14.h [1.1.2.1],
+gdevp2up.c [1.2.6.1], gdevpbm.c [1.3.6.1], gdevpccm.c [1.2.6.1],
+gdevpccm.h [1.3.6.1], gdevpcfb.c [1.2.6.1], gdevpcfb.h [1.2.6.1],
+gdevpcl.c [1.5.2.1], gdevpcl.h [1.5.2.1], gdevpcx.c [1.2.6.1],
+gdevpe.c [1.2.6.1], gdevphex.c [1.2.6.1], gdevpjet.c [1.3.2.1],
+gdevpm.c [1.4.2.1], gdevpm.h [1.2.6.1], gdevpng.c [1.4.2.1],
+gdevpnga.c [1.4.2.1], gdevps.c [1.19.2.1], gdevpsdf.h [1.9.4.1],
+gdevpsdi.c [1.15.2.1], gdevpsdp.c [1.8.6.1], gdevpsds.c [1.4.6.1],
+gdevpsds.h [1.4.6.1], gdevpsdu.c [1.10.2.1], gdevpsim.c [1.6.2.1],
+gdevpsu.c [1.7.2.1], gdevpsu.h [1.4.2.1], gdevpx.c [1.6.2.1],
+gdevpxat.h [1.3.6.1], gdevpxen.h [1.3.6.1], gdevpxop.h [1.2.6.1],
+gdevpxut.c [1.2.6.1], gdevpxut.h [1.2.6.1], gdevs3ga.c [1.2.6.1],
+gdevsco.c [1.3.6.1], gdevsj48.c [1.2.6.1], gdevsnfb.c [1.3.2.1],
+gdevsppr.c [1.5.2.1], gdevstc.c [1.2.6.1], gdevstc.h [1.2.6.1],
+gdevstc1.c [1.2.6.1], gdevstc2.c [1.2.6.1], gdevstc3.c [1.2.6.1],
+gdevstc4.c [1.2.6.1], gdevsun.c [1.2.6.1], gdevsunr.c [1.4.2.1],
+gdevsvga.c [1.2.6.1], gdevsvga.h [1.2.6.1], gdevtfax.c [1.4.6.1],
+gdevtfax.h [1.4.6.1], gdevtfnx.c [1.5.2.1], gdevtifs.c [1.4.2.1],
+gdevtifs.h [1.3.6.1], gdevtknk.c [1.3.2.1], gdevupd.c [1.5.2.1],
+gdevvglb.c [1.3.6.1], gdevwddb.c [1.3.2.1], gdevwdib.c [1.3.2.1],
+gdevwpr2.c [1.9.2.1], gdevwprn.c [1.3.2.1], gdevx.c [1.8.2.3],
+gdevx.h [1.4.6.1], gdevxalt.c [1.2.6.2], gdevxcmp.c [1.2.6.1],
+gdevxcmp.h [1.2.6.1], gdevxini.c [1.10.4.1], gdevxres.c [1.3.6.1],
+gdevxxf.c [1.5.6.1]: 2002/02/22 19:45:55 ray)
+
+Update banner to the new format common to all releases. References file
+LICENSE. Note that the $Id: line is not altered by this change.
+(png_.h [1.2.6.1],
+x_.h [1.3.2.1]: 2002/02/22 19:46:00 ray)
+
+Add multiple inclusion protection to headers files which were missing it.
+(gdevmacpictop.h [1.1.4.1], gdevmacttf.h [1.1.4.1], png_.h [1.2.6.2]:
+2002/04/10 09:13:11 giles)
+
+adds missing Id: lines. (gdevdsp.c [1.5.2.3], gdevhpij.c [1.3.2.1],
+gdevhpij.h [1.2.4.1], gdevmac.c [1.1.4.2], gdevmac.h [1.1.4.2],
+gdevmacxf.c [1.1.4.2], gdevphex.c [1.2.6.2]: 2002/04/10 09:33:25 giles)
+
+Add new license header to some files.
+(gdevmac.c [1.1.4.3]: 2002/04/23 01:32:26 giles)
+
+</pre><h2><a name="7.05-PDF_writer"></a>PDF writer</h2><pre>
+
+Fixes problems:
+ - Fix : pdfwrite wrongly computed text width for fonts with unusual
+font matrix. Source Forge bug "[ 535401 ] euro glyph misplaced after
+pdfwrite". (gdevpdff.c [1.22.2.2], gdevpdfs.c [1.7.2.2]: 2002/04/11 15:49:45
+igor)
+ - Fix : pdfwrite wrongly computed line width for fonts with
+PaintType 2. (gdevpdfs.c [1.7.2.3]: 2002/04/16 10:11:30 igor)
+
+Update banner to the new format common to all releases. References file
+LICENSE. Note that the $Id: line is not altered by this change.
+(gdevpdf.c [1.38.2.1],
+gdevpdfb.c [1.6.2.1], gdevpdfc.c [1.17.2.1], gdevpdfd.c [1.16.2.1],
+gdevpdfe.c [1.10.2.1], gdevpdff.c [1.22.2.1], gdevpdff.h [1.11.2.1],
+gdevpdfg.c [1.14.2.1], gdevpdfg.h [1.9.6.1], gdevpdfi.c [1.24.2.1],
+gdevpdfj.c [1.7.2.1], gdevpdfm.c [1.14.2.1], gdevpdfo.c [1.9.2.1],
+gdevpdfo.h [1.6.4.1], gdevpdfp.c [1.19.2.1], gdevpdfr.c [1.4.6.1],
+gdevpdfs.c [1.7.2.1], gdevpdft.c [1.36.2.1], gdevpdfu.c [1.16.2.1],
+gdevpdfv.c [1.10.2.1], gdevpdfw.c [1.12.2.1], gdevpdfx.h [1.34.2.1]:
+2002/02/22 19:45:56 ray)
+
+</pre><h2><a name="7.05-PDF_Interpreter"></a>PDF Interpreter</h2><pre>
+
+Update banner to the new format common to all releases. References file
+LICENSE. Note that the $Id: line is not altered by this change.
+(lib/pdf_base.ps [1.14.2.1],
+lib/pdf_draw.ps [1.36.2.1], lib/pdf_font.ps [1.23.2.1],
+lib/pdf_main.ps [1.35.2.1], lib/pdf_ops.ps [1.17.2.2]: 2002/02/22 19:45:55
+ray)
+
+gs_cjk project : CIDWProc sample implementation by Suzuki Toshiya.
+(lib/pdf_font.ps [1.23.2.2]: 2002/04/02 13:53:16 mpsuzuki)
+
+gs_cjk project : replace "min" &amp; "max" by ".min" &amp; ".max". Fix by
+Suzuki Toshiya. (lib/pdf_font.ps [1.23.2.3], lib/pdf_main.ps [1.35.2.2],
+lib/pdf_sec.ps [1.5.2.1]: 2002/04/02 13:57:27 mpsuzuki)
+
+gs_cjk project : Automatic bold &amp; italic for non-CID fonts in PDF. Fix
+by Taiji Yamada. (lib/pdf_font.ps [1.23.2.4]: 2002/04/02 13:58:40 mpsuzuki)
+
+gs-cjk project : update comments on "PDF reference", third edition fixes
+wrong notes about /DW in second edition. Fix by Suzuki Toshiya.
+(lib/pdf_font.ps [1.23.2.5]: 2002/04/03 07:27:49 mpsuzuki)
+
+disable the new auto-bold and auto-slant functions for non-cid fonts,
+pending improved detection of when this is necessary.
+(lib/pdf_font.ps [1.23.2.6]: 2002/04/16 06:11:29 giles)
+
+</pre><h2><a name="7.05-Interpreter"></a>Interpreter</h2><pre>
+
+Fixes problems:
+ - Prevent .locksafe (and .setsafe) from resetting the current
+pagedevice. Fixes SourceForge bug #516379. (lib/gs_init.ps [1.40.2.5]:
+2002/02/14 01:25:59 rayjj)
+ - -dSAFER mode to allow opening a file that references the parent
+directory as long as the PermitFileReading strings include a (*) string
+(allow all reading). Corresponds to rev 1.19 change. (zfile.c [1.11.2.3]:
+2002/04/11 20:05:01 ray)
+
+Update banner to the new format common to all releases. References file
+LICENSE. Note that the $Id: line is not altered by this change.
+(bfont.h [1.3.6.1],
+btoken.h [1.4.6.1], ccfont.h [1.2.6.1], dpmain.c [1.5.2.1],
+dscparse.c [1.7.2.1], dscparse.h [1.6.2.1], dstack.h [1.3.4.1],
+dwdll.c [1.2.2.1], dwdll.h [1.3.2.1], dwimg.c [1.3.2.1], dwimg.h [1.4.2.1],
+dwinst.cpp [1.2.6.1], dwinst.h [1.2.6.1], dwmain.c [1.6.2.2],
+dwmain.h [1.3.2.1], dwmainc.c [1.8.2.2], dwnodll.c [1.1.2.1],
+dwreg.c [1.1.2.1], dwreg.h [1.1.2.1], dwsetup.cpp [1.5.6.1],
+dwsetup.h [1.2.6.1], dwtext.c [1.5.2.1], dwtext.h [1.4.2.1],
+dwuninst.cpp [1.2.6.1], dwuninst.h [1.2.6.1], errors.h [1.4.2.1],
+estack.h [1.2.6.1], examples/waterfal.ps [1.3.2.1], files.h [1.4.2.1],
+gdevdsp.h [1.1.2.1], gdevdsp2.h [1.2.2.1], lib/gs_agl.ps [1.2.6.1],
+lib/gs_btokn.ps [1.5.2.1], lib/gs_ccfnt.ps [1.5.2.1],
+lib/gs_ce_e.ps [1.2.6.1], lib/gs_cff.ps [1.10.2.1],
+lib/gs_cidcm.ps [1.5.2.1], lib/gs_cidfn.ps [1.18.4.1],
+lib/gs_cmap.ps [1.11.2.1], lib/gs_cmdl.ps [1.2.6.1],
+lib/gs_css_e.ps [1.2.6.1], lib/gs_dbt_e.ps [1.2.6.1],
+lib/gs_diskf.ps [1.2.6.1], lib/gs_dpnxt.ps [1.2.6.1],
+lib/gs_dps.ps [1.4.6.1], lib/gs_dps1.ps [1.2.6.1], lib/gs_dps2.ps [1.3.4.1],
+lib/gs_dscp.ps [1.4.2.1], lib/gs_epsf.ps [1.2.6.1],
+lib/gs_fform.ps [1.2.6.1], lib/gs_fonts.ps [1.13.2.2],
+lib/gs_frsd.ps [1.4.6.1], lib/gs_icc.ps [1.2.2.1],
+lib/gs_il1_e.ps [1.2.6.1], lib/gs_il2_e.ps [1.2.6.1],
+lib/gs_init.ps [1.40.2.6], lib/gs_kanji.ps [1.2.6.1],
+lib/gs_ksb_e.ps [1.2.6.1], lib/gs_l2img.ps [1.2.6.1],
+lib/gs_lev2.ps [1.7.2.3], lib/gs_lgo_e.ps [1.3.6.1],
+lib/gs_lgx_e.ps [1.2.6.1], lib/gs_ll3.ps [1.10.2.1],
+lib/gs_mex_e.ps [1.2.6.1], lib/gs_mgl_e.ps [1.3.6.1],
+lib/gs_mro_e.ps [1.2.6.1], lib/gs_pdf_e.ps [1.2.6.1],
+lib/gs_pdfwr.ps [1.11.2.1], lib/gs_pfile.ps [1.2.6.1],
+lib/gs_rdlin.ps [1.2.6.1], lib/gs_res.ps [1.16.2.1],
+lib/gs_setpd.ps [1.8.2.2], lib/gs_statd.ps [1.5.2.1],
+lib/gs_std_e.ps [1.2.6.1], lib/gs_sym_e.ps [1.2.6.1],
+lib/gs_trap.ps [1.3.6.1], lib/gs_ttf.ps [1.9.2.1],
+lib/gs_typ32.ps [1.3.2.1], lib/gs_typ42.ps [1.2.6.1],
+lib/gs_type1.ps [1.5.2.1], lib/gs_wan_e.ps [1.2.6.1],
+lib/gs_wl1_e.ps [1.2.6.1], lib/gs_wl2_e.ps [1.2.6.1],
+lib/gs_wl5_e.ps [1.2.6.1]: 2002/02/22 19:45:54 ray)
+
+Update banner to the new format common to all releases. References file
+LICENSE. Note that the $Id: line is not altered by this change.
+(ghost.h [1.2.6.1],
+gs.c [1.6.2.1], ialloc.c [1.2.6.1], ialloc.h [1.2.6.1], iapi.c [1.1.2.2],
+iapi.h [1.2.2.1], iastate.h [1.2.6.1], iastruct.h [1.2.6.1],
+ibnum.c [1.2.6.1], ibnum.h [1.2.6.1], iccfont.c [1.2.6.2],
+iccinit0.c [1.2.6.1], icfontab.c [1.2.6.1], ichar.h [1.3.6.1],
+ichar1.h [1.3.6.1], icharout.h [1.3.4.1], icid.h [1.2.6.1],
+icie.h [1.3.2.1], icolor.h [1.2.6.1], iconf.c [1.3.2.1], iconf.h [1.1.6.1],
+icontext.c [1.6.6.2], icontext.h [1.2.6.1], icremap.h [1.2.6.1],
+icsmap.h [1.2.6.1], icstate.h [1.4.6.2], iddict.h [1.2.6.1],
+iddstack.h [1.2.6.1], idebug.c [1.4.2.1], idebug.h [1.2.6.1],
+idict.c [1.4.4.1], idict.h [1.2.6.1], idictdef.h [1.2.6.1],
+idisp.c [1.2.2.1], idisp.h [1.1.2.1], idosave.h [1.2.6.1],
+idparam.c [1.3.6.1], idparam.h [1.3.6.1], idsdata.h [1.2.6.1],
+idstack.c [1.2.6.1], idstack.h [1.2.6.1], iesdata.h [1.2.6.1],
+iestack.h [1.2.6.1], ifcid.h [1.2.6.1], ifilter.h [1.3.6.1],
+ifilter2.h [1.2.6.1], ifont.h [1.6.4.1], ifont1.h [1.3.6.1],
+ifont2.h [1.2.6.1], ifont42.h [1.3.6.1], ifrpred.h [1.2.6.1],
+ifunc.h [1.3.6.3], ifwpred.h [1.2.6.1], igc.c [1.5.2.1], igc.h [1.2.6.1],
+igcref.c [1.3.2.1], igcstr.c [1.3.6.1], igcstr.h [1.2.6.1],
+igstate.h [1.3.6.1], iht.h [1.2.6.1], iimage.h [1.2.6.1],
+iimage2.h [1.2.6.1], iinit.c [1.3.4.1], iinit.h [1.2.6.1],
+ilevel.h [1.2.6.1], ilocate.c [1.4.2.1], imain.c [1.19.2.1],
+imain.h [1.3.2.1], imainarg.c [1.13.2.2], imainarg.h [1.3.2.1],
+imemory.h [1.2.6.1], iminst.h [1.5.2.1], iname.c [1.3.6.1],
+iname.h [1.2.6.1], inamedef.h [1.2.6.1], inameidx.h [1.2.6.1],
+inames.h [1.2.6.1], inamestr.h [1.2.6.1], inobtokn.c [1.2.6.1],
+inouparm.c [1.2.6.1], interp.c [1.8.2.1], interp.h [1.2.6.1],
+iosdata.h [1.2.6.1], iostack.h [1.2.6.1], ipacked.h [1.2.6.1],
+iparam.c [1.5.6.1], iparam.h [1.2.6.1], iparray.h [1.2.6.1],
+ipcolor.h [1.2.6.1], ireclaim.c [1.3.2.1], iref.h [1.5.4.1],
+isave.c [1.3.6.1], isave.h [1.2.6.1], iscan.c [1.5.6.1], iscan.h [1.4.6.1],
+iscanbin.c [1.5.6.1], iscanbin.h [1.2.6.1], iscannum.c [1.3.2.1],
+iscannum.h [1.2.6.1], isdata.h [1.2.6.1], isstate.h [1.2.6.1],
+istack.c [1.2.6.1], istack.h [1.2.6.1], istkparm.h [1.2.6.1],
+istream.h [1.2.6.1], istruct.h [1.2.6.1], itoken.h [1.2.6.1],
+iutil.c [1.3.2.1], iutil.h [1.2.6.1], iutil2.c [1.2.6.2],
+iutil2.h [1.2.6.2], ivmem2.h [1.2.6.1], ivmspace.h [1.2.6.1],
+main.h [1.3.2.1], oparc.h [1.2.6.1], opcheck.h [1.2.6.1], opdef.h [1.3.2.1],
+oper.h [1.2.6.1], opextern.h [1.2.6.1]: 2002/02/22 19:45:57 ray)
+
+Update banner to the new format common to all releases. References file
+LICENSE. Note that the $Id: line is not altered by this change.
+(ostack.h [1.2.6.1],
+sbhc.c [1.3.4.1], sbhc.h [1.2.6.1], sbwbs.c [1.2.6.1], sbwbs.h [1.2.6.1],
+sfilter1.c [1.6.4.1], shcgen.c [1.2.6.1], shcgen.h [1.2.6.1],
+smtf.c [1.2.6.1], smtf.h [1.2.6.1], store.h [1.2.6.1], zarith.c [1.4.6.1],
+zarray.c [1.2.6.1], zbfont.c [1.7.4.1], zbseq.c [1.4.6.1],
+zcfont.c [1.2.6.1], zchar.c [1.4.2.1], zchar1.c [1.7.2.1],
+zchar2.c [1.2.6.1], zchar32.c [1.2.6.1], zchar42.c [1.3.4.1],
+zcharout.c [1.4.4.1], zcharx.c [1.3.6.1], zcid.c [1.3.6.1],
+zcie.c [1.5.2.1], zcolor.c [1.4.6.1], zcolor1.c [1.3.6.1],
+zcolor2.c [1.4.2.1], zcontext.c [1.7.2.1], zcontrol.c [1.3.6.2],
+zcrd.c [1.2.6.1], zcsdevn.c [1.5.2.2], zcsindex.c [1.3.6.1],
+zcspixel.c [1.2.6.1], zcssepr.c [1.8.2.1], zdevcal.c [1.3.6.1],
+zdevice.c [1.3.6.2], zdevice2.c [1.4.2.2], zdfilter.c [1.2.2.1],
+zdict.c [1.3.6.1], zdouble.c [1.2.6.1], zdpnext.c [1.3.6.1],
+zdps.c [1.4.6.1], zdps1.c [1.3.4.1], zdscpars.c [1.12.2.1],
+zfarc4.c [1.2.2.1], zfbcp.c [1.3.6.1], zfcid.c [1.11.4.1],
+zfcid0.c [1.7.2.1], zfcid1.c [1.4.4.1], zfcmap.c [1.9.2.1],
+zfdctd.c [1.6.2.1], zfdcte.c [1.5.2.1], zfdecode.c [1.3.6.1],
+zfile.c [1.11.2.2], zfileio.c [1.12.2.1], zfilter.c [1.5.2.1],
+zfilter2.c [1.3.6.1], zfilterx.c [1.2.6.1], zfmd5.c [1.2.6.1],
+zfont.c [1.3.4.1], zfont0.c [1.3.6.1], zfont1.c [1.9.4.1],
+zfont2.c [1.4.2.1], zfont32.c [1.2.6.1], zfont42.c [1.5.6.1],
+zfproc.c [1.9.2.1], zfrsd.c [1.4.6.1], zfunc.c [1.6.6.3],
+zfunc0.c [1.3.6.2], zfunc3.c [1.2.6.2], zfunc4.c [1.7.4.2],
+zfzlib.c [1.3.6.1], zgeneric.c [1.3.6.1], zgstate.c [1.2.6.1],
+zhsb.c [1.2.6.1], zht.c [1.2.6.1], zht1.c [1.2.6.1], zht2.c [1.2.6.1],
+zicc.c [1.2.2.1], zimage.c [1.5.6.1], zimage2.c [1.4.2.1],
+zimage3.c [1.3.6.1], ziodev.c [1.6.2.1], ziodev2.c [1.3.6.1],
+zmath.c [1.3.6.1], zmatrix.c [1.4.6.1], zmedia2.c [1.3.2.1],
+zmisc.c [1.2.6.1], zmisc1.c [1.3.6.1], zmisc2.c [1.3.6.1],
+zmisc3.c [1.2.6.1], zpacked.c [1.2.6.1], zpaint.c [1.2.6.1],
+zpath.c [1.2.6.1], zpath1.c [1.2.6.1], zpcolor.c [1.3.6.1],
+zrelbit.c [1.2.6.1], zrop.c [1.2.6.1], zshade.c [1.4.6.2],
+zstack.c [1.2.6.1], zstring.c [1.2.6.1], zsysvm.c [1.2.6.1],
+ztoken.c [1.6.6.1], ztrans.c [1.13.2.1], ztrap.c [1.2.6.1],
+ztype.c [1.3.6.1], zupath.c [1.2.6.1], zusparam.c [1.3.6.2],
+zvmem.c [1.3.2.2], zvmem2.c [1.3.2.1]: 2002/02/22 19:46:00 ray)
+
+MS-Windows installer now clears the read-only attribute when copying files.
+The installer was failing when the source files were stored unpacked on a
+CD-ROM. (dwinst.cpp [1.2.6.2], dwinst.h [1.2.6.2]: 2002/03/12 20:57:01
+ghostgum)
+
+gs_cjk project : gdevpsfm.c did not know about CODE_VALUE_NOTDEF which was
+introduced by MDRC. Fix by Suzuki Toshiya. Also Fix in HEAD (revision 1.8
+-&gt; 1.9) by L. Peter Deutsch is included. (lib/gs_cmap.ps [1.11.2.2]:
+2002/04/02 13:24:12 mpsuzuki)
+
+gs_cjk project : MDRC bug fix pt.1: use signalerror instead stop Fix by
+Suzuki Toshiya. (lib/gs_cmap.ps [1.11.2.3]: 2002/04/02 13:25:44 mpsuzuki)
+
+gs_cjk project : MDRC bug fix pt.2: shrink map infos by endcidchar too, to
+provide parsing of Adobe-CNS1-4 UCS4 CMap. Fix by Suzuki Toshiya.
+(lib/gs_cmap.ps [1.11.2.4]: 2002/04/02 13:26:37 mpsuzuki)
+
+gs_cjk project : return error when we cannot load even CID=0. Fix by Suzuki
+Toshiya. (zfcid0.c [1.7.2.2]: 2002/04/02 13:28:34 mpsuzuki)
+
+gs_cjk project : cshow bug patch for CIDFont. proc passed to cshow can
+change currentfont internally, in such case, rangecheck error should not be
+returned. Fix by Masatake Yamato. (zchar.c [1.4.2.2]: 2002/04/02 13:30:49
+mpsuzuki)
+
+gs_cjk project : cshow bug patch for composite font. Fix by Masatake Yamato.
+(zcfont.c [1.2.6.2]: 2002/04/02 13:31:38 mpsuzuki)
+
+gs_cjk project : support for vertical writing mode by CIDFontType2 by
+Hideyuki Suzuki. (zchar42.c [1.3.4.2]: 2002/04/02 13:32:14 mpsuzuki)
+
+gs_cjk project : zsetcachedevice2 bug patch by Masatake Yamato, modified by
+Hideo Saito (zchar1.c [1.7.2.2]: 2002/04/02 13:45:02 mpsuzuki)
+
+gs_cjk project : CDevProc patch by Masatake Yamato. (zcharout.c [1.4.4.2]:
+2002/04/02 13:46:13 mpsuzuki)
+
+gs_cjk project : CJK TTF loader: on-the-fly CIDFontType2 convertor,
+including bugfix for cmap format2 parser (2002-01-09 for GS_6_5) by Hideyuki
+Suzuki and Taiji Yamada. (lib/gs_ttf.ps [1.9.2.2]: 2002/04/02 13:55:03
+mpsuzuki)
+
+gs_cjk project : CIDFontmap patch (without CJK TTF support) by Masatake
+Yamato. (lib/gs_cidcm.ps [1.5.2.2], lib/gs_cidfn.ps [1.18.4.2],
+lib/gs_init.ps [1.40.2.7]: 2002/04/02 13:55:47 mpsuzuki)
+
+gs_cjk project : CIDFontmap patch CJK TTF support by Masatake Yamato.
+(lib/gs_cidfn.ps [1.18.4.3]: 2002/04/02 13:56:26 mpsuzuki)
+
+gs_cjk project : replace "min" &amp; "max" by ".min" &amp; ".max". Fix by
+Suzuki Toshiya. (lib/gs_cidfn.ps [1.18.4.4], lib/gs_fonts.ps [1.13.2.3],
+lib/gs_init.ps [1.40.2.8], lib/gs_ll3.ps [1.10.2.2],
+lib/gs_trap.ps [1.3.6.2], lib/gs_typ32.ps [1.3.2.2]: 2002/04/02 13:57:27
+mpsuzuki)
+
+gs-cjk project : apply security fix by rayjj for gs6.53 branch (for original
+fix, see rev. 1.17.2.2). Fix by Suzuki Toshiya. (lib/gs_cidfn.ps [1.18.4.5]:
+2002/04/03 07:31:14 mpsuzuki)
+
+Add multiple inclusion protection to headers files which were missing it.
+(dscparse.h [1.6.2.2], dwimg.h [1.4.2.2], dwinst.h [1.2.6.3],
+dwmain.h [1.3.2.2], dwreg.h [1.1.2.2], dwsetup.h [1.2.6.2],
+dwtext.h [1.4.2.2], dwuninst.h [1.2.6.2]: 2002/04/10 09:13:11 giles)
+
+adds missing Id: lines. (dwnodll.c [1.1.2.2], gdevdsp.h [1.1.2.2],
+gdevdsp2.h [1.2.2.2], idisp.c [1.2.2.2], zicc.c [1.2.2.2]: 2002/04/10
+09:33:25 giles)
+
+Update the version number in the library as well.
+(lib/gs_init.ps [1.40.2.9]: 2002/04/15 06:49:43 giles)
+
+Committing in . Back-ports from the main stream such that OpenVMS is happy
+Modified Files: Tag: GS_7_0X gs/src/devs.mak gs/src/gschar0.c
+gs/src/gserrors.h gs/src/imainarg.c
+----------------------------------------------------------------------
+(imainarg.c [1.13.2.3]: 2002/04/18 09:58:45 joukj)
+
+Updating licensing information in Windows files. (dwreg.c [1.1.2.2],
+dwsetup.cpp [1.5.6.2], dwuninst.cpp [1.2.6.2]: 2002/04/20 22:11:39 ghostgum)
+
+</pre><h2><a name="7.05-Streams"></a>Streams</h2><pre>
+
+Update banner to the new format common to all releases. References file
+LICENSE. Note that the $Id: line is not altered by this change.
+(sa85d.c [1.3.4.1],
+sa85d.h [1.3.4.1], sa85x.h [1.3.6.1], sarc4.c [1.5.2.1], sarc4.h [1.2.2.1],
+sbcp.c [1.3.6.1], sbcp.h [1.2.6.1], sbtx.h [1.2.6.1], scanchar.h [1.2.6.1],
+scantab.c [1.2.6.1], scf.h [1.2.6.1], scfd.c [1.3.4.1], scfe.c [1.2.6.1],
+scfetab.c [1.2.6.1], scfparam.c [1.2.6.1], scfx.h [1.2.6.1],
+scommon.h [1.3.4.1], sdcparam.c [1.3.2.1], sdcparam.h [1.2.6.1],
+sdct.h [1.4.2.1], sdctc.c [1.2.6.1], sdctd.c [1.2.6.1], sdcte.c [1.4.2.1],
+sddparam.c [1.2.6.1], sdeparam.c [1.4.2.1], seexec.c [1.4.2.1],
+sfilter.h [1.6.6.1], sfilter2.c [1.3.6.1], sfxboth.c [1.2.6.1],
+sfxfd.c [1.6.4.1], sfxstdio.c [1.4.6.1], shc.c [1.2.6.1], shc.h [1.2.6.1],
+siinterp.c [1.2.6.1], siinterp.h [1.2.6.1], siscale.c [1.4.6.1],
+siscale.h [1.2.6.1], sisparam.h [1.2.6.1], sjpeg.h [1.2.6.1],
+sjpegc.c [1.4.2.1], sjpegd.c [1.3.2.1], sjpege.c [1.3.2.1],
+slzwc.c [1.2.6.1], slzwce.c [1.2.6.1], slzwd.c [1.3.4.1], slzwx.h [1.2.6.1],
+smd5.c [1.3.6.1], smd5.h [1.2.6.1], spdiff.c [1.3.6.1], spdiffx.h [1.2.6.1],
+spngp.c [1.2.6.1], spngpx.h [1.2.6.1], spprint.c [1.4.2.1],
+spprint.h [1.3.2.1], spsdf.c [1.5.2.1], spsdf.h [1.2.6.1],
+srdline.h [1.2.6.1], srld.c [1.2.6.1], srle.c [1.2.6.1], srlx.h [1.3.4.1],
+sstring.c [1.2.6.1], sstring.h [1.3.4.1], stat_.h [1.6.2.1],
+std.h [1.4.2.1], stdio_.h [1.4.2.1], stdpre.h [1.4.2.1],
+stream.c [1.15.2.1], stream.h [1.8.2.1], strimpl.h [1.3.4.1],
+string_.h [1.2.6.1], szlibc.c [1.3.2.1], szlibd.c [1.3.4.1],
+szlibe.c [1.2.6.1], szlibx.h [1.2.6.1], szlibxx.h [1.2.6.1]: 2002/02/22
+19:46:00 ray)
+
+Adds support for compilation against a standard shared libjpeg. It is
+believed that non-baseline compliant DCTEncoded data, permitted by early
+versions of postscript, is now extremely rare and the prohibition against
+SHARE_JPEG=1 may reasonably be removed. The autoconf build will prefer a
+local copy of the jpeg source, in which case the D_MAX_BLOCKS_IN_MCU patch
+will still be applied. If no such local copy is found, it will try to find a
+shared library on the system. For all unix builds, if $(JSRCDIR)/jmemsys.h
+cannot be found, we define DONT_HAVE_JMEMSYS_H and include our own versions
+of the libjpeg memory manager prototypes. The default allocator in the
+shared library is overridden by the ghostscript one at link-time. While this
+may be implementation-dependent, it appears to function as desired on at
+least GNU/Linux and Solaris. Also changes the autoconf build to prefer local
+zlib and libpng source, and cleans up some variable names. Patch by Raph
+Levien from 7.20. (sjpegc.c [1.4.2.2]: 2002/04/10 01:44:27 giles)
+
+</pre><h2><a name="7.05-Library"></a>Library</h2><pre>
+
+Fixes problems:
+ - The formula for dy6 in Type2 hflex1 instruction was wrong. Source
+Forge bug #530136 "hflex1 arguments misinterpreted". Thanks to Felix Pahl
+(fpahl) for spotting this. (gstype2.c [1.10.2.2]: 2002/03/20 20:22:15 igor)
+ - Fix : Type2 interpreter state was wrongly backed up for sbw
+fallback. Source Forge bug "[ 541877 ] /invalidfont on Kozuka Mincho". Patch
+by Igor Melichev, backported from the development tree.
+(gstype2.c [1.10.2.3]: 2002/04/18 21:10:48 giles)
+
+Update banner to the new format common to all releases. References file
+LICENSE. Note that the $Id: line is not altered by this change.
+(ctype_.h [1.2.6.1],
+dirent_.h [1.2.6.1], dos_.h [1.2.6.1], errno_.h [1.2.6.1],
+fcntl_.h [1.3.6.1], gconf.c [1.2.6.1], gconf.h [1.2.6.1],
+gdebug.h [1.3.2.1], gdevabuf.c [1.3.6.1], gdevalph.c [1.2.6.1],
+gdevbbox.c [1.4.2.1], gdevbbox.h [1.2.6.1], gdevcmap.c [1.2.6.1],
+gdevcmap.h [1.2.6.1], gdevdbit.c [1.2.6.1], gdevddrw.c [1.2.6.1],
+gdevdflt.c [1.3.6.1], gdevdgbr.c [1.2.6.1], gdevdrop.c [1.3.6.1],
+gdevemap.c [1.2.6.1], gdevhit.c [1.2.6.1], gdevm1.c [1.2.6.1],
+gdevm16.c [1.2.6.1], gdevm2.c [1.2.6.1], gdevm24.c [1.2.6.1],
+gdevm32.c [1.2.6.1], gdevm4.c [1.2.6.1], gdevm8.c [1.2.6.1],
+gdevmem.c [1.2.6.1], gdevmem.h [1.3.6.1], gdevmpla.c [1.2.6.1],
+gdevmpla.h [1.2.6.1], gdevmr1.c [1.2.6.1], gdevmr2n.c [1.2.6.1],
+gdevmr8n.c [1.2.6.1], gdevmrop.h [1.3.6.1], gdevmrun.c [1.2.6.1],
+gdevmrun.h [1.2.6.1], gdevnfwd.c [1.3.6.1], gdevp14.c [1.4.2.1],
+gdevpipe.c [1.4.4.1], gdevplnx.c [1.2.6.1], gdevplnx.h [1.2.6.1],
+gdevppla.c [1.2.6.1], gdevppla.h [1.2.6.1], gdevprn.c [1.5.6.2],
+gdevprn.h [1.6.6.1], gdevprna.c [1.2.6.1], gdevprna.h [1.2.6.1],
+gdevpsf.h [1.10.2.1], gdevpsf1.c [1.9.2.1], gdevpsf2.c [1.15.2.1],
+gdevpsfm.c [1.5.2.1], gdevpsft.c [1.8.2.1], gdevpsfu.c [1.7.2.1],
+gdevpsfx.c [1.9.2.1], gdevrops.c [1.3.6.1], gdevtrac.c [1.2.6.1],
+gdevvec.c [1.12.2.2], gdevvec.h [1.7.2.1], gp.h [1.8.2.2],
+gp_dosfe.c [1.2.6.2], gp_dosfs.c [1.2.6.2], gp_getnv.c [1.2.6.1],
+gp_msdos.c [1.2.6.1], gp_nsync.c [1.2.6.1], gp_psync.c [1.2.6.1],
+gp_strdl.c [1.2.6.1], gp_unifn.c [1.2.6.2], gp_unifs.c [1.6.2.1],
+gpcheck.h [1.2.6.1], gpgetenv.h [1.2.6.1], gpmisc.c [1.9.4.1],
+gpmisc.h [1.2.6.1], gpsync.h [1.2.6.1], gsalloc.c [1.11.2.1],
+gsalloc.h [1.2.6.1], gsalpha.c [1.2.6.1], gsalpha.h [1.2.6.1],
+gsalphac.c [1.2.6.1], gsalphac.h [1.2.6.1], gsargs.c [1.4.2.1],
+gsargs.h [1.4.2.1], gsbitcom.c [1.1.4.1], gsbitmap.h [1.2.6.1],
+gsbitops.c [1.3.4.1], gsbitops.h [1.2.6.1], gsbittab.c [1.2.6.1],
+gsbittab.h [1.2.6.1], gsccode.h [1.4.6.1], gsccolor.h [1.2.6.1],
+gscdef.c [1.15.2.1], gscdefs.h [1.2.6.1], gscdevn.c [1.6.2.1],
+gscdevn.h [1.3.6.1], gschar.c [1.3.6.1], gschar.h [1.3.6.1],
+gschar0.c [1.3.4.1], gscie.c [1.4.2.1], gscie.h [1.3.2.1],
+gsciemap.c [1.6.2.1], gscindex.h [1.2.6.1], gsclipsr.c [1.2.6.1],
+gsclipsr.h [1.2.6.1], gscolor.c [1.5.2.1], gscolor.h [1.3.6.1],
+gscolor1.c [1.4.2.1], gscolor1.h [1.2.6.1], gscolor2.c [1.6.6.1],
+gscolor2.h [1.3.6.1], gscolor3.c [1.4.6.1], gscolor3.h [1.2.6.1],
+gscompt.h [1.2.6.1], gscoord.c [1.5.6.1], gscoord.h [1.2.6.1],
+gscparam.c [1.7.2.1], gscpixel.c [1.3.6.1], gscpixel.h [1.2.6.1],
+gscpm.h [1.2.6.1], gscrd.c [1.2.6.1], gscrd.h [1.2.6.1], gscrdp.c [1.2.6.1],
+gscrdp.h [1.2.6.1], gscrypt1.c [1.2.6.1], gscrypt1.h [1.2.6.1],
+gscscie.c [1.4.2.1], gscsel.h [1.2.6.1], gscsepnm.h [1.2.6.1],
+gscsepr.c [1.12.2.2], gscsepr.h [1.4.6.1], gscspace.c [1.4.6.1],
+gscspace.h [1.8.2.1], gscssub.c [1.3.2.1], gscssub.h [1.2.6.1],
+gsdcolor.h [1.3.6.1], gsdevice.c [1.11.2.1], gsdevice.h [1.3.6.1],
+gsdevmem.c [1.2.6.1], gsdfilt.c [1.3.2.1], gsdfilt.h [1.2.2.1],
+gsdparam.c [1.4.6.2], gsdpnext.h [1.2.6.1], gsdps.c [1.2.6.1],
+gsdps.h [1.2.6.1], gsdps1.c [1.2.6.1], gsdsrc.c [1.2.6.1],
+gsdsrc.h [1.3.6.1], gserror.h [1.2.6.1], gserrors.h [1.2.6.1],
+gsexit.h [1.4.2.1], gsfcid.c [1.5.4.1], gsfcmap.c [1.14.2.1],
+gsfcmap.h [1.4.6.1], gsfemu.c [1.2.6.1], gsflip.c [1.2.6.1],
+gsflip.h [1.2.6.1], gsfname.c [1.2.6.1], gsfname.h [1.2.6.1],
+gsfont.c [1.4.4.1], gsfont.h [1.2.6.1], gsfont0.c [1.2.6.1],
+gsfunc.c [1.4.6.1], gsfunc.h [1.4.6.1], gsfunc0.c [1.5.4.1],
+gsfunc0.h [1.2.6.1], gsfunc3.c [1.4.6.1], gsfunc3.h [1.2.6.1],
+gsfunc4.c [1.7.2.1], gsfunc4.h [1.2.6.1], gsgc.h [1.3.2.1],
+gshsb.c [1.2.6.1], gshsb.h [1.2.6.1], gsht.c [1.2.6.1], gsht.h [1.2.6.1],
+gsht1.c [1.3.2.1], gsht1.h [1.2.6.1], gshtscr.c [1.6.2.1],
+gshtx.c [1.2.6.1], gshtx.h [1.2.6.1], gsicc.c [1.5.2.1], gsicc.h [1.3.2.1],
+gsimage.c [1.4.2.1], gsimage.h [1.2.6.1], gsimpath.c [1.2.6.1],
+gsinit.c [1.3.2.1]: 2002/02/22 19:45:55 ray)
+
+Update banner to the new format common to all releases. References file
+LICENSE. Note that the $Id: line is not altered by this change.
+(gsio.h [1.5.2.1],
+gsiodev.c [1.5.2.1], gsiodevs.c [1.2.6.1], gsipar3x.h [1.3.6.1],
+gsiparam.h [1.4.6.1], gsiparm2.h [1.2.6.1], gsiparm3.h [1.4.6.1],
+gsiparm4.h [1.2.6.1], gsistate.c [1.4.6.1], gsjconf.h [1.2.6.1],
+gslib.c [1.5.2.1], gslib.h [1.2.6.1], gsline.c [1.2.6.1],
+gsline.h [1.2.6.1], gslparam.h [1.2.6.1], gsmalloc.c [1.3.6.1],
+gsmalloc.h [1.2.6.1], gsmatrix.c [1.2.6.1], gsmatrix.h [1.2.6.1],
+gsmdebug.h [1.3.2.1], gsmemlok.c [1.3.6.1], gsmemlok.h [1.2.6.1],
+gsmemory.c [1.4.2.1], gsmemory.h [1.3.2.1], gsmemraw.h [1.2.6.1],
+gsmemret.c [1.2.6.1], gsmemret.h [1.2.6.1], gsmisc.c [1.12.2.1],
+gsnogc.c [1.7.2.1], gsnogc.h [1.2.6.1], gsnorop.c [1.2.6.1],
+gsnotify.c [1.2.6.1], gsnotify.h [1.2.6.1], gspaint.c [1.2.6.1],
+gspaint.h [1.2.6.1], gsparam.c [1.4.6.1], gsparam.h [1.8.4.1],
+gsparam2.c [1.2.6.1], gsparams.c [1.2.6.1], gsparams.h [1.2.6.1],
+gsparamx.c [1.4.2.1], gsparamx.h [1.3.6.1], gspath.c [1.2.6.1],
+gspath.h [1.2.6.1], gspath1.c [1.3.4.1], gspath2.h [1.2.6.1],
+gspcolor.c [1.4.6.1], gspcolor.h [1.2.6.1], gspenum.h [1.2.6.1],
+gsptype1.c [1.3.2.1], gsptype1.h [1.2.6.1], gsptype2.c [1.5.2.1],
+gsptype2.h [1.4.2.1], gsrect.h [1.2.6.1], gsrefct.h [1.2.6.1],
+gsrop.c [1.2.6.1], gsrop.h [1.2.6.1], gsropc.c [1.2.6.1],
+gsropc.h [1.2.6.1], gsropt.h [1.4.2.1], gsroptab.c [1.2.6.1],
+gsshade.c [1.4.2.1], gsshade.h [1.3.6.1], gsstate.c [1.11.2.1],
+gsstate.h [1.2.6.1], gsstruct.h [1.8.2.1], gsstype.h [1.2.6.1],
+gstext.c [1.6.2.1], gstext.h [1.3.6.1], gstparam.h [1.7.6.1],
+gstrans.c [1.13.2.1], gstrans.h [1.6.6.1], gstrap.c [1.3.6.1],
+gstrap.h [1.3.6.1], gstype1.c [1.6.4.1], gstype1.h [1.2.6.1],
+gstype2.c [1.10.2.1], gstype42.c [1.12.2.1], gstypes.h [1.3.2.1],
+gsuid.h [1.2.6.1], gsutil.c [1.4.6.2], gsutil.h [1.3.6.2],
+gsxfont.h [1.2.6.1], gx.h [1.2.6.1], gxacpath.c [1.3.6.1],
+gxalloc.h [1.6.2.1], gxalpha.h [1.2.6.1], gxarith.h [1.2.6.1],
+gxband.h [1.2.6.1], gxbcache.c [1.2.6.1], gxbcache.h [1.2.6.1],
+gxbitfmt.h [1.2.6.1], gxbitmap.h [1.2.6.1], gxbitops.h [1.2.6.1],
+gxblend.c [1.2.2.1], gxblend.h [1.1.2.1], gxccache.c [1.5.2.1],
+gxccman.c [1.2.6.1], gxcdevn.h [1.2.6.1], gxchar.c [1.5.2.2],
+gxchar.h [1.2.6.1], gxchrout.c [1.2.6.1], gxchrout.h [1.2.6.1],
+gxcht.c [1.3.2.1], gxcid.h [1.3.6.1], gxcie.h [1.3.2.1],
+gxcindex.h [1.2.6.1], gxclbits.c [1.4.4.1], gxcldev.h [1.4.4.1],
+gxclfile.c [1.3.2.1], gxclimag.c [1.3.2.1], gxclio.h [1.2.6.1],
+gxclip.c [1.4.2.1], gxclip.h [1.2.6.1], gxclip2.c [1.3.6.1],
+gxclip2.h [1.2.6.1], gxclipm.c [1.3.6.1], gxclipm.h [1.2.6.1],
+gxclipsr.h [1.2.6.1], gxclist.c [1.3.6.1], gxclist.h [1.2.6.1],
+gxcllzw.c [1.2.6.1], gxclmem.c [1.2.6.1], gxclmem.h [1.2.6.1],
+gxclpage.c [1.2.6.1], gxclpage.h [1.2.6.1], gxclpath.c [1.9.2.1],
+gxclpath.h [1.6.6.1], gxclrast.c [1.9.2.1], gxclread.c [1.3.4.1],
+gxclrect.c [1.2.6.1], gxclutil.c [1.5.2.1], gxclzlib.c [1.2.6.1],
+gxcmap.c [1.3.6.1], gxcmap.h [1.2.6.1], gxcolor2.h [1.4.6.1],
+gxcomp.h [1.2.6.1], gxcoord.h [1.2.6.1], gxcpath.c [1.3.6.1],
+gxcpath.h [1.2.6.1], gxcspace.h [1.4.6.1], gxctable.c [1.3.6.1],
+gxctable.h [1.2.6.1], gxcvalue.h [1.2.6.1], gxdcconv.c [1.3.6.1],
+gxdcconv.h [1.2.6.1], gxdcolor.c [1.3.6.1], gxdcolor.h [1.3.6.1],
+gxdda.h [1.2.6.1], gxdevbuf.h [1.2.6.1], gxdevcli.h [1.5.2.2],
+gxdevice.h [1.4.6.2], gxdevmem.h [1.2.6.1], gxdevrop.h [1.2.6.1],
+gxdht.h [1.4.6.1], gxdhtres.h [1.2.6.1], gxdither.c [1.2.6.1],
+gxdither.h [1.2.6.1], gxfarith.h [1.3.6.1], gxfcache.h [1.2.6.1],
+gxfcid.h [1.6.6.1], gxfcmap.h [1.8.2.1], gxfill.c [1.8.2.1],
+gxfixed.h [1.3.4.1], gxfmap.h [1.3.6.1], gxfont.h [1.3.4.1],
+gxfont0.h [1.3.6.1], gxfont1.h [1.5.4.1], gxfont42.h [1.4.6.1],
+gxfrac.h [1.3.4.1], gxftype.h [1.2.6.1], gxfunc.h [1.3.6.1],
+gxgetbit.h [1.2.6.1], gxhint1.c [1.2.6.1], gxhint2.c [1.2.6.1],
+gxhint3.c [1.3.2.1], gxht.c [1.2.6.1], gxht.h [1.2.6.1],
+gxhtbit.c [1.3.6.1], gxhttile.h [1.2.6.1], gxhttype.h [1.2.6.1],
+gxi12bit.c [1.2.6.1], gxiclass.h [1.2.6.1], gxicolor.c [1.3.2.1],
+gxidata.c [1.4.6.1], gxifast.c [1.4.2.1], gximag3x.c [1.7.6.1],
+gximag3x.h [1.3.6.1], gximage.c [1.2.6.1], gximage.h [1.2.6.1],
+gximage1.c [1.5.6.1], gximage2.c [1.2.6.1], gximage3.c [1.6.6.1],
+gximage3.h [1.4.6.1], gximage4.c [1.3.6.1], gximono.c [1.2.6.1],
+gxino12b.c [1.2.6.1], gxiodev.h [1.2.6.1], gxiparam.h [1.2.6.1],
+gxipixel.c [1.2.6.1], gxiscale.c [1.2.6.2], gxistate.h [1.6.6.1],
+gxline.h [1.2.6.1], gxlum.h [1.2.6.1], gxmatrix.h [1.4.6.1],
+gxmclip.c [1.2.6.1], gxmclip.h [1.2.6.1], gxobj.h [1.2.6.1],
+gxop1.h [1.2.6.1], gxp1fill.c [1.2.6.1], gxp1impl.h [1.2.6.1],
+gxpageq.c [1.2.6.1], gxpageq.h [1.2.6.1], gxpaint.c [1.2.6.1],
+gxpaint.h [1.2.6.1], gxpath.c [1.2.6.1], gxpath.h [1.2.6.1],
+gxpath2.c [1.2.6.1], gxpcache.h [1.2.6.1], gxpcmap.c [1.3.6.1],
+gxpcolor.h [1.2.6.1], gxpcopy.c [1.3.6.1], gxpdash.c [1.2.6.1],
+gxpflat.c [1.2.6.1], gxropc.h [1.2.6.1], gxrplane.h [1.2.6.1],
+gxsample.c [1.2.6.1], gxsample.h [1.2.6.1], gxshade.c [1.6.2.1],
+gxshade.h [1.4.2.1], gxshade1.c [1.9.2.1], gxshade4.c [1.6.2.1],
+gxshade4.h [1.2.6.1], gxshade6.c [1.3.6.1], gxstate.h [1.2.6.1],
+gxstdio.h [1.2.6.1], gxstroke.c [1.2.6.1], gxsync.c [1.2.6.1],
+gxsync.h [1.2.6.1], gxtext.h [1.7.2.1], gxtmap.h [1.2.6.1],
+gxttf.h [1.2.6.1], gxtype1.c [1.8.4.1], gxtype1.h [1.5.4.1],
+gxxfont.h [1.2.6.1], gzacpath.h [1.2.6.1], gzcpath.h [1.2.6.1],
+gzht.h [1.4.4.1], gzline.h [1.2.6.1], gzpath.h [1.3.6.1],
+gzstate.h [1.5.2.1], jerror_.h [1.2.6.1], malloc_.h [1.2.6.1],
+math_.h [1.2.6.1], memory_.h [1.2.6.1], pipe_.h [1.2.6.1],
+time_.h [1.3.2.1], unistd_.h [1.4.2.1], vmsmath.h [1.2.6.1],
+windows_.h [1.2.6.1]: 2002/02/22 19:45:58 ray)
+
+gs_cjk project : gdevpsfm.c did not know about CODE_VALUE_NOTDEF which was
+introduced by MDRC. Fix by Suzuki Toshiya. Also Fix in HEAD (revision 1.8
+-&gt; 1.9) by L. Peter Deutsch is included. (gdevpsfm.c [1.5.2.2]:
+2002/04/02 13:24:12 mpsuzuki)
+
+gs_cjk project : handle "cidchar" map correctly. Fix by Suzuki Toshiya.
+(gsfcmap.c [1.14.2.2]: 2002/04/02 13:27:37 mpsuzuki)
+
+gs_cjk project : bugfix for nested FMapType4/5 OCF. Fix by Suzuki Toshiya.
+(gschar0.c [1.3.4.2]: 2002/04/02 13:29:35 mpsuzuki)
+
+gs_cjk project : bugfix for invalid metrics calculation for CIDFontType2.
+Fix by Masatake Yamato. (gstype42.c [1.12.2.2]: 2002/04/02 13:33:06
+mpsuzuki)
+
+gs_cjk project : cshow bug fix for CIDFontType2. Fix by Hideyuki Suzuki.
+(gxchar.c [1.5.2.3]: 2002/04/02 13:33:44 mpsuzuki)
+
+gs_cjk project: glyph cache bug patch for vertical writing mode. Fallback
+against inconsistency in double checking of glyph cache. The inconsistency
+causes misplacement of CJK glyph in vertical writing mode. Fix by Hideo
+Saito. (gxchar.c [1.5.2.4], gxchar.h [1.2.6.2]: 2002/04/02 13:35:00
+mpsuzuki)
+
+gs_cjk project : glyphshow in vertical writing mode bug patch. Originally,
+FontBBox_as_Metrics2 was set when charcode string is decoded into CIDs.
+"glyphshow" bypasses such decoding procedure, thus FontBBox_as_Metrics2 is
+not set. Fix by Masatake Yamato. (gstext.c [1.6.2.2]: 2002/04/02 13:42:10
+mpsuzuki)
+
+gs-cjk project : move definition "cc" to the scope that it is used. Fix by
+Suzuki Toshiya. (gxchar.c [1.5.2.5]: 2002/04/02 13:52:29 mpsuzuki)
+
+Add multiple inclusion protection to headers files which were missing it.
+(gsdfilt.h [1.2.2.2], jerror_.h [1.2.6.2]: 2002/04/10 09:13:11 giles)
+
+mark this as a GNU version and bump the release number (gscdef.c [1.15.2.2]:
+2002/04/15 05:47:56 giles)
+
+disable the new auto-bold and auto-slant functions for non-cid fonts,
+pending improved detection of when this is necessary. (gscdef.c [1.15.2.3]:
+2002/04/16 06:11:29 giles)
+
+revert bad licensing change accidentally included in the last commit.
+(gscdef.c [1.15.2.4]: 2002/04/16 06:12:42 giles)
+
+Committing in . Back-ports from the main stream such that OpenVMS is happy
+Modified Files: Tag: GS_7_0X gs/src/devs.mak gs/src/gschar0.c
+gs/src/gserrors.h gs/src/imainarg.c
+----------------------------------------------------------------------
+(gschar0.c [1.3.4.3], gserrors.h [1.2.6.2]: 2002/04/18 09:58:45 joukj)
+
+</pre><h2><a name="7.05-Other"></a>Other</h2><pre>
+
+Fixes problems:
+ - Fixes the gdevx.o command line in the case when AC_PATH_X sets
+x_includes to the empty string. Fixes SF #530429. (Makefile.in [1.1.4.4],
+configure.ac [1.4.4.4]: 2002/03/28 19:35:58 raph)
+ - Uses a default 'src' setting for PSRCDIR in the autoconf build
+with a shared libpng, as we do with zlib, preventing compiler confusion from
+empty -I lines. Partial fix for SF bug #514898. (configure.ac [1.4.4.5]:
+2002/03/28 20:37:33 giles)
+ - improves X11 path settings in the autoconf build. We use
+AC_PATH_XTRA instead of the previous "is it null" hack with AC_PATH_X. The
+new macro also defines some additional libraries that may need to be
+included. We currently don't use this information. (Makefile.in [1.1.4.5],
+configure.ac [1.4.4.6]: 2002/03/28 20:41:25 giles)
+
+Update banner to the new format common to all releases. References file
+LICENSE. Note that the $Id: line is not altered by this change.
+(Makefile.in [1.1.4.3],
+gp_mswin.h [1.4.2.1], gsdll.h [1.3.2.1], gsdllos2.h [1.2.6.1],
+gsdllwin.h [1.3.2.1]: 2002/02/22 19:45:55 ray)
+
+Update banner to the new format common to all releases. References file
+LICENSE. Note that the $Id: line is not altered by this change.
+(gsjmorec.h [1.3.4.1],
+gspmdrv.h [1.2.6.1], iutilasm.asm [1.2.6.1]: 2002/02/22 19:45:58 ray)
+
+Replace Windows icons with new versions that include 48x48 pixel and 32-bit
+versions for Windows XP. Change the 16x16 pixel icons to use the full 'g'
+instead of just the head. Use a restricted icon gswin16.ico for WinZip SE
+which can't handle the new icon. (gswin.icx [1.1.2.1]: 2002/03/30 01:33:03
+ghostgum)
+
+Replace Windows icons with new versions that include 48x48 pixel and 32-bit
+versions for Windows XP. Change the 16x16 pixel icons to use the full 'g'
+instead of just the head. Use a restricted icon gswin16.ico for WinZip SE
+which can't handle the new icon. (gswin16.icx [1.1.2.1]: 2002/03/30 01:34:00
+ghostgum)
+
+Propagate autoconf build updates from HEAD: Allow shared jpeg since
+non-baseline dctencoded data is now vanishingly rare. Prefer local source of
+libjpeg, libpng and zlib to shared versions if it's available. Add the
+standard gcc cflags only if we're using gcc and it don't error on them. Also
+look for current-version-named third-party libraries to save a step.
+(Makefile.in [1.1.4.6], configure.ac [1.4.4.7]: 2002/04/09 21:18:27 giles)
+
+Add multiple inclusion protection to headers files which were missing it.
+(gsdll.h [1.3.2.2]: 2002/04/10 09:13:11 giles)
+
+adds missing Id: lines. (gp_mac.h [1.1.4.1], macsysstat.h [1.1.4.1],
+macsystypes.h [1.1.4.1], vms_x_fix.h [1.1.2.1]: 2002/04/10 09:33:26 giles)
+
+Adds the LICENSE file, containing a copy of the GNU GPL.
+(LICENSE [1.1.2.1]: 2002/04/15 05:38:45 giles)
+
+Upgrade icclib to (proposed) 2.01 release. Patch has been sent to Graeme
+Gill for consideration. (icclib/icc.c [1.6.2.1], icclib/icc.h [1.4.2.1],
+icclib/icc9809.h [1.2.2.1]: 2002/04/18 18:20:16 raph)
+
+Removes trailing comma in enum. (icclib/icc.h [1.4.2.2]: 2002/04/18 20:29:14
+raph)
+
+Update libpng version numbers to the latest 1.2.2. (configure.ac [1.4.4.8]:
+2002/04/19 06:32:22 giles)
+
+Add the 'stp' driver from the gimp-print project, and compile it in by
+default from the autoconf build if libgimprint is found.
+(Makefile.in [1.1.4.7], configure.ac [1.4.4.9]: 2002/04/19 22:23:09 giles)
+
+Update to the latest cvs version of ijs. Source files now properly include
+the MIT license header. (ijs/Makefile.in [1.1.2.2], ijs/README [1.1.2.2],
+ijs/ijs.c [1.1.2.2], ijs/ijs.h [1.1.2.2], ijs/ijs_client.c [1.1.2.2],
+ijs/ijs_client.h [1.1.2.2], ijs/ijs_client_example.c [1.1.2.2],
+ijs/ijs_exec_unix.c [1.1.2.2], ijs/ijs_exec_win.c [1.1.2.2],
+ijs/ijs_server.c [1.1.2.2], ijs/ijs_server.h [1.1.2.2],
+ijs/ijs_server_example.c [1.1.2.2], ijs/ijs_spec.sgml [1.1.2.2],
+ijs/unistd_.h [1.1.2.2]: 2002/04/22 17:53:36 giles)
+
+update icclib to the 2.02 release (icclib/Licence.txt [1.1.2.1],
+icclib/Readme.txt [1.1.2.1], icclib/icc.c [1.6.2.2], icclib/icc.h [1.4.2.3]:
+2002/04/22 18:17:47 giles)
+
+Update the ijs source to the latest 0.34 release.
+(ijs/Makefile.in [1.1.2.3], ijs/configure.in [1.1.2.2],
+ijs/ijs_spec.pdf [1.1.2.2], ijs/ijs_spec.sgml [1.1.2.3]: 2002/04/23 01:23:33
+giles)
+
+Add new license header to some files.
+(gp_mac.h [1.1.4.2], macsysstat.h [1.1.4.2], macsystypes.h [1.1.4.2]:
+2002/04/23 01:32:26 giles)
+
+<hr>
+
+<h1><a name="Version7.04"></a>Version 7.04 (2002-01-30)</h1>
+
+<p>
+This is a security update of Ghostscript. A number of maintenance
+fixes and new features have been added.
+
+<p> Major changes include:
+
+<ul>
+<li>A rather serious security hole, where PostScript code could cause
+arbitrary commands to be executed, has been patched.
+
+<li>There is also a new -DPARANOIDSAFER option, which locks down
+reading of arbitrary files.
+
+<li>This release integrates the IJS driver, which makes it much easier
+to add and upgrade printer drivers without needing to recompile
+Ghostscript.
+
+<li>There is a configure script for automatically configuring the
+makefile on Unix platforms. Those who enjoy the fun of hand-editing
+the makefile are still welcome to do so.
+
+<li>The usual bug fixes.
+
+</ul>
+
+<p>
+The following SourceForge bug numbers are currently open: (todo)
+
+<h3><a name="7.04_Incompatible_changes"></a>Incompatible changes</h3>
+
+<p>
+No incompatible changes have been recorded for this version. Authors
+of drivers with potential security implications are encouraged to review
+the security changes, however.
+
+<pre>
+
+
+
+<h2><a name="7.04-Documentation"></a>Documentation</h2><pre>
+
+Fixes problems:
+ - Improve security in a (mostly) backward compatible fashion adding
+more flexible file access paths (PermitFile...) as user paramters and adding
+the facility to return to NOSAFER mode after running jobs (files/procedures)
+in SAFER mode. Also adds a -dPARANOIDSAFER command line option that only
+allows reading files from %stdin, paths specified on LIBPATH, FONTPATH and
+/GenericResourceDir or /FontResourceDir. Improve security for device related
+access to the file system and to pipes by allowing the dangerous parameters
+to be locked (for example, OutputFile). The locking is performed after
+command line parameters are established. This should address SF bug #474582
+and eliminate the need for the RedHat PARANOIDSAFER patch.
+(doc/Language.htm [1.34.2.1], doc/Use.htm [1.33.2.1]: 2002/01/25 06:33:08
+rayjj)
+
+Removes the admonishment to update PVERSION and JVERSION from the Makefile
+documentation. The build dependencies were removed earlier to reduce user
+confusion; they're currently vestigial in expectation of future build
+requirements. This is the second half of the fix for sf bug #457838.
+(doc/Make.htm [1.36.2.1]: 2001/10/24 22:29:29 giles)
+
+Adds a link to the v7.xx history files. (doc/News.htm [1.90.2.2]: 2001/10/24
+22:32:18 giles)
+
+Adds basic autoconf support to the build system. (doc/Make.htm [1.36.2.2],
+doc/Release.htm [1.40.2.1]: 2002/01/24 01:30:56 giles)
+
+Adds a new documentation section on display devices along with a basic
+description of the x11 devices. (doc/Devices.htm [1.34.2.1]: 2002/01/30
+07:36:09 giles)
+
+Minor change from 'search' to 'filenameforall' in discussion about the
+wildcard characters in PermitFile... strings. (doc/Language.htm [1.34.2.2]:
+2002/01/31 17:36:56 rayjj)
+
+Version number upgrade and minor documentation patch in preparation for 7.04
+release. (doc/API.htm [1.11.2.1], doc/Bug-form.htm [1.23.2.1],
+doc/Bug-info.htm [1.20.2.1], doc/C-style.htm [1.21.2.1],
+doc/Changes.htm [1.28.2.2], doc/Commprod.htm [1.15.2.1],
+doc/Copying.htm [1.13.2.1], doc/Current.htm [1.13.2.1],
+doc/DLL.htm [1.15.2.1], doc/Develop.htm [1.47.2.1],
+doc/Devices.htm [1.34.2.2], doc/Drivers.htm [1.21.2.1],
+doc/Fonts.htm [1.22.2.1], doc/Helpers.htm [1.17.2.1],
+doc/History1.htm [1.13.2.1], doc/History2.htm [1.13.2.1],
+doc/History3.htm [1.13.2.1], doc/History4.htm [1.13.2.1],
+doc/History5.htm [1.15.2.1], doc/History6.htm [1.30.2.1],
+doc/History7.htm [1.5.2.2], doc/Htmstyle.htm [1.18.2.1],
+doc/Install.htm [1.26.2.1], doc/Issues.htm [1.15.2.1],
+doc/Language.htm [1.34.2.3], doc/Lib.htm [1.14.2.1],
+doc/Maintain.htm [1.23.2.1], doc/Make.htm [1.36.2.3],
+doc/New-user.htm [1.30.2.1], doc/News.htm [1.90.2.3], doc/PUBLIC [1.5.2.1],
+doc/Projects.htm [1.33.2.1], doc/Ps-style.htm [1.13.2.1],
+doc/Ps2epsi.htm [1.15.2.1], doc/Ps2pdf.htm [1.32.2.1],
+doc/Psfiles.htm [1.22.2.1], doc/README [1.12.2.1],
+doc/Readme.htm [1.31.2.1], doc/Release.htm [1.40.2.2],
+doc/Source.htm [1.13.2.1], doc/Tester.htm [1.14.2.1],
+doc/Unix-lpr.htm [1.13.2.1], doc/Use.htm [1.33.2.2],
+doc/Xfonts.htm [1.13.2.1], doc/gs-vms.hlp [1.12.2.1],
+man/dvipdf.1 [1.10.2.1], man/font2c.1 [1.10.2.1], man/gs.1 [1.10.2.1],
+man/gslp.1 [1.10.2.1], man/gsnd.1 [1.10.2.1], man/pdf2dsc.1 [1.10.2.1],
+man/pdf2ps.1 [1.12.2.1], man/pdfopt.1 [1.10.2.1], man/pf2afm.1 [1.10.2.1],
+man/pfbtopfa.1 [1.11.2.1], man/printafm.1 [1.10.2.1],
+man/ps2ascii.1 [1.10.2.1], man/ps2epsi.1 [1.10.2.1],
+man/ps2pdf.1 [1.14.2.1], man/ps2pdfwr.1 [1.13.2.1], man/ps2ps.1 [1.17.2.1],
+man/wftopfa.1 [1.10.2.1]: 2002/02/01 03:25:43 raph)
+
+Adds IJS driver to Ghostscript. Includes complete IJS version 0.33
+distribution. Also includes autoconf patch by Ralph Giles.
+(doc/Develop.htm [1.47.2.2], doc/Devices.htm [1.34.2.3]: 2002/02/01 03:30:14
+raph)
+
+</pre><h2><a name="7.04-Procedures"></a>Procedures</h2><pre>
+
+Fixes problems:
+ - the icclib makefile comments were out of date; the build rule
+referred to gs_stdio_h, which no longer exists; the build rule for gsicc.o
+referred to icc_h, which was not defined at that point. patch originally by
+lpd, propagated from the development branch. (gs.mak [1.5.2.1],
+icclib.mak [1.3.2.1], lib.mak [1.53.2.1]: 2001/10/26 00:15:30 giles)
+ - Fix for #474544. Corrects inability to convert valid DeviceN tint
+transform functions into type 4 functions. Valid operator names were not
+being recognized unless the tint transform function had been bound. One of
+two fixes required for this problem. Customer #710. (int.mak [1.50.2.1]:
+2002/01/17 02:59:35 dancoby)
+ - Fix for #474544. This is the second of two fixes required for this
+problem. This fix creates a type 0 function which implements a "color cube"
+for those tint transform functions which cannot be converted into a type 4
+function. Customer #710. Note: There is one more revision planned for this
+effort. This revision will make the buildcolorcube operator into a more
+general buildsampledfunction. This will allow its use in other situations.
+(int.mak [1.50.2.2]: 2002/01/17 06:57:55 dancoby)
+
+Version number upgrade and minor documentation patch in preparation for 7.04
+release. (all-arch.mak [1.9.2.1], bcwin32.mak [1.12.2.1],
+dvx-gcc.mak [1.12.2.1], libpng.mak [1.10.2.1], macos-mcp.mak [1.3.2.1],
+msvc32.mak [1.20.2.1], msvclib.mak [1.16.2.1], openvms.mak [1.16.2.1],
+os2.mak [1.19.2.1], ugcclib.mak [1.13.2.1], unix-gcc.mak [1.23.2.1],
+unixansi.mak [1.16.2.1], version.mak [1.36.2.1], watc.mak [1.16.2.1],
+watclib.mak [1.13.2.1], watcw32.mak [1.13.2.1]: 2002/02/01 03:25:45 raph)
+
+Adds IJS driver to Ghostscript. Includes complete IJS version 0.33
+distribution. Also includes autoconf patch by Ralph Giles.
+(bcwin32.mak [1.12.2.2], devs.mak [1.47.2.1], dvx-gcc.mak [1.12.2.2],
+gs.mak [1.5.2.2], ijs.mak [1.2.2.1], macos-mcp.mak [1.3.2.2],
+msvc32.mak [1.20.2.2], openvms.mak [1.16.2.2], os2.mak [1.19.2.2],
+ugcclib.mak [1.13.2.2], unix-gcc.mak [1.23.2.2], unixansi.mak [1.16.2.2],
+watclib.mak [1.13.2.2], watcw32.mak [1.13.2.2], wctail.mak [1.3.2.1],
+winlib.mak [1.12.2.1]: 2002/02/01 03:30:13 raph)
+
+</pre><h2><a name="7.04-Utilities"></a>Utilities</h2><pre>
+
+Fixes problems:
+ - Incorporate patch from Tim Waugh of RedHat to allow ps2pdfwr to
+correctly process files with spaces in their names. Peter's earlier fix
+missed a few enclosing "'s for output files. Fixes Sourceforge bug #505338.
+(lib/ps2pdfwr [1.6.2.1]: 2002/01/22 21:34:04 jackiem)
+ - Improve security in a (mostly) backward compatible fashion adding
+more flexible file access paths (PermitFile...) as user paramters and adding
+the facility to return to NOSAFER mode after running jobs (files/procedures)
+in SAFER mode. Also adds a -dPARANOIDSAFER command line option that only
+allows reading files from %stdin, paths specified on LIBPATH, FONTPATH and
+/GenericResourceDir or /FontResourceDir. Improve security for device related
+access to the file system and to pipes by allowing the dangerous parameters
+to be locked (for example, OutputFile). The locking is performed after
+command line parameters are established. This should address SF bug #474582
+and eliminate the need for the RedHat PARANOIDSAFER patch.
+(gp_macio.c [1.2.4.1], gp_ntfs.c [1.5.2.1], gp_os2.c [1.10.2.1],
+gp_vms.c [1.7.2.1]: 2002/01/25 06:33:09 rayjj)
+
+Replaces references of 'FontManagerLib' with 'FontManager' to match the
+Universal Headers stub shipped with Metrowerks CW 6.3.
+(macgenmcpxml.sh [1.1.4.1]: 2001/11/02 02:31:21 giles)
+
+Disables the 'unused arguments' warning with the Metrowerks Codewarrior 6.3
+Compiler. We have many of these by design and it's responsible for a large
+number of warnings on that platform. (macgenmcpxml.sh [1.1.4.2]: 2001/11/02
+02:33:21 giles)
+
+</pre><h2><a name="7.04-Drivers"></a>Drivers</h2><pre>
+
+Fixes problems:
+ - Improve security in a (mostly) backward compatible fashion adding
+more flexible file access paths (PermitFile...) as user paramters and adding
+the facility to return to NOSAFER mode after running jobs (files/procedures)
+in SAFER mode. Also adds a -dPARANOIDSAFER command line option that only
+allows reading files from %stdin, paths specified on LIBPATH, FONTPATH and
+/GenericResourceDir or /FontResourceDir. Improve security for device related
+access to the file system and to pipes by allowing the dangerous parameters
+to be locked (for example, OutputFile). The locking is performed after
+command line parameters are established. This should address SF bug #474582
+and eliminate the need for the RedHat PARANOIDSAFER patch.
+(gdevcgm.c [1.2.6.1], gdevmac.c [1.1.4.1]: 2002/01/25 06:33:09 rayjj)
+ - Removes broken x11alpha driver, and installs an alias for x11
+under that name, with default parameters changed to support antialiasing.
+Fixes SourceForge bug #505692. (gdevx.c [1.8.2.1], gdevxalt.c [1.2.6.1]:
+2002/01/30 20:09:26 raph)
+
+Don't allocate memory or call callbacks when display device does not have a
+callback function. (gdevdsp.c [1.5.2.1]: 2001/12/18 07:09:17 ghostgum)
+
+Adds IJS driver to Ghostscript. Includes complete IJS version 0.33
+distribution. Also includes autoconf patch by Ralph Giles.
+(gdevijs.c [1.1.2.1]: 2002/02/01 03:30:13 raph)
+
+</pre><h2><a name="7.04-PDF_Interpreter"></a>PDF Interpreter</h2><pre>
+
+Fixes problems:
+ - T* applied the leading horizontally when using a font in vertical
+writing mode, but the PDF Reference says the leading is always applied
+vertically. (lib/pdf_ops.ps [1.17.2.1]: 2001/12/22 07:34:23 masata-y)
+
+</pre><h2><a name="7.04-Interpreter"></a>Interpreter</h2><pre>
+
+Fixes problems:
+ - Some gsapi functions were not passing the user_errors argument to
+the corresponding gs_main_run_string_* functions, and instead, these
+functions were passing 0. (iapi.c [1.1.2.1]: 2002/01/03 20:20:38 jackiem)
+ - ifont.h requires gsmatix.h and gxfont.h for clean compilation. Not
+having them was a warning on gcc, but an error on Borland CBuilder 5.5.
+Thanks to Rod Webster for the fix. Closes Sourceforge bug #474246.
+(iccfont.c [1.2.6.1]: 2002/01/09 21:52:04 giles)
+ - ReleaseDC was missed in Windows client applications. SourceForge
+bug #499903. (dwmain.c [1.6.2.1], dwmainc.c [1.8.2.1]: 2002/01/16 21:07:16
+igorm)
+ - Fix for #474544. Corrects inability to convert valid DeviceN tint
+transform functions into type 4 functions. Valid operator names were not
+being recognized unless the tint transform function had been bound. One of
+two fixes required for this problem. Customer #710. (ifunc.h [1.3.6.1],
+zfunc.c [1.6.6.1], zfunc0.c [1.3.6.1], zfunc3.c [1.2.6.1],
+zfunc4.c [1.7.4.1], zshade.c [1.4.6.1]: 2002/01/17 02:59:35 dancoby)
+ - Fix for #474544. This is the second of two fixes required for this
+problem. This fix creates a type 0 function which implements a "color cube"
+for those tint transform functions which cannot be converted into a type 4
+function. Customer #710. Note: There is one more revision planned for this
+effort. This revision will make the buildcolorcube operator into a more
+general buildsampledfunction. This will allow its use in other situations.
+(ifunc.h [1.3.6.2], lib/gs_lev2.ps [1.7.2.1], zccube.c [1.1.2.1],
+zcsdevn.c [1.5.2.1], zfunc.c [1.6.6.2]: 2002/01/17 06:57:55 dancoby)
+ - Improve security in a (mostly) backward compatible fashion adding
+more flexible file access paths (PermitFile...) as user paramters and adding
+the facility to return to NOSAFER mode after running jobs (files/procedures)
+in SAFER mode. Also adds a -dPARANOIDSAFER command line option that only
+allows reading files from %stdin, paths specified on LIBPATH, FONTPATH and
+/GenericResourceDir or /FontResourceDir. Improve security for device related
+access to the file system and to pipes by allowing the dangerous parameters
+to be locked (for example, OutputFile). The locking is performed after
+command line parameters are established. This should address SF bug #474582
+and eliminate the need for the RedHat PARANOIDSAFER patch.
+(icontext.c [1.6.6.1], icstate.h [1.4.6.1], imainarg.c [1.13.2.1],
+iutil2.c [1.2.6.1], iutil2.h [1.2.6.1], lib/gs_fonts.ps [1.13.2.1],
+lib/gs_init.ps [1.40.2.2], lib/gs_lev2.ps [1.7.2.2],
+lib/gs_setpd.ps [1.8.2.1], zcontrol.c [1.3.6.1], zdevice.c [1.3.6.1],
+zdevice2.c [1.4.2.1], zfile.c [1.11.2.1], zusparam.c [1.3.6.1],
+zvmem.c [1.3.2.1]: 2002/01/25 06:33:09 rayjj)
+ - .locksafe is not supposed to change the PermitFileWriting and
+PermitFileControl paths (was setting them to empty arrays).
+(lib/gs_init.ps [1.40.2.3]: 2002/01/31 17:39:07 rayjj)
+
+Change the unstopped error handler to print the operand stack in the same
+order as the normal error handler, with the top of the stack at the right.
+Fixes Sourceforge bug #496440. (lib/gs_init.ps [1.40.2.1]: 2002/01/10
+02:41:01 ghostgum)
+
+Version number upgrade and minor documentation patch in preparation for 7.04
+release. (lib/gs_init.ps [1.40.2.4]: 2002/02/01 03:25:45 raph)
+
+</pre><h2><a name="7.04-Library"></a>Library</h2><pre>
+
+Fixes problems:
+ - Change show_enum pointer enumeration to properly enumerate
+underlying gs_text_enum structure. (gxchar.c [1.5.2.1]: 2001/10/26 16:35:25
+raph)
+ - Image Type 4 images processed with the Interpolate turned on (as
+from -dDOINTERPOLATE) left an uninitialized variable that could cause
+extensive slowdown. Fix for SourceForge bug #491308 for Artifex customer
+671. (gxiscale.c [1.2.6.1]: 2001/12/14 19:16:04 rayjj)
+ - Improve security in a (mostly) backward compatible fashion adding
+more flexible file access paths (PermitFile...) as user paramters and adding
+the facility to return to NOSAFER mode after running jobs (files/procedures)
+in SAFER mode. Also adds a -dPARANOIDSAFER command line option that only
+allows reading files from %stdin, paths specified on LIBPATH, FONTPATH and
+/GenericResourceDir or /FontResourceDir. Improve security for device related
+access to the file system and to pipes by allowing the dangerous parameters
+to be locked (for example, OutputFile). The locking is performed after
+command line parameters are established. This should address SF bug #474582
+and eliminate the need for the RedHat PARANOIDSAFER patch.
+(gdevprn.c [1.5.6.1], gdevvec.c [1.12.2.1], gp.h [1.8.2.1],
+gp_dosfe.c [1.2.6.1], gp_dosfs.c [1.2.6.1], gp_unifn.c [1.2.6.1],
+gsdparam.c [1.4.6.1], gsutil.c [1.4.6.1], gsutil.h [1.3.6.1],
+gxdevcli.h [1.5.2.1], gxdevice.h [1.4.6.1]: 2002/01/25 06:33:09 rayjj)
+
+</pre><h2><a name="7.04-Other"></a>Other</h2><pre>
+
+Adds basic autoconf support to the build system. (.cvsignore [1.2.2.1],
+Makefile.in [1.1.4.1], autogen.sh [1.3.4.1], configure.ac [1.4.4.1]:
+2002/01/24 01:30:56 giles)
+
+Adds IJS driver to Ghostscript. Includes complete IJS version 0.33
+distribution. Also includes autoconf patch by Ralph Giles.
+(Makefile.in [1.1.4.2], configure.ac [1.4.4.2]: 2002/02/01 03:30:13 raph)
+
+<hr>
+
+<h1><a name="Version7.03"></a>Version 7.03 (2001-10-20)</h1>
+
+<p>
+This is a fully tested, stable release of Ghostscript. It fixes quite a
+few issues with 7.02.
+
+<p> Major changes include:
+
+<ul>
+<li>Integration of icclib 2.0.
+
+<li>There was at least one embarassing pdfwrite bug, now fixed.
+
+<li>Significant shading speedups, especially for worst-case files
+such as Coons01.ps.
+
+<li>The stdio logic is a lot more robust. 7.02 had some problems,
+especially with trying to set stdin to non-blocking.
+
+<li>The usual bug fixes. In particular, regression testing against
+7.00 shows only one serious regression (035-01.ps), and numerous
+progressions.
+
+</ul>
+
+<p>
+The following SourceForge bug numbers are currently open: 215256,
+219798, 222727, 226477, 405342, 406689, 406979, 407342, 414947,
+414985, 415016, 415142, 415170, 416131, 416830, 418241, 421057,
+422532, 423838, 427193, 427314, 427347, 428891, 428973, 432040,
+432657, 434277, 434707, 436099, 436897, 437285, 438679, 438957,
+443745, 444791, 446344, 446672, 448199, 450663, 451456, 452155,
+453969, 457838, 458261, 458500, 458769, 458775, 458780, 462221,
+465720, 465921, 465936, 468386, 468762, 469518, 472681, 473305.
+
+<h3><a name="7.03_Incompatible_changes"></a>Incompatible changes</h3>
+
+<p>
+No incompatible changes have been recorded for this version.
+
+<pre>
+
+
+
+<h2><a name="7.03-Documentation"></a>Documentation</h2><pre>
+
+Fixes problems:
+ - Add new Windows and Unix platform files to developer
+documentation. (doc/Develop.htm [1.46]: 2001/09/23 08:54:03 ghostgum)
+ - Adds a -dNOCCFONTS switch to disable use of compiled-in fonts.
+(doc/Use.htm [1.32]: 2001/10/01 05:25:55 lpd)
+ - Added potential workaround for DCTEncode filter problem where the
+image has less rows than requested. (doc/Issues.htm [1.13]: 2001/10/03
+17:24:23 jackiem)
+ - Fixes reference counting for PDF 1.4 device filter stack.
+Temporary patch to not free PDF 1.4 marking device for images (it was being
+freed prematurely). (doc/Issues.htm [1.14]: 2001/10/17 17:28:10 raph)
+ - Syncs with hpijs version 0.97, and fixes a documentation bug.
+(doc/Devices.htm [1.33]: 2001/10/19 04:20:08 raph)
+ - Documentation and version number change in preparation for 7.03
+release. (doc/API.htm [1.11], doc/Bug-form.htm [1.23],
+doc/Bug-info.htm [1.20], doc/C-style.htm [1.21], doc/Commprod.htm [1.15],
+doc/Copying.htm [1.13], doc/Current.htm [1.13], doc/DLL.htm [1.15],
+doc/Develop.htm [1.47], doc/Devices.htm [1.34], doc/Drivers.htm [1.21],
+doc/Fonts.htm [1.22], doc/Helpers.htm [1.17], doc/History1.htm [1.13],
+doc/History2.htm [1.13], doc/History3.htm [1.13], doc/History4.htm [1.13],
+doc/History5.htm [1.15], doc/History6.htm [1.30], doc/History7.htm [1.4],
+doc/Htmstyle.htm [1.18], doc/Install.htm [1.26], doc/Issues.htm [1.15],
+doc/Language.htm [1.34], doc/Lib.htm [1.14], doc/Maintain.htm [1.23],
+doc/Make.htm [1.36], doc/New-user.htm [1.30], doc/News.htm [1.89],
+doc/Projects.htm [1.33], doc/Ps-style.htm [1.13], doc/Ps2epsi.htm [1.15],
+doc/Ps2pdf.htm [1.32], doc/Psfiles.htm [1.22], doc/README [1.12],
+doc/Readme.htm [1.31], doc/Release.htm [1.40], doc/Source.htm [1.13],
+doc/Tester.htm [1.14], doc/Unix-lpr.htm [1.13], doc/Use.htm [1.33],
+doc/Xfonts.htm [1.13], doc/gs-vms.hlp [1.12], man/dvipdf.1 [1.10],
+man/font2c.1 [1.10], man/gs.1 [1.10], man/gslp.1 [1.10], man/gsnd.1 [1.10],
+man/pdf2dsc.1 [1.10], man/pdf2ps.1 [1.12], man/pdfopt.1 [1.10],
+man/pf2afm.1 [1.10], man/pfbtopfa.1 [1.11], man/printafm.1 [1.10],
+man/ps2ascii.1 [1.10], man/ps2epsi.1 [1.10], man/ps2pdf.1 [1.14],
+man/ps2pdfwr.1 [1.13], man/ps2ps.1 [1.17], man/wftopfa.1 [1.10]: 2001/10/20
+08:44:30 raph)
+
+</pre><h2><a name="7.03-Procedures"></a>Procedures</h2><pre>
+
+Fixes problems:
+ - cvs2hist no longer worked in Python 2.1 and later: the regex and
+regsub modules were superseded by re, and append() no longer accepted
+multiple arguments to create a tuple. The fixes are backward compatible for
+all versions of Python from 1.5 on. (toolbin/cvs2hist.py [1.7]: 2001/09/23
+04:45:10 lpd)
+ - The previous update to make cvs2hist use Python's re module rather
+than the obsolete regex and regsub modules didn't change the code to use
+match objects when necessary. Finishes fixing SourceForge #462777.
+(toolbin/cvs2hist.py [1.8]: 2001/09/23 20:43:16 lpd)
+ - Some print statements for debugging were accidentally left in the
+code. (toolbin/cvs2hist.py [1.9]: 2001/09/23 21:05:12 lpd)
+ - Committing in . Modified Files: gs/src/gp_stdia.c
+gs/src/openvms.mmk gs/src/ziodevs.c patches for OpenVMS (openvms.mmk [1.10]:
+2001/09/24 10:47:06 joukj)
+ - Fixes for stdin as a result of using callouts. Use unbuffered
+read, not non-blocking read. Change gp_stdin_read to use file pointer not
+handle. Remove gp_stdin_init since we don't need to set non-blocking. Change
+gp_stdin.c to use fread/fwrite to be more portable. Flush redirected stdout
+correctly. Added casts to fix compiler warnings in dxmain.c. Corrected
+header dependencies. Fixes SourceForge bug #467787. (dvx-tail.mak [1.5],
+macos-mcp.mak [1.3], openvms.mak [1.16], openvms.mmk [1.11], os2.mak [1.19],
+unix-aux.mak [1.5], watc.mak [1.16], winlib.mak [1.12]: 2001/10/12 21:37:08
+ghostgum)
+ - Committing in . Modified Files: gs/src/openvms.mmk OpenVMS needs
+target : sources ^ this space is realy needed. Otherwise MMS/MMK chokes on
+it!!!! (openvms.mmk [1.12]: 2001/10/15 10:24:21 joukj)
+ - When building gsx and gsc, use the GS makefile macro as the shared
+library name to link against, not a hard coded gs. (unix-dll.mak [1.6]:
+2001/10/17 10:11:23 ghostgum)
+ - Removes cheq.ps from list of example files installed.
+(unixinst.mak [1.20]: 2001/10/17 19:48:36 raph)
+ - uses concrete color space of alternate color space, rather than
+simply alternate color space, to determine target color space for
+concretizing /All colors. Fixes regression of non-sepqxd2distiller.pdf, for
+which those color spaces differed. (gscsepr.c [1.13]: 2001/10/21 06:02:21
+ raph)
+ - Updates icclib to version 2.0, and integrates icclib changes. In
+particular, icclib now accesses Ghostscript streams through the clean
+icmFile object interface, rather than previous hack. Removes remnants of
+previous hack, including gs_stdio.h header file and sread() and swrite()
+functions in stream.c. (lib.mak [1.53]: 2001/10/19 21:52:50 raph)
+ - Documentation and version number change in preparation for 7.03
+release. (version.mak [1.36]: 2001/10/20 08:44:31 raph)
+ - Updates default MSVC_VERSION to 6. (msvc32.mak [1.20]: 2001/10/20
+08:45:39 raph)
+
+</pre><h2><a name="7.03-Utilities"></a>Utilities</h2><pre>
+
+Fixes problems:
+ - Committing in . Modified Files: gs/src/gp_stdia.c
+gs/src/openvms.mmk gs/src/ziodevs.c patches for OpenVMS (gp_stdia.c [1.2],
+ziodevs.c [1.4]: 2001/09/24 10:47:06 joukj)
+ - add missing file descriptor variable to stdin function of
+dxmainc.c. Fixes SourceForge bug #465214. (dxmainc.c [1.3]: 2001/09/28
+22:04:03 ghostgum)
+ - If gtk+ GUI can't be initialised, disable display device. This
+allows gsx to be used without an X display. Partial fix for SourceForge bug
+#450933. (dxmain.c [1.5]: 2001/10/12 11:10:37 ghostgum)
+ - Fixes for stdin as a result of using callouts. Use unbuffered
+read, not non-blocking read. Change gp_stdin_read to use file pointer not
+handle. Remove gp_stdin_init since we don't need to set non-blocking. Change
+gp_stdin.c to use fread/fwrite to be more portable. Flush redirected stdout
+correctly. Added casts to fix compiler warnings in dxmain.c. Corrected
+header dependencies. Fixes SourceForge bug #467787. (dxmain.c [1.6],
+dxmainc.c [1.4], gp_stdia.c [1.3], gp_stdin.c [1.2]: 2001/10/12 21:37:08
+ghostgum)
+ - Proposed log message: Fix: Callout implementation of %stdin,
+%stdout and %stderr now correctly allocates the streams in system memory.
+This avoids a crash during garbage collection seen during frequent
+open/close of stderr.. Fixes SourceForge bugs #427316, #442477.
+(ziodevsc.c [1.3]: 2001/10/15 21:44:42 ghostgum)
+ - When using STDIO_IMPLEMENTATION=, call gp_stdin_read with a file
+pointer, not a file handle. (ziodevs.c [1.5]: 2001/10/17 21:12:44 ghostgum)
+ - Use unbuffered read within gtk+ handler instead of using
+non-blocking read. While waiting for stdin, allow gtk main loop to block to
+avoid wasting CPU. (dxmain.c [1.7]: 2001/10/20 08:22:05 ghostgum)
+
+</pre><h2><a name="7.03-Drivers"></a>Drivers</h2><pre>
+
+Fixes problems:
+ - If "distiller" image compression options were changed in the
+middle of a file, the parameter list holding them might not be set back to
+read mode when using them to compress an image, causing an error. Fixes
+SourceForge #464938. (gdevpsdi.c [1.15]: 2001/09/25 22:00:44 lpd)
+ - bmp16 and png16 devices now create 4 bit/pixel bitmaps instead of
+8. bmp256 and png256 devices now use dci values which match the color
+mapping functions. (gdevbmp.c [1.4], gdevpng.c [1.4]: 2001/09/28 22:06:21
+ghostgum)
+ - Don't omit zero length deltas when stroking so that linecap will
+be produced by resulting PS or EPS file. SourceForge bug #466162.
+(gdevps.c [1.19]: 2001/09/28 23:18:46 rayjj)
+ - Fixes for stdin as a result of using callouts. Use unbuffered
+read, not non-blocking read. Change gp_stdin_read to use file pointer not
+handle. Remove gp_stdin_init since we don't need to set non-blocking. Change
+gp_stdin.c to use fread/fwrite to be more portable. Flush redirected stdout
+correctly. Added casts to fix compiler warnings in dxmain.c. Corrected
+header dependencies. Fixes SourceForge bug #467787. (gdevsppr.c [1.5]:
+2001/10/12 21:37:08 ghostgum)
+ - When the display device fails to allocate memory for the bitmap,
+set the memory device width and height to zero to prevent drawing on it.
+Always call the display_size callback to prevent a lockup in the caller, and
+if there is no memory tell the caller that the width and height are zero.
+Add some casts to remove compiler warnings. Fixes SourceForge bug #430879.
+(gdevdsp.c [1.5]: 2001/10/12 21:41:25 ghostgum)
+ - Syncs with hpijs version 0.97, and fixes a documentation bug.
+(gdevhpij.c [1.3]: 2001/10/19 04:20:07 raph)
+
+</pre><h2><a name="7.03-PDF_writer"></a>PDF writer</h2><pre>
+
+Fixes problems:
+ - pdfwrite didn't set the orig_matrix of standard fonts, sometimes
+causing re-encoded characters to be written with a width of 0. Bug
+introduced by fix for #439474, gdevpdff.c [1.19]. Fixes SourceForge #463400.
+(gdevpdff.c [1.22]: 2001/10/05 05:40:41 lpd)
+ - pdfwrite allowed AutoRotatePages to override DSC comments rather
+than vice versa, and it interpreted "Portrait" in a DSC orientation comment
+as "don't rotate" rather than as "rotate if necessary so that width &lt;
+height." Fixes SourceForge #467259, although the result is not what the
+submitter wanted. (gdevpdf.c [1.38], gdevpdfp.c [1.19], gdevpdfx.h [1.34]:
+2001/10/07 05:33:11 lpd)
+
+</pre><h2><a name="7.03-PDF_Interpreter"></a>PDF Interpreter</h2><pre>
+
+Fixes problems:
+ - Pop the /None key in the SMask processing of the 'gs' in a PDF 1.4
+document. Fixes SourceForge bug #459647 for Artifex customer Accusoft.
+(lib/pdf_draw.ps [1.35]: 2001/10/05 18:25:16 rayjj)
+ - Enhances -dDEBUG for encrypted PDF files to print strings after
+decryption. (lib/pdf_sec.ps [1.5]: 2001/10/09 20:17:23 lpd)
+ - If LastPage was greater than the number of pages in the document,
+a rangecheck was generated. Instead, limit LastPage (silently) to the number
+of pages in the document. If FirstPage is past end of document, issue a
+warning. Also, if no pages are processed due to FirstPage &gt; LastPage,
+give a clear error message. SourceForge bug #470025.
+(lib/pdf_main.ps [1.35]: 2001/10/12 07:07:54 rayjj)
+ - Changing the hack in PDF font processing, which chooses character
+width with encodings where the same character appears more than once. New
+code takes width for character code which appears in Differences. Source
+Forge bugs #444366, #468389. (lib/pdf_font.ps [1.22]: 2001/10/14 01:28:05
+igorm)
+ - Fix for #471414. Thanks to Leon Bottou for his excellent analysis
+and fix for this problem. Ghostscript was incorrectly handling a PDF shading
+dictionary in which the /Function entry contained an array of function
+dictionary references. An additonal oforce was required in the array
+processing loop. (lib/pdf_draw.ps [1.36]: 2001/10/16 22:20:31 dancoby)
+ - Applied two patches reported in
+http://www.ghostscript.com/pipermail/gs-code-review/2001-October/001255.html
+by Hideyuki Suzuki / hideyuki at sat dot t dot u-tokyo dot ac dot jp.
+pdf_font.ps: automatic substitution &amp; transformation of CID-keyed fonts.
+pdf_ops.ps: make spacings vertical when WMode is 1. (lib/pdf_font.ps [1.23],
+lib/pdf_ops.ps [1.17]: 2001/10/19 16:42:47 masata-y)
+
+</pre><h2><a name="7.03-Interpreter"></a>Interpreter</h2><pre>
+
+Fixes problems:
+ - Adds a -dNOCCFONTS switch to disable use of compiled-in fonts.
+(lib/gs_ccfnt.ps [1.5], lib/gs_init.ps [1.39]: 2001/10/01 05:25:55 lpd)
+ - After removing a compiled font with undefinefont, loading the font
+or asking for its resourcestatus left extra information on the stack. Fixes
+SourceForge #458818. (lib/gs_res.ps [1.16]: 2001/10/01 05:56:58 lpd)
+ - Clean up PostScript files in examples directory to prevent
+spurious bug reports caused when running more than a sigle file or running
+chess.ps without cheq.ps in the current directory. Thanks to Russell Lang
+for cleanup on DSC comment and structure. (examples/alphabet.ps [1.2],
+examples/chess.ps [1.2], examples/colorcir.ps [1.2],
+examples/doretree.ps [1.2], examples/escher.ps [1.2],
+examples/golfer.ps [1.2], examples/grayalph.ps [1.2],
+examples/snowflak.ps [1.2], examples/tiger.ps [1.2],
+examples/vasarely.ps [1.2], examples/waterfal.ps [1.3]: 2001/10/01 21:28:25
+rayjj)
+ - Remove this file which was referenced from chess.ps -- now it is
+included in chess.ps to prevent errors when cheq.ps could not be located.
+(examples/cheq.ps [1.2]: 2001/10/01 21:33:05 rayjj)
+ - When using a substitute for an unknown font, add an alias in
+FontDirectory under the original requested font name.
+(lib/gs_fonts.ps [1.12]: 2001/10/01 21:35:53 rayjj)
+ - Undo previous 1.12 update. The PS file that exhibited the problem
+was bad as was my testing against Adobe PS behaviour. Substituted fonts are
+neither aliased, nor entered in the FontDirectory by Adobe PostScript. Fixes
+regression bug with Genoa PS LL3 FTS test 313-01.ps.
+(lib/gs_fonts.ps [1.13]: 2001/10/09 18:01:17 rayjj)
+ - Fixing inaccurate coding in Type 2 font processing : when
+GlobalSubrs absents, old code damages useful information in
+charstring_font_refs_s::GlobalSubrs, possibly causing indeterministic error.
+(zfont2.c [1.4]: 2001/10/11 17:55:32 igorm)
+ - Fix : Making GlobalSubrs to be shared for all descendent fonts
+within CFF CID font. 1/2 fix for Source Forge bug #468389 "rangecheck in
+type2execchar" (lib/gs_cff.ps [1.10]: 2001/10/12 08:52:14 igorm)
+ - Fixes for stdin as a result of using callouts. Use unbuffered
+read, not non-blocking read. Change gp_stdin_read to use file pointer not
+handle. Remove gp_stdin_init since we don't need to set non-blocking. Change
+gp_stdin.c to use fread/fwrite to be more portable. Flush redirected stdout
+correctly. Added casts to fix compiler warnings in dxmain.c. Corrected
+header dependencies. Fixes SourceForge bug #467787. (dpmain.c [1.5],
+dwmainc.c [1.8], idebug.c [1.4], igc.c [1.5], imain.c [1.19]: 2001/10/12
+21:37:08 ghostgum)
+ - Documentation and version number change in preparation for 7.03
+release. (lib/gs_init.ps [1.40]: 2001/10/20 08:44:31 raph)
+
+</pre><h2><a name="7.03-Streams"></a>Streams</h2><pre>
+
+Fixes problems:
+ - Updates icclib to version 2.0, and integrates icclib changes. In
+particular, icclib now accesses Ghostscript streams through the clean
+icmFile object interface, rather than previous hack. Removes remnants of
+previous hack, including gs_stdio.h header file and sread() and swrite()
+functions in stream.c. (stream.c [1.15]: 2001/10/19 21:52:50 raph)
+
+</pre><h2><a name="7.03-Library"></a>Library</h2><pre>
+
+Fixes problems:
+ - Fixes nontermination of triangle subdivision in shading, as
+triggered by FTS 446-01.ps. The criterion for whether a triangle spans more
+than one pixel was too conservative, as it took the fill adjust into
+account. (gxshade4.c [1.6]: 2001/10/01 21:16:47 raph)
+ - Correct inverted Decode cases of ImageType 4 color range masks for
+the Monochrome single bit per pixel case. Fixes SourceForge bug #462319 for
+Artifex customer #671. (gxifast.c [1.4]: 2001/10/06 03:27:57 rayjj)
+ - Fix : More error tolerance in type2 charstring interpreter. 2/2
+fix for Source Forge bug #468389 "rangecheck in type2execchar". Thanks to L.
+Peter Deutsch for participation and for the comment in code.
+(gstype2.c [1.10]: 2001/10/12 08:55:24 igorm)
+ - Fixes for stdin as a result of using callouts. Use unbuffered
+read, not non-blocking read. Change gp_stdin_read to use file pointer not
+handle. Remove gp_stdin_init since we don't need to set non-blocking. Change
+gp_stdin.c to use fread/fwrite to be more portable. Flush redirected stdout
+correctly. Added casts to fix compiler warnings in dxmain.c. Corrected
+header dependencies. Fixes SourceForge bug #467787. (gp.h [1.8],
+gxclutil.c [1.5], unistd_.h [1.4]: 2001/10/12 21:37:08 ghostgum)
+ - Fixes reference counting for PDF 1.4 device filter stack.
+Temporary patch to not free PDF 1.4 marking device for images (it was being
+freed prematurely). (gdevp14.c [1.4], gsdfilt.c [1.3]: 2001/10/17 17:28:10
+raph)
+ - Updates icclib to version 2.0, and integrates icclib changes. In
+particular, icclib now accesses Ghostscript streams through the clean
+icmFile object interface, rather than previous hack. Removes remnants of
+previous hack, including gs_stdio.h header file and sread() and swrite()
+functions in stream.c. (gsicc.c [1.5], gsicc.h [1.3]: 2001/10/19 21:52:50
+raph)
+ - Documentation and version number change in preparation for 7.03
+release. (gscdef.c [1.15]: 2001/10/20 08:44:31 raph)
+
+</pre><h2><a name="7.03-Other"></a>Other</h2><pre>
+
+Fixes problems:
+ - Updates icclib to version 2.0, and integrates icclib changes. In
+particular, icclib now accesses Ghostscript streams through the clean
+icmFile object interface, rather than previous hack. Removes remnants of
+previous hack, including gs_stdio.h header file and sread() and swrite()
+functions in stream.c. (gs_stdio.h [1.3], icclib/Licence.txt [1.1],
+icclib/NOTES [1.2], icclib/Readme.txt [1.1], icclib/icc.c [1.6],
+icclib/icc.h [1.4], icclib/icc9809.h [1.2]: 2001/10/19 21:52:50 raph)
+
+<hr>
+
+<h1><a name="Version7.02"></a>Version 7.02 (2001-09-22)</h1>
+
+<p>
+This is a prerelease of Ghostscript, in preparation for a forthcoming
+fully tested, supported 7.0x release. We are skipping the 7.01 release
+number because that number is now associated with CVS versions.
+
+<p> Major changes include:
+
+<ul>
+<li>Compile and portability fixes, including the dreaded time.h
+problem that affects up-to-date GNU/Linux builds.
+
+<li>Big improvements in stdio, including a new -sstdout= redirect
+switch. In addition, reading from stdin uses nonblocking I/O, so the
+ugly -_ workaround is no longer necessary.
+
+<li>Substantial pdfwrite improvements.
+
+<li>128-bit encrypted files are now supported.
+
+<li>The usual bug fixes.
+
+</ul>
+
+Release issues that will be fixed before next fully supported version:
+
+<ul>
+
+<li> Update icclib to 2.0.
+
+<li> Update hpijs and Omni glue to latest versions.
+
+<li> Make sure all source files are referenced in Develop.htm.
+
+</ul>
+
+<p>
+The following SourceForge bug numbers are currently open:
+215256, 219798, 222727, 224863, 226477, 405342, 406285, 406689,
+406979, 407342, 411753, 413669, 414947, 414985, 415016, 415142,
+415170, 415177, 415526, 416043, 416131, 416830, 418241, 418597,
+421057, 422532, 423838, 426274, 427193, 427314, 427316, 427347,
+428891, 428973, 430879, 431065, 432040, 432657, 433835, 434277,
+434707, 435154, 436099, 436897, 437285, 438679, 438957, 441566,
+442477, 443745, 444791, 446344, 446672, 446676, 446035, 447695,
+448199, 450271, 450663, 451456, 452155, 452173, 453861, 453969,
+457838, 458025, 458261, 458500, 458769, 458775, 458780, 458818,
+459645, 459647, 459764, 460292, 462139, 462212, 462221, 462319,
+462777, 463123, 463400.
+
+<h3><a name="7.02_Incompatible_changes"></a>Incompatible changes</h3>
+
+<p>
+No incompatible changes have been recorded for this version.
+
+<pre>
+
+
+
+<h2><a name="7.02-Documentation"></a>Documentation</h2><pre>
+
+Fixes problems:
+ - Fixes a typo: gs_stable_memory should have been gs_memory_stable.
+(doc/Develop.htm [1.41]: 2001/06/17 04:06:05 lpd)
+ - The "Incompatible changes" sections for 6.62 and 6.61 were
+duplicates of the section for 6.60. (doc/History6.htm [1.28]: 2001/07/28
+23:02:56 lpd)
+
+Increments version number after 7.00 release. Also fixes gs_init.ps to
+consistently print minor revision number as two digits.
+(doc/News.htm [1.86]: 2001/04/17 07:40:12 raph)
+
+Documents the circumstances when no structure descriptor is needed.
+(doc/Develop.htm [1.39]: 2001/04/20 19:44:18 lpd)
+
+Adds documentation for the graphics library's implementation of clipping.
+(doc/Develop.htm [1.40]: 2001/04/20 20:17:28 lpd)
+
+Make copyright and license info at the end match other .htm files.
+(doc/Humor.htm [1.3]: 2001/04/21 17:14:33 rayjj)
+
+Added entry about confusing error messages. (doc/Issues.htm [1.10]:
+2001/04/27 23:41:28 alexcher)
+
+Clarifies the manpage for the ps2pdfwr wrapper script, mentioning the
+-dSAFER option and adding a sentence describing the role of this particular
+script. (man/ps2pdfwr.1 [1.10]: 2001/05/03 21:07:33 giles)
+
+Adds a 'see also' reference to ps2pdf from the pdf2pdfwr manpage.
+(man/ps2pdfwr.1 [1.11]: 2001/05/03 23:54:51 giles)
+
+Restructures the C style guide to explicitly distinguish language
+restrictions from purely stylistic issues. (Requested by Artifex engineer.)
+(doc/C-style.htm [1.18]: 2001/05/25 00:35:41 lpd)
+
+Updates hpijs driver to version 0.96. (doc/Devices.htm [1.30]: 2001/05/30
+23:25:25 raph)
+
+Minor documentation update for HPIJS driver (adds more supported devices).
+(doc/Devices.htm [1.31]: 2001/05/30 23:58:44 raph)
+
+updates the bug report for to reflect the public nature of the new bug lists
+and tracker. (doc/Bug-form.htm [1.21]: 2001/06/05 02:30:47 giles)
+
+corrects the spelling of Metrowerks CodeWarrior (doc/Bug-info.htm [1.18]:
+2001/06/05 02:31:58 giles)
+
+branches: 1.1.2; file COPYING was initially added on branch GS_6_5.
+(doc/COPYING [1.1]: 2001/06/05 07:07:35 raph)
+
+Changes release policy to preserve the original filenames of 3rd party
+tarballs. (doc/Release.htm [1.38]: 2001/06/06 18:46:23 giles)
+
+This revision allows the MSVC makefiles to work with spaces in the DEVSTUDIO
+path. Also if DEVSTUDIO is set to empty then the PATH, LIB, INCLUDE
+environment variables are used for building. The MSVC section of Make.htm
+was enlarged. (doc/Make.htm [1.32]: 2001/06/12 23:06:19 dancoby)
+
+Adds an explanation of why stable allocators are needed, rather than using
+the system VM allocator for all stable objects. (doc/Develop.htm [1.42]:
+2001/06/17 04:12:06 lpd)
+
+Adds extern_inline for including inline procedures in header files.
+(doc/C-style.htm [1.19]: 2001/06/17 05:09:07 lpd)
+
+Adds and documents an operator &lt;prefix|null&gt; &lt;access_string&gt;
+.tempfile &lt;filename&gt; &lt;file&gt; to create and open a temporary file,
+using gp_open_scratch_file. (doc/Language.htm [1.32]: 2001/07/15 13:54:17
+lpd)
+
+Adds pphs, a utility for printing the Primary Hint Stream of a linearized
+PDF file. (doc/Develop.htm [1.43], doc/Psfiles.htm [1.20]: 2001/07/15
+16:25:02 lpd)
+
+Adds documentation of the new macos build processes. (doc/Make.htm [1.33]:
+2001/07/18 20:17:11 giles)
+
+Makes explicit note of the requirement to update the 'incompatible changes'
+section of the documentation with relevant commits.
+(doc/Maintain.htm [1.19], doc/News.htm [1.87]: 2001/07/31 03:31:35 giles)
+
+Adds documentation for the 'Fix:' prefix handling in changelog generation.
+(doc/Maintain.htm [1.20]: 2001/07/31 08:06:48 giles)
+
+Removes a reference to mailing separate bug fix notices to artifex made
+obsolete by the commit announcement mailing list. (doc/Maintain.htm [1.21]:
+2001/07/31 20:27:42 giles)
+
+Documentation update : ps2ascii can't handle incremental fonts.
+(doc/Issues.htm [1.11]: 2001/08/06 10:24:01 igorm)
+
+Update to 1. add Active-X project suggested by a user. 2. Remove the DSC
+processing project (completed). 3. provide minor update to the pswrite
+project. 4. Update the ICC profile support project to reflect the partial
+support now completed (in 7.00). (doc/Projects.htm [1.31]: 2001/08/17
+19:42:49 rayjj)
+
+Adds documentation for the -sPDFPassword command line option for encrypted
+pdf files, introduced with the inclusion of pdf_sec.ps. (doc/Use.htm [1.29]:
+2001/09/05 22:47:27 giles)
+
+Notes that ps2pdf may cause a limitcheck on PostScript files with
+unreasonably large coordinates; suggests using -r as a workaround. Responds
+to SourceForge bug #461335. (doc/Ps2pdf.htm [1.30]: 2001/09/14 00:40:04 lpd)
+
+Update documentation to describe how to build and install ghostscript as a
+shared object on Unix. Fixes sourceforge bug #444593.
+(doc/Install.htm [1.24], doc/Make.htm [1.34]: 2001/09/15 08:04:42 ghostgum)
+
+Speed up reading stdin when using callouts. Add platform-specific functions
+for reading stdin, to allow non-blocking reading of stdin if supported.
+Fixes Sourceforge bug #416973. (doc/Develop.htm [1.44]: 2001/09/15 08:48:33
+ghostgum)
+
+Allow PostScript stdout to be redirected to stderr or a file. This is
+required to avoid driver stdout being mixed with PostScript stdout. Options
+are -sstdout=filename or -sstdout=%stderr. To reset redirection use
+-sstdout=- or -sstdout=%stdout. Fixes Sourceforge bug #222534.
+(doc/Use.htm [1.30]: 2001/09/22 07:33:35 ghostgum)
+
+Updates version and date in documentation in preparation for 7.02
+pre-release. (doc/API.htm [1.10], doc/Bug-form.htm [1.22],
+doc/Bug-info.htm [1.19], doc/C-style.htm [1.20], doc/Commprod.htm [1.14],
+doc/Copying.htm [1.12], doc/Current.htm [1.12], doc/DLL.htm [1.14],
+doc/Develop.htm [1.45], doc/Devices.htm [1.32], doc/Drivers.htm [1.20],
+doc/Fonts.htm [1.21], doc/Helpers.htm [1.16], doc/History1.htm [1.12],
+doc/History2.htm [1.12], doc/History3.htm [1.12], doc/History4.htm [1.12],
+doc/History5.htm [1.14], doc/History6.htm [1.29], doc/History7.htm [1.2],
+doc/Htmstyle.htm [1.17], doc/Install.htm [1.25], doc/Issues.htm [1.12],
+doc/Language.htm [1.33], doc/Lib.htm [1.13], doc/Maintain.htm [1.22],
+doc/Make.htm [1.35], doc/New-user.htm [1.29], doc/News.htm [1.88],
+doc/PUBLIC [1.5], doc/Projects.htm [1.32], doc/Ps-style.htm [1.12],
+doc/Ps2epsi.htm [1.14], doc/Ps2pdf.htm [1.31], doc/Psfiles.htm [1.21],
+doc/README [1.11], doc/Readme.htm [1.30], doc/Release.htm [1.39],
+doc/Source.htm [1.12], doc/Tester.htm [1.13], doc/Unix-lpr.htm [1.12],
+doc/Use.htm [1.31], doc/Xfonts.htm [1.12], doc/gs-vms.hlp [1.11],
+man/dvipdf.1 [1.9], man/font2c.1 [1.9], man/gs.1 [1.9], man/gslp.1 [1.9],
+man/gsnd.1 [1.9], man/pdf2dsc.1 [1.9], man/pdf2ps.1 [1.11],
+man/pdfopt.1 [1.9], man/pf2afm.1 [1.9], man/pfbtopfa.1 [1.10],
+man/printafm.1 [1.9], man/ps2ascii.1 [1.9], man/ps2epsi.1 [1.9],
+man/ps2pdf.1 [1.13], man/ps2pdfwr.1 [1.12], man/ps2ps.1 [1.16],
+man/wftopfa.1 [1.9]: 2001/09/22 16:26:21 raph)
+
+</pre><h2><a name="7.02-Procedures"></a>Procedures</h2><pre>
+
+Fixes problems:
+ - Removing the dependence of graphic library on PS interpreter.
+Source Forge bug #415003. (lib.mak [1.48]: 2001/04/20 09:38:39 igorm)
+ - Undoes makefile breakage introduced in previous version (for VMS).
+(icclib.mak [1.3], lib.mak [1.50]: 2001/04/24 18:36:55 raph)
+ - !ifndef COMPILED_INITS instead of !ifndef COMPILE_INITS Discovered
+fixing bug #414985 from anonymous user (msvclib.mak [1.13]: 2001/04/28
+00:53:46 alexcher)
+ - Optimization for shading fill. The general path filling algorithm
+subdivides fill region with trapezoid or rectangle subregions and then
+paints each subregion with given color. If the color is shading, each
+subregion to be subdivided into areas of constant color. But with radial
+shading each area is a high order polygon, being subdivided into smaller
+subregions, so as total number of subregions grows huge. Faster processing
+is done here by changing the order of subdivision cycles : we first
+subdivide the shading into areas of constant color, then apply the general
+path filling algorithm (i.e. subdivide each area into trapezoids or
+rectangles), using the filling path as clip mask. Source Forge bug #414022.
+(lib.mak [1.51]: 2001/05/10 18:36:40 igorm)
+ - Adobe PhotoShop 5+ duotone code assumes that setcolor operator
+calls tint transform function if source colors don't make a subset of device
+colors. Bug #224056, Customer #150 (int.mak [1.47]: 2001/06/07 14:48:24
+alexcher)
+ - index.html and gs.css weren't being copied to the installed
+documentation directory. (unixinst.mak [1.19]: 2001/07/25 21:10:39 giles)
+ - define previously undefined make variables. DISPLAY_DEV in
+unix-gcc.mak. gdevdsp_h and gdevdsp2_h in int.mak. Add missing iref.h
+dependency for idisp. Bug #415006. (devs.mak [1.46], int.mak [1.48],
+unix-gcc.mak [1.22]: 2001/08/01 08:58:49 ghostgum)
+ - Link GNU/Linux shared object as position independent code, instead of
+just compiling the modules as position independent. Adds prefix to shared
+object recursive make to allow install to a temporary location while
+building a distribution. (unix-dll.mak [1.3]: 2001/08/01 09:42:01 ghostgum)
+ - allow any value of JVERSION in the platform-specific makefiles to
+reduce user confusion over minor version naming. We continue to support only
+libjpeg v6*. Sourceforge bugs #457617 and #457838, September 2001.
+(jpeg.mak [1.4]: 2001/09/05 21:46:35 giles)
+ - Fix for MS-Windows graphics library. Remove references to
+interpreter from gp_check_interrupts function in library. Make gslib.c
+access gs_stdin not stdin. Correct the build paths for graphics devices. Add
+missing graphics devices. (msvc32.mak [1.18], msvclib.mak [1.16],
+winlib.mak [1.11]: 2001/09/22 07:07:02 ghostgum)
+ - Prevent memory corruption when reading %statementedit. Allocate
+lineedit buffer in correct memory space. Line being assembled is stored in a
+PostScript string during callouts, so prevent zfilelineedit from reading
+more than max_string_size bytes. Allocate extra space for trailing new-line
+for statementedit, rather than fiddling the string length which broke when
+sreadline reallocated the string. (int.mak [1.50]: 2001/09/22 07:26:45
+ghostgum)
+ - pdfwrite failed to recognize several of the standard screen spot
+functions: Ellipse, Round, and Diamond weren't implemented, and several of
+the others didn't match the PostScript implementation because of
+float/double discrepancies. Also, pdfwrite wrote out halftone screens using
+the adjusted ("actual") frequency and angle values rather than the requested
+values. Fixes SourceForge #446676. (devs.mak [1.47]: 2001/09/22 16:27:04
+lpd)
+
+Increments version number after 7.00 release. Also fixes gs_init.ps to
+consistently print minor revision number as two digits. (version.mak [1.34]:
+2001/04/17 07:40:12 raph)
+
+Committing in . Modified Files: gs/icclib/icc.c gs/src/gdevpdf.c
+gs/src/gp_vms.c gs/src/gsnogc.c gs/src/icclib.mak gs/src/openvms.mmk
+gs/src/x_.h Added Files: gs/src/vms_x_fix.h Patches for OpenVMS
+(icclib.mak [1.2], openvms.mmk [1.7]: 2001/04/20 09:56:22 joukj)
+
+Committing in . Modified Files: gs/src/lib.mak Patch for OpenVMS (little
+delayed since it was merged first with another commit) (lib.mak [1.49]:
+2001/04/20 10:39:44 joukj)
+
+Committing in . Modified Files: gs/src/gdevpdf.c gs/src/imainarg.c
+gs/src/openvms.mmk Merged in some patches by Rick Dyson, which affect
+compilation on VMS only. (openvms.mmk [1.8]: 2001/04/25 08:19:41 joukj)
+
+Committing in . Modified Files: gs/src/openvms.mak bringing openvms.mak in
+sync. with new features( Icclib etc.) and with new compile strategy with
+long variable names( as in openvms.mmk) Patch from Rick Dyson.
+(openvms.mak [1.12]: 2001/04/25 13:24:20 joukj)
+
+Changes gp_open_scratch_file() to use mkstemp() rather than mktemp() on gcc
+builds, which avoids warnings. Adds CAPOPT variable to unix-gcc.mak to
+select which function is used, so that builds will still succeed on systems
+that don't have mkstemp(). (unix-gcc.mak [1.20]: 2001/05/07 19:05:46
+jackiem)
+
+Committing in . Modified Files: gs/src/openvms.mmk Enabling mkstemp on VMS.
+(openvms.mmk [1.9]: 2001/05/08 12:28:38 joukj)
+
+This file is a new utility intended for debug. It is not yet ready for prime
+time, but is available for whoever wants to fix it. The main problems are:
+1. It doesn't work for files that use chained filters such as [
+/ASCII85Decode /FlateDecode ] 2. The PDF files that are written are
+sometimes broken. GS gets an xref problem. This second problem may actually
+due to lib/pdfwrite.ps since even when no conversion is done, the file is
+bad. (toolbin/pdfinflt.ps [1.1]: 2001/05/31 04:54:51 rayjj)
+
+branches: 1.1.2; file gnudevs.mak was initially added on branch GS_6_5.
+(gnudevs.mak [1.1]: 2001/06/05 07:07:37 raph)
+
+removes unnessary whitespace, which was breaking tmake.tcl. Part of
+sourceforge bug #415170, 2001 April 10. (libpng.mak [1.7]: 2001/06/07
+22:01:16 giles)
+
+This revision allows the MSVC makefiles to work with spaces in the DEVSTUDIO
+path. Also if DEVSTUDIO is set to empty then the PATH, LIB, INCLUDE
+environment variables are used for building. The MSVC section of Make.htm
+was enlarged. (msvc32.mak [1.16], msvccmd.mak [1.6], msvclib.mak [1.14],
+msvctail.mak [1.6]: 2001/06/12 23:06:19 dancoby)
+
+updates makefiles to use version 1.0.12 of the png library.
+(all-arch.mak [1.9], bcwin32.mak [1.11], dvx-gcc.mak [1.11],
+libpng.mak [1.8], msvc32.mak [1.17], msvclib.mak [1.15], openvms.mak [1.13],
+os2.mak [1.17], ugcclib.mak [1.13], unix-gcc.mak [1.21],
+unixansi.mak [1.15], unixtrad.mak [1.15], watc.mak [1.13],
+watclib.mak [1.13], watcw32.mak [1.12]: 2001/07/10 01:39:57 giles)
+
+drops support for libpng v0.89 and streamlines the library makefile.
+(libpng.mak [1.9]: 2001/07/10 02:07:08 giles)
+
+minor comment cleanup (libpng.mak [1.10]: 2001/07/10 03:14:33 giles)
+
+branches: 1.1.2; Adds the makefile and script for the new macos build method
+(macos-mcp.mak [1.1]: 2001/07/18 20:28:57 giles)
+
+To reduce redraw flicker, do not allow Windows to erase the background since
+we paint it ourselves. Paint areas outside the page with the window
+background colour or light grey. Save and restore window size using
+registry. Add "Paste" to system menu of text window. Make error message box
+a child of text window to avoid it appearing behind the text window. To
+allow user to read the error message, the text window is not automatically
+destroyed in the event of an error. The user must close text window using
+close button or system menu. If text window closed, return e_Fatal to poll
+function to provide a cleaner exit without a stack dump. (winint.mak [1.8]:
+2001/08/01 09:50:36 ghostgum)
+
+Uses lynx instead of netscape to generate text versions of important
+documentation files. (toolbin/pre [1.11]: 2001/08/18 02:50:09 giles)
+
+Adds a C implementation of the Arcfour encryption filter. This is a
+work-alike of the RC4 cipher used in PDF encryption. (int.mak [1.49],
+lib.mak [1.52]: 2001/09/02 06:16:41 giles)
+
+The Unix shared object loader 'gsx' depends on Gtk+ which causes it to fail
+in an environment where X11 and Gtk+ are not available. Add a console only
+loader 'gsc' which does not depend on X11 or Gtk+. This does not support the
+'display' device. Fixes sourceforge bug #450933. (unix-dll.mak [1.4]:
+2001/09/15 08:10:33 ghostgum)
+
+Speed up reading stdin when using callouts. Add platform-specific functions
+for reading stdin, to allow non-blocking reading of stdin if supported.
+Fixes Sourceforge bug #416973. (dvx-tail.mak [1.4], macos-mcp.mak [1.2],
+openvms.mak [1.14], os2.mak [1.18], unix-aux.mak [1.4], watc.mak [1.14],
+winlib.mak [1.10]: 2001/09/15 08:48:33 ghostgum)
+
+Change all interpreter builds to use callouts for stdio. Ghostscript library
+builds still use file based stdio. (bcwin32.mak [1.12], dvx-gcc.mak [1.12],
+gs.mak [1.5], openvms.mak [1.15], unix-gcc.mak [1.23], unixansi.mak [1.16],
+unixtrad.mak [1.16], watc.mak [1.15], watcw32.mak [1.13]: 2001/09/15
+08:55:32 ghostgum)
+
+Correct makefile dependency for gsx/dxmainc.c. (unix-dll.mak [1.5]:
+2001/09/22 07:21:00 ghostgum)
+
+Add the needed object files when building Windows large executable.
+(msvc32.mak [1.19]: 2001/09/22 07:24:33 ghostgum)
+
+Updates version and date in documentation in preparation for 7.02
+pre-release. (version.mak [1.35]: 2001/09/22 16:26:22 raph)
+
+</pre><h2><a name="7.02-Utilities"></a>Utilities</h2><pre>
+
+Fixes problems:
+ - null object was converted to -nostringval- Discovered during the
+work on pdfopt. (lib/pdfwrite.ps [1.4]: 2001/04/28 01:01:38 alexcher)
+ - On Windows GS enumerated "." and ".." as external resources and
+failed with /invalidresource trying to load them later. (gp_ntfs.c [1.5]:
+2001/05/04 20:27:40 alexcher)
+ - pass #xx escaped characters in names through and fix the escape
+logic to prevent a /typecheck in add. (lib/pdfwrite.ps [1.5]: 2001/05/31
+04:38:42 rayjj)
+ - Many scripts for invoking Ghostscript-based utilities didn't
+properly handle file names that included spaces. Unix and DOS/Windows/OS/2
+scripts required different fixes. (lib/dvipdf [1.2], lib/eps2eps [1.3],
+lib/eps2eps.bat [1.5], lib/gssetgs.bat [1.3], lib/pdf2dsc.bat [1.2],
+lib/pdf2ps [1.4], lib/pdf2ps.bat [1.5], lib/pdfopt [1.3],
+lib/pdfopt.bat [1.3], lib/pf2afm.bat [1.3], lib/pfbtopfa [1.3],
+lib/ps2ascii [1.3], lib/ps2epsi [1.7], lib/ps2epsi.bat [1.6],
+lib/ps2epsi.cmd [1.3], lib/ps2pdf.bat [1.6], lib/ps2pdf12.bat [1.5],
+lib/ps2pdf13.bat [1.5], lib/ps2pdf14.bat [1.2], lib/ps2pdfwr [1.6],
+lib/ps2pdfxx.bat [1.10], lib/ps2ps [1.3], lib/ps2ps.bat [1.4]: 2001/06/22
+16:09:22 lpd)
+ - pdfopt gave an error if the input file had PageMode = /UseOutlines
+but lacked an Outlines tree. Fixes SourceForge bug #410371.
+(lib/pdfopt.ps [1.5]: 2001/07/01 07:16:28 lpd)
+ - The first pass of pdfopt always estimated the size of the primary
+hint stream as 0, which occasionally caused the second-pass fixup to fail.
+Fixes SourceForge bug #409887. (lib/pdfopt.ps [1.7]: 2001/07/01 07:23:36
+lpd)
+ - If the OpenAction of a document referred to a Page object, pdfopt
+would try to include the page in the "document-level objects" section of the
+output, causing a rangecheck error. Fixes SourceForge bug #437724. Also adds
+more tracing to pdfopt (with -dPDEBUG). (lib/pdfopt.ps [1.8]: 2001/07/02
+15:50:19 lpd)
+ - gp_open_scratch_file concatenated the temporary directory name
+with the prefix even if the prefix was an absolute path; also, it didn't
+check the length of the final file name, possibly leading to memory
+corruption. (gp_iwatc.c [1.6], gp_mswin.c [1.6], gp_os2.c [1.10],
+gp_vms.c [1.7]: 2001/07/15 13:57:50 lpd)
+ - glyphshow procedure in ps2ascii lacks a pop in the for loop. Patch
+from Leon Bottou. Source Forge bug #443361. (lib/ps2ascii.ps [1.3]:
+2001/07/22 20:43:32 igorm)
+ - pdfopt was broken because SAFER prevented it from opening its
+output and temporary files, and from deleting its temporary files. Note:
+this fix requires the .tempfile operator added in src/zfile.c [1.9].
+(lib/pdfopt [1.4], lib/pdfopt.bat [1.4], lib/pdfopt.ps [1.9]: 2001/07/23
+06:57:27 lpd)
+ - Running font2c on any of the 35 standard fonts caused an
+invalidaccess error if gs was built with compiled fonts (ccfonts.dev
+"feature"). Fixes SourceForge #458816. (lib/font2c.ps [1.3]: 2001/09/13
+23:16:29 lpd)
+ - Fix for MS-Windows graphics library. Remove references to
+interpreter from gp_check_interrupts function in library. Make gslib.c
+access gs_stdin not stdin. Correct the build paths for graphics devices. Add
+missing graphics devices. (gp_mslib.c [1.3], gp_mspol.c [1.1],
+gp_mswin.c [1.7]: 2001/09/22 07:07:02 ghostgum)
+
+Committing in . Modified Files: gs/icclib/icc.c gs/src/gdevpdf.c
+gs/src/gp_vms.c gs/src/gsnogc.c gs/src/icclib.mak gs/src/openvms.mmk
+gs/src/x_.h Added Files: gs/src/vms_x_fix.h Patches for OpenVMS
+(gp_vms.c [1.6]: 2001/04/20 09:56:22 joukj)
+
+branches: 1.1.2; file gp_gnrdl.c was initially added on branch GS_6_5.
+(gp_gnrdl.c [1.1]: 2001/06/05 07:07:37 raph)
+
+Change ps2pdfxx.bat to use lowercase output file extension to be consistent
+with other platforms. This closes sourceforge bug #430129.
+(lib/ps2pdfxx.bat [1.9]: 2001/06/15 05:32:56 jackiem)
+
+Adds more tracing output to pdfopt with -dPDEBUG. (lib/pdfopt.ps [1.6]:
+2001/07/01 07:20:30 lpd)
+
+Adds more tracing (with -dPDEBUG) to lib/pdfwrite.ps, used by pdfopt.
+(lib/pdfwrite.ps [1.6]: 2001/07/02 15:46:05 lpd)
+
+Adds pphs, a utility for printing the Primary Hint Stream of a linearized
+PDF file. (lib/pphs [1.1], lib/pphs.ps [1.1]: 2001/07/15 16:25:02 lpd)
+
+Re-enables export of the hwnd parameter in the old dll interface. This is
+required by macgsview. (gsdll.c [1.5]: 2001/07/18 20:16:24 giles)
+
+Adds initial support for macos. (gp_macio.c [1.1]: 2001/07/18 20:20:50
+giles)
+
+branches: 1.1.2; Adds initial support for macos. (gp_mac.c [1.1]: 2001/07/18
+20:20:50 giles)
+
+branches: 1.1.2; Adds the makefile and script for the new macos build method
+(macgenmcpxml.sh [1.1]: 2001/07/18 20:28:57 giles)
+
+Adds descriptive labels to the output of the utility for printing linearized
+PDF data. (lib/pphs.ps [1.2]: 2001/07/19 18:38:45 lpd)
+
+Protect the export of 'hwndtext', required by macgsview, with platform
+#ifdefs to avoid conflicts with the win32 dll build. (gsdll.c [1.6]:
+2001/07/23 05:25:08 giles)
+
+branches: 1.2.2; corrects line endings in gp_macio.c (gp_macio.c [1.2]:
+2001/07/24 22:22:59 giles)
+
+Improves the comments printed with dumps of Linearized PDF hint tables.
+(lib/pphs.ps [1.3]: 2001/07/24 22:24:28 lpd)
+
+Changes pdfopt to work around several Acrobat code and documentation bugs,
+so that Acrobat now recognizes pdfopt output as "optimized". Fixes
+SourceForge #438685. (lib/pdfopt.ps [1.10], lib/pdfwrite.ps [1.7]:
+2001/07/30 07:16:32 lpd)
+
+The Unix shared object loader 'gsx' depends on Gtk+ which causes it to fail
+in an environment where X11 and Gtk+ are not available. Add a console only
+loader 'gsc' which does not depend on X11 or Gtk+. This does not support the
+'display' device. Fixes sourceforge bug #450933. (dxmainc.c [1.1]:
+2001/09/15 08:10:33 ghostgum)
+
+When using the Unix Gtk+ loader gsx, delay setting the default color map and
+visual until the display device is opened. This may allow gsx to be used
+when X11 is not available. May fix Sourceforge bug #450933. (dxmain.c [1.4]:
+2001/09/15 08:14:21 ghostgum)
+
+Speed up reading stdin when using callouts. Add platform-specific functions
+for reading stdin, to allow non-blocking reading of stdin if supported.
+Fixes Sourceforge bug #416973. (gp_stdia.c [1.1], gp_stdin.c [1.1],
+ziodevs.c [1.3]: 2001/09/15 08:48:34 ghostgum)
+
+Correct the stdin code in dxmainc.c (gsc) to be the same as gp_stdia.c.
+(dxmainc.c [1.2]: 2001/09/22 07:16:50 ghostgum)
+
+</pre><h2><a name="7.02-Drivers"></a>Drivers</h2><pre>
+
+Fixes problems:
+ - Prevent empty or invalid OutputFile values from causing SEGV in
+psrgb, psgray and psmono. SourceForge bug #414151. (gdevpsu.c [1.5]:
+2001/04/20 02:35:24 rayjj)
+ - Corrects incorrect month value in TIFF headers. Need to increment
+tm_mon by one to get actual month. Fix from Helge Blischke.
+(gdevtifs.c [1.4]: 2001/04/20 06:36:00 rayjj)
+ - epswrite now writes each page into separate file, if OutputFile
+specifies format. SourceForge bug #228641. (gdevps.c [1.17],
+gdevpsim.c [1.5], gdevpsu.c [1.6], gdevpsu.h [1.3]: 2001/05/05 11:04:22
+igorm)
+ - Writing each page to separate file, epswrite wrote wrong number of
+pages to their trailers. (gdevps.c [1.18], gdevpsim.c [1.6],
+gdevpsu.c [1.7], gdevpsu.h [1.4]: 2001/05/10 17:41:22 igorm)
+ - Removes duplicate rc_decrement_only() in
+pdf14_begin_typed_image(), so that the marking device is now deallocated
+once. Fixes SourceForge bug #434705. (gdevpnga.c [1.4]: 2001/07/05 23:21:01
+raph)
+
+Committing in . Modified Files: gs/icclib/icc.c gs/src/gdevpdf.c
+gs/src/gp_vms.c gs/src/gsnogc.c gs/src/icclib.mak gs/src/openvms.mmk
+gs/src/x_.h Added Files: gs/src/vms_x_fix.h Patches for OpenVMS (x_.h [1.3]:
+2001/04/20 09:56:22 joukj)
+
+branches: 1.2.2; Updates hpijs driver to version 0.96. (gdevhpij.c [1.2],
+gdevhpij.h [1.2]: 2001/05/30 23:25:25 raph)
+
+branches: 1.1.2; file defs.h was initially added on branch GS_6_5.
+(defs.h [1.1]: 2001/05/31 08:28:49 raph)
+
+branches: 1.1.2; file gomni.c was initially added on branch GS_6_5.
+(gomni.c [1.1]: 2001/05/31 08:28:49 raph)
+
+branches: 1.1.2; file gdevln03.c was initially added on branch GS_6_5.
+(gdevln03.c [1.1]: 2001/06/05 07:07:37 raph)
+
+branches: 1.1.2; file gdevop4w.c was initially added on branch GS_6_5.
+(gdevop4w.c [1.1]: 2001/06/05 07:07:37 raph)
+
+branches: 1.1.2; file gdevxes.c was initially added on branch GS_6_5.
+(gdevxes.c [1.1]: 2001/06/05 07:07:37 raph)
+
+Adds knowledge of more paper sizes to PCL driver. Thanks to Jonathan Kamens
+for the patch. (gdevpcl.c [1.5], gdevpcl.h [1.5]: 2001/07/15 06:38:38 raph)
+
+branches: 1.1.2; Adds initial support for macos. (gdevmac.c [1.1],
+gdevmac.h [1.1], gdevmacpictop.h [1.1], gdevmacttf.h [1.1]: 2001/07/18
+20:20:50 giles)
+
+branches: 1.1.2; Adds the remaining macos source files (gdevmacxf.c [1.1]:
+2001/07/18 20:27:39 giles)
+
+Added const to all printer device descriptors const gx_device_printer
+gs_xxx_device = ... (gdev3852.c [1.3], gdev4081.c [1.3], gdev4693.c [1.3],
+gdev8510.c [1.3], gdevadmp.c [1.3], gdevbj10.c [1.4], gdevcif.c [1.3],
+gdevcljc.c [1.4], gdevcp50.c [1.3], gdevdjtc.c [1.3], gdevdm24.c [1.3],
+gdevepsc.c [1.3], gdevepsn.c [1.3], gdevescp.c [1.3], gdevhl7x.c [1.5],
+gdevimgn.c [1.4], gdevlbp8.c [1.3], gdevlj56.c [1.3], gdevmiff.c [1.3],
+gdevn533.c [1.3], gdevo182.c [1.3], gdevokii.c [1.3], gdevpjet.c [1.3],
+gdevsgi.c [1.2], gdevsnfb.c [1.3], gdevsppr.c [1.4], gdevsunr.c [1.4],
+gdevtknk.c [1.3]: 2001/08/01 00:48:23 stefan911)
+
+</pre><h2><a name="7.02-PDF_writer"></a>PDF writer</h2><pre>
+
+Fixes problems:
+ - Empty pages included a Contents entry whose value was an empty
+array: the spec allows this, and AR3 and 4 accept it, but AR5 rejects it.
+(gdevpdf.c [1.34]: 2001/06/29 06:52:13 lpd)
+ - When tiling with a bitmap, the /Type entry in the Pattern resource
+was written twice. (Minor file size problem only, not a functional problem.)
+(gdevpdfb.c [1.5]: 2001/06/29 17:04:17 lpd)
+ - Some poorly designed PDF tools couldn't handle the fact that the
+Contents stream of each page was not surrounded by q/Q. (The PDF spec does
+not require this.) Fixes SourceForge bug #231390. (gdevpdfu.c [1.16]:
+2001/07/02 18:07:55 lpd)
+ - pdfwrite didn't set returned.current_char, so the "current
+character" for kshow was 0 or a random value. Fixes SourceForge bug #420933.
+(gdevpdfs.c [1.5]: 2001/07/02 19:09:23 lpd)
+ - When producing text in a Type 3 (bitmap) font and using TL and '
+for Y positioning, emitting a horizontal space character reset
+text.use_leading, causing the line to be positioned incorrectly. Fixes
+SourceForge bug #427159. (gdevpdft.c [1.33]: 2001/07/04 16:47:33 uid22160)
+ - When producing text using a Type 3 (bitmap) font, the TL command
+was used (incorrectly) when the new text position was directly below the
+current text position, not (correctly) when the new text position was
+directly below the beginning of the current text line. Fixes SourceForge bug
+#228180. (gdevpdft.c [1.34]: 2001/07/04 18:06:39 uid22160)
+ - Scaled fonts with PaintType = 2 (stroked) were painted with
+incorrect stroked width. (gdevpdfs.c [1.6]: 2001/07/04 21:57:02 uid22160)
+ - pdfwrite generated masked images, a PDF 1.3 feature, even when
+CompatibilityLevel &lt; 1.3. Fixes item (2) of SourceForge bug #414104.
+(gdevpdfj.c [1.7], gdevpdfv.c [1.6]: 2001/07/07 19:15:51 lpd)
+ - pdfwrite could write out a Pattern image too large for Acrobat
+Reader to handle, which would then never be referenced. Fixes item (4) of
+SourceForge bug #414104. (gdevpdfv.c [1.7]: 2001/07/07 19:41:12 lpd)
+ - MSVC requires that a label not be the last thing in a block.
+(gdevpdfv.c [1.9]: 2001/07/08 13:46:25 lpd)
+ - The algorithm for scaling down user coordinates to fall within
+Acrobat Reader's limitations didn't work properly for stroked paths with
+anisotropic CTMs, possibly producing large coordinates that led Acrobat (but
+not Ghostscript) to display the resulting file incorrectly. Fixes
+SourceForge bug #440476. (gdevpdfd.c [1.15], gdevpdfp.c [1.18],
+gdevpdfx.h [1.30]: 2001/07/12 03:28:02 lpd)
+ - pdfwrite didn't write transfer functions in the output for images,
+and allowed lossy compressions on images even in the presence of peculiar
+transfer functions (such as functions simulating indexed color spaces). This
+fix writes transfer functions for images, prevents lossy compression if the
+transfer function is not the identity, and undoes the hack that was
+implemented earlier to work around this problem. Fixes SourceForge bug
+#420257. (gdevpdf.c [1.35], gdevpdfg.c [1.13], gdevpdfi.c [1.22],
+gdevpdfx.h [1.31]: 2001/07/12 05:47:07 lpd)
+ - When writing text, the leading offset was sometimes ignored if
+blank lines were followed by a non-blank line. Fixes SourceForge bug
+#440490. (gdevpdft.c [1.35]: 2001/07/12 19:45:53 lpd)
+ - If ConvertCMYKImagesToRGB was true, pdfwrite produced images with
+the correct RGB data but with the color space still set to DeviceCMYK. (Fix
+originally from Helge Blischke.) (gdevpdfi.c [1.23]: 2001/07/24 04:47:37
+lpd)
+ - The calculation of a scaling value for stroked paths was
+incorrect, causing Inf and NaN values to be written in the PDF file. Fixes
+SourceForge #444682. Bug was introduced by the fix for #440476.
+(gdevpdfd.c [1.16]: 2001/07/27 22:28:31 lpd)
+ - Some error codes were ignored, masking errors in writing embedded
+fonts. (gdevpdfe.c [1.10]: 2001/07/31 06:32:42 lpd)
+ - ICCBased color spaces were copied to the output even if the output
+level was 1.2 (ICCBased color spaces were introduced in PDF 1.3).
+(gdevpdfc.c [1.16]: 2001/08/02 20:29:07 lpd)
+ - If an image used a color space that couldn't be represented in
+PDF, an invalid file was produced, rather than falling back to the default
+representation as tiny rectangles. (bug introduced by H. Blischke's color
+space fix) (gdevpdfi.c [1.24]: 2001/08/03 16:12:16 lpd)
+ - Type 1 fonts that did not use the standard 1000-unit cell, such as
+some fonts in PostScript files produced by Windows NT 4.0, were written with
+an incorrect FontMatrix. (The output was visually correct, because the font
+size was scaled to compensate.) Fixes SourceForge #439474.
+(gdevpdff.c [1.19], gdevpdff.h [1.11], gdevpdfs.c [1.7]: 2001/08/06 19:36:01
+lpd)
+ - If the base 14 fonts were being embedded, they would often be
+embedded multiple times. Partially fixes SourceForge #438957.
+(gdevpdff.c [1.20]: 2001/08/17 21:27:21 lpd)
+ - The descriptors for embedded fonts were recomputed unnecessarily.
+Part 1 of a two-part fix for SourceForge #451456. (gdevpdff.c [1.21]:
+2001/08/29 19:03:59 lpd)
+ - Uncolored Patterns with all bits set (equivalent to a solid color)
+crashed pdfwrite. Fixes SourceForge #461330. (gdevpdfv.c [1.10]: 2001/09/15
+06:12:29 lpd)
+ - pdfwrite failed to recognize several of the standard screen spot
+functions: Ellipse, Round, and Diamond weren't implemented, and several of
+the others didn't match the PostScript implementation because of
+float/double discrepancies. Also, pdfwrite wrote out halftone screens using
+the adjusted ("actual") frequency and angle values rather than the requested
+values. Fixes SourceForge #446676. (gdevpdfg.c [1.14]: 2001/09/22 16:27:04
+lpd)
+
+Committing in . Modified Files: gs/icclib/icc.c gs/src/gdevpdf.c
+gs/src/gp_vms.c gs/src/gsnogc.c gs/src/icclib.mak gs/src/openvms.mmk
+gs/src/x_.h Added Files: gs/src/vms_x_fix.h Patches for OpenVMS
+(gdevpdf.c [1.32]: 2001/04/20 09:56:22 joukj)
+
+Committing in . Modified Files: gs/src/gdevpdf.c gs/src/imainarg.c
+gs/src/openvms.mmk Merged in some patches by Rick Dyson, which affect
+compilation on VMS only. (gdevpdf.c [1.33]: 2001/04/25 08:19:41 joukj)
+
+Changes the locally used BASE_ENCODING macro to an inline procedure
+base_encoding_index. (Code hygeine only, no functional effect.)
+(gdevpdfs.c [1.4]: 2001/06/29 17:05:35 lpd)
+
+Makes pdfwrite recognize colored Patterns where all the pixels are the same
+color, and convert them to uncolored Patterns. This is an important
+optimization for files produced by certain applications (the test file came
+from Freehand on the Mac). Fixes item (3) of SourceForge bug #414104.
+(gdevpdfv.c [1.8]: 2001/07/08 04:27:48 lpd)
+
+Capitalizes a macro, and replaces two other macros with variables.
+(gdevpdfm.c [1.12]: 2001/07/15 22:53:23 lpd)
+
+Interprets bookmarks (/OUT pdfmarks) lacking both Action and Dest keys as a
+GoTo to the current page, to match Acrobat Distiller. SourceForge bug
+(enhancement) #442111. (gdevpdfm.c [1.13]: 2001/07/24 22:28:42 lpd)
+
+Changes pdfwrite to produce MediaBox values with up to 2 digits of decimal
+fraction, rather than truncating to integers. SourceForge enhancement
+request #440782. (gdevpdf.c [1.36], gdevpdfx.h [1.32]: 2001/07/25 23:16:44
+lpd)
+
+Changes the writing of Type 3 character bitmaps to use Decode in the image
+dictionary, rather than BlackIs1 in the parameter dictionary, to invert the
+data, because it takes slightly less space on the file. (gdevpdfb.c [1.6]:
+2001/07/29 02:21:43 lpd)
+
+Shrinks PDF output slightly by removing unnecessary spaces.
+(gdevpdfo.c [1.8]: 2001/07/29 03:00:45 lpd)
+
+Writes only the necessary Encoding entries for Type 3 bitmap fonts, rather
+than always writing all 256 entries. Motivated by SourceForge #438957.
+(gdevpdf.c [1.37], gdevpdft.c [1.36], gdevpdfw.c [1.12], gdevpdfx.h [1.33]:
+2001/07/30 15:11:00 lpd)
+
+Added const to all printer device descriptors const gx_device_printer
+gs_xxx_device = ... (gdevpdff.c [1.18]: 2001/08/01 00:48:23 stefan911)
+
+Converts all locally defined macros to upper case. (gdevpdfc.c [1.17]:
+2001/08/03 06:43:52 lpd)
+
+Shrinks pdfwrite output slightly by omitting the unnecessary space character
+before strings and hex strings, as well as before names, arrays, and
+dictionaries. (gdevpdfo.c [1.9]: 2001/08/14 02:29:16 lpd)
+
+Committing in . Modified Files: gs/src/gdevpdfm.c gs/src/sarc4.c
+gs/src/zcsdevn.c gs/src/zfile.c Some type casts added (gdevpdfm.c [1.14]:
+2001/09/04 14:30:13 joukj)
+
+</pre><h2><a name="7.02-PDF_Interpreter"></a>PDF Interpreter</h2><pre>
+
+Fixes problems:
+ - 5-element DeviceN array (with attributes) messed up the operand
+stack and failed. The attributes is an informational entry that can be
+safely ignored. Bug #419509, Customer #150. (lib/pdf_draw.ps [1.30]:
+2001/04/28 01:45:25 alexcher)
+ - PDF files containing strings with codes that map to glyph names
+that are not part of the font would error with undefined in --get--.
+Substitute the .notdef glyph as Adobe Acrobat Reader apparently does.
+(lib/pdf_font.ps [1.19]: 2001/05/12 00:11:42 rayjj)
+ - .resolvefn4 used stream length as the length of the decompressed
+data, truncated the PostScript procedure and caused syntax error in the
+token operator because of the unmatched brackets. Reading directly from the
+stream fixes the problem. Bugs #425919 (lib/pdf_draw.ps [1.31]: 2001/05/24
+16:48:59 alexcher)
+ - The March 1999 PDF 1.3 version of the specification had a change
+to make the /FormType key and /Matrix key optional in a Form. While we had
+already handled missing /Matrix key, the missing /FormType key was not
+accounted for in all cases. Move this to the common DoForm code. Fix for
+SourceForge bug #430556, Artifex customer #671. (lib/pdf_draw.ps [1.32]:
+2001/06/13 05:30:29 rayjj)
+ - Wrong entry name (BaseFont instead CIDFontName) was used while
+resolving font resource to CIDFontType2 in PDF interpreter. Source Forge bug
+#436892 (lib/pdf_font.ps [1.20]: 2001/07/09 19:27:37 igorm)
+ - Workaround a SEGV caused by GC interaction with stderr file.
+Needed to complete the fix for #430556, but the stderr bug remains open as
+442477. (lib/pdf_main.ps [1.34]: 2001/07/18 20:42:48 rayjj)
+ - Detect and load embedded Type1 fonts that are in PFB format (have
+the 6 byte PFB header before each segment). Also ignore /Length values in
+the streamdict keys that don't match the PFB segnment lengths. Issue warning
+messages to stderr for all of these spec violations. SourceForge bug #430556
+for Artifex customer #671. VS:
+----------------------------------------------------------------------
+(lib/pdf_font.ps [1.21]: 2001/07/18 20:45:35 rayjj)
+ - This problem was a rangecheck error being reported in
+.setindexedspace when the base colorspace was DeviceN. The cause was an
+error in determining the number of components in the DeviceN space. This is
+the second of two fixes for SF bugs 427165 (customer #1110) and 438682.
+(lib/pdf_draw.ps [1.34]: 2001/08/21 23:54:30 dancoby)
+
+Improvement: Prevents PDF files with more than 65534 page from failing due
+to the dict size limit. The caches never hit on pages past 65534. Problem
+was reported by a potential Artifex customer re their customer's files.
+(lib/pdf_main.ps [1.33]: 2001/05/12 17:15:41 rayjj)
+
+This is the fix for [ #427354 ] PDF checkboxes problem. The PDF annotation
+handler was not correctly handling cases in which there was no appearance in
+the appearance dictionary AP for the current appearance state AS. It should
+not display anything in this case. (lib/pdf_draw.ps [1.33]: 2001/06/14
+22:25:36 dancoby)
+
+Updates pdf_sec.ps to use the new PDF 1.4 algorithms and 128 bit keylengths.
+Rewritten to use C implementations of Arcfour (RC4 compatible cipher) and
+MD5. Also fixes bug in processing of zero-length streams.
+(lib/pdf_sec.ps [1.4]: 2001/09/19 07:12:13 raph)
+
+</pre><h2><a name="7.02-Interpreter"></a>Interpreter</h2><pre>
+
+Fixes problems:
+ - GS didn't exit to shell when it was used with '--' option. The bug
+was introduced in revision 1.7 when many references to exit() were replaced
+with returns. Bug #416498 by Paul Vojta (imainarg.c [1.11]: 2001/04/19
+23:39:39 ghostgum)
+ - Removing the dependence of graphic library on PS interpreter.
+Source Forge bug #415003. (zcssepr.c [1.8]: 2001/04/20 09:38:39 igorm)
+ - Auto-rotation is enabled for non-null orientations. Auto rotation
+now always rotates the image +90 degrees relative to the orientation. Bug
+#416830 Customer #430 (zmedia2.c [1.3]: 2001/04/26 17:57:41 alexcher)
+ - EPS files without a showpage could not be viewed if given as a
+command line arg. Extra call to display_set_callback erased the page before
+going to the GS&gt; prompt the first time. Only do display_set_callback as
+part of init_2. (imain.c [1.13]: 2001/05/04 20:35:33 rayjj)
+ - in global mode pdfmark with composite objects causes invalidaccess
+because the objects are copied to local memory but the array is copied to
+current memory. Now the array is copied to local memory too. Fix from Helge
+Blischke with changes. (lib/gs_pdfwr.ps [1.11]: 2001/05/04 20:59:33
+alexcher)
+ - This IdiomSet replaces 3 procedures generated by Win2K driver in
+level 1 mode for RGB source image and DeviceRGB, DeviceCMYK, and DeviceGray
+color models. Original implementation uses transfer functions to simulate
+the indexed color space. Currently, GS always ignore transfer functions. The
+replacement procedure uses indexed color space directly. This Idiom should
+really be in a file in the IdiomSet directory of the Resource path, but we
+put it here until GS has a way to handle distribution and installation of
+Resources. Customer #670, Bug #420257 (lib/gs_ll3.ps [1.9]: 2001/05/08
+19:42:13 alexcher)
+ - Add all page sizes supported in statusdict to the .pagetypenames
+array so that these page sizes can be selected from the command line using
+-sPAPERSIZE=... parameter. Also implement the STRICT that limits the
+available known paper sizes to those Adobe had defined prior to Level 2 when
+'setpagedevice' replaced this mess. SourceForge bug #427898
+(lib/gs_statd.ps [1.5]: 2001/05/30 21:14:35 rayjj)
+ - Fix for [ #419211 ] .parse_dsc_comments not robust. This change
+modifies the DSC parser so that errors in DSC comments do not abort the file
+processing. (zdscpars.c [1.11]: 2001/06/06 08:11:20 dancoby)
+ - Adobe PhotoShop 5+ duotone code assumes that setcolor operator
+calls tint transform function if source colors don't make a subset of device
+colors. Bug #224056, Customer #150 (zcolor2.c [1.4]: 2001/06/07 14:48:24
+alexcher)
+ - When finding a %%Page line in the trailer due to incorrect DSC
+comments, the DSC parser now returns CDSC_PAGE only if the parser treats it
+as a valid page. Partial fix for SourceForge bug #435157. (dscparse.c [1.6]:
+2001/06/23 10:21:24 ghostgum)
+ - Fix for [ #435157 ] segmentation fault in dsc_page. Add test for
+valid page data before using. (zdscpars.c [1.12]: 2001/06/27 00:25:08
+dancoby)
+ - Implementing CIDFont.CMap construction with period character (see
+Ken Lunde, "CJKV Information Processing," O'RELILLY. 1999. p284) for any
+compatible pair of CIDFont &amp; CMap. This feature complies with Adobe
+CPSI. Thanks to Masatake Yamato for discovering this feature.
+(lib/gs_cidcm.ps [1.5]: 2001/07/01 08:55:34 igorm)
+ - Reading a TrueType font with an empty table could cause a
+rangecheck error. (lib/gs_ttf.ps [1.9]: 2001/07/08 15:24:11 lpd)
+ - pdfwrite didn't write transfer functions in the output for images,
+and allowed lossy compressions on images even in the presence of peculiar
+transfer functions (such as functions simulating indexed color spaces). This
+fix writes transfer functions for images, prevents lossy compression if the
+transfer function is not the identity, and undoes the hack that was
+implemented earlier to work around this problem. Fixes SourceForge bug
+#420257. (lib/gs_ll3.ps [1.10]: 2001/07/12 05:47:07 lpd)
+ - zfilelineedit sometimes reallocates (resizes) buffer string
+without updating reference to it from o-stack, so as console input after
+callout reads undefined data. Fixed with copying new reference to o-stack
+whenever it changes. Source Forge bug #437808 (ziodev.c [1.5]: 2001/07/16
+08:38:14 igorm)
+ - If a 'restore' had to restore page device parameters, it did so
+before rather than after restoring the state of VM, possibly creating
+dangling references. Fixes SourceForge #230694, #414588, #444565.
+(lib/gs_setpd.ps [1.8], zdevice2.c [1.4]: 2001/07/30 07:11:38 lpd)
+ - Ignore white space between %%DocumentData: and argument. Fix: Set
+dsc-&gt;preview correctly to DOS EPS if both DOS EPS and EPSI previews are
+present. Update to latest dscparse.c/h used in GSview. Change dscparse to
+mark internal functions "dsc_private" not "private", so it can be compiled
+as C++ (needed by GSview, not Ghostscript). (dscparse.c [1.7],
+dscparse.h [1.6]: 2001/08/01 09:03:40 ghostgum)
+ - Fixing wrong binding of .getmetrics32 with -dNOBIND.
+(lib/gs_typ32.ps [1.3]: 2001/08/06 10:19:42 igorm)
+ - Old hack about underline parameters in gs_type1.ps now conflicts
+with QuarkXPress_4.1 3.0 0 procset. Disabling it for fonts, which have
+degenerate FontBBox. Source Forge bug #441870. (lib/gs_type1.ps [1.5]:
+2001/08/06 16:47:43 igorm)
+ - The problem was a rangecheck error being reported in
+.setdevicenspace with PDF files. The cause of the problem was not allowing
+multiple copies of the name /None in DeviceN colorant specification. This is
+the first of two fixes for SF bugs 427165 (customer #1110) and 438682.
+(zcsdevn.c [1.4]: 2001/08/21 23:52:36 dancoby)
+ - Work around a bug in the Adobe AGM_Core that results in areas
+painted by the tint transform of a spot color being overpainted with white.
+The symptom is missing graphics (lines, fills or text). SourceForge bug
+#454415 for Artifex customer #190. (lib/gs_init.ps [1.37]: 2001/08/29
+21:10:23 rayjj)
+ - Fix a bug that the procedure for arraytype in cntdict leaves an
+object. (lib/gs_btokn.ps [1.4]: 2001/09/04 22:59:52 masata-y)
+ - If MaxLocalVM user parameter is set, perform garbage collection
+before checking for potential VMerror. Without this fix, VMerror would be
+issued even if a garbage collection would have freed enough memory to stay
+below the MaxLocalVM limit. (ireclaim.c [1.3]: 2001/09/05 17:50:36 rayjj)
+ - Prevent memory corruption when reading %statementedit. Allocate
+lineedit buffer in correct memory space. Line being assembled is stored in a
+PostScript string during callouts, so prevent zfilelineedit from reading
+more than max_string_size bytes. Allocate extra space for trailing new-line
+for statementedit, rather than fiddling the string length which broke when
+sreadline reallocated the string. (zfile.c [1.11], ziodev.c [1.6]:
+2001/09/22 07:26:46 ghostgum)
+
+Increments version number after 7.00 release. Also fixes gs_init.ps to
+consistently print minor revision number as two digits.
+(lib/gs_init.ps [1.35]: 2001/04/17 07:40:12 raph)
+
+Committing in . Modified Files: gs/src/gdevpdf.c gs/src/imainarg.c
+gs/src/openvms.mmk Merged in some patches by Rick Dyson, which affect
+compilation on VMS only. (imainarg.c [1.12]: 2001/04/25 08:19:41 joukj)
+
+Added dot(.) composed font name(CIDFont.CMap) supports.
+(lib/gs_cidcm.ps [1.3]: 2001/05/09 09:15:19 masata-y)
+
+In zfilename, a string allocated by ialloc_string is put on the stack with
+correct memory space. (zfileio.c [1.11]: 2001/05/09 09:25:24 masata-y)
+
+The show operator doesn't clear the operand stack on interrupts. Source
+Forge bug 209350. (zchar.c [1.4]: 2001/05/10 19:15:29 igorm)
+
+Move jpeg_decompress structure enum/reloc handler from interp level to
+stream utility level to support non-PostScript clients. (zfdcte.c [1.5]:
+2001/05/30 17:38:45 rayjj)
+
+Unwind to the revision 1.2, because CIDFont.CMap patch misses some important
+CIDFont-CMap combinations. (lib/gs_cidcm.ps [1.4]: 2001/06/06 10:44:05
+igorm)
+
+If an ICC color space failed to load, Acrobat Reader uses the alternate
+color space. Previous implementation ignored errors during load and used the
+partial ICC space. This change signals an error and uses the alternate space
+by catching the error in a stopped context in the interpreter.
+(lib/gs_icc.ps [1.2]: 2001/06/12 16:02:39 rayjj)
+
+Patch from Mr. Toshiya Suzuki : Implementing multi-dimensional CID ranges,
+and fixing bugs about decoding text string with CID font : (1) when GS
+consumes undefined byte sequence (which cannot be mapped to some glyphs), GS
+aborts. (2) when selected CID font lacks the glyph for requested CID, GS
+aborts. (3) "notdefrange" defines SINGLE CID for undefined byte sequences in
+specified range, but current GS implementation take it as an offset to
+calculate MULTIPLE CID. (4) "cidrange" operators accept only full range
+specification (&lt;0000&gt; to &lt;FFFF&gt;) or 8 bit width range
+(&lt;xxyy&gt; to &lt;xxzz&gt;). Source Forge bug #415163.
+(lib/gs_cmap.ps [1.11], zfcid0.c [1.7]: 2001/06/16 19:02:31 igorm)
+
+Committing in . Modified Files: gs/src/idisp.c gs/src/imain.c
+gs/src/zfileio.c Some minor fixes (2 added includes and 1 type cast) needed
+to compile cleanly on OpenVMS. (idisp.c [1.2], imain.c [1.14],
+zfileio.c [1.12]: 2001/07/11 12:05:52 joukj)
+
+Adds and documents an operator &lt;prefix|null&gt; &lt;access_string&gt;
+.tempfile &lt;filename&gt; &lt;file&gt; to create and open a temporary file,
+using gp_open_scratch_file. (zfile.c [1.9]: 2001/07/15 13:54:17 lpd)
+
+Add the local and global vmstatus values to calculate the memory usage of a
+resource. (lib/gs_res.ps [1.15]: 2001/07/15 16:13:39 masata-y)
+
+Allows temporary files (created and opened with .tempfile) to be deleted
+even if SAFER is set. (lib/gs_init.ps [1.36]: 2001/07/23 06:56:24 lpd)
+
+To reduce redraw flicker, do not allow Windows to erase the background since
+we paint it ourselves. Paint areas outside the page with the window
+background colour or light grey. Save and restore window size using
+registry. Add "Paste" to system menu of text window. Make error message box
+a child of text window to avoid it appearing behind the text window. To
+allow user to read the error message, the text window is not automatically
+destroyed in the event of an error. The user must close text window using
+close button or system menu. If text window closed, return e_Fatal to poll
+function to provide a cleaner exit without a stack dump. (dwimg.c [1.3],
+dwimg.h [1.4], dwmain.c [1.5], dwmainc.c [1.6], dwtext.c [1.4],
+dwtext.h [1.4]: 2001/08/01 09:50:36 ghostgum)
+
+Changed debugging flag variables to const. (igc.c [1.4], zvmem.c [1.3]:
+2001/08/01 16:21:35 stefan911)
+
+Adds missing dwreg.cpp and dwreg.h files needed by recent Windows updates
+which save and restore window size using registry. (dwreg.c [1.1],
+dwreg.h [1.1]: 2001/08/02 08:36:07 ghostgum)
+
+Improves documentation of the op_def array elements and removes the obsolete
+BEGIN/END_OP_DEFS macros, deprecated since 5.25. (opdef.h [1.3]: 2001/08/28
+03:28:08 giles)
+
+Adds a C implementation of the Arcfour encryption filter. This is a
+work-alike of the RC4 cipher used in PDF encryption. (zfarc4.c [1.1]:
+2001/09/02 06:16:41 giles)
+
+Corrects indenting, and adds another missing header. (zfarc4.c [1.2]:
+2001/09/02 07:09:13 giles)
+
+Committing in . Modified Files: gs/src/gdevpdfm.c gs/src/sarc4.c
+gs/src/zcsdevn.c gs/src/zfile.c Some type casts added (zcsdevn.c [1.5],
+zfile.c [1.10]: 2001/09/04 14:30:13 joukj)
+
+Change to debug output so that when the ptr is totally bogus, some useful
+output will be generated before otype-&gt;ssize is dereferenced (which can
+cause a memory access crash such as SEGV). No effect on non-debug code.
+(ilocate.c [1.4]: 2001/09/06 15:46:13 rayjj)
+
+Move misplaced comment block. (zvmem2.c [1.3]: 2001/09/06 16:01:23 rayjj)
+
+.objectprinttest: do one more pop if the operator is executed without error.
+.writeobjects: Before writing the header, check whether the written objects
+are arrays or not. If they are arrays, they are left them on the stack. If
+they are not arrays, they are removed from the stack.
+(lib/gs_btokn.ps [1.5]: 2001/09/15 07:11:00 masata-y)
+
+When using gswin32 (GUI version) and an error occurs or -? is used, do not
+display an error message box. Add a message to the text window "Close this
+window with the close button on the title bar or the system menu". Flash the
+window to attract attention. Fixes sourceforge bug #459019. (dwmain.c [1.6],
+dwtext.c [1.5]: 2001/09/15 08:36:53 ghostgum)
+
+Speed up reading stdin when using callouts. Add platform-specific functions
+for reading stdin, to allow non-blocking reading of stdin if supported.
+Fixes Sourceforge bug #416973. (dpmain.c [1.4], dwmainc.c [1.7],
+imain.c [1.15]: 2001/09/15 08:48:33 ghostgum)
+
+When using stdio callouts without callback functions, flush stdout and
+stderr. (imain.c [1.16]: 2001/09/15 09:17:10 ghostgum)
+
+Don't initialize stdin if it is being handled by the caller.
+(imain.c [1.17]: 2001/09/22 07:22:48 ghostgum)
+
+Allow PostScript stdout to be redirected to stderr or a file. This is
+required to avoid driver stdout being mixed with PostScript stdout. Options
+are -sstdout=filename or -sstdout=%stderr. To reset redirection use
+-sstdout=- or -sstdout=%stdout. Fixes Sourceforge bug #222534.
+(imain.c [1.18], imain.h [1.3], imainarg.c [1.13], iminst.h [1.5]:
+2001/09/22 07:33:35 ghostgum)
+
+Updates version and date in documentation in preparation for 7.02
+pre-release. (lib/gs_init.ps [1.38]: 2001/09/22 16:26:22 raph)
+
+</pre><h2><a name="7.02-Streams"></a>Streams</h2><pre>
+
+Fixes problems:
+ - When input stream of an input filter reports EOF, old code reports
+EOF for the filter. But if output buffer for the filter is not empty, EOF
+status to be delayed until it empties. Source Forge bug #417127.
+(stream.c [1.12]: 2001/05/05 10:12:23 igorm)
+ - Non-stable memory was used for internal zlib data, causing
+inconsistent heap state after 'restore' while zlib is active, and subsequent
+crash. Source Forge bug #431057 (szlibc.c [1.3]: 2001/07/16 08:29:46 igorm)
+ - Fixes numerous bugs in setting of DCT compression parameters.
+Manual setting of parameters such as QFactor should now work. Also
+ColorTransform now defaults to YCC instead of RGB color space so the default
+quality and compression ratio should improve. Thanks to Dave Slattengren for
+the initial version of this fix. (sdcparam.c [1.3], sdcte.c [1.4],
+sdeparam.c [1.4]: 2001/09/01 23:54:57 raph)
+ - fixes bounds overstepping in arcfour filter in the case where
+write buffer space is smaller than read buffer space. (sarc4.c [1.5]:
+2001/09/14 20:26:02 raph)
+
+Set file_name.size = 0 when file_name.data is set to 0. (stream.c [1.13]:
+2001/05/09 09:42:57 masata-y)
+
+Move jpeg_decompress structure enum/reloc handler from interp level to
+stream utility level to support non-PostScript clients. (sdcte.c [1.3]:
+2001/05/30 17:38:45 rayjj)
+
+Move jpeg_decompress structure enum/reloc handler from interp level to
+stream utility level to support non-PostScript clients. (see also zfdcte.c
+and sdcte.c) (sdct.h [1.4]: 2001/06/08 07:08:44 rayjj)
+
+Adds a comment describing the function and return value of sreadbuf.
+(stream.c [1.14]: 2001/06/17 04:28:10 lpd)
+
+Adds extern_inline for including inline procedures in header files.
+(stdpre.h [1.4]: 2001/06/17 05:09:07 lpd)
+
+These changes were originally put into the GS_6_5 branch on 2001/03/13. They
+are needed for using the current version of teh graphics library with the
+PCL6 code. Short description of changes: stat_.h: Added definition of
+stat_is_dir for use with MSVC. Not used in Ghostscript. gsptype1.c: Changes
+in image_PaintProc. This routine is used in gs_makepixmappattern.
+gs_makepixmappattern is only used in test8 (in gslib.c - a test module) and
+gs_makebitmappattern_xform. gs_makebitmappatern_xform is not used in
+Ghostscript. It is used in pcl6. (stat_.h [1.6]: 2001/08/07 22:13:29
+dancoby)
+
+Makes the spprint* procedures use sputc rather than sputs for printing
+converted values. Speeds up one set of customer ps2pdf conversions by 2.5%.
+(spprint.c [1.4]: 2001/08/25 06:59:04 lpd)
+
+Adds a C implementation of the Arcfour encryption filter. This is a
+work-alike of the RC4 cipher used in PDF encryption. (sarc4.c [1.1],
+sarc4.h [1.1]: 2001/09/02 06:16:41 giles)
+
+adds a missing header file for e_rangecheck. (sarc4.c [1.2]: 2001/09/02
+06:27:18 giles)
+
+Corrects indenting, and adds another missing header. (sarc4.c [1.3],
+sarc4.h [1.2]: 2001/09/02 07:09:13 giles)
+
+Committing in . Modified Files: gs/src/gdevpdfm.c gs/src/sarc4.c
+gs/src/zcsdevn.c gs/src/zfile.c Some type casts added (sarc4.c [1.4]:
+2001/09/04 14:30:13 joukj)
+
+</pre><h2><a name="7.02-Library"></a>Library</h2><pre>
+
+Fixes problems:
+ - When copying a device, copy the static procs if needed before
+calling finish_copydevice, so that the correct finish_copydevice is used.
+(gsdevice.c [1.9]: 2001/04/12 08:45:02 ghostgum)
+ - Removing the dependence of graphic library on PS interpreter.
+Source Forge bug #415003. (gscsepr.c [1.10], gscspace.h [1.7]: 2001/04/20
+09:38:38 igorm)
+ - Removing the dependence of graphic library on PS interpreter.
+Source Forge bug #415003. (gscsepr.c [1.11]: 2001/04/20 10:07:48 igorm)
+ - Optimization for shading fill. The general path filling algorithm
+subdivides fill region with trapezoid or rectangle subregions and then
+paints each subregion with given color. If the color is shading, each
+subregion to be subdivided into areas of constant color. But with radial
+shading each area is a high order polygon, being subdivided into smaller
+subregions, so as total number of subregions grows huge. Faster processing
+is done here by changing the order of subdivision cycles : we first
+subdivide the shading into areas of constant color, then apply the general
+path filling algorithm (i.e. subdivide each area into trapezoids or
+rectangles), using the filling path as clip mask. Source Forge bug #414022.
+(gsptype2.c [1.5], gsptype2.h [1.3], gxfill.c [1.8]: 2001/05/10 18:35:14
+igorm)
+ - If the OutputFile name was not NULL terminated, the strcmp would
+fail in unpredictable ways. (gsdevice.c [1.10]: 2001/05/12 00:08:36 rayjj)
+ - dev_color_eq used wrong number of components for halftones. Source
+Forge bug #422534. (gsht1.c [1.3], gxcht.c [1.3]: 2001/05/12 14:51:52 igorm)
+ - Current code for /All separations marks all planes in the
+alternate color space, not the destination color space. This is wrong, but
+gx_concretize_Separation() doesn't have access to the destination device
+color space. This fix makes tint value 1 print as black in any alternate
+color space. It printed as white in DeviceCMYK before. Bug #423838
+(gscsepr.c [1.12]: 2001/05/25 13:54:01 alexcher)
+ - Prevent SEGV caused by freeing memory not owned. Variable 'code'
+was overwritten, losing the get_outline return code that was needed for the
+decision to free the glyph_string.data. Problem detected with PCL. Bug was
+introduced in rev 1.10. (gstype42.c [1.12]: 2001/05/31 04:34:23 rayjj)
+ - Include &lt;time.h&gt; as required by Debian systems with glibc
+2.2. Fixes SourceForge bugs 413747, 417180, 417181, 417182. (time_.h [1.3]:
+2001/06/07 21:04:52 raph)
+ - FunctionType 4 functions that contained conditionals (if/ifelse)
+would report the length of their symbolic definition incorrectly;
+FunctionType 4 functions that had to return their symbolic definition in
+pieces would loop forever. Fixes SourceForge bug #427191. (gsfunc4.c [1.6]:
+2001/07/04 01:23:46 lpd)
+ - Changes clip logic in gx_image_cached_char() to affect the imaging
+device, so that clipping is reliably effective. Fixes SF bug #433821 (and
+probably others). (gxccache.c [1.5]: 2001/07/05 20:36:55 raph)
+ - Removes duplicate rc_decrement_only() in
+pdf14_begin_typed_image(), so that the marking device is now deallocated
+once. Fixes SourceForge bug #434705. (gdevp14.c [1.3]: 2001/07/05 23:21:00
+raph)
+ - Prevent non-persistent name_arrays of size==0 from causing a
+VMerror if alloc of size 0 returns a NULL. Detected with
+SeparationColorNames from the PCL code. (gscparam.c [1.7]: 2001/07/06
+17:02:25 rayjj)
+ - If the FontMatrix of a CFF CIDFont was the default [0.001 0 0
+0.001 0 0], it was not written, causing the FontMatrices of the subfonts to
+be scaled by 1000. (The Adobe documentation isn't at all clear about this.)
+Fixes SourceForge bug #428595. (gdevpsf2.c [1.14]: 2001/07/07 06:28:08 lpd)
+ - Before processing an image that uses the current color, call
+gs_state_color_load to ensure that if the current color is a pattern, the
+pattern is loaded. (This parallels existing code used for filling paths and
+processing text.) This prevents a SEGV caused when pdfwrite dereferenced a 0
+pointer to pdc-&gt;colors.pattern.p_tile. Fixes SourceForge bug #422089 for
+Artifex Customer #1110. (gsimage.c [1.4]: 2001/07/10 22:04:20 lpd)
+ - The algorithm for scaling down user coordinates to fall within
+Acrobat Reader's limitations didn't work properly for stroked paths with
+anisotropic CTMs, possibly producing large coordinates that led Acrobat (but
+not Ghostscript) to display the resulting file incorrectly. Fixes
+SourceForge bug #440476. (gdevvec.c [1.12], gdevvec.h [1.7]: 2001/07/12
+03:28:02 lpd)
+ - -sOutputFile=%stdout handling was broken by rev. 1.4 is fixed by
+giving priority to iodevices when there is a leading %, but if the iodevice
+is not recognized, attempting to parse as a format. Fix for SourceForge bugs
+436895 and 428738, Artifex customer #680 (gsdevice.c [1.11]: 2001/07/12
+14:10:55 rayjj)
+ - gp_open_scratch_file concatenated the temporary directory name
+with the prefix even if the prefix was an absolute path; also, it didn't
+check the length of the final file name, possibly leading to memory
+corruption. (gp_unifs.c [1.6]: 2001/07/15 13:57:50 lpd)
+ - An incorrect optimization in the conversion of Type 1 to Type 2
+CharStrings could cause character shapes to be mangled. This probably only
+affected embedded fonts in PDF output. Fixes SourceForge #444374.
+(gdevpsfx.c [1.9]: 2001/07/26 03:04:51 lpd)
+ - Acrobat Reader would not accept embedded TrueType fonts with a
+zero-length glyf table. Fixes SourceForge #429156. (gdevpsft.c [1.8]:
+2001/07/30 07:03:18 lpd)
+ - An embedded CFF font could not be larger than 64K. Fixes
+SourceForge #445400. (gdevpsf2.c [1.15]: 2001/07/31 06:39:06 lpd)
+ - For CIEBasedDEF(G) color spaces the interpolated values from the
+Table need to be scaled to the range given by RangeABC. Fixes SourceForge
+bug #440278 reported by Artifex customer #10. (gsciemap.c [1.6]: 2001/08/03
+15:26:35 rayjj)
+ - Correct a problem with white lines appearing in an image at or
+near band boundaries. Problem caused by different handling for the last
+image pixel at a band boundary versus the remaining pixels. Replaced it with
+uniform handling. Fixes SourceForge bug #436899 reported by Artifex customer
+#150. Also included are three lines of source code clean up in the same
+section. (gxicolor.c [1.3]: 2001/08/06 21:22:31 dancoby)
+ - Writing a Type 2 font subset with undefined glyphs in the Encoding
+produced invalid output. Fixes SourceForge #451399. (gdevpsf.h [1.10],
+gdevpsfu.c [1.7]: 2001/08/16 13:36:37 lpd)
+ - The problem was a rangecheck error being reported in
+.setdevicenspace with PDF files. The cause of the problem was not allowing
+multiple copies of the name /None in DeviceN colorant specification. This is
+the first of two fixes for SF bugs 427165 (customer #1110) and 438682.
+(gscdevn.c [1.6], gscspace.h [1.8]: 2001/08/21 23:52:36 dancoby)
+ - Most of the Type 1 hinting code was executed even when hinting was
+disabled. Part 2 of a two-part fix for SourceForge #451456.
+(gxhint3.c [1.3]: 2001/08/29 19:04:55 lpd)
+ - Quark Xpress turns off garbage collection with -2 vmreclaim when
+embedding EPS files which can lead to rampant allocation that is only
+reclaimed when GC is reenabled. When the GC is disabled, reduce the
+threshold from 2 Gb to 8 Mb. Fixes SourceForge bugs: 444370 and 438676.
+(gsalloc.c [1.10]: 2001/09/05 17:54:31 rayjj)
+ - Fixes some typos in the comment for FORCE_GC_LIMIT.
+(gsalloc.c [1.11]: 2001/09/05 18:03:39 lpd)
+ - Copying a parameter list failed to copy persistent aggregates if
+the target list used a different allocator from the source list, possibly
+causing crashes at 'restore'. Fixes SourceForge #461007. (gsparamx.c [1.4]:
+2001/09/14 04:23:11 lpd)
+ - The sin and cos operators in Type 4 (PostScript Calculator)
+Functions expected their argument in radians, not degrees. (gsfunc4.c [1.7]:
+2001/09/17 06:01:12 lpd)
+ - Fix for MS-Windows graphics library. Remove references to
+interpreter from gp_check_interrupts function in library. Make gslib.c
+access gs_stdin not stdin. Correct the build paths for graphics devices. Add
+missing graphics devices. (gslib.c [1.5]: 2001/09/22 07:07:02 ghostgum)
+
+Committing in . Modified Files: gs/icclib/icc.c gs/src/gdevpdf.c
+gs/src/gp_vms.c gs/src/gsnogc.c gs/src/icclib.mak gs/src/openvms.mmk
+gs/src/x_.h Added Files: gs/src/vms_x_fix.h Patches for OpenVMS
+(gsnogc.c [1.7]: 2001/04/20 09:56:22 joukj)
+
+Changes gp_open_scratch_file() to use mkstemp() rather than mktemp() on gcc
+builds, which avoids warnings. Adds CAPOPT variable to unix-gcc.mak to
+select which function is used, so that builds will still succeed on systems
+that don't have mkstemp(). (gp_unifs.c [1.5]: 2001/05/07 19:05:46 jackiem)
+
+This fixes a minor omission that prevents ghostscript from building on at
+least some platforms. After an #ifndef, a #define isn't done.
+(gsptype2.h [1.4]: 2001/05/11 23:12:11 jackiem)
+
+fix: If the ICC profile fails to load completely, or is missing a WhitePoint
+a valid default is needed to prevent a divide by zero. The WhitePoint is the
+same as the ICC default illuminant, D50. SourceForge bug 432130 for Artifex
+customer #150 as well as bug 427156, customers #880 and #1110 and bug
+414984. (gsicc.c [1.3]: 2001/06/12 15:32:20 rayjj)
+
+If an ICC color space failed to load, Acrobat Reader uses the alternate
+color space. Previous implementation ignored errors during load and used the
+partial ICC space. This change signals an error and uses the alternate space
+by catching the error in a stopped context in the interpreter.
+(gsicc.c [1.4]: 2001/06/12 16:02:39 rayjj)
+
+Patch from Mr. Toshiya Suzuki : Implementing multi-dimensional CID ranges,
+and fixing bugs about decoding text string with CID font : (1) when GS
+consumes undefined byte sequence (which cannot be mapped to some glyphs), GS
+aborts. (2) when selected CID font lacks the glyph for requested CID, GS
+aborts. (3) "notdefrange" defines SINGLE CID for undefined byte sequences in
+specified range, but current GS implementation take it as an offset to
+calculate MULTIPLE CID. (4) "cidrange" operators accept only full range
+specification (&lt;0000&gt; to &lt;FFFF&gt;) or 8 bit width range
+(&lt;xxyy&gt; to &lt;xxzz&gt;). Source Forge bug #415163. (gdebug.h [1.3],
+gsfcmap.c [1.14], gsmisc.c [1.12], gxfcmap.h [1.8]: 2001/06/16 19:02:32
+igorm)
+
+Notes that the 'foreign' member of the vm_spaces.memories allocator array is
+not used (always zero). (gsgc.h [1.3]: 2001/06/17 04:03:52 lpd)
+
+Makes embedded CFF fonts in PDF files omit the FontBBox if it is [0 0 0 0].
+This should only be a minor optimization, but SourceForge bug #428595 claims
+that Acrobat Reader cares. (gdevpsf2.c [1.13]: 2001/07/06 05:17:31 lpd)
+
+Changed debugging flag variables to const. (gshtscr.c [1.6],
+gsmdebug.h [1.3], gxchar.c [1.5], gxclimag.c [1.3], gxclip.c [1.4]:
+2001/08/01 16:21:34 stefan911)
+
+Changed fill patterns for unallocated memory to const (gsmemory.c [1.3]:
+2001/08/02 00:12:08 stefan911)
+
+These changes were originally put into the GS_6_5 branch on 2001/03/13. They
+are needed for using the current version of teh graphics library with the
+PCL6 code. Short description of changes: stat_.h: Added definition of
+stat_is_dir for use with MSVC. Not used in Ghostscript. gsptype1.c: Changes
+in image_PaintProc. This routine is used in gs_makepixmappattern.
+gs_makepixmappattern is only used in test8 (in gslib.c - a test module) and
+gs_makebitmappattern_xform. gs_makebitmappatern_xform is not used in
+Ghostscript. It is used in pcl6. (gsptype1.c [1.3]: 2001/08/07 22:13:29
+dancoby)
+
+Improves documentation for gs_string and gs_bytestring types; adds
+gs_free_[const_]bytestring procedures. (gsmemory.c [1.4], gsmemory.h [1.3],
+gstypes.h [1.3]: 2001/08/25 06:46:21 lpd)
+
+Speed up reading stdin when using callouts. Add platform-specific functions
+for reading stdin, to allow non-blocking reading of stdin if supported.
+Fixes Sourceforge bug #416973. (gp.h [1.7], unistd_.h [1.3]: 2001/09/15
+08:48:33 ghostgum)
+
+Improves poor performance of shadings in some cases, notably Coons01.ps.
+Long, thin triangles are now cut in half, rather than into four smaller
+triangles. Thus, the mesh is more regular. (gxshade4.c [1.5]: 2001/09/22
+16:15:43 raph)
+
+Updates version and date in documentation in preparation for 7.02
+pre-release. (gscdef.c [1.14]: 2001/09/22 16:26:22 raph)
+
+</pre><h2><a name="7.02-Other"></a>Other</h2><pre>
+
+Committing in . Modified Files: gs/icclib/icc.c gs/src/gdevpdf.c
+gs/src/gp_vms.c gs/src/gsnogc.c gs/src/icclib.mak gs/src/openvms.mmk
+gs/src/x_.h Added Files: gs/src/vms_x_fix.h Patches for OpenVMS
+(icclib/icc.c [1.4], vms_x_fix.h [1.1]: 2001/04/20 09:56:22 joukj)
+
+This is the fix for [ #425014 ] Compile error on AIX in icc.c. The control87
+is not defined on AIX systems (or probably on anything but x86 systems).
+This was suggested by Graeme Gill. (icclib/icc.c [1.5]: 2001/06/06 08:14:14
+dancoby)
+
+branches: 1.1.2; Adds initial support for macos. (gp_mac.h [1.1]: 2001/07/18
+20:20:50 giles)
+
+branches: 1.1.2; Adds the remaining macos source files (macsysstat.h [1.1],
+macsystypes.h [1.1]: 2001/07/18 20:27:39 giles)
+
+Adds generated macos build files to .cvsignore (.cvsignore [1.2]: 2001/07/31
+20:03:20 giles)
+
+<hr>
+
+<h1><a name="Version7.00"></a>Version 7.00 (2001-04-08)</h1>
+
+<p>
+This is the official 7.0 Ghostscript release. Most of the changes
+since 6.64 are quite minor, with the exception of one fix for ICC
+profile support.
+
+<p>
+All problems registered on SourceForge numbered 414588 or lower are
+closed, except for the following: 209350 215256, 219798, 221582,
+222534, 222727, 224056, 224863, 226477, 226584, 227684, 228180,
+228641, 230694, 231390, 404255, 404482, 405342, 406285, 406689,
+406696, 406979, 407342, 409887, 410371, 411753, 413114, 413669,
+413747, 414022, 414104, 414588.
+
+<h3><a name="7.00_Incompatible_changes"></a>Incompatible changes</h3>
+
+<pre>
+</pre>
+
+<h2><a name="7.00-Documentation"></a>Documentation</h2><pre>
+
+Updates broken and obsolete offsite links in the documenation.
+(doc/Devices.htm [1.28], doc/Fonts.htm [1.18], doc/Language.htm [1.30],
+doc/Lib.htm [1.11], doc/Maintain.htm [1.17], doc/Make.htm [1.29],
+doc/New-user.htm [1.26], doc/Projects.htm [1.29], doc/Ps2epsi.htm [1.12],
+doc/Readme.htm [1.27]: 2001/04/08 04:42:55 giles)
+
+Updates version number and date in preparation for 7.00 release.
+(doc/API.htm [1.9], doc/Bug-form.htm [1.20], doc/Bug-info.htm [1.17],
+doc/C-style.htm [1.17], doc/Commprod.htm [1.13], doc/Copying.htm [1.11],
+doc/Current.htm [1.11], doc/DLL.htm [1.13], doc/Develop.htm [1.38],
+doc/Devices.htm [1.29], doc/Drivers.htm [1.19], doc/Fonts.htm [1.19],
+doc/Helpers.htm [1.15], doc/History1.htm [1.11], doc/History2.htm [1.11],
+doc/History3.htm [1.11], doc/History4.htm [1.11], doc/History5.htm [1.13],
+doc/History6.htm [1.27], doc/Htmstyle.htm [1.16], doc/Install.htm [1.22],
+doc/Issues.htm [1.9], doc/Language.htm [1.31], doc/Lib.htm [1.12],
+doc/Maintain.htm [1.18], doc/Make.htm [1.30], doc/New-user.htm [1.27],
+doc/News.htm [1.84], doc/Projects.htm [1.30], doc/Ps-style.htm [1.11],
+doc/Ps2epsi.htm [1.13], doc/Ps2pdf.htm [1.29], doc/Psfiles.htm [1.19],
+doc/README [1.10], doc/Readme.htm [1.28], doc/Release.htm [1.35],
+doc/Source.htm [1.11], doc/Tester.htm [1.12], doc/Unix-lpr.htm [1.11],
+doc/Use.htm [1.27], doc/Xfonts.htm [1.11], doc/gs-vms.hlp [1.10],
+man/dvipdf.1 [1.8], man/font2c.1 [1.8], man/gs.1 [1.8], man/gslp.1 [1.8],
+man/gsnd.1 [1.8], man/pdf2dsc.1 [1.8], man/pdf2ps.1 [1.10],
+man/pdfopt.1 [1.8], man/pf2afm.1 [1.8], man/pfbtopfa.1 [1.9],
+man/printafm.1 [1.8], man/ps2ascii.1 [1.8], man/ps2epsi.1 [1.8],
+man/ps2pdf.1 [1.12], man/ps2pdfwr.1 [1.9], man/ps2ps.1 [1.15],
+man/wftopfa.1 [1.8]: 2001/04/09 06:20:01 raph)
+
+</pre><h2><a name="7.00-Procedures"></a>Procedures</h2><pre>
+
+Completes the change of default X directories to /usr/X11R6. Last commit on
+this was inadvertently incomplete. (unix-gcc.mak [1.19],
+unixansi.mak [1.14]: 2001/04/07 23:34:40 raph)
+
+Updates version number and date in preparation for 7.00 release.
+(version.mak [1.33]: 2001/04/09 06:20:03 raph)
+
+</pre><h2><a name="7.00-Utilities"></a>Utilities</h2><pre>
+
+Fixes problems:
+ - Correct the Unix executable handing of the display device formats
+of 8bit and 24bit per pixel RGB. (dxmain.c [1.3]: 2001/04/08 08:40:29
+ghostgum)
+ - Ghostscript should return to the caller, not exit. Remove exit()
+from gp_do_exit() for all platforms except VMS. (gp_dvx.c [1.4],
+gp_iwatc.c [1.5], gp_os9.c [1.4], gp_unix.c [1.5]: 2001/04/08 08:43:24
+ghostgum)
+
+</pre><h2><a name="7.00-PDF_writer"></a>PDF writer</h2><pre>
+
+Fixes problems:
+ - AR4 doesn't like fonts with empty FontBBox which happens when the
+font contains only space characters. Small BBox causes AR 4 to display a
+hairline. So we use the full BBox. (gdevpdfw.c [1.11]: 2001/04/08 14:12:56
+alexcher)
+
+</pre><h2><a name="7.00-Interpreter"></a>Interpreter</h2><pre>
+
+Fixes problems:
+ - Ghostscript should return to the caller, not exit. Remove exit()
+from gp_do_exit() for all platforms except VMS. (gs.c [1.6]: 2001/04/08
+08:43:24 ghostgum)
+ - Need a cast to (gs_memory_t *) to prevent errors on some
+compliers. Change provided by Nelson H. F. Beebe. (zfdctd.c [1.6]:
+2001/04/09 05:15:57 rayjj)
+ - Setting an ICC color space now invalidates the joint cache, so
+that TransformPQR gets computed. The profile is explicitly loaded so that
+the TransformPQR procedures have access to the white point. Also, the
+photometric interpretation of the hack for /All separation color spaces is
+reversed. Fixes Fixed_Original.pdf from Michael Jahn and Adobe tech note
+5002_EPSF_Spec.pdf. (zicc.c [1.2]: 2001/04/09 06:09:58 raph)
+
+Updates version number and date in preparation for 7.00 release.
+(lib/gs_init.ps [1.34]: 2001/04/09 06:20:03 raph)
+
+</pre><h2><a name="7.00-Library"></a>Library</h2><pre>
+
+Fixes problems:
+ - Setting an ICC color space now invalidates the joint cache, so
+that TransformPQR gets computed. The profile is explicitly loaded so that
+the TransformPQR procedures have access to the white point. Also, the
+photometric interpretation of the hack for /All separation color spaces is
+reversed. Fixes Fixed_Original.pdf from Michael Jahn and Adobe tech note
+5002_EPSF_Spec.pdf. (gscsepr.c [1.9], gsicc.c [1.2], gsicc.h [1.2]:
+2001/04/09 06:09:58 raph)
+
+</pre>
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 2001 artofcode LLC.
+All rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Htmstyle.htm b/Master/xemtex/doc/ghostscript/Htmstyle.htm
new file mode 100644
index 00000000000..05b4e82ef06
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Htmstyle.htm
@@ -0,0 +1,778 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>HTML coding and style guidelines for Ghostscript documentation</title>
+<!-- $Id: Htmstyle.htm,v 1.18.2.11.2.5 2003/05/17 14:39:00 giles Exp $ -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>HTML coding and style guidelines for Ghostscript documentation</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Introduction">Introduction</a>
+<li><a href="#Appearance">Appearance and contents</a>
+<ul>
+<li><a href="#Page_structure">Page structure</a>
+<li><a href="#Links_outside">Links to outside the Ghostscript documentation</a>
+<li><a href="#Images">Images and graphics</a>
+<li><a href="#index.html"><b><tt>index.html</tt></b></a>
+</ul>
+<li><a href="#Large_structure">HTML large structure</a>
+<ul>
+<li><a href="#HTML_head">HTML <b><tt>&lt;head&gt;</tt></b></a>
+<li><a href="#HTML_body">HTML <b><tt>&lt;body&gt;</tt></b></a>
+</ul>
+<li><a href="#Inner_structure">HTML inner structure</a>
+<ul>
+<li><a href="#Structuring_comments">Structuring comments</a>
+<li><a href="#Headers">Headers: <b><tt>&lt;Hn&gt;</tt></b></a>
+<li><a href="#Anchors">Anchors: <b><tt>&lt;a name="..."&gt;</tt></b></a>
+</ul>
+<li><a href="#Text">The presentation of text</a>
+<ul>
+<li><a href="#Text_sections">Sections of text</a>
+<ul>
+<li><a href="#Paragraphs">Paragraphs: <b><tt>&lt;p&gt;</tt></b></a>
+<li><a href="#Blockquote">Indented paragraphs: <b><tt>&lt;blockquote&gt;</tt></b></a>
+<li><a href="#Line_breaks">Explicit line breaks: <b><tt>&lt;br&gt;</tt></b></a>
+<li><a href="#Preformatted_text">Preformatted text: <b><tt>&lt;pre&gt;</tt></b></a>
+</ul>
+<li><a href="#Use_of_fonts">The use of different font faces</a>
+</ul>
+<li><a href="#Lists">Lists: <b><tt>&lt;ul&gt;, &lt;ol&gt;, &lt;dl&gt;</tt></b></a>
+<li><a href="#Tables">Tables: <b><tt>&lt;table&gt;</tt></b></a>
+<ul>
+<li><a href="#Readability">Readability for the user and the HTML writer</a>
+<li><a href="#Table_guidelines">Specific guidelines for coding tables</a>
+<li><a href="#Typical_table">HTML code for typical tables</a>
+</ul>
+<li><a href="#Unused_tags">Tags not used</a>
+<li><a href="#New_document">Creating a new document</a>
+<ul>
+<li><a href="#File_name">Name the new document in 8+3 format</a>
+<li><a href="#Plagiarize">Use an existing document as a model</a>
+<li><a href="#Readme_material">Write new references to go in <b><tt>Readme.htm</tt></b></a>
+<li><a href="#New_doc_other">Other considerations</a>
+</ul>
+<li><a href="#Miscellany">Miscellany</a>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="Introduction"></a>Introduction</h2>
+
+<p>
+The most important intention in casting Ghostscript's documentation into
+Hypertext Markup Language (HTML) from simple text form is to improve its
+usefulness greatly to those who use, install, and build Ghostscript:
+everything else is details. The wide spread of World Wide Web browsers now
+makes it possible to distribute documents which are not only readable as
+text, but also richly cross-linked as hypertext. Using hypertext through a
+browser can reduce the effort required to find and use the information
+people often need in order to use Ghostscript.
+
+<p>
+The remainder of this document expresses the guidelines used to create the
+HTML form of the Ghostscript documentation. The guidelines are intended to
+encourage
+
+<ul>
+<li>documents that are easy to read and understand in all of the most-used
+forms: on screen with a browser, printed by a browser, or as plain text;
+
+<li>correct HTML that conforms to prevailing standards;
+
+<li>consistent HTML coding among all Ghostscript's documents; and
+
+<li>HTML documents that are as simple as possible in light of their
+contents; free of difficult, little-used, or proprietary constructs; and
+easy to understand and modify.
+</ul>
+
+<p>
+Here are those guidelines.
+
+<hr>
+
+<h2><a name="Appearance"></a>Appearance and contents</h2>
+
+<p>
+What the user sees browsing the documentation, and what a document
+developer or editor sees working with it, are different. This section is
+about what the user sees.
+
+<h3><a name="Page_structure"></a>Page structure</h3>
+
+<p>
+A Ghostscript document in HTML form should consist of
+
+<ol>
+<li>a visual header containing
+<ol type=a>
+<li>a conspicuous highlighted headline;
+<li>a table of contents;
+<li>"hints": references to other useful documents, always including
+<a href="Readme.htm">Readme.htm</a>;
+</ol>
+<li>the substantive contents;
+<li>a visual trailer consisting entirely of
+<ol type=a>
+<li>standard copyright and licensing text;
+<li>the Ghostscript version number; and
+<li>the date when the document was last modified.
+</ol>
+</ol>
+
+<p>
+This document is an example of this standard visible structure. Also see
+below about "<a href="#Structuring_comments">Structuring comments</a>" in
+HTML source code.
+
+<p>
+Where it makes sense to modify the standard structure to make the document
+more usable, do that. See
+<a href="Readme.htm"><b><tt>Readme.htm</tt></b></a> for an example: the
+introductory material at the beginning of the visible header, before the
+table of contents.
+
+<h3><a name="Links_outside"></a>Links to outside the Ghostscript documentation</h3>
+
+<p>
+Links to sites and documents outside the ghostscript distribution
+must carry the <code>class="offsite"</code> attribute and value. This signals special
+formatting to the stylesheet to assist users reading offline.
+
+<p>
+Avoid gratuitous commercial links; for instance, link the title of a book
+to its publisher, not to one particular on-line bookseller. See
+<a href="Language.htm#Capabilities"><b><tt>Language.htm</tt></b></a> for an
+example, the reference to the <em>PostScript Language Reference
+Manual</em>.
+
+<p>
+Similarly, where you have a choice, refer to free software rather than
+commercial products. See
+<a href="Make.htm#Third-party_libraries">Make.htm</a> for an example, the
+reference to <a href="Make.htm#Third-party_libraries">InfoZip
+<b><tt>unzip</tt></b></a> (where many commercial products provide similar
+functions).
+
+<h3><a name="Images"></a>Images and graphics</h3>
+
+<p>
+Use no graphics or images. The documents are text-only, so nothing is lost
+when a document is converted into ASCII text. This is an explicit initial
+design goal of the HTML documentation.
+
+<h3><a name="index.html"></a><b><tt>index.html</tt></b></h3>
+
+<p>
+<b><tt>index.html</tt></b> is not a part of the visible Ghostscript
+documentation itself, but when it is placed with all the
+<b><tt>*.htm</tt></b> files in a directory and a browser refers to the
+directory name alone, most servers are configured to deliver a file named
+<b><tt>index.html</tt></b> by default. This one does nothing except
+immediately to open the introductory Ghostscript document
+<a href="index.html"><b><tt>Readme.htm</tt></b></a>. This is intended to
+make life easier for both webmasters and users.
+
+<hr>
+
+<h2><a name="Large_structure"></a>HTML large structure</h2>
+
+<h3><a name="HTML_head"></a>HTML <b><tt>&lt;head&gt;</tt></b></h3>
+
+<p>
+Besides the essential HTML structure elements, Ghostscript HTML document's
+<b><tt>&lt;head&gt;</tt></b> consists of three elements in this order:
+
+<ol>
+<li>A <b><tt>&lt;title&gt;</tt></b>, usually the same text as the
+<a href="#Headline">headline</a>
+
+<li>An RCS identification line giving the name of the file in an HTML
+comment:
+
+<blockquote>
+<!-- The next line must not contain the literal string $,I,d,:! -->
+<b><tt>&lt;!-- $Id</tt><tt>: </tt></b><b><em>{file name}</em></b><b><tt>.htm $ --&gt;</tt></b>
+</blockquote>
+
+<li>For documents converted from another form, an HTML comment line giving
+the name of the original file before it was edited and converted to HTML:
+
+<blockquote>
+<b><tt>&lt;!-- Originally: </tt></b><b><em>{file name}</em></b><b><tt> --&gt;</tt></b>
+</blockquote>
+</ol>
+
+<h3><a name="HTML_body"></a>HTML <b><tt>&lt;body&gt;</tt></b></h3>
+
+<p>
+A Ghostscript HTML document's <b><tt>&lt;body&gt;</tt></b> consists of five
+elements in this order:
+
+<ol>
+<li><a name="Headline"></a>The <b><em>headline</em></b> is conspicuous text
+at the top of the page, usually the same as the
+<a href="#Structure_head"><b><tt>&lt;title&gt;</tt></b></a> text. It is
+always in a table whose purpose is to provide a colored background using
+<b><tt>bgcolor</tt></b>, going the full width of the page:
+
+<blockquote>
+<b><tt>&lt;p&gt;&lt;table width="100%" border="0"&gt;<br>
+&lt;tr&gt;&lt;th align="center" bgcolor="#CCCC00"&gt;&lt;font size=6&gt;</tt></b><br>
+<b><em>{Text}</em></b><br>
+<b><tt>&lt;/font&gt;<br>
+&lt;/table&gt;</tt></b>
+</blockquote>
+
+<li><a name="Table_of_contents"></a>
+The <b><em>table of contents</em></b> consists of nested unordered
+lists <b><tt>&lt;ul&gt;</tt></b>, in most documents assembled strictly from
+the <b><tt>&lt;Hn&gt;</tt></b> headers. The levels of nesting in the table
+of contents correspond to the level numbers of the headers.
+
+<li>The <b><em>hint</em></b> is a short section suggesting where to look
+for other related information. With very few exceptions this always
+includes a reference and link to
+<a href="Readme.htm"><b><tt>Readme.htm</tt></b></a>, but may include other
+suggestions and references.
+
+<li>The substance of the document.
+
+<li>The <b><em>trailer</em></b> contains, in a small font size,
+
+<ol type=a>
+<li>the <b><em>copyright notice</em></b> and other legal boilerplate text
+<li>the <b><em>version number</em></b> of Ghostscript and the
+<b><em>date</em></b> when the file was last modified.
+</ol>
+</ol>
+
+<p>
+This document for an example of that structure.
+
+<hr>
+
+<h2><a name="Inner_structure"></a>HTML inner structure</h2>
+
+<h3><a name="Structuring_comments"></a>Structuring comments</h3>
+
+<p>
+Special comment lines within the HTML files mark internally the visible
+sections of the document. They make it easy for both document developers
+and programs to handle the HTML code. Each of these comments is exactly 80
+characters wide, and each important section of a document is bracketed by a
+unique beginning and ending pair. View the source code of this document
+for an example of these structuring comments. The sections they mark are:
+
+<ol>
+<li>the <b><em>visible header</em></b>
+<ol type=a>
+<li>the <a href="#Headline"><b><em>headline</em></b></a>
+<li>the <b><em>table of contents</em></b>
+<li>the "see also" <b><em>hints</em></b>
+</ol>
+<li>the <b><em>body</em></b>
+<li>the <b><em>trailer</em></b>
+</ol>
+
+<h3><a name="Headers"></a>Headers: <b><tt>&lt;Hn&gt;</tt></b></h3>
+
+<p>
+Give a header <b><tt>&lt;Hn&gt;</tt></b> this structure:
+
+<blockquote><b><tt>
+&lt;h2&gt;&lt;a name="Head_anchor"&gt;&lt;/a&gt;Header text&lt;/h2&gt;
+</tt></b></blockquote>
+
+<p>
+That is, the opening header tag, an anchor, the header text, and the
+closing tag.
+
+<p>
+Represent every header in the table of contents, linked
+<b><tt>&lt;a&nbsp;href="#..."&gt;</tt></b>...<b><tt>&lt;/a&gt;</tt></b> to
+the header. Of course, the headers are also convenient linkage points for
+references from other documents.
+
+<h3><a name="Anchors"></a>Anchors: <b><tt>&lt;a name="..."&gt;</tt></b></h3>
+
+<p>
+Give an anchor a name consisting only of letters, digits, dots
+("<b><tt>.</tt></b>"), hyphens ("<b><tt>-</tt></b>"), and underscores
+("<b><tt>_</tt></b>"), but not white space or other punctuation marks.
+This ensures that the name is readable and that an entire name always
+appears on a single line of HTML source both where it's defined and
+everywhere it's used, making it simple to find anchors by text search in
+the HTML source code.
+
+<p>
+Choose anchor names to be readable and meaningful in the HTML source code.
+For instance:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=bottom>
+ <th align=left>Use this form
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th align=left>... <b><em>NOT</em></b> this form
+<tr> <td colspan=3><hr>
+<tr valign=top> <td><b><tt>&lt;a&nbsp;name="Image_formats"&gt;&lt;/a&gt;</tt></b>
+ <td>&nbsp;
+ <td><b><tt>&lt;a&nbsp;name="Imgfts"&gt;&lt;/a&gt;</tt></b>
+</table></blockquote>
+
+<p>
+Anchors should be empty, that is
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=bottom>
+ <th align=left>Use this form
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th align=left>... <b><em>NOT</em></b> this form
+<tr> <td colspan=3><hr>
+<tr valign=top> <td><b><tt>&lt;a&nbsp;name="..."&gt;&lt;/a&gt;</tt></b>
+ <td>&nbsp;
+ <td><b><tt>&lt;a&nbsp;name="..."&gt;</tt></b><b><em>anything</em></b><b><tt>&lt;/a&gt;</tt></b>
+</table></blockquote>
+
+<p>
+<a name="Anchor_placement"></a>Place an anchor within a paragraph (indented
+paragraph, list item, head, etc.) and at its beginning.
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=bottom>
+ <th align=left>Use this form
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th align=left>... <b><em>NOT</em></b> this form
+<tr> <td colspan=3><hr>
+<tr valign=top> <td><b><tt>&lt;p&gt;&lt;a&nbsp;name="..."&gt;&lt;/a&gt;</tt></b>
+ <td>&nbsp;
+ <td><b><tt>&lt;p&gt;</tt></b><b><em>&nbsp;...text...&nbsp;</em></b><b><tt>&lt;a&nbsp;name="..."&gt;&lt;/a&gt;</tt></b>
+<tr valign=top> <td><b><tt>&lt;p&gt;&lt;a&nbsp;name="..."&gt;&lt;/a&gt;</tt></b>
+ <td>&nbsp;
+ <td><b><tt>&lt;a&nbsp;name="..."&gt;&lt;/a&gt;&lt;p&gt;</tt></b>
+<tr valign=top> <td><b><tt>&lt;li&gt;&lt;a&nbsp;name="..."&gt;&lt;/a&gt;</tt></b>
+ <td>&nbsp;
+ <td><b><tt>&lt;a&nbsp;name="..."&gt;&lt;/a&gt;&lt;li&gt;</tt></b>
+</table></blockquote>
+
+<hr>
+
+<h2><a name="Text"></a>The presentation of text</h2>
+
+<h3><a name="Text_sections"></a>Sections of text</h3>
+
+<h4><a name="Paragraphs"></a>Paragraphs: <b><tt>&lt;p&gt;</tt></b></h4>
+
+<p>
+Define unindented paragraphs with <b><tt>&lt;p&gt;</tt></b>, never with
+explicit line breaks <b><tt>&lt;br&gt;</tt></b>, and make them
+ragged-right, not right-filled or centered. Put the paragraph tag
+<b><tt>&lt;p&gt;</tt></b> on a line alone, except when it is
+<a href="#Anchor_placement">followed immediately by an anchor</a>.
+Don't place the anchor before the paragraph tag.
+
+<h4><a name="Blockquote"></a>Indented paragraphs: <b><tt>&lt;blockquote&gt;</tt></b></h4>
+
+<p>
+Define indented paragraphs with <b><tt>&lt;blockquote&gt;</tt></b>. Avoid
+elaborate nested indentation -- that is, more than two levels. It is
+generally a poor idea to try to make indentation carry too much weight of
+meaning for text, so use indentation simply to separate visual elements for
+easier reading.
+
+<h4><a name="Line_breaks"></a>Explicit line breaks: <b><tt>&lt;br&gt;</tt></b></h4>
+
+<p>
+Use explicit line breaks <b><tt>&lt;br&gt;</tt></b> sparingly, and never as
+a substitute for paragraph tags. Do use them in
+
+<ul>
+<li>multi-line addresses
+<li>formatted coding examples
+<li>table entries, sparingly
+</ul>
+
+<h4><a name="Preformatted_text"></a>Preformatted text: <b><tt>&lt;pre&gt;</tt></b></h4>
+
+<p>
+Use preformatted text <b><tt>&lt;pre&gt;</tt></b> exclusively for material
+that must be presented with exact spacing in a monospaced font, such as
+extended coding examples. Where extended preformatted text seems likely to
+be wider than a typical browser window, reduce the font size:
+
+<blockquote>
+<b><tt>&lt;font size="-1"&gt;&lt;pre&gt;</tt></b><br>
+<b><em>...&nbsp;Wide preformatted text&nbsp;...</em></b><br>
+<b><tt>&lt;/pre&gt;&lt;/font&gt;</tt></b>
+</blockquote>
+
+<h3><a name="Use_of_fonts"></a>The use of different font faces</h3>
+
+<p>
+Do not use named fonts. Use only standard markup to specify fonts, as
+shown in this table.
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Use of fonts</font><hr>
+<tr valign=bottom>
+ <th align=left>Tag
+ <td>&nbsp;&nbsp;&nbsp;
+ <th align=left>Used for
+<tr> <td colspan=3><hr>
+<tr valign=top> <td><b><tt>&lt;address&gt;</tt></b>
+ <td>&nbsp;
+ <td>Addresses in running text
+<tr valign=top> <td><b><tt>&lt;b&gt;</tt></b>
+ <td>&nbsp;
+ <td>Emphasis everywhere
+<tr valign=top> <td><b><tt>&lt;em&gt;</tt></b>
+ <td>&nbsp;
+ <td>Emphasis, usually in running text; with <b><tt>&lt;b&gt;</tt></b>, strong emphasis
+<tr valign=top> <td><b><tt>&lt;font size=</tt></b><b><em>N</em></b><b><tt>&gt;</tt></b>
+ <td>&nbsp;
+ <td>Table headings, extended <b><tt>&lt;pre&gt;</tt></b> examples
+<tr valign=top> <td><b><tt>&lt;pre&gt;</tt></b>
+ <td>&nbsp;
+ <td>Preformatted text (to control spacing)
+<tr valign=top> <td><b><tt>&lt;small&gt;</tt></b>
+ <td>&nbsp;
+ <td>Superscripts (smaller than <b><tt>&lt;font size="-1"&gt;</tt></b>)
+<tr valign=top> <td><b><tt>&lt;sup&gt;</tt></b>
+ <td>&nbsp;
+ <td>Superscripts
+<tr valign=top> <td><b><tt>&lt;tt&gt;</tt></b>
+ <td>&nbsp;
+ <td>With <b><tt>&lt;b&gt;</tt></b>, used for specific names of
+ code, programs, and data in running text, and in short examples
+</table></blockquote>
+
+<hr>
+
+<h2><a name="Lists"></a>Lists: <b><tt>&lt;ul&gt;, &lt;ol&gt;, &lt;dl&gt;</tt></b></h2>
+
+<p>
+Don't over-use lists: instead simply use clear wording in running text
+wherever possible. Use a list where the special formatting improves the
+material's clarity and readability.
+
+<p>
+Most simple lists should be unordered (bulleted) lists
+<b><tt>&lt;ul&gt;</tt></b>. Use an ordered (numbered or alphabetized) list
+<b><tt>&lt;ol&gt;</tt></b> only where the exact ordering or an exact count
+is important.
+
+<p>
+Where entries in a descriptive list <b><tt>&lt;dl&gt;</tt></b> contain
+extended descriptions <b><tt>&lt;dd&gt;</tt></b> -- especially if the
+descriptions contain paragraph breaks or tables -- improve the spacing
+between entries by making each entry a separate list. That is, enclose
+each entry in a separate list to give it more readable spacing, rather than
+putting many <b><tt>&lt;dt&gt;...&lt;dd&gt;...</tt></b> entries in a single
+list:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=bottom>
+ <th align=left>Use this form
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th align=left>... <b><em>NOT</em></b> this form
+<tr> <td colspan=3><hr>
+<tr> <td valign=top>
+ <b><tt>&lt;dl&gt;</tt></b><br>
+ <b><tt>&lt;dt&gt;</tt></b>Term<br>
+ <b><tt>&lt;dd&gt;</tt></b>Description<br>
+ <b><tt>&lt;p&gt;</tt></b>Another paragraph of description<br>
+ <b><tt>&lt;/dl&gt;</tt></b><br>
+ &nbsp;<br>
+ <b><tt>&lt;dl&gt;</tt></b><br>
+ <b><tt>&lt;dt&gt;</tt></b>Another term<br>
+ <b><tt>&lt;dd&gt;</tt></b>Another description<br>
+ <b><tt>&lt;/dl&gt;</tt></b><br>
+ ...<br>
+ <td>&nbsp;
+ <td valign=top>
+ <b><tt>&lt;dl&gt;</tt></b><br>
+ <b><tt>&lt;dt&gt;</tt></b>Term<br>
+ <b><tt>&lt;dd&gt;</tt></b>Description<br>
+ <b><tt>&lt;p&gt;</tt></b>Another paragraph of description<br>
+ <b><tt>&lt;dt&gt;</tt></b>Another term<br>
+ <b><tt>&lt;dd&gt;</tt></b>Another description<br>
+ ...<br>
+ <b><tt>&lt;/dl&gt;</tt></b>
+</table></blockquote>
+
+<p>
+This may be more work for the HTML writer, but the results for the reader
+are often much better.
+
+<hr>
+
+<h2><a name="Tables"></a>Tables: <b><tt>&lt;table&gt;</tt></b></h2>
+
+<h3><a name="Readability"></a>Readability for the user and the HTML writer</h3>
+
+<p>
+Format tables to be as readable as possible both with a browser and when
+converted to plain text. Browsers and converters of all kinds handle
+tables idiosyncratically, so there seems to be more art than science to
+reaching this end, which accounts for all the detail in the guidelines for
+tables: it is the reason for all the uses of background color
+<b><tt>bgcolor</tt></b>, horizontal rules <b><tt>&lt;hr&gt;</tt></b>, and
+explicit spacing.
+
+<p>
+Secondarily, arrange HTML source code for tables to be readable by the
+writer and developer.
+
+<h3><a name="Table_guidelines"></a>Specific guidelines for coding tables</h3>
+
+<ul>
+<li>Large tables have heads with the same background color as the page's
+<a href="#Headline">headline</a>. (Color is used only in tables and only
+this way, and it is the same color everywhere. In consideration of
+differences of color vision, the color is chosen so that normal black text
+contrasts with a brighter background, and the color itself against white.)
+
+<li>Do not use borders for tables; they almost invariably only clutter the
+appearance without adding to clarity, and they don't convert well to plain
+text. For visual spacing prefer white space.
+
+<li>Set cell padding and spacing to 0. Use explicit white space for
+readability, not implicit white space.
+
+<li>Begin the code for a new row <b><tt>&lt;tr&gt;</tt></b> on a new line.
+Generally use <b><tt>valign=top</tt></b> to control the placement of text
+in a row for readability with a browser or as plain text.
+
+<li>Code the first column of a row beginning on the same line as the
+beginning of the row, and then begin every other column on a separate line.
+Always precede <b><tt>&lt;td&gt;</tt></b> by a tab character.
+
+<li>Separate two columns of substantive material by a visually empty column
+of nonbreaking spaces for readability. Specify the width of this empty
+column in the first row, and in all other rows give that column a single
+nonbreaking space.
+
+<li>Use horizontal rules and visually empty rows for clarity, but
+sparingly. Be consistent with the existing tables.
+
+<li>Give every cell some contents: put a nonbreaking space in a visually
+empty cell as a placeholder.
+</ul>
+
+<h3><a name="Typical_table"></a>HTML code for typical tables</h3>
+
+<p>
+The HTML source code for a typical large table should look like this:
+
+<blockquote>
+<pre>&lt;table cellpadding=0 cellspacing=0&gt;
+&lt;tr&gt;&lt;th colspan=5 bgcolor="#CCCC00"&gt;&lt;hr&gt;&lt;font size="+1"&gt;Large&nbsp;table&lt;/font&gt;&lt;hr&gt;
+&lt;tr&gt; &lt;th align=left&gt;...
+ &lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
+ &lt;th align=left&gt;...
+ &lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
+ &lt;th align=left&gt;...
+&lt;tr&gt; &lt;td&gt;...
+ &lt;td&gt;&amp;nbsp;&amp;nbsp;
+ &lt;td&gt;...
+ &lt;td&gt;&amp;nbsp;
+ &lt;td&gt;...
+...
+&lt;/table&gt;
+</pre></blockquote>
+
+<p>
+The HTML source code for a typical small table should look like this:
+
+<blockquote>
+<pre>&lt;table cellpadding=0 cellspacing=0&gt;
+&lt;tr&gt; &lt;td&gt;...
+ &lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
+ &lt;td&gt;...
+&lt;tr&gt; &lt;td&gt;...
+ &lt;td&gt;&amp;nbsp;
+ &lt;td&gt;...
+...
+&lt;/table&gt;
+</pre></blockquote>
+
+<hr>
+
+<h2><a name="Unused_tags"></a>Tags not used</h2>
+
+<p>
+Don't use optional tags (ones not required by the HTML standard). These
+include <b><tt>&lt;/dd&gt;</tt></b>, <b><tt>&lt;/dt&gt;</tt></b>,
+<b><tt>&lt;/li&gt;</tt></b>, <b><tt>&lt;/p&gt;</tt></b>,
+<b><tt>&lt;/tr&gt;</tt></b>, <b><tt>&lt;/th&gt;</tt></b>, and
+<b><tt>&lt;/td&gt;</tt></b>.
+
+<hr>
+
+<h2><a name="New_document"></a>Creating a new document</h2>
+
+<h3><a name="File_name"></a>Name the new document in 8+3 format</h3>
+
+<p>
+If you create a new Ghostscript HTML document, choose for it a name in 8+3
+format for cross-platform compabitility:
+
+<blockquote>
+<b><em>Name</em></b><b><tt>.htm</tt></b>
+</blockquote>
+
+<p>
+where "<b><em>Name</em></b>" is no more than eight characters.
+
+<p>
+Begin the new file name with an upper-case letter like the existing names,
+which are in mixed case beginning with upper-case letters. Use spelling,
+not case, to distinguish between names: that is, don't create a new file
+whose name differs from an existing one only by the difference between
+upper and lower case, because some platforms can't store two such files.
+
+<h3><a name="Plagiarize"></a>Use an existing document as a model</h3>
+
+<p>
+To create an entirely new Ghostscript document, plagiarize this one for the
+<a href="#Structuring_comments">structuring comments</a> and other useful
+parts. Then, using the <a href="#Structuring_comments">structuring
+comments</a> as a guide to the sections of the document (in a text editor,
+search for "<b><tt>&lt;!--&nbsp;[</tt></b>"):
+
+<ul>
+<li>insert your own HTML title and <a href="#Headline">headline</a> (they
+should ordinarily be the same text) in place of the old ones;
+
+<li>insert your own RCS <b><tt>$Id</tt></b> in place of the old one in the
+<a href="#Structure_head">HTML header</a>;
+
+<li>delete the old entries in the <a href="#Table_of_contents">table of
+contents</a>;
+
+<li>keep the hint paragraph;
+
+<li>delete the entire contents section between the structuring comments;
+and
+
+<li>in the trailer, update the version number and date.
+</ul>
+
+<p>
+You now have a template document ready for new contents.
+
+<h3><a name="Readme_material"></a>Write new references to go in <b><tt>Readme.htm</tt></b></h3>
+
+<p>
+Write material to go in <a href="Readme.htm"><b><tt>Readme.htm</tt></b></a>
+that describes the new document, and links to it from two sections:
+
+<ul>
+<li>the <a href="Readme.htm#Theme_roadmap">thematic section</a> and
+
+<li>the descriptions of documentation
+<a href="Readme.htm#Ordered_roadmap">arranged by file name</a>.
+</ul>
+
+<h3><a name="New_doc_other"></a>Other considerations</h3>
+
+<p>
+Follow the other guidelines here, including which elements of the
+document should go in which section according to the structuring comments,
+and <a href="#Headers">anchoring every <b><tt>&lt;Hn&gt;</tt></b>
+header</a>. As you create text and headers, you will want to rebuild the
+<a href="#Table_of_contents">table of contents</a> from the headers
+occasionally.
+
+<p>
+Pete Kaiser &lt;<a href="mailto:kaiser@acm.org">kaiser@acm.org</a>&gt;
+wrote a package of GNU emacs functions specifically to handle Ghostscript
+HTML documentation, including functions to build a table of contents from
+headers in an HTML document, and to build and maintain tables and
+other structures built along the guidelines in this document.
+
+<hr>
+
+<h2><a name="Miscellany"></a>Miscellany</h2>
+
+<p>
+Use <b><tt>&lt;&gt;</tt></b> to bracket links to visible email addresses
+(<b><tt>mailto</tt></b>) in running text. This makes it easy for a user to
+cut and paste the entire name and address into another document or mailer,
+for instance
+
+<blockquote>
+Free Software Foundation &lt;<a href="mailto:gnu@gnu.org">gnu@gnu.org</a>&gt;
+</blockquote>
+
+<p>
+For exponentiation use "<b><tt>^</tt></b>" (not "**" or "exp()") plus
+writing the exponent as a superscript in <b><tt>&lt;small&gt;</tt></b>
+size:
+
+<blockquote>
+Something<b><tt>^&lt;sup&gt;</tt></b><b><tt>&lt;small&gt;</tt></b>exponent<b><tt>&lt;/small&gt;&lt;/sup&gt;</tt></b>.
+</blockquote>
+
+<p>
+to look like this:
+
+<blockquote>
+Something<b><tt>^</tt></b><sup><small>exponent</small></sup>
+</blockquote>
+
+<p>
+This is intended for readability both in a browser and as plain text.
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 2000 Aladdin Enterprises. All rights
+reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Humor.htm b/Master/xemtex/doc/ghostscript/Humor.htm
new file mode 100644
index 00000000000..2df2a61a1b4
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Humor.htm
@@ -0,0 +1,99 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Another Ghostscript interpreter</title>
+<!-- $Id: Humor.htm,v 1.3.2.1 2002/02/22 19:45:54 ray Exp $ -->
+<!-- Originally: humor.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Another Ghostscript interpreter</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>
+This document contains a humorous message, verbatim except for
+minor spelling corrections, received from a friend out in network-land.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<hr>
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<p>
+Regarding Ghostscript: I hate to say this to you but I've already
+implemented a Ghostscript interpreter. I'm happy to see that someone else
+has recognized the need dead people have for computers. I have included an
+example of the output of my Ghostscript at the end of this letter.
+
+<p>
+The interpreter is written in a language called cant-C, developed by Mr.
+Turing last year. The compiler is easily ported to any environment you
+care to name. I would be more than happy to send you a copy, but you must
+first contact my lawyer for this venture, Thomas Jefferson of Phila. Pa..
+(As a side note, Mr. Jefferson is very excited by Ghostscript. Look for
+The Declaration of Independance V1.1 RSN).
+
+<p>
+The possibilities for Ghostscript go far beyond Deathtop publishing, I'm
+sure you'll agree. I have contacted numerous authors who may be interested
+in using Ghostscript (Shakespeare, Hemingway, etc) and all have been very
+excited by what they've seen. (Shakespeare wants to write a modern Romeo
+and Juliette, called Romeo and Julio, the story of 2 gay hispanic men kept
+apart by their parents.)
+
+<p>
+Anyway, here is the Ghostscript example I promised. Feel free to show this
+to your friends and colleagues, I'm sure they'll all be suitably impressed.
+
+<pre>
+------Cut Here--------------------------------------
+------Cut Here--------------------------------------
+</pre>
+
+<!-- [2.0 end contents]
+==================================================== -->
+
+<!-- [3.0 begin visible trailer]
+=========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 2001 artofcode LLC. All rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+For more information about licensing, please refer to
+http://www.ghostscript.com/licensing/. For information on
+commercial licensing, go to http://www.artifex.com/licensing/ or
+contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+<p>
+<small>Ghostscript version 7.00, 8 April 2001
+</small>
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Install.htm b/Master/xemtex/doc/ghostscript/Install.htm
new file mode 100644
index 00000000000..060de229bae
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Install.htm
@@ -0,0 +1,540 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>How to install Ghostscript</title>
+<!-- $Id: Install.htm,v 1.26.2.13.2.6 2003/05/17 14:39:00 giles Exp $ -->
+<!-- Originally: install.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>How to install Ghostscript</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Overview">Overview of how to install Ghostscript</a>
+<li><a href="#Install_Unix">Installing Ghostscript on Unix</a>
+<ul>
+<li><a href="#Shared_object">Ghostscript as a shared object</a>
+<li><a href="#Install_GNULinux">Additional notes on GNU/Linux</a>
+</ul>
+<li><a href="#Install_Windows">Installing Ghostscript on MS Windows</a>
+<li><a href="#Install_VMS">Installing Ghostscript on OpenVMS</a>
+<li><a href="#Install_DOS">Installing Ghostscript on DOS</a>
+<li><a href="#Install_OS2">Installing Ghostscript on OS/2 2.x</a>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a> and "<a href="Make.htm">How to build Ghostscript from source
+code</a>".
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="Overview"></a>Overview of how to install Ghostscript</h2>
+
+<p>
+You must have three things to run Ghostscript:
+<ol>
+<li>The Ghostscript executable file; on some operating
+systems, more than one file is required. These are entirely
+platform-specific. See below for details.
+
+<li>Initialization files that Ghostscript reads in when it
+starts up; these are the same on all platforms.
+<ul>
+<li><b><tt>gs_</tt></b>*<b><tt>.ps</tt></b> unless Ghostscript was compiled
+using the "compiled initialization files" option. See the documentation of
+<a href="Psfiles.htm">PostScript files distributed with Ghostscript</a>.
+
+<li><b><tt>pdf_</tt></b>*<b><tt>.ps</tt></b> if Ghostscript was compiled
+with the ability to interpret Adobe Portable Document Format (PDF) files,
+that is, <b><tt>pdf.dev</tt></b> was included in
+<b><tt>FEATURE_DEVS</tt></b> when Ghostscript was built.
+
+<li><b><tt>Fontmap</tt></b> and <b><tt>Fontmap.GS</tt></b> (or the
+appropriate <b><tt>Fontmap.</tt></b><em>xxx</em> for your platform), unless
+you plan always to invoke Ghostscript with the <a
+href="Use.htm#FONTMAP_switch"><b><tt>-dNOFONTMAP</tt></b> switch</a>.
+</ul>
+
+<li>Fonts, for rendering text. These are platform-independent,
+but if you already have fonts of the right kind on your platform,
+you may be able to use those. See below for details. Also see the
+<a href="Fonts.htm">documentation on fonts</a>.
+</ol>
+
+<p>
+The <a href="Use.htm">usage documentation</a> describes the search
+algorithms used to find initialization files and font files. The
+per-platform descriptions that follow tell you where to install these
+files.
+
+<hr>
+
+<h2><a name="Install_Unix"></a>Installing Ghostscript on Unix</h2>
+
+<p>
+Ghostscript uses a GNU autoconf-based configure, build and install method
+common to many modern software packages. In general the following with suffice
+to build ghostscript:
+<blockquote><tt><b>
+ ./configure<br>
+ make
+</b></tt></blockquote>
+and then it may be installed in the default location with:
+<blockquote><b>
+ <tt>make install</tt>
+</b></blockquote>
+This last command may need to be performed with super user privileges.
+
+<p>
+You can set the installation directory by adding <tt>--prefix=<em>path</em></tt>
+to the configure invocation in the first step. The default prefix is <tt>/usr/local</tt>,
+which is to say the <tt>gs</tt> executable is installed as <tt>/usr/local/bin/gs</tt>.
+
+</p>A list of similar configuration options is available via <tt>./configure --help</tt>
+
+<p>
+For more detailed information on building Ghostscript see
+<a href="Make.htm#Unix_build">how to build Ghostscript on Unix</a> in
+the documentation on building Ghostscript, especially regarding information
+on using the older <a href="Make.htm#UNIX_makefile">hand edited makefile</a>
+approach. Whatever configuration method you use, execute "<b><tt>make
+install</tt></b>" to install the executable and all the required and
+ancillary files after the build is complete.
+
+<h3><a name="Unix_Fonts"></a>Fonts</h3>
+
+<p>
+The makefile installs all the files except fonts under the directory
+defined in the makefile as <b><tt>prefix</tt></b>. Fonts need to be
+installed separately. The fonts should be installed in
+<tt><em>{prefix}</em>/share/ghostscript/fonts</tt>.
+(That is, <tt>/usr/local/share/ghostscript/fonts/</tt> if you used the default
+configuration above.)
+
+<p>
+You can have ghostscript use other fonts on your system by adding
+entries to the fontmap or adding the directories to the GS_FONTMAP environment
+variable. See the <a href="Use.htm#Font_lookup">usage documentation</a> for more
+information.
+For example, many GNU/Linux distributions place fonts under <tt>/usr/share/fonts</tt>.
+
+<h3><a name="Shared_object"></a>Ghostscript as a shared object</h3>
+If you've built Ghostscript as a shared object, instead of '<tt>make install</tt>',
+you must use '<tt>make soinstall</tt>'.
+See <a href="Make.htm#Shared_object">how to build Ghostscript
+as a shared object</a> for more details.
+
+<h3><a name="Install_GNULinux"></a>Additional notes on GNU/Linux</h3>
+
+<p>
+For GNU/Linux, you may be able to install or upgrade Ghostscript from
+precompiled <a href="http://www.rpm.org">RPM</a> files using:
+
+<blockquote><b><tt>
+rpm -U ghostscript-N.NN-1.i386.rpm<br>
+rpm -U ghostscript-fonts-N.NN-1.noarch.rpm
+</tt></b></blockquote>
+
+<p>
+However, please note that we do not create RPMs for Ghostscript, and we take
+no responsibility for RPMs created by others.
+
+<hr>
+
+<h2><a name="Install_Windows"></a>Installing Ghostscript on MS Windows</h2>
+
+<p>
+We usually distribute Ghostscript releases for Windows as self-extracting
+archive files, since this is the most convenient form for users. These
+files can also be unpacked as if they were plain zip files.
+
+<p>
+The self-extracting archive is normally named
+<b><tt>gs###w32.exe</tt></b>,
+where ### is the release number (e.g., 650 for Ghostscript 6.50,
+700 for Ghostscript 7.00).
+
+<h3><a name="Windows4"></a>Windows 95/98 and NT 4</h3>
+
+<p>
+To install a self-extracting Ghostscript archive on Windows 95/98 or
+Windows NT4/2000, you need just this self-extracting archive file.
+Run this file to install Ghostscript.
+
+<p>
+Alternatively, if you have the zip file, unzip it to a temporary
+directory then run the included <b><tt>setupgs.exe</tt></b>.
+After the setup program has finished, remove the temporary files.
+
+<h3><a name="General_Windows"></a>General Windows configuration</h3>
+
+<p>
+The archive includes files in these subdirectories:
+
+<blockquote><b><tt>
+gs<em>#.##</em>\bin
+<br>gs<em>#.##</em>\lib
+<br>gs<em>#.##</em>\examples
+<br>gs<em>#.##</em>\doc
+<br>fonts
+</tt></b></blockquote>
+
+<p>
+The actual executable files, in the <b><tt>gs<em>#.##</em>\bin</tt></b>
+subdirectory, are:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <td><b><tt>GSWIN32.EXE</tt></b>
+ <td>&nbsp;
+ <td>32-bit Ghostscript using windows
+<tr valign=top> <td><b><tt>GSWIN32C.EXE</tt></b>
+ <td>&nbsp;
+ <td>32-bit Ghostscript using only the command line
+<tr valign=top> <td><b><tt>GSDLL32.DLL</tt></b>
+ <td>&nbsp;
+ <td>32-bit dynamic link library containing most of Ghostscript's
+functionality
+</table></blockquote>
+
+<p>
+See "<a href="#Install_DOS">Installing Ghostscript on DOS</a>" below for
+information about using Adobe Type Manager, Adobe Type Basics, or Adobe
+Acrobat fonts. If your system uses TrueType fonts, you can get them
+converted to a Ghostscript-compatible format at the time you select your
+"printer" by doing the following:
+
+<blockquote><ol>
+<li>Open control panel and double-click on the "Printers" icon.
+<li>Select your Postscript printer.
+<li>Choose Setup.
+<li>Choose Options.
+<li>Choose Advanced.
+<li>At the top of the dialog box you will see TrueType Fonts Send to
+Printer As: Choose <em>(drop-down menu)</em> Adobe Type 1.
+<li>Uncheck Use Printer Fonts for All TrueType Fonts and Use
+Substitution
+Table.
+<li>OK.
+<li>OK etc.
+</ol></blockquote>
+
+<p>
+That's it! Your TrueType fonts will automatically be downloaded in your
+PostScript file for Ghostscript to use.
+
+<p>
+For printer devices, the default output is:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <td>The default printer
+ <td>&nbsp;&nbsp;&nbsp;
+ <td>Win95 or WinNT
+<tr valign=top> <td>Prompt for a printer port
+ <td>&nbsp;
+ <td>Win32s (Windows 3.1)
+</table></blockquote>
+
+<p>
+This can be modified as follows.
+
+<blockquote>
+<dl>
+<dt><b><tt>-sOutputFile="LPT1:"</tt></b>
+<dd>Output to the named port.
+
+<dt><b><tt>-sOutputFile="%printer%printer name"</tt></b> (Windows 95, 98,
+NT or 2000)
+<dd>Output to the named printer. If your printer is named "HP DeskJet 500"
+then you would use <tt>-sOutputFile="%printer%HP DeskJet 500"</tt>.
+
+<dt><b><tt>-sOutputFile="\\spool\printer name"</tt></b> (Windows 3.1/Win32s)
+<dd>Output to the named printer. Note that this is NOT a UNC name.
+
+</dl>
+</blockquote>
+
+<p>
+If Ghostscript fails to find an environment variable, it looks for a
+registry value of the same name under the key
+
+<blockquote><b><tt>
+HKEY_CURRENT_USER\Software\GNU Ghostscript\#.##
+</tt></b></blockquote>
+
+<p>
+or if that fails, under the key
+
+<blockquote><b><tt>
+HKEY_LOCAL_MACHINE\SOFTWARE\GNU Ghostscript\#.##
+</tt></b></blockquote>
+
+<p>
+where #.## is the Ghostscript version number. This does not work under
+Win32s (that is, Windows 3.1, which doesn't support named registry
+values).
+
+<p>
+Ghostscript will attempt to load the Ghostscript dynamic link
+library <b><tt>GSDLL32.DLL</tt></b> in the following order:
+<ul>
+<li> In the same directory as the Ghostscript executable.
+<li> If the environment variable <b><tt>GS_DLL</tt></b> is defined,
+Ghostscript tries to load the Ghostscript dynamic link library (DLL)
+with the name given.
+<li> Using the standard Windows library search method: the directory
+from which the application loaded, the current directory, the Windows
+system directory, the Windows directory and the directories listed in
+the PATH environment variable.
+</ul>
+
+<p>
+The Ghostscript setup program will create registry values
+for the environment variables <b><tt>GS_LIB</tt></b>
+and <b><tt>GS_DLL</tt></b>.
+
+<h3><a name="Uninstall_Windows"></a>Uninstalling Ghostscript on Windows</h3>
+
+<p>
+To uninstall Ghostscript, use the Control Panel, Add/Remove Programs and
+remove "Ghostscript #.##" and "Ghostscript Fonts". (The entries may be
+called "Aladdin Ghostscript" or some other specifier rather than just
+"Ghostscript", depending on what version of Ghostscript was installed.)
+
+<hr>
+
+<h2><a name="Install_VMS"></a>Installing Ghostscript on OpenVMS</h2>
+
+<p>
+You need the file <b><tt>GS.EXE</tt></b> to run Ghostscript on OpenVMS, and
+installing Ghostscript on an OpenVMS system requires building it first:
+please read <a href="Make.htm#VMS_build">how to build Ghostscript on VMS</a>
+in the documentation on building Ghostscript.
+
+<p>
+The following installation steps assume that the Ghostscript directory is
+<b><tt>DISK1:[DIR.GHOSTSCRIPT]</tt></b>. Yours will almost certainly be in
+a different location so adjust the following commands accordingly.
+
+<ul>
+
+<li>Download the fonts and unpack them into
+<b><tt>DISK1:[DIR.GHOSTSCRIPT.LIB]</tt></b>.
+
+<li>Enable access to the program and support files for all users with:
+
+<blockquote><pre>
+$ set file/prot=w:re DISK1:[DIR]GHOSTSCRIPT.dir
+$ set file/prot=w:re DISK1:[DIR.GHOSTSCRIPT...]*.*
+</pre></blockquote>
+
+<li>Optionally, add the Ghostscript help instructions to your system wide
+help file:
+
+<blockquote><pre>
+$ lib/help sys$help:HELPLIB.HLB DISK1:[DIR.GHOSTSCRIPT.DOC]GS-VMS.HLP
+</pre></blockquote>
+
+<li>Lastly, add the following lines to the appropriate system wide or user
+specific login script.
+
+<blockquote><pre>
+$ define gs_exe DISK1:[DIR.GHOSTSCRIPT.BIN]
+$ define gs_lib DISK1:[DIR.GHOSTSCRIPT.EXE]
+$ gs :== $gs_exe:gs.exe
+</pre></blockquote>
+
+</ul>
+
+<p>
+If you have DECWindows/Motif installed, you may wish to replace the
+<b><tt>FONTMAP.GS</tt></b> file with <b><tt>FONTMAP.VMS</tt></b>. Read the
+comment at the beginning of the latter file for more information.
+
+<hr>
+
+<h2><a name="Install_DOS"></a>Installing Ghostscript on DOS</h2>
+
+<p>
+You need the files <b><tt>GS386.EXE</tt></b> and <b><tt>DOS4GW.EXE</tt></b>
+to run Ghostscript. You should install all the files except the fonts in
+<b><tt>C:\GS</tt></b>, and the fonts in <b><tt>C:\GS\FONTS</tt></b>.
+
+<p><a name="Use_platform_fonts_DOS"></a> If you have Adobe Type Manager
+(ATM) fonts installed on your system, and you wish to use them with
+Ghostscript, you may wish to replace the <b><tt>FONTMAP</tt></b> file with
+<b><tt>FONTMAP.ATM</tt></b>, and to add to the environment variable
+<b><tt>GS_LIB</tt></b> the name of the directory where the fonts are located
+(see below for more information about <b><tt>GS_LIB</tt></b>). Before you
+do this, please read carefully the license that accompanies the ATM fonts;
+we take no responsibility for any possible violations of such licenses.
+Similarly, if you have Adobe Type Basics, you may wish to replace
+<b><tt>FONTMAP</tt></b> with <b><tt>FONTMAP.ATB</tt></b>. Finally, if you
+have neither ATM nor ATB but you have Adobe Acrobat installed, you can use
+the Acrobat fonts in place of the ones provided with Ghostscript by adding
+the Acrobat fonts directory to <b><tt>GS_FONTPATH</tt></b> and removing
+these fonts from <b><tt>FONTMAP</tt></b>:
+
+<blockquote>
+Courier, Courier-Bold, Courier-BoldOblique, Courier-Oblique, Helvetica,
+Helvetica-Bold, Helvetica-BoldOblique, Helvetica-Oblique, Symbol, Times-Bold,
+Times-BoldItalic, Times-Italic, Times-Roman, ZapfDingbats
+</blockquote>
+
+<hr>
+
+<h2><a name="Install_OS2"></a>Installing Ghostscript on OS/2 2.x</h2>
+
+<p>
+The Ghostscript OS/2 implementation is designed for OS/2 2.1 or later. A
+few people have used it successfully under OS/2 2.0, but it has had very
+little testing. You need these files to run Ghostscript on OS/2:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <td><b><tt>GSOS2.EXE</tt></b>
+ <td>&nbsp;&nbsp;&nbsp;
+ <td>A text application that will run windowed or full screen
+<tr valign=top> <td><b><tt>GSDLL2.DLL</tt></b>
+ <td>&nbsp;
+ <td>A dynamic link library that must be in the same directory as
+ <b><tt>GSOS2.EXE</tt></b> or on the <b><tt>LIBPATH</tt></b>.
+<tr valign=top> <td><b><tt>GSPMDRV.EXE</tt></b>
+ <td>&nbsp;
+ <td>An "external driver" used by the "<b><tt>os2pm</tt></b>"
+ device, which is normally the default device and which displays
+ output in a Presentation Manager window;
+ <b><tt>GSPMDRV.EXE</tt></b> must be located in the same
+ directory as <b><tt>GSOS2.EXE</tt></b> or on the
+ <b><tt>PATH</tt></b>
+</table></blockquote>
+
+<p>
+<b><tt>GSOS2.EXE</tt></b>, <b><tt>GSDLL2.DLL</tt></b> and
+<b><tt>GSPMDRV.EXE</tt></b> are compiled using EMX/GCC 0.9d. You must have
+the EMX DLLs on your <b><tt>LIBPATH</tt></b>; they are available in a
+package <b><tt>emxrt.zip</tt></b> from many places on the Internet, so you
+can find the package by using a search engine or an ftp lookup service such
+as the one at
+
+<blockquote>
+<a href="http://ftpsearch.lycos.com/"
+class="offset">http://ftpsearch.lycos.com/</a>
+</blockquote>
+
+<p>
+The system menu of the Ghostscript Image window includes a "Copy" command
+to copy the currently displayed bitmap to the Clipboard.
+
+<p>
+OS/2 comes with some Adobe Type Manager fonts. If you wish to use these with
+Ghostscript, you should replace the <b><tt>FONTMAP</tt></b> file with
+<b><tt>FONTMAP.OS2</tt></b>, and add to the environment variable
+<b><tt>GS_LIB</tt></b> (see below for more information about
+<b><tt>GS_LIB</tt></b>) the name of the directory where the fonts are
+located, usually <b><tt>C:\PSFONTS</tt></b>. Before you do this, please
+read carefully the license that accompanies the ATM fonts; we take no
+responsibility for any possible violations of such licenses.
+
+<p>
+Since <b><tt>GSOS2.EXE</tt></b> is not a PM application, it cannot
+determine the depth of the PM display. You must provide this information
+using the <b><tt>-dBitsPerPixel</tt></b> option. Valid values are 1, 4, 8
+(the default), and 24.
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=bottom>
+ <th align=left>Use
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th align=left>For
+<tr> <td colspan=3><hr>
+<tr valign=top> <td><b><tt>-dBitsPerPixel=1</tt></b>
+ <td>&nbsp;
+ <td>VGA monochrome
+<tr valign=top> <td><b><tt>-dBitsPerPixel=4</tt></b>
+ <td>&nbsp;
+ <td>VGA standard
+<tr valign=top> <td><b><tt>-dBitsPerPixel=8</tt></b>
+ <td>&nbsp;
+ <td>SVGA 256 colors
+</table></blockquote>
+
+<p>
+A command file <b><tt>gspm.cmd</tt></b> containing the following line may
+be useful:
+
+<blockquote><b><tt>
+@c:\gs\gsos2.exe -Ic:/gs;c:/gs/fonts;c:/psfonts -sDEVICE=os2pm -dBitsPerPixel=8 -sPAPERSIZE=a4 %1 %2 %3 %4 %5 %6 %7 %8
+</tt></b></blockquote>
+
+<p>
+While drawing, the <b><tt>os2pm</tt></b> driver updates the display every 5
+seconds. On slow computers this is undesirable, and a different interval
+can be specified in milliseconds with the <b><tt>-dUpdateInterval</tt></b>
+option, with a default of <b><tt>-dUpdateInterval=5000</tt></b>; to disable
+update, use <b><tt>-dUpdateInterval=0</tt></b>.
+
+<p>
+Standard VGA is very slow because it uses double buffering to avoid bugs
+and because of 1-plane to 4-plane conversion; it's better to use a
+256-color display driver. Many display drivers have bugs which cause 1
+bit-per-pixel bitmaps to be displayed incorrectly.
+
+<p>
+<b><tt>GSOS2.EXE</tt></b> and <b><tt>GSPMDRV.EXE</tt></b> will stay in
+memory for the number of minutes specified in the environment variable
+<b><tt>GS_LOAD</tt></b>.
+
+<p>
+If you run <b><tt>GS386</tt></b> in the OS/2 2.0 or 2.1 DOS box, you must
+select the "ENABLED" setting for the DPMI_DOS_API option of the DOS box.
+<b><tt>GS386</tt></b> will not run with the "AUTO" setting.
+
+<p>
+For printer devices, output goes to the default queue. To print to a
+specified queue, use <b><tt>-sOutputFile=\\spool\NullLPT1</tt></b>, where
+<b><tt>NullLPT1</tt></b> is the queue's physical name.
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 2000 Aladdin Enterprises. All rights
+reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Issues.htm b/Master/xemtex/doc/ghostscript/Issues.htm
new file mode 100644
index 00000000000..6285337ecfb
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Issues.htm
@@ -0,0 +1,502 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Ghostscript Open Issues.</title>
+<!-- $Id: Issues.htm,v 1.15.2.13.2.5 2003/05/17 14:39:00 giles Exp $ -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Known limitations and minor bugs.</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<ul>
+<li><a href="#Known_Limitations">Known Limitations</a>
+<li><a href="#Minor_bugs">Minor bugs</a>
+<li><a href="#Driver_Issues">Specific Driver Issues</a>
+<li><a href="#Performance">Performance</a>
+<li><a href="#Differences_from_Adobe">Differences from Adobe Implementation</a>
+</ul>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Projects.htm">Development Projects list
+</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<p>
+There are many areas that might make Ghostscript more useful or minor bugs
+that we would like to investigate and possibly fix, but for which we don't
+have enough resources. These may or may not be addressed in future releases.
+<p>
+If you would like to take responsibility for any of these issues, please
+<a href="mailto:raph@artofcode.com">contact us</a>.
+<p>
+Additional comments on implementation approaches or project goals are in
+<I>italic type like this</I>.
+<hr>
+
+<h2><a name="Known_Limitations"></a>Known Limitations.</h2>
+
+<h3>bbox device doesn't allow min coords < 0.</h3>
+Adobe eps specification doesn't say that bbox values must be positive,
+and, for example Adobe Illustrator, can create EPS files with negative bboxes.
+In such case, Ghostscipt returns zero instead of proper negative number.
+<br>SourceForge Bug #202735 March 09, 2000.
+<p>
+<I>
+This might be able to be fixed by applying a large positive translation to
+the bbox CTM which would be subtracted from coordinates passed to the target
+device as well as from the results the bbox device reports.
+<p>
+If coordinates for the ImagingBBox[0] and [1] values, then negative
+values are handled, but this is not reliable since there are places in
+the graphics library that depend on first quadrant coordinates.
+</I>
+
+<h3>Error messages are too low level and confusing.</h3>
+
+<p>
+Although technically correct many error messages are confusing for
+end users. Some commonly reported examples are listed below.
+
+<p>
+When pdfwrite device cannot open the output file it fails with:
+<pre>**** Unable to open the initial device, quitting.</pre>
+
+When CIDFont-CMap pair required by PDF file is not available GS
+fails with:
+<pre>/undefinedresource in --findresource--</pre>
+
+<hr>
+<h2><a name="Minor_bugs"></a>Minor Bugs.</h2>
+
+<h3>PageSize cannot use packedarray</h3>
+PageSize doesn't accept packed array as an argument if the page size is
+adjusted, for instance, to the whole number of pixels. The following
+program
+<pre>
+%!
+/x 333.33333333 def /y 666.66666666 def
+
+<< /PageSize x y 2 packedarray >> setpagedevice
+(pached passed)== % fails
+%EOF
+</pre>
+fails with
+<pre>
+Error: /configurationerror in --setpagedevice--
+Additional information: [/PageSize [333.333344 666.666687]]
+</pre>
+
+<h3> Multiple encode filters in a pipeline fail.</h3>
+The following code fragment should output "3E>". It outputs nothing.
+<pre>
+%!PS
+(%stdout) (w) file
+/ASCIIHexEncode filter
+/ASCIIHexEncode filter
+closefile
+</pre>
+SourceForge bug #224134, December 2, 2000.
+
+<h3> Bad JPEG stream in PDF generated when source ends prematurely</h3>
+When GS converts the source image to JPEG stream in PDF file and the
+source data end prematurely, it generates bad JPEG stream.
+tiff2ps from libtiff distribution often generates such files.
+<p>
+One potential workaround is to use -dAutoFilterColorImages=false and
+-dColorImageFilter=/FlateEncode.
+<p>
+SourceForge bug #228808, Jan 15, 2000.
+<p>
+<I>
+JPEG stream writes image dimensions in JPEG header when the stream is created.
+When the source data end the dimensions are not updated. There may be other
+problems too.
+</I>
+
+<h3> Some attributes of Catalog object are lost during PDF to PDF conversion</h3>
+Dests, OpenAction, URI, PageMode, ViewerPreferences are lost during PDF to PDF
+conversion. Other attributes have not been checked.
+<p>
+<I>
+The loss happens diring PDF interpretation. GS can generate these attributes
+from pdfmark's.
+</I>
+<p>
+March 25, 2001.
+<h3>ps2pdf ignores transfer functions in shaded fill</h3>
+ps2pdf ignores transfer functions in the shaded fill but
+uses them for vector objects. The following sample program
+has 2 shaded fills and 2 rectangles that should have the
+same color as the left end of the shaded fill.
+<pre>
+
+ <</PageSize [612 200] /Policies<</PageSize 1>> >>setpagedevice
+ 612 1 scale
+ /grad
+ { gsave
+ 0 0 1 100 rectclip
+ <<
+ /ColorSpace [/DeviceCMYK]
+ /Domain [0 1]
+ /Coords [0 0 1 0]
+ /Extend [false false]
+ /Function
+ << /FunctionType 3
+ /Domain [ 0 1]
+ /Functions
+ [ <<
+ /FunctionType 2
+ /N 1
+ /C0 [ 0 0.5 0 0 ]
+ /Domain [ 0 1]
+ /C1 [0.5 0 0 0]
+ >> ]
+ /Bounds []
+ /Encode [0 1]
+ >>
+ /ShadingType 2
+ >> shfill
+
+ 0 0.5 0 0 setcmykcolor
+ 0 0 0.1 50 rectfill
+ grestore
+ } def
+
+ grad
+ {1 exch 2 div sub} settransfer
+ 0 100 translate
+ grad
+ showpage
+</pre>
+SourceForge Bug #232334, Feb 14, 2001.
+
+<h3>ResourceFileName gives wrong result with Font category.</h3>
+The following sequence:
+
+<pre>
+ /Font /Category findresource begin
+ /CharterBT-Roman 255 string ResourceFileName =
+ end
+</pre>
+
+Gives the results:
+<pre>
+ /Resource/Font/CharterBT-Roman
+</pre>
+
+This should be a valid platform specific file name and path such as:
+<pre>
+ f:/fonts/bchr.pfa
+</pre>
+SourceForge Bug #233403, Feb 21, 2001.
+<h3>GS doesn't handle names of separations with HalftoneType 5.</h3>
+PLRM3 says, that HalftoneType 5 may use user defined
+names of separations. Neither zht2.c nor cmd_put_drawing_color in
+gxclpath.c can handle this. GS chooses default halftone component
+for any non-standard separation name.
+<p>
+SourceForge Bug #406643, Mar 7, 2001.
+
+<h3> PDF 1.4 images don't deallocate all memory </h3>
+
+The pdf14_begin_typed_image() function in the PDF 1.4 device creates
+a marking device, but this is not freed on end_image. The garbage
+collector will free it, so it's not a real memory leak, but it would
+still be nicer to free it explicitly.
+
+<h3> </h3>
+
+<hr>
+
+<h2><a name="Driver_Issues"></a>Driver Issues.</h2>
+
+<h3> [ ] Missing text in landscape mode.</h3>
+Using GSWIN32C.EXE with djet500 to print a file in landscape mode
+on a HP 2000C, the first 3 characters on the left margin are missing.<br>
+When the postscript file is editted to use a larger offset (1st moveto
+parameter), the text appears ok.<br>
+When the postscript file is sent to a printer with a builtin postscript
+interpreter, it prints ok.
+<br>SourceForge Bug #206652.
+<p><I>
+A possible work around is to send the following
+postscript file to the printer prior to printing the problem
+file. This works but it leaves a .5" margin at the top
+and left which is may be ok for some uses.
+</I>
+<pre>
+
+%!PS-Adobe-2.0
+% Reset the offset and margins.
+<<
+ /PageOffset [-12 -18]
+ /Margins [0 0]
+ /.HWMargins [0 0 0 0]
+>>
+setpagedevice
+</pre>
+
+<I>
+This is an instance of the endless struggle with printer margins, especially
+for HP printers. The HP drivers are inconsistent as to whether the user space
+(0,0) should be the physical corner of the page (as it is in PostScript) or
+the corner of the printable area, and if the latterm whether the page should
+be clipped or scaled.
+</I>
+<p>
+
+<hr>
+
+<h2><a name="Performance"></a>Performance.</h2>
+
+<h3>Incremental loading for CIDFontType 2 and TrueType fonts.</h3>
+
+Entire TrueType outline data in CIDFontType 2 and TrueType fonts are
+loaded into memory at once. Incremental loading of the outline data is
+indispensable for practical use of Asian fonts.
+<p>
+There is one other type of CID-keyed font that should also be
+loaded incrementally: CFF CIDFontType0, i.e., a CIDFontType 0
+font represented using the compact binary CFF format. This is
+important because this is one of the two variants of Asian OpenType
+fonts (the other is essentially the same as TrueType). Ghostscript
+already supports both of these OpenType variants, but not with
+incremental loading.
+<p>
+SourceForge bug #223992, November 30, 2000.
+<p><I>
+We suggest that anyone who would like to work on this project
+start by looking at how CIDFontType 0 fonts do incremental loading
+(lib/gs_cidfn.ps and src/zfcid0.c). Probably much of this
+code can be also be used with CIDFontType 2 and TrueType fonts.
+</I>
+
+<hr>
+
+<h2><a name="Differences_from_Adobe"></a>Differences from Adobe Implementation.</h2>
+
+<h3>pdfwrite + TT font => Acrobat 3.x for Windows gives error</h3>
+
+Running ps2pdf12 on the file test1.ps produces a PDF on which Acrobat
+3.x for Windows complains about not being able to find or create a
+particular TrueType font that is embedded in the PDF file. However,
+Acrobat 3.x for other platforms, and Acrobat 4.x for all platforms,
+accepts the file.
+<p>
+SourceForge bug #201955, February 14, 2000.
+<p><I>
+Since Acrobat 3 is superseded by Acrobat 4 which is available at no
+charge, and the file produced by Ghostscript meets published PDF
+specification, this will most likely be left as is.
+</I>
+
+<h3> Inconsistent handling of /Orientation.</h3>
+PLRM says "The dictionary returned by currentpagedevice always
+contains an entry for every parameter supported by the device".
+GS prints both messages in the following program:
+
+<pre>
+%!
+currentpagedevice /Orientation known not
+{ (This printer does _not_ support Orientation.) =
+}
+if
+<</Orientation 1>> setpagedevice
+currentpagedevice /Orientation known
+{ (Err... wait... it does.) =
+}
+if
+%%EOF
+</pre>
+SourceForge bug #220967, October 31, 2000.
+<p><I>
+The handling of Orientation is a mess. The PLRM says quite explicitly
+that it is only supported for roll devices, where the page size
+alone doesn't give enough information to decide whether to rotate
+the page.
+<p>
+The reason that Ghostscript accepts it for other devices at all
+is twofold: displays are like roll media in that they don't have
+an inherent orientation, and almost none of the other Ghostscript
+devices actually specify their page sizes. Both of these reasons
+are now poorly motivated: displays should behave like
+portrait-orientation devices (albeit with variable page dimensions),
+rotating the image if the requested page width is greater than
+the height, and now that setpagedevice and the Resource machinery
+are fully implemented, all printer drivers should be updated
+to provide the paper size information. Once these fixes are made
+(which will probably have some repercussions other places in
+the code), Ghostscript will handle Orientation properly.
+<p>
+This should be addressed when the "setpagedevice in C" project is
+completed since part of this will require printer drivers to make
+page size information available to the setpagedevice logic.
+</I>
+
+<h3>Filesystem implementation differences.</h3>
+Adobe implementations often treat the filesystem as flat. This means that the
+path separator characters are not handled as special characters in filenames.
+The PLRM states that file names are implementation specific (section 3.8.2)
+and Ghostscript currently implements filenames that conform with the underlying
+operating system as is stated in this section about the %os% device. This
+can result from behaviour that is different from Adobe printer implementations.
+<br><br>
+<I>
+Current implementation is incompatible with most font installers. Installers
+expect that:
+<ul>
+"filenameforall" enumerates all files in all directories using the relative path name.
+Directory names, including . and .. are not enumerated
+</ul>
+<ul>
+characters not supported on the platform are encoded.
+</ul>
+<ul>
+"(w) file" operator creates directories if necessary.
+</ul>
+</I>
+
+<h3>Cannot load Adobe's fonts. </h3>
+The following program fails with Adobe fonts:
+
+<pre>
+(C*)
+{ cvn findfont pop
+} 255 string /Font resourceforall
+</pre>
+SourceForge Bug #226462, December 20, 2000.
+<p>
+<I>
+The 'findfont' operator and '/Font resourceforall' are very difficult to
+keep consistent, because the same logic algorithms must be implemented
+in two different ways. The problem is likely to be in lib/gs_fonts.ps,
+lib/gs_res.ps, and lib/gs_cidcm.ps.
+</I>
+<h3> There's no %ram% device.</h3>
+GS doesn't have %ram% device reguired on all Level 3 products.
+It is documented in PS Supplement 3010 and 3011 dated August 30, 1999
+<br>SourceForge Bug #226943, December 27, 2000.
+<p>
+<I>
+This should be implemented using the (disk) file system rather than
+actual RAM, at least initially, since that will be easy.
+<br>
+On Unix, it should be implemented with a directory /tmp/$$/ (where
+$$ is the process id), which Ghostscript should delete when it exits.
+</I>
+
+<h3> pdfwrite doesn't recognise the image type by content</h3>
+Currently pdfwrite uses JPEG compression for any 8 bit per component
+images >= 64 pixels in both dimensions.
+<p>
+<I>
+pdfwrite needs to be changed to use a reasonable algorithm for deciding
+between JPEG and Flate compression, probably based on sharp vs. smooth
+color transitions in the image; in case of uncertainty, it should use Flate.
+</I>
+<p>
+SourceForge Bug #226391, December 19, 2000.
+<p>
+
+
+<h3> ps2ascii can't handle incremental fonts</h3>
+ps2ascii fails with rangecheck on incremental fonts.
+Need to recognise incremental fonts and say that incremental
+fonts are impossible to convert to ASCII.
+<p>
+SourceForge Bug #441959 keeps good test data for this.
+<p>
+
+
+<h3> Buffering in input filters</h3>
+
+The following program prints differently to stdout on GS and Adobe :
+<p>
+<pre>
+%!
+/proc
+ { currentfile =string readline pop
+ dup ==
+ (%) anchorsearch { pop } if
+ } bind def
+/test
+ { //proc /ASCIIHexDecode filter
+ 3 string readstring pop ==
+ } bind def
+
+(start) ==
+
+test
+%31
+%32
+%33
+%34
+%35
+%36
+%37
+%38
+%39
+
+(stop) ==
+
+%%EOF
+</pre>
+<p>
+<I>
+Adobe fills entire input buffer of ASCIIHexDecode with procedure's output,
+before passing data to ASCIIHexDecode, and without knowledge how much data
+does ASCIIHexDecode want. GS does know the size of data requested,
+so as the procedure is called exact number of times. Thus, GS is more conservative.
+</I>
+<p>
+Anoter useful test to be made by repeating lines %31-%39 hundred times,
+without intermediate empty lines.
+<p>
+<h3> </h3>
+<p>
+
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 2000 artofocode LLC. All rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Language.htm b/Master/xemtex/doc/ghostscript/Language.htm
new file mode 100644
index 00000000000..b47f003bec9
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Language.htm
@@ -0,0 +1,1897 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Ghostscript and the PostScript language</title>
+<!-- $Id: Language.htm,v 1.34.2.16.2.5 2003/05/17 14:39:00 giles Exp $ -->
+<!-- Originally: language.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Ghostscript and the PostScript language</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Capabilities">Ghostscript's capabilities in relation to PostScript</a>
+<li><a href="#Implementation_limits">Implementation limits</a>
+<ul>
+<li><a href="#Architectural_limits">Architectural limits</a>
+<li><a href="#Typical_memory_limits">Typical memory limits in LanguageLevel 1</a>
+<li><a href="#VM_consumption">Other differences in VM consumption</a>
+</ul>
+<li><a href="#Additional_operators">Additional operators in Ghostscript</a>
+<ul>
+<li><a href="#Graphics_and_text">Graphics and text operators</a>
+<ul>
+<li><a href="#Transparency">Transparency</a>
+<ul>
+<li><a href="#Transparency_graphics_state_operators">Graphics state operators</a>
+<li><a href="#Transparency_rendering_stack_operators">Rendering stack operators</a>
+<li><a href="#Transparency_ImageType">New ImageType</a>
+</ul>
+<li><a href="#Graphics_state">Other graphics state operators</a>
+<li><a href="#Path">Path operators</a>
+<li><a href="#Painting">Painting operators</a>
+<li><a href="#Character">Character operators</a>
+</ul>
+<li><a href="#Other">Other operators</a>
+<ul>
+<li><a href="#Mathematical">Mathematical operators</a>
+<li><a href="#Dictionary">Dictionary operators</a>
+<li><a href="#String">String and name operators</a>
+<li><a href="#Relational">Relational operators</a>
+<li><a href="#File">File operators</a>
+<li><a href="#Virtual_memory">Virtual memory operators</a>
+<li><a href="#Miscellaneous">Miscellaneous operators</a>
+<li><a href="#Device">Device operators</a>
+</ul>
+</ul>
+<li><a href="#Filters">Filters</a>
+<ul>
+<li><a href="#Standard_filters">Standard filters</a>
+<li><a href="#Non_standard_filters">Non-standard filters</a>
+<li><a href="#Unstable_filters">Unstable filters</a>
+</ul>
+<li><a href="#Device_parameters">Device parameters</a>
+<li><a href="#User_parameters">User parameters</a>
+<li><a href="#Miscellaneous_additions">Miscellaneous additions</a>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="Capabilities"></a>Ghostscript's capabilities in relation to PostScript</h2>
+
+<p>
+The Ghostscript interpreter, except as noted below, is intended to execute
+properly any source program written in the (LanguageLevel 3)
+<b>PostScript</b> language as defined in the <cite>PostScript
+Language Reference, Third Edition</cite> (ISBN 0-201-37922-8) published by
+Addison-Wesley in mid-1999. However, the interpreter is configurable in
+ways that can restrict it to various subsets of this language.
+Specifically, the base interpreter accepts the Level 1 subset of the
+PostScript language, as defined in the first edition of the <cite>PostScript
+Language Reference Manual</cite> (ISBN 0-201-10174-2) Addison-Wesley 1985,
+plus the file system, version 25.0 language, and miscellaneous additions
+listed in sections A.1.6, A.1.7, and A.1.8 of the Second Edition
+respectively, including allowing a string operand for the
+"<b><tt>status</tt></b>" operator. The base interpreter may be configured
+(see the <a href="Make.htm">documentation on building Ghostscript</a> for
+how to configure it) by adding any combination of the following:
+
+<ul>
+<li>The ability to process PostScript Type 1 fonts. This facility is
+normally included in the interpreter.
+
+<li>The CMYK color extensions listed in section A.1.4 of the Second Edition
+(including <b><tt>colorimage</tt></b>). These facilities are available
+only if the <b><tt>color</tt></b>, <b><tt>dps</tt></b>, or
+<b><tt>level2</tt></b> feature was selected when Ghostscript was built.
+
+<li>The Display PostScript extensions listed in section A.1.3 of the Second
+Edition, but excluding the operators listed in section A.1.2. These
+facilities are available only if the <b><tt>dps</tt></b> feature or the
+<b><tt>level2</tt></b> feature was selected when Ghostscript was built.
+
+<li>The composite font extensions listed in section A.1.5 of the Second
+Edition, and the ability to handle Type 0 fonts. These facilities are
+available only if the <b><tt>compfont</tt></b> feature or the
+<b><tt>level2</tt></b> feature was selected when Ghostscript was built.
+
+<li>The ability to load TrueType fonts and to handle PostScript Type 42
+(encapsulated TrueType) fonts. These facilities are available only if the
+<b><tt>ttfont</tt></b> feature was selected when Ghostscript was built.
+
+<li>The PostScript Level 2 "filter" facilities except the
+<b><tt>DCTEncode</tt></b> and <b><tt>DCTDecode</tt></b> filters. These
+facilities are available only if the <b><tt>filter</tt></b>,
+<b><tt>dps</tt></b>, or <b><tt>level2</tt></b> feature was selected when
+Ghostscript was built.
+
+<li>The PostScript Level 2 <b><tt>DCTEncode</tt></b> and
+<b><tt>DCTDecode</tt></b> filters. These facilities are available only if
+the <b><tt>dct</tt></b> or <b><tt>level2</tt></b> feature was selected when
+Ghostscript was built.
+
+<li>All the other PostScript Level 2 operators and facilities listed in
+section A.1.1 of the Second Edition and not listed in any of the other
+A.1.n sections. These facilities are available only if the
+<b><tt>level2</tt></b> feature was selected when Ghostscript was built.
+
+<li>All PostScript LanguageLevel 3 operators and facilities listed in the
+Third Edition, except as noted below. These facilities are available only
+if the <b><tt>psl3</tt></b> feature was selected when Ghostscript was built.
+
+<li>The ability to recognize DOS EPSF files and process only the PostScript
+part, ignoring bitmap previews or other information. This facility is
+available only if the <b><tt>epsf</tt></b> feature was selected when
+Ghostscript was built.
+</ul>
+
+<p>
+Ghostscript currently does not implement the following PostScript
+LanguageLevel 3 facilities:
+
+<ul>
+<li>Native <b><tt>Separation</tt></b> and <b><tt>DeviceN</tt></b> color
+spaces -- the alternate space is always used.
+
+<li>Settable <b><tt>ProcessColorModel</tt></b> for page devices, except for
+a very few special devices.
+
+<li><b><tt>IODevice</tt></b>s other than <b><tt>%stdin</tt></b>,
+<b><tt>%stdout</tt></b>, <b><tt>%stderr</tt></b>, <b><tt>%lineedit</tt></b>,
+<b><tt>%statementedit</tt></b>, <b><tt>%os%</tt></b>, and (if configured)
+<b><tt>%pipe%</tt></b>.
+</ul>
+
+<p>
+Ghostscript can also interpret files in the Portable Document Format (PDF)
+1.3 format defined in the <a
+href="http://partners.adobe.com/asn/developer/PDFS/TN/PLRM.pdf"><em>Portable
+Document Format Reference Manual</em> Version 1.3</a> of March 11, 1999,
+distributed by <a href="http://www.adobe.com/">Adobe Systems
+Incorporated</a>, except as noted below. This facility is available only if
+the <b><tt>pdf</tt></b> feature was selected when Ghostscript was built.
+
+<p>
+Ghostscript currently does not implement the following PDF 1.3 facilities:
+
+<ul>
+<li>Native <b><tt>Separation</tt></b> and <b><tt>DeviceN</tt></b> color
+spaces, as noted above for PostScript.
+
+<li>Native <b><tt>ICCBased</tt></b> color spaces -- these too always use the
+alternate space.
+</ul>
+
+<p>
+Ghostscript also includes a number of
+<a href="#Additional_operators">additional operators</a> defined below that
+are not in the PostScript language defined by Adobe.
+
+<hr>
+
+<h2><a name="Implementation_limits"></a>Implementation limits</h2>
+
+<p>
+The implementation limits show here correspond to those in Tables B.1 and
+B.2 of the Second and Third Editions, which describe the quantities fully.
+Where Ghostscript's limits are different from those of Adobe's
+implementations (as shown in the Third Edition), Adobe's limits are also
+shown.
+
+<h3><a name="Architectural_limits"></a>Architectural limits</h3>
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=7 bgcolor="#CCCC00"><hr><font size="+1">Architectural limits (corresponds to Adobe table B.1)</font><hr>
+<tr valign=bottom>
+ <th align=left>Quantity
+ <td>&nbsp;&nbsp;
+ <th align=left>Limit
+ <td>&nbsp;&nbsp;
+ <th align=left>Type
+ <td>&nbsp;&nbsp;
+ <th align=left>Adobe
+<tr> <td colspan=7><hr>
+<tr valign=top> <td>integer
+ <td>&nbsp;
+ <td>32-bit
+ <td>&nbsp;
+ <td>twos complement integer
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>real
+ <td>&nbsp;
+ <td>single-precision
+ <td>&nbsp;
+ <td>IEEE float
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>array
+ <td>&nbsp;
+ <td>65535
+ <td>&nbsp;
+ <td>elements
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>dictionary
+ <td>&nbsp;
+ <td>65534
+ <td>&nbsp;
+ <td>elements
+ <td>&nbsp;
+ <td>65535
+<tr valign=top> <td>string
+ <td>&nbsp;
+ <td>65535
+ <td>&nbsp;
+ <td>characters
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>name
+ <td>&nbsp;
+ <td>16383
+ <td>&nbsp;
+ <td>characters
+ <td>&nbsp;
+ <td>127
+<tr valign=top> <td>filename
+ <td>&nbsp;
+ <td>128*
+ <td>&nbsp;
+ <td>characters
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td><b><tt>save</tt></b> level
+ <td>&nbsp;
+ <td>none
+ <td>&nbsp;
+ <td>(capacity of memory)
+ <td>&nbsp;
+ <td>15
+<tr valign=top> <td><b><tt>gsave</tt></b> level
+ <td>&nbsp;
+ <td>none
+ <td>&nbsp;
+ <td>(capacity of memory)
+ <td>&nbsp;
+ <td>13
+</table></blockquote>
+
+<p>
+* The limit on the length of a file name is 128 characters if the name
+starts with a %...% IODevice designation, or 124 characters if it does not.
+
+<h3><a name="Typical_memory_limits"></a>Typical memory limits in LanguageLevel 1</h3>
+
+<blockquote><table cellpadding=0 cellspacing=0>
+
+<tr><th colspan=7 bgcolor="#CCCC00"><hr><font size="+1">Memory limits (corresponds to Adobe table B.2)</font><hr>
+<tr valign=bottom>
+ <th align=left>Quantity
+ <td>&nbsp;&nbsp;
+ <th align=left>Limit
+ <td>&nbsp;&nbsp;
+ <th align=left>Type
+ <td>&nbsp;&nbsp;
+ <th align=left>Adobe
+<tr> <td colspan=7><hr>
+<tr valign=top> <td><b><tt>userdict</tt></b>
+ <td>&nbsp;
+ <td>200
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td><b><tt>FontDirectory</tt></b>
+ <td>&nbsp;
+ <td>100
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>operand stack
+ <td>&nbsp;
+ <td>800
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>500
+<tr valign=top> <td>dictionary stack
+ <td>&nbsp;
+ <td>20
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>execution stack
+ <td>&nbsp;
+ <td>250
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>interpreter level
+ <td>&nbsp;
+ <td>none
+ <td>&nbsp;
+ <td>(capacity of memory)
+ <td>&nbsp;
+ <td>10
+<tr valign=top> <td>path
+ <td>&nbsp;
+ <td>none
+ <td>&nbsp;
+ <td>(capacity of memory)
+ <td>&nbsp;
+ <td>1500
+<tr valign=top> <td>dash
+ <td>&nbsp;
+ <td>11
+ <td>&nbsp;
+ <td>&nbsp;
+<tr valign=top> <td>VM
+ <td>&nbsp;
+ <td>none
+ <td>&nbsp;
+ <td>(capacity of memory)
+ <td>&nbsp;
+ <td>240000
+<tr valign=top> <td>file
+ <td>&nbsp;
+ <td>none
+ <td>&nbsp;
+ <td>(determined by operating system)
+ <td>&nbsp;
+ <td>6
+<tr valign=top> <td>image
+ <td>&nbsp;
+ <td>65535
+ <td>&nbsp;
+ <td>values (samples × components)<br>for1-, 2-, 4-, or 8-bit samples
+ <td>&nbsp;
+ <td>3300
+<tr valign=top> <td>&nbsp;
+ <td>&nbsp;
+ <td>32767
+ <td>&nbsp;
+ <td>values for 12-bit samples
+ <td>&nbsp;
+ <td>3300
+</table></blockquote>
+
+<h3><a name="VM_consumption"></a>Other differences in VM consumption</h3>
+
+<p>
+Packed array elements occupy either 2 bytes or 8 bytes. The average
+element size is probably about 5 bytes. Names occupy 12 bytes plus the
+space for the string.
+
+<hr>
+
+<h2><a name="Additional_operators"></a>Additional operators in Ghostscript</h2>
+
+<h3><a name="Graphics_and_text"></a>Graphics and text operators</h3>
+
+<h4><a name="Transparency"></a>Transparency</h4>
+
+<p>
+Ghostscript provides a set of operators for implementing the transparency
+and compositing facilities of PDF 1.4. These are defined only if the
+<b><tt>transpar</tt></b> option was selected when Ghostscript was built. We
+do not attempt to explain the underlying graphics model here: for details,
+see <a
+href="http://partners.adobe.com/asn/developer/technotes.html#acrobat-pdf"
+class="offsite">Adobe
+Technical Note</a> #5407, "<a
+href="http://partners.adobe.com/asn/developer/acrosdk/DOCS/PDF_Transparency.pdf"
+class="offsite">Transparency
+in PDF</a>". Note, however, that
+Ghostscript's model generalizes that of PDF 1.4 in that Ghostscript
+maintains separate alpha and mask values for opacity and shape, rather than
+a single value with a Boolean that says whether it represents opacity or
+shape. EVERYTHING IN THIS SECTION IS SUBJECT TO CHANGE.
+
+<h5><a name="Transparency_graphics_state_operators"></a>Graphics state
+operators</h5>
+
+<dl>
+<dt><b><tt>&lt;modename&gt; .setblendmode -</tt></b>
+<dd>Sets the blending mode in the graphics state. If the mode name is not
+recognized, causes a <b><tt>rangecheck</tt></b> error. The initial value of
+the blending mode is <b><tt>/Compatible</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentblendmode &lt;modename&gt;</tt></b>
+<dd>Returns the current blending mode.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;0..1&gt; .setopacityalpha -</tt></b>
+<dd>Sets the opacity alpha value in the graphics state.
+The initial opacity alpha value is 1.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentopacityalpha &lt;0..1&gt;</tt></b>
+<dd>Returns the current opacity alpha value.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;0..1&gt; .setshapealpha -</tt></b>
+<dd>Sets the shape alpha value in the graphics state.
+The initial shape alpha value is 1.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentshapealpha &lt;0..1&gt;</tt></b>
+<dd>Returns the current shape alpha value.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;bool&gt; .settextknockout -</tt></b>
+<dd>Sets the text knockout flag in the graphics state.
+The initial value of the text knockout flag is <b><tt>true</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>- .currenttextknockout &lt;bool&gt;</tt></b>
+<dd>Returns the current text knockout flag.
+</dl>
+
+<h5><a name="Transparency_rendering_stack_operators"></a>Rendering stack
+operators</h5>
+
+<p>
+The interpreter state is extended to include a (per-context) rendering stack
+for handling transparency groups and masks (generically, "layers"). Groups
+accumulate a full value for each pixel (paint plus transparency); masks
+accumulate only a coverage value. Layers must be properly nested, i.e., the
+'end' or 'discard' operator must match the corresponding 'begin' operator.
+
+<p>
+Beginning and ending layers must nest properly with respect to
+<b><tt>save</tt></b> and <b><tt>restore</tt></b>: <b><tt>save</tt></b> and
+<b><tt>restore</tt></b> do not save and restore the layer stack. Currently,
+layers are not required to nest with respect to <b><tt>gsave</tt></b> and
+<b><tt>grestore</tt></b>, except that the device that is current in the
+graphics state when ending a layer must be the same as the device that was
+current when beginning the layer. THIS AREA IS SUBJECT TO CHANGE.
+
+<dl>
+<dt><b><tt>&lt;paramdict&gt; &lt;llx&gt; &lt;lly&gt; &lt;urx&gt; &lt;ury&gt;
+.begintransparencygroup -</tt></b>
+<dd>Begins a new transparency group. The <b><tt>ll/ur</tt></b> coordinates
+are the bounding box of the group in the current user coordinate system.
+<b><tt>paramdict</tt></b> has the following keys:
+<dl>
+<dt><b><tt>/Isolated</tt></b>
+<dd>(optional) Boolean; default value = <b><tt>false</tt></b>.
+<dt><b><tt>/Knockout</tt></b>
+<dd>(optional) Boolean; default value = <b><tt>false</tt></b>.
+</dl>
+</dl>
+
+<dl>
+<dt><b><tt>- .discardtransparencygroup -</tt></b>
+<dd>Ends and discards the current transparency group.
+</dl>
+
+<dl>
+<dt><b><tt>- .endtransparencygroup -</tt></b>
+<dd>Ends the current transparency group, compositing the group being ended
+onto the group that now becomes current.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;paramdict&gt; &lt;llx&gt; &lt;lly&gt; &lt;urx&gt; &lt;ury&gt;
+.begintransparencymask -</tt></b>
+<dd>Begins a new transparency mask. The <b><tt>ll/ur</tt></b> coordinates
+are the bounding box of the mask in the current user coordinate system.
+<b><tt>paramdict</tt></b> has the following keys:
+<dl>
+<dt><b><tt>/Subtype</tt></b>
+<dd>(required) Name, either <b><tt>/Alpha</tt></b> or
+<b><tt>/Luminosity</tt></b>.
+<dt><b><tt>/Background</tt></b>
+<dd>(optional) Array of number.
+<dt><b><tt>/TransferFunction</tt></b>
+<dd>(optional) Function object (produced by applying
+<b><tt>.buildfunction</tt></b> to a Function dictionary).
+</dl>
+</dl>
+
+<dl>
+<dt><b><tt>- .discardtransparencymask -</tt></b>
+<dd>Ends and discards the current transparency mask.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;masknum&gt; .endtransparencymask -</tt></b>
+<dd>Ends the current transparency mask, installing it as the current opacity
+(<b><tt>masknum</tt></b> = 0) or shape (<b><tt>masknum</tt></b> = 1) mask in
+the graphics state.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;masknum&gt; .inittransparencymask -</tt></b>
+<dd>Resets the current opacity (<b><tt>masknum</tt></b> = 0) or shape
+(<b><tt>masknum</tt></b> = 1) mask to an infinite mask with alpha = 1
+everywhere.
+</dl>
+
+<h5><a name="Transparency_ImageType"></a>New ImageType</h5>
+
+<p>
+The transparency extension defines a new ImageType 103, similar to ImageType
+3 with the following differences:
+
+<ul>
+
+<li>The required <b><tt>MaskDict</tt></b> is replaced by two optional
+dictionaries, <b><tt>OpacityMaskDict</tt></b> and
+<b><tt>ShapeMaskDict</tt></b>. If present, these dictionaries must have a
+<b><tt>BitsPerComponent</tt></b> entry, whose value may be greater than 1.
+Note that in contrast to ImageType 3, where any non-zero chunky mask value
+is equivalent to 1, ImageType 103 simply takes the low-order bits of chunky
+mask values.
+
+<li>A <b><tt>Matte</tt></b> entry may be present in one or both mask
+dictionaries, indicating premultiplication of the data values. If both
+<b><tt>MaskDict</tt></b>s have a <b><tt>Matte</tt></b> entry and the values
+of the two <b><tt>Matte</tt></b> entries are different, a
+<b><tt>rangecheck</tt></b> error occurs.
+
+<li><b><tt>InterleaveType</tt></b> appears in the <b><tt>MaskDict</tt></b>s,
+not the <b><tt>DataDict</tt></b>, because each mask has its own
+<b><tt>InterleaveType</tt></b>. <b><tt>InterleaveType</tt></b> 2
+(interlaced scan lines) is not supported.
+
+</ul>
+
+<h4><a name="Graphics_state"></a>Other graphics state operators</h4>
+
+<dl>
+<dt><b><tt>&lt;bool&gt; .setaccuratecurves -</tt></b>
+<dd>Sets a graphics state flag that determines whether curves and arcs,
+when flattened, always start and end with a line that is a segment of the
+tangent; this also causes butt and square caps to be properly perpendicular
+to the tangent. <b><tt>initgraphics</tt></b> sets this flag to false, to
+match other PostScript implementations.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentaccuratecurves &lt;bool&gt;</tt></b>
+<dd>Returns the current value of the accurate curves flag.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;int&gt; .setcurvejoin -</tt></b>
+<dd>Sets a graphics state parameter that determines how to treat the joins
+between the line segments produced when a curve is flattened. The parameter
+value may be either -1 or a value acceptable to <b><tt>setlinejoin</tt></b>.
+If the parameter value is -1, the join used for flattened curve line
+segments is given by the current line join parameter in the graphics state
+(except that if the line join value is "none", a bevel join is used), which
+matches the Adobe Red Book, but not the Adobe implementations; if the curve
+join parameter value is a line join value, that type of join is used for
+flattened curve line segments, regardless of the value of the graphics state
+line join parameter. The initial (and default) value of the curve join
+parameter is 2, causing bevel joins to be used: this matches the Adobe
+implementations. <b><tt>initgraphics</tt></b> sets the parameter to its
+default value.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentcurvejoin &lt;int&gt;</tt></b>
+<dd>Returns the current value of the curve join parameter.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;bool&gt; .setdashadapt -</tt></b>
+<dd>Sets a graphics state flag that determines whether dash patterns do
+(true) or do not (false) automatically scale themselves so that each line
+segment consists of an integral number of pattern repetitions.
+<b><tt>initgraphics</tt></b> sets this flag to false.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentdashadapt &lt;bool&gt;</tt></b>
+<dd>Returns the current value of the dash adaptation flag.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;matrix&gt; .setdefaultmatrix -</tt></b>
+<dd>Sets the default matrix that is returned by
+<b><tt>defaultmatrix</tt></b> and installed by <b><tt>initmatrix</tt></b>.
+Ordinary programs should not use this operator.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;num&gt; &lt;bool&gt; .setdotlength -</tt></b>
+<dd>Sets a graphics state parameter that determines the handling of
+zero-length lines (dots). If the dot length is zero, dots are painted as
+circles if round line caps are in effect, otherwise they are not painted at
+all. If the dot length is non-zero, dots are treated exactly like lines of
+the given length: the length is specified in user coordinates (like line
+width) if <b><tt>bool</tt></b> is false, or in default user coordinates of
+points (units of 1/72in; see the <a href="Devices.htm#Measurements">notes
+on measurements</a> in the documentation on devices) if
+<b><tt>bool</tt></b> is true. Dots occurring as part of dash patterns will
+be oriented correctly; isolated dots will be oriented as though they were
+part of a vertical line. <b><tt>initgraphics</tt></b> sets the dot length
+to zero.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentdotlength &lt;num&gt; &lt;bool&gt;</tt></b>
+<dd>Returns the current dot length and dot length mode.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;dx&gt; &lt;dy&gt; .setfilladjust2 -</tt></b>
+<dd>Sets graphics state parameters that cause all filled and stroked
+regions to be "fattened" by the given amount relative to an algorithm that
+only paints pixels whose centers fall within the region to be painted.
+<b><tt>dx</tt></b> and <b><tt>dy</tt></b> are numbers between 0 and 0.5,
+measured in device space. The only two values that are likely to be useful
+are 0, which gives a pure center-of-pixel rule, and 0.5, which gives
+Adobe's any-part-of-pixel rule. (0.5 is treated slightly specially in
+order to create half-open pixels per Adobe's specification.)
+</dl>
+
+<dl>
+<dt><b><tt>- .currentfilladjust2 &lt;dx&gt; &lt;dy&gt;</tt></b>
+<dd>Returns the current fill adjustment values.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;bool&gt; .setlimitclamp -</tt></b>
+<dd>Sets a graphics state flag that determines whether attempts to set the
+current point outside the internally representable range should clamp the
+value to the largest representable value (true) or give a
+<b><tt>limitcheck</tt></b> error (false). <b><tt>initgraphics</tt></b> sets
+this flag to false, to match other PostScript implementations.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentlimitclamp &lt;bool&gt;</tt></b>
+<dd>Returns the current value of the limit clamp flag.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;int&gt; .setoverprintmode -</tt></b>
+<dd>Sets the overprint mode in the graphics state. Legal values are 0 or 1.
+Per the PDF 1.3 specification, if the overprint mode is 1, then when the
+current color space is <b><tt>DeviceCMYK</tt></b>, color components whose
+value is 0 do not write into the target, rather than writing a 0 value.
+THIS BEHAVIOR IS NOT IMPLEMENTED YET. The initial value of the overprint
+mode is 0.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentoverprintmode &lt;int&gt;</tt></b>
+<dd>Returns the current overprint mode.
+</dl>
+
+<h4><a name="Path"></a>Path operators</h4>
+
+<dl>
+<dt><b><tt>- .dashpath -</tt></b>
+<dd>If there is no current dash pattern, does nothing. Otherwise, does the
+equivalent of <b><tt>flattenpath</tt></b> and then chops up the path as
+determined by the dash pattern.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;x&gt; &lt;y&gt; &lt;width&gt; &lt;height&gt; .rectappend -</tt></b>
+<dt><b><tt>&lt;numarray&gt; .rectappend -</tt></b>
+<dt><b><tt>&lt;numstring&gt; .rectappend -</tt></b>
+<dd>Appends a rectangle or rectangles to the current path, in the same
+manner as <b><tt>rectfill</tt></b>, <b><tt>rectclip</tt></b>, etc. Defined
+only if the <b><tt>dps</tt></b> or <b><tt>level2</tt></b> option was
+selected when Ghostscript was built.
+</dl>
+
+<h4><a name="Painting"></a>Painting operators</h4>
+
+<p>
+Ghostscript supports an experimental extension of the PostScript imaging
+model to include <b><tt>RasterOp</tt></b> and some related facilities.
+This extension is available only if the <b><tt>rasterop</tt></b> option was
+selected when building Ghostscript.
+
+<p>
+With the <b><tt>RasterOp</tt></b> extension, imaging operations compute a
+function <b>D&nbsp;=&nbsp;f(D,S,T)</b> in RGB space, where <b>f</b> is an
+arbitrary 3-input Boolean function, <b>D</b> is the destination (frame
+buffer or print buffer), <b>S</b> is the source (described below), and
+<b>T</b> is the texture (the current PostScript color, which may be a
+pattern). The source and texture depend on the PostScript imaging
+operation:
+
+<ul>
+<li>For <b><tt>fill</tt></b> and <b><tt>stroke</tt></b>, the source is
+solid black, covering the region to be painted; the texture is the current
+PostScript color.
+
+<li>For <b><tt>show</tt></b> and <b><tt>imagemask</tt></b>, the source is
+solid black, covering the pixels to be painted; the texture is the current
+PostScript color.
+
+<li>For <b><tt>image</tt></b> and <b><tt>colorimage</tt></b>, the source is
+the image data; the texture depends on an optional Boolean parameter,
+<b><tt>CombineWithColor</tt></b>, in the image dictionary. If
+<b><tt>CombineWithColor</tt></b> is false (the default), the texture is
+solid black. If <b><tt>CombineWithColor</tt></b> is true, the texture is
+the current color. For the non-dictionary form of the image operator,
+<b><tt>CombineWithColor</tt></b> is considered to be false.
+</ul>
+
+<p>
+The <b><tt>rasterop</tt></b> option adds the following operators:
+
+<dl>
+<dt><b><tt>&lt;int8&gt; .setrasterop -</tt></b>
+<dd>Sets the <b><tt>RasterOp</tt></b> function in the graphics state. The
+default function is 252, Source | Texture.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentrasterop &lt;int8&gt;</tt></b>
+<dd>Returns the current <b><tt>RasterOp</tt></b> function.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;bool&gt; .setsourcetransparent -</tt></b>
+<dd>Sets source transparency in the graphics state. When source
+transparency is true, white source pixels prevent storing into the
+destination, regardless of what the <b><tt>RasterOp</tt></b> function
+returns. The default source transparency is false.
+</dl>
+
+<dl>
+<dt><b><tt>- .currentsourcetransparent &lt;bool&gt; -</tt></b>
+<dd>Returns the current source transparency.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;bool&gt; .settexturetransparent -</tt></b>
+<dd>Sets texture transparency in the graphics state. When texture
+transparency is true, white texture pixels prevent storing into the
+destination, regardless of what the <b><tt>RasterOp</tt></b> function
+returns. The default texture transparency is false.
+</dl>
+
+<dl>
+<dt><b><tt>- .currenttexturetransparent &lt;bool&gt; -</tt></b>
+<dd>Returns the current texture transparency.
+</dl>
+
+<p>
+For more information on RasterOp and transparency, please consult chapter 5
+of the "PCL 5 Color Technical Reference Manual",
+<a href="http://www.hp.com/cposupport/printers/support_doc/bpl01354.html">Hewlett-Packard
+Manual Part No. 5961-0635</a>.
+
+<h4><a name="Character"></a>Character operators</h4>
+
+<dl>
+<dt><b><tt>&lt;string&gt; &lt;bool&gt; .charboxpath -</tt></b>
+<dd>For each character <b>C</b> in the rendering of &lt;string&gt;, let the
+bounding box of <b>C</b> <b><em>in device space</em></b> be the four
+<b><em>user-space</em></b> points p1x/y, p2x/y, p3x/y, and p4x/y. For each
+character in order, <b><tt>.charboxpath</tt></b> appends the following to
+the current path:
+
+<ul><li>If <b><tt>&lt;bool&gt;</tt></b> is true, the equivalent of:
+
+<blockquote>
+p1x p1y <b><tt>moveto</tt></b><br>
+p2x p2y <b><tt>lineto</tt></b><br>
+p3x p3y <b><tt>lineto</tt></b><br>
+p4x p4y <b><tt>lineto</tt></b><br>
+<b><tt>closepath</tt></b>
+</blockquote>
+</ul>
+
+<p>
+This creates a path whose <b><tt>pathbbox</tt></b> is the
+<b><tt>bbox</tt></b> of the string.
+
+<ul><li>If <b><tt>&lt;bool&gt;</tt></b> is false, the equivalent of:
+
+<blockquote>
+p1x p1y <b><tt>moveto</tt></b><br>
+p3x p3y <b><tt>lineto</tt></b>
+</blockquote>
+</ul>
+
+<p>
+If the CTM is well-behaved (consists only of reflection, scaling, and
+rotation by multiples of 90 degrees), this too creates a (simpler) path
+whose <b><tt>pathbbox</tt></b> is the <b><tt>bbox</tt></b> of the string.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;font&gt; &lt;charname|charcode&gt; &lt;charname&gt; &lt;charstring&gt; .type1execchar -</tt></b>
+<dd>Does all the work for rendering a Type 1 outline. This operator, like
+<b><tt>setcharwidth</tt></b> and <b><tt>setcachedevice</tt></b>, is valid
+only in the context of a show operator -- that is, it must only be called
+from within a <b><tt>BuildChar</tt></b> or <b><tt>BuildGlyph</tt></b>
+procedure.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;font&gt; &lt;charcode&gt; %Type1BuildChar -</tt></b>
+<dd>This is not a new operator: rather, it is a name known specially to the
+interpreter. Whenever the interpreter needs to render a character (during
+a ...<b><tt>show</tt></b>, <b><tt>stringwidth</tt></b>, or
+<b><tt>charpath</tt></b>), it looks up the name <b><tt>BuildChar</tt></b>
+in the font dictionary to find a procedure to run. If it does not find
+this name, and if the <b><tt>FontType</tt></b> is 1, the interpreter
+instead uses the value (looked up on the dictionary stack in the usual way)
+of the name <b><tt>%Type1BuildChar</tt></b>.
+
+<p>
+The standard definition of <b><tt>%Type1BuildChar</tt></b> is in the
+initialization file <b><tt>gs_type1.ps</tt></b>. Users should not need to
+redefine <b><tt>%Type1BuildChar</tt></b>, except perhaps for tracing or
+debugging.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;font&gt; &lt;charname&gt; %Type1BuildGlyph -</tt></b>
+<dd>Provides the Type 1 implementation of <b><tt>BuildGlyph</tt></b>.
+</dl>
+
+<h3><a name="Other"></a>Other operators</h3>
+
+<h4><a name="Mathematical"></a>Mathematical operators</h4>
+
+<dl>
+<dt><b><tt>&lt;number&gt; arccos &lt;number&gt;</tt></b>
+<dd>Computes the arc cosine of a number between -1 and 1.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;number&gt; arcsin &lt;number&gt;</tt></b>
+<dd>Computes the arc sine of a number between -1 and 1.
+</dl>
+
+<h4><a name="Dictionary"></a>Dictionary operators</h4>
+
+<dl>
+<dt><b><tt>mark &lt;key1&gt; &lt;value1&gt; &lt;key2&gt; &lt;value2&gt; ... .dicttomark &lt;dict&gt;</tt></b>
+<dd>Creates and returns a dictionary with the given keys and values. This
+is the same as the PostScript Level 2 <b><tt>&gt;&gt;</tt></b> operator,
+but is available even in Level 1 configurations.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;dict&gt; &lt;key&gt; &lt;value&gt; .forceput - </tt></b>
+<dd>Equivalent to <b><tt>put</tt></b>, but works even if
+<b><tt>dict</tt></b> is not writable, and (if <b><tt>dict</tt></b> is
+<b><tt>systemdict</tt></b> or the current save level is 0) even if
+<b><tt>dict</tt></b> is in global VM and <b><tt>key</tt></b> and/or
+<b><tt>value</tt></b> is in local VM. <strong>This operator should be used
+only initialization code, and only in executeonly procedures: it must not be
+accessible after initialization.</strong>
+</dl>
+
+<dl>
+<dt><b><tt>&lt;dict&gt; &lt;key&gt; .forceundef - </tt></b>
+<dd>Equivalent to <b><tt>undef</tt></b>, but works even if
+<b><tt>dict</tt></b> is not writable. <strong>This operator should be used
+only initialization code, and only in executeonly procedures: it must not be
+accessible after initialization.</strong>
+</dl>
+
+
+<dl>
+<dt><b><tt>&lt;dict&gt; &lt;key&gt; .knownget &lt;value&gt; true</tt></b>
+<dt><b><tt>&lt;dict&gt; &lt;key&gt; .knownget false</tt></b>
+<dd>Combines <b><tt>known</tt></b> and <b><tt>get</tt></b> in the
+obvious way.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;dict&gt; &lt;integer&gt; .setmaxlength -</tt></b>
+<dd>Sets the capacity (<b><tt>maxlength</tt></b>) of a dictionary.
+Causes a <b><tt>dictfull</tt></b> error if the dictionary has more
+occupied entries than the requested capacity.
+</dl>
+
+<h4><a name="String"></a>String and name operators</h4>
+
+<dl>
+<dt><b><tt>&lt;integer&gt; .bytestring &lt;bytestring&gt;</tt></b>
+<dd>Allocates and returns a bytestring, a special data type that can be
+larger than the maximum size of a string (64K-1 bytes) and can be used in
+place of a string with a very few operators.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;name&gt; .namestring &lt;string&gt;</tt></b>
+<dd>Returns the (read-only) string for a name.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;obj&gt; &lt;pattern&gt; .stringmatch &lt;bool&gt;</tt></b>
+<dd>Matches <b><tt>obj</tt></b> against a pattern in which '*' matches 0 or
+more characters and '?' matches any single character. If
+<b><tt>obj</tt></b> is a string or a name, matches its characters against
+the pattern; if <b><tt>obj</tt></b> is of any other type, the result is
+<b><tt>true</tt></b> if the pattern is the single character "*" and
+<b><tt>false</tt></b> otherwise.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;state&gt; &lt;fromString&gt; &lt;toString&gt; .type1encrypt &lt;newState&gt; &lt;toSubstring&gt;</tt></b>
+<dd>Encrypts <b><tt>fromString</tt></b> according to the algorithm for
+Adobe Type 1 fonts, writing the result into <b><tt>toString</tt></b>.
+<b><tt>toString</tt></b> must be at least as long as
+<b><tt>fromString</tt></b>, or a rangecheck error occurs.
+<b><tt>state</tt></b> is the initial state of the encryption algorithm (a
+16-bit non-negative integer); <b><tt>newState</tt></b> is the new state of
+the algorithm.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;state&gt; &lt;fromString&gt; &lt;toString&gt; .type1decrypt &lt;newState&gt; &lt;toSubstring&gt;</tt></b>
+<dd>Decrypts <b><tt>fromString</tt></b> according to the algorithm for
+Adobe Type 1 fonts, writing the result into <b><tt>toString</tt></b>.
+Other specifications are as for <b><tt>type1encrypt</tt></b>.
+</dl>
+
+<h4><a name="Relational"></a>Relational operators</h4>
+
+<dl>
+<dt><b><tt>&lt;number|string&gt; &lt;number|string&gt; max &lt;number|string&gt;</tt></b>
+<dd>Returns the larger of two numbers or strings.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;number|string&gt; &lt;number|string&gt; min &lt;number|string&gt;</tt></b>
+<dd>Returns the smaller of two numbers or strings.
+</dl>
+
+<h4><a name="File"></a>File operators</h4>
+
+<dl>
+<dt><b><tt>&lt;file&gt; .filename &lt;string&gt; true</tt></b>
+<dt><b><tt>&lt;file&gt; .filename false</tt></b>
+<dd>If the file was opened by the <b><tt>file</tt></b> or
+<b><tt>.tempfile</tt></b> operator, returns the file name and
+<b><tt>true</tt></b>; if the file is a filter, returns
+<b><tt>false</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;file&gt; .fileposition &lt;integer&gt; true</tt></b>
+<dd>Returns the position of <b><tt>file</tt></b>. Unlike the standard
+<b><tt>fileposition</tt></b> operator, which causes an error if the file is
+not positionable, <b><tt>.fileposition</tt></b> works on all files,
+including filters: for non-positionable files, it returns the total number
+of bytes read or written since the file was opened.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;string&gt; findlibfile &lt;foundstring&gt; &lt;file&gt; true</tt></b>
+<dt><b><tt>&lt;string&gt; findlibfile &lt;string&gt; false</tt></b>
+<dd>Opens the file of the given name for reading, searching through
+directories <a href="Use.htm#Finding_files">as described in the usage
+documentation</a>. If the search fails, <b><tt>findlibfile</tt></b> simply
+pushes false on the stack and returns, rather than causing an error.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;file&gt; &lt;string&gt; .peekstring &lt;substring&gt; &lt;filled_bool&gt;</tt></b>
+<dd>Reads bytes from a file like <b><tt>readstring</tt></b>, but also leaves
+the bytes in the file buffer so they will be read again by a subsequent read
+operation. Currently gives a <b><tt>rangecheck</tt></b> error if
+<b><tt>string</tt></b> is larger than the file's buffer.
+</dl>
+
+<a name=Tempfile></a>
+<dl>
+<dt><b><tt>&lt;prefix_string|null&gt; &lt;access_string&gt; .tempfile
+&lt;string&gt; &lt;file&gt;</tt></b>
+<dd>Creates and opens a temporary file
+like the <b><tt>file</tt></b> operator, also returning the file name. There
+are three cases for the <b><tt>&lt;prefix_string|null&gt;</tt></b> operand:
+
+<ul>
+<p>
+<li><b><tt>null</tt></b>: create the file in the same directory and with the
+same name conventions as other temporary files created by the Ghostscript
+implementation on this platform. E.g., the temporary file might be named
+<b><tt>/tmp/gs_a1234</tt></b>.
+<p>
+<li>A string that is not the beginning of an absolute file name (e.g., does
+not begin with <b><tt>.</tt></b> or <b><tt>/</tt></b> on Unix-like
+platforms): create the file in the standard temporary directory, but use the
+<b><tt>&lt;prefix_string&gt;</tt></b> as the first part of the file name.
+E.g., if <b><tt>&lt;prefix_string&gt;</tt></b> is <b><tt>xx</tt></b>, the
+temporary file might be named <b><tt>/tmp/xxa1234</tt></b>.
+<p>
+<li>A string that is the beginning of an absolute file name: use the
+<b><tt>&lt;prefix_string&gt;</tt></b> as the first part of the file name.
+E.g., if <b><tt>&lt;prefix_string&gt;</tt></b> is
+<b><tt>/my/tmpdir/zz</tt></b>, the temporary file might be named
+<b><tt>/my/tmpdir/zza1234</tt></b>.
+<p>
+When running in <b><tt>SAFER</tt></b> mode, the absolute path must
+be one of the strings on the list given by the <b><tt>PermitFileWriting</tt></b>
+userparameter. Temporary files created with <b><tt>.tempfile</tt></b> can
+be deleted when in SAFER mode, and can be renamed to one of the paths
+that is on <b>both</b> the PermitFileControl and PermitFileWriting
+paths.
+</ul>
+
+</dl>
+
+<dl>
+<dt><b><tt>&lt;file&gt; &lt;integer&gt; .unread -</tt></b>
+<dd>Pushes back the last-read character onto the front of the file. If the
+file is open only for writing, or if the integer argument is not the same
+as the last character read from the file, causes an <b><tt>ioerror</tt></b>
+error. May also cause an <b><tt>ioerror</tt></b> if the last operation on
+the file was not a reading operation. This operator is now deprecated:
+use <b><tt>.peekstring</tt></b> in new code.
+</dl>
+
+<p>
+Ghostscript also supports the following <b><tt>IODevice</tt></b> in
+addition to a subset of those defined in the Adobe documentation:
+<b><tt>%pipe%command</tt></b>, which opens a pipe on the given command.
+This is supported only on operating systems that provide
+<b><tt>popen</tt></b> (primarily Unix systems, and not all of those).
+
+<h4><a name="Virtual_memory"></a>Virtual memory operators</h4>
+
+<dl>
+<dt><b><tt>&lt;save&gt; .forgetsave -</tt></b>
+<dd>Cancels the effect of a save, making it as though the save never
+happened.
+</dl>
+
+<h4><a name="Miscellaneous"></a>Miscellaneous operators</h4>
+
+<dl>
+<dt><b><tt>&lt;obj1&gt; &lt;obj2&gt; ... &lt;objn&gt; &lt;n&gt; .execn ...</tt></b>
+<dd>This executes <b><tt>obj1</tt></b> through <b><tt>objn</tt></b> in that
+order, essentially equivalent to
+
+<blockquote><pre>
+&lt;obj1&gt; &lt;obj2&gt; ... &lt;objn&gt; &lt;n&gt; array astore {exec} forall
+</pre></blockquote>
+
+<p>
+except that it doesn't actually create the array.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;string&gt; getenv &lt;string&gt; true</tt></b>
+<dt><b><tt>&lt;string&gt; getenv false</tt></b>
+<dd>Looks up a name in the shell environment. If the name is found,
+returns the corresponding value and true; if the name is not found, returns
+false.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;name&gt; &lt;array&gt; .makeoperator &lt;operator&gt;</tt></b>
+<dd>Constructs and returns a new operator that is actually the given
+procedure in disguise. The name is only used for printing. The operator
+has the executable attribute.
+
+<p>
+Operators defined in this way do one other thing besides running the
+procedure: if an error occurs during the execution of the procedure, and
+there has been no net reduction in operand or dictionary stack depth, the
+operand or dictionary stack pointer respectively is reset to its position
+at the beginning of the procedure.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;string&gt; &lt;boolean&gt; .setdebug -</tt></b>
+<dd>If the Ghostscript interpreter was built with the <b><tt>DEBUG</tt></b>
+flag set, sets or resets any subset of the debugging flags normally
+controlled by <b><tt>-Z</tt></b> in the command line. Has no effect
+otherwise.
+</dl>
+
+<dl>
+<dt><b><tt>- .oserrno &lt;errno&gt;</tt></b>
+<dd>Returns the error code for the most recent operating system error.
+</dl>
+
+<dl>
+<dt><b><tt>- .oserrorstring &lt;string&gt;</tt></b>
+<dd>Returns the error string for the most recent operating system error.
+</dl>
+
+<a name="Runandhide"></a>
+<dl>
+<dt><b><tt>&lt;array&gt; &lt;procedure&gt; .runandhide ... &lt;array&gt;</tt></b>
+<dd>Runs the <i><tt>&lt;procedure&gt;</tt></i> after removing the
+<i><tt>&lt;array&gt;</tt></i> from the stack. As long as <i><tt>&lt;array&gt;</tt></i>
+is not contained in any readable dictionaries or elsewhere on stacks, it
+will not be accessible to <i><tt>&lt;procedure&gt;</tt></i>.
+<p>
+This operator is intended to allow hiding a <i><tt>&lt;save&gt;</tt></i> object
+during execution of procedures or files that run in <b>SAFER</b> mode.
+If a <b><tt>save</tt></b> is performed prior to entering <b>SAFER</b> mode
+with <b><tt>.setsafe</tt></b>, using the save object as the operand to
+<b><tt>restore</tt></b> will return to <b>NOSAFER</b> mode. In order to
+prevent the procedures running in <b>SAFER</b> mode from being able to
+return to <b>NOSAFER</b> mode, this operator should be used.
+Upon return from the file or procedure <b><tt>restore</tt></b> can be used
+to return to <b>NOSAFER</b> mode.
+<p>
+<b>Note:</b> The array operand hidden during the execution of the file or
+procedure will be placed at the top of the operand stack which may be on
+top of objects that the file or procedure leaves on top of the stack.
+Thus removing objects below the array may be needed to prevent an
+<b><tt>invalidrestore</tt></b> error.
+<p>
+For example, in order for a script or job server to execute a file
+<tt>somefile.ps</tt> with the <b>SAFER</b> mode restrictions in place, returning
+to unrestricted <b>NOSAFER</b> mode when the procedure exits is as follows:
+<pre>
+ Start Ghostscript with <b>-dNOSAFER</b>
+
+ ... % perform any device set up w/o restrictions
+ [ save ] % create a save object before SAFER
+ (somefile.ps) (r) file cvx % open the file to process
+ .setsafe % enter SAFER mode
+ .runandhide % run the file hiding the save object
+ count 1 roll % place array below anything left over
+ count 1 sub { pop } repeat % pop left over stuff
+ cleardictstack % prevent invalidrestore from dicts
+ 0 get restore % go back to NOSAFER mode
+</pre>
+Another refinement on the above would be to execute <b><tt>.runandhide</tt></b>
+using <b><tt>stopped</tt></b> in order to report errors but continue processing.
+</dl>
+
+<dl>
+<dt><b><tt>- .setsafe -</tt></b>
+<dd>If Ghostscript is started with <b><tt>-dNOSAFER</tt></b> or
+<b><tt>-dDELAYSAFER</tt></b>, this operator can be used to enter <b>SAFER</b>
+mode (see <a href="Use.htm#Safer"><b>-dSAFER</b></a>)
+<p>
+<b>Note: </b>If <b><tt>-dPARANOIDSAFER</tt></b> was specified on the command
+line, <b><tt>.setsafe</tt></b> also sets the <b><tt>PermitFileReading</tt></b>
+parameter to an empty array.
+<p>
+Since <b>SAFER</b> mode is implemented with userparameters and device parameters,
+it is possible to use <b><tt>save</tt></b> and <b><tt>restore</tt></b> before
+and after <b><tt>.setsafe</tt></b> to return to <b>NOSAFER</b> mode, but care
+should be taken to ensure that the <i><tt>save</tt></i> object is not
+accessible to any procedures or file run in <b>SAFER</b> mode (see
+<a href="#Runandhide"><b>.runandhide</b></a> above).
+<p>
+<b>Note: This uses setpagedevice to change .LockSafetyParams, so the page
+will be erased as a side effect of this operator</b>
+</dl>
+
+<dl>
+<dt><b><tt>- .locksafe -</tt></b>
+<dd>
+This operator sets the current device's <b><tt>.LockSafetyParams</tt></b>
+and the <b><tt>LockFilePermissions</tt></b> user parameter true as well as
+adding the paths on LIBPATH and FONTPATH and the paths given by the
+system params /GenericResourceDir and /FontResourceDir to the current
+PermitFileReading list of paths.
+<p>
+If Ghostscript is started with <b><tt>-dNOSAFER</tt></b> or
+<b><tt>-dDELAYSAFER</tt></b>, this operator can be used to enter <b>SAFER</b>
+mode with the current set of <b><tt>PermitFile...</tt></b> user parameters
+in effect. Since <b><tt>.setsafe</tt></b> sets the <b><tt>PermitFileWriting</tt></b>
+and <b><tt>PermitFileControl</tt></b> user parameters to empty arrays, a script
+or job server that needs to enable certain paths for file Writing and/or Control
+can use this operator to perform the locking needed to enter <b>SAFER</b> mode.
+<p>
+For example, to enable reading everywhere, but disallow writing and file
+control (deleting and renaming files), the following can be used:
+<pre>
+ { << /PermitFileReading [ (*) ]
+ /PermitFileWriting [ ]
+ /PermitFileControl [ ]
+ >> setuserparams
+ .locksafe
+ } stopped pop
+</pre>
+In the above example, use of stopped will allow the use of this sequence on
+older versions of Ghostscript where <b><tt>.locksafe</tt></b> was not an operator.
+<p>
+<b>Note: This uses setpagedevice to change .LockSafetyParams, so the page
+will be erased as a side effect of this operator</b>
+<p>
+See also <a href="#LockSafetyParams">.LockSafetyParams</a> and
+<a href="#User_parameters">User Parameters</a>.
+<p>
+</dl>
+
+<h4><a name="Device"></a>Device operators</h4>
+
+<dl>
+<dt><b><tt>&lt;device&gt; copydevice &lt;device&gt;</tt></b>
+<dd>Copies a device. The copy is writable and installable. The copy is
+created in the current VM (local or global), usually local VM for executing
+ordinary PostScript files.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;devicename&gt; finddevice &lt;device&gt;</tt></b>
+<dd>Creates a default instance of a device specified by name. The instance
+is created in global VM. If <b><tt>finddevice</tt></b> is called more than
+once with the same device name, it creates the default instance the first
+time, and returns the same instance thereafter.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;devicename&gt; findprotodevice &lt;device&gt;</tt></b>
+<dd>Finds the prototype of a device specified by name. A prototype can be
+used with <b><tt>.getdeviceparams</tt></b> or other parameter-reading
+operators, but it is read-only and cannot be set with
+<b><tt>setdevice</tt></b>: it must be copied first.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;device&gt; &lt;x&gt; &lt;y&gt; &lt;width&gt; &lt;max_height&gt; &lt;alpha?&gt; &lt;std_depth|null&gt; &lt;string&gt; .getbitsrect &lt;height&gt; &lt;substring&gt;</tt></b>
+<dd>Reads a rectangle of rendered bits back from a device. This is only
+guaranteed to be implemented for image devices (see below).
+<b><tt>alpha?</tt></b> is 0 for no alpha, -1 for alpha first, 1 for alpha
+last. <b><tt>std_depth</tt></b> is null for native pixels, number of bits
+per component for a standard color space.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;index&gt; .getdevice &lt;device&gt;</tt></b>
+<dd>Returns a device from the set of devices known to the system. The
+first device, which is the default, is numbered 0. If the
+<b><tt>index</tt></b> is out of range, causes a <b><tt>rangecheck</tt></b>
+error. This device is actually a prototype, not a directly usable device,
+and is marked read-only; it cannot have its parameters changed or be
+installed as the current device.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;matrix&gt; &lt;width&gt; &lt;height&gt; &lt;palette&gt; makeimagedevice &lt;device&gt;</tt></b>
+<dd>Makes a new device that accumulates an image in memory. <b><tt>
+matrix</tt></b> is the initial transformation matrix: it must be orthogonal
+(that is, [a&nbsp;0&nbsp;0&nbsp;b&nbsp;x&nbsp;y] or
+[0&nbsp;a&nbsp;b&nbsp;0&nbsp;x&nbsp;y]). <b><tt>palette</tt></b> is a
+string of 2^<small><sup><b>N</b></sup></small> or
+3&nbsp;&times;&nbsp;2^<small><sup><b>N</b></sup></small> elements,
+specifying how the 2^<small><sup><b>N</b></sup></small> possible pixel
+values will be interpreted. Each element is interpreted as a gray value,
+or as RGB values, multiplied by 255. For example, if you want a monochrome
+image for which 0=white and 1=black, the palette should be
+<b><tt>&lt;ff&nbsp;00&gt;</tt></b>; if you want a 3-bit deep image with
+just the primary colors and their complements (ignoring the fact that 3-bit
+images are not supported), the palette might be <b><tt>&lt;000000 0000ff
+00ff00 00ffff ff0000 ff00ff ffff00 ffffff&gt;</tt></b>. At present, the
+palette must contain exactly 2, 4, 16, or 256 entries, and must contain an
+entry for black and an entry for white; if it contains any entries that
+aren't black, white, or gray, it must contain at least the six primary
+colors (red, green, blue, and their complements cyan, magenta, and yellow);
+aside from this, its contents are arbitrary.
+
+<p>
+Alternatively, palette can be 16, 24, 32, or null (equivalent to 24).
+These are interpreted as:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=bottom>
+ <th valign=bottom align=left>Palette
+ <td>&nbsp;&nbsp;&nbsp;
+ <th valign=bottom align=left>Bits allocated per color
+<tr> <td colspan=3><hr>
+<tr valign=top> <td>16
+ <td>&nbsp;
+ <td>5 red, 6 green, 5 blue
+<tr valign=top> <td>24
+ <td>&nbsp;
+ <td>8 red, 8 green, 8 blue
+<tr valign=top> <td>32
+ <td>&nbsp;
+ <td>8C, 8M, 8Y, 8K
+</table></blockquote>
+
+<p>
+Note that one can also make an image device (with the same palette as an
+existing image device) by copying a device using the
+<b><tt>copydevice</tt></b> operator.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;matrix&gt; &lt;width&gt; &lt;height&gt; &lt;palette&gt; &lt;word?&gt; makewordimagedevice &lt;device&gt;</tt></b>
+<dd>Makes an image device as described above. <b><tt>word?</tt></b> is a
+Boolean value indicating whether the data should be stored in a
+word-oriented format internally. No ordinary PostScript programs should
+use this operator.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;device&gt; &lt;index&gt; &lt;string&gt; copyscanlines &lt;substring&gt;</tt></b>
+<dd>Copies one or more scan lines from an image device into a string,
+starting at a given scan line in the image. The data is in the same format
+as for the <b><tt>image</tt></b> operator. It is an error if the device is
+not an image device or if the string is too small to hold at least one
+complete scan line. Always copies an integral number of scan lines.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;device&gt; setdevice -</tt></b>
+<dd>Sets the current device to the specified device. Also resets the
+transformation and clipping path to the initial values for the device.
+Signals an <b><tt>invalidaccess</tt></b> error if the device is a
+prototype or if <a href="Language.htm#LockSafetyParams">.LockSafetyParams</a>
+is true for the current device.
+</dl>
+
+<dl>
+<dt><b><tt>- currentdevice &lt;device&gt;</tt></b>
+<dd>Gets the current device from the graphics state.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;device&gt; getdeviceprops &lt;mark&gt; &lt;name1&gt; &lt;value1&gt; ... &lt;namen&gt; &lt;valuen&gt;</tt></b>
+<dd>Gets the properties of a device. See the section on
+<a href="#Device_parameters">device parameters</a> below for details.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;mark&gt; &lt;name1&gt; &lt;value1&gt; ... &lt;namen&gt; &lt;valuen&gt; &lt;device&gt; putdeviceprops &lt;device&gt;</tt></b>
+<dd>Sets properties of a device. May cause <b><tt>undefined</tt></b>,
+<b><tt>invalidaccess</tt></b>, <b><tt>typecheck</tt></b>, <b><tt>rangecheck</tt></b>, or
+<b><tt>limitcheck</tt></b> errors.
+</dl>
+
+<dl>
+<dt><b><tt>- flushpage -</tt></b>
+<dd>On displays, flushes any buffered output, so that it is guaranteed to
+show up on the screen; on printers, has no effect.
+</dl>
+
+<hr>
+
+<h2><a name="Filters"></a>Filters</h2>
+
+<h3><a name="Standard_filters"></a>Standard filters</h3>
+
+<p>
+In its usual configuration, Ghostscript supports all the standard PostScript
+LanguageLevel 3 filters, both encoding and decoding, except that it does not
+currently support:
+
+<ul>
+
+<li>the <b><tt>EarlyChange</tt></b> key in the <b><tt>LZWEncode</tt></b>
+filter.
+
+</ul>
+
+<p>
+Ghostscript also supports additional keys in the optional dictionary
+operands for some filters. For the <b><tt>LZWDecode</tt></b> filter:
+
+<dl>
+<dt><b><tt>InitialCodeLength &lt;integer&gt;</tt></b> (default 8)
+<dd>An integer between 2 and 11 specifying the initial number of data bits
+per code. Note that the actual initial code length is 1 greater than this,
+to allow for the reset and end-of-data code values.
+</dl>
+
+<dl>
+<dt><b><tt>FirstBitLowOrder &lt;boolean&gt;</tt></b> (default false)
+<dd>If true, codes appear with their low-order bit first.
+</dl>
+
+<dl>
+<dt><b><tt>BlockData &lt;boolean&gt;</tt></b> (default false)
+<dd>If true, the data is broken into blocks in the manner specified for the
+GIF file format.
+</dl>
+
+<p>
+For the <b><tt>CCITTFaxEncode</tt></b> and <b><tt>CCITTFaxDecode</tt></b>
+filters:
+
+<dl>
+<dt><b><tt>DecodedByteAlign &lt;integer&gt;</tt></b> (default 1)
+<dd>An integer <b>N</b> with the value 1, 2, 4, 8, or 16, specifying that
+decoded data scan lines are always a multiple of <b>N</b> bytes. The
+encoding filter skips data in each scan line from Columns to the next
+multiple of <b>N</b> bytes; the decoding filter pads each scan line to a
+multiple of <b>N</b> bytes.
+</dl>
+
+<h3><a name="Non_standard_filters"></a>Non-standard filters</h3>
+
+<p>
+In addition to the standard PostScript LanguageLevel 3 filters, Ghostscript
+supports the following non-standard filters. Many of these filters are used
+internally to implement standard filters or facilities; they are almost
+certain to remain, in their present form or a backward-compatible one, in
+future Ghostscript releases.
+
+<dl>
+<dt><b><tt>&lt;target&gt; /BCPEncode filter &lt;file&gt;</tt></b>
+<dt><b><tt>&lt;source&gt; /BCPDecode filter &lt;file&gt;</tt></b>
+<dd>Create filters that implement the Adobe Binary Communications Protocol.
+See Adobe documentation for details.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;target&gt; &lt;seed_integer&gt; /eexecEncode filter &lt;file&gt;</tt></b>
+<dd>Creates a filter for encrypting data into the encrypted format described
+in the Adobe Type 1 Font Format documentation. The
+<b><tt>seed_integer</tt></b> must be 55665 for the <b><tt>eexec</tt></b>
+section of a font, or 4330 for a <b><tt>CharString</tt></b>. Note that for
+the <b><tt>eexec</tt></b> section of a font, this filter produces binary
+output and does not include the initial 4 (or <b><tt>lenIV</tt></b>) garbage
+bytes.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;source&gt; &lt;seed_integer&gt; /eexecDecode filter &lt;file&gt;</tt></b>
+<dt><b><tt>&lt;source&gt; &lt;dict&gt; /eexecDecode filter &lt;file&gt;</tt></b>
+<dd>Creates a filter for decrypting data encrypted as described in the Adobe
+Type 1 Font Format documentation. The <b><tt>seed_integer</tt></b> must be
+55665 or 4330 as described just above. Recognized dictionary keys are:
+
+<blockquote>
+<b><tt>seed &lt;16-bit integer&gt;</tt></b> (required)<br>
+<b><tt>lenIV &lt;non-negative integer&gt;</tt></b> (default=4)
+</blockquote>
+</dl>
+
+<dl>
+<dt><b><tt>&lt;target&gt; /MD5Encode filter &lt;file&gt;</tt></b>
+<dd>Creates a filter that produces the 16-byte MD5 digest of the input.
+Note that no output is produced until the filter is closed.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;source&gt; &lt;hex_boolean&gt; /PFBDecode filter &lt;file&gt;</tt></b>
+<dd>Creates a filter that decodes data in <b><tt>.PFB</tt></b> format, the
+usual semi-binary representation for Type 1 font files on IBM PC and
+compatible systems. If <b><tt>hex_boolean</tt></b> is true, binary packets
+are converted to hex; if false, binary packets are not converted.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;target&gt; &lt;dict&gt; /PixelDifferenceEncode filter &lt;file&gt;</tt></b>
+<dt><b><tt>&lt;source&gt; &lt;dict&gt; /PixelDifferenceDecode filter &lt;file&gt;</tt></b>
+<dd>Implements the Predictor=2 pixel-differencing option of the LZW
+filters. Recognized keys are:
+
+<blockquote>
+<b><tt>Colors &lt;integer&gt;</tt></b> (1 to 4, default=1)<br>
+<b><tt>BitsPerComponent &lt;integer&gt;</tt></b> (1, 2, 4, or 8, default=8)<br>
+<b><tt>Columns &lt;integer&gt;</tt></b> (&gt;= 0, required)
+</blockquote>
+
+<p>
+See the Adobe <a
+href="http://partners.adobe.com/asn/developer/acrosdk/DOCS/pdfspec.pdf"><em>Portable
+Document Format Reference Manual</em></a> for details.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;target&gt; &lt;dict&gt; /PNGPredictorEncode filter &lt;file&gt;</tt></b>
+<dt><b><tt>&lt;source&gt; &lt;dict&gt; /PNGPredictorDecode filter &lt;file&gt;</tt></b>
+<dd>Implements the "filter" algorithms of the
+<a href="http://www.libpng.org/pub/png/">Portable Network Graphics (PNG)
+graphics format</a>. Recognized keys are:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Keys recognized in PNG filter algorithms</font><hr>
+<tr valign=bottom>
+ <th align=left>Key
+ <td>&nbsp;&nbsp;
+ <th align=left>Range
+ <td>&nbsp;&nbsp;
+ <th align=left>Default
+<tr> <td colspan=5><hr>
+<tr valign=top> <td><b><tt>Colors &lt;integer&gt;</tt></b>
+ <td>&nbsp;&nbsp;&nbsp;
+ <td>1 to 16
+ <td>&nbsp;&nbsp;
+ <td>16
+<tr valign=top> <td><b><tt>BitsPerComponent &lt;integer&gt;</tt></b>
+ <td>&nbsp;
+ <td>1, 2, 4, 8, or 16
+ <td>&nbsp;&nbsp;
+ <td>8
+<tr valign=top> <td><b><tt>Columns &lt;integer&gt;</tt></b>
+ <td>&nbsp;
+ <td>&gt;= 0
+ <td>&nbsp;&nbsp;
+ <td>1
+<tr valign=top> <td><b><tt>Predictor &lt;integer&gt;</tt></b>
+ <td>&nbsp;
+ <td>10 to 15
+ <td>&nbsp;&nbsp;
+ <td>15
+</table></blockquote>
+
+<p>
+The <b><tt>Predictor</tt></b> is the PNG algorithm number + 10 for the
+<b><tt>Encoding</tt></b> filter; the <b><tt>Decoding</tt></b> filter
+ignores <b><tt>Predictor</tt></b>. 15 means the encoder attempts to
+optimize the choice of algorithm. For more details see the PNG
+specification
+
+<blockquote>
+<a href="http://www.w3.org/TR/WD-png-960128.html">http://www.w3.org/TR/WD-png-960128.html</a>
+</blockquote>
+</dl>
+
+<dl>
+<dt><b><tt>&lt;target&gt; /TBCPEncode filter &lt;file&gt;</tt></b>
+<dt><b><tt>&lt;source&gt; /TBCPDecode filter &lt;file&gt;</tt></b>
+<dd>Create filters that implement the Adobe Tagged Binary Communications
+Protocol. See Adobe documentation for details.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;target&gt; /zlibEncode filter &lt;file&gt;</tt></b>
+<dt><b><tt>&lt;source&gt; /zlibDecode filter &lt;file&gt;</tt></b>
+<dd>Creates filters that use the data compression method variously known as
+'zlib' (the name of a popular library that implements it), 'Deflate' (as in
+<a href="http://www.ietf.org/rfc/rfc1951.txt">RFC 1951</a>, which is a
+detailed specification for the method), 'gzip' (the name of a popular
+compression application that uses it), or 'Flate' (Adobe's name). Note that
+the PostScript <b><tt>Flate</tt></b> filters are actually a combination of
+this filter with an optional predictor filter.
+</dl>
+
+<h3><a name="Unstable_filters"></a>Unstable filters</h3>
+
+<p>
+Some versions of Ghostscript may also support other non-standard filters for
+experimental purposes. The current version includes the following such
+filters, which are not documented further. No code should assume that these
+filters will exist in compatible form, or at all, in future versions.
+
+<dl>
+<dt><b><tt>&lt;target/source&gt; &lt;string&gt; ByteTranslateEncode/Decode filter &lt;file&gt;</tt></b>
+<dd><b><tt>string</tt></b> must be a string of exactly 256 bytes. Creates a
+filter that converts each input byte <em>b</em> to
+<b><tt>string</tt></b>[<em>b</em>]. Note that the <b><tt>Encode</tt></b>
+and <b><tt>Decode</tt></b> filters operate identically: the client must
+provide a <b><tt>string</tt></b> for the <b><tt>Decode</tt></b> filter that
+is the inverse mapping of the <b><tt>string</tt></b> for the
+<b><tt>Encode</tt></b> filter.
+</dl>
+
+<dl>
+<dt><b><tt>&lt;target/source&gt; &lt;dict&gt; BoundedHuffmanEncode/Decode filter &lt;file&gt;</tt></b>
+<dd>These filters encode and decode data using Huffman codes. Since these
+filters aren't used anywhere, we don't document them further, except to note
+the recognized dictionary keys, which must be set identically for encoding
+and decoding:
+
+<blockquote>
+<b><tt>FirstBitLowOrder &lt;bool&gt;</tt></b> (default=false)<br>
+<b><tt>MaxCodeLength &lt;int&gt;</tt></b> (default=16)<br>
+<b><tt>EndOfData &lt;bool&gt;</tt></b> (default=true)<br>
+<b><tt>EncodeZeroRuns &lt;int&gt;</tt></b> (default=256)<br>
+<b><tt>Tables &lt;int_array&gt;</tt></b>
+</blockquote>
+</dl>
+
+<dl>
+<dt><b><tt>&lt;target/source&gt; &lt;dict&gt; BWBlockSortEncode/Decode filter &lt;file&gt;</tt></b>
+<dd>This filter implements the Burroughs-Wheeler block sorting compression
+method, which we've heard is also used in the popular <b><tt>bzip2</tt></b>
+compression application. See <a
+href="http://sources.redhat.com/bzip2/">http://sources.redhat.com/bzip2/</a>
+for more information. The only recognized dictionary key is:
+
+<blockquote>
+<b><tt>BlockSize &lt;integer&gt;</tt></b> (default=16384)
+</blockquote>
+</dl>
+
+<dl>
+<dt><b><tt>&lt;target/source&gt; MoveToFrontEncode/Decode filter &lt;file&gt;</tt></b>
+
+<dd>The <b><tt>Encode</tt></b> filter starts by initializing an internal
+256-byte array <b><tt>a</tt></b> to the values 0 .. 255. This array will
+always hold a permutation of these values. Then for each input byte
+<em>b</em>, the filter outputs the index <em>i</em> such that
+<b><tt>a</tt></b>[<em>i</em>] = <em>b</em>, and moves that element to the
+front (element 0) of <b><tt>a</tt></b>, moving elements 0 .. <em>i-1</em> to
+positions 1 .. <em>i</em>. The <b><tt>Decode</tt></b> filter inverts this
+process.
+</dl>
+
+<hr>
+
+<h2><a name="Device_parameters"></a>Device parameters</h2>
+
+Ghostscript supports the concept of device parameters for all devices, not
+just page devices. (For non-page devices, these are accessible through
+<b><tt>getdeviceprops</tt></b> and <b><tt>putdeviceprops</tt></b>, as
+indicated above.) Here are the currently defined parameters for all
+devices:
+
+<dl>
+<a name="LockSafetyParams"></a>
+<dt><b><tt>.LockSafetyParams &lt;boolean&gt;</tt></b>
+<dd>This parameter allows for improved system security by preventing
+PostScript programs from being able to change potentially dangerous
+device paramters such as OutputFile. This parameter cannot be set false
+if it is already true.
+<p>
+If this parameter is true for the current device, attempt to set a new
+device that has <b><tt>.LockSafetyParams</tt></b> false will signal an
+<tt><b> invalidaccess</b></tt> error.
+</dl>
+
+<dl>
+<dt><b><tt>BitsPerPixel &lt;integer&gt; (usually read-only)</tt></b>
+<dd>Number of bits per pixel.
+</dl>
+
+<dl>
+<dt><b><tt>.HWMargins [&lt;four floats&gt;]</tt></b>
+<dd>Size of non-imageable regions around the edges of the page, in points
+(units of 1/72in; see the <a href="Devices.htm#Measurements">notes on
+measurements</a> in the documentation on devices).
+</dl>
+
+<dl>
+<dt><b><tt>HWSize [&lt;integer&gt; &lt;integer&gt;]</tt></b>
+<dd>X and Y size in pixels.
+</dl>
+
+<dl>
+<dt><b><tt>Name &lt;string&gt; (read-only)</tt></b>
+<dd>The device name. Currently the same as <b><tt>OutputDevice</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>Colors, GrayValues, RedValues, GreenValues, BlueValues, ColorValues (usually read-only)</tt></b>
+<dd>As for the <b><tt>deviceinfo</tt></b> operator of Display PostScript.
+<b><tt>Red</tt></b>, <b><tt>Green</tt></b>, <b><tt>Blue</tt></b>, and
+<b><tt>ColorValues</tt></b> are only defined if
+<b><tt>Colors</tt></b>&nbsp;&gt;&nbsp;1.
+</dl>
+
+<dl>
+<dt><b><tt>TextAlphaBits, GraphicsAlphaBits (usually read-only)</tt></b>
+<dd>The number of bits of anti-aliasing information for text or graphics
+respectively. Legal values are 1 (no anti-aliasing, the default for most
+devices), 2, or 4.
+</dl>
+
+<p>
+In addition, the following are defined per Adobe's documentation for the
+<b><tt>setpagedevice</tt></b> operator:
+
+<blockquote>
+<b><tt>Duplex</tt></b> (if supported)<br>
+<b><tt>HWResolution</tt></b><br>
+<b><tt>ImagingBBox</tt></b><br>
+<b><tt>Margins</tt></b><br>
+<b><tt>NumCopies</tt></b> (for printers only)<br>
+<b><tt>Orientation</tt></b> (if supported)<br>
+<b><tt>OutputDevice</tt></b><br>
+<b><tt>PageOffset</tt></b> (write-only)<br>
+<b><tt>PageSize</tt></b><br>
+<b><tt>ProcessColorModel</tt></b> (usually read-only)<br>
+</blockquote>
+
+<p>
+Some devices may only allow certain values for <b><tt>HWResolution</tt></b>
+and <b><tt>PageSize</tt></b>. The null device ignores attempts to set
+<b><tt>PageSize</tt></b>; its size is always <b><tt>[0&nbsp;0]</tt></b>.
+
+<p>
+For printers these are also defined:
+
+<dl>
+<dt><b><tt>BufferSpace &lt;integer&gt;</tt></b>
+<dd>Buffer space for band lists, if the bitmap is too big to fit in memory.
+</dl>
+
+<dl>
+<dt><b><tt>MaxBitmap &lt;integer&gt;</tt></b>
+<dd>Maximum space for a full bitmap in memory.
+</dl>
+
+<dl>
+<dt><b><tt>OutputFile &lt;string&gt;</tt></b>
+
+<dd>An empty string means "send to printer directly", otherwise specifies
+the file name for output; <b><tt>%d</tt></b> is replaced by the page number;
+on Unix systems <b><tt>%pipe%</tt></b><em>command</em> writes to a pipe.
+(<b><tt>|</tt></b><em>command</em> also writes to a pipe, but is now
+deprecated.)
+<p>
+Attempts to set this parameter if <tt><b>.LockSafetyParams</b></tt> is true
+will signal an <tt><b>invalidaccess</b></tt> error.
+</dl>
+
+<dl>
+<dt><b><tt>OpenOutputFile &lt;boolean&gt;</tt></b>
+<dd>If true, open the device's output file when the device is opened,
+rather than waiting until the first page is ready to print.
+</dl>
+
+<dl>
+<dt><b><tt>PageCount &lt;integer&gt; (read-only)</tt></b>
+<dd>Counts the number of pages printed on the device.
+</dl>
+
+<p>
+The following parameters are for use only by very specialized applications
+that separate band construction from band rasterization. Improper use may
+cause unpredictable errors. In particular, if you only want to allocate
+more memory for banding, to increase band size and improve performance, use
+the <b><tt>BufferSpace</tt></b> parameter, not
+<b><tt>BandBufferSpace</tt></b>.
+
+<dl>
+<dt><b><tt>BandHeight &lt;integer&gt;</tt></b>
+<dd>The height of bands when banding. 0 means use the largest band height
+that will fit within the BandBufferSpace (or BufferSpace, if
+BandBufferSpace is not specified).
+</dl>
+
+<dl>
+<dt><b><tt>BandWidth &lt;integer&gt;</tt></b>
+<dd>The width of bands in the rasterizing pass, in pixels. 0 means use the
+actual page width.
+</dl>
+
+<dl>
+<dt><b><tt>BandBufferSpace &lt;integer&gt;</tt></b>
+<dd>The size of the band buffer in the rasterizing pass, in bytes. 0 means
+use the same buffer size as for the interpretation pass.
+</dl>
+
+<p>
+Ghostscript supports the following parameter for
+<b><tt>setpagedevice</tt></b> and <b><tt>currentpagedevice</tt></b> that is
+not a device parameter per se:
+
+<dl>
+<dt><b><tt>ViewerPreProcess &lt;procedure&gt;</tt></b>
+<dd>Specifies a procedure to be applied to the page device dictionary
+before any other processing is done. The procedure may not alter the
+dictionary, but it may return a modified copy. This "hook" is provided for
+use by viewing programs such as GSview.
+</dl>
+
+<hr>
+
+<h2><a name="User_parameters"></a>User parameters</h2>
+
+Ghostscript supports the following non-standard user parameters:
+
+<dl>
+<dt><b><tt>ProcessDSCComment &lt;procedure|null&gt;</tt></b>
+<dd>If not null, this procedure is called whenever the scanner detects a DSC
+comment (comment beginning with <b><tt>%%</tt></b> or <b><tt>%!</tt></b>).
+There are two operands, the file and the comment (minus any terminating
+EOL), which the procedure must consume.
+</dl>
+
+<dl>
+<dt><b><tt>ProcessComment &lt;procedure|null&gt;</tt></b>
+<dd>If not null, this procedure is called whenever the scanner detects a
+comment (or, if <b><tt>ProcessDSCComment</tt></b> is also not null, a
+comment other than a DSC comment). The operands are the same as for
+<b><tt>ProcessDSCComment</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>LockFilePermissions &lt;boolean&gt;</tt></b>
+<dd>If <tt>true</tt>, this parameter and the three <tt>PermitFile...</tt>
+parameters cannot be changed. Attempts to change any of the values
+when LockFilePermissions is <tt>true</tt> will signal <b><tt>invalidaccess</tt></b>.
+Also, when this value is <tt>true</tt>, the <b><tt>file</tt></b> operator
+will give <b><tt>invalidaccess</tt></b> when attempting to open files
+(processes) using the <b><tt>%pipe</tt></b> device.
+<p>
+Also when <b><tt>LockFilePermissions</tt></b> is <tt>true</tt>, strings
+cannot reference the parent directory (platform specific). For example
+<b><tt>(../../xyz)</tt></b> is illegal on unix, Windows
+and Macintosh, and <b><tt>([.#.#.XYZ])</tt></b> is illegal on VMS.
+<p>
+This parameter is set <tt>true</tt> by the <b><tt>.setsafe</tt></b> and
+<b><tt>.locksafe</tt></b> operators.
+</dl>
+
+<dl>
+<dt><b><tt>PermitFileReading &lt;array of strings&gt;</tt></b>
+<dt><b><tt>PermitFileWriting &lt;array of strings&gt;</tt></b>
+<dt><b><tt>PermitFileControl &lt;array of strings&gt;</tt></b>
+<dd>These parameters specify paths where file reading, writing and the
+'control' operations are permitted, respectively. File control
+operations are <b><tt>deletefile</tt></b> and <b><tt>renamefile</tt></b>.
+For <b><tt>renamefile</tt></b>, the filename for the current filename
+must match one of the paths on the PermitFileControl list, and the
+new filename must be on <b>both</b> the PermitFileControl and the
+PermitFileWriting lists of paths.
+<p>
+The strings can contain wildcard characters as for the <b><tt>filenameforall</tt></b>
+operator and unless specifying a single file, will end with a <b>*</b>
+for directories (folders) to allow access to all files and sub-directories
+in that directory.
+<p>
+<b>Note:</b> The strings are used for stringmatch operations similar
+to <b><tt>filenameforall</tt></b>, thus on MS Windows platforms, use the '/'
+character to separate directories and filenames or use '\\\\' to
+have the string contain '\\' which will match a single '\' in the
+target filename (use of '/' is strongly recommended).
+<p>
+The <a href=Use.htm#Safer><b>SAFER</b></a> mode and the
+<b><tt>.setsafe</tt></b> operator set all three lists to empty arrays,
+thus the only files that can be read are the <b><tt>%stdin</tt></b> device and
+on LIBPATH or FONTPATH or the Resource paths specified by the /FontResourceDir
+or /GenericResourceDir system params. Files cannot be opened for writing
+anywhere and cannot be deleted or renamed except for files created with the
+<a href=#Tempfile><b>.tempfile</b></a> operator).
+</dl>
+
+<hr>
+
+<h2><a name="Miscellaneous_additions"></a>Miscellaneous additions</h2>
+
+<b><tt>run</tt></b> can take either a string or a file as its argument. In
+the latter case, it just runs the file, closing it at the end, and trapping
+errors just as for the string case.
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 2000 Aladdin Enterprises. All rights
+reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Lib.htm b/Master/xemtex/doc/ghostscript/Lib.htm
new file mode 100644
index 00000000000..d3377b6238b
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Lib.htm
@@ -0,0 +1,491 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>The Ghostscript library</title>
+<!-- $Id: Lib.htm,v 1.14.2.11.2.5 2003/05/17 14:39:00 giles Exp $ -->
+<!-- Originally: lib.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>The Ghostscript Library</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#GS_library">The Ghostscript library</a>
+<li><a href="#PS_operator_API">PostScript operator API</a>
+<ul>
+<li><a href="#Patterns">Patterns</a>
+<li><a href="#Lower_level_API">Lower-level API</a>
+</ul>
+<li><a href="#Full_example">A full example</a>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="GS_library"></a>The Ghostscript library</h2>
+
+<p>
+This document describes the Ghostscript library, a set of procedures
+to implement the graphics and filtering capabilities that are primitive
+operations in the PostScript language and in Adobe Portable Document Format
+(PDF).
+
+<p>
+Ghostscript is actually two programs: a language interpreter, and a
+graphics library. The library provides, in the form of C procedures, all
+the graphics functions of the language, that is, approximately those
+facilities listed in section 8.1 of the <cite>PostScript
+Language Reference Manual</cite>, starting with the
+graphics state operators. In addition, the library provides some
+lower-level graphics facilities that offer higher performance in exchange
+for less generality.
+
+<hr>
+
+<h2><a name="PS_operator_API"></a>PostScript operator API</h2>
+
+<p>
+The highest level of the library, which is the one that most clients will
+use, directly implements the PostScript graphics operators with procedures
+named <b><tt>gs_XXX</tt></b>, for instance <b><tt>gs_moveto</tt></b> and
+<b><tt>gs_fill</tt></b>. Nearly all of these procedures take graphics
+state objects as their first arguments, such as
+
+<blockquote><b><tt>
+int gs_moveto(gs_state *, double, double);
+</tt></b></blockquote>
+
+<p>
+Nearly every procedure returns an integer code which is &gt;= 0 for a
+successful return or &lt;0 for a failure. The failure codes correspond
+directly to PostScript errors, and are defined in
+<b><tt>gserrors.h</tt></b>.
+
+<p>
+The library implements all the operators in the following sections of the
+<cite>PostScript Language Reference Manual</cite>, with the indicated
+omissions and with the APIs defined in the indicated <b><tt>.h</tt></b>
+files. A header of the form <b><em>A.h(B.h)</em></b> indicates that
+<b><em>A.h</em></b> is included in <b><em>B.h</em></b>, so
+<b><em>A.h</em></b> need not be included explicitly if <b><em>B.h</em></b>
+is included. Operators marked with * in the "omissions" column are not
+implemented directly; the library provides lower-level procedures that can
+be used to implement the operator.
+
+<p>
+There are slight differences in the operators that return multiple values,
+since C's provisions for this are awkward. Also, the control structure for
+the operators involving callback procedures (<b><tt>pathforall</tt></b>,
+<b><tt>image</tt></b>, <b><tt>colorimage</tt></b>,
+<b><tt>imagemask</tt></b>) is partly inverted: the client calls a procedure
+to set up an enumerator object, and then calls another procedure for each
+iteration. The <b><tt>...show</tt></b> operators,
+<b><tt>charpath</tt></b>, and <b><tt>stringwidth</tt></b> also use an
+inverted control structure.
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=bottom>
+ <th align=left>Section<br>(operators)
+ <td>&nbsp;&nbsp;
+ <th align=left>Headers
+ <td>&nbsp;&nbsp;
+ <th align=left>Omissions
+<tr> <td colspan=5><hr>
+<tr valign=top> <td>Graphics state -- device-independent
+ <td>&nbsp;
+ <td><b><tt>gscolor.h</tt></b>(<b><tt>gsstate.h</tt></b>)<br><b><tt>gscolor1.h</tt></b><br><b><tt>gscolor2.h</tt></b><br><b><tt>gscspace.h</tt></b><br><b><tt>gshsb.h</tt></b><br><b><tt>gsline.h</tt></b>(<b><tt>gsstate.h</tt></b>)<br><b><tt>gsstate.h</tt></b>
+ <td>&nbsp;
+ <td>&nbsp;
+<tr> <td>&nbsp;
+<tr valign=top> <td>Graphics state -- device-dependent
+ <td>&nbsp;
+ <td><b><tt>gscolor.h</tt></b>(<b><tt>gsstate.h</tt></b>)<br><b><tt>gscolor1.h</tt></b><br><b><tt>gscolor2.h</tt></b><br><b><tt>gsht.h</tt></b>(<b><tt>gsht1.h</tt></b>,<b><tt>gsstate.h</tt></b>)<br><b><tt>gsht1.h</tt></b><br><b><tt>gsline.h</tt></b>(<b><tt>gsstate.h</tt></b>)
+ <td>&nbsp;
+ <td>&nbsp;
+<tr> <td>&nbsp;
+<tr valign=top> <td>Coordinate system and matrix
+ <td>&nbsp;
+ <td><b><tt>gscoord.h</tt></b><br><b><tt>gsmatrix.h</tt></b>
+ <td>&nbsp;
+ <td><b><tt>*matrix</tt></b>, <b><tt>*identmatrix</tt></b>, <b><tt>*concatmatrix</tt></b>, <b><tt>*invertmatrix</tt></b>
+<tr> <td>&nbsp;
+<tr valign=top> <td>Path construction
+ <td>&nbsp;
+ <td><b><tt>gspath.h</tt></b><br><b><tt>gspath2.h</tt></b>
+ <td>&nbsp;
+ <td><b><tt>*arct</tt></b>, <b><tt>*pathforall</tt></b>, <b><tt>ustrokepath</tt></b>, <b><tt>uappend</tt></b>, <b><tt>upath</tt></b>, <b><tt>ucache</tt></b>
+<tr> <td>&nbsp;
+<tr valign=top> <td>Painting
+ <td>&nbsp;
+ <td><b><tt>gsimage.h</tt></b><br><b><tt>gspaint.h</tt></b><br><b><tt>gspath2.h</tt></b>
+ <td>&nbsp;
+ <td><b><tt>*image</tt></b>, <b><tt>*colorimage</tt></b>, <b><tt>*imagemask</tt></b>, <b><tt>ufill</tt></b>, <b><tt>ueofill</tt></b>, <b><tt>ustroke</tt></b>
+<tr> <td>&nbsp;
+<tr valign=top> <td>Form and pattern
+ <td>&nbsp;
+ <td><b><tt>gscolor2.h</tt></b>
+ <td>&nbsp;
+ <td><b><tt>execform</tt></b>
+<tr> <td>&nbsp;
+<tr valign=top> <td>Device setup and output
+ <td>&nbsp;
+ <td><b><tt>gsdevice.h</tt></b>
+ <td>&nbsp;
+ <td><b><tt>*showpage</tt></b>, <b><tt>*set</tt></b>/<b><tt>currentpagedevice</tt></b>
+<tr> <td>&nbsp;
+<tr valign=top> <td>Character and font
+ <td>&nbsp;
+ <td><b><tt>gschar.h</tt></b><br><b><tt>gsfont.h</tt></b>
+ <td>&nbsp;
+ <td>*(all the <b><tt>show</tt></b> operators), <b><tt>definefont</tt></b>, <b><tt>undefinefont</tt></b>, <b><tt>findfont</tt></b>, <b><tt>*scalefont</tt></b>, <b><tt>*makefont</tt></b>, <b><tt>selectfont</tt></b>, <b><tt>[Global]FontDirectory</tt></b>, <b><tt>Standard</tt></b>/<b><tt>ISOLatin1Encoding</tt></b>, <b><tt>findencoding</tt></b>
+</table></blockquote>
+
+<p>
+The following procedures from the list above operate differently from their
+PostScript operator counterparts, as explained here:
+
+<dl>
+<dt><b><tt>gs_makepattern(gscolor2.h)</tt></b>
+<dd>Takes an explicit current color, rather than using the current color in
+the graphics state. Takes an explicit allocator for allocating the pattern
+implementation. See below for more details on
+<b><tt>gs_makepattern</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>gs_setpattern(gscolor2.h)</tt></b>
+<dt><b><tt>gs_setcolor(gscolor2.h)</tt></b>
+<dt><b><tt>gs_currentcolor(gscolor2.h)</tt></b>
+<dd>Use <b><tt>gs_client_color</tt></b> rather than a set of color
+parameter values. See below for more details on
+<b><tt>gs_setpattern</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>gs_currentdash_length/pattern/offset(gsline.h)</tt></b>
+<dd>Splits up <b><tt>currentdash</tt></b> into three separate procedures.
+</dl>
+
+<dl>
+<dt><b><tt>gs_screen_init/currentpoint/next/install(gsht.h)</tt></b>
+<dd>Provide an "enumeration style" interface to <b><tt>setscreen</tt></b>.
+(<b><tt>gs_setscreen</tt></b> is also implemented.)
+</dl>
+
+<dl>
+<dt><b><tt>gs_rotate/scale/translate(gscoord.h)</tt></b>
+<dt><b><tt>gs_[i][d]transform(gscoord.h)</tt></b>
+<dd>These always operate on the graphics state CTM. The corresponding
+operations on free-standing matrices are in <b><tt>gsmatrix.h</tt></b> and
+have different names.
+</dl>
+
+<dl>
+<dt><b><tt>gs_path_enum_alloc/init/next/cleanup(gspath.h)</tt></b>
+<dd>Provide an "enumeration style" implementation of
+<b><tt>pathforall</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>gs_image_enum_alloc(gsimage.h)</tt></b>
+<dt><b><tt>gs_image_init/next/cleanup(gsimage.h)</tt></b>
+<dd>Provide an "enumeration style" interface to the equivalent of
+<b><tt>image</tt></b>, <b><tt>imagemask</tt></b>, and
+<b><tt>colorimage</tt></b>. In the <b><tt>gs_image_t</tt></b>,
+<b><tt>ColorSpace</tt></b> provides an explicit color space, rather than
+using the current color space in the graphics state;
+<b><tt>ImageMask</tt></b> distinguishes <b><tt>imagemask</tt></b> from
+<b><tt>[color]image</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>gs_get/putdeviceparams(gsdevice.h)</tt></b>
+<dd>Take a <b><tt>gs_param_list</tt></b> for specifying or receiving the
+parameter values. See <b><tt>gsparam.h</tt></b> for more details.
+</dl>
+
+<dl>
+<dt><b><tt>gs_show_enum_alloc/release(gschar.h)</tt></b>
+<dt><b><tt>gs_xxxshow_[n_]init(gschar.h)</tt></b>
+<dt><b><tt>gs_show_next(gschar.h)</tt></b>
+<dd>Provide an "enumeration style" interface to writing text. Note that
+control returns to the caller if the character must be rasterized.
+</dl>
+
+<p>
+This level of the library also implements the following operators from other
+sections of the Manual:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=bottom>
+ <th align=left>Section<br>(operators)
+ <td>&nbsp;&nbsp;
+ <th align=left>Headers
+ <td>&nbsp;&nbsp;
+ <th align=left>Operators
+<tr> <td colspan=5><hr>
+<tr valign=top> <td>Interpreter parameter
+ <td>&nbsp;
+ <td><b><tt>gsfont.h</tt></b>
+ <td>&nbsp;
+ <td><b><tt>cachestatus</tt></b>, <b><tt>setcachelimit</tt></b>, <b><tt>*set/currentcacheparams</tt></b>
+<tr valign=top> <td>Display PostScript
+ <td>&nbsp;
+ <td><b><tt>gsstate.h</tt></b>
+ <td>&nbsp;
+ <td><b><tt>set/currenthalftonephase</tt></b>
+</table></blockquote>
+
+<p>
+In order to obtain the full PostScript Level 2 functionality listed above,
+<b><tt>FEATURE_DEVS</tt></b> must be set in the makefile to include at least the following:
+
+<blockquote><b><tt>
+FEATURE_DEVS=patcore.dev cmykcore.dev psl2core.dev dps2core.dev ciecore.dev path1core.dev hsbcore.dev
+</tt></b></blockquote>
+
+<p>
+The <b><tt>*lib.mak</tt></b> makefiles mentioned below do not always
+include all of these features.
+
+<p>
+Files named <b><tt>gs*.c</tt></b> implement the higher level of the
+graphics library. As might be expected, all procedures, variables, and
+structures available at this level begin with "<b><tt>gs_</tt></b>".
+Structures that appear in these interfaces, but whose definitions may be
+hidden from clients, also have names beginning with "<b><tt>gs_</tt></b>",
+that is, the prefix, not the implementation, reflects at what level the
+abstraction is made available.
+
+<h3><a name="Patterns"></a>Patterns</h3>
+
+<p>
+Patterns are the most complicated PostScript language objects that the
+library API deals with. As in PostScript, defining a pattern color and
+using the color are two separate operations.
+
+<p>
+<b><tt>gs_makepattern</tt></b> defines a pattern color. Its arguments are as follows:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <td><b><tt>gs_client_color *</tt></b>
+ <td>&nbsp;&nbsp;&nbsp;
+ <td>The resulting <b><tt>Pattern</tt></b> color is stored here. This is different from PostScript, which has no color objects <em>per se</em>, and hence returns a modified copy of the dictionary.
+<tr valign=top> <td><b><tt>const gs_client_pattern *</tt></b>
+ <td>&nbsp;
+ <td>The analogue of the original <b><tt>Pattern</tt></b> dictionary, described in detail just below.
+<tr valign=top> <td><b><tt>const gs_matrix *</tt></b>
+ <td>&nbsp;
+ <td>Corresponds to the matrix argument of the <b><tt>makepattern</tt></b> operator.
+<tr valign=top> <td><b><tt>gs_state *</tt></b>
+ <td>&nbsp;
+ <td>The current graphics state.
+<tr valign=top> <td><b><tt>gs_memory_t *</tt></b>
+ <td>&nbsp;
+ <td>The allocator to use for allocating the saved data for the
+ <b><tt>Pattern</tt></b> color. If this is
+ <b><tt>NULL</tt></b>, <b><tt>gs_makepattern</tt></b> uses the
+ same allocator that allocated the graphics state. Library
+ clients should probably always use <b><tt>NULL</tt></b>.
+
+</table></blockquote>
+
+<p>
+The <b><tt>gs_client_pattern</tt></b> structure defined in
+<b><tt>gscolor2.h</tt></b> corresponds to the <b><tt>Pattern</tt></b>
+dictionary that is the argument to the PostScript language
+<b><tt>makepattern</tt></b> operator. This structure has one extra member,
+<b><tt>void&nbsp;*client_data</tt></b>, which is a place for clients to
+store a pointer to additional data for the <b><tt>PaintProc</tt></b>; this
+provides the same functionality as putting additional keys in the
+<b><tt>Pattern</tt></b> dictionary at the PostScript language level. The
+<b><tt>PaintProc</tt></b> is an ordinary C procedure that takes as
+parameters a <b><tt>gs_client_color&nbsp;*</tt></b>, which is the
+<b><tt>Pattern</tt></b> color that is being used for painting, and a
+<b><tt>gs_state&nbsp;*</tt></b>, which is the same graphics state that
+would be presented to the <b><tt>PaintProc</tt></b> in PostScript.
+Currently the <b><tt>gs_client_color&nbsp;*</tt></b> is always the current
+color in the graphics state, but the <b><tt>PaintProc</tt></b> should not
+rely on this. The <b><tt>PaintProc</tt></b> can retrieve the
+<b><tt>gs_client_pattern&nbsp;*</tt></b> from the
+<b><tt>gs_client_color&nbsp;*</tt></b> with the
+<b><tt>gs_getpattern</tt></b> procedure, also defined in
+<b><tt>gscolor2.h</tt></b>, and from there, it can retrieve the
+<b><tt>client_data</tt></b> pointer.
+
+<p>
+The normal way to set a <b><tt>Pattern</tt></b> color is to call
+<b><tt>gs_setpattern</tt></b> with the graphics state and with the
+<b><tt>gs_client_color</tt></b> returned by <b><tt>gs_makepattern</tt></b>.
+After that, one can use <b><tt>gs_setcolor</tt></b> to set further
+<b><tt>Pattern</tt></b> colors (colored, or uncolored with the same
+underlying color space); the rules are the same as those in PostScript.
+Note that for <b><tt>gs_setpattern</tt></b>, the
+<b><tt>paint.values</tt></b> in the <b><tt>gs_client_color</tt></b> must be
+filled in for uncolored patterns; this corresponds to the additional
+arguments for the PostScript <b><tt>setpattern</tt></b> operator in the
+uncolored case.
+
+<p>
+There is a special procedure <b><tt>gs_makebitmappattern</tt></b> for creating bitmap-based
+patterns. Its API is documented in <b><tt>gscolor2.h</tt></b>; its implementation, in
+<b><tt>gspcolor.c</tt></b>, may be useful as an example of a pattern using a particularly
+simple <b><tt>PaintProc.</tt></b>
+
+<h3><a name="Lower_level_API"></a>Lower-level API</h3>
+
+<p>
+Files named <b><tt>gx*.c</tt></b> implement the lower level of the graphics
+library. The interfaces at the <b><tt>gx</tt></b> level are less stable,
+and expose more of the implementation detail, than those at the
+<b><tt>gs</tt></b> level: in particular, the <b><tt>gx</tt></b> interfaces
+generally use device coordinates in an internal fixed-point representation,
+as opposed to the <b><tt>gs</tt></b> interfaces that use floating point
+user coordinates. Named entities at this level begin with
+<b><tt>gx_</tt></b>.
+
+<p>
+Files named <b><tt>gz*.c</tt></b> and <b><tt>gz*.h</tt></b> are internal to
+the Ghostscript implementation, and are not designed to be called by
+clients.
+
+<hr>
+
+<h2><a name="Full_example"></a>A full example</h2>
+
+<p>
+The file <b><tt>gslib.c</tt></b> in the Ghostscript fileset is a complete
+example program that initializes the library and produces output using it;
+files named <b><tt>*lib.mak</tt></b> (such as <b><tt>ugcclib.mak</tt></b>
+and <b><tt>bclib.mak</tt></b>) are makefiles using <b><tt>gslib.c</tt></b>
+as the main program. The following annotated excerpts from this file are
+intended to provide a roadmap for applications that call the library.
+
+<blockquote><pre>/* Capture stdin/out/err before gs.h redefines them. */
+#include &lt;stdio.h&gt;
+static FILE *real_stdin, *real_stdout, *real_stderr;
+static void
+get_real(void)
+{ real_stdin = stdin, real_stdout = stdout, real_stderr = stderr;
+}</pre></blockquote>
+
+<p>
+Any application using Ghostscript should include the fragment above at the
+very beginning of the main program.
+
+<blockquote><pre>#include "gx.h"</pre></blockquote>
+
+<p>
+The <b><tt>gx.h</tt></b> header includes a wealth of declarations related
+to the Ghostscript memory manager, portability machinery, debugging
+framework, and other substrate facilities. Any application file that calls
+any Ghostscript API functions should probably include <b><tt>gx.h</tt></b>.
+
+<blockquote><pre>/* Configuration information imported from gconfig.c. */
+extern gx_device *gx_device_list[];
+
+/* Other imported procedures */
+ /* from gsinit.c */
+extern void gs_lib_init(P1(FILE *));
+extern void gs_lib_finit(P2(int, int));
+ /* from gsalloc.c */
+extern gs_ref_memory_t *ialloc_alloc_state(P2(gs_memory_t *, uint));</pre></blockquote>
+
+<p>
+The externs above are needed for initializing the library.
+
+<blockquote><pre> gs_ref_memory_t *imem;
+#define mem ((gs_memory_t *)imem)
+ gs_state *pgs;
+ gx_device *dev = gx_device_list[0];
+
+ gp_init();
+ get_real();
+ gs_stdin = real_stdin;
+ gs_stdout = real_stdout;
+ gs_stderr = real_stderr;
+ gs_lib_init(stdout);
+ ....
+ imem = ialloc_alloc_state(&amp;gs_memory_default, 20000);
+ imem-&gt;space = 0;
+ ....
+ pgs = gs_state_alloc(mem);</pre></blockquote>
+
+<p>
+The code above initializes the library and its memory manager. <b><tt>pgs</tt></b> now
+points to the graphics state that will be passed to the drawing routines in
+the library.
+
+<blockquote><pre> gs_setdevice_no_erase(pgs, dev); /* can't erase yet */
+ { gs_point dpi;
+ gs_screen_halftone ht;
+ gs_dtransform(pgs, 72.0, 72.0, &amp;dpi);
+ ht.frequency = min(fabs(dpi.x), fabs(dpi.y)) / 16.001;
+ ht.angle = 0;
+ ht.spot_function = odsf;
+ gs_setscreen(pgs, &amp;ht);
+ }</pre></blockquote>
+
+<p>
+The code above initializes the default device and sets a default halftone
+screen. (For brevity, we have omitted the definition of odsf, the spot
+function.)
+
+<blockquote><pre> /* gsave and grestore (among other places) assume that */
+ /* there are at least 2 gstates on the graphics stack. */
+ /* Ensure that now. */
+ gs_gsave(pgs);</pre></blockquote>
+
+<p>
+The call above completes initializing the graphics state. When the program
+is finished, it should execute:
+
+<blockquote><pre> gs_lib_finit(0, 0);</pre></blockquote>
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 1997, 1998 Aladdin Enterprises.
+All rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Maintain.htm b/Master/xemtex/doc/ghostscript/Maintain.htm
new file mode 100644
index 00000000000..789602bd86c
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Maintain.htm
@@ -0,0 +1,210 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Ghostscript maintenance procedures</title>
+<!-- $Id: Maintain.htm,v 1.23.2.12.2.6 2003/05/17 14:39:00 giles Exp $ -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Ghostscript maintenance procedures</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Introduction">Introduction</a>
+<li><a href="#CVS">Rules for CVS commits</a>
+<li><a href="#Adding_or_removing_files">Adding or Removing Files</a>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a> and the instructions on how to <a href="Make.htm">build
+Ghostscript</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="Introduction"></a>Introduction</h2>
+
+<p>
+This document describes various maintenance procedures associated with
+development version
+Ghostscript. It is only meant for developers actively working on
+Ghostscript.
+
+<hr>
+
+<h2><a name="CVS"></a>Rules for CVS Commits</h2>
+
+<p>
+This section describes a few rules intended to make life easier for people
+working with this code base.
+
+<p>
+At any given time, there are usually two active branches: a stable
+branch and a development branch. The development branch is HEAD, which
+is the default when doing a checkout without a -r flag. At the time of
+this writing (7 October 2002), the stable branch is tagged
+GS_7_0x.
+
+<p>
+A concise and useful document for working with CVS branches is Jeff
+Semke's <a href="http://www.psc.edu/~semke/cvs_branches.html"
+class="offsite">CVS
+Branch and Tag Primer</a>. A
+somewhat more detailed explanation is the <a
+href="http://www.loria.fr/~molli/cvs/doc/cvs_5.html"
+class="offsite">Branching and
+merging</a> section from the CVS documentation by Pascal Molli.
+
+<p>
+For new development commits, you can basically ignore the
+branches. Just commit to the HEAD branch. For bug fixes for the stable
+branch, it is your responsibility to commit to both the stable branch
+and, if appropriate, HEAD. Commits to HEAD are appropriate if they are
+in an area not being actively reworked, if the development version
+exhibits the same bug symptoms, and if the patch fixes these
+symptoms.
+
+<p>
+When modifying a number of files for a single issue, please group them
+together as a single commit. For two separate sets of changes dealing
+with two different issues, there should be two commits.
+
+<p>
+You should strive not to introduce any new bugs with your
+commit. Always make sure the code compiles before committing. Test the
+changes with several files, including the problem file in the case of
+a bug fix, and other files that may have been affected by the
+changes.
+
+<p>
+Always supply a descriptive log message for your commits. These log
+messages are used to automatically generate the <a
+href="News.htm">News.htm</a> file and History changelogs, and are also
+crucial for navigating CVS using the CVSweb gateway. Please try to
+keep the style of the descriptions similar to those in the current
+History#.htm files.
+
+<p>
+Log messages beginning with 'Fix' are treated specially. Such messages are
+put under the "Fixes problems" heading when the History files are
+generated. Additionally, if the first four characters are 'Fix:' this is removed
+(i.e., "Fix: The xyz" becomes "The xyz", but "Fixes xyz" is copied unchanged).
+This feature is intended for explicit bugfixes and should be avoided for
+enhancements or commits with long explanations.
+
+<p>
+Information about who changed what, when, and why is maintained in the
+CVS logs. In general, a file should be a clean representation of the
+current version rather than a history trail of how it got
+there. Keeping old code around for reference is usually not necessary,
+as it is stored in the CVS diffs. When necessary, use #if / #endif, or
+descriptive conditionals such as #ifdef OLD_CMAP_TABLES. Do not
+comment out old code. (A very few files that are distributed separate
+from Ghostscript have a change log at the beginning, which should be
+maintained: currently, only ansiknr.c and md5.[ch].)
+
+<p>
+Additionally, if your patch removes a feature, changes an interface or
+otherwise creates an incompatibility with the last release, you
+must add an entry to the "Incompatible changes" section of <tt>News.htm</tt>
+as this information can only be generated manually.
+This admonition applies to api changes that might
+affect other developers as well as user issues like switch behavior.
+Upon release, the accumulated incompatible changes will be moved to the
+relevant History file, and the News collection in cvs will be wiped clean
+for the next version.
+
+<p>
+All patches must be reviewed before being committed. Please email your
+patch to <a
+href="mailto:gs-code-review@ghostscript.com">gs-code-review@ghostscript.com</a>.
+Make sure to include your commit comment and any other information
+that would be helpful for the review. Also, please identify which
+branches the patch is intended for.
+
+<p>
+If you are not an employee or consultant of Artifex or artofcode, then
+we need a copyright assignment form so we can incorporate your
+changes. Please email Raph Levien &lt;<a
+href="mailto:raph@artofcode.com">raph@artofcode.com</a>&gt; and
+include your snailmail address for a hardcopy assignment form.
+
+<h2><a name="Adding_or_removing_files"></a>Adding or removing files</h2>
+
+<p>
+When adding or removing files, don't forget to invoke <b><tt>cvs
+add</tt></b> or <b><tt>cvs rm</tt></b>.
+
+<p>
+When adding files, update the file roadmap in
+<b><tt>doc/Develop.htm</tt></b>.
+
+<p>
+When adding or removing files other than .c or .h: If the files will be
+used at runtime, check the install list in <b><tt>unixinst.mak</tt></b>.
+
+<p>
+When adding .c files, update the relevant <b><tt>.mak</tt></b> file
+(usually <b><tt>devs.mak</tt></b>, <b><tt>int.mak</tt></b>, or
+<b><tt>lib.mak</tt></b>).
+
+<p>
+When adding new documentation, add a link to <tt>doc/Readme.htm</tt> and
+a short blurb describing the contents of the file.
+
+<p>
+When adding or changing fonts, update <b><tt>lib/Fontmap.GS</tt></b>,
+<b><tt>fonts.mak</tt></b>, and possibly the compiled fonts in
+<b><tt>gs.mak</tt></b> and the examples in
+<b><tt>doc/Fonts.htm</tt></b>.
+
+<p>
+When adding .ps files, update <b><tt>doc/Psfiles.htm</tt></b>.
+
+<p>
+Likewise, you will want to delete any references for a file you
+remove from Ghostscript.
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 2000 artofcode LLC.
+All rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Make.htm b/Master/xemtex/doc/ghostscript/Make.htm
new file mode 100644
index 00000000000..2fecd470c45
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Make.htm
@@ -0,0 +1,2766 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>How to build Ghostscript from source code</title>
+<!-- $Id: Make.htm,v 1.36.2.19.2.6 2003/05/17 14:39:00 giles Exp $ -->
+<!-- Originally: make.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>How to build Ghostscript from source code</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#General_overview">General overview</a>
+<li><a href="#Acquiring">How to acquire the source code</a>
+<ul>
+<li><a href="#Ghostscript_source">Ghostscript source code</a>
+<li><a href="#Third-party_libraries">Third-party library source code</a>
+</ul>
+<li><a href="#Unpack">How to unpack the source code</a>
+<ul>
+<li><a href="#Tarfiles">How to unpack compressed tar files generally</a>
+<li><a href="#Zipfiles">How to unpack zip files generally</a>
+<li><a href="#Unpack_Ghostscript">How to unpack Ghostscript itself</a>
+<li><a href="#Unpack_libraries">How to unpack the third-party libraries</a>
+</ul>
+<li><a href="#Makefile_overview">How to prepare the makefiles</a>
+<ul>
+<li><a href="#Preparing_makefiles">Changes for your environment</a>
+<li><a href="#Features_and_devices">Selecting features and devices</a>
+<ul>
+<li><a href="#Precompiled_data">Precompiled run-time data</a>
+<li><a href="#GNU_readline">GNU readline</a>
+</ul>
+<li><a href="#Makefile_setup">Setting up "makefile"</a>
+<li><a href="#Invoke_make">Invoking "make"</a>
+<li><a href="#Cross-compiling">Cross-compiling</a>
+</ul>
+<li><a href="#PC_build">How to build Ghostscript from source (PC version)</a>
+<ul>
+<li><a href="#Borland_build">Borland/Inprise environment</a>
+<li><a href="#Microsoft_build">Microsoft environment</a>
+<li><a href="#Self-extracting_executables">Making self-extracting executables</a>
+<li><a href="#Watcom_build">Watcom environment</a>
+<li><a href="#Cygwin32_build">Cygwin32 gcc</a>
+<li><a href="#IntelWin32_build">Intel C/C++ compiler</a>
+</ul>
+<li><a href="#Mac_build">How to build Ghostscript from source (MacOS version)</a>
+<ul>
+<li><a href="#MacOS">Traditional MacOS</a>
+<li><a href="#MacOSX">MacOS X</a>
+</ul>
+<li><a href="#Unix_build">How to build Ghostscript from source (Unix version)</a>
+<ul>
+<li><a href="#Multi_architecture_makefile">The multi-architecture makefile</a>
+<li><a href="#UNIX_makefile">Setting up "makefile"</a>
+<li><a href="#Shared_object">Shared object</a>
+<li><a href="#Tool_specific_issues">Tool-specific issues</a>
+<ul>
+<li><a href="#gcc_27x">gcc 2.7.*</a>
+<li><a href="#GNU_make">GNU make</a>
+</ul>
+<li><a href="#OS_specific_issues">OS-specific issues</a>
+<ul>
+<li><a href="#386_Unix">386 Unix</a>
+<li><a href="#BSDI">BSDI</a>
+<li><a href="#Digital_Unix">Digital Unix (Alpha)</a>
+<li><a href="#FreeBSD">FreeBSD</a>
+<li><a href="#GNULinux">GNU/Linux</a>
+<li><a href="#NeXTSTEP">NeXTSTEP / OpenSTEP</a>
+<li><a href="#SCO">SCO Unix/Xenix</a>
+<li><a href="#SVR4">SVR4 Unix</a>
+<li><a href="#System_V">System V Unix platforms</a>
+<li><a href="#Unixware">Unixware</a>
+</ul>
+<li><a href="#Hardware_specific_issues">Hardware-specific issues</a>
+<ul>
+<li><a href="#Alpha_with_gcc">Alpha with gcc</a>
+<li><a href="#Apollo">H-P Apollo</a>
+<li><a href="#ATT_7040">AT&amp;T 7040 R3</a>
+<li><a href="#Convex">Convex</a>
+<li><a href="#DECStations">DECStations with Ultrix</a>
+<li><a href="#HP_RISC">H-P RISC workstations</a>
+<li><a href="#Intergraph">Intergraph Clipper</a>
+<li><a href="#MIPS">MIPS</a>
+<li><a href="#NCR_3550">NCR 3550</a>
+<li><a href="#Pyramid">Pyramid MIServer-S</a>
+<li><a href="#RS6000">IBM RS/6000 with AIX</a>
+<li><a href="#Silicon_Graphics">Silicon Graphics</a>
+<li><a href="#Sun">Sun</a>
+<li><a href="#SunOS">SunOS</a>
+<li><a href="#Solaris">Solaris</a>
+<li><a href="#VAX_Ultrix">VAX with Ultrix</a>
+</ul>
+</ul>
+<li><a href="#OS2_build">How to build Ghostscript from source (OS/2 version)</a>
+<li><a href="#VMS_build">How to build Ghostscript from source (OpenVMS version)</a>
+<ul>
+<li><a href="#GNU_make_VMS">Building with GNU make on OpenVMS</a>
+<li><a href="#MMK_MMS_VMS">Building with MMK or MMS on OpenVMS</a>
+</ul>
+<li><a href="#Other_environments">Other environments</a>
+<ul>
+<li><a href="#No_multi_thread">Environments lacking multi-threading</a>
+<li><a href="#Plan_9">Plan 9</a>
+<li><a href="#QNX">QNX</a>
+</ul>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a> and the instructions on how to <a href="Install.htm">install
+Ghostscript</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="General_overview"></a>General overview</h2>
+
+<p>
+This document describes how to build a Ghostscript executable from source
+code. There are four major steps to building Ghostscript:
+
+<ol>
+<li>Acquire the compressed archive files of source code for Ghostscript and
+the required third-party libraries.
+<li>Unpack the archive files into the Ghostscript directory and correctly
+named subdirectories.
+<li>Prepare the makefiles, including specific changes for your operating
+environment and your choice of configuration options.
+<li>Invoke "<b><tt>make</tt></b>" to build the software.
+</ol>
+
+<p>
+The remainder of this document describes each of these steps in detail.
+Note that some of this process is platform-dependent. After building
+Ghostscript you must then install it; for that, see the
+<a href="Install.htm">installation instructions</a>.
+
+<hr>
+
+<h2><a name="Acquiring"></a>How to acquire the source code</h2>
+
+<p>
+Building Ghostscript requires the Ghostscript source code itself, and also
+the source code for some third-party libraries that Ghostscript uses.
+
+<h3><a name="Ghostscript_source"></a>Ghostscript source code</h3>
+
+<p><a name="Authoritative_distribution_site"></a>
+Ghostscript is available from all the standard GNU mirrors, e.g.
+
+<blockquote>
+<a href="ftp://ftp.gnu.org/pub/gnu/"
+class="offsite">ftp://ftp.gnu.org/pub/gnu/</a>
+</blockquote>
+
+<p>
+Ghostscript source code is packaged in two different formats:
+gzip-compressed tar files (*<b><tt>.tar.gz</tt></b>) and zip files
+(*<b><tt>.zip</tt></b>). For all versions there are gzip-compressed tar
+files:
+
+<blockquote>
+<b><tt>ghostscript-</tt></b>#.##<b><tt>.tar.gz</tt></b><br>
+<b><tt>ghostscript-fonts-std-</tt></b>#.##<b><tt>.tar.gz</tt></b><br>
+<b><tt>ghostscript-fonts-other-</tt></b>#.##<b><tt>.tar.gz</tt></b>
+</blockquote>
+
+<p>For recent versions of Ghostscript there may also be zip files
+
+<blockquote>
+<b><tt>gs</tt></b>###<b><tt>src.zip</tt></b><br>
+<b><tt>gs</tt></b>###<b><tt>w32.exe</tt></b>
+</blockquote>
+
+<p>
+("#.##" and "###" are version numbers in punctuated and unpunctuated form.)
+Software to decompress and extract both formats is available for almost
+every platform for which Ghostscript is available -- including Unix, DOS,
+MS Windows, and VMS -- so you can choose the format most convenient for
+you; but it's up to you to locate that software. See the section on <a
+href="#Unpack">unpacking the source code</a>.
+
+<h3><a name="Third-party_libraries"></a>Third-party library source code</h3>
+
+<p>
+To build Ghostscript you need the source code for the <a
+href="http://www.ijg.org/">Independent JPEG Group</a> (IJG) library, the
+<a href="http://www.libpng.org/pub/png/">Portable Network Graphics</a>
+(PNG)
+library, and the <a
+href="http://www.gzip.org/zlib/">zlib</a>
+compression and decompression library. Here are authoritative distribution
+points for these libraries, where as elsewhere, "#" is used for version
+numbers. The JPEG source code is quite stable, so the reference
+here includes the latest version number. The zlib references are
+version-independent and should always provide the latest version.
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Third-party libraries: authoritative sources</font><hr>
+<tr> <td valign=top>JPEG
+ <td>&nbsp;&nbsp;&nbsp;
+ <td><a href="ftp://ftp.uu.net/graphics/jpeg/"
+class="offsite">ftp://ftp.uu.net/graphics/jpeg/</a><a
+href="ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz"
+class="offsite">jpegsrc.v6b.tar.gz</a><br>
+ <a href="ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/"
+class="offsite">ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/</a><a
+href="ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/jpegsr6b.zip">jpegsr6b.zip</a>
+
+<tr> <td valign=top>PNG
+ <td>&nbsp;
+ <td><a href="http://www.libpng.org/pub/png/src/"
+class="offsite">http://www.libpng.org/pub/png/src/</a>libpng-#.#.#.tar.gz<br>
+ <a href="http://www.libpng.org/pub/png/src/"
+class="offsite">http://www.libpng.org/pub/png/src/</a>lpng###.zip<br>
+ <a href="ftp://swrinde.nde.swri.edu/pub/png/src/"
+class="offsite">ftp://swrinde.nde.swri.edu/pub/png/src/</a>libpng-#.#.#.tar.gz<br>
+ <a href="ftp://swrinde.nde.swri.edu/pub/png/src/"
+class="offsite">ftp://swrinde.nde.swri.edu/pub/png/src/</a>lpng###.zip
+
+<tr> <td valign=top>zlib (latest)
+ <td>&nbsp;
+ <td> <a href="http://www.gzip.org/zlib/zlib.tar.gz"
+class="offsite">http://www.gzip.org/zlib/zlib.tar.gz</a><br>
+ <a href="http://www.gzip.org/zlib/zlib.zip"
+class="offsite">http://www.gzip.org/zlib/zlib.zip</a><br>
+ <a href="ftp://swrinde.nde.swri.edu/pub/png/src/" class="offsite">ftp://swrinde.nde.swri.edu/pub/png/src/zlib-#.#.#.tar.gz</a><br>
+ <a href="ftp://swrinde.nde.swri.edu/pub/png/src/" class="offsite">ftp://swrinde.nde.swri.edu/pub/png/src/zlib###.zip</a>
+</table></blockquote>
+
+<p>
+On DOS or MS Windows one ordinarily uses the zip file kits, in other
+environments the compressed tar files, but this is simply a matter of
+convenience, since for the same version of the software the compressed tar
+file has the same contents as the zip file. Note that each of these
+libraries has <b><em>its own version number</em></b> that has
+<b><em>nothing to do with Ghostscript's version number</em></b>; you should
+get the highest numbered version. (If you encounter difficulties in the
+build process you might have to use a lower-numbered version, but don't
+worry about this yet.) If you're running GNU/Linux, you might check whether
+these libraries are already available in source form on your system, since
+many GNU/Linux distributors include them; but we advise you to get the highest
+version from the Net if you can.
+
+<p>
+Although the zip archives of an old version of the PNG library may not be
+named <b><tt>lpng</tt></b>###<b><tt>.zip</tt></b>, we refer to it as
+<b><tt>lpng</tt></b>###<b><tt>.zip</tt></b>.
+
+<p>
+On MacOS, the .sit source archive includes the appropriate source versions
+of these libraries, so no additional downloads are necessary.
+
+<hr>
+
+<h2><a name="Unpack"></a>How to unpack the source code</h2>
+
+<p>
+Unfortunately there are no generally accepted standards for how to package
+source code into archives, so the instructions for unpacking Ghostscript are
+longer than they should be. We begin with a brief explanation of how to
+extract the two kinds of archive files.
+
+<h3><a name="Tarfiles"></a>How to unpack compressed tar files generally</h3>
+
+<p>
+Tar (<b><tt>.tar</tt></b>) files are the <em>de facto</em> standard for
+archiving files on Unix (every Unix system has the <b><tt>tar</tt></b>
+program), and programs to extract their contents are also widely available
+for DOS, MS Windows, and VMS. To economize on space and downloading time,
+Ghostscript's tar files are compressed with GNU <b><tt>gzip</tt></b>, which
+adds the suffix "<b><tt>.gz</tt></b>" to the file name, giving
+"<b><tt>.tar.gz</tt></b>".
+
+<p>
+To unpack a compressed tar file <b><tt>MyArchive.tar.gz</tt></b> you
+must both decompress it and extract the contents. You can do this in two
+steps, one to decompress the file and another to unpack it:
+
+<blockquote>
+<b><tt>gzip -d MyArchive.tar.gz</tt></b>
+<br><b><tt>tar -xf MyArchive.tar</tt></b>
+</blockquote>
+
+<p>
+or in a pipeline:
+
+<blockquote>
+<b><tt>gzip -d -c MyArchive.tar.gz | tar -xf -</tt></b>
+</blockquote>
+
+<p>
+or, if you have a program like GNU <b><tt>tar</tt></b> that can handle
+compressed tar files, with a single command:
+
+<blockquote>
+<b><tt>tar -zxf MyArchive.tar.gz</tt></b>
+</blockquote>
+
+<p>
+The <b><tt>tar</tt></b> program automatically preserves directory structure
+in extracting files. The Ghostscript source archive puts all files under a
+directory <b><tt>gs</tt></b>#.##, so using <b><tt>tar</tt></b> to unpack a
+compressed archive should always properly create that directory, which we
+will call the "gs directory". Make sure you're positioned in the
+<b><em>parent</em></b> of the gs directory <b><em>before</em></b> unpacking
+the files. If a subdirectory doesn't already exist, <b><tt>tar</tt></b>
+creates it.
+
+<p>
+Some other programs -- under MS Windows, for instance -- can also unpack
+compressed tar files, but they may not automatically preserve directory
+structure nor even extract files into the current directory. If you use
+one of these, you must
+
+<ul>
+<li>set the program's options to "Use folder names" or the equivalent, and
+<li>check that it is extracting files into the right place.
+</ul>
+
+<h3><a name="Zipfiles"></a>How to unpack zip files generally</h3>
+
+<p>
+Zip files are the <em>de facto</em> standard for archiving files on DOS and
+MS Windows, and programs to extract their contents are widely available for
+DOS, MS Windows, Unix, VMS, and other platforms. Zip files are at once an
+archive format and a compressed format, so an unzipping program
+decompresses and extracts archived files as a single step.
+
+<p>
+One common 16-bit DOS program is <b><tt>pkunzip</tt></b>, which comes in
+the <b><tt>pkzip</tt></b> package. If you use this, you should ensure that
+you have at least version 2.04g, because with its <b><tt>-d</tt></b>
+switch, that version of <b><tt>pkunzip</tt></b> preserves the directory
+structure of archived files when extracting them; see below. Another
+popular free program to unpack zip archives, available for DOS and MS
+Windows (16-bit and 32-bit), Unix, VMS, and other platforms, is InfoZIP
+<b><tt>unzip</tt></b>:
+
+<blockquote>
+<a href="http://www.info-zip.org/pub/infozip/UnZip.html"
+class="offsite">http://www.info-zip.org/pub/infozip/UnZip.html</a>
+</blockquote>
+
+<p>
+Unlike <b><tt>pkunzip</tt></b>, InfoZIP <b><tt>unzip</tt></b> automatically
+preserves the directory structure of extracted files. So if you have a zip
+archive <b><tt>MyArchive.zip</tt></b>:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Extracting zipped files</font><hr>
+<tr valign=bottom>
+ <th align=left>Command
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th align=left>Preserves directory structure
+<tr> <td colspan=3><hr>
+<tr valign=top> <td><b><tt>pkunzip MyArchive.zip</tt></b>
+ <td>&nbsp;
+ <td>Does <b><em>NOT</em></b>
+<tr valign=top> <td><b><tt>pkunzip -d MyArchive.zip</tt></b>
+ <td>&nbsp;
+ <td><b><em>DOES</em></b> (note the <b><tt>-d</tt></b> switch)
+<tr valign=top> <td><b><tt>unzip MyArchive.zip</tt></b>
+ <td>&nbsp;
+ <td><b><em>DOES</em></b>
+</table></blockquote>
+
+<p>
+As with the compressed tar files, make sure you're positioned in the
+<b><em>parent</em></b> of the gs directory <b><em>before</em></b> unpacking
+the files. If a subdirectory doesn't already exist, <b><tt>zip</tt></b> or
+<b><tt>pkunzip&nbsp;-d</tt></b> creates it.
+
+<h3><a name="Unpack_Ghostscript"></a>How to unpack Ghostscript itself</h3>
+
+<p>
+At this point you have <a href="#Acquiring">acquired all the source code</a>
+and are ready to unpack it according to the preceding guidelines for <a
+href="#Tarfiles">tar files</a> or <a href="#Zipfiles">zip files</a>. To
+unpack the Ghostscript source, make the <b><em>parent</em></b> of the (new)
+gs directory the current directory.
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr> <th align=left valign=top>2-step:
+ <td>&nbsp;&nbsp;&nbsp;
+ <td><b><tt>gzip -d ghostscript-</tt></b>#.##<b><tt>.tar.gz</tt></b><br><b><tt>tar -xf ghostscript-</tt></b>#.##<b><tt>.tar</tt></b>
+<tr><td>
+<tr> <th align=left valign=top>Pipe:
+ <td>&nbsp;
+ <td><b><tt>gzip -d -c ghostscript-</tt></b>#.##<b><tt>.tar.gz | tar -xf -</tt></b>
+<tr><td>
+<tr> <th align=left valign=top>GNU <b><tt>tar</tt></b>:
+ <td>&nbsp;
+ <td><b><tt>tar -zxf ghostscript-</tt></b>#.##<b><tt>.tar.gz</tt></b>
+<tr><td>
+<tr> <th align=left valign=top><b><tt>pkunzip</tt></b>:
+ <td>&nbsp;
+ <td><b><tt>pkunzip -d gs</tt></b>###<b><tt>sr1.zip</tt></b><br><b><tt>pkunzip -d gs</tt></b>###<b><tt>sr2.zip</tt></b><br>...
+<tr><td>
+<tr> <th align=left valign=top><tt>unzip</tt>:
+ <td>&nbsp;
+ <td><b><tt>unzip gs</tt></b>###<b><tt>src.zip</tt></b>
+</table></blockquote>
+
+<p>
+All the Ghostscript source files are now in subdirectories of the gs
+directory.
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Source subdirectories</font><hr>
+<tr> <th valign=bottom align=left>Subdirectory
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th valign=bottom align=left>Contents
+<tr> <td colspan=5><hr>
+<tr> <td><b><tt>src/</tt></b>
+ <td>&nbsp;
+ <td>C source code and makefiles
+<tr> <td><b><tt>lib/</tt></b>
+ <td>&nbsp;
+ <td>PostScript files and scripts used when running Ghostscript
+<tr> <td><b><tt>doc/</tt></b>
+ <td>&nbsp;
+ <td>Documentation
+<tr> <td><b><tt>man/</tt></b>
+ <td>&nbsp;
+ <td>Unix <b><tt>man</tt></b> pages
+<tr> <td><b><tt>examples/</tt></b>
+ <td>&nbsp;
+ <td>Sample PostScript files
+</table></blockquote>
+
+<h3><a name="Unpack_libraries"></a>How to unpack the third-party libraries</h3>
+
+<p>
+The Ghostscript makefiles expect to find the JPEG, PNG, and zlib source code
+in specific subdirectories of the <b><tt>gs</tt></b> directory, and this
+means you must pay careful attention to unpacking the source code for these
+packages. Use the same method for all of them, no matter how they're
+packaged:
+
+<ol>
+<li>Make the gs directory current.
+<li>Unpack the archive file, creating a subdirectory (which will include a
+version number).
+<li>Whatever the subdirectory's original name, rename it to the versionless
+name shown just below.
+</ol>
+
+<p>
+If you're uncertain how to unpack an archive, review the sections on <a
+href="#Tarfiles">compressed tar files</a> and <a href="#Zipfiles">zip
+files</a>.
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">3d-party software subdirectories</font><hr>
+<tr> <th valign=bottom align=left>Package
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th valign=bottom align=left>Possible<br>original name
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th valign=bottom align=left>Rename to
+<tr> <td colspan=5><hr>
+<tr> <td>JPEG
+ <td>&nbsp;
+ <td><b><tt>./jpeg-6b</tt></b>
+ <td>&nbsp;
+ <td><b><tt>./jpeg</tt></b>
+<tr> <td>PNG
+ <td>&nbsp;
+ <td><b><tt>./libpng-</tt></b>#.##
+ <td>&nbsp;
+ <td><b><tt>./libpng</tt></b>
+<tr> <td>zlib
+ <td>&nbsp;
+ <td><b><tt>./zlib-</tt></b>#.#.#
+ <td>&nbsp;
+ <td><b><tt>./zlib</tt></b>
+</table></blockquote>
+
+<hr>
+
+<h2><a name="Makefile_overview"></a>How to prepare the makefiles</h2>
+
+<p>
+The Ghostscript makefiles are very large and complex in order to deal with
+the diverse requirements of all the different systems where they may be
+used.
+
+<p>
+New with this release is support for the GNU autoconf tool for generating
+an automatic configuration script. If you're on unix or a related system
+that supports unix shell scripts, this is the easiest option to use.
+Simply type:
+
+<blockquote>
+<tt>./configure</tt>
+</blockquote>
+
+from the top level of the ghostscript source directory. It should configure
+itself based on what's available on your system, warn you of any missing
+dependencies, and generate a Makefile. At this point you can skip to the
+section <a href="#Invoke_make">invoking make</a> below. Note that the
+autoconfiguration option is only available with the unix .tar distribution
+of the source.
+
+<p>
+If your system doesn't support the configure script or you don't wish to
+use it, you can use the traditional ghostscript makefile system, editing
+the options by hand to match your system as described below.
+Fortunately, the only makefiles you're likely to want to change are
+relatively small ones containing platform-specific information.
+
+
+<blockquote><a name="Platform-specific_makefiles"></a><table cellpadding=0 cellspacing=0>
+<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Platform-specific makefiles</font><hr>
+<tr> <th align=left>Makefile
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th align=left>Used for
+<tr> <td colspan=3><hr>
+<tr> <td><b><tt>bcwin32.mak</tt></b>
+ <td>&nbsp;
+ <td>MS Windows with Borland/Inprise compilers
+<tr> <td><b><tt>msvc32.mak</tt></b>
+ <td>&nbsp;
+ <td>MS Windows with Microsoft Visual C++ version 4 to 7.
+<tr> <td><b><tt>openvms.mak</tt></b>
+ <td>&nbsp;
+ <td>OpenVMS
+<tr> <td><b><tt>os2.mak</tt></b>
+ <td>&nbsp;
+ <td>OS/2 with the gcc/emx compiler
+<tr> <td><b><tt>unix-gcc.mak</tt></b>
+ <td>&nbsp;
+ <td>Unix with gcc
+<tr> <td><b><tt>unixansi.mak</tt></b>
+ <td>&nbsp;
+ <td>Unix with ANSI C compilers other than gcc
+<tr> <td><b><tt>watc.mak</tt></b>
+ <td>&nbsp;
+ <td>DOS with Watcom compilers
+<tr> <td><b><tt>watcw32.mak</tt></b>
+ <td>&nbsp;
+ <td>MS Windows with Watcom compilers
+<tr> <td>&nbsp;
+<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Platform-independent makefiles</font><hr>
+<tr> <td><b><tt>contrib.mak</tt></b>
+ <td>&nbsp;
+ <td>Contributed device drivers
+<tr> <td><b><tt>devs.mak</tt></b>
+ <td>&nbsp;
+ <td>Maintained device drivers
+<tr> <td><b><tt>gs.mak</tt></b>
+ <td>&nbsp;
+ <td>Documentation and miscellany
+<tr> <td><b><tt>int.mak</tt></b>
+ <td>&nbsp;
+ <td>Main makefile for the PostScript &amp; PDF interpreter
+<tr> <td><b><tt>jpeg.mak</tt></b>
+ <td>&nbsp;
+ <td>JPEG library
+<tr> <td><b><tt>lib.mak</tt></b>
+ <td>&nbsp;
+ <td>Graphics engine
+<tr> <td><b><tt>libpng.mak</tt></b>
+ <td>&nbsp;
+ <td>PNG library
+<tr> <td><b><tt>version.mak</tt></b>
+ <td>&nbsp;
+ <td>Version and release date
+<tr> <td><b><tt>zlib.mak</tt></b>
+ <td>&nbsp;
+ <td>zlib library
+</table></blockquote>
+
+<p>
+Since these files change from one Ghostscript version to another, sometimes
+substantially, and since they all include documentation for the various
+options, here we don't duplicate most of that documentation: we recommend
+strongly that you review the entire makefile specific for your operating
+system and compiler before building Ghostscript.
+
+<h3><a name="Preparing_makefiles"></a>Changes for your environment</h3>
+
+<p>
+You must edit the platform-specific makefile to change any of these:
+
+<ul>
+<li>The name of the makefile itself (<b><tt>MAKEFILE</tt></b> macro)
+<li>The locations to install Ghostscript files (<b><tt>prefix</tt></b> etc.)
+<li>The default search paths for the initialization and font files
+(<b><tt>GS_LIB_DEFAULT</tt></b> macro)
+<li>The debugging options (<b><tt>DEBUG</tt></b> and <b><tt>TDEBUG</tt></b>
+macros)
+<li>Which optional features to include (<b><tt>FEATURE_DEVS</tt></b>)
+<li>Which device drivers to include (<b><tt>DEVICE_DEVS</tt></b> and
+<b><tt>DEVICE_DEVS</tt></b>{<em>1--20</em>} macros)
+<li>Default resolution parameters for some printer drivers
+(<b><tt>devs.mak</tt></b> or <b><tt>contrib.mak</tt></b>, whichever defines
+the driver)
+
+</ul>
+
+<p>
+The <a href="#Platform-specific_makefiles">platform-specific makefiles</a>
+include comments describing all these except the
+<b><tt>DEVICE_DEVS</tt></b> options. These are described in
+<b><tt>devs.mak</tt></b> and <b><tt>contrib.mak</tt></b>, even though the
+file that must be edited to select them is the <a
+href="#Platform-specific_makefiles">platform-specific makefile</a>.
+
+<p>
+Some platform-specific options are described in the sections for individual
+platforms. See the "Options" section near the beginning of the relevant
+makefile for more information.
+
+<h3><a name="Features_and_devices"></a>Selecting features and devices</h3>
+
+<p>
+You may build Ghostscript with any of a variety of features and with any
+subset of the available device drivers. The complete list of features is
+in a comment at the beginning of <b><tt>gs.mak</tt></b>, and the complete
+list of drivers in comments at the beginning of <b><tt>devs.mak</tt></b>
+and <b><tt>contrib.mak</tt></b>. To find what devices a platform-specific
+makefile selects to include in the executable, look in it for all lines of
+the form
+
+<blockquote>
+<b><tt>FEATURE_DEVS=</tt></b><em>{list of features}</em><br>
+<b><tt>DEVICE_DEVS</tt></b>*<b><tt>=</tt></b><em>{list of devices}</em>
+</blockquote>
+
+<p>
+For example, if the makefile has
+
+<blockquote><b><tt>
+FEATURE_DEVS=$(PSD)level2.dev
+</tt></b></blockquote>
+
+<p>
+indicating that only the PostScript Level 2 facilities should be included,
+you might make it
+
+<blockquote><b><tt>
+FEATURE_DEVS=$(PSD)level2.dev $(PSD)pdf.dev
+</tt></b></blockquote>
+
+<p>
+to add the ability to interpret PDF files. (In fact,
+<b><tt>FEATURE_DEVS</tt></b> in the current Unix makefiles already includes
+<b><tt>$(PSD)pdf.dev</tt></b>.) The Unix makefile also defines
+
+<blockquote><b><tt>
+DEVICE_DEVS=$(DD)x11.dev
+</tt></b></blockquote>
+
+<p>
+indicating that the X Windows driver should be included, but since
+platform-specific makefiles as distributed normally include many of the
+possible features and drivers, you will probably rather remove from the
+makefile the features and drivers you don't want. It does no harm to
+include unneeded features and devices, but the resulting executable will be
+larger than needed.
+
+<p>
+You may edit the <b><tt>FEATURE_DEVS</tt></b> line to select or omit any of
+the features listed near the beginning of <b><tt>gs.mak</tt></b>, and the
+<b><tt>DEVICE_DEVS</tt></b>* lines to select or omit any of the device
+drivers listed near the beginning of <b><tt>devs.mak</tt></b> and
+<b><tt>contrib.mak</tt></b>. The first device listed in the definition of
+<b><tt>DEVICE_DEVS</tt></b> becomes the default device for this executable;
+see the usage documentation for <a href="Use.htm#Output_device">how to
+select an output device</a> at run time using the
+<a href="Use.htm#DEVICE_switch"><b><tt>-sDEVICE=</tt></b></a> switch. If
+you can't fit all the devices on a single line, you may add lines defining
+
+<blockquote>
+<b><tt>DEVICE_DEVS1=$(DD)</tt></b><em>{dev11}</em><b><tt>.dev</tt></b> ... <b><tt>$(DD)</tt></b><em>{dev1n}</em><b><tt>.dev</tt></b>
+<br><b><tt>DEVICE_DEVS2=$(DD)</tt></b><em>{dev21}</em><b><tt>.dev</tt></b> ... <b><tt>$(DD)</tt></b><em>{dev2n}</em><b><tt>.dev</tt></b>
+</blockquote>
+
+<p>
+etc., up to <b><tt>DEVICE_DEVS15</tt></b>. Don't use continuation lines --
+on some platforms they don't work.
+
+<p>
+Note that if you want to include a driver named <em>xxx</em>, you must put
+<b><tt>$(DD)</tt></b><em>xxx</em><b><tt>.dev</tt></b> in
+<b><tt>DEVICE_DEVS</tt></b>*. Similarly, if you want to include a feature
+related to the PostScript or PDF language interpreters (PostScript level
+1 .. 3, or other language features such as the ability to read EPSF files or
+TrueType font files), you must represent it as
+<b><tt>$(PSD)</tt></b><em>xxx</em><b><tt>.dev</tt></b>. If you are linking
+only the graphics library -- not the language interpreter(s) -- with an
+application and want to include optional graphics library features such as
+CIE color, you represent them as
+<b><tt>$(GLD)</tt></b><em>xxx</em><b><tt>.dev</tt></b>.
+
+<h4><a name="Precompiled_data"></a>Precompiled run-time data</h4>
+
+<p>
+Ghostscript normally reads a number of external data files at run time:
+initialization files containing PostScript code, fonts, and other resources
+such as halftones. By changing options in the top-level makefile for the
+platform, you can cause some of these files to be compiled into the
+executable: this simplifies installation, improves security, may reduce
+memory requirements, and may be essential if you are planning on putting
+Ghostscript into ROM.
+
+<p>
+To compile the initialization files (<b><tt>lib/gs_init.ps</tt></b>, etc.)
+into the executable, change the <b><tt>0</tt></b> to a <b><tt>1</tt></b> in
+the line
+
+<blockquote><b><tt>
+COMPILE_INITS=0
+</tt></b></blockquote>
+
+<p>
+To compile fonts into the executable, see <a
+href="Fonts.htm#Precompiling">Precompiling fonts</a>.
+
+<p>
+To compile threshold-array halftones into the executable, see the "Compiled
+halftone" section of <b><tt>int.mak</tt></b> for a sample makefile fragment,
+<b><tt>genht.c</tt></b> for the syntax of halftone data files, and
+<b><tt>lib/ht_ccsto.ps</tt></b> for a sample data file. Note that even
+though the data files use PostScript syntax, compiled halftones do not
+require the PostScript interpreter and may be used with the graphics library
+alone.
+
+<h4><a name="GNU_readline"></a>GNU readline</h4>
+
+<p>
+GNU Ghostscript distributions include support for GNU readline, but this
+is not officially supported at this time. We will, however, welcome bug
+fixes or updates, and distribute them with subsequent releases.
+
+<h3><a name="Makefile_setup"></a>Setting up "makefile"</h3>
+
+<p>
+
+After going through the steps just described to <a href="#Unpack">unpack
+the
+sources</a>, make any desired <a href="#Preparing_makefiles">changes to
+the
+makefiles</a>, and unpack or create links to the <a
+href="#Unpack_libraries">third party libraries</a>, as the final step in
+preparing to build Ghostscript you must usually associate the name
+"<b><tt>makefile</tt></b>" with the correct makefile for your environment so
+the <b><tt>make</tt></b> command can find it. See the section on your
+particular platform for how to do that if necessary.
+
+<h3><a name="Invoke_make"></a>Invoking "make"</h3>
+
+<dl>
+<dt><b><tt>make</tt></b>
+<dd>Builds Ghostscript without debugging options.
+</dl>
+
+<dl>
+<dt><a name="Debugging"></a><b><tt>make debug</tt></b>
+<dd>Builds Ghostscript with debugging options and additional internal error
+checks. The program will be somewhat larger and slower, but it will behave
+no differently unless you actually turn on debugging options at execution
+time with the <b><tt>-DDEBUG</tt></b> or
+<a href="Use.htm#Debugging"><b><tt>-Z</tt></b> command line switches</a>
+described in the usage documentation.
+</dl>
+
+<dl>
+<dt><b><tt>make pg</tt></b>
+<dd>On Unix platforms, builds with the <b><tt>-pg</tt></b> compiler
+switch, creating an executable for time profiling.
+</dl>
+
+<dl>
+<dt><b><tt>make begin</tt></b>
+<dd>On PC platforms, attempts a quick and dirty compilation of all the
+<b><tt>.c</tt></b> files in the current directory. See the
+<a href="#Make_begin">more detailed explanation</a>.
+</dl>
+
+<dl>
+<dt><b><tt>make install</tt></b>
+<dd>After building, installs the Ghostscript executables, support files,
+and documentation, but does <b><em>not</em></b> install fonts. See the
+<a href="Install.htm">installation documentation</a>.
+</dl>
+
+<dl>
+<dt><b><tt>make clean</tt></b>
+<dd>Deletes all the files created by the build process (relocatables,
+executables, and miscellaneous temporary files). If you've built an
+executable and want to save it, move it first to another place, because
+"<b><tt>make clean</tt></b>" deletes it.
+</dl>
+
+<p>
+<b><em>Note:</em></b> on most platforms some of these simple instructions don't
+quite work in one way or another. Read the section on your specific
+platform.
+
+<h3><a name="Cross-compiling"></a>Cross-compiling</h3>
+
+<p>
+If you are compiling Ghostscript on machines <b>X1</b> ... <b>X</b><em>n</em> with
+cross-compilers that generate code for machine <b>Y</b>, you must first
+perform several extra steps on some machine <b>Z</b> (not necessarily of the
+same type as either <b>X</b><em>i</em> or <b>Y</b>). First of all, choose a makefile
+appropriate for <b>Z</b> and edit it to reflect the run-time options you
+wish to include (<b><tt>FEATURE_DEVS</tt></b>, <b><tt>DEVICE_DEVS*</tt></b>,
+and any other relevant options), just as for non-cross-compilation.
+
+<p>
+If <b>Z</b> runs Unix, perform the following steps:
+<ol>
+<li>On <b>Z</b>,
+<blockquote>
+<b><tt>make clean</tt></b><br>
+<b><tt>make obj/arch.h obj/genconf obj/echogs</tt></b>
+</blockquote>
+
+<li>Edit <b><tt>obj/arch.h</tt></b> to reflect the architecture of <b>Y</b>.
+
+<li>On <b>Z</b>,
+<blockquote>
+<b><tt>make CC=: CCLD=:</tt></b>
+</blockquote>
+
+<li>Copy the files <b><tt>obj/*.h</tt></b> from <b>Z</B> to the directory on
+each <b>X</b><em>i</em> that will be used for compilation.
+
+<li>Extract from the file <b><tt>obj/ldt.tr</tt></b> (on <b>Z</b>) the list
+of <b><tt>.o</tt></b> files that will be linked: this gives the list of
+source files that must be compiled.
+
+<li>Do the compilations on <b>X</b><em>i</em>.
+</ol>
+
+<p>
+If <b>Z</b> runs some version of Microsoft Windows with Microsoft Visual
+C++, use the following steps. <em>NOTE: We have not actually tested
+this.</em>
+
+<ol>
+<li>On <b>Z</b>,
+<blockquote>
+<b><tt>nmake clean</tt></b><br>
+<b><tt>nmake obj\arch.h obj\genconf.exe obj\echogs.exe</tt></b>
+</blockquote>
+
+<li>Edit <b><tt>obj\arch.h</tt></b> to reflect the architecture of <b>Y</b>.
+
+<li>On <b>Z</b>,
+<blockquote>
+<b><tt>nmake CC=rem LINK=rem</tt></b>
+</blockquote>
+
+<li>Copy the files <b><tt>obj\*.h</tt></b> from <b>Z</B> to the directory on
+each <b>X</b><em>i</em> that will be used for compilation.
+
+<li>Extract from the file <b><tt>obj\ldt.tr</tt></b> (on <b>Z</b>) the list
+of <b><tt>.obj</tt></b> files that will be linked: this gives the list of
+source files that must be compiled.
+
+<li>Do the compilations on <b>X</b><em>i</em>.
+</ol>
+
+<hr>
+
+<h2><a name="PC_build"></a>How to build Ghostscript from source (PC version)</h2>
+
+<p>
+All Ghostscript builds in PC (DOS and MS Windows) environments are 32- or
+64-bit: 16-bit builds are not supported. The relevant makefiles are
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">PC makefiles</font><hr>
+<tr> <th align=left>Makefile
+ <td>&nbsp;&nbsp;
+ <th align=left>Construction tools
+ <td>&nbsp;&nbsp;
+ <th align=left>For environment
+<tr> <td colspan=5><hr>
+<tr> <td valign=top><b><tt>bcwin32.mak</tt></b>
+ <td>&nbsp;
+ <td valign=top><a href="#Borland_build">Borland/Inprise C++ 4.x</a>
+ <td>&nbsp;
+ <td valign=top>32-bit MS Windows 3.1 + Win32s, 95, 98, NT
+<tr> <td valign=top><b><tt>msvc32.mak</tt></b>
+ <td>&nbsp;
+ <td valign=top><a href="#Microsoft_build">Microsoft Visual C++ 4 to 7</a>
+ <td>&nbsp;
+ <td valign=top>MS Windows 32-bit
+<tr> <td valign=top><b><tt>watc.mak</tt></b>
+ <td>&nbsp;
+ <td valign=top><a href="#Watcom_build">Watcom C/386 or C++</a>
+ <td>&nbsp;
+ <td valign=top>MS-DOS 32-bit (extended)
+<tr> <td valign=top><b><tt>watcw32.mak</tt></b>
+ <td>&nbsp;
+ <td valign=top><a href="#Watcom_build">Watcom C/386 or C++</a>
+ <td>&nbsp;
+ <td valign=top>MS Windows 32-bit
+<tr> <td valign=top><b><tt>unix-gcc.mak</tt></b>
+ <td>&nbsp;
+ <td valign=top><a href="#Cygwin32_build">Cygnus gcc</a>
+ <td>&nbsp;
+ <td valign=top><a href="http://sourceware.cygnus.com/cygwin/">Cygnus gnu-win32</a>
+</table></blockquote>
+
+<p>
+To build Ghostscript you need MS-DOS version 3.3 or later and
+Borland/Inprise C/C++ (4.0 or later); Microsoft Visual C++ (version 4.0 or
+later); Watcom C/386 (version 8.5 or later) or C++ (any version); or the
+free djgpp + go32 development system. The options in the makefiles are
+chosen to strike a balance between RAM consumption and likely usefulness.
+If you run <b><tt>make</tt></b> in directory <em>{dir}</em>, the default
+configuration generates an executable that assumes the Ghostscript
+initialization and font files are in directory
+<em>{dir}</em><b><tt>\lib</tt></b>.
+
+<p>
+Note that the <b><tt>make</tt></b> program supplied with each PC compiler
+has a different name. We refer to this program generically as
+<b><tt>make</tt></b> everywhere else in this document, but you will find the
+correct name for each compiler in the relevant section below that discusses
+that compiler.
+
+<p>
+You must have <b><tt>COMMAND.COM</tt></b> in your path to build Ghostscript.
+After making the changes needed to choose features and devices to build into
+the executable, you must create the directory where the compiler will do its
+work (normally the <b><tt>obj</tt></b> subdirectory of the current
+directory) and the directory where the compiled code will be placed
+(normally the <b><tt>bin</tt></b> subdirectory). Then to build the
+Ghostscript executable all you need do is give the <b><tt>make</tt></b>
+command.
+
+<p><a name="Make_begin"></a>
+A special make target "<b><tt>begin</tt></b>" attempts to compile all the
+<b><tt>.c</tt></b> files in the current directory. Some of these
+compilations will fail, but the ones that succeed will go considerably
+faster because they don't individually pay the overhead of starting up the
+compiler. So a good strategy for building the executable for the first
+time, or after changing a widely used <b><tt>.h</tt></b> file, is to do the
+fast compilation of everything possible, then the controlled compilation of
+everything that failed in the first step:
+
+<blockquote><b><tt>
+make begin<br>
+make
+</tt></b></blockquote>
+
+<p>
+<b><em>Note:</em></b> if you unpack the Ghostscript sources on a DOS or MS Windows
+system from a Unix tar file, the unpacked files have linefeed alone as the
+line terminator (the Unix convention) instead of carriage return + linefeed
+(the Microsoft convention), which may make the C compiler unhappy. One
+simple way to fix this, if you have the InfoZIP <b><tt>zip</tt></b> and
+<b><tt>unzip</tt></b> programs, is
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr> <td><b><tt>zip -l CVTEMP.zip *.bat *.c *.h *.def *.rc</tt></b>
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <td>(Letter "l", not the digit "1")
+<tr> <td><b><tt>unzip -o CVTEMP.zip</tt></b>
+ <td>&nbsp;
+ <td>(Rewrite all the same files correctly)
+<tr> <td><b><tt>del CVTEMP.zip</tt></b>
+ <td>&nbsp;
+ <td>(Delete the temporary zip file)
+</table></blockquote>
+
+<h3><a name="Borland_build"></a>Borland/Inprise environment</h3>
+
+<p>
+To compile Ghostscript with the Borland/Inprise environment (hereafter
+referred to as just "Borland"), you need Borland C++ (version 4.0 or later);
+specifically the compiler, <b><tt>make</tt></b> utility, and linker. You
+also need either the Borland assembler (version 1.0 or later) or the
+Microsoft assembler (version 4.0 or later).
+
+<p>
+To create "<b><tt>makefile</tt></b>", give the command
+
+<blockquote><b><tt>
+echo !include "src\bcwin32.mak" &gt;makefile
+</tt></b></blockquote>
+
+<p>
+To run the <b><tt>make</tt></b> program, give the commmand
+
+<blockquote><b><tt>
+make
+</tt></b></blockquote>
+
+<p>
+Besides the source files and the makefiles, you need:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <td>*<b><tt>.bat</tt></b>
+ <td>&nbsp;
+ <td>(a variety of batch files used in the build process)
+</table></blockquote>
+
+<p>
+Comments in the makefiles describe the configuration parameters. If your
+configuration is different from the following, you should definitely read
+those comments and see if you want or need to change any of this:
+<ul>
+<li>The compiler files are in <b><tt>C:\BC</tt></b> and its subdirectories.
+<li>You are using the Borland assembler <b><tt>tasm</tt></b>.
+<li>You want an executable that will run on any 32-bit PC-compatible,
+regardless of processor type (80386, 80486, Pentium, or compatible) and
+regardless of whether a math coprocessor (80x87) is present -- an issue only
+with 80386 processors.
+</ul>
+
+<p>
+<b>Notes</b>
+
+<ul>
+<li>A user reports that the Borland C++ 4.00 with patch 1-6 doesn't
+produce a working executable of Ghostscript 5.03. We can't test this,
+since we no longer have this compiler.
+
+<li>Borland C++ 4.5 has a bug or bugs that cause(s) the 32-bit Windows
+executable to crash if you give any @-files on the command line. Among
+other things, this makes the uniprint driver unusable, because it references
+the .upp configuration files this way. This problem may possibly be fixed
+by one or more of the patch files on
+
+<blockquote>
+<a href="ftp://ftp.borland.com/pub/borlandcpp/devsupport/patches/bc4_5/"
+class="offsite">ftp://ftp.borland.com/pub/borlandcpp/devsupport/patches/bc4_5/</a>
+</blockquote>
+
+<li>Borland C++ 4.52 has a bug that causes the 32-bit Windows executable to
+fail during startup. Borland (now Inprise) provides a patch for this bug
+in
+
+<blockquote>
+<a
+href="ftp://ftp.borland.com/pub/borlandcpp/devsupport/patches/bc4_5/bc45xp1.zip"
+class="offsite">ftp://ftp.borland.com/pub/borlandcpp/devsupport/patches/bc4_5/bc45xp1.zip</a>
+</blockquote>
+
+<li>Borland C++ 5.0 and 5.01 have a code generator bug that generates
+incorrect code for the construct <b><tt>!file_is_valid()</tt></b>. Do not
+attempt to compile Ghostscript with these compilers. If you want to report
+this bug to Borland, send them the result of compiling
+<b><tt>ziodev.c</tt></b> and tell them to look at the code generated for
+<b><tt>file_is_valid()</tt></b> and <b><tt>!file_is_valid()</tt></b>. We
+don't know whether Borland C++ 5.02 still has this problem.
+
+<li>When building for the MS Windows Win32s environment, the make
+process will stop after it has created <b><tt>genarch.exe</tt></b>.
+You should then run "<b><tt>_genarch.bat</tt></b>", wait until
+<b><tt>genarch</tt></b> has finished and then exit MS Windows. Then type
+"<b><tt>make</tt></b>" again to restart the make process.
+
+</ul>
+
+<h3><a name="Microsoft_build"></a>Microsoft Environment</h3>
+
+<p> NOTE: We have received reports that the Microsoft Visual C++ 5.0 and 6.0 compilers
+ produce incorrect code for Ghostscript version 6.0 and later, from the same
+ source code that compiles and runs correctly with other compilers. In spite
+ of these reports, several members of the Artifex staff use version 6.0 of the
+ MSVC compiler on a regular basis and we have not found any problems. You may
+ also want to try out the <a href="#IntelWin32_build">Intel&nbsp;C/C++ compiler</a>,
+ which can be integrated into the Microsoft Visual C++ environment.
+<p>To compile Ghostscript using the Microsoft environment, you need Microsoft
+ Visual C++ 4.0 or later with its associated "<b><tt>nmake</tt></b>" utility
+ and linker.
+<h4><a name="Using_the_MS_Development_Environment"> </a>Using Microsoft Developer
+ Studio</h4>
+<p>Microsoft Developer Studio is the Microsoft Visual C++ integrated development
+ environment. To use it to build Ghostscript: it is first necessary to create
+ a new workspace/project. To create the workspace/project, open Microsoft Developer
+ Studio and select <b><tt>File/New</tt></b>. In the dialog window that is opened,
+ select 'Makefile' as the type of project. Specify a name for the project. (Microsoft
+ does not allow special characters such as ., *, ?, /, or \ as part of project
+ names.) Also specify the location of the master directory for your Ghostscript
+ files. Then select OK.
+<p> In the next dialog window, specify the build command line as <b><tt>nmake
+ /f src/msvc32.mak DEVSTUDIO= </tt></b> Note the value for <b><tt>DEVSTUDIO</tt></b>
+ is empty. Then select <b><tt>Finish</tt></b>.
+<p>At this point, it is now possible to build Ghostscript using Developer Studio.
+ To build, press F7 or select the build icon. Note: multiple warnings will also
+ given about things like double to float data conversions. Ignore them. We have
+ not found a way to create a single set of sources that does not create warnings
+ with the different compilers and operating systems supported by Ghostscript.
+ We are working to reduce the number of the warning messages.
+<p>To run Ghostscript inside of Developer Studio, it is necessary to specify the
+ name of the executable program . Select <b><tt>Project/Settings</tt></b>. Select
+ the <b><tt>Debug</tt></b> tab. Then for <b><tt>Executable for debug session:</tt></b>
+ specify <b><tt>bin/gswin32.exe</tt></b>
+<p>To use all of the features of Microsoft Developer Studio for debugging, and
+ modifying Ghostscriptt, you need to finish the remaining steps.
+<p>To add the Ghostscript DLL to the project, select <b><tt>Project/Settings</tt></b>.
+ Select the <b><tt>Debug</tt></b> tab. Change the <b><tt>Category</tt></b> to
+ <b><tt>Additional DLLs</tt></b>. Then specify <b><tt>bin/gsdll32.dll</tt></b>.
+<p> To specify the Ghostscript program arguments, select <b><tt>Project/Settings</tt></b>.
+ Select the <b><tt>Debug</tt></b> tab. Change the <b><tt>Category</tt></b> to
+ <b><tt>General</tt></b>. Then specify the desired program arguments. For example,
+ specifying: <b><tt>examples/tiger.ps</tt></b> will result in the tiger example
+ file being displayed when Ghostscript is executed. .
+<p> A final note: it is possible to create a command file (build.bat) to be used
+ for the build command line. If many different workspaces/projects are created,
+ it is simpler to use a build batch command file rather than retyping the build
+ command line for each new project. Here is an example used by one of Artifex's
+ staff members. This file is one line:
+<blockquote><b><tt> nmake -f src/msvc32.mak DEVSTUDIO= DEBUG=1 GS_LIB_DEFAULT="./lib/;./font;$(GSROOTDIR)/lib;$(AROOTDIR)/fonts"
+ </tt></b></blockquote>
+<p> The <b><tt>DEBUG=1</tt></b> enables many debugging features built into Ghostscript.
+ Please note the double quotes around the value for <b><tt>GS_LIB_DEFAULT</tt></b>
+ and the addition of <b><tt>./lib;./fonts;</tt></b> to its definition. This uses
+ the local (within the project) copy of the <b><tt>lib</tt></b> and <b><tt>fonts</tt></b>
+ directories. This is convenient if any changes need to be made in these directories.
+<h4><a name="Using_the_command_line"></a>Using the command line</h4>
+<p>Ghostscript can be made using either the DOS shell or one one of the various
+ command line shells made for Windows.
+<p>In order for the makefiles to work properly, two items may have to be changed.
+ If you are not using version 6.x then before building, in <b><tt>src\msvc32.mak</tt></b>
+ find the line "<b><tt>MSVC_VERSION=6</tt></b>" and change it to "<b><tt>MSVC_VERSION=4</tt></b>",
+ "<b><tt>MSVC_VERSION=5</tt></b>" or "<b><tt>MSVC_VERSION=7</tt></b>".
+<p>In some cases the location of the Microsoft Developer Studio, needs to be changed.
+ The location of Microsoft Developer Studio is defined by the value of <b><tt>DEVSTUDIO</tt></b>.
+ There are four different definitions of <b><tt>DEVSTUDIO</tt></b> in src\msvc32.mak.
+ There is one for each of the currently supported versions of Microsoft Visual
+ C++ (4, 5, 6 and 7).
+<p>The normal installation process for Microsoft Visual C++ includes setting the
+ location of the Microsoft Visual C++ executables (cl.exe, link.exe, nmake.exe,
+ rc.exe) in your PATH definition and the LIB and INCLUDE environment variables
+ are set to point to the Microsoft Visual C++ directories. If this is true then
+ the value for <b><tt>DEVSTUDIO</tt></b> can be changed to empty. I.e. <b><tt>DEVSTUDIO=</tt></b>
+<p> If PATH, LIB, and INCLUDE are not correctly set then the value for <b><tt>DEVSTUDIO</tt></b>
+ needs to be defined. For example, for version 6.0, the default definition for
+ the location for the Microsoft Developer Studio is: <b><tt>DEVSTUDIO=C:\Program
+ Files\Microsoft Visual Studio </tt></b> If the path to Microsoft Developer Studio
+ on your system differs from the default then change the appropriate definition
+ of <b><tt>DEVSTUDIO</tt></b>. (Remember that there is a separate definition
+ of <b><tt>DEVSTUDIO</tt></b> for each version of MSVC, so be sure to change
+ the correct definition.)
+<p>To run the <b><tt>make</tt></b> program, give the command
+<blockquote><b><tt>
+nmake -f src\msvc32.mak
+</tt></b></blockquote>
+
+<p>
+Rather than changing src/msvc32.mak, these values can be specified on the make
+command line, I.e.
+
+<blockquote><b><tt> nmake -f src\msvc32.mak MSVC_VERSION=6 DEVSTUDIO="C:\Program Files\Microsoft Visual Studio" <br>
+nmake -f src\msvc32.mak MSVC_VERSION=7 DEVSTUDIO="C:\Program Files\Microsoft Visual Studio .NET"
+ </tt></b></blockquote>
+
+<p> Note that double quotes have been added around the path for <b><tt>DEVSTUDIO</tt></b>
+ due to the spaces in the path value.
+<p>
+This command line can also be put into a batch file.
+
+<p> You may get warning messages during compilation about <b><tt>/QI0f</tt></b>
+ being an undefined switch, or the message "dwmain32.def: EXETYPE not supported
+ for platform; ignored" during linking. Multiple warnings will also given about
+ things like double to float data conversions. Ignore them. We have not found
+ a way to create a single set of sources that does not create warnings with the
+ different compilers and operating systems supported by Ghostscript.
+<p>
+The Microsoft VC++ 5.0 compiler locks up when compiling
+<b><tt>gxi12bit.c</tt></b> with <b><tt>/O2</tt></b>. Compile this file
+without <b><tt>/O2</tt></b>.
+
+<p> The Microsoft VC++ 5.0 compiler produces a non-working executable if compiling
+ without stack checking. Don't change the setting <b><tt>TDEBUG=1</tt></b> in
+ <b><tt>msvc32.mak</tt></b>.
+
+
+<h4><a name="Self-extracting_executables"></a>Making self-extracting executables</h4>
+
+<p>
+You can build self-extracting Windows executables of Ghostscript. (This is
+not needed to use Ghostscript.) Currently this requires both the
+Borland/Inprise and the Microsoft compilers, and also two pieces of
+third-party software:
+
+<ul>
+<li><b><tt>WinZipSE</tt></b>, available from <a
+href="http://www.winzip.com/winzipse.html"
+class="offsite">http://www.winzip.com/winzipse.html</a>.
+This is not free.
+<li><b><tt>zip</tt></b>, available from <a
+href="http://www.info-zip.org/pub/infozip/Zip.html" class="offsite">
+http://www.info-zip.org/pub/infozip/Zip.html</a>. This is free.
+</ul>
+
+<p>
+You will have to edit <b><tt>src/winint.mak</tt></b> to define
+<b><tt>WINZIPSE_XE</tt></b> and <b><tt>ZIP_XE</tt></b> respectively as the
+path names of these programs. See <a href="Release.htm">Release.htm</a> for
+the detailed procedure.
+
+<h3><a name="Watcom_build"></a>Watcom environment</h3>
+
+<p>
+Because of limitations in the way that Watcom implemented their
+<b><tt>wmake</tt></b> program, you must run the Watcom tools under MS
+Windows, even if you are generating a DOS executable. This is very
+unfortunate, and there is no good technical reason for it, but we were
+unable to persuade Watcom (now Powersoft) to do anything about it.
+
+<p>
+To use the Watcom compiler, add to <b><tt>AUTOEXEC.BAT</tt></b> the line
+"<b><tt>set&nbsp;DOS4G=quiet</tt></b>". Check that
+<b><tt>AUTOEXEC.BAT</tt></b> also contains a line of the form
+"<b><tt>set&nbsp;WATCOM=</tt></b><em>{wcdir}</em>" where <em>{wcdir}</em> is
+the directory where you installed the Watcom tools, and that the setting of
+<b><tt>PATH</tt></b> includes <em>{wcdir}</em><b><tt>\binnt</tt></b> (or
+<b><tt>%WATCOM%\binnt</tt></b>) before <em>{wcdir}</em><b><tt>\binw</tt></b>
+(or <b><tt>%WATCOM%\binw</tt></b>). Then to create
+"<b><tt>makefile</tt></b>":
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr> <th align=left>For
+ <td>&nbsp;&nbsp;&nbsp;
+ <th align=left>Give the command
+<tr> <td colspan=3><hr>
+<tr> <td>DOS
+ <td>&nbsp;
+ <td nowrap><b><tt>echo&nbsp;!include&nbsp;src\watc.mak&nbsp;&gt;makefile</tt></b>
+<tr> <td>MS Windows
+ <td>&nbsp;
+ <td nowrap><b><tt>echo&nbsp;!include&nbsp;src\watcw32.mak&nbsp;&gt;makefile</tt></b>
+</table></blockquote>
+
+<p>
+Before compiling, change the definition of the <b><tt>WCVERSION</tt></b>
+macro in the makefile (<b><tt>watc.mak</tt></b> or
+<b><tt>watcw32.mak</tt></b>) to the version of the Watcom compiler you are
+using. This is necessary to handle some minor incompatibilities between
+versions.
+
+<p>
+To run the <b><tt>make</tt></b> program, give the commmand
+
+<blockquote>
+<b><tt>wmake -u</tt></b>
+</blockquote>
+
+<p>
+For information on using the GNU <b><tt>make</tt></b> program with the
+Watcom compiler to build MS-DOS executables, which avoids the limitations in
+<b><tt>wmake</tt></b>, see <a href="New-user.htm#MS-DOS">here</a>.
+
+<h3><a name="Cygwin32_build"></a>Cygwin32 gcc</h3>
+
+<p>
+A user reports that it is possible to compile Ghostscript for MS Windows NT
+using the Cygwin32 gcc compiler, GNU <b><tt>make</tt></b>, and the
+<b><tt>unix-gcc.mak</tt></b> makefile, with only two small source code
+changes:
+
+<ul>
+<li>Add "<b><tt>b</tt></b>" to the call to <b><tt>fopen</tt></b> in <b><tt>gp_open_scratch</tt></b>
+<li>Mirror the <b><tt>gp_ntfs</tt></b> logic for <b><tt>gp_file_name_is_absolute</tt></b>
+</ul>
+
+<p>
+Information about this compiler and environment is at the Cygnus site:
+
+<blockquote>
+<a href="http://sources.redhat.com/cygwin/">http://sources.redhat.com/cygwin/</a>
+</blockquote>
+
+<p>
+Please note that Cygnus's licensing terms aren't quite as liberal about
+redistribution as either the GNU
+<a href="http://www.gnu.org/copyleft/gpl.html">General Public License</a>
+or the Aladdin <a href="Public.htm">Free Public License</a>, so read their
+license carefully if you want to redistribute the results of using their
+compiler.
+
+<h3><a name="IntelWin32_build"></a>Intel C/C++ environment</h3>
+
+<p>
+Intel provides a C/C++ compiler that is compatible with the <a
+href="#Microsoft_build">Microsoft Visual&nbsp;C++ environment</a>. The main
+advantage of this compiler over MSVC&nbsp;5.0 and 6.0 is that it produces
+working code even when all optimizations are enabled and when stack checking
+is disabled.
+
+<p>
+To build Ghostscript using the Intel C/C++ compiler, you have to make the
+following small changes in the makefiles:
+
+<ul>
+<li>Find and change the second occurrence of
+"<b><tt>COMPILE_FULL_OPTIMIZED</tt></b>" to "<b><tt>/O2</tt></b>" in file
+<b><tt>msvccmd.mak</tt></b>. <li>Override "<b><tt>TDEBUG</tt></b>",
+"<b><tt>COMP</tt></b>", and "<b><tt>COMPAUX</tt></b>" when invoking
+<b><tt>nmake</tt></b>.
+</ul>
+
+<p>
+More specifically, use "<b><tt>TDEBUG=0</tt></b>" and set both
+"<b><tt>COMP</tt></b>" and "<b><tt>COMPAUX</tt></b>" to the full path of
+<b><tt>icl</tt></b> (for example
+"<b><tt>COMP=C:\intel\compiler45\bin\icl</tt></b>" if the Intel&nbsp;C/C++
+compiler V4.5 was installed to <b><tt>C:\intel</tt></b>). It is suggested
+that you use a batch file to launch <b><tt>nmake</tt></b>, since the command
+line processes the "<b><tt>=</tt></b>" on its own. Also, you may need to
+execute <b><tt>vcvars32.bat</tt></b> and <b><tt>iccvars.bat</tt></b> to
+register the proper paths for the compiler, its include files and its
+libraries.
+
+<p>
+You can buy or download a 30-day evaluation version of the Intel&nbsp;C/C++
+compiler from Intel's Software Performance Tools web site:
+
+<blockquote>
+<a href="http://www.intel.com/vtune/">http://www.intel.com/vtune/</a>
+</blockquote>
+
+<hr>
+
+<h2><a name="Mac_build"></a>How to build Ghostscript from source (MacOS version)</h2>
+
+<h3><a name="MacOS"></a>Traditional MacOS</h3>
+
+<p>
+The Macintosh version of Ghostscript requires the <a href="http://www.metrowerks.com/"
+class="offsite">Metrowerks Codewarrior</a> development suite. Download the
+<tt>macgs-7xx-src.sit</tt> source archive from the location listed
+below. This includes a Codewarrior .mcp project file than can be used to build both
+Carbon and CFM versions of the ghostscript shared library component.
+
+<blockquote>
+<a href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/current/"
+
+class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/current/</a>
+</blockquote>
+
+<p>
+If your system doesn't automatically unpack the source archive, you can
+download the gratis <a href="http://stuffit.com/download.html"
+class="offsite">Stuffit Expander</a> to open it.
+
+<p>
+This archive includes appropriate versions of the jpeg, zlib and libpng 3rd party
+library source for convenience. You must still download the fonts and place them in an
+appropriate location, along with the contents of the <tt>lib</tt> directory from the source
+archive.
+
+<p>
+Note that since this is just a library component, you will need a front-end application, such as
+MacGSView, to actually view or convert postscript and pdf documents.
+
+
+<h3><a name="MacOSX"></a>MacOS X</h3>
+
+<p>
+The unix source distribution (.tar.gz) builds fine on Darwin/MacOS X,
+albeit without a display device. You can generally just use the <tt>Makefile</tt>
+generated by ./configure or <tt>macosx.mak</tt> as your top-level makefile.
+This will allow you to use Ghostscript from the command line as a BSD-layer
+tool to rasterize postscript and pdf and convert between
+the various formats supported by Ghostscript.
+
+<p>
+There is also a support for building Ghostscript as a framework. This is
+a special encapsulated shared library format specific to MacOS X. To build
+the framework, copy <tt>macosx.mak</tt> to the top-level directory, rename it to
+<tt>makefile</tt> and issue 'make framework' from Terminal.app. This will result
+in a <tt>Ghostscript.framework</tt> in the <tt>sobin</tt> directory. It must be
+manually copied to /Library/Frameworks/ before applications
+can use it. You may need to create the Frameworks/ directory on some systems.
+
+<p>
+Finally, there is a <tt>macos-mcp.mak</tt> makefile that can be
+used to set up the Codewarrior shared library component build described
+in the section on <a href="#MacOS">Classic MacOS</a> above.
+
+<p>
+To set up the shlib build, download and uncompress the Ghostscript source.
+If the archive doesn't contain the 3rd party jpeg, png, and zlib source,
+you must download them as described at the beginning of this document and
+unpack them under the macgs-###-src directory under the specific names
+<tt>jpeg</tt>, <tt>zlib</tt> and <tt>libpng</tt>. You cannot use symlinks as
+Codewarrior will not be able to follow them for some of the needed header
+files.
+
+<p>
+Copy <tt>src/macos-mcp.mak</tt> to the top-level directory and rename
+it <tt>makefile</tt>. Then run 'make' in that directory, either from
+within Terminal.app or through Project Builder. This will set up the
+generated code required for the build and run a shell script to generate
+<tt>ghostscript.mcp.xml</tt>. Launch Metrowerks Codewarrior, and select
+'Import Project...' from the File menu, and open the xml project file.
+When asked, save the results as <tt>ghostscript.mcp</tt> in the same
+directory and you should be ready to build the shared library component.
+
+</p>
+Tradtional ('PPC') applications based on the Code Fragment Manager
+will not be able to open the shlib linked with CarbonLib, so two
+targets are provided, one with carbon and one without.
+
+<hr>
+
+<h2><a name="Unix_build"></a>How to build Ghostscript from source (Unix version)</h2>
+
+<p>
+Before issuing the <b><tt>make</tt></b> command to build Ghostscript, you
+have to make some choices, for instance
+<ul>
+<li>which compiler to use;
+<li>what features and devices to include;
+<li>whether to use system libraries for PNG and zlib;
+<li>and how to handle issues for your particular platform.
+</ul>
+
+<p>
+Be sure to check the sections on <a
+href="#Tool_specific_issues">tool-</a>, <a
+href="#OS_specific_issues">OS-</a>, and <a
+href="#Hardware_specific_issues">hardware-</a>specific issues for notes
+on your particular platform and compiler. In fact, that is the
+<b><em>first</em></b> place to check if you build Ghostscript and it crashes
+or produces obviously incorrect results.
+
+<h3><a name="Multi_architecture_makefile"></a>The multi-architecture makefile</h3>
+
+<p>
+Especially if you are working in a Unix environment with multiple CPU types,
+operating systems, and/or C compilers, you may find the file
+<b><tt>all-arch.mak</tt></b> useful. This user-contributed file includes
+"wrappers" for the Unix makefiles for many different common environments.
+The author of this file notes:
+
+<blockquote>
+
+<p>
+This makefile allows you to execute
+
+<pre>
+ make `hostname`
+</pre>
+
+<p>
+on any machine on a network, without having to examine the Makefile for a
+specific target name. Also, some of the targets in the Makefile incorporate
+special changes in compiler options for certain files, to work around
+compiler bugs that Ghostscript has been so good at exposing. Having that
+special handling written down in a Makefile proves very convenient.
+
+<p>
+I don't do "make install" until I've done
+
+<pre>
+ cd ...build-directory.../gs-x.yz
+ cd lib
+ ../bin/gs ../examples/tiger.ps
+</pre>
+
+<p>
+and verified that the famous tiger can be correctly displayed. Also, the
+"make install" step is careful to first remove any existing
+<b><tt>$(BINDIR)/gs</tt></b>, then install a new gs there with a hard link
+to gs-x.yz.
+
+<p>
+That way, each installation makes gs a synonym for the latest release,
+but earlier ones remain in place in case backtracking is needed, which
+I've fairly often wanted to do when investigating changed behavior, or
+a suspected bug.
+
+<p>
+When I've been experimenting with a new feature, such as GNU readline
+support, I change the setting of GS from gs to ngs (new gs), so as not
+to break any existing programs by the installation of an experimental
+version.
+
+</blockquote>
+
+<h3><a name="UNIX_makefile"></a>Setting up "makefile"</h3>
+
+<p>
+The files <b><tt>src/unix</tt></b>*<b><tt>.mak</tt></b> are the makefiles for
+Unix platforms, and you choose one based on what compiler you use. To
+build Ghostscript, however, you must use the simple command
+"<b><tt>make</tt></b>", which must find the file "<b><tt>makefile</tt></b>"
+(or "<b><tt>Makefile</tt></b>"). If your system supports symbolic links,
+set up "<b><tt>makefile</tt></b>" like this.
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr> <td>GNU gcc:
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <td nowrap><b><tt>ln -s src/unix-gcc.mak makefile</tt></b>
+<tr> <td>Non-gcc ANSI C compiler:
+ <td>&nbsp;
+ <td nowrap><b><tt>ln -s src/unixansi.mak makefile</tt></b>
+</table></blockquote>
+
+<p>
+If your system doesn't support symbolic links, first finish all changes to
+the compiler-specific makefile, then make a hard link, omitting the
+<b><tt>-s</tt></b> switch.
+
+<p>
+The makefile distributed with Ghostscript selects the following devices
+to include in the build:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Devices included as distributed</font><hr>
+<tr valign=bottom>
+ <th align=left>Type
+ <td>&nbsp;&nbsp;
+ <th align=left>Devices
+<tr> <td colspan=3><hr>
+<tr valign=top> <td>Display
+ <td>&nbsp;
+ <td>X Windows
+<tr valign=top> <td>Printers
+ <td>&nbsp;
+ <td>H-P DeskJets, LaserJets, and color DeskJets and PaintJets; Canon BubbleJets
+<tr valign=top> <td>File formats
+ <td>&nbsp;
+ <td>Group 3 &amp; Group 4 fax; JPEG; PCX; PBM, PGM, PKM, &amp; PPM; TIFF; PostScript images; PNG; distilled PDF, PostScript, and EPS; PCL XL ("PCL 6")
+</table></blockquote>
+
+<p>
+The <b><tt>unix</tt></b>*<b><tt>.mak</tt></b> files explicitly compile and
+link the JPEG, PNG, and zlib libraries into the executable. If your Unix
+system already includes the PNG and zlib libraries -- probably in
+<b><tt>/usr/lib/libpng.</tt></b>{<b><tt>a</tt></b>,<b><tt>so</tt></b>} and
+<b><tt>/usr/lib/libz.</tt></b>{<b><tt>a</tt></b>,<b><tt>so</tt></b>} -- and
+you would rather use those copies, change the definition of
+<b><tt>SHARE_LIBPNG</tt></b> and <b><tt>SHARE_ZLIB</tt></b> from 0 to 1 in
+the relevant <b><tt>unix</tt></b>*<b><tt>.mak</tt></b> file before
+compiling. Note that if you do this, you will get non-debug versions of
+these libraries even if you selected <b><tt>DEBUG</tt></b> in the makefile.
+At the insistence of some users, we have also provided the ability to do
+this with the JPEG library (<b><tt>SHARE_JPEG</tt></b>), but should not use
+it: in order to be compatible with Adobe interpreters (which do not follow
+the JPEG standard exactly), Ghostscript has to compile the IJG code with
+the non-standard definition
+
+<blockquote><b><tt>
+#define D_MAX_BLOCKS_IN_MCU 64
+</tt></b></blockquote>
+
+<p>
+and since shared versions of this library will not have been compiled this
+way, you will get errors on some valid PostScript and PDF input files. Note
+also that because not all the JPEG library header files that Ghostscript
+uses are normally installed in <b><tt>/usr/include</tt></b>, you must have
+the source code for this library available even if you set
+<b><tt>SHARE_JPEG</tt></b> to 1.
+
+<p>
+If the X11 client header files are located in some directory which your
+compiler does not automatically search, you must change the
+<b><tt>XINCLUDE</tt></b> macro in the makefile to include a specific
+<b><tt>-I</tt></b> switch. See the comment preceding
+<b><tt>XINCLUDE</tt></b> in the makefile.
+
+<p>
+Currently Ghostscript is set up to compile and link in a generic Unix
+environment. Some Unix environments may require changing the
+<b><tt>LDFLAGS</tt></b> macro in the makefile; be sure to check the <a
+href="#Unix_build">Unix section</a> for your specific tools, operating
+system, and hardware.
+
+<p>
+Ghostscript uses ANSI syntax for function definitions. Building
+with pre-ANSI C compilers is no longer supported.
+
+<h3><a name="Shared_object"></a>Shared object</h3>
+To build Ghostscript as a shared object with gcc
+(instead of as a single large executable) use:
+<pre>
+ ln -s src/unix-gcc.mak makefile
+ make so
+</pre>
+<p>
+This will build <b><tt>libgs.so</tt></b> and two programs which use the
+shared object, <b><tt>gsx</tt></b> which uses Gtk+ and <b><tt>gsc</tt></b>
+which does not.
+
+<p>
+Do not use <tt>make -f src/unix-gcc.mak</tt> because this will
+break the recursive make used in building the shared object.
+<p>
+To install the shared object and these two programs:
+<pre>
+ make soinstall
+</pre>
+To delete files created by the build process:
+<pre>
+ make soclean
+</pre>
+<p>
+For more details see <a href="../src/unix-dll.mak">unix-dll.mak</a>.
+
+<h3><a name="Tool_specific_issues"></a>Tool-specific issues</h3>
+
+<h4><a name="gcc_27x"></a>gcc 2.7.*</h4>
+
+<p>
+Some of the issues in using gcc are very specific to the particular
+computer, the particular version of the operating system, and the
+particular version of gcc available to you. You can check the version of
+gcc with the <b><tt>gcc&nbsp;--version</tt></b> command.
+
+<p>
+An optimizer bug in gcc versions 2.7.0, 2.7.1, and 2.7.2 causes the
+compiler to generate incorrect code. The makefile works around this, but
+we recommend that if possible you use either an earlier or a later version
+of gcc; for instance, gcc 2.5.8, gcc 2.6.3, 2.7.2.1 or later which don't
+have this bug. Note, however, that gcc has other problems on some
+platforms, so please read the section for your specific platform.
+
+<h4><a name="GNU_make"></a>GNU make</h4>
+
+<p>
+Current versions of GNU <b><tt>make</tt></b> have no problems, but GNU
+<b><tt>make</tt></b> 3.59 can't handle the final linking step in some
+cases; if this happens, use the platform's standard <b><tt>make</tt></b>,
+typically <b><tt>/bin/make</tt></b>.
+
+<h3><a name="OS_specific_issues"></a>OS-specific issues</h3>
+
+<h4><a name="386_Unix"></a>386 Unix</h4>
+
+<ul>
+<li>gcc versions older than 1.38 on Intel 80386 systems do not compile
+Ghostscript correctly with the <b><tt>-O</tt></b> option.
+
+<li>gcc 1.39 under <b><tt>386BSD</tt></b> has a bug that causes
+float-to-integer conversions to compile incorrectly, rendering the
+executable unusable.
+
+<li>X11R5 may need "<b><tt>#include &lt;stddef.h&gt;</tt></b>" in <b><tt>x_.h</tt></b>.
+
+<li>Also see regarding <a href="#System_V">System V</a> platforms.
+</ul>
+
+<h4><a name="BSDI"></a>BSDI</h4>
+
+<ul>
+
+<li>Use <b><tt>unix-gcc.mak</tt></b> and set<blockquote><b><tt>
+STDLIBS=-lm<br>
+XINCLUDE=-I/usr/X11R6/include<br>
+XLIBDIRS=-L/usr/X11R6/lib<br>
+XLIBS=Xt SM ICE Xext X11<br></tt></b></blockquote>
+
+<li>If you want to use the shared versions of the PNG and zlib libraries, set
+<b><tt>SHARE_LIBPNG=1</tt></b> and <b><tt>SHARE_ZLIB=1</tt></b>
+as discussed <a href="#UNIX_makefile">previously</a>.
+
+<li>BSD <b><tt>make</tt></b> uses a different syntax for its
+<b><tt>include</tt></b> directive than Ghostscript;
+use <b><tt>gmake</tt></b> instead.
+</ul>
+
+<h4><a name="Digital_Unix"></a>Digital Unix (Alpha)</h4>
+
+<ul>
+
+<li>Use <b><tt>unixansi.mak</tt></b> for all Digital Unix compilers.
+
+<li>For versions of Digital Unix before 4.0, set
+
+<p>
+<b><tt>CFLAGS=-std -migrate -Olimit 1000 -g3 -O2 $(XCFLAGS)<br>
+LDFLAGS=-lots $(XLDFLAGS)</tt></b>
+
+<p>
+You may be able to omit <b><tt>-g3</tt></b>. For later versions of Digital
+Unix, users have reported that the proper flags are
+
+<p>
+<b><tt>CFLAGS=-std1 -Olimit 1000 -g3 -O2 $(XCFLAGS)</tt></b>
+
+<p>
+again, optionally omitting the <b><tt>-g3</tt></b>.
+
+<li>If you get compiler error messages about "ANSI aliasing rules", please
+see the section about <a href="#VMS_build">building under OpenVMS</a> below.
+
+</ul>
+
+<h4><a name="FreeBSD"></a>FreeBSD</h4>
+
+<p>
+On FreeBSD systems, in the top-level makefile (<b><tt>unixansi.mak</tt></b>,
+<b><tt>unix-gcc.mak</tt></b>, change the
+value of <b><tt>STDLIBS</tt></b> from <b><tt>-lpthread -lm</tt></b> to
+<b><tt>-lc_r -lm</tt></b> before building.
+
+<h4><a name="GNULinux"></a>GNU/Linux</h4>
+
+<ul>
+<li>If you build on GNU/Linux with X11 R6 or later, you may get link-time error
+messages about undefined references to various functions beginning with
+"SMC" and "ICE". If this happens, make sure that <b><tt>XLIBS</tt></b> in
+the makefile is set to
+"<b><tt>Xt&nbsp;SM&nbsp;ICE&nbsp;Xext&nbsp;X11</tt></b>" rather than
+"<b><tt>Xt&nbsp;Xext&nbsp;X11</tt></b>".
+
+<li>With gcc version 2.6.3 or later, you may encounter an incompatibility
+in object formats (<b><tt>a.out</tt></b> vs. ELF) with the XFree86 library.
+Typically, <b><tt>ld</tt></b> complains that some X library is not found,
+or that many <b><tt>Xlib</tt></b> or <b><tt>Xt</tt></b> functions are not
+found in the library (similar to the messages for omitting
+<b><tt>SM</tt></b> and <b><tt>ICE</tt></b> from <b><tt>XLIBS</tt></b>). Or
+you get a message when you start Ghostscript that the program or the shared
+library is an unrecognized format.
+If this happens, edit <b><tt>unix-gcc.mak</tt></b> to add the switches
+"<b><tt>-b i486-linuxaout</tt></b>" to both <b><tt>CFLAGS</tt></b> and
+<b><tt>LDFLAGS</tt></b>, then "<b><tt>make clean</tt></b>" followed by
+"<b><tt>make</tt></b>"). If this doesn't help, or if other strange things
+happen, contact your GNU/Linux supplier or support resource.
+
+<li>A few of Ghostscript's drivers are multi-threaded (currently only those
+whose names begin with "bmpa"). These drivers require <b><tt>libc</tt></b>
+version 6 or higher. Some GNU/Linux distributions, including Red Hat
+distributions before 5.0, have <b><tt>libc</tt></b> version 5, so these
+drivers may not compile. If this happens, remove these drivers (from the
+definitions of <b><tt>DEVICE_DEVS*</tt></b> in
+<b><tt>unix-gcc.mak</tt></b>), and, if you wish, substitute the
+corresponding single-threaded drivers, whose names don't include the "a".
+
+</ul>
+
+<p>
+You may want to create <a href="http://www.rpm.org">RPM</a> (<b>R</b>ed Hat
+<b>P</b>ackage <b>M</b>anager) files for Ghostscript. Because of the lack
+of standardization of installation directory names between GNU/Linux releases,
+Ghostscript does not come with any RPM specification files. You may wish to
+contact the following people who have created RPM spec files in the past:
+
+<blockquote>
+Henri Gomez <a href="mailto:hgomez@slib.fr">hgomez@slib.fr</a><br>
+Russell Lang <a href="mailto:gsview@ghostgum.com.au">gsview@ghostgum.com.au</a><br>
+Cristian Gafton <a href="mailto:gafton@redhat.com">gafton@redhat.com</a><br>
+Preston Brown <a href="mailto:pbrown@redhat.com">pbrown@redhat.com</a><br>
+</blockquote>
+
+<p>
+The following instructions may work for the Ghostscript 6.0x distributions,
+once you have RPM spec files that you believe are appropriate.
+
+<p>
+To create RPMs for Ghostscript N.NN:
+
+<ul>
+<li>Change to your source directory (<b><tt>/usr/src/redhat</tt></b> for Red Hat
+ Linux 5.1).
+<li>Copy <b><tt>ghostscript-N.NN*.tar.gz</tt></b> (4 source files) to the
+<b><tt>SOURCES</tt></b> subdirectory.
+<li>Copy <b><tt>ghostscript-fonts-std-6.0.tar.gz</tt></b> and
+<b><tt>ghostscript-fonts-other-6.0.tar.gz</tt></b> to the
+<b><tt>SOURCES</tt></b> subdirectory.
+<li>From <b><tt>SOURCES/ghostscript-N.NN.tar.gz</tt></b>,
+<ul>
+<li>extract <b><tt>rpm-conf.dif</tt></b> and copy to
+<b><tt>SOURCES/ghostscript-N.NN-config.patch</tt></b>
+<li>extract <b><tt>gs.rps</tt></b> and copy to
+<b><tt>SPECS/ghostscript-N.NN.spec</tt></b>
+<li>extract <b><tt>gs-fonts.rps</tt></b> and copy to
+<b><tt>SPECS/ghostscript-fonts-N.NN.spec</tt></b>
+</ul>
+If the contents of these files have become out of date, you
+will need to update the version number N.NN in the spec files,
+and update the patch file.
+<li> Change to the SPECS subdirectory and then execute the commands
+<blockquote><b><tt>
+rpm -ba ghostscript-N.NN.spec<br>
+rpm -ba ghostscript-fonts-N.NN.spec
+</tt></b></blockquote>
+This will create the RPM files
+<blockquote><b><tt>
+RPMS/i386/ghostscript-N.NN-1.i386.rpm<br>
+RPMS/noarch/ghostscript-fonts-N.NN-1.noarch.rpm<br>
+SRPMS/ghostscript-N.NN-1.src.rpm<br>
+SRPMS/ghostscript-fonts-N.NN-1.src.rpm<br>
+</tt></b></blockquote>
+<li> See instructions on how to <a href="Install.htm#Install_Unix">install
+ Ghostscript under Unix</a>.
+</ul>
+
+<p>
+Bruce Babcock
+&lt;<a href="mailto:babcock@math.psu.edu">babcock@math.psu.edu</a>&gt; has
+made available everything needed to build Ghostscript under Slackware
+3.*, Red Hat 4.* and 5.*, and Debian 1.* and 2.0; the files include
+instructions and shell scripts to build and install Ghostscript, as well as
+all the source and font kits and patches needed:
+
+<blockquote>
+<a href="ftp://ykbsb2.yk.psu.edu/pub/ghost/GS-5.10/"
+class="offsite">ftp://ykbsb2.yk.psu.edu/pub/ghost/GS-5.10/</a><br>
+<a href="ftp://ykbsb2.yk.psu.edu/pub/ghost/GS-5.10-Extra/"
+class="offsite">ftp://ykbsb2.yk.psu.edu/pub/ghost/GS-5.10-Extra/</a>
+</blockquote>
+
+<h4><a name="NeXTSTEP"></a>NeXTSTEP / OpenSTEP</h4>
+
+<ul>
+<li>If you are using a NeXTSTEP version before 3.3, please get a no-cost
+upgrade (along with Y2K patches) from Apple.
+
+<li>For all NeXTSTEP systems, use <b><tt>unix-gcc.mak</tt></b>. Make the
+following changes:
+
+<ul>
+<li>In <b><tt>unix-aux.mak</tt></b> (and <b><tt>ugcclib.mak</tt></b>, if you
+are using only the library) change the definition of <b><tt>INCLUDE</tt></b>
+to "<b><tt>INCLUDE=/usr/include/bsd</tt></b>";
+
+<li>in <b><tt>unix-gcc.mak</tt></b>:
+
+<ul>
+<li>change <b><tt>CC=gcc</tt></b> to <b><tt>CC=cc</tt></b>;
+
+<li>change the definition of <b><tt>STDLIBS</tt></b> to only
+<b><tt>-lm</tt></b>;
+
+<li>change <b><tt>SYNC=posync</tt></b> to <b><tt>SYNC=nosync</tt></b>;
+
+<li>add <b><tt>-D_POSIX_SOURCE</tt></b> to <b><tt>CFLAGS</tt></b> and remove
+<b><tt>-g</tt></b>;
+
+<li>remove <b><tt>-Wstrict-prototypes</tt></b> from <b><tt>GCFLAGS</tt></b>,
+and if you are using NeXTSTEP 3.3 (with gcc 2.5.8), also remove
+<b><tt>-Wmissing-declarations</tt></b>;
+</ul>
+
+<li>to the end of <b><tt>Fontmap.GS</tt></b> add the line
+"<b><tt>/Ohlfs&nbsp;/Courier&nbsp;;</tt></b>".
+</ul>
+
+<li>If you are running the Pencom co-Xist X server (development version),
+the X headers and libraries are in the default places, so change the
+makefile definitions of <b><tt>XINCLUDE</tt></b> and
+<b><tt>XLIBDIRS</tt></b> to empty strings.
+</ul>
+
+<h4><a name="SCO"></a>SCO Unix/Xenix</h4>
+
+<ul>
+<li>See also "<a href="#386_Unix">386 Unix</a>" and
+"<a href="#System_V">System V Unix platforms</a>".
+
+<li>The standard cc compiler on SCO OpenServer v5 has optimizer bugs.
+Compile without -O.
+
+<li>The SCO Unix C compiler apparently can't handle the
+<b><tt>P</tt></b><em>n</em> macros in <b><tt>std.h</tt></b>. If you get
+strange compilation errors on SCO Unix, ask SCO for a compiler fix.
+
+<li>Meanwhile, to use gcc with SCO ODT, see <b><tt>unix-gcc.mak</tt></b>
+for the appropriate switch settings.
+
+<li>Because of a bug in SCO's floating point emulator, gcc 2.3.3 produces
+code that causes crashes on machines without hardware floating point. Use
+a different compiler on these machines.
+
+<li>If you aren't using the X11 driver, you must add
+<b><tt>-lsocket</tt></b> to the value of <b><tt>EXTRALIBS</tt></b> to link
+the date and time functions.
+
+<li>If you want to use direct frame buffer addressing instead of X Windows,
+include the relevant frame buffer devices (<b><tt>$(DD)ega.dev</tt></b>,
+<b><tt>$(DD)vga.dev</tt></b>, etc.) and change the definition of
+<b><tt>EGAVGA</tt></b> to <b><tt>$(EGAVGA_SCO)</tt></b> as indicated in
+<b><tt>devs.mak</tt></b>. <b>Note</b>: this works with SuperVGA displays
+only for 800x600x16 mode.
+
+<li>If the display looks "smeared", try recompiling
+<b><tt>gdevpcfb.c</tt></b> with <b><tt>-O0</tt></b>.
+
+<li>If Ghostscript crashes, use the <b><tt>-q</tt></b> switch or redirect
+console output to a file.
+
+<li>If your compiler accepts both the <b><tt>-Xt</tt></b> and
+<b><tt>-Xa</tt></b> switches, use <b><tt>-Xt</tt></b>. Even though this
+causes the compiler to use incorrect rules for computing the result types
+of "<b><tt>&lt;&lt;</tt></b>" and "<b><tt>&gt;&gt;</tt></b>",
+<b><tt>-Xa</tt></b> enables optimizations that produce incorrect code.
+
+<li>For SCO ODT 2.0, in addition to <b><tt>-D__SVR3</tt></b> and
+<b><tt>-DSYSV</tt></b>, you need to specify <b><tt>-Dsco</tt></b>,
+<b><tt>-DUSG</tt></b>, and <b><tt>-DMALLOC_0_RETURNS_NULL</tt></b>. For
+SCO ODT, you need
+"<b><tt>EXTRALIBS=-lX11&nbsp;-lsocket&nbsp;-lmalloc</tt></b>", or maybe
+only <b><tt>-lsocket</tt></b> depending on the version), and for SCO ODT
+2.0, you must also specify <b><tt>-lc_s</tt></b>. For SCO Xenix, you need
+"<b><tt>EXTRALIBS=-lmalloc</tt></b>".
+
+<li>For SCO OpenServer 5.0.5, add <b><tt>-L/usr/local/lib</tt></b> to
+<b><tt>LDFLAGS</tt></b>.
+
+<li>For all SCO systems, set "<b><tt>XINCLUDE=</tt></b>" and
+"<b><tt>XLIBDIRS=</tt></b>".
+</ul>
+
+<h4><a name="SVR4"></a>SVR4 Unix</h4>
+
+<ul>
+<li>You may need to set <b><tt>EXTRALIBS=-lnsl</tt></b>.
+
+<li>Do <b><em>not</em></b> change <b><tt>PLATFORM=unix_</tt></b> to <b><tt>PLATFORM=sysv_</tt></b>.
+
+<li>On SVR4 Unix platforms with dynamic linking, you may need to define
+<b><tt>XLIBDIR</tt></b> as the name of the directory that holds the X
+Windows libraries. Do <b><em>not</em></b> prefix the name with
+"<b><tt>-L</tt></b>".
+
+<li>For SVR4.0 systems, set <b><tt>-DSVR4</tt></b> and
+<b><tt>-DSVR4_0</tt></b> in the makefile; do <b><em>not</em></b> set
+<b><tt>-DSYSV</tt></b>. For SVR4.2 (or later) and Solaris 2.<em>n</em>
+systems, set only <b><tt>-DSVR4</tt></b> (<b><em>not</em></b>
+<b><tt>-DSVR4_0</tt></b> nor <b><tt>-DSYSV</tt></b>).
+</ul>
+
+<h4><a name="System_V"></a>System V Unix platforms</h4>
+
+<ul>
+<li>If you are using a stock System V platform that lacks
+<b><tt>rename</tt></b> and <b><tt>gettimeofday</tt></b>, in the makefile
+change "<b><tt>PLATFORM=unix_</tt></b>" to
+"<b><tt>PLATFORM=sysv_</tt></b>".
+
+<li>You will probably need to change the definition of
+<b><tt>INSTALL</tt></b> from "<b><tt>install</tt></b>" to
+"<b><tt>/usr/ucb/install</tt></b>".
+</ul>
+
+<h4><a name="Unixware"></a>Unixware</h4>
+
+<ul>
+<li>The standard cc compiler has optimizer bugs. Compile without
+<b><tt>-O</tt></b>.
+</ul>
+
+<h3><a name="Hardware_specific_issues"></a>Hardware-specific issues</h3>
+
+<h4><a name="Alpha_with_gcc"></a>Alpha with gcc</h4>
+
+<ul>
+<li>You don't have to use gcc on Alpha systems, because the bundled
+compiler works.
+
+<li>The Alpha code generator in gcc 2.7.2.1 is broken. gcc 2.5.8 and 2.6.3
+are probably usable. Versions before 2.5.0 are believed not to work. We
+suggest you use a recent version.
+
+<li>If you really want to use gcc 2.7.x, here is a patch for that version
+from gcc maintainer Jim Wilson
+&lt;<a href="mailto:wilson@cygnus.com">wilson@cygnus.com</a>&gt;.
+
+<pre>
+*** reload.c.orig Sun Mar 9 14:05:23 1997
+--- reload.c Sun Mar 9 14:06:54 1997
+*************** push_secondary_reload (in_p, x, opnum, o
+*** 589,600 ****
+ set it up now. */
+
+ if (in_p &amp;&amp; icode == CODE_FOR_nothing
+! &amp;&amp; SECONDARY_MEMORY_NEEDED (class, reload_class, reload_mode))
+! get_secondary_mem (x, reload_mode, opnum, type);
+
+ if (! in_p &amp;&amp; icode == CODE_FOR_nothing
+! &amp;&amp; SECONDARY_MEMORY_NEEDED (reload_class, class, reload_mode))
+! get_secondary_mem (x, reload_mode, opnum, type);
+ #endif
+ }
+
+--- 589,600 ----
+ set it up now. */
+
+ if (in_p &amp;&amp; icode == CODE_FOR_nothing
+! &amp;&amp; SECONDARY_MEMORY_NEEDED (class, reload_class, mode))
+! get_secondary_mem (x, mode, opnum, type);
+
+ if (! in_p &amp;&amp; icode == CODE_FOR_nothing
+! &amp;&amp; SECONDARY_MEMORY_NEEDED (reload_class, class, mode))
+! get_secondary_mem (x, mode, opnum, type);
+ #endif
+ }
+</pre>
+</ul>
+
+<h4><a name="Apollo"></a>H-P Apollo</h4>
+
+<ul>
+
+<li>You must run the compiler in ANSI-compatible mode (that is, set <b><tt>AK=</tt></b>{null string} in the makefile); otherwise it gives incorrect error
+messages for any function declared as returning a float value.
+
+<li>The H-P Apollo compiler may not compile Ghostscript correctly. If you
+get unexpected crashes at run time, use gcc.
+</ul>
+
+<h4><a name="ATT_7040"></a>AT&amp;T 7040 R3</h4>
+
+<ul>
+<li>If Ghostscript crashes on startup, recompile with <b><tt>-O0</tt></b>
+to work around compiler bugs.
+</ul>
+
+<h4><a name="Convex"></a>Convex</h4>
+
+<ul>
+
+<li>Use <b><tt>unixansi.mak</tt></b>. Do not invoke optimization
+(<b><tt>-O1</tt></b>) because the compiler will produce incorrect code.
+
+<li>Set <b><tt>CFLAGS</tt></b> to
+"<b><tt>-no&nbsp;-fn&nbsp;-tm&nbsp;c1</tt></b>".
+</ul>
+
+<h4><a name="DECStations"></a>DECStations with Ultrix</h4>
+
+<ul>
+
+<li>If you get the compiler message "cfe: Fatal: _temp_19086.c:
+Segmentation violation" or a similar one, try compiling with the
+<b><tt>-oldc</tt></b> switch.
+
+<li>You may wish to set
+
+<p>
+<b><tt>GS_LIB_DEFAULT=$(gsdatadir):/usr/lib/DPS/outline/decwin:$(gsdatadir)/fonts</tt></b>
+
+<p>
+in the makefile to add the Display PostScript font directory to the font
+search path.
+
+<li>Set
+
+<p>
+<b><tt>CFLAGS="-Olimit&nbsp;2500"</tt></b>
+
+<p>
+to make the optimizer allocate enough table space.
+
+<li>The Ultrix 4.4 C compiler compiles <b><tt>gdevm1.c</tt></b>
+incorrectly. Insert the following line in the makefile rule for
+"<b><tt>gdevm1.$(OBJ)</tt></b>" (the body of the rule is empty in the
+standard distribution):
+
+<p>
+<b><tt>$(CCC) -oldc gdevm1.c</tt></b>
+</ul>
+
+<h4><a name="HP_RISC"></a>H-P RISC workstations</h4>
+
+<ul>
+
+<li>HP-UX versions before 11.0 do not support POSIX threads. Set
+<b><tt>SYNC=nosync</tt></b> in the makefile before building.
+
+<li>Ghostscript builds on H-P machines with either GNU gcc or H-P's
+ANSI-capable <b><tt>cc</tt></b>. The minimal, non-ANSI-capable
+<b><tt>cc</tt></b> that ships with a basic HPUX system does <b><em>not</em></b>
+work. If <b><tt>cc</tt></b> on your system doesn't accept the
+<b><tt>-Aa</tt></b> switch, then you need to get the full
+<b><tt>cc</tt></b> or gcc.
+
+<li>If you use H-P's compiler, be sure you have upgraded to a recent
+release. Many bizarre symptoms have been reported trying to build
+Ghostscript with older, buggier compilers, for example:
+<ul>
+<li>The link step fails with a message about "<b><tt>max</tt></b>" not being defined.
+<li>The build succeeds, but the resulting executable fails to start up,
+with an error message like "Initializing... Unrecoverable error: typecheck
+in .registerencoding".
+<li>The build succeeds, but the resulting executable produces a black
+background on the first page of output.
+</ul>
+
+<li>It is reported that On HPUX 9.* you need at least compiler patch
+PHSS_5723 and dld.sl patch PHSS_5734 to build Ghostscript. (As of late
+1997, those patches are long obsolete; the current patches are compiler
+PHSS_10357 and dld.sl PHSS_11246. It is unknown whether current
+Ghostscript releases work with compiler/dld.sl versions older than these.)
+
+<li>On HPUX 10.*, we don't know what combinations of compiler version and
+switches work. It is reported that On HPUX 10.20, setting
+"<b><tt>CC=c89</tt></b>" and "<b><tt>CFLAGS=+O3&nbsp;$(XCFLAGS)</tt></b>"
+works, contradicting the information in the next paragraph, but this may be
+dependent on the specific compiler version.
+
+<li>In either HPUX version, you need to set
+"<b><tt>CC=cc&nbsp;-Aa</tt></b>" (or use <b><tt>-Ae</tt></b> if you
+prefer), and set
+"<b><tt>CFLAGS=-D_HPUX_SOURCE&nbsp;-O&nbsp;$(XCFLAGS)</tt></b>". Higher
+levels of optimization than <b><tt>-O</tt></b> may work depending on your
+compiler revision; some users have reported success with
+<b><tt>+O3</tt></b>, some have not.
+
+<li>Some users have reported needing <b><tt>-DNOSYSTIME</tt></b> and
+<b><tt>-D_POSIX_SOURCE</tt></b> in <b><tt>CFLAGS</tt></b>, but recent tests
+do not show these to be necessary.
+
+<li>If you use gcc, it's a good idea to have a recent release -- 2.7.2.1 or
+later -- but gcc 2.6.3 has been known to work with past releases of
+Ghostscript. gcc versions earlier than 2.6.3, and 2.7.* earlier than
+2.7.2.1, are known <b><em>not</em></b> to work. You may be able to get a working
+executable with an older gcc by removing <b><tt>-O</tt></b> from
+<b><tt>CFLAGS</tt></b>.
+</ul>
+
+<h4><a name="Intergraph"></a>Intergraph Clipper</h4>
+
+<ul>
+<li>Recommended settings are:
+
+<p>
+<b><tt>XCFLAGS=-w -Q -DSYSV -D__SVR3<br>
+EXTRALIBS=-lbsd -lc_s<br>
+CC=acc -knr<br>
+PLATFORM=sysv_</tt></b><br>&nbsp;
+
+<li>You will probably need to change the value of <b><tt>XLIBS</tt></b> from
+"<b><tt>XLIBS=Xt X11 Xext</tt></b>" to "<b><tt>XLIBS=Xt_s X11_s Xext</tt></b>".
+</ul>
+
+<h4><a name="MIPS"></a>MIPS</h4>
+
+<ul>
+<li>There is apparently a bug in older versions of the MIPS C compiler
+which causes <b><tt>gxdither.c</tt></b> to compile incorrectly if
+optimization is enabled (<b><tt>-O</tt></b>). However, this bug is
+definitely fixed in MipsPRO C version 6.00; with this version, compiling
+with "<b><tt>-O2 -mips2</tt></b>" produces good output.
+</ul>
+
+<h4><a name="NCR_3550"></a>NCR 3550</h4>
+
+<ul>
+<li>With the NCR C Development Toolkit you must use <b><tt>-O0</tt></b>.
+</ul>
+
+<h4><a name="Pyramid"></a>Pyramid MIServer-S</h4>
+
+<p>
+See "<a href="#ATT_7040">AT&amp;T 7040 R3</a>".
+
+<h4><a name="RS6000"></a>IBM RS/6000 with AIX</h4>
+
+<ul>
+
+<li>Many versions of the AIX C compiler have bugs that have prevented
+Ghostscript from compiling and linking properly. We believe that the
+current Ghostscript release works around these bugs, and that
+<b><tt>unixansi.mak</tt></b> with <b><tt>CC=cc</tt></b> should work.
+
+<li>You must also edit the makefile (<b><tt>unixansi.mak</tt></b>) to change
+<b><tt>INSTALL</tt></b> to <b><tt>/usr/ucb/install</tt></b>.
+
+<li>AIX doesn't use a separate library for multi-thread support: set
+<b><tt>STDLIBS=-lm</tt></b> in the makefile.
+
+<li>If <b><tt>-DSYSV</tt></b> produces a complaint about the functions
+<b><tt>index</tt></b> and <b><tt>rindex</tt></b> not being defined, try
+removing it.
+
+<li>If the xlc 1.2.1 optimizer runs out of memory, you may need to add
+<b><tt>-qmaxmem=4000</tt></b> to <b><tt>CFLAGS</tt></b>.
+
+<li>A user reports that the AIX C compiler shipped with AIX 3.2.5 compiles
+Ghostscript only if invoked with "<b><tt>c89&nbsp;-D_POSIX_SOURCE</tt></b>"
+and <b><em>without</em></b> <b><tt>-O</tt></b>. On the other hand, another
+user reports successful compilation using <b><tt>unix-ansi.mak</tt></b> and
+the command line
+
+<p>
+<b><tt>make&nbsp;CC=c89&nbsp;XCFLAGS="-DOSY_AIX&nbsp;-D_ALL_SOURCE&nbsp;-qnoro&nbsp;-qmaxmem=3000&nbsp;-bfl"&nbsp;$*</tt></b><br>&nbsp;
+
+<li>Apparently some (but not all) releases of the C library declare the
+<b><tt>hypot</tt></b> function: if the declaration in
+<b><tt>math_.h</tt></b> produces an error message, try removing it.
+
+<li>The IBM X11R3 server is known to be buggy: use the MIT X server if
+possible.
+
+<li>The xlc 1.3.0.x compiler provided in AIX 3.2.5+ definitely will not
+compile Ghostscript correctly if <b><tt>-O</tt></b> is used on all files.
+A user reports that compiling <b><tt>z</tt></b>*<b><tt>.c</tt></b>,
+<b><tt>gsmatrix.c</tt></b>, <b><tt>gxstroke.c</tt></b> without
+<b><tt>-O</tt></b> is sufficient to produce a working executable:.
+
+<li>Some installations of AIX 3.2.5 have what appears to be an incorrect or
+inconsistent version of <b><tt>libXt.a</tt></b> in
+<b><tt>/usr/lpp/X11/lib</tt></b>. If linking shows
+<b><tt>XtShellStrings</tt></b> and <b><tt>XtStrings</tt></b> as unresolved
+externals, set
+"<b><tt>XLIBDIRS=-L/usr/lpp/X11/lib/R5&nbsp;-L/usr/lpp/X11/lib</tt></b>"
+rather than just "<b><tt>XLIBDIRS=-L/usr/lpp/X11/lib</tt></b>".
+
+<li>Ghostscript has been successfully compiled and runs under AIX 4.3.3 and
+the IBM C compiler version 5. The following changes were required in
+unixansi.mak:
+
+<p>
+<b><tt>CC=xlc</tt></b>
+<br>
+<b><tt>XCFLAGS=-qalign=natural</tt></b>
+
+</ul>
+
+<h4>
+<a NAME="Silicon_Graphics"></a>Silicon Graphics</h4>
+
+<p>
+Users have had a lot of problems with the MIPSpro compilers on SGI systems.
+We recommend using gcc. If you do choose to use the MIPSpro compiler,
+please read the following carefully.
+
+<ul>
+<li>
+To make the optimizer allocate enough table space, set
+
+<p><b><tt>CFLAGS="-Olimit 2500"</tt></b> (for older compilers)
+<br><b><tt>CFLAGS="-OPT:Olimit=2500"</tt></b> (for newer compilers)
+
+<p>
+MIPSpro compiler version 3.19 is "older", and 7.1 is "newer"; we aren't
+sure at what point in between the latter syntax was introduced.
+
+<li>
+With the compiler shipped with Irix 5.2, use the <b><tt>-ansi</tt></b>
+option.
+
+<li>
+The SGI C compiler may produce warnings about "Undefined the ANSI standard
+library defined macro stdin/stdout/stderr". To suppress these warnings, add
+"<b><tt>-woff 608</tt></b>" to the definition of <b><tt>CFLAGS</tt></b>.
+
+<li>
+The SGI C compiler shipped with Irix 6.1 and 6.2 will not compile
+<b><tt>zlib/deflate.c</tt></b> properly with optimization. Compile this file
+separately without <b><tt>-O</tt></b>.
+
+<li>
+With IRIX 6.5.x and the MIPSpro 7.x compilers there have been reports about
+incorrect output and binaries that cause segmentation faults.&nbsp; Various
+solutions have been suggested and you may want to try them in this order,
+until you get a working binary:
+
+<ul>
+<li>
+Compile <b><tt>idict.c</tt></b> and <b><tt>isave.c</tt></b> separately
+without optimization after doing a normal compile; then relink.e.g.:
+
+<p>
+<b><tt>cc -OPT:Olimit=2500 -I. -I./obj -o ./obj/idict.o -c ./idict.c</tt></b><br>
+<b><tt>cc -OPT:Olimit=2500 -I. -I./obj -o ./obj/isave.o -c ./isave.c</tt></b>
+
+<li>
+Set <b><tt>CFLAGS=</tt></b> (no optimization).
+
+<li>
+Use only <b><tt>-O2</tt></b>.&nbsp;&nbsp; Compiler produces incorrect output
+with <b><tt>-O3</tt></b> or "<b><tt>-Ofast=ip32 -show</tt></b>".
+
+<li>
+Irix 6.5.1m with MIPSpro compiler 7.2.1.1m, Irix 6.5.3m with MIPSpro
+compiler 7.2.1, and probably other 6.5x / 7.2x combinations require
+compiling with the <b><tt>-o32</tt></b> option. Compiling with the (default)
+<b><tt>-n32</tt></b> option produces non-working executables.
+<b><tt>-O2</tt></b> is OK (possibly except for <b><tt>idict.c</tt></b>), but
+not <b><tt>-O3</tt></b>.
+</ul>
+</ul>
+
+<h4><a name="Sun"></a>Sun</h4>
+
+<ul>
+<li>The Sun unbundled C compiler (SC1.0) doesn't compile Ghostscript
+properly with the <b><tt>-fast</tt></b> option: Ghostscript core-dumps in
+<b><tt>build_gs_font</tt></b>. With that compiler use <b><tt>-g</tt></b>,
+or use gcc instead.
+
+<li>The Sun version of <b><tt>dbx</tt></b> often gives up with an error
+message when trying to load Ghostscript. If this happens, use GNU
+<b><tt>gdb</tt></b> instead. (<b><tt>gdb</tt></b> is more reliable than
+<b><tt>dbx</tt></b> in other ways as well.)
+
+<li>A bug in some versions of <b><tt>zlib</tt></b> results in an undefined
+symbol <b><tt>zmemcmp</tt></b> when compiling with Sun cc. Use gcc
+instead.
+</ul>
+
+<h4><a name="SunOS"></a>SunOS</h4>
+
+<ul>
+<li>The <tt><b>tar</b></tt> program provided with SunOS 4.1.3 may not be
+able to unpack the archives in the standard Ghostscript distribution.
+Get a more recent version of <tt><b>tar</b></tt>, such as GNU
+<tt><b>tar</b></tt>.
+
+<li>In SunOS 4.1.[23], you may get undefined symbols
+<b><tt>_get_wmShellWidgetClass</tt></b> and
+<b><tt>_get_applicationShellWidgetClass</tt></b> when linking. Compiling
+"<b><tt>-Bstatic&nbsp;-lXmu&nbsp;-Bdynamic</tt></b>" appears to work for
+SC1.0. For gcc, try adding <b><tt>-static</tt></b> to
+<b><tt>CFLAGS</tt></b>. To solve the problem if you are using OpenWindows
+3.0 (X11R4-based Xt), ask Sun for patches 100512-02 and 100573-03.
+</ul>
+
+<h4><a name="Solaris"></a>Solaris</h4>
+
+<ul>
+<li>Solaris 2.2 may require setting "<b><tt>EXTRALIBS=-lsocket</tt></b>".
+Solaris 2.3 and later seem to require "<b><tt>EXTRALIBS=-lnsl&nbsp;-lsocket&nbsp;-lposix4</tt></b>".
+
+<li>For Solaris 2.6 (and possibly some other versions), if you set
+<b><tt>SHARE_LIBPNG=1</tt></b>, <b><tt>SHARE_ZLIB=1</tt></b>, or
+<b><tt>SHARE_JPEG=1</tt></b>, you may need to set
+
+<p>
+<b><tt>XLDFLAGS=-R /usr/local/</tt></b>xxx<b><tt>/lib:/usr/local/lib</tt></b>
+
+<p>
+using the full path names of the relevant directories.
+
+<li>Solaris 2.<em>n</em> uses <b><tt>/usr/openwin/share/include</tt></b>
+for the X11 libraries rather than <b><tt>/usr/local/X/include</tt></b>.
+
+<li>Solaris 2.<em>n</em> typically has Type 1 fonts in
+<b><tt>/usr/openwin/lib/X11/fonts/Type1/outline</tt></b>.
+
+<li>For Solaris 2.<b><tt>n</tt></b> in the makefile you must change
+the definition of <b><tt>INSTALL</tt></b> from "<b><tt>install&nbsp;-c</tt></b>" to
+"<b><tt>/usr/ucb/install&nbsp;-c</tt></b>".
+
+<li>You may need to set <b><tt>XLIBDIR</tt></b> to the directory that holds
+the X11 libraries, as for other SVR4 systems. Set <b><tt>-DSVR4</tt></b>
+in <b><tt>CFLAGS</tt></b>.
+
+<li>If you are using the SunPRO C compiler, don't use optimization level
+<b><tt>-xO3</tt></b>. On SPARC platforms the compiler hangs; on Intel
+platforms the generated code is incorrect. With this compiler on Intel, do
+not use the <b><tt>-native</tt></b> flag: floating point computations
+become unacceptably inaccurate. You can use <b><tt>-xcg92</tt></b> (SPARC
+V8) and <b><tt>-dalign</tt></b> for better performance.
+</ul>
+
+<h4><a name="VAX_Ultrix"></a>VAX with Ultrix</h4>
+
+<ul>
+<li>You may wish to set
+
+<p>
+<b><tt>GS_LIB_DEFAULT=$(gsdatadir):/usr/lib/DPS/outline/decwin:$(gsdatadir)/fonts</tt></b>
+
+<p>
+in the makefile to add the Display PostScript font directory to the font
+search path.
+</ul>
+
+<hr>
+
+<h2><a name="OS2_build"></a>How to build Ghostscript from source (OS/2 version)</h2>
+
+<p>
+<em>Note: This section was contributed by a user: please e-mail Hermann
+Ulrichskötter &lt;<a
+href="mailto:ulrichsk@t-online.de">ulrichsk@t-online.de</a>&gt; if you have
+questions or problems.</em>
+
+<p>
+The following instructions are for building with emx 0.9d/Fix2. Be warned
+that with this version of gcc/emx, compiler optimization flags '-O' or '-O1'
+will produce non-working output.
+
+<ul>
+<li>The relevant makefile is <b><tt>os2.mak</tt></b> The gcc/emx 0.9b (or
+later) compiler and IBM <b><tt>NMAKE.EXE</tt></b> are required.
+
+<li>For gcc/emx versions 0.9c and later, the <b><tt>LINK386</tt></b>
+command must <b><em>include</em></b>
+"<b><tt>$(COMPBASE)\lib\end.lib</tt></b>"; version 0.9b requires
+<b><em>omitting</em></b> it. The current <b><tt>os2.mak</tt></b> file does
+include this file in the <b><tt>LINK386</tt></b> command, so if you are
+using 0.9b, delete this file reference before building.
+
+<li>Be sure you are using the standard OS/2 shell, <b><tt>CMD.EXE</tt></b>.
+Some other shells have bugs or differences that cause the makefile not to
+work.
+
+<li>Make sure you followed the instructions in "How to unpack the source
+code" and "How to unpack the third-party libraries".
+
+<li>Use jpegsrc_v6b.tar.gz, zlib.tar.gz and libpng-1.0.3.tar.gz. Earlier
+versions may not work.
+
+<li>If you wish to include support for XFree86, edit the makefile
+to change <b>BUILD_X11=0</b> to <b>BUILD_X11=1</b>.
+XFree86 for OS/2 can be obtained from
+<a href="http://borneo.gmd.de/~veit/os2/xf86os2.html">
+http://borneo.gmd.de/~veit/os2/xf86os2.html</a>
+You must use emx 0.9d.
+</ul>
+
+<p>
+Before compiling or linking, execute <b><tt>md bin</tt></b> and <b><tt>md
+obj</tt></b> in the <b><tt>gs</tt></b> directory to create the directories
+for the binaries.
+
+<p>
+First, build the standard configuration:
+
+<ul>
+<li>Edit gs/src/os2.mak: find line with 'CO=-O' (Optimizer flag) and edit
+this line to 'CO=-O2' (-O or -O1 do not work!).
+
+<li>To start the make process, type <b><tt>nmake -f .\src\os2.mak</tt></b>,
+from the gs-directory.
+
+<li>One DLL and two EXEs will be produced in <b><tt>gs/bin</tt></b>:
+<b><tt>gsdll2.dll</tt></b> (the Ghostscript DLL), <b><tt>gsos2.exe</tt></b>
+(the Ghostscript executable) and <b><tt>gspmdrv.exe</tt></b> (the
+Presentation Manager display driver). All other newly generated files will
+be produced in <b><tt>gs/obj</tt></b>.
+</ul>
+
+<p>
+Now, if you wish, you can edit OS2.MAK to suit your needs, and then perform
+<b><tt>nmake -f .\src\os2.mak clean</tt></b> and then <b><tt>nmake -f
+.\src\os2.mak</tt></b>.
+
+<hr>
+
+<h2><a name="VMS_build"></a>How to build Ghostscript from source (OpenVMS version)</h2>
+
+<p>The DECC6.2-003 compiler has an optimization problem that may lead to
+warnings about the "ANSI aliasing rules". DEC (Compaq) can provide a fix
+for this problem. The DECC6.2-006 compiler apparently does not have the
+problem.
+
+<p>
+DEC C runtime library versions 5.5 and newer have an <b><tt>exit</tt></b>
+function that is compatible with all other C systems, but some older ones
+don't. If you get error messages from VMS when auxiliary programs such as
+<b><tt>genarch</tt></b> or <b><tt>echogs</tt></b> finish executing, find the
+line in stdpre.h that reads
+
+<blockquote><b><tt>
+/*#define&nbsp;OLD_VMS_C*/
+</tt></b></blockquote>
+
+and remove the <b><tt>/*</tt></b> and <b><tt>*/</tt></b>, changing it to
+
+<blockquote><b><tt>
+#define&nbsp;OLD_VMS_C
+</tt></b></blockquote>
+
+<p>
+Some versions of DEC's X server have bugs that produce broad bands of color
+where dither patterns should appear, or characters displayed white on top
+of black rectangles or not displayed at all. If this happens, consult the
+usage documentation for how to <a href="Use.htm#X_server_bugs">work around
+X server bugs</a> using X resources; also report the problem to DEC, or
+whomever supplied your X server.
+
+<p>
+You may also wish to turn off the use of a backing pixmap with Ghostscript,
+either to work around X server memory limitations or bugs, or to obtain
+faster displaying at the expense of no redrawing when a Ghostscript window
+is restored from an icon or exposed after being occluded by another window.
+Again, the <a href="Use.htm">usage documentation</a> tells how to do this.
+
+<p>
+You can <a href="Fonts.htm#Precompiling">precompile any Type 1 font</a>
+into C, then compile and build it into Ghostscript, as described in the
+<a href="Fonts.htm">fonts documentation</a>. If you do this, then add
+"<b><tt>$(PSD)ccfonts.dev</tt></b>" to <b><tt>FEATURE_DEVS</tt></b> in
+<b><tt>OPENVMS.MAK</tt></b>:
+
+<blockquote><b><tt>
+$&nbsp;FEATURE_DEVS&nbsp;=&nbsp;"$(PSD)psl3.dev&nbsp;$(PSD)pdf.dev&nbsp;$(PSD)dpsnext.dev&nbsp;$(PSD)ttfont.dev&nbsp;$(PSD)ccfonts.dev"
+</tt></b></blockquote>
+
+<p>
+Specify the font names with <b><tt>ccfonts1</tt></b>:
+
+<blockquote><b><tt>
+$&nbsp;ccfonts1&nbsp;=&nbsp;"Courier&nbsp;Courier_Oblique&nbsp;Courier_Bold&nbsp;Courier_BoldOblique"
+</tt></b></blockquote>
+
+<p>
+If this makes the line too long, add another line of the same form, such as
+
+<blockquote><b><tt>
+$&nbsp;ccfonts1&nbsp;=&nbsp;"Courier&nbsp;Courier_Oblique&nbsp;Courier_Bold&nbsp;Courier_BoldOblique"
+$&nbsp;ccfonts2&nbsp;=&nbsp;"Times_Roman&nbsp;Times_Italic&nbsp;Times_Bold&nbsp;Times_BoldItalic"
+</tt></b></blockquote>
+
+<h3><a name="GNU_make_VMS"></a>Building with GNU make on OpenVMS</h3>
+
+<p>
+<em>Note: GNU make on OpenVMS apparently has bugs that make it stop with an
+error when building Ghostscript version 5.80 or later. Until further
+notice, use MMS or MMK for building Ghostscript on OpenVMS. See <a
+href="#MMK_MMS_VMS">below</a> for details.</em>
+
+<p>
+As of Ghostscript version 5.0 you can use GNU make -- with the file
+<b><tt>OPENVMS.MAK</tt></b> and some auxiliary <b><tt>.COM</tt></b> files
+-- to build Ghostscript on OpenVMS. Use the command:
+
+<blockquote>
+<b><tt>make&nbsp;-fopenvms.mak&nbsp;"DECWINDOWS=</tt></b><em>[</em><b><tt>1.2</tt></b><em>]</em><b><tt>"</tt></b>
+</blockquote>
+
+<p>
+That is, specify either "<b><tt>1.2</tt></b>" or nothing (blank) as the
+value of <b><tt>DECWINDOWS</tt></b>. In Europe and other parts of the world
+where ISO standard paper sizes are used, append "<b><tt>A4_PAPER=1</tt></b>"
+to that line to make A4 the default paper size at run time.
+
+<p>
+If you haven't a prebuilt copy of GNU make, you'll have to build it
+yourself; as of Version 3.76 (but not earlier) it is said to build properly
+under OpenVMS on both VAX and Alpha. The kit is available at the
+<a href="http://www.gnu.org/">Free Software Foundation's</a> ftp site and
+its mirrors. See
+
+<blockquote>
+<a href="ftp://ftp.gnu.org/pub/gnu/"
+class="offsite">ftp://ftp.gnu.org/pub/gnu/</a>
+</blockquote>
+
+<h3><a name="MMK_MMS_VMS"></a>Building with MMK or MMS on OpenVMS</h3>
+
+<p>
+As of Ghostscript version 5.68 you can use MMK or MMS to build Ghostscript on
+OpenVMS. MMS is a utility available from Compaq (Digital);
+MMK is a freely-available program largely compatible with MMS.
+
+<p>
+Building Ghostscript with MMK or MMS uses the file
+<b><tt>OPENVMS.MMK</tt></b> and some auxiliary <b><tt>.COM</tt></b> files.
+To build Ghostscript with MMK or MMS, use the command:
+
+<blockquote>
+<b><tt>###/descrip=[.src]openvms.mmk/macro=("DECWINDOWS1_2=</tt></b><em>{</em><b><tt>0</tt></b>,<b><tt>1</tt></b><em>}</em><b><tt>")</tt></b>
+</blockquote>
+
+where <b><tt>###</tt></b> is either <b><tt>mmk</tt></b> or <b><tt>mms</tt></b>.
+
+<p>
+Specify <b><tt>DECWINDOWS1_2=1</tt></b> for DECWINDOWS 1.2,
+<b><tt>DECWINDOWS1_2=0</tt></b> for other DECWINDOWS versions. In Europe
+and other parts of the world where ISO standard paper sizes are used, add
+<b><tt>,"A4_PAPER=1"</tt></b> just before the final closing parenthesis to
+make A4 the default paper size at run time.
+
+<hr>
+
+<h2><a name="Other_environments"></a>Other environments</h2>
+
+<h3><a name="No_multi_thread"></a>Environments lacking multi-threading</h3>
+
+<p>
+All environments mentioned here by name have multi-threading capability.
+However, if your environment doesn't, you can remove all need for
+multi-threading by setting <b><tt>SYNC=nosync</tt></b> in the top-level
+makefile. Note that you will not be able to use any so-called "async"
+drivers (drivers that overlap interpretation and rasterization) if you do
+this. No such drivers are in the <b><tt>DEVICE_DEVS*</tt></b> lists of any
+makefile that we distribute.
+
+<h3><a name="Plan_9"></a>Plan 9</h3>
+
+<p>
+Use <b><tt>unix-gcc.mak</tt></b>, editing it to define
+
+<blockquote><b><tt>
+CC=cc
+GCFLAGS=-D_BSD_EXTENSION -DPlan9
+</tt></b></blockquote>
+
+<p>
+You will also probably have to edit many path names.
+
+<h3><a name="QNX"></a>QNX</h3>
+
+<p>
+David J. Hawkey Jr. writes that he built Ghostscript 4.03 and 5.0 under QNX
+4.22, 4.23, and 4.24 using Watcom C 10.6 and that "it works quite well,
+after figuring out the <b><tt>/etc/config/lpsrvr</tt></b> directives,
+except for color printing to my HP DeskJet some-number-or-another". Here
+is a concise presentation of changes based on the ones he made for
+Ghostscript 4.03.
+
+<dl>
+<dt><b><tt>unixansi.mak</tt></b>
+<dd><table cellpadding=0 cellspacing=0>
+<tr valign=bottom>
+ <th align=left>Original lines
+ <td>&nbsp;&nbsp;
+ <th align=left>Change to
+<tr> <td colspan=3><hr>
+<tr valign=top> <td><b><tt>INSTALL = install -c<br>INSTALL_PROGRAM = $(INSTALL) -m 755<br>INSTALL_DATA = $(INSTALL) -m 644</tt></b>
+ <td>&nbsp;
+ <td><b><tt>INSTALL = cp<br>INSTALL_PROGRAM = $(INSTALL)<br>INSTALL_DATA = $(INSTALL)</tt></b>
+<tr> <td colspan=3><hr>
+<tr valign=top> <td><b><tt>datadir = $(prefix)/share</tt></b>
+ <td>&nbsp;
+ <td><b><tt>datadir = $(prefix)/lib</tt></b>
+<tr> <td colspan=3><hr>
+<tr valign=top> <td><b><tt>CFLAGS_STANDARD=-O</tt></b>
+ <td>&nbsp;
+ <td><b><tt>CFLAGS_STANDARD=-Otx -zp1 -mf</tt></b>
+<tr> <td colspan=3><hr>
+<tr valign=top> <td><b><tt>LDFLAGS=$(XLDFLAGS)</tt></b>
+ <td>&nbsp;
+ <td><b><tt>LDFLAGS=-mf -N32k $(XLDFLAGS)</tt></b>
+<tr> <td colspan=3><hr>
+<tr valign=top> <td><b><tt>EXTRALIBS=</tt></b>
+ <td>&nbsp;
+ <td><b><tt>EXTRALIBS=-lXqnx_s -lsocket</tt></b>
+<tr> <td colspan=3><hr>
+<tr valign=top> <td><b><tt>XINCLUDE=-I/usr/local/X/include</tt></b>
+ <td>&nbsp;
+ <td><b><tt>#XINCLUDE=-I/usr/local/X/include</tt></b>
+<tr> <td colspan=3><hr>
+<tr valign=top> <td><b><tt>XLIBDIRS=-L/usr/local/X/lib<br>XLIBDIR=<br>XLIBS=Xt Xext X11</tt></b>
+ <td>&nbsp;
+ <td><b><tt>#XLIBDIRS=-L/usr/local/X/lib<br>#XLIBDIR=<br>XLIBS=Xt_s Xext X11_s</tt></b>
+<tr> <td colspan=3><hr>
+</table>
+</dl>
+
+<dl>
+<dt><b><tt>gp_unifs.c</tt></b>
+<dd>After the line
+
+<blockquote>
+<b><tt>#include&nbsp;&lt;sys/param.h&gt;</tt></b>
+</blockquote>
+
+<p>
+add these lines:
+
+<blockquote>
+<b><tt>#if&nbsp;defined(__QNX__)<br>
+#include&nbsp;&lt;unix.h&gt;<br>
+#endif</tt></b><br>
+</blockquote>
+</dl>
+
+<dl>
+<dt><b><tt>gp_unix.c</tt></b>
+<dd>After the line
+
+<blockquote>
+<b><tt>#include&nbsp;"time.h"</tt></b>
+</blockquote>
+
+<p>
+add these lines:
+
+<blockquote>
+<b><tt>#if&nbsp;defined(__QNX__)<br>
+#include&nbsp;&lt;sys/time.h&gt;<br>
+#endif</tt></b><br>
+</blockquote>
+</dl>
+
+<dl>
+<dt><b><tt>time_.h</tt></b>
+<dd>Modify the line beginning
+
+<blockquote>
+<b><tt>#&nbsp;&nbsp;if&nbsp;defined(Plan9)&nbsp;||</tt></b>
+</blockquote>
+
+<p>
+to begin
+
+<blockquote>
+<b><tt>#&nbsp;&nbsp;if&nbsp;defined(__QNX__)&nbsp;||&nbsp;defined(Plan9)&nbsp;||</tt></b>
+</blockquote>
+</dl>
+
+<dl>
+<dt><b><tt>/etc/config/lpsrvr</tt></b>
+<dd>Here is Hawkey's <b><tt>lpsrvr</tt></b> as an example.
+
+<blockquote>
+<pre># lpsrvr
+#
+# Defines the print queues and their devices
+#
+# Queues
+
+# ink-jet: Ghostscript interpreter for mono DeskJet - LaserJet works
+# better than DeskJet!
+
+[ij-monops]
+ ta=lpt1
+ co=/usr/local/bin/gs -q -sDEVICE=laserjet -sOutputFile=- -dNOPAUSE $(spfile) quit.ps | cat &gt; $(device)
+
+# Devices
+
+[-lpt1]
+ dv=/dev/par1
+
+[-lpt2]
+ dv=/dev/par2
+</pre></blockquote>
+</dl>
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 2000 Aladdin Enterprises.
+All rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/New-user.htm b/Master/xemtex/doc/ghostscript/New-user.htm
new file mode 100644
index 00000000000..125058b234e
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/New-user.htm
@@ -0,0 +1,592 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Background information for new users of Ghostscript</title>
+<!-- $Id: New-user.htm,v 1.30.2.14.2.6 2003/05/17 14:39:00 giles Exp $ -->
+<!-- Originally: new-user.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Background information for new users of Ghostscript</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<ul>
+<li><a href="#Overview">An overview of Ghostscript</a>
+<ul>
+<li><a href="#Find_Ghostscript">How is Ghostscript licensed? Where can I find it?</a>
+<ul>
+<li><a href="#GNU_gs">GNU Ghostscript</a>
+</ul>
+<li><a href="#Third-party_libraries">Libraries obtained from other parties</a>
+<li><a href="#Support">What if I want support?</a>
+<li><a href="#Commercial_use">What about commercial use?</a>
+<li><a href="#Platforms">What platforms does Ghostscript run on?</a>
+<ul>
+<li><a href="#Third-party_platforms">Ports done by users</a>
+</ul>
+</ul>
+<li><a href="#Related_work">Related work</a>
+<ul>
+<li><a href="#Drivers">Drivers</a>
+<li><a href="#Previewers">Previewers</a>
+<ul>
+<li><a href="#Previewer_X">Previewers for X Windows</a>
+<li><a href="#Previewer_DOS-Win">Previewers for DOS and MS Windows</a>
+<li><a href="#Previewer_GNULinux">A previewer for GNU/Linux</a>
+</ul>
+<li><a href="#Related_programs">Related programs</a>
+</ul>
+<li><a href="#Need_help">If you need help</a>
+<ul>
+<li><a href="#Reporting_problems">Reporting problems</a>
+</ul>
+<li><a href="#Contacting_us">Contacting Ghostscript headquarters</a>
+<li><a href="#How_to_help">How you can help improve Ghostscript</a>
+<li><a href="#Acknowledgments">Acknowledgements</a>
+</ul>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="Overview"></a>An overview of Ghostscript</h2>
+
+<p>
+Ghostscript is the name of a set of software that provides:
+
+<ul>
+<li>An interpreter for the <b>PostScript</b><small><sup>TM</sup></small>
+language and the Adobe <b>Portable Document Format</b> (<b>PDF</b> --
+sometimes confused with Acrobat, Adobe's PDF browser and editor product);
+
+<li>Input modules (utilities) for reading a variety of raster formats,
+including <b>CMYK</b>, <b>GIF</b>, <b>JFIF</b> (<b>JPEG</b>), <b>MIFF</b>,
+<b>PBM</b>/<b>PGM</b>/<b>PPM</b>, and <b>PCX</b>;
+
+<li>Output modules (drivers) for a wide variety of window systems (including
+X Windows and Microsoft Windows), raster file formats, and printers, as well
+as a PDF output module that implements functions similar to Adobe's
+Acrobat<small><sup>TM</sup></small> Distiller<small><sup>TM</sup></small>
+product; and
+
+<li>The Ghostscript library, a set of procedures to implement the graphics
+and filtering capabilities that are primitive operations in the PostScript
+language and in PDF.
+</ul>
+
+<p>
+In simple terms, this means that Ghostscript can read a PostScript or PDF
+file and display the results on the screen or convert them into a form you
+can print on a non-PostScript printer. Especially together with several
+popular <a href="#Previewers">previewers</a>, with Ghostscript you can view
+or print an entire document or even isolated pages, even if your computer
+doesn't have Display PostScript and your printer doesn't handle PostScript
+itself.
+
+<h3><a name="Find_Ghostscript"></a>How is Ghostscript licensed? Where can I find it?</h3>
+
+<p>
+Ghostscript is a copyrighted work (artofcode LLC owns the copyright);
+it is not shareware or in the public domain. Different versions of it are
+distributed with three different licenses:
+
+<h4><a name="GNU_gs"></a>GNU Ghostscript</h4>
+
+<p>
+GNU Ghostscript is distributed under the terms of the GNU <a
+href="http://www.gnu.org/copyleft/gpl.html">General Public License</a>,
+which allows free use, and free copying and redistribution under certain
+conditions (including, in some cases, commercial distribution).
+You can always get the current version of GNU Ghostscript by Internet FTP
+from any of the many GNU distribution sites. The GNU home ftp site is
+
+<blockquote>
+<a href="ftp://ftp.gnu.org/pub/gnu/"
+class="offsite">ftp://ftp.gnu.org/pub/gnu/</a>
+</blockquote>
+
+<p>
+For a more complete list of sites, including sites outside the U.S. and
+other ways of obtaining GNU software, contact
+the <a href="http://www.gnu.org/">Free Software Foundation</a>
+<a href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>.
+
+<p><a name="CTAN"></a>
+Versions of Ghostscript are also available from sites in the
+Comprehensive TeX Archive Network (CTAN), in a tree based at
+/tex-archive/support/ghostscript/, which you can find at these principal
+CTAN distribution sites ("participating hosts") as of mid-1998:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr> <td><a
+href="ftp://ctan.tug.org/tex-archive/support/ghostscript/"
+class="offsite">ftp://ctan.tug.org/tex-archive/support/ghostscript/</a>
+ <td>&nbsp;&nbsp;
+ <td>Massachusetts, U.S.A.
+<tr> <td><a href="ftp://ftp.dante.de/tex-archive/support/ghostscript/"
+class="offsite">ftp://ftp.dante.de/tex-archive/support/ghostscript/</a>
+ <td>&nbsp;
+ <td>Deutschland
+<tr> <td><a
+href="ftp://ftp.tex.ac.uk/tex-archive/support/ghostscript/"
+class="offsite">ftp://ftp.tex.ac.uk/tex-archive/support/ghostscript/</a>
+ <td>&nbsp;
+ <td>United Kingdom
+</table></blockquote>
+
+<p>
+CTAN has more than fifty mirror sites around the world. For information
+about CTAN sites, including how to use them over the World Wide Web, visit
+<a href="http://www.ctan.org/" class="offsite">ctan.org</a> or get
+the file <b><tt>CTAN.sites</tt></b> from any CTAN server, for
+instance
+
+<blockquote>
+<a href="ftp://ctan.tug.org/tex-archive/CTAN.sites"
+class="offsite">ftp://ctan.tug.org/tex-archive/CTAN.sites</a>
+</blockquote>
+
+<hr>
+
+<h3><a name="Third-party_libraries"></a>Libraries obtained from other parties</h3>
+
+<p>
+The Ghostscript source code distribution, and the Ghostscript executable
+code, include libraries obtained from other parties. All the source files
+mentioned in this section are in the Ghostscript and third-party library
+source kits. The documentation of <a href="Make.htm">how to build
+Ghostscript</a> tells <a href="Make.htm#Acquiring">where to get these
+libraries</a> and <a href="Make.htm#Unpack">how to unpack them</a>.
+
+<blockquote><dl>
+<dt>The <a href="http://www.ijg.org/" class="offsite">Independent JPEG
+Group</a> (IJG)
+library
+<dd>The executable versions of Ghostscript are based in part on the work of
+the Independent JPEG Group. For more information, see
+<b><tt>jpeg.mak</tt></b> in the main Ghostscript source directory and
+<b><tt>README</tt></b> in the libjpeg source directory.
+
+<dt>The <a href="http://www.libpng.org/pub/png/"
+class="offsite">Portable Network
+Graphics</a> (PNG) library created by Dave Martindale, Guy Eric Schalnat,
+Paul Schmidt, and Tim Wegner, of Group 42, Inc.
+<dd>For more information, see <b><tt>libpng.mak</tt></b> in the main
+Ghostscript source directory, and <b><tt>README</tt></b> and
+<b><tt>png.h</tt></b> in the libpng source directory.
+
+<dt>The <a href="http://www.gzip.org/zlib/"
+class="offsite">zlib</a> library
+created by Jean-loup Gailly and Mark Adler
+<dd>For more information, see <b><tt>zlib.mak</tt></b> in the main
+Ghostscript source directory, and <b><tt>README</tt></b> in the
+zlib source code.
+</dl></blockquote>
+
+<p>
+These libraries do not fall under the GPL but come with their own licenses,
+which also allow free use and redistribution under appropriate
+circumstances and which appear in the files mentioned just above. These
+libraries are entirely original works of their respective authors, and are
+provided as is with no warranty and no support.
+
+<hr>
+
+<h3><a name="Support"></a>What if I want support?</h3>
+
+<p>
+Neither artofcode LLC nor any organization known to us currently offers
+Ghostscript support for end-users -- that is, for people or companies who
+just want to use Ghostscript and not redistribute it as part of a product.
+
+<p>
+Nothing in the GNU license prevents anyone from providing
+support for Ghostscript, either free or commercial. We would be happy to
+include in the Ghostscript documentation the contact information for anyone
+who wants to offer such support.
+
+<hr>
+
+<h3><a name="Platforms"></a>What platforms does Ghostscript run on?</h3>
+
+<p>
+Ghostscript is written entirely in C, with special care taken to make it
+portable to a wide variety of systems. It is actively maintained on many
+unix-like operating systems, Microsoft Windows, Apple's MacOS and
+OpenVMS and can easily be ported to others. Please see <a
+href="Make.htm">Making Ghostscript</a> for details on the build process
+and hints for various platforms.
+
+<hr>
+
+<h2><a name="Related_work"></a>Related work</h2>
+
+<h3><a name="Drivers"></a>Drivers</h3>
+
+<p>
+A number of people have created Ghostscript drivers that they prefer to
+distribute directly, rather than including them in the Ghostscript
+distributions. Please refer to <a
+href="http://www.linuxprinting.org/"
+class="offsite">www.linuxprinting.org</a> or your favorite search engine
+for
+relevant examples.
+
+<h3><a name="Previewers"></a>Previewers</h3>
+
+<p>
+The Ghostscript user interface is very primitive, so several people have
+contributed screen previewers with better user interfaces.
+
+<h4><a name="Previewer_X"></a>Previewers for X Windows</h4>
+
+<dl>
+<dt><b><tt>GSPreview</tt></b>
+<dd>For information on GSPreview, contact Richard Hesketh
+&lt;<a href="mailto:rlh@ukc.ac.uk">rlh@ukc.ac.uk</a>&gt;.
+</dl>
+
+<h4><a name="Previewer_DOS-Win"></a>Previewers for DOS and MS Windows</h4>
+
+<dl>
+<dt><b><tt>psv</tt></b>
+<dd><b><tt>PSV</tt></b>, another keyboard-based PostScript viewing package
+for DOS, appears to be redistributable with no restrictions. It was once
+available from
+
+<blockquote>
+ftp://puccini.ujf-grenoble.fr/pub/contrib-ps/DOS-PSV/
+</blockquote>
+</dl>
+
+<h4><a name="Previewer_GNULinux"></a>A previewer for GNU/Linux</h4>
+
+<dl>
+<dt><b><tt>BMV</tt></b> <dd>Jan Kybic has created a Ghostscript-based
+bitmap previewing program for GNU/Linux called <b><tt>BMV</tt></b>, which
+doesn't use X Windows but is based on <b><tt>svgalib</tt></b>. He says
+there is a port of <b><tt>BMV</tt></b> for SCO Unix by William Bader.
+<b><tt>BMV</tt></b> is available from
+
+<blockquote>
+<a
+href="ftp://sunsite.unc.edu/pub/Linux/apps/graphics/viewers/svga/bmv-1.2.tgz"
+class="offsite">ftp://sunsite.unc.edu/pub/Linux/apps/graphics/viewers/svga/bmv-1.2.tgz</a>
+</blockquote>
+</dl>
+
+<hr>
+
+<h3><a name="Related_programs"></a>Related programs</h3>
+
+<dl>
+<dt><b><tt>genscript</tt></b>
+<dd><b><tt>genscript</tt></b> is a free replacement for the
+<b><tt>enscript</tt></b> program. <b><tt>genscript</tt></b> converts plain
+text files to PostScript and sends the generated PostScript output to the
+specified printer or to a file. <b><tt>genscript</tt></b> can be easily
+extended to handle different output media, and it has many options which can
+be used to customize printouts, including 2-up printing, pagination, complex
+headers, and many more. You can find the current version at
+
+<blockquote>
+<a href="http://www.iki.fi/~mtr/genscript/"
+class="offsite">http://www.iki.fi/~mtr/genscript/</a> (home page)<br>
+<a href="ftp://ftp.gnu.org/pub/gnu/"
+class="offsite">ftp://ftp.gnu.org/pub/gnu/enscript/</a>enscript-*.tar.gz
+</blockquote>
+
+<dt><b><tt>pstotext</tt></b>
+<dd>A good free utility <b><tt>pstotext</tt></b> uses Ghostscript to extract
+plain text from PostScript files. It is much better than the
+<b><tt>ps2ascii</tt></b> utility distributed with Ghostscript. You can read
+the <b><tt>pstotext</tt></b> documentation at
+
+<blockquote>
+<a
+href="http://www.research.digital.com/SRC/virtualpaper/manpages/pstotext.1.html"
+class="offsite">http://www.research.digital.com/SRC/virtualpaper/manpages/pstotext.1.html</a>
+</blockquote>
+
+<p>
+and download the <b><tt>pstotext</tt></b> kit from
+
+<blockquote>
+<a href="http://www.research.digital.com/SRC/virtualpaper/pstotext.html"
+class="offsite">http://www.research.digital.com/SRC/virtualpaper/pstotext.html</a>
+</blockquote>
+
+<p>
+<b><tt>pstotext</tt></b> is unsupported, but the authors,
+Paul McJones
+&lt;<a href="mailto:paul.mcjones@acm.org">paul.mcjones@acm.org</a>&gt;
+and Andrew Birrell
+&lt;<a href="mailto:birrell@pa.dec.com">birrell@pa.dec.com</a>&gt;, are
+happy to have your questions and comments either by e-mail or <a href="http://www.research.digital.com/SRC/virtualpaper/comments.html"
+class="offsite">here</a>
+
+<p>
+For more information about the authors' Virtual Paper project, which
+attempts to make on-line reading of lengthy material (like research
+reports, manuals, or entire books) comfortable, read:
+
+<blockquote>
+<a href="http://www.research.digital.com/SRC/virtualpaper"
+class="offsite">http://www.research.digital.com/SRC/virtualpaper</a>
+</blockquote>
+
+<dt><b><tt>PreScript</tt></b>
+<dd>This is another good free utility that uses Ghostscript to extract text
+from PostScript or PDF files. It can also generate very simple HTML,
+keeping some of the formatting. It is unsupported, but is the product of an
+active research project. Its home page is:
+
+<blockquote>
+<a href="http://www.nzdl.org/html/prescript.html"
+class="offsite">http://www.nzdl.org/html/prescript.html</a>
+</blockquote>
+
+</dl>
+
+<hr>
+
+<h2><a name="Need_help"></a>If you need help</h2>
+
+<p>
+The list of Frequently Asked Questions (FAQ) isn't updated very often, so
+it may be somewhat out of date. It's available from
+
+<blockquote>
+<a href="http://www.cs.wisc.edu/~ghost/doc/faq.htm"
+class="offsite">http://www.cs.wisc.edu/~ghost/doc/faq.htm</a><br>
+<a href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/faq.htm"
+class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/faq.htm</a>
+</blockquote>
+
+<p>
+or by AFS from
+
+<blockquote>
+/afs/cs.wisc.edu/p/mirror/pub/mirrors/ghost/faq.htm
+</blockquote>
+
+<p>
+CompuServe announced in December 1995 that the Graphics Support Forum offers
+Message Section and Library 21, "Ghostscript", for technical assistance with
+Ghostscript. Ghostscript is available for downloading in Library 21,
+"Ghostscript." To access the Graphics Support Forum, <b><tt>GO
+GRAPHSUP</tt></b>. This service has no connection with the main Ghostscript
+developers.
+
+<p>
+If you have problems with Ghostscript and you have access to the
+Internet, we suggest to post your question to one of these Usenet
+newsgroups:
+
+<dl>
+<dt><b><tt><a href="news:gnu.ghostscript.bug">gnu.ghostscript.bug</a></tt></b>
+<dd>if your question is about <b>GNU Ghostscript</b>. If you have access to Internet mail, but not Usenet news,
+write to <b><tt>bug-ghostscript@gnu.org</tt></b>, which is equivalent to
+posting to that newsgroup.
+
+<dt><b><tt><a href="news:comp.lang.postscript">comp.lang.postscript</a></tt></b>
+<dd>if you have a general question about Ghostscript. Note
+however that this newsgroup was not intended for Ghostscript
+discussion <em>per se</em>.
+</dl>
+
+<p>
+There are hundreds of Ghostscript user sites all over the world, and another
+user will often be able to help you. If you have trouble with a specific
+device driver, look at <b><tt>devs.mak</tt></b> and
+<b><tt>contrib.mak</tt></b> in the Ghostscript source directory to see in
+which file the driver is defined. If it's defined in
+<b><tt>contrib.mak</tt></b>, the list of contributed drivers, please contact
+the author directly: the maintainers of Ghostscript can't help you with
+user-maintained drivers.
+
+<h3><a name="Reporting_problems"></a>Reporting problems</h3>
+
+<p>
+Please read <a href="Bug-info.htm">Bug-info.htm</a> for information about
+reporting problems.
+
+<hr>
+
+<h2><a name="Contacting_us"></a>Contacting Ghostscript headquarters</h2>
+
+<p>
+As of mid-September 2000, artofcode LLC is responsible for the future
+development of Ghostscript. Please do not contact us if all you want is
+help with Ghostscript! Ghostscript is
+free, but our time is not. If you call for help, we will tell you politely
+that we cannot answer your question. Ghostscript's documentation, while not
+of commercial end-user quality, has been adequate for thousands of users
+(for many of whom English is a foreign language), so the answer to your
+question is very likely in it somewhere. <!-- ouch -->
+
+<p>
+Here is our contact information:
+
+<blockquote><address>
+Raph Levien<br>
+artofcode LLC<br>
+940 Tyler St. Studio 6<br>
+Benicia, CA 94510<br>
+tel/fax +1 707 746 6398<br>
+<a href="mailto:raph@artofcode.com">raph@artofcode.com</a>
+</address></blockquote>
+
+<h3>Aladdin Enterprises</h3>
+
+<p>
+Aladdin Enterprises, the original authors of Ghostscript, is no
+longer responsible for Ghostscript, but may be available for small
+contract projects. Here is their contact information:
+
+<blockquote><address>
+Aladdin Enterprises<br>
+203 Santa Margarita Avenue<br>
+Menlo Park, CA 94025 U.S.A.<br>
++1-650-322-1734 fax<br>
+<a href="mailto:ghost@aladdin.com">ghost@aladdin.com</a><br>
+<a href="http://www.ghostscript.com/"
+class="offsite">http://www.ghostscript.com/</a>
+</address></blockquote>
+
+<p>
+If you want help with Ghostscript, or want to report a problem, please do
+not contact us. We will not be able to help you.
+
+<hr>
+
+<h2><a name="How_to_help"></a>How you can help improve Ghostscript</h2>
+
+<p>
+The most valuable thing you can do to help improve Ghostscript is to help
+test it. We make three different grades of release available, each of
+which needs a different kind of testing.
+
+<ul>
+<li><em>Stable</em> releases are made available about every 9 months, after
+a beta test period. Reporting problems as described <a
+href="#Reporting_problems">above</a> often results in a fix being posted on
+our Web site.
+</ul>
+
+<ul>
+<li><em>Beta</em> releases are posted starting about 6 weeks before a
+planned public release. These are candidates for public release, and need
+intensive testing.
+</ul>
+
+<ul>
+<li><em>Development</em> releases are posted every few weeks. These are not
+supposed to be good enough for general use, but testing them is still very
+helpful, since it gets problems corrected before the intensive beta test
+period.
+</ul>
+
+<p>
+You can always find the current public release and the current beta or
+tester release on our <a href="http://www.cs.wisc.edu/~ghost/">Web
+site</a>. If you would like to be notified when new beta or tester releases
+are posted, please <a href="#Contacting_us">contact us</a>.
+
+<p>
+There are also some useful projects that we don't have enough resources to
+work on, and with which we would appreciate help. See <a
+href="Projects.htm">this list</a> for details.
+
+<hr>
+
+<h2><a name="Acknowledgments"></a>Acknowledgements</h2>
+
+<p>
+Ghostscript was originally created, and through the year 2000 was primarily
+developed and maintained, by L. Peter Deutsch, President of Aladdin
+Enterprises (not to be confused with Peter J. Deutsch, founder of Bunyip
+Information Systems Inc.).
+
+<p>
+Special thanks are due to Russell Lang, for the
+<b><tt>GSview for Windows</tt></b> and
+<b><tt>PM GSview</tt></b> programs, and for contributing most of the code for
+the Microsoft Windows and OS/2 environments; to Tim Theisen, for the
+<b><tt>Ghostview</tt></b> program for X Windows and for major contributions
+to, and assistance with support of, the code for the X Windows
+environment; to Martin Fong and Mark Lentczner, for the first Macintosh
+ports; to Pete Kaiser
+&lt;<a href="mailto:kaiser@acm.org">kaiser@acm.org</a>&gt;, for redoing all
+of the documentation in HTML;
+and to the <a href="http://www.ijg.org/">Independent
+JPEG Group</a>, to Group 42, Inc., and to Jean-loup Gailly and Mark Adler,
+for creating the freely available libraries that Ghostscript uses.
+
+<p>
+Special thanks are due to URW++ Design and Development Incorporated, of
+Hamburg, Germany (<a href="http://www.urwpp.de/">http://www.urwpp.de/</a>)
+for making a commercial-quality set of the 35 standard PostScript Type 1
+fonts available for free distribution under the GNU and Aladdin licenses,
+and for updating them to include Adobe's expanded PostScript 3 character
+set.
+
+<p>
+Special thanks are due to Richard Stallman and the
+<a href="http://www.gnu.org/" class="offsite">Free Software
+Foundation</a> for originating
+the <a href="http://www.gnu.org/copyleft/gpl.html" class="offsite">GNU
+General Public
+License</a>, for originally motivating Aladdin's interest in creating free
+software, and for being the primary distributor of GNU Ghostscript on the
+Internet.
+
+<p>
+See also the <a href="Helpers.htm">list of the many other people</a> who have
+contributed significantly to improving Ghostscript.
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996-2002 artofcode LLC. All rights
+reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/News.htm b/Master/xemtex/doc/ghostscript/News.htm
new file mode 100644
index 00000000000..7e3fa2fa015
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/News.htm
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Recent changes in Ghostscript</title>
+<!-- $Id: News.htm,v 1.90.2.18.2.8 2003/05/17 14:44:22 giles Exp $ -->
+<!-- Originally: NEWS -->
+<!--
+ WARNING: do not use Pete Kaiser's emacs function "gs-toc" alone to
+ re-create the table of contents here, because it will replace the
+ hand-edited TOC subheads with a separate subhead for each H2 in
+ the body of the file. Or if you do, first look at the original
+ TOC to see how to edit it for visual conciseness.
+-->
+<link rel="stylesheet" type="text/css" href="gs.css">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Changes in the most recent release of Ghostscript</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>
+This document is news about the most recent Ghostscript release. For
+earlier versions, see the history documents:
+
+<blockquote>
+<a href="History7.htm">History of Ghostscript versions 7.n</a><br>
+<a href="History6.htm">History of Ghostscript versions 6.n</a><br>
+<a href="History5.htm">History of Ghostscript versions 5.n</a><br>
+<a href="History4.htm">History of Ghostscript versions 4.n</a><br>
+<a href="History3.htm">History of Ghostscript versions 3.n</a><br>
+<a href="History2.htm">History of Ghostscript versions 2.n</a><br>
+<a href="History1.htm">History of Ghostscript versions 1.n</a>
+</blockquote>
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h3><a name="Version7.07"></a>Version 7.07 (2003-05-17)</h3>
+
+<p>This is the third release of the stable 7.0x series under the GNU
+GPL. It includes an important security update; upgrading is strongly
+recommended.</p>
+
+<h3><a name="7.07_Incompatible_changes"></a>Incompatible changes</h3>
+
+<p>
+No incompatible changes have been recorded for this version. Users of the 6.5x versions of GNU
+Ghostscript will want to check the History for a complete list of changes since that version.
+
+<pre>
+
+</pre>
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 2003 artofcode LLC. All rights
+reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Projects.htm b/Master/xemtex/doc/ghostscript/Projects.htm
new file mode 100644
index 00000000000..3ee7f5cad5f
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Projects.htm
@@ -0,0 +1,629 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Ghostscript projects</title>
+<!-- $Id: Projects.htm,v 1.33.2.11.2.6 2003/05/17 14:39:00 giles Exp $ -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Ghostscript projects seeking developers</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<ul>
+<li><a href="#Platforms">Platforms</a>
+<li><a href="#Driver_architecture">Driver architecture</a>
+<li><a href="#Specific_drivers">Specific drivers</a>
+<li><a href="#Graphics_functionality">Graphics functionality</a>
+<li><a href="#Performance">Performance</a>
+<li><a href="#Other_functionality">Other functionality</a>
+<li><a href="#Other_implementation">Implementation improvements</a>
+</ul>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<p>
+There are many projects that would improve Ghostscript and that we would
+like to do, but for which we don't have enough resources. If you would like
+to take responsibility for any of these projects, please <a
+href="mailto:raph@artofcode.com">contact us</a>. Additional comments on
+implementation approaches or project goals are in <I>italic type like
+this</I>.
+
+<h2><a name="Platforms"></a>Additional platforms</h2>
+
+<h3>DOS, Windows and OS/2 builds using gcc.</h3>
+
+<p>
+We would like Ghostscript to work with the free <b><tt>emx/gcc</tt></b> and
+<b><tt>rsx</tt></b> libraries, to provide an alternative DOS, Windows
+95/98/NT, and OS/2 implementation that requires no proprietary, commercial
+compilers. We think Ghostscript's existing OS/2 makefile already includes
+most of what is needed. If someone is willing to do the work, we will be
+happy to include this in our list of supported platforms and to distribute
+the makefiles.
+
+<h3>Windows driver using Ghostscript as a language monitor.</h3>
+
+<p>
+MS Windows has a "language monitor" capability which would allow Ghostscript
+to be invoked seamlessly to process input files in any language Ghostscript
+could handle (currently PostScript and PDF) and for any printer for which
+Ghostscript had a driver. Doing this properly would require integrating
+Ghostscript with Windows' "Add Printer" dialog, and would also require
+creating a PPD for Ghostscript. <I>Russell Lang's RedMon program provides
+some, but not all, of this capability.</I>
+
+<h3>Netscape browser plug-in.</h3>
+
+<p>
+Currently, Ghostscript can work as a "helper application" for the Netscape
+browser, but not as a plug-in; the latter would integrate it more closely
+with the browser. We aren't sure what doing this would involve; we've also
+heard by rumor that it's already been done.
+
+<h3>Ghostscript as an Active-X COM Object.</h3>
+
+<p>
+In order to integrate Ghostscript into XMetaL and other applications it
+would be convenient for Ghostscript to be distributed as a COM object
+along with the current gswin32.exe, gswin32c.exe and gsdll32.dll files.
+
+<hr>
+
+<h2><a name="Driver_architecture"></a>Driver Architecture</h2>
+
+<h3>Improved multi-threaded rendering support.</h3>
+
+<p>
+Currently, drivers can be written so that converting PostScript to a list of
+graphical objects can run in one thread, and rasterizing the objects can run
+in another thread. However, drivers must be written specially if they are
+going to do this. We would like to change the architecture so that any
+driver can work this way. We would also like to support dual-threaded
+operation for drivers that produce high-level output, such as the PDF
+writer. <I>Doing this would require separating banding from
+the multithreaded logic. Also, currently each thread has its own allocation
+pool: this is unnecessary in the normal case, since Ghostscript now supports
+properly locked access to the C heap, but embedded systems still need to use
+a fixed-size area for the rasterizing thread. With a locked, shared
+allocator, the rasterizing thread could use the full set of band list
+functions; with a fixed-size area and a separate allocator, only a subset is
+available, as is the case now for dual-threaded drivers.
+</I>
+
+<h3>Dynamic run-time loadable devices.</h3>
+
+<p>
+Currently, drivers must be linked into the executable. We would like to be
+able to load drivers dynamically. Doing this requires defining a
+platform-independent API (presumably extending the current gp_* APIs) that
+would work at least on GNU/Linux, vendor Unix, MS Windows, and Macintosh. Unix
+systems should include Sun, HP, AIX, IRIX, DEC; Linux ELF and a.out formats
+should both be supported. <I>Consider the Netscape plug-in
+architecture.</I>
+
+<h3>Moving 'setpagedevice' into C.</h3>
+
+<p>
+The PostScript 'setpagedevice' function implements matching of media and
+page size requests to available media, page orientation, and paper handling
+(duplex, etc.) Currently it is implemented in PostScript code, which means
+it is not available for use with other input languages. (It is available
+for PDF, which Ghostscript implements on top of PostScript, but not for the
+not-yet-freely-available PCL interpreters that use the Ghostscript library,
+or for possible future SVG or similar interpreters). We would like to move
+this function into C. <I>The device driver will be required to
+send page parameters up to PostScript to be stored in a resource. To be
+included in this project are handling policy implementations in the device
+drivers. DeferredMediaSelection should also be implemented.</I>
+
+<h3>Adding 'tee' for output to multiple devices.</h3>
+
+<p>
+In a few cases, it would be desirable to provide a 'tee' capability for
+drivers: specifically, for generating small, low-resolution 'thumbnail'
+images concurrently with other output. <I>Probably the
+simplest way to do this is to generate a band list and then process it
+twice. This is not completely trivial, since the band list does include
+device resolution information and scaling would be required for some
+constructs.</I>
+
+<h3><b><tt>OutputDevice</tt></b> resource category</h3>
+
+<p>
+Each available output device should provide an instance of the
+<b><tt>OutputDevice</tt></b> resource category, which gives the available
+page sizes, resolutions, media classes, process color models, and other
+information about the device. <I>This would replace the current
+non-standard use of a 4-element <b><tt>PageSize</tt></b> in the
+<b><tt>InputAttributes</tt></b> entry of the page device dictionary.</I>
+
+<h3>Removing the limit on the length of OutputFile.</h3>
+
+<p>
+Currently, the maximum length of the <b><tt>OutputFile</tt></b> parameter is
+a compile-time constant, <b><tt>gp_file_name_sizeof</tt></b>. This is
+appropriate for ordinary file names, since this constant is the platform's
+limit on the length of a file name. However, if <b><tt>OutputFile</tt></b>
+is a pipe, the length should not be limited in this way. <I>This is
+probably a small project: it requires allocating the file name dynamically,
+and freeing it in the finalization routine that gets called when a driver
+instance is freed.</I>.
+
+<h2><a name="Specific_drivers"></a>Specific drivers</h2>
+
+<h3>PrintGear and PPA output drivers.</h3>
+
+<p>
+We would like to provide (Adobe) PrintGear and (H-P) PPA output drivers for
+Ghostscript, but the specifications for these protocols are not published.
+If you can provide them to us without violating any agreements, please let
+us know. (Some work has already been done on reverse-engineering these
+protocols, but we don't have references to it.)
+
+<h3>Improve 'pswrite' up to the level of 'pdfwrite'.</h3>
+
+<p>
+We would like to improve the high-level PostScript-writing
+<b><tt>pswrite</tt></b> driver to bring it up to parity with the PDF-writing
+driver (including the many improvements in the latter being implemented in
+Ghostscript 7.xx). Specifically, we want it to write text as text rather
+than bitmaps, and to consistently write images in their original high-level
+form. <I>We have already started to factor out code that
+should be common to these two drivers, specifically for writing embedded
+fonts and compressed data streams.</I>
+
+<p>
+There is one small part of this project that would be especially valuable
+and could be done independently (although it might have to be partly or
+entirely redone later): compressing images. Currently the driver only
+compresses character bitmaps, and doesn't compress other images at all.
+<I>It should use the <b><tt>CCITTFaxEncode</tt></b> filter for 1-bit-deep
+images, and plane-separated <b><tt>LZWEncode</tt></b> compression for color
+images, using the <b><tt>miGIF</tt></b> algorithms that are believed to be
+free of the Welch patent for the latter. When generating LL3 PS, the
+<b><tt>Flate</tt></b> compression will work better than miGIF. It may be
+worth trying several methods on each image and use the one that works best.</I>
+
+<h3>High level graphics and text for PCL 5 and PCL XL drivers.</h3>
+
+<p>
+Currently, the PCL 5 drivers produce only bitmaps; the PCL XL driver
+produces high-level graphics and sometimes high-level images, but low-level
+text. We would like to improve these drivers to produce higher-level,
+smaller output. <I>This was a very low-priority project; it has become more
+important now that H-P's laser printers are shipping with less memory.</I>
+
+<h3>Improved high level GDI driver for Windows.</h3>
+
+<p>
+We would like a "GDI driver" for MS Windows that would implement more
+higher-level constructs (specifically for text). <I> The
+<b><tt>mswin</tt></b> and <b><tt>mswinprn</tt></b> drivers both do some of
+this. Some of the the 'xfont' support code for MS Windows should be useful.
+We were frustrated in the past because the GDI calls for getting font sizes
+and metrics consistently returned incorrect information and provided no way
+to get the correct information; perhaps this has been fixed in 32-bit
+Windows. We believe that H-P, Russell Lang, and perhaps others are working
+in this area, but we can always use more help.</I>
+
+<h3>PDF thumbnail generation.</h3>
+
+<p>
+The PDF writer needs to be able to generate thumbnails (small previews). We
+might do this through the 'tee' capability mentioned above. However, we
+currently prefer the idea of implementing a completely separate program to
+add thumbnails to an arbitrary, existing PDF file: this would allow
+Ghostscript to add thumbnails to PDF files generated by other programs.
+<I>Much of the code needed to do this has already been written
+for Ghostscript's PDF linearizer: see
+<b><tt>lib/pdfwrite.ps</tt></b>. A user has implemented this as well,
+using a separate program that calls Ghostscript: see
+<a href="http://www.uni-giessen.de/~g029/eurotex99/oberdiek/">
+http://www.uni-giessen.de/~g029/eurotex99/oberdiek/</a>.
+</I>
+
+<h3>Consolidate inkjet drivers into a single family.</h3>
+
+<p>
+In addition to factoring out the error diffusion code as described below, we
+would like to see another attempt at reducing the enormous volume of code
+for color inkjet drivers. There are three sets of drivers (gdevcdj.c,
+gdevstc.c, gdevupd.c) with much overlapping functionality. The latter two
+driver families make good attempts at factoring out things like head
+geometry and canned control strings, but we think this problem deserves
+another pass, especially in the hope of consolidating these drivers into a
+single family.
+
+<h3>Download glyph bitmaps (with glyph decaching notification).</h3>
+
+<p>
+See below under "Notification for glyph decaching."
+
+<h3>Preserve compression when writing PDF images.</h3>
+
+<p>
+Currently, all images are decompressed by the interpreter before being
+passed to the graphics library; the PDF writer may then compress them again.
+Ordinarily, this only slows things down a little, but in the case of
+DCT-encoded images that are being DCT-encoded in the output, image
+degradation may occur. Ideally, the implementation should be smart enough
+to not decode and re-encode the image. However, making this work properly
+is difficult. <I>This would probably involve extending the library APIs for
+images so that they could pass a stream, possibly including filters, instead
+of the (fully decoded) data rows.</I>
+
+<hr>
+
+<h2><a name="Graphics_functionality"></a>Graphics functionality</h2>
+
+<h3>Support for 64-bit colors on 64-bit platforms.</h3>
+
+<p>
+Currently, the library supports a maximum of 32 bits of data per pixel; we
+would like to raise this limit to 64 bits on systems where the 'long' data
+type is 64 bits wide. <I>The <b><tt>gx_color_index</tt></b>
+type is already defined as 'long', but there are many places where the type
+<b><tt>bits32</tt></b> is used for pixel values; there is a 32-bit
+stored-image "device", but there is no 64-bit device; a few algorithms and
+tables have knowledge of the 32-bit width built into them, only because the
+C preprocessor doesn't have any kind of loop or repetition
+capability.</I>
+
+<h3>In-RIP trapping.</h3>
+
+<p>
+The PostScript specification includes an option for the interpreter to
+implement trapping (adjustments of object boundaries to prevent visual
+anomalies caused by slight misregistration of different ink layers): we
+would like to implement this. <I>This is a complex and
+difficult area; even many Adobe RIPs don't do it.</I>
+
+<h3>Hook FreeType TrueType library into graphics library.</h3>
+
+<p>
+We would like to provide an option for good integration of the FreeType font
+rasterizer into Ghostscript, since the FreeType code is better than
+Ghostscript's current rasterizers. We understand that some users in Japan
+have done this already, but we don't know if this is a good starting point
+(the only documentation is in Japanese). <I>Their work uses
+Ghostscript's 'xfont' interface, which is how Ghostscript interfaces to
+platform facilities such as the X and MS Windows font capabilities. This is
+a device-level interface and not the best place to do this: we would rather
+have the graphics library interface to FreeType directly.</I>
+
+<h3>ICC profile support for output.</h3>
+
+<p>
+Ghostscript 7.00 and later supports ICCBased color spaces of PDF
+using the icclib package from
+<a href="http://web.access.net.au/argyll/color.html ">
+http://web.access.net.au/argyll/color.html</a>
+but there is no facility to use ICC output (printer) profiles that
+may be embedded in the PDF. Also it would be useful for PostScript
+to be able to directly use a specific Intent from ICC profile to
+convert output colors (as CRD's are now used).
+<I>The primary difficulty is that the graphics library and PostScript
+always use CIE XYZ as the connection space, but ICC profiles may
+use CIELAB as the connection space, requiring conversion for use
+with the graphics library. </I>
+
+<h3>Making halftones into "objects" and adding new types.</h3>
+
+<p>
+Currently, knowledge of the specific data formats and algorithms for
+halftoning permeates too many places in the library. We would like
+halftoning to be more "object oriented" (using virtual procedures) so that
+we could support other halftoning methods such as direct use of threshold
+arrays, or the double-rectangle approach added in newer PostScript versions.
+<I>Threshold arrays take much less space than the current
+representation, generally at the expense of longer rendering time for
+black-and-white images; double-rectangle representation would give us a
+better implementation of AccurateScreens. We might want store both
+threshold arrays and the current representation.</I>
+
+<h3>Factor out error diffusion routines, integrate ETS.</h3>
+
+<p>
+Currently, several different inkjet drivers implement their own, very
+similar but slightly differing error diffusion methods. This has caused
+severe code bloat as well as tempting future driver writers to contribute to
+it further. We want to factor out error diffusion into a common set of
+facilities that drivers can use. <I>We would like to design
+these facilities so that they can easily interface to the Even-Toned
+Screening algorithms from artofcode (Raph Levien), to the extent that these
+will be Open Source.</I>
+
+<h3>Improve, or generalize, linearization for stochastic threshold
+data.</h3>
+
+<p>
+The Ghostscript distribution includes a stochastic threshold array. This
+array has some gamma correction built into it, which works well for some
+output devices and not for others. We would like to provide a version of
+this array without (or with less) gamma correction. <I>We have
+original data available from which this could be done fairly easily.</I>
+
+<h3>Change sampled functions to use new interpreted functions.</h3>
+
+<p>
+The PostScript language defines many functions relevant to graphics
+rendering as being implemented by arbitrary PostScript procedures: transfer
+(gamma correction), black generation, undercolor removal, several stages of
+CIE color space and rendering, and color mapping for Separation and DeviceN
+spaces. Since the graphics library can't call PostScript procedures,
+Ghostscript currently samples these procedures at a fixed number of points
+and interpolates linearly between the samples. As of Ghostscript 6.20, the
+library can interpret a restricted subset of PostScript procedures directly
+(basically those that only use arithmetic and comparisons: no loops,
+sub-procedures, or data structures). Changing the rendering functions to
+use this approach when possible would greatly improve output quality when
+the functions are very non-linear (which we have actually seen in practice).
+<I>This should only be done if the function is, in fact,
+severely non-linear, since interpreting the function definition will almost
+always be much slower than interpolating in the table.</I>
+
+<h3>Add optional cubic interpolation to RenderTable and other table
+lookup.</h3>
+
+<p>
+Currently, if a CIE rendering dictionary uses a lookup table for the final
+step, Ghostscript always interpolates linearly between the entries. Cubic
+interpolation should be supported as an option. A cubic interpolation
+option is also needed for general table-lookup Functions.
+
+<h3>Add better (SVG-like) alpha channel and compositing to library.</h3>
+
+<p>
+Ghostscript has partial support for alpha channel and for alpha and RasterOp
+compositing. There is some architectural support for general compositing,
+but it postdates the RasterOp implementation, and most of the RasterOp code
+doesn't use it. We expect that the more extensive compositing and alpha
+capabilities of SVG will find their way into PDF (and probably PostScript as
+well) in the course of 2000 and 2001, and we will need to implement them.
+
+<hr>
+
+<h2><a name="Performance"></a>Performance</h2>
+
+<h3>Change band list logic to defer halftoning until rendering.</h3>
+
+<p>
+Currently, when Ghostscript uses a band list, it does halftoning before
+banding. It should do halftoning after banding: this produces smaller band
+lists and shifts more work to the rasterizer (which is good because the
+rasterizer can be multi-threaded internally for higher performance on
+multiprocessors: see the next topic.)
+
+<h3>Reduce redundant data for smoothed banded images.</h3>
+
+<p>
+When smoothed ("interpolated") images are written in the band list, extra
+rows must be written above and below each band in order to provide the data
+for interpolation. Currently, the number of such rows is computed very
+conservatively; instead, the final interpolation algorithm should be
+consulted to provide the correct value. <i>This is a small task.</i>
+
+<h3>Multi-threaded rasterizing</h3>
+
+<p>
+For high-resolution devices, rasterization dominates execution time. On
+multiprocessor systems, Ghostscript can do tasks in parallel:
+
+<ul>
+
+<li>Rasterize multiple bands simultaneously;
+
+<li>Rasterize multiple color planes of a single band simultaneously (if a
+planar representation is being used);
+
+<li>For some computation-intensive tasks like smoothing images or filling
+large regions, partition the task (possibly buffering more data to allow
+larger-grain partitioning) and execute several partitions simultaneously.
+
+</ul>
+
+<p>
+We would want these facilities implemented so that no conditional
+compilation was involved: on uniprocessor systems, the locking API would
+simply have a vacuous implementation.
+
+<h3>Notification for glyph decaching.</h3>
+
+<p>
+Currently, drivers can't do a very good job of downloading rendered
+character bitmaps to the device they manage, because they can't find out
+when a bitmap is being deleted from Ghostscript's cache and therefore will
+never be referenced again. Here is a sketch of how we would add this
+capability to the graphics library:
+
+<ul>
+
+<li>The driver would implement the <b><tt>text_begin</tt></b> call, simply
+to get access to a <b><tt>gs_imager_state</tt></b> that references the
+rendered character cache. (The driver could always simply call the default
+implementation of <b><tt>text_begin</tt></b>.)
+
+<li>In the <b><tt>text_begin</tt></b> procedure, the driver would call
+
+<blockquote><pre>
+gs_glyph_decache_register(imager_state, notify_proc, proc_data)
+</pre></blockquote>
+
+<p>
+where <b><tt>proc_data</tt></b> was, or pointed to a structure that
+included, a pointer to the driver.
+
+<li><b><tt>gs_glyph_decache_register</tt></b> would use the general
+notification mechanism defined in <b><tt>gsnotify.h</tt></b> to call
+
+<blockquote><pre>
+notify_proc(proc_data, pchar_data)
+</pre></blockquote>
+
+<p>
+whenever a bitmap was removed from the character cache.
+<b><tt>pchar_data</tt></b> would point to some identification of the
+character; perhaps just the bitmap ID, but possibly a
+<b><tt>gx_cached_bits_common</tt></b> or even a <b><tt>cached_char</tt></b>.
+
+<li>The <b><tt>char_cache</tt></b> structure would be need an additional
+member, a <b><tt>gs_notify_list_t</tt></b>. It would also need to add
+finalization so that when it was freed, it would notify and unregister all
+clients, using <b><tt>gs_notify_all(list, NULL)</tt></b> and then
+<b><tt>gs_notify_release</tt></b>.
+
+</ul>
+
+<p>
+<I>This facility was requested by the Display Ghostscript project, but it
+could also be used to improve the output of the PCL XL driver and possibly
+the X and PCL5 drivers.</I>
+
+<hr>
+
+<h2><a name="Other_functionality"></a>Other functionality</h2>
+
+<h3>OpenStep (Display PostScript + NeXT) extensions to Ghostscript.</h3>
+
+<p>
+There is a project to create a GNU implementation of the OPENStep API, which
+involves extending Ghostscript to provide the full functionality of Adobe's
+Display PostScript system with some of the NeXT extensions. For more
+information, please contact Net-Community &lt;<a
+href="mailto:scottc@net-community.com">scottc@net-community.com</a>&gt;.
+
+<h3>Job Server implementation.</h3>
+
+<p>
+For full Adobe PostScript compatibility, Ghostscript needs a real "job
+server" to encapsulate the execution of PostScript files.
+<I>See the section on "Job Execution Environment" in the PostScript
+Language Reference Manual for details.</I>
+
+<h3>SVG (XML Structured Vector Graphics) interpreter.</h3>
+
+<p>
+Ghostscript could be adapted with some work to read SVG. This would be an
+interesting and challenging project because SVG's graphics model would
+require extending the library (see above). <I>If SVG turns out to be an
+important standard, it is important that there be a good free implementation
+of it.</I>
+
+<h3><b><tt>%font%</tt></b> and other IODevices.</h3>
+
+<p>
+Currently, the <b><tt>%font%</tt></b> IODevice is not implemented. We would
+like to see this implemented using a general framework for implementing
+IODevices (%xxxx%) entirely in PostScript, in an "object oriented" manner
+very similiar to the way Resource categories are implemented. An IODevice
+would be implemented as a dictionary with the following keys, whose values
+would be procedures that implemented the corresponding operation:
+
+<blockquote><pre>
+/File
+/DeleteFile
+/RenameFile
+/Status
+/FileNameForAll
+/GetDevParams
+/PutDevParams
+</pre></blockquote>
+
+<p>
+There would only be global IODevices, no local ones; the dictionary keeping
+track of them would be stored in global VM.
+
+<p>
+<I>This is an obscure feature that matters only because some PostScript code
+uses <b><tt>filenameforall</tt></b> with this IODevice, rather than
+<b><tt>filenameforall</tt></b> with the <b><tt>/Font</tt></b> Resource
+category, to enumerate available fonts.</I>
+
+<h3>Repairing damaged or EOL-converted PDF files.</h3>
+
+<p>
+Adobe Acrobat Reader can scan a PDF file that has had its end-of-lines
+converted by careless users transferring the file across operating systems
+as text rather than binary across, and reconstruct the cross-reference table
+which the PDF interpreter requires. This only works if the file has no
+binary data in it, which with PDF 1.3 is rarely the case. However, users
+occasionally receive PDF files that have been damaged in this way, and it
+might be useful to have a program that can repair them. <I>We think this
+should probably be done as a separate program, possibly in PostScript,
+similar to Ghostscript's PDF linearizer.</I>
+
+<h2><a name="Other_implementation"></a>Implementation improvements</h2>
+
+<h3>Fully re-entrant code.</h3>
+
+<p>
+Currently, neither the PostScript interpreter nor the graphics library is
+fully re-entrant (no writable globals). Making them fully re-entrant would
+make Ghostscript usable in multi-threaded environments, and more easily
+usable in embedded environments. Note that this is necessary, but far from
+sufficient, for Ghostscript to allow simultaneous execution of a single
+Ghostscript interpreter instance by multiple threads: that is probably
+permanently out of the question. <I>Almost all drivers, including all of
+the drivers in devs.mak which are maintained as part of the main Ghostscript
+code, are already fully re-entrant; making the remaining ones re-entrant
+should really be up to the driver author.</I>
+
+<h3>Ghostscript has no %ram% device.</h3>
+
+The %ram% device is documented in PS Supplement 3010 and 3011 dated August 30, 1999.
+This is probably not a major impediment to portability, but it would be handy.
+<p><I>
+On Unix, the suggested implementation would be to create a subdirectory
+of the temporary directory (usually /tmp), with the name chosen and the
+directory created in such a way as to avoid /tmp races and similar
+problems. Ghostscript should delete the subdirectory when it exits.
+</I>
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 2000 Aladdin Enterprises. All rights
+reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Ps-style.htm b/Master/xemtex/doc/ghostscript/Ps-style.htm
new file mode 100644
index 00000000000..5cf2e643113
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Ps-style.htm
@@ -0,0 +1,514 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Ghostscript PostScript coding guidelines</title>
+<!-- $Id: Ps-style.htm,v 1.13.2.11.2.5 2003/05/17 14:39:00 giles Exp $ -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Ghostscript PostScript coding guidelines</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Summary">Summary of the coding guidelines</a>
+<li><a href="#Introduction">Introduction</a>
+<li><a href="#PS_features">Use of PostScript language features</a>
+<ul>
+<li><a href="#Restrictions">Restrictions</a>
+<li><a href="#Protection">Protection</a>
+<li><a href="#Standard_constructions">Standard constructions</a>
+</ul>
+<li><a href="#File_structuring">File structuring</a>
+<li><a href="#Commenting">Commenting</a>
+<li><a href="#Formatting">Formatting</a>
+<ul>
+<li><a href="#Indentation">Indentation</a>
+<li><a href="#Spaces">Spaces</a>
+</ul>
+<li><a href="#Naming">Naming</a>
+<li><a href="#Miscellany">Miscellany</a>
+<ul>
+<li><a href="#Non_standard_operators">Some useful non-standard operators</a>
+<li><a href="#Useful_procedures">Some useful procedures</a>
+<li><a href="#Other">Other</a>
+</ul>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>
+For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="Summary"></a>Summary of the coding guidelines</h2>
+
+<ul>
+
+<li>Don't store into literals.
+
+<li>Use <b><tt>loop</tt></b> to create a block with multiple exits.
+
+<li>Use a dictionary or an array for multi-way switches.
+
+<li>Start every file with a copyright notice, the file name, and a one-line
+summary.
+
+<li>Comment every procedure with the arguments and result, and with the
+function of the procedure unless it's obvious.
+
+<li>Comment the stack contents ad lib, and particularly at the beginning of
+every loop body.
+
+<li>Indent every 2 spaces.
+
+<li>Always put { at the end of a line, and } at the beginning of a line,
+unless the contents are very short.
+
+<li>Always put spaces between adjacent tokens.
+
+<li>Use only lower-case letters and digits for names, or Vienna style names,
+except for an initial "." for names only used within a single file.
+
+<li>Don't allocate objects in heavily used code.
+
+<li>Consider factoring out code into a procedure if it is used more than
+once.
+
+</ul>
+
+<hr>
+
+<h2><a name="Introduction"></a>Introduction</h2>
+
+<p>
+The many rules that Ghostscript's code follows almost everywhere are meant
+to produce code that is easy to read. It's important to observe them as
+much as possible in order to maintain a consistent style, but if you find a
+rule getting in your way or producing ugly-looking results once in a while,
+it's OK to break it.
+
+<hr>
+
+<h2><a name="PS_features"></a>Use of PostScript language features</h2>
+
+<h3><a name="Restrictions"></a>Restrictions</h3>
+
+<p>
+If you need to store a value temporarily, don't write into a literal in the
+code, as in this fragment to show a character given the character code:
+
+<blockquote><pre>
+( ) dup 0 4 -1 roll put show
+</pre></blockquote>
+
+<p>
+Instead, allocate storage for it:
+
+<blockquote><pre>
+1 string dup 0 4 -1 roll put show
+</pre></blockquote>
+
+<h3><a name="Protection"></a>Protection</h3>
+
+<p>
+If an object is never supposed to change, use <b><tt>readonly</tt></b> to
+make it read-only. This applies especially to permanently allocated objects
+such as constant strings or dictionaries.
+
+<p>
+During initialization, and occasionally afterwards, it may be necessary to
+store into a read-only dictionary, or to store a pointer to a dictionary in
+local VM into a dictionary in global VM. The operators
+<b><tt>.forceput</tt></b> and <b><tt>.forceundef</tt></b> are available for
+this purpose. To make these operators inaccessible to ordinary programs,
+they are removed from <b><tt>systemdict</tt></b> at the end of
+initialization: system code that uses them should always use
+<b><tt>bind</tt></b> and <b><tt>odef</tt></b> (or
+<b><tt>executeonly</tt></b>) to make uses of them inaccessible as well.
+
+<h3><a name="Standard_constructions"></a>Standard constructions</h3>
+
+<h4>Multi-way conditionals</h4>
+
+<p>
+If you write a block of code with more than about 3 exit points, the usual
+way to do it would be like this:
+
+<blockquote><pre>
+{
+ ... {
+ ...1
+ } {
+ ... {
+ ...2
+ } {
+ ... {
+ ...3
+ } {
+ ...4
+ } ifelse
+ } ifelse
+ } ifelse
+}
+</pre></blockquote>
+
+<p>
+However, this causes the 4 logically somewhat parallel code blocks to be
+indented differently, and as the indentation increases, it becomes harder to
+see the structure visually. As an alternative, you can do it this way:
+
+<blockquote><pre>
+{ % The loop doesn't actually loop: it just provides a common exit.
+ ... {
+ ...1
+ exit
+ } if
+ ... {
+ ...2
+ exit
+ } if
+ ... {
+ ...3
+ exit
+ } if
+ ...4
+ exit
+} loop
+</pre></blockquote>
+
+<p>
+Don't forget the final exit, to prevent the loop from actually looping.
+
+<h4>Switches</h4>
+
+<p>
+Use a dictionary or an array of procedures to implement a 'switch', rather
+than a series of conditionals, if there are more than about 3 cases. For
+example, rather than:
+
+<blockquote><pre>
+dup /a eq {
+ pop ...a
+} {
+ dup /b eq {
+ pop ...b
+ } {
+ dup /c eq {
+ pop ...c
+ } {
+ ...x
+ } ifelse
+ } ifelse
+} ifelse
+</pre></blockquote>
+
+<p>
+(or using the loop/exit construct suggested above), consider:
+
+<blockquote><pre>
+/xyzdict mark
+ /a {...a} bind
+ /b {...b} bind
+ /c {...c} bind
+.dicttomark readonly def
+...
+//xyzdict 1 index .knownget {
+ exch pop exec
+} {
+ ...x
+} ifelse
+</pre></blockquote>
+
+<hr>
+
+<h2><a name="File_structuring"></a>File structuring</h2>
+
+<p>
+Every code file should start with comments containing
+
+<ol>
+<li>a copyright notice;
+<li>the name of the file in the form of an RCS Id:
+
+<blockquote><pre>
+% Id$: filename.ps $
+</pre></blockquote>
+
+<li>a very brief summary (preferably only one line) of what the file
+contains.
+</ol>
+
+<p>
+If you create a file by copying the beginning of another file, be sure to
+update the copyright year and change the file name.
+
+<hr>
+
+<h2><a name="Commenting"></a>Commenting</h2>
+
+<p>
+If a file has well-defined functional sections, put a comment at the
+beginning of each section to describe its purpose or function.
+
+<p>
+Put a comment before every procedure to describe what the procedure does,
+unless it's obvious or the procedure's function is defined by the PLRM. In
+case of doubt, don't assume it's obvious. If the procedure may execute a
+deliberate 'stop' or 'exit' not enclosed in 'stopped' or a loop
+respectively, that should be mentioned. However, information about the
+arguments and results should go in the argument and result comment
+(described just below) if possible, not the functional comment.
+
+<p>
+Put a comment on every procedure to describe the arguments and results:
+
+<blockquote><pre>
+/hypot { % &lt;num1&gt; &lt;num2&gt; hypot &lt;real&gt;
+ dup mul exch dup mul add sqrt
+} def
+</pre></blockquote>
+
+<p>
+There is another commenting style that some people prefer to the above:
+
+<blockquote><pre>
+/hypot { % num1 num2 --> realnum
+ dup mul exch dup mul add sqrt
+} def
+</pre></blockquote>
+
+<p>
+We have adopted the first style for consistency with Adobe's documentation,
+but we recognize that there are technical arguments for and against both
+styles, and might consider switching some time in the future. If you have
+strong feelings either way, please make your opinion known to
+<b><tt>gs-devel@ghostscript.com</tt></b>.
+
+<p>
+Put comments describing the stack contents wherever you think they will be
+helpful; put such a comment at the beginning of every loop body unless you
+have a good reason not to.
+
+<p>
+When you change a piece of code, do <em>not</em> include a comment with your
+name or initials. Also, do <em>not</em> retain the old code in a comment,
+unless you consider it essential to explain something about the new code; in
+that case, retain as little as possible. (CVS logs do both of these things
+better than manual editing.) However, if you make major changes in a
+procedure or a file, you may put your initials, the date, and a brief
+comment at the head of the procedure or file respectively.
+
+<hr>
+
+<h2><a name="Formatting"></a>Formatting</h2>
+
+<h3><a name="Indentation"></a>Indentation</h3>
+
+<p>
+Indent 2 spaces per indentation level. You may use tabs at the left margin
+for indentation, with 1 tab = 8 spaces, but you should not use tabs anywhere
+else, except to place comments.
+
+<p>
+Indent { } constructs like this:
+
+<blockquote><pre>
+... {
+ ...
+} {
+ ...
+} ...
+</pre></blockquote>
+
+<p>
+If the body of a conditional or loop is no more than about 20 characters,
+you can put the entire construct on a single line if you want:
+
+<blockquote><pre>
+... { ... } if
+</pre></blockquote>
+
+rather than
+
+<blockquote><pre>
+... {
+ ...
+} if
+</pre></blockquote>
+
+<p>
+There is another indentation style that many people prefer to the above:
+
+<blockquote><pre>
+...
+{ ...
+}
+{ ...
+} ...
+</pre></blockquote>
+
+<p>
+We have adopted the first style for consistency with our C code, but we
+recognize that there are technical arguments for and against both styles,
+and might consider switching some time in the future. If you have strong
+feelings either way, please make your opinion known to
+<b><tt>gs-devel@ghostscript.com</tt></b>.
+
+<h3><a name="Spaces"></a>Spaces</h3>
+
+<p>
+Always put spaces between two adjacent tokens, even if this isn't strictly
+required. E.g.,
+
+<blockquote><pre>
+/Halftone /Category findresource
+</pre></blockquote>
+
+<p>
+not
+
+<blockquote><pre>
+/Halftone/Category findresource
+</pre></blockquote>
+
+<hr>
+
+<h2><a name="Naming"></a>Naming</h2>
+
+<p>
+All names should consist only of letters and digits, possibly with an
+initial ".", except for names drawn from the PostScript or PDF reference
+manual, which must be capitalized as in the manual. In general, an initial
+"." should be used for those and only those names that are not defined in a
+private dictionary but that are meant to be used only in the file where they
+are defined.
+
+<p>
+For edits to existing code, names made up of multiple words should not use
+any punctuation, or capitalization, to separate the words, again except for
+names that must match a specification. For new code, you may use this
+convention, or you may use the "Vienna" convention of capitalizing the first
+letter of words, e.g., <b><tt>readSubrs</tt></b> rather than
+<b><tt>readsubrs</tt></b>. If you use the Vienna convention, function names
+should start with an upper case letter, variable names with a lower case
+letter. Using the first letter of a variable name to indicate the
+variable's type is optional, but if you do it, you should follow existing
+codified usage (****** WE NEED A REFERENCE FOR THIS ******).
+
+<hr>
+
+<h2><a name="Miscellany"></a>Miscellany</h2>
+
+<h3><a name="Non_standard_operators"></a>Some useful non-standard
+operators</h3>
+
+<dl>
+
+<dt><b><tt>&lt;obj1&gt; &lt;obj2&gt; ... &lt;objn&gt; &lt;n&gt; .execn ...</tt></b>
+<dd>This executes <b><tt>obj1</tt></b> through <b><tt>objn</tt></b> in that
+order, essentially equivalent to
+
+<blockquote><pre>
+&lt;obj1&gt; &lt;obj2&gt; ... &lt;objn&gt; &lt;n&gt; array astore {exec} forall
+</pre></blockquote>
+
+<p>
+except that it doesn't actually create the array.
+
+<dt><b><tt>&lt;dict&gt; &lt;key&gt; <b>.knownget</b> &lt;value&gt; true</tt></b>
+<dt><b><tt>&lt;dict&gt; &lt;key&gt; <b>.knownget</b> false</tt></b>
+
+<dd>This combines <b><tt>known</tt></b> and <b><tt>get</tt></b> in the
+obvious way.
+
+<dt><b><tt>&lt;name&gt; &lt;proc&gt; odef -</tt></b>
+
+<dd>This defines <b><tt>name</tt></b> as a "pseudo-operator". The value of
+<b><tt>name</tt></b> will be executable, will have type
+<b><tt>operatortype</tt></b>, and will be executed if it appears directly in
+the body of a procedure (like an operator, unlike a procedure), but what
+will actually be executed will be <b><tt>proc</tt></b>. In addition, if the
+execution of <b><tt>proc</tt></b> is ended prematurely (by
+<b><tt>stop</tt></b>, including the <b><tt>stop</tt></b> that is normally
+executed when an error occurs, or <b><tt>exit</tt></b>) and the operand and
+dictionary stacks are at least as deep as they were when the "operator" was
+invoked, the stacks will be cut back to their original depths before the
+error is processed. Thus, if pseudo-operator procedures are careful not to
+remove any of their operands until they reach a point in execution beyond
+which they cannot possibly cause an error, they will behave just like
+operators in that the stacks will appear to be unchanged if an error occurs.
+
+</dl>
+
+<h3><a name="Useful_procedures"></a>Some useful procedures</h3>
+
+<dl>
+
+<dt><b><tt>&lt;object&gt; &lt;errorname&gt; signalerror -</tt></b>
+
+<dd>Signal an error with the given name and the given "current object".
+This does exactly what the interpreter does when an error occurs.
+
+</dl>
+
+<h3><a name="Other"></a>Other</h3>
+
+<p>
+If you can avoid it, don't allocate objects (strings, arrays, dictionaries,
+gstates, etc.) in commonly used operators or procedures: these will need to
+be garbage collected later, slowing down execution. Instead, keep values on
+the stack, if you can. The <b><tt>.execn</tt></b> operator discussed above
+may be helpful in doing this.
+
+<p>
+If you find yourself writing the same stretch of code (more than about half
+a dozen tokens) more than once, ask yourself whether it performs a function
+that could be made into a procedure.
+
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 2000 Aladdin Enterprises. All rights
+reserved.</small>
+
+<small>
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+</small>
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Ps2epsi.htm b/Master/xemtex/doc/ghostscript/Ps2epsi.htm
new file mode 100644
index 00000000000..3656b722a08
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Ps2epsi.htm
@@ -0,0 +1,154 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Convert PostScript to Encapsulated PostScript Interchange format</title>
+<!-- $Id: Ps2epsi.htm,v 1.15.2.12.2.6 2003/05/17 14:39:00 giles Exp $ -->
+<!-- Originally: ps2epsi.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Convert PostScript to Encapsulated PostScript Interchange
+format</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Overview">Overview</a>
+<li><a href="#Usage">Usage</a>
+<ul>
+<li><a href="#Unix_usage">Unix</a>
+</ul>
+<li><a href="#Limitations">Limitations</a>
+<li><a href="#Files">Files</a>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>
+The information in this document was contributed by George Cameron
+&lt;<a href="mailto:george@bio-medical-physics.aberdeen.ac.uk">george@bio-medical-physics.aberdeen.ac.uk</a>&gt;;
+please direct to him any questions about it. Because the software
+described here is no longer being maintained, this document may be
+obsolete, or inconsistent with <b><tt>ps2epsi.1</tt></b>.
+
+<p>
+For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="Overview"></a>Overview</h2>
+
+<p>
+<b><tt>ps2epsi</tt></b> is a utility based on Ghostscript, which takes as
+input a PostScript file and generates as output a new file which conforms
+to Adobe's Encapsulated PostScript Interchange (EPSI) format, a special
+form of
+<a href="http://partners.adobe.com/asn/developer/pdfs/tn/5002.EPSF_Spec.pdf"
+class="offsite">Encapsulated PostScript</a>
+(EPS) which adds to the beginning of the file, as PostScript comments, a
+low-resolution monochrome bitmap image of the final displayed page.
+Programs which understand EPSI can use this bitmap as a preview on screen
+of the full PostScript page. The displayed quality is often not very good,
+but the final printed version uses the "real" PostScript, and thus has the
+normal full PostScript quality.
+
+<hr>
+
+<h2><a name="Usage"></a>Usage</h2>
+
+<h3><a name="Unix_usage"></a>Unix</h3>
+
+<p>
+Using the supplied shell script <b><tt>ps2epsi</tt></b>, the command is
+
+<blockquote>
+<b><tt>ps2epsi</tt></b> <b><em>infile.ps</em></b> <b><em>[outfile.epsi]</em></b>
+</blockquote>
+
+<p>
+where <b><em>infile.ps</em></b> is the input file and
+<b><em>outfile.epsi</em></b> is the output EPSI file to be created. If the
+output filename is omitted, <b><tt>ps2epsi</tt></b> generates one from the
+input filename; and any standard extension (<b><tt>.ps</tt></b>,
+<b><tt>.cps</tt></b>, <b><tt>.eps</tt></b> or <b><tt>.epsf</tt></b>) of the
+input file is replaced in the output file with the extension
+<b><tt>.epsi</tt></b>.
+
+<hr>
+
+<h2><a name="Limitations"></a>Limitations</h2>
+
+<p>
+Not all PostScript files can be encapsulated, because there are
+restrictions in what is permitted in a PostScript file for it to be
+properly encapsulated. <b><tt>ps2epsi</tt></b> does a little extra work to
+try to help encapsulation, and it automatically calculates the bounding box
+required for all encapsulated PostScript files, so most of the time it does
+a pretty good job. There are certain to be cases, however, when
+encapsulation fails because of the nature of the original PostScript file.
+
+<hr>
+
+<h2><a name="Files"></a>Files</h2>
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1"><b><tt>ps2epsi</tt></b> files</font><hr>
+<tr valign=bottom>
+ <th align=left>File
+ <td>&nbsp;&nbsp;&nbsp;
+ <th align=left>Contents
+<tr> <td colspan=3><hr>
+<tr valign=top> <td><b><tt>Ps2epsi.htm</tt></b>
+ <td>&nbsp;
+ <td>This document
+<tr valign=top> <td><b><tt>ps2epsi</tt></b>
+ <td>&nbsp;
+ <td>Unix shell script
+<tr valign=top> <td><b><tt>ps2epsi.ps</tt></b>
+ <td>&nbsp;
+ <td>Ghostscript program which does the work
+</table></blockquote>
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+
+<hr>
+
+<p>
+<small>Copyright &copy; 1998, 2000 Aladdin Enterprises. All rights
+reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Ps2pdf.htm b/Master/xemtex/doc/ghostscript/Ps2pdf.htm
new file mode 100644
index 00000000000..6d369674969
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Ps2pdf.htm
@@ -0,0 +1,502 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>ps2pdf: PostScript-to-PDF converter</title>
+<!-- $Id: Ps2pdf.htm,v 1.32.2.11.2.5 2003/05/17 14:39:00 giles Exp $ -->
+<!-- Originally: ps2pdf.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1><tt>ps2pdf</tt>: PostScript-to-PDF converter</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Overview">Overview</a>
+<li><a href="#Usage">Usage</a>
+<li><a href="#Options">Options</a>
+<li><a href="#Limitations">Limitations</a>
+<li><a href="#Problems">Known problems</a>
+<li><a href="#Ps2pdf_vs_AD">Comparison of <b><tt>ps2pdf</tt></b> and Acrobat Distiller</a>
+<li><a href="#Acknowledgments">Acknowledgments</a>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="Overview"></a>Overview</h2>
+
+<b><tt>ps2pdf</tt></b> is a work-alike for nearly all the functionality (but
+not the user interface) of Adobe's Acrobat<small><sup>TM</sup></small>
+Distiller<small><sup>TM</sup></small> product: it converts PostScript files
+to Portable Document Format (PDF) files.
+
+<p>
+<b><tt>ps2pdf</tt></b> is implemented as a very small command script (batch
+file) that invokes Ghostscript, selecting a special "output device" called
+<b><tt>pdfwrite</tt></b>. In order to use <b><tt>ps2pdf</tt></b>, the
+<b><tt>pdfwrite</tt></b> device must be included in the makefile when
+Ghostscript was compiled; see the <a
+href="Make.htm#Features_and_devices">documentation on building
+Ghostscript</a> for details: this is currently the case on all platforms, in
+Ghostscript as we distribute it.
+
+<hr>
+
+<h2><a name="Usage"></a>Usage</h2>
+
+<p>
+The usage for <b><tt>ps2pdf</tt></b> is
+
+<blockquote><b><tt>
+ps2pdf</tt></b> <em>[options] input.[e]ps output.pdf</em>
+</blockquote>
+
+<p>
+or, on Unix systems and some versions of Windows NT and OS/2
+
+<blockquote><b><tt>
+ps2pdf</tt></b> <em>input.[e]ps</em>
+</blockquote>
+
+<p>
+which is equivalent to
+
+<blockquote><b><tt>
+ps2pdf</tt></b> <em>input.[e]ps input.pdf</em>
+</blockquote>
+
+<p>
+There are actually several different <b><tt>ps2pdf</tt></b><em>*</em> scripts:
+the name <b><tt>ps2pdf</tt></b> above refers to any of them.
+
+<ul>
+
+<li><b><tt>ps2pdf12</tt></b> will always produce PDF 1.2 output (Acrobat
+3-and-later compatible).
+
+<li><b><tt>ps2pdf13</tt></b> will always produce PDF 1.3 output (Acrobat
+4-and-later compatible).
+
+<li><b><tt>ps2pdf14</tt></b> will always produce PDF 1.4 output (Acrobat
+5-and-later compatible).
+
+<li><b><tt>ps2pdf</tt></b> per se currently produces PDF 1.2 output (Acrobat
+3-and-later compatible). However, this may change in the future. If you
+care about the compatibility level of the output, use
+<b><tt>ps2pdf12</tt></b>, <b><tt>ps2pdf13</tt></b>, or
+<b><tt>ps2pdf14</tt></b>, or use the
+<b><tt>-dCompatibilityLevel=</tt></b><em>1.x</em> switch in the command
+line.
+
+</ul>
+
+<p>
+All of these scripts actually call a script named <b><tt>ps2pdfwr</tt></b>
+or <b><tt>ps2pdfxx</tt></b>. The Unix <b><tt>ps2pdfwr</tt></b> script
+assumes that the Ghostscript executable is named <b><tt>gs</tt></b>; it is
+unlikely that you will need to change this. The DOS and MS Windows
+<b><tt>ps2pdfxx.bat</tt></b> script uses the value of the
+<b><tt>GSC</tt></b> environment variable, if defined, as the name of the
+executable; otherwise the script assumes the executable is named
+<b><tt>gswin32c</tt></b>. So in these environments, if the executable has a
+different name, you must set <b><tt>GSC</tt></b> to the name of the
+executable.
+
+<hr>
+
+<h2><a name="Options"></a>Options</h2>
+
+<p>
+The <em>options</em> in the command line may include any switches that may
+be used with Ghostscript's PostScript and PDF interpreter (see <a
+href="Use.htm#Switches">here</a> for a complete list), although almost none
+of them are useful with <b><tt>ps2pdf</tt></b>. The following may be
+useful:
+
+<dl>
+
+<dt><b><tt>-r</tt></b><em>resolution</em>
+<dd>Sets the resolution for pattern fills and for fonts that must be
+converted to bitmaps.
+
+<dt><b><tt>-dProcessColorModel=</tt></b><em>device_color_space</em> <dd>Sets
+the color space to be used for device-dependent colors in the
+output. <em>device_color_space</em> may be <b><tt>/DeviceGray</tt></b>,
+<b><tt>/DeviceRGB</tt></b>, or <b><tt>/DeviceCMYK</tt></b>; the default
+value is <b><tt>/DeviceRGB</tt></b>.
+
+</dl>
+
+<p>
+More importantly, <em>options</em> may include
+<b><tt>-d</tt></b><em>parameter</em>=<em>value</em> or
+<b><tt>-s</tt></b><em>parameter</em>=<em>string</em> switches for setting
+"distiller parameters", Adobe's documented parameters for controlling the
+conversion process. The PostScript <b><tt>setdistillerparams</tt></b> and
+<b><tt>currentdistillerparams</tt></b> operators are also recognized when
+running <b><tt>ps2pdf</tt></b>, and provide an equivalent way to set these
+parameters from within the PostScript input file.
+
+<p>
+<b><tt>ps2pdf</tt></b> also recognizes the following switches:
+
+<dl>
+<dt><b><tt>-dPDFSETTINGS=</tt></b><em>configuration</em>
+<dd>Presets the "distiller parameters" to one of four predefined settings:
+
+<ul>
+
+<li><b><tt>/screen</tt></b> selects low-resolution output similar to the
+Acrobat Distiller "Screen Optimized" setting.
+
+<li><b><tt>/printer</tt></b> selects output similar to the Acrobat Distiller
+"Print Optimized" setting.
+
+<li><b><tt>/prepress</tt></b> selects output similar to Acrobat Distiller
+"Prepress Optimized" setting.
+
+<li><b><tt>/default</tt></b> selects output intended to be useful across a
+wide variety of uses, possibly at the expense of a larger output file.
+
+</ul>
+
+</dl>
+
+<p>
+<b><tt>ps2pdf</tt></b> recognizes all of the Acrobat Distiller 4 parameters
+documented in
+<a href="http://partners.adobe.com/asn/developer/acrosdk/DOCS/distparm.pdf">
+Adobe Technical Note #5151</a>. Cells in the table containing '=' mean that
+the value of the parameter is the same as in the "default" column.
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=bottom>
+ <th align=left>Parameter name
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th align=left>Notes
+ <td>&nbsp;&nbsp;
+ <th align=left>default
+ <td>&nbsp;&nbsp;
+ <th align=left>screen
+ <td>&nbsp;&nbsp;
+ <th align=left>printer
+ <td>&nbsp;&nbsp;
+ <th align=left>prepress
+<tr> <td colspan=11><hr>
+<tr valign=top><td><b><tt>ASCII85EncodePages</tt></b><td><td><td><td>false<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>AlwaysEmbed</tt></b><td><td><td><td>[]<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>AntiAliasColorImages</tt></b><td><td>(0)<td><td>false<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>AntiAliasGrayImages</tt></b><td><td>(0)<td><td>false<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>AntiAliasMonoImages</tt></b><td><td>(0)<td><td>false<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>AutoFilterColorImages</tt></b><td><td>(1)<td><td>true<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>AutoFilterGrayImages</tt></b><td><td>(1)<td><td>true<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>AutoPositionEPSFiles</tt></b><td><td>(0)<td><td>true<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>AutoRotatePages</tt></b><td><td><td><td>/PageByPage<td><td>/PageByPage<td><td>/None<td><td>/None
+<tr valign=top><td><b><tt>Binding</tt></b><td><td>(0)<td><td>/Left<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>CalCMYKProfile</tt></b><td><td>(0)<td><td>()<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>CalGrayProfile</tt></b><td><td>(0)<td><td>()<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>CalRGBProfile</tt></b><td><td>(0)<td><td>()<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>CannotEmbedFontPolicy</tt></b><td><td>(0)<td><td>/Warning<td><td>/Warning<td><td>/Warning<td><td>/Error
+<tr valign=top><td><b><tt>ColorACSImageDict</tt></b><td><td><td><td>(note 7)<td><td>(note 7)<td><td>(note 8)<td><td>(note 9)
+<tr valign=top><td><b><tt>ColorConversionStrategy</tt></b><td><td>(0,6)<td><td>/LeaveColorUnchanged<td><td>/sRGB<td><td>/UseDeviceIndependentColor<td><td>/LeaveColorUnchanged
+<tr valign=top><td><b><tt>ColorImageDepth</tt></b><td><td><td><td>-1<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>ColorImageDict</tt></b><td><td><td><td>(note 7)<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>ColorImageFilter</tt></b><td><td><td><td>/DCTEncode<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>ColorImageDownsampleThreshold</tt></b><td><td><td><td>1.5<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>ColorImageDownsampleType</tt></b><td><td>(3)<td><td>/Subsample<td><td>/Average<td><td>/Bicubic<td><td>/Bicubic
+<tr valign=top><td><b><tt>ColorImageResolution</tt></b><td><td><td><td>72<td><td>72<td><td>300<td><td>300
+<tr valign=top><td><b><tt>CompatibilityLevel</tt></b><td><td><td><td>1.3<td><td>1.2<td><td>1.3<td><td>1.3
+<tr valign=top><td><b><tt>CompressPages</tt></b><td><td><td><td>true<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>ConvertCMYKImagesToRGB</tt></b><td><td><td><td>true<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>ConvertImagesToIndexed</tt></b><td><td>(0)<td><td>true<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>CoreDistVersion</tt></b><td><td><td><td>4000<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>CreateJobTicket</tt></b><td><td>(0)<td><td>false<td><td>false<td><td>true<td><td>true
+<tr valign=top><td><b><tt>DefaultRenderingIntent</tt></b><td><td><td><td>/Default<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>DetectBlends</tt></b><td><td>(0)<td><td>true<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>DoThumbnails</tt></b><td><td>(0)<td><td>false<td><td>false<td><td>false<td><td>true
+<tr valign=top><td><b><tt>DownsampleColorImages</tt></b><td><td><td><td>false<td><td>true<td><td>false<td><td>false
+<tr valign=top><td><b><tt>DownsampleGrayImages</tt></b><td><td><td><td>false<td><td>true<td><td>false<td><td>false
+<tr valign=top><td><b><tt>DownsampleMonoImages</tt></b><td><td><td><td>false<td><td>true<td><td>false<td><td>false
+<tr valign=top><td><b><tt>EmbedAllFonts</tt></b><td><td><td><td>true<td><td>false<td><td>true<td><td>true
+<tr valign=top><td><b><tt>EmitDSCWarnings</tt></b><td><td>(0)<td><td>false<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>EncodeColorImages</tt></b><td><td><td><td>true<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>EncodeGrayImages</tt></b><td><td><td><td>true<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>EncodeMonoImages</tt></b><td><td><td><td>true<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>EndPage</tt></b><td><td>(0)<td><td>-1<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>GrayACSImageDict</tt></b><td><td><td><td>(note 7)<td><td>(note 7)<td><td>(note 8)<td><td>=
+<tr valign=top><td><b><tt>GrayImageDepth</tt></b><td><td><td><td>-1<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>GrayImageDict</tt></b><td><td><td><td>(note 7)<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>GrayImageDownsampleThreshold</tt></b><td><td><td><td>1.5<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>GrayImageDownsampleType</tt></b><td><td>(3)<td><td>/Subsample<td><td>/Average<td><td>/Bicubic<td><td>/Bicubic
+<tr valign=top><td><b><tt>GrayImageFilter</tt></b><td><td><td><td>/DCTEncode<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>GrayImageResolution</tt></b><td><td><td><td>72<td><td>72<td><td>300<td><td>300
+<tr valign=top><td><b><tt>ImageMemory</tt></b><td><td>(0)<td><td>500000<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>LockDistillerParams</tt></b><td><td><td><td>false<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>LZWEncodePages</tt></b><td><td>(2)<td><td>false<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>MaxSubsetPct</tt></b><td><td><td><td>100<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>MonoImageDepth</tt></b><td><td><td><td>-1<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>MonoImageDict</tt></b><td><td><td><td><<K -1>><td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>MonoImageDownsampleThreshold</tt></b><td><td><td><td>1.5<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>MonoImageDownsampleType</tt></b><td><td><td><td>/Subsample<td><td>/Average<td><td>/Bicubic<td><td>/Bicubic
+<tr valign=top><td><b><tt>MonoImageFilter</tt></b><td><td><td><td>/CCITTFaxEncode<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>MonoImageResolution</tt></b><td><td><td><td>300<td><td>300<td><td>1200<td><td>1200
+<tr valign=top><td><b><tt>NeverEmbed</tt></b><td><td><td><td>[]<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>OPM</tt></b><td><td><td><td>1<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>Optimize</tt></b><td><td>(0,5)<td><td>false<td><td>true<td><td>true<td><td>true
+<tr valign=top><td><b><tt>ParseDSCComments</tt></b><td><td><td><td>true<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>ParseDSCCommentsForDocInfo</tt></b><td><td><td><td>true<td><td>false<td><td>true<td><td>true
+<tr valign=top><td><b><tt>PreserveCopyPage</tt></b><td><td>(0)<td><td>true<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>PreserveEPSInfo</tt></b><td><td>(0)<td><td>true<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>PreserveHalftoneInfo</tt></b><td><td><td><td>false<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>PreserveOPIComments</tt></b><td><td>(0)<td><td>false<td><td>false<td><td>true<td><td>true
+<tr valign=top><td><b><tt>PreserveOverprintSettings</tt></b><td><td><td><td>false<td><td>false<td><td>true<td><td>true
+<tr valign=top><td><b><tt>sRGBProfile</tt></b><td><td>(0)<td><td>()<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>StartPage</tt></b><td><td>(0)<td><td>1<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>SubsetFonts</tt></b><td><td><td><td>true<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>TransferFunctionInfo</tt></b><td><td>(4)<td><td>/Preserve<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>UCRandBGInfo</tt></b><td><td><td><td>/Remove<td><td>/Remove<td><td>/Preserve<td><td>/Preserve
+<tr valign=top><td><b><tt>UseFlateCompression</tt></b><td><td><td><td>true<td><td>=<td><td>=<td><td>=
+<tr valign=top><td><b><tt>UsePrologue</tt></b><td><td>(0)<td><td>false<td><td>=<td><td>=<td><td>=
+</table></blockquote>
+
+<p>
+(note 0) This parameter can be set and queried, but currently has no effect.
+
+<p>
+(note 1) <b><tt>AutoFilterxxxImages</tt></b> doesn't examine the image to
+decide between JPEG and LZW or Flate compression: it uses JPEG compression
+if the image has 8 bits per component and does not use an Indexed color
+space, and LZW or Flate compression otherwise.
+
+<p>
+(note 2) Because of Unisys's threats regarding the Welch patent,
+<b><tt>ps2pdf</tt></b> cannot actually use LZW compression: instead, it
+treats all requests for LZW compression as calling for Flate compression if
+<b><tt>UseFlateCompression</tt></b> is true and
+<b><tt>CompatibilityLevel</tt></b> &gt;= 1.2, and ignores them otherwise.
+
+<p>
+(note 3) The <b><tt>xxxDownsampleType</tt></b> parameters can also have the
+value /Bicubic (a Distiller 4 feature), which is currently treated as
+equivalent to /Average.
+
+<p>
+(note 4) Currently, the transfer function is always applied. If the
+corresponding parameter is set to <b><tt>/Preserve</tt></b>, the function
+setting is also copied into the PDF file.
+
+<p>
+(note 5) Optimization (linearization) is implemented with a separate
+program, <b><tt>pdfopt</tt></b> <em>input.pdf</em> <em>output.pdf</em>; the
+<b><tt>Optimize</tt></b> parameter has no effect.
+
+<p>
+(note 6) Currently, colors for images and shadings are left in the color
+space specified in the PostScript input, except for
+<b><tt>ConvertCMYKImagesToRGB</tt></b>; the current color in the graphics
+state (used for fill, stroke, text, and imagemask) is always converted to
+the color space specified by the current value of
+<b><tt>ProcessColorModel</tt></b>. The intended behavior is the same as for
+Acrobat Distiller, except that if <b><tt>ColorConversionStrategy</tt></b> is
+set to <b><tt>/UseDeviceDependentColor</tt></b>, colors are converted to the
+color space specified by <b><tt>ProcessColorModel</tt></b> rather than
+always to <b><tt>/DeviceRGB</tt></b>.
+
+<p>
+(note 7) The default image parameter dictionary is
+<blockquote><b><tt>
+<< /QFactor 0.9 /Blend 1 /HSamples [2 1 1 2] /VSamples [2 1 1 2] >>
+</tt></b></blockquote>
+
+<p>
+(note 8) The printer ACS image parameter dictionary is
+<blockquote><b><tt>
+<< /QFactor 0.55 /Blend 1 /HSamples [2 1 1 2] /VSamples [2 1 1 2] >>
+</tt></b></blockquote>
+
+<p>
+(note 9) The prepress ACS image parameter dictionary is
+<blockquote><b><tt>
+<< /QFactor 0.25 /HSamples [1 1 1 1] /VSamples [1 1 1 1] >>
+</tt></b></blockquote>
+
+<hr>
+
+<h2><a name="Limitations"></a>Limitations</h2>
+
+<p>
+<b><tt>ps2pdf</tt></b> will sometimes convert text to high-resolution
+bitmapped fonts rather than to embedded outline fonts. This will occur when
+the PostScript file uses Type 3, CIDFontType 1, or CIDFontType 4 fonts, or
+Type 0 fonts that reference any of these; it may also occur in some cases if
+the input file uses fonts with non-standard encodings, or in some other rare
+cases.
+
+<p>
+The PDF output always represents the colors of text and graphics in
+DeviceGray or DeviceRGB color space (or DeviceCMYK if the
+<b><tt>ProcessColorModel</tt></b> parameter has been set to
+<b><tt>/DeviceCMYK</tt></b>); all other color spaces are converted to these.
+However, for images, it will retain the original color space for DeviceGray,
+DeviceRGB, DeviceCMYK, certain CIEBased spaces, and Indexed spaces based on
+these.
+
+<p>
+<b><tt>ps2pdf</tt></b> will sometimes convert PostScript constructs to
+lower-level ones, even if a higher-level construct is available. For
+example, if the PostScript file uses <b><tt>charpath</tt></b> to set a
+clipping path consisting of text, <b><tt>ps2pdf</tt></b> will write the
+clipping path as a path in the PDF file, rather than as text, even though
+PDF is able to express clipping with text. This is only a performance
+issue, and will be improved incrementally over time.
+
+<p>
+Some applications, such as HIGZ, produce PostScript files that use
+ridiculously large coordinates. On such files, <b><tt>ps2pdf</tt></b> may
+cause a <b><tt>limitcheck</tt></b> error. If this occurs, try reducing the
+default internal resolution of 720 dpi by using the <b><tt>-r</tt></b>
+switch, e.g., <b><tt>ps2pdf&nbsp;-r300&nbsp;somefile.ps</tt></b>.
+
+<p>
+<b><tt>ps2pdf</tt></b> ignores the PDF 1.3 (Acrobat 4.x) pdfmarks related to
+document content structure: <b><tt>StRoleMap</tt></b>,
+<b><tt>StClassMap</tt></b>, <b><tt>StPNE</tt></b>,
+<b><tt>StBookmarkRoot</tt></b>, <b><tt>StPush</tt></b>,
+<b><tt>StPop</tt></b>, <b><tt>StPopAll</tt></b>, <b><tt>StBMC</tt></b>,
+<b><tt>StBDC</tt></b>, <b><tt>EMC</tt></b>, <b><tt>StOBJ</tt></b>,
+<b><tt>StAttr</tt></b>, <b><tt>StStore</tt></b>, <b><tt>StRetrieve</tt></b>,
+<b><tt>NamespacePush</tt></b>, <b><tt>NamespacePop</tt></b>, and
+<b><tt>NI</tt></b>. While this causes some structural information to be
+omitted from the output file, the displayed and printed output are normally
+not affected.
+
+<p>
+<b><tt>ps2pdf</tt></b> currently has only very limited support for PDF 1.4.
+It writes out the blend mode, constant alpha, and text knockout graphics
+state parameters, and it handles images with soft masks, but it does not
+handle transparency groups, or soft masks in the graphics state. (Note that
+there is no standard way to specify any of these things in PostScript, so
+these statements only apply when the input file is already a PDF 1.4 file.)
+
+<hr>
+
+<h2><a name="Problems"></a>Known problems</h2>
+
+<p>
+Distiller parameters should only be saved by <b><tt>save</tt></b> and
+restored by <b><tt>restore</tt></b>, but they are also saved by
+<b><tt>gsave</tt></b> and restored by <b><tt>grestore</tt></b>.
+
+<p>
+Changing the value of the <b><tt>CompressPages</tt></b> parameter after any
+marks have been made on the page may cause a crash.
+
+<p>
+If the input file downloads Type 1 fonts incrementally, the output file may
+contain embedded fonts with some information missing from the
+FontDescriptor, which may crash Acrobat Reader 4 or produce incorrect
+character spacing.
+
+<hr>
+
+<h2><a name="Ps2pdf_vs_AD"></a>Comparison of <b><tt>ps2pdf</tt></b> and
+Acrobat Distiller</h2>
+
+<p>
+According to users, the greatest benefit of <b><tt>ps2pdf</tt></b> is that
+it is more robust than Acrobat Distiller: it will process complex and
+difficult PostScript files that Acrobat Distiller is not able to handle.
+
+<p>
+For certain documents, <b><tt>ps2pdf</tt></b> is much faster than Adobe
+Distiller, and may be suitable for run-time conversions. George White,
+a heavy user of <b><tt>ps2pdf</tt></b>, remarks:
+
+<blockquote>
+I haven't seen a head to head comparison, but Distiller seems
+slower when running on what should be a faster system (for instance,
+Distiller on a PPC Mac vs a 25 MHz 68040 NeXT running
+<b><tt>ps2pdf</tt></b>), so I think this is fair -- also, one of Mark
+Doyle's postings indicated that Distiller was not fast enough for use as a
+run-time server. In contrast, I find that I can use <b><tt>ps2pdf</tt></b>
+as a post-processor during routine document creation.
+</blockquote>
+
+<p>
+On the other hand, there are some documents for which <b><tt>ps2pdf</tt></b>
+may be much slower than Acrobat Distiller. Caveat user.
+
+<p>
+<b><tt>ps2pdf</tt></b> usually produces output that is comparable in size to
+the output of Acrobat Distiller; however, it sometimes produces much larger
+output, especially if the input file involves pattern fills.
+
+<p>
+Many users report that the combination of <b><tt>ps2pdf</tt></b> with
+Acrobat Reader is superior to using a generic PostScript viewer
+(<b><tt>psview</tt></b> or <b><tt>ghostview</tt></b>), particularly for
+documents with many pages where the navigational support in PDF files
+reduces the overhead involved in navigating conventional PostScript
+documents.
+
+<hr>
+
+<h2><a name="Acknowledgments"></a>Acknowledgments</h2>
+
+<p>
+Thanks to George N. White III &lt;<a href="mailto:aa056@chebucto.ns.ca">aa056@chebucto.ns.ca</a>&gt; of the Ocean
+Sciences Division of the Bedford Institute of Oceanography in Dartmouth,
+Nova Scotia for extensive testing of early versions of
+<b><tt>ps2pdf</tt></b>, and for contributing most of this writeup.
+
+<p>
+Thanks to Martin Hosken of SIL International &lt;<a
+href="http://www.sil.org">http://www.sil.org</a>&gt; for help with testing
+<b><tt>ps2pdf</tt></b> with a wide variety of international fonts.
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 2000 Aladdin Enterprises. All rights
+reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Psfiles.htm b/Master/xemtex/doc/ghostscript/Psfiles.htm
new file mode 100644
index 00000000000..2b5a7a75c1c
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Psfiles.htm
@@ -0,0 +1,832 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>.ps files distributed with Ghostscript</title>
+<!-- $Id: Psfiles.htm,v 1.22.2.12.2.5 2003/05/17 14:39:00 giles Exp $ -->
+<!-- Originally: psfiles.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Postscript files distributed with Ghostscript</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#General">Generally used system files</a>
+<li><a href="#Obscure">More obscure system files</a>
+<li><a href="#PDF_specific">PDF-specific system files</a>
+<li><a href="#DPS_specific">Display PostScript-specific system files</a>
+<li><a href="#Art">Art and examples</a>
+<li><a href="#Utilities">Utilities</a>
+<li><a href="#Development_tools">Development tools</a>
+<li><a href="#Miscellany">Odds and ends</a>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="General"></a>Generally used system files</h2>
+
+<p>
+These files are found in the <b><tt>lib</tt></b> subdirectory of
+the Ghostscript source distribution.
+
+<dl>
+<dt><tt>gs_*_e.ps</tt>
+<dd><p>
+These files define the Encodings known to Ghostscript. All of
+them except <b><tt>gs_std_e.ps</tt></b> and <b><tt>gs_il1_e.ps</tt></b>
+are loaded only if referred to.
+
+<dl>
+
+<dt>
+PostScript Encodings:
+<dd>
+<a href="../lib/gs_ce_e.ps"><tt>gs_ce_e.ps</tt></a>,
+<a href="../lib/gs_il1_e.ps"><tt>gs_il1_e.ps</tt></a>,
+<a href="../lib/gs_std_e.ps"><tt>gs_std_e.ps</tt></a>,
+<a href="../lib/gs_sym_e.ps"><tt>gs_sym_e.ps</tt></a>.
+
+<dt>
+PDF Encodings:
+<dd>
+<a href="../lib/gs_mex_e.ps"><tt>gs_mex_e.ps</tt></a>,
+<a href="../lib/gs_mro_e.ps"><tt>gs_mro_e.ps</tt></a>,
+<a href="../lib/gs_pdf_e.ps"><tt>gs_pdf_e.ps</tt></a>,
+<a href="../lib/gs_wan_e.ps"><tt>gs_wan_e.ps</tt></a>.
+
+<dt>
+Non-standard Encodings:
+<dd>
+<a href="../lib/gs_dbt_e.ps"><tt>gs_dbt_e.ps</tt></a>,
+<a href="../lib/gs_il2_e.ps"><tt>gs_il2_e.ps</tt></a>,
+<a href="../lib/gs_ksb_e.ps"><tt>gs_ksb_e.ps</tt></a>,
+<a href="../lib/gs_wl1_e.ps"><tt>gs_wl1_e.ps</tt></a>,
+<a href="../lib/gs_wl2_e.ps"><tt>gs_wl2_e.ps</tt></a>,
+<a href="../lib/gs_wl5_e.ps"><tt>gs_wl5_e.ps</tt></a>.
+
+<dt>
+Pseudo-encodings:
+<dd>
+<a href="../lib/gs_css_e.ps"><tt>gs_css_e.ps</tt></a>,
+<a href="../lib/gs_lgo_e.ps"><tt>gs_lgo_e.ps</tt></a>,
+<a href="../lib/gs_lgx_e.ps"><tt>gs_lgx_e.ps</tt></a>,
+<a href="../lib/gs_mgl_e.ps"><tt>gs_mgl_e.ps</tt></a>.
+
+</dl>
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_btokn.ps"><tt>gs_btokn.ps</tt></a>
+<dd><b><tt>gs_init.ps</tt></b> reads this in if the <b><tt>btoken</tt></b>
+feature is included in the configuration. It provides support for binary
+tokens.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_ccfnt.ps"><tt>gs_ccfnt.ps</tt></a>
+<dd><b><tt>gs_init.ps</tt></b> reads this in if the <b><tt>ccfonts</tt></b>
+feature is included in the configuration. It provides support for compiled
+fonts.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_cff.ps"><tt>gs_cff.ps</tt></a>
+<dd>Load CFF (compressed) fonts.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_cidcm.ps"><tt>gs_cidcm.ps</tt></a>
+<dd>Code for recognizing font names of the form CIDFont-CMap (or
+CIDFont--CMap) and creating the font automatically.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_cidfn.ps"><tt>gs_cidfn.ps</tt></a>
+<dd><b><tt>ProcSet</tt></b> for implementing <b><tt>CIDFont</tt></b> and
+<b><tt>CIDMap</tt></b> resources.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_cmap.ps"><tt>gs_cmap.ps</tt></a>
+<dd><b><tt>ProcSet</tt></b> for implementing <b><tt>CMap</tt></b> resources.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_dscp.ps"><tt>gs_dscp.ps</tt></a>
+<dd>Code to compensate for badly written PostScript files by setting
+Orientation according to the DSC comments.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_epsf.ps"><tt>gs_epsf.ps</tt></a>
+<dd>Allow the interpreter to recognize DOS EPSF file headers, and skip to the
+PostScript section of the file.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_fonts.ps"><tt>gs_fonts.ps</tt></a>
+<dd><b><tt>gs_init.ps</tt></b> reads this in. It initializes Ghostscript's
+font machinery and provides some utility procedures that work with fonts.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_frsd.ps"><tt>gs_frsd.ps</tt></a>
+<dd>Support for the PostScript LanguageLevel 3
+<b><tt>ReusableStreamDecode</tt></b> filter.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_init.ps"><tt>gs_init.ps</tt></a>
+<dd>Ghostscript reads this automatically when it starts up. It contains
+definitions of many standard procedures and initialization for a wide
+variety of things.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_lev2.ps"><tt>gs_lev2.ps</tt></a>
+<dd><b><tt>gs_init.ps</tt></b> reads this in if the Ghostscript interpreter
+includes Level 2 PostScript functions. It contains definitions of
+procedures and miscellaneous initialization for the Level 2 functions.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_ll3.ps"><tt>gs_ll3.ps</tt></a>
+<dd>Initialize PostScript LanguageLevel 3 functions.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_res.ps"><tt>gs_res.ps</tt></a>
+<dd><b><tt>gs_init.ps</tt></b> reads this in if the Level 2 resource
+machinery is included. Currently, this is the case for all Level 2
+configurations.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_setpd.ps"><tt>gs_setpd.ps</tt></a>
+<dd>Implementation of the <b><tt>setpagedevice</tt></b> operator.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_statd.ps"><tt>gs_statd.ps</tt></a>
+<dd><b><tt>gs_init.ps</tt></b> reads this in. It creates a dummy
+<b><tt>statusdict</tt></b> and some other environmental odds and ends for
+the benefit of PostScript files that really want to be printed on a
+LaserWriter.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_trap.ps"><tt>gs_trap.ps</tt></a>
+<dd>Stub support for the PostScript LanguageLevel 3 "In-RIP trapping"
+feature.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_ttf.ps"><tt>gs_ttf.ps</tt></a>
+<dd>Support code for direct use of TrueType fonts.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_typ32.ps"><tt>gs_typ32.ps</tt></a>
+<dd>Initialization file for Type 32 fonts.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_typ42.ps"><tt>gs_typ42.ps</tt></a>
+<dd>Support code for Type 42 fonts (TrueType font in a PostScript "wrapper").
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_type1.ps"><tt>gs_type1.ps</tt></a>
+<dd><b><tt>gs_init.ps</tt></b> reads this in if the Ghostscript interpreter
+includes Type 1 font capability (which it normally does).
+</dl>
+
+<hr>
+
+<h2><a name="Obscure"></a>More obscure system files</h2>
+
+<p>
+These files are found in the <b><tt>lib</tt></b> subdirectory of
+the Ghostscript source distribution.
+
+<dl>
+<dt><a href="../lib/font2c.ps"><tt>font2c.ps</tt></a>
+<dd>Convert a PostScript Type 0 or Type 1 font to C code that can be compiled
+and linked into Ghostscript; see the documentation on fonts for <a
+href="Fonts.htm#Precompiling">how to do this</a>.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_agl.ps"><tt>gs_agl.ps</tt></a>
+<dd>Contains the mapping from Adobe glyph names to Unicode values, used to
+support TrueType fonts.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_cmdl.ps"><tt>gs_cmdl.ps</tt></a>
+<dd>This file is not used yet. Eventually it will replace C code that
+parses the Ghostscript command line.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_diskf.ps"><tt>gs_diskf.ps</tt></a>
+<dd>This file implements the <b><tt>-dDISKFONTS</tt></b> feature
+(<b><tt>diskfont.dev</tt></b>). See the the usage documentation for <a
+href="Use.htm#DISKFONTS">a description of this feature</a>.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_fform.ps"><tt>gs_fform.ps</tt></a>
+<dd>A usable but imperfect PostScript implementation of Form caching.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_kanji.ps"><tt>gs_kanji.ps</tt></a>
+<dd>This file provides support for the Wadalab free Kanji font. It is not
+included automatically in any configuration.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_pdfwr.ps"><tt>gs_pdfwr.ps</tt></a>
+<dd>This file contains some patches for providing information to the
+<b><tt>pdfwrite</tt></b> driver. It is included only if the
+<b><tt>pdfwrite</tt></b> driver is included.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_pfile.ps"><tt>gs_pfile.ps</tt></a>
+<dd>This file provides runtime support for packed fonts. It is not
+included automatically in any configuration.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_rdlin.ps"><tt>gs_rdlin.ps</tt></a>
+<dd>A tiny patch for systems with built-in readline support.
+</dl>
+
+<dl>
+<dt><a href="../lib/ht_ccsto.ps"><tt>ht_ccsto.ps</tt></a>
+<dd>A default stochastic CMYK halftone. This file is in the public domain.
+</dl>
+
+<dl>
+<dt><a href="../lib/stcolor.ps"><tt>stcolor.ps</tt></a>
+<dd>Configure the (Epson) <b><tt>stcolor</tt></b> driver
+</dl>
+
+<hr>
+
+<h2><a name="PDF_specific"></a>PDF-specific system files</h2>
+
+<p>
+These files are found in the <b><tt>lib</tt></b> subdirectory of
+the Ghostscript source distribution.
+
+<dl>
+<dt><a href="../lib/gs_l2img.ps"><tt>gs_l2img.ps</tt></a>
+<dd>The <b><tt>ProcSet</tt></b> that emulates the PostScript Level 2
+"<b><tt>image</tt></b>" operator on Level 1 systems.
+</dl>
+
+<dl>
+<dt><a href="../lib/pdf_base.ps"><tt>pdf_base.ps</tt></a>
+<dd>Utilities for interpreting PDF objects and streams.
+</dl>
+
+<dl>
+<dt><a href="../lib/pdf_draw.ps"><tt>pdf_draw.ps</tt></a>
+<dd>The interpreter for drawing-related PDF operations.
+</dl>
+
+<dl>
+<dt><a href="../lib/pdf_font.ps"><tt>pdf_font.ps</tt></a>
+<dd>Code for handling fonts in PDF files.
+</dl>
+
+<dl>
+<dt><a href="../lib/pdf_main.ps"><tt>pdf_main.ps</tt></a>
+<dd>Document- and page-level control for interpreting PDF files.
+</dl>
+
+<dl>
+<dt><a href="../lib/pdf_ops.ps"><tt>pdf_ops.ps</tt></a>
+<dd>Definitions for most of the PDF operators.
+</dl>
+
+<dl>
+<dt><a href="../lib/pdf_sec.ps"><tt>pdf_sec.ps</tt></a>
+<dd>PDF security (encryption) code.
+</dl>
+
+<dl>
+<dt><a href="../lib/pdfopt.ps"><tt>pdfopt.ps</tt></a>
+<dd>A PDF linearizer ("optimizer").
+</dl>
+
+<dl>
+<dt><a href="../lib/pdfwrite.ps"><tt>pdfwrite.ps</tt></a>
+<dd>Support for writing PDF files. Currently used only by the linearizer,
+but potentially useful for other kinds of PDF-processing utilities.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_icc.ps"><tt>gs_icc.ps</tt></a> <dd>Support for
+ICC color profiles. These are not a standard PostScript feature, but
+are used in the PDF interpreter, as ICC profiles may be embedded in
+PDF files.
+</dl>
+
+<hr>
+
+<h2><a name="DPS_specific"></a>Display PostScript-specific system files</h2>
+
+<p>
+These files are found in the <b><tt>lib</tt></b> subdirectory of
+the Ghostscript source distribution.
+
+<dl>
+<dt><a href="../lib/gs_dpnxt.ps"><tt>gs_dpnxt.ps</tt></a>
+<dd>NeXT Display PostScript extensions.
+</dl>
+
+<dl>
+<dt><a href="../lib/gs_dps.ps"><tt>gs_dps.ps</tt></a>,
+<a href="../lib/gs_dps1.ps"><tt>gs_dps1.ps</tt></a>,
+<a href="../lib/gs_dps2.ps"><tt>gs_dps2.ps</tt></a>
+<dd><b><tt>gs_init.ps</tt></b> reads these in if the <b><tt>dps</tt></b>
+feature is included in the configuration. They provide support for various
+Display PostScript and Level 2 features.
+</dl>
+
+<hr>
+
+<h2><a name="Art"></a>Art and examples</h2>
+
+<p>
+These files are found in the <b><tt>examples</tt></b> subdirectory of
+the Ghostscript source distribution.
+
+<dl>
+<dt><a href="../examples/alphabet.ps"><tt>alphabet.ps</tt></a>
+<dd>Prints a sample alphabet at several different sizes.
+</dl>
+
+<dl>
+<dt><a href="../examples/annots.pdf"><tt>annots.pdf</tt></a>
+<dd>A sample file with a wide variety of PDF "annotations".
+</dl>
+
+<dl>
+<dt><a href="../examples/colorcir.ps"><tt>colorcir.ps</tt></a>
+<dd>A set of nested ellipses made up of colored bars.
+</dl>
+
+<dl>
+<dt><a href="../examples/doretree.ps"><tt>doretree.ps</tt></a>
+<dd>A 3-D image produced by a modeling program. This file is in the public
+domain.
+</dl>
+
+<dl>
+<dt><a href="../examples/escher.ps"><tt>escher.ps</tt></a>
+<dd>A colored version of a hexagonally symmetric Escher drawing of
+interlocking butterflies. Can be printed on monochrome devices, with
+somewhat less dramatic results.
+</dl>
+
+<dl>
+<dt><a href="../examples/golfer.ps"><tt>golfer.ps</tt></a>
+<dd>A gray-scale picture of a stylishly dressed woman swinging a golf club.
+</dl>
+
+<dl>
+<dt><a href="../examples/grayalph.ps"><tt>grayalph.ps</tt></a>
+<dd>Grayscaled text test pattern.
+</dl>
+
+<dl>
+<dt><a href="../examples/ridt91.eps"><tt>ridt91.eps</tt></a>
+<dd>The RIDT '91 logo. Note that since this is an EPS file, you will have
+to add "<b><tt>-c&nbsp;showpage</tt></b>" at the end of the command line to
+print it or convert it to a raster file.
+</dl>
+
+<dl>
+<dt><a href="../examples/snowflak.ps"><tt>snowflak.ps</tt></a>
+<dd>A rectangular grid of intricate colored snowflakes. (May render very
+slowly.)
+</dl>
+
+<dl>
+<dt><a href="../examples/tiger.ps"><tt>tiger.ps</tt></a>
+<dd>A dramatic colored picture of a tiger's head.
+</dl>
+
+<dl>
+<dt><a href="../examples/vasarely.ps"><tt>vasarely.ps</tt></a>
+<dd>Colored rectangles and ellipses inspired by Victor Vasarely's experiments
+with tilting circles and squares.
+</dl>
+
+<dl>
+<dt><a href="../examples/waterfal.ps"><tt>waterfal.ps</tt></a>
+<dd>Prints text in a variety of different sizes, to help evaluate the
+quality of text rendering.
+</dl>
+
+<hr>
+
+<h2><a name="Utilities"></a>Utilities</h2>
+
+<p>
+For more information on these utility programs, see the comments at the
+beginnings of the files. The ones marked (*) have batch files or shell
+scripts of the same name (like <b><tt>bdftops</tt></b> and
+<b><tt>bdftops.bat</tt></b>) to invoke them conveniently.
+
+<p>
+These files are found in the <b><tt>lib</tt></b> subdirectory of
+the Ghostscript source distribution.
+
+<dl>
+<dt><a href="../lib/addxchar.ps"><tt>addxchar.ps</tt></a>
+<dd>A utility to add Central European and other Adobe extended Latin
+characters to a Type 1 font.
+</dl>
+
+<dl>
+<dt><a href="../lib/align.ps"><tt>align.ps</tt></a>
+<dd>A test page for determining the proper margin and offset parameters for
+your printer.
+</dl>
+
+<dl>
+<dt><a href="../lib/bdftops.ps"><tt>bdftops.ps</tt></a> *
+<dd>A utility for converting BDF fonts to outline form: see the <a
+href="Fonts.htm">documentation on fonts</a>.
+</dl>
+
+<dl>
+<dt><a href="../lib/bench.ps"><tt>bench.ps</tt></a>
+<dd>A file useful for running benchmarks.
+</dl>
+
+<dl>
+<dt><a href="../lib/caption.ps"><tt>caption.ps</tt></a>
+<dd>A file for putting a caption in a box at the bottom of each page,
+useful for trade show demos.
+</dl>
+
+<dl>
+<dt><a href="../lib/cid2code.ps"><tt>cid2code.ps</tt></a>
+<dd>A utility for creating maps from CIDs to Unicode, useful when
+substituting a TrueType font for an Adobe font.
+</dl>
+
+<dl>
+<dt><a href="../lib/docie.ps"><tt>docie.ps</tt></a>
+<dd>An emulation of the CIE color mapping algorithms.
+</dl>
+
+<dl>
+<dt><a href="../lib/errpage.ps"><tt>errpage.ps</tt></a>
+<dd>A file that you can put in front of your own files to make Ghostscript
+(or a PostScript printer) produce an informative error page if something
+goes wrong during the processing of your file(s).
+</dl>
+
+<dl>
+<dt><a href="../lib/font2pcl.ps"><tt>font2pcl.ps</tt></a>
+<dd>A utility to write a font as a PCL bitmap font.
+</dl>
+
+<dl>
+<dt><a href="../lib/gslp.ps"><tt>gslp.ps</tt></a> *
+<dd>A utility for doing "line printing" of plain text files.
+</dl>
+
+<dl>
+<dt><a href="../lib/gsnup.ps"><tt>gsnup.ps</tt></a>
+<dd>A file that you can concatenate in front of (very well-behaved)
+PostScript files to do N-up printing. It is deliberately simple and naive:
+for more generality, use <b><tt>psnup</tt></b> (which, however, requires DSC
+comments).
+</dl>
+
+<dl>
+<dt><a href="../lib/jispaper.ps"><tt>jispaper.ps</tt></a>
+<dd>A file that makes the <b><tt>b0</tt></b> through <b><tt>b6</tt></b>
+procedures refer to JIS B paper sizes rather than ISO B.
+</dl>
+
+
+<dl>
+<dt><a href="../lib/impath.ps"><tt>impath.ps</tt></a>
+<dd>A utility for reconstructing outlines from bitmap images, used by
+<b><tt>bdftops</tt></b>.
+</dl>
+
+<dl>
+<dt><a href="../lib/landscap.ps"><tt>landscap.ps</tt></a>
+<dd>A file that you can put in front of your own files to get them rendered
+in landscape mode.
+</dl>
+
+<dl>
+<dt><a href="../lib/level1.ps"><tt>level1.ps</tt></a>
+<dd>A file that turns off any Level 2 features.
+</dl>
+
+<dl>
+<dt><a href="../lib/packfile.ps"><tt>packfile.ps</tt></a>
+<dd>A utility for compressing fonts into a single file.
+</dl>
+
+<dl>
+<dt><a href="../lib/pdf2dsc.ps"><tt>pdf2dsc.ps</tt></a>
+<dd>A utility to read a PDF file and produce a DSC "index" file.
+</dl>
+
+<dl>
+<dt><a href="../lib/pf2afm.ps"><tt>pf2afm.ps</tt></a> *
+<dd>A utility for producing AFM files from PFA, PFB, and optionally PFM
+files.
+</dl>
+
+<dl>
+<dt><a href="../lib/pfbtopfa.ps"><tt>pfbtopfa.ps</tt></a> *
+<dd>A utility to convert PFB (binary) font files to PFA (text) format.
+</dl>
+
+<dl>
+<dt><a href="../lib/prfont.ps"><tt>prfont.ps</tt></a>
+<dd>A utility to print a font catalog.
+</dl>
+
+<dl>
+<dt><a href="../lib/printafm.ps"><tt>printafm.ps</tt></a>
+<dd>A utility to print an AFM file on standard output.
+</dl>
+
+<dl>
+<dt><a href="../lib/ps2ai.ps"><tt>ps2ai.ps</tt></a>
+<dd>A utility for converting an arbitrary PostScript file into a form
+compatible with Adobe Illustrator. NOTE: <b><tt>ps2ai</tt></b> doesn't
+work properly with Adobe's Helvetica-Oblique font, and other fonts whose
+original <b><tt>FontMatrix</tt></b> involves skewing or rotation.
+</dl>
+
+<dl>
+<dt><a href="../lib/ps2ascii.ps"><tt>ps2ascii.ps</tt></a> *
+<dd>A utility for extracting the ASCII text from PostScript source files.
+It redefines many operators. For more information, see the comments in the
+file.
+</dl>
+
+<dl>
+<dt><a href="../lib/ps2epsi.ps"><tt>ps2epsi.ps</tt></a> *
+<dd>A utility for converting an arbitrary PostScript file into EPSI form.
+</dl>
+
+<dl>
+<dt><a href="../lib/quit.ps"><tt>quit.ps</tt></a>
+<dd>A file containing just the word "<b><tt>quit</tt></b>". (The
+<b><tt>-c</tt></b> switch now makes this unnecessary; this file exists for
+backward compatibility.)
+</dl>
+
+<dl>
+<dt><a href="../lib/rollconv.ps"><tt>rollconv.ps</tt></a>
+<dd>A utility for converting files produced by Macromedia's
+<b><tt>Rollup</tt></b> program to a Type 0 form directly usable by
+Ghostscript.
+</dl>
+
+<dl>
+<dt><a href="../lib/showpage.ps"><tt>showpage.ps</tt></a>
+<dd>A file containing just the word "<b><tt>showpage</tt></b>". (The
+<b><tt>-c</tt></b> switch now makes this unnecessary; this file exists for
+backward compatibility.)
+</dl>
+
+<dl>
+<dt><a href="../lib/stocht.ps"><tt>stocht.ps</tt></a>
+<dd>A file that installs the StochasticDefault halftone as the default,
+which may improve output quality on inkjet printers. See the file for more
+information.
+</dl>
+
+<dl>
+<dt><a href="../lib/viewcmyk.ps"><tt>viewcmyk.ps</tt></a>
+<dd>A utility for displaying CMYK files.
+</dl>
+
+<dl>
+<dt><a href="../lib/viewgif.ps"><tt>viewgif.ps</tt></a>
+<dd>A utility for displaying GIF files.
+</dl>
+
+<dl>
+<dt><a href="../lib/viewjpeg.ps"><tt>viewjpeg.ps</tt></a>
+<dd>A utility for displaying JPEG files.
+</dl>
+
+<dl>
+<dt><a href="../lib/viewmiff.ps"><tt>viewmiff.ps</tt></a>
+<dd>A utility for displaying MIFF files.
+</dl>
+
+<dl>
+<dt><a href="../lib/viewpbm.ps"><tt>viewpbm.ps</tt></a>
+<dd>A utility for displaying PBM/PGM/PPM files.
+</dl>
+
+<dl>
+<dt><a href="../lib/viewpcx.ps"><tt>viewpcx.ps</tt></a>
+<dd>A utility for displaying PCX files.
+</dl>
+
+<dl>
+<dt><a href="../lib/waterfal.ps"><tt>waterfal.ps</tt></a>
+<dd>A utility to print a "waterfall" of fonts at different sizes.
+</dl>
+
+<hr>
+
+<h2><a name="Development_tools"></a>Development tools</h2>
+
+<p>
+These files are found in the <b><tt>lib</tt></b> subdirectory of
+the Ghostscript source distribution.
+
+<dl>
+<dt><a href="../lib/acctest.ps"><tt>acctest.ps</tt></a>
+<dd>A utility that checks whether the interpreter enforces access
+restrictions.
+</dl>
+
+<dl>
+<dt><a href="../lib/decrypt.ps"><tt>decrypt.ps</tt></a>
+<dd>A utility for decrypting the <b><tt>eexec</tt></b> section of a font.
+</dl>
+
+<dl>
+<dt><a href="../lib/image-qa.ps"><tt>image-qa.ps</tt></a>
+<dd>A comprehensive test of the image display operators.
+</dl>
+
+<dl>
+<dt><a href="../lib/markpath.ps"><tt>markpath.ps</tt></a>
+<dd>A utility for showing the points on a path.
+</dl>
+
+<dl>
+<dt><a href="../lib/pcharstr.ps"><tt>pcharstr.ps</tt></a>
+<dd>A utility for printing out the <b><tt>CharStrings</tt></b> and
+<b><tt>Subrs</tt></b> in a Type 1 font.
+</dl>
+
+<dl>
+<dt><a href="../lib/ppath.ps"><tt>ppath.ps</tt></a>
+<dd>A couple of utilities for printing out the current path, for debugging.
+</dl>
+
+<dl>
+<dt><a href="../lib/pphs.ps"><tt>pphs.ps</tt></a>
+<dd>A utility to print the Primary Hint Stream of a linearized PDF file.
+</dl>
+
+<dl>
+<dt><a href="../lib/traceimg.ps"><tt>traceimg.ps</tt></a>
+<dd>Trace the data supplied to the <b><tt>image</tt></b> operator.
+</dl>
+
+<dl>
+<dt><a href="../lib/traceop.ps"><tt>traceop.ps</tt></a>
+<dd>A utility for tracing uses of any procedure or operator for debugging.
+</dl>
+
+<dl>
+<dt><a href="../lib/type1enc.ps"><tt>type1enc.ps</tt></a>
+<dd>The Type 1 font format encryption and decryption algorithms, written in
+PostScript.
+</dl>
+
+<dl>
+<dt><a href="../lib/uninfo.ps"><tt>uninfo.ps</tt></a>
+<dd>Some utilities for printing out PostScript data structures.
+</dl>
+
+<dl>
+<dt><a href="../lib/unprot.ps"><tt>unprot.ps</tt></a>
+<dd>A prologue to disable access checking.
+</dl>
+
+<dl>
+<dt><a href="../lib/viewps2a.ps"><tt>viewps2a.ps</tt></a>
+<dd>A utility for displaying the output of <b><tt>ps2ascii.ps</tt></b>.
+</dl>
+
+<dl>
+<dt><a href="../lib/wftopfa.ps"><tt>wftopfa.ps</tt></a>
+<dd>Convert a Wadalab (Japanese) base font to <b><tt>.PFA</tt></b> (or
+<b><tt>.PFB</tt></b>) format.
+</dl>
+
+<dl>
+<dt><a href="../lib/winmaps.ps"><tt>winmaps.ps</tt></a>
+<dd>A utility for creating mappings between the Adobe encodings and the
+Microsoft Windows character sets.
+</dl>
+
+<dl>
+<dt><a href="../lib/wrfont.ps"><tt>wrfont.ps</tt></a>
+<dd>A utility for writing out an unprotected Type 1 font, such as the
+standard Ghostscript fonts.
+</dl>
+
+<dl>
+<dt><a href="../lib/zeroline.ps"><tt>zeroline.ps</tt></a>
+<dd>A utility for testing how interpreters handle zero-width lines.
+</dl>
+
+<hr>
+
+<h2><a name="Miscellany"></a>Odds and ends</h2>
+
+<p>
+These files are found in the <b><tt>lib</tt></b> subdirectory of
+the Ghostscript source distribution.
+
+<dl>
+<dt><a href="../lib/lines.ps"><tt>lines.ps</tt></a>
+<dd>A test program for line joins and caps.
+</dl>
+
+<dl>
+<dt><a href="../lib/markhint.ps"><tt>markhint.ps</tt></a>
+<dd>Draw the hints for a Type 1 font.
+</dl>
+
+<dl>
+<dt><a href="../lib/showchar.ps"><tt>showchar.ps</tt></a>
+<dd>Show a character's outline and rasterized forms.
+</dl>
+
+<dl>
+<dt><a href="../lib/stcinfo.ps"><tt>stcinfo.ps</tt></a>
+<dd>Print and show parameters of the (Epson) <b><tt>stcolor</tt></b> driver.
+</dl>
+
+<dl>
+<dt><a href="../lib/type1ops.ps"><tt>type1ops.ps</tt></a>
+<dd>The Type 1 font format opcodes.
+</dl>
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 2000 Aladdin Enterprises. All rights
+reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/README b/Master/xemtex/doc/ghostscript/README
new file mode 100644
index 00000000000..193c9f09192
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/README
@@ -0,0 +1,391 @@
+
+ Overview of Ghostscript
+
+ If this is your first contact with Ghostscript, before continuing here
+ you should read the documentation for new users, where you'll find
+ * what Ghostscript does (PostScript and PDF previewing, conversion,
+ and printing);
+ * its licensing terms (free for ordinary use);
+ * what platforms it runs on (every platform you're likely to be
+ interested in);
+ * where to find some useful programs that enhance Ghostscript (like
+ user-friendly previewers for Unix, VMS, MS Windows, DOS, and
+ Macintosh); and
+ * what to do if you need help.
+
+ The rest of this document is a roadmap to the Ghostscript
+ documentation. After looking through it, if you want to install
+ Ghostscript and not only use it, we recommend you read how to install
+ Ghostscript, and how to compile Ghostscript from source code (which is
+ necessary before installing it on Unix and VMS systems).
+ _________________________________________________________________
+
+Table of contents
+
+ * Document roadmap by theme
+ + What should I read if I'm a new user?
+ + Before building Ghostscript
+ + What should I read if I'm not a new user?
+ + What if I'm a developer?
+ + What if I'm writing documentation?
+ * Presence on the World Wide Web
+ + Ghostscript's home pages
+ + Adobe PostScript, Encapsulated PostScript, and PDF reference
+ documentation
+ + Other material on the WWW
+ * Which document contains what?
+ + Primarily for users:
+
+ Devices.htm
+ Helpers.htm
+ Humor.htm
+ New-user.htm
+ Ps2epsi.htm
+ Ps2pdf.htm
+ Readme.htm
+ Unix-lpr.htm
+ Use.htm
+
+ + For both users and developers:
+
+ Changes.htm
+ Current.htm
+ CJK.htm
+ Fonts.htm
+ Hershey.htm
+ History*.htm
+ Install.htm
+ Language.htm
+ Make.htm
+ News.htm
+ Psfiles.htm
+
+ + Primarily for developers:
+
+ API.htm
+ C-style.htm
+ CJKTTCID.htm
+ DLL.htm
+ Develop.htm
+ Drivers.htm
+ Htmstyle.htm
+ Issues.htm
+ Lib.htm
+ Maintain.htm
+ Projects.htm
+ Ps-style.htm
+ Release.htm
+ Source.htm
+ Xfonts.htm
+ _________________________________________________________________
+
+Document roadmap by theme
+
+ What should I read if I'm a new user?
+
+ A new user of Ghostscript should begin by reading the material
+ specifically for new users, then as many of these documents as seem
+ useful:
+ * how to install Ghostscript
+ * how to use Ghostscript; some of this information information also
+ found in gs.1, the Unix "man" page for Ghostscript.
+ * the catalogs at the beginning of devs.mak and contrib.mak, which
+ list all the devices for which Ghostscript is able to produce
+ output (although if you got Ghostscript in binary form, it will
+ only include some of these devices)
+ * detailed information about some specific devices that Ghostscript
+ knows about
+ * more detailed information about how to use Ghostscript under Unix
+ with lpr as a filter for non-PostScript printers
+ * about the fonts distributed with Ghostscript, including how to add
+ or replace fonts
+ * a description of the Ghostscript language, and its differences
+ from the documented PostScript language
+ * about the postscript files distributed with Ghostscript (other
+ than fonts)
+
+ Before building Ghostscript
+
+ If you are going to compile Ghostscript, rather than just use an
+ executable you got from somewhere, you should read:
+ * how to build Ghostscript and install it
+ _________________________________________________________________
+
+What should I read if I'm not a new user?
+
+ If you have already used Ghostscript, when you receive a new release
+ you should begin by reading this file, then
+ * News.htm, for incompatible changes and new features in the current
+ release;
+ * Current.htm, for known problems in the current release;
+ * if you wish, Changes.htm, for a detailed list of changes in the
+ current release;
+ * if you wish, History#.htm (currently History7.htm), for changes in
+ other releases.
+ _________________________________________________________________
+
+What if I'm a developer?
+
+ If you are going to do any development on or with Ghostscript at all,
+ you should at least look at
+ * the roadmap documentation for Ghostscript's source files and
+ architecture
+
+ If you are going to write a new driver for Ghostscript, you should
+ read
+ * the guide to the Ghostscript source code
+ * the interface between Ghostscript and device drivers
+ * about the external font interface between Ghostscript and
+ platform-supplied fonts (but read about drivers in general first)
+
+ If you intend to use Ghostscript in the form of a dynamic link library
+ (DLL) under OS/2 or Microsoft Windows or in the form of shared object
+ under GNU/Linux, read
+ * documentation on Ghostscript Interpreter API
+
+ If you want to use Ghostscript as part of another program--as a
+ callable PostScript language interpreter--and not as a DLL or as a
+ self-contained executable application, you should begin by reading
+ * the source file imain.h, the documented API for Ghostscript not as
+ a DLL
+
+ or if you are going to use only the Ghostscript graphics library,
+ * about the structure of the Ghostscript library and its interfaces
+ _________________________________________________________________
+
+What if I'm writing documentation?
+
+ If you are editing or adding to Ghostscript's existing documentation
+ in HTML format, or writing a new document, you should read
+ * the coding and style guidelines for Ghostscript's HTML-based
+ documentation.
+ _________________________________________________________________
+
+Presence on the World Wide Web
+
+ Ghostscript's home page
+
+ GNU Ghostscript has a home page on the World Wide Web with helpful
+ information. Pleave visit:
+
+ http://www.gnu.org/software/ghostscript/
+
+ More material about Ghostscript can be found at
+
+ http://www.ghostscript.com/
+
+ Adobe PostScript, Encapsulated PostScript, and PDF reference documentation
+
+ Adobe makes a wealth of technical documentation available over the
+ Web, including the PostScript Language Reference Manual (Third
+ Edition); the Encapsulated PostScript (EPS) Format Specification
+ version 3, including Encapsulated PostScript Interchange (EPSI)
+ format; the PDF 1.3 specification; and the pdfmark, transparency and
+ Acrobat Distiller parameters documentation. Some of these documents
+ are also available at Adobe's ftp site, but not necessarily under the
+ same filenames.
+
+ Other material on the WWW
+
+ Much other material about Ghostscript is available on the World Wide
+ Web, both as web pages and as archived Usenet and mailing list
+ discussions. Use the well-known search engines to find such material.
+
+ There is a good manual for Ghostscript available in PDF form, in
+ English and German (and soon in Japanese), at:
+
+ http://www.pdflib.com/gsmanual
+
+ There is a translation of the Ghostscript 'man' pages into Czech at:
+
+ http://www.volny.cz/rebus/ghostscript/
+ _________________________________________________________________
+
+Which document contains what?
+
+ Here is the list in alphabetic order of Ghostscript documentation,
+ with explanations of the contents.
+
+ API.htm
+ On MS-Windows and OS/2, Ghostscript is compiled as a dynamic
+ link library (DLL). On GNU/Linux, Ghostscript can be compiled
+ as a shared object. This describes how to use it. For
+ developers.
+
+ C-style.htm
+ Guidelines and style for C coding, which you should follow if,
+ for example, you write a new driver or add or change something
+ in Ghostscript. For developers.
+
+ Changes.htm
+ A detailed list of all code changes in the current release or
+ pre-release, generated mechanically from the CVS logs. For
+ developers.
+
+ CJK.htm
+ Usage of features to support CJK CID-keyed fonts in
+ Ghostscript.
+
+ CJKTTCID.htm
+ Note providing information on utilization of CJK (Chinese,
+ Japanese and Korean) TrueType fonts as CIDFontType2 fonts from
+ the viewpoint of its validity and limitations.
+
+ Current.htm
+ Information specifically about the current release of
+ Ghostscript. See also the latest news of changes.
+
+ DLL.htm
+ On OS/2, MS Windows-16 and MS Windows-32 platforms, Ghostscript
+ is compiled as a dynamic link library (DLL). This describes how
+ to use it. For developers. This DLL interface is obsolete. Use
+ API.htm instead.
+
+ Develop.htm
+ Code orientation for developers. Contains a detailed breakdown
+ of the source files by functional group, and overviews of the
+ major architectural features and services.
+
+ Devices.htm
+ Detailed information about some specific devices for which
+ Ghostscript can produce output. Run "gs -h" to see which
+ devices a particular version of Ghostscript is built to use.
+
+ Drivers.htm
+ Describes the interface between Ghostscript and device drivers.
+ If you do this, you should also read and use the C style and
+ coding guidelines. Necessary to develop a new driver. For
+ developers.
+
+ Fonts.htm
+ All about fonts freely available for Ghostscript, and how to
+ add and use new fonts. Also describes how to use Ghostscript
+ fonts as X Windows fonts. For both users and developers.
+
+ Helpers.htm
+ A note of thanks to people who have helped in the development
+ of Ghostscript.
+
+ Hershey.htm
+ Part 1 of the five-part original Usenet distribution of the
+ free Hershey fonts, giving the terms of use and describing
+ their encoding.
+
+ History*.htm
+ The history of changes in all Ghostscript releases:
+
+ History7.htm for Ghostscript versions 7.n
+ History6.htm for Ghostscript versions 6.n
+ History5.htm for Ghostscript versions 5.n
+ History4.htm for Ghostscript versions 4.n
+ History3.htm for Ghostscript versions 3.n
+ History2.htm for Ghostscript versions 2.n
+ History1.htm for Ghostscript versions 1.n
+
+ Htmstyle.htm
+ The guidelines and style for HTML coding of Ghostscript's
+ documentation, which you should follow if, for example, you
+ change existing HTML documentation or write new documents. For
+ writers and editors.
+
+ Humor.htm
+ Another Ghostscript interpreter.
+
+ Install.htm
+ How to install Ghostscript. See also how to build it.
+
+ Issues.htm
+ A list of outstanding open issues in Ghostscript. These include
+ known limitations, minor bugs, performance issues, differences
+ from Adobe implementations, and others.
+
+ Language.htm
+ The relationship between the Ghostscript interpreter and the
+ PostScript language as defined by Adobe.
+
+ Lib.htm
+ A description of the Ghostscript library, a set of procedures
+ to implement the graphics and filtering capabilities that are
+ primitive operations in the PostScript language and in Adobe
+ Portable Document Format (PDF). For developers.
+
+ Maintain.htm
+ Assorted Ghostscript maintenance procedures. For developers.
+
+ Make.htm
+ How to build Ghostscript executables from the source code. See
+ also how to install it. It's not necessary to be a highly
+ experienced developer to build or install Ghostscript, but some
+ experience is needed.
+
+ New-user.htm
+ Essential information for new users of Ghostscript.
+
+ News.htm
+ A brief description of the latest release or pre-release of
+ Ghostscript, and a list of any incompatible changes in it.
+ Changes in older releases are described in the history files
+ "History*.htm", which are usually installed in the
+ documentation directory. Run "gs -h" to see where that is.
+
+ Projects.htm
+ A list of Ghostscript development projects with which we would
+ like help.
+
+ Ps-style.htm
+ The guidelines and style for postscript coding in Ghostscript.
+ Some of Ghostscript is implemented in the postscript language
+ itself, and various utilities and examples are distributed with
+ it. You should follow these guidelines if you're extending or
+ modifying those files. For developers.
+
+ Ps2epsi.htm
+ Detailed information on how to use Ghostscript through ps2epsi
+ to convert PostScript to Adobe Encapsulated PostScript
+ Interchange (EPSI) format.
+
+ Ps2pdf.htm
+ Detailed information on how to use Ghostscript through ps2pdf
+ to convert PostScript to Adobe Portable Document Format (PDF).
+
+ Psfiles.htm
+ A description of the PostScript files (other than font files)
+ distributed with Ghostscript, including initialization
+ routines, utility programs, and sample printable files.
+
+ Readme.htm
+ This document.
+
+ Release.htm
+ A description of how to prepare and test a Ghostscript release.
+ Of interest only to developers who want to create new
+ Ghostscript versions for distribution.
+
+ Source.htm
+ A guide to the Ghostscript source code, for development and
+ debugging.
+
+ Unix-lpr.htm
+ How to set up Ghostscript as a Unix lpr filter.
+
+ Use.htm
+ Detailed instructions on how to use Ghostscript, including such
+ matters as designating an output device; choosing a default
+ paper size; how Ghostscript finds files, including font files;
+ how it uses environment variables; notes on specific platforms,
+ including the X Window System; and command-line options.
+
+ Xfonts.htm
+ Ghostscript's external font interface to a host platform's
+ font-rendering mechanism, for developers.
+ _________________________________________________________________
+
+ Copyright © 1996, 2000 Aladdin Enterprises. All rights reserved.
+
+ This software is provided AS-IS with no warranty, either express or
+ implied. This software is distributed under license and may not be
+ copied, modified or distributed except as expressly authorized under
+ the terms of the license contained in the file LICENSE in this
+ distribution.
+
+ Ghostscript version 7.07, 17 May 2003
diff --git a/Master/xemtex/doc/ghostscript/Readme.htm b/Master/xemtex/doc/ghostscript/Readme.htm
new file mode 100644
index 00000000000..b1ed5164975
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Readme.htm
@@ -0,0 +1,634 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Overview of Ghostscript</title>
+<!-- $Id: Readme.htm,v 1.31.2.16.2.6 2003/05/17 14:39:00 giles Exp $ -->
+<!-- Originally: README -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Overview of Ghostscript</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>
+If this is your first contact with Ghostscript, before continuing here you
+should read the <a href="New-user.htm">documentation for new users</a>,
+where you'll find
+
+<ul>
+<li><a href="New-user.htm#Overview">what Ghostscript does</a> (PostScript
+and PDF previewing, conversion, and printing);
+
+<li>its <a href="New-user.htm#Find_Ghostscript">licensing terms</a> (free
+for ordinary use);
+
+<li>what <a href="New-user.htm#Platforms">platforms it runs on</a> (every
+platform you're likely to be interested in);
+
+<li>where to find some <a href="New-user.htm#Previewers">useful
+programs</a> that enhance Ghostscript (like user-friendly previewers for
+Unix, VMS, MS Windows, DOS, and Macintosh); and
+
+<li>what to do <a href="New-user.htm#Need_help">if you need help</a>.
+</ul>
+
+<p>
+The rest of this document is a roadmap to the Ghostscript documentation.
+After looking through it, if you want to install Ghostscript and not only
+use it, we recommend you read <a href="Install.htm">how to install
+Ghostscript</a>, and <a href="Make.htm">how to compile Ghostscript</a> from
+source code (which is necessary before installing it on Unix and VMS
+systems).
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Theme_roadmap">Document roadmap by theme</a>
+<ul>
+<li><a href="#New_users">What should I read if I'm a new user?</a>
+<li><a href="#Before_building">Before building Ghostscript</a>
+<li><a href="#Not_a_new_user">What should I read if I'm not a new user?</a>
+<li><a href="#Developer">What if I'm a developer?</a>
+<li><a href="#Writer">What if I'm writing documentation?</a>
+</ul>
+<li><a href="#Web_presence">Presence on the World Wide Web</a>
+<ul>
+<li><a href="#Web_home_page">Ghostscript's home pages</a>
+<li><a href="#Adobe_documentation">Adobe PostScript, Encapsulated
+PostScript, and PDF reference documentation</a>
+<li><a href="#Web_other">Other material on the WWW</a>
+</ul>
+<li><a href="#Ordered_roadmap">Which document contains what?</a>
+<ul>
+<li>Primarily for users:
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><td valign=top>
+<a href="#Devices">Devices.htm</a><br>
+<a href="#Helpers">Helpers.htm</a><br>
+<td>&nbsp;&nbsp;&nbsp;<td valign=top>
+<a href="#Humor">Humor.htm</a><br>
+<a href="#New-user">New-user.htm</a><br>
+<a href="#Ps2epsi">Ps2epsi.htm</a><br>
+<a href="#Ps2pdf">Ps2pdf.htm</a><br>
+<td>&nbsp;&nbsp;&nbsp;<td valign=top>
+<a href="#Readme">Readme.htm</a><br>
+<a href="#Unix-lpr">Unix-lpr.htm</a><br>
+<a href="#Use">Use.htm</a><br>
+<tr><td valign=top>
+</table></blockquote>
+<li>For both users and developers:
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><td valign=top>
+<a href="#Changes">Changes.htm</a><br>
+<a href="#Current">Current.htm</a><br>
+<a href="#CJK">CJK.htm</a><br>
+<a href="#Fonts">Fonts.htm</a><br>
+<td>&nbsp;&nbsp;&nbsp;<td valign=top>
+<a href="#Hershey">Hershey.htm</a><br>
+<a href="#History">History*.htm</a><br>
+<a href="#Install">Install.htm</a><br>
+<a href="#Language">Language.htm</a><br>
+<a href="#Make">Make.htm</a><br>
+<td>&nbsp;&nbsp;&nbsp;<td valign=top>
+<a href="#News">News.htm</a><br>
+<a href="#Psfiles">Psfiles.htm</a><br>
+</table></blockquote>
+<li>Primarily for developers:
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><td valign=top>
+<a href="#API">API.htm</a><br>
+<a href="#C-style">C-style.htm</a><br>
+<a href="#CJKTTCID">CJKTTCID.htm</a><br>
+<a href="#DLL">DLL.htm</a><br>
+<a href="#Develop">Develop.htm</a><br>
+<a href="#Drivers">Drivers.htm</a><br>
+<td>&nbsp;&nbsp;&nbsp;<td valign=top>
+<a href="#Htmstyle">Htmstyle.htm</a><br>
+<a href="#Issues">Issues.htm</a><br>
+<a href="#Lib">Lib.htm</a><br>
+<a href="#Maintain">Maintain.htm</a><br>
+<a href="#Projects">Projects.htm</a><br>
+<td>&nbsp;&nbsp;&nbsp;<td valign=top>
+<a href="#Ps-style">Ps-style.htm</a><br>
+<a href="#Release">Release.htm</a><br>
+<a href="#Source">Source.htm</a><br>
+<a href="#Xfonts">Xfonts.htm</a><br>
+</table></blockquote>
+</ul>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="Theme_roadmap"></a>Document roadmap by theme</h2>
+
+<h3><a name="New_users"></a>What should I read if I'm a new user?</h3>
+
+<p>
+A new user of Ghostscript should begin by reading the material
+<a href="New-user.htm">specifically for new users</a>, then as many of
+these documents as seem useful:
+
+<ul>
+<li>how to <a href="Install.htm">install Ghostscript</a>
+
+<li>how to <a href="Use.htm">use Ghostscript</a>; some of this information
+information also found in <b><tt>gs.1</tt></b>, the Unix
+"man" page for Ghostscript.
+
+<li>the catalogs at the beginning of <b><tt>devs.mak</tt></b> and
+<b><tt>contrib.mak</tt></b>, which list all the devices for which
+Ghostscript is able to produce output (although if you got Ghostscript in
+binary form, it will only include some of these devices)
+
+<li>detailed information about <a href="Devices.htm">some specific
+devices</a> that Ghostscript knows about
+
+<li>more detailed information about how to use Ghostscript under
+Unix with <b><tt>lpr</tt></b> <a href="Unix-lpr.htm">as a filter</a>
+for non-PostScript printers
+
+<li> about the <a href="Fonts.htm">fonts distributed with
+Ghostscript</a>, including how to add or replace fonts
+
+<li> a description of <a href="Language.htm">the Ghostscript language</a>,
+and its differences from the documented PostScript language
+
+<li> about the <a href="Psfiles.htm">postscript files distributed with
+Ghostscript</a> (other than fonts)
+</ul>
+
+<h3><a name="Before_building"></a>Before building Ghostscript</h3>
+
+<p>
+If you are going to compile Ghostscript, rather than just use an executable
+you got from somewhere, you should read:
+
+<ul>
+<li> <a href="Make.htm">how to build Ghostscript</a> and
+<a href="Install.htm">install it</a>
+</ul>
+
+<hr>
+
+<h2><a name="Not_a_new_user"></a>What should I read if I'm not a new user?</h2>
+
+<p>
+If you have already used Ghostscript, when you receive a new release you
+should begin by reading this file, then
+
+<ul>
+<li> <a href="News.htm">News.htm</a>, for incompatible changes and new
+features in the current release;
+
+<li> <a href="Current.htm">Current.htm</a>, for known problems in the
+current release;
+
+<li> if you wish, <a href="Changes.htm">Changes.htm</a>, for a detailed list
+of changes in the current release;
+
+<li> if you wish, History#.htm (currently <a
+href="History6.htm">History7.htm</a>), for changes in other releases.
+</ul>
+
+<hr>
+
+<h2><a name="Developer"></a>What if I'm a developer?</h2>
+
+<p>
+If you are going to do any development on or with Ghostscript at all, you
+should at least look at
+
+<ul>
+<li>the <a href="Develop.htm">roadmap documentation</a> for Ghostscript's
+source files and architecture
+</ul>
+
+<p>
+If you are going to write a new driver for Ghostscript, you should read
+
+<ul>
+<li> the <a href="Source.htm">guide to the Ghostscript source code</a>
+
+<li> the interface between Ghostscript and <a href="Drivers.htm">device
+drivers</a>
+
+<li> about the <a href="Xfonts.htm">external font interface</a> between
+Ghostscript and platform-supplied fonts (but read about
+<a href="Drivers.htm">drivers in general</a> first)
+</ul>
+
+<p>
+If you intend to use Ghostscript in the form of a dynamic link library
+(DLL) under OS/2 or Microsoft Windows or in the form of shared object
+under GNU/Linux, read
+
+<ul>
+<li> documentation on <a href="API.htm">Ghostscript Interpreter API</a>
+</ul>
+
+<p>
+If you want to use Ghostscript as part of another program--as a callable
+PostScript language interpreter--and not as a DLL or as a self-contained
+executable application, you should begin by reading
+
+<ul>
+<li> the source file <b><tt>imain.h</tt></b>, the documented
+API for Ghostscript <em>not</em> as a DLL
+</ul>
+
+<p>
+or if you are going to use only the Ghostscript graphics library,
+
+<ul>
+<li> about the structure of the <a href="Lib.htm">Ghostscript library</a>
+and its interfaces
+</ul>
+
+<hr>
+
+<h2><a name="Writer"></a>What if I'm writing documentation?</h2>
+
+<p>
+If you are editing or adding to Ghostscript's existing documentation in
+HTML format, or writing a new document, you should read
+
+<ul>
+<li> the <a href="Htmstyle.htm">coding and style guidelines</a> for
+Ghostscript's HTML-based documentation.
+</ul>
+
+<hr>
+
+<h2><a name="Web_presence"></a>Presence on the World Wide Web</h2>
+
+<h3><a name="Web_home_page"></a>Ghostscript's home page</h3>
+
+<p>
+GNU Ghostscript has a home page on the World Wide Web with helpful
+information. Pleave visit:
+
+<blockquote>
+<a href="http://www.gnu.org/software/ghostscript/"
+class="offsite">http://www.gnu.org/software/ghostscript/</a>
+</blockquote>
+
+<p>
+More material about Ghostscript can be found at
+
+<blockquote>
+<a href="http://www.ghostscript.com/" class="offsite">http://www.ghostscript.com/</a>
+</blockquote>
+
+<h3><a name="Adobe_documentation"></a>Adobe PostScript, Encapsulated
+PostScript, and PDF reference documentation</h3>
+
+<p>
+Adobe makes a wealth of
+<a href="http://partners.adobe.com/asn/developer/technotes.html"
+class="offsite">
+technical documentation</a> available over the Web, including the
+<a href="http://partners.adobe.com/asn/developer/pdfs/tn/PLRM.pdf"
+class="offsite">
+PostScript Language Reference Manual (Third Edition)</a>; the
+<a
+href="http://partners.adobe.com/asn/developer/pdfs/tn/5002.EPSF_Spec.pdf"
+class="offsite">
+Encapsulated PostScript</a> (EPS) Format Specification version 3, including
+<a href="#Ps2epsi">Encapsulated PostScript Interchange (EPSI)</a>
+format; the
+<a
+href="http://partners.adobe.com/asn/developer/acrosdk/DOCS/pdfspec.pdf"
+class="offsite">
+PDF 1.3 specification</a>; and the
+<a
+href="http://partners.adobe.com/asn/developer/acrosdk/DOCS/pdfmark.pdf"
+class="offsite">
+pdfmark</a>,
+<a href="http://partners.adobe.com/asn/developer/acrosdk/docs/PDF_Transparency.pdf"
+class="offsite">transparency</a> and
+<a
+href="http://partners.adobe.com/asn/developer/acrosdk/DOCS/distparm.pdf"
+class="offsite">
+Acrobat Distiller parameters</a> documentation. Some of these documents
+are also available at <a href="ftp://ftp.adobe.com/pub/adobe/"
+class="offsite">Adobe's ftp
+site</a>, but not necessarily under the same filenames.
+
+<h3><a name="Web_other"></a>Other material on the WWW</h3>
+
+<p>
+Much other material about Ghostscript is available on the World Wide Web,
+both as web pages and as archived Usenet and mailing list discussions. Use
+the well-known search engines to find such material.
+
+<p>
+There is a good manual for Ghostscript available in PDF form,
+in English and German (and soon in Japanese), at:
+
+<blockquote>
+<a href="http://www.pdflib.com"
+class="offsite">http://www.pdflib.com/gsmanual</a>
+</blockquote>
+
+<p>
+There is a translation of the Ghostscript 'man' pages into Czech at:
+
+<blockquote>
+<a href="http://www.volny.cz/rebus/ghostscript/"
+class="offsite">http://www.volny.cz/rebus/ghostscript/</a>
+</blockquote>
+
+<hr>
+
+<h2><a name="Ordered_roadmap"></a>Which document contains what?</h2>
+
+<p> Here is the list in alphabetic order of Ghostscript documentation,
+with explanations of the contents.
+
+<dl>
+<dt><a name="API"></a><a href="API.htm"><b>API.htm</b></a>
+<dd> On MS-Windows and OS/2, Ghostscript is compiled as a dynamic
+link library (DLL). On GNU/Linux, Ghostscript can be compiled as
+a shared object. This describes how to use it.
+For developers.
+</dl>
+
+<dl>
+<dt><a name="C-style"></a><a href="C-style.htm"><b>C-style.htm</b></a>
+<dd> Guidelines and style for C coding, which you should follow
+if, for example, you <a href="#Drivers">write a new driver</a> or add or
+change something in Ghostscript. For developers.
+</dl>
+
+<dl>
+<dt><a name="Changes"></a><a href="Changes.htm"><b>Changes.htm</b></a>
+<dd> A detailed list of all code changes in the current release or
+pre-release, generated mechanically from the CVS logs. For developers.
+</dl>
+
+<dl>
+<dt><a name="CJK"></a><a href="CJK.htm"><b>CJK.htm</b></a>
+<dd> Usage of features to support CJK CID-keyed fonts in Ghostscript.
+</dl>
+
+<dl>
+<dt><a name="CJKTTCID"></a><a href="CJKTTCID.htm"><b>CJKTTCID.htm</b></a>
+<dd> Note providing information on utilization of CJK (Chinese,
+Japanese and Korean) TrueType fonts as CIDFontType2 fonts from the
+viewpoint of its validity and limitations.
+</dl>
+
+<dl>
+<dt><a name="Current"></a><a href="Current.htm"><b>Current.htm</b></a>
+<dd> Information specifically about the current release of Ghostscript.
+See also the <a href="#News">latest news</a> of changes.
+</dl>
+
+<dl>
+<dt><a name="DLL"></a><a href="DLL.htm"><b>DLL.htm</b></a>
+<dd> On OS/2, MS Windows-16 and MS Windows-32 platforms, Ghostscript is
+compiled as a dynamic link library (DLL). This describes how to use it.
+For developers. <b>This DLL interface is obsolete.</b>
+Use <a href="#API"><b>API.htm</b></a> instead.
+</dl>
+
+<dl>
+<dt><a name="Develop"></a><a href="Develop.htm"><b>Develop.htm</b></a>
+<dd> Code orientation for developers. Contains a detailed breakdown of
+the source files by functional group, and overviews of the major
+architectural features and services.
+</dl>
+
+<dl>
+<dt><a name="Devices"></a><a href="Devices.htm"><b>Devices.htm</b></a>
+<dd> Detailed information about some specific devices for which Ghostscript
+can produce output. Run "<b><tt>gs&nbsp;-h</tt></b>" to see which
+devices a particular version of Ghostscript is built to use.
+</dl>
+
+<dl>
+<dt><a name="Drivers"></a><a href="Drivers.htm"><b>Drivers.htm</b></a>
+<dd> Describes the interface between Ghostscript and device drivers. If
+you do this, you should also read and use the <a href="#C-style">C style
+and coding guidelines</a>. Necessary to develop a new driver. For
+developers.
+</dl>
+
+<dl>
+<dt><a name="Fonts"></a><a href="Fonts.htm"><b>Fonts.htm</b></a> <dd> All
+about fonts freely available for Ghostscript, and how to add and use new
+fonts. Also describes how to use Ghostscript fonts as X Windows fonts. For
+both users and developers.
+</dl>
+
+<dl>
+<dt><a name="Helpers"></a><a href="Helpers.htm"><b>Helpers.htm</b></a>
+<dd> A note of thanks to people who have helped in the development of
+Ghostscript.
+</dl>
+
+<dl>
+<dt><a name="Hershey"></a><a href="Hershey.htm"><b>Hershey.htm</b></a>
+<dd> Part 1 of the five-part original Usenet distribution of the free
+Hershey fonts, giving the terms of use and describing their encoding.
+</dl>
+
+<dl>
+<dt><a name="History"></a><b>History*.htm</b>
+<dd> The history of changes in all Ghostscript releases:
+<blockquote>
+<a href="History7.htm">History7.htm</a> for Ghostscript versions 7.n<br>
+<a href="History6.htm">History6.htm</a> for Ghostscript versions 6.n<br>
+<a href="History5.htm">History5.htm</a> for Ghostscript versions 5.n<br>
+<a href="History4.htm">History4.htm</a> for Ghostscript versions 4.n<br>
+<a href="History3.htm">History3.htm</a> for Ghostscript versions 3.n<br>
+<a href="History2.htm">History2.htm</a> for Ghostscript versions 2.n<br>
+<a href="History1.htm">History1.htm</a> for Ghostscript versions 1.n
+</blockquote>
+</dl>
+
+<dl>
+<dt><a name="Htmstyle"></a><a href="Htmstyle.htm"><b>Htmstyle.htm</b></a>
+<dd> The guidelines and style for HTML coding of Ghostscript's
+documentation, which you should follow if, for example, you change existing
+HTML documentation or write new documents. For writers and editors.
+</dl>
+
+<dl>
+<dt><a name="Humor"></a><a href="Humor.htm"><b>Humor.htm</b></a>
+<dd> Another Ghostscript interpreter.
+</dl>
+
+<dl>
+<dt><a name="Install"></a><a href="Install.htm"><b>Install.htm</b></a>
+<dd> How to install Ghostscript. See also <a href="#Make">how to build
+it</a>.
+</dl>
+
+<dl>
+<dt><a name="Issues"></a><a href="Issues.htm"><b>Issues.htm</b></a>
+<dd> A list of outstanding open issues in Ghostscript. These include
+known limitations, minor bugs, performance issues, differences from
+Adobe implementations, and others.
+</dl>
+
+<dl>
+<dt><a name="Language"></a><a href="Language.htm"><b>Language.htm</b></a>
+<dd> The relationship between the Ghostscript interpreter and the
+PostScript language as defined by Adobe.
+</dl>
+
+<dl>
+<dt><a name="Lib"></a><a href="Lib.htm"><b>Lib.htm</b></a>
+<dd> A description of the Ghostscript library, a set of procedures to
+implement the graphics and filtering capabilities that are primitive
+operations in the PostScript language and in Adobe Portable Document Format
+(PDF). For developers.
+</dl>
+
+<dl>
+<dt><a name="Maintain"></a><a href="Maintain.htm"><b>Maintain.htm</b></a>
+<dd> Assorted Ghostscript maintenance procedures. For developers.
+</dl>
+
+<dl>
+<dt><a name="Make"></a><a href="Make.htm"><b>Make.htm</b></a>
+<dd> How to build Ghostscript executables from the source code. See also
+<a href="#Install">how to install it</a>. It's not necessary to be a highly
+experienced developer to build or install Ghostscript, but some experience
+is needed.
+</dl>
+
+<dl>
+<dt><a name="New-user"></a><a href="New-user.htm"><b>New-user.htm</b></a>
+<dd> Essential information for new users of Ghostscript.
+</dl>
+
+<dl>
+<dt><a name="News"></a><a href="News.htm"><b>News.htm</b></a>
+<dd> A brief description of the latest release or pre-release of
+Ghostscript, and a list of any incompatible changes in it. Changes in older
+releases are described in the history files "<b><tt>History*.htm</tt></b>",
+which are usually installed in the documentation directory. Run
+"<b><tt>gs&nbsp;-h</tt></b>" to see where that is.
+</dl>
+
+<dl>
+<dt><a name="Projects"></a><a href="Projects.htm"><b>Projects.htm</b></a>
+<dd> A list of Ghostscript development projects with which we would like
+help.
+</dl>
+
+<dl>
+<dt><a name="Ps-style"></a><a
+href="Ps-style.htm"><b>Ps-style.htm</b></a>
+<dd> The guidelines and style for postscript coding in Ghostscript. Some
+of Ghostscript is implemented in the postscript language itself, and
+various utilities and examples are distributed with it. You should
+follow these guidelines if you're extending or modifying those files.
+For developers.
+</dl>
+
+<dl>
+<dt><a name="Ps2epsi"></a><a href="Ps2epsi.htm"><b>Ps2epsi.htm</b></a>
+<dd> Detailed information on how to use Ghostscript through
+<tt><b>ps2epsi</b></tt> to convert PostScript to Adobe
+Encapsulated PostScript Interchange (EPSI) format.
+</dl>
+
+<dl>
+<dt><a name="Ps2pdf"></a><a href="Ps2pdf.htm"><b>Ps2pdf.htm</b></a>
+<dd> Detailed information on how to use Ghostscript through
+<tt><b>ps2pdf</b></tt> to convert PostScript to Adobe
+Portable Document Format (PDF).
+</dl>
+
+<dl>
+<dt><a name="Psfiles"></a><a href="Psfiles.htm"><b>Psfiles.htm</b></a>
+<dd> A description of the PostScript files (other than font files)
+distributed with Ghostscript, including initialization routines, utility
+programs, and sample printable files.
+</dl>
+
+<dl>
+<dt><a name="Readme"></a><b>Readme.htm</b>
+<dd> This document.
+</dl>
+
+<dl>
+<dt><a name="Release"></a><a href="Release.htm"><b>Release.htm</b></a>
+<dd> A description of how to prepare and test a Ghostscript release. Of
+interest only to developers who want to create new Ghostscript versions for
+distribution.
+</dl>
+
+<dl>
+<dt><a name="Source"></a><a href="Source.htm"><b>Source.htm</b></a>
+<dd> A guide to the Ghostscript source code, for development and debugging.
+</dl>
+
+<dl>
+<dt><a name="Unix-lpr"></a><a href="Unix-lpr.htm"><b>Unix-lpr.htm</b></a>
+<dd> How to set up Ghostscript as a Unix <tt><b>lpr</b></tt>
+filter.
+</dl>
+
+<dl>
+<dt><a name="Use"></a><a href="Use.htm"><b>Use.htm</b></a>
+<dd> Detailed instructions on how to use Ghostscript, including such
+matters as designating an output device; choosing a default paper size;
+how Ghostscript finds files, including font files; how it uses environment
+variables; notes on specific platforms, including the X Window System; and
+command-line options.
+</dl>
+
+<dl>
+<dt><a name="Xfonts"></a><a href="Xfonts.htm"><b>Xfonts.htm</b></a>
+<dd> Ghostscript's external font interface to a host platform's
+font-rendering mechanism, for developers.
+</dl>
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 2000 Aladdin Enterprises. All rights
+reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Release.htm b/Master/xemtex/doc/ghostscript/Release.htm
new file mode 100644
index 00000000000..561de32658c
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Release.htm
@@ -0,0 +1,769 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>How to prepare a Ghostscript release</title>
+<!-- $Id: Release.htm,v 1.40.2.23.2.6 2003/05/17 14:39:00 giles Exp $ -->
+<!-- Originally: make.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>How to prepare a Ghostscript release</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Introduction">Introduction</a>
+<li><a href="#Servers">Servers</a>
+<ul>
+<li><a href="#Distribution">Distribution</a>
+</ul>
+<li><a href="#Making_distributions">Making distributions</a>
+<ul>
+<li><a href="#Preparing_source">Preparing the source code</a>
+<li><a href="#Testing">Testing</a>
+<li><a href="#Making_Tarballs">Making the source distribution</a>
+<li><a href="#Testing_on_Windows">Testing on Windows</a>
+<li><a href="#Windows_distribution">Building the Windows distribution</a>
+<li><a href="#Finishing_up">Finishing up</a>
+<li><a href="#Beta_distributions">Beta distributions</a>
+<li><a href="#Public_releases">Public releases</a>
+</ul>
+<li><a href="#After_releasing">After releasing</a>
+<li><a href="#Fonts">Fonts</a>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a> and the instructions on how to <a href="Make.htm">build
+Ghostscript</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="Introduction"></a>Introduction</h2>
+
+<p>
+This document describes the process that artofcode LLC, the copyright holder
+of Ghostscript, uses for making new Ghostscript releases. Please note
+that while the the license allows anyone to prepare and distribute
+releases in accordance with its terms and conditions, this document is
+really meant only to document the process used by artofcode LLC.
+However, the eventual purpose of this document is to describe
+Ghostscript release procedures in enough detail that someone who knows
+little about Ghostscript but is generally familiar with the platform on
+which the procedure is being carried out can execute the procedures
+correctly. So if you add or changing anything to/in this document,
+be sure to specify all command lines, file names, etc. in explicit
+detail.
+
+<p>
+File names below that don't include an explicit subdirectory name are in the
+<b><tt>src</tt></b> subdirectory.
+
+<p>
+If you do plan to make your own distribution, please be aware of some items
+you will want to change.
+
+<ul>
+
+<li>If you make any significant changes, please edit
+<b><tt>gscdef.c</tt></b> to change <b><tt>GS_PRODUCTFAMILY</tt></b> and
+<b><tt>GS_PRODUCT</tt></b> from "GNU Ghostscript" to something else,
+in order to avoid confusion with artofcode's releases.
+
+<li>In the same file, you may also want to edit <b><tt>GS_COPYRIGHT</tt></b>
+to add your own copyright notice (although you must not remove any
+notice that is there).
+
+<li>You will almost certainly want to edit <b><tt>version.mak</tt></b> to
+change the revision date, <b><tt>GS_REVISIONDATE</tt></b>.
+
+<li>If you want to change the version number, you must change it in both
+<b><tt>version.mak</tt></b> (<b><tt>GS_VERSION_</tt></b>*) and
+<b><tt>lib/gs_init.ps</tt></b> (the integer on a line by itself near the
+beginning of the file).
+
+</ul>
+
+<h2><a name="Servers"></a>Servers</h2>
+
+<p>
+The Ghostscript source files are maintained on sites accessible to
+the public. One specific site hosts the active CVS repository for code,
+data, and documentation, and the bug report data base; several sites
+offer distributions with version numbers, intended for wider
+distribution.
+
+<h3><a name="Distribution"></a>Distribution</h3>
+
+<p>
+The primary distribution site for GNU Ghostscript is the <a
+href="ftp://ftp.gnu.org/gnu/ghostscript/" class="offsite">GNU ftp
+site</a> and its <a
+href="http://www.gnu.org/prep/ftp.html" class="offsite">mirrors</a>.
+
+<p>
+Stable releases are also distributed from
+
+<blockquote>
+<a
+href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/"
+class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/</a>
+</blockquote>
+
+<h2><a name="Making_distributions"></a>Making distributions</h2>
+
+<p>
+This document only discusses source distributions. Source distributions
+currently can only be made on GNU/Linux systems (but it probably wouldn't
+take much work to support other Unix-like systems). Ghostscript as
+distributed also
+often includes executables or other packages for the Windows and MacOS
+environments, but artofcode does not produce these, and this document does not
+discuss them. For more information about Windows packages, please contact
+<a href="mailto:bug-gswin@ghostscript.com"><tt>bug-gswin@ghostscript.com</tt></a>;
+for more information about MacOS packages, please contact <a
+href="mailto:mac-gs@ghostscript.com"><tt>mac-gs@ghostscript.com</tt></a>.
+
+<p>
+To make a source distribution, you will need the scripts and data files in
+the <b><tt>toolbin/</tt></b> directory. The instructions below generally
+assume that you're invoking the relative to the top level of the source
+tree.
+
+To run the scripts, you will need reasonably current versions of Tcl,
+freely available from Scriptics
+(<a class="offsite" href="http://www.scriptics.com"><tt>http://www.scriptics.com</tt></a>), and
+Python, freely available from <a class="offsite"
+href="http://www.python.org"><tt>http://www.python.org</tt></a>.
+
+<p>
+The instructions below also refer to some files that are deliberately
+omitted from the public distribution, because they are not freely
+redistributable. You will need to provide similar files for your
+environment.
+
+<blockquote><pre>
+<b><tt>data/*/*.ps</tt></b> (PostScript files) - needed for smoke testing
+</pre></blockquote>
+
+<h3><a name="Preparing_source"></a>Preparing the source code</h3>
+
+<p>
+Update references to the date for release:
+
+<ul>
+
+<li>In <b><tt>lib/gs_init.ps</tt></b>, as an integer (release number
+x100) at the beginning of the file just after the initial comment
+blocks.
+
+<li>In <b><tt>version.mak</tt></b>, the numeric date.
+
+<li>In <b><tt>doc/News.htm</tt></b>, in two places, skipping the Id:
+line. That is, in parentheses after the <tt>VERSION X.YY</tt> heading,
+and in the copyright footer both the year and the release date.
+
+</ul>
+
+We recommend using a UTC release date to avoid timezone skew.
+
+<p>
+Also in <b><tt>doc/News.htm</tt></b>, update the number of the highest
+closed bug and the list of open bugs.
+
+<p>
+Check in <b><tt>gscdef.c</tt></b> that the definition of
+<b><tt>GS_PRODUCT</tt></b> includes the appropriate one of "DEVELOPMENT
+RELEASE", "BETA RELEASE", or neither, and does not include "CVS
+PRE-RELEASE".
+
+<p>Run the source-consistency checks from the test suite:
+
+<blockquote><pre>
+toolbin/tests/check_all.py --gsroot=.
+</pre></blockquote>
+Where the argument of --gsroot is the path to the top level of the
+source tree. Fix any problems it indicates, and commit them to cvs.
+
+<p>
+Check for patched configuration parameters, <b><tt>#define TEST</tt></b>s,
+version/date inconsistencies, and mismatches between the working directory
+and the CVS repository by running:
+
+<blockquote><pre>
+toolbin/pre
+</pre></blockquote>
+
+<p>
+This program compares the result of various greps against a check file,
+writing the results of grep on one output file and the differences from the
+check file on another. See the source code of
+<b><tt>toolbin/pre</tt></b> for the default file names. The
+important one is the check file,
+<b><tt>toolbin/pre.chk</tt></b>. <b><tt>pre</tt></b> also verifies
+that the
+right information is in the following places:
+<ul>
+<li>version number in <b><tt>man/*.1</tt></b>, <b><tt>doc/*.htm</tt></b>,
+<b><tt>version.mak</tt></b>, <b><tt>doc/gs-vms.hlp</tt></b>,
+<b><tt>lib/gs_init.ps</tt></b>
+<li>revision date in <b><tt>man/*.1</tt></b>, <b><tt>doc/*.htm</tt></b>,
+<b><tt>version.mak</tt></b>, <b><tt>doc/gs-vms.hlp</tt></b>
+<li>copyright year (if necessary) in <b><tt>gscdef.c</tt></b>
+<li>third-party library version number in <b><tt>*.mak</tt></b>
+</ul>
+
+<p>
+If necessary, run
+
+<blockquote><pre>
+toolbin/pre update
+</pre></blockquote>
+
+<p>
+to update the version and revision date in the doc files, and then run
+
+<blockquote><pre>
+toolbin/pre
+</pre></blockquote>
+
+<p>
+again. To confirm that everything is updated. You may have to commit to
+cvs after the update to satify the script that all the dates are
+correct.
+
+<p>
+Check the consistency of the source code with the makefiles by
+running:
+
+<blockquote><pre>
+toolbin/gsmake.tcl check
+</pre></blockquote>
+
+This script assumes the top level makefile is named '<tt>makefile</tt>'.
+
+<p>
+Fix any problems and commit to cvs.
+
+<h3><a name="Testing"></a>Testing</h3>
+
+<p>
+Edit your top-level the Makefile to set
+<blockquote><pre>
+FEATURE_DEVS=$(FEATURE_DEVS_ALL)
+COMPILE_INITS=1
+</pre></blockquote>
+
+<p>
+This will help catch compilation problems.
+
+<p>
+Run
+
+<blockquote><pre>
+rm obj/*
+make -j2 &gt;&amp; make.log
+</pre></blockquote>
+
+<p>
+and look for warnings and errors in the log file.
+
+<p>
+Do a smoke test, updating the example paths as necessary:
+
+<blockquote><pre>
+unset GS_DEVICE GS_FONTPATH GS_LIB GS_OPTIONS
+./bin/gs -I./lib -I./fonts -dNOPAUSE -dBATCH /gs/toolbin/smoke.ps
+./bin/gs -I./lib -I./fonts -dNOPAUSE -dBATCH -sDEVICE=bitcmyk\
+ -sOutputFile=/dev/null -r600 -dBufferSpace=50000 /gs/toolbin/smoke.ps
+</pre></blockquote>
+
+<p>
+This reads files named
+
+<blockquote><pre>
+<b><tt>data/misc/*.ps</tt></b>
+<b><tt>data/ps/*.ps</tt></b>
+<b><tt>data/psl2/*.ps</tt></b>
+<b><tt>data/psl3/*.ps</tt></b>
+<b><tt>data/pdf/*.pdf</tt></b>
+</pre></blockquote>
+
+<p>
+(Edit <b><tt>toolbin/smoke.ps</tt></b> to use other test sets.)
+Watch for crashes, unusual error messages, or anomalous displayed output.
+If there are any problems, start over from the beginning of the process.
+
+<p>
+Undo the <b><tt>FEATURE_DEVS</tt></b> and <b><tt>COMPILE_INITS</tt></b>
+edits.
+
+<p>
+Run
+
+<blockquote><pre>
+cvs commit
+</pre></blockquote>
+
+<p>
+to ensure the repository is up to date.
+
+<p>
+Execute
+
+<blockquote><pre>
+toolbin/cvs2hist.py -j &lt;previous_tag&gt; -r '-r&lt;branch_tag&gt;' -v &lt;new_version&gt; &gt; doc/Changes.htm
+</pre>
+e.g. <pre>toolbin/cvs2hist.py -j gs7_04 -r '-rGS_7_0X' -v 7.05</pre>
+</blockquote>
+
+<p>
+This consolidates all the CVS logs since the previous release in a readable
+format. Note: the cvs2hist.py tool currently in the distribution is not
+very branch-aware (nor is the 'cvs log' command it depends on) so the extra
+complication of the -j and -r options are required when generating the Changes
+for a non-HEAD branch of Ghostscript. Note that the -r option should be
+an empty '-b' when generating logs for the cvs main branch due to
+variations in naming.
+
+<p>
+Run
+
+<blockquote><pre>
+tclsh
+% source toolbin/makeset.tcl
+% makehist
+</pre></blockquote>
+
+<p>
+This updates <b><tt>doc/History#.htm</tt></b> from
+<b><tt>doc/News.htm</tt></b> and <b><tt>doc/Changes.htm</tt></b>.
+
+Then run
+
+<blockquote><pre>
+cvs commit
+</pre></blockquote>
+
+<p>
+again to check in the Changes and history files.
+
+<h3><a name="Making_Tarballs"></a>Making the source distribution</h3>
+
+<p>
+First, tag the versions of the files in cvs with the release version
+number.
+
+<blockquote>
+<pre><tt>cvs tag gs#_##</tt></pre>
+</blockquote>
+
+If you've already tagged this release (e.g. in making an earlier
+release candidate) you'll need to add the <tt>-r</tt> and <tt>-F</tt>
+options after 'cvs tag' to force moving the tag to the new revisions
+of changed files.
+
+<p>
+Pull a fresh copy for distribution from the cvs repository:
+
+<blockquote><pre>
+<tt>cvs -z3 -d &lt;ghostscript cvsroot&gt; export -r gs#_## -d ghostscript-#.## gs</tt>
+</pre></blockquote>
+
+
+<p>
+Generate the text versions of the README document:
+
+<blockquote>
+<pre><tt>cd ghostscript-#.##</tt>
+<tt>lynx -dump -nolist doc/Readme.htm &gt; doc/README</tt>
+</blockquote>
+
+<p>
+For the unix source distributions only, generate the configure
+scripts. From the top level directory, run
+
+<blockquote><pre><tt>./autogen.sh</tt>
+<tt>make distclean</tt>
+</pre></blockquote>
+
+This should create links to <tt>configure.ac</tt> and
+<tt>Makefile.in</tt> in the top level directory and
+invoke autoconf to create the <tt>configure</tt> script.
+
+<p>
+Also, run <tt>autoconf</tt> in the ijs subdir to create the configure script
+for that package.
+
+<p>
+Move back to directory containing the distribution code and make the
+source archives with:
+
+<blockquote><pre>
+<tt>tar cvzf ghostscript-#.##.tar.gz ghostscript-#.##/*</tt>
+<tt>zcat ghostscript-#.##.tar.gz | bzip2 -c > ghostscript-#.##.tar.bz2</tt>
+</pre></blockquote>
+
+<p>
+This creates the files
+
+<blockquote><pre>
+<b><tt>ghostscript-#.##.tar.gz</tt></b> (main archive)
+<b><tt>ghostscript-#.##.tar.bz2</tt></b> (main archive)
+</pre></blockquote>
+
+<p>
+The important issue is that the tarballs unpack into a directory
+of the same name, and that the code be a pristine copy without
+build or CVS housekeeping files.
+
+<p>
+It is also customary to make a <tt>gs###src.zip</tt> archive for the
+convenience of windows developers. See below.
+
+<h3><a name="Testing_on_Windows"></a>Testing on Windows</h3>
+
+<p>
+For Windows testing, you will need, in addition to the files listed
+under "<a href="#Preparing_source">Preparing the source</a>" above:
+<blockquote><pre>
+<b><tt>toolbin/makewin</tt></b> (link to <b><tt>makeset.tcl</tt></b>)
+</pre></blockquote>
+
+<p>
+The following procedures rely on a large number of MS-DOS batch scripts that
+are not discussed here: they are unlikely to be generally useful.
+
+<p>
+Mount the Windows partition on <b><tt>/c</tt></b>, and create the
+<b><tt>/c/work</tt></b> directory if needed.
+
+<p>
+Make the zip archive of all files needed for a Windows build, and copy it to
+the Windows partition:
+
+<blockquote><pre>
+toolbin/makewin
+cp gs###.zip /c/work
+</pre></blockquote>
+
+<p>
+Boot into Windows. Unpack the archive:
+
+<blockquote><pre>
+cd \work
+unzip -oq gs###.zip
+gs###
+</pre></blockquote>
+
+<p>
+The <b><tt>gs###.bat</tt></b> script creates some necessary directories,
+sets up <b><tt>PATH</tt></b> and <b><tt>GS_LIB</tt></b> for testing, and
+makes the <b><tt>gs#.##</tt></b> directory current.
+
+<p>
+Build with the Borland compiler:
+
+<blockquote><pre>
+config bcwin32
+copy /y /b ..\gs\makefile
+erase obj\*.*
+make > bc.log
+</pre></blockquote>
+
+<p>
+Smoke test the executables (both <b><tt>gswin32</tt></b> and
+<b><tt>gswin32c</tt></b>), as described above for source distributions.
+Then build with the Microsoft compiler:
+
+<blockquote><pre>
+config msvc32
+copy /y /b ..\gs\makefile
+erase obj\*.*
+nmake > msvc.log
+</pre></blockquote>
+
+<p>
+Smoke test these executables too.
+
+<p>
+Building with the Watcom compiler doesn't work, because the
+<b><tt>wmake</tt></b> or <b><tt>wmakel</tt></b> program runs out of memory.
+However, if it did work, this is how to do it:
+
+<blockquote><pre>
+config watcw32
+copy /y /b ..\gs\makefile
+erase obj\*.*
+wmake -u > watc.log
+</pre></blockquote>
+
+<p>
+Boot back into GNU/Linux. If testing in Windows revealed problems, edit the
+source files as necessary, and go back to <a
+href="#Preparing_source">"Preparing the source code."</a>
+
+<h3><a name="Windows_distribution"></a>Building the Windows distribution</h3>
+<p>
+Extract the sources from <b><tt>ghostscript-N.NN.tar.gz</tt></b>
+then repackage in a zip file as follows:
+<blockquote>
+<b><tt>zip -r temp.zip gsN.NN/doc gsN.NN/examples gsN.NN/icclib
+ gsN.NN/ijs gsN.NN/lib gsN.NN/src</tt></b>
+</blockquote>
+Unzip converting the line endings to CRLF:
+<blockquote>
+<b><tt>unzip -a temp.zip<br>
+del temp.zip</tt></b>
+</blockquote>
+Then finally zip up the sources to the distribution file:
+<blockquote>
+<b><tt>zip -9 -r gsNNNsrc.zip gsN.NN</tt></b>
+</blockquote>
+This method is reasonably portable, and does not convert binary
+files such as
+<b><tt><a href="../examples/annots.pdf">examples/annots.pdf</a></tt></b>.
+<p>
+Unzip <b><tt>gsNNNsrc.zip</tt></b>.
+The directory must be named <b><tt>gsN.NN</tt></b>.
+<p>
+Extract the fonts <b><tt>gnu-gs-fonts-std-6.0.tar.gz</tt></b>
+into a directory <b><tt>fonts</tt></b> adjacent to the
+<b><tt>gsN.NN</tt></b> directory.
+The fonts are needed in this location for building
+the distribution archive later.
+<p>
+You will need the command line Info-Zip zip program available from
+<a href="http://www.info-zip.org/pub/infozip/">
+http://www.info-zip.org/pub/infozip/</a>
+Alternatively, the command line version of WinZip
+(<b><tt>wzzip.exe</tt></b>) can be used by replacing the
+Info-Zip command line options <b><tt>-9 -r</tt></b>
+with <b><tt>-ex -P</tt></b> in
+<b><tt><a href="../src/winint.mak">winint.mak</a></tt></b>.
+<p>
+You will need WinZip Self-Extractor for building the
+self extracting archive. This is commercial software.
+You may need to update the path <b><tt>WINZIPSE_XE</tt></b> in
+<b><tt><a href="../src/winint.mak">winint.mak</a></tt></b>.
+<p>
+Unzip the jpeg, libpng and zlib libraries, then make ghostscript
+as documented in <a href="Make.htm">Make.htm</a>.
+<p>
+Run the command <b><tt>nmake archive</tt></b>. This builds the distribution
+archive <b><tt>gsNNNw32.exe</tt></b> and an ordinary zip file
+<b><tt>gsNNNw32.zip</tt></b> in the parent directory.
+If you do not have WinZip Self-Extractor, you can use
+<b><tt>nmake zip</tt></b> to make <b><tt>gsNNNw32.zip</tt></b> only.
+
+<h3><a name="Finishing_up"></a>Finishing up</h3>
+
+<p>
+Upload <b><tt>ghostscript-#.##.tar.*</tt></b> to SourceForge (by anonymous
+FTP to <b><tt>upload.sourceforge.net</tt></b>, directory
+<b><tt>/incoming</tt></b>), and then post it using the "File Release"
+facility in the Ghostscript project.
+If this is a GNU release, put it in the <b><tt>gnu-gs</tt></b> module.
+If this is a test release or beta release, put
+it in the <b><tt>gs-devel</tt></b> or <b><tt>gs-beta</tt></b> module,
+respectively.
+If you are adding executable builds or source archives for other
+platforms to an existing source release, please use the same release
+date as the source release, not the current date.
+
+<h3><a name="Beta_distributions"></a>Beta distributions</h3>
+
+<p>
+Do the steps for distributions in general.
+
+<p>
+Upload <b><tt>ghostscript-#.##.tar.*</tt></b> to the testing directory on
+mirror.cs.wisc.edu.
+
+<p>
+Send an email announcement to the <tt>gs-test</tt> list
+announcing the new release.
+
+<h3><a name="Public_releases"></a>Public releases</h3>
+
+<p>
+Update the title (current version #), first heading (previous version #),
+and "new features" and "known problems" lists in
+<b><tt>doc/Current.htm</tt></b>.
+
+<p>
+Do the steps for distributions in general.
+
+<p>
+Create a directory at
+<b><tt>ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/gs###/</tt></b>.
+In that
+directory, store the following files:
+
+<ul>
+
+<li>Standard distribution files:
+
+<blockquote><pre>
+<b><tt>ghostscript-#.##.tar.gz</tt></b>
+<b><tt>ghostscript-#.##.tar.bz2</tt></b>
+</pre></blockquote>
+
+<li>MS Windows source and executables:
+
+<blockquote><pre>
+<b><tt>gs###src.zip</tt></b>
+<b><tt>gs###w32.exe</tt></b>
+<b><tt>gs###w32.zip</tt></b>
+</pre></blockquote>
+
+<li>Third-party libraries, as links (upload these if not installed), where
+<b><tt>$$$</tt></b> et al. refer to the version number of the library, which
+should be the latest compatible release of the library and should be
+consistent with the values of and version numbers specifically listed in
+the makefiles.
+
+<blockquote><pre>
+<b><tt>jpegsrc.v$$.tar.gz</tt></b> -> <b><tt>../../3rdparty/jpegsrc.v$$.tar.gz</tt></b>
+<b><tt>libpng-$.$.$.tar.gz</tt></b> -> <b><tt>../../3rdparty/libpng-$.$.$.tar.gz</tt></b>
+<b><tt>zlib-$.$.$.tar.gz</tt></b> -> <b><tt>../../3rdparty/zlib-$.$.$.tar.gz</tt></b>
+<b><tt>jpegsr$$.zip</tt></b> -> <b><tt>../../3rdparty/jpegsr$$.zip</tt></b>
+<b><tt>lpng$$$.zip</tt></b> -> <b><tt>../../3rdparty/lpng$$$.zip</tt></b>
+<b><tt>zlib$$$.zip</tt></b> -> <b><tt>../../3rdparty/zlib$$$.zip</tt></b>
+</pre></blockquote>
+
+In any case, the names of the links in the distribution directory should reflect
+the original name of the upstream file.
+
+<li>Fonts, where <b><tt>$.$$</tt></b> refers to the most recent version
+number of the fonts:
+
+<blockquote><pre>
+<b><tt>ghostscript-fonts-other-$.$.tar.gz</tt></b> -> <b><tt>../fonts/ghostscript-fonts-other-$.$.tar.gz</tt></b>
+<b><tt>ghostscript-fonts-std-$.$.tar.gz</tt></b> -> <b><tt>../fonts/ghostscript-fonts-std-$.$.tar.gz</tt></b>
+</pre></blockquote>
+
+</ul>
+
+<p>
+(Note that the link names are somewhat inconsistent: some of them retain the
+version number of the file being referenced, and some of them use the
+Ghostscript version number. This is a historical artifact that might be
+changed someday.)
+
+<p>
+E-mail the release announcement using:
+<blockquote><pre>
+To: gs-announce
+</pre></blockquote>
+
+<p>
+Edit the Web pages in cvs and commit to reflect the new release.
+The Wisconsin server should update automatically.
+
+<h2><a name="After_releasing"></a>After releasing</h2>
+
+<p>
+E-mail the full URL and the <b><tt>md5sum</tt></b> of the new archive(s) to
+<a href="mailto:ftp-upload@gnu.org"><tt>ftp-upload@gnu.org</tt></a>. This
+will allow the site maintainers to add the new release to the GNU
+distribution network.
+
+<p>
+It may also be helpful to have the Free Software Foundation review the
+code before release to see whether it meets their standards for
+distribution from the gnu.org website.
+
+<p>
+Update the version number by incrementing it:
+
+<ul>
+
+<li>In <b><tt>lib/gs_init.ps</tt></b>, at the very beginning of the file.
+
+<li>In <b><tt>version.mak</tt></b>, in 3 definitions.
+
+<li>In <b><tt>doc/News.htm</tt></b>, in 4 places.
+
+</ul>
+
+<p>
+In <b><tt>gscdef.c</tt></b>, edit the definition of
+<b><tt>GS_PRODUCT</tt></b> to include "CVS PRE-RELEASE".
+
+<p>
+Edit <b><tt>doc/News.htm</tt></b> to remove all the content.
+
+
+<h2><a name="Fonts"></a>Fonts</h2>
+
+<p>
+artofcode LLC distributes a package of the base 35 PostScript fonts, and a
+package of other miscellaneous fonts. These are released with a
+licence matching that of the Ghostscript code.
+
+<p>
+To make the font packages, run the command
+
+<blockquote><pre>
+toolbin/makefonts #.##
+</pre></blockquote>
+
+<p>
+This creates the following files:
+
+<blockquote><pre>
+ghostscript-fonts-std-#.##.tar.gz
+ghostscript-fonts-other-#.##.tar.gz
+gnu-gs-fonts-std-#.##.tar.gz
+gnu-gs-fonts-other-#.##.tar.gz
+</pre></blockquote>
+
+<p>
+The second two should be uploaded to
+<b><tt>ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/fonts/</tt></b>,
+and the url and md5sum sent to the GNU ftp maintainers as with the
+ghostscript source.
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1999-2002 artofcode LLC. All rights
+reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Source.htm b/Master/xemtex/doc/ghostscript/Source.htm
new file mode 100644
index 00000000000..348920b4e22
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Source.htm
@@ -0,0 +1,383 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Guide to Ghostscript source code</title>
+<!-- $Id: Source.htm,v 1.13.2.11.2.5 2003/05/17 14:39:00 giles Exp $ -->
+<!-- Originally: source.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Guide to Ghostscript source code</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Overview">Conceptual overview</a>
+<li><a href="#PostScript_interpreter">PostScript Interpreter</a>
+<li><a href="#PDF_interpreter">PDF interpreter</a>
+<li><a href="#Graphics_library">Graphics library</a>
+<ul>
+<li><a href="#Drivers">Device drivers</a>
+<li><a href="#Platform_specific_code">Platform-specific code</a>
+</ul>
+<li><a href="#Makefiles">Makefiles</a>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a> and the documents on <a href="Make.htm">how to build
+Ghostscript</a> from source, <a href="C-style.htm">Ghostscript C coding
+guidelines</a>, <a href="Drivers.htm">drivers</a>, the
+<a href="Lib.htm">Ghostscript library</a> and <a href="Install.htm">how to
+install Ghostscript</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="Overview"></a>Conceptual overview</h2>
+
+<p>
+The Ghostscript source code is divided conceptually as follows:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr valign=top> <th align=left colspan=4><a href="#PostScript_interpreter">PostScript interpreter</a>:
+<tr valign=top> <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <td>PostScript operators
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <td><b><tt>z</tt></b>*<b><tt>.h</tt></b> and <b><tt>z</tt></b>*<b><tt>.c</tt></b>
+<tr valign=top> <td>&nbsp;
+ <td>Other interpreter code
+ <td>&nbsp;
+ <td><b><tt>i</tt></b>*<b><tt>.h</tt></b> and <b><tt>i</tt></b>*<b><tt>.c</tt></b>
+<tr valign=top> <td>&nbsp;
+ <td>PostScript code
+ <td>&nbsp;
+ <td><b><tt>gs_</tt></b>*<b><tt>.ps</tt></b>
+<tr valign=top> <th align=left colspan=4><a href="#PDF_interpreter">PDF interpreter</a>:
+<tr valign=top> <td>&nbsp;
+ <td>PostScript code
+ <td>&nbsp;
+ <td><b><tt>pdf_</tt></b>*<b><tt>.ps</tt></b>
+<tr valign=top> <th align=left colspan=4><a href="#Graphics_library">Graphics library</a>:
+<tr valign=top> <td>&nbsp;
+ <td>Main library code
+ <td>&nbsp;
+ <td><b><tt>g</tt></b>*<b><tt>.h</tt></b> and <b><tt>g</tt></b>*<b><tt>.c</tt></b>
+<tr valign=top> <td>&nbsp;
+ <td>Streams
+ <td>&nbsp;
+ <td><b><tt>s</tt></b>*<b><tt>.h</tt></b> and <b><tt>s</tt></b>*<b><tt>.c</tt></b>
+<tr valign=top> <td>&nbsp;
+ <td><a href="#Drivers">Device drivers</a>
+ <td>&nbsp;
+ <td><b><tt>gdev</tt></b>*<b><tt>.h</tt></b> and <b><tt>gdev</tt></b>*<b><tt>.c</tt></b>
+<tr valign=top> <td>&nbsp;
+ <td><a href="#Platform_specific_code">Platform-specific code</a>
+ <td>&nbsp;
+ <td><b><tt>gp</tt></b>*<b><tt>.h</tt></b> and <b><tt>gp</tt></b>*<b><tt>.c</tt></b>
+</table></blockquote>
+
+<hr>
+
+<h2><a name="PostScript_interpreter"></a>PostScript Interpreter</h2>
+
+<p>
+<b><tt>gs.c</tt></b> is the main program for the interactive language
+interpreter; <b><tt>gserver.c</tt></b> is an alternative main program that
+is a rudimentary server. If you configure Ghostscript as a server rather
+than an interactive program, you will use <b><tt>gserver.c</tt></b> instead
+of <b><tt>gs.c</tt></b>.
+
+<p>
+Files named <b><tt>z</tt></b>*<b><tt>.c</tt></b> are Ghostscript operator
+files. The names of the files generally follow the section headings of the
+operator summary in section 6.2 (Second Edition) or 8.2 (Third Edition) of
+the PostScript Language Reference Manual. Each operator XXX is implemented
+by a procedure named <b><tt>z</tt></b>XXX, for example,
+<b><tt>zfill</tt></b> and <b><tt>zarray</tt></b>.
+
+<p>
+Files named <b><tt>i</tt></b>*<b><tt>.c</tt></b>, and *<b><tt>.h</tt></b>
+other than <b><tt>g</tt></b>*<b><tt>.h</tt></b>, are the rest of the
+interpreter. See the makefile for a little more information on how the
+files are divided functionally.
+
+<p>
+The main loop of the PostScript interpreter is the <b><tt>interp</tt></b>
+procedure in <b><tt>interp.c</tt></b>. When the interpreter is reading
+from an input file, it calls the token scanner in
+<b><tt>iscan</tt></b>*<b><tt>.c</tt></b>.
+
+<p>
+<b><tt>idebug.c</tt></b> contains a lot of debugger-callable routines
+useful for printing PostScript objects when debugging.
+
+<hr>
+
+<h2><a name="PDF_interpreter"></a>PDF interpreter</h2>
+
+<p>
+The PDF interpreter is written entirely in PostScript. Its main loop is
+the <b><tt>.pdfrun</tt></b> procedure in <b><tt>pdf_base.ps</tt></b>. When
+the PDF interpreter is configured into the build, it redefines the
+"<b><tt>run</tt></b>" operator to test whether the file is a PDF file.
+This redefinition is near the beginning of <b><tt>pdf_main.ps</tt></b>.
+
+<hr>
+
+<h2><a name="Graphics_library"></a>Graphics library</h2>
+
+<p>
+Files beginning with <b><tt>gs</tt></b>, <b><tt>gx</tt></b>, or
+<b><tt>gz</tt></b> (both <b><tt>.c</tt></b> and <b><tt>.h</tt></b>), other
+than <b><tt>gs.c</tt></b> and <b><tt>gserver.c</tt></b>, are the
+Ghostscript library. Files beginning with <b><tt>gdev</tt></b> are device
+drivers or related code, also part of the library. Other files beginning
+with <b><tt>g</tt></b> are library files that don't fall neatly into either
+the kernel or the driver category.
+
+<p>
+Files named <b><tt>s</tt></b>*<b><tt>.c</tt></b> and
+<b><tt>s</tt></b>*<b><tt>.h</tt></b> are a flexible stream package,
+including the Level 2 PostScript "filters" supported by Ghostscript. See
+<b><tt>stream.h</tt></b>, <b><tt>scommon.h</tt></b>, and
+<b><tt>strimpl.h</tt></b> for all the details.
+
+<h3><a name="Drivers"></a>Device drivers</h3>
+
+<p>
+The interface between the graphics library and device drivers is the only
+really well documented one in all of Ghostscript: see the
+<a href="Drivers.htm">documentation on drivers</a>.
+
+<p>
+In addition to many real device and file format drivers listed in
+<b><tt>devs.mak</tt></b> and <b><tt>contrib.mak</tt></b>, a number of
+drivers are used for internal purposes. You can search
+<b><tt>lib.mak</tt></b> for files named
+<b><tt>gdev</tt></b>*<b><tt>.c</tt></b> to find almost all of them.
+
+<p>
+Drivers are divided into "printer" drivers, which support banding, and
+non-printer drivers, which don't. The decision whether banding is
+required is made (by default on the basis of how much memory is available)
+in the procedure <b><tt>gdev_prn_alloc</tt></b> in
+<b><tt>gdevprn.c</tt></b>: it implements this decision by filling the
+virtual procedure table for the printer device in one of two different
+ways.
+
+<p>
+A good simple "printer" (bandable) driver to read is
+<b><tt>gdevmiff.c</tt></b>: it's less than 100 lines, of which much is
+boilerplate. There are no simple non-printer drivers that actually drive
+devices: probably the simplest non-printer driver for reading is
+<b><tt>gdevm8.c</tt></b>, which implements 8-bit-deep devices that only
+store the bits in memory.
+
+<h3><a name="Platform_specific_code"></a>Platform-specific code</h3>
+
+<p>
+There are very few platform dependencies in Ghostscript. Ghostscript deals
+with them in three ways:
+
+<ul>
+<li>Files named *<b><tt>_.h</tt></b> substitute for the corresponding
+<b><tt>&lt;</tt></b>*<b><tt>.h&gt;</tt></b> file by adding conditionals
+that provide a uniform set of system interfaces on all platforms.
+
+<li>The file <b><tt>arch.h</tt></b> contains a set of
+mechanically-discovered platform properties like byte order, size of
+<b><tt>int</tt></b>, etc. These properties, <b>not</b> the names of
+specific platforms, are used to select between different algorithms or
+parameters at compile time.
+
+<li>Files named <b><tt>gp</tt></b>*<b><tt>.h</tt></b> define interfaces
+that are intended to be implemented differently on each platform, but whose
+specification is common to all platforms.
+</ul>
+
+<p>
+The platform-specific implementations of the
+<b><tt>gp</tt></b>*<b><tt>.h</tt></b> interfaces have names of the form
+"<b><tt>gp_</tt></b><em>{platform}</em><b><tt>.c</tt></b>, specifically
+(this list may be out of date):
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Platform-specific interfaces</font><hr>
+<tr valign=bottom>
+ <th align=left>Routine
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;
+ <th align=left>Platform
+<tr> <td colspan=3><hr>
+<tr valign=top> <td><b><tt>gp_dosfb.c</tt></b>
+ <td>&nbsp;
+ <td>DOS
+<tr valign=top> <td><b><tt>gp_dosfs.c</tt></b>
+ <td>&nbsp;
+ <td>DOS and MS Windows
+<tr valign=top> <td><b><tt>gp_itbc.c</tt></b>
+ <td>&nbsp;
+ <td>DOS, Borland compilers
+<tr valign=top> <td><b><tt>gp_iwatc.c</tt></b>
+ <td>&nbsp;
+ <td>DOS, Watcom or Microsoft compiler
+<tr valign=top> <td><b><tt>gp_msdos.c</tt></b>
+ <td>&nbsp;
+ <td>DOS and MS Windows
+<tr valign=top> <td><b><tt>gp_ntfs.c</tt></b>
+ <td>&nbsp;
+ <td>MS-Windows Win32s and Windows NT
+<tr valign=top> <td><b><tt>gp_os2.c</tt></b>
+ <td>&nbsp;
+ <td>OS/2
+<tr valign=top> <td><b><tt>gp_os9.c</tt></b>
+ <td>&nbsp;
+ <td>OS-9
+<tr valign=top> <td><b><tt>gp_unifs.c</tt></b>
+ <td>&nbsp;
+ <td>Unix, OS-9, and QNX
+<tr valign=top> <td><b><tt>gp_unix.c</tt></b>
+ <td>&nbsp;
+ <td>Unix and QNX
+<tr valign=top> <td><b><tt>gp_sysv.c</tt></b>
+ <td>&nbsp;
+ <td>System V Unix
+<tr valign=top> <td><b><tt>gp_vms.c</tt></b>
+ <td>&nbsp;
+ <td>VMS
+<tr valign=top> <td><b><tt>gp_win32.c</tt></b>
+ <td>&nbsp;
+ <td>MS-Windows Win32s and Windows NT
+</table></blockquote>
+
+<p>
+If you are going to extend Ghostscript to new machines or operating
+systems, check the *<b><tt>_.h</tt></b> files for <b><tt>ifdef</tt></b> on
+things other than <b><tt>DEBUG</tt></b>. You should probably plan to make
+a new makefile and a new <b><tt>gp_</tt></b>XXX<b><tt>.c</tt></b> file.
+
+<hr>
+
+<h2><a name="Makefiles"></a>Makefiles</h2>
+
+<p>
+This section is only for advanced developers who need to integrate
+Ghostscript into a larger program at build time.
+
+<p>
+NOTE: THIS SECTION IS INCOMPLETE. IT WILL BE IMPROVED IN A LATER REVISION.
+
+<p>
+The Ghostscript makefiles are meant to be organized according to the
+following two principles:
+
+<ul>
+
+<li>All the parameters that vary from platform to platform appear in the
+top-level makefile for a given platform. ("Platform" = OS + compiler +
+choice of interpreter vs. library)
+
+<li>All the rules and definitions that can meaningfully be shared among more
+than 1 platform appear in a makefile that is "included" by a makefile
+(normally the top-level makefile) for those platforms.
+</ul>
+
+<p>
+Thus, for example:
+
+<ul>
+
+<li>Rules and definitions shared by all builds are in
+<b><tt>gs.mak</tt></b>.
+
+<li>Rules and definitions specific to the library (on all platforms) are in
+<b><tt>lib.mak</tt></b>. In principle this could be merged with
+<b><tt>gs.mak</tt></b>, but we wanted to leave open the possibility that
+<b><tt>gs.mak</tt></b> might be useful with hypothetical interpreter-only
+products.
+
+<li>Stuff specific to interpreters (on all platforms) is in
+<b><tt>int.mak</tt></b>.
+
+<li>Stuff specific to all Unix platforms should be in a single
+<b><tt>unix.mak</tt></b> file, but because <b><tt>make</tt></b> sometimes
+cares about the order of definitions, and because some of it is shared with
+DV/X, it got split between <b><tt>unix-aux.mak</tt></b>,
+<b><tt>unix-end.mak</tt></b>, <b><tt>unixhead.mak</tt></b>,
+<b><tt>unixinst.mak</tt></b>, and <b><tt>unixlink.mak</tt></b>.
+
+</ul>
+
+<p>
+For MS-DOS and MS Windows builds, there should be:
+
+<ul>
+
+<li>A makefile for all MS OS (DOS or Windows) builds, for all
+ compilers and products.
+
+<li>Perhaps a makefile for all MS-DOS builds, for all compilers and
+products, although since Watcom is the only such compiler we're likely to
+support this may be overkill.
+
+<li>A makefile for all MS Windows builds, for all compilers and products.
+
+<li>A makefile for all Watcom builds (DOS or Windows), for all products.
+
+<li>A top-level makefile for the Watcom DOS interpreter product.
+
+<li>A top-level makefile for the Watcom Windows interpreter product.
+
+<li>A top-level makefile for the Watcom DOS library "product".
+
+<li>A top-level makefile for the Watcom Windows library "product".
+
+<li>A makefile for all Borland builds (DOS or Windows), for all
+ products.
+
+</ul>
+
+<p>
+and so on.
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 1997, 1998 Aladdin Enterprises. All
+rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Unix-lpr.htm b/Master/xemtex/doc/ghostscript/Unix-lpr.htm
new file mode 100644
index 00000000000..a92e7809534
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Unix-lpr.htm
@@ -0,0 +1,267 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Setting up a Unix lpr filter for Ghostscript</title>
+<!-- $Id: Unix-lpr.htm,v 1.13.2.11.2.5 2003/05/17 14:39:00 giles Exp $ -->
+<!-- Originally: unix-lpr.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Setting up a Unix <tt>lpr</tt> filter for Ghostscript</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Overview">Overview</a>
+<li><a href="#What_it_can_do">What it can do</a>
+<li><a href="#Setting_up">Setting it up</a>
+<ul>
+<li><a href="#Editing_device_list">Editing the device list <b><tt>DEVICES</tt></b></a>
+<ul>
+<li><a href="#Field_bpp">Field 1: bits per pixel</a>
+<li><a href="#Field_colours">Field 2: colours</a>
+<li><a href="#Field_dq">Field 3: dual queues</a>
+<li><a href="#Device_example">Example definition of <b><tt>DEVICES</tt></b></a>
+</ul>
+<li><a href="#Editing_filter_list">Editing the filter list</a>
+<li><a href="#Editing_printer_port">Editing the printer port and type</a>
+<li><a href="#Modifying_printcap_insert">Modifying <b><tt>printcap.insert</tt></b></a>
+<li><a href="#Multiple_queues">Single or dual queues</a>
+</ul>
+<li><a href="#Bugs">Bugs</a>
+<li><a href="#Authors">Authors</a>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a> and the <a href="Use.htm">usage documentation</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="Overview"></a>Overview</h2>
+
+<p>
+"How do I set up Ghostscript to provide PostScript queues in a standard lpr
+environment on Unix systems?" is a Frequently Asked Question amongst
+Ghostscript users. The two shell scripts described by this document are
+designed to make this task a little easier. They are
+
+<blockquote><dl>
+<dt><b><tt>unix-lpr.sh</tt></b>
+<dd>a flexible, multi-option print filter
+
+<dt><b><tt>lprsetup.sh</tt></b>
+<dd>A shell script which sets up soft links and creates a template insert
+for the <b><tt>printcap</tt></b> file
+</dl></blockquote>
+
+<hr>
+
+<h2><a name="What_it_can_do"></a>What it can do</h2>
+
+<p>
+The print filter resides in the Ghostscript installation directory (often
+<b><tt>/usr/local/share/ghostscript</tt></b>, but may be something else at
+your installation), together with a dummy filter directory containing
+various soft links which point to the filter. It offers the following
+features:
+
+<ul>
+<li>Multiple devices supported by a single filter
+<li>Multiple bit-depths for the same device
+<li>Multiple number of colours for the same device
+<li>Direct (single-queue) and indirect (two-queue) setup
+<li>Support for the standard preprocessing filters if you have the
+corresponding (whatever)-to-PostScript translators
+<li>Redirection of diagnostic and programmed output to a logfile in
+the spooling directory
+<li>Maintaining of printer accounting records of the numbers of pages
+printed by each user (compatible with the <b><tt>pac</tt></b> command)
+<li>Straightforward editing for further customisation
+</ul>
+
+<hr>
+
+<h2><a name="Setting_up"></a>Setting it up</h2>
+
+<p>
+The <b><tt>lprsetup.sh</tt></b> script needs to have two lines edited
+before running, to set the printer devices to use and the list of filters
+available. With this information, it
+
+<ul>
+<li>creates a "<b><tt>filt</tt></b>" subdirectory under the
+Ghostscript installation directory
+<li>creates the links in this directory which enable the filter to
+determine the parameters for running Ghostscript
+<li>automatically generates <b><tt>printcap</tt></b> entries which should
+need only a little editing before adding to your system
+<b><tt>printcap</tt></b> file
+</ul>
+
+<h3><a name="Editing_device_list"></a>Editing the device list <tt>DEVICES</tt></h3>
+
+<p>
+At the top of <b><tt>lprsetup.sh</tt></b> is a line of the form
+<b><tt>DEVICES=</tt></b><em>{list}</em>. Replace the example list with
+your own list of devices. Each entry is the name of a device, followed by
+three more optional fields, separated by dots "<b><tt>.</tt></b>".
+
+<h4><a name="Field_bpp"></a>Field 1: bits per pixel</h4>
+
+<p>
+The first field is required only if the printer device understands the <a
+href="Devices.htm#deskjet_parameters"><b><tt>-dBitsPerPixel=</tt></b>
+switch</a>, which applies only to colour devices. For a particular number
+<b><em>N</em></b> of bits per pixel, add the suffix <b><em>.N</em></b> to
+the device name, for instance <b><tt>cdj500.3</tt></b>,
+<b><tt>cdj500.24</tt></b>, etc.
+
+<h4><a name="Field_colours"></a>Field 2: colours</h4>
+
+<p>
+The second field is required only if the printer device understands the
+setting of the <b><tt>Colors</tt></b> device parameter (as in
+<b><tt>-dColors=</tt></b>), which applies only to colour devices (and at
+present is only supported by the <b><tt>bjc</tt></b>* family of drivers).
+For a particular number <b><em>N</em></b> of colours, suffix
+<b><em>.N</em></b> to the device name, such as <b><tt>bjc600.24.3</tt></b>,
+<b><tt>bjc600.8.1</tt></b> etc.
+
+<h4><a name="Field_dq"></a>Field 3: dual queues</h4>
+
+<p>
+The third field is required in order to use two separate queues for the
+device, a "raw" queue and a PostScript queue (see
+"<a href="#Multiple_queues">Single or dual queues</a>" below). If you want
+dual queues, add the suffix <b><tt>.dq</tt></b> ("dual queue") to the name,
+whether or not a <a href="#Field_bpp">bits-per-pixel suffix</a> has already
+been added.
+
+<h4><a name="Device_example"></a>Example definition of
+<tt>DEVICES</tt></h4>
+
+<p>
+Thus the following list supports a <b><tt>cdj550</tt></b> device at three
+different bit depths (24 bpp, 3 bpp and 1 bpp), with a dual queue (that is,
+a separate queue for the raw data); a monochrome <b><tt>deskjet</tt></b>
+device with a single queue; and a <b><tt>djet500</tt></b> device using a
+separate queue:
+
+<blockquote><b><tt>
+DEVICES="cdj550.24.dq&nbsp;cdj550.3.dq&nbsp;cdj550.1.dq&nbsp;deskjet&nbsp;djet500.dq"
+</tt></b></blockquote>
+
+<h3><a name="Editing_filter_list"></a>Editing the filter list</h3>
+
+<p>
+The standard list contains only the generic "<b><tt>if</tt></b>" filter,
+but a commented-out list shows other filters which may be available. If
+you wish to use the support for these filters, you may need to edit the
+<b><tt>bsd-if</tt></b> file to add to the <b><tt>PATH</tt></b> the
+directories where the translators are stored, or to change the names of the
+filters if yours are different. The <b><tt>bsd-if</tt></b> script is
+supplied with an example setup using Transcript (a commercial package from
+Adobe), and PBMPLUS, a freeware package by Jef Poskanzer and others.
+
+<h3><a name="Editing_printer_port"></a>Editing the printer port and
+type</h3>
+
+<p>
+You can set the port and port type (parallel or printer) for an attached
+printer, but for remote printers you'll have to modify the
+<tt>printcap.insert</tt> file yourself.
+
+<h3><a name="Modifying_printcap_insert"></a>Modifying
+<tt>printcap.insert</tt></h3>
+
+<p>
+Running <b><tt>lprsetup.sh</tt></b> generates a file
+<b><tt>printcap.insert</tt></b> which has a template setup for your
+printer queues. It cannot guarantee to do the whole job, and you will
+probably need to consult your system documentation and edit this file
+before you add it to your <b><tt>printcap</tt></b> file. The file has good
+defaults for serial printers, as these often cause problems in getting
+binary data to the printer. However, you may need to change the baud rate,
+or the handshaking method. Only a small change is required in the
+<b><tt>printcap</tt></b> file to use a networked remote printer instead of
+an attached printer, and an example is given in
+<b><tt>printcap.insert</tt></b>.
+
+<h3><a name="Multiple_queues"></a>Single or dual queues</h3>
+
+<p>
+If you wish to provide a PostScript-only queue (for example, so that all
+pages printed go through accounting), and the printer port is local to the
+host machine, a single queue is appropriate -- Ghostscript simply converts
+PostScript into the printer's native data format and sends it to the
+port. But if the printer is on a remote networked machine, or if you need to
+send raw printer data to the printer, you must use two queues. Simply
+specify the <a href="#Field_dq">"<b><tt>.dq</tt></b>" option</a> above.
+
+<hr>
+
+<h2><a name="Bugs"></a>Bugs</h2>
+
+<p>
+You must have write access to the Ghostscript installation directory for
+<b><tt>lprsetup.sh</tt></b> to create the filter directory and soft links.
+
+<p>
+If you have several different values of bits per pixel for the same device,
+you must list all instances of that device as adjacent items in the
+<a href="#Editing_device_list"><b><tt>DEVICES</tt></b></a> device
+list. If you do not, <b><tt>printcap.insert</tt></b> will contain multiple
+entries for the same device, which is not supported.
+
+<hr>
+
+<h2><a name="Authors"></a>Authors</h2>
+
+<p>
+This material was contributed by George Cameron. Yves Arrouye
+&lt;<a href="mailto:yves.arrouye@usa.net">yves.arrouye@usa.net</a>&gt;
+is responsible for the number-of-colours part of the script.
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 1997, 1998 Aladdin Enterprises. All
+rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Use.htm b/Master/xemtex/doc/ghostscript/Use.htm
new file mode 100644
index 00000000000..e2d2576d09b
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Use.htm
@@ -0,0 +1,3036 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>How to use Ghostscript</title>
+<!-- $Id: Use.htm,v 1.33.2.22.2.6 2003/05/17 14:39:00 giles Exp $ -->
+<!-- Originally: use.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>How to use Ghostscript</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Invoking">Invoking Ghostscript</a>
+<ul>
+<li><a href="#Help_command">Help at the command line: <b><tt>gs -h</tt></b></a>
+</ul>
+<li><a href="#Security">Security</a>
+<li><a href="#Pipe_input">Input from a pipe</a>
+<li><a href="#Output_device">Selecting an output device</a>
+<ul>
+<li><a href="#Printer_resolution">Printer resolution</a>
+<li><a href="#File_output">Output to files</a>
+<ul>
+<li><a href="#One_page_per_file">One page per file</a>
+<li><a href="#Pipe_output">Output to a pipe</a>
+<li><a href="#Output_to_graphics">Output to graphics file formats</a>
+<li><a href="#Bounding_box_output">Bounding box output</a>
+</ul>
+<li><a href="#Paper_size">Choosing paper size</a>
+<li><a href="#Change_default_size">Changing the installed default paper size</a>
+</ul>
+<li><a href="#Finding_files">How Ghostscript finds files</a>
+<ul>
+<li><a href="#PS_resources">Finding PostScript Level 2 resources</a>
+<li><a href="#Font_lookup">Font lookup</a>
+<li><a href="#Temp_files">Temporary files</a>
+</ul>
+<li><a href="#CIDFontSubstitution">CID font substitution</a>
+<li><a href="#Environment_variables">Summary of environment variables</a>
+<li><a href="#EPS">Using Ghostscript with EPS files</a>
+<li><a href="#PDF">Using Ghostscript with PDF files</a>
+<ul>
+<li><a href="#PDF_stdin">PDF files from standard input</a>
+<li><a href="#PDF_switches">Switches for PDF files</a>
+<li><a href="#PDF_problems">Problems interpreting a PDF file</a>
+</ul>
+<li><a href="#Platforms">Notes on specific platforms</a>
+<ul>
+<li><a href="#Unix">Unix</a>
+<li><a href="#VMS">VMS</a>
+<ul>
+<li><a href="#VMS_X_Windows">Using X Windows on VMS</a>
+</ul>
+<li><a href="#MS_Windows">MS Windows</a>
+<li><a href="#MS-DOS">MS-DOS</a>
+<li><a href="#X_Windows">X Windows</a>
+<ul>
+<li><a href="#X_resources">X resources</a>
+<li><a href="#X_server_bugs">Working around bugs in X servers</a>
+<li><a href="#X_fonts">X fonts</a>
+<li><a href="#GS_fonts_as_X_fonts">Using Ghostscript fonts on X displays</a>
+<li><a href="#X_device_parameters">X device parameters</a>
+</ul>
+<li><a href="#SCO_Unix">SCO Unix</a>
+</ul>
+<li><a href="#Switches">Switches</a>
+<ul>
+<li><a href="#General_switches">General switches</a>
+<ul>
+<li><a href="#Input_control">Input control</a>
+<li><a href="#File_searching">File searching</a>
+<li><a href="#Parameters">Setting parameters</a>
+<li><a href="#Quiet">Suppress messages</a>
+</ul>
+<li><a href="#Parameter_switches">Parameter switches (<b><tt>-d</tt></b> and <b><tt>-s</tt></b>)</a>
+<ul>
+<li><a href="#Rendering_parameters">Rendering parameters</a>
+<li><a href="#Page_parameters">Page parameters</a>
+<li><a href="#Font_related_parameters">Font-related parameters</a>
+<li><a href="#Interaction_related_parameters">Interaction-related parameters</a>
+<li><a href="#Output_selection_parameters">Device and output selection parameters</a>
+<li><a href="#Other_parameters">Other parameters</a>
+</ul>
+</ul>
+<li><a href="#Improving_performance">Improving performance</a>
+<li><a href="#Debugging">Debugging</a>
+<li><a href="#Known_paper_sizes">Appendix: Paper sizes known to Ghostscript</a>
+<li><a href="#X_font_mappings">Appendix: X default font mappings</a>
+<ul>
+<li><a href="#Standard_X_server_fonts">Standard X servers</a>
+<ul>
+<li><a href="#X_regular_fonts">Regular fonts</a>
+<li><a href="#X_symbol_fonts">Symbol fonts</a>
+<li><a href="#X_dingbat_fonts">Dingbat fonts</a>
+</ul>
+<li><a href="#OpenWindows_fonts">Sun OpenWindows</a>
+</ul>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>, the new user's documentation on
+<a href="New-user.htm#Previewers">previewers</a> and, if necessary, how to
+<a href="Install.htm">install Ghostscript</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="Invoking"></a>Invoking Ghostscript</h2>
+
+<p><a name="Command_line"></a> The command line to invoke Ghostscript is
+essentially the same on all systems, although the name of the executable
+program itself may differ among systems. For instance, to invoke
+Ghostscript on Unix:
+
+<blockquote>
+<b><tt>gs</tt></b> [switches] {filename 1} ... [switches] {filename <em>N</em>} ...
+</blockquote>
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Ghostscript's name on different systems</font><hr>
+<tr> <th align=left>System
+ <td>&nbsp;&nbsp;
+ <th align=left>Ghostscript's name
+<tr> <td colspan=3><hr>
+<tr> <td>Unix
+ <td>&nbsp;<td><b><tt>gs</tt></b>
+<tr> <td>VMS
+ <td>&nbsp;<td><b><tt>gs</tt></b>
+<tr> <td>DOS &amp; MS Windows 3
+ <td>&nbsp;<td><b><tt>gs386</tt></b>
+<tr> <td>MS Windows 95/98
+ <td>&nbsp;<td><b><tt>gswin32</tt></b>
+<tr> <td>MS Windows 95/98 command line
+ <td>&nbsp;<td><b><tt>gswin32c</tt></b>
+<tr> <td>OS/2
+ <td>&nbsp;<td><b><tt>gsos2</tt></b>
+</table></blockquote>
+
+<p>
+Note, though, that on a system with a windowed graphical user interface,
+it's common to use Ghostscript through a previewer, so you should read the
+<a href="New-user.htm#Previewers">section about previewers</a> in the
+documentation for new users.
+
+<p>
+Ghostscript is capable of interpreting PostScript, encapsulated PostScript
+(EPS), DOS EPS (EPSF), and -- if the executable was built for it -- Adobe
+Portable Document Format (PDF). The interpreter reads and executes the
+files in sequence, using the method described under
+"<a href="#File_searching">File searching</a>" to find them. After doing
+this, it reads further lines of PostScript language commands from the
+primary input stream, normally the keyboard, interpreting each line
+separately. To quit the interpreter, type "<b><tt>quit</tt></b>". The
+interpreter also quits gracefully if it encounters end-of-file or
+control-C.
+
+<p>
+The interpreter recognizes many <a href="#Switches">switches</a>. A switch
+may appear anywhere in the command line, and applies to all files named
+after it on the line. Many of the switches include "<b><tt>=</tt></b>"
+followed by a parameter.
+
+<h3><a name="Help_command"></a>Help at the command line: <b><tt>gs -h</tt></b></h3>
+
+<p>
+You can get a brief help message by invoking Ghostscript with the
+<b><tt>-h</tt></b> or <b><tt>-?</tt></b> switch, like this:
+
+<blockquote><b><tt>
+gs -h<br>
+gs -?
+</tt></b></blockquote>
+
+<p>
+(Of course, for "<b><tt>gs</tt></b>" use the right
+<a href="#Command_line">command for your system</a>.) The message shows
+for this executable
+
+<ul>
+<li>its version
+<li>the format of the command to invoke it
+<li>a few of the most useful switches
+<li>the formats it can interpret
+<li>the devices for which it can produce output
+<li>where it looks for font files
+<li>where and how to send bug reports
+</ul>
+
+<h2><a name="Security"></a>Security</h2>
+
+<p>
+Ghostscript implements a full-featured programming language, with
+access to the filesystem and the ability to control a diverse set of
+devices. As such, there are potential security implications.
+
+<p>
+The first line of defense is to use the security mechanisms
+provided by Ghostscript. If you're running arbitrary PostScript files
+(for example, those sent through email or downloaded from the Web),
+make sure to use the -dSAFER option. Otherwise, you are opening up
+your entire filesystem to potentially malicious code.
+
+<p>
+By default, Ghostscript opens up read access to the entire
+filesystem. In general, if you're just viewing or printing documents,
+this does not pose a significant security risk. However, if there is
+a chance that the output of Ghostscript can leak sensitive information,
+also set the -DPARANOIDSAFER option. Note, however, that this option
+is incompatible with some scripts and wrappers, including gv and
+related viewer apps.
+
+<p>
+We plan to make -dSAFER the default in future versions of Ghostscript.
+Since most people use Ghostscript to print and view documents, rather
+than to run scripts written in the PostScript language, this will
+provide additional safety with little hassle for most users. If you
+<em>are</em> using Ghostscript as a scripting language and need
+unfettered access to the filesystem, use the -dNOSAFER flag to signal
+explictly that you wish the PostScript code to have full access to the
+file system. Currently, this flag has no effect, but it will insure
+than your scripts execute as expected in future versions.
+
+<p>
+While we've tried to patch all known security problems, there is
+no guarantee that we've caught them all. Ghostscript is a complex
+application written in C. Buffer overflows and other exploits remain
+a distinct possibility. Thus we recommend that, whenever possible,
+Ghostscript should run in a secure "sandbox" environment, making
+use of the security mechanisms of the underlying operating system.
+In particular, we urge GNU/Linux distributors to invoke Ghostscript from
+the print subsystem in a chroot'ed environment, and never as root.
+
+<p>
+We will continue to be vigilant regarding security issues. As
+always, apply security updates promptly.
+
+<h2><a name="Pipe_input"></a>Input from a pipe</h2>
+
+<p>
+As noted above, one normally specifies input with file names on the command
+line. However, one can also "pipe" input into Ghostscript by using the
+special file name "<b><tt>-</tt></b>" or "<b><tt>-_</tt></b>", for instance
+
+<blockquote>
+{some program producing PS} <b><tt>| gs</tt></b> {...options...} <b><tt>-</tt></b>
+<br>
+{some program producing PS} <b><tt>| gs</tt></b> {...options...} <b><tt>-_</tt></b>
+</blockquote>
+
+<p>
+These switches differ from a named file in two respects:
+
+<ol>
+<li>When Ghostscript finishes reading from the pipe, it quits rather than
+going into interactive mode. Because of this, these switches are
+really only useful as the last argument on the command line.
+
+<li>These switches can't be used to pipe PDF input to Ghostscript.
+See "<a href="#PDF">Using Ghostscript with PDF files</a>" below.
+</ol>
+
+<p>
+
+The difference between "<b><tt>-</tt></b>" and "<b><tt>-_</tt></b>" is that
+"<b><tt>-</tt></b>" may read the input one character at a time, which is useful
+for programs that generate input for Ghostscript dynamically
+and watch for some response, whereas "<b><tt>-_</tt></b>" reads the input in
+blocks, which is more efficient for ordinary (batch) execution.
+
+<h2><a name="Output_device"></a>Selecting an output device</h2>
+
+<p>
+Ghostscript may be built to handle multiple output devices, and it normally
+opens and directs output to the first one built in. Ghostscript's
+<b><tt>gs&nbsp;-h</tt></b> <a href="#Help_command">help message</a> lists
+the output devices known to the executable. Once you invoke Ghostscript
+you can also find out what devices are available by
+"<b><tt>devicenames&nbsp;==</tt></b>" at its command prompt.
+
+<p><a name="Source_code"></a>
+
+A little more information about devices appears near the beginning of the
+files <b><tt>devs.mak</tt></b> (for drivers that are considered "part of"
+Ghostscript and are maintained by the maintainers of the main Ghostscript
+code) and <b><tt>contrib.mak</tt></b> (for user-contributed drivers) used to
+build Ghostscript. (If you got Ghostscript under the Aladdin <a
+href="Public.htm">Free Public License</a>, the person or place from which
+you got it is also required to make the source code available to you; if you
+got it under the GNU General Public License (GPL), see the GNU <a
+href="http://www.gnu.org/copyleft/gpl.html">General Public License</a> for
+more information.)
+
+<p><a name="Device_output"></a>
+To use device <em>xyz</em> as the initial output device, use the
+command-line switch
+
+<blockquote>
+ <b><tt>-sDEVICE=</tt></b><em>xyz</em>
+</blockquote>
+
+<p>
+Note that this switch must precede the name of the first input file, and
+only its first use has any effect. For example, for printer output in a
+configuration that includes an Epson printer driver, instead of just
+"<b><tt>gs&nbsp;myfile.ps</tt></b>" you might use
+
+<blockquote>
+ <b><tt>gs -sDEVICE=epson myfile.ps</tt></b>
+</blockquote>
+
+<p>
+Alternatively, once you invoke Ghostscript and have its own command prompt
+you can type
+
+<blockquote><b><tt>
+ (epson) selectdevice<br>
+ (myfile.ps) run
+</tt></b></blockquote>
+
+<p>
+All output then goes to the Epson printer instead of the display until you
+do something to change devices. You can switch devices at any time by
+using the <b><tt>selectdevice</tt></b> procedure, for
+instance like one of these:
+
+<blockquote><b><tt>
+ (vga) selectdevice<br>
+ (epson) selectdevice
+</tt></b></blockquote>
+
+<p><a name="GS_DEVICE"></a>
+A third possibility is to define an environment variable
+<b><tt>GS_DEVICE</tt></b> with the name of your desired default device.
+The order of precedence for these alternatives, highest to lowest, is:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr> <td><b><tt>selectdevice</tt></b>
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <td>Highest precedence
+<tr> <td>(command line)
+ <td>&nbsp;
+ <td>&nbsp;
+<tr> <td><b><tt>GS_DEVICE</tt></b>
+ <td>&nbsp;
+ <td>&nbsp;
+<tr> <td>(first device built in)
+ <td>&nbsp;
+ <td>Default; lowest precedence
+</table></blockquote>
+
+<h3><a name="Printer_resolution"></a>Printer resolution</h3>
+
+<p>
+Some printers can print at several different resolutions, letting you
+balance resolution against printing speed. To select the resolution on
+such a printer, use the <b><tt>-r</tt></b> switch:
+
+<blockquote>
+ <b><tt>gs -sDEVICE=</tt></b><em>printer</em><b><tt> -r</tt></b><em>XRES</em><b><tt>x</tt></b><em>YRES</em>
+</blockquote>
+
+<p>
+For example, on Epson-compatible printers you have these choices:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr> <td><b><tt>gs -sDEVICE=epson</tt></b>
+ <td>&nbsp;&nbsp;
+ <td><b><tt>-r60x72</tt></b>
+ <td>&nbsp;&nbsp;
+ <td>9-pin
+ <td>&nbsp;&nbsp;
+ <td>lowest resolution
+ <td>&nbsp;&nbsp;
+ <td>fastest
+<tr> <td>&nbsp;
+ <td>&nbsp;
+ <td><b><tt>-r240x72</tt></b>
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>highest
+ <td>&nbsp;
+ <td>slowest
+<tr> <td>&nbsp;
+<tr> <td>&nbsp;
+ <td>&nbsp;
+ <td><b><tt>-r60x60</tt></b>
+ <td>&nbsp;
+ <td>24-pin
+ <td>&nbsp;
+ <td>lowest
+ <td>&nbsp;
+ <td>fastest
+<tr> <td>&nbsp;
+ <td>&nbsp;
+ <td><b><tt>-r360x180</tt></b>
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>highest
+ <td>&nbsp;
+ <td>slowest
+</table></blockquote>
+
+<h3><a name="File_output"></a>Output to files</h3>
+
+<p>
+If you select a printer as the output device, Ghostscript also allows you to
+control where the device sends its output. On DOS and MS Windows systems,
+output normally goes directly to the printer (<b><tt>PRN</tt></b>); on Unix
+or VMS systems normally to a temporary file for later printing. To send the
+output to a file, use the <b><tt>-sOutputFile=</tt></b> switch (for
+compatibility with older versions of Ghostscript,
+<b><tt>-sOUTPUTFILE=</tt></b> also works). For instance, to direct all
+output into the file <b><tt>ABC.xyz</tt></b>, use
+
+<blockquote><b><tt>
+gs -sOutputFile=ABC.xyz
+</tt></b></blockquote>
+
+<p>
+The file name follows the PostScript convention that if a name begins with
+<b><tt>%</tt></b>, the name must be in the form <b><tt>%</tt></b>filedevice
+or <b><tt>%</tt></b>filedevice<b><tt>%</tt></b>file. The legal values of
+filedevice are system-dependent, but the following have consistent meanings
+across systems:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">"%{filedevice}%{file}" in <b><tt>-sOutputFile=</tt></b></font><hr>
+<tr valign=bottom>
+ <th align=left>filedevice
+ <td>&nbsp;&nbsp;&nbsp;
+ <th align=left>Meaning
+<tr> <td colspan=3><hr>
+<tr valign=top> <td><b><tt>%os%xyz</tt></b>
+ <td>&nbsp;
+ <td>An ordinary file named <b><tt>xyz</tt></b>
+<tr valign=top> <td><b><tt>%pipe%cmd</tt></b>
+ <td>&nbsp;
+ <td>(if supported) A pipe to an instance of the command <b><tt>cmd</tt></b>
+<tr valign=top> <td><b><tt>%stdout</tt></b>
+ <td>&nbsp;
+ <td>The standard output file
+</table></blockquote>
+
+<p>
+Note that because of this, if you want to specify a file name that actually
+begins with <b><tt>%</tt></b>, you must specify the <b><tt>%os%</tt></b>
+filedevice explicitly: e.g., for output to a file named
+<b><tt>%abc</tt></b>, you need to specify
+<b><tt>-sOutputFile=%os%%abc</tt></b>. Note also that on DOS and MS Windows
+systems, the <b><tt>%</tt></b> character has a special meaning for the
+command processor (shell), so you will have to double it, e.g., for a pipe
+on MS Windows,
+
+<blockquote><b><tt>
+gs -sOutputFile=%%pipe%%cmd
+</tt></b></blockquote>
+
+<h4><a name="One_page_per_file"></a>One page per file</h4>
+
+<p>
+You can also tell Ghostscript to put each page of output in a separate
+file. To send output to a series of files each representing a single page,
+use in the filename the <b><tt>printf</tt></b> format specifier
+"<b><tt>%d</tt></b>" (or its extended form like "<b><tt>%02d</tt></b>");
+for instance
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">"%{n}d" in <b><tt>-sOutputFile=</tt></b></font><hr>
+<tr valign=bottom>
+ <th align=left>Output specification
+ <td>&nbsp;&nbsp;&nbsp;
+ <th align=left>Produces the series of 1-page files
+<tr> <td colspan=3><hr>
+<tr valign=top> <td><b><tt>-sOutputFile=ABC%d.xyz</tt></b>
+ <td>&nbsp;
+ <td><b><tt>ABC1.xyz</tt></b> ... <b><tt>ABC10.xyz</tt></b> ...
+<tr valign=top> <td><b><tt>-sOutputFile=ABC%03d.xyz</tt></b>
+ <td>&nbsp;
+ <td><b><tt>ABC001.xyz</tt></b> ... <b><tt>ABC010.xyz</tt></b> ...
+</table></blockquote>
+
+<p>
+As noted above, on DOS and MS Windows systems, you will have to double the
+<b><tt>%</tt></b> character, e.g.,
+
+<blockquote><b><tt>
+gs -sOutputFile=ABC%%03d.xyz
+</tt></b></blockquote>
+
+<h4><a name="Pipe_output"></a>Output to a pipe</h4>
+
+<p>
+On Unix and (32-bit) MS Windows systems you can use this switch to send
+output directly to a pipe. For example, to pipe the output to
+<b><tt>lpr</tt></b>, use the command
+
+<blockquote><b><tt>
+ gs -sOutputFile=\|lpr
+</tt></b></blockquote>
+or, as noted above,
+<blockquote><b><tt>
+ gs -sOutputFile=%pipe%lpr
+</tt></b></blockquote>
+
+<p>
+(doubling the <b><tt>%</tt></b> characters on MS Windows systems, as noted
+above.) You can also send output to standard output for piping in the usual
+way supported by the system:
+
+<blockquote>
+ <b><tt>gs -sOutputFile=- -q |</tt></b> ...
+</blockquote>
+or, as noted above,
+<blockquote>
+ <b><tt>gs -sOutputFile=%stdout -q |</tt></b> ...
+</blockquote>
+
+<p>
+(again, doubling the <b><tt>%</tt></b> character on MS Windows systems.)
+In this case you must also use the <a href="#Quiet"><b><tt>-q</tt></b>
+switch</a> to prevent Ghostscript from writing messages to standard output
+which become mixed with the intended output stream.
+
+<h4><a name="Output_to_graphics"></a>Output to graphics file formats</h4>
+
+<p>
+File formats like PCX and PBM are also "devices". When you select a file
+format as the "device", you must also specify an output file, for instance
+
+<blockquote><b><tt>
+gs -sDEVICE=pcxmono -sOutputFile=xyz.pcx
+</tt></b></blockquote>
+
+<p>
+Here, as with printable files, you can use "<b><tt>%d</tt></b>"
+("<b><tt>%%d</tt></b>" on DOS and MS Windows) to specify <a
+href="#One_page_per_file">one page per output file</a>.
+
+<h4><a name="Bounding_box_output"></a>Bounding box output</h4>
+
+<p>
+There is a special <b><tt>bbox</tt></b> "device" that just prints the
+bounding box of each page. You select it in the usual way:
+
+<blockquote><b><tt>
+gs -dNOPAUSE -dBATCH -sDEVICE=bbox
+</tt></b></blockquote>
+
+<p>
+It prints the output in a format like this:
+
+<blockquote>
+<pre><b><tt>%%BoundingBox: 14 37 570 719
+%%HiResBoundingBox: 14.308066 37.547999 569.495061 718.319158
+</tt></b></pre></blockquote>
+
+<p>
+Currently, it always prints the bounding box on <b><tt>stderr</tt></b>;
+eventually, it should also recognize <b><tt>-sOutputFile=</tt></b>.
+
+<p>
+Note that this device, like other devices, has a resolution and a (maximum)
+page size. As for other devices, the product (resolution x page size) is
+limited to approximately 500K pixels. By default, the resolution is 4000
+DPI and the maximum page size is approximately 125", or approximately 9000
+default (1/72") user coordinate units. If you need to measure larger pages
+than this, you must reset <em>both</em> the resolution and the page size in
+pixels, e.g.,
+
+<blockquote><b><tt>
+gs -dNOPAUSE -dBATCH -sDEVICE=bbox -r100 -g500000x500000
+</tt></b></blockquote>
+
+<h3><a name="Paper_size"></a>Choosing paper size</h3>
+
+<p>
+Ghostscript is distributed configured to use U.S. letter paper as its
+default page size. There are two ways to select other paper sizes from the
+command line:
+
+<ul>
+
+<li>
+If the desired paper size is listed in the section on <a
+href="#Known_paper_sizes">paper sizes known to Ghostscript</a> below, you
+can select it as the default paper size for a single invocation of
+Ghostscript by using the <b><tt>-sPAPERSIZE=</tt></b> switch, for instance
+
+<blockquote><b><tt>
+-sPAPERSIZE=a4<br>
+-sPAPERSIZE=legal
+</tt></b></blockquote>
+
+<li>
+Otherwise, let <em>w</em> be the desired paper width and <em>h</em> be the
+desired paper height, in 1/72" units. You can set the page size using the
+pair of switches
+
+<blockquote>
+<b><tt>-dDEVICEWIDTHPOINTS=</tt></b><em>w</em>
+<b><tt>-dDEVICEHEIGHTPOINTS=</tt></b><em>h</em>
+</blockquote>
+
+</ul>
+
+<p>
+Individual documents can (and often do) specify a paper size, which takes
+precedence over the default size. To force a specific paper size and
+ignore the paper size specified in the document, select a paper size as
+just described, and also include the
+<a href="#FIXEDMEDIA"><b><tt>-dFIXEDMEDIA</tt></b> switch</a> on the
+command line.
+
+<h3><a name="Change_default_size"></a>Changing the installed default paper size</h3>
+
+<p>
+You can change the installed default paper size in installing Ghostscript
+or later, by editing the initialization file <b><tt>gs_init.ps</tt></b>.
+Find the consecutive lines
+
+<blockquote><b><tt>
+%&nbsp;Optionally&nbsp;choose&nbsp;a&nbsp;default&nbsp;paper&nbsp;size&nbsp;other&nbsp;than&nbsp;U.S.&nbsp;letter.<br>
+%&nbsp;(a4)
+</tt></b></blockquote>
+
+<p>
+Then to make A4 the default paper size, uncomment the second line to change
+this to
+
+<blockquote><b><tt>
+%&nbsp;Optionally&nbsp;choose&nbsp;a&nbsp;default&nbsp;paper&nbsp;size&nbsp;other&nbsp;than&nbsp;U.S.&nbsp;letter.<br>
+(a4)
+</tt></b></blockquote>
+
+<p>
+For <b><tt>a4</tt></b> you can substitute any
+<a href="#Known_paper_sizes">paper size Ghostscript knows</a>.
+
+<h2><a name="Finding_files"></a>How Ghostscript finds files</h2>
+
+<p>
+When looking for initialization files (<b><tt>gs_*.ps</tt></b>,
+<b><tt>pdf_*.ps</tt></b>), font files, the <b><tt>Fontmap</tt></b> file,
+and files named on the command line, Ghostscript first tests whether the
+file name specifies an explicit directory.
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Testing a file name for an explicit directory</font><hr>
+<tr> <th align=left>System
+ <td>&nbsp;&nbsp;
+ <th align=left>Does the name ...
+<tr> <td colspan=3><hr>
+<tr> <td valign=top>Unix
+ <td>&nbsp;
+ <td>Begin with <b><tt><u>/</u></tt></b>, <b><tt><u>./</u></tt></b> or <b><tt><u>../</u></tt></b> ?
+<tr> <td valign=top>DOS or MS Windows
+ <td>&nbsp;
+ <td>Have <b><tt><u>:</u></tt></b> as its second character, or
+ begin with <b><tt><u>/</u></tt></b>, <b><tt><u>\</u></tt></b>,
+ <b><tt><u>./</u></tt></b>, <b><tt><u>../</u></tt></b>, <b><tt><u>.\</u></tt></b>, or <b><tt><u>..\</u></tt></b> ?
+<tr> <td valign=top>VMS
+ <td>&nbsp;
+ <td>Contain a node, device, root, or directory specification?
+</table></blockquote>
+
+<p><a name="General_search_path"></a> If the test succeeds, the file name
+specifies an explicit directory and Ghostscript tries to open the file
+using the name given. Otherwise it tries directories in this order:
+
+<ol>
+<li>The current directory (unless disabled by the
+<a href="#P-_switch"><b><tt>-P-</tt></b> switch</a>);
+
+<li>The directories specified by <a href="#I_switch"><b><tt>-I</tt></b>
+switches</a> in the command line, if any;
+
+<li>The directories specified by the <b><tt>GS_LIB</tt></b>
+environment variable, if any;
+
+<li>The directories specified by the
+<b><tt>GS_LIB_DEFAULT</tt></b> macro (if any) in the makefile
+when this executable was built.
+</ol>
+
+<p>
+<b><tt>GS_LIB_DEFAULT</tt></b>,
+<b><tt>GS_LIB</tt></b>, and the
+<b><tt>-I</tt></b> parameter may specify either a single
+directory or a list of directories separated by a character appropriate for
+the operating system ("<b><tt>:</tt></b>" on Unix systems,
+"<b><tt>,</tt></b>" on VMS systems, and
+"<b><tt>;</tt></b>" on DOS systems). We think that trying
+the current directory first is a very bad idea -- it opens serious security
+loopholes and can lead to very confusing errors if one has more than one
+version of Ghostscript in one's environment -- but when we attempted to
+change it, users insisted that we change it back. You can disable looking
+in the current directory first by using the
+<a href="#P_switch"><b><tt>-P-</tt></b> switch</a>.
+
+<p>
+Note that Ghostscript does not use this file searching algorithm for the
+<b><tt>run</tt></b> or <b><tt>file</tt></b>
+operators: for these operators, it simply opens the file with the name
+given. To run a file using the searching algorithm, use
+<b><tt>runlibfile</tt></b> instead of
+<b><tt>run</tt></b>.
+
+<h3><a name="PS_resources"></a>Finding PostScript Level 2 resources</h3>
+
+<p>
+Ghostscript uses a completely different rule for looking for files
+containing PostScript Level 2 "resources": per the Adobe documentation, it
+concatenates together
+
+<ol>
+<li>the value of the system parameter
+<b><tt>GenericResourceDir</tt></b> (initially
+<b><tt>/Resource/</tt></b>)
+
+<li>the name of the resource category (for instance, <b><tt>ProcSet</tt></b>)
+
+<li>the value of the system parameter
+<b><tt>GenericResourcePathSep</tt></b> (initially
+"<b><tt>/</tt></b>")
+
+<li>the name of the resource instance (for instance, <b><tt>CIDInit</tt></b>)
+</ol>
+
+<p>
+To look up fonts, after exhausting the search method described in <a href="#Font_lookup">the
+next section</a>, it concatenates together
+
+<ol>
+<li>the value of the system parameter
+<b><tt>FontResourceDir</tt></b> (initially
+<b><tt>/Resource/Font/</tt></b>)
+
+<li>the name of the resource font (for instance, <b><tt>Times-Roman</tt></b>)
+</ol>
+
+<p>
+Note that even though the system parameters are named "somethingDir", they
+are not just plain directory names: they have "<b><tt>/</tt></b>" on the
+end, so that they can be concatenated with the category name or font name.
+
+<h3><a name="Font_lookup"></a>Font lookup</h3>
+
+<p>
+Ghostscript has a slightly different way to find the file containing a font
+with a given name. This rule uses not only the search path defined by
+<b><tt>-I</tt></b>, <b><tt>GS_LIB</tt></b>, and
+<b><tt>GS_LIB_DEFAULT</tt></b> <a href="#General_search_path">as described
+above</a>, but also the directory that is the value of the
+<b><tt>FontResourceDir</tt></b> system parameter, and an additional list of
+directories that is the value of the <b><tt>GS_FONTPATH</tt></b> environment
+variable (or the value provided with the <b><tt>-sFONTPATH=</tt></b> switch,
+if present).
+
+<p>
+At startup time, Ghostscript reads in the <b><tt>Fontmap</tt></b> files in
+every directory on the search path (or in the list provided with the
+<b><tt>-sFONTMAP=</tt></b> switch, if present): these files are catalogs of
+fonts and the files that contain them. (See <a href="Fonts.htm#Fontmap">the
+documentation of fonts</a> for details.) Then, when Ghostscript needs to
+find a font that isn't already loaded into memory, it goes through a series
+of steps.
+
+<ul>
+
+<li>
+First, it looks up the font name in the combined Fontmaps. If there is an
+entry for the desired font name, and the file named in the entry can be
+found in some directory on the general search path (defined by
+<b><tt>-I</tt></b>, <b><tt>GS_LIB</tt></b>, and
+<b><tt>GS_LIB_DEFAULT</tt></b>), and the file is loaded successfully, and
+loading it defines a font of the desired name, that is the end of the
+process.
+
+<li>
+If this process fails at any step, Ghostscript looks for a file whose name
+is the concatenation of the value of the <b><tt>FontResourceDir</tt></b>
+system parameter and the font name, with no extension. If such a file
+exists, can be loaded, and defines a font of the desired name, that again is
+the end. The value of <b><tt>FontResourceDir</tt></b> is normally the
+string <b><tt>/Resource/Font/</tt></b>, but it can be changed with the
+<b><tt>setsystemparams</tt></b> operator: see the PostScript Language
+Reference Manual for details.
+
+<li>
+If that fails, Ghostscript then looks for a file on the general search path
+whose name is the desired font name, with no extension. If such a file
+exists, can be loaded, and defines a font of the desired name, that again is
+the end.
+
+<li>
+If that too fails, Ghostscript looks at the <b><tt>GS_FONTPATH</tt></b>
+environment variable (or the value provided with the
+<b><tt>-sFONTPATH=</tt></b> switch, if present), which is also a list of
+directories. It goes to the first directory on the list, looking for all
+files that appear to contain PostScript fonts; it then adds all those files
+and fonts to the combined Fontmaps, and starts over.
+
+<li>
+If scanning the first FONTPATH directory doesn't produce a file that
+provides the desired font, it adds the next directory on the FONTPATH list,
+and so on until either the font is defined successfully or the list is
+exhausted.
+
+<li>
+Finally, if all else fails, it will try to find a substitute for the font
+from among the standard 35 fonts.
+
+</ul>
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Differences between search path and font path</font><hr>
+<tr> <th>Search path
+ <td>&nbsp;&nbsp;&nbsp;
+ <th>Font path
+<tr> <td colspan=3><hr>
+<tr> <td><b><tt>-I</tt></b> switch
+ <td>&nbsp;
+ <td><b><tt>-sFONTPATH=</tt></b> switch
+<tr> <td>&nbsp;
+<tr> <td><b><tt>GS_LIB</tt></b> and <b><tt>GS_LIB_DEFAULT</tt></b>
+ environment variables
+ <td>&nbsp;
+ <td><b><tt>GS_FONTPATH</tt></b> environment variable
+<tr> <td>&nbsp;
+<tr> <td valign=top>Consulted first
+ <td>&nbsp;
+ <td valign=top>Consulted only if search path and
+ <b><tt>FontResourceDir</tt></b> don't provide the file.
+<tr> <td>&nbsp;
+<tr> <td valign=top>Font-name-to-file-name mapping given in Fontmap
+ files; aliases are possible, and there need not be any relation
+ between the font name in the Fontmap and the
+ <b><tt>FontName</tt></b> in the file.
+ <td>&nbsp; <td valign=top>Font-name-to-file-name mapping is
+ implicit -- the <b><tt>FontName</tt></b> in the file is
+ used. Aliases are not possible.
+<tr> <td>&nbsp;
+<tr> <td valign=top>Only fonts and files named in Fontmap are used.
+ <td>&nbsp;
+ <td valign=top>Every Type 1 font file in each directory is
+ available; if TrueType fonts are supported (the
+ <b><tt>ttfont.dev</tt></b> feature was included when the
+ executable was built), they are also available.
+</table></blockquote>
+
+<p>
+If you are using one of the following types of computer, you may wish to
+set the environment variable <b><tt>GS_FONTPATH</tt></b> to
+the value indicated so that Ghostscript will automatically acquire all the
+installed Type 1 (and, if supported, TrueType) fonts (but see below for
+notes on systems marked with "*"):
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Suggested <b><tt>GS_FONTPATH</tt></b> for different systems</font><hr>
+<tr> <td>&nbsp;
+ <td>&nbsp;&nbsp;
+ <th align=left>System type
+ <td>&nbsp;&nbsp;
+ <th valign=bottom align=left><b><tt>GS_FONTPATH</tt></b>
+<tr> <td colspan=5><hr>
+<tr> <td>&nbsp;
+ <td>&nbsp;
+ <td valign=top>Digital Unix
+ <td>&nbsp;
+ <td><b><tt>/usr/lib/X11/fonts/Type1Adobe</tt></b>
+<tr> <td>&nbsp;
+ <td>&nbsp;
+ <td valign=top>Ultrix
+ <td>&nbsp;
+ <td><b><tt>/usr/lib/DPS/outline/decwin</tt></b>
+<tr> <td>&nbsp;
+ <td>&nbsp;
+ <td valign=top>HP-UX 9
+ <td>&nbsp;
+ <td><b><tt>/usr/lib/X11/fonts/type1.st/typefaces</tt></b>
+<tr> <td>&nbsp;
+ <td>&nbsp;
+ <td valign=top>IBM AIX
+ <td>&nbsp;
+ <td><b><tt>/usr/lpp/DPS/fonts/outlines
+ <br>/usr/lpp/X11/lib/X11/fonts/Type1
+ <br>/usr/lpp/X11/lib/X11/fonts/Type1/DPS</tt></b>
+<tr> <td>&nbsp;
+ <td>&nbsp;
+ <td valign=top>NeXT
+ <td>&nbsp;
+ <td><b><tt>/NextLibrary/Fonts/outline</tt></b>
+<tr> <td>*
+ <td>&nbsp;
+ <td valign=top>SGI IRIX
+ <td>&nbsp;
+ <td><b><tt>/usr/lib/DPS/outline/base
+ <br>/usr/lib/X11/fonts/Type1</tt></b>
+<tr> <td>&nbsp;
+ <td>&nbsp;
+ <td valign=top>SunOS 4.x<br>(NeWSprint only)
+ <td>&nbsp;
+ <td valign=top><b><tt>newsprint_2.5/SUNWsteNP/reloc/$BASEDIR/NeWSprint/<br>&nbsp;&nbsp;&nbsp;&nbsp;small_openwin/lib/fonts</tt></b>
+<tr> <td>**
+ <td>&nbsp;
+ <td valign=top>SunOS 4.x
+ <td>&nbsp;
+ <td><b><tt>/usr/openwin/lib/X11/fonts/Type1/outline</tt></b>
+<tr> <td>**
+ <td>&nbsp;
+ <td valign=top>Solaris 2.x
+ <td>&nbsp;
+ <td><b><tt>/usr/openwin/lib/X11/fonts/Type1/outline</tt></b>
+<tr> <td>&nbsp;
+ <td>&nbsp;
+ <td valign=top>VMS
+ <td>&nbsp;
+ <td><b><tt>SYS$COMMON:[SYSFONT.XDPS.OUTLINE]</tt></b>
+</table>
+
+<hr align=left width="25%">
+
+<p>
+<b>*</b> On SGI IRIX systems, you must use <b><tt>Fontmap.SGI</tt></b> in
+place of <b><tt>Fontmap</tt></b> or <b><tt>Fontmap.GS</tt></b>, because
+otherwise the entries in <b><tt>Fontmap</tt></b> will take precedence over
+the fonts in the FONTPATH directories.
+
+<p>
+<b>**</b> On Solaris systems simply setting <b><tt>GS_FONTPATH</tt></b> or
+using <b><tt>-sFONTPATH=</tt></b> may not work, because for some reason some
+versions of Ghostscript can't seem to find any of the Type1 fonts in
+<b><tt>/usr/openwin/lib/X11/fonts/Type1/outline</tt></b>. (It says: "15
+files, 15 scanned, 0 new fonts". We think this problem has been fixed in
+Ghostscript version 6.0, but we aren't sure because we've never been able to
+reproduce it.) See <b><tt>Fontmap.Sol</tt></b> instead. Also, on Solaris
+2.x it's probably not worth your while to add Sun's fonts to your font path
+and Fontmap. The fonts Sun distributes on Solaris 2.x in the directories
+
+<blockquote><b><tt>
+ /usr/openwin/lib/X11/fonts/Type1<br>
+ /usr/openwin/lib/X11/fonts/Type1/outline
+</tt></b></blockquote>
+
+<p>
+are already represented among the ones distributed as part of Ghostscript;
+and on some test files, Sun's fonts have been shown to cause incorrect
+displays with Ghostscript.
+
+</blockquote>
+
+<p>
+These paths may not be exactly right for your installation; if the indicated
+directory doesn't contain files whose names are familiar font names like
+Courier and Helvetica, you may wish to ask your system administrator where
+to find these fonts.
+
+<p>
+Adobe Acrobat comes with a set of fourteen Type 1 fonts, on Unix typically
+in a directory called ...<b><tt>/Acrobat3/Fonts</tt></b>. There is no
+particular reason to use these instead of the corresponding fonts in the
+Ghostscript distribution (which are of just as good quality), except to save
+about a megabyte of disk space, but the installation documentation explains
+how to do it <a href="Install.htm#Unix_Fonts">on Unix</a> and <a
+href="Install.htm#Use_platform_fonts_DOS">on DOS</a> (where you can also use
+Adobe Type Manager fonts).
+
+<h3><a name="Temp_files"></a>Temporary files</h3>
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Where Ghostscript puts temporary files</font><hr>
+<tr valign=bottom>
+ <th align=left>Platform
+ <td>&nbsp;&nbsp;&nbsp;
+ <th align=left>Filename
+ <td>&nbsp;&nbsp;&nbsp;
+ <th align=left>Location
+<tr> <td colspan=5><hr>
+<tr valign=top> <td>DOS and OpenVMS
+ <td>&nbsp;
+ <td><b><tt>_temp_</tt></b>XX.XXX
+ <td>&nbsp;
+ <td>Current directory
+<tr valign=top> <td>OS/2
+ <td>&nbsp;
+ <td><b><tt>gs</tt></b>XXXXXX
+ <td>&nbsp;
+ <td>Current directory
+<tr valign=top> <td>Unix
+ <td>&nbsp;
+ <td><b><tt>gs_</tt></b>XXXXX
+ <td>&nbsp;
+ <td><b><tt>/tmp</tt></b>
+</table></blockquote>
+
+<p>
+You can change in which directory Ghostscript creates temporary files by
+setting the <b><tt>TMPDIR</tt></b> or <b><tt>TEMP</tt></b> environment
+variable to the name of the directory you want used. Ghostscript currently
+doesn't do a very good job of deleting temporary files if it exits because
+of an error; you may have to delete them manually from time to time.
+
+<dl>
+<dt><b><tt>GS</tt></b>, <b><tt>GSC</tt></b> (MS Windows only)
+<dd>Specify the names of the Ghostscript executables. <b><tt>GS</tt></b>
+brings up a new typein window and possibly a graphics window;
+<b><tt>GSC</tt></b> uses the DOS console. If these are not set,
+<b><tt>GS</tt></b> defaults to <b><tt>gswin32</tt></b>, and
+<b><tt>GSC</tt></b> defaults to <b><tt>gswin32c</tt></b>.
+</dl>
+
+<h2><a name="Environment_variables"></a>Summary of environment variables</h2>
+
+<dl>
+<dt><a href="#GS_DEVICE"><b><tt>GS_DEVICE</tt></b></a>
+<dd>Defines the default output device.
+</dl>
+
+<dl>
+<dt><a href="#Font_lookup"><b><tt>GS_FONTPATH</tt></b></a>
+<dd>Specifies a list of directories to scan for fonts if a font requested
+can't be found anywhere on the search path.
+</dl>
+
+<dl>
+<dt><a href="#Finding_files"><b><tt>GS_LIB</tt></b></a>
+<dd>Provides a search path for initialization files and fonts.
+</dl>
+
+<dl>
+<dt><b><tt>GS_OPTIONS</tt></b>
+<dd>Defines a list of command-line arguments to be processed before the
+ones actually specified on the command line. For example, setting
+<b><tt>GS_DEVICE</tt></b> to XYZ is equivalent to setting
+<b><tt>GS_OPTIONS</tt></b> to <b><tt>-sDEVICE=XYZ</tt></b>. The contents
+of <b><tt>GS_OPTIONS</tt></b> are not limited to switches; they may include
+actual file names or even <a href="#Input_control">"@file" arguments</a>.
+
+</dl>
+
+<dl>
+<dt><a href="#Temp_files"><b><tt>TEMP</tt></b>, <b><tt>TMPDIR</tt></b></a>
+<dd>Defines a directory name for temporary files. If both
+<b><tt>TEMP</tt></b> and <b><tt>TMPDIR</tt></b> are defined,
+<b><tt>TMPDIR</tt></b> takes precedence.
+</dl>
+
+<hr>
+<h2><a name="CIDFontSubstitution"></a>CID font substitution</h2>
+
+<p>
+CID fonts are PostScript resources containing
+large number of glyphs (e.g. glyphs for Far East languages).
+Please refer Postscript Language Reference,
+third edition, for details.
+
+
+<p>
+CID font resources are different kind of PostScript resources than fonts.
+Particularly they cannot be used as regular fonts. For doing this,
+CID font resourse first to be combined with a CMap resource, which
+defines specific codes for hieroglyphs (this allows to use
+same collection of hieroglyphs with different encodings).
+
+<p>
+The simplest method to request a font composed of CID font resource and CMap resource
+is to code
+<blockquote><b><tt>
+/CIDFont-CMap findfont
+</tt></b></blockquote>
+in a PostScript document, where <b><tt>CIDFont</tt></b> is a name of any
+CID font resourse, and <b><tt>CMap</tt></b> is a name of a CMap resource,
+being designed for same character collection. The interpreter will compose
+the font automatically from the specified CID font and CMap resources.
+Another method is based on the operator <b><tt>composefont</tt></b>.
+
+<p>
+For substituting CID font resources Ghostscript 6.53 and 7.0x provides
+the control file "CIDFnmap", which defines a CID font resource map.
+please refer
+<a href="CJK.htm#About_CIDFnmap">"About CIDFnmap of Ghostscript"</a>
+in CJK.htm. However, "CIDFnmap" will be replaced by "cidfmap" in
+Ghostscript 7.2x and later releases.
+
+
+<h2><a name="EPS"></a>Using Ghostscript with EPS files</h2>
+<p>
+Encapsulated PostScript (EPS) files are intended to be encapsulated
+in another PostScript document and may not display or print on their
+own. An EPS file must conform to the Document Structuring Conventions,
+must include a <b><tt>%%BoundingBox:</tt></b> line to indicate the
+rectangle in which it will draw, must not use PostScript commands
+which will interfere with the document importing the EPS,
+and can have either zero pages or one page.
+Ghostscript has support for handling EPS files, but requires
+that the <b><tt>%%BoundingBox:</tt></b> be in the header,
+not the trailer.
+</p>
+<p>
+For the official description of the EPS file format, please
+refer to the Adobe documentation in their tech note #5002. It
+is available from:
+<a href="http://partners.adobe.com/asn/developer/technotes/postscript.html"
+class="offsite">
+http://partners.adobe.com/asn/developer/technotes/postscript.html</a>
+</p>
+<p>
+To crop an EPS file to the bounding box:
+<blockquote>
+<b><tt>
+ gs -dEPSCrop file.eps
+</tt></b>
+</blockquote>
+</p>
+<p>
+To resize an EPS file to fit the page:
+<blockquote>
+<b><tt>
+ gs -dEPSFitPage file.eps
+</tt></b>
+</blockquote>
+</p>
+<p>
+To disable special processing of EPS files:
+<blockquote>
+<b><tt>
+ gs -dNOEPS file.eps
+</tt></b>
+</blockquote>
+</p>
+
+<h2><a name="PDF"></a>Using Ghostscript with PDF files</h2>
+
+<p>
+Ghostscript is normally built (except on 16-bit DOS platforms) to interpret
+both PostScript and PDF files, examining each file to determine
+automatically whether its contents are PDF or PostScript. All the normal
+switches and procedures for interpreting PostScript files also apply to PDF
+files, with a few exceptions. In addition, the
+<b><tt>pdf2ps</tt></b> utility uses Ghostscript to convert
+PDF to (Level 2) PostScript.
+
+<h3><a name="PDF_stdin"></a>PDF files from standard input</h3>
+
+<p>
+The PDF language, unlike the PostScript language, inherently requires
+random access to the file.
+If you provide PDF to standard input using the
+<a href="#Pipe_input">"<b><tt>-</tt></b>" or "<b><tt>-_</tt></b>"
+switch</a>,
+ghostscript will copy it to a temporary file before interpreting the PDF.
+
+<h3><a name="PDF_switches"></a>Switches for PDF files</h3>
+
+<dl>
+<dt><b><tt>-dFirstPage=</tt></b><em>pagenumber</em>
+<dd>Begins interpreting on the designated page of the document.
+</dl>
+
+<dl>
+<dt><b><tt>-dLastPage=</tt></b><em>pagenumber</em>
+<dd>Stops interpreting after the designated page of the document.
+</dl>
+
+<dl>
+<dt><b><tt>-dPrinted</tt></b>
+<dt><b><tt>-dPrinted=false</tt></b>
+<dd>Determines whether the file should be displayed or printed using the
+"screen" or "printer" options for annotations and images. With
+<b><tt>-dPrinted</tt></b>, the output will use the file's "print"
+options; with <b><tt>-dPrinted=false</tt></b>, the output will use the
+file's "screen" options. If neither of these is specified, the output will
+use the screen options for any output device that doesn't have an
+<b><tt>OutputFile</tt></b> parameter, and the printer options for
+devices that do have this parameter.
+</dl>
+
+<dl>
+<dt><b><tt>-dUseCropBox</tt></b>
+<dd>Sets the page size to the CropBox rather than the MediaBox.
+Some files have a CropBox that is smaller than the MediaBox and
+may include white space, registration or cutting marks outside
+the CropBox. Using this option will set the page size
+appropriately for a viewer.
+</dl>
+
+<dl>
+<dt><b><tt>-sPDFPassword=</tt></b><em>password</em>
+<dd>Sets the user or owner password to be used in decoding encrypted
+PDF files.
+</dl>
+
+<h3><a name="PDF_problems"></a>Problems interpreting a PDF file</h3>
+
+<p>
+Occasionally you may try to read or print a <b><tt>*.pdf</tt></b> file that
+Ghostscript doesn't recognize as PDF, even though the same file
+<b><em>can</em></b> be opened and interpreted by an Adobe Acrobat viewer.
+This can happen when, for instance, a PDF file produced on a Macintosh is
+carelessly moved to another kind of system, leaving now-useless
+Macintosh-specific data before the standard header. Ghostscript can't read
+these files because they don't conform to the PDF standard, Adobe's <a
+href="http://partners.adobe.com/asn/developer/acrosdk/docs/PDFRef.pdf"
+class="offsite"><cite>Portable
+Document Format Reference Manual</cite></a>, version 1.2, which states:
+
+<blockquote>
+The first line of a PDF file specifies the version number of the PDF
+specification to which the file adheres.... [T]he first line of a
+1.2-conforming PDF file should be <b><tt>%PDF-1.2</tt></b>.
+</blockquote>
+
+<p>
+However, in an appendix the manual also says that Adobe
+
+<blockquote>
+Acrobat viewers are very liberal in their check for a valid PDF header.
+All viewers allow the header to appear anywhere in the first 1,000 bytes of
+the file.
+</blockquote>
+
+<p>
+Ghostscript doesn't do this: it expects PDF files to conform to the
+standard, because that's how it recognizes them among other formats it
+handles, unlike Acrobat viewers which need deal only with PDF and can
+therefore afford to be more liberal with PDF. So if you encounter a file
+with useless characters before the header and you want to use it with
+Ghostscript, you can fix it by stripping the extra characters from before
+the standard header. The file should begin with exactly the characters
+
+<blockquote><b><tt>
+%PDF
+</tt></b></blockquote>
+
+<p>
+PDF files are binary, not text, so be careful to edit the file as a binary,
+not as text. On Unix, after determining the length of the useless prefix
+string, which you can do with <b><tt>od</tt></b>, you can use
+<b><tt>tail</tt></b> to strip them off. For instance:
+
+<blockquote>
+<b><tt>od -c Macintosh.pdf | more</tt></b> ;# <em>shows that <b><tt>%PDF</tt></b> occurs after 128 characters</em><br>
+<b><tt>tail +128c Macintosh.pdf &gt;Legal.pdf</tt></b>
+</blockquote>
+
+<p>
+On PCs and other systems you can use the <b><tt>hexl</tt></b> program
+distributed with GNU emacs to convert the PDF file to editable text form.
+After editing, <b><tt>hexl</tt></b> can convert the text form back to
+binary.
+
+<hr>
+
+<h2><a name="Platforms"></a>Notes on specific platforms</h2>
+
+<h3><a name="Unix"></a>Unix</h3>
+
+<p>
+The Ghostscript distribution includes some Unix shell scripts to use with
+Ghostscript in different environments. These are all user-contributed
+code, so if you have questions, please contact the user identified in the
+file, not Aladdin Enterprises or artofcode LLC.
+
+<dl>
+<dt><b><tt>pv.sh</tt></b>
+<dd>Preview a specified page of a <b><tt>dvi</tt></b> file in an X window
+</dl>
+
+<dl>
+<dt><b><tt>sysvlp.sh</tt></b>
+<dd>System V 3.2 lp interface for parallel printer
+</dl>
+
+<dl>
+<dt><b><tt>pj-gs.sh</tt></b>
+<dd>Printing on an H-P PaintJet under HP-UX
+</dl>
+
+<dl>
+<dt><b><tt>unix-lpr.sh</tt></b>
+<dd>Queue filter for <b><tt>lpr</tt></b> under Unix;
+<a href="Unix-lpr.htm">its documentation</a> is intended for system
+administrators
+</dl>
+
+<dl>
+<dt><b><tt>lprsetup.sh</tt></b>
+<dd>Setup for <b><tt>unix-lpr.sh</tt></b>
+</dl>
+
+<hr>
+
+<h3><a name="VMS"></a>VMS</h3>
+
+<ul>
+<li>To be able to specify switches and file names when invoking the
+interpreter, define <b><tt>gs</tt></b> as a foreign command:
+
+<blockquote>
+<b><tt>$ gs == "$</tt></b><em>disk</em><b><tt>:[</tt></b><em>directory</em><b><tt>]gs.exe</tt></b>"
+</blockquote>
+
+<p>
+where the "<em>disk</em>" and "<em>directory</em>" specify where
+the Ghostscript executable is located. For instance,
+
+<blockquote><b><tt>
+$ gs == "$dua1:[ghostscript]gs.exe"
+</tt></b></blockquote>
+
+<li>On VMS systems, the last character of each "directory" name indicates
+what sort of entity the "directory" refers to. If the "directory" name
+ends with a colon "<b><tt>:</tt></b>", it is taken to refer to a logical
+device, for instance
+
+<blockquote><b><tt>
+$ define ghostscript_device dua1:[ghostscript_510]<br>
+$ define gs_lib ghostscript_device:
+</tt></b></blockquote>
+
+<p>
+If the "directory" name ends with a closing square bracket
+"<b><tt>]</tt></b>", it is taken to refer to a real directory, for instance
+
+<blockquote><b><tt>
+$ define gs_lib dua1:[ghostscript]
+</tt></b></blockquote>
+
+<li>Defining the logical <b><tt>GS_LIB</tt></b>
+
+<blockquote>
+<b><tt>$ define gs_lib</tt></b> <em>disk</em><b><tt>:[</tt></b><em>directory</em><b><tt>]</tt></b>
+</blockquote>
+
+<p>
+allows Ghostscript to find its initialization files in the Ghostscript
+directory even if that's not where the executable resides.<br>&nbsp;
+
+<li>Although VMS DCL itself converts unquoted parameters to upper case, C
+programs such as Ghostscript receive their parameters through the C runtime
+library, which forces all unquoted command-line parameters to lower case.
+That is, with the command
+
+<blockquote><b><tt>
+$ gs -Isys$login:
+</tt></b></blockquote>
+
+<p>
+Ghostscript sees the switch as <b><tt>-isys$login</tt></b>,
+which doesn't work. To preserve the case of switches, quote them like
+this:
+
+<blockquote><b><tt>
+$ gs "-Isys$login:"
+</tt></b></blockquote>
+
+<li>If you write printer output to a file with
+<b><tt>-sOutputFile=</tt></b> and then want to print the file later, use
+"<b><tt>PRINT/PASSALL</tt></b>".
+</ul>
+
+<ul>
+<li>PDF files (or PostScript files that use the
+<b><tt>setfileposition</tt></b> operator) must be "stream LF" type files to
+work properly on VMS systems. (<b><em>Note:</em></b> This definitely matters
+if Ghostscript was compiled with DEC C; we are not sure of the situation if
+you use <b><tt>gcc</tt></b>.) Because of this, if you transfer files by
+FTP, you probably need to do one of these two things after the transfer:
+
+<ol>
+<li>If the FTP transfer was in text (ASCII) mode:
+
+<blockquote>
+<b><tt>$ convert/fdl=streamlf.fdl</tt></b> input-file output-file
+</blockquote>
+
+<p>
+where the contents of the file <b><tt>STREAMLF.FDL</tt></b> are
+
+<blockquote>
+<pre>FILE
+ ORGANIZATION sequential
+
+RECORD
+ BLOCK_SPAN yes
+ CARRIAGE_CONTROL carriage_return
+ FORMAT stream_lf
+</pre></blockquote>
+
+<li>If the FTP transfer was in binary mode:
+
+<blockquote><b><tt>
+ $ set file/attribute=(rfm:stmlf)
+</tt></b></blockquote>
+</ol>
+</ul>
+
+<h4><a name="VMS_X_Windows"></a>Using X Windows on VMS</h4>
+
+<p>
+If you are using on an X Windows display, you can set it up with the node
+name and network transport, for instance
+
+<blockquote><b><tt>
+ $ set display/create/node="doof.city.com"/transport=tcpip
+</tt></b></blockquote>
+
+<p>
+and then run Ghostscript by typing <b><tt>gs</tt></b> at the command line.
+
+<hr>
+
+<h3><a name="MS_Windows"></a>MS Windows</h3>
+
+<p>
+You must add <em>gs\</em><b><tt>bin</tt></b> and
+<em>gs\</em><b><tt>lib</tt></b> to the <b><tt>PATH</tt></b>, where
+<em>gs</em> is the top-level Ghostscript directory.
+
+<p>
+When passing options to ghostcript through a batch file wrapper such as
+<tt>ps2pdf.bat</tt> you need to substitute '#' for '=' as the separator
+between options and their arguments. For example:
+<blockquote><pre>
+ps2pdf -sPAPERSIZE#a4 file.ps file.pdf
+</pre></blockquote>
+
+Ghostscript treats '#' the same internally, and the '=' is mangled by
+the command shell.
+
+<hr>
+
+<h3><a name="MS-DOS"></a>MS-DOS</h3>
+
+<p>
+<strong>Note:</strong> Ghostscript is no longer supported on MS-DOS. This
+documentation is included for historical interest only.
+
+<p>
+You must add <em>gs\</em><b><tt>bin</tt></b> and
+<em>gs\</em><b><tt>lib</tt></b> to the <b><tt>PATH</tt></b>, where
+<em>gs</em> is the top-level Ghostscript directory.
+
+<ul>
+<li>
+Ghostscript supports many SuperVGA displays directly, most of them with
+more than 16 colors. The complete list is in the file
+<b><tt>devs.mak</tt></b>, part of Ghostscript's
+<a href="#Source_code">source code</a>.
+
+<li>
+Some applications, such as Microsoft Word, require a prologue in front of
+the PostScript files they produce. In the case of MS Word, this prologue
+is one of the *.ini files Microsoft includes with Word. Other applications
+may require other prologues. You may specify a prologue on the Ghostscript
+command line, for instance
+
+<blockquote><b><tt>
+ gs386 prologue.ini myfile.ps
+</tt></b></blockquote>
+
+<li>
+If you have a SuperVGA display that supports a 16-color mode with 800x600
+pixels and you know the display mode number for this mode, you can select
+it by using the command line switches
+
+<blockquote>
+<b><tt>-sDEVICE=svga16 -dDisplayMode=</tt></b><em>NNN</em>
+</blockquote>
+
+<p>
+where <em>NNN</em> is the display mode number in decimal. Here are modes
+for some popular display chipsets; the ones that use the default value are
+marked "*". If your card's chipset doesn't appear on this list, or if you
+try the value here and it doesn't work, please send the name of the chipset
+and its correct display mode to &lt;<a href="mailto:bug-gs@aladdin.com">bug-gs@aladdin.com</a>&gt; to include in
+future releases.
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=6 bgcolor="#CCCC00"><hr><font size="+1">Display modes for PC display chipsets</font><hr>
+<tr> <td>&nbsp;
+ <th>Chipset
+ <td>&nbsp;
+ <th>Decimal
+ <td>&nbsp;
+ <th>Hex
+<tr> <td colspan=6><hr>
+<tr> <td>&nbsp;
+ <td>Acumos AVGA2, AVGA3
+ <td>&nbsp;
+ <td align=center>88
+ <td>&nbsp;
+ <td align=right><tt>0x58</tt>
+<tr> <td>&nbsp;
+ <td>Advance Logic AL2101
+ <td>&nbsp;
+ <td align=center>43
+ <td>&nbsp;
+ <td align=right><tt>0x2B</tt>
+<tr> <td>&nbsp;
+ <td>Ahead V5000
+ <td>&nbsp;
+ <td align=center>113
+ <td>&nbsp;
+ <td align=right><tt>0x71</tt>
+<tr> <td>&nbsp;
+ <td>ATI VGAWONDER, Graphics Ultra etc.
+ <td>&nbsp;
+ <td align=center>84
+ <td>&nbsp;
+ <td align=right><tt>0x54</tt>
+<tr> <td>&nbsp;
+ <td>Chips and Technologies
+ <td>&nbsp;
+ <td align=center>106
+ <td>&nbsp;
+ <td align=right><tt>0x6A</tt>
+<tr> <td>&nbsp;
+ <td>Cirrus Logic CL-GD 500/600
+ <td>&nbsp;
+ <td align=center>100
+ <td>&nbsp;
+ <td align=right><tt>0x64</tt>
+<tr> <td>&nbsp;
+ <td>Cirrus Logic GD 5422
+ <td>&nbsp;
+ <td align=center>88
+ <td>&nbsp;
+ <td align=right><tt>0x58</tt>
+<tr> <td>&nbsp;
+ <td>Compaq VGA
+ <td>&nbsp;
+ <td align=center>89
+ <td>&nbsp;
+ <td align=right><tt>0x59</tt>
+<tr> <td>&nbsp;
+ <td>CTI
+ <td>&nbsp;
+ <td align=center>106
+ <td>&nbsp;
+ <td align=right><tt>0x6A</tt>
+<tr> <td>*
+ <td>Genoa 5xxx, Sigma VGA
+ <td>&nbsp;
+ <td align=center>41
+ <td>&nbsp;
+ <td align=right><tt>0x29</tt>
+<tr> <td>&nbsp;
+ <td>Genoa 6xxx
+ <td>&nbsp;
+ <td align=center>106
+ <td>&nbsp;
+ <td align=right><tt>0x6A</tt>
+<tr> <td>&nbsp;
+ <td>MXIC MX 68010
+ <td>&nbsp;
+ <td align=center>85
+ <td>&nbsp;
+ <td align=right><tt>0x55</tt>
+<tr> <td>&nbsp;
+ <td>NCR 77C22
+ <td>&nbsp;
+ <td align=center>88
+ <td>&nbsp;
+ <td align=right><tt>0x58</tt>
+<tr> <td>&nbsp;
+ <td>OAK Technologies OTI-067, OTI-077, OTI037C
+ <td>&nbsp;
+ <td align=center>82
+ <td>&nbsp;
+ <td align=right><tt>0x52</tt>
+<tr> <td>&nbsp;
+ <td>OAK Technologies OTI037C w/ NEL BIOS
+ <td>&nbsp;
+ <td align=center>91
+ <td>&nbsp;
+ <td align=right><tt>0x5B</tt>
+<tr> <td>*
+ <td>Orchid Prodesigner
+ <td>&nbsp;
+ <td align=center>41
+ <td>&nbsp;
+ <td align=right><tt>0x29</tt>
+<tr> <td>&nbsp;
+ <td>Paradise
+ <td>&nbsp;
+ <td align=center>88
+ <td>&nbsp;
+ <td align=right><tt>0x58</tt>
+<tr> <td>&nbsp;
+ <td>Poach
+ <td>&nbsp;
+ <td align=center>106
+ <td>&nbsp;
+ <td align=right><tt>0x6A</tt>
+<tr> <td>&nbsp;
+ <td>Primus
+ <td>&nbsp;
+ <td align=center>42
+ <td>&nbsp;
+ <td align=right><tt>0x2A</tt>
+<tr> <td>&nbsp;
+ <td>Realtek RT 3106
+ <td>&nbsp;
+ <td align=center>31
+ <td>&nbsp;
+ <td align=right><tt>0x1F</tt>
+<tr> <td>&nbsp;
+ <td>Tecmar
+ <td>&nbsp;
+ <td align=center>22
+ <td>&nbsp;
+ <td align=right><tt>0x16</tt>
+<tr> <td>&nbsp;
+ <td>Trident 8900
+ <td>&nbsp;
+ <td align=center>91
+ <td>&nbsp;
+ <td align=right><tt>0x5B</tt>
+<tr> <td>*
+ <td>Tseng ET-3000, ET-4000
+ <td>&nbsp;
+ <td align=center>41
+ <td>&nbsp;
+ <td align=right><tt>0x29</tt>
+<tr> <td>*
+ <td>VEGA
+ <td>&nbsp;
+ <td align=center>41
+ <td>&nbsp;
+ <td align=right><tt>0x29</tt>
+<tr> <td>&nbsp;
+ <td>Video 7 SVGA
+ <td>&nbsp;
+ <td align=center>98
+ <td>&nbsp;
+ <td align=right><tt>0x62</tt>
+<tr> <td>&nbsp;
+ <td>WD90C11
+ <td>&nbsp;
+ <td align=center>92
+ <td>&nbsp;
+ <td align=right><tt>0x5C</tt>
+<tr> <td>&nbsp;
+ <td>Western Digital
+ <td>&nbsp;
+ <td align=center>88
+ <td>&nbsp;
+ <td align=right><tt>0x58</tt>
+</table></blockquote>
+</ul>
+
+<p>
+Note that when passing arguments to batch files (as above) and also with the
+DOS executable <b><tt>gs386.exe</tt></b> build with the Watcom C/C++ compiler,
+you must use '<b><tt>#</tt></b>' rather than '<b><tt>=</tt></b>' between a
+command line switch and its argument, because of a strange design decision
+in the Wacom run-time library.
+
+
+<hr>
+
+<h3><a name="X_Windows"></a>X Windows</h3>
+
+<p>
+Ghostscript looks for the following resources under the program name
+<b><tt>ghostscript</tt></b> and class name
+<b><tt>Ghostscript</tt></b>; the ones marked "**" are
+calculated from display metrics:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">X Windows resources</font><hr>
+<tr> <th align=left>Name
+ <td>&nbsp;&nbsp;
+ <th align=left>Class
+ <td>&nbsp;&nbsp;
+ <th align=left>Default
+<tr> <td colspan=5><hr>
+<tr> <td><b><tt>background</tt></b>
+ <td>&nbsp;
+ <td><b><tt>Background</tt></b>
+ <td>&nbsp;
+ <td><b><tt>white</tt></b>
+<tr> <td><b><tt>foreground</tt></b>
+ <td>&nbsp;
+ <td><b><tt>Foreground</tt></b>
+ <td>&nbsp;
+ <td><b><tt>black</tt></b>
+<tr> <td><b><tt>borderColor</tt></b>
+ <td>&nbsp;
+ <td><b><tt>BorderColor</tt></b>
+ <td>&nbsp;
+ <td><b><tt>black</tt></b>
+<tr> <td><b><tt>borderWidth</tt></b>
+ <td>&nbsp;
+ <td><b><tt>BorderWidth</tt></b>
+ <td>&nbsp;
+ <td><b><tt>1</tt></b>
+<tr> <td><b><tt>geometry</tt></b>
+ <td>&nbsp;
+ <td><b><tt>Geometry</tt></b>
+ <td>&nbsp;
+ <td><b><tt>NULL</tt></b>
+<tr> <td><b><tt>xResolution</tt></b>
+ <td>&nbsp;
+ <td><b><tt>Resolution</tt></b>
+ <td>&nbsp;
+ <td>**
+<tr> <td><b><tt>yResolution</tt></b>
+ <td>&nbsp;
+ <td><b><tt>Resolution</tt></b>
+ <td>&nbsp;
+ <td>**
+<tr> <td><b><tt>useExternalFonts</tt></b>
+ <td>&nbsp;
+ <td><b><tt>UseExternalFonts</tt></b>
+ <td>&nbsp;
+ <td><b><tt>true</tt></b>
+<tr> <td><b><tt>useScalableFonts</tt></b>
+ <td>&nbsp;
+ <td><b><tt>UseScalableFonts</tt></b>
+ <td>&nbsp;
+ <td><b><tt>true</tt></b>
+<tr> <td><b><tt>logExternalFonts</tt></b>
+ <td>&nbsp;
+ <td><b><tt>LogExternalFonts</tt></b>
+ <td>&nbsp;
+ <td><b><tt>false</tt></b>
+<tr> <td><b><tt>externalFontTolerance</tt></b>
+ <td>&nbsp;
+ <td><b><tt>ExternalFontTolerance</tt></b>
+ <td>&nbsp;
+ <td><b><tt>10.0</tt></b>
+<tr> <td><b><tt>palette</tt></b>
+ <td>&nbsp;
+ <td><b><tt>Palette</tt></b>
+ <td>&nbsp;
+ <td><b><tt>Color</tt></b>
+<tr> <td><b><tt>maxGrayRamp</tt></b>
+ <td>&nbsp;
+ <td><b><tt>MaxGrayRamp</tt></b>
+ <td>&nbsp;
+ <td><b><tt>128</tt></b>
+<tr> <td><b><tt>maxRGBRamp</tt></b>
+ <td>&nbsp;
+ <td><b><tt>MaxRGBRamp</tt></b>
+ <td>&nbsp;
+ <td><b><tt>5</tt></b>
+<tr> <td><b><tt>maxDynamicColors</tt></b>
+ <td>&nbsp;
+ <td><b><tt>MaxDynamicColors</tt></b>
+ <td>&nbsp;
+ <td><b><tt>256</tt></b>
+<tr> <td><b><tt>useBackingPixmap</tt></b>
+ <td>&nbsp;
+ <td><b><tt>UseBackingPixmap</tt></b>
+ <td>&nbsp;
+ <td><b><tt>true</tt></b>
+<tr> <td><b><tt>useXPutImage</tt></b>
+ <td>&nbsp;
+ <td><b><tt>UseXPutImage</tt></b>
+ <td>&nbsp;
+ <td><b><tt>true</tt></b>
+<tr> <td><b><tt>useXSetTile</tt></b>
+ <td>&nbsp;
+ <td><b><tt>UseXSetTile</tt></b>
+ <td>&nbsp;
+ <td><b><tt>true</tt></b>
+<tr> <td><b><tt>regularFonts</tt></b>
+ <td>&nbsp;
+ <td><b><tt>RegularFonts</tt></b>
+ <td>&nbsp;
+ <td>See "<a href="#X_fonts">X fonts</a>"
+<tr> <td><b><tt>symbolFonts</tt></b>
+ <td>&nbsp;
+ <td><b><tt>SymbolFonts</tt></b>
+ <td>&nbsp;
+ <td>See "<a href="#X_fonts">X fonts</a>"
+<tr> <td><b><tt>dingbatFonts</tt></b>
+ <td>&nbsp;
+ <td><b><tt>DingbatFonts</tt></b>
+ <td>&nbsp;
+ <td>See "<a href="#X_fonts">X fonts</a>"
+</table></blockquote>
+
+<h4><a name="X_resources"></a>X resources</h4>
+
+<ul>
+<li>
+To set X resources, put them in a file (such as
+<b><tt>~/.Xdefaults</tt></b> on Unix) in a form like this:
+
+<blockquote><table cellpadding=0 cellspacing=0>
+<tr><td><b><tt>Ghostscript*geometry:</tt></b><td><b><tt>&nbsp;&nbsp;</tt></b><td><b><tt>595x842-0+0</tt></b>
+<tr><td><b><tt>Ghostscript*xResolution:</tt></b><td><b><tt>&nbsp;</tt></b><td><b><tt>72</tt></b>
+<tr><td><b><tt>Ghostscript*yResolution:</tt></b><td><b><tt>&nbsp;</tt></b><td><b><tt>72</tt></b>
+</table></blockquote>
+
+<p>
+Then merge these resources into the X server's resource database:
+
+<blockquote><b><tt>
+ xrdb -merge ~/.Xdefaults
+</tt></b></blockquote>
+
+<li>
+Ghostscript doesn't look at the default system background and foreground
+colors; if you want to change the background or foreground color, you must
+set them explicitly for Ghostscript. This is a deliberate choice, so that
+PostScript documents will display correctly by default -- with white as
+white and black as black -- even if text windows use other colors.
+
+<li>
+The <b><tt>geometry</tt></b> resource affects only window placement.
+
+<li>
+Resolution is expressed in pixels per inch (1 inch = 25.4mm).
+
+<li>
+The font tolerance gives the largest acceptable difference in height of the
+screen font, expressed as a percentage of the height of the desired font.
+
+<li>
+The <b><tt>palette</tt></b> resource can be used to restrict Ghostscript to
+using a grayscale or monochrome palette.
+
+<li>
+<b><tt>maxRGBRamp</tt></b> and
+<b><tt>maxGrayRamp</tt></b> control the maximum number of
+colors that ghostscript allocates ahead of time for the dither cube (ramp).
+Ghostscript never preallocates more than half the cells in a colormap.
+<b><tt>maxDynamicColors</tt></b> controls the maximum
+number of colors that Ghostscript will allocate dynamically in the
+colormap.
+</ul>
+
+<h4><a name="X_server_bugs"></a>Working around bugs in X servers</h4>
+
+<p>
+The "<b><tt>use</tt></b>..." resources exist primarily to work around bugs
+in X servers.
+
+<ul>
+<li> Old versions of DEC's X server (DECwindows) have bugs that
+ require setting <b><tt>useXPutImage</tt></b> or
+ <b><tt>useXSetTile</tt></b> to
+ <b><tt>false</tt></b>.
+
+<li> Some servers do not implement backing pixmaps properly, or do not
+ have enough memory for them. If you get strange behavior or "out
+ of memory" messages, try setting
+ <b><tt>useBackingPixmap</tt></b> to
+ <b><tt>false</tt></b>.
+
+<li> Some servers do not implement tiling properly. This appears
+ as broad bands of color where dither patterns should appear. If
+ this happens, try setting
+ <b><tt>useXSetTile</tt></b> to
+ <b><tt>false</tt></b>.
+
+<li> Some servers do not implement bitmap or pixmap displaying properly.
+ This may appear as white or black rectangles where characters
+ should appear; or characters may appear in "inverse video" (for
+ instance, white on a black rectangle rather than black on white).
+ If this happens, try setting
+ <b><tt>useXPutImage</tt></b> to
+ <b><tt>false</tt></b>.
+</ul>
+
+<h4><a name="X_fonts"></a>X fonts</h4>
+
+<p>
+To use native X11 fonts, Ghostscript must map PostScript font names to the
+XLFD font names. The resources <b><tt>regularFonts</tt></b>
+(fonts available in standard or ISO-Latin-1 encoding),
+<b><tt>symbolFonts</tt></b> (using Symbol encoding), and
+<b><tt>dingbatFonts</tt></b> (using Dingbat encoding) give
+the name mapping for different encodings. The XLFD font name in the
+mapping must contain 7 dashes; the X driver adds the additional size and
+encoding fields to bring the total number of dashes in the font name to 14.
+See the appendix "<a href="#X_font_mappings">X default font mappings</a>"
+for the full list of default mappings.
+
+<p>
+Users who switch regularly between different X servers may wish to use the
+"*" wild card in place of the foundry name
+(<b><tt>itc</tt></b>,
+<b><tt>monotype</tt></b>,
+<b><tt>linotype</tt></b>,
+<b><tt>b&amp;h</tt></b>, or
+<b><tt>adobe</tt></b>); users who do not switch X servers
+should leave the explicit foundry in the name, since it speeds up access to
+fonts.
+
+<p>
+Ghostscript takes advantage of the "HP XLFD Enhancements," if available, to
+use native X11 fonts for fonts that are anamorphically scaled, rotated, or
+mirrored. If the changes have been installed to the X or font server, they
+are automatically used when appropriate.
+
+<h4><a name="GS_fonts_as_X_fonts"></a>Using Ghostscript fonts on X displays</h4>
+
+<p>
+Font files distributed with Ghostscript can be used on X Windows displays.
+You can find full instructions in the
+<a href="Fonts.htm#Use_gs_fonts_with_X">documentation on fonts</a>.
+
+<h4><a name="X_device_parameters"></a>X device parameters</h4>
+
+<p>
+In addition to the device parameters recognized by <a
+href="Language.htm#Device_parameters">all devices</a>, Ghostscript's X
+driver provides parameters to adjust its performance. Users will rarely
+need to modify these. Note that these are parameters to be set with the
+<b><tt>-d</tt></b> switch in the command line (e.g.,
+<b><tt>-dMaxBitmap=10000000</tt></b>), not resources to be defined in the
+<b><tt>~/.Xdefaults</tt></b> file.
+
+<dl>
+<dt><b><tt>AlwaysUpdate &lt;boolean&gt;</tt></b>
+<dd>If <b><tt>true</tt></b>, the driver updates the screen after each
+primitive drawing operation; if <b><tt>false</tt></b> (the default), the
+driver uses an intelligent buffered updating algorithm.
+</dl>
+
+<dl>
+<dt><b><tt>MaxBitmap &lt;integer&gt;</tt></b>
+<dd>If the amount of memory required to hold the pixmap for the window is no
+more than the value of <b><tt>MaxBitmap</tt></b>, the driver will draw to a
+pixmap in Ghostscript's address space (called a "client-side pixmap") and
+will copy it to the screen from time to time; if the amount of memory
+required for the pixmap exceeds the value of <b><tt>MaxBitmap</tt></b>, the
+driver will draw to a server pixmap. Using a client-side pixmap usually
+provides better performance -- for bitmap images, possibly much better
+performance -- but since it may require quite a lot of RAM (e.g., about 2.2
+Mb for a 24-bit 1024x768 window), the default value of
+<b><tt>MaxBitmap</tt></b> is 0.
+</dl>
+
+<dl>
+<dt><b><tt>MaxTempPixmap, MaxTempImage, MaxBufferedTotal, MaxBufferedArea,
+MaxBufferedCount &lt;integer&gt;</tt></b>
+<dd>These control various aspects of the driver's buffering behavior. For
+details, please consult the source file <b><tt>gdevx.h</tt></b>.
+</dl>
+
+<hr>
+
+<h3><a name="SCO_Unix"></a>SCO Unix</h3>
+
+<p>
+Because of bugs in the SCO Unix kernel, Ghostscript will not work if you
+select direct screen output and also allow it to write messages on the
+console. If you are using direct screen output, redirect Ghostscript's
+terminal output to a file.
+
+<hr>
+
+<h2><a name="Switches"></a>Switches</h2>
+
+<p>
+Unless otherwise noted, these switches can be used on all platforms.
+
+<h3><a name="General_switches"></a>General switches</h3>
+
+<h4><a name="Input_control"></a>Input control</h4>
+
+<dl>
+<dt><b><tt>@</tt></b><em>filename</em>
+<dd>Causes Ghostscript to read <em>filename</em> and treat its contents the
+same as the command line. (This is intended primarily for getting around
+DOS's 128-character limit on the length of a command line.) Switches or
+file names in the file may be separated by any amount of white space
+(space, tab, line break); there is no limit on the size of the file.
+</dl>
+
+<dl>
+<dt><b><tt>--</tt></b> <em>filename arg1 ...</em>
+<br><b><tt>-+</tt></b> <em>filename arg1 ...</em>
+<dd>Takes the next argument as a file name as usual, but takes all
+remaining arguments (even if they have the syntactic form of switches) and
+defines the name <b><tt>ARGUMENTS</tt></b> in userdict (not systemdict) as
+an array of those strings, <em>before</em> running the file. When
+Ghostscript finishes executing the file, it exits back to the shell.
+</dl>
+
+<dl>
+<dt><b><tt>-@</tt></b> <em>filename arg1 ...</em>
+<dd>Does the same thing as <b><tt>--</tt></b> and <b><tt>-+</tt></b>, but
+expands <b><tt>@</tt></b><em>filename</em> arguments.
+</dl>
+
+<dl>
+<dt><b><tt>-</tt></b>
+<br><b><tt>-_</tt></b>
+<dd>These are not really switches: they tell Ghostscript to read from
+standard input, which is coming from a file or a pipe,
+with or without buffering.
+See <a href="#Pipe_input">"Input from a pipe"</a> above.
+</dl>
+
+<dl>
+<dt><b><tt>-c</tt></b> <em>tokens ...</em>
+<dd>Interprets arguments as PostScript code up to the next argument that
+begins with "<b><tt>-</tt></b>" followed by a non-digit, or with
+"<b><tt>@</tt></b>". For example, if the file <b><tt>quit.ps</tt></b>
+contains just the word "<b><tt>quit</tt></b>", then
+<b><tt>-c&nbsp;quit</tt></b> on the command line is equivalent to
+<b><tt>quit.ps</tt></b> there. Each argument must be exactly one token, as
+defined by the <b><tt>token</tt></b> operator.
+</dl>
+
+<dl>
+<dt><b><tt>-f</tt></b>
+<dd>Interprets following non-switch arguments as file names to be executed
+using the normal <b><tt>run</tt></b> command. Since this is the default
+behavior, <b><tt>-f</tt></b> is useful only for terminating the list of
+tokens for the <b><tt>-c</tt></b> switch.
+</dl>
+
+<dl>
+<dt><b><tt>-f</tt></b><em>filename</em>
+<dd>Execute the given file, even if its name begins with a
+"<b><tt>-</tt></b>" or "<b><tt>@</tt></b>".
+</dl>
+
+<h4><a name="File_searching"></a>File searching</h4>
+
+<p>
+Note that by "library files" here we mean all the files identified using
+the search rule under "<a href="#Finding_files">How Ghostscript finds
+files</a>" above: Ghostscript's own initialization files, fonts, and files
+named on the command line.
+
+<dl>
+<dt><a name="I_switch"></a><b><tt>-I</tt></b><em>directories</em>
+<dd>Adds the designated list of directories at the head of the search path
+for library files.
+</dl>
+
+<dl>
+<dt><a name="P_switch"></a><b><tt>-P</tt></b>
+<dd>Makes Ghostscript look first in the current directory for library
+files. This is currently the default.
+</dl>
+
+<dl>
+<dt><a name="P-_switch"></a><b><tt>-P-</tt></b>
+<dd>Makes Ghostscript <b><em>not</em></b> look first in the current
+directory for library files (unless, of course, the first explicitly
+supplied directory is "<b><tt>.</tt></b>").
+</dl>
+
+<h4><a name="Parameters"></a>Setting parameters</h4>
+
+<dl>
+<dt><b><tt>-D</tt></b><em>name</em>
+<br><b><tt>-d</tt></b><em>name</em>
+<dd>Define a name in systemdict with value=true.
+</dl>
+
+<dl>
+<dt><b><tt>-D</tt></b><em>name</em><b><tt>=</tt></b><em>token</em>
+<br><b><tt>-d</tt></b><em>name</em><b><tt>=</tt></b><em>token</em>
+<dd>Define a name in systemdict with the given definition. The token must
+be exactly one token (as defined by the <b><tt>token</tt></b> operator) and
+must not contain any whitespace. If the token is a non-literal name, it
+must be true, false, or null.
+</dl>
+
+<dl>
+<dt><b><tt>-S</tt></b><em>name</em><b><tt>=</tt></b><em>string</em>
+<br><b><tt>-s</tt></b><em>name</em><b><tt>=</tt></b><em>string</em>
+<dd>Define a name in systemdict with a given string as value. This is
+different from <b><tt>-d</tt></b>. For example, <b><tt>-dXYZ=35</tt></b>
+on the command line is equivalent to the program fragment
+
+<blockquote><b><tt>
+/XYZ 35 def
+</tt></b></blockquote>
+
+<p>
+whereas <b><tt>-sXYZ=35</tt></b> is equivalent to
+
+<blockquote><b><tt>
+/XYZ (35) def
+</tt></b></blockquote>
+</dl>
+
+<dl>
+<dt><b><tt>-u</tt></b><em>name</em>
+<dd>Un-define a name, cancelling <b><tt>-d</tt></b> or <b><tt>-s</tt></b>.
+</dl>
+
+<p>
+Note that the initialization file <b><tt>gs_init.ps</tt></b> makes
+<b><tt>systemdict</tt></b> read-only, so the values of names defined with
+<b><tt>-D</tt></b>, <b><tt>-d</tt></b>, <b><tt>-S</tt></b>, and
+<b><tt>-s</tt></b> cannot be changed -- although, of course, they can be
+superseded by definitions in <b><tt>userdict</tt></b> or other dictionaries.
+However, device parameters set this way (<b><tt>PageSize</tt></b>,
+<b><tt>Margins</tt></b>, etc.) are <em>not</em> read-only, and <em>can</em>
+be changed by code in PostScript files.
+
+<dl>
+<dt><b><tt>-g</tt></b><em>number1</em><b><tt>x</tt></b><em>number2</em>
+<dd>Equivalent to <b><tt>-dDEVICEWIDTH=</tt></b><em>number1</em> and
+<b><tt>-dDEVICEHEIGHT=</tt></b><em>number2</em>, specifying the device
+width and height in pixels for the benefit of devices such as X11 windows
+and VESA displays that require (or allow) you to specify width and height.
+Note that this causes documents of other sizes to be clipped, not scaled:
+see <b><tt>-dFIXEDMEDIA</tt></b> below.
+</dl>
+
+<dl>
+<dt><a name="Resolution_switch"></a><b><tt>-r</tt></b><em>number</em> (same
+as <b><tt>-r</tt></b><em>number</em><b><tt>x</tt></b><em>number</em>)
+<br><b><tt>-r</tt></b><em>number1</em><b><tt>x</tt></b><em>number2</em>
+<dd>Equivalent to <b><tt>-dDEVICEXRESOLUTION=</tt></b><em>number1</em> and
+<b><tt>-dDEVICEYRESOLUTION=</tt></b><em>number2</em>, specifying the device
+horizontal and vertical resolution in pixels per inch for the benefit of
+devices such as printers that support multiple X and Y resolutions.
+</dl>
+
+<h4><a name="Quiet"></a>Suppress messages</h4>
+
+<dl>
+<dt><a name="Quiet"></a><b><tt>-q</tt></b>
+<dd>Quiet startup: suppress normal startup messages, and also do the
+equivalent of <a href="#dQUIET"><b><tt>-dQUIET</tt></b></a>.
+</dl>
+
+<h3><a name="Parameter_switches"></a>Parameter switches (<b><tt>-d</tt></b> and <b><tt>-s</tt></b>)</h3>
+
+<p>
+As noted above, <b><tt>-d</tt></b> and <b><tt>-s</tt></b> define initial
+values for PostScript names. Some of these names are parameters that
+control the interpreter or the graphics engine. You can also use
+<b><tt>-d</tt></b> or <b><tt>-s</tt></b> to define a value for any device
+parameter of the initial device (the one defined with
+<b><tt>-sDEVICE=</tt></b>, or the default device if this switch is not
+used). For example, since the <b><tt>ppmraw</tt></b> device has a numeric
+<b><tt>GrayValues</tt></b> parameter that controls the number of bits per
+component, <b><tt>-sDEVICE=ppmraw -dGrayValues=16</tt></b> will make this
+the default device and set the number of bits per component to 4 (log2(16)).
+
+<h4><a name="Rendering_parameters"></a>Rendering parameters</h4>
+
+<dl>
+<dt><b><tt>-dCOLORSCREEN
+<br>-dCOLORSCREEN=0
+<br>-dCOLORSCREEN=false</tt></b>
+<dd>On high-resolution devices (at least 150 dpi resolution, or
+<b><tt>-dDITHERPPI</tt></b> specified), <b><tt>-dCOLORSCREEN</tt></b>
+forces the use of separate halftone screens with different angles for CMYK
+or RGB if halftones are needed (this produces the best-quality output);
+<b><tt>-dCOLORSCREEN=0</tt></b> uses separate screens with the same
+frequency and angle; <b><tt>-dCOLORSCREEN=false</tt></b> forces the use of
+a single binary screen. The default if <b><tt>COLORSCREEN</tt></b> is not
+specified is to use separate screens with different angles if the device
+has fewer than 5 bits per color, and a single binary screen (which is never
+actually used under normal circumstances) on all other devices.
+</dl>
+
+<dl>
+<dt><b><tt>-dDITHERPPI=</tt></b><em>lpi</em>
+<dd>Forces all devices to be considered high-resolution, and forces use of
+a halftone screen or screens with <em>lpi</em> lines per inch, disregarding
+the actual device resolution. Reasonable values for <em>lpi</em> are
+<b><em>N</em></b>/5 to <b><em>N</em></b>/20, where <b><em>N</em></b> is the
+resolution in dots per inch.
+</dl>
+
+<dl>
+<dt><b><tt>-dDOINTERPOLATE</tt></b>
+<dd>Turns on image interpolation for all images, improving image quality for
+scaled images at the expense of speed. Note that
+<b><tt>-dNOINTERPOLATE</tt></b> overrides <b><tt>-dDOINTERPOLATE</tt></b> if
+both are specified.
+</dl>
+
+<dl>
+<dt><b><tt>-dNOCIE</tt></b>
+<dd>Substitutes <b><tt>DeviceGray</tt></b> and <b><tt>DeviceRGB</tt></b>
+for CIEBasedA and CIEBasedABC color spaces respectively. Useful only on
+very slow systems where color accuracy is less important.
+</dl>
+
+<dl>
+<dt><b><tt>-dNOINTERPOLATE</tt></b>
+<dd>Turns off image interpolation, improving performance on interpolated
+images at the expense of image quality. <b><tt>-dNOINTERPOLATE</tt></b>
+overrides <b><tt>-dDOINTERPOLATE</tt></b>.
+</dl>
+
+<h4><a name="Page_parameters"></a>Page parameters</h4>
+
+<dl>
+<dt><a name="FIXEDMEDIA"></a><b><tt>-dFIXEDMEDIA</tt></b>
+<dd>Causes the media size to be fixed after initialization, forcing pages
+of other sizes or orientations to be clipped. This may be useful when
+printing documents on a printer that can handle their requested paper size
+but whose default is some other size. Note that <b><tt>-g</tt></b>
+automatically sets <b><tt>-dFIXEDMEDIA</tt></b>, but
+<b><tt>-sPAPERSIZE=</tt></b> does not.
+</dl>
+
+<dl>
+<dt><b><tt>-dFIXEDRESOLUTION</tt></b>
+<dd>Causes the media resolution to be fixed similarly. <b><tt>-r</tt></b>
+automatically sets <b><tt>-dFIXEDRESOLUTION</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>-dORIENT1=true
+<br>-dORIENT1=false</tt></b>
+<dd>Defines the meaning of the 0 and 1 orientation values for the
+setpage[params] compatibility operators. The default value of
+<b><tt>ORIENT1</tt></b> is true (set in <b><tt>gs_init.ps</tt></b>), which
+is the correct value for most files that use setpage[params] at all,
+namely, files produced by badly designed applications that "know" that the
+output will be printed on certain roll-media printers: these applications
+use 0 to mean landscape and 1 to mean portrait.
+<b><tt>-dORIENT1=false</tt></b> declares that 0 means portrait and 1 means
+landscape, which is the convention used by a smaller number of files
+produced by properly written applications.
+</dl>
+
+<dl>
+<dt><b><tt>-dDEVICEWIDTHPOINTS=</tt></b><em>w</em>
+<br><b><tt>-dDEVICEHEIGHTPOINTS=</tt></b><em>h</em>
+<dd>Sets the initial page width to <em>w</em> or initial page height to
+<em>h</em> respectively, specified in 1/72" units.
+</dl>
+
+<h4><a name="Font_related_parameters"></a>Font-related parameters</h4>
+
+<dl>
+<dt><a name="DISKFONTS"></a><b><tt>-dDISKFONTS</tt></b>
+<dd>Causes individual character outlines to be loaded from the disk the
+first time they are encountered. (Normally Ghostscript loads all the
+character outlines when it loads a font.) This may allow loading more
+fonts into memory at the expense of slower rendering.
+<b><tt>DISKFONTS</tt></b> is effective only if the diskfont feature was
+built into the executable; otherwise it is ignored.
+</dl>
+
+<dl>
+<dt><b><tt>-dLOCALFONTS</tt></b>
+<dd>Causes Type 1 fonts to be loaded into the current VM -- normally local
+VM -- instead of always being loaded into global VM. Useful only for
+compatibility with Adobe printers for loading some obsolete fonts.
+</dl>
+
+<dl>
+<dt><b><tt>-dNOCCFONTS</tt></b>
+<dd>Suppresses the use of fonts precompiled into the Ghostscript executable.
+See <a href="Fonts.htm#Precompiling">"Precompiling fonts"</a> in the
+documentation on fonts for details. This is probably useful only for
+debugging.
+</dl>
+
+<dl>
+<dt><a name="FONTMAP_switch"></a><b><tt>-dNOFONTMAP</tt></b>
+<dd>Suppresses the normal loading of the Fontmap file. This may be useful
+in environments without a file system.
+</dl>
+
+<dl>
+<dt><b><tt>-dNOFONTPATH</tt></b>
+<dd>Suppresses consultation of <b><tt>GS_FONTPATH</tt></b>. This may be
+useful for debugging.
+</dl>
+
+<dl>
+<dt><b><tt>-dNOPLATFONTS</tt></b>
+<dd>Disables the use of fonts supplied by the underlying platform (X
+Windows or Microsoft Windows). This may be needed if the platform fonts
+look undesirably different from the scalable fonts.
+</dl>
+
+<dl>
+<dt><b><tt>-sFONTMAP=</tt></b><em>filename1</em><b><tt>;</tt></b><em>filename2</em><b><tt>;</tt></b><em>...</em>
+<dd>Specifies alternate name or names for the Fontmap file. Note that the
+names are separated by "<b><tt>:</tt></b>" on Unix systems, by
+"<b><tt>;</tt></b>" on DOS or MS Windows systems, and by
+"<b><tt>,</tt></b>" on VMS systems, just as for search paths.
+</dl>
+
+<dl>
+<dt><b><tt>-sFONTPATH=</tt></b><em>dir1</em><b><tt>;</tt></b><em>dir2</em><b><tt>;</tt></b><em>...</em>
+<dd>Specifies a list of directories that will be scanned when looking for
+fonts not found on the search path, overriding the environment variable
+<b><tt>GS_FONTPATH</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>-sSUBSTFONT=</tt></b><em>fontname</em>
+<dd>Causes the given font to be substituted for all unknown fonts, instead
+of using the normal intelligent substitution algorithm. Also, in this
+case, the font returned by <b><tt>findfont</tt></b> is the actual font
+named "<em>fontname</em>", not a copy of the font with the
+<b><tt>FontName</tt></b> changed to the requested one.
+</dl>
+
+<h4><a name="Interaction_related_parameters"></a>Interaction-related parameters</h4>
+
+<dl>
+<dt><b><tt>-dBATCH</tt></b>
+<dd>Causes Ghostscript to exit after processing all files named on the
+command line, rather than going into an interactive loop reading PostScript
+commands. Equivalent to putting -c quit at the end of the command line.
+</dl>
+
+<dl>
+<dt><b><tt>-dNOPAGEPROMPT</tt></b>
+<dd>Disables only the prompt, but not the pause, at the end of each page.
+This may be useful on PC displays that get confused if a program attempts
+to write text to the console while the display is in a graphics mode.
+</dl>
+
+<dl>
+<dt><a name="NoPause"></a><b><tt>-dNOPAUSE</tt></b>
+<dd>Disables the prompt and pause at the end of each page. Normally one
+should use this (along with <b><tt>-dBATCH</tt></b>) when producing output
+on a printer or to a file; it also may be desirable for applications where
+another program is "driving" Ghostscript.
+</dl>
+
+<dl>
+<dt><b><tt>-dNOPROMPT</tt></b>
+<dd>Disables the prompt printed by Ghostscript when it expects interactive
+input, as well as the end-of-page prompt (<b><tt>-dNOPAGEPROMPT</tt></b>);
+also disables the implicit <b><tt>flushpage</tt></b> that normally occurs
+each time Ghostscript asks for more input. This allows piping input
+directly into Ghostscript, as long as the data doesn't refer to
+<b><tt>currentfile</tt></b>.
+</dl>
+
+<dl>
+<dt><a name="dQUIET"></a><b><tt>-dQUIET</tt></b>
+<dd>Suppresses routine information comments on standard output. This is
+currently necessary when redirecting device output to standard output.
+</dl>
+
+<dl>
+<dt><b><tt>-dSHORTERRORS</tt></b>
+<dd>Makes certain error and information messages more Adobe-compatible.
+</dl>
+
+<dl>
+<dt><b><tt>-sstdout=</tt></b><em>filename</em>
+<dd>Redirect PostScript <b><tt>%stdout</tt></b> to a file or
+<b><tt>stderr</tt></b>, to avoid it being mixed with device stdout.
+To redirect stdout to stderr use <b><tt>-sstdout=%stderr</tt></b>.
+To cancel redirection of stdout use <b><tt>-sstdout=%stdout</tt></b>
+or <b><tt>-sstdout=-</tt></b>.
+</dl>
+
+<dl>
+<dt><b><tt>-dTTYPAUSE</tt></b>
+<dd>Causes Ghostscript to read a character from <b><tt>/dev/tty</tt></b>,
+rather than standard input, at the end of each page. This may be useful if
+input is coming from a pipe. Note that <b><tt>-dTTYPAUSE</tt></b>
+overrides <b><tt>-dNOPAUSE</tt></b>.
+</dl>
+
+<h4><a name="Output_selection_parameters"></a>Device and output selection parameters</h4>
+
+<dl>
+<dt><b><tt>-dNODISPLAY</tt></b>
+<dd>Initializes Ghostscript with a null device (a device that discards the
+output image) rather than the default device or the device selected with
+<b><tt>-sDEVICE=</tt></b>. This is usually useful only when running
+PostScript code whose purpose is to compute something rather than to
+produce an output image; for instance, when converting PostScript to PDF.
+</dl>
+
+<dl>
+<dt><a name="DEVICE_switch"></a><b><tt>-sDEVICE=</tt></b><em>device</em>
+<dd>Selects an alternate <a href="#Output_device">initial output
+device</a>.
+</dl>
+
+<dl>
+<dt><b><tt>-sOutputFile=</tt></b><em>filename</em>
+<dd>Selects an alternate output file (or pipe) for the initial output
+device, as described above.
+</dl>
+
+<h4><a name="Other_parameters"></a>Other parameters</h4>
+
+<dl>
+<dt><b><tt>-dDELAYBIND</tt></b>
+<dd>Causes <b><tt>bind</tt></b> to remember all its invocations, but not
+actually execute them until the <b><tt>.bindnow</tt></b> procedure is
+called. Useful only for certain specialized packages like
+<b><tt>pstotext</tt></b> that redefine operators.
+</dl>
+
+<dl>
+<dt><b><tt>-dDOPDFMARKS</tt></b>
+<dd>Causes <b><tt>pdfmark</tt></b> to be called for bookmarks,
+annotations, links and cropbox when processing PDF files.
+Normally, <b><tt>pdfmark</tt></b> is only called for these types
+for PostScript files or when the output device requests it
+(e.g. pdfwrite device).
+</dl>
+
+<dl>
+<dt><b><tt>-dNOBIND</tt></b>
+<dd>Disables the <b><tt>bind</tt></b> operator. Useful only for debugging.
+</dl>
+
+<dl>
+<dt><b><tt>-dNOCACHE</tt></b>
+<dd>Disables character caching. Useful only for debugging.
+</dl>
+
+<dl>
+<dt><b><tt>-dNOGC</tt></b>
+<dd>Suppresses the initial automatic enabling of the garbage collector in
+Level 2 systems. (The <b><tt>vmreclaim</tt></b> operator is not disabled.)
+Useful only for debugging.
+</dl>
+
+<dl>
+<dt><b><tt>-dNOSAFER</tt></b> (equivalent to <b><tt>-dDELAYSAFER</tt></b>).
+<dd>This flag disables SAFER mode until the <b><tt>.setsafe</tt></b>
+procedure is run. This is intended for clients or scripts that cannot
+operate in SAFER mode. If Ghostscript is started with <b><tt>-dNOSAFER</tt></b>
+or <b><tt>-dDELAYSAFER</tt></b>, PostScript programs are allowed to read, write,
+rename or delete any files in the system that are not protected by operating
+system permissions.
+<p><b>This mode should be used with caution, and <tt>.setsafe</tt> should be
+run prior to running any PostScript file with unknown contents.</b>
+</dl>
+
+<a name="Safer"></a>
+<dl>
+<dt><b><tt>-dSAFER</tt></b>
+<dd>Disables the <b><tt>deletefile</tt></b> and <b><tt>renamefile</tt></b>
+operators, and the ability to open piped commands (<b><tt>%pipe%</tt></b><em>cmd</em>)
+at all. Only <b><tt>%stdout</tt></b> and <b><tt>%stderr</tt></b> can be opened
+for writing.
+<p>
+This mode also sets the <a href="Language.htm#LockSafetyParams">.LockSafetyParams</a>
+parameter of the default device, or the device specified with the <b><tt>-sDEVICE= </tt></b>
+switch to protect against programs that attempt to write to files using the
+OutputFile device parameter. Note that since the device parameters specified
+on the command line (including OutputFile) are set prior to SAFER mode,
+the <b><tt>-sOutputFile=...</tt></b> on the command line is unrestricted.
+<p>
+<b><tt>SAFER</tt></b> mode also prevents changing the /GenericResourceDir,
+/FontResourceDir and either the /SystemParamsPassword or the /StartJobPassword.
+<p>
+<b>Note: </b>While SAFER mode is not the default, in a subsequent release of
+Ghostscript, SAFER mode will be the default thus scripts or programs that need
+to open files or set restricted parameters will require the <b><tt>-dNOSAFER</tt></b>
+command line option.
+<p>
+When running -dNOSAFER it is possible to perform a <b><tt>save</tt></b>,
+followed by <b><tt>.setsafe</tt></b>, execute a file or procedure in SAFER mode,
+then use <b><tt>restore</tt></b> to return to NOSAFER mode. In order to prevent
+the save object from being restored by the foreign file or procedure, the
+<a href="Language.htm#Runandhide"><b>.runandhide</b></a> operator should
+be used to hide the save object from the restricted procedure.
+</dl>
+
+<dl>
+<dt><b><tt>-dPARANOIDSAFER</tt></b>
+<dd>Disables reading of files other than <b><tt>%stdin</tt></b>, those given as
+a command line argument, or those contained on one of the paths given by
+LIBPATH and FONTPATH and specified by the system params /FontResourceDir
+and /GenericResourceDir.
+<p>
+<b><tt>-dPARANOIDSAFER</tt></b> implies <b><tt>-dSAFER</tt></b> so if
+<b><tt>-dPARANOIDSAFER</tt></b> is given on the command line,
+<b><tt>-dSAFER</tt></b> is optional.
+</dl>
+
+<dl>
+<dt><b><tt>-dSTRICT</tt></b>
+<dd>Disables as many Ghostscript extensions as feasible, to be more helpful
+in debugging applications that produce output for Adobe and other RIPs.
+</dl>
+
+<dl>
+<dt><b><tt>-dWRITESYSTEMDICT</tt></b>
+<dd>Leaves <b><tt>systemdict</tt></b> writable. This is necessary when
+running special utility programs such as <b><tt>font2c</tt></b> and
+<b><tt>pcharstr</tt></b>, which must bypass normal PostScript access
+protection.
+</dl>
+
+<hr>
+
+<h2><a name="Improving_performance"></a>Improving performance</h2>
+
+<p>
+Ghostscript attempts to find an optimum balance between speed and memory
+consumption, but there are some cases in which you may get a very large
+speedup by telling Ghostscript to use more memory.
+
+<ul>
+
+<li>
+If you are using X Windows, setting the <b><tt>-dMaxBitmap=</tt></b>
+parameter described <a href="#X_device_parameters">above</a> may
+dramatically improve performance on files that have a lot of bitmap images.
+
+<li>
+If you are using Chinese, Japanese, or other fonts with very large character
+sets, adding the following sequence of switches before the first file name
+may dramatically improve performance at the cost of an additional 2-3 Mb of
+memory: <b><tt>-c&nbsp;3000000&nbsp;setvmthreshold&nbsp;-f</tt></b>.
+
+</ul>
+
+<hr>
+
+<h2><a name="Debugging"></a>Debugging</h2>
+
+<p>
+The information here describing the debugging switches is probably
+interesting only to developers. The <b><tt>-Z</tt></b> switch applies only
+if the interpreter was <a href="Make.htm#Debugging">built for a debugging
+configuration</a>. In the table below, the first column is a debugging
+switch, the second is an equivalent switch (if any) and the third is its
+usage.
+
+<table cellpadding=0 cellspacing=0>
+<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Switches used in debugging</font><hr>
+<tr> <th align=left>Switch
+ <td>&nbsp;&nbsp;
+ <th align=left>Equivalent
+ <td>&nbsp;&nbsp;
+ <th>&nbsp;
+<tr> <td colspan=5><hr>
+<tr> <td valign=top><b><tt>-A</tt></b>
+ <td>&nbsp;
+ <td valign=top><b><tt>-Z@</tt></b>
+ <td>&nbsp;
+ <td>Fill empty storage with a distinctive bit pattern for debugging
+
+<tr> <td valign=top><b><tt>-A-</tt></b>
+ <td>&nbsp;
+ <td valign=top><b><tt>-Z-@</tt></b>
+ <td>&nbsp;
+ <td>Turn off <b><tt>-A</tt></b>
+<tr> <td valign=top><b><tt>-B</tt></b><em>size</em>
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>Run all subsequent files named on the command line (except for
+ <b><tt>-F</tt></b>) through the run_string interface, using a
+ buffer of <em>size</em> bytes
+<tr> <td valign=top><b><tt>-B-</tt></b>
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>Turn off <b><tt>-B</tt></b>: run subsequent files (except for
+ <b><tt>-F</tt></b>) directly in the normal way
+<tr> <td valign=top><b><tt>-E</tt></b>
+ <td>&nbsp;
+ <td valign=top><b><tt>-Z#</tt></b>
+ <td>&nbsp;
+ <td>Turn on tracing of error returns from operators
+<tr> <td valign=top><b><tt>-E-</tt></b>
+ <td>&nbsp;
+ <td valign=top><b><tt>-Z-#</tt></b>
+ <td>&nbsp;
+ <td>Turn off <b><tt>-E</tt></b>
+<tr> <td valign=top><b><tt>-F</tt></b><em>file</em>
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>Execute the file with <b><tt>-B1</tt></b> temporarily in effect
+<tr> <td valign=top><b><tt>-K</tt></b><em>n</em>
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>Limit the total amount of memory that the interpreter can have
+ allocated at any one time to <b><em>n</em></b>K bytes.
+ <b><em>n</em></b> is a positive decimal integer.
+<tr> <td valign=top><b><tt>-M</tt></b><em>n</em>
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>Force the interpreter's allocator to acquire additional memory
+ in units of <b><em>n</em></b>K bytes, rather than the default
+ (currently 20K on DOS systems, 50K on Unix). <b><em>n</em></b>
+ is a positive decimal integer, on DOS systems no greater than
+ 63.
+<tr> <td valign=top><b><tt>-N</tt></b><em>n</em>
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>Allocate space for <b><em>n</em></b>K names, rather than the
+ default (normally 64K). <b><em>n</em></b> may be greater than
+ 64 only if <b><tt>EXTEND_NAMES</tt></b> was defined when the
+ interpreter was compiled .
+<tr> <td valign=top><b><tt>-Z</tt></b><em>xxx</em><br><b><tt>-Z-</tt></b><em>xxx</em>
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>Turn debugging printout on (off). Each of the <em>xxx</em>
+ characters selects an option. Case is significant: "a" and
+ "A" have different meanings.
+
+<dl compact>
+<dt><b><tt>0</tt></b><dd>garbage collector, minimal detail
+<dt><b><tt>1</tt></b><dd>type 1 and type 42 font interpreter
+<dt><b><tt>2</tt></b><dd>curve subdivider/rasterizer
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>3</tt></b><dd>curve subdivider/rasterizer, detail
+<dt><b><tt>4</tt></b><dd>garbage collector (strings)
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>5</tt></b><dd>garbage collector (strings, detail)
+<dt><b><tt>6</tt></b><dd>garbage collector (chunks, roots)
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>7</tt></b><dd>garbage collector (objects)
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>8</tt></b><dd>garbage collector (refs)
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>9</tt></b><dd>garbage collector (pointers)
+<dt><b><tt>a</tt></b><dd>allocator (large blocks only)
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>A</tt></b><dd>allocator (all calls)
+<dt><b><tt>b</tt></b><dd>bitmap image processor
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>B</tt></b><dd>bitmap images, detail
+<dt><b><tt>c</tt></b><dd>color/halftone mapper
+<dt><b><tt>d</tt></b><dd>dictionary put/undef
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>D</tt></b><dd>dictionary lookups
+<dt><b><tt>e</tt></b><dd>external (OS-related) calls
+<dt><b><tt>f</tt></b><dd>fill algorithm (summary)
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>F</tt></b><dd>fill algorithm (detail)
+<dt><b><tt>g</tt></b><dd>gsave/grestore[all]
+<dt><b><tt>h</tt></b><dd>halftone renderer
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>H</tt></b><dd>halftones, every pixel
+<dt><b><tt>i</tt></b><dd>interpreter, just names
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>I</tt></b><dd>interpreter, everything
+<dt><b><tt>j</tt></b><dd>(Japanese) composite fonts
+<dt><b><tt>k</tt></b><dd>character cache and xfonts
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>K</tt></b><dd>character cache, every access
+<dt><b><tt>l</tt></b><dd>command lists, bands
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>L</tt></b><dd>command lists, everything
+<dt><b><tt>m</tt></b><dd>makefont and font cache
+<dt><b><tt>n</tt></b><dd>name lookup (new names only)
+<dt><b><tt>o</tt></b><dd>outliner (stroke)
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>O</tt></b><dd>stroke detail
+<dt><b><tt>p</tt></b><dd>band list paths
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>P</tt></b><dd>all paths
+<dt><b><tt>q</tt></b><dd>clipping
+<dt><b><tt>r</tt></b><dd>arc renderer
+<dt><b><tt>s</tt></b><dd>streams
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>S</tt></b><dd>scanner
+<dt><b><tt>t</tt></b><dd>tiling algorithm
+<dt><b><tt>u</tt></b><dd>undo saver (for save/restore), finalization
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>U</tt></b><dd>undo saver, more detail
+<dt><b><tt>v</tt></b><dd>alpha/transparency
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>V</tt></b><dd>alpha/transparency, more detail
+<dt><b><tt>w</tt></b><dd>compression encoder/decoder
+<dt><b><tt>x</tt></b><dd>transformations
+<dt><b><tt>y</tt></b><dd>Type 1 hints
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>Y</tt></b><dd>Type 1 hints, every access
+<dt><b><tt>z</tt></b><dd>trapezoid fill
+<dt><b><tt>#</tt></b><dd>operator error returns
+<dt><b><tt>%</tt></b><dd>externally processed comments
+<dt><b><tt>*</tt></b><dd>image and RasterOp parameters
+<dt><b><tt>:</tt></b><dd>command list and allocator/time summary
+<dt><b><tt>~</tt></b><dd>math functions and Functions
+<dt><b><tt>'</tt></b><dd>contexts, create/destroy
+<dt>&nbsp;&nbsp;&nbsp;<b><tt>"</tt></b><dd>contexts, every operation
+<dt><b><tt>^</tt></b><dd>reference counting
+<dt><b><tt>_</tt></b><dd>high-level output
+<dt><b><tt>|</tt></b><dd>(reserved for experimental code)
+</dl>
+
+<p>
+The following switch affects what is printed, but does not select specific
+items for printing:
+
+<dl compact>
+<dt><b><tt>/</tt></b><dd>include file name and line number on all trace output
+</dl>
+
+<p>
+These switches select debugging options other than what should be printed:
+
+<dl compact>
+<dt><b><tt>$</tt></b><dd>set unused parts of object references to
+identifiable garbage values
+<dt><b><tt>+</tt></b><dd>use minimum-size stack blocks
+<dt><b><tt>,</tt></b><dd>don't use path-based banding
+<dt><b><tt>`</tt></b><dd>don't use high-level banded images
+<dt><b><tt>.</tt></b><dd>use small-memory table sizes even on large-memory
+machines
+<dt><b><tt>?</tt></b><dd>validate pointers before, during and after garbage
+collection, also before and after save and restore; also make other
+allocator validity checks
+<dt><b><tt>@</tt></b><dd>fill newly allocated, garbage-collected, and freed
+storage with a marker (a1, c1, and f1 respectively)
+</dl>
+</table>
+
+<hr>
+
+<h2><a name="Known_paper_sizes"></a>Appendix: Paper sizes known to Ghostscript</h2>
+
+<p>
+The paper sizes known to Ghostscript are defined at the beginning of the
+initialization file <b><tt>gs_statd.ps</tt></b>; see the comments there for
+more details about the definitions. The table here lists them by name and
+size. <b><tt>gs_statd.ps</tt></b> defines their sizes exactly in points,
+and the dimensions in inches (at 72 points per inch) and centimeters shown
+in the table are derived from those, rounded to the nearest 0.1 unit. A
+guide to international paper sizes can be found at
+
+<blockquote>
+<a href="http://www.twics.com/~eds/paper/index.html">http://www.twics.com/~eds/paper/</a>
+</blockquote>
+
+<table cellpadding=0 cellspacing=0>
+<tr><th colspan=13 bgcolor="#CCCC00"><hr><font size="+1">Paper sizes known to Ghostscript</font><hr>
+<tr><th colspan=13>U.S. standard
+<tr> <td>&nbsp;
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <th colspan=3>Inches
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <th colspan=3>mm
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <th colspan=3>Points
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <td>&nbsp;
+<tr> <th align=left>Name
+ <td>&nbsp;
+ <th>&nbsp;W&nbsp;
+ <td>&times;
+ <th>&nbsp;H&nbsp;
+ <td>&nbsp;
+ <th>&nbsp;W&nbsp;
+ <td>&times;
+ <th>&nbsp;H&nbsp;
+ <td>&nbsp;
+ <th>&nbsp;W&nbsp;
+ <td>&times;
+ <th>&nbsp;H&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+<tr> <td colspan=13><hr>
+<tr> <td>11x17
+ <td>&nbsp;&nbsp;<td align=right>11.0<td>&nbsp;&nbsp;<td align=right>17.0<td>&nbsp;&nbsp;<td align=right>279<td>&nbsp;&nbsp;<td align=right>432<td>&nbsp;&nbsp;<td align=right>792<td>&nbsp;&nbsp;<td align=right>1224<td>&nbsp;&nbsp;<td>11&times;17in portrait
+<tr> <td>ledger
+ <td>&nbsp;<td align=right>17.0<td>&nbsp;<td align=right>11.0<td>&nbsp;<td align=right>432<td>&nbsp;<td align=right>279<td>&nbsp;<td align=right>1224<td>&nbsp;<td align=right>792<td>&nbsp;<td>11&times;17in landscape
+<tr> <td>legal
+ <td>&nbsp;<td align=right>8.5<td>&nbsp;<td align=right>14.0<td>&nbsp;<td align=right>216<td>&nbsp;<td align=right>356<td>&nbsp;<td align=right>612<td>&nbsp;<td align=right>1008<td>&nbsp;<td>&nbsp;
+<tr> <td>letter
+ <td>&nbsp;<td align=right>8.5<td>&nbsp;<td align=right>11.0<td>&nbsp;<td align=right>216<td>&nbsp;<td align=right>279<td>&nbsp;<td align=right>612<td>&nbsp;<td align=right>792<td>&nbsp;<td>&nbsp;
+<tr> <td>lettersmall
+ <td>&nbsp;<td align=right>8.5<td>&nbsp;<td align=right>11.0<td>&nbsp;<td align=right>216<td>&nbsp;<td align=right>279<td>&nbsp;<td align=right>612<td>&nbsp;<td align=right>792<td>&nbsp;<td>&nbsp;
+<tr> <td>archE
+ <td>&nbsp;<td align=right>36.0<td>&nbsp;<td align=right>48.0<td>&nbsp;<td align=right>914<td>&nbsp;<td align=right>1219<td>&nbsp;<td align=right>2592<td>&nbsp;<td align=right>3456<td>&nbsp;<td>&nbsp;
+<tr> <td>archD
+ <td>&nbsp;<td align=right>24.0<td>&nbsp;<td align=right>36.0<td>&nbsp;<td align=right>610<td>&nbsp;<td align=right>914<td>&nbsp;<td align=right>1728<td>&nbsp;<td align=right>2592<td>&nbsp;<td>&nbsp;
+<tr> <td>archC
+ <td>&nbsp;<td align=right>18.0<td>&nbsp;<td align=right>24.0<td>&nbsp;<td align=right>457<td>&nbsp;<td align=right>610<td>&nbsp;<td align=right>1296<td>&nbsp;<td align=right>1728<td>&nbsp;<td>&nbsp;
+<tr> <td>archB
+ <td>&nbsp;<td align=right>12.0<td>&nbsp;<td align=right>18.0<td>&nbsp;<td align=right>305<td>&nbsp;<td align=right>457<td>&nbsp;<td align=right>864<td>&nbsp;<td align=right>1296<td>&nbsp;<td>&nbsp;
+<tr> <td>archA
+ <td>&nbsp;<td align=right>9.0<td>&nbsp;<td align=right>12.0<td>&nbsp;<td align=right>229<td>&nbsp;<td align=right>305<td>&nbsp;<td align=right>648<td>&nbsp;<td align=right>864<td>&nbsp;<td>&nbsp;
+<tr> <td colspan=13><hr>
+<tr><th colspan=13>ISO standard
+<tr> <td colspan=13><hr>
+<tr> <td>a0
+ <td>&nbsp;<td align=right>33.1<td>&nbsp;<td align=right>46.8<td>&nbsp;<td align=right>841<td>&nbsp;<td align=right>1189<td>&nbsp;<td align=right>2384<td>&nbsp;<td align=right>3370<td>&nbsp;<td>&nbsp;
+<tr> <td>a1
+ <td>&nbsp;<td align=right>23.4<td>&nbsp;<td align=right>33.1<td>&nbsp;<td align=right>594<td>&nbsp;<td align=right>841<td>&nbsp;<td align=right>1684<td>&nbsp;<td align=right>2384<td>&nbsp;<td>&nbsp;
+<tr> <td>a2
+ <td>&nbsp;<td align=right>16.5<td>&nbsp;<td align=right>23.4<td>&nbsp;<td align=right>420<td>&nbsp;<td align=right>594<td>&nbsp;<td align=right>1191<td>&nbsp;<td align=right>1684<td>&nbsp;<td>&nbsp;
+<tr> <td>a3
+ <td>&nbsp;<td align=right>11.7<td>&nbsp;<td align=right>16.5<td>&nbsp;<td align=right>297<td>&nbsp;<td align=right>420<td>&nbsp;<td align=right>842<td>&nbsp;<td align=right>1191<td>&nbsp;<td>&nbsp;
+<tr> <td>a4
+ <td>&nbsp;<td align=right>8.3<td>&nbsp;<td align=right>11.7<td>&nbsp;<td align=right>210<td>&nbsp;<td align=right>297<td>&nbsp;<td align=right>595<td>&nbsp;<td align=right>842<td>&nbsp;<td>&nbsp;
+<tr> <td>a4small
+ <td>&nbsp;<td align=right>8.3<td>&nbsp;<td align=right>11.7<td>&nbsp;<td align=right>210<td>&nbsp;<td align=right>297<td>&nbsp;<td align=right>595<td>&nbsp;<td align=right>842<td>&nbsp;<td>&nbsp;
+<tr> <td>a5
+ <td>&nbsp;<td align=right>5.8<td>&nbsp;<td align=right>8.3<td>&nbsp;<td align=right>148<td>&nbsp;<td align=right>210<td>&nbsp;<td align=right>420<td>&nbsp;<td align=right>595<td>&nbsp;<td>&nbsp;
+<tr> <td>a6
+ <td>&nbsp;<td align=right>4.1<td>&nbsp;<td align=right>5.8<td>&nbsp;<td align=right>105<td>&nbsp;<td align=right>148<td>&nbsp;<td align=right>297<td>&nbsp;<td align=right>420<td>&nbsp;<td>&nbsp;
+<tr> <td>a7
+ <td>&nbsp;<td align=right>2.9<td>&nbsp;<td align=right>4.1<td>&nbsp;<td align=right>74<td>&nbsp;<td align=right>105<td>&nbsp;<td align=right>210<td>&nbsp;<td align=right>297<td>&nbsp;<td>&nbsp;
+<tr> <td>a8
+ <td>&nbsp;<td align=right>2.1<td>&nbsp;<td align=right>2.9<td>&nbsp;<td align=right>52<td>&nbsp;<td align=right>74<td>&nbsp;<td align=right>148<td>&nbsp;<td align=right>210<td>&nbsp;<td>&nbsp;
+<tr> <td>a9
+ <td>&nbsp;<td align=right>1.5<td>&nbsp;<td align=right>2.1<td>&nbsp;<td align=right>37<td>&nbsp;<td align=right>52<td>&nbsp;<td align=right>105<td>&nbsp;<td align=right>148<td>&nbsp;<td>&nbsp;
+<tr> <td>a10
+ <td>&nbsp;<td align=right>1.0<td>&nbsp;<td align=right>1.5<td>&nbsp;<td align=right>26<td>&nbsp;<td align=right>37<td>&nbsp;<td align=right>73<td>&nbsp;<td align=right>105<td>&nbsp;<td>&nbsp;
+<tr> <td>isob0
+ <td>&nbsp;<td align=right>39.4<td>&nbsp;<td align=right>55.7<td>&nbsp;<td align=right>1000<td>&nbsp;<td align=right>1414<td>&nbsp;<td align=right>2835<td>&nbsp;<td align=right>4008<td>&nbsp;<td>&nbsp;
+<tr> <td>isob1
+ <td>&nbsp;<td align=right>27.8<td>&nbsp;<td align=right>39.4<td>&nbsp;<td align=right>707<td>&nbsp;<td align=right>1000<td>&nbsp;<td align=right>2004<td>&nbsp;<td align=right>2835<td>&nbsp;<td>&nbsp;
+<tr> <td>isob2
+ <td>&nbsp;<td align=right>19.7<td>&nbsp;<td align=right>27.8<td>&nbsp;<td align=right>500<td>&nbsp;<td align=right>707<td>&nbsp;<td align=right>1417<td>&nbsp;<td align=right>2004<td>&nbsp;<td>&nbsp;
+<tr> <td>isob3
+ <td>&nbsp;<td align=right>13.9<td>&nbsp;<td align=right>19.7<td>&nbsp;<td align=right>353<td>&nbsp;<td align=right>500<td>&nbsp;<td align=right>1001<td>&nbsp;<td align=right>1417<td>&nbsp;<td>&nbsp;
+<tr> <td>isob4
+ <td>&nbsp;<td align=right>9.8<td>&nbsp;<td align=right>13.9<td>&nbsp;<td align=right>250<td>&nbsp;<td align=right>353<td>&nbsp;<td align=right>709<td>&nbsp;<td align=right>1001<td>&nbsp;<td>&nbsp;
+<tr> <td>isob5
+ <td>&nbsp;<td align=right>6.9<td>&nbsp;<td align=right>9.8<td>&nbsp;<td align=right>176<td>&nbsp;<td align=right>250<td>&nbsp;<td align=right>499<td>&nbsp;<td align=right>709<td>&nbsp;<td>&nbsp;
+<tr> <td>isob6
+ <td>&nbsp;<td align=right>4.9<td>&nbsp;<td align=right>6.9<td>&nbsp;<td align=right>125<td>&nbsp;<td align=right>176<td>&nbsp;<td align=right>354<td>&nbsp;<td align=right>499<td>&nbsp;<td>&nbsp;
+<tr> <td>c0
+ <td>&nbsp;<td align=right>36.1<td>&nbsp;<td align=right>51.1<td>&nbsp;<td align=right>917<td>&nbsp;<td align=right>1297<td>&nbsp;<td align=right>2599<td>&nbsp;<td align=right>3677<td>&nbsp;<td>&nbsp;
+<tr> <td>c1
+ <td>&nbsp;<td align=right>25.5<td>&nbsp;<td align=right>36.1<td>&nbsp;<td align=right>648<td>&nbsp;<td align=right>917<td>&nbsp;<td align=right>1837<td>&nbsp;<td align=right>2599<td>&nbsp;<td>&nbsp;
+<tr> <td>c2
+ <td>&nbsp;<td align=right>18.0<td>&nbsp;<td align=right>25.5<td>&nbsp;<td align=right>458<td>&nbsp;<td align=right>648<td>&nbsp;<td align=right>1298<td>&nbsp;<td align=right>1837<td>&nbsp;<td>&nbsp;
+<tr> <td>c3
+ <td>&nbsp;<td align=right>12.8<td>&nbsp;<td align=right>18.0<td>&nbsp;<td align=right>324<td>&nbsp;<td align=right>458<td>&nbsp;<td align=right>918<td>&nbsp;<td align=right>1298<td>&nbsp;<td>&nbsp;
+<tr> <td>c4
+ <td>&nbsp;<td align=right>9.0<td>&nbsp;<td align=right>12.8<td>&nbsp;<td align=right>229<td>&nbsp;<td align=right>324<td>&nbsp;<td align=right>649<td>&nbsp;<td align=right>918<td>&nbsp;<td>&nbsp;
+<tr> <td>c5
+ <td>&nbsp;<td align=right>6.4<td>&nbsp;<td align=right>9.0<td>&nbsp;<td align=right>162<td>&nbsp;<td align=right>229<td>&nbsp;<td align=right>459<td>&nbsp;<td align=right>649<td>&nbsp;<td>&nbsp;
+<tr> <td>c6
+ <td>&nbsp;<td align=right>4.5<td>&nbsp;<td align=right>6.4<td>&nbsp;<td align=right>114<td>&nbsp;<td align=right>162<td>&nbsp;<td align=right>323<td>&nbsp;<td align=right>459<td>&nbsp;<td>&nbsp;
+<tr> <td colspan=13><hr>
+<tr><th colspan=13>JIS standard
+<tr> <td colspan=13><hr>
+<tr> <td>jisb0
+ <td>&nbsp;<td align=right><td>&nbsp;<td align=right><td>&nbsp;<td align=right>1030<td>&nbsp;<td align=right>1456<td>&nbsp;<td align=right><td>&nbsp;<td align=right><td>&nbsp;<td>&nbsp;
+<tr> <td>jisb1
+ <td>&nbsp;<td align=right><td>&nbsp;<td align=right><td>&nbsp;<td align=right>728<td>&nbsp;<td align=right>1030<td>&nbsp;<td align=right><td>&nbsp;<td align=right><td>&nbsp;<td>&nbsp;
+<tr> <td>jisb2
+ <td>&nbsp;<td align=right><td>&nbsp;<td align=right><td>&nbsp;<td align=right>515<td>&nbsp;<td align=right>728<td>&nbsp;<td align=right><td>&nbsp;<td align=right><td>&nbsp;<td>&nbsp;
+<tr> <td>jisb3
+ <td>&nbsp;<td align=right><td>&nbsp;<td align=right><td>&nbsp;<td align=right>364<td>&nbsp;<td align=right>515<td>&nbsp;<td align=right><td>&nbsp;<td align=right><td>&nbsp;<td>&nbsp;
+<tr> <td>jisb4
+ <td>&nbsp;<td align=right><td>&nbsp;<td align=right><td>&nbsp;<td align=right>257<td>&nbsp;<td align=right>364<td>&nbsp;<td align=right><td>&nbsp;<td align=right><td>&nbsp;<td>&nbsp;
+<tr> <td>jisb5
+ <td>&nbsp;<td align=right><td>&nbsp;<td align=right><td>&nbsp;<td align=right>182<td>&nbsp;<td align=right>257<td>&nbsp;<td align=right><td>&nbsp;<td align=right><td>&nbsp;<td>&nbsp;
+<tr> <td>jisb6
+ <td>&nbsp;<td align=right><td>&nbsp;<td align=right><td>&nbsp;<td align=right>128<td>&nbsp;<td align=right>182<td>&nbsp;<td align=right><td>&nbsp;<td align=right><td>&nbsp;<td>&nbsp;
+<tr> <td colspan=13><hr>
+<tr><th colspan=13>ISO/JIS switchable
+<tr> <td colspan=13><hr>
+<tr> <td>b0 (see * below)
+<tr> <td>b1 (see * below)
+<tr> <td>b2 (see * below)
+<tr> <td>b3 (see * below)
+<tr> <td>b4 (see * below)
+<tr> <td>b5 (see * below)
+<tr> <td colspan=13><hr>
+<tr><th colspan=13>Other
+<tr> <td colspan=13><hr>
+<tr> <td>flsa
+ <td>&nbsp;<td align=right>8.5<td>&nbsp;<td align=right>13.0<td>&nbsp;<td align=right>216<td>&nbsp;<td align=right>330<td>&nbsp;<td align=right>612<td>&nbsp;<td align=right>936<td>&nbsp;<td>U.S. foolscap
+<tr> <td>flse
+ <td>&nbsp;<td align=right>8.5<td>&nbsp;<td align=right>13.0<td>&nbsp;<td align=right>216<td>&nbsp;<td align=right>330<td>&nbsp;<td align=right>612<td>&nbsp;<td align=right>936<td>&nbsp;<td>European foolscap
+<tr> <td>halfletter
+ <td>&nbsp;<td align=right>5.5<td>&nbsp;<td align=right>8.5<td>&nbsp;<td align=right>140<td>&nbsp;<td align=right>216<td>&nbsp;<td align=right>396<td>&nbsp;<td align=right>612<td>&nbsp;<td>&nbsp;
+</table>
+
+<p>
+*<em>Note:</em> Initially the B paper sizes are the ISO sizes, e.g.,
+<b><tt>b0</tt></b> is the same as <b><tt>isob0</tt></b>. Running the file
+<b><tt>lib/jispaper.ps</tt></b> makes the B paper sizes be the JIS sizes,
+e.g., <b><tt>b0</tt></b> becomes the same as <b><tt>jisb0</tt></b>.
+
+<hr>
+
+<h2><a name="X_font_mappings"></a>Appendix: X default font mappings</h2>
+
+<h3><a name="Standard_X_server_fonts"></a>Standard X servers</h3>
+
+<h4><a name="X_regular_fonts"></a>Regular fonts</h4>
+
+<pre> AvantGarde-Book: -Adobe-ITC Avant Garde Gothic-Book-R-Normal--\n\
+ AvantGarde-BookOblique: -Adobe-ITC Avant Garde Gothic-Book-O-Normal--\n\
+ AvantGarde-Demi: -Adobe-ITC Avant Garde Gothic-Demi-R-Normal--\n\
+ AvantGarde-DemiOblique: -Adobe-ITC Avant Garde Gothic-Demi-O-Normal--\n\
+ Bookman-Demi: -Adobe-ITC Bookman-Demi-R-Normal--\n\
+ Bookman-DemiItalic: -Adobe-ITC Bookman-Demi-I-Normal--\n\
+ Bookman-Light: -Adobe-ITC Bookman-Light-R-Normal--\n\
+ Bookman-LightItalic: -Adobe-ITC Bookman-Light-I-Normal--\n\
+ Courier: -Adobe-Courier-Medium-R-Normal--\n\
+ Courier-Bold: -Adobe-Courier-Bold-R-Normal--\n\
+ Courier-BoldOblique: -Adobe-Courier-Bold-O-Normal--\n\
+ Courier-Oblique: -Adobe-Courier-Medium-O-Normal--\n\
+ Helvetica: -Adobe-Helvetica-Medium-R-Normal--\n\
+ Helvetica-Bold: -Adobe-Helvetica-Bold-R-Normal--\n\
+ Helvetica-BoldOblique: -Adobe-Helvetica-Bold-O-Normal--\n\
+ Helvetica-Narrow: -Adobe-Helvetica-Medium-R-Narrow--\n\
+ Helvetica-Narrow-Bold: -Adobe-Helvetica-Bold-R-Narrow--\n\
+ Helvetica-Narrow-BoldOblique: -Adobe-Helvetica-Bold-O-Narrow--\n\
+ Helvetica-Narrow-Oblique: -Adobe-Helvetica-Medium-O-Narrow--\n\
+ Helvetica-Oblique: -Adobe-Helvetica-Medium-O-Normal--\n\
+ NewCenturySchlbk-Bold: -Adobe-New Century Schoolbook-Bold-R-Normal--\n\
+ NewCenturySchlbk-BoldItalic: -Adobe-New Century Schoolbook-Bold-I-Normal--\n\
+ NewCenturySchlbk-Italic: -Adobe-New Century Schoolbook-Medium-I-Normal--\n\
+ NewCenturySchlbk-Roman: -Adobe-New Century Schoolbook-Medium-R-Normal--\n\
+ Palatino-Bold: -Adobe-Palatino-Bold-R-Normal--\n\
+ Palatino-BoldItalic: -Adobe-Palatino-Bold-I-Normal--\n\
+ Palatino-Italic: -Adobe-Palatino-Medium-I-Normal--\n\
+ Palatino-Roman: -Adobe-Palatino-Medium-R-Normal--\n\
+ Times-Bold: -Adobe-Times-Bold-R-Normal--\n\
+ Times-BoldItalic: -Adobe-Times-Bold-I-Normal--\n\
+ Times-Italic: -Adobe-Times-Medium-I-Normal--\n\
+ Times-Roman: -Adobe-Times-Medium-R-Normal--\n\
+ ZapfChancery-MediumItalic: -Adobe-ITC Zapf Chancery-Medium-I-Normal--
+</pre>
+
+<h4><a name="X_symbol_fonts"></a>Symbol fonts</h4>
+
+<pre> Symbol: -Adobe-Symbol-Medium-R-Normal--
+</pre>
+
+<h4><a name="X_dingbat_fonts"></a>Dingbat fonts</h4>
+
+<pre> ZapfDingbats: -Adobe-ITC Zapf Dingbats-Medium-R-Normal--
+</pre>
+
+<h3><a name="OpenWindows_fonts"></a>Sun OpenWindows</h3>
+
+<p>
+For Sun's X11/NeWS one can use the OpenWindows scalable fonts instead,
+which gives good output for any point size. In this environment, the
+relevant section of the resource file should look like this:
+
+<pre>Ghostscript.regularFonts: \
+ AvantGarde-Book: -itc-avantgarde-book-r-normal-- \n\
+ AvantGarde-BookOblique: -itc-avantgarde-book-o-normal-- \n\
+ AvantGarde-Demi: -itc-avantgarde-demi-r-normal-- \n\
+ AvantGarde-DemiOblique: -itc-avantgarde-demi-o-normal-- \n\
+ Bembo: -monotype-bembo-medium-r-normal-- \n\
+ Bembo-Bold: -monotype-bembo-bold-r-normal-- \n\
+ Bembo-BoldItalic: -monotype-bembo-bold-i-normal-- \n\
+ Bembo-Italic: -monotype-bembo-medium-i-normal-- \n\
+ Bookman-Demi: -itc-bookman-demi-r-normal-- \n\
+ Bookman-DemiItalic: -itc-bookman-demi-i-normal-- \n\
+ Bookman-Light: -itc-bookman-light-r-normal-- \n\
+ Bookman-LightItalic: -itc-bookman-light-i-normal-- \n\
+ Courier: -itc-courier-medium-r-normal-- \n\
+ Courier-Bold: -itc-courier-bold-r-normal-- \n\
+ Courier-BoldOblique: -itc-courier-bold-o-normal-- \n\
+ Courier-Oblique: -itc-courier-medium-o-normal-- \n\
+ GillSans: -monotype-gill-medium-r-normal-sans- \n\
+ GillSans-Bold: -monotype-gill-bold-r-normal-sans- \n\
+ GillSans-BoldItalic: -monotype-gill-bold-i-normal-sans- \n\
+ GillSans-Italic: -monotype-gill-normal-i-normal-sans- \n\
+ Helvetica: -linotype-helvetica-medium-r-normal-- \n\
+ Helvetica-Bold: -linotype-helvetica-bold-r-normal-- \n\
+ Helvetica-BoldOblique: -linotype-helvetica-bold-o-normal-- \n\
+ Helvetica-Narrow: -linotype-helvetica-medium-r-narrow-- \n\
+ Helvetica-Narrow-Bold: -linotype-helvetica-bold-r-narrow-- \n\
+ Helvetica-Narrow-BoldOblique: -linotype-helvetica-bold-o-narrow-- \n\
+ Helvetica-Narrow-Oblique: -linotype-helvetica-medium-o-narrow-- \n\
+ Helvetica-Oblique: -linotype-helvetica-medium-o-normal-- \n\
+ LucidaBright: -b&amp;h-lucidabright-medium-r-normal-- \n\
+ LucidaBright-Demi: -b&amp;h-lucidabright-demibold-r-normal-- \n\
+ LucidaBright-DemiItalic: -b&amp;h-lucidabright-demibold-i-normal-- \n\
+ LucidaBright-Italic: -b&amp;h-lucidabright-medium-i-normal-- \n\
+ LucidaSans: -b&amp;h-lucida-medium-r-normal-sans- \n\
+ LucidaSans-Bold: -b&amp;h-lucida-bold-r-normal-sans- \n\
+ LucidaSans-BoldItalic: -b&amp;h-lucida-bold-i-normal-sans- \n\
+ LucidaSans-Italic: -b&amp;h-lucida-medium-i-normal-sans- \n\
+ LucidaSans-Typewriter: -b&amp;h-lucidatypewriter-medium-r-normal-sans- \n\
+ LucidaSans-TypewriterBold: -b&amp;h-lucidatypewriter-bold-r-normal-sans- \n\
+ NewCenturySchlbk-BoldItalic: -linotype-new century schoolbook-bold-i-normal-- \n\
+ NewCenturySchlbk-Bold: -linotype-new century schoolbook-bold-r-normal-- \n\
+ NewCenturySchlbk-Italic: -linotype-new century schoolbook-medium-i-normal-- \n\
+ NewCenturySchlbk-Roman: -linotype-new century schoolbook-medium-r-normal-- \n\
+ Palatino-Bold: -linotype-palatino-bold-r-normal-- \n\
+ Palatino-BoldItalic: -linotype-palatino-bold-i-normal-- \n\
+ Palatino-Italic: -linotype-palatino-medium-i-normal-- \n\
+ Palatino-Roman: -linotype-palatino-medium-r-normal-- \n\
+ Rockwell: -monotype-rockwell-medium-r-normal-- \n\
+ Rockwell-Bold: -monotype-rockwell-bold-r-normal-- \n\
+ Rockwell-BoldItalic: -monotype-rockwell-bold-i-normal-- \n\
+ Rockwell-Italic: -monotype-rockwell-medium-i-normal-- \n\
+ Times-Bold: -linotype-times-bold-r-normal-- \n\
+ Times-BoldItalic: -linotype-times-bold-i-normal-- \n\
+ Times-Italic: -linotype-times-medium-i-normal-- \n\
+ Times-Roman: -linotype-times-medium-r-normal-- \n\
+ Utopia-Bold: -adobe-utopia-bold-r-normal-- \n\
+ Utopia-BoldItalic: -adobe-utopia-bold-i-normal-- \n\
+ Utopia-Italic: -adobe-utopia-regular-i-normal-- \n\
+ Utopia-Regular: -adobe-utopia-regular-r-normal-- \n\
+ ZapfChancery-MediumItalic: -itc-zapfchancery-medium-i-normal-- \n
+Ghostscript.dingbatFonts: \
+ ZapfDingbats: -itc-zapfdingbats-medium-r-normal--
+Ghostscript.symbolFonts: \
+ Symbol: --symbol-medium-r-normal--
+</pre>
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 2000 Aladdin Enterprises. All rights
+reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/Xfonts.htm b/Master/xemtex/doc/ghostscript/Xfonts.htm
new file mode 100644
index 00000000000..d86653143ab
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/Xfonts.htm
@@ -0,0 +1,265 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Ghostscript's external font and text interface</title>
+<!-- $Id: Xfonts.htm,v 1.13.2.11.2.5 2003/05/17 14:39:00 giles Exp $ -->
+<!-- Originally: xfonts.txt -->
+<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
+</head>
+
+<body>
+<!-- [1.0 begin visible header] ============================================ -->
+
+<!-- [1.1 begin headline] ================================================== -->
+
+<h1>Ghostscript's external font and text interface</h1>
+
+<!-- [1.1 end headline] ==================================================== -->
+
+<!-- [1.2 begin table of contents] ========================================= -->
+
+<h2>Table of contents</h2>
+
+<blockquote><ul>
+<li><a href="#Introduction">Introduction</a>
+<li><a href="#Types">Types</a>
+<li><a href="#Implementation_procedures">Implementation procedures</a>
+<li><a href="#Font_level_procedures">Font-level procedures</a>
+<ul>
+<li><a href="#lookup_font"><b><tt>lookup_font</tt></b></a>
+<li><a href="#char_xglyph"><b><tt>char_xglyph</tt></b></a>
+<li><a href="#char_metrics"><b><tt>char_metrics</tt></b></a>
+<li><a href="#render_char"><b><tt>render_char</tt></b></a>
+<li><a href="#release"><b><tt>release</tt></b></a>
+</ul>
+</ul></blockquote>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript
+overview</a>.
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+<h2><a name="Introduction"></a>Introduction</h2>
+
+<p>
+Ghostscript can use the character rasterizer provided by the underlying
+operating system and window system; specifically, Adobe Type Manager (ATM)
+or a TrueType rasterizer under MS Windows, or the facilities provided by X
+Windows. This ability augments, but does not replace, Ghostscript's own
+Type 1 rasterizer: Ghostscript may still use its own rasterizer for very
+large characters, characters that are clipped or transformed in unusual
+ways, and for output to devices other than the screen.
+
+<p>
+Ghostscript connects to these platform facilities through a driver-like
+interface called the xfont (external font) interface. Current xfont
+implementations are associated directly with device drivers; in a future
+release, Ghostscript may separate them, so that (for example) it will be
+possible to use the platform rasterizer when writing to a file.
+
+<p>
+Please note that from this point, this file is likely to be useful only
+to a small number of Ghostscript porters and implementors.
+
+<hr>
+
+<h2><a name="Types"></a>Types</h2>
+
+<table cellpadding=0 cellspacing=0>
+<tr> <th valign=bottom align=left>Type
+ <td>&nbsp;&nbsp;
+ <th valign=bottom align=left>Declared /<br>defined in
+ <td>&nbsp;
+ <th valign=bottom align=left>Represents
+<tr> <td colspan=5><hr>
+<tr> <td valign=top><b><tt>gs_char</tt></b>
+ <td>&nbsp;
+ <td valign=top><b><tt>gsccode.h</tt></b>
+ <td>&nbsp;
+ <td valign=top>A character code that appears in a string. Currently
+ it is always a single byte, but composite fonts or Unicode may
+ require it to be wider in the future.
+<tr> <td valign=top><b><tt>gs_glyph</tt></b>
+ <td>&nbsp;
+ <td valign=top><b><tt>gsccode.h</tt></b>
+ <td>&nbsp;
+ <td valign=top>A character name like "period" or "epsilon". From
+ the xfont implementation's point of view, it is just a handle;
+ when necessary, Ghostscript provides a
+ <b><tt>gs_proc_glyph_name_t</tt></b> procedure to
+ convert it to a string name.
+<tr> <td valign=top><b><tt>gs_proc_glyph_name_t</tt></b>
+ <td>&nbsp;
+ <td valign=top><b><tt>gsccode.h</tt></b>
+ <td>&nbsp;
+ <td valign=top>A procedure that maps a <b><tt>gs_glyph</tt></b> to
+ its string name; see the <b><tt>char_xglyph</tt></b> procedure.
+<tr> <td valign=top><b><tt>gx_xglyph</tt></b>
+ <td>&nbsp;
+ <td valign=top><b><tt>gsxfont.h</tt></b>
+ <td>&nbsp;
+ <td valign=top>A character or glyph code that can be used with a
+ specific platform font. Normally it will be a character code
+ that the implementation of <b><tt>render_char</tt></b> will
+ turn into a 1-character string and give to the platform's
+ "display string" operation.
+<tr> <td valign=top><b><tt>gx_xfont_procs</tt></b>
+ <td>&nbsp;
+ <td valign=top><b><tt>gsxfont.h</tt></b>, <b><tt>gxxfont.h</tt></b>
+ <td>&nbsp;
+ <td valign=top>The xfont analogue of
+ <b><tt>gx_device_procs</tt></b>, the type of the
+ procedure record that defines an xfont implementation.
+<tr> <td valign=top><b><tt>gx_xfont</tt></b>
+ <td>&nbsp;
+ <td valign=top><b><tt>gsxfont.h</tt></b>, <b><tt>gxxfont.h</tt></b>
+ <td>&nbsp;
+ <td valign=top>The gxfont analogue of <b><tt>gx_device</tt></b>,
+ the type of the basic structure for an xfont.
+<tr> <td valign=top>(<b><tt>encoding_index</tt></b>)
+ <td>&nbsp;
+ <td>&nbsp;
+ <td>&nbsp;
+ <td valign=top>Not really a type, although it probably should be:
+ an <b><tt>int</tt></b> used to indicate the
+ <b><tt>Encoding</tt></b> used by a font. Defined values are
+ <dl compact>
+ <dt>0<dd><b><tt>StandardEncoding</tt></b>
+ <dt>1<dd><b><tt>ISOLatin1Encoding</tt></b>
+ <dt>2<dd><b><tt>SymbolEncoding</tt></b>
+ <dt>3<dd><b><tt>DingbatsEncoding</tt></b>
+ <dt>-1<dd>Other encoding
+ </dl>
+</table>
+
+<hr>
+
+<h2><a name="Implementation_procedures"></a>Implementation
+procedures</h2>
+
+<p>
+All the procedures that return <b><tt>int</tt></b> results return 0 on
+success, or an appropriate negative error code for error conditions; these
+error codes are defined in <b><tt>gserrors.h</tt></b>. The relevant ones
+are the same as for <a href="Drivers.htm">drivers</a>, and as with drivers,
+if an implementation procedure returns an error, it should use the
+<b><tt>return_error</tt></b> macro -- defined in <b><tt>gx.h</tt></b>,
+which is automatically included by <b><tt>gdevprn.h</tt></b> but not by
+<b><tt>gserrors.h</tt></b> -- rather than a simple <b><tt>return</tt></b>
+statement, for instance
+
+<blockquote>
+<b><tt>return_error(gs_error_VMerror);</tt></b>
+</blockquote>
+
+<h2><a name="Font_level_procedures"></a>Font-level procedures</h2>
+
+<h3><a name="lookup_font"></a><b><tt>lookup_font</tt></b></h3>
+
+<dl>
+<dt><b><tt>gx_xfont *(*lookup_font)(P7(gx_device&nbsp;*dev,
+const&nbsp;byte&nbsp;*fname, uint&nbsp;len, int&nbsp;encoding_index,
+const&nbsp;gs_uid&nbsp;*puid, const&nbsp;gs_matrix&nbsp;*pmat,
+const&nbsp;gs_memory_procs&nbsp;*mprocs))</tt></b>
+<dd>Look up a font name, <b><tt>UniqueID</tt></b>, and matrix, and return
+an xfont, or <b><tt>NULL</tt></b> if no suitable xfont exists. Use
+<b><tt>mprocs</tt></b> to allocate the xfont and any subsidiary data
+structures. The matrix is the <b><tt>FontMatrix</tt></b> concatenated with
+the CTM, so (roughly speaking) the font size in pixels is
+<b><tt>pmat&nbsp;-&gt;&nbsp;yy</tt></b>&nbsp;&times;&nbsp;1000 for a normal
+Type 1 font.
+
+<p>
+Note that this is the only implementation procedure that does not take an
+xfont * as its first argument. In fact, callers of
+<b><tt>lookup_font</tt></b> must use the <b><tt>get_xfont_device</tt></b>
+driver procedure to get the correct device to pass as the first argument to
+<b><tt>lookup_font</tt></b>.
+</dl>
+
+<h3><a name="char_xglyph"></a><b><tt>char_xglyph</tt></b></h3>
+
+<dl>
+<dt><b><tt>gx_xglyph (*char_xglyph)(P5(gx_xfont&nbsp;*xf, gs_char&nbsp;chr,
+int&nbsp;encoding_index, gs_glyph&nbsp;glyph,
+gs_proc_glyph_name_t&nbsp;glyph_name))</tt></b>
+<dd>Convert a character name to an xglyph code. In the case of
+<b><tt>glyphshow</tt></b>, <b><tt>chr</tt></b> may be
+<b><tt>gs_no_char</tt></b>; for an ordinary <b><tt>show</tt></b> operation,
+if the character code is invalid, <b><tt>glyph</tt></b> may be
+<b><tt>gs_no_glyph</tt></b>.
+</dl>
+
+<h3><a name="char_metrics"></a><b><tt>char_metrics</tt></b></h3>
+
+<dl>
+<dt><b><tt>int (*char_metrics)(P5(gx_xfont&nbsp;*xf, gx_xglyph&nbsp;xg,
+int&nbsp;wmode, gs_int_point&nbsp;*pwidth,
+gs_int_rect&nbsp;*pbbox))</tt></b>
+<dd>Get the metrics for a character. If the metrics are unavailable,
+return 1.
+</dl>
+
+<h3><a name="render_char"></a><b><tt>render_char</tt></b></h3>
+
+<dl>
+<dt><b><tt>int (*render_char)(P7(gx_xfont&nbsp;*xf, gx_xglyph&nbsp;xg,
+gx_device&nbsp;*target, int&nbsp;x, int&nbsp;y, gx_color_index&nbsp;color,
+int&nbsp;required))</tt></b>
+<dd>Render a character. <em>(x,y)</em> corresponds to the character
+origin. The target may be any Ghostscript device. A good implementation
+will check whether the target can handle this type of xfont directly (for
+instance by checking the target name), and if so, will render the character
+directly; otherwise, it will do what has to be done in the general case,
+namely, get a bitmap for the character and use the target's
+<b><tt>copy_mono</tt></b> operation. If <b><tt>required</tt></b> is false,
+the procedure should return an error if the rendering operation would be
+expensive, since in this case Ghostscript has already cached the bitmap and
+metrics from a previous call with <b><tt>required</tt></b>=true. If the
+operation cannot be done, return 1.
+</dl>
+
+<h3><a name="release"></a><b><tt>release</tt></b></h3>
+
+<dl>
+<dt><b><tt>int (*release)(P2(gx_xfont&nbsp;*xf,
+const&nbsp;gs_memory_procs&nbsp;*mprocs))</tt></b>
+<dd>Release any external resources associated with an xfont. If
+<b><tt>mprocs</tt></b> is not <b><tt>NULL</tt></b>, also free any storage
+allocated by <b><tt>lookup_font</tt></b> (including the xfont itself).
+</dl>
+
+<!-- [2.0 end contents] ==================================================== -->
+
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+
+<p>
+<small>Copyright &copy; 1996, 1997, 1998 Aladdin Enterprises. All
+rights reserved.</small>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.
+
+This software is distributed under license and may not be copied,
+modified or distributed except as expressly authorized under the terms
+of the license contained in the file LICENSE in this distribution.
+
+<p>
+<small>Ghostscript version 7.07, 17 May 2003
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+</body>
+</html>
diff --git a/Master/xemtex/doc/ghostscript/examples/alphabet.ps b/Master/xemtex/doc/ghostscript/examples/alphabet.ps
new file mode 100644
index 00000000000..95137585b25
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/alphabet.ps
@@ -0,0 +1,62 @@
+%!
+% Check for command line parameters:
+% Name, FirstSize, Ratio, NumSizes, UseOutline.
+
+/alphabetsave save def % prevent left over effects
+
+/FontName where { pop } { /FontName (Palatino-Italic) def } ifelse
+/FirstSize where { pop } { /FirstSize 15 def } ifelse
+/Ratio where { pop } { /Ratio 1.6 def } ifelse
+/NumSizes where { pop } { /NumSizes 3 def } ifelse
+/UseOutline where { pop } { /UseOutline false def } ifelse
+
+/Strings FirstSize 20 gt
+ { [
+ (ABCDEFGHIJ) (KLMNOPQR) (STUVWXYZ)
+ (abcdefghijklm) (nopqrstuvwxyz)
+ (0123456789<=>) (:;?@ !"#$%&')
+ (\(\)*+,-./[\\]^_) (`{|}~)
+ ] }
+ { [
+ (ABCDEFGHIJKLMNOPQRSTUVWXYZ)
+ (abcdefghijklmnopqrstuvwxyz)
+ (0123456789<=>:;?@ !"#$%&')
+ (\(\)*+,-./ [\\]^_ `{|}~)
+ ] }
+ifelse def
+
+/sshow
+ { gsave UseOutline
+ { { gsave ( ) dup 0 4 -1 roll put
+ false charpath pathbbox 0 setlinewidth stroke grestore
+ pop 8 add currentpoint exch pop moveto pop
+ } forall
+ }
+ { 2 0 3 -1 roll ashow }
+ ifelse grestore
+ } def
+
+FontName findfont FirstSize scalefont setfont
+
+clippath pathbbox /top exch def pop pop pop newpath
+10 10 moveto
+NumSizes
+ { gsave nulldevice (Q) false charpath pathbbox grestore
+ exch pop exch sub exch pop 1.25 mul /height exch def
+ Strings
+ { currentpoint exch pop top height 3 mul sub gt
+ { showpage 10 10 height sub moveto
+ }
+ if
+ dup sshow
+ UseOutline not
+ { 0 height rmoveto gsave 0.01 rotate sshow grestore }
+ if
+ 0 height rmoveto
+ } forall
+ Ratio dup scale
+ } repeat
+showpage
+
+clear cleardictstack
+alphabetsave restore
diff --git a/Master/xemtex/doc/ghostscript/examples/annots.pdf b/Master/xemtex/doc/ghostscript/examples/annots.pdf
new file mode 100644
index 00000000000..467926df379
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/annots.pdf
Binary files differ
diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/all_ac1.ps b/Master/xemtex/doc/ghostscript/examples/cjk/all_ac1.ps
new file mode 100644
index 00000000000..bb038b640e5
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/cjk/all_ac1.ps
@@ -0,0 +1,221 @@
+%!PS-Adobe-3.0
+%%Title: Adobe-CNS1 CID-Keyed Fonts Character List
+%%Creator: Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%Copyright: (C) 2001 Taiji Yamada and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU General Public License. See the file COPYING
+%%+ for more information.
+%%Version: 1.0
+%
+% Usage:
+% gs [-sF=MOESung-Regular] [-daffix [-sAF=MSung-Light]] \
+% [-dglyphshow- [-sI=Identity-H]] [-ddescent=200] all_ac1.ps
+%
+%%DocumentMedia: A4 595 842 0 white ()
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/*CIDFont*findresource {
+ dup /CIDFont resourcestatus { pop pop /CIDFont findresource } {
+ notice*page begin
+ *open
+ (Error in /CIDFont findresource: ) *echo-n dup *echo
+ *close
+ end
+ /CIDFont findresource
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+
+/title (Adobe-CNS1 CID-Keyed Fonts Character List) def
+/PW 595 def
+/PH 842 def
+/LM 78 def
+/TM 130 def
+/RM 47 def
+/BM 76 def
+/NH 10 def
+/NV 12 def
+/RW PW LM RM add sub NH div def
+/RH PH TM BM add sub NV div def
+/FS RW 3 mul 4 div def
+/AFS RW 1 mul 4 div def
+/unknowndef { exch dup where { pop pop pop } { exch def } ifelse } bind def
+/F (MKai-Medium) unknowndef
+/affix false unknowndef
+%/AF (MOESung-Regular) unknowndef
+%/AF (MOEKai-Regular) unknowndef
+/AF (MSung-Light) unknowndef
+%/AF (MHei-Medium) unknowndef
+/descent 130 unknowndef
+/glyphshow- false unknowndef
+/fss { exch /CIDFont findresource exch scalefont setfont } bind def
+/concats { % [str ...] concats str
+ () exch dup length 1 sub -1 0 {
+ 1 index exch get dup type /stringtype ne { dup length string cvs } if
+ 3 -1 roll exch dup length 2 index length add string
+ dup dup 4 2 roll copy length 4 -1 roll putinterval exch
+ } for pop
+} bind def
+/composefontname { % font cmap composefontname font--cmap
+ [ 2 index (--) 3 index ] concats dup 3 -1 roll [ 5 -1 roll ] composefont pop
+} bind def
+glyphshow- {
+ /I (Identity-H) unknowndef
+ /F F I composefontname def
+ affix { /AF AF I composefontname def } if
+ /fss { exch findfont exch scalefont setfont } bind def
+ /s 2 string def
+} if
+/glyphframe { % h oldx glyphframe -
+ gsave 0 setlinewidth
+ currentpoint pop sub exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/box { % llx lly urx ury box -
+ 3 index 3 index moveto exch 4 -1 roll sub 3 1 roll exch sub
+ currentpoint 4 -2 roll rectstroke
+} bind def
+/charframe { % h string charframe -
+ gsave 0 setlinewidth
+ stringwidth pop exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/pathframe { % string pathframe -
+ gsave 0 setlinewidth
+ true charpath flattenpath pathbbox box grestore
+} bind def
+/np {
+ /Helvetica findfont 11 scalefont setfont
+ LM BM 11 2 mul sub moveto title show ( - ) show F show
+ affix {
+ gsave /Helvetica findfont 5 scalefont setfont ( and ) show AF show grestore
+ } if
+ PW RM sub BM 11 2 mul sub moveto p 3 string cvs show
+ /p p 1 add def
+ showpage
+ /x LM def
+ /y PH TM sub def
+} bind def
+/nb {
+ /x x RW add def
+ x PW RM sub ge {
+ /x LM def
+ /y y RH sub def
+ y BM le {
+ np
+ /y PH TM sub def
+ } if
+ } if
+} bind def
+%%EndProlog
+/x LM def
+/y PH TM sub def
+/p 1 def
+[
+ %[0 14098] % Adobe-CNS1-0
+ %[0 17407] % Adobe-CNS1-0,1
+ %[0 17600] % Adobe-CNS1-0,1,2
+ %[0 18845] % Adobe-CNS1-0,1,2,3
+ [0 18961] % Adobe-CNS1-0,1,2,3,4
+] {
+ cvx exec 1 exch {
+ /id exch def
+ F FS fss
+ x y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ FS x glyphframe
+ } {
+ s 0 id 256 idiv put s 1 id 256 mod put
+ FS s charframe
+ s pathframe
+ s show
+ } ifelse
+ affix {
+ AF AFS fss
+ x FS add y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ AFS x FS add glyphframe
+ } {
+ AFS s charframe
+ s pathframe
+ s show
+ } ifelse
+ } if
+ %
+ /Times-Roman findfont 7 scalefont setfont
+ x y FS sub FS descent mul 1000 div sub 7 sub moveto
+ id 5 string cvs show
+ nb
+ } for
+ np
+} forall
+%%Trailer
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/all_ag1.ps b/Master/xemtex/doc/ghostscript/examples/cjk/all_ag1.ps
new file mode 100644
index 00000000000..26d8178959f
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/cjk/all_ag1.ps
@@ -0,0 +1,218 @@
+%!PS-Adobe-3.0
+%%Title: Adobe-GB1 CID-Keyed Fonts Character List
+%%Creator: Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%Copyright: (C) 2001 Taiji Yamada and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU General Public License. See the file COPYING
+%%+ for more information.
+%%Version: 1.0
+%
+% Usage:
+% gs [-sF=BousungEG-Light-GB] [-daffix [-sAF=STSong-Light]] \
+% [-dglyphshow- [-sI=Identity-H]] [-ddescent=200] all_ag1.ps
+%
+%%DocumentMedia: A4 595 842 0 white ()
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/*CIDFont*findresource {
+ dup /CIDFont resourcestatus { pop pop /CIDFont findresource } {
+ notice*page begin
+ *open
+ (Error in /CIDFont findresource: ) *echo-n dup *echo
+ *close
+ end
+ /CIDFont findresource
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+
+/title (Adobe-GB1 CID-Keyed Fonts Character List) def
+/PW 595 def
+/PH 842 def
+/LM 78 def
+/TM 130 def
+/RM 47 def
+/BM 76 def
+/NH 10 def
+/NV 12 def
+/RW PW LM RM add sub NH div def
+/RH PH TM BM add sub NV div def
+/FS RW 3 mul 4 div def
+/AFS RW 1 mul 4 div def
+/unknowndef { exch dup where { pop pop pop } { exch def } ifelse } bind def
+/F (STHeiti-Regular) unknowndef
+/affix false unknowndef
+/AF (STSong-Light) unknowndef
+/descent 130 unknowndef
+/glyphshow- false unknowndef
+/fss { exch *CIDFont*findresource exch scalefont setfont } bind def
+/concats { % [str ...] concats str
+ () exch dup length 1 sub -1 0 {
+ 1 index exch get dup type /stringtype ne { dup length string cvs } if
+ 3 -1 roll exch dup length 2 index length add string
+ dup dup 4 2 roll copy length 4 -1 roll putinterval exch
+ } for pop
+} bind def
+/composefontname { % font cmap composefontname font--cmap
+ [ 2 index (--) 3 index ] concats dup 3 -1 roll [ 5 -1 roll ] composefont pop
+} bind def
+glyphshow- {
+ /I (Identity-H) unknowndef
+ /F F I composefontname def
+ affix { /AF AF I composefontname def } if
+ /fss { exch *findfont exch scalefont setfont } bind def
+ /s 2 string def
+} if
+/glyphframe { % h oldx glyphframe -
+ gsave 0 setlinewidth
+ currentpoint pop sub exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/box { % llx lly urx ury box -
+ 3 index 3 index moveto exch 4 -1 roll sub 3 1 roll exch sub
+ currentpoint 4 -2 roll rectstroke
+} bind def
+/charframe { % h string charframe -
+ gsave 0 setlinewidth
+ stringwidth pop exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/pathframe { % string pathframe -
+ gsave 0 setlinewidth
+ true charpath flattenpath pathbbox box grestore
+} bind def
+/np {
+ /Helvetica findfont 11 scalefont setfont
+ LM BM 11 2 mul sub moveto title show ( - ) show F show
+ affix {
+ gsave /Helvetica findfont 5 scalefont setfont ( and ) show AF show grestore
+ } if
+ PW RM sub BM 11 2 mul sub moveto p 3 string cvs show
+ /p p 1 add def
+ showpage
+ /x LM def
+ /y PH TM sub def
+} bind def
+/nb {
+ /x x RW add def
+ x PW RM sub ge {
+ /x LM def
+ /y y RH sub def
+ y BM le {
+ np
+ /y PH TM sub def
+ } if
+ } if
+} bind def
+%%EndProlog
+/x LM def
+/y PH TM sub def
+/p 1 def
+[
+ %[0 7716] % Adobe-GB1-0
+ %[0 9896] % Adobe-GB1-0,1
+ %[0 22126] % Adobe-GB1-0,1,2
+ %[0 22352] % Adobe-GB1-0,1,2,3
+ [0 29063] % Adobe-GB1-0,1,2,3,4
+] {
+ cvx exec 1 exch {
+ /id exch def
+ F FS fss
+ x y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ FS x glyphframe
+ } {
+ s 0 id 256 idiv put s 1 id 256 mod put
+ FS s charframe
+ s pathframe
+ s show
+ } ifelse
+ affix {
+ AF AFS fss
+ x FS add y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ AFS x FS add glyphframe
+ } {
+ AFS s charframe
+ s pathframe
+ s show
+ } ifelse
+ } if
+ %
+ /Times-Roman findfont 7 scalefont setfont
+ x y FS sub FS descent mul 1000 div sub 7 sub moveto
+ id 5 string cvs show
+ nb
+ } for
+ np
+} forall
+%%Trailer
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/all_aj1.ps b/Master/xemtex/doc/ghostscript/examples/cjk/all_aj1.ps
new file mode 100644
index 00000000000..9dd2f4d3d5c
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/cjk/all_aj1.ps
@@ -0,0 +1,218 @@
+%!PS-Adobe-3.0
+%%Title: Adobe-Japan1 CID-Keyed Fonts Character List
+%%Creator: Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%Copyright: (C) 2001 Taiji Yamada and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU General Public License. See the file COPYING
+%%+ for more information.
+%%Version: 1.0
+%
+% Usage:
+% gs [-sF=WadaMin-Regular] [-daffix [-sAF=HeiseiMin-W3]] \
+% [-dglyphshow- [-sI=Identity-H]] [-ddescent=200] all_aj1.ps
+%
+%%DocumentMedia: A4 595 842 0 white ()
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/*CIDFont*findresource {
+ dup /CIDFont resourcestatus { pop pop /CIDFont findresource } {
+ notice*page begin
+ *open
+ (Error in /CIDFont findresource: ) *echo-n dup *echo
+ *close
+ end
+ /CIDFont findresource
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+
+/title (Adobe-Japan1 CID-Keyed Fonts Character List) def
+/PW 595 def
+/PH 842 def
+/LM 78 def
+/TM 130 def
+/RM 47 def
+/BM 76 def
+/NH 10 def
+/NV 12 def
+/RW PW LM RM add sub NH div def
+/RH PH TM BM add sub NV div def
+/FS RW 3 mul 4 div def
+/AFS RW 1 mul 4 div def
+/unknowndef { exch dup where { pop pop pop } { exch def } ifelse } bind def
+/F (HeiseiKakuGo-W5) unknowndef
+/affix false unknowndef
+/AF (HeiseiMin-W3) unknowndef
+/descent 130 unknowndef
+/glyphshow- false unknowndef
+/fss { exch *CIDFont*findresource exch scalefont setfont } bind def
+/concats { % [str ...] concats str
+ () exch dup length 1 sub -1 0 {
+ 1 index exch get dup type /stringtype ne { dup length string cvs } if
+ 3 -1 roll exch dup length 2 index length add string
+ dup dup 4 2 roll copy length 4 -1 roll putinterval exch
+ } for pop
+} bind def
+/composefontname { % font cmap composefontname font--cmap
+ [ 2 index (--) 3 index ] concats dup 3 -1 roll [ 5 -1 roll ] composefont pop
+} bind def
+glyphshow- {
+ /I (Identity-H) unknowndef
+ /F F I composefontname def
+ affix { /AF AF I composefontname def } if
+ /fss { exch *findfont exch scalefont setfont } bind def
+ /s 2 string def
+} if
+/glyphframe { % h oldx glyphframe -
+ gsave 0 setlinewidth
+ currentpoint pop sub exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/box { % llx lly urx ury box -
+ 3 index 3 index moveto exch 4 -1 roll sub 3 1 roll exch sub
+ currentpoint 4 -2 roll rectstroke
+} bind def
+/charframe { % h string charframe -
+ gsave 0 setlinewidth
+ stringwidth pop exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/pathframe { % string pathframe -
+ gsave 0 setlinewidth
+ true charpath flattenpath pathbbox box grestore
+} bind def
+/np {
+ /Helvetica findfont 11 scalefont setfont
+ LM BM 11 2 mul sub moveto title show ( - ) show F show
+ affix {
+ gsave /Helvetica findfont 5 scalefont setfont ( and ) show AF show grestore
+ } if
+ PW RM sub BM 11 2 mul sub moveto p 3 string cvs show
+ /p p 1 add def
+ showpage
+ /x LM def
+ /y PH TM sub def
+} bind def
+/nb {
+ /x x RW add def
+ x PW RM sub ge {
+ /x LM def
+ /y y RH sub def
+ y BM le {
+ np
+ /y PH TM sub def
+ } if
+ } if
+} bind def
+%%EndProlog
+/x LM def
+/y PH TM sub def
+/p 1 def
+[
+ [0 8283] % Adobe-Japan1-0
+ [8284 8358] % Adobe-Japan1-1
+ [8359 8719] % Adobe-Japan1-2
+ [8720 9353] % Adobe-Japan1-3
+ [9354 15443] % Adobe-Japan1-4
+] {
+ cvx exec 1 exch {
+ /id exch def
+ F FS fss
+ x y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ FS x glyphframe
+ } {
+ s 0 id 256 idiv put s 1 id 256 mod put
+ FS s charframe
+ s pathframe
+ s show
+ } ifelse
+ affix {
+ AF AFS fss
+ x FS add y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ AFS x FS add glyphframe
+ } {
+ AFS s charframe
+ s pathframe
+ s show
+ } ifelse
+ } if
+ %
+ /Times-Roman findfont 7 scalefont setfont
+ x y FS sub FS descent mul 1000 div sub 7 sub moveto
+ id 5 string cvs show
+ nb
+ } for
+ np
+} forall
+%%Trailer
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/all_aj2.ps b/Master/xemtex/doc/ghostscript/examples/cjk/all_aj2.ps
new file mode 100644
index 00000000000..7e6019eb83b
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/cjk/all_aj2.ps
@@ -0,0 +1,214 @@
+%!PS-Adobe-3.0
+%%Title: Adobe-Japan2 CID-Keyed Fonts Character List
+%%Creator: Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%Copyright: (C) 2001 Taiji Yamada and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU General Public License. See the file COPYING
+%%+ for more information.
+%%Version: 1.0
+%
+% Usage:
+% gs [-sF=HeiseiMin-W3H] [-daffix [-sAF=WadaMin-RegularH]] \
+% [-dglyphshow- [-sI=Identity-H]] [-ddescent=200] all_aj2.ps
+%
+%%DocumentMedia: A4 595 842 0 white ()
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/*CIDFont*findresource {
+ dup /CIDFont resourcestatus { pop pop /CIDFont findresource } {
+ notice*page begin
+ *open
+ (Error in /CIDFont findresource: ) *echo-n dup *echo
+ *close
+ end
+ /CIDFont findresource
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+
+/title (Adobe-Japan2 CID-Keyed Fonts Character List) def
+/PW 595 def
+/PH 842 def
+/LM 78 def
+/TM 130 def
+/RM 47 def
+/BM 76 def
+/NH 10 def
+/NV 12 def
+/RW PW LM RM add sub NH div def
+/RH PH TM BM add sub NV div def
+/FS RW 3 mul 4 div def
+/AFS RW 1 mul 4 div def
+/unknowndef { exch dup where { pop pop pop } { exch def } ifelse } bind def
+/F (WadaMin-RegularH) unknowndef
+/affix false unknowndef
+/AF (HeiseiMin-W3H) unknowndef
+/descent 130 unknowndef
+/glyphshow- false unknowndef
+/fss { exch *CIDFont*findresource exch scalefont setfont } bind def
+/concats { % [str ...] concats str
+ () exch dup length 1 sub -1 0 {
+ 1 index exch get dup type /stringtype ne { dup length string cvs } if
+ 3 -1 roll exch dup length 2 index length add string
+ dup dup 4 2 roll copy length 4 -1 roll putinterval exch
+ } for pop
+} bind def
+/composefontname { % font cmap composefontname font--cmap
+ [ 2 index (--) 3 index ] concats dup 3 -1 roll [ 5 -1 roll ] composefont pop
+} bind def
+glyphshow- {
+ /I (Identity-H) unknowndef
+ /F F I composefontname def
+ affix { /AF AF I composefontname def } if
+ /fss { exch *findfont exch scalefont setfont } bind def
+ /s 2 string def
+} if
+/glyphframe { % h oldx glyphframe -
+ gsave 0 setlinewidth
+ currentpoint pop sub exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/box { % llx lly urx ury box -
+ 3 index 3 index moveto exch 4 -1 roll sub 3 1 roll exch sub
+ currentpoint 4 -2 roll rectstroke
+} bind def
+/charframe { % h string charframe -
+ gsave 0 setlinewidth
+ stringwidth pop exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/pathframe { % string pathframe -
+ gsave 0 setlinewidth
+ true charpath flattenpath pathbbox box grestore
+} bind def
+/np {
+ /Helvetica findfont 11 scalefont setfont
+ LM BM 11 2 mul sub moveto title show ( - ) show F show
+ affix {
+ gsave /Helvetica findfont 5 scalefont setfont ( and ) show AF show grestore
+ } if
+ PW RM sub BM 11 2 mul sub moveto p 3 string cvs show
+ /p p 1 add def
+ showpage
+ /x LM def
+ /y PH TM sub def
+} bind def
+/nb {
+ /x x RW add def
+ x PW RM sub ge {
+ /x LM def
+ /y y RH sub def
+ y BM le {
+ np
+ /y PH TM sub def
+ } if
+ } if
+} bind def
+%%EndProlog
+/x LM def
+/y PH TM sub def
+/p 1 def
+[
+ [0 6067] % Adobe-Japan2-0
+] {
+ cvx exec 1 exch {
+ /id exch def
+ F FS fss
+ x y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ FS x glyphframe
+ } {
+ s 0 id 256 idiv put s 1 id 256 mod put
+ FS s charframe
+ s pathframe
+ s show
+ } ifelse
+ affix {
+ AF AFS fss
+ x FS add y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ AFS x FS add glyphframe
+ } {
+ AFS s charframe
+ s pathframe
+ s show
+ } ifelse
+ } if
+ %
+ /Times-Roman findfont 7 scalefont setfont
+ x y FS sub FS descent mul 1000 div sub 7 sub moveto
+ id 5 string cvs show
+ nb
+ } for
+ np
+} forall
+%%Trailer
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/all_ak1.ps b/Master/xemtex/doc/ghostscript/examples/cjk/all_ak1.ps
new file mode 100644
index 00000000000..b3e138e7381
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/cjk/all_ak1.ps
@@ -0,0 +1,215 @@
+%!PS-Adobe-3.0
+%%Title: Adobe-Korea1 CID-Keyed Fonts Character List
+%%Creator: Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%Copyright: (C) 2001 Taiji Yamada and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU General Public License. See the file COPYING
+%%+ for more information.
+%%Version: 1.0
+%
+% Usage:
+% gs [-sF=MunhwaGothic-Regular] [-daffix [-sAF=HYGoThic-Medium]] \
+% [-dglyphshow- [-sI=Identity-H]] [-ddescent=200] all_ak1.ps
+%
+%%DocumentMedia: A4 595 842 0 white ()
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/*CIDFont*findresource {
+ dup /CIDFont resourcestatus { pop pop /CIDFont findresource } {
+ notice*page begin
+ *open
+ (Error in /CIDFont findresource: ) *echo-n dup *echo
+ *close
+ end
+ /CIDFont findresource
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+
+/title (Adobe-Korea1 CID-Keyed Fonts Character List) def
+/PW 595 def
+/PH 842 def
+/LM 78 def
+/TM 130 def
+/RM 47 def
+/BM 76 def
+/NH 10 def
+/NV 12 def
+/RW PW LM RM add sub NH div def
+/RH PH TM BM add sub NV div def
+/FS RW 3 mul 4 div def
+/AFS RW 1 mul 4 div def
+/unknowndef { exch dup where { pop pop pop } { exch def } ifelse } bind def
+/F (HYGoThic-Medium) unknowndef
+/affix false unknowndef
+/AF (HYSMyeongJo-Medium) unknowndef
+/descent 130 unknowndef
+/glyphshow- false unknowndef
+/fss { exch *CIDFont*findresource exch scalefont setfont } bind def
+/concats { % [str ...] concats str
+ () exch dup length 1 sub -1 0 {
+ 1 index exch get dup type /stringtype ne { dup length string cvs } if
+ 3 -1 roll exch dup length 2 index length add string
+ dup dup 4 2 roll copy length 4 -1 roll putinterval exch
+ } for pop
+} bind def
+/composefontname { % font cmap composefontname font--cmap
+ [ 2 index (--) 3 index ] concats dup 3 -1 roll [ 5 -1 roll ] composefont pop
+} bind def
+glyphshow- {
+ /I (Identity-H) unknowndef
+ /F F I composefontname def
+ affix { /AF AF I composefontname def } if
+ /fss { exch *findfont exch scalefont setfont } bind def
+ /s 2 string def
+} if
+/glyphframe { % h oldx glyphframe -
+ gsave 0 setlinewidth
+ currentpoint pop sub exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/box { % llx lly urx ury box -
+ 3 index 3 index moveto exch 4 -1 roll sub 3 1 roll exch sub
+ currentpoint 4 -2 roll rectstroke
+} bind def
+/charframe { % h string charframe -
+ gsave 0 setlinewidth
+ stringwidth pop exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/pathframe { % string pathframe -
+ gsave 0 setlinewidth
+ true charpath flattenpath pathbbox box grestore
+} bind def
+/np {
+ /Helvetica findfont 11 scalefont setfont
+ LM BM 11 2 mul sub moveto title show ( - ) show F show
+ affix {
+ gsave /Helvetica findfont 5 scalefont setfont ( and ) show AF show grestore
+ } if
+ PW RM sub BM 11 2 mul sub moveto p 3 string cvs show
+ /p p 1 add def
+ showpage
+ /x LM def
+ /y PH TM sub def
+} bind def
+/nb {
+ /x x RW add def
+ x PW RM sub ge {
+ /x LM def
+ /y y RH sub def
+ y BM le {
+ np
+ /y PH TM sub def
+ } if
+ } if
+} bind def
+%%EndProlog
+/x LM def
+/y PH TM sub def
+/p 1 def
+[
+ [0 9332] % Adobe-Korea1-0
+ [9333 18351] % Adobe-Korea1-1,2
+] {
+ cvx exec 1 exch {
+ /id exch def
+ F FS fss
+ x y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ FS x glyphframe
+ } {
+ s 0 id 256 idiv put s 1 id 256 mod put
+ FS s charframe
+ s pathframe
+ s show
+ } ifelse
+ affix {
+ AF AFS fss
+ x FS add y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ AFS x FS add glyphframe
+ } {
+ AFS s charframe
+ s pathframe
+ s show
+ } ifelse
+ } if
+ %
+ /Times-Roman findfont 7 scalefont setfont
+ x y FS sub FS descent mul 1000 div sub 7 sub moveto
+ id 5 string cvs show
+ nb
+ } for
+ np
+} forall
+%%Trailer
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ac.ps b/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ac.ps
new file mode 100644
index 00000000000..dfc6230bd93
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ac.ps
@@ -0,0 +1,120 @@
+%!PS-Adobe-3.0
+%%Title: chinese-big5 encoding
+%%Creator: Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%Copyright: (C) 2001 Taiji Yamada and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU General Public License. See the file COPYING
+%%+ for more information.
+%%BoundingBox: 30 150 530 650
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+%%EndProlog
+/MSung-Light--B5-V *findfont 25 scalefont setfont
+500 625 moveto
+(ÆFµ§¤¤¤åÁcÅé¦rª½¼g¦L¨ê) show
+/MSung-Light--B5-H *findfont 25 scalefont setfont
+50 600 moveto
+(ÆFµ§ Ghostscript) show
+50 550 moveto
+(¤¤¤åÁcÅé¦r Traditional Chinese) show
+50 500 moveto
+(¾î¼g horizontal writing) show
+50 450 moveto
+(¦L¨ê Print) show
+%
+/MSung-Light--B5-V *findfont [ 1 .3 0 1 0 0 ] makefont 20 scalefont setfont
+100 275 moveto 20 2 div 0 rmoveto
+(±×Åé) dup stringwidth neg rmoveto show
+/MSung-Light--B5-H *findfont [ 1 0 .3 1 0 0 ] makefont 20 scalefont setfont
+100 250 moveto
+(±×Åé Italic transformation) show
+%
+/MSung-Light--B5-H *findfont 20 scalefont setfont
+150 400 moveto
+(Sung Typeface §ºÅé) show
+/MSung-Medium--B5-H *findfont 20 scalefont setfont
+150 375 moveto
+(Sung Medium Typeface ¤¤§ºÅé) show
+/MHei-Medium--B5-H *findfont 20 scalefont setfont
+150 350 moveto
+(Hei Typeface ¶ÂÅé) show
+/MKai-Medium--B5-H *findfont 20 scalefont setfont
+150 325 moveto
+(Kai Typeface ´{Åé) show
+%
+/Times-Roman findfont 13 scalefont setfont
+50 200 moveto
+(* Chinese translation of "Ghostscript" is merely associative \
+characters of these meanings.) show
+50 200 13 sub moveto
+(In Traditional Chinese articles, customarily we use just \
+"Ghostscript" as it is.) show
+showpage
+%%Trailer
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ag.ps b/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ag.ps
new file mode 100644
index 00000000000..02568b64f8d
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ag.ps
@@ -0,0 +1,120 @@
+%!PS-Adobe-3.0
+%%Title: euc-china encoding
+%%Creator: Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%Copyright: (C) 2001 Taiji Yamada and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU General Public License. See the file COPYING
+%%+ for more information.
+%%BoundingBox: 30 150 530 650
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+%%EndProlog
+/STSong-Light--GB-EUC-V *findfont 25 scalefont setfont
+500 625 moveto
+(Áé±ÊÖÐÎļòÌå×Öֱдӡˢ) show
+/STSong-Light--GB-EUC-H *findfont 25 scalefont setfont
+50 600 moveto
+(Áé±Ê Ghostscript) show
+50 550 moveto
+(ÖÐÎļòÌå×Ö Simplified Chinese) show
+50 500 moveto
+(ºáд horizontal writing) show
+50 450 moveto
+(Ó¡Ë¢ Print) show
+%
+/STSong-Light--GB-EUC-V *findfont [ 1 .3 0 1 0 0 ] makefont 20 scalefont setfont
+100 275 moveto 20 2 div 0 rmoveto
+(бÌå) dup stringwidth neg rmoveto show
+/STSong-Light--GB-EUC-H *findfont [ 1 0 .3 1 0 0 ] makefont 20 scalefont setfont
+100 250 moveto
+(бÌå Italic transformation) show
+%
+/STSong-Light--GB-EUC-H *findfont 20 scalefont setfont
+150 400 moveto
+(Song Typeface ËÎÌå) show
+/STFangsong-Light--GB-EUC-H *findfont 20 scalefont setfont
+150 375 moveto
+(Fangsong Typeface ·ÂËÎÌå) show
+/STHeiti-Regular--GB-EUC-H *findfont 20 scalefont setfont
+150 350 moveto
+(Hei Typeface ºÚÌå) show
+/STKaiti-Regular--GB-EUC-H *findfont 20 scalefont setfont
+150 325 moveto
+(Kai Typeface ¿«Ìå) show
+%
+/Times-Roman findfont 13 scalefont setfont
+50 200 moveto
+(* Chinese translation of "Ghostscript" is merely associative \
+characters of these meanings.) show
+50 200 13 sub moveto
+(In Simplified Chinese articles, customarily we use just "Ghostscript" \
+as it is.) show
+showpage
+%%Trailer
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_aj.ps b/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_aj.ps
new file mode 100644
index 00000000000..42d98bcdbb1
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_aj.ps
@@ -0,0 +1,114 @@
+%!PS-Adobe-3.0
+%%Title: japanese-shift-jis encoding
+%%Creator: Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%Copyright: (C) 2001 Taiji Yamada and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU General Public License. See the file COPYING
+%%+ for more information.
+%%BoundingBox: 30 150 530 650
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+%%EndProlog
+/Ryumin-Light-RKSJ-V *findfont 25 scalefont setfont
+500 625 moveto
+(—ì•M “ú–{Œê c‘‚« ˆóü) show
+/Ryumin-Light-RKSJ-H *findfont 25 scalefont setfont
+50 600 moveto
+(—ì•M Ghostscript) show
+50 550 moveto
+(“ú–{Œê Japanese) show
+50 500 moveto
+(‰¡‘‚« horizontal writing) show
+50 450 moveto
+(ˆóü Print) show
+%
+/Ryumin-Light-RKSJ-V *findfont [ 1 .3 0 1 0 0 ] makefont 20 scalefont setfont
+100 275 moveto 20 2 div 0 rmoveto
+(ŽÎ‘Ì) dup stringwidth neg rmoveto show
+/Ryumin-Light-RKSJ-H *findfont [ 1 0 .3 1 0 0 ] makefont 20 scalefont setfont
+100 250 moveto
+(ŽÎ‘Ì Italic transformation) show
+%
+/Ryumin-Light-RKSJ-H *findfont 20 scalefont setfont
+150 400 moveto
+(Mincho Typeface –¾’©‘Ì) show
+/GothicBBB-Medium-RKSJ-H *findfont 20 scalefont setfont
+150 375 moveto
+(Gothic Typeface ƒSƒVƒbƒN‘Ì) show
+%
+/Times-Roman findfont 13 scalefont setfont
+50 200 moveto
+(* Japanese translation of "Ghostscript" is merely associative \
+characters of these meanings.) show
+50 200 13 sub moveto
+(In Japanese articles, customarily we use just "Ghostscript" as it \
+is.) show
+showpage
+%%Trailer
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ak.ps b/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ak.ps
new file mode 100644
index 00000000000..78ce81876b2
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ak.ps
@@ -0,0 +1,116 @@
+%!PS-Adobe-3.0
+%%Title: euc-korea encoding
+%%Creator: Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%Copyright: (C) 2001 Taiji Yamada and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU General Public License. See the file COPYING
+%%+ for more information.
+%%BoundingBox: 30 150 530 650
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+%%EndProlog
+/HYSMyeongJo-Medium--KSC-EUC-V *findfont 25 scalefont setfont
+500 625 moveto
+(ÖÄù¶ Çѱ¹¾î ¼¼·Î¾²±â Àμâ) show
+/HYSMyeongJo-Medium--KSC-EUC-H *findfont 25 scalefont setfont
+50 600 moveto
+(ÖÄù¶ Ghostscript) show
+50 550 moveto
+(Çѱ¹¾î Korean) show
+50 500 moveto
+(°¡·Î¾²±â horizontal writing) show
+50 450 moveto
+(Àμâ Print) show
+%
+/HYSMyeongJo-Medium--KSC-EUC-V *findfont [ 1 .3 0 1 0 0 ] makefont 20 scalefont setfont
+100 275 moveto 20 2 div 0 rmoveto
+(±â¿ïÀÓ²Ã) dup stringwidth neg rmoveto show
+/HYSMyeongJo-Medium--KSC-EUC-H *findfont [ 1 0 .3 1 0 0 ] makefont 20 scalefont setfont
+100 250 moveto
+(±â¿ïÀӲà Italic transformation) show
+%
+/HYSMyeongJo-Medium--KSC-EUC-H *findfont 20 scalefont setfont
+150 400 moveto
+(MyeongJo Typeface ¸íÁ¶) show
+/HYGoThic-Medium--KSC-EUC-H *findfont 20 scalefont setfont
+150 375 moveto
+(Gothic Typeface °íµñ) show
+/HYRGoThic-Medium--KSC-EUC-H *findfont 20 scalefont setfont
+150 350 moveto
+(Rounded Gothic Typeface µÕ±Ù°íµñ) show
+%
+/Times-Roman findfont 13 scalefont setfont
+50 200 moveto
+(* Korean translation of "Ghostscript" is merely associative \
+characters of these meanings.) show
+50 200 13 sub moveto
+(In Korean articles, customarily we use just "Ghostscript" as it is.) show
+showpage
+%%Trailer
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/iso2022.ps b/Master/xemtex/doc/ghostscript/examples/cjk/iso2022.ps
new file mode 100644
index 00000000000..9edb39bd6c5
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/cjk/iso2022.ps
@@ -0,0 +1,1256 @@
+%!PS-Adobe-3.0
+%%Creator: tops by Taiji Yamada <taiji@aihara.co.jp>
+%%Copyright: 2001 Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU GPL. See the file COPYING for more information.
+%%+ It is also part of tops, a text filter into PostScript for various
+%%+ languages. To get it, visit http://www.aihara.co.jp/~taiji/tops/#tops
+%%DocumentData: Clean7Bit
+%%DocumentMedia: A4 595 842 0 white ()
+%%Extensions: Composite
+%%Orientation: Portrait
+%%Title: iso-2022-7bit - Emacs/Mule editable PostScript file
+%%Version: 1.0
+%
+% Usage:
+% gs [-dverttext] iso2022.ps
+%
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+
+/unknowndef { exch dup where { pop pop pop } { exch def } ifelse } bind def
+
+/ISOLatin1Encoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOLatin1Encoding)
+%%EndComments
+/ISOLatin1Encoding [ % iso-8859-1
+% 0x00
+/.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
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/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
+% 0x60
+/grave/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
+% 0x80
+/.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
+% 0xa0
+/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
+% 0xc0
+/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
+% 0xe0
+/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
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/ISOLatin2Encoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOLatin2Encoding)
+%%EndComments
+/ISOLatin2Encoding [ % iso-8859-2
+% 0x00
+/.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
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/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
+% 0x60
+/grave/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
+% 0x80
+/.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
+% 0xa0
+/space/Aogonek/breve/Lslash/currency/Lcaron/Sacute/section
+/dieresis/Scaron/Scedilla/Tcaron/Zacute/hyphen/Zcaron/Zdotaccent
+/degree/aogonek/ogonek/lslash/acute/lcaron/sacute/caron
+/cedilla/scaron/scedilla/tcaron/zacute/hungarumlaut/zcaron/zdotaccent
+% 0xc0
+/Racute/Aacute/Acircumflex/Abreve/Adieresis/Lacute/Cacute/Ccedilla
+/Ccaron/Eacute/Eogonek/Edieresis/Ecaron/Iacute/Icircumflex/Dcaron
+/Dcroat/Nacute/Ncaron/Oacute/Ocircumflex/Ohungarumlaut/Odieresis/multiply
+/Rcaron/Uring/Uacute/Uhungarumlaut/Udieresis/Yacute/Tcommaaccent/germandbls
+% 0xe0
+/racute/aacute/acircumflex/abreve/adieresis/lacute/cacute/ccedilla
+/ccaron/eacute/eogonek/edieresis/ecaron/iacute/icircumflex/dcaron
+/dcroat/nacute/ncaron/oacute/ocircumflex/ohungarumlaut/odieresis/divide
+/rcaron/uring/uacute/uhungarumlaut/udieresis/yacute/tcommaaccent/dotaccent
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/ISOLatin3Encoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOLatin3Encoding)
+%%EndComments
+/ISOLatin3Encoding [ % iso-8859-3
+% 0x00
+/.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
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/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
+% 0x60
+/grave/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
+% 0x80
+/.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
+% 0xa0
+/space/Hbar/breve/sterling/currency/.notdef/Hcircumflex/section
+/dieresis/Idotaccent/Scedilla/Gbreve/Jcircumflex/hyphen/.notdef/Zdotaccent
+/degree/hbar/twosuperior/threesuperior/acute/mu/hcircumflex/periodcentered
+/cedilla/dotlessi/scedilla/gbreve/jcircumflex/onehalf/.notdef/zdotaccent
+% 0xc0
+/Agrave/Aacute/Acircumflex/.notdef/Adieresis/Cdotaccent/Ccircumflex/Ccedilla
+/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+/.notdef/Ntilde/Ograve/Oacute/Ocircumflex/Gdotaccent/Odieresis/multiply
+/Gcircumflex/Ugrave/Uacute/Ucircumflex/Udieresis/Ubreve/Scircumflex/germandbls
+% 0xe0
+/agrave/aacute/acircumflex/.notdef/adieresis/cdotaccent/ccircumflex/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/.notdef/ntilde/ograve/oacute/ocircumflex/gdotaccent/odieresis/divide
+/gcircumflex/ugrave/uacute/ucircumflex/udieresis/ubreve/scircumflex/dotaccent
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/ISOLatin4Encoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOLatin4Encoding)
+%%EndComments
+/ISOLatin4Encoding [ % iso-8859-4
+% 0x00
+/.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
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/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
+% 0x60
+/grave/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
+% 0x80
+/.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
+% 0xa0
+/space/Aogonek/kgreenlandic/Rcommaaccent/currency/Itilde/Lcommaaccent/section
+/dieresis/Scaron/Emacron/Gcommaaccent/Tbar/hyphen/Zcaron/macron
+/degree/aogonek/ogonek/rcommaaccent/acute/itilde/lcommaaccent/caron
+/cedilla/scaron/emacron/gcommaaccent/tbar/Eng/zcaron/eng
+% 0xc0
+/Amacron/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Iogonek
+/Ccaron/Eacute/Eogonek/Edieresis/Edotaccent/Iacute/Icircumflex/Imacron
+/Dcroat/Ncommaaccent/Omacron/Kcommaaccent/Ocircumflex/Otilde/Odieresis/multiply
+/Oslash/Uogonek/Uacute/Ucircumflex/Udieresis/Utilde/Umacron/germandbls
+% 0xe0
+/amacron/aacute/acircumflex/atilde/adieresis/aring/ae/iogonek
+/ccaron/eacute/eogonek/edieresis/edotaccent/iacute/icircumflex/imacron
+/dcroat/ncommaaccent/omacron/kcommaaccent/ocircumflex/otilde/odieresis/divide
+/oslash/uogonek/uacute/ucircumflex/udieresis/utilde/umacron/dotaccent
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/ISOCyrillicEncoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOCyrillicEncoding)
+%%EndComments
+/ISOCyrillicEncoding [ % iso-8859-5
+% 0x00
+/.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
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/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
+% 0x60
+/grave/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
+% 0x80
+/.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
+% 0xa0
+/space/afii10023/afii10051/afii10052/afii10053/afii10054/afii10055/afii10056
+/afii10057/afii10058/afii10059/afii10060/afii10061/hyphen/afii10062/afii10145
+/afii10017/afii10018/afii10019/afii10020/afii10021/afii10022/afii10024/afii10025
+/afii10026/afii10027/afii10028/afii10029/afii10030/afii10031/afii10032/afii10033
+% 0xc0
+/afii10034/afii10035/afii10036/afii10037/afii10038/afii10039/afii10040/afii10041
+/afii10042/afii10043/afii10044/afii10045/afii10046/afii10047/afii10048/afii10049
+/afii10065/afii10066/afii10067/afii10068/afii10069/afii10070/afii10072/afii10073
+/afii10074/afii10075/afii10076/afii10077/afii10078/afii10079/afii10080/afii10081
+% 0xe0
+/afii10082/afii10083/afii10084/afii10085/afii10086/afii10087/afii10088/afii10089
+/afii10090/afii10091/afii10092/afii10093/afii10094/afii10095/afii10096/afii10097
+/afii61352/afii10071/afii10099/afii10100/afii10101/afii10102/afii10103/afii10104
+/afii10105/afii10106/afii10107/afii10108/afii10109/section/afii10110/afii10193
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/ISOGreekEncoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOGreekEncoding)
+%%EndComments
+/ISOGreekEncoding [ % iso-8859-7
+% 0x00
+/.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
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/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
+% 0x60
+/grave/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
+% 0x80
+/.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
+% 0xa0
+/space/quoteleft/quoteright/sterling/.notdef/.notdef/brokenbar/section
+/dieresis/copyright/.notdef/guillemotleft/logicalnot/hyphen/.notdef/afii00208
+/degree/plusminus/twosuperior/threesuperior/tonos/dieresistonos/Alphatonos/periodcentered
+/Epsilontonos/Etatonos/Iotatonos/guillemotright/Omicrontonos/onehalf/Upsilontonos/Omegatonos
+% 0xc0
+/iotadieresistonos/Alpha/Beta/Gamma/Delta/Epsilon/Zeta/Eta
+/Theta/Iota/Kappa/Lambda/Mu/Nu/Xi/Omicron
+/Pi/Rho/.notdef/Sigma/Tau/Upsilon/Phi/Chi
+/Psi/Omega/Iotadieresis/Upsilondieresis/alphatonos/epsilontonos/etatonos/iotatonos
+% 0xe0
+/upsilondieresistonos/alpha/beta/gamma/delta/epsilon/zeta/eta
+/theta/iota/kappa/lambda/mu/nu/xi/omicron
+/pi/rho/sigma1/sigma/tau/upsilon/phi/chi
+/psi/omega/iotadieresis/upsilondieresis/omicrontonos/upsilontonos/omegatonos/.notdef
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/ISOLatin5Encoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOLatin5Encoding)
+%%EndComments
+/ISOLatin5Encoding [ % iso-8859-9
+% 0x00
+/.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
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/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
+% 0x60
+/grave/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
+% 0x80
+/.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
+% 0xa0
+/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
+% 0xc0
+/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+/Gbreve/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
+/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Idotaccent/Scedilla/germandbls
+% 0xe0
+/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/gbreve/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
+/oslash/ugrave/uacute/ucircumflex/udieresis/dotlessi/scedilla/ydieresis
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/ISOLatin6Encoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOLatin6Encoding)
+%%EndComments
+/ISOLatin6Encoding [ % iso-8859-10
+% 0x00
+/.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
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/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
+% 0x60
+/grave/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
+% 0x80
+/.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
+% 0xa0
+/space/Aogonek/Emacron/Gcommaaccent/Imacron/Itilde/Kcommaaccent/section
+/Lcommaaccent/Dcroat/Scaron/Tbar/Zcaron/hyphen/Umacron/Eng
+/degree/aogonek/emacron/gcommaaccent/imacron/itilde/kcommaaccent/periodcentered
+/lcommaaccent/dcroat/scaron/tbar/zcaron/afii00208/umacron/eng
+% 0xc0
+/Amacron/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Iogonek
+/Ccaron/Eacute/Eogonek/Edieresis/Edotaccent/Iacute/Icircumflex/Idieresis
+/Eth/Ncommaaccent/Omacron/Oacute/Ocircumflex/Otilde/Odieresis/Utilde
+/Oslash/Uogonek/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
+% 0xe0
+/amacron/aacute/acircumflex/atilde/adieresis/aring/ae/iogonek
+/ccaron/eacute/eogonek/edieresis/edotaccent/iacute/icircumflex/idieresis
+/eth/ncommaaccent/omacron/oacute/ocircumflex/otilde/odieresis/utilde
+/oslash/uogonek/uacute/ucircumflex/udieresis/yacute/thorn/kgreenlandic
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/ISOLatin7Encoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOLatin7Encoding)
+%%EndComments
+/ISOLatin7Encoding [ % iso-8859-13
+% 0x00
+/.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
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/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
+% 0x60
+/grave/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
+% 0x80
+/.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
+% 0xa0
+/space/quotedblright/cent/sterling/currency/quotedblbase/brokenbar/section
+/Oslash/copyright/Rcommaaccent/guillemotleft/logicalnot/hyphen/registered/AE
+/degree/plusminus/twosuperior/threesuperior/quotedblleft/mu/paragraph/periodcentered
+/oslash/onesuperior/rcommaaccent/guillemotright/onequarter/onehalf/threequarters/ae
+% 0xc0
+/Aogonek/Iogonek/Amacron/Cacute/Adieresis/Aring/Eogonek/Emacron
+/Ccaron/Eacute/Zacute/Edotaccent/Gcommaaccent/Kcommaaccent/Imacron/Lcommaaccent
+/Scaron/Nacute/Ncommaaccent/Oacute/Omacron/Otilde/Odieresis/multiply
+/Uogonek/Lslash/Sacute/Umacron/Udieresis/Zdotaccent/Zcaron/germandbls
+% 0xe0
+/aogonek/iogonek/amacron/cacute/adieresis/aring/eogonek/emacron
+/ccaron/eacute/zacute/edotaccent/gcommaaccent/kcommaaccent/imacron/lcommaaccent
+/scaron/nacute/ncommaaccent/oacute/omacron/otilde/odieresis/divide
+/uogonek/lslash/sacute/umacron/udieresis/zdotaccent/zcaron/quoteright
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/ISOLatin9Encoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOLatin9Encoding)
+%%EndComments
+/ISOLatin9Encoding [ % iso-8859-15
+% 0x00
+/.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
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/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
+% 0x60
+/grave/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
+% 0x80
+/.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
+% 0xa0
+/space/exclamdown/cent/sterling/Euro/yen/Scaron/section
+/scaron/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
+/degree/plusminus/twosuperior/threesuperior/Zcaron/mu/paragraph/periodcentered
+/zcaron/onesuperior/ordmasculine/guillemotright/OE/oe/Ydieresis/questiondown
+% 0xc0
+/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
+% 0xe0
+/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
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/reencode-font { % fontname font encoding reencode-font font
+ exch dup type dup /nametype eq exch /stringtype eq or { findfont } if
+ dup length dict begin
+ {
+ 1 index /FID ne 2 index /UniqueID ne and { def } { pop pop } ifelse
+ } forall
+ /Encoding exch dup type /nametype eq { /Encoding findresource } if def
+ dup /FontName exch def
+ currentdict
+ end
+ definefont
+} bind def
+
+/vertical-font { % fontname font vertical-font font
+ dup type dup /nametype eq exch /stringtype eq or { *findfont } if
+ dup length 1 add dict begin {
+ 1 index /FontName eq { pop 1 index def } {
+ 1 index /FID ne 2 index /UniqueID ne and { def } { pop pop } ifelse
+ } ifelse
+ } forall /WMode 1 def currentdict end
+ definefont
+} bind def
+
+%
+% fontname [font ...] compose-fontset font
+%
+% References:
+% [1] kanno@jn1jdz.ymt.prug.or.jp, ``jisfont.ps,''
+% in Japanesized Tgif(Tgif-3.0J-p17 JIS patch version), 7 1997.
+%
+/compose-fontset {
+ 12 dict begin
+ /FontType 0 def
+ /FontMatrix matrix def
+ /FontBBox { 0 0 0 0 } def
+ /FMapType 3 def
+ %/EscChar 255 def
+ /FDepVector [
+ 2 index {
+ dup type dup /nametype eq exch /stringtype eq or { *findfont } if
+ dup /WMode known {
+ dup /WMode get /WMode exch def
+ WMode 1 eq {
+ [ 0 1 -1 0 0 .3 ] makefont
+ } if
+ } if
+ } forall
+ ] def
+ /Encoding [ 0 1 4 index length 1 sub {} for ] def
+ pop
+ dup /FontName exch def
+ currentdict
+ end
+ definefont
+} bind def
+
+/decode-mule-big5 { % R1 R2 1|2 decode-mule-big5 R1 R2
+ 2 dict begin
+ 3 1 roll
+ /r2 exch def
+ /r1 exch def
+ /r2 r1 16#21 sub 94 mul r2 add 16#21 sub def
+ 2 eq { /r2 r2 6280 add def } if
+ /r1 r2 157 idiv 16#a1 add def
+ /r2 r2 157 mod def
+ /r2 r2 r2 16#3f lt { 16#40 } { 16#62 } ifelse add def
+ r1 r2
+ end
+} bind def
+/decode-mule-big5-l1 { % str idx decode-mule-big5-l1 str idx
+ 2 copy get exch 1 add exch 2 index 2 index get
+ 1 decode-mule-big5
+ buffer size 4 -1 roll put /size size 1 add store
+ buffer size 3 -1 roll put /size size 1 add store
+} bind def
+/decode-mule-big5-l2 { % str idx decode-mule-big5-l2 str idx
+ 2 copy get exch 1 add exch 2 index 2 index get
+ 2 decode-mule-big5
+ buffer size 4 -1 roll put /size size 1 add store
+ buffer size 3 -1 roll put /size size 1 add store
+} bind def
+/decode-gl { % str idx decode-gl str idx
+ 2 copy get buffer size 3 -1 roll put
+ /size size 1 add store
+} bind def
+/decode-gr { % str idx decode-gr str idx
+ 2 copy get 16#80 add buffer size 3 -1 roll put
+ /size size 1 add store
+} bind def
+/iso-2022-set [
+ [ (\033\(B) {decode-gl} ] % iso-2022:ascii
+ [ (\033,A) {decode-gr} ] % iso-2022:iso-8859-1,iso-latin1
+ [ (\033,B) {decode-gr} ] % iso-2022:iso-8859-2,iso-latin2
+% [ (\033,C) {decode-gr} ] % iso-2022:iso-8859-3,iso-latin3
+% [ (\033,D) {decode-gr} ] % iso-2022:iso-8859-4,iso-latin4
+% [ (\033,F) {decode-gr} ] % iso-2022:iso-8859-7,iso-greek
+% [ (\033,G) {decode-gr} ] % iso-2022:iso-8859-6,iso-arabic
+% [ (\033,H) {decode-gr} ] % iso-2022:iso-8859-8,iso-hebrew
+% [ (\033,L) {decode-gr} ] % iso-2022:iso-8859-5,iso-cyrillic
+ [ (\033,M) {decode-gr} ] % iso-2022:iso-8859-9,iso-latin5
+% [ (\033,T) {decode-gr} ] % iso-2022:iso-8859-11,iso-thai
+% [ (\033,V) {decode-gr} ] % iso-2022:iso-8859-10,iso-latin6
+ [ (\033\(I) {decode-gl} ] % iso-2022:jis-x-0201-kana
+ [ (\033\(J) {decode-gl} ] % iso-2022:jis-x-0201-roman
+% [ (\033\(T) {decode-gl} ] % iso-2022:gb-1988-roman
+ [ (\033$@) {decode-gl} ] % iso-2022:jis-x-0208-1978
+ [ [ (\033$A) (\033$\(A) ] {decode-gl} ] % iso-2022:gb-2312-1980
+ [ [ (\033$B) (\033$\(B) (\033&@\033$B) ] {decode-gl} ] % iso-2022:jis-x-0208-1983&1990
+ [ (\033$\(C) {decode-gl} ] % iso-2022:ks-x-1001-1992
+ [ (\033$\(D) {decode-gl} ] % iso-2022:jis-x-0212-1990
+ [ (\033$\(?) {decode-gl} ] % iso-2022:gbt-12345-1990,private-iso-gbt
+ [ (\033$\(G) {decode-gl} ] % iso-2022:cns-11643-1992-p1
+ [ (\033$\(H) {decode-gl} ] % iso-2022:cns-11643-1992-p2
+ [ (\033$\(0) {decode-mule-big5-l1} ] % iso-2022:big5,mule-big5
+ [ (\033$\(1) {decode-mule-big5-l2} ] % iso-2022:big5,mule-big5
+] def
+/iso-2022-translate { % str idx iso-2022-translate str idx
+ 2 copy get 16#20 lt {
+ iso-2022-set length 1 sub 0 1 3 -1 roll { % str idx j
+ iso-2022-set 1 index get 0 get dup % str idx j ()|[] ()|[]
+ dup type /stringtype eq { % str idx j () ()
+ dup length 5 index 5 index 3 -1 roll 7 index length 7 index sub
+ 2 copy lt { pop } { exch pop } ifelse
+ getinterval eq % str idx j () true|false
+ } { % str idx j [] []
+ pop () false 3 -1 roll {
+ dup 4 -1 roll pop 3 1 roll
+ dup length 6 index 6 index 3 -1 roll 8 index length 8 index sub
+ 2 copy lt { pop } { exch pop } ifelse
+ getinterval eq or dup { exit } if % str idx j () true|false
+ } forall
+ } ifelse
+ { exch /iso-2022-state exch store length 1 sub add exit } { pop } ifelse
+ pop
+ } for
+ } if
+} bind def
+/iso-2022-show { % str iso-2022-show -
+ 10 dict begin
+ /iso-6429-state null def
+ /iso-2022-state 0 def
+ /iso-2022-current iso-2022-state def
+ /buffer 65535 string def
+ /size 0 def
+ /width 0 def
+ /BoldFont false def /Underscore false def /BackColor 1 def
+ /foldline dup where { pop foldline } { false } ifelse def
+ 0 { % idx {} loop
+ dup 2 index length lt {
+ iso-2022-translate
+ iso-2022-state iso-2022-current ne {
+ buffer size 8#377 put
+ /size size 1 add store
+ buffer size iso-2022-state put
+ /size size 1 add store
+ } {
+ iso-6429-translate
+ iso-6429-state null ne {
+ iso-6429-set iso-6429-state get 1 get exec
+ } {
+ iso-2022-set iso-2022-current get 1 get exec
+ } ifelse
+ } ifelse
+ } {
+ exit
+ } ifelse
+ /iso-2022-current iso-2022-state store
+ 1 add
+ } loop
+ pop pop
+ iflush
+ end
+} bind def
+/ichop { % required for some Adobe-official PostScript interpreters
+ dup length dup 2 sub -2 0 { % str len len-2 -2 0 {} for
+ 2 index 1 index get 8#377 eq % str len idx c(str idx get) 8#377 eq
+ { exch pop } { pop exit } ifelse % str len|idx
+ } for 0 exch getinterval % str'(str 0 len|idx getinterval)
+} bind def
+
+/iso-6429-set [
+ [ (\t)
+ { buffer 0 size getinterval ichop % ``ichop'' is not required for GS
+ stringwidth pop ( ) stringwidth pop div round cvi width add
+ 8 dup 3 1 roll mod sub {
+ buffer size ( ) putinterval /size size 1 add store
+ } repeat } bind
+ ]
+ [ (\f) { iflush margin 0 get margin 3 get moveto } bind ]
+ [ [ (\033[m) (\033[0m) ]
+ { iflush
+ /BoldFont false textfont
+ /Underscore false textfont
+ 0 textcolor
+ 1 backcolor
+ } bind
+ ] % All Off
+ [ (\033[1m) { iflush /BoldFont true textfont } bind ]
+ [ (\033[4m) { iflush /Underscore true textfont } bind ]
+ [ (\033[22m) { iflush /BoldFont false textfont } bind ]
+ [ (\033[24m) { iflush /Underscore false textfont } bind ]
+ [ (\033[30m) { iflush 0 textcolor } bind ]
+ [ (\033[31m) { iflush [ 1 0 0 ] textcolor } bind ]
+ [ (\033[32m) { iflush [ 0 1 0 ] textcolor } bind ]
+ [ (\033[33m) { iflush [ 1 1 0 ] textcolor } bind ]
+ [ (\033[34m) { iflush [ 0 0 1 ] textcolor } bind ]
+ [ (\033[35m) { iflush [ 1 0 1 ] textcolor } bind ]
+ [ (\033[36m) { iflush [ 0 1 1 ] textcolor } bind ]
+ [ (\033[37m) { iflush 1 textcolor } bind ]
+ [ (\033[39m) { iflush 0 textcolor } bind ]
+ [ (\033[40m) { iflush 0 backcolor } bind ]
+ [ (\033[41m) { iflush [ 1 0 0 ] backcolor } bind ]
+ [ (\033[42m) { iflush [ 0 1 0 ] backcolor } bind ]
+ [ (\033[43m) { iflush [ 1 1 0 ] backcolor } bind ]
+ [ (\033[44m) { iflush [ 0 0 1 ] backcolor } bind ]
+ [ (\033[45m) { iflush [ 1 0 1 ] backcolor } bind ]
+ [ (\033[46m) { iflush [ 0 1 1 ] backcolor } bind ]
+ [ (\033[47m) { iflush 1 backcolor } bind ]
+ [ (\033[49m) { iflush 1 backcolor } bind ]
+] def
+/iso-6429-translate { % str idx iso-6429-translate str idx
+ /iso-6429-state null store
+ 2 copy get 16#20 lt {
+ iso-6429-set length 1 sub 0 1 3 -1 roll { % str idx j
+ iso-6429-set 1 index get 0 get dup % str idx j ()|[] ()|[]
+ dup type /stringtype eq { % str idx j () ()
+ dup length 5 index 5 index 3 -1 roll 7 index length 7 index sub
+ 2 copy lt { pop } { exch pop } ifelse
+ getinterval eq % str idx j () true|false
+ } { % str idx j [] []
+ pop () false 3 -1 roll {
+ dup 4 -1 roll pop 3 1 roll
+ dup length 6 index 6 index 3 -1 roll 8 index length 8 index sub
+ 2 copy lt { pop } { exch pop } ifelse
+ getinterval eq or dup { exit } if % str idx j () true|false
+ } forall
+ } ifelse
+ { exch /iso-6429-state exch store length 1 sub add exit } { pop } ifelse
+ pop
+ } for
+ } if
+} bind def
+/show-attribute {
+ BackColor dup type dup /integertype eq exch /realtype eq or {
+ dup 1 eq { pop } {
+ gsave setgray BoldFont { setboldfont } if textfill grestore
+ } ifelse
+ } {
+ gsave cvx exec setrgbcolor BoldFont { setboldfont } if textfill grestore
+ } ifelse
+ Underscore {
+ gsave .2 setlinewidth currentpoint fontsize .1 mul sub moveto
+ BoldFont { setboldfont } if dup stringwidth pop 0 rlineto stroke grestore
+ } if
+ BoldFont {
+ gsave setboldfont show currentpoint grestore moveto
+ } {
+ show
+ } ifelse
+} bind def
+/cshow-attribute {
+ pop currentpoint pop add pagesize 0 get margin 2 get sub lt {
+ 1 string dup 0 4 -1 roll put show-attribute
+ } {
+ currentpoint exch pop fontsize sub round margin 3 get lt {
+ gsave
+ nextpage preparepage
+ currentpoint matrix currentmatrix grestore setmatrix moveto
+ } {
+ origin 0 get currentpoint exch pop fontsize sub moveto
+ } ifelse
+ 1 string dup 0 4 -1 roll put show-attribute
+ } ifelse
+} bind def
+/iflush {
+ size 0 gt {
+ buffer 0 size getinterval ichop % ``ichop'' is not required for GS
+ dup stringwidth pop ( ) stringwidth pop div round cvi /width exch store
+ foldline not {
+ show-attribute
+ } {
+ dup stringwidth
+ pop currentpoint pop add pagesize 0 get margin 2 get sub lt {
+ show-attribute
+ } {
+ BoldFont { /BoldFont false store
+ gsave setboldfont
+ { cshow-attribute } exch cshow
+ currentpoint grestore moveto
+ } {
+ { cshow-attribute } exch cshow
+ } ifelse
+ } ifelse
+ } ifelse
+ /size 0 store
+ } if
+} bind def
+/textfont { % /BoldFont|/Underscore any textfont -
+ store
+} bind def
+/textcolor {
+ dup type dup /integertype eq exch /realtype eq or { setgray }
+ { cvx exec setrgbcolor } ifelse
+} bind def
+/backcolor {
+ /BackColor exch store
+} bind def
+/textfill {
+ currentpoint fontsize .2 mul sub 2 index stringwidth pop fontsize
+ 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto
+ closepath fill
+} bind def
+/setboldfont {
+ currentfont /FontName get dup length string cvs (-Bold)
+ exch dup length 2 index length add string
+ dup dup 4 2 roll copy length 4 -1 roll putinterval cvn
+ findfont [fontwidth 0 0 fontsize 0 0] makefont setfont
+} bind def
+/iso-6429-show { % str iso-6429-show -
+ 8 dict begin
+ /iso-6429-state null def
+ /buffer 65535 string def
+ /size 0 def
+ /width 0 def
+ /BoldFont false def /Underscore false def /BackColor 1 def
+ /foldline dup where { pop foldline } { false } ifelse def
+ 0 { % idx {} loop
+ dup 2 index length lt {
+ iso-6429-translate
+ iso-6429-state null ne {
+ iso-6429-set iso-6429-state get 1 get exec
+ } {
+ 2 copy get buffer size 3 -1 roll put
+ /size size 1 add store
+ } ifelse
+ } {
+ exit
+ } ifelse
+ 1 add
+ } loop
+ pop pop
+ iflush
+ end
+} bind def
+/shown-init {
+ /inshow exch def
+ /mediasize [ 595 842 ] def
+ /mediamargin [ 30 30 30 30 ] def
+ /pagesize [
+ mediasize cvx exec mediamargin cvx exec
+ 3 -1 roll add 3 1 roll add 3 1 roll sub 3 1 roll sub exch
+ ] def
+ /margin [ 20 28 20 28 ] def
+ /division [ 1 1 ] def
+ /landscape false def
+ /landscale false def
+ /evenscale true def
+ /pagescale false def
+ pagescale not {
+ /pagesize [
+ pagesize 0 get division 0 get div pagesize 1 get division 1 get div
+ ] store
+ } if
+ landscape {
+ /pagesize [ pagesize cvx exec exch ] store
+ /margin [ margin cvx exec 4 1 roll ] store
+ } if
+ /verttext dup where { pop verttext } { false } ifelse def
+ /foldline true def
+ /header true def /footer true def /border true def
+ /origin [ margin 0 get pagesize 1 get margin 1 get sub fontsize sub ] def
+ /position [ 0 0 ] def
+ /preparepage { initmatrix
+ landscape landscale xor not {
+ mediasize cvx exec exch mediamargin 0 get mediamargin 2 get add sub
+ division 0 get div position 0 get mul mediamargin 0 get add
+ exch dup mediamargin 1 get mediamargin 3 get add sub
+ division 1 get div position 1 get 1 add mul sub mediamargin 1 get sub
+ translate
+ pagescale { landscale not { 1 } { pagesize cvx exec div } ifelse
+ division 1 get div evenscale { dup } {
+ landscale not { 1 } { pagesize cvx exec exch div } ifelse
+ division 0 get div exch
+ } ifelse scale
+ } if
+ } {
+ verttext {
+ 180 rotate mediasize { neg } forall translate
+ } if
+ mediasize cvx exec exch mediamargin 0 get mediamargin 2 get add sub
+ division 0 get div position 0 get mul mediamargin 0 get add
+ exch mediamargin 1 get mediamargin 3 get add sub
+ division 1 get div position 1 get mul mediamargin 3 get add
+ translate
+ pagescale { landscale not { 1 } { pagesize cvx exec div } ifelse
+ division 0 get div evenscale { dup } {
+ landscale not { 1 } { pagesize cvx exec exch div } ifelse
+ division 1 get div
+ } ifelse scale
+ } if
+ 90 rotate 0 pagesize 1 get neg translate
+ } ifelse
+ origin cvx exec moveto
+ } bind def
+ /gssafe false def % GS-safe but not always perfect at decoratepage
+ /nextpage { gssafe { /decorated false store } { decoratepage } ifelse
+ position landscape landscale or not { 0 } { 1 } ifelse 2 copy get 1 add
+ dup 4 1 roll put
+ division landscape landscale or not { 0 } { 1 } ifelse get eq {
+ position landscape landscale or not { 0 } { 1 } ifelse 0 put
+ position landscape landscale or not { 1 } { 0 } ifelse 2 copy get 1 add
+ dup 4 1 roll put
+ division landscape landscale or not { 1 } { 0 } ifelse get eq {
+ position landscape landscale or not { 1 } { 0 } ifelse 0 put
+ showpage
+ } if
+ } if
+ } bind def
+ /lastpage { gssafe {} { decoratepage } ifelse showpage } bind def
+ /nextline {
+ currentpoint exch pop fontsize sub round margin 3 get lt {
+ nextpage preparepage /empty true store
+ } {
+ origin 0 get currentpoint exch pop fontsize sub moveto
+ } ifelse
+ } bind def
+ %
+ /page 0 def
+ /infofont /Helvetica findfont [fontwidth 0 0 fontsize 0 0] makefont def
+ /head (gs-cjk project: iso-2022-7bit - Emacs/Mule editable PostScript file) def
+ /showheader {
+ header {
+ gsave
+ verttext not {
+ margin 0 get pagesize 1 get margin 1 get sub fontsize add moveto
+ } {
+ margin 0 get fontsize sub margin 3 get translate 90 rotate
+ fontsize fontwidth div fontwidth fontsize div scale 0 0 moveto
+ } ifelse
+ 1 dict dup /foldline false put begin
+ infofont setfont head inshow
+ end
+ grestore
+ } if
+ } bind def
+ /foot 64 string def
+ /showfooter {
+ /page page 1 add store
+ footer {
+ gsave
+ verttext not {
+ pagesize 0 get margin 2 get sub margin 3 get fontsize 2 mul sub moveto
+ } {
+ pagesize 0 get margin 2 get sub fontsize 2 mul add
+ pagesize 1 get margin 1 get sub translate 90 rotate
+ fontsize fontwidth div fontwidth fontsize div scale 0 0 moveto
+ } ifelse
+ 1 dict dup /foldline false put begin
+ infofont setfont page foot cvs dup stringwidth pop neg 0 rmoveto inshow
+ end
+ grestore
+ } if
+ } bind def
+ /bord {
+ pagesize cvx exec margin { fontsize 2 div sub } forall
+ 3 1 roll exch 5 -1 roll exch sub exch 5 -1 roll exch sub exch
+ 4 copy 3 1 roll exch 8 -2 roll moveto lineto 4 2 roll lineto lineto
+ closepath
+ } bind def
+ /showborder {
+ border {
+ gsave .25 setlinewidth bord stroke grestore
+ } if
+ } bind def
+ /decoratepage { showheader showfooter showborder } bind def
+ %
+ preparepage /empty true def
+ gssafe { /decorated false def } if
+} bind def
+/shown {
+ gssafe { decorated not { decoratepage /decorated true store } if } if
+ inshow /empty false store nextline
+} bind def
+/shown-close { empty not { lastpage } if } bind def
+/shown-readlines {
+ /shown-buffer 65535 string def
+ shown-init
+ {
+ currentfile shown-buffer readline not { pop exit } if
+ shown
+ } loop
+ shown-close
+} bind def
+/shown-readhexstrings {
+ /shown-buffer 65535 string def
+ /shown-size 0 def
+ /previous-char (\000) def
+ shown-init
+ {
+ currentfile 1 string readhexstring not { pop exit } if
+ dup (\n) ne {
+ dup (\r) ne {
+ shown-buffer shown-size 2 index putinterval
+ /shown-size shown-size 1 add store
+ } { % mac
+ shown-buffer 0 shown-size getinterval shown
+ /shown-size 0 store
+ } ifelse
+ } { % unix
+ previous-char (\r) ne {
+ shown-buffer 0 shown-size getinterval shown
+ } { % dos
+ } ifelse
+ /shown-size 0 store
+ } ifelse
+ previous-char 0 3 -1 roll putinterval
+ } loop
+ shown-close
+} bind def
+
+/fitfont { [ .8335276 0 0 .8335276 0 .1 ] makefont } bind def
+
+/verttext false unknowndef
+/iso-2022-fontset [
+ /Courier findfont fitfont % iso-2022:ascii
+ /Courier-Latin1 /Courier /ISOLatin1Encoding reencode-font fitfont % iso-2022:iso-8859-1,iso-latin1
+ /Courier-Latin2 /Courier /ISOLatin2Encoding reencode-font fitfont % iso-2022:iso-8859-2,iso-latin2
+% /CourierNewLatin3 findfont fitfont % iso-2022:iso-8859-3,iso-latin3
+% /CourierNewLatin4 findfont fitfont % iso-2022:iso-8859-4,iso-latin4
+% /CourierNewGreek findfont fitfont % iso-2022:iso-8859-7,iso-greek
+% /CourierNewArabic findfont fitfont % iso-2022:iso-8859-6,iso-arabic
+% /CourierNewHebrew findfont fitfont % iso-2022:iso-8859-8,iso-hebrew
+% /Courier-Cyrillic /CourierNewCyrillic /ISOCyrillicEncoding reencode-font fitfont % iso-2022:iso-8859-5,iso-cyrillic
+ /Courier-Latin5 /Courier /ISOLatin5Encoding reencode-font fitfont % iso-2022:iso-8859-9,iso-latin5
+% /CourierNewThai findfont fitfont % iso-2022:iso-8859-11,iso-thai
+% /CourierNewLatin6 findfont fitfont % iso-2022:iso-8859-10,iso-latin6
+ verttext not {
+ /Ryumin-Light.Katakana % iso-2022:jis-x-0201-kana
+ /Ryumin-Light.Roman % iso-2022:jis-x-0201-roman
+% /STSong-Light-GBK-EUC-H % iso-2022:gb-1988-roman
+ /Ryumin-Light-78-H % iso-2022:jis-x-0208-1978
+ /STSong-Light-GB-H % iso-2022:gb-2312-1980
+ /Ryumin-Light-H % iso-2022:jis-x-0208-1983&1990
+ /HYSMyeongJo-Medium-KSC-H % iso-2022:ks-x-1001-1992
+ /HeiseiMin-W3H-Hojo-H % iso-2022:jis-x-0212-1990
+ /STSong-Light-GBT-H % iso-2022:gbt-12345-1990,private-iso-gbt
+ /MSung-Light-CNS1-H % iso-2022:cns-11643-1992-p1
+ /MSung-Light-CNS2-H % iso-2022:cns-11643-1992-p2
+ /MSung-Light-ETen-B5-H % iso-2022:big5,mule-big5
+ /MSung-Light-ETen-B5-H % iso-2022:big5,mule-big5
+ } {
+ /Ryumin-Light.Katakana-V /Ryumin-Light.Katakana vertical-font % iso-2022:jis-x-0201-kana
+ /Ryumin-Light.Roman-V /Ryumin-Light.Roman vertical-font % iso-2022:jis-x-0201-roman
+% /STSong-Light-GBK-EUC-V % iso-2022:gb-1988-roman
+ /Ryumin-Light-78-V % iso-2022:jis-x-0208-1978
+ /STSong-Light-GB-V % iso-2022:gb-2312-1980
+ /Ryumin-Light-V % iso-2022:jis-x-0208-1983&1990
+ /HYSMyeongJo-Medium-KSC-V % iso-2022:ks-x-1001-1992
+ /HeiseiMin-W3H-Hojo-V % iso-2022:jis-x-0212-1990
+ /STSong-Light-GBT-V % iso-2022:gbt-12345-1990,private-iso-gbt
+ /MSung-Light-CNS1-V % iso-2022:cns-11643-1992-p1
+ /MSung-Light-CNS2-V % iso-2022:cns-11643-1992-p2
+ /MSung-Light-ETen-B5-V % iso-2022:big5,mule-big5
+ /MSung-Light-ETen-B5-V % iso-2022:big5,mule-big5
+ } ifelse
+] def
+/iso-2022-bold-fontset [
+ /Courier-Bold findfont fitfont % iso-2022:ascii
+ /Courier-Bold-Latin1 /Courier-Bold /ISOLatin1Encoding reencode-font fitfont % iso-2022:iso-8859-1,iso-latin1
+ /Courier-Bold-Latin2 /Courier-Bold /ISOLatin2Encoding reencode-font fitfont % iso-2022:iso-8859-2,iso-latin2
+% /CourierNewLatin3-Bold findfont fitfont % iso-2022:iso-8859-3,iso-latin3
+% /CourierNewLatin4-Bold findfont fitfont % iso-2022:iso-8859-4,iso-latin4
+% /CourierNewGreek-Bold findfont fitfont % iso-2022:iso-8859-7,iso-greek
+% /CourierNewArabic-Bold findfont fitfont % iso-2022:iso-8859-6,iso-arabic
+% /CourierNewHebrew-Bold findfont fitfont % iso-2022:iso-8859-8,iso-hebrew
+% /Courier-Bold-Cyrillic /CourierNewCyrillic-Bold /ISOCyrillicEncoding reencode-font fitfont % iso-2022:iso-8859-5,iso-cyrillic
+ /Courier-Bold-Latin5 /Courier-Bold /ISOLatin5Encoding reencode-font fitfont % iso-2022:iso-8859-9,iso-latin5
+% /CourierNewThai-Bold findfont fitfont % iso-2022:iso-8859-11,iso-thai
+% /CourierNewLatin6-Bold findfont fitfont % iso-2022:iso-8859-10,iso-latin6
+ verttext not {
+ /GothicBBB-Medium.Katakana % iso-2022:jis-x-0201-kana
+ /GothicBBB-Medium.Roman % iso-2022:jis-x-0201-roman
+% /STHeiti-Regular-GBK-EUC-H % iso-2022:gb-1988-roman
+ /GothicBBB-Medium-78-H % iso-2022:jis-x-0208-1978
+ /STHeiti-Regular-GB-H % iso-2022:gb-2312-1980
+ /GothicBBB-Medium-H % iso-2022:jis-x-0208-1983&1990
+ /HYGoThic-Medium-KSC-H % iso-2022:ks-x-1001-1992
+ /HeiseiKakuGo-W5H-Hojo-H % iso-2022:jis-x-0212-1990
+ /STHeiti-Regular-GBT-H % iso-2022:gbt-12345-1990,private-iso-gbt
+ /MHei-Medium-CNS1-H % iso-2022:cns-11643-1992-p1
+ /MHei-Medium-CNS2-H % iso-2022:cns-11643-1992-p2
+ /MHei-Medium-ETen-B5-H % iso-2022:big5,mule-big5
+ /MHei-Medium-ETen-B5-H % iso-2022:big5,mule-big5
+ } {
+ /GothicBBB-Medium.Katakana-V /GothicBBB-Medium.Katakana vertical-font % iso-2022:jis-x-0201-kana
+ /GothicBBB-Medium.Roman-V /GothicBBB-Medium.Roman vertical-font % iso-2022:jis-x-0201-roman
+% /STHeiti-Regular-GBK-EUC-V % iso-2022:gb-1988-roman
+ /GothicBBB-Medium-78-V % iso-2022:jis-x-0208-1978
+ /STHeiti-Regular-GB-V % iso-2022:gb-2312-1980
+ /GothicBBB-Medium-V % iso-2022:jis-x-0208-1983&1990
+ /HYGoThic-Medium-KSC-V % iso-2022:ks-x-1001-1992
+ /HeiseiKakuGo-W5H-Hojo-V % iso-2022:jis-x-0212-1990
+ /STHeiti-Regular-GBT-V % iso-2022:gbt-12345-1990,private-iso-gbt
+ /MHei-Medium-CNS1-V % iso-2022:cns-11643-1992-p1
+ /MHei-Medium-CNS2-V % iso-2022:cns-11643-1992-p2
+ /MHei-Medium-ETen-B5-V % iso-2022:big5,mule-big5
+ /MHei-Medium-ETen-B5-V % iso-2022:big5,mule-big5
+ } ifelse
+] def
+/fontset-iso-2022 iso-2022-fontset compose-fontset pop
+/fontset-iso-2022-Bold iso-2022-bold-fontset compose-fontset pop
+%%EndProlog
+/fontsize 11 def /fontwidth 11 def
+/fontset-iso-2022 findfont [fontwidth 0 0 fontsize 0 0] makefont setfont
+{ iso-2022-show } shown-readlines
+A list of ways to say hello in various languages.
+
+Czech (,Bh(Besky) Dobr,B}(B den
+Danish (Dansk) Hej, Goddag
+English Hello
+Esperanto Saluton
+Estonian Tere, Tervist
+PostScript (Hello) =
+Finnish (Suomi) Hei
+French (Fran,Ag(Bais) Bonjour, Salut
+German (Deutsch Nord) Guten Tag
+
+Italiano Ciao, Buon giorno
+
+Maltese Ciao
+Nederlands, Vlaams Hallo, Dag
+Norwegian (Norsk) Hei, God dag
+Polish Dzie,Bq(B dobry, Hej
+
+Slovak Dobr,B}(B de,Br(B
+Spanish (Espa,Aq(Bol) ,A!(BHola!
+Swedish (Svenska) Hej, Goddag
+
+Turkish (T,M|(Brk,Mg(Be) Merhaba
+
+Chinese ($(GDcEF$(0!.$(GiGk#$(0!.Vn^V)t(B) $(0<@)p$(G!$I#Go!$$(0'*)y!$(B
+Chinese ($AVPND#,::So#,<rLeWV(B) $ADz:C!#Dc:C!#(B
+Japanese ($BF|K\8l!"4A;z!"J?2>L>!"JR2>L>(B) $B$3$s$K$A$O!#(I:]FAJ(B.
+Korean ($(CGQ1[#,ySm.(B) $(C>H3gGO=J4O1n#.>H3gGO<<?d#.(B
+
+Difference among chinese characters in GB, JIS, KSC, BIG5:
+ GB -- $AT*Fx(B $A?*7"(B
+ JIS -- $B855$(B $B3+H/(B
+ KSC -- $(Cj*Q((B $(CKR[!(B
+ BIG5 -- $(0&x86(B $(0DeBv(B
+
+Just for a test of JISX0212: $BqV$(DiQ(B (the second character is of JISX0212)
+
+Just for a test of JISX0201: (I123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\&]_^(B
+
+Difference between JISX0208.1978 and 1983:
+
+ \x1b$@ $@032)3B3I3v4C4R6F7[979\<I?YA(D[EWEnEsFvGhI0KjKyLyMZO6(B
+ \x1b$B $B032)3B3I3v4C4R6F7[979\<I?YA(D[EWEnEsFvGhI0KjKyLyMZO6(B
+
+Difference between GB2312.1980 and GBT12345.1990
+
+ \x1b$A $AMrLuP4;-8v:s<8;z@oTS@kRuQt4SQyJ&8IO0?*Fx5g9X6T;6<&Gl(B
+ $A1_9};9=xT6Ub;*0.HHME4&RURdRZSJ(B
+ $AJiN*3$J1S&6+35K-8xAeR{CE<dNJM7BrBt(B
+ \x1b$(? $(?MrLuP4;-8v:s<8;z@oTS@kRuQt4SQyJ&8IO0?*Fx5g9X6T;6<&Gl(B
+ $(?1_9};9=xT6Ub;*0.HHME4&RURdRZSJ(B
+ $(?JiN*3$J1S&6+35K-8xAeR{CE<dNJM7BrBt(B
+
+Color names:
+ BLACK $(0E**d(B $A:ZI+(B $B9u?'(B $(C0KA$;v(B 
+ RED $(04y*d(B $A:lI+(B $B@V?'(B $(C;!0-;v(B 
+ GREEN $(0L;*d(B $ABLI+(B $BNP?'(B $(C3k6{;v(B 
+ YELLOW $(0E(Yn*d(B $A;FI+(B $B2+?'(B $(CH2;v(B 
+ BLUE $(0Y1*d(B $A@6I+(B $B@D?'(B $(CFD6{;v(B 
+ MAGENTA $(0C<*d(B $AWOI+(B $B;g?'(B $(C:86s;v(B 
+ CYAN $(0LJL;*d(B $A4dBLI+(B $B@DNP?'(B $(CC;7O;v(B 
+ WHITE $(0(v*d(B $A0WI+(B $BGr?'(B $(CGO>a;v(B 
diff --git a/Master/xemtex/doc/ghostscript/examples/colorcir.ps b/Master/xemtex/doc/ghostscript/examples/colorcir.ps
new file mode 100644
index 00000000000..cf4a49e537c
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/colorcir.ps
@@ -0,0 +1,125 @@
+%!
+/colorcirsave save def % prevent left over effects
+
+gsave
+/Times-Roman findfont 24 scalefont setfont
+72 72 translate 0 0 moveto 1 0 0 setrgbcolor (Red) show
+72 0 translate 0 0 moveto 0 1 0 setrgbcolor (Green) show
+72 0 translate 0 0 moveto 0 0 1 setrgbcolor (Blue) show
+72 0 translate 0 0 moveto 1 1 0 setrgbcolor (Yellow) show
+72 0 translate 0 0 moveto 1 0 1 setrgbcolor (Pink) show
+72 0 translate 0 0 moveto 0 1 1 setrgbcolor (Cyan) show
+72 0 translate 0 0 moveto 0.9 0.9 0.9 setrgbcolor ('White') show
+grestore
+
+0.0 setlinewidth
+
+/length 0.1 def
+/width 0.02 def
+/hsvcircle {
+gsave
+ /h 0.0 def
+ 0 4 360 {
+ pop
+ gsave
+ 0.5 0.0 translate
+
+ newpath
+ 0.0 0.0 moveto
+ length 0.0 lineto
+ length width lineto
+ 0.0 width lineto
+ closepath
+ h 1.0 1.0 sethsbcolor
+ fill
+
+ %newpath
+ %0.0 0.0 moveto
+ %length 0.0 lineto
+ %length width lineto
+ %0.0 width lineto
+ %closepath
+ %0.0 setgray
+ %stroke
+
+ grestore
+ /h h 4 360 div add def
+ 4 rotate
+ } for
+grestore
+} def
+
+/graycircle {
+gsave
+ /h -1.0 def
+ 0 4 360 {
+ pop
+ gsave
+ 0.5 0.0 translate
+
+ newpath
+ 0.0 0.0 moveto
+ length 0.0 lineto
+ length width lineto
+ 0.0 width lineto
+ closepath
+
+ h abs setgray
+ fill
+
+ %newpath
+ %0.0 0.0 moveto
+ %length 0.0 lineto
+ %length width lineto
+ %0.0 width lineto
+ %closepath
+ %0.0 setgray
+ %stroke
+ grestore
+
+ /h h 8 360 div add def
+ 4 rotate
+ } for
+grestore
+} def
+
+0.0 setlinewidth
+0.0 setgray
+300 400 translate
+500 500 scale
+
+30 rotate
+1.0 0.7 scale
+-30 rotate
+
+hsvcircle
+0.8 0.8 scale
+graycircle
+0.8 0.8 scale
+hsvcircle
+0.8 0.8 scale
+graycircle
+0.8 0.8 scale
+hsvcircle
+0.8 0.8 scale
+graycircle
+0.8 0.8 scale
+hsvcircle
+0.8 0.8 scale
+graycircle
+0.8 0.8 scale
+hsvcircle
+0.8 0.8 scale
+graycircle
+0.8 0.8 scale
+hsvcircle
+0.8 0.8 scale
+graycircle
+0.8 0.8 scale
+hsvcircle
+0.8 0.8 scale
+graycircle
+
+showpage
+clear cleardictstack
+colorcirsave restore
diff --git a/Master/xemtex/doc/ghostscript/examples/doretree.ps b/Master/xemtex/doc/ghostscript/examples/doretree.ps
new file mode 100644
index 00000000000..23157fabdd8
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/doretree.ps
@@ -0,0 +1,2485 @@
+%!PS-Adobe-1.0
+%%Title: dore.ps
+%%Creator: Dore' Postscript Device Driver
+%%For: Jesse Don Hickson III
+%%CreationDate: Sat Apr 11 18:26:44 1998
+%%Pages: (atend)
+%%DocumentFonts:
+%%BoundingBox: 0 0 612 612
+%%EndComments
+/doretreesave save def % prevent left over effects
+% The author, Jesse Don Hickson III, hereby places this file into
+% the public domain on this day 23 Feb 2000.
+/Dore 20 dict def
+Dore begin
+/Prgb { moveto -1 -1 rmoveto 2 0 rlineto
+ 0 2 rlineto -2 0 rlineto
+ closepath setrgbcolor fill } def
+/Lrgb { moveto lineto setrgbcolor stroke } def
+/Trgb { moveto lineto lineto closepath
+ setrgbcolor fill } def
+/BGrgb { dup 3 -1 roll dup 5 -1 roll dup
+ 7 -1 roll dup 3 -1 roll moveto
+ 6 -1 roll lineto exch 4 -1 roll
+ lineto lineto closepath
+ setrgbcolor
+ fill } def
+/Pgray { moveto -1 -1 rmoveto 2 0 rlineto
+ 0 2 rlineto -2 0 rlineto
+ closepath setgray fill } def
+/Lgray { moveto lineto setgray stroke } def
+/Tgray { moveto lineto lineto closepath
+ setgray fill } def
+/BGgray { dup 3 -1 roll dup 5 -1 roll dup
+ 7 -1 roll dup 3 -1 roll moveto
+ 6 -1 roll lineto exch 4 -1 roll
+ lineto lineto closepath setgray
+ fill } def
+/BDR { dup 3 -1 roll dup 5 -1 roll dup
+ 7 -1 roll dup 3 -1 roll moveto
+ 6 -1 roll lineto exch 4 -1 roll
+ lineto lineto closepath
+ setgray 40 setlinewidth
+ stroke } def
+%%EndProlog
+%%Page: 1 1
+
+gsave
+0.400000 0.400000 0.400000 0 0 612 612 BGrgb
+
+0.25028 0.20022 0.15028 66 73 545 73 478 350 Trgb
+0.25028 0.20022 0.15028 66 73 478 350 133 350 Trgb
+0.312849 0.250279 0.312849 69 61 542 61 545 73 Trgb
+0.312849 0.250279 0.312849 69 61 545 73 66 73 Trgb
+
+0.000000 0.699172 0.209751 308 254 305 260 302 254 Trgb
+0.000000 0.699172 0.209751 305 260 299 260 302 254 Trgb
+0.000000 0.699172 0.209751 299 260 296 255 302 254 Trgb
+0.000000 0.699172 0.209751 296 255 299 249 302 254 Trgb
+0.000000 0.699172 0.209751 299 249 305 249 302 254 Trgb
+0.000000 0.699172 0.209751 305 249 308 254 302 254 Trgb
+0.000000 0.000000 0.000000 303 225 299 249 296 255 Trgb
+0.000000 0.000000 0.000000 303 225 296 255 300 230 Trgb
+0.000000 0.006800 0.002040 308 225 305 249 299 249 Trgb
+0.000000 0.003400 0.001020 308 225 299 249 303 225 Trgb
+0.000000 0.025554 0.007666 311 230 308 254 305 249 Trgb
+0.000000 0.017877 0.005363 311 230 305 249 308 225 Trgb
+0.000000 0.698504 0.209551 318 220 315 223 313 218 Trgb
+0.000000 0.698504 0.209551 315 223 310 222 313 218 Trgb
+0.000000 0.698504 0.209551 310 222 309 217 313 218 Trgb
+0.000000 0.698504 0.209551 309 217 312 214 313 218 Trgb
+0.000000 0.698504 0.209551 312 214 317 215 313 218 Trgb
+0.000000 0.698504 0.209551 317 215 318 220 313 218 Trgb
+0.000000 0.039441 0.011832 303 258 315 223 318 220 Trgb
+0.000000 0.039755 0.011926 303 258 318 220 306 256 Trgb
+0.000000 0.013042 0.003913 299 257 310 222 315 223 Trgb
+0.000000 0.026084 0.007825 299 257 315 223 303 258 Trgb
+0.000000 0.000000 0.000000 298 253 309 217 310 222 Trgb
+0.000000 0.000000 0.000000 298 253 310 222 299 257 Trgb
+0.000000 0.696509 0.208953 351 168 348 168 348 166 Trgb
+0.000000 0.696509 0.208953 348 168 346 166 348 166 Trgb
+0.000000 0.696509 0.208953 346 166 345 164 348 166 Trgb
+0.000000 0.696509 0.208953 345 164 348 164 348 166 Trgb
+0.000000 0.696509 0.208953 348 164 351 166 348 166 Trgb
+0.000000 0.696509 0.208953 351 166 351 168 348 166 Trgb
+0.000000 0.059893 0.017968 314 220 348 168 351 168 Trgb
+0.000000 0.060927 0.018278 314 220 351 168 316 221 Trgb
+0.000000 0.019620 0.005886 311 218 346 166 348 168 Trgb
+0.000000 0.039239 0.011772 311 218 348 168 314 220 Trgb
+0.000000 0.000000 0.000000 311 216 345 164 346 166 Trgb
+0.000000 0.000000 0.000000 311 216 346 166 311 218 Trgb
+0.000000 0.000000 0.000000 350 168 349 168 348 166 Trgb
+0.000000 0.000000 0.000000 349 168 347 166 348 166 Trgb
+0.000000 0.000000 0.000000 347 166 346 164 348 166 Trgb
+0.000000 0.000000 0.000000 346 164 347 164 348 166 Trgb
+0.000000 0.000000 0.000000 347 164 349 166 348 166 Trgb
+0.000000 0.000000 0.000000 349 166 350 168 348 166 Trgb
+0.000000 0.238723 0.071617 349 166 385 141 386 143 Trgb
+0.000000 0.241460 0.072438 349 166 386 143 350 168 Trgb
+0.000000 0.078662 0.023599 347 164 384 140 385 141 Trgb
+0.000000 0.157324 0.047197 347 164 385 141 349 166 Trgb
+0.000000 0.000000 0.000000 346 164 383 140 384 140 Trgb
+0.000000 0.000000 0.000000 346 164 384 140 347 164 Trgb
+0.340732 0.248642 0.117875 397 153 395 142 402 143 Trgb
+0.278657 0.203344 0.096400 395 127 402 143 395 142 Trgb
+0.247789 0.180819 0.085722 395 142 386 130 395 127 Trgb
+0.119439 0.087158 0.041319 386 130 377 126 395 127 Trgb
+0.106393 0.077638 0.036806 376 140 383 156 371 151 Trgb
+0.318775 0.232620 0.110279 395 142 397 153 383 156 Trgb
+0.234743 0.171299 0.081209 383 156 376 140 395 142 Trgb
+0.225832 0.164797 0.078126 386 130 395 142 376 140 Trgb
+0.033948 0.024773 0.011744 366 140 376 140 371 151 Trgb
+0.000000 0.000000 0.000000 372 130 377 126 366 140 Trgb
+0.033948 0.024773 0.011744 376 140 366 140 377 126 Trgb
+0.097482 0.071136 0.033724 377 126 386 130 376 140 Trgb
+0.072446 0.052866 0.025062 383 156 373 156 371 151 Trgb
+0.228924 0.167052 0.079195 397 153 391 158 383 156 Trgb
+0.110944 0.080959 0.038381 373 156 383 156 391 158 Trgb
+0.000000 0.699929 0.209979 390 172 391 170 391 172 Trgb
+0.000000 0.699929 0.209979 391 170 392 170 391 172 Trgb
+0.000000 0.699929 0.209979 392 170 393 172 391 172 Trgb
+0.000000 0.699929 0.209979 393 172 392 174 391 172 Trgb
+0.000000 0.699929 0.209979 392 174 391 174 391 172 Trgb
+0.000000 0.699929 0.209979 391 174 390 172 391 172 Trgb
+0.000000 0.004526 0.001358 348 164 391 170 390 172 Trgb
+0.000000 0.006998 0.002099 348 164 390 172 347 166 Trgb
+0.000000 0.000685 0.000205 349 164 392 170 391 170 Trgb
+0.000000 0.001370 0.000411 349 164 391 170 348 164 Trgb
+0.000000 0.008785 0.002635 347 166 390 172 391 174 Trgb
+0.000000 0.008100 0.002430 347 166 391 174 347 168 Trgb
+0.315444 0.255254 0.114140 397 175 404 160 408 174 Trgb
+0.160986 0.130268 0.058251 383 174 386 160 397 175 Trgb
+0.207378 0.167808 0.075037 404 160 397 175 386 160 Trgb
+0.095933 0.077628 0.034712 386 160 393 153 404 160 Trgb
+0.267978 0.216844 0.096964 404 160 409 172 408 174 Trgb
+0.330957 0.267806 0.119752 402 187 397 175 408 174 Trgb
+0.176499 0.142820 0.063864 384 186 383 174 397 175 Trgb
+0.238403 0.192912 0.086263 397 175 402 187 384 186 Trgb
+0.137926 0.111608 0.049907 390 190 384 186 402 187 Trgb
+0.049541 0.040088 0.017926 386 160 383 174 374 172 Trgb
+0.015977 0.012928 0.005781 374 172 381 157 386 160 Trgb
+0.015977 0.012928 0.005781 393 153 386 160 381 157 Trgb
+0.283490 0.229397 0.102577 409 172 402 187 408 174 Trgb
+0.065053 0.052640 0.023539 383 174 384 186 374 172 Trgb
+0.031489 0.025481 0.011394 379 183 374 172 384 186 Trgb
+0.042458 0.034357 0.015363 384 186 390 190 379 183 Trgb
+0.000000 0.697723 0.209317 341 150 344 149 343 152 Trgb
+0.000000 0.697723 0.209317 344 149 346 151 343 152 Trgb
+0.000000 0.697723 0.209317 346 151 345 153 343 152 Trgb
+0.000000 0.697723 0.209317 345 153 343 154 343 152 Trgb
+0.000000 0.697723 0.209317 343 154 341 152 343 152 Trgb
+0.000000 0.697723 0.209317 341 152 341 150 343 152 Trgb
+0.000000 0.049494 0.014848 350 168 345 153 346 151 Trgb
+0.000000 0.044068 0.013220 350 168 346 151 350 165 Trgb
+0.000000 0.029160 0.008748 348 168 343 154 345 153 Trgb
+0.000000 0.042040 0.012612 348 168 345 153 350 168 Trgb
+0.000000 0.005426 0.001628 346 167 341 152 343 154 Trgb
+0.000000 0.010853 0.003256 346 167 343 154 348 168 Trgb
+0.041998 0.199607 0.048321 336 144 348 143 342 148 Trgb
+0.000000 0.000000 0.000000 334 144 343 140 336 144 Trgb
+0.020666 0.098222 0.023778 348 143 336 144 343 140 Trgb
+0.028561 0.135744 0.032861 343 140 351 143 348 143 Trgb
+0.080827 0.384157 0.092997 348 143 349 154 342 148 Trgb
+0.101740 0.483551 0.117058 356 151 352 159 349 154 Trgb
+0.088824 0.422164 0.102198 349 154 348 143 356 151 Trgb
+0.057889 0.275137 0.066605 351 143 356 151 348 143 Trgb
+0.030833 0.146542 0.035475 337 155 336 144 342 148 Trgb
+0.000000 0.000000 0.000000 331 153 334 144 336 144 Trgb
+0.009501 0.045158 0.010932 336 144 337 155 331 153 Trgb
+0.009501 0.045158 0.010932 335 161 331 153 337 155 Trgb
+0.069662 0.331092 0.080151 349 154 337 155 342 148 Trgb
+0.090575 0.430486 0.104212 352 159 344 163 349 154 Trgb
+0.066494 0.316036 0.076506 337 155 349 154 344 163 Trgb
+0.027665 0.131486 0.031830 344 163 335 161 337 155 Trgb
+0.000000 0.699775 0.209933 370 210 368 207 370 207 Trgb
+0.000000 0.699775 0.209933 368 207 369 204 370 207 Trgb
+0.000000 0.699775 0.209933 369 204 370 203 370 207 Trgb
+0.000000 0.699775 0.209933 370 203 372 206 370 207 Trgb
+0.000000 0.699775 0.209933 372 206 372 209 370 207 Trgb
+0.000000 0.699775 0.209933 372 209 370 210 370 207 Trgb
+0.000000 0.011674 0.003502 312 219 368 207 370 210 Trgb
+0.000000 0.014707 0.004412 312 219 370 210 313 222 Trgb
+0.000000 0.002881 0.000864 312 216 369 204 368 207 Trgb
+0.000000 0.005761 0.001728 312 216 368 207 312 219 Trgb
+0.000000 0.014859 0.004458 313 222 370 210 372 209 Trgb
+0.000000 0.011978 0.003594 313 222 372 209 315 221 Trgb
+0.000000 0.000000 0.000000 369 208 369 209 370 207 Trgb
+0.000000 0.000000 0.000000 369 209 369 207 370 207 Trgb
+0.000000 0.000000 0.000000 369 207 371 205 370 207 Trgb
+0.000000 0.000000 0.000000 371 205 372 205 370 207 Trgb
+0.000000 0.000000 0.000000 372 205 371 206 370 207 Trgb
+0.000000 0.000000 0.000000 371 206 369 208 370 207 Trgb
+0.000000 0.033825 0.010148 371 206 410 235 409 237 Trgb
+0.000000 0.027366 0.008210 371 206 409 237 369 208 Trgb
+0.000000 0.026347 0.007904 372 205 411 234 410 235 Trgb
+0.000000 0.033316 0.009995 372 205 410 235 371 206 Trgb
+0.000000 0.013938 0.004181 369 208 409 237 408 237 Trgb
+0.000000 0.006969 0.002091 369 208 408 237 369 209 Trgb
+0.402052 0.138238 0.108058 417 254 429 236 426 248 Trgb
+0.324052 0.111419 0.087094 402 249 413 237 417 254 Trgb
+0.415721 0.142938 0.111732 429 236 417 254 413 237 Trgb
+0.399297 0.137291 0.107317 413 237 421 224 429 236 Trgb
+0.303041 0.104195 0.081447 421 224 422 218 429 236 Trgb
+0.196628 0.067607 0.052847 397 253 402 249 417 254 Trgb
+0.000000 0.000000 0.000000 405 218 392 236 392 223 Trgb
+0.195487 0.067215 0.052540 413 237 402 249 392 236 Trgb
+0.127423 0.043812 0.034247 392 236 405 218 413 237 Trgb
+0.239564 0.082370 0.064387 421 224 413 237 405 218 Trgb
+0.000000 0.000000 0.000000 402 218 405 218 392 223 Trgb
+0.031167 0.010716 0.008377 405 218 402 218 422 218 Trgb
+0.143308 0.049274 0.038516 422 218 421 224 405 218 Trgb
+0.000000 0.000000 0.000000 392 236 390 235 392 223 Trgb
+0.068063 0.023402 0.018293 402 249 397 253 392 236 Trgb
+0.000000 0.000000 0.000000 390 235 392 236 397 253 Trgb
+0.000000 0.699725 0.209917 388 238 390 237 389 239 Trgb
+0.000000 0.699725 0.209917 390 237 392 238 389 239 Trgb
+0.000000 0.699725 0.209917 392 238 391 240 389 239 Trgb
+0.000000 0.699725 0.209917 391 240 388 241 389 239 Trgb
+0.000000 0.699725 0.209917 388 241 387 240 389 239 Trgb
+0.000000 0.699725 0.209917 387 240 388 238 389 239 Trgb
+0.000000 0.011031 0.003309 371 205 390 237 388 238 Trgb
+0.000000 0.005515 0.001655 371 205 388 238 369 206 Trgb
+0.000000 0.017121 0.005136 372 206 392 238 390 237 Trgb
+0.000000 0.016834 0.005050 372 206 390 237 371 205 Trgb
+0.000000 0.000000 0.000000 369 206 388 238 387 240 Trgb
+0.000000 0.000000 0.000000 369 206 387 240 368 207 Trgb
+0.349698 0.218700 0.113680 387 242 406 239 397 252 Trgb
+0.133776 0.083663 0.043488 379 231 393 224 387 242 Trgb
+0.271918 0.170056 0.088395 406 239 387 242 393 224 Trgb
+0.255724 0.159929 0.083131 393 224 405 226 406 239 Trgb
+0.354064 0.221431 0.115099 406 239 402 254 397 252 Trgb
+0.280651 0.175518 0.091234 402 254 406 239 407 236 Trgb
+0.260091 0.162660 0.084550 405 226 407 236 406 239 Trgb
+0.250481 0.156650 0.081426 384 257 387 242 397 252 Trgb
+0.086350 0.054003 0.028071 371 242 379 231 387 242 Trgb
+0.125275 0.078347 0.040724 387 242 384 257 371 242 Trgb
+0.038925 0.024344 0.012654 374 251 371 242 384 257 Trgb
+0.047425 0.029660 0.015417 393 224 379 231 376 224 Trgb
+0.047425 0.029660 0.015417 376 224 394 221 393 224 Trgb
+0.117582 0.073536 0.038224 405 226 393 224 394 221 Trgb
+0.254847 0.159381 0.082846 402 254 384 257 397 252 Trgb
+0.000000 0.000000 0.000000 379 231 371 242 376 224 Trgb
+0.000000 0.682373 0.204712 391 162 392 163 390 162 Trgb
+0.000000 0.682373 0.204712 392 163 391 163 390 162 Trgb
+0.000000 0.682373 0.204712 391 163 389 162 390 162 Trgb
+0.000000 0.682373 0.204712 389 162 388 161 390 162 Trgb
+0.000000 0.682373 0.204712 388 161 389 161 390 162 Trgb
+0.000000 0.682373 0.204712 389 161 391 162 390 162 Trgb
+0.000000 0.137665 0.041299 371 208 391 163 392 163 Trgb
+0.000000 0.128141 0.038442 371 208 392 163 372 208 Trgb
+0.000000 0.068110 0.020433 369 207 389 162 391 163 Trgb
+0.000000 0.107649 0.032295 369 207 391 163 371 208 Trgb
+0.000000 0.009524 0.002857 368 206 388 161 389 162 Trgb
+0.000000 0.019047 0.005714 368 206 389 162 369 207 Trgb
+0.163081 0.086165 0.049849 403 150 407 155 399 143 Trgb
+0.357741 0.189016 0.109351 408 169 406 171 407 155 Trgb
+0.201687 0.106563 0.061650 407 155 389 148 399 143 Trgb
+0.192638 0.101782 0.058884 394 168 380 161 389 148 Trgb
+0.292072 0.154319 0.089278 389 148 407 155 394 168 Trgb
+0.396347 0.209413 0.121152 406 171 394 168 407 155 Trgb
+0.311639 0.164657 0.095259 406 171 408 169 395 181 Trgb
+0.074953 0.039602 0.022911 389 148 385 143 399 143 Trgb
+0.069652 0.036801 0.021291 380 161 372 155 389 148 Trgb
+0.042354 0.022378 0.012946 385 143 389 148 372 155 Trgb
+0.080631 0.042602 0.024647 377 174 395 181 382 180 Trgb
+0.150284 0.079404 0.045937 380 161 394 168 377 174 Trgb
+0.203616 0.107582 0.062240 395 181 377 174 394 168 Trgb
+0.350245 0.185055 0.107060 394 168 406 171 395 181 Trgb
+0.027298 0.014423 0.008344 372 155 380 161 377 174 Trgb
+0.000000 0.000000 0.000000 377 174 374 169 372 155 Trgb
+0.000000 0.697969 0.209391 293 250 295 248 296 251 Trgb
+0.000000 0.697969 0.209391 295 248 299 249 296 251 Trgb
+0.000000 0.697969 0.209391 299 249 299 253 296 251 Trgb
+0.000000 0.697969 0.209391 299 253 297 254 296 251 Trgb
+0.000000 0.697969 0.209391 297 254 293 253 296 251 Trgb
+0.000000 0.697969 0.209391 293 253 293 250 296 251 Trgb
+0.000000 0.000000 0.000000 313 215 295 248 293 250 Trgb
+0.000000 0.000000 0.000000 313 215 293 250 310 217 Trgb
+0.000000 0.029354 0.008806 316 217 299 249 295 248 Trgb
+0.000000 0.014677 0.004403 316 217 295 248 313 215 Trgb
+0.000000 0.046680 0.014004 317 220 299 253 299 249 Trgb
+0.000000 0.045355 0.013607 317 220 299 249 316 217 Trgb
+0.156998 0.121144 0.055628 280 252 297 247 291 260 Trgb
+0.000000 0.000000 0.000000 279 244 288 235 280 252 Trgb
+0.084838 0.065463 0.030060 297 247 280 252 288 235 Trgb
+0.132657 0.102362 0.047004 288 235 302 236 297 247 Trgb
+0.278211 0.214675 0.098577 297 247 305 263 291 260 Trgb
+0.324474 0.250373 0.114969 312 246 313 259 305 263 Trgb
+0.310052 0.239244 0.109859 305 263 297 247 312 246 Trgb
+0.236658 0.182612 0.083854 302 236 312 246 297 247 Trgb
+0.089372 0.068962 0.031667 289 268 280 252 291 260 Trgb
+0.000000 0.000000 0.000000 280 256 279 244 280 252 Trgb
+0.017212 0.013281 0.006099 280 252 289 268 280 256 Trgb
+0.047819 0.036898 0.016943 302 236 288 235 303 235 Trgb
+0.210585 0.162493 0.074615 305 263 289 268 291 260 Trgb
+0.256848 0.198191 0.091008 313 259 304 267 305 263 Trgb
+0.174799 0.134880 0.061936 289 268 305 263 304 267 Trgb
+0.151820 0.117148 0.053794 312 246 302 236 303 235 Trgb
+0.000000 0.699942 0.209983 348 304 347 302 351 301 Trgb
+0.000000 0.699942 0.209983 347 302 349 298 351 301 Trgb
+0.000000 0.699942 0.209983 349 298 353 297 351 301 Trgb
+0.000000 0.699942 0.209983 353 297 355 300 351 301 Trgb
+0.000000 0.699942 0.209983 355 300 352 303 351 301 Trgb
+0.000000 0.699942 0.209983 352 303 348 304 351 301 Trgb
+0.000000 0.000000 0.000000 298 255 347 302 348 304 Trgb
+0.000000 0.000000 0.000000 298 255 348 304 300 258 Trgb
+0.000000 0.001821 0.000546 301 252 349 298 347 302 Trgb
+0.000000 0.000911 0.000273 301 252 347 302 298 255 Trgb
+0.000000 0.006793 0.002038 304 251 353 297 349 298 Trgb
+0.000000 0.004762 0.001429 304 251 349 298 301 252 Trgb
+0.000000 0.018322 0.005497 350 301 386 356 384 357 Trgb
+0.000000 0.009161 0.002748 350 301 384 357 348 302 Trgb
+0.000000 0.035636 0.010691 353 299 389 354 386 356 Trgb
+0.000000 0.031560 0.009468 353 299 386 356 350 301 Trgb
+0.000000 0.021390 0.006417 353 299 390 354 389 354 Trgb
+0.000000 0.030551 0.009165 353 299 389 354 353 299 Trgb
+0.000000 0.677885 0.203366 386 356 385 355 387 356 Trgb
+0.000000 0.677885 0.203366 385 355 386 354 387 356 Trgb
+0.000000 0.677885 0.203366 386 354 388 355 387 356 Trgb
+0.000000 0.677885 0.203366 388 355 389 356 387 356 Trgb
+0.000000 0.677885 0.203366 389 356 388 357 387 356 Trgb
+0.000000 0.677885 0.203366 388 357 386 356 387 356 Trgb
+0.000000 0.144797 0.043439 388 357 369 396 367 395 Trgb
+0.000000 0.115047 0.034514 388 357 367 395 386 356 Trgb
+0.000000 0.117682 0.035305 389 356 369 395 369 396 Trgb
+0.000000 0.146114 0.043834 389 356 369 396 388 357 Trgb
+0.000000 0.056865 0.017059 386 356 367 395 365 394 Trgb
+0.000000 0.028432 0.008530 386 356 365 394 385 355 Trgb
+0.009232 0.148327 0.031512 363 401 370 403 364 402 Trgb
+0.022270 0.357806 0.076015 365 397 371 399 363 401 Trgb
+0.022149 0.355867 0.075603 370 403 363 401 371 399 Trgb
+0.031065 0.499105 0.106034 371 399 375 399 370 403 Trgb
+0.009353 0.150267 0.031924 360 393 365 397 363 401 Trgb
+0.002795 0.044900 0.009539 363 401 359 396 360 393 Trgb
+0.000000 0.000000 0.000000 360 390 360 393 359 396 Trgb
+0.019209 0.308621 0.065566 376 392 369 391 371 387 Trgb
+0.025955 0.417018 0.088595 371 399 365 397 369 391 Trgb
+0.029520 0.474291 0.100762 369 391 376 392 371 399 Trgb
+0.034750 0.558317 0.118613 375 399 371 399 376 392 Trgb
+0.009086 0.145981 0.031013 369 391 365 386 371 387 Trgb
+0.013038 0.209479 0.044503 365 397 360 393 369 391 Trgb
+0.006480 0.104112 0.022118 365 386 369 391 360 393 Trgb
+0.000000 0.000000 0.000000 360 393 360 390 365 386 Trgb
+0.000000 0.698602 0.209581 389 395 390 396 387 396 Trgb
+0.000000 0.698602 0.209581 390 396 388 397 387 396 Trgb
+0.000000 0.698602 0.209581 388 397 386 397 387 396 Trgb
+0.000000 0.698602 0.209581 386 397 385 396 387 396 Trgb
+0.000000 0.698602 0.209581 385 396 387 395 387 396 Trgb
+0.000000 0.698602 0.209581 387 395 389 395 387 396 Trgb
+0.000000 0.037233 0.011170 389 356 390 396 389 395 Trgb
+0.000000 0.038872 0.011662 389 356 389 395 389 355 Trgb
+0.000000 0.003278 0.000983 386 354 387 395 385 396 Trgb
+0.000000 0.001639 0.000492 386 354 385 396 385 355 Trgb
+0.000000 0.028646 0.008594 389 355 389 395 387 395 Trgb
+0.000000 0.016781 0.005034 389 355 387 395 386 354 Trgb
+0.404995 0.114698 0.103939 398 404 399 414 388 415 Trgb
+0.435739 0.123405 0.111829 402 388 409 395 398 404 Trgb
+0.425131 0.120400 0.109106 399 414 398 404 409 395 Trgb
+0.324162 0.091805 0.083193 376 404 398 404 388 415 Trgb
+0.354905 0.100512 0.091083 386 385 402 388 398 404 Trgb
+0.263463 0.074615 0.067616 398 404 376 404 386 385 Trgb
+0.091315 0.025861 0.023435 371 389 386 385 376 404 Trgb
+0.276324 0.078257 0.070916 409 395 402 388 397 377 Trgb
+0.152013 0.043051 0.039013 377 414 376 404 388 415 Trgb
+0.039290 0.011127 0.010084 376 404 377 414 366 396 Trgb
+0.039290 0.011127 0.010084 366 396 371 389 376 404 Trgb
+0.195491 0.055364 0.050171 402 388 386 385 397 377 Trgb
+0.064759 0.018340 0.016620 376 378 397 377 386 385 Trgb
+0.052024 0.014734 0.013352 386 385 371 389 376 378 Trgb
+0.000000 0.000000 0.000000 371 389 366 396 376 378 Trgb
+0.000000 0.699996 0.209999 421 374 420 376 419 375 Trgb
+0.000000 0.699996 0.209999 420 376 419 377 419 375 Trgb
+0.000000 0.699996 0.209999 419 377 418 376 419 375 Trgb
+0.000000 0.699996 0.209999 418 376 418 374 419 375 Trgb
+0.000000 0.699996 0.209999 418 374 420 373 419 375 Trgb
+0.000000 0.699996 0.209999 420 373 421 374 419 375 Trgb
+0.000000 0.000000 0.000000 385 357 418 376 419 377 Trgb
+0.000000 0.000000 0.000000 385 357 419 377 386 358 Trgb
+0.000000 0.000000 0.000000 386 355 418 374 418 376 Trgb
+0.000000 0.000000 0.000000 386 355 418 376 385 357 Trgb
+0.000000 0.001176 0.000353 388 354 420 373 418 374 Trgb
+0.000000 0.000588 0.000176 388 354 418 374 386 355 Trgb
+0.289362 0.280459 0.113964 436 374 429 389 431 382 Trgb
+0.278122 0.269564 0.109537 429 389 419 386 431 382 Trgb
+0.077960 0.075561 0.030704 412 390 407 384 419 386 Trgb
+0.159921 0.155000 0.062984 419 386 429 389 412 390 Trgb
+0.292601 0.283598 0.115240 426 371 436 374 431 382 Trgb
+0.104389 0.101177 0.041113 426 360 431 366 436 374 Trgb
+0.181640 0.176051 0.071538 436 374 426 371 426 360 Trgb
+0.094729 0.091814 0.037309 417 362 426 360 426 371 Trgb
+0.281360 0.272703 0.110813 419 386 426 371 431 382 Trgb
+0.077960 0.075561 0.030704 407 384 409 372 419 386 Trgb
+0.163159 0.158139 0.064260 426 371 419 386 409 372 Trgb
+0.087489 0.084798 0.034457 409 372 417 362 426 371 Trgb
+0.009530 0.009236 0.003753 426 360 417 362 410 361 Trgb
+0.000000 0.000000 0.000000 409 372 407 384 403 376 Trgb
+0.000000 0.000000 0.000000 403 376 410 361 409 372 Trgb
+0.002290 0.002219 0.000902 417 362 409 372 410 361 Trgb
+0.000000 0.697280 0.209184 347 363 350 363 349 364 Trgb
+0.000000 0.697280 0.209184 350 363 352 364 349 364 Trgb
+0.000000 0.697280 0.209184 352 364 351 365 349 364 Trgb
+0.000000 0.697280 0.209184 351 365 348 365 349 364 Trgb
+0.000000 0.697280 0.209184 348 365 346 364 349 364 Trgb
+0.000000 0.697280 0.209184 346 364 347 363 349 364 Trgb
+0.000000 0.034648 0.010394 352 300 350 363 347 363 Trgb
+0.000000 0.017324 0.005197 352 300 347 363 349 300 Trgb
+0.000000 0.053795 0.016138 354 301 352 364 350 363 Trgb
+0.000000 0.052883 0.015865 354 301 350 363 352 300 Trgb
+0.000000 0.000000 0.000000 349 300 347 363 346 364 Trgb
+0.000000 0.000000 0.000000 349 300 346 364 348 301 Trgb
+0.308371 0.106028 0.082880 340 375 360 376 349 384 Trgb
+0.157725 0.054231 0.042391 336 359 352 359 340 375 Trgb
+0.324928 0.111721 0.087330 360 376 340 375 352 359 Trgb
+0.420222 0.144486 0.112941 352 359 366 361 360 376 Trgb
+0.317849 0.109287 0.085427 360 376 358 381 349 384 Trgb
+0.343885 0.118239 0.092425 358 381 360 376 369 365 Trgb
+0.429700 0.147745 0.115489 366 361 369 365 360 376 Trgb
+0.141167 0.048538 0.037941 337 380 340 375 349 384 Trgb
+0.055697 0.019150 0.014970 329 363 336 359 340 375 Trgb
+0.055697 0.019150 0.014970 340 375 337 380 329 363 Trgb
+0.046330 0.015930 0.012452 361 348 341 347 350 344 Trgb
+0.102027 0.035080 0.027422 352 359 336 359 341 347 Trgb
+0.148358 0.051010 0.039874 341 347 361 348 352 359 Trgb
+0.299349 0.102926 0.080455 366 361 352 359 361 348 Trgb
+0.308827 0.106185 0.083002 369 365 366 361 361 348 Trgb
+0.000000 0.000000 0.000000 336 359 329 363 341 347 Trgb
+0.000000 0.698661 0.209598 356 291 357 294 353 293 Trgb
+0.000000 0.698661 0.209598 357 294 354 296 353 293 Trgb
+0.000000 0.698661 0.209598 354 296 351 295 353 293 Trgb
+0.000000 0.698661 0.209598 351 295 350 292 353 293 Trgb
+0.000000 0.698661 0.209598 350 292 353 290 353 293 Trgb
+0.000000 0.698661 0.209598 353 290 356 291 353 293 Trgb
+0.000000 0.033302 0.009991 352 304 354 296 357 294 Trgb
+0.000000 0.037838 0.011351 352 304 357 294 354 302 Trgb
+0.000000 0.009589 0.002877 348 303 351 295 354 296 Trgb
+0.000000 0.019177 0.005753 348 303 354 296 352 304 Trgb
+0.000000 0.000000 0.000000 348 300 350 292 351 295 Trgb
+0.000000 0.000000 0.000000 348 300 351 295 348 303 Trgb
+0.000000 0.000000 0.000000 328 260 328 261 326 261 Trgb
+0.000000 0.000000 0.000000 328 261 326 263 326 261 Trgb
+0.000000 0.000000 0.000000 326 263 324 263 326 261 Trgb
+0.000000 0.000000 0.000000 324 263 324 262 326 261 Trgb
+0.000000 0.000000 0.000000 324 262 326 260 326 261 Trgb
+0.000000 0.000000 0.000000 326 260 328 260 326 261 Trgb
+0.000000 0.115033 0.034510 355 293 328 261 328 260 Trgb
+0.000000 0.073975 0.022192 355 293 328 260 355 291 Trgb
+0.000000 0.134147 0.040244 354 295 326 263 328 261 Trgb
+0.000000 0.145119 0.043536 354 295 328 261 355 293 Trgb
+0.000000 0.041058 0.012317 352 295 324 263 326 263 Trgb
+0.000000 0.082116 0.024635 352 295 326 263 354 295 Trgb
+0.012930 0.111978 0.024982 327 251 325 259 320 255 Trgb
+0.024464 0.211872 0.047267 334 254 335 258 327 251 Trgb
+0.032663 0.282874 0.063107 325 259 327 251 335 258 Trgb
+0.055838 0.483582 0.107884 335 258 331 265 325 259 Trgb
+0.012930 0.111978 0.024982 325 259 317 262 320 255 Trgb
+0.013042 0.112948 0.025198 324 269 319 269 317 262 Trgb
+0.025972 0.224926 0.050180 317 262 325 259 324 269 Trgb
+0.049147 0.425634 0.094956 331 265 324 269 325 259 Trgb
+0.000000 0.000000 0.000000 319 254 327 251 320 255 Trgb
+0.046381 0.401681 0.089613 336 261 334 269 335 258 Trgb
+0.062754 0.543471 0.121245 331 265 335 258 334 269 Trgb
+0.000000 0.000000 0.000000 317 262 319 254 320 255 Trgb
+0.013154 0.113918 0.025414 319 269 324 269 325 272 Trgb
+0.032999 0.285785 0.063757 334 269 325 272 324 269 Trgb
+0.056063 0.485523 0.108317 324 269 331 265 334 269 Trgb
+0.000000 0.677401 0.203220 372 250 370 250 370 249 Trgb
+0.000000 0.677401 0.203220 370 250 368 249 370 249 Trgb
+0.000000 0.677401 0.203220 368 249 367 248 370 249 Trgb
+0.000000 0.677401 0.203220 367 248 369 248 370 249 Trgb
+0.000000 0.677401 0.203220 369 248 371 249 370 249 Trgb
+0.000000 0.677401 0.203220 371 249 372 250 370 249 Trgb
+0.000000 0.155473 0.046642 354 294 370 250 372 250 Trgb
+0.000000 0.146657 0.043997 354 294 372 250 356 294 Trgb
+0.000000 0.072397 0.021719 352 293 368 249 370 250 Trgb
+0.000000 0.118344 0.035503 352 293 370 250 354 294 Trgb
+0.000000 0.008817 0.002645 351 292 367 248 368 249 Trgb
+0.000000 0.017634 0.005290 351 292 368 249 352 293 Trgb
+0.253712 0.080223 0.066787 390 240 373 240 377 229 Trgb
+0.428856 0.135602 0.112892 390 257 383 259 390 240 Trgb
+0.393311 0.124363 0.103535 373 240 390 240 383 259 Trgb
+0.382168 0.120840 0.100601 383 259 367 256 373 240 Trgb
+0.133898 0.042338 0.035247 373 240 360 230 377 229 Trgb
+0.000000 0.000000 0.000000 353 248 349 241 360 230 Trgb
+0.100475 0.031770 0.026449 360 230 373 240 353 248 Trgb
+0.209145 0.066131 0.055055 367 256 353 248 373 240 Trgb
+0.125755 0.039763 0.033104 363 268 379 268 362 269 Trgb
+0.381589 0.120657 0.100449 383 259 390 257 379 268 Trgb
+0.298777 0.094472 0.078650 379 268 363 268 383 259 Trgb
+0.334900 0.105894 0.088159 367 256 383 259 363 268 Trgb
+0.053208 0.016824 0.014006 350 258 363 268 362 269 Trgb
+0.000000 0.000000 0.000000 349 241 353 248 350 258 Trgb
+0.053208 0.016824 0.014006 363 268 350 258 353 248 Trgb
+0.161878 0.051185 0.042613 353 248 367 256 363 268 Trgb
+0.000000 0.699775 0.209932 374 329 375 328 376 328 Trgb
+0.000000 0.699775 0.209932 375 328 377 327 376 328 Trgb
+0.000000 0.699775 0.209932 377 327 378 327 376 328 Trgb
+0.000000 0.699775 0.209932 378 327 378 329 376 328 Trgb
+0.000000 0.699775 0.209932 378 329 375 330 376 328 Trgb
+0.000000 0.699775 0.209932 375 330 374 329 376 328 Trgb
+0.000000 0.000000 0.000000 352 292 375 328 374 329 Trgb
+0.000000 0.000000 0.000000 352 292 374 329 351 294 Trgb
+0.000000 0.010089 0.003027 354 291 377 327 375 328 Trgb
+0.000000 0.005044 0.001513 354 291 375 328 352 292 Trgb
+0.000000 0.015452 0.004635 356 292 378 327 377 327 Trgb
+0.000000 0.015292 0.004588 356 292 377 327 354 291 Trgb
+0.251815 0.220453 0.094454 371 344 380 331 385 342 Trgb
+0.043448 0.038037 0.016297 360 337 362 328 371 344 Trgb
+0.140870 0.123326 0.052839 380 331 371 344 362 328 Trgb
+0.124253 0.108778 0.046606 362 328 373 319 380 331 Trgb
+0.321818 0.281738 0.120711 380 331 393 331 385 342 Trgb
+0.216925 0.189909 0.081367 385 315 392 319 393 331 Trgb
+0.264847 0.231862 0.099342 393 331 380 331 385 315 Trgb
+0.178226 0.156030 0.066851 373 319 385 315 380 331 Trgb
+0.213871 0.187235 0.080221 384 344 371 344 385 342 Trgb
+0.000000 0.000000 0.000000 362 328 360 337 359 325 Trgb
+0.000000 0.000000 0.000000 359 325 368 312 362 328 Trgb
+0.026831 0.023489 0.010064 373 319 362 328 368 312 Trgb
+0.283874 0.248520 0.106479 393 331 384 344 385 342 Trgb
+0.103473 0.090587 0.038812 392 319 385 315 381 313 Trgb
+0.053974 0.047252 0.020245 368 312 381 313 385 315 Trgb
+0.080804 0.070741 0.030309 385 315 373 319 368 312 Trgb
+0.000000 0.665402 0.199621 241 278 244 280 242 282 Trgb
+0.000000 0.665402 0.199621 244 280 245 284 242 282 Trgb
+0.000000 0.665402 0.199621 245 284 243 286 242 282 Trgb
+0.000000 0.665402 0.199621 243 286 240 284 242 282 Trgb
+0.000000 0.665402 0.199621 240 284 239 280 242 282 Trgb
+0.000000 0.665402 0.199621 239 280 241 278 242 282 Trgb
+0.000000 0.101649 0.030495 305 252 244 280 241 278 Trgb
+0.000000 0.050824 0.015247 305 252 241 278 301 250 Trgb
+0.000000 0.191076 0.057323 305 257 245 284 244 280 Trgb
+0.000000 0.171775 0.051532 305 257 244 280 305 252 Trgb
+0.000000 0.108729 0.032619 303 259 243 286 245 284 Trgb
+0.000000 0.159553 0.047866 303 259 245 284 305 257 Trgb
+0.000000 0.000000 0.000000 183 257 182 260 181 259 Trgb
+0.000000 0.000000 0.000000 182 260 180 262 181 259 Trgb
+0.000000 0.000000 0.000000 180 262 180 261 181 259 Trgb
+0.000000 0.000000 0.000000 180 261 181 258 181 259 Trgb
+0.000000 0.000000 0.000000 181 258 182 256 181 259 Trgb
+0.000000 0.000000 0.000000 182 256 183 257 181 259 Trgb
+0.000000 0.058545 0.017564 243 283 182 260 183 257 Trgb
+0.000000 0.052058 0.015618 243 283 183 257 243 280 Trgb
+0.000000 0.034650 0.010395 241 285 180 262 182 260 Trgb
+0.000000 0.049841 0.014952 241 285 182 260 243 283 Trgb
+0.000000 0.030381 0.009114 243 280 183 257 182 256 Trgb
+0.000000 0.015191 0.004557 243 280 182 256 243 279 Trgb
+0.000000 0.699531 0.209859 182 258 183 258 181 259 Trgb
+0.000000 0.699531 0.209859 183 258 182 259 181 259 Trgb
+0.000000 0.699531 0.209859 182 259 180 260 181 259 Trgb
+0.000000 0.699531 0.209859 180 260 179 260 181 259 Trgb
+0.000000 0.699531 0.209859 179 260 180 259 181 259 Trgb
+0.000000 0.699531 0.209859 180 259 182 258 181 259 Trgb
+0.000000 0.018127 0.005438 180 259 158 222 160 221 Trgb
+0.000000 0.021833 0.006550 180 259 160 221 182 258 Trgb
+0.000000 0.004807 0.001442 179 260 157 224 158 222 Trgb
+0.000000 0.009615 0.002884 179 260 158 222 180 259 Trgb
+0.000000 0.020731 0.006219 182 258 160 221 161 221 Trgb
+0.000000 0.015923 0.004777 182 258 161 221 183 258 Trgb
+0.000000 0.000000 0.000000 158 206 144 215 151 210 Trgb
+0.125687 0.116237 0.048385 165 212 154 217 158 206 Trgb
+0.054272 0.050191 0.020893 144 215 158 206 154 217 Trgb
+0.059609 0.055128 0.022947 154 217 145 225 144 215 Trgb
+0.005337 0.004936 0.002055 145 225 145 232 144 215 Trgb
+0.118139 0.109256 0.045479 173 213 165 212 158 206 Trgb
+0.290405 0.268570 0.111795 155 233 169 224 167 235 Trgb
+0.245347 0.226900 0.094449 154 217 165 212 169 224 Trgb
+0.246867 0.228306 0.095035 169 224 155 233 154 217 Trgb
+0.132545 0.122579 0.051025 145 225 154 217 155 233 Trgb
+0.189409 0.175168 0.072915 160 239 155 233 167 235 Trgb
+0.091599 0.084712 0.035262 155 233 160 239 145 232 Trgb
+0.078273 0.072388 0.030132 145 232 145 225 155 233 Trgb
+0.282857 0.261589 0.108889 169 224 174 230 167 235 Trgb
+0.237798 0.219919 0.091543 165 212 173 213 169 224 Trgb
+0.231771 0.214345 0.089223 174 230 169 224 173 213 Trgb
+0.000000 0.687742 0.206322 155 248 154 246 156 245 Trgb
+0.000000 0.687742 0.206322 154 246 155 244 156 245 Trgb
+0.000000 0.687742 0.206322 155 244 157 243 156 245 Trgb
+0.000000 0.687742 0.206322 157 243 158 244 156 245 Trgb
+0.000000 0.687742 0.206322 158 244 157 247 156 245 Trgb
+0.000000 0.687742 0.206322 157 247 155 248 156 245 Trgb
+0.000000 0.066457 0.019937 183 258 158 244 157 243 Trgb
+0.000000 0.033228 0.009969 183 258 157 243 182 257 Trgb
+0.000000 0.115018 0.034505 183 261 157 247 158 244 Trgb
+0.000000 0.107351 0.032205 183 261 158 244 183 258 Trgb
+0.000000 0.056227 0.016868 181 261 155 248 157 247 Trgb
+0.000000 0.089455 0.026837 181 261 157 247 183 261 Trgb
+0.095233 0.034446 0.025936 143 255 136 238 145 239 Trgb
+0.080765 0.029213 0.021996 149 265 139 256 143 255 Trgb
+0.051549 0.018645 0.014039 136 238 143 255 139 256 Trgb
+0.053915 0.019501 0.014683 136 238 153 226 145 239 Trgb
+0.010230 0.003700 0.002786 153 226 136 238 149 228 Trgb
+0.241449 0.087332 0.065756 160 244 143 255 145 239 Trgb
+0.216750 0.078399 0.059030 163 263 149 265 143 255 Trgb
+0.333750 0.120718 0.090894 143 255 160 244 163 263 Trgb
+0.445297 0.161065 0.121272 173 250 163 263 160 244 Trgb
+0.200131 0.072388 0.054504 153 226 160 244 145 239 Trgb
+0.104898 0.037942 0.028568 163 225 173 234 153 226 Trgb
+0.251114 0.090828 0.068388 160 244 153 226 173 234 Trgb
+0.403979 0.146120 0.110020 173 234 173 250 160 244 Trgb
+0.165202 0.059754 0.044991 149 265 163 263 159 264 Trgb
+0.383518 0.138719 0.104448 163 263 173 250 176 253 Trgb
+0.342200 0.123775 0.093195 173 250 173 234 176 253 Trgb
+0.000000 0.000000 0.000000 138 279 137 277 139 279 Trgb
+0.000000 0.000000 0.000000 137 277 138 277 139 279 Trgb
+0.000000 0.000000 0.000000 138 277 139 279 139 279 Trgb
+0.000000 0.000000 0.000000 139 279 140 281 139 279 Trgb
+0.000000 0.000000 0.000000 140 281 139 281 139 279 Trgb
+0.000000 0.000000 0.000000 139 281 138 279 139 279 Trgb
+0.000000 0.007901 0.002370 181 257 138 277 137 277 Trgb
+0.000000 0.003951 0.001185 181 257 137 277 180 257 Trgb
+0.000000 0.086361 0.025908 182 259 139 279 138 277 Trgb
+0.000000 0.049106 0.014732 182 259 138 277 181 257 Trgb
+0.000000 0.115714 0.034714 182 261 140 281 139 279 Trgb
+0.000000 0.119664 0.035899 182 261 139 279 182 259 Trgb
+0.103705 0.001023 0.020945 115 270 125 287 116 290 Trgb
+0.383332 0.003780 0.077422 134 263 143 280 125 287 Trgb
+0.180283 0.001778 0.036412 125 287 115 270 134 263 Trgb
+0.076578 0.000755 0.015467 128 256 134 263 115 270 Trgb
+0.130831 0.001290 0.026424 125 287 130 303 116 290 Trgb
+0.517330 0.005102 0.104486 143 280 149 296 125 287 Trgb
+0.341407 0.003367 0.068955 130 303 125 287 149 296 Trgb
+0.332454 0.003279 0.067146 149 296 149 301 130 303 Trgb
+0.239839 0.002365 0.048441 158 272 147 256 161 269 Trgb
+0.463077 0.004567 0.093529 143 280 134 263 158 272 Trgb
+0.260028 0.002564 0.052519 147 256 158 272 134 263 Trgb
+0.076578 0.000755 0.015467 134 263 128 256 147 256 Trgb
+0.346710 0.003419 0.070026 162 287 158 272 161 269 Trgb
+0.597075 0.005888 0.120593 149 296 143 280 158 272 Trgb
+0.500898 0.004940 0.101168 158 272 162 287 149 296 Trgb
+0.412199 0.004065 0.083253 149 301 149 296 162 287 Trgb
+0.000000 0.698970 0.209691 239 286 235 285 237 282 Trgb
+0.000000 0.698970 0.209691 235 285 233 282 237 282 Trgb
+0.000000 0.698970 0.209691 233 282 235 279 237 282 Trgb
+0.000000 0.698970 0.209691 235 279 239 279 237 282 Trgb
+0.000000 0.698970 0.209691 239 279 241 283 237 282 Trgb
+0.000000 0.698970 0.209691 241 283 239 286 237 282 Trgb
+0.000000 0.004282 0.001285 244 279 239 279 235 279 Trgb
+0.000000 0.002141 0.000642 244 279 235 279 241 279 Trgb
+0.000000 0.025877 0.007763 245 282 241 283 239 279 Trgb
+0.000000 0.016150 0.004845 245 282 239 279 244 279 Trgb
+0.000000 0.031322 0.009397 244 285 239 286 241 283 Trgb
+0.000000 0.033463 0.010039 244 285 241 283 245 282 Trgb
+0.000000 0.699983 0.209995 269 294 268 292 270 291 Trgb
+0.000000 0.699983 0.209995 268 292 269 290 270 291 Trgb
+0.000000 0.699983 0.209995 269 290 270 289 270 291 Trgb
+0.000000 0.699983 0.209995 270 289 272 290 270 291 Trgb
+0.000000 0.699983 0.209995 272 290 271 293 270 291 Trgb
+0.000000 0.699983 0.209995 271 293 269 294 270 291 Trgb
+0.000000 0.002735 0.000821 235 283 268 292 269 294 Trgb
+0.000000 0.003769 0.001131 235 283 269 294 236 285 Trgb
+0.000000 0.000567 0.000170 236 281 269 290 268 292 Trgb
+0.000000 0.001134 0.000340 236 281 268 292 235 283 Trgb
+0.000000 0.000000 0.000000 238 280 270 289 269 290 Trgb
+0.000000 0.000000 0.000000 238 280 269 290 236 281 Trgb
+0.376135 0.200455 0.115318 276 308 269 291 284 295 Trgb
+0.154087 0.082118 0.047241 265 311 256 303 276 308 Trgb
+0.237541 0.126594 0.072827 269 291 276 308 256 303 Trgb
+0.116308 0.061985 0.035659 256 303 255 288 269 291 Trgb
+0.346879 0.184863 0.106348 269 291 283 279 284 295 Trgb
+0.091976 0.049017 0.028199 263 274 275 271 283 279 Trgb
+0.196118 0.104518 0.060127 283 279 269 291 263 274 Trgb
+0.104142 0.055501 0.031929 255 288 263 274 269 291 Trgb
+0.381060 0.203080 0.116828 290 296 276 308 284 295 Trgb
+0.012166 0.006484 0.003730 255 288 256 303 250 286 Trgb
+0.351803 0.187488 0.107858 283 279 290 296 284 295 Trgb
+0.091976 0.049017 0.028199 275 271 284 279 283 279 Trgb
+0.201042 0.107142 0.061637 290 296 283 279 284 279 Trgb
+0.000000 0.000000 0.000000 263 274 255 288 250 286 Trgb
+0.000000 0.696680 0.209004 220 322 221 321 222 322 Trgb
+0.000000 0.696680 0.209004 221 321 224 322 222 322 Trgb
+0.000000 0.696680 0.209004 224 322 225 323 222 322 Trgb
+0.000000 0.696680 0.209004 225 323 223 324 222 322 Trgb
+0.000000 0.696680 0.209004 223 324 221 323 222 322 Trgb
+0.000000 0.696680 0.209004 221 323 220 322 222 322 Trgb
+0.000000 0.003836 0.001151 236 281 221 321 220 322 Trgb
+0.000000 0.001918 0.000575 236 281 220 322 235 282 Trgb
+0.000000 0.043010 0.012903 238 282 224 322 221 321 Trgb
+0.000000 0.024382 0.007315 238 282 221 321 236 281 Trgb
+0.000000 0.057802 0.017341 239 283 225 323 224 322 Trgb
+0.000000 0.059720 0.017916 239 283 224 322 238 282 Trgb
+0.032130 0.233204 0.053067 212 326 221 325 219 331 Trgb
+0.000000 0.000000 0.000000 212 319 216 316 212 326 Trgb
+0.019262 0.139807 0.031814 221 325 212 326 216 316 Trgb
+0.033635 0.244129 0.055553 216 316 223 317 221 325 Trgb
+0.055827 0.405196 0.092205 221 325 227 331 219 331 Trgb
+0.069102 0.501547 0.114130 231 321 233 326 227 331 Trgb
+0.067720 0.491517 0.111847 227 331 221 325 231 321 Trgb
+0.058397 0.423846 0.096448 223 317 231 321 221 325 Trgb
+0.012868 0.093396 0.021253 219 333 212 326 219 331 Trgb
+0.000000 0.000000 0.000000 216 316 212 319 217 314 Trgb
+0.001064 0.007725 0.001758 217 314 225 312 216 316 Trgb
+0.015437 0.112046 0.025497 223 317 216 316 225 312 Trgb
+0.036565 0.265389 0.060391 227 331 219 333 219 331 Trgb
+0.050904 0.369464 0.084074 233 326 231 321 232 318 Trgb
+0.031324 0.227352 0.051735 225 312 232 318 231 321 Trgb
+0.040198 0.291763 0.066392 231 321 223 317 225 312 Trgb
+0.000000 0.000000 0.000000 194 295 195 296 195 297 Trgb
+0.000000 0.000000 0.000000 195 296 196 298 195 297 Trgb
+0.000000 0.000000 0.000000 196 298 196 299 195 297 Trgb
+0.000000 0.000000 0.000000 196 299 194 299 195 297 Trgb
+0.000000 0.000000 0.000000 194 299 193 296 195 297 Trgb
+0.000000 0.000000 0.000000 193 296 194 295 195 297 Trgb
+0.000000 0.120080 0.036024 238 281 195 296 194 295 Trgb
+0.000000 0.060040 0.018012 238 281 194 295 236 280 Trgb
+0.000000 0.307224 0.092167 238 283 196 298 195 296 Trgb
+0.000000 0.243672 0.073102 238 283 195 296 238 281 Trgb
+0.000000 0.250695 0.075208 238 285 196 299 196 298 Trgb
+0.000000 0.310735 0.093220 238 285 196 298 238 283 Trgb
+0.017736 0.110162 0.025580 185 292 191 298 185 301 Trgb
+0.007836 0.048670 0.011301 191 286 195 288 185 292 Trgb
+0.025572 0.158832 0.036881 191 298 185 292 195 288 Trgb
+0.053236 0.330662 0.076779 195 288 199 295 191 298 Trgb
+0.027636 0.171654 0.039858 191 298 191 307 185 301 Trgb
+0.057770 0.358825 0.083319 201 303 199 308 191 307 Trgb
+0.058923 0.365987 0.084982 191 307 191 298 201 303 Trgb
+0.076687 0.476325 0.110603 199 295 201 303 191 298 Trgb
+0.000000 0.000000 0.000000 185 301 185 292 185 301 Trgb
+0.007836 0.048670 0.011301 195 288 191 286 199 287 Trgb
+0.029223 0.181512 0.042147 199 287 205 293 195 288 Trgb
+0.056887 0.353342 0.082046 199 295 195 288 205 293 Trgb
+0.009900 0.061492 0.014278 191 307 185 301 185 301 Trgb
+0.061421 0.381505 0.088585 199 308 201 303 204 302 Trgb
+0.066226 0.411348 0.095515 205 293 204 302 201 303 Trgb
+0.080339 0.499005 0.115869 201 303 199 295 205 293 Trgb
+0.000000 0.000000 0.000000 204 336 203 336 206 337 Trgb
+0.000000 0.000000 0.000000 203 336 206 337 206 337 Trgb
+0.000000 0.000000 0.000000 206 337 208 339 206 337 Trgb
+0.000000 0.000000 0.000000 208 339 208 339 206 337 Trgb
+0.000000 0.000000 0.000000 208 339 206 337 206 337 Trgb
+0.000000 0.000000 0.000000 206 337 204 336 206 337 Trgb
+0.000000 0.287100 0.086130 242 282 206 337 203 336 Trgb
+0.000000 0.143550 0.043065 242 282 203 336 240 280 Trgb
+0.000000 0.549999 0.165000 244 283 208 339 206 337 Trgb
+0.000000 0.490325 0.147098 244 283 206 337 242 282 Trgb
+0.000000 0.322574 0.096772 244 284 208 339 208 339 Trgb
+0.000000 0.466124 0.139837 244 284 208 339 244 283 Trgb
+0.000000 0.698197 0.209459 204 336 205 335 206 337 Trgb
+0.000000 0.698197 0.209459 205 335 207 337 206 337 Trgb
+0.000000 0.698197 0.209459 207 337 208 339 206 337 Trgb
+0.000000 0.698197 0.209459 208 339 206 339 206 337 Trgb
+0.000000 0.698197 0.209459 206 339 204 338 206 337 Trgb
+0.000000 0.698197 0.209459 204 338 204 336 206 337 Trgb
+0.000000 0.008040 0.002412 204 338 183 364 182 362 Trgb
+0.000000 0.004020 0.001206 204 338 182 362 204 336 Trgb
+0.000000 0.036178 0.010854 206 339 185 365 183 364 Trgb
+0.000000 0.024119 0.007236 206 339 183 364 204 338 Trgb
+0.000000 0.040198 0.012059 208 339 186 364 185 365 Trgb
+0.000000 0.044218 0.013265 208 339 185 365 206 339 Trgb
+0.000000 0.000000 0.000000 166 351 166 365 164 363 Trgb
+0.000000 0.000000 0.000000 172 382 164 363 166 365 Trgb
+0.121419 0.011415 0.026567 166 365 177 378 172 382 Trgb
+0.296498 0.027876 0.064875 177 378 193 382 172 382 Trgb
+0.293709 0.027614 0.064265 187 364 178 346 195 351 Trgb
+0.000000 0.000000 0.000000 166 365 166 351 178 346 Trgb
+0.171952 0.016166 0.037624 178 346 187 364 166 365 Trgb
+0.293371 0.027582 0.064191 177 378 166 365 187 364 Trgb
+0.469028 0.044097 0.102625 205 363 187 364 195 351 Trgb
+0.476578 0.044806 0.104277 203 375 193 382 205 363 Trgb
+0.522349 0.049110 0.114292 187 364 205 363 193 382 Trgb
+0.468450 0.044042 0.102498 193 382 177 378 187 364 Trgb
+0.121997 0.011470 0.026693 178 346 197 344 195 351 Trgb
+0.000000 0.000000 0.000000 166 351 176 345 178 346 Trgb
+0.000239 0.000023 0.000052 197 344 178 346 176 345 Trgb
+0.297315 0.027953 0.065054 197 344 205 363 195 351 Trgb
+0.000000 0.699742 0.209923 205 337 206 335 206 337 Trgb
+0.000000 0.699742 0.209923 206 335 207 336 206 337 Trgb
+0.000000 0.699742 0.209923 207 336 207 338 206 337 Trgb
+0.000000 0.699742 0.209923 207 338 206 340 206 337 Trgb
+0.000000 0.699742 0.209923 206 340 205 339 206 337 Trgb
+0.000000 0.699742 0.209923 205 339 205 337 206 337 Trgb
+0.000000 0.015210 0.004563 205 339 165 339 165 337 Trgb
+0.000000 0.011503 0.003451 205 339 165 337 205 337 Trgb
+0.000000 0.013720 0.004116 206 340 167 340 165 339 Trgb
+0.000000 0.016319 0.004896 206 340 165 339 205 339 Trgb
+0.000000 0.005197 0.001559 205 337 165 337 166 335 Trgb
+0.000000 0.002599 0.000780 205 337 166 335 206 335 Trgb
+0.058239 0.091602 0.029968 159 333 159 344 153 334 Trgb
+0.040484 0.063676 0.020832 156 347 153 334 159 344 Trgb
+0.079983 0.125802 0.041157 159 344 164 351 156 347 Trgb
+0.017755 0.027926 0.009136 163 325 159 333 153 334 Trgb
+0.232855 0.366250 0.119821 173 347 170 334 178 337 Trgb
+0.127138 0.199970 0.065422 159 344 159 333 170 334 Trgb
+0.193657 0.304596 0.099650 170 334 173 347 159 344 Trgb
+0.164256 0.258353 0.084522 164 351 159 344 173 347 Trgb
+0.207746 0.326757 0.106901 180 341 173 347 178 337 Trgb
+0.139147 0.218860 0.071601 170 350 164 351 173 347 Trgb
+0.176996 0.278391 0.091077 170 334 177 328 178 337 Trgb
+0.086654 0.136294 0.044590 159 333 163 325 170 334 Trgb
+0.097313 0.153061 0.050075 177 328 170 334 163 325 Trgb
+0.028415 0.044692 0.014621 163 325 169 324 177 328 Trgb
+0.151887 0.238897 0.078157 177 328 180 341 178 337 Trgb
+0.000000 0.698962 0.209689 220 381 218 381 220 381 Trgb
+0.000000 0.698962 0.209689 218 381 217 381 220 381 Trgb
+0.000000 0.698962 0.209689 217 381 219 380 220 381 Trgb
+0.000000 0.698962 0.209689 219 380 221 380 220 381 Trgb
+0.000000 0.698962 0.209689 221 380 222 380 220 381 Trgb
+0.000000 0.698962 0.209689 222 380 220 381 220 381 Trgb
+0.000000 0.016514 0.004954 205 337 219 380 217 381 Trgb
+0.000000 0.008257 0.002477 205 337 217 381 204 338 Trgb
+0.000000 0.033230 0.009969 207 336 221 380 219 380 Trgb
+0.000000 0.029001 0.008700 207 336 219 380 205 337 Trgb
+0.000000 0.020944 0.006283 208 337 222 380 221 380 Trgb
+0.000000 0.029201 0.008760 208 337 221 380 207 336 Trgb
+0.307148 0.060281 0.073486 210 400 221 393 226 401 Trgb
+0.252761 0.049607 0.060474 201 384 214 377 221 393 Trgb
+0.175305 0.034406 0.041942 221 393 210 400 201 384 Trgb
+0.015997 0.003140 0.003827 199 388 201 384 210 400 Trgb
+0.461610 0.090596 0.110441 221 393 239 390 226 401 Trgb
+0.396072 0.077734 0.094761 214 377 231 373 221 393 Trgb
+0.473078 0.092847 0.113185 239 390 221 393 231 373 Trgb
+0.422991 0.083017 0.101202 231 373 240 373 239 390 Trgb
+0.000000 0.000000 0.000000 211 364 201 371 213 360 Trgb
+0.093452 0.018341 0.022359 214 377 201 384 211 364 Trgb
+0.000000 0.000000 0.000000 201 371 211 364 201 384 Trgb
+0.000000 0.000000 0.000000 201 384 199 388 201 371 Trgb
+0.000000 0.000000 0.000000 229 361 211 364 213 360 Trgb
+0.236764 0.046468 0.056646 231 373 214 377 211 364 Trgb
+0.143312 0.028127 0.034288 211 364 229 361 231 373 Trgb
+0.252533 0.049563 0.060419 240 373 231 373 229 361 Trgb
+0.000000 0.699663 0.209899 381 310 379 311 383 307 Trgb
+0.000000 0.699663 0.209899 379 311 381 307 383 307 Trgb
+0.000000 0.699663 0.209899 381 307 385 304 383 307 Trgb
+0.000000 0.699663 0.209899 385 304 387 303 383 307 Trgb
+0.000000 0.699663 0.209899 387 303 385 307 383 307 Trgb
+0.000000 0.699663 0.209899 385 307 381 310 383 307 Trgb
+0.000000 0.009326 0.002798 303 230 381 307 379 311 Trgb
+0.000000 0.004663 0.001399 303 230 379 311 301 233 Trgb
+0.000000 0.018911 0.005673 307 226 385 304 381 307 Trgb
+0.000000 0.016450 0.004935 307 226 381 307 303 230 Trgb
+0.000000 0.012047 0.003614 310 226 387 303 385 304 Trgb
+0.000000 0.016710 0.005013 310 226 385 304 307 226 Trgb
+0.000000 0.000000 0.000000 381 310 381 307 383 307 Trgb
+0.000000 0.000000 0.000000 381 307 384 304 383 307 Trgb
+0.000000 0.000000 0.000000 384 304 386 304 383 307 Trgb
+0.000000 0.000000 0.000000 386 304 385 307 383 307 Trgb
+0.000000 0.000000 0.000000 385 307 383 310 383 307 Trgb
+0.000000 0.000000 0.000000 383 310 381 310 383 307 Trgb
+0.000000 0.025647 0.007694 383 310 439 357 437 357 Trgb
+0.000000 0.012824 0.003847 383 310 437 357 381 310 Trgb
+0.000000 0.054647 0.016394 385 307 442 354 439 357 Trgb
+0.000000 0.046559 0.013968 385 307 439 357 383 310 Trgb
+0.000000 0.037089 0.011127 386 304 442 352 442 354 Trgb
+0.000000 0.049912 0.014974 386 304 442 354 385 307 Trgb
+0.000000 0.687787 0.206336 438 356 437 353 440 355 Trgb
+0.000000 0.687787 0.206336 437 353 439 352 440 355 Trgb
+0.000000 0.687787 0.206336 439 352 442 353 440 355 Trgb
+0.000000 0.687787 0.206336 442 353 442 356 440 355 Trgb
+0.000000 0.687787 0.206336 442 356 440 357 440 355 Trgb
+0.000000 0.687787 0.206336 440 357 438 356 440 355 Trgb
+0.000000 0.101740 0.030522 442 356 464 346 462 348 Trgb
+0.000000 0.074722 0.022417 442 356 462 348 440 357 Trgb
+0.000000 0.096953 0.029086 442 353 463 344 464 346 Trgb
+0.000000 0.112855 0.033857 442 353 464 346 442 356 Trgb
+0.000000 0.027017 0.008105 439 352 461 343 463 344 Trgb
+0.000000 0.054034 0.016210 439 352 463 344 442 353 Trgb
+0.000000 0.691825 0.207548 460 345 460 344 461 345 Trgb
+0.000000 0.691825 0.207548 460 344 462 345 461 345 Trgb
+0.000000 0.691825 0.207548 462 345 463 345 461 345 Trgb
+0.000000 0.691825 0.207548 463 345 463 346 461 345 Trgb
+0.000000 0.691825 0.207548 463 346 461 346 461 345 Trgb
+0.000000 0.691825 0.207548 461 346 460 345 461 345 Trgb
+0.000000 0.075590 0.022677 462 345 472 314 474 314 Trgb
+0.000000 0.090975 0.027293 462 345 474 314 463 345 Trgb
+0.000000 0.020068 0.006020 460 344 471 313 472 314 Trgb
+0.000000 0.040137 0.012041 460 344 472 314 462 345 Trgb
+0.000000 0.000000 0.000000 460 345 470 314 471 313 Trgb
+0.000000 0.000000 0.000000 460 345 471 313 460 344 Trgb
+0.009659 0.007219 0.003376 468 307 460 308 472 301 Trgb
+0.060429 0.045167 0.021119 484 307 472 301 476 303 Trgb
+0.283462 0.211871 0.099067 485 316 478 310 484 307 Trgb
+0.156813 0.117208 0.054804 472 301 484 307 478 310 Trgb
+0.106043 0.079261 0.037061 478 310 468 307 472 301 Trgb
+0.182166 0.136158 0.063665 478 324 472 327 468 326 Trgb
+0.328054 0.245201 0.114651 485 316 483 320 478 324 Trgb
+0.077145 0.057661 0.026961 460 321 467 317 468 326 Trgb
+0.000000 0.000000 0.000000 459 313 460 308 460 321 Trgb
+0.035955 0.026874 0.012566 467 317 460 321 460 308 Trgb
+0.045614 0.034094 0.015942 460 308 468 307 467 317 Trgb
+0.195825 0.146368 0.068439 467 317 478 324 468 326 Trgb
+0.341713 0.255410 0.119425 478 310 485 316 478 324 Trgb
+0.251020 0.187622 0.087728 478 324 467 317 478 310 Trgb
+0.141998 0.106135 0.049627 468 307 478 310 467 317 Trgb
+0.000000 0.000000 0.000000 463 344 462 346 461 345 Trgb
+0.000000 0.000000 0.000000 462 346 461 347 461 345 Trgb
+0.000000 0.000000 0.000000 461 347 460 346 461 345 Trgb
+0.000000 0.000000 0.000000 460 346 460 345 461 345 Trgb
+0.000000 0.000000 0.000000 460 345 462 344 461 345 Trgb
+0.000000 0.000000 0.000000 462 344 463 344 461 345 Trgb
+0.000000 0.014411 0.004323 461 347 485 367 485 366 Trgb
+0.000000 0.007206 0.002162 461 347 485 366 460 346 Trgb
+0.000000 0.054003 0.016201 462 346 487 366 485 367 Trgb
+0.000000 0.037810 0.011343 462 346 485 367 461 347 Trgb
+0.000000 0.055784 0.016735 463 344 487 364 487 366 Trgb
+0.000000 0.062990 0.018897 463 344 487 366 462 346 Trgb
+0.117681 0.406254 0.104787 491 366 493 361 495 366 Trgb
+0.126551 0.436877 0.112686 495 366 491 373 491 366 Trgb
+0.122641 0.423379 0.109204 487 372 491 366 491 373 Trgb
+0.006385 0.022042 0.005685 481 358 487 358 480 360 Trgb
+0.038254 0.132061 0.034063 491 358 493 361 487 358 Trgb
+0.006385 0.022042 0.005685 487 358 481 358 491 358 Trgb
+0.077571 0.267788 0.069072 481 373 487 372 491 373 Trgb
+0.000000 0.000000 0.000000 477 365 481 358 480 360 Trgb
+0.014824 0.051177 0.013200 487 358 482 366 480 360 Trgb
+0.085380 0.294746 0.076025 493 361 491 366 487 358 Trgb
+0.061950 0.213861 0.055162 482 366 487 358 491 366 Trgb
+0.090341 0.311871 0.080442 491 366 487 372 482 366 Trgb
+0.008440 0.029135 0.007515 482 366 477 365 480 360 Trgb
+0.002055 0.007094 0.001830 481 373 479 370 477 365 Trgb
+0.010495 0.036229 0.009345 477 365 482 366 481 373 Trgb
+0.045270 0.156280 0.040310 487 372 481 373 482 366 Trgb
+0.000000 0.000000 0.000000 461 344 461 344 461 345 Trgb
+0.000000 0.000000 0.000000 461 344 462 346 461 345 Trgb
+0.000000 0.000000 0.000000 462 346 462 347 461 345 Trgb
+0.000000 0.000000 0.000000 462 347 461 346 461 345 Trgb
+0.000000 0.000000 0.000000 461 346 460 344 461 345 Trgb
+0.000000 0.000000 0.000000 460 344 461 344 461 345 Trgb
+0.000000 0.074013 0.022204 462 346 495 335 494 336 Trgb
+0.000000 0.062494 0.018748 462 346 494 336 462 347 Trgb
+0.000000 0.051548 0.015464 461 344 494 333 495 335 Trgb
+0.000000 0.068539 0.020562 461 344 495 335 462 346 Trgb
+0.000000 0.011519 0.003456 461 344 493 332 494 333 Trgb
+0.000000 0.023037 0.006911 461 344 494 333 461 344 Trgb
+0.094155 0.178202 0.054471 504 331 498 324 503 331 Trgb
+0.011283 0.021354 0.006527 494 326 490 324 498 324 Trgb
+0.075245 0.142413 0.043532 498 324 504 331 494 326 Trgb
+0.135510 0.256474 0.078397 498 333 494 326 504 331 Trgb
+0.000000 0.000000 0.000000 484 337 485 329 484 337 Trgb
+0.170934 0.323519 0.098891 497 344 499 341 503 339 Trgb
+0.190588 0.360716 0.110261 504 331 503 339 499 341 Trgb
+0.198172 0.375072 0.114649 499 341 498 333 504 331 Trgb
+0.021265 0.040247 0.012302 485 329 490 336 484 337 Trgb
+0.011283 0.021354 0.006527 490 324 494 326 485 329 Trgb
+0.032547 0.061601 0.018830 490 336 485 329 494 326 Trgb
+0.092812 0.175662 0.053695 494 326 498 333 490 336 Trgb
+0.031247 0.059140 0.018077 490 336 490 344 484 337 Trgb
+0.128236 0.242707 0.074189 499 341 497 344 490 344 Trgb
+0.105192 0.199092 0.060857 490 344 490 336 499 341 Trgb
+0.155475 0.294260 0.089947 498 333 499 341 490 336 Trgb
+0.000000 0.698488 0.209546 453 408 454 408 451 408 Trgb
+0.000000 0.698488 0.209546 454 408 452 409 451 408 Trgb
+0.000000 0.698488 0.209546 452 409 449 409 451 408 Trgb
+0.000000 0.698488 0.209546 449 409 448 409 451 408 Trgb
+0.000000 0.698488 0.209546 448 409 450 408 451 408 Trgb
+0.000000 0.698488 0.209546 450 408 453 408 451 408 Trgb
+0.000000 0.035029 0.010509 442 354 454 408 453 408 Trgb
+0.000000 0.040113 0.012034 442 354 453 408 441 354 Trgb
+0.000000 0.010168 0.003050 439 354 450 408 448 409 Trgb
+0.000000 0.005084 0.001525 439 354 448 409 437 355 Trgb
+0.000000 0.035216 0.010565 441 354 453 408 450 408 Trgb
+0.000000 0.025234 0.007570 441 354 450 408 439 354 Trgb
+0.000000 0.696558 0.208967 443 433 443 434 441 433 Trgb
+0.000000 0.696558 0.208967 443 434 441 435 441 433 Trgb
+0.000000 0.696558 0.208967 441 435 439 434 441 433 Trgb
+0.000000 0.696558 0.208967 439 434 439 432 441 433 Trgb
+0.000000 0.696558 0.208967 439 432 441 432 441 433 Trgb
+0.000000 0.696558 0.208967 441 432 443 433 441 433 Trgb
+0.000000 0.059446 0.017834 453 409 443 434 443 433 Trgb
+0.000000 0.060519 0.018156 453 409 443 433 453 408 Trgb
+0.000000 0.002147 0.000644 451 407 441 432 439 432 Trgb
+0.000000 0.001074 0.000322 451 407 439 432 449 407 Trgb
+0.000000 0.042136 0.012641 453 408 443 433 441 432 Trgb
+0.000000 0.022679 0.006804 453 408 441 432 451 407 Trgb
+0.329826 0.121701 0.090305 449 438 444 450 437 444 Trgb
+0.430194 0.158735 0.117786 456 429 458 440 449 438 Trgb
+0.398450 0.147022 0.109094 444 450 449 438 458 440 Trgb
+0.318627 0.117568 0.087239 458 440 450 446 444 450 Trgb
+0.180059 0.066439 0.049300 444 450 428 444 437 444 Trgb
+0.230910 0.085202 0.063223 432 432 449 438 437 444 Trgb
+0.331278 0.122236 0.090703 445 421 456 429 449 438 Trgb
+0.200618 0.074025 0.054929 449 438 432 432 445 421 Trgb
+0.050851 0.018763 0.013923 432 420 445 421 432 432 Trgb
+0.081143 0.029941 0.022217 428 444 432 432 437 444 Trgb
+0.004639 0.001712 0.001270 432 432 428 444 425 427 Trgb
+0.004639 0.001712 0.001270 425 427 432 420 432 432 Trgb
+0.223084 0.082315 0.061080 456 429 445 421 455 423 Trgb
+0.087786 0.032392 0.024036 438 416 455 423 445 421 Trgb
+0.046212 0.017052 0.012653 445 421 432 420 438 416 Trgb
+0.000000 0.699959 0.209988 485 427 484 429 484 427 Trgb
+0.000000 0.699959 0.209988 484 429 483 429 484 427 Trgb
+0.000000 0.699959 0.209988 483 429 484 427 484 427 Trgb
+0.000000 0.699959 0.209988 484 427 485 425 484 427 Trgb
+0.000000 0.699959 0.209988 485 425 485 426 484 427 Trgb
+0.000000 0.699959 0.209988 485 426 485 427 484 427 Trgb
+0.000000 0.005578 0.001673 450 408 484 427 483 429 Trgb
+0.000000 0.003816 0.001145 450 408 483 429 450 410 Trgb
+0.000000 0.005972 0.001792 451 407 485 425 484 427 Trgb
+0.000000 0.006656 0.001997 451 407 484 427 450 408 Trgb
+0.000000 0.001762 0.000529 452 407 485 426 485 425 Trgb
+0.000000 0.003525 0.001057 452 407 485 425 451 407 Trgb
+0.371114 0.204675 0.115158 489 443 491 432 498 435 Trgb
+0.172821 0.095313 0.053627 475 436 479 426 491 432 Trgb
+0.240382 0.132574 0.074591 491 432 489 443 475 436 Trgb
+0.114646 0.063229 0.035575 477 441 475 436 489 443 Trgb
+0.382205 0.210792 0.118599 491 432 499 422 498 435 Trgb
+0.183911 0.101430 0.057068 479 426 486 416 491 432 Trgb
+0.262562 0.144807 0.081474 499 422 491 432 486 416 Trgb
+0.144668 0.079787 0.044891 486 416 492 413 499 422 Trgb
+0.000000 0.000000 0.000000 471 421 470 432 471 419 Trgb
+0.047085 0.025968 0.014611 479 426 475 436 471 421 Trgb
+0.016255 0.008965 0.005044 470 432 471 421 475 436 Trgb
+0.016255 0.008965 0.005044 475 436 477 441 470 432 Trgb
+0.000000 0.000000 0.000000 480 412 471 421 471 419 Trgb
+0.058175 0.032084 0.018052 486 416 479 426 471 421 Trgb
+0.027345 0.015081 0.008485 471 421 480 412 486 416 Trgb
+0.035187 0.019406 0.010919 492 413 486 416 480 412 Trgb
+0.000000 0.668910 0.200673 449 408 449 407 451 408 Trgb
+0.000000 0.668910 0.200673 449 407 451 407 451 408 Trgb
+0.000000 0.668910 0.200673 451 407 452 408 451 408 Trgb
+0.000000 0.668910 0.200673 452 408 453 409 451 408 Trgb
+0.000000 0.668910 0.200673 453 409 451 409 451 408 Trgb
+0.000000 0.668910 0.200673 451 409 449 408 451 408 Trgb
+0.000000 0.099272 0.029782 451 409 439 442 437 441 Trgb
+0.000000 0.049636 0.014891 451 409 437 441 449 408 Trgb
+0.000000 0.181706 0.054512 453 409 441 441 439 442 Trgb
+0.000000 0.165307 0.049592 453 409 439 442 451 409 Trgb
+0.000000 0.000000 0.000000 449 408 437 441 437 440 Trgb
+0.000000 0.000000 0.000000 449 408 437 440 449 407 Trgb
+0.004375 0.127388 0.026353 433 445 440 448 437 446 Trgb
+0.003962 0.115366 0.023866 433 441 438 444 433 445 Trgb
+0.008337 0.242754 0.050218 440 448 433 445 438 444 Trgb
+0.015764 0.459008 0.094954 438 444 443 445 440 448 Trgb
+0.018343 0.534106 0.110490 443 445 446 443 440 448 Trgb
+0.000000 0.000000 0.000000 432 438 433 441 433 445 Trgb
+0.007368 0.214543 0.044382 443 439 436 437 441 435 Trgb
+0.003962 0.115366 0.023866 438 444 433 441 436 437 Trgb
+0.010090 0.293808 0.060780 436 437 443 439 438 444 Trgb
+0.017517 0.510062 0.105516 443 445 438 444 443 439 Trgb
+0.009534 0.277619 0.057431 445 436 443 439 441 435 Trgb
+0.014836 0.431982 0.089364 443 439 445 436 446 443 Trgb
+0.020096 0.585160 0.121051 446 443 443 445 443 439 Trgb
+0.001240 0.036101 0.007468 436 437 438 433 441 435 Trgb
+0.000000 0.000000 0.000000 433 441 432 438 436 437 Trgb
+0.000000 0.000000 0.000000 438 433 436 437 432 438 Trgb
+0.000000 0.699421 0.209826 496 351 496 354 496 353 Trgb
+0.000000 0.699421 0.209826 496 354 496 355 496 353 Trgb
+0.000000 0.699421 0.209826 496 355 496 354 496 353 Trgb
+0.000000 0.699421 0.209826 496 354 496 351 496 353 Trgb
+0.000000 0.699421 0.209826 496 351 496 350 496 353 Trgb
+0.000000 0.699421 0.209826 496 350 496 351 496 353 Trgb
+0.000000 0.023624 0.007087 439 356 496 354 496 355 Trgb
+0.000000 0.018777 0.005633 439 356 496 355 440 357 Trgb
+0.000000 0.019183 0.005755 439 354 496 351 496 354 Trgb
+0.000000 0.023827 0.007148 439 354 496 354 439 356 Trgb
+0.000000 0.004847 0.001454 439 352 496 350 496 351 Trgb
+0.000000 0.009693 0.002908 439 352 496 351 439 354 Trgb
+0.000000 0.172605 0.051782 496 353 494 352 496 353 Trgb
+0.000000 0.172605 0.051782 494 352 494 351 496 353 Trgb
+0.000000 0.172605 0.051782 494 351 496 352 496 353 Trgb
+0.000000 0.172605 0.051782 496 352 497 353 496 353 Trgb
+0.000000 0.172605 0.051782 497 353 497 354 496 353 Trgb
+0.000000 0.172605 0.051782 497 354 496 353 496 353 Trgb
+0.000000 0.589120 0.176736 497 353 517 321 517 322 Trgb
+0.000000 0.508333 0.152500 497 353 517 322 497 354 Trgb
+0.000000 0.384877 0.115463 496 352 516 320 517 321 Trgb
+0.000000 0.527393 0.158218 496 352 517 321 497 353 Trgb
+0.000000 0.080787 0.024236 494 351 515 320 516 320 Trgb
+0.000000 0.161575 0.048472 494 351 516 320 496 352 Trgb
+0.147652 0.061182 0.041767 532 317 522 307 524 308 Trgb
+0.249743 0.103485 0.070645 526 322 516 315 522 307 Trgb
+0.298271 0.123593 0.084373 522 307 532 317 526 322 Trgb
+0.412156 0.170783 0.116588 531 329 526 322 532 317 Trgb
+0.040189 0.016653 0.011368 522 307 512 306 524 308 Trgb
+0.099123 0.041073 0.028039 516 315 506 311 522 307 Trgb
+0.040189 0.016653 0.011368 512 306 522 307 506 311 Trgb
+0.000000 0.000000 0.000000 506 311 502 313 512 306 Trgb
+0.155686 0.064511 0.044039 510 326 520 336 507 334 Trgb
+0.252711 0.104714 0.071485 516 315 526 322 510 326 Trgb
+0.304207 0.126053 0.086052 520 336 510 326 526 322 Trgb
+0.415124 0.172013 0.117427 526 322 531 329 520 336 Trgb
+0.045255 0.018752 0.012802 500 325 510 326 507 334 Trgb
+0.102091 0.042303 0.028879 506 311 516 315 510 326 Trgb
+0.043157 0.017883 0.012208 510 326 500 325 506 311 Trgb
+0.000000 0.000000 0.000000 502 313 506 311 500 325 Trgb
+0.000000 0.000000 0.000000 496 354 495 352 496 353 Trgb
+0.000000 0.000000 0.000000 495 352 494 351 496 353 Trgb
+0.000000 0.000000 0.000000 494 351 496 351 496 353 Trgb
+0.000000 0.000000 0.000000 496 351 497 353 496 353 Trgb
+0.000000 0.000000 0.000000 497 353 497 354 496 353 Trgb
+0.000000 0.000000 0.000000 497 354 496 354 496 353 Trgb
+0.000000 0.192098 0.057629 497 353 525 330 525 331 Trgb
+0.000000 0.177366 0.053210 497 353 525 331 497 354 Trgb
+0.000000 0.098407 0.029522 496 351 523 328 525 330 Trgb
+0.000000 0.152618 0.045785 496 351 525 330 497 353 Trgb
+0.000000 0.014732 0.004420 494 351 522 328 523 328 Trgb
+0.000000 0.029463 0.008839 494 351 523 328 496 351 Trgb
+0.180153 0.097673 0.055565 540 329 531 317 535 320 Trgb
+0.192968 0.104621 0.059518 532 329 523 320 531 317 Trgb
+0.282334 0.153073 0.087081 531 317 540 329 532 329 Trgb
+0.391187 0.212089 0.120655 535 338 532 329 540 329 Trgb
+0.087413 0.047393 0.026961 524 342 516 342 512 339 Trgb
+0.315976 0.171312 0.097458 535 338 532 342 524 342 Trgb
+0.067950 0.036840 0.020958 523 320 515 317 531 317 Trgb
+0.092721 0.050270 0.028598 515 330 524 342 512 339 Trgb
+0.160670 0.087110 0.049556 523 320 532 329 515 330 Trgb
+0.217739 0.118051 0.067158 524 342 515 330 532 329 Trgb
+0.358889 0.194578 0.110694 532 329 535 338 524 342 Trgb
+0.005308 0.002878 0.001637 508 330 515 330 512 339 Trgb
+0.035652 0.019330 0.010996 515 317 523 320 515 330 Trgb
+0.005308 0.002878 0.001637 515 330 508 330 515 317 Trgb
+0.000000 0.000000 0.000000 512 321 515 317 508 330 Trgb
+0.000000 0.000000 0.000000 496 353 495 354 496 353 Trgb
+0.000000 0.000000 0.000000 495 354 495 354 496 353 Trgb
+0.000000 0.000000 0.000000 495 354 496 352 496 353 Trgb
+0.000000 0.000000 0.000000 496 352 497 351 496 353 Trgb
+0.000000 0.000000 0.000000 497 351 497 352 496 353 Trgb
+0.000000 0.000000 0.000000 497 352 496 353 496 353 Trgb
+0.000000 0.028228 0.008468 497 352 526 379 524 380 Trgb
+0.000000 0.027588 0.008276 497 352 524 380 496 353 Trgb
+0.000000 0.010903 0.003271 497 351 526 378 526 379 Trgb
+0.000000 0.019885 0.005966 497 351 526 379 497 352 Trgb
+0.000000 0.017965 0.005390 496 353 524 380 523 381 Trgb
+0.000000 0.008983 0.002695 496 353 523 381 495 354 Trgb
+0.553377 0.015557 0.113787 535 393 545 380 539 394 Trgb
+0.488126 0.013722 0.100370 525 384 535 373 535 393 Trgb
+0.537456 0.015109 0.110513 545 380 535 393 535 373 Trgb
+0.413448 0.011623 0.085014 535 373 539 366 545 380 Trgb
+0.433488 0.012186 0.089135 525 399 535 393 539 394 Trgb
+0.368237 0.010352 0.075718 514 393 525 384 535 393 Trgb
+0.297677 0.008368 0.061209 535 393 525 399 514 393 Trgb
+0.088894 0.002499 0.018279 510 393 514 393 525 399 Trgb
+0.000000 0.000000 0.000000 524 360 514 373 510 366 Trgb
+0.279343 0.007853 0.057439 535 373 525 384 514 373 Trgb
+0.150823 0.004240 0.031012 514 373 524 360 535 373 Trgb
+0.235597 0.006623 0.048444 539 366 535 373 524 360 Trgb
+0.000000 0.000000 0.000000 514 373 504 380 510 366 Trgb
+0.159453 0.004483 0.032787 525 384 514 393 514 373 Trgb
+0.030933 0.000870 0.006360 504 380 514 373 514 393 Trgb
+0.030933 0.000870 0.006360 514 393 510 393 504 380 Trgb
+0.000000 0.698638 0.209592 397 383 401 383 397 384 Trgb
+0.000000 0.698638 0.209592 401 383 400 384 397 384 Trgb
+0.000000 0.698638 0.209592 400 384 396 385 397 384 Trgb
+0.000000 0.698638 0.209592 396 385 393 385 397 384 Trgb
+0.000000 0.698638 0.209592 393 385 393 384 397 384 Trgb
+0.000000 0.698638 0.209592 393 384 397 383 397 384 Trgb
+0.000000 0.038092 0.011428 387 306 401 383 397 383 Trgb
+0.000000 0.033330 0.009999 387 306 397 383 384 306 Trgb
+0.000000 0.000000 0.000000 380 307 393 384 393 385 Trgb
+0.000000 0.000000 0.000000 380 307 393 385 380 308 Trgb
+0.000000 0.019045 0.005714 384 306 397 383 393 384 Trgb
+0.000000 0.009523 0.002857 384 306 393 384 380 307 Trgb
+0.000000 0.617376 0.185213 369 434 371 436 369 435 Trgb
+0.000000 0.617376 0.185213 371 436 371 437 369 435 Trgb
+0.000000 0.617376 0.185213 371 437 369 436 369 435 Trgb
+0.000000 0.617376 0.185213 369 436 367 434 369 435 Trgb
+0.000000 0.617376 0.185213 367 434 367 434 369 435 Trgb
+0.000000 0.617376 0.185213 367 434 369 434 369 435 Trgb
+0.000000 0.264623 0.079387 399 385 371 436 369 434 Trgb
+0.000000 0.200825 0.060247 399 385 369 434 397 383 Trgb
+0.000000 0.237071 0.071121 399 386 371 437 371 436 Trgb
+0.000000 0.282747 0.084824 399 386 371 436 399 385 Trgb
+0.000000 0.091351 0.027405 397 383 369 434 367 434 Trgb
+0.000000 0.045675 0.013703 397 383 367 434 394 383 Trgb
+0.000000 0.698748 0.209624 369 435 369 433 369 435 Trgb
+0.000000 0.698748 0.209624 369 433 369 434 369 435 Trgb
+0.000000 0.698748 0.209624 369 434 369 435 369 435 Trgb
+0.000000 0.698748 0.209624 369 435 370 437 369 435 Trgb
+0.000000 0.698748 0.209624 370 437 369 437 369 435 Trgb
+0.000000 0.698748 0.209624 369 437 369 435 369 435 Trgb
+0.000000 0.035263 0.010579 369 437 329 445 329 443 Trgb
+0.000000 0.028701 0.008610 369 437 329 443 369 435 Trgb
+0.000000 0.027065 0.008120 370 437 329 445 329 445 Trgb
+0.000000 0.034445 0.010334 370 437 329 445 369 437 Trgb
+0.000000 0.014759 0.004428 369 435 329 443 328 442 Trgb
+0.000000 0.007380 0.002214 369 435 328 442 369 433 Trgb
+0.000793 0.000950 0.000349 318 443 321 455 315 446 Trgb
+0.122526 0.146716 0.053848 327 441 329 451 318 443 Trgb
+0.080197 0.096030 0.035245 321 455 318 443 329 451 Trgb
+0.149369 0.178859 0.065646 329 451 331 457 321 455 Trgb
+0.000000 0.000000 0.000000 318 436 318 443 315 446 Trgb
+0.043122 0.051635 0.018951 326 432 327 441 318 443 Trgb
+0.000000 0.000000 0.000000 318 443 318 436 326 432 Trgb
+0.000000 0.000000 0.000000 326 430 326 432 318 436 Trgb
+0.243693 0.291804 0.107100 340 451 337 439 342 441 Trgb
+0.201137 0.240847 0.088397 329 451 327 441 337 439 Trgb
+0.255047 0.305399 0.112089 337 439 340 451 329 451 Trgb
+0.245608 0.294097 0.107941 331 457 329 451 340 451 Trgb
+0.146662 0.175617 0.064456 337 439 337 432 342 441 Trgb
+0.121733 0.145766 0.053500 327 441 326 432 337 439 Trgb
+0.078611 0.094131 0.034548 337 432 337 439 326 432 Trgb
+0.000000 0.000000 0.000000 326 432 326 430 337 432 Trgb
+0.000000 0.696899 0.209070 360 448 358 449 358 447 Trgb
+0.000000 0.696899 0.209070 358 449 356 448 358 447 Trgb
+0.000000 0.696899 0.209070 356 448 356 446 358 447 Trgb
+0.000000 0.696899 0.209070 356 446 358 445 358 447 Trgb
+0.000000 0.696899 0.209070 358 445 360 446 358 447 Trgb
+0.000000 0.696899 0.209070 360 446 360 448 358 447 Trgb
+0.000000 0.000000 0.000000 369 433 358 445 356 446 Trgb
+0.000000 0.000000 0.000000 369 433 356 446 367 434 Trgb
+0.000000 0.028512 0.008554 371 434 360 446 358 445 Trgb
+0.000000 0.014256 0.004277 371 434 358 445 369 433 Trgb
+0.000000 0.057393 0.017218 371 436 360 448 360 446 Trgb
+0.000000 0.050081 0.015024 371 436 360 446 371 434 Trgb
+0.031196 0.349100 0.076059 362 452 354 455 356 450 Trgb
+0.044298 0.495717 0.108003 366 452 361 456 362 452 Trgb
+0.031814 0.356014 0.077566 354 455 362 452 361 456 Trgb
+0.013721 0.153545 0.033453 361 456 355 455 354 455 Trgb
+0.013103 0.146631 0.031947 354 455 351 446 356 450 Trgb
+0.000000 0.000000 0.000000 350 450 350 443 351 446 Trgb
+0.004147 0.046407 0.010111 351 446 354 455 350 450 Trgb
+0.035568 0.398023 0.086718 359 444 362 452 356 450 Trgb
+0.048670 0.544640 0.118662 366 445 366 452 362 452 Trgb
+0.040558 0.453861 0.098884 362 452 359 444 366 445 Trgb
+0.025556 0.285986 0.062308 362 440 366 445 359 444 Trgb
+0.017475 0.195555 0.042606 351 446 359 444 356 450 Trgb
+0.000000 0.000000 0.000000 350 443 355 439 351 446 Trgb
+0.008519 0.095331 0.020770 359 444 351 446 355 439 Trgb
+0.011610 0.129925 0.028307 355 439 362 440 359 444 Trgb
+0.017037 0.190656 0.041539 366 445 362 440 362 440 Trgb
+0.000000 0.000000 0.000000 367 434 369 434 369 435 Trgb
+0.000000 0.000000 0.000000 369 434 371 435 369 435 Trgb
+0.000000 0.000000 0.000000 371 435 371 436 369 435 Trgb
+0.000000 0.000000 0.000000 371 436 369 436 369 435 Trgb
+0.000000 0.000000 0.000000 369 436 367 436 369 435 Trgb
+0.000000 0.000000 0.000000 367 436 367 434 369 435 Trgb
+0.000000 0.242861 0.072858 369 436 372 469 370 468 Trgb
+0.000000 0.121430 0.036429 369 436 370 468 367 436 Trgb
+0.000000 0.537282 0.161185 371 436 374 468 372 469 Trgb
+0.000000 0.450787 0.135236 371 436 372 469 369 436 Trgb
+0.000000 0.380917 0.114275 371 435 374 467 374 468 Trgb
+0.000000 0.502347 0.150704 371 435 374 468 371 436 Trgb
+0.023187 0.019364 0.008510 357 469 363 475 366 481 Trgb
+0.316349 0.264191 0.116108 374 477 384 473 381 480 Trgb
+0.200748 0.167650 0.073679 381 480 366 481 374 477 Trgb
+0.121324 0.101321 0.044529 363 475 374 477 366 481 Trgb
+0.006442 0.005380 0.002364 365 465 363 456 371 456 Trgb
+0.006442 0.005380 0.002364 363 456 365 465 357 469 Trgb
+0.018714 0.015629 0.006869 363 475 357 469 365 465 Trgb
+0.298993 0.249697 0.109738 384 473 387 466 381 480 Trgb
+0.093666 0.078222 0.034378 379 463 365 465 371 456 Trgb
+0.311877 0.260456 0.114467 384 473 374 477 379 463 Trgb
+0.191803 0.160180 0.070397 365 465 379 463 374 477 Trgb
+0.116852 0.097586 0.042888 374 477 363 475 365 465 Trgb
+0.000000 0.000000 0.000000 363 456 378 454 371 456 Trgb
+0.087224 0.072843 0.032013 378 454 379 463 371 456 Trgb
+0.294521 0.245962 0.108097 387 466 384 473 379 463 Trgb
+0.168006 0.140306 0.061662 379 463 378 454 387 466 Trgb
+0.000000 0.699893 0.209968 443 419 441 421 443 419 Trgb
+0.000000 0.699893 0.209968 441 421 441 420 443 419 Trgb
+0.000000 0.699893 0.209968 441 420 442 418 443 419 Trgb
+0.000000 0.699893 0.209968 442 418 444 416 443 419 Trgb
+0.000000 0.699893 0.209968 444 416 444 417 443 419 Trgb
+0.000000 0.699893 0.209968 444 417 443 419 443 419 Trgb
+0.000000 0.001169 0.000351 395 386 441 420 441 421 Trgb
+0.000000 0.000585 0.000175 395 386 441 421 396 386 Trgb
+0.000000 0.008146 0.002444 396 383 442 418 441 420 Trgb
+0.000000 0.004950 0.001485 396 383 441 420 395 386 Trgb
+0.000000 0.010173 0.003052 398 382 444 416 442 418 Trgb
+0.000000 0.010758 0.003227 398 382 442 418 396 383 Trgb
+0.000000 0.699690 0.209907 475 413 475 415 474 414 Trgb
+0.000000 0.699690 0.209907 475 415 474 416 474 414 Trgb
+0.000000 0.699690 0.209907 474 416 473 415 474 414 Trgb
+0.000000 0.699690 0.209907 473 415 473 412 474 414 Trgb
+0.000000 0.699690 0.209907 473 412 474 412 474 414 Trgb
+0.000000 0.699690 0.209907 474 412 475 413 474 414 Trgb
+0.000000 0.009727 0.002918 441 419 473 415 474 416 Trgb
+0.000000 0.014819 0.004446 441 419 474 416 443 421 Trgb
+0.000000 0.001545 0.000463 441 417 473 412 473 415 Trgb
+0.000000 0.003090 0.000927 441 417 473 415 441 419 Trgb
+0.000000 0.000000 0.000000 442 416 474 412 473 412 Trgb
+0.000000 0.000000 0.000000 442 416 473 412 441 417 Trgb
+0.444852 0.102658 0.109502 492 406 490 425 489 411 Trgb
+0.475371 0.109701 0.117014 490 425 477 419 489 411 Trgb
+0.234152 0.054035 0.057637 472 433 463 423 477 419 Trgb
+0.394626 0.091068 0.097139 477 419 490 425 472 433 Trgb
+0.358772 0.082794 0.088313 482 431 472 433 490 425 Trgb
+0.311095 0.071791 0.076577 479 399 492 406 489 411 Trgb
+0.148213 0.034203 0.036483 492 406 479 399 476 395 Trgb
+0.048297 0.011145 0.011888 466 396 476 395 479 399 Trgb
+0.341613 0.078834 0.084089 477 419 479 399 489 411 Trgb
+0.152014 0.035080 0.037419 463 423 461 407 477 419 Trgb
+0.178731 0.041246 0.043995 479 399 477 419 461 407 Trgb
+0.048297 0.011145 0.011888 461 407 466 396 479 399 Trgb
+0.103718 0.023935 0.025530 463 423 472 433 456 422 Trgb
+0.021580 0.004980 0.005312 461 407 463 423 456 422 Trgb
+0.000000 0.000000 0.000000 456 422 458 403 461 407 Trgb
+0.000000 0.000000 0.000000 466 396 461 407 458 403 Trgb
+0.000000 0.000000 0.000000 442 419 441 419 443 419 Trgb
+0.000000 0.000000 0.000000 441 419 441 419 443 419 Trgb
+0.000000 0.000000 0.000000 441 419 443 418 443 419 Trgb
+0.000000 0.000000 0.000000 443 418 445 418 443 419 Trgb
+0.000000 0.000000 0.000000 445 418 444 418 443 419 Trgb
+0.000000 0.000000 0.000000 444 418 442 419 443 419 Trgb
+0.000000 0.045400 0.013620 444 418 452 460 450 460 Trgb
+0.000000 0.030855 0.009257 444 418 450 460 442 419 Trgb
+0.000000 0.049070 0.014721 445 418 453 460 452 460 Trgb
+0.000000 0.054507 0.016352 445 418 452 460 444 418 Trgb
+0.000000 0.010874 0.003262 442 419 450 460 449 460 Trgb
+0.000000 0.005437 0.001631 442 419 449 460 441 419 Trgb
+0.353693 0.099034 0.090545 448 476 466 472 455 479 Trgb
+0.272514 0.076304 0.069763 443 463 458 461 448 476 Trgb
+0.402283 0.112639 0.102985 466 472 448 476 458 461 Trgb
+0.462817 0.129589 0.118481 458 461 468 458 466 472 Trgb
+0.182115 0.050992 0.046621 442 475 448 476 455 479 Trgb
+0.134561 0.037677 0.034448 434 464 443 463 448 476 Trgb
+0.092752 0.025971 0.023745 448 476 442 475 434 464 Trgb
+0.045201 0.012656 0.011571 461 445 443 449 447 441 Trgb
+0.179761 0.050333 0.046019 458 461 443 463 443 449 Trgb
+0.183153 0.051283 0.046887 443 449 461 445 458 461 Trgb
+0.336439 0.094203 0.086129 468 458 458 461 461 445 Trgb
+0.277313 0.077648 0.070992 469 456 468 458 461 445 Trgb
+0.000000 0.000000 0.000000 443 449 437 448 447 441 Trgb
+0.041809 0.011706 0.010703 443 463 434 464 443 449 Trgb
+0.000000 0.000000 0.000000 437 448 443 449 434 464 Trgb
+0.000000 0.698795 0.209638 443 439 445 440 442 440 Trgb
+0.000000 0.698795 0.209638 445 440 444 442 442 440 Trgb
+0.000000 0.698795 0.209638 444 442 441 442 442 440 Trgb
+0.000000 0.698795 0.209638 441 442 440 440 442 440 Trgb
+0.000000 0.698795 0.209638 440 440 441 439 442 440 Trgb
+0.000000 0.698795 0.209638 441 439 443 439 442 440 Trgb
+0.000000 0.031657 0.009497 445 418 445 440 443 439 Trgb
+0.000000 0.022869 0.006861 445 418 443 439 444 417 Trgb
+0.000000 0.000000 0.000000 441 417 441 439 440 440 Trgb
+0.000000 0.000000 0.000000 441 417 440 440 440 419 Trgb
+0.000000 0.009388 0.002816 444 417 443 439 441 439 Trgb
+0.000000 0.004694 0.001408 444 417 441 439 441 417 Trgb
+0.464524 0.061662 0.105237 449 436 456 454 442 452 Trgb
+0.328483 0.043604 0.074417 452 424 463 435 449 436 Trgb
+0.473280 0.062825 0.107221 456 454 449 436 463 435 Trgb
+0.488213 0.064807 0.110604 463 435 462 449 456 454 Trgb
+0.388439 0.051563 0.088000 456 454 436 460 442 452 Trgb
+0.321110 0.042625 0.072747 436 460 456 454 449 458 Trgb
+0.265926 0.035300 0.060245 428 442 449 436 442 452 Trgb
+0.186236 0.024722 0.042191 435 423 452 424 449 436 Trgb
+0.132435 0.017580 0.030003 449 436 428 442 435 423 Trgb
+0.000000 0.000000 0.000000 423 432 435 423 428 442 Trgb
+0.196048 0.026024 0.044414 463 435 452 424 449 421 Trgb
+0.189841 0.025200 0.043008 436 460 428 442 442 452 Trgb
+0.056350 0.007480 0.012766 428 442 436 460 422 446 Trgb
+0.000000 0.000000 0.000000 422 446 423 432 428 442 Trgb
+0.053800 0.007142 0.012188 452 424 435 423 449 421 Trgb
+0.000000 0.000000 0.000000 435 423 423 432 429 427 Trgb
+0.000000 0.000000 0.000000 394 385 396 383 397 384 Trgb
+0.000000 0.000000 0.000000 396 383 398 382 397 384 Trgb
+0.000000 0.000000 0.000000 398 382 399 383 397 384 Trgb
+0.000000 0.000000 0.000000 399 383 398 385 397 384 Trgb
+0.000000 0.000000 0.000000 398 385 395 386 397 384 Trgb
+0.000000 0.000000 0.000000 395 386 394 385 397 384 Trgb
+0.000000 0.009095 0.002729 395 386 418 431 417 430 Trgb
+0.000000 0.004548 0.001364 395 386 417 430 394 385 Trgb
+0.000000 0.072128 0.021639 398 385 420 430 418 431 Trgb
+0.000000 0.042886 0.012866 398 385 418 431 395 386 Trgb
+0.000000 0.092276 0.027683 399 383 422 429 420 430 Trgb
+0.000000 0.096823 0.029047 399 383 420 430 398 385 Trgb
+0.000000 0.697133 0.209140 418 430 418 428 419 429 Trgb
+0.000000 0.697133 0.209140 418 428 419 427 419 429 Trgb
+0.000000 0.697133 0.209140 419 427 421 428 419 429 Trgb
+0.000000 0.697133 0.209140 421 428 421 430 419 429 Trgb
+0.000000 0.697133 0.209140 421 430 419 431 419 429 Trgb
+0.000000 0.697133 0.209140 419 431 418 430 419 429 Trgb
+0.000000 0.020589 0.006177 419 431 420 435 418 434 Trgb
+0.000000 0.010295 0.003088 419 431 418 434 418 430 Trgb
+0.000000 0.052480 0.015744 421 430 422 435 420 435 Trgb
+0.000000 0.041682 0.012505 421 430 420 435 419 431 Trgb
+0.000000 0.042689 0.012807 421 428 422 433 422 435 Trgb
+0.000000 0.052984 0.015895 421 428 422 435 421 430 Trgb
+0.291762 0.030182 0.064389 426 444 408 438 420 431 Trgb
+0.050562 0.005231 0.011159 415 452 403 442 408 438 Trgb
+0.235211 0.024332 0.051909 408 438 426 444 415 452 Trgb
+0.389230 0.040265 0.085899 429 450 415 452 426 444 Trgb
+0.425848 0.044053 0.093980 432 426 426 444 420 431 Trgb
+0.413548 0.042781 0.091266 437 425 438 439 432 426 Trgb
+0.503383 0.052074 0.111092 426 444 432 426 438 439 Trgb
+0.523316 0.054136 0.115491 438 439 429 450 426 444 Trgb
+0.107113 0.011081 0.023639 408 438 413 420 420 431 Trgb
+0.005095 0.000527 0.001124 403 442 402 428 408 438 Trgb
+0.005095 0.000527 0.001124 413 420 408 438 402 428 Trgb
+0.000000 0.000000 0.000000 402 428 411 417 413 420 Trgb
+0.241200 0.024952 0.053230 413 420 432 426 420 431 Trgb
+0.233994 0.024206 0.051640 426 416 437 425 432 426 Trgb
+0.139181 0.014398 0.030716 432 426 413 420 426 416 Trgb
+0.000000 0.000000 0.000000 411 417 426 416 413 420 Trgb
+0.000000 0.697171 0.209151 417 467 417 468 415 467 Trgb
+0.000000 0.697171 0.209151 417 468 415 468 415 467 Trgb
+0.000000 0.697171 0.209151 415 468 414 467 415 467 Trgb
+0.000000 0.697171 0.209151 414 467 414 467 415 467 Trgb
+0.000000 0.697171 0.209151 414 467 415 467 415 467 Trgb
+0.000000 0.697171 0.209151 415 467 417 467 415 467 Trgb
+0.000000 0.044776 0.013433 421 430 417 468 417 467 Trgb
+0.000000 0.053715 0.016115 421 430 417 467 421 429 Trgb
+0.000000 0.017878 0.005364 419 428 415 467 414 467 Trgb
+0.000000 0.008939 0.002682 419 428 414 467 418 429 Trgb
+0.000000 0.050709 0.015213 421 429 417 467 415 467 Trgb
+0.000000 0.038763 0.011629 421 429 415 467 419 428 Trgb
+0.398748 0.030157 0.085781 427 480 421 486 413 487 Trgb
+0.541936 0.040987 0.116584 433 466 435 471 427 480 Trgb
+0.376526 0.028477 0.081001 407 476 427 480 413 487 Trgb
+0.519713 0.039306 0.111804 421 461 433 466 427 480 Trgb
+0.393916 0.029792 0.084742 427 480 407 476 421 461 Trgb
+0.185847 0.014056 0.039980 405 460 421 461 407 476 Trgb
+0.393176 0.029736 0.084582 435 471 433 466 429 453 Trgb
+0.168457 0.012740 0.036239 401 482 407 476 413 487 Trgb
+0.063268 0.004785 0.013611 407 476 401 482 396 463 Trgb
+0.063268 0.004785 0.013611 396 463 405 460 407 476 Trgb
+0.059310 0.004486 0.012759 429 453 410 449 417 448 Trgb
+0.370954 0.028055 0.079802 433 466 421 461 429 453 Trgb
+0.181888 0.013756 0.039129 410 449 429 453 421 461 Trgb
+0.122578 0.009271 0.026370 421 461 405 460 410 449 Trgb
+0.000000 0.000000 0.000000 405 460 396 463 410 449 Trgb
+0.000000 0.013103 0.003931 419 430 457 446 456 446 Trgb
+0.000000 0.006551 0.001965 419 430 456 446 419 431 Trgb
+0.000000 0.020230 0.006069 420 429 457 444 457 446 Trgb
+0.000000 0.019942 0.005983 420 429 457 446 419 430 Trgb
+0.000000 0.007416 0.002225 420 427 458 443 457 444 Trgb
+0.000000 0.013967 0.004190 420 427 457 444 420 429 Trgb
+0.105394 0.247297 0.070538 453 455 455 452 463 453 Trgb
+0.099335 0.233080 0.066483 463 453 462 453 453 455 Trgb
+0.076087 0.178532 0.050924 460 437 461 434 467 442 Trgb
+0.177850 0.417308 0.119032 463 453 467 442 468 449 Trgb
+0.134392 0.315339 0.089946 455 452 458 444 463 453 Trgb
+0.157331 0.369162 0.105299 467 442 463 453 458 444 Trgb
+0.113669 0.266714 0.076077 458 444 460 437 467 442 Trgb
+0.000000 0.000000 0.000000 448 446 447 447 447 440 Trgb
+0.041228 0.096737 0.027593 455 452 453 455 448 446 Trgb
+0.008584 0.020141 0.005745 447 447 448 446 453 455 Trgb
+0.000000 0.000000 0.000000 451 436 452 436 447 440 Trgb
+0.020505 0.048112 0.013723 461 434 460 437 452 436 Trgb
+0.000000 0.000000 0.000000 452 436 448 446 447 440 Trgb
+0.070226 0.164778 0.047001 458 444 455 452 448 446 Trgb
+0.037582 0.088182 0.025153 448 446 452 436 458 444 Trgb
+0.058087 0.136295 0.038876 460 437 458 444 452 436 Trgb
+0.000000 0.699414 0.209824 398 361 400 364 396 364 Trgb
+0.000000 0.699414 0.209824 400 364 398 366 396 364 Trgb
+0.000000 0.699414 0.209824 398 366 394 367 396 364 Trgb
+0.000000 0.699414 0.209824 394 367 392 364 396 364 Trgb
+0.000000 0.699414 0.209824 392 364 394 361 396 364 Trgb
+0.000000 0.699414 0.209824 394 361 398 361 396 364 Trgb
+0.000000 0.025252 0.007576 387 307 400 364 398 361 Trgb
+0.000000 0.023246 0.006974 387 307 398 361 385 304 Trgb
+0.000000 0.000000 0.000000 381 305 394 361 392 364 Trgb
+0.000000 0.000000 0.000000 381 305 392 364 379 307 Trgb
+0.000000 0.014159 0.004248 385 304 398 361 394 361 Trgb
+0.000000 0.007080 0.002124 385 304 394 361 381 305 Trgb
+0.000000 0.670057 0.201017 363 403 365 405 363 405 Trgb
+0.000000 0.670057 0.201017 365 405 366 407 363 405 Trgb
+0.000000 0.670057 0.201017 366 407 364 407 363 405 Trgb
+0.000000 0.670057 0.201017 364 407 361 406 363 405 Trgb
+0.000000 0.670057 0.201017 361 406 361 404 363 405 Trgb
+0.000000 0.670057 0.201017 361 404 363 403 363 405 Trgb
+0.000000 0.126608 0.037982 398 364 365 405 363 403 Trgb
+0.000000 0.070797 0.021239 398 364 363 403 396 362 Trgb
+0.000000 0.172428 0.051728 399 366 366 407 365 405 Trgb
+0.000000 0.177423 0.053227 399 366 365 405 398 364 Trgb
+0.000000 0.009991 0.002997 396 362 363 403 361 404 Trgb
+0.000000 0.004996 0.001499 396 362 361 404 394 362 Trgb
+0.000000 0.000000 0.000000 321 398 321 400 321 399 Trgb
+0.000000 0.000000 0.000000 321 400 320 401 321 399 Trgb
+0.000000 0.000000 0.000000 320 401 320 400 321 399 Trgb
+0.000000 0.000000 0.000000 320 400 320 397 321 399 Trgb
+0.000000 0.000000 0.000000 320 397 321 396 321 399 Trgb
+0.000000 0.000000 0.000000 321 396 321 398 321 399 Trgb
+0.000000 0.039172 0.011752 363 407 321 400 321 398 Trgb
+0.000000 0.034938 0.010481 363 407 321 398 364 405 Trgb
+0.000000 0.022937 0.006881 363 408 320 401 321 400 Trgb
+0.000000 0.033171 0.009951 363 408 321 400 363 407 Trgb
+0.000000 0.020469 0.006141 364 405 321 398 321 396 Trgb
+0.000000 0.010235 0.003070 364 405 321 396 363 403 Trgb
+0.000000 0.000000 0.000000 316 395 314 403 312 397 Trgb
+0.027860 0.282235 0.062019 323 395 322 402 316 395 Trgb
+0.016503 0.167185 0.036738 314 403 316 395 322 402 Trgb
+0.028485 0.288569 0.063411 322 402 320 407 314 403 Trgb
+0.012424 0.125863 0.027657 320 407 319 407 314 403 Trgb
+0.000000 0.000000 0.000000 315 392 316 395 312 397 Trgb
+0.011357 0.115051 0.025282 322 390 323 395 316 395 Trgb
+0.000000 0.000000 0.000000 316 395 315 392 322 390 Trgb
+0.047694 0.483162 0.106171 326 405 328 397 329 400 Trgb
+0.045026 0.456136 0.100232 322 402 323 395 328 397 Trgb
+0.051278 0.519465 0.114148 328 397 326 405 322 402 Trgb
+0.046094 0.466948 0.102608 320 407 322 402 326 405 Trgb
+0.030749 0.311499 0.068450 328 397 327 394 329 400 Trgb
+0.028523 0.288951 0.063495 323 395 322 390 328 397 Trgb
+0.017829 0.180617 0.039689 327 394 328 397 322 390 Trgb
+0.000000 0.699487 0.209846 371 439 368 439 370 437 Trgb
+0.000000 0.699487 0.209846 368 439 368 437 370 437 Trgb
+0.000000 0.699487 0.209846 368 437 370 436 370 437 Trgb
+0.000000 0.699487 0.209846 370 436 372 436 370 437 Trgb
+0.000000 0.699487 0.209846 372 436 372 438 370 437 Trgb
+0.000000 0.699487 0.209846 372 438 371 439 370 437 Trgb
+0.000000 0.000605 0.000182 363 404 370 436 368 437 Trgb
+0.000000 0.000303 0.000091 363 404 368 437 361 405 Trgb
+0.000000 0.016071 0.004821 365 404 372 436 370 436 Trgb
+0.000000 0.008489 0.002547 365 404 370 436 363 404 Trgb
+0.000000 0.023048 0.006914 365 406 372 438 372 436 Trgb
+0.000000 0.023350 0.007005 365 406 372 436 365 404 Trgb
+0.065732 0.277683 0.068683 373 448 364 445 372 445 Trgb
+0.067033 0.283180 0.070043 364 445 370 438 372 445 Trgb
+0.026637 0.112527 0.027833 361 434 368 430 370 438 Trgb
+0.031584 0.133427 0.033002 370 438 364 445 361 434 Trgb
+0.005867 0.024787 0.006131 360 440 361 434 364 445 Trgb
+0.104129 0.439892 0.108804 379 441 373 448 372 445 Trgb
+0.089964 0.380052 0.094003 381 435 379 440 379 441 Trgb
+0.105430 0.445389 0.110164 370 438 379 441 372 445 Trgb
+0.046486 0.196380 0.048573 368 430 376 430 370 438 Trgb
+0.089831 0.379489 0.093864 379 441 370 438 376 430 Trgb
+0.091265 0.385549 0.095363 376 430 381 435 379 441 Trgb
+0.000920 0.003887 0.000961 368 430 361 434 367 427 Trgb
+0.000000 0.000000 0.000000 361 434 367 427 361 434 Trgb
+0.020769 0.087740 0.021702 376 430 368 430 367 427 Trgb
+0.019849 0.083853 0.020740 367 427 376 430 376 430 Trgb
+0.047000 0.198553 0.049111 381 435 376 430 376 430 Trgb
+0.000000 0.699497 0.209849 381 445 379 445 381 444 Trgb
+0.000000 0.699497 0.209849 379 445 380 444 381 444 Trgb
+0.000000 0.699497 0.209849 380 444 382 443 381 444 Trgb
+0.000000 0.699497 0.209849 382 443 383 443 381 444 Trgb
+0.000000 0.699497 0.209849 383 443 383 444 381 444 Trgb
+0.000000 0.699497 0.209849 383 444 381 445 381 444 Trgb
+0.000000 0.000696 0.000209 362 406 380 444 379 445 Trgb
+0.000000 0.000348 0.000104 362 406 379 445 361 406 Trgb
+0.000000 0.016007 0.004802 364 405 382 443 380 444 Trgb
+0.000000 0.008525 0.002558 364 405 380 444 362 406 Trgb
+0.000000 0.022792 0.006838 365 404 383 443 382 443 Trgb
+0.000000 0.023140 0.006942 365 404 382 443 364 405 Trgb
+0.310982 0.003067 0.062810 384 465 374 464 391 465 Trgb
+0.084174 0.000830 0.017001 363 455 361 451 374 464 Trgb
+0.485793 0.004791 0.098117 374 464 393 453 391 465 Trgb
+0.382596 0.003773 0.077274 371 443 388 435 393 453 Trgb
+0.343159 0.003384 0.069309 393 453 374 464 371 443 Trgb
+0.125602 0.001239 0.025368 361 451 371 443 374 464 Trgb
+0.577749 0.005698 0.116689 393 453 403 454 391 465 Trgb
+0.474551 0.004680 0.095846 388 435 400 433 393 453 Trgb
+0.527070 0.005198 0.106454 403 454 393 453 400 433 Trgb
+0.374535 0.003694 0.075646 400 433 401 437 403 454 Trgb
+0.000000 0.000000 0.000000 379 423 360 435 372 424 Trgb
+0.165038 0.001628 0.033333 388 435 371 443 379 423 Trgb
+0.041428 0.000409 0.008367 360 435 379 423 371 443 Trgb
+0.041428 0.000409 0.008367 371 443 361 451 360 435 Trgb
+0.256994 0.002534 0.051906 400 433 388 435 379 423 Trgb
+0.133383 0.001315 0.026940 379 423 389 425 400 433 Trgb
+0.000000 0.699868 0.209960 440 368 438 370 438 367 Trgb
+0.000000 0.699868 0.209960 438 370 436 368 438 367 Trgb
+0.000000 0.699868 0.209960 436 368 436 365 438 367 Trgb
+0.000000 0.699868 0.209960 436 365 438 363 438 367 Trgb
+0.000000 0.699868 0.209960 438 363 440 365 438 367 Trgb
+0.000000 0.699868 0.209960 440 365 440 368 438 367 Trgb
+0.000000 0.005175 0.001553 394 366 436 368 438 370 Trgb
+0.000000 0.008820 0.002646 394 366 438 370 396 367 Trgb
+0.000000 0.000510 0.000153 394 363 436 365 436 368 Trgb
+0.000000 0.001020 0.000306 394 363 436 368 394 366 Trgb
+0.000000 0.000000 0.000000 396 361 438 363 436 365 Trgb
+0.000000 0.000000 0.000000 396 361 436 365 394 363 Trgb
+0.130763 0.477881 0.121729 448 370 441 374 446 367 Trgb
+0.101991 0.372731 0.094944 441 374 448 370 440 377 Trgb
+0.069415 0.253681 0.064619 440 377 434 377 441 374 Trgb
+0.110114 0.402415 0.102506 441 374 438 363 446 367 Trgb
+0.022716 0.083017 0.021147 430 370 431 362 438 363 Trgb
+0.063387 0.231649 0.059007 438 363 441 374 430 370 Trgb
+0.051461 0.188065 0.047905 434 377 430 370 441 374 Trgb
+0.115504 0.422115 0.107524 446 360 448 370 446 367 Trgb
+0.094854 0.346649 0.088301 438 363 446 360 446 367 Trgb
+0.022716 0.083017 0.021147 431 362 435 356 438 363 Trgb
+0.048127 0.175883 0.044802 446 360 438 363 435 356 Trgb
+0.025411 0.092867 0.023656 435 356 442 357 446 360 Trgb
+0.000000 0.000000 0.000000 431 362 430 370 427 363 Trgb
+0.000000 0.000000 0.000000 430 373 427 363 430 370 Trgb
+0.010790 0.039432 0.010044 430 370 434 377 430 373 Trgb
+0.000000 0.000000 0.000000 435 356 431 362 427 363 Trgb
+0.000000 0.697531 0.209259 400 424 402 424 403 424 Trgb
+0.000000 0.697531 0.209259 402 424 405 424 403 424 Trgb
+0.000000 0.697531 0.209259 405 424 406 424 403 424 Trgb
+0.000000 0.697531 0.209259 406 424 404 424 403 424 Trgb
+0.000000 0.697531 0.209259 404 424 401 425 403 424 Trgb
+0.000000 0.697531 0.209259 401 425 400 424 403 424 Trgb
+0.000000 0.010115 0.003035 395 364 402 424 400 424 Trgb
+0.000000 0.005058 0.001517 395 364 400 424 393 364 Trgb
+0.000000 0.042881 0.012864 398 363 405 424 402 424 Trgb
+0.000000 0.029027 0.008708 398 363 402 424 395 364 Trgb
+0.000000 0.046621 0.013986 399 364 406 424 405 424 Trgb
+0.000000 0.051678 0.015503 399 364 405 424 398 363 Trgb
+0.000000 0.692681 0.207804 401 424 402 423 403 424 Trgb
+0.000000 0.692681 0.207804 402 423 404 423 403 424 Trgb
+0.000000 0.692681 0.207804 404 423 405 424 403 424 Trgb
+0.000000 0.692681 0.207804 405 424 405 426 403 424 Trgb
+0.000000 0.692681 0.207804 405 426 403 426 403 424 Trgb
+0.000000 0.692681 0.207804 403 426 401 424 403 424 Trgb
+0.000000 0.033284 0.009985 403 426 395 452 393 450 Trgb
+0.000000 0.016642 0.004993 403 426 393 450 401 424 Trgb
+0.000000 0.083949 0.025185 405 426 397 451 395 452 Trgb
+0.000000 0.066938 0.020081 405 426 395 452 403 426 Trgb
+0.000000 0.067677 0.020303 405 424 397 450 397 451 Trgb
+0.000000 0.084319 0.025296 405 424 397 451 405 426 Trgb
+0.009477 0.046295 0.011154 386 451 390 456 387 455 Trgb
+0.023261 0.113633 0.027379 396 460 387 455 390 456 Trgb
+0.055621 0.271710 0.065466 390 456 398 458 396 460 Trgb
+0.082430 0.402675 0.097021 398 458 403 455 396 460 Trgb
+0.044843 0.219063 0.052781 398 451 390 446 397 444 Trgb
+0.009477 0.046295 0.011154 390 456 386 451 390 446 Trgb
+0.041455 0.202511 0.048793 390 446 398 451 390 456 Trgb
+0.073815 0.360588 0.086881 398 458 390 456 398 451 Trgb
+0.067345 0.328984 0.079266 403 445 398 451 397 444 Trgb
+0.077745 0.379787 0.091506 404 449 403 455 403 445 Trgb
+0.090766 0.443397 0.106833 398 451 403 445 403 455 Trgb
+0.100624 0.491553 0.118435 403 455 398 458 398 451 Trgb
+0.012865 0.062846 0.015142 390 446 395 440 397 444 Trgb
+0.000000 0.000000 0.000000 386 451 387 445 390 446 Trgb
+0.000000 0.000000 0.000000 395 440 390 446 387 445 Trgb
+0.035367 0.172767 0.041627 395 440 403 445 397 444 Trgb
+0.000000 0.637740 0.191322 379 451 379 452 377 451 Trgb
+0.000000 0.637740 0.191322 379 452 378 452 377 451 Trgb
+0.000000 0.637740 0.191322 378 452 376 451 377 451 Trgb
+0.000000 0.637740 0.191322 376 451 376 449 377 451 Trgb
+0.000000 0.637740 0.191322 376 449 377 449 377 451 Trgb
+0.000000 0.637740 0.191322 377 449 379 451 377 451 Trgb
+0.000000 0.252303 0.075691 405 426 379 452 379 451 Trgb
+0.000000 0.246714 0.074014 405 426 379 451 404 424 Trgb
+0.000000 0.000000 0.000000 403 423 377 449 376 449 Trgb
+0.000000 0.000000 0.000000 403 423 376 449 402 423 Trgb
+0.000000 0.160749 0.048225 404 424 379 451 377 449 Trgb
+0.000000 0.080375 0.024112 404 424 377 449 403 423 Trgb
+0.017498 0.271496 0.057799 377 454 377 459 372 456 Trgb
+0.034877 0.541162 0.115208 382 450 384 455 377 454 Trgb
+0.029698 0.460799 0.098099 377 459 377 454 384 455 Trgb
+0.028021 0.434774 0.092559 384 455 382 458 377 459 Trgb
+0.008105 0.125751 0.026771 377 459 370 455 372 456 Trgb
+0.010945 0.169818 0.036153 370 450 377 454 372 456 Trgb
+0.023966 0.371853 0.079164 378 445 382 450 377 454 Trgb
+0.012233 0.189812 0.040409 377 454 370 450 378 445 Trgb
+0.002840 0.044067 0.009382 373 444 378 445 370 450 Trgb
+0.032683 0.507117 0.107960 384 455 382 450 385 447 Trgb
+0.025310 0.392708 0.083604 385 447 384 452 384 455 Trgb
+0.001552 0.024074 0.005125 370 455 370 450 372 456 Trgb
+0.000000 0.000000 0.000000 371 447 373 444 370 450 Trgb
+0.021771 0.337807 0.071916 382 450 378 445 385 447 Trgb
+0.010039 0.155767 0.033161 378 442 385 447 378 445 Trgb
+0.002840 0.044067 0.009382 378 445 373 444 378 442 Trgb
+0.000000 0.699962 0.209989 436 449 434 451 435 449 Trgb
+0.000000 0.699962 0.209989 434 451 433 451 435 449 Trgb
+0.000000 0.699962 0.209989 433 451 434 449 435 449 Trgb
+0.000000 0.699962 0.209989 434 449 435 447 435 449 Trgb
+0.000000 0.699962 0.209989 435 447 436 447 435 449 Trgb
+0.000000 0.699962 0.209989 436 447 436 449 435 449 Trgb
+0.000000 0.002331 0.000699 402 424 434 449 433 451 Trgb
+0.000000 0.001165 0.000350 402 424 433 451 402 426 Trgb
+0.000000 0.006038 0.001812 404 423 435 447 434 449 Trgb
+0.000000 0.004767 0.001430 404 423 434 449 402 424 Trgb
+0.000000 0.004978 0.001494 405 423 436 447 435 447 Trgb
+0.000000 0.006144 0.001843 405 423 435 447 404 423 Trgb
+0.240590 0.297323 0.107583 437 464 437 455 445 458 Trgb
+0.089658 0.110800 0.040092 424 458 427 449 437 455 Trgb
+0.138434 0.171078 0.061902 437 455 437 464 424 458 Trgb
+0.058982 0.072890 0.026374 428 461 424 458 437 464 Trgb
+0.252665 0.312245 0.112982 447 446 447 455 445 458 Trgb
+0.110270 0.136273 0.049309 442 437 445 440 447 446 Trgb
+0.267098 0.330082 0.119436 437 455 447 446 445 458 Trgb
+0.110128 0.136097 0.049245 427 449 434 441 437 455 Trgb
+0.185412 0.229133 0.082909 447 446 437 455 434 441 Trgb
+0.124703 0.154109 0.055763 434 441 442 437 447 446 Trgb
+0.010206 0.012612 0.004564 427 449 424 458 422 443 Trgb
+0.000000 0.000000 0.000000 422 452 422 443 424 458 Trgb
+0.000000 0.000000 0.000000 432 435 422 443 424 441 Trgb
+0.030676 0.037910 0.013717 434 441 427 449 422 443 Trgb
+0.020470 0.025297 0.009154 422 443 432 435 434 441 Trgb
+0.039214 0.048461 0.017535 442 437 434 441 432 435 Trgb
+0.000000 0.675208 0.202562 239 301 244 305 240 305 Trgb
+0.000000 0.675208 0.202562 244 305 244 309 240 305 Trgb
+0.000000 0.675208 0.202562 244 309 241 309 240 305 Trgb
+0.000000 0.675208 0.202562 241 309 236 305 240 305 Trgb
+0.000000 0.675208 0.202562 236 305 236 301 240 305 Trgb
+0.000000 0.675208 0.202562 236 301 239 301 240 305 Trgb
+0.000000 0.139589 0.041877 309 230 244 305 239 301 Trgb
+0.000000 0.098494 0.029548 309 230 239 301 305 226 Trgb
+0.000000 0.142419 0.042726 310 234 244 309 244 305 Trgb
+0.000000 0.161552 0.048465 310 234 244 305 309 230 Trgb
+0.000000 0.038266 0.011480 305 226 239 301 236 301 Trgb
+0.000000 0.019133 0.005740 305 226 236 301 301 226 Trgb
+0.000000 0.697893 0.209368 237 302 239 302 240 305 Trgb
+0.000000 0.697893 0.209368 239 302 242 305 240 305 Trgb
+0.000000 0.697893 0.209368 242 305 243 308 240 305 Trgb
+0.000000 0.697893 0.209368 243 308 241 308 240 305 Trgb
+0.000000 0.697893 0.209368 241 308 238 305 240 305 Trgb
+0.000000 0.697893 0.209368 238 305 237 302 240 305 Trgb
+0.000000 0.017023 0.005107 238 305 176 350 175 346 Trgb
+0.000000 0.008512 0.002553 238 305 175 346 237 302 Trgb
+0.000000 0.044670 0.013401 241 308 179 352 176 350 Trgb
+0.000000 0.035103 0.010531 241 308 176 350 238 305 Trgb
+0.000000 0.037215 0.011165 243 308 181 352 179 352 Trgb
+0.000000 0.045727 0.013718 243 308 179 352 241 308 Trgb
+0.000000 0.699920 0.209976 176 348 178 347 178 349 Trgb
+0.000000 0.699920 0.209976 178 347 180 348 178 349 Trgb
+0.000000 0.699920 0.209976 180 348 180 351 178 349 Trgb
+0.000000 0.699920 0.209976 180 351 178 352 178 349 Trgb
+0.000000 0.699920 0.209976 178 352 176 351 178 349 Trgb
+0.000000 0.699920 0.209976 176 351 176 348 178 349 Trgb
+0.000000 0.001914 0.000574 176 351 145 347 145 344 Trgb
+0.000000 0.000957 0.000287 176 351 145 344 176 348 Trgb
+0.000000 0.007792 0.002337 178 352 147 348 145 347 Trgb
+0.000000 0.005332 0.001599 178 352 145 347 176 351 Trgb
+0.000000 0.000000 0.000000 176 348 145 344 147 343 Trgb
+0.000000 0.000000 0.000000 176 348 147 343 178 347 Trgb
+0.000000 0.699197 0.209759 146 344 148 344 147 345 Trgb
+0.000000 0.699197 0.209759 148 344 149 345 147 345 Trgb
+0.000000 0.699197 0.209759 149 345 148 347 147 345 Trgb
+0.000000 0.699197 0.209759 148 347 146 347 147 345 Trgb
+0.000000 0.699197 0.209759 146 347 145 345 147 345 Trgb
+0.000000 0.699197 0.209759 145 345 146 344 147 345 Trgb
+0.000000 0.000000 0.000000 145 345 151 323 151 321 Trgb
+0.000000 0.000000 0.000000 145 345 151 321 146 344 Trgb
+0.000000 0.025417 0.007625 148 344 153 321 154 322 Trgb
+0.000000 0.029199 0.008760 148 344 154 322 149 345 Trgb
+0.000000 0.007212 0.002163 146 344 151 321 153 321 Trgb
+0.000000 0.014423 0.004327 146 344 153 321 148 344 Trgb
+0.041504 0.027267 0.013754 155 311 144 313 148 310 Trgb
+0.041504 0.027267 0.013754 148 310 162 312 155 311 Trgb
+0.133196 0.087504 0.044140 164 317 155 311 162 312 Trgb
+0.157254 0.103310 0.052113 143 333 145 322 150 331 Trgb
+0.048551 0.031896 0.016089 138 320 144 313 145 322 Trgb
+0.055597 0.036525 0.018424 145 322 143 333 138 320 Trgb
+0.007046 0.004629 0.002335 141 328 138 320 143 333 Trgb
+0.203918 0.133965 0.067577 157 336 143 333 150 331 Trgb
+0.286927 0.188499 0.095085 145 322 159 325 150 331 Trgb
+0.090055 0.059162 0.029843 144 313 155 311 145 322 Trgb
+0.226774 0.148981 0.075151 159 325 145 322 155 311 Trgb
+0.269915 0.177323 0.089448 155 311 164 317 159 325 Trgb
+0.333590 0.219155 0.110549 159 325 157 336 150 331 Trgb
+0.216378 0.142151 0.071706 167 325 161 332 157 336 Trgb
+0.320101 0.210293 0.106079 157 336 159 325 167 325 Trgb
+0.316578 0.207979 0.104911 164 317 167 325 159 325 Trgb
+0.000000 0.698678 0.209603 147 347 147 346 147 345 Trgb
+0.000000 0.698678 0.209603 147 346 147 344 147 345 Trgb
+0.000000 0.698678 0.209603 147 344 147 344 147 345 Trgb
+0.000000 0.698678 0.209603 147 344 147 345 147 345 Trgb
+0.000000 0.698678 0.209603 147 345 147 346 147 345 Trgb
+0.000000 0.698678 0.209603 147 346 147 347 147 345 Trgb
+0.000000 0.018415 0.005524 147 344 109 337 110 336 Trgb
+0.000000 0.009207 0.002762 147 344 110 336 147 344 Trgb
+0.000000 0.037448 0.011234 147 346 109 338 109 337 Trgb
+0.000000 0.032535 0.009761 147 346 109 337 147 344 Trgb
+0.000000 0.023946 0.007184 147 347 109 339 109 338 Trgb
+0.000000 0.033154 0.009946 147 347 109 338 147 346 Trgb
+0.013745 0.002545 0.003258 96 334 94 347 91 334 Trgb
+0.190914 0.035354 0.045254 106 349 105 355 94 347 Trgb
+0.152290 0.028202 0.036098 94 347 96 334 106 349 Trgb
+0.295853 0.054788 0.070128 108 336 106 349 96 334 Trgb
+0.013745 0.002545 0.003258 99 323 96 334 91 334 Trgb
+0.064484 0.011941 0.015285 113 320 111 324 99 323 Trgb
+0.078229 0.014487 0.018543 96 334 99 323 111 324 Trgb
+0.221792 0.041073 0.052573 111 324 108 336 96 334 Trgb
+0.438208 0.081150 0.103872 119 353 121 339 127 341 Trgb
+0.315714 0.058466 0.074836 105 355 106 349 119 353 Trgb
+0.452629 0.083820 0.107290 121 339 119 353 106 349 Trgb
+0.471392 0.087295 0.111737 106 349 108 336 121 339 Trgb
+0.364147 0.067435 0.086316 121 339 125 328 127 341 Trgb
+0.115222 0.021337 0.027312 111 324 113 320 125 328 Trgb
+0.304506 0.056390 0.072179 125 328 121 339 111 324 Trgb
+0.397330 0.073580 0.094182 108 336 111 324 121 339 Trgb
+0.000000 0.691781 0.207534 149 346 148 347 147 345 Trgb
+0.000000 0.691781 0.207534 148 347 147 346 147 345 Trgb
+0.000000 0.691781 0.207534 147 346 145 345 147 345 Trgb
+0.000000 0.691781 0.207534 145 345 146 344 147 345 Trgb
+0.000000 0.691781 0.207534 146 344 147 345 147 345 Trgb
+0.000000 0.691781 0.207534 147 345 149 346 147 345 Trgb
+0.000000 0.000000 0.000000 145 345 131 375 131 374 Trgb
+0.000000 0.000000 0.000000 145 345 131 374 146 344 Trgb
+0.000000 0.058813 0.017644 147 346 132 376 131 375 Trgb
+0.000000 0.029406 0.008822 147 346 131 375 145 345 Trgb
+0.000000 0.093726 0.028118 148 347 134 376 132 376 Trgb
+0.000000 0.090973 0.027292 148 347 132 376 147 346 Trgb
+0.000000 0.000000 0.000000 124 370 125 375 124 380 Trgb
+0.107475 0.388264 0.099148 136 381 141 379 133 384 Trgb
+0.029201 0.105490 0.026938 133 366 141 370 136 368 Trgb
+0.031304 0.113090 0.028879 125 375 130 379 124 380 Trgb
+0.054230 0.195912 0.050028 133 384 124 380 130 379 Trgb
+0.102218 0.369274 0.094298 130 379 136 381 133 384 Trgb
+0.023944 0.086500 0.022089 129 369 133 366 136 368 Trgb
+0.008378 0.030267 0.007729 125 375 124 370 129 369 Trgb
+0.008378 0.030267 0.007729 133 366 129 369 124 370 Trgb
+0.074140 0.267838 0.068396 141 370 138 374 136 368 Trgb
+0.095135 0.343686 0.087764 138 374 141 370 141 379 Trgb
+0.129488 0.467789 0.119455 141 379 136 381 138 374 Trgb
+0.068883 0.248847 0.063546 138 374 129 369 136 368 Trgb
+0.039682 0.143357 0.036608 130 379 125 375 129 369 Trgb
+0.084621 0.305704 0.078065 129 369 138 374 130 379 Trgb
+0.124231 0.448798 0.114606 136 381 130 379 138 374 Trgb
+0.000000 0.000000 0.000000 133 384 131 383 131 381 Trgb
+0.000000 0.000000 0.000000 131 383 130 380 131 381 Trgb
+0.000000 0.000000 0.000000 130 380 129 379 131 381 Trgb
+0.000000 0.000000 0.000000 129 379 131 380 131 381 Trgb
+0.000000 0.000000 0.000000 131 380 132 382 131 381 Trgb
+0.000000 0.000000 0.000000 132 382 133 384 131 381 Trgb
+0.000000 0.087931 0.026379 178 348 131 380 129 379 Trgb
+0.000000 0.043965 0.013190 178 348 129 379 176 347 Trgb
+0.000000 0.299857 0.089957 179 350 132 382 131 380 Trgb
+0.000000 0.215876 0.064763 179 350 131 380 178 348 Trgb
+0.000000 0.295907 0.088772 179 352 133 384 132 382 Trgb
+0.000000 0.339872 0.101962 179 352 132 382 179 350 Trgb
+0.000000 0.691585 0.207476 106 387 105 387 105 385 Trgb
+0.000000 0.691585 0.207476 105 387 103 386 105 385 Trgb
+0.000000 0.691585 0.207476 103 386 104 384 105 385 Trgb
+0.000000 0.691585 0.207476 104 384 105 383 105 385 Trgb
+0.000000 0.691585 0.207476 105 383 107 385 105 385 Trgb
+0.000000 0.691585 0.207476 107 385 106 387 105 385 Trgb
+0.000000 0.038905 0.011671 131 383 105 387 106 387 Trgb
+0.000000 0.068470 0.020541 131 383 106 387 132 383 Trgb
+0.000000 0.059130 0.017739 133 381 107 385 105 383 Trgb
+0.000000 0.029565 0.008870 133 381 105 383 131 379 Trgb
+0.000000 0.094922 0.028477 132 383 106 387 107 385 Trgb
+0.000000 0.091809 0.027543 132 383 107 385 133 381 Trgb
+0.036557 0.227068 0.052725 105 391 97 391 99 386 Trgb
+0.065148 0.404652 0.093960 111 392 105 395 105 391 Trgb
+0.037225 0.231217 0.053688 97 391 105 391 105 395 Trgb
+0.009849 0.061174 0.014205 97 391 97 381 99 386 Trgb
+0.052749 0.327638 0.076077 104 381 105 391 99 386 Trgb
+0.083603 0.519279 0.120576 113 385 111 392 105 391 Trgb
+0.071872 0.446414 0.103657 105 391 104 381 113 385 Trgb
+0.058213 0.361574 0.083957 110 379 113 385 104 381 Trgb
+0.026041 0.161745 0.037557 97 381 104 381 99 386 Trgb
+0.000000 0.000000 0.000000 100 378 105 376 97 381 Trgb
+0.016192 0.100570 0.023352 104 381 97 381 105 376 Trgb
+0.029241 0.181624 0.042173 105 376 110 379 104 381 Trgb
+0.069674 0.432765 0.100488 111 392 113 385 113 389 Trgb
+0.044015 0.273387 0.063480 113 380 113 389 113 385 Trgb
+0.044284 0.275061 0.063869 113 385 110 379 113 380 Trgb
+0.015313 0.095110 0.022085 110 379 105 376 113 380 Trgb
+0.000000 0.698498 0.209550 130 380 132 380 131 381 Trgb
+0.000000 0.698498 0.209550 132 380 133 381 131 381 Trgb
+0.000000 0.698498 0.209550 133 381 132 383 131 381 Trgb
+0.000000 0.698498 0.209550 132 383 130 383 131 381 Trgb
+0.000000 0.698498 0.209550 130 383 129 381 131 381 Trgb
+0.000000 0.698498 0.209550 129 381 130 380 131 381 Trgb
+0.000000 0.000000 0.000000 129 381 111 401 111 400 Trgb
+0.000000 0.000000 0.000000 129 381 111 400 130 380 Trgb
+0.000000 0.023294 0.006988 130 383 112 403 111 401 Trgb
+0.000000 0.011647 0.003494 130 383 111 401 129 381 Trgb
+0.000000 0.040413 0.012124 132 383 113 403 112 403 Trgb
+0.000000 0.037677 0.011303 132 383 112 403 130 383 Trgb
+0.019290 0.043219 0.012502 102 398 104 406 103 408 Trgb
+0.112959 0.253086 0.073209 111 411 119 410 113 412 Trgb
+0.059036 0.132271 0.038261 113 412 103 408 111 411 Trgb
+0.071059 0.159208 0.046053 104 406 111 411 103 408 Trgb
+0.088148 0.197496 0.057129 110 400 111 391 118 396 Trgb
+0.000000 0.000000 0.000000 102 398 106 393 111 391 Trgb
+0.044502 0.099707 0.028842 111 391 110 400 102 398 Trgb
+0.063792 0.142926 0.041344 104 406 102 398 110 400 Trgb
+0.157140 0.352073 0.101843 121 404 110 400 118 396 Trgb
+0.174684 0.391380 0.113213 119 410 111 411 121 404 Trgb
+0.165263 0.370273 0.107107 110 400 121 404 111 411 Trgb
+0.115561 0.258915 0.074895 111 411 104 406 110 400 Trgb
+0.060868 0.136376 0.039449 111 391 121 395 118 396 Trgb
+0.129860 0.290952 0.084162 121 395 121 404 118 396 Trgb
+0.147404 0.330260 0.095533 122 405 119 410 121 404 Trgb
+0.110704 0.248032 0.071747 121 404 121 395 122 405 Trgb
+0.000000 0.699554 0.209866 131 380 131 379 131 381 Trgb
+0.000000 0.699554 0.209866 131 379 132 380 131 381 Trgb
+0.000000 0.699554 0.209866 132 380 132 382 131 381 Trgb
+0.000000 0.699554 0.209866 132 382 131 383 131 381 Trgb
+0.000000 0.699554 0.209866 131 383 130 382 131 381 Trgb
+0.000000 0.699554 0.209866 130 382 131 380 131 381 Trgb
+0.000000 0.019279 0.005784 130 382 92 378 93 376 Trgb
+0.000000 0.013935 0.004181 130 382 93 376 131 380 Trgb
+0.000000 0.018894 0.005668 131 383 93 380 92 378 Trgb
+0.000000 0.021758 0.006527 131 383 92 378 130 382 Trgb
+0.000000 0.005728 0.001718 131 380 93 376 94 376 Trgb
+0.000000 0.002864 0.000859 131 380 94 376 131 379 Trgb
+0.000000 0.000000 0.000000 83 371 82 384 82 377 Trgb
+0.062639 0.107049 0.033938 90 370 88 379 83 371 Trgb
+0.045424 0.077629 0.024611 82 384 83 371 88 379 Trgb
+0.092448 0.157993 0.050088 88 379 89 387 82 384 Trgb
+0.068102 0.116386 0.036898 89 387 93 390 82 384 Trgb
+0.017215 0.029420 0.009327 94 365 90 370 83 371 Trgb
+0.214613 0.366772 0.116277 98 385 99 373 105 379 Trgb
+0.124366 0.212540 0.067381 88 379 90 370 99 373 Trgb
+0.189956 0.324634 0.102918 99 373 98 385 88 379 Trgb
+0.175253 0.299506 0.094952 89 387 88 379 98 385 Trgb
+0.190267 0.325166 0.103087 104 384 98 385 105 379 Trgb
+0.141265 0.241421 0.076537 98 385 104 384 93 390 Trgb
+0.150908 0.257900 0.081762 93 390 89 387 98 385 Trgb
+0.148111 0.253120 0.080246 99 373 104 372 105 379 Trgb
+0.078942 0.134911 0.042771 90 370 94 365 99 373 Trgb
+0.078030 0.133353 0.042277 104 372 99 373 94 365 Trgb
+0.000000 0.651830 0.195549 178 348 180 348 178 349 Trgb
+0.000000 0.651830 0.195549 180 348 180 350 178 349 Trgb
+0.000000 0.651830 0.195549 180 350 178 351 178 349 Trgb
+0.000000 0.651830 0.195549 178 351 175 350 178 349 Trgb
+0.000000 0.651830 0.195549 175 350 175 349 178 349 Trgb
+0.000000 0.651830 0.195549 175 349 178 348 178 349 Trgb
+0.000000 0.136743 0.041023 178 351 181 395 179 394 Trgb
+0.000000 0.068371 0.020511 178 351 179 394 175 350 Trgb
+0.000000 0.224390 0.067317 180 350 184 394 181 395 Trgb
+0.000000 0.214752 0.064426 180 350 181 395 178 351 Trgb
+0.000000 0.097284 0.029185 180 348 184 392 184 394 Trgb
+0.000000 0.165656 0.049697 180 348 184 394 180 350 Trgb
+0.000000 0.000000 0.000000 181 392 182 391 181 393 Trgb
+0.000000 0.000000 0.000000 182 391 183 393 181 393 Trgb
+0.000000 0.000000 0.000000 183 393 182 394 181 393 Trgb
+0.000000 0.000000 0.000000 182 394 181 395 181 393 Trgb
+0.000000 0.000000 0.000000 181 395 180 394 181 393 Trgb
+0.000000 0.000000 0.000000 180 394 181 392 181 393 Trgb
+0.000000 0.098567 0.029570 182 394 210 409 209 410 Trgb
+0.000000 0.058014 0.017404 182 394 209 410 181 395 Trgb
+0.000000 0.127481 0.038244 183 393 211 408 210 409 Trgb
+0.000000 0.133301 0.039990 183 393 210 409 182 394 Trgb
+0.000000 0.040554 0.012166 182 391 211 407 211 408 Trgb
+0.000000 0.081108 0.024332 182 391 211 408 183 393 Trgb
+0.449781 0.027005 0.095357 204 426 214 420 223 422 Trgb
+0.000000 0.000000 0.000000 191 412 197 394 196 401 Trgb
+0.570312 0.034242 0.120911 214 420 222 408 223 422 Trgb
+0.467717 0.028082 0.099160 228 405 223 422 222 408 Trgb
+0.379352 0.022777 0.080426 222 408 222 395 228 405 Trgb
+0.105134 0.006312 0.022289 203 412 191 412 196 401 Trgb
+0.381323 0.022895 0.080844 214 420 204 426 203 412 Trgb
+0.184233 0.011062 0.039059 191 412 203 412 204 426 Trgb
+0.079098 0.004749 0.016769 204 426 198 421 191 412 Trgb
+0.026036 0.001563 0.005520 197 394 209 394 196 401 Trgb
+0.026036 0.001563 0.005520 209 394 197 394 216 391 Trgb
+0.111265 0.006680 0.023589 216 391 222 395 209 394 Trgb
+0.131171 0.007876 0.027809 209 394 203 412 196 401 Trgb
+0.501854 0.030132 0.106397 222 408 214 420 203 412 Trgb
+0.330800 0.019862 0.070132 203 412 209 394 222 408 Trgb
+0.310894 0.018666 0.065912 222 395 222 408 209 394 Trgb
+0.000000 0.699809 0.209943 180 394 180 392 181 393 Trgb
+0.000000 0.699809 0.209943 180 392 182 391 181 393 Trgb
+0.000000 0.699809 0.209943 182 391 183 392 181 393 Trgb
+0.000000 0.699809 0.209943 183 392 183 394 181 393 Trgb
+0.000000 0.699809 0.209943 183 394 181 395 181 393 Trgb
+0.000000 0.699809 0.209943 181 395 180 394 181 393 Trgb
+0.000000 0.006766 0.002030 181 395 168 392 166 391 Trgb
+0.000000 0.003383 0.001015 181 395 166 391 180 394 Trgb
+0.000000 0.000000 0.000000 180 392 167 389 168 388 Trgb
+0.000000 0.000000 0.000000 180 392 168 388 182 391 Trgb
+0.000000 0.000000 0.000000 180 394 166 391 167 389 Trgb
+0.000000 0.000000 0.000000 180 394 167 389 180 392 Trgb
+0.168457 0.380906 0.109873 173 398 164 393 172 391 Trgb
+0.049902 0.112835 0.032547 164 400 159 394 164 393 Trgb
+0.115650 0.261502 0.075430 164 393 173 398 164 400 Trgb
+0.105923 0.239508 0.069086 171 400 164 400 173 398 Trgb
+0.184304 0.416738 0.120208 177 388 173 398 172 391 Trgb
+0.147343 0.333164 0.096101 173 398 177 388 177 395 Trgb
+0.121770 0.275339 0.079422 177 395 171 400 173 398 Trgb
+0.128611 0.290809 0.083884 164 393 169 384 172 391 Trgb
+0.037902 0.085702 0.024721 159 394 159 386 164 393 Trgb
+0.063804 0.144271 0.041615 169 384 164 393 159 386 Trgb
+0.025902 0.058569 0.016894 159 386 165 380 169 384 Trgb
+0.144458 0.326640 0.094220 169 384 177 388 172 391 Trgb
+0.064954 0.146870 0.042365 173 381 177 387 177 388 Trgb
+0.079651 0.180103 0.051951 177 388 169 384 173 381 Trgb
+0.025902 0.058569 0.016894 165 380 173 381 169 384 Trgb
+0.000000 0.694743 0.208423 182 394 181 393 181 393 Trgb
+0.000000 0.694743 0.208423 181 393 180 392 181 393 Trgb
+0.000000 0.694743 0.208423 180 392 181 392 181 393 Trgb
+0.000000 0.694743 0.208423 181 392 182 393 181 393 Trgb
+0.000000 0.694743 0.208423 182 393 183 394 181 393 Trgb
+0.000000 0.694743 0.208423 183 394 182 394 181 393 Trgb
+0.000000 0.065286 0.019586 183 394 157 420 156 420 Trgb
+0.000000 0.074712 0.022413 183 394 156 420 182 394 Trgb
+0.000000 0.018852 0.005655 181 393 154 418 154 417 Trgb
+0.000000 0.009426 0.002828 181 393 154 417 180 392 Trgb
+0.000000 0.065517 0.019655 182 394 156 420 154 418 Trgb
+0.000000 0.046897 0.014069 182 394 154 418 181 393 Trgb
+0.365097 0.114210 0.095861 159 429 167 431 150 434 Trgb
+0.067185 0.021017 0.017640 139 421 150 434 144 430 Trgb
+0.321781 0.100660 0.084488 149 421 159 429 150 434 Trgb
+0.159955 0.050037 0.041999 150 434 139 421 149 421 Trgb
+0.092770 0.029020 0.024358 143 411 149 421 139 421 Trgb
+0.297384 0.093028 0.078082 172 416 166 418 167 407 Trgb
+0.459583 0.143767 0.120670 167 431 159 429 166 418 Trgb
+0.366658 0.114698 0.096271 166 418 172 416 167 431 Trgb
+0.000000 0.000000 0.000000 144 406 143 411 139 421 Trgb
+0.254068 0.079478 0.066709 166 418 155 406 167 407 Trgb
+0.416267 0.130217 0.109297 159 429 149 421 166 418 Trgb
+0.280026 0.087598 0.073525 155 406 166 418 149 421 Trgb
+0.118355 0.037024 0.031076 149 421 143 411 155 406 Trgb
+0.092397 0.028904 0.024260 155 406 161 403 167 407 Trgb
+0.025585 0.008004 0.006718 161 403 155 406 144 406 Trgb
+0.025585 0.008004 0.006718 143 411 144 406 155 406 Trgb
+0.000000 0.699458 0.209837 243 351 238 351 240 348 Trgb
+0.000000 0.699458 0.209837 238 351 236 348 240 348 Trgb
+0.000000 0.699458 0.209837 236 348 238 345 240 348 Trgb
+0.000000 0.699458 0.209837 238 345 243 345 240 348 Trgb
+0.000000 0.699458 0.209837 243 345 245 348 240 348 Trgb
+0.000000 0.699458 0.209837 245 348 243 351 240 348 Trgb
+0.000000 0.000000 0.000000 238 302 238 345 236 348 Trgb
+0.000000 0.000000 0.000000 238 302 236 348 236 305 Trgb
+0.000000 0.010118 0.003035 242 302 243 345 238 345 Trgb
+0.000000 0.005059 0.001518 242 302 238 345 238 302 Trgb
+0.000000 0.023392 0.007018 244 305 245 348 243 345 Trgb
+0.000000 0.019284 0.005785 244 305 243 345 242 302 Trgb
+0.000000 0.699769 0.209931 279 344 276 345 277 342 Trgb
+0.000000 0.699769 0.209931 276 345 274 343 277 342 Trgb
+0.000000 0.699769 0.209931 274 343 274 340 277 342 Trgb
+0.000000 0.699769 0.209931 274 340 277 338 277 342 Trgb
+0.000000 0.699769 0.209931 277 338 279 340 277 342 Trgb
+0.000000 0.699769 0.209931 279 340 279 344 277 342 Trgb
+0.000000 0.006306 0.001892 238 349 274 343 276 345 Trgb
+0.000000 0.011255 0.003376 238 349 276 345 240 351 Trgb
+0.000000 0.000452 0.000136 238 346 274 340 274 343 Trgb
+0.000000 0.000904 0.000271 238 346 274 343 238 349 Trgb
+0.000000 0.000000 0.000000 241 345 277 338 274 340 Trgb
+0.000000 0.000000 0.000000 241 345 274 340 238 346 Trgb
+0.000000 0.582895 0.174869 282 300 282 301 280 301 Trgb
+0.000000 0.582895 0.174869 282 301 280 302 280 301 Trgb
+0.000000 0.582895 0.174869 280 302 278 301 280 301 Trgb
+0.000000 0.582895 0.174869 278 301 278 300 280 301 Trgb
+0.000000 0.582895 0.174869 278 300 279 299 280 301 Trgb
+0.000000 0.582895 0.174869 279 299 282 300 280 301 Trgb
+0.000000 0.335109 0.100533 277 343 280 302 282 301 Trgb
+0.000000 0.336208 0.100862 277 343 282 301 279 342 Trgb
+0.000000 0.111337 0.033401 275 342 278 301 280 302 Trgb
+0.000000 0.222674 0.066802 275 342 280 302 277 343 Trgb
+0.000000 0.000000 0.000000 275 341 278 300 278 301 Trgb
+0.000000 0.000000 0.000000 275 341 278 301 275 342 Trgb
+0.156119 0.052040 0.041632 292 284 290 293 281 282 Trgb
+0.267437 0.089146 0.071317 290 293 292 284 300 303 Trgb
+0.431611 0.143870 0.115096 300 303 293 309 290 293 Trgb
+0.154020 0.051340 0.041072 290 293 269 291 281 282 Trgb
+0.130571 0.043524 0.034819 278 310 264 306 269 291 Trgb
+0.263240 0.087747 0.070197 269 291 290 293 278 310 Trgb
+0.429512 0.143171 0.114537 293 309 278 310 290 293 Trgb
+0.413054 0.137685 0.110148 293 309 300 303 288 319 Trgb
+0.021351 0.007117 0.005694 269 291 271 282 281 282 Trgb
+0.008229 0.002743 0.002194 264 306 259 298 269 291 Trgb
+0.008229 0.002743 0.002194 271 282 269 291 259 298 Trgb
+0.114112 0.038037 0.030430 267 317 288 319 278 319 Trgb
+0.122342 0.040781 0.032624 264 306 278 310 267 317 Trgb
+0.236454 0.078818 0.063054 288 319 267 317 278 310 Trgb
+0.410955 0.136985 0.109588 278 310 293 309 288 319 Trgb
+0.000000 0.000000 0.000000 259 298 264 306 267 317 Trgb
+0.000000 0.699650 0.209895 320 357 320 355 320 355 Trgb
+0.000000 0.699650 0.209895 320 355 321 353 320 355 Trgb
+0.000000 0.699650 0.209895 321 353 321 353 320 355 Trgb
+0.000000 0.699650 0.209895 321 353 321 355 320 355 Trgb
+0.000000 0.699650 0.209895 321 355 320 357 320 355 Trgb
+0.000000 0.699650 0.209895 320 357 320 357 320 355 Trgb
+0.000000 0.019057 0.005717 276 342 320 355 320 357 Trgb
+0.000000 0.016121 0.004836 276 342 320 357 276 344 Trgb
+0.000000 0.013204 0.003961 277 340 321 353 320 355 Trgb
+0.000000 0.017599 0.005280 277 340 320 355 276 342 Trgb
+0.000000 0.002937 0.000881 277 340 321 353 321 353 Trgb
+0.000000 0.005873 0.001762 277 340 321 353 277 340 Trgb
+0.051513 0.547915 0.119886 325 363 327 354 330 358 Trgb
+0.033489 0.356204 0.077939 317 363 318 358 325 363 Trgb
+0.045176 0.480506 0.105136 327 354 325 363 318 358 Trgb
+0.037293 0.396663 0.086791 318 358 320 351 327 354 Trgb
+0.042482 0.451858 0.098868 327 354 329 351 330 358 Trgb
+0.009041 0.096168 0.021042 322 346 324 347 329 351 Trgb
+0.027114 0.288393 0.063101 329 351 327 354 322 346 Trgb
+0.028262 0.300606 0.065774 320 351 322 346 327 354 Trgb
+0.022883 0.243388 0.053254 319 364 317 363 325 363 Trgb
+0.000000 0.000000 0.000000 314 350 312 359 311 352 Trgb
+0.016992 0.180738 0.039546 318 358 317 363 312 359 Trgb
+0.010607 0.112815 0.024684 312 359 314 350 318 358 Trgb
+0.019221 0.204438 0.044732 320 351 318 358 314 350 Trgb
+0.000000 0.000000 0.000000 316 347 314 350 311 352 Trgb
+0.001576 0.016759 0.003667 314 350 316 347 322 346 Trgb
+0.010190 0.108381 0.023714 322 346 320 351 314 350 Trgb
+0.000000 0.698163 0.209449 265 347 268 347 266 349 Trgb
+0.000000 0.698163 0.209449 268 347 268 350 266 349 Trgb
+0.000000 0.698163 0.209449 268 350 267 351 266 349 Trgb
+0.000000 0.698163 0.209449 267 351 265 351 266 349 Trgb
+0.000000 0.698163 0.209449 265 351 264 348 266 349 Trgb
+0.000000 0.698163 0.209449 264 348 265 347 266 349 Trgb
+0.000000 0.014969 0.004491 278 340 268 347 265 347 Trgb
+0.000000 0.007485 0.002245 278 340 265 347 276 339 Trgb
+0.000000 0.041203 0.012361 279 342 268 350 268 347 Trgb
+0.000000 0.031829 0.009549 279 342 268 347 278 340 Trgb
+0.000000 0.035609 0.010683 277 344 267 351 268 350 Trgb
+0.000000 0.043093 0.012928 277 344 268 350 279 342 Trgb
+0.005581 0.351590 0.071434 263 344 271 348 264 350 Trgb
+0.000872 0.054960 0.011166 264 340 270 341 263 344 Trgb
+0.004101 0.258361 0.052492 271 348 263 344 270 341 Trgb
+0.006315 0.397826 0.080828 270 341 274 347 271 348 Trgb
+0.007937 0.500031 0.101594 271 348 267 356 264 350 Trgb
+0.007251 0.456807 0.092812 274 353 269 357 267 356 Trgb
+0.008813 0.555244 0.112812 267 356 271 348 274 353 Trgb
+0.008671 0.546267 0.110988 274 347 274 353 271 348 Trgb
+0.002352 0.148188 0.030108 259 351 263 344 264 350 Trgb
+0.000284 0.017904 0.003638 259 345 264 340 263 344 Trgb
+0.000284 0.017904 0.003638 263 344 259 351 259 345 Trgb
+0.000000 0.000000 0.000000 258 351 259 345 259 351 Trgb
+0.004708 0.296630 0.060268 267 356 259 351 264 350 Trgb
+0.004307 0.271310 0.055123 269 357 262 356 267 356 Trgb
+0.002640 0.166346 0.033797 259 351 267 356 262 356 Trgb
+0.000000 0.000000 0.000000 262 356 258 351 259 351 Trgb
+0.000000 0.699555 0.209867 274 400 274 399 276 398 Trgb
+0.000000 0.699555 0.209867 274 399 276 397 276 398 Trgb
+0.000000 0.699555 0.209867 276 397 279 396 276 398 Trgb
+0.000000 0.699555 0.209867 279 396 279 397 276 398 Trgb
+0.000000 0.699555 0.209867 279 397 276 399 276 398 Trgb
+0.000000 0.699555 0.209867 276 399 274 400 276 398 Trgb
+0.000000 0.001828 0.000548 238 349 274 399 274 400 Trgb
+0.000000 0.000914 0.000274 238 349 274 400 238 350 Trgb
+0.000000 0.016145 0.004843 240 347 276 397 274 399 Trgb
+0.000000 0.009443 0.002833 240 347 274 399 238 349 Trgb
+0.000000 0.021019 0.006306 243 346 279 396 276 397 Trgb
+0.000000 0.021933 0.006580 243 346 276 397 240 347 Trgb
+0.000000 0.000000 0.000000 275 399 275 398 276 398 Trgb
+0.000000 0.000000 0.000000 275 398 277 396 276 398 Trgb
+0.000000 0.000000 0.000000 277 396 278 397 276 398 Trgb
+0.000000 0.000000 0.000000 278 397 278 398 276 398 Trgb
+0.000000 0.000000 0.000000 278 398 276 400 276 398 Trgb
+0.000000 0.000000 0.000000 276 400 275 399 276 398 Trgb
+0.000000 0.040083 0.012025 276 400 304 426 303 425 Trgb
+0.000000 0.020042 0.006012 276 400 303 425 275 399 Trgb
+0.000000 0.090960 0.027288 278 398 305 424 304 426 Trgb
+0.000000 0.075542 0.022663 278 398 304 426 276 400 Trgb
+0.000000 0.066294 0.019888 278 397 306 422 305 424 Trgb
+0.000000 0.086336 0.025901 278 397 305 424 278 398 Trgb
+0.082512 0.183187 0.053140 311 434 303 434 299 434 Trgb
+0.144624 0.321084 0.093142 299 434 307 431 311 434 Trgb
+0.131873 0.292775 0.084930 313 423 314 416 316 424 Trgb
+0.161712 0.359021 0.104147 316 424 311 434 313 423 Trgb
+0.186888 0.414915 0.120361 307 431 313 423 311 434 Trgb
+0.028116 0.062421 0.018107 300 424 292 424 296 417 Trgb
+0.022788 0.050592 0.014676 299 434 295 431 292 424 Trgb
+0.050904 0.113013 0.032783 292 424 300 424 299 434 Trgb
+0.113016 0.250910 0.072785 307 431 299 434 300 424 Trgb
+0.033444 0.074249 0.021539 305 413 300 424 296 417 Trgb
+0.100265 0.222601 0.064573 314 416 313 423 305 413 Trgb
+0.098496 0.218673 0.063434 300 424 305 413 313 423 Trgb
+0.155280 0.344741 0.100004 313 423 307 431 300 424 Trgb
+0.000000 0.000000 0.000000 292 424 297 414 296 417 Trgb
+0.005328 0.011829 0.003431 297 414 305 413 296 417 Trgb
+0.035213 0.078177 0.022678 309 414 314 416 305 413 Trgb
+0.000000 0.000000 0.000000 276 398 274 397 276 398 Trgb
+0.000000 0.000000 0.000000 274 397 275 397 276 398 Trgb
+0.000000 0.000000 0.000000 275 397 277 398 276 398 Trgb
+0.000000 0.000000 0.000000 277 398 278 399 276 398 Trgb
+0.000000 0.000000 0.000000 278 399 278 399 276 398 Trgb
+0.000000 0.000000 0.000000 278 399 276 398 276 398 Trgb
+0.000000 0.456347 0.136904 278 399 262 440 260 440 Trgb
+0.000000 0.340193 0.102058 278 399 260 440 276 398 Trgb
+0.000000 0.423140 0.126942 278 399 263 440 262 440 Trgb
+0.000000 0.497820 0.149346 278 399 262 440 278 399 Trgb
+0.000000 0.149360 0.044808 276 398 260 440 259 439 Trgb
+0.000000 0.074680 0.022404 276 398 259 439 274 397 Trgb
+0.212339 0.022980 0.047064 249 455 269 460 253 460 Trgb
+0.339481 0.036740 0.075244 252 441 268 447 249 455 Trgb
+0.400003 0.043290 0.088659 269 460 249 455 268 447 Trgb
+0.531030 0.057471 0.117700 268 447 280 448 269 460 Trgb
+0.070112 0.007588 0.015540 242 448 249 455 253 460 Trgb
+0.144590 0.015648 0.032048 241 434 252 441 249 455 Trgb
+0.062885 0.006806 0.013938 249 455 242 448 241 434 Trgb
+0.184671 0.019986 0.040931 280 431 260 426 268 419 Trgb
+0.329260 0.035634 0.072979 268 447 252 441 260 426 Trgb
+0.379562 0.041078 0.084128 260 426 280 431 268 447 Trgb
+0.520810 0.056365 0.115435 280 448 268 447 280 431 Trgb
+0.052664 0.005700 0.011673 260 426 253 419 268 419 Trgb
+0.134369 0.014542 0.029782 252 441 241 434 260 426 Trgb
+0.052664 0.005700 0.011673 253 419 260 426 241 434 Trgb
+0.000000 0.000000 0.000000 241 434 242 431 253 419 Trgb
+0.000000 0.699838 0.209951 305 398 304 400 303 399 Trgb
+0.000000 0.699838 0.209951 304 400 303 401 303 399 Trgb
+0.000000 0.699838 0.209951 303 401 301 400 303 399 Trgb
+0.000000 0.699838 0.209951 301 400 301 398 303 399 Trgb
+0.000000 0.699838 0.209951 301 398 303 397 303 399 Trgb
+0.000000 0.699838 0.209951 303 397 305 398 303 399 Trgb
+0.000000 0.004567 0.001370 275 399 301 400 303 401 Trgb
+0.000000 0.008870 0.002661 275 399 303 401 276 400 Trgb
+0.000000 0.000088 0.000026 275 397 301 398 301 400 Trgb
+0.000000 0.000176 0.000053 275 397 301 400 275 399 Trgb
+0.000000 0.000000 0.000000 277 396 303 397 301 398 Trgb
+0.000000 0.000000 0.000000 277 396 301 398 275 397 Trgb
+0.222606 0.358895 0.116300 316 395 312 409 312 399 Trgb
+0.223481 0.360306 0.116757 312 409 301 403 312 399 Trgb
+0.084475 0.136195 0.044134 299 413 292 405 301 403 Trgb
+0.166838 0.268984 0.087164 301 403 312 409 299 413 Trgb
+0.143692 0.231666 0.075072 307 412 299 413 312 409 Trgb
+0.172674 0.278393 0.090214 306 390 316 395 312 399 Trgb
+0.090628 0.146114 0.047348 316 395 306 390 307 386 Trgb
+0.033050 0.053284 0.017267 298 386 307 386 306 390 Trgb
+0.173550 0.279804 0.090671 301 403 306 390 312 399 Trgb
+0.059072 0.095239 0.030862 292 405 292 394 301 403 Trgb
+0.091503 0.147525 0.047806 306 390 301 403 292 394 Trgb
+0.033050 0.053284 0.017267 292 394 298 386 306 390 Trgb
+0.026022 0.041954 0.013595 292 405 299 413 289 403 Trgb
+0.000619 0.000998 0.000323 292 394 292 405 289 403 Trgb
+0.000000 0.000000 0.000000 298 386 292 394 294 389 Trgb
+0.000000 0.683893 0.205168 199 372 201 375 199 375 Trgb
+0.000000 0.683893 0.205168 201 375 201 378 199 375 Trgb
+0.000000 0.683893 0.205168 201 378 199 378 199 375 Trgb
+0.000000 0.683893 0.205168 199 378 197 376 199 375 Trgb
+0.000000 0.683893 0.205168 197 376 197 373 199 375 Trgb
+0.000000 0.683893 0.205168 197 373 199 372 199 375 Trgb
+0.000000 0.091401 0.027420 243 347 201 375 199 372 Trgb
+0.000000 0.049695 0.014909 243 347 199 372 240 345 Trgb
+0.000000 0.127779 0.038334 243 350 201 378 201 375 Trgb
+0.000000 0.130442 0.039133 243 350 201 375 243 347 Trgb
+0.000000 0.005327 0.001598 240 345 199 372 197 373 Trgb
+0.000000 0.002663 0.000799 240 345 197 373 238 346 Trgb
+0.144027 0.150940 0.058993 191 371 200 384 189 382 Trgb
+0.110751 0.116067 0.045364 199 362 207 369 191 371 Trgb
+0.201210 0.210868 0.082416 200 384 191 371 207 369 Trgb
+0.289919 0.303835 0.118751 207 369 211 381 200 384 Trgb
+0.135622 0.142131 0.055551 200 384 192 390 189 382 Trgb
+0.184399 0.193250 0.075530 192 390 200 384 208 388 Trgb
+0.281513 0.295026 0.115308 211 381 208 388 200 384 Trgb
+0.047625 0.049911 0.019507 183 377 191 371 189 382 Trgb
+0.028132 0.029483 0.011523 190 362 199 362 191 371 Trgb
+0.022189 0.023254 0.009088 191 371 183 377 190 362 Trgb
+0.088563 0.092814 0.036275 207 369 199 362 206 361 Trgb
+0.143049 0.149916 0.058593 206 361 215 374 207 369 Trgb
+0.253947 0.266136 0.104017 211 381 207 369 215 374 Trgb
+0.039219 0.041102 0.016064 192 390 183 377 189 382 Trgb
+0.245542 0.257328 0.100574 208 388 211 381 215 374 Trgb
+0.005944 0.006229 0.002434 199 362 190 362 206 361 Trgb
+0.000000 0.663069 0.198921 237 303 239 304 240 305 Trgb
+0.000000 0.663069 0.198921 239 304 243 306 240 305 Trgb
+0.000000 0.663069 0.198921 243 306 243 307 240 305 Trgb
+0.000000 0.663069 0.198921 243 307 241 306 240 305 Trgb
+0.000000 0.663069 0.198921 241 306 237 304 240 305 Trgb
+0.000000 0.663069 0.198921 237 304 237 303 240 305 Trgb
+0.000000 0.004603 0.001381 237 304 193 373 193 372 Trgb
+0.000000 0.002302 0.000690 237 304 193 372 237 303 Trgb
+0.000000 0.134078 0.040224 241 306 197 375 193 373 Trgb
+0.000000 0.070492 0.021148 241 306 193 373 237 304 Trgb
+0.000000 0.193062 0.057919 243 307 199 376 197 375 Trgb
+0.000000 0.195363 0.058609 243 307 197 375 241 306 Trgb
+0.000000 0.000000 0.000000 195 373 198 373 196 374 Trgb
+0.000000 0.000000 0.000000 198 373 199 374 196 374 Trgb
+0.000000 0.000000 0.000000 199 374 197 375 196 374 Trgb
+0.000000 0.000000 0.000000 197 375 194 376 196 374 Trgb
+0.000000 0.000000 0.000000 194 376 193 374 196 374 Trgb
+0.000000 0.000000 0.000000 193 374 195 373 196 374 Trgb
+0.000000 0.116215 0.034865 194 376 202 423 201 422 Trgb
+0.000000 0.058108 0.017432 194 376 201 422 193 374 Trgb
+0.000000 0.468066 0.140420 197 375 204 423 202 423 Trgb
+0.000000 0.321194 0.096358 197 375 202 423 194 376 Trgb
+0.000000 0.498723 0.149617 199 374 206 422 204 423 Trgb
+0.000000 0.556831 0.167049 199 374 204 423 197 375 Trgb
+0.000000 0.011484 0.003445 202 423 231 450 230 451 Trgb
+0.000000 0.005742 0.001723 202 423 230 451 202 423 Trgb
+0.000000 0.027990 0.008397 204 422 232 449 231 450 Trgb
+0.000000 0.022608 0.006782 204 422 231 450 202 423 Trgb
+0.000000 0.021887 0.006566 205 420 233 448 232 449 Trgb
+0.000000 0.027629 0.008289 205 420 232 449 204 422 Trgb
+0.140855 0.120441 0.052259 222 460 224 457 234 462 Trgb
+0.240544 0.205683 0.089245 244 451 244 451 242 459 Trgb
+0.170476 0.145769 0.063249 244 451 244 451 242 439 Trgb
+0.212239 0.181480 0.078744 238 442 242 439 244 451 Trgb
+0.303940 0.259891 0.112766 234 462 244 451 242 459 Trgb
+0.225159 0.192527 0.083537 224 457 231 450 234 462 Trgb
+0.297267 0.254185 0.110290 244 451 234 462 231 450 Trgb
+0.275635 0.235688 0.102265 231 450 238 442 244 451 Trgb
+0.044827 0.038331 0.016632 224 457 222 460 219 448 Trgb
+0.000000 0.000000 0.000000 230 437 229 437 221 439 Trgb
+0.020908 0.017878 0.007757 229 437 230 437 242 439 Trgb
+0.095304 0.081492 0.035359 242 439 238 442 229 437 Trgb
+0.000000 0.000000 0.000000 229 437 219 448 221 439 Trgb
+0.129131 0.110416 0.047909 231 450 224 457 219 448 Trgb
+0.084303 0.072086 0.031278 219 448 229 437 231 450 Trgb
+0.158699 0.135699 0.058880 238 442 231 450 229 437 Trgb
+0.000000 0.697205 0.209161 203 423 202 421 203 422 Trgb
+0.000000 0.697205 0.209161 202 421 202 420 203 422 Trgb
+0.000000 0.697205 0.209161 202 420 203 421 203 422 Trgb
+0.000000 0.697205 0.209161 203 421 205 422 203 422 Trgb
+0.000000 0.697205 0.209161 205 422 205 423 203 422 Trgb
+0.000000 0.697205 0.209161 205 423 203 423 203 422 Trgb
+0.000000 0.053582 0.016075 205 423 177 446 175 445 Trgb
+0.000000 0.054544 0.016363 205 423 175 445 203 423 Trgb
+0.000000 0.001924 0.000577 202 421 174 444 174 443 Trgb
+0.000000 0.000962 0.000289 202 421 174 443 202 420 Trgb
+0.000000 0.037965 0.011390 203 423 175 445 174 444 Trgb
+0.000000 0.020425 0.006128 203 423 174 444 202 421 Trgb
+0.316256 0.106519 0.084555 174 454 183 458 166 458 Trgb
+0.035608 0.011993 0.009520 158 444 166 458 164 454 Trgb
+0.217204 0.073158 0.058072 166 444 174 454 166 458 Trgb
+0.081816 0.027557 0.021875 166 458 158 444 166 444 Trgb
+0.046208 0.015564 0.012354 163 434 166 444 158 444 Trgb
+0.350542 0.118068 0.093722 193 445 183 444 188 434 Trgb
+0.436507 0.147022 0.116706 183 458 174 454 183 444 Trgb
+0.410770 0.138353 0.109825 183 444 193 445 183 458 Trgb
+0.324951 0.109448 0.086880 188 454 183 458 193 445 Trgb
+0.251490 0.084706 0.067239 183 444 175 430 188 434 Trgb
+0.337456 0.113660 0.090223 174 454 166 444 183 444 Trgb
+0.212668 0.071630 0.056859 175 430 183 444 166 444 Trgb
+0.056808 0.019134 0.015188 166 444 163 434 175 430 Trgb
+0.095631 0.032210 0.025568 175 430 185 430 188 434 Trgb
+0.010600 0.003570 0.002834 163 434 168 430 175 430 Trgb
+0.000000 0.699705 0.209912 228 451 227 452 227 452 Trgb
+0.000000 0.699705 0.209912 227 452 226 453 227 452 Trgb
+0.000000 0.699705 0.209912 226 453 225 453 227 452 Trgb
+0.000000 0.699705 0.209912 225 453 226 451 227 452 Trgb
+0.000000 0.699705 0.209912 226 451 228 450 227 452 Trgb
+0.000000 0.699705 0.209912 228 450 228 451 227 452 Trgb
+0.000000 0.012277 0.003683 203 421 226 451 225 453 Trgb
+0.000000 0.006561 0.001968 203 421 225 453 202 423 Trgb
+0.000000 0.017430 0.005229 204 421 228 450 226 451 Trgb
+0.000000 0.017712 0.005313 204 421 226 451 203 421 Trgb
+0.000000 0.005716 0.001715 205 421 228 451 228 450 Trgb
+0.000000 0.011432 0.003430 205 421 228 450 204 421 Trgb
+0.039036 0.368851 0.081578 229 459 226 459 232 458 Trgb
+0.014453 0.136564 0.030203 221 457 220 456 226 459 Trgb
+0.054216 0.512286 0.113300 232 453 235 454 232 458 Trgb
+0.042493 0.401514 0.088801 235 454 232 453 233 446 Trgb
+0.040366 0.381422 0.084358 229 448 233 446 232 453 Trgb
+0.054876 0.518519 0.114679 226 459 232 453 232 458 Trgb
+0.022702 0.214515 0.047443 220 456 223 452 226 459 Trgb
+0.043812 0.413980 0.091559 232 453 226 459 223 452 Trgb
+0.041026 0.387655 0.085736 223 452 229 448 232 453 Trgb
+0.007590 0.071717 0.015861 225 444 228 445 233 446 Trgb
+0.018790 0.177548 0.039268 233 446 229 448 225 444 Trgb
+0.000000 0.000000 0.000000 225 444 219 450 222 445 Trgb
+0.008716 0.082358 0.018215 223 452 220 456 219 450 Trgb
+0.008250 0.077951 0.017240 219 450 225 444 223 452 Trgb
+0.019450 0.183782 0.040646 229 448 223 452 225 444 Trgb
+0.000000 0.675852 0.202756 157 401 155 402 154 399 Trgb
+0.000000 0.675852 0.202756 155 402 153 400 154 399 Trgb
+0.000000 0.675852 0.202756 153 400 152 397 154 399 Trgb
+0.000000 0.675852 0.202756 152 397 154 396 154 399 Trgb
+0.000000 0.675852 0.202756 154 396 156 398 154 399 Trgb
+0.000000 0.675852 0.202756 156 398 157 401 154 399 Trgb
+0.000000 0.082884 0.024865 197 377 155 402 157 401 Trgb
+0.000000 0.128084 0.038425 197 377 157 401 198 376 Trgb
+0.000000 0.090401 0.027120 198 373 156 398 154 396 Trgb
+0.000000 0.045200 0.013560 198 373 154 396 195 371 Trgb
+0.000000 0.160724 0.048217 198 376 157 401 156 398 Trgb
+0.000000 0.148162 0.044449 198 376 156 398 198 373 Trgb
+0.000000 0.624566 0.187370 133 381 132 382 132 381 Trgb
+0.000000 0.624566 0.187370 132 382 130 382 132 381 Trgb
+0.000000 0.624566 0.187370 130 382 130 380 132 381 Trgb
+0.000000 0.624566 0.187370 130 380 132 379 132 381 Trgb
+0.000000 0.624566 0.187370 132 379 134 379 132 381 Trgb
+0.000000 0.624566 0.187370 134 379 133 381 132 381 Trgb
+0.000000 0.236481 0.070944 154 401 132 382 133 381 Trgb
+0.000000 0.274378 0.082313 154 401 133 381 156 400 Trgb
+0.000000 0.066195 0.019858 153 400 130 382 132 382 Trgb
+0.000000 0.132389 0.039717 153 400 132 382 154 401 Trgb
+0.000000 0.246080 0.073824 156 400 133 381 134 379 Trgb
+0.000000 0.179885 0.053966 156 400 134 379 156 398 Trgb
+0.190356 0.052692 0.048610 134 378 117 386 121 372 Trgb
+0.466388 0.129100 0.119098 146 386 134 397 134 378 Trgb
+0.319369 0.088404 0.081555 117 386 134 378 134 397 Trgb
+0.207824 0.057527 0.053070 134 397 122 397 117 386 Trgb
+0.050611 0.014010 0.012924 117 386 115 370 121 372 Trgb
+0.032644 0.009036 0.008336 115 370 117 386 115 388 Trgb
+0.060843 0.016842 0.015537 122 397 115 388 117 386 Trgb
+0.157712 0.043656 0.040274 132 362 134 378 121 372 Trgb
+0.426508 0.118061 0.108914 149 373 146 386 134 378 Trgb
+0.246846 0.068329 0.063035 134 378 132 362 149 373 Trgb
+0.107101 0.029646 0.027349 142 364 149 373 132 362 Trgb
+0.440979 0.122066 0.112609 134 397 146 386 149 391 Trgb
+0.268552 0.074337 0.068578 149 391 132 398 134 397 Trgb
+0.182415 0.050494 0.046582 122 397 134 397 132 398 Trgb
+0.017967 0.004973 0.004588 115 370 132 362 121 372 Trgb
+0.401099 0.111028 0.102425 146 386 149 373 149 391 Trgb
+0.000000 0.696208 0.208862 150 441 149 441 152 441 Trgb
+0.000000 0.696208 0.208862 149 441 151 441 152 441 Trgb
+0.000000 0.696208 0.208862 151 441 153 441 152 441 Trgb
+0.000000 0.696208 0.208862 153 441 154 441 152 441 Trgb
+0.000000 0.696208 0.208862 154 441 152 441 152 441 Trgb
+0.000000 0.696208 0.208862 152 441 150 441 152 441 Trgb
+0.000000 0.021860 0.006558 154 399 151 441 149 441 Trgb
+0.000000 0.010930 0.003279 154 399 149 441 152 399 Trgb
+0.000000 0.059363 0.017809 156 399 153 441 151 441 Trgb
+0.000000 0.046076 0.013823 156 399 151 441 154 399 Trgb
+0.000000 0.050790 0.015237 157 399 154 441 153 441 Trgb
+0.000000 0.061719 0.018516 157 399 153 441 156 399 Trgb
+0.039530 0.023325 0.012571 135 441 138 440 141 452 Trgb
+0.241096 0.142261 0.076671 141 452 158 453 150 458 Trgb
+0.358611 0.211603 0.114043 149 440 162 441 158 453 Trgb
+0.265973 0.156940 0.084583 158 453 141 452 149 440 Trgb
+0.127736 0.075372 0.040622 138 440 149 440 141 452 Trgb
+0.000000 0.000000 0.000000 138 440 135 441 143 428 Trgb
+0.251597 0.148458 0.080011 158 453 160 454 150 458 Trgb
+0.369112 0.217799 0.117382 162 441 168 442 158 453 Trgb
+0.286976 0.169334 0.091262 160 454 158 453 168 442 Trgb
+0.048676 0.028722 0.015480 160 429 143 428 153 424 Trgb
+0.269050 0.158756 0.085561 162 441 149 440 160 429 Trgb
+0.136882 0.080769 0.043530 143 428 160 429 149 440 Trgb
+0.088206 0.052047 0.028051 149 440 138 440 143 428 Trgb
+0.279552 0.164953 0.088901 168 442 162 441 160 429 Trgb
+0.147384 0.086966 0.046870 160 429 162 430 168 442 Trgb
+0.000000 0.698453 0.209536 154 397 154 397 154 399 Trgb
+0.000000 0.698453 0.209536 154 397 155 399 154 399 Trgb
+0.000000 0.698453 0.209536 155 399 155 401 154 399 Trgb
+0.000000 0.698453 0.209536 155 401 155 401 154 399 Trgb
+0.000000 0.698453 0.209536 155 401 154 399 154 399 Trgb
+0.000000 0.698453 0.209536 154 399 154 397 154 399 Trgb
+0.000000 0.024988 0.007496 154 399 112 404 112 402 Trgb
+0.000000 0.012494 0.003748 154 399 112 402 154 397 Trgb
+0.000000 0.040894 0.012268 155 401 112 406 112 404 Trgb
+0.000000 0.039188 0.011756 155 401 112 404 154 399 Trgb
+0.000000 0.017612 0.005284 155 401 113 406 112 406 Trgb
+0.000000 0.030106 0.009032 155 401 112 406 155 401 Trgb
+0.013474 0.018613 0.006417 101 396 102 410 99 405 Trgb
+0.048974 0.067653 0.023325 110 392 110 400 101 396 Trgb
+0.062448 0.086266 0.029743 102 410 101 396 110 400 Trgb
+0.140330 0.193851 0.066836 110 400 111 410 102 410 Trgb
+0.074641 0.103109 0.035550 104 413 102 410 113 417 Trgb
+0.152523 0.210694 0.072643 111 410 113 417 102 410 Trgb
+0.000000 0.000000 0.000000 112 391 110 392 101 396 Trgb
+0.190994 0.263838 0.090966 121 407 120 394 126 402 Trgb
+0.084474 0.116692 0.040233 110 400 110 392 120 394 Trgb
+0.181141 0.250228 0.086274 120 394 121 407 110 400 Trgb
+0.223523 0.308773 0.106459 111 410 110 400 121 407 Trgb
+0.203187 0.280681 0.096774 123 411 121 407 126 402 Trgb
+0.205527 0.283915 0.097888 121 407 123 411 113 417 Trgb
+0.235716 0.325617 0.112267 113 417 111 410 121 407 Trgb
+0.035500 0.049040 0.016908 110 392 112 391 120 394 Trgb
+0.000000 0.000000 0.000000 196 373 198 373 196 374 Trgb
+0.000000 0.000000 0.000000 198 373 199 374 196 374 Trgb
+0.000000 0.000000 0.000000 199 374 196 375 196 374 Trgb
+0.000000 0.000000 0.000000 196 375 194 375 196 374 Trgb
+0.000000 0.000000 0.000000 194 375 194 374 196 374 Trgb
+0.000000 0.000000 0.000000 194 374 196 373 196 374 Trgb
+0.000000 0.058250 0.017475 196 375 211 428 209 428 Trgb
+0.000000 0.029125 0.008737 196 375 209 428 194 375 Trgb
+0.000000 0.089543 0.026863 199 374 214 427 211 428 Trgb
+0.000000 0.088459 0.026538 199 374 211 428 196 375 Trgb
+0.000000 0.032377 0.009713 198 373 213 426 214 427 Trgb
+0.000000 0.061502 0.018451 198 373 214 427 199 374 Trgb
+0.000000 0.030777 0.009233 211 428 250 437 250 438 Trgb
+0.000000 0.024674 0.007402 211 428 250 438 211 429 Trgb
+0.000000 0.024499 0.007350 211 426 250 435 250 437 Trgb
+0.000000 0.030690 0.009207 211 426 250 437 211 428 Trgb
+0.000000 0.006103 0.001831 212 425 250 434 250 435 Trgb
+0.000000 0.012206 0.003662 212 425 250 435 211 426 Trgb
+0.191392 0.316343 0.101547 257 446 258 441 262 439 Trgb
+0.197092 0.325763 0.104571 248 447 249 440 258 441 Trgb
+0.176218 0.291262 0.093496 258 441 257 446 248 447 Trgb
+0.088556 0.146370 0.046985 247 447 248 447 257 446 Trgb
+0.191022 0.315731 0.101350 258 441 260 430 262 439 Trgb
+0.196721 0.325151 0.104374 249 440 251 431 258 441 Trgb
+0.175477 0.290037 0.093103 260 430 258 441 251 431 Trgb
+0.087553 0.144712 0.046453 251 431 253 425 260 430 Trgb
+0.002361 0.003902 0.001253 241 437 240 442 238 433 Trgb
+0.111529 0.184341 0.059174 249 440 248 447 241 437 Trgb
+0.047688 0.078822 0.025302 240 442 241 437 248 447 Trgb
+0.045589 0.075353 0.024188 248 447 247 447 240 442 Trgb
+0.002361 0.003902 0.001253 243 426 241 437 238 433 Trgb
+0.111158 0.183728 0.058977 251 431 249 440 241 437 Trgb
+0.047318 0.078209 0.025105 241 437 243 426 251 431 Trgb
+0.044957 0.074307 0.023853 253 425 251 431 243 426 Trgb
+0.000000 0.696159 0.208848 210 428 209 426 211 427 Trgb
+0.000000 0.696159 0.208848 209 426 211 426 211 427 Trgb
+0.000000 0.696159 0.208848 211 426 212 426 211 427 Trgb
+0.000000 0.696159 0.208848 212 426 213 428 211 427 Trgb
+0.000000 0.696159 0.208848 213 428 212 429 211 427 Trgb
+0.000000 0.696159 0.208848 212 429 210 428 211 427 Trgb
+0.000000 0.053681 0.016104 212 429 198 454 197 453 Trgb
+0.000000 0.036521 0.010956 212 429 197 453 210 428 Trgb
+0.000000 0.057934 0.017380 213 428 200 453 198 454 Trgb
+0.000000 0.064388 0.019316 213 428 198 454 212 429 Trgb
+0.000000 0.012907 0.003872 210 428 197 453 196 451 Trgb
+0.000000 0.006454 0.001936 210 428 196 451 209 426 Trgb
+0.154398 0.084429 0.047765 188 459 198 464 187 464 Trgb
+0.165493 0.090496 0.051198 202 466 187 464 198 464 Trgb
+0.296883 0.162344 0.091845 198 464 209 463 202 466 Trgb
+0.036020 0.019697 0.011143 183 449 188 459 187 464 Trgb
+0.274719 0.150224 0.084989 209 453 194 450 203 442 Trgb
+0.225659 0.123397 0.069811 198 464 188 459 194 450 Trgb
+0.328338 0.179544 0.101576 194 450 209 453 198 464 Trgb
+0.388466 0.212424 0.120178 209 463 198 464 209 453 Trgb
+0.223779 0.122368 0.069229 209 440 209 453 203 442 Trgb
+0.226457 0.123833 0.070058 209 453 209 440 213 455 Trgb
+0.337526 0.184568 0.104419 213 455 209 463 209 453 Trgb
+0.136021 0.074380 0.042080 194 450 194 438 203 442 Trgb
+0.107282 0.058665 0.033189 188 459 183 449 194 450 Trgb
+0.071262 0.038968 0.022046 194 438 194 450 183 449 Trgb
+0.000000 0.000000 0.000000 183 449 187 441 194 438 Trgb
+0.085080 0.046524 0.026321 194 438 209 440 203 442 Trgb
+0.000000 0.695760 0.208728 202 465 202 466 200 465 Trgb
+0.000000 0.695760 0.208728 202 466 201 466 200 465 Trgb
+0.000000 0.695760 0.208728 201 466 199 465 200 465 Trgb
+0.000000 0.695760 0.208728 199 465 198 464 200 465 Trgb
+0.000000 0.695760 0.208728 198 464 200 465 200 465 Trgb
+0.000000 0.695760 0.208728 200 465 202 465 200 465 Trgb
+0.000000 0.053534 0.016060 213 428 202 466 202 465 Trgb
+0.000000 0.065180 0.019554 213 428 202 465 213 427 Trgb
+0.000000 0.023293 0.006988 211 427 200 465 198 464 Trgb
+0.000000 0.011646 0.003494 211 427 198 464 209 427 Trgb
+0.000000 0.062864 0.018859 213 427 202 465 200 465 Trgb
+0.000000 0.048901 0.014670 213 427 200 465 211 427 Trgb
+0.375597 0.014475 0.078015 207 480 205 484 195 485 Trgb
+0.566565 0.021835 0.117680 216 466 220 471 207 480 Trgb
+0.435134 0.016770 0.090381 205 484 207 480 220 471 Trgb
+0.360499 0.013893 0.074879 187 474 207 480 195 485 Trgb
+0.551467 0.021253 0.114544 202 460 216 466 207 480 Trgb
+0.404938 0.015606 0.084109 207 480 187 474 202 460 Trgb
+0.194920 0.007512 0.040486 187 458 202 460 187 474 Trgb
+0.435649 0.016790 0.090488 220 471 216 466 215 452 Trgb
+0.150481 0.005799 0.031256 185 479 187 474 195 485 Trgb
+0.057909 0.002232 0.012028 187 474 185 479 180 460 Trgb
+0.057909 0.002232 0.012028 180 460 187 458 187 474 Trgb
+0.079101 0.003049 0.016430 215 452 195 446 206 446 Trgb
+0.420551 0.016208 0.087352 216 466 202 460 215 452 Trgb
+0.216112 0.008329 0.044888 195 446 215 452 202 460 Trgb
+0.137011 0.005280 0.028458 202 460 187 458 195 446 Trgb
+0.000000 0.000000 0.000000 187 458 180 460 195 446 Trgb
+
+0.2 20 20 592 592 BDR
+
+grestore
+showpage
+%%Trailer
+%%Pages: 1
+end
+clear cleardictstack
+doretreesave restore
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/escher.ps b/Master/xemtex/doc/ghostscript/examples/escher.ps
new file mode 100644
index 00000000000..74b3e92d6de
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/escher.ps
@@ -0,0 +1,384 @@
+%!
+% If you're concerned that the cpu in your PostScript printer will atrophy
+% from disuse, here is another Escher-like contribution to to keep it busy
+% for a while. It uses PostScript color commands, but will still work on
+% a monochrome printer (but isn't very pretty in black & white).
+%
+% The butterflies are arranged in a hexagonal grid (wallpaper group p6),
+% and the moveto, lineto, curveto commands used to render the tesselation
+% are redefined so as to impose a nonlinear transform that shrinks the
+% infinite plane to an ellipse. This is a sleazy way to mimic Escher's
+% "circle limit" sorts of things.
+%
+% The butterfly permimeter was made by imposing all the symmetry constraints
+% on a path, and then that path was filled in using Adobe Illustrator
+%
+% The routines Xform and next_color are easy to change if you want to hack
+% with them. The code was written to sacrifice efficiency for readability.
+%
+% Bob Wallis
+%
+% UUCP {sun,pyramid,cae780,apple}!weitek!wallis
+
+/eschersave save def % prevent left over side effects
+
+%statusdict begin waittimeout 6000 lt % if you have a slow printer, you
+% {0 60 6000 setdefaulttimeouts} % might need to uncomment this
+%if end
+
+/nlayers 1 def % 1 takes about 10 minutes on a LW+; 2 takes 4x longer
+/warp 1 def % 1 -> ellipsoidal distortion; 0 -> flat Euclidean
+/inch {72 mul} def
+
+/x4 152 def /y4 205.6 def % 6 fold rotation center of bfly
+/x12 387.20 def /y12 403.84 def % 3 fold center of bfly
+
+/dx x4 x12 sub def % [dx,dy] = distance between the
+/dy y4 y12 sub def % two fixed points above
+
+/Dm dx dup mul dy dup mul % magnitude of basis vectors of
+ add sqrt 3 sqrt mul % parallelogram lattice
+def % = |dx,dy| * sqrt(3)
+
+/Da dy dx atan 30 add def
+/D1x Dm Da cos mul def % [D1x, D1y] = basis vector vector #1
+/D1y Dm Da sin mul def % = [Dm,0] exp(j30)
+
+/Da dy dx atan 30 sub def
+/D2x Dm Da cos mul def % [D2x, D2y] = basis vector vector #2
+/D2y Dm Da sin mul def % = [Dm,0] exp(-j30)
+
+/m { moveto} def
+/L {lineto} def
+/S {stroke} def
+/c {curveto} def
+/f {closepath fill} def
+/F {closepath fill} def
+/g { setgray} def
+
+/FillStroke { % fill interior & stroke black border
+ closepath gsave fill grestore 0 setgray stroke
+} def
+
+%
+% Description of 1 butterfly
+%
+/body {
+ 314.96 280.19 m
+ 383.4 261.71 445.11 243.23 513.52 224.68 c
+ 463.68 256.59 490.26 328.83 446.99 360.76 c
+ 423.71 347.32 397.08 339.7 367.07 337.9 c
+ 388.93 358.28 414.14 372.84 442.73 381.58 c
+ 426.68 398.18 394.07 389.7 387.2 403.84 c
+ 371.52 404.96 362.56 372.48 340.16 366.88 c
+ 346.88 396.01 346.88 425.12 340.16 454.24 c
+ 326.72 427.35 320 400.48 320 373.6 c
+ 270.71 352.1 221.44 411.23 168.88 384.02 c
+ 189.04 388.03 202.48 380.4 212.57 366.95 c
+ 216.72 350.85 209.23 341.46 190.1 338.79 c
+ 177.34 343.57 167.94 354.17 161.9 370.59 c
+ 176.06 305.52 132.02 274.05 152 205.6 c
+ 201.29 257.12 250.56 234.72 299.84 279.52 c
+ 288.64 266.08 284.16 252.64 286.4 239.2 c
+ 298.27 223.97 310.15 222.18 322.02 233.82 c
+ 328.62 249.28 328.51 264.74 314.96 280.19 c
+ FillStroke
+} def
+
+/eyes {
+ 294.8125 238.3246 m
+ 296.9115 238.3246 298.6132 242.7964 298.6132 248.3125 c
+ 298.6132 253.8286 296.9115 258.3004 294.8125 258.3004 c
+ 292.7135 258.3004 291.0118 253.8286 291.0118 248.3125 c
+ 291.0118 242.7964 292.7135 238.3246 294.8125 238.3246 c
+ closepath gsave 1 g fill grestore 0 g S
+
+ 319.5 241.1782 m
+ 321.7455 241.1782 323.5659 245.4917 323.5659 250.8125 c
+ 323.5659 256.1333 321.7455 260.4468 319.5 260.4468 c
+ 317.2545 260.4468 315.4341 256.1333 315.4341 250.8125 c
+ 315.4341 245.4917 317.2545 241.1782 319.5 241.1782 c
+ closepath gsave 1 g fill grestore 0 g S
+ 0 g
+ 296.875 242.0939 m
+ 297.4608 242.0939 297.9356 243.479 297.9356 245.1875 c
+ 297.9356 246.896 297.4608 248.2811 296.875 248.2811 c
+ 296.2892 248.2811 295.8143 246.896 295.8143 245.1875 c
+ 295.8143 243.479 296.2892 242.0939 296.875 242.0939 c
+ f
+ 0 g
+ 318.5 243.7707 m
+ 319.281 243.7707 319.9142 245.0766 319.9142 246.6875 c
+ 319.9142 248.2984 319.281 249.6043 318.5 249.6043 c
+ 317.719 249.6043 317.0858 248.2984 317.0858 246.6875 c
+ 317.0858 245.0766 317.719 243.7707 318.5 243.7707 c
+ f
+} def
+
+/stripes {
+ 292 289 m
+ 252 294 241 295 213 279 c
+ 185 263 175 252 159 222 c
+ S
+ 285 313 m
+ 239 326 226 325 206 315 c
+ 186 305 164 278 161 267 c
+ S
+ 298 353 m
+ 262 342 251 339 237 355 c
+ 223 371 213 380 201 383 c
+ S
+ 330 288 m
+ 384 293 385 292 418 280 c
+ 451 268 452 264 473 247 c
+ S
+ 342 306 m
+ 381 311 386 317 410 311 c
+ 434 305 460 287 474 262 c
+ S
+ 345 321 m
+ 352 357 359 367 379 377 c
+ 399 387 409 385 426 382 c
+ S
+ 327.75 367.75 m
+ 336.5 392.25 333.682 403.348 335.25 415.5 c
+ S
+ 320 364.75 m
+ 322 361.75 323.5 360.5 326.25 360 c
+ 329 359.5 332 360.5 334 362.75 c
+ S
+ 316.25 356.5 m
+ 318.75 353.25 320 353 323.25 352.25 c
+ 326.5 351.5 329 352 331.5 353.25 c
+ S
+ 312.5 349 m
+ 316.75 345.5 318.25 344.5 321.25 343.75 c
+ 324.25 343 327 344 329.75 346 c
+ S
+ 310.75 340.75 m
+ 314.25 336.5 316.25 335.25 320 335.25 c
+ 323.75 335.25 327 336.5 329.25 338 c
+ S
+ 308.5 332 m
+ 311.75 328.5 312.5 327.25 317 327 c
+ 321.5 326.75 325.75 328.25 327.75 329.75 c
+ S
+ 305 322 m
+ 309.5 317.75 310.75 317 315 316.5 c
+ 319.25 316 322.25 318 324.75 320 c
+ S
+ 302.25 311 m
+ 307 307.5 307.75 306.25 312.75 306 c
+ 317.75 305.75 320 307.25 323.75 309.5 c
+ S
+ 301.25 298.25 m
+ 304.5 292.75 305.25 292 308.25 292 c
+ 311.25 292 313.75 293.75 315.75 295.75 c
+ S
+} def
+/nostrils {
+ 0 g
+ 304.062 227.775 m
+ 304.599 227.775 305.034 228.883 305.034 230.25 c
+ 305.034 231.616 304.599 232.724 304.062 232.724 c
+ 303.525 232.724 303.09 231.616 303.09 230.25 c
+ 303.09 228.883 303.525 227.775 304.062 227.775 c
+ f
+ 304.062 230.25 m
+ F
+ 309.562 228.275 m
+ 310.099 228.275 310.534 229.383 310.534 230.75 c
+ 310.534 232.116 310.099 233.224 309.562 233.224 c
+ 309.025 233.224 308.59 232.116 308.59 230.75 c
+ 308.59 229.383 309.025 228.275 309.562 228.275 c
+ f
+} def
+/thorax
+{
+ 327.5 300 m
+ 316.5 283 315.5 275.5 308 277.5 c
+ 294 311.5 299 313.5 304 334 c
+ 309 354.5 315.5 362 322.5 372 c
+ 329.5 382 327.5 376.5 331 376 c
+ 334.5 375.5 339.1367 379.1109 339 369 c
+ 338.5 332 333.4999 324.5 330.5 311.5 c
+ 0 g S
+} def
+/spots {
+ next_color
+ 192 242.201 m
+ 202.1535 242.201 210.3848 251.0655 210.3848 262 c
+ 210.3848 272.9345 202.1535 281.799 192 281.799 c
+ 181.8465 281.799 173.6152 272.9345 173.6152 262 c
+ 173.6152 251.0655 181.8465 242.201 192 242.201 c
+ FillStroke
+ next_color
+ 447.5 250.2365 m
+ 459.6061 250.2365 469.4203 257.5181 469.4203 266.5 c
+ 469.4203 275.4819 459.6061 282.7635 447.5 282.7635 c
+ 435.3939 282.7635 425.5797 275.4819 425.5797 266.5 c
+ 425.5797 257.5181 435.3939 250.2365 447.5 250.2365 c
+ FillStroke
+ next_color
+ 401 369.1005 m
+ 409.5914 369.1005 416.5563 373.5327 416.5563 379 c
+ 416.5563 384.4673 409.5914 388.8995 401 388.8995 c
+ 392.4086 388.8995 385.4436 384.4673 385.4436 379 c
+ 385.4436 373.5327 392.4086 369.1005 401 369.1005 c
+ FillStroke
+ next_color
+ 249 348.2721 m
+ 261.4966 348.2721 271.6274 353.9707 271.6274 361 c
+ 271.6274 368.0293 261.4966 373.7279 249 373.7279 c
+ 236.5034 373.7279 226.3726 368.0293 226.3726 361 c
+ 226.3726 353.9707 236.5034 348.2721 249 348.2721 c
+ FillStroke
+} def
+
+/ncolor 6 def
+/cidx 0 def
+
+/next_color {
+ cidx ncolor div % hue
+ .75 % saturation (change these if you like)
+ .8 % lightness
+ sethsbcolor
+ /cidx cidx 1 add ncolor mod def
+} def
+
+/cidx 0 def
+
+/max_r2 % radius^2 for center of outermost ring of butterflies
+ Dm nlayers mul 1.05 mul dup mul
+def
+
+/max_radius max_r2 sqrt def
+/max_radius_inv 1 max_radius div def
+/Dm_inv 1 Dm div def
+
+%
+% Ellipsoidal distortion, maps "nlayers" concentric rings of cells into
+% an ellipse centered on page
+
+% D length of 1 basis vector separating hexagonal cells
+% z0 center of 6-fold rotation = origin of shrink xform
+% z' = (z - z0)/D new coord system
+% |z'| = sqrt(x^2 + [(8.5/11)*y]^2) aspect ratio of paper
+% z" = z' * a/M(|z'|) shrink by "a/M(|z|)" as fcn of radius
+
+% At the max radius, we want the shrunk ellipse to be "W" units wide so it
+% just fits our output format - solve for scale factor "a"
+
+% zmax = n+0.5 for n layers of cells
+% zmax * [a/M(zmax)] = W 1/2 width of output on paper
+% a = M(zmax)*W/zmax solve for "a"
+
+%/M{dup mul 1 add sqrt}bind def % M(u) = sqrt(1+|u|^2) = one possible shrink
+/M { 1.5 add } bind def % M(u) = (1.5+|u|) = another possible one
+/W 3.8 inch def % 1/2 width of ellipse
+/zmax 0.5 nlayers add def % radius at last layer of hexagons
+/a zmax M W mul zmax div def % a = M(zmax)*W/zmax
+
+/Xform { % [x0,y0] = ctr ellipse
+ Matrix transform
+ /y exch def
+ /x exch def
+ /z x dup mul y .773 mul dup mul add sqrt def % ellipse radius
+ /Scale a z M div def % z=a/M(|z|)
+ x Scale mul x0 add % magnify back up
+ y Scale mul y0 add % [x0+x*s, y0+y*s]
+} def
+
+
+/Helvetica findfont 8 scalefont setfont
+4.25 inch 0.5 inch moveto
+(RHW) stringwidth pop -0.5 mul 0 rmoveto
+(RHW) show % autograph
+
+warp 1 eq { % redefine commands to use Xform
+ /moveto { Xform //moveto} def
+ /lineto { Xform //lineto} def
+ /curveto {
+ Xform 6 -2 roll
+ Xform 6 -2 roll
+ Xform 6 -2 roll
+ //curveto
+ } def
+}if
+
+
+/bfly { % paint 1 butterfly
+ next_color body
+ 1 setgray eyes
+ stripes
+ 0 setgray nostrils
+ 0.5 setgray thorax next_color
+ spots
+} def
+
+/x0 x4 def % center
+/y0 y4 def
+
+/T1matrix % xlate to center of image
+ x0 neg y0 neg matrix translate
+def
+
+/Smatrix % scale so that 1 basis vector = 1.0
+ Dm_inv dup matrix scale
+def
+
+/HexCell { % 6 butterflys rotated about center of
+ /cidx 0 def % 6 fold symmetry
+ /color 0 def
+ /T2matrix dx dy matrix translate def
+ 0 60 300 {
+ /angle exch def
+ /Rmatrix angle matrix rotate def
+ /Matrix % translate, rotate, scale - used by Xform
+ T1matrix Rmatrix matrix concatmatrix
+ T2matrix matrix concatmatrix
+ Smatrix matrix concatmatrix
+ def
+ gsave
+ warp 0 eq % then may use usual PostScript machinery
+ { % else using Xform
+ x0 y0 translate angle rotate
+ .5 dup scale
+ dx x0 sub dy y0 sub translate
+ } if
+ bfly
+ next_color
+ grestore
+ } for
+} def
+
+
+%320 x4 sub 240 y4 sub translate
+4.25 inch x4 sub 5.5 inch y4 sub translate
+
+
+0 setlinewidth
+/N 2 def
+N neg 1 N {
+ /i exch def % translate to
+ N neg 1 N { % i*D1 + j*D2
+ /j exch def % and draw HexCell
+ gsave
+ /dx i D1x mul j D2x mul add def % translate HexCell by
+ /dy i D1y mul j D2y mul add def % [dx,dy]
+ /r2 dx dup mul dy dup mul add def % r^2 = |dx,dy|^2
+ r2 max_r2 lt % inside radius?
+ { % yes
+ 1 r2 max_r2 div sub sqrt 2 div
+ setlinewidth % make skinnier lines
+ HexCell % 6 butterflies
+ }
+ if
+ grestore
+ } for
+} for
+
+showpage
+
+clear cleardictstack
+eschersave restore
diff --git a/Master/xemtex/doc/ghostscript/examples/golfer.ps b/Master/xemtex/doc/ghostscript/examples/golfer.ps
new file mode 100644
index 00000000000..9f3a8916d49
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/golfer.ps
@@ -0,0 +1,1401 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator:Adobe Illustrator(TM) 1.0b2-
+%%Title:golfer art+
+%%CreationDate:1/6/87 9:32 AM
+%%DocumentFonts:Helvetica-Bold
+%%BoundingBox:7 31 577 726
+%%TemplateBox:0 -48 576 672
+%%EndComments
+/golfersave save def % prevent left over effects
+100 dict begin
+/q{bind def}bind def
+/Q{load def}q
+/x{exch def}q
+/X/def Q
+/g{/_g x/p{_g setgray}X}q
+/G{/_G x/P{_G setgray}X}q
+/k{/_b x/_g x/_r x/p{_r _g _b setrgbcolor}X}q
+/K{/_B x/_G x/_R x/P{_R _G _B setrgbcolor}X}q
+/d/setdash Q
+/i/setflat Q
+/j/setlinejoin Q
+/J/setlinecap Q
+/M/setmiterlimit Q
+/w/setlinewidth Q
+/_C{.25 sub round .25 add}q
+/_c{transform _C exch _C exch itransform}q
+/c{_c curveto}q
+/C/c Q
+/v{currentpoint 6 2 roll _c curveto}q
+/V/v Q
+/y{_c 2 copy curveto}q
+/Y/y Q
+/l{_c lineto}q
+/L/l Q
+/m{_c moveto}q
+/_e[]X
+/_E{_e length 0 ne{gsave 1 g 0 G 1 i 0 J 0 j .5 w 10 M[]0 d
+/Helvetica-Bold 24 0 0 1 z
+[0.966 0.259 -0.259 0.966
+_e 0 get _e 2 get add 2 div _e 1 get _e 3 get add 2 div]a
+(ERROR: can't fill a path)t T grestore}if}q
+/n/newpath Q
+/N/newpath Q
+/F{p{fill}stopped{/_e[pathbbox]X n _E}if}q
+/f{closepath F}q
+/S{P stroke}q
+/s{closepath S}q
+/B{gsave F grestore S}q
+/b{closepath B}q
+/u{}q
+/U{}q
+/_s/ashow Q
+/_S{(?)exch{2 copy 0 exch put pop dup true charpath currentpoint _m setmatrix
+stroke _M setmatrix moveto 3 copy pop rmoveto}forall pop pop pop n}q
+/_A{_a moveto _t exch 0 exch}q
+/_L{0 _l neg translate _M currentmatrix pop}q
+/_w{dup stringwidth exch 3 -1 roll length 1 sub _t mul add exch}q
+/_z[{0 0}bind{dup _w exch neg 2 div exch neg 2 div}bind
+{dup _w exch neg exch neg}bind]X
+/z{_z exch get/_a x/_t x/_l x exch findfont exch scalefont setfont}q
+/_d{matrix currentmatrix X}q
+/_D{/_m _d gsave concat/_M _d}q
+/e{_D p/t{_A _s _L}X}q
+/r{_D P/t{_A _S _L}X}q
+/a{_D/t{dup p _A _s P _A _S _L}X}q
+/o{_D/t{pop _L}X}q
+/T{grestore}q
+/Z{findfont begin currentdict dup length dict begin
+{1 index/FID ne{X}{pop pop}ifelse}forall/FontName exch X dup length 0 ne
+{/Encoding Encoding 256 array copy X 0 exch{dup type/nametype eq
+{Encoding 2 index 2 index put pop 1 add}{exch pop}ifelse}forall}if pop
+currentdict dup end end/FontName get exch definefont pop}q
+n
+%%EndProlog
+u
+0.9 g
+0 G
+1 i
+0 J
+0 j
+1 w
+10 M
+[]0 d
+%%Note:
+15.815 40.248 m
+567.815 40.002 L
+567.748 716.565 L
+15.998 716.81 L
+15.815 40.248 L
+b
+U
+1 g
+285.313 40 m
+567.688 40.125 L
+567.812 78.375 L
+285.312 78.25 L
+285.313 40 L
+b
+0 g
+175.5 163 m
+180.007 163 173.738 169.081 171.75 168.75 c
+174.75 169.25 176.25 169.5 174.5 171.25 C
+178 171.25 176.349 173.783 175 176.75 c
+173.75 179.5 170.75 182.25 168.25 182 C
+165.5 181.25 167.622 182.838 165.25 186 c
+164.5 187 164.75 187.5 161.75 186.75 c
+158.75 186 163.25 190 156.75 190 c
+150.25 190 148.5 189 145.5 186 c
+142.5 183 139.75 183.75 139.5 182.5 c
+139.25 181.25 139.5 176.75 138.75 175.5 c
+138 174.25 136.75 174.25 136.25 178 c
+135.75 181.75 140.25 182.25 134 187 C
+135.75 190.75 134.5 191.75 131 193.5 C
+131 200 129.202 203.364 119.5 208.5 c
+115.25 210.75 107 212.75 104.75 208.75 c
+102.5 204.75 103 206.5 96.5 205.75 c
+90 205 87.25 202.5 86.5 197.75 c
+85.75 193 82.75 195 79 194.75 c
+75.25 194.5 77 192.75 77.25 191.75 c
+77.5 190.75 75.25 192.5 71.5 192 c
+67.75 191.5 64.25 185.5 69.5 180.75 c
+74.75 176 66.5 180.75 64.25 182.25 c
+62 183.75 60.5 181.75 61 180.25 c
+61.5 178.75 58.75 180.75 57.5 180.75 c
+56.25 180.75 51.008 180.188 52 172.25 c
+52.25 170.25 51.5 170.5 49.75 169.25 c
+48 168 45.75 164.25 48.5 158.75 c
+51.25 153.25 49 150 48 145.5 c
+47 141 48 138.25 51.25 137.25 c
+54.5 136.25 54 133.791 54 130.75 C
+57 130.5 59 129.25 58.75 124.5 C
+62.25 124.5 61.75 126.75 62.5 130 c
+63.25 133.25 65.75 129 66.25 127 c
+66.75 125 67.5 125 72 125 C
+74.75 116.25 74.75 120.5 75.25 117.25 C
+80 117.5 79.5 116.75 83.25 113.75 c
+87 110.75 88.25 115.5 92 118.5 c
+95.75 121.5 94.25 122.75 96.25 118.75 c
+98.25 114.75 98.5 119 101.5 119.25 c
+104.5 119.5 101 115.75 105.25 114.5 c
+109.5 113.25 105 113.75 103.5 111.25 c
+102 108.75 95 103.5 101.75 101.5 c
+108.5 99.5 103.5 99.75 94.75 99.5 c
+86 99.25 73.75 87.5 97.25 73.25 C
+117.25 53.25 117.25 53.5 v
+117.25 53.75 175.25 163 175.5 163 c
+f
+1 J
+0.2 w
+389.709 210.076 m
+511.826 210.076 l
+S
+394.709 212.461 m
+516.826 212.461 l
+S
+415.459 215.112 m
+537.576 215.112 l
+S
+399.709 217.762 m
+521.826 217.762 l
+S
+402.459 222.799 m
+524.576 222.799 l
+S
+402.709 225.45 m
+524.826 225.45 l
+S
+392.959 227.851 m
+515.076 227.851 l
+S
+400.691 232.856 m
+522.809 232.856 l
+S
+388.191 235.241 m
+510.309 235.241 l
+S
+393.941 237.892 m
+516.059 237.892 l
+S
+393.441 240.292 m
+515.559 240.292 l
+S
+396.191 242.928 m
+518.309 242.928 l
+S
+386.441 245.579 m
+508.559 245.579 l
+S
+393.191 248.23 m
+515.309 248.23 l
+S
+414.191 250.631 m
+536.309 250.631 l
+S
+397.95 252.973 m
+520.067 252.973 l
+S
+398.7 255.358 m
+520.817 255.358 l
+S
+400.7 258.009 m
+522.817 258.009 l
+S
+384.45 260.659 m
+506.567 260.659 l
+S
+380.7 265.696 m
+502.817 265.696 l
+S
+379.95 268.347 m
+502.067 268.347 l
+S
+386.7 270.748 m
+508.817 270.748 l
+S
+394.433 275.752 m
+516.55 275.752 l
+S
+381.933 278.138 m
+504.05 278.138 l
+S
+379.433 280.789 m
+501.55 280.789 l
+S
+383.183 283.189 m
+505.3 283.189 l
+S
+370.433 285.825 m
+492.55 285.825 l
+S
+382.433 288.476 m
+504.55 288.476 l
+S
+356.183 291.127 m
+478.3 291.127 l
+S
+372.433 293.277 m
+494.55 293.277 l
+S
+361.866 296.006 m
+483.984 296.006 l
+S
+365.616 298.406 m
+487.734 298.406 l
+S
+366.866 301.042 m
+488.984 301.042 l
+S
+346.866 303.693 m
+468.984 303.693 l
+S
+338.616 306.344 m
+460.734 306.344 l
+S
+330.866 308.494 m
+452.984 308.494 l
+S
+301.575 344.342 m
+423.692 344.342 l
+S
+314.075 346.728 m
+436.192 346.728 l
+S
+318.325 349.378 m
+440.442 349.378 l
+S
+312.075 352.029 m
+434.192 352.029 l
+S
+327.325 357.065 m
+449.442 357.065 l
+S
+327.575 359.716 m
+449.692 359.716 l
+S
+317.825 362.117 m
+439.942 362.117 l
+S
+335.558 367.122 m
+457.675 367.122 l
+S
+313.058 369.507 m
+435.175 369.507 l
+S
+318.808 372.158 m
+440.925 372.158 l
+S
+317.579 404.674 m
+439.696 404.674 l
+S
+322.312 409.179 m
+444.429 409.179 l
+S
+323.812 412.065 m
+445.929 412.065 l
+S
+329.562 414.715 m
+451.679 414.715 l
+S
+329.062 417.116 m
+451.179 417.116 l
+S
+331.812 419.752 m
+453.929 419.752 l
+S
+322.062 422.402 m
+444.179 422.402 l
+S
+328.812 425.053 m
+450.929 425.053 l
+S
+349.812 427.454 m
+471.929 427.454 l
+S
+333.571 429.796 m
+455.688 429.796 l
+S
+334.321 432.182 m
+456.438 432.182 l
+S
+336.321 434.832 m
+458.438 434.832 l
+S
+320.071 437.483 m
+442.188 437.483 l
+S
+316.321 442.519 m
+438.438 442.519 l
+S
+315.571 445.17 m
+437.688 445.17 l
+S
+322.321 447.571 m
+444.438 447.571 l
+S
+330.054 452.576 m
+452.171 452.576 l
+S
+317.554 454.961 m
+439.671 454.961 l
+S
+315.054 457.612 m
+437.171 457.612 l
+S
+318.804 460.012 m
+440.921 460.012 l
+S
+306.054 462.648 m
+428.171 462.648 l
+S
+300.054 465.299 m
+422.171 465.299 l
+S
+291.804 467.95 m
+413.921 467.95 l
+S
+308.054 470.101 m
+430.171 470.101 l
+S
+260.834 543.511 m
+382.951 543.511 l
+S
+246.066 548.016 m
+368.184 548.016 l
+S
+256.066 550.901 m
+378.184 550.901 l
+S
+253.566 553.552 m
+375.684 553.552 l
+S
+230.316 555.952 m
+352.434 555.952 l
+S
+244.566 558.588 m
+366.684 558.588 l
+S
+238.566 561.239 m
+360.684 561.239 l
+S
+230.316 563.89 m
+352.434 563.89 l
+S
+216.566 565.541 m
+338.684 565.541 l
+S
+104.443 572.01 m
+226.575 572.209 l
+S
+98.682 567.48 m
+220.814 567.68 l
+S
+91.688 565.11 m
+213.82 565.31 l
+S
+97.192 561.955 m
+219.324 562.155 l
+S
+73.943 559.517 m
+196.075 559.717 l
+S
+88.199 556.904 m
+210.331 557.103 l
+S
+82.203 554.243 m
+204.335 554.443 l
+S
+73.956 551.578 m
+196.088 551.778 l
+S
+73.707 549.405 m
+195.839 549.605 l
+S
+85.302 539.953 m
+207.434 540.152 l
+S
+79.541 535.423 m
+201.673 535.623 l
+S
+72.547 533.053 m
+194.679 533.253 l
+S
+78.051 529.898 m
+200.183 530.098 l
+S
+54.802 527.46 m
+176.934 527.66 l
+S
+69.058 524.847 m
+191.19 525.046 l
+S
+63.061 522.186 m
+185.194 522.385 l
+S
+54.815 519.521 m
+176.947 519.721 l
+S
+54.566 517.348 m
+176.698 517.547 l
+S
+u
+189.475 196.879 m
+311.592 196.879 l
+S
+176.975 199.265 m
+299.092 199.265 l
+S
+174.475 201.916 m
+296.592 201.916 l
+S
+178.225 204.316 m
+300.342 204.316 l
+S
+165.475 206.952 m
+287.592 206.952 l
+S
+177.475 209.603 m
+299.592 209.603 l
+S
+155.725 212.254 m
+277.842 212.254 l
+S
+167.475 214.404 m
+289.592 214.404 l
+S
+156.908 217.133 m
+279.026 217.133 l
+S
+144.658 219.533 m
+266.776 219.533 l
+S
+161.908 222.169 m
+284.026 222.169 l
+S
+153.908 224.82 m
+276.026 224.82 l
+S
+163.658 226.971 m
+285.776 226.971 l
+S
+152.408 229.121 m
+274.526 229.121 l
+S
+145.925 233.316 m
+268.042 233.316 l
+S
+157.675 235.466 m
+279.792 235.466 l
+S
+147.108 238.195 m
+269.226 238.195 l
+S
+134.858 240.595 m
+256.976 240.595 l
+S
+137.608 243.231 m
+259.726 243.231 l
+S
+144.108 245.882 m
+266.226 245.882 l
+S
+153.858 248.033 m
+275.976 248.033 l
+S
+155.108 231.183 m
+277.226 231.183 l
+S
+103.425 247.816 m
+225.542 247.816 l
+S
+100.175 249.966 m
+222.292 249.966 l
+S
+89.608 252.695 m
+211.726 252.695 l
+S
+77.358 255.095 m
+199.476 255.095 l
+S
+U
+u
+1 g
+0 J
+1 w
+120.001 389.999 m
+170.811 344.713 248.714 349.191 294.001 400.001 c
+339.287 450.811 334.809 528.714 283.999 574.001 c
+233.189 619.287 155.286 614.809 109.999 563.999 c
+64.713 513.189 69.191 435.286 120.001 389.999 c
+f
+202 482 m
+F
+U
+u
+258 302 m
+306.6 267.759 373.759 279.4 408 328 c
+442.241 376.6 430.6 443.759 382 478 c
+333.4 512.241 266.241 500.6 232 452 c
+197.759 403.4 209.4 336.241 258 302 c
+f
+320 390 m
+F
+U
+u
+196 376 m
+252.332 345.072 323.072 365.668 354 422 c
+384.928 478.332 364.332 549.072 308 580 c
+251.668 610.928 180.928 590.332 150 534 c
+119.072 477.668 139.668 406.928 196 376 c
+f
+252 478 m
+F
+U
+u
+106 257 m
+170.064 231.595 242.595 262.936 268 327 c
+293.405 391.064 262.064 463.595 198 489 c
+133.936 514.405 61.405 483.064 36 419 c
+10.595 354.936 41.936 282.405 106 257 c
+f
+152 373 m
+F
+U
+u
+366.001 122 m
+415.706 97.7 475.7 118.296 500 168.001 c
+524.3 217.706 503.704 277.7 453.999 302 c
+404.294 326.3 344.3 305.704 320 255.999 c
+295.7 206.294 316.296 146.3 366.001 122 c
+f
+410 212 m
+F
+U
+u
+227.999 198 m
+267.763 185.85 309.849 208.236 322 247.999 c
+334.15 287.763 311.764 329.849 272.001 342 c
+232.237 354.15 190.151 331.764 178 292.001 c
+165.85 252.237 188.236 210.151 227.999 198 c
+f
+250 270 m
+F
+U
+0 g
+15.75 71.25 m
+24.25 82.75 24.75 84.75 27.75 82.25 c
+30.75 79.75 31.75 81.25 32.75 82.75 c
+33.75 84.25 30.75 86.75 35.75 88.75 c
+40.75 90.75 41.25 91.75 43.25 89.75 c
+45.25 87.75 39.25 89.25 50.25 88.75 c
+61.25 88.25 70.25 81.75 74.25 75.25 c
+78.25 68.75 77.75 67.25 75.25 63.25 c
+72.75 59.25 68.25 56.75 72.25 57.25 c
+76.25 57.75 75.75 60.75 77.75 56.75 c
+79.75 52.75 80.25 51.25 79.25 49.25 c
+78.25 47.25 74.25 46.75 81.25 46.25 c
+88.25 45.75 91.75 37.557 91.75 40.25 c
+15.752 40.248 l
+15.75 71.25 l
+f
+340.75 55.5 m
+F
+u
+u
+3 w
+280.774 44.223 m
+567.893 44.223 l
+S
+280.774 48.728 m
+567.893 48.728 l
+S
+280.774 53.734 m
+567.893 53.734 l
+S
+U
+u
+280.774 58.739 m
+567.893 58.739 l
+S
+280.774 63.245 m
+567.893 63.245 l
+S
+280.774 68.251 m
+567.893 68.251 l
+S
+U
+u
+280.774 73.257 m
+567.893 73.257 l
+S
+280.774 78.263 m
+567.893 78.263 l
+S
+U
+U
+0.8 g
+0.2 w
+243 252 m
+323 235 l
+346 273 l
+368 248 l
+376 247 376 248 V
+377 174 380.5 121 330.5 40 C
+90.5 40 91.5 40 V
+138.5 129 163 162 214 200 C
+236 229 234.527 240.11 238 254 c
+240 262 243 252 y
+b
+0.5 g
+359.5 485 m
+389.267 485 402.5 486.25 415.75 489 c
+429 491.75 435 493.25 439 493.5 c
+443 493.75 490.398 537.797 502.5 562 c
+507 571 514.5 577 517.5 579.5 c
+520.5 582 501.5 591 y
+428 512 428 512.5 v
+428 513 356.5 510 356 509.5 c
+355.5 509 351 488 y
+359 485 359.5 485 v
+b
+0.7 g
+370 496.5 m
+368 480.5 365.5 472.5 364.5 471.5 C
+329.5 476.5 l
+323.5 489.5 l
+370 496.5 l
+b
+0.5 g
+352.75 494 m
+380 493.25 399.626 496.75 407.5 499 c
+418 502 424.586 497.135 432.75 505.5 c
+453 526.25 473.5 544.5 496.5 586.5 C
+473.5 590 473.5 590.5 V
+456 571.5 443 563.5 434 558 c
+425 552.5 416 544 408.5 534.5 C
+399 533 379.5 537.5 364 537.5 c
+348.5 537.5 352.75 494 y
+b
+1 g
+500 583 m
+500.5 577.098 517 573.5 520.5 572 c
+524 570.5 526.353 568.989 526.5 579 c
+526.675 590.992 541 586 539 624 C
+538.5 624 506 628 y
+499.958 583.498 500 583 v
+b
+0 g
+1 J
+3 w
+562 629 m
+343 645 217 644 77 601 C
+52 576 L
+59.5 562 80.132 560.877 87 589 c
+89.513 599.292 87 597 101 601 c
+108.323 603.092 265 654 561 617 C
+562 629 l
+f
+1 G
+0 J
+0.7 w
+305 634 m
+391.5 636.5 415 635 473 632 c
+S
+0.5 w
+213 626.5 m
+153.5 619 125.925 611.699 90.75 602.5 c
+78.654 599.337 82.567 597.884 82.5 592 c
+82.395 582.717 73.75 571 59 572.5 c
+S
+1 g
+0 G
+1 w
+73 595.25 m
+79.25 592.5 76.25 574.75 57.25 580 C
+73 595.25 l
+f
+0.5 g
+0.2 w
+312 574.25 m
+311.25 570.5 310.687 571.687 306.187 569.187 C
+307.687 564.187 311.106 565.66 304.5 561.5 c
+302.594 560.299 305.598 556.561 305.75 555.5 c
+306.038 553.485 304.629 548.098 297 548.5 c
+292.25 548.75 255.5 536 y
+229.5 608.5 l
+224 650 224.5 650 v
+248.101 650 273.345 678.918 298 655.5 c
+324.857 629.99 316.981 613.501 316.75 612.875 c
+313.346 603.644 313.238 604.937 314.75 597.375 c
+316.88 586.725 317.016 588.834 318.625 584.75 C
+320.25 581.875 318.625 580.375 y
+316.689 578.236 313.081 579.809 310.375 579 c
+307.013 577.994 312 574.25 y
+B
+0 g
+0.5 w
+288.5 456 m
+S
+0.2 w
+211 511 m
+194.5 518.5 187 520.5 170.5 500 C
+154.5 498.5 149.5 501 131.5 479.5 C
+151 477.5 140 475 161 460 c
+182 445 190.5 436.5 212 461 C
+224.5 458 229 454.5 238.5 447 C
+238 446.5 237 500.5 y
+211 511 l
+f
+1 g
+207.5 526.5 m
+206 514.5 204 506 236 490.5 C
+242.5 509.5 l
+207.5 526.5 l
+b
+0 g
+1 w
+294.464 627.589 m
+288.571 618.522 284.821 617.313 280 615.5 c
+275.179 613.686 271.429 605.224 277.857 587.089 C
+274.107 586.485 275.179 585.88 275.714 582.858 C
+271.429 599.179 270.357 606.433 259.643 609.455 c
+248.929 612.477 245.714 589.507 247.321 566.537 C
+228.572 554.448 L
+224.639 578.851 235.956 576.38 212.5 600.992 c
+194.17 620.226 195.893 654.791 225.357 658.418 C
+223.214 667.485 233.929 678.97 259.107 677.761 c
+284.286 676.552 281.071 667.485 Y
+302.5 667.485 334.964 665.942 301.429 614.895 C
+306.25 639.679 303.571 643.306 296.607 646.933 C
+299.286 634.239 294.464 627.589 y
+f
+0.7 g
+0.2 w
+207.5 524.5 m
+214.75 519.25 241.5 509 y
+239 504.5 l
+232 503 214.5 508.75 206.75 519 C
+207 522.5 207.5 524.5 y
+b
+1 g
+298 546.5 m
+272.625 574.625 248.5 596 195.5 568.5 C
+196.26 524.417 214.492 504.333 239.5 510.5 C
+298 546.5 l
+b
+0.8 g
+351.5 542 m
+367 540 L
+358.5 509.5 357 489.5 357 482 C
+323.5 482.5 295.5 485.5 284.5 477.5 c
+298.5 468.5 l
+299 457 l
+270.5 451 l
+238.5 483.5 l
+241 513.5 l
+250.5 538 252.5 547.5 282.5 550 C
+306.251 550 334.454 541.702 343.687 542.187 C
+342.576 538.175 346.737 538.055 351.5 542 c
+b
+0 g
+1 w
+333.25 484.75 m
+343.25 458.25 371.5 466 349 418.5 C
+359 348.5 378 357 363 336 C
+358.5 333 359 333 v
+359.5 333 353 328 359 327.5 c
+365 327 371 316.5 373.5 253.5 C
+381 245.5 l
+371 221 371 220.5 V
+360.5 247 358 253 351 261.5 C
+340 238 331.5 220.5 328.5 211.5 C
+301 229.5 265 250 232.5 244.5 C
+247.5 287 246 299.5 275 320.5 C
+270 331.5 268.689 334.634 265.75 336.25 c
+255.75 341.75 261.891 340.771 251 375 c
+247.5 386 249.5 384 255.5 399 C
+252.5 397 253.5 401 253.5 402.5 c
+253.5 404 252.057 400.023 251 402.5 c
+235 440 219.5 489.5 249.5 534 C
+238.5 503.5 242.102 477.13 260 463 c
+269.5 455.5 278.75 453.25 291 457.25 C
+297.5 461 299.549 465.787 282 476.75 C
+292.5 487.5 333.25 484.75 y
+f
+457.25 576.25 m
+454.936 574.233 453.51 595.217 479.25 583 C
+495.651 573.321 495.931 560.263 482.5 560.5 C
+486.25 566 491.682 565.465 478.5 575 c
+463.444 585.891 460.318 578.924 457.25 576.25 c
+f
+1 g
+460.75 581.5 m
+463.387 583.699 467.528 583.937 470.5 583.375 c
+473.752 582.76 473.75 581.75 Y
+461.735 583.841 458.891 579.95 460.75 581.5 c
+f
+0 g
+310.393 647.785 m
+329.089 651.66 328.75 623.692 320.178 607.976 C
+319.107 621.274 316.428 636.386 310.536 635.782 c
+304.643 635.177 310.393 647.785 y
+f
+284.286 663.858 m
+286.964 677.157 280.536 689.246 281.071 689.246 C
+289.107 677.761 288.036 665.672 y
+284.286 663.858 l
+f
+0.2 w
+274.643 683.201 m
+278.929 678.97 280 668.694 279.464 665.672 c
+S
+276.25 686.224 m
+284.393 677.036 283.75 662.045 y
+S
+1 w
+297.679 661.44 m
+312.602 661.44 312.143 677.157 310.536 680.784 C
+308.929 672.321 305.179 666.276 292.857 664.463 C
+297.679 661.44 l
+f
+0.2 w
+295 661.44 m
+298.75 666.276 302.5 675.343 294.464 683.201 c
+S
+300.357 681.992 m
+304.265 669.255 303.814 670.807 292.321 656.604 c
+S
+311.821 649.078 m
+321.464 649.078 330.571 646.66 329.5 627.921 c
+S
+307.536 650.892 m
+316.268 651.33 319.057 653.025 326.821 646.056 c
+330.446 642.802 331.1 637.618 331.107 637.593 c
+S
+304.643 665.067 m
+305.629 663.874 321.031 667.072 321.304 651.569 c
+S
+0.5 w
+311.071 639.679 m
+317.893 638.968 312.696 617.332 v
+S
+1 w
+313.375 612.875 m
+315.455 614.262 313.5 617.375 297.125 615.375 C
+310.375 616.625 311.875 611.875 313.375 612.875 c
+f
+1 g
+308.5 604.875 m
+309.833 600.875 309.125 601.25 307.375 599 C
+302.25 600.625 303.25 599.875 299 602.5 C
+304.25 604.75 308.375 605.25 308.5 604.875 c
+f
+0 g
+307.5 604.437 m
+305.463 602.811 305.481 601.49 307.375 598.937 C
+309.261 601.307 309.489 602.172 308.562 605.062 C
+308.562 604.937 308.191 604.989 307.5 604.437 c
+f
+0.2 w
+305.625 583.75 m
+304.687 582.562 306.5 579.375 308.875 579.75 c
+S
+1 w
+311.125 574.5 m
+310.25 573.898 310 573.437 304.937 569.312 C
+306.229 564.611 308.063 564.014 308.312 564.562 C
+309.775 566.476 307.663 569.565 306.687 569.75 C
+311.812 571.75 311.625 572.5 312 574.25 C
+311.687 574.75 311.176 574.535 311.125 574.5 c
+f
+298.625 603 m
+302 600.437 304.294 599.524 307.812 598.937 c
+308.187 598.875 308.562 598.5 308.687 597.875 c
+S
+297.5 602.25 m
+299.939 602.851 307.687 603.062 311.75 607.812 C
+307.812 606 297.011 602.129 297.5 602.25 c
+f
+213.5 576.125 m
+218.674 549.92 230.862 532.355 245.5 526.5 C
+243.75 514.5 209.75 494.25 195.5 568.5 C
+203.75 572.25 213.347 576.901 213.5 576.125 c
+f
+0.2 w
+343.375 541.75 m
+333.375 534.75 318.25 525.5 312 521.25 c
+S
+351.562 541.937 m
+337.936 530.579 327.2 525.581 313.25 517.75 c
+S
+0.3 w
+312.75 495 m
+291.75 483.5 276.25 476 274.25 466 c
+S
+0.5 w
+229 580.75 m
+235.5 571 241.25 554.75 245.75 528 c
+S
+1 w
+235 581 m
+246 555.75 246.75 537.75 245.75 526 C
+252.125 560.5 243.75 567.75 239.75 581.5 C
+240 581.5 237 581.75 235 581 C
+f
+0.7 g
+0.2 w
+248.625 580.5 m
+253.169 564.605 256.75 553.75 250.25 535.75 C
+257.5 552.75 259.125 558.937 252.875 579.687 C
+251.029 580.149 248.517 580.879 248.625 580.5 c
+b
+0 g
+1 w
+258.25 577.75 m
+262.047 567.879 262.5 552.5 259.25 544.25 C
+267.75 548.25 275 549.75 278.25 549.75 C
+281.75 555.25 282.75 556.75 279.5 565.25 C
+270.06 573.13 257.909 578.635 258.25 577.75 c
+f
+207.5 524.5 m
+F
+207.25 514.75 m
+207.185 514.86 228.75 497.5 238 500.75 C
+236 494.5 l
+225 498 213.924 503.454 207.25 514.75 c
+f
+1 g
+0.2 w
+191 516 m
+175.472 497.418 168.5 492 171.5 453 C
+185 443.5 189 443.5 200 450.5 C
+186.5 469.5 182 491 198.5 515.5 C
+194.5 516 191.339 516.406 191 516 c
+b
+201 515 m
+194 499 187 484 203.5 453 C
+206.5 455 211.5 460.5 212 461 C
+203.5 480.5 193.5 501.5 206 510.5 C
+205 499.5 210.5 490.5 232.5 473.5 C
+232.5 483 231.5 482.5 233 492 C
+221 498 210 505 208 512.5 C
+201 515 l
+b
+0 g
+1 G
+0.5 w
+268 442.5 m
+253.5 402.5 l
+S
+269.5 435.5 m
+258.5 407 258.5 407.5 v
+S
+0.5 G
+0.4 w
+293.5 480.5 m
+297.5 463.5 298.5 460.5 289 445.5 c
+S
+1 G
+1 J
+0.3 w
+349.125 418.125 m
+338.393 403.978 348.387 416.158 341.625 408.875 c
+S
+u
+1 g
+0 G
+0 J
+0.2 w
+336.038 340.015 m
+338.267 329.694 L
+342.937 338.843 L
+340.707 349.164 L
+336.038 340.015 L
+b
+339.487 339.429 m
+B
+U
+u
+328.791 340.569 m
+331.562 330.38 L
+335.743 339.762 L
+332.972 349.952 L
+328.791 340.569 L
+b
+332.267 340.166 m
+B
+U
+u
+321.758 340.67 m
+325.133 330.664 L
+328.746 340.28 L
+325.37 350.286 L
+321.758 340.67 L
+b
+325.252 340.475 m
+B
+U
+u
+314.504 340.97 m
+317.88 330.964 L
+321.492 340.58 L
+318.117 350.586 L
+314.504 340.97 L
+b
+317.998 340.775 m
+B
+U
+u
+u
+307.24 340.468 m
+311.982 331.033 L
+314.214 341.059 L
+309.473 350.494 L
+307.24 340.468 L
+b
+310.727 340.764 m
+B
+U
+u
+300.016 339.751 m
+304.757 330.316 L
+306.99 340.342 L
+302.249 349.777 L
+300.016 339.751 L
+b
+303.503 340.047 m
+B
+U
+U
+u
+u
+292.985 339.2 m
+298.349 330.104 L
+299.903 340.258 L
+294.54 349.353 L
+292.985 339.2 L
+b
+296.444 339.729 m
+B
+U
+u
+285.826 338 m
+291.189 328.904 L
+292.744 339.057 L
+287.38 348.153 L
+285.826 338 L
+b
+289.285 338.529 m
+B
+U
+U
+u
+278.742 336.229 m
+285.413 328.042 L
+285.423 338.314 L
+278.753 346.501 L
+278.742 336.229 L
+b
+282.083 337.272 m
+B
+U
+u
+272.228 332.392 m
+279.743 324.974 L
+278.644 335.186 L
+271.13 342.604 L
+272.228 332.392 L
+b
+275.437 333.789 m
+B
+U
+0 g
+1 G
+1 w
+266.25 335.5 m
+276.25 351.5 284.659 350 343 350 c
+364 350 363 336 y
+S
+271 321 m
+294 332 309 335 362 324 c
+S
+u
+1 g
+0 G
+0.2 w
+350.823 325.912 m
+364.33 322.302 L
+361.658 347.078 L
+348.151 350.689 L
+350.823 325.912 L
+b
+356.24 336.495 m
+B
+U
+0 g
+1 w
+274 347.5 m
+281.5 351.5 280.229 357.581 311 338 c
+316.5 334.5 322.5 338 351 357.5 C
+282 360 l
+274 347.5 l
+f
+1 G
+0.5 w
+269.25 355.75 m
+277.75 353.25 284.25 352.5 288.75 349.75 c
+S
+353.25 358.25 m
+347.25 354 345.5 353.5 339.75 349.5 c
+S
+0.3 w
+355.25 272.75 m
+359.75 281.5 361.25 285 363.25 290.75 c
+S
+0.5 G
+0.5 w
+354 219 m
+339 195 327 176 317 166 c
+S
+323 197 m
+310 150 308 135 235 48 c
+S
+1 w
+241 241.5 m
+232 227.5 215.231 198.443 215 198 c
+192.581 155 178 110 164 71 c
+S
+0 G
+0.2 w
+265.394 600.822 m
+263.576 606.114 262.122 612.994 253.035 607.173 C
+250.126 603.468 249.763 601.704 249.763 596.589 c
+249.763 591.473 254.307 592.179 257.76 587.24 c
+261.213 582.301 266.484 579.302 267.029 588.475 c
+S
+0.3 g
+260.668 605.409 m
+262.486 601.352 261.94 599.941 257.578 597.824 c
+253.216 595.707 257.76 591.473 260.305 592.355 c
+262.849 593.237 263.394 592.532 264.303 591.65 c
+265.212 590.768 266.666 591.826 264.667 594.119 c
+262.667 596.413 259.759 593.943 261.032 597.471 c
+262.304 600.999 260.668 605.409 y
+b
+0 g
+257.578 606.644 m
+254.125 605.056 251.58 604.174 251.58 598.177 c
+251.58 592.179 258.487 590.415 259.214 588.651 c
+S
+u
+1 g
+257.397 584.594 m
+258.601 581.671 262.019 580.25 265.03 581.419 c
+268.041 582.588 269.506 585.905 268.302 588.827 c
+267.097 591.75 263.679 593.172 260.668 592.003 c
+257.657 590.833 256.192 587.516 257.397 584.594 c
+b
+262.849 586.711 m
+B
+U
+u
+0.2 g
+1 w
+258.487 586.358 m
+263.213 582.477 L
+267.211 587.063 L
+262.486 590.944 L
+258.487 586.358 L
+f
+262.849 586.711 m
+F
+U
+0 g
+309.25 579.875 m
+310.75 580.5 313.25 583.125 314.625 581 c
+F
+1 g
+307.964 565.926 m
+307.88 566.015 306.794 566.513 307.22 566.682 c
+307.647 566.851 307.68 566.599 307.935 566.639 C
+307.924 566.13 307.971 566.31 307.964 565.926 c
+f
+510 104 m
+509.564 104.895 511.5 89 495.5 74.5 C
+495.5 68 l
+506 79 518.582 86.358 510 104 c
+f
+0 g
+0.2 w
+403.75 534.25 m
+413.25 533.75 415.75 534.25 417.75 534.75 c
+S
+1 G
+0.3 w
+538.5 629 m
+542 625 547.5 620 y
+S
+548.75 629.25 m
+552.25 625.25 557.75 620.25 y
+S
+0 G
+0.2 w
+518.5 587.5 m
+522.5 586 526 587.5 527 587.5 c
+S
+514 617.5 m
+518 614 518.5 611.5 520 607.5 c
+S
+528.25 613.75 m
+533.25 615.25 532.5 615.5 538.25 614.25 c
+S
+1 g
+538 637.5 m
+537.25 618 533 617.5 531.25 617.5 c
+529.5 617.5 528.235 615.255 528.5 622.5 c
+529.25 643 528.775 643.326 534.25 642.75 c
+539 642.25 539 642.25 540.5 630.75 C
+538 631 l
+538 629 538 631.25 v
+538 633.5 538 637.5 Y
+b
+0.7 g
+507.5 650.75 m
+510 648.5 510.25 645.75 511.75 643.25 c
+513.25 640.75 508.5 638.25 508.5 638 c
+508.5 637.75 507.5 650.75 y
+b
+1 g
+529.25 639.25 m
+528.5 643 527 642.75 524 642.75 c
+521 642.75 519.75 644 519.5 632.25 C
+519.75 638 519.75 641 v
+519.75 644 518.75 644.25 515.25 644.25 c
+511.75 644.25 511.75 646 509.25 641.25 c
+506.75 636.5 505.75 633.25 506 633.25 c
+506.25 633.25 509.75 628.25 Y
+511.5 620.25 512.75 619.75 515.5 619.5 c
+518.25 619.25 520.25 618.25 519.5 623.5 C
+521 618.25 521 617.75 524.75 617 c
+528.5 616.25 528.5 618.25 528.5 622.5 c
+528.5 626.75 529.25 639.25 y
+b
+507.75 636.75 m
+512.687 638.231 515.604 641 515.25 641 C
+517.839 637.469 517.494 629.281 508.75 625.5 C
+508.75 625.25 502 635 502.25 634.75 c
+502.5 634.5 507.75 636.75 y
+b
+493.5 571.5 m
+495.171 563.425 503.634 565.498 503.5 576.25 c
+503.25 596.25 515.75 586.25 509 636.75 c
+508.301 641.977 510 650.75 506.5 651.5 c
+501.514 652.568 500.436 652.26 499.25 644.75 c
+498.5 640 496.5 646.25 496 648.5 c
+495.5 650.75 493.75 651 490.75 650.25 c
+487.75 649.5 488.253 648.665 487.5 645.5 c
+486.194 640.013 486.75 641.75 484.5 645.5 c
+482.39 649.016 481.306 648.011 477.5 647.25 c
+475 646.75 474.784 644.479 475.25 640.75 c
+475.5 638.75 474 642.25 472.5 644.5 c
+471 646.75 469.25 645.5 466.5 645.5 c
+463.75 645.5 463.25 641.003 463.5 635.5 c
+463.511 635.25 463 626.25 y
+449.75 627.25 l
+459.25 618.5 465.606 612.863 468.25 597 c
+468.75 594 468 592.25 470 592.75 C
+459.719 593.497 459.195 585.398 461 586 c
+466.25 587.75 471.75 589.25 476.75 587 c
+481.75 584.75 486.25 584.25 489.5 586.25 C
+490.25 582.75 492 578.75 493.5 571.5 c
+b
+0 g
+486.25 592.5 m
+489 595.25 492.117 593.078 492.25 592.75 c
+494.972 586.028 477 591.75 467.25 593 c
+S
+0.4 w
+470 592.75 m
+474.25 595.75 475 596 481.5 595.75 c
+S
+1 J
+2.5 w
+477.75 630 m
+478.5 620.75 l
+S
+479.25 617.5 m
+480 610.5 l
+S
+480.25 607.75 m
+481 600.25 481 600.5 v
+S
+487.5 631.75 m
+487.75 623.5 l
+S
+487.75 620.75 m
+487.75 612.5 l
+S
+488 609.25 m
+488.25 609.25 487.75 602.5 y
+S
+498 630.75 m
+497.25 623.75 l
+S
+496.75 620.75 m
+495.5 612.5 l
+S
+495.25 609.5 m
+493.75 602 l
+S
+0 J
+0.2 w
+465.5 637.25 m
+464.5 629.75 461.25 628.75 464.75 617 c
+S
+0.5 w
+502 589.25 m
+503.25 585 503.5 583.25 503.5 577 c
+S
+1 g
+1 w
+521.949 86.694 m
+521.637 87.353 523.021 75.657 511.583 64.988 C
+511.583 60.205 l
+519.089 68.299 528.083 73.713 521.949 86.694 c
+f
+553.457 99.673 m
+553.091 100.449 554.713 86.67 541.309 74.1 C
+541.309 68.465 l
+550.105 78.001 560.646 84.379 553.457 99.673 c
+f
+482.74 95.04 m
+482.429 95.699 483.812 84.003 472.375 73.334 C
+472.375 68.551 l
+479.881 76.645 488.875 82.059 482.74 95.04 c
+f
+450.924 87.63 m
+450.69 88.028 451.731 80.968 443.129 74.528 C
+443.129 71.641 l
+448.774 76.527 455.538 79.795 450.924 87.63 c
+f
+0 g
+308 61.5 m
+N
+3 w
+16.002 40.373 m
+568.002 40.127 L
+567.748 716.565 L
+S
+u
+15.815 40.248 m
+567.815 40.002 L
+567.748 716.565 L
+15.998 716.81 L
+15.815 40.248 L
+s
+U
+%%Trailer
+_E end
+showpage
+golfersave restore
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/grayalph.ps b/Master/xemtex/doc/ghostscript/examples/grayalph.ps
new file mode 100644
index 00000000000..fffb5f6a2a1
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/grayalph.ps
@@ -0,0 +1,65 @@
+%!
+% grayscaled text test, including a trivial user bitmap font
+
+/grayalphsave save def % prevent left over effects
+
+/inch {72 mul} def
+
+/BuildCharDict 10 dict def
+/$ExampleFont 7 dict def
+$ExampleFont begin
+ /FontType 3 def % user defined font.
+ /FontMatrix [1 0 0 1 0 0] def
+ /FontBBox [0 0 1 1] def
+ /Encoding 256 array def
+ 0 1 255 {Encoding exch /.notdef put} for
+ Encoding (a) 0 get /plus put
+ /CharStrings 2 dict def
+ CharStrings /.notdef {} put
+ CharStrings /plus
+ { gsave
+ 0 0 moveto
+ 32 32 true [32 0 0 -32 0 32]
+ {<0007E000 0007E000 0007E000 0007E000 0007E000 0007E000 0007E000 0007E000
+ 0007E000 0007E000 0007E000 0007E000 0007E000 FFFFFFFF FFFFFFFF FFFFFFFF
+ FFFFFFFF FFFFFFFF FFFFFFFF 0007E000 0007E000 0007E000 0007E000 0007E000
+ 0007E000 0007E000 0007E000 0007E000 0007E000 0007E000 0007E000 0007E000>
+ } imagemask
+ grestore
+ } put
+ /BuildChar
+ { BuildCharDict begin
+ /char exch def
+ /fontdict exch def
+ /charproc
+ fontdict /Encoding get char get
+ fontdict /CharStrings get
+ exch get def
+ 1 0 0 0 1 1 setcachedevice
+ charproc
+ end
+ } def
+end
+
+/MyFont $ExampleFont definefont pop
+
+ newpath
+ .5 inch 7.5 inch moveto
+ 7.5 inch 0 rlineto
+ 0 1.5 inch rlineto
+ -7.5 inch 0 rlineto
+ closepath
+ 0 setgray
+ fill
+
+ /MyFont findfont 72 scalefont setfont
+ .75 inch 7.75 inch moveto
+ 0 1 6
+ { /n exch def
+ 1 n 6 div sub setgray
+ (a) show
+ } for
+
+showpage
+clear cleardictstack
+grayalphsave restore
diff --git a/Master/xemtex/doc/ghostscript/examples/ridt91.eps b/Master/xemtex/doc/ghostscript/examples/ridt91.eps
new file mode 100644
index 00000000000..1de3c14f29c
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/ridt91.eps
@@ -0,0 +1,135 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 0 380 200
+%%Creator: karl@cs.umb.edu from code by Roger Hersch
+%%CreationDate: 8 March 1991
+%%Title: RIDT logo
+
+% Forget everything we do.
+save
+
+% Make definitions in our own dictionary.
+20 dict begin
+
+% However, this isn't quite a true EPS file, because we use the
+% setscreen operator, which has device- and document-dependent effects.
+% In particular, if the document is being printed in landscape mode, we
+% have to rotate the cell by 90 degrees. The dvips translator sets the
+% variable `isls' to be true in landscape mode, so we test for that.
+%
+/screen_angle
+ /isls where
+ { /isls get { 90 } { 0 } ifelse }
+ { 0 }
+ ifelse
+def
+
+
+% Increasing this number makes the screen finer (it isn't the actual
+% frequency).
+%
+/screen_frequency 10 def
+
+
+% If you change these numbers, change the bounding box comment above.
+% This default size is approximately 134mm by 71mm.
+/logo_width 380 def
+/logo_height 200 def
+
+% Besides changing the size from the outside, you can also change the
+% scale factor defined here. Of course then the bounding box won't be
+% accurate.
+/scalefactor 1 def
+
+% We need a string to hold the gray values.
+/fountainstring 256 string def
+
+% Put values varying from 0 to 255 into the string; these will be values
+% for the image operator.
+0 1 255
+ {
+ fountainstring exch dup
+ 255 div 180 mul cos neg 2 div
+ .5 add 255 mul cvi
+ put
+ }
+bind for
+
+
+% This procedure takes the bounding box of a rectangle, and images
+% /fountainstring into it.
+/fountain
+ {
+ /ury exch def
+ /urx exch def
+ /lly exch def
+ /llx exch def
+ gsave
+ llx lly translate
+
+ % Scale to the size of the rectangle.
+ urx llx sub ury lly sub scale
+
+ % The source image has one row of 256 8-bit values.
+ 1 256 8
+
+ % Map unit square to source.
+ [1 0 0 -256 0 256]
+
+ % Image the string.
+ { fountainstring } image
+ grestore
+ }
+bind def
+
+
+% Draw a line across the bottom for visual anchoring.
+%
+0 0 moveto
+logo_width 0 lineto stroke
+
+ screen_frequency scalefactor div
+ screen_angle
+ { exch pop abs 1 exch sub } bind
+setscreen
+
+scalefactor scalefactor scale
+
+/Palatino-Roman findfont 100 scalefont setfont
+
+% Determine the dimensions of our string.
+/logo_words (RIDT 91) def
+
+0 0 moveto
+logo_words true charpath flattenpath pathbbox
+/word_height exch def
+/word_width exch def
+pop pop % llx and lly are zero.
+newpath
+
+/x_offset logo_width word_width sub 2 div def
+/y_offset 15 def
+
+% Draw the background pattern, which is dark at the top and light at the
+% bottom.
+%
+0 0 logo_width logo_height fountain
+
+% Make the clipping path be `RIDT 91', twice.
+x_offset y_offset moveto
+logo_words true charpath
+x_offset logo_height y_offset word_height add sub moveto
+logo_words true charpath
+clip
+newpath
+
+% Paint the pattern again, this time with light at the top and dark at
+% the bottom.
+%
+logo_width logo_height translate
+180 rotate
+0 0 logo_width logo_height fountain
+
+end
+restore
+
+% showpage
diff --git a/Master/xemtex/doc/ghostscript/examples/snowflak.ps b/Master/xemtex/doc/ghostscript/examples/snowflak.ps
new file mode 100644
index 00000000000..8ebdf0adc8a
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/snowflak.ps
@@ -0,0 +1,93 @@
+%!
+%% Elizabeth D. Zwicky
+%% zwicky@erg.sri.com
+%% multiflake
+
+/snowflaksave save def % prevent left over effects
+/newflake
+{/seed usertime def
+seed srand
+/strokecolor [rand 99 mod 100 div
+ rand 99 mod 100 div
+ 100 rand 22 mod sub 100 div] def
+/fillcolor [rand 99 mod 100 div
+ 100 rand 22 mod sub 100 div
+ rand 99 mod 100 div] def
+/eofillcolor [rand 99 mod 100 div
+ rand 22 mod 100 div
+ 100 rand 22 mod sub 100 div] def
+
+/colorfill {fillcolor aload pop setrgbcolor fill } def
+/colorstroke {strokecolor aload pop setrgbcolor stroke } def
+/eocolorfill {eofillcolor aload pop setrgbcolor eofill } def
+/arm {0 0 moveto
+ 5 {3 {x y x y x y curveto} repeat} repeat
+ seed srand
+ 0 0 moveto
+ 5 {3 {x neg y x neg y x neg y curveto} repeat} repeat
+ seed srand
+} def
+
+ newpath
+
+0 0 moveto boxsize 0 rlineto 0 boxsize rlineto boxsize neg 0 rlineto
+0 0 lineto
+
+rand 99 mod 100 div
+100 rand 22 mod sub 100 div
+100 rand 22 mod sub 100 div
+ sethsbcolor fill
+seed srand
+boxsize 2 div boxsize 2 div translate
+
+%% If the device you are using can handle complex fills, replace the
+%% next three lines with:
+%%
+6 {arm 60 rotate} repeat
+gsave colorfill grestore gsave eocolorfill grestore colorstroke
+%%
+%% This will be not only faster, but prettier. On a LaserWriter or a
+%% Tektronix Phaser II PS it gives a limitcheck.
+
+%% 6 {arm 60 rotate colorfill} repeat
+%% 6 {arm 60 rotate eocolorfill} repeat
+%% 6 {arm 60 rotate} repeat colorstroke
+} def
+
+1 setlinewidth
+clippath pathbbox /ury exch def /urx exch def /lly exch def /llx exch def
+/minsize 250 def
+/pagewidth urx llx sub def
+/pageheight ury lly sub def
+/inwidth pagewidth minsize div def
+/inheight pageheight minsize div def
+
+/boxsize
+ inwidth inheight gt
+ {pagewidth inwidth truncate div}
+ {pageheight inheight truncate div}
+ ifelse
+def
+
+/inwidth pagewidth boxsize div cvi def
+/inheight pageheight boxsize div cvi def
+
+/x {rand 70 mod abs} def
+/y {rand 120 mod abs} def
+
+llx lly translate
+
+inheight {
+ inwidth {
+ gsave
+ newflake
+ grestore
+ boxsize 0 translate
+ } repeat
+ boxsize inwidth mul neg boxsize translate
+} repeat
+
+
+showpage
+clear cleardictstack
+snowflaksave restore
diff --git a/Master/xemtex/doc/ghostscript/examples/tiger.ps b/Master/xemtex/doc/ghostscript/examples/tiger.ps
new file mode 100644
index 00000000000..ea887726051
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/tiger.ps
@@ -0,0 +1,2737 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: Adobe Illustrator(TM) 1.2d4
+%%For: OpenWindows Version 2
+%%Title: tiger.eps
+%%CreationDate: 4/12/90 3:20 AM
+%%DocumentProcSets: Adobe_Illustrator_1.2d1 0 0
+%%DocumentSuppliedProcSets: Adobe_Illustrator_1.2d1 0 0
+%%BoundingBox: 17 171 567 739
+%%EndComments
+/tigersave save def % prevent residual side effects
+
+%%BeginProcSet:Adobe_Illustrator_1.2d1 0 0
+
+/Adobe_Illustrator_1.2d1 dup 100 dict def load begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bdef
+/xdef {exch def} bdef
+% graphic state operators
+/_K { 3 index add neg dup 0 lt {pop 0} if 3 1 roll } bdef
+/_k /setcmybcolor where {
+ /setcmybcolor get
+} {
+ { 1 sub 4 1 roll _K _K _K setrgbcolor pop } bind
+} ifelse def
+/g {/_b xdef /p {_b setgray} def} bdef
+/G {/_B xdef /P {_B setgray} def} bdef
+/k {/_b xdef /_y xdef /_m xdef /_c xdef /p {_c _m _y _b _k} def} bdef
+/K {/_B xdef /_Y xdef /_M xdef /_C xdef /P {_C _M _Y _B _k} def} bdef
+/d /setdash ldef
+/_i currentflat def
+/i {dup 0 eq {pop _i} if setflat} bdef
+/j /setlinejoin ldef
+/J /setlinecap ldef
+/M /setmiterlimit ldef
+/w /setlinewidth ldef
+% path construction operators
+/_R {.25 sub round .25 add} bdef
+/_r {transform _R exch _R exch itransform} bdef
+/c {_r curveto} bdef
+/C /c ldef
+/v {currentpoint 6 2 roll _r curveto} bdef
+/V /v ldef
+/y {_r 2 copy curveto} bdef
+/Y /y ldef
+/l {_r lineto} bdef
+/L /l ldef
+/m {_r moveto} bdef
+% path painting operators
+/n /newpath ldef
+/N /n ldef
+/F {p fill} bdef
+/f {closepath F} bdef
+/S {P stroke} bdef
+/s {closepath S} bdef
+/B {gsave F grestore S} bdef
+/b {closepath B} bdef
+end
+%%EndProcSet
+%%EndProlog
+
+%%Page: 1 1
+
+Adobe_Illustrator_1.2d1 begin
+
+.8 setgray
+clippath fill
+-110 -300 translate
+1.1 dup scale
+
+0 g
+0 G
+0 i
+0 J
+0 j
+0.172 w
+10 M
+[]0 d
+0 0 0 0 k
+
+177.696 715.715 m
+177.797 713.821 176.973 713.84 v
+176.149 713.859 159.695 761.934 139.167 759.691 C
+156.95 767.044 177.696 715.715 V
+b
+181.226 718.738 m
+180.677 716.922 179.908 717.221 v
+179.14 717.519 180.023 768.325 159.957 773.199 C
+179.18 774.063 181.226 718.738 V
+b
+208.716 676.41 m
+210.352 675.45 209.882 674.773 v
+209.411 674.096 160.237 686.898 150.782 668.541 C
+154.461 687.428 208.716 676.41 V
+b
+205.907 666.199 m
+207.763 665.803 207.529 665.012 v
+207.296 664.221 156.593 660.879 153.403 640.478 C
+150.945 659.563 205.907 666.199 V
+b
+201.696 671.724 m
+203.474 671.061 203.128 670.313 v
+202.782 669.565 152.134 673.654 146.002 653.936 C
+146.354 673.175 201.696 671.724 V
+b
+190.991 689.928 m
+192.299 688.554 191.66 688.033 v
+191.021 687.512 147.278 713.366 133.131 698.324 C
+141.872 715.467 190.991 689.928 V
+b
+183.446 685.737 m
+184.902 684.52 184.326 683.929 v
+183.75 683.339 137.362 704.078 125.008 687.531 C
+131.753 705.553 183.446 685.737 V
+b
+180.846 681.665 m
+182.454 680.657 181.964 679.994 v
+181.474 679.331 132.692 693.554 122.709 675.478 C
+126.934 694.251 180.846 681.665 V
+b
+191.58 681.051 m
+192.702 679.52 192.001 679.085 v
+191.3 678.65 151.231 709.898 135.273 696.793 C
+146.138 712.674 191.58 681.051 V
+b
+171.8 710 m
+172.4 708.2 171.6 708 v
+170.8 707.8 142.2 749.8 122.999 742.2 C
+138.2 754 171.8 710 V
+b
+172.495 703.021 m
+173.47 701.392 172.731 701.025 v
+171.993 700.657 135.008 735.501 117.899 723.939 C
+130.196 738.739 172.495 703.021 V
+b
+172.38 698.651 m
+173.502 697.12 172.801 696.685 v
+172.1 696.251 132.031 727.498 116.073 714.393 C
+126.938 730.274 172.38 698.651 V
+b
+0 J 1 w
+170.17 696.935 m
+170.673 690.887 171.661 684.318 173.4 681.199 C
+169.8 668.799 178.6 655.599 V
+178.2 648.399 179.8 645.199 V
+183.8 636.799 188.6 635.999 v
+192.484 635.352 201.207 632.283 211.068 630.879 c
+228.2 616.799 225 603.999 V
+224.6 587.599 221 585.999 V
+232.6 597.199 223 580.399 V
+218.6 561.599 l
+244.2 583.199 228.6 564.799 V
+218.6 538.799 l
+238.2 557.199 231 548.799 V
+227.8 539.999 l
+271 567.199 240.2 537.599 V
+248.2 541.199 252.6 538.399 V
+259.4 539.599 258.6 537.999 V
+237.8 527.599 234.2 509.199 V
+242.6 519.199 239.4 508.399 V
+239.8 496.799 l
+243.8 518.399 243.4 480.799 V
+262.6 498.799 251 477.999 V
+251 461.199 l
+266.2 477.599 259.8 464.799 V
+269.8 473.599 265.8 458.399 V
+265 447.999 269.4 459.199 V
+285.4 489.799 279.4 463.599 V
+278.6 444.399 283.4 459.199 V
+283.8 448.799 293 441.599 V
+291.8 492.399 304.6 456.399 V
+308.6 439.999 l
+311.4 449.199 311 454.399 V
+325.8 470.799 319 446.399 V
+334.2 469.199 331 455.999 V
+323.4 439.999 325 435.199 V
+341.8 469.999 343 471.599 V
+341 429.198 351.8 465.199 V
+357.4 453.199 354.6 448.799 V
+362.6 456.799 361.8 459.999 V
+366.4 468.199 369.2 454.599 V
+371 445.199 372.6 448.399 V
+376.6 424.398 377.8 447.199 V
+379.4 460.799 372.2 472.399 V
+373 475.599 370.2 479.599 v
+383.8 457.999 376.6 486.799 V
+387.801 478.799 389.001 478.799 V
+375.4 501.999 384.2 497.199 V
+379 507.599 397.001 495.599 V
+381 511.599 398.601 501.999 V
+406.601 495.599 399.001 505.599 V
+384.6 521.599 406.601 503.599 V
+418.201 487.199 419.001 484.399 V
+409.001 513.599 404.601 516.399 V
+413.001 552.799 454.201 537.199 V
+461.001 519.999 465.401 538.399 V
+478.201 544.799 489.401 517.199 V
+493.401 530.799 492.601 533.599 V
+499.401 532.399 498.601 533.599 V
+511.801 529.199 513.001 529.999 V
+519.801 523.199 520.201 526.799 V
+529.401 523.999 527.401 527.599 V
+536.201 511.999 536.601 508.399 V
+539.001 522.399 l
+541.001 519.599 l
+542.601 527.199 541.801 528.399 v
+541.001 529.599 561.801 521.599 566.601 500.799 C
+568.601 492.399 l
+574.601 507.199 573.001 511.199 V
+578.201 510.399 578.601 505.999 V
+582.601 529.199 577.801 535.199 V
+582.201 535.999 583.401 532.399 V
+583.401 539.599 l
+590.601 538.799 590.601 541.199 V
+595.001 545.199 597.001 540.399 V
+584.601 575.599 603.001 556.399 V
+610.201 545.599 606.601 564.399 v
+603.001 583.199 599.001 584.799 603.801 585.199 C
+604.601 588.799 602.601 590.399 v
+600.601 591.999 603.801 590.399 y
+608.601 586.399 603.401 608.399 V
+609.801 606.799 597.801 635.999 V
+600.601 638.399 596.601 646.799 V
+604.601 642.399 607.401 643.999 V
+607.001 645.599 603.801 649.599 V
+582.201 704.4 602.601 682.399 V
+614.451 668.849 608.051 691.649 V
+598.94 715.659 599.717 719.955 V
+170.17 696.935 l
+b
+0.2 0.55 0.85 0 k
+599.717 719.755 m
+600.345 719.574 602.551 718.45 603.801 716.8 C
+610.601 706 605.401 724.4 V
+596.201 753.2 605.001 742 V
+611.001 734.8 607.801 748.4 v
+603.936 764.827 601.401 771.2 y
+613.001 766.4 586.201 806 V
+595.001 802.4 l
+575.401 842 553.801 847.2 V
+545.801 853.2 l
+584.201 891.2 571.401 928 V
+564.601 933.2 555.001 924 V
+548.601 919.2 542.601 920.8 V
+511.801 919.6 509.801 919.6 v
+507.801 919.6 473.001 956.8 407.401 939.2 C
+402.201 937.2 397.801 938.4 V
+379.4 954.4 330.6 931.6 v
+320.6 929.6 319 929.6 v
+317.4 929.6 314.6 929.6 306.6 923.2 c
+298.6 916.8 298.2 916 296.2 914.4 C
+279.8 903.2 275 902.4 V
+263.4 896 259 886 V
+255.4 884.8 l
+253.8 877.6 253.4 876.4 V
+248.6 872.8 247.8 867.2 V
+239 861.2 239.4 856.8 V
+237.8 851.6 237 846.8 V
+229.8 842 230.6 839.2 V
+223 825.2 224.2 818.4 V
+217.8 818.8 215 816.4 V
+214.2 811.6 212.6 811.2 V
+209.8 810 212.2 806 V
+210.6 803.2 210.2 801.6 V
+211 798.8 206.6 793.2 V
+200.2 774.4 202.2 769.2 V
+202.6 764.4 199.8 762.8 V
+196.2 763.2 204.6 751.2 V
+205.4 750 202.2 747.6 V
+185 744 182.6 727.6 V
+169 712.8 169 707.6 v
+169 705.295 169.271 702.148 169.97 697.535 C
+169.4 689.199 197 688.399 v
+224.6 687.599 599.717 719.755 Y
+b
+184.4 697.4 m
+159.4 736.8 173.8 680.399 Y
+182.6 645.999 312.2 683.599 y
+481.001 714 492.201 718 v
+503.401 722 598.601 715.6 y
+593.001 732.4 L
+528.201 778.8 509.001 755.6 495.401 759.6 c
+481.801 763.6 484.201 754 481.001 753.2 c
+477.801 752.4 438.601 777.2 432.201 776.4 c
+425.801 775.6 400.459 799.351 415.401 767.6 c
+431.401 733.6 357 728.4 340.2 739.6 c
+323.4 750.8 347.4 721.2 Y
+365.8 701.2 331.4 718 y
+297 730.8 273 705.2 269.8 704.4 c
+266.6 703.6 261.8 700.4 261 706.8 c
+260.2 713.2 252.69 729.901 221 703.6 c
+201 686.999 187.2 709 Y
+184.4 697.4 L
+f
+0.09 0.5 0.772 0 k
+433.51 774.654 m
+427.11 773.854 401.743 797.593 416.71 765.854 c
+433.31 730.654 358.31 726.654 341.51 737.854 c
+324.709 749.054 348.71 719.454 Y
+367.11 699.454 332.709 716.254 y
+298.309 729.054 274.309 703.454 271.109 702.654 c
+267.909 701.854 263.109 698.654 262.309 705.054 c
+261.509 711.454 254.13 727.988 222.309 701.854 c
+201.073 684.508 187.582 705.963 Y
+184.382 695.854 L
+159.382 735.654 174.454 677.345 Y
+183.255 642.944 313.509 681.854 y
+482.31 712.254 493.51 716.254 v
+504.71 720.254 599.038 713.927 y
+593.51 731.236 L
+528.71 777.636 510.31 753.854 496.71 757.854 c
+483.11 761.854 485.51 752.254 482.31 751.454 c
+479.11 750.654 439.91 775.454 433.51 774.654 c
+f
+0.081 0.45 0.695 0 k
+434.819 772.909 m
+428.419 772.109 403.685 796.138 418.019 764.109 c
+434.219 727.908 359.619 724.908 342.819 736.108 c
+326.019 747.308 350.019 717.708 Y
+368.419 697.708 334.019 714.508 y
+299.619 727.308 275.618 701.708 272.418 700.908 c
+269.218 700.108 264.418 696.908 263.618 703.308 c
+262.818 709.708 255.57 726.075 223.618 700.108 c
+201.145 682.017 187.964 702.926 Y
+184.364 694.308 L
+160.564 733.308 175.109 674.29 Y
+183.909 639.89 314.819 680.108 y
+483.619 710.508 494.819 714.508 v
+506.019 718.508 599.474 712.254 y
+594.02 730.072 L
+529.219 776.472 511.619 752.109 498.019 756.109 c
+484.419 760.109 486.819 750.509 483.619 749.708 c
+480.419 748.908 441.219 773.709 434.819 772.909 c
+f
+0.072 0.4 0.618 0 k
+436.128 771.163 m
+429.728 770.363 404.999 794.395 419.328 762.363 c
+436.128 724.807 360.394 723.518 344.128 734.363 c
+327.328 745.563 351.328 715.963 Y
+369.728 695.963 335.328 712.763 y
+300.928 725.563 276.928 699.963 273.728 699.163 c
+270.528 698.363 265.728 695.163 264.928 701.563 c
+264.128 707.963 257.011 724.161 224.927 698.363 c
+201.218 679.526 188.345 699.89 Y
+184.345 692.763 L
+162.545 729.563 175.764 671.235 Y
+184.564 636.835 316.128 678.363 y
+484.928 708.763 496.129 712.763 v
+507.329 716.763 599.911 710.581 y
+594.529 728.908 L
+529.729 775.309 512.929 750.363 499.329 754.363 c
+485.728 758.363 488.128 748.763 484.928 747.963 c
+481.728 747.163 442.528 771.963 436.128 771.163 c
+f
+0.063 0.35 0.54 0 k
+437.438 769.417 m
+431.037 768.617 406.814 792.871 420.637 760.617 c
+437.438 721.417 362.237 721.417 345.437 732.617 c
+328.637 743.817 352.637 714.217 Y
+371.037 694.217 336.637 711.017 y
+302.237 723.817 278.237 698.217 275.037 697.417 c
+271.837 696.617 267.037 693.417 266.237 699.817 c
+265.437 706.217 258.452 722.248 226.237 696.617 c
+201.291 677.035 188.727 696.854 Y
+184.327 691.217 L
+164.527 726.018 176.418 668.181 Y
+185.218 633.78 317.437 676.617 y
+486.238 707.017 497.438 711.017 v
+508.638 715.017 600.347 708.908 y
+595.038 727.745 L
+530.238 774.145 514.238 748.617 500.638 752.617 c
+487.038 756.617 489.438 747.017 486.238 746.217 c
+483.038 745.417 443.838 770.217 437.438 769.417 c
+f
+0.054 0.3 0.463 0 k
+438.747 767.672 m
+432.347 766.872 406.383 790.323 421.947 758.872 c
+441.147 720.072 363.546 719.672 346.746 730.872 c
+329.946 742.072 353.946 712.472 Y
+372.346 692.472 337.946 709.272 y
+303.546 722.072 279.546 696.472 276.346 695.672 c
+273.146 694.872 268.346 691.672 267.546 698.072 c
+266.746 704.472 259.892 720.335 227.546 694.872 c
+201.364 674.544 189.109 693.817 Y
+184.309 689.672 L
+166.309 722.872 177.073 665.126 Y
+185.873 630.726 318.746 674.872 y
+487.547 705.272 498.747 709.272 v
+509.947 713.272 600.783 707.236 y
+595.547 726.581 L
+530.747 772.981 515.547 746.872 501.947 750.872 c
+488.347 754.872 490.747 745.272 487.547 744.472 c
+484.347 743.672 445.147 768.472 438.747 767.672 c
+f
+0.045 0.25 0.386 0 k
+440.056 765.927 m
+433.655 765.127 407.313 788.387 423.255 757.127 c
+443.656 717.126 364.855 717.926 348.055 729.126 c
+331.255 740.326 355.255 710.726 Y
+373.655 690.726 339.255 707.526 y
+304.855 720.326 280.855 694.726 277.655 693.926 c
+274.455 693.126 269.655 689.926 268.855 696.326 c
+268.055 702.726 261.332 718.422 228.855 693.126 c
+201.436 672.053 189.491 690.781 Y
+184.291 688.126 L
+168.291 718.326 177.727 662.071 Y
+186.527 627.671 320.055 673.126 y
+488.856 703.526 500.056 707.526 v
+511.256 711.526 601.22 705.563 y
+596.056 725.417 L
+531.256 771.817 516.856 745.126 503.256 749.126 c
+489.656 753.127 492.056 743.526 488.856 742.726 c
+485.656 741.926 446.456 766.727 440.056 765.927 c
+f
+0.036 0.2 0.309 0 k
+441.365 764.181 m
+434.965 763.381 407.523 786.056 424.565 755.381 c
+446.565 715.781 366.164 716.181 349.364 727.381 c
+332.564 738.581 356.564 708.981 Y
+374.964 688.981 340.564 705.781 y
+306.164 718.581 282.164 692.981 278.964 692.181 c
+275.764 691.381 270.964 688.181 270.164 694.581 c
+269.364 700.981 262.773 716.508 230.164 691.381 c
+201.509 669.562 189.873 687.744 Y
+184.273 686.581 L
+169.872 714.981 178.382 659.017 Y
+187.182 624.616 321.364 671.381 y
+490.165 701.781 501.365 705.781 v
+512.565 709.781 601.656 703.89 y
+596.565 724.254 L
+531.765 770.654 518.165 743.381 504.565 747.381 c
+490.965 751.381 493.365 741.781 490.165 740.981 c
+486.965 740.181 447.765 764.981 441.365 764.181 c
+f
+0.027 0.15 0.231 0 k
+442.674 762.435 m
+436.274 761.635 408.832 784.311 425.874 753.635 c
+447.874 714.035 367.474 714.435 350.674 725.635 c
+333.874 736.835 357.874 707.235 Y
+376.274 687.235 341.874 704.035 y
+307.473 716.835 283.473 691.235 280.273 690.435 c
+277.073 689.635 272.273 686.435 271.473 692.835 c
+270.673 699.235 264.214 714.595 231.473 689.635 c
+201.582 667.071 190.255 684.707 Y
+184.255 685.035 L
+170.654 711.436 179.037 655.962 Y
+187.837 621.562 322.673 669.635 y
+491.474 700.035 502.674 704.035 v
+513.874 708.035 602.093 702.217 y
+597.075 723.09 L
+532.274 769.49 519.474 741.635 505.874 745.635 c
+492.274 749.635 494.674 740.035 491.474 739.235 c
+488.274 738.435 449.074 763.235 442.674 762.435 c
+f
+0.018 0.1 0.154 0 k
+443.983 760.69 m
+437.583 759.89 410.529 782.777 427.183 751.89 c
+449.183 711.09 368.783 712.69 351.983 723.89 c
+335.183 735.09 359.183 705.49 Y
+377.583 685.49 343.183 702.29 y
+308.783 715.09 284.783 689.49 281.583 688.69 c
+278.382 687.89 273.582 684.69 272.782 691.09 c
+271.982 697.49 265.654 712.682 232.782 687.89 c
+201.655 664.58 190.637 681.671 Y
+184.236 683.49 L
+171.236 707.49 179.691 652.907 Y
+188.491 618.507 323.983 667.89 y
+492.783 698.29 503.983 702.29 v
+515.183 706.29 602.529 700.544 y
+597.583 721.926 L
+532.783 768.327 520.783 739.89 507.183 743.89 c
+493.583 747.89 495.983 738.29 492.783 737.49 c
+489.583 736.69 450.383 761.49 443.983 760.69 c
+f
+0.009 0.05 0.077 0 k
+445.292 758.945 m
+438.892 758.145 412.917 781.589 428.492 750.145 c
+449.692 707.344 370.092 710.944 353.292 722.144 c
+336.492 733.344 360.492 703.744 Y
+378.892 683.744 344.492 700.544 y
+310.092 713.344 286.092 687.744 282.892 686.944 c
+279.692 686.144 274.892 682.944 274.092 689.344 c
+273.292 695.744 267.095 710.768 234.092 686.144 c
+201.727 662.089 191.018 678.635 Y
+184.218 681.944 L
+171.418 705.144 180.346 649.853 Y
+189.146 615.453 325.292 666.144 y
+494.093 696.544 505.293 700.544 v
+516.493 704.544 602.965 698.872 y
+598.093 720.763 L
+533.292 767.163 522.093 738.144 508.493 742.144 c
+494.893 746.145 497.293 736.544 494.093 735.744 c
+490.892 734.944 451.692 759.745 445.292 758.945 c
+f
+1 g
+184.2 680.399 m
+171.4 702.4 181 646.799 Y
+189.8 612.399 326.6 664.399 y
+495.401 694.8 506.601 698.8 v
+517.801 702.8 603.401 697.2 y
+598.601 719.6 L
+533.801 766 523.401 736.4 509.801 740.4 c
+496.201 744.4 498.601 734.8 495.401 734 c
+492.201 733.2 453.001 758 446.601 757.2 c
+440.201 756.4 414.981 780.207 429.801 748.4 c
+452.028 700.693 369.041 710.773 354.6 720.4 c
+337.8 731.6 361.8 702 Y
+380.2 681.999 345.8 698.8 y
+311.4 711.6 287.4 685.999 284.2 685.199 c
+281 684.399 276.2 681.199 275.4 687.599 c
+274.6 694 268.535 708.856 235.4 684.399 c
+201.8 659.599 191.4 675.599 Y
+184.2 680.399 L
+f
+0 g
+225.8 650.399 m
+218.6 638.799 239.4 625.599 V
+240.8 624.199 222.8 628.399 V
+216.6 630.399 215 640.799 V
+210.2 645.199 205.4 650.799 v
+200.6 656.399 225.8 650.399 y
+f
+0.8 g
+365.8 698 m
+383.498 671.179 382.9 666.399 v
+381.6 655.999 381.4 646.399 384.6 642.399 c
+387.801 638.399 396.601 605.199 y
+396.201 603.999 408.601 641.999 V
+420.201 657.999 400.201 676.399 V
+365 705.2 365.8 698 v
+f
+0 g
+1 J 0.1 w
+245.8 623.599 m
+257 616.399 242.6 585.199 V
+249 587.599 l
+248.2 576.399 245 573.999 V
+252.2 577.199 l
+257 569.199 253 564.399 V
+269.8 556.399 269 549.999 V
+275.4 557.999 271.4 564.399 v
+267.4 570.799 260.2 566.799 261 585.199 C
+252.2 581.999 l
+257.8 590.799 257.8 597.199 V
+249.8 594.799 l
+265.269 621.377 254.6 622.799 v
+248.6 623.599 245.8 623.599 Y
+f
+0.8 g
+278.2 606.799 m
+281 611.199 278.2 610.399 v
+275.4 609.599 244.2 594.799 238.2 585.199 C
+272.6 609.599 278.2 606.799 V
+f
+288.6 598.799 m
+291.4 603.199 288.6 602.399 v
+285.8 601.599 254.6 586.799 248.6 577.199 C
+283 601.599 288.6 598.799 V
+f
+301.8 613.999 m
+304.6 618.399 301.8 617.599 v
+299 616.799 267.8 601.999 261.8 592.399 C
+296.2 616.799 301.8 613.999 V
+f
+278.6 570.399 m
+278.6 576.399 275.8 575.599 v
+273 574.799 237 557.199 231 547.599 C
+273 573.199 278.6 570.399 V
+f
+279.8 581.199 m
+281 585.999 278.2 585.199 V
+276.2 585.199 249.8 573.599 243.8 563.999 C
+273.4 585.599 279.8 581.199 V
+f
+265.4 533.599 m
+255.4 525.999 l
+265.8 533.599 269.4 532.399 V
+262.6 521.199 261.8 515.999 V
+272.2 528.799 277.8 528.399 V
+285.4 527.999 285.4 517.199 V
+291 527.599 294.2 527.199 V
+295.4 520.799 294.2 513.999 V
+298.2 521.599 302.2 519.999 V
+308.6 521.999 307.8 510.399 V
+307.8 499.999 307 497.199 V
+312.6 523.599 315 523.999 V
+323 525.199 327.8 516.399 V
+323.8 523.999 328.6 521.999 V
+339.4 520.399 342.6 513.599 V
+335.8 525.599 341.4 522.399 V
+348.2 522.399 349.4 515.999 V
+357.8 494.799 359.8 493.199 V
+352.2 514.799 353.8 514.799 V
+351.8 526.799 357 511.999 V
+353.8 525.999 359.4 525.199 v
+365 524.399 369.4 514.399 377.8 516.799 C
+387.401 511.199 389.401 580.399 V
+265.4 533.599 L
+f
+0 g
+0 J 1 w
+270.2 626.399 m
+285 632.399 325 626.399 V
+332.2 625.999 339 634.799 v
+345.8 643.599 372.6 650.799 379 648.799 C
+388.601 642.399 l
+389.401 641.199 l
+401.801 630.799 402.201 623.199 v
+402.601 615.599 387.801 567.599 378.2 551.599 c
+368.6 535.599 359 523.199 339.8 525.599 C
+319 529.599 293.4 525.599 v
+264.2 527.199 261.4 535.199 v
+258.6 543.199 272.6 558.399 y
+277 566.799 275.8 581.199 v
+274.6 595.599 275 623.599 270.2 626.399 c
+f
+0.1 0.6 0.45 0 k
+292.2 624.399 m
+300.6 605.999 271 540.799 y
+269 539.199 283.66 533.154 293.8 535.599 c
+304.746 538.237 345 533.999 Y
+368.6 549.599 381.4 593.999 y
+391.801 617.999 374.2 621.199 v
+356.6 624.399 292.2 624.399 y
+f
+0.1 0.6 0.45 0.2 k
+290.169 593.503 m
+293.495 606.293 295.079 618.094 292.2 624.399 c
+354.6 617.999 365.8 638.799 v
+370.041 646.674 384.801 615.999 384.4 606.399 c
+321.4 591.999 306.6 603.199 V
+290.169 593.503 L
+f
+0.1 0.6 0.45 0.25 k
+294.6 577.199 m
+296.6 569.999 294.2 565.999 V
+292.6 565.199 291.4 564.799 V
+292.6 561.199 298.6 559.599 V
+300.6 555.199 303 554.799 v
+305.4 554.399 310.2 548.799 314.2 549.999 c
+318.2 551.199 329.4 555.199 y
+335 558.399 343.8 554.799 V
+346.175 555.601 346.6 559.599 v
+347.1 564.299 350.2 567.999 352.2 569.999 c
+354.2 571.999 363.8 584.799 362.6 585.199 c
+361.4 585.599 294.6 577.199 Y
+f
+0 0.55 0.5 0 k
+290.2 625.599 m
+287.4 603.199 290.6 594.799 v
+293.8 586.399 293 584.399 292.2 580.399 c
+291.4 576.399 295.8 566.399 301.4 560.399 C
+313.4 558.799 l
+328.6 562.399 337.8 559.599 V
+346.794 558.256 350.2 573.199 V
+355 579.599 362.2 582.399 v
+369.4 585.199 376.6 626.799 372.6 634.799 c
+368.6 642.799 354.2 647.199 338.2 631.599 c
+322.2 615.999 320.2 632.799 290.2 625.599 C
+b
+0 0 0.2 0 k
+0.5 w
+291.8 550.799 m
+291 552.799 286.6 553.199 V
+264.2 556.799 255.8 569.199 V
+249 574.799 253.4 563.199 V
+263.8 542.799 270.6 539.999 V
+287 535.999 291.8 550.799 V
+b
+0 0.55 0.5 0.2 k
+1 w
+371.742 614.771 m
+372.401 622.677 374.354 631.291 372.6 634.799 c
+366.154 647.693 349.181 642.305 338.2 631.599 c
+322.2 615.999 320.2 632.799 290.2 625.599 C
+288.455 611.636 289.295 601.624 v
+326.6 613.199 327.4 607.599 V
+329 610.799 338.2 610.799 v
+347.4 610.799 370.142 611.971 371.742 614.771 C
+f
+0 g
+0 0.55 0.5 0.35 K
+2 w
+328.6 624.799 m
+333.4 619.999 329.8 610.399 V
+315.4 594.399 317.4 580.399 v
+S
+0 0 0.2 0 k
+0 G
+0.5 w
+280.6 539.999 m
+276.2 552.799 285 545.999 V
+289.8 543.999 288.6 542.399 v
+287.4 540.799 281.8 536.799 280.6 539.999 C
+b
+285.64 538.799 m
+282.12 549.039 289.16 543.599 V
+293.581 541.151 292.04 540.719 v
+287.48 539.439 292.04 536.879 285.64 538.799 C
+b
+290.44 538.799 m
+286.92 549.039 293.96 543.599 V
+298.335 541.289 296.84 540.719 v
+293.48 539.439 296.84 536.879 290.44 538.799 C
+b
+297.04 538.599 m
+293.52 548.839 300.56 543.399 V
+304.943 541.067 303.441 540.519 v
+300.48 539.439 303.441 536.679 297.04 538.599 C
+b
+303.52 538.679 m
+300 548.919 307.041 543.479 V
+310.881 541.879 309.921 540.599 v
+308.961 539.319 309.921 536.759 303.52 538.679 C
+b
+310.2 537.999 m
+305.4 550.399 314.6 543.999 V
+319.4 541.999 318.2 540.399 v
+317 538.799 318.2 535.599 310.2 537.999 C
+b
+0 g
+0.1 0.6 0.45 0.25 K
+2 w
+281.8 555.199 m
+295 557.999 301 554.799 V
+307 553.599 308.2 553.999 v
+309.4 554.399 312.6 554.799 y
+S
+315.8 546.399 m
+327.8 559.999 339.8 555.599 v
+346.816 553.026 345.8 556.399 346.6 559.199 c
+347.4 561.999 347.6 566.199 352.6 569.199 c
+S
+0 0 0.2 0 k
+0 G
+0.5 w
+333 562.399 m
+329 573.199 326.2 560.399 v
+323.4 547.599 320.2 543.999 318.6 541.199 C
+318.6 535.999 327 536.399 V
+337.8 536.799 338.2 539.599 v
+338.6 542.399 337 553.999 333 562.399 C
+b
+0 g
+0.1 0.6 0.45 0.25 K
+2 w
+347 555.199 m
+350.6 557.599 353 556.399 v
+S
+353.5 571.599 m
+356.4 576.499 361.2 577.299 v
+S
+0.7 g
+0 G
+1 w
+274.2 534.799 m
+292.2 531.599 296.6 533.199 V
+305.4 533.199 297 531.199 V
+284.2 531.199 276.2 532.399 V
+264.6 537.999 274.2 534.799 V
+f
+0 0 0.2 0 k
+0.5 w
+288.2 627.999 m
+305.8 627.999 307.8 627.199 V
+315 596.399 311.4 588.799 V
+310.2 585.999 307.4 591.599 V
+289 624.399 285.8 626.399 v
+282.6 628.399 287 627.999 288.2 627.999 C
+b
+211.1 630.699 m
+220 628.999 232.6 626.399 V
+237.4 603.999 240.6 599.199 v
+243.8 594.399 240.2 594.399 236.6 597.199 c
+233 599.999 218.2 613.999 216.2 618.399 c
+214.2 622.799 211.1 630.699 y
+b
+232.961 626.182 m
+238.761 624.634 239.77 622.419 v
+240.778 620.205 238.568 616.908 y
+237.568 613.603 236.366 615.765 v
+235.164 617.928 232.292 625.588 232.961 626.182 c
+b
+0 g
+233 626.399 m
+236.6 621.199 240.2 621.199 v
+243.8 621.199 244.182 621.612 247 620.999 c
+251.6 619.999 251.2 621.999 257.8 620.799 c
+260.44 620.319 263 621.199 265.8 619.999 c
+268.6 618.799 271.8 619.599 273 621.599 c
+274.2 623.599 279 627.799 Y
+266.2 625.999 263.4 625.199 V
+241 623.999 233 626.399 V
+f
+0 0 0.2 0 k
+277.6 626.199 m
+271.15 622.699 270.75 620.299 v
+270.35 617.899 276 614.199 y
+278.75 609.599 279.35 611.999 v
+279.95 614.399 278.4 625.799 277.6 626.199 c
+b
+240.115 620.735 m
+247.122 609.547 247.339 620.758 V
+247.896 622.016 246.136 622.038 v
+240.061 622.114 241.582 626.216 240.115 620.735 C
+b
+247.293 620.486 m
+255.214 609.299 254.578 620.579 V
+254.585 620.911 252.832 621.064 v
+248.085 621.478 248.43 625.996 247.293 620.486 C
+b
+254.506 620.478 m
+262.466 609.85 261.797 619.516 V
+261.916 620.749 260.262 621.05 v
+256.37 621.756 256.159 625.005 254.506 620.478 C
+b
+261.382 620.398 m
+269.282 608.837 269.63 618.618 V
+271.274 619.996 269.528 620.218 v
+263.71 620.958 264.508 625.412 261.382 620.398 C
+b
+0 0 0.2 0.1 k
+225.208 616.868 m
+217.55 618.399 l
+214.95 623.399 212.85 629.549 y
+219.2 628.549 231.7 625.749 V
+232.576 622.431 234.048 616.636 v
+225.208 616.868 l
+f
+290.276 621.53 m
+288.61 624.036 287.293 625.794 286.643 626.2 c
+283.63 628.083 287.773 627.706 288.902 627.706 C
+305.473 627.706 307.356 626.953 V
+307.88 624.711 308.564 621.32 V
+298.476 623.33 290.276 621.53 V
+f
+0.2 0.55 0.85 0 k
+1 w
+343.88 759.679 m
+371.601 755.719 397.121 791.359 398.881 801.04 c
+400.641 810.72 390.521 822.6 Y
+391.841 825.68 387.001 839.76 381.721 849 c
+376.441 858.24 360.54 857.266 343 858.24 c
+327.16 859.12 308.68 835.8 307.36 834.04 c
+306.04 832.28 312.2 793.999 313.52 788.279 c
+314.84 782.559 312.2 756.159 y
+346.44 765.259 316.16 763.639 343.88 759.679 c
+f
+0.08 0.44 0.68 0 k
+308.088 833.392 m
+306.792 831.664 312.84 794.079 314.136 788.463 c
+315.432 782.847 312.84 756.927 y
+345.512 765.807 316.728 764.271 343.944 760.383 c
+371.161 756.495 396.217 791.487 397.945 800.992 c
+399.673 810.496 389.737 822.16 Y
+391.033 825.184 386.281 839.008 381.097 848.08 c
+375.913 857.152 360.302 856.195 343.08 857.152 c
+327.528 858.016 309.384 835.12 308.088 833.392 c
+f
+0.06 0.33 0.51 0 k
+308.816 832.744 m
+307.544 831.048 313.48 794.159 314.752 788.647 c
+316.024 783.135 313.48 757.695 y
+344.884 766.855 317.296 764.903 344.008 761.087 c
+370.721 757.271 395.313 791.615 397.009 800.944 c
+398.705 810.272 388.953 821.72 Y
+390.225 824.688 385.561 838.256 380.473 847.16 c
+375.385 856.064 360.063 855.125 343.16 856.064 c
+327.896 856.912 310.088 834.44 308.816 832.744 c
+f
+0.04 0.22 0.34 0 k
+309.544 832.096 m
+308.296 830.432 314.12 794.239 315.368 788.831 c
+316.616 783.423 314.12 758.463 y
+343.556 767.503 317.864 765.535 344.072 761.791 c
+370.281 758.047 394.409 791.743 396.073 800.895 c
+397.737 810.048 388.169 821.28 Y
+389.417 824.192 384.841 837.504 379.849 846.24 c
+374.857 854.976 359.824 854.055 343.24 854.976 c
+328.264 855.808 310.792 833.76 309.544 832.096 c
+f
+0.02 0.11 0.17 0 k
+310.272 831.448 m
+309.048 829.816 314.76 794.319 315.984 789.015 c
+317.208 783.711 314.76 759.231 y
+342.628 768.151 318.432 766.167 344.136 762.495 c
+369.841 758.823 393.505 791.871 395.137 800.848 c
+396.769 809.824 387.385 820.84 Y
+388.609 823.696 384.121 836.752 379.225 845.32 c
+374.329 853.888 359.585 852.985 343.32 853.888 c
+328.632 854.704 311.496 833.08 310.272 831.448 c
+f
+1 g
+344.2 763.2 m
+369.4 759.6 392.601 792 394.201 800.8 c
+395.801 809.6 386.601 820.4 Y
+387.801 823.2 383.4 836 378.6 844.4 c
+373.8 852.8 359.346 851.914 343.4 852.8 c
+329 853.6 312.2 832.4 311 830.8 c
+309.8 829.2 315.4 794.4 316.6 789.2 c
+317.8 784 315.4 760 y
+340.9 768.6 319 766.8 344.2 763.2 c
+f
+0.8 g
+390.601 797.2 m
+362.8 789.6 351.2 791.2 V
+335.4 797.8 326.6 776 V
+323 768.8 321 766.8 v
+319 764.8 390.601 797.2 Y
+f
+0 g
+394.401 799.4 m
+365.4 787.2 355.4 787.6 v
+339 792.2 330.6 777.6 V
+322.2 768.4 319 766.8 V
+318.6 765.2 325 769.2 V
+335.4 764 l
+350.2 754.4 359.8 770.4 V
+363.8 781.6 363.8 783.6 v
+363.8 785.6 385 791.2 386.601 791.6 c
+388.201 792 394.801 796.2 394.401 799.4 C
+f
+0.4 0.2 0.8 0 k
+347 763.486 m
+340.128 763.486 331.755 767.351 331.755 773.6 c
+331.755 779.848 340.128 786.113 347 786.113 c
+353.874 786.113 359.446 781.048 359.446 774.8 c
+359.446 768.551 353.874 763.486 347 763.486 c
+f
+0.4 0.2 0.8 0.2 k
+343.377 780.17 m
+338.531 779.448 333.442 777.945 333.514 778.161 c
+335.054 782.78 341.415 786.113 347 786.113 c
+351.296 786.113 355.084 784.135 357.32 781.125 c
+352.004 781.455 343.377 780.17 v
+f
+1 g
+355.4 780.4 m
+351 783.6 351 781.4 V
+354.6 777 355.4 780.4 V
+f
+0 g
+345.4 772.274 m
+342.901 772.274 340.875 774.3 340.875 776.8 c
+340.875 779.299 342.901 781.325 345.4 781.325 c
+347.9 781.325 349.926 779.299 349.926 776.8 c
+349.926 774.3 347.9 772.274 345.4 772.274 c
+f
+0.2 0.55 0.85 0 k
+241.4 785.6 m
+238.2 806.8 240.6 811.2 V
+251.4 821.2 251 824.8 V
+250.6 842.8 249.4 843.6 v
+248.2 844.4 240.6 850.4 234.6 844 C
+224.2 826 225 819.6 V
+225 817.6 l
+217.4 818 215.8 816 V
+214.6 810.8 213.4 810.4 V
+210.6 808 212.6 805.2 V
+210.6 802.8 211 798.8 V
+218.6 794.8 L
+220.6 780.4 231.4 775.2 v
+236.236 772.871 239.4 779.6 241.4 785.6 c
+f
+1 g
+240.4 787.44 m
+237.52 806.52 239.68 810.48 V
+249.4 819.48 249.04 822.72 V
+248.68 838.92 247.6 839.64 v
+246.52 840.36 239.68 845.76 234.28 840 C
+224.92 823.8 225.64 818.04 V
+225.64 816.24 l
+218.8 816.6 217.36 814.8 V
+216.28 810.12 215.2 809.76 V
+212.68 807.6 214.48 805.08 V
+212.68 802.92 213.04 799.32 V
+219.88 795.72 L
+221.68 782.76 231.4 778.08 v
+235.752 775.985 238.6 782.04 240.4 787.44 c
+f
+0.075 0.412 0.637 0 k
+248.95 842.61 m
+247.86 843.47 240.37 849.24 234.52 843 C
+224.38 825.45 225.16 819.21 V
+225.16 817.26 l
+217.75 817.65 216.19 815.7 V
+215.02 810.63 213.85 810.24 V
+211.12 807.9 213.07 805.17 V
+211.12 802.83 211.51 798.93 V
+218.92 795.03 L
+220.87 780.99 231.4 775.92 v
+236.114 773.65 239.2 780.21 241.15 786.06 c
+238.03 806.73 240.37 811.02 V
+250.9 820.77 250.51 824.28 V
+250.12 841.83 248.95 842.61 V
+f
+0.05 0.275 0.425 0 k
+248.5 841.62 m
+247.52 842.54 240.14 848.08 234.44 842 C
+224.56 824.9 225.32 818.82 V
+225.32 816.92 l
+218.1 817.3 216.58 815.4 V
+215.44 810.46 214.3 810.08 V
+211.64 807.8 213.54 805.14 V
+211.64 802.86 212.02 799.06 V
+219.24 795.26 L
+221.14 781.58 231.4 776.64 v
+235.994 774.428 239 780.82 240.9 786.52 c
+237.86 806.66 240.14 810.84 V
+250.4 820.34 250.02 823.76 V
+249.64 840.86 248.5 841.62 V
+f
+0.025 0.137 0.212 0 k
+248.05 840.63 m
+247.18 841.61 239.91 846.92 234.36 841 C
+224.74 824.35 225.48 818.43 V
+225.48 816.58 l
+218.45 816.95 216.97 815.1 V
+215.86 810.29 214.75 809.92 V
+212.16 807.7 214.01 805.11 V
+212.16 802.89 212.53 799.19 V
+219.56 795.49 L
+221.41 782.17 231.4 777.36 v
+235.873 775.206 238.8 781.43 240.65 786.98 c
+237.69 806.59 239.91 810.66 V
+249.9 819.91 249.53 823.24 V
+249.16 839.89 248.05 840.63 V
+f
+1 g
+240.4 787.54 m
+237.52 806.52 239.68 810.48 V
+249.4 819.48 249.04 822.72 V
+248.68 838.92 247.6 839.64 V
+246.84 840.68 239.68 845.76 234.28 840 C
+224.92 823.8 225.64 818.04 V
+225.64 816.24 l
+218.8 816.6 217.36 814.8 V
+216.28 810.12 215.2 809.76 V
+212.68 807.6 214.48 805.08 V
+212.68 802.92 213.04 799.32 V
+219.88 795.72 L
+221.68 782.76 231.4 778.08 v
+235.752 775.985 238.6 782.14 240.4 787.54 c
+f
+0.8 g
+237.3 793.8 m
+215.7 804 214.8 804.8 V
+223.9 796.6 224.7 796.6 v
+225.5 796.6 237.3 793.8 Y
+f
+0 g
+220.2 800 m
+238.6 796.4 238.6 792 v
+238.6 789.088 238.357 775.669 233 777.2 c
+224.6 779.6 228.2 794 220.2 800 c
+f
+0.4 0.2 0.8 0 k
+228.6 796.2 m
+237.578 794.726 238.6 792 v
+239.2 790.4 239.863 782.092 234.4 781 c
+229.848 780.089 227.618 790.31 228.6 796.2 c
+f
+0 g
+314.595 753.651 m
+314.098 755.393 315.409 755.262 317.2 755.8 c
+319.2 756.4 331.4 760.2 332.2 762.8 c
+333 765.4 346.2 761 Y
+348 760.2 352.4 757.6 Y
+357.2 756.4 363.8 756 Y
+366.2 755 369.6 752.2 Y
+384.2 742 396.601 749.2 Y
+416.601 755.8 410.601 773 Y
+407.601 782 410.801 785.4 Y
+411.001 789.2 418.201 782.8 Y
+420.801 778.6 421.601 773.6 Y
+429.601 762.4 426.201 780.2 Y
+426.401 781.2 423.601 784.8 423.601 786 c
+423.601 787.2 421.801 790.6 Y
+418.801 794 421.201 801 Y
+423.001 814.8 420.801 813 Y
+419.601 814.8 410.401 804.8 Y
+408.201 801.4 402.201 799.8 Y
+399.401 798 396.001 799.4 Y
+393.401 799.8 387.801 792.8 Y
+390.601 793 393.001 788.6 395.401 788.4 c
+397.801 788.2 399.601 790.8 401.201 791.4 c
+402.801 792 405.601 786.2 Y
+406.001 783.6 400.401 778.8 Y
+400.001 774.2 398.401 775.8 Y
+395.401 776.4 394.201 772.6 393.201 768 c
+392.201 763.4 388.001 763 y
+386.401 755.6 385.2 758.6 Y
+385 764.2 379 758.4 Y
+377.8 756.4 373.2 758.6 Y
+366.4 760.6 368.8 762.6 Y
+370.6 764.8 381.8 762.6 Y
+384 764.2 376 768.2 Y
+375.4 770 376.4 774.4 Y
+377.6 777.6 384.4 783.2 Y
+393.801 784.4 391.001 786 Y
+384.801 791.2 379 783.6 Y
+376.8 777.4 359.4 762.4 Y
+354.6 759 357.2 765.8 353.2 762.4 c
+349.2 759 328.6 768 y
+317.038 769.193 314.306 753.451 310.777 756.571 c
+316.195 748.051 314.595 753.651 v
+f
+509.401 920 m
+483.801 912 481.001 893.2 V
+478.601 870.4 499.001 852.8 V
+499.401 846.4 501.401 843.2 v
+499.801 838.4 518.601 846 V
+545.801 854.4 l
+552.201 856.8 557.401 865.6 v
+562.601 874.4 577.801 893.2 574.201 918.4 C
+575.401 929.6 569.401 930 V
+561.001 931.6 553.801 924 V
+547.001 920.8 544.601 921.2 V
+509.401 920 L
+f
+564.022 920.99 m
+566.122 929.92 561.282 925.08 V
+554.242 919.36 546.761 919.36 V
+532.241 917.16 527.841 903.96 V
+523.881 877.12 531.801 871.4 V
+536.641 863.92 543.681 870.52 v
+550.722 877.12 566.222 907.35 564.022 920.99 C
+f
+0.2 g
+563.648 920.632 m
+565.738 929.376 560.986 924.624 V
+554.074 919.008 546.729 919.008 V
+532.473 916.848 528.153 903.888 V
+524.265 877.536 532.041 871.92 V
+536.793 864.576 543.705 871.056 v
+550.618 877.536 565.808 907.24 563.648 920.632 C
+f
+0.4 g
+563.274 920.274 m
+565.354 928.832 560.69 924.168 V
+553.906 918.656 546.697 918.656 V
+532.705 916.536 528.465 903.816 V
+524.649 877.952 532.281 872.44 V
+536.945 865.232 543.729 871.592 v
+550.514 877.952 565.394 907.13 563.274 920.274 C
+f
+0.6 g
+562.9 919.916 m
+564.97 928.288 560.394 923.712 V
+553.738 918.304 546.665 918.304 V
+532.937 916.224 528.777 903.744 V
+525.033 878.368 532.521 872.96 V
+537.097 865.888 543.753 872.128 v
+550.41 878.368 564.98 907.02 562.9 919.916 C
+f
+0.8 g
+562.526 919.558 m
+564.586 927.744 560.098 923.256 V
+553.569 917.952 546.633 917.952 V
+533.169 915.912 529.089 903.672 V
+525.417 878.784 532.761 873.48 V
+537.249 866.544 543.777 872.664 v
+550.305 878.784 564.566 906.91 562.526 919.558 C
+f
+1 g
+562.151 919.2 m
+564.201 927.2 559.801 922.8 V
+553.401 917.6 546.601 917.6 V
+533.401 915.6 529.401 903.6 V
+525.801 879.2 533.001 874 V
+537.401 867.2 543.801 873.2 v
+550.201 879.2 564.151 906.8 562.151 919.2 C
+f
+0.1 0.55 0.85 0.3 k
+350.6 716 m
+330.2 735.2 322.2 736 V
+287.8 740 273 722 V
+290.6 742.4 318.2 736.8 V
+296.6 741.2 284.2 738 V
+267.4 738 257.8 724 V
+255 719.2 l
+259 734 277.4 740 V
+300.2 744.8 311 740 V
+289.4 746.8 279.4 744.8 V
+249 747.2 236.2 720.8 V
+240.2 735.2 255 742.4 V
+268.6 751.2 289 748.4 V
+303.4 745.2 308.6 742.8 v
+313.8 740.4 312.6 743.2 304.2 748 C
+298.6 758 284.6 757.6 V
+241.8 754 231.4 742 V
+245 753.2 255.4 756 V
+277.8 764 286.2 763.2 V
+311 762.2 318.6 766.2 V
+307.4 761.2 310.6 758 v
+313.8 754.8 320.6 747.2 320.6 746 c
+320.6 744.8 344.8 722.7 348.4 718.3 C
+350.6 716 l
+f
+0.8 g
+1 J 0.1 w
+489 522 m
+473.5 558.5 461 568 V
+487 552 490.5 534 V
+490.5 524 489 522 V
+f
+536 514.5 m
+509.5 569.5 491 593.5 V
+534.5 556 539.5 529.5 V
+540 524 l
+537 526.5 l
+536.5 517.5 536 514.5 V
+f
+592.5 563 m
+530 622.5 528.5 625 V
+589 559 592 551.5 V
+590 560.5 592.5 563 V
+f
+404 519.5 m
+423.5 571.5 442.5 549 V
+457.5 539 457 536 V
+453 542.5 435 542 V
+416 545 404 519.5 V
+f
+594.5 647 m
+549.5 675.5 542 677 v
+530.193 679.361 591.5 648 596.5 637.5 C
+598.5 640 594.5 647 V
+f
+0 g
+0 J 1 w
+443.801 540.399 m
+464.201 542.399 471.001 549.199 V
+475.401 545.599 l
+493.001 583.999 l
+496.601 578.799 l
+511.001 593.599 510.201 601.599 v
+509.401 609.599 523.001 595.599 y
+522.201 607.199 529.401 600.399 V
+527.001 615.999 535.401 607.999 V
+524.864 638.156 547.401 612.399 v
+553.001 605.999 548.601 612.799 y
+522.601 660.799 544.201 646.399 v
+546.201 669.199 545.001 673.599 v
+543.801 677.999 541.801 700.4 537.001 705.6 c
+532.201 710.8 537.401 712.4 543.001 707.2 C
+531.801 731.2 545.001 719.2 V
+541.401 734.4 537.001 737.2 V
+531.401 754.4 546.601 743.6 V
+542.201 756 539.001 759.2 V
+527.401 786.8 534.601 782 V
+539.001 778.4 l
+532.201 792.4 538.601 788 v
+545.001 783.6 545.001 784 y
+523.801 817.2 544.201 799.6 V
+536.042 813.518 532.601 820.4 V
+513.801 840.8 528.201 834.4 V
+533.001 832.8 l
+524.201 842.8 516.201 844.4 v
+508.201 846 518.601 852.4 525.001 850.4 c
+531.401 848.4 547.001 840.8 y
+559.801 822 563.801 821.6 V
+543.801 829.2 549.801 821.2 V
+564.201 807.2 557.001 807.6 V
+551.001 800.4 555.801 791.6 V
+537.342 809.991 552.201 784.4 v
+559.001 768 l
+534.601 792.8 545.801 770.8 V
+563.001 747.2 565.001 746.8 v
+567.001 746.4 571.401 737.6 y
+567.001 739.6 l
+572.201 730.8 l
+561.001 742.8 567.001 729.6 V
+572.601 715.2 l
+552.201 737.2 565.801 707.6 V
+549.401 712.8 558.201 695.6 V
+556.601 679.599 557.001 674.399 v
+557.401 669.199 558.601 640.799 554.201 632.799 c
+549.801 624.799 560.201 605.599 562.201 601.599 c
+564.201 597.599 567.801 586.799 559.001 595.999 c
+550.201 605.199 554.601 599.599 556.601 590.799 c
+558.601 581.999 564.601 566.399 563.801 560.799 C
+562.601 559.599 559.401 563.199 V
+544.601 585.999 546.201 571.599 V
+545.001 563.599 541.801 554.799 V
+538.601 543.999 538.601 552.799 V
+535.401 569.599 532.601 561.999 v
+529.801 554.399 526.201 548.399 523.401 545.999 c
+520.601 543.599 515.401 566.399 514.201 555.999 C
+502.201 568.399 497.401 551.999 V
+485.801 535.599 l
+485.401 547.999 484.201 541.999 V
+454.201 535.999 443.801 540.399 V
+f
+409.401 897.2 m
+397.801 905.2 393.801 904.8 v
+389.801 904.4 421.401 913.6 462.601 886 C
+467.401 883.2 471.001 883.6 V
+474.201 881.2 471.401 877.6 V
+462.601 868 473.801 856.8 V
+492.201 850 486.601 858.8 V
+497.401 854.8 499.801 850.8 v
+502.201 846.8 501.001 850.8 y
+494.601 858 488.601 863.2 V
+483.401 865.2 480.601 873.6 v
+477.801 882 475.401 892 479.801 895.2 C
+475.801 890.8 476.601 894.8 v
+477.401 898.8 481.001 902.4 482.601 902.8 c
+484.201 903.2 500.601 919 507.401 919.4 C
+498.201 918 495.201 919 v
+492.201 920 465.601 931.4 459.601 932.6 C
+442.801 939.2 454.801 937.2 V
+490.601 933.4 508.801 920.2 V
+501.601 928.6 483.201 935.6 V
+461.001 948.2 425.801 943.2 V
+408.001 940 400.201 938.2 V
+397.601 938.8 397.001 939.2 v
+396.401 939.6 384.6 948.6 357 941.6 C
+340 937 331.4 932.2 V
+316.2 931 312.6 927.8 V
+294 913.2 292 912.4 v
+290 911.6 278.6 904 277.8 903.6 C
+302.4 910.2 304.8 912.6 v
+307.2 915 324.6 917.6 327 916.2 c
+329.4 914.8 337.8 915.4 328.2 914.8 C
+403.801 900 404.601 898 v
+405.401 896 409.401 897.2 y
+f
+0.2 0.55 0.85 0 k
+480.801 906.4 m
+470.601 913.8 468.601 913.8 v
+466.601 913.8 454.201 924 450.001 923.6 c
+445.801 923.2 433.601 933.2 406.201 925 C
+405.601 927 409.201 927.8 V
+415.601 930 416.001 930.6 V
+436.201 934.8 443.401 931.2 V
+452.601 928.6 458.801 922.4 V
+470.001 919.2 473.201 920.2 V
+482.001 918 482.401 916.2 V
+488.201 913.2 486.401 910.6 V
+486.801 909 480.801 906.4 V
+f
+468.33 908.509 m
+469.137 907.877 470.156 907.779 470.761 906.97 c
+470.995 906.656 470.706 906.33 470.391 906.233 c
+469.348 905.916 468.292 906.486 467.15 905.898 c
+466.748 905.691 466.106 905.873 465.553 906.022 c
+463.921 906.463 462.092 906.488 460.401 905.8 C
+458.416 906.929 456.056 906.345 453.975 907.346 c
+453.917 907.373 453.695 907.027 453.621 907.054 c
+450.575 908.199 446.832 907.916 444.401 910.2 C
+441.973 910.612 439.616 911.074 437.188 911.754 c
+435.37 912.263 433.961 913.252 432.341 914.084 c
+430.964 914.792 429.507 915.314 427.973 915.686 c
+426.11 916.138 424.279 916.026 422.386 916.546 c
+422.293 916.571 422.101 916.227 422.019 916.254 c
+421.695 916.362 421.405 916.945 421.234 916.892 c
+419.553 916.37 418.065 917.342 416.401 917 C
+415.223 918.224 413.495 917.979 411.949 918.421 c
+408.985 919.269 405.831 917.999 402.801 919 C
+406.914 920.842 411.601 919.61 415.663 921.679 c
+417.991 922.865 420.653 921.763 423.223 922.523 c
+423.71 922.667 424.401 922.869 424.801 922.2 C
+424.935 922.335 425.117 922.574 425.175 922.546 c
+427.625 921.389 429.94 920.115 432.422 919.049 c
+432.763 918.903 433.295 919.135 433.547 918.933 c
+435.067 917.717 437.01 917.82 438.401 916.6 C
+440.099 917.102 441.892 916.722 443.621 917.346 c
+443.698 917.373 443.932 917.032 443.965 917.054 c
+445.095 917.802 446.25 917.531 447.142 917.227 c
+447.48 917.112 448.143 916.865 448.448 916.791 c
+449.574 916.515 450.43 916.035 451.609 915.852 c
+451.723 915.834 451.908 916.174 451.98 916.146 c
+453.103 915.708 454.145 915.764 454.801 914.6 C
+454.936 914.735 455.101 914.973 455.183 914.946 c
+456.21 914.608 456.859 913.853 457.96 913.612 c
+458.445 913.506 459.057 912.88 459.633 912.704 c
+462.025 911.973 463.868 910.444 466.062 909.549 c
+466.821 909.239 467.697 909.005 468.33 908.509 c
+f
+391.696 922.739 m
+389.178 924.464 386.81 925.57 384.368 927.356 c
+384.187 927.489 383.827 927.319 383.625 927.441 c
+382.618 928.05 381.73 928.631 380.748 929.327 c
+380.209 929.709 379.388 929.698 378.88 929.956 c
+376.336 931.248 373.707 931.806 371.2 933 C
+371.882 933.638 373.004 933.394 373.6 934.2 C
+373.795 933.92 374.033 933.636 374.386 933.827 c
+376.064 934.731 377.914 934.884 379.59 934.794 c
+381.294 934.702 383.014 934.397 384.789 934.125 c
+385.096 934.078 385.295 933.555 385.618 933.458 c
+387.846 932.795 390.235 933.32 392.354 932.482 c
+393.945 931.853 395.515 931.03 396.754 929.755 c
+397.006 929.495 396.681 929.194 396.401 929 C
+396.789 929.109 397.062 928.903 397.173 928.59 c
+397.257 928.351 397.257 928.049 397.173 927.81 c
+397.061 927.498 396.782 927.397 396.408 927.346 c
+395.001 927.156 396.773 928.536 396.073 928.088 c
+394.8 927.274 395.546 925.868 394.801 924.6 C
+394.521 924.794 394.291 925.012 394.401 925.4 C
+394.635 924.878 394.033 924.588 393.865 924.272 c
+393.48 923.547 392.581 922.132 391.696 922.739 c
+f
+359.198 915.391 m
+356.044 916.185 352.994 916.07 349.978 917.346 c
+349.911 917.374 349.688 917.027 349.624 917.054 c
+348.258 917.648 347.34 918.614 346.264 919.66 c
+345.351 920.548 343.693 920.161 342.419 920.648 c
+342.095 920.772 341.892 921.284 341.591 921.323 c
+340.372 921.48 339.445 922.429 338.4 923 C
+340.736 923.795 343.147 923.764 345.609 924.148 c
+345.722 924.166 345.867 923.845 346 923.845 c
+346.136 923.845 346.266 924.066 346.4 924.2 C
+346.595 923.92 346.897 923.594 347.154 923.848 c
+347.702 924.388 348.258 924.198 348.798 924.158 c
+348.942 924.148 349.067 923.845 349.2 923.845 c
+349.336 923.845 349.467 924.156 349.6 924.156 c
+349.736 924.155 349.867 923.845 350 923.845 c
+350.136 923.845 350.266 924.066 350.4 924.2 C
+351.092 923.418 351.977 923.972 352.799 923.793 c
+353.837 923.566 354.104 922.418 355.178 922.12 c
+359.893 920.816 364.03 918.671 368.393 916.584 c
+368.7 916.437 368.91 916.189 368.8 915.8 C
+369.067 915.8 369.38 915.888 369.57 915.756 c
+370.628 915.024 371.669 914.476 372.366 913.378 c
+372.582 913.039 372.253 912.632 372.02 912.684 c
+367.591 913.679 363.585 914.287 359.198 915.391 c
+f
+345.338 871.179 m
+343.746 872.398 343.162 874.429 342.034 876.221 c
+341.82 876.561 342.094 876.875 342.411 876.964 c
+342.971 877.123 343.514 876.645 343.923 876.443 c
+345.668 875.581 347.203 874.339 349.2 874.2 C
+351.19 871.966 355.45 871.581 355.457 868.2 c
+355.458 867.341 354.03 868.259 353.6 867.4 C
+351.149 868.403 348.76 868.3 346.38 869.767 c
+345.763 870.148 346.093 870.601 345.338 871.179 c
+f
+317.8 923.756 m
+317.935 923.755 324.966 923.522 324.949 923.408 c
+324.904 923.099 317.174 922.05 316.81 922.22 c
+316.646 922.296 309.134 919.866 309 920 C
+309.268 920.135 317.534 923.756 317.8 923.756 c
+f
+0 g
+333.2 914 m
+318.4 912.2 314 911 v
+309.6 909.8 291 902.2 288 900.2 C
+274.6 894.8 257.6 874.8 V
+265.2 878.2 267.4 881 V
+281 893.6 280.8 891 V
+293 899.6 292.4 897.4 V
+316.8 908.6 314.8 905.4 V
+336.4 910 335.4 908 V
+354.2 903.6 351.4 903.4 V
+345.6 902.2 352 898.6 V
+348.6 894.2 343.2 898.2 v
+337.8 902.2 340.8 900 335.8 899 C
+333.2 898.2 328.6 902.2 V
+323 906.8 314.2 903.2 V
+283.6 890.6 281.6 890 V
+278 887.2 275.6 883.6 V
+269.8 879.2 266.8 877.8 V
+254 866.2 252.8 864.8 V
+249.4 859.6 248.6 859.2 V
+255 863 257 865 V
+271 875 276.4 875.8 V
+280.8 878.8 281.6 880.2 V
+296 889.4 300.2 889.4 V
+309.4 884.2 311.8 891.2 V
+317.6 893 323.2 891.8 V
+326.4 894.4 325.6 896.6 V
+327.2 898.4 328.2 894.6 V
+331.6 891 336.4 893 V
+340.4 893.2 338.4 890.8 V
+334 887 322.2 886.8 V
+309.8 886.2 293.4 878.6 V
+263.6 868.2 254.4 857.8 V
+248 849 242.6 847.8 V
+236.8 847 230.8 839.6 V
+240.6 845.4 249.6 845.4 V
+253.6 847.8 249.8 844.2 V
+246.2 836.6 247.8 831.2 V
+247.2 826 246.4 824.4 V
+238.6 811.6 238.6 809.2 v
+238.6 806.8 239.8 797 240.2 796.4 c
+240.6 795.8 239.2 798 243 795.6 c
+246.8 793.2 249.6 791.6 250.4 788.8 c
+251.2 786 248.4 794.2 248.2 796 c
+248 797.8 243.8 805 244.6 807.4 C
+245.6 806.4 246.4 805 V
+245.8 805.6 246.4 809.2 V
+247.2 814.4 248.6 817.6 v
+250 820.8 252 824.6 252.4 825.4 c
+252.8 826.2 252.8 832 254.2 829.4 C
+257.6 826.8 l
+254.8 829.4 257 831.6 V
+256 837.2 257.8 839.8 V
+264.8 848.2 266.4 849.2 v
+268 850.2 266.6 849.8 y
+272.6 854 266.8 852.4 V
+262.8 850.8 259.8 850.8 V
+252.2 848.8 256.2 853 v
+260.2 857.2 270.2 862.6 274 862.4 C
+274.8 860.8 l
+286 863.2 l
+284.8 862.4 l
+284.6 862.6 288.8 863 v
+293 863.4 298.8 862 300.2 863.8 c
+301.6 865.6 305 866.6 304.6 865.2 c
+304.2 863.8 304 861.8 y
+309 867.6 308.4 865.4 v
+307.8 863.2 299.6 858 298.2 851.8 C
+308.6 860 l
+312.2 863 l
+315.8 860.8 316 862.4 v
+316.2 864 320.8 869.8 322 869.6 c
+323.2 869.4 325.2 872.2 325 869.6 c
+324.8 867 332.4 861.6 y
+335.6 863.4 337 862 v
+338.4 860.6 342.6 881.8 y
+367.6 892.4 l
+411.201 895.8 l
+394.201 902.6 l
+333.2 914 l
+f
+0.2 0.55 0.85 0.5 K
+1 J 2 w
+351.4 715 m
+336.4 731.8 328 734.4 V
+314.6 741.2 290 733.4 v
+S
+324.8 735.8 m
+299.6 743.8 284.2 739.6 V
+265.8 737.6 257.4 723.8 v
+S
+321.2 737 m
+304.2 744.2 289.4 746.4 V
+272.8 749 256.2 741.8 V
+244 735.8 238.6 725.6 v
+S
+322.2 736.6 m
+306.8 747.6 305.8 749 V
+298.8 760 285.8 760.4 V
+264.4 759.6 247.2 751.6 v
+S
+0 G
+0 J 1 w
+320.895 745.593 m
+322.437 744.13 349.4 715.2 Y
+384.6 678.599 356.6 712.8 Y
+349 717.6 339.8 736.4 Y
+338.6 739.2 353.8 729.2 Y
+357.8 728.4 371.4 709.2 Y
+364.6 711.6 369.4 704.4 Y
+372.2 702.4 392.601 686.799 Y
+396.201 682.799 400.201 681.199 Y
+414.201 686.399 407.801 673.199 Y
+410.201 666.399 415.801 677.999 Y
+427.001 694.8 410.601 692.399 Y
+380.6 689.599 373.8 705.6 Y
+371.4 708 380.2 705.6 Y
+388.601 703.6 373 718 Y
+375.4 718 384.6 711.2 Y
+395.001 702 397.001 704 Y
+415.001 712.8 425.401 705.2 Y
+427.401 703.6 421.801 696.8 423.401 691.599 c
+425.001 686.399 429.801 673.999 Y
+427.401 672.399 427.801 661.599 Y
+444.601 638.399 435.001 640.399 Y
+419.401 640.799 434.201 633.199 Y
+437.401 631.199 446.201 623.999 Y
+443.401 625.199 441.801 619.999 Y
+446.601 615.999 443.801 611.199 Y
+437.801 609.999 436.601 605.999 Y
+443.401 597.999 433.401 597.599 Y
+437.001 593.199 432.201 581.199 Y
+427.401 581.199 421.001 575.599 Y
+423.401 570.799 413.001 565.199 Y
+404.601 563.599 407.401 556.799 Y
+399.401 550.799 397.001 534.799 Y
+396.201 524.399 393.801 521.199 399.001 523.199 c
+404.201 525.199 403.401 537.599 Y
+398.601 553.199 441.401 569.199 Y
+445.401 570.799 446.201 575.999 Y
+448.201 575.599 457.001 567.999 Y
+464.601 556.799 465.001 565.999 Y
+466.201 569.599 464.601 575.599 Y
+470.601 597.199 456.601 603.599 Y
+446.601 637.199 460.601 628.799 Y
+463.401 623.199 474.201 617.999 y
+477.801 620.399 L
+476.201 625.199 484.601 631.199 Y
+487.401 624.799 493.401 632.799 Y
+497.001 657.199 509.401 642.799 Y
+513.401 641.599 514.601 648.399 Y
+518.201 658.799 514.601 672.399 Y
+518.201 672.799 527.801 666.799 Y
+530.601 670.399 521.401 687.199 525.401 684.799 c
+529.401 682.399 533.801 680.799 Y
+534.601 682.799 524.601 695.199 Y
+520.201 698 515.001 718.4 Y
+522.201 714.8 512.201 730 Y
+512.201 733.2 518.201 744.4 Y
+517.401 751.2 518.201 750.8 Y
+521.001 749.6 529.001 748 522.201 754.4 c
+515.401 760.8 523.001 765.6 Y
+527.401 768.4 513.801 768 Y
+508.601 772.4 509.001 776.4 Y
+517.001 774.4 502.601 788.8 500.201 792.4 c
+497.801 796 507.401 801.2 Y
+520.601 804.8 509.001 808 Y
+489.401 807.6 500.201 818.4 Y
+506.201 818 504.601 820.4 Y
+499.401 821.6 489.801 828 Y
+485.801 831.6 489.401 830.8 Y
+506.201 829.6 477.401 840.8 Y
+485.401 840.8 467.401 851.2 Y
+465.401 852.8 462.201 860.4 Y
+456.201 865.6 451.401 872.4 Y
+451.001 876.8 446.201 881.6 Y
+434.601 895.2 429.001 894.8 Y
+414.201 898.4 409.001 897.6 Y
+356.2 893.2 l
+329.8 880.4 337.6 859.4 Y
+344 851 353.2 854.8 Y
+357.8 861 369.4 858.8 Y
+389.801 855.6 387.201 859.2 Y
+384.801 863.8 368.6 870 368.4 870.6 c
+368.2 871.2 359.4 874.6 Y
+356.4 875.8 352 885 Y
+348.8 888.4 364.6 882.6 Y
+363.4 881.6 370.8 877.6 Y
+388.201 878.6 398.801 867.8 Y
+409.601 851.2 409.801 859.4 Y
+412.601 868.8 400.801 890 Y
+401.201 892 409.401 885.4 Y
+410.801 887.4 411.601 881.6 Y
+411.801 879.2 415.601 871.2 Y
+418.401 858.2 422.001 865.6 Y
+426.601 856.2 L
+428.001 853.6 422.001 846 Y
+421.801 843.2 422.601 843.4 417.001 835.8 c
+411.401 828.2 414.801 823.8 Y
+413.401 817.2 422.201 817.6 Y
+424.801 815.4 428.201 815.4 Y
+430.001 813.4 432.401 814 Y
+434.001 817.8 440.201 815.8 Y
+441.601 818.2 449.801 818.6 Y
+450.801 821.2 451.201 822.8 454.601 823.4 c
+458.001 824 433.401 867 Y
+439.801 867.8 431.601 880.2 Y
+429.401 886.8 440.801 872.2 443.001 870.8 c
+445.201 869.4 446.201 867.2 444.601 867.4 c
+443.001 867.6 441.201 865.4 442.601 865.2 c
+444.001 865 457.001 850 460.401 839.8 c
+463.801 829.6 469.801 825.6 476.001 819.6 c
+482.201 813.6 481.401 789.4 Y
+481.001 780.6 487.001 770 Y
+489.001 766.2 484.801 748 Y
+482.801 745.8 484.201 745 Y
+485.201 743.8 492.001 730.6 Y
+490.201 730.8 493.801 727.2 Y
+499.001 721.2 492.601 724.2 Y
+486.601 725.8 493.601 716 Y
+494.801 714.2 485.801 718.8 Y
+476.601 719.4 488.201 712.2 Y
+496.801 705 485.401 709.4 Y
+480.801 711.2 484.001 704.4 Y
+487.201 702.8 504.401 695.8 Y
+504.801 691.999 501.801 686.999 Y
+502.201 682.999 500.001 679.599 Y
+498.801 671.399 498.201 670.599 Y
+494.001 670.399 486.601 656.599 Y
+484.801 653.999 474.601 641.999 Y
+472.601 634.999 454.601 642.199 Y
+448.001 638.799 450.001 642.199 Y
+449.601 644.399 454.401 650.399 Y
+461.401 652.999 458.801 663.799 Y
+462.801 665.199 451.601 667.999 451.801 669.199 c
+452.001 670.399 457.801 671.799 Y
+465.801 673.799 461.401 676.199 Y
+460.801 680.199 463.801 685.799 Y
+475.401 686.599 463.801 702.8 Y
+453.001 710.4 452.001 716.2 Y
+464.601 724.4 456.401 736.8 456.601 740.4 c
+456.801 744 458.001 765.6 Y
+456.001 771.8 453.001 785.4 Y
+455.201 790.6 462.601 803.2 Y
+465.401 807.4 474.201 812.2 472.001 815.2 c
+469.801 818.2 462.001 816.4 Y
+454.201 817.8 454.801 812.6 Y
+453.201 811.6 452.401 806.6 Y
+451.68 798.667 442.801 792.4 Y
+431.601 786.2 440.801 782.2 Y
+446.801 775.6 437.001 775.4 Y
+426.001 777.2 434.201 767 Y
+445.001 754.2 442.001 751.4 Y
+431.801 750.4 444.401 741.2 y
+443.601 743.2 443.801 741.4 v
+444.001 739.6 447.001 735.4 447.801 733.4 c
+448.601 731.4 444.601 731.2 Y
+445.201 721.6 429.801 725.8 y
+429.801 725.8 428.201 725.6 v
+426.601 725.4 415.401 726.2 409.601 728.4 c
+403.801 730.6 397.001 730.6 y
+393.001 728.8 385.4 729 v
+377.8 729.2 369.8 726.4 Y
+365.4 726.8 374 731.2 374.2 731 c
+374.4 730.8 380 736.4 372 735.8 c
+350.203 734.165 339.4 744.4 Y
+337.4 745.8 334.8 748.6 Y
+324.8 750.6 336.2 736.2 Y
+337.4 734.8 336 733.8 Y
+335.2 735.4 327.4 740.8 Y
+324.589 741.773 323.226 743.107 320.895 745.593 C
+f
+0.2 0.55 0.85 0.5 k
+1 J 2 w
+297 757.2 m
+308.6 751.6 311.2 748.8 v
+313.8 746 327.8 734.6 y
+322.4 736.6 319.8 738.4 v
+317.2 740.2 306.4 748.4 y
+302.6 754.4 297 757.2 v
+f
+0.4 0.2 0.8 0 k
+0 J 1 w
+238.991 788.397 m
+239.328 788.545 238.804 791.257 238.6 791.8 c
+237.578 794.526 228.6 796 y
+228.373 794.635 228.318 793.039 228.424 791.401 c
+233.292 785.882 238.991 788.397 v
+f
+0.4 0.2 0.8 0.2 k
+238.991 788.597 m
+238.542 788.439 238.976 791.331 238.8 791.8 c
+237.778 794.526 228.6 796.1 y
+228.373 794.735 228.318 793.139 228.424 791.501 c
+232.692 786.382 238.991 788.597 v
+f
+0 g
+234.6 788.454 m
+233.975 788.454 233.469 789.594 233.469 791 c
+233.469 792.405 233.975 793.545 234.6 793.545 c
+235.225 793.545 235.732 792.405 235.732 791 c
+235.732 789.594 235.225 788.454 234.6 788.454 c
+f
+234.6 791 m
+F
+189 690.399 m
+183.4 680.399 208.2 686.399 V
+222.2 687.599 224.6 689.999 V
+225.8 689.199 234.166 686.266 237 685.599 c
+243.8 683.999 252.2 694 y
+256.8 704.5 259.6 704.5 v
+262.4 704.5 259.2 702.9 y
+252.6 692.799 253 691.199 V
+247.8 671.199 231.8 670.399 V
+215.65 669.449 217 663.599 V
+225.8 665.999 228.2 663.599 V
+239 663.999 231 657.599 V
+224.2 645.999 l
+224.34 642.081 214.2 645.599 v
+204.4 648.999 194.1 661.899 y
+178.15 676.449 189 690.399 V
+f
+0.1 0.4 0.4 0 k
+187.8 686.399 m
+185.8 676.799 222.6 687.199 V
+227 687.199 229.4 686.399 v
+231.8 685.599 243.8 682.799 245.8 683.999 C
+238.6 670.399 227 671.999 V
+213.8 670.399 214.2 665.599 V
+218.2 658.399 223 655.999 V
+225.8 653.599 225.4 650.399 v
+225 647.199 222.2 645.599 220.2 644.799 c
+218.2 643.999 215 647.199 213.4 647.199 c
+211.8 647.199 203.4 653.599 199 658.399 c
+194.6 663.199 186.2 675.199 186.6 677.999 c
+187 680.799 187.8 686.399 Y
+f
+0.1 0.4 0.4 0.2 k
+191 668.949 m
+193.6 664.999 196.8 660.799 199 658.399 c
+203.4 653.599 211.8 647.199 213.4 647.199 c
+215 647.199 218.2 643.999 220.2 644.799 c
+222.2 645.599 225 647.199 225.4 650.399 c
+225.8 653.599 223 655.999 Y
+219.934 657.532 217.194 661.024 215.615 663.347 C
+215.8 660.799 210.6 661.599 v
+205.4 662.399 200.2 665.199 198.6 668.399 c
+197 671.599 194.6 673.999 196.2 670.399 c
+197.8 666.799 200.2 663.199 201.8 662.799 c
+203.4 662.399 203 661.199 200.6 661.599 c
+198.2 661.999 195.4 662.399 191 667.599 c
+F
+0.1 0.55 0.85 0.3 k
+188.4 689.999 m
+190.2 703.6 191.4 707.6 V
+190.6 714.4 193 718.6 v
+195.4 722.8 197.4 729 200.4 734.4 c
+203.4 739.8 203.6 743.8 207.6 745.4 c
+211.6 747 217.6 755.6 220.4 756.6 c
+223.2 757.6 223 756.8 y
+229.8 771.6 243.4 767.6 V
+227.2 770.4 243 779.8 V
+238.2 778.7 241.5 785.7 v
+243.701 790.368 243.2 783.6 232.2 771.8 C
+227.2 763.2 222 760.2 v
+216.8 757.2 204.8 750.2 203.6 746.4 c
+202.4 742.6 199.2 736.8 197.2 735.2 c
+195.2 733.6 192.4 729.4 192 726 C
+190.8 722 189.4 720.8 v
+188 719.6 187.8 716.4 187.8 714.4 c
+187.8 712.4 185.8 709.6 186 707.2 C
+186.8 688.199 186.4 686.199 V
+188.4 689.999 L
+f
+1 g
+179.8 685.399 m
+177.8 686.799 173.4 680.799 V
+180.7 647.799 180.7 646.399 V
+181.8 648.499 180.5 655.699 v
+179.2 662.899 178.3 675.599 y
+179.8 685.399 l
+f
+0.1 0.55 0.85 0.3 k
+201.4 746 m
+183.8 742.8 184.2 713.6 V
+183.4 688.799 l
+182.2 714.4 181 716 v
+179.8 717.6 183.8 728.8 180.6 722.8 C
+166.6 708.8 174.6 687.599 V
+176.1 684.299 173.1 688.899 V
+168.5 701.5 169.6 707.9 V
+169.8 710.1 171.7 712.9 V
+180.3 724.6 183 726.9 V
+184.8 741.3 200.2 746.5 V
+205.9 748.8 201.4 746 V
+f
+0 g
+340.8 812.2 m
+341.46 812.554 341.451 813.524 342.031 813.697 c
+343.18 814.041 343.344 815.108 343.862 815.892 c
+344.735 817.211 344.928 818.744 345.51 820.235 c
+345.782 820.935 345.809 821.89 345.496 822.55 c
+344.322 825.031 343.62 827.48 342.178 829.906 c
+341.91 830.356 341.648 831.15 341.447 831.748 c
+340.984 833.132 339.727 834.123 338.867 835.443 c
+338.579 835.884 339.104 836.809 338.388 836.893 c
+337.491 836.998 336.042 837.578 335.809 836.552 c
+335.221 833.965 336.232 831.442 337.2 829 C
+336.418 828.308 336.752 827.387 336.904 826.62 c
+337.614 823.014 336.416 819.662 335.655 816.188 c
+335.632 816.084 335.974 815.886 335.946 815.824 c
+334.724 813.138 333.272 810.693 331.453 808.312 c
+330.695 807.32 329.823 806.404 329.326 805.341 c
+328.958 804.554 328.55 803.588 328.8 802.6 C
+325.365 799.82 323.115 795.975 320.504 792.129 c
+320.042 791.449 320.333 790.24 320.884 789.971 c
+321.697 789.573 322.653 790.597 323.123 791.443 c
+323.512 792.141 323.865 792.791 324.356 793.434 c
+324.489 793.609 324.31 794.028 324.445 794.149 c
+327.078 796.496 328.747 799.432 331.2 801.8 C
+333.15 802.129 334.687 803.127 336.435 804.14 c
+336.743 804.319 337.267 804.07 337.557 804.265 c
+339.31 805.442 339.308 807.478 339.414 809.388 c
+339.464 810.272 339.66 811.589 340.8 812.2 c
+f
+331.959 816.666 m
+332.083 816.743 331.928 817.166 332.037 817.382 c
+332.199 817.706 332.602 817.894 332.764 818.218 c
+332.873 818.434 332.71 818.814 332.846 818.956 c
+335.179 821.403 335.436 824.427 334.4 827.4 C
+335.424 828.02 335.485 829.282 335.06 830.129 c
+334.207 831.829 334.014 833.755 333.039 835.298 c
+332.237 836.567 330.659 837.811 329.288 836.508 c
+328.867 836.108 328.546 835.321 328.824 834.609 c
+328.888 834.446 329.173 834.3 329.146 834.218 c
+329.039 833.894 328.493 833.67 328.487 833.398 c
+328.457 831.902 327.503 830.391 328.133 829.062 c
+328.905 827.433 329.724 825.576 330.4 823.8 C
+329.166 821.684 330.199 819.235 328.446 817.358 c
+328.31 817.212 328.319 816.826 328.441 816.624 c
+328.733 816.138 329.139 815.732 329.625 815.44 c
+329.827 815.319 330.175 815.317 330.375 815.441 c
+330.953 815.803 331.351 816.29 331.959 816.666 c
+f
+394.771 826.977 m
+396.16 825.185 396.45 822.39 394.401 821 C
+394.951 817.691 398.302 819.67 400.401 820.2 C
+400.292 820.588 400.519 820.932 400.802 820.937 c
+401.859 820.952 402.539 821.984 403.601 821.8 C
+404.035 823.357 405.673 824.059 406.317 825.439 c
+408.043 829.134 407.452 833.407 404.868 836.653 c
+404.666 836.907 404.883 837.424 404.759 837.786 c
+404.003 839.997 401.935 840.312 400.001 841 C
+398.824 844.875 398.163 848.906 396.401 852.6 C
+394.787 852.85 394.089 854.589 392.752 855.309 c
+391.419 856.028 390.851 854.449 390.892 853.403 c
+390.899 853.198 391.351 852.974 391.181 852.609 c
+391.105 852.445 390.845 852.334 390.845 852.2 c
+390.846 852.065 391.067 851.934 391.201 851.8 C
+390.283 850.98 388.86 850.503 388.565 849.358 c
+387.611 845.648 390.184 842.523 391.852 839.322 c
+392.443 838.187 391.707 836.916 390.947 835.708 c
+390.509 835.013 390.617 833.886 390.893 833.03 c
+391.645 830.699 393.236 828.96 394.771 826.977 c
+f
+357.611 808.591 m
+356.124 806.74 352.712 804.171 355.629 802.243 c
+355.823 802.114 356.193 802.11 356.366 802.244 c
+358.387 803.809 360.39 804.712 362.826 805.294 c
+362.95 805.323 363.224 804.856 363.593 805.017 c
+365.206 805.72 367.216 805.662 368.4 807 C
+372.167 806.776 375.732 807.892 379.123 809.2 c
+380.284 809.648 381.554 810.207 382.755 810.709 c
+384.131 811.285 385.335 812.213 386.447 813.354 c
+386.58 813.49 386.934 813.4 387.201 813.4 C
+387.161 814.263 388.123 814.39 388.37 815.012 c
+388.462 815.244 388.312 815.64 388.445 815.742 c
+390.583 817.372 391.503 819.39 390.334 821.767 c
+390.049 822.345 389.8 822.963 389.234 823.439 c
+388.149 824.35 387.047 823.496 386 823.8 C
+385.841 823.172 385.112 823.344 384.726 823.146 c
+383.867 822.707 382.534 823.292 381.675 822.854 c
+380.313 822.159 379.072 821.99 377.65 821.613 c
+377.338 821.531 376.56 821.627 376.4 821 C
+376.266 821.134 376.118 821.368 376.012 821.346 c
+374.104 820.95 372.844 820.736 371.543 819.044 c
+371.44 818.911 370.998 819.09 370.839 818.955 c
+369.882 818.147 369.477 816.913 368.376 816.241 c
+368.175 816.118 367.823 816.286 367.629 816.157 c
+366.983 815.726 366.616 815.085 365.974 814.638 c
+365.645 814.409 365.245 814.734 365.277 814.99 c
+365.522 816.937 366.175 818.724 365.6 820.6 C
+367.677 823.12 370.194 825.069 372 827.8 C
+372.015 829.966 372.707 832.112 372.594 834.189 c
+372.584 834.382 372.296 835.115 372.17 835.462 c
+371.858 836.316 372.764 837.382 371.92 838.106 c
+370.516 839.309 369.224 838.433 368.4 837 C
+366.562 836.61 364.496 835.917 362.918 837.151 c
+361.911 837.938 361.333 838.844 360.534 839.9 c
+359.549 841.202 359.884 842.638 359.954 844.202 c
+359.96 844.33 359.645 844.466 359.645 844.6 c
+359.646 844.735 359.866 844.866 360 845 C
+359.294 845.626 359.019 846.684 358 847 C
+358.305 848.092 357.629 848.976 356.758 849.278 c
+354.763 849.969 353.086 848.057 351.194 847.984 c
+350.68 847.965 350.213 849.003 349.564 849.328 c
+349.132 849.544 348.428 849.577 348.066 849.311 c
+347.378 848.807 346.789 848.693 346.031 848.488 c
+344.414 848.052 343.136 846.958 341.656 846.103 c
+340.171 845.246 339.216 843.809 338.136 842.489 c
+337.195 841.337 337.059 838.923 338.479 838.423 c
+340.322 837.773 341.626 840.476 343.592 840.15 c
+343.904 840.099 344.11 839.788 344 839.4 C
+344.389 839.291 344.607 839.52 344.8 839.8 C
+345.658 838.781 346.822 838.444 347.76 837.571 c
+348.73 836.667 350.476 837.085 351.491 836.088 c
+353.02 834.586 352.461 831.905 354.4 830.6 C
+353.814 829.287 353.207 828.01 352.872 826.583 c
+352.59 825.377 353.584 824.18 354.795 824.271 c
+356.053 824.365 356.315 825.124 356.8 826.2 C
+357.067 825.933 357.536 825.636 357.495 825.42 c
+357.038 823.033 356.011 821.04 355.553 818.609 c
+355.494 818.292 355.189 818.09 354.8 818.2 C
+354.332 814.051 350.28 811.657 347.735 808.492 c
+347.332 807.99 347.328 806.741 347.737 806.338 c
+349.14 804.951 351.1 806.497 352.8 807 C
+353.013 808.206 353.872 809.148 355.204 809.092 c
+355.46 809.082 355.695 809.624 356.019 809.754 c
+356.367 809.892 356.869 809.668 357.155 809.866 c
+358.884 811.061 360.292 812.167 362.03 813.356 c
+362.222 813.487 362.566 813.328 362.782 813.436 c
+363.107 813.598 363.294 813.985 363.617 814.17 c
+363.965 814.37 364.207 814.08 364.4 813.8 C
+363.754 813.451 363.75 812.494 363.168 812.292 c
+362.393 812.024 361.832 811.511 361.158 811.064 c
+360.866 810.871 360.207 811.119 360.103 810.94 c
+359.505 809.912 358.321 809.474 357.611 808.591 c
+f
+302.2 858 m
+292.962 860.872 281.8 835.2 V
+279.4 830 277 828 v
+274.6 826 263.4 822.4 261.4 818.4 C
+251 802.4 L
+265.8 818.4 269 820.8 V
+277 829.2 273.8 822.4 V
+259.8 811.6 261 802.4 V
+255.4 788 254.6 786 V
+270.6 818 273 819.2 v
+275.4 820.4 276.6 820.4 275.4 816.8 c
+274.2 813.2 273.8 796.8 271 794.8 C
+279 815.2 278.2 818.4 V
+281.4 822 283.8 816.8 V
+282.6 800.8 l
+287 788.8 l
+284.6 800 286.2 815.6 V
+284.2 826 288.2 820.4 v
+292.2 814.8 301.8 808.8 301.8 804 C
+296.6 821.6 287.4 826.4 V
+283.4 820.4 l
+282.2 822.4 l
+278.6 823.2 283 830 v
+287.4 836.8 287 837.6 y
+293.4 830.4 295 830.4 V
+308.2 838 309.4 813.6 V
+316.2 828 307 834.8 V
+292.2 836.8 293.4 842 V
+300.6 854.4 L
+304.2 859.6 302.6 856.8 y
+F
+282.2 841.6 m
+269.4 841.6 266.2 836.4 V
+259 826.8 l
+276.2 836.8 280.2 838 v
+284.2 839.2 282.2 841.6 Y
+f
+242.2 835.2 m
+240.2 834 239.8 831.2 v
+239.4 828.4 237 828 237.8 825.2 c
+238.6 822.4 240.6 820 240.6 824 c
+240.6 828 242.2 830 243 831.2 c
+243.8 832.4 245.4 836.8 242.2 835.2 c
+f
+233.4 774 m
+225 778 221.8 781.6 v
+218.6 785.2 219.052 780.034 214.2 780.4 c
+208.353 780.841 209.4 796.8 y
+205.4 789.2 l
+204.2 774.8 212.2 777.2 v
+216.107 778.372 217.4 776.8 215.8 776 c
+214.2 775.2 221.4 774.8 218.6 773.2 c
+215.8 771.6 230.2 776.8 227.8 766.4 C
+233.4 774 L
+f
+220.8 759.6 m
+205.4 755.2 201.8 764.8 V
+197 762.4 199.2 759.4 v
+201.4 756.4 202.6 756 y
+208 754.8 207.4 754 v
+206.8 753.2 204.4 749.8 y
+214.6 755.8 220.8 759.6 v
+f
+1 g
+449.201 681.399 m
+448.774 679.265 447.103 678.464 445.201 677.799 C
+443.284 678.757 440.686 681.863 438.801 679.799 C
+438.327 680.279 437.548 680.339 437.204 681.001 c
+436.739 681.899 437.011 682.945 436.669 683.743 c
+436.124 685.015 435.415 686.381 435.601 687.799 C
+437.407 688.511 438.002 690.417 437.528 692.18 c
+437.459 692.437 437.03 692.634 437.23 692.983 c
+437.416 693.306 437.734 693.533 438.001 693.8 C
+437.866 693.665 437.721 693.432 437.61 693.452 c
+437 693.558 437.124 694.195 437.254 694.582 c
+437.839 696.328 439.853 696.592 441.201 695.4 C
+441.457 695.965 441.966 695.771 442.401 695.8 C
+442.351 696.379 442.759 696.906 442.957 697.326 c
+443.475 698.424 445.104 697.318 445.901 697.93 c
+446.977 698.755 448.04 699.454 449.118 698.851 c
+450.927 697.838 452.636 696.626 453.835 694.885 c
+454.41 694.051 454.65 692.77 454.592 691.812 c
+454.554 691.165 453.173 691.517 452.83 690.588 c
+452.185 688.84 454.016 688.321 454.772 686.983 c
+454.97 686.634 454.706 686.33 454.391 686.232 c
+453.98 686.104 453.196 686.293 453.334 685.84 c
+454.306 682.647 451.55 681.969 449.201 681.399 C
+f
+439.6 661.799 m
+439.593 663.537 437.992 665.293 439.201 666.999 C
+439.336 666.865 439.467 666.644 439.601 666.644 c
+439.736 666.644 439.867 666.865 440.001 666.999 C
+441.496 664.783 445.148 663.855 445.006 661.009 c
+444.984 660.562 443.897 659.644 444.801 658.999 C
+442.988 657.651 442.933 655.281 442.001 653.399 C
+440.763 653.685 439.551 654.048 438.401 654.599 C
+438.753 656.085 438.636 657.769 439.456 659.089 c
+439.89 659.787 439.603 660.866 439.6 661.799 c
+f
+0.8 g
+273.4 670.799 m
+256.542 660.663 270.6 675.999 v
+279.4 685.599 289.4 691.199 y
+299.8 695.6 303.4 696.8 v
+307 698 322.2 703.2 325.4 703.6 c
+328.6 704 338.2 708 345 704 c
+351.8 700 359.8 695.6 y
+343.4 704 339.8 701.6 v
+336.2 699.2 329 699.6 323 696.4 C
+308.2 691.999 305 689.999 v
+301.8 687.999 291.4 676.399 289.8 677.199 c
+288.2 677.999 290.2 678.399 291.4 681.199 c
+292.6 683.999 290.6 685.599 282.6 679.199 c
+274.6 672.799 273.4 670.799 Y
+f
+0 g
+280.805 676.766 m
+282.215 689.806 290.693 688.141 V
+298.919 692.311 301.641 694.279 V
+309.78 695.981 311.09 696.598 v
+329.569 705.298 344.288 700.779 344.835 701.899 c
+345.381 703.018 365.006 695.901 368.615 691.815 c
+369.006 691.372 358.384 697.412 348.686 699.303 c
+340.413 700.917 318.811 699.056 307.905 693.52 c
+304.932 692.011 295.987 686.227 293.456 686.338 c
+290.925 686.45 280.805 676.766 Y
+f
+0.8 g
+277 651.199 m
+261.8 653.599 278.6 655.199 V
+296.6 657.199 300.6 662.399 V
+314.2 671.599 317 671.999 v
+319.8 672.399 349.8 679.599 350.2 681.999 c
+350.6 684.399 356.2 684.399 357.8 683.599 c
+359.4 682.799 358.6 681.599 355.8 680.799 c
+353 679.999 321.8 663.599 315.4 662.399 c
+309 661.199 297.4 653.599 292.6 652.399 c
+287.8 651.199 277 651.199 Y
+f
+0 g
+296.52 658.597 m
+287.938 659.426 296.539 660.245 V
+305.355 663.669 307.403 666.332 V
+314.367 671.043 315.8 671.247 v
+317.234 671.452 331.194 675.139 331.399 676.367 c
+331.604 677.596 365.67 690.177 370.09 686.987 c
+373.001 684.886 363.1 686.563 353.466 682.153 c
+352.111 681.533 318.258 666.946 314.981 666.332 c
+311.704 665.717 305.765 661.826 303.307 661.212 c
+300.85 660.597 296.52 658.597 Y
+f
+288.6 656.399 m
+293.8 656.799 292.6 655.199 v
+291.4 653.599 289 654.399 y
+288.6 656.399 l
+f
+281.4 654.799 m
+286.6 655.199 285.4 653.599 v
+284.2 651.999 281.8 652.799 y
+281.4 654.799 l
+f
+271 653.199 m
+276.2 653.599 275 651.999 v
+273.8 650.399 271.4 651.199 y
+271 653.199 l
+f
+263.4 652.399 m
+268.6 652.799 267.4 651.199 v
+266.2 649.599 263.8 650.399 y
+263.4 652.399 l
+f
+301.8 691.999 m
+306.2 691.999 305 690.399 v
+303.8 688.799 300.6 689.199 y
+301.8 691.999 l
+f
+291.8 686.399 m
+298.306 688.54 295.8 685.199 v
+294.6 683.599 292.2 684.399 y
+291.8 686.399 l
+f
+280.6 681.599 m
+285.8 681.999 284.6 680.399 v
+283.4 678.799 281 679.599 y
+280.6 681.599 l
+f
+273 675.599 m
+278.2 675.999 277 674.399 v
+275.8 672.799 273.4 673.599 y
+273 675.599 l
+f
+266.2 670.799 m
+271.4 671.199 270.2 669.599 v
+269 667.999 266.6 668.799 y
+266.2 670.799 l
+f
+305.282 664.402 m
+312.203 664.934 310.606 662.805 v
+309.009 660.675 305.814 661.74 y
+305.282 664.402 l
+f
+315.682 669.202 m
+322.603 669.734 321.006 667.605 v
+319.409 665.475 316.214 666.54 y
+315.682 669.202 l
+f
+326.482 673.602 m
+333.403 674.134 331.806 672.005 v
+330.209 669.875 327.014 670.94 y
+326.482 673.602 l
+f
+336.882 678.402 m
+343.803 678.934 342.206 676.805 v
+340.609 674.675 337.414 675.74 y
+336.882 678.402 l
+f
+309.282 696.402 m
+316.203 696.934 314.606 694.805 v
+313.009 692.675 309.014 692.94 y
+309.282 696.402 l
+f
+319.282 699.602 m
+326.203 700.134 324.606 698.005 v
+323.009 695.875 318.614 696.14 y
+319.282 699.602 l
+f
+296.6 659.599 m
+301.8 659.999 300.6 658.399 v
+299.4 656.799 297 657.599 y
+296.6 659.599 l
+f
+0.1 0.55 0.85 0.3 k
+223.4 758.8 m
+219 750 218.6 746.8 V
+219.4 755.6 220.6 757.6 v
+221.8 759.6 223.4 758.8 y
+f
+205 744.8 m
+201.8 730.4 202.2 727.6 V
+201 739.2 201.4 740.4 v
+201.8 741.6 205 744.8 y
+f
+0.8 g
+225.8 819.4 m
+225.6 816.2 l
+223.4 816 l
+237.6 803.4 238.2 795.8 V
+239 804 225.8 819.4 V
+f
+0 g
+229.784 818.135 m
+229.353 818.551 229.572 819.296 229.164 819.556 c
+228.355 820.072 230.462 820.129 230.234 820.845 c
+229.851 822.051 230.038 822.072 229.916 823.348 c
+229.859 823.946 230.447 825.486 230.832 825.926 c
+232.278 827.578 230.954 830.51 232.594 832.061 c
+232.898 832.35 233.274 832.902 233.559 833.32 c
+234.218 834.283 235.402 834.771 236.352 835.599 c
+236.67 835.875 236.469 836.702 237.038 836.61 c
+237.752 836.495 238.993 836.625 238.948 835.784 c
+238.835 833.664 237.506 831.944 236.226 830.276 C
+236.677 829.572 236.219 828.937 235.935 828.38 c
+234.6 825.76 234.789 822.919 234.615 820.079 c
+234.61 819.994 234.303 819.916 234.311 819.863 c
+234.664 817.528 235.248 815.329 236.127 813.1 c
+236.493 812.17 236.964 811.275 237.114 810.348 c
+237.225 809.662 237.328 808.829 236.92 808.124 C
+238.955 805.234 237.646 802.583 238.815 799.052 c
+239.022 798.427 240.714 796.513 240.251 796.674 c
+237.738 797.545 237.626 797.943 237.449 798.696 c
+237.303 799.319 236.973 800.696 236.736 801.298 c
+236.672 801.462 236.501 803.346 236.423 803.468 c
+234.91 805.85 236.268 805.674 234.898 808.032 C
+233.47 808.712 232.504 809.816 231.381 810.978 c
+231.183 811.182 232.326 811.906 232.145 812.119 c
+231.053 813.408 229.9 814.175 230.236 815.668 c
+230.391 816.358 230.528 817.415 229.784 818.135 c
+f
+226.2 816.4 m
+226.6 809.6 229 808 v
+231.4 806.4 230.2 807.2 227 808.4 c
+223.8 809.6 225 810.4 y
+222.2 810 224.6 808 v
+227 806 230.6 803.6 229 803.6 c
+227.4 803.6 219.8 807.6 219.8 810.4 c
+219.8 813.2 218.8 817.3 y
+219.9 818.1 224.7 818 V
+226.1 817.3 226.2 816.4 V
+f
+1 g
+1 J 0.1 w
+225.4 797.8 m
+216.88 800.591 198.4 797.2 V
+207.431 799.278 226.2 797 v
+236.5 795.75 225.4 797.8 Y
+b
+227.498 797.871 m
+219.252 801.389 200.547 799.608 V
+209.725 800.897 228.226 797.005 v
+238.38 794.869 227.498 797.871 Y
+b
+229.286 797.778 m
+221.324 801.899 202.539 801.514 V
+211.787 802.118 229.948 796.86 v
+239.914 793.975 229.286 797.778 Y
+b
+230.556 797.555 m
+223.732 801.862 206.858 802.96 V
+215.197 802.79 231.078 796.681 v
+239.794 793.328 230.556 797.555 Y
+b
+345.84 787.039 m
+344.91 786.395 345.124 787.576 v
+345.339 788.757 373.547 801.927 377.161 801.677 C
+346.913 788.471 345.84 787.039 V
+b
+342.446 786.4 m
+341.57 785.685 341.691 786.879 v
+341.812 788.073 368.899 803.418 372.521 803.452 C
+343.404 787.911 342.446 786.4 V
+b
+339.16 785.025 m
+338.332 784.253 338.374 785.453 v
+338.416 786.652 358.233 802.149 368.045 804.023 C
+350.015 795.896 339.16 785.025 V
+b
+336.284 783.162 m
+335.539 782.468 335.577 783.547 v
+335.615 784.627 353.449 798.574 362.28 800.26 C
+346.054 792.946 336.284 783.162 V
+b
+0.8 g
+0 J 1 w
+304.6 635.199 m
+289.4 637.599 306.2 639.199 V
+324.2 641.199 328.2 646.399 V
+341.8 655.599 344.6 655.999 v
+347.4 656.399 363.8 659.999 364.2 662.399 c
+364.6 664.799 370.6 667.199 372.2 666.399 c
+373.8 665.599 373.8 656.399 371 655.599 c
+368.2 654.799 349.4 647.599 343 646.399 c
+336.6 645.199 325 637.599 320.2 636.399 c
+315.4 635.199 304.6 635.199 Y
+f
+0 g
+377.6 672.599 m
+374.6 670.999 373.4 668.399 V
+367 657.799 352.8 654.599 V
+329.8 645.599 322 643.599 V
+308.6 638.599 301.2 639.399 V
+294.2 639.199 300.4 637.599 V
+320.6 639.599 324 641.399 V
+339.6 646.599 342.6 649.199 v
+345.6 651.799 363.8 656.799 366 658.799 c
+368.2 660.799 378 669.199 377.6 672.599 C
+f
+318.882 641.089 m
+324.111 641.315 322.958 639.766 v
+321.805 638.216 319.357 639.09 y
+318.882 641.089 l
+f
+311.68 639.737 m
+316.908 639.963 315.756 638.414 v
+314.603 636.864 312.155 637.737 y
+311.68 639.737 l
+f
+301.251 638.489 m
+306.48 638.716 305.327 637.166 v
+304.174 635.617 301.726 636.49 y
+301.251 638.489 l
+f
+293.617 637.945 m
+298.846 638.171 297.693 636.622 v
+296.54 635.072 294.092 635.946 y
+293.617 637.945 l
+f
+335.415 648.487 m
+342.375 648.788 340.84 646.726 v
+339.306 644.664 336.047 645.826 y
+335.415 648.487 l
+f
+345.73 652.912 m
+351.689 656.213 351.155 651.151 v
+350.885 648.595 346.362 650.251 y
+345.73 652.912 l
+f
+354.862 655.726 m
+362.021 659.427 360.287 653.965 v
+359.509 651.515 355.493 653.065 y
+354.862 655.726 l
+f
+364.376 660.551 m
+368.735 665.452 369.801 658.79 v
+370.207 656.252 365.008 657.89 y
+364.376 660.551 l
+f
+326.834 644.003 m
+332.062 644.23 330.91 642.68 v
+329.757 641.131 327.308 642.004 y
+326.834 644.003 l
+f
+1 g
+1 J 0.1 w
+362.434 765.397 m
+361.708 764.732 361.707 765.803 v
+361.707 766.873 379.191 780.137 388.034 781.521 C
+371.935 774.792 362.434 765.397 V
+b
+0 g
+0 J 1 w
+365.4 701.6 m
+387.401 679.199 396.601 675.599 V
+405.801 664.399 401.801 638.399 V
+398.601 630.799 395.401 651.599 V
+398.601 676.799 387.401 660.799 V
+379 670.699 385.4 670.399 V
+388.601 668.399 389.001 669.999 v
+389.401 671.599 381.4 685.199 364.2 699.6 c
+347 714 365.4 701.6 Y
+f
+1 g
+1 J 0.1 w
+307 662.799 m
+306.8 664.599 308.6 663.799 v
+310.4 662.999 404.601 656.799 436.201 632.799 C
+391.001 655.999 307 662.799 V
+b
+317.4 667.199 m
+317.2 668.999 319 668.199 v
+320.8 667.399 457.401 668.399 481.001 635.999 C
+459.001 661.199 317.4 667.199 V
+b
+329 671.199 m
+328.8 672.999 330.6 672.199 v
+332.4 671.399 505.801 684.399 529.401 651.999 C
+519.801 677.599 329 671.199 V
+b
+339 675.999 m
+338.8 677.799 340.6 676.999 v
+342.4 676.199 464.601 714.8 488.201 682.399 C
+474.801 707 339 675.999 V
+b
+281 653.199 m
+280.8 654.999 282.6 654.199 v
+284.4 653.399 302.2 651.199 304.2 612.399 C
+297 654.399 281 653.199 V
+b
+272.2 651.599 m
+272 653.399 273.8 652.599 v
+275.6 651.799 289.8 656.399 287 617.599 C
+288.2 652.799 272.2 651.599 V
+b
+264.2 651.199 m
+264 652.999 265.8 652.199 v
+267.6 651.399 283 650.799 270.6 628.399 C
+280.2 652.399 264.2 651.199 V
+b
+311.526 695.535 m
+311.082 693.536 312.631 694.753 v
+328.699 707.378 361.141 766.28 416.826 771.914 C
+378.518 784.024 311.526 695.535 V
+b
+322.726 697.335 m
+321.363 698.528 323.231 699.153 v
+325.099 699.778 437.541 772.28 476.826 764.314 C
+449.719 771.824 322.726 697.335 V
+b
+301.885 691.233 m
+301.376 689.634 303.087 690.61 v
+312.062 695.73 315.677 752.941 359.254 754.196 C
+326.843 768.91 301.885 691.233 V
+b
+281.962 680.207 m
+280.885 678.921 282.838 679.175 v
+293.084 680.507 314.489 721.778 358.928 716.699 C
+326.962 731.045 281.962 680.207 V
+b
+293.2 686.333 m
+292.389 684.864 294.258 685.489 v
+304.057 688.763 317.141 733.375 361.729 736.922 C
+327.603 744.865 293.2 686.333 V
+b
+274.922 675.088 m
+274.049 674.046 275.631 674.252 v
+283.93 675.331 301.268 708.76 337.264 704.646 C
+311.371 716.266 274.922 675.088 V
+b
+267.323 669.179 m
+266.318 668.134 267.909 668.252 v
+272.077 668.561 302.715 701.64 321.183 686.138 C
+309.168 704.861 267.323 669.179 V
+b
+336.855 701.102 m
+335.654 702.457 337.586 702.842 v
+339.518 703.226 460.221 760.939 498.184 748.073 C
+472.243 758.947 336.855 701.102 V
+b
+303.4 636.799 m
+303.2 638.599 305 637.799 v
+306.8 636.999 322.2 636.399 309.8 613.999 C
+319.4 637.999 303.4 636.799 V
+b
+313.8 638.399 m
+313.6 640.199 315.4 639.399 v
+317.2 638.599 335 636.399 337 597.599 C
+329.8 639.599 313.8 638.399 V
+b
+320.6 639.999 m
+320.4 641.799 322.2 640.999 v
+324 640.199 348.6 636.799 372.2 604.399 C
+336.6 641.199 320.6 639.999 V
+b
+328.225 642.028 m
+327.788 643.786 329.678 643.232 v
+331.568 642.678 352.002 644.577 390.099 610.401 C
+343.924 645.344 328.225 642.028 V
+b
+338.625 646.428 m
+338.188 648.186 340.078 647.632 v
+341.968 647.078 376.802 642.577 428.499 607.601 C
+354.324 649.744 338.625 646.428 V
+b
+298.2 657.999 m
+298 659.799 299.8 658.999 v
+301.6 658.199 355 655.599 385.4 628.799 C
+350.499 653.574 298.2 657.999 V
+b
+288.2 653.999 m
+288 655.799 289.8 654.999 v
+291.6 654.199 316.2 650.799 339.8 618.399 C
+304.2 655.199 288.2 653.999 V
+b
+349.503 651.038 m
+348.938 652.759 350.864 652.345 v
+352.79 651.932 387.86 649.996 441.981 618.902 C
+364.317 653.296 349.503 651.038 V
+b
+357.903 653.438 m
+357.338 655.159 359.264 654.745 v
+361.19 654.332 396.26 652.396 450.381 621.302 C
+373.317 656.096 357.903 653.438 V
+b
+367.503 658.438 m
+366.938 660.159 368.864 659.745 v
+370.79 659.332 413.86 654.996 503.582 620.702 C
+382.917 661.096 367.503 658.438 V
+b
+0 g
+0 J 1 w
+256.2 651.599 m
+261.4 651.999 260.2 650.399 v
+259 648.799 256.6 649.599 y
+256.2 651.599 l
+f
+287 637.599 m
+292.2 637.999 291 636.399 v
+289.8 634.799 287.4 635.599 y
+287 637.599 l
+f
+278.2 637.999 m
+283.4 638.399 282.2 636.799 v
+281 635.199 278.6 635.999 y
+278.2 637.999 l
+f
+182.831 649.818 m
+187.876 648.495 186.218 647.376 v
+184.561 646.256 182.554 647.798 y
+182.831 649.818 l
+f
+184.831 659.418 m
+189.876 658.095 188.218 656.976 v
+186.561 655.856 184.554 657.398 y
+184.831 659.418 l
+f
+177.631 663.818 m
+182.676 662.495 181.018 661.376 v
+179.361 660.256 177.354 661.798 y
+177.631 663.818 l
+f
+0.8 g
+1 J 0.1 w
+257.4 588.799 m
+255.8 588.799 251.8 586.799 V
+249.8 586.799 238.6 583.199 233 573.199 C
+245.4 582.799 257.4 588.799 V
+f
+345.116 496.153 m
+345.257 495.895 345.312 495.475 345.604 495.458 c
+346.262 495.418 347.495 495.117 347.37 495.753 c
+346.522 500.059 345.648 504.996 341.515 506.803 c
+340.876 507.082 339.434 506.669 339.36 505.785 c
+339.233 504.261 339.116 502.912 339.425 501.446 c
+339.725 500.025 341.883 500.015 342.8 501.399 C
+343.736 499.727 344.168 497.884 345.116 496.153 c
+f
+334.038 491.419 m
+334.786 490.006 334.659 488.147 336.074 487.584 c
+336.814 487.29 338.664 488.265 338.246 489.339 c
+337.444 491.4 337.056 493.639 335.667 495.45 c
+335.467 495.712 335.707 496.245 335.547 496.573 c
+334.953 497.793 333.808 498.528 332.4 498.199 C
+331.285 495.996 332.433 493.867 333.955 492.158 c
+334.091 492.006 333.925 491.63 334.038 491.419 c
+f
+294.436 496.609 m
+294.328 496.986 294.29 497.449 294.455 497.77 c
+294.986 498.803 295.779 499.925 295.442 500.947 c
+295.094 502.003 293.978 501.821 293.328 501.252 c
+292.193 500.258 292.144 498.432 291.453 497.073 c
+291.257 496.687 291.308 496.114 290.867 495.723 c
+290.393 495.302 289.953 493.778 290.049 493.207 c
+290.102 492.894 289.919 482.986 290.141 483.249 c
+290.76 483.982 293.81 493.716 293.879 494.608 c
+293.936 495.339 294.668 495.804 294.436 496.609 c
+f
+268.798 503.401 m
+271.432 505.9 274.222 508.861 273.78 512.573 c
+273.664 513.549 271.889 513.022 271.702 512.176 c
+270.9 508.551 268.861 505.89 266.293 503.498 c
+264.097 501.451 262.235 495.107 262 494.599 C
+265.697 499.855 267.954 502.601 268.798 503.401 c
+f
+255.224 509.365 m
+255.747 509.735 255.445 510.226 255.662 510.558 c
+256.615 512.016 257.916 513.262 257.934 515 c
+257.937 515.277 257.559 515.586 257.224 515.362 c
+256.947 515.178 256.605 515.048 256.497 514.918 c
+254.467 512.469 253.067 509.798 251.624 506.986 c
+251.441 506.629 250.297 502.138 250.61 502.027 c
+250.849 501.942 252.569 506.123 252.779 506.237 c
+254.042 506.923 254.054 508.538 255.224 509.365 c
+f
+271.957 489.821 m
+272.401 490.69 273.977 491.892 273.864 492.781 c
+273.746 493.709 274.214 495.152 273.302 494.464 c
+272.045 493.516 268.596 492.167 268.326 486.359 c
+268.3 485.788 271.274 488.481 271.957 489.821 c
+f
+286.4 506.999 m
+286.8 507.667 287.508 507.194 287.967 507.457 c
+288.615 507.829 289.226 508.387 289.518 509.036 c
+290.488 511.185 292.257 513.005 292.4 515.399 C
+290.909 516.804 290.23 514.764 289.6 513.799 C
+288.277 515.446 287.278 513.572 285.978 513.053 c
+285.908 513.025 285.695 513.372 285.62 513.345 c
+284.443 512.905 283.763 511.824 282.765 511.043 c
+282.594 510.909 282.189 511.089 282.042 510.953 c
+281.39 510.35 280.417 510.025 280.137 509.343 c
+279.027 506.636 275.887 504.541 274 496.999 C
+274.381 496.09 278.512 503.641 278.999 504.339 c
+279.835 505.535 279.953 502.678 281.229 503.344 c
+281.28 503.371 281.466 503.133 281.6 502.999 C
+281.794 503.279 282.012 503.508 282.4 503.399 C
+282.4 503.799 282.266 504.355 282.467 504.514 c
+283.704 505.491 283.62 506.559 284.4 507.799 C
+284.858 507.01 285.919 507.729 286.4 506.999 C
+f
+346.2 452.599 m
+353.6 472.999 349.2 484.199 V
+360.6 462.599 356 451.399 V
+355.6 461.799 351.6 466.799 V
+347.6 453.999 346.2 452.599 V
+f
+331.4 455.199 m
+336.8 463.999 328.8 482.399 V
+328 461.999 321.2 450.999 V
+335.4 471.199 331.4 455.199 V
+f
+321.4 457.199 m
+321.2 477.199 321.6 480.199 V
+317.8 463.599 307.6 453.999 V
+322 465.999 321.4 457.199 V
+f
+311.8 489.199 m
+317.8 475.599 307.8 457.199 V
+314.2 469.399 309.4 476.399 V
+312 479.799 311.8 489.199 V
+f
+292.6 457.599 m
+291.6 473.199 293.4 475.399 V
+293.6 481.799 293.2 482.799 V
+297.2 488.999 297.4 481.599 V
+298.8 473.799 301.6 469.199 V
+305.2 463.799 305 457.399 V
+295 487.599 292.6 457.599 V
+f
+289 485.199 m
+282.4 474.399 280.6 455.399 V
+279.2 461.599 283 475.999 V
+287.2 491.399 289 485.199 V
+f
+267.2 465.399 m
+272.2 470.799 273.6 475.799 V
+277.2 491.599 270.8 482.999 V
+271 474.999 262.8 467.599 V
+267.6 469.999 267.2 465.399 V
+f
+261.4 470.399 m
+264.8 487.799 265.6 488.599 V
+267.4 491.999 264.6 488.799 V
+255.8 469.599 251.8 462.999 V
+259.8 472.199 261.4 470.399 V
+f
+255.6 486.999 m
+267.2 509.399 245.4 483.599 V
+256.4 493.399 255.6 486.999 V
+f
+240.2 501.599 m
+245 520.399 247.6 520.199 V
+255.8 529.199 249.2 518.599 V
+243.2 508.999 243.8 499.199 V
+243.2 508.799 240.2 501.599 V
+f
+570.5 513 m
+558.5 523 556 526.5 V
+569.5 508 569.5 501 V
+572 508.5 570.5 513 V
+f
+576 535 m
+555 550 551.5 557.5 V
+578 528 578 523.5 V
+578.5 532.5 576 535 V
+f
+593 689 m
+581 697 579.5 695 V
+590 688.5 592.5 680 V
+591 689 593 689 V
+f
+601.5 608.5 m
+584 620.5 l
+603 603.5 603.5 599.5 V
+601.5 608.5 L
+f
+0 g
+1 w
+210.75 631 m
+232.75 626.25 l
+S
+261 469 m
+260.5 472.5 251.5 462 v
+S
+266.5 464 m
+268.5 470.5 262 466 v
+S
+320.5 455.5 m
+322 466.5 310.5 453.5 v
+S
+
+showpage
+
+%%Trailer
+end
+tigersave restore
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/vasarely.ps b/Master/xemtex/doc/ghostscript/examples/vasarely.ps
new file mode 100644
index 00000000000..82b9e616562
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/vasarely.ps
@@ -0,0 +1,588 @@
+%!
+% vasarely
+% Elizabeth D. Zwicky
+% zwicky@sgi.com
+/vasarelysave save def % prevent residual side effects
+%
+% Inspired by Vasarely's experiments with tilting circles and squares
+% (for instance "Tlinko" and "Betelgeuse"
+
+%% circles
+/part { circle } def /nnrand false def
+%% squares
+% /part { ngon } def /nn 4 def /nnrand false def
+%% random polygons
+% /part { ngon } def /nnrand true def
+%% random stars (not my favorite on this program)
+% /part { nstar } def /nnrand true def
+
+%% tilt the base shape a random amount?
+/twist false def
+% /twist true def
+
+
+/rainbow false def
+%% To make rainbows
+% /rainbow true def
+%% Set this to 1 to go through a full range of colors
+/rainrange .25 def
+
+% number of different designs per page
+/inheight 2 def
+/inwidth 2 def
+% number of repeats in a design
+/xtimes 10 def
+/ytimes 16 def
+
+%% This sets the relationship between the two hues: comptwo is maximum contrast
+/colorway {comptwo} def
+%% monochrome comptwo harmtwo harmfour freecolor compthree closeharm
+%% origcolor
+
+%% This sets the brightness and saturation of the colors; vivid makes
+%% them both bright
+/colorfam {vivid} def
+%% vivid jewel intense medium pastel free orig contrast
+%% medjewel medvivid vivpastel medpastel
+
+
+%% Only experts below this point!
+
+usertime srand
+/seed rand def
+
+/starcompensate false def
+/constroke 1 def
+
+
+
+/circle {
+ /radius radius 1.33 mul def
+ currentpoint /herey exch def /herex exch def
+ herex herey radius 0 360 arc
+} def
+
+/ngon{ % polygon of n sides, n determined by nn
+ nside 2 div radius rmoveto
+ nn cvi {
+ nside neg 0 rlineto
+ 360 360 nn div sub neg rotate
+ } repeat
+ closepath
+} def
+
+/nstar{ % star of n points, n determined by nstarslider
+ /radius radius 1.33 mul def
+ currentpoint /herey exch def /herex exch def
+ 0 radius rmoveto
+ 90 nstarangle 2 div add neg rotate
+ nn cvi {nstarside 0 rlineto
+ 180 180 nstarangle 2 mul sub sub neg rotate
+ nstarside 0 rlineto
+ 180 180 360 nn div sub nstarangle 2 mul sub sub rotate
+ } repeat
+ 90 nstarangle 2 div add rotate
+ closepath
+} def
+
+/nstarangle {180 360 nn div sub 3 div} def
+/nstarside {
+ 2
+ radius
+ 1
+ 180 nn div
+ sin
+ div
+ div
+ mul
+ nstarangle sin
+ mul
+ 180
+ nstarangle 2 mul
+ sub
+ sin
+ div
+} def
+
+/nside {
+ 2
+ radius
+ 360 nn div 2 div tan
+ mul
+ mul
+} def
+
+
+/tan { /alpha exch def
+ alpha sin
+ 1 alpha sin dup mul sub sqrt
+ div
+} def
+
+
+/pastel {
+ /backbright high def
+ /backsat medlow def
+ /fillbright high def
+ /fillsat medlow def
+ /eobright high def
+ /eosat medlow def
+ constroke 0 eq {
+ /strokebright high def
+ /strokesat medlow def
+ }
+ {
+ /strokebright low def
+ /strokesat high def
+ } ifelse
+} def
+
+/jewel {
+ /fillbright med def
+ /fillsat high def
+ /backbright med def
+ /backsat high def
+ /eobright med def
+ /eosat high def
+ constroke 0 eq {
+ /strokebright medlow def
+ /strokesat high def
+ }
+ {
+ /strokebright high def
+ /strokesat medlow def
+ } ifelse
+} def
+
+/vivid {
+ /fillsat 1 def
+ /fillbright high def
+ /eosat 1 def
+ /eobright high def
+ /backsat 1 def
+ /backbright high def
+ constroke 0 eq {
+ /strokesat 1 def
+ /strokebright high def
+ }
+ {
+ /strokesat high def
+ /strokebright medlow def
+ } ifelse
+} def
+
+/free {
+ /fillsat anyrand def
+ /fillbright anyrand def
+ /eosat anyrand def
+ /eobright anyrand def
+ /backsat anyrand def
+ /backbright anyrand def
+ /strokesat anyrand def
+ /strokebright anyrand def
+} def
+
+/contrast {
+ /sat medhigh def
+ /bright rand 2 mod 0 eq {medhigh} {medlow} ifelse def
+ /backsat sat def
+ /backbright bright def
+ /eosat sat def
+ /eobright 1 bright sub def
+ /fillsat sat def
+ /fillbright bright def
+ /strokebright rand 2 mod def
+ /strokesat rand 2 mod def
+
+} def
+/medium {
+ /backsat med def
+ /backbright med def
+ /eosat med def
+ /eobright med def
+ /fillsat med def
+ /fillbright med def
+ /strokebright med def
+ /strokesat med def
+
+} def
+/intense {
+ /backsat high def
+ /backbright med def
+ /eosat high def
+ /eobright high def
+ /fillsat high def
+ /fillbright med def
+ /strokebright high def
+ /strokesat high def
+
+} def
+/orig {
+ /backsat rand 99 mod 55 add 100 div def
+ /backbright rand 99 mod 35 add 100 div def
+ /eosat rand 77 mod 22 add 100 div def
+ /eobright 90 rand 75 mod sub 15 add 100 div def
+ /fillsat 100 rand 90 mod sub 100 div def
+ /fillbright 100 rand 45 mod sub 20 add 100 div def
+ /strokebright 100 rand 55 mod sub 100 div def
+ /strokesat 100 rand 85 mod sub 100 div def
+
+} def
+
+/medjewel {
+ /alt rand 2 mod def
+ /backsat alt 0 eq {high} { med} ifelse def
+ /fillsat alt 0 eq {med} {high} ifelse def
+ /eosat alt 0 eq {high} {med} ifelse def
+ /backbright med def
+ /fillbright med def
+ /eobright med def
+ constroke 0 eq {
+ /strokebright medlow def
+ /strokesat high def
+ }
+ {
+ /strokebright high def
+ /strokesat medlow def
+ } ifelse
+} def
+
+/medvivid {
+ /alt rand 2 mod def
+ /backsat alt 0 eq {1} { med} ifelse def
+ /fillsat alt 0 eq {med} {1} ifelse def
+ /eosat alt 0 eq {1} {med} ifelse def
+ /backbright alt 0 eq {high} {med} ifelse def
+ /eobright alt 0 eq {high} {med} ifelse def
+ /fillbright alt 0 eq {med} {high} ifelse def
+ constroke 0 eq {
+ /strokesat 1 def
+ /strokebright high def
+ }
+ {
+ /strokesat high def
+ /strokebright medlow def
+ } ifelse
+} def
+/vivpastel {
+ /backlight rand 2 mod def
+ /backsat backlight 0 eq {medlow} {1} ifelse def
+ /eosat backlight 0 eq {medlow} {1} ifelse def
+ /fillsat backlight 0 eq {1} {medlow} ifelse def
+ /fillbright high def
+ /backbright high def
+ /eobright high def
+ constroke 0 eq {
+ /strokesat 1 def
+ /strokebright high def
+ }
+ {
+ /strokesat high def
+ /strokebright medlow def
+ } ifelse
+} def
+
+/medpastel {
+ /alt rand 2 mod def
+ /backsat alt 0 eq {medlow} {med} ifelse def
+ /eosat alt 0 eq {medlow} {med} ifelse def
+ /fillsat alt 0 eq {med} {medlow} ifelse def
+ /fillbright alt 0 eq { high } {med} ifelse def
+ /backbright alt 0 eq {med} { high } ifelse def
+ /eobright alt 0 eq {med} { high } ifelse def
+ constroke 0 eq {
+ /strokebright high def
+ /strokesat medlow def
+ }
+ {
+ /strokebright low def
+ /strokesat high def
+ } ifelse
+} def
+
+/maxcon {
+ rand 2 mod 1 eq {
+ /backsat 0 def
+ /backbright 0 def
+ /eosat 0 def
+ /eobright 0 def
+ /fillsat 0 def
+ /fillbright 1 def
+ /strokebright 1 def
+ /strokesat 0 def
+ }
+ {
+ /backsat 0 def
+ /backbright 1 def
+ /eosat 0 def
+ /eobright 1 def
+ /fillsat 0 def
+ /fillbright 0 def
+ /strokebright 0 def
+ /strokesat 0 def
+ }
+ ifelse
+} def
+
+/monochrome {
+ /fillhue hue closevary def
+ /strokehue hue closevary def
+ /eohue hue closevary def
+ /backhue hue def
+} def
+
+/blackandwhite {
+ /fillhue 1 def
+ /eohue 0 def
+ /backhue 0 def
+ /strokehue 1 def
+} def
+
+
+/freecolor {
+ /fillhue anyrand def
+ /strokehue anyrand def
+ /eohue anyrand def
+ /backhue anyrand def
+} def
+
+/purple {
+ /fillhue rand 15 mod 80 add 100 div def
+ /backhue rand 15 mod 80 add 100 div def
+ /strokehue rand 15 mod 80 add 100 div def
+ /eohue rand 15 mod 80 add 100 div def
+ /backhue rand 15 mod 80 add 100 div def
+} def
+
+/comptwo {
+ /fillhue hue closevary def
+ /strokehue hue .5 add dup 1 gt {1 sub} if def
+ /backhue strokehue def
+ /eohue strokehue closevary def
+} def
+
+/compthree {
+ /backhue hue def
+ /strokehue hue 1 3 div add dup 1 gt {1 sub} if closevary def
+ /fillhue strokehue closevary def
+ /eohue hue 1 3 div sub dup 1 lt { 1 add} if closevary def
+} def
+
+/origcolor {
+ /backhue hue def
+ /strokehue
+ hue 1000 mul cvi 3 mod dup 1 eq
+ {hue closevary}
+ {2 eq
+ {rand 999 mod 1000 div}
+ {hue .5 add dup 1 gt {1 sub} if }
+ ifelse
+ }
+ ifelse def
+ /fillhue hue 1000 mul cvi 3 mod dup 1 eq
+ {hue closevary}
+ {2 eq
+ {rand 999 mod 1000 div}
+ {hue .5 add dup 1 gt {1 sub} if }
+ ifelse
+ }
+ ifelse
+ def
+ /eohue hue 1000 mul cvi 2 mod 1 eq
+ {hue closevary}
+ {rand 999 mod 1000 div}
+ ifelse def
+} def
+
+/harmtwo {
+ /fillhue hue closevary def
+ /backhue hue def
+ /strokehue hue .2 add dup 1 gt {1 sub} if closevary def
+ /eohue strokehue closevary def
+} def
+
+/harmfour {
+ /fillhue hue closevary def
+ /backhue hue .1 add dup 1 gt {1 sub} if def
+ /strokehue hue .2 add dup 1 gt {1 sub} if closevary def
+ /eohue hue .1 sub dup 1 lt {1 add} if closevary def
+} def
+
+/closeharm {
+ /fillhue hue def
+ /backhue hue .05 add dup 1 gt {1 sub} if closevary def
+ /strokehue hue .1 add dup 1 gt {1 sub} if closevary def
+ /eohue hue .05 sub dup 0 lt {1 add} if closevary def
+} def
+
+
+/high {100 rand 25 mod sub 100 div } def
+/med { rand 33 mod 33 add 100 div } def
+/medhigh {100 rand 50 mod sub 100 div } def
+/medlow {rand 50 mod 100 div } def
+/low { rand 25 mod 100 div} def
+/anyrand { rand 100 mod 100 div } def
+/closevary {rand 70 mod rand 100 mod sub 1000 div add} def
+
+%rainbow
+% {/colorfill {fillhue 1 1 sethsbcolor fill} def}
+ /colorfill {fillhue fillsat fillbright sethsbcolor fill } def
+%ifelse
+/colorstroke {strokehue strokesat strokebright sethsbcolor stroke } def
+/eocolorfill {eohue eosat eobright sethsbcolor eofill } def
+/backfill{ backhue backsat backbright sethsbcolor fill } def
+
+/xstep { xrange xtimes 1 sub div x 1 sub mul } def
+/ystep { yrange ytimes 1 sub div y 1 sub mul} def
+
+/functionarray [
+ {sin abs}
+ {sin }
+ {cos }
+ {cos abs}
+ {sin dup mul }
+ {cos dup mul }
+ {sin abs sqrt }
+ {cos abs sqrt }
+] def
+
+/range { /top exch def /bottom exch def /number exch def
+% number is between -1 and 1
+ /rangesize top bottom sub def
+ number 1 add 2 div
+ % number is now between 0 and 1
+ rangesize mul
+ bottom add
+ } def
+
+/drawone {
+ /radius
+ width height lt {width 3 div} {height 3 div} ifelse
+ def
+ seed srand
+ 0 0 moveto
+ /origmatrix [ 0 0 0 0 0 0 ] currentmatrix def
+ [ % xstep function ystep function2 add .4 1.3 range
+ 1
+ ystep function xstep function add -.25 .25 range
+ ystep function3 xstep function2 add -.5 .5 range
+% xstep function4 ystep function mul .4 1.3 range
+ 1
+ 0
+ 0
+ ]
+ concat
+ twist {twistdeg rotate} if
+ part colorfill
+ origmatrix setmatrix
+ rainbow
+ {/fillhue fillhue rainrange xtimes ytimes mul div add dup 1 gt {1 sub} if def}
+ if
+
+} def
+
+/notdrawone {
+ seed srand
+ twist {/twistdeg rand 360 mod def} if
+ nnrand {/nn rand 6 mod 3 add def} if
+ /x1 rand width 3 div cvi mod width 8 div add def
+ /y1 rand height 3 div cvi mod height 8 div add def
+ rand 3 mod dup 1 eq
+ {pop /x2 rand width 2 div cvi mod def
+ /y2 rand height 2 div cvi mod def}
+ { 2 eq
+ {/x2 y1 def /y2 x1 def}
+ {/x2 y1 width mul height div def /y2 x1 height mul width div def}
+ ifelse
+ }
+ ifelse
+ /radius width height gt {width} {height} ifelse 2.5 div def
+ /stripe rand width 10 div cvi mod 2 add def
+ starcompensate { /stripe stripe 2 mul def /radius radius 10 nn div mul def } if
+ /i 1 def
+ /repeats radius stripe div cvi 1 add def
+ /nnincr 1 def
+ repeats {
+ colorvary {colorfam colorway} if
+ /i i 1 add def
+ /radius radius stripe sub def
+
+ } repeat
+} def
+
+
+/page {
+ clippath pathbbox /ury exch def /urx exch def /lly exch def /llx exch
+def
+/pagewidth urx llx sub def
+/pageheight ury lly sub def
+0 0 moveto
+ llx lly translate
+ /outerwidth
+ pagewidth inwidth div
+ def
+ /outerheight
+ pageheight inheight div
+ def
+ /width
+ outerwidth xtimes div
+ def
+ /height
+ outerheight ytimes div
+ def
+
+
+
+ /size
+ width height gt {width} {height} ifelse
+ def
+ inwidth {
+ inheight {
+
+ /seed rand def
+ /hue rand 999 mod 1000 div def
+ colorway colorfam
+ /x 1 def /y 1 def
+ nnrand {/nn rand 6 mod 3 add def} if
+ /twistdeg rand 360 mod def
+
+ /function functionarray rand functionarray length mod get def
+ /function2 functionarray rand functionarray length mod get def
+ /function3 functionarray rand functionarray length mod get def
+ /function4 functionarray rand functionarray length mod get def
+
+/xrange [ 90 180 270 360 180 360 ] rand 6 mod get def
+/yrange [ 90 180 270 360 180 360 ] rand 6 mod get def
+ initclip
+ newpath
+ 0 0 moveto
+ outerwidth 0 rlineto
+ 0 outerheight rlineto
+ outerwidth neg 0 rlineto
+ backfill
+
+ xtimes {
+ ytimes{
+ /y y 1 add def
+ width 2 div height 2 div translate
+ drawone
+ width 2 div neg height 2 div neg translate
+ 0 height translate
+ } repeat
+
+ /y 1 def
+ /x x 1 add def
+ width height ytimes mul neg translate
+
+ } repeat
+
+ width xtimes mul neg outerheight translate
+ } repeat
+ outerwidth outerheight inheight mul neg translate
+ } repeat
+
+ } def
+
+page showpage
+clear cleardictstack
+vasarelysave restore
diff --git a/Master/xemtex/doc/ghostscript/examples/waterfal.ps b/Master/xemtex/doc/ghostscript/examples/waterfal.ps
new file mode 100644
index 00000000000..0236f8f06a2
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/examples/waterfal.ps
@@ -0,0 +1,80 @@
+%!
+/waterfalsave save def % prevent residual side effects
+% Copyright (C) 1992, 1993, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: waterfal.ps,v 1.3.2.1.2.1 2003/04/12 14:02:38 giles Exp $
+% waterfal.ps
+% This file produces a 'waterfall' printout of fonts at various sizes.
+
+
+% Specify any desired set of up to 3 fonts here.
+/Fonts [/Courier /Helvetica] def
+
+% Specify any desired set of point sizes here.
+% The sum of the sizes should not exceed (roughly) 100.
+% For sizes larger than about 16, some characters may fall off the page.
+/Sizes [6 7 8 9 10 11 12 14 16] def
+
+/eol
+ { currentfont /FontBBox get aload pop
+ exch pop sub exch pop 0 exch
+ % Many Ghostscript fonts have incorrect FontBBoxes....
+ pop -1000
+ 1.15 mul currentfont /FontMatrix get dtransform
+ translate
+ 0 0 moveto
+ } def
+
+(landscap.ps) runlibfile
+clippath pathbbox newpath
+/ury exch def /urx exch def /lly exch def /llx exch def
+llx 18 add ury 18 sub translate
+% Read the current Y resolution without using Ghostscript-specific operators.
+gsave initmatrix 0 72 dtransform abs exch abs exch .max grestore
+round cvi /dpi exch def
+QUIET not
+ { (Creating waterfall printout at ) print dpi =only ( DPI.\n) print flush
+ }
+if
+
+newpath 0 setgray
+/Courier findfont 20 scalefont setfont
+
+Fonts
+ { save exch
+ QUIET not { dup ==only flush } if
+ findfont /basefont exch def
+ basefont 20 scalefont setfont eol
+ basefont /FontName get =string cvs show
+ ( ) show dpi =string cvs show ( DPI) show
+ Sizes
+ { QUIET not { ( ) print dup =only flush } if
+ dup /size exch def basefont exch scalefont setfont eol
+ size =string cvs show ( ) show
+ (qwertyuiop-asdfghjkl_zxcvbnm ) show
+ (QWERTYUIOP+ASDFGHJKL/ZXCVBNM ) show
+ (1470258369 .,:;?!) show
+ } forall
+ QUIET not { () = flush } if
+ matrix currentmatrix aload pop
+ 7 -1 roll restore
+ 6 array astore setmatrix
+ } forall
+
+showpage
+clear cleardictstack
+waterfalsave restore
diff --git a/Master/xemtex/doc/ghostscript/gs-vms.hlp b/Master/xemtex/doc/ghostscript/gs-vms.hlp
new file mode 100644
index 00000000000..9156b6af303
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/gs-vms.hlp
@@ -0,0 +1,293 @@
+1 gs
+ gs - GNU Ghostscript interpreter/previewer
+! $Id: gs-vms.hlp,v 1.12.2.10.2.5 2003/05/17 14:39:00 giles Exp $
+! Ghostscript version 7.07, 17 May 2003
+ Usage:
+ $ gs [options] [file ...]
+
+ Ghostscript is an implementation of Adobe Systems' PostScript (tm)
+ and Portable Document Format (PDF) languages. Gs reads files in sequence
+ and executes them as Ghostscript programs. After doing this, it reads
+ further input from the standard input stream (normally the keyboard).
+ Each line is interpreted separately. To exit from the interpreter,
+ enter the `quit' command. The interpreter also exits gracefully if it
+ encounters end-of-file. Typing the interrupt character (e.g. Control-C)
+ is also safe.
+
+2 Description
+ The interpreter recognizes several switches described below, which
+ may appear anywhere in the command line and apply to all files
+ thereafter.
+
+ You can get a help message by invoking Ghostscript with the -h
+ or -? option. This message also lists the available devices.
+
+ Ghostscript may be built with multiple output devices. Ghostscript
+ normally opens the first one and directs output to it. To use
+ device xyz as the initial output device, include the switch
+ "-sDEVICE=xyz"
+ in the command line. Note that this switch must precede the first
+ .ps file, and only its first invocation has any effect. For example,
+ for printer output in a normal configuration that includes an Epson
+ printer driver, you might use the command
+ gs "-sDEVICE=epson" myfile.ps
+ instead of just
+ gs myfile.ps
+ Alternatively, you can type
+ (epson) selectdevice
+ (myfile.ps) run
+ All output then goes to the printer instead of the display until
+ further notice. You can switch devices at any time by using the
+ selectdevice procedure, e.g.,
+ (vga) selectdevice
+ or
+ (epson) selectdevice
+ As yet a third alternative, you can define a logical name GS_DEVICE
+ as the desired default device name. The order of precedence for these
+ alternatives, highest to lowest, is:
+ selectdevice
+ (command line)
+ GS_DEVICE
+ (first device in build list)
+
+ To select the density on a printer, use
+ gs "-sDEVICE=<device>" -r<xres>x<yres>
+ For example, on a 9-pin Epson-compatible printer, you can get the
+ lowest-density (fastest) mode with
+ gs "-sDEVICE=epson" -r60x72
+ and the highest-density mode with
+ gs "-sDEVICE=epson" -r240x72.
+
+ If you select a printer as the output device, Ghostscript also
+ allows you to control where the device sends its output. Normally,
+ output goes directly to a scratch file on Unix and VMS systems. To
+ send the output to a series of files foo1.xyz, foo2.xyz, ..., use
+ the switch
+ "-sOutputFile=foo%d.xyz"
+ The %d is a printf format specification; you can use other formats
+ like %02d. Each file will receive one page of output. Alternatively,
+ to send the output to a single file foo.xyz, with all the pages con-
+ catenated, use the switch
+ "-sOutputFile=foo.xyz"
+
+ To find out what devices are available, type
+ devicenames ==
+ after starting up Ghostscript. Alternatively, you can use the -h or -?
+ switch in the command line; the help message also lists the available
+ devices.
+
+ To select a different paper size, use the command line switch
+ "-sPAPERSIZE=a_known_paper_size"
+ e.g.,
+ "-sPAPERSIZE=a4"
+ or
+ "-sPAPERSIZE=legal"
+
+ As of this printing, the known paper sizes, defined in gs_statd.ps, are:
+
+ PAPERSIZE X" Y" X cm Y cm
+ ____________________________________________________
+ 11x17 11" 17" 27.94 43.18
+ a0 33.0556" 46.7778" 83.9611 118.816
+ a10 1.02778" 1.45833" 2.61056 3.70417
+ a1 23.3889" 33.0556" 59.4078 83.9611
+ a2 16.5278" 23.3889" 41.9806 59.4078
+ a3 11.6944" 16.5278" 29.7039 41.9806
+ a4 8.26389" 11.6944" 20.9903 29.7039
+ a5 5.84722" 8.26389" 14.8519 20.9903
+ a6 4.125" 5.84722" 10.4775 14.8519
+ a7 2.91667" 4.125" 7.40833 10.4775
+ a8 2.05556" 2.91667" 5.22111 7.40833
+ a9 1.45833" 2.05556" 3.70417 5.22111
+ archA 9" 12" 22.86 30.48
+ archB 12" 18" 30.48 45.72
+ archC 18" 24" 45.72 60.96
+ archD 24" 36" 60.96 91.44
+ archE 36" 48" 91.44 121.92
+ b0 39.3889" 55.6667" 100.048 141.393
+ b1 27.8333" 39.3889" 70.6967 100.048
+ b2 19.6944" 27.8333" 50.0239 70.6967
+ b3 13.9167" 19.6944" 35.3483 50.0239
+ b4 9.84722" 13.9167" 25.0119 35.3483
+ b5 6.95833" 9.84722" 17.6742 25.0119
+ flsa 8.5" 13" 21.59 33.02
+ flse 8.5" 13" 21.59 33.02
+ halfletter 5.5" 8.5" 13.97 21.59
+ ledger 17" 11" 43.18 27.94
+ legal 8.5" 14" 21.59 35.56
+ letter 8.5" 11" 21.59 27.94
+ note 7.5" 10" 19.05 25.4
+
+ Note that the B paper sizes are ISO sizes: for information about using
+ JIS B sizes, see `Use.htm'.
+
+2 Initialization_files
+ When looking for the initialization files (gs_*.ps), the files related
+ to fonts, or the file for the `run' operator, Ghostscript first tries
+ opening the file with the name as given (i.e., using the current
+ working directory if none is specified). If this fails, and the file
+ name doesn't specify an explicit directory or drive, Ghostscript will
+ try directories in the following order:
+
+ 1. The directory/ies specified by the -I switch(es) in the command
+ line (see below), if any;
+ 2. The directory/ies specified by the GS_LIB logical, if any;
+ 3. The directory/ies specified by the GS_LIB_DEFAULT macro in the
+ Ghostscript makefile.
+
+ Each of these (GS_LIB_DEFAULT, GS_LIB, and -I parameter) may be either
+ a single directory, or a list of directories separated by a `:'.
+
+2 X_resources
+ Ghostscript looks for the following resources under the program name
+ `Ghostscript':
+
+ borderWidth
+ The border width in pixels (default = 1).
+
+ borderColor
+ The name of the border color (default = black).
+
+ geometry
+ The window size and placement, WxH+X+Y (default is NULL).
+
+ xResolution
+ The number of x pixels per inch (default is computed from
+ WidthOfScreen and WidthMMOfScreen).
+
+ yResolution
+ The number of y pixels per inch (default is computed from
+ HeightOfScreen and HeightMMOfScreen).
+
+ useBackingPixmap
+ Determines whether backing store is to be used for saving display
+ window (default = true).
+
+ See the file `Use.htm' for a more complete list of resources.
+
+ To set these resources, put them in a file (such as
+ SYS$Login:ghostscript.dat) in the following form:
+
+ Ghostscript*geometry: 612x792-0+0
+ Ghostscript*xResolution: 72
+ Ghostscript*yResolution: 72
+
+2 Options
+ Note that VMS will convert all command line arguments to lower case
+ if they are not within quotes. Therefore, if a certain command does
+ not work, try again but with quotes around it.
+
+ -- filename arg1 ...
+ Takes the next argument as a file name as usual, but takes all
+ remaining arguments (even if they have the syntactic form of switches)
+ and defines the name ARGUMENTS in userdict (not systemdict) as an
+ array of those strings, before running the file. When Ghostscript
+ finishes executing the file, it exits.
+
+ -Dname=token
+ -dname=token
+ Define a name in systemdict with the given definition. The token must
+ be exactly one token (as defined by the `token' operator) and must not
+ contain any whitespace.
+
+ -Dname
+ -dname
+ Define a name in systemdict with value=null.
+
+ -Sname=string
+ -sname=string
+ Define a name in systemdict with a given string as value. This is
+ different from -d. For example, -dname=35 is equivalent to the
+ program fragment
+ /name 35 def
+ whereas -sname=35 is equivalent to
+ /name (35) def
+
+ -q
+ Quiet startup - suppress normal startup messages, and also do the
+ equivalent of -dQUIET.
+
+ -gnumber1Xnumber2
+ Equivalent to -dDEVICEWIDTH=number1 and -dDEVICEHEIGHT=number2. This is
+ for the benefit of devices (such as X11 windows) that require (or allow)
+ width and height to be specified.
+
+ -rnumber
+ -rnumber1Xnumber2
+ Equivalent to -dDEVICEXRESOLUTION=number1 and -dDEVICEYRESOLUTION=number2
+ This is for the benefit of devices (such as printers) that support
+ multiple X and Y resolutions. (If only one number is given, it is used
+ for both X and Y resolutions.)
+
+ -Idirectories
+ Adds the designated list of directories at the head of the search path
+ for library files.
+
+ Note that gs_init.ps makes systemdict read-only, so the values of names
+ defined with -D/d/S/s cannot be changed (although, of course, they can
+ be superseded by definitions in userdict or other dictionaries.)
+
+2 Special_names
+
+ -dDISKFONTS
+ Causes individual character outlines to be loaded from the disk the
+ first time they are encountered. (Normally Ghostscript loads all the
+ character outlines when it loads a font.) This may allow loading more
+ fonts into RAM, at the expense of slower rendering.
+
+ -dNOCACHE
+ Disables character caching. Only useful for debugging.
+
+ -dNOBIND
+ Disables the `bind' operator. Only useful for debugging.
+
+ -dNODISPLAY
+ Suppresses the normal initialization of the output device. This may be
+ useful when debugging.
+
+ -dNOPAUSE
+ Disables the prompt and pause at the end of each page. This may be
+ desirable for applications where another program is `driving'
+ Ghostscript.
+
+ -dNOPLATFONTS
+ Disables the use of fonts supplied by the underlying platform (e.g.
+ X Windows). This may be needed if the platform fonts look undesirably
+ different from the scalable fonts.
+
+ -dSAFER
+ Disables the deletefile and renamefile operators, and the ability to
+ open files in any mode other than read-only. This may be desirable
+ for spoolers or other sensitive environments.
+
+ -dWRITESYSTEMDICT
+ Leaves systemdict writable. This is necessary when running special
+ utility programs such as font2c and pcharstr, which must bypass normal
+ PostScript access protection.
+
+ -sDEVICE=device
+ Selects an alternate initial output device, as described above.
+
+ -sOutputFile=filename
+ Selects an alternate output file for the initial output device, as
+ described above.
+
+2 Files
+!!! Change
+ GS_Root:[Ghostscript.gs4_0]
+ Startup-files, utilities, and basic font definitions.
+
+ GS_Root:[Ghostscript.Fonts4_0]
+ Additional font definitions.
+
+ GS_Root:[Ghostscript.gs4_0.Examples]
+ Demo Ghostscript files.
+
+ GS_Root:[Ghostscript.gs4_0.Doc]
+ Assorted document files.
+!!! Change
+2 See_also
+ The various Ghostscript document files (above).
+
+2 Bugs
+ See the network news group comp.lang.postscript.
diff --git a/Master/xemtex/doc/ghostscript/gs.css b/Master/xemtex/doc/ghostscript/gs.css
new file mode 100644
index 00000000000..d59976ed00e
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/gs.css
@@ -0,0 +1,73 @@
+/* This is the default Ghostscript stylesheet */
+
+body
+{
+ color: black;
+ background-color: white;
+}
+
+h1,h2,h3,h4,h5,h6
+{
+ font-family: sans-serif;
+}
+
+/* This needs a patched html file else you have it all over the place */
+/* we only want this for the "visual header" at the page top */
+h1
+{
+ text-align: center;
+ background-color: #CCCC00;
+}
+
+/* Number the h2/h3 -- doesn't work on v4/5 browsers */
+h2
+{
+ counter-increment: h2-count;
+ counter-reset: h3-count;
+}
+
+h2:before
+{
+ content: counter(h2-count) " ";
+}
+
+h3
+{
+ counter-increment: h3-count;
+}
+
+h3:before
+{
+ content: counter(h2-count) "." counter(h3-count) " ";
+
+}
+
+tt
+{
+ color: rgb(40%,24%,24%);
+}
+
+a > tt, a > b > tt
+{
+ color: blue;
+}
+
+a
+{
+ color: blue;
+}
+
+a.offsite
+{
+ font-style: oblique;
+}
+
+a:visited
+{
+ color: rgb(60%,0%,30%);
+}
+
+a:hover, a:active, a:focus
+{
+ background: #FFFFAA;
+}
diff --git a/Master/xemtex/doc/ghostscript/gsdoc.el b/Master/xemtex/doc/ghostscript/gsdoc.el
new file mode 100644
index 00000000000..76be2c15fe4
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/gsdoc.el
@@ -0,0 +1,701 @@
+;; gsdoc.el
+;;
+;; GNU emacs (19.34) functions to help working with the HTML form of
+;; Ghostscript documentation.
+;;
+;; Pete Kaiser 8 September 1998 V1.2
+;; 2 December 1999 V1.3 Correct improper "--" to "=="
+;; in HTML marker comments
+;;============================================================
+;; One global key setting, which runs the function to bind some keys
+;; locally -- presumably in a buffer containing HTML code. Plus that
+;; function itself.
+
+(global-set-key [?\C-\S-k] 'gskeys)
+
+(defun gskeys ()
+
+"Set the keys in this buffer to use with Ghostscript HTML docs."
+
+(interactive)
+(local-set-key [?\C-\S-b] 'gs-bold)
+(local-set-key [?\C-\S-c] 'gs-code)
+(local-set-key [?\C-\S-e] 'gs-emphatic)
+(local-set-key [?\C-\S-g] 'gs-get-anchor)
+(local-set-key [?\C-\S-h] 'gs-href)
+(local-set-key [?\C-\S-i] 'gs-italic)
+(local-set-key [?\C-\S-m] 'gs-mailto)
+(local-set-key [?\C-\S-n] 'gs-name)
+(local-set-key [?\C-\S-p] 'gs-put-anchor)
+(local-set-key [?\C-\S-q] 'gs-quote)
+(local-set-key [?\C-\S-r] 'gs-row-of-table)
+(local-set-key [?\C-\S-s] 'gs-selfref)
+(local-set-key [?\C-\S-t] 'gs-table)
+(local-set-key [?\C-\S-u] 'gs-tag)
+(local-set-key [?\C-\S-x] 'gs-example)
+)
+
+;;============================================================
+;; Each of these next few functions just wraps a region in a
+;; <TAG>...</TAG>, or two nested tags. Where there are two, the first one
+;; is inner. See the inner function ~gsregion.
+
+(defun gs-bold () "Make text strong (bold)."
+(interactive)
+(~gsregion "b"))
+
+(defun gs-code () "Make text strong code (bold TT)."
+(interactive)
+(~gsregion "tt")
+(~gsregion "b"))
+
+(defun gs-emphatic () "Make text emphatic (bold italic)."
+(interactive)
+(~gsregion "em")
+(~gsregion "b"))
+
+(defun gs-italic () "Make text italic."
+(interactive)
+(~gsregion "em"))
+
+;;============================================================
+
+(defun gs-quote ()
+
+"Indent a region with BLOCKQUOTE and separate it with empty lines from
+surrounding text."
+
+(interactive)
+
+(save-restriction (narrow-to-region (region-beginning) (region-end))
+ (goto-char (point-min)) (insert "\n\n")
+ (push-mark (1+ (point-min)) t)
+ (goto-char (point-max))
+ (~gsregion "blockquote")
+ (insert "\n\n")
+ )
+)
+
+;;============================================================
+
+(defun gs-example ()
+
+"Make an indented literatim example BLOCKQUOTE PRE and separate it with
+empty lines from surrounding text."
+
+(interactive)
+
+(save-restriction (narrow-to-region (region-beginning) (region-end))
+ (goto-char (point-min)) (insert "\n")
+ (push-mark (point-min) t)
+ (goto-char (point-max))
+ (~gsregion "pre")
+ (~gsregion "blockquote")
+ (insert "\n")
+ )
+)
+
+;;============================================================
+
+(defun gs-get-anchor ()
+
+"Beginning at the head of this line, pick up the next anchor name for later
+use along with its HTML file name. This is useful when picking up an
+anchor name from a file in one buffer and using it in another buffer
+containing a different file."
+
+(interactive)
+
+;; From the beginning of this line find and pick up the next non-empty
+;; anchor, which might, of course not be right here -- though that's how it
+;; ought to be used, to pick up an anchor for immediate use. The regular
+;; expression picks up only the name itself.
+
+(beginning-of-line)
+(re-search-forward "<a name=\"?\\([^\">]+\\)\"?></a>" nil t)
+(setq gs-anchor (buffer-substring (match-beginning 1) (match-end 1)))
+
+;; Get the name of this buffer, treating it as the filename.
+
+(setq gs-anchor-file (buffer-name))
+)
+
+;;============================================================
+
+(defun gs-href ()
+
+"Wrap a region in an empty link and leave point in the middle of the
+emptiness to write the link. Maybe some day read the URL and put it
+there."
+
+(interactive)
+
+(save-restriction
+ (narrow-to-region (region-beginning) (region-end))
+ (goto-char (point-min)) (insert "<a href=\"#\">")
+ (setq HREF (- (point) 2))
+ (goto-char (point-max)) (insert "</a>")
+ (goto-char HREF)
+ )
+)
+
+;;============================================================
+
+(defun gs-mailto ()
+
+"Turn an address into a proper \"mailto:\" visually bracketed with <>."
+
+(interactive)
+
+(save-restriction
+ (narrow-to-region (region-beginning) (region-end))
+ (setq gs-address (buffer-substring (point-min) (point-max)))
+ (goto-char (point-min)) (insert "&lt;<a href=\"mailto:")
+ (goto-char (point-max)) (insert "\">" gs-address "</a>&gt;")
+ )
+)
+
+;;============================================================
+
+(defun gs-tag (Tag)
+
+"Bracket a region with some arbitrary tag read from the minibuffer, leaving
+point right after the opening word of the opening tag, and the end of the
+region at the end of the closing tag. Leaving point there makes it
+possible, for instance, to enter additional matter in a <FONT> tag. Get to
+the end of a region with ^x-^x."
+
+(interactive "*sTag: ")
+
+ (~gsregion Tag)
+ (exchange-point-and-mark) (forward-word 1)
+)
+
+;;============================================================
+
+(defun gs-toc ()
+
+"[Re]build the table of contents by picking up all the <Hn> lines and
+converting them to properly indented <UL> entries, placing the TOC within
+the standard TOC markers. Note that several of the original Ghostscript
+HTML files have hand-modified TOCs, so it's wise to check before running
+this function. It can be run from anywhere within the HTML file.
+
+This function relies on the specific format of the structure comments for
+the table of contents, which are set by the g~marker function used in
+defvars run when this package is loaded."
+
+(interactive)
+
+(setq g~html-buffer (buffer-name))
+
+(save-restriction (save-excursion
+ (widen)
+
+;; Since we're building the TOC, delete any current TOC. Locate the place
+;; for the TOC using the standard markers, deleting everything between the
+;; TOC-beginning and TOC-end markers. The new TOC is built entirely in the
+;; work buffer before being copied into the HTML buffer at that point.
+
+ (goto-char (point-min))
+ (search-forward g~toc-begin nil t)
+ (next-line 1) (beginning-of-line) (setq g~toc-insert (point))
+ (search-forward g~toc-end nil t)
+ (beginning-of-line) (delete-region g~toc-insert (point))
+
+;; Empty the work buffer by copying nothing into it.
+
+ (copy-to-buffer gs-work-buffer 1 1)
+
+;; Now collect all the following header lines into a buffer to work on
+;; them. The later append-to-buffer needs point to be in the middle of the
+;; empty list, so go there before entering the work buffer.
+
+ (save-excursion (while (re-search-forward "^<h[1-6][^>]*>" nil t)
+ (beginning-of-line) (setq BOH (point))
+ (re-search-forward "</h[1-6]>\n" nil t)
+ (append-to-buffer gs-work-buffer BOH (point))
+ ))
+ (goto-char g~toc-insert)
+
+;; All the useful header lines should be in the work buffer now.
+
+ (save-excursion
+ (set-buffer gs-work-buffer)
+
+;; Formatting as list entries: insert <ul> when the level deepens and </ul>
+;; when it rises.
+
+ (goto-char (point-min))
+ (while (search-forward "</a>" nil t) (replace-match ""))
+ (goto-char (point-min))
+ (while (re-search-forward "</h[1-6]>" nil t) (replace-match "</a>"))
+ (goto-char (point-min))
+ (while (re-search-forward "<a name=\"" nil t) (replace-match "<a href=\"#"))
+
+;; Change <h[1-6]> to <li>, inserting <ul>...</ul> as needed. Pick up the
+;; upmost level from the first header, usually <h1>, and save a copy to
+;; use to insert any terminating </ul>.
+
+ (goto-char (point-min))
+ (re-search-forward "^<h\\([1-6]\\)[^>]*>" nil t)
+ (setq First (string-to-number
+ (buffer-substring (match-beginning 1) (match-end 1))))
+ (setq Previous First)
+ (replace-match "<li>" t t)
+
+;; Got the first one, now handle the rest.
+
+ (while (re-search-forward "^<h\\([1-6]\\)[^>]*>" nil t)
+ (setq This (string-to-number
+ (buffer-substring (match-beginning 1) (match-end 1))))
+ (setq Hold This)
+ (replace-match "<li>" t t) (beginning-of-line)
+
+;; No point being too fancy with conditionals: the "while" statements here
+;; make at most one logically unnecessary test.
+
+ (while (> This Previous) (insert "<ul>\n") (setq This (1- This)))
+ (while (< This Previous) (insert "</ul>\n") (setq This (1+ This)))
+ (setq Previous Hold)
+ )
+
+;; Done with the loop. Clean up by inserting at the end any </ul> needed
+;; to get back to the top level.
+
+ (goto-char (point-max))
+ (while (> Previous First) (insert "</ul>\n") (setq Previous (1- Previous)))
+
+;; Finally add the trailing whitespace and leading whitespace and header line.
+
+ (insert "</ul></blockquote>\n\n")
+ (goto-char (point-min))
+ (insert "\n<h2>Table of contents</h2>\n\n<blockquote><ul>\n")
+
+;; The TOC is now entirely built in the work buffer. Move it to where it's
+;; supposed to be in the original buffer.
+
+ (append-to-buffer g~html-buffer (point-min) (point-max))
+ )
+ ))
+)
+
+;;============================================================
+
+(defun gs-name ()
+
+"Insert a name anchor at point and leave point ready to enter the anchor's
+name. Anchors are always empty (that is, <a name=...></a>)."
+
+(interactive)
+
+(insert "<a name=\"\"></a>")
+(backward-char 6)
+)
+
+;;============================================================
+
+(defun gs-put-anchor ()
+
+"Insert around the current region the last anchor picked up with
+gs-get-anchor. This includes the HTML file name if the href is put in a
+file other than the anchor."
+
+(interactive)
+
+(save-restriction
+ (narrow-to-region (region-beginning) (region-end))
+ (goto-char (point-min))
+ (insert (concat
+ "<a href=\""
+
+;; Insert the filename (buffer name) picked up by gs-get-anchor only if
+;; this is a different buffer.
+
+ (if (string-equal gs-anchor-file (buffer-name)) "" gs-anchor-file)
+
+;; And finish unconditionally with the specific anchor name.
+
+ "#" gs-anchor "\">"))
+ (goto-char (point-max)) (insert "</a>"))
+)
+
+;;============================================================
+
+(defun gs-row-of-table ()
+
+"Set up a row of a table from the line containing point.
+
+Insert the right things at beginning and end, and in between convert tab
+and \"|\" into column breaks with a nonbreaking space in between -- which
+means that no entry can contain a tab or \"|\". Format the HTML nicely
+for readability.
+
+Between each two substantive columns this function puts a column containing
+a single nonbreaking space to provide a visual break. Generally in the
+first row of a table those columns should be given enough NBSPs to make
+the table look right on screen and when converted to text, but this has to
+be done by hand."
+
+(interactive)
+
+(save-restriction
+ (end-of-line) (setq EOL (point))
+ (beginning-of-line) (narrow-to-region (point) EOL)
+ (insert "<tr valign=top>\t<td>")
+ (while (re-search-forward "[|\t]" nil t)
+ (replace-match "\n\t<td>&nbsp;\n\t<td>" t t))
+ (goto-char (point-max))
+ )
+(next-line 1) (beginning-of-line)
+)
+
+;;============================================================
+
+(defun gs-selfref ()
+
+"Wrap an URL to make it its own link. This is useful for links that should
+be visible when converted to text."
+
+(interactive)
+
+(save-restriction
+ (narrow-to-region (region-beginning) (region-end))
+ (goto-char (point-min))
+ (if (not (looking-at "http:\\|ftp:")) (insert "http://"))
+ (setq g~url (buffer-substring (point-min) (point-max)))
+ (goto-char (point-min))
+ (insert "<a href=\"")
+ (goto-char (point-max)) (insert "\">" g~url "</a>")
+ )
+)
+
+;;============================================================
+
+(defun gs-table ()
+
+"Set up an indented table around this region, leaving plenty of white space
+around the table within the HTML. The number of columns in the table is
+hardcoded here as 3, so that number must be changed by hand if the table
+has more than 3 columns. See gs-row-of-table for how rows are built: a
+table with N visible columns generally has 2N-1 HTML columns, including the
+columns that provide vertical white space."
+
+(interactive)
+
+(save-restriction
+ (narrow-to-region (region-beginning) (region-end))
+ (indent-rigidly (region-beginning) (region-end) -80)
+ (goto-char (point-min))
+ (insert (concat
+ "\n\n<blockquote><table cellpadding=0 cellspacing=0>\n"
+ "<tr><th colspan=3 bgcolor=\"#CCCC00\"><hr><font size=\"+1\">XXXXXXXXXX</font><hr>\n"
+ "<tr valign=bottom>\n"
+ "\t<th align=left>\n"
+ "\t<td>&nbsp;&nbsp;\n"
+ "\t<th align=left>\n"
+ "<tr>\t<td colspan=3><hr>\n"
+ ))
+ (goto-char (point-max))
+ (insert "</table></blockquote>\n")
+ )
+)
+
+;;============================================================
+
+(defun gs-text-chars ()
+
+"Prepare text for inclusion in HTML by converting \"&\", \"<\", and \">\" into
+their HTML special forms. The function acts from point to end-of-region or
+end-of-buffer, whichever comes first.
+
+This function is NOT idempotent -- running it twice on the same text will
+certainly do the wrong thing, unless at first the text contained none of
+those characters."
+
+(interactive)
+(setq BEGIN (point))
+
+;; Replace significant characters: "&", "<", and ">".
+
+(while (search-forward "&" nil t) (replace-match "&amp;" t t))
+
+(goto-char BEGIN)
+(while (search-forward "<" nil t) (replace-match "&lt;" t t))
+
+(goto-char BEGIN)
+(while (search-forward ">" nil t) (replace-match "&gt;" t t))
+
+(goto-char BEGIN)
+)
+
+;;============================================================
+
+(defun gs-wrap-textfile ()
+
+"Prepare a text file for inclusion between <pre> and </pre>, then put a
+header and footer around it. One would generally run this function on a
+buffer containing only an original text file; it is how the original
+history and news files were first prepared. At this point it's likely to
+be most useful in preparing new sections for the news document."
+
+(interactive)
+
+(widen)
+
+;; First prepare the entire text by replacing special characters.
+
+(goto-char (point-min))
+(gs-text-chars)
+
+;; At the end of the file, end as-is text and add the standard footer.
+
+(goto-char (point-max))
+(backward-word 1) (next-line 1) (beginning-of-line)
+(delete-region (point) (point-max))
+(insert "\n</pre>\n")
+(insert-file "Footer.htm")
+
+;; At the beginning of the file, begin as-is text and delete everything
+;; up to the identity string (if any), saving the identity string.
+
+(goto-char (point-min))
+(insert "<pre>\n") (setq g~pre-point (point))
+(setq g~ID " [No pre-existing ID] ")
+(if (re-search-forward "^\\$Id:\\( [^ ]+ \\)\\$" nil t) (progn
+ (setq g~ID (buffer-substring (match-beginning 1) (match-end 1)))
+ (next-line 1) (beginning-of-line) (delete-region g~pre-point (point))
+ ))
+
+;; Insert the standard header and fill in the identity string.
+
+(goto-char (point-min)) (insert-file "Header.htm")
+(goto-char (point-min)) (search-forward "<!--" nil t)
+(delete-horizontal-space) (insert g~ID)
+(search-forward "<pre>\n" nil t)
+)
+
+;;============================================================
+
+(defun ~gsregion (Tag)
+
+"Tag a region, leaving point at its end and the region around the whole
+thing including the new surrounding tags; thus invoking this function twice
+successively makes the first invocation the inner tags and the second the
+outer.
+
+Not intended for interactive use; for that use gs-tag, which gives a little
+bit of additional service."
+
+(interactive)
+
+(if (not (= 0 (length Tag))) (save-restriction
+ (narrow-to-region (region-beginning) (region-end))
+ (goto-char (point-min)) (insert "<" Tag ">")
+ (goto-char (point-max)) (insert "</" Tag ">")
+ (push-mark (point-min) t)
+ (goto-char (point-max))
+ )
+ )
+)
+
+;;============================================================
+
+(defun gs-structure ()
+
+"For historical interest only: add structuring commentary to a Ghostscript
+HTML file. It's crude, but it did most of the work. Future files will
+acquire their structure through plagiarism, like any other code.
+
+Now they've all been structured, and this function was used to do it. The
+placement of table-of-contents lines never worked, because most of the
+files didn't yet have TOCS. Now all files that should have TOCs have
+properly placed markers, but that's history."
+
+(interactive)
+
+(setq g~thisfile (buffer-name))
+
+(widen)
+(goto-char (point-min))
+
+;; Replace the RCS $Id if one can be found in exactly the right format, and
+;; otherwise insert one just after the title, along with a warning message.
+
+(if (re-search-forward "<!-- $Id: *\\([^ ]*\\) $ -->" nil t)
+ (progn
+ (setq Original (buffer-substring (match-beginning 1) (match-end 1)))
+ (replace-match g~thisfile t t nil 1)
+ )
+ (progn
+ (search-forward "</title>" nil t) (end-of-line)
+ (insert (concat "\n<!-- $Id: " g~thisfile " $ -->"))
+ (setq Original "(UNSET by gs-structure)")
+ )
+ )
+
+(end-of-line)
+(insert (concat "\n<!-- Originally: " Original " -->"))
+
+;; Place the visible header marker immediately after <BODY>.
+
+(re-search-forward "<body[^>]*>" nil t)
+ (end-of-line) (forward-char 1)
+ (insert (concat g~header-begin "\n\n"))
+
+;; Place the headline marker before the first <table> block.
+
+(search-forward "<table" nil t) (search-backward "\n\n" nil t)
+ (forward-word 1) (beginning-of-line)
+ (insert (concat g~headline-begin "\n\n"))
+
+;; After the first table block place the end-headline marker and both
+;; table-of-contents markers, without worrying where the table of contents
+;; really is. The TOC markers can easily be moved by hand later.
+
+(search-forward "\n\n" nil t)
+ (backward-word 1) (end-of-line) (forward-char 1)
+ (insert (concat
+ "\n"
+ g~headline-end "\n\n"
+ g~toc-begin "\n\n"
+ g~toc-end "\n\n"))
+
+;; The hints section begins with the first paragraph after where the TOC
+;; markers are placed, and ends with <HR>. This isn't precise, and in fact
+;; fails for several files, but once again only an approximation is needed
+;; because it'll be edited by hand later.
+
+(search-forward "<p>" nil t) (beginning-of-line)
+ (insert (concat g~hint-begin "\n\n"))
+
+(search-forward "<hr>" nil t) (beginning-of-line)
+ (insert (concat g~hint-end "\n\n"))
+
+;; The visible header ends with (and includes) the first <HR>, and the
+;; contents begin immediately thereafter.
+
+(search-forward "<hr>\n" nil t)
+ (insert (concat "\n" g~header-end "\n\n"))
+
+(forward-word 1) (beginning-of-line)
+ (insert (concat g~contents-begin "\n\n"))
+
+;; The contents end before the final <HR> and the trailer begins
+;; immediately thereafter.
+
+(goto-char (point-max)) (search-backward "<hr>" nil t)
+ (backward-word 1) (end-of-line) (forward-char 1)
+ (insert (concat
+ "\n"
+ g~contents-end "\n\n"
+ g~trailer-begin "\n\n"))
+
+;; The trailer ends with </BODY>.
+
+(goto-char (point-max)) (search-backward "</body>" nil t)
+ (insert (concat "\n" g~trailer-end "\n\n"))
+
+;; We may have introduced trailing whitespace and extra empty lines.
+;; Remove them.
+
+(goto-char (point-min))
+(while (re-search-forward "[ \t\240\r]+$" nil t) (replace-match "" t t))
+(goto-char (point-min))
+(while (re-search-forward "\n\n\n+" nil t) (replace-match "\n\n" t t))
+
+)
+
+;;============================================================
+;; When this file is loaded into emacs, define the structure markers for GS
+;; HTML files. These markers have two purposes: first, to make the HTML
+;; more readable, and second, to enable these functions to locate sections
+;; unambiguously (see gs-toc, the table of contents builder). Note that
+;; the markers do not include LF.
+
+(defun g~marker (basic)
+
+"Build a complete Ghostscript HTML file marker from its text-only part.
+gs-toc relies entirely on this function, so if it's ever changed, gs-toc
+and existing markers would also have to be changed to keep pace.
+
+Intended only for initialization, not interactive use.
+
+All the existing files are now marked up, and since any future ones are
+(properly) likely to be created by plagiarism, it's difficult to imagine
+why anyone would want to change this unless they want to go to the trouble
+of coming up with a much more useful marking scheme."
+
+(interactive)
+
+(setq HEAD (concat "<!-- [" basic "] "))
+(concat HEAD
+ (substring
+ "====================================================================== -->"
+ (- (length HEAD) 80)
+ ))
+)
+
+;;============================================================
+;; Initialization code that must run after functions are defined.
+;;
+;; Look in a Ghostscript HTML file to see how these markers are used,
+;; generally
+;;
+;; begin visible header
+;; begin headline
+;; end headline
+;; begin table of contents
+;; end table of contents
+;; begin hint
+;; end hint
+;; end visible header
+;; begin contents
+;; end contents
+;; begin visible trailer
+;; end visible trailer
+;;
+;; although the TOC is in slightly different positions in a few files.
+
+(defvar g~header-begin (g~marker "1.0 begin visible header")
+ "Begin the HTML file's visible header material")
+
+(defvar g~header-end (g~marker "1.0 end visible header")
+ "End the HTML file's visible header")
+
+(defvar g~headline-begin (g~marker "1.1 begin headline")
+ "Begin the conspicuous headline")
+
+(defvar g~headline-end (g~marker "1.1 end headline")
+ "End the conspicuous headline")
+
+(defvar g~toc-begin (g~marker "1.2 begin table of contents")
+ "Begin the table of contents")
+
+(defvar g~toc-end (g~marker "1.2 end table of contents")
+ "End the table of contents")
+
+(defvar g~hint-begin (g~marker "1.3 begin hint")
+ "Begin the \"for other information\" section")
+
+(defvar g~hint-end (g~marker "1.3 end hint")
+ "End the \"for other information\" section")
+
+(defvar g~contents-begin (g~marker "2.0 begin contents")
+ "Begin the main contents")
+
+(defvar g~contents-end (g~marker "2.0 end contents")
+ "End the main contents")
+
+(defvar g~trailer-begin (g~marker "3.0 begin visible trailer")
+ "Begin the visible standard trailer material")
+
+(defvar g~trailer-end (g~marker "3.0 end visible trailer")
+ "End the visible standard trailer material")
+
+;;============================================================
+;; Some working variables
+
+(defvar gs-anchor "JUNK" "*Anchor name to insert")
+(defvar gs-anchor-file "JUNKFILE" "*Anchor filename to insert")
+(defvar gs-work-buffer "*GS work*" "*Ghostscript working buffer")
diff --git a/Master/xemtex/doc/ghostscript/index.html b/Master/xemtex/doc/ghostscript/index.html
new file mode 100644
index 00000000000..d931f27faad
--- /dev/null
+++ b/Master/xemtex/doc/ghostscript/index.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Ghostscript</title>
+<!-- Ghostscript auto-referral to the introductory document -->
+<!-- $Id: index.html,v 1.2.4.2 2002/04/10 09:45:40 giles Exp $ -->
+<meta http-equiv="REFRESH" content="0; url=Readme.htm">
+</head>
+<body>
+<p>
+Please see <a href="Readme.htm">Readme.htm</a> for an index of the
+Ghostscript documentation.
+</body>
+</html>
diff --git a/Master/xemtex/gsfonts/a010013l.afm b/Master/xemtex/gsfonts/a010013l.afm
new file mode 100644
index 00000000000..602008ee2ff
--- /dev/null
+++ b/Master/xemtex/gsfonts/a010013l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName URWGothicL-Book
+FullName URW Gothic L Book
+FamilyName URW Gothic L
+Weight Book
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -96
+UnderlineThickness 58
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -115 -240 1151 976
+CapHeight 739
+XHeight 547
+Descender -192
+Ascender 739
+StartCharMetrics 316
+C 32 ; WX 277 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 295 ; N exclam ; B 111 0 185 739 ;
+C 34 ; WX 309 ; N quotedbl ; B 74 513 237 739 ;
+C 35 ; WX 554 ; N numbersign ; B 5 0 549 739 ;
+C 36 ; WX 554 ; N dollar ; B 71 -56 479 810 ;
+C 37 ; WX 775 ; N percent ; B 13 -13 752 749 ;
+C 38 ; WX 757 ; N ampersand ; B 57 -13 735 752 ;
+C 39 ; WX 351 ; N quoteright ; B 91 547 253 739 ;
+C 40 ; WX 369 ; N parenleft ; B 57 -125 335 739 ;
+C 41 ; WX 369 ; N parenright ; B 34 -125 312 739 ;
+C 42 ; WX 425 ; N asterisk ; B 64 468 360 752 ;
+C 43 ; WX 606 ; N plus ; B 51 49 555 557 ;
+C 44 ; WX 277 ; N comma ; B 91 -67 253 126 ;
+C 45 ; WX 332 ; N hyphen ; B 31 233 302 296 ;
+C 46 ; WX 277 ; N period ; B 101 0 175 126 ;
+C 47 ; WX 437 ; N slash ; B 40 -128 397 739 ;
+C 48 ; WX 554 ; N zero ; B 30 -13 525 752 ;
+C 49 ; WX 554 ; N one ; B 155 0 354 739 ;
+C 50 ; WX 554 ; N two ; B 33 0 506 752 ;
+C 51 ; WX 554 ; N three ; B 33 -13 504 752 ;
+C 52 ; WX 554 ; N four ; B 12 0 527 739 ;
+C 53 ; WX 554 ; N five ; B 26 -13 528 739 ;
+C 54 ; WX 554 ; N six ; B 25 -13 529 739 ;
+C 55 ; WX 554 ; N seven ; B 64 0 490 739 ;
+C 56 ; WX 554 ; N eight ; B 42 -13 512 752 ;
+C 57 ; WX 554 ; N nine ; B 25 0 529 752 ;
+C 58 ; WX 277 ; N colon ; B 101 0 175 507 ;
+C 59 ; WX 277 ; N semicolon ; B 41 -67 203 507 ;
+C 60 ; WX 606 ; N less ; B 49 37 558 565 ;
+C 61 ; WX 606 ; N equal ; B 51 164 555 436 ;
+C 62 ; WX 606 ; N greater ; B 48 37 557 565 ;
+C 63 ; WX 591 ; N question ; B 65 0 525 752 ;
+C 64 ; WX 867 ; N at ; B 71 -13 797 752 ;
+C 65 ; WX 740 ; N A ; B 11 0 729 739 ;
+C 66 ; WX 574 ; N B ; B 76 0 544 739 ;
+C 67 ; WX 813 ; N C ; B 44 -13 770 752 ;
+C 68 ; WX 744 ; N D ; B 76 0 700 739 ;
+C 69 ; WX 536 ; N E ; B 76 0 480 739 ;
+C 70 ; WX 485 ; N F ; B 76 0 451 739 ;
+C 71 ; WX 872 ; N G ; B 44 -13 831 752 ;
+C 72 ; WX 683 ; N H ; B 76 0 607 739 ;
+C 73 ; WX 226 ; N I ; B 76 0 150 739 ;
+C 74 ; WX 482 ; N J ; B 11 -14 406 739 ;
+C 75 ; WX 591 ; N K ; B 76 0 585 739 ;
+C 76 ; WX 462 ; N L ; B 76 0 456 739 ;
+C 77 ; WX 919 ; N M ; B 76 0 843 739 ;
+C 78 ; WX 740 ; N N ; B 76 0 664 739 ;
+C 79 ; WX 869 ; N O ; B 44 -13 825 752 ;
+C 80 ; WX 592 ; N P ; B 76 0 565 739 ;
+C 81 ; WX 871 ; N Q ; B 44 -13 839 752 ;
+C 82 ; WX 607 ; N R ; B 76 0 577 739 ;
+C 83 ; WX 498 ; N S ; B 22 -13 476 752 ;
+C 84 ; WX 426 ; N T ; B 7 0 419 739 ;
+C 85 ; WX 655 ; N U ; B 76 -13 579 739 ;
+C 86 ; WX 702 ; N V ; B 10 0 692 739 ;
+C 87 ; WX 960 ; N W ; B 10 0 950 739 ;
+C 88 ; WX 609 ; N X ; B 8 0 601 739 ;
+C 89 ; WX 592 ; N Y ; B 2 0 590 739 ;
+C 90 ; WX 480 ; N Z ; B 17 0 474 739 ;
+C 91 ; WX 351 ; N bracketleft ; B 112 -125 313 739 ;
+C 92 ; WX 605 ; N backslash ; B 84 0 464 739 ;
+C 93 ; WX 351 ; N bracketright ; B 38 -125 239 739 ;
+C 94 ; WX 606 ; N asciicircum ; B 18 180 588 739 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -67 ;
+C 96 ; WX 351 ; N quoteleft ; B 98 547 260 739 ;
+C 97 ; WX 683 ; N a ; B 42 -13 620 560 ;
+C 98 ; WX 682 ; N b ; B 63 -13 640 739 ;
+C 99 ; WX 647 ; N c ; B 42 -13 608 560 ;
+C 100 ; WX 685 ; N d ; B 42 -13 622 739 ;
+C 101 ; WX 650 ; N e ; B 42 -13 611 560 ;
+C 102 ; WX 314 ; N f ; B 16 0 311 739 ;
+C 103 ; WX 673 ; N g ; B 42 -215 610 560 ;
+C 104 ; WX 610 ; N h ; B 63 0 547 739 ;
+C 105 ; WX 200 ; N i ; B 63 0 137 739 ;
+C 106 ; WX 203 ; N j ; B -45 -192 140 739 ;
+C 107 ; WX 502 ; N k ; B 63 0 497 739 ;
+C 108 ; WX 200 ; N l ; B 63 0 137 739 ;
+C 109 ; WX 938 ; N m ; B 63 0 875 561 ;
+C 110 ; WX 610 ; N n ; B 63 0 547 560 ;
+C 111 ; WX 655 ; N o ; B 42 -13 613 560 ;
+C 112 ; WX 682 ; N p ; B 63 -192 640 560 ;
+C 113 ; WX 682 ; N q ; B 42 -192 619 560 ;
+C 114 ; WX 301 ; N r ; B 63 0 292 560 ;
+C 115 ; WX 388 ; N s ; B 18 -13 361 560 ;
+C 116 ; WX 339 ; N t ; B 12 0 327 739 ;
+C 117 ; WX 608 ; N u ; B 63 -13 545 547 ;
+C 118 ; WX 554 ; N v ; B 8 0 546 547 ;
+C 119 ; WX 831 ; N w ; B 7 0 824 547 ;
+C 120 ; WX 480 ; N x ; B 8 0 472 547 ;
+C 121 ; WX 536 ; N y ; B 9 -192 527 547 ;
+C 122 ; WX 425 ; N z ; B 10 0 415 547 ;
+C 123 ; WX 351 ; N braceleft ; B 37 -126 271 739 ;
+C 124 ; WX 672 ; N bar ; B 304 0 368 739 ;
+C 125 ; WX 351 ; N braceright ; B 38 -126 269 739 ;
+C 126 ; WX 606 ; N asciitilde ; B 51 210 555 390 ;
+C 161 ; WX 295 ; N exclamdown ; B 111 -192 185 547 ;
+C 162 ; WX 554 ; N cent ; B 45 62 509 707 ;
+C 163 ; WX 554 ; N sterling ; B 18 0 592 752 ;
+C 164 ; WX 166 ; N fraction ; B -115 0 281 739 ;
+C 165 ; WX 554 ; N yen ; B 0 0 589 739 ;
+C 166 ; WX 554 ; N florin ; B 18 -153 546 818 ;
+C 167 ; WX 615 ; N section ; B 87 -141 529 752 ;
+C 168 ; WX 554 ; N currency ; B 26 50 528 553 ;
+C 169 ; WX 198 ; N quotesingle ; B 74 513 124 739 ;
+C 170 ; WX 502 ; N quotedblleft ; B 96 547 406 739 ;
+C 171 ; WX 425 ; N guillemotleft ; B 40 99 385 499 ;
+C 172 ; WX 251 ; N guilsinglleft ; B 40 99 211 499 ;
+C 173 ; WX 251 ; N guilsinglright ; B 40 99 211 499 ;
+C 174 ; WX 487 ; N fi ; B 13 0 424 739 ;
+C 175 ; WX 485 ; N fl ; B 13 0 422 739 ;
+C 177 ; WX 500 ; N endash ; B 0 233 500 296 ;
+C 178 ; WX 553 ; N dagger ; B 59 -133 494 739 ;
+C 179 ; WX 553 ; N daggerdbl ; B 59 -133 494 739 ;
+C 180 ; WX 277 ; N periodcentered ; B 101 229 175 355 ;
+C 182 ; WX 564 ; N paragraph ; B 37 -133 491 739 ;
+C 183 ; WX 606 ; N bullet ; B 118 118 488 488 ;
+C 184 ; WX 354 ; N quotesinglbase ; B 89 -67 251 126 ;
+C 185 ; WX 502 ; N quotedblbase ; B 89 -67 398 126 ;
+C 186 ; WX 484 ; N quotedblright ; B 87 547 393 739 ;
+C 187 ; WX 425 ; N guillemotright ; B 40 99 385 499 ;
+C 188 ; WX 1000 ; N ellipsis ; B 130 0 870 126 ;
+C 189 ; WX 1174 ; N perthousand ; B 13 -13 1151 749 ;
+C 191 ; WX 591 ; N questiondown ; B 66 -205 526 547 ;
+C 193 ; WX 378 ; N grave ; B 74 610 304 776 ;
+C 194 ; WX 375 ; N acute ; B 74 610 301 782 ;
+C 195 ; WX 502 ; N circumflex ; B 74 623 428 749 ;
+C 196 ; WX 439 ; N tilde ; B 75 633 365 728 ;
+C 197 ; WX 485 ; N macron ; B 74 643 411 707 ;
+C 198 ; WX 453 ; N breve ; B 74 623 378 743 ;
+C 199 ; WX 222 ; N dotaccent ; B 74 623 148 749 ;
+C 200 ; WX 369 ; N dieresis ; B 74 623 295 749 ;
+C 202 ; WX 332 ; N ring ; B 74 610 258 794 ;
+C 203 ; WX 324 ; N cedilla ; B 74 -213 250 0 ;
+C 205 ; WX 552 ; N hungarumlaut ; B 74 610 479 780 ;
+C 206 ; WX 302 ; N ogonek ; B 74 -191 228 0 ;
+C 207 ; WX 502 ; N caron ; B 74 623 428 749 ;
+C 208 ; WX 1000 ; N emdash ; B 0 233 1000 296 ;
+C 225 ; WX 992 ; N AE ; B 11 0 936 739 ;
+C 227 ; WX 369 ; N ordfeminine ; B 31 319 339 745 ;
+C 232 ; WX 517 ; N Lslash ; B 26 0 502 739 ;
+C 233 ; WX 868 ; N Oslash ; B 44 -83 824 821 ;
+C 234 ; WX 1194 ; N OE ; B 44 -13 1138 752 ;
+C 235 ; WX 369 ; N ordmasculine ; B 32 319 337 745 ;
+C 241 ; WX 1157 ; N ae ; B 42 -13 1118 560 ;
+C 245 ; WX 200 ; N dotlessi ; B 63 0 137 547 ;
+C 248 ; WX 300 ; N lslash ; B 36 0 270 739 ;
+C 249 ; WX 653 ; N oslash ; B 42 -39 611 594 ;
+C 250 ; WX 1137 ; N oe ; B 42 -13 1098 560 ;
+C 251 ; WX 554 ; N germandbls ; B 59 -13 524 752 ;
+C -1 ; WX 655 ; N Udieresis ; B 76 -13 579 931 ;
+C -1 ; WX 655 ; N Uacute ; B 76 -13 579 964 ;
+C -1 ; WX 498 ; N Scedilla ; B 22 -213 476 752 ;
+C -1 ; WX 426 ; N Tcaron ; B 7 0 419 931 ;
+C -1 ; WX 498 ; N Scaron ; B 22 -13 476 931 ;
+C -1 ; WX 607 ; N Rcaron ; B 76 0 577 931 ;
+C -1 ; WX 607 ; N Racute ; B 76 0 577 964 ;
+C -1 ; WX 498 ; N Sacute ; B 22 -13 476 964 ;
+C -1 ; WX 869 ; N Otilde ; B 44 -13 825 910 ;
+C -1 ; WX 608 ; N ucircumflex ; B 63 -13 545 749 ;
+C -1 ; WX 869 ; N Ohungarumlaut ; B 44 -13 825 962 ;
+C -1 ; WX 655 ; N Uhungarumlaut ; B 76 -13 579 962 ;
+C -1 ; WX 592 ; N Yacute ; B 2 0 590 964 ;
+C -1 ; WX 790 ; N Eth ; B 26 0 746 739 ;
+C -1 ; WX 790 ; N Dcroat ; B 26 0 746 739 ;
+C -1 ; WX 480 ; N Zacute ; B 17 0 474 964 ;
+C -1 ; WX 655 ; N Uring ; B 76 -13 579 976 ;
+C -1 ; WX 673 ; N gbreve ; B 42 -215 610 743 ;
+C -1 ; WX 650 ; N eogonek ; B 42 -191 611 560 ;
+C -1 ; WX 650 ; N edotaccent ; B 42 -13 611 749 ;
+C -1 ; WX 650 ; N ecaron ; B 42 -13 611 749 ;
+C -1 ; WX 655 ; N Ugrave ; B 76 -13 579 958 ;
+C -1 ; WX 592 ; N Thorn ; B 76 0 565 739 ;
+C -1 ; WX 650 ; N eacute ; B 42 -13 611 782 ;
+C -1 ; WX 650 ; N edieresis ; B 42 -13 611 749 ;
+C -1 ; WX 725 ; N dcaron ; B 42 -13 765 739 ;
+C -1 ; WX 647 ; N ccedilla ; B 42 -224 608 560 ;
+C -1 ; WX 647 ; N ccaron ; B 42 -13 608 749 ;
+C -1 ; WX 647 ; N cacute ; B 42 -13 608 782 ;
+C -1 ; WX 683 ; N aogonek ; B 42 -191 651 560 ;
+C -1 ; WX 683 ; N aring ; B 42 -13 620 794 ;
+C -1 ; WX 683 ; N atilde ; B 42 -13 620 728 ;
+C -1 ; WX 683 ; N abreve ; B 42 -13 620 743 ;
+C -1 ; WX 650 ; N egrave ; B 42 -13 611 776 ;
+C -1 ; WX 683 ; N agrave ; B 42 -13 620 776 ;
+C -1 ; WX 683 ; N aacute ; B 42 -13 620 782 ;
+C -1 ; WX 683 ; N adieresis ; B 42 -13 620 749 ;
+C -1 ; WX 655 ; N Uogonek ; B 76 -191 579 739 ;
+C -1 ; WX 608 ; N ugrave ; B 63 -13 545 776 ;
+C -1 ; WX 608 ; N uacute ; B 63 -13 545 782 ;
+C -1 ; WX 608 ; N udieresis ; B 63 -13 545 749 ;
+C -1 ; WX 339 ; N tcaron ; B 12 0 379 739 ;
+C -1 ; WX 388 ; N scommaaccent ; B 18 -225 361 560 ;
+C -1 ; WX 480 ; N Zcaron ; B 17 0 474 931 ;
+C -1 ; WX 650 ; N ecircumflex ; B 42 -13 611 749 ;
+C -1 ; WX 655 ; N Ucircumflex ; B 76 -13 579 931 ;
+C -1 ; WX 683 ; N acircumflex ; B 42 -13 620 749 ;
+C -1 ; WX 480 ; N Zdotaccent ; B 17 0 474 931 ;
+C -1 ; WX 388 ; N scaron ; B 17 -13 371 749 ;
+C -1 ; WX 740 ; N Amacron ; B 11 0 729 889 ;
+C -1 ; WX 388 ; N sacute ; B 18 -13 361 782 ;
+C -1 ; WX 426 ; N Tcommaaccent ; B 7 -225 419 739 ;
+C -1 ; WX 592 ; N Ydieresis ; B 2 0 590 931 ;
+C -1 ; WX 682 ; N thorn ; B 63 -192 640 739 ;
+C -1 ; WX 536 ; N Emacron ; B 76 0 480 889 ;
+C -1 ; WX 869 ; N Ograve ; B 44 -13 825 958 ;
+C -1 ; WX 869 ; N Oacute ; B 44 -13 825 964 ;
+C -1 ; WX 869 ; N Odieresis ; B 44 -13 825 931 ;
+C -1 ; WX 740 ; N Ntilde ; B 76 0 664 910 ;
+C -1 ; WX 740 ; N Ncaron ; B 76 0 664 931 ;
+C -1 ; WX 740 ; N Nacute ; B 76 0 664 964 ;
+C -1 ; WX 462 ; N Lcaron ; B 76 0 456 739 ;
+C -1 ; WX 462 ; N Lacute ; B 76 0 456 964 ;
+C -1 ; WX 226 ; N Idotaccent ; B 76 0 150 931 ;
+C -1 ; WX 301 ; N racute ; B 63 0 324 782 ;
+C -1 ; WX 226 ; N Icircumflex ; B -64 0 290 931 ;
+C -1 ; WX 655 ; N ohungarumlaut ; B 42 -13 613 780 ;
+C -1 ; WX 655 ; N otilde ; B 42 -13 613 728 ;
+C -1 ; WX 554 ; N Euro ; B -32 -13 573 752 ;
+C -1 ; WX 655 ; N ocircumflex ; B 42 -13 613 749 ;
+C -1 ; WX 332 ; N onesuperior ; B 98 288 233 739 ;
+C -1 ; WX 332 ; N twosuperior ; B 12 288 320 747 ;
+C -1 ; WX 332 ; N threesuperior ; B 13 280 319 747 ;
+C -1 ; WX 226 ; N Igrave ; B -2 0 228 958 ;
+C -1 ; WX 226 ; N Iacute ; B -1 0 226 964 ;
+C -1 ; WX 226 ; N Imacron ; B -56 0 281 889 ;
+C -1 ; WX 226 ; N Iogonek ; B 27 -191 181 739 ;
+C -1 ; WX 226 ; N Idieresis ; B 3 0 224 931 ;
+C -1 ; WX 872 ; N Gbreve ; B 44 -13 831 925 ;
+C -1 ; WX 655 ; N Umacron ; B 76 -13 579 889 ;
+C -1 ; WX 591 ; N Kcommaaccent ; B 76 -225 585 739 ;
+C -1 ; WX 655 ; N ograve ; B 42 -13 613 776 ;
+C -1 ; WX 498 ; N Scommaaccent ; B 22 -225 476 752 ;
+C -1 ; WX 536 ; N Eogonek ; B 76 -191 511 739 ;
+C -1 ; WX 655 ; N oacute ; B 42 -13 613 782 ;
+C -1 ; WX 536 ; N Edotaccent ; B 76 0 480 931 ;
+C -1 ; WX 200 ; N iogonek ; B 14 -191 168 739 ;
+C -1 ; WX 673 ; N gcommaaccent ; B 42 -215 610 790 ;
+C -1 ; WX 655 ; N odieresis ; B 42 -13 613 749 ;
+C -1 ; WX 610 ; N ntilde ; B 63 0 547 728 ;
+C -1 ; WX 610 ; N ncaron ; B 63 0 547 749 ;
+C -1 ; WX 536 ; N Ecaron ; B 76 0 480 931 ;
+C -1 ; WX 536 ; N Ecircumflex ; B 76 0 480 931 ;
+C -1 ; WX 388 ; N scedilla ; B 17 -213 361 560 ;
+C -1 ; WX 301 ; N rcaron ; B 10 0 364 749 ;
+C -1 ; WX 536 ; N Egrave ; B 76 0 480 958 ;
+C -1 ; WX 536 ; N Eacute ; B 76 0 480 964 ;
+C -1 ; WX 872 ; N Gcommaaccent ; B 44 -225 831 752 ;
+C -1 ; WX 607 ; N Rcommaaccent ; B 76 -225 577 739 ;
+C -1 ; WX 536 ; N Edieresis ; B 76 0 480 931 ;
+C -1 ; WX 610 ; N nacute ; B 63 0 547 782 ;
+C -1 ; WX 608 ; N uogonek ; B 63 -191 576 547 ;
+C -1 ; WX 608 ; N umacron ; B 63 -13 545 707 ;
+C -1 ; WX 744 ; N Dcaron ; B 76 0 700 931 ;
+C -1 ; WX 245 ; N lcaron ; B 63 0 285 739 ;
+C -1 ; WX 813 ; N Ccaron ; B 44 -13 770 931 ;
+C -1 ; WX 813 ; N Cacute ; B 44 -13 770 964 ;
+C -1 ; WX 813 ; N Ccedilla ; B 44 -240 770 752 ;
+C -1 ; WX 400 ; N degree ; B 50 380 350 686 ;
+C -1 ; WX 740 ; N Aogonek ; B 11 -191 760 739 ;
+C -1 ; WX 606 ; N minus ; B 51 267 555 341 ;
+C -1 ; WX 606 ; N multiply ; B 51 48 555 551 ;
+C -1 ; WX 606 ; N divide ; B 51 112 555 496 ;
+C -1 ; WX 740 ; N Aring ; B 11 0 729 976 ;
+C -1 ; WX 1000 ; N trademark ; B 63 340 938 739 ;
+C -1 ; WX 301 ; N rcommaaccent ; B 63 -225 292 560 ;
+C -1 ; WX 200 ; N lacute ; B -14 0 213 964 ;
+C -1 ; WX 655 ; N omacron ; B 42 -13 613 707 ;
+C -1 ; WX 740 ; N Atilde ; B 11 0 729 910 ;
+C -1 ; WX 200 ; N icircumflex ; B -77 0 277 749 ;
+C -1 ; WX 200 ; N igrave ; B -15 0 215 776 ;
+C -1 ; WX 610 ; N ncommaaccent ; B 63 -225 547 560 ;
+C -1 ; WX 200 ; N lcommaaccent ; B 26 -225 148 739 ;
+C -1 ; WX 606 ; N plusminus ; B 51 0 555 585 ;
+C -1 ; WX 831 ; N onehalf ; B 96 0 814 739 ;
+C -1 ; WX 831 ; N onequarter ; B 101 0 803 739 ;
+C -1 ; WX 831 ; N threequarters ; B 13 0 803 747 ;
+C -1 ; WX 200 ; N iacute ; B -13 0 214 782 ;
+C -1 ; WX 740 ; N Abreve ; B 11 0 729 925 ;
+C -1 ; WX 502 ; N kcommaaccent ; B 63 -225 497 739 ;
+C -1 ; WX 869 ; N Omacron ; B 44 -13 825 889 ;
+C -1 ; WX 200 ; N imacron ; B -69 0 268 707 ;
+C -1 ; WX 650 ; N emacron ; B 42 -13 611 707 ;
+C -1 ; WX 683 ; N amacron ; B 42 -13 620 707 ;
+C -1 ; WX 339 ; N tcommaaccent ; B 12 -225 327 739 ;
+C -1 ; WX 536 ; N ydieresis ; B 9 -192 527 749 ;
+C -1 ; WX 425 ; N zdotaccent ; B 10 0 415 749 ;
+C -1 ; WX 425 ; N zcaron ; B 10 0 415 749 ;
+C -1 ; WX 425 ; N zacute ; B 10 0 415 782 ;
+C -1 ; WX 536 ; N yacute ; B 9 -192 527 782 ;
+C -1 ; WX 608 ; N uhungarumlaut ; B 63 -13 547 780 ;
+C -1 ; WX 655 ; N eth ; B 42 -13 613 756 ;
+C -1 ; WX 608 ; N uring ; B 63 -13 545 794 ;
+C -1 ; WX 869 ; N Ocircumflex ; B 44 -13 825 931 ;
+C -1 ; WX 351 ; N commaaccent ; B 101 -225 223 -53 ;
+C -1 ; WX 747 ; N copyright ; B -9 -13 755 752 ;
+C -1 ; WX 747 ; N registered ; B -9 -13 755 752 ;
+C -1 ; WX 740 ; N Acircumflex ; B 11 0 729 931 ;
+C -1 ; WX 200 ; N idieresis ; B -10 0 211 749 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 549 ; N notequal ; B 25 42 529 558 ;
+C -1 ; WX 549 ; N radical ; B 10 -35 515 913 ;
+C -1 ; WX 740 ; N Agrave ; B 11 0 729 958 ;
+C -1 ; WX 740 ; N Aacute ; B 11 0 729 964 ;
+C -1 ; WX 549 ; N lessequal ; B 26 0 530 646 ;
+C -1 ; WX 549 ; N greaterequal ; B 26 0 530 646 ;
+C -1 ; WX 606 ; N logicalnot ; B 51 148 555 436 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 740 ; N Ncommaaccent ; B 76 -225 664 739 ;
+C -1 ; WX 685 ; N dcroat ; B 42 -13 685 739 ;
+C -1 ; WX 672 ; N brokenbar ; B 304 0 368 739 ;
+C -1 ; WX 462 ; N Lcommaaccent ; B 76 -225 456 739 ;
+C -1 ; WX 740 ; N Adieresis ; B 11 0 729 931 ;
+C -1 ; WX 608 ; N mu ; B 63 -192 545 547 ;
+C -1 ; WX 277 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -36
+KPX A Ccedilla -37
+KPX A G -38
+KPX A O -38
+KPX A Odieresis -38
+KPX A Q -38
+KPX A T -50
+KPX A U -29
+KPX A Uacute -29
+KPX A Ucircumflex -29
+KPX A Udieresis -29
+KPX A Ugrave -29
+KPX A V -72
+KPX A W -47
+KPX A Y -77
+KPX A a -20
+KPX A b 5
+KPX A c -22
+KPX A ccedilla -22
+KPX A comma -5
+KPX A d -21
+KPX A e -21
+KPX A g -23
+KPX A guillemotleft -22
+KPX A guilsinglleft -22
+KPX A hyphen 13
+KPX A o -20
+KPX A period 13
+KPX A q -21
+KPX A quotedblright -90
+KPX A quoteright -92
+KPX A t -28
+KPX A u -15
+KPX A v -39
+KPX A w -33
+KPX A y -37
+KPX Aacute C -36
+KPX Aacute G -38
+KPX Aacute O -38
+KPX Aacute Q -38
+KPX Aacute T -50
+KPX Aacute U -29
+KPX Aacute V -72
+KPX Aacute W -47
+KPX Aacute Y -77
+KPX Aacute a -20
+KPX Aacute b 5
+KPX Aacute c -22
+KPX Aacute comma -5
+KPX Aacute d -21
+KPX Aacute e -21
+KPX Aacute g -23
+KPX Aacute guillemotleft -22
+KPX Aacute guilsinglleft -22
+KPX Aacute hyphen 13
+KPX Aacute o -20
+KPX Aacute period 13
+KPX Aacute q -21
+KPX Aacute quoteright -92
+KPX Aacute t -28
+KPX Aacute u -15
+KPX Aacute v -39
+KPX Aacute w -33
+KPX Aacute y -37
+KPX Acircumflex C -36
+KPX Acircumflex G -38
+KPX Acircumflex O -38
+KPX Acircumflex Q -38
+KPX Acircumflex T -50
+KPX Acircumflex U -29
+KPX Acircumflex V -72
+KPX Acircumflex W -47
+KPX Acircumflex Y -77
+KPX Acircumflex comma -5
+KPX Acircumflex period 13
+KPX Adieresis C -36
+KPX Adieresis G -38
+KPX Adieresis O -38
+KPX Adieresis Q -38
+KPX Adieresis T -50
+KPX Adieresis U -29
+KPX Adieresis V -72
+KPX Adieresis W -47
+KPX Adieresis Y -77
+KPX Adieresis a -20
+KPX Adieresis b 5
+KPX Adieresis c -22
+KPX Adieresis comma -5
+KPX Adieresis d -21
+KPX Adieresis g -23
+KPX Adieresis guillemotleft -22
+KPX Adieresis guilsinglleft -22
+KPX Adieresis hyphen 13
+KPX Adieresis o -20
+KPX Adieresis period 13
+KPX Adieresis q -21
+KPX Adieresis quotedblright -90
+KPX Adieresis quoteright -92
+KPX Adieresis t -28
+KPX Adieresis u -15
+KPX Adieresis v -39
+KPX Adieresis w -33
+KPX Adieresis y -37
+KPX Agrave C -36
+KPX Agrave G -38
+KPX Agrave O -38
+KPX Agrave Q -38
+KPX Agrave T -50
+KPX Agrave U -29
+KPX Agrave V -72
+KPX Agrave W -47
+KPX Agrave Y -77
+KPX Agrave comma -5
+KPX Agrave period 13
+KPX Aring C -36
+KPX Aring G -38
+KPX Aring O -38
+KPX Aring Q -38
+KPX Aring T -50
+KPX Aring U -29
+KPX Aring V -72
+KPX Aring W -47
+KPX Aring Y -77
+KPX Aring a -20
+KPX Aring b 5
+KPX Aring c -22
+KPX Aring comma -5
+KPX Aring d -21
+KPX Aring e -21
+KPX Aring g -23
+KPX Aring guillemotleft -22
+KPX Aring guilsinglleft -22
+KPX Aring hyphen 13
+KPX Aring o -20
+KPX Aring period 13
+KPX Aring q -21
+KPX Aring quotedblright -90
+KPX Aring quoteright -92
+KPX Aring t -28
+KPX Aring u -15
+KPX Aring v -39
+KPX Aring w -33
+KPX Aring y -37
+KPX Atilde C -36
+KPX Atilde G -38
+KPX Atilde O -38
+KPX Atilde Q -38
+KPX Atilde T -50
+KPX Atilde U -29
+KPX Atilde V -72
+KPX Atilde W -47
+KPX Atilde Y -77
+KPX Atilde comma -5
+KPX Atilde period 13
+KPX B A -8
+KPX B AE -21
+KPX B Aacute -8
+KPX B Acircumflex -8
+KPX B Adieresis -8
+KPX B Aring -8
+KPX B Atilde -8
+KPX B O 6
+KPX B OE 7
+KPX B Oacute 6
+KPX B Ocircumflex 6
+KPX B Odieresis 6
+KPX B Ograve 6
+KPX B Oslash 9
+KPX B V -24
+KPX B W -2
+KPX B Y -26
+KPX C A -22
+KPX C AE -45
+KPX C Aacute -22
+KPX C Adieresis -22
+KPX C Aring -22
+KPX C H 0
+KPX C K 0
+KPX C O -18
+KPX C Oacute -18
+KPX C Odieresis -18
+KPX Ccedilla A -22
+KPX D A -37
+KPX D Aacute -37
+KPX D Acircumflex -37
+KPX D Adieresis -37
+KPX D Agrave -37
+KPX D Aring -37
+KPX D Atilde -37
+KPX D J -5
+KPX D T -40
+KPX D V -36
+KPX D W -14
+KPX D X -29
+KPX D Y -44
+KPX F A -56
+KPX F Aacute -56
+KPX F Acircumflex -56
+KPX F Adieresis -56
+KPX F Agrave -56
+KPX F Aring -56
+KPX F Atilde -56
+KPX F J -55
+KPX F O 0
+KPX F Odieresis 0
+KPX F a -3
+KPX F aacute -3
+KPX F adieresis -3
+KPX F ae -3
+KPX F aring -3
+KPX F comma -98
+KPX F e -3
+KPX F eacute -3
+KPX F hyphen 23
+KPX F i -5
+KPX F j -7
+KPX F o -3
+KPX F oacute -3
+KPX F odieresis -3
+KPX F oe -3
+KPX F oslash -5
+KPX F period -80
+KPX F r -11
+KPX F u -11
+KPX G A -40
+KPX G AE -64
+KPX G Aacute -40
+KPX G Acircumflex -40
+KPX G Adieresis -40
+KPX G Agrave -40
+KPX G Aring -40
+KPX G Atilde -40
+KPX G T -45
+KPX G V -43
+KPX G W -22
+KPX G Y -48
+KPX J A -27
+KPX J AE -39
+KPX J Adieresis -27
+KPX J Aring -27
+KPX K C -36
+KPX K G -38
+KPX K O -38
+KPX K OE -37
+KPX K Oacute -38
+KPX K Odieresis -38
+KPX K S -16
+KPX K T 37
+KPX K a -44
+KPX K adieresis -44
+KPX K ae -44
+KPX K aring -44
+KPX K e -45
+KPX K hyphen -29
+KPX K o -44
+KPX K oacute -44
+KPX K odieresis -44
+KPX K u -38
+KPX K udieresis -38
+KPX K y -44
+KPX L A 34
+KPX L AE 34
+KPX L Aacute 34
+KPX L Adieresis 34
+KPX L Aring 34
+KPX L C -46
+KPX L Ccedilla -49
+KPX L G -48
+KPX L O -49
+KPX L Oacute -49
+KPX L Ocircumflex -49
+KPX L Odieresis -49
+KPX L Ograve -49
+KPX L Otilde -49
+KPX L S 7
+KPX L T -47
+KPX L U -25
+KPX L Udieresis -25
+KPX L V -100
+KPX L W -59
+KPX L Y -88
+KPX L hyphen -79
+KPX L quotedblright -114
+KPX L quoteright -116
+KPX L u -14
+KPX L udieresis -14
+KPX L y -59
+KPX N A 0
+KPX N AE -1
+KPX N Aacute 0
+KPX N Adieresis 0
+KPX N Aring 0
+KPX N C 10
+KPX N Ccedilla 11
+KPX N G 9
+KPX N O 9
+KPX N Oacute 9
+KPX N Odieresis 9
+KPX N a 8
+KPX N aacute 8
+KPX N adieresis 8
+KPX N ae 7
+KPX N aring 8
+KPX N comma -15
+KPX N e 7
+KPX N eacute 7
+KPX N o 8
+KPX N oacute 8
+KPX N odieresis 8
+KPX N oslash 9
+KPX N period 3
+KPX N u 13
+KPX N udieresis 13
+KPX O A -39
+KPX O AE -68
+KPX O Aacute -39
+KPX O Adieresis -39
+KPX O Aring -39
+KPX O T -42
+KPX O V -38
+KPX O W -16
+KPX O X -31
+KPX O Y -46
+KPX Oacute A -39
+KPX Oacute T -42
+KPX Oacute V -38
+KPX Oacute W -16
+KPX Oacute Y -46
+KPX Ocircumflex T -42
+KPX Ocircumflex V -38
+KPX Ocircumflex Y -46
+KPX Odieresis A -39
+KPX Odieresis T -42
+KPX Odieresis V -38
+KPX Odieresis W -16
+KPX Odieresis X -31
+KPX Odieresis Y -46
+KPX Ograve T -42
+KPX Ograve V -38
+KPX Ograve Y -46
+KPX Oslash A -36
+KPX Otilde T -42
+KPX Otilde V -38
+KPX Otilde Y -46
+KPX P A -61
+KPX P AE -108
+KPX P Aacute -61
+KPX P Adieresis -61
+KPX P Aring -61
+KPX P J -68
+KPX P a -16
+KPX P aacute -16
+KPX P adieresis -16
+KPX P ae -16
+KPX P aring -16
+KPX P comma -125
+KPX P e -15
+KPX P eacute -15
+KPX P hyphen -4
+KPX P o -15
+KPX P oacute -15
+KPX P odieresis -15
+KPX P oe -15
+KPX P oslash -19
+KPX P period -106
+KPX R C 2
+KPX R Ccedilla 3
+KPX R G 1
+KPX R O 2
+KPX R OE 2
+KPX R Oacute 2
+KPX R Odieresis 2
+KPX R T -4
+KPX R U 11
+KPX R Udieresis 11
+KPX R V -11
+KPX R W -3
+KPX R Y -14
+KPX R a -7
+KPX R aacute -7
+KPX R adieresis -7
+KPX R ae -7
+KPX R aring -7
+KPX R e -7
+KPX R eacute -7
+KPX R hyphen 3
+KPX R o -7
+KPX R oacute -7
+KPX R odieresis -7
+KPX R oe -7
+KPX R u 7
+KPX R uacute 7
+KPX R udieresis 7
+KPX R y 20
+KPX S A -5
+KPX S AE -16
+KPX S Aacute -5
+KPX S Adieresis -5
+KPX S Aring -5
+KPX S T 3
+KPX S V -9
+KPX S W 3
+KPX S Y -10
+KPX S t 17
+KPX T A -50
+KPX T AE -51
+KPX T Aacute -50
+KPX T Acircumflex -50
+KPX T Adieresis -50
+KPX T Agrave -50
+KPX T Aring -50
+KPX T Atilde -50
+KPX T C -40
+KPX T G -41
+KPX T J -49
+KPX T O -42
+KPX T OE -40
+KPX T Oacute -42
+KPX T Ocircumflex -42
+KPX T Odieresis -42
+KPX T Ograve -42
+KPX T Oslash -38
+KPX T Otilde -42
+KPX T S 0
+KPX T V 34
+KPX T W 35
+KPX T Y 38
+KPX T a -48
+KPX T ae -48
+KPX T c -49
+KPX T colon -53
+KPX T comma -65
+KPX T e -48
+KPX T g -48
+KPX T guillemotleft -42
+KPX T guilsinglleft -42
+KPX T hyphen -11
+KPX T i 8
+KPX T j 6
+KPX T o -48
+KPX T oslash -45
+KPX T period -47
+KPX T r -33
+KPX T s -32
+KPX T semicolon -62
+KPX T u -40
+KPX T v -50
+KPX T w -49
+KPX T y -50
+KPX U A -30
+KPX U AE -50
+KPX U Aacute -30
+KPX U Acircumflex -30
+KPX U Adieresis -30
+KPX U Aring -30
+KPX U Atilde -30
+KPX U comma -36
+KPX U m 13
+KPX U n 13
+KPX U p 13
+KPX U period -15
+KPX U r 13
+KPX Uacute A -30
+KPX Uacute comma -36
+KPX Uacute m 13
+KPX Uacute n 13
+KPX Uacute p 13
+KPX Uacute period -15
+KPX Uacute r 13
+KPX Ucircumflex A -30
+KPX Udieresis A -30
+KPX Udieresis b 13
+KPX Udieresis comma -36
+KPX Udieresis m 13
+KPX Udieresis n 13
+KPX Udieresis p 13
+KPX Udieresis period -15
+KPX Udieresis r 13
+KPX Ugrave A -30
+KPX V A -72
+KPX V AE -118
+KPX V Aacute -72
+KPX V Acircumflex -72
+KPX V Adieresis -72
+KPX V Agrave -72
+KPX V Aring -72
+KPX V Atilde -72
+KPX V C -37
+KPX V G -38
+KPX V O -39
+KPX V Oacute -39
+KPX V Ocircumflex -39
+KPX V Odieresis -39
+KPX V Ograve -39
+KPX V Oslash -35
+KPX V Otilde -39
+KPX V S -12
+KPX V T 35
+KPX V a -59
+KPX V ae -59
+KPX V colon -60
+KPX V comma -110
+KPX V e -59
+KPX V g -59
+KPX V guillemotleft -49
+KPX V guilsinglleft -49
+KPX V hyphen -25
+KPX V i 6
+KPX V o -59
+KPX V oslash -58
+KPX V period -92
+KPX V r -32
+KPX V semicolon -70
+KPX V u -34
+KPX V y -8
+KPX W A -48
+KPX W AE -73
+KPX W Aacute -48
+KPX W Acircumflex -48
+KPX W Adieresis -48
+KPX W Agrave -48
+KPX W Aring -48
+KPX W Atilde -48
+KPX W C -14
+KPX W G -15
+KPX W O -16
+KPX W Oacute -16
+KPX W Ocircumflex -16
+KPX W Odieresis -16
+KPX W Ograve -16
+KPX W Oslash -12
+KPX W Otilde -16
+KPX W S 0
+KPX W T 35
+KPX W a -30
+KPX W ae -30
+KPX W colon -38
+KPX W comma -71
+KPX W e -30
+KPX W g -30
+KPX W guillemotleft -21
+KPX W guilsinglleft -21
+KPX W hyphen 3
+KPX W i 6
+KPX W o -30
+KPX W oslash -28
+KPX W period -53
+KPX W r -15
+KPX W semicolon -47
+KPX W u -21
+KPX W y 4
+KPX X C -29
+KPX X O -31
+KPX X Odieresis -31
+KPX X Q -30
+KPX X a -36
+KPX X e -37
+KPX X hyphen -17
+KPX X o -36
+KPX X u -29
+KPX X y -37
+KPX Y A -78
+KPX Y AE -93
+KPX Y Aacute -78
+KPX Y Acircumflex -78
+KPX Y Adieresis -78
+KPX Y Agrave -78
+KPX Y Aring -78
+KPX Y Atilde -78
+KPX Y C -44
+KPX Y G -46
+KPX Y O -46
+KPX Y Oacute -46
+KPX Y Ocircumflex -46
+KPX Y Odieresis -46
+KPX Y Ograve -46
+KPX Y Oslash -42
+KPX Y Otilde -46
+KPX Y S -13
+KPX Y T 39
+KPX Y a -68
+KPX Y ae -68
+KPX Y colon -69
+KPX Y comma -107
+KPX Y e -68
+KPX Y g -68
+KPX Y guillemotleft -63
+KPX Y guilsinglleft -62
+KPX Y hyphen -45
+KPX Y i 10
+KPX Y o -68
+KPX Y oslash -66
+KPX Y p -38
+KPX Y period -89
+KPX Y semicolon -78
+KPX Y u -40
+KPX Y v -14
+KPX Z v -8
+KPX Z y -8
+KPX a j 14
+KPX a quoteright -7
+KPX a v 5
+KPX a w 6
+KPX a y 5
+KPX aacute v 5
+KPX aacute w 6
+KPX aacute y 5
+KPX adieresis v 5
+KPX adieresis w 6
+KPX adieresis y 5
+KPX ae v -23
+KPX ae w -20
+KPX ae y -22
+KPX agrave v 5
+KPX agrave w 6
+KPX agrave y 5
+KPX aring v 5
+KPX aring w 6
+KPX aring y 5
+KPX b v -25
+KPX b w -19
+KPX b y -23
+KPX c h -4
+KPX c k -4
+KPX comma one -64
+KPX comma quotedblright -17
+KPX comma quoteright -19
+KPX e quoteright -31
+KPX e t -23
+KPX e v -24
+KPX e w -20
+KPX e x -20
+KPX e y -23
+KPX eacute v -24
+KPX eacute w -20
+KPX eacute y -23
+KPX ecircumflex v -24
+KPX ecircumflex w -20
+KPX ecircumflex y -23
+KPX eight four 17
+KPX eight one -84
+KPX eight seven -43
+KPX f a -20
+KPX f aacute -20
+KPX f adieresis -20
+KPX f ae -21
+KPX f aring -20
+KPX f e -19
+KPX f eacute -19
+KPX f f 32
+KPX f i 9
+KPX f j 7
+KPX f l 9
+KPX f o -19
+KPX f oacute -19
+KPX f odieresis -19
+KPX f oe -19
+KPX f oslash -24
+KPX f quoteright -5
+KPX f s 13
+KPX f t 34
+KPX five four 24
+KPX five one -77
+KPX five seven -32
+KPX four four 24
+KPX four one -81
+KPX four seven -35
+KPX g a 7
+KPX g adieresis 7
+KPX g ae 7
+KPX g aring 7
+KPX g e 7
+KPX g eacute 7
+KPX g l 16
+KPX g oacute 7
+KPX g odieresis 7
+KPX g r 16
+KPX guillemotright A -22
+KPX guillemotright AE -60
+KPX guillemotright Aacute -22
+KPX guillemotright Adieresis -22
+KPX guillemotright Aring -22
+KPX guillemotright T -42
+KPX guillemotright V -48
+KPX guillemotright W -21
+KPX guillemotright Y -62
+KPX guilsinglright A -22
+KPX guilsinglright AE -60
+KPX guilsinglright Aacute -22
+KPX guilsinglright Adieresis -22
+KPX guilsinglright Aring -22
+KPX guilsinglright T -41
+KPX guilsinglright V -48
+KPX guilsinglright W -21
+KPX guilsinglright Y -61
+KPX h quoteright -30
+KPX h y -17
+KPX hyphen A 13
+KPX hyphen AE -21
+KPX hyphen Aacute 13
+KPX hyphen Adieresis 13
+KPX hyphen Aring 13
+KPX hyphen T -11
+KPX hyphen V -24
+KPX hyphen W 4
+KPX hyphen Y -43
+KPX i T 8
+KPX i j 13
+KPX k a -28
+KPX k aacute -28
+KPX k adieresis -28
+KPX k ae -28
+KPX k aring -28
+KPX k comma -21
+KPX k e -28
+KPX k eacute -28
+KPX k g -29
+KPX k hyphen -36
+KPX k o -28
+KPX k oacute -28
+KPX k odieresis -28
+KPX k period -7
+KPX k s -5
+KPX k u 1
+KPX k udieresis 1
+KPX l v 5
+KPX l y 5
+KPX m p 14
+KPX m v -17
+KPX m w -12
+KPX m y -15
+KPX n T -41
+KPX n p 13
+KPX n quoteright -30
+KPX n v -19
+KPX n w -14
+KPX n y -17
+KPX nine four -33
+KPX nine one -77
+KPX nine seven -31
+KPX o T -47
+KPX o quoteright -31
+KPX o t -22
+KPX o v -24
+KPX o w -18
+KPX o x -18
+KPX o y -21
+KPX oacute v -24
+KPX oacute w -18
+KPX oacute y -21
+KPX ocircumflex t -22
+KPX odieresis t -22
+KPX odieresis v -24
+KPX odieresis w -18
+KPX odieresis x -18
+KPX odieresis y -21
+KPX ograve v -24
+KPX ograve w -18
+KPX ograve y -21
+KPX one comma -77
+KPX one eight -46
+KPX one five -46
+KPX one four -62
+KPX one nine -52
+KPX one one -133
+KPX one period -58
+KPX one seven -88
+KPX one six -49
+KPX one three -55
+KPX one two -51
+KPX one zero -27
+KPX p t -23
+KPX p y -23
+KPX period one -100
+KPX period quotedblright -56
+KPX period quoteright -58
+KPX q c 7
+KPX q u 13
+KPX quotedblbase A 6
+KPX quotedblbase AE -8
+KPX quotedblbase T -52
+KPX quotedblbase V -96
+KPX quotedblbase W -57
+KPX quotedblbase Y -93
+KPX quotedblleft A -95
+KPX quotedblleft AE -172
+KPX quotedblleft Aacute -95
+KPX quotedblleft Adieresis -95
+KPX quotedblleft Aring -95
+KPX quotedblleft T -19
+KPX quotedblleft V 3
+KPX quotedblleft W 12
+KPX quotedblleft Y 0
+KPX quotedblright A -101
+KPX quotedblright AE -179
+KPX quotedblright Aacute -101
+KPX quotedblright Adieresis -101
+KPX quotedblright Aring -101
+KPX quotedblright T -5
+KPX quotedblright V 0
+KPX quotedblright W 7
+KPX quotedblright Y -4
+KPX quoteleft A -92
+KPX quoteleft AE -170
+KPX quoteleft Aacute -92
+KPX quoteleft Adieresis -92
+KPX quoteleft Aring -92
+KPX quoteleft T -17
+KPX quoteleft V 6
+KPX quoteleft W 14
+KPX quoteleft Y 2
+KPX quoteright A -105
+KPX quoteright AE -183
+KPX quoteright Aacute -105
+KPX quoteright Adieresis -105
+KPX quoteright Aring -105
+KPX quoteright comma -100
+KPX quoteright d -56
+KPX quoteright o -55
+KPX quoteright period -80
+KPX quoteright r -30
+KPX quoteright s -27
+KPX quoteright t -32
+KPX quoteright v -21
+KPX quoteright w -19
+KPX quoteright y -21
+KPX r a -28
+KPX r aacute -28
+KPX r acircumflex -28
+KPX r adieresis -28
+KPX r ae -28
+KPX r agrave -28
+KPX r aring -28
+KPX r c -30
+KPX r ccedilla -25
+KPX r colon -12
+KPX r comma -70
+KPX r d -29
+KPX r e -28
+KPX r eacute -28
+KPX r ecircumflex -28
+KPX r egrave -28
+KPX r f 29
+KPX r g -18
+KPX r h 6
+KPX r hyphen -19
+KPX r i 6
+KPX r j 4
+KPX r k 6
+KPX r l 6
+KPX r m 6
+KPX r n 6
+KPX r o -28
+KPX r oacute -28
+KPX r ocircumflex -28
+KPX r odieresis -28
+KPX r oe -27
+KPX r ograve -28
+KPX r oslash -33
+KPX r p 6
+KPX r period -53
+KPX r q -29
+KPX r quoteright -8
+KPX r r 6
+KPX r s 8
+KPX r semicolon -24
+KPX r t 31
+KPX r u 6
+KPX r v 32
+KPX r w 33
+KPX r x 31
+KPX r y 32
+KPX r z 27
+KPX s quoteright -16
+KPX s t 8
+KPX seven colon -75
+KPX seven comma -133
+KPX seven eight -41
+KPX seven five -47
+KPX seven four -81
+KPX seven one -65
+KPX seven period -115
+KPX seven seven -20
+KPX seven six -60
+KPX seven three -42
+KPX seven two -27
+KPX six four 24
+KPX six one -94
+KPX six seven -64
+KPX t S 14
+KPX t a -25
+KPX t aacute -25
+KPX t adieresis -25
+KPX t ae -25
+KPX t aring -25
+KPX t colon -13
+KPX t e -24
+KPX t eacute -24
+KPX t h 4
+KPX t o -24
+KPX t oacute -24
+KPX t odieresis -24
+KPX t quoteright -9
+KPX t semicolon -25
+KPX three four 12
+KPX three one -91
+KPX three seven -51
+KPX two four -19
+KPX two one -81
+KPX two seven -35
+KPX u quoteright -7
+KPX v a -25
+KPX v aacute -25
+KPX v acircumflex -25
+KPX v adieresis -25
+KPX v ae -25
+KPX v agrave -25
+KPX v aring -25
+KPX v atilde -25
+KPX v c -26
+KPX v colon -21
+KPX v comma -87
+KPX v e -25
+KPX v eacute -25
+KPX v ecircumflex -25
+KPX v egrave -25
+KPX v g -21
+KPX v hyphen 0
+KPX v l 6
+KPX v o -25
+KPX v oacute -25
+KPX v odieresis -25
+KPX v ograve -25
+KPX v oslash -24
+KPX v period -70
+KPX v s -2
+KPX v semicolon -31
+KPX w a -20
+KPX w aacute -20
+KPX w acircumflex -20
+KPX w adieresis -20
+KPX w ae -20
+KPX w agrave -20
+KPX w aring -20
+KPX w atilde -20
+KPX w c -21
+KPX w colon -19
+KPX w comma -79
+KPX w e -20
+KPX w eacute -20
+KPX w ecircumflex -20
+KPX w egrave -20
+KPX w g -18
+KPX w hyphen 6
+KPX w l 7
+KPX w o -20
+KPX w oacute -20
+KPX w odieresis -20
+KPX w ograve -20
+KPX w oslash -19
+KPX w period -62
+KPX w s 0
+KPX w semicolon -29
+KPX x a -19
+KPX x c -20
+KPX x e -19
+KPX x eacute -19
+KPX x o -19
+KPX x q -19
+KPX y a -26
+KPX y aacute -26
+KPX y acircumflex -26
+KPX y adieresis -26
+KPX y ae -26
+KPX y agrave -26
+KPX y aring -26
+KPX y atilde -26
+KPX y c -27
+KPX y colon -21
+KPX y comma -89
+KPX y e -26
+KPX y eacute -26
+KPX y ecircumflex -26
+KPX y egrave -26
+KPX y g -22
+KPX y hyphen 0
+KPX y l 6
+KPX y o -26
+KPX y oacute -26
+KPX y odieresis -26
+KPX y ograve -26
+KPX y oslash -25
+KPX y period -72
+KPX y s -3
+KPX y semicolon -31
+KPX zero four 22
+KPX zero one -66
+KPX zero seven -30
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/a010013l.pfb b/Master/xemtex/gsfonts/a010013l.pfb
new file mode 100644
index 00000000000..2ff1adcfe43
--- /dev/null
+++ b/Master/xemtex/gsfonts/a010013l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/a010013l.pfm b/Master/xemtex/gsfonts/a010013l.pfm
new file mode 100644
index 00000000000..b3fd5b93750
--- /dev/null
+++ b/Master/xemtex/gsfonts/a010013l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/a010015l.afm b/Master/xemtex/gsfonts/a010015l.afm
new file mode 100644
index 00000000000..8946a1879e5
--- /dev/null
+++ b/Master/xemtex/gsfonts/a010015l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName URWGothicL-Demi
+FullName URW Gothic L Demi
+FamilyName URW Gothic L
+Weight Demi
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -93
+UnderlineThickness 90
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -121 -251 1248 1000
+CapHeight 739
+XHeight 554
+Descender -185
+Ascender 739
+StartCharMetrics 316
+C 32 ; WX 280 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 280 ; N exclam ; B 72 0 205 739 ;
+C 34 ; WX 360 ; N quotedbl ; B 74 513 283 739 ;
+C 35 ; WX 560 ; N numbersign ; B 34 0 526 739 ;
+C 36 ; WX 560 ; N dollar ; B 59 -86 494 856 ;
+C 37 ; WX 860 ; N percent ; B 21 -13 835 752 ;
+C 38 ; WX 680 ; N ampersand ; B 35 -13 664 752 ;
+C 39 ; WX 280 ; N quoteright ; B 72 466 205 739 ;
+C 40 ; WX 380 ; N parenleft ; B 74 -137 349 739 ;
+C 41 ; WX 380 ; N parenright ; B 37 -137 312 739 ;
+C 42 ; WX 440 ; N asterisk ; B 70 441 371 739 ;
+C 43 ; WX 600 ; N plus ; B 51 117 555 625 ;
+C 44 ; WX 280 ; N comma ; B 72 -140 205 128 ;
+C 45 ; WX 420 ; N hyphen ; B 74 229 351 347 ;
+C 46 ; WX 280 ; N period ; B 72 0 205 128 ;
+C 47 ; WX 460 ; N slash ; B 26 -128 443 739 ;
+C 48 ; WX 560 ; N zero ; B 30 -13 525 752 ;
+C 49 ; WX 560 ; N one ; B 153 0 379 739 ;
+C 50 ; WX 560 ; N two ; B 34 0 520 752 ;
+C 51 ; WX 560 ; N three ; B 15 -13 518 752 ;
+C 52 ; WX 560 ; N four ; B 0 0 530 739 ;
+C 53 ; WX 560 ; N five ; B 12 -13 520 739 ;
+C 54 ; WX 560 ; N six ; B 21 -13 533 739 ;
+C 55 ; WX 560 ; N seven ; B 65 0 500 739 ;
+C 56 ; WX 560 ; N eight ; B 31 -13 523 752 ;
+C 57 ; WX 560 ; N nine ; B 22 0 532 752 ;
+C 58 ; WX 280 ; N colon ; B 72 0 205 502 ;
+C 59 ; WX 280 ; N semicolon ; B 72 -140 205 502 ;
+C 60 ; WX 600 ; N less ; B 49 33 558 582 ;
+C 61 ; WX 600 ; N equal ; B 51 210 555 523 ;
+C 62 ; WX 600 ; N greater ; B 48 33 557 582 ;
+C 63 ; WX 560 ; N question ; B 32 0 485 752 ;
+C 64 ; WX 740 ; N at ; B 3 -13 745 766 ;
+C 65 ; WX 740 ; N A ; B 7 0 733 739 ;
+C 66 ; WX 580 ; N B ; B 68 0 548 739 ;
+C 67 ; WX 780 ; N C ; B 30 -13 760 752 ;
+C 68 ; WX 700 ; N D ; B 68 0 660 739 ;
+C 69 ; WX 520 ; N E ; B 68 0 465 739 ;
+C 70 ; WX 480 ; N F ; B 68 0 444 739 ;
+C 71 ; WX 840 ; N G ; B 30 -13 818 752 ;
+C 72 ; WX 680 ; N H ; B 68 0 606 739 ;
+C 73 ; WX 280 ; N I ; B 68 0 205 739 ;
+C 74 ; WX 480 ; N J ; B 9 -13 414 739 ;
+C 75 ; WX 620 ; N K ; B 68 0 599 739 ;
+C 76 ; WX 440 ; N L ; B 68 0 431 739 ;
+C 77 ; WX 900 ; N M ; B 68 0 840 739 ;
+C 78 ; WX 740 ; N N ; B 68 0 667 739 ;
+C 79 ; WX 840 ; N O ; B 30 -13 800 752 ;
+C 80 ; WX 560 ; N P ; B 68 0 540 739 ;
+C 81 ; WX 840 ; N Q ; B 30 -15 828 752 ;
+C 82 ; WX 580 ; N R ; B 68 0 568 739 ;
+C 83 ; WX 520 ; N S ; B 14 -13 493 752 ;
+C 84 ; WX 420 ; N T ; B 7 0 418 739 ;
+C 85 ; WX 640 ; N U ; B 68 -13 567 739 ;
+C 86 ; WX 700 ; N V ; B 8 0 694 739 ;
+C 87 ; WX 900 ; N W ; B 7 0 898 739 ;
+C 88 ; WX 680 ; N X ; B 5 0 676 739 ;
+C 89 ; WX 620 ; N Y ; B 3 0 626 739 ;
+C 90 ; WX 500 ; N Z ; B 18 0 480 739 ;
+C 91 ; WX 320 ; N bracketleft ; B 74 -137 292 739 ;
+C 92 ; WX 640 ; N backslash ; B 84 0 503 739 ;
+C 93 ; WX 320 ; N bracketright ; B 37 -137 255 739 ;
+C 94 ; WX 600 ; N asciicircum ; B 63 313 543 739 ;
+C 95 ; WX 500 ; N underscore ; B 0 -138 500 -48 ;
+C 96 ; WX 280 ; N quoteleft ; B 72 466 205 739 ;
+C 97 ; WX 660 ; N a ; B 30 -13 615 567 ;
+C 98 ; WX 660 ; N b ; B 54 -13 638 739 ;
+C 99 ; WX 640 ; N c ; B 30 -13 601 567 ;
+C 100 ; WX 660 ; N d ; B 30 -13 613 739 ;
+C 101 ; WX 640 ; N e ; B 30 -13 608 567 ;
+C 102 ; WX 280 ; N f ; B 10 0 274 739 ;
+C 103 ; WX 660 ; N g ; B 30 -221 611 567 ;
+C 104 ; WX 600 ; N h ; B 54 0 545 739 ;
+C 105 ; WX 240 ; N i ; B 54 0 187 739 ;
+C 106 ; WX 260 ; N j ; B 17 -185 205 739 ;
+C 107 ; WX 580 ; N k ; B 54 0 555 739 ;
+C 108 ; WX 240 ; N l ; B 54 0 187 739 ;
+C 109 ; WX 940 ; N m ; B 54 0 885 567 ;
+C 110 ; WX 600 ; N n ; B 54 0 546 567 ;
+C 111 ; WX 640 ; N o ; B 30 -13 619 567 ;
+C 112 ; WX 660 ; N p ; B 54 -185 634 567 ;
+C 113 ; WX 660 ; N q ; B 30 -185 611 567 ;
+C 114 ; WX 320 ; N r ; B 54 0 306 567 ;
+C 115 ; WX 440 ; N s ; B 19 -13 420 567 ;
+C 116 ; WX 300 ; N t ; B 9 0 287 739 ;
+C 117 ; WX 600 ; N u ; B 54 -13 547 554 ;
+C 118 ; WX 560 ; N v ; B 1 0 553 554 ;
+C 119 ; WX 800 ; N w ; B 10 0 785 554 ;
+C 120 ; WX 560 ; N x ; B 1 0 553 554 ;
+C 121 ; WX 580 ; N y ; B 6 -185 568 554 ;
+C 122 ; WX 460 ; N z ; B 20 0 442 554 ;
+C 123 ; WX 340 ; N braceleft ; B 37 -129 302 740 ;
+C 124 ; WX 600 ; N bar ; B 243 0 362 739 ;
+C 125 ; WX 340 ; N braceright ; B 38 -129 303 740 ;
+C 126 ; WX 600 ; N asciitilde ; B 51 214 555 421 ;
+C 161 ; WX 280 ; N exclamdown ; B 72 -185 205 554 ;
+C 162 ; WX 560 ; N cent ; B 39 39 511 715 ;
+C 163 ; WX 560 ; N sterling ; B 0 0 563 752 ;
+C 164 ; WX 160 ; N fraction ; B -121 0 280 739 ;
+C 165 ; WX 560 ; N yen ; B -35 0 589 739 ;
+C 166 ; WX 560 ; N florin ; B -17 -149 494 823 ;
+C 167 ; WX 560 ; N section ; B 40 -157 529 752 ;
+C 168 ; WX 560 ; N currency ; B 27 148 534 654 ;
+C 169 ; WX 220 ; N quotesingle ; B 74 513 150 739 ;
+C 170 ; WX 480 ; N quotedblleft ; B 70 466 410 739 ;
+C 171 ; WX 460 ; N guillemotleft ; B 36 108 388 469 ;
+C 172 ; WX 240 ; N guilsinglleft ; B 36 108 175 469 ;
+C 173 ; WX 240 ; N guilsinglright ; B 73 108 212 469 ;
+C 174 ; WX 520 ; N fi ; B 8 0 461 739 ;
+C 175 ; WX 520 ; N fl ; B 8 0 461 739 ;
+C 177 ; WX 500 ; N endash ; B 0 229 500 347 ;
+C 178 ; WX 560 ; N dagger ; B 48 -128 505 739 ;
+C 179 ; WX 560 ; N daggerdbl ; B 48 -128 505 739 ;
+C 180 ; WX 280 ; N periodcentered ; B 72 300 205 433 ;
+C 182 ; WX 600 ; N paragraph ; B 37 -128 527 739 ;
+C 183 ; WX 600 ; N bullet ; B 134 147 471 484 ;
+C 184 ; WX 280 ; N quotesinglbase ; B 70 -140 203 128 ;
+C 185 ; WX 480 ; N quotedblbase ; B 70 -140 410 128 ;
+C 186 ; WX 480 ; N quotedblright ; B 70 466 410 739 ;
+C 187 ; WX 460 ; N guillemotright ; B 73 108 425 469 ;
+C 188 ; WX 1000 ; N ellipsis ; B 100 0 899 128 ;
+C 189 ; WX 1280 ; N perthousand ; B 21 -13 1248 752 ;
+C 191 ; WX 560 ; N questiondown ; B 69 -198 522 554 ;
+C 193 ; WX 420 ; N grave ; B 74 613 353 825 ;
+C 194 ; WX 420 ; N acute ; B 74 613 352 825 ;
+C 195 ; WX 540 ; N circumflex ; B 74 630 473 768 ;
+C 196 ; WX 480 ; N tilde ; B 74 636 405 772 ;
+C 197 ; WX 420 ; N macron ; B 74 648 351 748 ;
+C 198 ; WX 480 ; N breve ; B 74 630 404 769 ;
+C 199 ; WX 280 ; N dotaccent ; B 74 630 207 763 ;
+C 200 ; WX 500 ; N dieresis ; B 74 630 417 763 ;
+C 202 ; WX 360 ; N ring ; B 74 610 280 816 ;
+C 203 ; WX 340 ; N cedilla ; B 74 -251 270 0 ;
+C 205 ; WX 700 ; N hungarumlaut ; B 74 613 629 825 ;
+C 206 ; WX 340 ; N ogonek ; B 74 -204 256 0 ;
+C 207 ; WX 540 ; N caron ; B 74 630 473 768 ;
+C 208 ; WX 1000 ; N emdash ; B 0 229 1000 347 ;
+C 225 ; WX 900 ; N AE ; B 17 0 843 739 ;
+C 227 ; WX 360 ; N ordfeminine ; B 28 310 342 750 ;
+C 232 ; WX 480 ; N Lslash ; B 14 0 473 739 ;
+C 233 ; WX 840 ; N Oslash ; B 30 -65 803 809 ;
+C 234 ; WX 1060 ; N OE ; B 38 -13 1004 752 ;
+C 235 ; WX 360 ; N ordmasculine ; B 31 311 338 750 ;
+C 241 ; WX 1080 ; N ae ; B 30 -13 1051 567 ;
+C 245 ; WX 240 ; N dotlessi ; B 54 0 187 554 ;
+C 248 ; WX 320 ; N lslash ; B 17 0 312 739 ;
+C 249 ; WX 660 ; N oslash ; B 30 -67 620 623 ;
+C 250 ; WX 1080 ; N oe ; B 30 -13 1048 567 ;
+C 251 ; WX 600 ; N germandbls ; B 51 -13 584 752 ;
+C -1 ; WX 640 ; N Udieresis ; B 68 -13 567 938 ;
+C -1 ; WX 640 ; N Uacute ; B 68 -13 567 1000 ;
+C -1 ; WX 520 ; N Scedilla ; B 14 -251 493 752 ;
+C -1 ; WX 420 ; N Tcaron ; B 7 0 418 943 ;
+C -1 ; WX 520 ; N Scaron ; B 14 -13 493 943 ;
+C -1 ; WX 580 ; N Rcaron ; B 68 0 568 943 ;
+C -1 ; WX 580 ; N Racute ; B 68 0 568 1000 ;
+C -1 ; WX 520 ; N Sacute ; B 14 -13 493 1000 ;
+C -1 ; WX 840 ; N Otilde ; B 30 -13 800 947 ;
+C -1 ; WX 600 ; N ucircumflex ; B 54 -13 547 768 ;
+C -1 ; WX 840 ; N Ohungarumlaut ; B 30 -13 800 1000 ;
+C -1 ; WX 640 ; N Uhungarumlaut ; B 44 -13 599 1000 ;
+C -1 ; WX 620 ; N Yacute ; B 3 0 626 1000 ;
+C -1 ; WX 742 ; N Eth ; B 14 0 702 739 ;
+C -1 ; WX 742 ; N Dcroat ; B 14 0 702 739 ;
+C -1 ; WX 500 ; N Zacute ; B 18 0 480 1000 ;
+C -1 ; WX 640 ; N Uring ; B 68 -13 567 991 ;
+C -1 ; WX 660 ; N gbreve ; B 30 -221 611 769 ;
+C -1 ; WX 640 ; N eogonek ; B 30 -204 608 567 ;
+C -1 ; WX 640 ; N edotaccent ; B 30 -13 608 763 ;
+C -1 ; WX 640 ; N ecaron ; B 30 -13 608 768 ;
+C -1 ; WX 640 ; N Ugrave ; B 68 -13 567 1000 ;
+C -1 ; WX 560 ; N Thorn ; B 68 0 540 739 ;
+C -1 ; WX 640 ; N eacute ; B 30 -13 608 825 ;
+C -1 ; WX 640 ; N edieresis ; B 30 -13 608 763 ;
+C -1 ; WX 754 ; N dcaron ; B 30 -13 794 739 ;
+C -1 ; WX 640 ; N ccedilla ; B 30 -251 601 567 ;
+C -1 ; WX 640 ; N ccaron ; B 30 -13 601 768 ;
+C -1 ; WX 640 ; N cacute ; B 30 -13 601 825 ;
+C -1 ; WX 660 ; N aogonek ; B 30 -204 641 567 ;
+C -1 ; WX 660 ; N aring ; B 30 -13 615 816 ;
+C -1 ; WX 660 ; N atilde ; B 30 -13 615 772 ;
+C -1 ; WX 660 ; N abreve ; B 30 -13 615 769 ;
+C -1 ; WX 640 ; N egrave ; B 30 -13 608 825 ;
+C -1 ; WX 660 ; N agrave ; B 30 -13 615 825 ;
+C -1 ; WX 660 ; N aacute ; B 30 -13 615 825 ;
+C -1 ; WX 660 ; N adieresis ; B 30 -13 615 763 ;
+C -1 ; WX 640 ; N Uogonek ; B 68 -204 567 739 ;
+C -1 ; WX 600 ; N ugrave ; B 54 -13 547 825 ;
+C -1 ; WX 600 ; N uacute ; B 54 -13 547 825 ;
+C -1 ; WX 600 ; N udieresis ; B 54 -13 547 763 ;
+C -1 ; WX 369 ; N tcaron ; B 9 0 409 739 ;
+C -1 ; WX 440 ; N scommaaccent ; B 19 -245 420 567 ;
+C -1 ; WX 500 ; N Zcaron ; B 18 0 480 943 ;
+C -1 ; WX 640 ; N ecircumflex ; B 30 -13 608 768 ;
+C -1 ; WX 640 ; N Ucircumflex ; B 68 -13 567 943 ;
+C -1 ; WX 660 ; N acircumflex ; B 30 -13 615 768 ;
+C -1 ; WX 500 ; N Zdotaccent ; B 18 0 480 938 ;
+C -1 ; WX 440 ; N scaron ; B 19 -13 423 768 ;
+C -1 ; WX 740 ; N Amacron ; B 7 0 733 923 ;
+C -1 ; WX 440 ; N sacute ; B 19 -13 420 825 ;
+C -1 ; WX 420 ; N Tcommaaccent ; B 7 -245 418 739 ;
+C -1 ; WX 620 ; N Ydieresis ; B 3 0 626 938 ;
+C -1 ; WX 660 ; N thorn ; B 54 -185 634 739 ;
+C -1 ; WX 520 ; N Emacron ; B 68 0 465 923 ;
+C -1 ; WX 840 ; N Ograve ; B 30 -13 800 1000 ;
+C -1 ; WX 840 ; N Oacute ; B 30 -13 800 1000 ;
+C -1 ; WX 840 ; N Odieresis ; B 30 -13 800 938 ;
+C -1 ; WX 740 ; N Ntilde ; B 68 0 667 947 ;
+C -1 ; WX 740 ; N Ncaron ; B 68 0 667 943 ;
+C -1 ; WX 740 ; N Nacute ; B 68 0 667 1000 ;
+C -1 ; WX 440 ; N Lcaron ; B 68 0 440 739 ;
+C -1 ; WX 440 ; N Lacute ; B 68 0 431 1000 ;
+C -1 ; WX 280 ; N Idotaccent ; B 68 0 207 938 ;
+C -1 ; WX 320 ; N racute ; B 24 0 306 825 ;
+C -1 ; WX 280 ; N Icircumflex ; B -56 0 343 943 ;
+C -1 ; WX 640 ; N ohungarumlaut ; B 30 -13 619 825 ;
+C -1 ; WX 640 ; N otilde ; B 30 -13 619 772 ;
+C -1 ; WX 560 ; N Euro ; B -33 -11 595 750 ;
+C -1 ; WX 640 ; N ocircumflex ; B 30 -13 619 768 ;
+C -1 ; WX 336 ; N onesuperior ; B 94 296 241 739 ;
+C -1 ; WX 336 ; N twosuperior ; B 10 296 326 747 ;
+C -1 ; WX 336 ; N threesuperior ; B 4 288 331 746 ;
+C -1 ; WX 280 ; N Igrave ; B 4 0 283 1000 ;
+C -1 ; WX 280 ; N Iacute ; B 4 0 282 1000 ;
+C -1 ; WX 280 ; N Imacron ; B 4 0 281 923 ;
+C -1 ; WX 280 ; N Iogonek ; B 49 -204 231 739 ;
+C -1 ; WX 280 ; N Idieresis ; B -36 0 307 938 ;
+C -1 ; WX 840 ; N Gbreve ; B 30 -13 818 944 ;
+C -1 ; WX 640 ; N Umacron ; B 68 -13 567 923 ;
+C -1 ; WX 620 ; N Kcommaaccent ; B 68 -245 599 739 ;
+C -1 ; WX 640 ; N ograve ; B 30 -13 619 825 ;
+C -1 ; WX 520 ; N Scommaaccent ; B 14 -245 493 752 ;
+C -1 ; WX 520 ; N Eogonek ; B 68 -204 491 739 ;
+C -1 ; WX 640 ; N oacute ; B 30 -13 619 825 ;
+C -1 ; WX 520 ; N Edotaccent ; B 68 0 465 938 ;
+C -1 ; WX 240 ; N iogonek ; B 31 -204 213 739 ;
+C -1 ; WX 660 ; N gcommaaccent ; B 30 -221 611 799 ;
+C -1 ; WX 640 ; N odieresis ; B 30 -13 619 763 ;
+C -1 ; WX 600 ; N ntilde ; B 54 0 546 772 ;
+C -1 ; WX 600 ; N ncaron ; B 54 0 546 768 ;
+C -1 ; WX 520 ; N Ecaron ; B 64 0 465 943 ;
+C -1 ; WX 520 ; N Ecircumflex ; B 64 0 465 943 ;
+C -1 ; WX 440 ; N scedilla ; B 19 -251 420 567 ;
+C -1 ; WX 320 ; N rcaron ; B -36 0 363 768 ;
+C -1 ; WX 520 ; N Egrave ; B 68 0 465 1000 ;
+C -1 ; WX 520 ; N Eacute ; B 68 0 465 1000 ;
+C -1 ; WX 840 ; N Gcommaaccent ; B 30 -245 818 752 ;
+C -1 ; WX 580 ; N Rcommaaccent ; B 68 -245 568 739 ;
+C -1 ; WX 520 ; N Edieresis ; B 68 0 465 938 ;
+C -1 ; WX 600 ; N nacute ; B 54 0 546 825 ;
+C -1 ; WX 600 ; N uogonek ; B 54 -204 573 554 ;
+C -1 ; WX 600 ; N umacron ; B 54 -13 547 748 ;
+C -1 ; WX 700 ; N Dcaron ; B 68 0 660 943 ;
+C -1 ; WX 330 ; N lcaron ; B 54 0 370 739 ;
+C -1 ; WX 780 ; N Ccaron ; B 30 -13 760 943 ;
+C -1 ; WX 780 ; N Cacute ; B 30 -13 760 1000 ;
+C -1 ; WX 780 ; N Ccedilla ; B 30 -251 760 752 ;
+C -1 ; WX 400 ; N degree ; B 50 380 350 686 ;
+C -1 ; WX 740 ; N Aogonek ; B 7 -204 759 739 ;
+C -1 ; WX 600 ; N minus ; B 51 312 555 430 ;
+C -1 ; WX 600 ; N multiply ; B 51 114 555 618 ;
+C -1 ; WX 600 ; N divide ; B 51 73 555 669 ;
+C -1 ; WX 740 ; N Aring ; B 7 0 733 991 ;
+C -1 ; WX 1000 ; N trademark ; B 71 345 929 739 ;
+C -1 ; WX 320 ; N rcommaaccent ; B 54 -245 306 567 ;
+C -1 ; WX 240 ; N lacute ; B -16 0 262 1000 ;
+C -1 ; WX 640 ; N omacron ; B 30 -13 619 748 ;
+C -1 ; WX 740 ; N Atilde ; B 7 0 733 947 ;
+C -1 ; WX 240 ; N icircumflex ; B -76 0 323 768 ;
+C -1 ; WX 240 ; N igrave ; B -16 0 263 825 ;
+C -1 ; WX 600 ; N ncommaaccent ; B 54 -245 546 567 ;
+C -1 ; WX 240 ; N lcommaaccent ; B 16 -245 187 739 ;
+C -1 ; WX 600 ; N plusminus ; B 51 0 555 653 ;
+C -1 ; WX 840 ; N onehalf ; B 94 0 830 739 ;
+C -1 ; WX 840 ; N onequarter ; B 94 0 836 739 ;
+C -1 ; WX 840 ; N threequarters ; B 4 0 836 746 ;
+C -1 ; WX 240 ; N iacute ; B -16 0 262 825 ;
+C -1 ; WX 740 ; N Abreve ; B 7 0 733 944 ;
+C -1 ; WX 580 ; N kcommaaccent ; B 54 -245 555 739 ;
+C -1 ; WX 840 ; N Omacron ; B 30 -13 800 923 ;
+C -1 ; WX 240 ; N imacron ; B -16 0 261 748 ;
+C -1 ; WX 640 ; N emacron ; B 30 -13 608 748 ;
+C -1 ; WX 660 ; N amacron ; B 30 -13 615 748 ;
+C -1 ; WX 300 ; N tcommaaccent ; B 9 -245 287 739 ;
+C -1 ; WX 580 ; N ydieresis ; B 6 -185 568 763 ;
+C -1 ; WX 460 ; N zdotaccent ; B 20 0 442 763 ;
+C -1 ; WX 460 ; N zcaron ; B 20 0 442 768 ;
+C -1 ; WX 460 ; N zacute ; B 20 0 442 825 ;
+C -1 ; WX 580 ; N yacute ; B 6 -185 568 825 ;
+C -1 ; WX 600 ; N uhungarumlaut ; B 24 -13 579 825 ;
+C -1 ; WX 640 ; N eth ; B 30 -13 619 756 ;
+C -1 ; WX 600 ; N uring ; B 54 -13 547 816 ;
+C -1 ; WX 840 ; N Ocircumflex ; B 30 -13 800 943 ;
+C -1 ; WX 351 ; N commaaccent ; B 71 -245 233 -53 ;
+C -1 ; WX 740 ; N copyright ; B -12 -13 759 752 ;
+C -1 ; WX 740 ; N registered ; B -12 -13 759 752 ;
+C -1 ; WX 740 ; N Acircumflex ; B 7 0 733 943 ;
+C -1 ; WX 240 ; N idieresis ; B -56 0 287 763 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 600 ; N notequal ; B 51 101 555 632 ;
+C -1 ; WX 549 ; N radical ; B -25 -35 542 917 ;
+C -1 ; WX 740 ; N Agrave ; B 7 0 733 1000 ;
+C -1 ; WX 740 ; N Aacute ; B 7 0 733 1000 ;
+C -1 ; WX 600 ; N lessequal ; B 45 0 549 711 ;
+C -1 ; WX 600 ; N greaterequal ; B 51 0 555 711 ;
+C -1 ; WX 600 ; N logicalnot ; B 51 182 555 473 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 740 ; N Ncommaaccent ; B 68 -245 667 739 ;
+C -1 ; WX 660 ; N dcroat ; B 30 -13 660 739 ;
+C -1 ; WX 600 ; N brokenbar ; B 243 0 362 739 ;
+C -1 ; WX 440 ; N Lcommaaccent ; B 68 -245 431 739 ;
+C -1 ; WX 740 ; N Adieresis ; B 7 0 733 938 ;
+C -1 ; WX 576 ; N mu ; B 54 -185 547 554 ;
+C -1 ; WX 280 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -36
+KPX A Ccedilla -37
+KPX A G -36
+KPX A O -36
+KPX A Odieresis -36
+KPX A Q -37
+KPX A T -41
+KPX A U -31
+KPX A Uacute -31
+KPX A Ucircumflex -31
+KPX A Udieresis -31
+KPX A Ugrave -31
+KPX A V -74
+KPX A W -55
+KPX A Y -83
+KPX A a -20
+KPX A b 0
+KPX A c -23
+KPX A ccedilla -23
+KPX A comma 20
+KPX A d -20
+KPX A e -23
+KPX A g -20
+KPX A guillemotleft -16
+KPX A guilsinglleft -16
+KPX A hyphen -17
+KPX A o -23
+KPX A period 20
+KPX A q -22
+KPX A quotedblright -73
+KPX A quoteright -74
+KPX A t -10
+KPX A u -14
+KPX A v -42
+KPX A w -40
+KPX A y -43
+KPX Aacute C -36
+KPX Aacute G -36
+KPX Aacute O -36
+KPX Aacute Q -37
+KPX Aacute T -41
+KPX Aacute U -31
+KPX Aacute V -74
+KPX Aacute W -55
+KPX Aacute Y -83
+KPX Aacute a -20
+KPX Aacute b 0
+KPX Aacute c -23
+KPX Aacute comma 20
+KPX Aacute d -20
+KPX Aacute e -23
+KPX Aacute g -20
+KPX Aacute guillemotleft -16
+KPX Aacute guilsinglleft -16
+KPX Aacute hyphen -17
+KPX Aacute o -23
+KPX Aacute period 20
+KPX Aacute q -22
+KPX Aacute quoteright -74
+KPX Aacute t -10
+KPX Aacute u -14
+KPX Aacute v -42
+KPX Aacute w -40
+KPX Aacute y -43
+KPX Acircumflex C -36
+KPX Acircumflex G -36
+KPX Acircumflex O -36
+KPX Acircumflex Q -37
+KPX Acircumflex T -41
+KPX Acircumflex U -31
+KPX Acircumflex V -74
+KPX Acircumflex W -55
+KPX Acircumflex Y -83
+KPX Acircumflex comma 20
+KPX Acircumflex period 20
+KPX Adieresis C -36
+KPX Adieresis G -36
+KPX Adieresis O -36
+KPX Adieresis Q -37
+KPX Adieresis T -41
+KPX Adieresis U -31
+KPX Adieresis V -74
+KPX Adieresis W -55
+KPX Adieresis Y -83
+KPX Adieresis a -20
+KPX Adieresis b 0
+KPX Adieresis c -23
+KPX Adieresis comma 20
+KPX Adieresis d -20
+KPX Adieresis g -20
+KPX Adieresis guillemotleft -16
+KPX Adieresis guilsinglleft -16
+KPX Adieresis hyphen -17
+KPX Adieresis o -23
+KPX Adieresis period 20
+KPX Adieresis q -22
+KPX Adieresis quotedblright -73
+KPX Adieresis quoteright -74
+KPX Adieresis t -10
+KPX Adieresis u -14
+KPX Adieresis v -42
+KPX Adieresis w -40
+KPX Adieresis y -43
+KPX Agrave C -36
+KPX Agrave G -36
+KPX Agrave O -36
+KPX Agrave Q -37
+KPX Agrave T -41
+KPX Agrave U -31
+KPX Agrave V -74
+KPX Agrave W -55
+KPX Agrave Y -83
+KPX Agrave comma 20
+KPX Agrave period 20
+KPX Aring C -36
+KPX Aring G -36
+KPX Aring O -36
+KPX Aring Q -37
+KPX Aring T -41
+KPX Aring U -31
+KPX Aring V -74
+KPX Aring W -55
+KPX Aring Y -83
+KPX Aring a -20
+KPX Aring b 0
+KPX Aring c -23
+KPX Aring comma 20
+KPX Aring d -20
+KPX Aring e -23
+KPX Aring g -20
+KPX Aring guillemotleft -16
+KPX Aring guilsinglleft -16
+KPX Aring hyphen -17
+KPX Aring o -23
+KPX Aring period 20
+KPX Aring q -22
+KPX Aring quotedblright -73
+KPX Aring quoteright -74
+KPX Aring t -10
+KPX Aring u -14
+KPX Aring v -42
+KPX Aring w -40
+KPX Aring y -43
+KPX Atilde C -36
+KPX Atilde G -36
+KPX Atilde O -36
+KPX Atilde Q -37
+KPX Atilde T -41
+KPX Atilde U -31
+KPX Atilde V -74
+KPX Atilde W -55
+KPX Atilde Y -83
+KPX Atilde comma 20
+KPX Atilde period 20
+KPX B A -18
+KPX B AE -36
+KPX B Aacute -18
+KPX B Acircumflex -18
+KPX B Adieresis -18
+KPX B Aring -18
+KPX B Atilde -18
+KPX B O 2
+KPX B OE 0
+KPX B Oacute 2
+KPX B Ocircumflex 2
+KPX B Odieresis 2
+KPX B Ograve 2
+KPX B Oslash 4
+KPX B V -33
+KPX B W -16
+KPX B Y -39
+KPX C A -17
+KPX C AE -41
+KPX C Aacute -17
+KPX C Adieresis -17
+KPX C Aring -17
+KPX C H 6
+KPX C K 6
+KPX C O -6
+KPX C Oacute -6
+KPX C Odieresis -6
+KPX Ccedilla A -17
+KPX D A -38
+KPX D Aacute -38
+KPX D Acircumflex -38
+KPX D Adieresis -38
+KPX D Agrave -38
+KPX D Aring -38
+KPX D Atilde -38
+KPX D J -14
+KPX D T -24
+KPX D V -39
+KPX D W -21
+KPX D X -33
+KPX D Y -50
+KPX F A -53
+KPX F Aacute -53
+KPX F Acircumflex -53
+KPX F Adieresis -53
+KPX F Agrave -53
+KPX F Aring -53
+KPX F Atilde -53
+KPX F J -55
+KPX F O -3
+KPX F Odieresis -3
+KPX F a -9
+KPX F aacute -9
+KPX F adieresis -9
+KPX F ae -8
+KPX F aring -9
+KPX F comma -60
+KPX F e -9
+KPX F eacute -9
+KPX F hyphen 5
+KPX F i -9
+KPX F j -22
+KPX F o -9
+KPX F oacute -9
+KPX F odieresis -9
+KPX F oe -9
+KPX F oslash -9
+KPX F period -60
+KPX F r -9
+KPX F u -12
+KPX G A -35
+KPX G AE -60
+KPX G Aacute -35
+KPX G Acircumflex -35
+KPX G Adieresis -35
+KPX G Agrave -35
+KPX G Aring -35
+KPX G Atilde -35
+KPX G T -24
+KPX G V -38
+KPX G W -20
+KPX G Y -49
+KPX J A -27
+KPX J AE -41
+KPX J Adieresis -27
+KPX J Aring -27
+KPX K C -46
+KPX K G -46
+KPX K O -46
+KPX K OE -48
+KPX K Oacute -46
+KPX K Odieresis -46
+KPX K S -27
+KPX K T 21
+KPX K a -51
+KPX K adieresis -51
+KPX K ae -52
+KPX K aring -51
+KPX K e -54
+KPX K hyphen -68
+KPX K o -55
+KPX K oacute -55
+KPX K odieresis -55
+KPX K u -46
+KPX K udieresis -44
+KPX K y -59
+KPX L A 26
+KPX L AE 20
+KPX L Aacute 26
+KPX L Adieresis 26
+KPX L Aring 26
+KPX L C -22
+KPX L Ccedilla -25
+KPX L G -22
+KPX L O -21
+KPX L Oacute -21
+KPX L Ocircumflex -21
+KPX L Odieresis -21
+KPX L Ograve -21
+KPX L Otilde -21
+KPX L S 17
+KPX L T -41
+KPX L U -12
+KPX L Udieresis -12
+KPX L V -73
+KPX L W -54
+KPX L Y -82
+KPX L hyphen -26
+KPX L quotedblright -71
+KPX L quoteright -72
+KPX L u -5
+KPX L udieresis -5
+KPX L y -48
+KPX N A -6
+KPX N AE -11
+KPX N Aacute -6
+KPX N Adieresis -6
+KPX N Aring -6
+KPX N C 7
+KPX N Ccedilla 7
+KPX N G 7
+KPX N O 7
+KPX N Oacute 7
+KPX N Odieresis 7
+KPX N a 5
+KPX N aacute 5
+KPX N adieresis 5
+KPX N ae 4
+KPX N aring 5
+KPX N comma 8
+KPX N e 3
+KPX N eacute 3
+KPX N o 3
+KPX N oacute 3
+KPX N odieresis 3
+KPX N oslash 5
+KPX N period 8
+KPX N u 9
+KPX N udieresis 9
+KPX O A -40
+KPX O AE -70
+KPX O Aacute -40
+KPX O Adieresis -40
+KPX O Aring -40
+KPX O T -29
+KPX O V -42
+KPX O W -24
+KPX O X -36
+KPX O Y -53
+KPX Oacute A -40
+KPX Oacute T -29
+KPX Oacute V -42
+KPX Oacute W -24
+KPX Oacute Y -53
+KPX Ocircumflex T -29
+KPX Ocircumflex V -42
+KPX Ocircumflex Y -53
+KPX Odieresis A -40
+KPX Odieresis T -29
+KPX Odieresis V -42
+KPX Odieresis W -24
+KPX Odieresis X -36
+KPX Odieresis Y -53
+KPX Ograve T -29
+KPX Ograve V -42
+KPX Ograve Y -53
+KPX Oslash A -37
+KPX Otilde T -29
+KPX Otilde V -42
+KPX Otilde Y -53
+KPX P A -60
+KPX P AE -108
+KPX P Aacute -60
+KPX P Adieresis -60
+KPX P Aring -60
+KPX P J -68
+KPX P a -18
+KPX P aacute -18
+KPX P adieresis -18
+KPX P ae -19
+KPX P aring -18
+KPX P comma -95
+KPX P e -20
+KPX P eacute -20
+KPX P hyphen -20
+KPX P o -20
+KPX P oacute -20
+KPX P odieresis -20
+KPX P oe -20
+KPX P oslash -20
+KPX P period -95
+KPX R C 5
+KPX R Ccedilla 5
+KPX R G 5
+KPX R O 5
+KPX R OE 2
+KPX R Oacute 5
+KPX R Odieresis 5
+KPX R T 12
+KPX R U 10
+KPX R Udieresis 10
+KPX R V -12
+KPX R W -5
+KPX R Y -17
+KPX R a -3
+KPX R aacute -3
+KPX R adieresis -3
+KPX R ae -4
+KPX R aring -3
+KPX R e -5
+KPX R eacute -5
+KPX R hyphen -15
+KPX R o -6
+KPX R oacute -6
+KPX R odieresis -6
+KPX R oe -5
+KPX R u 8
+KPX R uacute 8
+KPX R udieresis 8
+KPX R y 15
+KPX S A -14
+KPX S AE -30
+KPX S Aacute -14
+KPX S Adieresis -14
+KPX S Aring -14
+KPX S T 2
+KPX S V -22
+KPX S W -10
+KPX S Y -27
+KPX S t 12
+KPX T A -39
+KPX T AE -44
+KPX T Aacute -39
+KPX T Acircumflex -39
+KPX T Adieresis -39
+KPX T Agrave -39
+KPX T Aring -39
+KPX T Atilde -39
+KPX T C -22
+KPX T G -22
+KPX T J -39
+KPX T O -22
+KPX T OE -24
+KPX T Oacute -22
+KPX T Ocircumflex -22
+KPX T Odieresis -22
+KPX T Ograve -22
+KPX T Oslash -19
+KPX T Otilde -22
+KPX T S 7
+KPX T V 29
+KPX T W 30
+KPX T Y 31
+KPX T a -33
+KPX T ae -34
+KPX T c -35
+KPX T colon -33
+KPX T comma -25
+KPX T e -35
+KPX T g -32
+KPX T guillemotleft -25
+KPX T guilsinglleft -25
+KPX T hyphen -26
+KPX T i 2
+KPX T j -6
+KPX T o -36
+KPX T oslash -32
+KPX T period -25
+KPX T r -21
+KPX T s -25
+KPX T semicolon -33
+KPX T u -26
+KPX T v -40
+KPX T w -45
+KPX T y -43
+KPX U A -34
+KPX U AE -55
+KPX U Aacute -34
+KPX U Acircumflex -34
+KPX U Adieresis -34
+KPX U Aring -34
+KPX U Atilde -34
+KPX U comma -11
+KPX U m 8
+KPX U n 8
+KPX U p 8
+KPX U period -8
+KPX U r 8
+KPX Uacute A -34
+KPX Uacute comma -11
+KPX Uacute m 8
+KPX Uacute n 8
+KPX Uacute p 8
+KPX Uacute period -8
+KPX Uacute r 8
+KPX Ucircumflex A -34
+KPX Udieresis A -34
+KPX Udieresis b 8
+KPX Udieresis comma -11
+KPX Udieresis m 8
+KPX Udieresis n 8
+KPX Udieresis p 8
+KPX Udieresis period -8
+KPX Udieresis r 8
+KPX Ugrave A -34
+KPX V A -72
+KPX V AE -119
+KPX V Aacute -72
+KPX V Acircumflex -72
+KPX V Adieresis -72
+KPX V Agrave -72
+KPX V Aring -72
+KPX V Atilde -72
+KPX V C -36
+KPX V G -36
+KPX V O -36
+KPX V Oacute -36
+KPX V Ocircumflex -36
+KPX V Odieresis -36
+KPX V Ograve -36
+KPX V Oslash -34
+KPX V Otilde -36
+KPX V S -19
+KPX V T 28
+KPX V a -55
+KPX V ae -56
+KPX V colon -51
+KPX V comma -80
+KPX V e -58
+KPX V g -54
+KPX V guillemotleft -47
+KPX V guilsinglleft -47
+KPX V hyphen -48
+KPX V i 0
+KPX V o -58
+KPX V oslash -55
+KPX V period -80
+KPX V r -35
+KPX V semicolon -51
+KPX V u -39
+KPX V y -14
+KPX W A -52
+KPX W AE -83
+KPX W Aacute -52
+KPX W Acircumflex -52
+KPX W Adieresis -52
+KPX W Agrave -52
+KPX W Aring -52
+KPX W Atilde -52
+KPX W C -16
+KPX W G -17
+KPX W O -16
+KPX W Oacute -16
+KPX W Ocircumflex -16
+KPX W Odieresis -16
+KPX W Ograve -16
+KPX W Oslash -14
+KPX W Otilde -16
+KPX W S -5
+KPX W T 30
+KPX W a -31
+KPX W ae -32
+KPX W colon -34
+KPX W comma -48
+KPX W e -34
+KPX W g -30
+KPX W guillemotleft -23
+KPX W guilsinglleft -23
+KPX W hyphen -24
+KPX W i 2
+KPX W o -34
+KPX W oslash -31
+KPX W period -48
+KPX W r -18
+KPX W semicolon -34
+KPX W u -24
+KPX W y -3
+KPX X C -32
+KPX X O -32
+KPX X Odieresis -32
+KPX X Q -32
+KPX X a -39
+KPX X e -41
+KPX X hyphen -53
+KPX X o -42
+KPX X u -32
+KPX X y -42
+KPX Y A -78
+KPX Y AE -93
+KPX Y Aacute -78
+KPX Y Acircumflex -78
+KPX Y Adieresis -78
+KPX Y Agrave -78
+KPX Y Aring -78
+KPX Y Atilde -78
+KPX Y C -44
+KPX Y G -44
+KPX Y O -44
+KPX Y Oacute -44
+KPX Y Ocircumflex -44
+KPX Y Odieresis -44
+KPX Y Ograve -44
+KPX Y Oslash -41
+KPX Y Otilde -44
+KPX Y S -20
+KPX Y T 34
+KPX Y a -64
+KPX Y ae -66
+KPX Y colon -61
+KPX Y comma -75
+KPX Y e -67
+KPX Y g -63
+KPX Y guillemotleft -62
+KPX Y guilsinglleft -62
+KPX Y hyphen -66
+KPX Y i 6
+KPX Y o -67
+KPX Y oslash -64
+KPX Y p -41
+KPX Y period -75
+KPX Y semicolon -61
+KPX Y u -46
+KPX Y v -18
+KPX Z v -11
+KPX Z y -13
+KPX a j 9
+KPX a quoteright 11
+KPX a v 0
+KPX a w -4
+KPX a y -3
+KPX aacute v 0
+KPX aacute w -4
+KPX aacute y -3
+KPX adieresis v 0
+KPX adieresis w -4
+KPX adieresis y -3
+KPX ae v -25
+KPX ae w -24
+KPX ae y -29
+KPX agrave v 0
+KPX agrave w -4
+KPX agrave y -3
+KPX aring v 0
+KPX aring w -4
+KPX aring y -3
+KPX b v -19
+KPX b w -17
+KPX b y -22
+KPX c h -7
+KPX c k -7
+KPX comma one -80
+KPX comma quotedblright -27
+KPX comma quoteright -28
+KPX e quoteright -20
+KPX e t -2
+KPX e v -27
+KPX e w -25
+KPX e x -26
+KPX e y -31
+KPX eacute v -27
+KPX eacute w -25
+KPX eacute y -31
+KPX ecircumflex v -27
+KPX ecircumflex w -25
+KPX ecircumflex y -31
+KPX eight four 16
+KPX eight one -75
+KPX eight seven -43
+KPX f a -6
+KPX f aacute -6
+KPX f adieresis -6
+KPX f ae -8
+KPX f aring -6
+KPX f e -9
+KPX f eacute -9
+KPX f f 13
+KPX f i 7
+KPX f j -3
+KPX f l 7
+KPX f o -9
+KPX f oacute -9
+KPX f odieresis -9
+KPX f oe -8
+KPX f oslash -6
+KPX f quoteright 16
+KPX f s 1
+KPX f t 14
+KPX five four 14
+KPX five one -84
+KPX five seven -53
+KPX four four 19
+KPX four one -76
+KPX four seven -44
+KPX g a 9
+KPX g adieresis 9
+KPX g ae 8
+KPX g aring 9
+KPX g e 7
+KPX g eacute 7
+KPX g l 16
+KPX g oacute 7
+KPX g odieresis 7
+KPX g r 16
+KPX guillemotright A -16
+KPX guillemotright AE -54
+KPX guillemotright Aacute -16
+KPX guillemotright Adieresis -16
+KPX guillemotright Aring -16
+KPX guillemotright T -27
+KPX guillemotright V -48
+KPX guillemotright W -26
+KPX guillemotright Y -66
+KPX guilsinglright A -12
+KPX guilsinglright AE -50
+KPX guilsinglright Aacute -12
+KPX guilsinglright Adieresis -12
+KPX guilsinglright Aring -12
+KPX guilsinglright T -24
+KPX guilsinglright V -45
+KPX guilsinglright W -22
+KPX guilsinglright Y -62
+KPX h quoteright -9
+KPX h y -21
+KPX hyphen A -15
+KPX hyphen AE -53
+KPX hyphen Aacute -15
+KPX hyphen Adieresis -15
+KPX hyphen Aring -15
+KPX hyphen T -26
+KPX hyphen V -47
+KPX hyphen W -24
+KPX hyphen Y -68
+KPX i T 0
+KPX i j 5
+KPX k a -45
+KPX k aacute -45
+KPX k adieresis -45
+KPX k ae -47
+KPX k aring -45
+KPX k comma -7
+KPX k e -48
+KPX k eacute -48
+KPX k g -45
+KPX k hyphen -71
+KPX k o -48
+KPX k oacute -48
+KPX k odieresis -48
+KPX k period -7
+KPX k s -32
+KPX k u -37
+KPX k udieresis -30
+KPX l v -2
+KPX l y -5
+KPX m p 11
+KPX m v -19
+KPX m w -18
+KPX m y -21
+KPX n T -29
+KPX n p 12
+KPX n quoteright -8
+KPX n v -18
+KPX n w -17
+KPX n y -20
+KPX nine four -30
+KPX nine one -69
+KPX nine seven -25
+KPX o T -33
+KPX o quoteright -16
+KPX o t 1
+KPX o v -22
+KPX o w -21
+KPX o x -22
+KPX o y -26
+KPX oacute v -22
+KPX oacute w -21
+KPX oacute y -26
+KPX ocircumflex t 1
+KPX odieresis t 1
+KPX odieresis v -22
+KPX odieresis w -21
+KPX odieresis x -22
+KPX odieresis y -26
+KPX ograve v -22
+KPX ograve w -21
+KPX ograve y -26
+KPX one comma -45
+KPX one eight -43
+KPX one five -39
+KPX one four -52
+KPX one nine -47
+KPX one one -120
+KPX one period -45
+KPX one seven -88
+KPX one six -49
+KPX one three -51
+KPX one two -45
+KPX one zero -28
+KPX p t 2
+KPX p y -25
+KPX period one -80
+KPX period quotedblright -27
+KPX period quoteright -28
+KPX q c 7
+KPX q u 14
+KPX quotedblbase A 20
+KPX quotedblbase AE 3
+KPX quotedblbase T -27
+KPX quotedblbase V -80
+KPX quotedblbase W -50
+KPX quotedblbase Y -78
+KPX quotedblleft A -73
+KPX quotedblleft AE -145
+KPX quotedblleft Aacute -73
+KPX quotedblleft Adieresis -73
+KPX quotedblleft Aring -73
+KPX quotedblleft T 9
+KPX quotedblleft V 9
+KPX quotedblleft W 17
+KPX quotedblleft Y 0
+KPX quotedblright A -76
+KPX quotedblright AE -149
+KPX quotedblright Aacute -76
+KPX quotedblright Adieresis -76
+KPX quotedblright Aring -76
+KPX quotedblright T 10
+KPX quotedblright V 7
+KPX quotedblright W 15
+KPX quotedblright Y -1
+KPX quoteleft A -76
+KPX quoteleft AE -148
+KPX quoteleft Aacute -76
+KPX quoteleft Adieresis -76
+KPX quoteleft Aring -76
+KPX quoteleft T 7
+KPX quoteleft V 6
+KPX quoteleft W 15
+KPX quoteleft Y -1
+KPX quoteright A -79
+KPX quoteright AE -151
+KPX quoteright Aacute -79
+KPX quoteright Adieresis -79
+KPX quoteright Aring -79
+KPX quoteright comma -38
+KPX quoteright d -24
+KPX quoteright o -31
+KPX quoteright period -38
+KPX quoteright r -1
+KPX quoteright s -9
+KPX quoteright t 12
+KPX quoteright v 6
+KPX quoteright w 4
+KPX quoteright y 4
+KPX r a -18
+KPX r aacute -18
+KPX r acircumflex -18
+KPX r adieresis -18
+KPX r ae -20
+KPX r agrave -18
+KPX r aring -18
+KPX r c -20
+KPX r ccedilla -17
+KPX r colon -12
+KPX r comma -30
+KPX r d -17
+KPX r e -21
+KPX r eacute -21
+KPX r ecircumflex -21
+KPX r egrave -21
+KPX r f 13
+KPX r g -14
+KPX r h 0
+KPX r hyphen -30
+KPX r i 0
+KPX r j -16
+KPX r k 0
+KPX r l 0
+KPX r m 0
+KPX r n 0
+KPX r o -22
+KPX r oacute -22
+KPX r ocircumflex -22
+KPX r odieresis -22
+KPX r oe -20
+KPX r ograve -22
+KPX r oslash -21
+KPX r p 0
+KPX r period -30
+KPX r q -16
+KPX r quoteright 19
+KPX r r 0
+KPX r s -3
+KPX r semicolon -12
+KPX r t 14
+KPX r u -5
+KPX r v 17
+KPX r w 12
+KPX r x 3
+KPX r y 14
+KPX r z -5
+KPX s quoteright -4
+KPX s t 8
+KPX seven colon -58
+KPX seven comma -96
+KPX seven eight -39
+KPX seven five -36
+KPX seven four -65
+KPX seven one -71
+KPX seven period -96
+KPX seven seven -27
+KPX seven six -56
+KPX seven three -35
+KPX seven two -22
+KPX six four 20
+KPX six one -83
+KPX six seven -54
+KPX t S 8
+KPX t a -8
+KPX t aacute -8
+KPX t adieresis -8
+KPX t ae -9
+KPX t aring -8
+KPX t colon -6
+KPX t e -10
+KPX t eacute -10
+KPX t h 10
+KPX t o -10
+KPX t oacute -10
+KPX t odieresis -10
+KPX t quoteright 20
+KPX t semicolon -6
+KPX three four 13
+KPX three one -79
+KPX three seven -51
+KPX two four 13
+KPX two one -71
+KPX two seven -28
+KPX u quoteright 8
+KPX v a -27
+KPX v aacute -27
+KPX v acircumflex -27
+KPX v adieresis -27
+KPX v ae -28
+KPX v agrave -27
+KPX v aring -27
+KPX v atilde -27
+KPX v c -30
+KPX v colon -20
+KPX v comma -60
+KPX v e -30
+KPX v eacute -30
+KPX v ecircumflex -30
+KPX v egrave -30
+KPX v g -26
+KPX v hyphen -22
+KPX v l -5
+KPX v o -30
+KPX v oacute -30
+KPX v odieresis -30
+KPX v ograve -30
+KPX v oslash -27
+KPX v period -60
+KPX v s -19
+KPX v semicolon -20
+KPX w a -25
+KPX w aacute -25
+KPX w acircumflex -25
+KPX w adieresis -25
+KPX w ae -27
+KPX w agrave -25
+KPX w aring -25
+KPX w atilde -25
+KPX w c -28
+KPX w colon -23
+KPX w comma -54
+KPX w e -28
+KPX w eacute -28
+KPX w ecircumflex -28
+KPX w egrave -28
+KPX w g -24
+KPX w hyphen -21
+KPX w l -9
+KPX w o -28
+KPX w oacute -28
+KPX w odieresis -28
+KPX w ograve -28
+KPX w oslash -26
+KPX w period -54
+KPX w s -18
+KPX w semicolon -23
+KPX x a -27
+KPX x c -30
+KPX x e -30
+KPX x eacute -30
+KPX x o -30
+KPX x q -28
+KPX y a -35
+KPX y aacute -35
+KPX y acircumflex -35
+KPX y adieresis -35
+KPX y ae -36
+KPX y agrave -35
+KPX y aring -35
+KPX y atilde -35
+KPX y c -37
+KPX y colon -23
+KPX y comma -70
+KPX y e -38
+KPX y eacute -38
+KPX y ecircumflex -38
+KPX y egrave -38
+KPX y g -34
+KPX y hyphen -29
+KPX y l -7
+KPX y o -38
+KPX y oacute -38
+KPX y odieresis -38
+KPX y ograve -38
+KPX y oslash -34
+KPX y period -69
+KPX y s -26
+KPX y semicolon -23
+KPX zero four 17
+KPX zero one -61
+KPX zero seven -27
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/a010015l.pfb b/Master/xemtex/gsfonts/a010015l.pfb
new file mode 100644
index 00000000000..b301fcdcb96
--- /dev/null
+++ b/Master/xemtex/gsfonts/a010015l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/a010015l.pfm b/Master/xemtex/gsfonts/a010015l.pfm
new file mode 100644
index 00000000000..0a3f4e7c275
--- /dev/null
+++ b/Master/xemtex/gsfonts/a010015l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/a010033l.afm b/Master/xemtex/gsfonts/a010033l.afm
new file mode 100644
index 00000000000..d628de345ab
--- /dev/null
+++ b/Master/xemtex/gsfonts/a010033l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName URWGothicL-BookObli
+FullName URW Gothic L Book Oblique
+FamilyName URW Gothic L
+Weight Book
+ItalicAngle -10.0
+IsFixedPitch false
+UnderlinePosition -96
+UnderlineThickness 58
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -115 -232 1275 972
+CapHeight 739
+XHeight 547
+Descender -192
+Ascender 739
+StartCharMetrics 316
+C 32 ; WX 277 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 295 ; N exclam ; B 111 0 322 739 ;
+C 34 ; WX 309 ; N quotedbl ; B 169 513 374 739 ;
+C 35 ; WX 554 ; N numbersign ; B 51 0 640 739 ;
+C 36 ; WX 554 ; N dollar ; B 112 -56 575 810 ;
+C 37 ; WX 775 ; N percent ; B 117 -13 785 749 ;
+C 38 ; WX 757 ; N ampersand ; B 93 -13 774 752 ;
+C 39 ; WX 351 ; N quoteright ; B 192 547 390 739 ;
+C 40 ; WX 369 ; N parenleft ; B 106 -125 472 739 ;
+C 41 ; WX 369 ; N parenright ; B 10 -125 377 739 ;
+C 42 ; WX 425 ; N asterisk ; B 172 449 477 752 ;
+C 43 ; WX 606 ; N plus ; B 100 55 618 550 ;
+C 44 ; WX 277 ; N comma ; B 79 -67 276 126 ;
+C 45 ; WX 332 ; N hyphen ; B 80 233 364 296 ;
+C 46 ; WX 277 ; N period ; B 101 0 198 126 ;
+C 47 ; WX 437 ; N slash ; B 16 -128 534 739 ;
+C 48 ; WX 554 ; N zero ; B 71 -13 621 752 ;
+C 49 ; WX 554 ; N one ; B 280 0 491 739 ;
+C 50 ; WX 554 ; N two ; B 33 0 607 752 ;
+C 51 ; WX 554 ; N three ; B 71 -13 564 752 ;
+C 52 ; WX 554 ; N four ; B 37 0 597 739 ;
+C 53 ; WX 554 ; N five ; B 64 -13 604 739 ;
+C 54 ; WX 554 ; N six ; B 66 -13 579 739 ;
+C 55 ; WX 554 ; N seven ; B 108 0 627 739 ;
+C 56 ; WX 554 ; N eight ; B 78 -13 580 752 ;
+C 57 ; WX 554 ; N nine ; B 112 0 625 752 ;
+C 58 ; WX 277 ; N colon ; B 101 0 270 507 ;
+C 59 ; WX 277 ; N semicolon ; B 29 -67 298 507 ;
+C 60 ; WX 606 ; N less ; B 99 37 663 565 ;
+C 61 ; WX 606 ; N equal ; B 82 164 636 436 ;
+C 62 ; WX 606 ; N greater ; B 55 37 619 565 ;
+C 63 ; WX 591 ; N question ; B 159 0 627 752 ;
+C 64 ; WX 867 ; N at ; B 133 -13 883 752 ;
+C 65 ; WX 740 ; N A ; B 11 0 729 739 ;
+C 66 ; WX 574 ; N B ; B 76 0 607 739 ;
+C 67 ; WX 813 ; N C ; B 106 -13 869 752 ;
+C 68 ; WX 744 ; N D ; B 76 0 774 739 ;
+C 69 ; WX 536 ; N E ; B 76 0 617 739 ;
+C 70 ; WX 485 ; N F ; B 76 0 588 739 ;
+C 71 ; WX 872 ; N G ; B 107 -13 894 752 ;
+C 72 ; WX 683 ; N H ; B 76 0 744 739 ;
+C 73 ; WX 226 ; N I ; B 76 0 287 739 ;
+C 74 ; WX 482 ; N J ; B 41 -14 543 739 ;
+C 75 ; WX 591 ; N K ; B 76 0 722 739 ;
+C 76 ; WX 462 ; N L ; B 76 0 468 739 ;
+C 77 ; WX 919 ; N M ; B 76 0 980 739 ;
+C 78 ; WX 740 ; N N ; B 76 0 801 739 ;
+C 79 ; WX 869 ; N O ; B 106 -13 900 752 ;
+C 80 ; WX 592 ; N P ; B 76 0 665 739 ;
+C 81 ; WX 871 ; N Q ; B 105 -13 913 752 ;
+C 82 ; WX 607 ; N R ; B 76 0 673 739 ;
+C 83 ; WX 498 ; N S ; B 56 -13 564 752 ;
+C 84 ; WX 426 ; N T ; B 132 0 556 739 ;
+C 85 ; WX 655 ; N U ; B 119 -13 716 739 ;
+C 86 ; WX 702 ; N V ; B 147 0 829 739 ;
+C 87 ; WX 960 ; N W ; B 147 0 1087 739 ;
+C 88 ; WX 609 ; N X ; B 8 0 723 739 ;
+C 89 ; WX 592 ; N Y ; B 139 0 727 739 ;
+C 90 ; WX 480 ; N Z ; B 17 0 600 739 ;
+C 91 ; WX 351 ; N bracketleft ; B 132 -125 450 739 ;
+C 92 ; WX 605 ; N backslash ; B 221 0 464 739 ;
+C 93 ; WX 351 ; N bracketright ; B 14 -125 332 739 ;
+C 94 ; WX 606 ; N asciicircum ; B 51 180 621 739 ;
+C 95 ; WX 500 ; N underscore ; B -23 -125 488 -67 ;
+C 96 ; WX 351 ; N quoteleft ; B 235 547 361 739 ;
+C 97 ; WX 683 ; N a ; B 88 -13 721 560 ;
+C 98 ; WX 682 ; N b ; B 63 -13 696 739 ;
+C 99 ; WX 647 ; N c ; B 88 -13 679 560 ;
+C 100 ; WX 685 ; N d ; B 88 -13 759 739 ;
+C 101 ; WX 650 ; N e ; B 88 -13 665 560 ;
+C 102 ; WX 314 ; N f ; B 101 0 447 739 ;
+C 103 ; WX 673 ; N g ; B 60 -215 711 560 ;
+C 104 ; WX 610 ; N h ; B 63 0 609 739 ;
+C 105 ; WX 200 ; N i ; B 63 0 274 739 ;
+C 106 ; WX 203 ; N j ; B -81 -192 277 739 ;
+C 107 ; WX 502 ; N k ; B 63 0 584 739 ;
+C 108 ; WX 200 ; N l ; B 63 0 274 739 ;
+C 109 ; WX 938 ; N m ; B 63 0 941 560 ;
+C 110 ; WX 610 ; N n ; B 63 0 609 560 ;
+C 111 ; WX 655 ; N o ; B 87 -13 669 560 ;
+C 112 ; WX 682 ; N p ; B 27 -192 695 560 ;
+C 113 ; WX 682 ; N q ; B 87 -192 720 560 ;
+C 114 ; WX 301 ; N r ; B 63 0 396 560 ;
+C 115 ; WX 388 ; N s ; B 43 -13 425 560 ;
+C 116 ; WX 339 ; N t ; B 101 0 428 739 ;
+C 117 ; WX 608 ; N u ; B 99 -13 646 547 ;
+C 118 ; WX 554 ; N v ; B 109 0 647 547 ;
+C 119 ; WX 831 ; N w ; B 108 0 925 547 ;
+C 120 ; WX 480 ; N x ; B 8 0 573 547 ;
+C 121 ; WX 536 ; N y ; B 97 -192 628 547 ;
+C 122 ; WX 425 ; N z ; B 10 0 497 547 ;
+C 123 ; WX 351 ; N braceleft ; B 94 -126 408 739 ;
+C 124 ; WX 672 ; N bar ; B 304 0 505 739 ;
+C 125 ; WX 351 ; N braceright ; B 14 -127 326 739 ;
+C 126 ; WX 606 ; N asciitilde ; B 99 210 619 390 ;
+C 161 ; WX 295 ; N exclamdown ; B 75 -192 286 547 ;
+C 162 ; WX 554 ; N cent ; B 113 62 595 707 ;
+C 163 ; WX 554 ; N sterling ; B 58 0 655 752 ;
+C 164 ; WX 166 ; N fraction ; B -115 0 418 739 ;
+C 165 ; WX 554 ; N yen ; B 97 0 726 739 ;
+C 166 ; WX 554 ; N florin ; B -21 -153 685 818 ;
+C 167 ; WX 615 ; N section ; B 114 -141 596 752 ;
+C 168 ; WX 554 ; N currency ; B 51 50 615 554 ;
+C 169 ; WX 198 ; N quotesingle ; B 169 513 261 739 ;
+C 170 ; WX 502 ; N quotedblleft ; B 233 547 507 739 ;
+C 171 ; WX 425 ; N guillemotleft ; B 96 99 472 499 ;
+C 172 ; WX 251 ; N guilsinglleft ; B 96 99 298 499 ;
+C 173 ; WX 251 ; N guilsinglright ; B 65 99 267 499 ;
+C 174 ; WX 487 ; N fi ; B 98 0 561 739 ;
+C 175 ; WX 485 ; N fl ; B 98 0 559 739 ;
+C 177 ; WX 500 ; N endash ; B 49 233 562 296 ;
+C 178 ; WX 553 ; N dagger ; B 146 -133 594 739 ;
+C 179 ; WX 553 ; N daggerdbl ; B 121 -133 598 739 ;
+C 180 ; WX 277 ; N periodcentered ; B 145 229 242 355 ;
+C 182 ; WX 564 ; N paragraph ; B 135 -133 628 739 ;
+C 183 ; WX 606 ; N bullet ; B 171 113 547 489 ;
+C 184 ; WX 354 ; N quotesinglbase ; B 77 -67 274 126 ;
+C 185 ; WX 502 ; N quotedblbase ; B 77 -66 421 126 ;
+C 186 ; WX 484 ; N quotedblright ; B 188 547 530 739 ;
+C 187 ; WX 425 ; N guillemotright ; B 65 99 441 499 ;
+C 188 ; WX 1000 ; N ellipsis ; B 130 0 893 126 ;
+C 189 ; WX 1174 ; N perthousand ; B 117 -13 1184 749 ;
+C 191 ; WX 591 ; N questiondown ; B 64 -205 532 547 ;
+C 193 ; WX 378 ; N grave ; B 207 610 428 778 ;
+C 194 ; WX 375 ; N acute ; B 198 610 436 782 ;
+C 195 ; WX 502 ; N circumflex ; B 188 623 542 749 ;
+C 196 ; WX 439 ; N tilde ; B 200 633 486 734 ;
+C 197 ; WX 485 ; N macron ; B 188 651 537 713 ;
+C 198 ; WX 453 ; N breve ; B 207 626 511 743 ;
+C 199 ; WX 222 ; N dotaccent ; B 188 623 285 749 ;
+C 200 ; WX 369 ; N dieresis ; B 188 623 432 749 ;
+C 202 ; WX 332 ; N ring ; B 203 606 390 790 ;
+C 203 ; WX 324 ; N cedilla ; B 46 -227 228 0 ;
+C 205 ; WX 552 ; N hungarumlaut ; B 197 608 615 780 ;
+C 206 ; WX 302 ; N ogonek ; B 53 -195 203 0 ;
+C 207 ; WX 502 ; N caron ; B 211 623 565 749 ;
+C 208 ; WX 1000 ; N emdash ; B 49 233 1062 296 ;
+C 225 ; WX 992 ; N AE ; B 11 0 1073 739 ;
+C 227 ; WX 369 ; N ordfeminine ; B 91 319 477 745 ;
+C 232 ; WX 517 ; N Lslash ; B 70 0 514 739 ;
+C 233 ; WX 868 ; N Oslash ; B 72 -83 925 821 ;
+C 234 ; WX 1194 ; N OE ; B 106 -13 1275 752 ;
+C 235 ; WX 369 ; N ordmasculine ; B 92 319 450 745 ;
+C 241 ; WX 1157 ; N ae ; B 88 -13 1172 560 ;
+C 245 ; WX 200 ; N dotlessi ; B 63 0 238 547 ;
+C 248 ; WX 300 ; N lslash ; B 94 0 370 739 ;
+C 249 ; WX 653 ; N oslash ; B 76 -38 687 593 ;
+C 250 ; WX 1137 ; N oe ; B 88 -13 1153 560 ;
+C 251 ; WX 554 ; N germandbls ; B 59 -13 576 752 ;
+C -1 ; WX 655 ; N Udieresis ; B 119 -13 716 931 ;
+C -1 ; WX 655 ; N Uacute ; B 119 -13 716 964 ;
+C -1 ; WX 498 ; N Scedilla ; B 56 -227 564 752 ;
+C -1 ; WX 426 ; N Tcaron ; B 132 0 560 931 ;
+C -1 ; WX 498 ; N Scaron ; B 56 -13 599 931 ;
+C -1 ; WX 607 ; N Rcaron ; B 76 0 673 931 ;
+C -1 ; WX 607 ; N Racute ; B 76 0 673 964 ;
+C -1 ; WX 498 ; N Sacute ; B 56 -13 564 964 ;
+C -1 ; WX 869 ; N Otilde ; B 106 -13 900 916 ;
+C -1 ; WX 608 ; N ucircumflex ; B 99 -13 646 749 ;
+C -1 ; WX 869 ; N Ohungarumlaut ; B 106 -13 900 962 ;
+C -1 ; WX 655 ; N Uhungarumlaut ; B 119 -13 716 962 ;
+C -1 ; WX 592 ; N Yacute ; B 139 0 727 964 ;
+C -1 ; WX 790 ; N Eth ; B 93 0 820 739 ;
+C -1 ; WX 790 ; N Dcroat ; B 93 0 820 739 ;
+C -1 ; WX 480 ; N Zacute ; B 17 0 600 964 ;
+C -1 ; WX 655 ; N Uring ; B 119 -13 716 972 ;
+C -1 ; WX 673 ; N gbreve ; B 60 -215 711 743 ;
+C -1 ; WX 650 ; N eogonek ; B 88 -195 665 560 ;
+C -1 ; WX 650 ; N edotaccent ; B 88 -13 665 749 ;
+C -1 ; WX 650 ; N ecaron ; B 88 -13 665 749 ;
+C -1 ; WX 655 ; N Ugrave ; B 119 -13 716 960 ;
+C -1 ; WX 592 ; N Thorn ; B 76 0 637 739 ;
+C -1 ; WX 650 ; N eacute ; B 88 -13 665 782 ;
+C -1 ; WX 650 ; N edieresis ; B 88 -13 665 749 ;
+C -1 ; WX 714 ; N dcaron ; B 88 -13 894 739 ;
+C -1 ; WX 647 ; N ccedilla ; B 88 -227 679 560 ;
+C -1 ; WX 647 ; N ccaron ; B 88 -13 679 749 ;
+C -1 ; WX 647 ; N cacute ; B 88 -13 679 782 ;
+C -1 ; WX 683 ; N aogonek ; B 88 -195 721 560 ;
+C -1 ; WX 683 ; N aring ; B 88 -13 721 790 ;
+C -1 ; WX 683 ; N atilde ; B 88 -13 721 734 ;
+C -1 ; WX 683 ; N abreve ; B 88 -13 721 743 ;
+C -1 ; WX 650 ; N egrave ; B 88 -13 665 778 ;
+C -1 ; WX 683 ; N agrave ; B 88 -13 721 778 ;
+C -1 ; WX 683 ; N aacute ; B 88 -13 721 782 ;
+C -1 ; WX 683 ; N adieresis ; B 88 -13 721 749 ;
+C -1 ; WX 655 ; N Uogonek ; B 119 -195 716 739 ;
+C -1 ; WX 608 ; N ugrave ; B 99 -13 646 778 ;
+C -1 ; WX 608 ; N uacute ; B 99 -13 646 782 ;
+C -1 ; WX 608 ; N udieresis ; B 99 -13 646 749 ;
+C -1 ; WX 339 ; N tcaron ; B 101 0 501 739 ;
+C -1 ; WX 388 ; N scommaaccent ; B 43 -232 425 560 ;
+C -1 ; WX 480 ; N Zcaron ; B 17 0 600 931 ;
+C -1 ; WX 650 ; N ecircumflex ; B 88 -13 665 749 ;
+C -1 ; WX 655 ; N Ucircumflex ; B 119 -13 716 931 ;
+C -1 ; WX 683 ; N acircumflex ; B 88 -13 721 749 ;
+C -1 ; WX 480 ; N Zdotaccent ; B 17 0 600 931 ;
+C -1 ; WX 388 ; N scaron ; B 43 -13 508 749 ;
+C -1 ; WX 740 ; N Amacron ; B 11 0 729 895 ;
+C -1 ; WX 388 ; N sacute ; B 43 -13 443 782 ;
+C -1 ; WX 426 ; N Tcommaaccent ; B 104 -232 556 739 ;
+C -1 ; WX 592 ; N Ydieresis ; B 139 0 727 931 ;
+C -1 ; WX 682 ; N thorn ; B 27 -192 695 739 ;
+C -1 ; WX 536 ; N Emacron ; B 76 0 617 895 ;
+C -1 ; WX 869 ; N Ograve ; B 106 -13 900 960 ;
+C -1 ; WX 869 ; N Oacute ; B 106 -13 900 964 ;
+C -1 ; WX 869 ; N Odieresis ; B 106 -13 900 931 ;
+C -1 ; WX 740 ; N Ntilde ; B 76 0 801 916 ;
+C -1 ; WX 740 ; N Ncaron ; B 76 0 801 931 ;
+C -1 ; WX 740 ; N Nacute ; B 76 0 801 964 ;
+C -1 ; WX 462 ; N Lcaron ; B 76 0 522 739 ;
+C -1 ; WX 462 ; N Lacute ; B 76 0 480 964 ;
+C -1 ; WX 226 ; N Idotaccent ; B 76 0 323 931 ;
+C -1 ; WX 301 ; N racute ; B 63 0 399 782 ;
+C -1 ; WX 226 ; N Icircumflex ; B 76 0 439 931 ;
+C -1 ; WX 655 ; N ohungarumlaut ; B 87 -13 669 780 ;
+C -1 ; WX 655 ; N otilde ; B 87 -13 669 734 ;
+C -1 ; WX 554 ; N Euro ; B -32 -13 638 752 ;
+C -1 ; WX 655 ; N ocircumflex ; B 87 -13 669 749 ;
+C -1 ; WX 332 ; N onesuperior ; B 227 297 370 739 ;
+C -1 ; WX 332 ; N twosuperior ; B 67 297 435 747 ;
+C -1 ; WX 332 ; N threesuperior ; B 91 289 411 747 ;
+C -1 ; WX 226 ; N Igrave ; B 76 0 388 960 ;
+C -1 ; WX 226 ; N Iacute ; B 76 0 362 964 ;
+C -1 ; WX 226 ; N Imacron ; B 76 0 437 895 ;
+C -1 ; WX 226 ; N Iogonek ; B 4 -195 287 739 ;
+C -1 ; WX 226 ; N Idieresis ; B 76 0 396 931 ;
+C -1 ; WX 872 ; N Gbreve ; B 107 -13 894 925 ;
+C -1 ; WX 655 ; N Umacron ; B 119 -13 716 895 ;
+C -1 ; WX 591 ; N Kcommaaccent ; B 76 -232 722 739 ;
+C -1 ; WX 655 ; N ograve ; B 87 -13 669 778 ;
+C -1 ; WX 498 ; N Scommaaccent ; B 56 -232 564 752 ;
+C -1 ; WX 536 ; N Eogonek ; B 76 -195 617 739 ;
+C -1 ; WX 655 ; N oacute ; B 87 -13 669 782 ;
+C -1 ; WX 536 ; N Edotaccent ; B 76 0 617 931 ;
+C -1 ; WX 200 ; N iogonek ; B -9 -195 274 739 ;
+C -1 ; WX 673 ; N gcommaaccent ; B 60 -215 711 792 ;
+C -1 ; WX 655 ; N odieresis ; B 87 -13 669 749 ;
+C -1 ; WX 610 ; N ntilde ; B 63 0 609 734 ;
+C -1 ; WX 610 ; N ncaron ; B 63 0 619 749 ;
+C -1 ; WX 536 ; N Ecaron ; B 76 0 622 931 ;
+C -1 ; WX 536 ; N Ecircumflex ; B 76 0 617 931 ;
+C -1 ; WX 388 ; N scedilla ; B 43 -227 425 560 ;
+C -1 ; WX 301 ; N rcaron ; B 63 0 465 749 ;
+C -1 ; WX 536 ; N Egrave ; B 76 0 617 960 ;
+C -1 ; WX 536 ; N Eacute ; B 76 0 617 964 ;
+C -1 ; WX 872 ; N Gcommaaccent ; B 107 -232 894 752 ;
+C -1 ; WX 607 ; N Rcommaaccent ; B 76 -232 673 739 ;
+C -1 ; WX 536 ; N Edieresis ; B 76 0 617 931 ;
+C -1 ; WX 610 ; N nacute ; B 63 0 609 782 ;
+C -1 ; WX 608 ; N uogonek ; B 99 -195 646 547 ;
+C -1 ; WX 608 ; N umacron ; B 99 -13 646 713 ;
+C -1 ; WX 744 ; N Dcaron ; B 76 0 774 931 ;
+C -1 ; WX 231 ; N lcaron ; B 63 0 412 739 ;
+C -1 ; WX 813 ; N Ccaron ; B 106 -13 869 931 ;
+C -1 ; WX 813 ; N Cacute ; B 106 -13 869 964 ;
+C -1 ; WX 813 ; N Ccedilla ; B 106 -227 869 752 ;
+C -1 ; WX 400 ; N degree ; B 157 381 462 681 ;
+C -1 ; WX 740 ; N Aogonek ; B 11 -195 733 739 ;
+C -1 ; WX 606 ; N minus ; B 100 267 618 341 ;
+C -1 ; WX 606 ; N multiply ; B 70 29 648 570 ;
+C -1 ; WX 606 ; N divide ; B 100 112 618 496 ;
+C -1 ; WX 740 ; N Aring ; B 11 0 729 972 ;
+C -1 ; WX 1000 ; N trademark ; B 189 338 1075 739 ;
+C -1 ; WX 301 ; N rcommaaccent ; B 0 -232 396 560 ;
+C -1 ; WX 200 ; N lacute ; B 63 0 349 964 ;
+C -1 ; WX 655 ; N omacron ; B 87 -13 669 713 ;
+C -1 ; WX 740 ; N Atilde ; B 11 0 729 916 ;
+C -1 ; WX 200 ; N icircumflex ; B 37 0 391 749 ;
+C -1 ; WX 200 ; N igrave ; B 63 0 339 778 ;
+C -1 ; WX 610 ; N ncommaaccent ; B 63 -232 609 560 ;
+C -1 ; WX 200 ; N lcommaaccent ; B -9 -232 274 739 ;
+C -1 ; WX 606 ; N plusminus ; B 51 0 628 610 ;
+C -1 ; WX 831 ; N onehalf ; B 207 0 874 739 ;
+C -1 ; WX 831 ; N onequarter ; B 217 0 841 739 ;
+C -1 ; WX 831 ; N threequarters ; B 91 0 841 747 ;
+C -1 ; WX 200 ; N iacute ; B 63 0 349 782 ;
+C -1 ; WX 740 ; N Abreve ; B 11 0 729 925 ;
+C -1 ; WX 502 ; N kcommaaccent ; B 63 -232 584 739 ;
+C -1 ; WX 869 ; N Omacron ; B 106 -13 900 895 ;
+C -1 ; WX 200 ; N imacron ; B 46 0 395 713 ;
+C -1 ; WX 650 ; N emacron ; B 88 -13 665 713 ;
+C -1 ; WX 683 ; N amacron ; B 88 -13 721 713 ;
+C -1 ; WX 339 ; N tcommaaccent ; B 40 -232 428 739 ;
+C -1 ; WX 536 ; N ydieresis ; B 97 -192 628 749 ;
+C -1 ; WX 425 ; N zdotaccent ; B 10 0 497 749 ;
+C -1 ; WX 425 ; N zcaron ; B 10 0 527 749 ;
+C -1 ; WX 425 ; N zacute ; B 10 0 497 782 ;
+C -1 ; WX 536 ; N yacute ; B 97 -192 628 782 ;
+C -1 ; WX 608 ; N uhungarumlaut ; B 99 -13 646 780 ;
+C -1 ; WX 655 ; N eth ; B 87 -13 673 756 ;
+C -1 ; WX 608 ; N uring ; B 99 -13 646 790 ;
+C -1 ; WX 869 ; N Ocircumflex ; B 106 -13 900 931 ;
+C -1 ; WX 351 ; N commaaccent ; B 66 -232 224 -53 ;
+C -1 ; WX 747 ; N copyright ; B 53 -13 830 752 ;
+C -1 ; WX 747 ; N registered ; B 53 -13 830 752 ;
+C -1 ; WX 740 ; N Acircumflex ; B 11 0 729 931 ;
+C -1 ; WX 200 ; N idieresis ; B 63 0 348 749 ;
+C -1 ; WX 494 ; N lozenge ; B 88 0 535 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 606 ; N notequal ; B 82 42 636 558 ;
+C -1 ; WX 549 ; N radical ; B 93 -35 683 913 ;
+C -1 ; WX 740 ; N Agrave ; B 11 0 729 960 ;
+C -1 ; WX 740 ; N Aacute ; B 11 0 729 964 ;
+C -1 ; WX 549 ; N lessequal ; B 26 0 650 646 ;
+C -1 ; WX 549 ; N greaterequal ; B 26 0 606 646 ;
+C -1 ; WX 606 ; N logicalnot ; B 118 148 636 436 ;
+C -1 ; WX 713 ; N summation ; B -9 -123 761 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 56 -10 545 753 ;
+C -1 ; WX 740 ; N Ncommaaccent ; B 76 -232 801 739 ;
+C -1 ; WX 685 ; N dcroat ; B 88 -13 808 739 ;
+C -1 ; WX 672 ; N brokenbar ; B 304 0 505 739 ;
+C -1 ; WX 462 ; N Lcommaaccent ; B 76 -232 468 739 ;
+C -1 ; WX 740 ; N Adieresis ; B 11 0 729 931 ;
+C -1 ; WX 608 ; N mu ; B 27 -192 646 547 ;
+C -1 ; WX 277 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -38
+KPX A Ccedilla -38
+KPX A G -39
+KPX A O -39
+KPX A Odieresis -39
+KPX A Q -39
+KPX A T -56
+KPX A U -32
+KPX A Uacute -32
+KPX A Ucircumflex -32
+KPX A Udieresis -32
+KPX A Ugrave -32
+KPX A V -75
+KPX A W -50
+KPX A Y -80
+KPX A a -22
+KPX A b 0
+KPX A c -22
+KPX A ccedilla -23
+KPX A comma -8
+KPX A d -22
+KPX A e -22
+KPX A g -23
+KPX A guillemotleft -24
+KPX A guilsinglleft -24
+KPX A hyphen 8
+KPX A o -21
+KPX A period 10
+KPX A q -21
+KPX A quotedblright -93
+KPX A quoteright -95
+KPX A t -31
+KPX A u -15
+KPX A v -42
+KPX A w -36
+KPX A y -39
+KPX Aacute C -38
+KPX Aacute G -39
+KPX Aacute O -39
+KPX Aacute Q -39
+KPX Aacute T -56
+KPX Aacute U -32
+KPX Aacute V -75
+KPX Aacute W -50
+KPX Aacute Y -80
+KPX Aacute a -22
+KPX Aacute b 0
+KPX Aacute c -22
+KPX Aacute comma -8
+KPX Aacute d -22
+KPX Aacute e -22
+KPX Aacute g -23
+KPX Aacute guillemotleft -24
+KPX Aacute guilsinglleft -24
+KPX Aacute hyphen 8
+KPX Aacute o -21
+KPX Aacute period 10
+KPX Aacute q -21
+KPX Aacute quoteright -95
+KPX Aacute t -31
+KPX Aacute u -15
+KPX Aacute v -42
+KPX Aacute w -36
+KPX Aacute y -39
+KPX Acircumflex C -38
+KPX Acircumflex G -39
+KPX Acircumflex O -39
+KPX Acircumflex Q -39
+KPX Acircumflex T -56
+KPX Acircumflex U -32
+KPX Acircumflex V -75
+KPX Acircumflex W -50
+KPX Acircumflex Y -80
+KPX Acircumflex comma -8
+KPX Acircumflex period 10
+KPX Adieresis C -38
+KPX Adieresis G -39
+KPX Adieresis O -39
+KPX Adieresis Q -39
+KPX Adieresis T -56
+KPX Adieresis U -32
+KPX Adieresis V -75
+KPX Adieresis W -50
+KPX Adieresis Y -80
+KPX Adieresis a -22
+KPX Adieresis b 0
+KPX Adieresis c -22
+KPX Adieresis comma -8
+KPX Adieresis d -22
+KPX Adieresis g -23
+KPX Adieresis guillemotleft -24
+KPX Adieresis guilsinglleft -24
+KPX Adieresis hyphen 8
+KPX Adieresis o -21
+KPX Adieresis period 10
+KPX Adieresis q -21
+KPX Adieresis quotedblright -93
+KPX Adieresis quoteright -95
+KPX Adieresis t -31
+KPX Adieresis u -15
+KPX Adieresis v -42
+KPX Adieresis w -36
+KPX Adieresis y -39
+KPX Agrave C -38
+KPX Agrave G -39
+KPX Agrave O -39
+KPX Agrave Q -39
+KPX Agrave T -56
+KPX Agrave U -32
+KPX Agrave V -75
+KPX Agrave W -50
+KPX Agrave Y -80
+KPX Agrave comma -8
+KPX Agrave period 10
+KPX Aring C -38
+KPX Aring G -39
+KPX Aring O -39
+KPX Aring Q -39
+KPX Aring T -56
+KPX Aring U -32
+KPX Aring V -75
+KPX Aring W -50
+KPX Aring Y -80
+KPX Aring a -22
+KPX Aring b 0
+KPX Aring c -22
+KPX Aring comma -8
+KPX Aring d -22
+KPX Aring e -22
+KPX Aring g -23
+KPX Aring guillemotleft -24
+KPX Aring guilsinglleft -24
+KPX Aring hyphen 8
+KPX Aring o -21
+KPX Aring period 10
+KPX Aring q -21
+KPX Aring quotedblright -93
+KPX Aring quoteright -95
+KPX Aring t -31
+KPX Aring u -15
+KPX Aring v -42
+KPX Aring w -36
+KPX Aring y -39
+KPX Atilde C -38
+KPX Atilde G -39
+KPX Atilde O -39
+KPX Atilde Q -39
+KPX Atilde T -56
+KPX Atilde U -32
+KPX Atilde V -75
+KPX Atilde W -50
+KPX Atilde Y -80
+KPX Atilde comma -8
+KPX Atilde period 10
+KPX B A -14
+KPX B AE -26
+KPX B Aacute -14
+KPX B Acircumflex -14
+KPX B Adieresis -14
+KPX B Aring -14
+KPX B Atilde -14
+KPX B O 3
+KPX B OE 5
+KPX B Oacute 3
+KPX B Ocircumflex 3
+KPX B Odieresis 3
+KPX B Ograve 3
+KPX B Oslash 7
+KPX B V -24
+KPX B W -2
+KPX B Y -31
+KPX C A -27
+KPX C AE -49
+KPX C Aacute -27
+KPX C Adieresis -27
+KPX C Aring -27
+KPX C H -4
+KPX C K -4
+KPX C O -20
+KPX C Oacute -20
+KPX C Odieresis -20
+KPX Ccedilla A -30
+KPX D A -42
+KPX D Aacute -42
+KPX D Acircumflex -42
+KPX D Adieresis -42
+KPX D Agrave -42
+KPX D Aring -42
+KPX D Atilde -42
+KPX D J -11
+KPX D T -44
+KPX D V -38
+KPX D W -15
+KPX D X -33
+KPX D Y -46
+KPX F A -61
+KPX F Aacute -61
+KPX F Acircumflex -61
+KPX F Adieresis -61
+KPX F Agrave -61
+KPX F Aring -61
+KPX F Atilde -61
+KPX F J -60
+KPX F O -6
+KPX F Odieresis -6
+KPX F a -8
+KPX F aacute -8
+KPX F adieresis -8
+KPX F ae -8
+KPX F aring -8
+KPX F comma -101
+KPX F e -8
+KPX F eacute -8
+KPX F hyphen 16
+KPX F i -10
+KPX F j -11
+KPX F o -8
+KPX F oacute -8
+KPX F odieresis -8
+KPX F oe -8
+KPX F oslash -11
+KPX F period -83
+KPX F r -15
+KPX F u -15
+KPX G A -46
+KPX G AE -69
+KPX G Aacute -46
+KPX G Acircumflex -46
+KPX G Adieresis -46
+KPX G Agrave -46
+KPX G Aring -46
+KPX G Atilde -46
+KPX G T -49
+KPX G V -45
+KPX G W -22
+KPX G Y -53
+KPX J A -32
+KPX J AE -44
+KPX J Adieresis -32
+KPX J Aring -32
+KPX K C -40
+KPX K G -41
+KPX K O -41
+KPX K OE -40
+KPX K Oacute -41
+KPX K Odieresis -41
+KPX K S -21
+KPX K T 32
+KPX K a -49
+KPX K adieresis -49
+KPX K ae -49
+KPX K aring -49
+KPX K e -50
+KPX K hyphen -35
+KPX K o -49
+KPX K oacute -49
+KPX K odieresis -49
+KPX K u -41
+KPX K udieresis -41
+KPX K y -50
+KPX L A 28
+KPX L AE 27
+KPX L Aacute 28
+KPX L Adieresis 28
+KPX L Aring 28
+KPX L C -53
+KPX L Ccedilla -56
+KPX L G -56
+KPX L O -56
+KPX L Oacute -56
+KPX L Ocircumflex -56
+KPX L Odieresis -56
+KPX L Ograve -56
+KPX L Otilde -56
+KPX L S 0
+KPX L T -52
+KPX L U -33
+KPX L Udieresis -33
+KPX L V -108
+KPX L W -66
+KPX L Y -93
+KPX L hyphen -85
+KPX L quotedblright -117
+KPX L quoteright -119
+KPX L u -20
+KPX L udieresis -20
+KPX L y -66
+KPX N A -7
+KPX N AE -7
+KPX N Aacute -7
+KPX N Adieresis -7
+KPX N Aring -7
+KPX N C 2
+KPX N Ccedilla 3
+KPX N G 1
+KPX N O 0
+KPX N Oacute 0
+KPX N Odieresis 0
+KPX N a 0
+KPX N aacute 0
+KPX N adieresis 0
+KPX N ae 0
+KPX N aring 0
+KPX N comma -17
+KPX N e 0
+KPX N eacute 0
+KPX N o 0
+KPX N oacute 0
+KPX N odieresis 0
+KPX N oslash 1
+KPX N period 0
+KPX N u 8
+KPX N udieresis 8
+KPX O A -43
+KPX O AE -73
+KPX O Aacute -43
+KPX O Adieresis -43
+KPX O Aring -43
+KPX O T -44
+KPX O V -39
+KPX O W -16
+KPX O X -34
+KPX O Y -47
+KPX Oacute A -43
+KPX Oacute T -44
+KPX Oacute V -39
+KPX Oacute W -16
+KPX Oacute Y -47
+KPX Ocircumflex T -44
+KPX Ocircumflex V -39
+KPX Ocircumflex Y -47
+KPX Odieresis A -43
+KPX Odieresis T -44
+KPX Odieresis V -39
+KPX Odieresis W -16
+KPX Odieresis X -34
+KPX Odieresis Y -47
+KPX Ograve T -44
+KPX Ograve V -39
+KPX Ograve Y -47
+KPX Oslash A -42
+KPX Otilde T -44
+KPX Otilde V -39
+KPX Otilde Y -47
+KPX P A -65
+KPX P AE -112
+KPX P Aacute -65
+KPX P Adieresis -65
+KPX P Aring -65
+KPX P J -73
+KPX P a -22
+KPX P aacute -22
+KPX P adieresis -22
+KPX P ae -22
+KPX P aring -22
+KPX P comma -129
+KPX P e -21
+KPX P eacute -21
+KPX P hyphen -11
+KPX P o -22
+KPX P oacute -22
+KPX P odieresis -22
+KPX P oe -21
+KPX P oslash -27
+KPX P period -112
+KPX R C -3
+KPX R Ccedilla -2
+KPX R G -4
+KPX R O -4
+KPX R OE -3
+KPX R Oacute -4
+KPX R Odieresis -4
+KPX R T -13
+KPX R U 1
+KPX R Udieresis 1
+KPX R V -20
+KPX R W -5
+KPX R Y -23
+KPX R a -11
+KPX R aacute -11
+KPX R adieresis -11
+KPX R ae -11
+KPX R aring -11
+KPX R e -11
+KPX R eacute -11
+KPX R hyphen -3
+KPX R o -11
+KPX R oacute -11
+KPX R odieresis -11
+KPX R oe -11
+KPX R u 0
+KPX R uacute 0
+KPX R udieresis 0
+KPX R y 14
+KPX S A -11
+KPX S AE -23
+KPX S Aacute -11
+KPX S Adieresis -11
+KPX S Aring -11
+KPX S T -4
+KPX S V -16
+KPX S W 2
+KPX S Y -18
+KPX S t 13
+KPX T A -57
+KPX T AE -57
+KPX T Aacute -57
+KPX T Acircumflex -57
+KPX T Adieresis -57
+KPX T Agrave -57
+KPX T Aring -57
+KPX T Atilde -57
+KPX T C -43
+KPX T G -44
+KPX T J -54
+KPX T O -44
+KPX T OE -43
+KPX T Oacute -44
+KPX T Ocircumflex -44
+KPX T Odieresis -44
+KPX T Ograve -44
+KPX T Oslash -39
+KPX T Otilde -44
+KPX T S -5
+KPX T V 28
+KPX T W 28
+KPX T Y 32
+KPX T a -50
+KPX T ae -50
+KPX T c -51
+KPX T colon -58
+KPX T comma -67
+KPX T e -50
+KPX T g -49
+KPX T guillemotleft -44
+KPX T guilsinglleft -44
+KPX T hyphen -16
+KPX T i 3
+KPX T j 1
+KPX T o -50
+KPX T oslash -49
+KPX T period -50
+KPX T r -35
+KPX T s -33
+KPX T semicolon -68
+KPX T u -42
+KPX T v -55
+KPX T w -54
+KPX T y -55
+KPX U A -34
+KPX U AE -55
+KPX U Aacute -34
+KPX U Acircumflex -34
+KPX U Adieresis -34
+KPX U Aring -34
+KPX U Atilde -34
+KPX U comma -39
+KPX U m 6
+KPX U n 6
+KPX U p 6
+KPX U period -20
+KPX U r 5
+KPX Uacute A -34
+KPX Uacute comma -39
+KPX Uacute m 6
+KPX Uacute n 6
+KPX Uacute p 6
+KPX Uacute period -20
+KPX Uacute r 5
+KPX Ucircumflex A -34
+KPX Udieresis A -34
+KPX Udieresis b 5
+KPX Udieresis comma -39
+KPX Udieresis m 6
+KPX Udieresis n 6
+KPX Udieresis p 6
+KPX Udieresis period -20
+KPX Udieresis r 5
+KPX Ugrave A -34
+KPX V A -75
+KPX V AE -121
+KPX V Aacute -75
+KPX V Acircumflex -75
+KPX V Adieresis -75
+KPX V Agrave -75
+KPX V Aring -75
+KPX V Atilde -75
+KPX V C -41
+KPX V G -43
+KPX V O -43
+KPX V Oacute -43
+KPX V Ocircumflex -43
+KPX V Odieresis -43
+KPX V Ograve -43
+KPX V Oslash -38
+KPX V Otilde -43
+KPX V S -18
+KPX V T 30
+KPX V a -62
+KPX V ae -62
+KPX V colon -66
+KPX V comma -112
+KPX V e -62
+KPX V g -60
+KPX V guillemotleft -52
+KPX V guilsinglleft -52
+KPX V hyphen -30
+KPX V i 1
+KPX V o -62
+KPX V oslash -62
+KPX V period -95
+KPX V r -36
+KPX V semicolon -77
+KPX V u -38
+KPX V y -13
+KPX W A -51
+KPX W AE -79
+KPX W Aacute -51
+KPX W Acircumflex -51
+KPX W Adieresis -51
+KPX W Agrave -51
+KPX W Aring -51
+KPX W Atilde -51
+KPX W C -18
+KPX W G -20
+KPX W O -20
+KPX W Oacute -20
+KPX W Ocircumflex -20
+KPX W Odieresis -20
+KPX W Ograve -20
+KPX W Oslash -15
+KPX W Otilde -20
+KPX W S -4
+KPX W T 30
+KPX W a -33
+KPX W ae -33
+KPX W colon -44
+KPX W comma -73
+KPX W e -33
+KPX W g -31
+KPX W guillemotleft -24
+KPX W guilsinglleft -24
+KPX W hyphen -1
+KPX W i 1
+KPX W o -33
+KPX W oslash -33
+KPX W period -55
+KPX W r -18
+KPX W semicolon -54
+KPX W u -23
+KPX W y -1
+KPX X C -32
+KPX X O -34
+KPX X Odieresis -34
+KPX X Q -33
+KPX X a -39
+KPX X e -40
+KPX X hyphen -22
+KPX X o -39
+KPX X u -31
+KPX X y -43
+KPX Y A -81
+KPX Y AE -99
+KPX Y Aacute -81
+KPX Y Acircumflex -81
+KPX Y Adieresis -81
+KPX Y Agrave -81
+KPX Y Aring -81
+KPX Y Atilde -81
+KPX Y C -48
+KPX Y G -50
+KPX Y O -50
+KPX Y Oacute -50
+KPX Y Ocircumflex -50
+KPX Y Odieresis -50
+KPX Y Ograve -50
+KPX Y Oslash -45
+KPX Y Otilde -50
+KPX Y S -19
+KPX Y T 34
+KPX Y a -70
+KPX Y ae -70
+KPX Y colon -75
+KPX Y comma -109
+KPX Y e -70
+KPX Y g -69
+KPX Y guillemotleft -65
+KPX Y guilsinglleft -65
+KPX Y hyphen -50
+KPX Y i 5
+KPX Y o -70
+KPX Y oslash -70
+KPX Y p -42
+KPX Y period -92
+KPX Y semicolon -85
+KPX Y u -44
+KPX Y v -19
+KPX Z v -13
+KPX Z y -14
+KPX a j 11
+KPX a quoteright -9
+KPX a v 0
+KPX a w 0
+KPX a y 0
+KPX aacute v 0
+KPX aacute w 0
+KPX aacute y 0
+KPX adieresis v 0
+KPX adieresis w 0
+KPX adieresis y 0
+KPX ae v -26
+KPX ae w -20
+KPX ae y -24
+KPX agrave v 0
+KPX agrave w 0
+KPX agrave y 0
+KPX aring v 0
+KPX aring w 0
+KPX aring y 0
+KPX b v -25
+KPX b w -19
+KPX b y -23
+KPX c h -8
+KPX c k -8
+KPX comma one -67
+KPX comma quotedblright -19
+KPX comma quoteright -21
+KPX e quoteright -31
+KPX e t -24
+KPX e v -26
+KPX e w -21
+KPX e x -22
+KPX e y -25
+KPX eacute v -26
+KPX eacute w -21
+KPX eacute y -25
+KPX ecircumflex v -26
+KPX ecircumflex w -21
+KPX ecircumflex y -25
+KPX eight four 11
+KPX eight one -87
+KPX eight seven -50
+KPX f a -25
+KPX f aacute -25
+KPX f adieresis -25
+KPX f ae -24
+KPX f aring -25
+KPX f e -24
+KPX f eacute -24
+KPX f f 28
+KPX f i 4
+KPX f j 2
+KPX f l 4
+KPX f o -25
+KPX f oacute -25
+KPX f odieresis -25
+KPX f oe -25
+KPX f oslash -28
+KPX f quoteright -13
+KPX f s 9
+KPX f t 30
+KPX five four 19
+KPX five one -82
+KPX five seven -36
+KPX four four 20
+KPX four one -83
+KPX four seven -40
+KPX g a -1
+KPX g adieresis -1
+KPX g ae -1
+KPX g aring -1
+KPX g e -1
+KPX g eacute -1
+KPX g l 11
+KPX g oacute -1
+KPX g odieresis -1
+KPX g r 11
+KPX guillemotright A -24
+KPX guillemotright AE -62
+KPX guillemotright Aacute -24
+KPX guillemotright Adieresis -24
+KPX guillemotright Aring -24
+KPX guillemotright T -44
+KPX guillemotright V -49
+KPX guillemotright W -22
+KPX guillemotright Y -63
+KPX guilsinglright A -24
+KPX guilsinglright AE -62
+KPX guilsinglright Aacute -24
+KPX guilsinglright Adieresis -24
+KPX guilsinglright Aring -24
+KPX guilsinglright T -44
+KPX guilsinglright V -49
+KPX guilsinglright W -22
+KPX guilsinglright Y -63
+KPX h quoteright -31
+KPX h y -19
+KPX hyphen A 14
+KPX hyphen AE -21
+KPX hyphen Aacute 14
+KPX hyphen Adieresis 14
+KPX hyphen Aring 14
+KPX hyphen T -11
+KPX hyphen V -24
+KPX hyphen W 5
+KPX hyphen Y -43
+KPX i T 3
+KPX i j 11
+KPX k a -30
+KPX k aacute -30
+KPX k adieresis -30
+KPX k ae -30
+KPX k aring -30
+KPX k comma -26
+KPX k e -30
+KPX k eacute -30
+KPX k g -29
+KPX k hyphen -41
+KPX k o -30
+KPX k oacute -30
+KPX k odieresis -30
+KPX k period -13
+KPX k s -10
+KPX k u -2
+KPX k udieresis -2
+KPX l v 0
+KPX l y 0
+KPX m p 7
+KPX m v -19
+KPX m w -13
+KPX m y -17
+KPX n T -44
+KPX n p 6
+KPX n quoteright -31
+KPX n v -21
+KPX n w -15
+KPX n y -19
+KPX nine four -37
+KPX nine one -84
+KPX nine seven -38
+KPX o T -49
+KPX o quoteright -31
+KPX o t -21
+KPX o v -24
+KPX o w -18
+KPX o x -20
+KPX o y -22
+KPX oacute v -24
+KPX oacute w -18
+KPX oacute y -22
+KPX ocircumflex t -21
+KPX odieresis t -21
+KPX odieresis v -24
+KPX odieresis w -18
+KPX odieresis x -20
+KPX odieresis y -22
+KPX ograve v -24
+KPX ograve w -18
+KPX ograve y -22
+KPX one comma -79
+KPX one eight -52
+KPX one five -50
+KPX one four -66
+KPX one nine -60
+KPX one one -138
+KPX one period -62
+KPX one seven -93
+KPX one six -59
+KPX one three -60
+KPX one two -59
+KPX one zero -35
+KPX p t -23
+KPX p y -24
+KPX period one -103
+KPX period quotedblright -58
+KPX period quoteright -60
+KPX q c 0
+KPX q u 8
+KPX quotedblbase A 4
+KPX quotedblbase AE -10
+KPX quotedblbase T -54
+KPX quotedblbase V -97
+KPX quotedblbase W -59
+KPX quotedblbase Y -95
+KPX quotedblleft A -97
+KPX quotedblleft AE -175
+KPX quotedblleft Aacute -97
+KPX quotedblleft Adieresis -97
+KPX quotedblleft Aring -97
+KPX quotedblleft T -26
+KPX quotedblleft V 2
+KPX quotedblleft W 10
+KPX quotedblleft Y -1
+KPX quotedblright A -105
+KPX quotedblright AE -182
+KPX quotedblright Aacute -105
+KPX quotedblright Adieresis -105
+KPX quotedblright Aring -105
+KPX quotedblright T -10
+KPX quotedblright V -4
+KPX quotedblright W 4
+KPX quotedblright Y -7
+KPX quoteleft A -95
+KPX quoteleft AE -172
+KPX quoteleft Aacute -95
+KPX quoteleft Adieresis -95
+KPX quoteleft Aring -95
+KPX quoteleft T -24
+KPX quoteleft V 4
+KPX quoteleft W 12
+KPX quoteleft Y 1
+KPX quoteright A -108
+KPX quoteright AE -186
+KPX quoteright Aacute -108
+KPX quoteright Adieresis -108
+KPX quoteright Aring -108
+KPX quoteright comma -104
+KPX quoteright d -60
+KPX quoteright o -59
+KPX quoteright period -83
+KPX quoteright r -33
+KPX quoteright s -30
+KPX quoteright t -37
+KPX quoteright v -24
+KPX quoteright w -22
+KPX quoteright y -24
+KPX r a -32
+KPX r aacute -32
+KPX r acircumflex -32
+KPX r adieresis -32
+KPX r ae -31
+KPX r agrave -32
+KPX r aring -32
+KPX r c -33
+KPX r ccedilla -27
+KPX r colon -17
+KPX r comma -71
+KPX r d -33
+KPX r e -31
+KPX r eacute -31
+KPX r ecircumflex -31
+KPX r egrave -31
+KPX r f 26
+KPX r g -20
+KPX r h 2
+KPX r hyphen -23
+KPX r i 1
+KPX r j 0
+KPX r k 2
+KPX r l 2
+KPX r m 2
+KPX r n 2
+KPX r o -32
+KPX r oacute -32
+KPX r ocircumflex -32
+KPX r odieresis -32
+KPX r oe -32
+KPX r ograve -32
+KPX r oslash -36
+KPX r p 2
+KPX r period -55
+KPX r q -32
+KPX r quoteright -11
+KPX r r 2
+KPX r s 4
+KPX r semicolon -30
+KPX r t 28
+KPX r u 2
+KPX r v 27
+KPX r w 28
+KPX r x 26
+KPX r y 27
+KPX r z 23
+KPX s quoteright -16
+KPX s t 2
+KPX seven colon -81
+KPX seven comma -136
+KPX seven eight -47
+KPX seven five -51
+KPX seven four -84
+KPX seven one -70
+KPX seven period -118
+KPX seven seven -25
+KPX seven six -64
+KPX seven three -46
+KPX seven two -32
+KPX six four 19
+KPX six one -96
+KPX six seven -69
+KPX t S 8
+KPX t a -29
+KPX t aacute -29
+KPX t adieresis -29
+KPX t ae -28
+KPX t aring -29
+KPX t colon -19
+KPX t e -28
+KPX t eacute -28
+KPX t h 0
+KPX t o -29
+KPX t oacute -29
+KPX t odieresis -29
+KPX t quoteright -12
+KPX t semicolon -32
+KPX three four 7
+KPX three one -93
+KPX three seven -58
+KPX two four -25
+KPX two one -88
+KPX two seven -43
+KPX u quoteright -9
+KPX v a -28
+KPX v aacute -28
+KPX v acircumflex -28
+KPX v adieresis -28
+KPX v ae -27
+KPX v agrave -28
+KPX v aring -28
+KPX v atilde -28
+KPX v c -28
+KPX v colon -27
+KPX v comma -89
+KPX v e -28
+KPX v eacute -28
+KPX v ecircumflex -28
+KPX v egrave -28
+KPX v g -24
+KPX v hyphen -3
+KPX v l 2
+KPX v o -27
+KPX v oacute -27
+KPX v odieresis -27
+KPX v ograve -27
+KPX v oslash -28
+KPX v period -72
+KPX v s -7
+KPX v semicolon -38
+KPX w a -23
+KPX w aacute -23
+KPX w acircumflex -23
+KPX w adieresis -23
+KPX w ae -23
+KPX w agrave -23
+KPX w aring -23
+KPX w atilde -23
+KPX w c -24
+KPX w colon -25
+KPX w comma -81
+KPX w e -23
+KPX w eacute -23
+KPX w ecircumflex -23
+KPX w egrave -23
+KPX w g -21
+KPX w hyphen 1
+KPX w l 2
+KPX w o -23
+KPX w oacute -23
+KPX w odieresis -23
+KPX w ograve -23
+KPX w oslash -23
+KPX w period -64
+KPX w s -5
+KPX w semicolon -37
+KPX x a -21
+KPX x c -22
+KPX x e -21
+KPX x eacute -21
+KPX x o -21
+KPX x q -21
+KPX y a -30
+KPX y aacute -30
+KPX y acircumflex -30
+KPX y adieresis -30
+KPX y ae -29
+KPX y agrave -30
+KPX y aring -30
+KPX y atilde -30
+KPX y c -30
+KPX y colon -27
+KPX y comma -91
+KPX y e -30
+KPX y eacute -30
+KPX y ecircumflex -30
+KPX y egrave -30
+KPX y g -25
+KPX y hyphen -6
+KPX y l 1
+KPX y o -29
+KPX y oacute -29
+KPX y odieresis -29
+KPX y ograve -29
+KPX y oslash -30
+KPX y period -75
+KPX y s -7
+KPX y semicolon -38
+KPX zero four 16
+KPX zero one -70
+KPX zero seven -37
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/a010033l.pfb b/Master/xemtex/gsfonts/a010033l.pfb
new file mode 100644
index 00000000000..3407908ae6d
--- /dev/null
+++ b/Master/xemtex/gsfonts/a010033l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/a010033l.pfm b/Master/xemtex/gsfonts/a010033l.pfm
new file mode 100644
index 00000000000..1ed050efbb3
--- /dev/null
+++ b/Master/xemtex/gsfonts/a010033l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/a010035l.afm b/Master/xemtex/gsfonts/a010035l.afm
new file mode 100644
index 00000000000..3ebc227db86
--- /dev/null
+++ b/Master/xemtex/gsfonts/a010035l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName URWGothicL-DemiObli
+FullName URW Gothic L Demi Oblique
+FamilyName URW Gothic L
+Weight Demi
+ItalicAngle -10.0
+IsFixedPitch false
+UnderlinePosition -93
+UnderlineThickness 90
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -121 -251 1281 1013
+CapHeight 739
+XHeight 554
+Descender -185
+Ascender 739
+StartCharMetrics 316
+C 32 ; WX 280 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 280 ; N exclam ; B 72 0 342 739 ;
+C 34 ; WX 360 ; N quotedbl ; B 169 513 420 739 ;
+C 35 ; WX 560 ; N numbersign ; B 77 0 623 739 ;
+C 36 ; WX 560 ; N dollar ; B 100 -86 575 856 ;
+C 37 ; WX 860 ; N percent ; B 124 -13 868 752 ;
+C 38 ; WX 680 ; N ampersand ; B 71 -13 741 752 ;
+C 39 ; WX 280 ; N quoteright ; B 159 464 342 739 ;
+C 40 ; WX 380 ; N parenleft ; B 122 -137 486 739 ;
+C 41 ; WX 380 ; N parenright ; B 13 -137 377 739 ;
+C 42 ; WX 440 ; N asterisk ; B 176 425 490 739 ;
+C 43 ; WX 600 ; N plus ; B 100 129 625 609 ;
+C 44 ; WX 280 ; N comma ; B 47 -140 230 128 ;
+C 45 ; WX 420 ; N hyphen ; B 122 229 421 347 ;
+C 46 ; WX 280 ; N period ; B 72 0 230 128 ;
+C 47 ; WX 460 ; N slash ; B 2 -128 580 739 ;
+C 48 ; WX 560 ; N zero ; B 68 -13 623 752 ;
+C 49 ; WX 560 ; N one ; B 246 0 516 739 ;
+C 50 ; WX 560 ; N two ; B 42 0 619 752 ;
+C 51 ; WX 560 ; N three ; B 53 -13 571 752 ;
+C 52 ; WX 560 ; N four ; B 20 0 589 739 ;
+C 53 ; WX 560 ; N five ; B 50 -13 586 739 ;
+C 54 ; WX 560 ; N six ; B 62 -13 584 739 ;
+C 55 ; WX 560 ; N seven ; B 85 0 637 739 ;
+C 56 ; WX 560 ; N eight ; B 69 -13 582 752 ;
+C 57 ; WX 560 ; N nine ; B 108 0 628 752 ;
+C 58 ; WX 280 ; N colon ; B 72 0 298 502 ;
+C 59 ; WX 280 ; N semicolon ; B 47 -140 298 502 ;
+C 60 ; WX 600 ; N less ; B 98 33 668 582 ;
+C 61 ; WX 600 ; N equal ; B 81 210 643 524 ;
+C 62 ; WX 600 ; N greater ; B 56 33 625 582 ;
+C 63 ; WX 560 ; N question ; B 129 0 586 752 ;
+C 64 ; WX 740 ; N at ; B 64 -13 831 766 ;
+C 65 ; WX 740 ; N A ; B 7 0 733 739 ;
+C 66 ; WX 580 ; N B ; B 68 0 607 739 ;
+C 67 ; WX 780 ; N C ; B 92 -13 858 752 ;
+C 68 ; WX 700 ; N D ; B 68 0 734 739 ;
+C 69 ; WX 520 ; N E ; B 68 0 602 739 ;
+C 70 ; WX 480 ; N F ; B 68 0 581 739 ;
+C 71 ; WX 840 ; N G ; B 91 -13 888 752 ;
+C 72 ; WX 680 ; N H ; B 68 0 743 739 ;
+C 73 ; WX 280 ; N I ; B 68 0 342 739 ;
+C 74 ; WX 480 ; N J ; B 38 -13 551 739 ;
+C 75 ; WX 620 ; N K ; B 68 0 736 739 ;
+C 76 ; WX 440 ; N L ; B 68 0 456 739 ;
+C 77 ; WX 900 ; N M ; B 68 0 977 739 ;
+C 78 ; WX 740 ; N N ; B 68 0 804 739 ;
+C 79 ; WX 840 ; N O ; B 91 -13 875 752 ;
+C 80 ; WX 560 ; N P ; B 68 0 639 739 ;
+C 81 ; WX 840 ; N Q ; B 91 -15 889 752 ;
+C 82 ; WX 580 ; N R ; B 68 0 657 739 ;
+C 83 ; WX 520 ; N S ; B 49 -13 579 752 ;
+C 84 ; WX 420 ; N T ; B 119 0 555 739 ;
+C 85 ; WX 640 ; N U ; B 109 -13 704 739 ;
+C 86 ; WX 700 ; N V ; B 145 0 831 739 ;
+C 87 ; WX 900 ; N W ; B 144 0 1035 739 ;
+C 88 ; WX 680 ; N X ; B 5 0 813 739 ;
+C 89 ; WX 620 ; N Y ; B 140 0 763 739 ;
+C 90 ; WX 500 ; N Z ; B 18 0 598 739 ;
+C 91 ; WX 320 ; N bracketleft ; B 100 -137 429 739 ;
+C 92 ; WX 640 ; N backslash ; B 221 0 503 739 ;
+C 93 ; WX 320 ; N bracketright ; B 13 -137 346 739 ;
+C 94 ; WX 600 ; N asciicircum ; B 130 324 610 750 ;
+C 95 ; WX 500 ; N underscore ; B -26 -138 491 -48 ;
+C 96 ; WX 280 ; N quoteleft ; B 161 466 343 739 ;
+C 97 ; WX 660 ; N a ; B 75 -13 718 567 ;
+C 98 ; WX 660 ; N b ; B 54 -13 695 739 ;
+C 99 ; WX 640 ; N c ; B 77 -13 670 567 ;
+C 100 ; WX 660 ; N d ; B 76 -13 750 739 ;
+C 101 ; WX 640 ; N e ; B 76 -13 665 567 ;
+C 102 ; WX 280 ; N f ; B 57 0 413 739 ;
+C 103 ; WX 660 ; N g ; B 30 -221 714 567 ;
+C 104 ; WX 600 ; N h ; B 54 0 613 739 ;
+C 105 ; WX 240 ; N i ; B 54 0 324 739 ;
+C 106 ; WX 260 ; N j ; B -17 -185 342 739 ;
+C 107 ; WX 580 ; N k ; B 54 0 625 739 ;
+C 108 ; WX 240 ; N l ; B 54 0 324 739 ;
+C 109 ; WX 940 ; N m ; B 54 0 952 567 ;
+C 110 ; WX 600 ; N n ; B 54 0 613 567 ;
+C 111 ; WX 640 ; N o ; B 76 -13 675 567 ;
+C 112 ; WX 660 ; N p ; B 20 -185 691 567 ;
+C 113 ; WX 660 ; N q ; B 77 -185 714 567 ;
+C 114 ; WX 320 ; N r ; B 54 0 412 569 ;
+C 115 ; WX 440 ; N s ; B 49 -13 482 567 ;
+C 116 ; WX 300 ; N t ; B 74 0 390 739 ;
+C 117 ; WX 600 ; N u ; B 88 -13 650 554 ;
+C 118 ; WX 560 ; N v ; B 104 0 656 554 ;
+C 119 ; WX 800 ; N w ; B 113 0 888 554 ;
+C 120 ; WX 560 ; N x ; B 1 0 629 554 ;
+C 121 ; WX 580 ; N y ; B 73 -185 671 554 ;
+C 122 ; WX 460 ; N z ; B 20 0 528 554 ;
+C 123 ; WX 340 ; N braceleft ; B 94 -129 439 740 ;
+C 124 ; WX 600 ; N bar ; B 243 0 499 739 ;
+C 125 ; WX 340 ; N braceright ; B 14 -129 360 740 ;
+C 126 ; WX 600 ; N asciitilde ; B 105 214 619 421 ;
+C 161 ; WX 280 ; N exclamdown ; B 38 -185 308 554 ;
+C 162 ; WX 560 ; N cent ; B 106 39 593 715 ;
+C 163 ; WX 560 ; N sterling ; B 40 0 616 752 ;
+C 164 ; WX 160 ; N fraction ; B -121 0 417 739 ;
+C 165 ; WX 560 ; N yen ; B 51 0 726 739 ;
+C 166 ; WX 560 ; N florin ; B -44 -149 646 820 ;
+C 167 ; WX 560 ; N section ; B 68 -157 608 752 ;
+C 168 ; WX 560 ; N currency ; B 69 148 640 654 ;
+C 169 ; WX 220 ; N quotesingle ; B 169 513 287 739 ;
+C 170 ; WX 480 ; N quotedblleft ; B 159 466 548 739 ;
+C 171 ; WX 460 ; N guillemotleft ; B 85 108 480 469 ;
+C 172 ; WX 240 ; N guilsinglleft ; B 85 108 267 469 ;
+C 173 ; WX 240 ; N guilsinglright ; B 98 108 280 469 ;
+C 174 ; WX 520 ; N fi ; B 55 0 598 739 ;
+C 175 ; WX 520 ; N fl ; B 55 0 598 739 ;
+C 177 ; WX 500 ; N endash ; B 48 229 570 347 ;
+C 178 ; WX 560 ; N dagger ; B 129 -128 607 739 ;
+C 179 ; WX 560 ; N daggerdbl ; B 96 -128 615 739 ;
+C 180 ; WX 280 ; N periodcentered ; B 119 300 276 432 ;
+C 182 ; WX 600 ; N paragraph ; B 133 -128 664 739 ;
+C 183 ; WX 600 ; N bullet ; B 190 144 533 487 ;
+C 184 ; WX 280 ; N quotesinglbase ; B 46 -140 228 128 ;
+C 185 ; WX 480 ; N quotedblbase ; B 45 -147 435 128 ;
+C 186 ; WX 480 ; N quotedblright ; B 157 464 547 739 ;
+C 187 ; WX 460 ; N guillemotright ; B 98 108 493 469 ;
+C 188 ; WX 1000 ; N ellipsis ; B 100 0 924 128 ;
+C 189 ; WX 1280 ; N perthousand ; B 124 -13 1281 752 ;
+C 191 ; WX 560 ; N questiondown ; B 71 -198 528 554 ;
+C 193 ; WX 420 ; N grave ; B 211 617 484 832 ;
+C 194 ; WX 420 ; N acute ; B 205 617 488 832 ;
+C 195 ; WX 540 ; N circumflex ; B 189 630 588 768 ;
+C 196 ; WX 480 ; N tilde ; B 206 631 528 769 ;
+C 197 ; WX 420 ; N macron ; B 189 650 486 749 ;
+C 198 ; WX 480 ; N breve ; B 214 630 544 766 ;
+C 199 ; WX 280 ; N dotaccent ; B 189 630 347 762 ;
+C 200 ; WX 500 ; N dieresis ; B 189 630 557 762 ;
+C 202 ; WX 360 ; N ring ; B 206 617 416 823 ;
+C 203 ; WX 340 ; N cedilla ; B 42 -251 244 0 ;
+C 205 ; WX 700 ; N hungarumlaut ; B 204 617 768 838 ;
+C 206 ; WX 340 ; N ogonek ; B 52 -204 235 0 ;
+C 207 ; WX 540 ; N caron ; B 214 630 613 768 ;
+C 208 ; WX 1000 ; N emdash ; B 48 229 1070 347 ;
+C 225 ; WX 900 ; N AE ; B 17 0 980 739 ;
+C 227 ; WX 360 ; N ordfeminine ; B 90 312 480 752 ;
+C 232 ; WX 480 ; N Lslash ; B 49 0 498 739 ;
+C 233 ; WX 840 ; N Oslash ; B 91 -80 887 826 ;
+C 234 ; WX 1060 ; N OE ; B 100 -13 1141 752 ;
+C 235 ; WX 360 ; N ordmasculine ; B 90 313 451 752 ;
+C 241 ; WX 1080 ; N ae ; B 76 -13 1108 567 ;
+C 245 ; WX 240 ; N dotlessi ; B 54 0 290 554 ;
+C 248 ; WX 320 ; N lslash ; B 59 0 420 739 ;
+C 249 ; WX 660 ; N oslash ; B 76 -64 680 620 ;
+C 250 ; WX 1080 ; N oe ; B 76 -13 1105 567 ;
+C 251 ; WX 600 ; N germandbls ; B 51 -13 628 752 ;
+C -1 ; WX 640 ; N Udieresis ; B 109 -13 704 937 ;
+C -1 ; WX 640 ; N Uacute ; B 109 -13 704 1007 ;
+C -1 ; WX 520 ; N Scedilla ; B 49 -251 579 752 ;
+C -1 ; WX 420 ; N Tcaron ; B 119 0 573 943 ;
+C -1 ; WX 520 ; N Scaron ; B 49 -13 638 943 ;
+C -1 ; WX 580 ; N Rcaron ; B 68 0 657 943 ;
+C -1 ; WX 580 ; N Racute ; B 68 0 657 1007 ;
+C -1 ; WX 520 ; N Sacute ; B 49 -13 579 1007 ;
+C -1 ; WX 840 ; N Otilde ; B 91 -13 875 943 ;
+C -1 ; WX 600 ; N ucircumflex ; B 88 -13 650 768 ;
+C -1 ; WX 840 ; N Ohungarumlaut ; B 91 -13 875 1013 ;
+C -1 ; WX 640 ; N Uhungarumlaut ; B 109 -13 818 1013 ;
+C -1 ; WX 620 ; N Yacute ; B 140 0 763 1007 ;
+C -1 ; WX 742 ; N Eth ; B 73 0 776 739 ;
+C -1 ; WX 742 ; N Dcroat ; B 73 0 776 739 ;
+C -1 ; WX 500 ; N Zacute ; B 18 0 598 1007 ;
+C -1 ; WX 640 ; N Uring ; B 109 -13 704 998 ;
+C -1 ; WX 660 ; N gbreve ; B 30 -221 714 766 ;
+C -1 ; WX 640 ; N eogonek ; B 76 -204 665 567 ;
+C -1 ; WX 640 ; N edotaccent ; B 76 -13 665 762 ;
+C -1 ; WX 640 ; N ecaron ; B 76 -13 665 768 ;
+C -1 ; WX 640 ; N Ugrave ; B 109 -13 704 1007 ;
+C -1 ; WX 560 ; N Thorn ; B 68 0 613 739 ;
+C -1 ; WX 640 ; N eacute ; B 76 -13 665 832 ;
+C -1 ; WX 640 ; N edieresis ; B 76 -13 665 762 ;
+C -1 ; WX 752 ; N dcaron ; B 76 -13 932 739 ;
+C -1 ; WX 640 ; N ccedilla ; B 77 -251 670 567 ;
+C -1 ; WX 640 ; N ccaron ; B 77 -13 670 768 ;
+C -1 ; WX 640 ; N cacute ; B 77 -13 670 832 ;
+C -1 ; WX 660 ; N aogonek ; B 75 -204 718 567 ;
+C -1 ; WX 660 ; N aring ; B 75 -13 718 823 ;
+C -1 ; WX 660 ; N atilde ; B 75 -13 718 769 ;
+C -1 ; WX 660 ; N abreve ; B 75 -13 718 766 ;
+C -1 ; WX 640 ; N egrave ; B 76 -13 665 832 ;
+C -1 ; WX 660 ; N agrave ; B 75 -13 718 832 ;
+C -1 ; WX 660 ; N aacute ; B 75 -13 718 832 ;
+C -1 ; WX 660 ; N adieresis ; B 75 -13 718 762 ;
+C -1 ; WX 640 ; N Uogonek ; B 109 -204 704 739 ;
+C -1 ; WX 600 ; N ugrave ; B 88 -13 650 832 ;
+C -1 ; WX 600 ; N uacute ; B 88 -13 650 832 ;
+C -1 ; WX 600 ; N udieresis ; B 88 -13 650 762 ;
+C -1 ; WX 364 ; N tcaron ; B 74 0 544 739 ;
+C -1 ; WX 440 ; N scommaaccent ; B 49 -245 482 567 ;
+C -1 ; WX 500 ; N Zcaron ; B 18 0 618 943 ;
+C -1 ; WX 640 ; N ecircumflex ; B 76 -13 665 768 ;
+C -1 ; WX 640 ; N Ucircumflex ; B 109 -13 704 943 ;
+C -1 ; WX 660 ; N acircumflex ; B 75 -13 718 768 ;
+C -1 ; WX 500 ; N Zdotaccent ; B 18 0 598 937 ;
+C -1 ; WX 440 ; N scaron ; B 49 -13 563 768 ;
+C -1 ; WX 740 ; N Amacron ; B 7 0 733 924 ;
+C -1 ; WX 440 ; N sacute ; B 49 -13 498 832 ;
+C -1 ; WX 420 ; N Tcommaaccent ; B 83 -245 555 739 ;
+C -1 ; WX 620 ; N Ydieresis ; B 140 0 763 937 ;
+C -1 ; WX 660 ; N thorn ; B 20 -185 691 739 ;
+C -1 ; WX 520 ; N Emacron ; B 68 0 602 924 ;
+C -1 ; WX 840 ; N Ograve ; B 91 -13 875 1007 ;
+C -1 ; WX 840 ; N Oacute ; B 91 -13 875 1007 ;
+C -1 ; WX 840 ; N Odieresis ; B 91 -13 875 937 ;
+C -1 ; WX 740 ; N Ntilde ; B 68 0 804 943 ;
+C -1 ; WX 740 ; N Ncaron ; B 68 0 804 943 ;
+C -1 ; WX 740 ; N Nacute ; B 68 0 804 1007 ;
+C -1 ; WX 440 ; N Lcaron ; B 68 0 531 739 ;
+C -1 ; WX 440 ; N Lacute ; B 68 0 498 1007 ;
+C -1 ; WX 280 ; N Idotaccent ; B 68 0 377 937 ;
+C -1 ; WX 320 ; N racute ; B 54 0 438 832 ;
+C -1 ; WX 280 ; N Icircumflex ; B 68 0 492 943 ;
+C -1 ; WX 640 ; N ohungarumlaut ; B 76 -13 738 838 ;
+C -1 ; WX 640 ; N otilde ; B 76 -13 675 769 ;
+C -1 ; WX 560 ; N Euro ; B -33 -11 673 751 ;
+C -1 ; WX 640 ; N ocircumflex ; B 76 -13 675 768 ;
+C -1 ; WX 336 ; N onesuperior ; B 209 296 378 739 ;
+C -1 ; WX 336 ; N twosuperior ; B 70 296 440 746 ;
+C -1 ; WX 336 ; N threesuperior ; B 82 288 415 746 ;
+C -1 ; WX 280 ; N Igrave ; B 68 0 448 1007 ;
+C -1 ; WX 280 ; N Iacute ; B 68 0 418 1007 ;
+C -1 ; WX 280 ; N Imacron ; B 68 0 436 924 ;
+C -1 ; WX 280 ; N Iogonek ; B 27 -204 342 739 ;
+C -1 ; WX 280 ; N Idieresis ; B 68 0 481 937 ;
+C -1 ; WX 840 ; N Gbreve ; B 91 -13 888 941 ;
+C -1 ; WX 640 ; N Umacron ; B 109 -13 704 924 ;
+C -1 ; WX 620 ; N Kcommaaccent ; B 68 -245 736 739 ;
+C -1 ; WX 640 ; N ograve ; B 76 -13 675 832 ;
+C -1 ; WX 520 ; N Scommaaccent ; B 49 -245 579 752 ;
+C -1 ; WX 520 ; N Eogonek ; B 68 -204 602 739 ;
+C -1 ; WX 640 ; N oacute ; B 76 -13 675 832 ;
+C -1 ; WX 520 ; N Edotaccent ; B 68 0 602 937 ;
+C -1 ; WX 240 ; N iogonek ; B 9 -204 324 739 ;
+C -1 ; WX 660 ; N gcommaaccent ; B 30 -221 714 799 ;
+C -1 ; WX 640 ; N odieresis ; B 76 -13 675 762 ;
+C -1 ; WX 600 ; N ntilde ; B 54 0 613 769 ;
+C -1 ; WX 600 ; N ncaron ; B 54 0 643 768 ;
+C -1 ; WX 520 ; N Ecaron ; B 68 0 633 943 ;
+C -1 ; WX 520 ; N Ecircumflex ; B 68 0 612 943 ;
+C -1 ; WX 440 ; N scedilla ; B 49 -251 482 567 ;
+C -1 ; WX 320 ; N rcaron ; B 54 0 503 768 ;
+C -1 ; WX 520 ; N Egrave ; B 68 0 602 1007 ;
+C -1 ; WX 520 ; N Eacute ; B 68 0 602 1007 ;
+C -1 ; WX 840 ; N Gcommaaccent ; B 91 -245 888 752 ;
+C -1 ; WX 580 ; N Rcommaaccent ; B 68 -245 657 739 ;
+C -1 ; WX 520 ; N Edieresis ; B 68 0 602 937 ;
+C -1 ; WX 600 ; N nacute ; B 54 0 613 832 ;
+C -1 ; WX 600 ; N uogonek ; B 88 -204 650 554 ;
+C -1 ; WX 600 ; N umacron ; B 88 -13 650 749 ;
+C -1 ; WX 700 ; N Dcaron ; B 68 0 734 943 ;
+C -1 ; WX 326 ; N lcaron ; B 54 0 506 739 ;
+C -1 ; WX 780 ; N Ccaron ; B 92 -13 858 943 ;
+C -1 ; WX 780 ; N Cacute ; B 92 -13 858 1007 ;
+C -1 ; WX 780 ; N Ccedilla ; B 92 -251 858 752 ;
+C -1 ; WX 400 ; N degree ; B 157 386 462 686 ;
+C -1 ; WX 740 ; N Aogonek ; B 7 -204 738 739 ;
+C -1 ; WX 600 ; N minus ; B 99 312 625 430 ;
+C -1 ; WX 600 ; N multiply ; B 78 112 645 622 ;
+C -1 ; WX 600 ; N divide ; B 100 73 625 669 ;
+C -1 ; WX 740 ; N Aring ; B 7 0 733 998 ;
+C -1 ; WX 1000 ; N trademark ; B 194 345 1066 739 ;
+C -1 ; WX 320 ; N rcommaaccent ; B 33 -245 412 569 ;
+C -1 ; WX 240 ; N lacute ; B 54 0 398 1007 ;
+C -1 ; WX 640 ; N omacron ; B 76 -13 675 749 ;
+C -1 ; WX 740 ; N Atilde ; B 7 0 733 943 ;
+C -1 ; WX 240 ; N icircumflex ; B 39 0 438 768 ;
+C -1 ; WX 240 ; N igrave ; B 54 0 394 832 ;
+C -1 ; WX 600 ; N ncommaaccent ; B 54 -245 613 567 ;
+C -1 ; WX 240 ; N lcommaaccent ; B -7 -245 324 739 ;
+C -1 ; WX 600 ; N plusminus ; B 51 0 635 627 ;
+C -1 ; WX 840 ; N onehalf ; B 205 0 889 739 ;
+C -1 ; WX 840 ; N onequarter ; B 209 0 867 739 ;
+C -1 ; WX 840 ; N threequarters ; B 82 0 867 746 ;
+C -1 ; WX 240 ; N iacute ; B 54 0 398 832 ;
+C -1 ; WX 740 ; N Abreve ; B 7 0 733 941 ;
+C -1 ; WX 580 ; N kcommaaccent ; B 54 -245 625 739 ;
+C -1 ; WX 840 ; N Omacron ; B 91 -13 875 924 ;
+C -1 ; WX 240 ; N imacron ; B 54 0 396 749 ;
+C -1 ; WX 640 ; N emacron ; B 76 -13 665 749 ;
+C -1 ; WX 660 ; N amacron ; B 75 -13 718 749 ;
+C -1 ; WX 300 ; N tcommaaccent ; B 23 -245 390 739 ;
+C -1 ; WX 580 ; N ydieresis ; B 73 -185 671 762 ;
+C -1 ; WX 460 ; N zdotaccent ; B 20 0 528 762 ;
+C -1 ; WX 460 ; N zcaron ; B 20 0 573 768 ;
+C -1 ; WX 460 ; N zacute ; B 20 0 528 832 ;
+C -1 ; WX 580 ; N yacute ; B 73 -185 671 832 ;
+C -1 ; WX 600 ; N uhungarumlaut ; B 88 -13 718 838 ;
+C -1 ; WX 640 ; N eth ; B 76 -13 680 757 ;
+C -1 ; WX 600 ; N uring ; B 88 -13 650 823 ;
+C -1 ; WX 840 ; N Ocircumflex ; B 91 -13 875 943 ;
+C -1 ; WX 280 ; N commaaccent ; B 13 -245 211 -53 ;
+C -1 ; WX 740 ; N copyright ; B 50 -13 834 752 ;
+C -1 ; WX 740 ; N registered ; B 50 -13 834 752 ;
+C -1 ; WX 740 ; N Acircumflex ; B 7 0 733 943 ;
+C -1 ; WX 240 ; N idieresis ; B 54 0 427 762 ;
+C -1 ; WX 494 ; N lozenge ; B 88 0 535 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 600 ; N notequal ; B 90 101 652 632 ;
+C -1 ; WX 549 ; N radical ; B 60 -35 709 917 ;
+C -1 ; WX 740 ; N Agrave ; B 7 0 733 1007 ;
+C -1 ; WX 740 ; N Aacute ; B 7 0 733 1007 ;
+C -1 ; WX 600 ; N lessequal ; B 45 0 681 711 ;
+C -1 ; WX 600 ; N greaterequal ; B 51 0 643 711 ;
+C -1 ; WX 600 ; N logicalnot ; B 117 182 643 471 ;
+C -1 ; WX 713 ; N summation ; B -9 -123 761 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 56 -10 545 753 ;
+C -1 ; WX 740 ; N Ncommaaccent ; B 68 -245 804 739 ;
+C -1 ; WX 660 ; N dcroat ; B 77 -13 801 739 ;
+C -1 ; WX 600 ; N brokenbar ; B 243 0 499 739 ;
+C -1 ; WX 440 ; N Lcommaaccent ; B 68 -245 456 739 ;
+C -1 ; WX 740 ; N Adieresis ; B 7 0 733 937 ;
+C -1 ; WX 576 ; N mu ; B 20 -185 650 554 ;
+C -1 ; WX 280 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -39
+KPX A Ccedilla -38
+KPX A G -38
+KPX A O -38
+KPX A Odieresis -38
+KPX A Q -38
+KPX A T -47
+KPX A U -34
+KPX A Uacute -34
+KPX A Ucircumflex -34
+KPX A Udieresis -34
+KPX A Ugrave -34
+KPX A V -78
+KPX A W -58
+KPX A Y -86
+KPX A a -22
+KPX A b -8
+KPX A c -25
+KPX A ccedilla -25
+KPX A comma 14
+KPX A d -22
+KPX A e -25
+KPX A g -23
+KPX A guillemotleft -22
+KPX A guilsinglleft -22
+KPX A hyphen -24
+KPX A o -25
+KPX A period 16
+KPX A q -23
+KPX A quotedblright -78
+KPX A quoteright -79
+KPX A t -13
+KPX A u -16
+KPX A v -45
+KPX A w -43
+KPX A y -47
+KPX Aacute C -39
+KPX Aacute G -38
+KPX Aacute O -38
+KPX Aacute Q -38
+KPX Aacute T -47
+KPX Aacute U -34
+KPX Aacute V -78
+KPX Aacute W -58
+KPX Aacute Y -86
+KPX Aacute a -22
+KPX Aacute b -8
+KPX Aacute c -25
+KPX Aacute comma 14
+KPX Aacute d -22
+KPX Aacute e -25
+KPX Aacute g -23
+KPX Aacute guillemotleft -22
+KPX Aacute guilsinglleft -22
+KPX Aacute hyphen -24
+KPX Aacute o -25
+KPX Aacute period 16
+KPX Aacute q -23
+KPX Aacute quoteright -79
+KPX Aacute t -13
+KPX Aacute u -16
+KPX Aacute v -45
+KPX Aacute w -43
+KPX Aacute y -47
+KPX Acircumflex C -39
+KPX Acircumflex G -38
+KPX Acircumflex O -38
+KPX Acircumflex Q -38
+KPX Acircumflex T -47
+KPX Acircumflex U -34
+KPX Acircumflex V -78
+KPX Acircumflex W -58
+KPX Acircumflex Y -86
+KPX Acircumflex comma 14
+KPX Acircumflex period 16
+KPX Adieresis C -39
+KPX Adieresis G -38
+KPX Adieresis O -38
+KPX Adieresis Q -38
+KPX Adieresis T -47
+KPX Adieresis U -34
+KPX Adieresis V -78
+KPX Adieresis W -58
+KPX Adieresis Y -86
+KPX Adieresis a -22
+KPX Adieresis b -8
+KPX Adieresis c -25
+KPX Adieresis comma 14
+KPX Adieresis d -22
+KPX Adieresis g -23
+KPX Adieresis guillemotleft -22
+KPX Adieresis guilsinglleft -22
+KPX Adieresis hyphen -24
+KPX Adieresis o -25
+KPX Adieresis period 16
+KPX Adieresis q -23
+KPX Adieresis quotedblright -78
+KPX Adieresis quoteright -79
+KPX Adieresis t -13
+KPX Adieresis u -16
+KPX Adieresis v -45
+KPX Adieresis w -43
+KPX Adieresis y -47
+KPX Agrave C -39
+KPX Agrave G -38
+KPX Agrave O -38
+KPX Agrave Q -38
+KPX Agrave T -47
+KPX Agrave U -34
+KPX Agrave V -78
+KPX Agrave W -58
+KPX Agrave Y -86
+KPX Agrave comma 14
+KPX Agrave period 16
+KPX Aring C -39
+KPX Aring G -38
+KPX Aring O -38
+KPX Aring Q -38
+KPX Aring T -47
+KPX Aring U -34
+KPX Aring V -78
+KPX Aring W -58
+KPX Aring Y -86
+KPX Aring a -22
+KPX Aring b -8
+KPX Aring c -25
+KPX Aring comma 14
+KPX Aring d -22
+KPX Aring e -25
+KPX Aring g -23
+KPX Aring guillemotleft -22
+KPX Aring guilsinglleft -22
+KPX Aring hyphen -24
+KPX Aring o -25
+KPX Aring period 16
+KPX Aring q -23
+KPX Aring quotedblright -78
+KPX Aring quoteright -79
+KPX Aring t -13
+KPX Aring u -16
+KPX Aring v -45
+KPX Aring w -43
+KPX Aring y -47
+KPX Atilde C -39
+KPX Atilde G -38
+KPX Atilde O -38
+KPX Atilde Q -38
+KPX Atilde T -47
+KPX Atilde U -34
+KPX Atilde V -78
+KPX Atilde W -58
+KPX Atilde Y -86
+KPX Atilde comma 14
+KPX Atilde period 16
+KPX B A -24
+KPX B AE -42
+KPX B Aacute -24
+KPX B Acircumflex -24
+KPX B Adieresis -24
+KPX B Aring -24
+KPX B Atilde -24
+KPX B O 0
+KPX B OE -3
+KPX B Oacute 0
+KPX B Ocircumflex 0
+KPX B Odieresis 0
+KPX B Ograve 0
+KPX B Oslash 0
+KPX B V -34
+KPX B W -16
+KPX B Y -45
+KPX C A -21
+KPX C AE -45
+KPX C Aacute -21
+KPX C Adieresis -21
+KPX C Aring -21
+KPX C H 2
+KPX C K 2
+KPX C O -9
+KPX C Oacute -9
+KPX C Odieresis -9
+KPX Ccedilla A -24
+KPX D A -44
+KPX D Aacute -44
+KPX D Acircumflex -44
+KPX D Adieresis -44
+KPX D Agrave -44
+KPX D Aring -44
+KPX D Atilde -44
+KPX D J -22
+KPX D T -29
+KPX D V -41
+KPX D W -22
+KPX D X -38
+KPX D Y -53
+KPX F A -57
+KPX F Aacute -57
+KPX F Acircumflex -57
+KPX F Adieresis -57
+KPX F Agrave -57
+KPX F Aring -57
+KPX F Atilde -57
+KPX F J -61
+KPX F O -10
+KPX F Odieresis -10
+KPX F a -14
+KPX F aacute -14
+KPX F adieresis -14
+KPX F ae -14
+KPX F aring -14
+KPX F comma -64
+KPX F e -14
+KPX F eacute -14
+KPX F hyphen -3
+KPX F i -17
+KPX F j -27
+KPX F o -14
+KPX F oacute -14
+KPX F odieresis -14
+KPX F oe -14
+KPX F oslash -16
+KPX F period -63
+KPX F r -17
+KPX F u -21
+KPX G A -38
+KPX G AE -65
+KPX G Aacute -38
+KPX G Acircumflex -38
+KPX G Adieresis -38
+KPX G Agrave -38
+KPX G Aring -38
+KPX G Atilde -38
+KPX G T -25
+KPX G V -38
+KPX G W -20
+KPX G Y -50
+KPX J A -31
+KPX J AE -45
+KPX J Adieresis -31
+KPX J Aring -31
+KPX K C -50
+KPX K G -50
+KPX K O -49
+KPX K OE -52
+KPX K Oacute -49
+KPX K Odieresis -49
+KPX K S -34
+KPX K T 16
+KPX K a -57
+KPX K adieresis -57
+KPX K ae -59
+KPX K aring -57
+KPX K e -60
+KPX K hyphen -75
+KPX K o -60
+KPX K oacute -60
+KPX K odieresis -60
+KPX K u -50
+KPX K udieresis -48
+KPX K y -65
+KPX L A 19
+KPX L AE 14
+KPX L Aacute 19
+KPX L Adieresis 19
+KPX L Aring 19
+KPX L C -29
+KPX L Ccedilla -32
+KPX L G -29
+KPX L O -29
+KPX L Oacute -29
+KPX L Ocircumflex -29
+KPX L Odieresis -29
+KPX L Ograve -29
+KPX L Otilde -29
+KPX L S 10
+KPX L T -46
+KPX L U -20
+KPX L Udieresis -20
+KPX L V -76
+KPX L W -56
+KPX L Y -84
+KPX L hyphen -32
+KPX L quotedblright -76
+KPX L quoteright -77
+KPX L u -11
+KPX L udieresis -11
+KPX L y -50
+KPX N A -13
+KPX N AE -18
+KPX N Aacute -13
+KPX N Adieresis -13
+KPX N Aring -13
+KPX N C -2
+KPX N Ccedilla -1
+KPX N G -1
+KPX N O -1
+KPX N Oacute -1
+KPX N Odieresis -1
+KPX N a -3
+KPX N aacute -3
+KPX N adieresis -3
+KPX N ae -4
+KPX N aring -3
+KPX N comma 3
+KPX N e -5
+KPX N eacute -5
+KPX N o -5
+KPX N oacute -5
+KPX N odieresis -5
+KPX N oslash -4
+KPX N period 4
+KPX N u 3
+KPX N udieresis 3
+KPX O A -44
+KPX O AE -75
+KPX O Aacute -44
+KPX O Adieresis -44
+KPX O Aring -44
+KPX O T -30
+KPX O V -42
+KPX O W -23
+KPX O X -39
+KPX O Y -54
+KPX Oacute A -44
+KPX Oacute T -30
+KPX Oacute V -42
+KPX Oacute W -23
+KPX Oacute Y -54
+KPX Ocircumflex T -30
+KPX Ocircumflex V -42
+KPX Ocircumflex Y -54
+KPX Odieresis A -44
+KPX Odieresis T -30
+KPX Odieresis V -42
+KPX Odieresis W -23
+KPX Odieresis X -39
+KPX Odieresis Y -54
+KPX Ograve T -30
+KPX Ograve V -42
+KPX Ograve Y -54
+KPX Oslash A -41
+KPX Otilde T -30
+KPX Otilde V -42
+KPX Otilde Y -54
+KPX P A -64
+KPX P AE -112
+KPX P Aacute -64
+KPX P Adieresis -64
+KPX P Aring -64
+KPX P J -71
+KPX P a -24
+KPX P aacute -24
+KPX P adieresis -24
+KPX P ae -25
+KPX P aring -24
+KPX P comma -98
+KPX P e -25
+KPX P eacute -25
+KPX P hyphen -28
+KPX P o -26
+KPX P oacute -26
+KPX P odieresis -26
+KPX P oe -24
+KPX P oslash -27
+KPX P period -98
+KPX R C -1
+KPX R Ccedilla 0
+KPX R G -1
+KPX R O 0
+KPX R OE -4
+KPX R Oacute 0
+KPX R Odieresis 0
+KPX R T 4
+KPX R U 2
+KPX R Udieresis 2
+KPX R V -21
+KPX R W -9
+KPX R Y -26
+KPX R a -7
+KPX R aacute -7
+KPX R adieresis -7
+KPX R ae -8
+KPX R aring -7
+KPX R e -9
+KPX R eacute -9
+KPX R hyphen -22
+KPX R o -10
+KPX R oacute -10
+KPX R odieresis -10
+KPX R oe -9
+KPX R u 1
+KPX R uacute 1
+KPX R udieresis 1
+KPX R y 7
+KPX S A -19
+KPX S AE -35
+KPX S Aacute -19
+KPX S Adieresis -19
+KPX S Aring -19
+KPX S T -3
+KPX S V -28
+KPX S W -10
+KPX S Y -33
+KPX S t 10
+KPX T A -47
+KPX T AE -52
+KPX T Aacute -47
+KPX T Acircumflex -47
+KPX T Adieresis -47
+KPX T Agrave -47
+KPX T Aring -47
+KPX T Atilde -47
+KPX T C -27
+KPX T G -27
+KPX T J -46
+KPX T O -27
+KPX T OE -30
+KPX T Oacute -27
+KPX T Ocircumflex -27
+KPX T Odieresis -27
+KPX T Ograve -27
+KPX T Oslash -25
+KPX T Otilde -27
+KPX T S 1
+KPX T V 22
+KPX T W 23
+KPX T Y 24
+KPX T a -38
+KPX T ae -39
+KPX T c -41
+KPX T colon -37
+KPX T comma -30
+KPX T e -40
+KPX T g -36
+KPX T guillemotleft -33
+KPX T guilsinglleft -33
+KPX T hyphen -33
+KPX T i -2
+KPX T j -11
+KPX T o -40
+KPX T oslash -39
+KPX T period -29
+KPX T r -25
+KPX T s -30
+KPX T semicolon -37
+KPX T u -30
+KPX T v -48
+KPX T w -51
+KPX T y -50
+KPX U A -37
+KPX U AE -59
+KPX U Aacute -37
+KPX U Acircumflex -37
+KPX U Adieresis -37
+KPX U Aring -37
+KPX U Atilde -37
+KPX U comma -15
+KPX U m 2
+KPX U n 2
+KPX U p 1
+KPX U period -12
+KPX U r 2
+KPX Uacute A -37
+KPX Uacute comma -15
+KPX Uacute m 2
+KPX Uacute n 2
+KPX Uacute p 1
+KPX Uacute period -12
+KPX Uacute r 2
+KPX Ucircumflex A -37
+KPX Udieresis A -37
+KPX Udieresis b 1
+KPX Udieresis comma -15
+KPX Udieresis m 2
+KPX Udieresis n 2
+KPX Udieresis p 1
+KPX Udieresis period -12
+KPX Udieresis r 2
+KPX Ugrave A -37
+KPX V A -76
+KPX V AE -123
+KPX V Aacute -76
+KPX V Acircumflex -76
+KPX V Adieresis -76
+KPX V Agrave -76
+KPX V Aring -76
+KPX V Atilde -76
+KPX V C -41
+KPX V G -41
+KPX V O -41
+KPX V Oacute -41
+KPX V Ocircumflex -41
+KPX V Odieresis -41
+KPX V Ograve -41
+KPX V Oslash -39
+KPX V Otilde -41
+KPX V S -25
+KPX V T 23
+KPX V a -59
+KPX V ae -61
+KPX V colon -57
+KPX V comma -83
+KPX V e -62
+KPX V g -58
+KPX V guillemotleft -54
+KPX V guilsinglleft -54
+KPX V hyphen -54
+KPX V i -4
+KPX V o -62
+KPX V oslash -61
+KPX V period -83
+KPX V r -41
+KPX V semicolon -57
+KPX V u -44
+KPX V y -20
+KPX W A -55
+KPX W AE -90
+KPX W Aacute -55
+KPX W Acircumflex -55
+KPX W Adieresis -55
+KPX W Agrave -55
+KPX W Aring -55
+KPX W Atilde -55
+KPX W C -22
+KPX W G -22
+KPX W O -21
+KPX W Oacute -21
+KPX W Ocircumflex -21
+KPX W Odieresis -21
+KPX W Ograve -21
+KPX W Oslash -19
+KPX W Otilde -21
+KPX W S -10
+KPX W T 25
+KPX W a -36
+KPX W ae -37
+KPX W colon -38
+KPX W comma -52
+KPX W e -38
+KPX W g -34
+KPX W guillemotleft -31
+KPX W guilsinglleft -31
+KPX W hyphen -31
+KPX W i -2
+KPX W o -38
+KPX W oslash -37
+KPX W period -51
+KPX W r -22
+KPX W semicolon -39
+KPX W u -28
+KPX W y -9
+KPX X C -36
+KPX X O -35
+KPX X Odieresis -35
+KPX X Q -35
+KPX X a -43
+KPX X e -46
+KPX X hyphen -61
+KPX X o -46
+KPX X u -36
+KPX X y -49
+KPX Y A -81
+KPX Y AE -100
+KPX Y Aacute -81
+KPX Y Acircumflex -81
+KPX Y Adieresis -81
+KPX Y Agrave -81
+KPX Y Aring -81
+KPX Y Atilde -81
+KPX Y C -49
+KPX Y G -48
+KPX Y O -48
+KPX Y Oacute -48
+KPX Y Ocircumflex -48
+KPX Y Odieresis -48
+KPX Y Ograve -48
+KPX Y Oslash -46
+KPX Y Otilde -48
+KPX Y S -27
+KPX Y T 29
+KPX Y a -68
+KPX Y ae -69
+KPX Y colon -67
+KPX Y comma -78
+KPX Y e -70
+KPX Y g -66
+KPX Y guillemotleft -69
+KPX Y guilsinglleft -69
+KPX Y hyphen -73
+KPX Y i 1
+KPX Y o -71
+KPX Y oslash -69
+KPX Y p -47
+KPX Y period -77
+KPX Y semicolon -67
+KPX Y u -52
+KPX Y v -25
+KPX Z v -17
+KPX Z y -20
+KPX a j 8
+KPX a quoteright 7
+KPX a v -4
+KPX a w -5
+KPX a y -7
+KPX aacute v -4
+KPX aacute w -5
+KPX aacute y -7
+KPX adieresis v -4
+KPX adieresis w -5
+KPX adieresis y -7
+KPX ae v -25
+KPX ae w -24
+KPX ae y -30
+KPX agrave v -4
+KPX agrave w -5
+KPX agrave y -7
+KPX aring v -4
+KPX aring w -5
+KPX aring y -7
+KPX b v -18
+KPX b w -17
+KPX b y -23
+KPX c h -11
+KPX c k -11
+KPX comma one -83
+KPX comma quotedblright -32
+KPX comma quoteright -33
+KPX e quoteright -17
+KPX e t -2
+KPX e v -25
+KPX e w -24
+KPX e x -27
+KPX e y -30
+KPX eacute v -25
+KPX eacute w -24
+KPX eacute y -30
+KPX ecircumflex v -25
+KPX ecircumflex w -24
+KPX ecircumflex y -30
+KPX eight four 10
+KPX eight one -78
+KPX eight seven -52
+KPX f a -10
+KPX f aacute -10
+KPX f adieresis -10
+KPX f ae -11
+KPX f aring -10
+KPX f e -12
+KPX f eacute -12
+KPX f f 11
+KPX f i 3
+KPX f j -6
+KPX f l 3
+KPX f o -13
+KPX f oacute -13
+KPX f odieresis -13
+KPX f oe -12
+KPX f oslash -11
+KPX f quoteright 10
+KPX f s -2
+KPX f t 11
+KPX five four 10
+KPX five one -86
+KPX five seven -58
+KPX four four 15
+KPX four one -78
+KPX four seven -51
+KPX g a 2
+KPX g adieresis 2
+KPX g ae 1
+KPX g aring 2
+KPX g e 0
+KPX g eacute 0
+KPX g l 14
+KPX g oacute 0
+KPX g odieresis 0
+KPX g r 14
+KPX guillemotright A -16
+KPX guillemotright AE -54
+KPX guillemotright Aacute -16
+KPX guillemotright Adieresis -16
+KPX guillemotright Aring -16
+KPX guillemotright T -26
+KPX guillemotright V -47
+KPX guillemotright W -24
+KPX guillemotright Y -66
+KPX guilsinglright A -13
+KPX guilsinglright AE -51
+KPX guilsinglright Aacute -13
+KPX guilsinglright Adieresis -13
+KPX guilsinglright Aring -13
+KPX guilsinglright T -22
+KPX guilsinglright V -44
+KPX guilsinglright W -21
+KPX guilsinglright Y -62
+KPX h quoteright -11
+KPX h y -23
+KPX hyphen A -14
+KPX hyphen AE -53
+KPX hyphen Aacute -14
+KPX hyphen Adieresis -14
+KPX hyphen Aring -14
+KPX hyphen T -24
+KPX hyphen V -46
+KPX hyphen W -23
+KPX hyphen Y -68
+KPX i T -3
+KPX i j 3
+KPX k a -48
+KPX k aacute -48
+KPX k adieresis -48
+KPX k ae -50
+KPX k aring -48
+KPX k comma -15
+KPX k e -51
+KPX k eacute -51
+KPX k g -47
+KPX k hyphen -78
+KPX k o -51
+KPX k oacute -51
+KPX k odieresis -51
+KPX k period -14
+KPX k s -38
+KPX k u -40
+KPX k udieresis -34
+KPX l v -8
+KPX l y -10
+KPX m p 5
+KPX m v -20
+KPX m w -19
+KPX m y -24
+KPX n T -31
+KPX n p 5
+KPX n quoteright -10
+KPX n v -20
+KPX n w -18
+KPX n y -23
+KPX nine four -33
+KPX nine one -76
+KPX nine seven -32
+KPX o T -33
+KPX o quoteright -16
+KPX o t 1
+KPX o v -22
+KPX o w -20
+KPX o x -24
+KPX o y -27
+KPX oacute v -22
+KPX oacute w -20
+KPX oacute y -27
+KPX ocircumflex t 1
+KPX odieresis t 1
+KPX odieresis v -22
+KPX odieresis w -20
+KPX odieresis x -24
+KPX odieresis y -27
+KPX ograve v -22
+KPX ograve w -20
+KPX ograve y -27
+KPX one comma -50
+KPX one eight -50
+KPX one five -45
+KPX one four -60
+KPX one nine -55
+KPX one one -126
+KPX one period -49
+KPX one seven -93
+KPX one six -60
+KPX one three -58
+KPX one two -54
+KPX one zero -36
+KPX p t 1
+KPX p y -26
+KPX period one -83
+KPX period quotedblright -32
+KPX period quoteright -33
+KPX q c 0
+KPX q u 9
+KPX quotedblbase A 17
+KPX quotedblbase AE 0
+KPX quotedblbase T -28
+KPX quotedblbase V -82
+KPX quotedblbase W -52
+KPX quotedblbase Y -80
+KPX quotedblleft A -76
+KPX quotedblleft AE -148
+KPX quotedblleft Aacute -76
+KPX quotedblleft Adieresis -76
+KPX quotedblleft Aring -76
+KPX quotedblleft T 1
+KPX quotedblleft V 7
+KPX quotedblleft W 15
+KPX quotedblleft Y -1
+KPX quotedblright A -78
+KPX quotedblright AE -150
+KPX quotedblright Aacute -78
+KPX quotedblright Adieresis -78
+KPX quotedblright Aring -78
+KPX quotedblright T 0
+KPX quotedblright V 5
+KPX quotedblright W 14
+KPX quotedblright Y -3
+KPX quoteleft A -78
+KPX quoteleft AE -150
+KPX quoteleft Aacute -78
+KPX quoteleft Adieresis -78
+KPX quoteleft Aring -78
+KPX quoteleft T 0
+KPX quoteleft V 4
+KPX quoteleft W 13
+KPX quoteleft Y -4
+KPX quoteright A -81
+KPX quoteright AE -153
+KPX quoteright Aacute -81
+KPX quoteright Adieresis -81
+KPX quoteright Aring -81
+KPX quoteright comma -39
+KPX quoteright d -27
+KPX quoteright o -34
+KPX quoteright period -39
+KPX quoteright r -4
+KPX quoteright s -12
+KPX quoteright t 7
+KPX quoteright v 3
+KPX quoteright w 1
+KPX quoteright y 0
+KPX r a -23
+KPX r aacute -23
+KPX r acircumflex -23
+KPX r adieresis -23
+KPX r ae -24
+KPX r agrave -23
+KPX r aring -23
+KPX r c -25
+KPX r ccedilla -21
+KPX r colon -16
+KPX r comma -33
+KPX r d -21
+KPX r e -25
+KPX r eacute -25
+KPX r ecircumflex -25
+KPX r egrave -25
+KPX r f 11
+KPX r g -18
+KPX r h -10
+KPX r hyphen -37
+KPX r i -9
+KPX r j -19
+KPX r k -10
+KPX r l -10
+KPX r m -10
+KPX r n -10
+KPX r o -25
+KPX r oacute -25
+KPX r ocircumflex -25
+KPX r odieresis -25
+KPX r oe -24
+KPX r ograve -25
+KPX r oslash -26
+KPX r p -11
+KPX r period -33
+KPX r q -20
+KPX r quoteright 10
+KPX r r -10
+KPX r s -8
+KPX r semicolon -16
+KPX r t 11
+KPX r u -12
+KPX r v 12
+KPX r w 8
+KPX r x -1
+KPX r y 10
+KPX r z -9
+KPX s quoteright -3
+KPX s t 6
+KPX seven colon -63
+KPX seven comma -98
+KPX seven eight -46
+KPX seven five -41
+KPX seven four -67
+KPX seven one -77
+KPX seven period -97
+KPX seven seven -33
+KPX seven six -60
+KPX seven three -42
+KPX seven two -28
+KPX six four 16
+KPX six one -85
+KPX six seven -60
+KPX t S 3
+KPX t a -11
+KPX t aacute -11
+KPX t adieresis -11
+KPX t ae -12
+KPX t aring -11
+KPX t colon -14
+KPX t e -13
+KPX t eacute -13
+KPX t h 2
+KPX t o -13
+KPX t oacute -13
+KPX t odieresis -13
+KPX t quoteright 12
+KPX t semicolon -15
+KPX three four 9
+KPX three one -81
+KPX three seven -57
+KPX two four 8
+KPX two one -74
+KPX two seven -36
+KPX u quoteright 4
+KPX v a -31
+KPX v aacute -31
+KPX v acircumflex -31
+KPX v adieresis -31
+KPX v ae -32
+KPX v agrave -31
+KPX v aring -31
+KPX v atilde -31
+KPX v c -34
+KPX v colon -24
+KPX v comma -63
+KPX v e -33
+KPX v eacute -33
+KPX v ecircumflex -33
+KPX v egrave -33
+KPX v g -29
+KPX v hyphen -29
+KPX v l -8
+KPX v o -33
+KPX v oacute -33
+KPX v odieresis -33
+KPX v ograve -33
+KPX v oslash -33
+KPX v period -63
+KPX v s -23
+KPX v semicolon -24
+KPX w a -29
+KPX w aacute -29
+KPX w acircumflex -29
+KPX w adieresis -29
+KPX w ae -30
+KPX w agrave -29
+KPX w aring -29
+KPX w atilde -29
+KPX w c -32
+KPX w colon -27
+KPX w comma -58
+KPX w e -31
+KPX w eacute -31
+KPX w ecircumflex -31
+KPX w egrave -31
+KPX w g -28
+KPX w hyphen -27
+KPX w l -12
+KPX w o -32
+KPX w oacute -32
+KPX w odieresis -32
+KPX w ograve -32
+KPX w oslash -31
+KPX w period -57
+KPX w s -21
+KPX w semicolon -27
+KPX x a -30
+KPX x c -33
+KPX x e -32
+KPX x eacute -32
+KPX x o -32
+KPX x q -30
+KPX y a -38
+KPX y aacute -38
+KPX y acircumflex -38
+KPX y adieresis -38
+KPX y ae -39
+KPX y agrave -38
+KPX y aring -38
+KPX y atilde -38
+KPX y c -41
+KPX y colon -27
+KPX y comma -72
+KPX y e -40
+KPX y eacute -40
+KPX y ecircumflex -40
+KPX y egrave -40
+KPX y g -37
+KPX y hyphen -34
+KPX y l -10
+KPX y o -41
+KPX y oacute -41
+KPX y odieresis -41
+KPX y ograve -41
+KPX y oslash -39
+KPX y period -70
+KPX y s -30
+KPX y semicolon -27
+KPX zero four 12
+KPX zero one -63
+KPX zero seven -34
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/a010035l.pfb b/Master/xemtex/gsfonts/a010035l.pfb
new file mode 100644
index 00000000000..d66ef9bd423
--- /dev/null
+++ b/Master/xemtex/gsfonts/a010035l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/a010035l.pfm b/Master/xemtex/gsfonts/a010035l.pfm
new file mode 100644
index 00000000000..41b98b964bb
--- /dev/null
+++ b/Master/xemtex/gsfonts/a010035l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/b018012l.afm b/Master/xemtex/gsfonts/b018012l.afm
new file mode 100644
index 00000000000..5901621ba90
--- /dev/null
+++ b/Master/xemtex/gsfonts/b018012l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName URWBookmanL-Ligh
+FullName URW Bookman L Light
+FamilyName URW Bookman L
+Weight Regular
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -125
+UnderlineThickness 60
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -188 -268 1266 930
+CapHeight 681
+XHeight 485
+Descender -228
+Ascender 717
+StartCharMetrics 316
+C 32 ; WX 320 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 300 ; N exclam ; B 75 -13 219 694 ;
+C 34 ; WX 380 ; N quotedbl ; B 56 445 323 694 ;
+C 35 ; WX 620 ; N numbersign ; B 65 0 556 666 ;
+C 36 ; WX 620 ; N dollar ; B 34 -110 593 791 ;
+C 37 ; WX 900 ; N percent ; B 22 -8 873 689 ;
+C 38 ; WX 800 ; N ampersand ; B 45 -13 787 694 ;
+C 39 ; WX 220 ; N quoteright ; B 46 476 178 694 ;
+C 40 ; WX 300 ; N parenleft ; B 76 -151 278 717 ;
+C 41 ; WX 300 ; N parenright ; B 17 -151 219 717 ;
+C 42 ; WX 440 ; N asterisk ; B 54 323 391 694 ;
+C 43 ; WX 600 ; N plus ; B 51 111 555 595 ;
+C 44 ; WX 320 ; N comma ; B 90 -112 223 117 ;
+C 45 ; WX 400 ; N hyphen ; B 50 232 350 289 ;
+C 46 ; WX 320 ; N period ; B 92 -13 220 115 ;
+C 47 ; WX 600 ; N slash ; B 74 -141 532 717 ;
+C 48 ; WX 620 ; N zero ; B 40 -13 586 694 ;
+C 49 ; WX 620 ; N one ; B 160 0 501 681 ;
+C 50 ; WX 620 ; N two ; B 42 0 576 694 ;
+C 51 ; WX 620 ; N three ; B 40 -13 576 694 ;
+C 52 ; WX 620 ; N four ; B 25 0 600 681 ;
+C 53 ; WX 620 ; N five ; B 60 -13 584 717 ;
+C 54 ; WX 620 ; N six ; B 45 -13 590 694 ;
+C 55 ; WX 620 ; N seven ; B 60 0 586 681 ;
+C 56 ; WX 620 ; N eight ; B 44 -13 583 694 ;
+C 57 ; WX 620 ; N nine ; B 37 -13 576 694 ;
+C 58 ; WX 320 ; N colon ; B 92 -13 220 494 ;
+C 59 ; WX 320 ; N semicolon ; B 90 -112 223 494 ;
+C 60 ; WX 600 ; N less ; B 49 49 558 599 ;
+C 61 ; WX 600 ; N equal ; B 51 217 555 489 ;
+C 62 ; WX 600 ; N greater ; B 48 49 557 599 ;
+C 63 ; WX 540 ; N question ; B 27 -13 514 694 ;
+C 64 ; WX 820 ; N at ; B 55 -13 755 700 ;
+C 65 ; WX 680 ; N A ; B -37 0 714 681 ;
+C 66 ; WX 740 ; N B ; B 31 0 702 681 ;
+C 67 ; WX 740 ; N C ; B 44 -13 702 694 ;
+C 68 ; WX 800 ; N D ; B 31 0 752 681 ;
+C 69 ; WX 720 ; N E ; B 31 0 705 681 ;
+C 70 ; WX 640 ; N F ; B 31 0 654 681 ;
+C 71 ; WX 800 ; N G ; B 44 -13 778 694 ;
+C 72 ; WX 800 ; N H ; B 31 0 769 681 ;
+C 73 ; WX 340 ; N I ; B 31 0 301 681 ;
+C 74 ; WX 600 ; N J ; B -23 -13 567 681 ;
+C 75 ; WX 720 ; N K ; B 31 0 750 681 ;
+C 76 ; WX 600 ; N L ; B 31 0 629 681 ;
+C 77 ; WX 920 ; N M ; B 26 0 894 681 ;
+C 78 ; WX 740 ; N N ; B 26 0 722 681 ;
+C 79 ; WX 800 ; N O ; B 44 -13 758 694 ;
+C 80 ; WX 620 ; N P ; B 31 0 613 681 ;
+C 81 ; WX 820 ; N Q ; B 44 -190 769 694 ;
+C 82 ; WX 720 ; N R ; B 31 0 757 681 ;
+C 83 ; WX 660 ; N S ; B 28 -13 634 694 ;
+C 84 ; WX 620 ; N T ; B -37 0 656 681 ;
+C 85 ; WX 780 ; N U ; B 25 -13 754 681 ;
+C 86 ; WX 700 ; N V ; B -30 0 725 681 ;
+C 87 ; WX 960 ; N W ; B -30 0 984 681 ;
+C 88 ; WX 720 ; N X ; B -30 0 755 681 ;
+C 89 ; WX 640 ; N Y ; B -30 0 666 681 ;
+C 90 ; WX 640 ; N Z ; B 10 0 656 681 ;
+C 91 ; WX 300 ; N bracketleft ; B 92 -141 258 717 ;
+C 92 ; WX 600 ; N backslash ; B 74 0 532 717 ;
+C 93 ; WX 300 ; N bracketright ; B 41 -141 207 717 ;
+C 94 ; WX 600 ; N asciicircum ; B 52 318 554 722 ;
+C 95 ; WX 500 ; N underscore ; B 0 -155 500 -95 ;
+C 96 ; WX 220 ; N quoteleft ; B 46 475 178 694 ;
+C 97 ; WX 580 ; N a ; B 35 -9 587 494 ;
+C 98 ; WX 620 ; N b ; B -2 -9 582 717 ;
+C 99 ; WX 520 ; N c ; B 37 -9 498 494 ;
+C 100 ; WX 620 ; N d ; B 37 -9 591 717 ;
+C 101 ; WX 520 ; N e ; B 37 -9 491 494 ;
+C 102 ; WX 320 ; N f ; B 20 0 414 734 ;
+C 103 ; WX 540 ; N g ; B 17 -241 542 563 ;
+C 104 ; WX 660 ; N h ; B 20 0 643 717 ;
+C 105 ; WX 300 ; N i ; B 20 0 288 654 ;
+C 106 ; WX 300 ; N j ; B -109 -241 214 654 ;
+C 107 ; WX 620 ; N k ; B 20 0 628 717 ;
+C 108 ; WX 300 ; N l ; B 20 0 286 717 ;
+C 109 ; WX 940 ; N m ; B 17 0 928 494 ;
+C 110 ; WX 660 ; N n ; B 20 0 649 494 ;
+C 111 ; WX 560 ; N o ; B 37 -9 526 494 ;
+C 112 ; WX 620 ; N p ; B 20 -228 583 494 ;
+C 113 ; WX 580 ; N q ; B 37 -228 589 494 ;
+C 114 ; WX 440 ; N r ; B 20 0 447 494 ;
+C 115 ; WX 520 ; N s ; B 40 -9 487 494 ;
+C 116 ; WX 380 ; N t ; B 20 -9 388 667 ;
+C 117 ; WX 680 ; N u ; B 20 -9 653 485 ;
+C 118 ; WX 520 ; N v ; B -23 0 534 485 ;
+C 119 ; WX 780 ; N w ; B -19 0 804 485 ;
+C 120 ; WX 560 ; N x ; B -16 0 576 485 ;
+C 121 ; WX 540 ; N y ; B -23 -241 549 485 ;
+C 122 ; WX 480 ; N z ; B 7 0 476 485 ;
+C 123 ; WX 280 ; N braceleft ; B 35 -122 248 738 ;
+C 124 ; WX 600 ; N bar ; B 264 0 342 722 ;
+C 125 ; WX 280 ; N braceright ; B 35 -122 248 738 ;
+C 126 ; WX 600 ; N asciitilde ; B 52 152 556 332 ;
+C 161 ; WX 300 ; N exclamdown ; B 75 -213 219 494 ;
+C 162 ; WX 620 ; N cent ; B 116 21 511 652 ;
+C 163 ; WX 620 ; N sterling ; B 8 -13 631 694 ;
+C 164 ; WX 140 ; N fraction ; B -188 0 335 681 ;
+C 165 ; WX 620 ; N yen ; B -22 0 647 681 ;
+C 166 ; WX 620 ; N florin ; B -29 -155 633 749 ;
+C 167 ; WX 520 ; N section ; B 33 -183 486 694 ;
+C 168 ; WX 620 ; N currency ; B 58 105 563 606 ;
+C 169 ; WX 220 ; N quotesingle ; B 67 445 153 694 ;
+C 170 ; WX 400 ; N quotedblleft ; B 46 475 348 694 ;
+C 171 ; WX 360 ; N guillemotleft ; B 51 89 312 437 ;
+C 172 ; WX 240 ; N guilsinglleft ; B 51 89 189 437 ;
+C 173 ; WX 240 ; N guilsinglright ; B 51 89 189 437 ;
+C 174 ; WX 620 ; N fi ; B 20 0 608 734 ;
+C 175 ; WX 620 ; N fl ; B 20 0 606 734 ;
+C 177 ; WX 500 ; N endash ; B -15 232 515 289 ;
+C 178 ; WX 540 ; N dagger ; B 79 -161 455 694 ;
+C 179 ; WX 540 ; N daggerdbl ; B 79 -161 455 694 ;
+C 180 ; WX 320 ; N periodcentered ; B 92 196 222 326 ;
+C 182 ; WX 600 ; N paragraph ; B 14 0 577 681 ;
+C 183 ; WX 460 ; N bullet ; B 60 213 404 557 ;
+C 184 ; WX 220 ; N quotesinglbase ; B 46 -106 178 112 ;
+C 185 ; WX 400 ; N quotedblbase ; B 46 -107 348 112 ;
+C 186 ; WX 400 ; N quotedblright ; B 46 475 348 694 ;
+C 187 ; WX 360 ; N guillemotright ; B 51 89 312 437 ;
+C 188 ; WX 1000 ; N ellipsis ; B 101 -13 898 115 ;
+C 189 ; WX 1280 ; N perthousand ; B 22 -8 1266 689 ;
+C 191 ; WX 540 ; N questiondown ; B 23 -213 510 494 ;
+C 193 ; WX 340 ; N grave ; B 68 564 274 680 ;
+C 194 ; WX 340 ; N acute ; B 68 564 274 680 ;
+C 195 ; WX 420 ; N circumflex ; B 68 563 352 681 ;
+C 196 ; WX 440 ; N tilde ; B 68 573 375 659 ;
+C 197 ; WX 440 ; N macron ; B 68 587 364 637 ;
+C 198 ; WX 460 ; N breve ; B 68 563 396 682 ;
+C 199 ; WX 260 ; N dotaccent ; B 68 563 186 681 ;
+C 200 ; WX 420 ; N dieresis ; B 68 563 349 681 ;
+C 202 ; WX 320 ; N ring ; B 68 547 252 732 ;
+C 203 ; WX 320 ; N cedilla ; B 68 -200 257 0 ;
+C 205 ; WX 380 ; N hungarumlaut ; B 68 539 311 700 ;
+C 206 ; WX 320 ; N ogonek ; B 68 -152 245 0 ;
+C 207 ; WX 420 ; N caron ; B 68 562 352 680 ;
+C 208 ; WX 1000 ; N emdash ; B -15 232 1015 289 ;
+C 225 ; WX 1260 ; N AE ; B -36 0 1250 681 ;
+C 227 ; WX 420 ; N ordfeminine ; B 49 288 393 685 ;
+C 232 ; WX 600 ; N Lslash ; B 31 0 629 681 ;
+C 233 ; WX 800 ; N Oslash ; B 44 -53 758 734 ;
+C 234 ; WX 1240 ; N OE ; B 44 -13 1214 694 ;
+C 235 ; WX 420 ; N ordmasculine ; B 56 288 361 685 ;
+C 241 ; WX 860 ; N ae ; B 35 -9 832 494 ;
+C 245 ; WX 300 ; N dotlessi ; B 20 0 288 485 ;
+C 248 ; WX 320 ; N lslash ; B 20 0 291 717 ;
+C 249 ; WX 560 ; N oslash ; B 37 -42 526 543 ;
+C 250 ; WX 900 ; N oe ; B 37 -9 876 494 ;
+C 251 ; WX 660 ; N germandbls ; B -109 -110 614 694 ;
+C -1 ; WX 780 ; N Udieresis ; B 25 -13 754 871 ;
+C -1 ; WX 780 ; N Uacute ; B 25 -13 754 869 ;
+C -1 ; WX 660 ; N Scedilla ; B 28 -200 634 694 ;
+C -1 ; WX 620 ; N Tcaron ; B -37 0 656 869 ;
+C -1 ; WX 660 ; N Scaron ; B 28 -13 634 869 ;
+C -1 ; WX 720 ; N Rcaron ; B 31 0 757 869 ;
+C -1 ; WX 720 ; N Racute ; B 31 0 757 869 ;
+C -1 ; WX 660 ; N Sacute ; B 28 -13 634 869 ;
+C -1 ; WX 800 ; N Otilde ; B 44 -13 758 852 ;
+C -1 ; WX 680 ; N ucircumflex ; B 20 -9 653 681 ;
+C -1 ; WX 800 ; N Ohungarumlaut ; B 44 -13 758 889 ;
+C -1 ; WX 780 ; N Uhungarumlaut ; B 25 -13 754 889 ;
+C -1 ; WX 640 ; N Yacute ; B -30 0 666 869 ;
+C -1 ; WX 800 ; N Eth ; B 31 0 752 681 ;
+C -1 ; WX 800 ; N Dcroat ; B 31 0 752 681 ;
+C -1 ; WX 640 ; N Zacute ; B 10 0 656 869 ;
+C -1 ; WX 780 ; N Uring ; B 25 -13 754 921 ;
+C -1 ; WX 540 ; N gbreve ; B 17 -241 542 682 ;
+C -1 ; WX 520 ; N eogonek ; B 37 -152 491 494 ;
+C -1 ; WX 520 ; N edotaccent ; B 37 -9 491 681 ;
+C -1 ; WX 520 ; N ecaron ; B 37 -9 491 680 ;
+C -1 ; WX 780 ; N Ugrave ; B 25 -13 754 869 ;
+C -1 ; WX 620 ; N Thorn ; B 31 0 613 681 ;
+C -1 ; WX 520 ; N eacute ; B 37 -9 491 680 ;
+C -1 ; WX 520 ; N edieresis ; B 37 -9 491 681 ;
+C -1 ; WX 620 ; N dcaron ; B 37 -9 667 718 ;
+C -1 ; WX 520 ; N ccedilla ; B 37 -200 498 494 ;
+C -1 ; WX 520 ; N ccaron ; B 37 -9 498 680 ;
+C -1 ; WX 520 ; N cacute ; B 37 -9 498 680 ;
+C -1 ; WX 580 ; N aogonek ; B 35 -152 640 494 ;
+C -1 ; WX 580 ; N aring ; B 35 -9 587 732 ;
+C -1 ; WX 580 ; N atilde ; B 35 -9 587 659 ;
+C -1 ; WX 580 ; N abreve ; B 35 -9 587 682 ;
+C -1 ; WX 520 ; N egrave ; B 37 -9 491 680 ;
+C -1 ; WX 580 ; N agrave ; B 35 -9 587 680 ;
+C -1 ; WX 580 ; N aacute ; B 35 -9 587 680 ;
+C -1 ; WX 580 ; N adieresis ; B 35 -9 587 681 ;
+C -1 ; WX 780 ; N Uogonek ; B 25 -152 754 681 ;
+C -1 ; WX 680 ; N ugrave ; B 20 -9 653 680 ;
+C -1 ; WX 680 ; N uacute ; B 20 -9 653 680 ;
+C -1 ; WX 680 ; N udieresis ; B 20 -9 653 681 ;
+C -1 ; WX 380 ; N tcaron ; B 20 -9 388 718 ;
+C -1 ; WX 520 ; N scommaaccent ; B 40 -268 487 494 ;
+C -1 ; WX 640 ; N Zcaron ; B 10 0 656 869 ;
+C -1 ; WX 520 ; N ecircumflex ; B 37 -9 491 681 ;
+C -1 ; WX 780 ; N Ucircumflex ; B 25 -13 754 871 ;
+C -1 ; WX 580 ; N acircumflex ; B 35 -9 587 681 ;
+C -1 ; WX 640 ; N Zdotaccent ; B 10 0 656 870 ;
+C -1 ; WX 520 ; N scaron ; B 40 -9 487 680 ;
+C -1 ; WX 680 ; N Amacron ; B -37 0 714 826 ;
+C -1 ; WX 520 ; N sacute ; B 40 -9 487 680 ;
+C -1 ; WX 620 ; N Tcommaaccent ; B -37 -268 656 681 ;
+C -1 ; WX 640 ; N Ydieresis ; B -30 0 666 871 ;
+C -1 ; WX 620 ; N thorn ; B 20 -228 583 717 ;
+C -1 ; WX 720 ; N Emacron ; B 31 0 705 826 ;
+C -1 ; WX 800 ; N Ograve ; B 44 -13 758 869 ;
+C -1 ; WX 800 ; N Oacute ; B 44 -13 758 869 ;
+C -1 ; WX 800 ; N Odieresis ; B 44 -13 758 871 ;
+C -1 ; WX 740 ; N Ntilde ; B 26 0 722 852 ;
+C -1 ; WX 740 ; N Ncaron ; B 26 0 722 869 ;
+C -1 ; WX 740 ; N Nacute ; B 26 0 722 869 ;
+C -1 ; WX 600 ; N Lcaron ; B 31 0 629 694 ;
+C -1 ; WX 600 ; N Lacute ; B 31 0 629 869 ;
+C -1 ; WX 340 ; N Idotaccent ; B 31 0 301 870 ;
+C -1 ; WX 440 ; N racute ; B 20 0 447 680 ;
+C -1 ; WX 340 ; N Icircumflex ; B 28 0 312 871 ;
+C -1 ; WX 560 ; N ohungarumlaut ; B 37 -9 526 700 ;
+C -1 ; WX 560 ; N otilde ; B 37 -9 526 659 ;
+C -1 ; WX 620 ; N Euro ; B 17 -13 582 694 ;
+C -1 ; WX 560 ; N ocircumflex ; B 37 -9 526 681 ;
+C -1 ; WX 372 ; N onesuperior ; B 80 273 302 681 ;
+C -1 ; WX 372 ; N twosuperior ; B 20 273 367 689 ;
+C -1 ; WX 372 ; N threesuperior ; B 12 265 360 689 ;
+C -1 ; WX 340 ; N Igrave ; B 31 0 301 869 ;
+C -1 ; WX 340 ; N Iacute ; B 31 0 301 869 ;
+C -1 ; WX 340 ; N Imacron ; B 18 0 314 826 ;
+C -1 ; WX 340 ; N Iogonek ; B 31 -152 391 681 ;
+C -1 ; WX 340 ; N Idieresis ; B 28 0 309 871 ;
+C -1 ; WX 800 ; N Gbreve ; B 44 -13 778 871 ;
+C -1 ; WX 780 ; N Umacron ; B 25 -13 754 826 ;
+C -1 ; WX 720 ; N Kcommaaccent ; B 31 -268 750 681 ;
+C -1 ; WX 560 ; N ograve ; B 37 -9 526 680 ;
+C -1 ; WX 660 ; N Scommaaccent ; B 28 -268 634 694 ;
+C -1 ; WX 720 ; N Eogonek ; B 31 -152 705 681 ;
+C -1 ; WX 560 ; N oacute ; B 37 -9 526 680 ;
+C -1 ; WX 720 ; N Edotaccent ; B 31 0 705 870 ;
+C -1 ; WX 300 ; N iogonek ; B 20 -152 378 654 ;
+C -1 ; WX 540 ; N gcommaaccent ; B 17 -241 542 754 ;
+C -1 ; WX 560 ; N odieresis ; B 37 -9 526 681 ;
+C -1 ; WX 660 ; N ntilde ; B 20 0 649 659 ;
+C -1 ; WX 660 ; N ncaron ; B 20 0 649 680 ;
+C -1 ; WX 720 ; N Ecaron ; B 31 0 705 869 ;
+C -1 ; WX 720 ; N Ecircumflex ; B 31 0 705 871 ;
+C -1 ; WX 520 ; N scedilla ; B 40 -200 487 494 ;
+C -1 ; WX 440 ; N rcaron ; B 20 0 447 680 ;
+C -1 ; WX 720 ; N Egrave ; B 31 0 705 869 ;
+C -1 ; WX 720 ; N Eacute ; B 31 0 705 869 ;
+C -1 ; WX 800 ; N Gcommaaccent ; B 44 -268 778 694 ;
+C -1 ; WX 720 ; N Rcommaaccent ; B 31 -268 757 681 ;
+C -1 ; WX 720 ; N Edieresis ; B 31 0 705 871 ;
+C -1 ; WX 660 ; N nacute ; B 20 0 649 680 ;
+C -1 ; WX 680 ; N uogonek ; B 20 -152 743 485 ;
+C -1 ; WX 680 ; N umacron ; B 20 -9 653 637 ;
+C -1 ; WX 800 ; N Dcaron ; B 31 0 752 869 ;
+C -1 ; WX 336 ; N lcaron ; B 20 0 356 718 ;
+C -1 ; WX 740 ; N Ccaron ; B 44 -13 702 869 ;
+C -1 ; WX 740 ; N Cacute ; B 44 -13 702 869 ;
+C -1 ; WX 740 ; N Ccedilla ; B 44 -200 702 694 ;
+C -1 ; WX 400 ; N degree ; B 50 380 350 686 ;
+C -1 ; WX 680 ; N Aogonek ; B -37 -152 804 681 ;
+C -1 ; WX 600 ; N minus ; B 51 314 555 392 ;
+C -1 ; WX 600 ; N multiply ; B 51 100 555 604 ;
+C -1 ; WX 600 ; N divide ; B 51 91 555 615 ;
+C -1 ; WX 680 ; N Aring ; B -37 0 714 922 ;
+C -1 ; WX 980 ; N trademark ; B 34 273 930 681 ;
+C -1 ; WX 440 ; N rcommaaccent ; B 20 -268 447 494 ;
+C -1 ; WX 300 ; N lacute ; B 20 0 286 869 ;
+C -1 ; WX 560 ; N omacron ; B 37 -9 526 637 ;
+C -1 ; WX 680 ; N Atilde ; B -37 0 714 852 ;
+C -1 ; WX 300 ; N icircumflex ; B 8 0 292 681 ;
+C -1 ; WX 300 ; N igrave ; B 20 0 288 680 ;
+C -1 ; WX 660 ; N ncommaaccent ; B 20 -268 649 494 ;
+C -1 ; WX 300 ; N lcommaaccent ; B 20 -268 286 717 ;
+C -1 ; WX 600 ; N plusminus ; B 51 0 555 595 ;
+C -1 ; WX 930 ; N onehalf ; B 80 0 885 681 ;
+C -1 ; WX 930 ; N onequarter ; B 80 0 869 681 ;
+C -1 ; WX 930 ; N threequarters ; B 52 0 889 689 ;
+C -1 ; WX 300 ; N iacute ; B 20 0 288 680 ;
+C -1 ; WX 680 ; N Abreve ; B -37 0 714 871 ;
+C -1 ; WX 620 ; N kcommaaccent ; B 20 -268 628 717 ;
+C -1 ; WX 800 ; N Omacron ; B 44 -13 758 826 ;
+C -1 ; WX 300 ; N imacron ; B -2 0 294 637 ;
+C -1 ; WX 520 ; N emacron ; B 37 -9 491 637 ;
+C -1 ; WX 580 ; N amacron ; B 35 -9 587 637 ;
+C -1 ; WX 380 ; N tcommaaccent ; B 20 -268 388 667 ;
+C -1 ; WX 540 ; N ydieresis ; B -23 -241 549 681 ;
+C -1 ; WX 480 ; N zdotaccent ; B 7 0 476 681 ;
+C -1 ; WX 480 ; N zcaron ; B 7 0 476 680 ;
+C -1 ; WX 480 ; N zacute ; B 7 0 476 680 ;
+C -1 ; WX 540 ; N yacute ; B -23 -241 549 680 ;
+C -1 ; WX 680 ; N uhungarumlaut ; B 20 -9 653 700 ;
+C -1 ; WX 560 ; N eth ; B 37 -9 526 759 ;
+C -1 ; WX 680 ; N uring ; B 20 -9 653 732 ;
+C -1 ; WX 800 ; N Ocircumflex ; B 44 -13 758 871 ;
+C -1 ; WX 268 ; N commaaccent ; B 68 -268 200 -50 ;
+C -1 ; WX 740 ; N copyright ; B 24 0 724 700 ;
+C -1 ; WX 740 ; N registered ; B 23 0 723 700 ;
+C -1 ; WX 680 ; N Acircumflex ; B -37 0 714 871 ;
+C -1 ; WX 300 ; N idieresis ; B 8 0 289 681 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 600 ; N notequal ; B 51 101 555 610 ;
+C -1 ; WX 549 ; N radical ; B -9 -83 532 930 ;
+C -1 ; WX 680 ; N Agrave ; B -37 0 714 869 ;
+C -1 ; WX 680 ; N Aacute ; B -37 0 714 869 ;
+C -1 ; WX 600 ; N lessequal ; B 45 0 549 649 ;
+C -1 ; WX 600 ; N greaterequal ; B 51 0 555 649 ;
+C -1 ; WX 600 ; N logicalnot ; B 51 80 555 370 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 740 ; N Ncommaaccent ; B 26 -268 722 681 ;
+C -1 ; WX 620 ; N dcroat ; B 37 -9 591 717 ;
+C -1 ; WX 600 ; N brokenbar ; B 264 0 342 722 ;
+C -1 ; WX 600 ; N Lcommaaccent ; B 31 -268 629 681 ;
+C -1 ; WX 680 ; N Adieresis ; B -37 0 714 871 ;
+C -1 ; WX 680 ; N mu ; B 20 -219 653 485 ;
+C -1 ; WX 320 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -34
+KPX A Ccedilla -33
+KPX A G -34
+KPX A O -35
+KPX A Odieresis -35
+KPX A Q -36
+KPX A T -18
+KPX A U -34
+KPX A Uacute -34
+KPX A Ucircumflex -34
+KPX A Udieresis -34
+KPX A Ugrave -34
+KPX A V -71
+KPX A W -58
+KPX A Y -14
+KPX A a 21
+KPX A b 13
+KPX A c -9
+KPX A ccedilla -9
+KPX A comma 17
+KPX A d -5
+KPX A e -13
+KPX A g 24
+KPX A guillemotleft -24
+KPX A guilsinglleft -24
+KPX A hyphen -2
+KPX A o -8
+KPX A period 15
+KPX A q -9
+KPX A quotedblright -61
+KPX A quoteright -61
+KPX A t -7
+KPX A u -15
+KPX A v -36
+KPX A w -34
+KPX A y -40
+KPX Aacute C -34
+KPX Aacute G -34
+KPX Aacute O -35
+KPX Aacute Q -36
+KPX Aacute T -18
+KPX Aacute U -34
+KPX Aacute V -71
+KPX Aacute W -58
+KPX Aacute Y -14
+KPX Aacute a 21
+KPX Aacute b 13
+KPX Aacute c -9
+KPX Aacute comma 17
+KPX Aacute d -5
+KPX Aacute e -13
+KPX Aacute g 24
+KPX Aacute guillemotleft -24
+KPX Aacute guilsinglleft -24
+KPX Aacute hyphen -2
+KPX Aacute o -8
+KPX Aacute period 15
+KPX Aacute q -9
+KPX Aacute quoteright -61
+KPX Aacute t -7
+KPX Aacute u -15
+KPX Aacute v -36
+KPX Aacute w -34
+KPX Aacute y -40
+KPX Acircumflex C -34
+KPX Acircumflex G -34
+KPX Acircumflex O -35
+KPX Acircumflex Q -36
+KPX Acircumflex T -18
+KPX Acircumflex U -34
+KPX Acircumflex V -71
+KPX Acircumflex W -58
+KPX Acircumflex Y -14
+KPX Acircumflex comma 17
+KPX Acircumflex period 15
+KPX Adieresis C -34
+KPX Adieresis G -34
+KPX Adieresis O -35
+KPX Adieresis Q -36
+KPX Adieresis T -18
+KPX Adieresis U -34
+KPX Adieresis V -71
+KPX Adieresis W -58
+KPX Adieresis Y -14
+KPX Adieresis a 21
+KPX Adieresis b 13
+KPX Adieresis c -9
+KPX Adieresis comma 17
+KPX Adieresis d -5
+KPX Adieresis g 24
+KPX Adieresis guillemotleft -24
+KPX Adieresis guilsinglleft -24
+KPX Adieresis hyphen -2
+KPX Adieresis o -8
+KPX Adieresis period 15
+KPX Adieresis q -9
+KPX Adieresis quotedblright -61
+KPX Adieresis quoteright -61
+KPX Adieresis t -7
+KPX Adieresis u -15
+KPX Adieresis v -36
+KPX Adieresis w -34
+KPX Adieresis y -40
+KPX Agrave C -34
+KPX Agrave G -34
+KPX Agrave O -35
+KPX Agrave Q -36
+KPX Agrave T -18
+KPX Agrave U -34
+KPX Agrave V -71
+KPX Agrave W -58
+KPX Agrave Y -14
+KPX Agrave comma 17
+KPX Agrave period 15
+KPX Aring C -34
+KPX Aring G -34
+KPX Aring O -35
+KPX Aring Q -36
+KPX Aring T -18
+KPX Aring U -34
+KPX Aring V -71
+KPX Aring W -58
+KPX Aring Y -14
+KPX Aring a 21
+KPX Aring b 13
+KPX Aring c -9
+KPX Aring comma 17
+KPX Aring d -5
+KPX Aring e -13
+KPX Aring g 24
+KPX Aring guillemotleft -24
+KPX Aring guilsinglleft -24
+KPX Aring hyphen -2
+KPX Aring o -8
+KPX Aring period 15
+KPX Aring q -9
+KPX Aring quotedblright -61
+KPX Aring quoteright -61
+KPX Aring t -7
+KPX Aring u -15
+KPX Aring v -36
+KPX Aring w -34
+KPX Aring y -40
+KPX Atilde C -34
+KPX Atilde G -34
+KPX Atilde O -35
+KPX Atilde Q -36
+KPX Atilde T -18
+KPX Atilde U -34
+KPX Atilde V -71
+KPX Atilde W -58
+KPX Atilde Y -14
+KPX Atilde comma 17
+KPX Atilde period 15
+KPX B A 0
+KPX B AE 0
+KPX B Aacute 0
+KPX B Acircumflex 0
+KPX B Adieresis 0
+KPX B Aring 0
+KPX B Atilde 0
+KPX B O -1
+KPX B OE -1
+KPX B Oacute -1
+KPX B Ocircumflex -1
+KPX B Odieresis -1
+KPX B Ograve -1
+KPX B Oslash 0
+KPX B V -12
+KPX B W -12
+KPX B Y -12
+KPX C A -10
+KPX C AE -10
+KPX C Aacute -10
+KPX C Adieresis -10
+KPX C Aring -10
+KPX C H -14
+KPX C K -14
+KPX C O -10
+KPX C Oacute -10
+KPX C Odieresis -10
+KPX Ccedilla A -7
+KPX D A -35
+KPX D Aacute -35
+KPX D Acircumflex -35
+KPX D Adieresis -35
+KPX D Agrave -35
+KPX D Aring -35
+KPX D Atilde -35
+KPX D J 20
+KPX D T 16
+KPX D V -40
+KPX D W -32
+KPX D X -38
+KPX D Y -40
+KPX F A -61
+KPX F Aacute -61
+KPX F Acircumflex -61
+KPX F Adieresis -61
+KPX F Agrave -61
+KPX F Aring -61
+KPX F Atilde -61
+KPX F J -39
+KPX F O 7
+KPX F Odieresis 7
+KPX F a -28
+KPX F aacute -28
+KPX F adieresis -28
+KPX F ae -30
+KPX F aring -28
+KPX F comma -101
+KPX F e -38
+KPX F eacute -38
+KPX F hyphen -33
+KPX F i 17
+KPX F j 23
+KPX F o -38
+KPX F oacute -38
+KPX F odieresis -38
+KPX F oe -40
+KPX F oslash -39
+KPX F period -102
+KPX F r 18
+KPX F u 18
+KPX G A 8
+KPX G AE 8
+KPX G Aacute 8
+KPX G Acircumflex 8
+KPX G Adieresis 8
+KPX G Agrave 8
+KPX G Aring 8
+KPX G Atilde 8
+KPX G T -2
+KPX G V -24
+KPX G W -24
+KPX G Y -24
+KPX J A -36
+KPX J AE -37
+KPX J Adieresis -36
+KPX J Aring -36
+KPX K C -37
+KPX K G -37
+KPX K O -39
+KPX K OE -38
+KPX K Oacute -39
+KPX K Odieresis -39
+KPX K S 16
+KPX K T 30
+KPX K a 19
+KPX K adieresis 19
+KPX K ae 20
+KPX K aring 19
+KPX K e -15
+KPX K hyphen -32
+KPX K o -10
+KPX K oacute -10
+KPX K odieresis -10
+KPX K u -17
+KPX K udieresis -17
+KPX K y -53
+KPX L A 42
+KPX L AE 41
+KPX L Aacute 42
+KPX L Adieresis 42
+KPX L Aring 42
+KPX L C 26
+KPX L Ccedilla 27
+KPX L G 26
+KPX L O 25
+KPX L Oacute 25
+KPX L Ocircumflex 25
+KPX L Odieresis 25
+KPX L Ograve 25
+KPX L Otilde 25
+KPX L S 42
+KPX L T -54
+KPX L U 0
+KPX L Udieresis 0
+KPX L V -52
+KPX L W -36
+KPX L Y -50
+KPX L hyphen 56
+KPX L quotedblright -69
+KPX L quoteright -69
+KPX L u -1
+KPX L udieresis -1
+KPX L y -11
+KPX N A 7
+KPX N AE 6
+KPX N Aacute 7
+KPX N Adieresis 7
+KPX N Aring 7
+KPX N C -12
+KPX N Ccedilla -11
+KPX N G -11
+KPX N O -12
+KPX N Oacute -12
+KPX N Odieresis -12
+KPX N a -17
+KPX N aacute -17
+KPX N adieresis -17
+KPX N ae -16
+KPX N aring -17
+KPX N comma -16
+KPX N e -15
+KPX N eacute -15
+KPX N o -14
+KPX N oacute -14
+KPX N odieresis -14
+KPX N oslash -13
+KPX N period -17
+KPX N u -24
+KPX N udieresis -24
+KPX O A -35
+KPX O AE -35
+KPX O Aacute -35
+KPX O Adieresis -35
+KPX O Aring -35
+KPX O T 19
+KPX O V -36
+KPX O W -29
+KPX O X -38
+KPX O Y -36
+KPX Oacute A -35
+KPX Oacute T 19
+KPX Oacute V -36
+KPX Oacute W -29
+KPX Oacute Y -36
+KPX Ocircumflex T 19
+KPX Ocircumflex V -36
+KPX Ocircumflex Y -36
+KPX Odieresis A -35
+KPX Odieresis T 19
+KPX Odieresis V -36
+KPX Odieresis W -29
+KPX Odieresis X -38
+KPX Odieresis Y -36
+KPX Ograve T 19
+KPX Ograve V -36
+KPX Ograve Y -36
+KPX Oslash A -34
+KPX Otilde T 19
+KPX Otilde V -36
+KPX Otilde Y -36
+KPX P A -51
+KPX P AE -87
+KPX P Aacute -51
+KPX P Adieresis -51
+KPX P Aring -51
+KPX P J -24
+KPX P a -3
+KPX P aacute -3
+KPX P adieresis -3
+KPX P ae -5
+KPX P aring -3
+KPX P comma -94
+KPX P e -10
+KPX P eacute -10
+KPX P hyphen -9
+KPX P o -10
+KPX P oacute -10
+KPX P odieresis -10
+KPX P oe -12
+KPX P oslash -10
+KPX P period -95
+KPX R C -8
+KPX R Ccedilla -7
+KPX R G -7
+KPX R O -9
+KPX R OE -8
+KPX R Oacute -9
+KPX R Odieresis -9
+KPX R T 34
+KPX R U -16
+KPX R Udieresis -16
+KPX R V 0
+KPX R W 0
+KPX R Y 0
+KPX R a 23
+KPX R aacute 23
+KPX R adieresis 23
+KPX R ae 24
+KPX R aring 23
+KPX R e -12
+KPX R eacute -12
+KPX R hyphen -23
+KPX R o -7
+KPX R oacute -7
+KPX R odieresis -7
+KPX R oe -7
+KPX R u 2
+KPX R uacute 2
+KPX R udieresis 2
+KPX R y 24
+KPX S A 3
+KPX S AE 2
+KPX S Aacute 3
+KPX S Adieresis 3
+KPX S Aring 3
+KPX S T 22
+KPX S V -3
+KPX S W -3
+KPX S Y -3
+KPX S t -11
+KPX T A -16
+KPX T AE -16
+KPX T Aacute -16
+KPX T Acircumflex -16
+KPX T Adieresis -16
+KPX T Agrave -16
+KPX T Aring -16
+KPX T Atilde -16
+KPX T C 18
+KPX T G 19
+KPX T J -50
+KPX T O 17
+KPX T OE 18
+KPX T Oacute 17
+KPX T Ocircumflex 17
+KPX T Odieresis 17
+KPX T Ograve 17
+KPX T Oslash 17
+KPX T Otilde 17
+KPX T S 30
+KPX T V 54
+KPX T W 54
+KPX T Y 54
+KPX T a -72
+KPX T ae -71
+KPX T c -86
+KPX T colon -82
+KPX T comma -80
+KPX T e -87
+KPX T g -43
+KPX T guillemotleft -91
+KPX T guilsinglleft -91
+KPX T hyphen -69
+KPX T i 0
+KPX T j 0
+KPX T o -86
+KPX T oslash -58
+KPX T period -81
+KPX T r -49
+KPX T s -72
+KPX T semicolon -80
+KPX T u -100
+KPX T v -78
+KPX T w -80
+KPX T y -78
+KPX U A -31
+KPX U AE -32
+KPX U Aacute -31
+KPX U Acircumflex -31
+KPX U Adieresis -31
+KPX U Aring -31
+KPX U Atilde -31
+KPX U comma -35
+KPX U m -27
+KPX U n -28
+KPX U p -28
+KPX U period -36
+KPX U r -28
+KPX Uacute A -31
+KPX Uacute comma -35
+KPX Uacute m -27
+KPX Uacute n -28
+KPX Uacute p -28
+KPX Uacute period -36
+KPX Uacute r -28
+KPX Ucircumflex A -31
+KPX Udieresis A -31
+KPX Udieresis b 27
+KPX Udieresis comma -35
+KPX Udieresis m -27
+KPX Udieresis n -28
+KPX Udieresis p -28
+KPX Udieresis period -36
+KPX Udieresis r -28
+KPX Ugrave A -31
+KPX V A -80
+KPX V AE -95
+KPX V Aacute -80
+KPX V Acircumflex -80
+KPX V Adieresis -80
+KPX V Agrave -80
+KPX V Aring -80
+KPX V Atilde -80
+KPX V C -42
+KPX V G -39
+KPX V O -43
+KPX V Oacute -43
+KPX V Ocircumflex -43
+KPX V Odieresis -43
+KPX V Ograve -43
+KPX V Oslash -42
+KPX V Otilde -43
+KPX V S -7
+KPX V T 51
+KPX V a -70
+KPX V ae -73
+KPX V colon -72
+KPX V comma -102
+KPX V e -73
+KPX V g -76
+KPX V guillemotleft -70
+KPX V guilsinglleft -70
+KPX V hyphen -49
+KPX V i -18
+KPX V o -72
+KPX V oslash -71
+KPX V period -103
+KPX V r -36
+KPX V semicolon -72
+KPX V u -36
+KPX V y -12
+KPX W A -68
+KPX W AE -74
+KPX W Aacute -68
+KPX W Acircumflex -68
+KPX W Adieresis -68
+KPX W Agrave -68
+KPX W Aring -68
+KPX W Atilde -68
+KPX W C -37
+KPX W G -37
+KPX W O -38
+KPX W Oacute -38
+KPX W Ocircumflex -38
+KPX W Odieresis -38
+KPX W Ograve -38
+KPX W Oslash -35
+KPX W Otilde -38
+KPX W S -7
+KPX W T 50
+KPX W a -60
+KPX W ae -61
+KPX W colon -63
+KPX W comma -84
+KPX W e -59
+KPX W g -61
+KPX W guillemotleft -56
+KPX W guilsinglleft -55
+KPX W hyphen -35
+KPX W i -22
+KPX W o -57
+KPX W oslash -56
+KPX W period -85
+KPX W r -27
+KPX W semicolon -63
+KPX W u -27
+KPX W y -4
+KPX X C -35
+KPX X O -37
+KPX X Odieresis -37
+KPX X Q -38
+KPX X a 22
+KPX X e -13
+KPX X hyphen -47
+KPX X o -8
+KPX X u -15
+KPX X y -50
+KPX Y A -28
+KPX Y AE -28
+KPX Y Aacute -28
+KPX Y Acircumflex -28
+KPX Y Adieresis -28
+KPX Y Agrave -28
+KPX Y Aring -28
+KPX Y Atilde -28
+KPX Y C -41
+KPX Y G -38
+KPX Y O -42
+KPX Y Oacute -42
+KPX Y Ocircumflex -42
+KPX Y Odieresis -42
+KPX Y Ograve -42
+KPX Y Oslash -42
+KPX Y Otilde -42
+KPX Y S -6
+KPX Y T 51
+KPX Y a -84
+KPX Y ae -83
+KPX Y colon -86
+KPX Y comma -92
+KPX Y e -86
+KPX Y g -82
+KPX Y guillemotleft -93
+KPX Y guilsinglleft -93
+KPX Y hyphen -79
+KPX Y i -11
+KPX Y o -85
+KPX Y oslash -84
+KPX Y p -51
+KPX Y period -94
+KPX Y semicolon -86
+KPX Y u -51
+KPX Y v -26
+KPX Z v -12
+KPX Z y -16
+KPX a j -15
+KPX a quoteright -38
+KPX a v -29
+KPX a w -31
+KPX a y -37
+KPX aacute v -29
+KPX aacute w -31
+KPX aacute y -37
+KPX adieresis v -29
+KPX adieresis w -31
+KPX adieresis y -37
+KPX ae v -6
+KPX ae w -8
+KPX ae y -13
+KPX agrave v -29
+KPX agrave w -31
+KPX agrave y -37
+KPX aring v -29
+KPX aring w -31
+KPX aring y -37
+KPX b v -18
+KPX b w -20
+KPX b y -24
+KPX c h -17
+KPX c k -17
+KPX comma one -85
+KPX comma quotedblright -52
+KPX comma quoteright -52
+KPX e quoteright -6
+KPX e t -25
+KPX e v -6
+KPX e w -8
+KPX e x -6
+KPX e y -12
+KPX eacute v -6
+KPX eacute w -8
+KPX eacute y -12
+KPX ecircumflex v -6
+KPX ecircumflex w -8
+KPX ecircumflex y -12
+KPX eight four 10
+KPX eight one -84
+KPX eight seven -20
+KPX f a -14
+KPX f aacute -14
+KPX f adieresis 11
+KPX f ae -13
+KPX f aring -6
+KPX f e -24
+KPX f eacute -24
+KPX f f 14
+KPX f i 17
+KPX f j 22
+KPX f l 72
+KPX f o -23
+KPX f oacute -23
+KPX f odieresis 5
+KPX f oe -24
+KPX f oslash -22
+KPX f quoteright 60
+KPX f s -14
+KPX f t 15
+KPX five four 11
+KPX five one -92
+KPX five seven -47
+KPX four four 19
+KPX four one -74
+KPX four seven -54
+KPX g a -22
+KPX g adieresis -22
+KPX g ae -21
+KPX g aring -22
+KPX g e -15
+KPX g eacute -15
+KPX g l 11
+KPX g oacute -16
+KPX g odieresis -16
+KPX g r 9
+KPX guillemotright A -26
+KPX guillemotright AE -93
+KPX guillemotright Aacute -26
+KPX guillemotright Adieresis -26
+KPX guillemotright Aring -26
+KPX guillemotright T -90
+KPX guillemotright V -61
+KPX guillemotright W -46
+KPX guillemotright Y -76
+KPX guilsinglright A -27
+KPX guilsinglright AE -94
+KPX guilsinglright Aacute -27
+KPX guilsinglright Adieresis -27
+KPX guilsinglright Aring -27
+KPX guilsinglright T -91
+KPX guilsinglright V -63
+KPX guilsinglright W -47
+KPX guilsinglright Y -78
+KPX h quoteright -31
+KPX h y -23
+KPX hyphen A -6
+KPX hyphen AE -75
+KPX hyphen Aacute -6
+KPX hyphen Adieresis -6
+KPX hyphen Aring -6
+KPX hyphen T -70
+KPX hyphen V -43
+KPX hyphen W -27
+KPX hyphen Y -64
+KPX i T 5
+KPX i j -22
+KPX k a 5
+KPX k aacute 5
+KPX k adieresis 5
+KPX k ae 6
+KPX k aring 5
+KPX k comma -2
+KPX k e -28
+KPX k eacute -28
+KPX k g 7
+KPX k hyphen -64
+KPX k o -24
+KPX k oacute -24
+KPX k odieresis -24
+KPX k period -4
+KPX k s 5
+KPX k u 12
+KPX k udieresis 12
+KPX l v -2
+KPX l y -2
+KPX m p -24
+KPX m v -15
+KPX m w -17
+KPX m y -19
+KPX n T -44
+KPX n p -23
+KPX n quoteright -29
+KPX n v -16
+KPX n w -18
+KPX n y -22
+KPX nine four 2
+KPX nine one -86
+KPX nine seven -18
+KPX o T -85
+KPX o quoteright -16
+KPX o t -22
+KPX o v -16
+KPX o w -18
+KPX o x -20
+KPX o y -23
+KPX oacute v -16
+KPX oacute w -18
+KPX oacute y -23
+KPX ocircumflex t -22
+KPX odieresis t -22
+KPX odieresis v -16
+KPX odieresis w -18
+KPX odieresis x -20
+KPX odieresis y -23
+KPX ograve v -16
+KPX ograve w -18
+KPX ograve y -23
+KPX one comma -62
+KPX one eight -74
+KPX one five -75
+KPX one four -91
+KPX one nine -70
+KPX one one -96
+KPX one period -64
+KPX one seven -105
+KPX one six -71
+KPX one three -69
+KPX one two -37
+KPX one zero -70
+KPX p t -23
+KPX p y -21
+KPX period one -88
+KPX period quotedblright -51
+KPX period quoteright -51
+KPX q c -11
+KPX q u -13
+KPX quotedblbase A 36
+KPX quotedblbase AE 34
+KPX quotedblbase T -61
+KPX quotedblbase V -78
+KPX quotedblbase W -58
+KPX quotedblbase Y -57
+KPX quotedblleft A -65
+KPX quotedblleft AE -201
+KPX quotedblleft Aacute -65
+KPX quotedblleft Adieresis -65
+KPX quotedblleft Aring -65
+KPX quotedblleft T 36
+KPX quotedblleft V 23
+KPX quotedblleft W 29
+KPX quotedblleft Y 22
+KPX quotedblright A -66
+KPX quotedblright AE -206
+KPX quotedblright Aacute -66
+KPX quotedblright Adieresis -66
+KPX quotedblright Aring -66
+KPX quotedblright T 36
+KPX quotedblright V 29
+KPX quotedblright W 30
+KPX quotedblright Y 29
+KPX quoteleft A -60
+KPX quoteleft AE -196
+KPX quoteleft Aacute -60
+KPX quoteleft Adieresis -60
+KPX quoteleft Aring -60
+KPX quoteleft T 41
+KPX quoteleft V 28
+KPX quoteleft W 34
+KPX quoteleft Y 27
+KPX quoteright A -61
+KPX quoteright AE -201
+KPX quoteright Aacute -61
+KPX quoteright Adieresis -61
+KPX quoteright Aring -61
+KPX quoteright comma -43
+KPX quoteright d -14
+KPX quoteright o -13
+KPX quoteright period -43
+KPX quoteright r -3
+KPX quoteright s -8
+KPX quoteright t -1
+KPX quoteright v 19
+KPX quoteright w 17
+KPX quoteright y 19
+KPX r a 2
+KPX r aacute 2
+KPX r acircumflex 2
+KPX r adieresis 2
+KPX r ae 0
+KPX r agrave 2
+KPX r aring 2
+KPX r c -6
+KPX r ccedilla -6
+KPX r colon -3
+KPX r comma -80
+KPX r d -6
+KPX r e -6
+KPX r eacute -6
+KPX r ecircumflex -6
+KPX r egrave -6
+KPX r f 26
+KPX r g -6
+KPX r h -14
+KPX r hyphen -76
+KPX r i 28
+KPX r j 29
+KPX r k -14
+KPX r l -14
+KPX r m 30
+KPX r n 28
+KPX r o -6
+KPX r oacute -6
+KPX r ocircumflex -6
+KPX r odieresis -6
+KPX r oe -7
+KPX r ograve -6
+KPX r oslash -6
+KPX r p 28
+KPX r period -82
+KPX r q -8
+KPX r quoteright 4
+KPX r r 28
+KPX r s 2
+KPX r semicolon -3
+KPX r t 28
+KPX r u 28
+KPX r v 49
+KPX r w 47
+KPX r x 32
+KPX r y 48
+KPX r z 11
+KPX s quoteright -19
+KPX s t -22
+KPX seven colon -77
+KPX seven comma -110
+KPX seven eight -31
+KPX seven five -24
+KPX seven four -90
+KPX seven one -55
+KPX seven period -111
+KPX seven seven -14
+KPX seven six -45
+KPX seven three -28
+KPX seven two -18
+KPX six four 14
+KPX six one -77
+KPX six seven -20
+KPX t S 4
+KPX t a 15
+KPX t aacute 15
+KPX t adieresis 15
+KPX t ae 15
+KPX t aring 15
+KPX t colon -4
+KPX t e -12
+KPX t eacute -12
+KPX t h 18
+KPX t o -8
+KPX t oacute -8
+KPX t odieresis -8
+KPX t quoteright -14
+KPX t semicolon -3
+KPX three four 6
+KPX three one -90
+KPX three seven -26
+KPX two four 2
+KPX two one -78
+KPX two seven -30
+KPX u quoteright -30
+KPX v a -10
+KPX v aacute -10
+KPX v acircumflex -10
+KPX v adieresis -10
+KPX v ae -12
+KPX v agrave -10
+KPX v aring -10
+KPX v atilde -10
+KPX v c -21
+KPX v colon -1
+KPX v comma -82
+KPX v e -22
+KPX v eacute -22
+KPX v ecircumflex -22
+KPX v egrave -22
+KPX v g -18
+KPX v hyphen -24
+KPX v l -10
+KPX v o -21
+KPX v oacute -21
+KPX v odieresis -21
+KPX v ograve -21
+KPX v oslash -22
+KPX v period -82
+KPX v s -9
+KPX v semicolon -1
+KPX w a -5
+KPX w aacute -5
+KPX w acircumflex -5
+KPX w adieresis -5
+KPX w ae -8
+KPX w agrave -5
+KPX w aring -5
+KPX w atilde -5
+KPX w c -17
+KPX w colon 3
+KPX w comma -72
+KPX w e -17
+KPX w eacute -17
+KPX w ecircumflex -17
+KPX w egrave -17
+KPX w g -14
+KPX w hyphen -17
+KPX w l -5
+KPX w o -16
+KPX w oacute -16
+KPX w odieresis -16
+KPX w ograve -16
+KPX w oslash -17
+KPX w period -72
+KPX w s -4
+KPX w semicolon 3
+KPX x a 8
+KPX x c -22
+KPX x e -26
+KPX x eacute -26
+KPX x o -21
+KPX x q -22
+KPX y a -20
+KPX y aacute -20
+KPX y acircumflex -20
+KPX y adieresis -20
+KPX y ae -22
+KPX y agrave -20
+KPX y aring -20
+KPX y atilde -20
+KPX y c -30
+KPX y colon -5
+KPX y comma -88
+KPX y e -31
+KPX y eacute -31
+KPX y ecircumflex -31
+KPX y egrave -31
+KPX y g -27
+KPX y hyphen -29
+KPX y l -13
+KPX y o -29
+KPX y oacute -29
+KPX y odieresis -29
+KPX y ograve -29
+KPX y oslash -31
+KPX y period -88
+KPX y s -17
+KPX y semicolon -5
+KPX zero four 8
+KPX zero one -82
+KPX zero seven -18
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/b018012l.pfb b/Master/xemtex/gsfonts/b018012l.pfb
new file mode 100644
index 00000000000..47219db0b10
--- /dev/null
+++ b/Master/xemtex/gsfonts/b018012l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/b018012l.pfm b/Master/xemtex/gsfonts/b018012l.pfm
new file mode 100644
index 00000000000..55ef814b600
--- /dev/null
+++ b/Master/xemtex/gsfonts/b018012l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/b018015l.afm b/Master/xemtex/gsfonts/b018015l.afm
new file mode 100644
index 00000000000..4f02cad8149
--- /dev/null
+++ b/Master/xemtex/gsfonts/b018015l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName URWBookmanL-DemiBold
+FullName URW Bookman L Demi Bold
+FamilyName URW Bookman L
+Weight Bold
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -125
+UnderlineThickness 60
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -194 -306 1346 927
+CapHeight 681
+XHeight 502
+Descender -213
+Ascender 724
+StartCharMetrics 316
+C 32 ; WX 340 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 360 ; N exclam ; B 82 -13 282 694 ;
+C 34 ; WX 420 ; N quotedbl ; B 11 383 369 694 ;
+C 35 ; WX 660 ; N numbersign ; B 84 0 576 681 ;
+C 36 ; WX 660 ; N dollar ; B 48 -120 620 805 ;
+C 37 ; WX 940 ; N percent ; B 12 -8 924 689 ;
+C 38 ; WX 800 ; N ampersand ; B 21 -13 772 694 ;
+C 39 ; WX 320 ; N quoteright ; B 82 438 242 694 ;
+C 40 ; WX 320 ; N parenleft ; B 48 -155 289 737 ;
+C 41 ; WX 320 ; N parenright ; B 20 -155 262 737 ;
+C 42 ; WX 460 ; N asterisk ; B 62 317 405 694 ;
+C 43 ; WX 600 ; N plus ; B 51 108 555 597 ;
+C 44 ; WX 340 ; N comma ; B 78 -120 257 167 ;
+C 45 ; WX 360 ; N hyphen ; B 20 210 340 318 ;
+C 46 ; WX 340 ; N period ; B 76 -13 257 168 ;
+C 47 ; WX 600 ; N slash ; B 50 -138 555 720 ;
+C 48 ; WX 660 ; N zero ; B 30 -13 639 694 ;
+C 49 ; WX 660 ; N one ; B 137 0 568 681 ;
+C 50 ; WX 660 ; N two ; B 41 0 628 694 ;
+C 51 ; WX 660 ; N three ; B 37 -13 631 694 ;
+C 52 ; WX 660 ; N four ; B 19 0 649 681 ;
+C 53 ; WX 660 ; N five ; B 44 -13 623 724 ;
+C 54 ; WX 660 ; N six ; B 34 -13 634 694 ;
+C 55 ; WX 660 ; N seven ; B 36 0 632 681 ;
+C 56 ; WX 660 ; N eight ; B 36 -13 633 694 ;
+C 57 ; WX 660 ; N nine ; B 33 -13 636 694 ;
+C 58 ; WX 340 ; N colon ; B 76 -13 257 516 ;
+C 59 ; WX 340 ; N semicolon ; B 75 -120 259 516 ;
+C 60 ; WX 600 ; N less ; B 49 56 558 643 ;
+C 61 ; WX 600 ; N equal ; B 51 199 555 506 ;
+C 62 ; WX 600 ; N greater ; B 48 56 557 643 ;
+C 63 ; WX 660 ; N question ; B 61 -13 608 694 ;
+C 64 ; WX 820 ; N at ; B 60 -13 758 700 ;
+C 65 ; WX 720 ; N A ; B -34 0 763 681 ;
+C 66 ; WX 720 ; N B ; B 20 0 693 681 ;
+C 67 ; WX 740 ; N C ; B 35 -13 724 694 ;
+C 68 ; WX 780 ; N D ; B 20 0 748 681 ;
+C 69 ; WX 720 ; N E ; B 20 0 724 681 ;
+C 70 ; WX 680 ; N F ; B 20 0 686 681 ;
+C 71 ; WX 780 ; N G ; B 35 -13 773 694 ;
+C 72 ; WX 820 ; N H ; B 20 0 800 681 ;
+C 73 ; WX 400 ; N I ; B 20 0 379 681 ;
+C 74 ; WX 640 ; N J ; B -12 -13 622 681 ;
+C 75 ; WX 800 ; N K ; B 20 0 796 681 ;
+C 76 ; WX 640 ; N L ; B 20 0 668 681 ;
+C 77 ; WX 940 ; N M ; B 20 0 924 681 ;
+C 78 ; WX 740 ; N N ; B 20 0 724 681 ;
+C 79 ; WX 800 ; N O ; B 35 -13 769 694 ;
+C 80 ; WX 660 ; N P ; B 20 0 658 681 ;
+C 81 ; WX 800 ; N Q ; B 35 -226 775 694 ;
+C 82 ; WX 780 ; N R ; B 20 0 783 681 ;
+C 83 ; WX 660 ; N S ; B 21 -13 639 694 ;
+C 84 ; WX 700 ; N T ; B -4 0 703 681 ;
+C 85 ; WX 740 ; N U ; B 15 -13 724 681 ;
+C 86 ; WX 720 ; N V ; B -20 0 730 681 ;
+C 87 ; WX 940 ; N W ; B -20 0 963 681 ;
+C 88 ; WX 780 ; N X ; B 1 0 770 681 ;
+C 89 ; WX 700 ; N Y ; B -20 0 718 681 ;
+C 90 ; WX 640 ; N Z ; B 6 0 635 681 ;
+C 91 ; WX 300 ; N bracketleft ; B 75 -138 285 720 ;
+C 92 ; WX 600 ; N backslash ; B 50 0 555 725 ;
+C 93 ; WX 300 ; N bracketright ; B 21 -138 231 720 ;
+C 94 ; WX 600 ; N asciicircum ; B 52 318 554 722 ;
+C 95 ; WX 500 ; N underscore ; B 0 -155 500 -95 ;
+C 96 ; WX 320 ; N quoteleft ; B 82 438 242 694 ;
+C 97 ; WX 580 ; N a ; B 28 -9 588 511 ;
+C 98 ; WX 600 ; N b ; B -20 -9 568 724 ;
+C 99 ; WX 580 ; N c ; B 31 -9 550 511 ;
+C 100 ; WX 640 ; N d ; B 31 -9 622 724 ;
+C 101 ; WX 580 ; N e ; B 31 -9 548 511 ;
+C 102 ; WX 380 ; N f ; B 22 0 461 736 ;
+C 103 ; WX 580 ; N g ; B 9 -248 583 593 ;
+C 104 ; WX 680 ; N h ; B 22 0 654 724 ;
+C 105 ; WX 360 ; N i ; B 22 0 335 730 ;
+C 106 ; WX 340 ; N j ; B -94 -226 278 731 ;
+C 107 ; WX 660 ; N k ; B 22 0 643 724 ;
+C 108 ; WX 340 ; N l ; B 9 0 322 724 ;
+C 109 ; WX 1000 ; N m ; B 22 0 980 511 ;
+C 110 ; WX 680 ; N n ; B 22 0 652 511 ;
+C 111 ; WX 620 ; N o ; B 31 -9 585 511 ;
+C 112 ; WX 640 ; N p ; B 22 -213 611 511 ;
+C 113 ; WX 620 ; N q ; B 31 -213 633 511 ;
+C 114 ; WX 460 ; N r ; B 22 0 462 511 ;
+C 115 ; WX 520 ; N s ; B 22 -9 492 511 ;
+C 116 ; WX 460 ; N t ; B 22 -9 445 661 ;
+C 117 ; WX 660 ; N u ; B 22 -13 653 502 ;
+C 118 ; WX 600 ; N v ; B -6 0 593 502 ;
+C 119 ; WX 800 ; N w ; B -6 0 810 502 ;
+C 120 ; WX 600 ; N x ; B 8 0 591 502 ;
+C 121 ; WX 620 ; N y ; B 6 -221 613 502 ;
+C 122 ; WX 560 ; N z ; B 22 0 547 502 ;
+C 123 ; WX 320 ; N braceleft ; B 34 -140 280 720 ;
+C 124 ; WX 600 ; N bar ; B 243 0 362 722 ;
+C 125 ; WX 320 ; N braceright ; B 35 -140 280 720 ;
+C 126 ; WX 600 ; N asciitilde ; B 51 251 555 443 ;
+C 161 ; WX 360 ; N exclamdown ; B 84 -196 284 512 ;
+C 162 ; WX 660 ; N cent ; B 133 16 535 674 ;
+C 163 ; WX 660 ; N sterling ; B 10 -13 659 694 ;
+C 164 ; WX 120 ; N fraction ; B -194 0 312 681 ;
+C 165 ; WX 660 ; N yen ; B -28 0 696 681 ;
+C 166 ; WX 660 ; N florin ; B -46 -203 674 749 ;
+C 167 ; WX 600 ; N section ; B 36 -158 560 694 ;
+C 168 ; WX 660 ; N currency ; B 77 88 584 593 ;
+C 169 ; WX 240 ; N quotesingle ; B 42 383 178 694 ;
+C 170 ; WX 540 ; N quotedblleft ; B 82 438 449 694 ;
+C 171 ; WX 400 ; N guillemotleft ; B 34 71 360 430 ;
+C 172 ; WX 220 ; N guilsinglleft ; B 34 74 188 430 ;
+C 173 ; WX 220 ; N guilsinglright ; B 34 74 188 430 ;
+C 174 ; WX 740 ; N fi ; B 22 0 710 736 ;
+C 175 ; WX 740 ; N fl ; B 22 0 710 736 ;
+C 177 ; WX 500 ; N endash ; B -25 212 525 320 ;
+C 178 ; WX 440 ; N dagger ; B 33 -160 398 694 ;
+C 179 ; WX 380 ; N daggerdbl ; B 8 -161 380 694 ;
+C 180 ; WX 340 ; N periodcentered ; B 76 175 257 356 ;
+C 182 ; WX 800 ; N paragraph ; B 14 -98 757 681 ;
+C 183 ; WX 460 ; N bullet ; B 60 213 404 557 ;
+C 184 ; WX 320 ; N quotesinglbase ; B 82 -108 242 148 ;
+C 185 ; WX 540 ; N quotedblbase ; B 82 -108 450 148 ;
+C 186 ; WX 540 ; N quotedblright ; B 82 438 449 694 ;
+C 187 ; WX 400 ; N guillemotright ; B 34 71 360 430 ;
+C 188 ; WX 1000 ; N ellipsis ; B 76 -13 923 169 ;
+C 189 ; WX 1360 ; N perthousand ; B 12 -8 1346 689 ;
+C 191 ; WX 660 ; N questiondown ; B 62 -196 609 513 ;
+C 193 ; WX 400 ; N grave ; B 68 554 327 738 ;
+C 194 ; WX 400 ; N acute ; B 68 554 327 738 ;
+C 195 ; WX 500 ; N circumflex ; B 68 555 430 731 ;
+C 196 ; WX 480 ; N tilde ; B 69 564 421 699 ;
+C 197 ; WX 460 ; N macron ; B 68 582 383 667 ;
+C 198 ; WX 500 ; N breve ; B 68 556 429 725 ;
+C 199 ; WX 320 ; N dotaccent ; B 68 551 259 742 ;
+C 200 ; WX 500 ; N dieresis ; B 68 559 441 698 ;
+C 202 ; WX 340 ; N ring ; B 68 551 275 755 ;
+C 203 ; WX 360 ; N cedilla ; B 68 -213 284 0 ;
+C 205 ; WX 440 ; N hungarumlaut ; B 68 553 365 741 ;
+C 206 ; WX 320 ; N ogonek ; B 68 -170 246 0 ;
+C 207 ; WX 500 ; N caron ; B 68 555 430 731 ;
+C 208 ; WX 1000 ; N emdash ; B -25 212 1025 320 ;
+C 225 ; WX 1140 ; N AE ; B -34 0 1149 681 ;
+C 227 ; WX 400 ; N ordfeminine ; B 27 286 396 694 ;
+C 232 ; WX 640 ; N Lslash ; B 20 0 668 681 ;
+C 233 ; WX 800 ; N Oslash ; B 35 -110 771 779 ;
+C 234 ; WX 1220 ; N OE ; B 35 -13 1219 694 ;
+C 235 ; WX 400 ; N ordmasculine ; B 17 286 383 694 ;
+C 241 ; WX 880 ; N ae ; B 28 -9 852 511 ;
+C 245 ; WX 360 ; N dotlessi ; B 22 0 335 502 ;
+C 248 ; WX 340 ; N lslash ; B 9 0 322 724 ;
+C 249 ; WX 620 ; N oslash ; B 31 -40 586 546 ;
+C 250 ; WX 940 ; N oe ; B 31 -9 908 511 ;
+C 251 ; WX 660 ; N germandbls ; B -61 -92 644 688 ;
+C -1 ; WX 740 ; N Udieresis ; B 15 -13 724 877 ;
+C -1 ; WX 740 ; N Uacute ; B 15 -13 724 910 ;
+C -1 ; WX 660 ; N Scedilla ; B 21 -213 639 694 ;
+C -1 ; WX 700 ; N Tcaron ; B -4 0 703 904 ;
+C -1 ; WX 660 ; N Scaron ; B 21 -13 639 904 ;
+C -1 ; WX 780 ; N Rcaron ; B 20 0 783 904 ;
+C -1 ; WX 780 ; N Racute ; B 20 0 783 910 ;
+C -1 ; WX 660 ; N Sacute ; B 21 -13 639 910 ;
+C -1 ; WX 800 ; N Otilde ; B 35 -13 769 884 ;
+C -1 ; WX 660 ; N ucircumflex ; B 22 -13 653 731 ;
+C -1 ; WX 800 ; N Ohungarumlaut ; B 35 -13 769 913 ;
+C -1 ; WX 740 ; N Uhungarumlaut ; B 15 -13 724 913 ;
+C -1 ; WX 700 ; N Yacute ; B -20 0 718 910 ;
+C -1 ; WX 780 ; N Eth ; B 20 0 748 681 ;
+C -1 ; WX 780 ; N Dcroat ; B 20 0 748 681 ;
+C -1 ; WX 640 ; N Zacute ; B 6 0 635 910 ;
+C -1 ; WX 740 ; N Uring ; B 15 -13 724 927 ;
+C -1 ; WX 580 ; N gbreve ; B 9 -248 583 725 ;
+C -1 ; WX 580 ; N eogonek ; B 31 -170 548 511 ;
+C -1 ; WX 580 ; N edotaccent ; B 31 -9 548 742 ;
+C -1 ; WX 580 ; N ecaron ; B 31 -9 548 731 ;
+C -1 ; WX 740 ; N Ugrave ; B 15 -13 724 910 ;
+C -1 ; WX 660 ; N Thorn ; B 20 0 658 681 ;
+C -1 ; WX 580 ; N eacute ; B 31 -9 548 738 ;
+C -1 ; WX 580 ; N edieresis ; B 31 -9 548 698 ;
+C -1 ; WX 720 ; N dcaron ; B 31 -9 720 724 ;
+C -1 ; WX 580 ; N ccedilla ; B 31 -213 550 511 ;
+C -1 ; WX 580 ; N ccaron ; B 31 -9 550 731 ;
+C -1 ; WX 580 ; N cacute ; B 31 -9 550 738 ;
+C -1 ; WX 580 ; N aogonek ; B 28 -170 600 511 ;
+C -1 ; WX 580 ; N aring ; B 28 -9 588 755 ;
+C -1 ; WX 580 ; N atilde ; B 28 -9 588 699 ;
+C -1 ; WX 580 ; N abreve ; B 28 -9 588 725 ;
+C -1 ; WX 580 ; N egrave ; B 31 -9 548 738 ;
+C -1 ; WX 580 ; N agrave ; B 28 -9 588 738 ;
+C -1 ; WX 580 ; N aacute ; B 28 -9 588 738 ;
+C -1 ; WX 580 ; N adieresis ; B 28 -9 588 698 ;
+C -1 ; WX 740 ; N Uogonek ; B 15 -170 724 681 ;
+C -1 ; WX 660 ; N ugrave ; B 22 -13 653 738 ;
+C -1 ; WX 660 ; N uacute ; B 22 -13 653 738 ;
+C -1 ; WX 660 ; N udieresis ; B 22 -13 653 698 ;
+C -1 ; WX 470 ; N tcaron ; B 22 -9 470 724 ;
+C -1 ; WX 520 ; N scommaaccent ; B 22 -306 492 511 ;
+C -1 ; WX 640 ; N Zcaron ; B 6 0 635 904 ;
+C -1 ; WX 580 ; N ecircumflex ; B 31 -9 548 731 ;
+C -1 ; WX 740 ; N Ucircumflex ; B 15 -13 724 904 ;
+C -1 ; WX 580 ; N acircumflex ; B 28 -9 588 731 ;
+C -1 ; WX 640 ; N Zdotaccent ; B 6 0 635 914 ;
+C -1 ; WX 520 ; N scaron ; B 22 -9 492 731 ;
+C -1 ; WX 720 ; N Amacron ; B -34 0 763 839 ;
+C -1 ; WX 520 ; N sacute ; B 22 -9 492 738 ;
+C -1 ; WX 700 ; N Tcommaaccent ; B -4 -306 703 681 ;
+C -1 ; WX 700 ; N Ydieresis ; B -20 0 718 877 ;
+C -1 ; WX 640 ; N thorn ; B 22 -213 611 724 ;
+C -1 ; WX 720 ; N Emacron ; B 20 0 724 839 ;
+C -1 ; WX 800 ; N Ograve ; B 35 -13 769 910 ;
+C -1 ; WX 800 ; N Oacute ; B 35 -13 769 910 ;
+C -1 ; WX 800 ; N Odieresis ; B 35 -13 769 877 ;
+C -1 ; WX 740 ; N Ntilde ; B 20 0 724 884 ;
+C -1 ; WX 740 ; N Ncaron ; B 20 0 724 904 ;
+C -1 ; WX 740 ; N Nacute ; B 20 0 724 910 ;
+C -1 ; WX 640 ; N Lcaron ; B 20 0 668 694 ;
+C -1 ; WX 640 ; N Lacute ; B 20 0 668 910 ;
+C -1 ; WX 400 ; N Idotaccent ; B 20 0 379 914 ;
+C -1 ; WX 460 ; N racute ; B 22 0 462 738 ;
+C -1 ; WX 400 ; N Icircumflex ; B 18 0 380 904 ;
+C -1 ; WX 620 ; N ohungarumlaut ; B 31 -9 585 741 ;
+C -1 ; WX 620 ; N otilde ; B 31 -9 585 699 ;
+C -1 ; WX 660 ; N Euro ; B 9 -13 636 694 ;
+C -1 ; WX 620 ; N ocircumflex ; B 31 -9 585 731 ;
+C -1 ; WX 396 ; N onesuperior ; B 65 273 345 681 ;
+C -1 ; WX 396 ; N twosuperior ; B 14 273 396 689 ;
+C -1 ; WX 396 ; N threesuperior ; B 5 265 391 689 ;
+C -1 ; WX 400 ; N Igrave ; B 20 0 379 910 ;
+C -1 ; WX 400 ; N Iacute ; B 20 0 379 910 ;
+C -1 ; WX 400 ; N Imacron ; B 20 0 379 839 ;
+C -1 ; WX 400 ; N Iogonek ; B 20 -170 445 681 ;
+C -1 ; WX 400 ; N Idieresis ; B 18 0 391 877 ;
+C -1 ; WX 780 ; N Gbreve ; B 35 -13 773 898 ;
+C -1 ; WX 740 ; N Umacron ; B 15 -13 724 839 ;
+C -1 ; WX 800 ; N Kcommaaccent ; B 20 -306 796 681 ;
+C -1 ; WX 620 ; N ograve ; B 31 -9 585 738 ;
+C -1 ; WX 660 ; N Scommaaccent ; B 21 -306 639 694 ;
+C -1 ; WX 720 ; N Eogonek ; B 20 -170 724 681 ;
+C -1 ; WX 620 ; N oacute ; B 31 -9 585 738 ;
+C -1 ; WX 720 ; N Edotaccent ; B 20 0 724 914 ;
+C -1 ; WX 360 ; N iogonek ; B 22 -170 401 730 ;
+C -1 ; WX 580 ; N gcommaaccent ; B 9 -248 583 824 ;
+C -1 ; WX 620 ; N odieresis ; B 31 -9 585 698 ;
+C -1 ; WX 680 ; N ntilde ; B 22 0 652 699 ;
+C -1 ; WX 680 ; N ncaron ; B 22 0 652 731 ;
+C -1 ; WX 720 ; N Ecaron ; B 20 0 724 904 ;
+C -1 ; WX 720 ; N Ecircumflex ; B 20 0 724 904 ;
+C -1 ; WX 520 ; N scedilla ; B 22 -213 492 511 ;
+C -1 ; WX 460 ; N rcaron ; B 22 0 462 731 ;
+C -1 ; WX 720 ; N Egrave ; B 20 0 724 910 ;
+C -1 ; WX 720 ; N Eacute ; B 20 0 724 910 ;
+C -1 ; WX 780 ; N Gcommaaccent ; B 35 -306 773 694 ;
+C -1 ; WX 780 ; N Rcommaaccent ; B 20 -306 783 681 ;
+C -1 ; WX 720 ; N Edieresis ; B 20 0 724 877 ;
+C -1 ; WX 680 ; N nacute ; B 22 0 652 738 ;
+C -1 ; WX 660 ; N uogonek ; B 22 -170 719 502 ;
+C -1 ; WX 660 ; N umacron ; B 22 -13 653 667 ;
+C -1 ; WX 780 ; N Dcaron ; B 20 0 748 904 ;
+C -1 ; WX 430 ; N lcaron ; B 9 0 430 724 ;
+C -1 ; WX 740 ; N Ccaron ; B 35 -13 724 904 ;
+C -1 ; WX 740 ; N Cacute ; B 35 -13 724 910 ;
+C -1 ; WX 740 ; N Ccedilla ; B 35 -213 724 694 ;
+C -1 ; WX 400 ; N degree ; B 50 380 350 686 ;
+C -1 ; WX 720 ; N Aogonek ; B -34 -170 829 681 ;
+C -1 ; WX 600 ; N minus ; B 51 294 555 411 ;
+C -1 ; WX 600 ; N multiply ; B 48 100 552 604 ;
+C -1 ; WX 600 ; N divide ; B 51 72 555 633 ;
+C -1 ; WX 720 ; N Aring ; B -34 0 763 924 ;
+C -1 ; WX 980 ; N trademark ; B 42 273 982 681 ;
+C -1 ; WX 460 ; N rcommaaccent ; B 22 -306 462 511 ;
+C -1 ; WX 340 ; N lacute ; B 9 0 322 910 ;
+C -1 ; WX 620 ; N omacron ; B 31 -9 585 667 ;
+C -1 ; WX 720 ; N Atilde ; B -34 0 763 884 ;
+C -1 ; WX 360 ; N icircumflex ; B -2 0 360 731 ;
+C -1 ; WX 360 ; N igrave ; B 22 0 335 738 ;
+C -1 ; WX 680 ; N ncommaaccent ; B 22 -306 652 511 ;
+C -1 ; WX 340 ; N lcommaaccent ; B 9 -306 322 724 ;
+C -1 ; WX 600 ; N plusminus ; B 51 0 555 629 ;
+C -1 ; WX 990 ; N onehalf ; B 65 0 980 681 ;
+C -1 ; WX 990 ; N onequarter ; B 65 0 967 681 ;
+C -1 ; WX 990 ; N threequarters ; B 15 0 967 689 ;
+C -1 ; WX 360 ; N iacute ; B 22 0 335 738 ;
+C -1 ; WX 720 ; N Abreve ; B -34 0 763 898 ;
+C -1 ; WX 660 ; N kcommaaccent ; B 22 -306 643 724 ;
+C -1 ; WX 800 ; N Omacron ; B 35 -13 769 839 ;
+C -1 ; WX 360 ; N imacron ; B 18 0 335 667 ;
+C -1 ; WX 580 ; N emacron ; B 31 -9 548 667 ;
+C -1 ; WX 580 ; N amacron ; B 28 -9 588 667 ;
+C -1 ; WX 460 ; N tcommaaccent ; B 22 -306 445 661 ;
+C -1 ; WX 620 ; N ydieresis ; B 6 -221 613 698 ;
+C -1 ; WX 560 ; N zdotaccent ; B 22 0 547 742 ;
+C -1 ; WX 560 ; N zcaron ; B 22 0 547 731 ;
+C -1 ; WX 560 ; N zacute ; B 22 0 547 738 ;
+C -1 ; WX 620 ; N yacute ; B 6 -221 613 738 ;
+C -1 ; WX 660 ; N uhungarumlaut ; B 22 -13 653 741 ;
+C -1 ; WX 620 ; N eth ; B 31 -9 585 779 ;
+C -1 ; WX 660 ; N uring ; B 22 -13 653 755 ;
+C -1 ; WX 800 ; N Ocircumflex ; B 35 -13 769 904 ;
+C -1 ; WX 296 ; N commaaccent ; B 68 -306 228 -50 ;
+C -1 ; WX 740 ; N copyright ; B 23 0 723 700 ;
+C -1 ; WX 740 ; N registered ; B 23 0 723 700 ;
+C -1 ; WX 720 ; N Acircumflex ; B -34 0 763 904 ;
+C -1 ; WX 360 ; N idieresis ; B -2 0 371 698 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 600 ; N notequal ; B 51 63 555 646 ;
+C -1 ; WX 549 ; N radical ; B -34 -35 548 918 ;
+C -1 ; WX 720 ; N Agrave ; B -34 0 763 910 ;
+C -1 ; WX 720 ; N Aacute ; B -34 0 763 910 ;
+C -1 ; WX 600 ; N lessequal ; B 45 0 549 722 ;
+C -1 ; WX 600 ; N greaterequal ; B 51 0 555 722 ;
+C -1 ; WX 600 ; N logicalnot ; B 51 80 555 369 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 9 -10 478 755 ;
+C -1 ; WX 740 ; N Ncommaaccent ; B 20 -306 724 681 ;
+C -1 ; WX 640 ; N dcroat ; B 31 -9 622 724 ;
+C -1 ; WX 600 ; N brokenbar ; B 243 0 362 722 ;
+C -1 ; WX 640 ; N Lcommaaccent ; B 20 -306 668 681 ;
+C -1 ; WX 720 ; N Adieresis ; B -34 0 763 877 ;
+C -1 ; WX 660 ; N mu ; B 22 -219 653 502 ;
+C -1 ; WX 340 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -14
+KPX A Ccedilla -13
+KPX A G -9
+KPX A O -12
+KPX A Odieresis -12
+KPX A Q 9
+KPX A T -26
+KPX A U -10
+KPX A Uacute -10
+KPX A Ucircumflex -10
+KPX A Udieresis -10
+KPX A Ugrave -10
+KPX A V -59
+KPX A W -40
+KPX A Y -25
+KPX A a 37
+KPX A b 27
+KPX A c 11
+KPX A ccedilla 13
+KPX A comma 33
+KPX A d 16
+KPX A e 9
+KPX A g 40
+KPX A guillemotleft -9
+KPX A guilsinglleft -9
+KPX A hyphen 12
+KPX A o 11
+KPX A period 34
+KPX A q 13
+KPX A quotedblright -74
+KPX A quoteright -74
+KPX A t 2
+KPX A u 2
+KPX A v -26
+KPX A w -19
+KPX A y -36
+KPX Aacute C -14
+KPX Aacute G -9
+KPX Aacute O -12
+KPX Aacute Q 9
+KPX Aacute T -26
+KPX Aacute U -10
+KPX Aacute V -59
+KPX Aacute W -40
+KPX Aacute Y -25
+KPX Aacute a 37
+KPX Aacute b 27
+KPX Aacute c 11
+KPX Aacute comma 33
+KPX Aacute d 16
+KPX Aacute e 9
+KPX Aacute g 40
+KPX Aacute guillemotleft -9
+KPX Aacute guilsinglleft -9
+KPX Aacute hyphen 12
+KPX Aacute o 11
+KPX Aacute period 34
+KPX Aacute q 13
+KPX Aacute quoteright -75
+KPX Aacute t 2
+KPX Aacute u 2
+KPX Aacute v -26
+KPX Aacute w -19
+KPX Aacute y -36
+KPX Acircumflex C -14
+KPX Acircumflex G -9
+KPX Acircumflex O -12
+KPX Acircumflex Q 9
+KPX Acircumflex T -26
+KPX Acircumflex U -10
+KPX Acircumflex V -59
+KPX Acircumflex W -40
+KPX Acircumflex Y -25
+KPX Acircumflex comma 33
+KPX Acircumflex period 34
+KPX Adieresis C -14
+KPX Adieresis G -9
+KPX Adieresis O -12
+KPX Adieresis Q 9
+KPX Adieresis T -26
+KPX Adieresis U -10
+KPX Adieresis V -59
+KPX Adieresis W -40
+KPX Adieresis Y -25
+KPX Adieresis a 37
+KPX Adieresis b 27
+KPX Adieresis c 11
+KPX Adieresis comma 33
+KPX Adieresis d 16
+KPX Adieresis g 40
+KPX Adieresis guillemotleft -9
+KPX Adieresis guilsinglleft -9
+KPX Adieresis hyphen 12
+KPX Adieresis o 11
+KPX Adieresis period 34
+KPX Adieresis q 13
+KPX Adieresis quotedblright -75
+KPX Adieresis quoteright -75
+KPX Adieresis t 2
+KPX Adieresis u 2
+KPX Adieresis v -26
+KPX Adieresis w -19
+KPX Adieresis y -36
+KPX Agrave C -14
+KPX Agrave G -9
+KPX Agrave O -12
+KPX Agrave Q 9
+KPX Agrave T -26
+KPX Agrave U -10
+KPX Agrave V -59
+KPX Agrave W -40
+KPX Agrave Y -25
+KPX Agrave comma 33
+KPX Agrave period 34
+KPX Aring C -14
+KPX Aring G -9
+KPX Aring O -12
+KPX Aring Q 9
+KPX Aring T -26
+KPX Aring U -10
+KPX Aring V -59
+KPX Aring W -40
+KPX Aring Y -25
+KPX Aring a 37
+KPX Aring b 27
+KPX Aring c 11
+KPX Aring comma 33
+KPX Aring d 16
+KPX Aring e 9
+KPX Aring g 40
+KPX Aring guillemotleft -9
+KPX Aring guilsinglleft -9
+KPX Aring hyphen 12
+KPX Aring o 11
+KPX Aring period 34
+KPX Aring q 13
+KPX Aring quotedblright -75
+KPX Aring quoteright -75
+KPX Aring t 2
+KPX Aring u 2
+KPX Aring v -26
+KPX Aring w -19
+KPX Aring y -36
+KPX Atilde C -14
+KPX Atilde G -9
+KPX Atilde O -12
+KPX Atilde Q 9
+KPX Atilde T -26
+KPX Atilde U -10
+KPX Atilde V -59
+KPX Atilde W -40
+KPX Atilde Y -25
+KPX Atilde comma 33
+KPX Atilde period 34
+KPX B A 17
+KPX B AE 17
+KPX B Aacute 17
+KPX B Acircumflex 17
+KPX B Adieresis 17
+KPX B Aring 17
+KPX B Atilde 17
+KPX B O 2
+KPX B OE 1
+KPX B Oacute 2
+KPX B Ocircumflex 2
+KPX B Odieresis 2
+KPX B Ograve 2
+KPX B Oslash 2
+KPX B V 3
+KPX B W 3
+KPX B Y 3
+KPX C A 5
+KPX C AE 5
+KPX C Aacute 5
+KPX C Adieresis 5
+KPX C Aring 5
+KPX C H -2
+KPX C K -2
+KPX C O -4
+KPX C Oacute -4
+KPX C Odieresis -4
+KPX Ccedilla A 6
+KPX D A -15
+KPX D Aacute -15
+KPX D Acircumflex -15
+KPX D Adieresis -15
+KPX D Agrave -15
+KPX D Aring -15
+KPX D Atilde -15
+KPX D J 14
+KPX D T 8
+KPX D V -23
+KPX D W -18
+KPX D X -30
+KPX D Y -23
+KPX F A -62
+KPX F Aacute -62
+KPX F Acircumflex -62
+KPX F Adieresis -62
+KPX F Agrave -62
+KPX F Aring -62
+KPX F Atilde -62
+KPX F J -46
+KPX F O 4
+KPX F Odieresis 4
+KPX F a -15
+KPX F aacute -15
+KPX F adieresis -15
+KPX F ae -20
+KPX F aring -15
+KPX F comma -92
+KPX F e -31
+KPX F eacute -31
+KPX F hyphen -22
+KPX F i 20
+KPX F j 15
+KPX F o -30
+KPX F oacute -30
+KPX F odieresis -30
+KPX F oe -33
+KPX F oslash -31
+KPX F period -91
+KPX F r 20
+KPX F u 20
+KPX G A 6
+KPX G AE 6
+KPX G Aacute 6
+KPX G Acircumflex 6
+KPX G Adieresis 6
+KPX G Agrave 6
+KPX G Aring 6
+KPX G Atilde 6
+KPX G T -14
+KPX G V -23
+KPX G W -16
+KPX G Y -23
+KPX J A -18
+KPX J AE -18
+KPX J Adieresis -18
+KPX J Aring -18
+KPX K C -37
+KPX K G -32
+KPX K O -36
+KPX K OE -40
+KPX K Oacute -36
+KPX K Odieresis -36
+KPX K S -6
+KPX K T -9
+KPX K a 14
+KPX K adieresis 14
+KPX K ae 12
+KPX K aring 14
+KPX K e -13
+KPX K hyphen -34
+KPX K o -11
+KPX K oacute -11
+KPX K odieresis -11
+KPX K u -20
+KPX K udieresis -20
+KPX K y -69
+KPX L A 30
+KPX L AE 30
+KPX L Aacute 30
+KPX L Adieresis 30
+KPX L Aring 30
+KPX L C 23
+KPX L Ccedilla 23
+KPX L G 23
+KPX L O 23
+KPX L Oacute 23
+KPX L Ocircumflex 23
+KPX L Odieresis 23
+KPX L Ograve 23
+KPX L Otilde 23
+KPX L S 35
+KPX L T -54
+KPX L U -5
+KPX L Udieresis -5
+KPX L V -52
+KPX L W -28
+KPX L Y -56
+KPX L hyphen 58
+KPX L quotedblright -80
+KPX L quoteright -80
+KPX L u 0
+KPX L udieresis -1
+KPX L y -22
+KPX N A -2
+KPX N AE -2
+KPX N Aacute -2
+KPX N Adieresis -2
+KPX N Aring -2
+KPX N C -11
+KPX N Ccedilla -11
+KPX N G -11
+KPX N O -13
+KPX N Oacute -13
+KPX N Odieresis -13
+KPX N a -12
+KPX N aacute -12
+KPX N adieresis -12
+KPX N ae -14
+KPX N aring -12
+KPX N comma -17
+KPX N e -17
+KPX N eacute -17
+KPX N o -17
+KPX N oacute -17
+KPX N odieresis -17
+KPX N oslash -15
+KPX N period -16
+KPX N u -22
+KPX N udieresis -23
+KPX O A -20
+KPX O AE -20
+KPX O Aacute -20
+KPX O Adieresis -20
+KPX O Aring -20
+KPX O T 10
+KPX O V -22
+KPX O W -19
+KPX O X -32
+KPX O Y -22
+KPX Oacute A -20
+KPX Oacute T 10
+KPX Oacute V -22
+KPX Oacute W -19
+KPX Oacute Y -22
+KPX Ocircumflex T 10
+KPX Ocircumflex V -22
+KPX Ocircumflex Y -22
+KPX Odieresis A -20
+KPX Odieresis T 10
+KPX Odieresis V -22
+KPX Odieresis W -19
+KPX Odieresis X -32
+KPX Odieresis Y -22
+KPX Ograve T 10
+KPX Ograve V -22
+KPX Ograve Y -22
+KPX Oslash A -18
+KPX Otilde T 10
+KPX Otilde V -22
+KPX Otilde Y -22
+KPX P A -51
+KPX P AE -92
+KPX P Aacute -51
+KPX P Adieresis -51
+KPX P Aring -51
+KPX P J -29
+KPX P a 1
+KPX P aacute 1
+KPX P adieresis 1
+KPX P ae -4
+KPX P aring 1
+KPX P comma -87
+KPX P e -8
+KPX P eacute -8
+KPX P hyphen 1
+KPX P o -7
+KPX P oacute -7
+KPX P odieresis -7
+KPX P oe -9
+KPX P oslash -7
+KPX P period -87
+KPX R C -19
+KPX R Ccedilla -19
+KPX R G -18
+KPX R O -20
+KPX R OE -21
+KPX R Oacute -20
+KPX R Odieresis -20
+KPX R T -2
+KPX R U -24
+KPX R Udieresis -24
+KPX R V -8
+KPX R W -8
+KPX R Y -8
+KPX R a 17
+KPX R aacute 17
+KPX R adieresis 17
+KPX R ae 15
+KPX R aring 17
+KPX R e -10
+KPX R eacute -10
+KPX R hyphen -21
+KPX R o -8
+KPX R oacute -8
+KPX R odieresis -8
+KPX R oe -5
+KPX R u -16
+KPX R uacute -16
+KPX R udieresis -16
+KPX R y -7
+KPX S A 12
+KPX S AE 12
+KPX S Aacute 12
+KPX S Adieresis 12
+KPX S Aring 12
+KPX S T 2
+KPX S V -8
+KPX S W -8
+KPX S Y -8
+KPX S t -2
+KPX T A -33
+KPX T AE -33
+KPX T Aacute -33
+KPX T Acircumflex -33
+KPX T Adieresis -33
+KPX T Agrave -33
+KPX T Aring -33
+KPX T Atilde -33
+KPX T C 7
+KPX T G 7
+KPX T J -58
+KPX T O 5
+KPX T OE 6
+KPX T Oacute 5
+KPX T Ocircumflex 5
+KPX T Odieresis 5
+KPX T Ograve 5
+KPX T Oslash 5
+KPX T Otilde 5
+KPX T S 14
+KPX T V 20
+KPX T W 20
+KPX T Y 20
+KPX T a -14
+KPX T ae -20
+KPX T c -33
+KPX T colon -9
+KPX T comma -77
+KPX T e -34
+KPX T g -23
+KPX T guillemotleft -95
+KPX T guilsinglleft -94
+KPX T hyphen -70
+KPX T i 23
+KPX T j 14
+KPX T o -33
+KPX T oslash -32
+KPX T period -77
+KPX T r 23
+KPX T s -11
+KPX T semicolon -8
+KPX T u 23
+KPX T v 37
+KPX T w 37
+KPX T y 31
+KPX U A -16
+KPX U AE -16
+KPX U Aacute -16
+KPX U Acircumflex -16
+KPX U Adieresis -16
+KPX U Aring -16
+KPX U Atilde -16
+KPX U comma -33
+KPX U m -21
+KPX U n -20
+KPX U p -26
+KPX U period -32
+KPX U r -20
+KPX Uacute A -16
+KPX Uacute comma -33
+KPX Uacute m -21
+KPX Uacute n -20
+KPX Uacute p -26
+KPX Uacute period -32
+KPX Uacute r -20
+KPX Ucircumflex A -16
+KPX Udieresis A -16
+KPX Udieresis b 34
+KPX Udieresis comma -33
+KPX Udieresis m -21
+KPX Udieresis n -20
+KPX Udieresis p -26
+KPX Udieresis period -32
+KPX Udieresis r -20
+KPX Ugrave A -16
+KPX V A -71
+KPX V AE -80
+KPX V Aacute -71
+KPX V Acircumflex -71
+KPX V Adieresis -71
+KPX V Agrave -71
+KPX V Aring -71
+KPX V Atilde -71
+KPX V C -26
+KPX V G -28
+KPX V O -33
+KPX V Oacute -33
+KPX V Ocircumflex -33
+KPX V Odieresis -33
+KPX V Ograve -33
+KPX V Oslash -32
+KPX V Otilde -33
+KPX V S -2
+KPX V T 17
+KPX V a -57
+KPX V ae -60
+KPX V colon -65
+KPX V comma -90
+KPX V e -63
+KPX V g -58
+KPX V guillemotleft -63
+KPX V guilsinglleft -60
+KPX V hyphen -33
+KPX V i 0
+KPX V o -62
+KPX V oslash -60
+KPX V period -89
+KPX V r -34
+KPX V semicolon -65
+KPX V u -34
+KPX V y -20
+KPX W A -63
+KPX W AE -66
+KPX W Aacute -63
+KPX W Acircumflex -63
+KPX W Adieresis -63
+KPX W Agrave -63
+KPX W Aring -63
+KPX W Atilde -63
+KPX W C -19
+KPX W G -21
+KPX W O -27
+KPX W Oacute -27
+KPX W Ocircumflex -27
+KPX W Odieresis -27
+KPX W Ograve -27
+KPX W Oslash -26
+KPX W Otilde -27
+KPX W S 3
+KPX W T 24
+KPX W a -48
+KPX W ae -51
+KPX W colon -60
+KPX W comma -77
+KPX W e -54
+KPX W g -49
+KPX W guillemotleft -54
+KPX W guilsinglleft -51
+KPX W hyphen -24
+KPX W i 7
+KPX W o -53
+KPX W oslash -51
+KPX W period -76
+KPX W r -31
+KPX W semicolon -61
+KPX W u -31
+KPX W y -17
+KPX X C -40
+KPX X O -39
+KPX X Odieresis -39
+KPX X Q -17
+KPX X a 11
+KPX X e -16
+KPX X hyphen -50
+KPX X o -14
+KPX X u -23
+KPX X y -54
+KPX Y A -37
+KPX Y AE -37
+KPX Y Aacute -37
+KPX Y Acircumflex -37
+KPX Y Adieresis -37
+KPX Y Agrave -37
+KPX Y Aring -37
+KPX Y Atilde -37
+KPX Y C -22
+KPX Y G -24
+KPX Y O -29
+KPX Y Oacute -29
+KPX Y Ocircumflex -29
+KPX Y Odieresis -29
+KPX Y Ograve -29
+KPX Y Oslash -28
+KPX Y Otilde -29
+KPX Y S 1
+KPX Y T 21
+KPX Y a -71
+KPX Y ae -72
+KPX Y colon -82
+KPX Y comma -80
+KPX Y e -78
+KPX Y g -67
+KPX Y guillemotleft -88
+KPX Y guilsinglleft -87
+KPX Y hyphen -67
+KPX Y i 4
+KPX Y o -77
+KPX Y oslash -75
+KPX Y p -52
+KPX Y period -79
+KPX Y semicolon -83
+KPX Y u -52
+KPX Y v -30
+KPX Z v -23
+KPX Z y -27
+KPX a j -21
+KPX a quoteright -51
+KPX a v -16
+KPX a w -16
+KPX a y -23
+KPX aacute v -16
+KPX aacute w -16
+KPX aacute y -23
+KPX adieresis v -16
+KPX adieresis w -16
+KPX adieresis y -23
+KPX ae v 0
+KPX ae w 0
+KPX ae y -10
+KPX agrave v -16
+KPX agrave w -16
+KPX agrave y -23
+KPX aring v -16
+KPX aring w -16
+KPX aring y -23
+KPX b v -4
+KPX b w -4
+KPX b y -13
+KPX c h -11
+KPX c k -11
+KPX comma one -63
+KPX comma quotedblright -63
+KPX comma quoteright -63
+KPX e quoteright -37
+KPX e t -17
+KPX e v -3
+KPX e w -3
+KPX e x -7
+KPX e y -13
+KPX eacute v -3
+KPX eacute w -3
+KPX eacute y -13
+KPX ecircumflex v -3
+KPX ecircumflex w -3
+KPX ecircumflex y -13
+KPX eight four 9
+KPX eight one -66
+KPX eight seven -20
+KPX f a -3
+KPX f aacute -3
+KPX f adieresis 30
+KPX f ae -4
+KPX f aring -3
+KPX f e -17
+KPX f eacute -17
+KPX f f 14
+KPX f i 36
+KPX f j 28
+KPX f l 68
+KPX f o -16
+KPX f oacute -16
+KPX f odieresis 12
+KPX f oe -16
+KPX f oslash -14
+KPX f quoteright 30
+KPX f s -3
+KPX f t 8
+KPX five four 5
+KPX five one -74
+KPX five seven -33
+KPX four four 15
+KPX four one -70
+KPX four seven -39
+KPX g a -16
+KPX g adieresis -16
+KPX g ae -19
+KPX g aring -16
+KPX g e -18
+KPX g eacute -18
+KPX g l 15
+KPX g oacute -17
+KPX g odieresis -17
+KPX g r 9
+KPX guillemotright A -22
+KPX guillemotright AE -24
+KPX guillemotright Aacute -22
+KPX guillemotright Adieresis -22
+KPX guillemotright Aring -22
+KPX guillemotright T -95
+KPX guillemotright V -65
+KPX guillemotright W -41
+KPX guillemotright Y -82
+KPX guilsinglright A -18
+KPX guilsinglright AE -25
+KPX guilsinglright Aacute -18
+KPX guilsinglright Adieresis -18
+KPX guilsinglright Aring -18
+KPX guilsinglright T -91
+KPX guilsinglright V -58
+KPX guilsinglright W -35
+KPX guilsinglright Y -77
+KPX h quoteright -54
+KPX h y -29
+KPX hyphen A 0
+KPX hyphen AE -34
+KPX hyphen Aacute 0
+KPX hyphen Adieresis 0
+KPX hyphen Aring 0
+KPX hyphen T -68
+KPX hyphen V -32
+KPX hyphen W -9
+KPX hyphen Y -58
+KPX i T -15
+KPX i j -25
+KPX k a 7
+KPX k aacute 7
+KPX k adieresis 7
+KPX k ae 6
+KPX k aring 7
+KPX k comma -8
+KPX k e -20
+KPX k eacute -20
+KPX k g 11
+KPX k hyphen -46
+KPX k o -18
+KPX k oacute -18
+KPX k odieresis -18
+KPX k period -8
+KPX k s 4
+KPX k u -11
+KPX k udieresis -11
+KPX l v -10
+KPX l y -16
+KPX m p -18
+KPX m v -16
+KPX m w -16
+KPX m y -23
+KPX n T -35
+KPX n p -21
+KPX n quoteright -51
+KPX n v -19
+KPX n w -19
+KPX n y -26
+KPX nine four 8
+KPX nine one -63
+KPX nine seven -2
+KPX o T -36
+KPX o quoteright -41
+KPX o t -17
+KPX o v -7
+KPX o w -7
+KPX o x -15
+KPX o y -18
+KPX oacute v -7
+KPX oacute w -7
+KPX oacute y -18
+KPX ocircumflex t -17
+KPX odieresis t -17
+KPX odieresis v -7
+KPX odieresis w -7
+KPX odieresis x -15
+KPX odieresis y -18
+KPX ograve v -7
+KPX ograve w -7
+KPX ograve y -18
+KPX one comma -40
+KPX one eight -46
+KPX one five -42
+KPX one four -79
+KPX one nine -49
+KPX one one -81
+KPX one period -39
+KPX one seven -86
+KPX one six -61
+KPX one three -42
+KPX one two -35
+KPX one zero -60
+KPX p t -12
+KPX p y -13
+KPX period one -64
+KPX period quotedblright -62
+KPX period quoteright -62
+KPX q c -3
+KPX q u -9
+KPX quotedblbase A 22
+KPX quotedblbase AE 17
+KPX quotedblbase T -81
+KPX quotedblbase V -95
+KPX quotedblbase W -68
+KPX quotedblbase Y -79
+KPX quotedblleft A -90
+KPX quotedblleft AE -174
+KPX quotedblleft Aacute -91
+KPX quotedblleft Adieresis -91
+KPX quotedblleft Aring -91
+KPX quotedblleft T -2
+KPX quotedblleft V 0
+KPX quotedblleft W 9
+KPX quotedblleft Y -1
+KPX quotedblright A -92
+KPX quotedblright AE -178
+KPX quotedblright Aacute -93
+KPX quotedblright Adieresis -93
+KPX quotedblright Aring -93
+KPX quotedblright T -3
+KPX quotedblright V 4
+KPX quotedblright W 12
+KPX quotedblright Y 2
+KPX quoteleft A -84
+KPX quoteleft AE -168
+KPX quoteleft Aacute -85
+KPX quoteleft Adieresis -85
+KPX quoteleft Aring -85
+KPX quoteleft T 4
+KPX quoteleft V 7
+KPX quoteleft W 15
+KPX quoteleft Y 4
+KPX quoteright A -85
+KPX quoteright AE -172
+KPX quoteright Aacute -86
+KPX quoteright Adieresis -86
+KPX quoteright Aring -86
+KPX quoteright comma -57
+KPX quoteright d -36
+KPX quoteright o -35
+KPX quoteright period -56
+KPX quoteright r -15
+KPX quoteright s -19
+KPX quoteright t -14
+KPX quoteright v 3
+KPX quoteright w 4
+KPX quoteright y -4
+KPX r a 8
+KPX r aacute 8
+KPX r acircumflex 8
+KPX r adieresis 8
+KPX r ae 3
+KPX r agrave 8
+KPX r aring 8
+KPX r c 2
+KPX r ccedilla 1
+KPX r colon -4
+KPX r comma -61
+KPX r d 0
+KPX r e 1
+KPX r eacute 1
+KPX r ecircumflex 1
+KPX r egrave 1
+KPX r f 22
+KPX r g 1
+KPX r h -16
+KPX r hyphen 1
+KPX r i 22
+KPX r j 13
+KPX r k -13
+KPX r l -8
+KPX r m 22
+KPX r n 22
+KPX r o 2
+KPX r oacute 2
+KPX r ocircumflex 2
+KPX r odieresis 2
+KPX r oe 0
+KPX r ograve 2
+KPX r oslash 2
+KPX r p 22
+KPX r period -60
+KPX r q 2
+KPX r quoteright 2
+KPX r r 22
+KPX r s 13
+KPX r semicolon -3
+KPX r t 22
+KPX r u 22
+KPX r v 36
+KPX r w 36
+KPX r x 19
+KPX r y 30
+KPX r z 3
+KPX s quoteright -29
+KPX s t -10
+KPX seven colon -70
+KPX seven comma -106
+KPX seven eight -25
+KPX seven five -20
+KPX seven four -89
+KPX seven one -50
+KPX seven period -105
+KPX seven seven -7
+KPX seven six -32
+KPX seven three -18
+KPX seven two -11
+KPX six four 10
+KPX six one -63
+KPX six seven -19
+KPX t S -7
+KPX t a 10
+KPX t aacute 10
+KPX t adieresis 10
+KPX t ae 9
+KPX t aring 10
+KPX t colon -13
+KPX t e -12
+KPX t eacute -12
+KPX t h 12
+KPX t o -10
+KPX t oacute -10
+KPX t odieresis -10
+KPX t quoteright -48
+KPX t semicolon -14
+KPX three four 8
+KPX three one -66
+KPX three seven -16
+KPX two four 3
+KPX two one -68
+KPX two seven -18
+KPX u quoteright -30
+KPX v a 1
+KPX v aacute 1
+KPX v acircumflex 1
+KPX v adieresis 1
+KPX v ae -3
+KPX v agrave 1
+KPX v aring 1
+KPX v atilde 1
+KPX v c -11
+KPX v colon -8
+KPX v comma -81
+KPX v e -12
+KPX v eacute -12
+KPX v ecircumflex -12
+KPX v egrave -12
+KPX v g -8
+KPX v hyphen -16
+KPX v l -13
+KPX v o -11
+KPX v oacute -11
+KPX v odieresis -11
+KPX v ograve -11
+KPX v oslash -11
+KPX v period -80
+KPX v s 4
+KPX v semicolon -8
+KPX w a 9
+KPX w aacute 9
+KPX w acircumflex 9
+KPX w adieresis 9
+KPX w ae 4
+KPX w agrave 9
+KPX w aring 9
+KPX w atilde 9
+KPX w c -2
+KPX w colon 0
+KPX w comma -58
+KPX w e -3
+KPX w eacute -3
+KPX w ecircumflex -3
+KPX w egrave -3
+KPX w g 0
+KPX w hyphen -1
+KPX w l -4
+KPX w o -3
+KPX w oacute -3
+KPX w odieresis -3
+KPX w ograve -3
+KPX w oslash -3
+KPX w period -57
+KPX w s 12
+KPX w semicolon 0
+KPX x a 11
+KPX x c -14
+KPX x e -16
+KPX x eacute -16
+KPX x o -14
+KPX x q -12
+KPX y a 0
+KPX y aacute 0
+KPX y acircumflex 0
+KPX y adieresis 0
+KPX y ae -6
+KPX y agrave 0
+KPX y aring 0
+KPX y atilde 0
+KPX y c -15
+KPX y colon -8
+KPX y comma -86
+KPX y e -16
+KPX y eacute -16
+KPX y ecircumflex -16
+KPX y egrave -16
+KPX y g -10
+KPX y hyphen -23
+KPX y l -13
+KPX y o -15
+KPX y oacute -15
+KPX y odieresis -15
+KPX y ograve -15
+KPX y oslash -15
+KPX y period -86
+KPX y s 2
+KPX y semicolon -8
+KPX zero four 9
+KPX zero one -62
+KPX zero seven -3
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/b018015l.pfb b/Master/xemtex/gsfonts/b018015l.pfb
new file mode 100644
index 00000000000..c2c98b8075f
--- /dev/null
+++ b/Master/xemtex/gsfonts/b018015l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/b018015l.pfm b/Master/xemtex/gsfonts/b018015l.pfm
new file mode 100644
index 00000000000..71fed23315e
--- /dev/null
+++ b/Master/xemtex/gsfonts/b018015l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/b018032l.afm b/Master/xemtex/gsfonts/b018032l.afm
new file mode 100644
index 00000000000..92e9eec0cd5
--- /dev/null
+++ b/Master/xemtex/gsfonts/b018032l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName URWBookmanL-LighItal
+FullName URW Bookman L Light Italic
+FamilyName URW Bookman L
+Weight Regular
+ItalicAngle -10.0
+IsFixedPitch false
+UnderlinePosition -125
+UnderlineThickness 60
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -228 -281 1269 930
+CapHeight 681
+XHeight 486
+Descender -212
+Ascender 715
+StartCharMetrics 316
+C 32 ; WX 300 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 320 ; N exclam ; B 103 -13 342 694 ;
+C 34 ; WX 360 ; N quotedbl ; B 107 462 402 694 ;
+C 35 ; WX 620 ; N numbersign ; B 107 0 598 666 ;
+C 36 ; WX 620 ; N dollar ; B 78 -85 619 762 ;
+C 37 ; WX 800 ; N percent ; B 56 -8 811 689 ;
+C 38 ; WX 820 ; N ampersand ; B 65 -13 848 694 ;
+C 39 ; WX 280 ; N quoteright ; B 148 466 288 694 ;
+C 40 ; WX 280 ; N parenleft ; B 96 -120 383 715 ;
+C 41 ; WX 280 ; N parenright ; B -8 -120 279 715 ;
+C 42 ; WX 440 ; N asterisk ; B 139 324 505 698 ;
+C 43 ; WX 600 ; N plus ; B 91 106 595 594 ;
+C 44 ; WX 300 ; N comma ; B 88 -115 227 112 ;
+C 45 ; WX 320 ; N hyphen ; B 78 232 336 285 ;
+C 46 ; WX 300 ; N period ; B 96 -13 231 122 ;
+C 47 ; WX 600 ; N slash ; B 104 -121 562 715 ;
+C 48 ; WX 620 ; N zero ; B 86 -13 646 695 ;
+C 49 ; WX 620 ; N one ; B 154 0 500 681 ;
+C 50 ; WX 620 ; N two ; B 66 0 636 694 ;
+C 51 ; WX 620 ; N three ; B 55 -13 622 694 ;
+C 52 ; WX 620 ; N four ; B 69 0 634 681 ;
+C 53 ; WX 620 ; N five ; B 70 -13 614 681 ;
+C 54 ; WX 620 ; N six ; B 89 -13 657 694 ;
+C 55 ; WX 620 ; N seven ; B 143 0 672 681 ;
+C 56 ; WX 620 ; N eight ; B 61 -13 655 694 ;
+C 57 ; WX 620 ; N nine ; B 77 -13 649 694 ;
+C 58 ; WX 300 ; N colon ; B 96 -13 292 499 ;
+C 59 ; WX 300 ; N semicolon ; B 88 -115 292 499 ;
+C 60 ; WX 600 ; N less ; B 79 49 588 599 ;
+C 61 ; WX 600 ; N equal ; B 91 212 595 488 ;
+C 62 ; WX 600 ; N greater ; B 93 49 602 599 ;
+C 63 ; WX 540 ; N question ; B 114 -13 604 694 ;
+C 64 ; WX 780 ; N at ; B 102 -13 802 700 ;
+C 65 ; WX 700 ; N A ; B -25 0 720 681 ;
+C 66 ; WX 720 ; N B ; B 21 0 746 681 ;
+C 67 ; WX 720 ; N C ; B 88 -13 746 694 ;
+C 68 ; WX 740 ; N D ; B 21 0 782 681 ;
+C 69 ; WX 680 ; N E ; B 21 0 736 681 ;
+C 70 ; WX 620 ; N F ; B 21 0 743 681 ;
+C 71 ; WX 760 ; N G ; B 88 -13 813 694 ;
+C 72 ; WX 800 ; N H ; B 21 0 888 681 ;
+C 73 ; WX 320 ; N I ; B 21 0 412 681 ;
+C 74 ; WX 560 ; N J ; B -2 -13 666 681 ;
+C 75 ; WX 720 ; N K ; B 21 0 804 681 ;
+C 76 ; WX 580 ; N L ; B 21 0 656 681 ;
+C 77 ; WX 860 ; N M ; B 18 0 956 681 ;
+C 78 ; WX 720 ; N N ; B 18 0 823 681 ;
+C 79 ; WX 760 ; N O ; B 88 -13 799 694 ;
+C 80 ; WX 600 ; N P ; B 21 0 681 681 ;
+C 81 ; WX 780 ; N Q ; B 61 -191 812 694 ;
+C 82 ; WX 700 ; N R ; B 21 0 736 681 ;
+C 83 ; WX 640 ; N S ; B 61 -13 668 694 ;
+C 84 ; WX 600 ; N T ; B 50 0 725 681 ;
+C 85 ; WX 720 ; N U ; B 118 -13 842 681 ;
+C 86 ; WX 680 ; N V ; B 87 0 815 681 ;
+C 87 ; WX 960 ; N W ; B 87 0 1095 681 ;
+C 88 ; WX 700 ; N X ; B -25 0 815 681 ;
+C 89 ; WX 660 ; N Y ; B 87 0 809 681 ;
+C 90 ; WX 580 ; N Z ; B 8 0 695 681 ;
+C 91 ; WX 260 ; N bracketleft ; B 56 -121 351 715 ;
+C 92 ; WX 600 ; N backslash ; B 84 0 542 717 ;
+C 93 ; WX 260 ; N bracketright ; B 15 -120 309 715 ;
+C 94 ; WX 600 ; N asciicircum ; B 97 318 599 722 ;
+C 95 ; WX 500 ; N underscore ; B 0 -155 500 -95 ;
+C 96 ; WX 280 ; N quoteleft ; B 191 466 330 694 ;
+C 97 ; WX 620 ; N a ; B 71 -9 686 495 ;
+C 98 ; WX 600 ; N b ; B 88 -9 621 715 ;
+C 99 ; WX 480 ; N c ; B 65 -9 522 495 ;
+C 100 ; WX 640 ; N d ; B 65 -9 695 715 ;
+C 101 ; WX 540 ; N e ; B 65 -9 575 495 ;
+C 102 ; WX 340 ; N f ; B -160 -206 557 728 ;
+C 103 ; WX 560 ; N g ; B 4 -221 581 495 ;
+C 104 ; WX 620 ; N h ; B 88 -9 689 715 ;
+C 105 ; WX 280 ; N i ; B 88 -9 351 666 ;
+C 106 ; WX 280 ; N j ; B -200 -221 308 665 ;
+C 107 ; WX 600 ; N k ; B 88 -9 657 715 ;
+C 108 ; WX 280 ; N l ; B 100 -9 342 715 ;
+C 109 ; WX 880 ; N m ; B 88 -9 952 495 ;
+C 110 ; WX 620 ; N n ; B 88 -9 673 495 ;
+C 111 ; WX 540 ; N o ; B 65 -9 572 495 ;
+C 112 ; WX 600 ; N p ; B -24 -212 620 495 ;
+C 113 ; WX 560 ; N q ; B 65 -212 584 495 ;
+C 114 ; WX 400 ; N r ; B 88 0 481 495 ;
+C 115 ; WX 540 ; N s ; B 65 -9 547 495 ;
+C 116 ; WX 340 ; N t ; B 88 -9 411 665 ;
+C 117 ; WX 620 ; N u ; B 88 -9 686 486 ;
+C 118 ; WX 540 ; N v ; B 88 -9 562 499 ;
+C 119 ; WX 880 ; N w ; B 88 -9 893 499 ;
+C 120 ; WX 540 ; N x ; B 9 -13 626 499 ;
+C 121 ; WX 600 ; N y ; B 60 -221 609 486 ;
+C 122 ; WX 520 ; N z ; B 38 -9 561 495 ;
+C 123 ; WX 360 ; N braceleft ; B 125 -155 439 750 ;
+C 124 ; WX 600 ; N bar ; B 294 0 372 722 ;
+C 125 ; WX 380 ; N braceright ; B 15 -155 330 750 ;
+C 126 ; WX 600 ; N asciitilde ; B 91 152 595 332 ;
+C 161 ; WX 320 ; N exclamdown ; B 73 -212 301 494 ;
+C 162 ; WX 620 ; N cent ; B 148 -29 596 715 ;
+C 163 ; WX 620 ; N sterling ; B 4 -13 702 694 ;
+C 164 ; WX 20 ; N fraction ; B -228 0 323 681 ;
+C 165 ; WX 620 ; N yen ; B 71 0 735 681 ;
+C 166 ; WX 620 ; N florin ; B -26 -206 692 728 ;
+C 167 ; WX 620 ; N section ; B 38 -181 638 694 ;
+C 168 ; WX 620 ; N currency ; B 100 101 605 602 ;
+C 169 ; WX 200 ; N quotesingle ; B 99 462 247 694 ;
+C 170 ; WX 440 ; N quotedblleft ; B 191 466 493 694 ;
+C 171 ; WX 300 ; N guillemotleft ; B 70 99 313 406 ;
+C 172 ; WX 180 ; N guilsinglleft ; B 75 99 208 400 ;
+C 173 ; WX 180 ; N guilsinglright ; B 70 97 203 403 ;
+C 174 ; WX 640 ; N fi ; B -159 -205 709 728 ;
+C 175 ; WX 660 ; N fl ; B -159 -205 713 728 ;
+C 177 ; WX 500 ; N endash ; B 33 232 561 285 ;
+C 178 ; WX 620 ; N dagger ; B 192 -166 570 694 ;
+C 179 ; WX 620 ; N daggerdbl ; B 144 -135 566 694 ;
+C 180 ; WX 300 ; N periodcentered ; B 137 229 272 364 ;
+C 182 ; WX 620 ; N paragraph ; B 112 0 718 675 ;
+C 183 ; WX 460 ; N bullet ; B 100 213 444 557 ;
+C 184 ; WX 320 ; N quotesinglbase ; B 87 -115 226 112 ;
+C 185 ; WX 480 ; N quotedblbase ; B 87 -116 390 112 ;
+C 186 ; WX 440 ; N quotedblright ; B 148 466 451 694 ;
+C 187 ; WX 300 ; N guillemotright ; B 60 97 303 403 ;
+C 188 ; WX 1000 ; N ellipsis ; B 99 -13 900 122 ;
+C 189 ; WX 1180 ; N perthousand ; B 56 -8 1199 689 ;
+C 191 ; WX 540 ; N questiondown ; B 18 -212 508 496 ;
+C 193 ; WX 340 ; N grave ; B 182 538 377 689 ;
+C 194 ; WX 320 ; N acute ; B 178 538 373 689 ;
+C 195 ; WX 440 ; N circumflex ; B 176 541 479 666 ;
+C 196 ; WX 440 ; N tilde ; B 180 569 488 652 ;
+C 197 ; WX 440 ; N macron ; B 178 581 484 638 ;
+C 198 ; WX 440 ; N breve ; B 191 553 500 661 ;
+C 199 ; WX 260 ; N dotaccent ; B 169 552 290 673 ;
+C 200 ; WX 420 ; N dieresis ; B 185 552 467 672 ;
+C 202 ; WX 300 ; N ring ; B 178 534 334 691 ;
+C 203 ; WX 320 ; N cedilla ; B 45 -182 240 0 ;
+C 205 ; WX 340 ; N hungarumlaut ; B 167 537 402 718 ;
+C 206 ; WX 260 ; N ogonek ; B 51 -169 184 0 ;
+C 207 ; WX 440 ; N caron ; B 178 541 481 666 ;
+C 208 ; WX 1000 ; N emdash ; B 33 232 1061 285 ;
+C 225 ; WX 1220 ; N AE ; B -45 0 1269 681 ;
+C 227 ; WX 440 ; N ordfeminine ; B 94 304 513 694 ;
+C 232 ; WX 580 ; N Lslash ; B 21 0 656 681 ;
+C 233 ; WX 760 ; N Oslash ; B 88 -95 799 778 ;
+C 234 ; WX 1180 ; N OE ; B 88 -13 1237 694 ;
+C 235 ; WX 400 ; N ordmasculine ; B 94 304 455 694 ;
+C 241 ; WX 880 ; N ae ; B 71 -9 918 495 ;
+C 245 ; WX 280 ; N dotlessi ; B 88 -9 351 486 ;
+C 248 ; WX 340 ; N lslash ; B 50 -9 398 715 ;
+C 249 ; WX 540 ; N oslash ; B 65 -49 571 533 ;
+C 250 ; WX 900 ; N oe ; B 65 -9 948 495 ;
+C 251 ; WX 620 ; N germandbls ; B -121 -110 653 700 ;
+C -1 ; WX 720 ; N Udieresis ; B 118 -13 842 859 ;
+C -1 ; WX 720 ; N Uacute ; B 118 -13 842 876 ;
+C -1 ; WX 640 ; N Scedilla ; B 61 -182 668 694 ;
+C -1 ; WX 600 ; N Tcaron ; B 50 0 725 853 ;
+C -1 ; WX 640 ; N Scaron ; B 61 -13 668 853 ;
+C -1 ; WX 700 ; N Rcaron ; B 21 0 736 853 ;
+C -1 ; WX 700 ; N Racute ; B 21 0 736 876 ;
+C -1 ; WX 640 ; N Sacute ; B 61 -13 668 876 ;
+C -1 ; WX 760 ; N Otilde ; B 88 -13 799 839 ;
+C -1 ; WX 620 ; N ucircumflex ; B 88 -9 686 666 ;
+C -1 ; WX 760 ; N Ohungarumlaut ; B 88 -13 799 905 ;
+C -1 ; WX 720 ; N Uhungarumlaut ; B 118 -13 842 905 ;
+C -1 ; WX 660 ; N Yacute ; B 87 0 809 876 ;
+C -1 ; WX 740 ; N Eth ; B 21 0 782 681 ;
+C -1 ; WX 740 ; N Dcroat ; B 21 0 782 681 ;
+C -1 ; WX 580 ; N Zacute ; B 8 0 695 876 ;
+C -1 ; WX 720 ; N Uring ; B 118 -13 842 878 ;
+C -1 ; WX 560 ; N gbreve ; B 4 -221 581 661 ;
+C -1 ; WX 540 ; N eogonek ; B 65 -169 575 495 ;
+C -1 ; WX 540 ; N edotaccent ; B 65 -9 575 673 ;
+C -1 ; WX 540 ; N ecaron ; B 65 -9 575 666 ;
+C -1 ; WX 720 ; N Ugrave ; B 118 -13 842 876 ;
+C -1 ; WX 600 ; N Thorn ; B 21 0 656 681 ;
+C -1 ; WX 540 ; N eacute ; B 65 -9 575 689 ;
+C -1 ; WX 540 ; N edieresis ; B 65 -9 575 672 ;
+C -1 ; WX 730 ; N dcaron ; B 65 -9 790 723 ;
+C -1 ; WX 480 ; N ccedilla ; B 65 -182 522 495 ;
+C -1 ; WX 480 ; N ccaron ; B 65 -9 541 666 ;
+C -1 ; WX 480 ; N cacute ; B 65 -9 533 689 ;
+C -1 ; WX 620 ; N aogonek ; B 71 -169 686 495 ;
+C -1 ; WX 620 ; N aring ; B 71 -9 686 691 ;
+C -1 ; WX 620 ; N atilde ; B 71 -9 686 652 ;
+C -1 ; WX 620 ; N abreve ; B 71 -9 686 661 ;
+C -1 ; WX 540 ; N egrave ; B 65 -9 575 689 ;
+C -1 ; WX 620 ; N agrave ; B 71 -9 686 689 ;
+C -1 ; WX 620 ; N aacute ; B 71 -9 686 689 ;
+C -1 ; WX 620 ; N adieresis ; B 71 -9 686 672 ;
+C -1 ; WX 720 ; N Uogonek ; B 118 -169 842 681 ;
+C -1 ; WX 620 ; N ugrave ; B 88 -9 686 689 ;
+C -1 ; WX 620 ; N uacute ; B 88 -9 686 689 ;
+C -1 ; WX 620 ; N udieresis ; B 88 -9 686 672 ;
+C -1 ; WX 340 ; N tcaron ; B 88 -9 460 723 ;
+C -1 ; WX 540 ; N scommaaccent ; B 65 -279 547 495 ;
+C -1 ; WX 580 ; N Zcaron ; B 8 0 695 853 ;
+C -1 ; WX 540 ; N ecircumflex ; B 65 -9 575 666 ;
+C -1 ; WX 720 ; N Ucircumflex ; B 118 -13 842 853 ;
+C -1 ; WX 620 ; N acircumflex ; B 71 -9 686 666 ;
+C -1 ; WX 580 ; N Zdotaccent ; B 8 0 695 859 ;
+C -1 ; WX 540 ; N scaron ; B 65 -9 547 666 ;
+C -1 ; WX 700 ; N Amacron ; B -25 0 720 825 ;
+C -1 ; WX 540 ; N sacute ; B 65 -9 547 689 ;
+C -1 ; WX 600 ; N Tcommaaccent ; B 50 -281 725 681 ;
+C -1 ; WX 660 ; N Ydieresis ; B 87 0 809 859 ;
+C -1 ; WX 600 ; N thorn ; B -24 -212 620 715 ;
+C -1 ; WX 680 ; N Emacron ; B 21 0 736 825 ;
+C -1 ; WX 760 ; N Ograve ; B 88 -13 799 876 ;
+C -1 ; WX 760 ; N Oacute ; B 88 -13 799 876 ;
+C -1 ; WX 760 ; N Odieresis ; B 88 -13 799 859 ;
+C -1 ; WX 720 ; N Ntilde ; B 18 0 823 839 ;
+C -1 ; WX 720 ; N Ncaron ; B 18 0 823 853 ;
+C -1 ; WX 720 ; N Nacute ; B 18 0 823 876 ;
+C -1 ; WX 580 ; N Lcaron ; B 21 0 680 694 ;
+C -1 ; WX 580 ; N Lacute ; B 21 0 656 876 ;
+C -1 ; WX 320 ; N Idotaccent ; B 21 0 412 859 ;
+C -1 ; WX 400 ; N racute ; B 88 0 481 689 ;
+C -1 ; WX 320 ; N Icircumflex ; B 21 0 419 853 ;
+C -1 ; WX 540 ; N ohungarumlaut ; B 65 -9 572 718 ;
+C -1 ; WX 540 ; N otilde ; B 65 -9 572 652 ;
+C -1 ; WX 620 ; N Euro ; B 61 -13 685 694 ;
+C -1 ; WX 540 ; N ocircumflex ; B 65 -9 572 666 ;
+C -1 ; WX 372 ; N onesuperior ; B 114 273 339 681 ;
+C -1 ; WX 372 ; N twosuperior ; B 68 273 439 689 ;
+C -1 ; WX 372 ; N threesuperior ; B 70 265 439 689 ;
+C -1 ; WX 320 ; N Igrave ; B 21 0 412 876 ;
+C -1 ; WX 320 ; N Iacute ; B 21 0 412 876 ;
+C -1 ; WX 320 ; N Imacron ; B 21 0 454 825 ;
+C -1 ; WX 320 ; N Iogonek ; B 21 -169 412 681 ;
+C -1 ; WX 320 ; N Idieresis ; B 21 0 417 859 ;
+C -1 ; WX 760 ; N Gbreve ; B 88 -13 813 848 ;
+C -1 ; WX 720 ; N Umacron ; B 118 -13 842 825 ;
+C -1 ; WX 720 ; N Kcommaaccent ; B 21 -281 804 681 ;
+C -1 ; WX 540 ; N ograve ; B 65 -9 572 689 ;
+C -1 ; WX 640 ; N Scommaaccent ; B 61 -281 668 694 ;
+C -1 ; WX 680 ; N Eogonek ; B 21 -169 736 681 ;
+C -1 ; WX 540 ; N oacute ; B 65 -9 572 689 ;
+C -1 ; WX 680 ; N Edotaccent ; B 21 0 736 859 ;
+C -1 ; WX 280 ; N iogonek ; B 88 -169 351 666 ;
+C -1 ; WX 560 ; N gcommaaccent ; B 4 -221 581 768 ;
+C -1 ; WX 540 ; N odieresis ; B 65 -9 572 672 ;
+C -1 ; WX 620 ; N ntilde ; B 88 -9 673 652 ;
+C -1 ; WX 620 ; N ncaron ; B 88 -9 673 666 ;
+C -1 ; WX 680 ; N Ecaron ; B 21 0 736 853 ;
+C -1 ; WX 680 ; N Ecircumflex ; B 21 0 736 853 ;
+C -1 ; WX 540 ; N scedilla ; B 65 -182 547 495 ;
+C -1 ; WX 400 ; N rcaron ; B 88 0 481 666 ;
+C -1 ; WX 680 ; N Egrave ; B 21 0 736 876 ;
+C -1 ; WX 680 ; N Eacute ; B 21 0 736 876 ;
+C -1 ; WX 760 ; N Gcommaaccent ; B 88 -281 813 694 ;
+C -1 ; WX 700 ; N Rcommaaccent ; B 21 -281 736 681 ;
+C -1 ; WX 680 ; N Edieresis ; B 21 0 736 859 ;
+C -1 ; WX 620 ; N nacute ; B 88 -9 673 689 ;
+C -1 ; WX 620 ; N uogonek ; B 88 -169 686 486 ;
+C -1 ; WX 620 ; N umacron ; B 88 -9 686 638 ;
+C -1 ; WX 740 ; N Dcaron ; B 21 0 782 853 ;
+C -1 ; WX 380 ; N lcaron ; B 100 -9 440 723 ;
+C -1 ; WX 720 ; N Ccaron ; B 88 -13 746 853 ;
+C -1 ; WX 720 ; N Cacute ; B 88 -13 746 876 ;
+C -1 ; WX 720 ; N Ccedilla ; B 88 -182 746 694 ;
+C -1 ; WX 400 ; N degree ; B 120 380 420 686 ;
+C -1 ; WX 700 ; N Aogonek ; B -25 -169 720 681 ;
+C -1 ; WX 600 ; N minus ; B 91 310 595 390 ;
+C -1 ; WX 600 ; N multiply ; B 91 100 595 604 ;
+C -1 ; WX 600 ; N divide ; B 91 88 595 612 ;
+C -1 ; WX 700 ; N Aring ; B -25 0 720 878 ;
+C -1 ; WX 980 ; N trademark ; B 69 273 965 681 ;
+C -1 ; WX 400 ; N rcommaaccent ; B 50 -279 481 495 ;
+C -1 ; WX 280 ; N lacute ; B 100 -9 353 876 ;
+C -1 ; WX 540 ; N omacron ; B 65 -9 572 638 ;
+C -1 ; WX 700 ; N Atilde ; B -25 0 720 839 ;
+C -1 ; WX 280 ; N icircumflex ; B 76 -9 379 666 ;
+C -1 ; WX 280 ; N igrave ; B 88 -9 351 689 ;
+C -1 ; WX 620 ; N ncommaaccent ; B 88 -279 673 495 ;
+C -1 ; WX 280 ; N lcommaaccent ; B 40 -279 342 715 ;
+C -1 ; WX 600 ; N plusminus ; B 91 0 595 594 ;
+C -1 ; WX 930 ; N onehalf ; B 91 0 925 681 ;
+C -1 ; WX 930 ; N onequarter ; B 91 0 913 681 ;
+C -1 ; WX 930 ; N threequarters ; B 99 0 913 689 ;
+C -1 ; WX 280 ; N iacute ; B 88 -9 351 689 ;
+C -1 ; WX 700 ; N Abreve ; B -25 0 720 848 ;
+C -1 ; WX 600 ; N kcommaaccent ; B 88 -279 657 715 ;
+C -1 ; WX 760 ; N Omacron ; B 88 -13 799 825 ;
+C -1 ; WX 280 ; N imacron ; B 88 -9 404 638 ;
+C -1 ; WX 540 ; N emacron ; B 65 -9 575 638 ;
+C -1 ; WX 620 ; N amacron ; B 71 -9 686 638 ;
+C -1 ; WX 340 ; N tcommaaccent ; B 70 -279 411 665 ;
+C -1 ; WX 600 ; N ydieresis ; B 60 -221 609 672 ;
+C -1 ; WX 520 ; N zdotaccent ; B 38 -9 561 673 ;
+C -1 ; WX 520 ; N zcaron ; B 38 -9 561 666 ;
+C -1 ; WX 520 ; N zacute ; B 38 -9 561 689 ;
+C -1 ; WX 600 ; N yacute ; B 60 -221 609 689 ;
+C -1 ; WX 620 ; N uhungarumlaut ; B 88 -9 686 718 ;
+C -1 ; WX 540 ; N eth ; B 65 -9 642 717 ;
+C -1 ; WX 620 ; N uring ; B 88 -9 686 691 ;
+C -1 ; WX 760 ; N Ocircumflex ; B 88 -13 799 853 ;
+C -1 ; WX 260 ; N commaaccent ; B 30 -279 170 -51 ;
+C -1 ; WX 740 ; N copyright ; B 84 0 784 700 ;
+C -1 ; WX 740 ; N registered ; B 84 0 784 700 ;
+C -1 ; WX 700 ; N Acircumflex ; B -25 0 720 853 ;
+C -1 ; WX 280 ; N idieresis ; B 88 -9 377 672 ;
+C -1 ; WX 494 ; N lozenge ; B 92 0 540 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 600 ; N notequal ; B 91 101 595 610 ;
+C -1 ; WX 549 ; N radical ; B 50 -83 591 930 ;
+C -1 ; WX 700 ; N Agrave ; B -25 0 720 876 ;
+C -1 ; WX 700 ; N Aacute ; B -25 0 720 876 ;
+C -1 ; WX 600 ; N lessequal ; B 85 0 589 649 ;
+C -1 ; WX 600 ; N greaterequal ; B 91 0 595 649 ;
+C -1 ; WX 600 ; N logicalnot ; B 91 80 595 369 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 720 ; N Ncommaaccent ; B 18 -281 823 681 ;
+C -1 ; WX 640 ; N dcroat ; B 65 -9 724 715 ;
+C -1 ; WX 600 ; N brokenbar ; B 294 0 372 722 ;
+C -1 ; WX 580 ; N Lcommaaccent ; B 21 -281 656 681 ;
+C -1 ; WX 700 ; N Adieresis ; B -25 0 720 859 ;
+C -1 ; WX 620 ; N mu ; B 53 -219 686 486 ;
+C -1 ; WX 300 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -52
+KPX A Ccedilla -51
+KPX A G -50
+KPX A O -52
+KPX A Odieresis -52
+KPX A Q -49
+KPX A T -37
+KPX A U -50
+KPX A Uacute -50
+KPX A Ucircumflex -50
+KPX A Udieresis -50
+KPX A Ugrave -50
+KPX A V -90
+KPX A W -82
+KPX A Y -47
+KPX A a -32
+KPX A b -15
+KPX A c -36
+KPX A ccedilla -36
+KPX A comma -11
+KPX A d -28
+KPX A e -37
+KPX A g -30
+KPX A guillemotleft -29
+KPX A guilsinglleft -31
+KPX A hyphen -19
+KPX A o -35
+KPX A period -7
+KPX A q -28
+KPX A quotedblright -83
+KPX A quoteright -83
+KPX A t -26
+KPX A u -31
+KPX A v -32
+KPX A w -32
+KPX A y -35
+KPX Aacute C -53
+KPX Aacute G -52
+KPX Aacute O -54
+KPX Aacute Q -51
+KPX Aacute T -37
+KPX Aacute U -50
+KPX Aacute V -90
+KPX Aacute W -82
+KPX Aacute Y -47
+KPX Aacute a -32
+KPX Aacute b -15
+KPX Aacute c -36
+KPX Aacute comma -11
+KPX Aacute d -28
+KPX Aacute e -37
+KPX Aacute g -30
+KPX Aacute guillemotleft -29
+KPX Aacute guilsinglleft -31
+KPX Aacute hyphen -19
+KPX Aacute o -35
+KPX Aacute period -7
+KPX Aacute q -28
+KPX Aacute quoteright -84
+KPX Aacute t -26
+KPX Aacute u -31
+KPX Aacute v -32
+KPX Aacute w -32
+KPX Aacute y -35
+KPX Acircumflex C -53
+KPX Acircumflex G -52
+KPX Acircumflex O -54
+KPX Acircumflex Q -51
+KPX Acircumflex T -37
+KPX Acircumflex U -50
+KPX Acircumflex V -90
+KPX Acircumflex W -82
+KPX Acircumflex Y -47
+KPX Acircumflex comma -11
+KPX Acircumflex period -7
+KPX Adieresis C -53
+KPX Adieresis G -52
+KPX Adieresis O -54
+KPX Adieresis Q -51
+KPX Adieresis T -37
+KPX Adieresis U -50
+KPX Adieresis V -90
+KPX Adieresis W -82
+KPX Adieresis Y -47
+KPX Adieresis a -32
+KPX Adieresis b -15
+KPX Adieresis c -36
+KPX Adieresis comma -11
+KPX Adieresis d -28
+KPX Adieresis g -30
+KPX Adieresis guillemotleft -29
+KPX Adieresis guilsinglleft -31
+KPX Adieresis hyphen -19
+KPX Adieresis o -35
+KPX Adieresis period -7
+KPX Adieresis q -28
+KPX Adieresis quotedblright -84
+KPX Adieresis quoteright -84
+KPX Adieresis t -26
+KPX Adieresis u -31
+KPX Adieresis v -32
+KPX Adieresis w -32
+KPX Adieresis y -35
+KPX Agrave C -53
+KPX Agrave G -52
+KPX Agrave O -54
+KPX Agrave Q -51
+KPX Agrave T -37
+KPX Agrave U -50
+KPX Agrave V -90
+KPX Agrave W -82
+KPX Agrave Y -47
+KPX Agrave comma -11
+KPX Agrave period -7
+KPX Aring C -53
+KPX Aring G -52
+KPX Aring O -54
+KPX Aring Q -51
+KPX Aring T -37
+KPX Aring U -50
+KPX Aring V -90
+KPX Aring W -82
+KPX Aring Y -47
+KPX Aring a -32
+KPX Aring b -15
+KPX Aring c -36
+KPX Aring comma -11
+KPX Aring d -28
+KPX Aring e -37
+KPX Aring g -30
+KPX Aring guillemotleft -29
+KPX Aring guilsinglleft -31
+KPX Aring hyphen -19
+KPX Aring o -35
+KPX Aring period -7
+KPX Aring q -28
+KPX Aring quotedblright -84
+KPX Aring quoteright -84
+KPX Aring t -26
+KPX Aring u -31
+KPX Aring v -32
+KPX Aring w -32
+KPX Aring y -35
+KPX Atilde C -53
+KPX Atilde G -52
+KPX Atilde O -54
+KPX Atilde Q -51
+KPX Atilde T -37
+KPX Atilde U -50
+KPX Atilde V -90
+KPX Atilde W -82
+KPX Atilde Y -47
+KPX Atilde comma -11
+KPX Atilde period -7
+KPX B A -20
+KPX B AE -10
+KPX B Aacute -20
+KPX B Acircumflex -20
+KPX B Adieresis -20
+KPX B Aring -20
+KPX B Atilde -20
+KPX B O -9
+KPX B OE -10
+KPX B Oacute -9
+KPX B Ocircumflex -9
+KPX B Odieresis -9
+KPX B Ograve -9
+KPX B Oslash -8
+KPX B V -28
+KPX B W -28
+KPX B Y -28
+KPX C A -25
+KPX C AE -14
+KPX C Aacute -25
+KPX C Adieresis -25
+KPX C Aring -25
+KPX C H -17
+KPX C K -17
+KPX C O -12
+KPX C Oacute -12
+KPX C Odieresis -12
+KPX Ccedilla A -22
+KPX D A -42
+KPX D Aacute -42
+KPX D Acircumflex -42
+KPX D Adieresis -42
+KPX D Agrave -42
+KPX D Aring -42
+KPX D Atilde -42
+KPX D J 21
+KPX D T 16
+KPX D V -41
+KPX D W -33
+KPX D X -42
+KPX D Y -45
+KPX F A -69
+KPX F Aacute -69
+KPX F Acircumflex -69
+KPX F Adieresis -69
+KPX F Agrave -69
+KPX F Aring -69
+KPX F Atilde -69
+KPX F J -36
+KPX F O 12
+KPX F Odieresis 12
+KPX F a -37
+KPX F aacute -37
+KPX F adieresis -37
+KPX F ae -33
+KPX F aring -37
+KPX F comma -110
+KPX F e -43
+KPX F eacute -43
+KPX F hyphen -30
+KPX F i 21
+KPX F j 30
+KPX F o -30
+KPX F oacute -30
+KPX F odieresis -30
+KPX F oe -27
+KPX F oslash -30
+KPX F period -107
+KPX F r 26
+KPX F u 26
+KPX G A -4
+KPX G AE 5
+KPX G Aacute -4
+KPX G Acircumflex -4
+KPX G Adieresis -4
+KPX G Agrave -4
+KPX G Aring -4
+KPX G Atilde -4
+KPX G T -13
+KPX G V -40
+KPX G W -40
+KPX G Y -40
+KPX J A -50
+KPX J AE -39
+KPX J Adieresis -50
+KPX J Aring -50
+KPX K C -52
+KPX K G -50
+KPX K O -52
+KPX K OE -52
+KPX K Oacute -52
+KPX K Odieresis -52
+KPX K S 2
+KPX K T 5
+KPX K a -25
+KPX K adieresis -25
+KPX K ae -7
+KPX K aring -25
+KPX K e -29
+KPX K hyphen -49
+KPX K o -29
+KPX K oacute -29
+KPX K odieresis -29
+KPX K u -23
+KPX K udieresis -23
+KPX K y -28
+KPX L A 32
+KPX L AE 42
+KPX L Aacute 32
+KPX L Adieresis 32
+KPX L Aring 32
+KPX L C 15
+KPX L Ccedilla 15
+KPX L G 15
+KPX L O 15
+KPX L Oacute 15
+KPX L Ocircumflex 15
+KPX L Odieresis 15
+KPX L Ograve 15
+KPX L Otilde 15
+KPX L S 30
+KPX L T -50
+KPX L U 1
+KPX L Udieresis 1
+KPX L V -61
+KPX L W -52
+KPX L Y -59
+KPX L hyphen 52
+KPX L quotedblright -83
+KPX L quoteright -83
+KPX L u 0
+KPX L udieresis -4
+KPX L y -1
+KPX N A -16
+KPX N AE -5
+KPX N Aacute -16
+KPX N Adieresis -16
+KPX N Aring -16
+KPX N C -21
+KPX N Ccedilla -20
+KPX N G -19
+KPX N O -21
+KPX N Oacute -21
+KPX N Odieresis -21
+KPX N a -27
+KPX N aacute -28
+KPX N adieresis -28
+KPX N ae -41
+KPX N aring -28
+KPX N comma -32
+KPX N e -29
+KPX N eacute -31
+KPX N o -24
+KPX N oacute -26
+KPX N odieresis -26
+KPX N oslash -24
+KPX N period -29
+KPX N u -33
+KPX N udieresis -35
+KPX O A -49
+KPX O AE -38
+KPX O Aacute -49
+KPX O Adieresis -49
+KPX O Aring -49
+KPX O T 14
+KPX O V -44
+KPX O W -36
+KPX O X -46
+KPX O Y -49
+KPX Oacute A -49
+KPX Oacute T 14
+KPX Oacute V -44
+KPX Oacute W -36
+KPX Oacute Y -49
+KPX Ocircumflex T 14
+KPX Ocircumflex V -44
+KPX Ocircumflex Y -49
+KPX Odieresis A -49
+KPX Odieresis T 14
+KPX Odieresis V -44
+KPX Odieresis W -36
+KPX Odieresis X -46
+KPX Odieresis Y -49
+KPX Ograve T 14
+KPX Ograve V -44
+KPX Ograve Y -49
+KPX Oslash A -49
+KPX Otilde T 14
+KPX Otilde V -44
+KPX Otilde Y -49
+KPX P A -68
+KPX P AE -97
+KPX P Aacute -68
+KPX P Adieresis -68
+KPX P Aring -68
+KPX P J -28
+KPX P a -25
+KPX P aacute -25
+KPX P adieresis -25
+KPX P ae -30
+KPX P aring -25
+KPX P comma -103
+KPX P e -28
+KPX P eacute -28
+KPX P hyphen -14
+KPX P o -20
+KPX P oacute -20
+KPX P odieresis -20
+KPX P oe -17
+KPX P oslash -20
+KPX P period -101
+KPX R C -20
+KPX R Ccedilla -20
+KPX R G -19
+KPX R O -21
+KPX R OE -21
+KPX R Oacute -21
+KPX R Odieresis -21
+KPX R T 14
+KPX R U -21
+KPX R Udieresis -21
+KPX R V -25
+KPX R W -25
+KPX R Y -25
+KPX R a -24
+KPX R aacute -24
+KPX R adieresis -24
+KPX R ae -6
+KPX R aring -24
+KPX R e -28
+KPX R eacute -29
+KPX R hyphen -35
+KPX R o -23
+KPX R oacute -24
+KPX R odieresis -24
+KPX R oe -22
+KPX R u -15
+KPX R uacute -15
+KPX R udieresis -15
+KPX R y -11
+KPX S A -13
+KPX S AE -2
+KPX S Aacute -13
+KPX S Adieresis -13
+KPX S Aring -13
+KPX S T 13
+KPX S V -17
+KPX S W -17
+KPX S Y -17
+KPX S t -8
+KPX T A -36
+KPX T AE -26
+KPX T Aacute -36
+KPX T Acircumflex -36
+KPX T Adieresis -36
+KPX T Agrave -36
+KPX T Aring -36
+KPX T Atilde -36
+KPX T C 14
+KPX T G 15
+KPX T J -51
+KPX T O 13
+KPX T OE 11
+KPX T Oacute 13
+KPX T Ocircumflex 13
+KPX T Odieresis 13
+KPX T Ograve 13
+KPX T Oslash 14
+KPX T Otilde 13
+KPX T S 18
+KPX T V 33
+KPX T W 33
+KPX T Y 33
+KPX T a -53
+KPX T ae -52
+KPX T c -54
+KPX T colon -7
+KPX T comma -95
+KPX T e -69
+KPX T g -33
+KPX T guillemotleft -86
+KPX T guilsinglleft -89
+KPX T hyphen -75
+KPX T i -21
+KPX T j 8
+KPX T o -48
+KPX T oslash -48
+KPX T period -92
+KPX T r -15
+KPX T s -37
+KPX T semicolon -7
+KPX T u -102
+KPX T v -15
+KPX T w -15
+KPX T y 12
+KPX U A -42
+KPX U AE -31
+KPX U Aacute -42
+KPX U Acircumflex -42
+KPX U Adieresis -42
+KPX U Aring -42
+KPX U Atilde -42
+KPX U comma -39
+KPX U m -26
+KPX U n -26
+KPX U p -31
+KPX U period -36
+KPX U r -26
+KPX Uacute A -42
+KPX Uacute comma -39
+KPX Uacute m -26
+KPX Uacute n -26
+KPX Uacute p -31
+KPX Uacute period -36
+KPX Uacute r -26
+KPX Ucircumflex A -42
+KPX Udieresis A -42
+KPX Udieresis b 22
+KPX Udieresis comma -39
+KPX Udieresis m -26
+KPX Udieresis n -26
+KPX Udieresis p -31
+KPX Udieresis period -36
+KPX Udieresis r -26
+KPX Ugrave A -42
+KPX V A -99
+KPX V AE -106
+KPX V Aacute -99
+KPX V Acircumflex -99
+KPX V Adieresis -99
+KPX V Agrave -99
+KPX V Aring -99
+KPX V Atilde -99
+KPX V C -54
+KPX V G -51
+KPX V O -56
+KPX V Oacute -56
+KPX V Ocircumflex -56
+KPX V Odieresis -56
+KPX V Ograve -56
+KPX V Oslash -55
+KPX V Otilde -56
+KPX V S -22
+KPX V T 30
+KPX V a -84
+KPX V ae -99
+KPX V colon -85
+KPX V comma -116
+KPX V e -87
+KPX V g -77
+KPX V guillemotleft -70
+KPX V guilsinglleft -73
+KPX V hyphen -58
+KPX V i -25
+KPX V o -81
+KPX V oslash -81
+KPX V period -114
+KPX V r -50
+KPX V semicolon -85
+KPX V u -50
+KPX V y -45
+KPX W A -89
+KPX W AE -86
+KPX W Aacute -89
+KPX W Acircumflex -89
+KPX W Adieresis -89
+KPX W Agrave -89
+KPX W Aring -89
+KPX W Atilde -89
+KPX W C -49
+KPX W G -47
+KPX W O -49
+KPX W Oacute -49
+KPX W Ocircumflex -49
+KPX W Odieresis -49
+KPX W Ograve -49
+KPX W Oslash -48
+KPX W Otilde -49
+KPX W S -22
+KPX W T 30
+KPX W a -71
+KPX W ae -86
+KPX W colon -78
+KPX W comma -99
+KPX W e -73
+KPX W g -64
+KPX W guillemotleft -57
+KPX W guilsinglleft -59
+KPX W hyphen -45
+KPX W i -25
+KPX W o -68
+KPX W oslash -68
+KPX W period -96
+KPX W r -43
+KPX W semicolon -78
+KPX W u -43
+KPX W y -39
+KPX X C -52
+KPX X O -53
+KPX X Odieresis -53
+KPX X Q -50
+KPX X a -28
+KPX X e -33
+KPX X hyphen -57
+KPX X o -32
+KPX X u -27
+KPX X y -31
+KPX Y A -57
+KPX Y AE -46
+KPX Y Aacute -57
+KPX Y Acircumflex -57
+KPX Y Adieresis -57
+KPX Y Agrave -57
+KPX Y Aring -57
+KPX Y Atilde -57
+KPX Y C -47
+KPX Y G -44
+KPX Y O -49
+KPX Y Oacute -49
+KPX Y Ocircumflex -49
+KPX Y Odieresis -49
+KPX Y Ograve -49
+KPX Y Oslash -48
+KPX Y Otilde -49
+KPX Y S -15
+KPX Y T 37
+KPX Y a -103
+KPX Y ae -116
+KPX Y colon -102
+KPX Y comma -116
+KPX Y e -105
+KPX Y g -95
+KPX Y guillemotleft -101
+KPX Y guilsinglleft -103
+KPX Y hyphen -94
+KPX Y i -18
+KPX Y o -100
+KPX Y oslash -99
+KPX Y p -73
+KPX Y period -113
+KPX Y semicolon -102
+KPX Y u -68
+KPX Y v -68
+KPX Z v -6
+KPX Z y -4
+KPX a j -2
+KPX a quoteright -32
+KPX a v -7
+KPX a w -6
+KPX a y -7
+KPX aacute v -7
+KPX aacute w -6
+KPX aacute y -7
+KPX adieresis v -7
+KPX adieresis w -6
+KPX adieresis y -7
+KPX ae v -11
+KPX ae w -14
+KPX ae y -15
+KPX agrave v -7
+KPX agrave w -6
+KPX agrave y -7
+KPX aring v -7
+KPX aring w -6
+KPX aring y -7
+KPX b v -22
+KPX b w -22
+KPX b y -21
+KPX c h -26
+KPX c k -27
+KPX comma one -90
+KPX comma quotedblright -51
+KPX comma quoteright -51
+KPX e quoteright -7
+KPX e t -22
+KPX e v -12
+KPX e w -14
+KPX e x -1
+KPX e y -16
+KPX eacute v -12
+KPX eacute w -14
+KPX eacute y -16
+KPX ecircumflex v -12
+KPX ecircumflex w -14
+KPX ecircumflex y -16
+KPX eight four -12
+KPX eight one -97
+KPX eight seven -30
+KPX f a -38
+KPX f aacute -39
+KPX f adieresis -21
+KPX f ae -52
+KPX f aring -39
+KPX f e -40
+KPX f eacute -42
+KPX f f 17
+KPX f i 10
+KPX f j 31
+KPX f l 69
+KPX f o -35
+KPX f oacute -37
+KPX f odieresis -9
+KPX f oe -35
+KPX f oslash -35
+KPX f quoteright 44
+KPX f s -48
+KPX f t 7
+KPX five four -17
+KPX five one -117
+KPX five seven -68
+KPX four four -3
+KPX four one -86
+KPX four seven -67
+KPX g a -16
+KPX g adieresis -18
+KPX g ae -31
+KPX g aring -18
+KPX g e -18
+KPX g eacute -19
+KPX g l -23
+KPX g oacute -15
+KPX g odieresis -15
+KPX g r -21
+KPX guillemotright A -35
+KPX guillemotright AE -82
+KPX guillemotright Aacute -35
+KPX guillemotright Adieresis -35
+KPX guillemotright Aring -35
+KPX guillemotright T -91
+KPX guillemotright V -66
+KPX guillemotright W -56
+KPX guillemotright Y -93
+KPX guilsinglright A -25
+KPX guilsinglright AE -72
+KPX guilsinglright Aacute -25
+KPX guilsinglright Adieresis -25
+KPX guilsinglright Aring -25
+KPX guilsinglright T -81
+KPX guilsinglright V -56
+KPX guilsinglright W -46
+KPX guilsinglright Y -83
+KPX h quoteright -41
+KPX h y -7
+KPX hyphen A -16
+KPX hyphen AE -64
+KPX hyphen Aacute -16
+KPX hyphen Adieresis -16
+KPX hyphen Aring -16
+KPX hyphen T -70
+KPX hyphen V -44
+KPX hyphen W -34
+KPX hyphen Y -77
+KPX i T -6
+KPX i j 0
+KPX k a -17
+KPX k aacute -17
+KPX k adieresis -17
+KPX k ae -3
+KPX k aring -17
+KPX k comma -9
+KPX k e -19
+KPX k eacute -19
+KPX k g -14
+KPX k hyphen -74
+KPX k o -19
+KPX k oacute -19
+KPX k odieresis -19
+KPX k period -7
+KPX k s -3
+KPX k u 1
+KPX k udieresis 1
+KPX l v -9
+KPX l y -8
+KPX m p -1
+KPX m v -6
+KPX m w -5
+KPX m y -7
+KPX n T -35
+KPX n p -11
+KPX n quoteright -37
+KPX n v -14
+KPX n w -13
+KPX n y -14
+KPX nine four -20
+KPX nine one -100
+KPX nine seven -33
+KPX o T -65
+KPX o quoteright -19
+KPX o t -16
+KPX o v -18
+KPX o w -17
+KPX o x -17
+KPX o y -16
+KPX oacute v -18
+KPX oacute w -17
+KPX oacute y -16
+KPX ocircumflex t -17
+KPX odieresis t -17
+KPX odieresis v -18
+KPX odieresis w -17
+KPX odieresis x -17
+KPX odieresis y -16
+KPX ograve v -18
+KPX ograve w -17
+KPX ograve y -16
+KPX one comma -85
+KPX one eight -87
+KPX one five -88
+KPX one four -113
+KPX one nine -86
+KPX one one -113
+KPX one period -83
+KPX one seven -120
+KPX one six -89
+KPX one three -81
+KPX one two -69
+KPX one zero -85
+KPX p t -21
+KPX p y -21
+KPX period one -92
+KPX period quotedblright -49
+KPX period quoteright -49
+KPX q c -12
+KPX q u -18
+KPX quotedblbase A -10
+KPX quotedblbase AE 0
+KPX quotedblbase T -93
+KPX quotedblbase V -108
+KPX quotedblbase W -94
+KPX quotedblbase Y -103
+KPX quotedblleft A -83
+KPX quotedblleft AE -204
+KPX quotedblleft Aacute -84
+KPX quotedblleft Adieresis -84
+KPX quotedblleft Aring -84
+KPX quotedblleft T 24
+KPX quotedblleft V 11
+KPX quotedblleft W 14
+KPX quotedblleft Y 6
+KPX quotedblright A -107
+KPX quotedblright AE -231
+KPX quotedblright Aacute -108
+KPX quotedblright Adieresis -108
+KPX quotedblright Aring -108
+KPX quotedblright T 0
+KPX quotedblright V -10
+KPX quotedblright W -7
+KPX quotedblright Y -13
+KPX quoteleft A -85
+KPX quoteleft AE -206
+KPX quoteleft Aacute -86
+KPX quoteleft Adieresis -86
+KPX quoteleft Aring -86
+KPX quoteleft T 23
+KPX quoteleft V 9
+KPX quoteleft W 13
+KPX quoteleft Y 5
+KPX quoteright A -109
+KPX quoteright AE -232
+KPX quoteright Aacute -110
+KPX quoteright Adieresis -110
+KPX quoteright Aring -110
+KPX quoteright comma -85
+KPX quoteright d -62
+KPX quoteright o -56
+KPX quoteright period -82
+KPX quoteright r -44
+KPX quoteright s -55
+KPX quoteright t -42
+KPX quoteright v -43
+KPX quoteright w -44
+KPX quoteright y -40
+KPX r a -27
+KPX r aacute -27
+KPX r acircumflex -27
+KPX r adieresis -27
+KPX r ae -28
+KPX r agrave -27
+KPX r aring -27
+KPX r c -25
+KPX r ccedilla -25
+KPX r colon -18
+KPX r comma -99
+KPX r d -24
+KPX r e -33
+KPX r eacute -33
+KPX r ecircumflex -33
+KPX r egrave -33
+KPX r f -6
+KPX r g -16
+KPX r h -26
+KPX r hyphen -71
+KPX r i 13
+KPX r j 11
+KPX r k -26
+KPX r l -22
+KPX r m 13
+KPX r n 13
+KPX r o -21
+KPX r oacute -21
+KPX r ocircumflex -21
+KPX r odieresis -21
+KPX r oe -19
+KPX r ograve -21
+KPX r oslash -22
+KPX r p 7
+KPX r period -97
+KPX r q -21
+KPX r quoteright -1
+KPX r r 13
+KPX r s -19
+KPX r semicolon -18
+KPX r t 13
+KPX r u 13
+KPX r v 13
+KPX r w 13
+KPX r x -6
+KPX r y 15
+KPX r z -1
+KPX s quoteright -31
+KPX s t -34
+KPX seven colon -103
+KPX seven comma -129
+KPX seven eight -63
+KPX seven five -48
+KPX seven four -117
+KPX seven one -83
+KPX seven period -126
+KPX seven seven -42
+KPX seven six -76
+KPX seven three -50
+KPX seven two -56
+KPX six four -10
+KPX six one -94
+KPX six seven -36
+KPX t S 1
+KPX t a -14
+KPX t aacute -14
+KPX t adieresis -14
+KPX t ae -2
+KPX t aring -14
+KPX t colon -8
+KPX t e -17
+KPX t eacute -17
+KPX t h -12
+KPX t o -16
+KPX t oacute -16
+KPX t odieresis -16
+KPX t quoteright -18
+KPX t semicolon -10
+KPX three four -20
+KPX three one -108
+KPX three seven -46
+KPX two four -22
+KPX two one -91
+KPX two seven -39
+KPX u quoteright -30
+KPX v a -11
+KPX v aacute -11
+KPX v acircumflex -11
+KPX v adieresis -11
+KPX v ae -30
+KPX v agrave -11
+KPX v aring -11
+KPX v atilde -11
+KPX v c -9
+KPX v colon -37
+KPX v comma -42
+KPX v e -13
+KPX v eacute -13
+KPX v ecircumflex -13
+KPX v egrave -13
+KPX v g -6
+KPX v hyphen 17
+KPX v l -20
+KPX v o -8
+KPX v oacute -8
+KPX v odieresis -8
+KPX v ograve -8
+KPX v oslash -7
+KPX v period -39
+KPX v s -25
+KPX v semicolon -39
+KPX w a -17
+KPX w aacute -17
+KPX w acircumflex -17
+KPX w adieresis -17
+KPX w ae -36
+KPX w agrave -17
+KPX w aring -17
+KPX w atilde -17
+KPX w c -15
+KPX w colon -42
+KPX w comma -48
+KPX w e -18
+KPX w eacute -18
+KPX w ecircumflex -18
+KPX w egrave -18
+KPX w g -11
+KPX w hyphen 11
+KPX w l -25
+KPX w o -14
+KPX w oacute -14
+KPX w odieresis -14
+KPX w ograve -14
+KPX w oslash -13
+KPX w period -45
+KPX w s -30
+KPX w semicolon -45
+KPX x a -12
+KPX x c -15
+KPX x e -15
+KPX x eacute -15
+KPX x o -14
+KPX x q -10
+KPX y a -22
+KPX y aacute -22
+KPX y acircumflex -22
+KPX y adieresis -22
+KPX y ae -37
+KPX y agrave -22
+KPX y aring -22
+KPX y atilde -22
+KPX y c -20
+KPX y colon -42
+KPX y comma -32
+KPX y e -23
+KPX y eacute -23
+KPX y ecircumflex -23
+KPX y egrave -23
+KPX y g -15
+KPX y hyphen -3
+KPX y l -28
+KPX y o -19
+KPX y oacute -19
+KPX y odieresis -19
+KPX y ograve -19
+KPX y oslash -18
+KPX y period -29
+KPX y s -32
+KPX y semicolon -45
+KPX zero four -14
+KPX zero one -99
+KPX zero seven -38
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/b018032l.pfb b/Master/xemtex/gsfonts/b018032l.pfb
new file mode 100644
index 00000000000..49605979b2e
--- /dev/null
+++ b/Master/xemtex/gsfonts/b018032l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/b018032l.pfm b/Master/xemtex/gsfonts/b018032l.pfm
new file mode 100644
index 00000000000..92d1cdf3749
--- /dev/null
+++ b/Master/xemtex/gsfonts/b018032l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/b018035l.afm b/Master/xemtex/gsfonts/b018035l.afm
new file mode 100644
index 00000000000..c6e0cc1ed14
--- /dev/null
+++ b/Master/xemtex/gsfonts/b018035l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName URWBookmanL-DemiBoldItal
+FullName URW Bookman L Demi Bold Italic
+FamilyName URW Bookman L
+Weight Bold
+ItalicAngle -10.0
+IsFixedPitch false
+UnderlinePosition -125
+UnderlineThickness 60
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -231 -332 1333 927
+CapHeight 681
+XHeight 511
+Descender -213
+Ascender 732
+StartCharMetrics 316
+C 32 ; WX 340 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 320 ; N exclam ; B 86 -13 366 694 ;
+C 34 ; WX 380 ; N quotedbl ; B 140 352 507 681 ;
+C 35 ; WX 680 ; N numbersign ; B 157 0 649 681 ;
+C 36 ; WX 680 ; N dollar ; B 45 -164 697 791 ;
+C 37 ; WX 880 ; N percent ; B 106 -8 899 689 ;
+C 38 ; WX 980 ; N ampersand ; B 48 -13 1016 694 ;
+C 39 ; WX 320 ; N quoteright ; B 171 416 349 694 ;
+C 40 ; WX 260 ; N parenleft ; B 31 -145 388 710 ;
+C 41 ; WX 260 ; N parenright ; B -35 -148 322 710 ;
+C 42 ; WX 460 ; N asterisk ; B 126 345 508 699 ;
+C 43 ; WX 600 ; N plus ; B 91 107 595 593 ;
+C 44 ; WX 340 ; N comma ; B 100 -130 298 179 ;
+C 45 ; WX 280 ; N hyphen ; B 59 224 319 314 ;
+C 46 ; WX 340 ; N period ; B 106 -13 296 172 ;
+C 47 ; WX 360 ; N slash ; B 9 -145 502 710 ;
+C 48 ; WX 680 ; N zero ; B 87 -13 703 694 ;
+C 49 ; WX 680 ; N one ; B 123 0 565 681 ;
+C 50 ; WX 680 ; N two ; B 67 0 674 694 ;
+C 51 ; WX 680 ; N three ; B 72 -13 683 694 ;
+C 52 ; WX 680 ; N four ; B 63 0 708 681 ;
+C 53 ; WX 680 ; N five ; B 78 -13 669 681 ;
+C 54 ; WX 680 ; N six ; B 88 -13 704 694 ;
+C 55 ; WX 680 ; N seven ; B 123 0 739 681 ;
+C 56 ; WX 680 ; N eight ; B 68 -13 686 694 ;
+C 57 ; WX 680 ; N nine ; B 71 -13 712 694 ;
+C 58 ; WX 340 ; N colon ; B 106 -13 356 520 ;
+C 59 ; WX 340 ; N semicolon ; B 100 -130 352 520 ;
+C 60 ; WX 620 ; N less ; B 79 56 588 643 ;
+C 61 ; WX 600 ; N equal ; B 91 198 595 502 ;
+C 62 ; WX 620 ; N greater ; B 89 56 598 643 ;
+C 63 ; WX 620 ; N question ; B 145 -13 668 694 ;
+C 64 ; WX 780 ; N at ; B 80 -13 790 700 ;
+C 65 ; WX 720 ; N A ; B -27 0 769 681 ;
+C 66 ; WX 720 ; N B ; B 14 0 762 681 ;
+C 67 ; WX 700 ; N C ; B 78 -13 754 694 ;
+C 68 ; WX 760 ; N D ; B 14 0 805 681 ;
+C 69 ; WX 720 ; N E ; B 14 0 777 681 ;
+C 70 ; WX 660 ; N F ; B 14 0 763 681 ;
+C 71 ; WX 760 ; N G ; B 77 -13 828 694 ;
+C 72 ; WX 800 ; N H ; B 14 0 910 681 ;
+C 73 ; WX 380 ; N I ; B 14 0 485 681 ;
+C 74 ; WX 620 ; N J ; B 8 -13 721 681 ;
+C 75 ; WX 780 ; N K ; B 14 0 879 681 ;
+C 76 ; WX 640 ; N L ; B 14 0 725 681 ;
+C 77 ; WX 860 ; N M ; B 14 0 970 681 ;
+C 78 ; WX 740 ; N N ; B 14 0 845 681 ;
+C 79 ; WX 760 ; N O ; B 78 -13 806 694 ;
+C 80 ; WX 640 ; N P ; B -6 0 724 681 ;
+C 81 ; WX 760 ; N Q ; B 37 -218 805 694 ;
+C 82 ; WX 740 ; N R ; B 14 0 765 681 ;
+C 83 ; WX 700 ; N S ; B 59 -13 731 694 ;
+C 84 ; WX 700 ; N T ; B 70 0 802 681 ;
+C 85 ; WX 740 ; N U ; B 112 -13 855 681 ;
+C 86 ; WX 660 ; N V ; B 72 0 819 681 ;
+C 87 ; WX 1000 ; N W ; B 72 0 1090 681 ;
+C 88 ; WX 740 ; N X ; B -7 0 835 681 ;
+C 89 ; WX 660 ; N Y ; B 72 0 817 681 ;
+C 90 ; WX 680 ; N Z ; B 23 0 740 681 ;
+C 91 ; WX 260 ; N bracketleft ; B 9 -145 374 710 ;
+C 92 ; WX 580 ; N backslash ; B 73 0 575 741 ;
+C 93 ; WX 260 ; N bracketright ; B -18 -145 347 710 ;
+C 94 ; WX 620 ; N asciicircum ; B 92 318 594 722 ;
+C 95 ; WX 500 ; N underscore ; B 0 -155 500 -95 ;
+C 96 ; WX 320 ; N quoteleft ; B 155 416 333 694 ;
+C 97 ; WX 680 ; N a ; B 84 -9 735 520 ;
+C 98 ; WX 600 ; N b ; B 57 -9 633 732 ;
+C 99 ; WX 560 ; N c ; B 58 -9 597 520 ;
+C 100 ; WX 680 ; N d ; B 60 -9 714 732 ;
+C 101 ; WX 560 ; N e ; B 59 -9 596 520 ;
+C 102 ; WX 420 ; N f ; B -192 -208 641 745 ;
+C 103 ; WX 620 ; N g ; B 21 -208 669 520 ;
+C 104 ; WX 700 ; N h ; B 93 -9 736 732 ;
+C 105 ; WX 380 ; N i ; B 83 -9 420 762 ;
+C 106 ; WX 320 ; N j ; B -160 -208 392 762 ;
+C 107 ; WX 700 ; N k ; B 97 -9 732 732 ;
+C 108 ; WX 380 ; N l ; B 109 -9 410 732 ;
+C 109 ; WX 960 ; N m ; B 83 -9 996 520 ;
+C 110 ; WX 680 ; N n ; B 83 -9 715 520 ;
+C 111 ; WX 600 ; N o ; B 59 -9 627 520 ;
+C 112 ; WX 660 ; N p ; B -24 -213 682 520 ;
+C 113 ; WX 620 ; N q ; B 60 -213 640 520 ;
+C 114 ; WX 500 ; N r ; B 84 0 582 520 ;
+C 115 ; WX 540 ; N s ; B 32 -9 573 520 ;
+C 116 ; WX 440 ; N t ; B 106 -9 488 659 ;
+C 117 ; WX 680 ; N u ; B 83 -9 720 511 ;
+C 118 ; WX 540 ; N v ; B 56 -9 572 520 ;
+C 119 ; WX 860 ; N w ; B 56 -9 891 520 ;
+C 120 ; WX 620 ; N x ; B 10 -9 654 520 ;
+C 121 ; WX 600 ; N y ; B 25 -204 642 511 ;
+C 122 ; WX 560 ; N z ; B 36 -9 586 520 ;
+C 123 ; WX 300 ; N braceleft ; B 53 -145 409 710 ;
+C 124 ; WX 620 ; N bar ; B 303 0 422 722 ;
+C 125 ; WX 300 ; N braceright ; B -4 -145 352 710 ;
+C 126 ; WX 620 ; N asciitilde ; B 101 251 605 443 ;
+C 161 ; WX 320 ; N exclamdown ; B 64 -187 344 520 ;
+C 162 ; WX 680 ; N cent ; B 161 25 616 718 ;
+C 163 ; WX 680 ; N sterling ; B 0 -13 787 694 ;
+C 164 ; WX 120 ; N fraction ; B -144 0 382 681 ;
+C 165 ; WX 680 ; N yen ; B 92 0 782 681 ;
+C 166 ; WX 680 ; N florin ; B -28 -208 743 745 ;
+C 167 ; WX 620 ; N section ; B 46 -147 638 694 ;
+C 168 ; WX 680 ; N currency ; B 148 109 637 595 ;
+C 169 ; WX 180 ; N quotesingle ; B 126 352 295 681 ;
+C 170 ; WX 520 ; N quotedblleft ; B 156 416 545 694 ;
+C 171 ; WX 380 ; N guillemotleft ; B 62 57 406 477 ;
+C 172 ; WX 220 ; N guilsinglleft ; B 62 57 249 477 ;
+C 173 ; WX 220 ; N guilsinglright ; B 62 57 249 477 ;
+C 174 ; WX 820 ; N fi ; B -191 -208 850 745 ;
+C 175 ; WX 820 ; N fl ; B -191 -208 850 745 ;
+C 177 ; WX 500 ; N endash ; B 40 224 573 314 ;
+C 178 ; WX 420 ; N dagger ; B 89 -134 466 694 ;
+C 179 ; WX 420 ; N daggerdbl ; B 79 -147 486 694 ;
+C 180 ; WX 340 ; N periodcentered ; B 126 173 316 358 ;
+C 182 ; WX 680 ; N paragraph ; B 70 -201 726 681 ;
+C 183 ; WX 360 ; N bullet ; B 60 213 404 557 ;
+C 184 ; WX 300 ; N quotesinglbase ; B 106 -117 284 161 ;
+C 185 ; WX 520 ; N quotedblbase ; B 106 -117 495 161 ;
+C 186 ; WX 520 ; N quotedblright ; B 171 416 560 694 ;
+C 187 ; WX 380 ; N guillemotright ; B 62 57 406 477 ;
+C 188 ; WX 1000 ; N ellipsis ; B 86 -13 942 172 ;
+C 189 ; WX 1360 ; N perthousand ; B 106 -8 1333 689 ;
+C 191 ; WX 620 ; N questiondown ; B 83 -183 606 524 ;
+C 193 ; WX 380 ; N grave ; B 193 561 424 748 ;
+C 194 ; WX 340 ; N acute ; B 176 561 407 748 ;
+C 195 ; WX 480 ; N circumflex ; B 183 564 523 734 ;
+C 196 ; WX 480 ; N tilde ; B 178 580 533 703 ;
+C 197 ; WX 480 ; N macron ; B 177 603 531 691 ;
+C 198 ; WX 460 ; N breve ; B 177 570 516 710 ;
+C 199 ; WX 380 ; N dotaccent ; B 180 566 345 732 ;
+C 200 ; WX 520 ; N dieresis ; B 180 569 569 729 ;
+C 202 ; WX 360 ; N ring ; B 185 553 406 769 ;
+C 203 ; WX 360 ; N cedilla ; B 68 -215 289 0 ;
+C 205 ; WX 560 ; N hungarumlaut ; B 181 560 616 751 ;
+C 206 ; WX 320 ; N ogonek ; B 68 -179 253 0 ;
+C 207 ; WX 480 ; N caron ; B 183 564 523 734 ;
+C 208 ; WX 1000 ; N emdash ; B 40 224 1073 314 ;
+C 225 ; WX 1140 ; N AE ; B -27 0 1207 681 ;
+C 227 ; WX 440 ; N ordfeminine ; B 55 300 495 698 ;
+C 232 ; WX 640 ; N Lslash ; B 14 0 724 681 ;
+C 233 ; WX 760 ; N Oslash ; B 21 -29 847 725 ;
+C 234 ; WX 1180 ; N OE ; B 94 -13 1245 694 ;
+C 235 ; WX 440 ; N ordmasculine ; B 47 300 467 698 ;
+C 241 ; WX 880 ; N ae ; B 39 -9 913 520 ;
+C 245 ; WX 380 ; N dotlessi ; B 83 -9 420 511 ;
+C 248 ; WX 380 ; N lslash ; B 63 -9 412 732 ;
+C 249 ; WX 600 ; N oslash ; B 17 -54 661 576 ;
+C 250 ; WX 920 ; N oe ; B 48 -9 961 520 ;
+C 251 ; WX 660 ; N germandbls ; B -231 -208 702 741 ;
+C -1 ; WX 740 ; N Udieresis ; B 112 -13 855 895 ;
+C -1 ; WX 740 ; N Uacute ; B 112 -13 855 914 ;
+C -1 ; WX 700 ; N Scedilla ; B 59 -215 731 694 ;
+C -1 ; WX 700 ; N Tcaron ; B 70 0 802 900 ;
+C -1 ; WX 700 ; N Scaron ; B 59 -13 731 900 ;
+C -1 ; WX 740 ; N Rcaron ; B 14 0 765 900 ;
+C -1 ; WX 740 ; N Racute ; B 14 0 765 914 ;
+C -1 ; WX 700 ; N Sacute ; B 59 -13 731 914 ;
+C -1 ; WX 760 ; N Otilde ; B 78 -13 806 863 ;
+C -1 ; WX 680 ; N ucircumflex ; B 83 -9 720 734 ;
+C -1 ; WX 760 ; N Ohungarumlaut ; B 78 -13 806 917 ;
+C -1 ; WX 740 ; N Uhungarumlaut ; B 112 -13 855 917 ;
+C -1 ; WX 660 ; N Yacute ; B 72 0 817 914 ;
+C -1 ; WX 760 ; N Eth ; B 14 0 805 681 ;
+C -1 ; WX 760 ; N Dcroat ; B 14 0 805 681 ;
+C -1 ; WX 680 ; N Zacute ; B 23 0 740 914 ;
+C -1 ; WX 740 ; N Uring ; B 112 -13 855 927 ;
+C -1 ; WX 620 ; N gbreve ; B 21 -208 669 710 ;
+C -1 ; WX 560 ; N eogonek ; B 59 -179 596 520 ;
+C -1 ; WX 560 ; N edotaccent ; B 59 -9 596 732 ;
+C -1 ; WX 560 ; N ecaron ; B 59 -9 596 734 ;
+C -1 ; WX 740 ; N Ugrave ; B 112 -13 855 914 ;
+C -1 ; WX 640 ; N Thorn ; B -6 0 701 681 ;
+C -1 ; WX 560 ; N eacute ; B 59 -9 596 748 ;
+C -1 ; WX 560 ; N edieresis ; B 59 -9 596 729 ;
+C -1 ; WX 810 ; N dcaron ; B 60 -9 870 740 ;
+C -1 ; WX 560 ; N ccedilla ; B 58 -215 597 520 ;
+C -1 ; WX 560 ; N ccaron ; B 58 -9 597 734 ;
+C -1 ; WX 560 ; N cacute ; B 58 -9 597 748 ;
+C -1 ; WX 680 ; N aogonek ; B 84 -179 735 520 ;
+C -1 ; WX 680 ; N aring ; B 84 -9 735 769 ;
+C -1 ; WX 680 ; N atilde ; B 84 -9 735 703 ;
+C -1 ; WX 680 ; N abreve ; B 84 -9 735 710 ;
+C -1 ; WX 560 ; N egrave ; B 59 -9 596 748 ;
+C -1 ; WX 680 ; N agrave ; B 84 -9 735 748 ;
+C -1 ; WX 680 ; N aacute ; B 84 -9 735 748 ;
+C -1 ; WX 680 ; N adieresis ; B 84 -9 735 729 ;
+C -1 ; WX 740 ; N Uogonek ; B 112 -179 855 681 ;
+C -1 ; WX 680 ; N ugrave ; B 83 -9 720 748 ;
+C -1 ; WX 680 ; N uacute ; B 83 -9 720 748 ;
+C -1 ; WX 680 ; N udieresis ; B 83 -9 720 729 ;
+C -1 ; WX 520 ; N tcaron ; B 106 -9 580 740 ;
+C -1 ; WX 540 ; N scommaaccent ; B 32 -328 573 520 ;
+C -1 ; WX 680 ; N Zcaron ; B 23 0 740 900 ;
+C -1 ; WX 560 ; N ecircumflex ; B 59 -9 596 734 ;
+C -1 ; WX 740 ; N Ucircumflex ; B 112 -13 855 900 ;
+C -1 ; WX 680 ; N acircumflex ; B 84 -9 735 734 ;
+C -1 ; WX 680 ; N Zdotaccent ; B 23 0 740 898 ;
+C -1 ; WX 540 ; N scaron ; B 32 -9 573 734 ;
+C -1 ; WX 720 ; N Amacron ; B -27 0 769 844 ;
+C -1 ; WX 540 ; N sacute ; B 32 -9 573 748 ;
+C -1 ; WX 700 ; N Tcommaaccent ; B 70 -332 802 681 ;
+C -1 ; WX 660 ; N Ydieresis ; B 72 0 817 895 ;
+C -1 ; WX 660 ; N thorn ; B -24 -213 682 732 ;
+C -1 ; WX 720 ; N Emacron ; B 14 0 777 844 ;
+C -1 ; WX 760 ; N Ograve ; B 78 -13 806 914 ;
+C -1 ; WX 760 ; N Oacute ; B 78 -13 806 914 ;
+C -1 ; WX 760 ; N Odieresis ; B 78 -13 806 895 ;
+C -1 ; WX 740 ; N Ntilde ; B 14 0 845 863 ;
+C -1 ; WX 740 ; N Ncaron ; B 14 0 845 900 ;
+C -1 ; WX 740 ; N Nacute ; B 14 0 845 914 ;
+C -1 ; WX 640 ; N Lcaron ; B 14 0 780 694 ;
+C -1 ; WX 640 ; N Lacute ; B 14 0 725 914 ;
+C -1 ; WX 380 ; N Idotaccent ; B 14 0 485 898 ;
+C -1 ; WX 500 ; N racute ; B 84 0 582 748 ;
+C -1 ; WX 380 ; N Icircumflex ; B 14 0 493 900 ;
+C -1 ; WX 600 ; N ohungarumlaut ; B 59 -9 636 751 ;
+C -1 ; WX 600 ; N otilde ; B 59 -9 627 703 ;
+C -1 ; WX 680 ; N Euro ; B 57 -13 736 694 ;
+C -1 ; WX 600 ; N ocircumflex ; B 59 -9 627 734 ;
+C -1 ; WX 408 ; N onesuperior ; B 118 273 406 681 ;
+C -1 ; WX 408 ; N twosuperior ; B 91 273 485 689 ;
+C -1 ; WX 408 ; N threesuperior ; B 86 265 483 689 ;
+C -1 ; WX 380 ; N Igrave ; B 14 0 485 914 ;
+C -1 ; WX 380 ; N Iacute ; B 14 0 485 914 ;
+C -1 ; WX 380 ; N Imacron ; B 14 0 511 844 ;
+C -1 ; WX 380 ; N Iogonek ; B 14 -179 485 681 ;
+C -1 ; WX 380 ; N Idieresis ; B 14 0 499 895 ;
+C -1 ; WX 760 ; N Gbreve ; B 77 -13 828 878 ;
+C -1 ; WX 740 ; N Umacron ; B 112 -13 855 844 ;
+C -1 ; WX 780 ; N Kcommaaccent ; B 14 -332 879 681 ;
+C -1 ; WX 600 ; N ograve ; B 59 -9 627 748 ;
+C -1 ; WX 700 ; N Scommaaccent ; B 59 -332 731 694 ;
+C -1 ; WX 720 ; N Eogonek ; B 14 -179 777 681 ;
+C -1 ; WX 600 ; N oacute ; B 59 -9 627 748 ;
+C -1 ; WX 720 ; N Edotaccent ; B 14 0 777 898 ;
+C -1 ; WX 380 ; N iogonek ; B 83 -179 420 762 ;
+C -1 ; WX 620 ; N gcommaaccent ; B 21 -208 669 843 ;
+C -1 ; WX 600 ; N odieresis ; B 59 -9 627 729 ;
+C -1 ; WX 680 ; N ntilde ; B 83 -9 715 703 ;
+C -1 ; WX 680 ; N ncaron ; B 83 -9 715 734 ;
+C -1 ; WX 720 ; N Ecaron ; B 14 0 777 900 ;
+C -1 ; WX 720 ; N Ecircumflex ; B 14 0 777 900 ;
+C -1 ; WX 540 ; N scedilla ; B 32 -215 573 520 ;
+C -1 ; WX 500 ; N rcaron ; B 84 0 582 734 ;
+C -1 ; WX 720 ; N Egrave ; B 14 0 777 914 ;
+C -1 ; WX 720 ; N Eacute ; B 14 0 777 914 ;
+C -1 ; WX 760 ; N Gcommaaccent ; B 77 -332 828 694 ;
+C -1 ; WX 740 ; N Rcommaaccent ; B 14 -332 765 681 ;
+C -1 ; WX 720 ; N Edieresis ; B 14 0 777 895 ;
+C -1 ; WX 680 ; N nacute ; B 83 -9 715 748 ;
+C -1 ; WX 680 ; N uogonek ; B 83 -179 720 511 ;
+C -1 ; WX 680 ; N umacron ; B 83 -9 720 691 ;
+C -1 ; WX 760 ; N Dcaron ; B 14 0 805 900 ;
+C -1 ; WX 509 ; N lcaron ; B 109 -9 569 740 ;
+C -1 ; WX 700 ; N Ccaron ; B 78 -13 754 900 ;
+C -1 ; WX 700 ; N Cacute ; B 78 -13 754 914 ;
+C -1 ; WX 700 ; N Ccedilla ; B 78 -215 754 694 ;
+C -1 ; WX 400 ; N degree ; B 130 380 430 686 ;
+C -1 ; WX 720 ; N Aogonek ; B -27 -179 797 681 ;
+C -1 ; WX 600 ; N minus ; B 91 293 595 407 ;
+C -1 ; WX 600 ; N multiply ; B 91 100 595 604 ;
+C -1 ; WX 600 ; N divide ; B 91 69 595 631 ;
+C -1 ; WX 720 ; N Aring ; B -27 0 769 927 ;
+C -1 ; WX 940 ; N trademark ; B 42 273 982 681 ;
+C -1 ; WX 500 ; N rcommaaccent ; B 66 -328 582 520 ;
+C -1 ; WX 380 ; N lacute ; B 109 -9 427 914 ;
+C -1 ; WX 600 ; N omacron ; B 59 -9 627 691 ;
+C -1 ; WX 720 ; N Atilde ; B -27 0 769 863 ;
+C -1 ; WX 380 ; N icircumflex ; B 83 -9 433 734 ;
+C -1 ; WX 380 ; N igrave ; B 83 -9 424 748 ;
+C -1 ; WX 680 ; N ncommaaccent ; B 83 -328 715 520 ;
+C -1 ; WX 380 ; N lcommaaccent ; B 86 -328 410 732 ;
+C -1 ; WX 600 ; N plusminus ; B 91 0 595 628 ;
+C -1 ; WX 1020 ; N onehalf ; B 118 0 1036 681 ;
+C -1 ; WX 1020 ; N onequarter ; B 118 0 1054 681 ;
+C -1 ; WX 1020 ; N threequarters ; B 86 0 1054 689 ;
+C -1 ; WX 380 ; N iacute ; B 83 -9 420 748 ;
+C -1 ; WX 720 ; N Abreve ; B -27 0 769 878 ;
+C -1 ; WX 700 ; N kcommaaccent ; B 97 -328 732 732 ;
+C -1 ; WX 760 ; N Omacron ; B 78 -13 806 844 ;
+C -1 ; WX 380 ; N imacron ; B 83 -9 481 691 ;
+C -1 ; WX 560 ; N emacron ; B 59 -9 596 691 ;
+C -1 ; WX 680 ; N amacron ; B 84 -9 735 691 ;
+C -1 ; WX 440 ; N tcommaaccent ; B 106 -328 488 659 ;
+C -1 ; WX 600 ; N ydieresis ; B 25 -204 642 729 ;
+C -1 ; WX 560 ; N zdotaccent ; B 36 -9 586 732 ;
+C -1 ; WX 560 ; N zcaron ; B 36 -9 586 734 ;
+C -1 ; WX 560 ; N zacute ; B 36 -9 586 748 ;
+C -1 ; WX 600 ; N yacute ; B 25 -204 642 748 ;
+C -1 ; WX 680 ; N uhungarumlaut ; B 83 -9 720 751 ;
+C -1 ; WX 600 ; N eth ; B 59 -9 662 735 ;
+C -1 ; WX 680 ; N uring ; B 83 -9 720 769 ;
+C -1 ; WX 760 ; N Ocircumflex ; B 78 -13 806 900 ;
+C -1 ; WX 360 ; N commaaccent ; B 76 -328 254 -50 ;
+C -1 ; WX 780 ; N copyright ; B 83 0 783 700 ;
+C -1 ; WX 780 ; N registered ; B 83 0 783 700 ;
+C -1 ; WX 720 ; N Acircumflex ; B -27 0 769 900 ;
+C -1 ; WX 380 ; N idieresis ; B 83 -9 479 729 ;
+C -1 ; WX 494 ; N lozenge ; B 83 0 531 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 600 ; N notequal ; B 91 63 595 646 ;
+C -1 ; WX 549 ; N radical ; B -4 -35 578 918 ;
+C -1 ; WX 720 ; N Agrave ; B -27 0 769 914 ;
+C -1 ; WX 720 ; N Aacute ; B -27 0 769 914 ;
+C -1 ; WX 600 ; N lessequal ; B 85 0 589 722 ;
+C -1 ; WX 600 ; N greaterequal ; B 91 0 595 722 ;
+C -1 ; WX 620 ; N logicalnot ; B 81 80 585 367 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 9 -10 478 755 ;
+C -1 ; WX 740 ; N Ncommaaccent ; B 14 -332 845 681 ;
+C -1 ; WX 680 ; N dcroat ; B 60 -9 742 732 ;
+C -1 ; WX 620 ; N brokenbar ; B 303 0 422 722 ;
+C -1 ; WX 640 ; N Lcommaaccent ; B 14 -332 725 681 ;
+C -1 ; WX 720 ; N Adieresis ; B -27 0 769 895 ;
+C -1 ; WX 680 ; N mu ; B 54 -195 720 511 ;
+C -1 ; WX 340 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -34
+KPX A Ccedilla -35
+KPX A G -30
+KPX A O -35
+KPX A Odieresis -35
+KPX A Q 6
+KPX A T -39
+KPX A U -28
+KPX A Uacute -28
+KPX A Ucircumflex -28
+KPX A Udieresis -28
+KPX A Ugrave -28
+KPX A V -67
+KPX A W -52
+KPX A Y -36
+KPX A a -16
+KPX A b 6
+KPX A c -6
+KPX A ccedilla -8
+KPX A comma 11
+KPX A d -4
+KPX A e -6
+KPX A g -17
+KPX A guillemotleft -21
+KPX A guilsinglleft -21
+KPX A hyphen -4
+KPX A o -4
+KPX A period 8
+KPX A q -5
+KPX A quotedblright -82
+KPX A quoteright -82
+KPX A t -18
+KPX A u -16
+KPX A v -3
+KPX A w -3
+KPX A y -8
+KPX Aacute C -34
+KPX Aacute G -30
+KPX Aacute O -36
+KPX Aacute Q 6
+KPX Aacute T -39
+KPX Aacute U -28
+KPX Aacute V -67
+KPX Aacute W -52
+KPX Aacute Y -36
+KPX Aacute a -16
+KPX Aacute b 6
+KPX Aacute c -6
+KPX Aacute comma 11
+KPX Aacute d -4
+KPX Aacute e -6
+KPX Aacute g -17
+KPX Aacute guillemotleft -21
+KPX Aacute guilsinglleft -21
+KPX Aacute hyphen -4
+KPX Aacute o -4
+KPX Aacute period 8
+KPX Aacute q -5
+KPX Aacute quoteright -83
+KPX Aacute t -18
+KPX Aacute u -16
+KPX Aacute v -3
+KPX Aacute w -3
+KPX Aacute y -8
+KPX Acircumflex C -34
+KPX Acircumflex G -30
+KPX Acircumflex O -36
+KPX Acircumflex Q 6
+KPX Acircumflex T -39
+KPX Acircumflex U -28
+KPX Acircumflex V -67
+KPX Acircumflex W -52
+KPX Acircumflex Y -36
+KPX Acircumflex comma 11
+KPX Acircumflex period 8
+KPX Adieresis C -34
+KPX Adieresis G -30
+KPX Adieresis O -36
+KPX Adieresis Q 6
+KPX Adieresis T -39
+KPX Adieresis U -28
+KPX Adieresis V -67
+KPX Adieresis W -52
+KPX Adieresis Y -36
+KPX Adieresis a -16
+KPX Adieresis b 6
+KPX Adieresis c -6
+KPX Adieresis comma 11
+KPX Adieresis d -4
+KPX Adieresis g -17
+KPX Adieresis guillemotleft -21
+KPX Adieresis guilsinglleft -21
+KPX Adieresis hyphen -4
+KPX Adieresis o -4
+KPX Adieresis period 8
+KPX Adieresis q -5
+KPX Adieresis quotedblright -83
+KPX Adieresis quoteright -83
+KPX Adieresis t -18
+KPX Adieresis u -16
+KPX Adieresis v -3
+KPX Adieresis w -3
+KPX Adieresis y -8
+KPX Agrave C -34
+KPX Agrave G -30
+KPX Agrave O -36
+KPX Agrave Q 6
+KPX Agrave T -39
+KPX Agrave U -28
+KPX Agrave V -67
+KPX Agrave W -52
+KPX Agrave Y -36
+KPX Agrave comma 11
+KPX Agrave period 8
+KPX Aring C -34
+KPX Aring G -30
+KPX Aring O -36
+KPX Aring Q 6
+KPX Aring T -39
+KPX Aring U -28
+KPX Aring V -67
+KPX Aring W -52
+KPX Aring Y -36
+KPX Aring a -16
+KPX Aring b 6
+KPX Aring c -6
+KPX Aring comma 11
+KPX Aring d -4
+KPX Aring e -6
+KPX Aring g -17
+KPX Aring guillemotleft -21
+KPX Aring guilsinglleft -21
+KPX Aring hyphen -4
+KPX Aring o -4
+KPX Aring period 8
+KPX Aring q -5
+KPX Aring quotedblright -83
+KPX Aring quoteright -83
+KPX Aring t -18
+KPX Aring u -16
+KPX Aring v -3
+KPX Aring w -3
+KPX Aring y -8
+KPX Atilde C -34
+KPX Atilde G -30
+KPX Atilde O -36
+KPX Atilde Q 6
+KPX Atilde T -39
+KPX Atilde U -28
+KPX Atilde V -67
+KPX Atilde W -52
+KPX Atilde Y -36
+KPX Atilde comma 11
+KPX Atilde period 8
+KPX B A 2
+KPX B AE 2
+KPX B Aacute 2
+KPX B Acircumflex 2
+KPX B Adieresis 2
+KPX B Aring 2
+KPX B Atilde 2
+KPX B O -2
+KPX B OE -10
+KPX B Oacute -2
+KPX B Ocircumflex -2
+KPX B Odieresis -2
+KPX B Ograve -2
+KPX B Oslash -2
+KPX B V -5
+KPX B W -5
+KPX B Y -5
+KPX C A 2
+KPX C AE 1
+KPX C Aacute 2
+KPX C Adieresis 2
+KPX C Aring 2
+KPX C H -6
+KPX C K -6
+KPX C O -3
+KPX C Oacute -3
+KPX C Odieresis -3
+KPX Ccedilla A -2
+KPX D A -25
+KPX D Aacute -25
+KPX D Acircumflex -25
+KPX D Adieresis -25
+KPX D Agrave -25
+KPX D Aring -25
+KPX D Atilde -25
+KPX D J 11
+KPX D T -1
+KPX D V -28
+KPX D W -21
+KPX D X -34
+KPX D Y -28
+KPX F A -65
+KPX F Aacute -65
+KPX F Acircumflex -65
+KPX F Adieresis -65
+KPX F Agrave -65
+KPX F Aring -65
+KPX F Atilde -65
+KPX F J -43
+KPX F O 15
+KPX F Odieresis 15
+KPX F a -23
+KPX F aacute -23
+KPX F adieresis -23
+KPX F ae 10
+KPX F aring -23
+KPX F comma -110
+KPX F e -18
+KPX F eacute -18
+KPX F hyphen -12
+KPX F i 22
+KPX F j 15
+KPX F o -11
+KPX F oacute -11
+KPX F odieresis -11
+KPX F oe -6
+KPX F oslash -10
+KPX F period -113
+KPX F r 21
+KPX F u 22
+KPX G A -5
+KPX G AE -5
+KPX G Aacute -5
+KPX G Acircumflex -5
+KPX G Adieresis -5
+KPX G Agrave -5
+KPX G Aring -5
+KPX G Atilde -5
+KPX G T -20
+KPX G V -30
+KPX G W -19
+KPX G Y -30
+KPX J A -40
+KPX J AE -40
+KPX J Adieresis -40
+KPX J Aring -40
+KPX K C -35
+KPX K G -34
+KPX K O -35
+KPX K OE -43
+KPX K Oacute -35
+KPX K Odieresis -35
+KPX K S -11
+KPX K T -6
+KPX K a -24
+KPX K adieresis -24
+KPX K ae 12
+KPX K aring -24
+KPX K e -14
+KPX K hyphen -39
+KPX K o -12
+KPX K oacute -12
+KPX K odieresis -12
+KPX K u -24
+KPX K udieresis -24
+KPX K y -16
+KPX L A 27
+KPX L AE 26
+KPX L Aacute 27
+KPX L Adieresis 27
+KPX L Aring 27
+KPX L C 18
+KPX L Ccedilla 17
+KPX L G 19
+KPX L O 17
+KPX L Oacute 17
+KPX L Ocircumflex 17
+KPX L Odieresis 17
+KPX L Ograve 17
+KPX L Otilde 17
+KPX L S 28
+KPX L T -59
+KPX L U -6
+KPX L Udieresis -6
+KPX L V -47
+KPX L W -32
+KPX L Y -51
+KPX L hyphen 55
+KPX L quotedblright -73
+KPX L quoteright -73
+KPX L u 1
+KPX L udieresis -2
+KPX L y 8
+KPX N A -22
+KPX N AE -22
+KPX N Aacute -22
+KPX N Adieresis -22
+KPX N Aring -22
+KPX N C -20
+KPX N Ccedilla -19
+KPX N G -19
+KPX N O -20
+KPX N Oacute -20
+KPX N Odieresis -20
+KPX N a -35
+KPX N aacute -37
+KPX N adieresis -37
+KPX N ae -21
+KPX N aring -37
+KPX N comma -37
+KPX N e -27
+KPX N eacute -29
+KPX N o -24
+KPX N oacute -26
+KPX N odieresis -26
+KPX N oslash -21
+KPX N period -40
+KPX N u -33
+KPX N udieresis -35
+KPX O A -27
+KPX O AE -27
+KPX O Aacute -27
+KPX O Adieresis -27
+KPX O Aring -27
+KPX O T -2
+KPX O V -33
+KPX O W -22
+KPX O X -35
+KPX O Y -33
+KPX Oacute A -27
+KPX Oacute T -2
+KPX Oacute V -33
+KPX Oacute W -22
+KPX Oacute Y -33
+KPX Ocircumflex T -2
+KPX Ocircumflex V -33
+KPX Ocircumflex Y -33
+KPX Odieresis A -27
+KPX Odieresis T -2
+KPX Odieresis V -33
+KPX Odieresis W -22
+KPX Odieresis X -35
+KPX Odieresis Y -33
+KPX Ograve T -2
+KPX Ograve V -33
+KPX Ograve Y -33
+KPX Oslash A -20
+KPX Otilde T -2
+KPX Otilde V -33
+KPX Otilde Y -33
+KPX P A -66
+KPX P AE -112
+KPX P Aacute -66
+KPX P Adieresis -66
+KPX P Aring -66
+KPX P J -43
+KPX P a -30
+KPX P aacute -30
+KPX P adieresis -30
+KPX P ae -3
+KPX P aring -30
+KPX P comma -108
+KPX P e -22
+KPX P eacute -22
+KPX P hyphen -8
+KPX P o -19
+KPX P oacute -19
+KPX P odieresis -19
+KPX P oe -13
+KPX P oslash -16
+KPX P period -111
+KPX R C -21
+KPX R Ccedilla -20
+KPX R G -20
+KPX R O -21
+KPX R OE -28
+KPX R Oacute -21
+KPX R Odieresis -21
+KPX R T -11
+KPX R U -26
+KPX R Udieresis -26
+KPX R V -17
+KPX R W -17
+KPX R Y -17
+KPX R a -28
+KPX R aacute -28
+KPX R adieresis -28
+KPX R ae 8
+KPX R aring -28
+KPX R e -18
+KPX R eacute -18
+KPX R hyphen -27
+KPX R o -16
+KPX R oacute -16
+KPX R odieresis -16
+KPX R oe -10
+KPX R u -23
+KPX R uacute -24
+KPX R udieresis -24
+KPX R y -16
+KPX S A 5
+KPX S AE 5
+KPX S Aacute 5
+KPX S Adieresis 5
+KPX S Aring 5
+KPX S T -10
+KPX S V -11
+KPX S W -11
+KPX S Y -11
+KPX S t -9
+KPX T A -51
+KPX T AE -52
+KPX T Aacute -51
+KPX T Acircumflex -51
+KPX T Adieresis -51
+KPX T Agrave -51
+KPX T Aring -51
+KPX T Atilde -51
+KPX T C 8
+KPX T G 8
+KPX T J -59
+KPX T O 10
+KPX T OE 2
+KPX T Oacute 10
+KPX T Ocircumflex 10
+KPX T Odieresis 10
+KPX T Ograve 10
+KPX T Oslash 7
+KPX T Otilde 10
+KPX T S 5
+KPX T V 16
+KPX T W 16
+KPX T Y 16
+KPX T a -35
+KPX T ae 1
+KPX T c -33
+KPX T colon -22
+KPX T comma -97
+KPX T e -34
+KPX T g -27
+KPX T guillemotleft -29
+KPX T guilsinglleft -29
+KPX T hyphen -84
+KPX T i 19
+KPX T j 12
+KPX T o -24
+KPX T oslash -22
+KPX T period -100
+KPX T r 18
+KPX T s -9
+KPX T semicolon -20
+KPX T u 19
+KPX T v 33
+KPX T w 33
+KPX T y 27
+KPX U A -35
+KPX U AE -35
+KPX U Aacute -35
+KPX U Acircumflex -35
+KPX U Adieresis -35
+KPX U Aring -35
+KPX U Atilde -35
+KPX U comma -49
+KPX U m -32
+KPX U n -32
+KPX U p -37
+KPX U period -52
+KPX U r -33
+KPX Uacute A -35
+KPX Uacute comma -49
+KPX Uacute m -32
+KPX Uacute n -32
+KPX Uacute p -37
+KPX Uacute period -52
+KPX Uacute r -33
+KPX Ucircumflex A -35
+KPX Udieresis A -35
+KPX Udieresis b 23
+KPX Udieresis comma -49
+KPX Udieresis m -32
+KPX Udieresis n -32
+KPX Udieresis p -37
+KPX Udieresis period -52
+KPX Udieresis r -33
+KPX Ugrave A -35
+KPX V A -70
+KPX V AE -86
+KPX V Aacute -70
+KPX V Acircumflex -70
+KPX V Adieresis -70
+KPX V Agrave -70
+KPX V Aring -70
+KPX V Atilde -70
+KPX V C -18
+KPX V G -20
+KPX V O -19
+KPX V Oacute -19
+KPX V Ocircumflex -19
+KPX V Odieresis -19
+KPX V Ograve -19
+KPX V Oslash -25
+KPX V Otilde -19
+KPX V S 4
+KPX V T 24
+KPX V a -66
+KPX V ae -49
+KPX V colon -76
+KPX V comma -94
+KPX V e -58
+KPX V g -63
+KPX V guillemotleft -52
+KPX V guilsinglleft -52
+KPX V hyphen -29
+KPX V i 3
+KPX V o -54
+KPX V oslash -51
+KPX V period -97
+KPX V r -31
+KPX V semicolon -74
+KPX V u -31
+KPX V y -23
+KPX W A -95
+KPX W AE -103
+KPX W Aacute -95
+KPX W Acircumflex -95
+KPX W Adieresis -95
+KPX W Agrave -95
+KPX W Aring -95
+KPX W Atilde -95
+KPX W C -52
+KPX W G -55
+KPX W O -53
+KPX W Oacute -53
+KPX W Ocircumflex -53
+KPX W Odieresis -53
+KPX W Ograve -53
+KPX W Oslash -58
+KPX W Otilde -53
+KPX W S -30
+KPX W T -10
+KPX W a -88
+KPX W ae -73
+KPX W colon -100
+KPX W comma -112
+KPX W e -80
+KPX W g -85
+KPX W guillemotleft -74
+KPX W guilsinglleft -74
+KPX W hyphen -52
+KPX W i -31
+KPX W o -77
+KPX W oslash -74
+KPX W period -115
+KPX W r -60
+KPX W semicolon -97
+KPX W u -60
+KPX W y -52
+KPX X C -42
+KPX X O -41
+KPX X Odieresis -41
+KPX X Q -5
+KPX X a -27
+KPX X e -18
+KPX X hyphen -55
+KPX X o -15
+KPX X u -28
+KPX X y -20
+KPX Y A -48
+KPX Y AE -48
+KPX Y Aacute -48
+KPX Y Acircumflex -48
+KPX Y Adieresis -48
+KPX Y Agrave -48
+KPX Y Aring -48
+KPX Y Atilde -48
+KPX Y C -19
+KPX Y G -21
+KPX Y O -20
+KPX Y Oacute -20
+KPX Y Ocircumflex -20
+KPX Y Odieresis -20
+KPX Y Ograve -20
+KPX Y Oslash -26
+KPX Y Otilde -20
+KPX Y S 3
+KPX Y T 23
+KPX Y a -84
+KPX Y ae -67
+KPX Y colon -90
+KPX Y comma -90
+KPX Y e -76
+KPX Y g -81
+KPX Y guillemotleft -78
+KPX Y guilsinglleft -78
+KPX Y hyphen -69
+KPX Y i 2
+KPX Y o -72
+KPX Y oslash -68
+KPX Y p -49
+KPX Y period -93
+KPX Y semicolon -88
+KPX Y u -46
+KPX Y v -32
+KPX Z v -6
+KPX Z y -10
+KPX a j -16
+KPX a quoteright -43
+KPX a v -2
+KPX a w -2
+KPX a y -7
+KPX aacute v -2
+KPX aacute w -2
+KPX aacute y -7
+KPX adieresis v -2
+KPX adieresis w -2
+KPX adieresis y -7
+KPX ae v 4
+KPX ae w 4
+KPX ae y -1
+KPX agrave v -2
+KPX agrave w -2
+KPX agrave y -7
+KPX aring v -2
+KPX aring w -2
+KPX aring y -7
+KPX b v -1
+KPX b w -1
+KPX b y -6
+KPX c h -26
+KPX c k -28
+KPX comma one -61
+KPX comma quotedblright -49
+KPX comma quoteright -49
+KPX e quoteright -18
+KPX e t -20
+KPX e v 6
+KPX e w 6
+KPX e x 5
+KPX e y 0
+KPX eacute v 6
+KPX eacute w 6
+KPX eacute y 0
+KPX ecircumflex v 6
+KPX ecircumflex w 6
+KPX ecircumflex y 0
+KPX eight four -19
+KPX eight one -84
+KPX eight seven -47
+KPX f a -48
+KPX f aacute -49
+KPX f adieresis -12
+KPX f ae -19
+KPX f aring -47
+KPX f e -40
+KPX f eacute -42
+KPX f f 6
+KPX f i 34
+KPX f j 26
+KPX f l 59
+KPX f o -36
+KPX f oacute -38
+KPX f odieresis 12
+KPX f oe -31
+KPX f oslash -33
+KPX f quoteright 31
+KPX f s -28
+KPX f t -17
+KPX five four -21
+KPX five one -94
+KPX five seven -69
+KPX four four -4
+KPX four one -82
+KPX four seven -66
+KPX g a -8
+KPX g adieresis -9
+KPX g ae 5
+KPX g aring -9
+KPX g e 0
+KPX g eacute -1
+KPX g l -14
+KPX g oacute 1
+KPX g odieresis 1
+KPX g r -4
+KPX guillemotright A -27
+KPX guillemotright AE -28
+KPX guillemotright Aacute -27
+KPX guillemotright Adieresis -27
+KPX guillemotright Aring -27
+KPX guillemotright T -52
+KPX guillemotright V -58
+KPX guillemotright W -41
+KPX guillemotright Y -75
+KPX guilsinglright A -26
+KPX guilsinglright AE -26
+KPX guilsinglright Aacute -26
+KPX guilsinglright Adieresis -26
+KPX guilsinglright Aring -26
+KPX guilsinglright T -50
+KPX guilsinglright V -57
+KPX guilsinglright W -40
+KPX guilsinglright Y -73
+KPX h quoteright -65
+KPX h y -16
+KPX hyphen A -12
+KPX hyphen AE -55
+KPX hyphen Aacute -12
+KPX hyphen Adieresis -12
+KPX hyphen Aring -12
+KPX hyphen T -77
+KPX hyphen V -33
+KPX hyphen W -15
+KPX hyphen Y -61
+KPX i T -41
+KPX i j -21
+KPX k a -28
+KPX k aacute -28
+KPX k adieresis -28
+KPX k ae 8
+KPX k aring -28
+KPX k comma -9
+KPX k e -18
+KPX k eacute -18
+KPX k g -29
+KPX k hyphen -35
+KPX k o -16
+KPX k oacute -16
+KPX k odieresis -16
+KPX k period -12
+KPX k s 11
+KPX k u -13
+KPX k udieresis -13
+KPX l v -15
+KPX l y -20
+KPX m p -19
+KPX m v -12
+KPX m w -12
+KPX m y -17
+KPX n T -47
+KPX n p -22
+KPX n quoteright -55
+KPX n v -13
+KPX n w -13
+KPX n y -18
+KPX nine four -16
+KPX nine one -80
+KPX nine seven -31
+KPX o T -39
+KPX o quoteright -34
+KPX o t -23
+KPX o v -4
+KPX o w -4
+KPX o x -16
+KPX o y -9
+KPX oacute v -4
+KPX oacute w -4
+KPX oacute y -9
+KPX ocircumflex t -24
+KPX odieresis t -24
+KPX odieresis v -4
+KPX odieresis w -4
+KPX odieresis x -16
+KPX odieresis y -9
+KPX ograve v -4
+KPX ograve w -4
+KPX ograve y -9
+KPX one comma -77
+KPX one eight -87
+KPX one five -87
+KPX one four -117
+KPX one nine -78
+KPX one one -108
+KPX one period -80
+KPX one seven -127
+KPX one six -93
+KPX one three -85
+KPX one two -75
+KPX one zero -93
+KPX p t -24
+KPX p y -10
+KPX period one -64
+KPX period quotedblright -50
+KPX period quoteright -50
+KPX q c -12
+KPX q u -18
+KPX quotedblbase A 29
+KPX quotedblbase AE 18
+KPX quotedblbase T -64
+KPX quotedblbase V -74
+KPX quotedblbase W -52
+KPX quotedblbase Y -57
+KPX quotedblleft A -89
+KPX quotedblleft AE -176
+KPX quotedblleft Aacute -90
+KPX quotedblleft Adieresis -90
+KPX quotedblleft Aring -90
+KPX quotedblleft T -3
+KPX quotedblleft V 6
+KPX quotedblleft W 12
+KPX quotedblleft Y 1
+KPX quotedblright A -91
+KPX quotedblright AE -183
+KPX quotedblright Aacute -92
+KPX quotedblright Adieresis -92
+KPX quotedblright Aring -92
+KPX quotedblright T -7
+KPX quotedblright V 5
+KPX quotedblright W 12
+KPX quotedblright Y 1
+KPX quoteleft A -95
+KPX quoteleft AE -182
+KPX quoteleft Aacute -96
+KPX quoteleft Adieresis -96
+KPX quoteleft Aring -96
+KPX quoteleft T -9
+KPX quoteleft V 0
+KPX quoteleft W 6
+KPX quoteleft Y -4
+KPX quoteright A -97
+KPX quoteright AE -189
+KPX quoteright Aacute -98
+KPX quoteright Adieresis -98
+KPX quoteright Aring -98
+KPX quoteright comma -76
+KPX quoteright d -46
+KPX quoteright o -43
+KPX quoteright period -79
+KPX quoteright r -26
+KPX quoteright s -33
+KPX quoteright t -31
+KPX quoteright v -12
+KPX quoteright w -12
+KPX quoteright y -15
+KPX r a -20
+KPX r aacute -20
+KPX r acircumflex -20
+KPX r adieresis -20
+KPX r ae 5
+KPX r agrave -20
+KPX r aring -20
+KPX r c -12
+KPX r ccedilla -9
+KPX r colon -27
+KPX r comma -115
+KPX r d -9
+KPX r e -13
+KPX r eacute -13
+KPX r ecircumflex -13
+KPX r egrave -13
+KPX r f -2
+KPX r g -15
+KPX r h -28
+KPX r hyphen -22
+KPX r i 13
+KPX r j 5
+KPX r k -30
+KPX r l -27
+KPX r m 12
+KPX r n 12
+KPX r o -9
+KPX r oacute -9
+KPX r ocircumflex -9
+KPX r odieresis -9
+KPX r oe -3
+KPX r ograve -9
+KPX r oslash -7
+KPX r p 8
+KPX r period -118
+KPX r q -10
+KPX r quoteright 2
+KPX r r 12
+KPX r s -1
+KPX r semicolon -25
+KPX r t 4
+KPX r u 12
+KPX r v 26
+KPX r w 27
+KPX r x 1
+KPX r y 20
+KPX r z 10
+KPX s quoteright -25
+KPX s t -19
+KPX seven colon -92
+KPX seven comma -102
+KPX seven eight -49
+KPX seven five -56
+KPX seven four -94
+KPX seven one -72
+KPX seven period -105
+KPX seven seven -36
+KPX seven six -55
+KPX seven three -45
+KPX seven two -39
+KPX six four -15
+KPX six one -80
+KPX six seven -46
+KPX t S -9
+KPX t a -28
+KPX t aacute -28
+KPX t adieresis -28
+KPX t ae 6
+KPX t aring -28
+KPX t colon -27
+KPX t e -18
+KPX t eacute -18
+KPX t h -26
+KPX t o -15
+KPX t oacute -15
+KPX t odieresis -15
+KPX t quoteright -30
+KPX t semicolon -24
+KPX three four -24
+KPX three one -87
+KPX three seven -47
+KPX two four -29
+KPX two one -87
+KPX two seven -50
+KPX u quoteright -43
+KPX v a -15
+KPX v aacute -15
+KPX v acircumflex -15
+KPX v adieresis -15
+KPX v ae -5
+KPX v agrave -15
+KPX v aring -15
+KPX v atilde -15
+KPX v c -6
+KPX v colon -36
+KPX v comma -40
+KPX v e -7
+KPX v eacute -7
+KPX v ecircumflex -7
+KPX v egrave -7
+KPX v g -14
+KPX v hyphen 24
+KPX v l -23
+KPX v o -4
+KPX v oacute -4
+KPX v odieresis -4
+KPX v ograve -4
+KPX v oslash -2
+KPX v period -43
+KPX v s -5
+KPX v semicolon -34
+KPX w a -14
+KPX w aacute -14
+KPX w acircumflex -14
+KPX w adieresis -14
+KPX w ae -4
+KPX w agrave -14
+KPX w aring -14
+KPX w atilde -14
+KPX w c -4
+KPX w colon -36
+KPX w comma -37
+KPX w e -5
+KPX w eacute -5
+KPX w ecircumflex -5
+KPX w egrave -5
+KPX w g -13
+KPX w hyphen 25
+KPX w l -22
+KPX w o -3
+KPX w oacute -3
+KPX w odieresis -3
+KPX w ograve -3
+KPX w oslash -1
+KPX w period -40
+KPX w s -4
+KPX w semicolon -33
+KPX x a -32
+KPX x c -22
+KPX x e -22
+KPX x eacute -22
+KPX x o -20
+KPX x q -21
+KPX y a -9
+KPX y aacute -9
+KPX y acircumflex -9
+KPX y adieresis -9
+KPX y ae 4
+KPX y agrave -9
+KPX y aring -9
+KPX y atilde -9
+KPX y c 0
+KPX y colon -27
+KPX y comma -16
+KPX y e 0
+KPX y eacute 0
+KPX y ecircumflex 0
+KPX y egrave 0
+KPX y g -7
+KPX y hyphen 18
+KPX y l -16
+KPX y o 2
+KPX y oacute 2
+KPX y odieresis 2
+KPX y ograve 2
+KPX y oslash 5
+KPX y period -19
+KPX y s 3
+KPX y semicolon -24
+KPX zero four -17
+KPX zero one -82
+KPX zero seven -36
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/b018035l.pfb b/Master/xemtex/gsfonts/b018035l.pfb
new file mode 100644
index 00000000000..749b71ea362
--- /dev/null
+++ b/Master/xemtex/gsfonts/b018035l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/b018035l.pfm b/Master/xemtex/gsfonts/b018035l.pfm
new file mode 100644
index 00000000000..899dff37611
--- /dev/null
+++ b/Master/xemtex/gsfonts/b018035l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/c059013l.afm b/Master/xemtex/gsfonts/c059013l.afm
new file mode 100644
index 00000000000..c3bf69d3ed9
--- /dev/null
+++ b/Master/xemtex/gsfonts/c059013l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName CenturySchL-Roma
+FullName Century Schoolbook L Roman
+FamilyName Century Schoolbook L
+Weight Roman
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -104
+UnderlineThickness 61
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -217 -302 1000 981
+CapHeight 722
+XHeight 466
+Descender -202
+Ascender 737
+StartCharMetrics 316
+C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 296 ; N exclam ; B 87 -14 212 736 ;
+C 34 ; WX 389 ; N quotedbl ; B 61 498 328 736 ;
+C 35 ; WX 556 ; N numbersign ; B 33 0 524 686 ;
+C 36 ; WX 556 ; N dollar ; B 45 -130 510 801 ;
+C 37 ; WX 833 ; N percent ; B 45 0 792 722 ;
+C 38 ; WX 815 ; N ampersand ; B 51 -15 775 737 ;
+C 39 ; WX 204 ; N quoteright ; B 24 450 178 741 ;
+C 40 ; WX 333 ; N parenleft ; B 36 -123 279 736 ;
+C 41 ; WX 333 ; N parenright ; B 54 -123 297 736 ;
+C 42 ; WX 500 ; N asterisk ; B 56 300 443 736 ;
+C 43 ; WX 606 ; N plus ; B 51 0 555 505 ;
+C 44 ; WX 278 ; N comma ; B 64 -183 218 108 ;
+C 45 ; WX 333 ; N hyphen ; B 42 195 291 278 ;
+C 46 ; WX 278 ; N period ; B 74 -14 199 111 ;
+C 47 ; WX 278 ; N slash ; B -23 -14 302 736 ;
+C 48 ; WX 556 ; N zero ; B 42 -15 514 704 ;
+C 49 ; WX 556 ; N one ; B 100 0 496 704 ;
+C 50 ; WX 556 ; N two ; B 35 0 505 704 ;
+C 51 ; WX 556 ; N three ; B 42 -15 498 704 ;
+C 52 ; WX 556 ; N four ; B 28 0 527 704 ;
+C 53 ; WX 556 ; N five ; B 45 -15 502 704 ;
+C 54 ; WX 556 ; N six ; B 42 -15 516 704 ;
+C 55 ; WX 556 ; N seven ; B 59 -14 508 704 ;
+C 56 ; WX 556 ; N eight ; B 41 -15 513 704 ;
+C 57 ; WX 556 ; N nine ; B 39 -15 513 704 ;
+C 58 ; WX 278 ; N colon ; B 86 -14 211 473 ;
+C 59 ; WX 278 ; N semicolon ; B 72 -183 226 472 ;
+C 60 ; WX 606 ; N less ; B 49 -17 558 523 ;
+C 61 ; WX 606 ; N equal ; B 51 112 555 394 ;
+C 62 ; WX 606 ; N greater ; B 48 -17 557 523 ;
+C 63 ; WX 444 ; N question ; B 25 -15 411 736 ;
+C 64 ; WX 737 ; N at ; B 43 -14 705 736 ;
+C 65 ; WX 722 ; N A ; B -8 0 731 736 ;
+C 66 ; WX 722 ; N B ; B 30 0 670 722 ;
+C 67 ; WX 722 ; N C ; B 45 -15 668 737 ;
+C 68 ; WX 778 ; N D ; B 29 0 732 722 ;
+C 69 ; WX 722 ; N E ; B 29 0 663 722 ;
+C 70 ; WX 667 ; N F ; B 29 0 638 722 ;
+C 71 ; WX 778 ; N G ; B 42 -15 772 737 ;
+C 72 ; WX 833 ; N H ; B 29 0 804 722 ;
+C 73 ; WX 407 ; N I ; B 38 0 369 722 ;
+C 74 ; WX 556 ; N J ; B 5 -15 537 722 ;
+C 75 ; WX 778 ; N K ; B 30 0 803 722 ;
+C 76 ; WX 667 ; N L ; B 35 0 646 722 ;
+C 77 ; WX 944 ; N M ; B 22 0 913 722 ;
+C 78 ; WX 815 ; N N ; B 19 -14 794 722 ;
+C 79 ; WX 778 ; N O ; B 45 -15 733 737 ;
+C 80 ; WX 667 ; N P ; B 28 0 649 722 ;
+C 81 ; WX 778 ; N Q ; B 45 -189 749 737 ;
+C 82 ; WX 722 ; N R ; B 26 -15 713 722 ;
+C 83 ; WX 630 ; N S ; B 51 -15 590 737 ;
+C 84 ; WX 667 ; N T ; B 19 0 648 722 ;
+C 85 ; WX 815 ; N U ; B 17 -15 799 722 ;
+C 86 ; WX 722 ; N V ; B -8 -15 731 722 ;
+C 87 ; WX 981 ; N W ; B 6 -15 976 722 ;
+C 88 ; WX 704 ; N X ; B -6 0 716 722 ;
+C 89 ; WX 704 ; N Y ; B -13 0 713 722 ;
+C 90 ; WX 611 ; N Z ; B 24 0 575 722 ;
+C 91 ; WX 333 ; N bracketleft ; B 66 -108 297 722 ;
+C 92 ; WX 606 ; N backslash ; B 74 0 532 737 ;
+C 93 ; WX 333 ; N bracketright ; B 36 -108 266 722 ;
+C 94 ; WX 606 ; N asciicircum ; B 52 318 554 722 ;
+C 95 ; WX 500 ; N underscore ; B 0 -134 500 -73 ;
+C 96 ; WX 204 ; N quoteleft ; B 26 444 181 736 ;
+C 97 ; WX 556 ; N a ; B 44 -15 543 481 ;
+C 98 ; WX 556 ; N b ; B 8 -15 520 737 ;
+C 99 ; WX 444 ; N c ; B 34 -15 426 481 ;
+C 100 ; WX 574 ; N d ; B 43 -15 554 737 ;
+C 101 ; WX 500 ; N e ; B 35 -15 466 481 ;
+C 102 ; WX 333 ; N f ; B 19 0 433 737 ;
+C 103 ; WX 537 ; N g ; B 23 -203 542 495 ;
+C 104 ; WX 611 ; N h ; B 15 0 593 737 ;
+C 105 ; WX 315 ; N i ; B 18 0 289 715 ;
+C 106 ; WX 296 ; N j ; B -82 -202 218 715 ;
+C 107 ; WX 593 ; N k ; B 14 0 587 737 ;
+C 108 ; WX 315 ; N l ; B 19 0 287 737 ;
+C 109 ; WX 889 ; N m ; B 23 0 868 481 ;
+C 110 ; WX 611 ; N n ; B 27 0 593 481 ;
+C 111 ; WX 500 ; N o ; B 34 -15 466 481 ;
+C 112 ; WX 574 ; N p ; B 28 -202 535 481 ;
+C 113 ; WX 556 ; N q ; B 36 -202 548 481 ;
+C 114 ; WX 444 ; N r ; B 21 0 435 481 ;
+C 115 ; WX 463 ; N s ; B 51 -15 421 481 ;
+C 116 ; WX 389 ; N t ; B 18 -15 374 664 ;
+C 117 ; WX 611 ; N u ; B 21 -15 594 466 ;
+C 118 ; WX 537 ; N v ; B 8 -15 528 466 ;
+C 119 ; WX 778 ; N w ; B 15 -15 763 466 ;
+C 120 ; WX 537 ; N x ; B 9 0 529 466 ;
+C 121 ; WX 537 ; N y ; B 3 -206 531 466 ;
+C 122 ; WX 481 ; N z ; B 39 0 435 466 ;
+C 123 ; WX 333 ; N braceleft ; B 66 -108 297 722 ;
+C 124 ; WX 606 ; N bar ; B 264 0 342 722 ;
+C 125 ; WX 333 ; N braceright ; B 36 -108 267 722 ;
+C 126 ; WX 606 ; N asciitilde ; B 51 165 555 327 ;
+C 161 ; WX 296 ; N exclamdown ; B 86 -202 211 549 ;
+C 162 ; WX 556 ; N cent ; B 71 -141 479 585 ;
+C 163 ; WX 556 ; N sterling ; B 17 -15 537 704 ;
+C 164 ; WX 167 ; N fraction ; B -217 0 339 708 ;
+C 165 ; WX 556 ; N yen ; B -1 0 557 722 ;
+C 166 ; WX 556 ; N florin ; B 3 -205 541 737 ;
+C 167 ; WX 500 ; N section ; B 58 -148 448 736 ;
+C 168 ; WX 556 ; N currency ; B 26 93 530 597 ;
+C 169 ; WX 204 ; N quotesingle ; B 59 498 145 736 ;
+C 170 ; WX 389 ; N quotedblleft ; B 26 444 365 736 ;
+C 171 ; WX 426 ; N guillemotleft ; B 38 85 388 402 ;
+C 172 ; WX 259 ; N guilsinglleft ; B 38 85 221 402 ;
+C 173 ; WX 259 ; N guilsinglright ; B 39 85 221 402 ;
+C 174 ; WX 611 ; N fi ; B 16 0 588 736 ;
+C 175 ; WX 611 ; N fl ; B 16 0 590 737 ;
+C 177 ; WX 556 ; N endash ; B 0 206 556 267 ;
+C 178 ; WX 500 ; N dagger ; B 44 -144 460 737 ;
+C 179 ; WX 500 ; N daggerdbl ; B 47 -144 462 737 ;
+C 180 ; WX 278 ; N periodcentered ; B 76 184 201 309 ;
+C 182 ; WX 606 ; N paragraph ; B 49 -144 557 722 ;
+C 183 ; WX 606 ; N bullet ; B 134 217 471 554 ;
+C 184 ; WX 204 ; N quotesinglbase ; B 24 -183 178 108 ;
+C 185 ; WX 389 ; N quotedblbase ; B 24 -183 362 108 ;
+C 186 ; WX 389 ; N quotedblright ; B 24 444 362 736 ;
+C 187 ; WX 426 ; N guillemotright ; B 39 85 388 402 ;
+C 188 ; WX 1000 ; N ellipsis ; B 104 -14 895 111 ;
+C 189 ; WX 1000 ; N perthousand ; B 2 -2 991 700 ;
+C 191 ; WX 444 ; N questiondown ; B 30 -202 416 549 ;
+C 193 ; WX 333 ; N grave ; B 17 535 242 706 ;
+C 194 ; WX 333 ; N acute ; B 91 535 316 706 ;
+C 195 ; WX 333 ; N circumflex ; B 10 535 323 701 ;
+C 196 ; WX 333 ; N tilde ; B 1 553 332 659 ;
+C 197 ; WX 333 ; N macron ; B 10 568 323 622 ;
+C 198 ; WX 333 ; N breve ; B 25 535 308 692 ;
+C 199 ; WX 333 ; N dotaccent ; B 117 544 217 644 ;
+C 200 ; WX 333 ; N dieresis ; B 17 544 316 644 ;
+C 202 ; WX 333 ; N ring ; B 67 530 266 729 ;
+C 203 ; WX 333 ; N cedilla ; B 29 -215 237 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B 45 535 288 701 ;
+C 206 ; WX 333 ; N ogonek ; B 68 -152 246 0 ;
+C 207 ; WX 333 ; N caron ; B 10 535 323 701 ;
+C 208 ; WX 1000 ; N emdash ; B 0 206 1000 267 ;
+C 225 ; WX 1000 ; N AE ; B 0 0 963 722 ;
+C 227 ; WX 334 ; N ordfeminine ; B 5 329 329 730 ;
+C 232 ; WX 667 ; N Lslash ; B 34 0 645 722 ;
+C 233 ; WX 778 ; N Oslash ; B 30 -76 733 762 ;
+C 234 ; WX 1000 ; N OE ; B 19 0 981 722 ;
+C 235 ; WX 300 ; N ordmasculine ; B 10 329 291 730 ;
+C 241 ; WX 796 ; N ae ; B 36 -15 759 481 ;
+C 245 ; WX 315 ; N dotlessi ; B 18 0 289 466 ;
+C 248 ; WX 315 ; N lslash ; B 19 0 287 737 ;
+C 249 ; WX 500 ; N oslash ; B 34 -91 466 555 ;
+C 250 ; WX 833 ; N oe ; B 34 -15 800 481 ;
+C 251 ; WX 574 ; N germandbls ; B 29 -15 535 737 ;
+C -1 ; WX 815 ; N Udieresis ; B 17 -15 799 902 ;
+C -1 ; WX 815 ; N Uacute ; B 17 -15 799 958 ;
+C -1 ; WX 630 ; N Scedilla ; B 51 -215 590 737 ;
+C -1 ; WX 667 ; N Tcaron ; B 19 0 648 953 ;
+C -1 ; WX 630 ; N Scaron ; B 51 -15 590 953 ;
+C -1 ; WX 722 ; N Rcaron ; B 26 -15 713 953 ;
+C -1 ; WX 722 ; N Racute ; B 26 -15 713 958 ;
+C -1 ; WX 630 ; N Sacute ; B 51 -15 590 958 ;
+C -1 ; WX 778 ; N Otilde ; B 45 -15 733 915 ;
+C -1 ; WX 611 ; N ucircumflex ; B 21 -15 594 701 ;
+C -1 ; WX 778 ; N Ohungarumlaut ; B 45 -15 733 953 ;
+C -1 ; WX 815 ; N Uhungarumlaut ; B 17 -15 799 953 ;
+C -1 ; WX 704 ; N Yacute ; B -13 0 713 958 ;
+C -1 ; WX 778 ; N Eth ; B 29 0 732 722 ;
+C -1 ; WX 778 ; N Dcroat ; B 29 0 732 722 ;
+C -1 ; WX 611 ; N Zacute ; B 24 0 575 958 ;
+C -1 ; WX 815 ; N Uring ; B 17 -15 799 981 ;
+C -1 ; WX 537 ; N gbreve ; B 23 -203 542 692 ;
+C -1 ; WX 500 ; N eogonek ; B 35 -152 466 481 ;
+C -1 ; WX 500 ; N edotaccent ; B 35 -15 466 644 ;
+C -1 ; WX 500 ; N ecaron ; B 35 -15 466 701 ;
+C -1 ; WX 815 ; N Ugrave ; B 17 -15 799 958 ;
+C -1 ; WX 667 ; N Thorn ; B 28 0 649 722 ;
+C -1 ; WX 500 ; N eacute ; B 35 -15 466 706 ;
+C -1 ; WX 500 ; N edieresis ; B 35 -15 466 644 ;
+C -1 ; WX 606 ; N dcaron ; B 43 -15 627 740 ;
+C -1 ; WX 444 ; N ccedilla ; B 34 -215 426 481 ;
+C -1 ; WX 444 ; N ccaron ; B 34 -15 426 701 ;
+C -1 ; WX 444 ; N cacute ; B 34 -15 426 706 ;
+C -1 ; WX 556 ; N aogonek ; B 44 -152 564 481 ;
+C -1 ; WX 556 ; N aring ; B 44 -15 543 729 ;
+C -1 ; WX 556 ; N atilde ; B 44 -15 543 659 ;
+C -1 ; WX 556 ; N abreve ; B 44 -15 543 692 ;
+C -1 ; WX 500 ; N egrave ; B 35 -15 466 706 ;
+C -1 ; WX 556 ; N agrave ; B 44 -15 543 706 ;
+C -1 ; WX 556 ; N aacute ; B 44 -15 543 706 ;
+C -1 ; WX 556 ; N adieresis ; B 44 -15 543 644 ;
+C -1 ; WX 815 ; N Uogonek ; B 17 -152 799 722 ;
+C -1 ; WX 611 ; N ugrave ; B 21 -15 594 706 ;
+C -1 ; WX 611 ; N uacute ; B 21 -15 594 706 ;
+C -1 ; WX 611 ; N udieresis ; B 21 -15 594 644 ;
+C -1 ; WX 389 ; N tcaron ; B 18 -15 389 740 ;
+C -1 ; WX 463 ; N scommaaccent ; B 51 -302 421 481 ;
+C -1 ; WX 611 ; N Zcaron ; B 24 0 575 953 ;
+C -1 ; WX 500 ; N ecircumflex ; B 35 -15 466 701 ;
+C -1 ; WX 815 ; N Ucircumflex ; B 17 -15 799 953 ;
+C -1 ; WX 556 ; N acircumflex ; B 44 -15 543 701 ;
+C -1 ; WX 611 ; N Zdotaccent ; B 24 0 575 896 ;
+C -1 ; WX 463 ; N scaron ; B 51 -15 421 701 ;
+C -1 ; WX 722 ; N Amacron ; B -8 0 731 874 ;
+C -1 ; WX 463 ; N sacute ; B 51 -15 421 706 ;
+C -1 ; WX 667 ; N Tcommaaccent ; B 19 -302 648 722 ;
+C -1 ; WX 704 ; N Ydieresis ; B -13 0 713 902 ;
+C -1 ; WX 574 ; N thorn ; B 28 -202 535 737 ;
+C -1 ; WX 722 ; N Emacron ; B 29 0 663 874 ;
+C -1 ; WX 778 ; N Ograve ; B 45 -15 733 958 ;
+C -1 ; WX 778 ; N Oacute ; B 45 -15 733 958 ;
+C -1 ; WX 778 ; N Odieresis ; B 45 -15 733 902 ;
+C -1 ; WX 815 ; N Ntilde ; B 19 -14 794 915 ;
+C -1 ; WX 815 ; N Ncaron ; B 19 -14 794 953 ;
+C -1 ; WX 815 ; N Nacute ; B 19 -14 794 958 ;
+C -1 ; WX 667 ; N Lcaron ; B 35 0 646 740 ;
+C -1 ; WX 667 ; N Lacute ; B 35 0 646 958 ;
+C -1 ; WX 407 ; N Idotaccent ; B 38 0 369 896 ;
+C -1 ; WX 444 ; N racute ; B 21 0 435 706 ;
+C -1 ; WX 407 ; N Icircumflex ; B 38 0 369 953 ;
+C -1 ; WX 500 ; N ohungarumlaut ; B 34 -15 466 701 ;
+C -1 ; WX 500 ; N otilde ; B 34 -15 466 659 ;
+C -1 ; WX 556 ; N Euro ; B 0 -15 545 713 ;
+C -1 ; WX 500 ; N ocircumflex ; B 34 -15 466 701 ;
+C -1 ; WX 333 ; N onesuperior ; B 39 289 294 712 ;
+C -1 ; WX 333 ; N twosuperior ; B 13 289 319 712 ;
+C -1 ; WX 333 ; N threesuperior ; B 18 280 314 712 ;
+C -1 ; WX 407 ; N Igrave ; B 38 0 369 958 ;
+C -1 ; WX 407 ; N Iacute ; B 38 0 369 958 ;
+C -1 ; WX 407 ; N Imacron ; B 38 0 369 874 ;
+C -1 ; WX 407 ; N Iogonek ; B 38 -152 407 722 ;
+C -1 ; WX 407 ; N Idieresis ; B 38 0 369 902 ;
+C -1 ; WX 778 ; N Gbreve ; B 42 -15 772 944 ;
+C -1 ; WX 815 ; N Umacron ; B 17 -15 799 874 ;
+C -1 ; WX 778 ; N Kcommaaccent ; B 30 -302 803 722 ;
+C -1 ; WX 500 ; N ograve ; B 34 -15 466 706 ;
+C -1 ; WX 630 ; N Scommaaccent ; B 51 -302 590 737 ;
+C -1 ; WX 722 ; N Eogonek ; B 29 -152 680 722 ;
+C -1 ; WX 500 ; N oacute ; B 34 -15 466 706 ;
+C -1 ; WX 722 ; N Edotaccent ; B 29 0 663 896 ;
+C -1 ; WX 315 ; N iogonek ; B 18 -152 327 715 ;
+C -1 ; WX 537 ; N gcommaaccent ; B 23 -203 542 780 ;
+C -1 ; WX 500 ; N odieresis ; B 34 -15 466 644 ;
+C -1 ; WX 611 ; N ntilde ; B 27 0 593 659 ;
+C -1 ; WX 611 ; N ncaron ; B 27 0 593 701 ;
+C -1 ; WX 722 ; N Ecaron ; B 29 0 663 953 ;
+C -1 ; WX 722 ; N Ecircumflex ; B 29 0 663 953 ;
+C -1 ; WX 463 ; N scedilla ; B 51 -215 421 481 ;
+C -1 ; WX 444 ; N rcaron ; B 21 0 435 701 ;
+C -1 ; WX 722 ; N Egrave ; B 29 0 663 958 ;
+C -1 ; WX 722 ; N Eacute ; B 29 0 663 958 ;
+C -1 ; WX 778 ; N Gcommaaccent ; B 42 -302 772 737 ;
+C -1 ; WX 722 ; N Rcommaaccent ; B 26 -302 713 722 ;
+C -1 ; WX 722 ; N Edieresis ; B 29 0 663 902 ;
+C -1 ; WX 611 ; N nacute ; B 27 0 593 706 ;
+C -1 ; WX 611 ; N uogonek ; B 21 -152 632 466 ;
+C -1 ; WX 611 ; N umacron ; B 21 -15 594 622 ;
+C -1 ; WX 778 ; N Dcaron ; B 29 0 732 953 ;
+C -1 ; WX 339 ; N lcaron ; B 19 0 359 740 ;
+C -1 ; WX 722 ; N Ccaron ; B 45 -15 668 953 ;
+C -1 ; WX 722 ; N Cacute ; B 45 -15 668 958 ;
+C -1 ; WX 722 ; N Ccedilla ; B 45 -216 668 737 ;
+C -1 ; WX 400 ; N degree ; B 50 380 350 686 ;
+C -1 ; WX 722 ; N Aogonek ; B -8 -152 769 736 ;
+C -1 ; WX 606 ; N minus ; B 51 213 555 293 ;
+C -1 ; WX 606 ; N multiply ; B 51 1 555 505 ;
+C -1 ; WX 606 ; N divide ; B 51 -9 555 515 ;
+C -1 ; WX 722 ; N Aring ; B -8 0 731 979 ;
+C -1 ; WX 1000 ; N trademark ; B 45 294 955 722 ;
+C -1 ; WX 444 ; N rcommaaccent ; B 21 -302 435 481 ;
+C -1 ; WX 315 ; N lacute ; B 19 0 307 958 ;
+C -1 ; WX 500 ; N omacron ; B 34 -15 466 622 ;
+C -1 ; WX 722 ; N Atilde ; B -8 0 731 915 ;
+C -1 ; WX 315 ; N icircumflex ; B 1 0 314 701 ;
+C -1 ; WX 315 ; N igrave ; B 8 0 289 706 ;
+C -1 ; WX 611 ; N ncommaaccent ; B 27 -302 593 481 ;
+C -1 ; WX 315 ; N lcommaaccent ; B 19 -302 287 737 ;
+C -1 ; WX 606 ; N plusminus ; B 51 0 555 581 ;
+C -1 ; WX 834 ; N onehalf ; B 39 0 821 712 ;
+C -1 ; WX 834 ; N onequarter ; B 39 0 795 712 ;
+C -1 ; WX 834 ; N threequarters ; B 28 0 795 712 ;
+C -1 ; WX 315 ; N iacute ; B 18 0 307 706 ;
+C -1 ; WX 722 ; N Abreve ; B -8 0 731 944 ;
+C -1 ; WX 593 ; N kcommaaccent ; B 14 -302 587 737 ;
+C -1 ; WX 778 ; N Omacron ; B 45 -15 733 874 ;
+C -1 ; WX 315 ; N imacron ; B 1 0 314 622 ;
+C -1 ; WX 500 ; N emacron ; B 35 -15 466 622 ;
+C -1 ; WX 556 ; N amacron ; B 44 -15 543 622 ;
+C -1 ; WX 389 ; N tcommaaccent ; B 18 -302 374 664 ;
+C -1 ; WX 537 ; N ydieresis ; B 3 -206 531 644 ;
+C -1 ; WX 481 ; N zdotaccent ; B 39 0 435 644 ;
+C -1 ; WX 481 ; N zcaron ; B 39 0 435 701 ;
+C -1 ; WX 481 ; N zacute ; B 39 0 436 706 ;
+C -1 ; WX 537 ; N yacute ; B 3 -206 531 706 ;
+C -1 ; WX 611 ; N uhungarumlaut ; B 21 -15 594 701 ;
+C -1 ; WX 500 ; N eth ; B 34 -15 466 731 ;
+C -1 ; WX 611 ; N uring ; B 21 -15 594 729 ;
+C -1 ; WX 778 ; N Ocircumflex ; B 45 -15 733 953 ;
+C -1 ; WX 333 ; N commaaccent ; B 96 -302 235 -40 ;
+C -1 ; WX 737 ; N copyright ; B -8 -15 744 737 ;
+C -1 ; WX 737 ; N registered ; B -8 -15 744 737 ;
+C -1 ; WX 722 ; N Acircumflex ; B -8 0 731 953 ;
+C -1 ; WX 315 ; N idieresis ; B 8 0 307 644 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 606 ; N notequal ; B 51 -43 555 549 ;
+C -1 ; WX 549 ; N radical ; B -10 -35 531 916 ;
+C -1 ; WX 722 ; N Agrave ; B -8 0 731 958 ;
+C -1 ; WX 722 ; N Aacute ; B -8 0 731 958 ;
+C -1 ; WX 606 ; N lessequal ; B 49 0 558 643 ;
+C -1 ; WX 606 ; N greaterequal ; B 48 0 557 643 ;
+C -1 ; WX 606 ; N logicalnot ; B 51 0 555 293 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 815 ; N Ncommaaccent ; B 19 -302 794 722 ;
+C -1 ; WX 574 ; N dcroat ; B 43 -15 554 737 ;
+C -1 ; WX 606 ; N brokenbar ; B 264 0 342 722 ;
+C -1 ; WX 667 ; N Lcommaaccent ; B 35 -302 646 722 ;
+C -1 ; WX 722 ; N Adieresis ; B -8 0 731 902 ;
+C -1 ; WX 611 ; N mu ; B 21 -219 594 466 ;
+C -1 ; WX 278 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -38
+KPX A Ccedilla -43
+KPX A G -37
+KPX A O -41
+KPX A Odieresis -41
+KPX A Q -39
+KPX A T -31
+KPX A U -41
+KPX A Uacute -41
+KPX A Ucircumflex -41
+KPX A Udieresis -41
+KPX A Ugrave -41
+KPX A V -101
+KPX A W -90
+KPX A Y -45
+KPX A a 15
+KPX A b 8
+KPX A c -2
+KPX A ccedilla -9
+KPX A comma 13
+KPX A d -6
+KPX A e -5
+KPX A g 18
+KPX A guillemotleft -36
+KPX A guilsinglleft -36
+KPX A hyphen -6
+KPX A o -9
+KPX A period 12
+KPX A q 0
+KPX A quotedblright -67
+KPX A quoteright -66
+KPX A t -12
+KPX A u -15
+KPX A v -66
+KPX A w -61
+KPX A y -70
+KPX Aacute C -38
+KPX Aacute G -37
+KPX Aacute O -41
+KPX Aacute Q -39
+KPX Aacute T -31
+KPX Aacute U -41
+KPX Aacute V -101
+KPX Aacute W -90
+KPX Aacute Y -45
+KPX Aacute a 15
+KPX Aacute b 8
+KPX Aacute c -2
+KPX Aacute comma 13
+KPX Aacute d -6
+KPX Aacute e -5
+KPX Aacute g 18
+KPX Aacute guillemotleft -36
+KPX Aacute guilsinglleft -36
+KPX Aacute hyphen -6
+KPX Aacute o -9
+KPX Aacute period 12
+KPX Aacute q 0
+KPX Aacute quoteright -66
+KPX Aacute t -12
+KPX Aacute u -15
+KPX Aacute v -66
+KPX Aacute w -61
+KPX Aacute y -70
+KPX Acircumflex C -38
+KPX Acircumflex G -37
+KPX Acircumflex O -41
+KPX Acircumflex Q -39
+KPX Acircumflex T -31
+KPX Acircumflex U -41
+KPX Acircumflex V -101
+KPX Acircumflex W -90
+KPX Acircumflex Y -45
+KPX Acircumflex comma 13
+KPX Acircumflex period 12
+KPX Adieresis C -38
+KPX Adieresis G -37
+KPX Adieresis O -41
+KPX Adieresis Q -39
+KPX Adieresis T -31
+KPX Adieresis U -41
+KPX Adieresis V -101
+KPX Adieresis W -90
+KPX Adieresis Y -45
+KPX Adieresis a 15
+KPX Adieresis b 8
+KPX Adieresis c -2
+KPX Adieresis comma 13
+KPX Adieresis d -6
+KPX Adieresis g 18
+KPX Adieresis guillemotleft -36
+KPX Adieresis guilsinglleft -36
+KPX Adieresis hyphen -6
+KPX Adieresis o -9
+KPX Adieresis period 12
+KPX Adieresis q 0
+KPX Adieresis quotedblright -67
+KPX Adieresis quoteright -66
+KPX Adieresis t -12
+KPX Adieresis u -15
+KPX Adieresis v -66
+KPX Adieresis w -61
+KPX Adieresis y -70
+KPX Agrave C -38
+KPX Agrave G -37
+KPX Agrave O -41
+KPX Agrave Q -39
+KPX Agrave T -31
+KPX Agrave U -41
+KPX Agrave V -101
+KPX Agrave W -90
+KPX Agrave Y -45
+KPX Agrave comma 13
+KPX Agrave period 12
+KPX Aring C -38
+KPX Aring G -37
+KPX Aring O -41
+KPX Aring Q -39
+KPX Aring T -31
+KPX Aring U -41
+KPX Aring V -101
+KPX Aring W -90
+KPX Aring Y -45
+KPX Aring a 15
+KPX Aring b 8
+KPX Aring c -2
+KPX Aring comma 13
+KPX Aring d -6
+KPX Aring e -5
+KPX Aring g 18
+KPX Aring guillemotleft -36
+KPX Aring guilsinglleft -36
+KPX Aring hyphen -6
+KPX Aring o -9
+KPX Aring period 12
+KPX Aring q 0
+KPX Aring quotedblright -67
+KPX Aring quoteright -66
+KPX Aring t -12
+KPX Aring u -15
+KPX Aring v -66
+KPX Aring w -61
+KPX Aring y -70
+KPX Atilde C -38
+KPX Atilde G -37
+KPX Atilde O -41
+KPX Atilde Q -39
+KPX Atilde T -31
+KPX Atilde U -41
+KPX Atilde V -101
+KPX Atilde W -90
+KPX Atilde Y -45
+KPX Atilde comma 13
+KPX Atilde period 12
+KPX B A -9
+KPX B AE -13
+KPX B Aacute -9
+KPX B Acircumflex -9
+KPX B Adieresis -9
+KPX B Aring -9
+KPX B Atilde -9
+KPX B O -11
+KPX B OE 0
+KPX B Oacute -11
+KPX B Ocircumflex -11
+KPX B Odieresis -11
+KPX B Ograve -11
+KPX B Oslash -9
+KPX B V -26
+KPX B W -33
+KPX B Y -19
+KPX C A -24
+KPX C AE -28
+KPX C Aacute -24
+KPX C Adieresis -24
+KPX C Aring -24
+KPX C H -9
+KPX C K -9
+KPX C O -6
+KPX C Oacute -6
+KPX C Odieresis -6
+KPX Ccedilla A -28
+KPX D A -38
+KPX D Aacute -38
+KPX D Acircumflex -38
+KPX D Adieresis -38
+KPX D Agrave -38
+KPX D Aring -38
+KPX D Atilde -38
+KPX D J 6
+KPX D T 10
+KPX D V -41
+KPX D W -47
+KPX D X -37
+KPX D Y -34
+KPX F A -77
+KPX F Aacute -77
+KPX F Acircumflex -77
+KPX F Adieresis -77
+KPX F Agrave -77
+KPX F Aring -77
+KPX F Atilde -77
+KPX F J -57
+KPX F O 2
+KPX F Odieresis 2
+KPX F a -36
+KPX F aacute -36
+KPX F adieresis -36
+KPX F ae -33
+KPX F aring -36
+KPX F comma -93
+KPX F e -42
+KPX F eacute -42
+KPX F hyphen -40
+KPX F i 11
+KPX F j 14
+KPX F o -41
+KPX F oacute -41
+KPX F odieresis -29
+KPX F oe -40
+KPX F oslash -45
+KPX F period -94
+KPX F r 10
+KPX F u 14
+KPX G A -6
+KPX G AE -10
+KPX G Aacute -6
+KPX G Acircumflex -6
+KPX G Adieresis -6
+KPX G Agrave -6
+KPX G Aring -6
+KPX G Atilde -6
+KPX G T -12
+KPX G V -13
+KPX G W -20
+KPX G Y -10
+KPX J A -42
+KPX J AE -46
+KPX J Adieresis -42
+KPX J Aring -42
+KPX K C -30
+KPX K G -29
+KPX K O -33
+KPX K OE -23
+KPX K Oacute -33
+KPX K Odieresis -33
+KPX K S 30
+KPX K T 21
+KPX K a 23
+KPX K adieresis 23
+KPX K ae 28
+KPX K aring 23
+KPX K e 2
+KPX K hyphen -30
+KPX K o -1
+KPX K oacute -1
+KPX K odieresis -1
+KPX K u -7
+KPX K udieresis -7
+KPX K y -67
+KPX L A 29
+KPX L AE 25
+KPX L Aacute 29
+KPX L Adieresis 29
+KPX L Aring 29
+KPX L C 7
+KPX L Ccedilla 6
+KPX L G 9
+KPX L O 6
+KPX L Oacute 6
+KPX L Ocircumflex 6
+KPX L Odieresis 6
+KPX L Ograve 6
+KPX L Otilde 6
+KPX L S 8
+KPX L T -51
+KPX L U -27
+KPX L Udieresis -27
+KPX L V -80
+KPX L W -69
+KPX L Y -69
+KPX L hyphen 49
+KPX L quotedblright -47
+KPX L quoteright -46
+KPX L u -8
+KPX L udieresis -8
+KPX L y -37
+KPX N A -19
+KPX N AE -23
+KPX N Aacute -19
+KPX N Adieresis -19
+KPX N Aring -19
+KPX N C -26
+KPX N Ccedilla -26
+KPX N G -24
+KPX N O -26
+KPX N Oacute -26
+KPX N Odieresis -26
+KPX N a -37
+KPX N aacute -37
+KPX N adieresis -37
+KPX N ae -32
+KPX N aring -37
+KPX N comma -24
+KPX N e -29
+KPX N eacute -29
+KPX N o -29
+KPX N oacute -29
+KPX N odieresis -29
+KPX N oslash -28
+KPX N period -25
+KPX N u -39
+KPX N udieresis -39
+KPX O A -41
+KPX O AE -45
+KPX O Aacute -41
+KPX O Adieresis -41
+KPX O Aring -41
+KPX O T 10
+KPX O V -38
+KPX O W -45
+KPX O X -34
+KPX O Y -31
+KPX Oacute A -41
+KPX Oacute T 10
+KPX Oacute V -38
+KPX Oacute W -45
+KPX Oacute Y -31
+KPX Ocircumflex T 10
+KPX Ocircumflex V -38
+KPX Ocircumflex Y -31
+KPX Odieresis A -41
+KPX Odieresis T 10
+KPX Odieresis V -38
+KPX Odieresis W -45
+KPX Odieresis X -34
+KPX Odieresis Y -31
+KPX Ograve T 10
+KPX Ograve V -38
+KPX Ograve Y -31
+KPX Oslash A -44
+KPX Otilde T 10
+KPX Otilde V -38
+KPX Otilde Y -31
+KPX P A -76
+KPX P AE -84
+KPX P Aacute -76
+KPX P Adieresis -76
+KPX P Aring -76
+KPX P J -56
+KPX P a -23
+KPX P aacute -23
+KPX P adieresis -23
+KPX P ae -20
+KPX P aring -23
+KPX P comma -100
+KPX P e -26
+KPX P eacute -26
+KPX P hyphen -35
+KPX P o -26
+KPX P oacute -26
+KPX P odieresis -25
+KPX P oe -25
+KPX P oslash -29
+KPX P period -101
+KPX R C -3
+KPX R Ccedilla -5
+KPX R G 0
+KPX R O -5
+KPX R OE 6
+KPX R Oacute -5
+KPX R Odieresis -5
+KPX R T -10
+KPX R U -22
+KPX R Udieresis -22
+KPX R V -21
+KPX R W -28
+KPX R Y -14
+KPX R a 11
+KPX R aacute 11
+KPX R adieresis 11
+KPX R ae 15
+KPX R aring 11
+KPX R e 15
+KPX R eacute 15
+KPX R hyphen 30
+KPX R o 13
+KPX R oacute 13
+KPX R odieresis 13
+KPX R oe 14
+KPX R u -15
+KPX R uacute -15
+KPX R udieresis -15
+KPX R y -19
+KPX S A -1
+KPX S AE -5
+KPX S Aacute -1
+KPX S Adieresis -1
+KPX S Aring -1
+KPX S T -1
+KPX S V 8
+KPX S W 1
+KPX S Y 10
+KPX S t -5
+KPX T A -32
+KPX T AE -36
+KPX T Aacute -32
+KPX T Acircumflex -32
+KPX T Adieresis -32
+KPX T Agrave -32
+KPX T Aring -32
+KPX T Atilde -32
+KPX T C 10
+KPX T G 12
+KPX T J -58
+KPX T O 10
+KPX T OE 23
+KPX T Oacute 10
+KPX T Ocircumflex 10
+KPX T Odieresis 10
+KPX T Ograve 10
+KPX T Oslash 10
+KPX T Otilde 10
+KPX T S 0
+KPX T V 33
+KPX T W 26
+KPX T Y 35
+KPX T a -19
+KPX T ae -15
+KPX T c -23
+KPX T colon -9
+KPX T comma -71
+KPX T e -24
+KPX T g -23
+KPX T guillemotleft -104
+KPX T guilsinglleft -104
+KPX T hyphen -74
+KPX T i 21
+KPX T j 23
+KPX T o -23
+KPX T oslash -27
+KPX T period -73
+KPX T r 19
+KPX T s -10
+KPX T semicolon -9
+KPX T u 19
+KPX T v 26
+KPX T w 22
+KPX T y 23
+KPX U A -54
+KPX U AE -58
+KPX U Aacute -54
+KPX U Acircumflex -54
+KPX U Adieresis -54
+KPX U Aring -54
+KPX U Atilde -54
+KPX U comma -43
+KPX U m -38
+KPX U n -40
+KPX U p -40
+KPX U period -44
+KPX U r -37
+KPX Uacute A -54
+KPX Uacute comma -43
+KPX Uacute m -38
+KPX Uacute n -40
+KPX Uacute p -40
+KPX Uacute period -44
+KPX Uacute r -37
+KPX Ucircumflex A -54
+KPX Udieresis A -54
+KPX Udieresis b 27
+KPX Udieresis comma -43
+KPX Udieresis m -38
+KPX Udieresis n -40
+KPX Udieresis p -40
+KPX Udieresis period -44
+KPX Udieresis r -37
+KPX Ugrave A -54
+KPX V A -100
+KPX V AE -70
+KPX V Aacute -100
+KPX V Acircumflex -100
+KPX V Adieresis -100
+KPX V Agrave -100
+KPX V Aring -100
+KPX V Atilde -100
+KPX V C -40
+KPX V G -39
+KPX V O -36
+KPX V Oacute -36
+KPX V Ocircumflex -36
+KPX V Odieresis -36
+KPX V Ograve -36
+KPX V Oslash -39
+KPX V Otilde -36
+KPX V S -7
+KPX V T 33
+KPX V a -87
+KPX V ae -84
+KPX V colon -81
+KPX V comma -101
+KPX V e -82
+KPX V g -86
+KPX V guillemotleft -85
+KPX V guilsinglleft -85
+KPX V hyphen -57
+KPX V i -7
+KPX V o -82
+KPX V oslash -82
+KPX V period -102
+KPX V r -49
+KPX V semicolon -81
+KPX V u -47
+KPX V y -43
+KPX W A -84
+KPX W AE -77
+KPX W Aacute -84
+KPX W Acircumflex -84
+KPX W Adieresis -84
+KPX W Agrave -84
+KPX W Aring -84
+KPX W Atilde -84
+KPX W C -47
+KPX W G -45
+KPX W O -43
+KPX W Oacute -43
+KPX W Ocircumflex -43
+KPX W Odieresis -43
+KPX W Ograve -43
+KPX W Oslash -43
+KPX W Otilde -43
+KPX W S -14
+KPX W T 26
+KPX W a -75
+KPX W ae -70
+KPX W colon -75
+KPX W comma -79
+KPX W e -66
+KPX W g -70
+KPX W guillemotleft -70
+KPX W guilsinglleft -70
+KPX W hyphen -41
+KPX W i -14
+KPX W o -67
+KPX W oslash -66
+KPX W period -81
+KPX W r -43
+KPX W semicolon -75
+KPX W u -42
+KPX W y -38
+KPX X C -36
+KPX X O -39
+KPX X Odieresis -39
+KPX X Q -37
+KPX X a 17
+KPX X e -3
+KPX X hyphen -37
+KPX X o -7
+KPX X u -14
+KPX X y -74
+KPX Y A -36
+KPX Y AE -40
+KPX Y Aacute -36
+KPX Y Acircumflex -36
+KPX Y Adieresis -36
+KPX Y Agrave -36
+KPX Y Aring -36
+KPX Y Atilde -36
+KPX Y C -36
+KPX Y G -34
+KPX Y O -32
+KPX Y Oacute -32
+KPX Y Ocircumflex -32
+KPX Y Odieresis -32
+KPX Y Ograve -32
+KPX Y Oslash -35
+KPX Y Otilde -32
+KPX Y S -3
+KPX Y T 33
+KPX Y a -74
+KPX Y ae -69
+KPX Y colon -83
+KPX Y comma -76
+KPX Y e -88
+KPX Y g -71
+KPX Y guillemotleft -104
+KPX Y guilsinglleft -104
+KPX Y hyphen -78
+KPX Y i -7
+KPX Y o -89
+KPX Y oslash -88
+KPX Y p -71
+KPX Y period -77
+KPX Y semicolon -80
+KPX Y u -64
+KPX Y v -58
+KPX Z v -38
+KPX Z y -42
+KPX a j -28
+KPX a quoteright -11
+KPX a v -33
+KPX a w -37
+KPX a y -39
+KPX aacute v -33
+KPX aacute w -37
+KPX aacute y -39
+KPX adieresis v -33
+KPX adieresis w -37
+KPX adieresis y -39
+KPX ae v -21
+KPX ae w -25
+KPX ae y -29
+KPX agrave v -33
+KPX agrave w -37
+KPX agrave y -39
+KPX aring v -33
+KPX aring w -37
+KPX aring y -39
+KPX b v -17
+KPX b w -21
+KPX b y -25
+KPX c h -14
+KPX c k -14
+KPX comma one -35
+KPX comma quotedblright -13
+KPX comma quoteright -12
+KPX e quoteright 10
+KPX e t -20
+KPX e v -19
+KPX e w -22
+KPX e x -18
+KPX e y -25
+KPX eacute v -19
+KPX eacute w -22
+KPX eacute y -25
+KPX ecircumflex v -19
+KPX ecircumflex w -22
+KPX ecircumflex y -25
+KPX eight four 9
+KPX eight one -44
+KPX eight seven -24
+KPX f a -15
+KPX f aacute -15
+KPX f adieresis 19
+KPX f ae -11
+KPX f aring -3
+KPX f e -23
+KPX f eacute -23
+KPX f f 21
+KPX f i 32
+KPX f j 32
+KPX f l 73
+KPX f o -21
+KPX f oacute -21
+KPX f odieresis 31
+KPX f oe -21
+KPX f oslash -25
+KPX f quoteright 72
+KPX f s -10
+KPX f t 13
+KPX five four 4
+KPX five one -63
+KPX five seven -36
+KPX four four 16
+KPX four one -33
+KPX four seven -45
+KPX g a -5
+KPX g adieresis -5
+KPX g ae -2
+KPX g aring -5
+KPX g e -6
+KPX g eacute -6
+KPX g l -10
+KPX g oacute -6
+KPX g odieresis -6
+KPX g r 25
+KPX guillemotright A -36
+KPX guillemotright AE -39
+KPX guillemotright Aacute -36
+KPX guillemotright Adieresis -36
+KPX guillemotright Aring -36
+KPX guillemotright T -104
+KPX guillemotright V -85
+KPX guillemotright W -73
+KPX guillemotright Y -112
+KPX guilsinglright A -36
+KPX guilsinglright AE -39
+KPX guilsinglright Aacute -36
+KPX guilsinglright Adieresis -36
+KPX guilsinglright Aring -36
+KPX guilsinglright T -104
+KPX guilsinglright V -85
+KPX guilsinglright W -73
+KPX guilsinglright Y -112
+KPX h quoteright -11
+KPX h y -43
+KPX hyphen A -5
+KPX hyphen AE -9
+KPX hyphen Aacute -5
+KPX hyphen Adieresis -5
+KPX hyphen Aring -5
+KPX hyphen T -74
+KPX hyphen V -56
+KPX hyphen W -44
+KPX hyphen Y -87
+KPX i T -24
+KPX i j -26
+KPX k a 1
+KPX k aacute 1
+KPX k adieresis 1
+KPX k ae 5
+KPX k aring 1
+KPX k comma 1
+KPX k e -23
+KPX k eacute -23
+KPX k g 4
+KPX k hyphen -63
+KPX k o -26
+KPX k oacute -26
+KPX k odieresis -26
+KPX k period -1
+KPX k s 5
+KPX k u -2
+KPX k udieresis -2
+KPX l v -25
+KPX l y -28
+KPX m p -30
+KPX m v -37
+KPX m w -40
+KPX m y -44
+KPX n T -36
+KPX n p -28
+KPX n quoteright -11
+KPX n v -36
+KPX n w -40
+KPX n y -43
+KPX nine four 0
+KPX nine one -49
+KPX nine seven -9
+KPX o T -22
+KPX o quoteright 8
+KPX o t -21
+KPX o v -22
+KPX o w -26
+KPX o x -22
+KPX o y -30
+KPX oacute v -22
+KPX oacute w -26
+KPX oacute y -30
+KPX ocircumflex t -21
+KPX odieresis t -21
+KPX odieresis v -22
+KPX odieresis w -26
+KPX odieresis x -22
+KPX odieresis y -30
+KPX ograve v -22
+KPX ograve w -26
+KPX ograve y -30
+KPX one comma -20
+KPX one eight -31
+KPX one five -29
+KPX one four -56
+KPX one nine -23
+KPX one one -35
+KPX one period -22
+KPX one seven -83
+KPX one six -50
+KPX one three -27
+KPX one two -2
+KPX one zero -50
+KPX p t -21
+KPX p y -33
+KPX period one -44
+KPX period quotedblright -20
+KPX period quoteright -19
+KPX q c -14
+KPX q u -11
+KPX quotedblbase A 36
+KPX quotedblbase AE 38
+KPX quotedblbase T -49
+KPX quotedblbase V -81
+KPX quotedblbase W -65
+KPX quotedblbase Y -63
+KPX quotedblleft A -65
+KPX quotedblleft AE -78
+KPX quotedblleft Aacute -65
+KPX quotedblleft Adieresis -65
+KPX quotedblleft Aring -65
+KPX quotedblleft T 47
+KPX quotedblleft V 36
+KPX quotedblleft W 29
+KPX quotedblleft Y 38
+KPX quotedblright A -68
+KPX quotedblright AE -81
+KPX quotedblright Aacute -68
+KPX quotedblright Adieresis -68
+KPX quotedblright Aring -68
+KPX quotedblright T 45
+KPX quotedblright V 33
+KPX quotedblright W 26
+KPX quotedblright Y 36
+KPX quoteleft A -65
+KPX quoteleft AE -78
+KPX quoteleft Aacute -65
+KPX quoteleft Adieresis -65
+KPX quoteleft Aring -65
+KPX quoteleft T 48
+KPX quoteleft V 36
+KPX quoteleft W 30
+KPX quoteleft Y 39
+KPX quoteright A -68
+KPX quoteright AE -81
+KPX quoteright Aacute -68
+KPX quoteright Adieresis -68
+KPX quoteright Aring -68
+KPX quoteright comma -30
+KPX quoteright d -9
+KPX quoteright o -7
+KPX quoteright period -31
+KPX quoteright r 0
+KPX quoteright s -4
+KPX quoteright t 4
+KPX quoteright v 8
+KPX quoteright w 4
+KPX quoteright y 5
+KPX r a -7
+KPX r aacute -7
+KPX r acircumflex -7
+KPX r adieresis -7
+KPX r ae -3
+KPX r agrave -7
+KPX r aring -7
+KPX r c -2
+KPX r ccedilla 0
+KPX r colon -8
+KPX r comma -72
+KPX r d -5
+KPX r e -2
+KPX r eacute -2
+KPX r ecircumflex -2
+KPX r egrave -2
+KPX r f 19
+KPX r g -5
+KPX r h -23
+KPX r hyphen -35
+KPX r i 20
+KPX r j 23
+KPX r k -23
+KPX r l -25
+KPX r m 18
+KPX r n 16
+KPX r o -1
+KPX r oacute -1
+KPX r ocircumflex -1
+KPX r odieresis -1
+KPX r oe -1
+KPX r ograve -1
+KPX r oslash -3
+KPX r p 15
+KPX r period -74
+KPX r q -6
+KPX r quoteright 30
+KPX r r 19
+KPX r s -1
+KPX r semicolon -8
+KPX r t 19
+KPX r u 18
+KPX r v 23
+KPX r w 19
+KPX r x 20
+KPX r y 18
+KPX r z -2
+KPX s quoteright 7
+KPX s t -11
+KPX seven colon -76
+KPX seven comma -68
+KPX seven eight -39
+KPX seven five -38
+KPX seven four -77
+KPX seven one -39
+KPX seven period -70
+KPX seven seven -21
+KPX seven six -39
+KPX seven three -31
+KPX seven two -31
+KPX six four 11
+KPX six one -36
+KPX six seven -20
+KPX t S 8
+KPX t a 3
+KPX t aacute 3
+KPX t adieresis 3
+KPX t ae 6
+KPX t aring 3
+KPX t colon -19
+KPX t e 7
+KPX t eacute 7
+KPX t h -4
+KPX t o 7
+KPX t oacute 7
+KPX t odieresis 7
+KPX t quoteright 3
+KPX t semicolon -17
+KPX three four 2
+KPX three one -47
+KPX three seven -26
+KPX two four 5
+KPX two one -37
+KPX two seven -13
+KPX u quoteright -6
+KPX v a -19
+KPX v aacute -19
+KPX v acircumflex -19
+KPX v adieresis -19
+KPX v ae -15
+KPX v agrave -19
+KPX v aring -19
+KPX v atilde -19
+KPX v c -24
+KPX v colon -9
+KPX v comma -78
+KPX v e -25
+KPX v eacute -25
+KPX v ecircumflex -25
+KPX v egrave -25
+KPX v g -23
+KPX v hyphen -29
+KPX v l -25
+KPX v o -23
+KPX v oacute -23
+KPX v odieresis -23
+KPX v ograve -23
+KPX v oslash -28
+KPX v period -79
+KPX v s -11
+KPX v semicolon -10
+KPX w a -22
+KPX w aacute -22
+KPX w acircumflex -22
+KPX w adieresis -22
+KPX w ae -18
+KPX w agrave -22
+KPX w aring -22
+KPX w atilde -22
+KPX w c -27
+KPX w colon -12
+KPX w comma -73
+KPX w e -28
+KPX w eacute -28
+KPX w ecircumflex -28
+KPX w egrave -28
+KPX w g -26
+KPX w hyphen -26
+KPX w l -28
+KPX w o -26
+KPX w oacute -26
+KPX w odieresis -26
+KPX w ograve -26
+KPX w oslash -31
+KPX w period -74
+KPX w s -14
+KPX w semicolon -13
+KPX x a -3
+KPX x c -24
+KPX x e -27
+KPX x eacute -27
+KPX x o -31
+KPX x q -20
+KPX y a -21
+KPX y aacute -21
+KPX y acircumflex -21
+KPX y adieresis -21
+KPX y ae -17
+KPX y agrave -21
+KPX y aring -21
+KPX y atilde -21
+KPX y c -25
+KPX y colon -10
+KPX y comma -76
+KPX y e -26
+KPX y eacute -26
+KPX y ecircumflex -26
+KPX y egrave -26
+KPX y g -25
+KPX y hyphen -28
+KPX y l -24
+KPX y o -25
+KPX y oacute -25
+KPX y odieresis -25
+KPX y ograve -25
+KPX y oslash -29
+KPX y period -78
+KPX y s -12
+KPX y semicolon -11
+KPX zero four 4
+KPX zero one -52
+KPX zero seven -11
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/c059013l.pfb b/Master/xemtex/gsfonts/c059013l.pfb
new file mode 100644
index 00000000000..9cb80166eae
--- /dev/null
+++ b/Master/xemtex/gsfonts/c059013l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/c059013l.pfm b/Master/xemtex/gsfonts/c059013l.pfm
new file mode 100644
index 00000000000..6062d2bc2cd
--- /dev/null
+++ b/Master/xemtex/gsfonts/c059013l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/c059016l.afm b/Master/xemtex/gsfonts/c059016l.afm
new file mode 100644
index 00000000000..a3bb7f0c110
--- /dev/null
+++ b/Master/xemtex/gsfonts/c059016l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName CenturySchL-Bold
+FullName Century Schoolbook L Bold
+FamilyName Century Schoolbook L
+Weight Bold
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -103
+UnderlineThickness 90
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -166 -372 1000 1005
+CapHeight 722
+XHeight 473
+Descender -202
+Ascender 737
+StartCharMetrics 316
+C 32 ; WX 287 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 296 ; N exclam ; B 57 -15 244 737 ;
+C 34 ; WX 333 ; N quotedbl ; B -12 416 346 737 ;
+C 35 ; WX 574 ; N numbersign ; B 41 0 533 700 ;
+C 36 ; WX 574 ; N dollar ; B 25 -137 549 801 ;
+C 37 ; WX 833 ; N percent ; B 17 0 821 722 ;
+C 38 ; WX 852 ; N ampersand ; B 39 -16 822 737 ;
+C 39 ; WX 241 ; N quoteright ; B 22 379 219 737 ;
+C 40 ; WX 389 ; N parenleft ; B 72 -118 338 737 ;
+C 41 ; WX 389 ; N parenright ; B 50 -118 316 737 ;
+C 42 ; WX 500 ; N asterisk ; B 56 297 447 737 ;
+C 43 ; WX 606 ; N plus ; B 51 0 555 505 ;
+C 44 ; WX 278 ; N comma ; B 39 -186 236 173 ;
+C 45 ; WX 333 ; N hyphen ; B 42 180 291 310 ;
+C 46 ; WX 278 ; N period ; B 45 -15 233 173 ;
+C 47 ; WX 278 ; N slash ; B -23 -15 302 737 ;
+C 48 ; WX 574 ; N zero ; B 27 -14 546 708 ;
+C 49 ; WX 574 ; N one ; B 83 0 491 708 ;
+C 50 ; WX 574 ; N two ; B 19 -4 531 708 ;
+C 51 ; WX 574 ; N three ; B 24 -14 530 708 ;
+C 52 ; WX 574 ; N four ; B 19 0 546 708 ;
+C 53 ; WX 574 ; N five ; B 31 -14 535 708 ;
+C 54 ; WX 574 ; N six ; B 29 -14 549 708 ;
+C 55 ; WX 574 ; N seven ; B 45 -14 546 708 ;
+C 56 ; WX 574 ; N eight ; B 27 -14 546 708 ;
+C 57 ; WX 574 ; N nine ; B 25 -14 545 708 ;
+C 58 ; WX 278 ; N colon ; B 57 -15 244 481 ;
+C 59 ; WX 278 ; N semicolon ; B 47 -185 244 481 ;
+C 60 ; WX 606 ; N less ; B 49 -25 558 529 ;
+C 61 ; WX 606 ; N equal ; B 51 92 555 413 ;
+C 62 ; WX 606 ; N greater ; B 48 -25 557 529 ;
+C 63 ; WX 500 ; N question ; B 23 -15 476 737 ;
+C 64 ; WX 747 ; N at ; B 24 -15 722 737 ;
+C 65 ; WX 759 ; N A ; B -18 0 778 737 ;
+C 66 ; WX 778 ; N B ; B 17 0 736 722 ;
+C 67 ; WX 778 ; N C ; B 40 -15 723 737 ;
+C 68 ; WX 833 ; N D ; B 19 0 793 722 ;
+C 69 ; WX 759 ; N E ; B 16 0 707 722 ;
+C 70 ; WX 722 ; N F ; B 22 0 690 722 ;
+C 71 ; WX 833 ; N G ; B 39 -15 817 737 ;
+C 72 ; WX 870 ; N H ; B 20 0 850 722 ;
+C 73 ; WX 444 ; N I ; B 28 0 417 722 ;
+C 74 ; WX 648 ; N J ; B 4 -15 639 722 ;
+C 75 ; WX 815 ; N K ; B 15 0 818 722 ;
+C 76 ; WX 722 ; N L ; B 19 0 701 722 ;
+C 77 ; WX 981 ; N M ; B 9 0 965 722 ;
+C 78 ; WX 833 ; N N ; B 16 -7 833 722 ;
+C 79 ; WX 833 ; N O ; B 39 -15 794 737 ;
+C 80 ; WX 759 ; N P ; B 24 0 735 722 ;
+C 81 ; WX 833 ; N Q ; B 38 -188 808 737 ;
+C 82 ; WX 815 ; N R ; B 20 -15 817 722 ;
+C 83 ; WX 667 ; N S ; B 51 -15 633 737 ;
+C 84 ; WX 722 ; N T ; B 15 0 707 722 ;
+C 85 ; WX 833 ; N U ; B 15 -15 824 722 ;
+C 86 ; WX 759 ; N V ; B -18 -15 778 722 ;
+C 87 ; WX 981 ; N W ; B 6 -15 973 722 ;
+C 88 ; WX 722 ; N X ; B -12 0 735 722 ;
+C 89 ; WX 722 ; N Y ; B -12 0 735 722 ;
+C 90 ; WX 667 ; N Z ; B 24 0 634 722 ;
+C 91 ; WX 389 ; N bracketleft ; B 84 -108 339 722 ;
+C 92 ; WX 606 ; N backslash ; B 50 0 555 737 ;
+C 93 ; WX 389 ; N bracketright ; B 31 -108 286 722 ;
+C 94 ; WX 606 ; N asciicircum ; B 52 318 554 722 ;
+C 95 ; WX 500 ; N underscore ; B 0 -148 500 -58 ;
+C 96 ; WX 241 ; N quoteleft ; B 22 388 219 747 ;
+C 97 ; WX 611 ; N a ; B 36 -15 597 488 ;
+C 98 ; WX 648 ; N b ; B 0 -15 612 737 ;
+C 99 ; WX 556 ; N c ; B 31 -15 527 488 ;
+C 100 ; WX 667 ; N d ; B 37 -15 654 737 ;
+C 101 ; WX 574 ; N e ; B 32 -15 540 488 ;
+C 102 ; WX 389 ; N f ; B 14 0 464 733 ;
+C 103 ; WX 611 ; N g ; B 30 -202 623 538 ;
+C 104 ; WX 685 ; N h ; B 16 0 666 737 ;
+C 105 ; WX 370 ; N i ; B 28 0 341 737 ;
+C 106 ; WX 352 ; N j ; B -82 -202 272 737 ;
+C 107 ; WX 667 ; N k ; B 12 0 660 737 ;
+C 108 ; WX 352 ; N l ; B 16 0 331 737 ;
+C 109 ; WX 963 ; N m ; B 20 0 942 488 ;
+C 110 ; WX 685 ; N n ; B 20 0 668 488 ;
+C 111 ; WX 611 ; N o ; B 31 -15 579 488 ;
+C 112 ; WX 667 ; N p ; B 18 -202 632 488 ;
+C 113 ; WX 648 ; N q ; B 34 -202 640 488 ;
+C 114 ; WX 519 ; N r ; B 18 0 517 488 ;
+C 115 ; WX 500 ; N s ; B 38 -15 466 488 ;
+C 116 ; WX 426 ; N t ; B 23 -15 405 671 ;
+C 117 ; WX 685 ; N u ; B 13 -15 667 473 ;
+C 118 ; WX 611 ; N v ; B 12 -14 598 473 ;
+C 119 ; WX 889 ; N w ; B 19 -14 876 473 ;
+C 120 ; WX 611 ; N x ; B 13 0 598 473 ;
+C 121 ; WX 611 ; N y ; B 10 -206 598 473 ;
+C 122 ; WX 537 ; N z ; B 35 0 495 473 ;
+C 123 ; WX 389 ; N braceleft ; B 84 -108 343 722 ;
+C 124 ; WX 606 ; N bar ; B 243 0 362 722 ;
+C 125 ; WX 389 ; N braceright ; B 31 -108 290 722 ;
+C 126 ; WX 606 ; N asciitilde ; B 51 160 555 335 ;
+C 161 ; WX 296 ; N exclamdown ; B 53 -203 241 549 ;
+C 162 ; WX 574 ; N cent ; B 36 -107 534 567 ;
+C 163 ; WX 574 ; N sterling ; B 19 -14 561 708 ;
+C 164 ; WX 167 ; N fraction ; B -166 0 333 705 ;
+C 165 ; WX 574 ; N yen ; B 3 0 571 722 ;
+C 166 ; WX 574 ; N florin ; B 14 -195 549 746 ;
+C 167 ; WX 500 ; N section ; B 63 -87 438 737 ;
+C 168 ; WX 574 ; N currency ; B 33 97 540 604 ;
+C 169 ; WX 241 ; N quotesingle ; B 52 416 188 737 ;
+C 170 ; WX 481 ; N quotedblleft ; B 22 388 457 747 ;
+C 171 ; WX 500 ; N guillemotleft ; B 49 100 442 419 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 72 100 266 419 ;
+C 173 ; WX 333 ; N guilsinglright ; B 74 100 269 419 ;
+C 174 ; WX 685 ; N fi ; B 15 0 667 733 ;
+C 175 ; WX 685 ; N fl ; B 15 0 666 737 ;
+C 177 ; WX 500 ; N endash ; B 0 191 500 296 ;
+C 178 ; WX 500 ; N dagger ; B 44 -87 451 737 ;
+C 179 ; WX 500 ; N daggerdbl ; B 47 -87 458 737 ;
+C 180 ; WX 278 ; N periodcentered ; B 46 160 234 348 ;
+C 182 ; WX 747 ; N paragraph ; B 35 -144 713 722 ;
+C 183 ; WX 606 ; N bullet ; B 131 180 475 524 ;
+C 184 ; WX 241 ; N quotesinglbase ; B 22 -186 219 173 ;
+C 185 ; WX 481 ; N quotedblbase ; B 23 -186 458 173 ;
+C 186 ; WX 481 ; N quotedblright ; B 23 379 458 737 ;
+C 187 ; WX 500 ; N guillemotright ; B 56 100 451 419 ;
+C 188 ; WX 1000 ; N ellipsis ; B 73 -15 927 173 ;
+C 189 ; WX 1000 ; N perthousand ; B 8 -1 994 701 ;
+C 191 ; WX 500 ; N questiondown ; B 23 -203 476 549 ;
+C 193 ; WX 333 ; N grave ; B 2 545 249 734 ;
+C 194 ; WX 333 ; N acute ; B 84 545 331 734 ;
+C 195 ; WX 333 ; N circumflex ; B -8 544 343 722 ;
+C 196 ; WX 333 ; N tilde ; B -23 566 358 705 ;
+C 197 ; WX 333 ; N macron ; B -5 583 339 663 ;
+C 198 ; WX 333 ; N breve ; B 9 545 324 712 ;
+C 199 ; WX 333 ; N dotaccent ; B 96 552 237 693 ;
+C 200 ; WX 333 ; N dieresis ; B -11 552 345 693 ;
+C 202 ; WX 333 ; N ring ; B 59 545 274 760 ;
+C 203 ; WX 333 ; N cedilla ; B 17 -222 251 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B 68 545 365 733 ;
+C 206 ; WX 333 ; N ogonek ; B 68 -170 246 0 ;
+C 207 ; WX 333 ; N caron ; B -8 544 343 722 ;
+C 208 ; WX 1000 ; N emdash ; B 0 191 1000 296 ;
+C 225 ; WX 981 ; N AE ; B -29 0 963 722 ;
+C 227 ; WX 367 ; N ordfeminine ; B 1 293 365 737 ;
+C 232 ; WX 722 ; N Lslash ; B 19 0 701 722 ;
+C 233 ; WX 833 ; N Oslash ; B 39 -40 793 762 ;
+C 234 ; WX 1000 ; N OE ; B 5 0 987 722 ;
+C 235 ; WX 367 ; N ordmasculine ; B 1 293 357 737 ;
+C 241 ; WX 870 ; N ae ; B 29 -15 837 488 ;
+C 245 ; WX 370 ; N dotlessi ; B 28 0 341 473 ;
+C 248 ; WX 352 ; N lslash ; B 16 0 331 737 ;
+C 249 ; WX 611 ; N oslash ; B 31 -90 579 563 ;
+C 250 ; WX 907 ; N oe ; B 35 -15 872 488 ;
+C 251 ; WX 611 ; N germandbls ; B 6 -15 575 737 ;
+C -1 ; WX 833 ; N Udieresis ; B 15 -15 824 938 ;
+C -1 ; WX 833 ; N Uacute ; B 15 -15 824 979 ;
+C -1 ; WX 667 ; N Scedilla ; B 51 -222 633 737 ;
+C -1 ; WX 722 ; N Tcaron ; B 15 0 707 967 ;
+C -1 ; WX 667 ; N Scaron ; B 51 -15 633 968 ;
+C -1 ; WX 815 ; N Rcaron ; B 20 -15 817 967 ;
+C -1 ; WX 815 ; N Racute ; B 20 -15 817 979 ;
+C -1 ; WX 667 ; N Sacute ; B 51 -15 633 979 ;
+C -1 ; WX 833 ; N Otilde ; B 39 -15 794 936 ;
+C -1 ; WX 685 ; N ucircumflex ; B 13 -15 667 722 ;
+C -1 ; WX 833 ; N Ohungarumlaut ; B 39 -15 794 978 ;
+C -1 ; WX 833 ; N Uhungarumlaut ; B 15 -15 824 978 ;
+C -1 ; WX 722 ; N Yacute ; B -12 0 735 979 ;
+C -1 ; WX 833 ; N Eth ; B 19 0 793 722 ;
+C -1 ; WX 833 ; N Dcroat ; B 19 0 793 722 ;
+C -1 ; WX 667 ; N Zacute ; B 24 0 634 979 ;
+C -1 ; WX 833 ; N Uring ; B 15 -15 824 1005 ;
+C -1 ; WX 611 ; N gbreve ; B 30 -202 623 712 ;
+C -1 ; WX 574 ; N eogonek ; B 32 -170 540 488 ;
+C -1 ; WX 574 ; N edotaccent ; B 32 -15 540 693 ;
+C -1 ; WX 574 ; N ecaron ; B 32 -15 540 722 ;
+C -1 ; WX 833 ; N Ugrave ; B 15 -15 824 979 ;
+C -1 ; WX 759 ; N Thorn ; B 24 0 735 722 ;
+C -1 ; WX 574 ; N eacute ; B 32 -15 540 734 ;
+C -1 ; WX 574 ; N edieresis ; B 32 -15 540 693 ;
+C -1 ; WX 747 ; N dcaron ; B 37 -15 767 737 ;
+C -1 ; WX 556 ; N ccedilla ; B 31 -222 527 488 ;
+C -1 ; WX 556 ; N ccaron ; B 31 -15 527 722 ;
+C -1 ; WX 556 ; N cacute ; B 31 -15 527 734 ;
+C -1 ; WX 611 ; N aogonek ; B 36 -170 631 488 ;
+C -1 ; WX 611 ; N aring ; B 36 -15 597 760 ;
+C -1 ; WX 611 ; N atilde ; B 36 -15 597 705 ;
+C -1 ; WX 611 ; N abreve ; B 36 -15 597 712 ;
+C -1 ; WX 574 ; N egrave ; B 32 -15 540 734 ;
+C -1 ; WX 611 ; N agrave ; B 36 -15 597 734 ;
+C -1 ; WX 611 ; N aacute ; B 36 -15 597 734 ;
+C -1 ; WX 611 ; N adieresis ; B 36 -15 597 693 ;
+C -1 ; WX 833 ; N Uogonek ; B 15 -170 824 722 ;
+C -1 ; WX 685 ; N ugrave ; B 13 -15 667 734 ;
+C -1 ; WX 685 ; N uacute ; B 13 -15 667 734 ;
+C -1 ; WX 685 ; N udieresis ; B 13 -15 667 693 ;
+C -1 ; WX 446 ; N tcaron ; B 23 -15 466 737 ;
+C -1 ; WX 500 ; N scommaaccent ; B 38 -372 466 488 ;
+C -1 ; WX 667 ; N Zcaron ; B 24 0 634 968 ;
+C -1 ; WX 574 ; N ecircumflex ; B 32 -15 540 722 ;
+C -1 ; WX 833 ; N Ucircumflex ; B 15 -15 824 968 ;
+C -1 ; WX 611 ; N acircumflex ; B 36 -15 597 722 ;
+C -1 ; WX 667 ; N Zdotaccent ; B 24 0 634 938 ;
+C -1 ; WX 500 ; N scaron ; B 38 -15 466 722 ;
+C -1 ; WX 759 ; N Amacron ; B -18 0 778 908 ;
+C -1 ; WX 500 ; N sacute ; B 38 -15 466 734 ;
+C -1 ; WX 722 ; N Tcommaaccent ; B 15 -372 707 722 ;
+C -1 ; WX 722 ; N Ydieresis ; B -12 0 735 938 ;
+C -1 ; WX 667 ; N thorn ; B 18 -202 632 736 ;
+C -1 ; WX 759 ; N Emacron ; B 16 0 707 908 ;
+C -1 ; WX 833 ; N Ograve ; B 39 -15 794 979 ;
+C -1 ; WX 833 ; N Oacute ; B 39 -15 794 979 ;
+C -1 ; WX 833 ; N Odieresis ; B 39 -15 794 938 ;
+C -1 ; WX 833 ; N Ntilde ; B 16 -7 833 936 ;
+C -1 ; WX 833 ; N Ncaron ; B 16 -7 833 967 ;
+C -1 ; WX 833 ; N Nacute ; B 16 -7 833 979 ;
+C -1 ; WX 722 ; N Lcaron ; B 19 0 701 737 ;
+C -1 ; WX 722 ; N Lacute ; B 19 0 701 979 ;
+C -1 ; WX 444 ; N Idotaccent ; B 28 0 417 938 ;
+C -1 ; WX 519 ; N racute ; B 18 0 517 734 ;
+C -1 ; WX 444 ; N Icircumflex ; B 28 0 417 968 ;
+C -1 ; WX 611 ; N ohungarumlaut ; B 31 -15 579 733 ;
+C -1 ; WX 611 ; N otilde ; B 31 -15 579 705 ;
+C -1 ; WX 574 ; N Euro ; B 3 -15 563 717 ;
+C -1 ; WX 611 ; N ocircumflex ; B 31 -15 579 722 ;
+C -1 ; WX 344 ; N onesuperior ; B 39 284 304 708 ;
+C -1 ; WX 344 ; N twosuperior ; B 5 281 338 708 ;
+C -1 ; WX 344 ; N threesuperior ; B 8 275 336 708 ;
+C -1 ; WX 444 ; N Igrave ; B 28 0 417 979 ;
+C -1 ; WX 444 ; N Iacute ; B 28 0 417 979 ;
+C -1 ; WX 444 ; N Imacron ; B 28 0 417 908 ;
+C -1 ; WX 444 ; N Iogonek ; B 28 -170 485 722 ;
+C -1 ; WX 444 ; N Idieresis ; B 28 0 417 938 ;
+C -1 ; WX 833 ; N Gbreve ; B 39 -15 817 957 ;
+C -1 ; WX 833 ; N Umacron ; B 15 -15 824 908 ;
+C -1 ; WX 815 ; N Kcommaaccent ; B 15 -372 818 722 ;
+C -1 ; WX 611 ; N ograve ; B 31 -15 579 734 ;
+C -1 ; WX 667 ; N Scommaaccent ; B 51 -372 633 737 ;
+C -1 ; WX 759 ; N Eogonek ; B 16 -170 763 722 ;
+C -1 ; WX 611 ; N oacute ; B 31 -15 579 734 ;
+C -1 ; WX 759 ; N Edotaccent ; B 16 0 707 938 ;
+C -1 ; WX 370 ; N iogonek ; B 28 -170 409 737 ;
+C -1 ; WX 611 ; N gcommaaccent ; B 30 -202 623 837 ;
+C -1 ; WX 611 ; N odieresis ; B 31 -15 579 693 ;
+C -1 ; WX 685 ; N ntilde ; B 20 0 668 705 ;
+C -1 ; WX 685 ; N ncaron ; B 20 0 668 722 ;
+C -1 ; WX 759 ; N Ecaron ; B 16 0 707 967 ;
+C -1 ; WX 759 ; N Ecircumflex ; B 16 0 707 968 ;
+C -1 ; WX 500 ; N scedilla ; B 38 -222 466 488 ;
+C -1 ; WX 519 ; N rcaron ; B 18 0 517 722 ;
+C -1 ; WX 759 ; N Egrave ; B 16 0 707 979 ;
+C -1 ; WX 759 ; N Eacute ; B 16 0 707 979 ;
+C -1 ; WX 833 ; N Gcommaaccent ; B 39 -372 817 737 ;
+C -1 ; WX 815 ; N Rcommaaccent ; B 20 -372 817 722 ;
+C -1 ; WX 759 ; N Edieresis ; B 16 0 707 938 ;
+C -1 ; WX 685 ; N nacute ; B 20 0 668 734 ;
+C -1 ; WX 685 ; N uogonek ; B 13 -170 735 473 ;
+C -1 ; WX 685 ; N umacron ; B 13 -15 667 663 ;
+C -1 ; WX 833 ; N Dcaron ; B 19 0 793 967 ;
+C -1 ; WX 436 ; N lcaron ; B 16 0 456 737 ;
+C -1 ; WX 778 ; N Ccaron ; B 40 -15 723 967 ;
+C -1 ; WX 778 ; N Cacute ; B 40 -15 723 979 ;
+C -1 ; WX 778 ; N Ccedilla ; B 40 -224 723 737 ;
+C -1 ; WX 400 ; N degree ; B 50 380 350 686 ;
+C -1 ; WX 759 ; N Aogonek ; B -18 -170 846 737 ;
+C -1 ; WX 606 ; N minus ; B 51 195 555 310 ;
+C -1 ; WX 606 ; N multiply ; B 51 1 555 505 ;
+C -1 ; WX 606 ; N divide ; B 51 -31 555 536 ;
+C -1 ; WX 759 ; N Aring ; B -18 0 778 990 ;
+C -1 ; WX 1000 ; N trademark ; B 30 302 970 722 ;
+C -1 ; WX 519 ; N rcommaaccent ; B 18 -372 517 488 ;
+C -1 ; WX 352 ; N lacute ; B 16 0 341 979 ;
+C -1 ; WX 611 ; N omacron ; B 31 -15 579 663 ;
+C -1 ; WX 759 ; N Atilde ; B -18 0 778 936 ;
+C -1 ; WX 370 ; N icircumflex ; B 11 0 362 722 ;
+C -1 ; WX 370 ; N igrave ; B 21 0 341 734 ;
+C -1 ; WX 685 ; N ncommaaccent ; B 20 -372 668 488 ;
+C -1 ; WX 352 ; N lcommaaccent ; B 16 -372 331 737 ;
+C -1 ; WX 606 ; N plusminus ; B 51 0 555 610 ;
+C -1 ; WX 861 ; N onehalf ; B 39 -2 832 722 ;
+C -1 ; WX 861 ; N onequarter ; B 39 0 822 722 ;
+C -1 ; WX 861 ; N threequarters ; B 8 0 822 722 ;
+C -1 ; WX 370 ; N iacute ; B 28 0 350 734 ;
+C -1 ; WX 759 ; N Abreve ; B -18 0 778 957 ;
+C -1 ; WX 667 ; N kcommaaccent ; B 12 -372 660 737 ;
+C -1 ; WX 833 ; N Omacron ; B 39 -15 794 908 ;
+C -1 ; WX 370 ; N imacron ; B 14 0 358 663 ;
+C -1 ; WX 574 ; N emacron ; B 32 -15 540 663 ;
+C -1 ; WX 611 ; N amacron ; B 36 -15 597 663 ;
+C -1 ; WX 426 ; N tcommaaccent ; B 23 -372 405 671 ;
+C -1 ; WX 611 ; N ydieresis ; B 10 -206 598 693 ;
+C -1 ; WX 537 ; N zdotaccent ; B 35 0 495 693 ;
+C -1 ; WX 537 ; N zcaron ; B 35 0 495 722 ;
+C -1 ; WX 537 ; N zacute ; B 35 0 495 734 ;
+C -1 ; WX 611 ; N yacute ; B 10 -206 598 734 ;
+C -1 ; WX 685 ; N uhungarumlaut ; B 13 -15 667 733 ;
+C -1 ; WX 611 ; N eth ; B 31 -15 579 793 ;
+C -1 ; WX 685 ; N uring ; B 13 -15 667 760 ;
+C -1 ; WX 833 ; N Ocircumflex ; B 39 -15 794 968 ;
+C -1 ; WX 333 ; N commaaccent ; B 78 -372 255 -50 ;
+C -1 ; WX 747 ; N copyright ; B 5 -15 741 721 ;
+C -1 ; WX 747 ; N registered ; B 5 -15 741 721 ;
+C -1 ; WX 759 ; N Acircumflex ; B -18 0 778 968 ;
+C -1 ; WX 370 ; N idieresis ; B 8 0 364 693 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 606 ; N notequal ; B 51 -51 555 557 ;
+C -1 ; WX 549 ; N radical ; B -34 -35 548 918 ;
+C -1 ; WX 759 ; N Agrave ; B -18 0 778 979 ;
+C -1 ; WX 759 ; N Aacute ; B -18 0 778 979 ;
+C -1 ; WX 606 ; N lessequal ; B 49 0 558 698 ;
+C -1 ; WX 606 ; N greaterequal ; B 48 0 557 698 ;
+C -1 ; WX 606 ; N logicalnot ; B 51 0 555 310 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 13 -11 476 753 ;
+C -1 ; WX 833 ; N Ncommaaccent ; B 16 -372 833 722 ;
+C -1 ; WX 667 ; N dcroat ; B 37 -15 654 737 ;
+C -1 ; WX 606 ; N brokenbar ; B 243 0 362 722 ;
+C -1 ; WX 722 ; N Lcommaaccent ; B 19 -372 701 722 ;
+C -1 ; WX 759 ; N Adieresis ; B -18 0 778 938 ;
+C -1 ; WX 685 ; N mu ; B 13 -219 667 473 ;
+C -1 ; WX 287 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -34
+KPX A Ccedilla -37
+KPX A G -31
+KPX A O -35
+KPX A Odieresis -35
+KPX A Q -34
+KPX A T -31
+KPX A U -40
+KPX A Uacute -40
+KPX A Ucircumflex -40
+KPX A Udieresis -40
+KPX A Ugrave -40
+KPX A V -87
+KPX A W -82
+KPX A Y -31
+KPX A a 22
+KPX A b 9
+KPX A c -3
+KPX A ccedilla -6
+KPX A comma 35
+KPX A d -1
+KPX A e -5
+KPX A g 21
+KPX A guillemotleft -39
+KPX A guilsinglleft -51
+KPX A hyphen -2
+KPX A o -6
+KPX A period 31
+KPX A q 3
+KPX A quotedblright -53
+KPX A quoteright -53
+KPX A t -8
+KPX A u -11
+KPX A v -54
+KPX A w -54
+KPX A y -60
+KPX Aacute C -34
+KPX Aacute G -31
+KPX Aacute O -35
+KPX Aacute Q -34
+KPX Aacute T -31
+KPX Aacute U -40
+KPX Aacute V -87
+KPX Aacute W -82
+KPX Aacute Y -31
+KPX Aacute a 22
+KPX Aacute b 9
+KPX Aacute c -3
+KPX Aacute comma 35
+KPX Aacute d -1
+KPX Aacute e -5
+KPX Aacute g 21
+KPX Aacute guillemotleft -39
+KPX Aacute guilsinglleft -51
+KPX Aacute hyphen -2
+KPX Aacute o -6
+KPX Aacute period 31
+KPX Aacute q 3
+KPX Aacute quoteright -53
+KPX Aacute t -8
+KPX Aacute u -11
+KPX Aacute v -54
+KPX Aacute w -54
+KPX Aacute y -60
+KPX Acircumflex C -34
+KPX Acircumflex G -31
+KPX Acircumflex O -35
+KPX Acircumflex Q -34
+KPX Acircumflex T -31
+KPX Acircumflex U -40
+KPX Acircumflex V -87
+KPX Acircumflex W -82
+KPX Acircumflex Y -31
+KPX Acircumflex comma 35
+KPX Acircumflex period 31
+KPX Adieresis C -34
+KPX Adieresis G -31
+KPX Adieresis O -35
+KPX Adieresis Q -34
+KPX Adieresis T -31
+KPX Adieresis U -40
+KPX Adieresis V -87
+KPX Adieresis W -82
+KPX Adieresis Y -31
+KPX Adieresis a 22
+KPX Adieresis b 9
+KPX Adieresis c -3
+KPX Adieresis comma 35
+KPX Adieresis d -1
+KPX Adieresis g 21
+KPX Adieresis guillemotleft -39
+KPX Adieresis guilsinglleft -51
+KPX Adieresis hyphen -2
+KPX Adieresis o -6
+KPX Adieresis period 31
+KPX Adieresis q 3
+KPX Adieresis quotedblright -53
+KPX Adieresis quoteright -53
+KPX Adieresis t -8
+KPX Adieresis u -11
+KPX Adieresis v -54
+KPX Adieresis w -54
+KPX Adieresis y -60
+KPX Agrave C -34
+KPX Agrave G -31
+KPX Agrave O -35
+KPX Agrave Q -34
+KPX Agrave T -31
+KPX Agrave U -40
+KPX Agrave V -87
+KPX Agrave W -82
+KPX Agrave Y -31
+KPX Agrave comma 35
+KPX Agrave period 31
+KPX Aring C -34
+KPX Aring G -31
+KPX Aring O -35
+KPX Aring Q -34
+KPX Aring T -31
+KPX Aring U -40
+KPX Aring V -87
+KPX Aring W -82
+KPX Aring Y -31
+KPX Aring a 22
+KPX Aring b 9
+KPX Aring c -3
+KPX Aring comma 35
+KPX Aring d -1
+KPX Aring e -5
+KPX Aring g 21
+KPX Aring guillemotleft -39
+KPX Aring guilsinglleft -51
+KPX Aring hyphen -2
+KPX Aring o -6
+KPX Aring period 31
+KPX Aring q 3
+KPX Aring quotedblright -53
+KPX Aring quoteright -53
+KPX Aring t -8
+KPX Aring u -11
+KPX Aring v -54
+KPX Aring w -54
+KPX Aring y -60
+KPX Atilde C -34
+KPX Atilde G -31
+KPX Atilde O -35
+KPX Atilde Q -34
+KPX Atilde T -31
+KPX Atilde U -40
+KPX Atilde V -87
+KPX Atilde W -82
+KPX Atilde Y -31
+KPX Atilde comma 35
+KPX Atilde period 31
+KPX B A 1
+KPX B AE 3
+KPX B Aacute 1
+KPX B Acircumflex 1
+KPX B Adieresis 1
+KPX B Aring 1
+KPX B Atilde 1
+KPX B O -7
+KPX B OE 7
+KPX B Oacute -7
+KPX B Ocircumflex -7
+KPX B Odieresis -7
+KPX B Ograve -7
+KPX B Oslash -6
+KPX B V -14
+KPX B W -30
+KPX B Y -13
+KPX C A -27
+KPX C AE -26
+KPX C Aacute -27
+KPX C Adieresis -27
+KPX C Aring -27
+KPX C H -9
+KPX C K -7
+KPX C O -10
+KPX C Oacute -10
+KPX C Odieresis -10
+KPX Ccedilla A -28
+KPX D A -32
+KPX D Aacute -32
+KPX D Acircumflex -32
+KPX D Adieresis -32
+KPX D Agrave -32
+KPX D Aring -32
+KPX D Atilde -32
+KPX D J 7
+KPX D T 8
+KPX D V -33
+KPX D W -42
+KPX D X -30
+KPX D Y -32
+KPX F A -79
+KPX F Aacute -79
+KPX F Acircumflex -79
+KPX F Adieresis -79
+KPX F Agrave -79
+KPX F Aring -79
+KPX F Atilde -79
+KPX F J -55
+KPX F O -2
+KPX F Odieresis -2
+KPX F a -32
+KPX F aacute -32
+KPX F adieresis -32
+KPX F ae -30
+KPX F aring -32
+KPX F comma -80
+KPX F e -45
+KPX F eacute -45
+KPX F hyphen -40
+KPX F i 5
+KPX F j 11
+KPX F o -46
+KPX F oacute -46
+KPX F odieresis -46
+KPX F oe -48
+KPX F oslash -51
+KPX F period -82
+KPX F r 10
+KPX F u 12
+KPX G A -4
+KPX G AE 0
+KPX G Aacute -4
+KPX G Acircumflex -4
+KPX G Adieresis -4
+KPX G Agrave -4
+KPX G Aring -4
+KPX G Atilde -4
+KPX G T -21
+KPX G V -7
+KPX G W -20
+KPX G Y -10
+KPX J A -44
+KPX J AE -43
+KPX J Adieresis -44
+KPX J Aring -44
+KPX K C -45
+KPX K G -44
+KPX K O -45
+KPX K OE -31
+KPX K Oacute -45
+KPX K Odieresis -45
+KPX K S 12
+KPX K T 13
+KPX K a 12
+KPX K adieresis 12
+KPX K ae 15
+KPX K aring 12
+KPX K e -18
+KPX K hyphen -25
+KPX K o -20
+KPX K oacute -20
+KPX K odieresis -20
+KPX K u -23
+KPX K udieresis -23
+KPX K y -84
+KPX L A 32
+KPX L AE 37
+KPX L Aacute 32
+KPX L Adieresis 32
+KPX L Aring 32
+KPX L C 5
+KPX L Ccedilla 4
+KPX L G 5
+KPX L O 5
+KPX L Oacute 5
+KPX L Ocircumflex 5
+KPX L Odieresis 5
+KPX L Ograve 5
+KPX L Otilde 5
+KPX L S 3
+KPX L T -56
+KPX L U -31
+KPX L Udieresis -31
+KPX L V -74
+KPX L W -68
+KPX L Y -56
+KPX L hyphen 44
+KPX L quotedblright -22
+KPX L quoteright -21
+KPX L u -4
+KPX L udieresis -4
+KPX L y -34
+KPX N A -7
+KPX N AE -1
+KPX N Aacute -7
+KPX N Adieresis -7
+KPX N Aring -7
+KPX N C -14
+KPX N Ccedilla -15
+KPX N G -13
+KPX N O -15
+KPX N Oacute -15
+KPX N Odieresis -15
+KPX N a -19
+KPX N aacute -19
+KPX N adieresis -19
+KPX N ae -15
+KPX N aring -19
+KPX N comma 2
+KPX N e -18
+KPX N eacute -18
+KPX N o -18
+KPX N oacute -18
+KPX N odieresis -18
+KPX N oslash -18
+KPX N period 0
+KPX N u -26
+KPX N udieresis -26
+KPX O A -36
+KPX O AE -35
+KPX O Aacute -36
+KPX O Adieresis -36
+KPX O Aring -36
+KPX O T 7
+KPX O V -35
+KPX O W -45
+KPX O X -32
+KPX O Y -33
+KPX Oacute A -36
+KPX Oacute T 7
+KPX Oacute V -35
+KPX Oacute W -45
+KPX Oacute Y -33
+KPX Ocircumflex T 7
+KPX Ocircumflex V -35
+KPX Ocircumflex Y -33
+KPX Odieresis A -36
+KPX Odieresis T 7
+KPX Odieresis V -35
+KPX Odieresis W -45
+KPX Odieresis X -32
+KPX Odieresis Y -33
+KPX Ograve T 7
+KPX Ograve V -35
+KPX Ograve Y -33
+KPX Oslash A -37
+KPX Otilde T 7
+KPX Otilde V -35
+KPX Otilde Y -33
+KPX P A -81
+KPX P AE -69
+KPX P Aacute -81
+KPX P Adieresis -81
+KPX P Aring -81
+KPX P J -50
+KPX P a -22
+KPX P aacute -22
+KPX P adieresis -22
+KPX P ae -20
+KPX P aring -22
+KPX P comma -90
+KPX P e -32
+KPX P eacute -32
+KPX P hyphen -35
+KPX P o -32
+KPX P oacute -32
+KPX P odieresis -32
+KPX P oe -34
+KPX P oslash -37
+KPX P period -92
+KPX R C -1
+KPX R Ccedilla -3
+KPX R G 0
+KPX R O -1
+KPX R OE 14
+KPX R Oacute -1
+KPX R Odieresis -1
+KPX R T -16
+KPX R U -22
+KPX R Udieresis -22
+KPX R V -18
+KPX R W -34
+KPX R Y -16
+KPX R a 16
+KPX R aacute 16
+KPX R adieresis 16
+KPX R ae 20
+KPX R aring 16
+KPX R e 15
+KPX R eacute 15
+KPX R hyphen 31
+KPX R o 16
+KPX R oacute 16
+KPX R odieresis 16
+KPX R oe 13
+KPX R u -9
+KPX R uacute -9
+KPX R udieresis -9
+KPX R y -25
+KPX S A 0
+KPX S AE 0
+KPX S Aacute 0
+KPX S Adieresis 0
+KPX S Aring 0
+KPX S T -2
+KPX S V 10
+KPX S W -2
+KPX S Y 7
+KPX S t -5
+KPX T A -31
+KPX T AE -26
+KPX T Aacute -31
+KPX T Acircumflex -31
+KPX T Adieresis -31
+KPX T Agrave -31
+KPX T Aring -31
+KPX T Atilde -31
+KPX T C 8
+KPX T G 8
+KPX T J -52
+KPX T O 7
+KPX T OE 23
+KPX T Oacute 7
+KPX T Ocircumflex 7
+KPX T Odieresis 7
+KPX T Ograve 7
+KPX T Oslash 8
+KPX T Otilde 7
+KPX T S 4
+KPX T V 34
+KPX T W 22
+KPX T Y 31
+KPX T a -20
+KPX T ae -17
+KPX T c -38
+KPX T colon -4
+KPX T comma -60
+KPX T e -36
+KPX T g -32
+KPX T guillemotleft -109
+KPX T guilsinglleft -121
+KPX T hyphen -74
+KPX T i 13
+KPX T j 20
+KPX T o -37
+KPX T oslash -43
+KPX T period -64
+KPX T r 18
+KPX T s -14
+KPX T semicolon -4
+KPX T u 21
+KPX T v 21
+KPX T w 18
+KPX T y 20
+KPX U A -45
+KPX U AE -43
+KPX U Aacute -45
+KPX U Acircumflex -45
+KPX U Adieresis -45
+KPX U Aring -45
+KPX U Atilde -45
+KPX U comma -23
+KPX U m -34
+KPX U n -34
+KPX U p -33
+KPX U period -25
+KPX U r -33
+KPX Uacute A -45
+KPX Uacute comma -23
+KPX Uacute m -34
+KPX Uacute n -34
+KPX Uacute p -33
+KPX Uacute period -25
+KPX Uacute r -33
+KPX Ucircumflex A -45
+KPX Udieresis A -45
+KPX Udieresis b 30
+KPX Udieresis comma -23
+KPX Udieresis m -34
+KPX Udieresis n -34
+KPX Udieresis p -33
+KPX Udieresis period -25
+KPX Udieresis r -33
+KPX Ugrave A -45
+KPX V A -101
+KPX V AE -41
+KPX V Aacute -101
+KPX V Acircumflex -101
+KPX V Adieresis -101
+KPX V Agrave -101
+KPX V Aring -101
+KPX V Atilde -101
+KPX V C -34
+KPX V G -35
+KPX V O -34
+KPX V Oacute -34
+KPX V Ocircumflex -34
+KPX V Odieresis -34
+KPX V Ograve -34
+KPX V Oslash -39
+KPX V Otilde -34
+KPX V S -1
+KPX V T 34
+KPX V a -85
+KPX V ae -82
+KPX V colon -74
+KPX V comma -90
+KPX V e -85
+KPX V g -85
+KPX V guillemotleft -92
+KPX V guilsinglleft -103
+KPX V hyphen -60
+KPX V i -2
+KPX V o -85
+KPX V oslash -85
+KPX V period -93
+KPX V r -48
+KPX V semicolon -73
+KPX V u -45
+KPX V y -46
+KPX W A -85
+KPX W AE -55
+KPX W Aacute -85
+KPX W Acircumflex -85
+KPX W Adieresis -85
+KPX W Agrave -85
+KPX W Aring -85
+KPX W Atilde -85
+KPX W C -47
+KPX W G -46
+KPX W O -48
+KPX W Oacute -48
+KPX W Ocircumflex -48
+KPX W Odieresis -48
+KPX W Ograve -48
+KPX W Oslash -46
+KPX W Otilde -48
+KPX W S -19
+KPX W T 21
+KPX W a -70
+KPX W ae -66
+KPX W colon -62
+KPX W comma -67
+KPX W e -68
+KPX W g -69
+KPX W guillemotleft -76
+KPX W guilsinglleft -87
+KPX W hyphen -44
+KPX W i -17
+KPX W o -68
+KPX W oslash -68
+KPX W period -70
+KPX W r -42
+KPX W semicolon -59
+KPX W u -40
+KPX W y -40
+KPX X C -37
+KPX X O -38
+KPX X Odieresis -38
+KPX X Q -37
+KPX X a 19
+KPX X e -8
+KPX X hyphen -26
+KPX X o -9
+KPX X u -14
+KPX X y -80
+KPX Y A -31
+KPX Y AE -26
+KPX Y Aacute -31
+KPX Y Acircumflex -31
+KPX Y Adieresis -31
+KPX Y Agrave -31
+KPX Y Aring -31
+KPX Y Atilde -31
+KPX Y C -33
+KPX Y G -34
+KPX Y O -33
+KPX Y Oacute -33
+KPX Y Ocircumflex -33
+KPX Y Odieresis -33
+KPX Y Ograve -33
+KPX Y Oslash -37
+KPX Y Otilde -33
+KPX Y S 0
+KPX Y T 32
+KPX Y a -68
+KPX Y ae -65
+KPX Y colon -71
+KPX Y comma -61
+KPX Y e -85
+KPX Y g -68
+KPX Y guillemotleft -104
+KPX Y guilsinglleft -116
+KPX Y hyphen -73
+KPX Y i -4
+KPX Y o -85
+KPX Y oslash -85
+KPX Y p -62
+KPX Y period -65
+KPX Y semicolon -65
+KPX Y u -59
+KPX Y v -62
+KPX Z v -33
+KPX Z y -38
+KPX a j -28
+KPX a quoteright -3
+KPX a v -29
+KPX a w -32
+KPX a y -32
+KPX aacute v -29
+KPX aacute w -32
+KPX aacute y -32
+KPX adieresis v -29
+KPX adieresis w -32
+KPX adieresis y -32
+KPX ae v -15
+KPX ae w -18
+KPX ae y -20
+KPX agrave v -29
+KPX agrave w -32
+KPX agrave y -32
+KPX aring v -29
+KPX aring w -32
+KPX aring y -32
+KPX b v -17
+KPX b w -20
+KPX b y -22
+KPX c h -15
+KPX c k -13
+KPX comma one -28
+KPX comma quotedblright 5
+KPX comma quoteright 5
+KPX e quoteright 15
+KPX e t -15
+KPX e v -15
+KPX e w -19
+KPX e x -16
+KPX e y -20
+KPX eacute v -15
+KPX eacute w -19
+KPX eacute y -20
+KPX ecircumflex v -15
+KPX ecircumflex w -19
+KPX ecircumflex y -20
+KPX eight four 15
+KPX eight one -30
+KPX eight seven -12
+KPX f a -5
+KPX f aacute -5
+KPX f adieresis 12
+KPX f ae -3
+KPX f aring -5
+KPX f e -15
+KPX f eacute -15
+KPX f f 21
+KPX f i 21
+KPX f j 20
+KPX f l 55
+KPX f o -15
+KPX f oacute -15
+KPX f odieresis 4
+KPX f oe -16
+KPX f oslash -20
+KPX f quoteright 61
+KPX f s 0
+KPX f t 16
+KPX five four 10
+KPX five one -45
+KPX five seven -27
+KPX four four 15
+KPX four one -26
+KPX four seven -26
+KPX g a -6
+KPX g adieresis -6
+KPX g ae -4
+KPX g aring -6
+KPX g e -18
+KPX g eacute -18
+KPX g l -4
+KPX g oacute -20
+KPX g odieresis -20
+KPX g r 28
+KPX guillemotright A -45
+KPX guillemotright AE -34
+KPX guillemotright Aacute -45
+KPX guillemotright Adieresis -45
+KPX guillemotright Aring -45
+KPX guillemotright T -109
+KPX guillemotright V -81
+KPX guillemotright W -72
+KPX guillemotright Y -102
+KPX guilsinglright A -52
+KPX guilsinglright AE -41
+KPX guilsinglright Aacute -52
+KPX guilsinglright Adieresis -52
+KPX guilsinglright Aring -52
+KPX guilsinglright T -117
+KPX guilsinglright V -89
+KPX guilsinglright W -80
+KPX guilsinglright Y -110
+KPX h quoteright -6
+KPX h y -36
+KPX hyphen A -7
+KPX hyphen AE 3
+KPX hyphen Aacute -7
+KPX hyphen Adieresis -7
+KPX hyphen Aring -7
+KPX hyphen T -74
+KPX hyphen V -50
+KPX hyphen W -40
+KPX hyphen Y -72
+KPX i T -25
+KPX i j -29
+KPX k a 3
+KPX k aacute 3
+KPX k adieresis 3
+KPX k ae 7
+KPX k aring 3
+KPX k comma 11
+KPX k e -27
+KPX k eacute -27
+KPX k g 3
+KPX k hyphen -46
+KPX k o -29
+KPX k oacute -29
+KPX k odieresis -29
+KPX k period 7
+KPX k s 7
+KPX k u 3
+KPX k udieresis 3
+KPX l v -22
+KPX l y -23
+KPX m p -27
+KPX m v -33
+KPX m w -36
+KPX m y -37
+KPX n T -41
+KPX n p -25
+KPX n quoteright -5
+KPX n v -31
+KPX n w -35
+KPX n y -35
+KPX nine four 9
+KPX nine one -39
+KPX nine seven 1
+KPX o T -38
+KPX o quoteright 8
+KPX o t -17
+KPX o v -24
+KPX o w -28
+KPX o x -25
+KPX o y -29
+KPX oacute v -24
+KPX oacute w -28
+KPX oacute y -29
+KPX ocircumflex t -17
+KPX odieresis t -17
+KPX odieresis v -24
+KPX odieresis w -28
+KPX odieresis x -25
+KPX odieresis y -29
+KPX ograve v -24
+KPX ograve w -28
+KPX ograve y -29
+KPX one comma -23
+KPX one eight -38
+KPX one five -35
+KPX one four -69
+KPX one nine -34
+KPX one one -48
+KPX one period -26
+KPX one seven -73
+KPX one six -51
+KPX one three -35
+KPX one two -12
+KPX one zero -49
+KPX p t -15
+KPX p y -26
+KPX period one -31
+KPX period quotedblright 6
+KPX period quoteright 6
+KPX q c -13
+KPX q u -11
+KPX quotedblbase A 44
+KPX quotedblbase AE 52
+KPX quotedblbase T -52
+KPX quotedblbase V -71
+KPX quotedblbase W -57
+KPX quotedblbase Y -52
+KPX quotedblleft A -64
+KPX quotedblleft AE -48
+KPX quotedblleft Aacute -64
+KPX quotedblleft Adieresis -64
+KPX quotedblleft Aring -64
+KPX quotedblleft T 35
+KPX quotedblleft V 35
+KPX quotedblleft W 23
+KPX quotedblleft Y 32
+KPX quotedblright A -67
+KPX quotedblright AE -52
+KPX quotedblright Aacute -67
+KPX quotedblright Adieresis -67
+KPX quotedblright Aring -67
+KPX quotedblright T 30
+KPX quotedblright V 33
+KPX quotedblright W 20
+KPX quotedblright Y 31
+KPX quoteleft A -63
+KPX quoteleft AE -47
+KPX quoteleft Aacute -63
+KPX quoteleft Adieresis -63
+KPX quoteleft Aring -63
+KPX quoteleft T 36
+KPX quoteleft V 36
+KPX quoteleft W 24
+KPX quoteleft Y 33
+KPX quoteright A -67
+KPX quoteright AE -51
+KPX quoteright Aacute -67
+KPX quoteright Adieresis -67
+KPX quoteright Aring -67
+KPX quoteright comma -7
+KPX quoteright d -5
+KPX quoteright o -6
+KPX quoteright period -9
+KPX quoteright r 6
+KPX quoteright s 6
+KPX quoteright t 6
+KPX quoteright v 11
+KPX quoteright w 8
+KPX quoteright y 9
+KPX r a -1
+KPX r aacute -1
+KPX r acircumflex -1
+KPX r adieresis -1
+KPX r ae 2
+KPX r agrave -1
+KPX r aring -1
+KPX r c 0
+KPX r ccedilla 1
+KPX r colon 5
+KPX r comma -68
+KPX r d -1
+KPX r e 0
+KPX r eacute 0
+KPX r ecircumflex 0
+KPX r egrave 0
+KPX r f 23
+KPX r g 1
+KPX r h -19
+KPX r hyphen 5
+KPX r i 15
+KPX r j 21
+KPX r k -17
+KPX r l -19
+KPX r m 19
+KPX r n 19
+KPX r o 1
+KPX r oacute 1
+KPX r ocircumflex 1
+KPX r odieresis 1
+KPX r oe 0
+KPX r ograve 1
+KPX r oslash -1
+KPX r p 20
+KPX r period -72
+KPX r q -2
+KPX r quoteright 45
+KPX r r 20
+KPX r s 7
+KPX r semicolon 8
+KPX r t 18
+KPX r u 21
+KPX r v 23
+KPX r w 20
+KPX r x 23
+KPX r y 21
+KPX r z 2
+KPX s quoteright 20
+KPX s t -9
+KPX seven colon -45
+KPX seven comma -42
+KPX seven eight -21
+KPX seven five -24
+KPX seven four -62
+KPX seven one -20
+KPX seven period -45
+KPX seven seven -11
+KPX seven six -25
+KPX seven three -19
+KPX seven two -20
+KPX six four 17
+KPX six one -25
+KPX six seven -10
+KPX t S 8
+KPX t a 1
+KPX t aacute 1
+KPX t adieresis 1
+KPX t ae 4
+KPX t aring 1
+KPX t colon -6
+KPX t e 3
+KPX t eacute 3
+KPX t h -7
+KPX t o 3
+KPX t oacute 3
+KPX t odieresis 3
+KPX t quoteright 1
+KPX t semicolon -3
+KPX three four 7
+KPX three one -37
+KPX three seven -18
+KPX two four 8
+KPX two one -30
+KPX two seven -8
+KPX u quoteright 1
+KPX v a -11
+KPX v aacute -11
+KPX v acircumflex -11
+KPX v adieresis -11
+KPX v ae -9
+KPX v agrave -11
+KPX v aring -11
+KPX v atilde -11
+KPX v c -24
+KPX v colon 0
+KPX v comma -59
+KPX v e -22
+KPX v eacute -22
+KPX v ecircumflex -22
+KPX v egrave -22
+KPX v g -18
+KPX v hyphen -26
+KPX v l -24
+KPX v o -23
+KPX v oacute -23
+KPX v odieresis -23
+KPX v ograve -23
+KPX v oslash -28
+KPX v period -61
+KPX v s -6
+KPX v semicolon 0
+KPX w a -11
+KPX w aacute -11
+KPX w acircumflex -11
+KPX w adieresis -11
+KPX w ae -9
+KPX w agrave -11
+KPX w aring -11
+KPX w atilde -11
+KPX w c -24
+KPX w colon 0
+KPX w comma -60
+KPX w e -22
+KPX w eacute -22
+KPX w ecircumflex -22
+KPX w egrave -22
+KPX w g -18
+KPX w hyphen -26
+KPX w l -24
+KPX w o -23
+KPX w oacute -23
+KPX w odieresis -23
+KPX w ograve -23
+KPX w oslash -28
+KPX w period -62
+KPX w s -6
+KPX w semicolon 0
+KPX x a 0
+KPX x c -29
+KPX x e -27
+KPX x eacute -27
+KPX x o -28
+KPX x q -20
+KPX y a -14
+KPX y aacute -14
+KPX y acircumflex -14
+KPX y adieresis -14
+KPX y ae -12
+KPX y agrave -14
+KPX y aring -14
+KPX y atilde -14
+KPX y c -29
+KPX y colon -2
+KPX y comma -63
+KPX y e -27
+KPX y eacute -27
+KPX y ecircumflex -27
+KPX y egrave -27
+KPX y g -23
+KPX y hyphen -28
+KPX y l -24
+KPX y o -28
+KPX y oacute -28
+KPX y odieresis -28
+KPX y ograve -28
+KPX y oslash -33
+KPX y period -64
+KPX y s -9
+KPX y semicolon -1
+KPX zero four 12
+KPX zero one -38
+KPX zero seven 0
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/c059016l.pfb b/Master/xemtex/gsfonts/c059016l.pfb
new file mode 100644
index 00000000000..0b38fd95e76
--- /dev/null
+++ b/Master/xemtex/gsfonts/c059016l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/c059016l.pfm b/Master/xemtex/gsfonts/c059016l.pfm
new file mode 100644
index 00000000000..924583708f2
--- /dev/null
+++ b/Master/xemtex/gsfonts/c059016l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/c059033l.afm b/Master/xemtex/gsfonts/c059033l.afm
new file mode 100644
index 00000000000..b8b8411a278
--- /dev/null
+++ b/Master/xemtex/gsfonts/c059033l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName CenturySchL-Ital
+FullName Century Schoolbook L Italic
+FamilyName Century Schoolbook L
+Weight Regular
+ItalicAngle -15.0
+IsFixedPitch false
+UnderlinePosition -102
+UnderlineThickness 42
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -166 -329 1018 966
+CapHeight 722
+XHeight 455
+Descender -202
+Ascender 737
+StartCharMetrics 316
+C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 333 ; N exclam ; B 30 -15 316 737 ;
+C 34 ; WX 400 ; N quotedbl ; B 100 510 395 732 ;
+C 35 ; WX 556 ; N numbersign ; B 33 0 524 686 ;
+C 36 ; WX 556 ; N dollar ; B 3 -135 536 792 ;
+C 37 ; WX 833 ; N percent ; B 46 0 792 722 ;
+C 38 ; WX 852 ; N ampersand ; B 24 -15 773 737 ;
+C 39 ; WX 204 ; N quoteright ; B 39 433 230 709 ;
+C 40 ; WX 333 ; N parenleft ; B 40 -123 399 736 ;
+C 41 ; WX 333 ; N parenright ; B -93 -123 265 736 ;
+C 42 ; WX 500 ; N asterisk ; B 34 286 452 705 ;
+C 43 ; WX 606 ; N plus ; B 37 2 540 505 ;
+C 44 ; WX 278 ; N comma ; B -39 -167 151 109 ;
+C 45 ; WX 333 ; N hyphen ; B 32 195 259 278 ;
+C 46 ; WX 278 ; N period ; B 17 -15 141 109 ;
+C 47 ; WX 606 ; N slash ; B 140 -108 466 722 ;
+C 48 ; WX 556 ; N zero ; B 29 -15 527 704 ;
+C 49 ; WX 556 ; N one ; B 50 0 459 708 ;
+C 50 ; WX 556 ; N two ; B -35 0 508 704 ;
+C 51 ; WX 556 ; N three ; B -2 -15 506 704 ;
+C 52 ; WX 556 ; N four ; B -8 0 512 708 ;
+C 53 ; WX 556 ; N five ; B 4 -15 540 704 ;
+C 54 ; WX 556 ; N six ; B 36 -15 547 704 ;
+C 55 ; WX 556 ; N seven ; B 69 -15 561 704 ;
+C 56 ; WX 556 ; N eight ; B 8 -15 527 704 ;
+C 57 ; WX 556 ; N nine ; B 7 -15 519 704 ;
+C 58 ; WX 278 ; N colon ; B 42 -15 254 463 ;
+C 59 ; WX 278 ; N semicolon ; B -14 -167 261 463 ;
+C 60 ; WX 606 ; N less ; B 34 -17 543 523 ;
+C 61 ; WX 606 ; N equal ; B 36 112 540 394 ;
+C 62 ; WX 606 ; N greater ; B 53 -17 562 523 ;
+C 63 ; WX 444 ; N question ; B 102 -15 417 737 ;
+C 64 ; WX 747 ; N at ; B 28 -14 728 736 ;
+C 65 ; WX 704 ; N A ; B -82 0 668 737 ;
+C 66 ; WX 722 ; N B ; B -31 0 668 722 ;
+C 67 ; WX 722 ; N C ; B 40 -15 713 737 ;
+C 68 ; WX 778 ; N D ; B -38 0 735 722 ;
+C 69 ; WX 722 ; N E ; B -37 0 701 722 ;
+C 70 ; WX 667 ; N F ; B -34 0 698 722 ;
+C 71 ; WX 778 ; N G ; B 39 -15 763 737 ;
+C 72 ; WX 833 ; N H ; B -38 0 867 722 ;
+C 73 ; WX 407 ; N I ; B -33 0 431 722 ;
+C 74 ; WX 611 ; N J ; B -13 -15 646 722 ;
+C 75 ; WX 741 ; N K ; B -40 0 814 722 ;
+C 76 ; WX 667 ; N L ; B -37 0 630 722 ;
+C 77 ; WX 944 ; N M ; B -26 0 973 722 ;
+C 78 ; WX 815 ; N N ; B -48 -14 859 722 ;
+C 79 ; WX 778 ; N O ; B 40 -15 735 737 ;
+C 80 ; WX 667 ; N P ; B -33 0 663 722 ;
+C 81 ; WX 778 ; N Q ; B 40 -188 735 737 ;
+C 82 ; WX 741 ; N R ; B -41 -15 691 722 ;
+C 83 ; WX 667 ; N S ; B 0 -15 632 737 ;
+C 84 ; WX 685 ; N T ; B 40 0 726 722 ;
+C 85 ; WX 815 ; N U ; B 93 -15 860 722 ;
+C 86 ; WX 704 ; N V ; B 36 -15 772 722 ;
+C 87 ; WX 926 ; N W ; B 53 -15 973 722 ;
+C 88 ; WX 704 ; N X ; B -73 0 770 722 ;
+C 89 ; WX 685 ; N Y ; B 32 0 758 722 ;
+C 90 ; WX 667 ; N Z ; B -25 0 667 722 ;
+C 91 ; WX 333 ; N bracketleft ; B -33 -108 410 722 ;
+C 92 ; WX 606 ; N backslash ; B 89 0 522 708 ;
+C 93 ; WX 333 ; N bracketright ; B -83 -108 359 722 ;
+C 94 ; WX 606 ; N asciicircum ; B 52 318 554 722 ;
+C 95 ; WX 500 ; N underscore ; B 0 -123 500 -81 ;
+C 96 ; WX 204 ; N quoteleft ; B 61 461 252 737 ;
+C 97 ; WX 574 ; N a ; B 1 -15 523 470 ;
+C 98 ; WX 556 ; N b ; B 32 -15 488 737 ;
+C 99 ; WX 444 ; N c ; B 5 -15 401 470 ;
+C 100 ; WX 611 ; N d ; B 3 -15 586 737 ;
+C 101 ; WX 444 ; N e ; B -6 -15 391 470 ;
+C 102 ; WX 333 ; N f ; B -68 -202 470 736 ;
+C 103 ; WX 537 ; N g ; B -79 -202 523 505 ;
+C 104 ; WX 611 ; N h ; B 0 -15 555 737 ;
+C 105 ; WX 333 ; N i ; B 27 -14 282 714 ;
+C 106 ; WX 315 ; N j ; B -166 -202 317 714 ;
+C 107 ; WX 556 ; N k ; B -5 -15 492 737 ;
+C 108 ; WX 333 ; N l ; B 16 -15 294 737 ;
+C 109 ; WX 889 ; N m ; B 15 -15 837 470 ;
+C 110 ; WX 611 ; N n ; B 14 -15 562 470 ;
+C 111 ; WX 500 ; N o ; B 5 -15 450 470 ;
+C 112 ; WX 574 ; N p ; B -101 -202 506 470 ;
+C 113 ; WX 556 ; N q ; B 0 -202 499 470 ;
+C 114 ; WX 444 ; N r ; B 9 0 433 470 ;
+C 115 ; WX 444 ; N s ; B -1 -15 392 470 ;
+C 116 ; WX 352 ; N t ; B 25 -15 329 621 ;
+C 117 ; WX 611 ; N u ; B 41 -15 556 470 ;
+C 118 ; WX 519 ; N v ; B 34 -16 445 470 ;
+C 119 ; WX 778 ; N w ; B 32 -15 708 470 ;
+C 120 ; WX 500 ; N x ; B -33 -15 471 470 ;
+C 121 ; WX 500 ; N y ; B -79 -202 454 470 ;
+C 122 ; WX 463 ; N z ; B -33 -15 417 470 ;
+C 123 ; WX 333 ; N braceleft ; B 52 -108 381 722 ;
+C 124 ; WX 606 ; N bar ; B 269 0 337 722 ;
+C 125 ; WX 333 ; N braceright ; B -98 -108 231 722 ;
+C 126 ; WX 606 ; N asciitilde ; B 41 165 545 327 ;
+C 161 ; WX 333 ; N exclamdown ; B -7 -203 280 549 ;
+C 162 ; WX 556 ; N cent ; B 61 -135 486 581 ;
+C 163 ; WX 556 ; N sterling ; B -8 -15 545 704 ;
+C 164 ; WX 167 ; N fraction ; B -104 0 333 708 ;
+C 165 ; WX 556 ; N yen ; B 40 0 623 704 ;
+C 166 ; WX 556 ; N florin ; B -57 -202 563 736 ;
+C 167 ; WX 500 ; N section ; B -11 -150 480 737 ;
+C 168 ; WX 556 ; N currency ; B 25 93 530 598 ;
+C 169 ; WX 278 ; N quotesingle ; B 114 510 262 732 ;
+C 170 ; WX 389 ; N quotedblleft ; B 63 461 432 737 ;
+C 171 ; WX 426 ; N guillemotleft ; B -15 85 402 402 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 42 85 261 402 ;
+C 173 ; WX 333 ; N guilsinglright ; B 40 85 259 402 ;
+C 174 ; WX 611 ; N fi ; B -60 -202 564 736 ;
+C 175 ; WX 611 ; N fl ; B -60 -202 594 736 ;
+C 177 ; WX 500 ; N endash ; B -18 206 518 267 ;
+C 178 ; WX 500 ; N dagger ; B 64 -144 518 737 ;
+C 179 ; WX 500 ; N daggerdbl ; B -30 -144 528 737 ;
+C 180 ; WX 278 ; N periodcentered ; B 77 183 201 307 ;
+C 182 ; WX 650 ; N paragraph ; B 88 -144 645 722 ;
+C 183 ; WX 606 ; N bullet ; B 114 217 451 554 ;
+C 184 ; WX 204 ; N quotesinglbase ; B -79 -167 112 109 ;
+C 185 ; WX 389 ; N quotedblbase ; B -79 -167 289 109 ;
+C 186 ; WX 389 ; N quotedblright ; B 38 461 407 737 ;
+C 187 ; WX 426 ; N guillemotright ; B -17 85 400 402 ;
+C 188 ; WX 1000 ; N ellipsis ; B 55 -15 845 109 ;
+C 189 ; WX 1000 ; N perthousand ; B -6 -2 1003 700 ;
+C 191 ; WX 444 ; N questiondown ; B 7 -203 323 549 ;
+C 193 ; WX 333 ; N grave ; B 73 519 263 691 ;
+C 194 ; WX 333 ; N acute ; B 132 519 355 689 ;
+C 195 ; WX 333 ; N circumflex ; B 37 519 331 688 ;
+C 196 ; WX 333 ; N tilde ; B 52 544 380 650 ;
+C 197 ; WX 333 ; N macron ; B 51 559 363 610 ;
+C 198 ; WX 333 ; N breve ; B 69 518 370 677 ;
+C 199 ; WX 333 ; N dotaccent ; B 118 546 216 644 ;
+C 200 ; WX 333 ; N dieresis ; B 59 546 359 644 ;
+C 202 ; WX 333 ; N ring ; B 230 513 429 712 ;
+C 203 ; WX 333 ; N cedilla ; B 3 -216 215 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B 134 519 520 688 ;
+C 206 ; WX 333 ; N ogonek ; B 68 -155 245 0 ;
+C 207 ; WX 333 ; N caron ; B 73 520 378 683 ;
+C 208 ; WX 1000 ; N emdash ; B -18 206 1018 267 ;
+C 225 ; WX 870 ; N AE ; B -92 0 870 722 ;
+C 227 ; WX 422 ; N ordfeminine ; B 83 330 422 731 ;
+C 232 ; WX 667 ; N Lslash ; B -37 0 630 722 ;
+C 233 ; WX 778 ; N Oslash ; B 1 -87 735 750 ;
+C 234 ; WX 981 ; N OE ; B 36 0 963 722 ;
+C 235 ; WX 372 ; N ordmasculine ; B 83 329 372 731 ;
+C 241 ; WX 722 ; N ae ; B -18 -15 667 470 ;
+C 245 ; WX 333 ; N dotlessi ; B 27 -14 282 470 ;
+C 248 ; WX 333 ; N lslash ; B 16 -10 342 742 ;
+C 249 ; WX 500 ; N oslash ; B -5 -120 440 548 ;
+C 250 ; WX 778 ; N oe ; B 0 -15 720 470 ;
+C 251 ; WX 556 ; N germandbls ; B -76 -202 525 736 ;
+C -1 ; WX 815 ; N Udieresis ; B 93 -15 860 910 ;
+C -1 ; WX 815 ; N Uacute ; B 93 -15 860 947 ;
+C -1 ; WX 667 ; N Scedilla ; B 0 -216 632 737 ;
+C -1 ; WX 685 ; N Tcaron ; B 40 0 726 940 ;
+C -1 ; WX 667 ; N Scaron ; B 0 -15 632 940 ;
+C -1 ; WX 741 ; N Rcaron ; B -41 -15 691 940 ;
+C -1 ; WX 741 ; N Racute ; B -41 -15 691 947 ;
+C -1 ; WX 667 ; N Sacute ; B 0 -15 632 947 ;
+C -1 ; WX 778 ; N Otilde ; B 40 -15 735 917 ;
+C -1 ; WX 611 ; N ucircumflex ; B 41 -15 556 688 ;
+C -1 ; WX 778 ; N Ohungarumlaut ; B 40 -15 758 947 ;
+C -1 ; WX 815 ; N Uhungarumlaut ; B 93 -15 860 947 ;
+C -1 ; WX 685 ; N Yacute ; B 32 0 758 947 ;
+C -1 ; WX 778 ; N Eth ; B -38 0 735 722 ;
+C -1 ; WX 778 ; N Dcroat ; B -38 0 735 722 ;
+C -1 ; WX 667 ; N Zacute ; B -25 0 667 947 ;
+C -1 ; WX 815 ; N Uring ; B 93 -15 860 966 ;
+C -1 ; WX 537 ; N gbreve ; B -79 -202 523 677 ;
+C -1 ; WX 444 ; N eogonek ; B -6 -155 391 470 ;
+C -1 ; WX 444 ; N edotaccent ; B -6 -15 391 644 ;
+C -1 ; WX 444 ; N ecaron ; B -6 -15 434 683 ;
+C -1 ; WX 815 ; N Ugrave ; B 93 -15 860 946 ;
+C -1 ; WX 667 ; N Thorn ; B -33 0 624 722 ;
+C -1 ; WX 444 ; N eacute ; B -6 -15 411 689 ;
+C -1 ; WX 444 ; N edieresis ; B -6 -15 405 644 ;
+C -1 ; WX 651 ; N dcaron ; B 3 -15 711 737 ;
+C -1 ; WX 444 ; N ccedilla ; B 5 -216 401 470 ;
+C -1 ; WX 444 ; N ccaron ; B 5 -15 474 683 ;
+C -1 ; WX 444 ; N cacute ; B 5 -15 444 689 ;
+C -1 ; WX 574 ; N aogonek ; B 1 -155 523 470 ;
+C -1 ; WX 574 ; N aring ; B 1 -15 523 712 ;
+C -1 ; WX 574 ; N atilde ; B 1 -15 523 650 ;
+C -1 ; WX 574 ; N abreve ; B 1 -15 523 677 ;
+C -1 ; WX 444 ; N egrave ; B -6 -15 391 691 ;
+C -1 ; WX 574 ; N agrave ; B 1 -15 523 691 ;
+C -1 ; WX 574 ; N aacute ; B 1 -15 523 689 ;
+C -1 ; WX 574 ; N adieresis ; B 1 -15 523 644 ;
+C -1 ; WX 815 ; N Uogonek ; B 93 -155 860 722 ;
+C -1 ; WX 611 ; N ugrave ; B 41 -15 556 691 ;
+C -1 ; WX 611 ; N uacute ; B 41 -15 556 689 ;
+C -1 ; WX 611 ; N udieresis ; B 41 -15 556 644 ;
+C -1 ; WX 368 ; N tcaron ; B 25 -15 428 709 ;
+C -1 ; WX 444 ; N scommaaccent ; B -1 -288 392 470 ;
+C -1 ; WX 667 ; N Zcaron ; B -25 0 667 940 ;
+C -1 ; WX 444 ; N ecircumflex ; B -6 -15 391 688 ;
+C -1 ; WX 815 ; N Ucircumflex ; B 93 -15 860 940 ;
+C -1 ; WX 574 ; N acircumflex ; B 1 -15 523 688 ;
+C -1 ; WX 667 ; N Zdotaccent ; B -25 0 667 910 ;
+C -1 ; WX 444 ; N scaron ; B -1 -15 434 683 ;
+C -1 ; WX 704 ; N Amacron ; B -82 0 668 877 ;
+C -1 ; WX 444 ; N sacute ; B -1 -15 424 689 ;
+C -1 ; WX 685 ; N Tcommaaccent ; B 40 -288 726 722 ;
+C -1 ; WX 685 ; N Ydieresis ; B 32 0 758 910 ;
+C -1 ; WX 574 ; N thorn ; B -101 -202 506 737 ;
+C -1 ; WX 722 ; N Emacron ; B -37 0 701 877 ;
+C -1 ; WX 778 ; N Ograve ; B 40 -15 735 946 ;
+C -1 ; WX 778 ; N Oacute ; B 40 -15 735 947 ;
+C -1 ; WX 778 ; N Odieresis ; B 40 -15 735 910 ;
+C -1 ; WX 815 ; N Ntilde ; B -48 -14 859 917 ;
+C -1 ; WX 815 ; N Ncaron ; B -48 -14 859 940 ;
+C -1 ; WX 815 ; N Nacute ; B -48 -14 859 947 ;
+C -1 ; WX 667 ; N Lcaron ; B -37 0 707 737 ;
+C -1 ; WX 667 ; N Lacute ; B -37 0 630 947 ;
+C -1 ; WX 407 ; N Idotaccent ; B -33 0 431 910 ;
+C -1 ; WX 444 ; N racute ; B 9 0 450 689 ;
+C -1 ; WX 407 ; N Icircumflex ; B -33 0 431 940 ;
+C -1 ; WX 500 ; N ohungarumlaut ; B 5 -15 560 688 ;
+C -1 ; WX 500 ; N otilde ; B 5 -15 454 650 ;
+C -1 ; WX 556 ; N Euro ; B -29 -15 629 713 ;
+C -1 ; WX 500 ; N ocircumflex ; B 5 -15 450 688 ;
+C -1 ; WX 333 ; N onesuperior ; B 43 288 309 712 ;
+C -1 ; WX 333 ; N twosuperior ; B 0 288 353 710 ;
+C -1 ; WX 333 ; N threesuperior ; B 1 279 331 710 ;
+C -1 ; WX 407 ; N Igrave ; B -33 0 431 946 ;
+C -1 ; WX 407 ; N Iacute ; B -33 0 431 947 ;
+C -1 ; WX 407 ; N Imacron ; B -33 0 465 877 ;
+C -1 ; WX 407 ; N Iogonek ; B -33 -155 431 722 ;
+C -1 ; WX 407 ; N Idieresis ; B -33 0 446 910 ;
+C -1 ; WX 778 ; N Gbreve ; B 39 -15 763 935 ;
+C -1 ; WX 815 ; N Umacron ; B 93 -15 860 877 ;
+C -1 ; WX 741 ; N Kcommaaccent ; B -40 -288 814 722 ;
+C -1 ; WX 500 ; N ograve ; B 5 -15 450 691 ;
+C -1 ; WX 667 ; N Scommaaccent ; B 0 -329 632 737 ;
+C -1 ; WX 722 ; N Eogonek ; B -37 -155 701 722 ;
+C -1 ; WX 500 ; N oacute ; B 5 -15 450 689 ;
+C -1 ; WX 722 ; N Edotaccent ; B -37 0 701 910 ;
+C -1 ; WX 333 ; N iogonek ; B 27 -155 282 714 ;
+C -1 ; WX 537 ; N gcommaaccent ; B -79 -202 523 759 ;
+C -1 ; WX 500 ; N odieresis ; B 5 -15 450 644 ;
+C -1 ; WX 611 ; N ntilde ; B 14 -15 562 650 ;
+C -1 ; WX 611 ; N ncaron ; B 14 -15 562 683 ;
+C -1 ; WX 722 ; N Ecaron ; B -37 0 701 940 ;
+C -1 ; WX 722 ; N Ecircumflex ; B -37 0 701 940 ;
+C -1 ; WX 444 ; N scedilla ; B -1 -216 392 470 ;
+C -1 ; WX 444 ; N rcaron ; B 9 0 434 683 ;
+C -1 ; WX 722 ; N Egrave ; B -37 0 701 946 ;
+C -1 ; WX 722 ; N Eacute ; B -37 0 701 947 ;
+C -1 ; WX 778 ; N Gcommaaccent ; B 39 -288 763 737 ;
+C -1 ; WX 741 ; N Rcommaaccent ; B -41 -288 691 722 ;
+C -1 ; WX 722 ; N Edieresis ; B -37 0 701 910 ;
+C -1 ; WX 611 ; N nacute ; B 14 -15 562 689 ;
+C -1 ; WX 611 ; N uogonek ; B 41 -155 556 470 ;
+C -1 ; WX 611 ; N umacron ; B 41 -15 556 610 ;
+C -1 ; WX 778 ; N Dcaron ; B -38 0 735 940 ;
+C -1 ; WX 359 ; N lcaron ; B 16 -15 419 737 ;
+C -1 ; WX 722 ; N Ccaron ; B 40 -15 713 940 ;
+C -1 ; WX 722 ; N Cacute ; B 40 -15 713 947 ;
+C -1 ; WX 722 ; N Ccedilla ; B 40 -216 713 737 ;
+C -1 ; WX 400 ; N degree ; B 70 380 370 686 ;
+C -1 ; WX 704 ; N Aogonek ; B -82 -155 753 737 ;
+C -1 ; WX 606 ; N minus ; B 41 213 545 293 ;
+C -1 ; WX 606 ; N multiply ; B 37 1 540 504 ;
+C -1 ; WX 606 ; N divide ; B 37 -9 540 515 ;
+C -1 ; WX 704 ; N Aring ; B -82 0 668 966 ;
+C -1 ; WX 950 ; N trademark ; B 48 288 971 722 ;
+C -1 ; WX 444 ; N rcommaaccent ; B 9 -288 433 470 ;
+C -1 ; WX 333 ; N lacute ; B 16 -15 371 944 ;
+C -1 ; WX 500 ; N omacron ; B 5 -15 450 610 ;
+C -1 ; WX 704 ; N Atilde ; B -82 0 668 917 ;
+C -1 ; WX 333 ; N icircumflex ; B -3 -14 291 688 ;
+C -1 ; WX 333 ; N igrave ; B 27 -14 282 691 ;
+C -1 ; WX 611 ; N ncommaaccent ; B 14 -288 562 470 ;
+C -1 ; WX 333 ; N lcommaaccent ; B -34 -288 294 737 ;
+C -1 ; WX 606 ; N plusminus ; B 37 0 540 581 ;
+C -1 ; WX 834 ; N onehalf ; B 33 0 844 712 ;
+C -1 ; WX 834 ; N onequarter ; B 33 0 833 712 ;
+C -1 ; WX 834 ; N threequarters ; B 1 0 833 710 ;
+C -1 ; WX 333 ; N iacute ; B 27 -14 355 689 ;
+C -1 ; WX 704 ; N Abreve ; B -82 0 668 935 ;
+C -1 ; WX 556 ; N kcommaaccent ; B -5 -288 492 737 ;
+C -1 ; WX 778 ; N Omacron ; B 40 -15 735 877 ;
+C -1 ; WX 333 ; N imacron ; B 27 -14 363 610 ;
+C -1 ; WX 444 ; N emacron ; B -6 -15 419 610 ;
+C -1 ; WX 574 ; N amacron ; B 1 -15 523 610 ;
+C -1 ; WX 352 ; N tcommaaccent ; B -5 -288 329 621 ;
+C -1 ; WX 500 ; N ydieresis ; B -79 -202 454 644 ;
+C -1 ; WX 463 ; N zdotaccent ; B -33 -15 417 644 ;
+C -1 ; WX 463 ; N zcaron ; B -33 -15 443 683 ;
+C -1 ; WX 463 ; N zacute ; B -33 -15 420 689 ;
+C -1 ; WX 500 ; N yacute ; B -79 -202 454 689 ;
+C -1 ; WX 611 ; N uhungarumlaut ; B 41 -15 611 688 ;
+C -1 ; WX 500 ; N eth ; B 5 -15 450 716 ;
+C -1 ; WX 611 ; N uring ; B 41 -15 556 712 ;
+C -1 ; WX 778 ; N Ocircumflex ; B 40 -15 735 940 ;
+C -1 ; WX 333 ; N commaaccent ; B 46 -288 218 -40 ;
+C -1 ; WX 747 ; N copyright ; B 24 -15 724 685 ;
+C -1 ; WX 747 ; N registered ; B 23 -15 723 685 ;
+C -1 ; WX 704 ; N Acircumflex ; B -82 0 668 940 ;
+C -1 ; WX 333 ; N idieresis ; B 27 -14 349 644 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 606 ; N notequal ; B 36 -43 540 549 ;
+C -1 ; WX 549 ; N radical ; B -10 -35 531 916 ;
+C -1 ; WX 704 ; N Agrave ; B -82 0 668 946 ;
+C -1 ; WX 704 ; N Aacute ; B -82 0 668 947 ;
+C -1 ; WX 606 ; N lessequal ; B 34 0 543 643 ;
+C -1 ; WX 606 ; N greaterequal ; B 53 0 562 643 ;
+C -1 ; WX 606 ; N logicalnot ; B 41 0 545 293 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 815 ; N Ncommaaccent ; B -48 -288 859 722 ;
+C -1 ; WX 611 ; N dcroat ; B 3 -15 635 737 ;
+C -1 ; WX 606 ; N brokenbar ; B 269 0 337 722 ;
+C -1 ; WX 667 ; N Lcommaaccent ; B -37 -288 630 722 ;
+C -1 ; WX 704 ; N Adieresis ; B -82 0 668 910 ;
+C -1 ; WX 611 ; N mu ; B -70 -219 556 470 ;
+C -1 ; WX 278 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -37
+KPX A Ccedilla -41
+KPX A G -32
+KPX A O -34
+KPX A Odieresis -34
+KPX A Q -32
+KPX A T -18
+KPX A U -43
+KPX A Uacute -43
+KPX A Ucircumflex -43
+KPX A Udieresis -43
+KPX A Ugrave -43
+KPX A V -91
+KPX A W -85
+KPX A Y -21
+KPX A a 3
+KPX A b -11
+KPX A c -3
+KPX A ccedilla -7
+KPX A comma 16
+KPX A d 1
+KPX A e 3
+KPX A g 17
+KPX A guillemotleft -19
+KPX A guilsinglleft -47
+KPX A hyphen -16
+KPX A o -4
+KPX A period 17
+KPX A q 3
+KPX A quotedblright -59
+KPX A quoteright -58
+KPX A t 3
+KPX A u -8
+KPX A v -13
+KPX A w -1
+KPX A y -51
+KPX Aacute C -37
+KPX Aacute G -32
+KPX Aacute O -34
+KPX Aacute Q -32
+KPX Aacute T -18
+KPX Aacute U -43
+KPX Aacute V -91
+KPX Aacute W -85
+KPX Aacute Y -21
+KPX Aacute a 3
+KPX Aacute b -11
+KPX Aacute c -3
+KPX Aacute comma 16
+KPX Aacute d 1
+KPX Aacute e 3
+KPX Aacute g 17
+KPX Aacute guillemotleft -19
+KPX Aacute guilsinglleft -47
+KPX Aacute hyphen -16
+KPX Aacute o -4
+KPX Aacute period 17
+KPX Aacute q 3
+KPX Aacute quoteright -58
+KPX Aacute t 3
+KPX Aacute u -8
+KPX Aacute v -13
+KPX Aacute w -1
+KPX Aacute y -51
+KPX Acircumflex C -37
+KPX Acircumflex G -32
+KPX Acircumflex O -34
+KPX Acircumflex Q -32
+KPX Acircumflex T -18
+KPX Acircumflex U -43
+KPX Acircumflex V -91
+KPX Acircumflex W -85
+KPX Acircumflex Y -21
+KPX Acircumflex comma 16
+KPX Acircumflex period 17
+KPX Adieresis C -37
+KPX Adieresis G -32
+KPX Adieresis O -34
+KPX Adieresis Q -32
+KPX Adieresis T -18
+KPX Adieresis U -43
+KPX Adieresis V -91
+KPX Adieresis W -85
+KPX Adieresis Y -21
+KPX Adieresis a 3
+KPX Adieresis b -11
+KPX Adieresis c -3
+KPX Adieresis comma 16
+KPX Adieresis d 1
+KPX Adieresis g 17
+KPX Adieresis guillemotleft -19
+KPX Adieresis guilsinglleft -47
+KPX Adieresis hyphen -16
+KPX Adieresis o -4
+KPX Adieresis period 17
+KPX Adieresis q 3
+KPX Adieresis quotedblright -59
+KPX Adieresis quoteright -58
+KPX Adieresis t 3
+KPX Adieresis u -8
+KPX Adieresis v -13
+KPX Adieresis w -1
+KPX Adieresis y -51
+KPX Agrave C -37
+KPX Agrave G -32
+KPX Agrave O -34
+KPX Agrave Q -32
+KPX Agrave T -18
+KPX Agrave U -43
+KPX Agrave V -91
+KPX Agrave W -85
+KPX Agrave Y -21
+KPX Agrave comma 16
+KPX Agrave period 17
+KPX Aring C -37
+KPX Aring G -32
+KPX Aring O -34
+KPX Aring Q -32
+KPX Aring T -18
+KPX Aring U -43
+KPX Aring V -91
+KPX Aring W -85
+KPX Aring Y -21
+KPX Aring a 3
+KPX Aring b -11
+KPX Aring c -3
+KPX Aring comma 16
+KPX Aring d 1
+KPX Aring e 3
+KPX Aring g 17
+KPX Aring guillemotleft -19
+KPX Aring guilsinglleft -47
+KPX Aring hyphen -16
+KPX Aring o -4
+KPX Aring period 17
+KPX Aring q 3
+KPX Aring quotedblright -59
+KPX Aring quoteright -58
+KPX Aring t 3
+KPX Aring u -8
+KPX Aring v -13
+KPX Aring w -1
+KPX Aring y -51
+KPX Atilde C -37
+KPX Atilde G -32
+KPX Atilde O -34
+KPX Atilde Q -32
+KPX Atilde T -18
+KPX Atilde U -43
+KPX Atilde V -91
+KPX Atilde W -85
+KPX Atilde Y -21
+KPX Atilde comma 16
+KPX Atilde period 17
+KPX B A -3
+KPX B AE 1
+KPX B Aacute -3
+KPX B Acircumflex -3
+KPX B Adieresis -3
+KPX B Aring -3
+KPX B Atilde -3
+KPX B O -12
+KPX B OE -13
+KPX B Oacute -12
+KPX B Ocircumflex -12
+KPX B Odieresis -12
+KPX B Ograve -12
+KPX B Oslash -13
+KPX B V -26
+KPX B W -37
+KPX B Y -21
+KPX C A -18
+KPX C AE -13
+KPX C Aacute -18
+KPX C Adieresis -18
+KPX C Aring -18
+KPX C H -21
+KPX C K -20
+KPX C O -12
+KPX C Oacute -12
+KPX C Odieresis -12
+KPX Ccedilla A -23
+KPX D A -42
+KPX D Aacute -42
+KPX D Acircumflex -42
+KPX D Adieresis -42
+KPX D Agrave -42
+KPX D Aring -42
+KPX D Atilde -42
+KPX D J -7
+KPX D T 0
+KPX D V -41
+KPX D W -48
+KPX D X -47
+KPX D Y -36
+KPX F A -73
+KPX F Aacute -73
+KPX F Acircumflex -73
+KPX F Adieresis -73
+KPX F Agrave -73
+KPX F Aring -73
+KPX F Atilde -73
+KPX F J -72
+KPX F O -1
+KPX F Odieresis -1
+KPX F a -49
+KPX F aacute -49
+KPX F adieresis -48
+KPX F ae -35
+KPX F aring -49
+KPX F comma -92
+KPX F e -52
+KPX F eacute -52
+KPX F hyphen -50
+KPX F i 0
+KPX F j -18
+KPX F o -54
+KPX F oacute -54
+KPX F odieresis -33
+KPX F oe -51
+KPX F oslash -55
+KPX F period -93
+KPX F r -1
+KPX F u 3
+KPX G A -7
+KPX G AE -2
+KPX G Aacute -7
+KPX G Acircumflex -7
+KPX G Adieresis -7
+KPX G Agrave -7
+KPX G Aring -7
+KPX G Atilde -7
+KPX G T -22
+KPX G V 1
+KPX G W -7
+KPX G Y 2
+KPX J A -47
+KPX J AE -42
+KPX J Adieresis -47
+KPX J Aring -47
+KPX K C -34
+KPX K G -36
+KPX K O -36
+KPX K OE -39
+KPX K Oacute -36
+KPX K Odieresis -36
+KPX K S 17
+KPX K T 20
+KPX K a 0
+KPX K adieresis 0
+KPX K ae 18
+KPX K aring 0
+KPX K e 0
+KPX K hyphen -51
+KPX K o -8
+KPX K oacute -8
+KPX K odieresis -8
+KPX K u -12
+KPX K udieresis -12
+KPX K y -83
+KPX L A 31
+KPX L AE 36
+KPX L Aacute 31
+KPX L Adieresis 31
+KPX L Aring 31
+KPX L C 2
+KPX L Ccedilla 2
+KPX L G 3
+KPX L O 2
+KPX L Oacute 2
+KPX L Ocircumflex 2
+KPX L Odieresis 2
+KPX L Ograve 2
+KPX L Otilde 2
+KPX L S 0
+KPX L T -49
+KPX L U -26
+KPX L Udieresis -26
+KPX L V -72
+KPX L W -67
+KPX L Y -52
+KPX L hyphen 38
+KPX L quotedblright -48
+KPX L quoteright -41
+KPX L u -7
+KPX L udieresis -7
+KPX L y -1
+KPX N A -32
+KPX N AE -27
+KPX N Aacute -32
+KPX N Adieresis -32
+KPX N Aring -32
+KPX N C -28
+KPX N Ccedilla -27
+KPX N G -29
+KPX N O -28
+KPX N Oacute -28
+KPX N Odieresis -28
+KPX N a -34
+KPX N aacute -34
+KPX N adieresis -34
+KPX N ae -39
+KPX N aring -34
+KPX N comma -36
+KPX N e -32
+KPX N eacute -32
+KPX N o -37
+KPX N oacute -37
+KPX N odieresis -37
+KPX N oslash -33
+KPX N period -38
+KPX N u -42
+KPX N udieresis -42
+KPX O A -42
+KPX O AE -37
+KPX O Aacute -42
+KPX O Adieresis -42
+KPX O Aring -42
+KPX O T 0
+KPX O V -35
+KPX O W -47
+KPX O X -47
+KPX O Y -30
+KPX Oacute A -42
+KPX Oacute T 0
+KPX Oacute V -35
+KPX Oacute W -47
+KPX Oacute Y -30
+KPX Ocircumflex T 0
+KPX Ocircumflex V -35
+KPX Ocircumflex Y -30
+KPX Odieresis A -42
+KPX Odieresis T 0
+KPX Odieresis V -35
+KPX Odieresis W -47
+KPX Odieresis X -47
+KPX Odieresis Y -30
+KPX Ograve T 0
+KPX Ograve V -35
+KPX Ograve Y -30
+KPX Oslash A -41
+KPX Otilde T 0
+KPX Otilde V -35
+KPX Otilde Y -30
+KPX P A -80
+KPX P AE -69
+KPX P Aacute -80
+KPX P Adieresis -80
+KPX P Aring -80
+KPX P J -78
+KPX P a -32
+KPX P aacute -32
+KPX P adieresis -32
+KPX P ae -23
+KPX P aring -32
+KPX P comma -111
+KPX P e -33
+KPX P eacute -33
+KPX P hyphen -55
+KPX P o -36
+KPX P oacute -36
+KPX P odieresis -36
+KPX P oe -32
+KPX P oslash -35
+KPX P period -112
+KPX R C -15
+KPX R Ccedilla -14
+KPX R G -14
+KPX R O -14
+KPX R OE -14
+KPX R Oacute -14
+KPX R Odieresis -14
+KPX R T -14
+KPX R U -33
+KPX R Udieresis -33
+KPX R V -22
+KPX R W -33
+KPX R Y -17
+KPX R a -1
+KPX R aacute -1
+KPX R adieresis -1
+KPX R ae 5
+KPX R aring -1
+KPX R e 1
+KPX R eacute 1
+KPX R hyphen 0
+KPX R o -4
+KPX R oacute -4
+KPX R odieresis -4
+KPX R oe -2
+KPX R u -22
+KPX R uacute -22
+KPX R udieresis -22
+KPX R y -45
+KPX S A -5
+KPX S AE 0
+KPX S Aacute -5
+KPX S Adieresis -5
+KPX S Aring -5
+KPX S T -21
+KPX S V 3
+KPX S W -5
+KPX S Y 4
+KPX S t -19
+KPX T A -46
+KPX T AE -41
+KPX T Aacute -46
+KPX T Acircumflex -46
+KPX T Adieresis -46
+KPX T Agrave -46
+KPX T Aring -46
+KPX T Atilde -46
+KPX T C 8
+KPX T G 6
+KPX T J -80
+KPX T O 7
+KPX T OE 8
+KPX T Oacute 7
+KPX T Ocircumflex 7
+KPX T Odieresis 7
+KPX T Ograve 7
+KPX T Oslash 6
+KPX T Otilde 7
+KPX T S -10
+KPX T V 41
+KPX T W 34
+KPX T Y 43
+KPX T a -28
+KPX T ae -14
+KPX T c -35
+KPX T colon -26
+KPX T comma -92
+KPX T e -33
+KPX T g -35
+KPX T guillemotleft -102
+KPX T guilsinglleft -130
+KPX T hyphen -99
+KPX T i 15
+KPX T j -3
+KPX T o -35
+KPX T oslash -37
+KPX T period -93
+KPX T r 13
+KPX T s -21
+KPX T semicolon -30
+KPX T u 13
+KPX T v 17
+KPX T w 16
+KPX T y 2
+KPX U A -50
+KPX U AE -45
+KPX U Aacute -50
+KPX U Acircumflex -50
+KPX U Adieresis -50
+KPX U Aring -50
+KPX U Atilde -50
+KPX U comma -47
+KPX U m -44
+KPX U n -44
+KPX U p -47
+KPX U period -48
+KPX U r -43
+KPX Uacute A -50
+KPX Uacute comma -47
+KPX Uacute m -44
+KPX Uacute n -44
+KPX Uacute p -47
+KPX Uacute period -48
+KPX Uacute r -43
+KPX Ucircumflex A -50
+KPX Udieresis A -50
+KPX Udieresis b 8
+KPX Udieresis comma -47
+KPX Udieresis m -44
+KPX Udieresis n -44
+KPX Udieresis p -47
+KPX Udieresis period -48
+KPX Udieresis r -43
+KPX Ugrave A -50
+KPX V A -95
+KPX V AE -42
+KPX V Aacute -95
+KPX V Acircumflex -95
+KPX V Adieresis -95
+KPX V Agrave -95
+KPX V Aring -95
+KPX V Atilde -95
+KPX V C -41
+KPX V G -45
+KPX V O -43
+KPX V Oacute -43
+KPX V Ocircumflex -43
+KPX V Odieresis -43
+KPX V Ograve -43
+KPX V Oslash -46
+KPX V Otilde -43
+KPX V S -15
+KPX V T 17
+KPX V a -79
+KPX V ae -84
+KPX V colon -99
+KPX V comma -101
+KPX V e -78
+KPX V g -88
+KPX V guillemotleft -70
+KPX V guilsinglleft -98
+KPX V hyphen -68
+KPX V i -13
+KPX V o -83
+KPX V oslash -79
+KPX V period -102
+KPX V r -56
+KPX V semicolon -103
+KPX V u -55
+KPX V y -68
+KPX W A -71
+KPX W AE -53
+KPX W Aacute -71
+KPX W Acircumflex -71
+KPX W Adieresis -71
+KPX W Agrave -71
+KPX W Aring -71
+KPX W Atilde -71
+KPX W C -44
+KPX W G -44
+KPX W O -44
+KPX W Oacute -44
+KPX W Ocircumflex -44
+KPX W Odieresis -44
+KPX W Ograve -44
+KPX W Oslash -43
+KPX W Otilde -44
+KPX W S -26
+KPX W T 6
+KPX W a -58
+KPX W ae -64
+KPX W colon -92
+KPX W comma -71
+KPX W e -57
+KPX W g -66
+KPX W guillemotleft -49
+KPX W guilsinglleft -77
+KPX W hyphen -46
+KPX W i -24
+KPX W o -61
+KPX W oslash -57
+KPX W period -72
+KPX W r -49
+KPX W semicolon -93
+KPX W u -48
+KPX W y -56
+KPX X C -37
+KPX X O -39
+KPX X Odieresis -39
+KPX X Q -41
+KPX X a -5
+KPX X e -5
+KPX X hyphen -50
+KPX X o -13
+KPX X u -17
+KPX X y -88
+KPX Y A -43
+KPX Y AE -38
+KPX Y Aacute -43
+KPX Y Acircumflex -43
+KPX Y Adieresis -43
+KPX Y Agrave -43
+KPX Y Aring -43
+KPX Y Atilde -43
+KPX Y C -33
+KPX Y G -37
+KPX Y O -35
+KPX Y Oacute -35
+KPX Y Ocircumflex -35
+KPX Y Odieresis -35
+KPX Y Ograve -35
+KPX Y Oslash -38
+KPX Y Otilde -35
+KPX Y S -8
+KPX Y T 21
+KPX Y a -92
+KPX Y ae -83
+KPX Y colon -103
+KPX Y comma -89
+KPX Y e -91
+KPX Y g -87
+KPX Y guillemotleft -95
+KPX Y guilsinglleft -123
+KPX Y hyphen -95
+KPX Y i -10
+KPX Y o -95
+KPX Y oslash -91
+KPX Y p -80
+KPX Y period -90
+KPX Y semicolon -102
+KPX Y u -72
+KPX Y v -69
+KPX Z v -15
+KPX Z y -8
+KPX a j -45
+KPX a quoteright -7
+KPX a v -21
+KPX a w -18
+KPX a y -37
+KPX aacute v -21
+KPX aacute w -18
+KPX aacute y -37
+KPX adieresis v -21
+KPX adieresis w -18
+KPX adieresis y -37
+KPX ae v -21
+KPX ae w -22
+KPX ae y -6
+KPX agrave v -21
+KPX agrave w -18
+KPX agrave y -37
+KPX aring v -21
+KPX aring w -18
+KPX aring y -37
+KPX b v -27
+KPX b w -26
+KPX b y -4
+KPX c h -23
+KPX c k -21
+KPX comma one -48
+KPX comma quotedblright 4
+KPX comma quoteright 4
+KPX e quoteright 20
+KPX e t -13
+KPX e v -22
+KPX e w -22
+KPX e x -1
+KPX e y -4
+KPX eacute v -22
+KPX eacute w -23
+KPX eacute y -4
+KPX ecircumflex v -22
+KPX ecircumflex w -22
+KPX ecircumflex y -4
+KPX eight four 7
+KPX eight one -60
+KPX eight seven -11
+KPX f a -14
+KPX f aacute -14
+KPX f adieresis 3
+KPX f ae -7
+KPX f aring -14
+KPX f e -15
+KPX f eacute -15
+KPX f f 14
+KPX f i 16
+KPX f j -2
+KPX f l 42
+KPX f o -18
+KPX f oacute -18
+KPX f odieresis 18
+KPX f oe -15
+KPX f oslash -18
+KPX f quoteright 57
+KPX f s -12
+KPX f t 18
+KPX five four 4
+KPX five one -77
+KPX five seven -42
+KPX four four 17
+KPX four one -41
+KPX four seven -30
+KPX g a -32
+KPX g adieresis -32
+KPX g ae -22
+KPX g aring -32
+KPX g e -29
+KPX g eacute -29
+KPX g l -37
+KPX g oacute -32
+KPX g odieresis -32
+KPX g r 0
+KPX guillemotright A -14
+KPX guillemotright AE -1
+KPX guillemotright Aacute -14
+KPX guillemotright Adieresis -14
+KPX guillemotright Aring -14
+KPX guillemotright T -81
+KPX guillemotright V -61
+KPX guillemotright W -53
+KPX guillemotright Y -80
+KPX guilsinglright A -38
+KPX guilsinglright AE -25
+KPX guilsinglright Aacute -38
+KPX guilsinglright Adieresis -38
+KPX guilsinglright Aring -38
+KPX guilsinglright T -105
+KPX guilsinglright V -86
+KPX guilsinglright W -77
+KPX guilsinglright Y -104
+KPX h quoteright -22
+KPX h y -43
+KPX hyphen A -11
+KPX hyphen AE 2
+KPX hyphen Aacute -11
+KPX hyphen Adieresis -11
+KPX hyphen Aring -11
+KPX hyphen T -78
+KPX hyphen V -60
+KPX hyphen W -51
+KPX hyphen Y -81
+KPX i T -38
+KPX i j -44
+KPX k a -5
+KPX k aacute -5
+KPX k adieresis -5
+KPX k ae 0
+KPX k aring -5
+KPX k comma 0
+KPX k e -2
+KPX k eacute -2
+KPX k g -7
+KPX k hyphen -9
+KPX k o -8
+KPX k oacute -8
+KPX k odieresis -8
+KPX k period -1
+KPX k s -6
+KPX k u -27
+KPX k udieresis -27
+KPX l v -28
+KPX l y -52
+KPX m p -27
+KPX m v -22
+KPX m w -18
+KPX m y -42
+KPX n T -61
+KPX n p -26
+KPX n quoteright -19
+KPX n v -21
+KPX n w -17
+KPX n y -40
+KPX nine four -2
+KPX nine one -69
+KPX nine seven -12
+KPX o T -48
+KPX o quoteright 15
+KPX o t -15
+KPX o v -19
+KPX o w -17
+KPX o x -9
+KPX o y 3
+KPX oacute v -19
+KPX oacute w -17
+KPX oacute y 3
+KPX ocircumflex t -15
+KPX odieresis t -15
+KPX odieresis v -19
+KPX odieresis w -17
+KPX odieresis x -9
+KPX odieresis y 3
+KPX ograve v -19
+KPX ograve w -17
+KPX ograve y 3
+KPX one comma -30
+KPX one eight -41
+KPX one five -39
+KPX one four -60
+KPX one nine -33
+KPX one one -50
+KPX one period -31
+KPX one seven -67
+KPX one six -49
+KPX one three -36
+KPX one two -8
+KPX one zero -42
+KPX p t -21
+KPX p y -4
+KPX period one -54
+KPX period quotedblright -1
+KPX period quoteright -1
+KPX q c -26
+KPX q u -23
+KPX quotedblbase A 37
+KPX quotedblbase AE 50
+KPX quotedblbase T -50
+KPX quotedblbase V -76
+KPX quotedblbase W -64
+KPX quotedblbase Y -53
+KPX quotedblleft A -63
+KPX quotedblleft AE -51
+KPX quotedblleft Aacute -63
+KPX quotedblleft Adieresis -63
+KPX quotedblleft Aring -63
+KPX quotedblleft T 33
+KPX quotedblleft V 43
+KPX quotedblleft W 35
+KPX quotedblleft Y 44
+KPX quotedblright A -69
+KPX quotedblright AE -57
+KPX quotedblright Aacute -69
+KPX quotedblright Adieresis -69
+KPX quotedblright Aring -69
+KPX quotedblright T 29
+KPX quotedblright V 33
+KPX quotedblright W 25
+KPX quotedblright Y 35
+KPX quoteleft A -61
+KPX quoteleft AE -49
+KPX quoteleft Aacute -61
+KPX quoteleft Adieresis -61
+KPX quoteleft Aring -61
+KPX quoteleft T 35
+KPX quoteleft V 45
+KPX quoteleft W 38
+KPX quoteleft Y 47
+KPX quoteright A -62
+KPX quoteright AE -50
+KPX quoteright Aacute -62
+KPX quoteright Adieresis -62
+KPX quoteright Aring -62
+KPX quoteright comma -42
+KPX quoteright d -18
+KPX quoteright o -13
+KPX quoteright period -43
+KPX quoteright r -5
+KPX quoteright s -11
+KPX quoteright t -1
+KPX quoteright v -1
+KPX quoteright w -2
+KPX quoteright y 14
+KPX r a -10
+KPX r aacute -10
+KPX r acircumflex -10
+KPX r adieresis -10
+KPX r ae -11
+KPX r agrave -10
+KPX r aring -10
+KPX r c -11
+KPX r ccedilla -9
+KPX r colon -36
+KPX r comma -108
+KPX r d -15
+KPX r e -8
+KPX r eacute -8
+KPX r ecircumflex -8
+KPX r egrave -8
+KPX r f 5
+KPX r g -15
+KPX r h -33
+KPX r hyphen -75
+KPX r i 4
+KPX r j -14
+KPX r k -30
+KPX r l -28
+KPX r m -3
+KPX r n -3
+KPX r o -10
+KPX r oacute -10
+KPX r ocircumflex -10
+KPX r odieresis -10
+KPX r oe -6
+KPX r ograve -10
+KPX r oslash -8
+KPX r p -3
+KPX r period -109
+KPX r q -15
+KPX r quoteright 36
+KPX r r 1
+KPX r s -14
+KPX r semicolon -39
+KPX r t 9
+KPX r u -1
+KPX r v 2
+KPX r w 1
+KPX r x 2
+KPX r y 10
+KPX r z 2
+KPX s quoteright 19
+KPX s t -14
+KPX seven colon -95
+KPX seven comma -78
+KPX seven eight -47
+KPX seven five -49
+KPX seven four -82
+KPX seven one -67
+KPX seven period -79
+KPX seven seven -28
+KPX seven six -49
+KPX seven three -38
+KPX seven two -31
+KPX six four 11
+KPX six one -55
+KPX six seven -12
+KPX t S -11
+KPX t a -6
+KPX t aacute -6
+KPX t adieresis -6
+KPX t ae -1
+KPX t aring -6
+KPX t colon -40
+KPX t e -3
+KPX t eacute -3
+KPX t h -24
+KPX t o -9
+KPX t oacute -9
+KPX t odieresis -9
+KPX t quoteright 4
+KPX t semicolon -37
+KPX three four -3
+KPX three one -73
+KPX three seven -20
+KPX two four 2
+KPX two one -56
+KPX two seven -18
+KPX u quoteright -12
+KPX v a -20
+KPX v aacute -20
+KPX v acircumflex -20
+KPX v adieresis -20
+KPX v ae -28
+KPX v agrave -20
+KPX v aring -20
+KPX v atilde -20
+KPX v c -23
+KPX v colon -67
+KPX v comma -43
+KPX v e -19
+KPX v eacute -19
+KPX v ecircumflex -19
+KPX v egrave -19
+KPX v g -31
+KPX v hyphen -9
+KPX v l -33
+KPX v o -23
+KPX v oacute -23
+KPX v odieresis -23
+KPX v ograve -23
+KPX v oslash -19
+KPX v period -44
+KPX v s -31
+KPX v semicolon -65
+KPX w a -18
+KPX w aacute -18
+KPX w acircumflex -18
+KPX w adieresis -18
+KPX w ae -26
+KPX w agrave -18
+KPX w aring -18
+KPX w atilde -18
+KPX w c -21
+KPX w colon -65
+KPX w comma -40
+KPX w e -17
+KPX w eacute -17
+KPX w ecircumflex -17
+KPX w egrave -17
+KPX w g -29
+KPX w hyphen -8
+KPX w l -31
+KPX w o -21
+KPX w oacute -21
+KPX w odieresis -21
+KPX w ograve -21
+KPX w oslash -17
+KPX w period -41
+KPX w s -29
+KPX w semicolon -63
+KPX x a 3
+KPX x c 0
+KPX x e 5
+KPX x eacute 5
+KPX x o 0
+KPX x q 3
+KPX y a -21
+KPX y aacute -21
+KPX y acircumflex -21
+KPX y adieresis -21
+KPX y ae -28
+KPX y agrave -21
+KPX y aring -21
+KPX y atilde -21
+KPX y c -24
+KPX y colon -53
+KPX y comma -48
+KPX y e -20
+KPX y eacute -20
+KPX y ecircumflex -20
+KPX y egrave -20
+KPX y g -31
+KPX y hyphen -15
+KPX y l -33
+KPX y o -24
+KPX y oacute -24
+KPX y odieresis -24
+KPX y ograve -24
+KPX y oslash -20
+KPX y period -49
+KPX y s -31
+KPX y semicolon -57
+KPX zero four 6
+KPX zero one -62
+KPX zero seven -8
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/c059033l.pfb b/Master/xemtex/gsfonts/c059033l.pfb
new file mode 100644
index 00000000000..0073b95a016
--- /dev/null
+++ b/Master/xemtex/gsfonts/c059033l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/c059033l.pfm b/Master/xemtex/gsfonts/c059033l.pfm
new file mode 100644
index 00000000000..5860e2e7b13
--- /dev/null
+++ b/Master/xemtex/gsfonts/c059033l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/c059036l.afm b/Master/xemtex/gsfonts/c059036l.afm
new file mode 100644
index 00000000000..9e83da145d5
--- /dev/null
+++ b/Master/xemtex/gsfonts/c059036l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName CenturySchL-BoldItal
+FullName Century Schoolbook L Bold Italic
+FamilyName Century Schoolbook L
+Weight Bold
+ItalicAngle -15.0
+IsFixedPitch false
+UnderlinePosition -102
+UnderlineThickness 54
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -170 -371 1151 998
+CapHeight 722
+XHeight 464
+Descender -202
+Ascender 736
+StartCharMetrics 316
+C 32 ; WX 287 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 333 ; N exclam ; B 3 -15 336 737 ;
+C 34 ; WX 400 ; N quotedbl ; B 100 397 507 734 ;
+C 35 ; WX 574 ; N numbersign ; B 41 0 533 700 ;
+C 36 ; WX 574 ; N dollar ; B 3 -145 559 794 ;
+C 37 ; WX 889 ; N percent ; B 51 0 836 722 ;
+C 38 ; WX 889 ; N ampersand ; B 31 -15 823 737 ;
+C 39 ; WX 259 ; N quoteright ; B 70 377 301 722 ;
+C 40 ; WX 407 ; N parenleft ; B 71 -118 452 737 ;
+C 41 ; WX 407 ; N parenright ; B -70 -118 308 737 ;
+C 42 ; WX 500 ; N asterisk ; B 32 297 472 737 ;
+C 43 ; WX 606 ; N plus ; B 41 0 545 505 ;
+C 44 ; WX 287 ; N comma ; B -48 -187 180 159 ;
+C 45 ; WX 333 ; N hyphen ; B 10 180 272 310 ;
+C 46 ; WX 287 ; N period ; B 12 -15 186 159 ;
+C 47 ; WX 278 ; N slash ; B -25 -15 311 737 ;
+C 48 ; WX 574 ; N zero ; B 21 -15 553 705 ;
+C 49 ; WX 574 ; N one ; B 25 0 489 707 ;
+C 50 ; WX 574 ; N two ; B -45 0 538 705 ;
+C 51 ; WX 574 ; N three ; B -5 -15 538 705 ;
+C 52 ; WX 574 ; N four ; B -13 0 544 707 ;
+C 53 ; WX 574 ; N five ; B 0 -15 573 705 ;
+C 54 ; WX 574 ; N six ; B 30 -15 573 705 ;
+C 55 ; WX 574 ; N seven ; B 64 -15 593 705 ;
+C 56 ; WX 574 ; N eight ; B 0 -15 551 705 ;
+C 57 ; WX 574 ; N nine ; B 1 -15 544 705 ;
+C 58 ; WX 287 ; N colon ; B -2 -15 257 481 ;
+C 59 ; WX 287 ; N semicolon ; B -39 -187 257 481 ;
+C 60 ; WX 606 ; N less ; B 14 -25 523 529 ;
+C 61 ; WX 606 ; N equal ; B 41 92 545 413 ;
+C 62 ; WX 606 ; N greater ; B 38 -25 547 529 ;
+C 63 ; WX 481 ; N question ; B 79 -15 452 737 ;
+C 64 ; WX 747 ; N at ; B 22 -15 722 737 ;
+C 65 ; WX 741 ; N A ; B -75 0 716 736 ;
+C 66 ; WX 759 ; N B ; B -50 0 720 722 ;
+C 67 ; WX 759 ; N C ; B 35 -15 759 737 ;
+C 68 ; WX 833 ; N D ; B -49 0 796 722 ;
+C 69 ; WX 741 ; N E ; B -41 0 728 722 ;
+C 70 ; WX 704 ; N F ; B -41 0 726 722 ;
+C 71 ; WX 815 ; N G ; B 34 -15 802 737 ;
+C 72 ; WX 870 ; N H ; B -41 0 912 722 ;
+C 73 ; WX 444 ; N I ; B -41 0 486 722 ;
+C 74 ; WX 667 ; N J ; B -9 -15 718 722 ;
+C 75 ; WX 778 ; N K ; B -41 0 832 722 ;
+C 76 ; WX 704 ; N L ; B -41 0 670 722 ;
+C 77 ; WX 944 ; N M ; B -24 0 988 722 ;
+C 78 ; WX 852 ; N N ; B -57 -14 912 722 ;
+C 79 ; WX 833 ; N O ; B 36 -15 797 737 ;
+C 80 ; WX 741 ; N P ; B -38 0 731 722 ;
+C 81 ; WX 833 ; N Q ; B 35 -186 796 737 ;
+C 82 ; WX 796 ; N R ; B -41 -15 751 722 ;
+C 83 ; WX 685 ; N S ; B 1 -15 666 737 ;
+C 84 ; WX 722 ; N T ; B 44 0 762 722 ;
+C 85 ; WX 833 ; N U ; B 88 -15 895 722 ;
+C 86 ; WX 741 ; N V ; B 32 -14 802 722 ;
+C 87 ; WX 944 ; N W ; B 40 -14 994 722 ;
+C 88 ; WX 741 ; N X ; B -72 0 811 722 ;
+C 89 ; WX 704 ; N Y ; B 15 0 777 722 ;
+C 90 ; WX 704 ; N Z ; B -29 0 715 722 ;
+C 91 ; WX 407 ; N bracketleft ; B -31 -108 432 722 ;
+C 92 ; WX 606 ; N backslash ; B 81 0 545 722 ;
+C 93 ; WX 407 ; N bracketright ; B -49 -108 414 722 ;
+C 94 ; WX 606 ; N asciicircum ; B 52 318 554 722 ;
+C 95 ; WX 500 ; N underscore ; B 0 -129 500 -75 ;
+C 96 ; WX 259 ; N quoteleft ; B 39 391 270 737 ;
+C 97 ; WX 667 ; N a ; B 15 -15 646 479 ;
+C 98 ; WX 611 ; N b ; B 28 -15 557 736 ;
+C 99 ; WX 537 ; N c ; B 3 -14 487 478 ;
+C 100 ; WX 667 ; N d ; B 0 -15 663 736 ;
+C 101 ; WX 519 ; N e ; B -2 -14 478 479 ;
+C 102 ; WX 389 ; N f ; B -48 -205 550 737 ;
+C 103 ; WX 611 ; N g ; B -66 -202 602 533 ;
+C 104 ; WX 685 ; N h ; B 0 -15 637 736 ;
+C 105 ; WX 389 ; N i ; B 28 -15 343 737 ;
+C 106 ; WX 370 ; N j ; B -170 -202 381 737 ;
+C 107 ; WX 648 ; N k ; B -5 -15 584 736 ;
+C 108 ; WX 389 ; N l ; B 26 -15 370 736 ;
+C 109 ; WX 944 ; N m ; B 9 -14 920 479 ;
+C 110 ; WX 685 ; N n ; B 3 -15 642 479 ;
+C 111 ; WX 574 ; N o ; B 10 -14 540 479 ;
+C 112 ; WX 648 ; N p ; B -118 -202 590 479 ;
+C 113 ; WX 630 ; N q ; B 0 -202 587 478 ;
+C 114 ; WX 519 ; N r ; B 3 0 524 479 ;
+C 115 ; WX 481 ; N s ; B 2 -15 437 479 ;
+C 116 ; WX 407 ; N t ; B 24 -14 404 650 ;
+C 117 ; WX 685 ; N u ; B 38 -14 639 478 ;
+C 118 ; WX 556 ; N v ; B 32 -15 500 479 ;
+C 119 ; WX 833 ; N w ; B 22 -15 788 479 ;
+C 120 ; WX 574 ; N x ; B -49 -15 571 479 ;
+C 121 ; WX 519 ; N y ; B -66 -202 492 479 ;
+C 122 ; WX 519 ; N z ; B -19 -15 471 479 ;
+C 123 ; WX 407 ; N braceleft ; B 52 -108 402 722 ;
+C 124 ; WX 606 ; N bar ; B 262 0 343 722 ;
+C 125 ; WX 407 ; N braceright ; B -30 -108 322 722 ;
+C 126 ; WX 606 ; N asciitilde ; B 51 160 555 335 ;
+C 161 ; WX 333 ; N exclamdown ; B -39 -203 289 549 ;
+C 162 ; WX 574 ; N cent ; B 30 -137 514 586 ;
+C 163 ; WX 574 ; N sterling ; B -18 -15 566 705 ;
+C 164 ; WX 167 ; N fraction ; B -166 0 333 722 ;
+C 165 ; WX 574 ; N yen ; B 23 0 635 706 ;
+C 166 ; WX 574 ; N florin ; B -27 -204 588 737 ;
+C 167 ; WX 500 ; N section ; B -40 -144 505 737 ;
+C 168 ; WX 574 ; N currency ; B 40 97 546 603 ;
+C 169 ; WX 287 ; N quotesingle ; B 100 397 269 734 ;
+C 170 ; WX 481 ; N quotedblleft ; B 52 391 522 737 ;
+C 171 ; WX 481 ; N guillemotleft ; B -35 78 427 419 ;
+C 172 ; WX 278 ; N guilsinglleft ; B -35 78 224 419 ;
+C 173 ; WX 278 ; N guilsinglright ; B -6 78 253 419 ;
+C 174 ; WX 685 ; N fi ; B -70 -205 646 737 ;
+C 175 ; WX 685 ; N fl ; B -70 -205 681 736 ;
+C 177 ; WX 500 ; N endash ; B -18 193 518 298 ;
+C 178 ; WX 500 ; N dagger ; B 50 -144 510 737 ;
+C 179 ; WX 500 ; N daggerdbl ; B -48 -147 514 737 ;
+C 180 ; WX 287 ; N periodcentered ; B 41 171 215 345 ;
+C 182 ; WX 650 ; N paragraph ; B 67 -144 661 722 ;
+C 183 ; WX 606 ; N bullet ; B 109 180 446 517 ;
+C 184 ; WX 259 ; N quotesinglbase ; B -43 -187 188 159 ;
+C 185 ; WX 481 ; N quotedblbase ; B -70 -187 402 159 ;
+C 186 ; WX 481 ; N quotedblright ; B 61 391 533 737 ;
+C 187 ; WX 481 ; N guillemotright ; B -6 78 456 419 ;
+C 188 ; WX 1000 ; N ellipsis ; B 20 -15 860 159 ;
+C 189 ; WX 1167 ; N perthousand ; B 26 0 1151 722 ;
+C 191 ; WX 481 ; N questiondown ; B 1 -203 368 549 ;
+C 193 ; WX 333 ; N grave ; B 74 535 294 719 ;
+C 194 ; WX 333 ; N acute ; B 123 535 371 719 ;
+C 195 ; WX 333 ; N circumflex ; B 23 535 365 709 ;
+C 196 ; WX 333 ; N tilde ; B 34 557 404 683 ;
+C 197 ; WX 333 ; N macron ; B 32 566 387 642 ;
+C 198 ; WX 333 ; N breve ; B 67 537 390 701 ;
+C 199 ; WX 333 ; N dotaccent ; B 145 542 288 685 ;
+C 200 ; WX 333 ; N dieresis ; B 34 542 392 685 ;
+C 202 ; WX 333 ; N ring ; B 217 530 432 745 ;
+C 203 ; WX 333 ; N cedilla ; B -87 -220 157 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B 23 542 472 709 ;
+C 206 ; WX 333 ; N ogonek ; B 68 -173 245 0 ;
+C 207 ; WX 333 ; N caron ; B 60 535 403 711 ;
+C 208 ; WX 1000 ; N emdash ; B -18 193 1018 298 ;
+C 225 ; WX 889 ; N AE ; B -81 0 903 722 ;
+C 227 ; WX 412 ; N ordfeminine ; B 29 293 449 737 ;
+C 232 ; WX 704 ; N Lslash ; B -41 0 670 722 ;
+C 233 ; WX 833 ; N Oslash ; B 17 -83 797 773 ;
+C 234 ; WX 963 ; N OE ; B 19 0 980 722 ;
+C 235 ; WX 356 ; N ordmasculine ; B 29 293 383 737 ;
+C 241 ; WX 815 ; N ae ; B -19 -15 774 479 ;
+C 245 ; WX 389 ; N dotlessi ; B 38 -15 353 478 ;
+C 248 ; WX 389 ; N lslash ; B 26 -15 397 736 ;
+C 249 ; WX 574 ; N oslash ; B 10 -126 540 578 ;
+C 250 ; WX 852 ; N oe ; B -5 -15 810 479 ;
+C 251 ; WX 574 ; N germandbls ; B -66 -205 523 737 ;
+C -1 ; WX 833 ; N Udieresis ; B 88 -15 895 933 ;
+C -1 ; WX 833 ; N Uacute ; B 88 -15 895 958 ;
+C -1 ; WX 685 ; N Scedilla ; B 1 -222 666 737 ;
+C -1 ; WX 722 ; N Tcaron ; B 44 0 762 950 ;
+C -1 ; WX 685 ; N Scaron ; B 1 -15 666 950 ;
+C -1 ; WX 796 ; N Rcaron ; B -41 -15 751 950 ;
+C -1 ; WX 796 ; N Racute ; B -41 -15 751 958 ;
+C -1 ; WX 685 ; N Sacute ; B 1 -15 666 958 ;
+C -1 ; WX 833 ; N Otilde ; B 36 -15 797 922 ;
+C -1 ; WX 685 ; N ucircumflex ; B 38 -14 639 709 ;
+C -1 ; WX 833 ; N Ohungarumlaut ; B 36 -15 797 958 ;
+C -1 ; WX 833 ; N Uhungarumlaut ; B 88 -15 895 958 ;
+C -1 ; WX 704 ; N Yacute ; B 15 0 777 958 ;
+C -1 ; WX 833 ; N Eth ; B -49 0 796 722 ;
+C -1 ; WX 833 ; N Dcroat ; B -49 0 796 722 ;
+C -1 ; WX 704 ; N Zacute ; B -29 0 715 958 ;
+C -1 ; WX 833 ; N Uring ; B 88 -15 895 998 ;
+C -1 ; WX 611 ; N gbreve ; B -66 -202 602 701 ;
+C -1 ; WX 519 ; N eogonek ; B -2 -173 478 479 ;
+C -1 ; WX 519 ; N edotaccent ; B -2 -14 478 685 ;
+C -1 ; WX 519 ; N ecaron ; B -2 -14 496 711 ;
+C -1 ; WX 833 ; N Ugrave ; B 88 -15 895 958 ;
+C -1 ; WX 741 ; N Thorn ; B -38 0 690 722 ;
+C -1 ; WX 519 ; N eacute ; B -2 -14 478 719 ;
+C -1 ; WX 519 ; N edieresis ; B -2 -14 495 685 ;
+C -1 ; WX 780 ; N dcaron ; B 0 -15 840 736 ;
+C -1 ; WX 537 ; N ccedilla ; B 3 -220 487 479 ;
+C -1 ; WX 537 ; N ccaron ; B 3 -14 515 711 ;
+C -1 ; WX 537 ; N cacute ; B 3 -14 487 719 ;
+C -1 ; WX 667 ; N aogonek ; B 15 -173 646 479 ;
+C -1 ; WX 667 ; N aring ; B 15 -15 646 745 ;
+C -1 ; WX 667 ; N atilde ; B 15 -15 646 683 ;
+C -1 ; WX 667 ; N abreve ; B 15 -15 646 701 ;
+C -1 ; WX 519 ; N egrave ; B -2 -14 478 719 ;
+C -1 ; WX 667 ; N agrave ; B 15 -15 646 719 ;
+C -1 ; WX 667 ; N aacute ; B 15 -15 646 719 ;
+C -1 ; WX 667 ; N adieresis ; B 15 -15 646 685 ;
+C -1 ; WX 833 ; N Uogonek ; B 88 -173 895 722 ;
+C -1 ; WX 685 ; N ugrave ; B 38 -14 639 719 ;
+C -1 ; WX 685 ; N uacute ; B 38 -14 639 719 ;
+C -1 ; WX 685 ; N udieresis ; B 38 -14 639 685 ;
+C -1 ; WX 483 ; N tcaron ; B 24 -14 543 722 ;
+C -1 ; WX 481 ; N scommaaccent ; B 0 -371 437 479 ;
+C -1 ; WX 704 ; N Zcaron ; B -29 0 715 950 ;
+C -1 ; WX 519 ; N ecircumflex ; B -2 -14 478 709 ;
+C -1 ; WX 833 ; N Ucircumflex ; B 88 -15 895 950 ;
+C -1 ; WX 667 ; N acircumflex ; B 15 -15 646 709 ;
+C -1 ; WX 704 ; N Zdotaccent ; B -29 0 715 933 ;
+C -1 ; WX 481 ; N scaron ; B 2 -15 477 711 ;
+C -1 ; WX 741 ; N Amacron ; B -75 0 716 894 ;
+C -1 ; WX 481 ; N sacute ; B 2 -15 445 719 ;
+C -1 ; WX 722 ; N Tcommaaccent ; B 44 -371 762 722 ;
+C -1 ; WX 704 ; N Ydieresis ; B 15 0 777 933 ;
+C -1 ; WX 648 ; N thorn ; B -118 -202 590 737 ;
+C -1 ; WX 741 ; N Emacron ; B -41 0 728 894 ;
+C -1 ; WX 833 ; N Ograve ; B 36 -15 797 958 ;
+C -1 ; WX 833 ; N Oacute ; B 36 -15 797 958 ;
+C -1 ; WX 833 ; N Odieresis ; B 36 -15 797 933 ;
+C -1 ; WX 852 ; N Ntilde ; B -57 -14 912 922 ;
+C -1 ; WX 852 ; N Ncaron ; B -57 -14 912 950 ;
+C -1 ; WX 852 ; N Nacute ; B -57 -14 912 958 ;
+C -1 ; WX 704 ; N Lcaron ; B -41 0 784 722 ;
+C -1 ; WX 704 ; N Lacute ; B -41 0 670 958 ;
+C -1 ; WX 444 ; N Idotaccent ; B -41 0 486 933 ;
+C -1 ; WX 519 ; N racute ; B 3 0 524 719 ;
+C -1 ; WX 444 ; N Icircumflex ; B -41 0 486 950 ;
+C -1 ; WX 574 ; N ohungarumlaut ; B 10 -14 593 709 ;
+C -1 ; WX 574 ; N otilde ; B 10 -14 540 683 ;
+C -1 ; WX 574 ; N Euro ; B -37 -15 640 717 ;
+C -1 ; WX 574 ; N ocircumflex ; B 10 -14 540 709 ;
+C -1 ; WX 344 ; N onesuperior ; B 21 282 323 706 ;
+C -1 ; WX 344 ; N twosuperior ; B -16 282 360 705 ;
+C -1 ; WX 344 ; N threesuperior ; B -4 274 348 705 ;
+C -1 ; WX 444 ; N Igrave ; B -41 0 486 958 ;
+C -1 ; WX 444 ; N Iacute ; B -41 0 486 958 ;
+C -1 ; WX 444 ; N Imacron ; B -41 0 504 894 ;
+C -1 ; WX 444 ; N Iogonek ; B -41 -173 486 722 ;
+C -1 ; WX 444 ; N Idieresis ; B -41 0 498 933 ;
+C -1 ; WX 815 ; N Gbreve ; B 34 -15 802 941 ;
+C -1 ; WX 833 ; N Umacron ; B 88 -15 895 894 ;
+C -1 ; WX 778 ; N Kcommaaccent ; B -41 -371 832 722 ;
+C -1 ; WX 574 ; N ograve ; B 10 -14 540 719 ;
+C -1 ; WX 685 ; N Scommaaccent ; B 1 -371 666 737 ;
+C -1 ; WX 741 ; N Eogonek ; B -41 -173 728 722 ;
+C -1 ; WX 574 ; N oacute ; B 10 -14 540 719 ;
+C -1 ; WX 741 ; N Edotaccent ; B -41 0 728 933 ;
+C -1 ; WX 389 ; N iogonek ; B 28 -173 343 737 ;
+C -1 ; WX 611 ; N gcommaaccent ; B -66 -202 602 842 ;
+C -1 ; WX 574 ; N odieresis ; B 10 -14 540 685 ;
+C -1 ; WX 685 ; N ntilde ; B 3 -15 642 683 ;
+C -1 ; WX 685 ; N ncaron ; B 3 -15 642 711 ;
+C -1 ; WX 741 ; N Ecaron ; B -41 0 728 950 ;
+C -1 ; WX 741 ; N Ecircumflex ; B -41 0 728 950 ;
+C -1 ; WX 481 ; N scedilla ; B 2 -220 437 479 ;
+C -1 ; WX 519 ; N rcaron ; B 3 0 524 711 ;
+C -1 ; WX 741 ; N Egrave ; B -41 0 728 958 ;
+C -1 ; WX 741 ; N Eacute ; B -41 0 728 958 ;
+C -1 ; WX 815 ; N Gcommaaccent ; B 34 -371 802 737 ;
+C -1 ; WX 796 ; N Rcommaaccent ; B -41 -371 751 722 ;
+C -1 ; WX 741 ; N Edieresis ; B -41 0 728 933 ;
+C -1 ; WX 685 ; N nacute ; B 3 -15 642 719 ;
+C -1 ; WX 685 ; N uogonek ; B 38 -173 639 478 ;
+C -1 ; WX 685 ; N umacron ; B 38 -14 639 642 ;
+C -1 ; WX 833 ; N Dcaron ; B -49 0 796 950 ;
+C -1 ; WX 486 ; N lcaron ; B 26 -15 546 736 ;
+C -1 ; WX 759 ; N Ccaron ; B 35 -15 759 950 ;
+C -1 ; WX 759 ; N Cacute ; B 35 -15 759 958 ;
+C -1 ; WX 759 ; N Ccedilla ; B 35 -222 759 737 ;
+C -1 ; WX 400 ; N degree ; B 70 380 370 686 ;
+C -1 ; WX 741 ; N Aogonek ; B -75 -173 775 736 ;
+C -1 ; WX 606 ; N minus ; B 41 195 545 310 ;
+C -1 ; WX 606 ; N multiply ; B 41 0 547 506 ;
+C -1 ; WX 606 ; N divide ; B 41 -31 545 536 ;
+C -1 ; WX 741 ; N Aring ; B -75 0 716 998 ;
+C -1 ; WX 950 ; N trademark ; B 42 302 982 722 ;
+C -1 ; WX 519 ; N rcommaaccent ; B -80 -371 524 479 ;
+C -1 ; WX 389 ; N lacute ; B 26 -15 399 958 ;
+C -1 ; WX 574 ; N omacron ; B 10 -14 540 642 ;
+C -1 ; WX 741 ; N Atilde ; B -75 0 716 922 ;
+C -1 ; WX 389 ; N icircumflex ; B 38 -15 383 709 ;
+C -1 ; WX 389 ; N igrave ; B 38 -15 353 719 ;
+C -1 ; WX 685 ; N ncommaaccent ; B 3 -371 642 479 ;
+C -1 ; WX 389 ; N lcommaaccent ; B -71 -371 370 736 ;
+C -1 ; WX 606 ; N plusminus ; B 41 0 545 610 ;
+C -1 ; WX 861 ; N onehalf ; B 21 0 857 722 ;
+C -1 ; WX 861 ; N onequarter ; B 21 0 826 722 ;
+C -1 ; WX 861 ; N threequarters ; B -4 0 826 722 ;
+C -1 ; WX 389 ; N iacute ; B 38 -15 399 719 ;
+C -1 ; WX 741 ; N Abreve ; B -75 0 716 941 ;
+C -1 ; WX 648 ; N kcommaaccent ; B -5 -371 584 736 ;
+C -1 ; WX 833 ; N Omacron ; B 36 -15 797 894 ;
+C -1 ; WX 389 ; N imacron ; B 38 -15 415 642 ;
+C -1 ; WX 519 ; N emacron ; B -2 -14 480 642 ;
+C -1 ; WX 667 ; N amacron ; B 15 -15 646 642 ;
+C -1 ; WX 407 ; N tcommaaccent ; B -62 -371 404 650 ;
+C -1 ; WX 519 ; N ydieresis ; B -66 -202 492 685 ;
+C -1 ; WX 519 ; N zdotaccent ; B -19 -15 471 685 ;
+C -1 ; WX 519 ; N zcaron ; B -19 -15 496 711 ;
+C -1 ; WX 519 ; N zacute ; B -19 -15 471 719 ;
+C -1 ; WX 519 ; N yacute ; B -66 -202 492 719 ;
+C -1 ; WX 685 ; N uhungarumlaut ; B 38 -14 648 709 ;
+C -1 ; WX 574 ; N eth ; B 10 -14 540 788 ;
+C -1 ; WX 685 ; N uring ; B 38 -14 639 745 ;
+C -1 ; WX 833 ; N Ocircumflex ; B 36 -15 797 950 ;
+C -1 ; WX 333 ; N commaaccent ; B -99 -371 109 -60 ;
+C -1 ; WX 747 ; N copyright ; B 23 -15 723 685 ;
+C -1 ; WX 747 ; N registered ; B 23 -15 723 685 ;
+C -1 ; WX 741 ; N Acircumflex ; B -75 0 716 950 ;
+C -1 ; WX 389 ; N idieresis ; B 38 -15 410 685 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 606 ; N notequal ; B 41 -51 545 557 ;
+C -1 ; WX 549 ; N radical ; B -34 -35 548 918 ;
+C -1 ; WX 741 ; N Agrave ; B -75 0 716 958 ;
+C -1 ; WX 741 ; N Aacute ; B -75 0 716 958 ;
+C -1 ; WX 606 ; N lessequal ; B 14 0 523 698 ;
+C -1 ; WX 606 ; N greaterequal ; B 38 0 547 698 ;
+C -1 ; WX 606 ; N logicalnot ; B 41 19 545 310 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 13 -11 476 753 ;
+C -1 ; WX 852 ; N Ncommaaccent ; B -57 -371 912 722 ;
+C -1 ; WX 667 ; N dcroat ; B 0 -15 695 736 ;
+C -1 ; WX 606 ; N brokenbar ; B 262 0 343 722 ;
+C -1 ; WX 704 ; N Lcommaaccent ; B -41 -371 670 722 ;
+C -1 ; WX 741 ; N Adieresis ; B -75 0 716 933 ;
+C -1 ; WX 685 ; N mu ; B -90 -219 639 478 ;
+C -1 ; WX 287 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -35
+KPX A Ccedilla -37
+KPX A G -32
+KPX A O -35
+KPX A Odieresis -35
+KPX A Q -34
+KPX A T -12
+KPX A U -46
+KPX A Uacute -46
+KPX A Ucircumflex -46
+KPX A Udieresis -46
+KPX A Ugrave -46
+KPX A V -87
+KPX A W -71
+KPX A Y -13
+KPX A a -9
+KPX A b -10
+KPX A c 0
+KPX A ccedilla -2
+KPX A comma 37
+KPX A d -1
+KPX A e 3
+KPX A g 14
+KPX A guillemotleft -10
+KPX A guilsinglleft -10
+KPX A hyphen -5
+KPX A o -7
+KPX A period 32
+KPX A q 5
+KPX A quotedblright -61
+KPX A quoteright -66
+KPX A t 4
+KPX A u -4
+KPX A v -20
+KPX A w 3
+KPX A y -48
+KPX Aacute C -35
+KPX Aacute G -32
+KPX Aacute O -35
+KPX Aacute Q -34
+KPX Aacute T -12
+KPX Aacute U -46
+KPX Aacute V -87
+KPX Aacute W -71
+KPX Aacute Y -13
+KPX Aacute a -9
+KPX Aacute b -10
+KPX Aacute c 0
+KPX Aacute comma 37
+KPX Aacute d -1
+KPX Aacute e 3
+KPX Aacute g 14
+KPX Aacute guillemotleft -10
+KPX Aacute guilsinglleft -10
+KPX Aacute hyphen -5
+KPX Aacute o -7
+KPX Aacute period 32
+KPX Aacute q 5
+KPX Aacute quoteright -66
+KPX Aacute t 4
+KPX Aacute u -4
+KPX Aacute v -20
+KPX Aacute w 3
+KPX Aacute y -48
+KPX Acircumflex C -35
+KPX Acircumflex G -32
+KPX Acircumflex O -35
+KPX Acircumflex Q -34
+KPX Acircumflex T -12
+KPX Acircumflex U -46
+KPX Acircumflex V -87
+KPX Acircumflex W -71
+KPX Acircumflex Y -13
+KPX Acircumflex comma 37
+KPX Acircumflex period 32
+KPX Adieresis C -35
+KPX Adieresis G -32
+KPX Adieresis O -35
+KPX Adieresis Q -34
+KPX Adieresis T -12
+KPX Adieresis U -46
+KPX Adieresis V -87
+KPX Adieresis W -71
+KPX Adieresis Y -13
+KPX Adieresis a -9
+KPX Adieresis b -10
+KPX Adieresis c 0
+KPX Adieresis comma 37
+KPX Adieresis d -1
+KPX Adieresis g 14
+KPX Adieresis guillemotleft -10
+KPX Adieresis guilsinglleft -10
+KPX Adieresis hyphen -5
+KPX Adieresis o -7
+KPX Adieresis period 32
+KPX Adieresis q 5
+KPX Adieresis quotedblright -61
+KPX Adieresis quoteright -66
+KPX Adieresis t 4
+KPX Adieresis u -4
+KPX Adieresis v -20
+KPX Adieresis w 3
+KPX Adieresis y -48
+KPX Agrave C -35
+KPX Agrave G -32
+KPX Agrave O -35
+KPX Agrave Q -34
+KPX Agrave T -12
+KPX Agrave U -46
+KPX Agrave V -87
+KPX Agrave W -71
+KPX Agrave Y -13
+KPX Agrave comma 37
+KPX Agrave period 32
+KPX Aring C -35
+KPX Aring G -32
+KPX Aring O -35
+KPX Aring Q -34
+KPX Aring T -12
+KPX Aring U -46
+KPX Aring V -87
+KPX Aring W -71
+KPX Aring Y -13
+KPX Aring a -9
+KPX Aring b -10
+KPX Aring c 0
+KPX Aring comma 37
+KPX Aring d -1
+KPX Aring e 3
+KPX Aring g 14
+KPX Aring guillemotleft -10
+KPX Aring guilsinglleft -10
+KPX Aring hyphen -5
+KPX Aring o -7
+KPX Aring period 32
+KPX Aring q 5
+KPX Aring quotedblright -61
+KPX Aring quoteright -66
+KPX Aring t 4
+KPX Aring u -4
+KPX Aring v -20
+KPX Aring w 3
+KPX Aring y -48
+KPX Atilde C -35
+KPX Atilde G -32
+KPX Atilde O -35
+KPX Atilde Q -34
+KPX Atilde T -12
+KPX Atilde U -46
+KPX Atilde V -87
+KPX Atilde W -71
+KPX Atilde Y -13
+KPX Atilde comma 37
+KPX Atilde period 32
+KPX B A 1
+KPX B AE 4
+KPX B Aacute 1
+KPX B Acircumflex 1
+KPX B Adieresis 1
+KPX B Aring 1
+KPX B Atilde 1
+KPX B O -6
+KPX B OE 0
+KPX B Oacute -6
+KPX B Ocircumflex -6
+KPX B Odieresis -6
+KPX B Ograve -6
+KPX B Oslash -5
+KPX B V -19
+KPX B W -23
+KPX B Y -8
+KPX C A -17
+KPX C AE -14
+KPX C Aacute -17
+KPX C Adieresis -17
+KPX C Aring -17
+KPX C H -15
+KPX C K -15
+KPX C O -7
+KPX C Oacute -7
+KPX C Odieresis -7
+KPX Ccedilla A -21
+KPX D A -44
+KPX D Aacute -44
+KPX D Acircumflex -44
+KPX D Adieresis -44
+KPX D Agrave -44
+KPX D Aring -44
+KPX D Atilde -44
+KPX D J -1
+KPX D T -5
+KPX D V -39
+KPX D W -32
+KPX D X -43
+KPX D Y -27
+KPX F A -79
+KPX F Aacute -79
+KPX F Acircumflex -79
+KPX F Adieresis -79
+KPX F Agrave -79
+KPX F Aring -79
+KPX F Atilde -79
+KPX F J -61
+KPX F O -7
+KPX F Odieresis -7
+KPX F a -66
+KPX F aacute -66
+KPX F adieresis -66
+KPX F ae -41
+KPX F aring -66
+KPX F comma -67
+KPX F e -60
+KPX F eacute -61
+KPX F hyphen -38
+KPX F i 3
+KPX F j -21
+KPX F o -65
+KPX F oacute -66
+KPX F odieresis -52
+KPX F oe -56
+KPX F oslash -69
+KPX F period -80
+KPX F r -2
+KPX F u -7
+KPX G A -14
+KPX G AE -11
+KPX G Aacute -14
+KPX G Acircumflex -14
+KPX G Adieresis -14
+KPX G Agrave -14
+KPX G Aring -14
+KPX G Atilde -14
+KPX G T -27
+KPX G V -3
+KPX G W -7
+KPX G Y 5
+KPX J A -48
+KPX J AE -43
+KPX J Adieresis -48
+KPX J Aring -48
+KPX K C -33
+KPX K G -30
+KPX K O -33
+KPX K OE -22
+KPX K Oacute -33
+KPX K Odieresis -33
+KPX K S 22
+KPX K T 9
+KPX K a -7
+KPX K adieresis -7
+KPX K ae 25
+KPX K aring -7
+KPX K e 5
+KPX K hyphen -24
+KPX K o -5
+KPX K oacute -5
+KPX K odieresis -5
+KPX K u -2
+KPX K udieresis -2
+KPX K y -69
+KPX L A 27
+KPX L AE 30
+KPX L Aacute 27
+KPX L Adieresis 27
+KPX L Aring 27
+KPX L C 0
+KPX L Ccedilla 0
+KPX L G 1
+KPX L O 0
+KPX L Oacute 0
+KPX L Ocircumflex 0
+KPX L Odieresis 0
+KPX L Ograve 0
+KPX L Otilde 0
+KPX L S -3
+KPX L T -43
+KPX L U -27
+KPX L Udieresis -27
+KPX L V -67
+KPX L W -50
+KPX L Y -43
+KPX L hyphen 44
+KPX L quotedblright -36
+KPX L quoteright -39
+KPX L u 2
+KPX L udieresis 0
+KPX L y 11
+KPX N A -33
+KPX N AE -30
+KPX N Aacute -33
+KPX N Adieresis -33
+KPX N Aring -33
+KPX N C -20
+KPX N Ccedilla -20
+KPX N G -20
+KPX N O -21
+KPX N Oacute -21
+KPX N Odieresis -21
+KPX N a -38
+KPX N aacute -38
+KPX N adieresis -38
+KPX N ae -32
+KPX N aring -38
+KPX N comma -11
+KPX N e -30
+KPX N eacute -32
+KPX N o -36
+KPX N oacute -37
+KPX N odieresis -35
+KPX N oslash -40
+KPX N period -24
+KPX N u -38
+KPX N udieresis -39
+KPX O A -49
+KPX O AE -32
+KPX O Aacute -49
+KPX O Adieresis -49
+KPX O Aring -49
+KPX O T -4
+KPX O V -38
+KPX O W -35
+KPX O X -45
+KPX O Y -26
+KPX Oacute A -49
+KPX Oacute T -4
+KPX Oacute V -38
+KPX Oacute W -35
+KPX Oacute Y -26
+KPX Ocircumflex T -4
+KPX Ocircumflex V -38
+KPX Ocircumflex Y -26
+KPX Odieresis A -49
+KPX Odieresis T -4
+KPX Odieresis V -38
+KPX Odieresis W -35
+KPX Odieresis X -45
+KPX Odieresis Y -26
+KPX Ograve T -4
+KPX Ograve V -38
+KPX Ograve Y -26
+KPX Oslash A -49
+KPX Otilde T -4
+KPX Otilde V -38
+KPX Otilde Y -26
+KPX P A -89
+KPX P AE -65
+KPX P Aacute -89
+KPX P Adieresis -89
+KPX P Aring -89
+KPX P J -60
+KPX P a -50
+KPX P aacute -50
+KPX P adieresis -50
+KPX P ae -30
+KPX P aring -50
+KPX P comma -96
+KPX P e -48
+KPX P eacute -48
+KPX P hyphen -45
+KPX P o -51
+KPX P oacute -51
+KPX P odieresis -51
+KPX P oe -38
+KPX P oslash -56
+KPX P period -109
+KPX R C -8
+KPX R Ccedilla -8
+KPX R G -8
+KPX R O -9
+KPX R OE -2
+KPX R Oacute -9
+KPX R Odieresis -9
+KPX R T -19
+KPX R U -25
+KPX R Udieresis -25
+KPX R V -18
+KPX R W -22
+KPX R Y -7
+KPX R a -6
+KPX R aacute -6
+KPX R adieresis -6
+KPX R ae 7
+KPX R aring -6
+KPX R e 2
+KPX R eacute 2
+KPX R hyphen 19
+KPX R o -4
+KPX R oacute -4
+KPX R odieresis -4
+KPX R oe 2
+KPX R u -11
+KPX R uacute -12
+KPX R udieresis -12
+KPX R y -32
+KPX S A -2
+KPX S AE 0
+KPX S Aacute -2
+KPX S Adieresis -2
+KPX S Aring -2
+KPX S T -17
+KPX S V 7
+KPX S W 3
+KPX S Y 16
+KPX S t -6
+KPX T A -55
+KPX T AE -50
+KPX T Aacute -55
+KPX T Acircumflex -55
+KPX T Adieresis -55
+KPX T Agrave -55
+KPX T Aring -55
+KPX T Atilde -55
+KPX T C 6
+KPX T G 5
+KPX T J -58
+KPX T O 5
+KPX T OE 10
+KPX T Oacute 5
+KPX T Ocircumflex 5
+KPX T Odieresis 5
+KPX T Ograve 5
+KPX T Oslash 5
+KPX T Otilde 5
+KPX T S -9
+KPX T V 37
+KPX T W 33
+KPX T Y 45
+KPX T a -45
+KPX T ae -18
+KPX T c -56
+KPX T colon -9
+KPX T comma -73
+KPX T e -48
+KPX T g -40
+KPX T guillemotleft -90
+KPX T guilsinglleft -90
+KPX T hyphen -86
+KPX T i 13
+KPX T j -12
+KPX T o -51
+KPX T oslash -59
+KPX T period -86
+KPX T r 12
+KPX T s -21
+KPX T semicolon -12
+KPX T u 6
+KPX T v 11
+KPX T w 16
+KPX T y -3
+KPX U A -51
+KPX U AE -40
+KPX U Aacute -51
+KPX U Acircumflex -51
+KPX U Adieresis -51
+KPX U Aring -51
+KPX U Atilde -51
+KPX U comma -23
+KPX U m -39
+KPX U n -35
+KPX U p -37
+KPX U period -36
+KPX U r -36
+KPX Uacute A -51
+KPX Uacute comma -23
+KPX Uacute m -39
+KPX Uacute n -35
+KPX Uacute p -37
+KPX Uacute period -36
+KPX Uacute r -36
+KPX Ucircumflex A -51
+KPX Udieresis A -51
+KPX Udieresis b 18
+KPX Udieresis comma -23
+KPX Udieresis m -39
+KPX Udieresis n -35
+KPX Udieresis p -37
+KPX Udieresis period -36
+KPX Udieresis r -36
+KPX Ugrave A -51
+KPX V A -101
+KPX V AE -40
+KPX V Aacute -101
+KPX V Acircumflex -101
+KPX V Adieresis -101
+KPX V Agrave -101
+KPX V Aring -101
+KPX V Atilde -101
+KPX V C -45
+KPX V G -49
+KPX V O -50
+KPX V Oacute -50
+KPX V Ocircumflex -50
+KPX V Odieresis -50
+KPX V Ograve -50
+KPX V Oslash -48
+KPX V Otilde -50
+KPX V S -19
+KPX V T 12
+KPX V a -91
+KPX V ae -85
+KPX V colon -81
+KPX V comma -86
+KPX V e -84
+KPX V g -94
+KPX V guillemotleft -64
+KPX V guilsinglleft -64
+KPX V hyphen -60
+KPX V i -25
+KPX V o -90
+KPX V oslash -94
+KPX V period -99
+KPX V r -55
+KPX V semicolon -80
+KPX V u -61
+KPX V y -74
+KPX W A -74
+KPX W AE -45
+KPX W Aacute -74
+KPX W Acircumflex -74
+KPX W Adieresis -74
+KPX W Agrave -74
+KPX W Aring -74
+KPX W Atilde -74
+KPX W C -38
+KPX W G -38
+KPX W O -39
+KPX W Oacute -39
+KPX W Ocircumflex -39
+KPX W Odieresis -39
+KPX W Ograve -39
+KPX W Oslash -37
+KPX W Otilde -39
+KPX W S -24
+KPX W T 7
+KPX W a -64
+KPX W ae -58
+KPX W colon -53
+KPX W comma -48
+KPX W e -57
+KPX W g -66
+KPX W guillemotleft -37
+KPX W guilsinglleft -37
+KPX W hyphen -33
+KPX W i -30
+KPX W o -62
+KPX W oslash -66
+KPX W period -61
+KPX W r -45
+KPX W semicolon -52
+KPX W u -51
+KPX W y -58
+KPX X C -35
+KPX X O -37
+KPX X Odieresis -37
+KPX X Q -35
+KPX X a -14
+KPX X e -2
+KPX X hyphen -35
+KPX X o -12
+KPX X u -9
+KPX X y -75
+KPX Y A -49
+KPX Y AE -33
+KPX Y Aacute -49
+KPX Y Acircumflex -49
+KPX Y Adieresis -49
+KPX Y Agrave -49
+KPX Y Aring -49
+KPX Y Atilde -49
+KPX Y C -33
+KPX Y G -37
+KPX Y O -38
+KPX Y Oacute -38
+KPX Y Ocircumflex -38
+KPX Y Odieresis -38
+KPX Y Ograve -38
+KPX Y Oslash -36
+KPX Y Otilde -38
+KPX Y S -8
+KPX Y T 20
+KPX Y a -95
+KPX Y ae -83
+KPX Y colon -82
+KPX Y comma -67
+KPX Y e -88
+KPX Y g -92
+KPX Y guillemotleft -80
+KPX Y guilsinglleft -80
+KPX Y hyphen -78
+KPX Y i -18
+KPX Y o -93
+KPX Y oslash -97
+KPX Y p -70
+KPX Y period -80
+KPX Y semicolon -80
+KPX Y u -75
+KPX Y v -68
+KPX Z v -16
+KPX Z y 2
+KPX a j -36
+KPX a quoteright -15
+KPX a v -16
+KPX a w 0
+KPX a y -18
+KPX aacute v -16
+KPX aacute w 0
+KPX aacute y -18
+KPX adieresis v -16
+KPX adieresis w 0
+KPX adieresis y -18
+KPX ae v -23
+KPX ae w -13
+KPX ae y -4
+KPX agrave v -16
+KPX agrave w 0
+KPX agrave y -18
+KPX aring v -16
+KPX aring w 0
+KPX aring y -18
+KPX b v -28
+KPX b w -13
+KPX b y -3
+KPX c h -26
+KPX c k -23
+KPX comma one -25
+KPX comma quotedblright 7
+KPX comma quoteright 1
+KPX e quoteright 8
+KPX e t -15
+KPX e v -27
+KPX e w -12
+KPX e x 0
+KPX e y -2
+KPX eacute v -27
+KPX eacute w -13
+KPX eacute y -2
+KPX ecircumflex v -27
+KPX ecircumflex w -13
+KPX ecircumflex y -2
+KPX eight four 7
+KPX eight one -46
+KPX eight seven -19
+KPX f a -25
+KPX f aacute -25
+KPX f adieresis 0
+KPX f ae -6
+KPX f aring -25
+KPX f e -25
+KPX f eacute -25
+KPX f f 15
+KPX f i 21
+KPX f j -3
+KPX f l 50
+KPX f o -27
+KPX f oacute -27
+KPX f odieresis 16
+KPX f oe -14
+KPX f oslash -33
+KPX f quoteright 58
+KPX f s -6
+KPX f t 17
+KPX five four 8
+KPX five one -56
+KPX five seven -30
+KPX four four 22
+KPX four one -28
+KPX four seven -21
+KPX g a -37
+KPX g adieresis -37
+KPX g ae -26
+KPX g aring -37
+KPX g e -30
+KPX g eacute -30
+KPX g l -41
+KPX g oacute -34
+KPX g odieresis -34
+KPX g r 1
+KPX guillemotright A -23
+KPX guillemotright AE -1
+KPX guillemotright Aacute -23
+KPX guillemotright Adieresis -23
+KPX guillemotright Aring -23
+KPX guillemotright T -77
+KPX guillemotright V -64
+KPX guillemotright W -43
+KPX guillemotright Y -68
+KPX guilsinglright A -23
+KPX guilsinglright AE -1
+KPX guilsinglright Aacute -23
+KPX guilsinglright Adieresis -23
+KPX guilsinglright Aring -23
+KPX guilsinglright T -77
+KPX guilsinglright V -64
+KPX guilsinglright W -43
+KPX guilsinglright Y -68
+KPX h quoteright -33
+KPX h y -33
+KPX hyphen A -14
+KPX hyphen AE 8
+KPX hyphen Aacute -14
+KPX hyphen Adieresis -14
+KPX hyphen Aring -14
+KPX hyphen T -68
+KPX hyphen V -56
+KPX hyphen W -35
+KPX hyphen Y -63
+KPX i T -40
+KPX i j -46
+KPX k a -15
+KPX k aacute -15
+KPX k adieresis -15
+KPX k ae -4
+KPX k aring -15
+KPX k comma 20
+KPX k e -7
+KPX k eacute -9
+KPX k g -15
+KPX k hyphen 8
+KPX k o -13
+KPX k oacute -15
+KPX k odieresis -15
+KPX k period 8
+KPX k s -12
+KPX k u -16
+KPX k udieresis -18
+KPX l v -30
+KPX l y -34
+KPX m p -12
+KPX m v -19
+KPX m w -2
+KPX m y -21
+KPX n T -59
+KPX n p -21
+KPX n quoteright -30
+KPX n v -29
+KPX n w -13
+KPX n y -31
+KPX nine four 0
+KPX nine one -54
+KPX nine seven -12
+KPX o T -53
+KPX o quoteright 0
+KPX o t -5
+KPX o v -16
+KPX o w -1
+KPX o x 1
+KPX o y 7
+KPX oacute v -18
+KPX oacute w -2
+KPX oacute y 7
+KPX ocircumflex t -7
+KPX odieresis t -7
+KPX odieresis v -18
+KPX odieresis w -2
+KPX odieresis x 0
+KPX odieresis y 7
+KPX ograve v -18
+KPX ograve w -2
+KPX ograve y 7
+KPX one comma -12
+KPX one eight -36
+KPX one five -35
+KPX one four -54
+KPX one nine -30
+KPX one one -39
+KPX one period -23
+KPX one seven -61
+KPX one six -40
+KPX one three -34
+KPX one two -5
+KPX one zero -34
+KPX p t -15
+KPX p y -4
+KPX period one -27
+KPX period quotedblright 8
+KPX period quoteright 3
+KPX q c -19
+KPX q u -22
+KPX quotedblbase A 46
+KPX quotedblbase AE 61
+KPX quotedblbase T -29
+KPX quotedblbase V -66
+KPX quotedblbase W -41
+KPX quotedblbase Y -28
+KPX quotedblleft A -57
+KPX quotedblleft AE -27
+KPX quotedblleft Aacute -57
+KPX quotedblleft Adieresis -57
+KPX quotedblleft Aring -57
+KPX quotedblleft T 34
+KPX quotedblleft V 36
+KPX quotedblleft W 35
+KPX quotedblleft Y 45
+KPX quotedblright A -53
+KPX quotedblright AE -22
+KPX quotedblright Aacute -53
+KPX quotedblright Adieresis -53
+KPX quotedblright Aring -53
+KPX quotedblright T 41
+KPX quotedblright V 48
+KPX quotedblright W 46
+KPX quotedblright Y 56
+KPX quoteleft A -72
+KPX quoteleft AE -42
+KPX quoteleft Aacute -72
+KPX quoteleft Adieresis -72
+KPX quoteleft Aring -72
+KPX quoteleft T 20
+KPX quoteleft V 22
+KPX quoteleft W 21
+KPX quoteleft Y 31
+KPX quoteright A -54
+KPX quoteright AE -24
+KPX quoteright Aacute -54
+KPX quoteright Adieresis -54
+KPX quoteright Aring -54
+KPX quoteright comma -2
+KPX quoteright d -5
+KPX quoteright o -8
+KPX quoteright period -15
+KPX quoteright r 12
+KPX quoteright s 9
+KPX quoteright t 16
+KPX quoteright v 10
+KPX quoteright w 21
+KPX quoteright y 30
+KPX r a -10
+KPX r aacute -10
+KPX r acircumflex -10
+KPX r adieresis -10
+KPX r ae -9
+KPX r agrave -10
+KPX r aring -10
+KPX r c -8
+KPX r ccedilla -4
+KPX r colon -10
+KPX r comma -92
+KPX r d -4
+KPX r e -5
+KPX r eacute -5
+KPX r ecircumflex -5
+KPX r egrave -5
+KPX r f 6
+KPX r g -15
+KPX r h -28
+KPX r hyphen -2
+KPX r i 7
+KPX r j -15
+KPX r k -26
+KPX r l -26
+KPX r m 5
+KPX r n 7
+KPX r o -8
+KPX r oacute -8
+KPX r ocircumflex -8
+KPX r odieresis -8
+KPX r oe 2
+KPX r ograve -8
+KPX r oslash -10
+KPX r p 8
+KPX r period -105
+KPX r q -8
+KPX r quoteright 32
+KPX r r 8
+KPX r s -6
+KPX r semicolon -10
+KPX r t 10
+KPX r u 4
+KPX r v 5
+KPX r w 10
+KPX r x 4
+KPX r y 14
+KPX r z 7
+KPX s quoteright 5
+KPX s t -11
+KPX seven colon -43
+KPX seven comma -33
+KPX seven eight -24
+KPX seven five -27
+KPX seven four -59
+KPX seven one -49
+KPX seven period -46
+KPX seven seven -29
+KPX seven six -27
+KPX seven three -25
+KPX seven two -21
+KPX six four 14
+KPX six one -44
+KPX six seven -16
+KPX t S -9
+KPX t a -21
+KPX t aacute -21
+KPX t adieresis -21
+KPX t ae -10
+KPX t aring -21
+KPX t colon -17
+KPX t e -12
+KPX t eacute -12
+KPX t h -26
+KPX t o -19
+KPX t oacute -19
+KPX t odieresis -19
+KPX t quoteright -2
+KPX t semicolon -16
+KPX three four 0
+KPX three one -56
+KPX three seven -27
+KPX two four 4
+KPX two one -47
+KPX two seven -20
+KPX u quoteright -21
+KPX v a -20
+KPX v aacute -20
+KPX v acircumflex -20
+KPX v adieresis -20
+KPX v ae -18
+KPX v agrave -20
+KPX v aring -20
+KPX v atilde -20
+KPX v c -15
+KPX v colon -18
+KPX v comma -9
+KPX v e -12
+KPX v eacute -14
+KPX v ecircumflex -14
+KPX v egrave -14
+KPX v g -26
+KPX v hyphen 11
+KPX v l -25
+KPX v o -17
+KPX v oacute -19
+KPX v odieresis -19
+KPX v ograve -19
+KPX v oslash -21
+KPX v period -22
+KPX v s -18
+KPX v semicolon -16
+KPX w a -14
+KPX w aacute -14
+KPX w acircumflex -14
+KPX w adieresis -14
+KPX w ae -12
+KPX w agrave -14
+KPX w aring -14
+KPX w atilde -14
+KPX w c -9
+KPX w colon -13
+KPX w comma -4
+KPX w e -7
+KPX w eacute -9
+KPX w ecircumflex -9
+KPX w egrave -9
+KPX w g -21
+KPX w hyphen 16
+KPX w l -20
+KPX w o -12
+KPX w oacute -14
+KPX w odieresis -14
+KPX w ograve -14
+KPX w oslash -16
+KPX w period -17
+KPX w s -13
+KPX w semicolon -11
+KPX x a -11
+KPX x c -7
+KPX x e -4
+KPX x eacute -5
+KPX x o -9
+KPX x q -3
+KPX y a -15
+KPX y aacute -15
+KPX y acircumflex -15
+KPX y adieresis -15
+KPX y ae -12
+KPX y agrave -15
+KPX y aring -15
+KPX y atilde -15
+KPX y c -12
+KPX y colon -13
+KPX y comma -9
+KPX y e -9
+KPX y eacute -9
+KPX y ecircumflex -9
+KPX y egrave -9
+KPX y g -20
+KPX y hyphen 12
+KPX y l -20
+KPX y o -14
+KPX y oacute -14
+KPX y odieresis -14
+KPX y ograve -14
+KPX y oslash -16
+KPX y period -22
+KPX y s -13
+KPX y semicolon -11
+KPX zero four 10
+KPX zero one -46
+KPX zero seven -7
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/c059036l.pfb b/Master/xemtex/gsfonts/c059036l.pfb
new file mode 100644
index 00000000000..ccad07b80ab
--- /dev/null
+++ b/Master/xemtex/gsfonts/c059036l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/c059036l.pfm b/Master/xemtex/gsfonts/c059036l.pfm
new file mode 100644
index 00000000000..6a38f686de9
--- /dev/null
+++ b/Master/xemtex/gsfonts/c059036l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/d050000l.afm b/Master/xemtex/gsfonts/d050000l.afm
new file mode 100644
index 00000000000..f948a0e7171
--- /dev/null
+++ b/Master/xemtex/gsfonts/d050000l.afm
@@ -0,0 +1,226 @@
+StartFontMetrics 3.0
+Comment Copyright URW Software, Copyright 1997 by URW
+Comment Creation Date: 10/19/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName Dingbats
+FullName Dingbats
+FamilyName Dingbats
+Weight Regular
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -72
+UnderlineThickness 36
+Version 001.005
+Notice URW Software, Copyright 1997 by URW
+EncodingScheme FontSpecific
+FontBBox -1 -143 981 819
+CapHeight 691
+XHeight 567
+Descender -143
+Ascender 691
+StartCharMetrics 203
+C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 974 ; N a1 ; B 35 71 939 617 ;
+C 34 ; WX 961 ; N a2 ; B 35 81 927 611 ;
+C 35 ; WX 974 ; N a202 ; B 35 69 939 615 ;
+C 36 ; WX 980 ; N a3 ; B 35 0 945 691 ;
+C 37 ; WX 719 ; N a4 ; B 34 138 685 566 ;
+C 38 ; WX 789 ; N a5 ; B 35 -13 755 707 ;
+C 39 ; WX 790 ; N a119 ; B 35 -14 755 706 ;
+C 40 ; WX 791 ; N a118 ; B 35 -13 761 705 ;
+C 41 ; WX 690 ; N a117 ; B 35 137 655 556 ;
+C 42 ; WX 960 ; N a11 ; B 35 122 925 568 ;
+C 43 ; WX 939 ; N a12 ; B 35 133 904 559 ;
+C 44 ; WX 549 ; N a13 ; B 29 -10 516 706 ;
+C 45 ; WX 855 ; N a14 ; B 33 59 820 632 ;
+C 46 ; WX 911 ; N a15 ; B 35 51 876 641 ;
+C 47 ; WX 933 ; N a16 ; B 35 141 899 550 ;
+C 48 ; WX 911 ; N a105 ; B 35 49 876 636 ;
+C 49 ; WX 945 ; N a17 ; B 35 139 909 550 ;
+C 50 ; WX 974 ; N a18 ; B 35 103 938 588 ;
+C 51 ; WX 755 ; N a19 ; B 34 -14 721 706 ;
+C 52 ; WX 846 ; N a20 ; B 36 -14 811 706 ;
+C 53 ; WX 762 ; N a21 ; B 35 0 727 692 ;
+C 54 ; WX 761 ; N a22 ; B 35 0 727 692 ;
+C 55 ; WX 571 ; N a23 ; B -1 -69 572 660 ;
+C 56 ; WX 677 ; N a24 ; B 36 -14 642 705 ;
+C 57 ; WX 763 ; N a25 ; B 35 0 728 694 ;
+C 58 ; WX 760 ; N a26 ; B 35 0 726 691 ;
+C 59 ; WX 759 ; N a27 ; B 35 0 725 690 ;
+C 60 ; WX 754 ; N a28 ; B 35 0 720 685 ;
+C 61 ; WX 494 ; N a6 ; B 35 0 460 691 ;
+C 62 ; WX 552 ; N a7 ; B 35 0 517 691 ;
+C 63 ; WX 537 ; N a8 ; B 35 0 503 691 ;
+C 64 ; WX 577 ; N a9 ; B 35 96 542 595 ;
+C 65 ; WX 692 ; N a10 ; B 35 -14 657 702 ;
+C 66 ; WX 786 ; N a29 ; B 35 -13 751 705 ;
+C 67 ; WX 788 ; N a30 ; B 35 -14 752 703 ;
+C 68 ; WX 788 ; N a31 ; B 35 -14 753 705 ;
+C 69 ; WX 790 ; N a32 ; B 35 -14 756 707 ;
+C 70 ; WX 793 ; N a33 ; B 35 -13 759 705 ;
+C 71 ; WX 794 ; N a34 ; B 35 -14 759 705 ;
+C 72 ; WX 816 ; N a35 ; B 35 -13 782 707 ;
+C 73 ; WX 823 ; N a36 ; B 35 2 787 719 ;
+C 74 ; WX 789 ; N a37 ; B 35 -13 754 706 ;
+C 75 ; WX 841 ; N a38 ; B 35 -14 807 706 ;
+C 76 ; WX 823 ; N a39 ; B 35 -12 789 706 ;
+C 77 ; WX 833 ; N a40 ; B 35 -14 798 706 ;
+C 78 ; WX 816 ; N a41 ; B 35 -13 782 705 ;
+C 79 ; WX 831 ; N a42 ; B 35 -13 796 707 ;
+C 80 ; WX 923 ; N a43 ; B 35 -13 888 706 ;
+C 81 ; WX 744 ; N a44 ; B 35 0 710 691 ;
+C 82 ; WX 723 ; N a45 ; B 35 0 688 691 ;
+C 83 ; WX 749 ; N a46 ; B 35 0 714 691 ;
+C 84 ; WX 790 ; N a47 ; B 34 -15 756 706 ;
+C 85 ; WX 792 ; N a48 ; B 35 -14 758 705 ;
+C 86 ; WX 695 ; N a49 ; B 35 -16 661 706 ;
+C 87 ; WX 776 ; N a50 ; B 35 -7 741 698 ;
+C 88 ; WX 768 ; N a51 ; B 35 -7 734 699 ;
+C 89 ; WX 792 ; N a52 ; B 35 -1 757 720 ;
+C 90 ; WX 759 ; N a53 ; B 35 0 725 693 ;
+C 91 ; WX 707 ; N a54 ; B 35 -11 672 704 ;
+C 92 ; WX 708 ; N a55 ; B 35 -14 672 704 ;
+C 93 ; WX 682 ; N a56 ; B 35 -3 647 694 ;
+C 94 ; WX 701 ; N a57 ; B 35 -13 666 708 ;
+C 95 ; WX 826 ; N a58 ; B 35 -18 791 716 ;
+C 96 ; WX 815 ; N a59 ; B 35 -16 780 705 ;
+C 97 ; WX 789 ; N a60 ; B 35 -14 754 704 ;
+C 98 ; WX 789 ; N a61 ; B 35 -14 754 704 ;
+C 99 ; WX 707 ; N a62 ; B 33 0 674 717 ;
+C 100 ; WX 687 ; N a63 ; B 36 0 651 688 ;
+C 101 ; WX 696 ; N a64 ; B 35 0 661 693 ;
+C 102 ; WX 689 ; N a65 ; B 35 0 655 681 ;
+C 103 ; WX 786 ; N a66 ; B 34 -14 751 703 ;
+C 104 ; WX 787 ; N a67 ; B 35 -15 752 704 ;
+C 105 ; WX 713 ; N a68 ; B 35 -13 678 709 ;
+C 106 ; WX 791 ; N a69 ; B 35 -14 756 707 ;
+C 107 ; WX 785 ; N a70 ; B 36 -14 751 701 ;
+C 108 ; WX 791 ; N a71 ; B 35 -14 757 708 ;
+C 109 ; WX 873 ; N a72 ; B 35 -13 838 705 ;
+C 110 ; WX 761 ; N a73 ; B 35 0 726 691 ;
+C 111 ; WX 762 ; N a74 ; B 35 0 727 691 ;
+C 112 ; WX 762 ; N a203 ; B 35 0 727 691 ;
+C 113 ; WX 759 ; N a75 ; B 35 0 725 691 ;
+C 114 ; WX 759 ; N a204 ; B 35 0 725 691 ;
+C 115 ; WX 892 ; N a76 ; B 35 0 858 706 ;
+C 116 ; WX 892 ; N a77 ; B 35 -14 858 691 ;
+C 117 ; WX 788 ; N a78 ; B 35 -14 754 705 ;
+C 118 ; WX 784 ; N a79 ; B 35 -14 749 705 ;
+C 119 ; WX 438 ; N a81 ; B 35 -14 403 705 ;
+C 120 ; WX 138 ; N a82 ; B 35 0 104 691 ;
+C 121 ; WX 277 ; N a83 ; B 35 0 242 691 ;
+C 122 ; WX 415 ; N a84 ; B 35 0 380 691 ;
+C 123 ; WX 392 ; N a97 ; B 35 263 357 705 ;
+C 124 ; WX 392 ; N a98 ; B 34 262 357 705 ;
+C 125 ; WX 668 ; N a99 ; B 35 263 633 707 ;
+C 126 ; WX 668 ; N a100 ; B 36 261 634 705 ;
+C 161 ; WX 732 ; N a101 ; B 35 -143 697 805 ;
+C 162 ; WX 544 ; N a102 ; B 56 -14 488 705 ;
+C 163 ; WX 544 ; N a103 ; B 34 -14 508 704 ;
+C 164 ; WX 910 ; N a104 ; B 35 40 875 651 ;
+C 165 ; WX 667 ; N a106 ; B 35 -13 633 706 ;
+C 166 ; WX 760 ; N a107 ; B 35 -13 726 705 ;
+C 167 ; WX 760 ; N a108 ; B 0 121 758 570 ;
+C 168 ; WX 776 ; N a112 ; B 35 0 741 705 ;
+C 169 ; WX 595 ; N a111 ; B 34 -14 560 705 ;
+C 170 ; WX 694 ; N a110 ; B 35 -14 659 704 ;
+C 171 ; WX 626 ; N a109 ; B 34 0 591 705 ;
+C 172 ; WX 788 ; N a120 ; B 35 -13 754 706 ;
+C 173 ; WX 788 ; N a121 ; B 35 -13 754 706 ;
+C 174 ; WX 788 ; N a122 ; B 35 -13 754 706 ;
+C 175 ; WX 788 ; N a123 ; B 35 -14 754 705 ;
+C 176 ; WX 788 ; N a124 ; B 35 -13 754 706 ;
+C 177 ; WX 788 ; N a125 ; B 35 -13 754 706 ;
+C 178 ; WX 788 ; N a126 ; B 35 -13 754 706 ;
+C 179 ; WX 788 ; N a127 ; B 35 -13 754 706 ;
+C 180 ; WX 788 ; N a128 ; B 35 -13 754 706 ;
+C 181 ; WX 788 ; N a129 ; B 35 -13 754 706 ;
+C 182 ; WX 788 ; N a130 ; B 35 -13 754 706 ;
+C 183 ; WX 788 ; N a131 ; B 35 -13 754 706 ;
+C 184 ; WX 788 ; N a132 ; B 35 -13 754 706 ;
+C 185 ; WX 788 ; N a133 ; B 35 -13 754 706 ;
+C 186 ; WX 788 ; N a134 ; B 35 -13 754 706 ;
+C 187 ; WX 788 ; N a135 ; B 35 -13 754 706 ;
+C 188 ; WX 788 ; N a136 ; B 35 -13 754 706 ;
+C 189 ; WX 788 ; N a137 ; B 35 -13 754 706 ;
+C 190 ; WX 788 ; N a138 ; B 35 -13 754 706 ;
+C 191 ; WX 788 ; N a139 ; B 35 -13 754 706 ;
+C 192 ; WX 788 ; N a140 ; B 35 -13 754 706 ;
+C 193 ; WX 788 ; N a141 ; B 35 -13 754 706 ;
+C 194 ; WX 788 ; N a142 ; B 35 -13 754 706 ;
+C 195 ; WX 788 ; N a143 ; B 35 -13 754 706 ;
+C 196 ; WX 788 ; N a144 ; B 35 -13 754 706 ;
+C 197 ; WX 788 ; N a145 ; B 35 -13 754 706 ;
+C 198 ; WX 788 ; N a146 ; B 35 -13 754 706 ;
+C 199 ; WX 788 ; N a147 ; B 35 -13 754 706 ;
+C 200 ; WX 788 ; N a148 ; B 35 -13 754 706 ;
+C 201 ; WX 788 ; N a149 ; B 35 -13 754 706 ;
+C 202 ; WX 788 ; N a150 ; B 35 -13 755 706 ;
+C 203 ; WX 788 ; N a151 ; B 34 -13 754 706 ;
+C 204 ; WX 788 ; N a152 ; B 34 -13 754 706 ;
+C 205 ; WX 788 ; N a153 ; B 35 -13 754 706 ;
+C 206 ; WX 788 ; N a154 ; B 35 -13 754 706 ;
+C 207 ; WX 788 ; N a155 ; B 35 -13 754 706 ;
+C 208 ; WX 788 ; N a156 ; B 35 -13 754 706 ;
+C 209 ; WX 788 ; N a157 ; B 35 -13 754 706 ;
+C 210 ; WX 788 ; N a158 ; B 35 -13 754 706 ;
+C 211 ; WX 788 ; N a159 ; B 35 -13 754 706 ;
+C 212 ; WX 894 ; N a160 ; B 35 58 860 634 ;
+C 213 ; WX 838 ; N a161 ; B 35 151 803 537 ;
+C 214 ; WX 1016 ; N a163 ; B 34 151 981 537 ;
+C 215 ; WX 458 ; N a164 ; B 35 -128 422 819 ;
+C 216 ; WX 748 ; N a196 ; B 35 94 698 597 ;
+C 217 ; WX 924 ; N a165 ; B 35 140 890 551 ;
+C 218 ; WX 748 ; N a192 ; B 35 94 698 597 ;
+C 219 ; WX 918 ; N a166 ; B 35 167 884 526 ;
+C 220 ; WX 927 ; N a167 ; B 35 28 892 664 ;
+C 221 ; WX 928 ; N a168 ; B 35 129 891 562 ;
+C 222 ; WX 928 ; N a169 ; B 35 129 893 561 ;
+C 223 ; WX 834 ; N a170 ; B 35 154 799 537 ;
+C 224 ; WX 873 ; N a171 ; B 35 97 838 594 ;
+C 225 ; WX 828 ; N a172 ; B 35 104 791 588 ;
+C 226 ; WX 924 ; N a173 ; B 35 82 889 610 ;
+C 227 ; WX 924 ; N a162 ; B 35 82 889 610 ;
+C 228 ; WX 917 ; N a174 ; B 35 4 882 688 ;
+C 229 ; WX 930 ; N a175 ; B 35 83 896 608 ;
+C 230 ; WX 931 ; N a176 ; B 35 84 896 608 ;
+C 231 ; WX 463 ; N a177 ; B 35 -100 429 790 ;
+C 232 ; WX 883 ; N a178 ; B 35 70 848 621 ;
+C 233 ; WX 836 ; N a179 ; B 35 43 802 648 ;
+C 234 ; WX 836 ; N a193 ; B 35 43 802 648 ;
+C 235 ; WX 867 ; N a180 ; B 35 101 832 589 ;
+C 236 ; WX 867 ; N a199 ; B 35 101 832 591 ;
+C 237 ; WX 696 ; N a181 ; B 35 44 661 651 ;
+C 238 ; WX 696 ; N a200 ; B 35 44 661 646 ;
+C 239 ; WX 874 ; N a182 ; B 35 75 840 613 ;
+C 241 ; WX 874 ; N a201 ; B 35 75 840 613 ;
+C 242 ; WX 760 ; N a183 ; B 35 1 725 690 ;
+C 243 ; WX 946 ; N a184 ; B 35 159 911 532 ;
+C 244 ; WX 771 ; N a197 ; B 34 36 736 655 ;
+C 245 ; WX 865 ; N a185 ; B 35 209 830 483 ;
+C 246 ; WX 771 ; N a194 ; B 34 36 736 655 ;
+C 247 ; WX 888 ; N a198 ; B 34 -18 853 711 ;
+C 248 ; WX 967 ; N a186 ; B 35 123 932 568 ;
+C 249 ; WX 888 ; N a195 ; B 34 -20 853 710 ;
+C 250 ; WX 831 ; N a187 ; B 35 113 796 578 ;
+C 251 ; WX 873 ; N a188 ; B 36 116 838 576 ;
+C 252 ; WX 927 ; N a189 ; B 35 149 891 542 ;
+C 253 ; WX 970 ; N a190 ; B 35 75 931 615 ;
+C 254 ; WX 918 ; N a191 ; B 34 99 884 592 ;
+C -1 ; WX 334 ; N a95 ; B 35 0 299 691 ;
+C -1 ; WX 234 ; N a88 ; B 35 -14 199 705 ;
+C -1 ; WX 234 ; N a87 ; B 35 -14 199 705 ;
+C -1 ; WX 410 ; N a86 ; B 35 0 375 691 ;
+C -1 ; WX 410 ; N a206 ; B 35 0 375 691 ;
+C -1 ; WX 509 ; N a85 ; B 35 0 475 691 ;
+C -1 ; WX 334 ; N a96 ; B 35 0 299 691 ;
+C -1 ; WX 276 ; N a91 ; B 35 0 242 691 ;
+C -1 ; WX 317 ; N a94 ; B 35 0 283 691 ;
+C -1 ; WX 317 ; N a93 ; B 35 0 283 691 ;
+C -1 ; WX 390 ; N a90 ; B 35 -14 355 705 ;
+C -1 ; WX 390 ; N a89 ; B 35 -14 356 705 ;
+C -1 ; WX 276 ; N a92 ; B 35 0 242 691 ;
+C -1 ; WX 509 ; N a205 ; B 35 0 475 691 ;
+C -1 ; WX 278 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/d050000l.pfb b/Master/xemtex/gsfonts/d050000l.pfb
new file mode 100644
index 00000000000..f8cd40ee6b2
--- /dev/null
+++ b/Master/xemtex/gsfonts/d050000l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/d050000l.pfm b/Master/xemtex/gsfonts/d050000l.pfm
new file mode 100644
index 00000000000..272d9f71fc8
--- /dev/null
+++ b/Master/xemtex/gsfonts/d050000l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/fonts.dir b/Master/xemtex/gsfonts/fonts.dir
new file mode 100644
index 00000000000..129652884ae
--- /dev/null
+++ b/Master/xemtex/gsfonts/fonts.dir
@@ -0,0 +1,44 @@
+43
+a010013l.pfb -URW-Gothic L-book-r-normal--0-0-0-0-p-0-iso8859-1
+a010015l.pfb -URW-Gothic L-demi bold-r-normal--0-0-0-0-p-0-iso8859-1
+a010033l.pfb -URW-Gothic L-book-o-normal--0-0-0-0-p-0-iso8859-1
+a010035l.pfb -URW-Gothic L-demi bold-o-normal--0-0-0-0-p-0-iso8859-1
+b018012l.pfb -URW-Bookman L-light-r-normal--0-0-0-0-p-0-iso8859-1
+b018015l.pfb -URW-Bookman L-demi bold-r-normal--0-0-0-0-p-0-iso8859-1
+b018032l.pfb -URW-Bookman L-light-i-normal--0-0-0-0-p-0-iso8859-1
+b018035l.pfb -URW-Bookman L-demi bold-i-normal--0-0-0-0-p-0-iso8859-1
+bchb.pfa -bitstream-Charter-bold-r-normal--0-0-0-0-p-0-iso8859-1
+bchbi.pfa -bitstream-Charter-bold-i-normal--0-0-0-0-p-0-iso8859-1
+bchr.pfa -bitstream-Charter-medium-r-normal--0-0-0-0-p-0-iso8859-1
+bchri.pfa -bitstream-Charter-medium-i-normal--0-0-0-0-p-0-iso8859-1
+c059013l.pfb -URW-Century Schoolbook L-medium-r-normal--0-0-0-0-p-0-iso8859-1
+c059016l.pfb -URW-Century Schoolbook L-bold-r-normal--0-0-0-0-p-0-iso8859-1
+c059033l.pfb -URW-Century Schoolbook L-medium-i-normal--0-0-0-0-p-0-iso8859-1
+c059036l.pfb -URW-Century Schoolbook L-bold-i-normal--0-0-0-0-p-0-iso8859-1
+d050000l.pfb -URW-Dingbats-medium-r-normal--0-0-0-0-p-0-urw-fontspecific
+n019003l.pfb -URW-Nimbus Sans L-medium-r-normal--0-0-0-0-p-0-iso8859-1
+n019004l.pfb -URW-Nimbus Sans L-bold-r-normal--0-0-0-0-p-0-iso8859-1
+n019023l.pfb -URW-Nimbus Sans L-medium-o-normal--0-0-0-0-p-0-iso8859-1
+n019024l.pfb -URW-Nimbus Sans L-bold-o-normal--0-0-0-0-p-0-iso8859-1
+n019043l.pfb -URW-Nimbus Sans L-medium-r-condensed--0-0-0-0-p-0-iso8859-1
+n019044l.pfb -URW-Nimbus Sans L-bold-r-condensed--0-0-0-0-p-0-iso8859-1
+n019063l.pfb -URW-Nimbus Sans L-medium-o-condensed--0-0-0-0-p-0-iso8859-1
+n019064l.pfb -URW-Nimbus Sans L-bold-o-condensed--0-0-0-0-p-0-iso8859-1
+n021003l.pfb -URW-Nimbus Roman No9 L-medium-r-normal--0-0-0-0-p-0-iso8859-1
+n021004l.pfb -URW-Nimbus Roman No9 L-bold-r-normal--0-0-0-0-p-0-iso8859-1
+n021023l.pfb -URW-Nimbus Roman No9 L-medium-i-normal--0-0-0-0-p-0-iso8859-1
+n021024l.pfb -URW-Nimbus Roman No9 L-bold-i-normal--0-0-0-0-p-0-iso8859-1
+n022003l.pfb -URW-Nimbus Mono L-medium-r-normal--0-0-0-0-p-0-iso8859-1
+n022004l.pfb -URW-Nimbus Mono L-bold-r-normal--0-0-0-0-p-0-iso8859-1
+n022023l.pfb -URW-Nimbus Mono L-medium-o-normal--0-0-0-0-p-0-iso8859-1
+n022024l.pfb -URW-Nimbus Mono L-bold-o-normal--0-0-0-0-p-0-iso8859-1
+p052003l.pfb -URW-Palladio L-medium-r-normal--0-0-0-0-p-0-iso8859-1
+p052004l.pfb -URW-Palladio L-bold-r-normal--0-0-0-0-p-0-iso8859-1
+p052023l.pfb -URW-Palladio L-medium-i-normal--0-0-0-0-p-0-iso8859-1
+p052024l.pfb -URW-Palladio L-bold-i-normal--0-0-0-0-p-0-iso8859-1
+putb.pfa -adobe-utopia-bold-r-normal--0-0-0-0-p-0-iso8859-1
+putbi.pfa -adobe-utopia-bold-i-normal--0-0-0-0-p-0-iso8859-1
+putr.pfa -adobe-utopia-medium-r-normal--0-0-0-0-p-0-iso8859-1
+putri.pfa -adobe-utopia-medium-i-normal--0-0-0-0-p-0-iso8859-1
+s050000l.pfb -URW-Standard Symbols L-medium-r-normal--0-0-0-0-p-0-urw-fontspecific
+z003034l.pfb -URW-Chancery L-medium-i-normal--0-0-0-0-p-0-iso8859-1
diff --git a/Master/xemtex/gsfonts/fonts.scale b/Master/xemtex/gsfonts/fonts.scale
new file mode 100644
index 00000000000..bd924dde972
--- /dev/null
+++ b/Master/xemtex/gsfonts/fonts.scale
@@ -0,0 +1,44 @@
+0
+a010013l.pfb -URW-Gothic L-book-r-normal--0-0-0-0-p-0-iso8859-1
+a010015l.pfb -URW-Gothic L-demi bold-r-normal--0-0-0-0-p-0-iso8859-1
+a010033l.pfb -URW-Gothic L-book-o-normal--0-0-0-0-p-0-iso8859-1
+a010035l.pfb -URW-Gothic L-demi bold-o-normal--0-0-0-0-p-0-iso8859-1
+b018012l.pfb -URW-Bookman L-light-r-normal--0-0-0-0-p-0-iso8859-1
+b018015l.pfb -URW-Bookman L-demi bold-r-normal--0-0-0-0-p-0-iso8859-1
+b018032l.pfb -URW-Bookman L-light-i-normal--0-0-0-0-p-0-iso8859-1
+b018035l.pfb -URW-Bookman L-demi bold-i-normal--0-0-0-0-p-0-iso8859-1
+bchb.pfa -bitstream-Charter-bold-r-normal--0-0-0-0-p-0-iso8859-1
+bchbi.pfa -bitstream-Charter-bold-i-normal--0-0-0-0-p-0-iso8859-1
+bchr.pfa -bitstream-Charter-medium-r-normal--0-0-0-0-p-0-iso8859-1
+bchri.pfa -bitstream-Charter-medium-i-normal--0-0-0-0-p-0-iso8859-1
+c059013l.pfb -URW-Century Schoolbook L-medium-r-normal--0-0-0-0-p-0-iso8859-1
+c059016l.pfb -URW-Century Schoolbook L-bold-r-normal--0-0-0-0-p-0-iso8859-1
+c059033l.pfb -URW-Century Schoolbook L-medium-i-normal--0-0-0-0-p-0-iso8859-1
+c059036l.pfb -URW-Century Schoolbook L-bold-i-normal--0-0-0-0-p-0-iso8859-1
+d050000l.pfb -URW-Dingbats-medium-r-normal--0-0-0-0-p-0-urw-fontspecific
+n019003l.pfb -URW-Nimbus Sans L-medium-r-normal--0-0-0-0-p-0-iso8859-1
+n019004l.pfb -URW-Nimbus Sans L-bold-r-normal--0-0-0-0-p-0-iso8859-1
+n019023l.pfb -URW-Nimbus Sans L-medium-o-normal--0-0-0-0-p-0-iso8859-1
+n019024l.pfb -URW-Nimbus Sans L-bold-o-normal--0-0-0-0-p-0-iso8859-1
+n019043l.pfb -URW-Nimbus Sans L-medium-r-condensed--0-0-0-0-p-0-iso8859-1
+n019044l.pfb -URW-Nimbus Sans L-bold-r-condensed--0-0-0-0-p-0-iso8859-1
+n019063l.pfb -URW-Nimbus Sans L-medium-o-condensed--0-0-0-0-p-0-iso8859-1
+n019064l.pfb -URW-Nimbus Sans L-bold-o-condensed--0-0-0-0-p-0-iso8859-1
+n021003l.pfb -URW-Nimbus Roman No9 L-medium-r-normal--0-0-0-0-p-0-iso8859-1
+n021004l.pfb -URW-Nimbus Roman No9 L-bold-r-normal--0-0-0-0-p-0-iso8859-1
+n021023l.pfb -URW-Nimbus Roman No9 L-medium-i-normal--0-0-0-0-p-0-iso8859-1
+n021024l.pfb -URW-Nimbus Roman No9 L-bold-i-normal--0-0-0-0-p-0-iso8859-1
+n022003l.pfb -URW-Nimbus Mono L-medium-r-normal--0-0-0-0-p-0-iso8859-1
+n022004l.pfb -URW-Nimbus Mono L-bold-r-normal--0-0-0-0-p-0-iso8859-1
+n022023l.pfb -URW-Nimbus Mono L-medium-o-normal--0-0-0-0-p-0-iso8859-1
+n022024l.pfb -URW-Nimbus Mono L-bold-o-normal--0-0-0-0-p-0-iso8859-1
+p052003l.pfb -URW-Palladio L-medium-r-normal--0-0-0-0-p-0-iso8859-1
+p052004l.pfb -URW-Palladio L-bold-r-normal--0-0-0-0-p-0-iso8859-1
+p052023l.pfb -URW-Palladio L-medium-i-normal--0-0-0-0-p-0-iso8859-1
+p052024l.pfb -URW-Palladio L-bold-i-normal--0-0-0-0-p-0-iso8859-1
+putb.pfa -adobe-utopia-bold-r-normal--0-0-0-0-p-0-iso8859-1
+putbi.pfa -adobe-utopia-bold-i-normal--0-0-0-0-p-0-iso8859-1
+putr.pfa -adobe-utopia-medium-r-normal--0-0-0-0-p-0-iso8859-1
+putri.pfa -adobe-utopia-medium-i-normal--0-0-0-0-p-0-iso8859-1
+s050000l.pfb -URW-Standard Symbols L-medium-r-normal--0-0-0-0-p-0-urw-fontspecific
+z003034l.pfb -URW-Chancery L-medium-i-normal--0-0-0-0-p-0-iso8859-1
diff --git a/Master/xemtex/gsfonts/n019003l.afm b/Master/xemtex/gsfonts/n019003l.afm
new file mode 100644
index 00000000000..dfa9bd80f16
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019003l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName NimbusSanL-Regu
+FullName Nimbus Sans L Regular
+FamilyName Nimbus Sans L
+Weight Regular
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -151
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -174 -285 1001 953
+CapHeight 729
+XHeight 524
+Descender -218
+Ascender 729
+StartCharMetrics 316
+C 32 ; WX 278 ; N space ; B 191 0 191 0 ;
+C 33 ; WX 278 ; N exclam ; B 124 0 208 729 ;
+C 34 ; WX 355 ; N quotedbl ; B 52 464 305 709 ;
+C 35 ; WX 556 ; N numbersign ; B 14 -20 542 697 ;
+C 36 ; WX 556 ; N dollar ; B 26 -126 518 770 ;
+C 37 ; WX 889 ; N percent ; B 29 -20 859 709 ;
+C 38 ; WX 667 ; N ampersand ; B 52 -23 637 709 ;
+C 39 ; WX 221 ; N quoteright ; B 64 497 157 729 ;
+C 40 ; WX 333 ; N parenleft ; B 73 -212 291 729 ;
+C 41 ; WX 333 ; N parenright ; B 38 -212 256 729 ;
+C 42 ; WX 389 ; N asterisk ; B 40 441 343 729 ;
+C 43 ; WX 584 ; N plus ; B 50 -10 534 474 ;
+C 44 ; WX 278 ; N comma ; B 87 -147 192 104 ;
+C 45 ; WX 333 ; N hyphen ; B 46 240 284 312 ;
+C 46 ; WX 278 ; N period ; B 87 0 191 104 ;
+C 47 ; WX 278 ; N slash ; B -8 -20 284 729 ;
+C 48 ; WX 556 ; N zero ; B 43 -23 507 709 ;
+C 49 ; WX 556 ; N one ; B 102 0 347 709 ;
+C 50 ; WX 556 ; N two ; B 34 0 511 709 ;
+C 51 ; WX 556 ; N three ; B 32 -23 506 709 ;
+C 52 ; WX 556 ; N four ; B 28 0 520 709 ;
+C 53 ; WX 556 ; N five ; B 35 -23 513 709 ;
+C 54 ; WX 556 ; N six ; B 43 -23 513 709 ;
+C 55 ; WX 556 ; N seven ; B 46 0 520 709 ;
+C 56 ; WX 556 ; N eight ; B 37 -23 513 709 ;
+C 57 ; WX 556 ; N nine ; B 38 -23 509 709 ;
+C 58 ; WX 278 ; N colon ; B 110 0 214 524 ;
+C 59 ; WX 278 ; N semicolon ; B 110 -147 215 524 ;
+C 60 ; WX 584 ; N less ; B 45 -9 534 474 ;
+C 61 ; WX 584 ; N equal ; B 50 111 534 353 ;
+C 62 ; WX 584 ; N greater ; B 50 -9 539 474 ;
+C 63 ; WX 556 ; N question ; B 77 0 509 741 ;
+C 64 ; WX 1015 ; N at ; B 34 -142 951 741 ;
+C 65 ; WX 667 ; N A ; B 17 0 653 729 ;
+C 66 ; WX 667 ; N B ; B 79 0 623 729 ;
+C 67 ; WX 722 ; N C ; B 48 -23 677 741 ;
+C 68 ; WX 722 ; N D ; B 89 0 667 729 ;
+C 69 ; WX 667 ; N E ; B 90 0 613 729 ;
+C 70 ; WX 611 ; N F ; B 90 0 579 729 ;
+C 71 ; WX 778 ; N G ; B 44 -23 709 741 ;
+C 72 ; WX 722 ; N H ; B 83 0 644 729 ;
+C 73 ; WX 278 ; N I ; B 100 0 194 729 ;
+C 74 ; WX 500 ; N J ; B 17 -23 426 729 ;
+C 75 ; WX 667 ; N K ; B 79 0 658 729 ;
+C 76 ; WX 556 ; N L ; B 80 0 533 729 ;
+C 77 ; WX 833 ; N M ; B 75 0 761 729 ;
+C 78 ; WX 722 ; N N ; B 76 0 646 729 ;
+C 79 ; WX 778 ; N O ; B 38 -23 742 741 ;
+C 80 ; WX 667 ; N P ; B 91 0 617 729 ;
+C 81 ; WX 778 ; N Q ; B 38 -59 742 741 ;
+C 82 ; WX 722 ; N R ; B 93 0 679 729 ;
+C 83 ; WX 667 ; N S ; B 48 -23 621 741 ;
+C 84 ; WX 611 ; N T ; B 21 0 593 729 ;
+C 85 ; WX 722 ; N U ; B 85 -23 645 729 ;
+C 86 ; WX 667 ; N V ; B 30 0 645 729 ;
+C 87 ; WX 944 ; N W ; B 22 0 929 729 ;
+C 88 ; WX 667 ; N X ; B 22 0 649 729 ;
+C 89 ; WX 667 ; N Y ; B 13 0 661 729 ;
+C 90 ; WX 611 ; N Z ; B 28 0 583 729 ;
+C 91 ; WX 278 ; N bracketleft ; B 64 -212 250 729 ;
+C 92 ; WX 278 ; N backslash ; B -8 -20 284 729 ;
+C 93 ; WX 278 ; N bracketright ; B 23 -212 209 729 ;
+C 94 ; WX 469 ; N asciicircum ; B 44 329 425 709 ;
+C 95 ; WX 556 ; N underscore ; B -22 -176 578 -126 ;
+C 96 ; WX 222 ; N quoteleft ; B 65 477 158 709 ;
+C 97 ; WX 556 ; N a ; B 42 -23 535 539 ;
+C 98 ; WX 556 ; N b ; B 54 -23 523 729 ;
+C 99 ; WX 500 ; N c ; B 31 -23 477 539 ;
+C 100 ; WX 556 ; N d ; B 26 -23 495 729 ;
+C 101 ; WX 556 ; N e ; B 40 -23 513 539 ;
+C 102 ; WX 278 ; N f ; B 18 0 258 732 ;
+C 103 ; WX 556 ; N g ; B 29 -218 489 539 ;
+C 104 ; WX 556 ; N h ; B 70 0 486 729 ;
+C 105 ; WX 222 ; N i ; B 66 0 150 729 ;
+C 106 ; WX 222 ; N j ; B -18 -218 153 729 ;
+C 107 ; WX 500 ; N k ; B 58 0 502 729 ;
+C 108 ; WX 222 ; N l ; B 68 0 152 729 ;
+C 109 ; WX 833 ; N m ; B 70 0 762 539 ;
+C 110 ; WX 556 ; N n ; B 70 0 487 539 ;
+C 111 ; WX 556 ; N o ; B 36 -23 510 539 ;
+C 112 ; WX 556 ; N p ; B 54 -218 523 539 ;
+C 113 ; WX 556 ; N q ; B 26 -218 495 539 ;
+C 114 ; WX 333 ; N r ; B 69 0 321 539 ;
+C 115 ; WX 500 ; N s ; B 34 -23 459 539 ;
+C 116 ; WX 278 ; N t ; B 14 -23 254 668 ;
+C 117 ; WX 556 ; N u ; B 65 -23 482 524 ;
+C 118 ; WX 500 ; N v ; B 10 0 486 524 ;
+C 119 ; WX 722 ; N w ; B 6 0 708 524 ;
+C 120 ; WX 500 ; N x ; B 17 0 473 524 ;
+C 121 ; WX 500 ; N y ; B 20 -218 478 524 ;
+C 122 ; WX 500 ; N z ; B 31 0 457 524 ;
+C 123 ; WX 334 ; N braceleft ; B 43 -212 276 729 ;
+C 124 ; WX 260 ; N bar ; B 100 -212 160 729 ;
+C 125 ; WX 334 ; N braceright ; B 29 -212 262 729 ;
+C 126 ; WX 584 ; N asciitilde ; B 75 268 508 438 ;
+C 161 ; WX 333 ; N exclamdown ; B 121 -205 205 524 ;
+C 162 ; WX 556 ; N cent ; B 52 -120 510 628 ;
+C 163 ; WX 556 ; N sterling ; B 26 -23 535 729 ;
+C 164 ; WX 167 ; N fraction ; B -174 -20 336 709 ;
+C 165 ; WX 556 ; N yen ; B 11 0 545 709 ;
+C 166 ; WX 556 ; N florin ; B 11 -212 542 738 ;
+C 167 ; WX 556 ; N section ; B 43 -213 506 729 ;
+C 168 ; WX 556 ; N currency ; B 67 133 489 551 ;
+C 169 ; WX 191 ; N quotesingle ; B 48 464 142 709 ;
+C 170 ; WX 333 ; N quotedblleft ; B 48 477 299 709 ;
+C 171 ; WX 556 ; N guillemotleft ; B 98 106 455 438 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 91 106 243 438 ;
+C 173 ; WX 333 ; N guilsinglright ; B 85 106 239 438 ;
+C 174 ; WX 500 ; N fi ; B 12 0 436 732 ;
+C 175 ; WX 500 ; N fl ; B 17 0 430 732 ;
+C 177 ; WX 556 ; N endash ; B -5 240 561 312 ;
+C 178 ; WX 556 ; N dagger ; B 38 -177 513 709 ;
+C 179 ; WX 556 ; N daggerdbl ; B 38 -177 513 709 ;
+C 180 ; WX 278 ; N periodcentered ; B 87 302 211 427 ;
+C 182 ; WX 537 ; N paragraph ; B 48 -177 522 729 ;
+C 183 ; WX 350 ; N bullet ; B 50 220 300 470 ;
+C 184 ; WX 222 ; N quotesinglbase ; B 64 -128 158 104 ;
+C 185 ; WX 333 ; N quotedblbase ; B 47 -128 300 104 ;
+C 186 ; WX 333 ; N quotedblright ; B 49 477 302 709 ;
+C 187 ; WX 556 ; N guillemotright ; B 98 106 451 438 ;
+C 188 ; WX 1000 ; N ellipsis ; B 115 0 885 104 ;
+C 189 ; WX 1000 ; N perthousand ; B 9 -22 993 738 ;
+C 191 ; WX 611 ; N questiondown ; B 95 -217 528 524 ;
+C 193 ; WX 333 ; N grave ; B 22 592 231 740 ;
+C 194 ; WX 333 ; N acute ; B 92 592 301 740 ;
+C 195 ; WX 333 ; N circumflex ; B 20 591 307 741 ;
+C 196 ; WX 333 ; N tilde ; B 5 613 319 717 ;
+C 197 ; WX 333 ; N macron ; B 28 631 302 701 ;
+C 198 ; WX 333 ; N breve ; B 15 597 316 732 ;
+C 199 ; WX 333 ; N dotaccent ; B 115 612 219 716 ;
+C 200 ; WX 333 ; N dieresis ; B 30 612 296 715 ;
+C 202 ; WX 333 ; N ring ; B 79 579 255 754 ;
+C 203 ; WX 333 ; N cedilla ; B 39 -214 287 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B -35 590 348 740 ;
+C 206 ; WX 333 ; N ogonek ; B 57 -205 265 0 ;
+C 207 ; WX 333 ; N caron ; B 19 591 306 741 ;
+C 208 ; WX 1000 ; N emdash ; B -9 240 1001 312 ;
+C 225 ; WX 1000 ; N AE ; B 11 0 950 729 ;
+C 227 ; WX 370 ; N ordfeminine ; B 37 303 333 742 ;
+C 232 ; WX 556 ; N Lslash ; B 0 0 552 729 ;
+C 233 ; WX 778 ; N Oslash ; B 30 -23 744 755 ;
+C 234 ; WX 1000 ; N OE ; B 43 -20 959 741 ;
+C 235 ; WX 365 ; N ordmasculine ; B 40 303 324 742 ;
+C 241 ; WX 889 ; N ae ; B 34 -23 845 539 ;
+C 245 ; WX 278 ; N dotlessi ; B 94 0 178 524 ;
+C 248 ; WX 222 ; N lslash ; B 0 0 212 729 ;
+C 249 ; WX 611 ; N oslash ; B 18 -30 529 539 ;
+C 250 ; WX 944 ; N oe ; B 40 -23 899 539 ;
+C 251 ; WX 611 ; N germandbls ; B 126 -20 566 729 ;
+C -1 ; WX 722 ; N Udieresis ; B 85 -23 645 914 ;
+C -1 ; WX 722 ; N Uacute ; B 85 -23 645 939 ;
+C -1 ; WX 667 ; N Scedilla ; B 45 -214 621 741 ;
+C -1 ; WX 611 ; N Tcaron ; B 21 0 593 940 ;
+C -1 ; WX 667 ; N Scaron ; B 48 -23 621 940 ;
+C -1 ; WX 722 ; N Rcaron ; B 93 0 679 940 ;
+C -1 ; WX 722 ; N Racute ; B 93 0 679 939 ;
+C -1 ; WX 667 ; N Sacute ; B 48 -23 621 939 ;
+C -1 ; WX 778 ; N Otilde ; B 38 -23 742 916 ;
+C -1 ; WX 556 ; N ucircumflex ; B 65 -23 482 741 ;
+C -1 ; WX 778 ; N Ohungarumlaut ; B 38 -23 742 939 ;
+C -1 ; WX 722 ; N Uhungarumlaut ; B 85 -23 645 939 ;
+C -1 ; WX 666 ; N Yacute ; B 13 0 661 939 ;
+C -1 ; WX 722 ; N Eth ; B 20 0 667 729 ;
+C -1 ; WX 722 ; N Dcroat ; B 20 0 667 729 ;
+C -1 ; WX 611 ; N Zacute ; B 28 0 583 939 ;
+C -1 ; WX 722 ; N Uring ; B 85 -23 645 953 ;
+C -1 ; WX 556 ; N gbreve ; B 29 -218 489 732 ;
+C -1 ; WX 556 ; N eogonek ; B 40 -204 514 539 ;
+C -1 ; WX 556 ; N edotaccent ; B 40 -23 513 716 ;
+C -1 ; WX 556 ; N ecaron ; B 40 -23 513 741 ;
+C -1 ; WX 722 ; N Ugrave ; B 85 -23 645 939 ;
+C -1 ; WX 666 ; N Thorn ; B 91 0 616 729 ;
+C -1 ; WX 556 ; N eacute ; B 40 -23 513 740 ;
+C -1 ; WX 556 ; N edieresis ; B 40 -23 513 715 ;
+C -1 ; WX 635 ; N dcaron ; B 26 -23 648 729 ;
+C -1 ; WX 500 ; N ccedilla ; B 31 -214 477 539 ;
+C -1 ; WX 500 ; N ccaron ; B 31 -23 477 741 ;
+C -1 ; WX 500 ; N cacute ; B 31 -23 477 740 ;
+C -1 ; WX 556 ; N aogonek ; B 43 -205 596 539 ;
+C -1 ; WX 556 ; N aring ; B 42 -23 535 754 ;
+C -1 ; WX 556 ; N atilde ; B 42 -23 535 717 ;
+C -1 ; WX 556 ; N abreve ; B 42 -23 535 732 ;
+C -1 ; WX 556 ; N egrave ; B 40 -23 513 740 ;
+C -1 ; WX 556 ; N agrave ; B 42 -23 535 740 ;
+C -1 ; WX 556 ; N aacute ; B 42 -23 535 740 ;
+C -1 ; WX 556 ; N adieresis ; B 42 -23 535 715 ;
+C -1 ; WX 722 ; N Uogonek ; B 85 -205 645 729 ;
+C -1 ; WX 556 ; N ugrave ; B 65 -23 482 740 ;
+C -1 ; WX 556 ; N uacute ; B 65 -23 482 740 ;
+C -1 ; WX 556 ; N udieresis ; B 65 -23 482 715 ;
+C -1 ; WX 308 ; N tcaron ; B 14 -23 321 800 ;
+C -1 ; WX 500 ; N scommaaccent ; B 34 -285 459 539 ;
+C -1 ; WX 611 ; N Zcaron ; B 28 0 583 940 ;
+C -1 ; WX 556 ; N ecircumflex ; B 40 -23 513 741 ;
+C -1 ; WX 722 ; N Ucircumflex ; B 85 -23 645 940 ;
+C -1 ; WX 556 ; N acircumflex ; B 42 -23 535 741 ;
+C -1 ; WX 611 ; N Zdotaccent ; B 28 0 583 915 ;
+C -1 ; WX 500 ; N scaron ; B 34 -23 459 741 ;
+C -1 ; WX 667 ; N Amacron ; B 17 0 653 900 ;
+C -1 ; WX 500 ; N sacute ; B 34 -23 459 740 ;
+C -1 ; WX 611 ; N Tcommaaccent ; B 21 -285 593 729 ;
+C -1 ; WX 667 ; N Ydieresis ; B 13 0 661 914 ;
+C -1 ; WX 555 ; N thorn ; B 54 -218 522 714 ;
+C -1 ; WX 667 ; N Emacron ; B 90 0 613 900 ;
+C -1 ; WX 778 ; N Ograve ; B 38 -23 742 939 ;
+C -1 ; WX 778 ; N Oacute ; B 38 -23 742 939 ;
+C -1 ; WX 778 ; N Odieresis ; B 38 -23 742 914 ;
+C -1 ; WX 722 ; N Ntilde ; B 76 0 646 916 ;
+C -1 ; WX 722 ; N Ncaron ; B 76 0 646 940 ;
+C -1 ; WX 722 ; N Nacute ; B 76 0 646 939 ;
+C -1 ; WX 556 ; N Lcaron ; B 80 0 533 729 ;
+C -1 ; WX 556 ; N Lacute ; B 70 0 533 939 ;
+C -1 ; WX 278 ; N Idotaccent ; B 92 0 196 915 ;
+C -1 ; WX 333 ; N racute ; B 69 0 331 740 ;
+C -1 ; WX 278 ; N Icircumflex ; B -1 0 286 940 ;
+C -1 ; WX 556 ; N ohungarumlaut ; B 36 -23 526 740 ;
+C -1 ; WX 556 ; N otilde ; B 36 -23 510 717 ;
+C -1 ; WX 556 ; N Euro ; B 2 -23 543 709 ;
+C -1 ; WX 556 ; N ocircumflex ; B 36 -23 510 741 ;
+C -1 ; WX 351 ; N onesuperior ; B 61 284 222 709 ;
+C -1 ; WX 351 ; N twosuperior ; B 19 284 326 709 ;
+C -1 ; WX 351 ; N threesuperior ; B 16 270 322 709 ;
+C -1 ; WX 278 ; N Igrave ; B 1 0 210 939 ;
+C -1 ; WX 278 ; N Iacute ; B 71 0 280 939 ;
+C -1 ; WX 278 ; N Imacron ; B 20 0 274 900 ;
+C -1 ; WX 278 ; N Iogonek ; B 66 -204 234 729 ;
+C -1 ; WX 278 ; N Idieresis ; B 9 0 275 907 ;
+C -1 ; WX 778 ; N Gbreve ; B 44 -23 709 931 ;
+C -1 ; WX 722 ; N Umacron ; B 85 -23 645 900 ;
+C -1 ; WX 667 ; N Kcommaaccent ; B 79 -285 658 729 ;
+C -1 ; WX 556 ; N ograve ; B 36 -23 510 740 ;
+C -1 ; WX 667 ; N Scommaaccent ; B 48 -285 621 741 ;
+C -1 ; WX 667 ; N Eogonek ; B 90 -205 652 729 ;
+C -1 ; WX 556 ; N oacute ; B 36 -23 510 740 ;
+C -1 ; WX 667 ; N Edotaccent ; B 90 0 613 915 ;
+C -1 ; WX 222 ; N iogonek ; B 25 -204 190 729 ;
+C -1 ; WX 556 ; N gcommaaccent ; B 29 -218 489 817 ;
+C -1 ; WX 556 ; N odieresis ; B 36 -23 510 715 ;
+C -1 ; WX 556 ; N ntilde ; B 70 0 487 717 ;
+C -1 ; WX 556 ; N ncaron ; B 70 0 487 741 ;
+C -1 ; WX 667 ; N Ecaron ; B 90 0 613 940 ;
+C -1 ; WX 667 ; N Ecircumflex ; B 90 0 613 940 ;
+C -1 ; WX 500 ; N scedilla ; B 34 -214 459 539 ;
+C -1 ; WX 333 ; N rcaron ; B 48 0 335 741 ;
+C -1 ; WX 667 ; N Egrave ; B 90 0 613 939 ;
+C -1 ; WX 667 ; N Eacute ; B 90 0 613 939 ;
+C -1 ; WX 778 ; N Gcommaaccent ; B 44 -285 709 741 ;
+C -1 ; WX 722 ; N Rcommaaccent ; B 93 -285 679 729 ;
+C -1 ; WX 667 ; N Edieresis ; B 90 0 613 914 ;
+C -1 ; WX 556 ; N nacute ; B 70 0 487 740 ;
+C -1 ; WX 556 ; N uogonek ; B 65 -204 521 524 ;
+C -1 ; WX 556 ; N umacron ; B 65 -23 482 701 ;
+C -1 ; WX 722 ; N Dcaron ; B 89 0 667 940 ;
+C -1 ; WX 292 ; N lcaron ; B 68 0 305 729 ;
+C -1 ; WX 722 ; N Ccaron ; B 48 -23 677 940 ;
+C -1 ; WX 722 ; N Cacute ; B 48 -23 677 939 ;
+C -1 ; WX 722 ; N Ccedilla ; B 48 -214 677 741 ;
+C -1 ; WX 606 ; N degree ; B 151 383 454 686 ;
+C -1 ; WX 667 ; N Aogonek ; B 17 -205 692 729 ;
+C -1 ; WX 584 ; N minus ; B 40 197 544 267 ;
+C -1 ; WX 584 ; N multiply ; B 95 34 488 427 ;
+C -1 ; WX 584 ; N divide ; B 50 0 534 472 ;
+C -1 ; WX 667 ; N Aring ; B 17 0 653 953 ;
+C -1 ; WX 1000 ; N trademark ; B 63 292 938 729 ;
+C -1 ; WX 333 ; N rcommaaccent ; B 65 -285 321 539 ;
+C -1 ; WX 222 ; N lacute ; B 63 0 272 939 ;
+C -1 ; WX 556 ; N omacron ; B 36 -23 510 701 ;
+C -1 ; WX 667 ; N Atilde ; B 17 0 653 916 ;
+C -1 ; WX 278 ; N icircumflex ; B -7 0 280 741 ;
+C -1 ; WX 278 ; N igrave ; B -5 0 204 740 ;
+C -1 ; WX 556 ; N ncommaaccent ; B 70 -285 487 539 ;
+C -1 ; WX 222 ; N lcommaaccent ; B 63 -285 163 729 ;
+C -1 ; WX 584 ; N plusminus ; B 50 -11 534 623 ;
+C -1 ; WX 869 ; N onehalf ; B 61 -20 844 709 ;
+C -1 ; WX 869 ; N onequarter ; B 61 -20 849 709 ;
+C -1 ; WX 869 ; N threequarters ; B 16 -20 849 709 ;
+C -1 ; WX 278 ; N iacute ; B 65 0 274 740 ;
+C -1 ; WX 667 ; N Abreve ; B 17 0 653 931 ;
+C -1 ; WX 500 ; N kcommaaccent ; B 58 -285 502 729 ;
+C -1 ; WX 778 ; N Omacron ; B 38 -23 742 900 ;
+C -1 ; WX 222 ; N imacron ; B -16 0 231 701 ;
+C -1 ; WX 556 ; N emacron ; B 40 -23 513 701 ;
+C -1 ; WX 556 ; N amacron ; B 42 -23 535 701 ;
+C -1 ; WX 278 ; N tcommaaccent ; B 14 -285 254 668 ;
+C -1 ; WX 500 ; N ydieresis ; B 20 -218 478 715 ;
+C -1 ; WX 500 ; N zdotaccent ; B 31 0 457 716 ;
+C -1 ; WX 500 ; N zcaron ; B 31 0 457 741 ;
+C -1 ; WX 500 ; N zacute ; B 31 0 457 740 ;
+C -1 ; WX 500 ; N yacute ; B 20 -218 478 740 ;
+C -1 ; WX 556 ; N uhungarumlaut ; B 65 -23 530 740 ;
+C -1 ; WX 556 ; N eth ; B 36 -23 510 743 ;
+C -1 ; WX 556 ; N uring ; B 65 -23 482 754 ;
+C -1 ; WX 778 ; N Ocircumflex ; B 38 -23 742 940 ;
+C -1 ; WX 333 ; N commaaccent ; B 116 -285 216 -60 ;
+C -1 ; WX 737 ; N copyright ; B -13 -22 751 742 ;
+C -1 ; WX 737 ; N registered ; B -13 -22 751 742 ;
+C -1 ; WX 667 ; N Acircumflex ; B 17 0 653 940 ;
+C -1 ; WX 278 ; N idieresis ; B 3 0 269 708 ;
+C -1 ; WX 489 ; N lozenge ; B 16 0 462 744 ;
+C -1 ; WX 711 ; N Delta ; B 10 0 701 729 ;
+C -1 ; WX 548 ; N notequal ; B 32 -25 516 486 ;
+C -1 ; WX 542 ; N radical ; B 7 -36 512 913 ;
+C -1 ; WX 667 ; N Agrave ; B 17 0 653 939 ;
+C -1 ; WX 667 ; N Aacute ; B 17 0 653 939 ;
+C -1 ; WX 584 ; N lessequal ; B 45 -11 534 639 ;
+C -1 ; WX 584 ; N greaterequal ; B 45 -11 534 639 ;
+C -1 ; WX 584 ; N logicalnot ; B 40 86 544 375 ;
+C -1 ; WX 711 ; N summation ; B 17 -97 694 760 ;
+C -1 ; WX 490 ; N partialdiff ; B 22 -15 458 750 ;
+C -1 ; WX 722 ; N Ncommaaccent ; B 76 -285 646 729 ;
+C -1 ; WX 556 ; N dcroat ; B 26 -23 557 729 ;
+C -1 ; WX 260 ; N brokenbar ; B 100 -212 160 729 ;
+C -1 ; WX 556 ; N Lcommaaccent ; B 80 -285 533 729 ;
+C -1 ; WX 667 ; N Adieresis ; B 17 0 653 914 ;
+C -1 ; WX 556 ; N mu ; B 65 -220 544 524 ;
+C -1 ; WX 278 ; N .notdef ; B 191 0 191 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -36
+KPX A Ccedilla -36
+KPX A G -35
+KPX A O -33
+KPX A Odieresis -33
+KPX A Q -32
+KPX A T -93
+KPX A U -37
+KPX A Uacute -37
+KPX A Ucircumflex -37
+KPX A Udieresis -37
+KPX A Ugrave -37
+KPX A V -75
+KPX A W -51
+KPX A Y -99
+KPX A a -4
+KPX A b 4
+KPX A c -11
+KPX A ccedilla -10
+KPX A comma 5
+KPX A d -8
+KPX A e -16
+KPX A g -10
+KPX A guillemotleft -44
+KPX A guilsinglleft -40
+KPX A hyphen -3
+KPX A o -13
+KPX A period 5
+KPX A q -8
+KPX A quotedblright -56
+KPX A quoteright -65
+KPX A t -16
+KPX A u -12
+KPX A v -31
+KPX A w -21
+KPX A y -34
+KPX Aacute C -36
+KPX Aacute G -35
+KPX Aacute O -33
+KPX Aacute Q -32
+KPX Aacute T -93
+KPX Aacute U -37
+KPX Aacute V -75
+KPX Aacute W -51
+KPX Aacute Y -99
+KPX Aacute a -4
+KPX Aacute b 4
+KPX Aacute c -11
+KPX Aacute comma 5
+KPX Aacute d -8
+KPX Aacute e -16
+KPX Aacute g -10
+KPX Aacute guillemotleft -44
+KPX Aacute guilsinglleft -40
+KPX Aacute hyphen -3
+KPX Aacute o -13
+KPX Aacute period 5
+KPX Aacute q -8
+KPX Aacute quoteright -65
+KPX Aacute t -16
+KPX Aacute u -12
+KPX Aacute v -31
+KPX Aacute w -21
+KPX Aacute y -34
+KPX Acircumflex C -36
+KPX Acircumflex G -35
+KPX Acircumflex O -33
+KPX Acircumflex Q -32
+KPX Acircumflex T -93
+KPX Acircumflex U -37
+KPX Acircumflex V -75
+KPX Acircumflex W -51
+KPX Acircumflex Y -99
+KPX Acircumflex comma 5
+KPX Acircumflex period 5
+KPX Adieresis C -36
+KPX Adieresis G -35
+KPX Adieresis O -33
+KPX Adieresis Q -32
+KPX Adieresis T -93
+KPX Adieresis U -37
+KPX Adieresis V -75
+KPX Adieresis W -51
+KPX Adieresis Y -99
+KPX Adieresis a -4
+KPX Adieresis b 4
+KPX Adieresis c -11
+KPX Adieresis comma 5
+KPX Adieresis d -8
+KPX Adieresis g -10
+KPX Adieresis guillemotleft -44
+KPX Adieresis guilsinglleft -40
+KPX Adieresis hyphen -3
+KPX Adieresis o -13
+KPX Adieresis period 5
+KPX Adieresis q -8
+KPX Adieresis quotedblright -56
+KPX Adieresis quoteright -65
+KPX Adieresis t -16
+KPX Adieresis u -12
+KPX Adieresis v -31
+KPX Adieresis w -21
+KPX Adieresis y -34
+KPX Agrave C -36
+KPX Agrave G -35
+KPX Agrave O -33
+KPX Agrave Q -32
+KPX Agrave T -93
+KPX Agrave U -37
+KPX Agrave V -75
+KPX Agrave W -51
+KPX Agrave Y -99
+KPX Agrave comma 5
+KPX Agrave period 5
+KPX Aring C -36
+KPX Aring G -35
+KPX Aring O -33
+KPX Aring Q -32
+KPX Aring T -93
+KPX Aring U -37
+KPX Aring V -75
+KPX Aring W -51
+KPX Aring Y -99
+KPX Aring a -4
+KPX Aring b 4
+KPX Aring c -11
+KPX Aring comma 5
+KPX Aring d -8
+KPX Aring e -16
+KPX Aring g -10
+KPX Aring guillemotleft -44
+KPX Aring guilsinglleft -40
+KPX Aring hyphen -3
+KPX Aring o -13
+KPX Aring period 5
+KPX Aring q -8
+KPX Aring quotedblright -56
+KPX Aring quoteright -65
+KPX Aring t -16
+KPX Aring u -12
+KPX Aring v -31
+KPX Aring w -21
+KPX Aring y -34
+KPX Atilde C -36
+KPX Atilde G -35
+KPX Atilde O -33
+KPX Atilde Q -32
+KPX Atilde T -93
+KPX Atilde U -37
+KPX Atilde V -75
+KPX Atilde W -51
+KPX Atilde Y -99
+KPX Atilde comma 5
+KPX Atilde period 5
+KPX B A -21
+KPX B AE -21
+KPX B Aacute -21
+KPX B Acircumflex -21
+KPX B Adieresis -21
+KPX B Aring -21
+KPX B Atilde -21
+KPX B O -7
+KPX B OE -5
+KPX B Oacute -7
+KPX B Ocircumflex -7
+KPX B Odieresis -7
+KPX B Ograve -7
+KPX B Oslash -1
+KPX B V -41
+KPX B W -25
+KPX B Y -44
+KPX C A -32
+KPX C AE -33
+KPX C Aacute -32
+KPX C Adieresis -32
+KPX C Aring -32
+KPX C H -12
+KPX C K -10
+KPX C O -8
+KPX C Oacute -8
+KPX C Odieresis -8
+KPX Ccedilla A -31
+KPX D A -42
+KPX D Aacute -42
+KPX D Acircumflex -42
+KPX D Adieresis -42
+KPX D Agrave -42
+KPX D Aring -42
+KPX D Atilde -42
+KPX D J -5
+KPX D T -45
+KPX D V -51
+KPX D W -29
+KPX D X -53
+KPX D Y -63
+KPX F A -69
+KPX F Aacute -69
+KPX F Acircumflex -69
+KPX F Adieresis -69
+KPX F Agrave -69
+KPX F Aring -69
+KPX F Atilde -69
+KPX F J -51
+KPX F O -22
+KPX F Odieresis -22
+KPX F a -33
+KPX F aacute -33
+KPX F adieresis -33
+KPX F ae -29
+KPX F aring -33
+KPX F comma -108
+KPX F e -24
+KPX F eacute -24
+KPX F hyphen -14
+KPX F i -10
+KPX F j -12
+KPX F o -21
+KPX F oacute -21
+KPX F odieresis -21
+KPX F oe -23
+KPX F oslash -21
+KPX F period -108
+KPX F r -35
+KPX F u -33
+KPX G A -6
+KPX G AE -3
+KPX G Aacute -6
+KPX G Acircumflex -6
+KPX G Adieresis -6
+KPX G Agrave -6
+KPX G Aring -6
+KPX G Atilde -6
+KPX G T -44
+KPX G V -50
+KPX G W -28
+KPX G Y -62
+KPX J A -32
+KPX J AE -31
+KPX J Adieresis -32
+KPX J Aring -32
+KPX K C -51
+KPX K G -51
+KPX K O -48
+KPX K OE -45
+KPX K Oacute -48
+KPX K Odieresis -48
+KPX K S -38
+KPX K T 20
+KPX K a -11
+KPX K adieresis -11
+KPX K ae -7
+KPX K aring -11
+KPX K e -32
+KPX K hyphen -47
+KPX K o -29
+KPX K oacute -29
+KPX K odieresis -29
+KPX K u -19
+KPX K udieresis -19
+KPX K y -62
+KPX L A 17
+KPX L AE 20
+KPX L Aacute 17
+KPX L Adieresis 17
+KPX L Aring 17
+KPX L C -41
+KPX L Ccedilla -37
+KPX L G -42
+KPX L O -41
+KPX L Oacute -41
+KPX L Ocircumflex -41
+KPX L Odieresis -41
+KPX L Ograve -41
+KPX L Otilde -41
+KPX L S -19
+KPX L T -105
+KPX L U -35
+KPX L Udieresis -35
+KPX L V -105
+KPX L W -68
+KPX L Y -121
+KPX L hyphen -125
+KPX L quotedblright -141
+KPX L quoteright -149
+KPX L u -7
+KPX L udieresis -7
+KPX L y -56
+KPX N A -9
+KPX N AE -6
+KPX N Aacute -9
+KPX N Adieresis -9
+KPX N Aring -9
+KPX N C -3
+KPX N Ccedilla -3
+KPX N G -2
+KPX N O 0
+KPX N Oacute 0
+KPX N Odieresis 0
+KPX N a -5
+KPX N aacute -5
+KPX N adieresis -5
+KPX N ae -2
+KPX N aring -5
+KPX N comma -7
+KPX N e 0
+KPX N eacute 0
+KPX N o 2
+KPX N oacute 2
+KPX N odieresis 2
+KPX N oslash 4
+KPX N period -7
+KPX N u 0
+KPX N udieresis 0
+KPX O A -35
+KPX O AE -39
+KPX O Aacute -35
+KPX O Adieresis -35
+KPX O Aring -35
+KPX O T -42
+KPX O V -45
+KPX O W -23
+KPX O X -46
+KPX O Y -59
+KPX Oacute A -35
+KPX Oacute T -42
+KPX Oacute V -45
+KPX Oacute W -23
+KPX Oacute Y -59
+KPX Ocircumflex T -42
+KPX Ocircumflex V -45
+KPX Ocircumflex Y -59
+KPX Odieresis A -35
+KPX Odieresis T -42
+KPX Odieresis V -45
+KPX Odieresis W -23
+KPX Odieresis X -46
+KPX Odieresis Y -59
+KPX Ograve T -42
+KPX Ograve V -45
+KPX Ograve Y -59
+KPX Oslash A -33
+KPX Otilde T -42
+KPX Otilde V -45
+KPX Otilde Y -59
+KPX P A -78
+KPX P AE -86
+KPX P Aacute -78
+KPX P Adieresis -78
+KPX P Aring -78
+KPX P J -78
+KPX P a -28
+KPX P aacute -28
+KPX P adieresis -28
+KPX P ae -24
+KPX P aring -28
+KPX P comma -135
+KPX P e -31
+KPX P eacute -31
+KPX P hyphen -40
+KPX P o -27
+KPX P oacute -27
+KPX P odieresis -27
+KPX P oe -28
+KPX P oslash -27
+KPX P period -135
+KPX R C -16
+KPX R Ccedilla -16
+KPX R G -15
+KPX R O -13
+KPX R OE -11
+KPX R Oacute -13
+KPX R Odieresis -13
+KPX R T -23
+KPX R U -17
+KPX R Udieresis -17
+KPX R V -39
+KPX R W -27
+KPX R Y -43
+KPX R a -15
+KPX R aacute -15
+KPX R adieresis -15
+KPX R ae -12
+KPX R aring -15
+KPX R e -12
+KPX R eacute -12
+KPX R hyphen -2
+KPX R o -9
+KPX R oacute -9
+KPX R odieresis -9
+KPX R oe -11
+KPX R u -9
+KPX R uacute -9
+KPX R udieresis -9
+KPX R y -8
+KPX S A -22
+KPX S AE -22
+KPX S Aacute -22
+KPX S Adieresis -22
+KPX S Aring -22
+KPX S T -28
+KPX S V -42
+KPX S W -28
+KPX S Y -48
+KPX S t -3
+KPX T A -95
+KPX T AE -97
+KPX T Aacute -95
+KPX T Acircumflex -95
+KPX T Adieresis -95
+KPX T Agrave -95
+KPX T Aring -95
+KPX T Atilde -95
+KPX T C -44
+KPX T G -45
+KPX T J -100
+KPX T O -42
+KPX T OE -35
+KPX T Oacute -42
+KPX T Ocircumflex -42
+KPX T Odieresis -42
+KPX T Ograve -42
+KPX T Oslash -41
+KPX T Otilde -42
+KPX T S -24
+KPX T V 12
+KPX T W 16
+KPX T Y 20
+KPX T a -100
+KPX T ae -97
+KPX T c -90
+KPX T colon -133
+KPX T comma -100
+KPX T e -95
+KPX T g -89
+KPX T guillemotleft -121
+KPX T guilsinglleft -117
+KPX T hyphen -77
+KPX T i -3
+KPX T j -5
+KPX T o -92
+KPX T oslash -87
+KPX T period -100
+KPX T r -92
+KPX T s -92
+KPX T semicolon -129
+KPX T u -91
+KPX T v -95
+KPX T w -93
+KPX T y -100
+KPX U A -36
+KPX U AE -39
+KPX U Aacute -36
+KPX U Acircumflex -36
+KPX U Adieresis -36
+KPX U Aring -36
+KPX U Atilde -36
+KPX U comma -27
+KPX U m -4
+KPX U n -4
+KPX U p 3
+KPX U period -25
+KPX U r -4
+KPX Uacute A -36
+KPX Uacute comma -27
+KPX Uacute m -4
+KPX Uacute n -4
+KPX Uacute p 3
+KPX Uacute period -25
+KPX Uacute r -4
+KPX Ucircumflex A -36
+KPX Udieresis A -36
+KPX Udieresis b 3
+KPX Udieresis comma -27
+KPX Udieresis m -4
+KPX Udieresis n -4
+KPX Udieresis p 3
+KPX Udieresis period -25
+KPX Udieresis r -4
+KPX Ugrave A -36
+KPX V A -71
+KPX V AE -78
+KPX V Aacute -71
+KPX V Acircumflex -71
+KPX V Adieresis -71
+KPX V Agrave -71
+KPX V Aring -71
+KPX V Atilde -71
+KPX V C -43
+KPX V G -42
+KPX V O -40
+KPX V Oacute -40
+KPX V Ocircumflex -40
+KPX V Odieresis -40
+KPX V Ograve -40
+KPX V Oslash -33
+KPX V Otilde -40
+KPX V S -35
+KPX V T 15
+KPX V a -59
+KPX V ae -55
+KPX V colon -66
+KPX V comma -89
+KPX V e -57
+KPX V g -50
+KPX V guillemotleft -83
+KPX V guilsinglleft -80
+KPX V hyphen -38
+KPX V i -5
+KPX V o -54
+KPX V oslash -50
+KPX V period -89
+KPX V r -42
+KPX V semicolon -66
+KPX V u -41
+KPX V y -20
+KPX W A -50
+KPX W AE -56
+KPX W Aacute -50
+KPX W Acircumflex -50
+KPX W Adieresis -50
+KPX W Agrave -50
+KPX W Aring -50
+KPX W Atilde -50
+KPX W C -23
+KPX W G -22
+KPX W O -20
+KPX W Oacute -20
+KPX W Ocircumflex -20
+KPX W Odieresis -20
+KPX W Ograve -20
+KPX W Oslash -13
+KPX W Otilde -20
+KPX W S -24
+KPX W T 19
+KPX W a -38
+KPX W ae -34
+KPX W colon -52
+KPX W comma -56
+KPX W e -32
+KPX W g -25
+KPX W guillemotleft -58
+KPX W guilsinglleft -54
+KPX W hyphen -13
+KPX W i -1
+KPX W o -29
+KPX W oslash -25
+KPX W period -56
+KPX W r -28
+KPX W semicolon -53
+KPX W u -28
+KPX W y -6
+KPX X C -48
+KPX X O -45
+KPX X Odieresis -45
+KPX X Q -44
+KPX X a -15
+KPX X e -36
+KPX X hyphen -51
+KPX X o -33
+KPX X u -24
+KPX X y -61
+KPX Y A -96
+KPX Y AE -103
+KPX Y Aacute -96
+KPX Y Acircumflex -96
+KPX Y Adieresis -96
+KPX Y Agrave -96
+KPX Y Aring -96
+KPX Y Atilde -96
+KPX Y C -58
+KPX Y G -58
+KPX Y O -56
+KPX Y Oacute -56
+KPX Y Ocircumflex -56
+KPX Y Odieresis -56
+KPX Y Ograve -56
+KPX Y Oslash -54
+KPX Y Otilde -56
+KPX Y S -41
+KPX Y T 23
+KPX Y a -88
+KPX Y ae -84
+KPX Y colon -87
+KPX Y comma -111
+KPX Y e -89
+KPX Y g -83
+KPX Y guillemotleft -123
+KPX Y guilsinglleft -119
+KPX Y hyphen -84
+KPX Y i 3
+KPX Y o -86
+KPX Y oslash -82
+KPX Y p -54
+KPX Y period -111
+KPX Y semicolon -88
+KPX Y u -63
+KPX Y v -36
+KPX Z v -33
+KPX Z y -38
+KPX a j -4
+KPX a quoteright -23
+KPX a v -21
+KPX a w -13
+KPX a y -26
+KPX aacute v -21
+KPX aacute w -13
+KPX aacute y -26
+KPX adieresis v -21
+KPX adieresis w -13
+KPX adieresis y -26
+KPX ae v -16
+KPX ae w -10
+KPX ae y -20
+KPX agrave v -21
+KPX agrave w -13
+KPX agrave y -26
+KPX aring v -21
+KPX aring w -13
+KPX aring y -26
+KPX b v -11
+KPX b w -3
+KPX b y -15
+KPX c h 1
+KPX c k 7
+KPX comma one -100
+KPX comma quotedblright -41
+KPX comma quoteright -50
+KPX e quoteright -18
+KPX e t -10
+KPX e v -15
+KPX e w -9
+KPX e x -27
+KPX e y -19
+KPX eacute v -15
+KPX eacute w -9
+KPX eacute y -19
+KPX ecircumflex v -15
+KPX ecircumflex w -9
+KPX ecircumflex y -19
+KPX eight four 1
+KPX eight one -48
+KPX eight seven -33
+KPX f a -9
+KPX f aacute -9
+KPX f adieresis -9
+KPX f ae -5
+KPX f aring -9
+KPX f e -15
+KPX f eacute -15
+KPX f f 22
+KPX f i -2
+KPX f j -4
+KPX f l -3
+KPX f o -10
+KPX f oacute -10
+KPX f odieresis -10
+KPX f oe -12
+KPX f oslash -9
+KPX f quoteright 0
+KPX f s 0
+KPX f t 24
+KPX five four 1
+KPX five one -76
+KPX five seven -26
+KPX four four 5
+KPX four one -84
+KPX four seven -56
+KPX g a -5
+KPX g adieresis -5
+KPX g ae -1
+KPX g aring -5
+KPX g e 0
+KPX g eacute 0
+KPX g l 0
+KPX g oacute 3
+KPX g odieresis 3
+KPX g r 0
+KPX guillemotright A -50
+KPX guillemotright AE -54
+KPX guillemotright Aacute -50
+KPX guillemotright Adieresis -50
+KPX guillemotright Aring -50
+KPX guillemotright T -126
+KPX guillemotright V -93
+KPX guillemotright W -66
+KPX guillemotright Y -133
+KPX guilsinglright A -44
+KPX guilsinglright AE -48
+KPX guilsinglright Aacute -44
+KPX guilsinglright Adieresis -44
+KPX guilsinglright Aring -44
+KPX guilsinglright T -121
+KPX guilsinglright V -88
+KPX guilsinglright W -60
+KPX guilsinglright Y -128
+KPX h quoteright -15
+KPX h y -18
+KPX hyphen A -7
+KPX hyphen AE -11
+KPX hyphen Aacute -7
+KPX hyphen Adieresis -7
+KPX hyphen Aring -7
+KPX hyphen T -80
+KPX hyphen V -46
+KPX hyphen W -19
+KPX hyphen Y -92
+KPX i T -7
+KPX i j -3
+KPX k a -2
+KPX k aacute -2
+KPX k adieresis -2
+KPX k ae 2
+KPX k aring -2
+KPX k comma 0
+KPX k e -21
+KPX k eacute -21
+KPX k g -16
+KPX k hyphen -41
+KPX k o -19
+KPX k oacute -19
+KPX k odieresis -19
+KPX k period 0
+KPX k s -3
+KPX k u -11
+KPX k udieresis -6
+KPX l v 0
+KPX l y -5
+KPX m p 5
+KPX m v -13
+KPX m w -7
+KPX m y -18
+KPX n T -96
+KPX n p 5
+KPX n quoteright -14
+KPX n v -13
+KPX n w -7
+KPX n y -18
+KPX nine four -3
+KPX nine one -43
+KPX nine seven -37
+KPX o T -99
+KPX o quoteright -21
+KPX o t -10
+KPX o v -18
+KPX o w -10
+KPX o x -27
+KPX o y -22
+KPX oacute v -18
+KPX oacute w -10
+KPX oacute y -22
+KPX ocircumflex t -10
+KPX odieresis t -10
+KPX odieresis v -18
+KPX odieresis w -10
+KPX odieresis x -27
+KPX odieresis y -22
+KPX ograve v -18
+KPX ograve w -10
+KPX ograve y -22
+KPX one comma -74
+KPX one eight -65
+KPX one five -67
+KPX one four -81
+KPX one nine -65
+KPX one one -118
+KPX one period -74
+KPX one seven -90
+KPX one six -62
+KPX one three -67
+KPX one two -69
+KPX one zero -62
+KPX p t -4
+KPX p y -16
+KPX period one -101
+KPX period quotedblright -41
+KPX period quoteright -51
+KPX q c 8
+KPX q u 4
+KPX quotedblbase A 30
+KPX quotedblbase AE 30
+KPX quotedblbase T -75
+KPX quotedblbase V -69
+KPX quotedblbase W -34
+KPX quotedblbase Y -91
+KPX quotedblleft A -52
+KPX quotedblleft AE -64
+KPX quotedblleft Aacute -52
+KPX quotedblleft Adieresis -52
+KPX quotedblleft Aring -52
+KPX quotedblleft T 9
+KPX quotedblleft V 15
+KPX quotedblleft W 27
+KPX quotedblleft Y 5
+KPX quotedblright A -53
+KPX quotedblright AE -66
+KPX quotedblright Aacute -53
+KPX quotedblright Adieresis -53
+KPX quotedblright Aring -53
+KPX quotedblright T 11
+KPX quotedblright V 15
+KPX quotedblright W 26
+KPX quotedblright Y 7
+KPX quoteleft A -67
+KPX quoteleft AE -79
+KPX quoteleft Aacute -67
+KPX quoteleft Adieresis -67
+KPX quoteleft Aring -67
+KPX quoteleft T -5
+KPX quoteleft V 0
+KPX quoteleft W 12
+KPX quoteleft Y -9
+KPX quoteright A -72
+KPX quoteright AE -85
+KPX quoteright Aacute -72
+KPX quoteright Adieresis -72
+KPX quoteright Aring -72
+KPX quoteright comma -60
+KPX quoteright d -20
+KPX quoteright o -26
+KPX quoteright period -60
+KPX quoteright r -18
+KPX quoteright s -18
+KPX quoteright t -7
+KPX quoteright v -2
+KPX quoteright w 2
+KPX quoteright y -6
+KPX r a -5
+KPX r aacute -5
+KPX r acircumflex -5
+KPX r adieresis -5
+KPX r ae -1
+KPX r agrave -5
+KPX r aring -5
+KPX r c -6
+KPX r ccedilla -9
+KPX r colon -22
+KPX r comma -69
+KPX r d -1
+KPX r e -11
+KPX r eacute -11
+KPX r ecircumflex -11
+KPX r egrave -11
+KPX r f 26
+KPX r g -4
+KPX r h 0
+KPX r hyphen -47
+KPX r i 1
+KPX r j 0
+KPX r k 6
+KPX r l 1
+KPX r m 0
+KPX r n 0
+KPX r o -6
+KPX r oacute -6
+KPX r ocircumflex -6
+KPX r odieresis -6
+KPX r oe -8
+KPX r ograve -6
+KPX r oslash -6
+KPX r p 8
+KPX r period -69
+KPX r q -3
+KPX r quoteright 1
+KPX r r 0
+KPX r s 4
+KPX r semicolon -22
+KPX r t 28
+KPX r u 2
+KPX r v 29
+KPX r w 31
+KPX r x 20
+KPX r y 24
+KPX r z 9
+KPX s quoteright -22
+KPX s t -3
+KPX seven colon -77
+KPX seven comma -119
+KPX seven eight -28
+KPX seven five -30
+KPX seven four -93
+KPX seven one -53
+KPX seven period -119
+KPX seven seven -4
+KPX seven six -40
+KPX seven three -23
+KPX seven two -28
+KPX six four 1
+KPX six one -43
+KPX six seven -30
+KPX t S -8
+KPX t a -1
+KPX t aacute -1
+KPX t adieresis -1
+KPX t ae 2
+KPX t aring -1
+KPX t colon -28
+KPX t e -14
+KPX t eacute -14
+KPX t h -3
+KPX t o -12
+KPX t oacute -12
+KPX t odieresis -12
+KPX t quoteright -1
+KPX t semicolon -28
+KPX three four -2
+KPX three one -49
+KPX three seven -33
+KPX two four -37
+KPX two one -36
+KPX two seven -25
+KPX u quoteright -8
+KPX v a -18
+KPX v aacute -18
+KPX v acircumflex -18
+KPX v adieresis -18
+KPX v ae -14
+KPX v agrave -18
+KPX v aring -18
+KPX v atilde -18
+KPX v c -16
+KPX v colon -23
+KPX v comma -69
+KPX v e -21
+KPX v eacute -21
+KPX v ecircumflex -21
+KPX v egrave -21
+KPX v g -14
+KPX v hyphen -12
+KPX v l 0
+KPX v o -17
+KPX v oacute -17
+KPX v odieresis -17
+KPX v ograve -17
+KPX v oslash -17
+KPX v period -69
+KPX v s -9
+KPX v semicolon -23
+KPX w a -15
+KPX w aacute -15
+KPX w acircumflex -15
+KPX w adieresis -15
+KPX w ae -11
+KPX w agrave -15
+KPX w aring -15
+KPX w atilde -15
+KPX w c -7
+KPX w colon -23
+KPX w comma -50
+KPX w e -12
+KPX w eacute -12
+KPX w ecircumflex -12
+KPX w egrave -12
+KPX w g -6
+KPX w hyphen -1
+KPX w l 0
+KPX w o -9
+KPX w oacute -9
+KPX w odieresis -9
+KPX w ograve -9
+KPX w oslash -6
+KPX w period -50
+KPX w s -5
+KPX w semicolon -23
+KPX x a -17
+KPX x c -23
+KPX x e -28
+KPX x eacute -28
+KPX x o -25
+KPX x q -20
+KPX y a -22
+KPX y aacute -22
+KPX y acircumflex -22
+KPX y adieresis -22
+KPX y ae -18
+KPX y agrave -22
+KPX y aring -22
+KPX y atilde -22
+KPX y c -19
+KPX y colon -27
+KPX y comma -70
+KPX y e -24
+KPX y eacute -24
+KPX y ecircumflex -24
+KPX y egrave -24
+KPX y g -17
+KPX y hyphen -14
+KPX y l -4
+KPX y o -20
+KPX y oacute -20
+KPX y odieresis -20
+KPX y ograve -20
+KPX y oslash -19
+KPX y period -70
+KPX y s -12
+KPX y semicolon -27
+KPX zero four -2
+KPX zero one -46
+KPX zero seven -39
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/n019003l.pfb b/Master/xemtex/gsfonts/n019003l.pfb
new file mode 100644
index 00000000000..ba9ea607e65
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019003l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/n019003l.pfm b/Master/xemtex/gsfonts/n019003l.pfm
new file mode 100644
index 00000000000..299aa873a6d
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019003l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/n019004l.afm b/Master/xemtex/gsfonts/n019004l.afm
new file mode 100644
index 00000000000..06adbcbfa1c
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019004l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName NimbusSanL-Bold
+FullName Nimbus Sans L Bold
+FamilyName Nimbus Sans L
+Weight Bold
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -155
+UnderlineThickness 69
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -173 -307 1003 949
+CapHeight 729
+XHeight 540
+Descender -217
+Ascender 729
+StartCharMetrics 316
+C 32 ; WX 278 ; N space ; B 214 0 214 0 ;
+C 33 ; WX 333 ; N exclam ; B 112 0 262 726 ;
+C 34 ; WX 474 ; N quotedbl ; B 50 470 424 729 ;
+C 35 ; WX 556 ; N numbersign ; B 3 -32 553 697 ;
+C 36 ; WX 556 ; N dollar ; B 22 -126 527 763 ;
+C 37 ; WX 889 ; N percent ; B 22 -20 863 709 ;
+C 38 ; WX 722 ; N ampersand ; B 55 -23 694 723 ;
+C 39 ; WX 278 ; N quoteright ; B 66 469 201 729 ;
+C 40 ; WX 333 ; N parenleft ; B 40 -200 303 729 ;
+C 41 ; WX 333 ; N parenright ; B 22 -200 285 729 ;
+C 42 ; WX 389 ; N asterisk ; B 23 407 357 729 ;
+C 43 ; WX 584 ; N plus ; B 50 -10 533 473 ;
+C 44 ; WX 278 ; N comma ; B 64 -174 214 146 ;
+C 45 ; WX 333 ; N hyphen ; B 26 207 298 342 ;
+C 46 ; WX 278 ; N period ; B 64 0 214 146 ;
+C 47 ; WX 278 ; N slash ; B 2 -14 275 714 ;
+C 48 ; WX 556 ; N zero ; B 29 -23 517 724 ;
+C 49 ; WX 556 ; N one ; B 68 0 378 709 ;
+C 50 ; WX 556 ; N two ; B 30 0 515 724 ;
+C 51 ; WX 556 ; N three ; B 29 -23 516 724 ;
+C 52 ; WX 556 ; N four ; B 24 0 522 709 ;
+C 53 ; WX 556 ; N five ; B 27 -23 517 709 ;
+C 54 ; WX 556 ; N six ; B 32 -23 519 724 ;
+C 55 ; WX 556 ; N seven ; B 29 0 528 709 ;
+C 56 ; WX 556 ; N eight ; B 22 -23 525 724 ;
+C 57 ; WX 556 ; N nine ; B 28 -24 516 724 ;
+C 58 ; WX 333 ; N colon ; B 113 0 263 520 ;
+C 59 ; WX 333 ; N semicolon ; B 113 -174 263 520 ;
+C 60 ; WX 584 ; N less ; B 40 -10 529 474 ;
+C 61 ; WX 584 ; N equal ; B 50 52 534 411 ;
+C 62 ; WX 584 ; N greater ; B 40 -10 529 474 ;
+C 63 ; WX 611 ; N question ; B 64 0 556 744 ;
+C 64 ; WX 975 ; N at ; B 27 -138 947 745 ;
+C 65 ; WX 722 ; N A ; B 26 0 703 729 ;
+C 66 ; WX 722 ; N B ; B 82 0 666 729 ;
+C 67 ; WX 722 ; N C ; B 44 -23 685 741 ;
+C 68 ; WX 722 ; N D ; B 77 0 681 729 ;
+C 69 ; WX 667 ; N E ; B 79 0 624 729 ;
+C 70 ; WX 611 ; N F ; B 74 0 586 729 ;
+C 71 ; WX 778 ; N G ; B 42 -23 711 741 ;
+C 72 ; WX 722 ; N H ; B 68 0 657 729 ;
+C 73 ; WX 278 ; N I ; B 63 0 213 729 ;
+C 74 ; WX 556 ; N J ; B 24 -23 486 729 ;
+C 75 ; WX 722 ; N K ; B 74 0 717 729 ;
+C 76 ; WX 611 ; N L ; B 80 0 579 729 ;
+C 77 ; WX 833 ; N M ; B 66 0 776 729 ;
+C 78 ; WX 722 ; N N ; B 68 0 661 729 ;
+C 79 ; WX 778 ; N O ; B 40 -23 742 741 ;
+C 80 ; WX 667 ; N P ; B 76 0 633 729 ;
+C 81 ; WX 778 ; N Q ; B 43 -54 745 741 ;
+C 82 ; WX 722 ; N R ; B 80 0 677 729 ;
+C 83 ; WX 667 ; N S ; B 32 -23 633 741 ;
+C 84 ; WX 611 ; N T ; B 14 0 598 729 ;
+C 85 ; WX 722 ; N U ; B 76 -23 654 729 ;
+C 86 ; WX 667 ; N V ; B 24 0 647 729 ;
+C 87 ; WX 944 ; N W ; B 13 0 932 729 ;
+C 88 ; WX 667 ; N X ; B 22 0 653 729 ;
+C 89 ; WX 667 ; N Y ; B 27 0 650 729 ;
+C 90 ; WX 611 ; N Z ; B 30 0 578 729 ;
+C 91 ; WX 333 ; N bracketleft ; B 66 -200 308 729 ;
+C 92 ; WX 278 ; N backslash ; B -12 -14 289 714 ;
+C 93 ; WX 333 ; N bracketright ; B 18 -200 260 729 ;
+C 94 ; WX 584 ; N asciicircum ; B 61 270 522 695 ;
+C 95 ; WX 556 ; N underscore ; B -22 -189 578 -120 ;
+C 96 ; WX 278 ; N quoteleft ; B 67 469 202 729 ;
+C 97 ; WX 556 ; N a ; B 28 -23 524 549 ;
+C 98 ; WX 611 ; N b ; B 59 -23 575 729 ;
+C 99 ; WX 556 ; N c ; B 34 -23 522 549 ;
+C 100 ; WX 611 ; N d ; B 29 -23 545 729 ;
+C 101 ; WX 556 ; N e ; B 22 -23 525 549 ;
+C 102 ; WX 333 ; N f ; B 14 0 313 729 ;
+C 103 ; WX 611 ; N g ; B 34 -218 541 549 ;
+C 104 ; WX 611 ; N h ; B 67 0 541 729 ;
+C 105 ; WX 278 ; N i ; B 67 0 207 729 ;
+C 106 ; WX 278 ; N j ; B 4 -218 210 729 ;
+C 107 ; WX 556 ; N k ; B 59 0 548 729 ;
+C 108 ; WX 278 ; N l ; B 67 0 207 729 ;
+C 109 ; WX 889 ; N m ; B 60 0 824 549 ;
+C 110 ; WX 611 ; N n ; B 63 0 546 549 ;
+C 111 ; WX 611 ; N o ; B 35 -23 569 549 ;
+C 112 ; WX 611 ; N p ; B 58 -218 574 549 ;
+C 113 ; WX 611 ; N q ; B 28 -218 544 549 ;
+C 114 ; WX 389 ; N r ; B 63 0 370 549 ;
+C 115 ; WX 556 ; N s ; B 29 -23 520 549 ;
+C 116 ; WX 333 ; N t ; B 14 -23 301 674 ;
+C 117 ; WX 611 ; N u ; B 58 -23 541 540 ;
+C 118 ; WX 556 ; N v ; B 14 0 536 540 ;
+C 119 ; WX 778 ; N w ; B 5 0 766 540 ;
+C 120 ; WX 556 ; N x ; B 16 0 535 540 ;
+C 121 ; WX 556 ; N y ; B 9 -219 538 540 ;
+C 122 ; WX 500 ; N z ; B 21 0 468 540 ;
+C 123 ; WX 389 ; N braceleft ; B 37 -200 317 729 ;
+C 124 ; WX 280 ; N bar ; B 100 -200 180 729 ;
+C 125 ; WX 389 ; N braceright ; B 72 -200 352 729 ;
+C 126 ; WX 584 ; N asciitilde ; B 60 142 519 314 ;
+C 161 ; WX 333 ; N exclamdown ; B 66 -186 216 540 ;
+C 162 ; WX 556 ; N cent ; B 36 -124 522 634 ;
+C 163 ; WX 556 ; N sterling ; B 31 -23 537 715 ;
+C 164 ; WX 167 ; N fraction ; B -173 -20 337 715 ;
+C 165 ; WX 556 ; N yen ; B 5 0 552 704 ;
+C 166 ; WX 556 ; N florin ; B 21 -220 535 744 ;
+C 167 ; WX 556 ; N section ; B 33 -201 518 723 ;
+C 168 ; WX 556 ; N currency ; B 26 100 530 604 ;
+C 169 ; WX 238 ; N quotesingle ; B 50 470 188 729 ;
+C 170 ; WX 500 ; N quotedblleft ; B 71 469 433 729 ;
+C 171 ; WX 556 ; N guillemotleft ; B 88 72 468 481 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 83 72 250 481 ;
+C 173 ; WX 333 ; N guilsinglright ; B 80 72 247 481 ;
+C 174 ; WX 611 ; N fi ; B 9 0 548 729 ;
+C 175 ; WX 611 ; N fl ; B 12 0 546 729 ;
+C 177 ; WX 556 ; N endash ; B -9 207 557 311 ;
+C 178 ; WX 556 ; N dagger ; B 31 -194 523 709 ;
+C 179 ; WX 556 ; N daggerdbl ; B 28 -194 520 709 ;
+C 180 ; WX 278 ; N periodcentered ; B 64 169 188 292 ;
+C 182 ; WX 556 ; N paragraph ; B 19 -191 529 729 ;
+C 183 ; WX 350 ; N bullet ; B 50 175 300 425 ;
+C 184 ; WX 278 ; N quotesinglbase ; B 66 -135 201 125 ;
+C 185 ; WX 500 ; N quotedblbase ; B 72 -135 432 125 ;
+C 186 ; WX 500 ; N quotedblright ; B 73 469 440 729 ;
+C 187 ; WX 556 ; N guillemotright ; B 88 72 462 481 ;
+C 188 ; WX 1000 ; N ellipsis ; B 92 0 908 146 ;
+C 189 ; WX 1000 ; N perthousand ; B 11 -22 990 739 ;
+C 191 ; WX 611 ; N questiondown ; B 51 -204 544 540 ;
+C 193 ; WX 333 ; N grave ; B 17 607 213 757 ;
+C 194 ; WX 333 ; N acute ; B 121 607 317 757 ;
+C 195 ; WX 333 ; N circumflex ; B 8 607 326 757 ;
+C 196 ; WX 333 ; N tilde ; B -9 621 345 749 ;
+C 197 ; WX 333 ; N macron ; B 16 640 315 719 ;
+C 198 ; WX 333 ; N breve ; B 35 605 299 748 ;
+C 199 ; WX 333 ; N dotaccent ; B 112 621 222 743 ;
+C 200 ; WX 333 ; N dieresis ; B 18 621 314 743 ;
+C 202 ; WX 333 ; N ring ; B 77 590 257 770 ;
+C 203 ; WX 333 ; N cedilla ; B 27 -220 294 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B -44 610 340 757 ;
+C 206 ; WX 333 ; N ogonek ; B 45 -234 268 0 ;
+C 207 ; WX 333 ; N caron ; B 9 607 327 757 ;
+C 208 ; WX 1000 ; N emdash ; B -7 207 1003 311 ;
+C 225 ; WX 1000 ; N AE ; B 1 0 966 729 ;
+C 227 ; WX 370 ; N ordfeminine ; B 31 262 329 729 ;
+C 232 ; WX 611 ; N Lslash ; B 0 0 597 729 ;
+C 233 ; WX 778 ; N Oslash ; B 31 -39 755 749 ;
+C 234 ; WX 1000 ; N OE ; B 28 -23 970 741 ;
+C 235 ; WX 365 ; N ordmasculine ; B 23 262 343 729 ;
+C 241 ; WX 889 ; N ae ; B 27 -24 857 549 ;
+C 245 ; WX 278 ; N dotlessi ; B 67 0 207 540 ;
+C 248 ; WX 278 ; N lslash ; B 0 0 252 729 ;
+C 249 ; WX 611 ; N oslash ; B 11 -38 598 557 ;
+C 250 ; WX 944 ; N oe ; B 23 -23 920 549 ;
+C 251 ; WX 611 ; N germandbls ; B 67 -17 575 729 ;
+C -1 ; WX 722 ; N Udieresis ; B 76 -23 654 922 ;
+C -1 ; WX 722 ; N Uacute ; B 76 -23 654 936 ;
+C -1 ; WX 667 ; N Scedilla ; B 32 -220 633 741 ;
+C -1 ; WX 611 ; N Tcaron ; B 14 0 598 936 ;
+C -1 ; WX 667 ; N Scaron ; B 32 -23 633 936 ;
+C -1 ; WX 722 ; N Rcaron ; B 80 0 677 936 ;
+C -1 ; WX 722 ; N Racute ; B 80 0 677 936 ;
+C -1 ; WX 667 ; N Sacute ; B 32 -23 633 936 ;
+C -1 ; WX 778 ; N Otilde ; B 40 -23 742 928 ;
+C -1 ; WX 611 ; N ucircumflex ; B 58 -23 541 757 ;
+C -1 ; WX 778 ; N Ohungarumlaut ; B 40 -23 742 936 ;
+C -1 ; WX 722 ; N Uhungarumlaut ; B 76 -23 654 936 ;
+C -1 ; WX 667 ; N Yacute ; B 27 0 650 936 ;
+C -1 ; WX 722 ; N Eth ; B 0 0 681 729 ;
+C -1 ; WX 722 ; N Dcroat ; B 0 0 681 729 ;
+C -1 ; WX 611 ; N Zacute ; B 30 0 578 936 ;
+C -1 ; WX 722 ; N Uring ; B 76 -23 654 949 ;
+C -1 ; WX 611 ; N gbreve ; B 34 -218 541 748 ;
+C -1 ; WX 556 ; N eogonek ; B 21 -234 525 549 ;
+C -1 ; WX 556 ; N edotaccent ; B 22 -23 525 743 ;
+C -1 ; WX 556 ; N ecaron ; B 22 -23 525 757 ;
+C -1 ; WX 722 ; N Ugrave ; B 76 -23 654 936 ;
+C -1 ; WX 667 ; N Thorn ; B 76 0 633 729 ;
+C -1 ; WX 556 ; N eacute ; B 22 -23 525 757 ;
+C -1 ; WX 556 ; N edieresis ; B 22 -23 525 743 ;
+C -1 ; WX 707 ; N dcaron ; B 29 -23 720 729 ;
+C -1 ; WX 556 ; N ccedilla ; B 34 -220 522 549 ;
+C -1 ; WX 556 ; N ccaron ; B 34 -23 522 757 ;
+C -1 ; WX 556 ; N cacute ; B 34 -23 522 757 ;
+C -1 ; WX 556 ; N aogonek ; B 28 -233 548 549 ;
+C -1 ; WX 556 ; N aring ; B 28 -23 524 770 ;
+C -1 ; WX 556 ; N atilde ; B 28 -23 524 749 ;
+C -1 ; WX 556 ; N abreve ; B 28 -23 524 748 ;
+C -1 ; WX 556 ; N egrave ; B 22 -23 525 757 ;
+C -1 ; WX 556 ; N agrave ; B 28 -23 524 757 ;
+C -1 ; WX 556 ; N aacute ; B 28 -23 524 757 ;
+C -1 ; WX 556 ; N adieresis ; B 28 -23 524 743 ;
+C -1 ; WX 722 ; N Uogonek ; B 76 -234 654 729 ;
+C -1 ; WX 611 ; N ugrave ; B 58 -23 541 757 ;
+C -1 ; WX 611 ; N uacute ; B 58 -23 541 757 ;
+C -1 ; WX 611 ; N udieresis ; B 58 -23 541 743 ;
+C -1 ; WX 385 ; N tcaron ; B 14 -23 398 829 ;
+C -1 ; WX 556 ; N scommaaccent ; B 29 -307 520 549 ;
+C -1 ; WX 611 ; N Zcaron ; B 30 0 578 936 ;
+C -1 ; WX 556 ; N ecircumflex ; B 22 -23 525 757 ;
+C -1 ; WX 722 ; N Ucircumflex ; B 76 -23 654 936 ;
+C -1 ; WX 556 ; N acircumflex ; B 28 -23 524 757 ;
+C -1 ; WX 611 ; N Zdotaccent ; B 30 0 578 922 ;
+C -1 ; WX 556 ; N scaron ; B 29 -23 520 757 ;
+C -1 ; WX 722 ; N Amacron ; B 26 0 703 898 ;
+C -1 ; WX 556 ; N sacute ; B 29 -23 520 757 ;
+C -1 ; WX 611 ; N Tcommaaccent ; B 14 -307 598 729 ;
+C -1 ; WX 667 ; N Ydieresis ; B 27 0 650 922 ;
+C -1 ; WX 611 ; N thorn ; B 58 -218 574 729 ;
+C -1 ; WX 667 ; N Emacron ; B 79 0 624 898 ;
+C -1 ; WX 778 ; N Ograve ; B 40 -23 742 936 ;
+C -1 ; WX 778 ; N Oacute ; B 40 -23 742 936 ;
+C -1 ; WX 778 ; N Odieresis ; B 40 -23 742 922 ;
+C -1 ; WX 722 ; N Ntilde ; B 68 0 661 928 ;
+C -1 ; WX 722 ; N Ncaron ; B 68 0 661 936 ;
+C -1 ; WX 722 ; N Nacute ; B 68 0 661 936 ;
+C -1 ; WX 611 ; N Lcaron ; B 80 0 579 729 ;
+C -1 ; WX 611 ; N Lacute ; B 80 0 579 936 ;
+C -1 ; WX 278 ; N Idotaccent ; B 63 0 213 922 ;
+C -1 ; WX 389 ; N racute ; B 63 0 370 757 ;
+C -1 ; WX 278 ; N Icircumflex ; B -19 0 299 936 ;
+C -1 ; WX 611 ; N ohungarumlaut ; B 35 -23 569 757 ;
+C -1 ; WX 611 ; N otilde ; B 35 -23 569 749 ;
+C -1 ; WX 556 ; N Euro ; B 6 -23 546 724 ;
+C -1 ; WX 611 ; N ocircumflex ; B 35 -23 569 757 ;
+C -1 ; WX 351 ; N onesuperior ; B 40 284 242 709 ;
+C -1 ; WX 351 ; N twosuperior ; B 16 284 328 718 ;
+C -1 ; WX 351 ; N threesuperior ; B 15 271 329 718 ;
+C -1 ; WX 278 ; N Igrave ; B -10 0 213 936 ;
+C -1 ; WX 278 ; N Iacute ; B 63 0 290 936 ;
+C -1 ; WX 278 ; N Imacron ; B 2 0 274 898 ;
+C -1 ; WX 278 ; N Iogonek ; B 34 -233 237 729 ;
+C -1 ; WX 278 ; N Idieresis ; B -9 0 287 922 ;
+C -1 ; WX 778 ; N Gbreve ; B 42 -23 711 927 ;
+C -1 ; WX 722 ; N Umacron ; B 76 -23 654 898 ;
+C -1 ; WX 722 ; N Kcommaaccent ; B 74 -307 717 729 ;
+C -1 ; WX 611 ; N ograve ; B 35 -23 569 757 ;
+C -1 ; WX 667 ; N Scommaaccent ; B 32 -307 633 741 ;
+C -1 ; WX 667 ; N Eogonek ; B 79 -233 648 729 ;
+C -1 ; WX 611 ; N oacute ; B 35 -23 569 757 ;
+C -1 ; WX 667 ; N Edotaccent ; B 79 0 624 922 ;
+C -1 ; WX 278 ; N iogonek ; B 34 -233 231 729 ;
+C -1 ; WX 611 ; N gcommaaccent ; B 34 -218 541 853 ;
+C -1 ; WX 611 ; N odieresis ; B 35 -23 569 743 ;
+C -1 ; WX 611 ; N ntilde ; B 63 0 546 749 ;
+C -1 ; WX 611 ; N ncaron ; B 63 0 546 757 ;
+C -1 ; WX 667 ; N Ecaron ; B 79 0 624 936 ;
+C -1 ; WX 667 ; N Ecircumflex ; B 79 0 624 936 ;
+C -1 ; WX 556 ; N scedilla ; B 29 -220 520 549 ;
+C -1 ; WX 389 ; N rcaron ; B 54 0 372 757 ;
+C -1 ; WX 667 ; N Egrave ; B 79 0 624 936 ;
+C -1 ; WX 667 ; N Eacute ; B 79 0 624 936 ;
+C -1 ; WX 778 ; N Gcommaaccent ; B 42 -307 711 741 ;
+C -1 ; WX 722 ; N Rcommaaccent ; B 80 -307 677 729 ;
+C -1 ; WX 667 ; N Edieresis ; B 79 0 624 922 ;
+C -1 ; WX 611 ; N nacute ; B 63 0 546 757 ;
+C -1 ; WX 611 ; N uogonek ; B 58 -233 564 540 ;
+C -1 ; WX 611 ; N umacron ; B 58 -23 541 719 ;
+C -1 ; WX 722 ; N Dcaron ; B 77 0 681 936 ;
+C -1 ; WX 369 ; N lcaron ; B 67 0 382 729 ;
+C -1 ; WX 722 ; N Ccaron ; B 44 -23 685 936 ;
+C -1 ; WX 722 ; N Cacute ; B 44 -23 685 936 ;
+C -1 ; WX 722 ; N Ccedilla ; B 44 -220 685 741 ;
+C -1 ; WX 606 ; N degree ; B 151 383 454 686 ;
+C -1 ; WX 722 ; N Aogonek ; B 26 -233 723 729 ;
+C -1 ; WX 584 ; N minus ; B 40 172 544 291 ;
+C -1 ; WX 584 ; N multiply ; B 79 18 505 444 ;
+C -1 ; WX 584 ; N divide ; B 50 -11 534 474 ;
+C -1 ; WX 722 ; N Aring ; B 26 0 703 949 ;
+C -1 ; WX 1000 ; N trademark ; B 71 273 929 729 ;
+C -1 ; WX 389 ; N rcommaaccent ; B 63 -307 370 549 ;
+C -1 ; WX 278 ; N lacute ; B 67 0 278 936 ;
+C -1 ; WX 611 ; N omacron ; B 35 -23 569 719 ;
+C -1 ; WX 722 ; N Atilde ; B 26 0 703 928 ;
+C -1 ; WX 278 ; N icircumflex ; B -19 0 299 757 ;
+C -1 ; WX 278 ; N igrave ; B -10 0 207 757 ;
+C -1 ; WX 611 ; N ncommaaccent ; B 63 -307 546 549 ;
+C -1 ; WX 278 ; N lcommaaccent ; B 67 -307 207 729 ;
+C -1 ; WX 584 ; N plusminus ; B 56 -16 527 608 ;
+C -1 ; WX 869 ; N onehalf ; B 40 -20 846 715 ;
+C -1 ; WX 869 ; N onequarter ; B 40 -20 850 715 ;
+C -1 ; WX 869 ; N threequarters ; B 15 -20 850 718 ;
+C -1 ; WX 278 ; N iacute ; B 67 0 290 757 ;
+C -1 ; WX 722 ; N Abreve ; B 26 0 703 927 ;
+C -1 ; WX 556 ; N kcommaaccent ; B 59 -307 548 729 ;
+C -1 ; WX 778 ; N Omacron ; B 40 -23 742 898 ;
+C -1 ; WX 278 ; N imacron ; B 7 0 266 719 ;
+C -1 ; WX 556 ; N emacron ; B 22 -23 525 719 ;
+C -1 ; WX 556 ; N amacron ; B 28 -23 524 719 ;
+C -1 ; WX 333 ; N tcommaaccent ; B 14 -307 301 674 ;
+C -1 ; WX 556 ; N ydieresis ; B 9 -219 538 743 ;
+C -1 ; WX 500 ; N zdotaccent ; B 21 0 468 743 ;
+C -1 ; WX 500 ; N zcaron ; B 21 0 468 757 ;
+C -1 ; WX 500 ; N zacute ; B 21 0 468 757 ;
+C -1 ; WX 556 ; N yacute ; B 9 -219 538 757 ;
+C -1 ; WX 611 ; N uhungarumlaut ; B 58 -23 559 757 ;
+C -1 ; WX 611 ; N eth ; B 35 -23 569 744 ;
+C -1 ; WX 611 ; N uring ; B 58 -23 541 770 ;
+C -1 ; WX 778 ; N Ocircumflex ; B 40 -23 742 936 ;
+C -1 ; WX 333 ; N commaaccent ; B 112 -307 234 -60 ;
+C -1 ; WX 737 ; N copyright ; B -14 -22 751 743 ;
+C -1 ; WX 737 ; N registered ; B -14 -22 751 743 ;
+C -1 ; WX 722 ; N Acircumflex ; B 26 0 703 936 ;
+C -1 ; WX 278 ; N idieresis ; B -9 0 287 743 ;
+C -1 ; WX 489 ; N lozenge ; B 16 0 462 744 ;
+C -1 ; WX 729 ; N Delta ; B 8 0 721 729 ;
+C -1 ; WX 548 ; N notequal ; B 50 -69 534 528 ;
+C -1 ; WX 542 ; N radical ; B 7 -36 512 913 ;
+C -1 ; WX 722 ; N Agrave ; B 26 0 703 936 ;
+C -1 ; WX 722 ; N Aacute ; B 26 0 703 936 ;
+C -1 ; WX 584 ; N lessequal ; B 45 -10 534 639 ;
+C -1 ; WX 584 ; N greaterequal ; B 45 -10 534 639 ;
+C -1 ; WX 584 ; N logicalnot ; B 40 86 544 375 ;
+C -1 ; WX 711 ; N summation ; B 17 -96 694 760 ;
+C -1 ; WX 490 ; N partialdiff ; B 22 -15 458 750 ;
+C -1 ; WX 722 ; N Ncommaaccent ; B 68 -307 661 729 ;
+C -1 ; WX 611 ; N dcroat ; B 29 -23 605 729 ;
+C -1 ; WX 280 ; N brokenbar ; B 100 -200 180 729 ;
+C -1 ; WX 611 ; N Lcommaaccent ; B 80 -307 579 729 ;
+C -1 ; WX 722 ; N Adieresis ; B 26 0 703 922 ;
+C -1 ; WX 611 ; N mu ; B 58 -220 573 540 ;
+C -1 ; WX 278 ; N .notdef ; B 214 0 214 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -33
+KPX A Ccedilla -33
+KPX A G -35
+KPX A O -34
+KPX A Odieresis -34
+KPX A Q -35
+KPX A T -81
+KPX A U -32
+KPX A Uacute -32
+KPX A Ucircumflex -32
+KPX A Udieresis -32
+KPX A Ugrave -32
+KPX A V -66
+KPX A W -51
+KPX A Y -90
+KPX A a -1
+KPX A b -1
+KPX A c -14
+KPX A ccedilla -14
+KPX A comma 19
+KPX A d -13
+KPX A e -9
+KPX A g -14
+KPX A guillemotleft -43
+KPX A guilsinglleft -40
+KPX A hyphen 7
+KPX A o -16
+KPX A period 19
+KPX A q -12
+KPX A quotedblright -65
+KPX A quoteright -61
+KPX A t -18
+KPX A u -12
+KPX A v -37
+KPX A w -23
+KPX A y -35
+KPX Aacute C -33
+KPX Aacute G -35
+KPX Aacute O -34
+KPX Aacute Q -35
+KPX Aacute T -81
+KPX Aacute U -32
+KPX Aacute V -66
+KPX Aacute W -51
+KPX Aacute Y -90
+KPX Aacute a -1
+KPX Aacute b -1
+KPX Aacute c -14
+KPX Aacute comma 19
+KPX Aacute d -13
+KPX Aacute e -9
+KPX Aacute g -14
+KPX Aacute guillemotleft -43
+KPX Aacute guilsinglleft -40
+KPX Aacute hyphen 7
+KPX Aacute o -16
+KPX Aacute period 19
+KPX Aacute q -12
+KPX Aacute quoteright -61
+KPX Aacute t -18
+KPX Aacute u -12
+KPX Aacute v -37
+KPX Aacute w -23
+KPX Aacute y -35
+KPX Acircumflex C -33
+KPX Acircumflex G -35
+KPX Acircumflex O -34
+KPX Acircumflex Q -35
+KPX Acircumflex T -81
+KPX Acircumflex U -32
+KPX Acircumflex V -66
+KPX Acircumflex W -51
+KPX Acircumflex Y -90
+KPX Acircumflex comma 19
+KPX Acircumflex period 19
+KPX Adieresis C -33
+KPX Adieresis G -35
+KPX Adieresis O -34
+KPX Adieresis Q -35
+KPX Adieresis T -81
+KPX Adieresis U -32
+KPX Adieresis V -66
+KPX Adieresis W -51
+KPX Adieresis Y -90
+KPX Adieresis a -1
+KPX Adieresis b -1
+KPX Adieresis c -14
+KPX Adieresis comma 19
+KPX Adieresis d -13
+KPX Adieresis g -14
+KPX Adieresis guillemotleft -43
+KPX Adieresis guilsinglleft -40
+KPX Adieresis hyphen 7
+KPX Adieresis o -16
+KPX Adieresis period 19
+KPX Adieresis q -12
+KPX Adieresis quotedblright -65
+KPX Adieresis quoteright -61
+KPX Adieresis t -18
+KPX Adieresis u -12
+KPX Adieresis v -37
+KPX Adieresis w -23
+KPX Adieresis y -35
+KPX Agrave C -33
+KPX Agrave G -35
+KPX Agrave O -34
+KPX Agrave Q -35
+KPX Agrave T -81
+KPX Agrave U -32
+KPX Agrave V -66
+KPX Agrave W -51
+KPX Agrave Y -90
+KPX Agrave comma 19
+KPX Agrave period 19
+KPX Aring C -33
+KPX Aring G -35
+KPX Aring O -34
+KPX Aring Q -35
+KPX Aring T -81
+KPX Aring U -32
+KPX Aring V -66
+KPX Aring W -51
+KPX Aring Y -90
+KPX Aring a -1
+KPX Aring b -1
+KPX Aring c -14
+KPX Aring comma 19
+KPX Aring d -13
+KPX Aring e -9
+KPX Aring g -14
+KPX Aring guillemotleft -43
+KPX Aring guilsinglleft -40
+KPX Aring hyphen 7
+KPX Aring o -16
+KPX Aring period 19
+KPX Aring q -12
+KPX Aring quotedblright -65
+KPX Aring quoteright -61
+KPX Aring t -18
+KPX Aring u -12
+KPX Aring v -37
+KPX Aring w -23
+KPX Aring y -35
+KPX Atilde C -33
+KPX Atilde G -35
+KPX Atilde O -34
+KPX Atilde Q -35
+KPX Atilde T -81
+KPX Atilde U -32
+KPX Atilde V -66
+KPX Atilde W -51
+KPX Atilde Y -90
+KPX Atilde comma 19
+KPX Atilde period 19
+KPX B A -32
+KPX B AE -20
+KPX B Aacute -32
+KPX B Acircumflex -32
+KPX B Adieresis -32
+KPX B Aring -32
+KPX B Atilde -32
+KPX B O -11
+KPX B OE -2
+KPX B Oacute -11
+KPX B Ocircumflex -11
+KPX B Odieresis -11
+KPX B Ograve -11
+KPX B Oslash -5
+KPX B V -39
+KPX B W -27
+KPX B Y -51
+KPX C A -29
+KPX C AE -17
+KPX C Aacute -29
+KPX C Adieresis -29
+KPX C Aring -29
+KPX C H 5
+KPX C K 2
+KPX C O -6
+KPX C Oacute -6
+KPX C Odieresis -6
+KPX Ccedilla A -28
+KPX D A -37
+KPX D Aacute -37
+KPX D Acircumflex -37
+KPX D Adieresis -37
+KPX D Agrave -37
+KPX D Aring -37
+KPX D Atilde -37
+KPX D J 2
+KPX D T -17
+KPX D V -35
+KPX D W -20
+KPX D X -35
+KPX D Y -56
+KPX F A -63
+KPX F Aacute -63
+KPX F Acircumflex -63
+KPX F Adieresis -63
+KPX F Agrave -63
+KPX F Aring -63
+KPX F Atilde -63
+KPX F J -25
+KPX F O -16
+KPX F Odieresis -16
+KPX F a -15
+KPX F aacute -15
+KPX F adieresis -15
+KPX F ae -17
+KPX F aring -15
+KPX F comma -76
+KPX F e -7
+KPX F eacute -7
+KPX F hyphen 11
+KPX F i -7
+KPX F j -9
+KPX F o -14
+KPX F oacute -14
+KPX F odieresis -14
+KPX F oe -8
+KPX F oslash -15
+KPX F period -75
+KPX F r -27
+KPX F u -24
+KPX G A -8
+KPX G AE 4
+KPX G Aacute -8
+KPX G Acircumflex -8
+KPX G Adieresis -8
+KPX G Agrave -8
+KPX G Aring -8
+KPX G Atilde -8
+KPX G T -17
+KPX G V -36
+KPX G W -20
+KPX G Y -56
+KPX J A -32
+KPX J AE -20
+KPX J Adieresis -32
+KPX J Aring -32
+KPX K C -53
+KPX K G -55
+KPX K O -54
+KPX K OE -44
+KPX K Oacute -54
+KPX K Odieresis -54
+KPX K S -30
+KPX K T 13
+KPX K a -3
+KPX K adieresis -3
+KPX K ae 0
+KPX K aring -3
+KPX K e -25
+KPX K hyphen -44
+KPX K o -33
+KPX K oacute -33
+KPX K odieresis -33
+KPX K u -23
+KPX K udieresis -23
+KPX K y -65
+KPX L A 9
+KPX L AE 21
+KPX L Aacute 9
+KPX L Adieresis 9
+KPX L Aring 9
+KPX L C -26
+KPX L Ccedilla -26
+KPX L G -30
+KPX L O -29
+KPX L Oacute -29
+KPX L Ocircumflex -29
+KPX L Odieresis -29
+KPX L Ograve -29
+KPX L Otilde -29
+KPX L S -2
+KPX L T -95
+KPX L U -24
+KPX L Udieresis -24
+KPX L V -90
+KPX L W -68
+KPX L Y -112
+KPX L hyphen -12
+KPX L quotedblright -141
+KPX L quoteright -138
+KPX L u -7
+KPX L udieresis -7
+KPX L y -55
+KPX N A -5
+KPX N AE 7
+KPX N Aacute -5
+KPX N Adieresis -5
+KPX N Aring -5
+KPX N C 9
+KPX N Ccedilla 9
+KPX N G 8
+KPX N O 8
+KPX N Oacute 8
+KPX N Odieresis 8
+KPX N a 13
+KPX N aacute 13
+KPX N adieresis 13
+KPX N ae 13
+KPX N aring 13
+KPX N comma 15
+KPX N e 18
+KPX N eacute 18
+KPX N o 11
+KPX N oacute 11
+KPX N odieresis 11
+KPX N oslash 11
+KPX N period 16
+KPX N u 12
+KPX N udieresis 12
+KPX O A -37
+KPX O AE -26
+KPX O Aacute -37
+KPX O Adieresis -37
+KPX O Aring -37
+KPX O T -20
+KPX O V -36
+KPX O W -21
+KPX O X -36
+KPX O Y -59
+KPX Oacute A -37
+KPX Oacute T -20
+KPX Oacute V -36
+KPX Oacute W -21
+KPX Oacute Y -59
+KPX Ocircumflex T -20
+KPX Ocircumflex V -36
+KPX Ocircumflex Y -59
+KPX Odieresis A -37
+KPX Odieresis T -20
+KPX Odieresis V -36
+KPX Odieresis W -21
+KPX Odieresis X -36
+KPX Odieresis Y -59
+KPX Ograve T -20
+KPX Ograve V -36
+KPX Ograve Y -59
+KPX Oslash A -32
+KPX Otilde T -20
+KPX Otilde V -36
+KPX Otilde Y -59
+KPX P A -65
+KPX P AE -54
+KPX P Aacute -65
+KPX P Adieresis -65
+KPX P Aring -65
+KPX P J -44
+KPX P a -7
+KPX P aacute -7
+KPX P adieresis -7
+KPX P ae -8
+KPX P aring -7
+KPX P comma -94
+KPX P e -8
+KPX P eacute -8
+KPX P hyphen 0
+KPX P o -14
+KPX P oacute -14
+KPX P odieresis -14
+KPX P oe -8
+KPX P oslash -17
+KPX P period -94
+KPX R C -5
+KPX R Ccedilla -5
+KPX R G -6
+KPX R O -6
+KPX R OE 3
+KPX R Oacute -6
+KPX R Odieresis -6
+KPX R T 0
+KPX R U -4
+KPX R Udieresis -4
+KPX R V -26
+KPX R W -17
+KPX R Y -37
+KPX R a 0
+KPX R aacute 0
+KPX R adieresis 0
+KPX R ae 0
+KPX R aring 0
+KPX R e 2
+KPX R eacute 2
+KPX R hyphen 15
+KPX R o -4
+KPX R oacute -4
+KPX R odieresis -4
+KPX R oe 1
+KPX R u 0
+KPX R uacute 0
+KPX R udieresis 0
+KPX R y 5
+KPX S A -20
+KPX S AE -8
+KPX S Aacute -20
+KPX S Adieresis -20
+KPX S Aring -20
+KPX S T -5
+KPX S V -31
+KPX S W -17
+KPX S Y -43
+KPX S t 1
+KPX T A -87
+KPX T AE -75
+KPX T Aacute -87
+KPX T Acircumflex -87
+KPX T Adieresis -87
+KPX T Agrave -87
+KPX T Aring -87
+KPX T Atilde -87
+KPX T C -20
+KPX T G -22
+KPX T J -87
+KPX T O -22
+KPX T OE -11
+KPX T Oacute -22
+KPX T Ocircumflex -22
+KPX T Odieresis -22
+KPX T Ograve -22
+KPX T Oslash -23
+KPX T Otilde -22
+KPX T S 3
+KPX T V 18
+KPX T W 24
+KPX T Y 16
+KPX T a -73
+KPX T ae -73
+KPX T c -74
+KPX T colon -97
+KPX T comma -67
+KPX T e -69
+KPX T g -75
+KPX T guillemotleft -101
+KPX T guilsinglleft -98
+KPX T hyphen -48
+KPX T i -1
+KPX T j -3
+KPX T o -76
+KPX T oslash -73
+KPX T period -67
+KPX T r -71
+KPX T s -74
+KPX T semicolon -98
+KPX T u -72
+KPX T v -82
+KPX T w -77
+KPX T y -80
+KPX U A -34
+KPX U AE -22
+KPX U Aacute -34
+KPX U Acircumflex -34
+KPX U Adieresis -34
+KPX U Aring -34
+KPX U Atilde -34
+KPX U comma -7
+KPX U m 6
+KPX U n 5
+KPX U p 7
+KPX U period -4
+KPX U r 5
+KPX Uacute A -34
+KPX Uacute comma -7
+KPX Uacute m 6
+KPX Uacute n 5
+KPX Uacute p 7
+KPX Uacute period -4
+KPX Uacute r 5
+KPX Ucircumflex A -34
+KPX Udieresis A -34
+KPX Udieresis b 6
+KPX Udieresis comma -7
+KPX Udieresis m 6
+KPX Udieresis n 5
+KPX Udieresis p 7
+KPX Udieresis period -4
+KPX Udieresis r 5
+KPX Ugrave A -34
+KPX V A -71
+KPX V AE -59
+KPX V Aacute -71
+KPX V Acircumflex -71
+KPX V Adieresis -71
+KPX V Agrave -71
+KPX V Aring -71
+KPX V Atilde -71
+KPX V C -36
+KPX V G -38
+KPX V O -37
+KPX V Oacute -37
+KPX V Ocircumflex -37
+KPX V Odieresis -37
+KPX V Ograve -37
+KPX V Oslash -31
+KPX V Otilde -37
+KPX V S -21
+KPX V T 21
+KPX V a -47
+KPX V ae -48
+KPX V colon -65
+KPX V comma -69
+KPX V e -43
+KPX V g -49
+KPX V guillemotleft -74
+KPX V guilsinglleft -72
+KPX V hyphen -21
+KPX V i -5
+KPX V o -50
+KPX V oslash -48
+KPX V period -69
+KPX V r -34
+KPX V semicolon -67
+KPX V u -34
+KPX V y -10
+KPX W A -54
+KPX W AE -43
+KPX W Aacute -54
+KPX W Acircumflex -54
+KPX W Adieresis -54
+KPX W Agrave -54
+KPX W Aring -54
+KPX W Atilde -54
+KPX W C -20
+KPX W G -22
+KPX W O -21
+KPX W Oacute -21
+KPX W Ocircumflex -21
+KPX W Odieresis -21
+KPX W Ograve -21
+KPX W Oslash -15
+KPX W Otilde -21
+KPX W S -12
+KPX W T 25
+KPX W a -29
+KPX W ae -29
+KPX W colon -53
+KPX W comma -45
+KPX W e -24
+KPX W g -30
+KPX W guillemotleft -55
+KPX W guilsinglleft -53
+KPX W hyphen -3
+KPX W i -1
+KPX W o -31
+KPX W oslash -29
+KPX W period -45
+KPX W r -24
+KPX W semicolon -54
+KPX W u -23
+KPX W y 0
+KPX X C -34
+KPX X O -35
+KPX X Odieresis -35
+KPX X Q -37
+KPX X a -5
+KPX X e -25
+KPX X hyphen -27
+KPX X o -32
+KPX X u -25
+KPX X y -40
+KPX Y A -86
+KPX Y AE -74
+KPX Y Aacute -86
+KPX Y Acircumflex -86
+KPX Y Adieresis -86
+KPX Y Agrave -86
+KPX Y Aring -86
+KPX Y Atilde -86
+KPX Y C -52
+KPX Y G -54
+KPX Y O -54
+KPX Y Oacute -54
+KPX Y Ocircumflex -54
+KPX Y Odieresis -54
+KPX Y Ograve -54
+KPX Y Oslash -47
+KPX Y Otilde -54
+KPX Y S -29
+KPX Y T 22
+KPX Y a -66
+KPX Y ae -67
+KPX Y colon -81
+KPX Y comma -78
+KPX Y e -63
+KPX Y g -68
+KPX Y guillemotleft -98
+KPX Y guilsinglleft -96
+KPX Y hyphen -50
+KPX Y i -3
+KPX Y o -70
+KPX Y oslash -67
+KPX Y p -45
+KPX Y period -78
+KPX Y semicolon -83
+KPX Y u -48
+KPX Y v -27
+KPX Z v -11
+KPX Z y -9
+KPX a j -1
+KPX a quoteright -11
+KPX a v -19
+KPX a w -5
+KPX a y -17
+KPX aacute v -19
+KPX aacute w -5
+KPX aacute y -17
+KPX adieresis v -19
+KPX adieresis w -5
+KPX adieresis y -17
+KPX ae v -21
+KPX ae w -7
+KPX ae y -19
+KPX agrave v -19
+KPX agrave w -5
+KPX agrave y -17
+KPX aring v -19
+KPX aring w -5
+KPX aring y -17
+KPX b v -20
+KPX b w -7
+KPX b y -20
+KPX c h 0
+KPX c k 3
+KPX comma one -73
+KPX comma quotedblright -33
+KPX comma quoteright -30
+KPX e quoteright -12
+KPX e t -4
+KPX e v -19
+KPX e w -6
+KPX e x -21
+KPX e y -17
+KPX eacute v -19
+KPX eacute w -6
+KPX eacute y -17
+KPX ecircumflex v -19
+KPX ecircumflex w -6
+KPX ecircumflex y -17
+KPX eight four 10
+KPX eight one -23
+KPX eight seven -6
+KPX f a 1
+KPX f aacute 1
+KPX f adieresis 1
+KPX f ae 0
+KPX f aring 1
+KPX f e -3
+KPX f eacute -3
+KPX f f 21
+KPX f i -3
+KPX f j -6
+KPX f l -3
+KPX f o -9
+KPX f oacute -9
+KPX f odieresis -9
+KPX f oe -3
+KPX f oslash -9
+KPX f quoteright 10
+KPX f s -1
+KPX f t 21
+KPX five four 6
+KPX five one -29
+KPX five seven -10
+KPX four four 9
+KPX four one -50
+KPX four seven -28
+KPX g a 3
+KPX g adieresis 3
+KPX g ae 3
+KPX g aring 3
+KPX g e 8
+KPX g eacute 8
+KPX g l 0
+KPX g oacute 1
+KPX g odieresis 1
+KPX g r 1
+KPX guillemotright A -51
+KPX guillemotright AE -39
+KPX guillemotright Aacute -51
+KPX guillemotright Adieresis -51
+KPX guillemotright Aring -51
+KPX guillemotright T -108
+KPX guillemotright V -78
+KPX guillemotright W -60
+KPX guillemotright Y -111
+KPX guilsinglright A -46
+KPX guilsinglright AE -35
+KPX guilsinglright Aacute -46
+KPX guilsinglright Adieresis -46
+KPX guilsinglright Aring -46
+KPX guilsinglright T -104
+KPX guilsinglright V -74
+KPX guilsinglright W -56
+KPX guilsinglright Y -107
+KPX h quoteright -14
+KPX h y -21
+KPX hyphen A -1
+KPX hyphen AE 10
+KPX hyphen Aacute -1
+KPX hyphen Adieresis -1
+KPX hyphen Aring -1
+KPX hyphen T -57
+KPX hyphen V -27
+KPX hyphen W -9
+KPX hyphen Y -64
+KPX i T -4
+KPX i j -2
+KPX k a -2
+KPX k aacute -2
+KPX k adieresis -2
+KPX k ae 1
+KPX k aring -2
+KPX k comma 7
+KPX k e -15
+KPX k eacute -15
+KPX k g -21
+KPX k hyphen -25
+KPX k o -22
+KPX k oacute -22
+KPX k odieresis -22
+KPX k period 6
+KPX k s -10
+KPX k u -1
+KPX k udieresis -1
+KPX l v -5
+KPX l y -2
+KPX m p 6
+KPX m v -19
+KPX m w -6
+KPX m y -18
+KPX n T -80
+KPX n p 5
+KPX n quoteright -12
+KPX n v -20
+KPX n w -7
+KPX n y -19
+KPX nine four 4
+KPX nine one -21
+KPX nine seven -17
+KPX o T -84
+KPX o quoteright -17
+KPX o t -8
+KPX o v -23
+KPX o w -10
+KPX o x -25
+KPX o y -22
+KPX oacute v -23
+KPX oacute w -10
+KPX oacute y -22
+KPX ocircumflex t -8
+KPX odieresis t -8
+KPX odieresis v -23
+KPX odieresis w -10
+KPX odieresis x -25
+KPX odieresis y -22
+KPX ograve v -23
+KPX ograve w -10
+KPX ograve y -22
+KPX one comma -42
+KPX one eight -37
+KPX one five -43
+KPX one four -56
+KPX one nine -39
+KPX one one -85
+KPX one period -42
+KPX one seven -65
+KPX one six -37
+KPX one three -44
+KPX one two -47
+KPX one zero -34
+KPX p t -5
+KPX p y -20
+KPX period one -73
+KPX period quotedblright -32
+KPX period quoteright -29
+KPX q c 4
+KPX q u 4
+KPX quotedblbase A 12
+KPX quotedblbase AE 24
+KPX quotedblbase T -75
+KPX quotedblbase V -73
+KPX quotedblbase W -51
+KPX quotedblbase Y -92
+KPX quotedblleft A -68
+KPX quotedblleft AE -57
+KPX quotedblleft Aacute -68
+KPX quotedblleft Adieresis -68
+KPX quotedblleft Aring -68
+KPX quotedblleft T -2
+KPX quotedblleft V 6
+KPX quotedblleft W 16
+KPX quotedblleft Y -9
+KPX quotedblright A -69
+KPX quotedblright AE -57
+KPX quotedblright Aacute -69
+KPX quotedblright Adieresis -69
+KPX quotedblright Aring -69
+KPX quotedblright T 1
+KPX quotedblright V 7
+KPX quotedblright W 17
+KPX quotedblright Y -7
+KPX quoteleft A -73
+KPX quoteleft AE -62
+KPX quoteleft Aacute -73
+KPX quoteleft Adieresis -73
+KPX quoteleft Aring -73
+KPX quoteleft T -7
+KPX quoteleft V 2
+KPX quoteleft W 11
+KPX quoteleft Y -13
+KPX quoteright A -77
+KPX quoteright AE -66
+KPX quoteright Aacute -77
+KPX quoteright Adieresis -77
+KPX quoteright Aring -77
+KPX quoteright comma -46
+KPX quoteright d -27
+KPX quoteright o -30
+KPX quoteright period -45
+KPX quoteright r -15
+KPX quoteright s -22
+KPX quoteright t -4
+KPX quoteright v -5
+KPX quoteright w 1
+KPX quoteright y -3
+KPX r a 6
+KPX r aacute 6
+KPX r acircumflex 6
+KPX r adieresis 6
+KPX r ae 4
+KPX r agrave 6
+KPX r aring 6
+KPX r c 0
+KPX r ccedilla 0
+KPX r colon -27
+KPX r comma -57
+KPX r d 0
+KPX r e 4
+KPX r eacute 4
+KPX r ecircumflex 4
+KPX r egrave 4
+KPX r f 22
+KPX r g -2
+KPX r h -4
+KPX r hyphen -35
+KPX r i -4
+KPX r j -6
+KPX r k 0
+KPX r l -4
+KPX r m -1
+KPX r n -2
+KPX r o -1
+KPX r oacute -1
+KPX r ocircumflex -1
+KPX r odieresis -1
+KPX r oe 5
+KPX r ograve -1
+KPX r oslash -4
+KPX r p 0
+KPX r period -57
+KPX r q 1
+KPX r quoteright 14
+KPX r r -2
+KPX r s 3
+KPX r semicolon -27
+KPX r t 22
+KPX r u 0
+KPX r v 21
+KPX r w 26
+KPX r x 17
+KPX r y 23
+KPX r z 9
+KPX s quoteright -12
+KPX s t -1
+KPX seven colon -63
+KPX seven comma -88
+KPX seven eight -3
+KPX seven five -21
+KPX seven four -62
+KPX seven one -14
+KPX seven period -87
+KPX seven seven 9
+KPX seven six -13
+KPX seven three 0
+KPX seven two -4
+KPX six four 7
+KPX six one -21
+KPX six seven -3
+KPX t S 0
+KPX t a 6
+KPX t aacute 6
+KPX t adieresis 6
+KPX t ae 7
+KPX t aring 6
+KPX t colon -25
+KPX t e -3
+KPX t eacute -3
+KPX t h 2
+KPX t o -10
+KPX t oacute -10
+KPX t odieresis -10
+KPX t quoteright 4
+KPX t semicolon -25
+KPX three four 6
+KPX three one -27
+KPX three seven -10
+KPX two four -9
+KPX two one -16
+KPX two seven -3
+KPX u quoteright -2
+KPX v a -15
+KPX v aacute -15
+KPX v acircumflex -15
+KPX v adieresis -15
+KPX v ae -16
+KPX v agrave -15
+KPX v aring -15
+KPX v atilde -15
+KPX v c -20
+KPX v colon -32
+KPX v comma -51
+KPX v e -15
+KPX v eacute -15
+KPX v ecircumflex -15
+KPX v egrave -15
+KPX v g -21
+KPX v hyphen 0
+KPX v l -5
+KPX v o -22
+KPX v oacute -22
+KPX v odieresis -22
+KPX v ograve -22
+KPX v oslash -20
+KPX v period -50
+KPX v s -17
+KPX v semicolon -34
+KPX w a -7
+KPX w aacute -7
+KPX w acircumflex -7
+KPX w adieresis -7
+KPX w ae -8
+KPX w agrave -7
+KPX w aring -7
+KPX w atilde -7
+KPX w c -8
+KPX w colon -27
+KPX w comma -33
+KPX w e -3
+KPX w eacute -3
+KPX w ecircumflex -3
+KPX w egrave -3
+KPX w g -9
+KPX w hyphen 11
+KPX w l -1
+KPX w o -10
+KPX w oacute -10
+KPX w odieresis -10
+KPX w ograve -10
+KPX w oslash -8
+KPX w period -32
+KPX w s -9
+KPX w semicolon -29
+KPX x a -9
+KPX x c -22
+KPX x e -17
+KPX x eacute -17
+KPX x o -24
+KPX x q -20
+KPX y a -14
+KPX y aacute -14
+KPX y acircumflex -14
+KPX y adieresis -14
+KPX y ae -15
+KPX y agrave -14
+KPX y aring -14
+KPX y atilde -14
+KPX y c -21
+KPX y colon -31
+KPX y comma -51
+KPX y e -16
+KPX y eacute -16
+KPX y ecircumflex -16
+KPX y egrave -16
+KPX y g -21
+KPX y hyphen 0
+KPX y l -4
+KPX y o -22
+KPX y oacute -22
+KPX y odieresis -22
+KPX y ograve -22
+KPX y oslash -20
+KPX y period -50
+KPX y s -16
+KPX y semicolon -33
+KPX zero four 5
+KPX zero one -19
+KPX zero seven -10
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/n019004l.pfb b/Master/xemtex/gsfonts/n019004l.pfb
new file mode 100644
index 00000000000..d86ba79ca94
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019004l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/n019004l.pfm b/Master/xemtex/gsfonts/n019004l.pfm
new file mode 100644
index 00000000000..53d42aab610
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019004l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/n019023l.afm b/Master/xemtex/gsfonts/n019023l.afm
new file mode 100644
index 00000000000..00eb42f6dcf
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019023l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName NimbusSanL-ReguItal
+FullName Nimbus Sans L Regular Italic
+FamilyName Nimbus Sans L
+Weight Regular
+ItalicAngle -12.0
+IsFixedPitch false
+UnderlinePosition -151
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -178 -284 1108 953
+CapHeight 729
+XHeight 524
+Descender -213
+Ascender 729
+StartCharMetrics 316
+C 32 ; WX 278 ; N space ; B 213 0 213 0 ;
+C 33 ; WX 278 ; N exclam ; B 124 0 363 729 ;
+C 34 ; WX 355 ; N quotedbl ; B 177 464 455 709 ;
+C 35 ; WX 556 ; N numbersign ; B 54 -20 649 697 ;
+C 36 ; WX 556 ; N dollar ; B 69 -126 613 770 ;
+C 37 ; WX 889 ; N percent ; B 134 -20 895 709 ;
+C 38 ; WX 667 ; N ampersand ; B 83 -23 644 709 ;
+C 39 ; WX 222 ; N quoteright ; B 166 477 309 708 ;
+C 40 ; WX 333 ; N parenleft ; B 113 -213 446 729 ;
+C 41 ; WX 333 ; N parenright ; B -7 -213 325 729 ;
+C 42 ; WX 389 ; N asterisk ; B 169 438 471 729 ;
+C 43 ; WX 584 ; N plus ; B 92 -11 591 473 ;
+C 44 ; WX 278 ; N comma ; B 55 -150 214 103 ;
+C 45 ; WX 333 ; N hyphen ; B 97 240 351 312 ;
+C 46 ; WX 278 ; N period ; B 87 0 213 103 ;
+C 47 ; WX 278 ; N slash ; B -12 -20 434 729 ;
+C 48 ; WX 556 ; N zero ; B 98 -23 598 709 ;
+C 49 ; WX 556 ; N one ; B 208 0 498 709 ;
+C 50 ; WX 556 ; N two ; B 34 0 620 709 ;
+C 51 ; WX 556 ; N three ; B 71 -23 599 709 ;
+C 52 ; WX 556 ; N four ; B 63 0 573 709 ;
+C 53 ; WX 556 ; N five ; B 70 -23 629 709 ;
+C 54 ; WX 556 ; N six ; B 93 -23 611 709 ;
+C 55 ; WX 556 ; N seven ; B 137 0 671 709 ;
+C 56 ; WX 556 ; N eight ; B 74 -23 604 709 ;
+C 57 ; WX 556 ; N nine ; B 83 -23 599 709 ;
+C 58 ; WX 278 ; N colon ; B 110 0 326 524 ;
+C 59 ; WX 278 ; N semicolon ; B 78 -150 325 524 ;
+C 60 ; WX 584 ; N less ; B 87 -9 635 474 ;
+C 61 ; WX 584 ; N equal ; B 74 111 609 355 ;
+C 62 ; WX 584 ; N greater ; B 48 -9 596 474 ;
+C 63 ; WX 556 ; N question ; B 184 0 630 741 ;
+C 64 ; WX 1015 ; N at ; B 80 -142 1036 741 ;
+C 65 ; WX 667 ; N A ; B 17 0 653 729 ;
+C 66 ; WX 667 ; N B ; B 79 0 711 729 ;
+C 67 ; WX 722 ; N C ; B 112 -23 770 741 ;
+C 68 ; WX 722 ; N D ; B 89 0 759 729 ;
+C 69 ; WX 667 ; N E ; B 90 0 751 729 ;
+C 70 ; WX 611 ; N F ; B 90 0 734 729 ;
+C 71 ; WX 778 ; N G ; B 109 -23 809 741 ;
+C 72 ; WX 722 ; N H ; B 83 0 799 729 ;
+C 73 ; WX 278 ; N I ; B 100 0 349 729 ;
+C 74 ; WX 500 ; N J ; B 47 -23 581 729 ;
+C 75 ; WX 667 ; N K ; B 79 0 813 729 ;
+C 76 ; WX 556 ; N L ; B 80 0 551 729 ;
+C 77 ; WX 833 ; N M ; B 75 0 916 729 ;
+C 78 ; WX 722 ; N N ; B 76 0 801 729 ;
+C 79 ; WX 778 ; N O ; B 104 -23 828 741 ;
+C 80 ; WX 667 ; N P ; B 91 0 733 729 ;
+C 81 ; WX 778 ; N Q ; B 104 -59 828 741 ;
+C 82 ; WX 722 ; N R ; B 93 0 770 729 ;
+C 83 ; WX 667 ; N S ; B 89 -23 714 741 ;
+C 84 ; WX 611 ; N T ; B 158 0 748 729 ;
+C 85 ; WX 722 ; N U ; B 124 -23 800 729 ;
+C 86 ; WX 667 ; N V ; B 185 0 800 729 ;
+C 87 ; WX 944 ; N W ; B 177 0 1084 729 ;
+C 88 ; WX 667 ; N X ; B 22 0 794 729 ;
+C 89 ; WX 667 ; N Y ; B 168 0 816 729 ;
+C 90 ; WX 611 ; N Z ; B 28 0 737 729 ;
+C 91 ; WX 278 ; N bracketleft ; B 19 -213 405 729 ;
+C 92 ; WX 278 ; N backslash ; B 147 -20 280 729 ;
+C 93 ; WX 278 ; N bracketright ; B -23 -213 364 729 ;
+C 94 ; WX 469 ; N asciicircum ; B 115 329 496 709 ;
+C 95 ; WX 556 ; N underscore ; B -59 -176 551 -126 ;
+C 96 ; WX 222 ; N quoteleft ; B 163 477 308 709 ;
+C 97 ; WX 556 ; N a ; B 65 -23 568 539 ;
+C 98 ; WX 556 ; N b ; B 54 -23 588 729 ;
+C 99 ; WX 500 ; N c ; B 76 -23 554 539 ;
+C 100 ; WX 556 ; N d ; B 73 -23 650 729 ;
+C 101 ; WX 556 ; N e ; B 84 -23 580 539 ;
+C 102 ; WX 278 ; N f ; B 89 0 413 732 ;
+C 103 ; WX 556 ; N g ; B 32 -218 601 539 ;
+C 104 ; WX 556 ; N h ; B 70 0 574 729 ;
+C 105 ; WX 222 ; N i ; B 66 0 305 729 ;
+C 106 ; WX 222 ; N j ; B -65 -218 308 729 ;
+C 107 ; WX 500 ; N k ; B 58 0 584 729 ;
+C 108 ; WX 222 ; N l ; B 68 0 307 729 ;
+C 109 ; WX 833 ; N m ; B 71 0 852 539 ;
+C 110 ; WX 556 ; N n ; B 70 0 574 539 ;
+C 111 ; WX 556 ; N o ; B 80 -23 576 539 ;
+C 112 ; WX 556 ; N p ; B 7 -213 586 539 ;
+C 113 ; WX 556 ; N q ; B 71 -213 607 539 ;
+C 114 ; WX 333 ; N r ; B 69 0 436 539 ;
+C 115 ; WX 500 ; N s ; B 61 -23 520 539 ;
+C 116 ; WX 278 ; N t ; B 97 -23 366 668 ;
+C 117 ; WX 556 ; N u ; B 88 -23 594 524 ;
+C 118 ; WX 500 ; N v ; B 122 0 598 524 ;
+C 119 ; WX 722 ; N w ; B 118 0 820 524 ;
+C 120 ; WX 500 ; N x ; B 17 0 583 524 ;
+C 121 ; WX 500 ; N y ; B 8 -218 590 524 ;
+C 122 ; WX 500 ; N z ; B 31 0 557 524 ;
+C 123 ; WX 334 ; N braceleft ; B 91 -213 431 729 ;
+C 124 ; WX 260 ; N bar ; B 54 -212 315 729 ;
+C 125 ; WX 334 ; N braceright ; B -16 -213 324 729 ;
+C 126 ; WX 584 ; N asciitilde ; B 137 268 594 438 ;
+C 161 ; WX 333 ; N exclamdown ; B 76 -205 317 524 ;
+C 162 ; WX 556 ; N cent ; B 96 -120 585 628 ;
+C 163 ; WX 556 ; N sterling ; B 44 -23 628 729 ;
+C 164 ; WX 167 ; N fraction ; B -178 -20 486 709 ;
+C 165 ; WX 556 ; N yen ; B 100 0 696 709 ;
+C 166 ; WX 556 ; N florin ; B -32 -212 696 738 ;
+C 167 ; WX 556 ; N section ; B 63 -213 589 729 ;
+C 168 ; WX 556 ; N currency ; B 110 133 593 556 ;
+C 169 ; WX 191 ; N quotesingle ; B 173 464 292 709 ;
+C 170 ; WX 333 ; N quotedblleft ; B 146 477 449 709 ;
+C 171 ; WX 556 ; N guillemotleft ; B 147 106 548 438 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 140 106 336 438 ;
+C 173 ; WX 333 ; N guilsinglright ; B 109 106 307 438 ;
+C 174 ; WX 500 ; N fi ; B 83 0 591 732 ;
+C 175 ; WX 500 ; N fl ; B 88 0 585 732 ;
+C 177 ; WX 556 ; N endash ; B 46 240 628 312 ;
+C 178 ; WX 556 ; N dagger ; B 127 -177 620 709 ;
+C 179 ; WX 556 ; N daggerdbl ; B 51 -177 620 709 ;
+C 180 ; WX 278 ; N periodcentered ; B 166 192 293 295 ;
+C 182 ; WX 537 ; N paragraph ; B 145 -178 677 729 ;
+C 183 ; WX 350 ; N bullet ; B 120 220 376 470 ;
+C 184 ; WX 222 ; N quotesinglbase ; B 37 -128 180 103 ;
+C 185 ; WX 333 ; N quotedblbase ; B 20 -128 322 103 ;
+C 186 ; WX 333 ; N quotedblright ; B 150 477 452 708 ;
+C 187 ; WX 556 ; N guillemotright ; B 121 106 518 438 ;
+C 188 ; WX 1000 ; N ellipsis ; B 115 0 907 103 ;
+C 189 ; WX 1000 ; N perthousand ; B 93 -20 1024 738 ;
+C 191 ; WX 611 ; N questiondown ; B 86 -217 531 524 ;
+C 193 ; WX 333 ; N grave ; B 179 592 357 740 ;
+C 194 ; WX 333 ; N acute ; B 218 592 458 740 ;
+C 195 ; WX 333 ; N circumflex ; B 146 591 433 741 ;
+C 196 ; WX 333 ; N tilde ; B 130 611 471 719 ;
+C 197 ; WX 333 ; N macron ; B 160 627 450 696 ;
+C 198 ; WX 333 ; N breve ; B 165 594 471 729 ;
+C 199 ; WX 333 ; N dotaccent ; B 244 612 370 715 ;
+C 200 ; WX 333 ; N dieresis ; B 159 612 446 715 ;
+C 202 ; WX 333 ; N ring ; B 216 579 396 754 ;
+C 203 ; WX 333 ; N cedilla ; B 1 -214 264 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B 91 590 505 740 ;
+C 206 ; WX 333 ; N ogonek ; B 35 -205 246 0 ;
+C 207 ; WX 333 ; N caron ; B 176 592 463 740 ;
+C 208 ; WX 1000 ; N emdash ; B 42 240 1068 312 ;
+C 225 ; WX 1000 ; N AE ; B 11 0 1087 729 ;
+C 227 ; WX 370 ; N ordfeminine ; B 107 303 441 742 ;
+C 232 ; WX 556 ; N Lslash ; B 75 0 570 729 ;
+C 233 ; WX 778 ; N Oslash ; B 32 -24 867 741 ;
+C 234 ; WX 1000 ; N OE ; B 101 -23 1108 741 ;
+C 235 ; WX 365 ; N ordmasculine ; B 114 303 452 742 ;
+C 241 ; WX 889 ; N ae ; B 59 -23 915 539 ;
+C 245 ; WX 278 ; N dotlessi ; B 94 0 290 527 ;
+C 248 ; WX 222 ; N lslash ; B 62 0 312 729 ;
+C 249 ; WX 611 ; N oslash ; B 19 -30 639 541 ;
+C 250 ; WX 944 ; N oe ; B 85 -23 966 539 ;
+C 251 ; WX 611 ; N germandbls ; B 126 -23 655 729 ;
+C -1 ; WX 722 ; N Udieresis ; B 124 -23 800 914 ;
+C -1 ; WX 722 ; N Uacute ; B 124 -23 800 939 ;
+C -1 ; WX 667 ; N Scedilla ; B 89 -214 714 741 ;
+C -1 ; WX 611 ; N Tcaron ; B 158 0 748 939 ;
+C -1 ; WX 667 ; N Scaron ; B 89 -23 714 939 ;
+C -1 ; WX 722 ; N Rcaron ; B 93 0 770 939 ;
+C -1 ; WX 722 ; N Racute ; B 93 0 770 939 ;
+C -1 ; WX 667 ; N Sacute ; B 89 -23 714 939 ;
+C -1 ; WX 778 ; N Otilde ; B 104 -23 828 918 ;
+C -1 ; WX 556 ; N ucircumflex ; B 88 -23 594 741 ;
+C -1 ; WX 778 ; N Ohungarumlaut ; B 104 -23 841 939 ;
+C -1 ; WX 722 ; N Uhungarumlaut ; B 124 -23 806 939 ;
+C -1 ; WX 667 ; N Yacute ; B 168 0 816 939 ;
+C -1 ; WX 722 ; N Eth ; B 89 0 759 729 ;
+C -1 ; WX 722 ; N Dcroat ; B 89 0 759 729 ;
+C -1 ; WX 611 ; N Zacute ; B 28 0 737 939 ;
+C -1 ; WX 722 ; N Uring ; B 124 -23 800 953 ;
+C -1 ; WX 556 ; N gbreve ; B 32 -218 601 729 ;
+C -1 ; WX 556 ; N eogonek ; B 84 -205 580 539 ;
+C -1 ; WX 556 ; N edotaccent ; B 84 -23 580 715 ;
+C -1 ; WX 556 ; N ecaron ; B 84 -23 580 740 ;
+C -1 ; WX 722 ; N Ugrave ; B 124 -23 800 939 ;
+C -1 ; WX 667 ; N Thorn ; B 91 0 708 729 ;
+C -1 ; WX 556 ; N eacute ; B 84 -23 580 740 ;
+C -1 ; WX 556 ; N edieresis ; B 84 -23 580 715 ;
+C -1 ; WX 650 ; N dcaron ; B 73 -23 810 729 ;
+C -1 ; WX 500 ; N ccedilla ; B 76 -214 554 539 ;
+C -1 ; WX 500 ; N ccaron ; B 76 -23 563 740 ;
+C -1 ; WX 500 ; N cacute ; B 76 -23 575 740 ;
+C -1 ; WX 556 ; N aogonek ; B 65 -205 571 539 ;
+C -1 ; WX 556 ; N aring ; B 65 -23 568 754 ;
+C -1 ; WX 556 ; N atilde ; B 65 -23 583 719 ;
+C -1 ; WX 556 ; N abreve ; B 65 -23 582 729 ;
+C -1 ; WX 556 ; N egrave ; B 84 -23 580 740 ;
+C -1 ; WX 556 ; N agrave ; B 65 -23 568 740 ;
+C -1 ; WX 556 ; N aacute ; B 65 -23 570 740 ;
+C -1 ; WX 556 ; N adieresis ; B 65 -23 568 715 ;
+C -1 ; WX 722 ; N Uogonek ; B 124 -205 800 729 ;
+C -1 ; WX 556 ; N ugrave ; B 88 -23 594 740 ;
+C -1 ; WX 556 ; N uacute ; B 88 -23 594 740 ;
+C -1 ; WX 556 ; N udieresis ; B 88 -23 594 715 ;
+C -1 ; WX 319 ; N tcaron ; B 97 -23 492 801 ;
+C -1 ; WX 500 ; N scommaaccent ; B 61 -284 520 539 ;
+C -1 ; WX 611 ; N Zcaron ; B 28 0 737 939 ;
+C -1 ; WX 556 ; N ecircumflex ; B 84 -23 580 741 ;
+C -1 ; WX 722 ; N Ucircumflex ; B 124 -23 800 940 ;
+C -1 ; WX 556 ; N acircumflex ; B 65 -23 568 741 ;
+C -1 ; WX 611 ; N Zdotaccent ; B 28 0 737 914 ;
+C -1 ; WX 500 ; N scaron ; B 61 -23 547 740 ;
+C -1 ; WX 667 ; N Amacron ; B 17 0 663 895 ;
+C -1 ; WX 500 ; N sacute ; B 61 -23 545 740 ;
+C -1 ; WX 611 ; N Tcommaaccent ; B 158 -284 748 729 ;
+C -1 ; WX 667 ; N Ydieresis ; B 168 0 816 914 ;
+C -1 ; WX 556 ; N thorn ; B 7 -213 586 729 ;
+C -1 ; WX 667 ; N Emacron ; B 90 0 751 895 ;
+C -1 ; WX 778 ; N Ograve ; B 104 -23 828 939 ;
+C -1 ; WX 778 ; N Oacute ; B 104 -23 828 939 ;
+C -1 ; WX 778 ; N Odieresis ; B 104 -23 828 914 ;
+C -1 ; WX 722 ; N Ntilde ; B 76 0 801 918 ;
+C -1 ; WX 722 ; N Ncaron ; B 76 0 801 939 ;
+C -1 ; WX 722 ; N Nacute ; B 76 0 801 939 ;
+C -1 ; WX 556 ; N Lcaron ; B 80 0 551 729 ;
+C -1 ; WX 556 ; N Lacute ; B 80 0 551 939 ;
+C -1 ; WX 278 ; N Idotaccent ; B 100 0 389 914 ;
+C -1 ; WX 333 ; N racute ; B 69 0 498 740 ;
+C -1 ; WX 278 ; N Icircumflex ; B 100 0 454 940 ;
+C -1 ; WX 556 ; N ohungarumlaut ; B 80 -23 683 740 ;
+C -1 ; WX 556 ; N otilde ; B 80 -23 583 719 ;
+C -1 ; WX 556 ; N Euro ; B 12 -22 636 709 ;
+C -1 ; WX 556 ; N ocircumflex ; B 80 -23 576 741 ;
+C -1 ; WX 390 ; N onesuperior ; B 205 284 393 709 ;
+C -1 ; WX 390 ; N twosuperior ; B 100 284 468 709 ;
+C -1 ; WX 390 ; N threesuperior ; B 123 270 455 709 ;
+C -1 ; WX 278 ; N Igrave ; B 100 0 378 939 ;
+C -1 ; WX 278 ; N Iacute ; B 100 0 479 939 ;
+C -1 ; WX 278 ; N Imacron ; B 100 0 458 895 ;
+C -1 ; WX 278 ; N Iogonek ; B 28 -205 349 729 ;
+C -1 ; WX 278 ; N Idieresis ; B 100 0 467 907 ;
+C -1 ; WX 778 ; N Gbreve ; B 109 -23 809 928 ;
+C -1 ; WX 722 ; N Umacron ; B 124 -23 800 895 ;
+C -1 ; WX 667 ; N Kcommaaccent ; B 79 -284 813 729 ;
+C -1 ; WX 556 ; N ograve ; B 80 -23 576 740 ;
+C -1 ; WX 667 ; N Scommaaccent ; B 89 -284 714 741 ;
+C -1 ; WX 667 ; N Eogonek ; B 90 -205 751 729 ;
+C -1 ; WX 556 ; N oacute ; B 80 -23 576 740 ;
+C -1 ; WX 667 ; N Edotaccent ; B 90 0 751 914 ;
+C -1 ; WX 222 ; N iogonek ; B 0 -205 305 729 ;
+C -1 ; WX 527 ; N gcommaaccent ; B 3 -218 572 813 ;
+C -1 ; WX 556 ; N odieresis ; B 80 -23 576 715 ;
+C -1 ; WX 556 ; N ntilde ; B 70 0 589 719 ;
+C -1 ; WX 556 ; N ncaron ; B 70 0 578 740 ;
+C -1 ; WX 667 ; N Ecaron ; B 90 0 751 939 ;
+C -1 ; WX 667 ; N Ecircumflex ; B 90 0 751 940 ;
+C -1 ; WX 500 ; N scedilla ; B 61 -214 521 539 ;
+C -1 ; WX 333 ; N rcaron ; B 69 0 486 740 ;
+C -1 ; WX 667 ; N Egrave ; B 90 0 751 939 ;
+C -1 ; WX 667 ; N Eacute ; B 90 0 751 939 ;
+C -1 ; WX 778 ; N Gcommaaccent ; B 109 -284 809 741 ;
+C -1 ; WX 722 ; N Rcommaaccent ; B 93 -284 770 729 ;
+C -1 ; WX 667 ; N Edieresis ; B 90 0 751 914 ;
+C -1 ; WX 556 ; N nacute ; B 70 0 580 740 ;
+C -1 ; WX 556 ; N uogonek ; B 88 -205 594 524 ;
+C -1 ; WX 556 ; N umacron ; B 88 -23 594 696 ;
+C -1 ; WX 722 ; N Dcaron ; B 89 0 759 939 ;
+C -1 ; WX 307 ; N lcaron ; B 68 0 467 729 ;
+C -1 ; WX 722 ; N Ccaron ; B 112 -23 770 939 ;
+C -1 ; WX 722 ; N Cacute ; B 112 -23 770 939 ;
+C -1 ; WX 722 ; N Ccedilla ; B 112 -214 770 741 ;
+C -1 ; WX 606 ; N degree ; B 291 383 594 686 ;
+C -1 ; WX 667 ; N Aogonek ; B 17 -205 663 729 ;
+C -1 ; WX 584 ; N minus ; B 81 197 601 269 ;
+C -1 ; WX 584 ; N multiply ; B 113 34 568 427 ;
+C -1 ; WX 584 ; N divide ; B 92 0 591 462 ;
+C -1 ; WX 667 ; N Aring ; B 17 0 653 953 ;
+C -1 ; WX 1000 ; N trademark ; B 208 292 1096 729 ;
+C -1 ; WX 333 ; N rcommaaccent ; B 5 -284 436 539 ;
+C -1 ; WX 222 ; N lacute ; B 68 0 463 939 ;
+C -1 ; WX 556 ; N omacron ; B 80 -23 576 696 ;
+C -1 ; WX 667 ; N Atilde ; B 17 0 680 918 ;
+C -1 ; WX 278 ; N icircumflex ; B 94 0 406 741 ;
+C -1 ; WX 278 ; N igrave ; B 94 0 330 740 ;
+C -1 ; WX 556 ; N ncommaaccent ; B 70 -284 574 539 ;
+C -1 ; WX 222 ; N lcommaaccent ; B -1 -284 307 729 ;
+C -1 ; WX 584 ; N plusminus ; B 50 0 625 633 ;
+C -1 ; WX 947 ; N onehalf ; B 202 -20 965 709 ;
+C -1 ; WX 947 ; N onequarter ; B 205 -20 938 709 ;
+C -1 ; WX 947 ; N threequarters ; B 123 -20 938 709 ;
+C -1 ; WX 278 ; N iacute ; B 94 0 431 740 ;
+C -1 ; WX 667 ; N Abreve ; B 17 0 683 928 ;
+C -1 ; WX 500 ; N kcommaaccent ; B 58 -284 584 729 ;
+C -1 ; WX 778 ; N Omacron ; B 104 -23 828 895 ;
+C -1 ; WX 222 ; N imacron ; B 66 0 373 696 ;
+C -1 ; WX 556 ; N emacron ; B 84 -23 580 696 ;
+C -1 ; WX 556 ; N amacron ; B 65 -23 568 696 ;
+C -1 ; WX 278 ; N tcommaaccent ; B 55 -284 366 668 ;
+C -1 ; WX 500 ; N ydieresis ; B 8 -218 590 715 ;
+C -1 ; WX 500 ; N zdotaccent ; B 31 0 557 715 ;
+C -1 ; WX 500 ; N zcaron ; B 31 0 557 740 ;
+C -1 ; WX 500 ; N zacute ; B 31 0 557 740 ;
+C -1 ; WX 500 ; N yacute ; B 8 -218 590 740 ;
+C -1 ; WX 556 ; N uhungarumlaut ; B 88 -23 683 740 ;
+C -1 ; WX 556 ; N eth ; B 80 -23 576 743 ;
+C -1 ; WX 556 ; N uring ; B 88 -23 594 754 ;
+C -1 ; WX 778 ; N Ocircumflex ; B 104 -23 828 940 ;
+C -1 ; WX 333 ; N commaaccent ; B 57 -284 205 -60 ;
+C -1 ; WX 737 ; N copyright ; B 55 -22 836 742 ;
+C -1 ; WX 737 ; N registered ; B 55 -22 836 742 ;
+C -1 ; WX 667 ; N Acircumflex ; B 17 0 653 940 ;
+C -1 ; WX 278 ; N idieresis ; B 94 0 419 708 ;
+C -1 ; WX 489 ; N lozenge ; B 16 0 462 744 ;
+C -1 ; WX 712 ; N Delta ; B 10 0 701 729 ;
+C -1 ; WX 584 ; N notequal ; B 74 2 609 480 ;
+C -1 ; WX 542 ; N radical ; B 102 -36 705 913 ;
+C -1 ; WX 667 ; N Agrave ; B 17 0 653 939 ;
+C -1 ; WX 667 ; N Aacute ; B 17 0 667 939 ;
+C -1 ; WX 584 ; N lessequal ; B 45 0 659 584 ;
+C -1 ; WX 584 ; N greaterequal ; B 56 0 626 584 ;
+C -1 ; WX 584 ; N logicalnot ; B 99 86 619 377 ;
+C -1 ; WX 711 ; N summation ; B -18 -97 760 762 ;
+C -1 ; WX 490 ; N partialdiff ; B 22 -15 458 750 ;
+C -1 ; WX 722 ; N Ncommaaccent ; B 76 -284 801 729 ;
+C -1 ; WX 556 ; N dcroat ; B 73 -23 695 729 ;
+C -1 ; WX 260 ; N brokenbar ; B 54 -212 315 729 ;
+C -1 ; WX 556 ; N Lcommaaccent ; B 80 -284 551 729 ;
+C -1 ; WX 667 ; N Adieresis ; B 17 0 662 914 ;
+C -1 ; WX 556 ; N mu ; B 18 -220 593 524 ;
+C -1 ; WX 278 ; N .notdef ; B 213 0 213 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -41
+KPX A Ccedilla -41
+KPX A G -41
+KPX A O -37
+KPX A Odieresis -37
+KPX A Q -38
+KPX A T -103
+KPX A U -42
+KPX A Uacute -42
+KPX A Ucircumflex -42
+KPX A Udieresis -42
+KPX A Ugrave -42
+KPX A V -81
+KPX A W -57
+KPX A Y -104
+KPX A a -16
+KPX A b -5
+KPX A c -16
+KPX A ccedilla -16
+KPX A comma -4
+KPX A d -14
+KPX A e -22
+KPX A g -17
+KPX A guillemotleft -51
+KPX A guilsinglleft -47
+KPX A hyphen -8
+KPX A o -19
+KPX A period -2
+KPX A q -15
+KPX A quotedblright -60
+KPX A quoteright -68
+KPX A t -22
+KPX A u -18
+KPX A v -40
+KPX A w -29
+KPX A y -44
+KPX Aacute C -42
+KPX Aacute G -42
+KPX Aacute O -38
+KPX Aacute Q -39
+KPX Aacute T -103
+KPX Aacute U -43
+KPX Aacute V -81
+KPX Aacute W -57
+KPX Aacute Y -104
+KPX Aacute a -16
+KPX Aacute b -6
+KPX Aacute c -17
+KPX Aacute comma -4
+KPX Aacute d -15
+KPX Aacute e -23
+KPX Aacute g -17
+KPX Aacute guillemotleft -51
+KPX Aacute guilsinglleft -48
+KPX Aacute hyphen -9
+KPX Aacute o -20
+KPX Aacute period -3
+KPX Aacute q -16
+KPX Aacute quoteright -68
+KPX Aacute t -23
+KPX Aacute u -20
+KPX Aacute v -40
+KPX Aacute w -29
+KPX Aacute y -44
+KPX Acircumflex C -41
+KPX Acircumflex G -41
+KPX Acircumflex O -37
+KPX Acircumflex Q -38
+KPX Acircumflex T -103
+KPX Acircumflex U -42
+KPX Acircumflex V -81
+KPX Acircumflex W -57
+KPX Acircumflex Y -104
+KPX Acircumflex comma -4
+KPX Acircumflex period -2
+KPX Adieresis C -42
+KPX Adieresis G -41
+KPX Adieresis O -38
+KPX Adieresis Q -39
+KPX Adieresis T -103
+KPX Adieresis U -43
+KPX Adieresis V -81
+KPX Adieresis W -57
+KPX Adieresis Y -104
+KPX Adieresis a -16
+KPX Adieresis b -5
+KPX Adieresis c -17
+KPX Adieresis comma -4
+KPX Adieresis d -14
+KPX Adieresis g -17
+KPX Adieresis guillemotleft -51
+KPX Adieresis guilsinglleft -48
+KPX Adieresis hyphen -8
+KPX Adieresis o -19
+KPX Adieresis period -3
+KPX Adieresis q -15
+KPX Adieresis quotedblright -60
+KPX Adieresis quoteright -68
+KPX Adieresis t -22
+KPX Adieresis u -19
+KPX Adieresis v -40
+KPX Adieresis w -29
+KPX Adieresis y -44
+KPX Agrave C -41
+KPX Agrave G -41
+KPX Agrave O -37
+KPX Agrave Q -38
+KPX Agrave T -103
+KPX Agrave U -42
+KPX Agrave V -81
+KPX Agrave W -57
+KPX Agrave Y -104
+KPX Agrave comma -4
+KPX Agrave period -2
+KPX Aring C -41
+KPX Aring G -41
+KPX Aring O -37
+KPX Aring Q -38
+KPX Aring T -103
+KPX Aring U -42
+KPX Aring V -81
+KPX Aring W -57
+KPX Aring Y -104
+KPX Aring a -16
+KPX Aring b -5
+KPX Aring c -16
+KPX Aring comma -4
+KPX Aring d -14
+KPX Aring e -22
+KPX Aring g -17
+KPX Aring guillemotleft -51
+KPX Aring guilsinglleft -47
+KPX Aring hyphen -8
+KPX Aring o -19
+KPX Aring period -2
+KPX Aring q -15
+KPX Aring quotedblright -60
+KPX Aring quoteright -68
+KPX Aring t -22
+KPX Aring u -18
+KPX Aring v -40
+KPX Aring w -29
+KPX Aring y -44
+KPX Atilde C -43
+KPX Atilde G -42
+KPX Atilde O -39
+KPX Atilde Q -40
+KPX Atilde T -103
+KPX Atilde U -44
+KPX Atilde V -81
+KPX Atilde W -57
+KPX Atilde Y -104
+KPX Atilde comma -4
+KPX Atilde period -4
+KPX B A -28
+KPX B AE -29
+KPX B Aacute -28
+KPX B Acircumflex -28
+KPX B Adieresis -28
+KPX B Aring -28
+KPX B Atilde -28
+KPX B O -14
+KPX B OE -11
+KPX B Oacute -14
+KPX B Ocircumflex -14
+KPX B Odieresis -14
+KPX B Ograve -14
+KPX B Oslash -2
+KPX B V -49
+KPX B W -27
+KPX B Y -56
+KPX C A -43
+KPX C AE -44
+KPX C Aacute -43
+KPX C Adieresis -43
+KPX C Aring -43
+KPX C H -22
+KPX C K -20
+KPX C O -18
+KPX C Oacute -18
+KPX C Odieresis -18
+KPX Ccedilla A -44
+KPX D A -50
+KPX D Aacute -50
+KPX D Acircumflex -50
+KPX D Adieresis -50
+KPX D Agrave -50
+KPX D Aring -50
+KPX D Atilde -50
+KPX D J -13
+KPX D T -56
+KPX D V -54
+KPX D W -31
+KPX D X -58
+KPX D Y -74
+KPX F A -78
+KPX F Aacute -78
+KPX F Acircumflex -78
+KPX F Adieresis -78
+KPX F Agrave -78
+KPX F Aring -78
+KPX F Atilde -78
+KPX F J -59
+KPX F O -30
+KPX F Odieresis -30
+KPX F a -45
+KPX F aacute -45
+KPX F adieresis -45
+KPX F ae -41
+KPX F aring -45
+KPX F comma -113
+KPX F e -33
+KPX F eacute -33
+KPX F hyphen -20
+KPX F i -19
+KPX F j -19
+KPX F o -30
+KPX F oacute -30
+KPX F odieresis -30
+KPX F oe -33
+KPX F oslash -30
+KPX F period -113
+KPX F r -44
+KPX F u -42
+KPX G A -14
+KPX G AE -11
+KPX G Aacute -14
+KPX G Acircumflex -14
+KPX G Adieresis -14
+KPX G Agrave -14
+KPX G Aring -14
+KPX G Atilde -14
+KPX G T -53
+KPX G V -53
+KPX G W -31
+KPX G Y -72
+KPX J A -39
+KPX J AE -39
+KPX J Adieresis -39
+KPX J Aring -39
+KPX K C -56
+KPX K G -57
+KPX K O -53
+KPX K OE -49
+KPX K Oacute -53
+KPX K Odieresis -53
+KPX K S -48
+KPX K T 14
+KPX K a -23
+KPX K adieresis -23
+KPX K ae -20
+KPX K aring -23
+KPX K e -46
+KPX K hyphen -53
+KPX K o -42
+KPX K oacute -42
+KPX K odieresis -42
+KPX K u -32
+KPX K udieresis -32
+KPX K y -76
+KPX L A 8
+KPX L AE 11
+KPX L Aacute 8
+KPX L Adieresis 8
+KPX L Aring 8
+KPX L C -52
+KPX L Ccedilla -51
+KPX L G -53
+KPX L O -51
+KPX L Oacute -51
+KPX L Ocircumflex -51
+KPX L Odieresis -51
+KPX L Ograve -51
+KPX L Otilde -51
+KPX L S -28
+KPX L T -112
+KPX L U -46
+KPX L Udieresis -46
+KPX L V -115
+KPX L W -77
+KPX L Y -128
+KPX L hyphen -140
+KPX L quotedblright -145
+KPX L quoteright -153
+KPX L u -17
+KPX L udieresis -17
+KPX L y -68
+KPX N A -19
+KPX N AE -16
+KPX N Aacute -19
+KPX N Adieresis -19
+KPX N Aring -19
+KPX N C -15
+KPX N Ccedilla -14
+KPX N G -14
+KPX N O -11
+KPX N Oacute -11
+KPX N Odieresis -11
+KPX N a -17
+KPX N aacute -17
+KPX N adieresis -17
+KPX N ae -13
+KPX N aring -17
+KPX N comma -15
+KPX N e -11
+KPX N eacute -11
+KPX N o -8
+KPX N oacute -8
+KPX N odieresis -8
+KPX N oslash -4
+KPX N period -15
+KPX N u -8
+KPX N udieresis -9
+KPX O A -43
+KPX O AE -47
+KPX O Aacute -43
+KPX O Adieresis -43
+KPX O Aring -43
+KPX O T -54
+KPX O V -48
+KPX O W -25
+KPX O X -52
+KPX O Y -71
+KPX Oacute A -43
+KPX Oacute T -54
+KPX Oacute V -48
+KPX Oacute W -25
+KPX Oacute Y -71
+KPX Ocircumflex T -54
+KPX Ocircumflex V -48
+KPX Ocircumflex Y -71
+KPX Odieresis A -43
+KPX Odieresis T -54
+KPX Odieresis V -48
+KPX Odieresis W -25
+KPX Odieresis X -52
+KPX Odieresis Y -71
+KPX Ograve T -54
+KPX Ograve V -48
+KPX Ograve Y -71
+KPX Oslash A -47
+KPX Otilde T -54
+KPX Otilde V -48
+KPX Otilde Y -71
+KPX P A -86
+KPX P AE -93
+KPX P Aacute -86
+KPX P Adieresis -86
+KPX P Aring -86
+KPX P J -85
+KPX P a -39
+KPX P aacute -39
+KPX P adieresis -39
+KPX P ae -35
+KPX P aring -39
+KPX P comma -138
+KPX P e -38
+KPX P eacute -38
+KPX P hyphen -45
+KPX P o -34
+KPX P oacute -34
+KPX P odieresis -34
+KPX P oe -38
+KPX P oslash -35
+KPX P period -138
+KPX R C -21
+KPX R Ccedilla -21
+KPX R G -21
+KPX R O -17
+KPX R OE -14
+KPX R Oacute -17
+KPX R Odieresis -17
+KPX R T -33
+KPX R U -21
+KPX R Udieresis -21
+KPX R V -49
+KPX R W -27
+KPX R Y -54
+KPX R a -21
+KPX R aacute -21
+KPX R adieresis -21
+KPX R ae -17
+KPX R aring -21
+KPX R e -16
+KPX R eacute -16
+KPX R hyphen -4
+KPX R o -13
+KPX R oacute -13
+KPX R odieresis -13
+KPX R oe -16
+KPX R u -13
+KPX R uacute -14
+KPX R udieresis -14
+KPX R y -16
+KPX S A -31
+KPX S AE -31
+KPX S Aacute -31
+KPX S Adieresis -31
+KPX S Aring -31
+KPX S T -38
+KPX S V -52
+KPX S W -31
+KPX S Y -58
+KPX S t -11
+KPX T A -104
+KPX T AE -106
+KPX T Aacute -104
+KPX T Acircumflex -104
+KPX T Adieresis -104
+KPX T Agrave -104
+KPX T Aring -104
+KPX T Atilde -104
+KPX T C -53
+KPX T G -55
+KPX T J -108
+KPX T O -50
+KPX T OE -44
+KPX T Oacute -50
+KPX T Ocircumflex -50
+KPX T Odieresis -50
+KPX T Ograve -50
+KPX T Oslash -42
+KPX T Otilde -50
+KPX T S -32
+KPX T V 2
+KPX T W 7
+KPX T Y 10
+KPX T a -107
+KPX T ae -104
+KPX T c -96
+KPX T colon -152
+KPX T comma -105
+KPX T e -102
+KPX T g -94
+KPX T guillemotleft -126
+KPX T guilsinglleft -123
+KPX T hyphen -82
+KPX T i -12
+KPX T j -12
+KPX T o -99
+KPX T oslash -94
+KPX T period -105
+KPX T r -98
+KPX T s -98
+KPX T semicolon -140
+KPX T u -98
+KPX T v -106
+KPX T w -103
+KPX T y -110
+KPX U A -45
+KPX U AE -48
+KPX U Aacute -45
+KPX U Acircumflex -45
+KPX U Adieresis -45
+KPX U Aring -45
+KPX U Atilde -45
+KPX U comma -35
+KPX U m -17
+KPX U n -16
+KPX U p -8
+KPX U period -32
+KPX U r -16
+KPX Uacute A -45
+KPX Uacute comma -35
+KPX Uacute m -17
+KPX Uacute n -16
+KPX Uacute p -8
+KPX Uacute period -32
+KPX Uacute r -16
+KPX Ucircumflex A -45
+KPX Udieresis A -44
+KPX Udieresis b -8
+KPX Udieresis comma -35
+KPX Udieresis m -17
+KPX Udieresis n -16
+KPX Udieresis p -8
+KPX Udieresis period -32
+KPX Udieresis r -16
+KPX Ugrave A -45
+KPX V A -77
+KPX V AE -84
+KPX V Aacute -77
+KPX V Acircumflex -77
+KPX V Adieresis -77
+KPX V Agrave -77
+KPX V Aring -77
+KPX V Atilde -77
+KPX V C -50
+KPX V G -50
+KPX V O -46
+KPX V Oacute -46
+KPX V Ocircumflex -46
+KPX V Odieresis -46
+KPX V Ograve -46
+KPX V Oslash -34
+KPX V Otilde -46
+KPX V S -44
+KPX V T 7
+KPX V a -71
+KPX V ae -66
+KPX V colon -76
+KPX V comma -94
+KPX V e -64
+KPX V g -57
+KPX V guillemotleft -88
+KPX V guilsinglleft -84
+KPX V hyphen -44
+KPX V i -14
+KPX V o -61
+KPX V oslash -57
+KPX V period -94
+KPX V r -51
+KPX V semicolon -75
+KPX V u -52
+KPX V y -28
+KPX W A -56
+KPX W AE -62
+KPX W Aacute -56
+KPX W Acircumflex -56
+KPX W Adieresis -56
+KPX W Agrave -56
+KPX W Aring -56
+KPX W Atilde -56
+KPX W C -30
+KPX W G -30
+KPX W O -26
+KPX W Oacute -26
+KPX W Ocircumflex -26
+KPX W Odieresis -26
+KPX W Ograve -26
+KPX W Oslash -14
+KPX W Otilde -26
+KPX W S -31
+KPX W T 11
+KPX W a -46
+KPX W ae -42
+KPX W colon -62
+KPX W comma -62
+KPX W e -39
+KPX W g -32
+KPX W guillemotleft -63
+KPX W guilsinglleft -60
+KPX W hyphen -19
+KPX W i -10
+KPX W o -36
+KPX W oslash -32
+KPX W period -62
+KPX W r -36
+KPX W semicolon -62
+KPX W u -36
+KPX W y -15
+KPX X C -53
+KPX X O -50
+KPX X Odieresis -50
+KPX X Q -51
+KPX X a -27
+KPX X e -51
+KPX X hyphen -57
+KPX X o -46
+KPX X u -36
+KPX X y -67
+KPX Y A -102
+KPX Y AE -108
+KPX Y Aacute -102
+KPX Y Acircumflex -102
+KPX Y Adieresis -102
+KPX Y Agrave -102
+KPX Y Aring -102
+KPX Y Atilde -102
+KPX Y C -68
+KPX Y G -69
+KPX Y O -64
+KPX Y Oacute -64
+KPX Y Ocircumflex -64
+KPX Y Odieresis -64
+KPX Y Ograve -64
+KPX Y Oslash -55
+KPX Y Otilde -64
+KPX Y S -49
+KPX Y T 15
+KPX Y a -100
+KPX Y ae -95
+KPX Y colon -97
+KPX Y comma -117
+KPX Y e -97
+KPX Y g -89
+KPX Y guillemotleft -128
+KPX Y guilsinglleft -124
+KPX Y hyphen -89
+KPX Y i -6
+KPX Y o -93
+KPX Y oslash -89
+KPX Y p -63
+KPX Y period -117
+KPX Y semicolon -97
+KPX Y u -73
+KPX Y v -48
+KPX Z v -44
+KPX Z y -44
+KPX a j -10
+KPX a quoteright -23
+KPX a v -26
+KPX a w -16
+KPX a y -33
+KPX aacute v -26
+KPX aacute w -16
+KPX aacute y -33
+KPX adieresis v -26
+KPX adieresis w -16
+KPX adieresis y -33
+KPX ae v -26
+KPX ae w -15
+KPX ae y -32
+KPX agrave v -26
+KPX agrave w -16
+KPX agrave y -33
+KPX aring v -26
+KPX aring w -16
+KPX aring y -33
+KPX b v -21
+KPX b w -10
+KPX b y -28
+KPX c h -7
+KPX c k -1
+KPX comma one -105
+KPX comma quotedblright -47
+KPX comma quoteright -55
+KPX e quoteright -20
+KPX e t -16
+KPX e v -26
+KPX e w -16
+KPX e x -35
+KPX e y -33
+KPX eacute v -26
+KPX eacute w -16
+KPX eacute y -33
+KPX ecircumflex v -26
+KPX ecircumflex w -16
+KPX ecircumflex y -33
+KPX eight four -6
+KPX eight one -55
+KPX eight seven -43
+KPX f a -20
+KPX f aacute -20
+KPX f adieresis -20
+KPX f ae -15
+KPX f aring -20
+KPX f e -21
+KPX f eacute -21
+KPX f f 12
+KPX f i -10
+KPX f j -11
+KPX f l -12
+KPX f o -18
+KPX f oacute -18
+KPX f odieresis -18
+KPX f oe -20
+KPX f oslash -16
+KPX f quoteright -8
+KPX f s -8
+KPX f t 16
+KPX five four -7
+KPX five one -83
+KPX five seven -32
+KPX four four -3
+KPX four one -88
+KPX four seven -65
+KPX g a -17
+KPX g adieresis -17
+KPX g ae -13
+KPX g aring -17
+KPX g e -11
+KPX g eacute -11
+KPX g l -8
+KPX g oacute -8
+KPX g odieresis -8
+KPX g r -9
+KPX guillemotright A -58
+KPX guillemotright AE -62
+KPX guillemotright Aacute -58
+KPX guillemotright Adieresis -58
+KPX guillemotright Aring -58
+KPX guillemotright T -132
+KPX guillemotright V -96
+KPX guillemotright W -68
+KPX guillemotright Y -137
+KPX guilsinglright A -52
+KPX guilsinglright AE -56
+KPX guilsinglright Aacute -52
+KPX guilsinglright Adieresis -52
+KPX guilsinglright Aring -52
+KPX guilsinglright T -126
+KPX guilsinglright V -90
+KPX guilsinglright W -62
+KPX guilsinglright Y -131
+KPX h quoteright -19
+KPX h y -31
+KPX hyphen A -12
+KPX hyphen AE -17
+KPX hyphen Aacute -12
+KPX hyphen Adieresis -12
+KPX hyphen Aring -12
+KPX hyphen T -86
+KPX hyphen V -51
+KPX hyphen W -24
+KPX hyphen Y -97
+KPX i T -16
+KPX i j -10
+KPX k a -14
+KPX k aacute -14
+KPX k adieresis -14
+KPX k ae -12
+KPX k aring -14
+KPX k comma -13
+KPX k e -33
+KPX k eacute -33
+KPX k g -26
+KPX k hyphen -49
+KPX k o -30
+KPX k oacute -30
+KPX k odieresis -30
+KPX k period -13
+KPX k s -14
+KPX k u -22
+KPX k udieresis -16
+KPX l v -11
+KPX l y -15
+KPX m p -3
+KPX m v -24
+KPX m w -14
+KPX m y -30
+KPX n T -103
+KPX n p -3
+KPX n quoteright -19
+KPX n v -24
+KPX n w -14
+KPX n y -31
+KPX nine four -12
+KPX nine one -55
+KPX nine seven -50
+KPX o T -106
+KPX o quoteright -23
+KPX o t -17
+KPX o v -27
+KPX o w -16
+KPX o x -35
+KPX o y -34
+KPX oacute v -27
+KPX oacute w -16
+KPX oacute y -34
+KPX ocircumflex t -17
+KPX odieresis t -17
+KPX odieresis v -27
+KPX odieresis w -16
+KPX odieresis x -35
+KPX odieresis y -34
+KPX ograve v -27
+KPX ograve w -16
+KPX ograve y -34
+KPX one comma -82
+KPX one eight -73
+KPX one five -72
+KPX one four -88
+KPX one nine -71
+KPX one one -125
+KPX one period -82
+KPX one seven -98
+KPX one six -71
+KPX one three -75
+KPX one two -78
+KPX one zero -71
+KPX p t -10
+KPX p y -28
+KPX period one -106
+KPX period quotedblright -48
+KPX period quoteright -56
+KPX q c -2
+KPX q u -5
+KPX quotedblbase A 21
+KPX quotedblbase AE 21
+KPX quotedblbase T -80
+KPX quotedblbase V -74
+KPX quotedblbase W -39
+KPX quotedblbase Y -96
+KPX quotedblleft A -58
+KPX quotedblleft AE -70
+KPX quotedblleft Aacute -58
+KPX quotedblleft Adieresis -58
+KPX quotedblleft Aring -58
+KPX quotedblleft T 1
+KPX quotedblleft V 10
+KPX quotedblleft W 22
+KPX quotedblleft Y -1
+KPX quotedblright A -60
+KPX quotedblright AE -72
+KPX quotedblright Aacute -60
+KPX quotedblright Adieresis -60
+KPX quotedblright Aring -60
+KPX quotedblright T 2
+KPX quotedblright V 9
+KPX quotedblright W 21
+KPX quotedblright Y -2
+KPX quoteleft A -74
+KPX quoteleft AE -86
+KPX quoteleft Aacute -74
+KPX quoteleft Adieresis -74
+KPX quoteleft Aring -74
+KPX quoteleft T -14
+KPX quoteleft V -5
+KPX quoteleft W 6
+KPX quoteleft Y -17
+KPX quoteright A -76
+KPX quoteright AE -88
+KPX quoteright Aacute -76
+KPX quoteright Adieresis -76
+KPX quoteright Aring -76
+KPX quoteright comma -68
+KPX quoteright d -25
+KPX quoteright o -31
+KPX quoteright period -68
+KPX quoteright r -24
+KPX quoteright s -23
+KPX quoteright t -14
+KPX quoteright v -10
+KPX quoteright w -5
+KPX quoteright y -14
+KPX r a -16
+KPX r aacute -16
+KPX r acircumflex -16
+KPX r adieresis -16
+KPX r ae -11
+KPX r agrave -16
+KPX r aring -16
+KPX r c -11
+KPX r ccedilla -11
+KPX r colon -31
+KPX r comma -77
+KPX r d -8
+KPX r e -17
+KPX r eacute -17
+KPX r ecircumflex -17
+KPX r egrave -17
+KPX r f 17
+KPX r g -8
+KPX r h -8
+KPX r hyphen -54
+KPX r i -6
+KPX r j -6
+KPX r k -2
+KPX r l -7
+KPX r m -9
+KPX r n -8
+KPX r o -14
+KPX r oacute -14
+KPX r ocircumflex -14
+KPX r odieresis -14
+KPX r oe -16
+KPX r ograve -14
+KPX r oslash -14
+KPX r p 0
+KPX r period -77
+KPX r q -10
+KPX r quoteright -6
+KPX r r -8
+KPX r s -4
+KPX r semicolon -30
+KPX r t 21
+KPX r u -7
+KPX r v 18
+KPX r w 21
+KPX r x 9
+KPX r y 15
+KPX r z 0
+KPX s quoteright -24
+KPX s t -15
+KPX seven colon -84
+KPX seven comma -123
+KPX seven eight -34
+KPX seven five -37
+KPX seven four -95
+KPX seven one -58
+KPX seven period -123
+KPX seven seven -11
+KPX seven six -44
+KPX seven three -29
+KPX seven two -31
+KPX six four -7
+KPX six one -52
+KPX six seven -40
+KPX t S -17
+KPX t a -10
+KPX t aacute -10
+KPX t adieresis -10
+KPX t ae -7
+KPX t aring -10
+KPX t colon -37
+KPX t e -22
+KPX t eacute -22
+KPX t h -14
+KPX t o -19
+KPX t oacute -19
+KPX t odieresis -19
+KPX t quoteright -7
+KPX t semicolon -36
+KPX three four -9
+KPX three one -57
+KPX three seven -45
+KPX two four -43
+KPX two one -45
+KPX two seven -38
+KPX u quoteright -14
+KPX v a -30
+KPX v aacute -30
+KPX v acircumflex -30
+KPX v adieresis -30
+KPX v ae -25
+KPX v agrave -30
+KPX v aring -30
+KPX v atilde -30
+KPX v c -22
+KPX v colon -32
+KPX v comma -76
+KPX v e -29
+KPX v eacute -29
+KPX v ecircumflex -29
+KPX v egrave -29
+KPX v g -20
+KPX v hyphen -19
+KPX v l -8
+KPX v o -25
+KPX v oacute -25
+KPX v odieresis -25
+KPX v ograve -25
+KPX v oslash -25
+KPX v period -76
+KPX v s -17
+KPX v semicolon -31
+KPX w a -26
+KPX w aacute -26
+KPX w acircumflex -26
+KPX w adieresis -26
+KPX w ae -22
+KPX w agrave -26
+KPX w aring -26
+KPX w atilde -26
+KPX w c -14
+KPX w colon -32
+KPX w comma -57
+KPX w e -20
+KPX w eacute -20
+KPX w ecircumflex -20
+KPX w egrave -20
+KPX w g -13
+KPX w hyphen -8
+KPX w l -8
+KPX w o -17
+KPX w oacute -17
+KPX w odieresis -17
+KPX w ograve -17
+KPX w oslash -14
+KPX w period -57
+KPX w s -14
+KPX w semicolon -31
+KPX x a -30
+KPX x c -30
+KPX x e -36
+KPX x eacute -36
+KPX x o -33
+KPX x q -28
+KPX y a -36
+KPX y aacute -36
+KPX y acircumflex -36
+KPX y adieresis -36
+KPX y ae -31
+KPX y agrave -36
+KPX y aring -36
+KPX y atilde -36
+KPX y c -28
+KPX y colon -40
+KPX y comma -80
+KPX y e -35
+KPX y eacute -35
+KPX y ecircumflex -35
+KPX y egrave -35
+KPX y g -26
+KPX y hyphen -24
+KPX y l -14
+KPX y o -31
+KPX y oacute -31
+KPX y odieresis -31
+KPX y ograve -31
+KPX y oslash -30
+KPX y period -80
+KPX y s -23
+KPX y semicolon -40
+KPX zero four -11
+KPX zero one -56
+KPX zero seven -50
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/n019023l.pfb b/Master/xemtex/gsfonts/n019023l.pfb
new file mode 100644
index 00000000000..5839dab44f4
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019023l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/n019023l.pfm b/Master/xemtex/gsfonts/n019023l.pfm
new file mode 100644
index 00000000000..9a37bd0c8dd
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019023l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/n019024l.afm b/Master/xemtex/gsfonts/n019024l.afm
new file mode 100644
index 00000000000..d44cf45651e
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019024l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName NimbusSanL-BoldItal
+FullName Nimbus Sans L Bold Italic
+FamilyName Nimbus Sans L
+Weight Bold
+ItalicAngle -12.0
+IsFixedPitch false
+UnderlinePosition -111
+UnderlineThickness 69
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -177 -309 1107 953
+CapHeight 729
+XHeight 540
+Descender -217
+Ascender 729
+StartCharMetrics 316
+C 32 ; WX 278 ; N space ; B 245 0 245 0 ;
+C 33 ; WX 333 ; N exclam ; B 112 0 417 726 ;
+C 34 ; WX 474 ; N quotedbl ; B 177 470 579 729 ;
+C 35 ; WX 556 ; N numbersign ; B 33 -32 660 697 ;
+C 36 ; WX 556 ; N dollar ; B 59 -126 628 763 ;
+C 37 ; WX 889 ; N percent ; B 129 -20 903 709 ;
+C 38 ; WX 722 ; N ampersand ; B 89 -23 720 723 ;
+C 39 ; WX 278 ; N quoteright ; B 165 469 356 729 ;
+C 40 ; WX 333 ; N parenleft ; B 84 -200 458 729 ;
+C 41 ; WX 333 ; N parenright ; B -21 -200 356 729 ;
+C 42 ; WX 389 ; N asterisk ; B 145 407 478 729 ;
+C 43 ; WX 584 ; N plus ; B 87 -10 596 473 ;
+C 44 ; WX 278 ; N comma ; B 27 -174 245 146 ;
+C 45 ; WX 333 ; N hyphen ; B 70 207 371 342 ;
+C 46 ; WX 278 ; N period ; B 64 0 245 146 ;
+C 47 ; WX 278 ; N slash ; B -1 -14 427 714 ;
+C 48 ; WX 556 ; N zero ; B 81 -23 614 724 ;
+C 49 ; WX 556 ; N one ; B 172 0 529 709 ;
+C 50 ; WX 556 ; N two ; B 30 0 628 724 ;
+C 51 ; WX 556 ; N three ; B 67 -23 613 724 ;
+C 52 ; WX 556 ; N four ; B 57 0 599 709 ;
+C 53 ; WX 556 ; N five ; B 59 -23 641 709 ;
+C 54 ; WX 556 ; N six ; B 85 -23 625 724 ;
+C 55 ; WX 556 ; N seven ; B 131 0 679 709 ;
+C 56 ; WX 556 ; N eight ; B 60 -23 620 724 ;
+C 57 ; WX 556 ; N nine ; B 68 -23 611 724 ;
+C 58 ; WX 333 ; N colon ; B 113 0 374 520 ;
+C 59 ; WX 333 ; N semicolon ; B 76 -174 374 520 ;
+C 60 ; WX 584 ; N less ; B 77 -10 630 474 ;
+C 61 ; WX 584 ; N equal ; B 61 52 622 412 ;
+C 62 ; WX 584 ; N greater ; B 38 -10 591 474 ;
+C 63 ; WX 611 ; N question ; B 168 0 672 744 ;
+C 64 ; WX 975 ; N at ; B 73 -137 1032 745 ;
+C 65 ; WX 722 ; N A ; B 26 0 703 729 ;
+C 66 ; WX 722 ; N B ; B 82 0 762 729 ;
+C 67 ; WX 722 ; N C ; B 107 -23 793 741 ;
+C 68 ; WX 722 ; N D ; B 77 0 776 729 ;
+C 69 ; WX 667 ; N E ; B 79 0 762 729 ;
+C 70 ; WX 611 ; N F ; B 74 0 741 729 ;
+C 71 ; WX 778 ; N G ; B 107 -23 819 741 ;
+C 72 ; WX 722 ; N H ; B 68 0 812 729 ;
+C 73 ; WX 278 ; N I ; B 63 0 368 729 ;
+C 74 ; WX 556 ; N J ; B 59 -23 641 729 ;
+C 75 ; WX 722 ; N K ; B 74 0 843 729 ;
+C 76 ; WX 611 ; N L ; B 80 0 606 729 ;
+C 77 ; WX 833 ; N M ; B 66 0 931 729 ;
+C 78 ; WX 722 ; N N ; B 68 0 816 729 ;
+C 79 ; WX 778 ; N O ; B 106 -23 828 741 ;
+C 80 ; WX 667 ; N P ; B 76 0 747 729 ;
+C 81 ; WX 778 ; N Q ; B 109 -54 831 741 ;
+C 82 ; WX 722 ; N R ; B 80 0 785 729 ;
+C 83 ; WX 667 ; N S ; B 76 -23 725 741 ;
+C 84 ; WX 611 ; N T ; B 142 0 753 729 ;
+C 85 ; WX 722 ; N U ; B 119 -23 809 729 ;
+C 86 ; WX 667 ; N V ; B 179 0 802 729 ;
+C 87 ; WX 944 ; N W ; B 168 0 1087 729 ;
+C 88 ; WX 667 ; N X ; B 22 0 802 729 ;
+C 89 ; WX 667 ; N Y ; B 182 0 805 729 ;
+C 90 ; WX 611 ; N Z ; B 30 0 733 729 ;
+C 91 ; WX 333 ; N bracketleft ; B 23 -200 463 729 ;
+C 92 ; WX 278 ; N backslash ; B 138 -23 285 709 ;
+C 93 ; WX 333 ; N bracketright ; B -25 -200 415 729 ;
+C 94 ; WX 584 ; N asciicircum ; B 119 270 580 695 ;
+C 95 ; WX 556 ; N underscore ; B -65 -145 550 -76 ;
+C 96 ; WX 278 ; N quoteleft ; B 167 469 357 729 ;
+C 97 ; WX 556 ; N a ; B 50 -23 578 549 ;
+C 98 ; WX 611 ; N b ; B 59 -23 640 729 ;
+C 99 ; WX 556 ; N c ; B 77 -23 597 549 ;
+C 100 ; WX 611 ; N d ; B 79 -23 700 729 ;
+C 101 ; WX 556 ; N e ; B 64 -23 591 549 ;
+C 102 ; WX 333 ; N f ; B 90 0 464 729 ;
+C 103 ; WX 611 ; N g ; B 26 -218 656 549 ;
+C 104 ; WX 611 ; N h ; B 67 0 629 729 ;
+C 105 ; WX 278 ; N i ; B 67 0 362 729 ;
+C 106 ; WX 278 ; N j ; B -43 -218 365 729 ;
+C 107 ; WX 556 ; N k ; B 59 0 651 729 ;
+C 108 ; WX 278 ; N l ; B 67 0 362 729 ;
+C 109 ; WX 889 ; N m ; B 60 0 911 549 ;
+C 110 ; WX 611 ; N n ; B 63 0 629 549 ;
+C 111 ; WX 611 ; N o ; B 82 -23 634 549 ;
+C 112 ; WX 611 ; N p ; B 11 -218 637 549 ;
+C 113 ; WX 611 ; N q ; B 72 -218 659 549 ;
+C 114 ; WX 389 ; N r ; B 63 0 487 549 ;
+C 115 ; WX 556 ; N s ; B 60 -23 589 549 ;
+C 116 ; WX 333 ; N t ; B 101 -23 414 674 ;
+C 117 ; WX 611 ; N u ; B 88 -23 656 540 ;
+C 118 ; WX 556 ; N v ; B 129 0 651 540 ;
+C 119 ; WX 778 ; N w ; B 120 0 881 540 ;
+C 120 ; WX 556 ; N x ; B 16 0 648 540 ;
+C 121 ; WX 556 ; N y ; B 37 -219 653 540 ;
+C 122 ; WX 500 ; N z ; B 21 0 575 540 ;
+C 123 ; WX 389 ; N braceleft ; B 84 -200 472 729 ;
+C 124 ; WX 280 ; N bar ; B 57 -200 335 729 ;
+C 125 ; WX 389 ; N braceright ; B 29 -200 419 729 ;
+C 126 ; WX 584 ; N asciitilde ; B 97 142 581 314 ;
+C 161 ; WX 333 ; N exclamdown ; B 26 -186 331 540 ;
+C 162 ; WX 556 ; N cent ; B 79 -124 598 634 ;
+C 163 ; WX 556 ; N sterling ; B 49 -23 629 715 ;
+C 164 ; WX 167 ; N fraction ; B -177 -20 489 715 ;
+C 165 ; WX 556 ; N yen ; B 107 0 702 704 ;
+C 166 ; WX 556 ; N florin ; B -21 -220 690 744 ;
+C 167 ; WX 556 ; N section ; B 56 -201 596 723 ;
+C 168 ; WX 556 ; N currency ; B 66 100 644 604 ;
+C 169 ; WX 238 ; N quotesingle ; B 177 470 343 729 ;
+C 170 ; WX 500 ; N quotedblleft ; B 171 469 588 729 ;
+C 171 ; WX 556 ; N guillemotleft ; B 135 72 571 481 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 128 72 351 481 ;
+C 173 ; WX 333 ; N guilsinglright ; B 96 72 319 481 ;
+C 174 ; WX 611 ; N fi ; B 85 0 703 729 ;
+C 175 ; WX 611 ; N fl ; B 88 0 701 729 ;
+C 177 ; WX 556 ; N endash ; B 35 207 624 311 ;
+C 178 ; WX 556 ; N dagger ; B 109 -194 626 709 ;
+C 179 ; WX 556 ; N daggerdbl ; B 35 -194 623 709 ;
+C 180 ; WX 278 ; N periodcentered ; B 143 182 270 282 ;
+C 182 ; WX 556 ; N paragraph ; B 121 -191 684 729 ;
+C 183 ; WX 350 ; N bullet ; B 111 175 367 425 ;
+C 184 ; WX 278 ; N quotesinglbase ; B 37 -135 228 125 ;
+C 185 ; WX 500 ; N quotedblbase ; B 37 -135 462 125 ;
+C 186 ; WX 500 ; N quotedblright ; B 173 469 595 729 ;
+C 187 ; WX 556 ; N guillemotright ; B 103 72 533 481 ;
+C 188 ; WX 1000 ; N ellipsis ; B 92 0 939 146 ;
+C 189 ; WX 1000 ; N perthousand ; B 72 -21 1021 739 ;
+C 191 ; WX 611 ; N questiondown ; B 52 -204 556 540 ;
+C 193 ; WX 333 ; N grave ; B 175 607 339 757 ;
+C 194 ; WX 333 ; N acute ; B 247 607 475 757 ;
+C 195 ; WX 333 ; N circumflex ; B 135 610 453 757 ;
+C 196 ; WX 333 ; N tilde ; B 117 622 500 744 ;
+C 197 ; WX 333 ; N macron ; B 150 642 467 722 ;
+C 198 ; WX 333 ; N breve ; B 188 611 455 754 ;
+C 199 ; WX 333 ; N dotaccent ; B 241 621 377 741 ;
+C 200 ; WX 333 ; N dieresis ; B 147 621 469 741 ;
+C 202 ; WX 333 ; N ring ; B 214 593 398 773 ;
+C 203 ; WX 333 ; N cedilla ; B -13 -220 270 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B 82 610 498 757 ;
+C 206 ; WX 333 ; N ogonek ; B 23 -233 248 0 ;
+C 207 ; WX 333 ; N caron ; B 167 610 485 757 ;
+C 208 ; WX 1000 ; N emdash ; B 37 207 1070 311 ;
+C 225 ; WX 1000 ; N AE ; B 1 0 1104 729 ;
+C 227 ; WX 370 ; N ordfeminine ; B 96 262 451 729 ;
+C 232 ; WX 611 ; N Lslash ; B 54 0 624 729 ;
+C 233 ; WX 778 ; N Oslash ; B 34 -39 906 749 ;
+C 234 ; WX 1000 ; N OE ; B 90 -23 1107 741 ;
+C 235 ; WX 365 ; N ordmasculine ; B 92 262 471 729 ;
+C 241 ; WX 889 ; N ae ; B 54 -23 927 549 ;
+C 245 ; WX 278 ; N dotlessi ; B 67 0 322 540 ;
+C 248 ; WX 278 ; N lslash ; B 50 0 372 729 ;
+C 249 ; WX 611 ; N oslash ; B 12 -38 709 557 ;
+C 250 ; WX 944 ; N oe ; B 71 -23 986 549 ;
+C 251 ; WX 611 ; N germandbls ; B 67 -23 654 729 ;
+C -1 ; WX 722 ; N Udieresis ; B 119 -23 809 920 ;
+C -1 ; WX 722 ; N Uacute ; B 119 -23 809 936 ;
+C -1 ; WX 667 ; N Scedilla ; B 76 -220 725 741 ;
+C -1 ; WX 611 ; N Tcaron ; B 142 0 753 936 ;
+C -1 ; WX 667 ; N Scaron ; B 76 -23 725 936 ;
+C -1 ; WX 722 ; N Rcaron ; B 80 0 785 936 ;
+C -1 ; WX 722 ; N Racute ; B 80 0 785 936 ;
+C -1 ; WX 667 ; N Sacute ; B 76 -23 725 936 ;
+C -1 ; WX 778 ; N Otilde ; B 106 -23 828 923 ;
+C -1 ; WX 611 ; N ucircumflex ; B 88 -23 656 757 ;
+C -1 ; WX 778 ; N Ohungarumlaut ; B 106 -23 841 936 ;
+C -1 ; WX 722 ; N Uhungarumlaut ; B 119 -23 809 936 ;
+C -1 ; WX 667 ; N Yacute ; B 182 0 805 936 ;
+C -1 ; WX 722 ; N Eth ; B 73 0 776 729 ;
+C -1 ; WX 722 ; N Dcroat ; B 73 0 776 729 ;
+C -1 ; WX 611 ; N Zacute ; B 30 0 733 936 ;
+C -1 ; WX 722 ; N Uring ; B 119 -23 809 953 ;
+C -1 ; WX 611 ; N gbreve ; B 26 -218 656 754 ;
+C -1 ; WX 556 ; N eogonek ; B 64 -233 591 549 ;
+C -1 ; WX 556 ; N edotaccent ; B 64 -23 591 741 ;
+C -1 ; WX 556 ; N ecaron ; B 64 -23 593 757 ;
+C -1 ; WX 722 ; N Ugrave ; B 119 -23 809 936 ;
+C -1 ; WX 667 ; N Thorn ; B 76 0 721 729 ;
+C -1 ; WX 556 ; N eacute ; B 64 -23 591 757 ;
+C -1 ; WX 556 ; N edieresis ; B 64 -23 591 741 ;
+C -1 ; WX 722 ; N dcaron ; B 79 -23 882 729 ;
+C -1 ; WX 556 ; N ccedilla ; B 77 -220 597 549 ;
+C -1 ; WX 556 ; N ccaron ; B 77 -23 607 757 ;
+C -1 ; WX 556 ; N cacute ; B 77 -23 597 757 ;
+C -1 ; WX 556 ; N aogonek ; B 50 -233 578 549 ;
+C -1 ; WX 556 ; N aring ; B 50 -23 578 773 ;
+C -1 ; WX 556 ; N atilde ; B 50 -23 612 744 ;
+C -1 ; WX 556 ; N abreve ; B 50 -23 578 754 ;
+C -1 ; WX 556 ; N egrave ; B 64 -23 591 757 ;
+C -1 ; WX 556 ; N agrave ; B 50 -23 578 757 ;
+C -1 ; WX 556 ; N aacute ; B 50 -23 587 757 ;
+C -1 ; WX 556 ; N adieresis ; B 50 -23 581 741 ;
+C -1 ; WX 722 ; N Uogonek ; B 119 -233 809 729 ;
+C -1 ; WX 611 ; N ugrave ; B 88 -23 656 757 ;
+C -1 ; WX 611 ; N uacute ; B 88 -23 656 757 ;
+C -1 ; WX 611 ; N udieresis ; B 88 -23 656 741 ;
+C -1 ; WX 404 ; N tcaron ; B 101 -23 578 829 ;
+C -1 ; WX 556 ; N scommaaccent ; B 60 -307 589 549 ;
+C -1 ; WX 611 ; N Zcaron ; B 30 0 733 936 ;
+C -1 ; WX 556 ; N ecircumflex ; B 64 -23 591 757 ;
+C -1 ; WX 722 ; N Ucircumflex ; B 119 -23 809 936 ;
+C -1 ; WX 556 ; N acircumflex ; B 50 -23 578 757 ;
+C -1 ; WX 611 ; N Zdotaccent ; B 30 0 733 918 ;
+C -1 ; WX 556 ; N scaron ; B 60 -23 597 757 ;
+C -1 ; WX 722 ; N Amacron ; B 26 0 706 901 ;
+C -1 ; WX 556 ; N sacute ; B 60 -23 589 757 ;
+C -1 ; WX 611 ; N Tcommaaccent ; B 142 -307 753 729 ;
+C -1 ; WX 667 ; N Ydieresis ; B 182 0 805 920 ;
+C -1 ; WX 611 ; N thorn ; B 11 -218 637 729 ;
+C -1 ; WX 667 ; N Emacron ; B 79 0 762 901 ;
+C -1 ; WX 778 ; N Ograve ; B 106 -23 828 936 ;
+C -1 ; WX 778 ; N Oacute ; B 106 -23 828 936 ;
+C -1 ; WX 778 ; N Odieresis ; B 106 -23 828 920 ;
+C -1 ; WX 722 ; N Ntilde ; B 68 0 816 923 ;
+C -1 ; WX 722 ; N Ncaron ; B 68 0 816 936 ;
+C -1 ; WX 722 ; N Nacute ; B 68 0 816 936 ;
+C -1 ; WX 611 ; N Lcaron ; B 80 0 607 729 ;
+C -1 ; WX 611 ; N Lacute ; B 80 0 606 936 ;
+C -1 ; WX 278 ; N Idotaccent ; B 63 0 388 918 ;
+C -1 ; WX 389 ; N racute ; B 63 0 500 757 ;
+C -1 ; WX 278 ; N Icircumflex ; B 63 0 467 936 ;
+C -1 ; WX 611 ; N ohungarumlaut ; B 82 -23 710 757 ;
+C -1 ; WX 611 ; N otilde ; B 82 -23 639 744 ;
+C -1 ; WX 556 ; N Euro ; B 21 -23 648 724 ;
+C -1 ; WX 611 ; N ocircumflex ; B 82 -23 634 757 ;
+C -1 ; WX 444 ; N onesuperior ; B 210 284 438 709 ;
+C -1 ; WX 444 ; N twosuperior ; B 124 284 499 718 ;
+C -1 ; WX 444 ; N threesuperior ; B 147 271 490 718 ;
+C -1 ; WX 278 ; N Igrave ; B 63 0 368 936 ;
+C -1 ; WX 278 ; N Iacute ; B 63 0 489 936 ;
+C -1 ; WX 278 ; N Imacron ; B 63 0 466 901 ;
+C -1 ; WX 278 ; N Iogonek ; B 7 -233 368 729 ;
+C -1 ; WX 278 ; N Idieresis ; B 63 0 483 920 ;
+C -1 ; WX 778 ; N Gbreve ; B 107 -23 819 934 ;
+C -1 ; WX 722 ; N Umacron ; B 119 -23 809 901 ;
+C -1 ; WX 722 ; N Kcommaaccent ; B 74 -307 843 729 ;
+C -1 ; WX 611 ; N ograve ; B 82 -23 634 757 ;
+C -1 ; WX 667 ; N Scommaaccent ; B 76 -307 725 741 ;
+C -1 ; WX 667 ; N Eogonek ; B 79 -233 762 729 ;
+C -1 ; WX 611 ; N oacute ; B 82 -23 634 757 ;
+C -1 ; WX 667 ; N Edotaccent ; B 79 0 762 918 ;
+C -1 ; WX 268 ; N iogonek ; B 0 -233 351 729 ;
+C -1 ; WX 611 ; N gcommaaccent ; B 26 -218 656 854 ;
+C -1 ; WX 611 ; N odieresis ; B 82 -23 634 741 ;
+C -1 ; WX 611 ; N ntilde ; B 63 0 646 744 ;
+C -1 ; WX 611 ; N ncaron ; B 63 0 629 757 ;
+C -1 ; WX 667 ; N Ecaron ; B 79 0 762 936 ;
+C -1 ; WX 667 ; N Ecircumflex ; B 79 0 762 936 ;
+C -1 ; WX 556 ; N scedilla ; B 60 -220 589 549 ;
+C -1 ; WX 389 ; N rcaron ; B 63 0 533 757 ;
+C -1 ; WX 667 ; N Egrave ; B 79 0 762 936 ;
+C -1 ; WX 667 ; N Eacute ; B 79 0 762 936 ;
+C -1 ; WX 778 ; N Gcommaaccent ; B 107 -307 819 741 ;
+C -1 ; WX 722 ; N Rcommaaccent ; B 80 -307 785 729 ;
+C -1 ; WX 667 ; N Edieresis ; B 79 0 762 920 ;
+C -1 ; WX 611 ; N nacute ; B 63 0 629 757 ;
+C -1 ; WX 611 ; N uogonek ; B 88 -233 656 540 ;
+C -1 ; WX 611 ; N umacron ; B 88 -23 656 722 ;
+C -1 ; WX 722 ; N Dcaron ; B 77 0 776 936 ;
+C -1 ; WX 384 ; N lcaron ; B 67 0 544 729 ;
+C -1 ; WX 722 ; N Ccaron ; B 107 -23 793 936 ;
+C -1 ; WX 722 ; N Cacute ; B 107 -23 793 936 ;
+C -1 ; WX 722 ; N Ccedilla ; B 107 -220 793 741 ;
+C -1 ; WX 606 ; N degree ; B 240 383 543 686 ;
+C -1 ; WX 722 ; N Aogonek ; B 26 -233 703 729 ;
+C -1 ; WX 584 ; N minus ; B 77 172 606 292 ;
+C -1 ; WX 584 ; N multiply ; B 102 18 582 444 ;
+C -1 ; WX 584 ; N divide ; B 77 0 606 462 ;
+C -1 ; WX 722 ; N Aring ; B 26 0 703 953 ;
+C -1 ; WX 1000 ; N trademark ; B 213 273 1087 729 ;
+C -1 ; WX 389 ; N rcommaaccent ; B 8 -307 487 549 ;
+C -1 ; WX 278 ; N lacute ; B 67 0 474 936 ;
+C -1 ; WX 611 ; N omacron ; B 82 -23 634 722 ;
+C -1 ; WX 722 ; N Atilde ; B 26 0 739 923 ;
+C -1 ; WX 278 ; N icircumflex ; B 67 0 426 757 ;
+C -1 ; WX 278 ; N igrave ; B 67 0 322 757 ;
+C -1 ; WX 611 ; N ncommaaccent ; B 63 -307 629 549 ;
+C -1 ; WX 278 ; N lcommaaccent ; B 11 -307 362 729 ;
+C -1 ; WX 584 ; N plusminus ; B 50 0 630 633 ;
+C -1 ; WX 1055 ; N onehalf ; B 210 -20 1050 715 ;
+C -1 ; WX 1055 ; N onequarter ; B 210 -20 1032 715 ;
+C -1 ; WX 1055 ; N threequarters ; B 147 -20 1032 718 ;
+C -1 ; WX 278 ; N iacute ; B 67 0 448 757 ;
+C -1 ; WX 722 ; N Abreve ; B 26 0 703 934 ;
+C -1 ; WX 556 ; N kcommaaccent ; B 59 -307 651 729 ;
+C -1 ; WX 778 ; N Omacron ; B 106 -23 828 901 ;
+C -1 ; WX 278 ; N imacron ; B 67 0 424 722 ;
+C -1 ; WX 556 ; N emacron ; B 64 -23 591 722 ;
+C -1 ; WX 556 ; N amacron ; B 50 -23 579 722 ;
+C -1 ; WX 333 ; N tcommaaccent ; B 62 -307 414 674 ;
+C -1 ; WX 556 ; N ydieresis ; B 37 -219 653 741 ;
+C -1 ; WX 500 ; N zdotaccent ; B 21 0 575 741 ;
+C -1 ; WX 500 ; N zcaron ; B 21 0 575 757 ;
+C -1 ; WX 500 ; N zacute ; B 21 0 575 757 ;
+C -1 ; WX 556 ; N yacute ; B 37 -219 653 757 ;
+C -1 ; WX 611 ; N uhungarumlaut ; B 88 -23 697 757 ;
+C -1 ; WX 611 ; N eth ; B 83 -23 633 744 ;
+C -1 ; WX 611 ; N uring ; B 88 -23 656 773 ;
+C -1 ; WX 778 ; N Ocircumflex ; B 106 -23 828 936 ;
+C -1 ; WX 333 ; N commaaccent ; B 43 -307 217 -60 ;
+C -1 ; WX 737 ; N copyright ; B 54 -22 837 743 ;
+C -1 ; WX 737 ; N registered ; B 55 -22 837 743 ;
+C -1 ; WX 722 ; N Acircumflex ; B 26 0 703 936 ;
+C -1 ; WX 278 ; N idieresis ; B 67 0 442 741 ;
+C -1 ; WX 489 ; N lozenge ; B 95 0 541 744 ;
+C -1 ; WX 729 ; N Delta ; B 8 0 721 729 ;
+C -1 ; WX 584 ; N notequal ; B 61 -74 622 544 ;
+C -1 ; WX 542 ; N radical ; B 102 -36 705 913 ;
+C -1 ; WX 722 ; N Agrave ; B 26 0 703 936 ;
+C -1 ; WX 722 ; N Aacute ; B 26 0 714 936 ;
+C -1 ; WX 584 ; N lessequal ; B 35 0 657 624 ;
+C -1 ; WX 584 ; N greaterequal ; B 44 0 627 624 ;
+C -1 ; WX 584 ; N logicalnot ; B 103 86 632 376 ;
+C -1 ; WX 711 ; N summation ; B -18 -97 760 760 ;
+C -1 ; WX 490 ; N partialdiff ; B 22 -15 458 750 ;
+C -1 ; WX 722 ; N Ncommaaccent ; B 68 -307 816 729 ;
+C -1 ; WX 611 ; N dcroat ; B 79 -23 746 729 ;
+C -1 ; WX 280 ; N brokenbar ; B 57 -200 335 729 ;
+C -1 ; WX 611 ; N Lcommaaccent ; B 80 -309 606 729 ;
+C -1 ; WX 722 ; N Adieresis ; B 26 0 708 920 ;
+C -1 ; WX 611 ; N mu ; B 11 -220 655 540 ;
+C -1 ; WX 278 ; N .notdef ; B 245 0 245 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -36
+KPX A Ccedilla -36
+KPX A G -38
+KPX A O -37
+KPX A Odieresis -37
+KPX A Q -39
+KPX A T -91
+KPX A U -37
+KPX A Uacute -37
+KPX A Ucircumflex -37
+KPX A Udieresis -37
+KPX A Ugrave -37
+KPX A V -74
+KPX A W -57
+KPX A Y -96
+KPX A a -11
+KPX A b -10
+KPX A c -17
+KPX A ccedilla -17
+KPX A comma 9
+KPX A d -17
+KPX A e -10
+KPX A g -20
+KPX A guillemotleft -48
+KPX A guilsinglleft -44
+KPX A hyphen 2
+KPX A o -19
+KPX A period 13
+KPX A q -13
+KPX A quotedblright -71
+KPX A quoteright -67
+KPX A t -21
+KPX A u -17
+KPX A v -42
+KPX A w -28
+KPX A y -41
+KPX Aacute C -37
+KPX Aacute G -38
+KPX Aacute O -38
+KPX Aacute Q -40
+KPX Aacute T -91
+KPX Aacute U -38
+KPX Aacute V -74
+KPX Aacute W -57
+KPX Aacute Y -96
+KPX Aacute a -11
+KPX Aacute b -10
+KPX Aacute c -17
+KPX Aacute comma 9
+KPX Aacute d -17
+KPX Aacute e -11
+KPX Aacute g -20
+KPX Aacute guillemotleft -48
+KPX Aacute guilsinglleft -45
+KPX Aacute hyphen 2
+KPX Aacute o -20
+KPX Aacute period 12
+KPX Aacute q -14
+KPX Aacute quoteright -67
+KPX Aacute t -22
+KPX Aacute u -18
+KPX Aacute v -42
+KPX Aacute w -29
+KPX Aacute y -41
+KPX Acircumflex C -36
+KPX Acircumflex G -38
+KPX Acircumflex O -37
+KPX Acircumflex Q -39
+KPX Acircumflex T -91
+KPX Acircumflex U -37
+KPX Acircumflex V -74
+KPX Acircumflex W -57
+KPX Acircumflex Y -96
+KPX Acircumflex comma 9
+KPX Acircumflex period 13
+KPX Adieresis C -37
+KPX Adieresis G -38
+KPX Adieresis O -38
+KPX Adieresis Q -39
+KPX Adieresis T -91
+KPX Adieresis U -38
+KPX Adieresis V -74
+KPX Adieresis W -57
+KPX Adieresis Y -96
+KPX Adieresis a -11
+KPX Adieresis b -10
+KPX Adieresis c -17
+KPX Adieresis comma 9
+KPX Adieresis d -17
+KPX Adieresis g -20
+KPX Adieresis guillemotleft -48
+KPX Adieresis guilsinglleft -44
+KPX Adieresis hyphen 2
+KPX Adieresis o -20
+KPX Adieresis period 12
+KPX Adieresis q -13
+KPX Adieresis quotedblright -71
+KPX Adieresis quoteright -67
+KPX Adieresis t -22
+KPX Adieresis u -17
+KPX Adieresis v -42
+KPX Adieresis w -28
+KPX Adieresis y -41
+KPX Agrave C -36
+KPX Agrave G -38
+KPX Agrave O -37
+KPX Agrave Q -39
+KPX Agrave T -91
+KPX Agrave U -37
+KPX Agrave V -74
+KPX Agrave W -57
+KPX Agrave Y -96
+KPX Agrave comma 9
+KPX Agrave period 13
+KPX Aring C -36
+KPX Aring G -38
+KPX Aring O -37
+KPX Aring Q -39
+KPX Aring T -91
+KPX Aring U -37
+KPX Aring V -74
+KPX Aring W -57
+KPX Aring Y -96
+KPX Aring a -11
+KPX Aring b -10
+KPX Aring c -17
+KPX Aring comma 9
+KPX Aring d -17
+KPX Aring e -10
+KPX Aring g -20
+KPX Aring guillemotleft -48
+KPX Aring guilsinglleft -44
+KPX Aring hyphen 2
+KPX Aring o -19
+KPX Aring period 13
+KPX Aring q -13
+KPX Aring quotedblright -71
+KPX Aring quoteright -67
+KPX Aring t -21
+KPX Aring u -17
+KPX Aring v -42
+KPX Aring w -28
+KPX Aring y -41
+KPX Atilde C -38
+KPX Atilde G -40
+KPX Atilde O -39
+KPX Atilde Q -41
+KPX Atilde T -92
+KPX Atilde U -39
+KPX Atilde V -74
+KPX Atilde W -57
+KPX Atilde Y -96
+KPX Atilde comma 9
+KPX Atilde period 11
+KPX B A -41
+KPX B AE -30
+KPX B Aacute -41
+KPX B Acircumflex -41
+KPX B Adieresis -41
+KPX B Aring -41
+KPX B Atilde -41
+KPX B O -18
+KPX B OE -9
+KPX B Oacute -18
+KPX B Ocircumflex -18
+KPX B Odieresis -18
+KPX B Ograve -18
+KPX B Oslash -17
+KPX B V -46
+KPX B W -30
+KPX B Y -63
+KPX C A -34
+KPX C AE -23
+KPX C Aacute -34
+KPX C Adieresis -34
+KPX C Aring -34
+KPX C H -1
+KPX C K -4
+KPX C O -12
+KPX C Oacute -12
+KPX C Odieresis -12
+KPX Ccedilla A -34
+KPX D A -40
+KPX D Aacute -40
+KPX D Acircumflex -40
+KPX D Adieresis -40
+KPX D Agrave -40
+KPX D Aring -40
+KPX D Atilde -40
+KPX D J -4
+KPX D T -24
+KPX D V -37
+KPX D W -20
+KPX D X -40
+KPX D Y -62
+KPX F A -68
+KPX F Aacute -68
+KPX F Acircumflex -68
+KPX F Adieresis -68
+KPX F Agrave -68
+KPX F Aring -68
+KPX F Atilde -68
+KPX F J -33
+KPX F O -24
+KPX F Odieresis -24
+KPX F a -23
+KPX F aacute -23
+KPX F adieresis -23
+KPX F ae -26
+KPX F aring -23
+KPX F comma -84
+KPX F e -12
+KPX F eacute -12
+KPX F hyphen 4
+KPX F i -15
+KPX F j -17
+KPX F o -21
+KPX F oacute -21
+KPX F odieresis -21
+KPX F oe -16
+KPX F oslash -24
+KPX F period -82
+KPX F r -35
+KPX F u -32
+KPX G A -17
+KPX G AE -5
+KPX G Aacute -17
+KPX G Acircumflex -17
+KPX G Adieresis -17
+KPX G Agrave -17
+KPX G Aring -17
+KPX G Atilde -17
+KPX G T -28
+KPX G V -41
+KPX G W -25
+KPX G Y -65
+KPX J A -38
+KPX J AE -29
+KPX J Adieresis -38
+KPX J Aring -38
+KPX K C -59
+KPX K G -61
+KPX K O -60
+KPX K OE -51
+KPX K Oacute -60
+KPX K Odieresis -60
+KPX K S -45
+KPX K T 5
+KPX K a -17
+KPX K adieresis -17
+KPX K ae -17
+KPX K aring -17
+KPX K e -38
+KPX K hyphen -52
+KPX K o -45
+KPX K oacute -45
+KPX K odieresis -45
+KPX K u -35
+KPX K udieresis -35
+KPX K y -74
+KPX L A 0
+KPX L AE 12
+KPX L Aacute 0
+KPX L Adieresis 0
+KPX L Aring 0
+KPX L C -35
+KPX L Ccedilla -36
+KPX L G -40
+KPX L O -39
+KPX L Oacute -39
+KPX L Ocircumflex -39
+KPX L Odieresis -39
+KPX L Ograve -39
+KPX L Otilde -39
+KPX L S -14
+KPX L T -104
+KPX L U -35
+KPX L Udieresis -35
+KPX L V -102
+KPX L W -79
+KPX L Y -121
+KPX L hyphen -20
+KPX L quotedblright -147
+KPX L quoteright -143
+KPX L u -17
+KPX L udieresis -17
+KPX L y -64
+KPX N A -15
+KPX N AE -2
+KPX N Aacute -15
+KPX N Adieresis -15
+KPX N Aring -15
+KPX N C -1
+KPX N Ccedilla -1
+KPX N G -2
+KPX N O -2
+KPX N Oacute -2
+KPX N Odieresis -2
+KPX N a 5
+KPX N aacute 5
+KPX N adieresis 5
+KPX N ae 4
+KPX N aring 5
+KPX N comma 7
+KPX N e 10
+KPX N eacute 10
+KPX N o 1
+KPX N oacute 1
+KPX N odieresis 1
+KPX N oslash 2
+KPX N period 8
+KPX N u 4
+KPX N udieresis 4
+KPX O A -42
+KPX O AE -33
+KPX O Aacute -42
+KPX O Adieresis -42
+KPX O Aring -42
+KPX O T -32
+KPX O V -40
+KPX O W -24
+KPX O X -43
+KPX O Y -65
+KPX Oacute A -42
+KPX Oacute T -32
+KPX Oacute V -40
+KPX Oacute W -24
+KPX Oacute Y -65
+KPX Ocircumflex T -32
+KPX Ocircumflex V -40
+KPX Ocircumflex Y -65
+KPX Odieresis A -42
+KPX Odieresis T -32
+KPX Odieresis V -40
+KPX Odieresis W -24
+KPX Odieresis X -43
+KPX Odieresis Y -65
+KPX Ograve T -32
+KPX Ograve V -40
+KPX Ograve Y -65
+KPX Oslash A -34
+KPX Otilde T -32
+KPX Otilde V -40
+KPX Otilde Y -65
+KPX P A -71
+KPX P AE -62
+KPX P Aacute -71
+KPX P Adieresis -71
+KPX P Aring -71
+KPX P J -52
+KPX P a -14
+KPX P aacute -14
+KPX P adieresis -14
+KPX P ae -15
+KPX P aring -14
+KPX P comma -103
+KPX P e -13
+KPX P eacute -13
+KPX P hyphen -7
+KPX P o -22
+KPX P oacute -22
+KPX P odieresis -22
+KPX P oe -17
+KPX P oslash -26
+KPX P period -101
+KPX R C -12
+KPX R Ccedilla -12
+KPX R G -13
+KPX R O -13
+KPX R OE -3
+KPX R Oacute -13
+KPX R Odieresis -13
+KPX R T -12
+KPX R U -12
+KPX R Udieresis -12
+KPX R V -38
+KPX R W -22
+KPX R Y -50
+KPX R a -4
+KPX R aacute -4
+KPX R adieresis -4
+KPX R ae -5
+KPX R aring -4
+KPX R e 0
+KPX R eacute 0
+KPX R hyphen 10
+KPX R o -9
+KPX R oacute -9
+KPX R odieresis -9
+KPX R oe -4
+KPX R u -6
+KPX R uacute -6
+KPX R udieresis -6
+KPX R y -4
+KPX S A -26
+KPX S AE -14
+KPX S Aacute -26
+KPX S Adieresis -26
+KPX S Aring -26
+KPX S T -15
+KPX S V -36
+KPX S W -20
+KPX S Y -54
+KPX S t -4
+KPX T A -93
+KPX T AE -85
+KPX T Aacute -93
+KPX T Acircumflex -93
+KPX T Adieresis -93
+KPX T Agrave -93
+KPX T Aring -93
+KPX T Atilde -93
+KPX T C -29
+KPX T G -30
+KPX T J -95
+KPX T O -30
+KPX T OE -20
+KPX T Oacute -30
+KPX T Ocircumflex -30
+KPX T Odieresis -30
+KPX T Ograve -30
+KPX T Oslash -36
+KPX T Otilde -30
+KPX T S -7
+KPX T V 9
+KPX T W 15
+KPX T Y 7
+KPX T a -77
+KPX T ae -78
+KPX T c -79
+KPX T colon -104
+KPX T comma -75
+KPX T e -72
+KPX T g -79
+KPX T guillemotleft -107
+KPX T guilsinglleft -103
+KPX T hyphen -53
+KPX T i -9
+KPX T j -11
+KPX T o -81
+KPX T oslash -80
+KPX T period -73
+KPX T r -76
+KPX T s -81
+KPX T semicolon -105
+KPX T u -78
+KPX T v -91
+KPX T w -85
+KPX T y -89
+KPX U A -40
+KPX U AE -30
+KPX U Aacute -40
+KPX U Acircumflex -40
+KPX U Adieresis -40
+KPX U Aring -40
+KPX U Atilde -40
+KPX U comma -17
+KPX U m -3
+KPX U n -5
+KPX U p -3
+KPX U period -12
+KPX U r -5
+KPX Uacute A -40
+KPX Uacute comma -17
+KPX Uacute m -3
+KPX Uacute n -5
+KPX Uacute p -3
+KPX Uacute period -12
+KPX Uacute r -5
+KPX Ucircumflex A -40
+KPX Udieresis A -40
+KPX Udieresis b -4
+KPX Udieresis comma -17
+KPX Udieresis m -3
+KPX Udieresis n -5
+KPX Udieresis p -3
+KPX Udieresis period -12
+KPX Udieresis r -5
+KPX Ugrave A -40
+KPX V A -75
+KPX V AE -65
+KPX V Aacute -75
+KPX V Acircumflex -75
+KPX V Adieresis -75
+KPX V Agrave -75
+KPX V Aring -75
+KPX V Atilde -75
+KPX V C -43
+KPX V G -44
+KPX V O -44
+KPX V Oacute -44
+KPX V Ocircumflex -44
+KPX V Odieresis -44
+KPX V Ograve -44
+KPX V Oslash -42
+KPX V Otilde -44
+KPX V S -31
+KPX V T 12
+KPX V a -51
+KPX V ae -52
+KPX V colon -74
+KPX V comma -76
+KPX V e -46
+KPX V g -54
+KPX V guillemotleft -81
+KPX V guilsinglleft -77
+KPX V hyphen -26
+KPX V i -13
+KPX V o -56
+KPX V oslash -55
+KPX V period -74
+KPX V r -43
+KPX V semicolon -77
+KPX V u -42
+KPX V y -19
+KPX W A -59
+KPX W AE -50
+KPX W Aacute -59
+KPX W Acircumflex -59
+KPX W Adieresis -59
+KPX W Agrave -59
+KPX W Aring -59
+KPX W Atilde -59
+KPX W C -28
+KPX W G -29
+KPX W O -29
+KPX W Oacute -29
+KPX W Ocircumflex -29
+KPX W Odieresis -29
+KPX W Ograve -29
+KPX W Oslash -27
+KPX W Otilde -29
+KPX W S -22
+KPX W T 16
+KPX W a -34
+KPX W ae -34
+KPX W colon -61
+KPX W comma -53
+KPX W e -28
+KPX W g -36
+KPX W guillemotleft -63
+KPX W guilsinglleft -59
+KPX W hyphen -9
+KPX W i -9
+KPX W o -38
+KPX W oslash -37
+KPX W period -51
+KPX W r -33
+KPX W semicolon -63
+KPX W u -32
+KPX W y -9
+KPX X C -39
+KPX X O -40
+KPX X Odieresis -40
+KPX X Q -43
+KPX X a -17
+KPX X e -33
+KPX X hyphen -33
+KPX X o -43
+KPX X u -35
+KPX X y -48
+KPX Y A -91
+KPX Y AE -81
+KPX Y Aacute -91
+KPX Y Acircumflex -91
+KPX Y Adieresis -91
+KPX Y Agrave -91
+KPX Y Aring -91
+KPX Y Atilde -91
+KPX Y C -60
+KPX Y G -61
+KPX Y O -61
+KPX Y Oacute -61
+KPX Y Ocircumflex -61
+KPX Y Odieresis -61
+KPX Y Ograve -61
+KPX Y Oslash -58
+KPX Y Otilde -61
+KPX Y S -39
+KPX Y T 14
+KPX Y a -71
+KPX Y ae -71
+KPX Y colon -90
+KPX Y comma -85
+KPX Y e -66
+KPX Y g -73
+KPX Y guillemotleft -105
+KPX Y guilsinglleft -101
+KPX Y hyphen -55
+KPX Y i -11
+KPX Y o -76
+KPX Y oslash -74
+KPX Y p -53
+KPX Y period -84
+KPX Y semicolon -93
+KPX Y u -57
+KPX Y v -36
+KPX Z v -21
+KPX Z y -19
+KPX a j -7
+KPX a quoteright -14
+KPX a v -23
+KPX a w -10
+KPX a y -24
+KPX aacute v -23
+KPX aacute w -10
+KPX aacute y -24
+KPX adieresis v -23
+KPX adieresis w -10
+KPX adieresis y -24
+KPX ae v -21
+KPX ae w -7
+KPX ae y -23
+KPX agrave v -23
+KPX agrave w -10
+KPX agrave y -24
+KPX aring v -23
+KPX aring w -10
+KPX aring y -24
+KPX b v -23
+KPX b w -9
+KPX b y -25
+KPX c h -9
+KPX c k -5
+KPX comma one -79
+KPX comma quotedblright -39
+KPX comma quoteright -35
+KPX e quoteright -13
+KPX e t -9
+KPX e v -22
+KPX e w -9
+KPX e x -25
+KPX e y -25
+KPX eacute v -22
+KPX eacute w -9
+KPX eacute y -25
+KPX ecircumflex v -22
+KPX ecircumflex w -9
+KPX ecircumflex y -25
+KPX eight four 2
+KPX eight one -32
+KPX eight seven -15
+KPX f a -6
+KPX f aacute -6
+KPX f adieresis -6
+KPX f ae -6
+KPX f aring -6
+KPX f e -6
+KPX f eacute -6
+KPX f f 14
+KPX f i -13
+KPX f j -15
+KPX f l -13
+KPX f o -16
+KPX f oacute -16
+KPX f odieresis -16
+KPX f oe -11
+KPX f oslash -16
+KPX f quoteright 0
+KPX f s -10
+KPX f t 14
+KPX five four -3
+KPX five one -37
+KPX five seven -17
+KPX four four 0
+KPX four one -55
+KPX four seven -33
+KPX g a -3
+KPX g adieresis -3
+KPX g ae -4
+KPX g aring -3
+KPX g e 1
+KPX g eacute 1
+KPX g l -5
+KPX g oacute -8
+KPX g odieresis -8
+KPX g r -3
+KPX guillemotright A -56
+KPX guillemotright AE -46
+KPX guillemotright Aacute -56
+KPX guillemotright Adieresis -56
+KPX guillemotright Aring -56
+KPX guillemotright T -115
+KPX guillemotright V -84
+KPX guillemotright W -65
+KPX guillemotright Y -117
+KPX guilsinglright A -52
+KPX guilsinglright AE -42
+KPX guilsinglright Aacute -52
+KPX guilsinglright Adieresis -52
+KPX guilsinglright Aring -52
+KPX guilsinglright T -110
+KPX guilsinglright V -79
+KPX guilsinglright W -60
+KPX guilsinglright Y -113
+KPX h quoteright -15
+KPX h y -25
+KPX hyphen A -7
+KPX hyphen AE 2
+KPX hyphen Aacute -7
+KPX hyphen Adieresis -7
+KPX hyphen Aring -7
+KPX hyphen T -64
+KPX hyphen V -34
+KPX hyphen W -15
+KPX hyphen Y -71
+KPX i T -12
+KPX i j -7
+KPX k a -13
+KPX k aacute -13
+KPX k adieresis -13
+KPX k ae -15
+KPX k aring -13
+KPX k comma -3
+KPX k e -19
+KPX k eacute -19
+KPX k g -26
+KPX k hyphen -31
+KPX k o -28
+KPX k oacute -28
+KPX k odieresis -28
+KPX k period -3
+KPX k s -23
+KPX k u -8
+KPX k udieresis -8
+KPX l v -14
+KPX l y -11
+KPX m p -1
+KPX m v -23
+KPX m w -9
+KPX m y -23
+KPX n T -87
+KPX n p -2
+KPX n quoteright -15
+KPX n v -24
+KPX n w -11
+KPX n y -25
+KPX nine four -6
+KPX nine one -30
+KPX nine seven -23
+KPX o T -90
+KPX o quoteright -19
+KPX o t -13
+KPX o v -27
+KPX o w -13
+KPX o x -30
+KPX o y -29
+KPX oacute v -27
+KPX oacute w -13
+KPX oacute y -29
+KPX ocircumflex t -13
+KPX odieresis t -13
+KPX odieresis v -27
+KPX odieresis w -13
+KPX odieresis x -30
+KPX odieresis y -29
+KPX ograve v -27
+KPX ograve w -13
+KPX ograve y -29
+KPX one comma -51
+KPX one eight -47
+KPX one five -50
+KPX one four -70
+KPX one nine -47
+KPX one one -92
+KPX one period -49
+KPX one seven -72
+KPX one six -48
+KPX one three -53
+KPX one two -56
+KPX one zero -44
+KPX p t -10
+KPX p y -25
+KPX period one -80
+KPX period quotedblright -39
+KPX period quoteright -35
+KPX q c -3
+KPX q u -3
+KPX quotedblbase A 7
+KPX quotedblbase AE 19
+KPX quotedblbase T -79
+KPX quotedblbase V -77
+KPX quotedblbase W -54
+KPX quotedblbase Y -96
+KPX quotedblleft A -72
+KPX quotedblleft AE -64
+KPX quotedblleft Aacute -72
+KPX quotedblleft Adieresis -72
+KPX quotedblleft Aring -72
+KPX quotedblleft T -11
+KPX quotedblleft V 0
+KPX quotedblleft W 9
+KPX quotedblleft Y -15
+KPX quotedblright A -72
+KPX quotedblright AE -64
+KPX quotedblright Aacute -72
+KPX quotedblright Adieresis -72
+KPX quotedblright Aring -72
+KPX quotedblright T -7
+KPX quotedblright V 1
+KPX quotedblright W 11
+KPX quotedblright Y -14
+KPX quoteleft A -76
+KPX quoteleft AE -69
+KPX quoteleft Aacute -76
+KPX quoteleft Adieresis -76
+KPX quoteleft Aring -76
+KPX quoteleft T -15
+KPX quoteleft V -4
+KPX quoteleft W 5
+KPX quoteleft Y -20
+KPX quoteright A -80
+KPX quoteright AE -72
+KPX quoteright Aacute -80
+KPX quoteright Adieresis -80
+KPX quoteright Aring -80
+KPX quoteright comma -53
+KPX quoteright d -30
+KPX quoteright o -34
+KPX quoteright period -51
+KPX quoteright r -20
+KPX quoteright s -27
+KPX quoteright t -11
+KPX quoteright v -11
+KPX quoteright w -4
+KPX quoteright y -9
+KPX r a -1
+KPX r aacute -1
+KPX r acircumflex -1
+KPX r adieresis -1
+KPX r ae -2
+KPX r agrave -1
+KPX r aring -1
+KPX r c -6
+KPX r ccedilla -6
+KPX r colon -36
+KPX r comma -64
+KPX r d -5
+KPX r e 2
+KPX r eacute 2
+KPX r ecircumflex 2
+KPX r egrave 2
+KPX r f 15
+KPX r g -7
+KPX r h -12
+KPX r hyphen -40
+KPX r i -12
+KPX r j -13
+KPX r k -8
+KPX r l -12
+KPX r m -8
+KPX r n -10
+KPX r o -7
+KPX r oacute -7
+KPX r ocircumflex -7
+KPX r odieresis -7
+KPX r oe -2
+KPX r ograve -7
+KPX r oslash -12
+KPX r p -7
+KPX r period -63
+KPX r q -2
+KPX r quoteright 4
+KPX r r -10
+KPX r s -4
+KPX r semicolon -37
+KPX r t 15
+KPX r u -8
+KPX r v 12
+KPX r w 17
+KPX r x 7
+KPX r y 14
+KPX r z 2
+KPX s quoteright -12
+KPX s t -9
+KPX seven colon -71
+KPX seven comma -95
+KPX seven eight -10
+KPX seven five -28
+KPX seven four -70
+KPX seven one -21
+KPX seven period -94
+KPX seven seven 2
+KPX seven six -21
+KPX seven three -7
+KPX seven two -11
+KPX six four -1
+KPX six one -29
+KPX six seven -13
+KPX t S -9
+KPX t a -3
+KPX t aacute -3
+KPX t adieresis -3
+KPX t ae -5
+KPX t aring -3
+KPX t colon -41
+KPX t e -5
+KPX t eacute -5
+KPX t h -9
+KPX t o -15
+KPX t oacute -15
+KPX t odieresis -15
+KPX t quoteright -3
+KPX t semicolon -42
+KPX three four -2
+KPX three one -34
+KPX three seven -19
+KPX two four -16
+KPX two one -24
+KPX two seven -12
+KPX u quoteright -8
+KPX v a -21
+KPX v aacute -21
+KPX v acircumflex -21
+KPX v adieresis -21
+KPX v ae -21
+KPX v agrave -21
+KPX v aring -21
+KPX v atilde -21
+KPX v c -25
+KPX v colon -41
+KPX v comma -57
+KPX v e -18
+KPX v eacute -18
+KPX v ecircumflex -18
+KPX v egrave -18
+KPX v g -26
+KPX v hyphen -5
+KPX v l -12
+KPX v o -28
+KPX v oacute -28
+KPX v odieresis -28
+KPX v ograve -28
+KPX v oslash -28
+KPX v period -55
+KPX v s -25
+KPX v semicolon -43
+KPX w a -11
+KPX w aacute -11
+KPX w acircumflex -11
+KPX w adieresis -11
+KPX w ae -12
+KPX w agrave -11
+KPX w aring -11
+KPX w atilde -11
+KPX w c -12
+KPX w colon -36
+KPX w comma -38
+KPX w e -5
+KPX w eacute -5
+KPX w ecircumflex -5
+KPX w egrave -5
+KPX w g -13
+KPX w hyphen 7
+KPX w l -8
+KPX w o -15
+KPX w oacute -15
+KPX w odieresis -15
+KPX w ograve -15
+KPX w oslash -14
+KPX w period -36
+KPX w s -15
+KPX w semicolon -38
+KPX x a -22
+KPX x c -27
+KPX x e -20
+KPX x eacute -20
+KPX x o -30
+KPX x q -23
+KPX y a -20
+KPX y aacute -20
+KPX y acircumflex -20
+KPX y adieresis -20
+KPX y ae -20
+KPX y agrave -20
+KPX y aring -20
+KPX y atilde -20
+KPX y c -26
+KPX y colon -40
+KPX y comma -58
+KPX y e -19
+KPX y eacute -19
+KPX y ecircumflex -19
+KPX y egrave -19
+KPX y g -27
+KPX y hyphen -4
+KPX y l -11
+KPX y o -28
+KPX y oacute -28
+KPX y odieresis -28
+KPX y ograve -28
+KPX y oslash -27
+KPX y period -55
+KPX y s -24
+KPX y semicolon -43
+KPX zero four -3
+KPX zero one -29
+KPX zero seven -21
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/n019024l.pfb b/Master/xemtex/gsfonts/n019024l.pfb
new file mode 100644
index 00000000000..9274c31d942
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019024l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/n019024l.pfm b/Master/xemtex/gsfonts/n019024l.pfm
new file mode 100644
index 00000000000..40aa6e1ea06
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019024l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/n019043l.afm b/Master/xemtex/gsfonts/n019043l.afm
new file mode 100644
index 00000000000..3974ed1f8d0
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019043l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName NimbusSanL-ReguCond
+FullName Nimbus Sans L Regular Condensed
+FamilyName Nimbus Sans L
+Weight Regular
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -136 -282 820 951
+CapHeight 718
+XHeight 523
+Descender -207
+Ascender 718
+StartCharMetrics 316
+C 32 ; WX 228 ; N space ; B 21 0 21 0 ;
+C 33 ; WX 228 ; N exclam ; B 74 0 153 718 ;
+C 34 ; WX 291 ; N quotedbl ; B 57 463 234 718 ;
+C 35 ; WX 456 ; N numbersign ; B 23 0 434 688 ;
+C 36 ; WX 456 ; N dollar ; B 26 -115 427 775 ;
+C 37 ; WX 729 ; N percent ; B 32 -19 697 703 ;
+C 38 ; WX 547 ; N ampersand ; B 36 -15 529 718 ;
+C 39 ; WX 182 ; N quoteright ; B 43 462 129 718 ;
+C 40 ; WX 273 ; N parenleft ; B 56 -207 245 733 ;
+C 41 ; WX 273 ; N parenright ; B 28 -207 217 733 ;
+C 42 ; WX 319 ; N asterisk ; B 32 431 286 718 ;
+C 43 ; WX 479 ; N plus ; B 32 0 447 505 ;
+C 44 ; WX 228 ; N comma ; B 71 -147 157 107 ;
+C 45 ; WX 273 ; N hyphen ; B 36 232 237 322 ;
+C 46 ; WX 228 ; N period ; B 71 0 157 107 ;
+C 47 ; WX 228 ; N slash ; B -14 -19 242 737 ;
+C 48 ; WX 456 ; N zero ; B 30 -19 426 703 ;
+C 49 ; WX 456 ; N one ; B 83 0 294 703 ;
+C 50 ; WX 456 ; N two ; B 21 0 416 703 ;
+C 51 ; WX 456 ; N three ; B 28 -19 428 703 ;
+C 52 ; WX 456 ; N four ; B 20 0 429 703 ;
+C 53 ; WX 456 ; N five ; B 26 -19 421 688 ;
+C 54 ; WX 456 ; N six ; B 31 -19 425 703 ;
+C 55 ; WX 456 ; N seven ; B 30 0 429 688 ;
+C 56 ; WX 456 ; N eight ; B 31 -19 424 703 ;
+C 57 ; WX 456 ; N nine ; B 34 -19 421 703 ;
+C 58 ; WX 228 ; N colon ; B 71 0 157 516 ;
+C 59 ; WX 228 ; N semicolon ; B 71 -147 157 516 ;
+C 60 ; WX 479 ; N less ; B 39 10 440 496 ;
+C 61 ; WX 479 ; N equal ; B 32 115 447 390 ;
+C 62 ; WX 479 ; N greater ; B 39 10 440 496 ;
+C 63 ; WX 456 ; N question ; B 46 0 403 727 ;
+C 64 ; WX 832 ; N at ; B 121 -19 712 737 ;
+C 65 ; WX 547 ; N A ; B 11 0 536 718 ;
+C 66 ; WX 547 ; N B ; B 61 0 514 718 ;
+C 67 ; WX 592 ; N C ; B 36 -19 558 737 ;
+C 68 ; WX 592 ; N D ; B 66 0 553 718 ;
+C 69 ; WX 547 ; N E ; B 71 0 505 718 ;
+C 70 ; WX 501 ; N F ; B 71 0 478 718 ;
+C 71 ; WX 638 ; N G ; B 39 -19 577 737 ;
+C 72 ; WX 592 ; N H ; B 63 0 530 718 ;
+C 73 ; WX 228 ; N I ; B 75 0 154 718 ;
+C 74 ; WX 410 ; N J ; B 14 -19 351 718 ;
+C 75 ; WX 547 ; N K ; B 62 0 544 718 ;
+C 76 ; WX 456 ; N L ; B 62 0 440 718 ;
+C 77 ; WX 683 ; N M ; B 60 0 624 718 ;
+C 78 ; WX 592 ; N N ; B 62 0 530 718 ;
+C 79 ; WX 638 ; N O ; B 32 -19 606 737 ;
+C 80 ; WX 547 ; N P ; B 71 0 510 718 ;
+C 81 ; WX 638 ; N Q ; B 32 -56 606 737 ;
+C 82 ; WX 592 ; N R ; B 72 0 561 718 ;
+C 83 ; WX 547 ; N S ; B 40 -19 508 737 ;
+C 84 ; WX 501 ; N T ; B 11 0 490 718 ;
+C 85 ; WX 592 ; N U ; B 65 -19 528 718 ;
+C 86 ; WX 547 ; N V ; B 16 0 531 718 ;
+C 87 ; WX 774 ; N W ; B 13 0 761 718 ;
+C 88 ; WX 547 ; N X ; B 16 0 531 718 ;
+C 89 ; WX 547 ; N Y ; B 11 0 535 718 ;
+C 90 ; WX 501 ; N Z ; B 19 0 482 718 ;
+C 91 ; WX 228 ; N bracketleft ; B 52 -196 205 722 ;
+C 92 ; WX 228 ; N backslash ; B -14 -19 242 737 ;
+C 93 ; WX 228 ; N bracketright ; B 23 -196 176 722 ;
+C 94 ; WX 385 ; N asciicircum ; B -11 264 396 688 ;
+C 95 ; WX 456 ; N underscore ; B 0 -125 456 -75 ;
+C 96 ; WX 182 ; N quoteleft ; B 53 469 139 725 ;
+C 97 ; WX 456 ; N a ; B 30 -15 435 538 ;
+C 98 ; WX 456 ; N b ; B 48 -15 424 718 ;
+C 99 ; WX 410 ; N c ; B 25 -15 391 538 ;
+C 100 ; WX 456 ; N d ; B 29 -15 409 718 ;
+C 101 ; WX 456 ; N e ; B 33 -15 423 538 ;
+C 102 ; WX 228 ; N f ; B 11 0 215 728 ;
+C 103 ; WX 456 ; N g ; B 33 -220 409 538 ;
+C 104 ; WX 456 ; N h ; B 53 0 403 718 ;
+C 105 ; WX 182 ; N i ; B 55 0 127 718 ;
+C 106 ; WX 182 ; N j ; B -13 -210 127 718 ;
+C 107 ; WX 410 ; N k ; B 55 0 411 718 ;
+C 108 ; WX 182 ; N l ; B 55 0 127 718 ;
+C 109 ; WX 683 ; N m ; B 53 0 631 538 ;
+C 110 ; WX 456 ; N n ; B 53 0 403 538 ;
+C 111 ; WX 456 ; N o ; B 29 -14 427 538 ;
+C 112 ; WX 456 ; N p ; B 48 -207 424 538 ;
+C 113 ; WX 456 ; N q ; B 29 -207 405 538 ;
+C 114 ; WX 273 ; N r ; B 63 0 272 538 ;
+C 115 ; WX 410 ; N s ; B 26 -15 380 538 ;
+C 116 ; WX 228 ; N t ; B 11 -7 211 669 ;
+C 117 ; WX 456 ; N u ; B 56 -15 401 523 ;
+C 118 ; WX 410 ; N v ; B 7 0 403 523 ;
+C 119 ; WX 592 ; N w ; B 11 0 581 523 ;
+C 120 ; WX 410 ; N x ; B 9 0 402 523 ;
+C 121 ; WX 410 ; N y ; B 9 -214 401 523 ;
+C 122 ; WX 410 ; N z ; B 25 0 385 523 ;
+C 123 ; WX 274 ; N braceleft ; B 34 -196 239 722 ;
+C 124 ; WX 213 ; N bar ; B 77 -19 137 737 ;
+C 125 ; WX 274 ; N braceright ; B 34 -196 239 722 ;
+C 126 ; WX 479 ; N asciitilde ; B 50 181 429 322 ;
+C 161 ; WX 273 ; N exclamdown ; B 97 -195 176 523 ;
+C 162 ; WX 456 ; N cent ; B 42 -115 421 623 ;
+C 163 ; WX 456 ; N sterling ; B 27 -16 442 718 ;
+C 164 ; WX 137 ; N fraction ; B -136 -19 273 703 ;
+C 165 ; WX 456 ; N yen ; B 2 0 453 688 ;
+C 166 ; WX 456 ; N florin ; B -9 -207 411 737 ;
+C 167 ; WX 456 ; N section ; B 35 -191 420 737 ;
+C 168 ; WX 456 ; N currency ; B 23 99 433 603 ;
+C 169 ; WX 157 ; N quotesingle ; B 48 463 108 718 ;
+C 170 ; WX 273 ; N quotedblleft ; B 31 469 252 725 ;
+C 171 ; WX 456 ; N guillemotleft ; B 80 108 376 446 ;
+C 172 ; WX 273 ; N guilsinglleft ; B 72 108 201 446 ;
+C 173 ; WX 273 ; N guilsinglright ; B 72 108 201 446 ;
+C 174 ; WX 410 ; N fi ; B 11 0 356 728 ;
+C 175 ; WX 410 ; N fl ; B 11 0 354 728 ;
+C 177 ; WX 456 ; N endash ; B 0 240 456 313 ;
+C 178 ; WX 456 ; N dagger ; B 35 -159 421 718 ;
+C 179 ; WX 456 ; N daggerdbl ; B 35 -159 421 718 ;
+C 180 ; WX 228 ; N periodcentered ; B 63 190 166 315 ;
+C 182 ; WX 440 ; N paragraph ; B 15 -173 408 718 ;
+C 183 ; WX 287 ; N bullet ; B 15 202 273 517 ;
+C 184 ; WX 182 ; N quotesinglbase ; B 43 -149 129 107 ;
+C 185 ; WX 273 ; N quotedblbase ; B 21 -149 242 107 ;
+C 186 ; WX 273 ; N quotedblright ; B 21 462 242 718 ;
+C 187 ; WX 456 ; N guillemotright ; B 80 108 376 446 ;
+C 188 ; WX 820 ; N ellipsis ; B 94 0 726 107 ;
+C 189 ; WX 820 ; N perthousand ; B 6 -19 815 703 ;
+C 191 ; WX 501 ; N questiondown ; B 75 -201 432 525 ;
+C 193 ; WX 273 ; N grave ; B 11 593 173 734 ;
+C 194 ; WX 273 ; N acute ; B 100 593 262 734 ;
+C 195 ; WX 273 ; N circumflex ; B 17 593 256 734 ;
+C 196 ; WX 273 ; N tilde ; B -3 606 276 722 ;
+C 197 ; WX 273 ; N macron ; B 8 627 265 684 ;
+C 198 ; WX 273 ; N breve ; B 11 595 263 731 ;
+C 199 ; WX 273 ; N dotaccent ; B 99 604 174 706 ;
+C 200 ; WX 273 ; N dieresis ; B 33 604 240 706 ;
+C 202 ; WX 273 ; N ring ; B 61 572 212 756 ;
+C 203 ; WX 273 ; N cedilla ; B 37 -225 212 0 ;
+C 205 ; WX 273 ; N hungarumlaut ; B 25 593 335 734 ;
+C 206 ; WX 273 ; N ogonek ; B 60 -225 235 0 ;
+C 207 ; WX 273 ; N caron ; B 17 593 256 734 ;
+C 208 ; WX 820 ; N emdash ; B 0 240 820 313 ;
+C 225 ; WX 820 ; N AE ; B 7 0 780 718 ;
+C 227 ; WX 303 ; N ordfeminine ; B 20 304 284 737 ;
+C 232 ; WX 456 ; N Lslash ; B -16 0 440 718 ;
+C 233 ; WX 638 ; N Oslash ; B 32 -19 607 737 ;
+C 234 ; WX 820 ; N OE ; B 30 -19 791 737 ;
+C 235 ; WX 299 ; N ordmasculine ; B 20 304 280 737 ;
+C 241 ; WX 729 ; N ae ; B 30 -15 695 538 ;
+C 245 ; WX 228 ; N dotlessi ; B 78 0 150 523 ;
+C 248 ; WX 182 ; N lslash ; B -16 0 198 718 ;
+C 249 ; WX 501 ; N oslash ; B 23 -22 440 545 ;
+C 250 ; WX 774 ; N oe ; B 29 -15 740 538 ;
+C 251 ; WX 501 ; N germandbls ; B 55 -15 468 728 ;
+C -1 ; WX 592 ; N Udieresis ; B 65 -19 528 901 ;
+C -1 ; WX 592 ; N Uacute ; B 65 -19 528 929 ;
+C -1 ; WX 547 ; N Scedilla ; B 35 -225 508 737 ;
+C -1 ; WX 501 ; N Tcaron ; B 11 0 490 929 ;
+C -1 ; WX 547 ; N Scaron ; B 40 -19 508 929 ;
+C -1 ; WX 592 ; N Rcaron ; B 72 0 561 929 ;
+C -1 ; WX 592 ; N Racute ; B 72 0 561 903 ;
+C -1 ; WX 547 ; N Sacute ; B 40 -19 508 903 ;
+C -1 ; WX 638 ; N Otilde ; B 32 -19 606 917 ;
+C -1 ; WX 456 ; N ucircumflex ; B 56 -15 401 734 ;
+C -1 ; WX 638 ; N Ohungarumlaut ; B 32 -19 606 929 ;
+C -1 ; WX 592 ; N Uhungarumlaut ; B 65 -19 528 929 ;
+C -1 ; WX 547 ; N Yacute ; B 11 0 535 929 ;
+C -1 ; WX 592 ; N Eth ; B 0 0 553 718 ;
+C -1 ; WX 592 ; N Dcroat ; B 0 0 553 718 ;
+C -1 ; WX 501 ; N Zacute ; B 19 0 482 903 ;
+C -1 ; WX 592 ; N Uring ; B 65 -19 528 951 ;
+C -1 ; WX 456 ; N gbreve ; B 33 -220 409 731 ;
+C -1 ; WX 456 ; N eogonek ; B 33 -225 423 538 ;
+C -1 ; WX 456 ; N edotaccent ; B 33 -15 423 706 ;
+C -1 ; WX 456 ; N ecaron ; B 33 -15 423 734 ;
+C -1 ; WX 592 ; N Ugrave ; B 65 -19 528 929 ;
+C -1 ; WX 547 ; N Thorn ; B 71 0 510 718 ;
+C -1 ; WX 456 ; N eacute ; B 33 -15 423 734 ;
+C -1 ; WX 456 ; N edieresis ; B 33 -15 423 706 ;
+C -1 ; WX 496 ; N dcaron ; B 29 -15 516 718 ;
+C -1 ; WX 410 ; N ccedilla ; B 25 -225 391 538 ;
+C -1 ; WX 410 ; N ccaron ; B 25 -15 391 734 ;
+C -1 ; WX 410 ; N cacute ; B 25 -15 391 734 ;
+C -1 ; WX 456 ; N aogonek ; B 30 -225 466 538 ;
+C -1 ; WX 456 ; N aring ; B 30 -15 435 769 ;
+C -1 ; WX 456 ; N atilde ; B 30 -15 435 722 ;
+C -1 ; WX 456 ; N abreve ; B 30 -15 435 731 ;
+C -1 ; WX 456 ; N egrave ; B 33 -15 423 734 ;
+C -1 ; WX 456 ; N agrave ; B 30 -15 435 734 ;
+C -1 ; WX 456 ; N aacute ; B 30 -15 435 734 ;
+C -1 ; WX 456 ; N adieresis ; B 30 -15 435 706 ;
+C -1 ; WX 592 ; N Uogonek ; B 65 -225 528 718 ;
+C -1 ; WX 456 ; N ugrave ; B 56 -15 401 734 ;
+C -1 ; WX 456 ; N uacute ; B 56 -15 401 734 ;
+C -1 ; WX 456 ; N udieresis ; B 56 -15 401 706 ;
+C -1 ; WX 248 ; N tcaron ; B 11 -7 268 718 ;
+C -1 ; WX 410 ; N scommaaccent ; B 26 -282 380 538 ;
+C -1 ; WX 501 ; N Zcaron ; B 19 0 482 929 ;
+C -1 ; WX 456 ; N ecircumflex ; B 33 -15 423 734 ;
+C -1 ; WX 592 ; N Ucircumflex ; B 65 -19 528 929 ;
+C -1 ; WX 456 ; N acircumflex ; B 30 -15 435 734 ;
+C -1 ; WX 501 ; N Zdotaccent ; B 19 0 482 901 ;
+C -1 ; WX 410 ; N scaron ; B 26 -15 380 734 ;
+C -1 ; WX 547 ; N Amacron ; B 11 0 536 879 ;
+C -1 ; WX 410 ; N sacute ; B 26 -15 380 734 ;
+C -1 ; WX 501 ; N Tcommaaccent ; B 11 -282 490 718 ;
+C -1 ; WX 547 ; N Ydieresis ; B 11 0 535 901 ;
+C -1 ; WX 456 ; N thorn ; B 48 -207 424 718 ;
+C -1 ; WX 547 ; N Emacron ; B 71 0 505 879 ;
+C -1 ; WX 638 ; N Ograve ; B 32 -19 606 929 ;
+C -1 ; WX 638 ; N Oacute ; B 32 -19 606 929 ;
+C -1 ; WX 638 ; N Odieresis ; B 32 -19 606 901 ;
+C -1 ; WX 592 ; N Ntilde ; B 62 0 530 917 ;
+C -1 ; WX 592 ; N Ncaron ; B 62 0 530 929 ;
+C -1 ; WX 592 ; N Nacute ; B 62 0 530 903 ;
+C -1 ; WX 456 ; N Lcaron ; B 62 0 440 718 ;
+C -1 ; WX 456 ; N Lacute ; B 62 0 440 903 ;
+C -1 ; WX 228 ; N Idotaccent ; B 75 0 154 901 ;
+C -1 ; WX 273 ; N racute ; B 63 0 272 734 ;
+C -1 ; WX 228 ; N Icircumflex ; B -5 0 234 929 ;
+C -1 ; WX 456 ; N ohungarumlaut ; B 29 -14 427 734 ;
+C -1 ; WX 456 ; N otilde ; B 29 -14 427 722 ;
+C -1 ; WX 510 ; N Euro ; B 0 -12 495 730 ;
+C -1 ; WX 456 ; N ocircumflex ; B 29 -14 427 734 ;
+C -1 ; WX 273 ; N onesuperior ; B 35 281 182 703 ;
+C -1 ; WX 273 ; N twosuperior ; B 3 280 265 714 ;
+C -1 ; WX 273 ; N threesuperior ; B 4 270 266 714 ;
+C -1 ; WX 228 ; N Igrave ; B -11 0 154 929 ;
+C -1 ; WX 228 ; N Iacute ; B 75 0 240 903 ;
+C -1 ; WX 228 ; N Imacron ; B -15 0 242 879 ;
+C -1 ; WX 228 ; N Iogonek ; B 10 -225 185 718 ;
+C -1 ; WX 228 ; N Idieresis ; B 11 0 218 901 ;
+C -1 ; WX 638 ; N Gbreve ; B 39 -19 577 926 ;
+C -1 ; WX 592 ; N Umacron ; B 65 -19 528 879 ;
+C -1 ; WX 547 ; N Kcommaaccent ; B 62 -282 544 718 ;
+C -1 ; WX 456 ; N ograve ; B 29 -14 427 734 ;
+C -1 ; WX 547 ; N Scommaaccent ; B 40 -282 508 737 ;
+C -1 ; WX 547 ; N Eogonek ; B 71 -225 536 718 ;
+C -1 ; WX 456 ; N oacute ; B 29 -14 427 734 ;
+C -1 ; WX 547 ; N Edotaccent ; B 71 0 505 901 ;
+C -1 ; WX 182 ; N iogonek ; B -17 -225 158 718 ;
+C -1 ; WX 456 ; N gcommaaccent ; B 33 -220 409 813 ;
+C -1 ; WX 456 ; N odieresis ; B 29 -14 427 706 ;
+C -1 ; WX 456 ; N ntilde ; B 53 0 403 722 ;
+C -1 ; WX 456 ; N ncaron ; B 53 0 403 734 ;
+C -1 ; WX 547 ; N Ecaron ; B 71 0 505 929 ;
+C -1 ; WX 547 ; N Ecircumflex ; B 71 0 505 929 ;
+C -1 ; WX 410 ; N scedilla ; B 26 -225 380 538 ;
+C -1 ; WX 273 ; N rcaron ; B 44 0 283 734 ;
+C -1 ; WX 547 ; N Egrave ; B 71 0 505 929 ;
+C -1 ; WX 547 ; N Eacute ; B 71 0 505 929 ;
+C -1 ; WX 638 ; N Gcommaaccent ; B 39 -282 577 737 ;
+C -1 ; WX 592 ; N Rcommaaccent ; B 72 -282 561 718 ;
+C -1 ; WX 547 ; N Edieresis ; B 71 0 505 901 ;
+C -1 ; WX 456 ; N nacute ; B 53 0 403 734 ;
+C -1 ; WX 456 ; N uogonek ; B 56 -225 432 523 ;
+C -1 ; WX 456 ; N umacron ; B 56 -15 401 684 ;
+C -1 ; WX 592 ; N Dcaron ; B 66 0 553 929 ;
+C -1 ; WX 212 ; N lcaron ; B 55 0 232 718 ;
+C -1 ; WX 592 ; N Ccaron ; B 36 -19 558 929 ;
+C -1 ; WX 592 ; N Cacute ; B 36 -19 558 903 ;
+C -1 ; WX 592 ; N Ccedilla ; B 36 -225 558 737 ;
+C -1 ; WX 328 ; N degree ; B 44 411 284 703 ;
+C -1 ; WX 547 ; N Aogonek ; B 11 -225 567 718 ;
+C -1 ; WX 479 ; N minus ; B 32 216 447 289 ;
+C -1 ; WX 479 ; N multiply ; B 32 0 447 506 ;
+C -1 ; WX 479 ; N divide ; B 32 -19 447 524 ;
+C -1 ; WX 547 ; N Aring ; B 11 0 536 944 ;
+C -1 ; WX 820 ; N trademark ; B 38 306 740 718 ;
+C -1 ; WX 273 ; N rcommaaccent ; B 57 -282 272 538 ;
+C -1 ; WX 182 ; N lacute ; B 55 0 217 903 ;
+C -1 ; WX 456 ; N omacron ; B 29 -14 427 684 ;
+C -1 ; WX 547 ; N Atilde ; B 11 0 536 917 ;
+C -1 ; WX 228 ; N icircumflex ; B -5 0 234 734 ;
+C -1 ; WX 228 ; N igrave ; B -11 0 151 734 ;
+C -1 ; WX 456 ; N ncommaaccent ; B 53 -282 403 538 ;
+C -1 ; WX 182 ; N lcommaaccent ; B 50 -282 133 718 ;
+C -1 ; WX 479 ; N plusminus ; B 32 0 447 561 ;
+C -1 ; WX 684 ; N onehalf ; B 35 -19 634 703 ;
+C -1 ; WX 684 ; N onequarter ; B 60 -19 620 703 ;
+C -1 ; WX 684 ; N threequarters ; B 37 -19 664 714 ;
+C -1 ; WX 228 ; N iacute ; B 78 0 240 734 ;
+C -1 ; WX 547 ; N Abreve ; B 11 0 536 926 ;
+C -1 ; WX 410 ; N kcommaaccent ; B 55 -282 411 718 ;
+C -1 ; WX 638 ; N Omacron ; B 32 -19 606 879 ;
+C -1 ; WX 228 ; N imacron ; B -15 0 242 684 ;
+C -1 ; WX 456 ; N emacron ; B 33 -15 423 684 ;
+C -1 ; WX 456 ; N amacron ; B 30 -15 435 684 ;
+C -1 ; WX 228 ; N tcommaaccent ; B 11 -282 211 669 ;
+C -1 ; WX 410 ; N ydieresis ; B 9 -214 401 706 ;
+C -1 ; WX 410 ; N zdotaccent ; B 25 0 385 706 ;
+C -1 ; WX 410 ; N zcaron ; B 25 0 385 734 ;
+C -1 ; WX 410 ; N zacute ; B 25 0 385 734 ;
+C -1 ; WX 410 ; N yacute ; B 9 -214 401 734 ;
+C -1 ; WX 456 ; N uhungarumlaut ; B 56 -15 427 734 ;
+C -1 ; WX 456 ; N eth ; B 29 -15 428 737 ;
+C -1 ; WX 456 ; N uring ; B 56 -15 401 756 ;
+C -1 ; WX 638 ; N Ocircumflex ; B 32 -19 606 929 ;
+C -1 ; WX 273 ; N commaaccent ; B 95 -282 178 -60 ;
+C -1 ; WX 604 ; N copyright ; B -11 -19 617 737 ;
+C -1 ; WX 604 ; N registered ; B -11 -19 617 737 ;
+C -1 ; WX 547 ; N Acircumflex ; B 11 0 536 929 ;
+C -1 ; WX 228 ; N idieresis ; B 11 0 218 706 ;
+C -1 ; WX 405 ; N lozenge ; B 15 0 382 740 ;
+C -1 ; WX 502 ; N Delta ; B 5 0 499 688 ;
+C -1 ; WX 479 ; N notequal ; B 32 10 447 495 ;
+C -1 ; WX 450 ; N radical ; B -5 -74 433 927 ;
+C -1 ; WX 547 ; N Agrave ; B 11 0 536 929 ;
+C -1 ; WX 547 ; N Aacute ; B 11 0 536 929 ;
+C -1 ; WX 479 ; N lessequal ; B 39 0 439 594 ;
+C -1 ; WX 479 ; N greaterequal ; B 39 0 439 594 ;
+C -1 ; WX 479 ; N logicalnot ; B 32 108 447 390 ;
+C -1 ; WX 585 ; N summation ; B 12 -123 570 752 ;
+C -1 ; WX 405 ; N partialdiff ; B 21 -10 379 753 ;
+C -1 ; WX 592 ; N Ncommaaccent ; B 62 -282 530 718 ;
+C -1 ; WX 456 ; N dcroat ; B 29 -15 456 718 ;
+C -1 ; WX 213 ; N brokenbar ; B 77 -19 137 737 ;
+C -1 ; WX 456 ; N Lcommaaccent ; B 62 -282 440 718 ;
+C -1 ; WX 547 ; N Adieresis ; B 11 0 536 901 ;
+C -1 ; WX 456 ; N mu ; B 56 -207 401 523 ;
+C -1 ; WX 228 ; N .notdef ; B 21 0 21 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -28
+KPX A Ccedilla -29
+KPX A G -30
+KPX A O -27
+KPX A Odieresis -27
+KPX A Q -28
+KPX A T -74
+KPX A U -29
+KPX A Uacute -29
+KPX A Ucircumflex -29
+KPX A Udieresis -29
+KPX A Ugrave -29
+KPX A V -56
+KPX A W -39
+KPX A Y -78
+KPX A a -3
+KPX A b 0
+KPX A c -10
+KPX A ccedilla -10
+KPX A comma 5
+KPX A d -11
+KPX A e -14
+KPX A g -14
+KPX A guillemotleft -40
+KPX A guilsinglleft -36
+KPX A hyphen -2
+KPX A o -13
+KPX A period 5
+KPX A q -11
+KPX A quotedblright -37
+KPX A quoteright -48
+KPX A t -15
+KPX A u -12
+KPX A v -27
+KPX A w -21
+KPX A y -27
+KPX Aacute C -28
+KPX Aacute G -30
+KPX Aacute O -27
+KPX Aacute Q -28
+KPX Aacute T -74
+KPX Aacute U -29
+KPX Aacute V -56
+KPX Aacute W -39
+KPX Aacute Y -78
+KPX Aacute a -3
+KPX Aacute b 0
+KPX Aacute c -10
+KPX Aacute comma 5
+KPX Aacute d -11
+KPX Aacute e -14
+KPX Aacute g -14
+KPX Aacute guillemotleft -40
+KPX Aacute guilsinglleft -36
+KPX Aacute hyphen -2
+KPX Aacute o -13
+KPX Aacute period 5
+KPX Aacute q -11
+KPX Aacute quoteright -48
+KPX Aacute t -15
+KPX Aacute u -12
+KPX Aacute v -27
+KPX Aacute w -21
+KPX Aacute y -27
+KPX Acircumflex C -28
+KPX Acircumflex G -30
+KPX Acircumflex O -27
+KPX Acircumflex Q -28
+KPX Acircumflex T -74
+KPX Acircumflex U -29
+KPX Acircumflex V -56
+KPX Acircumflex W -39
+KPX Acircumflex Y -78
+KPX Acircumflex comma 5
+KPX Acircumflex period 5
+KPX Adieresis C -28
+KPX Adieresis G -30
+KPX Adieresis O -27
+KPX Adieresis Q -28
+KPX Adieresis T -74
+KPX Adieresis U -29
+KPX Adieresis V -56
+KPX Adieresis W -39
+KPX Adieresis Y -78
+KPX Adieresis a -3
+KPX Adieresis b 0
+KPX Adieresis c -10
+KPX Adieresis comma 5
+KPX Adieresis d -11
+KPX Adieresis g -14
+KPX Adieresis guillemotleft -40
+KPX Adieresis guilsinglleft -36
+KPX Adieresis hyphen -2
+KPX Adieresis o -13
+KPX Adieresis period 5
+KPX Adieresis q -11
+KPX Adieresis quotedblright -37
+KPX Adieresis quoteright -48
+KPX Adieresis t -15
+KPX Adieresis u -12
+KPX Adieresis v -27
+KPX Adieresis w -21
+KPX Adieresis y -27
+KPX Agrave C -28
+KPX Agrave G -30
+KPX Agrave O -27
+KPX Agrave Q -28
+KPX Agrave T -74
+KPX Agrave U -29
+KPX Agrave V -56
+KPX Agrave W -39
+KPX Agrave Y -78
+KPX Agrave comma 5
+KPX Agrave period 5
+KPX Aring C -28
+KPX Aring G -30
+KPX Aring O -27
+KPX Aring Q -28
+KPX Aring T -74
+KPX Aring U -29
+KPX Aring V -56
+KPX Aring W -39
+KPX Aring Y -78
+KPX Aring a -3
+KPX Aring b 0
+KPX Aring c -10
+KPX Aring comma 5
+KPX Aring d -11
+KPX Aring e -14
+KPX Aring g -14
+KPX Aring guillemotleft -40
+KPX Aring guilsinglleft -36
+KPX Aring hyphen -2
+KPX Aring o -13
+KPX Aring period 5
+KPX Aring q -11
+KPX Aring quotedblright -37
+KPX Aring quoteright -48
+KPX Aring t -15
+KPX Aring u -12
+KPX Aring v -27
+KPX Aring w -21
+KPX Aring y -27
+KPX Atilde C -28
+KPX Atilde G -30
+KPX Atilde O -27
+KPX Atilde Q -28
+KPX Atilde T -74
+KPX Atilde U -29
+KPX Atilde V -56
+KPX Atilde W -39
+KPX Atilde Y -78
+KPX Atilde comma 5
+KPX Atilde period 5
+KPX B A -15
+KPX B AE -14
+KPX B Aacute -15
+KPX B Acircumflex -15
+KPX B Adieresis -15
+KPX B Aring -15
+KPX B Atilde -15
+KPX B O -3
+KPX B OE 0
+KPX B Oacute -3
+KPX B Ocircumflex -3
+KPX B Odieresis -3
+KPX B Ograve -3
+KPX B Oslash 0
+KPX B V -25
+KPX B W -14
+KPX B Y -31
+KPX C A -25
+KPX C AE -24
+KPX C Aacute -25
+KPX C Adieresis -25
+KPX C Aring -25
+KPX C H -6
+KPX C K -5
+KPX C O -4
+KPX C Oacute -4
+KPX C Odieresis -4
+KPX Ccedilla A -28
+KPX D A -33
+KPX D Aacute -33
+KPX D Acircumflex -33
+KPX D Adieresis -33
+KPX D Agrave -33
+KPX D Aring -33
+KPX D Atilde -33
+KPX D J -1
+KPX D T -30
+KPX D V -32
+KPX D W -18
+KPX D X -38
+KPX D Y -44
+KPX F A -55
+KPX F Aacute -55
+KPX F Acircumflex -55
+KPX F Adieresis -55
+KPX F Agrave -55
+KPX F Aring -55
+KPX F Atilde -55
+KPX F J -50
+KPX F O -15
+KPX F Odieresis -15
+KPX F a -26
+KPX F aacute -26
+KPX F adieresis -26
+KPX F ae -26
+KPX F aring -26
+KPX F comma -102
+KPX F e -19
+KPX F eacute -19
+KPX F hyphen -12
+KPX F i -8
+KPX F j -8
+KPX F o -17
+KPX F oacute -17
+KPX F odieresis -17
+KPX F oe -17
+KPX F oslash -17
+KPX F period -102
+KPX F r -32
+KPX F u -28
+KPX G A -4
+KPX G AE -2
+KPX G Aacute -4
+KPX G Acircumflex -4
+KPX G Adieresis -4
+KPX G Agrave -4
+KPX G Aring -4
+KPX G Atilde -4
+KPX G T -30
+KPX G V -36
+KPX G W -20
+KPX G Y -47
+KPX J A -22
+KPX J AE -21
+KPX J Adieresis -22
+KPX J Aring -22
+KPX K C -37
+KPX K G -40
+KPX K O -37
+KPX K OE -33
+KPX K Oacute -37
+KPX K Odieresis -37
+KPX K S -27
+KPX K T 22
+KPX K a -6
+KPX K adieresis -6
+KPX K ae -7
+KPX K aring -6
+KPX K e -26
+KPX K hyphen -38
+KPX K o -26
+KPX K oacute -26
+KPX K odieresis -26
+KPX K u -21
+KPX K udieresis -21
+KPX K y -52
+KPX L A 18
+KPX L AE 20
+KPX L Aacute 18
+KPX L Adieresis 18
+KPX L Aring 18
+KPX L C -28
+KPX L Ccedilla -32
+KPX L G -31
+KPX L O -29
+KPX L Oacute -29
+KPX L Ocircumflex -29
+KPX L Odieresis -29
+KPX L Ograve -29
+KPX L Otilde -29
+KPX L S -11
+KPX L T -81
+KPX L U -25
+KPX L Udieresis -25
+KPX L V -78
+KPX L W -50
+KPX L Y -92
+KPX L hyphen -110
+KPX L quotedblright -105
+KPX L quoteright -116
+KPX L u -9
+KPX L udieresis -9
+KPX L y -47
+KPX N A -4
+KPX N AE -2
+KPX N Aacute -4
+KPX N Adieresis -4
+KPX N Aring -4
+KPX N C 0
+KPX N Ccedilla 0
+KPX N G -1
+KPX N O 1
+KPX N Oacute 1
+KPX N Odieresis 1
+KPX N a -1
+KPX N aacute -1
+KPX N adieresis -1
+KPX N ae -1
+KPX N aring -1
+KPX N comma -4
+KPX N e 1
+KPX N eacute 1
+KPX N o 1
+KPX N oacute 1
+KPX N odieresis 1
+KPX N oslash 4
+KPX N period -4
+KPX N u 0
+KPX N udieresis 0
+KPX O A -29
+KPX O AE -29
+KPX O Aacute -29
+KPX O Adieresis -29
+KPX O Aring -29
+KPX O T -27
+KPX O V -30
+KPX O W -14
+KPX O X -35
+KPX O Y -42
+KPX Oacute A -29
+KPX Oacute T -27
+KPX Oacute V -30
+KPX Oacute W -14
+KPX Oacute Y -42
+KPX Ocircumflex T -27
+KPX Ocircumflex V -30
+KPX Ocircumflex Y -42
+KPX Odieresis A -29
+KPX Odieresis T -27
+KPX Odieresis V -30
+KPX Odieresis W -14
+KPX Odieresis X -35
+KPX Odieresis Y -42
+KPX Ograve T -27
+KPX Ograve V -30
+KPX Ograve Y -42
+KPX Oslash A -27
+KPX Otilde T -27
+KPX Otilde V -30
+KPX Otilde Y -42
+KPX P A -62
+KPX P AE -64
+KPX P Aacute -62
+KPX P Adieresis -62
+KPX P Aring -62
+KPX P J -70
+KPX P a -21
+KPX P aacute -21
+KPX P adieresis -21
+KPX P ae -21
+KPX P aring -21
+KPX P comma -123
+KPX P e -24
+KPX P eacute -24
+KPX P hyphen -28
+KPX P o -24
+KPX P oacute -24
+KPX P odieresis -24
+KPX P oe -22
+KPX P oslash -22
+KPX P period -123
+KPX R C -7
+KPX R Ccedilla -7
+KPX R G -9
+KPX R O -6
+KPX R OE -3
+KPX R Oacute -6
+KPX R Odieresis -6
+KPX R T -12
+KPX R U -8
+KPX R Udieresis -8
+KPX R V -22
+KPX R W -15
+KPX R Y -29
+KPX R a -6
+KPX R aacute -6
+KPX R adieresis -6
+KPX R ae -6
+KPX R aring -6
+KPX R e -5
+KPX R eacute -5
+KPX R hyphen 4
+KPX R o -5
+KPX R oacute -5
+KPX R odieresis -5
+KPX R oe -5
+KPX R u -4
+KPX R uacute -5
+KPX R udieresis -5
+KPX R y -1
+KPX S A -15
+KPX S AE -14
+KPX S Aacute -15
+KPX S Adieresis -15
+KPX S Aring -15
+KPX S T -14
+KPX S V -25
+KPX S W -17
+KPX S Y -31
+KPX S t -2
+KPX T A -78
+KPX T AE -76
+KPX T Aacute -78
+KPX T Acircumflex -78
+KPX T Adieresis -78
+KPX T Agrave -78
+KPX T Aring -78
+KPX T Atilde -78
+KPX T C -27
+KPX T G -31
+KPX T J -80
+KPX T O -26
+KPX T OE -22
+KPX T Oacute -26
+KPX T Ocircumflex -26
+KPX T Odieresis -26
+KPX T Ograve -26
+KPX T Oslash -27
+KPX T Otilde -26
+KPX T S -15
+KPX T V 17
+KPX T W 19
+KPX T Y 19
+KPX T a -79
+KPX T ae -79
+KPX T c -73
+KPX T colon -95
+KPX T comma -80
+KPX T e -77
+KPX T g -76
+KPX T guillemotleft -100
+KPX T guilsinglleft -96
+KPX T hyphen -60
+KPX T i -2
+KPX T j -2
+KPX T o -76
+KPX T oslash -72
+KPX T period -80
+KPX T r -77
+KPX T s -74
+KPX T semicolon -93
+KPX T u -75
+KPX T v -79
+KPX T w -80
+KPX T y -79
+KPX U A -32
+KPX U AE -32
+KPX U Aacute -32
+KPX U Acircumflex -32
+KPX U Adieresis -32
+KPX U Aring -32
+KPX U Atilde -32
+KPX U comma -24
+KPX U m -1
+KPX U n -1
+KPX U p 0
+KPX U period -22
+KPX U r -6
+KPX Uacute A -32
+KPX Uacute comma -24
+KPX Uacute m -1
+KPX Uacute n -1
+KPX Uacute p 0
+KPX Uacute period -22
+KPX Uacute r -6
+KPX Ucircumflex A -32
+KPX Udieresis A -32
+KPX Udieresis b 0
+KPX Udieresis comma -24
+KPX Udieresis m -1
+KPX Udieresis n -1
+KPX Udieresis p 0
+KPX Udieresis period -22
+KPX Udieresis r -6
+KPX Ugrave A -32
+KPX V A -58
+KPX V AE -60
+KPX V Aacute -58
+KPX V Acircumflex -58
+KPX V Adieresis -58
+KPX V Agrave -58
+KPX V Aring -58
+KPX V Atilde -58
+KPX V C -31
+KPX V G -34
+KPX V O -30
+KPX V Oacute -30
+KPX V Ocircumflex -30
+KPX V Odieresis -30
+KPX V Ograve -30
+KPX V Oslash -27
+KPX V Otilde -30
+KPX V S -26
+KPX V T 18
+KPX V a -47
+KPX V ae -47
+KPX V colon -41
+KPX V comma -73
+KPX V e -46
+KPX V g -44
+KPX V guillemotleft -68
+KPX V guilsinglleft -64
+KPX V hyphen -29
+KPX V i -5
+KPX V o -46
+KPX V oslash -41
+KPX V period -73
+KPX V r -37
+KPX V semicolon -41
+KPX V u -35
+KPX V y -12
+KPX W A -42
+KPX W AE -43
+KPX W Aacute -42
+KPX W Acircumflex -42
+KPX W Adieresis -42
+KPX W Agrave -42
+KPX W Aring -42
+KPX W Atilde -42
+KPX W C -15
+KPX W G -18
+KPX W O -14
+KPX W Oacute -14
+KPX W Ocircumflex -14
+KPX W Odieresis -14
+KPX W Ograve -14
+KPX W Oslash -12
+KPX W Otilde -14
+KPX W S -19
+KPX W T 20
+KPX W a -29
+KPX W ae -29
+KPX W colon -31
+KPX W comma -46
+KPX W e -26
+KPX W g -24
+KPX W guillemotleft -48
+KPX W guilsinglleft -44
+KPX W hyphen -9
+KPX W i -3
+KPX W o -26
+KPX W oslash -21
+KPX W period -46
+KPX W r -26
+KPX W semicolon -31
+KPX W u -24
+KPX W y -2
+KPX X C -33
+KPX X O -33
+KPX X Odieresis -33
+KPX X Q -33
+KPX X a -12
+KPX X e -31
+KPX X hyphen -40
+KPX X o -31
+KPX X u -27
+KPX X y -42
+KPX Y A -80
+KPX Y AE -82
+KPX Y Aacute -80
+KPX Y Acircumflex -80
+KPX Y Adieresis -80
+KPX Y Agrave -80
+KPX Y Aring -80
+KPX Y Atilde -80
+KPX Y C -43
+KPX Y G -47
+KPX Y O -43
+KPX Y Oacute -43
+KPX Y Ocircumflex -43
+KPX Y Odieresis -43
+KPX Y Ograve -43
+KPX Y Oslash -44
+KPX Y Otilde -43
+KPX Y S -33
+KPX Y T 20
+KPX Y a -73
+KPX Y ae -73
+KPX Y colon -60
+KPX Y comma -92
+KPX Y e -74
+KPX Y g -73
+KPX Y guillemotleft -103
+KPX Y guilsinglleft -99
+KPX Y hyphen -68
+KPX Y i -3
+KPX Y o -74
+KPX Y oslash -69
+KPX Y p -48
+KPX Y period -92
+KPX Y semicolon -60
+KPX Y u -54
+KPX Y v -31
+KPX Z v -24
+KPX Z y -25
+KPX a j -5
+KPX a quoteright -10
+KPX a v -19
+KPX a w -14
+KPX a y -20
+KPX aacute v -19
+KPX aacute w -14
+KPX aacute y -20
+KPX adieresis v -19
+KPX adieresis w -14
+KPX adieresis y -20
+KPX ae v -17
+KPX ae w -11
+KPX ae y -19
+KPX agrave v -19
+KPX agrave w -14
+KPX agrave y -20
+KPX aring v -19
+KPX aring w -14
+KPX aring y -20
+KPX b v -13
+KPX b w -8
+KPX b y -15
+KPX c h 2
+KPX c k 1
+KPX comma one -83
+KPX comma quotedblright -22
+KPX comma quoteright -33
+KPX e quoteright -5
+KPX e t -8
+KPX e v -16
+KPX e w -11
+KPX e x -19
+KPX e y -18
+KPX eacute v -16
+KPX eacute w -11
+KPX eacute y -18
+KPX ecircumflex v -16
+KPX ecircumflex w -11
+KPX ecircumflex y -18
+KPX eight four 6
+KPX eight one -36
+KPX eight seven -16
+KPX f a -9
+KPX f aacute -9
+KPX f adieresis -9
+KPX f ae -9
+KPX f aring -9
+KPX f e -12
+KPX f eacute -12
+KPX f f 17
+KPX f i -5
+KPX f j -5
+KPX f l -5
+KPX f o -12
+KPX f oacute -12
+KPX f odieresis -12
+KPX f oe -12
+KPX f oslash -8
+KPX f quoteright 12
+KPX f s -4
+KPX f t 17
+KPX five four 4
+KPX five one -56
+KPX five seven -16
+KPX four four 8
+KPX four one -65
+KPX four seven -39
+KPX g a 1
+KPX g adieresis 1
+KPX g ae 1
+KPX g aring 1
+KPX g e 4
+KPX g eacute 4
+KPX g l 4
+KPX g oacute 4
+KPX g odieresis 4
+KPX g r 0
+KPX guillemotright A -42
+KPX guillemotright AE -43
+KPX guillemotright Aacute -42
+KPX guillemotright Adieresis -42
+KPX guillemotright Aring -42
+KPX guillemotright T -101
+KPX guillemotright V -68
+KPX guillemotright W -48
+KPX guillemotright Y -102
+KPX guilsinglright A -38
+KPX guilsinglright AE -39
+KPX guilsinglright Aacute -38
+KPX guilsinglright Adieresis -38
+KPX guilsinglright Aring -38
+KPX guilsinglright T -96
+KPX guilsinglright V -64
+KPX guilsinglright W -43
+KPX guilsinglright Y -98
+KPX h quoteright -3
+KPX h y -14
+KPX hyphen A -3
+KPX hyphen AE -4
+KPX hyphen Aacute -3
+KPX hyphen Adieresis -3
+KPX hyphen Aring -3
+KPX hyphen T -61
+KPX hyphen V -29
+KPX hyphen W -9
+KPX hyphen Y -67
+KPX i T -2
+KPX i j 0
+KPX k a -5
+KPX k aacute -5
+KPX k adieresis -5
+KPX k ae -5
+KPX k aring -5
+KPX k comma 1
+KPX k e -19
+KPX k eacute -19
+KPX k g -18
+KPX k hyphen -31
+KPX k o -19
+KPX k oacute -19
+KPX k odieresis -19
+KPX k period 1
+KPX k s -9
+KPX k u -3
+KPX k udieresis -3
+KPX l v -3
+KPX l y -3
+KPX m p 4
+KPX m v -13
+KPX m w -7
+KPX m y -13
+KPX n T -75
+KPX n p 4
+KPX n quoteright -3
+KPX n v -14
+KPX n w -8
+KPX n y -14
+KPX nine four 1
+KPX nine one -31
+KPX nine seven -19
+KPX o T -77
+KPX o quoteright -8
+KPX o t -7
+KPX o v -15
+KPX o w -9
+KPX o x -18
+KPX o y -17
+KPX oacute v -15
+KPX oacute w -9
+KPX oacute y -17
+KPX ocircumflex t -7
+KPX odieresis t -7
+KPX odieresis v -15
+KPX odieresis w -9
+KPX odieresis x -18
+KPX odieresis y -17
+KPX ograve v -15
+KPX ograve w -9
+KPX ograve y -17
+KPX one comma -54
+KPX one eight -46
+KPX one five -49
+KPX one four -59
+KPX one nine -47
+KPX one one -90
+KPX one period -54
+KPX one seven -64
+KPX one six -44
+KPX one three -51
+KPX one two -50
+KPX one zero -43
+KPX p t -6
+KPX p y -15
+KPX period one -83
+KPX period quotedblright -22
+KPX period quoteright -33
+KPX q c 6
+KPX q u 1
+KPX quotedblbase A 24
+KPX quotedblbase AE 25
+KPX quotedblbase T -60
+KPX quotedblbase V -53
+KPX quotedblbase W -25
+KPX quotedblbase Y -71
+KPX quotedblleft A -41
+KPX quotedblleft AE -44
+KPX quotedblleft Aacute -41
+KPX quotedblleft Adieresis -41
+KPX quotedblleft Aring -41
+KPX quotedblleft T 16
+KPX quotedblleft V 24
+KPX quotedblleft W 31
+KPX quotedblleft Y 14
+KPX quotedblright A -49
+KPX quotedblright AE -52
+KPX quotedblright Aacute -49
+KPX quotedblright Adieresis -49
+KPX quotedblright Aring -49
+KPX quotedblright T 11
+KPX quotedblright V 16
+KPX quotedblright W 23
+KPX quotedblright Y 9
+KPX quoteleft A -52
+KPX quoteleft AE -55
+KPX quoteleft Aacute -52
+KPX quoteleft Adieresis -52
+KPX quoteleft Aring -52
+KPX quoteleft T 5
+KPX quoteleft V 13
+KPX quoteleft W 20
+KPX quoteleft Y 3
+KPX quoteright A -60
+KPX quoteright AE -63
+KPX quoteright Aacute -60
+KPX quoteright Adieresis -60
+KPX quoteright Aring -60
+KPX quoteright comma -48
+KPX quoteright d -16
+KPX quoteright o -24
+KPX quoteright period -48
+KPX quoteright r -15
+KPX quoteright s -13
+KPX quoteright t -3
+KPX quoteright v 0
+KPX quoteright w 1
+KPX quoteright y 0
+KPX r a -3
+KPX r aacute -3
+KPX r acircumflex -3
+KPX r adieresis -3
+KPX r ae -3
+KPX r agrave -3
+KPX r aring -3
+KPX r c -6
+KPX r ccedilla -3
+KPX r colon -5
+KPX r comma -48
+KPX r d -4
+KPX r e -10
+KPX r eacute -10
+KPX r ecircumflex -10
+KPX r egrave -10
+KPX r f 23
+KPX r g -4
+KPX r h 2
+KPX r hyphen -30
+KPX r i 1
+KPX r j 0
+KPX r k 1
+KPX r l 1
+KPX r m 2
+KPX r n 2
+KPX r o -11
+KPX r oacute -11
+KPX r ocircumflex -11
+KPX r odieresis -11
+KPX r oe -7
+KPX r ograve -11
+KPX r oslash -7
+KPX r p 4
+KPX r period -48
+KPX r q -4
+KPX r quoteright 14
+KPX r r -3
+KPX r s 2
+KPX r semicolon -5
+KPX r t 23
+KPX r u 0
+KPX r v 24
+KPX r w 22
+KPX r x 19
+KPX r y 23
+KPX r z 6
+KPX s quoteright -5
+KPX s t -5
+KPX seven colon -47
+KPX seven comma -95
+KPX seven eight -15
+KPX seven five -22
+KPX seven four -72
+KPX seven one -34
+KPX seven period -95
+KPX seven seven 3
+KPX seven six -24
+KPX seven three -14
+KPX seven two -14
+KPX six four 6
+KPX six one -31
+KPX six seven -13
+KPX t S -8
+KPX t a 1
+KPX t aacute 1
+KPX t adieresis 1
+KPX t ae 1
+KPX t aring 1
+KPX t colon -13
+KPX t e -10
+KPX t eacute -10
+KPX t h 1
+KPX t o -10
+KPX t oacute -10
+KPX t odieresis -10
+KPX t quoteright 10
+KPX t semicolon -13
+KPX three four 8
+KPX three one -34
+KPX three seven -15
+KPX two four -38
+KPX two one -29
+KPX two seven -14
+KPX u quoteright 5
+KPX v a -16
+KPX v aacute -16
+KPX v acircumflex -16
+KPX v adieresis -16
+KPX v ae -16
+KPX v agrave -16
+KPX v aring -16
+KPX v atilde -16
+KPX v c -12
+KPX v colon -8
+KPX v comma -50
+KPX v e -16
+KPX v eacute -16
+KPX v ecircumflex -16
+KPX v egrave -16
+KPX v g -15
+KPX v hyphen -3
+KPX v l -2
+KPX v o -16
+KPX v oacute -16
+KPX v odieresis -16
+KPX v ograve -16
+KPX v oslash -12
+KPX v period -50
+KPX v s -10
+KPX v semicolon -8
+KPX w a -13
+KPX w aacute -13
+KPX w acircumflex -13
+KPX w adieresis -13
+KPX w ae -13
+KPX w agrave -13
+KPX w aring -13
+KPX w atilde -13
+KPX w c -5
+KPX w colon -10
+KPX w comma -37
+KPX w e -9
+KPX w eacute -9
+KPX w ecircumflex -9
+KPX w egrave -9
+KPX w g -8
+KPX w hyphen 3
+KPX w l -4
+KPX w o -9
+KPX w oacute -9
+KPX w odieresis -9
+KPX w ograve -9
+KPX w oslash -5
+KPX w period -37
+KPX w s -7
+KPX w semicolon -10
+KPX x a -10
+KPX x c -13
+KPX x e -17
+KPX x eacute -17
+KPX x o -17
+KPX x q -14
+KPX y a -16
+KPX y aacute -16
+KPX y acircumflex -16
+KPX y adieresis -16
+KPX y ae -16
+KPX y agrave -16
+KPX y aring -16
+KPX y atilde -16
+KPX y c -13
+KPX y colon -9
+KPX y comma -49
+KPX y e -17
+KPX y eacute -17
+KPX y ecircumflex -17
+KPX y egrave -17
+KPX y g -15
+KPX y hyphen -2
+KPX y l -3
+KPX y o -16
+KPX y oacute -16
+KPX y odieresis -16
+KPX y ograve -16
+KPX y oslash -12
+KPX y period -49
+KPX y s -11
+KPX y semicolon -9
+KPX zero four 5
+KPX zero one -31
+KPX zero seven -21
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/n019043l.pfb b/Master/xemtex/gsfonts/n019043l.pfb
new file mode 100644
index 00000000000..86f564b66b7
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019043l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/n019043l.pfm b/Master/xemtex/gsfonts/n019043l.pfm
new file mode 100644
index 00000000000..62582b5489e
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019043l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/n019044l.afm b/Master/xemtex/gsfonts/n019044l.afm
new file mode 100644
index 00000000000..80aef675ee9
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019044l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName NimbusSanL-BoldCond
+FullName Nimbus Sans L Bold Condensed
+FamilyName Nimbus Sans L
+Weight Bold
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -139 -307 822 975
+CapHeight 718
+XHeight 532
+Descender -207
+Ascender 718
+StartCharMetrics 316
+C 32 ; WX 228 ; N space ; B 21 0 21 0 ;
+C 33 ; WX 273 ; N exclam ; B 74 0 200 718 ;
+C 34 ; WX 389 ; N quotedbl ; B 80 447 308 718 ;
+C 35 ; WX 456 ; N numbersign ; B 15 0 441 698 ;
+C 36 ; WX 456 ; N dollar ; B 24 -115 429 775 ;
+C 37 ; WX 729 ; N percent ; B 23 -19 706 710 ;
+C 38 ; WX 592 ; N ampersand ; B 44 -19 575 718 ;
+C 39 ; WX 228 ; N quoteright ; B 57 445 171 718 ;
+C 40 ; WX 273 ; N parenleft ; B 29 -207 257 734 ;
+C 41 ; WX 273 ; N parenright ; B 16 -207 244 734 ;
+C 42 ; WX 319 ; N asterisk ; B 22 387 297 718 ;
+C 43 ; WX 479 ; N plus ; B 33 0 446 506 ;
+C 44 ; WX 228 ; N comma ; B 52 -168 175 147 ;
+C 45 ; WX 273 ; N hyphen ; B 22 215 251 345 ;
+C 46 ; WX 228 ; N period ; B 52 0 175 147 ;
+C 47 ; WX 228 ; N slash ; B -27 -19 255 737 ;
+C 48 ; WX 456 ; N zero ; B 26 -19 430 710 ;
+C 49 ; WX 456 ; N one ; B 57 0 310 710 ;
+C 50 ; WX 456 ; N two ; B 21 0 419 710 ;
+C 51 ; WX 456 ; N three ; B 22 -19 423 710 ;
+C 52 ; WX 456 ; N four ; B 22 0 431 710 ;
+C 53 ; WX 456 ; N five ; B 22 -19 423 698 ;
+C 54 ; WX 456 ; N six ; B 25 -19 426 710 ;
+C 55 ; WX 456 ; N seven ; B 20 0 433 698 ;
+C 56 ; WX 456 ; N eight ; B 26 -19 430 710 ;
+C 57 ; WX 456 ; N nine ; B 25 -19 428 710 ;
+C 58 ; WX 273 ; N colon ; B 75 0 198 512 ;
+C 59 ; WX 273 ; N semicolon ; B 75 -168 198 512 ;
+C 60 ; WX 479 ; N less ; B 31 -15 448 521 ;
+C 61 ; WX 479 ; N equal ; B 33 87 446 419 ;
+C 62 ; WX 479 ; N greater ; B 31 -15 448 521 ;
+C 63 ; WX 501 ; N question ; B 49 0 456 727 ;
+C 64 ; WX 800 ; N at ; B 97 -19 702 737 ;
+C 65 ; WX 592 ; N A ; B 16 0 576 718 ;
+C 66 ; WX 592 ; N B ; B 62 0 549 718 ;
+C 67 ; WX 592 ; N C ; B 36 -19 561 737 ;
+C 68 ; WX 592 ; N D ; B 62 0 562 718 ;
+C 69 ; WX 547 ; N E ; B 62 0 509 718 ;
+C 70 ; WX 501 ; N F ; B 62 0 481 718 ;
+C 71 ; WX 638 ; N G ; B 36 -19 585 737 ;
+C 72 ; WX 592 ; N H ; B 58 0 534 718 ;
+C 73 ; WX 228 ; N I ; B 52 0 175 718 ;
+C 74 ; WX 456 ; N J ; B 18 -18 397 718 ;
+C 75 ; WX 592 ; N K ; B 71 0 592 718 ;
+C 76 ; WX 501 ; N L ; B 62 0 478 718 ;
+C 77 ; WX 683 ; N M ; B 57 0 627 718 ;
+C 78 ; WX 592 ; N N ; B 57 0 536 718 ;
+C 79 ; WX 638 ; N O ; B 36 -19 602 737 ;
+C 80 ; WX 547 ; N P ; B 62 0 514 718 ;
+C 81 ; WX 638 ; N Q ; B 36 -52 604 737 ;
+C 82 ; WX 592 ; N R ; B 62 0 555 718 ;
+C 83 ; WX 547 ; N S ; B 32 -19 516 737 ;
+C 84 ; WX 501 ; N T ; B 11 0 490 718 ;
+C 85 ; WX 592 ; N U ; B 59 -19 534 718 ;
+C 86 ; WX 547 ; N V ; B 16 0 531 718 ;
+C 87 ; WX 774 ; N W ; B 13 0 762 718 ;
+C 88 ; WX 547 ; N X ; B 11 0 535 718 ;
+C 89 ; WX 547 ; N Y ; B 12 0 535 718 ;
+C 90 ; WX 501 ; N Z ; B 20 0 481 718 ;
+C 91 ; WX 273 ; N bracketleft ; B 52 -196 253 722 ;
+C 92 ; WX 228 ; N backslash ; B -27 -19 255 737 ;
+C 93 ; WX 273 ; N bracketright ; B 20 -196 221 722 ;
+C 94 ; WX 479 ; N asciicircum ; B 51 323 428 698 ;
+C 95 ; WX 456 ; N underscore ; B 0 -125 456 -75 ;
+C 96 ; WX 228 ; N quoteleft ; B 57 454 171 727 ;
+C 97 ; WX 456 ; N a ; B 24 -14 432 546 ;
+C 98 ; WX 501 ; N b ; B 50 -14 474 718 ;
+C 99 ; WX 456 ; N c ; B 28 -14 430 546 ;
+C 100 ; WX 501 ; N d ; B 28 -14 452 718 ;
+C 101 ; WX 456 ; N e ; B 19 -14 433 546 ;
+C 102 ; WX 273 ; N f ; B 8 0 261 727 ;
+C 103 ; WX 501 ; N g ; B 33 -217 453 546 ;
+C 104 ; WX 501 ; N h ; B 53 0 448 718 ;
+C 105 ; WX 228 ; N i ; B 57 0 171 725 ;
+C 106 ; WX 228 ; N j ; B 2 -214 171 725 ;
+C 107 ; WX 456 ; N k ; B 57 0 461 718 ;
+C 108 ; WX 228 ; N l ; B 57 0 171 718 ;
+C 109 ; WX 729 ; N m ; B 52 0 677 546 ;
+C 110 ; WX 501 ; N n ; B 53 0 448 546 ;
+C 111 ; WX 501 ; N o ; B 28 -14 474 546 ;
+C 112 ; WX 501 ; N p ; B 51 -207 474 546 ;
+C 113 ; WX 501 ; N q ; B 28 -207 453 546 ;
+C 114 ; WX 319 ; N r ; B 52 0 306 546 ;
+C 115 ; WX 456 ; N s ; B 25 -14 426 546 ;
+C 116 ; WX 273 ; N t ; B 8 -6 253 676 ;
+C 117 ; WX 501 ; N u ; B 54 -14 447 532 ;
+C 118 ; WX 456 ; N v ; B 11 0 445 532 ;
+C 119 ; WX 638 ; N w ; B 8 0 631 532 ;
+C 120 ; WX 456 ; N x ; B 12 0 444 532 ;
+C 121 ; WX 456 ; N y ; B 8 -214 442 532 ;
+C 122 ; WX 410 ; N z ; B 16 0 394 532 ;
+C 123 ; WX 319 ; N braceleft ; B 39 -196 299 722 ;
+C 124 ; WX 230 ; N bar ; B 69 -19 161 737 ;
+C 125 ; WX 319 ; N braceright ; B 20 -196 280 722 ;
+C 126 ; WX 479 ; N asciitilde ; B 50 173 429 336 ;
+C 161 ; WX 273 ; N exclamdown ; B 74 -186 200 532 ;
+C 162 ; WX 456 ; N cent ; B 28 -118 430 628 ;
+C 163 ; WX 456 ; N sterling ; B 23 -16 444 718 ;
+C 164 ; WX 137 ; N fraction ; B -139 -19 276 710 ;
+C 165 ; WX 456 ; N yen ; B -7 0 463 698 ;
+C 166 ; WX 456 ; N florin ; B -8 -210 423 737 ;
+C 167 ; WX 456 ; N section ; B 28 -184 428 727 ;
+C 168 ; WX 456 ; N currency ; B -2 76 458 636 ;
+C 169 ; WX 195 ; N quotesingle ; B 57 447 138 718 ;
+C 170 ; WX 410 ; N quotedblleft ; B 52 454 358 727 ;
+C 171 ; WX 456 ; N guillemotleft ; B 72 76 384 484 ;
+C 172 ; WX 273 ; N guilsinglleft ; B 68 76 205 484 ;
+C 173 ; WX 273 ; N guilsinglright ; B 68 76 205 484 ;
+C 174 ; WX 501 ; N fi ; B 8 0 444 727 ;
+C 175 ; WX 501 ; N fl ; B 8 0 444 727 ;
+C 177 ; WX 456 ; N endash ; B 0 226 456 333 ;
+C 178 ; WX 456 ; N dagger ; B 30 -171 426 718 ;
+C 179 ; WX 456 ; N daggerdbl ; B 30 -171 426 718 ;
+C 180 ; WX 228 ; N periodcentered ; B 48 172 180 334 ;
+C 182 ; WX 456 ; N paragraph ; B -7 -191 442 700 ;
+C 183 ; WX 287 ; N bullet ; B 8 194 279 524 ;
+C 184 ; WX 228 ; N quotesinglbase ; B 57 -146 171 127 ;
+C 185 ; WX 410 ; N quotedblbase ; B 52 -146 358 127 ;
+C 186 ; WX 410 ; N quotedblright ; B 52 445 358 718 ;
+C 187 ; WX 456 ; N guillemotright ; B 72 76 384 484 ;
+C 188 ; WX 820 ; N ellipsis ; B 75 0 745 147 ;
+C 189 ; WX 820 ; N perthousand ; B -2 -19 822 710 ;
+C 191 ; WX 501 ; N questiondown ; B 45 -195 452 532 ;
+C 193 ; WX 273 ; N grave ; B -19 604 184 750 ;
+C 194 ; WX 273 ; N acute ; B 89 604 292 750 ;
+C 195 ; WX 273 ; N circumflex ; B -8 604 281 750 ;
+C 196 ; WX 273 ; N tilde ; B -14 610 287 737 ;
+C 197 ; WX 273 ; N macron ; B -5 605 278 678 ;
+C 198 ; WX 273 ; N breve ; B -2 604 275 750 ;
+C 199 ; WX 273 ; N dotaccent ; B 85 614 189 729 ;
+C 200 ; WX 273 ; N dieresis ; B 5 614 268 729 ;
+C 202 ; WX 273 ; N ring ; B 48 568 225 776 ;
+C 203 ; WX 273 ; N cedilla ; B 5 -228 201 0 ;
+C 205 ; WX 273 ; N hungarumlaut ; B 7 604 399 750 ;
+C 206 ; WX 273 ; N ogonek ; B 58 -228 249 0 ;
+C 207 ; WX 273 ; N caron ; B -8 604 281 750 ;
+C 208 ; WX 820 ; N emdash ; B 0 226 820 333 ;
+C 225 ; WX 820 ; N AE ; B 4 0 782 718 ;
+C 227 ; WX 303 ; N ordfeminine ; B 18 276 285 737 ;
+C 232 ; WX 501 ; N Lslash ; B -16 0 478 718 ;
+C 233 ; WX 638 ; N Oslash ; B 27 -27 610 745 ;
+C 234 ; WX 820 ; N OE ; B 30 -19 788 737 ;
+C 235 ; WX 299 ; N ordmasculine ; B 5 276 295 737 ;
+C 241 ; WX 729 ; N ae ; B 24 -14 704 546 ;
+C 245 ; WX 228 ; N dotlessi ; B 57 0 171 532 ;
+C 248 ; WX 228 ; N lslash ; B -15 0 243 718 ;
+C 249 ; WX 501 ; N oslash ; B 18 -29 483 560 ;
+C 250 ; WX 774 ; N oe ; B 28 -14 748 546 ;
+C 251 ; WX 501 ; N germandbls ; B 57 -14 475 731 ;
+C -1 ; WX 592 ; N Udieresis ; B 59 -19 534 915 ;
+C -1 ; WX 592 ; N Uacute ; B 59 -19 534 936 ;
+C -1 ; WX 547 ; N Scedilla ; B 32 -228 516 737 ;
+C -1 ; WX 501 ; N Tcaron ; B 11 0 490 936 ;
+C -1 ; WX 547 ; N Scaron ; B 32 -19 516 936 ;
+C -1 ; WX 592 ; N Rcaron ; B 62 0 555 936 ;
+C -1 ; WX 592 ; N Racute ; B 62 0 555 936 ;
+C -1 ; WX 547 ; N Sacute ; B 32 -19 516 936 ;
+C -1 ; WX 638 ; N Otilde ; B 36 -19 602 923 ;
+C -1 ; WX 501 ; N ucircumflex ; B 54 -14 447 750 ;
+C -1 ; WX 638 ; N Ohungarumlaut ; B 36 -19 602 936 ;
+C -1 ; WX 592 ; N Uhungarumlaut ; B 59 -19 559 936 ;
+C -1 ; WX 547 ; N Yacute ; B 12 0 535 936 ;
+C -1 ; WX 592 ; N Eth ; B -4 0 562 718 ;
+C -1 ; WX 592 ; N Dcroat ; B -4 0 562 718 ;
+C -1 ; WX 501 ; N Zacute ; B 20 0 481 936 ;
+C -1 ; WX 592 ; N Uring ; B 59 -19 534 962 ;
+C -1 ; WX 501 ; N gbreve ; B 33 -217 453 750 ;
+C -1 ; WX 456 ; N eogonek ; B 19 -228 433 546 ;
+C -1 ; WX 456 ; N edotaccent ; B 19 -14 433 729 ;
+C -1 ; WX 456 ; N ecaron ; B 19 -14 433 750 ;
+C -1 ; WX 592 ; N Ugrave ; B 59 -19 534 936 ;
+C -1 ; WX 547 ; N Thorn ; B 62 0 514 718 ;
+C -1 ; WX 456 ; N eacute ; B 19 -14 433 750 ;
+C -1 ; WX 456 ; N edieresis ; B 19 -14 433 729 ;
+C -1 ; WX 561 ; N dcaron ; B 28 -14 581 718 ;
+C -1 ; WX 456 ; N ccedilla ; B 28 -228 430 546 ;
+C -1 ; WX 456 ; N ccaron ; B 28 -14 430 750 ;
+C -1 ; WX 456 ; N cacute ; B 28 -14 430 750 ;
+C -1 ; WX 456 ; N aogonek ; B 24 -228 465 546 ;
+C -1 ; WX 456 ; N aring ; B 24 -14 432 803 ;
+C -1 ; WX 456 ; N atilde ; B 24 -14 432 737 ;
+C -1 ; WX 456 ; N abreve ; B 24 -14 432 750 ;
+C -1 ; WX 456 ; N egrave ; B 19 -14 433 750 ;
+C -1 ; WX 456 ; N agrave ; B 24 -14 432 750 ;
+C -1 ; WX 456 ; N aacute ; B 24 -14 432 750 ;
+C -1 ; WX 456 ; N adieresis ; B 24 -14 432 729 ;
+C -1 ; WX 592 ; N Uogonek ; B 59 -228 534 718 ;
+C -1 ; WX 501 ; N ugrave ; B 54 -14 447 750 ;
+C -1 ; WX 501 ; N uacute ; B 54 -14 447 750 ;
+C -1 ; WX 501 ; N udieresis ; B 54 -14 447 729 ;
+C -1 ; WX 338 ; N tcaron ; B 8 -6 358 718 ;
+C -1 ; WX 456 ; N scommaaccent ; B 25 -307 426 546 ;
+C -1 ; WX 501 ; N Zcaron ; B 20 0 481 936 ;
+C -1 ; WX 456 ; N ecircumflex ; B 19 -14 433 750 ;
+C -1 ; WX 592 ; N Ucircumflex ; B 59 -19 534 936 ;
+C -1 ; WX 456 ; N acircumflex ; B 24 -14 432 750 ;
+C -1 ; WX 501 ; N Zdotaccent ; B 20 0 481 915 ;
+C -1 ; WX 456 ; N scaron ; B 25 -14 426 750 ;
+C -1 ; WX 592 ; N Amacron ; B 16 0 576 864 ;
+C -1 ; WX 456 ; N sacute ; B 25 -14 426 750 ;
+C -1 ; WX 501 ; N Tcommaaccent ; B 11 -307 490 718 ;
+C -1 ; WX 547 ; N Ydieresis ; B 12 0 535 915 ;
+C -1 ; WX 501 ; N thorn ; B 51 -207 474 718 ;
+C -1 ; WX 547 ; N Emacron ; B 62 0 509 864 ;
+C -1 ; WX 638 ; N Ograve ; B 36 -19 602 936 ;
+C -1 ; WX 638 ; N Oacute ; B 36 -19 602 936 ;
+C -1 ; WX 638 ; N Odieresis ; B 36 -19 602 915 ;
+C -1 ; WX 592 ; N Ntilde ; B 57 0 536 923 ;
+C -1 ; WX 592 ; N Ncaron ; B 57 0 536 936 ;
+C -1 ; WX 592 ; N Nacute ; B 57 0 536 936 ;
+C -1 ; WX 501 ; N Lcaron ; B 62 0 478 718 ;
+C -1 ; WX 501 ; N Lacute ; B 62 0 478 936 ;
+C -1 ; WX 228 ; N Idotaccent ; B 52 0 175 915 ;
+C -1 ; WX 319 ; N racute ; B 52 0 315 750 ;
+C -1 ; WX 228 ; N Icircumflex ; B -30 0 259 936 ;
+C -1 ; WX 501 ; N ohungarumlaut ; B 28 -14 513 750 ;
+C -1 ; WX 501 ; N otilde ; B 28 -14 474 737 ;
+C -1 ; WX 440 ; N Euro ; B 0 -12 433 678 ;
+C -1 ; WX 501 ; N ocircumflex ; B 28 -14 474 750 ;
+C -1 ; WX 273 ; N onesuperior ; B 21 283 194 710 ;
+C -1 ; WX 273 ; N twosuperior ; B 7 283 266 722 ;
+C -1 ; WX 273 ; N threesuperior ; B 7 271 267 722 ;
+C -1 ; WX 228 ; N Igrave ; B -41 0 175 936 ;
+C -1 ; WX 228 ; N Iacute ; B 52 0 270 936 ;
+C -1 ; WX 228 ; N Imacron ; B -28 0 255 864 ;
+C -1 ; WX 228 ; N Iogonek ; B 17 -228 208 718 ;
+C -1 ; WX 228 ; N Idieresis ; B -17 0 246 915 ;
+C -1 ; WX 638 ; N Gbreve ; B 36 -19 585 936 ;
+C -1 ; WX 592 ; N Umacron ; B 59 -19 534 864 ;
+C -1 ; WX 592 ; N Kcommaaccent ; B 71 -307 592 718 ;
+C -1 ; WX 501 ; N ograve ; B 28 -14 474 750 ;
+C -1 ; WX 547 ; N Scommaaccent ; B 32 -307 516 737 ;
+C -1 ; WX 547 ; N Eogonek ; B 62 -228 542 718 ;
+C -1 ; WX 501 ; N oacute ; B 28 -14 474 750 ;
+C -1 ; WX 547 ; N Edotaccent ; B 62 0 509 915 ;
+C -1 ; WX 228 ; N iogonek ; B 13 -228 204 725 ;
+C -1 ; WX 501 ; N gcommaaccent ; B 33 -217 453 853 ;
+C -1 ; WX 501 ; N odieresis ; B 28 -14 474 729 ;
+C -1 ; WX 501 ; N ntilde ; B 53 0 448 737 ;
+C -1 ; WX 501 ; N ncaron ; B 53 0 448 750 ;
+C -1 ; WX 547 ; N Ecaron ; B 62 0 509 936 ;
+C -1 ; WX 547 ; N Ecircumflex ; B 62 0 509 936 ;
+C -1 ; WX 456 ; N scedilla ; B 25 -228 426 546 ;
+C -1 ; WX 319 ; N rcaron ; B 30 0 319 750 ;
+C -1 ; WX 547 ; N Egrave ; B 62 0 509 936 ;
+C -1 ; WX 547 ; N Eacute ; B 62 0 509 936 ;
+C -1 ; WX 638 ; N Gcommaaccent ; B 36 -307 585 737 ;
+C -1 ; WX 592 ; N Rcommaaccent ; B 62 -307 555 718 ;
+C -1 ; WX 547 ; N Edieresis ; B 62 0 509 915 ;
+C -1 ; WX 501 ; N nacute ; B 53 0 448 750 ;
+C -1 ; WX 501 ; N uogonek ; B 54 -228 480 532 ;
+C -1 ; WX 501 ; N umacron ; B 54 -14 447 678 ;
+C -1 ; WX 592 ; N Dcaron ; B 62 0 562 936 ;
+C -1 ; WX 280 ; N lcaron ; B 57 0 300 718 ;
+C -1 ; WX 592 ; N Ccaron ; B 36 -19 561 936 ;
+C -1 ; WX 592 ; N Cacute ; B 36 -19 561 936 ;
+C -1 ; WX 592 ; N Ccedilla ; B 36 -228 561 737 ;
+C -1 ; WX 328 ; N degree ; B 47 426 281 712 ;
+C -1 ; WX 592 ; N Aogonek ; B 16 -228 609 718 ;
+C -1 ; WX 479 ; N minus ; B 33 197 446 309 ;
+C -1 ; WX 479 ; N multiply ; B 33 1 447 505 ;
+C -1 ; WX 479 ; N divide ; B 33 -42 446 548 ;
+C -1 ; WX 592 ; N Aring ; B 16 0 576 975 ;
+C -1 ; WX 820 ; N trademark ; B 36 306 784 718 ;
+C -1 ; WX 319 ; N rcommaaccent ; B 52 -307 306 546 ;
+C -1 ; WX 228 ; N lacute ; B 57 0 270 936 ;
+C -1 ; WX 501 ; N omacron ; B 28 -14 474 678 ;
+C -1 ; WX 592 ; N Atilde ; B 16 0 576 923 ;
+C -1 ; WX 228 ; N icircumflex ; B -30 0 259 750 ;
+C -1 ; WX 228 ; N igrave ; B -41 0 171 750 ;
+C -1 ; WX 501 ; N ncommaaccent ; B 53 -307 448 546 ;
+C -1 ; WX 228 ; N lcommaaccent ; B 57 -307 171 718 ;
+C -1 ; WX 479 ; N plusminus ; B 33 0 446 578 ;
+C -1 ; WX 684 ; N onehalf ; B 21 -19 651 710 ;
+C -1 ; WX 684 ; N onequarter ; B 21 -19 628 710 ;
+C -1 ; WX 684 ; N threequarters ; B 13 -19 655 722 ;
+C -1 ; WX 228 ; N iacute ; B 57 0 270 750 ;
+C -1 ; WX 592 ; N Abreve ; B 16 0 576 936 ;
+C -1 ; WX 456 ; N kcommaaccent ; B 57 -307 461 718 ;
+C -1 ; WX 638 ; N Omacron ; B 36 -19 602 864 ;
+C -1 ; WX 228 ; N imacron ; B -28 0 255 678 ;
+C -1 ; WX 456 ; N emacron ; B 19 -14 433 678 ;
+C -1 ; WX 456 ; N amacron ; B 24 -14 432 678 ;
+C -1 ; WX 273 ; N tcommaaccent ; B 8 -307 253 676 ;
+C -1 ; WX 456 ; N ydieresis ; B 8 -214 442 729 ;
+C -1 ; WX 410 ; N zdotaccent ; B 16 0 394 729 ;
+C -1 ; WX 410 ; N zcaron ; B 16 0 394 750 ;
+C -1 ; WX 410 ; N zacute ; B 16 0 394 750 ;
+C -1 ; WX 456 ; N yacute ; B 8 -214 442 750 ;
+C -1 ; WX 501 ; N uhungarumlaut ; B 54 -14 513 750 ;
+C -1 ; WX 501 ; N eth ; B 28 -14 474 737 ;
+C -1 ; WX 501 ; N uring ; B 54 -14 447 776 ;
+C -1 ; WX 638 ; N Ocircumflex ; B 36 -19 602 936 ;
+C -1 ; WX 273 ; N commaaccent ; B 83 -307 191 -60 ;
+C -1 ; WX 604 ; N copyright ; B -9 -19 614 737 ;
+C -1 ; WX 604 ; N registered ; B -9 -19 613 737 ;
+C -1 ; WX 592 ; N Acircumflex ; B 16 0 576 936 ;
+C -1 ; WX 228 ; N idieresis ; B -17 0 246 729 ;
+C -1 ; WX 405 ; N lozenge ; B 15 0 382 740 ;
+C -1 ; WX 502 ; N Delta ; B 5 0 499 688 ;
+C -1 ; WX 479 ; N notequal ; B 33 -16 446 522 ;
+C -1 ; WX 450 ; N radical ; B -27 -35 448 918 ;
+C -1 ; WX 592 ; N Agrave ; B 16 0 576 936 ;
+C -1 ; WX 592 ; N Aacute ; B 16 0 576 936 ;
+C -1 ; WX 479 ; N lessequal ; B 31 0 448 672 ;
+C -1 ; WX 479 ; N greaterequal ; B 31 0 448 672 ;
+C -1 ; WX 479 ; N logicalnot ; B 33 108 446 419 ;
+C -1 ; WX 585 ; N summation ; B 12 -123 570 752 ;
+C -1 ; WX 405 ; N partialdiff ; B 12 -21 388 743 ;
+C -1 ; WX 592 ; N Ncommaaccent ; B 57 -307 536 718 ;
+C -1 ; WX 501 ; N dcroat ; B 28 -14 501 718 ;
+C -1 ; WX 230 ; N brokenbar ; B 69 -19 161 737 ;
+C -1 ; WX 501 ; N Lcommaaccent ; B 62 -307 478 718 ;
+C -1 ; WX 592 ; N Adieresis ; B 16 0 576 915 ;
+C -1 ; WX 501 ; N mu ; B 54 -207 447 532 ;
+C -1 ; WX 228 ; N .notdef ; B 21 0 21 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -26
+KPX A Ccedilla -26
+KPX A G -27
+KPX A O -27
+KPX A Odieresis -27
+KPX A Q -27
+KPX A T -62
+KPX A U -24
+KPX A Uacute -24
+KPX A Ucircumflex -24
+KPX A Udieresis -24
+KPX A Ugrave -24
+KPX A V -50
+KPX A W -41
+KPX A Y -69
+KPX A a -1
+KPX A b -1
+KPX A c -11
+KPX A ccedilla -11
+KPX A comma 17
+KPX A d -11
+KPX A e -7
+KPX A g -16
+KPX A guillemotleft -35
+KPX A guilsinglleft -33
+KPX A hyphen 7
+KPX A o -14
+KPX A period 17
+KPX A q -12
+KPX A quotedblright -47
+KPX A quoteright -50
+KPX A t -12
+KPX A u -12
+KPX A v -29
+KPX A w -19
+KPX A y -27
+KPX Aacute C -26
+KPX Aacute G -27
+KPX Aacute O -27
+KPX Aacute Q -27
+KPX Aacute T -62
+KPX Aacute U -24
+KPX Aacute V -50
+KPX Aacute W -41
+KPX Aacute Y -69
+KPX Aacute a -1
+KPX Aacute b -1
+KPX Aacute c -11
+KPX Aacute comma 17
+KPX Aacute d -11
+KPX Aacute e -7
+KPX Aacute g -16
+KPX Aacute guillemotleft -35
+KPX Aacute guilsinglleft -33
+KPX Aacute hyphen 7
+KPX Aacute o -14
+KPX Aacute period 17
+KPX Aacute q -12
+KPX Aacute quoteright -50
+KPX Aacute t -12
+KPX Aacute u -12
+KPX Aacute v -29
+KPX Aacute w -19
+KPX Aacute y -27
+KPX Acircumflex C -26
+KPX Acircumflex G -27
+KPX Acircumflex O -27
+KPX Acircumflex Q -27
+KPX Acircumflex T -62
+KPX Acircumflex U -24
+KPX Acircumflex V -50
+KPX Acircumflex W -41
+KPX Acircumflex Y -69
+KPX Acircumflex comma 17
+KPX Acircumflex period 17
+KPX Adieresis C -26
+KPX Adieresis G -27
+KPX Adieresis O -27
+KPX Adieresis Q -27
+KPX Adieresis T -62
+KPX Adieresis U -24
+KPX Adieresis V -50
+KPX Adieresis W -41
+KPX Adieresis Y -69
+KPX Adieresis a -1
+KPX Adieresis b -1
+KPX Adieresis c -11
+KPX Adieresis comma 17
+KPX Adieresis d -11
+KPX Adieresis g -16
+KPX Adieresis guillemotleft -35
+KPX Adieresis guilsinglleft -33
+KPX Adieresis hyphen 7
+KPX Adieresis o -14
+KPX Adieresis period 17
+KPX Adieresis q -12
+KPX Adieresis quotedblright -47
+KPX Adieresis quoteright -50
+KPX Adieresis t -12
+KPX Adieresis u -12
+KPX Adieresis v -29
+KPX Adieresis w -19
+KPX Adieresis y -27
+KPX Agrave C -26
+KPX Agrave G -27
+KPX Agrave O -27
+KPX Agrave Q -27
+KPX Agrave T -62
+KPX Agrave U -24
+KPX Agrave V -50
+KPX Agrave W -41
+KPX Agrave Y -69
+KPX Agrave comma 17
+KPX Agrave period 17
+KPX Aring C -26
+KPX Aring G -27
+KPX Aring O -27
+KPX Aring Q -27
+KPX Aring T -62
+KPX Aring U -24
+KPX Aring V -50
+KPX Aring W -41
+KPX Aring Y -69
+KPX Aring a -1
+KPX Aring b -1
+KPX Aring c -11
+KPX Aring comma 17
+KPX Aring d -11
+KPX Aring e -7
+KPX Aring g -16
+KPX Aring guillemotleft -35
+KPX Aring guilsinglleft -33
+KPX Aring hyphen 7
+KPX Aring o -14
+KPX Aring period 17
+KPX Aring q -12
+KPX Aring quotedblright -47
+KPX Aring quoteright -50
+KPX Aring t -12
+KPX Aring u -12
+KPX Aring v -29
+KPX Aring w -19
+KPX Aring y -27
+KPX Atilde C -26
+KPX Atilde G -27
+KPX Atilde O -27
+KPX Atilde Q -27
+KPX Atilde T -62
+KPX Atilde U -24
+KPX Atilde V -50
+KPX Atilde W -41
+KPX Atilde Y -69
+KPX Atilde comma 17
+KPX Atilde period 17
+KPX B A -17
+KPX B AE -11
+KPX B Aacute -17
+KPX B Acircumflex -17
+KPX B Adieresis -17
+KPX B Aring -17
+KPX B Atilde -17
+KPX B O -4
+KPX B OE 1
+KPX B Oacute -4
+KPX B Ocircumflex -4
+KPX B Odieresis -4
+KPX B Ograve -4
+KPX B Oslash -1
+KPX B V -22
+KPX B W -17
+KPX B Y -29
+KPX C A -19
+KPX C AE -14
+KPX C Aacute -19
+KPX C Adieresis -19
+KPX C Aring -19
+KPX C H 1
+KPX C K -5
+KPX C O -2
+KPX C Oacute -2
+KPX C Odieresis -2
+KPX Ccedilla A -21
+KPX D A -24
+KPX D Aacute -24
+KPX D Acircumflex -24
+KPX D Adieresis -24
+KPX D Agrave -24
+KPX D Aring -24
+KPX D Atilde -24
+KPX D J 8
+KPX D T -3
+KPX D V -20
+KPX D W -13
+KPX D X -22
+KPX D Y -31
+KPX F A -43
+KPX F Aacute -43
+KPX F Acircumflex -43
+KPX F Adieresis -43
+KPX F Agrave -43
+KPX F Aring -43
+KPX F Atilde -43
+KPX F J -14
+KPX F O -10
+KPX F Odieresis -10
+KPX F a -15
+KPX F aacute -15
+KPX F adieresis -15
+KPX F ae -16
+KPX F aring -15
+KPX F comma -71
+KPX F e -6
+KPX F eacute -6
+KPX F hyphen 8
+KPX F i -6
+KPX F j -6
+KPX F o -11
+KPX F oacute -11
+KPX F odieresis -11
+KPX F oe -11
+KPX F oslash -11
+KPX F period -71
+KPX F r -22
+KPX F u -23
+KPX G A 1
+KPX G AE 7
+KPX G Aacute 1
+KPX G Acircumflex 1
+KPX G Adieresis 1
+KPX G Agrave 1
+KPX G Aring 1
+KPX G Atilde 1
+KPX G T -6
+KPX G V -24
+KPX G W -15
+KPX G Y -35
+KPX J A -21
+KPX J AE -15
+KPX J Adieresis -21
+KPX J Aring -21
+KPX K C -35
+KPX K G -36
+KPX K O -36
+KPX K OE -30
+KPX K Oacute -36
+KPX K Odieresis -36
+KPX K S -18
+KPX K T 23
+KPX K a 0
+KPX K adieresis 0
+KPX K ae -1
+KPX K aring 0
+KPX K e -17
+KPX K hyphen -26
+KPX K o -25
+KPX K oacute -25
+KPX K odieresis -25
+KPX K u -19
+KPX K udieresis -19
+KPX K y -48
+KPX L A 16
+KPX L AE 22
+KPX L Aacute 16
+KPX L Adieresis 16
+KPX L Aring 16
+KPX L C -13
+KPX L Ccedilla -16
+KPX L G -15
+KPX L O -15
+KPX L Oacute -15
+KPX L Ocircumflex -15
+KPX L Odieresis -15
+KPX L Ograve -15
+KPX L Otilde -15
+KPX L S 3
+KPX L T -70
+KPX L U -12
+KPX L Udieresis -12
+KPX L V -64
+KPX L W -50
+KPX L Y -83
+KPX L hyphen -8
+KPX L quotedblright -115
+KPX L quoteright -118
+KPX L u -7
+KPX L udieresis -7
+KPX L y -41
+KPX N A 0
+KPX N AE 6
+KPX N Aacute 0
+KPX N Adieresis 0
+KPX N Aring 0
+KPX N C 7
+KPX N Ccedilla 7
+KPX N G 6
+KPX N O 6
+KPX N Oacute 6
+KPX N Odieresis 6
+KPX N a 7
+KPX N aacute 7
+KPX N adieresis 7
+KPX N ae 6
+KPX N aring 7
+KPX N comma 12
+KPX N e 12
+KPX N eacute 12
+KPX N o 6
+KPX N oacute 6
+KPX N odieresis 6
+KPX N oslash 7
+KPX N period 12
+KPX N u 5
+KPX N udieresis 5
+KPX O A -28
+KPX O AE -22
+KPX O Aacute -28
+KPX O Adieresis -28
+KPX O Aring -28
+KPX O T -9
+KPX O V -26
+KPX O W -17
+KPX O X -26
+KPX O Y -38
+KPX Oacute A -28
+KPX Oacute T -9
+KPX Oacute V -26
+KPX Oacute W -17
+KPX Oacute Y -38
+KPX Ocircumflex T -9
+KPX Ocircumflex V -26
+KPX Ocircumflex Y -38
+KPX Odieresis A -28
+KPX Odieresis T -9
+KPX Odieresis V -26
+KPX Odieresis W -17
+KPX Odieresis X -26
+KPX Odieresis Y -38
+KPX Ograve T -9
+KPX Ograve V -26
+KPX Ograve Y -38
+KPX Oslash A -24
+KPX Otilde T -9
+KPX Otilde V -26
+KPX Otilde Y -38
+KPX P A -51
+KPX P AE -47
+KPX P Aacute -51
+KPX P Adieresis -51
+KPX P Aring -51
+KPX P J -36
+KPX P a -12
+KPX P aacute -12
+KPX P adieresis -12
+KPX P ae -13
+KPX P aring -12
+KPX P comma -92
+KPX P e -10
+KPX P eacute -10
+KPX P hyphen -3
+KPX P o -16
+KPX P oacute -16
+KPX P odieresis -16
+KPX P oe -16
+KPX P oslash -16
+KPX P period -92
+KPX R C -2
+KPX R Ccedilla -2
+KPX R G -3
+KPX R O -3
+KPX R OE 1
+KPX R Oacute -3
+KPX R Odieresis -3
+KPX R T 3
+KPX R U -1
+KPX R Udieresis -1
+KPX R V -16
+KPX R W -12
+KPX R Y -24
+KPX R a 0
+KPX R aacute 0
+KPX R adieresis 0
+KPX R ae -1
+KPX R aring 0
+KPX R e 2
+KPX R eacute 2
+KPX R hyphen 14
+KPX R o -4
+KPX R oacute -4
+KPX R odieresis -4
+KPX R oe -4
+KPX R u -1
+KPX R uacute -2
+KPX R udieresis -2
+KPX R y 3
+KPX S A -10
+KPX S AE -5
+KPX S Aacute -10
+KPX S Adieresis -10
+KPX S Aring -10
+KPX S T 0
+KPX S V -20
+KPX S W -15
+KPX S Y -27
+KPX S t 2
+KPX T A -63
+KPX T AE -59
+KPX T Aacute -63
+KPX T Acircumflex -63
+KPX T Adieresis -63
+KPX T Agrave -63
+KPX T Aring -63
+KPX T Atilde -63
+KPX T C -8
+KPX T G -10
+KPX T J -67
+KPX T O -9
+KPX T OE -3
+KPX T Oacute -9
+KPX T Ocircumflex -9
+KPX T Odieresis -9
+KPX T Ograve -9
+KPX T Oslash -9
+KPX T Otilde -9
+KPX T S 6
+KPX T V 22
+KPX T W 23
+KPX T Y 23
+KPX T a -62
+KPX T ae -63
+KPX T c -62
+KPX T colon -73
+KPX T comma -55
+KPX T e -58
+KPX T g -65
+KPX T guillemotleft -84
+KPX T guilsinglleft -82
+KPX T hyphen -39
+KPX T i -2
+KPX T j -2
+KPX T o -65
+KPX T oslash -61
+KPX T period -55
+KPX T r -59
+KPX T s -63
+KPX T semicolon -73
+KPX T u -63
+KPX T v -68
+KPX T w -67
+KPX T y -67
+KPX U A -24
+KPX U AE -20
+KPX U Aacute -24
+KPX U Acircumflex -24
+KPX U Adieresis -24
+KPX U Aring -24
+KPX U Atilde -24
+KPX U comma -6
+KPX U m 4
+KPX U n 3
+KPX U p 4
+KPX U period -3
+KPX U r 4
+KPX Uacute A -24
+KPX Uacute comma -6
+KPX Uacute m 4
+KPX Uacute n 3
+KPX Uacute p 4
+KPX Uacute period -3
+KPX Uacute r 4
+KPX Ucircumflex A -24
+KPX Udieresis A -24
+KPX Udieresis b 4
+KPX Udieresis comma -6
+KPX Udieresis m 4
+KPX Udieresis n 3
+KPX Udieresis p 4
+KPX Udieresis period -3
+KPX Udieresis r 4
+KPX Ugrave A -24
+KPX V A -51
+KPX V AE -46
+KPX V Aacute -51
+KPX V Acircumflex -51
+KPX V Adieresis -51
+KPX V Agrave -51
+KPX V Aring -51
+KPX V Atilde -51
+KPX V C -25
+KPX V G -26
+KPX V O -26
+KPX V Oacute -26
+KPX V Ocircumflex -26
+KPX V Odieresis -26
+KPX V Ograve -26
+KPX V Oslash -22
+KPX V Otilde -26
+KPX V S -13
+KPX V T 22
+KPX V a -38
+KPX V ae -39
+KPX V colon -38
+KPX V comma -52
+KPX V e -34
+KPX V g -40
+KPX V guillemotleft -59
+KPX V guilsinglleft -57
+KPX V hyphen -14
+KPX V i -4
+KPX V o -40
+KPX V oslash -37
+KPX V period -52
+KPX V r -27
+KPX V semicolon -38
+KPX V u -31
+KPX V y -7
+KPX W A -40
+KPX W AE -36
+KPX W Aacute -40
+KPX W Acircumflex -40
+KPX W Adieresis -40
+KPX W Agrave -40
+KPX W Aring -40
+KPX W Atilde -40
+KPX W C -15
+KPX W G -16
+KPX W O -16
+KPX W Oacute -16
+KPX W Ocircumflex -16
+KPX W Odieresis -16
+KPX W Ograve -16
+KPX W Oslash -12
+KPX W Otilde -16
+KPX W S -8
+KPX W T 24
+KPX W a -26
+KPX W ae -27
+KPX W colon -31
+KPX W comma -36
+KPX W e -21
+KPX W g -27
+KPX W guillemotleft -47
+KPX W guilsinglleft -45
+KPX W hyphen -2
+KPX W i -2
+KPX W o -28
+KPX W oslash -25
+KPX W period -36
+KPX W r -21
+KPX W semicolon -31
+KPX W u -24
+KPX W y -1
+KPX X C -26
+KPX X O -27
+KPX X Odieresis -27
+KPX X Q -27
+KPX X a -5
+KPX X e -20
+KPX X hyphen -21
+KPX X o -27
+KPX X u -24
+KPX X y -35
+KPX Y A -67
+KPX Y AE -62
+KPX Y Aacute -67
+KPX Y Acircumflex -67
+KPX Y Adieresis -67
+KPX Y Agrave -67
+KPX Y Aring -67
+KPX Y Atilde -67
+KPX Y C -36
+KPX Y G -38
+KPX Y O -37
+KPX Y Oacute -37
+KPX Y Ocircumflex -37
+KPX Y Odieresis -37
+KPX Y Ograve -37
+KPX Y Oslash -37
+KPX Y Otilde -37
+KPX Y S -19
+KPX Y T 24
+KPX Y a -58
+KPX Y ae -59
+KPX Y colon -52
+KPX Y comma -65
+KPX Y e -54
+KPX Y g -61
+KPX Y guillemotleft -83
+KPX Y guilsinglleft -81
+KPX Y hyphen -42
+KPX Y i -2
+KPX Y o -61
+KPX Y oslash -57
+KPX Y p -39
+KPX Y period -65
+KPX Y semicolon -52
+KPX Y u -45
+KPX Y v -22
+KPX Z v -9
+KPX Z y -8
+KPX a j 0
+KPX a quoteright -7
+KPX a v -15
+KPX a w -6
+KPX a y -13
+KPX aacute v -15
+KPX aacute w -6
+KPX aacute y -13
+KPX adieresis v -15
+KPX adieresis w -6
+KPX adieresis y -13
+KPX ae v -16
+KPX ae w -6
+KPX ae y -15
+KPX agrave v -15
+KPX agrave w -6
+KPX agrave y -13
+KPX aring v -15
+KPX aring w -6
+KPX aring y -13
+KPX b v -15
+KPX b w -5
+KPX b y -14
+KPX c h 0
+KPX c k -2
+KPX comma one -59
+KPX comma quotedblright -18
+KPX comma quoteright -20
+KPX e quoteright -8
+KPX e t -2
+KPX e v -15
+KPX e w -6
+KPX e x -16
+KPX e y -14
+KPX eacute v -15
+KPX eacute w -6
+KPX eacute y -14
+KPX ecircumflex v -15
+KPX ecircumflex w -6
+KPX ecircumflex y -14
+KPX eight four 12
+KPX eight one -15
+KPX eight seven 0
+KPX f a -5
+KPX f aacute -5
+KPX f adieresis -5
+KPX f ae -6
+KPX f aring -5
+KPX f e -5
+KPX f eacute -5
+KPX f f 17
+KPX f i -3
+KPX f j -7
+KPX f l -3
+KPX f o -12
+KPX f oacute -12
+KPX f odieresis -12
+KPX f oe -12
+KPX f oslash -9
+KPX f quoteright 11
+KPX f s -5
+KPX f t 17
+KPX five four 8
+KPX five one -20
+KPX five seven -2
+KPX four four 12
+KPX four one -37
+KPX four seven -19
+KPX g a 5
+KPX g adieresis 5
+KPX g ae 5
+KPX g aring 5
+KPX g e 10
+KPX g eacute 10
+KPX g l 3
+KPX g oacute 4
+KPX g odieresis 4
+KPX g r 6
+KPX guillemotright A -36
+KPX guillemotright AE -30
+KPX guillemotright Aacute -36
+KPX guillemotright Adieresis -36
+KPX guillemotright Aring -36
+KPX guillemotright T -84
+KPX guillemotright V -59
+KPX guillemotright W -48
+KPX guillemotright Y -86
+KPX guilsinglright A -33
+KPX guilsinglright AE -28
+KPX guilsinglright Aacute -33
+KPX guilsinglright Adieresis -33
+KPX guilsinglright Aring -33
+KPX guilsinglright T -82
+KPX guilsinglright V -56
+KPX guilsinglright W -45
+KPX guilsinglright Y -84
+KPX h quoteright -7
+KPX h y -14
+KPX hyphen A 7
+KPX hyphen AE 12
+KPX hyphen Aacute 7
+KPX hyphen Adieresis 7
+KPX hyphen Aring 7
+KPX hyphen T -39
+KPX hyphen V -14
+KPX hyphen W -3
+KPX hyphen Y -45
+KPX i T -2
+KPX i j -1
+KPX k a 0
+KPX k aacute 0
+KPX k adieresis 0
+KPX k ae 0
+KPX k aring 0
+KPX k comma 15
+KPX k e -6
+KPX k eacute -6
+KPX k g -14
+KPX k hyphen -10
+KPX k o -13
+KPX k oacute -13
+KPX k odieresis -13
+KPX k period 15
+KPX k s -8
+KPX k u -4
+KPX k udieresis 0
+KPX l v -7
+KPX l y -5
+KPX m p 3
+KPX m v -16
+KPX m w -7
+KPX m y -14
+KPX n T -63
+KPX n p 3
+KPX n quoteright -7
+KPX n v -16
+KPX n w -7
+KPX n y -14
+KPX nine four 10
+KPX nine one -11
+KPX nine seven -4
+KPX o T -64
+KPX o quoteright -13
+KPX o t -5
+KPX o v -18
+KPX o w -8
+KPX o x -20
+KPX o y -17
+KPX oacute v -18
+KPX oacute w -8
+KPX oacute y -17
+KPX ocircumflex t -5
+KPX odieresis t -5
+KPX odieresis v -18
+KPX odieresis w -8
+KPX odieresis x -20
+KPX odieresis y -17
+KPX ograve v -18
+KPX ograve w -8
+KPX ograve y -17
+KPX one comma -32
+KPX one eight -32
+KPX one five -33
+KPX one four -46
+KPX one nine -32
+KPX one one -65
+KPX one period -32
+KPX one seven -47
+KPX one six -29
+KPX one three -36
+KPX one two -37
+KPX one zero -28
+KPX p t -1
+KPX p y -14
+KPX period one -59
+KPX period quotedblright -18
+KPX period quoteright -20
+KPX q c 6
+KPX q u 4
+KPX quotedblbase A 16
+KPX quotedblbase AE 22
+KPX quotedblbase T -56
+KPX quotedblbase V -53
+KPX quotedblbase W -38
+KPX quotedblbase Y -69
+KPX quotedblleft A -49
+KPX quotedblleft AE -45
+KPX quotedblleft Aacute -49
+KPX quotedblleft Adieresis -49
+KPX quotedblleft Aring -49
+KPX quotedblleft T 3
+KPX quotedblleft V 10
+KPX quotedblleft W 15
+KPX quotedblleft Y 2
+KPX quotedblright A -52
+KPX quotedblright AE -48
+KPX quotedblright Aacute -52
+KPX quotedblright Adieresis -52
+KPX quotedblright Aring -52
+KPX quotedblright T 4
+KPX quotedblright V 7
+KPX quotedblright W 12
+KPX quotedblright Y 0
+KPX quoteleft A -51
+KPX quoteleft AE -47
+KPX quoteleft Aacute -51
+KPX quoteleft Adieresis -51
+KPX quoteleft Aring -51
+KPX quoteleft T 1
+KPX quoteleft V 7
+KPX quoteleft W 12
+KPX quoteleft Y 0
+KPX quoteright A -55
+KPX quoteright AE -51
+KPX quoteright Aacute -55
+KPX quoteright Adieresis -55
+KPX quoteright Aring -55
+KPX quoteright comma -31
+KPX quoteright d -18
+KPX quoteright o -24
+KPX quoteright period -31
+KPX quoteright r -7
+KPX quoteright s -16
+KPX quoteright t 4
+KPX quoteright v 0
+KPX quoteright w 5
+KPX quoteright y 2
+KPX r a -1
+KPX r aacute -1
+KPX r acircumflex -1
+KPX r adieresis -1
+KPX r ae -2
+KPX r agrave -1
+KPX r aring -1
+KPX r c -4
+KPX r ccedilla -1
+KPX r colon -12
+KPX r comma -42
+KPX r d -3
+KPX r e 0
+KPX r eacute 0
+KPX r ecircumflex 0
+KPX r egrave 0
+KPX r f 17
+KPX r g -2
+KPX r h -5
+KPX r hyphen -24
+KPX r i -7
+KPX r j -7
+KPX r k -7
+KPX r l -7
+KPX r m -5
+KPX r n -5
+KPX r o -6
+KPX r oacute -6
+KPX r ocircumflex -6
+KPX r odieresis -6
+KPX r oe -6
+KPX r ograve -6
+KPX r oslash -6
+KPX r p -4
+KPX r period -42
+KPX r q -3
+KPX r quoteright 13
+KPX r r -5
+KPX r s -1
+KPX r semicolon -12
+KPX r t 17
+KPX r u -6
+KPX r v 15
+KPX r w 16
+KPX r x 10
+KPX r y 16
+KPX r z 5
+KPX s quoteright -11
+KPX s t -5
+KPX seven colon -40
+KPX seven comma -71
+KPX seven eight -2
+KPX seven five -9
+KPX seven four -53
+KPX seven one -4
+KPX seven period -71
+KPX seven seven 14
+KPX seven six -6
+KPX seven three 1
+KPX seven two 1
+KPX six four 10
+KPX six one -13
+KPX six seven 1
+KPX t S 1
+KPX t a 4
+KPX t aacute 4
+KPX t adieresis 4
+KPX t ae 4
+KPX t aring 4
+KPX t colon -5
+KPX t e -2
+KPX t eacute -2
+KPX t h 5
+KPX t o -8
+KPX t oacute -8
+KPX t odieresis -8
+KPX t quoteright 7
+KPX t semicolon -4
+KPX three four 8
+KPX three one -18
+KPX three seven -3
+KPX two four -11
+KPX two one -11
+KPX two seven 0
+KPX u quoteright 1
+KPX v a -17
+KPX v aacute -17
+KPX v acircumflex -17
+KPX v adieresis -17
+KPX v ae -18
+KPX v agrave -17
+KPX v aring -17
+KPX v atilde -17
+KPX v c -16
+KPX v colon -13
+KPX v comma -35
+KPX v e -12
+KPX v eacute -12
+KPX v ecircumflex -12
+KPX v egrave -12
+KPX v g -18
+KPX v hyphen 5
+KPX v l -7
+KPX v o -19
+KPX v oacute -19
+KPX v odieresis -19
+KPX v ograve -19
+KPX v oslash -16
+KPX v period -35
+KPX v s -17
+KPX v semicolon -13
+KPX w a -7
+KPX w aacute -7
+KPX w acircumflex -7
+KPX w adieresis -7
+KPX w ae -8
+KPX w agrave -7
+KPX w aring -7
+KPX w atilde -7
+KPX w c -7
+KPX w colon -10
+KPX w comma -20
+KPX w e -2
+KPX w eacute -2
+KPX w ecircumflex -2
+KPX w egrave -2
+KPX w g -8
+KPX w hyphen 14
+KPX w l -3
+KPX w o -9
+KPX w oacute -9
+KPX w odieresis -9
+KPX w ograve -9
+KPX w oslash -6
+KPX w period -20
+KPX w s -8
+KPX w semicolon -10
+KPX x a -10
+KPX x c -17
+KPX x e -13
+KPX x eacute -13
+KPX x o -20
+KPX x q -17
+KPX y a -18
+KPX y aacute -18
+KPX y acircumflex -18
+KPX y adieresis -18
+KPX y ae -19
+KPX y agrave -18
+KPX y aring -18
+KPX y atilde -18
+KPX y c -18
+KPX y colon -14
+KPX y comma -36
+KPX y e -14
+KPX y eacute -14
+KPX y ecircumflex -14
+KPX y egrave -14
+KPX y g -20
+KPX y hyphen 4
+KPX y l -8
+KPX y o -20
+KPX y oacute -20
+KPX y odieresis -20
+KPX y ograve -20
+KPX y oslash -17
+KPX y period -35
+KPX y s -19
+KPX y semicolon -14
+KPX zero four 11
+KPX zero one -10
+KPX zero seven -1
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/n019044l.pfb b/Master/xemtex/gsfonts/n019044l.pfb
new file mode 100644
index 00000000000..34ee042b4c7
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019044l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/n019044l.pfm b/Master/xemtex/gsfonts/n019044l.pfm
new file mode 100644
index 00000000000..af20fad314e
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019044l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/n019063l.afm b/Master/xemtex/gsfonts/n019063l.afm
new file mode 100644
index 00000000000..d5265da173b
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019063l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName NimbusSanL-ReguCondItal
+FullName Nimbus Sans L Regular Condensed Italic
+FamilyName Nimbus Sans L
+Weight Regular
+ItalicAngle -9.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -139 -286 915 951
+CapHeight 718
+XHeight 523
+Descender -207
+Ascender 718
+StartCharMetrics 316
+C 32 ; WX 228 ; N space ; B 21 0 21 0 ;
+C 33 ; WX 228 ; N exclam ; B 74 0 278 718 ;
+C 34 ; WX 291 ; N quotedbl ; B 138 463 359 718 ;
+C 35 ; WX 456 ; N numbersign ; B 60 0 517 688 ;
+C 36 ; WX 456 ; N dollar ; B 57 -115 506 775 ;
+C 37 ; WX 729 ; N percent ; B 120 -19 729 703 ;
+C 38 ; WX 547 ; N ampersand ; B 63 -15 530 718 ;
+C 39 ; WX 182 ; N quoteright ; B 124 463 254 718 ;
+C 40 ; WX 273 ; N parenleft ; B 89 -207 372 733 ;
+C 41 ; WX 273 ; N parenright ; B -7 -207 276 733 ;
+C 42 ; WX 319 ; N asterisk ; B 135 431 389 718 ;
+C 43 ; WX 479 ; N plus ; B 70 0 497 505 ;
+C 44 ; WX 228 ; N comma ; B 46 -147 175 106 ;
+C 45 ; WX 273 ; N hyphen ; B 77 232 293 322 ;
+C 46 ; WX 228 ; N period ; B 71 0 175 106 ;
+C 47 ; WX 228 ; N slash ; B -17 -19 370 737 ;
+C 48 ; WX 456 ; N zero ; B 77 -19 499 703 ;
+C 49 ; WX 456 ; N one ; B 170 0 417 703 ;
+C 50 ; WX 456 ; N two ; B 21 0 506 703 ;
+C 51 ; WX 456 ; N three ; B 61 -19 500 703 ;
+C 52 ; WX 456 ; N four ; B 50 0 472 703 ;
+C 53 ; WX 456 ; N five ; B 55 -19 509 688 ;
+C 54 ; WX 456 ; N six ; B 74 -19 504 703 ;
+C 55 ; WX 456 ; N seven ; B 112 0 549 688 ;
+C 56 ; WX 456 ; N eight ; B 60 -19 497 703 ;
+C 57 ; WX 456 ; N nine ; B 67 -19 499 703 ;
+C 58 ; WX 228 ; N colon ; B 71 0 247 516 ;
+C 59 ; WX 228 ; N semicolon ; B 46 -147 247 516 ;
+C 60 ; WX 479 ; N less ; B 77 10 526 496 ;
+C 61 ; WX 479 ; N equal ; B 52 115 515 390 ;
+C 62 ; WX 479 ; N greater ; B 41 10 490 496 ;
+C 63 ; WX 456 ; N question ; B 132 0 500 727 ;
+C 64 ; WX 832 ; N at ; B 176 -19 791 737 ;
+C 65 ; WX 547 ; N A ; B 11 0 536 718 ;
+C 66 ; WX 547 ; N B ; B 61 0 583 718 ;
+C 67 ; WX 592 ; N C ; B 88 -19 640 737 ;
+C 68 ; WX 592 ; N D ; B 66 0 626 718 ;
+C 69 ; WX 547 ; N E ; B 71 0 625 718 ;
+C 70 ; WX 501 ; N F ; B 71 0 603 718 ;
+C 71 ; WX 638 ; N G ; B 91 -19 655 737 ;
+C 72 ; WX 592 ; N H ; B 63 0 655 718 ;
+C 73 ; WX 228 ; N I ; B 75 0 279 718 ;
+C 74 ; WX 410 ; N J ; B 39 -19 476 718 ;
+C 75 ; WX 547 ; N K ; B 62 0 662 718 ;
+C 76 ; WX 456 ; N L ; B 62 0 455 718 ;
+C 77 ; WX 683 ; N M ; B 60 0 749 718 ;
+C 78 ; WX 592 ; N N ; B 62 0 655 718 ;
+C 79 ; WX 638 ; N O ; B 86 -19 677 737 ;
+C 80 ; WX 547 ; N P ; B 71 0 604 718 ;
+C 81 ; WX 638 ; N Q ; B 86 -56 677 737 ;
+C 82 ; WX 592 ; N R ; B 72 0 634 718 ;
+C 83 ; WX 547 ; N S ; B 74 -19 584 737 ;
+C 84 ; WX 501 ; N T ; B 122 0 615 718 ;
+C 85 ; WX 592 ; N U ; B 101 -19 653 718 ;
+C 86 ; WX 547 ; N V ; B 142 0 656 718 ;
+C 87 ; WX 774 ; N W ; B 138 0 886 718 ;
+C 88 ; WX 547 ; N X ; B 16 0 647 718 ;
+C 89 ; WX 547 ; N Y ; B 137 0 661 718 ;
+C 90 ; WX 501 ; N Z ; B 19 0 607 718 ;
+C 91 ; WX 228 ; N bracketleft ; B 17 -196 331 722 ;
+C 92 ; WX 228 ; N backslash ; B 115 -19 239 737 ;
+C 93 ; WX 228 ; N bracketright ; B -11 -196 302 722 ;
+C 94 ; WX 385 ; N asciicircum ; B 35 264 442 688 ;
+C 95 ; WX 456 ; N underscore ; B -22 -125 443 -75 ;
+C 96 ; WX 182 ; N quoteleft ; B 135 470 265 725 ;
+C 97 ; WX 456 ; N a ; B 50 -15 458 538 ;
+C 98 ; WX 456 ; N b ; B 48 -15 479 718 ;
+C 99 ; WX 410 ; N c ; B 61 -15 454 538 ;
+C 100 ; WX 456 ; N d ; B 69 -15 534 718 ;
+C 101 ; WX 456 ; N e ; B 69 -15 474 538 ;
+C 102 ; WX 228 ; N f ; B 71 0 341 728 ;
+C 103 ; WX 456 ; N g ; B 34 -220 500 538 ;
+C 104 ; WX 456 ; N h ; B 53 0 470 718 ;
+C 105 ; WX 182 ; N i ; B 55 0 252 718 ;
+C 106 ; WX 182 ; N j ; B -49 -210 252 718 ;
+C 107 ; WX 410 ; N k ; B 55 0 492 718 ;
+C 108 ; WX 182 ; N l ; B 55 0 252 718 ;
+C 109 ; WX 683 ; N m ; B 53 0 699 538 ;
+C 110 ; WX 456 ; N n ; B 53 0 470 538 ;
+C 111 ; WX 456 ; N o ; B 68 -14 479 538 ;
+C 112 ; WX 456 ; N p ; B 11 -207 479 538 ;
+C 113 ; WX 456 ; N q ; B 69 -207 496 538 ;
+C 114 ; WX 273 ; N r ; B 63 0 365 538 ;
+C 115 ; WX 410 ; N s ; B 52 -15 434 538 ;
+C 116 ; WX 228 ; N t ; B 84 -7 302 669 ;
+C 117 ; WX 456 ; N u ; B 77 -15 492 523 ;
+C 118 ; WX 410 ; N v ; B 98 0 495 523 ;
+C 119 ; WX 592 ; N w ; B 103 0 673 523 ;
+C 120 ; WX 410 ; N x ; B 9 0 487 523 ;
+C 121 ; WX 410 ; N y ; B 12 -214 492 523 ;
+C 122 ; WX 410 ; N z ; B 25 0 468 523 ;
+C 123 ; WX 274 ; N braceleft ; B 75 -196 365 722 ;
+C 124 ; WX 213 ; N bar ; B 74 -19 265 737 ;
+C 125 ; WX 274 ; N braceright ; B 0 -196 291 722 ;
+C 126 ; WX 479 ; N asciitilde ; B 91 181 476 322 ;
+C 161 ; WX 273 ; N exclamdown ; B 63 -195 267 523 ;
+C 162 ; WX 456 ; N cent ; B 78 -115 479 623 ;
+C 163 ; WX 456 ; N sterling ; B 40 -16 520 718 ;
+C 164 ; WX 137 ; N fraction ; B -139 -19 396 703 ;
+C 165 ; WX 456 ; N yen ; B 67 0 573 688 ;
+C 166 ; WX 456 ; N florin ; B -43 -207 537 737 ;
+C 167 ; WX 456 ; N section ; B 63 -191 479 737 ;
+C 168 ; WX 456 ; N currency ; B 49 99 530 603 ;
+C 169 ; WX 157 ; N quotesingle ; B 129 463 233 718 ;
+C 170 ; WX 273 ; N quotedblleft ; B 113 470 378 725 ;
+C 171 ; WX 456 ; N guillemotleft ; B 120 108 454 446 ;
+C 172 ; WX 273 ; N guilsinglleft ; B 112 108 279 446 ;
+C 173 ; WX 273 ; N guilsinglright ; B 91 108 257 446 ;
+C 174 ; WX 410 ; N fi ; B 71 0 481 728 ;
+C 175 ; WX 410 ; N fl ; B 71 0 479 728 ;
+C 177 ; WX 456 ; N endash ; B 42 240 510 313 ;
+C 178 ; WX 456 ; N dagger ; B 110 -159 510 718 ;
+C 179 ; WX 456 ; N daggerdbl ; B 43 -159 511 718 ;
+C 180 ; WX 228 ; N periodcentered ; B 106 190 211 315 ;
+C 182 ; WX 440 ; N paragraph ; B 103 -173 533 718 ;
+C 183 ; WX 287 ; N bullet ; B 74 202 339 517 ;
+C 184 ; WX 182 ; N quotesinglbase ; B 17 -149 147 106 ;
+C 185 ; WX 273 ; N quotedblbase ; B -5 -149 260 106 ;
+C 186 ; WX 273 ; N quotedblright ; B 102 463 367 718 ;
+C 187 ; WX 456 ; N guillemotright ; B 98 108 433 446 ;
+C 188 ; WX 820 ; N ellipsis ; B 94 0 744 106 ;
+C 189 ; WX 820 ; N perthousand ; B 72 -19 844 703 ;
+C 191 ; WX 501 ; N questiondown ; B 70 -201 438 525 ;
+C 193 ; WX 273 ; N grave ; B 139 593 276 734 ;
+C 194 ; WX 273 ; N acute ; B 203 593 390 734 ;
+C 195 ; WX 273 ; N circumflex ; B 121 593 359 734 ;
+C 196 ; WX 273 ; N tilde ; B 102 606 402 722 ;
+C 197 ; WX 273 ; N macron ; B 117 627 384 684 ;
+C 198 ; WX 273 ; N breve ; B 137 595 391 731 ;
+C 199 ; WX 273 ; N dotaccent ; B 204 604 297 706 ;
+C 200 ; WX 273 ; N dieresis ; B 138 604 363 706 ;
+C 202 ; WX 273 ; N ring ; B 175 572 330 756 ;
+C 203 ; WX 273 ; N cedilla ; B 2 -225 191 0 ;
+C 205 ; WX 273 ; N hungarumlaut ; B 129 593 463 734 ;
+C 206 ; WX 273 ; N ogonek ; B 35 -225 204 0 ;
+C 207 ; WX 273 ; N caron ; B 145 593 384 734 ;
+C 208 ; WX 820 ; N emdash ; B 42 240 875 313 ;
+C 225 ; WX 820 ; N AE ; B 7 0 899 718 ;
+C 227 ; WX 303 ; N ordfeminine ; B 82 304 368 737 ;
+C 232 ; WX 456 ; N Lslash ; B 34 0 455 718 ;
+C 233 ; WX 638 ; N Oslash ; B 35 -19 730 737 ;
+C 234 ; WX 820 ; N OE ; B 80 -19 915 737 ;
+C 235 ; WX 299 ; N ordmasculine ; B 82 304 384 737 ;
+C 241 ; WX 729 ; N ae ; B 50 -15 746 538 ;
+C 245 ; WX 228 ; N dotlessi ; B 78 0 241 523 ;
+C 248 ; WX 182 ; N lslash ; B 34 0 284 718 ;
+C 249 ; WX 501 ; N oslash ; B 24 -22 531 545 ;
+C 250 ; WX 774 ; N oe ; B 68 -15 791 538 ;
+C 251 ; WX 501 ; N germandbls ; B 55 -15 539 728 ;
+C -1 ; WX 592 ; N Udieresis ; B 101 -19 653 901 ;
+C -1 ; WX 592 ; N Uacute ; B 101 -19 653 929 ;
+C -1 ; WX 547 ; N Scedilla ; B 74 -225 584 737 ;
+C -1 ; WX 501 ; N Tcaron ; B 122 0 615 929 ;
+C -1 ; WX 547 ; N Scaron ; B 74 -19 584 929 ;
+C -1 ; WX 592 ; N Rcaron ; B 72 0 634 929 ;
+C -1 ; WX 592 ; N Racute ; B 72 0 634 929 ;
+C -1 ; WX 547 ; N Sacute ; B 74 -19 584 929 ;
+C -1 ; WX 638 ; N Otilde ; B 86 -19 677 917 ;
+C -1 ; WX 456 ; N ucircumflex ; B 77 -15 492 734 ;
+C -1 ; WX 638 ; N Ohungarumlaut ; B 86 -19 679 929 ;
+C -1 ; WX 592 ; N Uhungarumlaut ; B 101 -19 656 929 ;
+C -1 ; WX 547 ; N Yacute ; B 137 0 661 929 ;
+C -1 ; WX 592 ; N Eth ; B 57 0 626 718 ;
+C -1 ; WX 592 ; N Dcroat ; B 57 0 626 718 ;
+C -1 ; WX 501 ; N Zacute ; B 19 0 607 929 ;
+C -1 ; WX 592 ; N Uring ; B 101 -19 653 951 ;
+C -1 ; WX 456 ; N gbreve ; B 34 -220 500 731 ;
+C -1 ; WX 456 ; N eogonek ; B 69 -225 474 538 ;
+C -1 ; WX 456 ; N edotaccent ; B 69 -15 474 706 ;
+C -1 ; WX 456 ; N ecaron ; B 69 -15 476 734 ;
+C -1 ; WX 592 ; N Ugrave ; B 101 -19 653 929 ;
+C -1 ; WX 547 ; N Thorn ; B 71 0 584 718 ;
+C -1 ; WX 456 ; N eacute ; B 69 -15 482 734 ;
+C -1 ; WX 456 ; N edieresis ; B 69 -15 474 706 ;
+C -1 ; WX 503 ; N dcaron ; B 69 -15 643 718 ;
+C -1 ; WX 410 ; N ccedilla ; B 61 -225 454 538 ;
+C -1 ; WX 410 ; N ccaron ; B 61 -15 484 734 ;
+C -1 ; WX 410 ; N cacute ; B 61 -15 480 734 ;
+C -1 ; WX 456 ; N aogonek ; B 50 -225 458 538 ;
+C -1 ; WX 456 ; N aring ; B 50 -15 458 769 ;
+C -1 ; WX 456 ; N atilde ; B 50 -15 486 722 ;
+C -1 ; WX 456 ; N abreve ; B 50 -15 482 731 ;
+C -1 ; WX 456 ; N egrave ; B 69 -15 474 734 ;
+C -1 ; WX 456 ; N agrave ; B 50 -15 458 734 ;
+C -1 ; WX 456 ; N aacute ; B 50 -15 482 734 ;
+C -1 ; WX 456 ; N adieresis ; B 50 -15 458 706 ;
+C -1 ; WX 592 ; N Uogonek ; B 101 -225 653 718 ;
+C -1 ; WX 456 ; N ugrave ; B 77 -15 492 734 ;
+C -1 ; WX 456 ; N uacute ; B 77 -15 492 734 ;
+C -1 ; WX 456 ; N udieresis ; B 77 -15 492 706 ;
+C -1 ; WX 254 ; N tcaron ; B 84 -7 394 718 ;
+C -1 ; WX 410 ; N scommaaccent ; B 52 -286 434 538 ;
+C -1 ; WX 501 ; N Zcaron ; B 19 0 607 929 ;
+C -1 ; WX 456 ; N ecircumflex ; B 69 -15 474 734 ;
+C -1 ; WX 592 ; N Ucircumflex ; B 101 -19 653 929 ;
+C -1 ; WX 456 ; N acircumflex ; B 50 -15 458 734 ;
+C -1 ; WX 501 ; N Zdotaccent ; B 19 0 607 901 ;
+C -1 ; WX 410 ; N scaron ; B 52 -15 453 734 ;
+C -1 ; WX 547 ; N Amacron ; B 11 0 555 879 ;
+C -1 ; WX 410 ; N sacute ; B 52 -15 459 734 ;
+C -1 ; WX 501 ; N Tcommaaccent ; B 122 -286 615 718 ;
+C -1 ; WX 547 ; N Ydieresis ; B 137 0 661 901 ;
+C -1 ; WX 456 ; N thorn ; B 11 -207 479 718 ;
+C -1 ; WX 547 ; N Emacron ; B 71 0 625 879 ;
+C -1 ; WX 638 ; N Ograve ; B 86 -19 677 929 ;
+C -1 ; WX 638 ; N Oacute ; B 86 -19 677 929 ;
+C -1 ; WX 638 ; N Odieresis ; B 86 -19 677 901 ;
+C -1 ; WX 592 ; N Ntilde ; B 62 0 655 917 ;
+C -1 ; WX 592 ; N Ncaron ; B 62 0 655 929 ;
+C -1 ; WX 592 ; N Nacute ; B 62 0 655 929 ;
+C -1 ; WX 456 ; N Lcaron ; B 62 0 536 718 ;
+C -1 ; WX 456 ; N Lacute ; B 62 0 455 929 ;
+C -1 ; WX 228 ; N Idotaccent ; B 75 0 308 901 ;
+C -1 ; WX 273 ; N racute ; B 63 0 390 734 ;
+C -1 ; WX 228 ; N Icircumflex ; B 75 0 370 929 ;
+C -1 ; WX 456 ; N ohungarumlaut ; B 68 -14 555 734 ;
+C -1 ; WX 456 ; N otilde ; B 68 -14 494 722 ;
+C -1 ; WX 481 ; N Euro ; B 0 -13 535 670 ;
+C -1 ; WX 456 ; N ocircumflex ; B 68 -14 479 734 ;
+C -1 ; WX 273 ; N onesuperior ; B 136 281 305 703 ;
+C -1 ; WX 273 ; N twosuperior ; B 52 281 368 714 ;
+C -1 ; WX 273 ; N threesuperior ; B 74 270 358 714 ;
+C -1 ; WX 228 ; N Igrave ; B 75 0 288 929 ;
+C -1 ; WX 228 ; N Iacute ; B 75 0 401 929 ;
+C -1 ; WX 228 ; N Imacron ; B 75 0 395 879 ;
+C -1 ; WX 228 ; N Iogonek ; B -15 -225 279 718 ;
+C -1 ; WX 228 ; N Idieresis ; B 75 0 375 901 ;
+C -1 ; WX 638 ; N Gbreve ; B 91 -19 655 926 ;
+C -1 ; WX 592 ; N Umacron ; B 101 -19 653 879 ;
+C -1 ; WX 547 ; N Kcommaaccent ; B 62 -286 662 718 ;
+C -1 ; WX 456 ; N ograve ; B 68 -14 479 734 ;
+C -1 ; WX 547 ; N Scommaaccent ; B 74 -286 584 737 ;
+C -1 ; WX 547 ; N Eogonek ; B 71 -225 625 718 ;
+C -1 ; WX 456 ; N oacute ; B 68 -14 482 734 ;
+C -1 ; WX 547 ; N Edotaccent ; B 71 0 625 901 ;
+C -1 ; WX 182 ; N iogonek ; B -42 -225 252 718 ;
+C -1 ; WX 456 ; N gcommaaccent ; B 34 -220 500 818 ;
+C -1 ; WX 456 ; N odieresis ; B 68 -14 479 706 ;
+C -1 ; WX 456 ; N ntilde ; B 53 0 486 722 ;
+C -1 ; WX 456 ; N ncaron ; B 53 0 476 734 ;
+C -1 ; WX 547 ; N Ecaron ; B 71 0 625 929 ;
+C -1 ; WX 547 ; N Ecircumflex ; B 71 0 625 929 ;
+C -1 ; WX 410 ; N scedilla ; B 52 -225 434 538 ;
+C -1 ; WX 273 ; N rcaron ; B 63 0 384 734 ;
+C -1 ; WX 547 ; N Egrave ; B 71 0 625 929 ;
+C -1 ; WX 547 ; N Eacute ; B 71 0 625 929 ;
+C -1 ; WX 638 ; N Gcommaaccent ; B 91 -286 655 737 ;
+C -1 ; WX 592 ; N Rcommaaccent ; B 72 -286 634 718 ;
+C -1 ; WX 547 ; N Edieresis ; B 71 0 625 901 ;
+C -1 ; WX 456 ; N nacute ; B 53 0 482 734 ;
+C -1 ; WX 456 ; N uogonek ; B 77 -225 492 523 ;
+C -1 ; WX 456 ; N umacron ; B 77 -15 492 684 ;
+C -1 ; WX 592 ; N Dcaron ; B 66 0 626 929 ;
+C -1 ; WX 217 ; N lcaron ; B 55 0 357 718 ;
+C -1 ; WX 592 ; N Ccaron ; B 88 -19 640 929 ;
+C -1 ; WX 592 ; N Cacute ; B 88 -19 640 929 ;
+C -1 ; WX 592 ; N Ccedilla ; B 88 -225 640 737 ;
+C -1 ; WX 328 ; N degree ; B 138 411 384 703 ;
+C -1 ; WX 547 ; N Aogonek ; B 11 -225 536 718 ;
+C -1 ; WX 479 ; N minus ; B 70 216 497 289 ;
+C -1 ; WX 479 ; N multiply ; B 41 0 526 506 ;
+C -1 ; WX 479 ; N divide ; B 70 -19 497 524 ;
+C -1 ; WX 547 ; N Aring ; B 11 0 536 944 ;
+C -1 ; WX 820 ; N trademark ; B 152 306 866 718 ;
+C -1 ; WX 273 ; N rcommaaccent ; B 8 -286 365 538 ;
+C -1 ; WX 182 ; N lacute ; B 55 0 378 929 ;
+C -1 ; WX 456 ; N omacron ; B 68 -14 479 684 ;
+C -1 ; WX 547 ; N Atilde ; B 11 0 573 917 ;
+C -1 ; WX 228 ; N icircumflex ; B 78 0 336 734 ;
+C -1 ; WX 228 ; N igrave ; B 78 0 254 734 ;
+C -1 ; WX 456 ; N ncommaaccent ; B 53 -286 470 538 ;
+C -1 ; WX 182 ; N lcommaaccent ; B 2 -286 252 718 ;
+C -1 ; WX 479 ; N plusminus ; B 32 0 507 561 ;
+C -1 ; WX 684 ; N onehalf ; B 93 -19 688 703 ;
+C -1 ; WX 684 ; N onequarter ; B 123 -19 658 703 ;
+C -1 ; WX 684 ; N threequarters ; B 106 -19 706 714 ;
+C -1 ; WX 228 ; N iacute ; B 78 0 368 734 ;
+C -1 ; WX 547 ; N Abreve ; B 11 0 562 926 ;
+C -1 ; WX 410 ; N kcommaaccent ; B 55 -286 492 718 ;
+C -1 ; WX 638 ; N Omacron ; B 86 -19 677 879 ;
+C -1 ; WX 228 ; N imacron ; B 78 0 362 684 ;
+C -1 ; WX 456 ; N emacron ; B 69 -15 476 684 ;
+C -1 ; WX 456 ; N amacron ; B 50 -15 476 684 ;
+C -1 ; WX 228 ; N tcommaaccent ; B 25 -286 302 669 ;
+C -1 ; WX 410 ; N ydieresis ; B 12 -214 492 706 ;
+C -1 ; WX 410 ; N zdotaccent ; B 25 0 468 706 ;
+C -1 ; WX 410 ; N zcaron ; B 25 0 468 734 ;
+C -1 ; WX 410 ; N zacute ; B 25 0 468 734 ;
+C -1 ; WX 410 ; N yacute ; B 12 -214 492 734 ;
+C -1 ; WX 456 ; N uhungarumlaut ; B 77 -15 555 734 ;
+C -1 ; WX 456 ; N eth ; B 67 -15 506 737 ;
+C -1 ; WX 456 ; N uring ; B 77 -15 492 756 ;
+C -1 ; WX 638 ; N Ocircumflex ; B 86 -19 677 929 ;
+C -1 ; WX 273 ; N commaaccent ; B 47 -286 163 -60 ;
+C -1 ; WX 604 ; N copyright ; B 44 -19 687 737 ;
+C -1 ; WX 604 ; N registered ; B 44 -19 687 737 ;
+C -1 ; WX 547 ; N Acircumflex ; B 11 0 536 929 ;
+C -1 ; WX 228 ; N idieresis ; B 78 0 341 706 ;
+C -1 ; WX 405 ; N lozenge ; B 80 0 447 740 ;
+C -1 ; WX 502 ; N Delta ; B 5 0 499 688 ;
+C -1 ; WX 479 ; N notequal ; B 52 10 515 495 ;
+C -1 ; WX 450 ; N radical ; B 74 -74 593 927 ;
+C -1 ; WX 547 ; N Agrave ; B 11 0 536 929 ;
+C -1 ; WX 547 ; N Aacute ; B 11 0 561 929 ;
+C -1 ; WX 479 ; N lessequal ; B 39 0 543 594 ;
+C -1 ; WX 479 ; N greaterequal ; B 39 0 507 594 ;
+C -1 ; WX 479 ; N logicalnot ; B 87 108 515 390 ;
+C -1 ; WX 585 ; N summation ; B 12 -123 570 752 ;
+C -1 ; WX 405 ; N partialdiff ; B 21 -10 379 753 ;
+C -1 ; WX 592 ; N Ncommaaccent ; B 62 -286 655 718 ;
+C -1 ; WX 456 ; N dcroat ; B 69 -15 573 718 ;
+C -1 ; WX 213 ; N brokenbar ; B 74 -19 265 737 ;
+C -1 ; WX 456 ; N Lcommaaccent ; B 62 -286 455 718 ;
+C -1 ; WX 547 ; N Adieresis ; B 11 0 536 901 ;
+C -1 ; WX 456 ; N mu ; B 20 -207 492 523 ;
+C -1 ; WX 228 ; N .notdef ; B 21 0 21 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -29
+KPX A Ccedilla -29
+KPX A G -33
+KPX A O -30
+KPX A Odieresis -30
+KPX A Q -30
+KPX A T -81
+KPX A U -32
+KPX A Uacute -32
+KPX A Ucircumflex -32
+KPX A Udieresis -32
+KPX A Ugrave -32
+KPX A V -61
+KPX A W -43
+KPX A Y -82
+KPX A a -11
+KPX A b -6
+KPX A c -11
+KPX A ccedilla -11
+KPX A comma 0
+KPX A d -13
+KPX A e -15
+KPX A g -16
+KPX A guillemotleft -43
+KPX A guilsinglleft -39
+KPX A hyphen -6
+KPX A o -16
+KPX A period 1
+KPX A q -13
+KPX A quotedblright -40
+KPX A quoteright -51
+KPX A t -17
+KPX A u -15
+KPX A v -30
+KPX A w -25
+KPX A y -31
+KPX Aacute C -31
+KPX Aacute G -34
+KPX Aacute O -31
+KPX Aacute Q -31
+KPX Aacute T -81
+KPX Aacute U -33
+KPX Aacute V -61
+KPX Aacute W -43
+KPX Aacute Y -82
+KPX Aacute a -12
+KPX Aacute b -6
+KPX Aacute c -12
+KPX Aacute comma 0
+KPX Aacute d -14
+KPX Aacute e -16
+KPX Aacute g -16
+KPX Aacute guillemotleft -44
+KPX Aacute guilsinglleft -40
+KPX Aacute hyphen -6
+KPX Aacute o -17
+KPX Aacute period 0
+KPX Aacute q -14
+KPX Aacute quoteright -51
+KPX Aacute t -18
+KPX Aacute u -16
+KPX Aacute v -30
+KPX Aacute w -25
+KPX Aacute y -31
+KPX Acircumflex C -29
+KPX Acircumflex G -33
+KPX Acircumflex O -30
+KPX Acircumflex Q -30
+KPX Acircumflex T -81
+KPX Acircumflex U -32
+KPX Acircumflex V -61
+KPX Acircumflex W -43
+KPX Acircumflex Y -82
+KPX Acircumflex comma 0
+KPX Acircumflex period 1
+KPX Adieresis C -29
+KPX Adieresis G -33
+KPX Adieresis O -30
+KPX Adieresis Q -30
+KPX Adieresis T -81
+KPX Adieresis U -32
+KPX Adieresis V -61
+KPX Adieresis W -43
+KPX Adieresis Y -82
+KPX Adieresis a -11
+KPX Adieresis b -6
+KPX Adieresis c -11
+KPX Adieresis comma 0
+KPX Adieresis d -13
+KPX Adieresis g -16
+KPX Adieresis guillemotleft -43
+KPX Adieresis guilsinglleft -39
+KPX Adieresis hyphen -6
+KPX Adieresis o -16
+KPX Adieresis period 1
+KPX Adieresis q -13
+KPX Adieresis quotedblright -40
+KPX Adieresis quoteright -51
+KPX Adieresis t -17
+KPX Adieresis u -15
+KPX Adieresis v -30
+KPX Adieresis w -25
+KPX Adieresis y -31
+KPX Agrave C -29
+KPX Agrave G -33
+KPX Agrave O -30
+KPX Agrave Q -30
+KPX Agrave T -81
+KPX Agrave U -32
+KPX Agrave V -61
+KPX Agrave W -43
+KPX Agrave Y -82
+KPX Agrave comma 0
+KPX Agrave period 1
+KPX Aring C -29
+KPX Aring G -33
+KPX Aring O -30
+KPX Aring Q -30
+KPX Aring T -81
+KPX Aring U -32
+KPX Aring V -61
+KPX Aring W -43
+KPX Aring Y -82
+KPX Aring a -11
+KPX Aring b -6
+KPX Aring c -11
+KPX Aring comma 0
+KPX Aring d -13
+KPX Aring e -15
+KPX Aring g -16
+KPX Aring guillemotleft -43
+KPX Aring guilsinglleft -39
+KPX Aring hyphen -6
+KPX Aring o -16
+KPX Aring period 1
+KPX Aring q -13
+KPX Aring quotedblright -40
+KPX Aring quoteright -51
+KPX Aring t -17
+KPX Aring u -15
+KPX Aring v -30
+KPX Aring w -25
+KPX Aring y -31
+KPX Atilde C -31
+KPX Atilde G -35
+KPX Atilde O -31
+KPX Atilde Q -31
+KPX Atilde T -81
+KPX Atilde U -34
+KPX Atilde V -61
+KPX Atilde W -43
+KPX Atilde Y -82
+KPX Atilde comma 0
+KPX Atilde period 0
+KPX B A -22
+KPX B AE -21
+KPX B Aacute -22
+KPX B Acircumflex -22
+KPX B Adieresis -22
+KPX B Aring -22
+KPX B Atilde -22
+KPX B O -9
+KPX B OE -5
+KPX B Oacute -9
+KPX B Ocircumflex -9
+KPX B Odieresis -9
+KPX B Ograve -9
+KPX B Oslash -7
+KPX B V -34
+KPX B W -17
+KPX B Y -42
+KPX C A -32
+KPX C AE -31
+KPX C Aacute -32
+KPX C Adieresis -32
+KPX C Aring -32
+KPX C H -13
+KPX C K -13
+KPX C O -13
+KPX C Oacute -13
+KPX C Odieresis -13
+KPX Ccedilla A -37
+KPX D A -39
+KPX D Aacute -39
+KPX D Acircumflex -39
+KPX D Adieresis -39
+KPX D Agrave -39
+KPX D Aring -39
+KPX D Atilde -39
+KPX D J -9
+KPX D T -36
+KPX D V -37
+KPX D W -19
+KPX D X -42
+KPX D Y -55
+KPX F A -64
+KPX F Aacute -64
+KPX F Acircumflex -64
+KPX F Adieresis -64
+KPX F Agrave -64
+KPX F Aring -64
+KPX F Atilde -64
+KPX F J -59
+KPX F O -22
+KPX F Odieresis -22
+KPX F a -32
+KPX F aacute -32
+KPX F adieresis -32
+KPX F ae -32
+KPX F aring -32
+KPX F comma -107
+KPX F e -26
+KPX F eacute -26
+KPX F hyphen -18
+KPX F i -15
+KPX F j -15
+KPX F o -26
+KPX F oacute -26
+KPX F odieresis -26
+KPX F oe -24
+KPX F oslash -24
+KPX F period -107
+KPX F r -38
+KPX F u -34
+KPX G A -11
+KPX G AE -9
+KPX G Aacute -11
+KPX G Acircumflex -11
+KPX G Adieresis -11
+KPX G Agrave -11
+KPX G Aring -11
+KPX G Atilde -11
+KPX G T -38
+KPX G V -40
+KPX G W -23
+KPX G Y -58
+KPX J A -30
+KPX J AE -29
+KPX J Adieresis -30
+KPX J Aring -30
+KPX K C -41
+KPX K G -45
+KPX K O -42
+KPX K OE -37
+KPX K Oacute -42
+KPX K Odieresis -42
+KPX K S -38
+KPX K T 15
+KPX K a -15
+KPX K adieresis -15
+KPX K ae -15
+KPX K aring -15
+KPX K e -35
+KPX K hyphen -43
+KPX K o -36
+KPX K oacute -36
+KPX K odieresis -36
+KPX K u -29
+KPX K udieresis -29
+KPX K y -59
+KPX L A 10
+KPX L AE 12
+KPX L Aacute 10
+KPX L Adieresis 10
+KPX L Aring 10
+KPX L C -36
+KPX L Ccedilla -39
+KPX L G -40
+KPX L O -38
+KPX L Oacute -38
+KPX L Ocircumflex -38
+KPX L Odieresis -38
+KPX L Ograve -38
+KPX L Otilde -38
+KPX L S -20
+KPX L T -87
+KPX L U -34
+KPX L Udieresis -34
+KPX L V -87
+KPX L W -58
+KPX L Y -99
+KPX L hyphen -114
+KPX L quotedblright -108
+KPX L quoteright -120
+KPX L u -16
+KPX L udieresis -16
+KPX L y -53
+KPX N A -12
+KPX N AE -10
+KPX N Aacute -12
+KPX N Adieresis -12
+KPX N Aring -12
+KPX N C -6
+KPX N Ccedilla -5
+KPX N G -10
+KPX N O -6
+KPX N Oacute -6
+KPX N Odieresis -6
+KPX N a -8
+KPX N aacute -8
+KPX N adieresis -8
+KPX N ae -8
+KPX N aring -8
+KPX N comma -10
+KPX N e -5
+KPX N eacute -5
+KPX N o -6
+KPX N oacute -6
+KPX N odieresis -6
+KPX N oslash -1
+KPX N period -9
+KPX N u -4
+KPX N udieresis -5
+KPX O A -36
+KPX O AE -37
+KPX O Aacute -36
+KPX O Adieresis -36
+KPX O Aring -36
+KPX O T -34
+KPX O V -34
+KPX O W -16
+KPX O X -39
+KPX O Y -53
+KPX Oacute A -36
+KPX Oacute T -34
+KPX Oacute V -34
+KPX Oacute W -16
+KPX Oacute Y -53
+KPX Ocircumflex T -34
+KPX Ocircumflex V -34
+KPX Ocircumflex Y -53
+KPX Odieresis A -36
+KPX Odieresis T -34
+KPX Odieresis V -34
+KPX Odieresis W -16
+KPX Odieresis X -39
+KPX Odieresis Y -53
+KPX Ograve T -34
+KPX Ograve V -34
+KPX Ograve Y -53
+KPX Oslash A -33
+KPX Otilde T -34
+KPX Otilde V -34
+KPX Otilde Y -53
+KPX P A -71
+KPX P AE -72
+KPX P Aacute -71
+KPX P Adieresis -71
+KPX P Aring -71
+KPX P J -78
+KPX P a -27
+KPX P aacute -27
+KPX P adieresis -27
+KPX P ae -27
+KPX P aring -27
+KPX P comma -126
+KPX P e -31
+KPX P eacute -31
+KPX P hyphen -36
+KPX P o -31
+KPX P oacute -31
+KPX P odieresis -31
+KPX P oe -28
+KPX P oslash -29
+KPX P period -126
+KPX R C -11
+KPX R Ccedilla -10
+KPX R G -14
+KPX R O -11
+KPX R OE -7
+KPX R Oacute -11
+KPX R Odieresis -11
+KPX R T -19
+KPX R U -13
+KPX R Udieresis -13
+KPX R V -33
+KPX R W -17
+KPX R Y -39
+KPX R a -11
+KPX R aacute -11
+KPX R adieresis -11
+KPX R ae -11
+KPX R aring -11
+KPX R e -9
+KPX R eacute -9
+KPX R hyphen 0
+KPX R o -10
+KPX R oacute -10
+KPX R odieresis -10
+KPX R oe -9
+KPX R u -8
+KPX R uacute -8
+KPX R udieresis -8
+KPX R y -10
+KPX S A -22
+KPX S AE -21
+KPX S Aacute -22
+KPX S Adieresis -22
+KPX S Aring -22
+KPX S T -22
+KPX S V -36
+KPX S W -20
+KPX S Y -42
+KPX S t -10
+KPX T A -86
+KPX T AE -84
+KPX T Aacute -86
+KPX T Acircumflex -86
+KPX T Adieresis -86
+KPX T Agrave -86
+KPX T Aring -86
+KPX T Atilde -86
+KPX T C -34
+KPX T G -39
+KPX T J -88
+KPX T O -34
+KPX T OE -28
+KPX T Oacute -34
+KPX T Ocircumflex -34
+KPX T Odieresis -34
+KPX T Ograve -34
+KPX T Oslash -36
+KPX T Otilde -34
+KPX T S -23
+KPX T V 7
+KPX T W 10
+KPX T Y 9
+KPX T a -83
+KPX T ae -83
+KPX T c -76
+KPX T colon -106
+KPX T comma -84
+KPX T e -80
+KPX T g -78
+KPX T guillemotleft -104
+KPX T guilsinglleft -100
+KPX T hyphen -65
+KPX T i -9
+KPX T j -9
+KPX T o -81
+KPX T oslash -76
+KPX T period -84
+KPX T r -81
+KPX T s -78
+KPX T semicolon -102
+KPX T u -79
+KPX T v -87
+KPX T w -85
+KPX T y -88
+KPX U A -37
+KPX U AE -38
+KPX U Aacute -37
+KPX U Acircumflex -37
+KPX U Adieresis -37
+KPX U Aring -37
+KPX U Atilde -37
+KPX U comma -30
+KPX U m -9
+KPX U n -9
+KPX U p -7
+KPX U period -27
+KPX U r -14
+KPX Uacute A -37
+KPX Uacute comma -30
+KPX Uacute m -9
+KPX Uacute n -9
+KPX Uacute p -7
+KPX Uacute period -27
+KPX Uacute r -14
+KPX Ucircumflex A -37
+KPX Udieresis A -37
+KPX Udieresis b -7
+KPX Udieresis comma -30
+KPX Udieresis m -9
+KPX Udieresis n -9
+KPX Udieresis p -7
+KPX Udieresis period -27
+KPX Udieresis r -14
+KPX Ugrave A -37
+KPX V A -63
+KPX V AE -64
+KPX V Aacute -63
+KPX V Acircumflex -63
+KPX V Adieresis -63
+KPX V Agrave -63
+KPX V Aring -63
+KPX V Atilde -63
+KPX V C -36
+KPX V G -39
+KPX V O -36
+KPX V Oacute -36
+KPX V Ocircumflex -36
+KPX V Odieresis -36
+KPX V Ograve -36
+KPX V Oslash -33
+KPX V Otilde -36
+KPX V S -33
+KPX V T 12
+KPX V a -52
+KPX V ae -52
+KPX V colon -48
+KPX V comma -77
+KPX V e -50
+KPX V g -47
+KPX V guillemotleft -72
+KPX V guilsinglleft -68
+KPX V hyphen -33
+KPX V i -10
+KPX V o -51
+KPX V oslash -45
+KPX V period -77
+KPX V r -43
+KPX V semicolon -48
+KPX V u -40
+KPX V y -19
+KPX W A -46
+KPX W AE -47
+KPX W Aacute -46
+KPX W Acircumflex -46
+KPX W Adieresis -46
+KPX W Agrave -46
+KPX W Aring -46
+KPX W Atilde -46
+KPX W C -20
+KPX W G -23
+KPX W O -20
+KPX W Oacute -20
+KPX W Ocircumflex -20
+KPX W Odieresis -20
+KPX W Ograve -20
+KPX W Oslash -17
+KPX W Otilde -20
+KPX W S -25
+KPX W T 13
+KPX W a -32
+KPX W ae -32
+KPX W colon -38
+KPX W comma -50
+KPX W e -29
+KPX W g -27
+KPX W guillemotleft -52
+KPX W guilsinglleft -48
+KPX W hyphen -14
+KPX W i -9
+KPX W o -30
+KPX W oslash -25
+KPX W period -50
+KPX W r -30
+KPX W semicolon -38
+KPX W u -28
+KPX W y -10
+KPX X C -37
+KPX X O -37
+KPX X Odieresis -37
+KPX X Q -37
+KPX X a -20
+KPX X e -40
+KPX X hyphen -45
+KPX X o -41
+KPX X u -35
+KPX X y -50
+KPX Y A -84
+KPX Y AE -85
+KPX Y Aacute -84
+KPX Y Acircumflex -84
+KPX Y Adieresis -84
+KPX Y Agrave -84
+KPX Y Aring -84
+KPX Y Atilde -84
+KPX Y C -48
+KPX Y G -53
+KPX Y O -49
+KPX Y Oacute -49
+KPX Y Ocircumflex -49
+KPX Y Odieresis -49
+KPX Y Ograve -49
+KPX Y Oslash -50
+KPX Y Otilde -49
+KPX Y S -39
+KPX Y T 14
+KPX Y a -79
+KPX Y ae -79
+KPX Y colon -67
+KPX Y comma -95
+KPX Y e -77
+KPX Y g -75
+KPX Y guillemotleft -106
+KPX Y guilsinglleft -102
+KPX Y hyphen -72
+KPX Y i -8
+KPX Y o -78
+KPX Y oslash -72
+KPX Y p -53
+KPX Y period -95
+KPX Y semicolon -67
+KPX Y u -60
+KPX Y v -38
+KPX Z v -32
+KPX Z y -33
+KPX a j -9
+KPX a quoteright -13
+KPX a v -21
+KPX a w -16
+KPX a y -24
+KPX aacute v -22
+KPX aacute w -17
+KPX aacute y -24
+KPX adieresis v -21
+KPX adieresis w -16
+KPX adieresis y -24
+KPX ae v -18
+KPX ae w -13
+KPX ae y -23
+KPX agrave v -21
+KPX agrave w -16
+KPX agrave y -24
+KPX aring v -21
+KPX aring w -16
+KPX aring y -24
+KPX b v -15
+KPX b w -9
+KPX b y -19
+KPX c h -3
+KPX c k -4
+KPX comma one -88
+KPX comma quotedblright -27
+KPX comma quoteright -38
+KPX e quoteright -8
+KPX e t -12
+KPX e v -18
+KPX e w -12
+KPX e x -22
+KPX e y -22
+KPX eacute v -18
+KPX eacute w -13
+KPX eacute y -22
+KPX ecircumflex v -18
+KPX ecircumflex w -12
+KPX ecircumflex y -22
+KPX eight four -1
+KPX eight one -43
+KPX eight seven -24
+KPX f a -14
+KPX f aacute -14
+KPX f adieresis -14
+KPX f ae -14
+KPX f aring -14
+KPX f e -16
+KPX f eacute -16
+KPX f f 11
+KPX f i -10
+KPX f j -10
+KPX f l -10
+KPX f o -17
+KPX f oacute -17
+KPX f odieresis -17
+KPX f oe -16
+KPX f oslash -11
+KPX f quoteright 1
+KPX f s -10
+KPX f t 11
+KPX five four -3
+KPX five one -63
+KPX five seven -23
+KPX four four 1
+KPX four one -72
+KPX four seven -47
+KPX g a -5
+KPX g adieresis -5
+KPX g ae -5
+KPX g aring -5
+KPX g e -3
+KPX g eacute -3
+KPX g l 0
+KPX g oacute -3
+KPX g odieresis -3
+KPX g r -3
+KPX guillemotright A -47
+KPX guillemotright AE -47
+KPX guillemotright Aacute -47
+KPX guillemotright Adieresis -47
+KPX guillemotright Aring -47
+KPX guillemotright T -104
+KPX guillemotright V -72
+KPX guillemotright W -50
+KPX guillemotright Y -106
+KPX guilsinglright A -43
+KPX guilsinglright AE -44
+KPX guilsinglright Aacute -43
+KPX guilsinglright Adieresis -43
+KPX guilsinglright Aring -43
+KPX guilsinglright T -100
+KPX guilsinglright V -68
+KPX guilsinglright W -46
+KPX guilsinglright Y -103
+KPX h quoteright -6
+KPX h y -18
+KPX hyphen A -8
+KPX hyphen AE -8
+KPX hyphen Aacute -8
+KPX hyphen Adieresis -8
+KPX hyphen Aring -8
+KPX hyphen T -65
+KPX hyphen V -34
+KPX hyphen W -13
+KPX hyphen Y -72
+KPX i T -9
+KPX i j -3
+KPX k a -12
+KPX k aacute -12
+KPX k adieresis -12
+KPX k ae -13
+KPX k aring -12
+KPX k comma -5
+KPX k e -22
+KPX k eacute -22
+KPX k g -20
+KPX k hyphen -35
+KPX k o -23
+KPX k oacute -23
+KPX k odieresis -23
+KPX k period -4
+KPX k s -16
+KPX k u -8
+KPX k udieresis -8
+KPX l v -9
+KPX l y -10
+KPX m p 0
+KPX m v -15
+KPX m w -10
+KPX m y -18
+KPX n T -79
+KPX n p -1
+KPX n quoteright -6
+KPX n v -16
+KPX n w -11
+KPX n y -18
+KPX nine four -6
+KPX nine one -40
+KPX nine seven -27
+KPX o T -80
+KPX o quoteright -10
+KPX o t -10
+KPX o v -16
+KPX o w -10
+KPX o x -20
+KPX o y -20
+KPX oacute v -16
+KPX oacute w -10
+KPX oacute y -20
+KPX ocircumflex t -10
+KPX odieresis t -10
+KPX odieresis v -16
+KPX odieresis w -10
+KPX odieresis x -20
+KPX odieresis y -20
+KPX ograve v -16
+KPX ograve w -10
+KPX ograve y -20
+KPX one comma -59
+KPX one eight -53
+KPX one five -53
+KPX one four -65
+KPX one nine -53
+KPX one one -96
+KPX one period -59
+KPX one seven -71
+KPX one six -51
+KPX one three -57
+KPX one two -57
+KPX one zero -50
+KPX p t -9
+KPX p y -19
+KPX period one -88
+KPX period quotedblright -28
+KPX period quoteright -39
+KPX q c 0
+KPX q u -3
+KPX quotedblbase A 18
+KPX quotedblbase AE 19
+KPX quotedblbase T -64
+KPX quotedblbase V -57
+KPX quotedblbase W -30
+KPX quotedblbase Y -76
+KPX quotedblleft A -46
+KPX quotedblleft AE -49
+KPX quotedblleft Aacute -46
+KPX quotedblleft Adieresis -46
+KPX quotedblleft Aring -46
+KPX quotedblleft T 9
+KPX quotedblleft V 19
+KPX quotedblleft W 26
+KPX quotedblleft Y 7
+KPX quotedblright A -54
+KPX quotedblright AE -56
+KPX quotedblright Aacute -54
+KPX quotedblright Adieresis -54
+KPX quotedblright Aring -54
+KPX quotedblright T 3
+KPX quotedblright V 11
+KPX quotedblright W 19
+KPX quotedblright Y 0
+KPX quoteleft A -57
+KPX quoteleft AE -60
+KPX quoteleft Aacute -57
+KPX quoteleft Adieresis -57
+KPX quoteleft Aring -57
+KPX quoteleft T -2
+KPX quoteleft V 7
+KPX quoteleft W 15
+KPX quoteleft Y -4
+KPX quoteright A -65
+KPX quoteright AE -67
+KPX quoteright Aacute -65
+KPX quoteright Adieresis -65
+KPX quoteright Aring -65
+KPX quoteright comma -52
+KPX quoteright d -20
+KPX quoteright o -29
+KPX quoteright period -52
+KPX quoteright r -19
+KPX quoteright s -17
+KPX quoteright t -9
+KPX quoteright v -3
+KPX quoteright w -3
+KPX quoteright y -4
+KPX r a -9
+KPX r aacute -9
+KPX r acircumflex -9
+KPX r adieresis -9
+KPX r ae -9
+KPX r agrave -9
+KPX r aring -9
+KPX r c -11
+KPX r ccedilla -8
+KPX r colon -12
+KPX r comma -52
+KPX r d -9
+KPX r e -16
+KPX r eacute -16
+KPX r ecircumflex -16
+KPX r egrave -16
+KPX r f 17
+KPX r g -8
+KPX r h -4
+KPX r hyphen -34
+KPX r i -5
+KPX r j -5
+KPX r k -5
+KPX r l -5
+KPX r m -4
+KPX r n -4
+KPX r o -18
+KPX r oacute -18
+KPX r ocircumflex -18
+KPX r odieresis -18
+KPX r oe -15
+KPX r ograve -18
+KPX r oslash -15
+KPX r p -1
+KPX r period -52
+KPX r q -9
+KPX r quoteright 3
+KPX r r -9
+KPX r s -4
+KPX r semicolon -12
+KPX r t 17
+KPX r u -5
+KPX r v 17
+KPX r w 15
+KPX r x 12
+KPX r y 16
+KPX r z 0
+KPX s quoteright -6
+KPX s t -11
+KPX seven colon -55
+KPX seven comma -99
+KPX seven eight -24
+KPX seven five -30
+KPX seven four -76
+KPX seven one -42
+KPX seven period -99
+KPX seven seven -3
+KPX seven six -32
+KPX seven three -22
+KPX seven two -22
+KPX six four -1
+KPX six one -39
+KPX six seven -21
+KPX t S -14
+KPX t a -5
+KPX t aacute -5
+KPX t adieresis -5
+KPX t ae -5
+KPX t aring -5
+KPX t colon -19
+KPX t e -12
+KPX t eacute -12
+KPX t h -6
+KPX t o -13
+KPX t oacute -13
+KPX t odieresis -13
+KPX t quoteright 2
+KPX t semicolon -19
+KPX three four 0
+KPX three one -41
+KPX three seven -23
+KPX two four -46
+KPX two one -37
+KPX two seven -21
+KPX u quoteright 0
+KPX v a -20
+KPX v aacute -20
+KPX v acircumflex -20
+KPX v adieresis -20
+KPX v ae -20
+KPX v agrave -20
+KPX v aring -20
+KPX v atilde -20
+KPX v c -15
+KPX v colon -14
+KPX v comma -54
+KPX v e -19
+KPX v eacute -19
+KPX v ecircumflex -19
+KPX v egrave -19
+KPX v g -17
+KPX v hyphen -7
+KPX v l -7
+KPX v o -20
+KPX v oacute -20
+KPX v odieresis -20
+KPX v ograve -20
+KPX v oslash -16
+KPX v period -54
+KPX v s -15
+KPX v semicolon -14
+KPX w a -16
+KPX w aacute -16
+KPX w acircumflex -16
+KPX w adieresis -16
+KPX w ae -16
+KPX w agrave -16
+KPX w aring -16
+KPX w atilde -16
+KPX w c -8
+KPX w colon -16
+KPX w comma -40
+KPX w e -12
+KPX w eacute -12
+KPX w ecircumflex -12
+KPX w egrave -12
+KPX w g -11
+KPX w hyphen 0
+KPX w l -9
+KPX w o -13
+KPX w oacute -13
+KPX w odieresis -13
+KPX w ograve -13
+KPX w oslash -8
+KPX w period -40
+KPX w s -11
+KPX w semicolon -16
+KPX x a -17
+KPX x c -16
+KPX x e -20
+KPX x eacute -20
+KPX x o -21
+KPX x q -17
+KPX y a -21
+KPX y aacute -21
+KPX y acircumflex -21
+KPX y adieresis -21
+KPX y ae -21
+KPX y agrave -21
+KPX y aring -21
+KPX y atilde -21
+KPX y c -16
+KPX y colon -15
+KPX y comma -54
+KPX y e -20
+KPX y eacute -20
+KPX y ecircumflex -20
+KPX y egrave -20
+KPX y g -19
+KPX y hyphen -6
+KPX y l -8
+KPX y o -21
+KPX y oacute -21
+KPX y odieresis -21
+KPX y ograve -21
+KPX y oslash -16
+KPX y period -53
+KPX y s -16
+KPX y semicolon -15
+KPX zero four -2
+KPX zero one -40
+KPX zero seven -28
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/n019063l.pfb b/Master/xemtex/gsfonts/n019063l.pfb
new file mode 100644
index 00000000000..9bec5ab2ad9
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019063l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/n019063l.pfm b/Master/xemtex/gsfonts/n019063l.pfm
new file mode 100644
index 00000000000..9134e134c97
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019063l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/n019064l.afm b/Master/xemtex/gsfonts/n019064l.afm
new file mode 100644
index 00000000000..9e305ea3559
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019064l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName NimbusSanL-BoldCondItal
+FullName Nimbus Sans L Bold Condensed Italic
+FamilyName Nimbus Sans L
+Weight Bold
+ItalicAngle -9.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -143 -298 913 989
+CapHeight 718
+XHeight 532
+Descender -207
+Ascender 718
+StartCharMetrics 316
+C 32 ; WX 228 ; N space ; B 21 0 21 0 ;
+C 33 ; WX 273 ; N exclam ; B 77 0 325 718 ;
+C 34 ; WX 389 ; N quotedbl ; B 158 447 433 718 ;
+C 35 ; WX 456 ; N numbersign ; B 49 0 528 698 ;
+C 36 ; WX 456 ; N dollar ; B 55 -115 510 775 ;
+C 37 ; WX 729 ; N percent ; B 112 -19 739 710 ;
+C 38 ; WX 592 ; N ampersand ; B 73 -19 600 718 ;
+C 39 ; WX 228 ; N quoteright ; B 137 445 297 718 ;
+C 40 ; WX 273 ; N parenleft ; B 62 -207 385 734 ;
+C 41 ; WX 273 ; N parenright ; B -21 -207 302 734 ;
+C 42 ; WX 319 ; N asterisk ; B 120 387 394 718 ;
+C 43 ; WX 479 ; N plus ; B 67 0 500 506 ;
+C 44 ; WX 228 ; N comma ; B 23 -168 201 146 ;
+C 45 ; WX 273 ; N hyphen ; B 60 215 311 345 ;
+C 46 ; WX 228 ; N period ; B 52 0 201 146 ;
+C 47 ; WX 228 ; N slash ; B -30 -19 383 737 ;
+C 48 ; WX 456 ; N zero ; B 71 -19 506 710 ;
+C 49 ; WX 456 ; N one ; B 142 0 434 710 ;
+C 50 ; WX 456 ; N two ; B 21 0 508 710 ;
+C 51 ; WX 456 ; N three ; B 54 -19 499 710 ;
+C 52 ; WX 456 ; N four ; B 50 0 490 710 ;
+C 53 ; WX 456 ; N five ; B 53 -19 522 698 ;
+C 54 ; WX 456 ; N six ; B 70 -19 507 710 ;
+C 55 ; WX 456 ; N seven ; B 102 0 555 698 ;
+C 56 ; WX 456 ; N eight ; B 57 -19 505 710 ;
+C 57 ; WX 456 ; N nine ; B 64 -19 504 710 ;
+C 58 ; WX 273 ; N colon ; B 75 0 288 512 ;
+C 59 ; WX 273 ; N semicolon ; B 46 -168 288 512 ;
+C 60 ; WX 479 ; N less ; B 67 -15 537 521 ;
+C 61 ; WX 479 ; N equal ; B 48 87 519 419 ;
+C 62 ; WX 479 ; N greater ; B 30 -15 500 521 ;
+C 63 ; WX 501 ; N question ; B 135 0 550 727 ;
+C 64 ; WX 800 ; N at ; B 152 -19 782 737 ;
+C 65 ; WX 592 ; N A ; B 16 0 576 718 ;
+C 66 ; WX 592 ; N B ; B 62 0 626 718 ;
+C 67 ; WX 592 ; N C ; B 88 -19 647 737 ;
+C 68 ; WX 592 ; N D ; B 62 0 637 718 ;
+C 69 ; WX 547 ; N E ; B 62 0 620 718 ;
+C 70 ; WX 501 ; N F ; B 62 0 606 718 ;
+C 71 ; WX 638 ; N G ; B 89 -19 670 737 ;
+C 72 ; WX 592 ; N H ; B 58 0 659 718 ;
+C 73 ; WX 228 ; N I ; B 52 0 301 718 ;
+C 74 ; WX 456 ; N J ; B 49 -18 522 718 ;
+C 75 ; WX 592 ; N K ; B 71 0 703 718 ;
+C 76 ; WX 501 ; N L ; B 62 0 501 718 ;
+C 77 ; WX 683 ; N M ; B 57 0 752 718 ;
+C 78 ; WX 592 ; N N ; B 57 0 661 718 ;
+C 79 ; WX 638 ; N O ; B 88 -19 675 737 ;
+C 80 ; WX 547 ; N P ; B 62 0 605 718 ;
+C 81 ; WX 638 ; N Q ; B 88 -52 675 737 ;
+C 82 ; WX 592 ; N R ; B 62 0 638 718 ;
+C 83 ; WX 547 ; N S ; B 66 -19 588 737 ;
+C 84 ; WX 501 ; N T ; B 114 0 615 718 ;
+C 85 ; WX 592 ; N U ; B 96 -19 659 718 ;
+C 86 ; WX 547 ; N V ; B 141 0 656 718 ;
+C 87 ; WX 774 ; N W ; B 138 0 887 718 ;
+C 88 ; WX 547 ; N X ; B 11 0 648 718 ;
+C 89 ; WX 547 ; N Y ; B 137 0 661 718 ;
+C 90 ; WX 501 ; N Z ; B 20 0 604 718 ;
+C 91 ; WX 273 ; N bracketleft ; B 17 -196 379 722 ;
+C 92 ; WX 228 ; N backslash ; B 101 -19 252 737 ;
+C 93 ; WX 273 ; N bracketright ; B -14 -196 347 722 ;
+C 94 ; WX 479 ; N asciicircum ; B 107 323 484 698 ;
+C 95 ; WX 456 ; N underscore ; B -22 -125 443 -75 ;
+C 96 ; WX 228 ; N quoteleft ; B 136 454 296 727 ;
+C 97 ; WX 456 ; N a ; B 45 -14 478 546 ;
+C 98 ; WX 501 ; N b ; B 50 -14 529 718 ;
+C 99 ; WX 456 ; N c ; B 65 -14 491 546 ;
+C 100 ; WX 501 ; N d ; B 67 -14 577 718 ;
+C 101 ; WX 456 ; N e ; B 58 -14 486 546 ;
+C 102 ; WX 273 ; N f ; B 71 0 385 727 ;
+C 103 ; WX 501 ; N g ; B 31 -217 546 546 ;
+C 104 ; WX 501 ; N h ; B 53 0 516 718 ;
+C 105 ; WX 228 ; N i ; B 57 0 298 725 ;
+C 106 ; WX 228 ; N j ; B -35 -214 298 725 ;
+C 107 ; WX 456 ; N k ; B 57 0 549 718 ;
+C 108 ; WX 228 ; N l ; B 57 0 297 718 ;
+C 109 ; WX 729 ; N m ; B 52 0 746 546 ;
+C 110 ; WX 501 ; N n ; B 53 0 516 546 ;
+C 111 ; WX 501 ; N o ; B 67 -14 527 546 ;
+C 112 ; WX 501 ; N p ; B 15 -207 529 546 ;
+C 113 ; WX 501 ; N q ; B 66 -207 545 546 ;
+C 114 ; WX 319 ; N r ; B 52 0 401 546 ;
+C 115 ; WX 456 ; N s ; B 52 -14 479 546 ;
+C 116 ; WX 273 ; N t ; B 82 -6 346 676 ;
+C 117 ; WX 501 ; N u ; B 80 -14 540 532 ;
+C 118 ; WX 456 ; N v ; B 103 0 538 532 ;
+C 119 ; WX 638 ; N w ; B 101 0 723 532 ;
+C 120 ; WX 456 ; N x ; B 12 0 531 532 ;
+C 121 ; WX 456 ; N y ; B 34 -214 535 532 ;
+C 122 ; WX 410 ; N z ; B 16 0 478 532 ;
+C 123 ; WX 319 ; N braceleft ; B 77 -196 425 722 ;
+C 124 ; WX 230 ; N bar ; B 66 -19 289 737 ;
+C 125 ; WX 319 ; N braceright ; B -14 -196 333 722 ;
+C 126 ; WX 479 ; N asciitilde ; B 94 173 473 336 ;
+C 161 ; WX 273 ; N exclamdown ; B 41 -186 290 532 ;
+C 162 ; WX 456 ; N cent ; B 65 -118 491 628 ;
+C 163 ; WX 456 ; N sterling ; B 41 -16 520 718 ;
+C 164 ; WX 137 ; N fraction ; B -143 -19 399 710 ;
+C 165 ; WX 456 ; N yen ; B 49 0 585 698 ;
+C 166 ; WX 456 ; N florin ; B -41 -210 548 737 ;
+C 167 ; WX 456 ; N section ; B 50 -184 491 727 ;
+C 168 ; WX 456 ; N currency ; B 22 76 558 636 ;
+C 169 ; WX 195 ; N quotesingle ; B 135 447 263 718 ;
+C 170 ; WX 410 ; N quotedblleft ; B 132 454 482 727 ;
+C 171 ; WX 456 ; N guillemotleft ; B 111 76 468 484 ;
+C 172 ; WX 273 ; N guilsinglleft ; B 106 76 289 484 ;
+C 173 ; WX 273 ; N guilsinglright ; B 81 76 264 484 ;
+C 174 ; WX 501 ; N fi ; B 71 0 571 727 ;
+C 175 ; WX 501 ; N fl ; B 71 0 570 727 ;
+C 177 ; WX 456 ; N endash ; B 40 227 514 333 ;
+C 178 ; WX 456 ; N dagger ; B 97 -171 513 718 ;
+C 179 ; WX 456 ; N daggerdbl ; B 38 -171 515 718 ;
+C 180 ; WX 228 ; N periodcentered ; B 90 172 226 334 ;
+C 182 ; WX 456 ; N paragraph ; B 80 -191 564 700 ;
+C 183 ; WX 287 ; N bullet ; B 68 194 345 524 ;
+C 184 ; WX 228 ; N quotesinglbase ; B 34 -146 194 127 ;
+C 185 ; WX 410 ; N quotedblbase ; B 29 -146 380 127 ;
+C 186 ; WX 410 ; N quotedblright ; B 132 445 483 718 ;
+C 187 ; WX 456 ; N guillemotright ; B 85 76 443 484 ;
+C 188 ; WX 820 ; N ellipsis ; B 75 0 770 146 ;
+C 189 ; WX 820 ; N perthousand ; B 62 -19 851 710 ;
+C 191 ; WX 501 ; N questiondown ; B 44 -195 459 532 ;
+C 193 ; WX 273 ; N grave ; B 112 604 290 750 ;
+C 194 ; WX 273 ; N acute ; B 194 604 423 750 ;
+C 195 ; WX 273 ; N circumflex ; B 97 604 387 750 ;
+C 196 ; WX 273 ; N tilde ; B 92 610 415 737 ;
+C 197 ; WX 273 ; N macron ; B 100 604 396 678 ;
+C 198 ; WX 273 ; N breve ; B 128 604 405 750 ;
+C 199 ; WX 273 ; N dotaccent ; B 192 614 316 729 ;
+C 200 ; WX 273 ; N dieresis ; B 112 614 395 729 ;
+C 202 ; WX 273 ; N ring ; B 164 568 344 776 ;
+C 203 ; WX 273 ; N cedilla ; B -30 -228 180 0 ;
+C 205 ; WX 273 ; N hungarumlaut ; B 113 604 529 750 ;
+C 206 ; WX 273 ; N ogonek ; B 33 -228 216 0 ;
+C 207 ; WX 273 ; N caron ; B 123 604 412 750 ;
+C 208 ; WX 820 ; N emdash ; B 40 227 878 333 ;
+C 225 ; WX 820 ; N AE ; B 4 0 902 718 ;
+C 227 ; WX 303 ; N ordfeminine ; B 75 276 381 737 ;
+C 232 ; WX 501 ; N Lslash ; B 28 0 501 718 ;
+C 233 ; WX 638 ; N Oslash ; B 29 -27 733 745 ;
+C 234 ; WX 820 ; N OE ; B 81 -19 913 737 ;
+C 235 ; WX 299 ; N ordmasculine ; B 75 276 398 737 ;
+C 241 ; WX 729 ; N ae ; B 46 -14 757 546 ;
+C 245 ; WX 228 ; N dotlessi ; B 57 0 264 532 ;
+C 248 ; WX 228 ; N lslash ; B 33 0 334 718 ;
+C 249 ; WX 501 ; N oslash ; B 18 -29 575 560 ;
+C 250 ; WX 774 ; N oe ; B 67 -14 801 546 ;
+C 251 ; WX 501 ; N germandbls ; B 57 -14 539 731 ;
+C -1 ; WX 592 ; N Udieresis ; B 96 -19 659 915 ;
+C -1 ; WX 592 ; N Uacute ; B 96 -19 659 936 ;
+C -1 ; WX 547 ; N Scedilla ; B 66 -228 588 737 ;
+C -1 ; WX 501 ; N Tcaron ; B 114 0 615 936 ;
+C -1 ; WX 547 ; N Scaron ; B 66 -19 588 936 ;
+C -1 ; WX 592 ; N Rcaron ; B 62 0 638 936 ;
+C -1 ; WX 592 ; N Racute ; B 62 0 638 936 ;
+C -1 ; WX 547 ; N Sacute ; B 66 -19 592 936 ;
+C -1 ; WX 638 ; N Otilde ; B 88 -19 675 923 ;
+C -1 ; WX 501 ; N ucircumflex ; B 80 -14 540 750 ;
+C -1 ; WX 638 ; N Ohungarumlaut ; B 88 -19 744 936 ;
+C -1 ; WX 592 ; N Uhungarumlaut ; B 96 -19 721 936 ;
+C -1 ; WX 547 ; N Yacute ; B 137 0 661 936 ;
+C -1 ; WX 592 ; N Eth ; B 51 0 637 718 ;
+C -1 ; WX 592 ; N Dcroat ; B 51 0 637 718 ;
+C -1 ; WX 501 ; N Zacute ; B 20 0 604 936 ;
+C -1 ; WX 592 ; N Uring ; B 96 -19 659 962 ;
+C -1 ; WX 501 ; N gbreve ; B 31 -217 546 750 ;
+C -1 ; WX 456 ; N eogonek ; B 58 -228 486 546 ;
+C -1 ; WX 456 ; N edotaccent ; B 58 -14 486 729 ;
+C -1 ; WX 456 ; N ecaron ; B 58 -14 504 750 ;
+C -1 ; WX 592 ; N Ugrave ; B 96 -19 659 936 ;
+C -1 ; WX 547 ; N Thorn ; B 62 0 588 718 ;
+C -1 ; WX 456 ; N eacute ; B 58 -14 515 750 ;
+C -1 ; WX 456 ; N edieresis ; B 58 -14 488 729 ;
+C -1 ; WX 561 ; N dcaron ; B 67 -14 701 718 ;
+C -1 ; WX 456 ; N ccedilla ; B 65 -228 491 546 ;
+C -1 ; WX 456 ; N ccaron ; B 65 -14 504 750 ;
+C -1 ; WX 456 ; N cacute ; B 65 -14 515 750 ;
+C -1 ; WX 456 ; N aogonek ; B 45 -228 478 546 ;
+C -1 ; WX 456 ; N aring ; B 45 -14 478 803 ;
+C -1 ; WX 456 ; N atilde ; B 45 -14 507 737 ;
+C -1 ; WX 456 ; N abreve ; B 45 -14 496 750 ;
+C -1 ; WX 456 ; N egrave ; B 58 -14 486 750 ;
+C -1 ; WX 456 ; N agrave ; B 45 -14 478 750 ;
+C -1 ; WX 456 ; N aacute ; B 45 -14 514 750 ;
+C -1 ; WX 456 ; N adieresis ; B 45 -14 487 729 ;
+C -1 ; WX 592 ; N Uogonek ; B 96 -228 659 718 ;
+C -1 ; WX 501 ; N ugrave ; B 80 -14 540 750 ;
+C -1 ; WX 501 ; N uacute ; B 80 -14 540 750 ;
+C -1 ; WX 501 ; N udieresis ; B 80 -14 540 729 ;
+C -1 ; WX 312 ; N tcaron ; B 82 -6 452 718 ;
+C -1 ; WX 456 ; N scommaaccent ; B 52 -298 479 546 ;
+C -1 ; WX 501 ; N Zcaron ; B 20 0 604 936 ;
+C -1 ; WX 456 ; N ecircumflex ; B 58 -14 486 750 ;
+C -1 ; WX 592 ; N Ucircumflex ; B 96 -19 659 936 ;
+C -1 ; WX 456 ; N acircumflex ; B 45 -14 478 750 ;
+C -1 ; WX 501 ; N Zdotaccent ; B 20 0 604 915 ;
+C -1 ; WX 456 ; N scaron ; B 52 -14 503 750 ;
+C -1 ; WX 592 ; N Amacron ; B 16 0 588 864 ;
+C -1 ; WX 456 ; N sacute ; B 52 -14 515 750 ;
+C -1 ; WX 501 ; N Tcommaaccent ; B 114 -298 615 718 ;
+C -1 ; WX 547 ; N Ydieresis ; B 137 0 661 915 ;
+C -1 ; WX 501 ; N thorn ; B 15 -207 529 718 ;
+C -1 ; WX 547 ; N Emacron ; B 62 0 620 864 ;
+C -1 ; WX 638 ; N Ograve ; B 88 -19 675 936 ;
+C -1 ; WX 638 ; N Oacute ; B 88 -19 675 936 ;
+C -1 ; WX 638 ; N Odieresis ; B 88 -19 675 915 ;
+C -1 ; WX 592 ; N Ntilde ; B 57 0 661 923 ;
+C -1 ; WX 592 ; N Ncaron ; B 57 0 661 936 ;
+C -1 ; WX 592 ; N Nacute ; B 57 0 661 936 ;
+C -1 ; WX 501 ; N Lcaron ; B 62 0 573 718 ;
+C -1 ; WX 501 ; N Lacute ; B 62 0 501 936 ;
+C -1 ; WX 228 ; N Idotaccent ; B 52 0 326 915 ;
+C -1 ; WX 319 ; N racute ; B 52 0 446 750 ;
+C -1 ; WX 228 ; N Icircumflex ; B 52 0 397 936 ;
+C -1 ; WX 501 ; N ohungarumlaut ; B 67 -14 643 750 ;
+C -1 ; WX 501 ; N otilde ; B 67 -14 529 737 ;
+C -1 ; WX 467 ; N Euro ; B 0 -15 507 670 ;
+C -1 ; WX 501 ; N ocircumflex ; B 67 -14 527 750 ;
+C -1 ; WX 273 ; N onesuperior ; B 121 283 318 710 ;
+C -1 ; WX 273 ; N twosuperior ; B 57 283 368 722 ;
+C -1 ; WX 273 ; N threesuperior ; B 75 271 361 722 ;
+C -1 ; WX 228 ; N Igrave ; B 52 0 301 936 ;
+C -1 ; WX 228 ; N Iacute ; B 52 0 433 936 ;
+C -1 ; WX 228 ; N Imacron ; B 52 0 406 864 ;
+C -1 ; WX 228 ; N Iogonek ; B -8 -228 301 718 ;
+C -1 ; WX 228 ; N Idieresis ; B 52 0 405 915 ;
+C -1 ; WX 638 ; N Gbreve ; B 89 -19 670 936 ;
+C -1 ; WX 592 ; N Umacron ; B 96 -19 659 864 ;
+C -1 ; WX 592 ; N Kcommaaccent ; B 71 -298 703 718 ;
+C -1 ; WX 501 ; N ograve ; B 67 -14 527 750 ;
+C -1 ; WX 547 ; N Scommaaccent ; B 66 -298 588 737 ;
+C -1 ; WX 547 ; N Eogonek ; B 62 -228 620 718 ;
+C -1 ; WX 501 ; N oacute ; B 67 -14 537 750 ;
+C -1 ; WX 547 ; N Edotaccent ; B 62 0 620 915 ;
+C -1 ; WX 228 ; N iogonek ; B -11 -228 298 725 ;
+C -1 ; WX 501 ; N gcommaaccent ; B 31 -217 546 844 ;
+C -1 ; WX 501 ; N odieresis ; B 67 -14 527 729 ;
+C -1 ; WX 501 ; N ntilde ; B 53 0 529 737 ;
+C -1 ; WX 501 ; N ncaron ; B 53 0 526 750 ;
+C -1 ; WX 547 ; N Ecaron ; B 62 0 620 936 ;
+C -1 ; WX 547 ; N Ecircumflex ; B 62 0 620 936 ;
+C -1 ; WX 456 ; N scedilla ; B 52 -228 479 546 ;
+C -1 ; WX 319 ; N rcaron ; B 52 0 435 750 ;
+C -1 ; WX 547 ; N Egrave ; B 62 0 620 936 ;
+C -1 ; WX 547 ; N Eacute ; B 62 0 620 936 ;
+C -1 ; WX 638 ; N Gcommaaccent ; B 89 -298 670 737 ;
+C -1 ; WX 592 ; N Rcommaaccent ; B 62 -298 638 718 ;
+C -1 ; WX 547 ; N Edieresis ; B 62 0 620 915 ;
+C -1 ; WX 501 ; N nacute ; B 53 0 537 750 ;
+C -1 ; WX 501 ; N uogonek ; B 80 -228 540 532 ;
+C -1 ; WX 501 ; N umacron ; B 80 -14 540 678 ;
+C -1 ; WX 592 ; N Dcaron ; B 62 0 637 936 ;
+C -1 ; WX 283 ; N lcaron ; B 57 0 422 718 ;
+C -1 ; WX 592 ; N Ccaron ; B 88 -19 647 936 ;
+C -1 ; WX 592 ; N Cacute ; B 88 -19 647 936 ;
+C -1 ; WX 592 ; N Ccedilla ; B 88 -228 647 737 ;
+C -1 ; WX 328 ; N degree ; B 143 426 383 712 ;
+C -1 ; WX 592 ; N Aogonek ; B 16 -228 576 718 ;
+C -1 ; WX 479 ; N minus ; B 67 197 500 309 ;
+C -1 ; WX 479 ; N multiply ; B 47 1 520 505 ;
+C -1 ; WX 479 ; N divide ; B 67 -42 500 548 ;
+C -1 ; WX 592 ; N Aring ; B 16 0 576 989 ;
+C -1 ; WX 820 ; N trademark ; B 146 306 909 718 ;
+C -1 ; WX 319 ; N rcommaaccent ; B 5 -298 401 546 ;
+C -1 ; WX 228 ; N lacute ; B 57 0 433 936 ;
+C -1 ; WX 501 ; N omacron ; B 67 -14 527 678 ;
+C -1 ; WX 592 ; N Atilde ; B 16 0 607 923 ;
+C -1 ; WX 228 ; N icircumflex ; B 57 0 365 750 ;
+C -1 ; WX 228 ; N igrave ; B 57 0 268 750 ;
+C -1 ; WX 501 ; N ncommaaccent ; B 53 -298 516 546 ;
+C -1 ; WX 228 ; N lcommaaccent ; B 12 -298 297 718 ;
+C -1 ; WX 479 ; N plusminus ; B 33 0 512 578 ;
+C -1 ; WX 684 ; N onehalf ; B 108 -19 704 710 ;
+C -1 ; WX 684 ; N onequarter ; B 108 -19 661 710 ;
+C -1 ; WX 684 ; N threequarters ; B 82 -19 688 722 ;
+C -1 ; WX 228 ; N iacute ; B 57 0 401 750 ;
+C -1 ; WX 592 ; N Abreve ; B 16 0 597 936 ;
+C -1 ; WX 456 ; N kcommaaccent ; B 57 -298 549 718 ;
+C -1 ; WX 638 ; N Omacron ; B 88 -19 675 864 ;
+C -1 ; WX 228 ; N imacron ; B 57 0 374 678 ;
+C -1 ; WX 456 ; N emacron ; B 58 -14 488 678 ;
+C -1 ; WX 456 ; N amacron ; B 45 -14 488 678 ;
+C -1 ; WX 273 ; N tcommaaccent ; B 35 -298 346 676 ;
+C -1 ; WX 456 ; N ydieresis ; B 34 -214 535 729 ;
+C -1 ; WX 410 ; N zdotaccent ; B 16 0 478 729 ;
+C -1 ; WX 410 ; N zcaron ; B 16 0 480 750 ;
+C -1 ; WX 410 ; N zacute ; B 16 0 492 750 ;
+C -1 ; WX 456 ; N yacute ; B 34 -214 535 750 ;
+C -1 ; WX 501 ; N uhungarumlaut ; B 80 -14 643 750 ;
+C -1 ; WX 501 ; N eth ; B 67 -14 549 737 ;
+C -1 ; WX 501 ; N uring ; B 80 -14 540 776 ;
+C -1 ; WX 638 ; N Ocircumflex ; B 88 -19 675 936 ;
+C -1 ; WX 273 ; N commaaccent ; B 35 -298 175 -60 ;
+C -1 ; WX 604 ; N copyright ; B 46 -19 685 737 ;
+C -1 ; WX 604 ; N registered ; B 45 -19 684 737 ;
+C -1 ; WX 592 ; N Acircumflex ; B 16 0 579 936 ;
+C -1 ; WX 228 ; N idieresis ; B 57 0 373 729 ;
+C -1 ; WX 405 ; N lozenge ; B 80 0 447 740 ;
+C -1 ; WX 502 ; N Delta ; B 5 0 499 688 ;
+C -1 ; WX 479 ; N notequal ; B 48 -16 519 522 ;
+C -1 ; WX 450 ; N radical ; B 54 -35 605 918 ;
+C -1 ; WX 592 ; N Agrave ; B 16 0 576 936 ;
+C -1 ; WX 592 ; N Aacute ; B 16 0 615 936 ;
+C -1 ; WX 479 ; N lessequal ; B 34 0 565 672 ;
+C -1 ; WX 479 ; N greaterequal ; B 34 0 527 671 ;
+C -1 ; WX 479 ; N logicalnot ; B 86 108 519 419 ;
+C -1 ; WX 585 ; N summation ; B 12 -123 570 752 ;
+C -1 ; WX 405 ; N partialdiff ; B 39 -21 465 743 ;
+C -1 ; WX 592 ; N Ncommaaccent ; B 57 -298 661 718 ;
+C -1 ; WX 501 ; N dcroat ; B 67 -14 617 718 ;
+C -1 ; WX 230 ; N brokenbar ; B 66 -19 289 737 ;
+C -1 ; WX 501 ; N Lcommaaccent ; B 62 -298 501 718 ;
+C -1 ; WX 592 ; N Adieresis ; B 16 0 587 915 ;
+C -1 ; WX 501 ; N mu ; B 18 -207 540 532 ;
+C -1 ; WX 228 ; N .notdef ; B 21 0 21 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -30
+KPX A Ccedilla -30
+KPX A G -31
+KPX A O -31
+KPX A Odieresis -31
+KPX A Q -30
+KPX A T -72
+KPX A U -29
+KPX A Uacute -29
+KPX A Ucircumflex -29
+KPX A Udieresis -29
+KPX A Ugrave -29
+KPX A V -56
+KPX A W -46
+KPX A Y -75
+KPX A a -11
+KPX A b -11
+KPX A c -15
+KPX A ccedilla -14
+KPX A comma 9
+KPX A d -14
+KPX A e -11
+KPX A g -19
+KPX A guillemotleft -41
+KPX A guilsinglleft -39
+KPX A hyphen 1
+KPX A o -17
+KPX A period 11
+KPX A q -14
+KPX A quotedblright -54
+KPX A quoteright -56
+KPX A t -16
+KPX A u -16
+KPX A v -34
+KPX A w -24
+KPX A y -32
+KPX Aacute C -31
+KPX Aacute G -32
+KPX Aacute O -32
+KPX Aacute Q -32
+KPX Aacute T -72
+KPX Aacute U -30
+KPX Aacute V -56
+KPX Aacute W -46
+KPX Aacute Y -74
+KPX Aacute a -11
+KPX Aacute b -11
+KPX Aacute c -16
+KPX Aacute comma 9
+KPX Aacute d -16
+KPX Aacute e -12
+KPX Aacute g -19
+KPX Aacute guillemotleft -42
+KPX Aacute guilsinglleft -40
+KPX Aacute hyphen 1
+KPX Aacute o -18
+KPX Aacute period 9
+KPX Aacute q -15
+KPX Aacute quoteright -56
+KPX Aacute t -17
+KPX Aacute u -17
+KPX Aacute v -33
+KPX Aacute w -24
+KPX Aacute y -32
+KPX Acircumflex C -30
+KPX Acircumflex G -31
+KPX Acircumflex O -31
+KPX Acircumflex Q -30
+KPX Acircumflex T -72
+KPX Acircumflex U -29
+KPX Acircumflex V -56
+KPX Acircumflex W -46
+KPX Acircumflex Y -74
+KPX Acircumflex comma 10
+KPX Acircumflex period 11
+KPX Adieresis C -31
+KPX Adieresis G -32
+KPX Adieresis O -32
+KPX Adieresis Q -31
+KPX Adieresis T -72
+KPX Adieresis U -30
+KPX Adieresis V -56
+KPX Adieresis W -46
+KPX Adieresis Y -75
+KPX Adieresis a -11
+KPX Adieresis b -11
+KPX Adieresis c -15
+KPX Adieresis comma 9
+KPX Adieresis d -15
+KPX Adieresis g -19
+KPX Adieresis guillemotleft -42
+KPX Adieresis guilsinglleft -39
+KPX Adieresis hyphen 0
+KPX Adieresis o -18
+KPX Adieresis period 10
+KPX Adieresis q -15
+KPX Adieresis quotedblright -54
+KPX Adieresis quoteright -57
+KPX Adieresis t -16
+KPX Adieresis u -16
+KPX Adieresis v -34
+KPX Adieresis w -24
+KPX Adieresis y -32
+KPX Agrave C -30
+KPX Agrave G -31
+KPX Agrave O -31
+KPX Agrave Q -30
+KPX Agrave T -72
+KPX Agrave U -29
+KPX Agrave V -56
+KPX Agrave W -46
+KPX Agrave Y -75
+KPX Agrave comma 9
+KPX Agrave period 11
+KPX Aring C -30
+KPX Aring G -31
+KPX Aring O -31
+KPX Aring Q -30
+KPX Aring T -72
+KPX Aring U -29
+KPX Aring V -56
+KPX Aring W -46
+KPX Aring Y -75
+KPX Aring a -11
+KPX Aring b -11
+KPX Aring c -15
+KPX Aring comma 9
+KPX Aring d -14
+KPX Aring e -11
+KPX Aring g -19
+KPX Aring guillemotleft -41
+KPX Aring guilsinglleft -39
+KPX Aring hyphen 1
+KPX Aring o -17
+KPX Aring period 11
+KPX Aring q -14
+KPX Aring quotedblright -54
+KPX Aring quoteright -56
+KPX Aring t -16
+KPX Aring u -16
+KPX Aring v -34
+KPX Aring w -24
+KPX Aring y -32
+KPX Atilde C -32
+KPX Atilde G -33
+KPX Atilde O -33
+KPX Atilde Q -32
+KPX Atilde T -73
+KPX Atilde U -31
+KPX Atilde V -56
+KPX Atilde W -47
+KPX Atilde Y -75
+KPX Atilde comma 9
+KPX Atilde period 9
+KPX B A -27
+KPX B AE -21
+KPX B Aacute -27
+KPX B Acircumflex -27
+KPX B Adieresis -27
+KPX B Aring -27
+KPX B Atilde -27
+KPX B O -12
+KPX B OE -6
+KPX B Oacute -12
+KPX B Ocircumflex -12
+KPX B Odieresis -12
+KPX B Ograve -12
+KPX B Oslash -9
+KPX B V -31
+KPX B W -21
+KPX B Y -40
+KPX C A -29
+KPX C AE -23
+KPX C Aacute -29
+KPX C Adieresis -29
+KPX C Aring -29
+KPX C H -7
+KPX C K -13
+KPX C O -12
+KPX C Oacute -12
+KPX C Odieresis -12
+KPX Ccedilla A -31
+KPX D A -31
+KPX D Aacute -31
+KPX D Acircumflex -31
+KPX D Adieresis -31
+KPX D Agrave -31
+KPX D Aring -31
+KPX D Atilde -31
+KPX D J -1
+KPX D T -14
+KPX D V -25
+KPX D W -16
+KPX D X -28
+KPX D Y -43
+KPX F A -53
+KPX F Aacute -53
+KPX F Acircumflex -53
+KPX F Adieresis -53
+KPX F Agrave -53
+KPX F Aring -53
+KPX F Atilde -53
+KPX F J -24
+KPX F O -19
+KPX F Odieresis -19
+KPX F a -24
+KPX F aacute -24
+KPX F adieresis -24
+KPX F ae -24
+KPX F aring -24
+KPX F comma -78
+KPX F e -15
+KPX F eacute -15
+KPX F hyphen 0
+KPX F i -14
+KPX F j -13
+KPX F o -19
+KPX F oacute -19
+KPX F odieresis -19
+KPX F oe -19
+KPX F oslash -20
+KPX F period -77
+KPX F r -30
+KPX F u -31
+KPX G A -8
+KPX G AE -2
+KPX G Aacute -8
+KPX G Acircumflex -8
+KPX G Adieresis -8
+KPX G Agrave -8
+KPX G Aring -8
+KPX G Atilde -8
+KPX G T -18
+KPX G V -29
+KPX G W -20
+KPX G Y -47
+KPX J A -30
+KPX J AE -25
+KPX J Adieresis -30
+KPX J Aring -30
+KPX K C -42
+KPX K G -43
+KPX K O -43
+KPX K OE -37
+KPX K Oacute -43
+KPX K Odieresis -43
+KPX K S -30
+KPX K T 14
+KPX K a -10
+KPX K adieresis -10
+KPX K ae -11
+KPX K aring -10
+KPX K e -27
+KPX K hyphen -34
+KPX K o -35
+KPX K oacute -35
+KPX K odieresis -35
+KPX K u -30
+KPX K udieresis -30
+KPX K y -57
+KPX L A 6
+KPX L AE 12
+KPX L Aacute 6
+KPX L Adieresis 6
+KPX L Aring 6
+KPX L C -25
+KPX L Ccedilla -26
+KPX L G -27
+KPX L O -26
+KPX L Oacute -26
+KPX L Ocircumflex -26
+KPX L Odieresis -26
+KPX L Ograve -26
+KPX L Otilde -26
+KPX L S -8
+KPX L T -79
+KPX L U -23
+KPX L Udieresis -23
+KPX L V -75
+KPX L W -60
+KPX L Y -92
+KPX L hyphen -19
+KPX L quotedblright -123
+KPX L quoteright -125
+KPX L u -17
+KPX L udieresis -17
+KPX L y -50
+KPX N A -10
+KPX N AE -4
+KPX N Aacute -10
+KPX N Adieresis -10
+KPX N Aring -10
+KPX N C -3
+KPX N Ccedilla -2
+KPX N G -4
+KPX N O -4
+KPX N Oacute -4
+KPX N Odieresis -4
+KPX N a -1
+KPX N aacute -1
+KPX N adieresis -1
+KPX N ae -2
+KPX N aring -1
+KPX N comma 5
+KPX N e 2
+KPX N eacute 2
+KPX N o -3
+KPX N oacute -3
+KPX N odieresis -3
+KPX N oslash 0
+KPX N period 5
+KPX N u -1
+KPX N udieresis -2
+KPX O A -35
+KPX O AE -30
+KPX O Aacute -35
+KPX O Adieresis -35
+KPX O Aring -35
+KPX O T -21
+KPX O V -29
+KPX O W -20
+KPX O X -32
+KPX O Y -50
+KPX Oacute A -35
+KPX Oacute T -21
+KPX Oacute V -29
+KPX Oacute W -20
+KPX Oacute Y -50
+KPX Ocircumflex T -21
+KPX Ocircumflex V -29
+KPX Ocircumflex Y -50
+KPX Odieresis A -35
+KPX Odieresis T -21
+KPX Odieresis V -29
+KPX Odieresis W -20
+KPX Odieresis X -32
+KPX Odieresis Y -50
+KPX Ograve T -21
+KPX Ograve V -29
+KPX Ograve Y -50
+KPX Oslash A -32
+KPX Otilde T -21
+KPX Otilde V -29
+KPX Otilde Y -50
+KPX P A -61
+KPX P AE -56
+KPX P Aacute -61
+KPX P Adieresis -61
+KPX P Aring -61
+KPX P J -45
+KPX P a -22
+KPX P aacute -22
+KPX P adieresis -22
+KPX P ae -22
+KPX P aring -22
+KPX P comma -98
+KPX P e -20
+KPX P eacute -20
+KPX P hyphen -13
+KPX P o -24
+KPX P oacute -24
+KPX P odieresis -24
+KPX P oe -25
+KPX P oslash -25
+KPX P period -98
+KPX R C -10
+KPX R Ccedilla -9
+KPX R G -11
+KPX R O -11
+KPX R OE -5
+KPX R Oacute -11
+KPX R Odieresis -11
+KPX R T -9
+KPX R U -9
+KPX R Udieresis -9
+KPX R V -27
+KPX R W -18
+KPX R Y -36
+KPX R a -7
+KPX R aacute -7
+KPX R adieresis -7
+KPX R ae -7
+KPX R aring -7
+KPX R e -4
+KPX R eacute -4
+KPX R hyphen 7
+KPX R o -10
+KPX R oacute -10
+KPX R odieresis -10
+KPX R oe -10
+KPX R u -7
+KPX R uacute -8
+KPX R udieresis -8
+KPX R y -6
+KPX S A -20
+KPX S AE -14
+KPX S Aacute -20
+KPX S Adieresis -20
+KPX S Aring -20
+KPX S T -12
+KPX S V -29
+KPX S W -20
+KPX S Y -39
+KPX S t -5
+KPX T A -72
+KPX T AE -68
+KPX T Aacute -72
+KPX T Acircumflex -72
+KPX T Adieresis -72
+KPX T Agrave -72
+KPX T Aring -72
+KPX T Atilde -72
+KPX T C -18
+KPX T G -19
+KPX T J -77
+KPX T O -18
+KPX T OE -12
+KPX T Oacute -18
+KPX T Ocircumflex -18
+KPX T Odieresis -18
+KPX T Ograve -18
+KPX T Oslash -18
+KPX T Otilde -18
+KPX T S -3
+KPX T V 11
+KPX T W 13
+KPX T Y 13
+KPX T a -68
+KPX T ae -69
+KPX T c -68
+KPX T colon -79
+KPX T comma -61
+KPX T e -64
+KPX T g -69
+KPX T guillemotleft -92
+KPX T guilsinglleft -89
+KPX T hyphen -46
+KPX T i -9
+KPX T j -9
+KPX T o -70
+KPX T oslash -67
+KPX T period -61
+KPX T r -64
+KPX T s -69
+KPX T semicolon -79
+KPX T u -68
+KPX T v -77
+KPX T w -72
+KPX T y -76
+KPX U A -32
+KPX U AE -27
+KPX U Aacute -32
+KPX U Acircumflex -32
+KPX U Adieresis -32
+KPX U Aring -32
+KPX U Atilde -32
+KPX U comma -14
+KPX U m -5
+KPX U n -5
+KPX U p -5
+KPX U period -11
+KPX U r -5
+KPX Uacute A -32
+KPX Uacute comma -14
+KPX Uacute m -5
+KPX Uacute n -5
+KPX Uacute p -5
+KPX Uacute period -11
+KPX Uacute r -5
+KPX Ucircumflex A -32
+KPX Udieresis A -32
+KPX Udieresis b -5
+KPX Udieresis comma -14
+KPX Udieresis m -5
+KPX Udieresis n -5
+KPX Udieresis p -5
+KPX Udieresis period -11
+KPX Udieresis r -5
+KPX Ugrave A -32
+KPX V A -58
+KPX V AE -53
+KPX V Aacute -58
+KPX V Acircumflex -58
+KPX V Adieresis -58
+KPX V Agrave -58
+KPX V Aring -58
+KPX V Atilde -58
+KPX V C -33
+KPX V G -34
+KPX V O -34
+KPX V Oacute -34
+KPX V Ocircumflex -34
+KPX V Odieresis -34
+KPX V Ograve -34
+KPX V Oslash -29
+KPX V Otilde -34
+KPX V S -23
+KPX V T 13
+KPX V a -45
+KPX V ae -46
+KPX V colon -47
+KPX V comma -58
+KPX V e -41
+KPX V g -45
+KPX V guillemotleft -68
+KPX V guilsinglleft -65
+KPX V hyphen -22
+KPX V i -12
+KPX V o -47
+KPX V oslash -44
+KPX V period -58
+KPX V r -36
+KPX V semicolon -47
+KPX V u -40
+KPX V y -17
+KPX W A -47
+KPX W AE -42
+KPX W Aacute -47
+KPX W Acircumflex -47
+KPX W Adieresis -47
+KPX W Agrave -47
+KPX W Aring -47
+KPX W Atilde -47
+KPX W C -23
+KPX W G -24
+KPX W O -23
+KPX W Oacute -23
+KPX W Ocircumflex -23
+KPX W Odieresis -23
+KPX W Ograve -23
+KPX W Oslash -19
+KPX W Otilde -23
+KPX W S -18
+KPX W T 15
+KPX W a -32
+KPX W ae -33
+KPX W colon -40
+KPX W comma -42
+KPX W e -28
+KPX W g -32
+KPX W guillemotleft -55
+KPX W guilsinglleft -52
+KPX W hyphen -9
+KPX W i -10
+KPX W o -34
+KPX W oslash -31
+KPX W period -42
+KPX W r -27
+KPX W semicolon -41
+KPX W u -32
+KPX W y -11
+KPX X C -32
+KPX X O -33
+KPX X Odieresis -33
+KPX X Q -33
+KPX X a -15
+KPX X e -31
+KPX X hyphen -28
+KPX X o -37
+KPX X u -34
+KPX X y -44
+KPX Y A -73
+KPX Y AE -68
+KPX Y Aacute -73
+KPX Y Acircumflex -73
+KPX Y Adieresis -73
+KPX Y Agrave -73
+KPX Y Aring -73
+KPX Y Atilde -73
+KPX Y C -45
+KPX Y G -46
+KPX Y O -46
+KPX Y Oacute -46
+KPX Y Ocircumflex -46
+KPX Y Odieresis -46
+KPX Y Ograve -46
+KPX Y Oslash -45
+KPX Y Otilde -46
+KPX Y S -28
+KPX Y T 16
+KPX Y a -64
+KPX Y ae -65
+KPX Y colon -61
+KPX Y comma -71
+KPX Y e -60
+KPX Y g -64
+KPX Y guillemotleft -91
+KPX Y guilsinglleft -88
+KPX Y hyphen -49
+KPX Y i -9
+KPX Y o -66
+KPX Y oslash -63
+KPX Y p -48
+KPX Y period -71
+KPX Y semicolon -61
+KPX Y u -54
+KPX Y v -31
+KPX Z v -19
+KPX Z y -18
+KPX a j -2
+KPX a quoteright -11
+KPX a v -16
+KPX a w -7
+KPX a y -16
+KPX aacute v -17
+KPX aacute w -8
+KPX aacute y -17
+KPX adieresis v -16
+KPX adieresis w -7
+KPX adieresis y -16
+KPX ae v -17
+KPX ae w -7
+KPX ae y -18
+KPX agrave v -16
+KPX agrave w -7
+KPX agrave y -16
+KPX aring v -16
+KPX aring w -7
+KPX aring y -16
+KPX b v -15
+KPX b w -6
+KPX b y -17
+KPX c h -6
+KPX c k -8
+KPX comma one -65
+KPX comma quotedblright -27
+KPX comma quoteright -29
+KPX e quoteright -11
+KPX e t -4
+KPX e v -16
+KPX e w -6
+KPX e x -19
+KPX e y -17
+KPX eacute v -17
+KPX eacute w -7
+KPX eacute y -18
+KPX ecircumflex v -16
+KPX ecircumflex w -6
+KPX ecircumflex y -17
+KPX eight four 2
+KPX eight one -24
+KPX eight seven -10
+KPX f a -12
+KPX f aacute -12
+KPX f adieresis -12
+KPX f ae -13
+KPX f aring -12
+KPX f e -10
+KPX f eacute -10
+KPX f f 12
+KPX f i -11
+KPX f j -11
+KPX f l -11
+KPX f o -16
+KPX f oacute -16
+KPX f odieresis -16
+KPX f oe -16
+KPX f oslash -13
+KPX f quoteright 0
+KPX f s -13
+KPX f t 12
+KPX five four 0
+KPX five one -30
+KPX five seven -10
+KPX four four 3
+KPX four one -46
+KPX four seven -27
+KPX g a -2
+KPX g adieresis -2
+KPX g ae -3
+KPX g aring -2
+KPX g e 1
+KPX g eacute 1
+KPX g l 0
+KPX g oacute -4
+KPX g odieresis -4
+KPX g r 1
+KPX guillemotright A -42
+KPX guillemotright AE -36
+KPX guillemotright Aacute -42
+KPX guillemotright Adieresis -42
+KPX guillemotright Aring -42
+KPX guillemotright T -89
+KPX guillemotright V -63
+KPX guillemotright W -51
+KPX guillemotright Y -92
+KPX guilsinglright A -40
+KPX guilsinglright AE -35
+KPX guilsinglright Aacute -40
+KPX guilsinglright Adieresis -40
+KPX guilsinglright Aring -40
+KPX guilsinglright T -88
+KPX guilsinglright V -61
+KPX guilsinglright W -49
+KPX guilsinglright Y -90
+KPX h quoteright -13
+KPX h y -18
+KPX hyphen A 0
+KPX hyphen AE 6
+KPX hyphen Aacute 0
+KPX hyphen Adieresis 0
+KPX hyphen Aring 0
+KPX hyphen T -46
+KPX hyphen V -19
+KPX hyphen W -8
+KPX hyphen Y -52
+KPX i T -9
+KPX i j -3
+KPX k a -9
+KPX k aacute -9
+KPX k adieresis -9
+KPX k ae -9
+KPX k aring -9
+KPX k comma 7
+KPX k e -11
+KPX k eacute -11
+KPX k g -16
+KPX k hyphen -16
+KPX k o -18
+KPX k oacute -18
+KPX k odieresis -18
+KPX k period 7
+KPX k s -15
+KPX k u -12
+KPX k udieresis -6
+KPX l v -14
+KPX l y -13
+KPX m p -1
+KPX m v -17
+KPX m w -8
+KPX m y -17
+KPX n T -67
+KPX n p -2
+KPX n quoteright -12
+KPX n v -18
+KPX n w -9
+KPX n y -18
+KPX nine four 0
+KPX nine one -21
+KPX nine seven -14
+KPX o T -68
+KPX o quoteright -16
+KPX o t -7
+KPX o v -19
+KPX o w -9
+KPX o x -22
+KPX o y -21
+KPX oacute v -19
+KPX oacute w -9
+KPX oacute y -21
+KPX ocircumflex t -7
+KPX odieresis t -7
+KPX odieresis v -19
+KPX odieresis w -9
+KPX odieresis x -22
+KPX odieresis y -21
+KPX ograve v -19
+KPX ograve w -9
+KPX ograve y -21
+KPX one comma -39
+KPX one eight -41
+KPX one five -41
+KPX one four -57
+KPX one nine -42
+KPX one one -74
+KPX one period -39
+KPX one seven -55
+KPX one six -39
+KPX one three -46
+KPX one two -47
+KPX one zero -39
+KPX p t -4
+KPX p y -18
+KPX period one -65
+KPX period quotedblright -27
+KPX period quoteright -29
+KPX q c -1
+KPX q u -2
+KPX quotedblbase A 9
+KPX quotedblbase AE 15
+KPX quotedblbase T -61
+KPX quotedblbase V -58
+KPX quotedblbase W -43
+KPX quotedblbase Y -75
+KPX quotedblleft A -55
+KPX quotedblleft AE -51
+KPX quotedblleft Aacute -55
+KPX quotedblleft Adieresis -55
+KPX quotedblleft Aring -55
+KPX quotedblleft T -6
+KPX quotedblleft V 4
+KPX quotedblleft W 9
+KPX quotedblleft Y -6
+KPX quotedblright A -57
+KPX quotedblright AE -53
+KPX quotedblright Aacute -57
+KPX quotedblright Adieresis -57
+KPX quotedblright Aring -57
+KPX quotedblright T -4
+KPX quotedblright V 2
+KPX quotedblright W 7
+KPX quotedblright Y -8
+KPX quoteleft A -57
+KPX quoteleft AE -53
+KPX quoteleft Aacute -57
+KPX quoteleft Adieresis -57
+KPX quoteleft Aring -57
+KPX quoteleft T -8
+KPX quoteleft V 2
+KPX quoteleft W 7
+KPX quoteleft Y -8
+KPX quoteright A -59
+KPX quoteright AE -55
+KPX quoteright Aacute -59
+KPX quoteright Adieresis -59
+KPX quoteright Aring -59
+KPX quoteright comma -35
+KPX quoteright d -23
+KPX quoteright o -28
+KPX quoteright period -35
+KPX quoteright r -11
+KPX quoteright s -21
+KPX quoteright t 0
+KPX quoteright v -3
+KPX quoteright w 0
+KPX quoteright y -2
+KPX r a -9
+KPX r aacute -9
+KPX r acircumflex -9
+KPX r adieresis -9
+KPX r ae -9
+KPX r agrave -9
+KPX r aring -9
+KPX r c -11
+KPX r ccedilla -7
+KPX r colon -19
+KPX r comma -47
+KPX r d -9
+KPX r e -8
+KPX r eacute -8
+KPX r ecircumflex -8
+KPX r egrave -8
+KPX r f 12
+KPX r g -6
+KPX r h -10
+KPX r hyphen -30
+KPX r i -13
+KPX r j -12
+KPX r k -12
+KPX r l -12
+KPX r m -10
+KPX r n -11
+KPX r o -12
+KPX r oacute -12
+KPX r ocircumflex -12
+KPX r odieresis -12
+KPX r oe -12
+KPX r ograve -12
+KPX r oslash -13
+KPX r p -10
+KPX r period -47
+KPX r q -9
+KPX r quoteright 4
+KPX r r -10
+KPX r s -8
+KPX r semicolon -19
+KPX r t 12
+KPX r u -12
+KPX r v 8
+KPX r w 10
+KPX r x 4
+KPX r y 9
+KPX r z 0
+KPX s quoteright -12
+KPX s t -7
+KPX seven colon -48
+KPX seven comma -77
+KPX seven eight -11
+KPX seven five -20
+KPX seven four -59
+KPX seven one -14
+KPX seven period -77
+KPX seven seven 5
+KPX seven six -16
+KPX seven three -9
+KPX seven two -8
+KPX six four 0
+KPX six one -23
+KPX six seven -9
+KPX t S -5
+KPX t a -3
+KPX t aacute -3
+KPX t adieresis -3
+KPX t ae -3
+KPX t aring -3
+KPX t colon -19
+KPX t e -6
+KPX t eacute -6
+KPX t h -4
+KPX t o -12
+KPX t oacute -12
+KPX t odieresis -12
+KPX t quoteright -1
+KPX t semicolon -19
+KPX three four -1
+KPX three one -27
+KPX three seven -13
+KPX two four -21
+KPX two one -21
+KPX two seven -10
+KPX u quoteright -4
+KPX v a -21
+KPX v aacute -21
+KPX v acircumflex -21
+KPX v adieresis -21
+KPX v ae -22
+KPX v agrave -21
+KPX v aring -21
+KPX v atilde -21
+KPX v c -20
+KPX v colon -20
+KPX v comma -40
+KPX v e -17
+KPX v eacute -17
+KPX v ecircumflex -17
+KPX v egrave -17
+KPX v g -20
+KPX v hyphen 0
+KPX v l -12
+KPX v o -23
+KPX v oacute -23
+KPX v odieresis -23
+KPX v ograve -23
+KPX v oslash -20
+KPX v period -39
+KPX v s -21
+KPX v semicolon -20
+KPX w a -12
+KPX w aacute -12
+KPX w acircumflex -12
+KPX w adieresis -12
+KPX w ae -13
+KPX w agrave -12
+KPX w aring -12
+KPX w atilde -12
+KPX w c -11
+KPX w colon -18
+KPX w comma -25
+KPX w e -7
+KPX w eacute -7
+KPX w ecircumflex -7
+KPX w egrave -7
+KPX w g -11
+KPX w hyphen 9
+KPX w l -9
+KPX w o -13
+KPX w oacute -13
+KPX w odieresis -13
+KPX w ograve -13
+KPX w oslash -11
+KPX w period -25
+KPX w s -12
+KPX w semicolon -18
+KPX x a -19
+KPX x c -22
+KPX x e -18
+KPX x eacute -18
+KPX x o -24
+KPX x q -20
+KPX y a -23
+KPX y aacute -23
+KPX y acircumflex -23
+KPX y adieresis -23
+KPX y ae -23
+KPX y agrave -23
+KPX y aring -23
+KPX y atilde -23
+KPX y c -22
+KPX y colon -21
+KPX y comma -40
+KPX y e -19
+KPX y eacute -19
+KPX y ecircumflex -19
+KPX y egrave -19
+KPX y g -23
+KPX y hyphen 0
+KPX y l -14
+KPX y o -25
+KPX y oacute -25
+KPX y odieresis -25
+KPX y ograve -25
+KPX y oslash -21
+KPX y period -40
+KPX y s -23
+KPX y semicolon -22
+KPX zero four 2
+KPX zero one -20
+KPX zero seven -11
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/n019064l.pfb b/Master/xemtex/gsfonts/n019064l.pfb
new file mode 100644
index 00000000000..624082e85b3
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019064l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/n019064l.pfm b/Master/xemtex/gsfonts/n019064l.pfm
new file mode 100644
index 00000000000..5c9d79a92cb
--- /dev/null
+++ b/Master/xemtex/gsfonts/n019064l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/n021003l.afm b/Master/xemtex/gsfonts/n021003l.afm
new file mode 100644
index 00000000000..ebddf46dc7e
--- /dev/null
+++ b/Master/xemtex/gsfonts/n021003l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName NimbusRomNo9L-Regu
+FullName Nimbus Roman No9 L Regular
+FamilyName Nimbus Roman No9 L
+Weight Regular
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -168 -281 1000 924
+CapHeight 662
+XHeight 450
+Descender -217
+Ascender 683
+StartCharMetrics 316
+C 32 ; WX 250 ; N space ; B 125 0 125 0 ;
+C 33 ; WX 333 ; N exclam ; B 130 -9 237 676 ;
+C 34 ; WX 408 ; N quotedbl ; B 77 431 331 676 ;
+C 35 ; WX 500 ; N numbersign ; B 5 0 496 662 ;
+C 36 ; WX 500 ; N dollar ; B 44 -87 457 727 ;
+C 37 ; WX 833 ; N percent ; B 61 -13 772 676 ;
+C 38 ; WX 778 ; N ampersand ; B 42 -13 750 676 ;
+C 39 ; WX 333 ; N quoteright ; B 79 433 218 676 ;
+C 40 ; WX 333 ; N parenleft ; B 48 -177 304 676 ;
+C 41 ; WX 333 ; N parenright ; B 29 -177 285 676 ;
+C 42 ; WX 500 ; N asterisk ; B 69 265 432 676 ;
+C 43 ; WX 564 ; N plus ; B 30 0 534 506 ;
+C 44 ; WX 250 ; N comma ; B 56 -141 195 102 ;
+C 45 ; WX 333 ; N hyphen ; B 39 194 285 257 ;
+C 46 ; WX 250 ; N period ; B 70 -11 181 100 ;
+C 47 ; WX 278 ; N slash ; B -9 -14 287 676 ;
+C 48 ; WX 500 ; N zero ; B 24 -14 476 676 ;
+C 49 ; WX 500 ; N one ; B 111 0 394 676 ;
+C 50 ; WX 500 ; N two ; B 30 0 475 676 ;
+C 51 ; WX 500 ; N three ; B 43 -14 432 676 ;
+C 52 ; WX 500 ; N four ; B 12 0 472 676 ;
+C 53 ; WX 500 ; N five ; B 32 -14 438 688 ;
+C 54 ; WX 500 ; N six ; B 34 -14 468 684 ;
+C 55 ; WX 500 ; N seven ; B 20 -8 449 662 ;
+C 56 ; WX 500 ; N eight ; B 56 -14 445 676 ;
+C 57 ; WX 500 ; N nine ; B 30 -22 459 676 ;
+C 58 ; WX 278 ; N colon ; B 81 -11 192 459 ;
+C 59 ; WX 278 ; N semicolon ; B 80 -141 219 459 ;
+C 60 ; WX 564 ; N less ; B 28 -10 536 516 ;
+C 61 ; WX 564 ; N equal ; B 30 120 534 386 ;
+C 62 ; WX 564 ; N greater ; B 28 -10 536 516 ;
+C 63 ; WX 444 ; N question ; B 68 -8 414 676 ;
+C 64 ; WX 921 ; N at ; B 116 -14 809 676 ;
+C 65 ; WX 722 ; N A ; B 15 0 706 674 ;
+C 66 ; WX 667 ; N B ; B 17 0 593 662 ;
+C 67 ; WX 667 ; N C ; B 28 -14 633 676 ;
+C 68 ; WX 722 ; N D ; B 16 0 685 662 ;
+C 69 ; WX 611 ; N E ; B 12 0 597 662 ;
+C 70 ; WX 556 ; N F ; B 12 0 546 662 ;
+C 71 ; WX 722 ; N G ; B 32 -14 709 676 ;
+C 72 ; WX 722 ; N H ; B 19 0 702 662 ;
+C 73 ; WX 333 ; N I ; B 18 0 315 662 ;
+C 74 ; WX 389 ; N J ; B 10 -14 370 662 ;
+C 75 ; WX 722 ; N K ; B 34 0 723 662 ;
+C 76 ; WX 611 ; N L ; B 12 0 598 662 ;
+C 77 ; WX 889 ; N M ; B 12 0 863 662 ;
+C 78 ; WX 722 ; N N ; B 12 -11 707 662 ;
+C 79 ; WX 722 ; N O ; B 34 -14 688 676 ;
+C 80 ; WX 556 ; N P ; B 16 0 542 662 ;
+C 81 ; WX 722 ; N Q ; B 34 -178 701 676 ;
+C 82 ; WX 667 ; N R ; B 17 0 659 662 ;
+C 83 ; WX 556 ; N S ; B 42 -14 491 676 ;
+C 84 ; WX 611 ; N T ; B 17 0 593 662 ;
+C 85 ; WX 722 ; N U ; B 14 -14 705 662 ;
+C 86 ; WX 722 ; N V ; B 16 -11 697 662 ;
+C 87 ; WX 944 ; N W ; B 5 -11 932 662 ;
+C 88 ; WX 722 ; N X ; B 10 0 704 662 ;
+C 89 ; WX 722 ; N Y ; B 22 0 703 662 ;
+C 90 ; WX 611 ; N Z ; B 9 0 597 662 ;
+C 91 ; WX 333 ; N bracketleft ; B 88 -156 299 662 ;
+C 92 ; WX 278 ; N backslash ; B -9 -14 287 676 ;
+C 93 ; WX 333 ; N bracketright ; B 34 -156 245 662 ;
+C 94 ; WX 469 ; N asciicircum ; B 24 297 446 662 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 333 ; N quoteleft ; B 115 433 254 676 ;
+C 97 ; WX 444 ; N a ; B 37 -10 442 460 ;
+C 98 ; WX 500 ; N b ; B 3 -10 468 683 ;
+C 99 ; WX 444 ; N c ; B 25 -10 412 460 ;
+C 100 ; WX 500 ; N d ; B 27 -10 491 683 ;
+C 101 ; WX 444 ; N e ; B 25 -10 424 460 ;
+C 102 ; WX 333 ; N f ; B 20 0 383 683 ;
+C 103 ; WX 500 ; N g ; B 28 -218 470 460 ;
+C 104 ; WX 500 ; N h ; B 9 0 487 683 ;
+C 105 ; WX 278 ; N i ; B 16 0 253 683 ;
+C 106 ; WX 278 ; N j ; B -70 -218 194 683 ;
+C 107 ; WX 500 ; N k ; B 7 0 505 683 ;
+C 108 ; WX 278 ; N l ; B 19 0 257 683 ;
+C 109 ; WX 778 ; N m ; B 16 0 775 460 ;
+C 110 ; WX 500 ; N n ; B 16 0 485 460 ;
+C 111 ; WX 500 ; N o ; B 29 -10 470 460 ;
+C 112 ; WX 500 ; N p ; B 5 -217 470 460 ;
+C 113 ; WX 500 ; N q ; B 24 -217 488 461 ;
+C 114 ; WX 333 ; N r ; B 5 0 335 460 ;
+C 115 ; WX 389 ; N s ; B 51 -10 348 459 ;
+C 116 ; WX 278 ; N t ; B 13 -10 279 579 ;
+C 117 ; WX 500 ; N u ; B 9 -10 479 450 ;
+C 118 ; WX 500 ; N v ; B 19 -14 477 450 ;
+C 119 ; WX 722 ; N w ; B 21 -14 694 450 ;
+C 120 ; WX 500 ; N x ; B 17 0 479 450 ;
+C 121 ; WX 500 ; N y ; B 14 -218 475 450 ;
+C 122 ; WX 444 ; N z ; B 27 0 418 450 ;
+C 123 ; WX 480 ; N braceleft ; B 100 -181 350 680 ;
+C 124 ; WX 200 ; N bar ; B 67 -14 133 676 ;
+C 125 ; WX 480 ; N braceright ; B 130 -181 380 680 ;
+C 126 ; WX 541 ; N asciitilde ; B 40 186 502 320 ;
+C 161 ; WX 333 ; N exclamdown ; B 97 -218 204 469 ;
+C 162 ; WX 500 ; N cent ; B 53 -138 448 579 ;
+C 163 ; WX 500 ; N sterling ; B 12 -8 490 676 ;
+C 164 ; WX 167 ; N fraction ; B -168 -14 331 676 ;
+C 165 ; WX 500 ; N yen ; B -53 0 512 662 ;
+C 166 ; WX 500 ; N florin ; B 7 -189 490 676 ;
+C 167 ; WX 500 ; N section ; B 70 -148 426 676 ;
+C 168 ; WX 500 ; N currency ; B -22 58 522 602 ;
+C 169 ; WX 180 ; N quotesingle ; B 48 431 133 676 ;
+C 170 ; WX 444 ; N quotedblleft ; B 43 433 414 676 ;
+C 171 ; WX 500 ; N guillemotleft ; B 42 33 456 416 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 63 33 285 416 ;
+C 173 ; WX 333 ; N guilsinglright ; B 48 33 270 416 ;
+C 174 ; WX 556 ; N fi ; B 31 0 521 683 ;
+C 175 ; WX 556 ; N fl ; B 32 0 521 683 ;
+C 177 ; WX 500 ; N endash ; B 0 201 500 250 ;
+C 178 ; WX 500 ; N dagger ; B 59 -149 443 676 ;
+C 179 ; WX 500 ; N daggerdbl ; B 58 -153 442 676 ;
+C 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ;
+C 182 ; WX 453 ; N paragraph ; B -22 -154 450 662 ;
+C 183 ; WX 350 ; N bullet ; B 40 196 310 466 ;
+C 184 ; WX 333 ; N quotesinglbase ; B 79 -141 218 102 ;
+C 185 ; WX 444 ; N quotedblbase ; B 45 -141 416 102 ;
+C 186 ; WX 444 ; N quotedblright ; B 30 433 401 676 ;
+C 187 ; WX 500 ; N guillemotright ; B 44 33 458 416 ;
+C 188 ; WX 1000 ; N ellipsis ; B 111 -11 888 100 ;
+C 189 ; WX 1000 ; N perthousand ; B 7 -19 994 706 ;
+C 191 ; WX 444 ; N questiondown ; B 30 -218 376 468 ;
+C 193 ; WX 333 ; N grave ; B 19 507 242 678 ;
+C 194 ; WX 333 ; N acute ; B 93 507 317 678 ;
+C 195 ; WX 333 ; N circumflex ; B 11 507 322 674 ;
+C 196 ; WX 333 ; N tilde ; B 1 532 331 638 ;
+C 197 ; WX 333 ; N macron ; B 11 547 322 601 ;
+C 198 ; WX 333 ; N breve ; B 26 507 307 664 ;
+C 199 ; WX 333 ; N dotaccent ; B 118 523 217 622 ;
+C 200 ; WX 333 ; N dieresis ; B 18 523 316 622 ;
+C 202 ; WX 333 ; N ring ; B 67 512 266 711 ;
+C 203 ; WX 333 ; N cedilla ; B 52 -215 261 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B -3 507 377 678 ;
+C 206 ; WX 333 ; N ogonek ; B 64 -165 249 0 ;
+C 207 ; WX 333 ; N caron ; B 11 507 322 674 ;
+C 208 ; WX 1000 ; N emdash ; B 0 201 1000 250 ;
+C 225 ; WX 889 ; N AE ; B 0 0 863 662 ;
+C 227 ; WX 276 ; N ordfeminine ; B 4 394 270 676 ;
+C 232 ; WX 611 ; N Lslash ; B 12 0 598 662 ;
+C 233 ; WX 722 ; N Oslash ; B 34 -80 688 734 ;
+C 234 ; WX 889 ; N OE ; B 30 -6 885 668 ;
+C 235 ; WX 310 ; N ordmasculine ; B 6 394 304 676 ;
+C 241 ; WX 667 ; N ae ; B 38 -10 632 460 ;
+C 245 ; WX 278 ; N dotlessi ; B 16 0 253 460 ;
+C 248 ; WX 278 ; N lslash ; B 19 0 259 683 ;
+C 249 ; WX 500 ; N oslash ; B 29 -112 470 551 ;
+C 250 ; WX 722 ; N oe ; B 30 -10 690 460 ;
+C 251 ; WX 500 ; N germandbls ; B 12 -9 468 683 ;
+C -1 ; WX 722 ; N Udieresis ; B 14 -14 705 834 ;
+C -1 ; WX 722 ; N Uacute ; B 14 -14 705 890 ;
+C -1 ; WX 556 ; N Scedilla ; B 42 -215 491 676 ;
+C -1 ; WX 611 ; N Tcaron ; B 17 0 593 886 ;
+C -1 ; WX 556 ; N Scaron ; B 42 -14 491 886 ;
+C -1 ; WX 667 ; N Rcaron ; B 17 0 659 886 ;
+C -1 ; WX 667 ; N Racute ; B 17 0 659 890 ;
+C -1 ; WX 556 ; N Sacute ; B 42 -14 491 890 ;
+C -1 ; WX 722 ; N Otilde ; B 34 -14 688 850 ;
+C -1 ; WX 500 ; N ucircumflex ; B 9 -10 479 674 ;
+C -1 ; WX 722 ; N Ohungarumlaut ; B 34 -14 688 890 ;
+C -1 ; WX 722 ; N Uhungarumlaut ; B 14 -14 705 890 ;
+C -1 ; WX 722 ; N Yacute ; B 22 0 703 890 ;
+C -1 ; WX 722 ; N Eth ; B 16 0 685 662 ;
+C -1 ; WX 722 ; N Dcroat ; B 16 0 685 662 ;
+C -1 ; WX 611 ; N Zacute ; B 9 0 597 890 ;
+C -1 ; WX 722 ; N Uring ; B 14 -14 705 923 ;
+C -1 ; WX 500 ; N gbreve ; B 28 -218 470 664 ;
+C -1 ; WX 444 ; N eogonek ; B 25 -165 424 460 ;
+C -1 ; WX 444 ; N edotaccent ; B 25 -10 424 622 ;
+C -1 ; WX 444 ; N ecaron ; B 25 -10 424 674 ;
+C -1 ; WX 722 ; N Ugrave ; B 14 -14 705 890 ;
+C -1 ; WX 556 ; N Thorn ; B 16 0 542 662 ;
+C -1 ; WX 444 ; N eacute ; B 25 -10 424 678 ;
+C -1 ; WX 444 ; N edieresis ; B 25 -10 424 622 ;
+C -1 ; WX 600 ; N dcaron ; B 27 -10 599 683 ;
+C -1 ; WX 444 ; N ccedilla ; B 25 -215 412 460 ;
+C -1 ; WX 444 ; N ccaron ; B 25 -10 412 674 ;
+C -1 ; WX 444 ; N cacute ; B 25 -10 412 678 ;
+C -1 ; WX 444 ; N aogonek ; B 37 -165 444 460 ;
+C -1 ; WX 444 ; N aring ; B 37 -10 442 721 ;
+C -1 ; WX 444 ; N atilde ; B 37 -10 442 638 ;
+C -1 ; WX 444 ; N abreve ; B 37 -10 442 664 ;
+C -1 ; WX 444 ; N egrave ; B 25 -10 424 678 ;
+C -1 ; WX 444 ; N agrave ; B 37 -10 442 678 ;
+C -1 ; WX 444 ; N aacute ; B 37 -10 442 678 ;
+C -1 ; WX 444 ; N adieresis ; B 37 -10 442 622 ;
+C -1 ; WX 722 ; N Uogonek ; B 14 -165 705 662 ;
+C -1 ; WX 500 ; N ugrave ; B 9 -10 479 678 ;
+C -1 ; WX 500 ; N uacute ; B 9 -10 479 678 ;
+C -1 ; WX 500 ; N udieresis ; B 9 -10 479 622 ;
+C -1 ; WX 278 ; N tcaron ; B 13 -10 300 676 ;
+C -1 ; WX 389 ; N scommaaccent ; B 51 -281 348 459 ;
+C -1 ; WX 611 ; N Zcaron ; B 9 0 597 886 ;
+C -1 ; WX 444 ; N ecircumflex ; B 25 -10 424 674 ;
+C -1 ; WX 722 ; N Ucircumflex ; B 14 -14 705 886 ;
+C -1 ; WX 444 ; N acircumflex ; B 37 -10 442 674 ;
+C -1 ; WX 611 ; N Zdotaccent ; B 9 0 597 834 ;
+C -1 ; WX 389 ; N scaron ; B 39 -10 350 674 ;
+C -1 ; WX 722 ; N Amacron ; B 15 0 706 813 ;
+C -1 ; WX 389 ; N sacute ; B 51 -10 365 678 ;
+C -1 ; WX 611 ; N Tcommaaccent ; B 17 -281 593 662 ;
+C -1 ; WX 722 ; N Ydieresis ; B 22 0 703 834 ;
+C -1 ; WX 500 ; N thorn ; B 5 -217 470 683 ;
+C -1 ; WX 611 ; N Emacron ; B 12 0 597 813 ;
+C -1 ; WX 722 ; N Ograve ; B 34 -14 688 890 ;
+C -1 ; WX 722 ; N Oacute ; B 34 -14 688 890 ;
+C -1 ; WX 722 ; N Odieresis ; B 34 -14 688 834 ;
+C -1 ; WX 722 ; N Ntilde ; B 12 -11 707 850 ;
+C -1 ; WX 722 ; N Ncaron ; B 12 -11 707 886 ;
+C -1 ; WX 722 ; N Nacute ; B 12 -11 707 890 ;
+C -1 ; WX 611 ; N Lcaron ; B 12 0 598 676 ;
+C -1 ; WX 611 ; N Lacute ; B 12 0 598 890 ;
+C -1 ; WX 333 ; N Idotaccent ; B 18 0 315 834 ;
+C -1 ; WX 333 ; N racute ; B 5 0 335 678 ;
+C -1 ; WX 333 ; N Icircumflex ; B 11 0 322 886 ;
+C -1 ; WX 500 ; N ohungarumlaut ; B 29 -10 470 678 ;
+C -1 ; WX 500 ; N otilde ; B 29 -10 470 638 ;
+C -1 ; WX 500 ; N Euro ; B -16 -14 477 674 ;
+C -1 ; WX 500 ; N ocircumflex ; B 29 -10 470 674 ;
+C -1 ; WX 300 ; N onesuperior ; B 57 270 248 676 ;
+C -1 ; WX 300 ; N twosuperior ; B 1 270 296 676 ;
+C -1 ; WX 300 ; N threesuperior ; B 14 262 291 676 ;
+C -1 ; WX 333 ; N Igrave ; B 18 0 315 890 ;
+C -1 ; WX 333 ; N Iacute ; B 18 0 317 890 ;
+C -1 ; WX 333 ; N Imacron ; B 11 0 322 813 ;
+C -1 ; WX 333 ; N Iogonek ; B 18 -165 397 662 ;
+C -1 ; WX 333 ; N Idieresis ; B 18 0 316 834 ;
+C -1 ; WX 722 ; N Gbreve ; B 32 -14 709 876 ;
+C -1 ; WX 722 ; N Umacron ; B 14 -14 705 813 ;
+C -1 ; WX 722 ; N Kcommaaccent ; B 34 -281 723 662 ;
+C -1 ; WX 500 ; N ograve ; B 29 -10 470 678 ;
+C -1 ; WX 556 ; N Scommaaccent ; B 42 -281 491 676 ;
+C -1 ; WX 611 ; N Eogonek ; B 12 -165 611 662 ;
+C -1 ; WX 500 ; N oacute ; B 29 -10 470 678 ;
+C -1 ; WX 611 ; N Edotaccent ; B 12 0 597 834 ;
+C -1 ; WX 278 ; N iogonek ; B 16 -165 278 683 ;
+C -1 ; WX 500 ; N gcommaaccent ; B 28 -218 470 736 ;
+C -1 ; WX 500 ; N odieresis ; B 29 -10 470 622 ;
+C -1 ; WX 500 ; N ntilde ; B 16 0 485 638 ;
+C -1 ; WX 500 ; N ncaron ; B 16 0 485 674 ;
+C -1 ; WX 611 ; N Ecaron ; B 12 0 597 886 ;
+C -1 ; WX 611 ; N Ecircumflex ; B 12 0 597 886 ;
+C -1 ; WX 389 ; N scedilla ; B 51 -215 348 459 ;
+C -1 ; WX 333 ; N rcaron ; B 5 0 335 674 ;
+C -1 ; WX 611 ; N Egrave ; B 12 0 597 890 ;
+C -1 ; WX 611 ; N Eacute ; B 12 0 597 890 ;
+C -1 ; WX 722 ; N Gcommaaccent ; B 32 -281 709 676 ;
+C -1 ; WX 667 ; N Rcommaaccent ; B 17 -281 659 662 ;
+C -1 ; WX 611 ; N Edieresis ; B 12 0 597 834 ;
+C -1 ; WX 500 ; N nacute ; B 16 0 485 678 ;
+C -1 ; WX 500 ; N uogonek ; B 9 -165 500 450 ;
+C -1 ; WX 500 ; N umacron ; B 9 -10 479 601 ;
+C -1 ; WX 722 ; N Dcaron ; B 16 0 685 886 ;
+C -1 ; WX 348 ; N lcaron ; B 19 0 348 683 ;
+C -1 ; WX 667 ; N Ccaron ; B 28 -14 633 886 ;
+C -1 ; WX 667 ; N Cacute ; B 28 -14 633 890 ;
+C -1 ; WX 667 ; N Ccedilla ; B 28 -215 633 676 ;
+C -1 ; WX 400 ; N degree ; B 57 390 343 676 ;
+C -1 ; WX 722 ; N Aogonek ; B 15 -165 786 674 ;
+C -1 ; WX 564 ; N minus ; B 30 220 534 286 ;
+C -1 ; WX 564 ; N multiply ; B 38 8 527 497 ;
+C -1 ; WX 564 ; N divide ; B 30 -10 534 516 ;
+C -1 ; WX 722 ; N Aring ; B 15 0 706 915 ;
+C -1 ; WX 980 ; N trademark ; B 30 256 957 662 ;
+C -1 ; WX 333 ; N rcommaaccent ; B 5 -281 335 460 ;
+C -1 ; WX 278 ; N lacute ; B 19 0 290 890 ;
+C -1 ; WX 500 ; N omacron ; B 29 -10 470 601 ;
+C -1 ; WX 722 ; N Atilde ; B 15 0 706 850 ;
+C -1 ; WX 278 ; N icircumflex ; B -16 0 295 674 ;
+C -1 ; WX 278 ; N igrave ; B -8 0 253 678 ;
+C -1 ; WX 500 ; N ncommaaccent ; B 16 -281 485 460 ;
+C -1 ; WX 278 ; N lcommaaccent ; B 19 -281 257 683 ;
+C -1 ; WX 564 ; N plusminus ; B 30 0 534 568 ;
+C -1 ; WX 750 ; N onehalf ; B 31 -14 746 676 ;
+C -1 ; WX 750 ; N onequarter ; B 37 -14 718 676 ;
+C -1 ; WX 750 ; N threequarters ; B 15 -14 718 676 ;
+C -1 ; WX 278 ; N iacute ; B 16 0 290 678 ;
+C -1 ; WX 722 ; N Abreve ; B 15 0 706 876 ;
+C -1 ; WX 500 ; N kcommaaccent ; B 7 -281 505 683 ;
+C -1 ; WX 722 ; N Omacron ; B 34 -14 688 813 ;
+C -1 ; WX 278 ; N imacron ; B -16 0 292 601 ;
+C -1 ; WX 444 ; N emacron ; B 25 -10 424 601 ;
+C -1 ; WX 444 ; N amacron ; B 37 -10 442 601 ;
+C -1 ; WX 278 ; N tcommaaccent ; B 13 -281 279 579 ;
+C -1 ; WX 500 ; N ydieresis ; B 14 -218 475 622 ;
+C -1 ; WX 444 ; N zdotaccent ; B 27 0 418 622 ;
+C -1 ; WX 444 ; N zcaron ; B 27 0 418 674 ;
+C -1 ; WX 444 ; N zacute ; B 27 0 418 678 ;
+C -1 ; WX 500 ; N yacute ; B 14 -218 475 678 ;
+C -1 ; WX 500 ; N uhungarumlaut ; B 9 -10 479 678 ;
+C -1 ; WX 500 ; N eth ; B 29 -10 471 686 ;
+C -1 ; WX 500 ; N uring ; B 9 -10 479 711 ;
+C -1 ; WX 722 ; N Ocircumflex ; B 34 -14 688 886 ;
+C -1 ; WX 333 ; N commaaccent ; B 97 -281 236 -38 ;
+C -1 ; WX 760 ; N copyright ; B 38 -14 722 676 ;
+C -1 ; WX 760 ; N registered ; B 38 -14 722 676 ;
+C -1 ; WX 722 ; N Acircumflex ; B 15 0 706 886 ;
+C -1 ; WX 278 ; N idieresis ; B 11 0 269 622 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 564 ; N notequal ; B 30 -3 534 509 ;
+C -1 ; WX 549 ; N radical ; B -2 -65 526 924 ;
+C -1 ; WX 722 ; N Agrave ; B 15 0 706 890 ;
+C -1 ; WX 722 ; N Aacute ; B 15 0 706 890 ;
+C -1 ; WX 564 ; N lessequal ; B 28 0 536 628 ;
+C -1 ; WX 564 ; N greaterequal ; B 28 0 536 628 ;
+C -1 ; WX 564 ; N logicalnot ; B 30 108 534 386 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 722 ; N Ncommaaccent ; B 12 -281 707 662 ;
+C -1 ; WX 500 ; N dcroat ; B 27 -10 500 683 ;
+C -1 ; WX 200 ; N brokenbar ; B 67 -14 133 676 ;
+C -1 ; WX 611 ; N Lcommaaccent ; B 12 -281 598 662 ;
+C -1 ; WX 722 ; N Adieresis ; B 15 0 706 834 ;
+C -1 ; WX 500 ; N mu ; B 36 -218 512 450 ;
+C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -51
+KPX A Ccedilla -57
+KPX A G -57
+KPX A O -60
+KPX A Odieresis -60
+KPX A Q -60
+KPX A T -54
+KPX A U -62
+KPX A Uacute -62
+KPX A Ucircumflex -62
+KPX A Udieresis -62
+KPX A Ugrave -62
+KPX A V -131
+KPX A W -113
+KPX A Y -81
+KPX A a -6
+KPX A b -20
+KPX A c -29
+KPX A ccedilla -29
+KPX A comma -3
+KPX A d -28
+KPX A e -27
+KPX A g -20
+KPX A guillemotleft -64
+KPX A guilsinglleft -74
+KPX A hyphen -23
+KPX A o -40
+KPX A period -10
+KPX A q -21
+KPX A quotedblright -91
+KPX A quoteright -116
+KPX A t -20
+KPX A u -28
+KPX A v -81
+KPX A w -73
+KPX A y -83
+KPX Aacute C -51
+KPX Aacute G -57
+KPX Aacute O -60
+KPX Aacute Q -60
+KPX Aacute T -54
+KPX Aacute U -62
+KPX Aacute V -131
+KPX Aacute W -113
+KPX Aacute Y -81
+KPX Aacute a -6
+KPX Aacute b -20
+KPX Aacute c -29
+KPX Aacute comma -3
+KPX Aacute d -28
+KPX Aacute e -27
+KPX Aacute g -20
+KPX Aacute guillemotleft -64
+KPX Aacute guilsinglleft -74
+KPX Aacute hyphen -23
+KPX Aacute o -40
+KPX Aacute period -10
+KPX Aacute q -21
+KPX Aacute quoteright -116
+KPX Aacute t -20
+KPX Aacute u -28
+KPX Aacute v -81
+KPX Aacute w -73
+KPX Aacute y -83
+KPX Acircumflex C -51
+KPX Acircumflex G -57
+KPX Acircumflex O -60
+KPX Acircumflex Q -60
+KPX Acircumflex T -54
+KPX Acircumflex U -62
+KPX Acircumflex V -131
+KPX Acircumflex W -113
+KPX Acircumflex Y -81
+KPX Acircumflex comma -3
+KPX Acircumflex period -10
+KPX Adieresis C -51
+KPX Adieresis G -57
+KPX Adieresis O -60
+KPX Adieresis Q -60
+KPX Adieresis T -54
+KPX Adieresis U -62
+KPX Adieresis V -131
+KPX Adieresis W -113
+KPX Adieresis Y -81
+KPX Adieresis a -6
+KPX Adieresis b -20
+KPX Adieresis c -29
+KPX Adieresis comma -3
+KPX Adieresis d -28
+KPX Adieresis g -20
+KPX Adieresis guillemotleft -64
+KPX Adieresis guilsinglleft -74
+KPX Adieresis hyphen -23
+KPX Adieresis o -40
+KPX Adieresis period -10
+KPX Adieresis q -21
+KPX Adieresis quotedblright -91
+KPX Adieresis quoteright -116
+KPX Adieresis t -20
+KPX Adieresis u -28
+KPX Adieresis v -81
+KPX Adieresis w -73
+KPX Adieresis y -83
+KPX Agrave C -51
+KPX Agrave G -57
+KPX Agrave O -60
+KPX Agrave Q -60
+KPX Agrave T -54
+KPX Agrave U -62
+KPX Agrave V -131
+KPX Agrave W -113
+KPX Agrave Y -81
+KPX Agrave comma -3
+KPX Agrave period -10
+KPX Aring C -51
+KPX Aring G -57
+KPX Aring O -60
+KPX Aring Q -60
+KPX Aring T -54
+KPX Aring U -62
+KPX Aring V -131
+KPX Aring W -113
+KPX Aring Y -81
+KPX Aring a -6
+KPX Aring b -20
+KPX Aring c -29
+KPX Aring comma -3
+KPX Aring d -28
+KPX Aring e -27
+KPX Aring g -20
+KPX Aring guillemotleft -64
+KPX Aring guilsinglleft -74
+KPX Aring hyphen -23
+KPX Aring o -40
+KPX Aring period -10
+KPX Aring q -21
+KPX Aring quotedblright -91
+KPX Aring quoteright -116
+KPX Aring t -20
+KPX Aring u -28
+KPX Aring v -81
+KPX Aring w -73
+KPX Aring y -83
+KPX Atilde C -51
+KPX Atilde G -57
+KPX Atilde O -60
+KPX Atilde Q -60
+KPX Atilde T -54
+KPX Atilde U -62
+KPX Atilde V -131
+KPX Atilde W -113
+KPX Atilde Y -81
+KPX Atilde comma -3
+KPX Atilde period -10
+KPX B A -51
+KPX B AE -44
+KPX B Aacute -51
+KPX B Acircumflex -51
+KPX B Adieresis -51
+KPX B Aring -51
+KPX B Atilde -51
+KPX B O -24
+KPX B OE -18
+KPX B Oacute -24
+KPX B Ocircumflex -24
+KPX B Odieresis -24
+KPX B Ograve -24
+KPX B Oslash -23
+KPX B V -65
+KPX B W -59
+KPX B Y -68
+KPX C A -23
+KPX C AE -15
+KPX C Aacute -23
+KPX C Adieresis -23
+KPX C Aring -23
+KPX C H -2
+KPX C K -10
+KPX C O -12
+KPX C Oacute -12
+KPX C Odieresis -12
+KPX Ccedilla A -27
+KPX D A -67
+KPX D Aacute -67
+KPX D Acircumflex -67
+KPX D Adieresis -67
+KPX D Agrave -67
+KPX D Aring -67
+KPX D Atilde -67
+KPX D J -41
+KPX D T -10
+KPX D V -71
+KPX D W -57
+KPX D X -64
+KPX D Y -74
+KPX F A -71
+KPX F Aacute -71
+KPX F Acircumflex -71
+KPX F Adieresis -71
+KPX F Agrave -71
+KPX F Aring -71
+KPX F Atilde -71
+KPX F J -13
+KPX F O -10
+KPX F Odieresis -10
+KPX F a -34
+KPX F aacute -34
+KPX F adieresis -10
+KPX F ae -36
+KPX F aring -34
+KPX F comma -51
+KPX F e -19
+KPX F eacute -19
+KPX F hyphen 3
+KPX F i -13
+KPX F j -20
+KPX F o -21
+KPX F oacute -21
+KPX F odieresis -21
+KPX F oe -21
+KPX F oslash -21
+KPX F period -58
+KPX F r -10
+KPX F u -11
+KPX G A -26
+KPX G AE -19
+KPX G Aacute -26
+KPX G Acircumflex -26
+KPX G Adieresis -26
+KPX G Agrave -26
+KPX G Aring -26
+KPX G Atilde -26
+KPX G T -21
+KPX G V -23
+KPX G W -18
+KPX G Y -26
+KPX J A -53
+KPX J AE -46
+KPX J Adieresis -53
+KPX J Aring -53
+KPX K C -43
+KPX K G -49
+KPX K O -51
+KPX K OE -44
+KPX K Oacute -51
+KPX K Odieresis -51
+KPX K S 1
+KPX K T 0
+KPX K a 2
+KPX K adieresis 2
+KPX K ae 0
+KPX K aring 2
+KPX K e -19
+KPX K hyphen -63
+KPX K o -31
+KPX K oacute -31
+KPX K odieresis -31
+KPX K u -19
+KPX K udieresis -19
+KPX K y -86
+KPX L A 0
+KPX L AE 6
+KPX L Aacute 0
+KPX L Adieresis 0
+KPX L Aring 0
+KPX L C 2
+KPX L Ccedilla 0
+KPX L G 0
+KPX L O -3
+KPX L Oacute -3
+KPX L Ocircumflex -3
+KPX L Odieresis -3
+KPX L Ograve -3
+KPX L Otilde -3
+KPX L S 5
+KPX L T -73
+KPX L U -26
+KPX L Udieresis -26
+KPX L V -115
+KPX L W -89
+KPX L Y -100
+KPX L hyphen 25
+KPX L quotedblright -100
+KPX L quoteright -125
+KPX L u -10
+KPX L udieresis -10
+KPX L y -56
+KPX N A -28
+KPX N AE -21
+KPX N Aacute -28
+KPX N Adieresis -28
+KPX N Aring -28
+KPX N C -16
+KPX N Ccedilla -16
+KPX N G -19
+KPX N O -20
+KPX N Oacute -20
+KPX N Odieresis -20
+KPX N a -27
+KPX N aacute -27
+KPX N adieresis -27
+KPX N ae -27
+KPX N aring -27
+KPX N comma -14
+KPX N e -17
+KPX N eacute -17
+KPX N o -21
+KPX N oacute -21
+KPX N odieresis -21
+KPX N oslash -20
+KPX N period -21
+KPX N u -25
+KPX N udieresis -25
+KPX O A -58
+KPX O AE -50
+KPX O Aacute -58
+KPX O Adieresis -58
+KPX O Aring -58
+KPX O T -9
+KPX O V -69
+KPX O W -54
+KPX O X -55
+KPX O Y -72
+KPX Oacute A -58
+KPX Oacute T -9
+KPX Oacute V -69
+KPX Oacute W -54
+KPX Oacute Y -72
+KPX Ocircumflex T -9
+KPX Ocircumflex V -69
+KPX Ocircumflex Y -72
+KPX Odieresis A -58
+KPX Odieresis T -9
+KPX Odieresis V -69
+KPX Odieresis W -54
+KPX Odieresis X -55
+KPX Odieresis Y -72
+KPX Ograve T -9
+KPX Ograve V -69
+KPX Ograve Y -72
+KPX Oslash A -58
+KPX Otilde T -9
+KPX Otilde V -69
+KPX Otilde Y -72
+KPX P A -90
+KPX P AE -91
+KPX P Aacute -90
+KPX P Adieresis -90
+KPX P Aring -90
+KPX P J -52
+KPX P a -17
+KPX P aacute -17
+KPX P adieresis -17
+KPX P ae -18
+KPX P aring -17
+KPX P comma -94
+KPX P e -23
+KPX P eacute -23
+KPX P hyphen -37
+KPX P o -25
+KPX P oacute -25
+KPX P odieresis -25
+KPX P oe -25
+KPX P oslash -25
+KPX P period -101
+KPX R C -41
+KPX R Ccedilla -41
+KPX R G -44
+KPX R O -45
+KPX R OE -39
+KPX R Oacute -45
+KPX R Odieresis -45
+KPX R T -34
+KPX R U -56
+KPX R Udieresis -55
+KPX R V -73
+KPX R W -67
+KPX R Y -76
+KPX R a -2
+KPX R aacute -2
+KPX R adieresis -2
+KPX R ae -5
+KPX R aring -2
+KPX R e -23
+KPX R eacute -23
+KPX R hyphen -52
+KPX R o -36
+KPX R oacute -36
+KPX R odieresis -36
+KPX R oe -31
+KPX R u -24
+KPX R uacute -24
+KPX R udieresis -24
+KPX R y -37
+KPX S A -37
+KPX S AE -30
+KPX S Aacute -37
+KPX S Adieresis -37
+KPX S Aring -37
+KPX S T -19
+KPX S V -27
+KPX S W -21
+KPX S Y -30
+KPX S t -20
+KPX T A -53
+KPX T AE -45
+KPX T Aacute -53
+KPX T Acircumflex -53
+KPX T Adieresis -53
+KPX T Agrave -53
+KPX T Aring -53
+KPX T Atilde -53
+KPX T C -8
+KPX T G -11
+KPX T J -18
+KPX T O -10
+KPX T OE -4
+KPX T Oacute -10
+KPX T Ocircumflex -10
+KPX T Odieresis -10
+KPX T Ograve -10
+KPX T Oslash -10
+KPX T Otilde -10
+KPX T S -10
+KPX T V 14
+KPX T W 20
+KPX T Y 11
+KPX T a -77
+KPX T ae -80
+KPX T c -87
+KPX T colon -87
+KPX T comma -74
+KPX T e -86
+KPX T g -91
+KPX T guillemotleft -114
+KPX T guilsinglleft -125
+KPX T hyphen -73
+KPX T i -18
+KPX T j -25
+KPX T o -90
+KPX T oslash -89
+KPX T period -82
+KPX T r -50
+KPX T s -73
+KPX T semicolon -87
+KPX T u -93
+KPX T v -105
+KPX T w -106
+KPX T y -102
+KPX U A -65
+KPX U AE -58
+KPX U Aacute -65
+KPX U Acircumflex -65
+KPX U Adieresis -65
+KPX U Aring -65
+KPX U Atilde -65
+KPX U comma -31
+KPX U m -33
+KPX U n -31
+KPX U p -28
+KPX U period -37
+KPX U r -27
+KPX Uacute A -65
+KPX Uacute comma -31
+KPX Uacute m -33
+KPX Uacute n -31
+KPX Uacute p -28
+KPX Uacute period -37
+KPX Uacute r -27
+KPX Ucircumflex A -65
+KPX Udieresis A -65
+KPX Udieresis b 21
+KPX Udieresis comma -31
+KPX Udieresis m -33
+KPX Udieresis n -31
+KPX Udieresis p -28
+KPX Udieresis period -37
+KPX Udieresis r -27
+KPX Ugrave A -65
+KPX V A -124
+KPX V AE -104
+KPX V Aacute -124
+KPX V Acircumflex -124
+KPX V Adieresis -124
+KPX V Agrave -124
+KPX V Aring -124
+KPX V Atilde -124
+KPX V C -63
+KPX V G -66
+KPX V O -67
+KPX V Oacute -67
+KPX V Ocircumflex -67
+KPX V Odieresis -67
+KPX V Ograve -67
+KPX V Oslash -65
+KPX V Otilde -67
+KPX V S -47
+KPX V T 10
+KPX V a -88
+KPX V ae -89
+KPX V colon -90
+KPX V comma -105
+KPX V e -85
+KPX V g -101
+KPX V guillemotleft -109
+KPX V guilsinglleft -119
+KPX V hyphen -69
+KPX V i -20
+KPX V o -89
+KPX V oslash -88
+KPX V period -112
+KPX V r -56
+KPX V semicolon -89
+KPX V u -51
+KPX V y -54
+KPX W A -113
+KPX W AE -98
+KPX W Aacute -113
+KPX W Acircumflex -113
+KPX W Adieresis -113
+KPX W Agrave -113
+KPX W Aring -113
+KPX W Atilde -113
+KPX W C -53
+KPX W G -56
+KPX W O -56
+KPX W Oacute -56
+KPX W Ocircumflex -56
+KPX W Odieresis -56
+KPX W Ograve -56
+KPX W Oslash -55
+KPX W Otilde -56
+KPX W S -41
+KPX W T 17
+KPX W a -80
+KPX W ae -81
+KPX W colon -81
+KPX W comma -89
+KPX W e -72
+KPX W g -91
+KPX W guillemotleft -97
+KPX W guilsinglleft -107
+KPX W hyphen -56
+KPX W i -13
+KPX W o -76
+KPX W oslash -75
+KPX W period -96
+KPX W r -47
+KPX W semicolon -81
+KPX W u -43
+KPX W y -45
+KPX X C -52
+KPX X O -61
+KPX X Odieresis -61
+KPX X Q -61
+KPX X a -7
+KPX X e -28
+KPX X hyphen -54
+KPX X o -41
+KPX X u -29
+KPX X y -96
+KPX Y A -74
+KPX Y AE -67
+KPX Y Aacute -74
+KPX Y Acircumflex -74
+KPX Y Adieresis -74
+KPX Y Agrave -74
+KPX Y Aring -74
+KPX Y Atilde -74
+KPX Y C -68
+KPX Y G -71
+KPX Y O -69
+KPX Y Oacute -69
+KPX Y Ocircumflex -69
+KPX Y Odieresis -69
+KPX Y Ograve -69
+KPX Y Oslash -69
+KPX Y Otilde -69
+KPX Y S -44
+KPX Y T 13
+KPX Y a -99
+KPX Y ae -102
+KPX Y colon -109
+KPX Y comma -96
+KPX Y e -103
+KPX Y g -113
+KPX Y guillemotleft -135
+KPX Y guilsinglleft -145
+KPX Y hyphen -98
+KPX Y i -17
+KPX Y o -107
+KPX Y oslash -106
+KPX Y p -88
+KPX Y period -103
+KPX Y semicolon -108
+KPX Y u -78
+KPX Y v -86
+KPX Z v -48
+KPX Z y -50
+KPX a j -26
+KPX a quoteright -40
+KPX a v -30
+KPX a w -31
+KPX a y -32
+KPX aacute v -30
+KPX aacute w -31
+KPX aacute y -32
+KPX adieresis v -30
+KPX adieresis w -31
+KPX adieresis y -32
+KPX ae v -27
+KPX ae w -28
+KPX ae y -30
+KPX agrave v -30
+KPX agrave w -31
+KPX agrave y -32
+KPX aring v -30
+KPX aring w -31
+KPX aring y -32
+KPX b v -29
+KPX b w -30
+KPX b y -32
+KPX c h -15
+KPX c k -19
+KPX comma one -52
+KPX comma quotedblright -29
+KPX comma quoteright -53
+KPX e quoteright -30
+KPX e t -10
+KPX e v -27
+KPX e w -28
+KPX e x -35
+KPX e y -30
+KPX eacute v -27
+KPX eacute w -28
+KPX eacute y -30
+KPX ecircumflex v -27
+KPX ecircumflex w -28
+KPX ecircumflex y -30
+KPX eight four 0
+KPX eight one -64
+KPX eight seven -15
+KPX f a -25
+KPX f aacute -25
+KPX f adieresis 12
+KPX f ae -25
+KPX f aring -6
+KPX f e -34
+KPX f eacute -34
+KPX f f 6
+KPX f i 15
+KPX f j 8
+KPX f l 44
+KPX f o -38
+KPX f oacute -38
+KPX f odieresis -1
+KPX f oe -36
+KPX f oslash -37
+KPX f quoteright 17
+KPX f s -21
+KPX f t 10
+KPX five four -8
+KPX five one -70
+KPX five seven -36
+KPX four four 14
+KPX four one -75
+KPX four seven -42
+KPX g a -17
+KPX g adieresis -17
+KPX g ae -18
+KPX g aring -17
+KPX g e -25
+KPX g eacute -25
+KPX g l -7
+KPX g oacute -26
+KPX g odieresis -26
+KPX g r 11
+KPX guillemotright A -62
+KPX guillemotright AE -61
+KPX guillemotright Aacute -62
+KPX guillemotright Adieresis -62
+KPX guillemotright Aring -62
+KPX guillemotright T -114
+KPX guillemotright V -117
+KPX guillemotright W -95
+KPX guillemotright Y -138
+KPX guilsinglright A -72
+KPX guilsinglright AE -71
+KPX guilsinglright Aacute -72
+KPX guilsinglright Adieresis -72
+KPX guilsinglright Aring -72
+KPX guilsinglright T -124
+KPX guilsinglright V -128
+KPX guilsinglright W -105
+KPX guilsinglright Y -149
+KPX h quoteright -38
+KPX h y -30
+KPX hyphen A -26
+KPX hyphen AE -25
+KPX hyphen Aacute -26
+KPX hyphen Adieresis -26
+KPX hyphen Aring -26
+KPX hyphen T -77
+KPX hyphen V -82
+KPX hyphen W -59
+KPX hyphen Y -108
+KPX i T -28
+KPX i j -36
+KPX k a 1
+KPX k aacute 1
+KPX k adieresis 1
+KPX k ae -1
+KPX k aring 1
+KPX k comma 4
+KPX k e -19
+KPX k eacute -19
+KPX k g -12
+KPX k hyphen -65
+KPX k o -32
+KPX k oacute -32
+KPX k odieresis -32
+KPX k period -2
+KPX k s 5
+KPX k u 14
+KPX k udieresis 14
+KPX l v -28
+KPX l y -25
+KPX m p -9
+KPX m v -30
+KPX m w -31
+KPX m y -31
+KPX n T -55
+KPX n p -13
+KPX n quoteright -39
+KPX n v -30
+KPX n w -31
+KPX n y -31
+KPX nine four -7
+KPX nine one -63
+KPX nine seven -6
+KPX o T -91
+KPX o quoteright -34
+KPX o t -9
+KPX o v -36
+KPX o w -36
+KPX o x -36
+KPX o y -41
+KPX oacute v -36
+KPX oacute w -36
+KPX oacute y -41
+KPX ocircumflex t -9
+KPX odieresis t -9
+KPX odieresis v -36
+KPX odieresis w -36
+KPX odieresis x -36
+KPX odieresis y -41
+KPX ograve v -36
+KPX ograve w -36
+KPX ograve y -41
+KPX one comma -48
+KPX one eight -68
+KPX one five -37
+KPX one four -72
+KPX one nine -61
+KPX one one -78
+KPX one period -55
+KPX one seven -78
+KPX one six -66
+KPX one three -41
+KPX one two -34
+KPX one zero -54
+KPX p t -6
+KPX p y -28
+KPX period one -61
+KPX period quotedblright -33
+KPX period quoteright -58
+KPX q c -7
+KPX q u -12
+KPX quotedblbase A 12
+KPX quotedblbase AE 19
+KPX quotedblbase T -60
+KPX quotedblbase V -104
+KPX quotedblbase W -76
+KPX quotedblbase Y -87
+KPX quotedblleft A -86
+KPX quotedblleft AE -91
+KPX quotedblleft Aacute -86
+KPX quotedblleft Adieresis -86
+KPX quotedblleft Aring -86
+KPX quotedblleft T 14
+KPX quotedblleft V 1
+KPX quotedblleft W 7
+KPX quotedblleft Y -1
+KPX quotedblright A -94
+KPX quotedblright AE -99
+KPX quotedblright Aacute -94
+KPX quotedblright Adieresis -94
+KPX quotedblright Aring -94
+KPX quotedblright T 11
+KPX quotedblright V 0
+KPX quotedblright W 6
+KPX quotedblright Y -2
+KPX quoteleft A -110
+KPX quoteleft AE -115
+KPX quoteleft Aacute -110
+KPX quoteleft Adieresis -110
+KPX quoteleft Aring -110
+KPX quoteleft T -9
+KPX quoteleft V -23
+KPX quoteleft W -17
+KPX quoteleft Y -26
+KPX quoteright A -130
+KPX quoteright AE -135
+KPX quoteright Aacute -130
+KPX quoteright Adieresis -130
+KPX quoteright Aring -130
+KPX quoteright comma -71
+KPX quoteright d -56
+KPX quoteright o -54
+KPX quoteright period -78
+KPX quoteright r -44
+KPX quoteright s -47
+KPX quoteright t -43
+KPX quoteright v -47
+KPX quoteright w -47
+KPX quoteright y -45
+KPX r a -1
+KPX r aacute -1
+KPX r acircumflex -1
+KPX r adieresis -1
+KPX r ae -3
+KPX r agrave -1
+KPX r aring -1
+KPX r c -8
+KPX r ccedilla -8
+KPX r colon -7
+KPX r comma -41
+KPX r d -10
+KPX r e -6
+KPX r eacute -6
+KPX r ecircumflex -6
+KPX r egrave -6
+KPX r f 19
+KPX r g -15
+KPX r h -6
+KPX r hyphen -46
+KPX r i 20
+KPX r j 14
+KPX r k -10
+KPX r l -18
+KPX r m 20
+KPX r n 22
+KPX r o -8
+KPX r oacute -8
+KPX r ocircumflex -8
+KPX r odieresis -8
+KPX r oe -7
+KPX r ograve -8
+KPX r oslash -7
+KPX r p 25
+KPX r period -48
+KPX r q -10
+KPX r quoteright -19
+KPX r r 26
+KPX r s 0
+KPX r semicolon -7
+KPX r t 23
+KPX r u 19
+KPX r v 20
+KPX r w 19
+KPX r x 17
+KPX r y 22
+KPX r z 2
+KPX s quoteright -38
+KPX s t -15
+KPX seven colon -68
+KPX seven comma -72
+KPX seven eight -40
+KPX seven five -59
+KPX seven four -63
+KPX seven one -56
+KPX seven period -79
+KPX seven seven -20
+KPX seven six -46
+KPX seven three -35
+KPX seven two -31
+KPX six four 12
+KPX six one -74
+KPX six seven -29
+KPX t S 2
+KPX t a 10
+KPX t aacute 10
+KPX t adieresis 10
+KPX t ae 9
+KPX t aring 10
+KPX t colon -8
+KPX t e 0
+KPX t eacute 0
+KPX t h 10
+KPX t o -8
+KPX t oacute -8
+KPX t odieresis -8
+KPX t quoteright -29
+KPX t semicolon -8
+KPX three four -6
+KPX three one -75
+KPX three seven -28
+KPX two four 0
+KPX two one -60
+KPX two seven -16
+KPX u quoteright -36
+KPX v a -24
+KPX v aacute -24
+KPX v acircumflex -24
+KPX v adieresis -24
+KPX v ae -24
+KPX v agrave -24
+KPX v aring -24
+KPX v atilde -24
+KPX v c -37
+KPX v colon -20
+KPX v comma -69
+KPX v e -36
+KPX v eacute -36
+KPX v ecircumflex -36
+KPX v egrave -36
+KPX v g -41
+KPX v hyphen -28
+KPX v l -31
+KPX v o -38
+KPX v oacute -38
+KPX v odieresis -38
+KPX v ograve -38
+KPX v oslash -38
+KPX v period -76
+KPX v s -21
+KPX v semicolon -20
+KPX w a -27
+KPX w aacute -27
+KPX w acircumflex -27
+KPX w adieresis -27
+KPX w ae -27
+KPX w agrave -27
+KPX w aring -27
+KPX w atilde -27
+KPX w c -33
+KPX w colon -23
+KPX w comma -64
+KPX w e -31
+KPX w eacute -31
+KPX w ecircumflex -31
+KPX w egrave -31
+KPX w g -43
+KPX w hyphen -24
+KPX w l -33
+KPX w o -35
+KPX w oacute -35
+KPX w odieresis -35
+KPX w ograve -35
+KPX w oslash -34
+KPX w period -71
+KPX w s -23
+KPX w semicolon -23
+KPX x a -11
+KPX x c -34
+KPX x e -32
+KPX x eacute -32
+KPX x o -45
+KPX x q -26
+KPX y a -32
+KPX y aacute -32
+KPX y acircumflex -32
+KPX y adieresis -32
+KPX y ae -31
+KPX y agrave -32
+KPX y aring -32
+KPX y atilde -32
+KPX y c -37
+KPX y colon -23
+KPX y comma -66
+KPX y e -35
+KPX y eacute -35
+KPX y ecircumflex -35
+KPX y egrave -35
+KPX y g -48
+KPX y hyphen -27
+KPX y l -32
+KPX y o -39
+KPX y oacute -39
+KPX y odieresis -39
+KPX y ograve -39
+KPX y oslash -38
+KPX y period -73
+KPX y s -26
+KPX y semicolon -23
+KPX zero four 12
+KPX zero one -55
+KPX zero seven -5
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/n021003l.pfb b/Master/xemtex/gsfonts/n021003l.pfb
new file mode 100644
index 00000000000..68f0d5e134c
--- /dev/null
+++ b/Master/xemtex/gsfonts/n021003l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/n021003l.pfm b/Master/xemtex/gsfonts/n021003l.pfm
new file mode 100644
index 00000000000..c5f29ee5fb1
--- /dev/null
+++ b/Master/xemtex/gsfonts/n021003l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/n021004l.afm b/Master/xemtex/gsfonts/n021004l.afm
new file mode 100644
index 00000000000..9a1037594bb
--- /dev/null
+++ b/Master/xemtex/gsfonts/n021004l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName NimbusRomNo9L-Medi
+FullName Nimbus Roman No9 L Medium
+FamilyName Nimbus Roman No9 L
+Weight Bold
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -168 -341 1000 960
+CapHeight 676
+XHeight 461
+Descender -205
+Ascender 676
+StartCharMetrics 316
+C 32 ; WX 250 ; N space ; B 125 0 125 0 ;
+C 33 ; WX 333 ; N exclam ; B 81 -13 251 691 ;
+C 34 ; WX 555 ; N quotedbl ; B 83 404 472 691 ;
+C 35 ; WX 500 ; N numbersign ; B 4 0 496 700 ;
+C 36 ; WX 500 ; N dollar ; B 29 -99 472 750 ;
+C 37 ; WX 1000 ; N percent ; B 124 -14 877 692 ;
+C 38 ; WX 833 ; N ampersand ; B 62 -16 787 691 ;
+C 39 ; WX 333 ; N quoteright ; B 79 356 263 691 ;
+C 40 ; WX 333 ; N parenleft ; B 46 -168 306 694 ;
+C 41 ; WX 333 ; N parenright ; B 27 -168 287 694 ;
+C 42 ; WX 500 ; N asterisk ; B 56 255 447 691 ;
+C 43 ; WX 570 ; N plus ; B 33 0 537 506 ;
+C 44 ; WX 250 ; N comma ; B 39 -180 223 155 ;
+C 45 ; WX 333 ; N hyphen ; B 44 171 287 287 ;
+C 46 ; WX 250 ; N period ; B 41 -13 210 156 ;
+C 47 ; WX 278 ; N slash ; B -24 -19 302 691 ;
+C 48 ; WX 500 ; N zero ; B 24 -13 476 688 ;
+C 49 ; WX 500 ; N one ; B 65 0 442 688 ;
+C 50 ; WX 500 ; N two ; B 17 0 478 688 ;
+C 51 ; WX 500 ; N three ; B 16 -14 468 688 ;
+C 52 ; WX 500 ; N four ; B 19 0 475 688 ;
+C 53 ; WX 500 ; N five ; B 22 -8 470 676 ;
+C 54 ; WX 500 ; N six ; B 28 -13 475 688 ;
+C 55 ; WX 500 ; N seven ; B 17 0 477 676 ;
+C 56 ; WX 500 ; N eight ; B 28 -13 472 688 ;
+C 57 ; WX 500 ; N nine ; B 26 -13 473 688 ;
+C 58 ; WX 333 ; N colon ; B 82 -13 251 472 ;
+C 59 ; WX 333 ; N semicolon ; B 82 -180 266 472 ;
+C 60 ; WX 570 ; N less ; B 31 -12 539 518 ;
+C 61 ; WX 570 ; N equal ; B 33 107 537 399 ;
+C 62 ; WX 570 ; N greater ; B 31 -12 539 518 ;
+C 63 ; WX 500 ; N question ; B 57 -13 445 689 ;
+C 64 ; WX 930 ; N at ; B 108 -19 822 691 ;
+C 65 ; WX 722 ; N A ; B 9 0 689 690 ;
+C 66 ; WX 667 ; N B ; B 16 0 619 676 ;
+C 67 ; WX 722 ; N C ; B 49 -19 687 691 ;
+C 68 ; WX 722 ; N D ; B 14 0 690 676 ;
+C 69 ; WX 667 ; N E ; B 16 0 641 676 ;
+C 70 ; WX 611 ; N F ; B 16 0 583 676 ;
+C 71 ; WX 778 ; N G ; B 37 -19 755 691 ;
+C 72 ; WX 778 ; N H ; B 21 0 759 676 ;
+C 73 ; WX 389 ; N I ; B 20 0 370 676 ;
+C 74 ; WX 500 ; N J ; B 3 -96 479 676 ;
+C 75 ; WX 778 ; N K ; B 30 0 769 676 ;
+C 76 ; WX 667 ; N L ; B 19 0 638 676 ;
+C 77 ; WX 944 ; N M ; B 14 0 921 676 ;
+C 78 ; WX 722 ; N N ; B 16 -18 701 676 ;
+C 79 ; WX 778 ; N O ; B 35 -19 743 691 ;
+C 80 ; WX 611 ; N P ; B 16 0 600 676 ;
+C 81 ; WX 778 ; N Q ; B 35 -176 743 691 ;
+C 82 ; WX 722 ; N R ; B 26 0 715 676 ;
+C 83 ; WX 556 ; N S ; B 35 -19 513 692 ;
+C 84 ; WX 667 ; N T ; B 31 0 636 676 ;
+C 85 ; WX 722 ; N U ; B 16 -19 701 676 ;
+C 86 ; WX 722 ; N V ; B 16 -18 701 676 ;
+C 87 ; WX 1000 ; N W ; B 19 -15 981 676 ;
+C 88 ; WX 722 ; N X ; B 16 0 699 676 ;
+C 89 ; WX 722 ; N Y ; B 15 0 699 676 ;
+C 90 ; WX 667 ; N Z ; B 28 0 634 676 ;
+C 91 ; WX 333 ; N bracketleft ; B 67 -149 301 678 ;
+C 92 ; WX 278 ; N backslash ; B -25 -19 303 691 ;
+C 93 ; WX 333 ; N bracketright ; B 32 -149 266 678 ;
+C 94 ; WX 581 ; N asciicircum ; B 73 311 509 676 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 333 ; N quoteleft ; B 70 356 254 691 ;
+C 97 ; WX 500 ; N a ; B 25 -14 488 473 ;
+C 98 ; WX 556 ; N b ; B 17 -14 521 676 ;
+C 99 ; WX 444 ; N c ; B 25 -14 430 473 ;
+C 100 ; WX 556 ; N d ; B 25 -14 534 676 ;
+C 101 ; WX 444 ; N e ; B 25 -14 426 473 ;
+C 102 ; WX 333 ; N f ; B 14 0 389 691 ;
+C 103 ; WX 500 ; N g ; B 28 -206 483 473 ;
+C 104 ; WX 556 ; N h ; B 16 0 534 676 ;
+C 105 ; WX 278 ; N i ; B 16 0 255 691 ;
+C 106 ; WX 333 ; N j ; B -57 -203 263 691 ;
+C 107 ; WX 556 ; N k ; B 22 0 543 676 ;
+C 108 ; WX 278 ; N l ; B 16 0 255 676 ;
+C 109 ; WX 833 ; N m ; B 16 0 814 473 ;
+C 110 ; WX 556 ; N n ; B 21 0 539 473 ;
+C 111 ; WX 500 ; N o ; B 25 -14 476 473 ;
+C 112 ; WX 556 ; N p ; B 19 -205 524 473 ;
+C 113 ; WX 556 ; N q ; B 34 -205 536 473 ;
+C 114 ; WX 444 ; N r ; B 29 0 434 473 ;
+C 115 ; WX 389 ; N s ; B 25 -14 361 473 ;
+C 116 ; WX 333 ; N t ; B 20 -12 332 630 ;
+C 117 ; WX 556 ; N u ; B 16 -14 537 461 ;
+C 118 ; WX 500 ; N v ; B 21 -14 485 461 ;
+C 119 ; WX 722 ; N w ; B 23 -14 707 461 ;
+C 120 ; WX 500 ; N x ; B 12 0 484 461 ;
+C 121 ; WX 500 ; N y ; B 16 -205 480 461 ;
+C 122 ; WX 444 ; N z ; B 21 0 420 461 ;
+C 123 ; WX 394 ; N braceleft ; B 22 -175 340 698 ;
+C 124 ; WX 220 ; N bar ; B 66 -19 154 691 ;
+C 125 ; WX 394 ; N braceright ; B 54 -175 372 698 ;
+C 126 ; WX 520 ; N asciitilde ; B 29 175 491 331 ;
+C 161 ; WX 333 ; N exclamdown ; B 82 -203 252 501 ;
+C 162 ; WX 500 ; N cent ; B 53 -140 458 588 ;
+C 163 ; WX 500 ; N sterling ; B 21 -14 477 684 ;
+C 164 ; WX 167 ; N fraction ; B -168 -12 329 688 ;
+C 165 ; WX 500 ; N yen ; B -64 0 547 676 ;
+C 166 ; WX 500 ; N florin ; B 0 -155 498 706 ;
+C 167 ; WX 500 ; N section ; B 57 -132 443 691 ;
+C 168 ; WX 500 ; N currency ; B -26 61 526 613 ;
+C 169 ; WX 278 ; N quotesingle ; B 75 404 204 691 ;
+C 170 ; WX 500 ; N quotedblleft ; B 32 356 486 691 ;
+C 171 ; WX 500 ; N guillemotleft ; B 23 36 473 415 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 51 36 305 415 ;
+C 173 ; WX 333 ; N guilsinglright ; B 28 36 282 415 ;
+C 174 ; WX 556 ; N fi ; B 14 0 536 691 ;
+C 175 ; WX 556 ; N fl ; B 14 0 536 691 ;
+C 177 ; WX 500 ; N endash ; B 0 181 500 271 ;
+C 178 ; WX 500 ; N dagger ; B 47 -134 453 691 ;
+C 179 ; WX 500 ; N daggerdbl ; B 45 -132 456 691 ;
+C 180 ; WX 250 ; N periodcentered ; B 41 248 210 417 ;
+C 182 ; WX 540 ; N paragraph ; B 0 -186 519 676 ;
+C 183 ; WX 350 ; N bullet ; B 35 198 315 478 ;
+C 184 ; WX 333 ; N quotesinglbase ; B 79 -180 263 155 ;
+C 185 ; WX 500 ; N quotedblbase ; B 14 -180 468 155 ;
+C 186 ; WX 500 ; N quotedblright ; B 14 356 468 691 ;
+C 187 ; WX 500 ; N guillemotright ; B 27 36 477 415 ;
+C 188 ; WX 1000 ; N ellipsis ; B 82 -13 917 156 ;
+C 189 ; WX 1000 ; N perthousand ; B 7 -29 995 706 ;
+C 191 ; WX 500 ; N questiondown ; B 55 -201 443 501 ;
+C 193 ; WX 333 ; N grave ; B 8 528 246 713 ;
+C 194 ; WX 333 ; N acute ; B 86 528 324 713 ;
+C 195 ; WX 333 ; N circumflex ; B -2 528 335 704 ;
+C 196 ; WX 333 ; N tilde ; B -16 547 349 674 ;
+C 197 ; WX 333 ; N macron ; B 1 565 331 637 ;
+C 198 ; WX 333 ; N breve ; B 15 528 318 691 ;
+C 199 ; WX 333 ; N dotaccent ; B 103 537 232 666 ;
+C 200 ; WX 333 ; N dieresis ; B -2 537 337 666 ;
+C 202 ; WX 333 ; N ring ; B 60 537 273 750 ;
+C 203 ; WX 333 ; N cedilla ; B 68 -218 294 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B -13 528 425 713 ;
+C 206 ; WX 333 ; N ogonek ; B 90 -173 319 44 ;
+C 207 ; WX 333 ; N caron ; B -2 528 335 704 ;
+C 208 ; WX 1000 ; N emdash ; B 0 181 1000 271 ;
+C 225 ; WX 1000 ; N AE ; B 4 0 951 676 ;
+C 227 ; WX 300 ; N ordfeminine ; B -1 397 301 688 ;
+C 232 ; WX 667 ; N Lslash ; B 19 0 638 676 ;
+C 233 ; WX 778 ; N Oslash ; B 35 -74 743 737 ;
+C 234 ; WX 1000 ; N OE ; B 22 -5 981 684 ;
+C 235 ; WX 330 ; N ordmasculine ; B 18 397 312 688 ;
+C 241 ; WX 722 ; N ae ; B 33 -14 693 473 ;
+C 245 ; WX 278 ; N dotlessi ; B 16 0 255 461 ;
+C 248 ; WX 278 ; N lslash ; B -22 0 303 676 ;
+C 249 ; WX 500 ; N oslash ; B 25 -92 476 549 ;
+C 250 ; WX 722 ; N oe ; B 22 -14 696 473 ;
+C 251 ; WX 556 ; N germandbls ; B 19 -12 517 691 ;
+C -1 ; WX 722 ; N Udieresis ; B 16 -19 701 876 ;
+C -1 ; WX 722 ; N Uacute ; B 16 -19 701 923 ;
+C -1 ; WX 556 ; N Scedilla ; B 35 -218 513 692 ;
+C -1 ; WX 667 ; N Tcaron ; B 31 0 636 914 ;
+C -1 ; WX 556 ; N Scaron ; B 35 -19 513 914 ;
+C -1 ; WX 722 ; N Rcaron ; B 26 0 715 914 ;
+C -1 ; WX 722 ; N Racute ; B 26 0 715 923 ;
+C -1 ; WX 556 ; N Sacute ; B 35 -19 513 923 ;
+C -1 ; WX 778 ; N Otilde ; B 35 -19 743 884 ;
+C -1 ; WX 556 ; N ucircumflex ; B 16 -14 537 704 ;
+C -1 ; WX 778 ; N Ohungarumlaut ; B 35 -19 743 923 ;
+C -1 ; WX 722 ; N Uhungarumlaut ; B 16 -19 701 923 ;
+C -1 ; WX 722 ; N Yacute ; B 15 0 699 923 ;
+C -1 ; WX 722 ; N Eth ; B 6 0 690 676 ;
+C -1 ; WX 722 ; N Dcroat ; B 6 0 690 676 ;
+C -1 ; WX 667 ; N Zacute ; B 28 0 634 923 ;
+C -1 ; WX 722 ; N Uring ; B 16 -19 701 960 ;
+C -1 ; WX 500 ; N gbreve ; B 28 -206 483 691 ;
+C -1 ; WX 444 ; N eogonek ; B 25 -173 444 473 ;
+C -1 ; WX 444 ; N edotaccent ; B 25 -14 426 666 ;
+C -1 ; WX 444 ; N ecaron ; B 25 -14 426 704 ;
+C -1 ; WX 722 ; N Ugrave ; B 16 -19 701 923 ;
+C -1 ; WX 611 ; N Thorn ; B 16 0 600 676 ;
+C -1 ; WX 444 ; N eacute ; B 25 -14 426 713 ;
+C -1 ; WX 444 ; N edieresis ; B 25 -14 426 666 ;
+C -1 ; WX 665 ; N dcaron ; B 25 -14 665 691 ;
+C -1 ; WX 444 ; N ccedilla ; B 25 -218 430 473 ;
+C -1 ; WX 444 ; N ccaron ; B 25 -14 430 704 ;
+C -1 ; WX 444 ; N cacute ; B 25 -14 430 713 ;
+C -1 ; WX 500 ; N aogonek ; B 25 -173 500 473 ;
+C -1 ; WX 500 ; N aring ; B 25 -14 488 750 ;
+C -1 ; WX 500 ; N atilde ; B 25 -14 488 674 ;
+C -1 ; WX 500 ; N abreve ; B 25 -14 488 691 ;
+C -1 ; WX 444 ; N egrave ; B 25 -14 426 713 ;
+C -1 ; WX 500 ; N agrave ; B 25 -14 488 713 ;
+C -1 ; WX 500 ; N aacute ; B 25 -14 488 713 ;
+C -1 ; WX 500 ; N adieresis ; B 25 -14 488 666 ;
+C -1 ; WX 722 ; N Uogonek ; B 16 -173 701 676 ;
+C -1 ; WX 556 ; N ugrave ; B 16 -14 537 713 ;
+C -1 ; WX 556 ; N uacute ; B 16 -14 537 713 ;
+C -1 ; WX 556 ; N udieresis ; B 16 -14 537 666 ;
+C -1 ; WX 400 ; N tcaron ; B 20 -12 400 691 ;
+C -1 ; WX 389 ; N scommaaccent ; B 25 -341 361 473 ;
+C -1 ; WX 667 ; N Zcaron ; B 28 0 634 914 ;
+C -1 ; WX 444 ; N ecircumflex ; B 25 -14 426 704 ;
+C -1 ; WX 722 ; N Ucircumflex ; B 16 -19 701 914 ;
+C -1 ; WX 500 ; N acircumflex ; B 25 -14 488 704 ;
+C -1 ; WX 667 ; N Zdotaccent ; B 28 0 634 876 ;
+C -1 ; WX 389 ; N scaron ; B 25 -14 363 704 ;
+C -1 ; WX 722 ; N Amacron ; B 9 0 689 847 ;
+C -1 ; WX 389 ; N sacute ; B 25 -14 361 713 ;
+C -1 ; WX 667 ; N Tcommaaccent ; B 31 -341 636 676 ;
+C -1 ; WX 722 ; N Ydieresis ; B 15 0 699 876 ;
+C -1 ; WX 556 ; N thorn ; B 19 -205 524 676 ;
+C -1 ; WX 667 ; N Emacron ; B 16 0 641 847 ;
+C -1 ; WX 778 ; N Ograve ; B 35 -19 743 923 ;
+C -1 ; WX 778 ; N Oacute ; B 35 -19 743 923 ;
+C -1 ; WX 778 ; N Odieresis ; B 35 -19 743 876 ;
+C -1 ; WX 722 ; N Ntilde ; B 16 -18 701 884 ;
+C -1 ; WX 722 ; N Ncaron ; B 16 -18 701 914 ;
+C -1 ; WX 722 ; N Nacute ; B 16 -18 701 923 ;
+C -1 ; WX 667 ; N Lcaron ; B 19 0 638 691 ;
+C -1 ; WX 667 ; N Lacute ; B 19 0 638 923 ;
+C -1 ; WX 389 ; N Idotaccent ; B 20 0 370 876 ;
+C -1 ; WX 444 ; N racute ; B 29 0 434 713 ;
+C -1 ; WX 389 ; N Icircumflex ; B 20 0 370 914 ;
+C -1 ; WX 500 ; N ohungarumlaut ; B 25 -14 509 713 ;
+C -1 ; WX 500 ; N otilde ; B 25 -14 476 674 ;
+C -1 ; WX 500 ; N Euro ; B -36 -24 478 671 ;
+C -1 ; WX 500 ; N ocircumflex ; B 25 -14 476 704 ;
+C -1 ; WX 300 ; N onesuperior ; B 28 275 273 688 ;
+C -1 ; WX 300 ; N twosuperior ; B 0 275 300 688 ;
+C -1 ; WX 300 ; N threesuperior ; B 3 268 297 688 ;
+C -1 ; WX 389 ; N Igrave ; B 20 0 370 923 ;
+C -1 ; WX 389 ; N Iacute ; B 20 0 370 923 ;
+C -1 ; WX 389 ; N Imacron ; B 20 0 370 847 ;
+C -1 ; WX 389 ; N Iogonek ; B 20 -173 505 676 ;
+C -1 ; WX 389 ; N Idieresis ; B 20 0 370 876 ;
+C -1 ; WX 778 ; N Gbreve ; B 37 -19 755 901 ;
+C -1 ; WX 722 ; N Umacron ; B 16 -19 701 847 ;
+C -1 ; WX 778 ; N Kcommaaccent ; B 30 -341 769 676 ;
+C -1 ; WX 500 ; N ograve ; B 25 -14 476 713 ;
+C -1 ; WX 556 ; N Scommaaccent ; B 35 -341 513 692 ;
+C -1 ; WX 667 ; N Eogonek ; B 16 -173 737 676 ;
+C -1 ; WX 500 ; N oacute ; B 25 -14 476 713 ;
+C -1 ; WX 667 ; N Edotaccent ; B 16 0 641 876 ;
+C -1 ; WX 278 ; N iogonek ; B 16 -173 388 691 ;
+C -1 ; WX 500 ; N gcommaaccent ; B 28 -206 483 811 ;
+C -1 ; WX 500 ; N odieresis ; B 25 -14 476 666 ;
+C -1 ; WX 556 ; N ntilde ; B 21 0 539 674 ;
+C -1 ; WX 556 ; N ncaron ; B 21 0 539 704 ;
+C -1 ; WX 667 ; N Ecaron ; B 16 0 641 914 ;
+C -1 ; WX 667 ; N Ecircumflex ; B 16 0 641 914 ;
+C -1 ; WX 389 ; N scedilla ; B 25 -218 361 473 ;
+C -1 ; WX 444 ; N rcaron ; B 29 0 434 704 ;
+C -1 ; WX 667 ; N Egrave ; B 16 0 641 923 ;
+C -1 ; WX 667 ; N Eacute ; B 16 0 641 923 ;
+C -1 ; WX 778 ; N Gcommaaccent ; B 37 -341 755 691 ;
+C -1 ; WX 722 ; N Rcommaaccent ; B 26 -341 715 676 ;
+C -1 ; WX 667 ; N Edieresis ; B 16 0 641 876 ;
+C -1 ; WX 556 ; N nacute ; B 21 0 539 713 ;
+C -1 ; WX 556 ; N uogonek ; B 16 -173 556 461 ;
+C -1 ; WX 556 ; N umacron ; B 16 -14 537 637 ;
+C -1 ; WX 722 ; N Dcaron ; B 14 0 690 914 ;
+C -1 ; WX 396 ; N lcaron ; B 16 0 396 691 ;
+C -1 ; WX 722 ; N Ccaron ; B 49 -19 687 914 ;
+C -1 ; WX 722 ; N Cacute ; B 49 -19 687 923 ;
+C -1 ; WX 722 ; N Ccedilla ; B 49 -218 687 691 ;
+C -1 ; WX 400 ; N degree ; B 57 402 343 688 ;
+C -1 ; WX 722 ; N Aogonek ; B 9 -173 822 690 ;
+C -1 ; WX 570 ; N minus ; B 33 209 537 297 ;
+C -1 ; WX 570 ; N multiply ; B 48 16 522 490 ;
+C -1 ; WX 570 ; N divide ; B 33 -31 537 537 ;
+C -1 ; WX 722 ; N Aring ; B 9 0 689 948 ;
+C -1 ; WX 1000 ; N trademark ; B 24 271 977 676 ;
+C -1 ; WX 444 ; N rcommaaccent ; B 29 -341 434 473 ;
+C -1 ; WX 278 ; N lacute ; B 16 0 297 923 ;
+C -1 ; WX 500 ; N omacron ; B 25 -14 476 637 ;
+C -1 ; WX 722 ; N Atilde ; B 9 0 689 884 ;
+C -1 ; WX 278 ; N icircumflex ; B -36 0 301 704 ;
+C -1 ; WX 278 ; N igrave ; B -26 0 255 713 ;
+C -1 ; WX 556 ; N ncommaaccent ; B 21 -341 539 473 ;
+C -1 ; WX 278 ; N lcommaaccent ; B 16 -341 255 676 ;
+C -1 ; WX 570 ; N plusminus ; B 33 0 537 568 ;
+C -1 ; WX 750 ; N onehalf ; B -7 -12 775 688 ;
+C -1 ; WX 750 ; N onequarter ; B 28 -12 743 688 ;
+C -1 ; WX 750 ; N threequarters ; B 23 -12 733 688 ;
+C -1 ; WX 278 ; N iacute ; B 16 0 290 713 ;
+C -1 ; WX 722 ; N Abreve ; B 9 0 689 901 ;
+C -1 ; WX 556 ; N kcommaaccent ; B 22 -341 543 676 ;
+C -1 ; WX 778 ; N Omacron ; B 35 -19 743 847 ;
+C -1 ; WX 278 ; N imacron ; B -27 0 303 637 ;
+C -1 ; WX 444 ; N emacron ; B 25 -14 426 637 ;
+C -1 ; WX 500 ; N amacron ; B 25 -14 488 637 ;
+C -1 ; WX 333 ; N tcommaaccent ; B 20 -341 332 630 ;
+C -1 ; WX 500 ; N ydieresis ; B 16 -205 480 666 ;
+C -1 ; WX 444 ; N zdotaccent ; B 21 0 420 666 ;
+C -1 ; WX 444 ; N zcaron ; B 21 0 420 704 ;
+C -1 ; WX 444 ; N zacute ; B 21 0 420 713 ;
+C -1 ; WX 500 ; N yacute ; B 16 -205 480 713 ;
+C -1 ; WX 556 ; N uhungarumlaut ; B 16 -14 537 713 ;
+C -1 ; WX 500 ; N eth ; B 25 -14 476 691 ;
+C -1 ; WX 556 ; N uring ; B 16 -14 537 750 ;
+C -1 ; WX 778 ; N Ocircumflex ; B 35 -19 743 914 ;
+C -1 ; WX 333 ; N commaaccent ; B 84 -341 249 -40 ;
+C -1 ; WX 747 ; N copyright ; B 26 -19 721 691 ;
+C -1 ; WX 747 ; N registered ; B 26 -19 721 691 ;
+C -1 ; WX 722 ; N Acircumflex ; B 9 0 689 914 ;
+C -1 ; WX 278 ; N idieresis ; B -36 0 303 666 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 570 ; N notequal ; B 33 -13 537 519 ;
+C -1 ; WX 549 ; N radical ; B -17 -35 535 916 ;
+C -1 ; WX 722 ; N Agrave ; B 9 0 689 923 ;
+C -1 ; WX 722 ; N Aacute ; B 9 0 689 923 ;
+C -1 ; WX 570 ; N lessequal ; B 31 0 539 642 ;
+C -1 ; WX 570 ; N greaterequal ; B 31 0 539 642 ;
+C -1 ; WX 570 ; N logicalnot ; B 33 108 537 399 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 16 -20 472 743 ;
+C -1 ; WX 722 ; N Ncommaaccent ; B 16 -341 701 676 ;
+C -1 ; WX 556 ; N dcroat ; B 25 -14 534 676 ;
+C -1 ; WX 220 ; N brokenbar ; B 66 -19 154 691 ;
+C -1 ; WX 667 ; N Lcommaaccent ; B 19 -341 638 676 ;
+C -1 ; WX 722 ; N Adieresis ; B 9 0 689 876 ;
+C -1 ; WX 556 ; N mu ; B 33 -206 536 461 ;
+C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -73
+KPX A Ccedilla -77
+KPX A G -68
+KPX A O -68
+KPX A Odieresis -68
+KPX A Q -68
+KPX A T -59
+KPX A U -66
+KPX A Uacute -66
+KPX A Ucircumflex -66
+KPX A Udieresis -66
+KPX A Ugrave -66
+KPX A V -130
+KPX A W -116
+KPX A Y -74
+KPX A a -5
+KPX A b -22
+KPX A c -35
+KPX A ccedilla -43
+KPX A comma 1
+KPX A d -28
+KPX A e -32
+KPX A g -7
+KPX A guillemotleft -53
+KPX A guilsinglleft -67
+KPX A hyphen -30
+KPX A o -37
+KPX A period 0
+KPX A q -38
+KPX A quotedblright -76
+KPX A quoteright -108
+KPX A t -27
+KPX A u -30
+KPX A v -84
+KPX A w -79
+KPX A y -83
+KPX Aacute C -73
+KPX Aacute G -68
+KPX Aacute O -68
+KPX Aacute Q -68
+KPX Aacute T -59
+KPX Aacute U -66
+KPX Aacute V -130
+KPX Aacute W -116
+KPX Aacute Y -74
+KPX Aacute a -5
+KPX Aacute b -22
+KPX Aacute c -35
+KPX Aacute comma 1
+KPX Aacute d -28
+KPX Aacute e -32
+KPX Aacute g -7
+KPX Aacute guillemotleft -53
+KPX Aacute guilsinglleft -67
+KPX Aacute hyphen -30
+KPX Aacute o -37
+KPX Aacute period 0
+KPX Aacute q -38
+KPX Aacute quoteright -108
+KPX Aacute t -27
+KPX Aacute u -30
+KPX Aacute v -84
+KPX Aacute w -79
+KPX Aacute y -83
+KPX Acircumflex C -73
+KPX Acircumflex G -68
+KPX Acircumflex O -68
+KPX Acircumflex Q -68
+KPX Acircumflex T -59
+KPX Acircumflex U -66
+KPX Acircumflex V -130
+KPX Acircumflex W -116
+KPX Acircumflex Y -74
+KPX Acircumflex comma 1
+KPX Acircumflex period 0
+KPX Adieresis C -73
+KPX Adieresis G -68
+KPX Adieresis O -68
+KPX Adieresis Q -68
+KPX Adieresis T -59
+KPX Adieresis U -66
+KPX Adieresis V -130
+KPX Adieresis W -116
+KPX Adieresis Y -74
+KPX Adieresis a -5
+KPX Adieresis b -22
+KPX Adieresis c -35
+KPX Adieresis comma 1
+KPX Adieresis d -28
+KPX Adieresis g -7
+KPX Adieresis guillemotleft -53
+KPX Adieresis guilsinglleft -67
+KPX Adieresis hyphen -30
+KPX Adieresis o -37
+KPX Adieresis period 0
+KPX Adieresis q -38
+KPX Adieresis quotedblright -76
+KPX Adieresis quoteright -108
+KPX Adieresis t -27
+KPX Adieresis u -30
+KPX Adieresis v -84
+KPX Adieresis w -79
+KPX Adieresis y -83
+KPX Agrave C -73
+KPX Agrave G -68
+KPX Agrave O -68
+KPX Agrave Q -68
+KPX Agrave T -59
+KPX Agrave U -66
+KPX Agrave V -130
+KPX Agrave W -116
+KPX Agrave Y -74
+KPX Agrave comma 1
+KPX Agrave period 0
+KPX Aring C -73
+KPX Aring G -68
+KPX Aring O -68
+KPX Aring Q -68
+KPX Aring T -59
+KPX Aring U -66
+KPX Aring V -130
+KPX Aring W -116
+KPX Aring Y -74
+KPX Aring a -5
+KPX Aring b -22
+KPX Aring c -35
+KPX Aring comma 1
+KPX Aring d -28
+KPX Aring e -32
+KPX Aring g -7
+KPX Aring guillemotleft -53
+KPX Aring guilsinglleft -67
+KPX Aring hyphen -30
+KPX Aring o -37
+KPX Aring period 0
+KPX Aring q -38
+KPX Aring quotedblright -76
+KPX Aring quoteright -108
+KPX Aring t -27
+KPX Aring u -30
+KPX Aring v -84
+KPX Aring w -79
+KPX Aring y -83
+KPX Atilde C -73
+KPX Atilde G -68
+KPX Atilde O -68
+KPX Atilde Q -68
+KPX Atilde T -59
+KPX Atilde U -66
+KPX Atilde V -130
+KPX Atilde W -116
+KPX Atilde Y -74
+KPX Atilde comma 1
+KPX Atilde period 0
+KPX B A -34
+KPX B AE -32
+KPX B Aacute -34
+KPX B Acircumflex -34
+KPX B Adieresis -34
+KPX B Aring -34
+KPX B Atilde -34
+KPX B O -12
+KPX B OE -4
+KPX B Oacute -12
+KPX B Ocircumflex -12
+KPX B Odieresis -12
+KPX B Ograve -12
+KPX B Oslash -11
+KPX B V -45
+KPX B W -46
+KPX B Y -44
+KPX C A -25
+KPX C AE -22
+KPX C Aacute -25
+KPX C Adieresis -25
+KPX C Aring -25
+KPX C H -2
+KPX C K -6
+KPX C O -14
+KPX C Oacute -14
+KPX C Odieresis -14
+KPX Ccedilla A -33
+KPX D A -55
+KPX D Aacute -55
+KPX D Acircumflex -55
+KPX D Adieresis -55
+KPX D Agrave -55
+KPX D Aring -55
+KPX D Atilde -55
+KPX D J -40
+KPX D T -7
+KPX D V -60
+KPX D W -50
+KPX D X -51
+KPX D Y -59
+KPX F A -79
+KPX F Aacute -79
+KPX F Acircumflex -79
+KPX F Adieresis -79
+KPX F Agrave -79
+KPX F Aring -79
+KPX F Atilde -79
+KPX F J -42
+KPX F O -7
+KPX F Odieresis -7
+KPX F a -50
+KPX F aacute -50
+KPX F adieresis -22
+KPX F ae -53
+KPX F aring -50
+KPX F comma -59
+KPX F e -51
+KPX F eacute -51
+KPX F hyphen -34
+KPX F i -1
+KPX F j -26
+KPX F o -54
+KPX F oacute -54
+KPX F odieresis -24
+KPX F oe -51
+KPX F oslash -53
+KPX F period -60
+KPX F r -7
+KPX F u -10
+KPX G A -27
+KPX G AE -24
+KPX G Aacute -27
+KPX G Acircumflex -27
+KPX G Adieresis -27
+KPX G Agrave -27
+KPX G Aring -27
+KPX G Atilde -27
+KPX G T -41
+KPX G V -33
+KPX G W -35
+KPX G Y -33
+KPX J A -30
+KPX J AE -27
+KPX J Adieresis -30
+KPX J Aring -30
+KPX K C -61
+KPX K G -56
+KPX K O -56
+KPX K OE -46
+KPX K Oacute -56
+KPX K Odieresis -56
+KPX K S 13
+KPX K T -2
+KPX K a 6
+KPX K adieresis 6
+KPX K ae 3
+KPX K aring 6
+KPX K e -20
+KPX K hyphen -47
+KPX K o -25
+KPX K oacute -25
+KPX K odieresis -25
+KPX K u -18
+KPX K udieresis -18
+KPX K y -83
+KPX L A -1
+KPX L AE 1
+KPX L Aacute -1
+KPX L Adieresis -1
+KPX L Aring -1
+KPX L C -11
+KPX L Ccedilla -14
+KPX L G -5
+KPX L O -5
+KPX L Oacute -5
+KPX L Ocircumflex -5
+KPX L Odieresis -5
+KPX L Ograve -5
+KPX L Otilde -5
+KPX L S 2
+KPX L T -74
+KPX L U -29
+KPX L Udieresis -29
+KPX L V -106
+KPX L W -87
+KPX L Y -89
+KPX L hyphen 24
+KPX L quotedblright -37
+KPX L quoteright -69
+KPX L u -11
+KPX L udieresis -12
+KPX L y -49
+KPX N A -19
+KPX N AE -16
+KPX N Aacute -19
+KPX N Adieresis -19
+KPX N Aring -19
+KPX N C -22
+KPX N Ccedilla -22
+KPX N G -16
+KPX N O -15
+KPX N Oacute -15
+KPX N Odieresis -15
+KPX N a -16
+KPX N aacute -16
+KPX N adieresis -16
+KPX N ae -18
+KPX N aring -16
+KPX N comma 1
+KPX N e -13
+KPX N eacute -13
+KPX N o -16
+KPX N oacute -16
+KPX N odieresis -16
+KPX N oslash -15
+KPX N period 0
+KPX N u -17
+KPX N udieresis -17
+KPX O A -55
+KPX O AE -54
+KPX O Aacute -55
+KPX O Adieresis -55
+KPX O Aring -55
+KPX O T -9
+KPX O V -60
+KPX O W -54
+KPX O X -51
+KPX O Y -59
+KPX Oacute A -55
+KPX Oacute T -9
+KPX Oacute V -60
+KPX Oacute W -54
+KPX Oacute Y -59
+KPX Ocircumflex T -9
+KPX Ocircumflex V -60
+KPX Ocircumflex Y -59
+KPX Odieresis A -55
+KPX Odieresis T -9
+KPX Odieresis V -60
+KPX Odieresis W -54
+KPX Odieresis X -51
+KPX Odieresis Y -59
+KPX Ograve T -9
+KPX Ograve V -60
+KPX Ograve Y -59
+KPX Oslash A -52
+KPX Otilde T -9
+KPX Otilde V -60
+KPX Otilde Y -59
+KPX P A -81
+KPX P AE -94
+KPX P Aacute -81
+KPX P Adieresis -81
+KPX P Aring -81
+KPX P J -68
+KPX P a -19
+KPX P aacute -19
+KPX P adieresis -19
+KPX P ae -22
+KPX P aring -19
+KPX P comma -85
+KPX P e -29
+KPX P eacute -29
+KPX P hyphen -39
+KPX P o -33
+KPX P oacute -33
+KPX P odieresis -22
+KPX P oe -30
+KPX P oslash -33
+KPX P period -86
+KPX R C -36
+KPX R Ccedilla -37
+KPX R G -30
+KPX R O -29
+KPX R OE -22
+KPX R Oacute -29
+KPX R Odieresis -29
+KPX R T -26
+KPX R U -37
+KPX R Udieresis -37
+KPX R V -53
+KPX R W -55
+KPX R Y -53
+KPX R a 7
+KPX R aacute 7
+KPX R adieresis 7
+KPX R ae 4
+KPX R aring 7
+KPX R e -19
+KPX R eacute -19
+KPX R hyphen -30
+KPX R o -24
+KPX R oacute -24
+KPX R odieresis -24
+KPX R oe -21
+KPX R u -17
+KPX R uacute -17
+KPX R udieresis -17
+KPX R y -27
+KPX S A -24
+KPX S AE -21
+KPX S Aacute -24
+KPX S Adieresis -24
+KPX S Aring -24
+KPX S T -16
+KPX S V -9
+KPX S W -10
+KPX S Y -8
+KPX S t -10
+KPX T A -46
+KPX T AE -44
+KPX T Aacute -46
+KPX T Acircumflex -46
+KPX T Adieresis -46
+KPX T Agrave -46
+KPX T Aring -46
+KPX T Atilde -46
+KPX T C -17
+KPX T G -11
+KPX T J -43
+KPX T O -9
+KPX T OE -3
+KPX T Oacute -9
+KPX T Ocircumflex -9
+KPX T Odieresis -9
+KPX T Ograve -9
+KPX T Oslash -11
+KPX T Otilde -9
+KPX T S -2
+KPX T V 11
+KPX T W 9
+KPX T Y 11
+KPX T a -65
+KPX T ae -69
+KPX T c -88
+KPX T colon -85
+KPX T comma -63
+KPX T e -85
+KPX T g -68
+KPX T guillemotleft -99
+KPX T guilsinglleft -113
+KPX T hyphen -73
+KPX T i -16
+KPX T j -40
+KPX T o -88
+KPX T oslash -87
+KPX T period -64
+KPX T r -61
+KPX T s -59
+KPX T semicolon -85
+KPX T u -89
+KPX T v -106
+KPX T w -107
+KPX T y -104
+KPX U A -54
+KPX U AE -52
+KPX U Aacute -54
+KPX U Acircumflex -54
+KPX U Adieresis -54
+KPX U Aring -54
+KPX U Atilde -54
+KPX U comma -17
+KPX U m -23
+KPX U n -25
+KPX U p -28
+KPX U period -18
+KPX U r -29
+KPX Uacute A -54
+KPX Uacute comma -17
+KPX Uacute m -23
+KPX Uacute n -25
+KPX Uacute p -28
+KPX Uacute period -18
+KPX Uacute r -29
+KPX Ucircumflex A -54
+KPX Udieresis A -54
+KPX Udieresis b 10
+KPX Udieresis comma -17
+KPX Udieresis m -23
+KPX Udieresis n -25
+KPX Udieresis p -28
+KPX Udieresis period -18
+KPX Udieresis r -29
+KPX Ugrave A -54
+KPX V A -113
+KPX V AE -113
+KPX V Aacute -113
+KPX V Acircumflex -113
+KPX V Adieresis -113
+KPX V Agrave -113
+KPX V Aring -113
+KPX V Atilde -113
+KPX V C -70
+KPX V G -64
+KPX V O -63
+KPX V Oacute -63
+KPX V Ocircumflex -63
+KPX V Odieresis -63
+KPX V Ograve -63
+KPX V Oslash -65
+KPX V Otilde -63
+KPX V S -25
+KPX V T 8
+KPX V a -87
+KPX V ae -90
+KPX V colon -94
+KPX V comma -94
+KPX V e -86
+KPX V g -86
+KPX V guillemotleft -98
+KPX V guilsinglleft -112
+KPX V hyphen -68
+KPX V i -13
+KPX V o -89
+KPX V oslash -87
+KPX V period -95
+KPX V r -60
+KPX V semicolon -94
+KPX V u -58
+KPX V y -56
+KPX W A -98
+KPX W AE -102
+KPX W Aacute -98
+KPX W Acircumflex -98
+KPX W Adieresis -98
+KPX W Agrave -98
+KPX W Aring -98
+KPX W Atilde -98
+KPX W C -58
+KPX W G -52
+KPX W O -51
+KPX W Oacute -51
+KPX W Ocircumflex -51
+KPX W Odieresis -51
+KPX W Ograve -51
+KPX W Oslash -50
+KPX W Otilde -51
+KPX W S -24
+KPX W T 9
+KPX W a -70
+KPX W ae -73
+KPX W colon -81
+KPX W comma -72
+KPX W e -67
+KPX W g -70
+KPX W guillemotleft -79
+KPX W guilsinglleft -93
+KPX W hyphen -49
+KPX W i -12
+KPX W o -70
+KPX W oslash -69
+KPX W period -73
+KPX W r -49
+KPX W semicolon -80
+KPX W u -45
+KPX W y -44
+KPX X C -63
+KPX X O -56
+KPX X Odieresis -56
+KPX X Q -57
+KPX X a 0
+KPX X e -27
+KPX X hyphen -43
+KPX X o -32
+KPX X u -25
+KPX X y -90
+KPX Y A -64
+KPX Y AE -62
+KPX Y Aacute -64
+KPX Y Acircumflex -64
+KPX Y Adieresis -64
+KPX Y Agrave -64
+KPX Y Aring -64
+KPX Y Atilde -64
+KPX Y C -71
+KPX Y G -65
+KPX Y O -64
+KPX Y Oacute -64
+KPX Y Ocircumflex -64
+KPX Y Odieresis -64
+KPX Y Ograve -64
+KPX Y Oslash -68
+KPX Y Otilde -64
+KPX Y S -26
+KPX Y T 7
+KPX Y a -83
+KPX Y ae -87
+KPX Y colon -103
+KPX Y comma -80
+KPX Y e -93
+KPX Y g -86
+KPX Y guillemotleft -111
+KPX Y guilsinglleft -125
+KPX Y hyphen -87
+KPX Y i -14
+KPX Y o -96
+KPX Y oslash -95
+KPX Y p -72
+KPX Y period -81
+KPX Y semicolon -103
+KPX Y u -76
+KPX Y v -78
+KPX Z v -45
+KPX Z y -44
+KPX a j -39
+KPX a quoteright -34
+KPX a v -39
+KPX a w -40
+KPX a y -44
+KPX aacute v -39
+KPX aacute w -40
+KPX aacute y -44
+KPX adieresis v -39
+KPX adieresis w -40
+KPX adieresis y -44
+KPX ae v -34
+KPX ae w -35
+KPX ae y -37
+KPX agrave v -39
+KPX agrave w -40
+KPX agrave y -44
+KPX aring v -39
+KPX aring w -40
+KPX aring y -44
+KPX b v -39
+KPX b w -40
+KPX b y -42
+KPX c h -17
+KPX c k -18
+KPX comma one -12
+KPX comma quotedblright 9
+KPX comma quoteright -23
+KPX e quoteright -19
+KPX e t -10
+KPX e v -29
+KPX e w -30
+KPX e x -19
+KPX e y -31
+KPX eacute v -29
+KPX eacute w -30
+KPX eacute y -31
+KPX ecircumflex v -29
+KPX ecircumflex w -30
+KPX ecircumflex y -31
+KPX eight four 11
+KPX eight one -19
+KPX eight seven 0
+KPX f a -17
+KPX f aacute -17
+KPX f adieresis 14
+KPX f ae -21
+KPX f aring -15
+KPX f e -29
+KPX f eacute -29
+KPX f f 12
+KPX f i 22
+KPX f j -1
+KPX f l 33
+KPX f o -32
+KPX f oacute -32
+KPX f odieresis 11
+KPX f oe -29
+KPX f oslash -31
+KPX f quoteright 18
+KPX f s -8
+KPX f t -3
+KPX five four 1
+KPX five one -28
+KPX five seven -9
+KPX four four 13
+KPX four one -35
+KPX four seven -16
+KPX g a -15
+KPX g adieresis -15
+KPX g ae -18
+KPX g aring -15
+KPX g e -20
+KPX g eacute -20
+KPX g l 0
+KPX g oacute -20
+KPX g odieresis -20
+KPX g r 1
+KPX guillemotright A -40
+KPX guillemotright AE -46
+KPX guillemotright Aacute -40
+KPX guillemotright Adieresis -40
+KPX guillemotright Aring -40
+KPX guillemotright T -100
+KPX guillemotright V -102
+KPX guillemotright W -84
+KPX guillemotright Y -106
+KPX guilsinglright A -54
+KPX guilsinglright AE -60
+KPX guilsinglright Aacute -54
+KPX guilsinglright Adieresis -54
+KPX guilsinglright Aring -54
+KPX guilsinglright T -114
+KPX guilsinglright V -116
+KPX guilsinglright W -98
+KPX guilsinglright Y -120
+KPX h quoteright -30
+KPX h y -34
+KPX hyphen A -18
+KPX hyphen AE -24
+KPX hyphen Aacute -18
+KPX hyphen Adieresis -18
+KPX hyphen Aring -18
+KPX hyphen T -74
+KPX hyphen V -72
+KPX hyphen W -54
+KPX hyphen Y -83
+KPX i T -18
+KPX i j -36
+KPX k a -3
+KPX k aacute -3
+KPX k adieresis -3
+KPX k ae -7
+KPX k aring -3
+KPX k comma 0
+KPX k e -33
+KPX k eacute -33
+KPX k g -4
+KPX k hyphen -47
+KPX k o -38
+KPX k oacute -38
+KPX k odieresis -38
+KPX k period 0
+KPX k s 5
+KPX k u -5
+KPX k udieresis -5
+KPX l v -22
+KPX l y -19
+KPX m p -16
+KPX m v -32
+KPX m w -33
+KPX m y -33
+KPX n T -56
+KPX n p -14
+KPX n quoteright -28
+KPX n v -31
+KPX n w -32
+KPX n y -32
+KPX nine four 2
+KPX nine one -26
+KPX nine seven 10
+KPX o T -88
+KPX o quoteright -27
+KPX o t -10
+KPX o v -42
+KPX o w -38
+KPX o x -29
+KPX o y -42
+KPX oacute v -42
+KPX oacute w -38
+KPX oacute y -42
+KPX ocircumflex t -10
+KPX odieresis t -10
+KPX odieresis v -42
+KPX odieresis w -38
+KPX odieresis x -29
+KPX odieresis y -42
+KPX ograve v -42
+KPX ograve w -38
+KPX ograve y -42
+KPX one comma -16
+KPX one eight -34
+KPX one five -16
+KPX one four -56
+KPX one nine -9
+KPX one one -27
+KPX one period -17
+KPX one seven -56
+KPX one six -47
+KPX one three -10
+KPX one two -2
+KPX one zero -35
+KPX p t -11
+KPX p y -34
+KPX period one -21
+KPX period quotedblright 5
+KPX period quoteright -27
+KPX q c -13
+KPX q u -15
+KPX quotedblbase A 19
+KPX quotedblbase AE 20
+KPX quotedblbase T -59
+KPX quotedblbase V -98
+KPX quotedblbase W -75
+KPX quotedblbase Y -73
+KPX quotedblleft A -59
+KPX quotedblleft AE -78
+KPX quotedblleft Aacute -59
+KPX quotedblleft Adieresis -59
+KPX quotedblleft Aring -59
+KPX quotedblleft T 9
+KPX quotedblleft V 15
+KPX quotedblleft W 13
+KPX quotedblleft Y 15
+KPX quotedblright A -72
+KPX quotedblright AE -91
+KPX quotedblright Aacute -72
+KPX quotedblright Adieresis -72
+KPX quotedblright Aring -72
+KPX quotedblright T 4
+KPX quotedblright V 5
+KPX quotedblright W 4
+KPX quotedblright Y 6
+KPX quoteleft A -92
+KPX quoteleft AE -111
+KPX quoteleft Aacute -92
+KPX quoteleft Adieresis -92
+KPX quoteleft Aring -92
+KPX quoteleft T -22
+KPX quoteleft V -17
+KPX quoteleft W -19
+KPX quoteleft Y -17
+KPX quoteright A -91
+KPX quoteright AE -110
+KPX quoteright Aacute -91
+KPX quoteright Adieresis -91
+KPX quoteright Aring -91
+KPX quoteright comma -34
+KPX quoteright d -31
+KPX quoteright o -34
+KPX quoteright period -35
+KPX quoteright r -26
+KPX quoteright s -17
+KPX quoteright t -19
+KPX quoteright v -25
+KPX quoteright w -23
+KPX quoteright y -22
+KPX r a -6
+KPX r aacute -6
+KPX r acircumflex -6
+KPX r adieresis -6
+KPX r ae -8
+KPX r agrave -6
+KPX r aring -6
+KPX r c -15
+KPX r ccedilla -10
+KPX r colon -16
+KPX r comma -67
+KPX r d -13
+KPX r e -11
+KPX r eacute -11
+KPX r ecircumflex -11
+KPX r egrave -11
+KPX r f 11
+KPX r g -5
+KPX r h -15
+KPX r hyphen -18
+KPX r i 6
+KPX r j -12
+KPX r k -15
+KPX r l -14
+KPX r m 6
+KPX r n 4
+KPX r o -14
+KPX r oacute -14
+KPX r ocircumflex -14
+KPX r odieresis -14
+KPX r oe -12
+KPX r ograve -14
+KPX r oslash -14
+KPX r p 4
+KPX r period -68
+KPX r q -15
+KPX r quoteright -8
+KPX r r 0
+KPX r s 0
+KPX r semicolon -16
+KPX r t 9
+KPX r u 9
+KPX r v 8
+KPX r w 7
+KPX r x 11
+KPX r y 9
+KPX r z -1
+KPX s quoteright -17
+KPX s t -7
+KPX seven colon -64
+KPX seven comma -57
+KPX seven eight -18
+KPX seven five -34
+KPX seven four -54
+KPX seven one -25
+KPX seven period -58
+KPX seven seven -6
+KPX seven six -37
+KPX seven three -20
+KPX seven two -21
+KPX six four 13
+KPX six one -43
+KPX six seven -7
+KPX t S 11
+KPX t a 11
+KPX t aacute 11
+KPX t adieresis 11
+KPX t ae 7
+KPX t aring 11
+KPX t colon -12
+KPX t e -1
+KPX t eacute -1
+KPX t h -4
+KPX t o -4
+KPX t oacute -4
+KPX t odieresis -4
+KPX t quoteright -31
+KPX t semicolon -12
+KPX three four 9
+KPX three one -33
+KPX three seven -15
+KPX two four 14
+KPX two one -29
+KPX two seven -7
+KPX u quoteright -25
+KPX v a -23
+KPX v aacute -23
+KPX v acircumflex -23
+KPX v adieresis -23
+KPX v ae -25
+KPX v agrave -23
+KPX v aring -23
+KPX v atilde -23
+KPX v c -40
+KPX v colon -23
+KPX v comma -56
+KPX v e -35
+KPX v eacute -35
+KPX v ecircumflex -35
+KPX v egrave -35
+KPX v g -22
+KPX v hyphen -27
+KPX v l -16
+KPX v o -40
+KPX v oacute -40
+KPX v odieresis -40
+KPX v ograve -40
+KPX v oslash -39
+KPX v period -57
+KPX v s -16
+KPX v semicolon -23
+KPX w a -23
+KPX w aacute -23
+KPX w acircumflex -23
+KPX w adieresis -23
+KPX w ae -25
+KPX w agrave -23
+KPX w aring -23
+KPX w atilde -23
+KPX w c -36
+KPX w colon -23
+KPX w comma -50
+KPX w e -33
+KPX w eacute -33
+KPX w ecircumflex -33
+KPX w egrave -33
+KPX w g -22
+KPX w hyphen -23
+KPX w l -16
+KPX w o -36
+KPX w oacute -36
+KPX w odieresis -36
+KPX w ograve -36
+KPX w oslash -35
+KPX w period -51
+KPX w s -16
+KPX w semicolon -23
+KPX x a -2
+KPX x c -30
+KPX x e -27
+KPX x eacute -27
+KPX x o -30
+KPX x q -32
+KPX y a -32
+KPX y aacute -32
+KPX y acircumflex -32
+KPX y adieresis -32
+KPX y ae -34
+KPX y agrave -32
+KPX y aring -32
+KPX y atilde -32
+KPX y c -42
+KPX y colon -28
+KPX y comma -56
+KPX y e -40
+KPX y eacute -40
+KPX y ecircumflex -40
+KPX y egrave -40
+KPX y g -31
+KPX y hyphen -29
+KPX y l -19
+KPX y o -42
+KPX y oacute -42
+KPX y odieresis -42
+KPX y ograve -42
+KPX y oslash -41
+KPX y period -57
+KPX y s -24
+KPX y semicolon -28
+KPX zero four 11
+KPX zero one -31
+KPX zero seven 7
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/n021004l.pfb b/Master/xemtex/gsfonts/n021004l.pfb
new file mode 100644
index 00000000000..0418d76e60f
--- /dev/null
+++ b/Master/xemtex/gsfonts/n021004l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/n021004l.pfm b/Master/xemtex/gsfonts/n021004l.pfm
new file mode 100644
index 00000000000..e73d5ee536e
--- /dev/null
+++ b/Master/xemtex/gsfonts/n021004l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/n021023l.afm b/Master/xemtex/gsfonts/n021023l.afm
new file mode 100644
index 00000000000..40ad38b8a22
--- /dev/null
+++ b/Master/xemtex/gsfonts/n021023l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName NimbusRomNo9L-ReguItal
+FullName Nimbus Roman No9 L Regular Italic
+FamilyName Nimbus Roman No9 L
+Weight Regular
+ItalicAngle -15.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -169 -270 1010 924
+CapHeight 653
+XHeight 432
+Descender -205
+Ascender 683
+StartCharMetrics 316
+C 32 ; WX 250 ; N space ; B 125 0 125 0 ;
+C 33 ; WX 333 ; N exclam ; B 39 -11 302 667 ;
+C 34 ; WX 420 ; N quotedbl ; B 144 421 432 666 ;
+C 35 ; WX 500 ; N numbersign ; B 2 0 540 676 ;
+C 36 ; WX 500 ; N dollar ; B 31 -89 497 731 ;
+C 37 ; WX 833 ; N percent ; B 79 -13 790 676 ;
+C 38 ; WX 778 ; N ampersand ; B 76 -18 723 666 ;
+C 39 ; WX 333 ; N quoteright ; B 151 436 290 666 ;
+C 40 ; WX 333 ; N parenleft ; B 42 -181 315 669 ;
+C 41 ; WX 333 ; N parenright ; B 16 -180 289 669 ;
+C 42 ; WX 500 ; N asterisk ; B 128 255 492 666 ;
+C 43 ; WX 675 ; N plus ; B 86 0 590 506 ;
+C 44 ; WX 250 ; N comma ; B -4 -129 135 101 ;
+C 45 ; WX 333 ; N hyphen ; B 49 192 282 255 ;
+C 46 ; WX 250 ; N period ; B 27 -11 138 100 ;
+C 47 ; WX 278 ; N slash ; B -65 -18 386 666 ;
+C 48 ; WX 500 ; N zero ; B 32 -7 497 676 ;
+C 49 ; WX 500 ; N one ; B 49 0 409 676 ;
+C 50 ; WX 500 ; N two ; B 12 0 452 676 ;
+C 51 ; WX 500 ; N three ; B 15 -7 466 676 ;
+C 52 ; WX 500 ; N four ; B 1 0 479 676 ;
+C 53 ; WX 500 ; N five ; B 15 -7 491 666 ;
+C 54 ; WX 500 ; N six ; B 30 -7 521 686 ;
+C 55 ; WX 500 ; N seven ; B 75 -8 537 666 ;
+C 56 ; WX 500 ; N eight ; B 30 -7 493 676 ;
+C 57 ; WX 500 ; N nine ; B 23 -17 492 676 ;
+C 58 ; WX 333 ; N colon ; B 50 -11 261 441 ;
+C 59 ; WX 333 ; N semicolon ; B 27 -129 261 441 ;
+C 60 ; WX 675 ; N less ; B 84 -10 592 516 ;
+C 61 ; WX 675 ; N equal ; B 86 120 590 386 ;
+C 62 ; WX 675 ; N greater ; B 84 -10 592 516 ;
+C 63 ; WX 500 ; N question ; B 132 -12 472 664 ;
+C 64 ; WX 920 ; N at ; B 118 -18 806 666 ;
+C 65 ; WX 611 ; N A ; B -51 0 564 668 ;
+C 66 ; WX 611 ; N B ; B -8 0 588 653 ;
+C 67 ; WX 667 ; N C ; B 66 -18 689 666 ;
+C 68 ; WX 722 ; N D ; B -8 0 700 653 ;
+C 69 ; WX 611 ; N E ; B -1 0 634 653 ;
+C 70 ; WX 611 ; N F ; B 8 0 645 653 ;
+C 71 ; WX 722 ; N G ; B 52 -18 722 666 ;
+C 72 ; WX 722 ; N H ; B -8 0 767 653 ;
+C 73 ; WX 333 ; N I ; B -8 0 384 653 ;
+C 74 ; WX 444 ; N J ; B -6 -18 491 653 ;
+C 75 ; WX 667 ; N K ; B 7 0 722 653 ;
+C 76 ; WX 556 ; N L ; B -8 0 559 653 ;
+C 77 ; WX 833 ; N M ; B -18 0 873 653 ;
+C 78 ; WX 667 ; N N ; B -20 -15 727 653 ;
+C 79 ; WX 722 ; N O ; B 60 -18 706 666 ;
+C 80 ; WX 611 ; N P ; B 0 0 605 653 ;
+C 81 ; WX 722 ; N Q ; B 59 -183 699 666 ;
+C 82 ; WX 611 ; N R ; B -13 0 588 653 ;
+C 83 ; WX 500 ; N S ; B 17 -18 508 667 ;
+C 84 ; WX 556 ; N T ; B 59 0 633 653 ;
+C 85 ; WX 722 ; N U ; B 102 -18 765 653 ;
+C 86 ; WX 611 ; N V ; B 76 -18 688 653 ;
+C 87 ; WX 833 ; N W ; B 71 -18 906 653 ;
+C 88 ; WX 611 ; N X ; B -29 0 655 653 ;
+C 89 ; WX 556 ; N Y ; B 78 0 633 653 ;
+C 90 ; WX 556 ; N Z ; B -6 0 606 653 ;
+C 91 ; WX 389 ; N bracketleft ; B 21 -153 391 663 ;
+C 92 ; WX 278 ; N backslash ; B -41 -18 319 666 ;
+C 93 ; WX 389 ; N bracketright ; B 12 -153 382 663 ;
+C 94 ; WX 422 ; N asciicircum ; B 0 301 422 666 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 333 ; N quoteleft ; B 171 436 310 666 ;
+C 97 ; WX 500 ; N a ; B 17 -11 476 441 ;
+C 98 ; WX 500 ; N b ; B 23 -11 473 683 ;
+C 99 ; WX 444 ; N c ; B 30 -11 425 441 ;
+C 100 ; WX 500 ; N d ; B 15 -13 527 683 ;
+C 101 ; WX 444 ; N e ; B 31 -11 412 441 ;
+C 102 ; WX 278 ; N f ; B -147 -207 424 678 ;
+C 103 ; WX 500 ; N g ; B 8 -206 472 441 ;
+C 104 ; WX 500 ; N h ; B 19 -9 478 683 ;
+C 105 ; WX 278 ; N i ; B 49 -11 264 654 ;
+C 106 ; WX 278 ; N j ; B -124 -207 276 654 ;
+C 107 ; WX 444 ; N k ; B 14 -11 461 683 ;
+C 108 ; WX 278 ; N l ; B 40 -11 279 683 ;
+C 109 ; WX 722 ; N m ; B 12 -9 704 441 ;
+C 110 ; WX 500 ; N n ; B 14 -9 474 441 ;
+C 111 ; WX 500 ; N o ; B 27 -11 468 441 ;
+C 112 ; WX 500 ; N p ; B -75 -205 469 442 ;
+C 113 ; WX 500 ; N q ; B 25 -209 483 441 ;
+C 114 ; WX 389 ; N r ; B 45 0 412 441 ;
+C 115 ; WX 389 ; N s ; B 16 -13 366 442 ;
+C 116 ; WX 278 ; N t ; B 37 -11 296 546 ;
+C 117 ; WX 500 ; N u ; B 42 -11 475 441 ;
+C 118 ; WX 444 ; N v ; B 21 -18 426 441 ;
+C 119 ; WX 667 ; N w ; B 16 -18 648 441 ;
+C 120 ; WX 444 ; N x ; B -27 -11 447 441 ;
+C 121 ; WX 444 ; N y ; B -24 -206 426 441 ;
+C 122 ; WX 389 ; N z ; B -2 -81 380 428 ;
+C 123 ; WX 400 ; N braceleft ; B 51 -177 407 687 ;
+C 124 ; WX 275 ; N bar ; B 105 -18 171 666 ;
+C 125 ; WX 400 ; N braceright ; B -7 -177 349 687 ;
+C 126 ; WX 541 ; N asciitilde ; B 40 186 502 320 ;
+C 161 ; WX 389 ; N exclamdown ; B 59 -205 321 474 ;
+C 162 ; WX 500 ; N cent ; B 77 -143 472 560 ;
+C 163 ; WX 500 ; N sterling ; B 10 -6 517 670 ;
+C 164 ; WX 167 ; N fraction ; B -169 -10 337 676 ;
+C 165 ; WX 500 ; N yen ; B 27 0 603 653 ;
+C 166 ; WX 500 ; N florin ; B 25 -182 507 682 ;
+C 167 ; WX 500 ; N section ; B 53 -162 461 666 ;
+C 168 ; WX 500 ; N currency ; B -22 53 522 597 ;
+C 169 ; WX 214 ; N quotesingle ; B 132 421 241 666 ;
+C 170 ; WX 556 ; N quotedblleft ; B 166 436 514 666 ;
+C 171 ; WX 500 ; N guillemotleft ; B 53 37 445 403 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 51 37 281 403 ;
+C 173 ; WX 333 ; N guilsinglright ; B 52 37 282 403 ;
+C 174 ; WX 500 ; N fi ; B -141 -207 481 681 ;
+C 175 ; WX 500 ; N fl ; B -141 -204 518 682 ;
+C 177 ; WX 500 ; N endash ; B -6 197 505 243 ;
+C 178 ; WX 500 ; N dagger ; B 101 -159 488 666 ;
+C 179 ; WX 500 ; N daggerdbl ; B 22 -143 491 666 ;
+C 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ;
+C 182 ; WX 523 ; N paragraph ; B 55 -123 616 653 ;
+C 183 ; WX 350 ; N bullet ; B 40 191 310 461 ;
+C 184 ; WX 333 ; N quotesinglbase ; B 44 -129 183 101 ;
+C 185 ; WX 556 ; N quotedblbase ; B 57 -129 405 101 ;
+C 186 ; WX 556 ; N quotedblright ; B 151 436 499 666 ;
+C 187 ; WX 500 ; N guillemotright ; B 55 37 447 403 ;
+C 188 ; WX 889 ; N ellipsis ; B 57 -11 762 100 ;
+C 189 ; WX 1000 ; N perthousand ; B 25 -19 1010 706 ;
+C 191 ; WX 500 ; N questiondown ; B 28 -205 367 473 ;
+C 193 ; WX 333 ; N grave ; B 121 492 311 664 ;
+C 194 ; WX 333 ; N acute ; B 180 494 403 664 ;
+C 195 ; WX 333 ; N circumflex ; B 91 492 385 661 ;
+C 196 ; WX 333 ; N tilde ; B 100 517 427 624 ;
+C 197 ; WX 333 ; N macron ; B 99 532 411 583 ;
+C 198 ; WX 333 ; N breve ; B 117 492 418 650 ;
+C 199 ; WX 333 ; N dotaccent ; B 207 508 305 606 ;
+C 200 ; WX 333 ; N dieresis ; B 107 508 405 606 ;
+C 202 ; WX 333 ; N ring ; B 155 508 355 707 ;
+C 203 ; WX 333 ; N cedilla ; B -30 -217 182 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B 93 494 486 664 ;
+C 206 ; WX 333 ; N ogonek ; B -20 -169 200 40 ;
+C 207 ; WX 333 ; N caron ; B 121 492 426 661 ;
+C 208 ; WX 889 ; N emdash ; B -6 197 894 243 ;
+C 225 ; WX 889 ; N AE ; B -27 0 911 653 ;
+C 227 ; WX 276 ; N ordfeminine ; B 42 406 352 676 ;
+C 232 ; WX 556 ; N Lslash ; B -8 0 559 653 ;
+C 233 ; WX 722 ; N Oslash ; B 60 -105 699 722 ;
+C 234 ; WX 944 ; N OE ; B 49 -8 964 666 ;
+C 235 ; WX 310 ; N ordmasculine ; B 67 406 362 676 ;
+C 241 ; WX 667 ; N ae ; B 23 -11 640 441 ;
+C 245 ; WX 278 ; N dotlessi ; B 49 -11 235 441 ;
+C 248 ; WX 278 ; N lslash ; B 37 -11 307 683 ;
+C 249 ; WX 500 ; N oslash ; B 28 -135 469 554 ;
+C 250 ; WX 667 ; N oe ; B 20 -12 646 441 ;
+C 251 ; WX 500 ; N germandbls ; B -168 -207 493 679 ;
+C -1 ; WX 722 ; N Udieresis ; B 102 -18 765 818 ;
+C -1 ; WX 722 ; N Uacute ; B 102 -18 765 876 ;
+C -1 ; WX 500 ; N Scedilla ; B 17 -217 508 667 ;
+C -1 ; WX 556 ; N Tcaron ; B 59 0 633 873 ;
+C -1 ; WX 500 ; N Scaron ; B 17 -18 520 873 ;
+C -1 ; WX 611 ; N Rcaron ; B -13 0 588 873 ;
+C -1 ; WX 611 ; N Racute ; B -13 0 588 876 ;
+C -1 ; WX 500 ; N Sacute ; B 17 -18 508 876 ;
+C -1 ; WX 722 ; N Otilde ; B 60 -18 706 836 ;
+C -1 ; WX 500 ; N ucircumflex ; B 42 -11 475 661 ;
+C -1 ; WX 722 ; N Ohungarumlaut ; B 60 -18 706 876 ;
+C -1 ; WX 722 ; N Uhungarumlaut ; B 102 -18 765 876 ;
+C -1 ; WX 556 ; N Yacute ; B 78 0 633 876 ;
+C -1 ; WX 722 ; N Eth ; B -8 0 700 653 ;
+C -1 ; WX 722 ; N Dcroat ; B -8 0 700 653 ;
+C -1 ; WX 556 ; N Zacute ; B -6 0 606 876 ;
+C -1 ; WX 722 ; N Uring ; B 102 -18 765 919 ;
+C -1 ; WX 500 ; N gbreve ; B 8 -206 502 650 ;
+C -1 ; WX 444 ; N eogonek ; B 31 -169 444 441 ;
+C -1 ; WX 444 ; N edotaccent ; B 31 -11 412 606 ;
+C -1 ; WX 444 ; N ecaron ; B 31 -11 482 661 ;
+C -1 ; WX 722 ; N Ugrave ; B 102 -18 765 876 ;
+C -1 ; WX 611 ; N Thorn ; B 0 0 569 653 ;
+C -1 ; WX 444 ; N eacute ; B 31 -11 459 664 ;
+C -1 ; WX 444 ; N edieresis ; B 31 -11 451 606 ;
+C -1 ; WX 521 ; N dcaron ; B 15 -13 641 683 ;
+C -1 ; WX 444 ; N ccedilla ; B 26 -217 425 441 ;
+C -1 ; WX 444 ; N ccaron ; B 30 -11 484 661 ;
+C -1 ; WX 444 ; N cacute ; B 30 -11 458 664 ;
+C -1 ; WX 500 ; N aogonek ; B 17 -169 500 441 ;
+C -1 ; WX 500 ; N aring ; B 17 -11 476 707 ;
+C -1 ; WX 500 ; N atilde ; B 17 -11 511 624 ;
+C -1 ; WX 500 ; N abreve ; B 17 -11 502 650 ;
+C -1 ; WX 444 ; N egrave ; B 31 -11 412 664 ;
+C -1 ; WX 500 ; N agrave ; B 17 -11 476 664 ;
+C -1 ; WX 500 ; N aacute ; B 17 -11 487 664 ;
+C -1 ; WX 500 ; N adieresis ; B 17 -11 489 606 ;
+C -1 ; WX 722 ; N Uogonek ; B 102 -169 765 653 ;
+C -1 ; WX 500 ; N ugrave ; B 42 -11 475 664 ;
+C -1 ; WX 500 ; N uacute ; B 42 -11 477 664 ;
+C -1 ; WX 500 ; N udieresis ; B 42 -11 479 606 ;
+C -1 ; WX 278 ; N tcaron ; B 37 -11 378 666 ;
+C -1 ; WX 389 ; N scommaaccent ; B 16 -270 366 442 ;
+C -1 ; WX 556 ; N Zcaron ; B -6 0 606 873 ;
+C -1 ; WX 444 ; N ecircumflex ; B 31 -11 441 661 ;
+C -1 ; WX 722 ; N Ucircumflex ; B 102 -18 765 873 ;
+C -1 ; WX 500 ; N acircumflex ; B 17 -11 476 661 ;
+C -1 ; WX 556 ; N Zdotaccent ; B -6 0 606 818 ;
+C -1 ; WX 389 ; N scaron ; B 16 -13 454 661 ;
+C -1 ; WX 611 ; N Amacron ; B -51 0 564 795 ;
+C -1 ; WX 389 ; N sacute ; B 16 -13 431 664 ;
+C -1 ; WX 556 ; N Tcommaaccent ; B 59 -270 633 653 ;
+C -1 ; WX 556 ; N Ydieresis ; B 78 0 633 818 ;
+C -1 ; WX 500 ; N thorn ; B -75 -205 469 683 ;
+C -1 ; WX 611 ; N Emacron ; B -1 0 634 795 ;
+C -1 ; WX 722 ; N Ograve ; B 60 -18 706 876 ;
+C -1 ; WX 722 ; N Oacute ; B 60 -18 706 876 ;
+C -1 ; WX 722 ; N Odieresis ; B 60 -18 706 818 ;
+C -1 ; WX 667 ; N Ntilde ; B -20 -15 727 836 ;
+C -1 ; WX 667 ; N Ncaron ; B -20 -15 727 873 ;
+C -1 ; WX 667 ; N Nacute ; B -20 -15 727 876 ;
+C -1 ; WX 556 ; N Lcaron ; B -8 0 596 666 ;
+C -1 ; WX 556 ; N Lacute ; B -8 0 559 876 ;
+C -1 ; WX 333 ; N Idotaccent ; B -8 0 384 818 ;
+C -1 ; WX 389 ; N racute ; B 45 0 431 664 ;
+C -1 ; WX 333 ; N Icircumflex ; B -8 0 425 873 ;
+C -1 ; WX 500 ; N ohungarumlaut ; B 27 -11 570 664 ;
+C -1 ; WX 500 ; N otilde ; B 27 -11 496 624 ;
+C -1 ; WX 500 ; N Euro ; B 57 0 668 693 ;
+C -1 ; WX 500 ; N ocircumflex ; B 27 -11 468 661 ;
+C -1 ; WX 300 ; N onesuperior ; B 43 271 284 676 ;
+C -1 ; WX 300 ; N twosuperior ; B 33 271 324 676 ;
+C -1 ; WX 300 ; N threesuperior ; B 43 268 339 676 ;
+C -1 ; WX 333 ; N Igrave ; B -8 0 384 876 ;
+C -1 ; WX 333 ; N Iacute ; B -8 0 403 876 ;
+C -1 ; WX 333 ; N Imacron ; B -8 0 441 795 ;
+C -1 ; WX 333 ; N Iogonek ; B -8 -169 384 653 ;
+C -1 ; WX 333 ; N Idieresis ; B -8 0 435 818 ;
+C -1 ; WX 722 ; N Gbreve ; B 52 -18 722 862 ;
+C -1 ; WX 722 ; N Umacron ; B 102 -18 765 795 ;
+C -1 ; WX 667 ; N Kcommaaccent ; B 7 -270 722 653 ;
+C -1 ; WX 500 ; N ograve ; B 27 -11 468 664 ;
+C -1 ; WX 500 ; N Scommaaccent ; B 17 -270 508 667 ;
+C -1 ; WX 611 ; N Eogonek ; B -1 -169 651 653 ;
+C -1 ; WX 500 ; N oacute ; B 27 -11 487 664 ;
+C -1 ; WX 611 ; N Edotaccent ; B -1 0 634 818 ;
+C -1 ; WX 278 ; N iogonek ; B 49 -169 278 654 ;
+C -1 ; WX 500 ; N gcommaaccent ; B 8 -206 472 706 ;
+C -1 ; WX 500 ; N odieresis ; B 27 -11 489 606 ;
+C -1 ; WX 500 ; N ntilde ; B 14 -9 476 624 ;
+C -1 ; WX 500 ; N ncaron ; B 14 -9 510 661 ;
+C -1 ; WX 611 ; N Ecaron ; B -1 0 634 873 ;
+C -1 ; WX 611 ; N Ecircumflex ; B -1 0 634 873 ;
+C -1 ; WX 389 ; N scedilla ; B -2 -217 366 442 ;
+C -1 ; WX 389 ; N rcaron ; B 45 0 454 661 ;
+C -1 ; WX 611 ; N Egrave ; B -1 0 634 876 ;
+C -1 ; WX 611 ; N Eacute ; B -1 0 634 876 ;
+C -1 ; WX 722 ; N Gcommaaccent ; B 52 -270 722 666 ;
+C -1 ; WX 611 ; N Rcommaaccent ; B -13 -270 588 653 ;
+C -1 ; WX 611 ; N Edieresis ; B -1 0 634 818 ;
+C -1 ; WX 500 ; N nacute ; B 14 -9 487 664 ;
+C -1 ; WX 500 ; N uogonek ; B 42 -169 500 441 ;
+C -1 ; WX 500 ; N umacron ; B 42 -11 495 583 ;
+C -1 ; WX 722 ; N Dcaron ; B -8 0 700 873 ;
+C -1 ; WX 278 ; N lcaron ; B 40 -11 395 683 ;
+C -1 ; WX 667 ; N Ccaron ; B 66 -18 689 873 ;
+C -1 ; WX 667 ; N Cacute ; B 66 -18 689 876 ;
+C -1 ; WX 667 ; N Ccedilla ; B 66 -217 689 666 ;
+C -1 ; WX 400 ; N degree ; B 101 390 387 676 ;
+C -1 ; WX 611 ; N Aogonek ; B -51 -169 707 668 ;
+C -1 ; WX 675 ; N minus ; B 86 220 590 286 ;
+C -1 ; WX 675 ; N multiply ; B 93 8 582 497 ;
+C -1 ; WX 675 ; N divide ; B 86 -11 590 517 ;
+C -1 ; WX 611 ; N Aring ; B -51 0 564 904 ;
+C -1 ; WX 980 ; N trademark ; B 30 247 957 653 ;
+C -1 ; WX 389 ; N rcommaaccent ; B 35 -270 412 441 ;
+C -1 ; WX 278 ; N lacute ; B 40 -11 376 876 ;
+C -1 ; WX 500 ; N omacron ; B 27 -11 495 583 ;
+C -1 ; WX 611 ; N Atilde ; B -51 0 566 836 ;
+C -1 ; WX 278 ; N icircumflex ; B 34 -11 328 661 ;
+C -1 ; WX 278 ; N igrave ; B 49 -11 284 664 ;
+C -1 ; WX 500 ; N ncommaaccent ; B 14 -270 474 441 ;
+C -1 ; WX 278 ; N lcommaaccent ; B -21 -270 279 683 ;
+C -1 ; WX 675 ; N plusminus ; B 86 0 590 568 ;
+C -1 ; WX 750 ; N onehalf ; B 34 -10 749 676 ;
+C -1 ; WX 750 ; N onequarter ; B 33 -10 736 676 ;
+C -1 ; WX 750 ; N threequarters ; B 23 -10 736 676 ;
+C -1 ; WX 278 ; N iacute ; B 49 -11 356 664 ;
+C -1 ; WX 611 ; N Abreve ; B -51 0 564 862 ;
+C -1 ; WX 444 ; N kcommaaccent ; B 14 -270 461 683 ;
+C -1 ; WX 722 ; N Omacron ; B 60 -18 706 795 ;
+C -1 ; WX 278 ; N imacron ; B 49 -11 384 583 ;
+C -1 ; WX 444 ; N emacron ; B 31 -11 467 583 ;
+C -1 ; WX 500 ; N amacron ; B 17 -11 495 583 ;
+C -1 ; WX 278 ; N tcommaaccent ; B -21 -270 296 546 ;
+C -1 ; WX 444 ; N ydieresis ; B -24 -206 441 606 ;
+C -1 ; WX 389 ; N zdotaccent ; B -2 -81 380 606 ;
+C -1 ; WX 389 ; N zcaron ; B -2 -81 434 661 ;
+C -1 ; WX 389 ; N zacute ; B -2 -81 431 664 ;
+C -1 ; WX 444 ; N yacute ; B -24 -206 459 664 ;
+C -1 ; WX 500 ; N uhungarumlaut ; B 42 -11 570 664 ;
+C -1 ; WX 500 ; N eth ; B 27 -11 482 683 ;
+C -1 ; WX 500 ; N uring ; B 42 -11 475 707 ;
+C -1 ; WX 722 ; N Ocircumflex ; B 60 -18 706 873 ;
+C -1 ; WX 333 ; N commaaccent ; B 7 -270 146 -40 ;
+C -1 ; WX 760 ; N copyright ; B 41 -18 719 666 ;
+C -1 ; WX 760 ; N registered ; B 41 -18 719 666 ;
+C -1 ; WX 611 ; N Acircumflex ; B -51 0 564 873 ;
+C -1 ; WX 278 ; N idieresis ; B 49 -11 353 606 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 564 ; N notequal ; B 30 -3 534 509 ;
+C -1 ; WX 549 ; N radical ; B -2 -65 526 924 ;
+C -1 ; WX 611 ; N Agrave ; B -51 0 564 876 ;
+C -1 ; WX 611 ; N Aacute ; B -51 0 564 876 ;
+C -1 ; WX 675 ; N lessequal ; B 84 0 592 628 ;
+C -1 ; WX 675 ; N greaterequal ; B 84 0 592 628 ;
+C -1 ; WX 675 ; N logicalnot ; B 86 108 590 386 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 667 ; N Ncommaaccent ; B -20 -270 727 653 ;
+C -1 ; WX 500 ; N dcroat ; B 15 -13 558 683 ;
+C -1 ; WX 275 ; N brokenbar ; B 105 -18 171 666 ;
+C -1 ; WX 556 ; N Lcommaaccent ; B -8 -270 559 653 ;
+C -1 ; WX 611 ; N Adieresis ; B -51 0 564 818 ;
+C -1 ; WX 500 ; N mu ; B -30 -209 497 428 ;
+C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -50
+KPX A Ccedilla -50
+KPX A G -44
+KPX A O -45
+KPX A Odieresis -45
+KPX A Q -44
+KPX A T -14
+KPX A U -57
+KPX A Uacute -57
+KPX A Ucircumflex -57
+KPX A Udieresis -57
+KPX A Ugrave -57
+KPX A V -81
+KPX A W -75
+KPX A Y -21
+KPX A a -4
+KPX A b 0
+KPX A c -18
+KPX A ccedilla -28
+KPX A comma 8
+KPX A d -4
+KPX A e -17
+KPX A g -25
+KPX A guillemotleft -44
+KPX A guilsinglleft -43
+KPX A hyphen -13
+KPX A o -17
+KPX A period 8
+KPX A q -12
+KPX A quotedblright -92
+KPX A quoteright -92
+KPX A t -6
+KPX A u -9
+KPX A v -50
+KPX A w -44
+KPX A y -57
+KPX Aacute C -50
+KPX Aacute G -44
+KPX Aacute O -45
+KPX Aacute Q -44
+KPX Aacute T -14
+KPX Aacute U -57
+KPX Aacute V -81
+KPX Aacute W -75
+KPX Aacute Y -21
+KPX Aacute a -4
+KPX Aacute b 0
+KPX Aacute c -18
+KPX Aacute comma 8
+KPX Aacute d -4
+KPX Aacute e -17
+KPX Aacute g -25
+KPX Aacute guillemotleft -44
+KPX Aacute guilsinglleft -43
+KPX Aacute hyphen -13
+KPX Aacute o -17
+KPX Aacute period 8
+KPX Aacute q -12
+KPX Aacute quoteright -92
+KPX Aacute t -6
+KPX Aacute u -9
+KPX Aacute v -50
+KPX Aacute w -44
+KPX Aacute y -57
+KPX Acircumflex C -50
+KPX Acircumflex G -44
+KPX Acircumflex O -45
+KPX Acircumflex Q -44
+KPX Acircumflex T -14
+KPX Acircumflex U -57
+KPX Acircumflex V -81
+KPX Acircumflex W -75
+KPX Acircumflex Y -21
+KPX Acircumflex comma 8
+KPX Acircumflex period 8
+KPX Adieresis C -50
+KPX Adieresis G -44
+KPX Adieresis O -45
+KPX Adieresis Q -44
+KPX Adieresis T -14
+KPX Adieresis U -57
+KPX Adieresis V -81
+KPX Adieresis W -75
+KPX Adieresis Y -21
+KPX Adieresis a -4
+KPX Adieresis b 0
+KPX Adieresis c -18
+KPX Adieresis comma 8
+KPX Adieresis d -4
+KPX Adieresis g -25
+KPX Adieresis guillemotleft -44
+KPX Adieresis guilsinglleft -43
+KPX Adieresis hyphen -13
+KPX Adieresis o -17
+KPX Adieresis period 8
+KPX Adieresis q -12
+KPX Adieresis quotedblright -92
+KPX Adieresis quoteright -92
+KPX Adieresis t -6
+KPX Adieresis u -9
+KPX Adieresis v -50
+KPX Adieresis w -44
+KPX Adieresis y -57
+KPX Agrave C -50
+KPX Agrave G -44
+KPX Agrave O -45
+KPX Agrave Q -44
+KPX Agrave T -14
+KPX Agrave U -57
+KPX Agrave V -81
+KPX Agrave W -75
+KPX Agrave Y -21
+KPX Agrave comma 8
+KPX Agrave period 8
+KPX Aring C -50
+KPX Aring G -44
+KPX Aring O -45
+KPX Aring Q -44
+KPX Aring T -14
+KPX Aring U -57
+KPX Aring V -81
+KPX Aring W -75
+KPX Aring Y -21
+KPX Aring a -4
+KPX Aring b 0
+KPX Aring c -18
+KPX Aring comma 8
+KPX Aring d -4
+KPX Aring e -17
+KPX Aring g -25
+KPX Aring guillemotleft -44
+KPX Aring guilsinglleft -43
+KPX Aring hyphen -13
+KPX Aring o -17
+KPX Aring period 8
+KPX Aring q -12
+KPX Aring quotedblright -92
+KPX Aring quoteright -92
+KPX Aring t -6
+KPX Aring u -9
+KPX Aring v -50
+KPX Aring w -44
+KPX Aring y -57
+KPX Atilde C -50
+KPX Atilde G -44
+KPX Atilde O -45
+KPX Atilde Q -44
+KPX Atilde T -14
+KPX Atilde U -57
+KPX Atilde V -81
+KPX Atilde W -75
+KPX Atilde Y -21
+KPX Atilde comma 7
+KPX Atilde period 7
+KPX B A -23
+KPX B AE -35
+KPX B Aacute -23
+KPX B Acircumflex -23
+KPX B Adieresis -23
+KPX B Aring -23
+KPX B Atilde -23
+KPX B O -14
+KPX B OE -6
+KPX B Oacute -14
+KPX B Ocircumflex -14
+KPX B Odieresis -14
+KPX B Ograve -14
+KPX B Oslash -14
+KPX B V -32
+KPX B W -29
+KPX B Y -39
+KPX C A -14
+KPX C AE -30
+KPX C Aacute -14
+KPX C Adieresis -14
+KPX C Aring -14
+KPX C H -13
+KPX C K -21
+KPX C O -19
+KPX C Oacute -19
+KPX C Odieresis -19
+KPX Ccedilla A -18
+KPX D A -36
+KPX D Aacute -36
+KPX D Acircumflex -36
+KPX D Adieresis -36
+KPX D Agrave -36
+KPX D Aring -36
+KPX D Atilde -36
+KPX D J -32
+KPX D T -9
+KPX D V -42
+KPX D W -36
+KPX D X -40
+KPX D Y -50
+KPX F A -72
+KPX F Aacute -72
+KPX F Acircumflex -72
+KPX F Adieresis -72
+KPX F Agrave -72
+KPX F Aring -72
+KPX F Atilde -72
+KPX F J -60
+KPX F O -40
+KPX F Odieresis -40
+KPX F a -77
+KPX F aacute -78
+KPX F adieresis -52
+KPX F ae -82
+KPX F aring -70
+KPX F comma -95
+KPX F e -83
+KPX F eacute -83
+KPX F hyphen -45
+KPX F i -36
+KPX F j -41
+KPX F o -79
+KPX F oacute -79
+KPX F odieresis -52
+KPX F oe -75
+KPX F oslash -80
+KPX F period -99
+KPX F r -52
+KPX F u -50
+KPX G A -17
+KPX G AE -29
+KPX G Aacute -17
+KPX G Acircumflex -17
+KPX G Adieresis -17
+KPX G Agrave -17
+KPX G Aring -17
+KPX G Atilde -17
+KPX G T -13
+KPX G V -5
+KPX G W -2
+KPX G Y -12
+KPX J A -40
+KPX J AE -52
+KPX J Adieresis -40
+KPX J Aring -40
+KPX K C -55
+KPX K G -53
+KPX K O -46
+KPX K OE -45
+KPX K Oacute -46
+KPX K Odieresis -46
+KPX K S 6
+KPX K T 21
+KPX K a -5
+KPX K adieresis -5
+KPX K ae -5
+KPX K aring -5
+KPX K e -18
+KPX K hyphen -57
+KPX K o -18
+KPX K oacute -18
+KPX K odieresis -18
+KPX K u -10
+KPX K udieresis -10
+KPX K y -89
+KPX L A 44
+KPX L AE 32
+KPX L Aacute 44
+KPX L Adieresis 44
+KPX L Aring 44
+KPX L C 6
+KPX L Ccedilla 4
+KPX L G 11
+KPX L O 10
+KPX L Oacute 10
+KPX L Ocircumflex 10
+KPX L Odieresis 10
+KPX L Ograve 10
+KPX L Otilde 10
+KPX L S 20
+KPX L T -13
+KPX L U -8
+KPX L Udieresis -8
+KPX L V -55
+KPX L W -48
+KPX L Y -20
+KPX L hyphen 47
+KPX L quotedblright -92
+KPX L quoteright -92
+KPX L u 12
+KPX L udieresis 10
+KPX L y -26
+KPX N A -20
+KPX N AE -32
+KPX N Aacute -20
+KPX N Adieresis -20
+KPX N Aring -20
+KPX N C -21
+KPX N Ccedilla -20
+KPX N G -14
+KPX N O -20
+KPX N Oacute -20
+KPX N Odieresis -20
+KPX N a -22
+KPX N aacute -23
+KPX N adieresis -23
+KPX N ae -27
+KPX N aring -23
+KPX N comma -13
+KPX N e -28
+KPX N eacute -30
+KPX N o -25
+KPX N oacute -27
+KPX N odieresis -27
+KPX N oslash -27
+KPX N period -16
+KPX N u -24
+KPX N udieresis -25
+KPX O A -38
+KPX O AE -70
+KPX O Aacute -38
+KPX O Adieresis -38
+KPX O Aring -38
+KPX O T -3
+KPX O V -45
+KPX O W -39
+KPX O X -41
+KPX O Y -51
+KPX Oacute A -38
+KPX Oacute T -3
+KPX Oacute V -45
+KPX Oacute W -39
+KPX Oacute Y -51
+KPX Ocircumflex T -3
+KPX Ocircumflex V -45
+KPX Ocircumflex Y -51
+KPX Odieresis A -38
+KPX Odieresis T -3
+KPX Odieresis V -45
+KPX Odieresis W -39
+KPX Odieresis X -41
+KPX Odieresis Y -51
+KPX Ograve T -3
+KPX Ograve V -45
+KPX Ograve Y -51
+KPX Oslash A -38
+KPX Otilde T -3
+KPX Otilde V -45
+KPX Otilde Y -51
+KPX P A -79
+KPX P AE -116
+KPX P Aacute -79
+KPX P Adieresis -79
+KPX P Aring -79
+KPX P J -89
+KPX P a -74
+KPX P aacute -74
+KPX P adieresis -64
+KPX P ae -80
+KPX P aring -74
+KPX P comma -118
+KPX P e -79
+KPX P eacute -79
+KPX P hyphen -64
+KPX P o -73
+KPX P oacute -73
+KPX P odieresis -64
+KPX P oe -67
+KPX P oslash -74
+KPX P period -121
+KPX R C -26
+KPX R Ccedilla -25
+KPX R G -20
+KPX R O -26
+KPX R OE -18
+KPX R Oacute -26
+KPX R Odieresis -26
+KPX R T 0
+KPX R U -36
+KPX R Udieresis -36
+KPX R V -31
+KPX R W -28
+KPX R Y -19
+KPX R a -3
+KPX R aacute -3
+KPX R adieresis -3
+KPX R ae -3
+KPX R aring -3
+KPX R e -15
+KPX R eacute -15
+KPX R hyphen -29
+KPX R o -15
+KPX R oacute -15
+KPX R odieresis -15
+KPX R oe -15
+KPX R u -7
+KPX R uacute -7
+KPX R udieresis -7
+KPX R y 0
+KPX S A -2
+KPX S AE -14
+KPX S Aacute -2
+KPX S Adieresis -2
+KPX S Aring -2
+KPX S T 1
+KPX S V 5
+KPX S W 8
+KPX S Y -1
+KPX S t -13
+KPX T A -33
+KPX T AE -45
+KPX T Aacute -33
+KPX T Acircumflex -33
+KPX T Adieresis -33
+KPX T Agrave -33
+KPX T Aring -33
+KPX T Atilde -33
+KPX T C -15
+KPX T G -7
+KPX T J -39
+KPX T O -20
+KPX T OE -8
+KPX T Oacute -20
+KPX T Ocircumflex -20
+KPX T Odieresis -20
+KPX T Ograve -20
+KPX T Oslash -20
+KPX T Otilde -20
+KPX T S -2
+KPX T V 41
+KPX T W 43
+KPX T Y 33
+KPX T a -81
+KPX T ae -81
+KPX T c -86
+KPX T colon -84
+KPX T comma -70
+KPX T e -90
+KPX T g -102
+KPX T guillemotleft -102
+KPX T guilsinglleft -101
+KPX T hyphen -68
+KPX T i -16
+KPX T j -20
+KPX T o -87
+KPX T oslash -89
+KPX T period -71
+KPX T r -87
+KPX T s -74
+KPX T semicolon -92
+KPX T u -86
+KPX T v -72
+KPX T w -69
+KPX T y -70
+KPX U A -50
+KPX U AE -69
+KPX U Aacute -50
+KPX U Acircumflex -50
+KPX U Adieresis -50
+KPX U Aring -50
+KPX U Atilde -50
+KPX U comma -35
+KPX U m -28
+KPX U n -29
+KPX U p -32
+KPX U period -39
+KPX U r -41
+KPX Uacute A -50
+KPX Uacute comma -35
+KPX Uacute m -28
+KPX Uacute n -29
+KPX Uacute p -32
+KPX Uacute period -39
+KPX Uacute r -41
+KPX Ucircumflex A -50
+KPX Udieresis A -50
+KPX Udieresis b 1
+KPX Udieresis comma -35
+KPX Udieresis m -28
+KPX Udieresis n -29
+KPX Udieresis p -32
+KPX Udieresis period -39
+KPX Udieresis r -41
+KPX Ugrave A -50
+KPX V A -66
+KPX V AE -102
+KPX V Aacute -66
+KPX V Acircumflex -66
+KPX V Adieresis -66
+KPX V Agrave -66
+KPX V Aring -66
+KPX V Atilde -66
+KPX V C -48
+KPX V G -42
+KPX V O -48
+KPX V Oacute -48
+KPX V Ocircumflex -48
+KPX V Odieresis -48
+KPX V Ograve -48
+KPX V Oslash -48
+KPX V Otilde -48
+KPX V S -15
+KPX V T 32
+KPX V a -67
+KPX V ae -72
+KPX V colon -82
+KPX V comma -76
+KPX V e -74
+KPX V g -84
+KPX V guillemotleft -82
+KPX V guilsinglleft -81
+KPX V hyphen -45
+KPX V i -16
+KPX V o -70
+KPX V oslash -72
+KPX V period -80
+KPX V r -45
+KPX V semicolon -79
+KPX V u -40
+KPX V y -16
+KPX W A -57
+KPX W AE -85
+KPX W Aacute -57
+KPX W Acircumflex -57
+KPX W Adieresis -57
+KPX W Agrave -57
+KPX W Aring -57
+KPX W Atilde -57
+KPX W C -39
+KPX W G -33
+KPX W O -39
+KPX W Oacute -39
+KPX W Ocircumflex -39
+KPX W Odieresis -39
+KPX W Ograve -39
+KPX W Oslash -39
+KPX W Otilde -39
+KPX W S -17
+KPX W T 30
+KPX W a -53
+KPX W ae -58
+KPX W colon -77
+KPX W comma -58
+KPX W e -60
+KPX W g -75
+KPX W guillemotleft -68
+KPX W guilsinglleft -67
+KPX W hyphen -32
+KPX W i -18
+KPX W o -56
+KPX W oslash -58
+KPX W period -62
+KPX W r -40
+KPX W semicolon -74
+KPX W u -35
+KPX W y -11
+KPX X C -50
+KPX X O -44
+KPX X Odieresis -44
+KPX X Q -42
+KPX X a -3
+KPX X e -15
+KPX X hyphen -41
+KPX X o -15
+KPX X u -7
+KPX X y -67
+KPX Y A -27
+KPX Y AE -39
+KPX Y Aacute -27
+KPX Y Acircumflex -27
+KPX Y Adieresis -27
+KPX Y Agrave -27
+KPX Y Aring -27
+KPX Y Atilde -27
+KPX Y C -52
+KPX Y G -45
+KPX Y O -52
+KPX Y Oacute -52
+KPX Y Ocircumflex -52
+KPX Y Odieresis -52
+KPX Y Ograve -52
+KPX Y Oslash -52
+KPX Y Otilde -52
+KPX Y S -15
+KPX Y T 32
+KPX Y a -72
+KPX Y ae -75
+KPX Y colon -78
+KPX Y comma -64
+KPX Y e -78
+KPX Y g -94
+KPX Y guillemotleft -93
+KPX Y guilsinglleft -92
+KPX Y hyphen -60
+KPX Y i -16
+KPX Y o -75
+KPX Y oslash -77
+KPX Y p -52
+KPX Y period -65
+KPX Y semicolon -86
+KPX Y u -58
+KPX Y v -32
+KPX Z v -12
+KPX Z y -28
+KPX a j -22
+KPX a quoteright -28
+KPX a v 1
+KPX a w 4
+KPX a y 2
+KPX aacute v 1
+KPX aacute w 4
+KPX aacute y 2
+KPX adieresis v 1
+KPX adieresis w 4
+KPX adieresis y 2
+KPX ae v 2
+KPX ae w 5
+KPX ae y 6
+KPX agrave v 1
+KPX agrave w 4
+KPX agrave y 2
+KPX aring v 1
+KPX aring w 4
+KPX aring y 2
+KPX b v -10
+KPX b w -7
+KPX b y -3
+KPX c h -30
+KPX c k -29
+KPX comma one -40
+KPX comma quotedblright -39
+KPX comma quoteright -39
+KPX e quoteright -21
+KPX e t -16
+KPX e v 0
+KPX e w 2
+KPX e x -10
+KPX e y 4
+KPX eacute v 0
+KPX eacute w 2
+KPX eacute y 4
+KPX ecircumflex v 0
+KPX ecircumflex w 2
+KPX ecircumflex y 4
+KPX eight four 13
+KPX eight one -50
+KPX eight seven -1
+KPX f a -26
+KPX f aacute -27
+KPX f adieresis -2
+KPX f ae -30
+KPX f aring -17
+KPX f e -32
+KPX f eacute -34
+KPX f f 30
+KPX f i 17
+KPX f j 13
+KPX f l 42
+KPX f o -29
+KPX f oacute -30
+KPX f odieresis -2
+KPX f oe -24
+KPX f oslash -31
+KPX f quoteright 18
+KPX f s -20
+KPX f t 18
+KPX five four -5
+KPX five one -71
+KPX five seven -28
+KPX four four 12
+KPX four one -69
+KPX four seven -27
+KPX g a -41
+KPX g adieresis -42
+KPX g ae -46
+KPX g aring -42
+KPX g e -45
+KPX g eacute -45
+KPX g l -46
+KPX g oacute -41
+KPX g odieresis -41
+KPX g r -21
+KPX guillemotright A -25
+KPX guillemotright AE -51
+KPX guillemotright Aacute -25
+KPX guillemotright Adieresis -25
+KPX guillemotright Aring -25
+KPX guillemotright T -77
+KPX guillemotright V -76
+KPX guillemotright W -67
+KPX guillemotright Y -81
+KPX guilsinglright A -24
+KPX guilsinglright AE -50
+KPX guilsinglright Aacute -24
+KPX guilsinglright Adieresis -24
+KPX guilsinglright Aring -24
+KPX guilsinglright T -76
+KPX guilsinglright V -75
+KPX guilsinglright W -66
+KPX guilsinglright Y -80
+KPX h quoteright -31
+KPX h y -4
+KPX hyphen A 3
+KPX hyphen AE -23
+KPX hyphen Aacute 3
+KPX hyphen Adieresis 3
+KPX hyphen Aring 3
+KPX hyphen T -46
+KPX hyphen V -43
+KPX hyphen W -34
+KPX hyphen Y -53
+KPX i T -10
+KPX i j -31
+KPX k a 12
+KPX k aacute 12
+KPX k adieresis 12
+KPX k ae 9
+KPX k aring 12
+KPX k comma 27
+KPX k e 5
+KPX k eacute 5
+KPX k g -27
+KPX k hyphen -27
+KPX k o 6
+KPX k oacute 6
+KPX k odieresis 6
+KPX k period 26
+KPX k s 7
+KPX k u 8
+KPX k udieresis 8
+KPX l v -12
+KPX l y -11
+KPX m p -4
+KPX m v -6
+KPX m w -4
+KPX m y -3
+KPX n T -41
+KPX n p -7
+KPX n quoteright -34
+KPX n v -10
+KPX n w -7
+KPX n y -6
+KPX nine four 2
+KPX nine one -64
+KPX nine seven -5
+KPX o T -63
+KPX o quoteright -24
+KPX o t -15
+KPX o v -18
+KPX o w -15
+KPX o x -33
+KPX o y -10
+KPX oacute v -18
+KPX oacute w -15
+KPX oacute y -10
+KPX ocircumflex t -16
+KPX odieresis t -16
+KPX odieresis v -18
+KPX odieresis w -15
+KPX odieresis x -33
+KPX odieresis y -10
+KPX ograve v -18
+KPX ograve w -15
+KPX ograve y -10
+KPX one comma -52
+KPX one eight -57
+KPX one five -55
+KPX one four -69
+KPX one nine -61
+KPX one one -69
+KPX one period -56
+KPX one seven -60
+KPX one six -50
+KPX one three -55
+KPX one two -50
+KPX one zero -41
+KPX p t -14
+KPX p y -4
+KPX period one -39
+KPX period quotedblright -38
+KPX period quoteright -38
+KPX q c -13
+KPX q u -11
+KPX quotedblbase A 1
+KPX quotedblbase AE -13
+KPX quotedblbase T -64
+KPX quotedblbase V -96
+KPX quotedblbase W -84
+KPX quotedblbase Y -69
+KPX quotedblleft A -88
+KPX quotedblleft AE -141
+KPX quotedblleft Aacute -88
+KPX quotedblleft Adieresis -88
+KPX quotedblleft Aring -88
+KPX quotedblleft T -19
+KPX quotedblleft V -17
+KPX quotedblleft W -15
+KPX quotedblleft Y -25
+KPX quotedblright A -94
+KPX quotedblright AE -147
+KPX quotedblright Aacute -94
+KPX quotedblright Adieresis -94
+KPX quotedblright Aring -94
+KPX quotedblright T -21
+KPX quotedblright V -22
+KPX quotedblright W -19
+KPX quotedblright Y -30
+KPX quoteleft A -78
+KPX quoteleft AE -131
+KPX quoteleft Aacute -78
+KPX quoteleft Adieresis -78
+KPX quoteleft Aring -78
+KPX quoteleft T -9
+KPX quoteleft V -8
+KPX quoteleft W -5
+KPX quoteleft Y -15
+KPX quoteright A -87
+KPX quoteright AE -140
+KPX quoteright Aacute -87
+KPX quoteright Adieresis -87
+KPX quoteright Aring -87
+KPX quoteright comma -73
+KPX quoteright d -79
+KPX quoteright o -78
+KPX quoteright period -78
+KPX quoteright r -57
+KPX quoteright s -63
+KPX quoteright t -49
+KPX quoteright v -28
+KPX quoteright w -26
+KPX quoteright y -28
+KPX r a -29
+KPX r aacute -29
+KPX r acircumflex -29
+KPX r adieresis -29
+KPX r ae -36
+KPX r agrave -29
+KPX r aring -29
+KPX r c -26
+KPX r ccedilla -17
+KPX r colon -28
+KPX r comma -68
+KPX r d -31
+KPX r e -35
+KPX r eacute -35
+KPX r ecircumflex -35
+KPX r egrave -35
+KPX r f 23
+KPX r g -21
+KPX r h -17
+KPX r hyphen -52
+KPX r i 8
+KPX r j 4
+KPX r k -15
+KPX r l -21
+KPX r m 17
+KPX r n 16
+KPX r o -28
+KPX r oacute -28
+KPX r ocircumflex -28
+KPX r odieresis -28
+KPX r oe -23
+KPX r ograve -28
+KPX r oslash -29
+KPX r p 13
+KPX r period -72
+KPX r q -31
+KPX r quoteright -4
+KPX r r 4
+KPX r s -17
+KPX r semicolon -28
+KPX r t 12
+KPX r u 11
+KPX r v 30
+KPX r w 32
+KPX r x 7
+KPX r y 33
+KPX r z 0
+KPX s quoteright -20
+KPX s t -12
+KPX seven colon -88
+KPX seven comma -79
+KPX seven eight -32
+KPX seven five -53
+KPX seven four -65
+KPX seven one -47
+KPX seven period -83
+KPX seven seven -11
+KPX seven six -37
+KPX seven three -42
+KPX seven two -13
+KPX six four 17
+KPX six one -64
+KPX six seven -37
+KPX t S -9
+KPX t a -6
+KPX t aacute -6
+KPX t adieresis -6
+KPX t ae -10
+KPX t aring -6
+KPX t colon -29
+KPX t e -13
+KPX t eacute -13
+KPX t h -11
+KPX t o -11
+KPX t oacute -11
+KPX t odieresis -11
+KPX t quoteright -19
+KPX t semicolon -26
+KPX three four -9
+KPX three one -76
+KPX three seven -15
+KPX two four -12
+KPX two one -45
+KPX two seven -22
+KPX u quoteright -31
+KPX v a -24
+KPX v aacute -26
+KPX v acircumflex -26
+KPX v adieresis -26
+KPX v ae -29
+KPX v agrave -26
+KPX v aring -26
+KPX v atilde -26
+KPX v c -26
+KPX v colon -48
+KPX v comma -46
+KPX v e -30
+KPX v eacute -32
+KPX v ecircumflex -32
+KPX v egrave -32
+KPX v g -36
+KPX v hyphen 0
+KPX v l -29
+KPX v o -26
+KPX v oacute -28
+KPX v odieresis -28
+KPX v ograve -28
+KPX v oslash -29
+KPX v period -51
+KPX v s -30
+KPX v semicolon -48
+KPX w a -26
+KPX w aacute -28
+KPX w acircumflex -28
+KPX w adieresis -28
+KPX w ae -31
+KPX w agrave -28
+KPX w aring -28
+KPX w atilde -28
+KPX w c -28
+KPX w colon -49
+KPX w comma -47
+KPX w e -32
+KPX w eacute -34
+KPX w ecircumflex -34
+KPX w egrave -34
+KPX w g -38
+KPX w hyphen -4
+KPX w l -30
+KPX w o -28
+KPX w oacute -30
+KPX w odieresis -30
+KPX w ograve -30
+KPX w oslash -31
+KPX w period -51
+KPX w s -32
+KPX w semicolon -49
+KPX x a 6
+KPX x c 0
+KPX x e 0
+KPX x eacute 0
+KPX x o 1
+KPX x q 2
+KPX y a -12
+KPX y aacute -12
+KPX y acircumflex -12
+KPX y adieresis -12
+KPX y ae -17
+KPX y agrave -12
+KPX y aring -12
+KPX y atilde -12
+KPX y c -15
+KPX y colon -48
+KPX y comma -21
+KPX y e -19
+KPX y eacute -19
+KPX y ecircumflex -19
+KPX y egrave -19
+KPX y g -34
+KPX y hyphen 7
+KPX y l -18
+KPX y o -15
+KPX y oacute -15
+KPX y odieresis -15
+KPX y ograve -15
+KPX y oslash -16
+KPX y period -25
+KPX y s -19
+KPX y semicolon -45
+KPX zero four 14
+KPX zero one -50
+KPX zero seven -3
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/n021023l.pfb b/Master/xemtex/gsfonts/n021023l.pfb
new file mode 100644
index 00000000000..35a514c0ee0
--- /dev/null
+++ b/Master/xemtex/gsfonts/n021023l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/n021023l.pfm b/Master/xemtex/gsfonts/n021023l.pfm
new file mode 100644
index 00000000000..e357bd8a9d3
--- /dev/null
+++ b/Master/xemtex/gsfonts/n021023l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/n021024l.afm b/Master/xemtex/gsfonts/n021024l.afm
new file mode 100644
index 00000000000..6652f8eed88
--- /dev/null
+++ b/Master/xemtex/gsfonts/n021024l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName NimbusRomNo9L-MediItal
+FullName Nimbus Roman No9 L Medium Italic
+FamilyName Nimbus Roman No9 L
+Weight Bold
+ItalicAngle -15.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -200 -324 996 964
+CapHeight 669
+XHeight 449
+Descender -205
+Ascender 699
+StartCharMetrics 316
+C 32 ; WX 250 ; N space ; B 125 0 125 0 ;
+C 33 ; WX 389 ; N exclam ; B 67 -13 370 684 ;
+C 34 ; WX 555 ; N quotedbl ; B 136 398 536 685 ;
+C 35 ; WX 500 ; N numbersign ; B -33 0 533 700 ;
+C 36 ; WX 500 ; N dollar ; B -20 -100 497 733 ;
+C 37 ; WX 833 ; N percent ; B 39 -10 793 692 ;
+C 38 ; WX 778 ; N ampersand ; B 5 -19 699 682 ;
+C 39 ; WX 333 ; N quoteright ; B 98 369 302 685 ;
+C 40 ; WX 333 ; N parenleft ; B 28 -179 344 685 ;
+C 41 ; WX 333 ; N parenright ; B -44 -179 271 685 ;
+C 42 ; WX 500 ; N asterisk ; B 65 252 456 685 ;
+C 43 ; WX 570 ; N plus ; B 33 0 537 506 ;
+C 44 ; WX 250 ; N comma ; B -60 -182 144 134 ;
+C 45 ; WX 333 ; N hyphen ; B 2 166 271 282 ;
+C 46 ; WX 250 ; N period ; B -9 -13 139 135 ;
+C 47 ; WX 278 ; N slash ; B -64 -18 342 685 ;
+C 48 ; WX 500 ; N zero ; B 17 -14 477 683 ;
+C 49 ; WX 500 ; N one ; B 5 0 419 683 ;
+C 50 ; WX 500 ; N two ; B -27 0 446 683 ;
+C 51 ; WX 500 ; N three ; B -15 -13 450 683 ;
+C 52 ; WX 500 ; N four ; B -15 0 503 683 ;
+C 53 ; WX 500 ; N five ; B -11 -13 487 669 ;
+C 54 ; WX 500 ; N six ; B 23 -15 509 679 ;
+C 55 ; WX 500 ; N seven ; B 52 0 525 669 ;
+C 56 ; WX 500 ; N eight ; B 3 -13 476 683 ;
+C 57 ; WX 500 ; N nine ; B -12 -10 475 683 ;
+C 58 ; WX 333 ; N colon ; B 23 -13 264 459 ;
+C 59 ; WX 333 ; N semicolon ; B -25 -183 264 459 ;
+C 60 ; WX 570 ; N less ; B 31 -12 539 518 ;
+C 61 ; WX 570 ; N equal ; B 33 107 537 399 ;
+C 62 ; WX 570 ; N greater ; B 31 -12 539 518 ;
+C 63 ; WX 500 ; N question ; B 79 -13 470 684 ;
+C 64 ; WX 832 ; N at ; B 63 -18 770 685 ;
+C 65 ; WX 667 ; N A ; B -67 0 593 683 ;
+C 66 ; WX 667 ; N B ; B -24 0 624 669 ;
+C 67 ; WX 667 ; N C ; B 32 -18 677 685 ;
+C 68 ; WX 722 ; N D ; B -46 0 685 669 ;
+C 69 ; WX 667 ; N E ; B -27 0 653 669 ;
+C 70 ; WX 667 ; N F ; B -13 0 660 669 ;
+C 71 ; WX 722 ; N G ; B 21 -18 706 685 ;
+C 72 ; WX 778 ; N H ; B -24 0 799 669 ;
+C 73 ; WX 389 ; N I ; B -32 0 406 669 ;
+C 74 ; WX 500 ; N J ; B -46 -99 524 669 ;
+C 75 ; WX 667 ; N K ; B -21 0 702 669 ;
+C 76 ; WX 611 ; N L ; B -22 0 590 669 ;
+C 77 ; WX 889 ; N M ; B -29 -12 917 669 ;
+C 78 ; WX 722 ; N N ; B -27 -15 748 669 ;
+C 79 ; WX 722 ; N O ; B 27 -18 691 685 ;
+C 80 ; WX 611 ; N P ; B -27 0 613 669 ;
+C 81 ; WX 722 ; N Q ; B 27 -208 691 685 ;
+C 82 ; WX 667 ; N R ; B -29 0 623 669 ;
+C 83 ; WX 556 ; N S ; B 2 -18 526 685 ;
+C 84 ; WX 611 ; N T ; B 50 0 650 669 ;
+C 85 ; WX 722 ; N U ; B 67 -18 744 669 ;
+C 86 ; WX 667 ; N V ; B 65 -18 715 669 ;
+C 87 ; WX 889 ; N W ; B 65 -18 940 669 ;
+C 88 ; WX 667 ; N X ; B -24 0 694 669 ;
+C 89 ; WX 611 ; N Y ; B 73 0 659 669 ;
+C 90 ; WX 611 ; N Z ; B -11 0 590 669 ;
+C 91 ; WX 333 ; N bracketleft ; B -37 -159 362 674 ;
+C 92 ; WX 278 ; N backslash ; B -1 -18 279 685 ;
+C 93 ; WX 333 ; N bracketright ; B -56 -157 343 674 ;
+C 94 ; WX 570 ; N asciicircum ; B 67 304 503 669 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 333 ; N quoteleft ; B 128 369 332 685 ;
+C 97 ; WX 500 ; N a ; B -21 -14 455 462 ;
+C 98 ; WX 500 ; N b ; B -14 -13 444 699 ;
+C 99 ; WX 444 ; N c ; B -5 -13 392 462 ;
+C 100 ; WX 500 ; N d ; B -21 -13 517 699 ;
+C 101 ; WX 444 ; N e ; B 5 -13 398 462 ;
+C 102 ; WX 333 ; N f ; B -169 -205 446 698 ;
+C 103 ; WX 500 ; N g ; B -52 -203 478 462 ;
+C 104 ; WX 556 ; N h ; B -13 -9 498 699 ;
+C 105 ; WX 278 ; N i ; B 2 -9 263 685 ;
+C 106 ; WX 278 ; N j ; B -189 -207 279 685 ;
+C 107 ; WX 500 ; N k ; B -23 -8 483 699 ;
+C 108 ; WX 278 ; N l ; B 2 -9 290 699 ;
+C 109 ; WX 778 ; N m ; B -14 -9 722 462 ;
+C 110 ; WX 556 ; N n ; B -6 -9 493 462 ;
+C 111 ; WX 500 ; N o ; B -3 -13 441 462 ;
+C 112 ; WX 500 ; N p ; B -120 -205 446 462 ;
+C 113 ; WX 500 ; N q ; B 1 -205 471 462 ;
+C 114 ; WX 389 ; N r ; B -21 0 389 462 ;
+C 115 ; WX 389 ; N s ; B -19 -13 333 462 ;
+C 116 ; WX 278 ; N t ; B -11 -9 281 594 ;
+C 117 ; WX 556 ; N u ; B 15 -9 492 462 ;
+C 118 ; WX 444 ; N v ; B 16 -13 401 462 ;
+C 119 ; WX 667 ; N w ; B 16 -13 614 462 ;
+C 120 ; WX 500 ; N x ; B -46 -13 469 462 ;
+C 121 ; WX 444 ; N y ; B -94 -205 392 462 ;
+C 122 ; WX 389 ; N z ; B -43 -78 368 449 ;
+C 123 ; WX 348 ; N braceleft ; B 5 -187 436 686 ;
+C 124 ; WX 220 ; N bar ; B 66 -18 154 685 ;
+C 125 ; WX 348 ; N braceright ; B -129 -187 302 686 ;
+C 126 ; WX 570 ; N asciitilde ; B 54 175 516 331 ;
+C 161 ; WX 389 ; N exclamdown ; B 19 -205 320 494 ;
+C 162 ; WX 500 ; N cent ; B 42 -143 439 576 ;
+C 163 ; WX 500 ; N sterling ; B -32 -12 510 683 ;
+C 164 ; WX 167 ; N fraction ; B -169 -14 324 683 ;
+C 165 ; WX 500 ; N yen ; B 33 0 628 669 ;
+C 166 ; WX 500 ; N florin ; B -87 -156 537 707 ;
+C 167 ; WX 500 ; N section ; B 36 -143 459 685 ;
+C 168 ; WX 500 ; N currency ; B -26 34 526 586 ;
+C 169 ; WX 278 ; N quotesingle ; B 128 398 268 685 ;
+C 170 ; WX 500 ; N quotedblleft ; B 53 369 513 685 ;
+C 171 ; WX 500 ; N guillemotleft ; B 12 32 468 415 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 32 32 303 415 ;
+C 173 ; WX 333 ; N guilsinglright ; B 10 32 281 415 ;
+C 174 ; WX 556 ; N fi ; B -188 -205 514 703 ;
+C 175 ; WX 556 ; N fl ; B -186 -205 553 704 ;
+C 177 ; WX 500 ; N endash ; B -40 178 477 269 ;
+C 178 ; WX 500 ; N dagger ; B 91 -145 494 685 ;
+C 179 ; WX 500 ; N daggerdbl ; B 10 -139 493 685 ;
+C 180 ; WX 250 ; N periodcentered ; B 51 257 199 405 ;
+C 182 ; WX 500 ; N paragraph ; B -57 -193 562 669 ;
+C 183 ; WX 350 ; N bullet ; B 0 175 350 525 ;
+C 184 ; WX 333 ; N quotesinglbase ; B -5 -182 199 134 ;
+C 185 ; WX 500 ; N quotedblbase ; B -57 -182 403 134 ;
+C 186 ; WX 500 ; N quotedblright ; B 53 369 513 685 ;
+C 187 ; WX 500 ; N guillemotright ; B 12 32 468 415 ;
+C 188 ; WX 1000 ; N ellipsis ; B 40 -13 852 135 ;
+C 189 ; WX 1000 ; N perthousand ; B 7 -29 996 706 ;
+C 191 ; WX 500 ; N questiondown ; B 30 -205 421 492 ;
+C 193 ; WX 333 ; N grave ; B 85 516 297 697 ;
+C 194 ; WX 333 ; N acute ; B 139 516 379 697 ;
+C 195 ; WX 333 ; N circumflex ; B 40 516 367 690 ;
+C 196 ; WX 333 ; N tilde ; B 48 536 407 655 ;
+C 197 ; WX 333 ; N macron ; B 51 553 393 623 ;
+C 198 ; WX 333 ; N breve ; B 71 516 387 678 ;
+C 199 ; WX 333 ; N dotaccent ; B 163 525 293 655 ;
+C 200 ; WX 333 ; N dieresis ; B 55 525 397 655 ;
+C 202 ; WX 333 ; N ring ; B 127 540 340 754 ;
+C 203 ; WX 333 ; N cedilla ; B -80 -218 156 5 ;
+C 205 ; WX 333 ; N hungarumlaut ; B 69 516 498 697 ;
+C 206 ; WX 333 ; N ogonek ; B -40 -173 189 44 ;
+C 207 ; WX 333 ; N caron ; B 79 516 411 690 ;
+C 208 ; WX 1000 ; N emdash ; B -40 178 977 269 ;
+C 225 ; WX 944 ; N AE ; B -64 0 918 669 ;
+C 227 ; WX 266 ; N ordfeminine ; B 16 399 330 685 ;
+C 232 ; WX 611 ; N Lslash ; B -22 0 590 669 ;
+C 233 ; WX 722 ; N Oslash ; B 27 -125 691 764 ;
+C 234 ; WX 944 ; N OE ; B 23 -9 946 677 ;
+C 235 ; WX 300 ; N ordmasculine ; B 56 400 350 685 ;
+C 241 ; WX 722 ; N ae ; B -5 -13 673 462 ;
+C 245 ; WX 278 ; N dotlessi ; B 2 -9 238 462 ;
+C 248 ; WX 278 ; N lslash ; B -13 -9 301 699 ;
+C 249 ; WX 500 ; N oslash ; B -3 -119 441 560 ;
+C 250 ; WX 722 ; N oe ; B 6 -13 674 462 ;
+C 251 ; WX 500 ; N germandbls ; B -200 -200 473 705 ;
+C -1 ; WX 722 ; N Udieresis ; B 67 -18 744 862 ;
+C -1 ; WX 722 ; N Uacute ; B 67 -18 744 904 ;
+C -1 ; WX 556 ; N Scedilla ; B 2 -218 526 685 ;
+C -1 ; WX 611 ; N Tcaron ; B 50 0 650 900 ;
+C -1 ; WX 556 ; N Scaron ; B 2 -18 526 897 ;
+C -1 ; WX 667 ; N Rcaron ; B -29 0 623 900 ;
+C -1 ; WX 667 ; N Racute ; B -29 0 623 907 ;
+C -1 ; WX 556 ; N Sacute ; B 2 -18 526 907 ;
+C -1 ; WX 722 ; N Otilde ; B 27 -18 691 862 ;
+C -1 ; WX 556 ; N ucircumflex ; B 15 -9 492 690 ;
+C -1 ; WX 722 ; N Ohungarumlaut ; B 27 -18 693 907 ;
+C -1 ; WX 722 ; N Uhungarumlaut ; B 67 -18 744 907 ;
+C -1 ; WX 611 ; N Yacute ; B 73 0 659 904 ;
+C -1 ; WX 722 ; N Eth ; B -31 0 700 669 ;
+C -1 ; WX 722 ; N Dcroat ; B -31 0 700 669 ;
+C -1 ; WX 611 ; N Zacute ; B -11 0 590 907 ;
+C -1 ; WX 722 ; N Uring ; B 67 -18 744 964 ;
+C -1 ; WX 500 ; N gbreve ; B -52 -203 478 678 ;
+C -1 ; WX 444 ; N eogonek ; B 5 -173 404 462 ;
+C -1 ; WX 444 ; N edotaccent ; B 5 -13 398 655 ;
+C -1 ; WX 444 ; N ecaron ; B 5 -13 467 690 ;
+C -1 ; WX 722 ; N Ugrave ; B 67 -18 744 904 ;
+C -1 ; WX 611 ; N Thorn ; B -27 0 574 669 ;
+C -1 ; WX 444 ; N eacute ; B 5 -13 435 697 ;
+C -1 ; WX 444 ; N edieresis ; B 5 -13 443 655 ;
+C -1 ; WX 600 ; N dcaron ; B -21 -13 664 699 ;
+C -1 ; WX 444 ; N ccedilla ; B -24 -218 392 462 ;
+C -1 ; WX 444 ; N ccaron ; B -5 -13 468 690 ;
+C -1 ; WX 444 ; N cacute ; B -5 -13 444 697 ;
+C -1 ; WX 500 ; N aogonek ; B -21 -173 500 462 ;
+C -1 ; WX 500 ; N aring ; B -21 -14 455 754 ;
+C -1 ; WX 500 ; N atilde ; B -21 -14 491 655 ;
+C -1 ; WX 500 ; N abreve ; B -21 -14 470 678 ;
+C -1 ; WX 444 ; N egrave ; B 5 -13 398 697 ;
+C -1 ; WX 500 ; N agrave ; B -21 -14 455 697 ;
+C -1 ; WX 500 ; N aacute ; B -21 -14 463 697 ;
+C -1 ; WX 500 ; N adieresis ; B -21 -14 471 655 ;
+C -1 ; WX 722 ; N Uogonek ; B 67 -173 744 669 ;
+C -1 ; WX 556 ; N ugrave ; B 15 -9 492 697 ;
+C -1 ; WX 556 ; N uacute ; B 15 -9 492 697 ;
+C -1 ; WX 556 ; N udieresis ; B 15 -9 494 655 ;
+C -1 ; WX 345 ; N tcaron ; B -11 -9 409 685 ;
+C -1 ; WX 389 ; N scommaaccent ; B -26 -324 333 462 ;
+C -1 ; WX 611 ; N Zcaron ; B -11 0 590 897 ;
+C -1 ; WX 444 ; N ecircumflex ; B 5 -13 423 690 ;
+C -1 ; WX 722 ; N Ucircumflex ; B 67 -18 744 897 ;
+C -1 ; WX 500 ; N acircumflex ; B -21 -14 455 690 ;
+C -1 ; WX 611 ; N Zdotaccent ; B -11 0 590 865 ;
+C -1 ; WX 389 ; N scaron ; B -19 -13 439 690 ;
+C -1 ; WX 667 ; N Amacron ; B -67 0 593 833 ;
+C -1 ; WX 389 ; N sacute ; B -19 -13 407 697 ;
+C -1 ; WX 611 ; N Tcommaaccent ; B 50 -324 650 669 ;
+C -1 ; WX 611 ; N Ydieresis ; B 73 0 659 862 ;
+C -1 ; WX 500 ; N thorn ; B -120 -205 446 699 ;
+C -1 ; WX 667 ; N Emacron ; B -27 0 653 833 ;
+C -1 ; WX 722 ; N Ograve ; B 27 -18 691 904 ;
+C -1 ; WX 722 ; N Oacute ; B 27 -18 691 904 ;
+C -1 ; WX 722 ; N Odieresis ; B 27 -18 691 862 ;
+C -1 ; WX 722 ; N Ntilde ; B -27 -15 748 862 ;
+C -1 ; WX 722 ; N Ncaron ; B -27 -15 748 900 ;
+C -1 ; WX 722 ; N Nacute ; B -27 -15 748 907 ;
+C -1 ; WX 611 ; N Lcaron ; B -22 0 651 685 ;
+C -1 ; WX 611 ; N Lacute ; B -22 0 590 907 ;
+C -1 ; WX 389 ; N Idotaccent ; B -32 0 406 865 ;
+C -1 ; WX 389 ; N racute ; B -21 0 407 697 ;
+C -1 ; WX 389 ; N Icircumflex ; B -32 0 420 897 ;
+C -1 ; WX 500 ; N ohungarumlaut ; B -3 -13 582 697 ;
+C -1 ; WX 500 ; N otilde ; B -3 -13 491 655 ;
+C -1 ; WX 500 ; N Euro ; B 53 -5 666 689 ;
+C -1 ; WX 500 ; N ocircumflex ; B -3 -13 451 690 ;
+C -1 ; WX 300 ; N onesuperior ; B 30 274 301 683 ;
+C -1 ; WX 300 ; N twosuperior ; B 2 274 313 683 ;
+C -1 ; WX 300 ; N threesuperior ; B 17 265 321 683 ;
+C -1 ; WX 389 ; N Igrave ; B -32 0 406 904 ;
+C -1 ; WX 389 ; N Iacute ; B -32 0 407 907 ;
+C -1 ; WX 389 ; N Imacron ; B -32 0 461 833 ;
+C -1 ; WX 389 ; N Iogonek ; B -32 -173 406 669 ;
+C -1 ; WX 389 ; N Idieresis ; B -32 0 445 862 ;
+C -1 ; WX 722 ; N Gbreve ; B 21 -18 706 888 ;
+C -1 ; WX 722 ; N Umacron ; B 67 -18 744 833 ;
+C -1 ; WX 667 ; N Kcommaaccent ; B -21 -324 702 669 ;
+C -1 ; WX 500 ; N ograve ; B -3 -13 441 697 ;
+C -1 ; WX 556 ; N Scommaaccent ; B 2 -324 526 685 ;
+C -1 ; WX 667 ; N Eogonek ; B -27 -173 667 669 ;
+C -1 ; WX 500 ; N oacute ; B -3 -13 463 697 ;
+C -1 ; WX 667 ; N Edotaccent ; B -27 0 653 865 ;
+C -1 ; WX 278 ; N iogonek ; B 2 -173 278 685 ;
+C -1 ; WX 500 ; N gcommaaccent ; B -52 -203 478 765 ;
+C -1 ; WX 500 ; N odieresis ; B -3 -13 466 655 ;
+C -1 ; WX 556 ; N ntilde ; B -6 -9 504 655 ;
+C -1 ; WX 556 ; N ncaron ; B -6 -9 523 690 ;
+C -1 ; WX 667 ; N Ecaron ; B -27 0 653 900 ;
+C -1 ; WX 667 ; N Ecircumflex ; B -27 0 653 897 ;
+C -1 ; WX 389 ; N scedilla ; B -40 -218 333 462 ;
+C -1 ; WX 389 ; N rcaron ; B -21 0 439 690 ;
+C -1 ; WX 667 ; N Egrave ; B -27 0 653 904 ;
+C -1 ; WX 667 ; N Eacute ; B -27 0 653 904 ;
+C -1 ; WX 722 ; N Gcommaaccent ; B 21 -324 706 685 ;
+C -1 ; WX 667 ; N Rcommaaccent ; B -29 -324 623 669 ;
+C -1 ; WX 667 ; N Edieresis ; B -27 0 653 862 ;
+C -1 ; WX 556 ; N nacute ; B -6 -9 493 697 ;
+C -1 ; WX 556 ; N uogonek ; B 15 -173 556 462 ;
+C -1 ; WX 556 ; N umacron ; B 15 -9 505 623 ;
+C -1 ; WX 722 ; N Dcaron ; B -46 0 685 900 ;
+C -1 ; WX 382 ; N lcaron ; B 2 -9 446 699 ;
+C -1 ; WX 667 ; N Ccaron ; B 32 -18 677 900 ;
+C -1 ; WX 667 ; N Cacute ; B 32 -18 677 907 ;
+C -1 ; WX 667 ; N Ccedilla ; B 32 -218 677 685 ;
+C -1 ; WX 400 ; N degree ; B 83 397 369 683 ;
+C -1 ; WX 667 ; N Aogonek ; B -67 -173 729 683 ;
+C -1 ; WX 606 ; N minus ; B 51 209 555 297 ;
+C -1 ; WX 570 ; N multiply ; B 48 16 522 490 ;
+C -1 ; WX 570 ; N divide ; B 33 -29 537 535 ;
+C -1 ; WX 667 ; N Aring ; B -67 0 593 950 ;
+C -1 ; WX 1000 ; N trademark ; B 32 263 968 669 ;
+C -1 ; WX 389 ; N rcommaaccent ; B -80 -324 389 462 ;
+C -1 ; WX 278 ; N lacute ; B 2 -9 392 907 ;
+C -1 ; WX 500 ; N omacron ; B -3 -13 477 623 ;
+C -1 ; WX 667 ; N Atilde ; B -67 0 593 862 ;
+C -1 ; WX 278 ; N icircumflex ; B -2 -9 325 690 ;
+C -1 ; WX 278 ; N igrave ; B 2 -9 260 697 ;
+C -1 ; WX 556 ; N ncommaaccent ; B -6 -324 493 462 ;
+C -1 ; WX 278 ; N lcommaaccent ; B -81 -324 290 699 ;
+C -1 ; WX 570 ; N plusminus ; B 33 0 537 568 ;
+C -1 ; WX 750 ; N onehalf ; B -9 -14 723 683 ;
+C -1 ; WX 750 ; N onequarter ; B 7 -14 721 683 ;
+C -1 ; WX 750 ; N threequarters ; B 7 -14 726 683 ;
+C -1 ; WX 278 ; N iacute ; B 2 -9 352 697 ;
+C -1 ; WX 667 ; N Abreve ; B -67 0 593 888 ;
+C -1 ; WX 500 ; N kcommaaccent ; B -23 -324 483 699 ;
+C -1 ; WX 722 ; N Omacron ; B 27 -18 691 833 ;
+C -1 ; WX 278 ; N imacron ; B 2 -9 366 623 ;
+C -1 ; WX 444 ; N emacron ; B 5 -13 449 623 ;
+C -1 ; WX 500 ; N amacron ; B -21 -14 477 623 ;
+C -1 ; WX 278 ; N tcommaaccent ; B -81 -324 281 594 ;
+C -1 ; WX 444 ; N ydieresis ; B -94 -205 438 655 ;
+C -1 ; WX 389 ; N zdotaccent ; B -43 -78 368 655 ;
+C -1 ; WX 389 ; N zcaron ; B -43 -78 424 690 ;
+C -1 ; WX 389 ; N zacute ; B -43 -78 407 697 ;
+C -1 ; WX 444 ; N yacute ; B -94 -205 435 697 ;
+C -1 ; WX 556 ; N uhungarumlaut ; B 15 -9 610 697 ;
+C -1 ; WX 500 ; N eth ; B -3 -13 454 699 ;
+C -1 ; WX 556 ; N uring ; B 15 -9 492 754 ;
+C -1 ; WX 722 ; N Ocircumflex ; B 27 -18 691 897 ;
+C -1 ; WX 333 ; N commaaccent ; B -54 -324 130 -40 ;
+C -1 ; WX 747 ; N copyright ; B 30 -18 718 685 ;
+C -1 ; WX 747 ; N registered ; B 30 -18 718 685 ;
+C -1 ; WX 667 ; N Acircumflex ; B -67 0 593 897 ;
+C -1 ; WX 278 ; N idieresis ; B 2 -9 360 655 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 570 ; N notequal ; B 33 -13 537 519 ;
+C -1 ; WX 549 ; N radical ; B -17 -35 535 916 ;
+C -1 ; WX 667 ; N Agrave ; B -67 0 593 904 ;
+C -1 ; WX 667 ; N Aacute ; B -67 0 593 904 ;
+C -1 ; WX 570 ; N lessequal ; B 31 0 539 642 ;
+C -1 ; WX 570 ; N greaterequal ; B 31 0 539 642 ;
+C -1 ; WX 606 ; N logicalnot ; B 51 108 555 399 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 16 -20 472 743 ;
+C -1 ; WX 722 ; N Ncommaaccent ; B -27 -324 748 669 ;
+C -1 ; WX 500 ; N dcroat ; B -21 -13 540 699 ;
+C -1 ; WX 220 ; N brokenbar ; B 66 -18 154 685 ;
+C -1 ; WX 611 ; N Lcommaaccent ; B -22 -324 590 669 ;
+C -1 ; WX 667 ; N Adieresis ; B -67 0 593 862 ;
+C -1 ; WX 576 ; N mu ; B -60 -207 516 449 ;
+C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -61
+KPX A Ccedilla -63
+KPX A G -59
+KPX A O -53
+KPX A Odieresis -53
+KPX A Q -54
+KPX A T -33
+KPX A U -61
+KPX A Uacute -61
+KPX A Ucircumflex -61
+KPX A Udieresis -61
+KPX A Ugrave -61
+KPX A V -110
+KPX A W -107
+KPX A Y -44
+KPX A a -5
+KPX A b -1
+KPX A c -20
+KPX A ccedilla -29
+KPX A comma 0
+KPX A d -5
+KPX A e -25
+KPX A g -20
+KPX A guillemotleft -58
+KPX A guilsinglleft -68
+KPX A hyphen -23
+KPX A o -23
+KPX A period 1
+KPX A q -18
+KPX A quotedblright -78
+KPX A quoteright -101
+KPX A t -4
+KPX A u -18
+KPX A v -51
+KPX A w -56
+KPX A y -67
+KPX Aacute C -61
+KPX Aacute G -59
+KPX Aacute O -53
+KPX Aacute Q -54
+KPX Aacute T -33
+KPX Aacute U -61
+KPX Aacute V -110
+KPX Aacute W -107
+KPX Aacute Y -44
+KPX Aacute a -5
+KPX Aacute b -1
+KPX Aacute c -20
+KPX Aacute comma 0
+KPX Aacute d -5
+KPX Aacute e -25
+KPX Aacute g -20
+KPX Aacute guillemotleft -58
+KPX Aacute guilsinglleft -68
+KPX Aacute hyphen -23
+KPX Aacute o -23
+KPX Aacute period 1
+KPX Aacute q -18
+KPX Aacute quoteright -101
+KPX Aacute t -4
+KPX Aacute u -18
+KPX Aacute v -51
+KPX Aacute w -56
+KPX Aacute y -67
+KPX Acircumflex C -61
+KPX Acircumflex G -59
+KPX Acircumflex O -53
+KPX Acircumflex Q -54
+KPX Acircumflex T -33
+KPX Acircumflex U -61
+KPX Acircumflex V -110
+KPX Acircumflex W -107
+KPX Acircumflex Y -44
+KPX Acircumflex comma 0
+KPX Acircumflex period 1
+KPX Adieresis C -61
+KPX Adieresis G -59
+KPX Adieresis O -53
+KPX Adieresis Q -54
+KPX Adieresis T -33
+KPX Adieresis U -61
+KPX Adieresis V -110
+KPX Adieresis W -107
+KPX Adieresis Y -44
+KPX Adieresis a -5
+KPX Adieresis b -1
+KPX Adieresis c -20
+KPX Adieresis comma 0
+KPX Adieresis d -5
+KPX Adieresis g -20
+KPX Adieresis guillemotleft -58
+KPX Adieresis guilsinglleft -68
+KPX Adieresis hyphen -23
+KPX Adieresis o -23
+KPX Adieresis period 1
+KPX Adieresis q -18
+KPX Adieresis quotedblright -78
+KPX Adieresis quoteright -101
+KPX Adieresis t -4
+KPX Adieresis u -18
+KPX Adieresis v -51
+KPX Adieresis w -56
+KPX Adieresis y -67
+KPX Agrave C -61
+KPX Agrave G -59
+KPX Agrave O -53
+KPX Agrave Q -54
+KPX Agrave T -33
+KPX Agrave U -61
+KPX Agrave V -110
+KPX Agrave W -107
+KPX Agrave Y -44
+KPX Agrave comma 0
+KPX Agrave period 1
+KPX Aring C -61
+KPX Aring G -59
+KPX Aring O -53
+KPX Aring Q -54
+KPX Aring T -33
+KPX Aring U -61
+KPX Aring V -110
+KPX Aring W -107
+KPX Aring Y -44
+KPX Aring a -5
+KPX Aring b -1
+KPX Aring c -20
+KPX Aring comma 0
+KPX Aring d -5
+KPX Aring e -25
+KPX Aring g -20
+KPX Aring guillemotleft -58
+KPX Aring guilsinglleft -68
+KPX Aring hyphen -23
+KPX Aring o -23
+KPX Aring period 1
+KPX Aring q -18
+KPX Aring quotedblright -78
+KPX Aring quoteright -101
+KPX Aring t -4
+KPX Aring u -18
+KPX Aring v -51
+KPX Aring w -56
+KPX Aring y -67
+KPX Atilde C -61
+KPX Atilde G -59
+KPX Atilde O -53
+KPX Atilde Q -54
+KPX Atilde T -33
+KPX Atilde U -61
+KPX Atilde V -110
+KPX Atilde W -107
+KPX Atilde Y -44
+KPX Atilde comma 0
+KPX Atilde period 1
+KPX B A -34
+KPX B AE -40
+KPX B Aacute -34
+KPX B Acircumflex -34
+KPX B Adieresis -34
+KPX B Aring -34
+KPX B Atilde -34
+KPX B O -22
+KPX B OE -20
+KPX B Oacute -22
+KPX B Ocircumflex -22
+KPX B Odieresis -22
+KPX B Ograve -22
+KPX B Oslash -23
+KPX B V -46
+KPX B W -46
+KPX B Y -50
+KPX C A -24
+KPX C AE -31
+KPX C Aacute -24
+KPX C Adieresis -24
+KPX C Aring -24
+KPX C H -26
+KPX C K -28
+KPX C O -25
+KPX C Oacute -25
+KPX C Odieresis -25
+KPX Ccedilla A -30
+KPX D A -54
+KPX D Aacute -54
+KPX D Acircumflex -54
+KPX D Adieresis -54
+KPX D Agrave -54
+KPX D Aring -54
+KPX D Atilde -54
+KPX D J -67
+KPX D T -27
+KPX D V -60
+KPX D W -58
+KPX D X -64
+KPX D Y -64
+KPX F A -101
+KPX F Aacute -101
+KPX F Acircumflex -101
+KPX F Adieresis -101
+KPX F Agrave -101
+KPX F Aring -101
+KPX F Atilde -101
+KPX F J -88
+KPX F O -48
+KPX F Odieresis -48
+KPX F a -75
+KPX F aacute -75
+KPX F adieresis -48
+KPX F ae -83
+KPX F aring -75
+KPX F comma -96
+KPX F e -86
+KPX F eacute -86
+KPX F hyphen -54
+KPX F i -29
+KPX F j -34
+KPX F o -81
+KPX F oacute -82
+KPX F odieresis -45
+KPX F oe -86
+KPX F oslash -79
+KPX F period -98
+KPX F r -38
+KPX F u -42
+KPX G A -14
+KPX G AE -20
+KPX G Aacute -14
+KPX G Acircumflex -14
+KPX G Adieresis -14
+KPX G Agrave -14
+KPX G Aring -14
+KPX G Atilde -14
+KPX G T -42
+KPX G V -27
+KPX G W -27
+KPX G Y -31
+KPX J A -39
+KPX J AE -42
+KPX J Adieresis -39
+KPX J Aring -39
+KPX K C -51
+KPX K G -46
+KPX K O -43
+KPX K OE -42
+KPX K Oacute -43
+KPX K Odieresis -43
+KPX K S -1
+KPX K T 0
+KPX K a 3
+KPX K adieresis 3
+KPX K ae -4
+KPX K aring 3
+KPX K e -16
+KPX K hyphen -30
+KPX K o -13
+KPX K oacute -13
+KPX K odieresis -13
+KPX K u -8
+KPX K udieresis -8
+KPX K y -68
+KPX L A 28
+KPX L AE 25
+KPX L Aacute 28
+KPX L Adieresis 28
+KPX L Aring 28
+KPX L C 0
+KPX L Ccedilla 0
+KPX L G 4
+KPX L O 4
+KPX L Oacute 4
+KPX L Ocircumflex 4
+KPX L Odieresis 4
+KPX L Ograve 4
+KPX L Otilde 4
+KPX L S 1
+KPX L T -30
+KPX L U -17
+KPX L Udieresis -17
+KPX L V -77
+KPX L W -74
+KPX L Y -41
+KPX L hyphen 41
+KPX L quotedblright -45
+KPX L quoteright -67
+KPX L u 5
+KPX L udieresis 5
+KPX L y -23
+KPX N A -39
+KPX N AE -42
+KPX N Aacute -39
+KPX N Adieresis -39
+KPX N Aring -39
+KPX N C -32
+KPX N Ccedilla -30
+KPX N G -26
+KPX N O -32
+KPX N Oacute -32
+KPX N Odieresis -32
+KPX N a -25
+KPX N aacute -27
+KPX N adieresis -27
+KPX N ae -34
+KPX N aring -27
+KPX N comma -24
+KPX N e -37
+KPX N eacute -38
+KPX N o -32
+KPX N oacute -34
+KPX N odieresis -34
+KPX N oslash -32
+KPX N period -26
+KPX N u -33
+KPX N udieresis -33
+KPX O A -57
+KPX O AE -67
+KPX O Aacute -57
+KPX O Adieresis -57
+KPX O Aring -57
+KPX O T -18
+KPX O V -52
+KPX O W -52
+KPX O X -63
+KPX O Y -56
+KPX Oacute A -57
+KPX Oacute T -18
+KPX Oacute V -52
+KPX Oacute W -52
+KPX Oacute Y -56
+KPX Ocircumflex T -18
+KPX Ocircumflex V -52
+KPX Ocircumflex Y -56
+KPX Odieresis A -57
+KPX Odieresis T -18
+KPX Odieresis V -52
+KPX Odieresis W -52
+KPX Odieresis X -63
+KPX Odieresis Y -56
+KPX Ograve T -18
+KPX Ograve V -52
+KPX Ograve Y -56
+KPX Oslash A -57
+KPX Otilde T -18
+KPX Otilde V -52
+KPX Otilde Y -56
+KPX P A -89
+KPX P AE -104
+KPX P Aacute -89
+KPX P Adieresis -89
+KPX P Aring -89
+KPX P J -105
+KPX P a -50
+KPX P aacute -50
+KPX P adieresis -38
+KPX P ae -58
+KPX P aring -50
+KPX P comma -107
+KPX P e -57
+KPX P eacute -57
+KPX P hyphen -54
+KPX P o -52
+KPX P oacute -52
+KPX P odieresis -35
+KPX P oe -57
+KPX P oslash -47
+KPX P period -109
+KPX R C -33
+KPX R Ccedilla -32
+KPX R G -28
+KPX R O -34
+KPX R OE -32
+KPX R Oacute -34
+KPX R Odieresis -34
+KPX R T -24
+KPX R U -44
+KPX R Udieresis -44
+KPX R V -46
+KPX R W -46
+KPX R Y -40
+KPX R a -1
+KPX R aacute -1
+KPX R adieresis -1
+KPX R ae -9
+KPX R aring -1
+KPX R e -21
+KPX R eacute -21
+KPX R hyphen -30
+KPX R o -18
+KPX R oacute -18
+KPX R odieresis -18
+KPX R oe -23
+KPX R u -13
+KPX R uacute -13
+KPX R udieresis -13
+KPX R y -12
+KPX S A -11
+KPX S AE -17
+KPX S Aacute -11
+KPX S Adieresis -11
+KPX S Aring -11
+KPX S T -34
+KPX S V -20
+KPX S W -20
+KPX S Y -24
+KPX S t -6
+KPX T A -52
+KPX T AE -54
+KPX T Aacute -52
+KPX T Acircumflex -52
+KPX T Adieresis -52
+KPX T Agrave -52
+KPX T Aring -52
+KPX T Atilde -52
+KPX T C -15
+KPX T G -9
+KPX T J -63
+KPX T O -22
+KPX T OE -18
+KPX T Oacute -22
+KPX T Ocircumflex -22
+KPX T Odieresis -22
+KPX T Ograve -22
+KPX T Oslash -22
+KPX T Otilde -22
+KPX T S -16
+KPX T V 15
+KPX T W 15
+KPX T Y 11
+KPX T a -83
+KPX T ae -91
+KPX T c -89
+KPX T colon -98
+KPX T comma -77
+KPX T e -94
+KPX T g -95
+KPX T guillemotleft -110
+KPX T guilsinglleft -120
+KPX T hyphen -74
+KPX T i -19
+KPX T j -27
+KPX T o -90
+KPX T oslash -90
+KPX T period -79
+KPX T r -76
+KPX T s -78
+KPX T semicolon -98
+KPX T u -91
+KPX T v -89
+KPX T w -89
+KPX T y -86
+KPX U A -65
+KPX U AE -71
+KPX U Aacute -65
+KPX U Acircumflex -65
+KPX U Adieresis -65
+KPX U Aring -65
+KPX U Atilde -65
+KPX U comma -40
+KPX U m -35
+KPX U n -39
+KPX U p -30
+KPX U period -41
+KPX U r -32
+KPX Uacute A -65
+KPX Uacute comma -40
+KPX Uacute m -35
+KPX Uacute n -39
+KPX Uacute p -30
+KPX Uacute period -41
+KPX Uacute r -32
+KPX Ucircumflex A -65
+KPX Udieresis A -65
+KPX Udieresis b 1
+KPX Udieresis comma -40
+KPX Udieresis m -35
+KPX Udieresis n -39
+KPX Udieresis p -30
+KPX Udieresis period -41
+KPX Udieresis r -32
+KPX Ugrave A -65
+KPX V A -100
+KPX V AE -111
+KPX V Aacute -100
+KPX V Acircumflex -100
+KPX V Adieresis -100
+KPX V Agrave -100
+KPX V Aring -100
+KPX V Atilde -100
+KPX V C -60
+KPX V G -53
+KPX V O -64
+KPX V Oacute -64
+KPX V Ocircumflex -64
+KPX V Odieresis -64
+KPX V Ograve -64
+KPX V Oslash -64
+KPX V Otilde -64
+KPX V S -25
+KPX V T 7
+KPX V a -76
+KPX V ae -84
+KPX V colon -96
+KPX V comma -96
+KPX V e -87
+KPX V g -83
+KPX V guillemotleft -99
+KPX V guilsinglleft -109
+KPX V hyphen -62
+KPX V i -12
+KPX V o -83
+KPX V oslash -81
+KPX V period -97
+KPX V r -44
+KPX V semicolon -96
+KPX V u -47
+KPX V y -34
+KPX W A -83
+KPX W AE -87
+KPX W Aacute -83
+KPX W Acircumflex -83
+KPX W Adieresis -83
+KPX W Agrave -83
+KPX W Aring -83
+KPX W Atilde -83
+KPX W C -46
+KPX W G -41
+KPX W O -47
+KPX W Oacute -47
+KPX W Ocircumflex -47
+KPX W Odieresis -47
+KPX W Ograve -47
+KPX W Oslash -48
+KPX W Otilde -47
+KPX W S -24
+KPX W T 8
+KPX W a -51
+KPX W ae -60
+KPX W colon -78
+KPX W comma -62
+KPX W e -62
+KPX W g -63
+KPX W guillemotleft -74
+KPX W guilsinglleft -84
+KPX W hyphen -37
+KPX W i -11
+KPX W o -58
+KPX W oslash -57
+KPX W period -64
+KPX W r -34
+KPX W semicolon -79
+KPX W u -38
+KPX W y -25
+KPX X C -58
+KPX X O -56
+KPX X Odieresis -56
+KPX X Q -58
+KPX X a -9
+KPX X e -29
+KPX X hyphen -46
+KPX X o -26
+KPX X u -21
+KPX X y -81
+KPX Y A -45
+KPX Y AE -47
+KPX Y Aacute -45
+KPX Y Acircumflex -45
+KPX Y Adieresis -45
+KPX Y Agrave -45
+KPX Y Aring -45
+KPX Y Atilde -45
+KPX Y C -59
+KPX Y G -54
+KPX Y O -61
+KPX Y Oacute -61
+KPX Y Ocircumflex -61
+KPX Y Odieresis -61
+KPX Y Ograve -61
+KPX Y Oslash -61
+KPX Y Otilde -61
+KPX Y S -25
+KPX Y T 7
+KPX Y a -69
+KPX Y ae -77
+KPX Y colon -91
+KPX Y comma -67
+KPX Y e -80
+KPX Y g -81
+KPX Y guillemotleft -97
+KPX Y guilsinglleft -107
+KPX Y hyphen -63
+KPX Y i -12
+KPX Y o -76
+KPX Y oslash -75
+KPX Y p -54
+KPX Y period -69
+KPX Y semicolon -91
+KPX Y u -59
+KPX Y v -54
+KPX Z v -29
+KPX Z y -39
+KPX a j -2
+KPX a quoteright -22
+KPX a v -5
+KPX a w -5
+KPX a y -3
+KPX aacute v -5
+KPX aacute w -5
+KPX aacute y -3
+KPX adieresis v -5
+KPX adieresis w -5
+KPX adieresis y -3
+KPX ae v -5
+KPX ae w -5
+KPX ae y -8
+KPX agrave v -5
+KPX agrave w -5
+KPX agrave y -3
+KPX aring v -5
+KPX aring w -5
+KPX aring y -3
+KPX b v -12
+KPX b w -12
+KPX b y -17
+KPX c h -20
+KPX c k -16
+KPX comma one -26
+KPX comma quotedblright -1
+KPX comma quoteright -23
+KPX e quoteright -12
+KPX e t -3
+KPX e v -3
+KPX e w -3
+KPX e x -15
+KPX e y -6
+KPX eacute v -3
+KPX eacute w -3
+KPX eacute y -6
+KPX ecircumflex v -3
+KPX ecircumflex w -3
+KPX ecircumflex y -6
+KPX eight four -4
+KPX eight one -52
+KPX eight seven -13
+KPX f a -23
+KPX f aacute -24
+KPX f adieresis 17
+KPX f ae -32
+KPX f aring -20
+KPX f e -35
+KPX f eacute -36
+KPX f f 2
+KPX f i 20
+KPX f j 12
+KPX f l 43
+KPX f o -30
+KPX f oacute -31
+KPX f odieresis 20
+KPX f oe -35
+KPX f oslash -29
+KPX f quoteright 12
+KPX f s -14
+KPX f t 9
+KPX five four -13
+KPX five one -56
+KPX five seven -37
+KPX four four 1
+KPX four one -50
+KPX four seven -21
+KPX g a -25
+KPX g adieresis -25
+KPX g ae -34
+KPX g aring -25
+KPX g e -32
+KPX g eacute -32
+KPX g l -21
+KPX g oacute -27
+KPX g odieresis -27
+KPX g r 3
+KPX guillemotright A -30
+KPX guillemotright AE -39
+KPX guillemotright Aacute -30
+KPX guillemotright Adieresis -30
+KPX guillemotright Aring -30
+KPX guillemotright T -76
+KPX guillemotright V -79
+KPX guillemotright W -75
+KPX guillemotright Y -83
+KPX guilsinglright A -40
+KPX guilsinglright AE -49
+KPX guilsinglright Aacute -40
+KPX guilsinglright Adieresis -40
+KPX guilsinglright Aring -40
+KPX guilsinglright T -86
+KPX guilsinglright V -89
+KPX guilsinglright W -85
+KPX guilsinglright Y -93
+KPX h quoteright -32
+KPX h y -20
+KPX hyphen A -13
+KPX hyphen AE -22
+KPX hyphen Aacute -13
+KPX hyphen Adieresis -13
+KPX hyphen Aring -13
+KPX hyphen T -59
+KPX hyphen V -62
+KPX hyphen W -59
+KPX hyphen Y -69
+KPX i T -20
+KPX i j -5
+KPX k a 10
+KPX k aacute 10
+KPX k adieresis 10
+KPX k ae 2
+KPX k aring 10
+KPX k comma 19
+KPX k e -2
+KPX k eacute -2
+KPX k g -14
+KPX k hyphen 1
+KPX k o 1
+KPX k oacute 1
+KPX k odieresis 1
+KPX k period 17
+KPX k s 1
+KPX k u 2
+KPX k udieresis 2
+KPX l v -12
+KPX l y -8
+KPX m p -1
+KPX m v -16
+KPX m w -16
+KPX m y -16
+KPX n T -59
+KPX n p -4
+KPX n quoteright -32
+KPX n v -20
+KPX n w -20
+KPX n y -20
+KPX nine four -18
+KPX nine one -67
+KPX nine seven -12
+KPX o T -75
+KPX o quoteright -22
+KPX o t -2
+KPX o v -21
+KPX o w -21
+KPX o x -26
+KPX o y -29
+KPX oacute v -21
+KPX oacute w -21
+KPX oacute y -29
+KPX ocircumflex t -4
+KPX odieresis t -4
+KPX odieresis v -21
+KPX odieresis w -21
+KPX odieresis x -26
+KPX odieresis y -29
+KPX ograve v -21
+KPX ograve w -21
+KPX ograve y -29
+KPX one comma -38
+KPX one eight -56
+KPX one five -45
+KPX one four -75
+KPX one nine -40
+KPX one one -48
+KPX one period -39
+KPX one seven -65
+KPX one six -62
+KPX one three -43
+KPX one two -32
+KPX one zero -48
+KPX p t -2
+KPX p y -13
+KPX period one -32
+KPX period quotedblright -5
+KPX period quoteright -27
+KPX q c -6
+KPX q u -5
+KPX quotedblbase A 24
+KPX quotedblbase AE 19
+KPX quotedblbase T -37
+KPX quotedblbase V -79
+KPX quotedblbase W -74
+KPX quotedblbase Y -48
+KPX quotedblleft A -76
+KPX quotedblleft AE -98
+KPX quotedblleft Aacute -76
+KPX quotedblleft Adieresis -76
+KPX quotedblleft Aring -76
+KPX quotedblleft T -11
+KPX quotedblleft V 3
+KPX quotedblleft W 3
+KPX quotedblleft Y 0
+KPX quotedblright A -72
+KPX quotedblright AE -94
+KPX quotedblright Aacute -72
+KPX quotedblright Adieresis -72
+KPX quotedblright Aring -72
+KPX quotedblright T -1
+KPX quotedblright V 6
+KPX quotedblright W 6
+KPX quotedblright Y 2
+KPX quoteleft A -83
+KPX quoteleft AE -105
+KPX quoteleft Aacute -83
+KPX quoteleft Adieresis -83
+KPX quoteleft Aring -83
+KPX quoteleft T -18
+KPX quoteleft V -3
+KPX quoteleft W -3
+KPX quoteleft Y -7
+KPX quoteright A -94
+KPX quoteright AE -116
+KPX quoteright Aacute -94
+KPX quoteright Adieresis -94
+KPX quoteright Aring -94
+KPX quoteright comma -57
+KPX quoteright d -50
+KPX quoteright o -50
+KPX quoteright period -59
+KPX quoteright r -26
+KPX quoteright s -26
+KPX quoteright t -19
+KPX quoteright v -23
+KPX quoteright w -23
+KPX quoteright y -18
+KPX r a -13
+KPX r aacute -13
+KPX r acircumflex -13
+KPX r adieresis -13
+KPX r ae -22
+KPX r agrave -13
+KPX r aring -13
+KPX r c -15
+KPX r ccedilla -8
+KPX r colon -30
+KPX r comma -67
+KPX r d -14
+KPX r e -20
+KPX r eacute -20
+KPX r ecircumflex -20
+KPX r egrave -20
+KPX r f 8
+KPX r g -4
+KPX r h -16
+KPX r hyphen -13
+KPX r i 17
+KPX r j 12
+KPX r k -11
+KPX r l -12
+KPX r m 10
+KPX r n 6
+KPX r o -15
+KPX r oacute -15
+KPX r ocircumflex -15
+KPX r odieresis -15
+KPX r oe -19
+KPX r ograve -15
+KPX r oslash -12
+KPX r p 16
+KPX r period -69
+KPX r q -19
+KPX r quoteright 0
+KPX r r 14
+KPX r s 1
+KPX r semicolon -30
+KPX r t 12
+KPX r u 11
+KPX r v 20
+KPX r w 20
+KPX r x 7
+KPX r y 20
+KPX r z 10
+KPX s quoteright -22
+KPX s t -6
+KPX seven colon -90
+KPX seven comma -80
+KPX seven eight -46
+KPX seven five -60
+KPX seven four -79
+KPX seven one -43
+KPX seven period -81
+KPX seven seven -27
+KPX seven six -60
+KPX seven three -42
+KPX seven two -30
+KPX six four 2
+KPX six one -52
+KPX six seven -32
+KPX t S -11
+KPX t a 10
+KPX t aacute 10
+KPX t adieresis 10
+KPX t ae 2
+KPX t aring 10
+KPX t colon -22
+KPX t e -2
+KPX t eacute -2
+KPX t h -5
+KPX t o 1
+KPX t oacute 1
+KPX t odieresis 1
+KPX t quoteright -19
+KPX t semicolon -23
+KPX three four -15
+KPX three one -67
+KPX three seven -27
+KPX two four -8
+KPX two one -48
+KPX two seven -27
+KPX u quoteright -33
+KPX v a -20
+KPX v aacute -20
+KPX v acircumflex -20
+KPX v adieresis -20
+KPX v ae -28
+KPX v agrave -20
+KPX v aring -20
+KPX v atilde -20
+KPX v c -24
+KPX v colon -51
+KPX v comma -51
+KPX v e -28
+KPX v eacute -28
+KPX v ecircumflex -28
+KPX v egrave -28
+KPX v g -20
+KPX v hyphen -1
+KPX v l -24
+KPX v o -24
+KPX v oacute -24
+KPX v odieresis -24
+KPX v ograve -24
+KPX v oslash -22
+KPX v period -51
+KPX v s -19
+KPX v semicolon -51
+KPX w a -24
+KPX w aacute -24
+KPX w acircumflex -24
+KPX w adieresis -24
+KPX w ae -32
+KPX w agrave -24
+KPX w aring -24
+KPX w atilde -24
+KPX w c -30
+KPX w colon -56
+KPX w comma -53
+KPX w e -34
+KPX w eacute -34
+KPX w ecircumflex -34
+KPX w egrave -34
+KPX w g -26
+KPX w hyphen -7
+KPX w l -28
+KPX w o -30
+KPX w oacute -30
+KPX w odieresis -30
+KPX w ograve -30
+KPX w oslash -28
+KPX w period -53
+KPX w s -24
+KPX w semicolon -56
+KPX x a -1
+KPX x c -10
+KPX x e -14
+KPX x eacute -14
+KPX x o -11
+KPX x q -12
+KPX y a -11
+KPX y aacute -12
+KPX y acircumflex -12
+KPX y adieresis -12
+KPX y ae -19
+KPX y agrave -12
+KPX y aring -12
+KPX y atilde -12
+KPX y c -17
+KPX y colon -43
+KPX y comma -25
+KPX y e -22
+KPX y eacute -23
+KPX y ecircumflex -23
+KPX y egrave -23
+KPX y g -23
+KPX y hyphen 2
+KPX y l -16
+KPX y o -17
+KPX y oacute -19
+KPX y odieresis -19
+KPX y ograve -19
+KPX y oslash -17
+KPX y period -26
+KPX y s -13
+KPX y semicolon -44
+KPX zero four -1
+KPX zero one -50
+KPX zero seven -12
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/n021024l.pfb b/Master/xemtex/gsfonts/n021024l.pfb
new file mode 100644
index 00000000000..cf7585990ac
--- /dev/null
+++ b/Master/xemtex/gsfonts/n021024l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/n021024l.pfm b/Master/xemtex/gsfonts/n021024l.pfm
new file mode 100644
index 00000000000..ff4e7bf9650
--- /dev/null
+++ b/Master/xemtex/gsfonts/n021024l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/n022003l.afm b/Master/xemtex/gsfonts/n022003l.afm
new file mode 100644
index 00000000000..8cd66bd068a
--- /dev/null
+++ b/Master/xemtex/gsfonts/n022003l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName NimbusMonL-Regu
+FullName Nimbus Mono L Regular
+FamilyName Nimbus Mono L
+Weight Regular
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -12 -237 650 811
+CapHeight 563
+XHeight 417
+Descender -186
+Ascender 604
+StartCharMetrics 316
+C 32 ; WX 600 ; N space ; B 295 0 295 0 ;
+C 33 ; WX 600 ; N exclam ; B 240 -15 360 618 ;
+C 34 ; WX 600 ; N quotedbl ; B 146 315 454 604 ;
+C 35 ; WX 600 ; N numbersign ; B 92 -62 508 647 ;
+C 36 ; WX 600 ; N dollar ; B 113 -92 487 655 ;
+C 37 ; WX 600 ; N percent ; B 87 -12 513 611 ;
+C 38 ; WX 600 ; N ampersand ; B 105 -16 478 519 ;
+C 39 ; WX 600 ; N quoteright ; B 135 314 340 604 ;
+C 40 ; WX 600 ; N parenleft ; B 294 -124 458 604 ;
+C 41 ; WX 600 ; N parenright ; B 147 -124 311 604 ;
+C 42 ; WX 600 ; N asterisk ; B 113 250 487 604 ;
+C 43 ; WX 600 ; N plus ; B 72 32 528 530 ;
+C 44 ; WX 600 ; N comma ; B 135 -145 340 145 ;
+C 45 ; WX 600 ; N hyphen ; B 72 258 528 299 ;
+C 46 ; WX 600 ; N period ; B 226 -15 374 116 ;
+C 47 ; WX 600 ; N slash ; B 113 -81 487 668 ;
+C 48 ; WX 600 ; N zero ; B 113 -15 487 618 ;
+C 49 ; WX 600 ; N one ; B 113 0 487 612 ;
+C 50 ; WX 600 ; N two ; B 84 0 478 618 ;
+C 51 ; WX 600 ; N three ; B 96 -15 499 618 ;
+C 52 ; WX 600 ; N four ; B 105 0 478 604 ;
+C 53 ; WX 600 ; N five ; B 96 -15 499 604 ;
+C 54 ; WX 600 ; N six ; B 136 -15 510 618 ;
+C 55 ; WX 600 ; N seven ; B 105 -1 478 604 ;
+C 56 ; WX 600 ; N eight ; B 113 -15 487 618 ;
+C 57 ; WX 600 ; N nine ; B 136 -15 510 618 ;
+C 58 ; WX 600 ; N colon ; B 226 -15 374 417 ;
+C 59 ; WX 600 ; N semicolon ; B 139 -145 350 417 ;
+C 60 ; WX 600 ; N less ; B 72 44 522 518 ;
+C 61 ; WX 600 ; N equal ; B 51 190 549 375 ;
+C 62 ; WX 600 ; N greater ; B 78 44 528 518 ;
+C 63 ; WX 600 ; N question ; B 134 -15 487 577 ;
+C 64 ; WX 600 ; N at ; B 105 -62 478 624 ;
+C 65 ; WX 600 ; N A ; B 9 0 591 563 ;
+C 66 ; WX 600 ; N B ; B 43 0 541 563 ;
+C 67 ; WX 600 ; N C ; B 63 -16 534 576 ;
+C 68 ; WX 600 ; N D ; B 43 0 520 563 ;
+C 69 ; WX 600 ; N E ; B 43 0 520 563 ;
+C 70 ; WX 600 ; N F ; B 43 0 520 563 ;
+C 71 ; WX 600 ; N G ; B 63 -16 562 576 ;
+C 72 ; WX 600 ; N H ; B 53 0 551 563 ;
+C 73 ; WX 600 ; N I ; B 113 0 487 563 ;
+C 74 ; WX 600 ; N J ; B 84 -16 583 563 ;
+C 75 ; WX 600 ; N K ; B 43 0 572 563 ;
+C 76 ; WX 600 ; N L ; B 63 0 541 563 ;
+C 77 ; WX 600 ; N M ; B 11 0 593 563 ;
+C 78 ; WX 600 ; N N ; B 22 0 562 563 ;
+C 79 ; WX 600 ; N O ; B 51 -16 549 576 ;
+C 80 ; WX 600 ; N P ; B 43 0 499 563 ;
+C 81 ; WX 600 ; N Q ; B 51 -115 549 576 ;
+C 82 ; WX 600 ; N R ; B 43 0 589 563 ;
+C 83 ; WX 600 ; N S ; B 92 -16 508 576 ;
+C 84 ; WX 600 ; N T ; B 72 0 528 563 ;
+C 85 ; WX 600 ; N U ; B 40 -16 560 563 ;
+C 86 ; WX 600 ; N V ; B 9 0 591 563 ;
+C 87 ; WX 600 ; N W ; B 20 0 580 563 ;
+C 88 ; WX 600 ; N X ; B 40 0 560 563 ;
+C 89 ; WX 600 ; N Y ; B 51 0 549 563 ;
+C 90 ; WX 600 ; N Z ; B 103 0 497 563 ;
+C 91 ; WX 600 ; N bracketleft ; B 280 -124 445 604 ;
+C 92 ; WX 600 ; N backslash ; B 113 -81 487 668 ;
+C 93 ; WX 600 ; N bracketright ; B 155 -124 320 604 ;
+C 94 ; WX 600 ; N asciicircum ; B 113 354 487 615 ;
+C 95 ; WX 600 ; N underscore ; B -12 -125 612 -75 ;
+C 96 ; WX 600 ; N quoteleft ; B 260 343 465 604 ;
+C 97 ; WX 600 ; N a ; B 72 -16 541 431 ;
+C 98 ; WX 600 ; N b ; B 22 -16 541 604 ;
+C 99 ; WX 600 ; N c ; B 84 -16 535 431 ;
+C 100 ; WX 600 ; N d ; B 63 -16 583 604 ;
+C 101 ; WX 600 ; N e ; B 63 -16 520 431 ;
+C 102 ; WX 600 ; N f ; B 105 0 541 604 ;
+C 103 ; WX 600 ; N g ; B 63 -186 562 431 ;
+C 104 ; WX 600 ; N h ; B 43 0 551 604 ;
+C 105 ; WX 600 ; N i ; B 92 0 508 624 ;
+C 106 ; WX 600 ; N j ; B 147 -186 458 624 ;
+C 107 ; WX 600 ; N k ; B 63 0 541 604 ;
+C 108 ; WX 600 ; N l ; B 92 0 508 604 ;
+C 109 ; WX 600 ; N m ; B 11 0 593 431 ;
+C 110 ; WX 600 ; N n ; B 53 0 541 431 ;
+C 111 ; WX 600 ; N o ; B 72 -16 528 431 ;
+C 112 ; WX 600 ; N p ; B 22 -186 541 431 ;
+C 113 ; WX 600 ; N q ; B 63 -186 583 431 ;
+C 114 ; WX 600 ; N r ; B 84 0 541 427 ;
+C 115 ; WX 600 ; N s ; B 103 -16 497 431 ;
+C 116 ; WX 600 ; N t ; B 43 -16 499 563 ;
+C 117 ; WX 600 ; N u ; B 43 -16 541 417 ;
+C 118 ; WX 600 ; N v ; B 30 0 570 417 ;
+C 119 ; WX 600 ; N w ; B 30 0 570 417 ;
+C 120 ; WX 600 ; N x ; B 51 0 549 417 ;
+C 121 ; WX 600 ; N y ; B 51 -186 549 417 ;
+C 122 ; WX 600 ; N z ; B 115 0 489 417 ;
+C 123 ; WX 600 ; N braceleft ; B 197 -124 403 604 ;
+C 124 ; WX 600 ; N bar ; B 280 -124 320 604 ;
+C 125 ; WX 600 ; N braceright ; B 197 -124 403 604 ;
+C 126 ; WX 600 ; N asciitilde ; B 92 212 508 348 ;
+C 161 ; WX 600 ; N exclamdown ; B 240 -216 360 417 ;
+C 162 ; WX 600 ; N cent ; B 113 -13 469 630 ;
+C 163 ; WX 600 ; N sterling ; B 63 0 520 578 ;
+C 164 ; WX 600 ; N fraction ; B 50 138 549 470 ;
+C 165 ; WX 600 ; N yen ; B 51 0 549 563 ;
+C 166 ; WX 600 ; N florin ; B 87 -93 518 618 ;
+C 167 ; WX 600 ; N section ; B 66 -62 534 603 ;
+C 168 ; WX 600 ; N currency ; B 103 95 497 489 ;
+C 169 ; WX 600 ; N quotesingle ; B 236 315 364 604 ;
+C 170 ; WX 600 ; N quotedblleft ; B 93 343 507 604 ;
+C 171 ; WX 600 ; N guillemotleft ; B 63 0 541 417 ;
+C 172 ; WX 600 ; N guilsinglleft ; B 63 0 312 417 ;
+C 173 ; WX 600 ; N guilsinglright ; B 293 0 541 417 ;
+C 174 ; WX 600 ; N fi ; B 10 0 585 624 ;
+C 175 ; WX 600 ; N fl ; B 10 0 587 604 ;
+C 177 ; WX 600 ; N endash ; B 72 261 528 302 ;
+C 178 ; WX 600 ; N dagger ; B 124 -63 476 604 ;
+C 179 ; WX 600 ; N daggerdbl ; B 124 -62 476 604 ;
+C 180 ; WX 600 ; N periodcentered ; B 226 217 374 348 ;
+C 182 ; WX 600 ; N paragraph ; B 79 -62 525 604 ;
+C 183 ; WX 600 ; N bullet ; B 202 141 398 337 ;
+C 184 ; WX 600 ; N quotesinglbase ; B 135 -145 340 145 ;
+C 185 ; WX 600 ; N quotedblbase ; B 93 -116 507 145 ;
+C 186 ; WX 600 ; N quotedblright ; B 93 343 507 604 ;
+C 187 ; WX 600 ; N guillemotright ; B 63 0 541 417 ;
+C 188 ; WX 600 ; N ellipsis ; B 51 -15 549 84 ;
+C 189 ; WX 600 ; N perthousand ; B 34 -9 564 614 ;
+C 191 ; WX 600 ; N questiondown ; B 113 -175 466 417 ;
+C 193 ; WX 600 ; N grave ; B 155 490 320 639 ;
+C 194 ; WX 600 ; N acute ; B 280 490 445 639 ;
+C 195 ; WX 600 ; N circumflex ; B 155 490 445 639 ;
+C 196 ; WX 600 ; N tilde ; B 145 516 455 605 ;
+C 197 ; WX 600 ; N macron ; B 155 536 445 576 ;
+C 198 ; WX 600 ; N breve ; B 155 490 445 620 ;
+C 199 ; WX 600 ; N dotaccent ; B 250 511 350 611 ;
+C 200 ; WX 600 ; N dieresis ; B 140 511 461 611 ;
+C 202 ; WX 600 ; N ring ; B 207 480 393 661 ;
+C 203 ; WX 600 ; N cedilla ; B 210 -173 377 0 ;
+C 205 ; WX 600 ; N hungarumlaut ; B 155 490 445 633 ;
+C 206 ; WX 600 ; N ogonek ; B 280 -155 433 0 ;
+C 207 ; WX 600 ; N caron ; B 155 490 445 639 ;
+C 208 ; WX 600 ; N emdash ; B 1 261 599 302 ;
+C 225 ; WX 600 ; N AE ; B 10 0 590 563 ;
+C 227 ; WX 600 ; N ordfeminine ; B 155 279 447 574 ;
+C 232 ; WX 600 ; N Lslash ; B 43 0 541 563 ;
+C 233 ; WX 600 ; N Oslash ; B 40 -43 560 605 ;
+C 234 ; WX 600 ; N OE ; B 10 0 590 563 ;
+C 235 ; WX 600 ; N ordmasculine ; B 154 284 448 577 ;
+C 241 ; WX 600 ; N ae ; B 12 -16 578 431 ;
+C 245 ; WX 600 ; N dotlessi ; B 92 0 508 417 ;
+C 248 ; WX 600 ; N lslash ; B 92 0 508 604 ;
+C 249 ; WX 600 ; N oslash ; B 53 -43 543 458 ;
+C 250 ; WX 600 ; N oe ; B 12 -16 578 431 ;
+C 251 ; WX 600 ; N germandbls ; B 43 -16 499 604 ;
+C -1 ; WX 600 ; N Udieresis ; B 40 -16 560 761 ;
+C -1 ; WX 600 ; N Uacute ; B 40 -16 560 789 ;
+C -1 ; WX 600 ; N Scedilla ; B 92 -173 508 576 ;
+C -1 ; WX 600 ; N Tcaron ; B 72 0 528 789 ;
+C -1 ; WX 600 ; N Scaron ; B 92 -16 508 789 ;
+C -1 ; WX 600 ; N Rcaron ; B 43 0 589 789 ;
+C -1 ; WX 600 ; N Racute ; B 43 0 589 789 ;
+C -1 ; WX 600 ; N Sacute ; B 92 -16 508 789 ;
+C -1 ; WX 600 ; N Otilde ; B 51 -16 549 755 ;
+C -1 ; WX 600 ; N ucircumflex ; B 43 -16 541 639 ;
+C -1 ; WX 600 ; N Ohungarumlaut ; B 51 -16 549 783 ;
+C -1 ; WX 600 ; N Uhungarumlaut ; B 40 -16 560 783 ;
+C -1 ; WX 600 ; N Yacute ; B 51 0 549 789 ;
+C -1 ; WX 600 ; N Eth ; B 0 0 520 563 ;
+C -1 ; WX 600 ; N Dcroat ; B 0 0 520 563 ;
+C -1 ; WX 600 ; N Zacute ; B 103 0 497 789 ;
+C -1 ; WX 600 ; N Uring ; B 40 -16 560 811 ;
+C -1 ; WX 600 ; N gbreve ; B 63 -186 562 620 ;
+C -1 ; WX 600 ; N eogonek ; B 63 -155 520 431 ;
+C -1 ; WX 600 ; N edotaccent ; B 63 -16 520 611 ;
+C -1 ; WX 600 ; N ecaron ; B 63 -16 520 639 ;
+C -1 ; WX 600 ; N Ugrave ; B 40 -16 560 789 ;
+C -1 ; WX 600 ; N Thorn ; B 43 0 499 563 ;
+C -1 ; WX 600 ; N eacute ; B 63 -16 520 639 ;
+C -1 ; WX 600 ; N edieresis ; B 63 -16 520 611 ;
+C -1 ; WX 600 ; N dcaron ; B 63 -16 650 616 ;
+C -1 ; WX 600 ; N ccedilla ; B 84 -173 535 431 ;
+C -1 ; WX 600 ; N ccaron ; B 84 -16 535 639 ;
+C -1 ; WX 600 ; N cacute ; B 84 -16 535 639 ;
+C -1 ; WX 600 ; N aogonek ; B 72 -155 556 431 ;
+C -1 ; WX 600 ; N aring ; B 72 -16 541 661 ;
+C -1 ; WX 600 ; N atilde ; B 72 -16 541 605 ;
+C -1 ; WX 600 ; N abreve ; B 72 -16 541 620 ;
+C -1 ; WX 600 ; N egrave ; B 63 -16 520 639 ;
+C -1 ; WX 600 ; N agrave ; B 72 -16 541 639 ;
+C -1 ; WX 600 ; N aacute ; B 72 -16 541 639 ;
+C -1 ; WX 600 ; N adieresis ; B 72 -16 541 611 ;
+C -1 ; WX 600 ; N Uogonek ; B 40 -155 560 563 ;
+C -1 ; WX 600 ; N ugrave ; B 43 -16 541 639 ;
+C -1 ; WX 600 ; N uacute ; B 43 -16 541 639 ;
+C -1 ; WX 600 ; N udieresis ; B 43 -16 541 611 ;
+C -1 ; WX 600 ; N tcaron ; B 43 -16 508 616 ;
+C -1 ; WX 600 ; N scommaaccent ; B 103 -237 497 431 ;
+C -1 ; WX 600 ; N Zcaron ; B 103 0 497 789 ;
+C -1 ; WX 600 ; N ecircumflex ; B 63 -16 520 639 ;
+C -1 ; WX 600 ; N Ucircumflex ; B 40 -16 560 789 ;
+C -1 ; WX 600 ; N acircumflex ; B 72 -16 541 639 ;
+C -1 ; WX 600 ; N Zdotaccent ; B 103 0 497 761 ;
+C -1 ; WX 600 ; N scaron ; B 103 -16 497 639 ;
+C -1 ; WX 600 ; N Amacron ; B 9 0 591 726 ;
+C -1 ; WX 600 ; N sacute ; B 103 -16 497 639 ;
+C -1 ; WX 600 ; N Tcommaaccent ; B 72 -237 528 563 ;
+C -1 ; WX 600 ; N Ydieresis ; B 51 0 549 761 ;
+C -1 ; WX 600 ; N thorn ; B 22 -186 541 590 ;
+C -1 ; WX 600 ; N Emacron ; B 43 0 520 726 ;
+C -1 ; WX 600 ; N Ograve ; B 51 -16 549 789 ;
+C -1 ; WX 600 ; N Oacute ; B 51 -16 549 789 ;
+C -1 ; WX 600 ; N Odieresis ; B 51 -16 549 761 ;
+C -1 ; WX 600 ; N Ntilde ; B 22 0 562 755 ;
+C -1 ; WX 600 ; N Ncaron ; B 22 0 562 789 ;
+C -1 ; WX 600 ; N Nacute ; B 22 0 562 789 ;
+C -1 ; WX 600 ; N Lcaron ; B 63 0 541 566 ;
+C -1 ; WX 600 ; N Lacute ; B 63 0 541 789 ;
+C -1 ; WX 600 ; N Idotaccent ; B 113 0 487 761 ;
+C -1 ; WX 600 ; N racute ; B 84 0 541 639 ;
+C -1 ; WX 600 ; N Icircumflex ; B 113 0 487 789 ;
+C -1 ; WX 600 ; N ohungarumlaut ; B 72 -16 528 633 ;
+C -1 ; WX 600 ; N otilde ; B 72 -16 528 605 ;
+C -1 ; WX 600 ; N Euro ; B 11 -16 534 576 ;
+C -1 ; WX 600 ; N ocircumflex ; B 72 -16 528 639 ;
+C -1 ; WX 600 ; N onesuperior ; B 191 259 410 612 ;
+C -1 ; WX 600 ; N twosuperior ; B 175 259 405 612 ;
+C -1 ; WX 600 ; N threesuperior ; B 181 251 416 612 ;
+C -1 ; WX 600 ; N Igrave ; B 113 0 487 789 ;
+C -1 ; WX 600 ; N Iacute ; B 113 0 487 789 ;
+C -1 ; WX 600 ; N Imacron ; B 113 0 487 726 ;
+C -1 ; WX 600 ; N Iogonek ; B 113 -155 500 563 ;
+C -1 ; WX 600 ; N Idieresis ; B 113 0 487 761 ;
+C -1 ; WX 600 ; N Gbreve ; B 63 -16 562 770 ;
+C -1 ; WX 600 ; N Umacron ; B 40 -16 560 726 ;
+C -1 ; WX 600 ; N Kcommaaccent ; B 43 -237 572 563 ;
+C -1 ; WX 600 ; N ograve ; B 72 -16 528 639 ;
+C -1 ; WX 600 ; N Scommaaccent ; B 92 -237 508 576 ;
+C -1 ; WX 600 ; N Eogonek ; B 43 -155 549 563 ;
+C -1 ; WX 600 ; N oacute ; B 72 -16 528 639 ;
+C -1 ; WX 600 ; N Edotaccent ; B 43 0 520 761 ;
+C -1 ; WX 600 ; N iogonek ; B 92 -155 520 624 ;
+C -1 ; WX 600 ; N gcommaaccent ; B 63 -186 562 666 ;
+C -1 ; WX 600 ; N odieresis ; B 72 -16 528 611 ;
+C -1 ; WX 600 ; N ntilde ; B 53 0 541 605 ;
+C -1 ; WX 600 ; N ncaron ; B 53 0 541 639 ;
+C -1 ; WX 600 ; N Ecaron ; B 43 0 520 789 ;
+C -1 ; WX 600 ; N Ecircumflex ; B 43 0 520 789 ;
+C -1 ; WX 600 ; N scedilla ; B 103 -173 497 431 ;
+C -1 ; WX 600 ; N rcaron ; B 84 0 541 639 ;
+C -1 ; WX 600 ; N Egrave ; B 43 0 520 789 ;
+C -1 ; WX 600 ; N Eacute ; B 43 0 520 789 ;
+C -1 ; WX 600 ; N Gcommaaccent ; B 63 -237 562 576 ;
+C -1 ; WX 600 ; N Rcommaaccent ; B 43 -237 589 563 ;
+C -1 ; WX 600 ; N Edieresis ; B 43 0 520 761 ;
+C -1 ; WX 600 ; N nacute ; B 53 0 541 639 ;
+C -1 ; WX 600 ; N uogonek ; B 43 -155 556 417 ;
+C -1 ; WX 600 ; N umacron ; B 43 -16 541 576 ;
+C -1 ; WX 600 ; N Dcaron ; B 43 0 520 789 ;
+C -1 ; WX 600 ; N lcaron ; B 92 0 508 616 ;
+C -1 ; WX 600 ; N Ccaron ; B 63 -16 534 789 ;
+C -1 ; WX 600 ; N Cacute ; B 63 -16 534 789 ;
+C -1 ; WX 600 ; N Ccedilla ; B 63 -173 534 576 ;
+C -1 ; WX 600 ; N degree ; B 155 346 445 636 ;
+C -1 ; WX 600 ; N Aogonek ; B 9 -155 600 563 ;
+C -1 ; WX 600 ; N minus ; B 72 261 528 302 ;
+C -1 ; WX 600 ; N multiply ; B 118 100 482 464 ;
+C -1 ; WX 600 ; N divide ; B 72 25 528 540 ;
+C -1 ; WX 600 ; N Aring ; B 9 0 591 811 ;
+C -1 ; WX 600 ; N trademark ; B 4 243 598 563 ;
+C -1 ; WX 600 ; N rcommaaccent ; B 84 -237 541 427 ;
+C -1 ; WX 600 ; N lacute ; B 92 0 508 789 ;
+C -1 ; WX 600 ; N omacron ; B 72 -16 528 576 ;
+C -1 ; WX 600 ; N Atilde ; B 9 0 591 755 ;
+C -1 ; WX 600 ; N icircumflex ; B 92 0 508 639 ;
+C -1 ; WX 600 ; N igrave ; B 92 0 508 639 ;
+C -1 ; WX 600 ; N ncommaaccent ; B 53 -237 541 431 ;
+C -1 ; WX 600 ; N lcommaaccent ; B 92 -237 508 604 ;
+C -1 ; WX 600 ; N plusminus ; B 72 0 528 529 ;
+C -1 ; WX 600 ; N onehalf ; B 23 0 573 612 ;
+C -1 ; WX 600 ; N onequarter ; B 16 0 580 612 ;
+C -1 ; WX 600 ; N threequarters ; B 6 0 580 612 ;
+C -1 ; WX 600 ; N iacute ; B 92 0 508 639 ;
+C -1 ; WX 600 ; N Abreve ; B 9 0 591 770 ;
+C -1 ; WX 600 ; N kcommaaccent ; B 63 -237 541 604 ;
+C -1 ; WX 600 ; N Omacron ; B 51 -16 549 726 ;
+C -1 ; WX 600 ; N imacron ; B 92 0 508 576 ;
+C -1 ; WX 600 ; N emacron ; B 63 -16 520 576 ;
+C -1 ; WX 600 ; N amacron ; B 72 -16 541 576 ;
+C -1 ; WX 600 ; N tcommaaccent ; B 43 -237 499 563 ;
+C -1 ; WX 600 ; N ydieresis ; B 51 -186 549 611 ;
+C -1 ; WX 600 ; N zdotaccent ; B 115 0 489 611 ;
+C -1 ; WX 600 ; N zcaron ; B 115 0 489 639 ;
+C -1 ; WX 600 ; N zacute ; B 115 0 489 639 ;
+C -1 ; WX 600 ; N yacute ; B 51 -186 549 639 ;
+C -1 ; WX 600 ; N uhungarumlaut ; B 43 -16 541 633 ;
+C -1 ; WX 600 ; N eth ; B 72 -17 528 620 ;
+C -1 ; WX 600 ; N uring ; B 43 -16 541 661 ;
+C -1 ; WX 600 ; N Ocircumflex ; B 51 -16 549 789 ;
+C -1 ; WX 600 ; N commaaccent ; B 234 -237 367 -60 ;
+C -1 ; WX 600 ; N copyright ; B 3 -15 596 578 ;
+C -1 ; WX 600 ; N registered ; B 3 -15 596 578 ;
+C -1 ; WX 600 ; N Acircumflex ; B 9 0 591 789 ;
+C -1 ; WX 600 ; N idieresis ; B 92 0 508 611 ;
+C -1 ; WX 600 ; N lozenge ; B 89 -11 511 575 ;
+C -1 ; WX 600 ; N Delta ; B 43 0 557 563 ;
+C -1 ; WX 600 ; N notequal ; B 51 94 549 464 ;
+C -1 ; WX 600 ; N radical ; B 27 0 628 699 ;
+C -1 ; WX 600 ; N Agrave ; B 9 0 591 789 ;
+C -1 ; WX 600 ; N Aacute ; B 9 0 591 789 ;
+C -1 ; WX 600 ; N lessequal ; B 53 0 525 535 ;
+C -1 ; WX 600 ; N greaterequal ; B 59 0 531 535 ;
+C -1 ; WX 600 ; N logicalnot ; B 72 168 528 438 ;
+C -1 ; WX 600 ; N summation ; B 113 -127 507 563 ;
+C -1 ; WX 600 ; N partialdiff ; B 71 -17 529 582 ;
+C -1 ; WX 600 ; N Ncommaaccent ; B 22 -237 562 563 ;
+C -1 ; WX 600 ; N dcroat ; B 63 -16 583 604 ;
+C -1 ; WX 600 ; N brokenbar ; B 280 -124 320 604 ;
+C -1 ; WX 600 ; N Lcommaaccent ; B 63 -237 541 563 ;
+C -1 ; WX 600 ; N Adieresis ; B 9 0 591 761 ;
+C -1 ; WX 600 ; N mu ; B 43 -200 541 417 ;
+C -1 ; WX 600 ; N .notdef ; B 295 0 295 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -33
+KPX A Ccedilla -30
+KPX A G -27
+KPX A O -27
+KPX A Odieresis -27
+KPX A Q -28
+KPX A T -27
+KPX A U -32
+KPX A Uacute -32
+KPX A Ucircumflex -32
+KPX A Udieresis -32
+KPX A Ugrave -32
+KPX A V -74
+KPX A W -12
+KPX A Y -28
+KPX A a 8
+KPX A b 46
+KPX A c -19
+KPX A ccedilla -15
+KPX A comma -39
+KPX A d -10
+KPX A e -14
+KPX A g -23
+KPX A guillemotleft -49
+KPX A guilsinglleft -49
+KPX A hyphen -30
+KPX A o -16
+KPX A period -67
+KPX A q -24
+KPX A quotedblright -78
+KPX A quoteright -98
+KPX A t -26
+KPX A u -15
+KPX A v -55
+KPX A w -19
+KPX A y -60
+KPX Aacute C -33
+KPX Aacute G -27
+KPX Aacute O -27
+KPX Aacute Q -28
+KPX Aacute T -27
+KPX Aacute U -32
+KPX Aacute V -74
+KPX Aacute W -12
+KPX Aacute Y -28
+KPX Aacute a 8
+KPX Aacute b 46
+KPX Aacute c -19
+KPX Aacute comma -39
+KPX Aacute d -10
+KPX Aacute e -14
+KPX Aacute g -23
+KPX Aacute guillemotleft -49
+KPX Aacute guilsinglleft -49
+KPX Aacute hyphen -30
+KPX Aacute o -16
+KPX Aacute period -67
+KPX Aacute q -24
+KPX Aacute quoteright -98
+KPX Aacute t -26
+KPX Aacute u -15
+KPX Aacute v -55
+KPX Aacute w -19
+KPX Aacute y -60
+KPX Acircumflex C -33
+KPX Acircumflex G -27
+KPX Acircumflex O -27
+KPX Acircumflex Q -28
+KPX Acircumflex T -27
+KPX Acircumflex U -32
+KPX Acircumflex V -74
+KPX Acircumflex W -12
+KPX Acircumflex Y -28
+KPX Acircumflex comma -39
+KPX Acircumflex period -67
+KPX Adieresis C -33
+KPX Adieresis G -27
+KPX Adieresis O -27
+KPX Adieresis Q -28
+KPX Adieresis T -27
+KPX Adieresis U -32
+KPX Adieresis V -74
+KPX Adieresis W -12
+KPX Adieresis Y -28
+KPX Adieresis a 8
+KPX Adieresis b 46
+KPX Adieresis c -19
+KPX Adieresis comma -39
+KPX Adieresis d -10
+KPX Adieresis g -23
+KPX Adieresis guillemotleft -49
+KPX Adieresis guilsinglleft -49
+KPX Adieresis hyphen -30
+KPX Adieresis o -16
+KPX Adieresis period -67
+KPX Adieresis q -24
+KPX Adieresis quotedblright -78
+KPX Adieresis quoteright -98
+KPX Adieresis t -26
+KPX Adieresis u -15
+KPX Adieresis v -55
+KPX Adieresis w -19
+KPX Adieresis y -60
+KPX Agrave C -33
+KPX Agrave G -27
+KPX Agrave O -27
+KPX Agrave Q -28
+KPX Agrave T -27
+KPX Agrave U -32
+KPX Agrave V -74
+KPX Agrave W -12
+KPX Agrave Y -28
+KPX Agrave comma -39
+KPX Agrave period -67
+KPX Aring C -33
+KPX Aring G -27
+KPX Aring O -27
+KPX Aring Q -28
+KPX Aring T -27
+KPX Aring U -32
+KPX Aring V -74
+KPX Aring W -12
+KPX Aring Y -28
+KPX Aring a 8
+KPX Aring b 46
+KPX Aring c -19
+KPX Aring comma -39
+KPX Aring d -10
+KPX Aring e -14
+KPX Aring g -23
+KPX Aring guillemotleft -49
+KPX Aring guilsinglleft -49
+KPX Aring hyphen -30
+KPX Aring o -16
+KPX Aring period -67
+KPX Aring q -24
+KPX Aring quotedblright -78
+KPX Aring quoteright -98
+KPX Aring t -26
+KPX Aring u -15
+KPX Aring v -55
+KPX Aring w -19
+KPX Aring y -60
+KPX Atilde C -33
+KPX Atilde G -27
+KPX Atilde O -27
+KPX Atilde Q -28
+KPX Atilde T -27
+KPX Atilde U -32
+KPX Atilde V -74
+KPX Atilde W -12
+KPX Atilde Y -28
+KPX Atilde comma -39
+KPX Atilde period -67
+KPX B A -9
+KPX B AE -9
+KPX B Aacute -9
+KPX B Acircumflex -9
+KPX B Adieresis -9
+KPX B Aring -9
+KPX B Atilde -9
+KPX B O -10
+KPX B OE 10
+KPX B Oacute -10
+KPX B Ocircumflex -10
+KPX B Odieresis -10
+KPX B Ograve -10
+KPX B Oslash -8
+KPX B V -29
+KPX B W -12
+KPX B Y -50
+KPX C A -9
+KPX C AE -9
+KPX C Aacute -9
+KPX C Adieresis -9
+KPX C Aring -9
+KPX C H -26
+KPX C K -11
+KPX C O -21
+KPX C Oacute -21
+KPX C Odieresis -21
+KPX Ccedilla A -5
+KPX D A -42
+KPX D Aacute -42
+KPX D Acircumflex -42
+KPX D Adieresis -42
+KPX D Agrave -42
+KPX D Aring -42
+KPX D Atilde -42
+KPX D J -31
+KPX D T -40
+KPX D V -42
+KPX D W -17
+KPX D X -55
+KPX D Y -63
+KPX F A -38
+KPX F Aacute -38
+KPX F Acircumflex -38
+KPX F Adieresis -38
+KPX F Agrave -38
+KPX F Aring -38
+KPX F Atilde -38
+KPX F J -95
+KPX F O -27
+KPX F Odieresis -27
+KPX F a -47
+KPX F aacute -47
+KPX F adieresis -43
+KPX F ae -20
+KPX F aring -47
+KPX F comma -168
+KPX F e -56
+KPX F eacute -56
+KPX F hyphen -67
+KPX F i -47
+KPX F j -54
+KPX F o -63
+KPX F oacute -63
+KPX F odieresis -48
+KPX F oe -21
+KPX F oslash -63
+KPX F period -193
+KPX F r -32
+KPX F u -1
+KPX G A 6
+KPX G AE 5
+KPX G Aacute 6
+KPX G Acircumflex 6
+KPX G Adieresis 6
+KPX G Agrave 6
+KPX G Aring 6
+KPX G Atilde 6
+KPX G T -25
+KPX G V 6
+KPX G W 1
+KPX G Y -14
+KPX J A -7
+KPX J AE -16
+KPX J Adieresis -7
+KPX J Aring -7
+KPX K C -42
+KPX K G -36
+KPX K O -37
+KPX K OE -19
+KPX K Oacute -37
+KPX K Odieresis -37
+KPX K S -9
+KPX K T -12
+KPX K a -1
+KPX K adieresis -1
+KPX K ae 26
+KPX K aring -1
+KPX K e -24
+KPX K hyphen -61
+KPX K o -25
+KPX K oacute -25
+KPX K odieresis -25
+KPX K u -25
+KPX K udieresis -25
+KPX K y -67
+KPX L A 17
+KPX L AE 16
+KPX L Aacute 17
+KPX L Adieresis 17
+KPX L Aring 17
+KPX L C -11
+KPX L Ccedilla -10
+KPX L G -10
+KPX L O -6
+KPX L Oacute -6
+KPX L Ocircumflex -6
+KPX L Odieresis -6
+KPX L Ograve -6
+KPX L Otilde -6
+KPX L S -24
+KPX L T -52
+KPX L U -29
+KPX L Udieresis -29
+KPX L V -66
+KPX L W -27
+KPX L Y -53
+KPX L hyphen 3
+KPX L quotedblright -66
+KPX L quoteright -73
+KPX L u -16
+KPX L udieresis -16
+KPX L y -45
+KPX N A -3
+KPX N AE -3
+KPX N Aacute -3
+KPX N Adieresis -3
+KPX N Aring -3
+KPX N C -12
+KPX N Ccedilla -12
+KPX N G -11
+KPX N O -9
+KPX N Oacute -9
+KPX N Odieresis -9
+KPX N a -19
+KPX N aacute -19
+KPX N adieresis -19
+KPX N ae 11
+KPX N aring -19
+KPX N comma -58
+KPX N e -6
+KPX N eacute -6
+KPX N o -10
+KPX N oacute -10
+KPX N odieresis -10
+KPX N oslash -7
+KPX N period -83
+KPX N u -9
+KPX N udieresis -9
+KPX O A -27
+KPX O AE -26
+KPX O Aacute -27
+KPX O Adieresis -27
+KPX O Aring -27
+KPX O T -30
+KPX O V -31
+KPX O W -5
+KPX O X -43
+KPX O Y -52
+KPX Oacute A -27
+KPX Oacute T -30
+KPX Oacute V -31
+KPX Oacute W -5
+KPX Oacute Y -52
+KPX Ocircumflex T -30
+KPX Ocircumflex V -31
+KPX Ocircumflex Y -52
+KPX Odieresis A -27
+KPX Odieresis T -30
+KPX Odieresis V -31
+KPX Odieresis W -5
+KPX Odieresis X -43
+KPX Odieresis Y -52
+KPX Ograve T -30
+KPX Ograve V -31
+KPX Ograve Y -52
+KPX Oslash A -26
+KPX Otilde T -30
+KPX Otilde V -31
+KPX Otilde Y -52
+KPX P A -79
+KPX P AE -76
+KPX P Aacute -79
+KPX P Adieresis -79
+KPX P Aring -79
+KPX P J -82
+KPX P a -52
+KPX P aacute -52
+KPX P adieresis -52
+KPX P ae -25
+KPX P aring -52
+KPX P comma -156
+KPX P e -42
+KPX P eacute -42
+KPX P hyphen -46
+KPX P o -48
+KPX P oacute -48
+KPX P odieresis -48
+KPX P oe -13
+KPX P oslash -48
+KPX P period -181
+KPX R C -27
+KPX R Ccedilla -28
+KPX R G -26
+KPX R O -25
+KPX R OE -4
+KPX R Oacute -25
+KPX R Odieresis -25
+KPX R T -28
+KPX R U -32
+KPX R Udieresis -32
+KPX R V -33
+KPX R W -13
+KPX R Y -29
+KPX R a 7
+KPX R aacute 7
+KPX R adieresis 7
+KPX R ae 35
+KPX R aring 7
+KPX R e -15
+KPX R eacute -15
+KPX R hyphen -48
+KPX R o -17
+KPX R oacute -17
+KPX R odieresis -17
+KPX R oe 22
+KPX R u -11
+KPX R uacute -11
+KPX R udieresis -11
+KPX R y -15
+KPX S A -22
+KPX S AE -22
+KPX S Aacute -22
+KPX S Adieresis -22
+KPX S Aring -22
+KPX S T -42
+KPX S V -10
+KPX S W -16
+KPX S Y -31
+KPX S t -18
+KPX T A -27
+KPX T AE -27
+KPX T Aacute -27
+KPX T Acircumflex -27
+KPX T Adieresis -27
+KPX T Agrave -27
+KPX T Aring -27
+KPX T Atilde -27
+KPX T C -29
+KPX T G -30
+KPX T J -79
+KPX T O -29
+KPX T OE -7
+KPX T Oacute -29
+KPX T Ocircumflex -29
+KPX T Odieresis -29
+KPX T Ograve -29
+KPX T Oslash -29
+KPX T Otilde -29
+KPX T S -43
+KPX T V 10
+KPX T W 5
+KPX T Y -10
+KPX T a -60
+KPX T ae -33
+KPX T c -88
+KPX T colon -136
+KPX T comma -108
+KPX T e -83
+KPX T g -92
+KPX T guillemotleft -122
+KPX T guilsinglleft -122
+KPX T hyphen -94
+KPX T i -58
+KPX T j -80
+KPX T o -85
+KPX T oslash -54
+KPX T period -136
+KPX T r -54
+KPX T s -63
+KPX T semicolon -111
+KPX T u -84
+KPX T v -93
+KPX T w -88
+KPX T y -103
+KPX U A -18
+KPX U AE -27
+KPX U Aacute -18
+KPX U Acircumflex -18
+KPX U Adieresis -18
+KPX U Aring -18
+KPX U Atilde -18
+KPX U comma -76
+KPX U m 6
+KPX U n -19
+KPX U p 0
+KPX U period -101
+KPX U r -41
+KPX Uacute A -18
+KPX Uacute comma -76
+KPX Uacute m 6
+KPX Uacute n -19
+KPX Uacute p 0
+KPX Uacute period -101
+KPX Uacute r -41
+KPX Ucircumflex A -18
+KPX Udieresis A -18
+KPX Udieresis b 25
+KPX Udieresis comma -76
+KPX Udieresis m 6
+KPX Udieresis n -19
+KPX Udieresis p 0
+KPX Udieresis period -101
+KPX Udieresis r -41
+KPX Ugrave A -18
+KPX V A -3
+KPX V AE -12
+KPX V Aacute -3
+KPX V Acircumflex -3
+KPX V Adieresis -3
+KPX V Agrave -3
+KPX V Aring -3
+KPX V Atilde -3
+KPX V C -29
+KPX V G -31
+KPX V O -31
+KPX V Oacute -31
+KPX V Ocircumflex -31
+KPX V Odieresis -31
+KPX V Ograve -31
+KPX V Oslash -31
+KPX V Otilde -31
+KPX V S -34
+KPX V T 10
+KPX V a -60
+KPX V ae -33
+KPX V colon -124
+KPX V comma -129
+KPX V e -52
+KPX V g -53
+KPX V guillemotleft -75
+KPX V guilsinglleft -75
+KPX V hyphen -43
+KPX V i -60
+KPX V o -56
+KPX V oslash -53
+KPX V period -154
+KPX V r -46
+KPX V semicolon -114
+KPX V u -15
+KPX V y -19
+KPX W A -8
+KPX W AE -14
+KPX W Aacute -8
+KPX W Acircumflex -8
+KPX W Adieresis -8
+KPX W Agrave -8
+KPX W Aring -8
+KPX W Atilde -8
+KPX W C -8
+KPX W G -7
+KPX W O -5
+KPX W Oacute -5
+KPX W Ocircumflex -5
+KPX W Odieresis -5
+KPX W Ograve -5
+KPX W Oslash -2
+KPX W Otilde -5
+KPX W S -24
+KPX W T 5
+KPX W a -20
+KPX W ae 10
+KPX W colon -88
+KPX W comma -66
+KPX W e -6
+KPX W g -7
+KPX W guillemotleft -31
+KPX W guilsinglleft -31
+KPX W hyphen -2
+KPX W i -43
+KPX W o -10
+KPX W oslash -7
+KPX W period -90
+KPX W r -29
+KPX W semicolon -69
+KPX W u 2
+KPX W y -2
+KPX X C -46
+KPX X O -43
+KPX X Odieresis -43
+KPX X Q -44
+KPX X a -7
+KPX X e -30
+KPX X hyphen -75
+KPX X o -31
+KPX X u -31
+KPX X y -53
+KPX Y A -24
+KPX Y AE -27
+KPX Y Aacute -24
+KPX Y Acircumflex -24
+KPX Y Adieresis -24
+KPX Y Agrave -24
+KPX Y Aring -24
+KPX Y Atilde -24
+KPX Y C -51
+KPX Y G -52
+KPX Y O -53
+KPX Y Oacute -53
+KPX Y Ocircumflex -53
+KPX Y Odieresis -53
+KPX Y Ograve -53
+KPX Y Oslash -53
+KPX Y Otilde -53
+KPX Y S -55
+KPX Y T -10
+KPX Y a -60
+KPX Y ae -32
+KPX Y colon -135
+KPX Y comma -107
+KPX Y e -78
+KPX Y g -81
+KPX Y guillemotleft -115
+KPX Y guilsinglleft -115
+KPX Y hyphen -91
+KPX Y i -57
+KPX Y o -83
+KPX Y oslash -54
+KPX Y p -35
+KPX Y period -135
+KPX Y semicolon -110
+KPX Y u -46
+KPX Y v -39
+KPX Z v -50
+KPX Z y -61
+KPX a j -87
+KPX a quoteright -56
+KPX a v -28
+KPX a w -21
+KPX a y -38
+KPX aacute v -28
+KPX aacute w -21
+KPX aacute y -38
+KPX adieresis v -28
+KPX adieresis w -21
+KPX adieresis y -38
+KPX ae v 21
+KPX ae w 21
+KPX ae y 10
+KPX agrave v -28
+KPX agrave w -21
+KPX agrave y -38
+KPX aring v -28
+KPX aring w -21
+KPX aring y -38
+KPX b v -12
+KPX b w 1
+KPX b y -22
+KPX c h -3
+KPX c k -9
+KPX comma one -144
+KPX comma quotedblright -119
+KPX comma quoteright -136
+KPX e quoteright -41
+KPX e t -29
+KPX e v -22
+KPX e w -19
+KPX e x -2
+KPX e y -33
+KPX eacute v -22
+KPX eacute w -19
+KPX eacute y -33
+KPX ecircumflex v -22
+KPX ecircumflex w -19
+KPX ecircumflex y -33
+KPX eight four -58
+KPX eight one -75
+KPX eight seven -68
+KPX f a -38
+KPX f aacute -38
+KPX f adieresis -22
+KPX f ae -11
+KPX f aring -38
+KPX f e -55
+KPX f eacute -55
+KPX f f -42
+KPX f i -36
+KPX f j -59
+KPX f l -25
+KPX f o -62
+KPX f oacute -62
+KPX f odieresis -27
+KPX f oe -20
+KPX f oslash -32
+KPX f quoteright -56
+KPX f s -41
+KPX f t -6
+KPX five four -52
+KPX five one -86
+KPX five seven -72
+KPX four four -62
+KPX four one -66
+KPX four seven -93
+KPX g a -10
+KPX g adieresis -10
+KPX g ae 16
+KPX g aring -10
+KPX g e -4
+KPX g eacute -4
+KPX g l -33
+KPX g oacute -8
+KPX g odieresis -8
+KPX g r 0
+KPX guillemotright A -43
+KPX guillemotright AE -39
+KPX guillemotright Aacute -43
+KPX guillemotright Adieresis -43
+KPX guillemotright Aring -43
+KPX guillemotright T -121
+KPX guillemotright V -71
+KPX guillemotright W -29
+KPX guillemotright Y -114
+KPX guilsinglright A -43
+KPX guilsinglright AE -39
+KPX guilsinglright Aacute -43
+KPX guilsinglright Adieresis -43
+KPX guilsinglright Aring -43
+KPX guilsinglright T -121
+KPX guilsinglright V -71
+KPX guilsinglright W -29
+KPX guilsinglright Y -114
+KPX h quoteright -49
+KPX h y -32
+KPX hyphen A -26
+KPX hyphen AE -20
+KPX hyphen Aacute -26
+KPX hyphen Adieresis -26
+KPX hyphen Aring -26
+KPX hyphen T -95
+KPX hyphen V -41
+KPX hyphen W -1
+KPX hyphen Y -92
+KPX i T -58
+KPX i j -142
+KPX k a -6
+KPX k aacute -6
+KPX k adieresis -6
+KPX k ae 21
+KPX k aring -6
+KPX k comma -53
+KPX k e -29
+KPX k eacute -29
+KPX k g -38
+KPX k hyphen -99
+KPX k o -30
+KPX k oacute -30
+KPX k odieresis -30
+KPX k period -81
+KPX k s -9
+KPX k u -3
+KPX k udieresis -3
+KPX l v -83
+KPX l y -93
+KPX m p 22
+KPX m v 14
+KPX m w 15
+KPX m y 3
+KPX n T -42
+KPX n p -5
+KPX n quoteright -47
+KPX n v -21
+KPX n w -12
+KPX n y -31
+KPX nine four -51
+KPX nine one -75
+KPX nine seven -66
+KPX o T -85
+KPX o quoteright -39
+KPX o t -22
+KPX o v -21
+KPX o w -6
+KPX o x -26
+KPX o y -31
+KPX oacute v -21
+KPX oacute w -6
+KPX oacute y -31
+KPX ocircumflex t -22
+KPX odieresis t -22
+KPX odieresis v -21
+KPX odieresis w -6
+KPX odieresis x -26
+KPX odieresis y -31
+KPX ograve v -21
+KPX ograve w -6
+KPX ograve y -31
+KPX one comma -91
+KPX one eight -86
+KPX one five -67
+KPX one four -119
+KPX one nine -75
+KPX one one -62
+KPX one period -119
+KPX one seven -141
+KPX one six -111
+KPX one three -61
+KPX one two -47
+KPX one zero -94
+KPX p t -15
+KPX p y -19
+KPX period one -119
+KPX period quotedblright -108
+KPX period quoteright -125
+KPX q c -2
+KPX q u 42
+KPX quotedblbase A -3
+KPX quotedblbase AE -3
+KPX quotedblbase T -78
+KPX quotedblbase V -83
+KPX quotedblbase W -23
+KPX quotedblbase Y -79
+KPX quotedblleft A -59
+KPX quotedblleft AE -52
+KPX quotedblleft Aacute -59
+KPX quotedblleft Adieresis -59
+KPX quotedblleft Aring -59
+KPX quotedblleft T -37
+KPX quotedblleft V -14
+KPX quotedblleft W -3
+KPX quotedblleft Y -35
+KPX quotedblright A -59
+KPX quotedblright AE -68
+KPX quotedblright Aacute -59
+KPX quotedblright Adieresis -59
+KPX quotedblright Aring -59
+KPX quotedblright T -45
+KPX quotedblright V -14
+KPX quotedblright W -20
+KPX quotedblright Y -35
+KPX quoteleft A -80
+KPX quoteleft AE -73
+KPX quoteleft Aacute -80
+KPX quoteleft Adieresis -80
+KPX quoteleft Aring -80
+KPX quoteleft T -59
+KPX quoteleft V -36
+KPX quoteleft W -24
+KPX quoteleft Y -56
+KPX quoteright A -140
+KPX quoteright AE -149
+KPX quoteright Aacute -140
+KPX quoteright Adieresis -140
+KPX quoteright Aring -140
+KPX quoteright comma -196
+KPX quoteright d -126
+KPX quoteright o -131
+KPX quoteright period -220
+KPX quoteright r -145
+KPX quoteright s -140
+KPX quoteright t -114
+KPX quoteright v -108
+KPX quoteright w -105
+KPX quoteright y -118
+KPX r a -20
+KPX r aacute -20
+KPX r acircumflex -20
+KPX r adieresis -20
+KPX r ae 7
+KPX r agrave -20
+KPX r aring -20
+KPX r c -24
+KPX r ccedilla -28
+KPX r colon -81
+KPX r comma -97
+KPX r d -14
+KPX r e -12
+KPX r eacute -12
+KPX r ecircumflex -12
+KPX r egrave -12
+KPX r f -18
+KPX r g -11
+KPX r h -19
+KPX r hyphen -120
+KPX r i -28
+KPX r j -35
+KPX r k -29
+KPX r l -47
+KPX r m 33
+KPX r n 6
+KPX r o -19
+KPX r oacute -19
+KPX r ocircumflex -19
+KPX r odieresis -19
+KPX r oe 18
+KPX r ograve -19
+KPX r oslash -19
+KPX r p 28
+KPX r period -125
+KPX r q -11
+KPX r quoteright -37
+KPX r r -13
+KPX r s -24
+KPX r semicolon -69
+KPX r t 17
+KPX r u 17
+KPX r v 24
+KPX r w 24
+KPX r x 2
+KPX r y 13
+KPX r z -19
+KPX s quoteright -48
+KPX s t -13
+KPX seven colon -148
+KPX seven comma -140
+KPX seven eight -79
+KPX seven five -84
+KPX seven four -111
+KPX seven one -67
+KPX seven period -165
+KPX seven seven -62
+KPX seven six -99
+KPX seven three -72
+KPX seven two -69
+KPX six four -46
+KPX six one -61
+KPX six seven -48
+KPX t S -35
+KPX t a -20
+KPX t aacute -20
+KPX t adieresis -20
+KPX t ae 8
+KPX t aring -20
+KPX t colon -102
+KPX t e -37
+KPX t eacute -37
+KPX t h -7
+KPX t o -39
+KPX t oacute -39
+KPX t odieresis -39
+KPX t quoteright -94
+KPX t semicolon -80
+KPX three four -52
+KPX three one -74
+KPX three seven -67
+KPX two four -92
+KPX two one -66
+KPX two seven -71
+KPX u quoteright -38
+KPX v a -6
+KPX v aacute -6
+KPX v acircumflex -6
+KPX v adieresis -6
+KPX v ae 20
+KPX v agrave -6
+KPX v aring -6
+KPX v atilde -6
+KPX v c -25
+KPX v colon -71
+KPX v comma -113
+KPX v e -13
+KPX v eacute -13
+KPX v ecircumflex -13
+KPX v egrave -13
+KPX v g -11
+KPX v hyphen -24
+KPX v l -82
+KPX v o -21
+KPX v oacute -21
+KPX v odieresis -21
+KPX v ograve -21
+KPX v oslash -21
+KPX v period -139
+KPX v s -19
+KPX v semicolon -62
+KPX w a -6
+KPX w aacute -6
+KPX w acircumflex -6
+KPX w adieresis -6
+KPX w ae 20
+KPX w agrave -6
+KPX w aring -6
+KPX w atilde -6
+KPX w c -10
+KPX w colon -71
+KPX w comma -70
+KPX w e -1
+KPX w eacute -1
+KPX w ecircumflex -1
+KPX w egrave -1
+KPX w g -3
+KPX w hyphen 1
+KPX w l -50
+KPX w o -6
+KPX w oacute -6
+KPX w odieresis -6
+KPX w ograve -6
+KPX w oslash -3
+KPX w period -95
+KPX w s -18
+KPX w semicolon -62
+KPX x a -2
+KPX x c -29
+KPX x e -25
+KPX x eacute -25
+KPX x o -26
+KPX x q -30
+KPX y a -17
+KPX y aacute -17
+KPX y acircumflex -17
+KPX y adieresis -17
+KPX y ae 10
+KPX y agrave -17
+KPX y aring -17
+KPX y atilde -17
+KPX y c -35
+KPX y colon -81
+KPX y comma -117
+KPX y e -24
+KPX y eacute -24
+KPX y ecircumflex -24
+KPX y egrave -24
+KPX y g -21
+KPX y hyphen -24
+KPX y l -93
+KPX y o -31
+KPX y oacute -31
+KPX y odieresis -31
+KPX y ograve -31
+KPX y oslash -31
+KPX y period -144
+KPX y s -30
+KPX y semicolon -72
+KPX zero four -58
+KPX zero one -81
+KPX zero seven -73
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/n022003l.pfb b/Master/xemtex/gsfonts/n022003l.pfb
new file mode 100644
index 00000000000..deedada4833
--- /dev/null
+++ b/Master/xemtex/gsfonts/n022003l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/n022003l.pfm b/Master/xemtex/gsfonts/n022003l.pfm
new file mode 100644
index 00000000000..966b64ac46a
--- /dev/null
+++ b/Master/xemtex/gsfonts/n022003l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/n022004l.afm b/Master/xemtex/gsfonts/n022004l.afm
new file mode 100644
index 00000000000..0e875070fcc
--- /dev/null
+++ b/Master/xemtex/gsfonts/n022004l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName NimbusMonL-Bold
+FullName Nimbus Mono L Bold
+FamilyName Nimbus Mono L
+Weight Bold
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -43 -278 681 871
+CapHeight 583
+XHeight 437
+Descender -205
+Ascender 624
+StartCharMetrics 316
+C 32 ; WX 600 ; N space ; B 375 0 375 0 ;
+C 33 ; WX 600 ; N exclam ; B 220 -15 381 638 ;
+C 34 ; WX 600 ; N quotedbl ; B 136 312 464 602 ;
+C 35 ; WX 600 ; N numbersign ; B 62 -92 538 675 ;
+C 36 ; WX 600 ; N dollar ; B 83 -123 517 684 ;
+C 37 ; WX 600 ; N percent ; B 80 -15 521 617 ;
+C 38 ; WX 600 ; N ampersand ; B 75 -14 508 550 ;
+C 39 ; WX 600 ; N quoteright ; B 147 331 351 623 ;
+C 40 ; WX 600 ; N parenleft ; B 264 -153 488 632 ;
+C 41 ; WX 600 ; N parenright ; B 117 -153 341 632 ;
+C 42 ; WX 600 ; N asterisk ; B 83 208 517 622 ;
+C 43 ; WX 600 ; N plus ; B 42 0 558 560 ;
+C 44 ; WX 600 ; N comma ; B 147 -158 351 134 ;
+C 45 ; WX 600 ; N hyphen ; B 42 229 558 329 ;
+C 46 ; WX 600 ; N period ; B 225 -15 375 117 ;
+C 47 ; WX 600 ; N slash ; B 83 -113 517 695 ;
+C 48 ; WX 600 ; N zero ; B 83 -15 517 638 ;
+C 49 ; WX 600 ; N one ; B 83 0 517 638 ;
+C 50 ; WX 600 ; N two ; B 54 0 508 638 ;
+C 51 ; WX 600 ; N three ; B 66 -15 529 638 ;
+C 52 ; WX 600 ; N four ; B 75 0 508 622 ;
+C 53 ; WX 600 ; N five ; B 66 -15 529 622 ;
+C 54 ; WX 600 ; N six ; B 105 -15 540 638 ;
+C 55 ; WX 600 ; N seven ; B 75 -1 508 622 ;
+C 56 ; WX 600 ; N eight ; B 83 -15 517 638 ;
+C 57 ; WX 600 ; N nine ; B 106 -15 541 638 ;
+C 58 ; WX 600 ; N colon ; B 225 -15 375 437 ;
+C 59 ; WX 600 ; N semicolon ; B 147 -158 351 437 ;
+C 60 ; WX 600 ; N less ; B 42 54 544 501 ;
+C 61 ; WX 600 ; N equal ; B 42 138 558 422 ;
+C 62 ; WX 600 ; N greater ; B 56 53 558 500 ;
+C 63 ; WX 600 ; N question ; B 104 -15 517 598 ;
+C 64 ; WX 600 ; N at ; B 76 -152 509 620 ;
+C 65 ; WX 600 ; N A ; B -21 0 621 583 ;
+C 66 ; WX 600 ; N B ; B 13 0 571 583 ;
+C 67 ; WX 600 ; N C ; B 33 -14 564 597 ;
+C 68 ; WX 600 ; N D ; B 13 0 550 583 ;
+C 69 ; WX 600 ; N E ; B 13 0 550 583 ;
+C 70 ; WX 600 ; N F ; B 13 0 550 583 ;
+C 71 ; WX 600 ; N G ; B 33 -14 592 597 ;
+C 72 ; WX 600 ; N H ; B 23 0 581 583 ;
+C 73 ; WX 600 ; N I ; B 83 0 517 583 ;
+C 74 ; WX 600 ; N J ; B 54 -14 613 583 ;
+C 75 ; WX 600 ; N K ; B 13 0 602 583 ;
+C 76 ; WX 600 ; N L ; B 33 0 571 583 ;
+C 77 ; WX 600 ; N M ; B -19 0 623 584 ;
+C 78 ; WX 600 ; N N ; B -8 0 592 583 ;
+C 79 ; WX 600 ; N O ; B 21 -14 579 597 ;
+C 80 ; WX 600 ; N P ; B 13 0 529 583 ;
+C 81 ; WX 600 ; N Q ; B 21 -145 579 597 ;
+C 82 ; WX 600 ; N R ; B 13 0 619 583 ;
+C 83 ; WX 600 ; N S ; B 62 -14 538 597 ;
+C 84 ; WX 600 ; N T ; B 42 0 558 583 ;
+C 85 ; WX 600 ; N U ; B 10 -14 590 583 ;
+C 86 ; WX 600 ; N V ; B -21 0 621 583 ;
+C 87 ; WX 600 ; N W ; B -10 0 610 583 ;
+C 88 ; WX 600 ; N X ; B 10 0 590 583 ;
+C 89 ; WX 600 ; N Y ; B 21 0 579 583 ;
+C 90 ; WX 600 ; N Z ; B 73 0 527 583 ;
+C 91 ; WX 600 ; N bracketleft ; B 250 -148 475 627 ;
+C 92 ; WX 600 ; N backslash ; B 83 -113 517 695 ;
+C 93 ; WX 600 ; N bracketright ; B 125 -148 350 627 ;
+C 94 ; WX 600 ; N asciicircum ; B 83 325 517 652 ;
+C 95 ; WX 600 ; N underscore ; B -12 -125 612 -75 ;
+C 96 ; WX 600 ; N quoteleft ; B 249 348 453 602 ;
+C 97 ; WX 600 ; N a ; B 42 -16 571 450 ;
+C 98 ; WX 600 ; N b ; B -8 -14 571 624 ;
+C 99 ; WX 600 ; N c ; B 54 -16 565 450 ;
+C 100 ; WX 600 ; N d ; B 33 -14 613 624 ;
+C 101 ; WX 600 ; N e ; B 33 -16 550 450 ;
+C 102 ; WX 600 ; N f ; B 75 0 571 623 ;
+C 103 ; WX 600 ; N g ; B 33 -205 592 451 ;
+C 104 ; WX 600 ; N h ; B 13 0 581 624 ;
+C 105 ; WX 600 ; N i ; B 62 0 538 623 ;
+C 106 ; WX 600 ; N j ; B 117 -205 488 623 ;
+C 107 ; WX 600 ; N k ; B 33 0 571 624 ;
+C 108 ; WX 600 ; N l ; B 62 0 538 624 ;
+C 109 ; WX 600 ; N m ; B -19 0 623 450 ;
+C 110 ; WX 600 ; N n ; B 23 0 571 450 ;
+C 111 ; WX 600 ; N o ; B 42 -16 558 450 ;
+C 112 ; WX 600 ; N p ; B -8 -205 571 450 ;
+C 113 ; WX 600 ; N q ; B 33 -205 613 450 ;
+C 114 ; WX 600 ; N r ; B 54 0 571 449 ;
+C 115 ; WX 600 ; N s ; B 73 -16 527 450 ;
+C 116 ; WX 600 ; N t ; B 13 -16 529 591 ;
+C 117 ; WX 600 ; N u ; B 13 -13 571 437 ;
+C 118 ; WX 600 ; N v ; B 0 0 600 437 ;
+C 119 ; WX 600 ; N w ; B 0 0 600 437 ;
+C 120 ; WX 600 ; N x ; B 21 0 579 437 ;
+C 121 ; WX 600 ; N y ; B 21 -205 579 437 ;
+C 122 ; WX 600 ; N z ; B 85 0 519 437 ;
+C 123 ; WX 600 ; N braceleft ; B 167 -153 433 623 ;
+C 124 ; WX 600 ; N bar ; B 250 -153 350 622 ;
+C 125 ; WX 600 ; N braceright ; B 167 -153 433 623 ;
+C 126 ; WX 600 ; N asciitilde ; B 62 179 538 385 ;
+C 161 ; WX 600 ; N exclamdown ; B 220 -227 381 426 ;
+C 162 ; WX 600 ; N cent ; B 83 -44 499 661 ;
+C 163 ; WX 600 ; N sterling ; B 33 0 550 598 ;
+C 164 ; WX 600 ; N fraction ; B 21 102 580 500 ;
+C 165 ; WX 600 ; N yen ; B 21 0 579 580 ;
+C 166 ; WX 600 ; N florin ; B 57 -123 548 638 ;
+C 167 ; WX 600 ; N section ; B 36 -170 564 583 ;
+C 168 ; WX 600 ; N currency ; B 73 64 527 519 ;
+C 169 ; WX 600 ; N quotesingle ; B 236 312 364 602 ;
+C 170 ; WX 600 ; N quotedblleft ; B 98 348 502 602 ;
+C 171 ; WX 600 ; N guillemotleft ; B 33 20 571 415 ;
+C 172 ; WX 600 ; N guilsinglleft ; B 33 20 342 415 ;
+C 173 ; WX 600 ; N guilsinglright ; B 263 20 571 415 ;
+C 174 ; WX 600 ; N fi ; B -14 0 619 624 ;
+C 175 ; WX 600 ; N fl ; B -17 0 617 623 ;
+C 177 ; WX 600 ; N endash ; B 42 229 558 329 ;
+C 178 ; WX 600 ; N dagger ; B 94 -92 506 622 ;
+C 179 ; WX 600 ; N daggerdbl ; B 94 -92 506 622 ;
+C 180 ; WX 600 ; N periodcentered ; B 225 214 375 346 ;
+C 182 ; WX 600 ; N paragraph ; B 49 -174 558 583 ;
+C 183 ; WX 600 ; N bullet ; B 150 154 449 453 ;
+C 184 ; WX 600 ; N quotesinglbase ; B 147 -158 351 134 ;
+C 185 ; WX 600 ; N quotedblbase ; B 87 -120 491 134 ;
+C 186 ; WX 600 ; N quotedblright ; B 87 348 491 602 ;
+C 187 ; WX 600 ; N guillemotright ; B 33 20 571 415 ;
+C 188 ; WX 600 ; N ellipsis ; B 25 -15 575 117 ;
+C 189 ; WX 600 ; N perthousand ; B 0 0 600 618 ;
+C 191 ; WX 600 ; N questiondown ; B 83 -227 496 386 ;
+C 193 ; WX 600 ; N grave ; B 125 496 350 696 ;
+C 194 ; WX 600 ; N acute ; B 250 496 475 696 ;
+C 195 ; WX 600 ; N circumflex ; B 125 497 476 696 ;
+C 196 ; WX 600 ; N tilde ; B 115 523 485 656 ;
+C 197 ; WX 600 ; N macron ; B 125 546 475 626 ;
+C 198 ; WX 600 ; N breve ; B 125 503 475 687 ;
+C 199 ; WX 600 ; N dotaccent ; B 240 534 360 654 ;
+C 200 ; WX 600 ; N dieresis ; B 136 534 464 654 ;
+C 202 ; WX 600 ; N ring ; B 177 486 423 727 ;
+C 203 ; WX 600 ; N cedilla ; B 180 -229 407 0 ;
+C 205 ; WX 600 ; N hungarumlaut ; B 125 496 475 694 ;
+C 206 ; WX 600 ; N ogonek ; B 250 -208 463 0 ;
+C 207 ; WX 600 ; N caron ; B 125 497 476 696 ;
+C 208 ; WX 600 ; N emdash ; B -29 229 629 329 ;
+C 225 ; WX 600 ; N AE ; B -20 0 614 583 ;
+C 227 ; WX 600 ; N ordfeminine ; B 118 182 489 595 ;
+C 232 ; WX 600 ; N Lslash ; B 12 0 571 583 ;
+C 233 ; WX 600 ; N Oslash ; B 9 -70 590 638 ;
+C 234 ; WX 600 ; N OE ; B -20 0 612 583 ;
+C 235 ; WX 600 ; N ordmasculine ; B 122 182 480 595 ;
+C 241 ; WX 600 ; N ae ; B -13 -16 612 450 ;
+C 245 ; WX 600 ; N dotlessi ; B 62 0 538 437 ;
+C 248 ; WX 600 ; N lslash ; B 62 0 538 624 ;
+C 249 ; WX 600 ; N oslash ; B 23 -70 573 494 ;
+C 250 ; WX 600 ; N oe ; B -11 -16 613 450 ;
+C 251 ; WX 600 ; N germandbls ; B 13 -16 529 623 ;
+C -1 ; WX 600 ; N Udieresis ; B 10 -14 590 798 ;
+C -1 ; WX 600 ; N Uacute ; B 10 -14 590 839 ;
+C -1 ; WX 600 ; N Scedilla ; B 62 -229 538 597 ;
+C -1 ; WX 600 ; N Tcaron ; B 42 0 558 839 ;
+C -1 ; WX 600 ; N Scaron ; B 62 -14 538 839 ;
+C -1 ; WX 600 ; N Rcaron ; B 13 0 619 839 ;
+C -1 ; WX 600 ; N Racute ; B 13 0 619 839 ;
+C -1 ; WX 600 ; N Sacute ; B 62 -14 538 839 ;
+C -1 ; WX 600 ; N Otilde ; B 21 -14 579 799 ;
+C -1 ; WX 600 ; N ucircumflex ; B 13 -13 571 696 ;
+C -1 ; WX 600 ; N Ohungarumlaut ; B 21 -14 579 838 ;
+C -1 ; WX 600 ; N Uhungarumlaut ; B 10 -14 590 838 ;
+C -1 ; WX 600 ; N Yacute ; B 21 0 579 839 ;
+C -1 ; WX 600 ; N Eth ; B 0 0 550 583 ;
+C -1 ; WX 600 ; N Dcroat ; B 0 0 550 583 ;
+C -1 ; WX 600 ; N Zacute ; B 73 0 527 839 ;
+C -1 ; WX 600 ; N Uring ; B 10 -14 590 871 ;
+C -1 ; WX 600 ; N gbreve ; B 33 -205 592 687 ;
+C -1 ; WX 600 ; N eogonek ; B 33 -208 550 450 ;
+C -1 ; WX 600 ; N edotaccent ; B 33 -16 550 654 ;
+C -1 ; WX 600 ; N ecaron ; B 33 -16 550 696 ;
+C -1 ; WX 600 ; N Ugrave ; B 10 -14 590 839 ;
+C -1 ; WX 600 ; N Thorn ; B 14 0 523 583 ;
+C -1 ; WX 600 ; N eacute ; B 33 -16 550 696 ;
+C -1 ; WX 600 ; N edieresis ; B 33 -16 550 654 ;
+C -1 ; WX 600 ; N dcaron ; B 33 -14 681 637 ;
+C -1 ; WX 600 ; N ccedilla ; B 54 -229 565 450 ;
+C -1 ; WX 600 ; N ccaron ; B 54 -16 565 696 ;
+C -1 ; WX 600 ; N cacute ; B 54 -16 565 696 ;
+C -1 ; WX 600 ; N aogonek ; B 42 -208 580 450 ;
+C -1 ; WX 600 ; N aring ; B 42 -16 571 727 ;
+C -1 ; WX 600 ; N atilde ; B 42 -16 571 656 ;
+C -1 ; WX 600 ; N abreve ; B 42 -16 571 687 ;
+C -1 ; WX 600 ; N egrave ; B 33 -16 550 696 ;
+C -1 ; WX 600 ; N agrave ; B 42 -16 571 696 ;
+C -1 ; WX 600 ; N aacute ; B 42 -16 571 696 ;
+C -1 ; WX 600 ; N adieresis ; B 42 -16 571 654 ;
+C -1 ; WX 600 ; N Uogonek ; B 10 -208 590 583 ;
+C -1 ; WX 600 ; N ugrave ; B 13 -13 571 696 ;
+C -1 ; WX 600 ; N uacute ; B 13 -13 571 696 ;
+C -1 ; WX 600 ; N udieresis ; B 13 -13 571 654 ;
+C -1 ; WX 600 ; N tcaron ; B 13 -16 530 637 ;
+C -1 ; WX 600 ; N scommaaccent ; B 73 -278 527 450 ;
+C -1 ; WX 600 ; N Zcaron ; B 73 0 527 839 ;
+C -1 ; WX 600 ; N ecircumflex ; B 33 -16 550 696 ;
+C -1 ; WX 600 ; N Ucircumflex ; B 10 -14 590 839 ;
+C -1 ; WX 600 ; N acircumflex ; B 42 -16 571 696 ;
+C -1 ; WX 600 ; N Zdotaccent ; B 73 0 527 798 ;
+C -1 ; WX 600 ; N scaron ; B 73 -16 527 696 ;
+C -1 ; WX 600 ; N Amacron ; B -21 0 621 769 ;
+C -1 ; WX 600 ; N sacute ; B 73 -16 527 696 ;
+C -1 ; WX 600 ; N Tcommaaccent ; B 42 -278 558 583 ;
+C -1 ; WX 600 ; N Ydieresis ; B 21 0 579 798 ;
+C -1 ; WX 600 ; N thorn ; B -8 -205 571 624 ;
+C -1 ; WX 600 ; N Emacron ; B 13 0 550 769 ;
+C -1 ; WX 600 ; N Ograve ; B 21 -14 579 839 ;
+C -1 ; WX 600 ; N Oacute ; B 21 -14 579 839 ;
+C -1 ; WX 600 ; N Odieresis ; B 21 -14 579 798 ;
+C -1 ; WX 600 ; N Ntilde ; B -8 0 592 799 ;
+C -1 ; WX 600 ; N Ncaron ; B -8 0 592 839 ;
+C -1 ; WX 600 ; N Nacute ; B -8 0 592 839 ;
+C -1 ; WX 600 ; N Lcaron ; B 33 0 571 598 ;
+C -1 ; WX 600 ; N Lacute ; B 33 0 571 839 ;
+C -1 ; WX 600 ; N Idotaccent ; B 83 0 517 798 ;
+C -1 ; WX 600 ; N racute ; B 54 0 571 696 ;
+C -1 ; WX 600 ; N Icircumflex ; B 83 0 517 839 ;
+C -1 ; WX 600 ; N ohungarumlaut ; B 42 -16 558 694 ;
+C -1 ; WX 600 ; N otilde ; B 42 -16 558 656 ;
+C -1 ; WX 600 ; N Euro ; B 4 -14 538 597 ;
+C -1 ; WX 600 ; N ocircumflex ; B 42 -16 558 696 ;
+C -1 ; WX 600 ; N onesuperior ; B 166 247 434 638 ;
+C -1 ; WX 600 ; N twosuperior ; B 149 247 429 637 ;
+C -1 ; WX 600 ; N threesuperior ; B 157 238 442 637 ;
+C -1 ; WX 600 ; N Igrave ; B 83 0 517 839 ;
+C -1 ; WX 600 ; N Iacute ; B 83 0 517 839 ;
+C -1 ; WX 600 ; N Imacron ; B 83 0 517 769 ;
+C -1 ; WX 600 ; N Iogonek ; B 83 -208 517 583 ;
+C -1 ; WX 600 ; N Idieresis ; B 83 0 517 798 ;
+C -1 ; WX 600 ; N Gbreve ; B 33 -14 592 831 ;
+C -1 ; WX 600 ; N Umacron ; B 10 -14 590 769 ;
+C -1 ; WX 600 ; N Kcommaaccent ; B 13 -278 602 583 ;
+C -1 ; WX 600 ; N ograve ; B 42 -16 558 696 ;
+C -1 ; WX 600 ; N Scommaaccent ; B 62 -278 538 597 ;
+C -1 ; WX 600 ; N Eogonek ; B 13 -208 587 583 ;
+C -1 ; WX 600 ; N oacute ; B 42 -16 558 696 ;
+C -1 ; WX 600 ; N Edotaccent ; B 13 0 550 798 ;
+C -1 ; WX 600 ; N iogonek ; B 62 -208 540 623 ;
+C -1 ; WX 600 ; N gcommaaccent ; B 33 -205 592 721 ;
+C -1 ; WX 600 ; N odieresis ; B 42 -16 558 654 ;
+C -1 ; WX 600 ; N ntilde ; B 23 0 571 656 ;
+C -1 ; WX 600 ; N ncaron ; B 23 0 571 696 ;
+C -1 ; WX 600 ; N Ecaron ; B 13 0 550 839 ;
+C -1 ; WX 600 ; N Ecircumflex ; B 13 0 550 839 ;
+C -1 ; WX 600 ; N scedilla ; B 73 -229 527 450 ;
+C -1 ; WX 600 ; N rcaron ; B 54 0 571 696 ;
+C -1 ; WX 600 ; N Egrave ; B 13 0 550 839 ;
+C -1 ; WX 600 ; N Eacute ; B 13 0 550 839 ;
+C -1 ; WX 600 ; N Gcommaaccent ; B 33 -278 592 597 ;
+C -1 ; WX 600 ; N Rcommaaccent ; B 13 -278 619 583 ;
+C -1 ; WX 600 ; N Edieresis ; B 13 0 550 798 ;
+C -1 ; WX 600 ; N nacute ; B 23 0 571 696 ;
+C -1 ; WX 600 ; N uogonek ; B 13 -208 571 437 ;
+C -1 ; WX 600 ; N umacron ; B 13 -13 571 626 ;
+C -1 ; WX 600 ; N Dcaron ; B 13 0 550 839 ;
+C -1 ; WX 600 ; N lcaron ; B 62 0 538 637 ;
+C -1 ; WX 600 ; N Ccaron ; B 33 -14 564 839 ;
+C -1 ; WX 600 ; N Cacute ; B 33 -14 564 839 ;
+C -1 ; WX 600 ; N Ccedilla ; B 33 -229 564 597 ;
+C -1 ; WX 600 ; N degree ; B 125 243 475 596 ;
+C -1 ; WX 600 ; N Aogonek ; B -21 -208 621 583 ;
+C -1 ; WX 600 ; N minus ; B 42 230 558 330 ;
+C -1 ; WX 600 ; N multiply ; B 100 80 500 480 ;
+C -1 ; WX 600 ; N divide ; B 42 28 558 532 ;
+C -1 ; WX 600 ; N Aring ; B -21 0 621 871 ;
+C -1 ; WX 600 ; N trademark ; B -33 220 620 583 ;
+C -1 ; WX 600 ; N rcommaaccent ; B 54 -278 571 449 ;
+C -1 ; WX 600 ; N lacute ; B 62 0 538 840 ;
+C -1 ; WX 600 ; N omacron ; B 42 -16 558 626 ;
+C -1 ; WX 600 ; N Atilde ; B -21 0 621 799 ;
+C -1 ; WX 600 ; N icircumflex ; B 62 0 538 696 ;
+C -1 ; WX 600 ; N igrave ; B 62 0 538 696 ;
+C -1 ; WX 600 ; N ncommaaccent ; B 23 -278 571 450 ;
+C -1 ; WX 600 ; N lcommaaccent ; B 62 -278 538 624 ;
+C -1 ; WX 600 ; N plusminus ; B 42 0 558 624 ;
+C -1 ; WX 600 ; N onehalf ; B -34 0 629 638 ;
+C -1 ; WX 600 ; N onequarter ; B -34 0 629 638 ;
+C -1 ; WX 600 ; N threequarters ; B -43 0 630 637 ;
+C -1 ; WX 600 ; N iacute ; B 62 0 538 696 ;
+C -1 ; WX 600 ; N Abreve ; B -21 0 621 831 ;
+C -1 ; WX 600 ; N kcommaaccent ; B 33 -278 571 624 ;
+C -1 ; WX 600 ; N Omacron ; B 21 -14 579 769 ;
+C -1 ; WX 600 ; N imacron ; B 62 0 538 626 ;
+C -1 ; WX 600 ; N emacron ; B 33 -16 550 626 ;
+C -1 ; WX 600 ; N amacron ; B 42 -16 571 626 ;
+C -1 ; WX 600 ; N tcommaaccent ; B 13 -278 529 591 ;
+C -1 ; WX 600 ; N ydieresis ; B 21 -205 579 654 ;
+C -1 ; WX 600 ; N zdotaccent ; B 85 0 519 654 ;
+C -1 ; WX 600 ; N zcaron ; B 85 0 519 696 ;
+C -1 ; WX 600 ; N zacute ; B 85 0 519 696 ;
+C -1 ; WX 600 ; N yacute ; B 21 -205 579 696 ;
+C -1 ; WX 600 ; N uhungarumlaut ; B 13 -13 571 694 ;
+C -1 ; WX 600 ; N eth ; B 42 -16 558 646 ;
+C -1 ; WX 600 ; N uring ; B 13 -13 571 727 ;
+C -1 ; WX 600 ; N Ocircumflex ; B 21 -14 579 839 ;
+C -1 ; WX 600 ; N commaaccent ; B 183 -278 351 -59 ;
+C -1 ; WX 600 ; N copyright ; B -7 -15 606 598 ;
+C -1 ; WX 600 ; N registered ; B -7 -15 606 598 ;
+C -1 ; WX 600 ; N Acircumflex ; B -21 0 621 839 ;
+C -1 ; WX 600 ; N idieresis ; B 62 0 538 654 ;
+C -1 ; WX 600 ; N lozenge ; B 72 -19 529 593 ;
+C -1 ; WX 600 ; N Delta ; B 15 0 585 583 ;
+C -1 ; WX 600 ; N notequal ; B 42 22 558 525 ;
+C -1 ; WX 600 ; N radical ; B 12 -60 642 697 ;
+C -1 ; WX 600 ; N Agrave ; B -21 0 621 839 ;
+C -1 ; WX 600 ; N Aacute ; B -21 0 621 839 ;
+C -1 ; WX 600 ; N lessequal ; B 3 0 549 591 ;
+C -1 ; WX 600 ; N greaterequal ; B 35 0 582 591 ;
+C -1 ; WX 600 ; N logicalnot ; B 42 115 465 445 ;
+C -1 ; WX 600 ; N summation ; B 45 -97 538 671 ;
+C -1 ; WX 600 ; N partialdiff ; B 102 -16 524 590 ;
+C -1 ; WX 600 ; N Ncommaaccent ; B -8 -278 592 583 ;
+C -1 ; WX 600 ; N dcroat ; B 33 -16 613 624 ;
+C -1 ; WX 600 ; N brokenbar ; B 250 -153 350 622 ;
+C -1 ; WX 600 ; N Lcommaaccent ; B 33 -278 571 583 ;
+C -1 ; WX 600 ; N Adieresis ; B -21 0 621 798 ;
+C -1 ; WX 600 ; N mu ; B 13 -153 571 437 ;
+C -1 ; WX 600 ; N .notdef ; B 375 0 375 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -14
+KPX A Ccedilla -22
+KPX A G -10
+KPX A O -15
+KPX A Odieresis -15
+KPX A Q -16
+KPX A T -27
+KPX A U -23
+KPX A Uacute -23
+KPX A Ucircumflex -23
+KPX A Udieresis -23
+KPX A Ugrave -23
+KPX A V -59
+KPX A W -13
+KPX A Y -27
+KPX A a 15
+KPX A b 45
+KPX A c -4
+KPX A ccedilla -8
+KPX A comma -47
+KPX A d 4
+KPX A e 2
+KPX A g 0
+KPX A guillemotleft -40
+KPX A guilsinglleft -40
+KPX A hyphen -19
+KPX A o -3
+KPX A period -62
+KPX A q -4
+KPX A quotedblright -84
+KPX A quoteright -113
+KPX A t -20
+KPX A u -12
+KPX A v -39
+KPX A w -13
+KPX A y -39
+KPX Aacute C -14
+KPX Aacute G -10
+KPX Aacute O -15
+KPX Aacute Q -16
+KPX Aacute T -27
+KPX Aacute U -23
+KPX Aacute V -59
+KPX Aacute W -13
+KPX Aacute Y -27
+KPX Aacute a 15
+KPX Aacute b 45
+KPX Aacute c -4
+KPX Aacute comma -47
+KPX Aacute d 4
+KPX Aacute e 2
+KPX Aacute g 0
+KPX Aacute guillemotleft -40
+KPX Aacute guilsinglleft -40
+KPX Aacute hyphen -19
+KPX Aacute o -3
+KPX Aacute period -62
+KPX Aacute q -4
+KPX Aacute quoteright -113
+KPX Aacute t -20
+KPX Aacute u -12
+KPX Aacute v -39
+KPX Aacute w -13
+KPX Aacute y -39
+KPX Acircumflex C -14
+KPX Acircumflex G -10
+KPX Acircumflex O -15
+KPX Acircumflex Q -16
+KPX Acircumflex T -27
+KPX Acircumflex U -23
+KPX Acircumflex V -59
+KPX Acircumflex W -13
+KPX Acircumflex Y -27
+KPX Acircumflex comma -47
+KPX Acircumflex period -62
+KPX Adieresis C -14
+KPX Adieresis G -10
+KPX Adieresis O -15
+KPX Adieresis Q -16
+KPX Adieresis T -27
+KPX Adieresis U -23
+KPX Adieresis V -59
+KPX Adieresis W -13
+KPX Adieresis Y -27
+KPX Adieresis a 15
+KPX Adieresis b 45
+KPX Adieresis c -4
+KPX Adieresis comma -47
+KPX Adieresis d 4
+KPX Adieresis g 0
+KPX Adieresis guillemotleft -40
+KPX Adieresis guilsinglleft -40
+KPX Adieresis hyphen -19
+KPX Adieresis o -3
+KPX Adieresis period -62
+KPX Adieresis q -4
+KPX Adieresis quotedblright -84
+KPX Adieresis quoteright -113
+KPX Adieresis t -20
+KPX Adieresis u -12
+KPX Adieresis v -39
+KPX Adieresis w -13
+KPX Adieresis y -39
+KPX Agrave C -14
+KPX Agrave G -10
+KPX Agrave O -15
+KPX Agrave Q -16
+KPX Agrave T -27
+KPX Agrave U -23
+KPX Agrave V -59
+KPX Agrave W -13
+KPX Agrave Y -27
+KPX Agrave comma -47
+KPX Agrave period -62
+KPX Aring C -14
+KPX Aring G -10
+KPX Aring O -15
+KPX Aring Q -16
+KPX Aring T -27
+KPX Aring U -23
+KPX Aring V -59
+KPX Aring W -13
+KPX Aring Y -27
+KPX Aring a 15
+KPX Aring b 45
+KPX Aring c -4
+KPX Aring comma -47
+KPX Aring d 4
+KPX Aring e 2
+KPX Aring g 0
+KPX Aring guillemotleft -40
+KPX Aring guilsinglleft -40
+KPX Aring hyphen -19
+KPX Aring o -3
+KPX Aring period -62
+KPX Aring q -4
+KPX Aring quotedblright -84
+KPX Aring quoteright -113
+KPX Aring t -20
+KPX Aring u -12
+KPX Aring v -39
+KPX Aring w -13
+KPX Aring y -39
+KPX Atilde C -14
+KPX Atilde G -10
+KPX Atilde O -15
+KPX Atilde Q -16
+KPX Atilde T -27
+KPX Atilde U -23
+KPX Atilde V -59
+KPX Atilde W -13
+KPX Atilde Y -27
+KPX Atilde comma -47
+KPX Atilde period -62
+KPX B A 4
+KPX B AE 3
+KPX B Aacute 4
+KPX B Acircumflex 4
+KPX B Adieresis 4
+KPX B Aring 4
+KPX B Atilde 4
+KPX B O -9
+KPX B OE 11
+KPX B Oacute -9
+KPX B Ocircumflex -9
+KPX B Odieresis -9
+KPX B Ograve -9
+KPX B Oslash -5
+KPX B V -18
+KPX B W -6
+KPX B Y -39
+KPX C A 8
+KPX C AE 7
+KPX C Aacute 8
+KPX C Adieresis 8
+KPX C Aring 8
+KPX C H -13
+KPX C K -8
+KPX C O -14
+KPX C Oacute -14
+KPX C Odieresis -14
+KPX Ccedilla A 3
+KPX D A -25
+KPX D Aacute -25
+KPX D Acircumflex -25
+KPX D Adieresis -25
+KPX D Agrave -25
+KPX D Aring -25
+KPX D Atilde -25
+KPX D J -32
+KPX D T -27
+KPX D V -30
+KPX D W -13
+KPX D X -37
+KPX D Y -51
+KPX F A -39
+KPX F Aacute -39
+KPX F Acircumflex -39
+KPX F Adieresis -39
+KPX F Agrave -39
+KPX F Aring -39
+KPX F Atilde -39
+KPX F J -78
+KPX F O -24
+KPX F Odieresis -24
+KPX F a -40
+KPX F aacute -40
+KPX F adieresis -40
+KPX F ae -18
+KPX F aring -40
+KPX F comma -168
+KPX F e -47
+KPX F eacute -47
+KPX F hyphen -55
+KPX F i -46
+KPX F j -54
+KPX F o -51
+KPX F oacute -51
+KPX F odieresis -51
+KPX F oe -16
+KPX F oslash -51
+KPX F period -187
+KPX F r -32
+KPX F u -1
+KPX G A 6
+KPX G AE 5
+KPX G Aacute 6
+KPX G Acircumflex 6
+KPX G Adieresis 6
+KPX G Agrave 6
+KPX G Aring 6
+KPX G Atilde 6
+KPX G T -25
+KPX G V 6
+KPX G W 6
+KPX G Y -14
+KPX J A -8
+KPX J AE -16
+KPX J Adieresis -8
+KPX J Aring -8
+KPX K C -24
+KPX K G -19
+KPX K O -25
+KPX K OE -4
+KPX K Oacute -25
+KPX K Odieresis -25
+KPX K S -9
+KPX K T -13
+KPX K a 6
+KPX K adieresis 6
+KPX K ae 31
+KPX K aring 6
+KPX K e -6
+KPX K hyphen -44
+KPX K o -12
+KPX K oacute -12
+KPX K odieresis -12
+KPX K u -22
+KPX K udieresis -22
+KPX K y -50
+KPX L A 16
+KPX L AE 16
+KPX L Aacute 16
+KPX L Adieresis 16
+KPX L Aring 16
+KPX L C -10
+KPX L Ccedilla -11
+KPX L G -10
+KPX L O -7
+KPX L Oacute -7
+KPX L Ocircumflex -7
+KPX L Odieresis -7
+KPX L Ograve -7
+KPX L Otilde -7
+KPX L S -24
+KPX L T -52
+KPX L U -29
+KPX L Udieresis -29
+KPX L V -57
+KPX L W -22
+KPX L Y -52
+KPX L hyphen 9
+KPX L quotedblright -72
+KPX L quoteright -99
+KPX L u -10
+KPX L udieresis -11
+KPX L y -33
+KPX N A -3
+KPX N AE -3
+KPX N Aacute -3
+KPX N Adieresis -3
+KPX N Aring -3
+KPX N C -7
+KPX N Ccedilla -6
+KPX N G -6
+KPX N O -5
+KPX N Oacute -5
+KPX N Odieresis -5
+KPX N a -11
+KPX N aacute -11
+KPX N adieresis -11
+KPX N ae 18
+KPX N aring -11
+KPX N comma -75
+KPX N e -3
+KPX N eacute -3
+KPX N o -8
+KPX N oacute -8
+KPX N odieresis -8
+KPX N oslash -3
+KPX N period -93
+KPX N u -8
+KPX N udieresis -8
+KPX O A -14
+KPX O AE -14
+KPX O Aacute -14
+KPX O Adieresis -14
+KPX O Aring -14
+KPX O T -15
+KPX O V -23
+KPX O W -2
+KPX O X -26
+KPX O Y -43
+KPX Oacute A -14
+KPX Oacute T -15
+KPX Oacute V -23
+KPX Oacute W -2
+KPX Oacute Y -43
+KPX Ocircumflex T -15
+KPX Ocircumflex V -23
+KPX Ocircumflex Y -43
+KPX Odieresis A -14
+KPX Odieresis T -15
+KPX Odieresis V -23
+KPX Odieresis W -2
+KPX Odieresis X -26
+KPX Odieresis Y -43
+KPX Ograve T -15
+KPX Ograve V -23
+KPX Ograve Y -43
+KPX Oslash A -10
+KPX Otilde T -15
+KPX Otilde V -23
+KPX Otilde Y -43
+KPX P A -61
+KPX P AE -59
+KPX P Aacute -61
+KPX P Adieresis -61
+KPX P Aring -61
+KPX P J -73
+KPX P a -49
+KPX P aacute -49
+KPX P adieresis -49
+KPX P ae -27
+KPX P aring -49
+KPX P comma -160
+KPX P e -38
+KPX P eacute -38
+KPX P hyphen -33
+KPX P o -42
+KPX P oacute -42
+KPX P odieresis -42
+KPX P oe -13
+KPX P oslash -42
+KPX P period -178
+KPX R C -14
+KPX R Ccedilla -17
+KPX R G -10
+KPX R O -14
+KPX R OE 5
+KPX R Oacute -14
+KPX R Odieresis -14
+KPX R T -28
+KPX R U -16
+KPX R Udieresis -17
+KPX R V -24
+KPX R W -8
+KPX R Y -28
+KPX R a 14
+KPX R aacute 14
+KPX R adieresis 14
+KPX R ae 40
+KPX R aring 14
+KPX R e 2
+KPX R eacute 2
+KPX R hyphen -25
+KPX R o -3
+KPX R oacute -3
+KPX R odieresis -3
+KPX R oe 29
+KPX R u -7
+KPX R uacute -8
+KPX R udieresis -8
+KPX R y -18
+KPX S A -10
+KPX S AE -10
+KPX S Aacute -10
+KPX S Adieresis -10
+KPX S Aring -10
+KPX S T -41
+KPX S V -10
+KPX S W -12
+KPX S Y -31
+KPX S t -17
+KPX T A -28
+KPX T AE -28
+KPX T Aacute -28
+KPX T Acircumflex -28
+KPX T Adieresis -28
+KPX T Agrave -28
+KPX T Aring -28
+KPX T Atilde -28
+KPX T C -19
+KPX T G -19
+KPX T J -65
+KPX T O -14
+KPX T OE 6
+KPX T Oacute -14
+KPX T Ocircumflex -14
+KPX T Odieresis -14
+KPX T Ograve -14
+KPX T Oslash -14
+KPX T Otilde -14
+KPX T S -41
+KPX T V 10
+KPX T W 4
+KPX T Y -10
+KPX T a -34
+KPX T ae -12
+KPX T c -37
+KPX T colon -112
+KPX T comma -130
+KPX T e -26
+KPX T g -24
+KPX T guillemotleft -73
+KPX T guilsinglleft -73
+KPX T hyphen -91
+KPX T i -42
+KPX T j -49
+KPX T o -31
+KPX T oslash -31
+KPX T period -148
+KPX T r -28
+KPX T s -39
+KPX T semicolon -100
+KPX T u 4
+KPX T v 10
+KPX T w 10
+KPX T y 0
+KPX U A -19
+KPX U AE -18
+KPX U Aacute -19
+KPX U Acircumflex -19
+KPX U Adieresis -19
+KPX U Aring -19
+KPX U Atilde -19
+KPX U comma -95
+KPX U m 16
+KPX U n -8
+KPX U p 0
+KPX U period -114
+KPX U r -34
+KPX Uacute A -19
+KPX Uacute comma -95
+KPX Uacute m 16
+KPX Uacute n -8
+KPX Uacute p 0
+KPX Uacute period -114
+KPX Uacute r -34
+KPX Ucircumflex A -19
+KPX Udieresis A -19
+KPX Udieresis b 27
+KPX Udieresis comma -95
+KPX Udieresis m 16
+KPX Udieresis n -8
+KPX Udieresis p 0
+KPX Udieresis period -114
+KPX Udieresis r -34
+KPX Ugrave A -19
+KPX V A -4
+KPX V AE -12
+KPX V Aacute -4
+KPX V Acircumflex -4
+KPX V Adieresis -4
+KPX V Agrave -4
+KPX V Aring -4
+KPX V Atilde -4
+KPX V C -24
+KPX V G -24
+KPX V O -23
+KPX V Oacute -23
+KPX V Ocircumflex -23
+KPX V Odieresis -23
+KPX V Ograve -23
+KPX V Oslash -23
+KPX V Otilde -23
+KPX V S -27
+KPX V T 10
+KPX V a -54
+KPX V ae -27
+KPX V colon -132
+KPX V comma -146
+KPX V e -47
+KPX V g -46
+KPX V guillemotleft -75
+KPX V guilsinglleft -75
+KPX V hyphen -39
+KPX V i -59
+KPX V o -52
+KPX V oslash -48
+KPX V period -164
+KPX V r -45
+KPX V semicolon -120
+KPX V u -15
+KPX V y -17
+KPX W A -9
+KPX W AE -9
+KPX W Aacute -9
+KPX W Acircumflex -9
+KPX W Adieresis -9
+KPX W Agrave -9
+KPX W Aring -9
+KPX W Atilde -9
+KPX W C -4
+KPX W G -3
+KPX W O -2
+KPX W Oacute -2
+KPX W Ocircumflex -2
+KPX W Odieresis -2
+KPX W Ograve -2
+KPX W Oslash 2
+KPX W Otilde -2
+KPX W S -17
+KPX W T 4
+KPX W a -11
+KPX W ae 17
+KPX W colon -99
+KPX W comma -83
+KPX W e -3
+KPX W g -3
+KPX W guillemotleft -31
+KPX W guilsinglleft -31
+KPX W hyphen 1
+KPX W i -38
+KPX W o -8
+KPX W oslash -4
+KPX W period -101
+KPX W r -25
+KPX W semicolon -82
+KPX W u 1
+KPX W y -2
+KPX X C -28
+KPX X O -26
+KPX X Odieresis -26
+KPX X Q -26
+KPX X a 0
+KPX X e -12
+KPX X hyphen -50
+KPX X o -18
+KPX X u -28
+KPX X y -43
+KPX Y A -25
+KPX Y AE -28
+KPX Y Aacute -25
+KPX Y Acircumflex -25
+KPX Y Adieresis -25
+KPX Y Agrave -25
+KPX Y Aring -25
+KPX Y Atilde -25
+KPX Y C -45
+KPX Y G -45
+KPX Y O -44
+KPX Y Oacute -44
+KPX Y Ocircumflex -44
+KPX Y Odieresis -44
+KPX Y Ograve -44
+KPX Y Oslash -43
+KPX Y Otilde -44
+KPX Y S -48
+KPX Y T -10
+KPX Y a -53
+KPX Y ae -28
+KPX Y colon -150
+KPX Y comma -118
+KPX Y e -59
+KPX Y g -59
+KPX Y guillemotleft -94
+KPX Y guilsinglleft -94
+KPX Y hyphen -81
+KPX Y i -58
+KPX Y o -64
+KPX Y oslash -51
+KPX Y p -30
+KPX Y period -136
+KPX Y semicolon -133
+KPX Y u -43
+KPX Y v -33
+KPX Z v -41
+KPX Z y -52
+KPX a j -81
+KPX a quoteright -78
+KPX a v -21
+KPX a w -12
+KPX a y -31
+KPX aacute v -21
+KPX aacute w -12
+KPX aacute y -31
+KPX adieresis v -21
+KPX adieresis w -12
+KPX adieresis y -31
+KPX ae v 28
+KPX ae w 32
+KPX ae y 18
+KPX agrave v -21
+KPX agrave w -12
+KPX agrave y -31
+KPX aring v -21
+KPX aring w -12
+KPX aring y -31
+KPX b v 0
+KPX b w 4
+KPX b y -10
+KPX c h 11
+KPX c k 6
+KPX comma one -128
+KPX comma quotedblright -137
+KPX comma quoteright -166
+KPX e quoteright -65
+KPX e t -16
+KPX e v -9
+KPX e w -3
+KPX e x 6
+KPX e y -20
+KPX eacute v -9
+KPX eacute w -3
+KPX eacute y -20
+KPX ecircumflex v -9
+KPX ecircumflex w -3
+KPX ecircumflex y -20
+KPX eight four -58
+KPX eight one -72
+KPX eight seven -65
+KPX f a -32
+KPX f aacute -32
+KPX f adieresis -32
+KPX f ae -7
+KPX f aring -32
+KPX f e -43
+KPX f eacute -43
+KPX f f -43
+KPX f i -37
+KPX f j -60
+KPX f l -25
+KPX f o -47
+KPX f oacute -47
+KPX f odieresis -42
+KPX f oe -15
+KPX f oslash -29
+KPX f quoteright -73
+KPX f s -42
+KPX f t -6
+KPX five four -52
+KPX five one -73
+KPX five seven -73
+KPX four four -62
+KPX four one -66
+KPX four seven -93
+KPX g a -4
+KPX g adieresis -4
+KPX g ae 23
+KPX g aring -4
+KPX g e 1
+KPX g eacute 1
+KPX g l -34
+KPX g oacute -3
+KPX g odieresis -3
+KPX g r 0
+KPX guillemotright A -37
+KPX guillemotright AE -34
+KPX guillemotright Aacute -37
+KPX guillemotright Adieresis -37
+KPX guillemotright Aring -37
+KPX guillemotright T -71
+KPX guillemotright V -72
+KPX guillemotright W -29
+KPX guillemotright Y -92
+KPX guilsinglright A -37
+KPX guilsinglright AE -34
+KPX guilsinglright Aacute -37
+KPX guilsinglright Adieresis -37
+KPX guilsinglright Aring -37
+KPX guilsinglright T -71
+KPX guilsinglright V -72
+KPX guilsinglright W -29
+KPX guilsinglright Y -92
+KPX h quoteright -69
+KPX h y -23
+KPX hyphen A -18
+KPX hyphen AE -14
+KPX hyphen Aacute -18
+KPX hyphen Adieresis -18
+KPX hyphen Aring -18
+KPX hyphen T -90
+KPX hyphen V -38
+KPX hyphen W 1
+KPX hyphen Y -81
+KPX i T -58
+KPX i j -143
+KPX k a 1
+KPX k aacute 1
+KPX k adieresis 1
+KPX k ae 26
+KPX k aring 1
+KPX k comma -63
+KPX k e -11
+KPX k eacute -11
+KPX k g -14
+KPX k hyphen -50
+KPX k o -17
+KPX k oacute -17
+KPX k odieresis -17
+KPX k period -75
+KPX k s -9
+KPX k u -3
+KPX k udieresis -3
+KPX l v -77
+KPX l y -77
+KPX m p 32
+KPX m v 18
+KPX m w 22
+KPX m y 8
+KPX n T -40
+KPX n p 4
+KPX n quoteright -68
+KPX n v -12
+KPX n w -5
+KPX n y -22
+KPX nine four -53
+KPX nine one -66
+KPX nine seven -57
+KPX o T -31
+KPX o quoteright -62
+KPX o t -13
+KPX o v -6
+KPX o w -3
+KPX o x -10
+KPX o y -17
+KPX oacute v -6
+KPX oacute w -3
+KPX oacute y -17
+KPX ocircumflex t -13
+KPX odieresis t -13
+KPX odieresis v -6
+KPX odieresis w -3
+KPX odieresis x -10
+KPX odieresis y -17
+KPX ograve v -6
+KPX ograve w -3
+KPX ograve y -17
+KPX one comma -99
+KPX one eight -74
+KPX one five -55
+KPX one four -87
+KPX one nine -73
+KPX one one -62
+KPX one period -114
+KPX one seven -141
+KPX one six -98
+KPX one three -53
+KPX one two -47
+KPX one zero -86
+KPX p t -3
+KPX p y -6
+KPX period one -113
+KPX period quotedblright -131
+KPX period quoteright -161
+KPX q c 2
+KPX q u 41
+KPX quotedblbase A -6
+KPX quotedblbase AE -7
+KPX quotedblbase T -90
+KPX quotedblbase V -104
+KPX quotedblbase W -43
+KPX quotedblbase Y -78
+KPX quotedblleft A -62
+KPX quotedblleft AE -60
+KPX quotedblleft Aacute -62
+KPX quotedblleft Adieresis -62
+KPX quotedblleft Aring -62
+KPX quotedblleft T -24
+KPX quotedblleft V -22
+KPX quotedblleft W -13
+KPX quotedblleft Y -49
+KPX quotedblright A -76
+KPX quotedblright AE -75
+KPX quotedblright Aacute -76
+KPX quotedblright Adieresis -76
+KPX quotedblright Aring -76
+KPX quotedblright T -39
+KPX quotedblright V -30
+KPX quotedblright W -26
+KPX quotedblright Y -51
+KPX quoteleft A -87
+KPX quoteleft AE -85
+KPX quoteleft Aacute -87
+KPX quoteleft Adieresis -87
+KPX quoteleft Aring -87
+KPX quoteleft T -49
+KPX quoteleft V -46
+KPX quoteleft W -38
+KPX quoteleft Y -73
+KPX quoteright A -154
+KPX quoteright AE -153
+KPX quoteright Aacute -154
+KPX quoteright Adieresis -154
+KPX quoteright Aring -154
+KPX quoteright comma -227
+KPX quoteright d -140
+KPX quoteright o -143
+KPX quoteright period -244
+KPX quoteright r -149
+KPX quoteright s -150
+KPX quoteright t -117
+KPX quoteright v -110
+KPX quoteright w -105
+KPX quoteright y -116
+KPX r a -17
+KPX r aacute -17
+KPX r acircumflex -17
+KPX r adieresis -17
+KPX r ae 4
+KPX r agrave -17
+KPX r aring -17
+KPX r c -18
+KPX r ccedilla -15
+KPX r colon -95
+KPX r comma -108
+KPX r d -8
+KPX r e -7
+KPX r eacute -7
+KPX r ecircumflex -7
+KPX r egrave -7
+KPX r f -16
+KPX r g -5
+KPX r h -20
+KPX r hyphen -41
+KPX r i -25
+KPX r j -33
+KPX r k -30
+KPX r l -47
+KPX r m 36
+KPX r n 10
+KPX r o -12
+KPX r oacute -12
+KPX r ocircumflex -12
+KPX r odieresis -12
+KPX r oe 18
+KPX r ograve -12
+KPX r oslash -12
+KPX r p 30
+KPX r period -122
+KPX r q -4
+KPX r quoteright -41
+KPX r r -11
+KPX r s -21
+KPX r semicolon -83
+KPX r t 20
+KPX r u 20
+KPX r v 26
+KPX r w 26
+KPX r x 7
+KPX r y 16
+KPX r z -21
+KPX s quoteright -60
+KPX s t -11
+KPX seven colon -156
+KPX seven comma -157
+KPX seven eight -74
+KPX seven five -82
+KPX seven four -101
+KPX seven one -67
+KPX seven period -176
+KPX seven seven -62
+KPX seven six -93
+KPX seven three -72
+KPX seven two -64
+KPX six four -49
+KPX six one -54
+KPX six seven -46
+KPX t S -35
+KPX t a -16
+KPX t aacute -16
+KPX t adieresis -16
+KPX t ae 9
+KPX t aring -16
+KPX t colon -117
+KPX t e -24
+KPX t eacute -24
+KPX t h -5
+KPX t o -30
+KPX t oacute -30
+KPX t odieresis -30
+KPX t quoteright -102
+KPX t semicolon -103
+KPX three four -52
+KPX three one -71
+KPX three seven -64
+KPX two four -67
+KPX two one -66
+KPX two seven -68
+KPX u quoteright -56
+KPX v a -3
+KPX v aacute -3
+KPX v acircumflex -3
+KPX v adieresis -3
+KPX v ae 18
+KPX v agrave -3
+KPX v aring -3
+KPX v atilde -3
+KPX v c -11
+KPX v colon -81
+KPX v comma -136
+KPX v e 0
+KPX v eacute 0
+KPX v ecircumflex 0
+KPX v egrave 0
+KPX v g 1
+KPX v hyphen -23
+KPX v l -77
+KPX v o -5
+KPX v oacute -5
+KPX v odieresis -5
+KPX v ograve -5
+KPX v oslash -5
+KPX v period -156
+KPX v s -11
+KPX v semicolon -69
+KPX w a -3
+KPX w aacute -3
+KPX w acircumflex -3
+KPX w adieresis -3
+KPX w ae 23
+KPX w agrave -3
+KPX w aring -3
+KPX w atilde -3
+KPX w c -6
+KPX w colon -81
+KPX w comma -90
+KPX w e 2
+KPX w eacute 2
+KPX w ecircumflex 2
+KPX w egrave 2
+KPX w g 3
+KPX w hyphen 3
+KPX w l -48
+KPX w o -2
+KPX w oacute -2
+KPX w odieresis -2
+KPX w ograve -2
+KPX w oslash 2
+KPX w period -109
+KPX w s -11
+KPX w semicolon -69
+KPX x a 5
+KPX x c -14
+KPX x e -5
+KPX x eacute -5
+KPX x o -10
+KPX x q -8
+KPX y a -13
+KPX y aacute -13
+KPX y acircumflex -13
+KPX y adieresis -13
+KPX y ae 8
+KPX y agrave -13
+KPX y aring -13
+KPX y atilde -13
+KPX y c -21
+KPX y colon -91
+KPX y comma -134
+KPX y e -11
+KPX y eacute -11
+KPX y ecircumflex -11
+KPX y egrave -11
+KPX y g -9
+KPX y hyphen -19
+KPX y l -78
+KPX y o -15
+KPX y oacute -15
+KPX y odieresis -15
+KPX y ograve -15
+KPX y oslash -15
+KPX y period -155
+KPX y s -21
+KPX y semicolon -79
+KPX zero four -59
+KPX zero one -76
+KPX zero seven -68
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/n022004l.pfb b/Master/xemtex/gsfonts/n022004l.pfb
new file mode 100644
index 00000000000..1b981043fc6
--- /dev/null
+++ b/Master/xemtex/gsfonts/n022004l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/n022004l.pfm b/Master/xemtex/gsfonts/n022004l.pfm
new file mode 100644
index 00000000000..fd2eb8f2fbe
--- /dev/null
+++ b/Master/xemtex/gsfonts/n022004l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/n022023l.afm b/Master/xemtex/gsfonts/n022023l.afm
new file mode 100644
index 00000000000..6dccc7ed56a
--- /dev/null
+++ b/Master/xemtex/gsfonts/n022023l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName NimbusMonL-ReguObli
+FullName Nimbus Mono L Regular Oblique
+FamilyName Nimbus Mono L
+Weight Regular
+ItalicAngle -12.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -61 -237 774 811
+CapHeight 563
+XHeight 417
+Descender -186
+Ascender 604
+StartCharMetrics 316
+C 32 ; WX 600 ; N space ; B 319 0 319 0 ;
+C 33 ; WX 600 ; N exclam ; B 246 -15 463 618 ;
+C 34 ; WX 600 ; N quotedbl ; B 254 315 582 604 ;
+C 35 ; WX 600 ; N numbersign ; B 137 -62 589 647 ;
+C 36 ; WX 600 ; N dollar ; B 131 -92 582 655 ;
+C 37 ; WX 600 ; N percent ; B 137 -12 591 611 ;
+C 38 ; WX 600 ; N ampersand ; B 132 -16 527 519 ;
+C 39 ; WX 600 ; N quoteright ; B 207 314 468 604 ;
+C 40 ; WX 600 ; N parenleft ; B 335 -124 583 604 ;
+C 41 ; WX 600 ; N parenright ; B 124 -124 372 604 ;
+C 42 ; WX 600 ; N asterisk ; B 211 250 586 604 ;
+C 43 ; WX 600 ; N plus ; B 131 32 588 530 ;
+C 44 ; WX 600 ; N comma ; B 110 -145 371 145 ;
+C 45 ; WX 600 ; N hyphen ; B 131 258 588 299 ;
+C 46 ; WX 600 ; N period ; B 235 -15 386 116 ;
+C 47 ; WX 600 ; N slash ; B 99 -81 625 668 ;
+C 48 ; WX 600 ; N zero ; B 156 -15 571 618 ;
+C 49 ; WX 600 ; N one ; B 117 0 492 612 ;
+C 50 ; WX 600 ; N two ; B 84 0 572 618 ;
+C 51 ; WX 600 ; N three ; B 110 -15 579 618 ;
+C 52 ; WX 600 ; N four ; B 141 0 545 604 ;
+C 53 ; WX 600 ; N five ; B 113 -15 584 604 ;
+C 54 ; WX 600 ; N six ; B 184 -15 631 618 ;
+C 55 ; WX 600 ; N seven ; B 215 -1 606 604 ;
+C 56 ; WX 600 ; N eight ; B 143 -15 576 618 ;
+C 57 ; WX 600 ; N nine ; B 142 -15 589 618 ;
+C 58 ; WX 600 ; N colon ; B 235 -15 450 417 ;
+C 59 ; WX 600 ; N semicolon ; B 114 -145 426 417 ;
+C 60 ; WX 600 ; N less ; B 131 44 627 518 ;
+C 61 ; WX 600 ; N equal ; B 95 190 625 375 ;
+C 62 ; WX 600 ; N greater ; B 92 44 588 518 ;
+C 63 ; WX 600 ; N question ; B 231 -15 581 577 ;
+C 64 ; WX 600 ; N at ; B 139 -62 561 624 ;
+C 65 ; WX 600 ; N A ; B 13 0 596 563 ;
+C 66 ; WX 600 ; N B ; B 47 0 591 563 ;
+C 67 ; WX 600 ; N C ; B 110 -16 635 576 ;
+C 68 ; WX 600 ; N D ; B 47 0 592 563 ;
+C 69 ; WX 600 ; N E ; B 47 0 619 563 ;
+C 70 ; WX 600 ; N F ; B 47 0 640 563 ;
+C 71 ; WX 600 ; N G ; B 108 -16 636 576 ;
+C 72 ; WX 600 ; N H ; B 57 0 646 563 ;
+C 73 ; WX 600 ; N I ; B 117 0 603 563 ;
+C 74 ; WX 600 ; N J ; B 100 -16 699 563 ;
+C 75 ; WX 600 ; N K ; B 47 0 662 563 ;
+C 76 ; WX 600 ; N L ; B 67 0 585 563 ;
+C 77 ; WX 600 ; N M ; B 15 0 700 563 ;
+C 78 ; WX 600 ; N N ; B 46 0 678 563 ;
+C 79 ; WX 600 ; N O ; B 102 -16 616 576 ;
+C 80 ; WX 600 ; N P ; B 47 0 587 563 ;
+C 81 ; WX 600 ; N Q ; B 102 -115 616 576 ;
+C 82 ; WX 600 ; N R ; B 47 0 594 563 ;
+C 83 ; WX 600 ; N S ; B 96 -17 602 577 ;
+C 84 ; WX 600 ; N T ; B 152 0 648 563 ;
+C 85 ; WX 600 ; N U ; B 136 -16 676 563 ;
+C 86 ; WX 600 ; N V ; B 124 0 707 563 ;
+C 87 ; WX 600 ; N W ; B 122 0 696 563 ;
+C 88 ; WX 600 ; N X ; B 44 0 662 563 ;
+C 89 ; WX 600 ; N Y ; B 153 0 665 563 ;
+C 90 ; WX 600 ; N Z ; B 103 0 590 563 ;
+C 91 ; WX 600 ; N bracketleft ; B 254 -124 570 604 ;
+C 92 ; WX 600 ; N backslash ; B 250 -81 474 668 ;
+C 93 ; WX 600 ; N bracketright ; B 132 -124 448 604 ;
+C 94 ; WX 600 ; N asciicircum ; B 192 354 567 615 ;
+C 95 ; WX 600 ; N underscore ; B -61 -125 564 -75 ;
+C 96 ; WX 600 ; N quoteleft ; B 388 343 544 604 ;
+C 97 ; WX 600 ; N a ; B 93 -16 546 431 ;
+C 98 ; WX 600 ; N b ; B 26 -16 591 604 ;
+C 99 ; WX 600 ; N c ; B 121 -17 596 432 ;
+C 100 ; WX 600 ; N d ; B 102 -16 630 604 ;
+C 101 ; WX 600 ; N e ; B 104 -16 570 431 ;
+C 102 ; WX 600 ; N f ; B 109 0 663 604 ;
+C 103 ; WX 600 ; N g ; B 105 -186 647 431 ;
+C 104 ; WX 600 ; N h ; B 55 0 556 604 ;
+C 105 ; WX 600 ; N i ; B 96 0 513 624 ;
+C 106 ; WX 600 ; N j ; B 112 -186 547 624 ;
+C 107 ; WX 600 ; N k ; B 67 0 578 604 ;
+C 108 ; WX 600 ; N l ; B 96 0 513 604 ;
+C 109 ; WX 600 ; N m ; B 15 0 603 431 ;
+C 110 ; WX 600 ; N n ; B 57 0 546 431 ;
+C 111 ; WX 600 ; N o ; B 111 -16 577 431 ;
+C 112 ; WX 600 ; N p ; B -13 -186 593 431 ;
+C 113 ; WX 600 ; N q ; B 105 -186 668 431 ;
+C 114 ; WX 600 ; N r ; B 88 0 619 427 ;
+C 115 ; WX 600 ; N s ; B 108 -17 558 431 ;
+C 116 ; WX 600 ; N t ; B 127 -16 518 563 ;
+C 117 ; WX 600 ; N u ; B 127 -16 569 417 ;
+C 118 ; WX 600 ; N v ; B 114 0 655 417 ;
+C 119 ; WX 600 ; N w ; B 114 0 655 417 ;
+C 120 ; WX 600 ; N x ; B 55 0 611 417 ;
+C 121 ; WX 600 ; N y ; B 22 -186 634 417 ;
+C 122 ; WX 600 ; N z ; B 115 0 563 417 ;
+C 123 ; WX 600 ; N braceleft ; B 248 -124 528 604 ;
+C 124 ; WX 600 ; N bar ; B 257 -124 444 604 ;
+C 125 ; WX 600 ; N braceright ; B 175 -124 455 604 ;
+C 126 ; WX 600 ; N asciitilde ; B 145 212 575 348 ;
+C 161 ; WX 600 ; N exclamdown ; B 222 -216 439 417 ;
+C 162 ; WX 600 ; N cent ; B 175 -13 563 630 ;
+C 163 ; WX 600 ; N sterling ; B 90 0 541 578 ;
+C 164 ; WX 600 ; N fraction ; B 84 138 645 470 ;
+C 165 ; WX 600 ; N yen ; B 161 0 665 563 ;
+C 166 ; WX 600 ; N florin ; B 74 -93 643 618 ;
+C 167 ; WX 600 ; N section ; B 91 -62 624 603 ;
+C 168 ; WX 600 ; N currency ; B 127 95 597 489 ;
+C 169 ; WX 600 ; N quotesingle ; B 344 315 492 604 ;
+C 170 ; WX 600 ; N quotedblleft ; B 221 343 586 604 ;
+C 171 ; WX 600 ; N guillemotleft ; B 108 0 626 417 ;
+C 172 ; WX 600 ; N guilsinglleft ; B 108 0 397 417 ;
+C 173 ; WX 600 ; N guilsinglright ; B 297 0 585 417 ;
+C 174 ; WX 600 ; N fi ; B 14 0 615 624 ;
+C 175 ; WX 600 ; N fl ; B 14 0 611 604 ;
+C 177 ; WX 600 ; N endash ; B 131 261 588 302 ;
+C 178 ; WX 600 ; N dagger ; B 208 -63 561 604 ;
+C 179 ; WX 600 ; N daggerdbl ; B 154 -62 561 604 ;
+C 180 ; WX 600 ; N periodcentered ; B 285 217 436 348 ;
+C 182 ; WX 600 ; N paragraph ; B 152 -62 648 604 ;
+C 183 ; WX 600 ; N bullet ; B 253 141 449 337 ;
+C 184 ; WX 600 ; N quotesinglbase ; B 110 -145 371 145 ;
+C 185 ; WX 600 ; N quotedblbase ; B 73 -116 538 145 ;
+C 186 ; WX 600 ; N quotedblright ; B 170 343 635 604 ;
+C 187 ; WX 600 ; N guillemotright ; B 67 0 585 417 ;
+C 188 ; WX 600 ; N ellipsis ; B 57 -15 557 84 ;
+C 189 ; WX 600 ; N perthousand ; B 91 -9 598 614 ;
+C 191 ; WX 600 ; N questiondown ; B 105 -175 455 417 ;
+C 193 ; WX 600 ; N grave ; B 286 490 429 639 ;
+C 194 ; WX 600 ; N acute ; B 388 490 577 639 ;
+C 195 ; WX 600 ; N circumflex ; B 263 490 554 639 ;
+C 196 ; WX 600 ; N tilde ; B 258 516 579 605 ;
+C 197 ; WX 600 ; N macron ; B 273 536 564 576 ;
+C 198 ; WX 600 ; N breve ; B 280 489 574 621 ;
+C 199 ; WX 600 ; N dotaccent ; B 368 511 470 611 ;
+C 200 ; WX 600 ; N dieresis ; B 258 511 581 611 ;
+C 202 ; WX 600 ; N ring ; B 326 480 516 661 ;
+C 203 ; WX 600 ; N cedilla ; B 181 -173 356 0 ;
+C 205 ; WX 600 ; N hungarumlaut ; B 263 490 576 633 ;
+C 206 ; WX 600 ; N ogonek ; B 258 -155 408 0 ;
+C 207 ; WX 600 ; N caron ; B 286 490 577 639 ;
+C 208 ; WX 600 ; N emdash ; B 60 261 659 302 ;
+C 225 ; WX 600 ; N AE ; B 14 0 690 563 ;
+C 227 ; WX 600 ; N ordfeminine ; B 229 279 511 574 ;
+C 232 ; WX 600 ; N Lslash ; B 66 0 586 563 ;
+C 233 ; WX 600 ; N Oslash ; B 34 -43 685 605 ;
+C 234 ; WX 600 ; N OE ; B 62 0 690 563 ;
+C 235 ; WX 600 ; N ordmasculine ; B 243 284 543 577 ;
+C 241 ; WX 600 ; N ae ; B 36 -16 630 431 ;
+C 245 ; WX 600 ; N dotlessi ; B 96 0 513 417 ;
+C 248 ; WX 600 ; N lslash ; B 96 0 524 604 ;
+C 249 ; WX 600 ; N oslash ; B 47 -43 637 458 ;
+C 250 ; WX 600 ; N oe ; B 50 -16 630 431 ;
+C 251 ; WX 600 ; N germandbls ; B 47 -16 539 604 ;
+C -1 ; WX 600 ; N Udieresis ; B 136 -16 676 762 ;
+C -1 ; WX 600 ; N Uacute ; B 136 -16 676 789 ;
+C -1 ; WX 600 ; N Scedilla ; B 96 -179 602 577 ;
+C -1 ; WX 600 ; N Tcaron ; B 152 0 648 789 ;
+C -1 ; WX 600 ; N Scaron ; B 96 -17 618 789 ;
+C -1 ; WX 600 ; N Rcaron ; B 47 0 594 789 ;
+C -1 ; WX 600 ; N Racute ; B 47 0 594 789 ;
+C -1 ; WX 600 ; N Sacute ; B 96 -17 602 789 ;
+C -1 ; WX 600 ; N Otilde ; B 103 -16 618 755 ;
+C -1 ; WX 600 ; N ucircumflex ; B 127 -16 569 639 ;
+C -1 ; WX 600 ; N Ohungarumlaut ; B 102 -16 672 787 ;
+C -1 ; WX 600 ; N Uhungarumlaut ; B 136 -16 676 787 ;
+C -1 ; WX 600 ; N Yacute ; B 153 0 665 789 ;
+C -1 ; WX 600 ; N Eth ; B 47 0 592 563 ;
+C -1 ; WX 600 ; N Dcroat ; B 47 0 592 563 ;
+C -1 ; WX 600 ; N Zacute ; B 103 0 590 789 ;
+C -1 ; WX 600 ; N Uring ; B 136 -16 676 807 ;
+C -1 ; WX 600 ; N gbreve ; B 105 -186 647 621 ;
+C -1 ; WX 600 ; N eogonek ; B 104 -155 570 431 ;
+C -1 ; WX 600 ; N edotaccent ; B 104 -16 570 611 ;
+C -1 ; WX 600 ; N ecaron ; B 104 -16 577 639 ;
+C -1 ; WX 600 ; N Ugrave ; B 136 -16 676 789 ;
+C -1 ; WX 600 ; N Thorn ; B 47 0 566 563 ;
+C -1 ; WX 600 ; N eacute ; B 104 -16 570 639 ;
+C -1 ; WX 600 ; N edieresis ; B 104 -16 586 611 ;
+C -1 ; WX 600 ; N dcaron ; B 102 -16 774 618 ;
+C -1 ; WX 600 ; N ccedilla ; B 122 -173 596 431 ;
+C -1 ; WX 600 ; N ccaron ; B 121 -17 596 639 ;
+C -1 ; WX 600 ; N cacute ; B 121 -17 596 639 ;
+C -1 ; WX 600 ; N aogonek ; B 93 -155 546 431 ;
+C -1 ; WX 600 ; N aring ; B 93 -16 546 661 ;
+C -1 ; WX 600 ; N atilde ; B 93 -16 570 605 ;
+C -1 ; WX 600 ; N abreve ; B 93 -16 574 621 ;
+C -1 ; WX 600 ; N egrave ; B 104 -16 570 639 ;
+C -1 ; WX 600 ; N agrave ; B 93 -16 546 639 ;
+C -1 ; WX 600 ; N aacute ; B 93 -16 546 639 ;
+C -1 ; WX 600 ; N adieresis ; B 93 -16 571 611 ;
+C -1 ; WX 600 ; N Uogonek ; B 136 -155 676 563 ;
+C -1 ; WX 600 ; N ugrave ; B 127 -16 569 639 ;
+C -1 ; WX 600 ; N uacute ; B 127 -16 569 639 ;
+C -1 ; WX 600 ; N udieresis ; B 127 -16 573 611 ;
+C -1 ; WX 600 ; N tcaron ; B 127 -16 593 618 ;
+C -1 ; WX 600 ; N scommaaccent ; B 108 -237 558 431 ;
+C -1 ; WX 600 ; N Zcaron ; B 103 0 604 789 ;
+C -1 ; WX 600 ; N ecircumflex ; B 104 -16 570 639 ;
+C -1 ; WX 600 ; N Ucircumflex ; B 136 -16 676 789 ;
+C -1 ; WX 600 ; N acircumflex ; B 93 -16 546 639 ;
+C -1 ; WX 600 ; N Zdotaccent ; B 103 0 590 762 ;
+C -1 ; WX 600 ; N scaron ; B 107 -17 584 639 ;
+C -1 ; WX 600 ; N Amacron ; B 13 0 596 723 ;
+C -1 ; WX 600 ; N sacute ; B 108 -17 577 639 ;
+C -1 ; WX 600 ; N Tcommaaccent ; B 152 -237 648 563 ;
+C -1 ; WX 600 ; N Ydieresis ; B 153 0 665 762 ;
+C -1 ; WX 600 ; N thorn ; B -13 -186 593 590 ;
+C -1 ; WX 600 ; N Emacron ; B 47 0 619 723 ;
+C -1 ; WX 600 ; N Ograve ; B 102 -16 616 789 ;
+C -1 ; WX 600 ; N Oacute ; B 102 -16 616 789 ;
+C -1 ; WX 600 ; N Odieresis ; B 102 -16 616 762 ;
+C -1 ; WX 600 ; N Ntilde ; B 46 0 678 755 ;
+C -1 ; WX 600 ; N Ncaron ; B 46 0 678 789 ;
+C -1 ; WX 600 ; N Nacute ; B 46 0 678 789 ;
+C -1 ; WX 600 ; N Lcaron ; B 67 0 638 576 ;
+C -1 ; WX 600 ; N Lacute ; B 67 0 585 789 ;
+C -1 ; WX 600 ; N Idotaccent ; B 117 0 603 762 ;
+C -1 ; WX 600 ; N racute ; B 88 0 619 639 ;
+C -1 ; WX 600 ; N Icircumflex ; B 117 0 603 789 ;
+C -1 ; WX 600 ; N ohungarumlaut ; B 111 -16 616 633 ;
+C -1 ; WX 600 ; N otilde ; B 111 -16 586 605 ;
+C -1 ; WX 600 ; N Euro ; B 60 -16 634 576 ;
+C -1 ; WX 600 ; N ocircumflex ; B 111 -16 577 639 ;
+C -1 ; WX 600 ; N onesuperior ; B 249 259 469 612 ;
+C -1 ; WX 600 ; N twosuperior ; B 230 259 514 612 ;
+C -1 ; WX 600 ; N threesuperior ; B 245 251 516 612 ;
+C -1 ; WX 600 ; N Igrave ; B 117 0 603 789 ;
+C -1 ; WX 600 ; N Iacute ; B 117 0 603 789 ;
+C -1 ; WX 600 ; N Imacron ; B 117 0 603 723 ;
+C -1 ; WX 600 ; N Iogonek ; B 117 -155 603 563 ;
+C -1 ; WX 600 ; N Idieresis ; B 117 0 611 762 ;
+C -1 ; WX 600 ; N Gbreve ; B 108 -16 656 777 ;
+C -1 ; WX 600 ; N Umacron ; B 136 -16 676 723 ;
+C -1 ; WX 600 ; N Kcommaaccent ; B 47 -237 662 563 ;
+C -1 ; WX 600 ; N ograve ; B 111 -16 577 639 ;
+C -1 ; WX 600 ; N Scommaaccent ; B 96 -237 602 577 ;
+C -1 ; WX 600 ; N Eogonek ; B 47 -155 619 563 ;
+C -1 ; WX 600 ; N oacute ; B 111 -16 577 639 ;
+C -1 ; WX 600 ; N Edotaccent ; B 47 0 619 762 ;
+C -1 ; WX 600 ; N iogonek ; B 96 -155 513 624 ;
+C -1 ; WX 600 ; N gcommaaccent ; B 105 -186 647 668 ;
+C -1 ; WX 600 ; N odieresis ; B 111 -16 581 611 ;
+C -1 ; WX 600 ; N ntilde ; B 57 0 570 605 ;
+C -1 ; WX 600 ; N ncaron ; B 57 0 577 639 ;
+C -1 ; WX 600 ; N Ecaron ; B 47 0 619 789 ;
+C -1 ; WX 600 ; N Ecircumflex ; B 47 0 619 789 ;
+C -1 ; WX 600 ; N scedilla ; B 108 -173 558 431 ;
+C -1 ; WX 600 ; N rcaron ; B 88 0 619 639 ;
+C -1 ; WX 600 ; N Egrave ; B 47 0 619 789 ;
+C -1 ; WX 600 ; N Eacute ; B 47 0 619 789 ;
+C -1 ; WX 600 ; N Gcommaaccent ; B 108 -237 636 576 ;
+C -1 ; WX 600 ; N Rcommaaccent ; B 47 -237 594 563 ;
+C -1 ; WX 600 ; N Edieresis ; B 47 0 619 762 ;
+C -1 ; WX 600 ; N nacute ; B 57 0 577 639 ;
+C -1 ; WX 600 ; N uogonek ; B 127 -155 569 417 ;
+C -1 ; WX 600 ; N umacron ; B 127 -16 569 576 ;
+C -1 ; WX 600 ; N Dcaron ; B 47 0 592 789 ;
+C -1 ; WX 600 ; N lcaron ; B 96 0 593 618 ;
+C -1 ; WX 600 ; N Ccaron ; B 110 -16 635 789 ;
+C -1 ; WX 600 ; N Cacute ; B 110 -16 635 789 ;
+C -1 ; WX 600 ; N Ccedilla ; B 110 -173 635 576 ;
+C -1 ; WX 600 ; N degree ; B 257 346 553 636 ;
+C -1 ; WX 600 ; N Aogonek ; B 13 -155 596 563 ;
+C -1 ; WX 600 ; N minus ; B 131 261 588 302 ;
+C -1 ; WX 600 ; N multiply ; B 143 100 577 464 ;
+C -1 ; WX 600 ; N divide ; B 131 25 588 540 ;
+C -1 ; WX 600 ; N Aring ; B 13 0 596 811 ;
+C -1 ; WX 600 ; N trademark ; B 90 243 710 563 ;
+C -1 ; WX 600 ; N rcommaaccent ; B 88 -237 619 427 ;
+C -1 ; WX 600 ; N lacute ; B 96 0 572 789 ;
+C -1 ; WX 600 ; N omacron ; B 111 -16 577 576 ;
+C -1 ; WX 600 ; N Atilde ; B 13 0 596 755 ;
+C -1 ; WX 600 ; N icircumflex ; B 95 0 536 639 ;
+C -1 ; WX 600 ; N igrave ; B 96 0 513 639 ;
+C -1 ; WX 600 ; N ncommaaccent ; B 57 -237 546 431 ;
+C -1 ; WX 600 ; N lcommaaccent ; B 96 -237 513 604 ;
+C -1 ; WX 600 ; N plusminus ; B 76 0 597 529 ;
+C -1 ; WX 600 ; N onehalf ; B 82 0 627 612 ;
+C -1 ; WX 600 ; N onequarter ; B 74 0 619 612 ;
+C -1 ; WX 600 ; N threequarters ; B 70 0 619 612 ;
+C -1 ; WX 600 ; N iacute ; B 96 0 535 639 ;
+C -1 ; WX 600 ; N Abreve ; B 13 0 596 777 ;
+C -1 ; WX 600 ; N kcommaaccent ; B 67 -237 578 604 ;
+C -1 ; WX 600 ; N Omacron ; B 102 -16 616 723 ;
+C -1 ; WX 600 ; N imacron ; B 96 0 564 576 ;
+C -1 ; WX 600 ; N emacron ; B 104 -16 570 576 ;
+C -1 ; WX 600 ; N amacron ; B 93 -16 564 576 ;
+C -1 ; WX 600 ; N tcommaaccent ; B 127 -237 518 563 ;
+C -1 ; WX 600 ; N ydieresis ; B 22 -186 634 611 ;
+C -1 ; WX 600 ; N zdotaccent ; B 115 0 563 611 ;
+C -1 ; WX 600 ; N zcaron ; B 115 0 576 639 ;
+C -1 ; WX 600 ; N zacute ; B 115 0 577 639 ;
+C -1 ; WX 600 ; N yacute ; B 22 -186 634 639 ;
+C -1 ; WX 600 ; N uhungarumlaut ; B 127 -16 576 633 ;
+C -1 ; WX 600 ; N eth ; B 111 -17 582 620 ;
+C -1 ; WX 600 ; N uring ; B 127 -16 569 661 ;
+C -1 ; WX 600 ; N Ocircumflex ; B 102 -16 616 789 ;
+C -1 ; WX 600 ; N commaaccent ; B 159 -237 322 -60 ;
+C -1 ; WX 600 ; N copyright ; B 57 -15 663 578 ;
+C -1 ; WX 600 ; N registered ; B 57 -15 663 578 ;
+C -1 ; WX 600 ; N Acircumflex ; B 13 0 596 789 ;
+C -1 ; WX 600 ; N idieresis ; B 96 0 568 611 ;
+C -1 ; WX 600 ; N lozenge ; B 149 -11 571 575 ;
+C -1 ; WX 600 ; N Delta ; B 43 0 557 563 ;
+C -1 ; WX 600 ; N notequal ; B 96 94 625 464 ;
+C -1 ; WX 600 ; N radical ; B 88 0 773 699 ;
+C -1 ; WX 600 ; N Agrave ; B 13 0 596 789 ;
+C -1 ; WX 600 ; N Aacute ; B 13 0 596 789 ;
+C -1 ; WX 600 ; N lessequal ; B 56 0 635 535 ;
+C -1 ; WX 600 ; N greaterequal ; B 71 0 600 535 ;
+C -1 ; WX 600 ; N logicalnot ; B 160 168 621 438 ;
+C -1 ; WX 600 ; N summation ; B 90 -127 616 563 ;
+C -1 ; WX 600 ; N partialdiff ; B 111 -16 580 581 ;
+C -1 ; WX 600 ; N Ncommaaccent ; B 46 -237 678 563 ;
+C -1 ; WX 600 ; N dcroat ; B 102 -16 690 604 ;
+C -1 ; WX 600 ; N brokenbar ; B 257 -124 444 604 ;
+C -1 ; WX 600 ; N Lcommaaccent ; B 67 -237 585 563 ;
+C -1 ; WX 600 ; N Adieresis ; B 13 0 596 762 ;
+C -1 ; WX 600 ; N mu ; B 86 -200 569 417 ;
+C -1 ; WX 600 ; N .notdef ; B 319 0 319 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -41
+KPX A Ccedilla -39
+KPX A G -36
+KPX A O -35
+KPX A Odieresis -35
+KPX A Q -37
+KPX A T -34
+KPX A U -41
+KPX A Uacute -41
+KPX A Ucircumflex -41
+KPX A Udieresis -41
+KPX A Ugrave -41
+KPX A V -78
+KPX A W -20
+KPX A Y -35
+KPX A a 1
+KPX A b 40
+KPX A c -26
+KPX A ccedilla -23
+KPX A comma -47
+KPX A d -17
+KPX A e -21
+KPX A g -27
+KPX A guillemotleft -57
+KPX A guilsinglleft -57
+KPX A hyphen -35
+KPX A o -22
+KPX A period -70
+KPX A q -27
+KPX A quotedblright -82
+KPX A quoteright -102
+KPX A t -33
+KPX A u -23
+KPX A v -59
+KPX A w -27
+KPX A y -63
+KPX Aacute C -41
+KPX Aacute G -36
+KPX Aacute O -35
+KPX Aacute Q -37
+KPX Aacute T -34
+KPX Aacute U -41
+KPX Aacute V -78
+KPX Aacute W -20
+KPX Aacute Y -35
+KPX Aacute a 1
+KPX Aacute b 40
+KPX Aacute c -26
+KPX Aacute comma -47
+KPX Aacute d -17
+KPX Aacute e -21
+KPX Aacute g -27
+KPX Aacute guillemotleft -57
+KPX Aacute guilsinglleft -57
+KPX Aacute hyphen -35
+KPX Aacute o -22
+KPX Aacute period -70
+KPX Aacute q -27
+KPX Aacute quoteright -102
+KPX Aacute t -33
+KPX Aacute u -23
+KPX Aacute v -59
+KPX Aacute w -27
+KPX Aacute y -63
+KPX Acircumflex C -41
+KPX Acircumflex G -36
+KPX Acircumflex O -35
+KPX Acircumflex Q -37
+KPX Acircumflex T -34
+KPX Acircumflex U -41
+KPX Acircumflex V -78
+KPX Acircumflex W -20
+KPX Acircumflex Y -35
+KPX Acircumflex comma -47
+KPX Acircumflex period -70
+KPX Adieresis C -41
+KPX Adieresis G -36
+KPX Adieresis O -35
+KPX Adieresis Q -37
+KPX Adieresis T -34
+KPX Adieresis U -41
+KPX Adieresis V -78
+KPX Adieresis W -20
+KPX Adieresis Y -35
+KPX Adieresis a 1
+KPX Adieresis b 40
+KPX Adieresis c -26
+KPX Adieresis comma -47
+KPX Adieresis d -17
+KPX Adieresis g -27
+KPX Adieresis guillemotleft -57
+KPX Adieresis guilsinglleft -57
+KPX Adieresis hyphen -35
+KPX Adieresis o -22
+KPX Adieresis period -70
+KPX Adieresis q -27
+KPX Adieresis quotedblright -82
+KPX Adieresis quoteright -102
+KPX Adieresis t -33
+KPX Adieresis u -23
+KPX Adieresis v -59
+KPX Adieresis w -27
+KPX Adieresis y -63
+KPX Agrave C -41
+KPX Agrave G -36
+KPX Agrave O -35
+KPX Agrave Q -37
+KPX Agrave T -34
+KPX Agrave U -41
+KPX Agrave V -78
+KPX Agrave W -20
+KPX Agrave Y -35
+KPX Agrave comma -47
+KPX Agrave period -70
+KPX Aring C -41
+KPX Aring G -36
+KPX Aring O -35
+KPX Aring Q -37
+KPX Aring T -34
+KPX Aring U -41
+KPX Aring V -78
+KPX Aring W -20
+KPX Aring Y -35
+KPX Aring a 1
+KPX Aring b 40
+KPX Aring c -26
+KPX Aring comma -47
+KPX Aring d -17
+KPX Aring e -21
+KPX Aring g -27
+KPX Aring guillemotleft -57
+KPX Aring guilsinglleft -57
+KPX Aring hyphen -35
+KPX Aring o -22
+KPX Aring period -70
+KPX Aring q -27
+KPX Aring quotedblright -82
+KPX Aring quoteright -102
+KPX Aring t -33
+KPX Aring u -23
+KPX Aring v -59
+KPX Aring w -27
+KPX Aring y -63
+KPX Atilde C -41
+KPX Atilde G -36
+KPX Atilde O -35
+KPX Atilde Q -37
+KPX Atilde T -34
+KPX Atilde U -41
+KPX Atilde V -78
+KPX Atilde W -20
+KPX Atilde Y -35
+KPX Atilde comma -47
+KPX Atilde period -70
+KPX B A -15
+KPX B AE -16
+KPX B Aacute -15
+KPX B Acircumflex -15
+KPX B Adieresis -15
+KPX B Aring -15
+KPX B Atilde -15
+KPX B O -15
+KPX B OE 5
+KPX B Oacute -15
+KPX B Ocircumflex -15
+KPX B Odieresis -15
+KPX B Ograve -15
+KPX B Oslash -14
+KPX B V -37
+KPX B W -15
+KPX B Y -58
+KPX C A -14
+KPX C AE -14
+KPX C Aacute -14
+KPX C Adieresis -14
+KPX C Aring -14
+KPX C H -34
+KPX C K -19
+KPX C O -24
+KPX C Oacute -24
+KPX C Odieresis -24
+KPX Ccedilla A -8
+KPX D A -47
+KPX D Aacute -47
+KPX D Acircumflex -47
+KPX D Adieresis -47
+KPX D Agrave -47
+KPX D Aring -47
+KPX D Atilde -47
+KPX D J -38
+KPX D T -47
+KPX D V -50
+KPX D W -20
+KPX D X -60
+KPX D Y -71
+KPX F A -45
+KPX F Aacute -45
+KPX F Acircumflex -45
+KPX F Adieresis -45
+KPX F Agrave -45
+KPX F Aring -45
+KPX F Atilde -45
+KPX F J -100
+KPX F O -34
+KPX F Odieresis -34
+KPX F a -52
+KPX F aacute -52
+KPX F adieresis -49
+KPX F ae -25
+KPX F aring -52
+KPX F comma -172
+KPX F e -61
+KPX F eacute -61
+KPX F hyphen -72
+KPX F i -51
+KPX F j -59
+KPX F o -68
+KPX F oacute -68
+KPX F odieresis -54
+KPX F oe -26
+KPX F oslash -68
+KPX F period -196
+KPX F r -37
+KPX F u -6
+KPX G A 0
+KPX G AE 0
+KPX G Aacute 0
+KPX G Acircumflex 0
+KPX G Adieresis 0
+KPX G Agrave 0
+KPX G Aring 0
+KPX G Atilde 0
+KPX G T -31
+KPX G V -1
+KPX G W -4
+KPX G Y -22
+KPX J A -14
+KPX J AE -23
+KPX J Adieresis -14
+KPX J Aring -14
+KPX K C -50
+KPX K G -46
+KPX K O -45
+KPX K OE -28
+KPX K Oacute -45
+KPX K Odieresis -45
+KPX K S -16
+KPX K T -18
+KPX K a -8
+KPX K adieresis -8
+KPX K ae 19
+KPX K aring -8
+KPX K e -30
+KPX K hyphen -66
+KPX K o -32
+KPX K oacute -32
+KPX K odieresis -32
+KPX K u -33
+KPX K udieresis -33
+KPX K y -72
+KPX L A 9
+KPX L AE 9
+KPX L Aacute 9
+KPX L Adieresis 9
+KPX L Aring 9
+KPX L C -19
+KPX L Ccedilla -19
+KPX L G -18
+KPX L O -15
+KPX L Oacute -15
+KPX L Ocircumflex -15
+KPX L Odieresis -15
+KPX L Ograve -15
+KPX L Otilde -15
+KPX L S -31
+KPX L T -59
+KPX L U -36
+KPX L Udieresis -36
+KPX L V -71
+KPX L W -31
+KPX L Y -60
+KPX L hyphen -1
+KPX L quotedblright -76
+KPX L quoteright -84
+KPX L u -20
+KPX L udieresis -20
+KPX L y -50
+KPX N A -10
+KPX N AE -10
+KPX N Aacute -10
+KPX N Adieresis -10
+KPX N Aring -10
+KPX N C -18
+KPX N Ccedilla -18
+KPX N G -16
+KPX N O -14
+KPX N Oacute -14
+KPX N Odieresis -14
+KPX N a -23
+KPX N aacute -23
+KPX N adieresis -23
+KPX N ae 7
+KPX N aring -23
+KPX N comma -64
+KPX N e -10
+KPX N eacute -10
+KPX N o -14
+KPX N oacute -14
+KPX N odieresis -14
+KPX N oslash -11
+KPX N period -87
+KPX N u -14
+KPX N udieresis -14
+KPX O A -33
+KPX O AE -30
+KPX O Aacute -33
+KPX O Adieresis -33
+KPX O Aring -33
+KPX O T -37
+KPX O V -40
+KPX O W -8
+KPX O X -47
+KPX O Y -61
+KPX Oacute A -33
+KPX Oacute T -37
+KPX Oacute V -40
+KPX Oacute W -8
+KPX Oacute Y -61
+KPX Ocircumflex T -37
+KPX Ocircumflex V -40
+KPX Ocircumflex Y -61
+KPX Odieresis A -33
+KPX Odieresis T -37
+KPX Odieresis V -40
+KPX Odieresis W -8
+KPX Odieresis X -47
+KPX Odieresis Y -61
+KPX Ograve T -37
+KPX Ograve V -40
+KPX Ograve Y -61
+KPX Oslash A -31
+KPX Otilde T -36
+KPX Otilde V -39
+KPX Otilde Y -60
+KPX P A -87
+KPX P AE -81
+KPX P Aacute -87
+KPX P Adieresis -87
+KPX P Aring -87
+KPX P J -90
+KPX P a -57
+KPX P aacute -57
+KPX P adieresis -57
+KPX P ae -29
+KPX P aring -57
+KPX P comma -161
+KPX P e -47
+KPX P eacute -47
+KPX P hyphen -52
+KPX P o -53
+KPX P oacute -53
+KPX P odieresis -53
+KPX P oe -18
+KPX P oslash -53
+KPX P period -185
+KPX R C -32
+KPX R Ccedilla -33
+KPX R G -31
+KPX R O -29
+KPX R OE -8
+KPX R Oacute -29
+KPX R Odieresis -29
+KPX R T -35
+KPX R U -36
+KPX R Udieresis -36
+KPX R V -42
+KPX R W -21
+KPX R Y -36
+KPX R a 0
+KPX R aacute 0
+KPX R adieresis 0
+KPX R ae 27
+KPX R aring 0
+KPX R e -22
+KPX R eacute -22
+KPX R hyphen -53
+KPX R o -23
+KPX R oacute -23
+KPX R odieresis -23
+KPX R oe 15
+KPX R u -16
+KPX R uacute -16
+KPX R udieresis -16
+KPX R y -20
+KPX S A -28
+KPX S AE -28
+KPX S Aacute -28
+KPX S Adieresis -28
+KPX S Aring -28
+KPX S T -48
+KPX S V -18
+KPX S W -23
+KPX S Y -39
+KPX S t -25
+KPX T A -34
+KPX T AE -35
+KPX T Aacute -34
+KPX T Acircumflex -34
+KPX T Adieresis -34
+KPX T Agrave -34
+KPX T Aring -34
+KPX T Atilde -34
+KPX T C -36
+KPX T G -35
+KPX T J -88
+KPX T O -34
+KPX T OE -12
+KPX T Oacute -34
+KPX T Ocircumflex -34
+KPX T Odieresis -34
+KPX T Ograve -34
+KPX T Oslash -34
+KPX T Otilde -34
+KPX T S -50
+KPX T V 4
+KPX T W -1
+KPX T Y -17
+KPX T a -68
+KPX T ae -38
+KPX T c -83
+KPX T colon -145
+KPX T comma -116
+KPX T e -83
+KPX T g -76
+KPX T guillemotleft -129
+KPX T guilsinglleft -129
+KPX T hyphen -99
+KPX T i -51
+KPX T j -59
+KPX T o -87
+KPX T oslash -60
+KPX T period -145
+KPX T r -37
+KPX T s -70
+KPX T semicolon -119
+KPX T u -92
+KPX T v -98
+KPX T w -96
+KPX T y -108
+KPX U A -26
+KPX U AE -35
+KPX U Aacute -26
+KPX U Acircumflex -26
+KPX U Adieresis -26
+KPX U Aring -26
+KPX U Atilde -26
+KPX U comma -80
+KPX U m 3
+KPX U n -22
+KPX U p -5
+KPX U period -105
+KPX U r -47
+KPX Uacute A -26
+KPX Uacute comma -80
+KPX Uacute m 3
+KPX Uacute n -22
+KPX Uacute p -5
+KPX Uacute period -105
+KPX Uacute r -47
+KPX Ucircumflex A -26
+KPX Udieresis A -26
+KPX Udieresis b 17
+KPX Udieresis comma -80
+KPX Udieresis m 3
+KPX Udieresis n -22
+KPX Udieresis p -5
+KPX Udieresis period -105
+KPX Udieresis r -47
+KPX Ugrave A -26
+KPX V A -10
+KPX V AE -19
+KPX V Aacute -10
+KPX V Acircumflex -10
+KPX V Adieresis -10
+KPX V Agrave -10
+KPX V Aring -10
+KPX V Atilde -10
+KPX V C -39
+KPX V G -38
+KPX V O -37
+KPX V Oacute -37
+KPX V Ocircumflex -37
+KPX V Odieresis -37
+KPX V Ograve -37
+KPX V Oslash -38
+KPX V Otilde -38
+KPX V S -41
+KPX V T 4
+KPX V a -65
+KPX V ae -37
+KPX V colon -130
+KPX V comma -134
+KPX V e -56
+KPX V g -57
+KPX V guillemotleft -83
+KPX V guilsinglleft -83
+KPX V hyphen -49
+KPX V i -65
+KPX V o -60
+KPX V oslash -57
+KPX V period -158
+KPX V r -51
+KPX V semicolon -121
+KPX V u -20
+KPX V y -24
+KPX W A -16
+KPX W AE -21
+KPX W Aacute -16
+KPX W Acircumflex -16
+KPX W Adieresis -16
+KPX W Agrave -16
+KPX W Aring -16
+KPX W Atilde -16
+KPX W C -14
+KPX W G -12
+KPX W O -10
+KPX W Oacute -10
+KPX W Ocircumflex -10
+KPX W Odieresis -10
+KPX W Ograve -10
+KPX W Oslash -7
+KPX W Otilde -10
+KPX W S -29
+KPX W T -2
+KPX W a -24
+KPX W ae 6
+KPX W colon -93
+KPX W comma -71
+KPX W e -10
+KPX W g -11
+KPX W guillemotleft -38
+KPX W guilsinglleft -38
+KPX W hyphen -7
+KPX W i -48
+KPX W o -14
+KPX W oslash -11
+KPX W period -95
+KPX W r -34
+KPX W semicolon -74
+KPX W u -2
+KPX W y -6
+KPX X C -52
+KPX X O -48
+KPX X Odieresis -48
+KPX X Q -48
+KPX X a -14
+KPX X e -36
+KPX X hyphen -81
+KPX X o -38
+KPX X u -39
+KPX X y -57
+KPX Y A -31
+KPX Y AE -34
+KPX Y Aacute -31
+KPX Y Acircumflex -31
+KPX Y Adieresis -31
+KPX Y Agrave -31
+KPX Y Aring -31
+KPX Y Atilde -31
+KPX Y C -60
+KPX Y G -60
+KPX Y O -59
+KPX Y Oacute -59
+KPX Y Ocircumflex -59
+KPX Y Odieresis -59
+KPX Y Ograve -59
+KPX Y Oslash -59
+KPX Y Otilde -59
+KPX Y S -62
+KPX Y T -17
+KPX Y a -67
+KPX Y ae -40
+KPX Y colon -145
+KPX Y comma -116
+KPX Y e -81
+KPX Y g -84
+KPX Y guillemotleft -119
+KPX Y guilsinglleft -119
+KPX Y hyphen -96
+KPX Y i -63
+KPX Y o -86
+KPX Y oslash -59
+KPX Y p -39
+KPX Y period -144
+KPX Y semicolon -119
+KPX Y u -50
+KPX Y v -44
+KPX Z v -54
+KPX Z y -64
+KPX a j -93
+KPX a quoteright -60
+KPX a v -33
+KPX a w -23
+KPX a y -44
+KPX aacute v -33
+KPX aacute w -23
+KPX aacute y -44
+KPX adieresis v -33
+KPX adieresis w -23
+KPX adieresis y -44
+KPX ae v 16
+KPX ae w 16
+KPX ae y 5
+KPX agrave v -33
+KPX agrave w -23
+KPX agrave y -44
+KPX aring v -33
+KPX aring w -23
+KPX aring y -44
+KPX b v -17
+KPX b w 0
+KPX b y -28
+KPX c h -6
+KPX c k -12
+KPX comma one -148
+KPX comma quotedblright -123
+KPX comma quoteright -142
+KPX e quoteright -43
+KPX e t -34
+KPX e v -28
+KPX e w -20
+KPX e x -5
+KPX e y -39
+KPX eacute v -28
+KPX eacute w -20
+KPX eacute y -39
+KPX ecircumflex v -28
+KPX ecircumflex w -20
+KPX ecircumflex y -39
+KPX eight four -65
+KPX eight one -85
+KPX eight seven -77
+KPX f a -44
+KPX f aacute -44
+KPX f adieresis -26
+KPX f ae -17
+KPX f aring -44
+KPX f e -58
+KPX f eacute -58
+KPX f f -46
+KPX f i -40
+KPX f j -63
+KPX f l -31
+KPX f o -65
+KPX f oacute -65
+KPX f odieresis -31
+KPX f oe -23
+KPX f oslash -36
+KPX f quoteright -62
+KPX f s -46
+KPX f t -10
+KPX five four -56
+KPX five one -90
+KPX five seven -78
+KPX four four -68
+KPX four one -73
+KPX four seven -99
+KPX g a -14
+KPX g adieresis -14
+KPX g ae 13
+KPX g aring -14
+KPX g e -7
+KPX g eacute -7
+KPX g l -37
+KPX g oacute -12
+KPX g odieresis -12
+KPX g r -4
+KPX guillemotright A -50
+KPX guillemotright AE -46
+KPX guillemotright Aacute -50
+KPX guillemotright Adieresis -50
+KPX guillemotright Aring -50
+KPX guillemotright T -128
+KPX guillemotright V -80
+KPX guillemotright W -37
+KPX guillemotright Y -119
+KPX guilsinglright A -50
+KPX guilsinglright AE -46
+KPX guilsinglright Aacute -50
+KPX guilsinglright Adieresis -50
+KPX guilsinglright Aring -50
+KPX guilsinglright T -128
+KPX guilsinglright V -80
+KPX guilsinglright W -37
+KPX guilsinglright Y -119
+KPX h quoteright -52
+KPX h y -37
+KPX hyphen A -29
+KPX hyphen AE -23
+KPX hyphen Aacute -29
+KPX hyphen Adieresis -29
+KPX hyphen Aring -29
+KPX hyphen T -98
+KPX hyphen V -44
+KPX hyphen W -4
+KPX hyphen Y -95
+KPX i T -64
+KPX i j -146
+KPX k a -12
+KPX k aacute -12
+KPX k adieresis -12
+KPX k ae 15
+KPX k aring -12
+KPX k comma -60
+KPX k e -34
+KPX k eacute -34
+KPX k g -43
+KPX k hyphen -104
+KPX k o -35
+KPX k oacute -35
+KPX k odieresis -35
+KPX k period -89
+KPX k s -14
+KPX k u -7
+KPX k udieresis -7
+KPX l v -86
+KPX l y -96
+KPX m p 19
+KPX m v 7
+KPX m w 13
+KPX m y -3
+KPX n T -48
+KPX n p -8
+KPX n quoteright -50
+KPX n v -25
+KPX n w -14
+KPX n y -36
+KPX nine four -58
+KPX nine one -84
+KPX nine seven -75
+KPX o T -89
+KPX o quoteright -41
+KPX o t -24
+KPX o v -25
+KPX o w -7
+KPX o x -28
+KPX o y -36
+KPX oacute v -25
+KPX oacute w -7
+KPX oacute y -36
+KPX ocircumflex t -24
+KPX odieresis t -24
+KPX odieresis v -25
+KPX odieresis w -7
+KPX odieresis x -28
+KPX odieresis y -36
+KPX ograve v -25
+KPX ograve w -7
+KPX ograve y -36
+KPX one comma -99
+KPX one eight -94
+KPX one five -76
+KPX one four -127
+KPX one nine -81
+KPX one one -69
+KPX one period -128
+KPX one seven -147
+KPX one six -119
+KPX one three -69
+KPX one two -54
+KPX one zero -102
+KPX p t -20
+KPX p y -25
+KPX period one -125
+KPX period quotedblright -114
+KPX period quoteright -133
+KPX q c -4
+KPX q u 37
+KPX quotedblbase A -6
+KPX quotedblbase AE -6
+KPX quotedblbase T -82
+KPX quotedblbase V -85
+KPX quotedblbase W -24
+KPX quotedblbase Y -83
+KPX quotedblleft A -66
+KPX quotedblleft AE -57
+KPX quotedblleft Aacute -66
+KPX quotedblleft Adieresis -66
+KPX quotedblleft Aring -66
+KPX quotedblleft T -46
+KPX quotedblleft V -18
+KPX quotedblleft W -8
+KPX quotedblleft Y -46
+KPX quotedblright A -67
+KPX quotedblright AE -76
+KPX quotedblright Aacute -66
+KPX quotedblright Adieresis -66
+KPX quotedblright Aring -66
+KPX quotedblright T -53
+KPX quotedblright V -22
+KPX quotedblright W -26
+KPX quotedblright Y -43
+KPX quoteleft A -87
+KPX quoteleft AE -78
+KPX quoteleft Aacute -87
+KPX quoteleft Adieresis -87
+KPX quoteleft Aring -87
+KPX quoteleft T -67
+KPX quoteleft V -39
+KPX quoteleft W -29
+KPX quoteleft Y -67
+KPX quoteright A -145
+KPX quoteright AE -154
+KPX quoteright Aacute -145
+KPX quoteright Adieresis -145
+KPX quoteright Aring -145
+KPX quoteright comma -201
+KPX quoteright d -129
+KPX quoteright o -135
+KPX quoteright period -224
+KPX quoteright r -150
+KPX quoteright s -144
+KPX quoteright t -118
+KPX quoteright v -112
+KPX quoteright w -108
+KPX quoteright y -122
+KPX r a -26
+KPX r aacute -26
+KPX r acircumflex -26
+KPX r adieresis -26
+KPX r ae 1
+KPX r agrave -26
+KPX r aring -26
+KPX r c -26
+KPX r ccedilla -34
+KPX r colon -86
+KPX r comma -104
+KPX r d -18
+KPX r e -17
+KPX r eacute -17
+KPX r ecircumflex -17
+KPX r egrave -17
+KPX r f -24
+KPX r g -15
+KPX r h -24
+KPX r hyphen -125
+KPX r i -34
+KPX r j -42
+KPX r k -34
+KPX r l -51
+KPX r m 27
+KPX r n 0
+KPX r o -24
+KPX r oacute -24
+KPX r ocircumflex -24
+KPX r odieresis -24
+KPX r oe 13
+KPX r ograve -24
+KPX r oslash -24
+KPX r p 21
+KPX r period -133
+KPX r q -16
+KPX r quoteright -44
+KPX r r -20
+KPX r s -29
+KPX r semicolon -75
+KPX r t 11
+KPX r u 11
+KPX r v 17
+KPX r w 17
+KPX r x -4
+KPX r y 6
+KPX r z -23
+KPX s quoteright -51
+KPX s t -17
+KPX seven colon -154
+KPX seven comma -146
+KPX seven eight -86
+KPX seven five -91
+KPX seven four -116
+KPX seven one -74
+KPX seven period -169
+KPX seven seven -69
+KPX seven six -104
+KPX seven three -79
+KPX seven two -76
+KPX six four -52
+KPX six one -68
+KPX six seven -55
+KPX t S -40
+KPX t a -25
+KPX t aacute -25
+KPX t adieresis -25
+KPX t ae 2
+KPX t aring -25
+KPX t colon -107
+KPX t e -43
+KPX t eacute -43
+KPX t h -8
+KPX t o -45
+KPX t oacute -45
+KPX t odieresis -45
+KPX t quoteright -100
+KPX t semicolon -86
+KPX three four -58
+KPX three one -82
+KPX three seven -75
+KPX two four -97
+KPX two one -73
+KPX two seven -79
+KPX u quoteright -43
+KPX v a -9
+KPX v aacute -9
+KPX v acircumflex -9
+KPX v adieresis -9
+KPX v ae 17
+KPX v agrave -9
+KPX v aring -9
+KPX v atilde -9
+KPX v c -22
+KPX v colon -75
+KPX v comma -118
+KPX v e -17
+KPX v eacute -17
+KPX v ecircumflex -17
+KPX v egrave -17
+KPX v g -14
+KPX v hyphen -30
+KPX v l -87
+KPX v o -23
+KPX v oacute -23
+KPX v odieresis -23
+KPX v ograve -23
+KPX v oslash -23
+KPX v period -143
+KPX v s -22
+KPX v semicolon -66
+KPX w a -9
+KPX w aacute -9
+KPX w acircumflex -9
+KPX w adieresis -9
+KPX w ae 17
+KPX w agrave -9
+KPX w aring -9
+KPX w atilde -9
+KPX w c -12
+KPX w colon -75
+KPX w comma -75
+KPX w e -4
+KPX w eacute -4
+KPX w ecircumflex -4
+KPX w egrave -4
+KPX w g -6
+KPX w hyphen -4
+KPX w l -53
+KPX w o -9
+KPX w oacute -9
+KPX w odieresis -9
+KPX w ograve -9
+KPX w oslash -6
+KPX w period -99
+KPX w s -22
+KPX w semicolon -66
+KPX x a -8
+KPX x c -35
+KPX x e -30
+KPX x eacute -30
+KPX x o -31
+KPX x q -33
+KPX y a -20
+KPX y aacute -20
+KPX y acircumflex -20
+KPX y adieresis -20
+KPX y ae 6
+KPX y agrave -20
+KPX y aring -20
+KPX y atilde -20
+KPX y c -33
+KPX y colon -86
+KPX y comma -122
+KPX y e -28
+KPX y eacute -28
+KPX y ecircumflex -28
+KPX y egrave -28
+KPX y g -25
+KPX y hyphen -29
+KPX y l -98
+KPX y o -34
+KPX y oacute -34
+KPX y odieresis -34
+KPX y ograve -34
+KPX y oslash -34
+KPX y period -148
+KPX y s -33
+KPX y semicolon -77
+KPX zero four -64
+KPX zero one -91
+KPX zero seven -82
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/n022023l.pfb b/Master/xemtex/gsfonts/n022023l.pfb
new file mode 100644
index 00000000000..c167c4bcc00
--- /dev/null
+++ b/Master/xemtex/gsfonts/n022023l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/n022023l.pfm b/Master/xemtex/gsfonts/n022023l.pfm
new file mode 100644
index 00000000000..1ff2fc5fe21
--- /dev/null
+++ b/Master/xemtex/gsfonts/n022023l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/n022024l.afm b/Master/xemtex/gsfonts/n022024l.afm
new file mode 100644
index 00000000000..6957af0ad47
--- /dev/null
+++ b/Master/xemtex/gsfonts/n022024l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName NimbusMonL-BoldObli
+FullName Nimbus Mono L Bold Oblique
+FamilyName Nimbus Mono L
+Weight Bold
+ItalicAngle -12.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -61 -278 840 871
+CapHeight 583
+XHeight 437
+Descender -205
+Ascender 624
+StartCharMetrics 316
+C 32 ; WX 600 ; N space ; B 386 0 386 0 ;
+C 33 ; WX 600 ; N exclam ; B 234 -15 501 638 ;
+C 34 ; WX 600 ; N quotedbl ; B 243 312 592 602 ;
+C 35 ; WX 600 ; N numbersign ; B 101 -92 623 675 ;
+C 36 ; WX 600 ; N dollar ; B 100 -123 610 684 ;
+C 37 ; WX 600 ; N percent ; B 131 -15 599 617 ;
+C 38 ; WX 600 ; N ampersand ; B 102 -14 557 550 ;
+C 39 ; WX 600 ; N quoteright ; B 222 331 483 623 ;
+C 40 ; WX 600 ; N parenleft ; B 304 -153 613 632 ;
+C 41 ; WX 600 ; N parenright ; B 94 -153 403 632 ;
+C 42 ; WX 600 ; N asterisk ; B 178 208 614 622 ;
+C 43 ; WX 600 ; N plus ; B 101 0 619 560 ;
+C 44 ; WX 600 ; N comma ; B 118 -158 379 134 ;
+C 45 ; WX 600 ; N hyphen ; B 101 229 619 329 ;
+C 46 ; WX 600 ; N period ; B 234 -15 387 117 ;
+C 47 ; WX 600 ; N slash ; B 69 -113 656 695 ;
+C 48 ; WX 600 ; N zero ; B 130 -15 602 638 ;
+C 49 ; WX 600 ; N one ; B 93 0 529 638 ;
+C 50 ; WX 600 ; N two ; B 54 0 602 638 ;
+C 51 ; WX 600 ; N three ; B 80 -15 609 638 ;
+C 52 ; WX 600 ; N four ; B 104 0 579 622 ;
+C 53 ; WX 600 ; N five ; B 83 -15 610 622 ;
+C 54 ; WX 600 ; N six ; B 154 -15 663 638 ;
+C 55 ; WX 600 ; N seven ; B 184 -1 640 622 ;
+C 56 ; WX 600 ; N eight ; B 114 -15 608 638 ;
+C 57 ; WX 600 ; N nine ; B 115 -15 624 638 ;
+C 58 ; WX 600 ; N colon ; B 234 -15 455 437 ;
+C 59 ; WX 600 ; N semicolon ; B 118 -158 431 437 ;
+C 60 ; WX 600 ; N less ; B 102 54 642 501 ;
+C 61 ; WX 600 ; N equal ; B 81 138 638 422 ;
+C 62 ; WX 600 ; N greater ; B 76 53 616 500 ;
+C 63 ; WX 600 ; N question ; B 197 -15 608 598 ;
+C 64 ; WX 600 ; N at ; B 98 -152 582 620 ;
+C 65 ; WX 600 ; N A ; B -11 0 633 583 ;
+C 66 ; WX 600 ; N B ; B 22 0 620 583 ;
+C 67 ; WX 600 ; N C ; B 80 -14 663 597 ;
+C 68 ; WX 600 ; N D ; B 23 0 622 583 ;
+C 69 ; WX 600 ; N E ; B 23 0 652 583 ;
+C 70 ; WX 600 ; N F ; B 23 0 674 583 ;
+C 71 ; WX 600 ; N G ; B 79 -14 667 597 ;
+C 72 ; WX 600 ; N H ; B 32 0 675 583 ;
+C 73 ; WX 600 ; N I ; B 93 0 632 583 ;
+C 74 ; WX 600 ; N J ; B 64 -14 727 583 ;
+C 75 ; WX 600 ; N K ; B 22 0 687 583 ;
+C 76 ; WX 600 ; N L ; B 42 0 616 583 ;
+C 77 ; WX 600 ; N M ; B -10 0 728 583 ;
+C 78 ; WX 600 ; N N ; B 21 0 706 583 ;
+C 79 ; WX 600 ; N O ; B 75 -14 649 597 ;
+C 80 ; WX 600 ; N P ; B 23 0 617 583 ;
+C 81 ; WX 600 ; N Q ; B 75 -145 649 597 ;
+C 82 ; WX 600 ; N R ; B 23 0 631 583 ;
+C 83 ; WX 600 ; N S ; B 72 -14 634 597 ;
+C 84 ; WX 600 ; N T ; B 121 0 682 583 ;
+C 85 ; WX 600 ; N U ; B 110 -14 705 583 ;
+C 86 ; WX 600 ; N V ; B 91 0 735 583 ;
+C 87 ; WX 600 ; N W ; B 98 0 725 583 ;
+C 88 ; WX 600 ; N X ; B 19 0 692 583 ;
+C 89 ; WX 600 ; N Y ; B 128 0 694 583 ;
+C 90 ; WX 600 ; N Z ; B 73 0 628 583 ;
+C 91 ; WX 600 ; N bracketleft ; B 219 -148 598 627 ;
+C 92 ; WX 600 ; N backslash ; B 219 -113 504 695 ;
+C 93 ; WX 600 ; N bracketright ; B 104 -148 483 627 ;
+C 94 ; WX 600 ; N asciicircum ; B 161 325 598 652 ;
+C 95 ; WX 600 ; N underscore ; B -61 -125 564 -75 ;
+C 96 ; WX 600 ; N quoteleft ; B 377 348 534 602 ;
+C 97 ; WX 600 ; N a ; B 65 -16 583 450 ;
+C 98 ; WX 600 ; N b ; B 2 -14 623 624 ;
+C 99 ; WX 600 ; N c ; B 93 -16 626 450 ;
+C 100 ; WX 600 ; N d ; B 74 -14 664 624 ;
+C 101 ; WX 600 ; N e ; B 74 -16 600 450 ;
+C 102 ; WX 600 ; N f ; B 84 0 691 623 ;
+C 103 ; WX 600 ; N g ; B 73 -205 675 451 ;
+C 104 ; WX 600 ; N h ; B 33 0 593 624 ;
+C 105 ; WX 600 ; N i ; B 72 0 550 623 ;
+C 106 ; WX 600 ; N j ; B 83 -205 581 623 ;
+C 107 ; WX 600 ; N k ; B 42 0 606 624 ;
+C 108 ; WX 600 ; N l ; B 72 0 550 624 ;
+C 109 ; WX 600 ; N m ; B -9 0 635 450 ;
+C 110 ; WX 600 ; N n ; B 33 0 583 450 ;
+C 111 ; WX 600 ; N o ; B 84 -16 609 450 ;
+C 112 ; WX 600 ; N p ; B -42 -205 623 450 ;
+C 113 ; WX 600 ; N q ; B 75 -205 696 450 ;
+C 114 ; WX 600 ; N r ; B 64 0 650 449 ;
+C 115 ; WX 600 ; N s ; B 83 -16 592 450 ;
+C 116 ; WX 600 ; N t ; B 94 -16 547 591 ;
+C 117 ; WX 600 ; N u ; B 94 -13 603 437 ;
+C 118 ; WX 600 ; N v ; B 81 0 683 437 ;
+C 119 ; WX 600 ; N w ; B 82 0 684 437 ;
+C 120 ; WX 600 ; N x ; B 30 0 641 437 ;
+C 121 ; WX 600 ; N y ; B -13 -205 662 437 ;
+C 122 ; WX 600 ; N z ; B 85 0 599 437 ;
+C 123 ; WX 600 ; N braceleft ; B 217 -153 556 623 ;
+C 124 ; WX 600 ; N bar ; B 227 -153 472 622 ;
+C 125 ; WX 600 ; N braceright ; B 144 -153 483 623 ;
+C 126 ; WX 600 ; N asciitilde ; B 114 179 606 385 ;
+C 161 ; WX 600 ; N exclamdown ; B 186 -227 453 426 ;
+C 162 ; WX 600 ; N cent ; B 144 -44 593 661 ;
+C 163 ; WX 600 ; N sterling ; B 64 0 571 598 ;
+C 164 ; WX 600 ; N fraction ; B 52 102 676 500 ;
+C 165 ; WX 600 ; N yen ; B 133 0 693 580 ;
+C 166 ; WX 600 ; N florin ; B 43 -123 672 638 ;
+C 167 ; WX 600 ; N section ; B 45 -170 643 583 ;
+C 168 ; WX 600 ; N currency ; B 96 64 626 519 ;
+C 169 ; WX 600 ; N quotesingle ; B 343 312 492 602 ;
+C 170 ; WX 600 ; N quotedblleft ; B 226 348 583 602 ;
+C 171 ; WX 600 ; N guillemotleft ; B 80 20 654 415 ;
+C 172 ; WX 600 ; N guilsinglleft ; B 80 20 425 415 ;
+C 173 ; WX 600 ; N guilsinglright ; B 273 20 617 415 ;
+C 174 ; WX 600 ; N fi ; B -4 0 633 624 ;
+C 175 ; WX 600 ; N fl ; B -8 0 645 623 ;
+C 177 ; WX 600 ; N endash ; B 101 229 619 329 ;
+C 178 ; WX 600 ; N dagger ; B 175 -92 589 622 ;
+C 179 ; WX 600 ; N daggerdbl ; B 123 -92 589 622 ;
+C 180 ; WX 600 ; N periodcentered ; B 283 214 436 346 ;
+C 182 ; WX 600 ; N paragraph ; B 108 -174 672 583 ;
+C 183 ; WX 600 ; N bullet ; B 211 154 517 453 ;
+C 184 ; WX 600 ; N quotesinglbase ; B 118 -158 379 134 ;
+C 185 ; WX 600 ; N quotedblbase ; B 66 -120 519 134 ;
+C 186 ; WX 600 ; N quotedblright ; B 166 348 619 602 ;
+C 187 ; WX 600 ; N guillemotright ; B 43 20 617 415 ;
+C 188 ; WX 600 ; N ellipsis ; B 34 -15 587 117 ;
+C 189 ; WX 600 ; N perthousand ; B 104 0 627 618 ;
+C 191 ; WX 600 ; N questiondown ; B 70 -227 481 386 ;
+C 193 ; WX 600 ; N grave ; B 264 496 464 696 ;
+C 194 ; WX 600 ; N acute ; B 362 496 616 696 ;
+C 195 ; WX 600 ; N circumflex ; B 237 497 590 696 ;
+C 196 ; WX 600 ; N tilde ; B 233 523 619 656 ;
+C 197 ; WX 600 ; N macron ; B 249 546 600 626 ;
+C 198 ; WX 600 ; N breve ; B 261 503 614 687 ;
+C 199 ; WX 600 ; N dotaccent ; B 365 534 488 654 ;
+C 200 ; WX 600 ; N dieresis ; B 261 534 592 654 ;
+C 202 ; WX 600 ; N ring ; B 303 486 554 727 ;
+C 203 ; WX 600 ; N cedilla ; B 143 -229 381 0 ;
+C 205 ; WX 600 ; N hungarumlaut ; B 237 496 616 694 ;
+C 206 ; WX 600 ; N ogonek ; B 222 -208 433 0 ;
+C 207 ; WX 600 ; N caron ; B 264 497 617 696 ;
+C 208 ; WX 600 ; N emdash ; B 30 229 690 329 ;
+C 225 ; WX 600 ; N AE ; B -10 0 717 583 ;
+C 227 ; WX 600 ; N ordfeminine ; B 170 182 559 595 ;
+C 232 ; WX 600 ; N Lslash ; B 43 0 616 583 ;
+C 233 ; WX 600 ; N Oslash ; B 4 -70 717 638 ;
+C 234 ; WX 600 ; N OE ; B 34 0 717 583 ;
+C 235 ; WX 600 ; N ordmasculine ; B 168 182 566 595 ;
+C 241 ; WX 600 ; N ae ; B 14 -16 665 450 ;
+C 245 ; WX 600 ; N dotlessi ; B 72 0 550 437 ;
+C 248 ; WX 600 ; N lslash ; B 72 0 557 624 ;
+C 249 ; WX 600 ; N oslash ; B 17 -70 669 494 ;
+C 250 ; WX 600 ; N oe ; B 28 -16 666 450 ;
+C 251 ; WX 600 ; N germandbls ; B 22 -16 569 623 ;
+C -1 ; WX 600 ; N Udieresis ; B 110 -14 705 800 ;
+C -1 ; WX 600 ; N Uacute ; B 110 -14 705 839 ;
+C -1 ; WX 600 ; N Scedilla ; B 72 -229 634 597 ;
+C -1 ; WX 600 ; N Tcaron ; B 121 0 682 839 ;
+C -1 ; WX 600 ; N Scaron ; B 72 -14 657 839 ;
+C -1 ; WX 600 ; N Rcaron ; B 23 0 631 839 ;
+C -1 ; WX 600 ; N Racute ; B 23 0 631 839 ;
+C -1 ; WX 600 ; N Sacute ; B 72 -14 634 839 ;
+C -1 ; WX 600 ; N Otilde ; B 75 -14 656 799 ;
+C -1 ; WX 600 ; N ucircumflex ; B 94 -13 603 696 ;
+C -1 ; WX 600 ; N Ohungarumlaut ; B 75 -14 680 837 ;
+C -1 ; WX 600 ; N Uhungarumlaut ; B 110 -14 705 837 ;
+C -1 ; WX 600 ; N Yacute ; B 128 0 694 839 ;
+C -1 ; WX 600 ; N Eth ; B 23 0 622 583 ;
+C -1 ; WX 600 ; N Dcroat ; B 23 0 622 583 ;
+C -1 ; WX 600 ; N Zacute ; B 73 0 628 839 ;
+C -1 ; WX 600 ; N Uring ; B 110 -14 705 871 ;
+C -1 ; WX 600 ; N gbreve ; B 73 -205 675 687 ;
+C -1 ; WX 600 ; N eogonek ; B 74 -208 600 450 ;
+C -1 ; WX 600 ; N edotaccent ; B 74 -16 600 654 ;
+C -1 ; WX 600 ; N ecaron ; B 74 -16 617 696 ;
+C -1 ; WX 600 ; N Ugrave ; B 110 -14 705 839 ;
+C -1 ; WX 600 ; N Thorn ; B 23 0 588 583 ;
+C -1 ; WX 600 ; N eacute ; B 74 -16 600 696 ;
+C -1 ; WX 600 ; N edieresis ; B 74 -16 600 654 ;
+C -1 ; WX 740 ; N dcaron ; B 74 -14 840 639 ;
+C -1 ; WX 600 ; N ccedilla ; B 92 -229 626 450 ;
+C -1 ; WX 600 ; N ccaron ; B 93 -16 627 696 ;
+C -1 ; WX 600 ; N cacute ; B 93 -16 626 696 ;
+C -1 ; WX 600 ; N aogonek ; B 65 -208 583 450 ;
+C -1 ; WX 600 ; N aring ; B 65 -16 583 727 ;
+C -1 ; WX 600 ; N atilde ; B 65 -16 612 656 ;
+C -1 ; WX 600 ; N abreve ; B 65 -16 614 687 ;
+C -1 ; WX 600 ; N egrave ; B 74 -16 600 696 ;
+C -1 ; WX 600 ; N agrave ; B 65 -16 583 696 ;
+C -1 ; WX 600 ; N aacute ; B 66 -16 584 696 ;
+C -1 ; WX 600 ; N adieresis ; B 65 -16 583 654 ;
+C -1 ; WX 600 ; N Uogonek ; B 110 -208 705 583 ;
+C -1 ; WX 600 ; N ugrave ; B 94 -13 603 696 ;
+C -1 ; WX 600 ; N uacute ; B 94 -13 603 696 ;
+C -1 ; WX 600 ; N udieresis ; B 94 -13 603 654 ;
+C -1 ; WX 600 ; N tcaron ; B 94 -16 700 639 ;
+C -1 ; WX 600 ; N scommaaccent ; B 83 -278 592 450 ;
+C -1 ; WX 600 ; N Zcaron ; B 73 0 644 839 ;
+C -1 ; WX 600 ; N ecircumflex ; B 74 -16 600 696 ;
+C -1 ; WX 600 ; N Ucircumflex ; B 110 -14 705 839 ;
+C -1 ; WX 600 ; N acircumflex ; B 65 -16 583 696 ;
+C -1 ; WX 600 ; N Zdotaccent ; B 73 0 628 793 ;
+C -1 ; WX 600 ; N scaron ; B 83 -16 627 696 ;
+C -1 ; WX 600 ; N Amacron ; B -11 0 633 776 ;
+C -1 ; WX 600 ; N sacute ; B 83 -16 616 696 ;
+C -1 ; WX 600 ; N Tcommaaccent ; B 121 -278 682 583 ;
+C -1 ; WX 600 ; N Ydieresis ; B 128 0 694 800 ;
+C -1 ; WX 600 ; N thorn ; B -42 -205 623 624 ;
+C -1 ; WX 600 ; N Emacron ; B 23 0 652 776 ;
+C -1 ; WX 600 ; N Ograve ; B 75 -14 649 839 ;
+C -1 ; WX 600 ; N Oacute ; B 75 -14 649 839 ;
+C -1 ; WX 600 ; N Odieresis ; B 75 -14 649 800 ;
+C -1 ; WX 600 ; N Ntilde ; B 21 0 706 799 ;
+C -1 ; WX 600 ; N Ncaron ; B 21 0 706 839 ;
+C -1 ; WX 600 ; N Nacute ; B 21 0 706 839 ;
+C -1 ; WX 600 ; N Lcaron ; B 42 0 680 598 ;
+C -1 ; WX 600 ; N Lacute ; B 42 0 616 839 ;
+C -1 ; WX 600 ; N Idotaccent ; B 93 0 632 793 ;
+C -1 ; WX 600 ; N racute ; B 64 0 650 696 ;
+C -1 ; WX 600 ; N Icircumflex ; B 93 0 632 839 ;
+C -1 ; WX 600 ; N ohungarumlaut ; B 84 -16 616 694 ;
+C -1 ; WX 600 ; N otilde ; B 84 -16 626 656 ;
+C -1 ; WX 600 ; N Euro ; B 54 -14 639 597 ;
+C -1 ; WX 600 ; N ocircumflex ; B 84 -16 609 696 ;
+C -1 ; WX 600 ; N onesuperior ; B 224 247 494 638 ;
+C -1 ; WX 600 ; N twosuperior ; B 202 247 538 637 ;
+C -1 ; WX 600 ; N threesuperior ; B 218 238 543 637 ;
+C -1 ; WX 600 ; N Igrave ; B 93 0 632 839 ;
+C -1 ; WX 600 ; N Iacute ; B 93 0 632 839 ;
+C -1 ; WX 600 ; N Imacron ; B 93 0 632 776 ;
+C -1 ; WX 600 ; N Iogonek ; B 93 -208 632 583 ;
+C -1 ; WX 600 ; N Idieresis ; B 93 0 632 800 ;
+C -1 ; WX 600 ; N Gbreve ; B 79 -14 667 831 ;
+C -1 ; WX 600 ; N Umacron ; B 110 -14 705 776 ;
+C -1 ; WX 600 ; N Kcommaaccent ; B 22 -278 687 583 ;
+C -1 ; WX 600 ; N ograve ; B 84 -16 609 696 ;
+C -1 ; WX 600 ; N Scommaaccent ; B 72 -278 634 597 ;
+C -1 ; WX 600 ; N Eogonek ; B 23 -208 652 583 ;
+C -1 ; WX 600 ; N oacute ; B 84 -16 609 696 ;
+C -1 ; WX 600 ; N Edotaccent ; B 23 0 652 793 ;
+C -1 ; WX 600 ; N iogonek ; B 72 -208 550 623 ;
+C -1 ; WX 600 ; N gcommaaccent ; B 73 -205 675 722 ;
+C -1 ; WX 600 ; N odieresis ; B 84 -16 609 654 ;
+C -1 ; WX 600 ; N ntilde ; B 33 0 613 656 ;
+C -1 ; WX 600 ; N ncaron ; B 33 0 617 696 ;
+C -1 ; WX 600 ; N Ecaron ; B 23 0 652 839 ;
+C -1 ; WX 600 ; N Ecircumflex ; B 23 0 652 839 ;
+C -1 ; WX 600 ; N scedilla ; B 83 -229 592 450 ;
+C -1 ; WX 600 ; N rcaron ; B 64 0 650 696 ;
+C -1 ; WX 600 ; N Egrave ; B 23 0 652 839 ;
+C -1 ; WX 600 ; N Eacute ; B 23 0 652 839 ;
+C -1 ; WX 600 ; N Gcommaaccent ; B 79 -278 667 597 ;
+C -1 ; WX 600 ; N Rcommaaccent ; B 23 -278 631 583 ;
+C -1 ; WX 600 ; N Edieresis ; B 23 0 652 800 ;
+C -1 ; WX 600 ; N nacute ; B 33 0 616 696 ;
+C -1 ; WX 600 ; N uogonek ; B 94 -208 603 437 ;
+C -1 ; WX 600 ; N umacron ; B 94 -13 603 626 ;
+C -1 ; WX 600 ; N Dcaron ; B 23 0 622 839 ;
+C -1 ; WX 600 ; N lcaron ; B 72 0 700 639 ;
+C -1 ; WX 600 ; N Ccaron ; B 80 -14 663 839 ;
+C -1 ; WX 600 ; N Cacute ; B 80 -14 663 839 ;
+C -1 ; WX 600 ; N Ccedilla ; B 80 -229 663 597 ;
+C -1 ; WX 600 ; N degree ; B 210 243 568 596 ;
+C -1 ; WX 600 ; N Aogonek ; B -11 -208 633 583 ;
+C -1 ; WX 600 ; N minus ; B 101 230 619 330 ;
+C -1 ; WX 600 ; N multiply ; B 126 80 592 480 ;
+C -1 ; WX 600 ; N divide ; B 101 28 619 532 ;
+C -1 ; WX 600 ; N Aring ; B -11 0 633 871 ;
+C -1 ; WX 600 ; N trademark ; B 60 220 732 583 ;
+C -1 ; WX 600 ; N rcommaaccent ; B 64 -278 650 449 ;
+C -1 ; WX 600 ; N lacute ; B 72 0 600 839 ;
+C -1 ; WX 600 ; N omacron ; B 84 -16 609 626 ;
+C -1 ; WX 600 ; N Atilde ; B -11 0 633 799 ;
+C -1 ; WX 600 ; N icircumflex ; B 72 0 573 696 ;
+C -1 ; WX 600 ; N igrave ; B 72 0 550 696 ;
+C -1 ; WX 600 ; N ncommaaccent ; B 33 -278 583 450 ;
+C -1 ; WX 600 ; N lcommaaccent ; B 72 -278 550 624 ;
+C -1 ; WX 600 ; N plusminus ; B 52 0 640 624 ;
+C -1 ; WX 600 ; N onehalf ; B 25 0 685 638 ;
+C -1 ; WX 600 ; N onequarter ; B 25 0 673 638 ;
+C -1 ; WX 600 ; N threequarters ; B 18 0 673 637 ;
+C -1 ; WX 600 ; N iacute ; B 71 0 574 696 ;
+C -1 ; WX 600 ; N Abreve ; B -11 0 633 831 ;
+C -1 ; WX 600 ; N kcommaaccent ; B 42 -278 606 624 ;
+C -1 ; WX 600 ; N Omacron ; B 75 -14 649 776 ;
+C -1 ; WX 600 ; N imacron ; B 72 0 600 626 ;
+C -1 ; WX 600 ; N emacron ; B 74 -16 600 626 ;
+C -1 ; WX 600 ; N amacron ; B 65 -16 600 626 ;
+C -1 ; WX 600 ; N tcommaaccent ; B 94 -278 547 591 ;
+C -1 ; WX 600 ; N ydieresis ; B -13 -205 662 654 ;
+C -1 ; WX 600 ; N zdotaccent ; B 85 0 599 654 ;
+C -1 ; WX 600 ; N zcaron ; B 85 0 619 696 ;
+C -1 ; WX 600 ; N zacute ; B 85 0 616 696 ;
+C -1 ; WX 600 ; N yacute ; B -13 -205 662 696 ;
+C -1 ; WX 600 ; N uhungarumlaut ; B 94 -13 616 694 ;
+C -1 ; WX 600 ; N eth ; B 83 -16 617 646 ;
+C -1 ; WX 600 ; N uring ; B 94 -13 603 727 ;
+C -1 ; WX 600 ; N Ocircumflex ; B 75 -14 649 839 ;
+C -1 ; WX 600 ; N commaaccent ; B 147 -278 342 -59 ;
+C -1 ; WX 600 ; N copyright ; B 48 -15 675 598 ;
+C -1 ; WX 600 ; N registered ; B 48 -15 675 598 ;
+C -1 ; WX 600 ; N Acircumflex ; B -11 0 633 839 ;
+C -1 ; WX 600 ; N idieresis ; B 72 0 575 656 ;
+C -1 ; WX 600 ; N lozenge ; B 133 -19 590 593 ;
+C -1 ; WX 600 ; N Delta ; B 15 0 585 583 ;
+C -1 ; WX 600 ; N notequal ; B 81 22 638 525 ;
+C -1 ; WX 600 ; N radical ; B 74 -60 782 697 ;
+C -1 ; WX 600 ; N Agrave ; B -11 0 633 839 ;
+C -1 ; WX 600 ; N Aacute ; B -11 0 633 839 ;
+C -1 ; WX 600 ; N lessequal ; B 50 0 666 591 ;
+C -1 ; WX 600 ; N greaterequal ; B 52 0 660 591 ;
+C -1 ; WX 600 ; N logicalnot ; B 125 115 560 445 ;
+C -1 ; WX 600 ; N summation ; B 32 -97 668 671 ;
+C -1 ; WX 600 ; N partialdiff ; B 138 -16 579 590 ;
+C -1 ; WX 600 ; N Ncommaaccent ; B 21 -278 706 583 ;
+C -1 ; WX 600 ; N dcroat ; B 74 -14 712 624 ;
+C -1 ; WX 600 ; N brokenbar ; B 227 -153 472 622 ;
+C -1 ; WX 600 ; N Lcommaaccent ; B 42 -278 616 583 ;
+C -1 ; WX 600 ; N Adieresis ; B -11 0 633 800 ;
+C -1 ; WX 600 ; N mu ; B 72 -153 603 440 ;
+C -1 ; WX 600 ; N .notdef ; B 386 0 386 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -24
+KPX A Ccedilla -30
+KPX A G -20
+KPX A O -26
+KPX A Odieresis -26
+KPX A Q -25
+KPX A T -35
+KPX A U -33
+KPX A Uacute -33
+KPX A Ucircumflex -33
+KPX A Udieresis -33
+KPX A Ugrave -33
+KPX A V -63
+KPX A W -21
+KPX A Y -34
+KPX A a 8
+KPX A b 39
+KPX A c -12
+KPX A ccedilla -15
+KPX A comma -52
+KPX A d -4
+KPX A e -5
+KPX A g -5
+KPX A guillemotleft -44
+KPX A guilsinglleft -44
+KPX A hyphen -23
+KPX A o -11
+KPX A period -67
+KPX A q -10
+KPX A quotedblright -89
+KPX A quoteright -116
+KPX A t -25
+KPX A u -18
+KPX A v -41
+KPX A w -15
+KPX A y -41
+KPX Aacute C -24
+KPX Aacute G -20
+KPX Aacute O -26
+KPX Aacute Q -25
+KPX Aacute T -35
+KPX Aacute U -33
+KPX Aacute V -63
+KPX Aacute W -21
+KPX Aacute Y -34
+KPX Aacute a 8
+KPX Aacute b 39
+KPX Aacute c -12
+KPX Aacute comma -52
+KPX Aacute d -4
+KPX Aacute e -5
+KPX Aacute g -5
+KPX Aacute guillemotleft -44
+KPX Aacute guilsinglleft -44
+KPX Aacute hyphen -23
+KPX Aacute o -11
+KPX Aacute period -67
+KPX Aacute q -10
+KPX Aacute quoteright -116
+KPX Aacute t -25
+KPX Aacute u -18
+KPX Aacute v -41
+KPX Aacute w -15
+KPX Aacute y -41
+KPX Acircumflex C -24
+KPX Acircumflex G -20
+KPX Acircumflex O -26
+KPX Acircumflex Q -25
+KPX Acircumflex T -35
+KPX Acircumflex U -33
+KPX Acircumflex V -63
+KPX Acircumflex W -21
+KPX Acircumflex Y -34
+KPX Acircumflex comma -52
+KPX Acircumflex period -67
+KPX Adieresis C -24
+KPX Adieresis G -20
+KPX Adieresis O -26
+KPX Adieresis Q -25
+KPX Adieresis T -35
+KPX Adieresis U -33
+KPX Adieresis V -63
+KPX Adieresis W -21
+KPX Adieresis Y -34
+KPX Adieresis a 8
+KPX Adieresis b 39
+KPX Adieresis c -12
+KPX Adieresis comma -52
+KPX Adieresis d -4
+KPX Adieresis g -5
+KPX Adieresis guillemotleft -44
+KPX Adieresis guilsinglleft -44
+KPX Adieresis hyphen -23
+KPX Adieresis o -11
+KPX Adieresis period -67
+KPX Adieresis q -10
+KPX Adieresis quotedblright -89
+KPX Adieresis quoteright -116
+KPX Adieresis t -25
+KPX Adieresis u -18
+KPX Adieresis v -41
+KPX Adieresis w -15
+KPX Adieresis y -41
+KPX Agrave C -24
+KPX Agrave G -20
+KPX Agrave O -26
+KPX Agrave Q -25
+KPX Agrave T -35
+KPX Agrave U -33
+KPX Agrave V -63
+KPX Agrave W -21
+KPX Agrave Y -34
+KPX Agrave comma -52
+KPX Agrave period -67
+KPX Aring C -24
+KPX Aring G -20
+KPX Aring O -26
+KPX Aring Q -25
+KPX Aring T -35
+KPX Aring U -33
+KPX Aring V -63
+KPX Aring W -21
+KPX Aring Y -34
+KPX Aring a 8
+KPX Aring b 39
+KPX Aring c -12
+KPX Aring comma -52
+KPX Aring d -4
+KPX Aring e -5
+KPX Aring g -5
+KPX Aring guillemotleft -44
+KPX Aring guilsinglleft -44
+KPX Aring hyphen -23
+KPX Aring o -11
+KPX Aring period -67
+KPX Aring q -10
+KPX Aring quotedblright -89
+KPX Aring quoteright -116
+KPX Aring t -25
+KPX Aring u -18
+KPX Aring v -41
+KPX Aring w -15
+KPX Aring y -41
+KPX Atilde C -24
+KPX Atilde G -20
+KPX Atilde O -26
+KPX Atilde Q -25
+KPX Atilde T -35
+KPX Atilde U -33
+KPX Atilde V -63
+KPX Atilde W -21
+KPX Atilde Y -34
+KPX Atilde comma -52
+KPX Atilde period -67
+KPX B A -2
+KPX B AE -3
+KPX B Aacute -2
+KPX B Acircumflex -2
+KPX B Adieresis -2
+KPX B Aring -2
+KPX B Atilde -2
+KPX B O -14
+KPX B OE 7
+KPX B Oacute -14
+KPX B Ocircumflex -14
+KPX B Odieresis -14
+KPX B Ograve -14
+KPX B Oslash -12
+KPX B V -29
+KPX B W -10
+KPX B Y -50
+KPX C A 2
+KPX C AE 2
+KPX C Aacute 2
+KPX C Adieresis 2
+KPX C Aring 2
+KPX C H -18
+KPX C K -13
+KPX C O -19
+KPX C Oacute -19
+KPX C Odieresis -19
+KPX Ccedilla A -5
+KPX D A -32
+KPX D Aacute -32
+KPX D Acircumflex -32
+KPX D Adieresis -32
+KPX D Agrave -32
+KPX D Aring -32
+KPX D Atilde -32
+KPX D J -38
+KPX D T -36
+KPX D V -40
+KPX D W -16
+KPX D X -40
+KPX D Y -61
+KPX F A -47
+KPX F Aacute -47
+KPX F Acircumflex -47
+KPX F Adieresis -47
+KPX F Agrave -47
+KPX F Aring -47
+KPX F Atilde -47
+KPX F J -83
+KPX F O -32
+KPX F Odieresis -32
+KPX F a -44
+KPX F aacute -45
+KPX F adieresis -44
+KPX F ae -22
+KPX F aring -44
+KPX F comma -172
+KPX F e -51
+KPX F eacute -51
+KPX F hyphen -61
+KPX F i -50
+KPX F j -58
+KPX F o -55
+KPX F oacute -55
+KPX F odieresis -55
+KPX F oe -20
+KPX F oslash -55
+KPX F period -191
+KPX F r -37
+KPX F u -6
+KPX G A 0
+KPX G AE 0
+KPX G Aacute 0
+KPX G Acircumflex 0
+KPX G Adieresis 0
+KPX G Agrave 0
+KPX G Aring 0
+KPX G Atilde 0
+KPX G T -30
+KPX G V 1
+KPX G W 5
+KPX G Y -20
+KPX J A -15
+KPX J AE -24
+KPX J Adieresis -15
+KPX J Aring -15
+KPX K C -32
+KPX K G -30
+KPX K O -31
+KPX K OE -9
+KPX K Oacute -31
+KPX K Odieresis -31
+KPX K S -17
+KPX K T -20
+KPX K a -1
+KPX K adieresis -1
+KPX K ae 23
+KPX K aring -1
+KPX K e -14
+KPX K hyphen -50
+KPX K o -20
+KPX K oacute -20
+KPX K odieresis -20
+KPX K u -30
+KPX K udieresis -30
+KPX K y -56
+KPX L A 9
+KPX L AE 9
+KPX L Aacute 9
+KPX L Adieresis 9
+KPX L Aring 9
+KPX L C -19
+KPX L Ccedilla -19
+KPX L G -19
+KPX L O -16
+KPX L Oacute -16
+KPX L Ocircumflex -16
+KPX L Odieresis -16
+KPX L Ograve -16
+KPX L Otilde -16
+KPX L S -32
+KPX L T -60
+KPX L U -31
+KPX L Udieresis -31
+KPX L V -61
+KPX L W -23
+KPX L Y -59
+KPX L hyphen 5
+KPX L quotedblright -82
+KPX L quoteright -107
+KPX L u -13
+KPX L udieresis -14
+KPX L y -36
+KPX N A -10
+KPX N AE -11
+KPX N Aacute -10
+KPX N Adieresis -10
+KPX N Aring -10
+KPX N C -13
+KPX N Ccedilla -10
+KPX N G -12
+KPX N O -10
+KPX N Oacute -10
+KPX N Odieresis -10
+KPX N a -14
+KPX N aacute -15
+KPX N adieresis -14
+KPX N ae 14
+KPX N aring -14
+KPX N comma -79
+KPX N e -7
+KPX N eacute -7
+KPX N o -12
+KPX N oacute -12
+KPX N odieresis -12
+KPX N oslash -6
+KPX N period -98
+KPX N u -12
+KPX N udieresis -12
+KPX O A -21
+KPX O AE -20
+KPX O Aacute -21
+KPX O Adieresis -21
+KPX O Aring -21
+KPX O T -23
+KPX O V -32
+KPX O W -4
+KPX O X -28
+KPX O Y -51
+KPX Oacute A -21
+KPX Oacute T -23
+KPX Oacute V -32
+KPX Oacute W -4
+KPX Oacute Y -51
+KPX Ocircumflex T -23
+KPX Ocircumflex V -32
+KPX Ocircumflex Y -51
+KPX Odieresis A -21
+KPX Odieresis T -23
+KPX Odieresis V -32
+KPX Odieresis W -4
+KPX Odieresis X -28
+KPX Odieresis Y -51
+KPX Ograve T -23
+KPX Ograve V -32
+KPX Ograve Y -51
+KPX Oslash A -13
+KPX Otilde T -23
+KPX Otilde V -32
+KPX Otilde Y -51
+KPX P A -65
+KPX P AE -63
+KPX P Aacute -65
+KPX P Adieresis -65
+KPX P Aring -65
+KPX P J -80
+KPX P a -54
+KPX P aacute -54
+KPX P adieresis -54
+KPX P ae -31
+KPX P aring -54
+KPX P comma -164
+KPX P e -43
+KPX P eacute -43
+KPX P hyphen -39
+KPX P o -47
+KPX P oacute -47
+KPX P odieresis -47
+KPX P oe -18
+KPX P oslash -46
+KPX P period -183
+KPX R C -19
+KPX R Ccedilla -18
+KPX R G -18
+KPX R O -18
+KPX R OE 3
+KPX R Oacute -18
+KPX R Odieresis -18
+KPX R T -36
+KPX R U -20
+KPX R Udieresis -21
+KPX R V -34
+KPX R W -10
+KPX R Y -35
+KPX R a 7
+KPX R aacute 6
+KPX R adieresis 7
+KPX R ae 32
+KPX R aring 7
+KPX R e -4
+KPX R eacute -4
+KPX R hyphen -30
+KPX R o -9
+KPX R oacute -9
+KPX R odieresis -9
+KPX R oe 24
+KPX R u -9
+KPX R uacute -9
+KPX R udieresis -9
+KPX R y -22
+KPX S A -16
+KPX S AE -16
+KPX S Aacute -16
+KPX S Adieresis -16
+KPX S Aring -16
+KPX S T -47
+KPX S V -16
+KPX S W -15
+KPX S Y -37
+KPX S t -20
+KPX T A -35
+KPX T AE -35
+KPX T Aacute -35
+KPX T Acircumflex -35
+KPX T Adieresis -35
+KPX T Agrave -35
+KPX T Aring -35
+KPX T Atilde -35
+KPX T C -27
+KPX T G -27
+KPX T J -72
+KPX T O -22
+KPX T OE 0
+KPX T Oacute -22
+KPX T Ocircumflex -22
+KPX T Odieresis -22
+KPX T Ograve -22
+KPX T Oslash -23
+KPX T Otilde -22
+KPX T S -49
+KPX T V 4
+KPX T W -2
+KPX T Y -17
+KPX T a -39
+KPX T ae -17
+KPX T c -42
+KPX T colon -119
+KPX T comma -136
+KPX T e -31
+KPX T g -28
+KPX T guillemotleft -81
+KPX T guilsinglleft -81
+KPX T hyphen -96
+KPX T i -46
+KPX T j -53
+KPX T o -36
+KPX T oslash -36
+KPX T period -154
+KPX T r -33
+KPX T s -43
+KPX T semicolon -106
+KPX T u -1
+KPX T v 6
+KPX T w 5
+KPX T y -4
+KPX U A -23
+KPX U AE -22
+KPX U Aacute -23
+KPX U Acircumflex -23
+KPX U Adieresis -23
+KPX U Aring -23
+KPX U Atilde -23
+KPX U comma -98
+KPX U m 14
+KPX U n -10
+KPX U p -3
+KPX U period -118
+KPX U r -36
+KPX Uacute A -23
+KPX Uacute comma -98
+KPX Uacute m 14
+KPX Uacute n -10
+KPX Uacute p -3
+KPX Uacute period -118
+KPX Uacute r -36
+KPX Ucircumflex A -23
+KPX Udieresis A -23
+KPX Udieresis b 20
+KPX Udieresis comma -98
+KPX Udieresis m 14
+KPX Udieresis n -10
+KPX Udieresis p -3
+KPX Udieresis period -118
+KPX Udieresis r -36
+KPX Ugrave A -23
+KPX V A -12
+KPX V AE -21
+KPX V Aacute -12
+KPX V Acircumflex -12
+KPX V Adieresis -12
+KPX V Agrave -12
+KPX V Aring -12
+KPX V Atilde -12
+KPX V C -34
+KPX V G -34
+KPX V O -32
+KPX V Oacute -32
+KPX V Ocircumflex -32
+KPX V Odieresis -32
+KPX V Ograve -32
+KPX V Oslash -32
+KPX V Otilde -32
+KPX V S -35
+KPX V T 3
+KPX V a -59
+KPX V ae -30
+KPX V colon -139
+KPX V comma -150
+KPX V e -51
+KPX V g -50
+KPX V guillemotleft -83
+KPX V guilsinglleft -83
+KPX V hyphen -45
+KPX V i -64
+KPX V o -56
+KPX V oslash -51
+KPX V period -169
+KPX V r -51
+KPX V semicolon -127
+KPX V u -21
+KPX V y -22
+KPX W A -15
+KPX W AE -14
+KPX W Aacute -15
+KPX W Acircumflex -15
+KPX W Adieresis -15
+KPX W Agrave -15
+KPX W Aring -15
+KPX W Atilde -15
+KPX W C -9
+KPX W G -8
+KPX W O -7
+KPX W Oacute -7
+KPX W Ocircumflex -7
+KPX W Odieresis -7
+KPX W Ograve -7
+KPX W Oslash -3
+KPX W Otilde -7
+KPX W S -21
+KPX W T -1
+KPX W a -14
+KPX W ae 15
+KPX W colon -103
+KPX W comma -86
+KPX W e -6
+KPX W g -5
+KPX W guillemotleft -38
+KPX W guilsinglleft -38
+KPX W hyphen -3
+KPX W i -40
+KPX W o -11
+KPX W oslash -6
+KPX W period -105
+KPX W r -28
+KPX W semicolon -86
+KPX W u -3
+KPX W y -6
+KPX X C -33
+KPX X O -31
+KPX X Odieresis -31
+KPX X Q -30
+KPX X a -7
+KPX X e -20
+KPX X hyphen -55
+KPX X o -26
+KPX X u -36
+KPX X y -49
+KPX Y A -32
+KPX Y AE -35
+KPX Y Aacute -32
+KPX Y Acircumflex -32
+KPX Y Adieresis -32
+KPX Y Agrave -32
+KPX Y Aring -32
+KPX Y Atilde -32
+KPX Y C -54
+KPX Y G -54
+KPX Y O -52
+KPX Y Oacute -52
+KPX Y Ocircumflex -52
+KPX Y Odieresis -52
+KPX Y Ograve -52
+KPX Y Oslash -50
+KPX Y Otilde -52
+KPX Y S -55
+KPX Y T -17
+KPX Y a -61
+KPX Y ae -36
+KPX Y colon -157
+KPX Y comma -123
+KPX Y e -63
+KPX Y g -62
+KPX Y guillemotleft -99
+KPX Y guilsinglleft -99
+KPX Y hyphen -87
+KPX Y i -63
+KPX Y o -68
+KPX Y oslash -56
+KPX Y p -34
+KPX Y period -141
+KPX Y semicolon -139
+KPX Y u -48
+KPX Y v -38
+KPX Z v -47
+KPX Z y -55
+KPX a j -85
+KPX a quoteright -79
+KPX a v -25
+KPX a w -13
+KPX a y -36
+KPX aacute v -25
+KPX aacute w -13
+KPX aacute y -36
+KPX adieresis v -25
+KPX adieresis w -13
+KPX adieresis y -36
+KPX ae v 24
+KPX ae w 31
+KPX ae y 13
+KPX agrave v -25
+KPX agrave w -13
+KPX agrave y -36
+KPX aring v -25
+KPX aring w -13
+KPX aring y -36
+KPX b v -4
+KPX b w 3
+KPX b y -15
+KPX c h 8
+KPX c k 3
+KPX comma one -133
+KPX comma quotedblright -142
+KPX comma quoteright -170
+KPX e quoteright -64
+KPX e t -16
+KPX e v -14
+KPX e w -4
+KPX e x 3
+KPX e y -25
+KPX eacute v -14
+KPX eacute w -4
+KPX eacute y -25
+KPX ecircumflex v -14
+KPX ecircumflex w -4
+KPX ecircumflex y -25
+KPX eight four -63
+KPX eight one -80
+KPX eight seven -75
+KPX f a -38
+KPX f aacute -38
+KPX f adieresis -38
+KPX f ae -13
+KPX f aring -38
+KPX f e -46
+KPX f eacute -46
+KPX f f -46
+KPX f i -40
+KPX f j -63
+KPX f l -30
+KPX f o -51
+KPX f oacute -51
+KPX f odieresis -48
+KPX f oe -17
+KPX f oslash -34
+KPX f quoteright -78
+KPX f s -46
+KPX f t -10
+KPX five four -58
+KPX five one -80
+KPX five seven -80
+KPX four four -68
+KPX four one -72
+KPX four seven -100
+KPX g a -7
+KPX g adieresis -7
+KPX g ae 21
+KPX g aring -7
+KPX g e -1
+KPX g eacute -1
+KPX g l -38
+KPX g oacute -6
+KPX g odieresis -6
+KPX g r -5
+KPX guillemotright A -42
+KPX guillemotright AE -39
+KPX guillemotright Aacute -42
+KPX guillemotright Adieresis -42
+KPX guillemotright Aring -42
+KPX guillemotright T -81
+KPX guillemotright V -80
+KPX guillemotright W -35
+KPX guillemotright Y -96
+KPX guilsinglright A -42
+KPX guilsinglright AE -39
+KPX guilsinglright Aacute -42
+KPX guilsinglright Adieresis -42
+KPX guilsinglright Aring -42
+KPX guilsinglright T -81
+KPX guilsinglright V -80
+KPX guilsinglright W -35
+KPX guilsinglright Y -96
+KPX h quoteright -71
+KPX h y -29
+KPX hyphen A -21
+KPX hyphen AE -17
+KPX hyphen Aacute -21
+KPX hyphen Adieresis -21
+KPX hyphen Aring -21
+KPX hyphen T -93
+KPX hyphen V -41
+KPX hyphen W -1
+KPX hyphen Y -84
+KPX i T -64
+KPX i j -145
+KPX k a -5
+KPX k aacute -5
+KPX k adieresis -5
+KPX k ae 20
+KPX k aring -5
+KPX k comma -67
+KPX k e -17
+KPX k eacute -17
+KPX k g -16
+KPX k hyphen -53
+KPX k o -22
+KPX k oacute -22
+KPX k odieresis -22
+KPX k period -80
+KPX k s -13
+KPX k u -7
+KPX k udieresis -7
+KPX l v -77
+KPX l y -78
+KPX m p 31
+KPX m v 13
+KPX m w 22
+KPX m y 2
+KPX n T -47
+KPX n p 2
+KPX n quoteright -69
+KPX n v -17
+KPX n w -6
+KPX n y -28
+KPX nine four -59
+KPX nine one -76
+KPX nine seven -68
+KPX o T -39
+KPX o quoteright -61
+KPX o t -16
+KPX o v -10
+KPX o w -3
+KPX o x -10
+KPX o y -21
+KPX oacute v -10
+KPX oacute w -3
+KPX oacute y -21
+KPX ocircumflex t -16
+KPX odieresis t -16
+KPX odieresis v -10
+KPX odieresis w -3
+KPX odieresis x -10
+KPX odieresis y -21
+KPX ograve v -10
+KPX ograve w -3
+KPX ograve y -21
+KPX one comma -104
+KPX one eight -83
+KPX one five -63
+KPX one four -95
+KPX one nine -80
+KPX one one -68
+KPX one period -119
+KPX one seven -146
+KPX one six -107
+KPX one three -62
+KPX one two -53
+KPX one zero -95
+KPX p t -7
+KPX p y -12
+KPX period one -118
+KPX period quotedblright -137
+KPX period quoteright -165
+KPX q c 0
+KPX q u 37
+KPX quotedblbase A -10
+KPX quotedblbase AE -11
+KPX quotedblbase T -92
+KPX quotedblbase V -108
+KPX quotedblbase W -46
+KPX quotedblbase Y -80
+KPX quotedblleft A -66
+KPX quotedblleft AE -64
+KPX quotedblleft Aacute -66
+KPX quotedblleft Adieresis -66
+KPX quotedblleft Aring -66
+KPX quotedblleft T -28
+KPX quotedblleft V -20
+KPX quotedblleft W -15
+KPX quotedblleft Y -50
+KPX quotedblright A -81
+KPX quotedblright AE -79
+KPX quotedblright Aacute -81
+KPX quotedblright Adieresis -81
+KPX quotedblright Aring -81
+KPX quotedblright T -45
+KPX quotedblright V -35
+KPX quotedblright W -30
+KPX quotedblright Y -57
+KPX quoteleft A -90
+KPX quoteleft AE -88
+KPX quoteleft Aacute -90
+KPX quoteleft Adieresis -90
+KPX quoteleft Aring -90
+KPX quoteleft T -52
+KPX quoteleft V -45
+KPX quoteleft W -40
+KPX quoteleft Y -74
+KPX quoteright A -160
+KPX quoteright AE -158
+KPX quoteright Aacute -160
+KPX quoteright Adieresis -160
+KPX quoteright Aring -160
+KPX quoteright comma -234
+KPX quoteright d -146
+KPX quoteright o -148
+KPX quoteright period -251
+KPX quoteright r -155
+KPX quoteright s -154
+KPX quoteright t -121
+KPX quoteright v -114
+KPX quoteright w -109
+KPX quoteright y -120
+KPX r a -22
+KPX r aacute -22
+KPX r acircumflex -22
+KPX r adieresis -22
+KPX r ae 0
+KPX r agrave -22
+KPX r aring -22
+KPX r c -23
+KPX r ccedilla -18
+KPX r colon -100
+KPX r comma -112
+KPX r d -13
+KPX r e -11
+KPX r eacute -11
+KPX r ecircumflex -11
+KPX r egrave -11
+KPX r f -20
+KPX r g -9
+KPX r h -23
+KPX r hyphen -48
+KPX r i -30
+KPX r j -38
+KPX r k -33
+KPX r l -50
+KPX r m 31
+KPX r n 5
+KPX r o -16
+KPX r oacute -16
+KPX r ocircumflex -16
+KPX r odieresis -16
+KPX r oe 15
+KPX r ograve -16
+KPX r oslash -16
+KPX r p 25
+KPX r period -126
+KPX r q -8
+KPX r quoteright -45
+KPX r r -17
+KPX r s -25
+KPX r semicolon -88
+KPX r t 15
+KPX r u 15
+KPX r v 22
+KPX r w 21
+KPX r x 2
+KPX r y 10
+KPX r z -24
+KPX s quoteright -62
+KPX s t -14
+KPX seven colon -162
+KPX seven comma -160
+KPX seven eight -79
+KPX seven five -87
+KPX seven four -105
+KPX seven one -72
+KPX seven period -179
+KPX seven seven -69
+KPX seven six -98
+KPX seven three -78
+KPX seven two -70
+KPX six four -54
+KPX six one -60
+KPX six seven -55
+KPX t S -40
+KPX t a -21
+KPX t aacute -21
+KPX t adieresis -21
+KPX t ae 4
+KPX t aring -21
+KPX t colon -121
+KPX t e -30
+KPX t eacute -30
+KPX t h -8
+KPX t o -36
+KPX t oacute -36
+KPX t odieresis -36
+KPX t quoteright -102
+KPX t semicolon -107
+KPX three four -58
+KPX three one -79
+KPX three seven -74
+KPX two four -75
+KPX two one -73
+KPX two seven -78
+KPX u quoteright -58
+KPX v a -7
+KPX v aacute -7
+KPX v acircumflex -7
+KPX v adieresis -7
+KPX v ae 15
+KPX v agrave -7
+KPX v aring -7
+KPX v atilde -7
+KPX v c -17
+KPX v colon -86
+KPX v comma -139
+KPX v e -6
+KPX v eacute -6
+KPX v ecircumflex -6
+KPX v egrave -6
+KPX v g -2
+KPX v hyphen -28
+KPX v l -79
+KPX v o -11
+KPX v oacute -11
+KPX v odieresis -11
+KPX v ograve -11
+KPX v oslash -10
+KPX v period -159
+KPX v s -15
+KPX v semicolon -74
+KPX w a -6
+KPX w aacute -7
+KPX w acircumflex -6
+KPX w adieresis -6
+KPX w ae 22
+KPX w agrave -6
+KPX w aring -6
+KPX w atilde -6
+KPX w c -8
+KPX w colon -86
+KPX w comma -93
+KPX w e 0
+KPX w eacute 0
+KPX w ecircumflex 0
+KPX w egrave 0
+KPX w g 2
+KPX w hyphen -1
+KPX w l -51
+KPX w o -4
+KPX w oacute -4
+KPX w odieresis -4
+KPX w ograve -4
+KPX w oslash 0
+KPX w period -112
+KPX w s -13
+KPX w semicolon -74
+KPX x a -1
+KPX x c -16
+KPX x e -7
+KPX x eacute -7
+KPX x o -12
+KPX x q -9
+KPX y a -17
+KPX y aacute -18
+KPX y acircumflex -17
+KPX y adieresis -17
+KPX y ae 4
+KPX y agrave -17
+KPX y aring -17
+KPX y atilde -17
+KPX y c -25
+KPX y colon -96
+KPX y comma -137
+KPX y e -14
+KPX y eacute -14
+KPX y ecircumflex -14
+KPX y egrave -14
+KPX y g -11
+KPX y hyphen -23
+KPX y l -79
+KPX y o -20
+KPX y oacute -20
+KPX y odieresis -20
+KPX y ograve -20
+KPX y oslash -19
+KPX y period -158
+KPX y s -24
+KPX y semicolon -84
+KPX zero four -65
+KPX zero one -81
+KPX zero seven -79
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/n022024l.pfb b/Master/xemtex/gsfonts/n022024l.pfb
new file mode 100644
index 00000000000..45318af7251
--- /dev/null
+++ b/Master/xemtex/gsfonts/n022024l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/n022024l.pfm b/Master/xemtex/gsfonts/n022024l.pfm
new file mode 100644
index 00000000000..0ab6fa91ceb
--- /dev/null
+++ b/Master/xemtex/gsfonts/n022024l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/p052003l.afm b/Master/xemtex/gsfonts/p052003l.afm
new file mode 100644
index 00000000000..4958d750df7
--- /dev/null
+++ b/Master/xemtex/gsfonts/p052003l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName URWPalladioL-Roma
+FullName URW Palladio L Roman
+FamilyName URW Palladio L
+Weight Roman
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -166 -283 1021 943
+CapHeight 692
+XHeight 469
+Descender -281
+Ascender 726
+StartCharMetrics 316
+C 32 ; WX 250 ; N space ; B 125 0 125 0 ;
+C 33 ; WX 278 ; N exclam ; B 81 -5 197 694 ;
+C 34 ; WX 371 ; N quotedbl ; B 52 469 319 709 ;
+C 35 ; WX 500 ; N numbersign ; B 4 0 495 684 ;
+C 36 ; WX 500 ; N dollar ; B 30 -116 471 731 ;
+C 37 ; WX 840 ; N percent ; B 39 -20 802 709 ;
+C 38 ; WX 778 ; N ampersand ; B 43 -20 753 689 ;
+C 39 ; WX 278 ; N quoteright ; B 45 446 233 709 ;
+C 40 ; WX 333 ; N parenleft ; B 60 -215 301 726 ;
+C 41 ; WX 333 ; N parenright ; B 32 -215 273 726 ;
+C 42 ; WX 389 ; N asterisk ; B 32 342 359 689 ;
+C 43 ; WX 606 ; N plus ; B 51 7 555 512 ;
+C 44 ; WX 250 ; N comma ; B 16 -155 218 123 ;
+C 45 ; WX 333 ; N hyphen ; B 17 215 312 287 ;
+C 46 ; WX 250 ; N period ; B 67 -5 183 111 ;
+C 47 ; WX 606 ; N slash ; B 87 -119 519 726 ;
+C 48 ; WX 500 ; N zero ; B 29 -20 465 689 ;
+C 49 ; WX 500 ; N one ; B 60 -3 418 694 ;
+C 50 ; WX 500 ; N two ; B 16 -3 468 689 ;
+C 51 ; WX 500 ; N three ; B 15 -20 462 689 ;
+C 52 ; WX 500 ; N four ; B 2 -3 472 694 ;
+C 53 ; WX 500 ; N five ; B 13 -20 459 689 ;
+C 54 ; WX 500 ; N six ; B 32 -20 468 689 ;
+C 55 ; WX 500 ; N seven ; B 44 -3 497 689 ;
+C 56 ; WX 500 ; N eight ; B 30 -20 464 689 ;
+C 57 ; WX 500 ; N nine ; B 20 -20 457 689 ;
+C 58 ; WX 250 ; N colon ; B 66 -5 182 456 ;
+C 59 ; WX 250 ; N semicolon ; B 16 -153 218 456 ;
+C 60 ; WX 606 ; N less ; B 57 -2 558 524 ;
+C 61 ; WX 606 ; N equal ; B 51 136 555 386 ;
+C 62 ; WX 606 ; N greater ; B 48 -2 549 524 ;
+C 63 ; WX 444 ; N question ; B 43 -5 395 694 ;
+C 64 ; WX 747 ; N at ; B 24 -20 724 694 ;
+C 65 ; WX 778 ; N A ; B 15 -3 756 700 ;
+C 66 ; WX 611 ; N B ; B 26 -3 576 692 ;
+C 67 ; WX 709 ; N C ; B 22 -20 670 709 ;
+C 68 ; WX 774 ; N D ; B 22 -3 751 692 ;
+C 69 ; WX 611 ; N E ; B 22 -3 572 692 ;
+C 70 ; WX 556 ; N F ; B 22 -3 536 692 ;
+C 71 ; WX 763 ; N G ; B 22 -20 728 709 ;
+C 72 ; WX 832 ; N H ; B 22 -3 810 692 ;
+C 73 ; WX 337 ; N I ; B 22 -3 315 692 ;
+C 74 ; WX 333 ; N J ; B -15 -200 311 692 ;
+C 75 ; WX 726 ; N K ; B 22 -3 719 692 ;
+C 76 ; WX 611 ; N L ; B 22 -3 586 692 ;
+C 77 ; WX 946 ; N M ; B 16 -13 926 692 ;
+C 78 ; WX 831 ; N N ; B 17 -20 813 692 ;
+C 79 ; WX 786 ; N O ; B 22 -20 764 709 ;
+C 80 ; WX 604 ; N P ; B 22 -3 580 692 ;
+C 81 ; WX 786 ; N Q ; B 22 -176 764 709 ;
+C 82 ; WX 668 ; N R ; B 22 -3 669 692 ;
+C 83 ; WX 525 ; N S ; B 24 -20 503 709 ;
+C 84 ; WX 613 ; N T ; B 18 -3 595 692 ;
+C 85 ; WX 778 ; N U ; B 12 -20 759 692 ;
+C 86 ; WX 722 ; N V ; B 8 -9 706 692 ;
+C 87 ; WX 1000 ; N W ; B 8 -9 984 700 ;
+C 88 ; WX 667 ; N X ; B 14 -3 648 700 ;
+C 89 ; WX 667 ; N Y ; B 9 -3 654 706 ;
+C 90 ; WX 667 ; N Z ; B 15 -3 638 692 ;
+C 91 ; WX 333 ; N bracketleft ; B 79 -184 288 726 ;
+C 92 ; WX 606 ; N backslash ; B 81 0 512 726 ;
+C 93 ; WX 333 ; N bracketright ; B 45 -184 254 726 ;
+C 94 ; WX 606 ; N asciicircum ; B 51 283 554 689 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 278 ; N quoteleft ; B 45 446 233 709 ;
+C 97 ; WX 500 ; N a ; B 32 -12 471 469 ;
+C 98 ; WX 553 ; N b ; B -15 -12 508 726 ;
+C 99 ; WX 444 ; N c ; B 26 -20 413 469 ;
+C 100 ; WX 611 ; N d ; B 35 -12 579 726 ;
+C 101 ; WX 479 ; N e ; B 26 -20 448 469 ;
+C 102 ; WX 333 ; N f ; B 23 -3 341 728 ;
+C 103 ; WX 556 ; N g ; B 32 -283 544 469 ;
+C 104 ; WX 582 ; N h ; B 6 -3 572 726 ;
+C 105 ; WX 291 ; N i ; B 21 -3 271 687 ;
+C 106 ; WX 234 ; N j ; B -40 -283 167 688 ;
+C 107 ; WX 556 ; N k ; B 21 -12 549 726 ;
+C 108 ; WX 291 ; N l ; B 21 -3 271 726 ;
+C 109 ; WX 883 ; N m ; B 16 -3 869 469 ;
+C 110 ; WX 582 ; N n ; B 6 -3 572 469 ;
+C 111 ; WX 546 ; N o ; B 32 -20 514 469 ;
+C 112 ; WX 601 ; N p ; B 8 -281 554 469 ;
+C 113 ; WX 560 ; N q ; B 35 -281 560 469 ;
+C 114 ; WX 395 ; N r ; B 21 -3 374 469 ;
+C 115 ; WX 424 ; N s ; B 30 -20 391 469 ;
+C 116 ; WX 326 ; N t ; B 22 -12 319 621 ;
+C 117 ; WX 603 ; N u ; B 18 -12 581 469 ;
+C 118 ; WX 565 ; N v ; B 6 -7 539 459 ;
+C 119 ; WX 834 ; N w ; B 6 -7 808 469 ;
+C 120 ; WX 516 ; N x ; B 20 -3 496 469 ;
+C 121 ; WX 556 ; N y ; B 12 -283 544 459 ;
+C 122 ; WX 500 ; N z ; B 16 -3 466 462 ;
+C 123 ; WX 333 ; N braceleft ; B 58 -175 289 726 ;
+C 124 ; WX 606 ; N bar ; B 275 0 331 726 ;
+C 125 ; WX 333 ; N braceright ; B 44 -175 275 726 ;
+C 126 ; WX 606 ; N asciitilde ; B 51 182 555 341 ;
+C 161 ; WX 278 ; N exclamdown ; B 81 -225 197 469 ;
+C 162 ; WX 500 ; N cent ; B 61 -101 448 562 ;
+C 163 ; WX 500 ; N sterling ; B 12 -13 478 694 ;
+C 164 ; WX 167 ; N fraction ; B -166 0 337 689 ;
+C 165 ; WX 500 ; N yen ; B 5 -3 496 701 ;
+C 166 ; WX 500 ; N florin ; B 0 -262 473 706 ;
+C 167 ; WX 500 ; N section ; B 26 -219 465 709 ;
+C 168 ; WX 500 ; N currency ; B 30 96 470 531 ;
+C 169 ; WX 208 ; N quotesingle ; B 61 469 147 709 ;
+C 170 ; WX 500 ; N quotedblleft ; B 51 446 449 709 ;
+C 171 ; WX 500 ; N guillemotleft ; B 50 71 450 428 ;
+C 172 ; WX 331 ; N guilsinglleft ; B 66 71 265 428 ;
+C 173 ; WX 331 ; N guilsinglright ; B 66 71 265 428 ;
+C 174 ; WX 605 ; N fi ; B 23 -3 587 728 ;
+C 175 ; WX 608 ; N fl ; B 23 -3 590 728 ;
+C 177 ; WX 500 ; N endash ; B 0 219 500 277 ;
+C 178 ; WX 500 ; N dagger ; B 34 -5 466 694 ;
+C 179 ; WX 500 ; N daggerdbl ; B 34 -249 466 694 ;
+C 180 ; WX 250 ; N periodcentered ; B 67 203 183 319 ;
+C 182 ; WX 628 ; N paragraph ; B 39 -150 589 695 ;
+C 183 ; WX 606 ; N bullet ; B 131 172 475 516 ;
+C 184 ; WX 278 ; N quotesinglbase ; B 22 -153 210 110 ;
+C 185 ; WX 500 ; N quotedblbase ; B 51 -153 449 110 ;
+C 186 ; WX 500 ; N quotedblright ; B 51 446 449 709 ;
+C 187 ; WX 500 ; N guillemotright ; B 50 71 450 428 ;
+C 188 ; WX 1000 ; N ellipsis ; B 109 -5 891 111 ;
+C 189 ; WX 1144 ; N perthousand ; B 123 -20 1021 709 ;
+C 191 ; WX 444 ; N questiondown ; B 43 -231 395 469 ;
+C 193 ; WX 333 ; N grave ; B 31 506 255 677 ;
+C 194 ; WX 333 ; N acute ; B 78 506 302 677 ;
+C 195 ; WX 333 ; N circumflex ; B 11 510 323 677 ;
+C 196 ; WX 333 ; N tilde ; B 2 535 332 640 ;
+C 197 ; WX 333 ; N macron ; B 11 538 323 591 ;
+C 198 ; WX 333 ; N breve ; B 26 506 308 664 ;
+C 199 ; WX 250 ; N dotaccent ; B 75 537 175 637 ;
+C 200 ; WX 333 ; N dieresis ; B 17 537 316 637 ;
+C 202 ; WX 333 ; N ring ; B 67 512 267 712 ;
+C 203 ; WX 333 ; N cedilla ; B 96 -225 304 -10 ;
+C 205 ; WX 380 ; N hungarumlaut ; B 3 506 377 687 ;
+C 206 ; WX 313 ; N ogonek ; B 68 -145 245 0 ;
+C 207 ; WX 333 ; N caron ; B 11 510 323 677 ;
+C 208 ; WX 1000 ; N emdash ; B 0 219 1000 277 ;
+C 225 ; WX 944 ; N AE ; B -10 -3 908 692 ;
+C 227 ; WX 333 ; N ordfeminine ; B 24 422 310 709 ;
+C 232 ; WX 611 ; N Lslash ; B 6 -3 586 692 ;
+C 233 ; WX 833 ; N Oslash ; B 30 -20 797 709 ;
+C 234 ; WX 998 ; N OE ; B 22 -20 962 709 ;
+C 235 ; WX 333 ; N ordmasculine ; B 10 416 323 709 ;
+C 241 ; WX 758 ; N ae ; B 30 -20 732 469 ;
+C 245 ; WX 287 ; N dotlessi ; B 21 -3 271 469 ;
+C 248 ; WX 291 ; N lslash ; B -14 -3 306 726 ;
+C 249 ; WX 556 ; N oslash ; B 16 -23 530 474 ;
+C 250 ; WX 827 ; N oe ; B 32 -20 800 469 ;
+C 251 ; WX 556 ; N germandbls ; B 23 -9 519 731 ;
+C -1 ; WX 778 ; N Udieresis ; B 12 -20 759 868 ;
+C -1 ; WX 778 ; N Uacute ; B 12 -20 759 908 ;
+C -1 ; WX 525 ; N Scedilla ; B 24 -225 503 709 ;
+C -1 ; WX 613 ; N Tcaron ; B 18 -3 595 908 ;
+C -1 ; WX 525 ; N Scaron ; B 24 -20 503 908 ;
+C -1 ; WX 668 ; N Rcaron ; B 22 -3 669 908 ;
+C -1 ; WX 668 ; N Racute ; B 22 -3 669 908 ;
+C -1 ; WX 525 ; N Sacute ; B 24 -20 503 908 ;
+C -1 ; WX 786 ; N Otilde ; B 22 -20 764 871 ;
+C -1 ; WX 603 ; N ucircumflex ; B 18 -12 581 677 ;
+C -1 ; WX 786 ; N Ohungarumlaut ; B 22 -20 764 918 ;
+C -1 ; WX 778 ; N Uhungarumlaut ; B 12 -20 759 918 ;
+C -1 ; WX 667 ; N Yacute ; B 9 -3 654 908 ;
+C -1 ; WX 774 ; N Eth ; B 14 -3 751 692 ;
+C -1 ; WX 774 ; N Dcroat ; B 14 -3 751 692 ;
+C -1 ; WX 667 ; N Zacute ; B 15 -3 638 908 ;
+C -1 ; WX 778 ; N Uring ; B 12 -20 759 943 ;
+C -1 ; WX 556 ; N gbreve ; B 32 -283 544 664 ;
+C -1 ; WX 479 ; N eogonek ; B 26 -145 461 469 ;
+C -1 ; WX 479 ; N edotaccent ; B 26 -20 448 637 ;
+C -1 ; WX 479 ; N ecaron ; B 26 -20 448 677 ;
+C -1 ; WX 778 ; N Ugrave ; B 12 -20 759 908 ;
+C -1 ; WX 604 ; N Thorn ; B 32 -3 574 692 ;
+C -1 ; WX 479 ; N eacute ; B 26 -20 448 677 ;
+C -1 ; WX 479 ; N edieresis ; B 26 -20 448 637 ;
+C -1 ; WX 671 ; N dcaron ; B 35 -12 677 729 ;
+C -1 ; WX 444 ; N ccedilla ; B 26 -225 413 469 ;
+C -1 ; WX 444 ; N ccaron ; B 26 -20 418 677 ;
+C -1 ; WX 444 ; N cacute ; B 26 -20 444 677 ;
+C -1 ; WX 500 ; N aogonek ; B 32 -145 540 469 ;
+C -1 ; WX 500 ; N aring ; B 32 -12 471 712 ;
+C -1 ; WX 500 ; N atilde ; B 32 -12 471 640 ;
+C -1 ; WX 500 ; N abreve ; B 32 -12 471 664 ;
+C -1 ; WX 479 ; N egrave ; B 26 -20 448 677 ;
+C -1 ; WX 500 ; N agrave ; B 32 -12 471 677 ;
+C -1 ; WX 500 ; N aacute ; B 32 -12 471 677 ;
+C -1 ; WX 500 ; N adieresis ; B 32 -12 471 637 ;
+C -1 ; WX 778 ; N Uogonek ; B 12 -145 759 692 ;
+C -1 ; WX 603 ; N ugrave ; B 18 -12 581 677 ;
+C -1 ; WX 603 ; N uacute ; B 18 -12 581 677 ;
+C -1 ; WX 603 ; N udieresis ; B 18 -12 581 637 ;
+C -1 ; WX 375 ; N tcaron ; B 22 -12 381 696 ;
+C -1 ; WX 424 ; N scommaaccent ; B 30 -274 391 469 ;
+C -1 ; WX 667 ; N Zcaron ; B 15 -3 638 908 ;
+C -1 ; WX 479 ; N ecircumflex ; B 26 -20 448 677 ;
+C -1 ; WX 778 ; N Ucircumflex ; B 12 -20 759 908 ;
+C -1 ; WX 500 ; N acircumflex ; B 32 -12 471 677 ;
+C -1 ; WX 667 ; N Zdotaccent ; B 15 -3 638 868 ;
+C -1 ; WX 424 ; N scaron ; B 30 -20 391 677 ;
+C -1 ; WX 778 ; N Amacron ; B 15 -3 756 822 ;
+C -1 ; WX 424 ; N sacute ; B 30 -20 391 677 ;
+C -1 ; WX 613 ; N Tcommaaccent ; B 18 -274 595 692 ;
+C -1 ; WX 667 ; N Ydieresis ; B 9 -3 654 868 ;
+C -1 ; WX 601 ; N thorn ; B -2 -281 544 726 ;
+C -1 ; WX 611 ; N Emacron ; B 22 -3 572 822 ;
+C -1 ; WX 786 ; N Ograve ; B 22 -20 764 908 ;
+C -1 ; WX 786 ; N Oacute ; B 22 -20 764 908 ;
+C -1 ; WX 786 ; N Odieresis ; B 22 -20 764 868 ;
+C -1 ; WX 831 ; N Ntilde ; B 17 -20 813 871 ;
+C -1 ; WX 831 ; N Ncaron ; B 17 -20 813 908 ;
+C -1 ; WX 831 ; N Nacute ; B 17 -20 813 908 ;
+C -1 ; WX 611 ; N Lcaron ; B 22 -3 586 696 ;
+C -1 ; WX 611 ; N Lacute ; B 22 -3 586 908 ;
+C -1 ; WX 337 ; N Idotaccent ; B 22 -3 315 868 ;
+C -1 ; WX 395 ; N racute ; B 21 -3 374 677 ;
+C -1 ; WX 337 ; N Icircumflex ; B 13 -3 325 908 ;
+C -1 ; WX 546 ; N ohungarumlaut ; B 32 -20 514 687 ;
+C -1 ; WX 546 ; N otilde ; B 32 -20 514 640 ;
+C -1 ; WX 500 ; N Euro ; B -38 -20 465 709 ;
+C -1 ; WX 546 ; N ocircumflex ; B 32 -20 514 677 ;
+C -1 ; WX 300 ; N onesuperior ; B 32 271 254 689 ;
+C -1 ; WX 300 ; N twosuperior ; B 6 271 284 686 ;
+C -1 ; WX 300 ; N threesuperior ; B 5 261 281 686 ;
+C -1 ; WX 337 ; N Igrave ; B 22 -3 315 908 ;
+C -1 ; WX 337 ; N Iacute ; B 22 -3 315 908 ;
+C -1 ; WX 337 ; N Imacron ; B 13 -3 325 822 ;
+C -1 ; WX 337 ; N Iogonek ; B 22 -145 337 692 ;
+C -1 ; WX 337 ; N Idieresis ; B 19 -3 318 868 ;
+C -1 ; WX 763 ; N Gbreve ; B 22 -20 728 895 ;
+C -1 ; WX 778 ; N Umacron ; B 12 -20 759 822 ;
+C -1 ; WX 726 ; N Kcommaaccent ; B 22 -274 719 692 ;
+C -1 ; WX 546 ; N ograve ; B 32 -20 514 677 ;
+C -1 ; WX 525 ; N Scommaaccent ; B 24 -274 503 709 ;
+C -1 ; WX 611 ; N Eogonek ; B 22 -145 611 692 ;
+C -1 ; WX 546 ; N oacute ; B 32 -20 514 677 ;
+C -1 ; WX 611 ; N Edotaccent ; B 22 -3 572 868 ;
+C -1 ; WX 291 ; N iogonek ; B 21 -145 331 687 ;
+C -1 ; WX 556 ; N gcommaaccent ; B 32 -283 544 736 ;
+C -1 ; WX 546 ; N odieresis ; B 32 -20 514 637 ;
+C -1 ; WX 582 ; N ntilde ; B 6 -3 572 640 ;
+C -1 ; WX 582 ; N ncaron ; B 6 -3 572 677 ;
+C -1 ; WX 611 ; N Ecaron ; B 22 -3 572 908 ;
+C -1 ; WX 611 ; N Ecircumflex ; B 22 -3 572 908 ;
+C -1 ; WX 424 ; N scedilla ; B 30 -225 391 469 ;
+C -1 ; WX 395 ; N rcaron ; B 21 -3 374 677 ;
+C -1 ; WX 611 ; N Egrave ; B 22 -3 572 908 ;
+C -1 ; WX 611 ; N Eacute ; B 22 -3 572 908 ;
+C -1 ; WX 763 ; N Gcommaaccent ; B 22 -274 728 709 ;
+C -1 ; WX 668 ; N Rcommaaccent ; B 22 -274 669 692 ;
+C -1 ; WX 611 ; N Edieresis ; B 22 -3 572 868 ;
+C -1 ; WX 582 ; N nacute ; B 6 -3 572 677 ;
+C -1 ; WX 603 ; N uogonek ; B 18 -145 643 469 ;
+C -1 ; WX 603 ; N umacron ; B 18 -12 581 591 ;
+C -1 ; WX 774 ; N Dcaron ; B 22 -3 751 908 ;
+C -1 ; WX 375 ; N lcaron ; B 21 -3 381 729 ;
+C -1 ; WX 709 ; N Ccaron ; B 22 -20 670 908 ;
+C -1 ; WX 709 ; N Cacute ; B 22 -20 670 908 ;
+C -1 ; WX 709 ; N Ccedilla ; B 22 -225 670 709 ;
+C -1 ; WX 400 ; N degree ; B 50 389 350 689 ;
+C -1 ; WX 778 ; N Aogonek ; B 15 -145 778 700 ;
+C -1 ; WX 606 ; N minus ; B 51 233 555 289 ;
+C -1 ; WX 606 ; N multiply ; B 83 36 523 474 ;
+C -1 ; WX 606 ; N divide ; B 51 10 555 512 ;
+C -1 ; WX 778 ; N Aring ; B 15 -3 756 943 ;
+C -1 ; WX 979 ; N trademark ; B 40 285 939 689 ;
+C -1 ; WX 395 ; N rcommaaccent ; B 21 -274 374 469 ;
+C -1 ; WX 291 ; N lacute ; B 21 -3 281 908 ;
+C -1 ; WX 546 ; N omacron ; B 32 -20 514 591 ;
+C -1 ; WX 778 ; N Atilde ; B 15 -3 756 871 ;
+C -1 ; WX 287 ; N icircumflex ; B -12 -3 300 677 ;
+C -1 ; WX 287 ; N igrave ; B 8 -3 271 677 ;
+C -1 ; WX 582 ; N ncommaaccent ; B 6 -274 572 469 ;
+C -1 ; WX 291 ; N lcommaaccent ; B 21 -274 271 726 ;
+C -1 ; WX 606 ; N plusminus ; B 51 0 555 512 ;
+C -1 ; WX 750 ; N onehalf ; B 15 -3 735 692 ;
+C -1 ; WX 750 ; N onequarter ; B 30 -3 727 692 ;
+C -1 ; WX 750 ; N threequarters ; B 15 -3 735 689 ;
+C -1 ; WX 287 ; N iacute ; B 21 -3 279 677 ;
+C -1 ; WX 778 ; N Abreve ; B 15 -3 756 895 ;
+C -1 ; WX 556 ; N kcommaaccent ; B 21 -274 549 726 ;
+C -1 ; WX 786 ; N Omacron ; B 22 -20 764 822 ;
+C -1 ; WX 287 ; N imacron ; B -12 -3 300 591 ;
+C -1 ; WX 479 ; N emacron ; B 26 -20 448 591 ;
+C -1 ; WX 500 ; N amacron ; B 32 -12 471 591 ;
+C -1 ; WX 326 ; N tcommaaccent ; B 22 -274 319 621 ;
+C -1 ; WX 556 ; N ydieresis ; B 12 -283 544 637 ;
+C -1 ; WX 500 ; N zdotaccent ; B 16 -3 466 637 ;
+C -1 ; WX 500 ; N zcaron ; B 16 -3 466 677 ;
+C -1 ; WX 500 ; N zacute ; B 16 -3 466 677 ;
+C -1 ; WX 556 ; N yacute ; B 12 -283 544 677 ;
+C -1 ; WX 603 ; N uhungarumlaut ; B 18 -12 581 687 ;
+C -1 ; WX 546 ; N eth ; B 32 -20 504 728 ;
+C -1 ; WX 603 ; N uring ; B 18 -12 581 712 ;
+C -1 ; WX 786 ; N Ocircumflex ; B 22 -20 764 908 ;
+C -1 ; WX 333 ; N commaaccent ; B 54 -274 223 -37 ;
+C -1 ; WX 747 ; N copyright ; B 11 -18 736 706 ;
+C -1 ; WX 747 ; N registered ; B 11 -18 736 706 ;
+C -1 ; WX 778 ; N Acircumflex ; B 15 -3 756 908 ;
+C -1 ; WX 287 ; N idieresis ; B -6 -3 293 657 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 606 ; N notequal ; B 51 -25 555 549 ;
+C -1 ; WX 549 ; N radical ; B 5 -48 520 918 ;
+C -1 ; WX 778 ; N Agrave ; B 15 -3 756 908 ;
+C -1 ; WX 778 ; N Aacute ; B 15 -3 756 908 ;
+C -1 ; WX 606 ; N lessequal ; B 57 0 558 613 ;
+C -1 ; WX 606 ; N greaterequal ; B 48 0 549 613 ;
+C -1 ; WX 606 ; N logicalnot ; B 51 120 551 386 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 831 ; N Ncommaaccent ; B 17 -274 813 692 ;
+C -1 ; WX 611 ; N dcroat ; B 35 -12 579 726 ;
+C -1 ; WX 606 ; N brokenbar ; B 275 0 331 726 ;
+C -1 ; WX 611 ; N Lcommaaccent ; B 22 -274 586 692 ;
+C -1 ; WX 778 ; N Adieresis ; B 15 -3 756 868 ;
+C -1 ; WX 603 ; N mu ; B 18 -236 581 469 ;
+C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -72
+KPX A Ccedilla -75
+KPX A G -70
+KPX A O -69
+KPX A Odieresis -69
+KPX A Q -67
+KPX A T -69
+KPX A U -74
+KPX A Uacute -74
+KPX A Ucircumflex -74
+KPX A Udieresis -74
+KPX A Ugrave -74
+KPX A V -140
+KPX A W -98
+KPX A Y -89
+KPX A a -11
+KPX A b -13
+KPX A c -33
+KPX A ccedilla -39
+KPX A comma -33
+KPX A d -34
+KPX A e -30
+KPX A g -26
+KPX A guillemotleft -84
+KPX A guilsinglleft -92
+KPX A hyphen -37
+KPX A o -36
+KPX A period -24
+KPX A q -34
+KPX A quotedblright -123
+KPX A quoteright -120
+KPX A t -38
+KPX A u -45
+KPX A v -87
+KPX A w -78
+KPX A y -88
+KPX Aacute C -72
+KPX Aacute G -70
+KPX Aacute O -69
+KPX Aacute Q -67
+KPX Aacute T -69
+KPX Aacute U -74
+KPX Aacute V -140
+KPX Aacute W -98
+KPX Aacute Y -89
+KPX Aacute a -11
+KPX Aacute b -13
+KPX Aacute c -33
+KPX Aacute comma -33
+KPX Aacute d -34
+KPX Aacute e -30
+KPX Aacute g -26
+KPX Aacute guillemotleft -84
+KPX Aacute guilsinglleft -92
+KPX Aacute hyphen -37
+KPX Aacute o -36
+KPX Aacute period -24
+KPX Aacute q -34
+KPX Aacute quoteright -120
+KPX Aacute t -38
+KPX Aacute u -45
+KPX Aacute v -87
+KPX Aacute w -78
+KPX Aacute y -88
+KPX Acircumflex C -72
+KPX Acircumflex G -70
+KPX Acircumflex O -69
+KPX Acircumflex Q -67
+KPX Acircumflex T -69
+KPX Acircumflex U -74
+KPX Acircumflex V -140
+KPX Acircumflex W -98
+KPX Acircumflex Y -89
+KPX Acircumflex comma -33
+KPX Acircumflex period -24
+KPX Adieresis C -72
+KPX Adieresis G -70
+KPX Adieresis O -69
+KPX Adieresis Q -67
+KPX Adieresis T -69
+KPX Adieresis U -74
+KPX Adieresis V -140
+KPX Adieresis W -98
+KPX Adieresis Y -89
+KPX Adieresis a -11
+KPX Adieresis b -13
+KPX Adieresis c -33
+KPX Adieresis comma -33
+KPX Adieresis d -34
+KPX Adieresis g -26
+KPX Adieresis guillemotleft -84
+KPX Adieresis guilsinglleft -92
+KPX Adieresis hyphen -37
+KPX Adieresis o -36
+KPX Adieresis period -24
+KPX Adieresis q -34
+KPX Adieresis quotedblright -123
+KPX Adieresis quoteright -120
+KPX Adieresis t -38
+KPX Adieresis u -45
+KPX Adieresis v -87
+KPX Adieresis w -78
+KPX Adieresis y -88
+KPX Agrave C -72
+KPX Agrave G -70
+KPX Agrave O -69
+KPX Agrave Q -67
+KPX Agrave T -69
+KPX Agrave U -74
+KPX Agrave V -140
+KPX Agrave W -98
+KPX Agrave Y -89
+KPX Agrave comma -33
+KPX Agrave period -24
+KPX Aring C -72
+KPX Aring G -70
+KPX Aring O -69
+KPX Aring Q -67
+KPX Aring T -69
+KPX Aring U -74
+KPX Aring V -140
+KPX Aring W -98
+KPX Aring Y -89
+KPX Aring a -11
+KPX Aring b -13
+KPX Aring c -33
+KPX Aring comma -33
+KPX Aring d -34
+KPX Aring e -30
+KPX Aring g -26
+KPX Aring guillemotleft -84
+KPX Aring guilsinglleft -92
+KPX Aring hyphen -37
+KPX Aring o -36
+KPX Aring period -24
+KPX Aring q -34
+KPX Aring quotedblright -123
+KPX Aring quoteright -120
+KPX Aring t -38
+KPX Aring u -45
+KPX Aring v -87
+KPX Aring w -78
+KPX Aring y -88
+KPX Atilde C -72
+KPX Atilde G -70
+KPX Atilde O -69
+KPX Atilde Q -67
+KPX Atilde T -69
+KPX Atilde U -74
+KPX Atilde V -140
+KPX Atilde W -98
+KPX Atilde Y -89
+KPX Atilde comma -33
+KPX Atilde period -24
+KPX B A -51
+KPX B AE -38
+KPX B Aacute -51
+KPX B Acircumflex -51
+KPX B Adieresis -51
+KPX B Aring -51
+KPX B Atilde -51
+KPX B O -8
+KPX B OE -8
+KPX B Oacute -8
+KPX B Ocircumflex -8
+KPX B Odieresis -8
+KPX B Ograve -8
+KPX B Oslash -15
+KPX B V -37
+KPX B W -37
+KPX B Y -33
+KPX C A -17
+KPX C AE -5
+KPX C Aacute -17
+KPX C Adieresis -17
+KPX C Aring -17
+KPX C H -11
+KPX C K -11
+KPX C O -39
+KPX C Oacute -39
+KPX C Odieresis -39
+KPX Ccedilla A -22
+KPX D A -82
+KPX D Aacute -82
+KPX D Acircumflex -82
+KPX D Adieresis -82
+KPX D Agrave -82
+KPX D Aring -82
+KPX D Atilde -82
+KPX D J -31
+KPX D T -18
+KPX D V -60
+KPX D W -46
+KPX D X -63
+KPX D Y -56
+KPX F A -95
+KPX F Aacute -95
+KPX F Acircumflex -95
+KPX F Adieresis -95
+KPX F Agrave -95
+KPX F Aring -95
+KPX F Atilde -95
+KPX F J 2
+KPX F O -18
+KPX F Odieresis -18
+KPX F a -40
+KPX F aacute -42
+KPX F adieresis -36
+KPX F ae -41
+KPX F aring -42
+KPX F comma -80
+KPX F e -23
+KPX F eacute -23
+KPX F hyphen 6
+KPX F i -22
+KPX F j -8
+KPX F o -26
+KPX F oacute -26
+KPX F odieresis -26
+KPX F oe -26
+KPX F oslash -29
+KPX F period -65
+KPX F r -22
+KPX F u -20
+KPX G A -23
+KPX G AE -10
+KPX G Aacute -23
+KPX G Acircumflex -23
+KPX G Adieresis -23
+KPX G Agrave -23
+KPX G Aring -23
+KPX G Atilde -23
+KPX G T -23
+KPX G V -17
+KPX G W -17
+KPX G Y -18
+KPX J A -47
+KPX J AE -35
+KPX J Adieresis -47
+KPX J Aring -47
+KPX K C -64
+KPX K G -63
+KPX K O -61
+KPX K OE -61
+KPX K Oacute -61
+KPX K Odieresis -61
+KPX K S 3
+KPX K T -4
+KPX K a -4
+KPX K adieresis -4
+KPX K ae 0
+KPX K aring -4
+KPX K e -23
+KPX K hyphen -77
+KPX K o -29
+KPX K oacute -29
+KPX K odieresis -29
+KPX K u -37
+KPX K udieresis -37
+KPX K y -89
+KPX L A -6
+KPX L AE 6
+KPX L Aacute -6
+KPX L Adieresis -6
+KPX L Aring -6
+KPX L C -19
+KPX L Ccedilla -21
+KPX L G -19
+KPX L O -18
+KPX L Oacute -18
+KPX L Ocircumflex -18
+KPX L Odieresis -18
+KPX L Ograve -18
+KPX L Otilde -18
+KPX L S -9
+KPX L T -78
+KPX L U -47
+KPX L Udieresis -47
+KPX L V -124
+KPX L W -83
+KPX L Y -98
+KPX L hyphen 2
+KPX L quotedblright -128
+KPX L quoteright -125
+KPX L u -35
+KPX L udieresis -35
+KPX L y -62
+KPX N A -41
+KPX N AE -29
+KPX N Aacute -41
+KPX N Adieresis -41
+KPX N Aring -41
+KPX N C -29
+KPX N Ccedilla -28
+KPX N G -29
+KPX N O -27
+KPX N Oacute -27
+KPX N Odieresis -27
+KPX N a -32
+KPX N aacute -33
+KPX N adieresis -33
+KPX N ae -33
+KPX N aring -33
+KPX N comma -45
+KPX N e -24
+KPX N eacute -24
+KPX N o -28
+KPX N oacute -28
+KPX N odieresis -28
+KPX N oslash -27
+KPX N period -32
+KPX N u -38
+KPX N udieresis -38
+KPX O A -76
+KPX O AE -63
+KPX O Aacute -76
+KPX O Adieresis -76
+KPX O Aring -76
+KPX O T -17
+KPX O V -56
+KPX O W -44
+KPX O X -59
+KPX O Y -52
+KPX Oacute A -76
+KPX Oacute T -17
+KPX Oacute V -56
+KPX Oacute W -44
+KPX Oacute Y -52
+KPX Ocircumflex T -17
+KPX Ocircumflex V -56
+KPX Ocircumflex Y -52
+KPX Odieresis A -76
+KPX Odieresis T -17
+KPX Odieresis V -56
+KPX Odieresis W -44
+KPX Odieresis X -59
+KPX Odieresis Y -52
+KPX Ograve T -17
+KPX Ograve V -56
+KPX Ograve Y -52
+KPX Oslash A -88
+KPX Otilde T -17
+KPX Otilde V -56
+KPX Otilde Y -52
+KPX P A -124
+KPX P AE -117
+KPX P Aacute -124
+KPX P Adieresis -124
+KPX P Aring -124
+KPX P J -27
+KPX P a -41
+KPX P aacute -41
+KPX P adieresis -33
+KPX P ae -42
+KPX P aring -41
+KPX P comma -142
+KPX P e -51
+KPX P eacute -51
+KPX P hyphen -50
+KPX P o -54
+KPX P oacute -54
+KPX P odieresis -45
+KPX P oe -51
+KPX P oslash -58
+KPX P period -128
+KPX R C -41
+KPX R Ccedilla -41
+KPX R G -41
+KPX R O -40
+KPX R OE -40
+KPX R Oacute -40
+KPX R Odieresis -40
+KPX R T -36
+KPX R U -55
+KPX R Udieresis -55
+KPX R V -53
+KPX R W -53
+KPX R Y -49
+KPX R a 0
+KPX R aacute 0
+KPX R adieresis 0
+KPX R ae 3
+KPX R aring 0
+KPX R e -19
+KPX R eacute -19
+KPX R hyphen -51
+KPX R o -25
+KPX R oacute -25
+KPX R odieresis -25
+KPX R oe -27
+KPX R u -33
+KPX R uacute -33
+KPX R udieresis -33
+KPX R y -36
+KPX S A -42
+KPX S AE -30
+KPX S Aacute -42
+KPX S Adieresis -42
+KPX S Aring -42
+KPX S T -19
+KPX S V -14
+KPX S W -14
+KPX S Y -14
+KPX S t -18
+KPX T A -65
+KPX T AE -53
+KPX T Aacute -65
+KPX T Acircumflex -65
+KPX T Adieresis -65
+KPX T Agrave -65
+KPX T Aring -65
+KPX T Atilde -65
+KPX T C -24
+KPX T G -24
+KPX T J 3
+KPX T O -22
+KPX T OE -23
+KPX T Oacute -22
+KPX T Ocircumflex -22
+KPX T Odieresis -22
+KPX T Ograve -22
+KPX T Oslash -33
+KPX T Otilde -22
+KPX T S -4
+KPX T V 9
+KPX T W 9
+KPX T Y 8
+KPX T a -80
+KPX T ae -77
+KPX T c -97
+KPX T colon -94
+KPX T comma -102
+KPX T e -94
+KPX T g -95
+KPX T guillemotleft -126
+KPX T guilsinglleft -134
+KPX T hyphen -77
+KPX T i -26
+KPX T j -11
+KPX T o -98
+KPX T oslash -63
+KPX T period -92
+KPX T r -63
+KPX T s -68
+KPX T semicolon -101
+KPX T u -110
+KPX T v -105
+KPX T w -105
+KPX T y -108
+KPX U A -80
+KPX U AE -68
+KPX U Aacute -80
+KPX U Acircumflex -80
+KPX U Adieresis -80
+KPX U Aring -80
+KPX U Atilde -80
+KPX U comma -66
+KPX U m -39
+KPX U n -33
+KPX U p -35
+KPX U period -49
+KPX U r -41
+KPX Uacute A -80
+KPX Uacute comma -66
+KPX Uacute m -39
+KPX Uacute n -33
+KPX Uacute p -35
+KPX Uacute period -49
+KPX Uacute r -41
+KPX Ucircumflex A -80
+KPX Udieresis A -80
+KPX Udieresis b 24
+KPX Udieresis comma -66
+KPX Udieresis m -39
+KPX Udieresis n -33
+KPX Udieresis p -35
+KPX Udieresis period -49
+KPX Udieresis r -41
+KPX Ugrave A -80
+KPX V A -142
+KPX V AE -129
+KPX V Aacute -142
+KPX V Acircumflex -142
+KPX V Adieresis -142
+KPX V Agrave -142
+KPX V Aring -142
+KPX V Atilde -142
+KPX V C -70
+KPX V G -70
+KPX V O -68
+KPX V Oacute -68
+KPX V Ocircumflex -68
+KPX V Odieresis -68
+KPX V Ograve -68
+KPX V Oslash -74
+KPX V Otilde -68
+KPX V S -35
+KPX V T 5
+KPX V a -94
+KPX V ae -95
+KPX V colon -93
+KPX V comma -136
+KPX V e -89
+KPX V g -101
+KPX V guillemotleft -115
+KPX V guilsinglleft -123
+KPX V hyphen -66
+KPX V i -26
+KPX V o -92
+KPX V oslash -92
+KPX V period -121
+KPX V r -65
+KPX V semicolon -108
+KPX V u -63
+KPX V y -56
+KPX W A -113
+KPX W AE -100
+KPX W Aacute -113
+KPX W Acircumflex -113
+KPX W Adieresis -113
+KPX W Agrave -113
+KPX W Aring -113
+KPX W Atilde -113
+KPX W C -55
+KPX W G -55
+KPX W O -54
+KPX W Oacute -54
+KPX W Ocircumflex -54
+KPX W Odieresis -54
+KPX W Ograve -54
+KPX W Oslash -58
+KPX W Otilde -54
+KPX W S -35
+KPX W T 5
+KPX W a -75
+KPX W ae -76
+KPX W colon -82
+KPX W comma -105
+KPX W e -66
+KPX W g -82
+KPX W guillemotleft -93
+KPX W guilsinglleft -101
+KPX W hyphen -44
+KPX W i -26
+KPX W o -70
+KPX W oslash -69
+KPX W period -90
+KPX W r -55
+KPX W semicolon -97
+KPX W u -52
+KPX W y -47
+KPX X C -59
+KPX X O -57
+KPX X Odieresis -57
+KPX X Q -56
+KPX X a -10
+KPX X e -29
+KPX X hyphen -53
+KPX X o -35
+KPX X u -43
+KPX X y -95
+KPX Y A -72
+KPX Y AE -60
+KPX Y Aacute -72
+KPX Y Acircumflex -72
+KPX Y Adieresis -72
+KPX Y Agrave -72
+KPX Y Aring -72
+KPX Y Atilde -72
+KPX Y C -70
+KPX Y G -70
+KPX Y O -68
+KPX Y Oacute -68
+KPX Y Ocircumflex -68
+KPX Y Odieresis -68
+KPX Y Ograve -68
+KPX Y Oslash -74
+KPX Y Otilde -68
+KPX Y S -37
+KPX Y T 6
+KPX Y a -87
+KPX Y ae -84
+KPX Y colon -101
+KPX Y comma -109
+KPX Y e -92
+KPX Y g -102
+KPX Y guillemotleft -127
+KPX Y guilsinglleft -135
+KPX Y hyphen -83
+KPX Y i -27
+KPX Y o -95
+KPX Y oslash -70
+KPX Y p -75
+KPX Y period -99
+KPX Y semicolon -108
+KPX Y u -79
+KPX Y v -69
+KPX Z v -59
+KPX Z y -60
+KPX a j -20
+KPX a quoteright -33
+KPX a v -36
+KPX a w -36
+KPX a y -39
+KPX aacute v -36
+KPX aacute w -36
+KPX aacute y -39
+KPX adieresis v -36
+KPX adieresis w -36
+KPX adieresis y -39
+KPX ae v -10
+KPX ae w -10
+KPX ae y -13
+KPX agrave v -36
+KPX agrave w -36
+KPX agrave y -39
+KPX aring v -36
+KPX aring w -36
+KPX aring y -39
+KPX b v -28
+KPX b w -28
+KPX b y -31
+KPX c h 10
+KPX c k 3
+KPX comma one -49
+KPX comma quotedblright -25
+KPX comma quoteright -22
+KPX e quoteright -6
+KPX e t -3
+KPX e v -12
+KPX e w -12
+KPX e x -8
+KPX e y -15
+KPX eacute v -12
+KPX eacute w -12
+KPX eacute y -15
+KPX ecircumflex v -12
+KPX ecircumflex w -12
+KPX ecircumflex y -15
+KPX eight four 2
+KPX eight one -42
+KPX eight seven -27
+KPX f a -11
+KPX f aacute -11
+KPX f adieresis -11
+KPX f ae -10
+KPX f aring -11
+KPX f e -15
+KPX f eacute -15
+KPX f f 5
+KPX f i 14
+KPX f j 28
+KPX f l 24
+KPX f o -18
+KPX f oacute -18
+KPX f odieresis -18
+KPX f oe -15
+KPX f oslash -8
+KPX f quoteright -4
+KPX f s 0
+KPX f t 12
+KPX five four -2
+KPX five one -44
+KPX five seven -32
+KPX four four 6
+KPX four one -40
+KPX four seven -21
+KPX g a -13
+KPX g adieresis -13
+KPX g ae -14
+KPX g aring -13
+KPX g e -19
+KPX g eacute -19
+KPX g l -5
+KPX g oacute -23
+KPX g odieresis -23
+KPX g r 14
+KPX guillemotright A -86
+KPX guillemotright AE -79
+KPX guillemotright Aacute -86
+KPX guillemotright Adieresis -86
+KPX guillemotright Aring -86
+KPX guillemotright T -126
+KPX guillemotright V -115
+KPX guillemotright W -81
+KPX guillemotright Y -139
+KPX guilsinglright A -94
+KPX guilsinglright AE -87
+KPX guilsinglright Aacute -94
+KPX guilsinglright Adieresis -94
+KPX guilsinglright Aring -94
+KPX guilsinglright T -134
+KPX guilsinglright V -123
+KPX guilsinglright W -89
+KPX guilsinglright Y -147
+KPX h quoteright -33
+KPX h y -37
+KPX hyphen A -41
+KPX hyphen AE -35
+KPX hyphen Aacute -41
+KPX hyphen Adieresis -41
+KPX hyphen Aring -41
+KPX hyphen T -79
+KPX hyphen V -67
+KPX hyphen W -34
+KPX hyphen Y -97
+KPX i T -30
+KPX i j -15
+KPX k a 4
+KPX k aacute 4
+KPX k adieresis 4
+KPX k ae 7
+KPX k aring 4
+KPX k comma -21
+KPX k e -12
+KPX k eacute -12
+KPX k g -12
+KPX k hyphen -67
+KPX k o -19
+KPX k oacute -19
+KPX k odieresis -19
+KPX k period -10
+KPX k s 12
+KPX k u 0
+KPX k udieresis 0
+KPX l v -22
+KPX l y -25
+KPX m p -20
+KPX m v -39
+KPX m w -39
+KPX m y -42
+KPX n T -58
+KPX n p -18
+KPX n quoteright -30
+KPX n v -34
+KPX n w -34
+KPX n y -37
+KPX nine four -25
+KPX nine one -42
+KPX nine seven -23
+KPX o T -99
+KPX o quoteright -18
+KPX o t -13
+KPX o v -27
+KPX o w -27
+KPX o x -31
+KPX o y -30
+KPX oacute v -27
+KPX oacute w -27
+KPX oacute y -30
+KPX ocircumflex t -13
+KPX odieresis t -13
+KPX odieresis v -27
+KPX odieresis w -27
+KPX odieresis x -31
+KPX odieresis y -30
+KPX ograve v -27
+KPX ograve w -27
+KPX ograve y -30
+KPX one comma -63
+KPX one eight -60
+KPX one five -44
+KPX one four -79
+KPX one nine -50
+KPX one one -67
+KPX one period -54
+KPX one seven -48
+KPX one six -70
+KPX one three -42
+KPX one two -27
+KPX one zero -61
+KPX p t -19
+KPX p y -40
+KPX period one -61
+KPX period quotedblright -46
+KPX period quoteright -43
+KPX q c -10
+KPX q u -10
+KPX quotedblbase A -17
+KPX quotedblbase AE -4
+KPX quotedblbase T -88
+KPX quotedblbase V -112
+KPX quotedblbase W -67
+KPX quotedblbase Y -108
+KPX quotedblleft A -131
+KPX quotedblleft AE -135
+KPX quotedblleft Aacute -131
+KPX quotedblleft Adieresis -131
+KPX quotedblleft Aring -131
+KPX quotedblleft T -14
+KPX quotedblleft V -9
+KPX quotedblleft W -8
+KPX quotedblleft Y -9
+KPX quotedblright A -130
+KPX quotedblright AE -134
+KPX quotedblright Aacute -130
+KPX quotedblright Adieresis -130
+KPX quotedblright Aring -130
+KPX quotedblright T -13
+KPX quotedblright V -8
+KPX quotedblright W -7
+KPX quotedblright Y -9
+KPX quoteleft A -128
+KPX quoteleft AE -132
+KPX quoteleft Aacute -128
+KPX quoteleft Adieresis -128
+KPX quoteleft Aring -128
+KPX quoteleft T -11
+KPX quoteleft V -6
+KPX quoteleft W -5
+KPX quoteleft Y -6
+KPX quoteright A -127
+KPX quoteright AE -131
+KPX quoteright Aacute -127
+KPX quoteright Adieresis -127
+KPX quoteright Aring -127
+KPX quoteright comma -78
+KPX quoteright d -61
+KPX quoteright o -43
+KPX quoteright period -63
+KPX quoteright r -31
+KPX quoteright s -25
+KPX quoteright t -32
+KPX quoteright v -21
+KPX quoteright w -20
+KPX quoteright y -23
+KPX r a -16
+KPX r aacute -16
+KPX r acircumflex -16
+KPX r adieresis -16
+KPX r ae -15
+KPX r agrave -16
+KPX r aring -16
+KPX r c -10
+KPX r ccedilla -8
+KPX r colon -18
+KPX r comma -71
+KPX r d -14
+KPX r e -5
+KPX r eacute -5
+KPX r ecircumflex -5
+KPX r egrave -5
+KPX r f 1
+KPX r g -12
+KPX r h -22
+KPX r hyphen -30
+KPX r i 9
+KPX r j 23
+KPX r k -30
+KPX r l -30
+KPX r m 11
+KPX r n 17
+KPX r o -9
+KPX r oacute -9
+KPX r ocircumflex -9
+KPX r odieresis -9
+KPX r oe -8
+KPX r ograve -9
+KPX r oslash -12
+KPX r p 15
+KPX r period -62
+KPX r q -17
+KPX r quoteright 9
+KPX r r 9
+KPX r s -1
+KPX r semicolon -32
+KPX r t 8
+KPX r u 11
+KPX r v 18
+KPX r w 18
+KPX r x 11
+KPX r y 15
+KPX r z -12
+KPX s quoteright -16
+KPX s t -15
+KPX seven colon -74
+KPX seven comma -135
+KPX seven eight -29
+KPX seven five -19
+KPX seven four -86
+KPX seven one -23
+KPX seven period -121
+KPX seven seven -1
+KPX seven six -66
+KPX seven three -23
+KPX seven two -16
+KPX six four 4
+KPX six one -75
+KPX six seven -42
+KPX t S 8
+KPX t a 3
+KPX t aacute 3
+KPX t adieresis 3
+KPX t ae 5
+KPX t aring 3
+KPX t colon -10
+KPX t e -9
+KPX t eacute -9
+KPX t h 13
+KPX t o -13
+KPX t oacute -13
+KPX t odieresis -13
+KPX t quoteright -3
+KPX t semicolon -24
+KPX three four 1
+KPX three one -52
+KPX three seven -33
+KPX two four -39
+KPX two one -42
+KPX two seven -23
+KPX u quoteright -22
+KPX v a -32
+KPX v aacute -32
+KPX v acircumflex -32
+KPX v adieresis -32
+KPX v ae -36
+KPX v agrave -32
+KPX v aring -32
+KPX v atilde -32
+KPX v c -52
+KPX v colon -20
+KPX v comma -111
+KPX v e -42
+KPX v eacute -42
+KPX v ecircumflex -42
+KPX v egrave -42
+KPX v g -41
+KPX v hyphen -35
+KPX v l -33
+KPX v o -40
+KPX v oacute -40
+KPX v odieresis -40
+KPX v ograve -40
+KPX v oslash -45
+KPX v period -97
+KPX v s -17
+KPX v semicolon -35
+KPX w a -32
+KPX w aacute -32
+KPX w acircumflex -32
+KPX w adieresis -32
+KPX w ae -36
+KPX w agrave -32
+KPX w aring -32
+KPX w atilde -32
+KPX w c -49
+KPX w colon -20
+KPX w comma -103
+KPX w e -42
+KPX w eacute -42
+KPX w ecircumflex -42
+KPX w egrave -42
+KPX w g -41
+KPX w hyphen -31
+KPX w l -33
+KPX w o -40
+KPX w oacute -40
+KPX w odieresis -40
+KPX w ograve -40
+KPX w oslash -45
+KPX w period -89
+KPX w s -17
+KPX w semicolon -35
+KPX x a -5
+KPX x c -27
+KPX x e -24
+KPX x eacute -24
+KPX x o -30
+KPX x q -28
+KPX y a -25
+KPX y aacute -25
+KPX y acircumflex -25
+KPX y adieresis -25
+KPX y ae -29
+KPX y agrave -25
+KPX y aring -25
+KPX y atilde -25
+KPX y c -45
+KPX y colon -13
+KPX y comma -104
+KPX y e -35
+KPX y eacute -35
+KPX y ecircumflex -35
+KPX y egrave -35
+KPX y g -34
+KPX y hyphen -28
+KPX y l -26
+KPX y o -33
+KPX y oacute -33
+KPX y odieresis -33
+KPX y ograve -33
+KPX y oslash -38
+KPX y period -90
+KPX y s -10
+KPX y semicolon -28
+KPX zero four -3
+KPX zero one -40
+KPX zero seven -18
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/p052003l.pfb b/Master/xemtex/gsfonts/p052003l.pfb
new file mode 100644
index 00000000000..7ce50ae34e8
--- /dev/null
+++ b/Master/xemtex/gsfonts/p052003l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/p052003l.pfm b/Master/xemtex/gsfonts/p052003l.pfm
new file mode 100644
index 00000000000..862ae96f8df
--- /dev/null
+++ b/Master/xemtex/gsfonts/p052003l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/p052004l.afm b/Master/xemtex/gsfonts/p052004l.afm
new file mode 100644
index 00000000000..3ca1361ff5b
--- /dev/null
+++ b/Master/xemtex/gsfonts/p052004l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName URWPalladioL-Bold
+FullName URW Palladio L Bold
+FamilyName URW Palladio L
+Weight Bold
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -152 -301 1000 935
+CapHeight 681
+XHeight 471
+Descender -258
+Ascender 720
+StartCharMetrics 316
+C 32 ; WX 250 ; N space ; B 125 0 125 0 ;
+C 33 ; WX 278 ; N exclam ; B 63 -12 219 688 ;
+C 34 ; WX 402 ; N quotedbl ; B 22 376 380 695 ;
+C 35 ; WX 500 ; N numbersign ; B 4 0 496 673 ;
+C 36 ; WX 500 ; N dollar ; B 28 -114 472 721 ;
+C 37 ; WX 889 ; N percent ; B 61 -9 828 714 ;
+C 38 ; WX 833 ; N ampersand ; B 52 -17 813 684 ;
+C 39 ; WX 278 ; N quoteright ; B 29 405 249 695 ;
+C 40 ; WX 333 ; N parenleft ; B 65 -104 305 723 ;
+C 41 ; WX 333 ; N parenright ; B 28 -104 268 723 ;
+C 42 ; WX 444 ; N asterisk ; B 44 332 399 695 ;
+C 43 ; WX 606 ; N plus ; B 51 0 555 505 ;
+C 44 ; WX 250 ; N comma ; B -6 -166 227 141 ;
+C 45 ; WX 333 ; N hyphen ; B 16 195 317 305 ;
+C 46 ; WX 250 ; N period ; B 47 -12 203 144 ;
+C 47 ; WX 296 ; N slash ; B -9 -17 305 720 ;
+C 48 ; WX 500 ; N zero ; B 33 -17 468 660 ;
+C 49 ; WX 500 ; N one ; B 35 -3 455 670 ;
+C 50 ; WX 500 ; N two ; B 25 -3 472 660 ;
+C 51 ; WX 500 ; N three ; B 22 -17 458 660 ;
+C 52 ; WX 500 ; N four ; B 12 -3 473 672 ;
+C 53 ; WX 500 ; N five ; B 42 -17 472 656 ;
+C 54 ; WX 500 ; N six ; B 37 -17 469 660 ;
+C 55 ; WX 500 ; N seven ; B 46 -3 493 656 ;
+C 56 ; WX 500 ; N eight ; B 34 -17 467 660 ;
+C 57 ; WX 500 ; N nine ; B 31 -17 463 660 ;
+C 58 ; WX 250 ; N colon ; B 47 -12 203 454 ;
+C 59 ; WX 250 ; N semicolon ; B -6 -166 227 454 ;
+C 60 ; WX 606 ; N less ; B 49 -19 558 523 ;
+C 61 ; WX 606 ; N equal ; B 51 114 555 396 ;
+C 62 ; WX 606 ; N greater ; B 49 -19 558 523 ;
+C 63 ; WX 444 ; N question ; B 43 -12 411 687 ;
+C 64 ; WX 747 ; N at ; B 42 -12 704 681 ;
+C 65 ; WX 778 ; N A ; B 24 -3 757 686 ;
+C 66 ; WX 667 ; N B ; B 39 -3 611 681 ;
+C 67 ; WX 722 ; N C ; B 44 -17 695 695 ;
+C 68 ; WX 833 ; N D ; B 35 -3 786 681 ;
+C 69 ; WX 611 ; N E ; B 39 -4 577 682 ;
+C 70 ; WX 556 ; N F ; B 28 -3 539 682 ;
+C 71 ; WX 833 ; N G ; B 47 -17 776 695 ;
+C 72 ; WX 833 ; N H ; B 36 -3 796 681 ;
+C 73 ; WX 389 ; N I ; B 39 -3 350 681 ;
+C 74 ; WX 389 ; N J ; B -11 -213 350 681 ;
+C 75 ; WX 778 ; N K ; B 39 -3 763 681 ;
+C 76 ; WX 611 ; N L ; B 39 -4 577 681 ;
+C 77 ; WX 1000 ; N M ; B 32 -10 968 681 ;
+C 78 ; WX 833 ; N N ; B 35 -16 798 681 ;
+C 79 ; WX 833 ; N O ; B 47 -17 787 695 ;
+C 80 ; WX 611 ; N P ; B 39 -3 594 681 ;
+C 81 ; WX 833 ; N Q ; B 47 -184 787 695 ;
+C 82 ; WX 722 ; N R ; B 39 -3 708 681 ;
+C 83 ; WX 611 ; N S ; B 57 -17 559 695 ;
+C 84 ; WX 667 ; N T ; B 17 -3 650 681 ;
+C 85 ; WX 778 ; N U ; B 26 -17 760 681 ;
+C 86 ; WX 778 ; N V ; B 20 -3 763 681 ;
+C 87 ; WX 1000 ; N W ; B 17 -3 988 686 ;
+C 88 ; WX 667 ; N X ; B 17 -3 650 695 ;
+C 89 ; WX 667 ; N Y ; B 15 -3 660 695 ;
+C 90 ; WX 667 ; N Z ; B 24 -3 627 681 ;
+C 91 ; WX 333 ; N bracketleft ; B 73 -104 291 720 ;
+C 92 ; WX 606 ; N backslash ; B 72 0 534 720 ;
+C 93 ; WX 333 ; N bracketright ; B 42 -104 260 720 ;
+C 94 ; WX 606 ; N asciicircum ; B 52 275 554 678 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 278 ; N quoteleft ; B 29 405 249 695 ;
+C 97 ; WX 500 ; N a ; B 40 -17 478 471 ;
+C 98 ; WX 611 ; N b ; B 10 -17 556 720 ;
+C 99 ; WX 444 ; N c ; B 37 -17 414 471 ;
+C 100 ; WX 611 ; N d ; B 42 -17 577 720 ;
+C 101 ; WX 500 ; N e ; B 42 -17 461 471 ;
+C 102 ; WX 389 ; N f ; B 34 -3 381 720 ;
+C 103 ; WX 556 ; N g ; B 26 -266 535 471 ;
+C 104 ; WX 611 ; N h ; B 24 -3 587 720 ;
+C 105 ; WX 333 ; N i ; B 34 -3 298 706 ;
+C 106 ; WX 333 ; N j ; B 3 -266 241 706 ;
+C 107 ; WX 611 ; N k ; B 21 -3 597 720 ;
+C 108 ; WX 333 ; N l ; B 24 -3 296 720 ;
+C 109 ; WX 889 ; N m ; B 24 -3 864 471 ;
+C 110 ; WX 611 ; N n ; B 24 -3 587 471 ;
+C 111 ; WX 556 ; N o ; B 40 -17 517 471 ;
+C 112 ; WX 611 ; N p ; B 29 -258 567 471 ;
+C 113 ; WX 611 ; N q ; B 52 -258 589 471 ;
+C 114 ; WX 389 ; N r ; B 30 -3 389 471 ;
+C 115 ; WX 444 ; N s ; B 39 -17 405 471 ;
+C 116 ; WX 333 ; N t ; B 22 -17 324 632 ;
+C 117 ; WX 611 ; N u ; B 25 -17 583 471 ;
+C 118 ; WX 556 ; N v ; B 11 -3 545 459 ;
+C 119 ; WX 833 ; N w ; B 13 -3 820 471 ;
+C 120 ; WX 500 ; N x ; B 20 -3 483 471 ;
+C 121 ; WX 556 ; N y ; B 10 -266 546 459 ;
+C 122 ; WX 500 ; N z ; B 16 -3 464 459 ;
+C 123 ; WX 310 ; N braceleft ; B 5 -117 288 725 ;
+C 124 ; WX 606 ; N bar ; B 260 0 346 720 ;
+C 125 ; WX 310 ; N braceright ; B 22 -117 305 725 ;
+C 126 ; WX 606 ; N asciitilde ; B 51 174 555 329 ;
+C 161 ; WX 278 ; N exclamdown ; B 59 -227 215 471 ;
+C 162 ; WX 500 ; N cent ; B 73 -106 450 554 ;
+C 163 ; WX 500 ; N sterling ; B -2 -19 501 676 ;
+C 164 ; WX 167 ; N fraction ; B -152 0 320 660 ;
+C 165 ; WX 500 ; N yen ; B 17 -3 483 695 ;
+C 166 ; WX 500 ; N florin ; B 11 -242 490 703 ;
+C 167 ; WX 500 ; N section ; B 30 -217 471 695 ;
+C 168 ; WX 500 ; N currency ; B 32 96 468 533 ;
+C 169 ; WX 227 ; N quotesingle ; B 45 376 181 695 ;
+C 170 ; WX 500 ; N quotedblleft ; B 34 405 466 695 ;
+C 171 ; WX 500 ; N guillemotleft ; B 36 44 463 438 ;
+C 172 ; WX 389 ; N guilsinglleft ; B 82 44 307 438 ;
+C 173 ; WX 389 ; N guilsinglright ; B 82 44 307 438 ;
+C 174 ; WX 611 ; N fi ; B 10 -3 595 720 ;
+C 175 ; WX 611 ; N fl ; B 17 -3 593 720 ;
+C 177 ; WX 500 ; N endash ; B 0 208 500 291 ;
+C 178 ; WX 500 ; N dagger ; B 29 -6 472 682 ;
+C 179 ; WX 500 ; N daggerdbl ; B 32 -245 468 682 ;
+C 180 ; WX 250 ; N periodcentered ; B 47 179 203 335 ;
+C 182 ; WX 641 ; N paragraph ; B 19 -161 599 683 ;
+C 183 ; WX 606 ; N bullet ; B 131 172 475 516 ;
+C 184 ; WX 333 ; N quotesinglbase ; B 56 -160 276 130 ;
+C 185 ; WX 500 ; N quotedblbase ; B 34 -160 466 130 ;
+C 186 ; WX 500 ; N quotedblright ; B 34 405 466 695 ;
+C 187 ; WX 500 ; N guillemotright ; B 37 44 464 438 ;
+C 188 ; WX 1000 ; N ellipsis ; B 89 -12 911 144 ;
+C 189 ; WX 1000 ; N perthousand ; B 33 -9 982 724 ;
+C 191 ; WX 444 ; N questiondown ; B 33 -231 401 471 ;
+C 193 ; WX 333 ; N grave ; B 18 506 256 691 ;
+C 194 ; WX 333 ; N acute ; B 78 506 316 691 ;
+C 195 ; WX 333 ; N circumflex ; B -2 506 335 681 ;
+C 196 ; WX 333 ; N tilde ; B -16 535 349 661 ;
+C 197 ; WX 333 ; N macron ; B 1 538 332 609 ;
+C 198 ; WX 333 ; N breve ; B 15 506 318 669 ;
+C 199 ; WX 333 ; N dotaccent ; B 100 537 234 671 ;
+C 200 ; WX 333 ; N dieresis ; B -8 537 341 671 ;
+C 202 ; WX 333 ; N ring ; B 67 500 267 700 ;
+C 203 ; WX 333 ; N cedilla ; B 73 -225 300 -7 ;
+C 205 ; WX 333 ; N hungarumlaut ; B -56 506 390 691 ;
+C 206 ; WX 333 ; N ogonek ; B 60 -229 274 0 ;
+C 207 ; WX 333 ; N caron ; B -2 510 335 685 ;
+C 208 ; WX 1000 ; N emdash ; B 0 208 1000 291 ;
+C 225 ; WX 1000 ; N AE ; B 12 -4 954 682 ;
+C 227 ; WX 438 ; N ordfeminine ; B 77 367 361 660 ;
+C 232 ; WX 611 ; N Lslash ; B 16 -4 577 681 ;
+C 233 ; WX 833 ; N Oslash ; B 32 -20 808 698 ;
+C 234 ; WX 1000 ; N OE ; B 43 -17 985 695 ;
+C 235 ; WX 488 ; N ordmasculine ; B 89 367 399 660 ;
+C 241 ; WX 778 ; N ae ; B 46 -17 731 471 ;
+C 245 ; WX 333 ; N dotlessi ; B 34 -3 298 471 ;
+C 248 ; WX 333 ; N lslash ; B -4 -3 334 720 ;
+C 249 ; WX 556 ; N oslash ; B 23 -18 534 471 ;
+C 250 ; WX 833 ; N oe ; B 48 -17 799 471 ;
+C 251 ; WX 611 ; N germandbls ; B 30 -17 565 720 ;
+C -1 ; WX 778 ; N Udieresis ; B 26 -17 760 895 ;
+C -1 ; WX 778 ; N Uacute ; B 26 -17 760 915 ;
+C -1 ; WX 611 ; N Scedilla ; B 57 -225 559 695 ;
+C -1 ; WX 667 ; N Tcaron ; B 17 -3 650 909 ;
+C -1 ; WX 611 ; N Scaron ; B 57 -17 559 909 ;
+C -1 ; WX 722 ; N Rcaron ; B 39 -3 708 909 ;
+C -1 ; WX 722 ; N Racute ; B 39 -3 708 915 ;
+C -1 ; WX 611 ; N Sacute ; B 57 -17 559 915 ;
+C -1 ; WX 833 ; N Otilde ; B 47 -17 787 885 ;
+C -1 ; WX 611 ; N ucircumflex ; B 25 -17 583 681 ;
+C -1 ; WX 833 ; N Ohungarumlaut ; B 47 -17 787 915 ;
+C -1 ; WX 778 ; N Uhungarumlaut ; B 26 -17 760 915 ;
+C -1 ; WX 667 ; N Yacute ; B 15 -3 660 915 ;
+C -1 ; WX 833 ; N Eth ; B 10 -3 786 681 ;
+C -1 ; WX 833 ; N Dcroat ; B 10 -3 786 681 ;
+C -1 ; WX 667 ; N Zacute ; B 24 -3 627 915 ;
+C -1 ; WX 778 ; N Uring ; B 26 -17 760 924 ;
+C -1 ; WX 556 ; N gbreve ; B 26 -266 535 669 ;
+C -1 ; WX 500 ; N eogonek ; B 42 -229 480 471 ;
+C -1 ; WX 500 ; N edotaccent ; B 42 -17 461 671 ;
+C -1 ; WX 500 ; N ecaron ; B 42 -17 461 685 ;
+C -1 ; WX 778 ; N Ugrave ; B 26 -17 760 915 ;
+C -1 ; WX 611 ; N Thorn ; B 39 -3 574 681 ;
+C -1 ; WX 500 ; N eacute ; B 42 -17 461 691 ;
+C -1 ; WX 500 ; N edieresis ; B 42 -17 461 671 ;
+C -1 ; WX 711 ; N dcaron ; B 42 -17 731 723 ;
+C -1 ; WX 444 ; N ccedilla ; B 37 -225 414 471 ;
+C -1 ; WX 444 ; N ccaron ; B 37 -17 431 685 ;
+C -1 ; WX 444 ; N cacute ; B 37 -17 444 691 ;
+C -1 ; WX 500 ; N aogonek ; B 40 -229 544 471 ;
+C -1 ; WX 500 ; N aring ; B 40 -17 478 700 ;
+C -1 ; WX 500 ; N atilde ; B 40 -17 478 661 ;
+C -1 ; WX 500 ; N abreve ; B 40 -17 478 669 ;
+C -1 ; WX 500 ; N egrave ; B 42 -17 461 691 ;
+C -1 ; WX 500 ; N agrave ; B 40 -17 478 691 ;
+C -1 ; WX 500 ; N aacute ; B 40 -17 478 691 ;
+C -1 ; WX 500 ; N adieresis ; B 40 -17 478 671 ;
+C -1 ; WX 778 ; N Uogonek ; B 26 -229 760 681 ;
+C -1 ; WX 611 ; N ugrave ; B 25 -17 583 691 ;
+C -1 ; WX 611 ; N uacute ; B 25 -17 583 691 ;
+C -1 ; WX 611 ; N udieresis ; B 25 -17 583 671 ;
+C -1 ; WX 402 ; N tcaron ; B 22 -17 422 695 ;
+C -1 ; WX 444 ; N scommaaccent ; B 39 -301 405 471 ;
+C -1 ; WX 667 ; N Zcaron ; B 24 -3 627 909 ;
+C -1 ; WX 500 ; N ecircumflex ; B 42 -17 461 681 ;
+C -1 ; WX 778 ; N Ucircumflex ; B 26 -17 760 905 ;
+C -1 ; WX 500 ; N acircumflex ; B 40 -17 478 681 ;
+C -1 ; WX 667 ; N Zdotaccent ; B 24 -3 627 895 ;
+C -1 ; WX 444 ; N scaron ; B 39 -17 405 685 ;
+C -1 ; WX 778 ; N Amacron ; B 24 -3 757 833 ;
+C -1 ; WX 444 ; N sacute ; B 39 -17 412 691 ;
+C -1 ; WX 667 ; N Tcommaaccent ; B 17 -301 650 681 ;
+C -1 ; WX 667 ; N Ydieresis ; B 15 -3 660 895 ;
+C -1 ; WX 611 ; N thorn ; B 17 -258 563 720 ;
+C -1 ; WX 611 ; N Emacron ; B 39 -4 577 833 ;
+C -1 ; WX 833 ; N Ograve ; B 47 -17 787 915 ;
+C -1 ; WX 833 ; N Oacute ; B 47 -17 787 915 ;
+C -1 ; WX 833 ; N Odieresis ; B 47 -17 787 895 ;
+C -1 ; WX 833 ; N Ntilde ; B 35 -16 798 885 ;
+C -1 ; WX 833 ; N Ncaron ; B 35 -16 798 909 ;
+C -1 ; WX 833 ; N Nacute ; B 35 -16 798 915 ;
+C -1 ; WX 611 ; N Lcaron ; B 39 -4 605 695 ;
+C -1 ; WX 611 ; N Lacute ; B 39 -4 577 915 ;
+C -1 ; WX 389 ; N Idotaccent ; B 39 -3 350 895 ;
+C -1 ; WX 389 ; N racute ; B 30 -3 409 691 ;
+C -1 ; WX 389 ; N Icircumflex ; B 26 -3 363 905 ;
+C -1 ; WX 556 ; N ohungarumlaut ; B 40 -17 556 691 ;
+C -1 ; WX 556 ; N otilde ; B 40 -17 517 661 ;
+C -1 ; WX 500 ; N Euro ; B 1 -17 470 695 ;
+C -1 ; WX 556 ; N ocircumflex ; B 40 -17 517 681 ;
+C -1 ; WX 300 ; N onesuperior ; B 18 259 277 663 ;
+C -1 ; WX 300 ; N twosuperior ; B 12 259 287 657 ;
+C -1 ; WX 300 ; N threesuperior ; B 9 251 278 657 ;
+C -1 ; WX 389 ; N Igrave ; B 39 -3 350 915 ;
+C -1 ; WX 389 ; N Iacute ; B 39 -3 350 915 ;
+C -1 ; WX 389 ; N Imacron ; B 29 -3 360 833 ;
+C -1 ; WX 389 ; N Iogonek ; B 39 -229 409 681 ;
+C -1 ; WX 389 ; N Idieresis ; B 20 -3 369 895 ;
+C -1 ; WX 833 ; N Gbreve ; B 47 -17 776 893 ;
+C -1 ; WX 778 ; N Umacron ; B 26 -17 760 833 ;
+C -1 ; WX 778 ; N Kcommaaccent ; B 39 -301 763 681 ;
+C -1 ; WX 556 ; N ograve ; B 40 -17 517 691 ;
+C -1 ; WX 611 ; N Scommaaccent ; B 57 -301 559 695 ;
+C -1 ; WX 611 ; N Eogonek ; B 39 -229 613 682 ;
+C -1 ; WX 556 ; N oacute ; B 40 -17 517 691 ;
+C -1 ; WX 611 ; N Edotaccent ; B 39 -4 577 895 ;
+C -1 ; WX 333 ; N iogonek ; B 34 -229 363 706 ;
+C -1 ; WX 556 ; N gcommaaccent ; B 26 -266 535 755 ;
+C -1 ; WX 556 ; N odieresis ; B 40 -17 517 671 ;
+C -1 ; WX 611 ; N ntilde ; B 24 -3 587 661 ;
+C -1 ; WX 611 ; N ncaron ; B 24 -3 587 685 ;
+C -1 ; WX 611 ; N Ecaron ; B 39 -4 577 909 ;
+C -1 ; WX 611 ; N Ecircumflex ; B 39 -4 577 905 ;
+C -1 ; WX 444 ; N scedilla ; B 39 -225 405 471 ;
+C -1 ; WX 389 ; N rcaron ; B 26 -3 389 685 ;
+C -1 ; WX 611 ; N Egrave ; B 39 -4 577 915 ;
+C -1 ; WX 611 ; N Eacute ; B 39 -4 577 915 ;
+C -1 ; WX 833 ; N Gcommaaccent ; B 47 -301 776 695 ;
+C -1 ; WX 722 ; N Rcommaaccent ; B 39 -301 708 681 ;
+C -1 ; WX 611 ; N Edieresis ; B 39 -4 577 895 ;
+C -1 ; WX 611 ; N nacute ; B 24 -3 587 691 ;
+C -1 ; WX 611 ; N uogonek ; B 25 -229 641 471 ;
+C -1 ; WX 611 ; N umacron ; B 25 -17 583 609 ;
+C -1 ; WX 833 ; N Dcaron ; B 35 -3 786 909 ;
+C -1 ; WX 433 ; N lcaron ; B 24 -3 453 723 ;
+C -1 ; WX 722 ; N Ccaron ; B 44 -17 695 909 ;
+C -1 ; WX 722 ; N Cacute ; B 44 -17 695 915 ;
+C -1 ; WX 722 ; N Ccedilla ; B 44 -225 695 695 ;
+C -1 ; WX 400 ; N degree ; B 50 360 350 660 ;
+C -1 ; WX 778 ; N Aogonek ; B 24 -229 818 686 ;
+C -1 ; WX 606 ; N minus ; B 51 212 555 298 ;
+C -1 ; WX 606 ; N multiply ; B 72 21 534 483 ;
+C -1 ; WX 606 ; N divide ; B 51 0 555 510 ;
+C -1 ; WX 778 ; N Aring ; B 24 -3 757 934 ;
+C -1 ; WX 998 ; N trademark ; B 38 274 961 678 ;
+C -1 ; WX 389 ; N rcommaaccent ; B 30 -301 389 471 ;
+C -1 ; WX 333 ; N lacute ; B 24 -3 316 915 ;
+C -1 ; WX 556 ; N omacron ; B 40 -17 517 609 ;
+C -1 ; WX 778 ; N Atilde ; B 24 -3 757 885 ;
+C -1 ; WX 333 ; N icircumflex ; B -2 -3 335 681 ;
+C -1 ; WX 333 ; N igrave ; B 18 -3 298 691 ;
+C -1 ; WX 611 ; N ncommaaccent ; B 24 -301 587 471 ;
+C -1 ; WX 333 ; N lcommaaccent ; B 24 -301 296 720 ;
+C -1 ; WX 606 ; N plusminus ; B 51 0 555 568 ;
+C -1 ; WX 750 ; N onehalf ; B 9 -2 745 665 ;
+C -1 ; WX 750 ; N onequarter ; B 19 -2 735 665 ;
+C -1 ; WX 750 ; N threequarters ; B 15 -2 735 667 ;
+C -1 ; WX 333 ; N iacute ; B 34 -3 316 691 ;
+C -1 ; WX 778 ; N Abreve ; B 24 -3 757 893 ;
+C -1 ; WX 611 ; N kcommaaccent ; B 21 -301 597 720 ;
+C -1 ; WX 833 ; N Omacron ; B 47 -17 787 833 ;
+C -1 ; WX 333 ; N imacron ; B 1 -3 332 609 ;
+C -1 ; WX 500 ; N emacron ; B 42 -17 461 609 ;
+C -1 ; WX 500 ; N amacron ; B 40 -17 478 609 ;
+C -1 ; WX 333 ; N tcommaaccent ; B 22 -301 324 632 ;
+C -1 ; WX 556 ; N ydieresis ; B 10 -266 546 671 ;
+C -1 ; WX 500 ; N zdotaccent ; B 16 -3 464 671 ;
+C -1 ; WX 500 ; N zcaron ; B 16 -3 464 685 ;
+C -1 ; WX 500 ; N zacute ; B 16 -3 464 691 ;
+C -1 ; WX 556 ; N yacute ; B 10 -266 546 691 ;
+C -1 ; WX 611 ; N uhungarumlaut ; B 25 -17 583 691 ;
+C -1 ; WX 556 ; N eth ; B 40 -17 517 720 ;
+C -1 ; WX 611 ; N uring ; B 25 -17 583 700 ;
+C -1 ; WX 833 ; N Ocircumflex ; B 47 -17 787 905 ;
+C -1 ; WX 333 ; N commaaccent ; B 48 -301 246 -40 ;
+C -1 ; WX 747 ; N copyright ; B 26 -17 720 695 ;
+C -1 ; WX 747 ; N registered ; B 26 -17 720 695 ;
+C -1 ; WX 778 ; N Acircumflex ; B 24 -3 757 905 ;
+C -1 ; WX 333 ; N idieresis ; B -8 -3 341 691 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 606 ; N notequal ; B 51 -32 555 556 ;
+C -1 ; WX 549 ; N radical ; B -15 -96 536 935 ;
+C -1 ; WX 778 ; N Agrave ; B 24 -3 757 915 ;
+C -1 ; WX 778 ; N Aacute ; B 24 -3 757 915 ;
+C -1 ; WX 606 ; N lessequal ; B 49 0 558 662 ;
+C -1 ; WX 606 ; N greaterequal ; B 49 0 558 662 ;
+C -1 ; WX 606 ; N logicalnot ; B 51 114 555 396 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 23 -13 466 750 ;
+C -1 ; WX 833 ; N Ncommaaccent ; B 35 -301 798 681 ;
+C -1 ; WX 611 ; N dcroat ; B 42 -17 591 720 ;
+C -1 ; WX 606 ; N brokenbar ; B 260 0 346 720 ;
+C -1 ; WX 611 ; N Lcommaaccent ; B 39 -301 577 681 ;
+C -1 ; WX 778 ; N Adieresis ; B 24 -3 757 895 ;
+C -1 ; WX 611 ; N mu ; B 25 -225 583 471 ;
+C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -51
+KPX A Ccedilla -51
+KPX A G -54
+KPX A O -45
+KPX A Odieresis -45
+KPX A Q -41
+KPX A T -53
+KPX A U -46
+KPX A Uacute -46
+KPX A Ucircumflex -46
+KPX A Udieresis -46
+KPX A Ugrave -46
+KPX A V -124
+KPX A W -71
+KPX A Y -66
+KPX A a 7
+KPX A b -8
+KPX A c -13
+KPX A ccedilla -15
+KPX A comma 7
+KPX A d -14
+KPX A e -15
+KPX A g 0
+KPX A guillemotleft -49
+KPX A guilsinglleft -72
+KPX A hyphen -12
+KPX A o -16
+KPX A period 12
+KPX A q -18
+KPX A quotedblright -83
+KPX A quoteright -81
+KPX A t -14
+KPX A u -26
+KPX A v -68
+KPX A w -58
+KPX A y -72
+KPX Aacute C -51
+KPX Aacute G -54
+KPX Aacute O -45
+KPX Aacute Q -41
+KPX Aacute T -53
+KPX Aacute U -46
+KPX Aacute V -124
+KPX Aacute W -71
+KPX Aacute Y -66
+KPX Aacute a 7
+KPX Aacute b -8
+KPX Aacute c -13
+KPX Aacute comma 7
+KPX Aacute d -14
+KPX Aacute e -15
+KPX Aacute g 0
+KPX Aacute guillemotleft -49
+KPX Aacute guilsinglleft -72
+KPX Aacute hyphen -12
+KPX Aacute o -16
+KPX Aacute period 12
+KPX Aacute q -18
+KPX Aacute quoteright -81
+KPX Aacute t -14
+KPX Aacute u -26
+KPX Aacute v -68
+KPX Aacute w -58
+KPX Aacute y -72
+KPX Acircumflex C -51
+KPX Acircumflex G -54
+KPX Acircumflex O -45
+KPX Acircumflex Q -41
+KPX Acircumflex T -53
+KPX Acircumflex U -46
+KPX Acircumflex V -124
+KPX Acircumflex W -71
+KPX Acircumflex Y -66
+KPX Acircumflex comma 7
+KPX Acircumflex period 12
+KPX Adieresis C -51
+KPX Adieresis G -54
+KPX Adieresis O -45
+KPX Adieresis Q -41
+KPX Adieresis T -53
+KPX Adieresis U -46
+KPX Adieresis V -124
+KPX Adieresis W -71
+KPX Adieresis Y -66
+KPX Adieresis a 7
+KPX Adieresis b -8
+KPX Adieresis c -13
+KPX Adieresis comma 7
+KPX Adieresis d -14
+KPX Adieresis g 0
+KPX Adieresis guillemotleft -49
+KPX Adieresis guilsinglleft -72
+KPX Adieresis hyphen -12
+KPX Adieresis o -16
+KPX Adieresis period 12
+KPX Adieresis q -18
+KPX Adieresis quotedblright -83
+KPX Adieresis quoteright -81
+KPX Adieresis t -14
+KPX Adieresis u -26
+KPX Adieresis v -68
+KPX Adieresis w -58
+KPX Adieresis y -72
+KPX Agrave C -51
+KPX Agrave G -54
+KPX Agrave O -45
+KPX Agrave Q -41
+KPX Agrave T -53
+KPX Agrave U -46
+KPX Agrave V -124
+KPX Agrave W -71
+KPX Agrave Y -66
+KPX Agrave comma 7
+KPX Agrave period 12
+KPX Aring C -51
+KPX Aring G -54
+KPX Aring O -45
+KPX Aring Q -41
+KPX Aring T -53
+KPX Aring U -46
+KPX Aring V -124
+KPX Aring W -71
+KPX Aring Y -66
+KPX Aring a 7
+KPX Aring b -8
+KPX Aring c -13
+KPX Aring comma 7
+KPX Aring d -14
+KPX Aring e -15
+KPX Aring g 0
+KPX Aring guillemotleft -49
+KPX Aring guilsinglleft -72
+KPX Aring hyphen -12
+KPX Aring o -16
+KPX Aring period 12
+KPX Aring q -18
+KPX Aring quotedblright -83
+KPX Aring quoteright -81
+KPX Aring t -14
+KPX Aring u -26
+KPX Aring v -68
+KPX Aring w -58
+KPX Aring y -72
+KPX Atilde C -51
+KPX Atilde G -54
+KPX Atilde O -45
+KPX Atilde Q -41
+KPX Atilde T -53
+KPX Atilde U -46
+KPX Atilde V -124
+KPX Atilde W -71
+KPX Atilde Y -66
+KPX Atilde comma 7
+KPX Atilde period 12
+KPX B A -36
+KPX B AE -39
+KPX B Aacute -36
+KPX B Acircumflex -36
+KPX B Adieresis -36
+KPX B Aring -36
+KPX B Atilde -36
+KPX B O -7
+KPX B OE -4
+KPX B Oacute -7
+KPX B Ocircumflex -7
+KPX B Odieresis -7
+KPX B Ograve -7
+KPX B Oslash -3
+KPX B V -20
+KPX B W -18
+KPX B Y -9
+KPX C A 11
+KPX C AE 10
+KPX C Aacute 11
+KPX C Adieresis 11
+KPX C Aring 11
+KPX C H 13
+KPX C K 12
+KPX C O -13
+KPX C Oacute -13
+KPX C Odieresis -13
+KPX Ccedilla A 11
+KPX D A -67
+KPX D Aacute -67
+KPX D Acircumflex -67
+KPX D Adieresis -67
+KPX D Agrave -67
+KPX D Aring -67
+KPX D Atilde -67
+KPX D J -25
+KPX D T -3
+KPX D V -41
+KPX D W -34
+KPX D X -35
+KPX D Y -29
+KPX F A -67
+KPX F Aacute -67
+KPX F Acircumflex -67
+KPX F Adieresis -67
+KPX F Agrave -67
+KPX F Aring -67
+KPX F Atilde -67
+KPX F J 18
+KPX F O -9
+KPX F Odieresis -9
+KPX F a -35
+KPX F aacute -35
+KPX F adieresis -5
+KPX F ae -38
+KPX F aring -35
+KPX F comma -46
+KPX F e -18
+KPX F eacute -18
+KPX F hyphen 19
+KPX F i -10
+KPX F j -11
+KPX F o -17
+KPX F oacute -17
+KPX F odieresis -17
+KPX F oe -21
+KPX F oslash -17
+KPX F period -36
+KPX F r -13
+KPX F u -10
+KPX G A -14
+KPX G AE -17
+KPX G Aacute -14
+KPX G Acircumflex -14
+KPX G Adieresis -14
+KPX G Agrave -14
+KPX G Aring -14
+KPX G Atilde -14
+KPX G T -17
+KPX G V -18
+KPX G W -16
+KPX G Y -14
+KPX J A -29
+KPX J AE -24
+KPX J Adieresis -29
+KPX J Aring -29
+KPX K C -48
+KPX K G -51
+KPX K O -42
+KPX K OE -42
+KPX K Oacute -42
+KPX K Odieresis -42
+KPX K S 10
+KPX K T 18
+KPX K a 10
+KPX K adieresis 10
+KPX K ae 6
+KPX K aring 10
+KPX K e -12
+KPX K hyphen -43
+KPX K o -13
+KPX K oacute -13
+KPX K odieresis -13
+KPX K u -23
+KPX K udieresis -23
+KPX K y -72
+KPX L A 13
+KPX L AE 19
+KPX L Aacute 13
+KPX L Adieresis 13
+KPX L Aring 13
+KPX L C -11
+KPX L Ccedilla -11
+KPX L G -14
+KPX L O -9
+KPX L Oacute -9
+KPX L Ocircumflex -9
+KPX L Odieresis -9
+KPX L Ograve -9
+KPX L Otilde -9
+KPX L S -3
+KPX L T -63
+KPX L U -26
+KPX L Udieresis -26
+KPX L V -94
+KPX L W -64
+KPX L Y -77
+KPX L hyphen 19
+KPX L quotedblright -82
+KPX L quoteright -79
+KPX L u -22
+KPX L udieresis -22
+KPX L y -57
+KPX N A -24
+KPX N AE -18
+KPX N Aacute -24
+KPX N Adieresis -24
+KPX N Aring -24
+KPX N C -21
+KPX N Ccedilla -21
+KPX N G -23
+KPX N O -20
+KPX N Oacute -20
+KPX N Odieresis -20
+KPX N a -28
+KPX N aacute -28
+KPX N adieresis -15
+KPX N ae -31
+KPX N aring -28
+KPX N comma -11
+KPX N e -23
+KPX N eacute -23
+KPX N o -22
+KPX N oacute -22
+KPX N odieresis -22
+KPX N oslash -17
+KPX N period -3
+KPX N u -29
+KPX N udieresis -29
+KPX O A -51
+KPX O AE -54
+KPX O Aacute -51
+KPX O Adieresis -51
+KPX O Aring -51
+KPX O T -9
+KPX O V -49
+KPX O W -31
+KPX O X -42
+KPX O Y -37
+KPX Oacute A -51
+KPX Oacute T -9
+KPX Oacute V -49
+KPX Oacute W -31
+KPX Oacute Y -37
+KPX Ocircumflex T -9
+KPX Ocircumflex V -49
+KPX Ocircumflex Y -37
+KPX Odieresis A -51
+KPX Odieresis T -9
+KPX Odieresis V -49
+KPX Odieresis W -31
+KPX Odieresis X -42
+KPX Odieresis Y -37
+KPX Ograve T -9
+KPX Ograve V -49
+KPX Ograve Y -37
+KPX Oslash A -52
+KPX Otilde T -9
+KPX Otilde V -49
+KPX Otilde Y -37
+KPX P A -88
+KPX P AE -85
+KPX P Aacute -88
+KPX P Adieresis -88
+KPX P Aring -88
+KPX P J 0
+KPX P a -28
+KPX P aacute -28
+KPX P adieresis -7
+KPX P ae -29
+KPX P aring -28
+KPX P comma -96
+KPX P e -35
+KPX P eacute -35
+KPX P hyphen -27
+KPX P o -33
+KPX P oacute -33
+KPX P odieresis -21
+KPX P oe -37
+KPX P oslash -33
+KPX P period -86
+KPX R C -35
+KPX R Ccedilla -35
+KPX R G -37
+KPX R O -34
+KPX R OE -31
+KPX R Oacute -34
+KPX R Odieresis -34
+KPX R T -25
+KPX R U -41
+KPX R Udieresis -41
+KPX R V -40
+KPX R W -38
+KPX R Y -30
+KPX R a 11
+KPX R aacute 11
+KPX R adieresis 11
+KPX R ae 6
+KPX R aring 11
+KPX R e -12
+KPX R eacute -12
+KPX R hyphen -22
+KPX R o -12
+KPX R oacute -12
+KPX R odieresis -12
+KPX R oe -16
+KPX R u -22
+KPX R uacute -22
+KPX R udieresis -22
+KPX R y -27
+KPX S A -27
+KPX S AE -30
+KPX S Aacute -27
+KPX S Adieresis -27
+KPX S Aring -27
+KPX S T -9
+KPX S V -9
+KPX S W -8
+KPX S Y -7
+KPX S t -14
+KPX T A -54
+KPX T AE -48
+KPX T Aacute -54
+KPX T Acircumflex -54
+KPX T Adieresis -54
+KPX T Agrave -54
+KPX T Aring -54
+KPX T Atilde -54
+KPX T C -12
+KPX T G -13
+KPX T J 18
+KPX T O -12
+KPX T OE -6
+KPX T Oacute -12
+KPX T Ocircumflex -12
+KPX T Odieresis -12
+KPX T Ograve -12
+KPX T Oslash -12
+KPX T Otilde -12
+KPX T S -1
+KPX T V 28
+KPX T W 29
+KPX T Y 29
+KPX T a -71
+KPX T ae -75
+KPX T c -92
+KPX T colon -67
+KPX T comma -71
+KPX T e -90
+KPX T g -79
+KPX T guillemotleft -101
+KPX T guilsinglleft -124
+KPX T hyphen -60
+KPX T i -11
+KPX T j -12
+KPX T o -89
+KPX T oslash -59
+KPX T period -65
+KPX T r -61
+KPX T s -65
+KPX T semicolon -71
+KPX T u -100
+KPX T v -94
+KPX T w -95
+KPX T y -93
+KPX U A -51
+KPX U AE -54
+KPX U Aacute -51
+KPX U Acircumflex -51
+KPX U Adieresis -51
+KPX U Aring -51
+KPX U Atilde -51
+KPX U comma -24
+KPX U m -20
+KPX U n -20
+KPX U p -23
+KPX U period -13
+KPX U r -23
+KPX Uacute A -51
+KPX Uacute comma -24
+KPX Uacute m -20
+KPX Uacute n -20
+KPX Uacute p -23
+KPX Uacute period -13
+KPX Uacute r -23
+KPX Ucircumflex A -51
+KPX Udieresis A -51
+KPX Udieresis b 29
+KPX Udieresis comma -24
+KPX Udieresis m -20
+KPX Udieresis n -20
+KPX Udieresis p -23
+KPX Udieresis period -13
+KPX Udieresis r -23
+KPX Ugrave A -51
+KPX V A -115
+KPX V AE -119
+KPX V Aacute -115
+KPX V Acircumflex -115
+KPX V Adieresis -115
+KPX V Agrave -115
+KPX V Aring -115
+KPX V Atilde -115
+KPX V C -53
+KPX V G -55
+KPX V O -52
+KPX V Oacute -52
+KPX V Ocircumflex -52
+KPX V Odieresis -52
+KPX V Ograve -52
+KPX V Oslash -51
+KPX V Otilde -52
+KPX V S -26
+KPX V T 30
+KPX V a -87
+KPX V ae -87
+KPX V colon -63
+KPX V comma -101
+KPX V e -84
+KPX V g -78
+KPX V guillemotleft -89
+KPX V guilsinglleft -112
+KPX V hyphen -48
+KPX V i -8
+KPX V o -83
+KPX V oslash -79
+KPX V period -91
+KPX V r -52
+KPX V semicolon -77
+KPX V u -49
+KPX V y -36
+KPX W A -82
+KPX W AE -78
+KPX W Aacute -82
+KPX W Acircumflex -82
+KPX W Adieresis -82
+KPX W Agrave -82
+KPX W Aring -82
+KPX W Atilde -82
+KPX W C -36
+KPX W G -38
+KPX W O -36
+KPX W Oacute -36
+KPX W Ocircumflex -36
+KPX W Odieresis -36
+KPX W Ograve -36
+KPX W Oslash -31
+KPX W Otilde -36
+KPX W S -24
+KPX W T 32
+KPX W a -60
+KPX W ae -64
+KPX W colon -42
+KPX W comma -61
+KPX W e -53
+KPX W g -55
+KPX W guillemotleft -60
+KPX W guilsinglleft -83
+KPX W hyphen -19
+KPX W i -6
+KPX W o -52
+KPX W oslash -49
+KPX W period -51
+KPX W r -35
+KPX W semicolon -55
+KPX W u -33
+KPX W y -21
+KPX X C -38
+KPX X O -36
+KPX X Odieresis -36
+KPX X Q -36
+KPX X a 9
+KPX X e -13
+KPX X hyphen -20
+KPX X o -14
+KPX X u -24
+KPX X y -61
+KPX Y A -41
+KPX Y AE -35
+KPX Y Aacute -41
+KPX Y Acircumflex -41
+KPX Y Adieresis -41
+KPX Y Agrave -41
+KPX Y Aring -41
+KPX Y Atilde -41
+KPX Y C -46
+KPX Y G -47
+KPX Y O -45
+KPX Y Oacute -45
+KPX Y Ocircumflex -45
+KPX Y Odieresis -45
+KPX Y Ograve -45
+KPX Y Oslash -39
+KPX Y Otilde -45
+KPX Y S -24
+KPX Y T 34
+KPX Y a -57
+KPX Y ae -62
+KPX Y colon -54
+KPX Y comma -57
+KPX Y e -69
+KPX Y g -65
+KPX Y guillemotleft -82
+KPX Y guilsinglleft -105
+KPX Y hyphen -45
+KPX Y i -5
+KPX Y o -68
+KPX Y oslash -45
+KPX Y p -51
+KPX Y period -51
+KPX Y semicolon -58
+KPX Y u -49
+KPX Y v -35
+KPX Z v -46
+KPX Z y -49
+KPX a j -23
+KPX a quoteright 0
+KPX a v -18
+KPX a w -19
+KPX a y -22
+KPX aacute v -18
+KPX aacute w -19
+KPX aacute y -22
+KPX adieresis v -18
+KPX adieresis w -19
+KPX adieresis y -22
+KPX ae v -8
+KPX ae w -9
+KPX ae y -12
+KPX agrave v -18
+KPX agrave w -19
+KPX agrave y -22
+KPX aring v -18
+KPX aring w -19
+KPX aring y -22
+KPX b v -18
+KPX b w -19
+KPX b y -22
+KPX c h 9
+KPX c k 7
+KPX comma one -9
+KPX comma quotedblright 14
+KPX comma quoteright 17
+KPX e quoteright 17
+KPX e t 5
+KPX e v -4
+KPX e w -5
+KPX e x -1
+KPX e y -8
+KPX eacute v -4
+KPX eacute w -5
+KPX eacute y -8
+KPX ecircumflex v -4
+KPX ecircumflex w -5
+KPX ecircumflex y -8
+KPX eight four 24
+KPX eight one -4
+KPX eight seven -4
+KPX f a -13
+KPX f aacute -13
+KPX f adieresis -2
+KPX f ae -16
+KPX f aring -13
+KPX f e -14
+KPX f eacute -14
+KPX f f 10
+KPX f i 15
+KPX f j 15
+KPX f l 23
+KPX f o -12
+KPX f oacute -12
+KPX f odieresis -12
+KPX f oe -16
+KPX f oslash -1
+KPX f quoteright 19
+KPX f s 2
+KPX f t 16
+KPX five four 26
+KPX five one 0
+KPX five seven -3
+KPX four four 25
+KPX four one -4
+KPX four seven -12
+KPX g a -4
+KPX g adieresis -4
+KPX g ae -9
+KPX g aring -4
+KPX g e -14
+KPX g eacute -14
+KPX g l 10
+KPX g oacute -12
+KPX g odieresis -12
+KPX g r 13
+KPX guillemotright A -50
+KPX guillemotright AE -63
+KPX guillemotright Aacute -50
+KPX guillemotright Adieresis -50
+KPX guillemotright Aring -50
+KPX guillemotright T -101
+KPX guillemotright V -99
+KPX guillemotright W -54
+KPX guillemotright Y -106
+KPX guilsinglright A -73
+KPX guilsinglright AE -86
+KPX guilsinglright Aacute -73
+KPX guilsinglright Adieresis -73
+KPX guilsinglright Aring -73
+KPX guilsinglright T -124
+KPX guilsinglright V -122
+KPX guilsinglright W -77
+KPX guilsinglright Y -129
+KPX h quoteright -6
+KPX h y -27
+KPX hyphen A -13
+KPX hyphen AE -28
+KPX hyphen Aacute -13
+KPX hyphen Adieresis -13
+KPX hyphen Aring -13
+KPX hyphen T -60
+KPX hyphen V -57
+KPX hyphen W -12
+KPX hyphen Y -70
+KPX i T -15
+KPX i j -30
+KPX k a 7
+KPX k aacute 7
+KPX k adieresis 7
+KPX k ae 3
+KPX k aring 7
+KPX k comma 7
+KPX k e -15
+KPX k eacute -15
+KPX k g 0
+KPX k hyphen -37
+KPX k o -16
+KPX k oacute -16
+KPX k odieresis -16
+KPX k period 11
+KPX k s 13
+KPX k u 4
+KPX k udieresis 4
+KPX l v -20
+KPX l y -19
+KPX m p -23
+KPX m v -24
+KPX m w -25
+KPX m y -26
+KPX n T -58
+KPX n p -22
+KPX n quoteright -6
+KPX n v -24
+KPX n w -25
+KPX n y -27
+KPX nine four 7
+KPX nine one -1
+KPX nine seven 3
+KPX o T -89
+KPX o quoteright 6
+KPX o t -2
+KPX o v -18
+KPX o w -19
+KPX o x -16
+KPX o y -22
+KPX oacute v -18
+KPX oacute w -19
+KPX oacute y -22
+KPX ocircumflex t -2
+KPX odieresis t -2
+KPX odieresis v -18
+KPX odieresis w -19
+KPX odieresis x -16
+KPX odieresis y -22
+KPX ograve v -18
+KPX ograve w -19
+KPX ograve y -22
+KPX one comma -4
+KPX one eight -12
+KPX one five -8
+KPX one four -41
+KPX one nine -11
+KPX one one -13
+KPX one period -1
+KPX one seven -21
+KPX one six -25
+KPX one three 3
+KPX one two 11
+KPX one zero -21
+KPX p t 0
+KPX p y -17
+KPX period one -16
+KPX period quotedblright 0
+KPX period quoteright 1
+KPX q c -18
+KPX q u -13
+KPX quotedblbase A 14
+KPX quotedblbase AE 14
+KPX quotedblbase T -59
+KPX quotedblbase V -94
+KPX quotedblbase W -36
+KPX quotedblbase Y -72
+KPX quotedblleft A -87
+KPX quotedblleft AE -117
+KPX quotedblleft Aacute -87
+KPX quotedblleft Adieresis -87
+KPX quotedblleft Aring -87
+KPX quotedblleft T 20
+KPX quotedblleft V 19
+KPX quotedblleft W 20
+KPX quotedblleft Y 20
+KPX quotedblright A -87
+KPX quotedblright AE -117
+KPX quotedblright Aacute -87
+KPX quotedblright Adieresis -87
+KPX quotedblright Aring -87
+KPX quotedblright T 20
+KPX quotedblright V 19
+KPX quotedblright W 20
+KPX quotedblright Y 20
+KPX quoteleft A -84
+KPX quoteleft AE -114
+KPX quoteleft Aacute -84
+KPX quoteleft Adieresis -84
+KPX quoteleft Aring -84
+KPX quoteleft T 23
+KPX quoteleft V 21
+KPX quoteleft W 23
+KPX quoteleft Y 23
+KPX quoteright A -84
+KPX quoteright AE -114
+KPX quoteright Aacute -84
+KPX quoteright Adieresis -84
+KPX quoteright Aring -84
+KPX quoteright comma -33
+KPX quoteright d -31
+KPX quoteright o -21
+KPX quoteright period -21
+KPX quoteright r -9
+KPX quoteright s -6
+KPX quoteright t -6
+KPX quoteright v 1
+KPX quoteright w 1
+KPX quoteright y 3
+KPX r a -5
+KPX r aacute -5
+KPX r acircumflex -5
+KPX r adieresis -5
+KPX r ae -7
+KPX r agrave -5
+KPX r aring -5
+KPX r c 7
+KPX r ccedilla 7
+KPX r colon 17
+KPX r comma -25
+KPX r d 6
+KPX r e 8
+KPX r eacute 8
+KPX r ecircumflex 8
+KPX r egrave 8
+KPX r f 19
+KPX r g 12
+KPX r h -8
+KPX r hyphen 20
+KPX r i 21
+KPX r j 21
+KPX r k -10
+KPX r l -12
+KPX r m 26
+KPX r n 26
+KPX r o 9
+KPX r oacute 9
+KPX r ocircumflex 9
+KPX r odieresis 9
+KPX r oe 5
+KPX r ograve 9
+KPX r oslash 9
+KPX r p 24
+KPX r period -21
+KPX r q 0
+KPX r quoteright 45
+KPX r r 23
+KPX r s 17
+KPX r semicolon 6
+KPX r t 26
+KPX r u 26
+KPX r v 33
+KPX r w 32
+KPX r x 28
+KPX r y 34
+KPX r z 10
+KPX s quoteright 7
+KPX s t -10
+KPX seven colon -34
+KPX seven comma -80
+KPX seven eight -3
+KPX seven five -2
+KPX seven four -44
+KPX seven one 17
+KPX seven period -70
+KPX seven seven 20
+KPX seven six -31
+KPX seven three 2
+KPX seven two 7
+KPX six four 25
+KPX six one -21
+KPX six seven -9
+KPX t S 8
+KPX t a 12
+KPX t aacute 12
+KPX t adieresis 12
+KPX t ae 9
+KPX t aring 12
+KPX t colon 15
+KPX t e -4
+KPX t eacute -4
+KPX t h 18
+KPX t o -4
+KPX t oacute -4
+KPX t odieresis -4
+KPX t quoteright 22
+KPX t semicolon 4
+KPX three four 19
+KPX three one -14
+KPX three seven -13
+KPX two four 0
+KPX two one -5
+KPX two seven -5
+KPX u quoteright 1
+KPX v a -19
+KPX v aacute -19
+KPX v acircumflex -19
+KPX v adieresis -19
+KPX v ae -20
+KPX v agrave -19
+KPX v aring -19
+KPX v atilde -19
+KPX v c -39
+KPX v colon 10
+KPX v comma -70
+KPX v e -27
+KPX v eacute -27
+KPX v ecircumflex -27
+KPX v egrave -27
+KPX v g -10
+KPX v hyphen -13
+KPX v l -17
+KPX v o -22
+KPX v oacute -22
+KPX v odieresis -22
+KPX v ograve -22
+KPX v oslash -22
+KPX v period -59
+KPX v s -3
+KPX v semicolon -4
+KPX w a -20
+KPX w aacute -20
+KPX w acircumflex -20
+KPX w adieresis -20
+KPX w ae -21
+KPX w agrave -20
+KPX w aring -20
+KPX w atilde -20
+KPX w c -36
+KPX w colon 9
+KPX w comma -57
+KPX w e -28
+KPX w eacute -28
+KPX w ecircumflex -28
+KPX w egrave -28
+KPX w g -11
+KPX w hyphen -8
+KPX w l -18
+KPX w o -23
+KPX w oacute -23
+KPX w odieresis -23
+KPX w ograve -23
+KPX w oslash -23
+KPX w period -47
+KPX w s -4
+KPX w semicolon -5
+KPX x a 6
+KPX x c -15
+KPX x e -17
+KPX x eacute -17
+KPX x o -17
+KPX x q -19
+KPX y a -27
+KPX y aacute -27
+KPX y acircumflex -27
+KPX y adieresis -27
+KPX y ae -28
+KPX y agrave -27
+KPX y aring -27
+KPX y atilde -27
+KPX y c -37
+KPX y colon 7
+KPX y comma -67
+KPX y e -34
+KPX y eacute -34
+KPX y ecircumflex -34
+KPX y egrave -34
+KPX y g -15
+KPX y hyphen -11
+KPX y l -17
+KPX y o -28
+KPX y oacute -28
+KPX y odieresis -28
+KPX y ograve -28
+KPX y oslash -28
+KPX y period -57
+KPX y s -8
+KPX y semicolon -7
+KPX zero four 20
+KPX zero one 1
+KPX zero seven 6
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/p052004l.pfb b/Master/xemtex/gsfonts/p052004l.pfb
new file mode 100644
index 00000000000..fc19c9ecdd9
--- /dev/null
+++ b/Master/xemtex/gsfonts/p052004l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/p052004l.pfm b/Master/xemtex/gsfonts/p052004l.pfm
new file mode 100644
index 00000000000..429fdc48909
--- /dev/null
+++ b/Master/xemtex/gsfonts/p052004l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/p052023l.afm b/Master/xemtex/gsfonts/p052023l.afm
new file mode 100644
index 00000000000..504655b8632
--- /dev/null
+++ b/Master/xemtex/gsfonts/p052023l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName URWPalladioL-Ital
+FullName URW Palladio L Italic
+FamilyName URW Palladio L
+Weight Regular
+ItalicAngle -9.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -170 -305 1010 941
+CapHeight 692
+XHeight 471
+Descender -276
+Ascender 733
+StartCharMetrics 316
+C 32 ; WX 250 ; N space ; B 125 0 125 0 ;
+C 33 ; WX 333 ; N exclam ; B 76 -8 292 733 ;
+C 34 ; WX 500 ; N quotedbl ; B 140 508 455 733 ;
+C 35 ; WX 500 ; N numbersign ; B 4 0 495 692 ;
+C 36 ; WX 500 ; N dollar ; B 15 -113 452 733 ;
+C 37 ; WX 889 ; N percent ; B 74 -7 809 710 ;
+C 38 ; WX 778 ; N ampersand ; B 47 -18 766 692 ;
+C 39 ; WX 278 ; N quoteright ; B 78 488 258 733 ;
+C 40 ; WX 333 ; N parenleft ; B 54 -106 331 733 ;
+C 41 ; WX 333 ; N parenright ; B 2 -106 279 733 ;
+C 42 ; WX 389 ; N asterisk ; B 76 368 400 706 ;
+C 43 ; WX 606 ; N plus ; B 51 0 555 504 ;
+C 44 ; WX 250 ; N comma ; B 8 -143 203 123 ;
+C 45 ; WX 333 ; N hyphen ; B 19 223 304 281 ;
+C 46 ; WX 250 ; N period ; B 53 -5 158 112 ;
+C 47 ; WX 296 ; N slash ; B -40 -119 392 733 ;
+C 48 ; WX 500 ; N zero ; B 36 -11 480 699 ;
+C 49 ; WX 500 ; N one ; B 54 -3 398 699 ;
+C 50 ; WX 500 ; N two ; B 12 -3 437 699 ;
+C 51 ; WX 500 ; N three ; B 22 -11 447 699 ;
+C 52 ; WX 500 ; N four ; B 15 -3 478 699 ;
+C 53 ; WX 500 ; N five ; B 14 -11 491 693 ;
+C 54 ; WX 500 ; N six ; B 49 -11 469 699 ;
+C 55 ; WX 500 ; N seven ; B 53 -3 502 692 ;
+C 56 ; WX 500 ; N eight ; B 36 -11 469 699 ;
+C 57 ; WX 500 ; N nine ; B 32 -11 468 699 ;
+C 58 ; WX 250 ; N colon ; B 44 -5 207 458 ;
+C 59 ; WX 250 ; N semicolon ; B -9 -146 219 456 ;
+C 60 ; WX 606 ; N less ; B 53 -2 554 524 ;
+C 61 ; WX 606 ; N equal ; B 51 126 555 378 ;
+C 62 ; WX 606 ; N greater ; B 53 -2 554 524 ;
+C 63 ; WX 500 ; N question ; B 114 -8 427 706 ;
+C 64 ; WX 747 ; N at ; B 27 -18 718 706 ;
+C 65 ; WX 722 ; N A ; B -19 -3 677 705 ;
+C 66 ; WX 611 ; N B ; B 26 -6 559 692 ;
+C 67 ; WX 667 ; N C ; B 45 -18 651 706 ;
+C 68 ; WX 778 ; N D ; B 28 -3 741 693 ;
+C 69 ; WX 611 ; N E ; B 30 -3 570 692 ;
+C 70 ; WX 556 ; N F ; B 0 -3 548 692 ;
+C 71 ; WX 722 ; N G ; B 50 -18 694 706 ;
+C 72 ; WX 778 ; N H ; B -3 -3 800 692 ;
+C 73 ; WX 333 ; N I ; B 7 -3 354 692 ;
+C 74 ; WX 333 ; N J ; B -35 -206 358 692 ;
+C 75 ; WX 667 ; N K ; B 13 -3 683 692 ;
+C 76 ; WX 556 ; N L ; B 16 -3 523 692 ;
+C 77 ; WX 944 ; N M ; B -19 -18 940 692 ;
+C 78 ; WX 778 ; N N ; B 2 -11 804 692 ;
+C 79 ; WX 778 ; N O ; B 53 -18 748 706 ;
+C 80 ; WX 611 ; N P ; B 9 -3 594 695 ;
+C 81 ; WX 778 ; N Q ; B 53 -201 748 706 ;
+C 82 ; WX 667 ; N R ; B 9 -3 639 694 ;
+C 83 ; WX 556 ; N S ; B 42 -18 506 706 ;
+C 84 ; WX 611 ; N T ; B 53 -3 635 692 ;
+C 85 ; WX 778 ; N U ; B 88 -19 798 692 ;
+C 86 ; WX 722 ; N V ; B 75 -8 754 692 ;
+C 87 ; WX 944 ; N W ; B 71 -8 980 700 ;
+C 88 ; WX 722 ; N X ; B 20 -3 734 692 ;
+C 89 ; WX 667 ; N Y ; B 52 -3 675 705 ;
+C 90 ; WX 667 ; N Z ; B 20 -3 637 692 ;
+C 91 ; WX 333 ; N bracketleft ; B 18 -100 326 733 ;
+C 92 ; WX 606 ; N backslash ; B 81 0 513 733 ;
+C 93 ; WX 333 ; N bracketright ; B 7 -100 315 733 ;
+C 94 ; WX 606 ; N asciicircum ; B 51 283 554 689 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 278 ; N quoteleft ; B 78 488 258 733 ;
+C 97 ; WX 444 ; N a ; B 4 -11 406 482 ;
+C 98 ; WX 463 ; N b ; B 37 -11 433 733 ;
+C 99 ; WX 407 ; N c ; B 25 -11 389 482 ;
+C 100 ; WX 500 ; N d ; B 17 -11 483 733 ;
+C 101 ; WX 389 ; N e ; B 15 -11 374 482 ;
+C 102 ; WX 278 ; N f ; B -162 -276 413 733 ;
+C 103 ; WX 500 ; N g ; B -37 -276 498 482 ;
+C 104 ; WX 500 ; N h ; B 10 -9 471 733 ;
+C 105 ; WX 278 ; N i ; B 34 -9 264 712 ;
+C 106 ; WX 278 ; N j ; B -70 -276 265 712 ;
+C 107 ; WX 444 ; N k ; B 8 -9 449 733 ;
+C 108 ; WX 278 ; N l ; B 36 -9 251 733 ;
+C 109 ; WX 778 ; N m ; B 24 -9 740 482 ;
+C 110 ; WX 556 ; N n ; B 24 -9 514 482 ;
+C 111 ; WX 444 ; N o ; B 17 -11 411 482 ;
+C 112 ; WX 500 ; N p ; B -7 -276 465 482 ;
+C 113 ; WX 463 ; N q ; B 24 -276 432 482 ;
+C 114 ; WX 389 ; N r ; B 26 -9 384 482 ;
+C 115 ; WX 389 ; N s ; B 9 -11 345 482 ;
+C 116 ; WX 333 ; N t ; B 41 -9 310 646 ;
+C 117 ; WX 556 ; N u ; B 32 -11 512 482 ;
+C 118 ; WX 500 ; N v ; B 21 -11 477 482 ;
+C 119 ; WX 722 ; N w ; B 21 -11 699 482 ;
+C 120 ; WX 500 ; N x ; B 9 -11 484 482 ;
+C 121 ; WX 500 ; N y ; B -8 -276 490 482 ;
+C 122 ; WX 444 ; N z ; B -1 -11 416 482 ;
+C 123 ; WX 333 ; N braceleft ; B 15 -100 319 733 ;
+C 124 ; WX 606 ; N bar ; B 275 0 331 733 ;
+C 125 ; WX 333 ; N braceright ; B 14 -100 318 733 ;
+C 126 ; WX 606 ; N asciitilde ; B 51 169 555 328 ;
+C 161 ; WX 333 ; N exclamdown ; B 15 -276 233 467 ;
+C 162 ; WX 500 ; N cent ; B 56 -96 418 551 ;
+C 163 ; WX 500 ; N sterling ; B 2 -18 479 708 ;
+C 164 ; WX 167 ; N fraction ; B -170 0 337 699 ;
+C 165 ; WX 500 ; N yen ; B 35 -3 512 701 ;
+C 166 ; WX 500 ; N florin ; B 5 -276 470 711 ;
+C 167 ; WX 500 ; N section ; B 14 -220 463 706 ;
+C 168 ; WX 500 ; N currency ; B 14 115 486 577 ;
+C 169 ; WX 333 ; N quotesingle ; B 140 508 288 733 ;
+C 170 ; WX 500 ; N quotedblleft ; B 98 488 475 733 ;
+C 171 ; WX 500 ; N guillemotleft ; B 57 70 437 440 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 57 70 270 440 ;
+C 173 ; WX 333 ; N guilsinglright ; B 63 70 276 440 ;
+C 174 ; WX 528 ; N fi ; B -162 -276 502 733 ;
+C 175 ; WX 545 ; N fl ; B -162 -276 520 734 ;
+C 177 ; WX 500 ; N endash ; B -10 228 510 278 ;
+C 178 ; WX 500 ; N dagger ; B 48 0 469 692 ;
+C 179 ; WX 500 ; N daggerdbl ; B 10 -162 494 692 ;
+C 180 ; WX 250 ; N periodcentered ; B 53 195 158 312 ;
+C 182 ; WX 500 ; N paragraph ; B 33 -224 611 692 ;
+C 183 ; WX 500 ; N bullet ; B 86 182 430 526 ;
+C 184 ; WX 278 ; N quotesinglbase ; B 27 -122 211 120 ;
+C 185 ; WX 500 ; N quotedblbase ; B 43 -122 424 120 ;
+C 186 ; WX 500 ; N quotedblright ; B 98 488 475 733 ;
+C 187 ; WX 500 ; N guillemotright ; B 63 70 443 440 ;
+C 188 ; WX 1000 ; N ellipsis ; B 102 -5 873 112 ;
+C 189 ; WX 1000 ; N perthousand ; B 72 -6 929 717 ;
+C 191 ; WX 500 ; N questiondown ; B 57 -246 370 467 ;
+C 193 ; WX 333 ; N grave ; B 86 518 310 687 ;
+C 194 ; WX 333 ; N acute ; B 122 518 346 687 ;
+C 195 ; WX 333 ; N circumflex ; B 56 510 350 679 ;
+C 196 ; WX 333 ; N tilde ; B 63 535 390 638 ;
+C 197 ; WX 333 ; N macron ; B 74 538 386 589 ;
+C 198 ; WX 333 ; N breve ; B 92 518 393 677 ;
+C 199 ; WX 333 ; N dotaccent ; B 175 537 283 645 ;
+C 200 ; WX 333 ; N dieresis ; B 78 537 378 637 ;
+C 202 ; WX 333 ; N ring ; B 159 518 359 718 ;
+C 203 ; WX 333 ; N cedilla ; B -9 -216 202 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B 46 518 385 731 ;
+C 206 ; WX 333 ; N ogonek ; B 38 -207 196 -18 ;
+C 207 ; WX 333 ; N caron ; B 104 510 409 679 ;
+C 208 ; WX 1000 ; N emdash ; B -10 228 1010 278 ;
+C 225 ; WX 941 ; N AE ; B -4 -3 902 692 ;
+C 227 ; WX 333 ; N ordfeminine ; B 60 404 321 699 ;
+C 232 ; WX 556 ; N Lslash ; B -16 -3 523 692 ;
+C 233 ; WX 778 ; N Oslash ; B 32 -39 762 721 ;
+C 234 ; WX 1028 ; N OE ; B 56 -18 989 707 ;
+C 235 ; WX 333 ; N ordmasculine ; B 66 404 322 699 ;
+C 241 ; WX 638 ; N ae ; B 1 -11 623 482 ;
+C 245 ; WX 278 ; N dotlessi ; B 34 -9 241 482 ;
+C 248 ; WX 278 ; N lslash ; B -10 -9 302 733 ;
+C 249 ; WX 444 ; N oslash ; B -18 -24 460 510 ;
+C 250 ; WX 669 ; N oe ; B 17 -11 654 482 ;
+C 251 ; WX 500 ; N germandbls ; B -160 -276 488 733 ;
+C -1 ; WX 778 ; N Udieresis ; B 88 -19 798 847 ;
+C -1 ; WX 778 ; N Uacute ; B 88 -19 798 897 ;
+C -1 ; WX 556 ; N Scedilla ; B 42 -216 506 706 ;
+C -1 ; WX 611 ; N Tcaron ; B 53 -3 635 889 ;
+C -1 ; WX 556 ; N Scaron ; B 42 -18 559 907 ;
+C -1 ; WX 667 ; N Rcaron ; B 9 -3 639 889 ;
+C -1 ; WX 667 ; N Racute ; B 9 -3 639 897 ;
+C -1 ; WX 556 ; N Sacute ; B 42 -18 556 897 ;
+C -1 ; WX 778 ; N Otilde ; B 53 -18 748 866 ;
+C -1 ; WX 556 ; N ucircumflex ; B 32 -11 512 679 ;
+C -1 ; WX 778 ; N Ohungarumlaut ; B 53 -18 748 941 ;
+C -1 ; WX 778 ; N Uhungarumlaut ; B 88 -19 798 941 ;
+C -1 ; WX 667 ; N Yacute ; B 52 -3 675 897 ;
+C -1 ; WX 778 ; N Eth ; B 19 -3 741 693 ;
+C -1 ; WX 778 ; N Dcroat ; B 19 -3 741 693 ;
+C -1 ; WX 667 ; N Zacute ; B 20 -3 637 897 ;
+C -1 ; WX 778 ; N Uring ; B 88 -19 798 928 ;
+C -1 ; WX 500 ; N gbreve ; B -37 -276 498 677 ;
+C -1 ; WX 389 ; N eogonek ; B 15 -187 374 482 ;
+C -1 ; WX 389 ; N edotaccent ; B 15 -11 374 645 ;
+C -1 ; WX 389 ; N ecaron ; B 15 -11 437 679 ;
+C -1 ; WX 778 ; N Ugrave ; B 88 -19 798 897 ;
+C -1 ; WX 611 ; N Thorn ; B 9 -3 570 692 ;
+C -1 ; WX 389 ; N eacute ; B 15 -11 394 687 ;
+C -1 ; WX 389 ; N edieresis ; B 15 -11 406 637 ;
+C -1 ; WX 577 ; N dcaron ; B 17 -11 637 733 ;
+C -1 ; WX 407 ; N ccedilla ; B 25 -216 389 482 ;
+C -1 ; WX 407 ; N ccaron ; B 25 -11 466 679 ;
+C -1 ; WX 407 ; N cacute ; B 25 -11 423 687 ;
+C -1 ; WX 444 ; N aogonek ; B 4 -187 406 482 ;
+C -1 ; WX 444 ; N aring ; B 4 -11 406 718 ;
+C -1 ; WX 444 ; N atilde ; B 4 -11 446 638 ;
+C -1 ; WX 444 ; N abreve ; B 4 -11 449 677 ;
+C -1 ; WX 389 ; N egrave ; B 15 -11 374 687 ;
+C -1 ; WX 444 ; N agrave ; B 4 -11 406 687 ;
+C -1 ; WX 444 ; N aacute ; B 4 -11 448 687 ;
+C -1 ; WX 444 ; N adieresis ; B 4 -11 434 637 ;
+C -1 ; WX 778 ; N Uogonek ; B 88 -188 798 692 ;
+C -1 ; WX 556 ; N ugrave ; B 32 -11 512 687 ;
+C -1 ; WX 556 ; N uacute ; B 32 -11 526 687 ;
+C -1 ; WX 556 ; N udieresis ; B 32 -11 512 637 ;
+C -1 ; WX 361 ; N tcaron ; B 41 -9 421 733 ;
+C -1 ; WX 389 ; N scommaaccent ; B 9 -305 345 482 ;
+C -1 ; WX 667 ; N Zcaron ; B 20 -3 637 907 ;
+C -1 ; WX 389 ; N ecircumflex ; B 15 -11 398 679 ;
+C -1 ; WX 778 ; N Ucircumflex ; B 88 -19 798 889 ;
+C -1 ; WX 444 ; N acircumflex ; B 4 -11 406 679 ;
+C -1 ; WX 667 ; N Zdotaccent ; B 20 -3 637 855 ;
+C -1 ; WX 389 ; N scaron ; B 9 -11 419 679 ;
+C -1 ; WX 722 ; N Amacron ; B -19 -3 677 799 ;
+C -1 ; WX 389 ; N sacute ; B 9 -11 419 687 ;
+C -1 ; WX 611 ; N Tcommaaccent ; B 53 -305 635 692 ;
+C -1 ; WX 667 ; N Ydieresis ; B 52 -3 675 847 ;
+C -1 ; WX 500 ; N thorn ; B -39 -276 433 733 ;
+C -1 ; WX 611 ; N Emacron ; B 30 -3 570 799 ;
+C -1 ; WX 778 ; N Ograve ; B 53 -18 748 897 ;
+C -1 ; WX 778 ; N Oacute ; B 53 -18 748 897 ;
+C -1 ; WX 778 ; N Odieresis ; B 53 -18 748 847 ;
+C -1 ; WX 778 ; N Ntilde ; B 2 -11 804 866 ;
+C -1 ; WX 778 ; N Ncaron ; B 2 -11 804 889 ;
+C -1 ; WX 778 ; N Nacute ; B 2 -11 804 897 ;
+C -1 ; WX 556 ; N Lcaron ; B 16 -3 536 713 ;
+C -1 ; WX 556 ; N Lacute ; B 16 -3 523 897 ;
+C -1 ; WX 333 ; N Idotaccent ; B 7 -3 354 855 ;
+C -1 ; WX 389 ; N racute ; B 26 -9 419 687 ;
+C -1 ; WX 333 ; N Icircumflex ; B 7 -3 390 889 ;
+C -1 ; WX 444 ; N ohungarumlaut ; B 17 -11 484 731 ;
+C -1 ; WX 444 ; N otilde ; B 17 -11 446 638 ;
+C -1 ; WX 500 ; N Euro ; B 42 -21 615 709 ;
+C -1 ; WX 444 ; N ocircumflex ; B 17 -11 411 679 ;
+C -1 ; WX 300 ; N onesuperior ; B 61 278 285 699 ;
+C -1 ; WX 300 ; N twosuperior ; B 13 278 290 699 ;
+C -1 ; WX 300 ; N threesuperior ; B 28 273 304 699 ;
+C -1 ; WX 333 ; N Igrave ; B 7 -3 354 897 ;
+C -1 ; WX 333 ; N Iacute ; B 7 -3 406 897 ;
+C -1 ; WX 333 ; N Imacron ; B 7 -3 399 799 ;
+C -1 ; WX 333 ; N Iogonek ; B 7 -188 354 692 ;
+C -1 ; WX 333 ; N Idieresis ; B 7 -3 398 847 ;
+C -1 ; WX 722 ; N Gbreve ; B 50 -18 694 887 ;
+C -1 ; WX 778 ; N Umacron ; B 88 -19 798 799 ;
+C -1 ; WX 667 ; N Kcommaaccent ; B 13 -305 683 692 ;
+C -1 ; WX 444 ; N ograve ; B 17 -11 411 687 ;
+C -1 ; WX 556 ; N Scommaaccent ; B 42 -305 506 706 ;
+C -1 ; WX 611 ; N Eogonek ; B 30 -187 570 692 ;
+C -1 ; WX 444 ; N oacute ; B 17 -11 414 687 ;
+C -1 ; WX 611 ; N Edotaccent ; B 30 -3 570 855 ;
+C -1 ; WX 278 ; N iogonek ; B 34 -187 264 712 ;
+C -1 ; WX 500 ; N gcommaaccent ; B -37 -276 498 753 ;
+C -1 ; WX 444 ; N odieresis ; B 17 -11 434 637 ;
+C -1 ; WX 556 ; N ntilde ; B 24 -9 514 638 ;
+C -1 ; WX 556 ; N ncaron ; B 24 -9 521 679 ;
+C -1 ; WX 611 ; N Ecaron ; B 30 -3 570 889 ;
+C -1 ; WX 611 ; N Ecircumflex ; B 30 -3 570 889 ;
+C -1 ; WX 389 ; N scedilla ; B 9 -216 345 482 ;
+C -1 ; WX 389 ; N rcaron ; B 26 -9 437 679 ;
+C -1 ; WX 611 ; N Egrave ; B 30 -3 570 897 ;
+C -1 ; WX 611 ; N Eacute ; B 30 -3 570 897 ;
+C -1 ; WX 722 ; N Gcommaaccent ; B 50 -305 694 706 ;
+C -1 ; WX 667 ; N Rcommaaccent ; B 9 -305 639 694 ;
+C -1 ; WX 611 ; N Edieresis ; B 30 -3 570 847 ;
+C -1 ; WX 556 ; N nacute ; B 24 -9 514 687 ;
+C -1 ; WX 556 ; N uogonek ; B 32 -187 512 482 ;
+C -1 ; WX 556 ; N umacron ; B 32 -11 512 589 ;
+C -1 ; WX 778 ; N Dcaron ; B 28 -3 741 889 ;
+C -1 ; WX 346 ; N lcaron ; B 36 -9 406 733 ;
+C -1 ; WX 667 ; N Ccaron ; B 45 -18 651 889 ;
+C -1 ; WX 667 ; N Cacute ; B 45 -18 651 897 ;
+C -1 ; WX 667 ; N Ccedilla ; B 45 -216 651 706 ;
+C -1 ; WX 400 ; N degree ; B 90 389 390 689 ;
+C -1 ; WX 722 ; N Aogonek ; B -19 -187 728 705 ;
+C -1 ; WX 606 ; N minus ; B 51 224 555 280 ;
+C -1 ; WX 606 ; N multiply ; B 83 36 523 474 ;
+C -1 ; WX 606 ; N divide ; B 51 0 555 504 ;
+C -1 ; WX 722 ; N Aring ; B -19 -3 677 937 ;
+C -1 ; WX 1000 ; N trademark ; B 52 285 951 689 ;
+C -1 ; WX 389 ; N rcommaaccent ; B -5 -305 384 482 ;
+C -1 ; WX 278 ; N lacute ; B 36 -9 379 897 ;
+C -1 ; WX 444 ; N omacron ; B 17 -11 442 589 ;
+C -1 ; WX 722 ; N Atilde ; B -19 -3 677 866 ;
+C -1 ; WX 278 ; N icircumflex ; B 29 -9 323 679 ;
+C -1 ; WX 278 ; N igrave ; B 34 -9 271 687 ;
+C -1 ; WX 556 ; N ncommaaccent ; B 24 -305 514 482 ;
+C -1 ; WX 278 ; N lcommaaccent ; B -28 -305 251 733 ;
+C -1 ; WX 606 ; N plusminus ; B 51 0 555 512 ;
+C -1 ; WX 750 ; N onehalf ; B 31 -2 721 699 ;
+C -1 ; WX 750 ; N onequarter ; B 31 -2 715 699 ;
+C -1 ; WX 750 ; N threequarters ; B 35 -2 715 699 ;
+C -1 ; WX 278 ; N iacute ; B 34 -9 331 687 ;
+C -1 ; WX 722 ; N Abreve ; B -19 -3 677 887 ;
+C -1 ; WX 444 ; N kcommaaccent ; B 8 -305 449 733 ;
+C -1 ; WX 778 ; N Omacron ; B 53 -18 748 799 ;
+C -1 ; WX 278 ; N imacron ; B 34 -9 359 589 ;
+C -1 ; WX 389 ; N emacron ; B 15 -11 414 589 ;
+C -1 ; WX 444 ; N amacron ; B 4 -11 442 589 ;
+C -1 ; WX 333 ; N tcommaaccent ; B 20 -305 310 646 ;
+C -1 ; WX 500 ; N ydieresis ; B -8 -276 490 637 ;
+C -1 ; WX 444 ; N zdotaccent ; B -1 -11 416 645 ;
+C -1 ; WX 444 ; N zcaron ; B -1 -11 447 679 ;
+C -1 ; WX 444 ; N zacute ; B -1 -11 416 687 ;
+C -1 ; WX 500 ; N yacute ; B -8 -276 490 687 ;
+C -1 ; WX 556 ; N uhungarumlaut ; B 32 -11 536 731 ;
+C -1 ; WX 444 ; N eth ; B 17 -11 478 733 ;
+C -1 ; WX 556 ; N uring ; B 32 -11 512 718 ;
+C -1 ; WX 778 ; N Ocircumflex ; B 53 -18 748 889 ;
+C -1 ; WX 333 ; N commaaccent ; B 20 -305 200 -60 ;
+C -1 ; WX 747 ; N copyright ; B 11 -18 736 706 ;
+C -1 ; WX 747 ; N registered ; B 11 -18 736 706 ;
+C -1 ; WX 722 ; N Acircumflex ; B -19 -3 677 889 ;
+C -1 ; WX 278 ; N idieresis ; B 34 -9 351 657 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 606 ; N notequal ; B 51 -33 555 541 ;
+C -1 ; WX 549 ; N radical ; B 5 -48 520 918 ;
+C -1 ; WX 722 ; N Agrave ; B -19 -3 677 897 ;
+C -1 ; WX 722 ; N Aacute ; B -19 -3 677 897 ;
+C -1 ; WX 606 ; N lessequal ; B 53 0 554 613 ;
+C -1 ; WX 606 ; N greaterequal ; B 53 0 554 613 ;
+C -1 ; WX 606 ; N logicalnot ; B 51 118 555 378 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 778 ; N Ncommaaccent ; B 2 -305 804 692 ;
+C -1 ; WX 500 ; N dcroat ; B 17 -11 540 733 ;
+C -1 ; WX 606 ; N brokenbar ; B 275 0 331 733 ;
+C -1 ; WX 556 ; N Lcommaaccent ; B 16 -305 523 692 ;
+C -1 ; WX 722 ; N Adieresis ; B -19 -3 677 847 ;
+C -1 ; WX 556 ; N mu ; B 15 -226 512 482 ;
+C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -44
+KPX A Ccedilla -44
+KPX A G -47
+KPX A O -47
+KPX A Odieresis -47
+KPX A Q -47
+KPX A T -35
+KPX A U -51
+KPX A Uacute -51
+KPX A Ucircumflex -51
+KPX A Udieresis -51
+KPX A Ugrave -51
+KPX A V -93
+KPX A W -71
+KPX A Y -58
+KPX A a 6
+KPX A b -15
+KPX A c -17
+KPX A ccedilla -17
+KPX A comma -20
+KPX A d -1
+KPX A e -11
+KPX A g -34
+KPX A guillemotleft -56
+KPX A guilsinglleft -56
+KPX A hyphen -7
+KPX A o -16
+KPX A period -7
+KPX A q -3
+KPX A quotedblright -76
+KPX A quoteright -66
+KPX A t -17
+KPX A u -23
+KPX A v -42
+KPX A w -38
+KPX A y -37
+KPX Aacute C -44
+KPX Aacute G -47
+KPX Aacute O -47
+KPX Aacute Q -47
+KPX Aacute T -35
+KPX Aacute U -51
+KPX Aacute V -93
+KPX Aacute W -71
+KPX Aacute Y -58
+KPX Aacute a 6
+KPX Aacute b -15
+KPX Aacute c -17
+KPX Aacute comma -20
+KPX Aacute d -1
+KPX Aacute e -11
+KPX Aacute g -34
+KPX Aacute guillemotleft -56
+KPX Aacute guilsinglleft -56
+KPX Aacute hyphen -7
+KPX Aacute o -16
+KPX Aacute period -7
+KPX Aacute q -3
+KPX Aacute quoteright -66
+KPX Aacute t -17
+KPX Aacute u -23
+KPX Aacute v -42
+KPX Aacute w -38
+KPX Aacute y -37
+KPX Acircumflex C -44
+KPX Acircumflex G -47
+KPX Acircumflex O -47
+KPX Acircumflex Q -47
+KPX Acircumflex T -35
+KPX Acircumflex U -51
+KPX Acircumflex V -93
+KPX Acircumflex W -71
+KPX Acircumflex Y -58
+KPX Acircumflex comma -20
+KPX Acircumflex period -7
+KPX Adieresis C -44
+KPX Adieresis G -47
+KPX Adieresis O -47
+KPX Adieresis Q -47
+KPX Adieresis T -35
+KPX Adieresis U -51
+KPX Adieresis V -93
+KPX Adieresis W -71
+KPX Adieresis Y -58
+KPX Adieresis a 6
+KPX Adieresis b -15
+KPX Adieresis c -17
+KPX Adieresis comma -20
+KPX Adieresis d -1
+KPX Adieresis g -34
+KPX Adieresis guillemotleft -56
+KPX Adieresis guilsinglleft -56
+KPX Adieresis hyphen -7
+KPX Adieresis o -16
+KPX Adieresis period -7
+KPX Adieresis q -3
+KPX Adieresis quotedblright -76
+KPX Adieresis quoteright -66
+KPX Adieresis t -17
+KPX Adieresis u -23
+KPX Adieresis v -42
+KPX Adieresis w -38
+KPX Adieresis y -37
+KPX Agrave C -44
+KPX Agrave G -47
+KPX Agrave O -47
+KPX Agrave Q -47
+KPX Agrave T -35
+KPX Agrave U -51
+KPX Agrave V -93
+KPX Agrave W -71
+KPX Agrave Y -58
+KPX Agrave comma -20
+KPX Agrave period -7
+KPX Aring C -44
+KPX Aring G -47
+KPX Aring O -47
+KPX Aring Q -47
+KPX Aring T -35
+KPX Aring U -51
+KPX Aring V -93
+KPX Aring W -71
+KPX Aring Y -58
+KPX Aring a 6
+KPX Aring b -15
+KPX Aring c -17
+KPX Aring comma -20
+KPX Aring d -1
+KPX Aring e -11
+KPX Aring g -34
+KPX Aring guillemotleft -56
+KPX Aring guilsinglleft -56
+KPX Aring hyphen -7
+KPX Aring o -16
+KPX Aring period -7
+KPX Aring q -3
+KPX Aring quotedblright -76
+KPX Aring quoteright -66
+KPX Aring t -17
+KPX Aring u -23
+KPX Aring v -42
+KPX Aring w -38
+KPX Aring y -37
+KPX Atilde C -44
+KPX Atilde G -47
+KPX Atilde O -47
+KPX Atilde Q -47
+KPX Atilde T -35
+KPX Atilde U -51
+KPX Atilde V -93
+KPX Atilde W -71
+KPX Atilde Y -58
+KPX Atilde comma -20
+KPX Atilde period -7
+KPX B A -42
+KPX B AE -49
+KPX B Aacute -42
+KPX B Acircumflex -42
+KPX B Adieresis -42
+KPX B Aring -42
+KPX B Atilde -42
+KPX B O -14
+KPX B OE -14
+KPX B Oacute -14
+KPX B Ocircumflex -14
+KPX B Odieresis -14
+KPX B Ograve -14
+KPX B Oslash -13
+KPX B V -40
+KPX B W -38
+KPX B Y -17
+KPX C A -1
+KPX C AE -9
+KPX C Aacute -1
+KPX C Adieresis -1
+KPX C Aring -1
+KPX C H -11
+KPX C K -19
+KPX C O -29
+KPX C Oacute -29
+KPX C Odieresis -29
+KPX Ccedilla A -4
+KPX D A -80
+KPX D Aacute -80
+KPX D Acircumflex -80
+KPX D Adieresis -80
+KPX D Agrave -80
+KPX D Aring -80
+KPX D Atilde -80
+KPX D J -35
+KPX D T -9
+KPX D V -61
+KPX D W -43
+KPX D X -67
+KPX D Y -36
+KPX F A -93
+KPX F Aacute -93
+KPX F Acircumflex -93
+KPX F Adieresis -93
+KPX F Agrave -93
+KPX F Aring -93
+KPX F Atilde -93
+KPX F J -12
+KPX F O -27
+KPX F Odieresis -27
+KPX F a -38
+KPX F aacute -38
+KPX F adieresis -38
+KPX F ae -54
+KPX F aring -38
+KPX F comma -110
+KPX F e -36
+KPX F eacute -36
+KPX F hyphen -4
+KPX F i -41
+KPX F j -44
+KPX F o -32
+KPX F oacute -32
+KPX F odieresis -32
+KPX F oe -33
+KPX F oslash -35
+KPX F period -91
+KPX F r -34
+KPX F u -40
+KPX G A -15
+KPX G AE -22
+KPX G Aacute -15
+KPX G Acircumflex -15
+KPX G Adieresis -15
+KPX G Agrave -15
+KPX G Aring -15
+KPX G Atilde -15
+KPX G T -16
+KPX G V -20
+KPX G W -18
+KPX G Y -11
+KPX J A -29
+KPX J AE -37
+KPX J Adieresis -29
+KPX J Aring -29
+KPX K C -39
+KPX K G -43
+KPX K O -39
+KPX K OE -40
+KPX K Oacute -39
+KPX K Odieresis -39
+KPX K S 9
+KPX K T 15
+KPX K a 18
+KPX K adieresis 18
+KPX K ae 13
+KPX K aring 18
+KPX K e 0
+KPX K hyphen -56
+KPX K o -4
+KPX K oacute -4
+KPX K odieresis -4
+KPX K u -11
+KPX K udieresis -11
+KPX K y -25
+KPX L A 23
+KPX L AE 16
+KPX L Aacute 23
+KPX L Adieresis 23
+KPX L Aring 23
+KPX L C -6
+KPX L Ccedilla -7
+KPX L G -9
+KPX L O -8
+KPX L Oacute -8
+KPX L Ocircumflex -8
+KPX L Odieresis -8
+KPX L Ograve -8
+KPX L Otilde -8
+KPX L S -6
+KPX L T -41
+KPX L U -23
+KPX L Udieresis -23
+KPX L V -87
+KPX L W -62
+KPX L Y -63
+KPX L hyphen 15
+KPX L quotedblright -117
+KPX L quoteright -107
+KPX L u -24
+KPX L udieresis -24
+KPX L y -30
+KPX N A -31
+KPX N AE -38
+KPX N Aacute -31
+KPX N Adieresis -31
+KPX N Aring -31
+KPX N C -19
+KPX N Ccedilla -19
+KPX N G -23
+KPX N O -23
+KPX N Oacute -23
+KPX N Odieresis -23
+KPX N a -22
+KPX N aacute -22
+KPX N adieresis -22
+KPX N ae -26
+KPX N aring -22
+KPX N comma -47
+KPX N e -26
+KPX N eacute -26
+KPX N o -24
+KPX N oacute -24
+KPX N odieresis -24
+KPX N oslash -23
+KPX N period -29
+KPX N u -33
+KPX N udieresis -33
+KPX O A -65
+KPX O AE -73
+KPX O Aacute -65
+KPX O Adieresis -65
+KPX O Aring -65
+KPX O T -5
+KPX O V -54
+KPX O W -36
+KPX O X -62
+KPX O Y -30
+KPX Oacute A -65
+KPX Oacute T -5
+KPX Oacute V -54
+KPX Oacute W -36
+KPX Oacute Y -30
+KPX Ocircumflex T -5
+KPX Ocircumflex V -54
+KPX Ocircumflex Y -30
+KPX Odieresis A -65
+KPX Odieresis T -5
+KPX Odieresis V -54
+KPX Odieresis W -36
+KPX Odieresis X -62
+KPX Odieresis Y -30
+KPX Ograve T -5
+KPX Ograve V -54
+KPX Ograve Y -30
+KPX Oslash A -66
+KPX Otilde T -5
+KPX Otilde V -54
+KPX Otilde Y -30
+KPX P A -111
+KPX P AE -119
+KPX P Aacute -111
+KPX P Adieresis -111
+KPX P Aring -111
+KPX P J -41
+KPX P a -44
+KPX P aacute -44
+KPX P adieresis -44
+KPX P ae -22
+KPX P aring -44
+KPX P comma -135
+KPX P e -44
+KPX P eacute -44
+KPX P hyphen -30
+KPX P o -41
+KPX P oacute -41
+KPX P odieresis -41
+KPX P oe -42
+KPX P oslash -45
+KPX P period -116
+KPX R C -35
+KPX R Ccedilla -35
+KPX R G -39
+KPX R O -39
+KPX R OE -39
+KPX R Oacute -39
+KPX R Odieresis -39
+KPX R T -27
+KPX R U -42
+KPX R Udieresis -42
+KPX R V -59
+KPX R W -57
+KPX R Y -35
+KPX R a 14
+KPX R aacute 14
+KPX R adieresis 14
+KPX R ae 10
+KPX R aring 14
+KPX R e -2
+KPX R eacute -2
+KPX R hyphen -43
+KPX R o -7
+KPX R oacute -7
+KPX R odieresis -7
+KPX R oe -7
+KPX R u -14
+KPX R uacute -14
+KPX R udieresis -14
+KPX R y -29
+KPX S A -42
+KPX S AE -50
+KPX S Aacute -42
+KPX S Adieresis -42
+KPX S Aring -42
+KPX S T -17
+KPX S V -21
+KPX S W -19
+KPX S Y -13
+KPX S t -34
+KPX T A -61
+KPX T AE -68
+KPX T Aacute -61
+KPX T Acircumflex -61
+KPX T Adieresis -61
+KPX T Agrave -61
+KPX T Aring -61
+KPX T Atilde -61
+KPX T C -13
+KPX T G -18
+KPX T J 3
+KPX T O -19
+KPX T OE -19
+KPX T Oacute -19
+KPX T Ocircumflex -19
+KPX T Odieresis -19
+KPX T Ograve -19
+KPX T Oslash -20
+KPX T Otilde -19
+KPX T S -16
+KPX T V 15
+KPX T W 17
+KPX T Y 23
+KPX T a -83
+KPX T ae -87
+KPX T c -106
+KPX T colon -93
+KPX T comma -111
+KPX T e -100
+KPX T g -125
+KPX T guillemotleft -124
+KPX T guilsinglleft -124
+KPX T hyphen -75
+KPX T i -41
+KPX T j -42
+KPX T o -102
+KPX T oslash -74
+KPX T period -97
+KPX T r -103
+KPX T s -84
+KPX T semicolon -103
+KPX T u -112
+KPX T v -109
+KPX T w -109
+KPX T y -99
+KPX U A 16
+KPX U AE 8
+KPX U Aacute 16
+KPX U Acircumflex 16
+KPX U Adieresis 16
+KPX U Aring 16
+KPX U Atilde 16
+KPX U comma -34
+KPX U m -25
+KPX U n -25
+KPX U p -24
+KPX U period -19
+KPX U r -27
+KPX Uacute A 16
+KPX Uacute comma -34
+KPX Uacute m -25
+KPX Uacute n -25
+KPX Uacute p -24
+KPX Uacute period -19
+KPX Uacute r -27
+KPX Ucircumflex A 16
+KPX Udieresis A 16
+KPX Udieresis b 13
+KPX Udieresis comma -34
+KPX Udieresis m -25
+KPX Udieresis n -25
+KPX Udieresis p -24
+KPX Udieresis period -19
+KPX Udieresis r -27
+KPX Ugrave A 16
+KPX V A -139
+KPX V AE -114
+KPX V Aacute -139
+KPX V Acircumflex -139
+KPX V Adieresis -139
+KPX V Agrave -139
+KPX V Aring -139
+KPX V Atilde -139
+KPX V C -61
+KPX V G -66
+KPX V O -66
+KPX V Oacute -66
+KPX V Ocircumflex -66
+KPX V Odieresis -66
+KPX V Ograve -66
+KPX V Oslash -66
+KPX V Otilde -66
+KPX V S -49
+KPX V T 23
+KPX V a -96
+KPX V ae -81
+KPX V colon -92
+KPX V comma -149
+KPX V e -100
+KPX V g -104
+KPX V guillemotleft -112
+KPX V guilsinglleft -112
+KPX V hyphen -65
+KPX V i -36
+KPX V o -98
+KPX V oslash -98
+KPX V period -130
+KPX V r -69
+KPX V semicolon -101
+KPX V u -72
+KPX V y -57
+KPX W A -62
+KPX W AE -69
+KPX W Aacute -62
+KPX W Acircumflex -62
+KPX W Adieresis -62
+KPX W Agrave -62
+KPX W Aring -62
+KPX W Atilde -62
+KPX W C -26
+KPX W G -30
+KPX W O -30
+KPX W Oacute -30
+KPX W Ocircumflex -30
+KPX W Odieresis -30
+KPX W Ograve -30
+KPX W Oslash -27
+KPX W Otilde -30
+KPX W S -36
+KPX W T 25
+KPX W a -38
+KPX W ae -42
+KPX W colon -53
+KPX W comma -73
+KPX W e -42
+KPX W g -62
+KPX W guillemotleft -57
+KPX W guilsinglleft -57
+KPX W hyphen -9
+KPX W i -34
+KPX W o -40
+KPX W oslash -39
+KPX W period -54
+KPX W r -32
+KPX W semicolon -63
+KPX W u -35
+KPX W y -21
+KPX X C -48
+KPX X O -47
+KPX X Odieresis -47
+KPX X Q -47
+KPX X a 9
+KPX X e -7
+KPX X hyphen -52
+KPX X o -12
+KPX X u -19
+KPX X y -34
+KPX Y A -73
+KPX Y AE -80
+KPX Y Aacute -73
+KPX Y Acircumflex -73
+KPX Y Adieresis -73
+KPX Y Agrave -73
+KPX Y Aring -73
+KPX Y Atilde -73
+KPX Y C -50
+KPX Y G -55
+KPX Y O -55
+KPX Y Oacute -55
+KPX Y Ocircumflex -55
+KPX Y Odieresis -55
+KPX Y Ograve -55
+KPX Y Oslash -55
+KPX Y Otilde -55
+KPX Y S -39
+KPX Y T 10
+KPX Y a -95
+KPX Y ae -99
+KPX Y colon -105
+KPX Y comma -123
+KPX Y e -103
+KPX Y g -126
+KPX Y guillemotleft -124
+KPX Y guilsinglleft -124
+KPX Y hyphen -81
+KPX Y i -48
+KPX Y o -101
+KPX Y oslash -86
+KPX Y p -86
+KPX Y period -109
+KPX Y semicolon -115
+KPX Y u -98
+KPX Y v -82
+KPX Z v -35
+KPX Z y -42
+KPX a j -26
+KPX a quoteright -8
+KPX a v -18
+KPX a w -18
+KPX a y -6
+KPX aacute v -18
+KPX aacute w -18
+KPX aacute y -6
+KPX adieresis v -18
+KPX adieresis w -18
+KPX adieresis y -6
+KPX ae v 5
+KPX ae w 5
+KPX ae y 15
+KPX agrave v -18
+KPX agrave w -18
+KPX agrave y -6
+KPX aring v -18
+KPX aring w -18
+KPX aring y -6
+KPX b v 0
+KPX b w 0
+KPX b y 8
+KPX c h -18
+KPX c k -15
+KPX comma one -24
+KPX comma quotedblright -9
+KPX comma quoteright 0
+KPX e quoteright 8
+KPX e t -3
+KPX e v 5
+KPX e w 5
+KPX e x -12
+KPX e y 15
+KPX eacute v 5
+KPX eacute w 5
+KPX eacute y 15
+KPX ecircumflex v 5
+KPX ecircumflex w 5
+KPX ecircumflex y 15
+KPX eight four -1
+KPX eight one -16
+KPX eight seven -17
+KPX f a -16
+KPX f aacute -16
+KPX f adieresis 4
+KPX f ae 0
+KPX f aring -16
+KPX f e -17
+KPX f eacute -17
+KPX f f 16
+KPX f i 13
+KPX f j 9
+KPX f l 50
+KPX f o -13
+KPX f oacute -13
+KPX f odieresis 4
+KPX f oe -14
+KPX f oslash -18
+KPX f quoteright 25
+KPX f s -2
+KPX f t 11
+KPX five four 3
+KPX five one -38
+KPX five seven -15
+KPX four four 21
+KPX four one -16
+KPX four seven -16
+KPX g a -25
+KPX g adieresis -25
+KPX g ae -12
+KPX g aring -25
+KPX g e -26
+KPX g eacute -26
+KPX g l -34
+KPX g oacute -22
+KPX g odieresis -22
+KPX g r 8
+KPX guillemotright A -72
+KPX guillemotright AE -80
+KPX guillemotright Aacute -72
+KPX guillemotright Adieresis -72
+KPX guillemotright Aring -72
+KPX guillemotright T -103
+KPX guillemotright V -85
+KPX guillemotright W -63
+KPX guillemotright Y -114
+KPX guilsinglright A -72
+KPX guilsinglright AE -80
+KPX guilsinglright Aacute -72
+KPX guilsinglright Adieresis -72
+KPX guilsinglright Aring -72
+KPX guilsinglright T -103
+KPX guilsinglright V -84
+KPX guilsinglright W -63
+KPX guilsinglright Y -114
+KPX h quoteright -11
+KPX h y -8
+KPX hyphen A -27
+KPX hyphen AE -35
+KPX hyphen Aacute -27
+KPX hyphen Adieresis -27
+KPX hyphen Aring -27
+KPX hyphen T -58
+KPX hyphen V -41
+KPX hyphen W -19
+KPX hyphen Y -75
+KPX i T -7
+KPX i j -30
+KPX k a 12
+KPX k aacute 12
+KPX k adieresis 12
+KPX k ae 14
+KPX k aring 12
+KPX k comma -24
+KPX k e 5
+KPX k eacute 5
+KPX k g -44
+KPX k hyphen -50
+KPX k o 2
+KPX k oacute 2
+KPX k odieresis 2
+KPX k period -4
+KPX k s 6
+KPX k u -16
+KPX k udieresis -16
+KPX l v -35
+KPX l y -24
+KPX m p -14
+KPX m v -23
+KPX m w -23
+KPX m y -11
+KPX n T -83
+KPX n p -18
+KPX n quoteright -19
+KPX n v -27
+KPX n w -27
+KPX n y -15
+KPX nine four -10
+KPX nine one -18
+KPX nine seven -25
+KPX o T -88
+KPX o quoteright -3
+KPX o t -15
+KPX o v -3
+KPX o w -3
+KPX o x -23
+KPX o y 4
+KPX oacute v -3
+KPX oacute w -3
+KPX oacute y 4
+KPX ocircumflex t -15
+KPX odieresis t -15
+KPX odieresis v -3
+KPX odieresis w -3
+KPX odieresis x -23
+KPX odieresis y 4
+KPX ograve v -3
+KPX ograve w -3
+KPX ograve y 4
+KPX one comma -50
+KPX one eight -47
+KPX one five -23
+KPX one four -63
+KPX one nine -39
+KPX one one -38
+KPX one period -36
+KPX one seven -38
+KPX one six -60
+KPX one three -27
+KPX one two -15
+KPX one zero -44
+KPX p t -13
+KPX p y 5
+KPX period one -37
+KPX period quotedblright -31
+KPX period quoteright -21
+KPX q c -18
+KPX q u -15
+KPX quotedblbase A 2
+KPX quotedblbase AE -5
+KPX quotedblbase T -62
+KPX quotedblbase V -74
+KPX quotedblbase W -47
+KPX quotedblbase Y -83
+KPX quotedblleft A -149
+KPX quotedblleft AE -153
+KPX quotedblleft Aacute -149
+KPX quotedblleft Adieresis -149
+KPX quotedblleft Aring -149
+KPX quotedblleft T -16
+KPX quotedblleft V -17
+KPX quotedblleft W -12
+KPX quotedblleft Y -13
+KPX quotedblright A -146
+KPX quotedblright AE -150
+KPX quotedblright Aacute -146
+KPX quotedblright Adieresis -146
+KPX quotedblright Aring -146
+KPX quotedblright T -13
+KPX quotedblright V -14
+KPX quotedblright W -9
+KPX quotedblright Y -10
+KPX quoteleft A -146
+KPX quoteleft AE -150
+KPX quoteleft Aacute -146
+KPX quoteleft Adieresis -146
+KPX quoteleft Aring -146
+KPX quoteleft T -13
+KPX quoteleft V -15
+KPX quoteleft W -10
+KPX quoteleft Y -11
+KPX quoteright A -143
+KPX quoteright AE -147
+KPX quoteright Aacute -143
+KPX quoteright Adieresis -143
+KPX quoteright Aring -143
+KPX quoteright comma -100
+KPX quoteright d -68
+KPX quoteright o -60
+KPX quoteright period -81
+KPX quoteright r -47
+KPX quoteright s -49
+KPX quoteright t -56
+KPX quoteright v -33
+KPX quoteright w -33
+KPX quoteright y -40
+KPX r a -25
+KPX r aacute -25
+KPX r acircumflex -25
+KPX r adieresis -25
+KPX r ae -18
+KPX r agrave -25
+KPX r aring -25
+KPX r c -28
+KPX r ccedilla -28
+KPX r colon -26
+KPX r comma -113
+KPX r d -30
+KPX r e -24
+KPX r eacute -24
+KPX r ecircumflex -24
+KPX r egrave -24
+KPX r f 1
+KPX r g -24
+KPX r h -31
+KPX r hyphen -48
+KPX r i -1
+KPX r j -5
+KPX r k -30
+KPX r l -39
+KPX r m 4
+KPX r n 4
+KPX r o -21
+KPX r oacute -21
+KPX r ocircumflex -21
+KPX r odieresis -21
+KPX r oe -22
+KPX r ograve -21
+KPX r oslash -25
+KPX r p 11
+KPX r period -95
+KPX r q -30
+KPX r quoteright 4
+KPX r r 3
+KPX r s -12
+KPX r semicolon -33
+KPX r t -3
+KPX r u 0
+KPX r v 4
+KPX r w 4
+KPX r x -14
+KPX r y 14
+KPX r z -7
+KPX s quoteright -10
+KPX s t -22
+KPX seven colon -78
+KPX seven comma -124
+KPX seven eight -43
+KPX seven five -31
+KPX seven four -79
+KPX seven one -14
+KPX seven period -105
+KPX seven seven -3
+KPX seven six -58
+KPX seven three -30
+KPX seven two -20
+KPX six four 6
+KPX six one -44
+KPX six seven -25
+KPX t S -29
+KPX t a -13
+KPX t aacute -13
+KPX t adieresis -13
+KPX t ae -11
+KPX t aring -13
+KPX t colon -32
+KPX t e -18
+KPX t eacute -18
+KPX t h -27
+KPX t o -20
+KPX t oacute -20
+KPX t odieresis -20
+KPX t quoteright -19
+KPX t semicolon -40
+KPX three four 7
+KPX three one -31
+KPX three seven -32
+KPX two four -42
+KPX two one -26
+KPX two seven -27
+KPX u quoteright -19
+KPX v a -14
+KPX v aacute -14
+KPX v acircumflex -14
+KPX v adieresis -14
+KPX v ae -19
+KPX v agrave -14
+KPX v aring -14
+KPX v atilde -14
+KPX v c -20
+KPX v colon -29
+KPX v comma -71
+KPX v e -17
+KPX v eacute -17
+KPX v ecircumflex -17
+KPX v egrave -17
+KPX v g -21
+KPX v hyphen 19
+KPX v l -27
+KPX v o -13
+KPX v oacute -13
+KPX v odieresis -13
+KPX v ograve -13
+KPX v oslash -15
+KPX v period -53
+KPX v s -13
+KPX v semicolon -35
+KPX w a -13
+KPX w aacute -13
+KPX w acircumflex -13
+KPX w adieresis -13
+KPX w ae -19
+KPX w agrave -13
+KPX w aring -13
+KPX w atilde -13
+KPX w c -20
+KPX w colon -29
+KPX w comma -71
+KPX w e -17
+KPX w eacute -17
+KPX w ecircumflex -17
+KPX w egrave -17
+KPX w g -21
+KPX w hyphen 19
+KPX w l -27
+KPX w o -13
+KPX w oacute -13
+KPX w odieresis -13
+KPX w ograve -13
+KPX w oslash -15
+KPX w period -52
+KPX w s -13
+KPX w semicolon -35
+KPX x a -2
+KPX x c -15
+KPX x e -9
+KPX x eacute -9
+KPX x o -13
+KPX x q -12
+KPX y a -14
+KPX y aacute -14
+KPX y acircumflex -14
+KPX y adieresis -14
+KPX y ae -19
+KPX y agrave -14
+KPX y aring -14
+KPX y atilde -14
+KPX y c -22
+KPX y colon -32
+KPX y comma -56
+KPX y e -18
+KPX y eacute -18
+KPX y ecircumflex -18
+KPX y egrave -18
+KPX y g -34
+KPX y hyphen 7
+KPX y l -27
+KPX y o -16
+KPX y oacute -16
+KPX y odieresis -16
+KPX y ograve -16
+KPX y oslash -16
+KPX y period -37
+KPX y s -18
+KPX y semicolon -39
+KPX zero four 3
+KPX zero one -13
+KPX zero seven -22
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/p052023l.pfb b/Master/xemtex/gsfonts/p052023l.pfb
new file mode 100644
index 00000000000..3cc866146a4
--- /dev/null
+++ b/Master/xemtex/gsfonts/p052023l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/p052023l.pfm b/Master/xemtex/gsfonts/p052023l.pfm
new file mode 100644
index 00000000000..84e72843dc2
--- /dev/null
+++ b/Master/xemtex/gsfonts/p052023l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/p052024l.afm b/Master/xemtex/gsfonts/p052024l.afm
new file mode 100644
index 00000000000..ebcb2393329
--- /dev/null
+++ b/Master/xemtex/gsfonts/p052024l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName URWPalladioL-BoldItal
+FullName URW Palladio L Bold Italic
+FamilyName URW Palladio L
+Weight Bold
+ItalicAngle -9.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -170 -300 1073 935
+CapHeight 681
+XHeight 452
+Descender -271
+Ascender 726
+StartCharMetrics 316
+C 32 ; WX 250 ; N space ; B 125 0 125 0 ;
+C 33 ; WX 333 ; N exclam ; B 58 -17 322 695 ;
+C 34 ; WX 500 ; N quotedbl ; B 137 467 493 720 ;
+C 35 ; WX 500 ; N numbersign ; B 4 0 496 673 ;
+C 36 ; WX 500 ; N dollar ; B 20 -108 477 737 ;
+C 37 ; WX 889 ; N percent ; B 56 -17 790 697 ;
+C 38 ; WX 833 ; N ampersand ; B 74 -17 811 695 ;
+C 39 ; WX 278 ; N quoteright ; B 76 431 302 720 ;
+C 40 ; WX 333 ; N parenleft ; B 58 -129 368 723 ;
+C 41 ; WX 333 ; N parenright ; B -12 -129 298 723 ;
+C 42 ; WX 444 ; N asterisk ; B 84 332 439 695 ;
+C 43 ; WX 606 ; N plus ; B 50 -5 556 501 ;
+C 44 ; WX 250 ; N comma ; B -33 -164 208 147 ;
+C 45 ; WX 389 ; N hyphen ; B 37 198 362 300 ;
+C 46 ; WX 250 ; N period ; B 48 -17 187 135 ;
+C 47 ; WX 315 ; N slash ; B 1 -17 315 720 ;
+C 48 ; WX 500 ; N zero ; B 42 -17 490 683 ;
+C 49 ; WX 500 ; N one ; B 41 -3 434 678 ;
+C 50 ; WX 500 ; N two ; B 1 -3 454 683 ;
+C 51 ; WX 500 ; N three ; B 8 -17 450 683 ;
+C 52 ; WX 500 ; N four ; B 3 -3 487 683 ;
+C 53 ; WX 500 ; N five ; B 14 -17 481 675 ;
+C 54 ; WX 500 ; N six ; B 39 -17 488 683 ;
+C 55 ; WX 500 ; N seven ; B 69 -3 544 674 ;
+C 56 ; WX 500 ; N eight ; B 26 -17 484 683 ;
+C 57 ; WX 500 ; N nine ; B 27 -17 491 683 ;
+C 58 ; WX 250 ; N colon ; B 38 -17 236 452 ;
+C 59 ; WX 250 ; N semicolon ; B -33 -164 247 452 ;
+C 60 ; WX 606 ; N less ; B 49 -20 558 524 ;
+C 61 ; WX 606 ; N equal ; B 51 106 555 390 ;
+C 62 ; WX 606 ; N greater ; B 48 -20 557 524 ;
+C 63 ; WX 444 ; N question ; B 91 -17 450 695 ;
+C 64 ; WX 833 ; N at ; B 82 -12 744 681 ;
+C 65 ; WX 722 ; N A ; B -35 -3 685 683 ;
+C 66 ; WX 667 ; N B ; B 8 -3 629 682 ;
+C 67 ; WX 685 ; N C ; B 69 -17 695 695 ;
+C 68 ; WX 778 ; N D ; B 0 -3 747 682 ;
+C 69 ; WX 611 ; N E ; B 11 -3 606 681 ;
+C 70 ; WX 556 ; N F ; B -6 -3 593 681 ;
+C 71 ; WX 778 ; N G ; B 72 -17 750 695 ;
+C 72 ; WX 778 ; N H ; B -12 -3 826 681 ;
+C 73 ; WX 389 ; N I ; B -1 -3 412 681 ;
+C 74 ; WX 389 ; N J ; B -29 -207 417 681 ;
+C 75 ; WX 722 ; N K ; B -10 -3 746 681 ;
+C 76 ; WX 611 ; N L ; B 26 -3 578 681 ;
+C 77 ; WX 944 ; N M ; B -23 -17 985 681 ;
+C 78 ; WX 778 ; N N ; B -2 -3 829 681 ;
+C 79 ; WX 833 ; N O ; B 76 -17 794 695 ;
+C 80 ; WX 667 ; N P ; B 11 -3 673 681 ;
+C 81 ; WX 833 ; N Q ; B 76 -222 794 695 ;
+C 82 ; WX 722 ; N R ; B 4 -3 697 681 ;
+C 83 ; WX 556 ; N S ; B 50 -17 517 695 ;
+C 84 ; WX 611 ; N T ; B 56 -3 674 681 ;
+C 85 ; WX 778 ; N U ; B 83 -17 825 681 ;
+C 86 ; WX 667 ; N V ; B 67 -3 745 681 ;
+C 87 ; WX 1000 ; N W ; B 67 -3 1073 689 ;
+C 88 ; WX 722 ; N X ; B -9 -3 772 681 ;
+C 89 ; WX 611 ; N Y ; B 54 -3 675 695 ;
+C 90 ; WX 667 ; N Z ; B 1 -3 676 681 ;
+C 91 ; WX 333 ; N bracketleft ; B 45 -102 381 723 ;
+C 92 ; WX 606 ; N backslash ; B 72 0 534 720 ;
+C 93 ; WX 333 ; N bracketright ; B -21 -102 315 723 ;
+C 94 ; WX 606 ; N asciicircum ; B 63 275 543 678 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 278 ; N quoteleft ; B 65 431 291 720 ;
+C 97 ; WX 556 ; N a ; B 44 -17 519 470 ;
+C 98 ; WX 537 ; N b ; B 44 -17 494 726 ;
+C 99 ; WX 444 ; N c ; B 32 -17 436 469 ;
+C 100 ; WX 556 ; N d ; B 38 -17 550 726 ;
+C 101 ; WX 444 ; N e ; B 28 -17 418 469 ;
+C 102 ; WX 333 ; N f ; B -130 -271 449 726 ;
+C 103 ; WX 500 ; N g ; B -50 -271 529 469 ;
+C 104 ; WX 556 ; N h ; B 22 -17 522 726 ;
+C 105 ; WX 333 ; N i ; B 26 -17 312 695 ;
+C 106 ; WX 333 ; N j ; B -64 -271 323 695 ;
+C 107 ; WX 556 ; N k ; B 34 -17 528 726 ;
+C 108 ; WX 333 ; N l ; B 64 -17 318 726 ;
+C 109 ; WX 833 ; N m ; B 19 -17 803 469 ;
+C 110 ; WX 556 ; N n ; B 17 -17 521 469 ;
+C 111 ; WX 556 ; N o ; B 48 -17 502 469 ;
+C 112 ; WX 556 ; N p ; B -21 -271 516 469 ;
+C 113 ; WX 537 ; N q ; B 32 -271 513 469 ;
+C 114 ; WX 389 ; N r ; B 20 -17 411 469 ;
+C 115 ; WX 444 ; N s ; B 25 -17 406 469 ;
+C 116 ; WX 389 ; N t ; B 42 -17 409 636 ;
+C 117 ; WX 556 ; N u ; B 22 -17 521 469 ;
+C 118 ; WX 556 ; N v ; B 19 -17 513 469 ;
+C 119 ; WX 833 ; N w ; B 27 -17 802 469 ;
+C 120 ; WX 500 ; N x ; B -8 -17 500 469 ;
+C 121 ; WX 556 ; N y ; B 13 -271 541 469 ;
+C 122 ; WX 500 ; N z ; B 31 -17 470 469 ;
+C 123 ; WX 333 ; N braceleft ; B 18 -105 334 720 ;
+C 124 ; WX 606 ; N bar ; B 259 0 347 720 ;
+C 125 ; WX 333 ; N braceright ; B -1 -105 315 720 ;
+C 126 ; WX 606 ; N asciitilde ; B 51 174 555 329 ;
+C 161 ; WX 333 ; N exclamdown ; B 2 -225 259 479 ;
+C 162 ; WX 500 ; N cent ; B 52 -105 456 547 ;
+C 163 ; WX 500 ; N sterling ; B 21 -5 501 683 ;
+C 164 ; WX 167 ; N fraction ; B -170 0 338 683 ;
+C 165 ; WX 500 ; N yen ; B 11 -3 538 695 ;
+C 166 ; WX 500 ; N florin ; B 8 -242 479 690 ;
+C 167 ; WX 556 ; N section ; B 47 -151 497 695 ;
+C 168 ; WX 500 ; N currency ; B 32 96 468 533 ;
+C 169 ; WX 250 ; N quotesingle ; B 127 467 293 720 ;
+C 170 ; WX 500 ; N quotedblleft ; B 65 431 511 720 ;
+C 171 ; WX 500 ; N guillemotleft ; B 35 43 458 446 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 60 43 292 446 ;
+C 173 ; WX 333 ; N guilsinglright ; B 35 40 267 443 ;
+C 174 ; WX 611 ; N fi ; B -130 -271 588 726 ;
+C 175 ; WX 611 ; N fl ; B -130 -271 631 726 ;
+C 177 ; WX 500 ; N endash ; B -12 214 512 282 ;
+C 178 ; WX 556 ; N dagger ; B 67 -3 499 685 ;
+C 179 ; WX 556 ; N daggerdbl ; B 33 -153 537 693 ;
+C 180 ; WX 250 ; N periodcentered ; B 67 172 206 324 ;
+C 182 ; WX 556 ; N paragraph ; B 14 -204 629 681 ;
+C 183 ; WX 606 ; N bullet ; B 131 172 475 516 ;
+C 184 ; WX 250 ; N quotesinglbase ; B -3 -144 220 145 ;
+C 185 ; WX 500 ; N quotedblbase ; B -18 -144 424 145 ;
+C 186 ; WX 500 ; N quotedblright ; B 73 431 519 720 ;
+C 187 ; WX 500 ; N guillemotright ; B 35 40 458 443 ;
+C 188 ; WX 1000 ; N ellipsis ; B 91 -17 896 135 ;
+C 189 ; WX 1000 ; N perthousand ; B 65 -17 912 691 ;
+C 191 ; WX 444 ; N questiondown ; B -12 -226 347 479 ;
+C 193 ; WX 333 ; N grave ; B 110 518 322 699 ;
+C 194 ; WX 333 ; N acute ; B 153 518 392 699 ;
+C 195 ; WX 333 ; N circumflex ; B 88 510 415 684 ;
+C 196 ; WX 333 ; N tilde ; B 82 535 441 654 ;
+C 197 ; WX 333 ; N macron ; B 76 538 418 608 ;
+C 198 ; WX 333 ; N breve ; B 96 519 412 681 ;
+C 199 ; WX 333 ; N dotaccent ; B 202 537 325 668 ;
+C 200 ; WX 333 ; N dieresis ; B 90 537 426 668 ;
+C 202 ; WX 556 ; N ring ; B 277 514 477 714 ;
+C 203 ; WX 333 ; N cedilla ; B 12 -218 248 5 ;
+C 205 ; WX 333 ; N hungarumlaut ; B -28 518 409 699 ;
+C 206 ; WX 333 ; N ogonek ; B 32 -206 238 -17 ;
+C 207 ; WX 333 ; N caron ; B 113 510 445 684 ;
+C 208 ; WX 1000 ; N emdash ; B -12 214 1012 282 ;
+C 225 ; WX 944 ; N AE ; B -29 -4 927 681 ;
+C 227 ; WX 333 ; N ordfeminine ; B 47 391 355 684 ;
+C 232 ; WX 611 ; N Lslash ; B 6 -3 578 681 ;
+C 233 ; WX 833 ; N Oslash ; B 57 -54 797 730 ;
+C 234 ; WX 944 ; N OE ; B 39 -17 961 695 ;
+C 235 ; WX 333 ; N ordmasculine ; B 51 391 346 683 ;
+C 241 ; WX 738 ; N ae ; B 44 -17 711 469 ;
+C 245 ; WX 333 ; N dotlessi ; B 26 -17 293 469 ;
+C 248 ; WX 333 ; N lslash ; B 13 -17 365 726 ;
+C 249 ; WX 556 ; N oslash ; B 14 -50 522 506 ;
+C 250 ; WX 778 ; N oe ; B 48 -17 755 469 ;
+C 251 ; WX 556 ; N germandbls ; B -131 -271 549 726 ;
+C -1 ; WX 778 ; N Udieresis ; B 83 -17 825 880 ;
+C -1 ; WX 778 ; N Uacute ; B 83 -17 825 911 ;
+C -1 ; WX 556 ; N Scedilla ; B 50 -218 517 695 ;
+C -1 ; WX 611 ; N Tcaron ; B 56 -3 674 896 ;
+C -1 ; WX 556 ; N Scaron ; B 50 -17 562 896 ;
+C -1 ; WX 722 ; N Rcaron ; B 4 -3 697 896 ;
+C -1 ; WX 722 ; N Racute ; B 4 -3 697 911 ;
+C -1 ; WX 556 ; N Sacute ; B 50 -17 544 911 ;
+C -1 ; WX 833 ; N Otilde ; B 76 -17 794 866 ;
+C -1 ; WX 556 ; N ucircumflex ; B 22 -17 521 684 ;
+C -1 ; WX 833 ; N Ohungarumlaut ; B 76 -17 794 911 ;
+C -1 ; WX 778 ; N Uhungarumlaut ; B 83 -17 825 911 ;
+C -1 ; WX 611 ; N Yacute ; B 54 -3 675 911 ;
+C -1 ; WX 778 ; N Eth ; B 0 -3 747 682 ;
+C -1 ; WX 778 ; N Dcroat ; B 0 -3 747 682 ;
+C -1 ; WX 667 ; N Zacute ; B 1 -3 676 911 ;
+C -1 ; WX 778 ; N Uring ; B 83 -17 825 926 ;
+C -1 ; WX 500 ; N gbreve ; B -50 -271 529 681 ;
+C -1 ; WX 444 ; N eogonek ; B 28 -189 418 469 ;
+C -1 ; WX 444 ; N edotaccent ; B 28 -17 418 668 ;
+C -1 ; WX 444 ; N ecaron ; B 28 -17 501 684 ;
+C -1 ; WX 778 ; N Ugrave ; B 83 -17 825 911 ;
+C -1 ; WX 667 ; N Thorn ; B 11 -3 644 681 ;
+C -1 ; WX 444 ; N eacute ; B 28 -17 448 699 ;
+C -1 ; WX 444 ; N edieresis ; B 28 -17 482 668 ;
+C -1 ; WX 667 ; N dcaron ; B 38 -17 727 726 ;
+C -1 ; WX 444 ; N ccedilla ; B 32 -218 436 469 ;
+C -1 ; WX 444 ; N ccaron ; B 32 -17 504 684 ;
+C -1 ; WX 444 ; N cacute ; B 32 -17 468 699 ;
+C -1 ; WX 556 ; N aogonek ; B 44 -189 519 470 ;
+C -1 ; WX 556 ; N aring ; B 44 -17 519 714 ;
+C -1 ; WX 556 ; N atilde ; B 44 -17 553 654 ;
+C -1 ; WX 556 ; N abreve ; B 44 -17 524 681 ;
+C -1 ; WX 444 ; N egrave ; B 28 -17 418 699 ;
+C -1 ; WX 556 ; N agrave ; B 44 -17 519 699 ;
+C -1 ; WX 556 ; N aacute ; B 44 -17 519 699 ;
+C -1 ; WX 556 ; N adieresis ; B 44 -17 538 668 ;
+C -1 ; WX 778 ; N Uogonek ; B 83 -189 825 681 ;
+C -1 ; WX 556 ; N ugrave ; B 22 -17 521 699 ;
+C -1 ; WX 556 ; N uacute ; B 22 -17 521 699 ;
+C -1 ; WX 556 ; N udieresis ; B 22 -17 538 668 ;
+C -1 ; WX 389 ; N tcaron ; B 42 -17 502 720 ;
+C -1 ; WX 444 ; N scommaaccent ; B 25 -300 406 469 ;
+C -1 ; WX 667 ; N Zcaron ; B 1 -3 676 896 ;
+C -1 ; WX 444 ; N ecircumflex ; B 28 -17 471 684 ;
+C -1 ; WX 778 ; N Ucircumflex ; B 83 -17 825 896 ;
+C -1 ; WX 556 ; N acircumflex ; B 44 -17 527 684 ;
+C -1 ; WX 667 ; N Zdotaccent ; B 1 -3 676 880 ;
+C -1 ; WX 444 ; N scaron ; B 25 -17 489 684 ;
+C -1 ; WX 722 ; N Amacron ; B -35 -3 685 820 ;
+C -1 ; WX 444 ; N sacute ; B 25 -17 448 699 ;
+C -1 ; WX 611 ; N Tcommaaccent ; B 56 -300 674 681 ;
+C -1 ; WX 611 ; N Ydieresis ; B 54 -3 675 880 ;
+C -1 ; WX 556 ; N thorn ; B -21 -271 516 726 ;
+C -1 ; WX 611 ; N Emacron ; B 11 -3 606 820 ;
+C -1 ; WX 833 ; N Ograve ; B 76 -17 794 911 ;
+C -1 ; WX 833 ; N Oacute ; B 76 -17 794 911 ;
+C -1 ; WX 833 ; N Odieresis ; B 76 -17 794 880 ;
+C -1 ; WX 778 ; N Ntilde ; B -2 -3 829 866 ;
+C -1 ; WX 778 ; N Ncaron ; B -2 -3 829 896 ;
+C -1 ; WX 778 ; N Nacute ; B -2 -3 829 911 ;
+C -1 ; WX 611 ; N Lcaron ; B 26 -3 621 720 ;
+C -1 ; WX 611 ; N Lacute ; B 26 -3 578 911 ;
+C -1 ; WX 389 ; N Idotaccent ; B -1 -3 412 880 ;
+C -1 ; WX 389 ; N racute ; B 20 -17 460 699 ;
+C -1 ; WX 389 ; N Icircumflex ; B -1 -3 443 896 ;
+C -1 ; WX 556 ; N ohungarumlaut ; B 48 -17 608 699 ;
+C -1 ; WX 556 ; N otilde ; B 48 -17 553 654 ;
+C -1 ; WX 500 ; N Euro ; B 46 -17 577 695 ;
+C -1 ; WX 556 ; N ocircumflex ; B 48 -17 515 684 ;
+C -1 ; WX 300 ; N onesuperior ; B 41 271 298 680 ;
+C -1 ; WX 300 ; N twosuperior ; B 26 271 321 683 ;
+C -1 ; WX 300 ; N threesuperior ; B 23 263 310 683 ;
+C -1 ; WX 389 ; N Igrave ; B -1 -3 412 911 ;
+C -1 ; WX 389 ; N Iacute ; B -1 -3 420 911 ;
+C -1 ; WX 389 ; N Imacron ; B -1 -3 446 820 ;
+C -1 ; WX 389 ; N Iogonek ; B -1 -189 412 681 ;
+C -1 ; WX 389 ; N Idieresis ; B -1 -3 454 880 ;
+C -1 ; WX 778 ; N Gbreve ; B 72 -17 750 892 ;
+C -1 ; WX 778 ; N Umacron ; B 83 -17 825 820 ;
+C -1 ; WX 722 ; N Kcommaaccent ; B -10 -300 746 681 ;
+C -1 ; WX 556 ; N ograve ; B 48 -17 502 699 ;
+C -1 ; WX 556 ; N Scommaaccent ; B 50 -300 517 695 ;
+C -1 ; WX 611 ; N Eogonek ; B 11 -189 606 681 ;
+C -1 ; WX 556 ; N oacute ; B 48 -17 504 699 ;
+C -1 ; WX 611 ; N Edotaccent ; B 11 -3 606 880 ;
+C -1 ; WX 333 ; N iogonek ; B 26 -189 312 695 ;
+C -1 ; WX 500 ; N gcommaaccent ; B -50 -271 529 760 ;
+C -1 ; WX 556 ; N odieresis ; B 48 -17 538 668 ;
+C -1 ; WX 556 ; N ntilde ; B 17 -17 553 654 ;
+C -1 ; WX 556 ; N ncaron ; B 17 -17 557 684 ;
+C -1 ; WX 611 ; N Ecaron ; B 11 -3 606 896 ;
+C -1 ; WX 611 ; N Ecircumflex ; B 11 -3 606 896 ;
+C -1 ; WX 444 ; N scedilla ; B 25 -218 406 469 ;
+C -1 ; WX 389 ; N rcaron ; B 20 -17 473 684 ;
+C -1 ; WX 611 ; N Egrave ; B 11 -3 606 911 ;
+C -1 ; WX 611 ; N Eacute ; B 11 -3 606 911 ;
+C -1 ; WX 778 ; N Gcommaaccent ; B 72 -300 750 695 ;
+C -1 ; WX 722 ; N Rcommaaccent ; B 4 -300 697 681 ;
+C -1 ; WX 611 ; N Edieresis ; B 11 -3 606 880 ;
+C -1 ; WX 556 ; N nacute ; B 17 -17 521 699 ;
+C -1 ; WX 556 ; N uogonek ; B 22 -189 521 469 ;
+C -1 ; WX 556 ; N umacron ; B 22 -17 530 608 ;
+C -1 ; WX 778 ; N Dcaron ; B 0 -3 747 896 ;
+C -1 ; WX 429 ; N lcaron ; B 64 -17 488 726 ;
+C -1 ; WX 685 ; N Ccaron ; B 69 -17 711 896 ;
+C -1 ; WX 685 ; N Cacute ; B 69 -17 695 911 ;
+C -1 ; WX 685 ; N Ccedilla ; B 69 -218 695 695 ;
+C -1 ; WX 400 ; N degree ; B 50 383 350 683 ;
+C -1 ; WX 722 ; N Aogonek ; B -35 -189 745 683 ;
+C -1 ; WX 606 ; N minus ; B 51 204 555 292 ;
+C -1 ; WX 606 ; N multiply ; B 72 17 534 479 ;
+C -1 ; WX 606 ; N divide ; B 50 -5 556 501 ;
+C -1 ; WX 722 ; N Aring ; B -35 -3 685 935 ;
+C -1 ; WX 1000 ; N trademark ; B 38 274 961 678 ;
+C -1 ; WX 389 ; N rcommaaccent ; B -14 -300 411 469 ;
+C -1 ; WX 333 ; N lacute ; B 64 -17 432 911 ;
+C -1 ; WX 556 ; N omacron ; B 48 -17 530 608 ;
+C -1 ; WX 722 ; N Atilde ; B -35 -3 685 866 ;
+C -1 ; WX 333 ; N icircumflex ; B 26 -17 403 684 ;
+C -1 ; WX 333 ; N igrave ; B 26 -17 322 699 ;
+C -1 ; WX 556 ; N ncommaaccent ; B 17 -300 521 469 ;
+C -1 ; WX 333 ; N lcommaaccent ; B -1 -300 318 726 ;
+C -1 ; WX 606 ; N plusminus ; B 50 0 556 568 ;
+C -1 ; WX 750 ; N onehalf ; B 14 -2 736 683 ;
+C -1 ; WX 750 ; N onequarter ; B 18 -2 732 683 ;
+C -1 ; WX 750 ; N threequarters ; B 18 -2 732 683 ;
+C -1 ; WX 333 ; N iacute ; B 26 -17 392 699 ;
+C -1 ; WX 722 ; N Abreve ; B -35 -3 685 892 ;
+C -1 ; WX 556 ; N kcommaaccent ; B 34 -300 528 726 ;
+C -1 ; WX 833 ; N Omacron ; B 76 -17 794 820 ;
+C -1 ; WX 333 ; N imacron ; B 26 -17 418 608 ;
+C -1 ; WX 444 ; N emacron ; B 28 -17 474 608 ;
+C -1 ; WX 556 ; N amacron ; B 44 -17 530 608 ;
+C -1 ; WX 389 ; N tcommaaccent ; B 27 -300 409 636 ;
+C -1 ; WX 556 ; N ydieresis ; B 13 -271 541 668 ;
+C -1 ; WX 500 ; N zdotaccent ; B 31 -17 470 668 ;
+C -1 ; WX 500 ; N zcaron ; B 31 -17 517 684 ;
+C -1 ; WX 500 ; N zacute ; B 31 -17 476 699 ;
+C -1 ; WX 556 ; N yacute ; B 13 -271 541 699 ;
+C -1 ; WX 556 ; N uhungarumlaut ; B 22 -17 600 699 ;
+C -1 ; WX 556 ; N eth ; B 48 -17 546 726 ;
+C -1 ; WX 556 ; N uring ; B 22 -17 521 714 ;
+C -1 ; WX 833 ; N Ocircumflex ; B 76 -17 794 896 ;
+C -1 ; WX 333 ; N commaaccent ; B 39 -300 242 -40 ;
+C -1 ; WX 747 ; N copyright ; B 26 -17 720 695 ;
+C -1 ; WX 747 ; N registered ; B 26 -17 720 695 ;
+C -1 ; WX 722 ; N Acircumflex ; B -35 -3 685 896 ;
+C -1 ; WX 333 ; N idieresis ; B 26 -17 426 688 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 606 ; N notequal ; B 51 -32 555 556 ;
+C -1 ; WX 549 ; N radical ; B -15 -96 536 935 ;
+C -1 ; WX 722 ; N Agrave ; B -35 -3 685 911 ;
+C -1 ; WX 722 ; N Aacute ; B -35 -3 685 911 ;
+C -1 ; WX 606 ; N lessequal ; B 49 0 558 663 ;
+C -1 ; WX 606 ; N greaterequal ; B 48 0 557 663 ;
+C -1 ; WX 606 ; N logicalnot ; B 51 107 555 390 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 23 -13 466 750 ;
+C -1 ; WX 778 ; N Ncommaaccent ; B -2 -300 829 681 ;
+C -1 ; WX 556 ; N dcroat ; B 38 -17 596 726 ;
+C -1 ; WX 606 ; N brokenbar ; B 259 0 347 720 ;
+C -1 ; WX 611 ; N Lcommaaccent ; B 26 -300 578 681 ;
+C -1 ; WX 722 ; N Adieresis ; B -35 -3 685 880 ;
+C -1 ; WX 556 ; N mu ; B -15 -232 521 469 ;
+C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -30
+KPX A Ccedilla -29
+KPX A G -31
+KPX A O -37
+KPX A Odieresis -37
+KPX A Q -37
+KPX A T -12
+KPX A U -24
+KPX A Uacute -24
+KPX A Ucircumflex -24
+KPX A Udieresis -24
+KPX A Ugrave -24
+KPX A V -72
+KPX A W -63
+KPX A Y -30
+KPX A a 13
+KPX A b 10
+KPX A c 12
+KPX A ccedilla 12
+KPX A comma 19
+KPX A d 15
+KPX A e 17
+KPX A g -23
+KPX A guillemotleft -27
+KPX A guilsinglleft -40
+KPX A hyphen 0
+KPX A o 3
+KPX A period 17
+KPX A q 19
+KPX A quotedblright -47
+KPX A quoteright -49
+KPX A t -3
+KPX A u 9
+KPX A v -14
+KPX A w -15
+KPX A y -14
+KPX Aacute C -30
+KPX Aacute G -31
+KPX Aacute O -37
+KPX Aacute Q -37
+KPX Aacute T -12
+KPX Aacute U -24
+KPX Aacute V -72
+KPX Aacute W -63
+KPX Aacute Y -30
+KPX Aacute a 13
+KPX Aacute b 10
+KPX Aacute c 12
+KPX Aacute comma 19
+KPX Aacute d 15
+KPX Aacute e 17
+KPX Aacute g -23
+KPX Aacute guillemotleft -27
+KPX Aacute guilsinglleft -40
+KPX Aacute hyphen 0
+KPX Aacute o 3
+KPX Aacute period 17
+KPX Aacute q 19
+KPX Aacute quoteright -49
+KPX Aacute t -3
+KPX Aacute u 9
+KPX Aacute v -14
+KPX Aacute w -15
+KPX Aacute y -14
+KPX Acircumflex C -30
+KPX Acircumflex G -31
+KPX Acircumflex O -37
+KPX Acircumflex Q -37
+KPX Acircumflex T -12
+KPX Acircumflex U -24
+KPX Acircumflex V -72
+KPX Acircumflex W -62
+KPX Acircumflex Y -30
+KPX Acircumflex comma 19
+KPX Acircumflex period 17
+KPX Adieresis C -30
+KPX Adieresis G -31
+KPX Adieresis O -37
+KPX Adieresis Q -37
+KPX Adieresis T -12
+KPX Adieresis U -24
+KPX Adieresis V -72
+KPX Adieresis W -63
+KPX Adieresis Y -30
+KPX Adieresis a 13
+KPX Adieresis b 10
+KPX Adieresis c 12
+KPX Adieresis comma 19
+KPX Adieresis d 15
+KPX Adieresis g -23
+KPX Adieresis guillemotleft -27
+KPX Adieresis guilsinglleft -40
+KPX Adieresis hyphen 0
+KPX Adieresis o 3
+KPX Adieresis period 17
+KPX Adieresis q 19
+KPX Adieresis quotedblright -47
+KPX Adieresis quoteright -49
+KPX Adieresis t -3
+KPX Adieresis u 9
+KPX Adieresis v -14
+KPX Adieresis w -15
+KPX Adieresis y -14
+KPX Agrave C -30
+KPX Agrave G -31
+KPX Agrave O -37
+KPX Agrave Q -37
+KPX Agrave T -12
+KPX Agrave U -24
+KPX Agrave V -72
+KPX Agrave W -63
+KPX Agrave Y -30
+KPX Agrave comma 19
+KPX Agrave period 17
+KPX Aring C -30
+KPX Aring G -31
+KPX Aring O -37
+KPX Aring Q -37
+KPX Aring T -12
+KPX Aring U -24
+KPX Aring V -72
+KPX Aring W -63
+KPX Aring Y -30
+KPX Aring a 13
+KPX Aring b 10
+KPX Aring c 12
+KPX Aring comma 19
+KPX Aring d 15
+KPX Aring e 17
+KPX Aring g -23
+KPX Aring guillemotleft -27
+KPX Aring guilsinglleft -40
+KPX Aring hyphen 0
+KPX Aring o 3
+KPX Aring period 17
+KPX Aring q 19
+KPX Aring quotedblright -47
+KPX Aring quoteright -49
+KPX Aring t -3
+KPX Aring u 9
+KPX Aring v -14
+KPX Aring w -15
+KPX Aring y -14
+KPX Atilde C -30
+KPX Atilde G -31
+KPX Atilde O -37
+KPX Atilde Q -37
+KPX Atilde T -12
+KPX Atilde U -24
+KPX Atilde V -72
+KPX Atilde W -63
+KPX Atilde Y -30
+KPX Atilde comma 19
+KPX Atilde period 17
+KPX B A -6
+KPX B AE -14
+KPX B Aacute -6
+KPX B Acircumflex -6
+KPX B Adieresis -6
+KPX B Aring -6
+KPX B Atilde -6
+KPX B O -5
+KPX B OE 15
+KPX B Oacute -5
+KPX B Ocircumflex -5
+KPX B Odieresis -5
+KPX B Ograve -5
+KPX B Oslash -2
+KPX B V -12
+KPX B W -12
+KPX B Y 8
+KPX C A 20
+KPX C AE 12
+KPX C Aacute 20
+KPX C Adieresis 20
+KPX C Aring 20
+KPX C H 18
+KPX C K 18
+KPX C O -9
+KPX C Oacute -9
+KPX C Odieresis -9
+KPX Ccedilla A 20
+KPX D A -41
+KPX D Aacute -41
+KPX D Acircumflex -41
+KPX D Adieresis -41
+KPX D Agrave -41
+KPX D Aring -41
+KPX D Atilde -41
+KPX D J -15
+KPX D T 8
+KPX D V -33
+KPX D W -27
+KPX D X -41
+KPX D Y -7
+KPX F A -45
+KPX F Aacute -45
+KPX F Acircumflex -45
+KPX F Adieresis -45
+KPX F Agrave -45
+KPX F Aring -45
+KPX F Atilde -45
+KPX F J 23
+KPX F O -9
+KPX F Odieresis -9
+KPX F a -29
+KPX F aacute -29
+KPX F adieresis -29
+KPX F ae -36
+KPX F aring -29
+KPX F comma -57
+KPX F e -15
+KPX F eacute -15
+KPX F hyphen 7
+KPX F i 11
+KPX F j 6
+KPX F o -20
+KPX F oacute -20
+KPX F odieresis -20
+KPX F oe -18
+KPX F oslash -20
+KPX F period -56
+KPX F r 13
+KPX F u 12
+KPX G A 8
+KPX G AE 3
+KPX G Aacute 8
+KPX G Acircumflex 8
+KPX G Adieresis 8
+KPX G Agrave 8
+KPX G Aring 8
+KPX G Atilde 8
+KPX G T -8
+KPX G V -4
+KPX G W -4
+KPX G Y -1
+KPX J A -10
+KPX J AE -14
+KPX J Adieresis -10
+KPX J Aring -10
+KPX K C -33
+KPX K G -34
+KPX K O -40
+KPX K OE -19
+KPX K Oacute -40
+KPX K Odieresis -40
+KPX K S 13
+KPX K T 30
+KPX K a 13
+KPX K adieresis 13
+KPX K ae 10
+KPX K aring 13
+KPX K e 15
+KPX K hyphen -46
+KPX K o 0
+KPX K oacute 0
+KPX K odieresis 0
+KPX K u 9
+KPX K udieresis 9
+KPX K y -15
+KPX L A 42
+KPX L AE 39
+KPX L Aacute 42
+KPX L Adieresis 42
+KPX L Aring 42
+KPX L C 3
+KPX L Ccedilla 3
+KPX L G 2
+KPX L O -1
+KPX L Oacute -1
+KPX L Ocircumflex -1
+KPX L Odieresis -1
+KPX L Ograve -1
+KPX L Otilde -1
+KPX L S 7
+KPX L T -26
+KPX L U -6
+KPX L Udieresis -6
+KPX L V -69
+KPX L W -54
+KPX L Y -43
+KPX L hyphen 35
+KPX L quotedblright -74
+KPX L quoteright -75
+KPX L u 0
+KPX L udieresis 0
+KPX L y -10
+KPX N A -3
+KPX N AE -6
+KPX N Aacute -3
+KPX N Adieresis -3
+KPX N Aring -3
+KPX N C -8
+KPX N Ccedilla -8
+KPX N G -10
+KPX N O -9
+KPX N Oacute -9
+KPX N Odieresis -9
+KPX N a -17
+KPX N aacute -19
+KPX N adieresis -19
+KPX N ae -22
+KPX N aring -19
+KPX N comma -4
+KPX N e -7
+KPX N eacute -8
+KPX N o -13
+KPX N oacute -15
+KPX N odieresis -15
+KPX N oslash -15
+KPX N period -3
+KPX N u -2
+KPX N udieresis -2
+KPX O A -39
+KPX O AE -46
+KPX O Aacute -39
+KPX O Adieresis -39
+KPX O Aring -39
+KPX O T 4
+KPX O V -38
+KPX O W -29
+KPX O X -45
+KPX O Y -12
+KPX Oacute A -39
+KPX Oacute T 4
+KPX Oacute V -38
+KPX Oacute W -29
+KPX Oacute Y -12
+KPX Ocircumflex T 4
+KPX Ocircumflex V -38
+KPX Ocircumflex Y -12
+KPX Odieresis A -39
+KPX Odieresis T 4
+KPX Odieresis V -38
+KPX Odieresis W -29
+KPX Odieresis X -45
+KPX Odieresis Y -12
+KPX Ograve T 4
+KPX Ograve V -38
+KPX Ograve Y -12
+KPX Oslash A -44
+KPX Otilde T 4
+KPX Otilde V -38
+KPX Otilde Y -12
+KPX P A -68
+KPX P AE -77
+KPX P Aacute -68
+KPX P Adieresis -68
+KPX P Aring -68
+KPX P J -10
+KPX P a -38
+KPX P aacute -38
+KPX P adieresis -38
+KPX P ae -10
+KPX P aring -38
+KPX P comma -85
+KPX P e -24
+KPX P eacute -24
+KPX P hyphen -13
+KPX P o -26
+KPX P oacute -26
+KPX P odieresis -26
+KPX P oe -24
+KPX P oslash -27
+KPX P period -84
+KPX R C -25
+KPX R Ccedilla -25
+KPX R G -27
+KPX R O -26
+KPX R OE -5
+KPX R Oacute -26
+KPX R Odieresis -26
+KPX R T -2
+KPX R U -21
+KPX R Udieresis -21
+KPX R V -24
+KPX R W -24
+KPX R Y -4
+KPX R a 18
+KPX R aacute 18
+KPX R adieresis 18
+KPX R ae 15
+KPX R aring 18
+KPX R e 21
+KPX R eacute 21
+KPX R hyphen -23
+KPX R o 6
+KPX R oacute 6
+KPX R odieresis 6
+KPX R oe 6
+KPX R u 15
+KPX R uacute 15
+KPX R udieresis 15
+KPX R y -9
+KPX S A -1
+KPX S AE -9
+KPX S Aacute -1
+KPX S Adieresis -1
+KPX S Aring -1
+KPX S T 0
+KPX S V 4
+KPX S W 4
+KPX S Y 8
+KPX S t -13
+KPX T A -16
+KPX T AE -19
+KPX T Aacute -16
+KPX T Acircumflex -16
+KPX T Adieresis -16
+KPX T Agrave -16
+KPX T Aring -16
+KPX T Atilde -16
+KPX T C 0
+KPX T G -1
+KPX T J 36
+KPX T O 3
+KPX T OE 26
+KPX T Oacute 3
+KPX T Ocircumflex 3
+KPX T Odieresis 3
+KPX T Ograve 3
+KPX T Oslash 7
+KPX T Otilde 3
+KPX T S 18
+KPX T V 55
+KPX T W 53
+KPX T Y 57
+KPX T a -57
+KPX T ae -59
+KPX T c -58
+KPX T colon -51
+KPX T comma -53
+KPX T e -53
+KPX T g -81
+KPX T guillemotleft -77
+KPX T guilsinglleft -89
+KPX T hyphen -48
+KPX T i -12
+KPX T j -17
+KPX T o -67
+KPX T oslash -61
+KPX T period -56
+KPX T r -60
+KPX T s -49
+KPX T semicolon -53
+KPX T u -61
+KPX T v -69
+KPX T w -72
+KPX T y -64
+KPX U A 47
+KPX U AE 43
+KPX U Aacute 47
+KPX U Acircumflex 47
+KPX U Adieresis 47
+KPX U Aring 47
+KPX U Atilde 47
+KPX U comma 11
+KPX U m 5
+KPX U n 11
+KPX U p 4
+KPX U period 10
+KPX U r 4
+KPX Uacute A 47
+KPX Uacute comma 11
+KPX Uacute m 5
+KPX Uacute n 11
+KPX Uacute p 4
+KPX Uacute period 10
+KPX Uacute r 4
+KPX Ucircumflex A 47
+KPX Udieresis A 47
+KPX Udieresis b 51
+KPX Udieresis comma 11
+KPX Udieresis m 5
+KPX Udieresis n 11
+KPX Udieresis p 4
+KPX Udieresis period 10
+KPX Udieresis r 4
+KPX Ugrave A 47
+KPX V A -73
+KPX V AE -59
+KPX V Aacute -73
+KPX V Acircumflex -73
+KPX V Adieresis -73
+KPX V Agrave -73
+KPX V Aring -73
+KPX V Atilde -73
+KPX V C -33
+KPX V G -34
+KPX V O -33
+KPX V Oacute -33
+KPX V Ocircumflex -33
+KPX V Odieresis -33
+KPX V Ograve -33
+KPX V Oslash -28
+KPX V Otilde -33
+KPX V S -4
+KPX V T 57
+KPX V a -62
+KPX V ae -52
+KPX V colon -46
+KPX V comma -70
+KPX V e -51
+KPX V g -48
+KPX V guillemotleft -53
+KPX V guilsinglleft -66
+KPX V hyphen -24
+KPX V i -3
+KPX V o -58
+KPX V oslash -58
+KPX V period -69
+KPX V r -22
+KPX V semicolon -52
+KPX V u -22
+KPX V y -18
+KPX W A -42
+KPX W AE -46
+KPX W Aacute -42
+KPX W Acircumflex -42
+KPX W Adieresis -42
+KPX W Agrave -42
+KPX W Aring -42
+KPX W Atilde -42
+KPX W C -16
+KPX W G -18
+KPX W O -16
+KPX W Oacute -16
+KPX W Ocircumflex -16
+KPX W Odieresis -16
+KPX W Ograve -16
+KPX W Oslash -12
+KPX W Otilde -16
+KPX W S -7
+KPX W T 53
+KPX W a -37
+KPX W ae -41
+KPX W colon -24
+KPX W comma -35
+KPX W e -26
+KPX W g -32
+KPX W guillemotleft -29
+KPX W guilsinglleft -42
+KPX W hyphen 0
+KPX W i -7
+KPX W o -32
+KPX W oslash -33
+KPX W period -34
+KPX W r -6
+KPX W semicolon -30
+KPX W u -7
+KPX W y -2
+KPX X C -28
+KPX X O -35
+KPX X Odieresis -35
+KPX X Q -35
+KPX X a 15
+KPX X e 19
+KPX X hyphen -30
+KPX X o 5
+KPX X u 11
+KPX X y -12
+KPX Y A 0
+KPX Y AE -4
+KPX Y Aacute 0
+KPX Y Acircumflex 0
+KPX Y Adieresis 0
+KPX Y Agrave 0
+KPX Y Aring 0
+KPX Y Atilde 0
+KPX Y C -23
+KPX Y G -26
+KPX Y O -16
+KPX Y Oacute -16
+KPX Y Ocircumflex -16
+KPX Y Odieresis -16
+KPX Y Ograve -16
+KPX Y Oslash -11
+KPX Y Otilde -16
+KPX Y S 11
+KPX Y T 52
+KPX Y a -42
+KPX Y ae -43
+KPX Y colon -35
+KPX Y comma -37
+KPX Y e -38
+KPX Y g -57
+KPX Y guillemotleft -55
+KPX Y guilsinglleft -68
+KPX Y hyphen -30
+KPX Y i -10
+KPX Y o -52
+KPX Y oslash -45
+KPX Y p -34
+KPX Y period -40
+KPX Y semicolon -37
+KPX Y u -37
+KPX Y v -25
+KPX Z v 0
+KPX Z y -6
+KPX a j -8
+KPX a quoteright 9
+KPX a v -2
+KPX a w -5
+KPX a y 4
+KPX aacute v -2
+KPX aacute w -5
+KPX aacute y 4
+KPX adieresis v -2
+KPX adieresis w -6
+KPX adieresis y 4
+KPX ae v 23
+KPX ae w 19
+KPX ae y 30
+KPX agrave v -2
+KPX agrave w -5
+KPX agrave y 4
+KPX aring v -2
+KPX aring w -5
+KPX aring y 4
+KPX b v 19
+KPX b w 15
+KPX b y 22
+KPX c h 4
+KPX c k 0
+KPX comma one -3
+KPX comma quotedblright 26
+KPX comma quoteright 25
+KPX e quoteright 27
+KPX e t 16
+KPX e v 24
+KPX e w 20
+KPX e x 18
+KPX e y 30
+KPX eacute v 24
+KPX eacute w 20
+KPX eacute y 30
+KPX ecircumflex v 24
+KPX ecircumflex w 20
+KPX ecircumflex y 30
+KPX eight four 32
+KPX eight one 10
+KPX eight seven 12
+KPX f a -23
+KPX f aacute -23
+KPX f adieresis -4
+KPX f ae 10
+KPX f aring -23
+KPX f e -7
+KPX f eacute -7
+KPX f f 50
+KPX f i 20
+KPX f j 16
+KPX f l 50
+KPX f o -7
+KPX f oacute -7
+KPX f odieresis -4
+KPX f oe -8
+KPX f oslash -7
+KPX f quoteright 37
+KPX f s 10
+KPX f t 46
+KPX five four 31
+KPX five one -14
+KPX five seven 2
+KPX four four 43
+KPX four one 15
+KPX four seven 2
+KPX g a -25
+KPX g adieresis -25
+KPX g ae 5
+KPX g aring -25
+KPX g e -12
+KPX g eacute -12
+KPX g l -6
+KPX g oacute -12
+KPX g odieresis -12
+KPX g r 24
+KPX guillemotright A -33
+KPX guillemotright AE -42
+KPX guillemotright Aacute -33
+KPX guillemotright Adieresis -33
+KPX guillemotright Aring -33
+KPX guillemotright T -76
+KPX guillemotright V -63
+KPX guillemotright W -50
+KPX guillemotright Y -81
+KPX guilsinglright A -45
+KPX guilsinglright AE -54
+KPX guilsinglright Aacute -45
+KPX guilsinglright Adieresis -45
+KPX guilsinglright Aring -45
+KPX guilsinglright T -88
+KPX guilsinglright V -75
+KPX guilsinglright W -62
+KPX guilsinglright Y -93
+KPX h quoteright 12
+KPX h y 12
+KPX hyphen A 2
+KPX hyphen AE -8
+KPX hyphen Aacute 2
+KPX hyphen Adieresis 2
+KPX hyphen Aring 2
+KPX hyphen T -40
+KPX hyphen V -25
+KPX hyphen W -13
+KPX hyphen Y -50
+KPX i T 7
+KPX i j -7
+KPX k a 10
+KPX k aacute 10
+KPX k adieresis 10
+KPX k ae 10
+KPX k aring 10
+KPX k comma 7
+KPX k e 17
+KPX k eacute 17
+KPX k g -19
+KPX k hyphen -47
+KPX k o 6
+KPX k oacute 6
+KPX k odieresis 6
+KPX k period 10
+KPX k s 13
+KPX k u 4
+KPX k udieresis 4
+KPX l v -10
+KPX l y -3
+KPX m p 9
+KPX m v 5
+KPX m w 1
+KPX m y 12
+KPX n T -38
+KPX n p 9
+KPX n quoteright 13
+KPX n v 4
+KPX n w 0
+KPX n y 11
+KPX nine four 23
+KPX nine one 14
+KPX nine seven 9
+KPX o T -70
+KPX o quoteright 9
+KPX o t -4
+KPX o v 14
+KPX o w 10
+KPX o x 3
+KPX o y 16
+KPX oacute v 14
+KPX oacute w 10
+KPX oacute y 16
+KPX ocircumflex t -4
+KPX odieresis t -4
+KPX odieresis v 14
+KPX odieresis w 10
+KPX odieresis x 3
+KPX odieresis y 16
+KPX ograve v 14
+KPX ograve w 10
+KPX ograve y 16
+KPX one comma 3
+KPX one eight -2
+KPX one five 17
+KPX one four -25
+KPX one nine 3
+KPX one one 3
+KPX one period 0
+KPX one seven -10
+KPX one six -17
+KPX one three 20
+KPX one two 24
+KPX one zero -14
+KPX p t 9
+KPX p y 24
+KPX period one 1
+KPX period quotedblright 16
+KPX period quoteright 15
+KPX q c 0
+KPX q u 11
+KPX quotedblbase A 23
+KPX quotedblbase AE 17
+KPX quotedblbase T -42
+KPX quotedblbase V -60
+KPX quotedblbase W -43
+KPX quotedblbase Y -57
+KPX quotedblleft A -90
+KPX quotedblleft AE -99
+KPX quotedblleft Aacute -90
+KPX quotedblleft Adieresis -90
+KPX quotedblleft Aring -90
+KPX quotedblleft T 14
+KPX quotedblleft V 21
+KPX quotedblleft W 20
+KPX quotedblleft Y 18
+KPX quotedblright A -85
+KPX quotedblright AE -94
+KPX quotedblright Aacute -85
+KPX quotedblright Adieresis -85
+KPX quotedblright Aring -85
+KPX quotedblright T 20
+KPX quotedblright V 26
+KPX quotedblright W 25
+KPX quotedblright Y 23
+KPX quoteleft A -89
+KPX quoteleft AE -98
+KPX quoteleft Aacute -89
+KPX quoteleft Adieresis -89
+KPX quoteleft Aring -89
+KPX quoteleft T 15
+KPX quoteleft V 22
+KPX quoteleft W 21
+KPX quoteleft Y 19
+KPX quoteright A -83
+KPX quoteright AE -91
+KPX quoteright Aacute -83
+KPX quoteright Adieresis -83
+KPX quoteright Aring -83
+KPX quoteright comma -45
+KPX quoteright d -49
+KPX quoteright o -42
+KPX quoteright period -44
+KPX quoteright r -5
+KPX quoteright s -24
+KPX quoteright t -9
+KPX quoteright v 13
+KPX quoteright w 9
+KPX quoteright y 0
+KPX r a -1
+KPX r aacute -1
+KPX r acircumflex -1
+KPX r adieresis -1
+KPX r ae 0
+KPX r agrave -1
+KPX r aring -1
+KPX r c 14
+KPX r ccedilla 14
+KPX r colon 8
+KPX r comma -52
+KPX r d 5
+KPX r e 11
+KPX r eacute 11
+KPX r ecircumflex 11
+KPX r egrave 11
+KPX r f 39
+KPX r g 22
+KPX r h 2
+KPX r hyphen 17
+KPX r i 39
+KPX r j 33
+KPX r k -2
+KPX r l -7
+KPX r m 41
+KPX r n 43
+KPX r o 7
+KPX r oacute 7
+KPX r ocircumflex 7
+KPX r odieresis 7
+KPX r oe 9
+KPX r ograve 7
+KPX r oslash 7
+KPX r p 43
+KPX r period -51
+KPX r q 4
+KPX r quoteright 49
+KPX r r 41
+KPX r s 17
+KPX r semicolon 3
+KPX r t 35
+KPX r u 40
+KPX r v 41
+KPX r w 37
+KPX r x 32
+KPX r y 45
+KPX r z 14
+KPX s quoteright 17
+KPX s t 8
+KPX seven colon -43
+KPX seven comma -63
+KPX seven eight -2
+KPX seven five 9
+KPX seven four -29
+KPX seven one 17
+KPX seven period -62
+KPX seven seven 35
+KPX seven six -13
+KPX seven three 13
+KPX seven two 20
+KPX six four 41
+KPX six one -14
+KPX six seven 5
+KPX t S 11
+KPX t a 3
+KPX t aacute 3
+KPX t adieresis 3
+KPX t ae 3
+KPX t aring 3
+KPX t colon 7
+KPX t e 12
+KPX t eacute 12
+KPX t h 1
+KPX t o 1
+KPX t oacute 1
+KPX t odieresis 1
+KPX t quoteright 25
+KPX t semicolon 1
+KPX three four 29
+KPX three one -6
+KPX three seven -4
+KPX two four 6
+KPX two one 0
+KPX two seven -7
+KPX u quoteright 15
+KPX v a -18
+KPX v aacute -18
+KPX v acircumflex -18
+KPX v adieresis -18
+KPX v ae -24
+KPX v agrave -18
+KPX v aring -18
+KPX v atilde -18
+KPX v c -6
+KPX v colon -13
+KPX v comma -28
+KPX v e -6
+KPX v eacute -6
+KPX v ecircumflex -6
+KPX v egrave -6
+KPX v g -2
+KPX v hyphen 20
+KPX v l -19
+KPX v o -12
+KPX v oacute -12
+KPX v odieresis -12
+KPX v ograve -12
+KPX v oslash -13
+KPX v period -28
+KPX v s -7
+KPX v semicolon -20
+KPX w a -12
+KPX w aacute -12
+KPX w acircumflex -12
+KPX w adieresis -12
+KPX w ae -19
+KPX w agrave -12
+KPX w aring -12
+KPX w atilde -12
+KPX w c 0
+KPX w colon -8
+KPX w comma -23
+KPX w e -1
+KPX w eacute -1
+KPX w ecircumflex -1
+KPX w egrave -1
+KPX w g 3
+KPX w hyphen 26
+KPX w l -13
+KPX w o -7
+KPX w oacute -7
+KPX w odieresis -7
+KPX w ograve -7
+KPX w oslash -7
+KPX w period -24
+KPX w s -1
+KPX w semicolon -14
+KPX x a 9
+KPX x c 14
+KPX x e 17
+KPX x eacute 17
+KPX x o 6
+KPX x q 15
+KPX y a -10
+KPX y aacute -10
+KPX y acircumflex -10
+KPX y adieresis -10
+KPX y ae -15
+KPX y agrave -10
+KPX y aring -10
+KPX y atilde -10
+KPX y c 0
+KPX y colon -5
+KPX y comma -9
+KPX y e 0
+KPX y eacute 0
+KPX y ecircumflex 0
+KPX y egrave 0
+KPX y g -6
+KPX y hyphen 17
+KPX y l -11
+KPX y o -6
+KPX y oacute -6
+KPX y odieresis -6
+KPX y ograve -6
+KPX y oslash -6
+KPX y period -8
+KPX y s -1
+KPX y semicolon -11
+KPX zero four 32
+KPX zero one 12
+KPX zero seven 7
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/p052024l.pfb b/Master/xemtex/gsfonts/p052024l.pfb
new file mode 100644
index 00000000000..9374ec89a46
--- /dev/null
+++ b/Master/xemtex/gsfonts/p052024l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/p052024l.pfm b/Master/xemtex/gsfonts/p052024l.pfm
new file mode 100644
index 00000000000..0094579652b
--- /dev/null
+++ b/Master/xemtex/gsfonts/p052024l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/s050000l.afm b/Master/xemtex/gsfonts/s050000l.afm
new file mode 100644
index 00000000000..897e56b54e2
--- /dev/null
+++ b/Master/xemtex/gsfonts/s050000l.afm
@@ -0,0 +1,213 @@
+StartFontMetrics 3.0
+Comment Copyright URW Software, Copyright 1997 by URW
+Comment Creation Date: 10/21/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName StandardSymL
+FullName Standard Symbols L
+FamilyName Standard Symbols L
+Weight Regular
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -229
+UnderlineThickness 46
+Version 001.005
+Notice URW Software, Copyright 1997 by URW
+EncodingScheme FontSpecific
+FontBBox -180 -293 1090 1010
+CapHeight 673
+XHeight 500
+Descender -222
+Ascender 673
+StartCharMetrics 190
+C 32 ; WX 250 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 333 ; N exclam ; B 128 -13 240 686 ;
+C 34 ; WX 713 ; N universal ; B 31 0 681 673 ;
+C 35 ; WX 500 ; N numbersign ; B 20 0 481 631 ;
+C 36 ; WX 549 ; N existential ; B 25 0 478 673 ;
+C 37 ; WX 833 ; N percent ; B 63 -7 771 673 ;
+C 38 ; WX 778 ; N ampersand ; B 41 -13 750 675 ;
+C 39 ; WX 439 ; N suchthat ; B 48 -13 414 503 ;
+C 40 ; WX 333 ; N parenleft ; B 53 -172 300 680 ;
+C 41 ; WX 333 ; N parenright ; B 30 -172 277 680 ;
+C 42 ; WX 500 ; N asteriskmath ; B 65 127 427 546 ;
+C 43 ; WX 549 ; N plus ; B 10 0 539 533 ;
+C 44 ; WX 250 ; N comma ; B 56 -120 194 102 ;
+C 45 ; WX 549 ; N minus ; B 11 239 535 294 ;
+C 46 ; WX 250 ; N period ; B 69 -13 181 100 ;
+C 47 ; WX 278 ; N slash ; B 0 0 254 673 ;
+C 48 ; WX 500 ; N zero ; B 23 -13 471 686 ;
+C 49 ; WX 500 ; N one ; B 117 0 390 673 ;
+C 50 ; WX 500 ; N two ; B 25 0 475 686 ;
+C 51 ; WX 500 ; N three ; B 39 -13 435 686 ;
+C 52 ; WX 500 ; N four ; B 16 0 469 680 ;
+C 53 ; WX 500 ; N five ; B 29 -13 443 699 ;
+C 54 ; WX 500 ; N six ; B 36 -13 468 685 ;
+C 55 ; WX 500 ; N seven ; B 24 -7 448 673 ;
+C 56 ; WX 500 ; N eight ; B 54 -13 440 686 ;
+C 57 ; WX 500 ; N nine ; B 31 -13 460 686 ;
+C 58 ; WX 278 ; N colon ; B 81 -13 193 463 ;
+C 59 ; WX 278 ; N semicolon ; B 83 -120 221 463 ;
+C 60 ; WX 549 ; N less ; B 26 0 523 522 ;
+C 61 ; WX 549 ; N equal ; B 11 142 537 391 ;
+C 62 ; WX 549 ; N greater ; B 26 0 523 522 ;
+C 63 ; WX 444 ; N question ; B 70 -13 412 686 ;
+C 64 ; WX 549 ; N congruent ; B 11 0 537 475 ;
+C 65 ; WX 722 ; N Alpha ; B 4 0 684 673 ;
+C 66 ; WX 667 ; N Beta ; B 29 0 592 673 ;
+C 67 ; WX 722 ; N Chi ; B -9 0 704 673 ;
+C 68 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C 69 ; WX 611 ; N Epsilon ; B 32 0 617 673 ;
+C 70 ; WX 763 ; N Phi ; B 26 0 741 673 ;
+C 71 ; WX 603 ; N Gamma ; B 24 0 609 673 ;
+C 72 ; WX 722 ; N Eta ; B 39 0 729 673 ;
+C 73 ; WX 333 ; N Iota ; B 32 0 316 673 ;
+C 74 ; WX 631 ; N theta1 ; B 18 -13 623 686 ;
+C 75 ; WX 722 ; N Kappa ; B 35 0 722 673 ;
+C 76 ; WX 686 ; N Lambda ; B 6 0 680 688 ;
+C 77 ; WX 889 ; N Mu ; B 28 0 887 673 ;
+C 78 ; WX 722 ; N Nu ; B 29 0 720 673 ;
+C 79 ; WX 722 ; N Omicron ; B 41 -13 715 686 ;
+C 80 ; WX 768 ; N Pi ; B 25 0 745 673 ;
+C 81 ; WX 741 ; N Theta ; B 41 -13 715 686 ;
+C 82 ; WX 556 ; N Rho ; B 28 0 563 673 ;
+C 83 ; WX 592 ; N Sigma ; B 5 0 589 673 ;
+C 84 ; WX 611 ; N Tau ; B 33 0 607 673 ;
+C 85 ; WX 690 ; N Upsilon ; B -8 0 694 673 ;
+C 86 ; WX 439 ; N sigma1 ; B 40 -222 436 513 ;
+C 87 ; WX 768 ; N Omega ; B 34 0 736 686 ;
+C 88 ; WX 645 ; N Xi ; B 40 0 599 673 ;
+C 89 ; WX 795 ; N Psi ; B 15 0 781 686 ;
+C 90 ; WX 611 ; N Zeta ; B 44 0 636 673 ;
+C 91 ; WX 333 ; N bracketleft ; B 86 -165 299 673 ;
+C 92 ; WX 863 ; N therefore ; B 163 -13 701 433 ;
+C 93 ; WX 333 ; N bracketright ; B 33 -165 246 673 ;
+C 94 ; WX 658 ; N perpendicular ; B 15 0 652 673 ;
+C 95 ; WX 500 ; N underscore ; B -2 -252 502 -206 ;
+C 96 ; WX 500 ; N radicalex ; B 480 857 1090 913 ;
+C 97 ; WX 631 ; N alpha ; B 41 -13 622 513 ;
+C 98 ; WX 549 ; N beta ; B 61 -222 515 740 ;
+C 99 ; WX 549 ; N chi ; B 12 -210 522 513 ;
+C 100 ; WX 494 ; N delta ; B 40 -13 481 740 ;
+C 101 ; WX 439 ; N epsilon ; B 22 -13 427 513 ;
+C 102 ; WX 521 ; N phi ; B 27 -222 490 686 ;
+C 103 ; WX 411 ; N gamma ; B 5 -219 484 513 ;
+C 104 ; WX 603 ; N eta ; B 0 -222 527 513 ;
+C 105 ; WX 329 ; N iota ; B 0 -13 301 513 ;
+C 106 ; WX 603 ; N phi1 ; B 36 -222 587 513 ;
+C 107 ; WX 549 ; N kappa ; B 33 0 558 513 ;
+C 108 ; WX 549 ; N lambda ; B 24 -13 548 740 ;
+C 109 ; WX 576 ; N mu ; B 33 -219 567 500 ;
+C 110 ; WX 521 ; N nu ; B -9 -13 475 513 ;
+C 111 ; WX 549 ; N omicron ; B 35 -13 501 513 ;
+C 112 ; WX 549 ; N pi ; B 10 -13 530 500 ;
+C 113 ; WX 521 ; N theta ; B 43 -13 485 686 ;
+C 114 ; WX 549 ; N rho ; B 50 -220 490 513 ;
+C 115 ; WX 603 ; N sigma ; B 30 -13 588 500 ;
+C 116 ; WX 439 ; N tau ; B 10 -13 418 500 ;
+C 117 ; WX 576 ; N upsilon ; B 7 -13 535 513 ;
+C 118 ; WX 713 ; N omega1 ; B 12 -13 671 583 ;
+C 119 ; WX 686 ; N omega ; B 42 -13 684 513 ;
+C 120 ; WX 493 ; N xi ; B 27 -222 469 766 ;
+C 121 ; WX 686 ; N psi ; B 12 -222 701 513 ;
+C 122 ; WX 494 ; N zeta ; B 60 -222 467 756 ;
+C 123 ; WX 480 ; N braceleft ; B 58 -165 397 673 ;
+C 124 ; WX 200 ; N bar ; B 65 -177 135 673 ;
+C 125 ; WX 480 ; N braceright ; B 79 -165 418 673 ;
+C 126 ; WX 549 ; N similar ; B 17 196 529 325 ;
+C 160 ; WX 762 ; N Euro ; B 53 -4 722 671 ;
+C 161 ; WX 620 ; N Upsilon1 ; B -2 0 610 687 ;
+C 162 ; WX 247 ; N minute ; B 27 476 228 735 ;
+C 163 ; WX 549 ; N lessequal ; B 29 0 526 639 ;
+C 164 ; WX 167 ; N fraction ; B -180 0 340 673 ;
+C 165 ; WX 713 ; N infinity ; B 26 115 688 414 ;
+C 166 ; WX 500 ; N florin ; B 2 -174 494 687 ;
+C 167 ; WX 753 ; N club ; B 86 -26 660 544 ;
+C 168 ; WX 753 ; N diamond ; B 142 -36 600 550 ;
+C 169 ; WX 753 ; N heart ; B 117 -33 631 528 ;
+C 170 ; WX 753 ; N spade ; B 113 -36 629 591 ;
+C 171 ; WX 1042 ; N arrowboth ; B 24 -16 1024 512 ;
+C 172 ; WX 987 ; N arrowleft ; B 32 -15 942 511 ;
+C 173 ; WX 603 ; N arrowup ; B 45 0 571 910 ;
+C 174 ; WX 987 ; N arrowright ; B 49 -15 959 511 ;
+C 175 ; WX 603 ; N arrowdown ; B 45 -22 571 888 ;
+C 176 ; WX 400 ; N degree ; B 50 380 350 686 ;
+C 177 ; WX 549 ; N plusminus ; B 10 0 539 662 ;
+C 178 ; WX 411 ; N second ; B 20 476 413 735 ;
+C 179 ; WX 549 ; N greaterequal ; B 29 0 526 639 ;
+C 180 ; WX 549 ; N multiply ; B 17 9 533 525 ;
+C 181 ; WX 713 ; N proportional ; B 27 114 639 416 ;
+C 182 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C 183 ; WX 460 ; N bullet ; B 50 155 410 518 ;
+C 184 ; WX 549 ; N divide ; B 10 2 536 525 ;
+C 185 ; WX 549 ; N notequal ; B 15 -25 540 549 ;
+C 186 ; WX 549 ; N equivalence ; B 14 87 538 446 ;
+C 187 ; WX 549 ; N approxequal ; B 14 121 527 408 ;
+C 188 ; WX 1000 ; N ellipsis ; B 111 -13 889 100 ;
+C 189 ; WX 603 ; N arrowvertex ; B 280 -120 336 1010 ;
+C 190 ; WX 1000 ; N arrowhorizex ; B -60 220 1050 276 ;
+C 191 ; WX 658 ; N carriagereturn ; B 15 -16 602 629 ;
+C 192 ; WX 823 ; N aleph ; B 175 0 662 689 ;
+C 193 ; WX 686 ; N Ifraktur ; B 10 -54 578 736 ;
+C 194 ; WX 795 ; N Rfraktur ; B 26 -16 759 730 ;
+C 195 ; WX 987 ; N weierstrass ; B 159 -211 870 574 ;
+C 196 ; WX 768 ; N circlemultiply ; B 43 0 733 691 ;
+C 197 ; WX 768 ; N circleplus ; B 43 0 733 689 ;
+C 198 ; WX 823 ; N emptyset ; B 39 -24 781 718 ;
+C 199 ; WX 768 ; N intersection ; B 40 0 732 507 ;
+C 200 ; WX 768 ; N union ; B 40 -18 732 489 ;
+C 201 ; WX 713 ; N propersuperset ; B 20 0 673 470 ;
+C 202 ; WX 713 ; N reflexsuperset ; B 20 -125 673 470 ;
+C 203 ; WX 713 ; N notsubset ; B 36 -70 690 540 ;
+C 204 ; WX 713 ; N propersubset ; B 37 0 690 470 ;
+C 205 ; WX 713 ; N reflexsubset ; B 37 -125 690 470 ;
+C 206 ; WX 713 ; N element ; B 45 0 505 470 ;
+C 207 ; WX 713 ; N notelement ; B 45 -58 505 555 ;
+C 208 ; WX 768 ; N angle ; B 26 -1 738 672 ;
+C 209 ; WX 713 ; N gradient ; B 36 0 681 687 ;
+C 210 ; WX 790 ; N registerserif ; B 50 -13 740 690 ;
+C 211 ; WX 790 ; N copyrightserif ; B 51 -13 741 690 ;
+C 212 ; WX 890 ; N trademarkserif ; B 18 269 855 673 ;
+C 213 ; WX 823 ; N product ; B 25 -124 803 751 ;
+C 214 ; WX 549 ; N radical ; B 10 -35 515 913 ;
+C 215 ; WX 250 ; N dotmath ; B 69 209 169 311 ;
+C 216 ; WX 713 ; N logicalnot ; B 15 40 680 367 ;
+C 217 ; WX 603 ; N logicaland ; B 23 -1 583 476 ;
+C 218 ; WX 603 ; N logicalor ; B 30 -1 578 476 ;
+C 219 ; WX 1042 ; N arrowdblboth ; B 27 -19 1023 506 ;
+C 220 ; WX 987 ; N arrowdblleft ; B 30 -19 939 506 ;
+C 221 ; WX 603 ; N arrowdblup ; B 39 0 567 909 ;
+C 222 ; WX 987 ; N arrowdblright ; B 45 -19 954 506 ;
+C 223 ; WX 603 ; N arrowdbldown ; B 44 0 572 909 ;
+C 224 ; WX 494 ; N lozenge ; B 18 -1 466 740 ;
+C 225 ; WX 329 ; N angleleft ; B 25 -152 306 757 ;
+C 226 ; WX 790 ; N registersans ; B 50 -12 740 679 ;
+C 227 ; WX 790 ; N copyrightsans ; B 49 -12 739 679 ;
+C 228 ; WX 786 ; N trademarksans ; B 5 277 725 673 ;
+C 229 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C 230 ; WX 384 ; N parenlefttp ; B 40 -293 436 926 ;
+C 231 ; WX 384 ; N parenleftex ; B 40 -79 92 925 ;
+C 232 ; WX 384 ; N parenleftbt ; B 40 -293 436 926 ;
+C 233 ; WX 384 ; N bracketlefttp ; B 0 -80 341 926 ;
+C 234 ; WX 384 ; N bracketleftex ; B 0 -85 55 925 ;
+C 235 ; WX 384 ; N bracketleftbt ; B 0 -80 340 926 ;
+C 236 ; WX 494 ; N bracelefttp ; B 201 -75 439 926 ;
+C 237 ; WX 494 ; N braceleftmid ; B 14 -85 255 935 ;
+C 238 ; WX 494 ; N braceleftbt ; B 201 -70 439 926 ;
+C 239 ; WX 494 ; N braceex ; B 201 -79 255 925 ;
+C 241 ; WX 329 ; N angleright ; B 21 -152 302 757 ;
+C 242 ; WX 274 ; N integral ; B 2 -107 291 916 ;
+C 243 ; WX 686 ; N integraltp ; B 332 -83 715 922 ;
+C 244 ; WX 686 ; N integralex ; B 332 -88 415 975 ;
+C 245 ; WX 686 ; N integralbt ; B 39 -81 415 921 ;
+C 246 ; WX 384 ; N parenrighttp ; B 54 -293 450 926 ;
+C 247 ; WX 384 ; N parenrightex ; B 398 -70 450 935 ;
+C 248 ; WX 384 ; N parenrightbt ; B 54 -293 450 926 ;
+C 249 ; WX 384 ; N bracketrighttp ; B 22 -80 360 926 ;
+C 250 ; WX 384 ; N bracketrightex ; B 305 -85 360 925 ;
+C 251 ; WX 384 ; N bracketrightbt ; B 20 -80 360 926 ;
+C 252 ; WX 494 ; N bracerighttp ; B 17 -75 255 926 ;
+C 253 ; WX 494 ; N bracerightmid ; B 201 -85 442 935 ;
+C 254 ; WX 494 ; N bracerightbt ; B 17 -70 255 926 ;
+C -1 ; WX 250 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/s050000l.pfb b/Master/xemtex/gsfonts/s050000l.pfb
new file mode 100644
index 00000000000..84774010701
--- /dev/null
+++ b/Master/xemtex/gsfonts/s050000l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/s050000l.pfm b/Master/xemtex/gsfonts/s050000l.pfm
new file mode 100644
index 00000000000..71f4d27eb85
--- /dev/null
+++ b/Master/xemtex/gsfonts/s050000l.pfm
Binary files differ
diff --git a/Master/xemtex/gsfonts/z003034l.afm b/Master/xemtex/gsfonts/z003034l.afm
new file mode 100644
index 00000000000..44df48f26bb
--- /dev/null
+++ b/Master/xemtex/gsfonts/z003034l.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file PUBLIC (Aladdin Free Public License) for license conditions.
+FontName URWChanceryL-MediItal
+FullName URW Chancery L Medium Italic
+FamilyName URW Chancery L
+Weight Medium
+ItalicAngle -14.0
+IsFixedPitch false
+UnderlinePosition -120
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -133 -290 1078 913
+CapHeight 573
+XHeight 391
+Descender -248
+Ascender 677
+StartCharMetrics 316
+C 32 ; WX 220 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 280 ; N exclam ; B 109 -9 347 587 ;
+C 34 ; WX 220 ; N quotedbl ; B 170 405 333 591 ;
+C 35 ; WX 440 ; N numbersign ; B 63 -1 596 575 ;
+C 36 ; WX 440 ; N dollar ; B 60 -144 461 675 ;
+C 37 ; WX 680 ; N percent ; B 162 -7 701 584 ;
+C 38 ; WX 780 ; N ampersand ; B 121 -17 855 557 ;
+C 39 ; WX 240 ; N quoteright ; B 228 358 358 578 ;
+C 40 ; WX 260 ; N parenleft ; B 116 -165 412 668 ;
+C 41 ; WX 220 ; N parenright ; B 17 -166 313 667 ;
+C 42 ; WX 420 ; N asterisk ; B 220 377 512 677 ;
+C 43 ; WX 520 ; N plus ; B 103 14 513 424 ;
+C 44 ; WX 220 ; N comma ; B 30 -98 215 173 ;
+C 45 ; WX 280 ; N hyphen ; B 115 173 300 237 ;
+C 46 ; WX 220 ; N period ; B 107 -9 228 128 ;
+C 47 ; WX 340 ; N slash ; B -6 -170 535 679 ;
+C 48 ; WX 440 ; N zero ; B 94 -7 489 576 ;
+C 49 ; WX 440 ; N one ; B 82 0 434 582 ;
+C 50 ; WX 440 ; N two ; B 47 -17 469 572 ;
+C 51 ; WX 440 ; N three ; B 36 -6 458 575 ;
+C 52 ; WX 440 ; N four ; B 69 -25 455 585 ;
+C 53 ; WX 440 ; N five ; B 67 -8 565 640 ;
+C 54 ; WX 440 ; N six ; B 95 -8 532 585 ;
+C 55 ; WX 440 ; N seven ; B 165 -18 541 611 ;
+C 56 ; WX 440 ; N eight ; B 75 -10 494 572 ;
+C 57 ; WX 440 ; N nine ; B 42 -8 480 576 ;
+C 58 ; WX 260 ; N colon ; B 98 -9 289 408 ;
+C 59 ; WX 240 ; N semicolon ; B 29 -98 277 408 ;
+C 60 ; WX 520 ; N less ; B 120 2 557 449 ;
+C 61 ; WX 520 ; N equal ; B 108 108 518 330 ;
+C 62 ; WX 520 ; N greater ; B 119 2 556 449 ;
+C 63 ; WX 380 ; N question ; B 130 -9 497 582 ;
+C 64 ; WX 700 ; N at ; B 102 -31 765 592 ;
+C 65 ; WX 620 ; N A ; B 23 -13 687 594 ;
+C 66 ; WX 600 ; N B ; B 75 -2 642 616 ;
+C 67 ; WX 520 ; N C ; B 88 -73 635 591 ;
+C 68 ; WX 700 ; N D ; B 86 0 759 614 ;
+C 69 ; WX 620 ; N E ; B 76 -8 668 586 ;
+C 70 ; WX 580 ; N F ; B 60 -114 733 620 ;
+C 71 ; WX 620 ; N G ; B 118 -236 670 591 ;
+C 72 ; WX 680 ; N H ; B 33 -11 908 678 ;
+C 73 ; WX 380 ; N I ; B 81 0 481 573 ;
+C 74 ; WX 400 ; N J ; B 1 -122 491 572 ;
+C 75 ; WX 660 ; N K ; B 88 -147 851 577 ;
+C 76 ; WX 580 ; N L ; B 33 -6 631 577 ;
+C 77 ; WX 840 ; N M ; B 58 -13 1009 670 ;
+C 78 ; WX 700 ; N N ; B 40 -163 915 677 ;
+C 79 ; WX 600 ; N O ; B 104 -13 652 591 ;
+C 80 ; WX 540 ; N P ; B 37 1 645 601 ;
+C 81 ; WX 600 ; N Q ; B 104 -191 851 591 ;
+C 82 ; WX 600 ; N R ; B 38 -156 826 611 ;
+C 83 ; WX 460 ; N S ; B 0 -71 517 586 ;
+C 84 ; WX 500 ; N T ; B 58 0 718 649 ;
+C 85 ; WX 740 ; N U ; B 116 -14 778 578 ;
+C 86 ; WX 640 ; N V ; B 104 -12 809 685 ;
+C 87 ; WX 880 ; N W ; B 104 -17 1035 677 ;
+C 88 ; WX 560 ; N X ; B 0 -13 671 580 ;
+C 89 ; WX 560 ; N Y ; B 31 -152 763 608 ;
+C 90 ; WX 620 ; N Z ; B 62 -18 676 597 ;
+C 91 ; WX 240 ; N bracketleft ; B 47 -165 404 665 ;
+C 92 ; WX 480 ; N backslash ; B 185 0 484 579 ;
+C 93 ; WX 320 ; N bracketright ; B 23 -165 381 665 ;
+C 94 ; WX 520 ; N asciicircum ; B 212 447 472 681 ;
+C 95 ; WX 500 ; N underscore ; B 0 -145 500 -95 ;
+C 96 ; WX 240 ; N quoteleft ; B 229 435 384 676 ;
+C 97 ; WX 420 ; N a ; B 87 -13 492 411 ;
+C 98 ; WX 420 ; N b ; B 87 -17 466 677 ;
+C 99 ; WX 340 ; N c ; B 87 -13 383 411 ;
+C 100 ; WX 440 ; N d ; B 87 -13 629 677 ;
+C 101 ; WX 340 ; N e ; B 87 -13 380 411 ;
+C 102 ; WX 320 ; N f ; B -99 -246 541 680 ;
+C 103 ; WX 400 ; N g ; B -78 -247 481 410 ;
+C 104 ; WX 440 ; N h ; B 75 -15 506 678 ;
+C 105 ; WX 240 ; N i ; B 81 -13 311 616 ;
+C 106 ; WX 220 ; N j ; B -133 -247 303 616 ;
+C 107 ; WX 440 ; N k ; B 87 -153 655 675 ;
+C 108 ; WX 240 ; N l ; B 87 -13 434 678 ;
+C 109 ; WX 620 ; N m ; B 81 -10 693 411 ;
+C 110 ; WX 460 ; N n ; B 81 -16 520 411 ;
+C 111 ; WX 400 ; N o ; B 87 -13 449 411 ;
+C 112 ; WX 440 ; N p ; B -8 -248 482 411 ;
+C 113 ; WX 400 ; N q ; B 87 -249 485 479 ;
+C 114 ; WX 300 ; N r ; B 81 -10 409 411 ;
+C 115 ; WX 320 ; N s ; B 41 -13 377 411 ;
+C 116 ; WX 320 ; N t ; B 96 -13 392 503 ;
+C 117 ; WX 460 ; N u ; B 82 -13 518 415 ;
+C 118 ; WX 440 ; N v ; B 87 -13 510 437 ;
+C 119 ; WX 680 ; N w ; B 87 -13 757 444 ;
+C 120 ; WX 420 ; N x ; B 70 -160 583 411 ;
+C 121 ; WX 400 ; N y ; B 11 -248 473 415 ;
+C 122 ; WX 440 ; N z ; B 46 -13 475 426 ;
+C 123 ; WX 240 ; N braceleft ; B 105 -165 405 661 ;
+C 124 ; WX 520 ; N bar ; B 314 0 363 722 ;
+C 125 ; WX 240 ; N braceright ; B 10 -166 308 661 ;
+C 126 ; WX 520 ; N asciitilde ; B 86 165 526 278 ;
+C 161 ; WX 280 ; N exclamdown ; B 57 -186 295 409 ;
+C 162 ; WX 440 ; N cent ; B 127 -76 453 651 ;
+C 163 ; WX 440 ; N sterling ; B 4 -53 436 578 ;
+C 164 ; WX 60 ; N fraction ; B -115 -5 280 585 ;
+C 165 ; WX 440 ; N yen ; B -11 -152 623 608 ;
+C 166 ; WX 440 ; N florin ; B -49 -246 587 682 ;
+C 167 ; WX 420 ; N section ; B 63 -164 464 576 ;
+C 168 ; WX 440 ; N currency ; B 50 72 480 500 ;
+C 169 ; WX 160 ; N quotesingle ; B 170 405 259 591 ;
+C 170 ; WX 340 ; N quotedblleft ; B 229 435 500 676 ;
+C 171 ; WX 340 ; N guillemotleft ; B 98 -9 404 413 ;
+C 172 ; WX 240 ; N guilsinglleft ; B 98 -9 285 413 ;
+C 173 ; WX 260 ; N guilsinglright ; B 86 -3 284 423 ;
+C 174 ; WX 520 ; N fi ; B -104 -247 606 681 ;
+C 175 ; WX 520 ; N fl ; B -105 -246 710 688 ;
+C 177 ; WX 500 ; N endash ; B 31 173 578 237 ;
+C 178 ; WX 460 ; N dagger ; B 98 -138 529 606 ;
+C 179 ; WX 480 ; N daggerdbl ; B 98 -137 529 607 ;
+C 180 ; WX 220 ; N periodcentered ; B 108 156 229 277 ;
+C 182 ; WX 500 ; N paragraph ; B 29 -247 650 586 ;
+C 183 ; WX 600 ; N bullet ; B 228 217 568 557 ;
+C 184 ; WX 180 ; N quotesinglbase ; B 40 -109 170 111 ;
+C 185 ; WX 280 ; N quotedblbase ; B 41 -109 286 111 ;
+C 186 ; WX 360 ; N quotedblright ; B 228 454 473 673 ;
+C 187 ; WX 380 ; N guillemotright ; B 87 -3 407 423 ;
+C 188 ; WX 1000 ; N ellipsis ; B 106 -9 893 128 ;
+C 189 ; WX 960 ; N perthousand ; B 162 -7 975 584 ;
+C 191 ; WX 400 ; N questiondown ; B 57 -181 425 409 ;
+C 193 ; WX 220 ; N grave ; B 173 460 281 655 ;
+C 194 ; WX 300 ; N acute ; B 205 460 388 655 ;
+C 195 ; WX 340 ; N circumflex ; B 183 460 397 656 ;
+C 196 ; WX 440 ; N tilde ; B 183 494 513 604 ;
+C 197 ; WX 440 ; N macron ; B 183 520 515 568 ;
+C 198 ; WX 440 ; N breve ; B 183 488 516 623 ;
+C 199 ; WX 220 ; N dotaccent ; B 206 489 309 612 ;
+C 200 ; WX 360 ; N dieresis ; B 183 489 419 612 ;
+C 202 ; WX 300 ; N ring ; B 228 461 409 640 ;
+C 203 ; WX 300 ; N cedilla ; B 41 -212 216 0 ;
+C 205 ; WX 400 ; N hungarumlaut ; B 183 460 463 655 ;
+C 206 ; WX 280 ; N ogonek ; B 58 -153 216 0 ;
+C 207 ; WX 340 ; N caron ; B 234 458 447 655 ;
+C 208 ; WX 1000 ; N emdash ; B 31 172 1078 236 ;
+C 225 ; WX 740 ; N AE ; B 32 -4 798 571 ;
+C 227 ; WX 260 ; N ordfeminine ; B 81 253 324 576 ;
+C 232 ; WX 580 ; N Lslash ; B 33 -6 631 577 ;
+C 233 ; WX 660 ; N Oslash ; B 110 -132 707 690 ;
+C 234 ; WX 820 ; N OE ; B 104 -13 870 588 ;
+C 235 ; WX 260 ; N ordmasculine ; B 98 253 323 578 ;
+C 241 ; WX 540 ; N ae ; B 87 -13 588 440 ;
+C 245 ; WX 240 ; N dotlessi ; B 81 -13 311 411 ;
+C 248 ; WX 300 ; N lslash ; B 87 -13 491 678 ;
+C 249 ; WX 440 ; N oslash ; B 92 -148 467 547 ;
+C 250 ; WX 560 ; N oe ; B 88 -13 602 411 ;
+C 251 ; WX 420 ; N germandbls ; B -127 -248 506 680 ;
+C -1 ; WX 740 ; N Udieresis ; B 116 -14 778 773 ;
+C -1 ; WX 740 ; N Uacute ; B 116 -14 778 820 ;
+C -1 ; WX 460 ; N Scedilla ; B 0 -266 517 586 ;
+C -1 ; WX 500 ; N Tcaron ; B 58 0 718 821 ;
+C -1 ; WX 460 ; N Scaron ; B 0 -71 607 821 ;
+C -1 ; WX 600 ; N Rcaron ; B 38 -156 826 821 ;
+C -1 ; WX 600 ; N Racute ; B 38 -156 826 820 ;
+C -1 ; WX 460 ; N Sacute ; B 0 -71 517 820 ;
+C -1 ; WX 600 ; N Otilde ; B 104 -13 678 765 ;
+C -1 ; WX 460 ; N ucircumflex ; B 82 -13 518 656 ;
+C -1 ; WX 600 ; N Ohungarumlaut ; B 104 -13 652 820 ;
+C -1 ; WX 740 ; N Uhungarumlaut ; B 116 -14 816 820 ;
+C -1 ; WX 560 ; N Yacute ; B 31 -152 763 820 ;
+C -1 ; WX 700 ; N Eth ; B 86 0 759 615 ;
+C -1 ; WX 700 ; N Dcroat ; B 86 0 759 615 ;
+C -1 ; WX 620 ; N Zacute ; B 62 -18 676 820 ;
+C -1 ; WX 740 ; N Uring ; B 116 -14 778 802 ;
+C -1 ; WX 400 ; N gbreve ; B -78 -247 496 623 ;
+C -1 ; WX 340 ; N eogonek ; B 87 -153 380 411 ;
+C -1 ; WX 340 ; N edotaccent ; B 87 -13 380 612 ;
+C -1 ; WX 340 ; N ecaron ; B 87 -13 487 655 ;
+C -1 ; WX 740 ; N Ugrave ; B 116 -14 778 820 ;
+C -1 ; WX 540 ; N Thorn ; B 37 1 619 585 ;
+C -1 ; WX 340 ; N eacute ; B 87 -13 408 655 ;
+C -1 ; WX 340 ; N edieresis ; B 87 -13 409 612 ;
+C -1 ; WX 497 ; N dcaron ; B 87 -13 697 678 ;
+C -1 ; WX 340 ; N ccedilla ; B 61 -212 383 411 ;
+C -1 ; WX 340 ; N ccaron ; B 87 -13 467 655 ;
+C -1 ; WX 340 ; N cacute ; B 87 -13 441 655 ;
+C -1 ; WX 420 ; N aogonek ; B 87 -153 492 411 ;
+C -1 ; WX 420 ; N aring ; B 87 -13 492 640 ;
+C -1 ; WX 420 ; N atilde ; B 87 -13 513 604 ;
+C -1 ; WX 420 ; N abreve ; B 87 -13 526 623 ;
+C -1 ; WX 340 ; N egrave ; B 87 -13 380 655 ;
+C -1 ; WX 420 ; N agrave ; B 87 -13 492 655 ;
+C -1 ; WX 420 ; N aacute ; B 87 -13 492 655 ;
+C -1 ; WX 420 ; N adieresis ; B 87 -13 492 612 ;
+C -1 ; WX 740 ; N Uogonek ; B 116 -153 778 578 ;
+C -1 ; WX 460 ; N ugrave ; B 82 -13 518 655 ;
+C -1 ; WX 460 ; N uacute ; B 82 -13 518 655 ;
+C -1 ; WX 460 ; N udieresis ; B 82 -13 518 612 ;
+C -1 ; WX 320 ; N tcaron ; B 96 -13 480 678 ;
+C -1 ; WX 320 ; N scommaaccent ; B 41 -270 377 411 ;
+C -1 ; WX 620 ; N Zcaron ; B 62 -18 676 821 ;
+C -1 ; WX 340 ; N ecircumflex ; B 87 -13 397 656 ;
+C -1 ; WX 740 ; N Ucircumflex ; B 116 -14 778 821 ;
+C -1 ; WX 420 ; N acircumflex ; B 87 -13 492 656 ;
+C -1 ; WX 620 ; N Zdotaccent ; B 62 -18 676 773 ;
+C -1 ; WX 320 ; N scaron ; B 41 -13 477 655 ;
+C -1 ; WX 620 ; N Amacron ; B 23 -13 760 729 ;
+C -1 ; WX 320 ; N sacute ; B 41 -13 440 655 ;
+C -1 ; WX 500 ; N Tcommaaccent ; B 58 -270 718 649 ;
+C -1 ; WX 560 ; N Ydieresis ; B 31 -152 763 773 ;
+C -1 ; WX 440 ; N thorn ; B -8 -248 482 680 ;
+C -1 ; WX 620 ; N Emacron ; B 76 -8 668 729 ;
+C -1 ; WX 600 ; N Ograve ; B 104 -13 652 820 ;
+C -1 ; WX 600 ; N Oacute ; B 104 -13 652 820 ;
+C -1 ; WX 600 ; N Odieresis ; B 104 -13 652 773 ;
+C -1 ; WX 700 ; N Ntilde ; B 40 -163 915 765 ;
+C -1 ; WX 700 ; N Ncaron ; B 40 -163 915 821 ;
+C -1 ; WX 700 ; N Nacute ; B 40 -163 915 820 ;
+C -1 ; WX 580 ; N Lcaron ; B 33 -6 700 591 ;
+C -1 ; WX 580 ; N Lacute ; B 33 -6 631 820 ;
+C -1 ; WX 380 ; N Idotaccent ; B 81 0 481 773 ;
+C -1 ; WX 300 ; N racute ; B 81 -10 428 655 ;
+C -1 ; WX 380 ; N Icircumflex ; B 81 0 487 821 ;
+C -1 ; WX 400 ; N ohungarumlaut ; B 87 -13 543 655 ;
+C -1 ; WX 400 ; N otilde ; B 87 -13 493 604 ;
+C -1 ; WX 440 ; N Euro ; B -28 -73 528 591 ;
+C -1 ; WX 400 ; N ocircumflex ; B 87 -13 449 656 ;
+C -1 ; WX 264 ; N onesuperior ; B 86 217 314 568 ;
+C -1 ; WX 264 ; N twosuperior ; B 80 206 354 562 ;
+C -1 ; WX 264 ; N threesuperior ; B 69 212 343 561 ;
+C -1 ; WX 380 ; N Igrave ; B 81 0 481 820 ;
+C -1 ; WX 380 ; N Iacute ; B 81 0 481 820 ;
+C -1 ; WX 380 ; N Imacron ; B 81 0 548 729 ;
+C -1 ; WX 380 ; N Iogonek ; B 81 -153 481 573 ;
+C -1 ; WX 380 ; N Idieresis ; B 81 0 481 773 ;
+C -1 ; WX 620 ; N Gbreve ; B 118 -236 670 784 ;
+C -1 ; WX 740 ; N Umacron ; B 116 -14 788 729 ;
+C -1 ; WX 660 ; N Kcommaaccent ; B 88 -270 851 577 ;
+C -1 ; WX 400 ; N ograve ; B 87 -13 449 655 ;
+C -1 ; WX 460 ; N Scommaaccent ; B 0 -290 517 586 ;
+C -1 ; WX 620 ; N Eogonek ; B 76 -153 668 586 ;
+C -1 ; WX 400 ; N oacute ; B 87 -13 449 655 ;
+C -1 ; WX 620 ; N Edotaccent ; B 76 -8 668 773 ;
+C -1 ; WX 240 ; N iogonek ; B 65 -153 311 616 ;
+C -1 ; WX 400 ; N gcommaaccent ; B -78 -247 481 668 ;
+C -1 ; WX 400 ; N odieresis ; B 87 -13 449 612 ;
+C -1 ; WX 460 ; N ntilde ; B 81 -16 523 604 ;
+C -1 ; WX 460 ; N ncaron ; B 81 -16 520 655 ;
+C -1 ; WX 620 ; N Ecaron ; B 76 -8 668 821 ;
+C -1 ; WX 620 ; N Ecircumflex ; B 76 -8 668 821 ;
+C -1 ; WX 320 ; N scedilla ; B -9 -213 377 411 ;
+C -1 ; WX 300 ; N rcaron ; B 81 -10 467 655 ;
+C -1 ; WX 620 ; N Egrave ; B 76 -8 668 820 ;
+C -1 ; WX 620 ; N Eacute ; B 76 -8 668 820 ;
+C -1 ; WX 620 ; N Gcommaaccent ; B 120 -270 672 590 ;
+C -1 ; WX 600 ; N Rcommaaccent ; B 38 -270 826 611 ;
+C -1 ; WX 620 ; N Edieresis ; B 76 -8 668 773 ;
+C -1 ; WX 460 ; N nacute ; B 81 -16 520 655 ;
+C -1 ; WX 460 ; N uogonek ; B 82 -153 518 415 ;
+C -1 ; WX 460 ; N umacron ; B 82 -13 525 568 ;
+C -1 ; WX 700 ; N Dcaron ; B 86 0 759 821 ;
+C -1 ; WX 293 ; N lcaron ; B 87 -13 493 678 ;
+C -1 ; WX 520 ; N Ccaron ; B 88 -73 680 821 ;
+C -1 ; WX 520 ; N Cacute ; B 88 -73 635 820 ;
+C -1 ; WX 520 ; N Ccedilla ; B 88 -266 635 591 ;
+C -1 ; WX 400 ; N degree ; B 190 330 430 576 ;
+C -1 ; WX 620 ; N Aogonek ; B 23 -153 687 594 ;
+C -1 ; WX 520 ; N minus ; B 55 192 559 246 ;
+C -1 ; WX 520 ; N multiply ; B 103 14 513 424 ;
+C -1 ; WX 520 ; N divide ; B 103 -4 513 443 ;
+C -1 ; WX 620 ; N Aring ; B 23 -13 687 802 ;
+C -1 ; WX 1000 ; N trademark ; B 165 210 1050 580 ;
+C -1 ; WX 300 ; N rcommaaccent ; B 38 -270 409 411 ;
+C -1 ; WX 240 ; N lacute ; B 87 -13 454 860 ;
+C -1 ; WX 400 ; N omacron ; B 87 -13 495 568 ;
+C -1 ; WX 620 ; N Atilde ; B 23 -13 753 765 ;
+C -1 ; WX 240 ; N icircumflex ; B 81 -13 347 656 ;
+C -1 ; WX 240 ; N igrave ; B 81 -13 311 655 ;
+C -1 ; WX 460 ; N ncommaaccent ; B 81 -270 520 411 ;
+C -1 ; WX 240 ; N lcommaaccent ; B 8 -270 434 678 ;
+C -1 ; WX 520 ; N plusminus ; B 103 0 513 508 ;
+C -1 ; WX 660 ; N onehalf ; B 96 -10 659 585 ;
+C -1 ; WX 660 ; N onequarter ; B 96 -15 653 585 ;
+C -1 ; WX 660 ; N threequarters ; B 79 -15 663 585 ;
+C -1 ; WX 240 ; N iacute ; B 81 -13 358 655 ;
+C -1 ; WX 620 ; N Abreve ; B 23 -13 740 784 ;
+C -1 ; WX 440 ; N kcommaaccent ; B 87 -270 655 675 ;
+C -1 ; WX 600 ; N Omacron ; B 104 -13 652 729 ;
+C -1 ; WX 240 ; N imacron ; B 81 -13 415 568 ;
+C -1 ; WX 340 ; N emacron ; B 87 -13 465 568 ;
+C -1 ; WX 420 ; N amacron ; B 87 -13 505 568 ;
+C -1 ; WX 320 ; N tcommaaccent ; B 48 -270 392 503 ;
+C -1 ; WX 400 ; N ydieresis ; B 11 -248 473 612 ;
+C -1 ; WX 440 ; N zdotaccent ; B 46 -13 475 612 ;
+C -1 ; WX 440 ; N zcaron ; B 46 -13 527 655 ;
+C -1 ; WX 440 ; N zacute ; B 46 -13 498 655 ;
+C -1 ; WX 400 ; N yacute ; B 11 -248 478 655 ;
+C -1 ; WX 460 ; N uhungarumlaut ; B 82 -13 533 655 ;
+C -1 ; WX 400 ; N eth ; B 87 -13 557 689 ;
+C -1 ; WX 460 ; N uring ; B 82 -13 518 640 ;
+C -1 ; WX 600 ; N Ocircumflex ; B 104 -13 652 821 ;
+C -1 ; WX 300 ; N commaaccent ; B 38 -270 165 -60 ;
+C -1 ; WX 740 ; N copyright ; B 136 -26 830 668 ;
+C -1 ; WX 740 ; N registered ; B 135 -26 828 668 ;
+C -1 ; WX 620 ; N Acircumflex ; B 23 -13 687 821 ;
+C -1 ; WX 240 ; N idieresis ; B 81 -13 359 612 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 520 ; N notequal ; B 108 5 518 433 ;
+C -1 ; WX 549 ; N radical ; B 10 -35 515 913 ;
+C -1 ; WX 620 ; N Agrave ; B 23 -13 687 820 ;
+C -1 ; WX 620 ; N Aacute ; B 23 -13 687 820 ;
+C -1 ; WX 549 ; N lessequal ; B 29 0 526 639 ;
+C -1 ; WX 549 ; N greaterequal ; B 29 0 526 639 ;
+C -1 ; WX 520 ; N logicalnot ; B 55 25 559 314 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 700 ; N Ncommaaccent ; B 40 -270 915 677 ;
+C -1 ; WX 440 ; N dcroat ; B 87 -13 629 677 ;
+C -1 ; WX 520 ; N brokenbar ; B 314 0 363 722 ;
+C -1 ; WX 580 ; N Lcommaaccent ; B 33 -270 631 577 ;
+C -1 ; WX 620 ; N Adieresis ; B 23 -13 699 773 ;
+C -1 ; WX 460 ; N mu ; B 15 -218 518 415 ;
+C -1 ; WX 220 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C 13
+KPX A Ccedilla 12
+KPX A G -12
+KPX A O -10
+KPX A Odieresis -10
+KPX A Q -11
+KPX A T -14
+KPX A U -22
+KPX A Uacute -24
+KPX A Ucircumflex -24
+KPX A Udieresis -24
+KPX A Ugrave -24
+KPX A V -19
+KPX A W -19
+KPX A Y -1
+KPX A a 11
+KPX A b 7
+KPX A c 10
+KPX A ccedilla 10
+KPX A comma 2
+KPX A d 11
+KPX A e 9
+KPX A g 9
+KPX A guillemotleft -10
+KPX A guilsinglleft -9
+KPX A hyphen -10
+KPX A o 8
+KPX A period 6
+KPX A q 11
+KPX A quotedblright -47
+KPX A quoteright -58
+KPX A t -12
+KPX A u 1
+KPX A v -13
+KPX A w -18
+KPX A y 5
+KPX Aacute C 13
+KPX Aacute G -12
+KPX Aacute O -10
+KPX Aacute Q -11
+KPX Aacute T -14
+KPX Aacute U -22
+KPX Aacute V -27
+KPX Aacute W -26
+KPX Aacute Y -3
+KPX Aacute a 11
+KPX Aacute b 7
+KPX Aacute c 10
+KPX Aacute comma 2
+KPX Aacute d 11
+KPX Aacute e 9
+KPX Aacute g 9
+KPX Aacute guillemotleft -10
+KPX Aacute guilsinglleft -9
+KPX Aacute hyphen -10
+KPX Aacute o 8
+KPX Aacute period 6
+KPX Aacute q 11
+KPX Aacute quoteright -58
+KPX Aacute t -12
+KPX Aacute u 1
+KPX Aacute v -13
+KPX Aacute w -18
+KPX Aacute y 5
+KPX Acircumflex C 13
+KPX Acircumflex G -12
+KPX Acircumflex O -10
+KPX Acircumflex Q -11
+KPX Acircumflex T -14
+KPX Acircumflex U -22
+KPX Acircumflex V -25
+KPX Acircumflex W -24
+KPX Acircumflex Y -3
+KPX Acircumflex comma 2
+KPX Acircumflex period 6
+KPX Adieresis C 13
+KPX Adieresis G -12
+KPX Adieresis O -11
+KPX Adieresis Q -11
+KPX Adieresis T -14
+KPX Adieresis U -23
+KPX Adieresis V -26
+KPX Adieresis W -26
+KPX Adieresis Y -3
+KPX Adieresis a 11
+KPX Adieresis b 7
+KPX Adieresis c 10
+KPX Adieresis comma 2
+KPX Adieresis d 11
+KPX Adieresis g 9
+KPX Adieresis guillemotleft -10
+KPX Adieresis guilsinglleft -9
+KPX Adieresis hyphen -10
+KPX Adieresis o 8
+KPX Adieresis period 6
+KPX Adieresis q 11
+KPX Adieresis quotedblright -53
+KPX Adieresis quoteright -58
+KPX Adieresis t -12
+KPX Adieresis u 1
+KPX Adieresis v -13
+KPX Adieresis w -18
+KPX Adieresis y 5
+KPX Agrave C 13
+KPX Agrave G -12
+KPX Agrave O -10
+KPX Agrave Q -11
+KPX Agrave T -14
+KPX Agrave U -22
+KPX Agrave V -27
+KPX Agrave W -26
+KPX Agrave Y -3
+KPX Agrave comma 2
+KPX Agrave period 6
+KPX Aring C 13
+KPX Aring G -12
+KPX Aring O -10
+KPX Aring Q -11
+KPX Aring T -14
+KPX Aring U -22
+KPX Aring V -25
+KPX Aring W -25
+KPX Aring Y -3
+KPX Aring a 11
+KPX Aring b 7
+KPX Aring c 10
+KPX Aring comma 2
+KPX Aring d 11
+KPX Aring e 9
+KPX Aring g 9
+KPX Aring guillemotleft -10
+KPX Aring guilsinglleft -9
+KPX Aring hyphen -10
+KPX Aring o 8
+KPX Aring period 6
+KPX Aring q 11
+KPX Aring quotedblright -52
+KPX Aring quoteright -58
+KPX Aring t -12
+KPX Aring u 1
+KPX Aring v -13
+KPX Aring w -18
+KPX Aring y 5
+KPX Atilde C 13
+KPX Atilde G -12
+KPX Atilde O -10
+KPX Atilde Q -10
+KPX Atilde T -13
+KPX Atilde U -22
+KPX Atilde V -26
+KPX Atilde W -26
+KPX Atilde Y -2
+KPX Atilde comma 3
+KPX Atilde period 7
+KPX B A -26
+KPX B AE -31
+KPX B Aacute -26
+KPX B Acircumflex -26
+KPX B Adieresis -26
+KPX B Aring -26
+KPX B Atilde -26
+KPX B O 0
+KPX B OE -3
+KPX B Oacute -2
+KPX B Ocircumflex -2
+KPX B Odieresis -2
+KPX B Ograve -2
+KPX B Oslash -18
+KPX B V -8
+KPX B W -8
+KPX B Y 8
+KPX C A 12
+KPX C AE 10
+KPX C Aacute 12
+KPX C Adieresis 12
+KPX C Aring 12
+KPX C H 2
+KPX C K -6
+KPX C O -25
+KPX C Oacute -25
+KPX C Odieresis -25
+KPX Ccedilla A 9
+KPX D A -29
+KPX D Aacute -32
+KPX D Acircumflex -32
+KPX D Adieresis -32
+KPX D Agrave -32
+KPX D Aring -32
+KPX D Atilde -32
+KPX D J -31
+KPX D T 26
+KPX D V 3
+KPX D W 3
+KPX D X -23
+KPX D Y 19
+KPX F A -55
+KPX F Aacute -54
+KPX F Acircumflex -54
+KPX F Adieresis -54
+KPX F Agrave -54
+KPX F Aring -54
+KPX F Atilde -54
+KPX F J -55
+KPX F O -25
+KPX F Odieresis -25
+KPX F a -41
+KPX F aacute -41
+KPX F adieresis -39
+KPX F ae -40
+KPX F aring -41
+KPX F comma -82
+KPX F e -37
+KPX F eacute -37
+KPX F hyphen -24
+KPX F i -11
+KPX F j -9
+KPX F o -41
+KPX F oacute -41
+KPX F odieresis -19
+KPX F oe -40
+KPX F oslash -47
+KPX F period -70
+KPX F r -24
+KPX F u -21
+KPX G A -33
+KPX G AE -36
+KPX G Aacute -33
+KPX G Acircumflex -33
+KPX G Adieresis -33
+KPX G Agrave -33
+KPX G Aring -33
+KPX G Atilde -33
+KPX G T 2
+KPX G V -18
+KPX G W -19
+KPX G Y 3
+KPX J A -28
+KPX J AE -35
+KPX J Adieresis -28
+KPX J Aring -28
+KPX K C 48
+KPX K G 16
+KPX K O -6
+KPX K OE -10
+KPX K Oacute -6
+KPX K Odieresis -6
+KPX K S 102
+KPX K T 42
+KPX K a -38
+KPX K adieresis -18
+KPX K ae -38
+KPX K aring -32
+KPX K e -36
+KPX K hyphen -40
+KPX K o -41
+KPX K oacute -41
+KPX K odieresis 2
+KPX K u -38
+KPX K udieresis -13
+KPX K y -16
+KPX L A 6
+KPX L AE 4
+KPX L Aacute 6
+KPX L Adieresis 6
+KPX L Aring 6
+KPX L C 5
+KPX L Ccedilla 6
+KPX L G -7
+KPX L O 0
+KPX L Oacute 0
+KPX L Ocircumflex 0
+KPX L Odieresis 0
+KPX L Ograve 0
+KPX L Otilde 0
+KPX L S 18
+KPX L T -17
+KPX L U -28
+KPX L Udieresis -28
+KPX L V -24
+KPX L W -25
+KPX L Y -4
+KPX L hyphen 30
+KPX L quotedblright -93
+KPX L quoteright -94
+KPX L u -7
+KPX L udieresis -7
+KPX L y -4
+KPX N A -24
+KPX N AE -30
+KPX N Aacute -24
+KPX N Adieresis -24
+KPX N Aring -24
+KPX N C 55
+KPX N Ccedilla 53
+KPX N G 23
+KPX N O -11
+KPX N Oacute -13
+KPX N Odieresis -12
+KPX N a -26
+KPX N aacute -26
+KPX N adieresis -26
+KPX N ae -26
+KPX N aring -26
+KPX N comma 111
+KPX N e -24
+KPX N eacute -24
+KPX N o -29
+KPX N oacute -29
+KPX N odieresis -29
+KPX N oslash 80
+KPX N period -20
+KPX N u -27
+KPX N udieresis -27
+KPX O A -28
+KPX O AE -41
+KPX O Aacute -28
+KPX O Adieresis -28
+KPX O Aring -28
+KPX O T 23
+KPX O V 2
+KPX O W 2
+KPX O X -21
+KPX O Y 16
+KPX Oacute A -28
+KPX Oacute T 23
+KPX Oacute V 0
+KPX Oacute W 0
+KPX Oacute Y 16
+KPX Ocircumflex T 23
+KPX Ocircumflex V 0
+KPX Ocircumflex Y 16
+KPX Odieresis A -28
+KPX Odieresis T 23
+KPX Odieresis V 0
+KPX Odieresis W 0
+KPX Odieresis X -21
+KPX Odieresis Y 16
+KPX Ograve T 23
+KPX Ograve V 0
+KPX Ograve Y 16
+KPX Oslash A -42
+KPX Otilde T 23
+KPX Otilde V 0
+KPX Otilde Y 17
+KPX P A -28
+KPX P AE -32
+KPX P Aacute -28
+KPX P Adieresis -28
+KPX P Aring -28
+KPX P J -13
+KPX P a -36
+KPX P aacute -36
+KPX P adieresis -36
+KPX P ae -37
+KPX P aring -36
+KPX P comma -63
+KPX P e -32
+KPX P eacute -32
+KPX P hyphen -36
+KPX P o -40
+KPX P oacute -40
+KPX P odieresis -40
+KPX P oe -39
+KPX P oslash -45
+KPX P period -59
+KPX R C 51
+KPX R Ccedilla 52
+KPX R G 22
+KPX R O -27
+KPX R OE -31
+KPX R Oacute -29
+KPX R Odieresis -29
+KPX R T 2
+KPX R U -30
+KPX R Udieresis -30
+KPX R V -20
+KPX R W -18
+KPX R Y 115
+KPX R a -44
+KPX R aacute -44
+KPX R adieresis -44
+KPX R ae -44
+KPX R aring -44
+KPX R e -42
+KPX R eacute -42
+KPX R hyphen -44
+KPX R o -47
+KPX R oacute -47
+KPX R odieresis -47
+KPX R oe -46
+KPX R u -44
+KPX R uacute -44
+KPX R udieresis -44
+KPX R y -3
+KPX S A -22
+KPX S AE -27
+KPX S Aacute -22
+KPX S Adieresis -22
+KPX S Aring -22
+KPX S T 0
+KPX S V -19
+KPX S W -19
+KPX S Y -13
+KPX S t -41
+KPX T A 7
+KPX T AE 4
+KPX T Aacute 7
+KPX T Acircumflex 7
+KPX T Adieresis 7
+KPX T Agrave 7
+KPX T Aring 7
+KPX T Atilde 7
+KPX T C -20
+KPX T G -38
+KPX T J -7
+KPX T O -16
+KPX T OE -23
+KPX T Oacute -16
+KPX T Ocircumflex -16
+KPX T Odieresis -16
+KPX T Ograve -16
+KPX T Oslash -31
+KPX T Otilde -16
+KPX T S 17
+KPX T V 24
+KPX T W 24
+KPX T Y 25
+KPX T a -22
+KPX T ae -22
+KPX T c -23
+KPX T colon -26
+KPX T comma -33
+KPX T e -23
+KPX T g -23
+KPX T guillemotleft -43
+KPX T guilsinglleft -42
+KPX T hyphen -36
+KPX T i 21
+KPX T j 22
+KPX T o -23
+KPX T oslash -27
+KPX T period -27
+KPX T r -29
+KPX T s 1
+KPX T semicolon -34
+KPX T u -33
+KPX T v -47
+KPX T w -52
+KPX T y -28
+KPX U A 26
+KPX U AE 23
+KPX U Aacute 26
+KPX U Acircumflex 26
+KPX U Adieresis 26
+KPX U Aring 26
+KPX U Atilde 26
+KPX U comma -13
+KPX U m -13
+KPX U n -12
+KPX U p -23
+KPX U period -10
+KPX U r -12
+KPX Uacute A 26
+KPX Uacute comma -13
+KPX Uacute m -13
+KPX Uacute n -12
+KPX Uacute p -23
+KPX Uacute period -10
+KPX Uacute r -12
+KPX Ucircumflex A 26
+KPX Udieresis A 26
+KPX Udieresis b -11
+KPX Udieresis comma -13
+KPX Udieresis m -13
+KPX Udieresis n -12
+KPX Udieresis p -23
+KPX Udieresis period -10
+KPX Udieresis r -12
+KPX Ugrave A 26
+KPX V A -31
+KPX V AE -68
+KPX V Aacute -31
+KPX V Acircumflex -31
+KPX V Adieresis -31
+KPX V Agrave -31
+KPX V Aring -31
+KPX V Atilde -31
+KPX V C -28
+KPX V G -33
+KPX V O -14
+KPX V Oacute -14
+KPX V Ocircumflex -14
+KPX V Odieresis -14
+KPX V Ograve -14
+KPX V Oslash -30
+KPX V Otilde -14
+KPX V S -32
+KPX V T 38
+KPX V a -57
+KPX V ae -58
+KPX V colon -43
+KPX V comma -93
+KPX V e -53
+KPX V g -59
+KPX V guillemotleft -55
+KPX V guilsinglleft -55
+KPX V hyphen -45
+KPX V i 1
+KPX V o -63
+KPX V oslash -68
+KPX V period -90
+KPX V r -12
+KPX V semicolon -38
+KPX V u -17
+KPX V y -12
+KPX W A -26
+KPX W AE -46
+KPX W Aacute -26
+KPX W Acircumflex -26
+KPX W Adieresis -26
+KPX W Agrave -26
+KPX W Aring -26
+KPX W Atilde -26
+KPX W C -9
+KPX W G -15
+KPX W O 0
+KPX W Oacute -4
+KPX W Ocircumflex -2
+KPX W Odieresis -3
+KPX W Ograve -4
+KPX W Oslash -20
+KPX W Otilde -3
+KPX W S -12
+KPX W T 44
+KPX W a -33
+KPX W ae -33
+KPX W colon -29
+KPX W comma -57
+KPX W e -31
+KPX W g -35
+KPX W guillemotleft -27
+KPX W guilsinglleft -27
+KPX W hyphen -16
+KPX W i 1
+KPX W o -36
+KPX W oslash -41
+KPX W period -53
+KPX W r 3
+KPX W semicolon -24
+KPX W u 0
+KPX W y 4
+KPX X C 2
+KPX X O -21
+KPX X Odieresis -21
+KPX X Q -21
+KPX X a 1
+KPX X e -1
+KPX X hyphen -51
+KPX X o -2
+KPX X u -9
+KPX X y -5
+KPX Y A -24
+KPX Y AE -60
+KPX Y Aacute -24
+KPX Y Acircumflex -24
+KPX Y Adieresis -24
+KPX Y Agrave -24
+KPX Y Aring -24
+KPX Y Atilde -24
+KPX Y C -28
+KPX Y G -35
+KPX Y O -13
+KPX Y Oacute -12
+KPX Y Ocircumflex -12
+KPX Y Odieresis -12
+KPX Y Ograve -12
+KPX Y Oslash -29
+KPX Y Otilde -12
+KPX Y S -25
+KPX Y T 44
+KPX Y a -53
+KPX Y ae -53
+KPX Y colon -58
+KPX Y comma -68
+KPX Y e -51
+KPX Y g -55
+KPX Y guillemotleft -48
+KPX Y guilsinglleft -47
+KPX Y hyphen -37
+KPX Y i 17
+KPX Y o -56
+KPX Y oslash -61
+KPX Y p -43
+KPX Y period -62
+KPX Y semicolon -55
+KPX Y u -39
+KPX Y v -42
+KPX Z v 4
+KPX Z y 5
+KPX a j -2
+KPX a quoteright -55
+KPX a v -13
+KPX a w -14
+KPX a y 0
+KPX aacute v -13
+KPX aacute w -14
+KPX aacute y 0
+KPX adieresis v -13
+KPX adieresis w -14
+KPX adieresis y 0
+KPX ae v -15
+KPX ae w -17
+KPX ae y -1
+KPX agrave v -13
+KPX agrave w -14
+KPX agrave y 0
+KPX aring v -13
+KPX aring w -14
+KPX aring y 0
+KPX b v -11
+KPX b w -12
+KPX b y -1
+KPX c h -10
+KPX c k -15
+KPX comma one -40
+KPX comma quotedblright -53
+KPX comma quoteright -58
+KPX e quoteright -54
+KPX e t -16
+KPX e v -21
+KPX e w -22
+KPX e x -15
+KPX e y -7
+KPX eacute v -21
+KPX eacute w -23
+KPX eacute y -7
+KPX ecircumflex v -21
+KPX ecircumflex w -23
+KPX ecircumflex y -7
+KPX eight four -12
+KPX eight one -41
+KPX eight seven -38
+KPX f a -20
+KPX f aacute -20
+KPX f adieresis -20
+KPX f ae -21
+KPX f aring -20
+KPX f e -16
+KPX f eacute -16
+KPX f f 16
+KPX f i 21
+KPX f j 21
+KPX f l -9
+KPX f o -26
+KPX f oacute -26
+KPX f odieresis -26
+KPX f oe -24
+KPX f oslash -32
+KPX f quoteright -47
+KPX f s -20
+KPX f t 7
+KPX five four -18
+KPX five one -56
+KPX five seven -30
+KPX four four -11
+KPX four one -57
+KPX four seven -50
+KPX g a -18
+KPX g adieresis -18
+KPX g ae -18
+KPX g aring -18
+KPX g e -16
+KPX g eacute -16
+KPX g l -13
+KPX g oacute -21
+KPX g odieresis -21
+KPX g r -9
+KPX guillemotright A -33
+KPX guillemotright AE -33
+KPX guillemotright Aacute -33
+KPX guillemotright Adieresis -33
+KPX guillemotright Aring -33
+KPX guillemotright T -6
+KPX guillemotright V -19
+KPX guillemotright W -20
+KPX guillemotright Y 4
+KPX guilsinglright A -34
+KPX guilsinglright AE -34
+KPX guilsinglright Aacute -34
+KPX guilsinglright Adieresis -34
+KPX guilsinglright Aring -34
+KPX guilsinglright T -6
+KPX guilsinglright V -20
+KPX guilsinglright W -21
+KPX guilsinglright Y 3
+KPX h quoteright -65
+KPX h y -3
+KPX hyphen A -44
+KPX hyphen AE -10
+KPX hyphen Aacute -44
+KPX hyphen Adieresis -44
+KPX hyphen Aring -44
+KPX hyphen T -1
+KPX hyphen V -5
+KPX hyphen W -7
+KPX hyphen Y 25
+KPX i T -1
+KPX i j -2
+KPX k a -50
+KPX k aacute -50
+KPX k adieresis -50
+KPX k ae -50
+KPX k aring -50
+KPX k comma 111
+KPX k e -49
+KPX k eacute -49
+KPX k g 148
+KPX k hyphen -78
+KPX k o -56
+KPX k oacute -56
+KPX k odieresis -56
+KPX k period -48
+KPX k s -29
+KPX k u -13
+KPX k udieresis -13
+KPX l v -18
+KPX l y -2
+KPX m p -12
+KPX m v -13
+KPX m w -14
+KPX m y 1
+KPX n T -5
+KPX n p -20
+KPX n quoteright -68
+KPX n v -22
+KPX n w -24
+KPX n y -6
+KPX nine four -24
+KPX nine one -46
+KPX nine seven -41
+KPX o T 17
+KPX o quoteright -41
+KPX o t -4
+KPX o v -4
+KPX o w -5
+KPX o x -11
+KPX o y 4
+KPX oacute v -4
+KPX oacute w -5
+KPX oacute y 4
+KPX ocircumflex t -4
+KPX odieresis t -4
+KPX odieresis v -4
+KPX odieresis w -5
+KPX odieresis x -11
+KPX odieresis y 4
+KPX ograve v -4
+KPX ograve w -5
+KPX ograve y 4
+KPX one comma -31
+KPX one eight -20
+KPX one five -12
+KPX one four -46
+KPX one nine 1
+KPX one one -25
+KPX one period -29
+KPX one seven -59
+KPX one six -37
+KPX one three 5
+KPX one two -1
+KPX one zero -30
+KPX p t -8
+KPX p y 1
+KPX period one -25
+KPX period quotedblright -43
+KPX period quoteright -48
+KPX q c -15
+KPX q u -9
+KPX quotedblbase A 15
+KPX quotedblbase AE 34
+KPX quotedblbase T -57
+KPX quotedblbase V -32
+KPX quotedblbase W -35
+KPX quotedblbase Y -11
+KPX quotedblleft A -10
+KPX quotedblleft AE -72
+KPX quotedblleft Aacute -20
+KPX quotedblleft Adieresis -20
+KPX quotedblleft Aring -20
+KPX quotedblleft T 22
+KPX quotedblleft V 30
+KPX quotedblleft W 31
+KPX quotedblleft Y 41
+KPX quotedblright A -20
+KPX quotedblright AE -81
+KPX quotedblright Aacute -32
+KPX quotedblright Adieresis -32
+KPX quotedblright Aring -32
+KPX quotedblright T 12
+KPX quotedblright V 18
+KPX quotedblright W 19
+KPX quotedblright Y 30
+KPX quoteleft A -18
+KPX quoteleft AE -80
+KPX quoteleft Aacute -28
+KPX quoteleft Adieresis -28
+KPX quoteleft Aring -28
+KPX quoteleft T 14
+KPX quoteleft V 22
+KPX quoteleft W 23
+KPX quoteleft Y 33
+KPX quoteright A 0
+KPX quoteright AE -60
+KPX quoteright Aacute 0
+KPX quoteright Adieresis 0
+KPX quoteright Aring 0
+KPX quoteright comma -38
+KPX quoteright d -27
+KPX quoteright o -29
+KPX quoteright period -38
+KPX quoteright r 1
+KPX quoteright s -21
+KPX quoteright t -9
+KPX quoteright v -1
+KPX quoteright w 0
+KPX quoteright y 4
+KPX r a -17
+KPX r aacute -17
+KPX r acircumflex -17
+KPX r adieresis -17
+KPX r ae -18
+KPX r agrave -17
+KPX r aring -17
+KPX r c -14
+KPX r ccedilla -16
+KPX r colon -14
+KPX r comma -73
+KPX r d -21
+KPX r e -13
+KPX r eacute -13
+KPX r ecircumflex -13
+KPX r egrave -13
+KPX r f 22
+KPX r g -19
+KPX r h -10
+KPX r hyphen -55
+KPX r i 20
+KPX r j 19
+KPX r k -15
+KPX r l -7
+KPX r m 18
+KPX r n 19
+KPX r o -21
+KPX r oacute -21
+KPX r ocircumflex -21
+KPX r odieresis -21
+KPX r oe -20
+KPX r ograve -21
+KPX r oslash -27
+KPX r p 15
+KPX r period -69
+KPX r q -19
+KPX r quoteright -31
+KPX r r 21
+KPX r s -19
+KPX r semicolon -9
+KPX r t 13
+KPX r u 18
+KPX r v 5
+KPX r w 3
+KPX r x 9
+KPX r y 22
+KPX r z -23
+KPX s quoteright -61
+KPX s t -22
+KPX seven colon -73
+KPX seven comma -78
+KPX seven eight -44
+KPX seven five -54
+KPX seven four -62
+KPX seven one -44
+KPX seven period -75
+KPX seven seven -27
+KPX seven six -40
+KPX seven three -53
+KPX seven two -36
+KPX six four -2
+KPX six one -47
+KPX six seven -36
+KPX t S 22
+KPX t a -5
+KPX t aacute -5
+KPX t adieresis -5
+KPX t ae -4
+KPX t aring -5
+KPX t colon -22
+KPX t e -3
+KPX t eacute -3
+KPX t h -10
+KPX t o -3
+KPX t oacute -3
+KPX t odieresis -3
+KPX t quoteright -56
+KPX t semicolon -20
+KPX three four -19
+KPX three one -54
+KPX three seven -47
+KPX two four 6
+KPX two one -42
+KPX two seven -34
+KPX u quoteright -69
+KPX v a -21
+KPX v aacute -21
+KPX v acircumflex -21
+KPX v adieresis -21
+KPX v ae -21
+KPX v agrave -21
+KPX v aring -21
+KPX v atilde -21
+KPX v c -20
+KPX v colon -27
+KPX v comma -49
+KPX v e -18
+KPX v eacute -18
+KPX v ecircumflex -18
+KPX v egrave -18
+KPX v g -24
+KPX v hyphen -8
+KPX v l -15
+KPX v o -23
+KPX v oacute -23
+KPX v odieresis -23
+KPX v ograve -23
+KPX v oslash -29
+KPX v period -50
+KPX v s -22
+KPX v semicolon -22
+KPX w a -20
+KPX w aacute -20
+KPX w acircumflex -20
+KPX w adieresis -20
+KPX w ae -20
+KPX w agrave -20
+KPX w aring -20
+KPX w atilde -20
+KPX w c -19
+KPX w colon -24
+KPX w comma -50
+KPX w e -18
+KPX w eacute -18
+KPX w ecircumflex -18
+KPX w egrave -18
+KPX w g -23
+KPX w hyphen -8
+KPX w l -14
+KPX w o -23
+KPX w oacute -23
+KPX w odieresis -23
+KPX w ograve -23
+KPX w oslash -28
+KPX w period -51
+KPX w s -22
+KPX w semicolon -19
+KPX x a -25
+KPX x c -24
+KPX x e -21
+KPX x eacute -21
+KPX x o -31
+KPX x q -27
+KPX y a -8
+KPX y aacute -8
+KPX y acircumflex -8
+KPX y adieresis -8
+KPX y ae -8
+KPX y agrave -8
+KPX y aring -8
+KPX y atilde -8
+KPX y c -7
+KPX y colon -26
+KPX y comma -18
+KPX y e -6
+KPX y eacute -6
+KPX y ecircumflex -6
+KPX y egrave -6
+KPX y g 7
+KPX y hyphen -4
+KPX y l -3
+KPX y o -10
+KPX y oacute -10
+KPX y odieresis -10
+KPX y ograve -10
+KPX y oslash -15
+KPX y period -14
+KPX y s -8
+KPX y semicolon -18
+KPX zero four -12
+KPX zero one -36
+KPX zero seven -31
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/xemtex/gsfonts/z003034l.pfb b/Master/xemtex/gsfonts/z003034l.pfb
new file mode 100644
index 00000000000..772fbfee6fa
--- /dev/null
+++ b/Master/xemtex/gsfonts/z003034l.pfb
Binary files differ
diff --git a/Master/xemtex/gsfonts/z003034l.pfm b/Master/xemtex/gsfonts/z003034l.pfm
new file mode 100644
index 00000000000..da9b3f5b495
--- /dev/null
+++ b/Master/xemtex/gsfonts/z003034l.pfm
Binary files differ
diff --git a/Master/xemtex/gslib/CIDFnmap b/Master/xemtex/gslib/CIDFnmap
new file mode 100644
index 00000000000..7fe74aba3bb
--- /dev/null
+++ b/Master/xemtex/gslib/CIDFnmap
@@ -0,0 +1,157 @@
+%!
+% Copyright (C) 2001 Masatake YAMATO, Taiji Yamada and gs-cjk project
+%
+% This file is part of GNU Ghostscript.
+%
+% GNU Ghostscript is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+% to anyone for the consequences of using it or for whether it serves any
+% particular purpose or works at all, unless he says so in writing. Refer
+% to the GNU General Public License for full details.
+%
+% Everyone is granted permission to copy, modify and redistribute GNU
+% Ghostscript, but only under the conditions described in the GNU General
+% Public License. A copy of this license is supposed to have been given
+% to you along with GNU Ghostscript so you can know your rights and
+% responsibilities. It should be in a file named COPYING. Among other
+% things, the copyright notice and this notice must be preserved on all
+% copies.
+
+% $Id: CIDFnmap,v 1.1.4.1 2002/04/02 14:47:42 mpsuzuki Exp $
+% CIDFnmap - sample CID-keyed font catalog for Ghostscript.
+
+% ----------------------------------------------------------------
+
+% This file is a catalog of CID-keyed fonts, TrueType fonts (TTF), and also
+% TrueType Collection fonts (TTC) known to Ghostscript.
+%
+% There are two ways to make a CID-keyed font loaded automatically when named:
+% C1. Put the CID-keyed font as a resource file to /Resource/CIDFont(*1).
+% (*1) A path concatenated with GenericResourceDir defined in
+% gs_res.ps and "CIDFont". The default value of GenericResourceDir
+% is "/Resource/".
+% C2. Put the CID-keyed font file to Ghostscript's font path(*2)
+% and write an entry for the CID-keyed font to this catalog.
+% (*2) Somewhere in Ghostscript font search path, which is generally
+% /usr/local/share/ghostscript/fonts. See output of `gs -h` or Use.htm,
+% Ghostscript's document.
+%
+% There are two ways to make a TrueType font loaded automatically when named:
+% T1. Write a wrapper script file for the TrueType font and put the
+% wrapper file to /Resource/CIDFont. The wrapper has to translate a
+% TrueType font file to Type 2 CID-keyed on demand. Some examples of the
+% wrapper file named "CIDFontName" as follows:
+%
+% (e1) TTF translated to Type 2 CID-keyed font
+% %!PS-Adobe-3.0 Resource-CIDFont
+% %%BeginResource: CIDFont (CIDFontName)
+% /CIDFontName (filename.ttf) .openttcidfont
+% dup length dict begin {def} forall currentdict end
+% /CIDFont defineresource pop
+% %%EndResource
+% %%EOF
+%
+% (e2) TTC with an index translated to Type 2 CID-keyed font
+% %!PS-Adobe-3.0 Resource-CIDFont
+% %%BeginResource: CIDFont (CIDFontName)
+% /CIDFontName (filename.ttc) 2 .openttcidfont
+% dup length dict begin {def} forall currentdict end
+% /CIDFont defineresource pop
+% %%EndResource
+% %%EOF
+%
+% (e3) TTC with an index and a name of RO(Registry-Ordering)-Code
+% %!PS-Adobe-3.0 Resource-CIDFont
+% %%BeginResource: CIDFont (CIDFontName)
+% /CIDFontName (filename.ttc) 2 /Adobe-GB1-Unicode .openttcidfont
+% dup length dict begin {def} forall currentdict end
+% /CIDFont defineresource pop
+% %%EndResource
+% %%EOF
+%
+% for details about the names of RO-Code written in (e3), see below.
+%
+% T2. Put the CID-keyed font file to Ghostscript's font path(*2)
+% and write an entry for the TrueType font to this catalog.
+
+% The Syntax of CIDFnmap is very similar to Fontmap.
+% Each CID-keyed font has an entry consisting of three items:
+%
+% i1. The name by which the CID-keyed font is known inside Ghostscript
+% (a Ghostscript name preceded by a `/', or a string enclosed
+% in parentheses). This is used to find the file from which
+% a font of a given name should be loaded.
+%
+% i2. Information depending on whether this is a real CID-keyed font or a
+% CID-keyed font alias:
+%
+% - For real CID-keyed fonts, the name of the CID-keyed font
+% file (a Ghostscript string, enclosed in parentheses).
+% The filename should include the extension if the CID-keyed font
+% name has.
+%
+% - For CID-keyed font aliases, the name of the CID font
+% which should be used when this one is requested,
+% preceded by a `/'. Note that an alias name cannot be enclosed
+% in parentheses.
+%
+% i3. At least one space or tab, and a terminating semicolon.
+%
+% Each CID-keyed font has an entry consisting of three essential items and
+% two optional items. The three essential items are the same to the items of
+% CID-keyed Font. Two optional items are put between i2 and i3.
+% Two optional items are:
+%
+% i4. the number that specifies TTC font index
+%
+% i5. the name of CIDs mapping to Codes
+% ``The kind of CIDs mapping to Codes'' is listed as follows:
+%
+% <RO-Code> <Comment>
+% /Adobe-CNS1-Big5 Traditional Chinese, for Big5 TrueType fonts
+% /Adobe-CNS1-Unicode Traditional Chinese, for Unicode TrueType fonts
+% /Adobe-CNS1 Traditional Chinese, for TrueType fonts (*3)
+% /Adobe-GB1-PRC Simplified Chinese, for PRC TrueType fonts
+% /Adobe-GB1-Unicode Simplified Chinese, for Unicode TrueType fonts
+% /Adobe-GB1 Simplified Chinese, for TrueType fonts (*3)
+% /Adobe-Japan1-ShiftJIS Japanese, for ShiftJIS TrueType fonts
+% /Adobe-Japan1-Unicode Japanese, for Unicode TrueType fonts
+% /Adobe-Japan1 Japanese, for TrueType fonts (*3)
+% /Adobe-Japan2-Unicode JIS Supplement, for Unicode TrueType fonts
+% /Adobe-Japan2 JIS Supplement, for TrueType fonts (*3)
+% /Adobe-Korea1-Johab Korean, for Johab TrueType fonts
+% /Adobe-Korea1-Unicode Korean, for Unicode TrueType fonts
+% /Adobe-Korea1-Wansung Korean, for Wansung TrueType fonts
+% /Adobe-Korea1 Korean, for TrueType fonts (*3)
+% (*3) Code is automatically detected by cmap table of a TrueType file.
+% If an optional item for the kind of mapping is omitted, then
+% Code of TTF and RO(Registry-Ordering) of CIDFont are automatically
+% detected by OS/2 table and cmap table of TTF, respectively.
+
+% Like Fontmap, .runlibfile is used in CIDFnmap to include other CIDFnmaps.
+
+% The following table is actually a Ghostscript data structure.
+% If you add new entries, be sure to copy the punctuation accurately;
+% in particular, you must leave at least one space or tab between each
+% field in the entry.
+
+%(CIDFnmap.Ore) .runlibfile
+%(CIDFnmap.ARP) .runlibfile
+%(CIDFnmap.Bae) .runlibfile
+%(CIDFnmap.Koc) .runlibfile
+%(CIDFnmap.Sol) .runlibfile
+%(CIDFnmap.Win) .runlibfile
+
+%(CIDFnmap.CJK) .runlibfile
+
+% native CIDFontName (BIG5) in traditional Chinese
+%(CIDFnmap.b5) .runlibfile
+
+% native CIDFontName (GB2312) in simplified Chinese
+%(CIDFnmap.gb) .runlibfile
+
+% native CIDFontName (Shift_JIS) in Japanese
+%(CIDFnmap.sj) .runlibfile
+
+% native CIDFontName (euc-kr) in Korean
+%(CIDFnmap.ksx) .runlibfile
diff --git a/Master/xemtex/gslib/CIDFnmap.ARP b/Master/xemtex/gslib/CIDFnmap.ARP
new file mode 100644
index 00000000000..adf8664a97f
--- /dev/null
+++ b/Master/xemtex/gslib/CIDFnmap.ARP
@@ -0,0 +1,34 @@
+%!
+% Copyright (C) 2001 Taiji Yamada and gs-cjk project
+%
+% This file is part of GNU Ghostscript.
+%
+% GNU Ghostscript is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+% to anyone for the consequences of using it or for whether it serves any
+% particular purpose or works at all, unless he says so in writing. Refer
+% to the GNU General Public License for full details.
+%
+% Everyone is granted permission to copy, modify and redistribute GNU
+% Ghostscript, but only under the conditions described in the GNU General
+% Public License. A copy of this license is supposed to have been given
+% to you along with GNU Ghostscript so you can know your rights and
+% responsibilities. It should be in a file named COPYING. Among other
+% things, the copyright notice and this notice must be preserved on all
+% copies.
+
+% $Id: CIDFnmap.ARP,v 1.1.4.1 2002/04/02 14:47:42 mpsuzuki Exp $
+% CID fontmap for the Arphic trutype fonts
+
+% See ftp://ftp.gnu.org/pub/non-gnu/chinese-fonts-truetype/LICENSE
+% for license information regarding these fonts.
+
+% Adobe-CNS1
+
+/ZenKai-Medium (bkai00mp.ttf) ;
+/ShanHeiSun-Light (bsmi00lp.ttf) ;
+
+% Adobe-GB1
+
+/BousungEG-Light-GB (gbsn00lp.ttf) ;
+/GBZenKai-Medium (gkai00mp.ttf) ;
diff --git a/Master/xemtex/gslib/CIDFnmap.Bae b/Master/xemtex/gslib/CIDFnmap.Bae
new file mode 100644
index 00000000000..54a64b45bd5
--- /dev/null
+++ b/Master/xemtex/gslib/CIDFnmap.Bae
@@ -0,0 +1,31 @@
+%!
+% Copyright (C) 2001 Taiji Yamada and gs-cjk project
+%
+% This file is part of GNU Ghostscript.
+%
+% GNU Ghostscript is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+% to anyone for the consequences of using it or for whether it serves any
+% particular purpose or works at all, unless he says so in writing. Refer
+% to the GNU General Public License for full details.
+%
+% Everyone is granted permission to copy, modify and redistribute GNU
+% Ghostscript, but only under the conditions described in the GNU General
+% Public License. A copy of this license is supposed to have been given
+% to you along with GNU Ghostscript so you can know your rights and
+% responsibilities. It should be in a file named COPYING. Among other
+% things, the copyright notice and this notice must be preserved on all
+% copies.
+
+% $Id: CIDFnmap.Bae,v 1.1.4.1 2002/04/02 14:47:42 mpsuzuki Exp $
+% CID fontmap for the Baekmuk truetype fonts
+
+% See ftp://ftp.mizi.com/pub/baekmuk/COPYRIGHT
+% for license information regarding these fonts.
+
+% Adobe-Korea1
+
+/Baekmuk-Batang (batang.ttf) ;
+/Baekmuk-Dotum (dotum.ttf) ;
+/Baekmuk-Gulim (gulim.ttf) ;
+/Baekmuk-Headline (hline.ttf) ;
diff --git a/Master/xemtex/gslib/CIDFnmap.CJK b/Master/xemtex/gslib/CIDFnmap.CJK
new file mode 100644
index 00000000000..0ce91d45f5a
--- /dev/null
+++ b/Master/xemtex/gslib/CIDFnmap.CJK
@@ -0,0 +1,289 @@
+%!
+% Copyright (C) 2001 Taiji Yamada and gs-cjk project
+%
+% This file is part of GNU Ghostscript.
+%
+% GNU Ghostscript is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+% to anyone for the consequences of using it or for whether it serves any
+% particular purpose or works at all, unless he says so in writing. Refer
+% to the GNU General Public License for full details.
+%
+% Everyone is granted permission to copy, modify and redistribute GNU
+% Ghostscript, but only under the conditions described in the GNU General
+% Public License. A copy of this license is supposed to have been given
+% to you along with GNU Ghostscript so you can know your rights and
+% responsibilities. It should be in a file named COPYING. Among other
+% things, the copyright notice and this notice must be preserved on all
+% copies.
+
+% $Id: CIDFnmap.CJK,v 1.1.4.1 2002/04/02 14:47:42 mpsuzuki Exp $
+% CIDFontName aliases for CJK PDF/PS files
+
+%
+% Fallback aliases for CJK PDF files
+%
+%/Adobe-CNS1 /MOESung-Regular ; % CIDFnmap.Ore
+%/Adobe-CNS1 /ShanHeiSun-Light ; % CIDFnmap.ARP
+%/Adobe-CNS1 /ming ; % CIDFnmap.Sol
+%/Adobe-CNS1 /MingLiU ; % CIDFnmap.Win
+%/Adobe-CNS1 /SimSun-18030-Adobe-CNS1 ; % CIDFnmap.Win
+
+%/Adobe-GB1 /BousungEG-Light-GB ; % CIDFnmap.ARP
+%/Adobe-GB1 /zycjksun ; % CIDFnmap.Sol
+%/Adobe-GB1 /SimSun ; % CIDFnmap.Win
+
+%/Adobe-Japan1 /WadaMin-Regular ; % CIDFnmap.Ore
+%/Adobe-Japan1 /HG-MinchoL ; % CIDFnmap.Sol
+%/Adobe-Japan1 /Kochi-Mincho ; % CIDFnmap.Koc
+%/Adobe-Japan1 /MS-Mincho ; % CIDFnmap.Win
+
+%/Adobe-Japan2 /WadaMin-RegularH ; % CIDFnmap.Ore
+%/Adobe-Japan2 /HeiseiMin-W3H ; % CIDFnmap.Sol
+%/Adobe-Japan2 /MS-Mincho-Adobe-Japan2 ; % CIDFnmap.Win
+
+%/Adobe-Korea1 /Munhwa-Regular ; % CIDFnmap.Ore
+%/Adobe-Korea1 /Baekmuk-Batang ; % CIDFnmap.Bae
+%/Adobe-Korea1 /Myeongjo ; % CIDFnmap.Sol
+%/Adobe-Korea1 /Batang ; % CIDFnmap.Win
+
+%
+% Convenient aliases for PS files on Traditional Chinese PostScript printer
+%
+%/MSung-Light /MOESung-Regular ; % CIDFnmap.Ore
+%/MSung-Light /SimSun-18030-Adobe-CNS1 ; % CIDFnmap.Win
+%/MSung-Medium /ShanHeiSun-Light ; % CIDFnmap.ARP
+%/MHei-Medium /ShanHeiSun-Light ; % CIDFnmap.ARP
+%/MHei-Medium /hei ; % CIDFnmap.Sol
+%/MKai-Medium /ZenKai-Medium ; % CIDFnmap.ARP
+%/MKai-Medium /kai ; % CIDFnmap.Sol
+
+%
+% Convenient aliases for PS files on Simplified Chinese PostScript printer
+%
+%/STSong-Light /BousungEG-Light-GB ; % CIDFnmap.ARP
+%/STSong-Light /zycjksun ; % CIDFnmap.Sol
+%/STSong-Light /SimSun ; % CIDFnmap.Win
+%/STFangsong-Light /zycjkfangs ; % CIDFnmap.Sol
+%/STFangsong-Light /SimSun ; % CIDFnmap.Win
+%/STHeiti-Regular /zycjkhei ; % CIDFnmap.Sol
+%/STHeiti-Regular /SimHei ; % CIDFnmap.Win
+%/STKaiti-Regular /GBZenKai-Medium ; % CIDFnmap.ARP
+%/STKaiti-Regular /zycjkkai ; % CIDFnmap.Sol
+
+%
+% Convenient aliases for PS files on Japanese PostScript printer
+%
+%/Ryumin-Light /WadaMin-Regular ; % CIDFnmap.Ore
+%/Ryumin-Light /HG-MinchoL ; % CIDFnmap.Sol
+%/Ryumin-Light /Kochi-Mincho ; % CIDFnmap.Koc
+%/Ryumin-Light /MS-Mincho ; % CIDFnmap.Win
+%/GothicBBB-Medium /WadaGo-Bold ; % CIDFnmap.Ore
+%/GothicBBB-Medium /HG-GothicB ; % CIDFnmap.Sol
+%/GothicBBB-Medium /Kochi-Gothic ; % CIDFnmap.Koc
+%/GothicBBB-Medium /MS-Gothic ; % CIDFnmap.Win
+%/HeiseiMin-W3 /MS-Mincho ; % CIDFnmap.Win
+%/HeiseiKakuGo-W5 /MS-Gothic ; % CIDFnmap.Win
+
+%/HeiseiMin-W3H /WadaMin-RegularH ; % CIDFnmap.Ore
+%/HeiseiMin-W3H /MS-Mincho-Adobe-Japan2 ; % CIDFnmap.Win
+%/HeiseiKakuGo-W5H /WadaMaruGo-RegularH ; % CIDFnmap.Ore
+%/HeiseiKakuGo-W5H /MS-Gothic-Adobe-Japan2 ; % CIDFnmap.Win
+
+%/KozMin-Regular /MS-Mincho ; % CIDFnmap.Win
+%/KozMinPro-Regular /MS-PMincho ; % CIDFnmap.Win
+
+%
+% Convenient aliases for PS files on Korean PostScript printer
+%
+%/HYGoThic-Medium /MunhwaGothic-Regular ; % CIDFnmap.Ore
+%/HYGoThic-Medium /Baekmuk-Dotum ; % CIDFnmap.Bae
+%/HYGoThic-Medium /Gothic ; % CIDFnmap.Sol
+%/HYGoThic-Medium /Dotum ; % CIDFnmap.Win
+%/HYGungSo-Bold /Gungsuh ; % CIDFnmap.Win
+%/HYKHeadLine-Bold /Baekmuk-Headline ; % CIDFnmap.Bae
+%/HYKHeadLine-Medium /Baekmuk-Headline ; % CIDFnmap.Bae
+%/HYSMyeongJo-Medium /Munhwa-Regular ; % CIDFnmap.Ore
+%/HYSMyeongJo-Medium /Baekmuk-Batang ; % CIDFnmap.Bae
+%/HYSMyeongJo-Medium /Myeongjo ; % CIDFnmap.Sol
+%/HYSMyeongJo-Medium /Batang ; % CIDFnmap.Win
+%/HYRGoThic-Medium /Baekmuk-Gulim ; % CIDFnmap.Bae
+%/HYRGoThic-Medium /RoundedGothic ; % CIDFnmap.Sol
+%/HYRGoThic-Medium /Gulim ; % CIDFnmap.Win
+
+%
+% Convenient aliases for PS files on Traditional Chinese Acrobat Distiller
+%
+%/DFKaiShu-SB-Estd-BF /MKai-Medium ;
+%/LiGothicMed /MKai-Medium ;
+%/LiSungLight /MSung-Light ;
+%/Taipei /Adobe-CNS1 ;
+
+%
+% Convenient aliases for PS files on Simplified Chinese Acrobat Distiller
+%
+%/Beijing /Adobe-GB1 ;
+%/SIL-FangSong- /STFangsong-Light ;
+%/SIL-FangSong-Reg-Jian /STFangsong-Light ;
+%/SIL-Hei-Med-Jian /STHeiti-Regular ;
+%/SIL-Kai- /STKaiti-Regular ;
+%/SIL-Kai-Reg-Jian /STKaiti-Regular ;
+%/SIL-Song-Reg-Jian /STSong-Light ;
+
+%
+% Convenient aliases for PS files on Japanese Acrobat Distiller
+%
+%/ChuGothicBBB-Medium /GothicBBB-Medium ;
+%/ChuGothicBBB-Medium-Mono /MS-Gothic ; % CIDFnmap.Win
+%/FutoGoB101-Bold /GothicBBB-Medium ;
+%/FutoMinA101-Bold /Ryumin-Light ;
+%/GothicMB101-Bold /GothicBBB-Medium ;
+%/GothicMB101-hea /GothicBBB-Medium ;
+%/GothicMB101-Ult /GothicBBB-Medium ;
+%/HeiseiKakuGo-W3 /HeiseiKakuGo-W5 ;
+%/HeiseiKakuGo-W7 /HeiseiKakuGo-W5 ;
+%/HeiseiKakuGo-W9 /HeiseiKakuGo-W5 ;
+%/HeiseiKakuGothic-W5 /HeiseiKakuGo-W5 ;
+%/HeiseiMaruGo-W4 /HeiseiKakuGo-W5 ;
+%/HeiseiMin-W5 /HeiseiMin-W3 ;
+%/HeiseiMin-W7 /HeiseiMin-W3 ;
+%/HeiseiMin-W9 /HeiseiMin-W3 ;
+%/HeiseiMincho-W3 /HeiseiMin-W3 ;
+%/HonMincho-M /Ryumin-Light ;
+%/Jun34-Medium /Ryumin-Light ;
+%/Jun101-Light /Ryumin-Light ;
+%/Jun501-Bold /Ryumin-Light ;
+%/KozMin-Bold /GothicBBB-Medium ;
+%/KozMin-ExtraLight /Ryumin-Light ;
+%/KozMin-Heavy /GothicBBB-Medium ;
+%/KozMin-Light /Ryumin-Light ;
+%/KozMin-Medium /Ryumin-Light ;
+%/KyokaICA-Light /Adobe-Japan1 ;
+%/KyokaICA-Medium /Adobe-Japan1 ;
+%/KyokaICA-regular /Adobe-Japan1 ;
+%/LogoArl-Bold /Adobe-Japan1 ;
+%/LogoArl-Light /Adobe-Japan1 ;
+%/LogoArl-Medium /Adobe-Japan1 ;
+%/LogoArl-Ultra /Adobe-Japan1 ;
+%/LogoCut-Bold /Adobe-Japan1 ;
+%/LogoCut-Light /Adobe-Japan1 ;
+%/LogoCut-Medium /Adobe-Japan1 ;
+%/LogoCut-Ultra /Adobe-Japan1 ;
+%/LogoLine-Bold /Adobe-Japan1 ;
+%/LogoLine-Light /Adobe-Japan1 ;
+%/LogoLine-Medium /Adobe-Japan1 ;
+%/LogoLine-Ultra /Adobe-Japan1 ;
+%/MaruGothic-M /GothicBBB-Medium ;
+%/MidashiGo-MB31 /GothicBBB-Medium ;
+%/MidashiMin-MA31 /Ryumin-Light ;
+%/Osaka /Ryumin-Light ;
+%/Osaka-Mono /MS-Mincho ; % CIDFnmap.Win
+%/Ryumin-Bold /Ryumin-Light ;
+%/Ryumin-heavy /Ryumin-Light ;
+%/Ryumin-Light-KL /Ryumin-Light ;
+%/Ryumin-Light-KL-Mono /MS-Mincho ; % CIDFnmap.Win
+%/Ryumin-Medium /Ryumin-Light ;
+%/Ryumin-regular /Ryumin-Light ;
+%/Ryumin-Ultra /Ryumin-Light ;
+%/ShinGo-Bold /GothicBBB-Medium ;
+%/ShinGo-Light /GothicBBB-Medium ;
+%/ShinGo-Medium /GothicBBB-Medium ;
+%/ShinGo-regular /GothicBBB-Medium ;
+%/ShinGo-Ultra /GothicBBB-Medium ;
+%/ShinseiKai-CBSK1 /Ryumin-Light ;
+%/TBKomachiG-B /Adobe-Japan1 ;
+%/TBKomachiG-DB /Adobe-Japan1 ;
+%/TBKomachiG-E /Adobe-Japan1 ;
+%/TBKomachiG-hv /Adobe-Japan1 ;
+%/TBKomachiG-M /Adobe-Japan1 ;
+%/TBKomachiG-R /Adobe-Japan1 ;
+%/TBKomachiM-DE /Adobe-Japan1 ;
+%/TBKomachiM-E /Adobe-Japan1 ;
+%/TBKomachiM-hv /Adobe-Japan1 ;
+%/TBKomachiM-M /Adobe-Japan1 ;
+%/TBKoudoukenG-B /Adobe-Japan1 ;
+%/TBKoudoukenG-DB /Adobe-Japan1 ;
+%/TBKoudoukenG-E /Adobe-Japan1 ;
+%/TBKoudoukenG-hv /Adobe-Japan1 ;
+%/TBKoudoukenG-M /Adobe-Japan1 ;
+%/TBKoudoukenG-R /Adobe-Japan1 ;
+%/TBKoudoukenM-DE /Adobe-Japan1 ;
+%/TBKoudoukenM-E /Adobe-Japan1 ;
+%/TBKoudoukenM-hv /Adobe-Japan1 ;
+%/TBKoudoukenM-M /Adobe-Japan1 ;
+%/TBRyokanG-B /Adobe-Japan1 ;
+%/TBRyokanG-DB /Adobe-Japan1 ;
+%/TBRyokanG-E /Adobe-Japan1 ;
+%/TBRyokanG-hv /Adobe-Japan1 ;
+%/TBRyokanG-M /Adobe-Japan1 ;
+%/TBRyokanG-R /Adobe-Japan1 ;
+%/TBRyokanM-DE /Adobe-Japan1 ;
+%/TBRyokanM-E /Adobe-Japan1 ;
+%/TBRyokanM-hv /Adobe-Japan1 ;
+%/TBRyokanM-M /Adobe-Japan1 ;
+%/TBTsukijiG-B /Adobe-Japan1 ;
+%/TBTsukijiG-DB /Adobe-Japan1 ;
+%/TBTsukijiG-E /Adobe-Japan1 ;
+%/TBTsukijiG-hv /Adobe-Japan1 ;
+%/TBTsukijiG-M /Adobe-Japan1 ;
+%/TBTsukijiG-R /Adobe-Japan1 ;
+%/TBTsukijiM-DE /Adobe-Japan1 ;
+%/TBTsukijiM-E /Adobe-Japan1 ;
+%/TBTsukijiM-hv /Adobe-Japan1 ;
+%/TBTsukijiM-M /Adobe-Japan1 ;
+%/TBYukinariG-B /Adobe-Japan1 ;
+%/TBYukinariG-DB /Adobe-Japan1 ;
+%/TBYukinariG-E /Adobe-Japan1 ;
+%/TBYukinariG-hv /Adobe-Japan1 ;
+%/TBYukinariG-M /Adobe-Japan1 ;
+%/TBYukinariG-R /Adobe-Japan1 ;
+%/TBYukinariM-DE /Adobe-Japan1 ;
+%/TBYukinariM-E /Adobe-Japan1 ;
+%/TBYukinariM-hv /Adobe-Japan1 ;
+%/TBYukinariM-M /Adobe-Japan1 ;
+%/TypeBankG-B /Adobe-Japan1 ;
+%/TypeBankG-DB /Adobe-Japan1 ;
+%/TypeBankG-E /Adobe-Japan1 ;
+%/TypeBankG-hv /Adobe-Japan1 ;
+%/TypeBankG-M /Adobe-Japan1 ;
+%/TypeBankG-R /Adobe-Japan1 ;
+%/TypeBankM-DE /Adobe-Japan1 ;
+%/TypeBankM-E /Adobe-Japan1 ;
+%/TypeBankM-hv /Adobe-Japan1 ;
+%/TypeBankM-M /Adobe-Japan1 ;
+
+%
+% Convenient aliases for PS files on Korean Acrobat Distiller
+%
+%/AppleGothic /HYGoThic-Medium ;
+%/AppleMyungjo /HYSMyeongJo-Medium ;
+%/HYSinMyeongJo-Medium /HYSMyeongJo-Medium ;
+%/JCfg /Adobe-Korea1 ;
+%/JCkg /Adobe-Korea1 ;
+%/Munhwa-Regular /HYSMyeongJo-Medium ;
+%/MunhwaGothic-Regular /HYGoThic-Medium ;
+%/SMAgoJ /HYGoThic-Medium ;
+%/SMAgoK /HYGoThic-Medium ;
+%/SMAgoSE /HYGoThic-Medium ;
+%/SMAgoT /HYGoThic-Medium ;
+%/SMAmu /HYSMyeongJo-Medium ;
+%/SMAmuK /HYSMyeongJo-Medium ;
+%/SMAmuSE /HYSMyeongJo-Medium ;
+%/SMAmuT /HYSMyeongJo-Medium ;
+%/SMGothic-Bold /HYGoThic-Medium ;
+%/SMGothic-DemiBold /HYGoThic-Medium ;
+%/SMGothic-Light /HYGoThic-Medium ;
+%/SMGothic-Medium /HYGoThic-Medium ;
+%/SMMyungjo-Bold /HYSMyeongJo-Medium ;
+%/SMMyungjo-DemiBold /HYSMyeongJo-Medium ;
+%/SMMyungjo-Light /HYSMyeongJo-Medium ;
+%/SMMyungjo-Medium /HYSMyeongJo-Medium ;
+%/SMgoJ /HYGoThic-Medium ;
+%/SMgoK /HYGoThic-Medium ;
+%/SMgoSE /HYGoThic-Medium ;
+%/SMgoT /HYGoThic-Medium ;
+%/SMmu /HYSMyeongJo-Medium ;
+%/SMmuK /HYSMyeongJo-Medium ;
+%/SMmuSE /HYSMyeongJo-Medium ;
+%/SMmuT /HYSMyeongJo-Medium ;
+%/Seoul /Adobe-Korea1 ;
diff --git a/Master/xemtex/gslib/CIDFnmap.Koc b/Master/xemtex/gslib/CIDFnmap.Koc
new file mode 100644
index 00000000000..8c1e5b95044
--- /dev/null
+++ b/Master/xemtex/gslib/CIDFnmap.Koc
@@ -0,0 +1,50 @@
+%!
+% Copyright (C) 2001 Taiji Yamada and gs-cjk project
+%
+% This file is part of GNU Ghostscript.
+%
+% GNU Ghostscript is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+% to anyone for the consequences of using it or for whether it serves any
+% particular purpose or works at all, unless he says so in writing. Refer
+% to the GNU General Public License for full details.
+%
+% Everyone is granted permission to copy, modify and redistribute GNU
+% Ghostscript, but only under the conditions described in the GNU General
+% Public License. A copy of this license is supposed to have been given
+% to you along with GNU Ghostscript so you can know your rights and
+% responsibilities. It should be in a file named COPYING. Among other
+% things, the copyright notice and this notice must be preserved on all
+% copies.
+
+% $Id: CIDFnmap.Koc,v 1.1.4.1 2002/04/02 14:47:42 mpsuzuki Exp $
+% CID fontmap for Kochi truetype fonts
+
+% Kochi Mincho (aka Watanabe-Light) font series and
+% Kochi Gothic (aka Kochi-WadaLabGothic) font series for Adobe-Japan1
+
+% Kochi Mincho and Gothic - TrueType
+% Editor: Yasuyuki Furukawa <Furukawa.Yasuyuki@fujixerox.co.jp>
+% URL: http://www.on.cs.keio.ac.jp/~yasu/linux/fonts/
+%
+% Kochi-Mincho: Public domain, except for NAGA10 bitmap data
+% Kochi-Gothic: Wada Lab's font license, except for NAGA10 bitmap data
+%
+%/Kochi-Mincho (kochi-mincho.ttf) ;
+%/Kochi-Gothic (kochi-gothic.ttf) ;
+%
+% Notice: In CID-keyed space of Kochi-Mincho, although you may find that
+% CIDs 7611,7613-7625,7629,7630,11847,12041-12043 are incorrectly
+% assigned from glyph IDs, it is because that these are for WORKING AREA
+% to develop "kochi-mincho.ttf" font for the time being.
+
+% Kochi Mincho and Gothic - CIDFontType 0
+% Author: KANOU Hiroki <kanou@mil.allnet.ne.jp>
+% URL: http://kappa.allnet.ne.jp/Kochi-CID/index-e.html
+%
+% Kochi-Mincho: Public domain. Designed by Yasuyuki Furukawa.
+% Kochi-Gothic: Wada Lab's font license.
+%
+/Kochi-Mincho (Kochi-Mincho) ;
+/Kochi-Gothic (Kochi-Gothic) ;
+
diff --git a/Master/xemtex/gslib/CIDFnmap.Ore b/Master/xemtex/gslib/CIDFnmap.Ore
new file mode 100644
index 00000000000..b81f1a709cd
--- /dev/null
+++ b/Master/xemtex/gslib/CIDFnmap.Ore
@@ -0,0 +1,53 @@
+%!
+% Copyright (C) 2001 Taiji Yamada and gs-cjk project
+%
+% This file is part of GNU Ghostscript.
+%
+% GNU Ghostscript is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+% to anyone for the consequences of using it or for whether it serves any
+% particular purpose or works at all, unless he says so in writing. Refer
+% to the GNU General Public License for full details.
+%
+% Everyone is granted permission to copy, modify and redistribute GNU
+% Ghostscript, but only under the conditions described in the GNU General
+% Public License. A copy of this license is supposed to have been given
+% to you along with GNU Ghostscript so you can know your rights and
+% responsibilities. It should be in a file named COPYING. Among other
+% things, the copyright notice and this notice must be preserved on all
+% copies.
+
+% $Id: CIDFnmap.Ore,v 1.1.4.1 2002/04/02 14:47:42 mpsuzuki Exp $
+% CID fontmap for O'Reilly cjkv font samples
+
+% See ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/samples/
+
+% Adobe-CNS1
+
+/MOEKai-Regular (MOEKai-Regular) ;
+/MOESung-Regular (MOESung-Regular) ;
+
+% Adobe-GB1
+
+% Adobe-Japan1
+
+/WadaGo-Bold (WadaGo-Bold) ;
+/WadaMaruGo-Regular (WadaMaruGo-Regular) ;
+/WadaMin-Bold (WadaMin-Bold) ;
+/WadaMin-Regular (WadaMin-Regular) ;
+
+% Adobe-Japan2
+
+/WadaMaruGo-RegularH (WadaMaruGo-RegularH) ;
+/WadaMin-RegularH (WadaMin-RegularH) ;
+
+% Adobe-Korea1
+
+/Munhwa-Regular (Munhwa-Regular) ;
+/MunhwaGothic-Bold (MunhwaGothic-Bold) ;
+/MunhwaGothic-Regular (MunhwaGothic-Regular) ;
+/MunhwaGungSeo-Bold (MunhwaGungSeo-Bold) ;
+/MunhwaGungSeo-Light (MunhwaGungSeo-Light) ;
+/MunhwaGungSeoHeulim-Bold (MunhwaGungSeoHeulim-Bold) ;
+/MunhwaGungSeoHeulim-Light (MunhwaGungSeoHeulim-Light) ;
+/MunhwaHoonMin-Regular (MunhwaHoonMin-Regular) ;
diff --git a/Master/xemtex/gslib/CIDFnmap.Sol b/Master/xemtex/gslib/CIDFnmap.Sol
new file mode 100644
index 00000000000..c14db768a3f
--- /dev/null
+++ b/Master/xemtex/gslib/CIDFnmap.Sol
@@ -0,0 +1,54 @@
+%!
+% Copyright (C) 2001 Taiji Yamada and gs-cjk project
+%
+% This file is part of GNU Ghostscript.
+%
+% GNU Ghostscript is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+% to anyone for the consequences of using it or for whether it serves any
+% particular purpose or works at all, unless he says so in writing. Refer
+% to the GNU General Public License for full details.
+%
+% Everyone is granted permission to copy, modify and redistribute GNU
+% Ghostscript, but only under the conditions described in the GNU General
+% Public License. A copy of this license is supposed to have been given
+% to you along with GNU Ghostscript so you can know your rights and
+% responsibilities. It should be in a file named COPYING. Among other
+% things, the copyright notice and this notice must be preserved on all
+% copies.
+
+% $Id: CIDFnmap.Sol,v 1.1.4.1 2002/04/02 14:47:42 mpsuzuki Exp $
+% CID fontmap for Solaris
+
+% Adobe-CNS1
+
+/hei (/usr/openwin/lib/locale/zh_TW.BIG5/X11/fonts/TT/hei.ttf) /Adobe-CNS1-Unicode ;
+/kai (/usr/openwin/lib/locale/zh_TW.BIG5/X11/fonts/TT/kai.ttf) /Adobe-CNS1-Unicode ;
+/ming (/usr/openwin/lib/locale/zh_TW.BIG5/X11/fonts/TT/ming.ttf) /Adobe-CNS1-Unicode ;
+
+% Adobe-GB1
+
+/zycjkfangs (/usr/openwin/lib/locale/zh.GBK/X11/fonts/TrueType/fangsongti.ttf) ;
+/zycjkhei (/usr/openwin/lib/locale/zh.GBK/X11/fonts/TrueType/heiti.ttf) ;
+/zycjkkai (/usr/openwin/lib/locale/zh.GBK/X11/fonts/TrueType/kaiti.ttf) ;
+/zycjksun (/usr/openwin/lib/locale/zh.GBK/X11/fonts/TrueType/songti.ttf) ;
+/CFangSongGB-Light (/usr/openwin/lib/locale/zh/X11/fonts/TrueType/cfsgbl.ttf) /Adobe-GB1-PRC ;
+/MHeiGB-Bold (/usr/openwin/lib/locale/zh/X11/fonts/TrueType/mhgbb.ttf) /Adobe-GB1-PRC ;
+/MKaiGB-Medium (/usr/openwin/lib/locale/zh/X11/fonts/TrueType/mkgbm.ttf) /Adobe-GB1-PRC ;
+/MSungGB-Light (/usr/openwin/lib/locale/zh/X11/fonts/TrueType/msgbl.ttf) /Adobe-GB1-PRC ;
+
+% Adobe-Japan1
+
+/HG-GothicB (/usr/openwin/lib/locale/ja/X11/fonts/TT/HG-GothicB.ttf) ;
+/HG-MinchoL (/usr/openwin/lib/locale/ja/X11/fonts/TT/HG-MinchoL.ttf) ;
+
+% Adobe-Japan2
+
+/HeiseiMin-W3H (/usr/openwin/lib/locale/ja/X11/fonts/TT/HeiseiMin-W3H.ttf) /Adobe-Japan2-Unicode ;
+
+% Adobe-Korea1
+
+/Gothic (/usr/openwin/lib/locale/ko/X11/fonts/TrueType/h2gtrm.ttf) ;
+/RoundedGothic (/usr/openwin/lib/locale/ko/X11/fonts/TrueType/h2drrm.ttf) ;
+/Haeseo (/usr/openwin/lib/locale/ko/X11/fonts/TrueType/h2hsrm.ttf) ;
+/Myeongjo (/usr/openwin/lib/locale/ko/X11/fonts/TrueType/h2mjsm.ttf) ;
diff --git a/Master/xemtex/gslib/CIDFnmap.Win b/Master/xemtex/gslib/CIDFnmap.Win
new file mode 100644
index 00000000000..2b263a7d152
--- /dev/null
+++ b/Master/xemtex/gslib/CIDFnmap.Win
@@ -0,0 +1,79 @@
+%!
+% Copyright (C) 2001 Taiji Yamada and gs-cjk project
+%
+% This file is part of GNU Ghostscript.
+%
+% GNU Ghostscript is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+% to anyone for the consequences of using it or for whether it serves any
+% particular purpose or works at all, unless he says so in writing. Refer
+% to the GNU General Public License for full details.
+%
+% Everyone is granted permission to copy, modify and redistribute GNU
+% Ghostscript, but only under the conditions described in the GNU General
+% Public License. A copy of this license is supposed to have been given
+% to you along with GNU Ghostscript so you can know your rights and
+% responsibilities. It should be in a file named COPYING. Among other
+% things, the copyright notice and this notice must be preserved on all
+% copies.
+
+% $Id: CIDFnmap.Win,v 1.1.2.1 2002/04/02 14:47:42 mpsuzuki Exp $
+% CID fontmap for MS Windows
+
+% Adobe-CNS1
+
+/MingLiU (mingliu.ttc) ;
+/PMingLiU (mingliu.ttc) 2 ;
+
+/SimSun-18030-Adobe-CNS1 (SimSun18030.ttc) /Adobe-CNS1 ;
+/NSimSun-18030-Adobe-CNS1 (SimSun18030.ttc) 2 /Adobe-CNS1 ;
+
+% Adobe-GB1
+
+/SimHei (simhei.ttf) ;
+
+/SimSun (simsun.ttc) ;
+/NSimSun (simsun.ttc) 2 ;
+
+/SimSun-18030 (SimSun18030.ttc) /Adobe-GB1 ;
+/NSimSun-18030 (SimSun18030.ttc) 2 /Adobe-GB1 ;
+
+% Adobe-Japan1
+
+/MS-Gothic (msgothic.ttc) ;
+/MS-PGothic (msgothic.ttc) 2 ;
+/MS-UI-Gothic (msgothic.ttc) 3 ;
+(MS Gothic) (msgothic.ttc) ;
+(MS PGothic) (msgothic.ttc) 2 ;
+(MS UI Gothic) (msgothic.ttc) 3 ;
+/MSGothic (msgothic.ttc) ;
+/MSPGothic (msgothic.ttc) 2 ;
+/MSUIGothic (msgothic.ttc) 3 ;
+
+/MS-Mincho (msmincho.ttc) ;
+/MS-PMincho (msmincho.ttc) 2 ;
+(MS Mincho) (msmincho.ttc) ;
+(MS PMincho) (msmincho.ttc) 2 ;
+/MSMincho (msmincho.ttc) ;
+/MSPMincho (msmincho.ttc) 2 ;
+
+% Adobe-Japan2
+
+/MS-Gothic-Adobe-Japan2 (msgothic.ttc) /Adobe-Japan2 ;
+/MS-PGothic-Adobe-Japan2 (msgothic.ttc) 2 /Adobe-Japan2 ;
+/MS-UI-Gothic-Adobe-Japan2 (msgothic.ttc) 3 /Adobe-Japan2 ;
+
+/MS-Mincho-Adobe-Japan2 (msmincho.ttc) /Adobe-Japan2 ;
+/MS-PMincho-Adobe-Japan2 (msmincho.ttc) 2 /Adobe-Japan2 ;
+
+% Adobe-Korea1
+
+/Batang (batang.ttc) ;
+/BatangChe (batang.ttc) 2 ;
+/Gungsuh (batang.ttc) 3 ;
+/GungsuhChe (batang.ttc) 4 ;
+
+/Gulim (gulim.ttc) ;
+/GulimChe (gulim.ttc) 2 ;
+/Dotum (gulim.ttc) 3 ;
+/DotumChe (gulim.ttc) 4 ;
diff --git a/Master/xemtex/gslib/CIDFnmap.b5 b/Master/xemtex/gslib/CIDFnmap.b5
new file mode 100644
index 00000000000..5ce66a9c632
--- /dev/null
+++ b/Master/xemtex/gslib/CIDFnmap.b5
@@ -0,0 +1,26 @@
+%!
+% Copyright (C) 2001 Taiji Yamada and gs-cjk project
+%
+% This file is part of GNU Ghostscript.
+%
+% GNU Ghostscript is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+% to anyone for the consequences of using it or for whether it serves any
+% particular purpose or works at all, unless he says so in writing. Refer
+% to the GNU General Public License for full details.
+%
+% Everyone is granted permission to copy, modify and redistribute GNU
+% Ghostscript, but only under the conditions described in the GNU General
+% Public License. A copy of this license is supposed to have been given
+% to you along with GNU Ghostscript so you can know your rights and
+% responsibilities. It should be in a file named COPYING. Among other
+% things, the copyright notice and this notice must be preserved on all
+% copies.
+
+% $Id: CIDFnmap.b5,v 1.1.2.2 2002/02/11 20:36:45 giles Exp $
+% CID fontmap for chinese-big5 encoding CIDFontName
+
+(§ºÅé Light) /MSung-Light ;
+(§ºÅé) /MSung-Light ;
+(¤¤¶ÂÅé Medium) /MHei-Medium ;
+(¤¤¶ÂÅé) /MHei-Medium ;
diff --git a/Master/xemtex/gslib/CIDFnmap.gb b/Master/xemtex/gslib/CIDFnmap.gb
new file mode 100644
index 00000000000..0db66013d4e
--- /dev/null
+++ b/Master/xemtex/gslib/CIDFnmap.gb
@@ -0,0 +1,24 @@
+%!
+% Copyright (C) 2001 Taiji Yamada and gs-cjk project
+%
+% This file is part of GNU Ghostscript.
+%
+% GNU Ghostscript is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+% to anyone for the consequences of using it or for whether it serves any
+% particular purpose or works at all, unless he says so in writing. Refer
+% to the GNU General Public License for full details.
+%
+% Everyone is granted permission to copy, modify and redistribute GNU
+% Ghostscript, but only under the conditions described in the GNU General
+% Public License. A copy of this license is supposed to have been given
+% to you along with GNU Ghostscript so you can know your rights and
+% responsibilities. It should be in a file named COPYING. Among other
+% things, the copyright notice and this notice must be preserved on all
+% copies.
+
+% $Id: CIDFnmap.gb,v 1.1.2.2 2002/02/11 20:36:45 giles Exp $
+% CID fontmap for chinese-gb2312 encoding CIDFontName
+
+(»ªÎÄËÎÌå Light) /STSong-Light ;
+(»ªÎÄËÎÌå) /STSong-Light ;
diff --git a/Master/xemtex/gslib/CIDFnmap.ksx b/Master/xemtex/gslib/CIDFnmap.ksx
new file mode 100644
index 00000000000..198d68501ca
--- /dev/null
+++ b/Master/xemtex/gslib/CIDFnmap.ksx
@@ -0,0 +1,31 @@
+%!
+% Copyright (C) 2001 Taiji Yamada and gs-cjk project
+%
+% This file is part of GNU Ghostscript.
+%
+% GNU Ghostscript is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+% to anyone for the consequences of using it or for whether it serves any
+% particular purpose or works at all, unless he says so in writing. Refer
+% to the GNU General Public License for full details.
+%
+% Everyone is granted permission to copy, modify and redistribute GNU
+% Ghostscript, but only under the conditions described in the GNU General
+% Public License. A copy of this license is supposed to have been given
+% to you along with GNU Ghostscript so you can know your rights and
+% responsibilities. It should be in a file named COPYING. Among other
+% things, the copyright notice and this notice must be preserved on all
+% copies.
+
+% $Id: CIDFnmap.ksx,v 1.1.2.2 2002/02/11 20:36:45 giles Exp $
+% CID fontmap for euc-korea encoding CIDFontName
+
+(HY½Å¸íÁ¶ Medium) /HYSMyeongJo-Medium ;
+(HY½Å¸íÁ¶) /HYSMyeongJo-Medium ;
+(HYÁß°íµñ Medium) /HYGoThic-Medium ;
+(HYÁß°íµñ) /HYGoThic-Medium ;
+(HY±Ã¼­B) /HYGungSo-Bold ;
+(HY°¢Çìµå¶óÀÎ) /HYKHeadLine-Bold ;
+(HY°¢Çìµå¶óÀÎ Medium) /HYKHeadLine-Medium ;
+(HYµÕ±Ù°íµñ Medium) /HYRGoThic-Medium ;
+(HYµÕ±Ù°íµñ) /HYRGoThic-Medium ;
diff --git a/Master/xemtex/gslib/CIDFnmap.sj b/Master/xemtex/gslib/CIDFnmap.sj
new file mode 100644
index 00000000000..70a8732a648
--- /dev/null
+++ b/Master/xemtex/gslib/CIDFnmap.sj
@@ -0,0 +1,81 @@
+%!
+% Copyright (C) 2001 Taiji Yamada and gs-cjk project
+%
+% This file is part of GNU Ghostscript.
+%
+% GNU Ghostscript is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+% to anyone for the consequences of using it or for whether it serves any
+% particular purpose or works at all, unless he says so in writing. Refer
+% to the GNU General Public License for full details.
+%
+% Everyone is granted permission to copy, modify and redistribute GNU
+% Ghostscript, but only under the conditions described in the GNU General
+% Public License. A copy of this license is supposed to have been given
+% to you along with GNU Ghostscript so you can know your rights and
+% responsibilities. It should be in a file named COPYING. Among other
+% things, the copyright notice and this notice must be preserved on all
+% copies.
+
+% $Id: CIDFnmap.sj,v 1.1.2.2 2002/02/11 20:36:45 giles Exp $
+% CID fontmap for japanese-shift-jis encoding CIDFontName
+
+(‚l‚r–¾’©) /MS-Mincho ;
+/#82l#82r#96#BE#92#A9 /MS-Mincho ;
+(‚l‚r‚o–¾’©) /MS-PMincho ;
+/#82l#82r#82o#96#BE#92#A9 /MS-PMincho ;
+(‚l‚r –¾’©) /MS-Mincho ;
+/#82l#82r#20#96#BE#92#A9 /MS-Mincho ;
+(‚l‚r ‚o–¾’©) /MS-PMincho ;
+/#82l#82r#20#82o#96#BE#92#A9 /MS-PMincho ;
+
+(@‚l‚r–¾’©) /MS-Mincho ;
+/@#82l#82r#96#BE#92#A9 /MS-Mincho ;
+(@‚l‚r‚o–¾’©) /MS-PMincho ;
+/@#82l#82r#82o#96#BE#92#A9 /MS-PMincho ;
+(@‚l‚r –¾’©) /MS-Mincho ;
+/@#82l#82r#20#96#BE#92#A9 /MS-Mincho ;
+(@‚l‚r ‚o–¾’©) /MS-PMincho ;
+/@#82l#82r#20#82o#96#BE#92#A9 /MS-PMincho ;
+
+(‚l‚rƒSƒVƒbƒN) /MS-Gothic ;
+/#82l#82r#83S#83V#83b#83N /MS-Gothic ;
+(‚l‚r‚oƒSƒVƒbƒN) /MS-PGothic ;
+/#82l#82r#82o#83S#83V#83b#83N /MS-PGothic ;
+(‚l‚r ƒSƒVƒbƒN) /MS-Gothic ;
+/#82l#82r#20#83S#83V#83b#83N /MS-Gothic ;
+(‚l‚r ‚oƒSƒVƒbƒN) /MS-PGothic ;
+/#82l#82r#20#82o#83S#83V#83b#83N /MS-PGothic ;
+
+(@‚l‚rƒSƒVƒbƒN) /MS-Gothic ;
+/@#82l#82r#83S#83V#83b#83N /MS-Gothic ;
+(@‚l‚r‚oƒSƒVƒbƒN) /MS-PGothic ;
+/@#82l#82r#82o#83S#83V#83b#83N /MS-PGothic ;
+(@‚l‚r ƒSƒVƒbƒN) /MS-Gothic ;
+/@#82l#82r#20#83S#83V#83b#83N /MS-Gothic ;
+(@‚l‚r ‚oƒSƒVƒbƒN) /MS-PGothic ;
+/@#82l#82r#20#82o#83S#83V#83b#83N /MS-PGothic ;
+
+(•½¬–¾’© W3) /HeiseiMin-W3 ;
+(•½¬–¾’©W3) /HeiseiMin-W3 ;
+(•½¬ŠpƒSƒVƒbƒN W5) /HeiseiKakuGo-W5 ;
+(•½¬ŠpƒSƒVƒbƒNW5) /HeiseiKakuGo-W5 ;
+(¬’Ë–¾’© R) /KozMin-Regular ;
+(¬’Ë–¾’©R) /KozMin-Regular ;
+
+%
+% If you found an error at substituting /Adobe-Identity for a fontname
+% in reading a PDF file, and if you are the owner of the actual font
+% named as the fontname then you can use such locale-specific fonts by
+% adding entry as follows:
+%
+% But, recent PDF files do not require /Adobe-Identity, locale-specific
+% fonts. Thus, you may get worse for adding such entry.
+%
+%(HGŠÛºÞ¼¯¸M-PRO) (hgrsmp.ttf) /Identity ;
+%(HG³ž²‘‘Ì-PRO) (hgrskp.ttf) /Identity ;
+%
+% As another choise, following one line acts "a fallback font" for such
+% as locale-specific fonts:
+%
+%/Adobe-Identity (hgrskp.ttf) /Identity ;
diff --git a/Master/xemtex/gslib/Fontmap b/Master/xemtex/gslib/Fontmap
new file mode 100644
index 00000000000..a12c08fa81b
--- /dev/null
+++ b/Master/xemtex/gslib/Fontmap
@@ -0,0 +1,3 @@
+%!
+% See Fontmap.GS for the syntax of real Fontmap files.
+(Fontmap.GS) .runlibfile
diff --git a/Master/xemtex/gslib/Fontmap.ATB b/Master/xemtex/gslib/Fontmap.ATB
new file mode 100644
index 00000000000..517f45240a1
--- /dev/null
+++ b/Master/xemtex/gslib/Fontmap.ATB
@@ -0,0 +1,169 @@
+% Copyright (C) 1994 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: Fontmap.ATB,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Fontmap.ATB - an alternative Fontmap for Ghostscript,
+% suitable for use with the 65 Adobe Type Manager fonts
+% supplied with Adobe Type Basics.
+
+% Before you use ATM fonts with Ghostscript, please read carefully
+% the license that accompanies the ATM fonts; neither Aladdin Enterprises
+% nor any other distributor of Ghostscript takes any responsibility for
+% any possible violations of such licenses.
+
+% The 65 Adobe Type Basics ATM fonts
+
+%disk 1
+/Bookman-Light (bkl_____.pfb) ;
+/Bookman-Demi (bkd_____.pfb) ;
+/Bookman-DemiItalic (bkdi____.pfb) ;
+/Bookman-LightItalic (bkli____.pfb) ;
+/Courier (com_____.pfb) ;
+/Courier-Bold (cob_____.pfb) ;
+/Courier-BoldOblique (cobo____.pfb) ;
+/Courier-Oblique (coo_____.pfb) ;
+/Helvetica (hv______.pfb) ;
+/Helvetica-Bold (hvb_____.pfb) ;
+/Helvetica-BoldOblique (hvbo____.pfb) ;
+/Helvetica-Oblique (hvo_____.pfb) ;
+/Helvetica-Narrow (hvn_____.pfb) ;
+/Helvetica-Narrow-Bold (hvnb____.pfb) ;
+/Helvetica-Narrow-BoldOblique (hvnbo___.pfb) ;
+/Helvetica-Narrow-Oblique (hvno____.pfb) ;
+/Palatino-Roman (por_____.pfb) ;
+/Palatino-Bold (pob_____.pfb) ;
+/Palatino-BoldItalic (pobi____.pfb) ;
+/Palatino-Italic (poi_____.pfb) ;
+/Symbol (sy______.pfb) ;
+/Times-Roman (tir_____.pfb) ;
+/Times-Bold (tib_____.pfb) ;
+/Times-BoldItalic (tibi____.pfb) ;
+/Times-Italic (tii_____.pfb) ;
+
+% disk2
+/AGaramond-Regular (gdrg____.pfb) ;
+/AGaramond-Italic (gdi_____.pfb) ;
+/AGaramond-Bold (gdb_____.pfb) ;
+/AGaramond-BoldItalic (gdbi____.pfb) ;
+/Americana (am______.pfb) ;
+/Americana-ExtraBold (ameb____.pfb) ;
+/AvantGarde-Book (agw_____.pfb) ;
+/AvantGarde-Demi (agd_____.pfb) ;
+/AvantGarde-DemiOblique (agdo____.pfb) ;
+/AvantGarde-BookOblique (agwo____.pfb) ;
+/Carta (cr______.pfb) ;
+/Kaufmann (kf______.pfb) ;
+/Lithos-Regular (lorg____.pfb) ;
+/Lithos-Black (lobl____.pfb) ;
+/NewCenturySchlbk-Roman (ncr_____.pfb) ;
+/NewCenturySchlbk-Bold (ncb_____.pfb) ;
+/NewCenturySchlbk-BoldItalic (ncbi____.pfb) ;
+/NewCenturySchlbk-Italic (nci_____.pfb) ;
+/Parisian (pn______.pfb) ;
+/ParkAvenue (pa______.pfb) ;
+/Tekton (tkrg____.pfb) ;
+/Tekton-Bold (tkb_____.pfb) ;
+/Trajan-Bold (tjb_____.pfb) ;
+/ZapfChancery-MediumItalic (zcmi____.pfb) ;
+/ZapfDingbats (zd______.pfb) ;
+
+%disk 3
+/ACaslon-Regular (awrg____.pfb) ;
+/ACaslon-Semibold (awsb____.pfb) ;
+/ACaslon-SemiboldItalic (awsbi___.pfb) ;
+/ACaslon-Italic (awi_____.pfb) ;
+/Barmeno-Regular (bfrg____.pfb) ;
+/Barmeno-Medium (bfm_____.pfb) ;
+/Barmeno-Bold (bfb_____.pfb) ;
+/Barmeno-ExtraBold (bfeb____.pfb) ;
+/Blackoak (bo______.pfb) ;
+/Formata-Regular (fmrg____.pfb) ;
+/Formata-Medium (fmm_____.pfb) ;
+/Formata-MediumItalic (fmmi____.pfb) ;
+/Formata-Italic (fmi_____.pfb) ;
+/Poetica-SuppOrnaments (pvor____.pfb) ;
+/WoodtypeOrnaments-Two (woor2___.pfb) ;
+
+
+% Fonts converted from bitmaps.
+
+/Charter-Roman (bchr.gsf) ;
+/Charter-Italic (bchri.gsf) ;
+/Charter-Bold (bchb.gsf) ;
+/Charter-BoldItalic (bchbi.gsf) ;
+
+/ZapfChancery (zcr.gsf) ;
+/ZapfChancery-Oblique (zcro.gsf) ;
+/ZapfChancery-Bold (zcb.gsf) ;
+
+% Fonts from the X11R5 distribution.
+
+/Utopia-Regular (putr.gsf) ;
+/Utopia-Italic (putri.gsf) ;
+/Utopia-Bold (putb.gsf) ;
+/Utopia-BoldItalic (putbi.gsf) ;
+
+% Shareware fonts. See FONTMAP.GS for the copyright statements.
+
+/Shareware-Cyrillic-Regular (fcyr.gsf) ;
+/Shareware-Cyrillic-Italic (fcyri.gsf) ;
+% Aliases
+/Cyrillic /Cyrillic-Regular ;
+/Cyrillic-Regular /Shareware-Cyrillic-Regular ;
+/Cyrillic-Italic /Shareware-Cyrillic-Italic ;
+
+/Calligraphic-Hiragana (fhirw.gsf) ;
+/Calligraphic-Katakana (fkarw.gsf) ;
+
+% Fonts converted from Hershey outlines.
+
+/Hershey-Gothic-English (hrge_r.gsf) 4290000 ;
+/Hershey-Gothic-English-Bold (hrge_rb.gsf) 4290030 ;
+/Hershey-Gothic-English-Oblique (hrge_ro.gsf) 4290010 ;
+
+/Hershey-Gothic-German (hrgr_r.gsf) 4291000 ;
+/Hershey-Gothic-German-Bold (hrgr_rb.gsf) 4291030 ;
+/Hershey-Gothic-German-Oblique (hrgr_ro.gsf) 4291010 ;
+
+/Hershey-Gothic-Italian (hrit_r.gsf) 4292000 ;
+/Hershey-Gothic-Italian-Bold (hrit_rb.gsf) 4292030 ;
+/Hershey-Gothic-Italian-Oblique (hrit_ro.gsf) 4292010 ;
+
+/Hershey-Greek-Complex (hrgk_c.gsf) 4293200 ;
+/Hershey-Greek-Simplex (hrgk_s.gsf) 4293100 ;
+
+/Hershey-Plain (hrpl_r.gsf) 4294000 ;
+/Hershey-Plain-Bold (hrpl_rb.gsf) 4294030 ;
+/Hershey-Plain-Oblique (hrpl_ro.gsf) 4294010 ;
+/Hershey-Plain-Simplex (hrpl_s.gsf) 4294100 ;
+/Hershey-Plain-Simplex-Bold (hrpl_sb.gsf) 4294130 ;
+/Hershey-Plain-Simplex-Bold-Oblique (hrpl_sbo.gsf) 4294140 ;
+/Hershey-Plain-Simplex-Oblique (hrpl_so.gsf) 4294110 ;
+/Hershey-Plain-Triplex (hrpl_t.gsf) 4294300 ;
+/Hershey-Plain-Triplex-Italic (hrpl_ti.gsf) 4294320 ;
+/Hershey-Plain-Triplex-Bold (hrpl_tb.gsf) 4294330 ;
+/Hershey-Plain-Triplex-Bold-Italic (hrpl_tbi.gsf) 4294350 ;
+
+/Hershey-Script-Complex (hrsc_c.gsf) 4295200 ;
+/Hershey-Script-Complex-Bold (hrsc_cb.gsf) 4295230 ;
+/Hershey-Script-Complex-Oblique (hrsc_co.gsf) 4295210 ;
+/Hershey-Script-Simplex (hrsc_s.gsf) 4295100 ;
+/Hershey-Script-Simplex-Bold (hrsc_sb.gsf) 4295130 ;
+/Hershey-Script-Simplex-Oblique (hrsc_so.gsf) 4295110 ;
+
+% This font, and only this font among the Hershey fonts, uses
+% the SymbolEncoding.
+/Hershey-Symbol (hrsy_r.gsf) 4296000 ;
diff --git a/Master/xemtex/gslib/Fontmap.ATM b/Master/xemtex/gslib/Fontmap.ATM
new file mode 100644
index 00000000000..5ddf9973040
--- /dev/null
+++ b/Master/xemtex/gslib/Fontmap.ATM
@@ -0,0 +1,186 @@
+% Copyright (C) 1990, 1992, 1994, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: Fontmap.ATM,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Fontmap.ATM - an alternative Fontmap for Ghostscript,
+% suitable for use with Adobe Type Manager fonts.
+
+% Before you use ATM fonts with Ghostscript, please read carefully
+% the license that accompanies the ATM fonts; neither Aladdin Enterprises
+% nor any other distributor of Ghostscript takes any responsibility for
+% any possible violations of such licenses.
+
+%
+%
+% Fonts contributed by:
+% URW++ Design and Development Incorporated
+% Poppenbuetteler Bogen 29A
+% D-22399 Hamburg
+% Germany
+% tel. +49 (40) 60 60 50
+% fax +49 (40) 60 60 51 11
+% http://www.urwpp.de
+% for distribution under the GNU License and Aladdin Free Public License.
+% See the notice at the head of this Fontmap file for licensing terms.
+% Each of these fonts is individually covered by the license:
+% for licensing purposes, they are not "part of" any larger entity.
+% The following notice applies to these fonts:
+%
+% Copyright URW Software, Copyright 1994 by URW.
+%
+
+% Actual fonts
+
+/URWBookmanL-DemiBold (b018015l.pfb) ;
+/URWBookmanL-DemiBoldItal (b018035l.pfb) ;
+/URWBookmanL-Ligh (b018012l.pfb) ;
+/URWBookmanL-LighItal (b018032l.pfb) ;
+
+/NimbusMonL-Regu (n022003l.pfb) ;
+/NimbusMonL-ReguObli (n022023l.pfb) ;
+/NimbusMonL-Bold (n022004l.pfb) ;
+/NimbusMonL-BoldObli (n022024l.pfb) ;
+
+/URWGothicL-Book (a010013l.pfb) ;
+/URWGothicL-BookObli (a010033l.pfb) ;
+/URWGothicL-Demi (a010015l.pfb) ;
+/URWGothicL-DemiObli (a010035l.pfb) ;
+
+/NimbusSanL-Regu (n019003l.pfb) ;
+/NimbusSanL-ReguItal (n019023l.pfb) ;
+/NimbusSanL-Bold (n019004l.pfb) ;
+/NimbusSanL-BoldItal (n019024l.pfb) ;
+
+/NimbusSanL-ReguCond (n019043l.pfb) ;
+/NimbusSanL-ReguCondItal (n019063l.pfb) ;
+/NimbusSanL-BoldCond (n019044l.pfb) ;
+/NimbusSanL-BoldCondItal (n019064l.pfb) ;
+
+/URWPalladioL-Roma (p052003l.pfb) ;
+/URWPalladioL-Ital (p052023l.pfb) ;
+/URWPalladioL-Bold (p052004l.pfb) ;
+/URWPalladioL-BoldItal (p052024l.pfb) ;
+
+/CenturySchL-Roma (c059013l.pfb) ;
+/CenturySchL-Ital (c059033l.pfb) ;
+/CenturySchL-Bold (c059016l.pfb) ;
+/CenturySchL-BoldItal (c059036l.pfb) ;
+
+/NimbusRomNo9L-Regu (n021003l.pfb) ;
+/NimbusRomNo9L-ReguItal (n021023l.pfb) ;
+/NimbusRomNo9L-Medi (n021004l.pfb) ;
+/NimbusRomNo9L-MediItal (n021024l.pfb) ;
+
+/StandardSymL (s050000l.pfb) ;
+
+/URWChanceryL-MediItal (z003034l.pfb) ;
+
+/Dingbats (d050000l.pfb) ;
+
+% Aliases
+
+/Bookman-Demi /URWBookmanL-DemiBold ;
+/Bookman-DemiItalic /URWBookmanL-DemiBoldItal ;
+/Bookman-Light /URWBookmanL-Ligh ;
+/Bookman-LightItalic /URWBookmanL-LighItal ;
+
+/Courier /NimbusMonL-Regu ;
+/Courier-Oblique /NimbusMonL-ReguObli ;
+/Courier-Bold /NimbusMonL-Bold ;
+/Courier-BoldOblique /NimbusMonL-BoldObli ;
+
+/AvantGarde-Book /URWGothicL-Book ;
+/AvantGarde-BookOblique /URWGothicL-BookObli ;
+/AvantGarde-Demi /URWGothicL-Demi ;
+/AvantGarde-DemiOblique /URWGothicL-DemiObli ;
+
+/Helvetica /NimbusSanL-Regu ;
+/Helvetica-Oblique /NimbusSanL-ReguItal ;
+/Helvetica-Bold /NimbusSanL-Bold ;
+/Helvetica-BoldOblique /NimbusSanL-BoldItal ;
+
+/Helvetica-Narrow /NimbusSanL-ReguCond ;
+/Helvetica-Narrow-Oblique /NimbusSanL-ReguCondItal ;
+/Helvetica-Narrow-Bold /NimbusSanL-BoldCond ;
+/Helvetica-Narrow-BoldOblique /NimbusSanL-BoldCondItal ;
+
+/Palatino-Roman /URWPalladioL-Roma ;
+/Palatino-Italic /URWPalladioL-Ital ;
+/Palatino-Bold /URWPalladioL-Bold ;
+/Palatino-BoldItalic /URWPalladioL-BoldItal ;
+
+/NewCenturySchlbk-Roman /CenturySchL-Roma ;
+/NewCenturySchlbk-Italic /CenturySchL-Ital ;
+/NewCenturySchlbk-Bold /CenturySchL-Bold ;
+/NewCenturySchlbk-BoldItalic /CenturySchL-BoldItal ;
+
+/Times-Roman /NimbusRomNo9L-Regu ;
+/Times-Italic /NimbusRomNo9L-ReguItal ;
+/Times-Bold /NimbusRomNo9L-Medi ;
+/Times-BoldItalic /NimbusRomNo9L-MediItal ;
+
+/Symbol /StandardSymL ;
+
+/ZapfChancery-MediumItalic /URWChanceryL-MediItal ;
+
+/ZapfDingbats /Dingbats ;
+
+
+% ATM fonts.
+
+/Courier (com_____.pfb) ;
+/Courier-Oblique (coo_____.pfb) ;
+/Courier-Bold (cob_____.pfb) ;
+/Courier-BoldOblique (cobo____.pfb) ;
+
+/Helvetica (hv______.pfb) ;
+/Helvetica-Oblique (hvo_____.pfb) ;
+/Helvetica-Bold (hvb_____.pfb) ;
+/Helvetica-BoldOblique (hvbo____.pfb) ;
+
+/Symbol (sy______.pfb) ;
+
+/Times-Roman (tir_____.pfb) ;
+/Times-Italic (tii_____.pfb) ;
+/Times-Bold (tib_____.pfb) ;
+/Times-BoldItalic (tibi____.pfb) ;
+
+
+% More fonts from Adobe Type Manager for MS Windows.
+
+/TektonMM (zjrg____.pfb) ;
+
+/Boulevard (qtrg____.pfb) ;
+/Anna (iarg____.pfb) ;
+
+/PopplLaudatio-Regular (pyrg____.pfb) ;
+/PopplLaudatio-Medium (pym_____.pfb) ;
+/PopplLaudatio-Italic (pyi_____.pfb) ;
+/PopplLaudatio-MediumItalic (pymi____.pfb) ;
+
+/Boton-Regular (tnr_____.pfb) ;
+/Boton-Medium (tnm_____.pfb) ;
+/Boton-Italic (tni_____.pfb) ;
+/Boton-MediumItalic (tnmi____.pfb) ;
+
+/BaskervilleBE-Regular (virg____.pfb) ;
+/BaskervilleBE-Medium (vim_____.pfb) ;
+/BaskervilleBE-Italic (vii_____.pfb) ;
+/BaskervilleBE-MediumItalic (vimi____.pfb) ;
+
+/Giddyup (wg______.pfb) ;
+/Giddyup-Thangs (wgtha___.pfb) ;
+
diff --git a/Master/xemtex/gslib/Fontmap.GS b/Master/xemtex/gslib/Fontmap.GS
new file mode 100644
index 00000000000..eaebd9adc83
--- /dev/null
+++ b/Master/xemtex/gslib/Fontmap.GS
@@ -0,0 +1,404 @@
+% Copyright (C) 1996, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: Fontmap.GS,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Fontmap - standard font catalog for Ghostscript.
+
+% ----------------------------------------------------------------
+
+% This file is a catalog of fonts known to Ghostscript. Any font
+% that is to be loaded automatically when named must be in this catalog,
+% except for fonts that Ghostscript finds automatically in directories
+% named in the GS_FONTPATH environment variable.
+
+% Each font has an entry consisting of three items:
+%
+% - The name by which the font is known inside Ghostscript
+% (a Ghostscript name preceded by a `/', or a string enclosed
+% in parentheses). This is used to find the file from which
+% a font of a given name should be loaded.
+%
+% - Information depending on whether this is a real font or a
+% font alias:
+%
+% - For real fonts, the name of the Ghostscript font
+% file (a Ghostscript string, enclosed in parentheses).
+% The filename should include the extension, which (by
+% convention) is `.gsf'. `.pfa' and `.pfb' files are
+% also usable as fonts for Ghostscript.
+%
+% - For font aliases, the name of the font which should
+% be used when this one is requested, preceded by a
+% `/'. See the entry for Charter below for an example.
+% Note that an alias name cannot be enclosed in parentheses.
+%
+% - At least one space or tab, and a terminating semicolon.
+
+% Because of limitations in the MS-DOS environment, Ghostscript font
+% file names must be no more than 8 characters long, must consist only
+% of LOWER CASE letters, digits, and underscores, and must start with a
+% letter. Font names, on the other hand, need only obey the syntax of
+% names in the Ghostscript language, which is much more liberal.
+
+% The following table is actually a Ghostscript data structure.
+% If you add new entries, be sure to copy the punctuation accurately;
+% in particular, you must leave at least one space or tab between each
+% field in the entry. Also, please read fonts.doc for important information
+% about font names.
+
+% Note that .pfa and .pfb fonts are compatible with Adobe Type Manager
+% and other programs that don't include full PostScript interpreters,
+% as well as with PostScript interpreters; .gsf fonts are compatible with
+% PostScript interpreters, but not with ATM or similar programs.
+
+%
+%
+% Fonts contributed by:
+% URW++ Design and Development Incorporated
+% Poppenbuetteler Bogen 29A
+% D-22399 Hamburg
+% Germany
+% tel. +49 (40) 60 60 50
+% fax +49 (40) 60 60 51 11
+% http://www.urwpp.de
+% for distribution under the GNU License and Aladdin Free Public License.
+% See the notice at the head of this Fontmap file for licensing terms.
+% Each of these fonts is individually covered by the license:
+% for licensing purposes, they are not "part of" any larger entity.
+% The following notice applies to these fonts:
+%
+% Copyright URW Software, Copyright 1994 by URW.
+%
+
+% Actual fonts
+
+/URWBookmanL-DemiBold (b018015l.pfb) ;
+/URWBookmanL-DemiBoldItal (b018035l.pfb) ;
+/URWBookmanL-Ligh (b018012l.pfb) ;
+/URWBookmanL-LighItal (b018032l.pfb) ;
+
+/NimbusMonL-Regu (n022003l.pfb) ;
+/NimbusMonL-ReguObli (n022023l.pfb) ;
+/NimbusMonL-Bold (n022004l.pfb) ;
+/NimbusMonL-BoldObli (n022024l.pfb) ;
+
+/URWGothicL-Book (a010013l.pfb) ;
+/URWGothicL-BookObli (a010033l.pfb) ;
+/URWGothicL-Demi (a010015l.pfb) ;
+/URWGothicL-DemiObli (a010035l.pfb) ;
+
+/NimbusSanL-Regu (n019003l.pfb) ;
+/NimbusSanL-ReguItal (n019023l.pfb) ;
+/NimbusSanL-Bold (n019004l.pfb) ;
+/NimbusSanL-BoldItal (n019024l.pfb) ;
+
+/NimbusSanL-ReguCond (n019043l.pfb) ;
+/NimbusSanL-ReguCondItal (n019063l.pfb) ;
+/NimbusSanL-BoldCond (n019044l.pfb) ;
+/NimbusSanL-BoldCondItal (n019064l.pfb) ;
+
+/URWPalladioL-Roma (p052003l.pfb) ;
+/URWPalladioL-Ital (p052023l.pfb) ;
+/URWPalladioL-Bold (p052004l.pfb) ;
+/URWPalladioL-BoldItal (p052024l.pfb) ;
+
+/CenturySchL-Roma (c059013l.pfb) ;
+/CenturySchL-Ital (c059033l.pfb) ;
+/CenturySchL-Bold (c059016l.pfb) ;
+/CenturySchL-BoldItal (c059036l.pfb) ;
+
+/NimbusRomNo9L-Regu (n021003l.pfb) ;
+/NimbusRomNo9L-ReguItal (n021023l.pfb) ;
+/NimbusRomNo9L-Medi (n021004l.pfb) ;
+/NimbusRomNo9L-MediItal (n021024l.pfb) ;
+
+/StandardSymL (s050000l.pfb) ;
+
+/URWChanceryL-MediItal (z003034l.pfb) ;
+
+/Dingbats (d050000l.pfb) ;
+
+% Aliases
+
+/Bookman-Demi /URWBookmanL-DemiBold ;
+/Bookman-DemiItalic /URWBookmanL-DemiBoldItal ;
+/Bookman-Light /URWBookmanL-Ligh ;
+/Bookman-LightItalic /URWBookmanL-LighItal ;
+
+/Courier /NimbusMonL-Regu ;
+/Courier-Oblique /NimbusMonL-ReguObli ;
+/Courier-Bold /NimbusMonL-Bold ;
+/Courier-BoldOblique /NimbusMonL-BoldObli ;
+
+/AvantGarde-Book /URWGothicL-Book ;
+/AvantGarde-BookOblique /URWGothicL-BookObli ;
+/AvantGarde-Demi /URWGothicL-Demi ;
+/AvantGarde-DemiOblique /URWGothicL-DemiObli ;
+
+/Helvetica /NimbusSanL-Regu ;
+/Helvetica-Oblique /NimbusSanL-ReguItal ;
+/Helvetica-Bold /NimbusSanL-Bold ;
+/Helvetica-BoldOblique /NimbusSanL-BoldItal ;
+
+/Helvetica-Narrow /NimbusSanL-ReguCond ;
+/Helvetica-Narrow-Oblique /NimbusSanL-ReguCondItal ;
+/Helvetica-Narrow-Bold /NimbusSanL-BoldCond ;
+/Helvetica-Narrow-BoldOblique /NimbusSanL-BoldCondItal ;
+
+/Palatino-Roman /URWPalladioL-Roma ;
+/Palatino-Italic /URWPalladioL-Ital ;
+/Palatino-Bold /URWPalladioL-Bold ;
+/Palatino-BoldItalic /URWPalladioL-BoldItal ;
+
+/NewCenturySchlbk-Roman /CenturySchL-Roma ;
+/NewCenturySchlbk-Italic /CenturySchL-Ital ;
+/NewCenturySchlbk-Bold /CenturySchL-Bold ;
+/NewCenturySchlbk-BoldItalic /CenturySchL-BoldItal ;
+
+/Times-Roman /NimbusRomNo9L-Regu ;
+/Times-Italic /NimbusRomNo9L-ReguItal ;
+/Times-Bold /NimbusRomNo9L-Medi ;
+/Times-BoldItalic /NimbusRomNo9L-MediItal ;
+
+/Symbol /StandardSymL ;
+
+/ZapfChancery-MediumItalic /URWChanceryL-MediItal ;
+
+/ZapfDingbats /Dingbats ;
+
+%
+%
+% Type 1 fonts contributed to the X11R5 distribution.
+%
+
+% The following notice accompanied the Charter fonts.
+%
+% (c) Copyright 1989-1992, Bitstream Inc., Cambridge, MA.
+%
+% You are hereby granted permission under all Bitstream propriety rights
+% to use, copy, modify, sublicense, sell, and redistribute the 4 Bitstream
+% Charter (r) Type 1 outline fonts and the 4 Courier Type 1 outline fonts
+% for any purpose and without restriction; provided, that this notice is
+% left intact on all copies of such fonts and that Bitstream's trademark
+% is acknowledged as shown below on all unmodified copies of the 4 Charter
+% Type 1 fonts.
+%
+% BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
+
+/CharterBT-Roman (bchr.pfa) ;
+/CharterBT-Italic (bchri.pfa) ;
+/CharterBT-Bold (bchb.pfa) ;
+/CharterBT-BoldItalic (bchbi.pfa) ;
+
+% Aliases
+
+/Charter-Roman /CharterBT-Roman ;
+/Charter-Italic /CharterBT-Italic ;
+/Charter-Bold /CharterBT-Bold ;
+/Charter-BoldItalic /CharterBT-BoldItalic ;
+
+% The following notice accompanied the Utopia font:
+%
+% Permission to use, reproduce, display and distribute the listed
+% typefaces is hereby granted, provided that the Adobe Copyright notice
+% appears in all whole and partial copies of the software and that the
+% following trademark symbol and attribution appear in all unmodified
+% copies of the software:
+%
+% Copyright (c) 1989 Adobe Systems Incorporated
+% Utopia (R)
+% Utopia is a registered trademark of Adobe Systems Incorporated
+%
+% The Adobe typefaces (Type 1 font program, bitmaps and Adobe Font
+% Metric files) donated are:
+%
+% Utopia Regular
+% Utopia Italic
+% Utopia Bold
+% Utopia Bold Italic
+
+/Utopia-Regular (putr.pfa) ;
+/Utopia-Italic (putri.pfa) ;
+/Utopia-Bold (putb.pfa) ;
+/Utopia-BoldItalic (putbi.pfa) ;
+
+%
+%
+% Fonts contributed by URW GmbH for distribution under the GNU License.
+% The following notice accompanied these fonts:
+%
+% U004006T URW Grotesk 2031 Bold PostScript Type 1 Font Program
+% U003043T URW Antiqua 2051 Regular Condensed PostScript Type 1 Font Program
+%
+% Copyright (c) 1992 URW GmbH, Hamburg, Germany
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; wihtout even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+% See the GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 U.S.A.
+%
+% Address:
+% URW GmbH
+% PC Support
+% Harksheider Strasse 102
+% 2000 Hamburg 65
+% Germany
+% Phone: +49 40 60 60 50 (Reception)
+% Phone: +49 40 60 60 52 30 (PC Support)
+% Fax : +49 40 60 60 52 52
+%
+
+/URWAntiquaT-RegularCondensed (u003043t.gsf) ;
+/URWGroteskT-Bold (u004006t.gsf) ;
+
+%
+%
+% Shareware Kana fonts. These are subject to the following notice:
+%
+% These copyrighted fonts were developed by Kevin Hartig. Permission is
+% granted to freely distribute them in entirety along with this statement.
+% This is shareware. If you decide to use these fonts please contribute
+% $10 US to help support further freeware and shareware software development.
+% Questions and comments may be sent to:
+%
+% hartig@fsl.noaa.gov
+% khartig@nyx.cs.du.edu
+%
+% Kevin Hartig
+% 1126 Collyer Street
+% Longmont, CO 80501 USA
+%
+% copyright 1993.
+
+% Hiragana and Katakana fonts. The character names are inappropriate,
+% and the encoding is probably not related to any known standard.
+
+/Calligraphic-Hiragana (fhirw.gsf) ;
+/Calligraphic-Katakana (fkarw.gsf) ;
+
+%
+%
+% Public-domain fonts. These have no copyright, and are of unknown quality.
+
+% Cyrillic fonts. The character names are inappropriate,
+% and the encoding is probably not related to any known standard.
+
+/Shareware-Cyrillic-Regular (fcyr.gsf) ;
+/Shareware-Cyrillic-Italic (fcyri.gsf) ;
+
+% Aliases
+/Cyrillic /Cyrillic-Regular ;
+/Cyrillic-Regular /Shareware-Cyrillic-Regular ;
+/Cyrillic-Italic /Shareware-Cyrillic-Italic ;
+
+%
+%
+% Fonts converted from Hershey outlines. These are constructed and
+% maintained manually. These are also in the public domain.
+%
+% The suggested UniqueID's and filenames are constructed differently for
+% these than for the ones above, because of the strange way that the Hershey
+% fonts were constructed. The scheme for these looks like:
+%
+% 42TTXY0
+%
+% TT = typeface, X = ``class'', Y = variation
+%
+% The typeface names and numbers are listed in fonts.mak.
+%
+% class:
+% 0 = normal = r
+% 1 = simplex = s
+% 2 = complex = c
+% 3 = triplex = t
+% 4 = duplex = d
+%
+% variation:
+% 0 = normal (omitted)
+% 1 = oblique = o
+% 2 = italic = i
+% 3 = bold = b
+% 4 = bold oblique = bo
+% 5 = bold italic = bi
+%
+
+% Fonts created by Thomas Wolff <wolff@inf.fu-berlin.de>, by adding
+% accents, accented characters, and various other non-alphabetics
+% to the original Hershey fonts. These are "freeware", not to be sold.
+
+/Hershey-Gothic-English (hrger.pfa) ; % 5066533
+/Hershey-Gothic-German (hrgrr.pfa) ;
+/Hershey-Gothic-Italian (hritr.pfa) ;
+
+/Hershey-Plain-Duplex (hrpld.pfa) ;
+/Hershey-Plain-Duplex-Italic (hrpldi.pfa) ;
+/Hershey-Plain-Triplex (hrplt.pfa) ;
+/Hershey-Plain-Triplex-Italic (hrplti.pfa) ;
+
+/Hershey-Script-Complex (hrscc.pfa) ;
+/Hershey-Script-Simplex (hrscs.pfa) ; % 5066541
+
+% Fonts created algorithmically from the above.
+
+/Hershey-Gothic-English-Bold (hrgerb.gsf) ; % 5066542
+/Hershey-Gothic-English-Oblique (hrgero.gsf) ;
+/Hershey-Gothic-English-SemiBold (hrgerd.gsf) ;
+/Hershey-Gothic-German-Bold (hrgrrb.gsf) ;
+/Hershey-Gothic-German-Oblique (hrgrro.gsf) ;
+/Hershey-Gothic-Italian-Bold (hritrb.gsf) ;
+/Hershey-Gothic-Italian-Oblique (hritro.gsf) ;
+
+/Hershey-Plain-Duplex-Bold (hrpldb.gsf) ;
+/Hershey-Plain-Duplex-Bold-Italic (hrpldbi.gsf) ;
+/Hershey-Plain-Triplex-Bold (hrpltb.gsf) ;
+/Hershey-Plain-Triplex-Bold-Italic (hrpltbi.gsf) ;
+
+/Hershey-Script-Complex-Bold (hrsccb.gsf) ;
+/Hershey-Script-Complex-Oblique (hrscco.gsf) ;
+/Hershey-Script-Simplex-Bold (hrscsb.gsf) ;
+/Hershey-Script-Simplex-Oblique (hrscso.gsf) ; % 5066556
+
+% Fonts consisting only of characters from the original Hershey
+% distribution. These are Type 3 fonts.
+
+/Hershey-Greek-Complex (hrgkc.gsf) ; % 5066557
+/Hershey-Greek-Simplex (hrgks.gsf) ;
+
+/Hershey-Plain (hrplr.gsf) ;
+/Hershey-Plain-Simplex (hrpls.gsf) ; % 5066560
+
+% Fonts created algorithmically from the above.
+
+/Hershey-Plain-Bold (hrplrb.gsf) ; % 5066561
+/Hershey-Plain-Bold-Oblique (hrplrbo.gsf) ;
+/Hershey-Plain-Oblique (hrplro.gsf) ;
+/Hershey-Plain-Simplex-Bold (hrplsb.gsf) ;
+/Hershey-Plain-Simplex-Bold-Oblique (hrplsbo.gsf) ;
+/Hershey-Plain-Simplex-Oblique (hrplso.gsf) ; % 5066566
+
+% This font, and only this font among the Hershey fonts, uses
+% the SymbolEncoding.
+
+/Hershey-Symbol (hrsyr.gsf) ; % 5066567
diff --git a/Master/xemtex/gslib/Fontmap.OS2 b/Master/xemtex/gslib/Fontmap.OS2
new file mode 100644
index 00000000000..bab846c7408
--- /dev/null
+++ b/Master/xemtex/gslib/Fontmap.OS2
@@ -0,0 +1,215 @@
+% Copyright (C) 1990, 1992, 1993, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: Fontmap.OS2,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% fontmap.os2 aka Fontmap.OS2 - OS/2 font catalog for Ghostscript.
+
+% ----------------------------------------------------------------
+
+% This file is a catalog of fonts known to Ghostscript. Any font
+% that is to be loaded automatically when named must be in this catalog,
+% except for fonts that Ghostscript finds automatically in directories
+% named in the GS_FONTPATH environment variable.
+
+% Each font has an entry consisting of three items:
+%
+% - The name by which the font is known inside Ghostscript
+% (a Ghostscript name preceded by a `/', or a string enclosed
+% in parentheses). This is used to find the file from which
+% a font of a given name should be loaded.
+%
+% - Information depending on whether this is a real font or a
+% font alias:
+%
+% - For real fonts, the name of the Ghostscript font
+% file (a Ghostscript string, enclosed in parentheses).
+% The filename should include the extension, which (by
+% convention) is `.gsf'. `.pfa' and `.pfb' files are
+% also usable as fonts for Ghostscript.
+%
+% - For font aliases, the name of the font which should
+% be used when this one is requested, preceded by a
+% `/'. See the entry for Charter below for an example.
+%
+% - A terminating semicolon.
+
+% Because of limitations in the MS-DOS environment, Ghostscript font
+% file names must be no more than 8 characters long, must consist only
+% of LOWER CASE letters, digits, and underscores, and must start with a
+% letter. Font names, on the other hand, need only obey the syntax of
+% names in the Ghostscript language, which is much more liberal.
+
+% Most of the Ghostscript fonts were created automatically from freely
+% available bitmaps. There is a makefile (fonts.mak) that specifies
+% how this conversion was done. fonts.mak also specifies, for each such
+% converted font, its uniqueID (an integer used to identify distinct fonts
+% within the Ghostscript font machinery), and its encoding (the mapping
+% from character codes in a string to character names). For more detailed
+% information, read fonts.mak.
+
+% The following table is actually a Ghostscript data structure.
+% If you add new entries, be sure to copy the punctuation accurately;
+% in particular, you must leave at least one space or tab between each
+% field in the entry. Also, please read fonts.doc for important information
+% about font names.
+
+
+%
+%
+% Fonts contributed by:
+% URW++ Design and Development Incorporated
+% Poppenbuetteler Bogen 29A
+% D-22399 Hamburg
+% Germany
+% tel. +49 (40) 60 60 50
+% fax +49 (40) 60 60 51 11
+% http://www.urwpp.de
+% for distribution under the GNU License and Aladdin Free Public License.
+% See the notice at the head of this Fontmap file for licensing terms.
+% Each of these fonts is individually covered by the license:
+% for licensing purposes, they are not "part of" any larger entity.
+% The following notice applies to these fonts:
+%
+% Copyright URW Software, Copyright 1994 by URW.
+%
+
+% Actual fonts
+
+/URWBookmanL-DemiBold (b018015l.pfb) ;
+/URWBookmanL-DemiBoldItal (b018035l.pfb) ;
+/URWBookmanL-Ligh (b018012l.pfb) ;
+/URWBookmanL-LighItal (b018032l.pfb) ;
+
+/NimbusMonL-Regu (n022003l.pfb) ;
+/NimbusMonL-ReguObli (n022023l.pfb) ;
+/NimbusMonL-Bold (n022004l.pfb) ;
+/NimbusMonL-BoldObli (n022024l.pfb) ;
+
+/URWGothicL-Book (a010013l.pfb) ;
+/URWGothicL-BookObli (a010033l.pfb) ;
+/URWGothicL-Demi (a010015l.pfb) ;
+/URWGothicL-DemiObli (a010035l.pfb) ;
+
+/NimbusSanL-Regu (n019003l.pfb) ;
+/NimbusSanL-ReguItal (n019023l.pfb) ;
+/NimbusSanL-Bold (n019004l.pfb) ;
+/NimbusSanL-BoldItal (n019024l.pfb) ;
+
+/NimbusSanL-ReguCond (n019043l.pfb) ;
+/NimbusSanL-ReguCondItal (n019063l.pfb) ;
+/NimbusSanL-BoldCond (n019044l.pfb) ;
+/NimbusSanL-BoldCondItal (n019064l.pfb) ;
+
+/URWPalladioL-Roma (p052003l.pfb) ;
+/URWPalladioL-Ital (p052023l.pfb) ;
+/URWPalladioL-Bold (p052004l.pfb) ;
+/URWPalladioL-BoldItal (p052024l.pfb) ;
+
+/CenturySchL-Roma (c059013l.pfb) ;
+/CenturySchL-Ital (c059033l.pfb) ;
+/CenturySchL-Bold (c059016l.pfb) ;
+/CenturySchL-BoldItal (c059036l.pfb) ;
+
+/NimbusRomNo9L-Regu (n021003l.pfb) ;
+/NimbusRomNo9L-ReguItal (n021023l.pfb) ;
+/NimbusRomNo9L-Medi (n021004l.pfb) ;
+/NimbusRomNo9L-MediItal (n021024l.pfb) ;
+
+/StandardSymL (s050000l.pfb) ;
+
+/URWChanceryL-MediItal (z003034l.pfb) ;
+
+/Dingbats (d050000l.pfb) ;
+
+% Aliases
+
+/Bookman-Demi /URWBookmanL-DemiBold ;
+/Bookman-DemiItalic /URWBookmanL-DemiBoldItal ;
+/Bookman-Light /URWBookmanL-Ligh ;
+/Bookman-LightItalic /URWBookmanL-LighItal ;
+
+/Courier /NimbusMonL-Regu ;
+/Courier-Oblique /NimbusMonL-ReguObli ;
+/Courier-Bold /NimbusMonL-Bold ;
+/Courier-BoldOblique /NimbusMonL-BoldObli ;
+
+/AvantGarde-Book /URWGothicL-Book ;
+/AvantGarde-BookOblique /URWGothicL-BookObli ;
+/AvantGarde-Demi /URWGothicL-Demi ;
+/AvantGarde-DemiOblique /URWGothicL-DemiObli ;
+
+/Helvetica /NimbusSanL-Regu ;
+/Helvetica-Oblique /NimbusSanL-ReguItal ;
+/Helvetica-Bold /NimbusSanL-Bold ;
+/Helvetica-BoldOblique /NimbusSanL-BoldItal ;
+
+/Helvetica-Narrow /NimbusSanL-ReguCond ;
+/Helvetica-Narrow-Oblique /NimbusSanL-ReguCondItal ;
+/Helvetica-Narrow-Bold /NimbusSanL-BoldCond ;
+/Helvetica-Narrow-BoldOblique /NimbusSanL-BoldCondItal ;
+
+/Palatino-Roman /URWPalladioL-Roma ;
+/Palatino-Italic /URWPalladioL-Ital ;
+/Palatino-Bold /URWPalladioL-Bold ;
+/Palatino-BoldItalic /URWPalladioL-BoldItal ;
+
+/NewCenturySchlbk-Roman /CenturySchL-Roma ;
+/NewCenturySchlbk-Italic /CenturySchL-Ital ;
+/NewCenturySchlbk-Bold /CenturySchL-Bold ;
+/NewCenturySchlbk-BoldItalic /CenturySchL-BoldItal ;
+
+/Times-Roman /NimbusRomNo9L-Regu ;
+/Times-Italic /NimbusRomNo9L-ReguItal ;
+/Times-Bold /NimbusRomNo9L-Medi ;
+/Times-BoldItalic /NimbusRomNo9L-MediItal ;
+
+/Symbol /StandardSymL ;
+
+/ZapfChancery-MediumItalic /URWChanceryL-MediItal ;
+
+/ZapfDingbats /Dingbats ;
+
+
+%
+% ATM fonts that come with OS/2.
+
+/Courier (cour.pfb) ;
+/Courier-Oblique /Courier-Italic ;
+/Courier-Italic (couri.pfb) ;
+/Courier-Bold (courb.pfb) ;
+/Courier-BoldOblique /Courier-BoldItalic ;
+/Courier-BoldItalic (courbi.pfb) ;
+
+/Helvetica (helv.pfb) ;
+/Helvetica-Oblique /Helvetica-Italic ;
+/Helvetica-Italic (helvi.pfb) ;
+/Helvetica-Bold (helvb.pfb) ;
+/Helvetica-BoldOblique /Helvetica-BoldItalic ;
+/Helvetica-BoldItalic (helvbi.pfb) ;
+
+/Symbol /SymbolSet ;
+/SymbolSet (symb.pfb) ;
+
+/Times-Roman /TimesNewRoman ;
+/TimesNewRoman (tnr.pfb) ;
+/Times-Italic /TimesNewRoman-Italic ;
+/TimesNewRoman-Italic (tnri.pfb) ;
+/Times-Bold /TimesNewRoman-Bold ;
+/TimesNewRoman-Bold (tnrb.pfb) ;
+/Times-BoldItalic /TimesNewRoman-BoldItalic ;
+/TimesNewRoman-BoldItalic (tnrbi.pfb) ;
+
+
diff --git a/Master/xemtex/gslib/Fontmap.OSF b/Master/xemtex/gslib/Fontmap.OSF
new file mode 100644
index 00000000000..563f14a995f
--- /dev/null
+++ b/Master/xemtex/gslib/Fontmap.OSF
@@ -0,0 +1,163 @@
+% fontmap.osf aka Fontmap.OSF1 - Ghostscript fontmap for DEC OSF/1 systems.
+%
+% UNIX systems from Digital Equipment Corporation are bundled with a license
+% for Display PostScript, including certain fonts. Using their font outlines
+% (which on OSF/1 systems are found in /usr/lib/X11/fonts/Type1Adobe)
+% improves the visual quality of documents displayed on screen. To do that,
+% use this file as your Fontmap file and add /usr/lib/X11/fonts/Type1Adobe
+% as the second argument to GS_LIB_DEFAULT in your makefile
+% in your makefile.
+%
+% This file is Pete Kaiser's original Ultrix file as modified by
+% Bjorn S. Nilsson (nilsson@nbi.dk) first for Ultrix 4.3 and then
+% for OSF/1 version 1.3.
+%
+
+%/AvantGarde-Book (AvantGarde-Book) ;
+%/AvantGarde-BookOblique (AvantGarde-BookOblique);
+%/AvantGarde-Demi (AvantGarde-Demi) ;
+%/AvantGarde-DemiOblique (AvantGarde-DemiOblique);
+
+%/Courier-BoldItalic /Courier-BoldOblique ;
+%/Courier-Italic /Courier-Oblique ;
+
+%/Courier (Courier) ;
+%/Courier-Bold (Courier-Bold) ;
+%/Courier-BoldOblique (Courier-BoldOblique) ;
+%/Courier-Oblique (Courier-Oblique) ;
+
+%/Helvetica (Helvetica) ;
+%/Helvetica-Bold (Helvetica-Bold) ;
+%/Helvetica-BoldOblique (Helvetica-BoldOblique) ;
+%/Helvetica-Oblique (Helvetica-Oblique) ;
+
+%/LubalinGraph-Book (LubalinGraph-Book) ;
+%/LubalinGraph-BookOblique (LubalinGraph-BookOblique);
+%/LubalinGraph-Demi (LubalinGraph-Demi) ;
+%/LubalinGraph-DemiOblique (LubalinGraph-DemiOblique);
+
+%/NewCenturySchlbk-Bold (NewCenturySchlbk-Bold) ;
+%/NewCenturySchlbk-BoldItalic (NewCenturySchlbk-BoldItalic);
+%/NewCenturySchlbk-Italic (NewCenturySchlbk-Italic);
+%/NewCenturySchlbk-Roman (NewCenturySchlbk-Roman);
+
+%/Souvenir-Demi (Souvenir-Demi) ;
+%/Souvenir-DemiItalic (Souvenir-DemiItalic) ;
+%/Souvenir-Light (Souvenir-Light) ;
+%/Souvenir-LightItalic (Souvenir-LightItalic) ;
+
+%/Symbol (Symbol) ;
+
+%/Times-Bold (Times-Bold) ;
+%/Times-BoldItalic (Times-BoldItalic) ;
+%/Times-Italic (Times-Italic) ;
+%/Times-Roman (Times-Roman) ;
+
+%/ZapfDingbats (ZapfDingbats) ;
+
+/AvantGarde-Book (AvantGarde-Book.pfa) ;
+/AvantGarde-BookOblique (AvantGarde-BookOblique.pfa) ;
+/AvantGarde-Demi (AvantGarde-Demi.pfa) ;
+/AvantGarde-DemiOblique (AvantGarde-DemiOblique.pfa) ;
+/Bookman-Demi (pbkd.gsf) ;
+/Bookman-DemiItalic (pbkdi.gsf) ;
+/Bookman-Light (pbkl.gsf) ;
+/Bookman-LightItalic (pbkli.gsf) ;
+/Calligraphic-Hiragana (fhirw.gsf) ;
+/Calligraphic-Katakana (fkarw.gsf) ;
+/CharterBT-Bold (bchb.gsf) ;
+/CharterBT-BoldItalic (bchbi.gsf) ;
+/CharterBT-Italic (bchri.gsf) ;
+/CharterBT-Roman (bchr.gsf) ;
+/Courier (Courier.pfa) ;
+/Courier-Bold (Courier-Bold.pfa) ;
+/Courier-BoldOblique (Courier-BoldOblique.pfa) ;
+/Courier-Oblique (Courier-Oblique.pfa) ;
+/Helvetica (Helvetica.pfa) ;
+/Helvetica-Bold (Helvetica-Bold.pfa) ;
+/Helvetica-BoldOblique (Helvetica-BoldOblique.pfa) ;
+/Helvetica-Oblique (Helvetica-Oblique.pfa) ;
+/Hershey-Gothic-English (hrger.gsf) ;
+/Hershey-Gothic-German (hrgrr.gsf) ;
+/Hershey-Gothic-Italian (hritr.gsf) ;
+/Hershey-Plain-Duplex (hrpld.gsf) ;
+/Hershey-Plain-Duplex-Italic (hrpldi.gsf) ;
+/Hershey-Plain-Triplex (hrplt.gsf) ;
+/Hershey-Plain-Triplex-Italic (hrplti.gsf) ;
+/Hershey-Script-Complex (hrscc.gsf) ;
+/Hershey-Script-Simplex (hrscs.gsf) ;
+/Hershey-Gothic-English-Bold (hrgerb.gsf) ;
+/Hershey-Gothic-English-Oblique (hrgero.gsf) ;
+/Hershey-Gothic-English-Semibold (hrgerd.gsf) ;
+/Hershey-Gothic-German-Bold (hrgrrb.gsf) ;
+/Hershey-Gothic-German-Oblique (hrgrro.gsf) ;
+/Hershey-Gothic-Italian-Bold (hritrb.gsf) ;
+/Hershey-Gothic-Italian-Oblique (hritro.gsf) ;
+/Hershey-Plain-Duplex-Bold (hrpldb.gsf) ;
+/Hershey-Plain-Duplex-Bold-Italic (hrpldbi.gsf) ;
+/Hershey-Plain-Triplex-Bold (hrpltb.gsf) ;
+/Hershey-Plain-Triplex-Bold-Italic (hrpltbi.gsf) ;
+/Hershey-Script-Complex-Bold (hrsccb.gsf) ;
+/Hershey-Script-Complex-Oblique (hrscco.gsf) ;
+/Hershey-Script-Simplex-Bold (hrscsb.gsf) ;
+/Hershey-Script-Simplex-Oblique (hrscso.gsf) ;
+/Hershey-Greek-Complex (hrgkc.gsf) ;
+/Hershey-Greek-Simplex (hrgks.gsf) ;
+/Hershey-Plain (hrplr.gsf) ;
+/Hershey-Plain-Simplex (hrpls.gsf) ;
+/Hershey-Plain-Bold (hrplrb.gsf) ;
+/Hershey-Plain-Bold-Oblique (hrplrbo.gsf) ;
+/Hershey-Plain-Oblique (hrplro.gsf) ;
+/Hershey-Plain-Simplex-Bold (hrplsb.gsf) ;
+/Hershey-Plain-Simplex-Bold-Oblique (hrplsbo.gsf) ;
+/Hershey-Plain-Simplex-Oblique (hrplso.gsf) ;
+/Hershey-Symbol (hrsy_r.gsf) ;
+/LubalinGraph-Book (LubalinGraph-Book.pfa) ;
+/LubalinGraph-BookOblique (LubalinGraph-BookOblique.pfa) ;
+/LubalinGraph-Demi (LubalinGraph-Demi.pfa) ;
+/LubalinGraph-DemiOblique (LubalinGraph-DemiOblique.pfa) ;
+/NewCenturySchlbk-Bold (NewCenturySchlbk-Bold.pfa) ;
+/NewCenturySchlbk-BoldItalic (NewCenturySchlbk-BoldItalic.pfa) ;
+/NewCenturySchlbk-Italic (NewCenturySchlbk-Italic.pfa) ;
+/NewCenturySchlbk-Roman (NewCenturySchlbk-Roman.pfa) ;
+/NimbusRomanNo9L-Regular (n021003l.gsf) ;
+/NimbusSansL-Regular (n019003l.gsf) ;
+/Palatino-Bold (pplb.gsf) ;
+/Palatino-BoldItalic (pplbi.gsf) ;
+/Palatino-Italic (pplri.gsf) ;
+/Palatino-Roman (pplr.gsf) ;
+/Shareware-Cyrillic-Regular (fcyr.gsf) ;
+/Shareware-Cyrillic-Italic (fcyri.gsf) ;
+/Souvenir-Demi (Souvenir-Demi.pfa) ;
+/Souvenir-DemiItalic (Souvenir-DemiItalic.pfa) ;
+/Souvenir-Light (Souvenir-Light.pfa) ;
+/Souvenir-LightItalic (Souvenir-LightItalic.pfa) ;
+/Symbol (Symbol.pfa) ;
+/Times-Bold (Times-Bold.pfa) ;
+/Times-BoldItalic (Times-BoldItalic.pfa) ;
+/Times-Italic (Times-Italic.pfa) ;
+/Times-Roman (Times-Roman.pfa) ;
+/URWAntiquaT-RegularCondensed (u003043t.gsf) ;
+/URWGroteskT-Bold (u004006t.gsf) ;
+/Utopia-Bold (putb.gsf) ;
+/Utopia-BoldItalic (putbi.gsf) ;
+/Utopia-Italic (putri.gsf) ;
+/Utopia-Regular (putr.gsf) ;
+/ZapfChancery (zcr.gsf) ;
+/ZapfChancery-Bold (zcb.gsf) ;
+/ZapfChancery-Oblique (zcro.gsf) ;
+/ZapfDingbats (ZapfDingbats.pfa) ;
+/Cyrillic /Cyrillic-Regular ;
+/Cyrillic-Regular /Shareware-Cyrillic-Regular ;
+/Cyrillic-Italic /Shareware-Cyrillic-Italic ;
+
+% BSN additions from original Fontmap file and some more aliases
+
+/Helvetica-Narrow-Bold /Helvetica-Narrow ;
+/ZapfChancery-MediumItalic /ZapfChancery-Oblique ;
+/Charter-Roman /CharterBT-Roman ;
+/Charter-Italic /CharterBT-Italic ;
+/Charter-Bold /CharterBT-Bold ;
+/Charter-BoldItalic /CharterBT-BoldItalic ;
+/Courier-Italic /Courier-Oblique ;
+/Courier-BoldItalic /Courier-BoldOblique ;
diff --git a/Master/xemtex/gslib/Fontmap.SGI b/Master/xemtex/gslib/Fontmap.SGI
new file mode 100644
index 00000000000..22fa0b2073b
--- /dev/null
+++ b/Master/xemtex/gslib/Fontmap.SGI
@@ -0,0 +1,406 @@
+% Copyright (C) 1996, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: Fontmap.SGI,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+%
+% Fontmap.SGI - standard font catalog for Ghostscript, modified for IRIX 5.3
+% with the DPS fonts installed (dps_eoe.sw.dpsfonts).
+% by H. Gohel, gohel@acm.org. 1999-09-10
+
+% ----------------------------------------------------------------
+
+% This file is a catalog of fonts known to Ghostscript. Any font
+% that is to be loaded automatically when named must be in this catalog,
+% except for fonts that Ghostscript finds automatically in directories
+% named in the GS_FONTPATH environment variable.
+
+% Each font has an entry consisting of three items:
+%
+% - The name by which the font is known inside Ghostscript
+% (a Ghostscript name preceded by a `/', or a string enclosed
+% in parentheses). This is used to find the file from which
+% a font of a given name should be loaded.
+%
+% - Information depending on whether this is a real font or a
+% font alias:
+%
+% - For real fonts, the name of the Ghostscript font
+% file (a Ghostscript string, enclosed in parentheses).
+% The filename should include the extension, which (by
+% convention) is `.gsf'. `.pfa' and `.pfb' files are
+% also usable as fonts for Ghostscript.
+%
+% - For font aliases, the name of the font which should
+% be used when this one is requested, preceded by a
+% `/'. See the entry for Charter below for an example.
+% Note that an alias name cannot be enclosed in parentheses.
+%
+% - At least one space or tab, and a terminating semicolon.
+
+% Because of limitations in the MS-DOS environment, Ghostscript font
+% file names must be no more than 8 characters long, must consist only
+% of LOWER CASE letters, digits, and underscores, and must start with a
+% letter. Font names, on the other hand, need only obey the syntax of
+% names in the Ghostscript language, which is much more liberal.
+
+% The following table is actually a Ghostscript data structure.
+% If you add new entries, be sure to copy the punctuation accurately;
+% in particular, you must leave at least one space or tab between each
+% field in the entry. Also, please read fonts.doc for important information
+% about font names.
+
+% Note that .pfa and .pfb fonts are compatible with Adobe Type Manager
+% and other programs that don't include full PostScript interpreters,
+% as well as with PostScript interpreters; .gsf fonts are compatible with
+% PostScript interpreters, but not with ATM or similar programs.
+
+%
+%
+% Fonts contributed by:
+% URW++ Design and Development Incorporated
+% Poppenbuetteler Bogen 29A
+% D-22399 Hamburg
+% Germany
+% tel. +49 (40) 60 60 50
+% fax +49 (40) 60 60 51 11
+% http://www.urwpp.de
+% for distribution under the GNU License and Aladdin Free Public License.
+% See the notice at the head of this Fontmap file for licensing terms.
+% Each of these fonts is individually covered by the license:
+% for licensing purposes, they are not "part of" any larger entity.
+% The following notice applies to these fonts:
+%
+% Copyright URW Software, Copyright 1994 by URW.
+%
+
+% Actual fonts
+
+/URWBookmanL-DemiBold (b018015l.pfb) ;
+/URWBookmanL-DemiBoldItal (b018035l.pfb) ;
+/URWBookmanL-Ligh (b018012l.pfb) ;
+/URWBookmanL-LighItal (b018032l.pfb) ;
+
+/NimbusMonL-Regu (n022003l.pfb) ;
+/NimbusMonL-ReguObli (n022023l.pfb) ;
+/NimbusMonL-Bold (n022004l.pfb) ;
+/NimbusMonL-BoldObli (n022024l.pfb) ;
+
+/URWGothicL-Book (a010013l.pfb) ;
+/URWGothicL-BookObli (a010033l.pfb) ;
+/URWGothicL-Demi (a010015l.pfb) ;
+/URWGothicL-DemiObli (a010035l.pfb) ;
+
+/NimbusSanL-Regu (n019003l.pfb) ;
+/NimbusSanL-ReguItal (n019023l.pfb) ;
+/NimbusSanL-Bold (n019004l.pfb) ;
+/NimbusSanL-BoldItal (n019024l.pfb) ;
+
+/NimbusSanL-ReguCond (n019043l.pfb) ;
+/NimbusSanL-ReguCondItal (n019063l.pfb) ;
+/NimbusSanL-BoldCond (n019044l.pfb) ;
+/NimbusSanL-BoldCondItal (n019064l.pfb) ;
+
+/URWPalladioL-Roma (p052003l.pfb) ;
+/URWPalladioL-Ital (p052023l.pfb) ;
+/URWPalladioL-Bold (p052004l.pfb) ;
+/URWPalladioL-BoldItal (p052024l.pfb) ;
+
+/CenturySchL-Roma (c059013l.pfb) ;
+/CenturySchL-Ital (c059033l.pfb) ;
+/CenturySchL-Bold (c059016l.pfb) ;
+/CenturySchL-BoldItal (c059036l.pfb) ;
+
+/NimbusRomNo9L-Regu (n021003l.pfb) ;
+/NimbusRomNo9L-ReguItal (n021023l.pfb) ;
+/NimbusRomNo9L-Medi (n021004l.pfb) ;
+/NimbusRomNo9L-MediItal (n021024l.pfb) ;
+
+/StandardSymL (s050000l.pfb) ;
+
+/URWChanceryL-MediItal (z003034l.pfb) ;
+
+/Dingbats (d050000l.pfb) ;
+
+% Aliases
+% These Adobe fonts are available with DPS on IRIX, so they commented out:
+
+%/Bookman-Demi /URWBookmanL-DemiBold ;
+%/Bookman-DemiItalic /URWBookmanL-DemiBoldItal ;
+%/Bookman-Light /URWBookmanL-Ligh ;
+%/Bookman-LightItalic /URWBookmanL-LighItal ;
+
+%/Courier /NimbusMonL-Regu ;
+%/Courier-Oblique /NimbusMonL-ReguObli ;
+%/Courier-Bold /NimbusMonL-Bold ;
+%/Courier-BoldOblique /NimbusMonL-BoldObli ;
+
+%/AvantGarde-Book /URWGothicL-Book ;
+%/AvantGarde-BookOblique /URWGothicL-BookObli ;
+%/AvantGarde-Demi /URWGothicL-Demi ;
+%/AvantGarde-DemiOblique /URWGothicL-DemiObli ;
+
+%/Helvetica /NimbusSanL-Regu ;
+%/Helvetica-Oblique /NimbusSanL-ReguItal ;
+%/Helvetica-Bold /NimbusSanL-Bold ;
+%/Helvetica-BoldOblique /NimbusSanL-BoldItal ;
+
+%/Helvetica-Narrow /NimbusSanL-ReguCond ;
+%/Helvetica-Narrow-Oblique /NimbusSanL-ReguCondItal ;
+%/Helvetica-Narrow-Bold /NimbusSanL-BoldCond ;
+%/Helvetica-Narrow-BoldOblique /NimbusSanL-BoldCondItal ;
+
+%/Palatino-Roman /URWPalladioL-Roma ;
+%/Palatino-Italic /URWPalladioL-Ital ;
+%/Palatino-Bold /URWPalladioL-Bold ;
+%/Palatino-BoldItalic /URWPalladioL-BoldItal ;
+
+%/NewCenturySchlbk-Roman /CenturySchL-Roma ;
+%/NewCenturySchlbk-Italic /CenturySchL-Ital ;
+%/NewCenturySchlbk-Bold /CenturySchL-Bold ;
+%/NewCenturySchlbk-BoldItalic /CenturySchL-BoldItal ;
+
+%/Times-Roman /NimbusRomNo9L-Regu ;
+%/Times-Italic /NimbusRomNo9L-ReguItal ;
+%/Times-Bold /NimbusRomNo9L-Medi ;
+%/Times-BoldItalic /NimbusRomNo9L-MediItal ;
+
+%/Symbol /StandardSymL ;
+
+%/ZapfChancery-MediumItalic /URWChanceryL-MediItal ;
+
+%/ZapfDingbats /Dingbats ;
+
+%
+%
+% Type 1 fonts contributed to the X11R5 distribution.
+%
+
+% The following notice accompanied the Charter fonts.
+%
+% (c) Copyright 1989-1992, Bitstream Inc., Cambridge, MA.
+%
+% You are hereby granted permission under all Bitstream propriety rights
+% to use, copy, modify, sublicense, sell, and redistribute the 4 Bitstream
+% Charter (r) Type 1 outline fonts and the 4 Courier Type 1 outline fonts
+% for any purpose and without restriction; provided, that this notice is
+% left intact on all copies of such fonts and that Bitstream's trademark
+% is acknowledged as shown below on all unmodified copies of the 4 Charter
+% Type 1 fonts.
+%
+% BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
+
+% The Bitstream Charter fonts have different names (CharterBT-
+% instead of Charter-), but Ghostscript doesn't care.
+/Charter-Roman (bchr.pfa) ;
+/Charter-Italic (bchri.pfa) ;
+/Charter-Bold (bchb.pfa) ;
+/Charter-BoldItalic (bchbi.pfa) ;
+
+% The following notice accompanied the Utopia font:
+%
+% Permission to use, reproduce, display and distribute the listed
+% typefaces is hereby granted, provided that the Adobe Copyright notice
+% appears in all whole and partial copies of the software and that the
+% following trademark symbol and attribution appear in all unmodified
+% copies of the software:
+%
+% Copyright (c) 1989 Adobe Systems Incorporated
+% Utopia (R)
+% Utopia is a registered trademark of Adobe Systems Incorporated
+%
+% The Adobe typefaces (Type 1 font program, bitmaps and Adobe Font
+% Metric files) donated are:
+%
+% Utopia Regular
+% Utopia Italic
+% Utopia Bold
+% Utopia Bold Italic
+
+% The original Utopia files are available with IRIX and DPS so need
+% for aliases, HJG.
+
+%/Utopia-Regular (putr.pfa) ;
+%/Utopia-Italic (putri.pfa) ;
+%/Utopia-Bold (putb.pfa) ;
+%/Utopia-BoldItalic (putbi.pfa) ;
+
+%
+%
+% Fonts contributed by URW GmbH for distribution under the GNU License.
+% The following notice accompanied these fonts:
+%
+% U004006T URW Grotesk 2031 Bold PostScript Type 1 Font Program
+% U003043T URW Antiqua 2051 Regular Condensed PostScript Type 1 Font Program
+%
+% Copyright (c) 1992 URW GmbH, Hamburg, Germany
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; wihtout even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+% See the GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+%
+% Address:
+% URW GmbH
+% PC Support
+% Harksheider Strasse 102
+% 2000 Hamburg 65
+% Germany
+% Phone: +49 40 60 60 50 (Reception)
+% Phone: +49 40 60 60 52 30 (PC Support)
+% Fax : +49 40 60 60 52 52
+%
+
+/URWAntiquaT-RegularCondensed (u003043t.gsf) ;
+/URWGroteskT-Bold (u004006t.gsf) ;
+
+%
+%
+% Shareware Kana fonts. These are subject to the following notice:
+%
+% These copyrighted fonts were developed by Kevin Hartig. Permission is
+% granted to freely distribute them in entirety along with this statement.
+% This is shareware. If you decide to use these fonts please contribute
+% $10 US to help support further freeware and shareware software development.
+% Questions and comments may be sent to:
+%
+% hartig@fsl.noaa.gov
+% khartig@nyx.cs.du.edu
+%
+% Kevin Hartig
+% 1126 Collyer Street
+% Longmont, CO 80501 USA
+%
+% copyright 1993.
+
+% Hiragana and Katakana fonts. The character names are inappropriate,
+% and the encoding is probably not related to any known standard.
+
+/Calligraphic-Hiragana (fhirw.gsf) ;
+/Calligraphic-Katakana (fkarw.gsf) ;
+
+%
+%
+% Public-domain fonts. These have no copyright, and are of unknown quality.
+
+% Cyrillic fonts. The character names are inappropriate,
+% and the encoding is probably not related to any known standard.
+
+/Shareware-Cyrillic-Regular (fcyr.gsf) ;
+/Shareware-Cyrillic-Italic (fcyri.gsf) ;
+
+% Aliases
+/Cyrillic /Cyrillic-Regular ;
+/Cyrillic-Regular /Shareware-Cyrillic-Regular ;
+/Cyrillic-Italic /Shareware-Cyrillic-Italic ;
+
+%
+%
+% Fonts converted from Hershey outlines. These are constructed and
+% maintained manually. These are also in the public domain.
+%
+% The suggested UniqueID's and filenames are constructed differently for
+% these than for the ones above, because of the strange way that the Hershey
+% fonts were constructed. The scheme for these looks like:
+%
+% 42TTXY0
+%
+% TT = typeface, X = ``class'', Y = variation
+%
+% The typeface names and numbers are listed in fonts.mak.
+%
+% class:
+% 0 = normal = r
+% 1 = simplex = s
+% 2 = complex = c
+% 3 = triplex = t
+% 4 = duplex = d
+%
+% variation:
+% 0 = normal (omitted)
+% 1 = oblique = o
+% 2 = italic = i
+% 3 = bold = b
+% 4 = bold oblique = bo
+% 5 = bold italic = bi
+%
+
+% Fonts created by Thomas Wolff <wolff@inf.fu-berlin.de>, by adding
+% accents, accented characters, and various other non-alphabetics
+% to the original Hershey fonts. These are "freeware", not to be sold.
+
+/Hershey-Gothic-English (hrger.pfa) ; % 5066533
+/Hershey-Gothic-German (hrgrr.pfa) ;
+/Hershey-Gothic-Italian (hritr.pfa) ;
+
+/Hershey-Plain-Duplex (hrpld.pfa) ;
+/Hershey-Plain-Duplex-Italic (hrpldi.pfa) ;
+/Hershey-Plain-Triplex (hrplt.pfa) ;
+/Hershey-Plain-Triplex-Italic (hrplti.pfa) ;
+
+/Hershey-Script-Complex (hrscc.pfa) ;
+/Hershey-Script-Simplex (hrscs.pfa) ; % 5066541
+
+% Fonts created algorithmically from the above.
+
+/Hershey-Gothic-English-Bold (hrgerb.gsf) ; % 5066542
+/Hershey-Gothic-English-Oblique (hrgero.gsf) ;
+/Hershey-Gothic-English-SemiBold (hrgerd.gsf) ;
+/Hershey-Gothic-German-Bold (hrgrrb.gsf) ;
+/Hershey-Gothic-German-Oblique (hrgrro.gsf) ;
+/Hershey-Gothic-Italian-Bold (hritrb.gsf) ;
+/Hershey-Gothic-Italian-Oblique (hritro.gsf) ;
+
+/Hershey-Plain-Duplex-Bold (hrpldb.gsf) ;
+/Hershey-Plain-Duplex-Bold-Italic (hrpldbi.gsf) ;
+/Hershey-Plain-Triplex-Bold (hrpltb.gsf) ;
+/Hershey-Plain-Triplex-Bold-Italic (hrpltbi.gsf) ;
+
+/Hershey-Script-Complex-Bold (hrsccb.gsf) ;
+/Hershey-Script-Complex-Oblique (hrscco.gsf) ;
+/Hershey-Script-Simplex-Bold (hrscsb.gsf) ;
+/Hershey-Script-Simplex-Oblique (hrscso.gsf) ; % 5066556
+
+% Fonts consisting only of characters from the original Hershey
+% distribution. These are Type 3 fonts.
+
+/Hershey-Greek-Complex (hrgkc.gsf) ; % 5066557
+/Hershey-Greek-Simplex (hrgks.gsf) ;
+
+/Hershey-Plain (hrplr.gsf) ;
+/Hershey-Plain-Simplex (hrpls.gsf) ; % 5066560
+
+% Fonts created algorithmically from the above.
+
+/Hershey-Plain-Bold (hrplrb.gsf) ; % 5066561
+/Hershey-Plain-Bold-Oblique (hrplrbo.gsf) ;
+/Hershey-Plain-Oblique (hrplro.gsf) ;
+/Hershey-Plain-Simplex-Bold (hrplsb.gsf) ;
+/Hershey-Plain-Simplex-Bold-Oblique (hrplsbo.gsf) ;
+/Hershey-Plain-Simplex-Oblique (hrplso.gsf) ; % 5066566
+
+% This font, and only this font among the Hershey fonts, uses
+% the SymbolEncoding.
+
+/Hershey-Symbol (hrsyr.gsf) ; % 5066567
diff --git a/Master/xemtex/gslib/Fontmap.Sol b/Master/xemtex/gslib/Fontmap.Sol
new file mode 100644
index 00000000000..a8c6fe25765
--- /dev/null
+++ b/Master/xemtex/gslib/Fontmap.Sol
@@ -0,0 +1,487 @@
+% Copyright (C) 1996, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: Fontmap.Sol,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Fontmap.Solaris - Ghostscript Fontmap for Solaris 2.3 and above
+% ===============================================================
+%
+% The Solaris 2.3 (and above) operating system from Sun Microsystems comes with
+% Display Postscript (DPS), including certain Type1 and Type3 PostScript fonts.
+% Using these fonts instead of the default Ghostscript fonts greatly improves
+% the visual quality of Ghostscript rendered documents, especially at larger
+% font sizes. You should definately use these fonts if you have Solaris 2.3 or
+% above.
+%
+% To use the Solaris 2 DPS fonts, simply copy this file (Fontmap.Solaris) to
+%
+% /usr/local/lib/Ghostscript/VERSION/Fontmap
+% (where VERSION is the version number of Ghostscript, eg: 3.33)
+%
+% and set the environment variable GS_LIB as follows:
+%
+% GS_LIB=/usr/openwin/lib/X11/fonts/Type1:/usr/openwin/lib/X11/fonts/Type3
+% export GS_LIB
+%
+% You can use /usr/openwin/lib/fonts/Type1/outline instead if you like, it
+% makes no difference (the files in /usr/openwin/lib/fonts/Type1 are symlinks
+% into /usr/openwin/lib/fonts/Type1/outline).
+%
+% Instead of setting GS_LIB, you could add the above directories to
+% GS_LIB_DEFAULT in your makefile before building Ghostscript.
+%
+%
+% IMPORTANT NOTE
+% ==============
+%
+% Note that simply setting GS_FONTPATH may not work, because for some reason
+% some versions of gs can't seem to find any fonts in
+% /usr/openwin/lib/X11/fonts/Type1/outline.
+% It says: "15 files, 15 scanned, 0 new fonts".
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% ----------------------------------------------------------------
+
+% This file is a catalog of fonts known to Ghostscript. Any font
+% that is to be loaded automatically when named must be in this catalog,
+% except for fonts that Ghostscript finds automatically in directories
+% named in the GS_FONTPATH environment variable.
+
+% Each font has an entry consisting of three items:
+%
+% - The name by which the font is known inside Ghostscript
+% (a Ghostscript name preceded by a `/', or a string enclosed
+% in parentheses). This is used to find the file from which
+% a font of a given name should be loaded.
+%
+% - Information depending on whether this is a real font or a
+% font alias:
+%
+% - For real fonts, the name of the Ghostscript font
+% file (a Ghostscript string, enclosed in parentheses).
+% The filename should include the extension, which (by
+% convention) is `.gsf'. `.pfa' and `.pfb' files are
+% also usable as fonts for Ghostscript.
+%
+% - For font aliases, the name of the font which should
+% be used when this one is requested, preceded by a
+% `/'. See the entry for Charter below for an example.
+% Note that an alias name cannot be enclosed in parentheses.
+%
+% - At least one space or tab, and a terminating semicolon.
+
+% Because of limitations in the MS-DOS environment, Ghostscript font
+% file names must be no more than 8 characters long, must consist only
+% of LOWER CASE letters, digits, and underscores, and must start with a
+% letter. Font names, on the other hand, need only obey the syntax of
+% names in the Ghostscript language, which is much more liberal.
+
+% The following table is actually a Ghostscript data structure.
+% If you add new entries, be sure to copy the punctuation accurately;
+% in particular, you must leave at least one space or tab between each
+% field in the entry. Also, please read fonts.doc for important information
+% about font names.
+
+% Note that .pfa and .pfb fonts are compatible with Adobe Type Manager
+% and other programs that don't include full PostScript interpreters,
+% as well as with PostScript interpreters; .gsf fonts are compatible with
+% PostScript interpreters, but not with ATM or similar programs.
+
+%
+%
+% Fonts contributed by:
+% URW++ Design and Development Incorporated
+% Poppenbuetteler Bogen 29A
+% D-22399 Hamburg
+% Germany
+% tel. +49 (40) 60 60 50
+% fax +49 (40) 60 60 51 11
+% http://www.urwpp.de
+% for distribution under the GNU License and Aladdin Free Public License.
+% See the notice at the head of this Fontmap file for licensing terms.
+% Each of these fonts is individually covered by the license:
+% for licensing purposes, they are not "part of" any larger entity.
+% The following notice applies to these fonts:
+%
+% Copyright URW Software, Copyright 1994 by URW.
+%
+
+% Actual fonts
+
+/URWBookmanL-DemiBold (b018015l.pfb) ;
+/URWBookmanL-DemiBoldItal (b018035l.pfb) ;
+/URWBookmanL-Ligh (b018012l.pfb) ;
+/URWBookmanL-LighItal (b018032l.pfb) ;
+
+/NimbusMonL-Regu (n022003l.pfb) ;
+/NimbusMonL-ReguObli (n022023l.pfb) ;
+/NimbusMonL-Bold (n022004l.pfb) ;
+/NimbusMonL-BoldObli (n022024l.pfb) ;
+
+/URWGothicL-Book (a010013l.pfb) ;
+/URWGothicL-BookObli (a010033l.pfb) ;
+/URWGothicL-Demi (a010015l.pfb) ;
+/URWGothicL-DemiObli (a010035l.pfb) ;
+
+/NimbusSanL-Regu (n019003l.pfb) ;
+/NimbusSanL-ReguItal (n019023l.pfb) ;
+/NimbusSanL-Bold (n019004l.pfb) ;
+/NimbusSanL-BoldItal (n019024l.pfb) ;
+
+/NimbusSanL-ReguCond (n019043l.pfb) ;
+/NimbusSanL-ReguCondItal (n019063l.pfb) ;
+/NimbusSanL-BoldCond (n019044l.pfb) ;
+/NimbusSanL-BoldCondItal (n019064l.pfb) ;
+
+/URWPalladioL-Roma (p052003l.pfb) ;
+/URWPalladioL-Ital (p052023l.pfb) ;
+/URWPalladioL-Bold (p052004l.pfb) ;
+/URWPalladioL-BoldItal (p052024l.pfb) ;
+
+/CenturySchL-Roma (c059013l.pfb) ;
+/CenturySchL-Ital (c059033l.pfb) ;
+/CenturySchL-Bold (c059016l.pfb) ;
+/CenturySchL-BoldItal (c059036l.pfb) ;
+
+/NimbusRomNo9L-Regu (n021003l.pfb) ;
+/NimbusRomNo9L-ReguItal (n021023l.pfb) ;
+/NimbusRomNo9L-Medi (n021004l.pfb) ;
+/NimbusRomNo9L-MediItal (n021024l.pfb) ;
+
+/StandardSymL (s050000l.pfb) ;
+
+/URWChanceryL-MediItal (z003034l.pfb) ;
+
+/Dingbats (d050000l.pfb) ;
+
+% Aliases
+
+/Bookman-Demi /URWBookmanL-DemiBold ;
+/Bookman-DemiItalic /URWBookmanL-DemiBoldItal ;
+/Bookman-Light /URWBookmanL-Ligh ;
+/Bookman-LightItalic /URWBookmanL-LighItal ;
+
+/Courier /NimbusMonL-Regu ;
+/Courier-Oblique /NimbusMonL-ReguObli ;
+/Courier-Bold /NimbusMonL-Bold ;
+/Courier-BoldOblique /NimbusMonL-BoldObli ;
+
+/AvantGarde-Book /URWGothicL-Book ;
+/AvantGarde-BookOblique /URWGothicL-BookObli ;
+/AvantGarde-Demi /URWGothicL-Demi ;
+/AvantGarde-DemiOblique /URWGothicL-DemiObli ;
+
+% Solaris 2 DPS has Helvetica as a Type1 font.
+%/Helvetica /NimbusSanL-Regu ;
+%/Helvetica-Oblique /NimbusSanL-ReguItal ;
+%/Helvetica-Bold /NimbusSanL-Bold ;
+%/Helvetica-BoldOblique /NimbusSanL-BoldItal ;
+
+/Helvetica-Narrow /NimbusSanL-ReguCond ;
+/Helvetica-Narrow-Oblique /NimbusSanL-ReguCondItal ;
+/Helvetica-Narrow-Bold /NimbusSanL-BoldCond ;
+/Helvetica-Narrow-BoldOblique /NimbusSanL-BoldCondItal ;
+
+/Palatino-Roman /URWPalladioL-Roma ;
+/Palatino-Italic /URWPalladioL-Ital ;
+/Palatino-Bold /URWPalladioL-Bold ;
+/Palatino-BoldItalic /URWPalladioL-BoldItal ;
+
+/NewCenturySchlbk-Roman /CenturySchL-Roma ;
+/NewCenturySchlbk-Italic /CenturySchL-Ital ;
+/NewCenturySchlbk-Bold /CenturySchL-Bold ;
+/NewCenturySchlbk-BoldItalic /CenturySchL-BoldItal ;
+
+% Solaris 2 DPS has Times as a Type1 font.
+%/Times-Roman /NimbusRomNo9L-Regu ;
+%/Times-Italic /NimbusRomNo9L-ReguItal ;
+%/Times-Bold /NimbusRomNo9L-Medi ;
+%/Times-BoldItalic /NimbusRomNo9L-MediItal ;
+
+% Solaris 2 DPS has Symbol as a Type1 font.
+%/Symbol /StandardSymL ;
+
+/ZapfChancery-MediumItalic /URWChanceryL-MediItal ;
+
+/ZapfDingbats /Dingbats ;
+
+%
+%
+% Type 1 fonts contributed to the X11R5 distribution.
+%
+
+% The following notice accompanied the Charter fonts.
+%
+% (c) Copyright 1989-1992, Bitstream Inc., Cambridge, MA.
+%
+% You are hereby granted permission under all Bitstream propriety rights
+% to use, copy, modify, sublicense, sell, and redistribute the 4 Bitstream
+% Charter (r) Type 1 outline fonts and the 4 Courier Type 1 outline fonts
+% for any purpose and without restriction; provided, that this notice is
+% left intact on all copies of such fonts and that Bitstream's trademark
+% is acknowledged as shown below on all unmodified copies of the 4 Charter
+% Type 1 fonts.
+%
+% BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
+
+/CharterBT-Roman (bchr.pfa) ;
+/CharterBT-Italic (bchri.pfa) ;
+/CharterBT-Bold (bchb.pfa) ;
+/CharterBT-BoldItalic (bchbi.pfa) ;
+
+% Aliases
+
+/Charter-Roman /CharterBT-Roman ;
+/Charter-Italic /CharterBT-Italic ;
+/Charter-Bold /CharterBT-Bold ;
+/Charter-BoldItalic /CharterBT-BoldItalic ;
+
+% The following notice accompanied the Utopia font:
+%
+% Permission to use, reproduce, display and distribute the listed
+% typefaces is hereby granted, provided that the Adobe Copyright notice
+% appears in all whole and partial copies of the software and that the
+% following trademark symbol and attribution appear in all unmodified
+% copies of the software:
+%
+% Copyright (c) 1989 Adobe Systems Incorporated
+% Utopia (R)
+% Utopia is a registered trademark of Adobe Systems Incorporated
+%
+% The Adobe typefaces (Type 1 font program, bitmaps and Adobe Font
+% Metric files) donated are:
+%
+% Utopia Regular
+% Utopia Italic
+% Utopia Bold
+% Utopia Bold Italic
+
+/Utopia-Regular (putr.pfa) ;
+/Utopia-Italic (putri.pfa) ;
+/Utopia-Bold (putb.pfa) ;
+/Utopia-BoldItalic (putbi.pfa) ;
+
+%
+%
+% Fonts contributed by URW GmbH for distribution under the GNU License.
+% The following notice accompanied these fonts:
+%
+% U004006T URW Grotesk 2031 Bold PostScript Type 1 Font Program
+% U003043T URW Antiqua 2051 Regular Condensed PostScript Type 1 Font Program
+%
+% Copyright (c) 1992 URW GmbH, Hamburg, Germany
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; wihtout even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+% See the GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 U.S.A.
+%
+% Address:
+% URW GmbH
+% PC Support
+% Harksheider Strasse 102
+% 2000 Hamburg 65
+% Germany
+% Phone: +49 40 60 60 50 (Reception)
+% Phone: +49 40 60 60 52 30 (PC Support)
+% Fax : +49 40 60 60 52 52
+%
+
+/URWAntiquaT-RegularCondensed (u003043t.gsf) ;
+/URWGroteskT-Bold (u004006t.gsf) ;
+
+%
+%
+% Shareware Kana fonts. These are subject to the following notice:
+%
+% These copyrighted fonts were developed by Kevin Hartig. Permission is
+% granted to freely distribute them in entirety along with this statement.
+% This is shareware. If you decide to use these fonts please contribute
+% $10 US to help support further freeware and shareware software development.
+% Questions and comments may be sent to:
+%
+% hartig@fsl.noaa.gov
+% khartig@nyx.cs.du.edu
+%
+% Kevin Hartig
+% 1126 Collyer Street
+% Longmont, CO 80501 USA
+%
+% copyright 1993.
+
+% Hiragana and Katakana fonts. The character names are inappropriate,
+% and the encoding is probably not related to any known standard.
+
+/Calligraphic-Hiragana (fhirw.gsf) ;
+/Calligraphic-Katakana (fkarw.gsf) ;
+
+%
+%
+% Public-domain fonts. These have no copyright, and are of unknown quality.
+
+% Cyrillic fonts. The character names are inappropriate,
+% and the encoding is probably not related to any known standard.
+
+/Shareware-Cyrillic-Regular (fcyr.gsf) ;
+/Shareware-Cyrillic-Italic (fcyri.gsf) ;
+
+% Aliases
+/Cyrillic /Cyrillic-Regular ;
+/Cyrillic-Regular /Shareware-Cyrillic-Regular ;
+/Cyrillic-Italic /Shareware-Cyrillic-Italic ;
+
+%
+%
+% Fonts converted from Hershey outlines. These are constructed and
+% maintained manually. These are also in the public domain.
+%
+% The suggested UniqueID's and filenames are constructed differently for
+% these than for the ones above, because of the strange way that the Hershey
+% fonts were constructed. The scheme for these looks like:
+%
+% 42TTXY0
+%
+% TT = typeface, X = ``class'', Y = variation
+%
+% The typeface names and numbers are listed in fonts.mak.
+%
+% class:
+% 0 = normal = r
+% 1 = simplex = s
+% 2 = complex = c
+% 3 = triplex = t
+% 4 = duplex = d
+%
+% variation:
+% 0 = normal (omitted)
+% 1 = oblique = o
+% 2 = italic = i
+% 3 = bold = b
+% 4 = bold oblique = bo
+% 5 = bold italic = bi
+%
+
+% Fonts created by Thomas Wolff <wolff@inf.fu-berlin.de>, by adding
+% accents, accented characters, and various other non-alphabetics
+% to the original Hershey fonts. These are "freeware", not to be sold.
+
+/Hershey-Gothic-English (hrger.pfa) ; % 5066533
+/Hershey-Gothic-German (hrgrr.pfa) ;
+/Hershey-Gothic-Italian (hritr.pfa) ;
+
+/Hershey-Plain-Duplex (hrpld.pfa) ;
+/Hershey-Plain-Duplex-Italic (hrpldi.pfa) ;
+/Hershey-Plain-Triplex (hrplt.pfa) ;
+/Hershey-Plain-Triplex-Italic (hrplti.pfa) ;
+
+/Hershey-Script-Complex (hrscc.pfa) ;
+/Hershey-Script-Simplex (hrscs.pfa) ; % 5066541
+
+% Fonts created algorithmically from the above.
+
+/Hershey-Gothic-English-Bold (hrgerb.gsf) ; % 5066542
+/Hershey-Gothic-English-Oblique (hrgero.gsf) ;
+/Hershey-Gothic-English-SemiBold (hrgerd.gsf) ;
+/Hershey-Gothic-German-Bold (hrgrrb.gsf) ;
+/Hershey-Gothic-German-Oblique (hrgrro.gsf) ;
+/Hershey-Gothic-Italian-Bold (hritrb.gsf) ;
+/Hershey-Gothic-Italian-Oblique (hritro.gsf) ;
+
+/Hershey-Plain-Duplex-Bold (hrpldb.gsf) ;
+/Hershey-Plain-Duplex-Bold-Italic (hrpldbi.gsf) ;
+/Hershey-Plain-Triplex-Bold (hrpltb.gsf) ;
+/Hershey-Plain-Triplex-Bold-Italic (hrpltbi.gsf) ;
+
+/Hershey-Script-Complex-Bold (hrsccb.gsf) ;
+/Hershey-Script-Complex-Oblique (hrscco.gsf) ;
+/Hershey-Script-Simplex-Bold (hrscsb.gsf) ;
+/Hershey-Script-Simplex-Oblique (hrscso.gsf) ; % 5066556
+
+% Fonts consisting only of characters from the original Hershey
+% distribution. These are Type 3 fonts.
+
+/Hershey-Greek-Complex (hrgkc.gsf) ; % 5066557
+/Hershey-Greek-Simplex (hrgks.gsf) ;
+
+/Hershey-Plain (hrplr.gsf) ;
+/Hershey-Plain-Simplex (hrpls.gsf) ; % 5066560
+
+% Fonts created algorithmically from the above.
+
+/Hershey-Plain-Bold (hrplrb.gsf) ; % 5066561
+/Hershey-Plain-Bold-Oblique (hrplrbo.gsf) ;
+/Hershey-Plain-Oblique (hrplro.gsf) ;
+/Hershey-Plain-Simplex-Bold (hrplsb.gsf) ;
+/Hershey-Plain-Simplex-Bold-Oblique (hrplsbo.gsf) ;
+/Hershey-Plain-Simplex-Oblique (hrplso.gsf) ; % 5066566
+
+% This font, and only this font among the Hershey fonts, uses
+% the SymbolEncoding.
+
+/Hershey-Symbol (hrsyr.gsf) ; % 5066567
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Solaris 2 Display PostScript Type1 and Type3 fonts...
+%
+
+/Helvetica (Helvetica.pfa) ;
+/Helvetica-Bold (Helvetica-Bold.pfa) ;
+/Helvetica-BoldOblique (Helvetica-BoldOblique.pfa) ;
+/Helvetica-Oblique (Helvetica-Oblique.pfa) ;
+
+/Symbol (Symbol.pfa) ;
+/SymbolSet /Symbol ;
+
+/Times-Bold (Times-Bold.pfa) ;
+/Times-BoldItalic (Times-BoldItalic.pfa) ;
+/Times-Italic (Times-Italic.pfa) ;
+/Times-Roman (Times-Roman.pfa) ;
+/TimesNewRoman /Times-Roman ;
+/TimesNewRoman-Bold /Times-Bold ;
+/TimesNewRoman-BoldItalic /Times-BoldItalic ;
+/TimesNewRoman-Italic /Times-Italic ;
+
+/Dijkstra (Dijkstra.ps) ;
+
+/Hershey-Cyrillic (HrshCyr.ps) ;
+
+/Hershey-Gothic (HrshGoth.ps) ;
+
+/Hershey-Greek (HrshGrk.ps) ;
+/Hershey-Greek-Narrow (HrshGrkN.ps) ;
+/Hershey-Greekp (HrshGrkp.ps) ;
+
+/Hershey-Italic (HrshI.ps) ;
+/Hershey-Italic-Narrow (HrshIN.ps) ;
+/Hershey-Italic-Wide (HrshIW.ps) ;
+/Hershey-Roman (HrshRom.ps) ;
+/Hershey-Roman-Narrow (HrshRomN.ps) ;
+/Hershey-Roman-Wide (HrshRomW.ps) ;
+/Hershey-Romand (HrshRomd.ps) ;
+/Hershey-Romanp (HrshRomp.ps) ;
+
+/Hershey-Script (HrshScr.ps) ;
+/Hershey-Script-Narrow (HrshScrN.ps) ;
diff --git a/Master/xemtex/gslib/Fontmap.Ult b/Master/xemtex/gslib/Fontmap.Ult
new file mode 100644
index 00000000000..d68d95a7c79
--- /dev/null
+++ b/Master/xemtex/gslib/Fontmap.Ult
@@ -0,0 +1,147 @@
+% Copyright (C) 1990, 1995, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: Fontmap.Ult,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Fontmap.Ult is derived from the standard Fontmap file distributed with
+% ghostscript; for credits and sources see that file. The modifications here
+% are valid for ULTRIX 4.3, and consist of defining some fonts and font
+% aliases as the licensed fontfiles included in ULTRIX for use on ULTRIX
+% workstations, which give better quality than the free fontfiles available
+% for ghostscript. Under ULTRIX 4.3 the licensed fontfiles are found in
+%
+% /usr/lib/DPS/outline/decwin
+%
+% so that directory must either be built into ghostscript by redefining
+% GS_LIB_DEFAULT when ghostscript is compiled, or else by defining an
+% environmental variable GS_LIB_DEFAULT, which contains it as an element of
+% the path, when running ghostscript. For instance, under the KornShell
+%
+% GS_LIB_DEFAULT=/usr/gs:/usr/lib/DPS/outline/decwin:/usr/gs/fonts
+% export GS_LIB_DEFAULT
+%
+% Peter Kaiser (kaiser@acm.org) 27 January 1995
+% Updated by L. Peter Deutsch (ghost@aladdin.com) 5 January 1999
+% to include correct aliasing for the Bitstream Charter fonts
+
+/AvantGarde-Book (AvantGarde-Book) ;
+/AvantGarde-BookOblique (AvantGarde-BookOblique) ;
+/AvantGarde-Demi (AvantGarde-Demi) ;
+/AvantGarde-DemiOblique (AvantGarde-DemiOblique) ;
+/Courier (Courier) ;
+/Courier-Bold (Courier-Bold) ;
+/Courier-BoldOblique (Courier-BoldOblique) ;
+/Courier-Oblique (Courier-Oblique) ;
+/Helvetica (Helvetica) ;
+/Helvetica-Bold (Helvetica-Bold) ;
+/Helvetica-BoldOblique (Helvetica-BoldOblique) ;
+/Helvetica-Oblique (Helvetica-Oblique) ;
+/LubalinGraph-Book (LubalinGraph-Book) ;
+/LubalinGraph-BookOblique (LubalinGraph-BookOblique) ;
+/LubalinGraph-Demi (LubalinGraph-Demi) ;
+/LubalinGraph-DemiOblique (LubalinGraph-DemiOblique) ;
+/NewCenturySchlbk-Bold (NewCenturySchlbk-Bold) ;
+/NewCenturySchlbk-BoldItalic (NewCenturySchlbk-BoldItalic) ;
+/NewCenturySchlbk-Italic (NewCenturySchlbk-Italic) ;
+/NewCenturySchlbk-Roman (NewCenturySchlbk-Roman) ;
+/Souvenir-Demi (Souvenir-Demi) ;
+/Souvenir-DemiItalic (Souvenir-DemiItalic) ;
+/Souvenir-Light (Souvenir-Light) ;
+/Souvenir-LightItalic (Souvenir-LightItalic) ;
+/Symbol (Symbol) ;
+/Times-Bold (Times-Bold) ;
+/Times-BoldItalic (Times-BoldItalic) ;
+/Times-Italic (Times-Italic) ;
+/Times-Roman (Times-Roman) ;
+
+% Fonts distributed as part of ghostscript
+
+/Bookman-Demi (pbkd.gsf) ;
+/Bookman-DemiItalic (pbkdi.gsf) ;
+/Bookman-Light (pbkl.gsf) ;
+/Bookman-LightItalic (pbkli.gsf) ;
+/Calligraphic-Hiragana (fhirw.gsf) ;
+/Calligraphic-Katakana (fkarw.gsf) ;
+/CharterBT-Bold (bchb.pfa) ;
+/CharterBT-BoldItalic (bchbi.pfa) ;
+/CharterBT-Italic (bchri.pfa) ;
+/CharterBT-Roman (bchr.pfa) ;
+/Hershey-Gothic-English (hrger.pfa) ;
+/Hershey-Gothic-English-Bold (hrgerb.gsf) ;
+/Hershey-Gothic-English-Oblique (hrgero.gsf) ;
+/Hershey-Gothic-English-SemiBold (hrgerd.gsf) ;
+/Hershey-Gothic-German (hrgrr.pfa) ;
+/Hershey-Gothic-German-Bold (hrgrrb.gsf) ;
+/Hershey-Gothic-German-Oblique (hrgrro.gsf) ;
+/Hershey-Gothic-Italian (hritr.pfa) ;
+/Hershey-Gothic-Italian-Bold (hritrb.gsf) ;
+/Hershey-Gothic-Italian-Oblique (hritro.gsf) ;
+/Hershey-Greek-Complex (hrgkc.gsf) ;
+/Hershey-Greek-Simplex (hrgks.gsf) ;
+/Hershey-Plain (hrplr.gsf) ;
+/Hershey-Plain-Bold (hrplrb.gsf) ;
+/Hershey-Plain-Bold-Oblique (hrplrbo.gsf) ;
+/Hershey-Plain-Duplex (hrpld.pfa) ;
+/Hershey-Plain-Duplex-Bold (hrpldb.gsf) ;
+/Hershey-Plain-Duplex-Bold-Italic (hrpldbi.gsf) ;
+/Hershey-Plain-Duplex-Italic (hrpldi.pfa) ;
+/Hershey-Plain-Oblique (hrplro.gsf) ;
+/Hershey-Plain-Simplex (hrpls.gsf) ;
+/Hershey-Plain-Simplex-Bold (hrplsb.gsf) ;
+/Hershey-Plain-Simplex-Bold-Oblique (hrplsbo.gsf) ;
+/Hershey-Plain-Simplex-Oblique (hrplso.gsf) ;
+/Hershey-Plain-Triplex (hrplt.pfa) ;
+/Hershey-Plain-Triplex-Bold (hrpltb.gsf) ;
+/Hershey-Plain-Triplex-Bold-Italic (hrpltbi.gsf) ;
+/Hershey-Plain-Triplex-Italic (hrplti.pfa) ;
+/Hershey-Script-Complex (hrscc.pfa) ;
+/Hershey-Script-Complex-Bold (hrsccb.gsf) ;
+/Hershey-Script-Complex-Oblique (hrscco.gsf) ;
+/Hershey-Script-Simplex (hrscs.pfa) ;
+/Hershey-Script-Simplex-Bold (hrscsb.gsf) ;
+/Hershey-Script-Simplex-Oblique (hrscso.gsf) ;
+/Hershey-Symbol (hrsyr.gsf) ;
+/NimbusRomanNo9L-Regular (n021003l.gsf) ;
+/NimbusSansL-Regular (n019003l.gsf) ;
+/Palatino-Bold (pplb.gsf) ;
+/Palatino-BoldItalic (pplbi.gsf) ;
+/Palatino-Italic (pplri.gsf) ;
+/Palatino-Roman (pplr.gsf) ;
+/Shareware-Cyrillic-Italic (fcyri.gsf) ;
+/Shareware-Cyrillic-Regular (fcyr.gsf) ;
+/URWAntiquaT-RegularCondensed (u003043t.gsf) ;
+/URWGroteskT-Bold (u004006t.gsf) ;
+/Utopia-Bold (putb.pfa) ;
+/Utopia-BoldItalic (putbi.pfa) ;
+/Utopia-Italic (putri.pfa) ;
+/Utopia-Regular (putr.pfa) ;
+/ZapfChancery (zcr.gsf) ;
+/ZapfChancery-Bold (zcb.gsf) ;
+/ZapfChancery-Oblique (zcro.gsf) ;
+/ZapfDingbats (pzdr.gsf) ;
+
+% Font aliases
+
+/Charter-Roman /CharterBT-Roman ;
+/Charter-Italic /CharterBT-Italic ;
+/Charter-Bold /CharterBT-Bold ;
+/Charter-BoldItalic /CharterBT-BoldItalic ;
+/Courier-BoldItalic /Courier-BoldOblique ;
+/Courier-Italic /Courier-Oblique ;
+/Cyrillic /Shareware-Cyrillic-Regular ;
+/Cyrillic-Italic /Shareware-Cyrillic-Italic ;
+/Cyrillic-Regular /Shareware-Cyrillic-Regular ;
+/Helvetica-Narrow-Bold /Helvetica-Narrow ;
+/ZapfChancery-MediumItalic /ZapfChancery-Oblique ;
diff --git a/Master/xemtex/gslib/Fontmap.VMS b/Master/xemtex/gslib/Fontmap.VMS
new file mode 100644
index 00000000000..e58ce48c61d
--- /dev/null
+++ b/Master/xemtex/gslib/Fontmap.VMS
@@ -0,0 +1,424 @@
+% fontmap.vms - Ghostscript fontmap for VAX/VMS systems with DECwindows/Motif.
+%
+% Mathog, 14-SEP-2000. Modified slightly from that provided by 6.01.
+% Changed to use Courier font from Decwindows instead of Ghostscript
+% The hershey fonts are listed, but they are not constructed during a regular
+% build of the package.
+%
+% **************************
+%Uses all the XDPS Outline fonts (Type 1 fonts) provided with Motif.
+%
+%XDPS on VAX/VMS does not have Bookman, Palatino and ZapfChancery fonts, so
+%we still have to use the Ghostscript fonts for those. Helvetica-Narrow is also
+%missing. But then you get the LubalinGraph and Souvenir fonts which are just
+%beautiful!
+
+/AvantGarde-Book
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]AVANTGARDE-BOOK.XDPS$OUTLINE) ;
+/AvantGarde-BookOblique
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]AVANTGARDE-BOOKOBLIQUE.XDPS$OUTLINE) ;
+/AvantGarde-Demi
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]AVANTGARDE-DEMI.XDPS$OUTLINE) ;
+/AvantGarde-DemiOblique
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]AVANTGARDE-DEMIOBLIQUE.XDPS$OUTLINE) ;
+/Courier-Bold
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]COURIER-BOLD.XDPS$OUTLINE) ;
+/Courier-BoldOblique
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]COURIER-BOLDOBLIQUE.XDPS$OUTLINE) ;
+/Courier-Oblique
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]COURIER-OBLIQUE.XDPS$OUTLINE) ;
+/Courier
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]COURIER.XDPS$OUTLINE) ;
+/Helvetica-Bold
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]HELVETICA-BOLD.XDPS$OUTLINE) ;
+/Helvetica-BoldOblique
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]HELVETICA-BOLDOBLIQUE.XDPS$OUTLINE) ;
+/Helvetica-Oblique
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]HELVETICA-OBLIQUE.XDPS$OUTLINE) ;
+/Helvetica
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]HELVETICA.XDPS$OUTLINE) ;
+/LubalinGraph-Book
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]LUBALINGRAPH-BOOK.XDPS$OUTLINE) ;
+/LubalinGraph-BookOblique
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]LUBALINGRAPH-BOOKOBLIQUE.XDPS$OUTLINE) ;
+/LubalinGraph-Demi
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]LUBALINGRAPH-DEMI.XDPS$OUTLINE) ;
+/LubalinGraph-DemiOblique
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]LUBALINGRAPH-DEMIOBLIQUE.XDPS$OUTLINE) ;
+/NewCenturySchlbk-Roman
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]NEWCENTURYSCHLBK-ROMAN.XDPS$OUTLINE) ;
+/NewCenturySchlbk-Italic
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]NEWCENTURYSCHLBK-ITALIC.XDPS$OUTLINE) ;
+/NewCenturySchlbk-Bold
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]NEWCENTURYSCHLBK-BOLD.XDPS$OUTLINE) ;
+/NewCenturySchlbk-BoldItalic
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]NEWCENTURYSCHLBK-BOLDITALIC.XDPS$OUTLINE) ;
+/Souvenir-Light
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]SOUVENIR-LIGHT.XDPS$OUTLINE) ;
+/Souvenir-LightItalic
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]SOUVENIR-LIGHTITALIC.XDPS$OUTLINE) ;
+/Souvenir-Demi
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]SOUVENIR-DEMI.XDPS$OUTLINE) ;
+/Souvenir-DemiItalic
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]SOUVENIR-DEMIITALIC.XDPS$OUTLINE) ;
+%If you want the Apple symbol (SIC!) then remove the comment (%)
+%in front of character 240 in the following file (he he he)
+/Symbol
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]SYMBOL.XDPS$OUTLINE) ;
+/Times-Roman
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]TIMES-ROMAN.XDPS$OUTLINE) ;
+/Times-Italic
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]TIMES-ITALIC.XDPS$OUTLINE) ;
+/Times-Bold
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]TIMES-BOLD.XDPS$OUTLINE) ;
+/Times-BoldItalic
+ (SYS$COMMON:[SYSFONT.XDPS.OUTLINE]TIMES-BOLDITALIC.XDPS$OUTLINE) ;
+
+%
+%
+% Fonts contributed by:
+% URW++ Design and Development Incorporated
+% Poppenbuetteler Bogen 29A
+% D-22399 Hamburg
+% Germany
+% tel. +49 (40) 60 60 50
+% fax +49 (40) 60 60 51 11
+% http://www.urwpp.de
+% for distribution under the GNU License and Aladdin Free Public License.
+% See the notice at the head of this Fontmap file for licensing terms.
+% Each of these fonts is individually covered by the license:
+% for licensing purposes, they are not "part of" any larger entity.
+% The following notice applies to these fonts:
+%
+% Copyright URW Software, Copyright 1994 by URW.
+%
+
+% Actual fonts
+
+/URWBookmanL-DemiBold (b018015l.pfb) ;
+/URWBookmanL-DemiBoldItal (b018035l.pfb) ;
+/URWBookmanL-Ligh (b018012l.pfb) ;
+/URWBookmanL-LighItal (b018032l.pfb) ;
+
+/NimbusMonL-Regu (n022003l.pfb) ;
+/NimbusMonL-ReguObli (n022023l.pfb) ;
+/NimbusMonL-Bold (n022004l.pfb) ;
+/NimbusMonL-BoldObli (n022024l.pfb) ;
+
+/URWGothicL-Book (a010013l.pfb) ;
+/URWGothicL-BookObli (a010033l.pfb) ;
+/URWGothicL-Demi (a010015l.pfb) ;
+/URWGothicL-DemiObli (a010035l.pfb) ;
+
+/NimbusSanL-Regu (n019003l.pfb) ;
+/NimbusSanL-ReguItal (n019023l.pfb) ;
+/NimbusSanL-Bold (n019004l.pfb) ;
+/NimbusSanL-BoldItal (n019024l.pfb) ;
+
+/NimbusSanL-ReguCond (n019043l.pfb) ;
+/NimbusSanL-ReguCondItal (n019063l.pfb) ;
+/NimbusSanL-BoldCond (n019044l.pfb) ;
+/NimbusSanL-BoldCondItal (n019064l.pfb) ;
+
+/URWPalladioL-Roma (p052003l.pfb) ;
+/URWPalladioL-Ital (p052023l.pfb) ;
+/URWPalladioL-Bold (p052004l.pfb) ;
+/URWPalladioL-BoldItal (p052024l.pfb) ;
+
+/CenturySchL-Roma (c059013l.pfb) ;
+/CenturySchL-Ital (c059033l.pfb) ;
+/CenturySchL-Bold (c059016l.pfb) ;
+/CenturySchL-BoldItal (c059036l.pfb) ;
+
+/NimbusRomNo9L-Regu (n021003l.pfb) ;
+/NimbusRomNo9L-ReguItal (n021023l.pfb) ;
+/NimbusRomNo9L-Medi (n021004l.pfb) ;
+/NimbusRomNo9L-MediItal (n021024l.pfb) ;
+
+/StandardSymL (s050000l.pfb) ;
+
+/URWChanceryL-MediItal (z003034l.pfb) ;
+
+/Dingbats (d050000l.pfb) ;
+
+
+% Aliases
+
+/Bookman-Demi /URWBookmanL-DemiBold ;
+/Bookman-DemiItalic /URWBookmanL-DemiBoldItal ;
+/Bookman-Light /URWBookmanL-Ligh ;
+/Bookman-LightItalic /URWBookmanL-LighItal ;
+
+%/Courier /NimbusMonL-Regu ;
+%/Courier-Oblique /NimbusMonL-ReguObli ;
+%/Courier-Bold /NimbusMonL-Bold ;
+%/Courier-BoldOblique /NimbusMonL-BoldObli ;
+
+%/AvantGarde-Book /URWGothicL-Book ;
+%/AvantGarde-BookOblique /URWGothicL-BookObli ;
+%/AvantGarde-Demi /URWGothicL-Demi ;
+%/AvantGarde-DemiOblique /URWGothicL-DemiObli ;
+
+%/Helvetica /NimbusSanL-Regu ;
+%/Helvetica-Oblique /NimbusSanL-ReguItal ;
+%/Helvetica-Bold /NimbusSanL-Bold ;
+%/Helvetica-BoldOblique /NimbusSanL-BoldItal ;
+
+/Helvetica-Narrow /NimbusSanL-ReguCond ;
+/Helvetica-Narrow-Oblique /NimbusSanL-ReguCondItal ;
+/Helvetica-Narrow-Bold /NimbusSanL-BoldCond ;
+/Helvetica-Narrow-BoldOblique /NimbusSanL-BoldCondItal ;
+
+/Palatino-Roman /URWPalladioL-Roma ;
+/Palatino-Italic /URWPalladioL-Ital ;
+/Palatino-Bold /URWPalladioL-Bold ;
+/Palatino-BoldItalic /URWPalladioL-BoldItal ;
+
+%/NewCenturySchlbk-Roman /CenturySchL-Roma ;
+%/NewCenturySchlbk-Italic /CenturySchL-Ital ;
+%/NewCenturySchlbk-Bold /CenturySchL-Bold ;
+%/NewCenturySchlbk-BoldItalic /CenturySchL-BoldItal ;
+
+%/Times-Roman /NimbusRomNo9L-Regu ;
+%/Times-Italic /NimbusRomNo9L-ReguItal ;
+%/Times-Bold /NimbusRomNo9L-Medi ;
+%/Times-BoldItalic /NimbusRomNo9L-MediItal ;
+
+%/Symbol /StandardSymL ;
+
+/ZapfChancery-MediumItalic /URWChanceryL-MediItal ;
+
+/ZapfDingbats /Dingbats ;
+
+
+%
+%
+% Type 1 fonts contributed to the X11R5 distribution.
+%
+
+% The following notice accompanied the Charter fonts.
+%
+% (c) Copyright 1989-1992, Bitstream Inc., Cambridge, MA.
+%
+% You are hereby granted permission under all Bitstream propriety rights
+% to use, copy, modify, sublicense, sell, and redistribute the 4 Bitstream
+% Charter (r) Type 1 outline fonts and the 4 Courier Type 1 outline fonts
+% for any purpose and without restriction; provided, that this notice is
+% left intact on all copies of such fonts and that Bitstream's trademark
+% is acknowledged as shown below on all unmodified copies of the 4 Charter
+% Type 1 fonts.
+%
+% BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
+/CharterBT-Roman (bchr.pfa) ;
+/CharterBT-Italic (bchri.pfa) ;
+/CharterBT-Bold (bchb.pfa) ;
+/CharterBT-BoldItalic (bchbi.pfa) ;
+%Charter to CharterBT aliasing
+/Charter-Roman /CharterBT-Roman ;
+/Charter-Italic /CharterBT-Italic ;
+/Charter-Bold /CharterBT-Bold ;
+/Charter-BoldItalic /CharterBT-BoldItalic ;
+
+% IBM Courier - Copyright (c) IBM Corporation 1990, 1991
+%/Courier (ncrr.pfa) ;
+%/Courier-Italic (ncrri.pfa) ;
+%/Courier-Bold (ncrb.pfa) ;
+%/Courier-BoldItalic (ncrbi.pfa) ;
+%Oblique to Italic aliasing
+%/Courier-Oblique /Courier-Italic ;
+%/Courier-BoldOblique /Courier-BoldItalic ;
+/Courier-Italic /Courier-Oblique ;
+/Courier-BoldItalic /Courier-BoldOblique ;
+
+% The following notice accompanied the Utopia font:
+%
+% Permission to use, reproduce, display and distribute the listed
+% typefaces is hereby granted, provided that the Adobe Copyright notice
+% appears in all whole and partial copies of the software and that the
+% following trademark symbol and attribution appear in all unmodified
+% copies of the software:
+%
+% Copyright (c) 1989 Adobe Systems Incorporated
+% Utopia (R)
+% Utopia is a registered trademark of Adobe Systems Incorporated
+%
+% The Adobe typefaces (Type 1 font program, bitmaps and Adobe Font
+% Metric files) donated are:
+%
+% Utopia Regular
+% Utopia Italic
+% Utopia Bold
+% Utopia Bold Italic
+
+/Utopia-Regular (putr.gsf) ;
+/Utopia-Italic (putri.gsf) ;
+/Utopia-Bold (putb.gsf) ;
+/Utopia-BoldItalic (putbi.gsf) ;
+
+%
+%
+% Fonts contributed by URW GmbH for distribution under the GNU License.
+% The following notice accompanied these fonts:
+%
+% U004006T URW Grotesk 2031 Bold PostScript Type 1 Font Program
+% U003043T URW Antiqua 2051 Regular Condensed PostScript Type 1 Font Program
+%
+% Copyright (c) 1992 URW GmbH, Hamburg, Germany
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; wihtout even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+% See the GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 U.S.A.
+%
+% Address:
+% URW GmbH
+% PC Support
+% Harksheider Strasse 102
+% 2000 Hamburg 65
+% Germany
+% Phone: +49 40 60 60 50 (Reception)
+% Phone: +49 40 60 60 52 30 (PC Support)
+% Fax : +49 40 60 60 52 52
+%
+
+/URWAntiquaT-RegularCondensed (u003043t.gsf) ;
+/URWGroteskT-Bold (u004006t.gsf) ;
+
+%
+%
+% Shareware Kana fonts. These are subject to the following notice:
+%
+% These copyrighted fonts were developed by Kevin Hartig. Permission is
+% granted to freely distribute them in entirety along with this statement.
+% This is shareware. If you decide to use these fonts please contribute
+% $10 US to help support further freeware and shareware software development.
+% Questions and comments may be sent to:
+%
+% hartig@fsl.noaa.gov
+% khartig@nyx.cs.du.edu
+%
+% Kevin Hartig
+% 1126 Collyer Street
+% Longmont, CO 80501 USA
+%
+% copyright 1993.
+
+% Hiragana and Katakana fonts. The character names are inappropriate,
+% and the encoding is probably not related to any known standard.
+
+/Calligraphic-Hiragana (fhirw.gsf) ;
+/Calligraphic-Katakana (fkarw.gsf) ;
+
+%
+%
+% Public-domain fonts. These have no copyright, and are of unknown quality.
+
+% Cyrillic fonts. The character names are inappropriate,
+% and the encoding is probably not related to any known standard.
+
+/Shareware-Cyrillic-Regular (fcyr.gsf) ;
+/Shareware-Cyrillic-Italic (fcyri.gsf) ;
+
+% Aliases
+/Cyrillic /Cyrillic-Regular ;
+/Cyrillic-Regular /Shareware-Cyrillic-Regular ;
+/Cyrillic-Italic /Shareware-Cyrillic-Italic ;
+
+%
+%
+% Fonts converted from Hershey outlines. These are constructed and
+% maintained manually. These are also in the public domain.
+%
+% The suggested UniqueID's and filenames are constructed differently for
+% these than for the ones above, because of the strange way that the Hershey
+% fonts were constructed. The scheme for these looks like:
+%
+% 42TTXY0
+%
+% TT = typeface, X = ``class'', Y = variation
+%
+% The typeface names and numbers are listed in fonts.mak.
+%
+% class:
+% 0 = normal = r
+% 1 = simplex = s
+% 2 = complex = c
+% 3 = triplex = t
+% 4 = duplex = d
+%
+% variation:
+% 0 = normal (omitted)
+% 1 = oblique = o
+% 2 = italic = i
+% 3 = bold = b
+% 4 = bold oblique = bo
+% 5 = bold italic = bi
+%
+
+% Fonts created by Thomas Wolff <wolff@inf.fu-berlin.de>, by adding
+% accents, accented characters, and various other non-alphabetics
+% to the original Hershey fonts. These are "freeware", not to be sold.
+
+/Hershey-Gothic-English (hrger.pfa) ; % 5066533
+/Hershey-Gothic-German (hrgrr.pfa) ;
+/Hershey-Gothic-Italian (hritr.pfa) ;
+
+/Hershey-Plain-Duplex (hrpld.pfa) ;
+/Hershey-Plain-Duplex-Italic (hrpldi.pfa) ;
+/Hershey-Plain-Triplex (hrplt.pfa) ;
+/Hershey-Plain-Triplex-Italic (hrplti.pfa) ;
+
+/Hershey-Script-Complex (hrscc.pfa) ;
+/Hershey-Script-Simplex (hrscs.pfa) ; % 5066541
+
+% Fonts created algorithmically from the above.
+
+/Hershey-Gothic-English-Bold (hrgerb.gsf) ; % 5066542
+/Hershey-Gothic-English-Oblique (hrgero.gsf) ;
+/Hershey-Gothic-English-SemiBold (hrgerd.gsf) ;
+/Hershey-Gothic-German-Bold (hrgrrb.gsf) ;
+/Hershey-Gothic-German-Oblique (hrgrro.gsf) ;
+/Hershey-Gothic-Italian-Bold (hritrb.gsf) ;
+/Hershey-Gothic-Italian-Oblique (hritro.gsf) ;
+
+/Hershey-Plain-Duplex-Bold (hrpldb.gsf) ;
+/Hershey-Plain-Duplex-Bold-Italic (hrpldbi.gsf) ;
+/Hershey-Plain-Triplex-Bold (hrpltb.gsf) ;
+/Hershey-Plain-Triplex-Bold-Italic (hrpltbi.gsf) ;
+
+/Hershey-Script-Complex-Bold (hrsccb.gsf) ;
+/Hershey-Script-Complex-Oblique (hrscco.gsf) ;
+/Hershey-Script-Simplex-Bold (hrscsb.gsf) ;
+/Hershey-Script-Simplex-Oblique (hrscso.gsf) ; % 5066556
+
+% Fonts consisting only of characters from the original Hershey
+% distribution. These are Type 3 fonts.
+
+/Hershey-Greek-Complex (hrgkc.gsf) ; % 5066557
+/Hershey-Greek-Simplex (hrgks.gsf) ;
+
+/Hershey-Plain (hrplr.gsf) ;
+/Hershey-Plain-Simplex (hrpls.gsf) ; % 5066560
+
+% Fonts created algorithmically from the above.
+
+/Hershey-Plain-Bold (hrplrb.gsf) ; % 5066561
+/Hershey-Plain-Bold-Oblique (hrplrbo.gsf) ;
+/Hershey-Plain-Oblique (hrplro.gsf) ;
+/Hershey-Plain-Simplex-Bold (hrplsb.gsf) ;
+/Hershey-Plain-Simplex-Bold-Oblique (hrplsbo.gsf) ;
+/Hershey-Plain-Simplex-Oblique (hrplso.gsf) ; % 5066566
+
+% This font, and only this font among the Hershey fonts, uses
+% the SymbolEncoding.
+
+/Hershey-Symbol (hrsyr.gsf) ; % 5066567
diff --git a/Master/xemtex/gslib/Info-macos.plist b/Master/xemtex/gslib/Info-macos.plist
new file mode 100644
index 00000000000..9ece6edc4fa
--- /dev/null
+++ b/Master/xemtex/gslib/Info-macos.plist
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
+<plist version="0.9">
+<dict>
+ <key>CFBundleIdentifier</key>
+ <string>com.ghostscript.Ghostscript</string>
+ <key>CFBundleName</key>
+ <string>Ghostscript</string>
+ <key>CFBundleShortVersionString</key>
+ <string>703</string>
+ <key>NSExecutable</key>
+ <string>Ghostscript</string>
+</dict>
+</plist>
diff --git a/Master/xemtex/gslib/acctest.ps b/Master/xemtex/gslib/acctest.ps
new file mode 100644
index 00000000000..f32c25a7887
--- /dev/null
+++ b/Master/xemtex/gslib/acctest.ps
@@ -0,0 +1,100 @@
+%!
+% Check that operators do their access tests correctly.
+% $Id: acctest.ps,v 1.1.6.1 2002/04/10 09:22:58 giles Exp $
+
+% proc dotest => .
+/dotest
+ {
+ dup
+ mark
+ exch
+ stopped not % False if error, true if no error.
+ { (Allowed access: ) print cleartomark == }
+ if
+ clear
+ }
+def
+
+0 0 moveto % So the show commands don't bomb because of nocurrentpoint.
+
+{ [1 2] executeonly aload } dotest
+{ (string) executeonly (seek) anchorsearch } dotest
+{ (string) (seek) executeonly anchorsearch } dotest
+{ 100 101 (string) noaccess ashow} dotest
+{ 100 1 array readonly astore } dotest
+{ 100 101 102 103 104 (string) noaccess awidthshow } dotest
+{ 1 dict noacess begin } dotest
+{ 1 array executeonly 1 array copy } dotest
+{ 1 array 1 array readonly copy } dotest
+{ 1 dict noaccess 1 dict copy } dotest
+{ 1 dict 1 dict readonly copy } dotest
+{ 1 string executeonly 1 string copy } dotest
+{ 1 string 1 string readonly copy } dotest
+{ (100) executeonly cvi } dotest
+{ (string) executeonly cvn } dotest
+{ (100.001) executeonly cvr } dotest
+{ 1 10 1 string readonly cvrs } dotest
+{ true 5 string readonly cvs } dotest
+{ 1 dict readonly begin /foo true def } dotest
+{ 10 array readonly dictstack } dotest
+{ 1 string executeonly 1 string eq } dotest
+{ 1 string 1 string executeonly eq } dotest
+{ 10 array readonly execstack } dotest
+{ 1 string noaccess executeonly } dotest
+{ 1 array noaccess executeonly } dotest
+{ 1 array executeonly { pop } forall } dotest
+{ 1 dict noaccess { pop pop } forall } dotest
+{ 1 string executeonly { pop } forall } dotest
+{ (string1) executeonly (string2) ge } dotest
+{ (string1) (string2) executeonly ge } dotest
+{ 1 array executeonly 0 get } dotest
+{ 1 dict noaccess /key get } dotest
+{ 1 string executeonly 0 get } dotest
+{ 1 array executeonly 0 1 getinterval } dotest
+{ 1 string executeonly 0 1 getinterval } dotest
+{ (string1) executeonly (string2) gt } dotest
+{ (string1) (string2) executeonly gt } dotest
+{ 1 dict noaccess /key known } dotest
+{ {} (string) executeonly kshow } dotest
+{ (string1) executeonly (string2) le } dotest
+{ (string1) (string2) executeonly le } dotest
+{ 1 array executeonly length } dotest
+{ 1 dict noaccess length } dotest
+{ 1 string executeonly length } dotest
+%%{ /foo 1 dict def foo begin /bar foo def bar noaccess pop /key load } dotest
+{ (string1) executeonly (string2) lt } dotest
+{ (string1) (string2) executeonly lt } dotest
+{ 1 dict noaccess maxlength } dotest
+{ 1 string executeonly 1 string ne } dotest
+{ 1 string 1 string executeonly ne } dotest
+%{ newpath 0 0 moveto (a) false charpath
+% {} {} {} {} pathforall closepath } dotest
+{ 1 array executeonly 0 put } dotest
+{ 1 dict noaccess /key put } dotest
+{ 1 string executeonly 0 put } dotest
+{ 1 array executeonly 0 1 putinterval } dotest
+{ 1 string executeonly 0 1 putinterval } dotest
+{ (access.ps) (r) file executeonly read } dotest
+{ (access.ps) (r) file executeonly 10 string readhexstring } dotest
+{ (access.ps) (r) file 10 string readonly readhexstring } dotest
+{ (access.ps) (r) file executeonly 100 string readline } dotest
+{ (access.ps) (r) file 100 string readonly readline } dotest
+{ (access.ps) (r) file executeonly 10 string readstring } dotest
+{ (access.ps) (r) file 10 string readonly readstring } dotest
+% run does not check for no read access?
+{ (string) executeonly (seek) search } dotest
+{ (string) (seek) executeonly search } dotest
+{ (string) executeonly show }
+%% some test for store.
+{ (string) executeonly stringwidth } dotest
+{ (access.ps) (r) file executeonly token } dotest
+{ (10) executeonly token } dotest
+{ /foo 1 dict def foo begin /bar foo def bar noaccess pop /key where } dotest
+{ 100 101 102 (string) noaccess widthshow } dotest
+{ (/tmp/_.ps) noaccess (w) file closefile } dotest
+{ (/tmp/_.ps) (w) noaccess file closefile } dotest
+{ (/tmp/_.ps) (w) file executeonly 100 write } dotest
+{ (/tmp/_.ps) (w) file executeonly 10 string writehexstring } dotest
+{ (/tmp/_.ps) (w) file 10 string executeonly writehexstring } dotest
+{ (/tmp/_.ps) (w) file executeonly 10 string writestring } dotest
+{ (/tmp/_.ps) (w) file 10 string executeonly writestring } dotest
diff --git a/Master/xemtex/gslib/addxchar.ps b/Master/xemtex/gslib/addxchar.ps
new file mode 100644
index 00000000000..e85ddb659f3
--- /dev/null
+++ b/Master/xemtex/gslib/addxchar.ps
@@ -0,0 +1,358 @@
+% Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: addxchar.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Add the Central European and other Adobe extended Latin characters to a
+% Type 1 font.
+% Requires -dWRITESYSTEMDICT to disable access protection.
+
+(type1ops.ps) runlibfile
+
+% ---------------- Utilities ---------------- %
+
+/addce_dict 50 dict def
+addce_dict begin
+
+% Define the added copyright notice.
+/addednotice (. Portions Copyright (C) 1999 Aladdin Enterprises.) def
+
+% Open a font for modification by removing the FID and changing the
+% FontName. Removing UniqueID and XUID is not necessary, since we
+% will only be adding characters.
+/openfont { % <name> <font> openfont <name> <font'>
+ dup length dict copy
+ dup /FID undef
+ dup /FontName 3 index put
+} def
+
+% Do the equivalent of false charpath for a glyph.
+% This should really be an operator!
+/glyphpath { % <glyph> glyphpath -
+ currentfont /Encoding get 0 3 -1 roll put
+ <00> false charpath
+} def
+
+% Do the equivalent of charpath + pathbbox for a glyph.
+/glyphbbox { % <glyph> glyphbbox <llx> <lly> <urx> <ury>
+ % We cache this value, because it's expensive to compute.
+ BBoxes 1 index .knownget {
+ exch pop
+ } {
+ gsave newpath 0 0 moveto dup glyphpath [pathbbox] grestore
+ BBoxes 3 -1 roll 2 index put
+ } ifelse aload pop
+} def
+
+% Get the side bearing and width for a glyph.
+/glyphsbw { % <glyph> glyphsbw <lsbx> <wx>
+ % We cache this value, because it's expensive to compute.
+ SBW 1 index .knownget {
+ exch pop
+ } {
+ dup glyphcs { dup /hsbw eq { pop exit } if } forall
+ 2 array astore
+ SBW 3 -1 roll 2 index put
+ } ifelse aload pop
+} def
+
+% Get the CharString for a glyph, as an array.
+/glyphcs { % <glyph> glyphcs <array>
+ CharStrings exch get
+ 4330 exch dup length string .type1decrypt exch pop
+ dup length lenIV sub lenIV exch getinterval
+ 0 () /SubFileDecode filter [ exch charstack_read ]
+} def
+
+% Find an occurrence of a value in an array.
+/asearch { % <array> <value> asearch <index> true
+ % <array> <value> asearch false
+ false 0 4 2 roll exch {
+ % Stack: false index value element
+ 2 copy eq { pop pop exch not exch dup exit } if
+ exch 1 add exch
+ } forall pop pop
+} def
+
+% Convert an array back to a CharString.
+/csdef { % <glyph> <array> csdef -
+ charproc_string
+ 4330 exch dup .type1encrypt exch pop readonly
+ CharStrings 3 1 roll put
+} def
+
+% Split an accented character name.
+/splitaccented { % <Baccent> splitaccented <Baccent> <B> <accent>
+ dup =string cvs
+ dup 0 1 getinterval cvn
+ exch dup length 1 sub 1 exch getinterval cvn
+} def
+
+% Begin the definition of a 'seac' character.
+% Defines accent, base, abox, bbox.
+% The initial dx lines up the origins of the base and the accent.
+/beginseac { % <bchar> <achar> beginseac
+ % -mark- <lsbx> <wx> /hsbw <asb> <dx>
+ /accent exch def /base exch def
+ /abox [accent glyphbbox] def
+ /bbox [base glyphbbox] def
+ [ base glyphsbw /hsbw accent glyphsbw pop
+ dup 4 index sub
+} def
+
+% Center the accent over the base of a 'seac' character.
+/centeraccent { % <dx> centeraccent <adx>
+ bbox 2 get bbox 0 get add 2 div
+ abox 2 get abox 0 get add 2 div
+ sub add
+} def
+
+% Finish the definition of a 'seac' character.
+/finishseac { % <charname> -mark- ... <adx> <ady> finishseac -
+ exch cvi exch cvi
+ charindex base get charindex accent get /seac ] csdef
+} def
+
+% ---------------- Main program ---------------- %
+
+% Define accented characters that can be made with seac,
+% with the accent centered over the character.
+/seacchars [
+ /Abreve /Amacron
+ /Cacute /Ccaron /Dcaron
+ /Ecaron /Edotaccent /Emacron
+ /Gbreve
+ /Idotaccent /Imacron
+ /Lacute
+ /Nacute /Ncaron
+ /Ohungarumlaut /Omacron
+ /Racute /Rcaron
+ /Sacute /Scedilla
+ /Tcaron
+ /Uhungarumlaut /Umacron /Uogonek /Uring
+ /Zacute /Zdotaccent
+ /abreve /amacron
+ /cacute /ccaron
+ /ecaron /edotaccent /emacron
+ /gbreve
+ /lacute
+ /nacute /ncaron
+ /ohungarumlaut /omacron
+ /racute /rcaron
+ /sacute /scedilla
+ /uhungarumlaut /umacron /uring
+ /zacute /zdotaccent
+] def
+
+% Define seac characters where the accent lines up with the right
+% edge of the character.
+/seacrightchars [
+ /Aogonek /Eogonek /Iogonek /aogonek /eogonek /iogonek /uogonek
+] def
+
+% Define seac characters where the caron becomes an appended quoteright.
+/seaccaronchars [
+ /dcaron /lcaron /tcaron
+] def
+
+% Define seac characters using commaaccent.
+/seaccommachars [
+ /Gcommaaccent /Kcommaaccent /Lcommaaccent /Ncommaaccent /Rcommaaccent
+ /Scommaaccent /Tcommaaccent
+ /gcommaaccent /kcommaaccent /lcommaaccent /ncommaaccent /rcommaaccent
+ /scommaaccent /tcommaaccent
+] def
+
+% Define the characters copied from the Symbol font.
+/symbolchars [
+ /Delta /greaterequal /lessequal /lozenge /notequal /partialdiff
+ /summation
+] def
+
+% Define the procedures for editing the commaaccent character.
+% Delete all the hints, since it's too hard to adjust them.
+/caedit mark
+ /rmoveto { exch commatop sub cvi exch }
+ /hstem { pop pop pop }
+ /vstem 1 index
+ /callothersubr {
+ dup 3 eq { 4 { pop } repeat /skip true def } if
+ }
+ /pop { skip { pop /skip false def } if }
+.dicttomark def
+
+/addce { % <name> <font> addce <font'>
+ 20 dict begin
+ /origfont 1 index def
+ openfont
+ dup /CharStrings 2 copy get dup length dict copy put
+ dup /Encoding 2 copy get dup length array copy put
+ dup /FontInfo 2 copy get dup length dict copy put
+ definefont /font exch def
+ currentdict font end begin begin
+ font 1000 scalefont setfont
+ /symbolfont /Symbol findfont def
+ /BBoxes CharStrings length dict def
+ /SBW CharStrings length dict def
+
+ /italfactor FontInfo /ItalicAngle .knownget {
+ neg dup sin exch cos div
+ } {
+ 0
+ } ifelse def
+
+ % Invert the Encoding (needed for seac).
+
+ /charindex 256 dict def
+ 0 1 255 {
+ charindex exch Encoding 1 index get exch put
+ } for
+
+ % Add the commaaccent character, by moving the comma downward.
+
+ /comma glyphbbox /commatop exch def pop pop pop
+ /comma glyphcs
+ /skip false def
+ [ exch { caedit 1 index .knownget { exec } if } forall ]
+ /commaaccent exch csdef
+
+ % Add the accented characters that can be made with seac.
+
+ seacchars {
+ splitaccented beginseac
+ centeraccent
+ % If the accent would collide with the base character,
+ % raise it a little.
+ abox 1 get bbox 3 get sub dup 0 le {
+ % ... but not if the accent is in the low position.
+ abox 1 get 0 gt {
+ neg 60 add
+ % Adjust the X position if italic.
+ dup italfactor mul 3 -1 roll add exch
+ } {
+ pop 0
+ } ifelse
+ } {
+ pop 0
+ } ifelse
+ finishseac
+ } forall
+
+ seacrightchars {
+ splitaccented beginseac
+ bbox 2 get abox 2 get sub add % line up right edges
+ 0 finishseac
+ } forall
+
+ /dcroat /d /hyphen beginseac
+ bbox 2 get abox 2 get sub add % line up right edges
+ 0 finishseac
+
+ /imacron /dotlessi /macron beginseac
+ centeraccent
+ 0 finishseac
+
+ /Lcaron /L /quoteright beginseac
+ bbox 2 get abox 2 get sub add % line up right edges
+ 0 finishseac
+
+ seaccaronchars {
+ dup =string cvs 0 1 getinterval cvn /quoteright beginseac
+ % Move the quote to the right of the character.
+ bbox 2 get abox 0 get sub 50 add add
+ % Adjust the character width as well.
+ 4 -1 roll abox 2 get abox 0 get sub 50 add add cvi 4 1 roll
+ 0 finishseac
+ } forall
+
+ seaccommachars {
+ dup =string cvs 0 1 getinterval cvn /comma beginseac
+ centeraccent
+ commatop neg
+ % Lower the accent if the character extends below
+ % the baseline
+ bbox 1 get 0 .min add
+ finishseac
+ } forall
+
+ % Add the characters from the Symbol font.
+ % We should scale them to match the FontBBox, but we don't.
+
+ symbolchars {
+ symbolfont /CharStrings get 1 index get
+ CharStrings 3 1 roll put
+ } forall
+
+ % Add the one remaining character.
+
+ CharStrings /Dcroat CharStrings /Eth get put
+
+ % Recompute the FontBBox, since some of the accented characters
+ % may have enlarged it.
+
+ /llx 1000 def /lly 1000 def /urx 0 def /ury 0 def
+ CharStrings {
+ pop glyphbbox
+ ury .max /ury exch def urx .max /urx exch def
+ lly .min /lly exch def llx .min /llx exch def
+ } forall
+ /FontBBox llx cvi lly cvi urx ceiling cvi ury ceiling cvi 4 packedarray def
+
+ % Restore the Encoding and wrap up.
+
+ [/Copyright /Notice] {
+ FontInfo 1 index .knownget {
+ addednotice concatstrings FontInfo 3 1 roll put
+ } {
+ pop
+ } ifelse
+ } forall
+ FontName font openfont
+ dup /Encoding origfont /Encoding get put
+ definefont
+
+ end end
+} def
+
+currentdict end readonly pop % addce_dict
+
+/addce { addce_dict begin addce end } def
+
+% ---------------- Integration ---------------- %
+
+% We would like to patch the font loader so that it adds the extended
+% Latin characters automatically. We haven't done this yet.
+
+% ---------------- Test program ---------------- %
+
+/TEST where { pop TEST } { false } ifelse {
+ /FONT where { pop } { /FONT /Palatino-Italic def } ifelse
+ (unprot.ps) runlibfile
+ unprot
+ (wrfont.ps) runlibfile
+ wrfont_dict begin
+ /eexec_encrypt true def
+ /binary_CharStrings true def
+ end
+ save
+ FONT findfont
+ /Latin-CE exch addce setfont
+ (t.ce.pfb) (w) file dup writefont closefile
+ restore
+ (prfont.ps) runlibfile
+ (t.ce.pfb) (r) file .loadfont
+ /Latin-CE DoFont
+ quit
+} if
diff --git a/Master/xemtex/gslib/afmdiff.awk b/Master/xemtex/gslib/afmdiff.awk
new file mode 100644
index 00000000000..7e5339ceb75
--- /dev/null
+++ b/Master/xemtex/gslib/afmdiff.awk
@@ -0,0 +1,150 @@
+###=====================================================================
+### Read two Adobe Font Metric files, and compute tables of the
+### differences in character repertoire, declared widths (WX), and
+### bounding boxes.
+###
+### Usage:
+### awk -f afmdiff.awk file1.afm file2.afm
+###
+### Author:
+### Nelson H. F. Beebe
+### Center for Scientific Computing
+### University of Utah
+### Department of Mathematics, 322 INSCC
+### 155 S 1400 E RM 233
+### Salt Lake City, UT 84112-0090
+### USA
+### Email: beebe@math.utah.edu, beebe@acm.org, beebe@computer.org,
+### beebe@ieee.org (Internet)
+### WWW URL: http://www.math.utah.edu/~beebe
+### Telephone: +1 801 581 5254
+### FAX: +1 801 585 1640, +1 801 581 4148
+###
+########################################################################
+########################################################################
+########################################################################
+### ###
+### awkdiff.awk: compare two Adobe Font Metric files ###
+### ###
+### Copyright (C) 2000 Nelson H. F. Beebe ###
+### ###
+### This program is covered by the GNU General Public License (GPL), ###
+### version 2 or later, available as the file COPYING in the program ###
+### source distribution, and on the Internet at ###
+### ###
+### ftp://ftp.gnu.org/gnu/GPL ###
+### ###
+### http://www.gnu.org/copyleft/gpl.html ###
+### ###
+### This program is free software; you can redistribute it and/or ###
+### modify it under the terms of the GNU General Public License as ###
+### published by the Free Software Foundation; either version 2 of ###
+### the License, or (at your option) any later version. ###
+### ###
+### This program is distributed in the hope that it will be useful, ###
+### but WITHOUT ANY WARRANTY; without even the implied warranty of ###
+### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ###
+### GNU General Public License for more details. ###
+### ###
+### You should have received a copy of the GNU General Public ###
+### License along with this program; if not, write to the Free ###
+### Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, ###
+### MA 02111-1307 USA ###
+### ###
+### This program may also be distributed as part of AFPL ###
+### Ghostscript, under the terms of the Aladdin Free Public License ###
+### (the "License"). ###
+### ###
+### Every copy of AFPL Ghostscript must include a copy of the ###
+### License, normally in a plain ASCII text file named PUBLIC. The ###
+### License grants you the right to copy, modify and redistribute ###
+### AFPL Ghostscript, but only under certain conditions ###
+### described in the License. Among other things, the License ###
+### requires that the copyright notice and this notice be preserved ###
+### on all copies. ###
+### ###
+########################################################################
+########################################################################
+########################################################################
+#
+# [29-Apr-2000]
+#=======================================================================
+
+/^FontName/ { FontName[++NFontName] = $2 }
+
+
+/^C / {
+ if (NFontName == 1)
+ CharName1[$8]++
+ if (NFontName == 2)
+ CharName2[$8]++
+ }
+
+
+/^C / {
+ name = $8
+ if (name in WX)
+ {
+ if (WX[name] != $5)
+ WXDIFF[name] = WX[name] - $5
+ }
+ else
+ WX[name] = $5
+ }
+
+
+/^C / {
+ name = $8
+ bx = $13 - $11
+ if (name in BX)
+ {
+ if (BX[name] != bx)
+ BXDIFF[name] = BX[name] - bx
+ }
+ else
+ BX[name] = bx
+ }
+
+
+/^C / {
+ name = $8
+ by = $14 - $12
+ if (name in BY)
+ {
+ if (BY[name] != by)
+ BYDIFF[name] = BY[name] - by
+ }
+ else
+ BY[name] = by
+ }
+
+
+END {
+ Sortpipe = "sort -f | pr -c3 -w80 -l1 -t"
+ print "Comparison of AFM metrics in files:", ARGV[1], ARGV[2]
+ print "Font names:", FontName[1], FontName[2]
+ show_name_diffs(FontName[2],CharName2, FontName[1],CharName1)
+ show_name_diffs(FontName[1],CharName1, FontName[2],CharName2)
+ show_num_diffs("WX width differences", WXDIFF)
+ show_num_diffs("Bounding box width differences", BXDIFF)
+ show_num_diffs("Bounding box height differences",BYDIFF)
+ }
+
+function show_name_diffs(font1,array1,font2,array2, name)
+{
+ print "\nChars from", font2, "missing from", font1 ":"
+ for (name in array2)
+ {
+ if (!(name in array1))
+ printf("%s\n", name) | Sortpipe
+ }
+ close(Sortpipe)
+}
+
+function show_num_diffs(title,array, name)
+{
+ printf("\n%s:\n", title)
+ for (name in array)
+ printf("%-15s\t%4d\n", name, array[name]) | Sortpipe
+ close(Sortpipe)
+}
diff --git a/Master/xemtex/gslib/align.ps b/Master/xemtex/gslib/align.ps
new file mode 100644
index 00000000000..ee1ba89fa3f
--- /dev/null
+++ b/Master/xemtex/gslib/align.ps
@@ -0,0 +1,74 @@
+% Copyright (C) 1989, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: align.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Print a page that indicates the proper settings of Margins and HWMargins
+% for a given device. Requires a Level 2 system.
+
+% Reset the offset and margins.
+
+<<
+ /PageOffset [0 0]
+ /Margins [0 0]
+ /.HWMargins [0 0 0 0]
+>>
+setpagedevice
+<<
+ /ImagingBBox null
+>>
+setpagedevice
+
+% Determine the actual page size.
+
+clippath pathbbox newpath
+/y1 exch def /x1 exch def pop pop
+
+% Draw lines that should be exactly 1" in from each edge,
+% and should extend precisely to the edge of the paper.
+
+1 setlinewidth
+0 setgray
+72 0 moveto 0 y1 rlineto stroke
+0 72 moveto x1 0 rlineto stroke
+
+% Print the text in the middle of the page.
+
+/S 80 string def
+108 480 moveto
+/Helvetica 12 selectfont
+ { currentfile S readline pop dup (%END) eq { pop exit } if
+ gsave show grestore 0 -15 rmoveto
+ } loop
+Let the distance in inches from the left edge of the page to
+the vertical line be H, and from the bottom edge to the
+horizontal line be V; let the lengths of the gaps at the top
+and bottom of the vertical line be T and B respectively, and
+the gaps at the left and right of the horizontal line be L
+and R. For correct alignment of pages, put the following line
+in a file named (for example) margins.ps, and then mention
+margins.ps on the gs command line when printing any of your
+own files:
+
+ << /.HWMargins [ml mb mr mt] /Margins [x y] >> setpagedevice
+
+where
+ ml = L * 72, mb = B * 72, mr = R * 72, mt = T * 72,
+%END
+/res currentpagedevice /.MarginsHWResolution get def
+( x = (1 - H) * ) show res 0 get =string cvs show
+(, y = (V - 1) * ) show res 1 get =string cvs show
+
+showpage
diff --git a/Master/xemtex/gslib/bdftops b/Master/xemtex/gslib/bdftops
new file mode 100644
index 00000000000..2726410c1a5
--- /dev/null
+++ b/Master/xemtex/gslib/bdftops
@@ -0,0 +1,3 @@
+#!/bin/sh
+# $Id: bdftops,v 1.2 2001/03/27 21:15:55 alexcher Exp $
+exec gs -q -dBATCH -dNODISPLAY -- bdftops.ps "$@"
diff --git a/Master/xemtex/gslib/bdftops.bat b/Master/xemtex/gslib/bdftops.bat
new file mode 100644
index 00000000000..43686b714bb
--- /dev/null
+++ b/Master/xemtex/gslib/bdftops.bat
@@ -0,0 +1,5 @@
+@echo off
+@rem $Id: bdftops.bat,v 1.3 2001/03/27 21:15:55 alexcher Exp $
+
+call gssetgs.bat
+%GSC% -q -dBATCH -dNODISPLAY -- bdftops.ps %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/Master/xemtex/gslib/bdftops.cmd b/Master/xemtex/gslib/bdftops.cmd
new file mode 100755
index 00000000000..a6292b9cd45
--- /dev/null
+++ b/Master/xemtex/gslib/bdftops.cmd
@@ -0,0 +1,7 @@
+/* $Id: bdftops.cmd,v 1.2 2001/03/27 21:15:55 alexcher Exp $ */
+/*
+ * This file is maintained by a user: if you have any questions about it,
+ * please contact Mark Hale (mark.hale@physics.org).
+ */
+
+@gsos2 -q -dBATCH -dNODISPLAY -- bdftops.ps %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/Master/xemtex/gslib/bdftops.ps b/Master/xemtex/gslib/bdftops.ps
new file mode 100644
index 00000000000..af7b183487c
--- /dev/null
+++ b/Master/xemtex/gslib/bdftops.ps
@@ -0,0 +1,796 @@
+% Copyright (C) 1990, 1995, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: bdftops.ps,v 1.3.2.2.2.1 2003/04/12 14:02:38 giles Exp $
+% bdftops.ps
+% Convert a BDF file (possibly with (an) associated AFM file(s))
+% to a PostScript Type 1 font (without eexec encryption).
+% The resulting font will work with any PostScript language interpreter,
+% but not with ATM or other font rasterizers lacking a complete interpreter.
+
+/envBDF 120 dict def
+envBDF begin
+
+% "Import" the image-to-path package.
+% This also brings in the Type 1 opcodes (type1ops.ps).
+ (impath.ps) runlibfile
+
+% "Import" the font-writing package.
+ (wrfont.ps) runlibfile
+ wrfont_dict begin
+ /binary_CharStrings false def
+ /binary_tokens false def
+ /encrypt_CharStrings true def
+ /standard_only true def
+ end
+ /lenIV 0 def
+
+% Invert the StandardEncoding vector.
+ 256 dict dup begin
+ 0 1 255 { dup StandardEncoding exch get exch def } for
+ end /StandardDecoding exch def
+
+% Define the properties copied to FontInfo.
+ mark
+ (COPYRIGHT) /Notice
+ (FAMILY_NAME) /FamilyName
+ (FULL_NAME) /FullName
+ (WEIGHT_NAME) /Weight
+ .dicttomark /properties exch def
+
+% Define the character sequences for synthesizing missing composite
+% characters in the standard encoding.
+ mark
+ /AE [/A /E]
+ /OE [/O /E]
+ /ae [/a /e]
+ /ellipsis [/period /period /period]
+ /emdash [/hyphen /hyphen /hyphen]
+ /endash [/hyphen /hyphen]
+ /fi [/f /i]
+ /fl [/f /l]
+ /germandbls [/s /s]
+ /guillemotleft [/less /less]
+ /guillemotright [/greater /greater]
+ /oe [/o /e]
+ /quotedblbase [/comma /comma]
+ .dicttomark /composites exch def
+
+% Define the procedure for synthesizing composites.
+% This must not be bound.
+ /compose
+ { exch pop
+ FontMatrix Private /composematrix get invertmatrix concat
+ 0 0 moveto
+ dup gsave false charpath pathbbox currentpoint grestore
+ 6 2 roll setcachedevice show
+ } def
+% Define the CharString procedure that calls compose, with the string
+% on the stack. This too must remain unbound.
+ /compose_proc
+ { Private /compose get exec
+ } def
+
+% Define aliases for missing characters similarly.
+ mark
+ /acute /quoteright
+ /bullet /asterisk
+ /cedilla /comma
+ /circumflex /asciicircum
+ /dieresis /quotedbl
+ /dotlessi /i
+ /exclamdown /exclam
+ /florin /f
+ /fraction /slash
+ /grave /quoteleft
+ /guilsinglleft /less
+ /guilsinglright /greater
+ /hungarumlaut /quotedbl
+ /periodcentered /asterisk
+ /questiondown /question
+ /quotedblleft /quotedbl
+ /quotedblright /quotedbl
+ /quotesinglbase /comma
+ /quotesingle /quoteright
+ /tilde /asciitilde
+ .dicttomark /aliases exch def
+
+% Define overstruck characters that can be synthesized with seac.
+ mark
+ [ /Aacute /Acircumflex /Adieresis /Agrave /Aring /Atilde
+ /Ccedilla
+ /Eacute /Ecircumflex /Edieresis /Egrave
+ /Iacute /Icircumflex /Idieresis /Igrave
+ /Lslash
+ /Ntilde
+ /Oacute /Ocircumflex /Odieresis /Ograve /Otilde
+ /Scaron
+ /Uacute /Ucircumflex /Udieresis /Ugrave
+ /Yacute /Ydieresis
+ /Zcaron
+ /aacute /acircumflex /adieresis /agrave /aring /atilde
+ /ccedilla
+ /eacute /ecircumflex /edieresis /egrave
+ /iacute /icircumflex /idieresis /igrave
+ /lslash
+ /ntilde
+ /oacute /ocircumflex /odieresis /ograve /otilde
+ /scaron
+ /uacute /ucircumflex /udieresis /ugrave
+ /yacute /ydieresis
+ /zcaron
+ ]
+ { dup =string cvs
+ [ exch dup 0 1 getinterval cvn
+ exch dup length 1 sub 1 exch getinterval cvn
+ ]
+ } forall
+ /cent [/c /slash]
+ /daggerdbl [/bar /equal]
+ /divide [/colon /hyphen]
+ /sterling [/L /hyphen]
+ /yen [/Y /equal]
+ .dicttomark /accentedchars exch def
+
+% ------ Output utilities ------ %
+
+ /ws {psfile exch writestring} bind def
+ /wl {ws (\n) ws} bind def
+ /wt {=string cvs ws ( ) ws} bind def
+
+% ------ BDF file parsing utilities ------ %
+
+% Define a buffer for reading the BDF file.
+ /buffer 400 string def
+
+% Read a line from the BDF file into the buffer.
+% Ignore empty (zero-length) lines.
+% Define /keyword as the first word on the line.
+% Define /args as the remainder of the line.
+% If the keyword is equal to commentword, skip the line.
+% (If commentword is equal to a space, never skip.)
+ /nextline
+ { { bdfile buffer readline not
+ { (Premature EOF\n) print stop } if
+ dup length 0 ne { exit } if pop
+ }
+ loop
+ ( ) search
+ { /keyword exch def pop }
+ { /keyword exch def () }
+ ifelse
+ /args exch def
+ keyword commentword eq { nextline } if
+ } bind def
+
+% Get a word argument from args. We do *not* copy the string.
+ /warg % warg -> string
+ { args ( ) search
+ { exch pop exch }
+ { () }
+ ifelse /args exch def
+ } bind def
+
+% Get an integer argument from args.
+ /iarg % iarg -> int
+ { warg cvi
+ } bind def
+
+% Get a numeric argument from args.
+ /narg % narg -> int|real
+ { warg cvr
+ dup dup cvi eq { cvi } if
+ } bind def
+
+% Convert the remainder of args into a string.
+ /remarg % remarg -> string
+ { args copystring
+ } bind def
+
+% Get a string argument that occupies the remainder of args.
+ /sarg % sarg -> string
+ { args (") anchorsearch
+ { pop /args exch def } { pop } ifelse
+ args args length 1 sub get (") 0 get eq
+ { args 0 args length 1 sub getinterval /args exch def } if
+ args copystring
+ } bind def
+
+% Check that the keyword is the expected one.
+ /checkline % (EXPECTED-KEYWORD) checkline ->
+ { dup keyword ne
+ { (Expected ) print =
+ (Line=) print keyword print ( ) print args print (\n) print stop
+ } if
+ pop
+ } bind def
+
+% Read a line and check its keyword.
+ /getline % (EXPECTED-KEYWORD) getline ->
+ { nextline checkline
+ } bind def
+
+% Find the first/last non-zero bit of a non-zero byte.
+ /fnzb
+ { 0 { exch dup 128 ge { pop exit } { dup add exch 1 add } ifelse }
+ loop
+ } bind def
+ /lnzb
+ { 7 { exch dup 1 and 0 ne { pop exit } { -1 bitshift exch 1 sub } ifelse }
+ loop
+ } bind def
+
+% ------ Type 1 encoding utilities ------ %
+
+% Parse the side bearing and width information that begins a CharString.
+% Arguments: charstring. Result: sbx sby wx wy substring.
+ /parsesbw
+ { mark exch lenIV
+ { % stack: mark ... string dropcount
+ dup 2 index length exch sub getinterval
+ dup 0 get dup 32 lt { pop exit } if
+ dup 246 le
+ { 139 sub exch 1 }
+ { dup 250 le
+ { 247 sub 8 bitshift 108 add 1 index 1 get add exch 2 }
+ { dup 254 le
+ { 251 sub 8 bitshift 108 add 1 index 1 get add neg exch 2 }
+ { pop dup 1 get 128 xor 128 sub
+ 8 bitshift 1 index 2 get add
+ 8 bitshift 1 index 3 get add
+ 8 bitshift 1 index 4 get add exch 5
+ } ifelse
+ } ifelse
+ } ifelse
+ } loop
+ counttomark 3 eq { 0 3 1 roll 0 exch } if
+ 6 -1 roll pop
+ } bind def
+
+% Find the side bearing and width information that begins a CharString.
+% Arguments: charstring. Result: charstring sizethroughsbw.
+ /findsbw
+ { dup parsesbw 4 { exch pop } repeat skipsbw
+ } bind def
+ /skipsbw % charstring sbwprefix -> sizethroughsbw
+ { length 1 index length exch sub
+ 2 copy get 12 eq { 2 } { 1 } ifelse add
+ } bind def
+
+% Encode a number, and append it to a string.
+% Arguments: str num. Result: newstr.
+ /concatnum
+ { dup dup -107 ge exch 107 le and
+ { 139 add 1 string dup 0 3 index put }
+ { dup dup -1131 ge exch 1131 le and
+ { dup 0 ge { 16#f694 } { neg 16#fa94 } ifelse add
+ 2 string dup 0 3 index -8 bitshift put
+ dup 1 3 index 255 and put
+ }
+ { 5 string dup 0 255 put exch
+ 2 copy 1 exch -24 bitshift 255 and put
+ 2 copy 2 exch -16 bitshift 255 and put
+ 2 copy 3 exch -8 bitshift 255 and put
+ 2 copy 4 exch 255 and put
+ exch
+ }
+ ifelse
+ }
+ ifelse exch pop concatstrings
+ } bind def
+
+% ------ Point arithmetic utilities ------ %
+
+ /ptadd { exch 4 -1 roll add 3 1 roll add } bind def
+ /ptexch { 4 2 roll } bind def
+ /ptneg { neg exch neg exch } bind def
+ /ptpop { pop pop } bind def
+ /ptsub { ptneg ptadd } bind def
+
+% ------ The main program ------ %
+
+ /readBDF % <infilename> <outfilename> <fontname>
+ % <encodingname> <uniqueID> <xuid> readBDF -> <font>
+ { /xuid exch def % may be null
+ /uniqueID exch def % may be -1
+ /encodingname exch def
+ /encoding encodingname cvx exec def
+ /fontname exch def
+ /psname exch def
+ /bdfname exch def
+ gsave % so we can set the CTM to the font matrix
+
+% Open the input files. We don't open the output file until
+% we've done a minimal validity check on the input.
+ bdfname (r) file /bdfile exch def
+ /commentword ( ) def
+
+% Check for the STARTFONT.
+ (STARTFONT) getline
+ args (2.1) ne { (Not version 2.1\n) print stop } if
+
+% Initialize the font.
+ /Font 20 dict def
+ Font begin
+ /FontName fontname def
+ /PaintType 0 def
+ /FontType 1 def
+ uniqueID 0 gt { /UniqueID uniqueID def } if
+ xuid null ne { /XUID xuid def } if
+ /Encoding encoding def
+ /FontInfo 20 dict def
+ /Private 20 dict def
+ currentdict end currentdict end
+ exch begin begin % insert font above environment
+
+% Initialize the Private dictionary in the font.
+ Private begin
+ /-! {string currentfile exch readhexstring pop} readonly def
+ /-| {string currentfile exch readstring pop} readonly def
+ /|- {readonly def} readonly def
+ /| {readonly put} readonly def
+ /BlueValues [] def
+ /lenIV lenIV def
+ /MinFeature {16 16} def
+ /password 5839 def
+ /UniqueID uniqueID def
+ end % Private
+
+% Invert the Encoding, for synthesizing composite characters.
+ /decoding encoding length dict def
+ 0 1 encoding length 1 sub
+ { dup encoding exch get exch decoding 3 1 roll put }
+ for
+
+% Now open the output file.
+ psname (w) file /psfile exch def
+
+% Put out a header compatible with the Adobe "standard".
+ (%!FontType1-1.0: ) ws fontname wt (000.000) wl
+ (% This is a font description converted from ) ws
+ bdfname wl
+ (% by bdftops running on ) ws
+ statusdict /product get ws ( revision ) ws
+ revision =string cvs ws (.) wl
+
+% Copy the initial comments, up to FONT.
+ true
+ { nextline
+ keyword (COMMENT) ne {exit} if
+ { (% Here are the initial comments from the BDF file:\n%) wl
+ } if false
+ (%) ws remarg wl
+ } loop pop
+ () wl
+ /commentword (COMMENT) def % do skip comments from now on
+
+% Read and process the FONT, SIZE, and FONTBOUNDINGBOX.
+ % If we cared about FONT, we'd use it here. If the BDF files
+ % from MIT had PostScript names rather than X names, we would
+ % care; but what's there is unusable, so we discard FONT.
+ % The FONTBOUNDINGBOX may not be reliable, so we discard it too.
+ (FONT) checkline
+ (SIZE) getline
+ /pointsize iarg def /xres iarg def /yres iarg def
+ (FONTBOUNDINGBOX) getline
+ nextline
+
+% Initialize the font bounding box bookeeping.
+ /fbbxo 1000 def
+ /fbbyo 1000 def
+ /fbbxe -1000 def
+ /fbbye -1000 def
+
+% Read and process the properties. We only care about a few of them.
+ keyword (STARTPROPERTIES) eq
+ { iarg
+ { nextline
+ properties keyword known
+ { FontInfo properties keyword get sarg readonly put
+ } if
+ } repeat
+ (ENDPROPERTIES) getline
+ nextline
+ } if
+
+% Compute and set the FontMatrix.
+ Font /FontMatrix
+ [ 0.001 0 0 0.001 xres mul yres div 0 0 ] readonly
+ dup setmatrix put
+
+% Read and process the header for the bitmaps.
+ (CHARS) checkline
+ /ccount iarg def
+
+% Initialize the CharStrings dictionary.
+ /charstrings ccount
+ composites length add
+ aliases length add
+ accentedchars length add
+ 1 add dict def % 1 add for .notdef
+ /isfixedwidth true def
+ /fixedwidth null def
+ /subrcount 0 def
+ /subrs [] def
+
+% Read the bitmap data. This reads the remainder of the file.
+% We do this before processing the bitmaps so that we can compute
+% the correct FontBBox first.
+ /chardata ccount dict def
+ ccount -1 1
+ { (STARTCHAR) getline
+ /charname remarg def
+ (ENCODING) getline
+ /eindex iarg def
+ eindex dup 0 ge exch 255 le and
+ { charname /charname StandardEncoding eindex get def
+ charname /.notdef eq eindex 0 gt and
+ { /charname (A) eindex =string cvs concatstrings cvn def
+ }
+ if
+ (/) print charname =string cvs print (,) print print
+ }
+ { (/) print charname print
+ }
+ ifelse
+ 10 mod 1 eq { (\n) print flush } if
+ (SWIDTH) getline
+ /swx iarg pointsize mul 1000 div xres mul 72 div def
+ /swy iarg pointsize mul 1000 div xres mul 72 div def
+ (DWIDTH) getline % Ignore, use SWIDTH instead
+ (BBX) getline
+ /bbw iarg def /bbh iarg def /bbox iarg def /bboy iarg def
+ nextline
+ keyword (ATTRIBUTES) eq
+ { nextline
+ } if
+ (BITMAP) checkline
+
+% Update the font bounding box.
+ /fbbxo fbbxo bbox .min def
+ /fbbyo fbbyo bboy .min def
+ /fbbxe fbbxe bbox bbw add .max def
+ /fbbye fbbye bboy bbh add .max def
+
+% Read the bits for this character.
+ /raster bbw 7 add 8 idiv def
+ /cbits raster bbh mul string def
+ cbits length 0 gt
+ { 0 raster cbits length raster sub
+ { cbits exch raster getinterval
+ bdfile buffer readline not
+ { (EOF in bitmap\n) print stop } if
+ % stack has <cbits.interval> <buffer.interval>
+ 0 () /SubFileDecode filter
+ exch 2 copy readhexstring pop pop pop closefile
+ } for
+ } if
+
+ (ENDCHAR) getline
+
+% Save the character data.
+ chardata charname [swx swy bbw bbh bbox bboy cbits] put
+ } for
+
+ (ENDFONT) getline
+
+% Allocate the buffers for the bitmap and the outline,
+% according to the font bounding box.
+ /fbbw fbbxe fbbxo sub def
+ /fbbh fbbye fbbyo sub def
+ /fraster fbbw 7 add 8 idiv def
+ /bits fraster fbbh mul 200 .max 65535 .min string def
+ /outline bits length 6 mul 65535 .min string def
+
+% Process the characters.
+ chardata
+ { exch /charname exch def aload pop
+ /cbits exch def
+ /bboy exch def /bbox exch def
+ /bbh exch def /bbw exch def
+ /swy exch def /swx exch def
+
+% The bitmap handed to type1imagepath must have the correct height,
+% because type1imagepath uses this to compute the scale factor,
+% so we have to clear the unused parts of it.
+ /raster bbw 7 add 8 idiv def
+ bits dup 0 1 raster fbbh mul 1 sub
+ { 0 put dup } for
+ pop pop
+ bits raster fbbh bbh sub mul cbits putinterval
+
+% Compute the font entry, converting the bitmap to an outline.
+ bits 0 raster fbbh mul getinterval % the bitmap image
+ bbw fbbh % bitmap width & height
+ swx swy % width x & y
+ bbox neg bboy neg % origin x & y
+ % Account for lenIV when converting the outline.
+ outline lenIV outline length lenIV sub getinterval
+ type1imagepath
+ length lenIV add
+ outline exch 0 exch getinterval
+
+% Check for a fixed width font.
+ isfixedwidth
+ { fixedwidth null eq
+ { /fixedwidth swx def }
+ { fixedwidth swx ne { /isfixedwidth false def } if }
+ ifelse
+ } if
+
+% Finish up the character.
+ copystring
+ charname exch charstrings 3 1 roll put
+ } forall
+
+% Add CharStrings entries for aliases.
+ aliases
+ { charstrings 2 index known not charstrings 2 index known and
+ { charstrings exch get charstrings 3 1 roll put
+ }
+ { pop pop
+ }
+ ifelse
+ }
+ forall
+
+% If this is not a fixed-width font, synthesize missing characters
+% out of available ones.
+ isfixedwidth not
+ { false composites
+ { 1 index charstrings exch known not
+ 1 index { decoding exch known and } forall
+ { ( /) print 1 index bits cvs print
+ /combine exch def
+ 0 1 combine length 1 sub
+ { dup combine exch get decoding exch get
+ bits 3 1 roll put
+ } for
+ bits 0 combine length getinterval copystring
+ [ exch /compose_proc load aload pop ] cvx
+ charstrings 3 1 roll put
+ pop true
+ }
+ { pop pop }
+ ifelse
+ }
+ forall flush
+ { Private /composematrix matrix put
+ Private /compose /compose load put
+ }
+ if
+ }
+ if
+
+% Synthesize accented characters with seac if needed and possible.
+ accentedchars
+ { aload pop /accent exch def /base exch def
+ buffer cvs /accented exch def
+ charstrings accented known not
+ charstrings base known and
+ charstrings accent known and
+ StandardDecoding base known and
+ StandardDecoding accent known and
+ encoding StandardDecoding base get get base eq and
+ encoding StandardDecoding accent get get accent eq and
+ { ( /) print accented print
+ charstrings base get findsbw 0 exch getinterval
+ /acstring exch def % start with sbw of base
+ charstrings accent get parsesbw
+ 4 { pop } repeat % just leave sbx
+ acstring exch concatnum
+ 0 concatnum 0 concatnum % adx ady
+ decoding base get concatnum % bchar
+ decoding accent get concatnum % achar
+ s_seac concatstrings
+ charstrings exch accented copystring exch put
+ } if
+ } forall
+
+% Make a CharStrings entry for .notdef.
+ outline lenIV <8b8b0d0e> putinterval % 0 0 hsbw endchar
+ charstrings /.notdef outline 0 lenIV 4 add getinterval copystring put
+
+% Encrypt the CharStrings and Subrs (in place).
+ charstrings
+ { % Be careful not to encrypt aliased characters twice,
+ % since they share their CharString.
+ aliases 2 index known
+ { charstrings aliases 3 index get .knownget
+ { 1 index ne }
+ { true }
+ ifelse
+ }
+ { true
+ }
+ ifelse
+ 1 index type /stringtype eq and
+ { 4330 exch dup .type1encrypt exch pop
+ readonly charstrings 3 1 roll put
+ }
+ { pop pop
+ }
+ ifelse
+ }
+ forall
+ 0 1 subrcount 1 sub
+ { dup subrs exch get
+ 4330 exch dup .type1encrypt exch pop
+ subrs 3 1 roll put
+ }
+ for
+
+% Make most of the remaining entries in the font dictionaries.
+
+% The Type 1 font machinery really only works with a 1000 unit
+% character coordinate system. Set this up here, by computing the factor
+% to make the X entry in the FontMatrix come out at exactly 0.001.
+ /fontscale 1000 fbbh div yres mul xres div def
+ Font /FontBBox
+ [ fbbxo fontscale mul
+ fbbyo fontscale mul
+ fbbxe fontscale mul
+ fbbye fontscale mul
+ ] cvx readonly put
+ Font /CharStrings charstrings readonly put
+ FontInfo /FullName known not
+ { % Some programs insist on FullName being present.
+ FontInfo /FullName FontName dup length string cvs put
+ }
+ if
+ FontInfo /isFixedPitch isfixedwidth put
+ subrcount 0 gt
+ { Private /Subrs subrs 0 subrcount getinterval readonly put
+ } if
+
+% Determine the italic angle and underline position
+% by actually installing the font.
+ save
+ /_temp_ Font definefont setfont
+ [1000 0 0 1000 0 0] setmatrix % mitigate rounding problems
+% The italic angle is the multiple of -5 degrees
+% that minimizes the width of the 'I'.
+ 0 9999 0 5 85
+ { dup rotate
+ newpath 0 0 moveto (I) false charpath
+ dup neg rotate
+ pathbbox pop exch pop exch sub
+ dup 3 index lt { 4 -2 roll } if
+ pop pop
+ }
+ for pop
+% The underline position is halfway between the bottom of the 'A'
+% and the bottom of the FontBBox.
+ newpath 0 0 moveto (A) false charpath
+ FontMatrix concat
+ pathbbox pop pop exch pop
+% Put the values in FontInfo.
+ 3 -1 roll
+ restore
+ Font /FontBBox get 1 get add 2 div cvi
+ dup FontInfo /UnderlinePosition 3 -1 roll put
+ 2 div abs FontInfo /UnderlineThickness 3 -1 roll put
+ FontInfo /ItalicAngle 3 -1 roll put
+
+% Clean up and finish.
+ grestore
+ bdfile closefile
+ Font currentdict end end begin % remove font from dict stack
+ (\n) print flush
+
+ } bind def
+
+% ------ Reader for AFM files ------ %
+
+% Dictionary for looking up character keywords
+ /cmdict 6 dict dup begin
+ /C { /c iarg def } def
+ /N { /n warg copystring def } def
+ /WX { /w narg def } def
+ /W0X /WX load def
+ /W /WX load def
+ /W0 /WX load def
+ end def
+
+ /readAFM % fontdict afmfilename readAFM -> fontdict
+ { (r) file /bdfile exch def
+ /Font exch def
+ /commentword (Comment) def
+
+% Check for the StartFontMetrics.
+ (StartFontMetrics) getline
+ args cvr 2.0 lt { (Not version 2.0 or greater\n) print stop } if
+
+% Look for StartCharMetrics, then parse the character metrics.
+% The only information we care about is the X width.
+ /metrics 0 dict def
+ { nextline
+ keyword (EndFontMetrics) eq { exit } if
+ keyword (StartCharMetrics) eq
+ { iarg dup dict /metrics exch def
+ { /c -1 def /n null def /w null def
+ nextline buffer
+ { token not { exit } if
+ dup cmdict exch known
+ { exch /args exch def cmdict exch get exec args }
+ { pop }
+ ifelse
+ } loop
+ c 0 ge n null ne or w null ne and
+ { n null eq { /n Font /Encoding get c get def } if
+ metrics n w put
+ }
+ if
+ }
+ repeat
+ (EndCharMetrics) getline
+ } if
+ } loop
+
+% Insert the metrics in the font.
+ metrics length 0 ne
+ { Font /Metrics metrics readonly put
+ } if
+ Font
+ } bind def
+
+end % envBDF
+
+% Enter the main program in the current dictionary.
+/bdfafmtops % infilename afmfilename* outfilename fontname
+ % encodingname uniqueID xuid
+ { envBDF begin
+ 7 -2 roll exch 7 2 roll % afm* in out fontname encodingname uniqueID xuid
+ readBDF % afm* font
+ exch { readAFM } forall
+ save exch
+ dup /FontName get exch definefont
+ setfont
+ psfile writefont
+ restore
+ psfile closefile
+ end
+ } bind def
+
+% If the program was invoked from the command line, run it now.
+[ shellarguments
+ { counttomark 4 ge
+ { dup 0 get
+ dup 48 ge exch 57 le and % last arg starts with a digit?
+ { /StandardEncoding } % no encodingname
+ { cvn } % have encodingname
+ ifelse
+ exch (.) search % next-to-last arg has . in it?
+ { mark 4 1 roll % have xuid
+ { cvi exch pop exch (.) search not { exit } if }
+ loop cvi ]
+ 3 -1 roll cvi exch
+ }
+ { cvi null % no xuid
+ }
+ ifelse
+ counttomark 5 roll
+ counttomark 6 sub array astore
+ 7 -2 roll cvn 7 -3 roll % make sure fontname is a name
+ bdfafmtops
+ }
+ { cleartomark
+ (Usage:\n bdftops xx.bdf [yy1.afm ...] zz.gsf fontname uniqueID [xuid] [encodingname]\n) print flush
+ mark
+ }
+ ifelse
+ }
+if pop
diff --git a/Master/xemtex/gslib/bj8.rpd b/Master/xemtex/gslib/bj8.rpd
new file mode 100644
index 00000000000..fce6c2d4b7d
--- /dev/null
+++ b/Master/xemtex/gslib/bj8.rpd
@@ -0,0 +1,17 @@
+
+StartEntry: U_CanonBJC8200
+GSDriver: uniprint
+Description: {Canon BJC-8200 (UP)}
+About: { \
+ Canon BJC-8200 uniprint driver settings.\
+ }
+Resolution: {NA} {NA} {}
+ BitsPerPixel: {bj8pp12f} {1200x1200DpI, photo paper pro, color, rendered}
+ BitsPerPixel: {bj8hg12f} {1200x1200DpI, high gloss photo film, color, rendered}
+ BitsPerPixel: {bj8gc12f} {1200x1200DpI, glossy photo cards, color, rendered}
+ BitsPerPixel: {bj8oh06n} {600x600DpI, transparencies, color, rendered}
+ BitsPerPixel: {bj8ts06n} {600x600DpI, t-shirt transfer, color, rendered}
+ BitsPerPixel: {bj8pa06n} {600x600DpI, plain paper, color, rendered}
+
+EndEntry
+#
diff --git a/Master/xemtex/gslib/bj8gc12f.upp b/Master/xemtex/gslib/bj8gc12f.upp
new file mode 100644
index 00000000000..fc65a23f9f2
--- /dev/null
+++ b/Master/xemtex/gslib/bj8gc12f.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 8200, (1200DpI)^2, glossy photo card, high quality"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYKgenerate
+-dupRendering=/FSCMYK32
+-dupOutputFormat=/Canon
+-r1200x1200
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupCyanTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupYellowTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupBeginPageCommand="<
+ 1b5b 4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 71 0100 01
+ 1b28 64 0400 04b0 04b0
+ 1b28 63 0300 3005 04
+ 1b28 6c 0200 340d
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bj8hg12f.upp b/Master/xemtex/gslib/bj8hg12f.upp
new file mode 100644
index 00000000000..94f72352ee0
--- /dev/null
+++ b/Master/xemtex/gslib/bj8hg12f.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 8200, (1200DpI)^2, high gloss photo, high quality"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYKgenerate
+-dupRendering=/FSCMYK32
+-dupOutputFormat=/Canon
+-r1200x1200
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupCyanTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupYellowTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupBeginPageCommand="<
+ 1b5b 4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 71 0100 01
+ 1b28 64 0400 04b0 04b0
+ 1b28 63 0300 3006 04
+ 1b28 6c 0200 3406
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bj8oh06n.upp b/Master/xemtex/gslib/bj8oh06n.upp
new file mode 100644
index 00000000000..1ce812d24fa
--- /dev/null
+++ b/Master/xemtex/gslib/bj8oh06n.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 8200, (600DpI)^2, OHP, normal quality"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYKgenerate
+-dupRendering=/FSCMYK32
+-dupOutputFormat=/Canon
+-r600x600
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupCyanTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupYellowTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupBeginPageCommand="<
+ 1b5b 4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 71 0100 01
+ 1b28 64 0400 0258 0258
+ 1b28 63 0300 3002 03
+ 1b28 6c 0200 3402
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bj8pa06n.upp b/Master/xemtex/gslib/bj8pa06n.upp
new file mode 100644
index 00000000000..295cc065fe6
--- /dev/null
+++ b/Master/xemtex/gslib/bj8pa06n.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 8200, (600DpI)^2, plain paper, normal quality"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYKgenerate
+-dupRendering=/FSCMYK32
+-dupOutputFormat=/Canon
+-r600x600
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupCyanTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupYellowTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupBeginPageCommand="<
+ 1b5b 4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 71 0100 01
+ 1b28 64 0400 0258 0258
+ 1b28 63 0300 3000 03
+ 1b28 6c 0200 3400
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bj8pp12f.upp b/Master/xemtex/gslib/bj8pp12f.upp
new file mode 100644
index 00000000000..46ee43d5867
--- /dev/null
+++ b/Master/xemtex/gslib/bj8pp12f.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 8200, (1200DpI)^2, professional photo paper, highest quality"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYKgenerate
+-dupRendering=/FSCMYK32
+-dupOutputFormat=/Canon
+-r1200x1200
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupCyanTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupYellowTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupBeginPageCommand="<
+ 1b5b 4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 71 0100 01
+ 1b28 64 0400 04b0 04b0
+ 1b28 63 0300 3009 04
+ 1b28 6c 0200 340d
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bj8ts06n.upp b/Master/xemtex/gslib/bj8ts06n.upp
new file mode 100644
index 00000000000..01135066ec6
--- /dev/null
+++ b/Master/xemtex/gslib/bj8ts06n.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 8200, (600DpI)^2, t-shirt transfer, normal quality"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYKgenerate
+-dupRendering=/FSCMYK32
+-dupOutputFormat=/Canon
+-r600x600
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupCyanTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupYellowTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupBeginPageCommand="<
+ 1b5b 4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 71 0100 01
+ 1b28 64 0400 0258 0258
+ 1b28 63 0300 3003 03
+ 1b28 6c 0200 3403
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bjc610a0.upp b/Master/xemtex/gslib/bjc610a0.upp
new file mode 100644
index 00000000000..05f389dc6bd
--- /dev/null
+++ b/Master/xemtex/gslib/bjc610a0.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 610, 360x360DpI, plain paper high speed, color, rendered"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Canon
+-r360x360
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0058 0.0164 0.0301 0.0463 0.0648 0.0851 0.1073
+0.1311 0.1564 0.1832 0.2114 0.2408 0.2716 0.3035 0.3366
+0.3708 0.4061 0.4425 0.4798 0.5182 0.5576 0.5978 0.6391
+0.6812 0.7242 0.7681 0.8128 0.8584 0.9048 0.9520 1.0000
+}"
+-dupCyanTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupYellowTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupBeginPageCommand="<
+ 1b5b4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 63 0300 100200
+ 1b28 64 0200 0168
+ 1b28 6c 0200 1400
+ 1b28 67 0100 E5
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bjc610a1.upp b/Master/xemtex/gslib/bjc610a1.upp
new file mode 100644
index 00000000000..fcd0afe8b11
--- /dev/null
+++ b/Master/xemtex/gslib/bjc610a1.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 610, 360x360DpI, plain paper, color, rendered"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Canon
+-r360x360
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0058 0.0164 0.0301 0.0463 0.0648 0.0851 0.1073
+0.1311 0.1564 0.1832 0.2114 0.2408 0.2716 0.3035 0.3366
+0.3708 0.4061 0.4425 0.4798 0.5182 0.5576 0.5978 0.6391
+0.6812 0.7242 0.7681 0.8128 0.8584 0.9048 0.9520 1.0000
+}"
+-dupCyanTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupYellowTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupBeginPageCommand="<
+ 1b5b4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 63 0300 100110
+ 1b28 64 0200 0168
+ 1b28 6c 0200 1400
+ 1b28 67 0100 E5
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bjc610a2.upp b/Master/xemtex/gslib/bjc610a2.upp
new file mode 100644
index 00000000000..6c1fb6ad3fd
--- /dev/null
+++ b/Master/xemtex/gslib/bjc610a2.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 610, 360x360DpI, coated paper, color, rendered"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Canon
+-r360x360
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0058 0.0164 0.0301 0.0463 0.0648 0.0851 0.1073
+0.1311 0.1564 0.1832 0.2114 0.2408 0.2716 0.3035 0.3366
+0.3708 0.4061 0.4425 0.4798 0.5182 0.5576 0.5978 0.6391
+0.6812 0.7242 0.7681 0.8128 0.8584 0.9048 0.9520 1.0000
+}"
+-dupCyanTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupYellowTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupBeginPageCommand="<
+ 1b5b4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 63 0300 101110
+ 1b28 64 0200 0168
+ 1b28 6c 0200 1410
+ 1b28 67 0100 E5
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bjc610a3.upp b/Master/xemtex/gslib/bjc610a3.upp
new file mode 100644
index 00000000000..8345ed68731
--- /dev/null
+++ b/Master/xemtex/gslib/bjc610a3.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 610, 360x360DpI, transparency film, color, rendered"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Canon
+-r360x360
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupCyanTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupYellowTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupBeginPageCommand="<
+ 1b5b4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 63 0300 102110
+ 1b28 64 0200 0168
+ 1b28 6c 0200 1420
+ 1b28 67 0100 E5
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bjc610a4.upp b/Master/xemtex/gslib/bjc610a4.upp
new file mode 100644
index 00000000000..d53b879865b
--- /dev/null
+++ b/Master/xemtex/gslib/bjc610a4.upp
@@ -0,0 +1,45 @@
+-supModel="Canon BJC 610, 360x360DpI, back print film, color, rendered"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Canon
+-r360x360
+-dupYFlip
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0058 0.0164 0.0301 0.0463 0.0648 0.0851 0.1073
+0.1311 0.1564 0.1832 0.2114 0.2408 0.2716 0.3035 0.3366
+0.3708 0.4061 0.4425 0.4798 0.5182 0.5576 0.5978 0.6391
+0.6812 0.7242 0.7681 0.8128 0.8584 0.9048 0.9520 1.0000
+}"
+-dupCyanTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupYellowTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupBeginPageCommand="<
+ 1b5b4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 63 0300 103110
+ 1b28 64 0200 0168
+ 1b28 6c 0200 1430
+ 1b28 67 0100 E5
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bjc610a5.upp b/Master/xemtex/gslib/bjc610a5.upp
new file mode 100644
index 00000000000..fb6b5b668fd
--- /dev/null
+++ b/Master/xemtex/gslib/bjc610a5.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 610, 360x360DpI, fabric sheet, color, rendered"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Canon
+-r360x360
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0058 0.0164 0.0301 0.0463 0.0648 0.0851 0.1073
+0.1311 0.1564 0.1832 0.2114 0.2408 0.2716 0.3035 0.3366
+0.3708 0.4061 0.4425 0.4798 0.5182 0.5576 0.5978 0.6391
+0.6812 0.7242 0.7681 0.8128 0.8584 0.9048 0.9520 1.0000
+}"
+-dupCyanTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupYellowTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupBeginPageCommand="<
+ 1b5b4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 63 0300 104110
+ 1b28 64 0200 0168
+ 1b28 6c 0200 1850
+ 1b28 67 0100 E5
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bjc610a6.upp b/Master/xemtex/gslib/bjc610a6.upp
new file mode 100644
index 00000000000..438e08453b0
--- /dev/null
+++ b/Master/xemtex/gslib/bjc610a6.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 610, 360x360DpI, glossy paper, color, rendered"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Canon
+-r360x360
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0058 0.0164 0.0301 0.0463 0.0648 0.0851 0.1073
+0.1311 0.1564 0.1832 0.2114 0.2408 0.2716 0.3035 0.3366
+0.3708 0.4061 0.4425 0.4798 0.5182 0.5576 0.5978 0.6391
+0.6812 0.7242 0.7681 0.8128 0.8584 0.9048 0.9520 1.0000
+}"
+-dupCyanTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupYellowTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupBeginPageCommand="<
+ 1b5b4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 63 0300 105110
+ 1b28 64 0200 0168
+ 1b28 6c 0200 1460
+ 1b28 67 0100 E5
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bjc610a7.upp b/Master/xemtex/gslib/bjc610a7.upp
new file mode 100644
index 00000000000..d8333f42c06
--- /dev/null
+++ b/Master/xemtex/gslib/bjc610a7.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 610, 360x360DpI, high gloss film, color, rendered"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Canon
+-r360x360
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupCyanTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupYellowTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupBeginPageCommand="<
+ 1b5b4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 63 0300 106110
+ 1b28 64 0200 0168
+ 1b28 6c 0200 1470
+ 1b28 67 0100 E5
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bjc610a8.upp b/Master/xemtex/gslib/bjc610a8.upp
new file mode 100644
index 00000000000..6ec6804e7b6
--- /dev/null
+++ b/Master/xemtex/gslib/bjc610a8.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 610, 360x360DpI, high resolution paper, color, rendered"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Canon
+-r360x360
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0058 0.0164 0.0301 0.0463 0.0648 0.0851 0.1073
+0.1311 0.1564 0.1832 0.2114 0.2408 0.2716 0.3035 0.3366
+0.3708 0.4061 0.4425 0.4798 0.5182 0.5576 0.5978 0.6391
+0.6812 0.7242 0.7681 0.8128 0.8584 0.9048 0.9520 1.0000
+}"
+-dupCyanTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupYellowTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupBeginPageCommand="<
+ 1b5b4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 63 0300 107110
+ 1b28 64 0200 0168
+ 1b28 6c 0200 14a0
+ 1b28 67 0100 E5
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bjc610b1.upp b/Master/xemtex/gslib/bjc610b1.upp
new file mode 100644
index 00000000000..06d1a296b96
--- /dev/null
+++ b/Master/xemtex/gslib/bjc610b1.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 610, 720x720DpI, plain paper, color, rendered"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Canon
+-r720x720
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0029 0.0082 0.0151 0.0232 0.0324 0.0426 0.0537
+0.0655 0.0782 0.0916 0.1057 0.1204 0.1358 0.1517 0.1683
+0.1854 0.2030 0.2212 0.2399 0.2591 0.2788 0.2989 0.3195
+0.3406 0.3621 0.3840 0.4064 0.4292 0.4524 0.4760 0.5000
+}"
+-dupCyanTransfer="{
+0.0000 0.0004 0.0017 0.0037 0.0067 0.0104 0.0150 0.0204
+0.0266 0.0337 0.0416 0.0504 0.0599 0.0703 0.0816 0.0937
+0.1066 0.1203 0.1349 0.1503 0.1665 0.1836 0.2015 0.2202
+0.2398 0.2601 0.2814 0.3034 0.3263 0.3501 0.3746 0.4000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0004 0.0017 0.0037 0.0067 0.0104 0.0150 0.0204
+0.0266 0.0337 0.0416 0.0504 0.0599 0.0703 0.0816 0.0937
+0.1066 0.1203 0.1349 0.1503 0.1665 0.1836 0.2015 0.2202
+0.2398 0.2601 0.2814 0.3034 0.3263 0.3501 0.3746 0.4000
+}"
+-dupYellowTransfer="{
+0.0000 0.0004 0.0017 0.0037 0.0067 0.0104 0.0150 0.0204
+0.0266 0.0337 0.0416 0.0504 0.0599 0.0703 0.0816 0.0937
+0.1066 0.1203 0.1349 0.1503 0.1665 0.1836 0.2015 0.2202
+0.2398 0.2601 0.2814 0.3034 0.3263 0.3501 0.3746 0.4000
+}"
+-dupBeginPageCommand="<
+ 1b5b4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 63 0300 101110
+ 1b28 64 0200 02d0
+ 1b28 6c 0200 1410
+ 1b28 67 0100 E5
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bjc610b2.upp b/Master/xemtex/gslib/bjc610b2.upp
new file mode 100644
index 00000000000..d8364600153
--- /dev/null
+++ b/Master/xemtex/gslib/bjc610b2.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 610, 720x720DpI, coated paper, color, rendered"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Canon
+-r720x720
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0029 0.0082 0.0151 0.0232 0.0324 0.0426 0.0537
+0.0655 0.0782 0.0916 0.1057 0.1204 0.1358 0.1517 0.1683
+0.1854 0.2030 0.2212 0.2399 0.2591 0.2788 0.2989 0.3195
+0.3406 0.3621 0.3840 0.4064 0.4292 0.4524 0.4760 0.5000
+}"
+-dupCyanTransfer="{
+0.0000 0.0005 0.0021 0.0047 0.0083 0.0130 0.0187 0.0255
+0.0333 0.0421 0.0520 0.0630 0.0749 0.0879 0.1020 0.1171
+0.1332 0.1504 0.1686 0.1878 0.2081 0.2294 0.2518 0.2752
+0.2997 0.3252 0.3517 0.3793 0.4079 0.4376 0.4683 0.5000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0005 0.0021 0.0047 0.0083 0.0130 0.0187 0.0255
+0.0333 0.0421 0.0520 0.0630 0.0749 0.0879 0.1020 0.1171
+0.1332 0.1504 0.1686 0.1878 0.2081 0.2294 0.2518 0.2752
+0.2997 0.3252 0.3517 0.3793 0.4079 0.4376 0.4683 0.5000
+}"
+-dupYellowTransfer="{
+0.0000 0.0005 0.0021 0.0047 0.0083 0.0130 0.0187 0.0255
+0.0333 0.0421 0.0520 0.0630 0.0749 0.0879 0.1020 0.1171
+0.1332 0.1504 0.1686 0.1878 0.2081 0.2294 0.2518 0.2752
+0.2997 0.3252 0.3517 0.3793 0.4079 0.4376 0.4683 0.5000
+}"
+-dupBeginPageCommand="<
+ 1b5b4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 63 0300 101110
+ 1b28 64 0200 02d0
+ 1b28 6c 0200 1410
+ 1b28 67 0100 E5
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bjc610b3.upp b/Master/xemtex/gslib/bjc610b3.upp
new file mode 100644
index 00000000000..79c948ca6fb
--- /dev/null
+++ b/Master/xemtex/gslib/bjc610b3.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 610, 720x720DpI, transparency film, color, rendered"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Canon
+-r720x720
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupCyanTransfer="{
+0.0000 0.0005 0.0021 0.0047 0.0083 0.0130 0.0187 0.0255
+0.0333 0.0421 0.0520 0.0630 0.0749 0.0879 0.1020 0.1171
+0.1332 0.1504 0.1686 0.1878 0.2081 0.2294 0.2518 0.2752
+0.2997 0.3252 0.3517 0.3793 0.4079 0.4376 0.4683 0.5000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0005 0.0021 0.0047 0.0083 0.0130 0.0187 0.0255
+0.0333 0.0421 0.0520 0.0630 0.0749 0.0879 0.1020 0.1171
+0.1332 0.1504 0.1686 0.1878 0.2081 0.2294 0.2518 0.2752
+0.2997 0.3252 0.3517 0.3793 0.4079 0.4376 0.4683 0.5000
+}"
+-dupYellowTransfer="{
+0.0000 0.0005 0.0021 0.0047 0.0083 0.0130 0.0187 0.0255
+0.0333 0.0421 0.0520 0.0630 0.0749 0.0879 0.1020 0.1171
+0.1332 0.1504 0.1686 0.1878 0.2081 0.2294 0.2518 0.2752
+0.2997 0.3252 0.3517 0.3793 0.4079 0.4376 0.4683 0.5000
+}"
+-dupBeginPageCommand="<
+ 1b5b4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 63 0300 102110
+ 1b28 64 0200 02d0
+ 1b28 6c 0200 1420
+ 1b28 67 0100 E5
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bjc610b4.upp b/Master/xemtex/gslib/bjc610b4.upp
new file mode 100644
index 00000000000..68b2460b615
--- /dev/null
+++ b/Master/xemtex/gslib/bjc610b4.upp
@@ -0,0 +1,45 @@
+-supModel="Canon BJC 610, 720x720DpI, back print film, color, rendered"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Canon
+-r720x720
+-dupYFlip
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupCyanTransfer="{
+0.0000 0.0005 0.0019 0.0042 0.0075 0.0117 0.0169 0.0229
+0.0300 0.0379 0.0468 0.0567 0.0674 0.0791 0.0918 0.1054
+0.1199 0.1353 0.1517 0.1690 0.1873 0.2065 0.2266 0.2477
+0.2697 0.2927 0.3165 0.3414 0.3671 0.3938 0.4214 0.4500
+}"
+-dupMagentaTransfer="{
+0.0000 0.0005 0.0019 0.0042 0.0075 0.0117 0.0169 0.0229
+0.0300 0.0379 0.0468 0.0567 0.0674 0.0791 0.0918 0.1054
+0.1199 0.1353 0.1517 0.1690 0.1873 0.2065 0.2266 0.2477
+0.2697 0.2927 0.3165 0.3414 0.3671 0.3938 0.4214 0.4500
+}"
+-dupYellowTransfer="{
+0.0000 0.0005 0.0019 0.0042 0.0075 0.0117 0.0169 0.0229
+0.0300 0.0379 0.0468 0.0567 0.0674 0.0791 0.0918 0.1054
+0.1199 0.1353 0.1517 0.1690 0.1873 0.2065 0.2266 0.2477
+0.2697 0.2927 0.3165 0.3414 0.3671 0.3938 0.4214 0.4500
+}"
+-dupBeginPageCommand="<
+ 1b5b4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 63 0300 103110
+ 1b28 64 0200 02d0
+ 1b28 6c 0200 1430
+ 1b28 67 0100 E5
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bjc610b6.upp b/Master/xemtex/gslib/bjc610b6.upp
new file mode 100644
index 00000000000..ef46be5e81d
--- /dev/null
+++ b/Master/xemtex/gslib/bjc610b6.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 610, 720x720DpI, glossy paper, color, rendered"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Canon
+-r720x720
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0029 0.0082 0.0151 0.0232 0.0324 0.0426 0.0537
+0.0655 0.0782 0.0916 0.1057 0.1204 0.1358 0.1517 0.1683
+0.1854 0.2030 0.2212 0.2399 0.2591 0.2788 0.2989 0.3195
+0.3406 0.3621 0.3840 0.4064 0.4292 0.4524 0.4760 0.5000
+}"
+-dupCyanTransfer="{
+0.0000 0.0005 0.0021 0.0047 0.0083 0.0130 0.0187 0.0255
+0.0333 0.0421 0.0520 0.0630 0.0749 0.0879 0.1020 0.1171
+0.1332 0.1504 0.1686 0.1878 0.2081 0.2294 0.2518 0.2752
+0.2997 0.3252 0.3517 0.3793 0.4079 0.4376 0.4683 0.5000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0005 0.0021 0.0047 0.0083 0.0130 0.0187 0.0255
+0.0333 0.0421 0.0520 0.0630 0.0749 0.0879 0.1020 0.1171
+0.1332 0.1504 0.1686 0.1878 0.2081 0.2294 0.2518 0.2752
+0.2997 0.3252 0.3517 0.3793 0.4079 0.4376 0.4683 0.5000
+}"
+-dupYellowTransfer="{
+0.0000 0.0005 0.0021 0.0047 0.0083 0.0130 0.0187 0.0255
+0.0333 0.0421 0.0520 0.0630 0.0749 0.0879 0.1020 0.1171
+0.1332 0.1504 0.1686 0.1878 0.2081 0.2294 0.2518 0.2752
+0.2997 0.3252 0.3517 0.3793 0.4079 0.4376 0.4683 0.5000
+}"
+-dupBeginPageCommand="<
+ 1b5b4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 63 0300 105110
+ 1b28 64 0200 02d0
+ 1b28 6c 0200 1460
+ 1b28 67 0100 E5
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bjc610b7.upp b/Master/xemtex/gslib/bjc610b7.upp
new file mode 100644
index 00000000000..a12bd827911
--- /dev/null
+++ b/Master/xemtex/gslib/bjc610b7.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 610, 720x720DpI, high gloss paper, color, rendered"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Canon
+-r720x720
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupCyanTransfer="{
+0.0000 0.0005 0.0021 0.0047 0.0083 0.0130 0.0187 0.0255
+0.0333 0.0421 0.0520 0.0630 0.0749 0.0879 0.1020 0.1171
+0.1332 0.1504 0.1686 0.1878 0.2081 0.2294 0.2518 0.2752
+0.2997 0.3252 0.3517 0.3793 0.4079 0.4376 0.4683 0.5000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0005 0.0021 0.0047 0.0083 0.0130 0.0187 0.0255
+0.0333 0.0421 0.0520 0.0630 0.0749 0.0879 0.1020 0.1171
+0.1332 0.1504 0.1686 0.1878 0.2081 0.2294 0.2518 0.2752
+0.2997 0.3252 0.3517 0.3793 0.4079 0.4376 0.4683 0.5000
+}"
+-dupYellowTransfer="{
+0.0000 0.0005 0.0021 0.0047 0.0083 0.0130 0.0187 0.0255
+0.0333 0.0421 0.0520 0.0630 0.0749 0.0879 0.1020 0.1171
+0.1332 0.1504 0.1686 0.1878 0.2081 0.2294 0.2518 0.2752
+0.2997 0.3252 0.3517 0.3793 0.4079 0.4376 0.4683 0.5000
+}"
+-dupBeginPageCommand="<
+ 1b5b4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 63 0300 106110
+ 1b28 64 0200 02d0
+ 1b28 6c 0200 1470
+ 1b28 67 0100 E5
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/bjc610b8.upp b/Master/xemtex/gslib/bjc610b8.upp
new file mode 100644
index 00000000000..c0f036602eb
--- /dev/null
+++ b/Master/xemtex/gslib/bjc610b8.upp
@@ -0,0 +1,44 @@
+-supModel="Canon BJC 610, 720x720DpI, high resolution paper, color, rendered"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Canon
+-r720x720
+-dupMargins="{ 8.23 20.44 11.05 7.9 }"
+-dupOutputComponentOrder="{ 3 2 1 0 }"
+-dupBlackTransfer="{
+0.0000 0.0008 0.0033 0.0075 0.0133 0.0208 0.0300 0.0408
+0.0533 0.0674 0.0832 0.1007 0.1199 0.1407 0.1632 0.1873
+0.2131 0.2406 0.2697 0.3005 0.3330 0.3671 0.4029 0.4404
+0.4795 0.5203 0.5627 0.6069 0.6527 0.7001 0.7492 0.8000
+}"
+-dupCyanTransfer="{
+0.0000 0.0005 0.0021 0.0047 0.0083 0.0130 0.0187 0.0255
+0.0333 0.0421 0.0520 0.0630 0.0749 0.0879 0.1020 0.1171
+0.1332 0.1504 0.1686 0.1878 0.2081 0.2294 0.2518 0.2752
+0.2997 0.3252 0.3517 0.3793 0.4079 0.4376 0.4683 0.5000
+}"
+-dupMagentaTransfer="{
+0.0000 0.0005 0.0021 0.0047 0.0083 0.0130 0.0187 0.0255
+0.0333 0.0421 0.0520 0.0630 0.0749 0.0879 0.1020 0.1171
+0.1332 0.1504 0.1686 0.1878 0.2081 0.2294 0.2518 0.2752
+0.2997 0.3252 0.3517 0.3793 0.4079 0.4376 0.4683 0.5000
+}"
+-dupYellowTransfer="{
+0.0000 0.0005 0.0021 0.0047 0.0083 0.0130 0.0187 0.0255
+0.0333 0.0421 0.0520 0.0630 0.0749 0.0879 0.1020 0.1171
+0.1332 0.1504 0.1686 0.1878 0.2081 0.2294 0.2518 0.2752
+0.2997 0.3252 0.3517 0.3793 0.4079 0.4376 0.4683 0.5000
+}"
+-dupBeginPageCommand="<
+ 1b5b4b 0200 000f
+ 1b28 62 0100 01
+ 1b28 63 0300 107110
+ 1b28 64 0200 02d0
+ 1b28 6c 0200 14a0
+ 1b28 67 0100 E5
+>"
+-dupEndJobCommand="(\033\050b\001\000\000\033@)"
+-dupEndPageCommand="(\014)"
diff --git a/Master/xemtex/gslib/caption.ps b/Master/xemtex/gslib/caption.ps
new file mode 100644
index 00000000000..81a11c01a01
--- /dev/null
+++ b/Master/xemtex/gslib/caption.ps
@@ -0,0 +1,57 @@
+%!
+% Copyright (C) 1995 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: caption.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Add a "caption" to the bottom of each page.
+/captionsize 20 def
+/caption
+ { /Helvetica //captionsize selectfont
+ (Printed by Aladdin's XXYYZZ) show
+ /Symbol //captionsize selectfont
+ (\324) show % trademarkserif
+ /Helvetica //captionsize selectfont
+ ( product) show
+ } bind def
+
+10 dict begin
+gsave
+ initgraphics
+ clippath pathbbox
+ pop exch 36 add /by exch def
+ % We can't use stringwidth, so we have to show and measure.
+ gsave
+ 0 0 0 0 rectclip
+ 0 0 moveto caption currentpoint pop /bw exch def
+ grestore
+ add bw sub 2 div /bx exch def
+ % We don't have the font bbox available, so we guess.
+ /bh captionsize 1.05 mul def
+grestore
+/showcaption
+ { gsave
+ initgraphics
+ //bx 9 sub //by 9 sub //bw 18 add //bh 18 add
+ 1 setgray 4 copy rectfill 0 setgray 1.5 setlinewidth rectstroke
+ //bx //by moveto //caption exec
+ grestore
+ } bind def
+<< /EndPage [
+ /showcaption load /exec load
+ currentpagedevice /EndPage get /exec load
+ ] cvx
+>> setpagedevice
+end
diff --git a/Master/xemtex/gslib/cbjc600.ppd b/Master/xemtex/gslib/cbjc600.ppd
new file mode 100644
index 00000000000..fcd0a4d3469
--- /dev/null
+++ b/Master/xemtex/gslib/cbjc600.ppd
@@ -0,0 +1,404 @@
+*PPD-Adobe: "4.1"
+*% Adobe Systems PostScript(R) Printer Description File
+*% Copyright 1995 Yves Arrouye for AFPL Ghostscript with Level 2 PS.
+*% All Rights Reserved.
+*% This file may be distributed as part of GNU Ghostscript and/or AFPL
+*% Ghostscript, under the same terms and conditions as Ghostscript.
+*% End of Copyright statement
+*FormatVersion: "4.1"
+*FileVersion: "1.0"
+*LanguageVersion: English
+*PCFileName: "CBJC600.PPD"
+*Product: "(Canon Bubble Jet Color 600)"
+*PSVersion: "(2010.351) 0"
+*ModelName: "Canon Bubble Jet Color 600"
+*NickName: "BJC-600"
+
+*% This file is not complete, and may lack some useful information...
+
+*% Note: the default transfer function should be set to Null if Ghostscript
+*% exhibit a bug making magenta appear while printing in gray levels...
+*% Note: if you print on A4 paper by default, change *Default values (the
+*% default is Letter here).
+
+*% ==============Constraints =================
+
+*UIConstraints: *BitsPerPixel None *ColorModel DeviceCMYK
+*UIConstraints: *BitsPerPixel None *ColorModel DeviceRGB
+*UIConstraints: *BitsPerPixel 16 *ColorModel DeviceRGB
+*UIConstraints: *BitsPerPixel 16 *ColorModel DeviceGray
+*UIConstraints: *BitsPerPixel 24 *ColorModel DeviceGray
+*UIConstraints: *BitsPerPixel 32 *ColorModel DeviceRGB
+*UIConstraints: *BitsPerPixel 32 *ColorModel DeviceGray
+
+*UIConstraints: *ColorModel DeviceCMYK *BitsPerPixel None
+*UIConstraints: *ColorModel DeviceRGB *BitsPerPixel None
+*UIConstraints: *ColorModel DeviceRGB *BitsPerPixel 16
+*UIConstraints: *ColorModel DeviceRGB *BitsPerPixel 32
+*UIConstraints: *ColorModel DeviceGray *BitsPerPixel 16
+*UIConstraints: *ColorModel DeviceGray *BitsPerPixel 24
+*UIConstraints: *ColorModel DeviceGray *BitsPerPixel 32
+
+*% =========== Device Capabilities ===============
+
+*LanguageLevel: "2"
+*Protocols: TBCP
+*FreeVM: "2124600"
+*ColorDevice: True
+*DefaultColorSpace: CMYK
+*FileSystem: True
+*Throughput: "1"
+
+*Password: "()"
+
+*% ============Paper Size Information ==============
+
+*OpenUI *PageSize: PickOne
+*OrderDependency: 30 AnySetup *PageSize
+*DefaultPageSize: Letter
+*PageSize A4: "1 dict dup /PageSize [595 842] put setpagedevice"
+*PageSize A5: "1 dict dup /PageSize [421 595] put setpagedevice"
+*PageSize A6: "1 dict dup /PageSize [297 421] put setpagedevice"
+*PageSize A7: "1 dict dup /PageSize [210 297] put setpagedevice"
+*PageSize A8: "1 dict dup /PageSize [148 210] put setpagedevice"
+*PageSize A9: "1 dict dup /PageSize [105 148] put setpagedevice"
+*PageSize A10: "1 dict dup /PageSize [74 105] put setpagedevice"
+*PageSize B5: "1 dict dup /PageSize [501 709] put setpagedevice"
+*PageSize Letter/US Letter: "1 dict dup /PageSize [612 792] put setpagedevice"
+*CloseUI: *PageSize
+
+*OpenUI *PageRegion: PickOne
+*OrderDependency: 40 AnySetup *PageRegion
+*DefaultPageRegion: Letter
+*PageRegion A4: "1 dict dup /PageSize [595 842] put setpagedevice"
+*PageRegion A5: "1 dict dup /PageSize [421 595] put setpagedevice"
+*PageRegion A6: "1 dict dup /PageSize [297 421] put setpagedevice"
+*PageRegion A7: "1 dict dup /PageSize [210 297] put setpagedevice"
+*PageRegion A8: "1 dict dup /PageSize [148 210] put setpagedevice"
+*PageRegion A9: "1 dict dup /PageSize [105 148] put setpagedevice"
+*PageRegion A10: "1 dict dup /PageSize [74 105] put setpagedevice"
+*PageRegion B5: "1 dict dup /PageSize [501 709] put setpagedevice"
+*PageRegion Letter/US Letter: "1 dict dup /PageSize [612 792] put setpagedevice"
+*CloseUI: *PageRegion
+
+*DefaultImageableArea: Letter
+*ImageableArea A4: "18.425196 27.096094 576.625183 833.496094"
+*ImageableArea A5: "18.425196 27.096045 402.625183 586.496033"
+*ImageableArea A6: "18.425196 27.096045 278.625183 412.496033"
+*ImageableArea A7: "18.425196 27.096045 191.625198 288.496033"
+*ImageableArea A8: "18.425196 27.096045 129.625198 201.496048"
+*ImageableArea A9: "18.425196 27.096045 86.625198 139.496048"
+*ImageableArea A10: "18.425196 27.096045 55.625195 96.496048"
+*ImageableArea B5: "18.425196 27.096045 482.625183 700.496033"
+*ImageableArea Letter/US Letter: "18.425196 27.096045 593.625183 783.496033"
+
+*?ImageableArea: "
+save
+ /cvp {( ) cvs print ( ) print } bind def
+ /upperright {10000 mul floor 10000 div} bind def
+ /lowerleft {10000 mul ceiling 10000 div} bind def
+ newpath clippath pathbbox
+ 4 -2 roll exch 2 {lowerleft cvp} repeat
+ exch 2 {upperright cvp} repeat flush
+ restore
+"
+*End
+
+*PaperDimension A4: "595 842"
+*PaperDimension A5: "421 595"
+*PaperDimension A6: "297 421"
+*PaperDimension A7: "210 297"
+*PaperDimension A8: "148 210"
+*PaperDimension A9: "105 148"
+*PaperDimension A10: "74 105"
+*PaperDimension B5: "501 709"
+*PaperDimension Letter/US Letter: "612 792"
+
+*HWMargins: "9.637794495 27.042521 9.637794495 8.503937"
+
+*% =============Halftone Information ===============
+
+*ScreenFreq: "60.0"
+*ScreenAngle: "45.0"
+
+*DefaultScreenProc: Dot
+*ScreenProc Dot: "
+{dup mul exch dup mul add 1.0 exch sub }
+"
+*End
+*ScreenProc Line: "{ pop }"
+*ScreenProc Ellipse: "{ dup 5 mul 8 div mul exch dup mul exch add sqrt 1 exch sub }"
+
+*DefaultTransfer: Normalized
+*Transfer Normalized: "{mark
+1.0 1.000 0.955 0.915 0.847 0.765 0.683 0.602 0.500 0.311 0.030 0.0
+counttomark dup 3 add -1 roll exch
+2 sub mul dup floor cvi dup 3 1 roll sub exch dup
+3 add index exch 2 add index dup 4 1 roll sub mul add
+counttomark 1 add 1 roll cleartomark
+} bind"
+*End
+*Transfer Null: "{ }"
+*Transfer Null.Inverse: "{ 1 exch sub }"
+*End
+
+*%==================Input Slot====================
+
+*OpenUI *InputSlot/Media Source: PickOne
+*OrderDependency: 20 AnySetup *InputSlot
+*DefaultInputSlot: Feeder
+*InputSlot Feeder/Paper Tray: ""
+*CloseUI: *InputSlot
+
+*%=================Manual Feed====================
+
+*OpenUI *ManualFeed/Manual Feed: Boolean
+*OrderDependency: 20 AnySetup *ManualFeed
+*DefaultManualFeed: False
+*ManualFeed True/True: "1 dict dup /ManualFeed true put setpagedevice"
+*ManualFeed False/False: "1 dict dup /ManualFeed false put setpagedevice"
+*?ManualFeed: "
+ save
+ currentpagedevice /ManualFeed get
+ {(True)}{(False)}ifelse = flush
+ restore"
+*End
+
+*CloseUI: *ManualFeed
+
+*%===================Resolution====================
+
+*OpenUI *Resolution/Resolution: PickOne
+*OrderDependency: 10 AnySetup *Resolution
+*DefaultResolution: 360x360dpi
+*Resolution 90x90dpi/90dpi: "
+ 1 dict dup /HWResolution [ 90 90 ]
+ put setpagedevice"
+*End
+
+*Resolution 180x180dpi/180dpi: "
+ 1 dict dup /HWResolution [ 180 180 ]
+ put setpagedevice"
+*End
+
+*Resolution 360x360dpi/360dpi: "
+ 1 dict dup /HWResolution [ 360 360 ]
+ put setpagedevice"
+*End
+
+*?Resolution: "
+ save
+ currentpagedevice /HWResolution get dup
+ 0 get cvi 10 string cvs print
+ (x) print
+ 0 get cvi 10 string print
+ (dpi) = flush
+ restore"
+*End
+
+*CloseUI: *Resolution
+
+*%===================Output Depth====================
+
+*OpenUI *BitsPerPixel/Print Depth: PickOne
+*OrderDependency: 30 AnySetup *BitsPerPixel
+*DefaultBitsPerPixel: 24
+*BitsPerPixel None/1bpp: "
+ 1 dict dup /BitsPerPixel 1 put
+ setpagedevice"
+*End
+
+*BitsPerPixel 8/8bpp: "
+ 1 dict dup /BitsPerPixel 8 put
+ setpagedevice"
+*End
+
+*BitsPerPixel 16/16bpp: "
+ 1 dict dup /BitsPerPixel 16 put
+ setpagedevice"
+*End
+
+*BitsPerPixel 24/24bpp: "
+ 1 dict dup /BitsPerPixel 24 put
+ setpagedevice"
+*End
+
+*BitsPerPixel 32/32bpp: "
+ 1 dict dup /BitsPerPixel 32 put
+ setpagedevice"
+*End
+
+*?BitsPerPixel: "
+ save
+ currentpagedevice /BitsPerPixel get dup 1 eq { pop (None) } if = flush
+ restore"
+*End
+
+*CloseUI: *BitsPerPixel
+
+*%=================Media Type============================
+
+*OpenUI *MediaType/Media Type: PickOne
+*OrderDependency: 50 AnySetup *MediaType
+*DefaultMediaType: PlainPaper
+*MediaType PlainPaper/Plain Paper: "
+ 1 dict dup /MediaType (PlainPaper) put setpagedevice"
+*End
+
+*MediaType CoatedPaper/Coated Paper: "
+ 1 dict dup /MediaType (CoatedPaper) put setpagedevice"
+*End
+
+*MediaType TransparencyFilm/Transparency Film: "
+ 1 dict dup /MediaType (TransparencyFilm) put setpagedevice"
+*End
+
+*MediaType Envelope/Envelope: "
+ 1 dict dup /MediaType (Envelope) put setpagedevice"
+*End
+
+*MediaType Card/Card: "
+ 1 dict dup /MediaType (Card) put setpagedevice"
+*End
+
+*MediaType Other/Other: "
+ 1 dict dup /MediaType (Other) put setpagedevice"
+*End
+
+*?MediaType: "
+ save
+ currentpagedevice /MediaType get
+ dup null eq {pop (Unknown)} if = flush
+ restore "
+*End
+
+*CloseUI: *MediaType
+
+*%===================Printing Quality====================
+
+*OpenUI *OutputMode/Print Quality: PickOne
+*OrderDependency: 50 AnySetup *OuputMode
+*DefaultOutputMode: Normal
+*OutputMode Draft/Draft: "
+ 1 dict dup /PrintQuality (Draft) put setpagedevice"
+*End
+
+*OutputMode Normal/Normal: "
+ 1 dict dup /PrintQuality (Normal) put setpagedevice"
+*End
+
+*OutputMode High/High: "
+ 1 dict dup /PrintQuality (High) put setpagedevice"
+*End
+
+*?OutputMode: "
+ save
+ currentpagedevice /PrintQuality get
+ dup null eq {pop (Unknown)} if = flush
+ restore "
+*End
+
+*CloseUI: *OutputMode
+
+*%===================Color/Gray Printing====================
+
+*OpenUI *ColorModel/Color Processing: PickOne
+*OrderDependency: 20 AnySetup *ColorModel
+*DefaultColorModel: DeviceCMYK
+*ColorModel DeviceGray/Gray: "
+ 1 dict dup /ProcessColorModel /DeviceGray
+ put setpagedevice"
+*End
+
+*ColorModel DeviceRGB/RGB: "
+ 1 dict dup /ProcessColorModel /DeviceRGB
+ put setpagedevice"
+*End
+
+*ColorModel DeviceCMYK/CMYK: "
+ 1 dict dup /ProcessColorModel /DeviceCMYK
+ put setpagedevice"
+*End
+
+*?ColorModel: "
+ save
+ currentpagedevice /ProcessColorModel get = flush
+ restore "
+*End
+
+*CloseUI: *ColorModel
+
+*%===================Media Weight/Thick Media====================
+
+*OpenUI *ThickMedia/Thick Media: PickOne
+*OrderDependency: 30 AnySetup *ThickMedia
+*Default ThickMedia: Thin
+*ThickMedia Thin/No: "
+ 1 dict dup /MediaWeight 80
+ put setpagedevice"
+*End
+
+*ThickMedia Thick/Yes: "
+ 1 dict dup /ThickMedia 120
+ put setpagedevice"
+*End
+
+*?ThickMedia: "
+ save
+ currentpagedevice /MediaWeight get 105 gt { (Thick) } { (Thin) } ifelse
+ = flush
+ restore "
+*End
+
+*CloseUI: *ThickMedia
+
+*%===================PrintColors====================
+
+*OpenUI *PrintColors/Print Colors: PickOne
+*OrderDependency: 20 AnySetup *PrintColors
+*DefaultPrintColors: "15"
+*PrintColors 0/None: "1 dict dup /PrintColors 0 put setpagedevice"
+*End
+
+*PrintColors 1/Cyan: "1 dict dup /PrintColors 1 put setpagedevice"
+*End
+
+*PrintColors 2/Magenta: "1 dict dup /PrintColors 2 put setpagedevice"
+*End
+
+*PrintColors 4/Yellow: "1 dict dup /PrintColors 4 put setpagedevice"
+*End
+
+*PrintColors 8/Black: "1 dict dup /PrintColors 8 put setpagedevice"
+*End
+
+*PrintColors 15/All: "1 dict dup /PrintColors 15 put setpagedevice"
+*End
+
+
+*CloseUI *PrintColors
+
+*%===================Monochrome Printing====================
+
+*OpenUI *MonochromePrint/Monochrome Print: Boolean
+*OrderDependency: 50 AnySetup *MonochromePrint
+*DefaultMonochromePrint: False
+*MonochromePrint True/Yes: "
+ 1 dict dup /MonochromePrint true
+ put setpagedevice"
+*End
+
+*MonochromePrint False/No: "
+ 1 dict dup /MonochromePrint false
+ put setpagedevice"
+*End
+
+*?MonochromePrint: "
+ save
+ currentpagedevice /MonochromePrint get
+ {(True)}{(False)}ifelse = flush
+ restore"
+*End
+
+*CloseUI: *MonochromePrint
+
diff --git a/Master/xemtex/gslib/cbjc800.ppd b/Master/xemtex/gslib/cbjc800.ppd
new file mode 100644
index 00000000000..d919bd9ed37
--- /dev/null
+++ b/Master/xemtex/gslib/cbjc800.ppd
@@ -0,0 +1,389 @@
+*PPD-Adobe: "4.1"
+*% Adobe Systems PostScript(R) Printer Description File
+*% Copyright 1995 Yves Arrouye for AFPL Ghostscript with Level 2 PS.
+*% All Rights Reserved.
+*% This file may be distributed as part of GNU Ghostscript and/or AFPL
+*% Ghostscript, under the same terms and conditions as Ghostscript.
+*% End of Copyright statement
+*FormatVersion: "4.1"
+*FileVersion: "1.0"
+*LanguageVersion: English
+*PCFileName: "CBJC800.PPD"
+*Product: "(Canon Bubble Jet Color 800)"
+*PSVersion: "(2010.351) 0"
+*ModelName: "Canon Bubble Jet Color 800"
+*NickName: "BJC-800"
+
+*% This file is not complete, and may lack some useful information...
+
+*% Note: the default transfer function should be set to Null if Ghostscript
+*% exhibit a bug making magenta appear while printing in gray levels...
+*% Note: if you print on A4 paper by default, change *Default values (the
+*% default is Letter here).
+
+*% ==============Constraints =================
+
+*UIConstraints: *BitsPerPixel None *ColorModel DeviceCMYK
+*UIConstraints: *BitsPerPixel None *ColorModel DeviceRGB
+*UIConstraints: *BitsPerPixel 16 *ColorModel DeviceRGB
+*UIConstraints: *BitsPerPixel 16 *ColorModel DeviceGray
+*UIConstraints: *BitsPerPixel 24 *ColorModel DeviceGray
+*UIConstraints: *BitsPerPixel 32 *ColorModel DeviceRGB
+*UIConstraints: *BitsPerPixel 32 *ColorModel DeviceGray
+
+*UIConstraints: *ColorModel DeviceCMYK *BitsPerPixel None
+*UIConstraints: *ColorModel DeviceRGB *BitsPerPixel None
+*UIConstraints: *ColorModel DeviceRGB *BitsPerPixel 16
+*UIConstraints: *ColorModel DeviceRGB *BitsPerPixel 32
+*UIConstraints: *ColorModel DeviceGray *BitsPerPixel 16
+*UIConstraints: *ColorModel DeviceGray *BitsPerPixel 24
+*UIConstraints: *ColorModel DeviceGray *BitsPerPixel 32
+
+*% =========== Device Capabilities ===============
+
+*LanguageLevel: "2"
+*Protocols: TBCP
+*FreeVM: "2124600"
+*ColorDevice: True
+*DefaultColorSpace: CMYK
+*FileSystem: True
+*Throughput: "1"
+
+*Password: "()"
+
+*% ============Paper Size Information ==============
+
+*OpenUI *PageSize: PickOne
+*OrderDependency: 30 AnySetup *PageSize
+*DefaultPageSize: Letter
+*PageSize A4: "1 dict dup /PageSize [595 842] put setpagedevice"
+*PageSize A5: "1 dict dup /PageSize [421 595] put setpagedevice"
+*PageSize A6: "1 dict dup /PageSize [297 421] put setpagedevice"
+*PageSize A7: "1 dict dup /PageSize [210 297] put setpagedevice"
+*PageSize A8: "1 dict dup /PageSize [148 210] put setpagedevice"
+*PageSize A9: "1 dict dup /PageSize [105 148] put setpagedevice"
+*PageSize A10: "1 dict dup /PageSize [74 105] put setpagedevice"
+*PageSize B5: "1 dict dup /PageSize [501 709] put setpagedevice"
+*PageSize Letter/US Letter: "1 dict dup /PageSize [612 792] put setpagedevice"
+*PageSize 11x17/US 11x17: "1 dict dup /PageSize [792 1224] put setpagedevice"
+*PageSize Ledger/US Ledger: "1 dict dup /PageSize [1224 792] put setpagedevice"
+*PageSize Legal/US Legal: "1 dict dup /PageSize [612 1008] put setpagedevice"
+*CloseUI: *PageSize
+
+*OpenUI *PageRegion: PickOne
+*OrderDependency: 40 AnySetup *PageRegion
+*DefaultPageRegion: Letter
+*PageRegion A4: "1 dict dup /PageSize [595 842] put setpagedevice"
+*PageRegion A5: "1 dict dup /PageSize [421 595] put setpagedevice"
+*PageRegion A6: "1 dict dup /PageSize [297 421] put setpagedevice"
+*PageRegion A7: "1 dict dup /PageSize [210 297] put setpagedevice"
+*PageRegion A8: "1 dict dup /PageSize [148 210] put setpagedevice"
+*PageRegion A9: "1 dict dup /PageSize [105 148] put setpagedevice"
+*PageRegion A10: "1 dict dup /PageSize [74 105] put setpagedevice"
+*PageRegion B5: "1 dict dup /PageSize [501 709] put setpagedevice"
+*PageRegion Letter/US Letter: "1 dict dup /PageSize [612 792] put setpagedevice"
+*PageRegion 11x17/US 11x17: "1 dict dup /PageSize [792 1224] put setpagedevice"
+*PageRegion Ledger/US Ledger: "1 dict dup /PageSize [1224 792] put setpagedevice"
+*PageRegion Legal/US Legal: "1 dict dup /PageSize [612 1008] put setpagedevice"
+*CloseUI: *PageRegion
+
+*DefaultImageableArea: Letter
+*ImageableArea A3: "9.637793 27.096094 832.437805 1181.496094"
+*ImageableArea A4: "18.425196 27.096094 576.625183 833.496094"
+*ImageableArea A5: "18.425196 27.096045 402.625183 586.496033"
+*ImageableArea A6: "18.425196 27.096045 278.625183 412.496033"
+*ImageableArea A7: "18.425196 27.096045 191.625198 288.496033"
+*ImageableArea A8: "18.425196 27.096045 129.625198 201.496048"
+*ImageableArea A9: "18.425196 27.096045 86.625198 139.496048"
+*ImageableArea A10: "18.425196 27.096045 55.625195 96.496048"
+*ImageableArea B5: "18.425196 27.096045 482.625183 700.496033"
+*ImageableArea Letter/US Letter: "18.425196 27.096045 593.625183 783.496033"
+*ImageableArea 11x17/US 11x17: "9.637793 27.096094 782.437805 1215.496094"
+*ImageableArea Ledger/US Ledger: "9.637793 27.096045 1214.437744 783.496033"
+*ImageableArea Legal/US Legal: "9.637793 27.096094 602.437805 999.496094"
+
+*?ImageableArea: "
+save
+ /cvp {( ) cvs print ( ) print } bind def
+ /upperright {10000 mul floor 10000 div} bind def
+ /lowerleft {10000 mul ceiling 10000 div} bind def
+ newpath clippath pathbbox
+ 4 -2 roll exch 2 {lowerleft cvp} repeat
+ exch 2 {upperright cvp} repeat flush
+ restore
+"
+*End
+
+*PaperDimension A4: "595 842"
+*PaperDimension A5: "421 595"
+*PaperDimension A6: "297 421"
+*PaperDimension A7: "210 297"
+*PaperDimension A8: "148 210"
+*PaperDimension A9: "105 148"
+*PaperDimension A10: "74 105"
+*PaperDimension B5: "501 709"
+*PaperDimension Letter/US Letter: "612 792"
+*PaperDimension 11x17/US 11x17: "792 1224"
+*PaperDimension Ledger/US Ledger: "1224 792"
+*PaperDimension Legal/US Legal: "612 1008"
+
+*HWMargins: "9.637794495 19.842518 9.637794495 8.503937"
+
+*% =============Halftone Information ===============
+
+*ScreenFreq: "60.0"
+*ScreenAngle: "45.0"
+
+*DefaultScreenProc: Dot
+*ScreenProc Dot: "
+{dup mul exch dup mul add 1.0 exch sub }
+"
+*End
+*ScreenProc Line: "{ pop }"
+*ScreenProc Ellipse: "{ dup 5 mul 8 div mul exch dup mul exch add sqrt 1 exch sub }"
+
+*DefaultTransfer: Normalized
+*Transfer Normalized: "{mark
+1.0 1.000 0.955 0.915 0.847 0.765 0.683 0.602 0.500 0.311 0.030 0.0
+counttomark dup 3 add -1 roll exch
+2 sub mul dup floor cvi dup 3 1 roll sub exch dup
+3 add index exch 2 add index dup 4 1 roll sub mul add
+counttomark 1 add 1 roll cleartomark
+} bind"
+*End
+*Transfer Null: "{ }"
+*Transfer Null.Inverse: "{ 1 exch sub }"
+*End
+
+*%==================Input Slot====================
+
+*OpenUI *InputSlot/Media Source: PickOne
+*OrderDependency: 20 AnySetup *InputSlot
+*DefaultInputSlot: Feeder
+*InputSlot Feeder/Paper Tray: ""
+*CloseUI: *InputSlot
+
+*%=================Manual Feed====================
+
+*OpenUI *ManualFeed/Manual Feed: Boolean
+*OrderDependency: 20 AnySetup *ManualFeed
+*DefaultManualFeed: False
+*ManualFeed True/True: "1 dict dup /ManualFeed true put setpagedevice"
+*ManualFeed False/False: "1 dict dup /ManualFeed false put setpagedevice"
+*?ManualFeed: "
+ save
+ currentpagedevice /ManualFeed get
+ {(True)}{(False)}ifelse = flush
+ restore"
+*End
+
+*CloseUI: *ManualFeed
+
+*%===================Resolution====================
+
+*OpenUI *Resolution/Resolution: PickOne
+*OrderDependency: 10 AnySetup *Resolution
+*DefaultResolution: 360x360dpi
+*Resolution 90x90dpi/90dpi: "
+ 1 dict dup /HWResolution [ 90 90 ]
+ put setpagedevice"
+*End
+
+*Resolution 180x180dpi/180dpi: "
+ 1 dict dup /HWResolution [ 180 180 ]
+ put setpagedevice"
+*End
+
+*Resolution 360x360dpi/360dpi: "
+ 1 dict dup /HWResolution [ 360 360 ]
+ put setpagedevice"
+*End
+
+*?Resolution: "
+ save
+ currentpagedevice /HWResolution get dup
+ 0 get cvi 10 string cvs print
+ (x) print
+ 0 get cvi 10 string print
+ (dpi) = flush
+ restore"
+*End
+
+*CloseUI: *Resolution
+
+*%===================Output Depth====================
+
+*OpenUI *BitsPerPixel/Print Depth: PickOne
+*OrderDependency: 30 AnySetup *BitsPerPixel
+*DefaultBitsPerPixel: 24
+*BitsPerPixel None/1bpp: "
+ 1 dict dup /BitsPerPixel 1 put
+ setpagedevice"
+*End
+
+*BitsPerPixel 8/8bpp: "
+ 1 dict dup /BitsPerPixel 8 put
+ setpagedevice"
+*End
+
+*BitsPerPixel 16/16bpp: "
+ 1 dict dup /BitsPerPixel 16 put
+ setpagedevice"
+*End
+
+*BitsPerPixel 24/24bpp: "
+ 1 dict dup /BitsPerPixel 24 put
+ setpagedevice"
+*End
+
+*BitsPerPixel 32/32bpp: "
+ 1 dict dup /BitsPerPixel 32 put
+ setpagedevice"
+*End
+
+*?BitsPerPixel: "
+ save
+ currentpagedevice /BitsPerPixel get dup 1 eq { pop (None) } if = flush
+ restore"
+*End
+
+*CloseUI: *BitsPerPixel
+
+*%=================Media Type============================
+
+*OpenUI *MediaType/Media Type: PickOne
+*OrderDependency: 50 AnySetup *MediaType
+*DefaultMediaType: PlainPaper
+*MediaType PlainPaper/Plain Paper: "
+ 1 dict dup /MediaType (PlainPaper) put setpagedevice"
+*End
+
+*MediaType CoatedPaper/Coated Paper: "
+ 1 dict dup /MediaType (CoatedPaper) put setpagedevice"
+*End
+
+*MediaType TransparencyFilm/Transparency Film: "
+ 1 dict dup /MediaType (TransparencyFilm) put setpagedevice"
+*End
+
+*MediaType Envelope/Envelope: "
+ 1 dict dup /MediaType (Envelope) put setpagedevice"
+*End
+
+*MediaType Card/Card: "
+ 1 dict dup /MediaType (Card) put setpagedevice"
+*End
+
+*MediaType Other/Other: "
+ 1 dict dup /MediaType (Other) put setpagedevice"
+*End
+
+*?MediaType: "
+ save
+ currentpagedevice /MediaType get
+ dup null eq {pop (Unknown)} if = flush
+ restore "
+*End
+
+*CloseUI: *MediaType
+
+*%===================Printing Quality====================
+
+*OpenUI *OutputMode/Print Quality: PickOne
+*OrderDependency: 10 AnySetup *OuputMode
+*DefaultOutputMode: Normal
+*OutputMode Draft/Draft: "
+ 1 dict dup /PrintQuality (Draft) put setpagedevice"
+*End
+
+*OutputMode Low/Low: "
+ 1 dict dup /PrintQuality (Low) put setpagedevice"
+*End
+
+*OutputMode Normal/Normal: "
+ 1 dict dup /PrintQuality (Normal) put setpagedevice"
+*End
+
+*OutputMode High/High: "
+ 1 dict dup /PrintQuality (High) put setpagedevice"
+*End
+
+*CloseUI: *OutputMode
+
+*%===================Color/Gray Printing====================
+
+*OpenUI *ColorModel/Color Processing: PickOne
+*OrderDependency: 20 AnySetup *ColorModel
+*DefaultColorModel: DeviceCMYK
+*ColorModel DeviceGray/Gray: "
+ 1 dict dup /ProcessColorModel /DeviceGray
+ put setpagedevice"
+*End
+
+*ColorModel DeviceRGB/RGB: "
+ 1 dict dup /ProcessColorModel /DeviceRGB
+ put setpagedevice"
+*End
+
+*ColorModel DeviceCMYK/CMYK: "
+ 1 dict dup /ProcessColorModel /DeviceCMYK
+ put setpagedevice"
+*End
+
+*?ColorModel: "
+ save
+ currentpagedevice /ProcessColorModel get = flush
+ restore "
+*End
+
+*CloseUI: *ColorModel
+
+*%===================Media Weight/Thick Media====================
+
+*OpenUI *ThickMedia/Thick Media: PickOne
+*OrderDependency: 30 AnySetup *ThickMedia
+*Default ThickMedia: Thin
+*ThickMedia Thin/No: "
+ 1 dict dup /MediaWeight 80
+ put setpagedevice"
+*End
+
+*ThickMedia Thick/Yes: "
+ 1 dict dup /ThickMedia 120
+ put setpagedevice"
+*End
+
+*?ThickMedia: "
+ save
+ currentpagedevice /MediaWeight get 105 gt { (Thick) } { (Thin) } ifelse
+ = flush
+ restore "
+*End
+
+*CloseUI: *ThickMedia
+
+*%===================PrintColors====================
+
+*OpenUI *PrintColors/Print Colors: PickOne
+*OrderDependency: 20 AnySetup *PrintColors
+*DefaultPrintColors: "15"
+*PrintColors 0/None: "1 dict dup /PrintColors 0 put setpagedevice"
+*End
+
+*PrintColors 1/Cyan: "1 dict dup /PrintColors 1 put setpagedevice"
+*End
+
+*PrintColors 2/Magenta: "1 dict dup /PrintColors 2 put setpagedevice"
+*End
+
+*PrintColors 4/Yellow: "1 dict dup /PrintColors 4 put setpagedevice"
+*End
+
+*PrintColors 8/Black: "1 dict dup /PrintColors 8 put setpagedevice"
+*End
+
+*PrintColors 15/All: "1 dict dup /PrintColors 15 put setpagedevice"
+*End
+
+
+*CloseUI *PrintColors
diff --git a/Master/xemtex/gslib/cdj550.upp b/Master/xemtex/gslib/cdj550.upp
new file mode 100644
index 00000000000..51aa264f65e
--- /dev/null
+++ b/Master/xemtex/gslib/cdj550.upp
@@ -0,0 +1,48 @@
+-supModel="HP Deskjet 550c, 300x300DpI, Gamma=2"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Pcl
+-r300x300
+-dupMargins="{ 12.0 36.0 12.0 12.0}"
+-dupBlackTransfer="{
+ 0.0000 0.0010 0.0042 0.0094 0.0166 0.0260 0.0375 0.0510
+ 0.0666 0.0843 0.1041 0.1259 0.1498 0.1758 0.2039 0.2341
+ 0.2663 0.3007 0.3371 0.3756 0.4162 0.4589 0.5036 0.5505
+ 0.5994 0.6504 0.7034 0.7586 0.8158 0.8751 0.9365 1.0000
+}"
+-dupCyanTransfer="{
+ 0.0000 0.0010 0.0042 0.0094 0.0166 0.0260 0.0375 0.0510
+ 0.0666 0.0843 0.1041 0.1259 0.1498 0.1758 0.2039 0.2341
+ 0.2663 0.3007 0.3371 0.3756 0.4162 0.4589 0.5036 0.5505
+ 0.5994 0.6504 0.7034 0.7586 0.8158 0.8751 0.9365 1.0000
+}"
+-dupMagentaTransfer="{
+ 0.0000 0.0010 0.0042 0.0094 0.0166 0.0260 0.0375 0.0510
+ 0.0666 0.0843 0.1041 0.1259 0.1498 0.1758 0.2039 0.2341
+ 0.2663 0.3007 0.3371 0.3756 0.4162 0.4589 0.5036 0.5505
+ 0.5994 0.6504 0.7034 0.7586 0.8158 0.8751 0.9365 1.0000
+}"
+-dupYellowTransfer="{
+ 0.0000 0.0010 0.0042 0.0094 0.0166 0.0260 0.0375 0.0510
+ 0.0666 0.0843 0.1041 0.1259 0.1498 0.1758 0.2039 0.2341
+ 0.2663 0.3007 0.3371 0.3756 0.4162 0.4589 0.5036 0.5505
+ 0.5994 0.6504 0.7034 0.7586 0.8158 0.8751 0.9365 1.0000
+}"
+-dupBeginPageCommand="<
+ 1b2a726243
+ 1b2a7433303052
+ 1b266c33616f6c45
+ 1b2a6f31643251
+ 1b2a703059
+ 1b2a72732d34753041
+ 1b2a62326d
+>"
+-dupAdjustPageWidthCommand
+-dupEndPageCommand="(0M\033*rbC\033E\033&l0H)"
+-dupAbortCommand="(0M\033*rbC\033E\15\12\12\12\12 Printout-Aborted\15\033&l0H)"
+-dupYMoveCommand="(%dy\0)"
+-dupWriteComponentCommands="{ (%dv\0) (%dv\0) (%dv\0) (%dw\0) }"
+
diff --git a/Master/xemtex/gslib/cdj690.upp b/Master/xemtex/gslib/cdj690.upp
new file mode 100644
index 00000000000..0ec8ea70893
--- /dev/null
+++ b/Master/xemtex/gslib/cdj690.upp
@@ -0,0 +1,52 @@
+-supModel="HP Deskjet 690 Normal Gamma 2.0"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Pcl
+-r600x300
+-dupMargins="{ 12.0 36.0 12.0 12.0}"
+-dupBlackTransfer="{
+ 0.0000 0.0010 0.0042 0.0094 0.0166 0.0260 0.0375 0.0510
+ 0.0666 0.0843 0.1041 0.1259 0.1498 0.1758 0.2039 0.2341
+ 0.2663 0.3007 0.3371 0.3756 0.4162 0.4589 0.5036 0.5505
+ 0.5994 0.6504 0.7034 0.7586 0.8158 0.8751 0.9365 1.0000
+}"
+-dupCyanTransfer="{
+ 0.0000 0.0010 0.0042 0.0094 0.0166 0.0260 0.0375 0.0510
+ 0.0666 0.0843 0.1041 0.1259 0.1498 0.1758 0.2039 0.2341
+ 0.2663 0.3007 0.3371 0.3756 0.4162 0.4589 0.5036 0.5505
+ 0.5994 0.6504 0.7034 0.7586 0.8158 0.8751 0.9365 1.0000
+}"
+-dupMagentaTransfer="{
+ 0.0000 0.0010 0.0042 0.0094 0.0166 0.0260 0.0375 0.0510
+ 0.0666 0.0843 0.1041 0.1259 0.1498 0.1758 0.2039 0.2341
+ 0.2663 0.3007 0.3371 0.3756 0.4162 0.4589 0.5036 0.5505
+ 0.5994 0.6504 0.7034 0.7586 0.8158 0.8751 0.9365 1.0000
+}"
+-dupYellowTransfer="{
+ 0.0000 0.0010 0.0042 0.0094 0.0166 0.0260 0.0375 0.0510
+ 0.0666 0.0843 0.1041 0.1259 0.1498 0.1758 0.2039 0.2341
+ 0.2663 0.3007 0.3371 0.3756 0.4162 0.4589 0.5036 0.5505
+ 0.5994 0.6504 0.7034 0.7586 0.8158 0.8751 0.9365 1.0000
+}"
+-dupBeginPageCommand="<
+1b25 2d31 3233 3435 5840
+504a 4c20 454e 5445 5220 4c41 4e47 5541
+4745 3d50 434c 534c 4545 4b0a 1b45 1b2a
+6232 421b 2a6f 3557 040c 0000 001b 2a6f
+3144 1b26 6c31 481b 266c 3236 6130 4c1b
+2a6f 3557 0103 0000 011b 266c 304d 1b26
+6c30 6f30 451b 2a6f 304d 1b26 7533 3030
+441b 2a70 3058 1b2a 7030 591b 2a67 3857
+0201 0258 012c 0002 1b2a 7234 3830 3053
+1b2a 7231 411b 2a62 324d 1b2a 6233 3034
+591b 2a62 326d
+>"
+-dupAdjustPageWidthCommand
+-dupEndPageCommand="(0M\033*rbC\033E\033&l0H)"
+-dupAbortCommand="(0M\033*rbC\033E\15\12\12\12\12 Printout-Aborted\15\033&l0H)"
+-dupYMoveCommand="(%dy\0)"
+-dupWriteComponentCommands="{ (%dv\0) (%dv\0) (%dv\0) (%dw\0) }"
+-dupOutputYOffset=10000
diff --git a/Master/xemtex/gslib/cdj690ec.upp b/Master/xemtex/gslib/cdj690ec.upp
new file mode 100644
index 00000000000..13e03964956
--- /dev/null
+++ b/Master/xemtex/gslib/cdj690ec.upp
@@ -0,0 +1,54 @@
+-supModel="HP Deskjet 690 Econo-Fast Gamma 2.0"
+-sDEVICE=uniprint
+-sPAPERSIZE=a4
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Pcl
+-r300x300
+
+-dupOutputYOffset=300
+-dupMargins="{ 0.0 36.0 12.0 12.0}"
+-dupBlackTransfer="{
+ 0.0000 0.0010 0.0042 0.0094 0.0166 0.0260 0.0375 0.0510
+ 0.0666 0.0843 0.1041 0.1259 0.1498 0.1758 0.2039 0.2341
+ 0.2663 0.3007 0.3371 0.3756 0.4162 0.4589 0.5036 0.5505
+ 0.5994 0.6504 0.7034 0.7586 0.8158 0.8751 0.9365 1.0000
+}"
+-dupCyanTransfer="{
+ 0.0000 0.0010 0.0042 0.0094 0.0166 0.0260 0.0375 0.0510
+ 0.0666 0.0843 0.1041 0.1259 0.1498 0.1758 0.2039 0.2341
+ 0.2663 0.3007 0.3371 0.3756 0.4162 0.4589 0.5036 0.5505
+ 0.5994 0.6504 0.7034 0.7586 0.8158 0.8751 0.9365 1.0000
+}"
+-dupMagentaTransfer="{
+ 0.0000 0.0010 0.0042 0.0094 0.0166 0.0260 0.0375 0.0510
+ 0.0666 0.0843 0.1041 0.1259 0.1498 0.1758 0.2039 0.2341
+ 0.2663 0.3007 0.3371 0.3756 0.4162 0.4589 0.5036 0.5505
+ 0.5994 0.6504 0.7034 0.7586 0.8158 0.8751 0.9365 1.0000
+}"
+-dupYellowTransfer="{
+ 0.0000 0.0010 0.0042 0.0094 0.0166 0.0260 0.0375 0.0510
+ 0.0666 0.0843 0.1041 0.1259 0.1498 0.1758 0.2039 0.2341
+ 0.2663 0.3007 0.3371 0.3756 0.4162 0.4589 0.5036 0.5505
+ 0.5994 0.6504 0.7034 0.7586 0.8158 0.8751 0.9365 1.0000
+}"
+-dupBeginPageCommand="<
+1b25 2d31 3233 3435 5840
+504a 4c20 454e 5445 5220 4c41 4e47 5541
+4745 3d50 434c 534c 4545 4b0a 1b45 1b2a
+6232 421b 2a6f 3557 040c 0000 001b 2a6f
+3144 1b26 6c31 481b 266c 3236 6130 4c1b
+2a6f 3557 0103 0000 011b 266c 304d 1b26
+6c30 6f30 451b 2a6f 2d31 4d1b 2675 3330
+3044 1b2a 7030 581b 2a70 3059 1b2a 6732
+3657 0204 012c 012c 0002 012c 012c 0002
+012c 012c 0002 012c 012c 0002 1b2a 7232
+3430 3053 1b2a 7231 411b 2a62 324d 1b2a
+6231 591b 2a62 326d>"
+-dupAdjustPageWidthCommand
+-dupEndPageCommand="(0M\033*rbC\033E\033&l0H)"
+-dupAbortCommand="(0M\033*rbC\033E\15\12\12\12\12 Printout-Aborted\15\033&l0H)"
+-dupYMoveCommand="(%dy\0)"
+-dupWriteComponentCommands="{ (%dv\0) (%dv\0) (%dv\0) (%dw\0) }"
diff --git a/Master/xemtex/gslib/cid2code.ps b/Master/xemtex/gslib/cid2code.ps
new file mode 100644
index 00000000000..48a4c28bef4
--- /dev/null
+++ b/Master/xemtex/gslib/cid2code.ps
@@ -0,0 +1,161 @@
+% Copyright (C) 1998, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: cid2code.ps,v 1.3.4.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Construct an inverse map from CIDs to codes.
+
+% Create an inverse map from CIDs to code values.
+% We only use this for 16-bit Unicode, so it has some limitations.
+% After invoking .cmap2code, loading a CMap file prints out the map
+% instead of doing what it usually does. For example:
+%
+% gs -dNODISPLAY -dBATCH lib/cid2code.ps -c .cmap2code\
+% -f Resource/CMap/UniJIS-UCS2-H > mapfile
+
+/.cmap2codedict 10 dict begin
+
+/begincmap {
+ mark
+} def
+/endcmap {
+ % Stack: mark code_lo1 code_hi1 cid1 ...
+ 20 dict begin
+ /depth counttomark 3 sub def
+ % Do a first pass to determine the maximum CID.
+ 0 0 3 depth {
+ 1 add /d exch def
+ d index d 2 add index 1 get add d 3 add index 1 get sub .max
+ } for
+ 1 add /ncid exch def
+ /map ncid 2 mul string def
+ % Now fill in the map.
+ 0 3 depth {
+ /d exch def
+ d index 2 mul /cid2 exch def
+ d 1 add index /hi exch def
+ d 2 add index 2 string copy /lo exch def
+ lo 1 get 1 hi 1 get {
+ map cid2 lo 0 get put
+ map cid2 1 add 3 -1 roll put
+ /cid2 cid2 2 add def
+ } for
+ } for
+ % Print the map.
+ (%stdout) (w) file
+ dup (<) print
+ dup /ASCIIHexEncode filter
+ dup map writestring
+ closefile
+ () = flush
+ closefile
+ end
+} def
+%/begincodespacerange
+/endcodespacerange {cleartomark} def
+%/usecmap
+
+%/beginbfchar
+/endbfchar {cleartomark} def
+%/beginbfrange
+/endbfrange {cleartomark} def
+
+%/begincidchar
+/endcidchar {
+ counttomark 2 idiv { dup counttomark 1 add 3 roll } repeat pop
+} def
+%/begincidrange
+/endcidrange {
+ counttomark 1 add -1 roll pop
+} def
+
+%/beginnotdefchar
+/endnotdefchar {cleartomark} def
+%/beginnotdefrange
+/endnotdefrange {cleartomark} def
+
+currentdict end readonly def
+
+/.cmap2code { % - .cmap2code -
+ /CIDInit /ProcSet findresource dup length dict copy
+ .cmap2codedict { 3 copy put pop pop } forall
+ /CIDInit exch /ProcSet defineresource pop
+} def
+
+% Extract and print reverse mapping information from a cid2code.txt file.
+/.printhex2 { % <int16> .printhex2 -
+ (<) print
+ 16#10000 add 16 =string cvrs 1 4 getinterval print
+ (>) print
+} def
+/.cid2code { % <cmaptemplate> <file> <column> .cid2code -
+ 30 dict begin
+ /column exch def
+ (r) file /f exch def
+ (%!) =
+ (/CIDInit /ProcSet findresource begin 12 dict begin begincmap) =
+ % Print the information from the template.
+ {
+ exch ==only ( ) print
+ dup type /dicttype eq {
+ dup length =only ( dict dup begin) = {
+ ( ) print exch ===only ( ) print ===only ( def) =
+ } forall (end def) =
+ } {
+ ===only
+ } ifelse ( def) =
+ } forall
+ % Read the data from the cid2code.txt file.
+ {
+ f =string readline pop (CID\t) anchorsearch { pop pop exit } if pop
+ } loop
+ /map [ {
+ f =string readline not { pop exit } if
+ column { (\t) search pop pop pop } repeat
+ (\t) search { exch pop exch pop } if
+ (,) search { exch pop exch pop } if
+ dup length 4 ne { pop (*) } if
+ dup (*) eq { pop (0000) } if
+ (16#) exch concatstrings cvi
+ } loop ] def
+ % Print the code space range(s).
+ /maxcid map length 1 sub def
+ mark maxcid
+ dup 255 and 255 eq {
+ 0 exch
+ } {
+ dup 16#ff00 and exch 0 2 index 1 sub
+ } ifelse
+ counttomark 2 idiv dup =only ( begincodespacerange) = {
+ exch .printhex2 .printhex2 () =
+ } repeat (endcodespacerange) =
+ % Print the map data.
+ 0 1 100 maxcid {
+ /lo exch def
+ /hi lo 99 add maxcid .min def
+ 0 lo 1 hi { map exch get 0 ne { 1 add } if } for
+ dup 0 eq {
+ pop
+ } {
+ =only ( begincidchar) = lo 1 hi {
+ map 1 index get dup 0 eq { pop pop } { exch .printhex2 = } ifelse
+ } for (endcidchar) =
+ } ifelse
+ } for
+ % Wrap up.
+ (endcmap CMapName currentdict /CMap defineresource pop end end) =
+ f closefile
+ end
+} bind def
diff --git a/Master/xemtex/gslib/decrypt.ps b/Master/xemtex/gslib/decrypt.ps
new file mode 100644
index 00000000000..51343a422e8
--- /dev/null
+++ b/Master/xemtex/gslib/decrypt.ps
@@ -0,0 +1,14 @@
+% Decrypt an eexec-encoded file.
+% $Id: decrypt.ps,v 1.1.6.1 2002/04/10 09:22:58 giles Exp $
+
+(t.in) (r) file /in exch def
+(t.out) (w) file /out exch def
+256 string /buf exch def
+55665 % eexec encryption seed
+ { in buf readhexstring /more exch def
+ dup .type1decrypt out exch writestring
+ more not { exit } if
+ } loop
+in closefile
+out closefile
+quit
diff --git a/Master/xemtex/gslib/dnj750c.upp b/Master/xemtex/gslib/dnj750c.upp
new file mode 100644
index 00000000000..d97bb89cd82
--- /dev/null
+++ b/Master/xemtex/gslib/dnj750c.upp
@@ -0,0 +1,47 @@
+-supModel="HP Designjet 750c, 300x300DpI, Gamma=2.5, CMY"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceRGB
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Pcl
+-r300x300
+-dupMargins="{0.0 0.0 0.0 0.0}"
+-dupRedTransfer="{1.0 0.921295345 0.846429467 0.775337517 0.707954228
+0.644212425 0.584044278 0.527380228 0.474149585 0.424279869 0.377697408
+0.334326446 0.294089675 0.256907612 0.222698912 0.191379622 0.162863538
+0.137061611 0.113881744 0.0932285339 0.0750028 0.0591011234 0.0454152822
+0.0338314585 0.0242292974 0.0164806321 0.0104477014 0.00598061318 0.00291339168
+0.00105723308 0.000186894162 0.0}"
+-dupGreenTransfer="{1.0 0.921295345 0.846429467 0.775337517 0.707954228
+0.644212425 0.584044278 0.527380228 0.474149585 0.424279869 0.377697408
+0.334326446 0.294089675 0.256907612 0.222698912 0.191379622 0.162863538
+0.137061611 0.113881744 0.0932285339 0.0750028 0.0591011234 0.0454152822
+0.0338314585 0.0242292974 0.0164806321 0.0104477014 0.00598061318 0.00291339168
+0.00105723308 0.000186894162 0.0}"
+-dupBlueTransfer="{1.0 0.921295345 0.846429467 0.775337517 0.707954228
+0.644212425 0.584044278 0.527380228 0.474149585 0.424279869 0.377697408
+0.334326446 0.294089675 0.256907612 0.222698912 0.191379622 0.162863538
+0.137061611 0.113881744 0.0932285339 0.0750028 0.0591011234 0.0454152822
+0.0338314585 0.0242292974 0.0164806321 0.0104477014 0.00598061318 0.00291339168
+0.00105723308 0.000186894162 0.0}"
+-dupBeginPageCommand="<1b252d31323334355840504a4c204a4f42204e414d45203d20226773
+220d0a40504a4c20534554204d4952524f52203d204f4646200a40504a4c205345542050414c4554
+5445534f55524345203d20534f465457415245200a40504a4c205345542052454e4445524d4f4445
+203d20434f4c4f52200a40504a4c20534554205245534f4c5554494f4e203d2030200a40504a4c20
+534554205052494e5441524541203d2046554c4c53495a45200a40504a4c20534554205041504552
+4c454e475448203d2030200a40504a4c205345542050415045525749445448203d2030200a40504a
+4c20534554204f5249454e544154494f4e203d20504f525452414954200a40504a4c20534554204d
+415247494e53203d204e4f524d414c200a40504a4c20454e544552204c414e4755414745203d2048
+50474c32200d0a1b2531424250352c31494e5755304e50384543514c3130301b2531411b2661314e
+1b2a7631385700000308080800ff00ff00ff0000000000001b2a7632353561323535623235356330
+491b2a763061323535623235356331491b2a763235356130623235356332491b2a76306130623235
+356333491b2a763235356132353562306334491b2a76306132353562306335491b2a763235356130
+62306336491b2a7630613062306337491b2a74521b2a72531b2a72541b2a7231411b2a62324d>"
+-dupAdjustPageWidthCommand
+-dupAdjustPageLengthCommand
+-dupAdjustResolutionCommand
+-dupEndPageCommand="<1b2a72431b451b25314250473b1b252d313233343558>"
+-dupAbortCommand="
+(\033*rC\033E\15\12\12\12\12 Printout-Aborted\033%1BPG;\033%-12345X)"
+-dupWriteComponentCommands="{(\033*b%dV\0) (\033*b%dV\0) (\033*b%dW\0)}"
diff --git a/Master/xemtex/gslib/dnj750m.upp b/Master/xemtex/gslib/dnj750m.upp
new file mode 100644
index 00000000000..2f55525cac7
--- /dev/null
+++ b/Master/xemtex/gslib/dnj750m.upp
@@ -0,0 +1,59 @@
+-supModel="HP Designjet 750m, 600x600DpI, Gamma=2.5, CMY"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceGray
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Pcl
+-r600x600
+-dupMargins="{0.0 0.0 0.0 0.0}"
+-dupWhiteTransfer="{
+1.0 0.921295345 0.846429467 0.775337517 0.707954228
+0.644212425 0.584044278 0.527380228 0.474149585 0.424279869
+0.377697408 0.334326446 0.294089675 0.256907612 0.222698912
+0.191379622 0.162863538 0.137061611 0.113881744 0.0932285339
+0.0750028 0.0591011234 0.0454152822 0.0338314585 0.0242292974
+0.0164806321 0.0104477014 0.00598061318 0.00291339168 0.00105723308
+0.000186894162 0.0
+}"
+-dupBeginPageCommand="<
+ 1b252d313233343558
+ 40504a4c204a4f42204e414d45203d20226773220d0a
+ 40504a4c20534554204d4952524f52203d204f4646200a
+ 40504a4c205345542050414c45545445534f55524345203d20534f465457415245200a
+ 40504a4c205345542052454e4445524d4f4445203d20475241595343414c45200a
+ 40504a4c20534554205245534f4c5554494f4e203d2030200a
+ 40504a4c20534554205052494e5441524541203d2046554c4c53495a45200a
+ 40504a4c205345542050415045524c454e475448203d2030200a
+ 40504a4c205345542050415045525749445448203d2030200a
+ 40504a4c20534554204f5249454e544154494f4e203d20504f525452414954200a
+ 40504a4c20534554204d415247494e53203d204e4f524d414c200a
+ 40504a4c20454e544552204c414e4755414745203d204850474c32200d0a
+ 1b253142
+ 4250352c31
+ 494e
+ 575530
+ 4e5032
+ 4543
+ 514c313030
+ 1b253141
+ 1b2661314e
+ 1b2a763657
+ 00
+ 00
+ 01
+ 080808
+ 1b2a76 32353561 32353562 32353563 3049
+ 1b2a76 3061 3062 3063 3149
+ 1b2a74 33323152
+ 1b2a72 33323153
+ 1b2a72 54
+ 1b2a72 3141
+ 1b2a62 324d
+>"
+-dupAdjustPageWidthCommand
+-dupAdjustPageLengthCommand
+-dupAdjustResolutionCommand
+-dupEndPageCommand="(\033*rC\033E\033%1BPG;\033%-12345X)"
+-dupAbortCommand="(\033*rC\033E\15\12\12\12\12 Printout-Aborted\033%1BPG;\033%-12345X)"
+-dupWriteComponentCommands="{ (\033*b%dW\0) }"
diff --git a/Master/xemtex/gslib/docie.ps b/Master/xemtex/gslib/docie.ps
new file mode 100644
index 00000000000..010f48d8cd6
--- /dev/null
+++ b/Master/xemtex/gslib/docie.ps
@@ -0,0 +1,219 @@
+% Copyright (C) 1995 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: docie.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% docie.ps
+% Emulate CIE algorithms in PostScript.
+
+% ---------------- Auxiliary procedures ---------------- %
+
+/r1default [0 1] def
+/r3default [0 1 0 1 0 1] def
+
+/apply3 % <u> <v> <w> [<pu> <pv> <pw>] apply3 <u'> <v'> <w'>
+ { { 4 -1 roll exch exec } forall
+ } bind def
+
+/restrict % <u> <min> <max> restrict <u'>
+ { 3 1 roll .max .min
+ } bind def
+
+/restrict3 % <u> <v> <w> [<minu> ... <maxw>] restrict3 <u'> <v'> <w'>
+ { aload pop
+ 7 -1 roll 3 1 roll restrict 7 1 roll
+ 5 -1 roll 3 1 roll restrict 5 1 roll
+ restrict 3 1 roll
+ } bind def
+
+/rescale % <u> <min> <max> rescale <u'>
+ { 1 index sub 3 1 roll sub exch div 0 .max 1 .min
+ } bind def
+
+/rescale3 % <u> <v> <w> [<minu> ... <maxw>] rescale3 <u'> <v'> <w'>
+ { aload pop
+ 7 -1 roll 3 1 roll rescale 7 1 roll
+ 5 -1 roll 3 1 roll rescale 5 1 roll
+ rescale 3 1 roll
+ } bind def
+
+/mmult3 % <u> <v> <w> [<uu> <uv> ... <wv> <ww>] mmult3
+ % <u'> <v'> <w'>
+ { 4 -1 roll dup dup 6 -1 roll dup dup 8 -1 roll dup dup
+ 10 -1 roll { 10 -1 roll mul } forall
+ % Stack: u1 v1 w1 u2 v2 w2 u3 v3 w3
+ 4 -1 roll add 6 -1 roll add
+ % Stack: u1 v1 u2 v2 u3 v3 w'
+ 7 1 roll 3 -1 roll add 4 -1 roll add
+ % Stack: w' u1 u2 u3 v'
+ 5 1 roll add add 3 1 roll
+ } bind def
+
+/minvert3 % [<uu> <uv> ... <wv> <ww>] minvert3
+ % [<uu'> <uv'> ... <wv'> <ww'>]
+ { 16 dict begin
+ aload pop { I H G F E D C B A } { exch def } forall
+ /coa E I mul F H mul sub def
+ /cob F G mul D I mul sub def
+ /coc D H mul E G mul sub def
+ /det A coa mul B cob mul add C coc mul add def
+ [ coa det div
+ C H mul B I mul sub det div
+ B F mul C E mul sub det div
+ cob det div
+ A I mul C G mul sub det div
+ C D mul A F mul sub det div
+ coc det div
+ B G mul A H mul sub det div
+ A E mul B D mul sub det div
+ ]
+ end
+ } bind def
+
+/print1
+ { print dup ==
+ } bind def
+
+/print3
+ { print 3 array astore dup == aload pop
+ } bind def
+
+% ---------------- Mapping to XYZ ---------------- %
+
+/csmap % <csdict> <l> <m> <n> csmap <csdict> <x> <y> <z>
+ { 3 index /RangeLMN .knownget not { r3default } if restrict3
+DEBUG { (After RangeLMN Decode: ) print3 } if
+ 3 index /DecodeLMN .knownget { apply3 } if
+DEBUG { (After DecodeLMN Decode: ) print3 } if
+ 3 index /MatrixLMN .knownget { mmult3 } if
+DEBUG { (After MatrixLMN Decode: ) print3 } if
+ } bind def
+
+/csciea % <csdict> <a> csciea <csdict> <x> <y> <z>
+ { 1 index /RangeA .knownget not { r1default } if restrict
+DEBUG { (After RangeA Decode: ) print1 } if
+ 1 index /DecodeA .knownget { exec } if
+DEBUG { (After DecodeA Decode: ) print1 } if
+ 1 index /MatrixA .knownget
+ { { 1 index mul exch } forall pop }
+ { dup dup }
+ ifelse
+DEBUG { (After MatrixA Decode: ) print3 } if
+ csmap
+ } bind def
+
+/cscieabc % <csdict> <a> <b> <c> cscieabc <csdict> <x> <y> <z>
+ { 3 index /RangeABC .knownget not { r3default } if restrict3
+DEBUG { (After RangeABC Decode: ) print3 } if
+ 3 index /DecodeABC .knownget { apply3 } if
+DEBUG { (After DecodeABC Decode: ) print3 } if
+ 3 index /MatrixABC .knownget { mmult3 } if
+DEBUG { (After MatrixABC Decode: ) print3 } if
+ csmap
+ } bind def
+
+% ---------------- Rendering from XYZ ---------------- %
+
+/lookup3 % <rtable> <a[0..1]> <b[0..1]> <c[0..1]> lookup3
+ % <rtable> <bytes>
+ { 3 -1 roll 3 index 0 get 1 sub mul
+ 3 -1 roll 3 index 1 get 1 sub mul
+ 3 -1 roll 3 index 2 get 1 sub mul
+ % Stack: rtable ia ib ic
+DEBUG { (RenderTable indices: ) print3 mark 5 1 roll } if
+ 3 -1 roll round cvi 3 index 3 get exch get
+ % Stack: rtable ib ic string
+ 3 -1 roll round cvi 3 index 2 get mul
+ % Stack: rtable ic string ib*nc
+ 3 -1 roll round cvi add 2 index 4 get mul
+ % Stack: rtable string index
+ 2 index 4 get getinterval
+ % Stack: rtable bytes
+DEBUG { (RenderTable values: ) print (<) print (%stdout) (w) file 1 index writehexstring (>) = } if
+ } bind def
+
+/bpdefault [0 0 0] def
+
+/crmap % <csdict> <crdict> <x> <y> <z> crmap <v1> ...
+ {
+DEBUG { (CIE XYZ = ) print3 } if
+ 3 index /MatrixPQR .knownget { mmult3 } if
+DEBUG { (After MatrixPQR: ) print3 } if
+ 4 index /WhitePoint get
+ 5 index /BlackPoint .knownget not { bpdefault } if
+ 5 index /WhitePoint get
+ 6 index /BlackPoint .knownget not { bpdefault } if
+ 4
+ { 4 -1 roll aload pop
+ % Stack: csdict crdict x y z pt pt pt px py pz
+ 3 copy 12 index /MatrixPQR .knownget { mmult3 } if 6 array astore
+ }
+ repeat
+ % Stack: csdict crdict x y z wps+ bps+ wpd+ bpd+
+ 9 -1 roll pop % get rid of csdict
+ 7 4 roll
+ 7 index /TransformPQR get
+ { % Stack: crdict wps+ bps+ wpd+ bpd+ u v w proc
+ 8 copy exch pop exch pop
+ exec exch pop 4 -1 roll pop
+ }
+ forall
+ 7 3 roll pop pop pop pop % get rid of White/BlackPoints
+DEBUG { (After TransformPQR: ) print3 } if
+ 3 index /MatrixPQR .knownget { minvert3 mmult3 } if
+DEBUG { (After MatrixPQR': ) print3 } if
+ 3 index /MatrixLMN .knownget { mmult3 } if
+DEBUG { (After MatrixLMN Encode: ) print3 } if
+ 3 index /EncodeLMN .knownget { apply3 } if
+DEBUG { (After EncodeLMN Encode: ) print3 } if
+ 3 index /RangeLMN .knownget not { r3default } if restrict3
+DEBUG { (After RangeLMN Encode: ) print3 } if
+ 3 index /MatrixABC .knownget { mmult3 } if
+DEBUG { (After MatrixABC Encode: ) print3 } if
+ 3 index /EncodeABC .knownget { apply3 } if
+DEBUG { (After EncodeABC Encode: ) print3 } if
+ 3 index /RangeABC .knownget not { r3default } if
+ 5 -1 roll /RenderTable .knownget
+ { % Stack: u v w ranges rtable
+ 5 1 roll rescale3
+DEBUG { (Rescaled ABC: ) print3 } if
+ % Stack: rtable a b c
+ lookup3
+ % Stack: rtable bytes
+ 0 1 3 index 4 get 1 sub
+ { % Stack: values rtable bytes c
+ 2 copy get 255 div
+ % Stack: values rtable bytes c v
+ 3 index 3 -1 roll 5 add get exec 3 1 roll
+ }
+ for pop pop
+DEBUG { (After RenderTableT: ) print ] dup == aload pop } if
+ }
+ { restrict3
+DEBUG { (After RangeABC Encode: ) print3 } if
+ }
+ ifelse
+ } bind def
+
+% ---------------- Top level control ---------------- %
+
+/mapdict mark
+ /CIEBasedA { 1 get exch csciea currentcolorrendering 4 1 roll crmap } bind
+ /CIEBasedABC { 1 get 4 1 roll cscieabc currentcolorrendering 4 1 roll crmap } bind
+.dicttomark def
+/mapcie % <a> mapcie <v1> ...
+ % <a> <b> <c> mapcie <v1> ...
+ { currentcolorspace dup 0 get //mapdict exch get exec
+ } bind def
diff --git a/Master/xemtex/gslib/dvipdf b/Master/xemtex/gslib/dvipdf
new file mode 100644
index 00000000000..6f73174abaa
--- /dev/null
+++ b/Master/xemtex/gslib/dvipdf
@@ -0,0 +1,40 @@
+#!/bin/sh
+# $Id: dvipdf,v 1.2 2001/06/22 16:09:22 lpd Exp $
+# Convert DVI to PDF.
+#
+# Please contact Andrew Ford <A.Ford@ford-mason.co.uk> with any questions
+# about this file.
+#
+# Based on ps2pdf
+
+OPTIONS=""
+while true
+do
+ case "$1" in
+ -*) OPTIONS="$OPTIONS $1" ;;
+ *) break ;;
+ esac
+ shift
+done
+
+if [ $# -lt 1 -o $# -gt 2 ]; then
+ echo "Usage: `basename $0` [options...] input.dvi [output.pdf]" 1>&2
+ exit 1
+fi
+
+infile=$1;
+
+if [ $# -eq 1 ]
+then
+ case "${infile}" in
+ *.dvi) base=`basename "${infile}" .dvi` ;;
+ *) base=`basename "${infile}"` ;;
+ esac
+ outfile="${base}".pdf
+else
+ outfile=$2
+fi
+
+# We have to include the options twice because -I only takes effect if it
+# appears before other options.
+exec dvips -q -f "$infile" | gs $OPTIONS -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$outfile" $OPTIONS -c .setpdfwrite -
diff --git a/Master/xemtex/gslib/eps2eps b/Master/xemtex/gslib/eps2eps
new file mode 100644
index 00000000000..14f5d679b44
--- /dev/null
+++ b/Master/xemtex/gslib/eps2eps
@@ -0,0 +1,20 @@
+#!/bin/sh
+# $Id: eps2eps,v 1.3 2001/06/22 16:09:22 lpd Exp $
+# "Distill" Encapsulated PostScript.
+
+OPTIONS="-dDEVICEWIDTH=250000 -dDEVICEHEIGHT=250000"
+while true
+do
+ case "$1" in
+ -*) OPTIONS="$OPTIONS $1" ;;
+ *) break ;;
+ esac
+ shift
+done
+
+if [ $# -ne 2 ]; then
+ echo "Usage: `basename $0` ...switches... input.eps output.eps" 1>&2
+ exit 1
+fi
+
+exec gs -q -sDEVICE=epswrite "-sOutputFile=$2" -dNOPAUSE -dBATCH -dSAFER $OPTIONS "$1"
diff --git a/Master/xemtex/gslib/eps2eps.bat b/Master/xemtex/gslib/eps2eps.bat
new file mode 100644
index 00000000000..6be9375698c
--- /dev/null
+++ b/Master/xemtex/gslib/eps2eps.bat
@@ -0,0 +1,26 @@
+@echo off
+@rem $Id: eps2eps.bat,v 1.5 2001/06/22 16:09:22 lpd Exp $
+@rem "Distill" Encapsulated PostScript.
+
+if %1/==/ goto usage
+if %2/==/ goto usage
+call gssetgs.bat
+echo -dNOPAUSE -dBATCH -dSAFER >_.at
+rem Watcom C deletes = signs, so use # instead.
+echo -dDEVICEWIDTH#250000 -dDEVICEHEIGHT#250000 >>_.at
+:cp
+if %3/==/ goto doit
+echo %1 >>_.at
+shift
+goto cp
+
+:doit
+rem Watcom C deletes = signs, so use # instead.
+%GSC% -q -sDEVICE#epswrite -sOutputFile#%2 @_.at %1
+if exist _.at erase _.at
+goto end
+
+:usage
+echo "Usage: eps2eps ...switches... input.eps output.eps"
+
+:end
diff --git a/Master/xemtex/gslib/eps2eps.cmd b/Master/xemtex/gslib/eps2eps.cmd
new file mode 100755
index 00000000000..0fedb254beb
--- /dev/null
+++ b/Master/xemtex/gslib/eps2eps.cmd
@@ -0,0 +1,36 @@
+/* $Id: eps2eps.cmd,v 1.2 2000/12/30 18:45:37 alexcher Exp $ */
+/*
+ * This file is maintained by a user: if you have any questions about it,
+ * please contact Mark Hale (mark.hale@physics.org).
+ */
+
+/* "Distill" Encapsulated PostScript. */
+
+parse arg params
+
+gs='@gsos2'
+
+if params='' then call usage
+
+options='-dNOPAUSE -dBATCH -dSAFER'
+
+/* extract options from command line */
+i=1
+param=word(params,i)
+do while substr(param,1,1)='-'
+ options=options param
+ i=i+1
+ param=word(params,i)
+end
+
+infile=param
+if infile='' then call usage
+outfile=word(params,i+1)
+if outfile='' then call usage
+
+gs '-q -sDEVICE=epswrite -sOutputFile='outfile options infile
+exit
+
+usage:
+say 'Usage: eps2eps ...switches... input.eps output.eps'
+exit
diff --git a/Master/xemtex/gslib/errpage.ps b/Master/xemtex/gslib/errpage.ps
new file mode 100644
index 00000000000..7619205168c
--- /dev/null
+++ b/Master/xemtex/gslib/errpage.ps
@@ -0,0 +1,363 @@
+%!
+% Copyright (C) 1992, 1996, 1998 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: errpage.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Print an informative error page if an error occurs.
+% Inspired by Adobe's `ehandler.ps' and David Holzgang's PinPoint.
+
+/EPdict 80 dict def
+EPdict begin
+
+/escale 12 def
+/efont /Helvetica findfont escale scalefont def
+/eheight escale 1.2 mul def
+
+% Miscellaneous utilities
+/xdef
+ { exch def
+ } bind def
+
+% Define `show' equivalents of = and ==
+
+/show=
+ { =string { cvs } stopped { pop pop (==unprintable==) } if show
+ } bind def
+
+/.dict 18 dict def
+.dict begin
+ /.buf =string def
+ /.cvp {.buf cvs show} bind def
+ /.nop {(-) .p type .cvp (-) .p} bind def
+ /.p {show} bind def
+ /.p1 {( ) dup 0 4 -1 roll put show} bind def
+ /.print
+ {dup type .dict exch known
+ {dup type exec} {.nop} ifelse
+ } bind def
+ /integertype /.cvp load def
+ /nulltype { pop (null) .p } bind def
+ /realtype /.cvp load def
+ /booleantype /.cvp load def
+ /nametype
+ {dup xcheck not {(/) .p} if
+ dup length .buf length gt
+ {dup length string}
+ {.buf}
+ ifelse cvs .p} bind def
+ /arraytype
+ {dup rcheck
+ {dup xcheck {(})({)} {(])([)} ifelse .p
+ exch () exch
+ {exch .p .print ( )} forall pop .p}
+ {.nop}
+ ifelse} bind def
+ /operatortype
+ {(--) .p .cvp (--) .p} bind def
+ /packedarraytype /arraytype load def
+ /stringtype
+ {dup rcheck
+ {(\() .p
+ {/.ch exch def
+ .ch 32 lt .ch 127 ge or
+ {(\\) .p .ch 8#1000 add 8 .buf cvrs 1 3 getinterval .p}
+ {.ch 40 eq .ch 41 eq or .ch 92 eq or
+ {(\\) .p} if
+ .ch .p1}
+ ifelse}
+ forall (\)) .p}
+ {.nop}
+ ifelse} bind def
+end
+/show==
+ { .dict begin .print end
+ } bind def
+
+% Printing utilities
+
+/eol
+ { /ey ey eheight sub def
+ ex ey moveto
+ } bind def
+/setx
+ { /ex xdef ex ey moveto
+ } bind def
+/setxy
+ { /ey xdef /ex xdef
+ ex ey moveto
+ } bind def
+/indent
+ { /lx ex def
+ ( ) show currentpoint setxy
+ } bind def
+/unindent
+ { lx setx
+ } bind def
+
+% Get the name of the n'th dictionary on the (saved) dictionary stack.
+/nthdictname % n -> name true | false
+ { dup dstack exch get
+ exch -1 0
+ { dstack exch get
+ { 2 index eq { exch pop exit } { pop } ifelse
+ }
+ forall
+ dup type /nametype eq { exit } if
+ }
+ for
+ dup type /nametype eq { true } { pop false } ifelse
+ } bind def
+
+% Find the name of a currently executing procedure.
+/findprocname % <proctail> findprocname <dstackindex> <procname> true
+ % <proctail> findprocname false
+ { dup length /proclength xdef
+ dup type cvlit /proctype xdef
+ dstack length 1 sub -1 0
+ { dup dstack exch get
+ { dup type proctype eq
+ { dup rcheck { dup length } { -1 } ifelse proclength gt
+ { dup length proclength sub proclength getinterval 3 index eq
+ { 3 -1 roll pop exit }
+ { pop }
+ ifelse
+ }
+ { pop pop
+ }
+ ifelse
+ }
+ { pop pop
+ }
+ ifelse
+ }
+ forall
+ dup type /nametype eq { exit } if
+ pop
+ }
+ for
+ dup type /nametype eq { true } { pop false } ifelse
+ } bind def
+
+% Error printing routine.
+% The top 2 elements of the o-stack are systemdict and EPdict.
+% For the moment, we ignore the possibility of stack overflow or VMerror.
+/showerror % <command> <countexecstack> <errorname> showerror -
+ {
+ % Restore the error handlers.
+
+ saveerrordict { errordict 3 1 roll put } forall
+ $error /recordstacks false put
+
+ % Save information from the stacks.
+
+ /saveerror xdef
+ countexecstack array execstack
+ 0 3 -1 roll 1 sub getinterval
+ /estack xdef
+ /savecommand xdef
+
+ countdictstack array dictstack
+ dup length 2 sub 0 exch getinterval
+ /dstack xdef
+
+ % Save state variables that will be reset.
+ % (We could save and print a lot more of the graphics state.)
+
+ /savefont currentfont def
+ mark { savefont /FontName get =string cvs cvn } stopped
+ { cleartomark null }
+ { exch pop dup length 0 eq { pop null } if }
+ ifelse /savefontname xdef
+ efont setfont
+
+ { currentpoint } stopped { null null } if
+ /savey xdef /savex xdef
+ 0 0
+ { pop pop }
+ { pop pop 1 add }
+ { pop pop pop pop pop pop exch 1 add exch }
+ { }
+ pathforall
+ /savelines xdef /savecurves xdef
+ /savepathbbox { [ pathbbox ] } stopped { pop null } if def
+
+ initmatrix
+
+ clippath pathbbox
+ /savecliptop xdef /saveclipright xdef
+ /saveclipbottom xdef /saveclipleft xdef
+ initclip
+
+ initgraphics
+
+ % Eject the current page.
+
+ showpage
+
+ % Print the page heading.
+
+ 18 clippath pathbbox newpath
+ 4 1 roll pop pop pop eheight sub 12 sub setxy
+ product (Product: )
+ statusdict /printername known
+ { 100 string statusdict begin printername end
+ dup length 0 gt
+ { exch pop exch pop (Printer name: ) }
+ { pop }
+ ifelse
+ }
+ if show show eol
+ (Interpreter version ) show version show eol
+ (Error: ) show saveerror show= eol
+ (Command being executed: ) show /savecommand load show= eol
+ currentfile { fileposition } stopped
+ { pop }
+ { (Position in input file: ) show show= eol }
+ ifelse eol
+
+ % Print the current graphics state.
+
+ (Page parameters:) show eol indent
+ (page size: ) show
+ gsave clippath pathbbox grestore
+ exch 3 index sub show= (pt x ) show
+ exch sub show= (pt) show pop eol
+ (current position: ) show
+ savex null eq
+ { (none) show }
+ { (x = ) show savex show= (, y = ) show savey show= }
+ ifelse eol
+ savelines savecurves add 0 eq
+ { (current path is empty) show
+ }
+ { (current path: ) show savelines show= ( line(s), ) show
+ savecurves show= ( curve(s)) show eol
+ (path bounding box: ) show savepathbbox show==
+ }
+ ifelse eol
+ (current font: ) show
+ savefontname dup null eq
+ { pop (--no name--) show }
+ { show= ( ) show
+ gsave
+ savefontname findfont /FontMatrix get matrix invertmatrix
+ grestore
+ savefont /FontMatrix get matrix concatmatrix
+ dup 1 get 0 eq 1 index 2 get 0 eq and
+ 1 index 4 get 0 eq and 1 index 5 get 0 eq and
+ 1 index 0 get 2 index 3 get eq and
+ { 0 get show= (pt) show }
+ { (scaled by ) show show= }
+ ifelse
+ }
+ ifelse eol
+ eol unindent
+
+ % Print the operand stack.
+
+ /stky ey def
+ (Operand stack:) show eol indent
+ count { show== eol } repeat
+ eol unindent
+
+ % Print the dictionary stack.
+
+ (Dictionary stack:) show eol indent
+ dstack length 1 sub -1 0
+ { nthdictname { show= } { (<unknown>) show } ifelse eol
+ } for
+ eol unindent
+
+ % Print the execution stack.
+
+ 280 stky setxy
+ (Execution stack:) show eol indent
+ estack length 1 sub -1 1
+ { estack exch get
+ dup type /operatortype eq
+ { show= eol
+ }
+ { dup type dup /arraytype eq exch /packedarraytype eq or
+ { dup xcheck
+ { dup rcheck
+ { findprocname
+ { show= nthdictname { ( in ) show show= } if eol
+ }
+ if
+ }
+ { pop
+ }
+ ifelse
+ }
+ { pop
+ }
+ ifelse
+ }
+ { pop
+ }
+ ifelse
+ }
+ ifelse
+ } for eol unindent
+
+ % Print the next few lines of input.
+ % Unfortunately, this crashes on an Adobe printer.
+
+(
+ (Next few lines of input:) show eol indent
+ /input currentfile def
+ mark { 4
+ { input ( ) readstring not { pop exit } if
+ dup 0 get dup 10 eq
+ { pop pop eol 1 sub dup 0 eq { pop exit } if }
+ { dup 13 eq { pop pop } { pop show } ifelse }
+ ifelse
+ }
+ loop } stopped cleartomark eol unindent
+) pop
+
+ % Wrap up.
+
+ showpage
+ quit
+
+ } def
+
+% Define the common procedure for handling errors.
+/doerror
+ { systemdict begin EPdict begin showerror
+ } bind def
+
+end
+
+% Install our own error handlers.
+
+/EPinstall
+ { EPdict begin
+ /saveerrordict errordict length dict def
+ errordict saveerrordict copy pop
+ errordict
+ { pop [ /countexecstack load 2 index cvlit /doerror load /exec load ] cvx
+ errordict 3 1 roll put
+ } forall
+ errordict /handleerror
+ [ /countexecstack load /handleerror /doerror load /exec load
+ ] cvx
+ put
+ end
+ } bind def
+
+EPinstall
diff --git a/Master/xemtex/gslib/fixmswrd.pl b/Master/xemtex/gslib/fixmswrd.pl
new file mode 100644
index 00000000000..be35465790b
--- /dev/null
+++ b/Master/xemtex/gslib/fixmswrd.pl
@@ -0,0 +1,208 @@
+#!/usr/bin/perl
+# $Id: fixmswrd.pl,v 1.1 2000/03/09 08:40:39 lpd Exp $
+
+# $Id: fixmswrd.pl,v 1.1 2000/03/09 08:40:39 lpd Exp $
+
+# (C) 1997 Anthony Shipman
+#
+# This software is provided 'as-is', without any express or implied
+# warranty. In no event will the authors be held liable for any damages
+# arising from the use of this software.
+#
+# Permission is granted to anyone to use this software for any purpose,
+# including commercial applications, and to alter it and redistribute it
+# freely, subject to the following restrictions:
+#
+# 1. The origin of this software must not be misrepresented; you must not
+# claim that you wrote the original software. If you use this software
+# in a product, an acknowledgment in the product documentation would be
+# appreciated but is not required.
+# 2. Altered source versions must be plainly marked as such, and must not be
+# misrepresented as being the original software.
+# 3. This notice may not be removed or altered from any source distribution.
+#
+# Anthony Shipman shipmana@acm.org
+
+# This program patches the postscript generated by MS Word printer drivers
+# so that they work with ghostview 1.5. The problem is that the document
+# structuring conventions are not followed by Word. The pages are supposed
+# to be independent but they depend on a dictionary being opened outside
+# of the pages. The erroneous structure is
+#
+# %%EndSetup
+# NTPSOct95 begin
+# %%Page: 1 1
+# <text>
+# showpage
+# %%Page: 2 2
+# <text>
+# showpage
+# ......
+# %%Trailer
+# ...
+# end
+# %%EOF
+#
+# This only works if the all of the structure around the pages is preserved.
+# The opening of NTPSOct95 happens outside of any structured section so
+# it is never seen by ghostview. We change the structure to
+#
+# %%EndSetup
+# %%Page: 1 1
+# NTPSOct95 begin
+# <text>
+# showpage
+# end
+# %%Page: 2 2
+# NTPSOct95 begin
+# <text>
+# showpage
+# end
+# ......
+# %%Trailer
+# ...
+# %%EOF
+#
+# That is the dictionary opening is repeated inside each page.
+#
+# We add a comment to the document to mark that it has been converted.
+# This has the form
+# %LOCALGhostviewPatched
+#
+# Usage:
+# fixmswrd [-v] [file [output-file]]
+
+require 'getopts.pl';
+
+#=================================================================
+
+$program = "fixmswrd";
+
+sub usage {
+ die "Usage: $program [-v] [file [output-file]]\n";
+}
+
+#=================================================================
+
+&Getopts("v") || &usage;
+
+$verbose = $opt_v;
+
+
+$infile = shift(@ARGV);
+if ($infile)
+{
+ open(INFILE, $infile) || die "$program: Cannot read from $infile\n";
+ $handle = "INFILE";
+}
+else
+{
+ $handle = "STDIN";
+}
+
+
+$outfile = shift(@ARGV);
+if ($outfile)
+{
+ open(OUTFILE, ">$outfile") || die "$program: Cannot write to $outfile\n";
+ select(OUTFILE);
+}
+
+# This reads the header comments and detects the presence of the marker.
+$have_marker = 0;
+
+undef $dict_name;
+undef $dict_line;
+
+&read_comments;
+&put_comments;
+
+if ($have_marker)
+{
+ $verbose && print STDERR "$program: Warning - already converted\n";
+
+ while(<$handle>) # pass the file through unchanged.
+ {
+ print;
+ }
+}
+else
+{
+ $seen_trailer = 0;
+
+ while(<$handle>) # massage the file
+ {
+ if ($dict_line)
+ {
+ next if (/$dict_line/o); # drop the old begin line
+ $seen_trailer = 1 if (/^%%Trailer/);
+ next if ($seen_trailer and /^end/); # drop the old end line
+ }
+
+ print;
+
+ if (/^%%Page:/)
+ {
+ print "$dict_name begin\n"; # add at the start of the page
+ }
+ elsif (/^showpage/)
+ {
+ print "end\n"; # add at the end of the page
+ }
+ elsif (/^%%BeginResource: procset (\S+)/)
+ {
+ $dict_name = $1;
+ $dict_line = "^$dict_name begin";
+ }
+ elsif (/^%%BeginProcSet: (\S+)/) # for older document versions
+ {
+ $dict_name = $1;
+ $dict_line = "^$dict_name begin";
+ }
+ elsif (/^%%EndProlog:/)
+ {
+ unless ($dict_line)
+ {
+ $verbose &&
+ print STDERR "$program: Warning - unrecognised document structure\n";
+ }
+ }
+ }
+}
+
+exit 0;
+
+#=================================================================
+
+
+# This reads all of the header comments into an array which we can write
+# out again later. In addition we detect the presence of the marker comment.
+
+sub read_comments
+{
+ @headers = ();
+
+ while (<$handle>)
+ { # without chopping
+ push(@headers, $_);
+ if (/^%LOCALGhostviewPatched/)
+ {
+ $have_marker = 1;
+ }
+ last if /^%%EndComments/;
+ }
+}
+
+
+
+sub put_comments
+{
+ foreach $h (@headers)
+ {
+ if (!$have_marker and ($h =~ /^%%EndComments/))
+ {
+ print "%LOCALGhostviewPatched\n";
+ }
+ print $h; # contains the newline
+ }
+}
diff --git a/Master/xemtex/gslib/font2c b/Master/xemtex/gslib/font2c
new file mode 100644
index 00000000000..5404ba5bb1d
--- /dev/null
+++ b/Master/xemtex/gslib/font2c
@@ -0,0 +1,3 @@
+#!/bin/sh
+# $Id: font2c,v 1.1 2000/03/09 08:40:39 lpd Exp $
+exec gs -q -dNODISPLAY -dWRITESYSTEMDICT -- font2c.ps "$@"
diff --git a/Master/xemtex/gslib/font2c.bat b/Master/xemtex/gslib/font2c.bat
new file mode 100644
index 00000000000..f3fd69a7d8c
--- /dev/null
+++ b/Master/xemtex/gslib/font2c.bat
@@ -0,0 +1,5 @@
+@echo off
+@rem $Id: font2c.bat,v 1.2 2000/05/20 20:53:05 lpd Exp $
+
+call gssetgs.bat
+%GSC% -q -dNODISPLAY -dWRITESYSTEMDICT -- font2c.ps %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/Master/xemtex/gslib/font2c.cmd b/Master/xemtex/gslib/font2c.cmd
new file mode 100755
index 00000000000..a1b7894eff7
--- /dev/null
+++ b/Master/xemtex/gslib/font2c.cmd
@@ -0,0 +1,7 @@
+/* $Id: font2c.cmd,v 1.1 2000/07/05 16:21:13 lpd Exp $ */
+/*
+ * This file is maintained by a user: if you have any questions about it,
+ * please contact Mark Hale (mark.hale@physics.org).
+ */
+
+@gsos2 -q -dNODISPLAY -dWRITESYSTEMDICT -- font2c.ps %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/Master/xemtex/gslib/font2c.ps b/Master/xemtex/gslib/font2c.ps
new file mode 100644
index 00000000000..fecd5713e29
--- /dev/null
+++ b/Master/xemtex/gslib/font2c.ps
@@ -0,0 +1,676 @@
+% Copyright (C) 1992, 1993, 1994, 1995, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: font2c.ps,v 1.3.2.1.2.1 2003/04/12 14:02:38 giles Exp $
+% font2c.ps
+% Write out a PostScript Type 0 or Type 1 font as C code
+% that can be linked with the interpreter.
+% This even works on protected fonts, if you use the -dWRITESYSTEMDICT
+% switch in the command line. The code is reentrant and location-
+% independent and has no external references, so it can be put into
+% a sharable library even on VMS.
+
+/font2cdict 100 dict dup begin
+
+% Define the maximum string length that all compilers will accept.
+% This must be approximately
+% min(max line length, max string literal length) / 4 - 5.
+
+/max_wcs 50 def
+
+% Define a temporary file for writing out procedures.
+/wtempname (_.tmp) def
+
+% ------ Protection utilities ------ %
+
+% Protection values are represented by a mask:
+/a_noaccess 0 def
+/a_executeonly 1 def
+/a_readonly 3 def
+/a_all 7 def
+/prot_names
+ [ (0) (a_execute) null (a_readonly) null null null (a_all)
+ ] def
+/prot_opers
+ [ {noaccess} {executeonly} {} {readonly} {} {} {} {}
+ ] def
+
+% Get the protection of an object.
+ /getpa
+ { dup wcheck
+ { pop a_all }
+ { % Check for executeonly or noaccess objects in protected.
+ dup protected exch known
+ { protected exch get }
+ { pop a_readonly }
+ ifelse
+ }
+ ifelse
+ } bind def
+
+% Get the protection appropriate for (all the) values in a dictionary.
+ /getva
+ { a_noaccess exch
+ { exch pop
+ dup type dup /stringtype eq 1 index /arraytype eq or
+ exch /packedarraytype eq or
+ { getpa a_readonly and or }
+ { pop pop a_all exit }
+ ifelse
+ }
+ forall
+ } bind def
+
+% Keep track of executeonly and noaccess objects,
+% but don't let the protection actually take effect.
+.currentglobal
+false .setglobal % so protected can reference local objs
+/protected % do first so // will work
+ systemdict wcheck { 1500 dict } { 1 dict } ifelse
+def
+systemdict wcheck not
+ { (Warning: you will not be able to convert protected fonts.\n) print
+ (If you need to convert a protected font, please\n) print
+ (restart the program and specify the -dWRITESYSTEMDICT switch.\n) print
+ flush
+ (%end) .skipeof
+ }
+if
+userdict begin
+ /executeonly
+ { dup //protected exch //a_executeonly put readonly
+ } bind def
+ /noaccess
+ { dup //protected exch //a_noaccess put readonly
+ } bind def
+end
+true .setglobal
+systemdict begin
+ /executeonly
+ { userdict /executeonly get exec
+ } bind odef
+ /noaccess
+ { userdict /noaccess get exec
+ } bind odef
+end
+%end
+.setglobal
+
+% ------ Output utilities ------ %
+
+% By convention, the output file is named cfile.
+
+% Define some utilities for writing the output file.
+ /wtstring 100 string def
+ /wb {cfile exch write} bind def
+ /ws {cfile exch writestring} bind def
+ /wl {ws (\n) ws} bind def
+ /wt {wtstring cvs ws} bind def
+
+% Write a C string. Some compilers have unreasonably small limits on
+% the length of a string literal or the length of a line, so every place
+% that uses wcs must either know that the string is short,
+% or be prepared to use wcca instead.
+ /wbx
+ { 8#1000 add 8 (0000) cvrs dup 0 (\\) 0 get put ws
+ } bind def
+ /wcst
+ [
+ 32 { /wbx load } repeat
+ 95 { /wb load } repeat
+ 129 { /wbx load } repeat
+ ] def
+ ("\\) { wcst exch { (\\) ws wb } put } forall
+ /wcs
+ { (") ws { dup wcst exch get exec } forall (") ws
+ } bind def
+ /can_wcs % Test if can use wcs
+ { length max_wcs le
+ } bind def
+ /wncs % name -> C string
+ { wtstring cvs wcs
+ } bind def
+% Write a C string as an array of character values.
+% We only need this because of line and literal length limitations.
+ /wca % <string> <prefix> <suffix> wca -
+ { 0 4 -2 roll exch
+ { % Stack: suffix n prefix char
+ exch ws
+ exch dup 19 ge { () wl pop 0 } if 1 add
+ exch dup 32 ge 1 index 126 le and
+ { 39 wb dup 39 eq 1 index 92 eq or { 92 wb } if wb 39 wb }
+ { wt }
+ ifelse (,)
+ } forall
+ pop pop ws
+ } bind def
+ /wcca % <string> wcca -
+ { ({\n) (}) wca
+ } bind def
+
+% Write object protection attributes. Note that dictionaries and arrays are
+% the only objects that can be writable.
+ /wpa
+ { dup xcheck { (a_executable|) ws } if
+ dup type dup /dicttype eq exch /arraytype eq or
+ { getpa }
+ { getpa a_readonly and }
+ ifelse prot_names exch get ws
+ } bind def
+ /wva
+ { getva prot_names exch get ws
+ } bind def
+
+% ------ Object writing ------ %
+
+ /wnstring 128 string def
+
+% Convert an object to a string to be scanned at a later time.
+ /cvos % <obj> cvos <string>
+ { % We'd like to use == and write directly to a string,
+ % but we can't do the former because of operators,
+ % and we can't do the latter because we can't predict
+ % how long the string would have to be....
+ wtempname (w) file dup 3 -1 roll wproc closefile
+ wtempname status pop pop pop exch pop string
+ wtempname (r) file dup 3 -1 roll readstring pop exch closefile
+ } bind def
+
+% Write a string/name or null as an element of a string/name/null array.
+% Convert any other kind of value to a token to be read back in.
+ /wsn
+ { dup null eq
+ { pop (\t255,255,) wl
+ }
+ { dup type /nametype eq { wnstring cvs } if
+ dup type /stringtype ne { cvos (255,) ws } if
+ dup length 256 idiv wt (,) ws
+ dup length 256 mod wt
+ (,) (,\n) wca
+ }
+ ifelse
+ } bind def
+% Write a packed string/name/null array.
+ /wsna % <name> <(string|name|null)*> wsna -
+ { (\tstatic const char ) ws exch wt ([] = {) wl
+ { wsn } forall
+ (\t0\n};) wl
+ } bind def
+
+% Write a number or an array of numbers, as refs.
+/isnumber
+ { type dup /integertype eq exch /realtype eq or
+ } bind def
+/wnums
+ { dup isnumber
+ { (real_v\() ws wt (\),) ws }
+ { { wnums } forall }
+ ifelse
+ } bind def
+
+% Test whether a procedure or unusual array can be written (printed).
+/iswx 4 dict dup begin
+ /arraytype { { iswproc } isall } def
+ /nametype { pop true } def
+ /operatortype { pop true } def % assume it has been bound in
+ /packedarraytype /arraytype load def
+end def
+/iswnx 6 dict dup begin
+ /arraytype { { iswproc } isall } def
+ /integertype { pop true } def
+ /nametype { pop true } def
+ /realtype { pop true } def
+ /stringtype { pop true } def
+ /packedarraytype /arraytype load def
+end def
+/iswproc % <obj> iswproc <bool>
+ { dup xcheck { iswx } { iswnx } ifelse
+ 1 index type .knownget { exec } { pop false } ifelse
+ } bind def
+
+% Write a printable procedure (one for which iswproc returns true).
+/wproca 3 dict dup begin
+ /arraytype
+ { 1 index ({) writestring
+ { 1 index ( ) writestring 1 index exch wproc } forall
+ (}) writestring
+ } bind def
+ /packedarraytype /arraytype load def
+ /operatortype { .writecvs } bind def % assume binding would work
+end def
+/wproc % <file> <proc> wproc -
+ { dup type wproca exch .knownget { exec } { write==only } ifelse
+ } bind def
+
+% Write a named object. Return true if this was possible.
+% Legal types are: boolean, integer, name, real, string,
+% array of (integer, integer+real, name, null+string),
+% and certain procedures and other arrays (see iswproc above).
+% All other objects are either handled specially or ignored.
+ /isall % <array> <proc> isall <bool>
+ { true 3 -1 roll
+ { 2 index exec not { pop false exit } if }
+ forall exch pop
+ } bind def
+ /wott 8 dict dup begin
+ /arraytype
+ { woatt
+ { aload pop 2 index 2 index exec
+ { exch pop exec exit }
+ { pop pop }
+ ifelse
+ }
+ forall
+ } bind def
+ /booleantype
+ { { (\tmake_true\(&) } { (\tmake_false\(&) } ifelse ws
+ wt (\);) wl true
+ } bind def
+ /integertype
+ { (\tmake_int\(&) ws exch wt (, ) ws
+ wt (\);) wl true
+ } bind def
+ /nametype
+ { (\tcode = (*pprocs->name_create)\(i_ctx_p, &) ws exch wt
+ (, ) ws wnstring cvs wcs % OK, names are short
+ (\);) wl
+ (\tif ( code < 0 ) return code;) wl
+ true
+ } bind def
+ /packedarraytype
+ /arraytype load def
+ /realtype
+ { (\tmake_real\(&) ws exch wt (, ) ws
+ wt (\);) wl true
+ } bind def
+ /stringtype
+ { ({\tstatic const char s_[] = ) ws
+ dup dup can_wcs { wcs } { wcca } ifelse
+ (;) wl
+ (\tmake_const_string\(&) ws exch wt
+ (, a_readonly, ) ws length wt (, (const byte *)s_\);) wl
+ (}) wl true
+ } bind def
+ end def
+% Write some other kind of object, if known.
+ /wother
+ { dup otherobjs exch known
+ { otherobjs exch get (\t) ws exch wt ( = ) ws wt (;) wl true }
+ { pop pop false }
+ ifelse
+ } bind def
+% Top-level procedure.
+ /wo % name obj -> OK
+ { dup type wott exch .knownget { exec } { wother } ifelse
+ } bind def
+
+% Write an array (called by wo).
+ /wap % <name> <array> wap -
+ { dup xcheck not 1 index wcheck not and 1 index rcheck and
+ { pop pop }
+ { (\tr_set_attrs\(&) ws exch wt (, ) ws wpa (\);) wl }
+ ifelse
+ } bind def
+ /wnuma { % <name> <array> <element_C_type> <<type>_v> wnuma -
+ ({\tstatic const ref_\() ws exch ws (\) a_[] = {) wl exch
+ % Stack: name type_v array
+ dup length 0 eq {
+ (\t) ws 1 index ws (\(0\)) wl
+ } {
+ dup {
+ (\t) ws 2 index ws (\() ws wt (\),) wl
+ } forall
+ } ifelse exch pop
+ % Stack: name array
+ (\t};) wl
+ dup wcheck {
+ (\tcode = (*pprocs->scalar_array_create)\(i_ctx_p, &) ws exch wt
+ (, (const ref *)a_, ) ws dup length wt
+ (, ) ws wpa (\);) wl
+ (\tif ( code < 0 ) return code;) wl
+ } {
+ (\tmake_const_array\(&) ws exch wt
+ (, avm_foreign|) ws dup wpa (, ) ws length wt
+ (, (const ref *)a_\);) wl
+ } ifelse
+ (}) wl
+ } bind def
+ /woatt [
+ % Integers
+ { { { type /integertype eq } isall }
+ { (long) (integer_v) wnuma true }
+ }
+ % Integers + reals
+ { { { type dup /integertype eq exch /realtype eq or } isall }
+ { (float) (real_v) wnuma true }
+ }
+ % Strings + nulls
+ { { { type dup /nulltype eq exch /stringtype eq or } isall }
+ { ({) ws dup (sa_) exch wsna
+ (\tcode = (*pprocs->string_array_create)\(i_ctx_p, &) ws exch wt
+ (, sa_, ) ws dup length wt (, ) ws wpa (\);) wl
+ (\tif ( code < 0 ) return code;) wl
+ (}) wl true
+ }
+ }
+ % Names
+ { { { type /nametype eq } isall }
+ { ({) ws dup (na_) exch wsna
+ (\tcode = (*pprocs->name_array_create)\(i_ctx_p, &) ws 1 index wt
+ (, na_, ) ws dup length wt (\);) wl
+ (\tif ( code < 0 ) return code;) wl
+ wap (}) wl true
+ }
+ }
+ % Procedure
+ { { iswproc }
+ { dup cvos
+ % Stack: name proc string
+ ({\tstatic const char s_[] = ) ws
+ dup dup can_wcs { wcs } { wcca } ifelse
+ (;) wl
+ (\tcode = (*pprocs->ref_from_string)\(i_ctx_p, &) ws 2 index wt
+ (, s_, ) ws length wt (\);) wl
+ (\tif ( code < 0 ) return code;) wl
+ wap (}) wl true
+ wtempname deletefile
+ }
+ }
+ % Default
+ { { pop true }
+ { wother }
+ }
+ ] def
+
+% Write a named dictionary. We assume the ref is already declared.
+ /wd % <name> <dict> <extra> wd -
+ { 3 1 roll
+ ({) ws
+ (\tref v_[) ws dup length wt (];) wl
+ dup [ exch
+ { counttomark 2 sub wtstring cvs
+ (v_[) exch concatstrings (]) concatstrings exch wo not
+ { (Skipping ) print ==only (....\n) print }
+ if
+ } forall
+ ]
+ % Stack: array of keys (names)
+ ({) ws dup (str_keys_) exch wsna
+ (\tstatic const cfont_dict_keys keys_ =) wl
+ (\t { 0, 0, ) ws length wt (, ) ws 3 -1 roll wt (, ) ws
+ dup wpa (, ) ws dup wva ( };) wl pop
+ (\tcode = \(*pprocs->ref_dict_create\)\(i_ctx_p, &) ws wt
+ (, &keys_, str_keys_, v_\);) wl
+ (\tif ( code < 0 ) return code;) wl
+ (}) wl
+ (}) wl
+ } bind def
+
+% Write character dictionary keys.
+% We save a lot of space by abbreviating keys which appear in
+% StandardEncoding or ISOLatin1Encoding.
+% Writes code to declare and initialize enc_keys_, str_keys, and keys_.
+/wcdkeys % <dict> wcdkeys -
+ { % Write keys present in StandardEncoding or ISOLatin1Encoding,
+ % pushing other keys on the o-stack.
+ (static const charindex enc_keys_[] = {) wl
+ dup [ exch 0 exch
+ { pop decoding 1 index known
+ { decoding exch get ({) ws dup -8 bitshift wt
+ (,) ws 255 and wt (}, ) ws
+ 1 add dup 5 mod 0 eq { (\n) ws } if
+ }
+ { exch }
+ ifelse
+ }
+ forall pop
+ ]
+ ({0,0}\n};) wl
+ % Write other keys.
+ (str_keys_) exch wsna
+ % Write the declaration for keys_.
+ (static const cfont_dict_keys keys_ = {) wl
+ (\tenc_keys_, countof\(enc_keys_\) - 1,) wl
+ (\t) ws dup length wt ( - \(countof\(enc_keys_\) - 1\), 0, ) ws
+ dup wpa (, ) ws wva () wl
+ (};) wl
+ } bind def
+
+% Enumerate character dictionary values in the same order that
+% the keys appear in enc_keys_ and str_keys_.
+% <proc> is called with each value in turn.
+/cdforall % <dict> <proc> cdforall -
+ { 2 copy
+ { decoding 3 index known
+ { 3 -1 roll pop exec }
+ { pop pop pop }
+ ifelse
+ }
+ /exec cvx 3 packedarray cvx
+ /forall cvx
+ 5 -2 roll
+ { decoding 3 index known
+ { pop pop pop }
+ { 3 -1 roll pop exec }
+ ifelse
+ }
+ /exec cvx 3 packedarray cvx
+ /forall cvx
+ 6 packedarray cvx exec
+ } bind def
+
+% ------ Writers for special objects ------ %
+
+/writespecial 10 dict dup begin
+
+ /FontInfo { 0 wd } def
+
+ /Private { 0 wd } def
+
+ /CharStrings
+ { ({) wl
+ dup wcdkeys
+ (static const char values_[] = {) wl
+ { wsn } cdforall
+ (\t0\n};) wl
+ (\tcode = \(*pprocs->string_dict_create\)\(i_ctx_p, &) ws wt
+ (, &keys_, str_keys_, values_\);) wl
+ (\tif ( code < 0 ) return code;) wl
+ (}) wl
+ } bind def
+
+ /Metrics
+ { ({) wl
+ dup wcdkeys
+ (static const ref_(float) values_[] = {) wl
+ dup { (\t) ws wnums () wl } cdforall
+ (\t0\n};) wl
+ (static const char lengths_[] = {) wl
+ { (\t) ws dup isnumber
+ { pop 0 }
+ { length 1 add }
+ ifelse wt (,) wl
+ } cdforall
+ (\t0\n};) wl
+ (\tcode = \(*pprocs->num_dict_create\)\(i_ctx_p, &) ws wt
+ (, &keys_, str_keys_, (const ref *)values_, lengths_\);) wl
+ (\tif ( code < 0 ) return code;) wl
+ (}) wl
+ } bind def
+
+ /Metrics2 /Metrics load def
+
+ /FDepVector pop % (converted to a list of font names)
+
+end def
+
+% ------ The main program ------ %
+
+% Construct an inverse dictionary of encodings.
+[ /StandardEncoding /ISOLatin1Encoding
+ /SymbolEncoding /DingbatsEncoding
+ /KanjiSubEncoding
+]
+dup length dict begin
+ { mark exch dup { .findencoding exch def } stopped cleartomark
+ } forall
+currentdict end /encodingnames exch def
+
+% Invert the StandardEncoding and ISOLatin1Encoding vectors.
+512 dict begin
+ 0 1 255 { dup ISOLatin1Encoding exch get exch 256 add def } for
+ 0 1 255 { dup StandardEncoding exch get exch def } for
+currentdict end /decoding exch def
+
+/writefont % cfilename procname -> [writes the current font]
+ { (gsf_) exch concatstrings
+ /fontprocname exch def
+ /cfname exch def
+ /cfile cfname (w) file def
+
+% Remove unwanted keys from the font.
+ currentfont dup length dict begin { def } forall
+ { /FID /MIDVector /CurMID } { currentdict exch undef } forall
+ /Font currentdict end def
+
+% Replace the FDepVector with a list of font names.
+ Font /FDepVector .knownget
+ { [ exch { /FontName get } forall ]
+ Font /FDepVector 3 -1 roll put
+ }
+ if
+
+% Find all the special objects we know about.
+% wo uses this to write out references to otherwise intractable objects.
+ /otherobjs writespecial length dict dup begin
+ writespecial
+ { pop Font 1 index .knownget { exch def } { pop } ifelse
+ }
+ forall
+ end def
+
+% Define a dummy FontInfo, in case the font doesn't have one.
+ /FontInfo 0 dict def
+
+% Write out the boilerplate.
+ Font begin
+ (/****************************************************************) wl
+ ( Portions of this file are subject to the following notice(s):) wl
+ systemdict /copyright get wl
+ FontInfo /Notice .knownget
+ { (----------------------------------------------------------------) wl wl
+ } if
+ (****************************************************************/) wl
+ () wl
+ (/* ) ws cfname ws ( */) wl
+ (/* This file was created by the ) ws product ws ( font2c utility. */) wl
+ () wl
+ (#undef DEBUG) wl
+ (#include "ccfont.h") wl
+ () wl
+
+% Write the procedure prologue.
+ (#ifdef __PROTOTYPES__) wl
+ (ccfont_proc\() ws fontprocname ws (\);) wl
+ (int) wl
+ fontprocname ws ((i_ctx_t *i_ctx_p, const cfont_procs *pprocs, ref *pfont)) wl
+ (#else) wl
+ (int) wl
+ fontprocname ws ((i_ctx_p, pprocs, pfont) i_ctx_t *i_ctx_p; const cfont_procs *pprocs; ref *pfont;) wl
+ (#endif) wl
+ ({\tint code;) wl
+ (\tref Font;) wl
+ otherobjs
+ { exch pop (\tref ) ws wt (;) wl }
+ forall
+
+% Write out the special objects.
+ otherobjs
+ { exch writespecial 2 index get exec
+ }
+ forall
+
+% Write out the main font dictionary.
+% If possible, substitute the encoding name for the encoding;
+% PostScript code will fix this up.
+ { /Encoding /PrefEnc }
+ { Font 1 index .knownget
+ { encodingnames exch .knownget { def } { pop } ifelse }
+ { pop }
+ ifelse
+ }
+ forall
+ (Font) Font FontType 0 eq { 5 } { 1 } ifelse wd
+
+% Finish the procedural initialization code.
+ (\t*pfont = Font;) wl
+ (\treturn 0;) wl
+ (}) wl
+ end % Font
+
+ cfile closefile
+
+ } bind def
+
+end def % font2cdict
+
+% Compute the procedure name from the font name.
+% Replace all non-alphanumeric characters with '_'.
+/makefontprocnamemap 256 string
+ 0 1 255 { 2 copy 95 put pop } for
+ (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz)
+ { 2 copy dup put pop } forall
+readonly def
+/makefontprocname % <fontname> makefontprocname <procnamestring>
+ { dup length string cvs
+ dup length 1 sub -1 0
+ { % Stack: string index
+ 2 copy 2 copy get //makefontprocnamemap exch get put pop
+ }
+ for
+ } def
+
+/writefont { font2cdict begin writefont end } def
+
+% If the program was invoked from the command line, run it now.
+[ shellarguments
+ { counttomark dup 2 eq exch 3 eq or
+ { counttomark -1 roll cvn
+ (Converting ) print dup =only ( font.\n) print flush
+ % Ensure that we get a clean copy of the font from the
+ % file system.
+ 2 { % do both local and global
+ currentglobal not setglobal
+ dup undefinefont
+ } repeat
+ findfont setfont
+ (FontName is ) print currentfont /FontName get ==only (.\n) print flush
+ counttomark 1 eq
+ { % Construct the procedure name from the file name.
+ currentfont /FontName get makefontprocname
+ }
+ if
+ writefont
+ (Done.\n) print flush
+ }
+ { cleartomark
+ (Usage: font2c fontname cfilename.c [shortname]\n) print
+ ( e.g.: font2c Courier cour.c\n) print flush
+ mark
+ }
+ ifelse
+ }
+if pop
diff --git a/Master/xemtex/gslib/font2pcl.ps b/Master/xemtex/gslib/font2pcl.ps
new file mode 100644
index 00000000000..1c777b1bdac
--- /dev/null
+++ b/Master/xemtex/gslib/font2pcl.ps
@@ -0,0 +1,604 @@
+% Copyright (C) 1993, 1994, 1995, 1997 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: font2pcl.ps,v 1.2.6.2.2.1 2003/04/12 14:02:38 giles Exp $
+% font2pcl.ps
+% Write out a font as a PCL bitmap font.
+
+/pcldict 60 dict def
+
+% Write out the current font as a PCL bitmap font.
+% The current transformation matrix defines the font size and orientation.
+
+/WriteResolution? false def % true=use "resolution bound font" format,
+ % false=use older format
+
+/LJ4 false def % true=use LJ4 Typeface code
+ % false=use LJIIP/IID/IIIx Typeface code
+
+pcldict begin % internal procedures
+
+/findstring % <string> <substring> findstring <bool>
+ { search { pop pop pop true } { pop false } ifelse
+ } def
+
+ % Determine which set of keywords is present in a string.
+ % The last keyword set must be empty.
+
+/keysearch % <string> <array of arrays of keywords> keysearch <index>
+ { 0 1 2 index length 1 sub
+ { 2 copy get true exch
+ { % Stack: <string> <a.a.k.> <index> <bool> <keyword>
+ 4 index exch findstring and
+ }
+ forall
+ { 0 exch getinterval exit
+ }
+ if pop
+ }
+ for
+ exch pop length % invalid index if missing
+ } def
+
+ % Determine the device height of a string in quarter-dots.
+
+/charheight % <string> charheight <int>
+ { gsave newpath 0 0 moveto false charpath
+ pathbbox exch pop exch sub exch pop 0 exch grestore
+ dtransform add abs 4 mul cvi
+ } def
+
+ % Compute an integer version of the transformed FontBBox.
+
+/inflate % <num> inflate <num>
+ { dup 0 gt { ceiling } { floor } ifelse
+ } def
+/ixbbox % - ixbbox <llx> <lly> <urx> <ury>
+ { /FontBBox load aload pop % might be executable or literal
+ 4 2 roll transform exch truncate cvi exch truncate cvi
+ 4 2 roll transform exch inflate cvi exch inflate cvi
+ } def
+
+ % Determine the original font of a possibly transformed font.
+ % Since some badly behaved PostScript files construct transformed
+ % fonts "by hand", we can't just rely on the OrigFont pointers.
+ % Instead, if a font with the given name exists, and if its
+ % entries for FontType and UniqueID match those of the font we
+ % obtain by following the OrigFont chain, we use that font.
+
+/origfont
+ { { dup /OrigFont known not { exit } if /OrigFont get } loop
+ FontDirectory 1 index /FontName get .knownget
+ { % Stack: origfont namedfont
+ 1 index /FontType get 1 index /FontType get eq
+ { 1 index /UniqueID .knownget
+ { 1 index /UniqueID .knownget
+ { eq { exch } if }
+ { pop }
+ ifelse
+ }
+ if
+ }
+ if pop
+ }
+ if
+ } def
+
+
+ % Determine the bounding box of the current device's image.
+ % Free variables: row, zerow.
+
+/devbbox % <rw> <rh> devbbox <ymin> <ymax1> <xmin> <xmax1>
+ { % Find top and bottom whitespace.
+ dup
+ { dup 0 eq { exit } if 1 sub
+ dup currentdevice exch row copyscanlines
+ zerow ne { 1 add exit } if
+ }
+ loop % ymax1
+ 0
+ { 2 copy eq { exit } if
+ dup currentdevice exch row copyscanlines
+ zerow ne { exit } if
+ 1 add
+ }
+ loop % ymin
+ exch
+ % Find left and right whitespace.
+ 3 index 0
+ % Stack: rw rh ymin ymax1 xmin xmax1
+ 3 index 1 4 index 1 sub
+ { currentdevice exch row copyscanlines .findzeros
+ exch 4 1 roll .max 3 1 roll .min exch
+ }
+ for % xmin xmax1
+ % Special check: xmin > xmax1 if height = 0
+ 2 copy gt { exch pop dup } if
+ 6 -2 roll pop pop
+
+ } def
+
+ % Write values on outfile.
+
+ /w1 { 255 and outfile exch write } def
+ /w2 { dup -8 bitshift w1 w1 } def
+ /wbyte % <byte> <label> wbyte
+ { VDEBUG { print ( =byte= ) print dup == flush } { pop } ifelse w1
+ } def
+ /wword % <word16> <label> wword
+ { VDEBUG { print ( =word= ) print dup == flush } { pop } ifelse w2
+ } def
+ /wdword % <word32> <label> wdword
+ { VDEBUG { print ( =dword= ) print dup == flush } { pop } ifelse
+ dup -16 bitshift w2 w2
+ } def
+
+/style.posture.keys
+ [ { (Italic) } { (Oblique) }
+ { }
+ ] def
+/style.posture.values <010100> def
+
+/style.appearance.width.keys
+ [ { (Ultra) (Compressed) }
+ { (Extra) (Compressed) }
+ { (Extra) (Condensed) }
+ { (Extra) (Extended) }
+ { (Extra) (Expanded) }
+ { (Compressed) }
+ { (Condensed) }
+ { (Extended) }
+ { (Expanded) }
+ { }
+ ] def
+/style.appearance.width.values <04030207070201060600> def
+
+/width.type.keys
+ [ { (Ultra) (Compressed) }
+ { (Extra) (Compressed) }
+ { (Extra) (Condensed) }
+ { (Extra) (Expanded) }
+ { (Compressed) }
+ { (Condensed) }
+ { (Expanded) }
+ { }
+ ] def
+/width.type.values <fbfcfd03fdfe0200> def
+
+/stroke.weight.keys
+ [ { (Ultra) (Thin) }
+ { (Ultra) (Black) }
+ { (Extra) (Thin) }
+ { (Extra) (Light) }
+ { (Extra) (Bold) }
+ { (Extra) (Black) }
+ { (Demi) (Light) }
+ { (Demi) (Bold) }
+ { (Semi) (Light) }
+ { (Semi) (Bold) }
+ { (Thin) }
+ { (Light) }
+ { (Bold) }
+ { (Black) }
+ { }
+ ] def
+/stroke.weight.values <f907fafc0406fe02ff01fbfd030500> def
+
+/vendor.keys
+ [ { (Agfa) }
+ { (Bitstream) }
+ { (Linotype) }
+ { (Monotype) }
+ { (Adobe) }
+ { }
+ ] def
+/vendor.default.index 4 def % might as well be Adobe
+/old.vendor.values <020406080a00> def
+/new.vendor.values <010203040500> def
+/vendor.initials (CBLMA\000) def
+
+currentdict readonly end pop % pcldict
+
+
+% Convert and write a PCL font for the current font and transformation.
+
+% Write the font header. We split this off only to avoid overflowing
+% the limit on the maximum size of a procedure.
+% Free variables: outfile uury u0y rw rh orientation uh ully
+/writefontheader
+ { outfile (\033\)s) writestring
+ outfile 64 WriteResolution? { 4 add } if
+ Copyright length add write==only
+ outfile (W) writestring
+ WriteResolution? { 20 68 } { 0 64 } ifelse
+ (Font Descriptor Size) wword
+ (Header Format) wbyte
+ 1 (Font Type) wbyte
+ FullName style.posture.keys keysearch style.posture.values exch get
+ FullName style.appearance.width.keys keysearch
+ style.appearance.width.values exch get 4 mul add
+ PaintType 2 eq { 32 add } if
+ /style exch def
+ style -8 bitshift (Style MSB) wbyte
+ 0 (Reserved) wbyte
+ /baseline uury 1 sub u0y sub def
+ baseline (Baseline Position) wword
+ rw (Cell Width) wword
+ rh (Cell Height) wword
+ orientation (Orientation) wbyte
+ FontInfo /isFixedPitch .knownget not { false } if
+ { 0 } { 1 } ifelse (Spacing) wbyte
+ % Use loop/exit to fake a multiple-exit block.
+ { Encoding StandardEncoding eq { 10 (J) exit } if
+ Encoding ISOLatin1Encoding eq { 11 (J) exit } if
+ Encoding SymbolEncoding eq { 19 (M) exit } if
+ Encoding DingbatsEncoding eq { 10 (L) exit } if
+% (Warning: unknown Encoding, using ISOLatin1.\n) print flush
+ 11 (J) exit
+ }
+ loop
+ 0 get 64 sub exch 32 mul add (Symbol Set) wword
+ ( ) stringwidth pop 0 dtransform add abs 4 mul
+ /pitch exch def
+ pitch cvi (Pitch) wword
+ uh 4 mul (Height) wword % Height
+ (x) charheight (x-Height) wword
+ FullName width.type.keys keysearch
+ width.type.values exch get (Width Type) wbyte
+ style 255 and (Style LSB) wbyte
+ FullName stroke.weight.keys keysearch
+ stroke.weight.values exch get (Stroke Weight) wbyte
+ FullName vendor.keys keysearch
+ dup vendor.initials exch get 0 eq
+ { % No vendor in FullName, try Notice
+ pop Copyright vendor.keys keysearch
+ dup vendor.initials exch get 0 eq { pop vendor.default.index } if
+ }
+ if
+ /vendor.index exch def
+ 0 (Typeface LSB) wbyte % punt
+ 0 (Typeface MSB) wbyte % punt
+ 0 (Serif Style) wbyte % punt
+ 2 (Quality) wbyte
+ 0 (Placement) wbyte
+ gsave FontMatrix concat rot neg rotate
+ /ulwidth
+ FontInfo /UnderlineThickness .knownget
+ { 0 exch dtransform exch pop abs }
+ { resolution 100 div }
+ ifelse def
+ FontInfo /UnderlinePosition .knownget
+ { 0 exch transform exch pop negY ulwidth 2 div add }
+ { ully ulwidth add }
+ ifelse u0y sub
+ round cvi 1 .max 255 .min (Underline Position) wbyte
+ ulwidth round cvi 1 .max 255 .min (Underline Thickness) wbyte
+ grestore
+ uh 1.2 mul 4 mul cvi (Text Height) wword
+ (average lowercase character) dup stringwidth
+ pop 0 dtransform add abs
+ exch length div 4 mul cvi (Text Width) wword
+ 0
+ { dup Encoding exch get /.notdef ne { exit } if
+ 1 add
+ }
+ loop (First Code) wword
+ 255
+ { dup Encoding exch get /.notdef ne { exit } if
+ 1 sub
+ }
+ loop (Last Code) wword
+ pitch dup cvi sub 256 mul cvi (Pitch Extended) wbyte
+ 0 (Height Extended) wbyte
+ 0 (Cap Height) wword % (default)
+ currentfont /UniqueID known { UniqueID } { 0 } ifelse
+ 16#c1000000 add (Font Number (Adobe UniqueID)) wdword
+ FontName length 16 .max string
+ dup FontName exch cvs pop
+ outfile exch 0 16 getinterval writestring % Font Name
+ WriteResolution?
+ { resolution dup (X Resolution) wword (Y Resolution) wword
+ }
+ if
+ outfile Copyright writestring % Copyright
+ } def
+
+/writePCL % <fontfile> <resolution> writePCL -
+ {
+ save
+ currentfont begin
+ pcldict begin
+ 80 dict begin % allow for recursion
+ /saved exch def
+ /resolution exch def
+ /outfile exch def
+ matrix currentmatrix dup 4 0 put dup 5 0 put setmatrix
+
+ % Supply some default values so we don't have to check later.
+
+ currentfont /FontInfo known not { /FontInfo 1 dict def } if
+ currentfont /FontName known not { /FontName () def } if
+ /Copyright FontInfo /Notice .knownget not { () } if def
+ /FullName
+ FontInfo /FullName .knownget not
+ { FontName dup length string cvs }
+ if def
+
+ % Determine the original font, and its relationship to this one.
+
+ /OrigFont currentfont origfont def
+ /OrigMatrix OrigFont /FontMatrix get def
+ /OrigMatrixInverse OrigMatrix matrix invertmatrix def
+ /ScaleMatrix matrix currentfont OrigFont ne
+ { FontMatrix exch OrigMatrixInverse exch concatmatrix
+ } if
+ def
+ /CurrentScaleMatrix
+ matrix currentmatrix
+ matrix defaultmatrix
+ dup 0 get 1 index 3 get mul 0 lt
+ 1 index dup 1 get exch 2 get mul 0 gt or
+ /flipY exch def
+ dup invertmatrix
+ dup concatmatrix
+ def
+ /negY flipY { {neg} } { {} } ifelse def
+
+ % Print debugging information.
+
+ /CDEBUG where { pop } { /CDEBUG false def } ifelse
+ /VDEBUG where { pop } { /VDEBUG false def } ifelse
+ CDEBUG { /VDEBUG true def } if
+ DEBUG
+ { (currentmatrix: ) print matrix currentmatrix ==
+ (defaultmatrix: ) print matrix defaultmatrix ==
+ (flipY: ) print flipY ==
+ (scaling matrix: ) print CurrentScaleMatrix ==
+ (FontMatrix: ) print FontMatrix ==
+ (FontBBox: ) print /FontBBox load ==
+ currentfont OrigFont ne
+ { OrigFont /FontName .knownget { (orig FontName: ) print == } if
+ (orig FontMatrix: ) print OrigMatrix ==
+ } if
+ currentfont /ScaleMatrix .knownget { (ScaleMatrix: ) print == } if
+ gsave
+ FontMatrix concat
+ (combined matrix: ) print matrix currentmatrix ==
+ grestore
+ flush
+ } if
+
+ % Determine the orientation.
+
+ ScaleMatrix matrix currentmatrix dup concatmatrix
+ 0 1 3
+ { 1 index 1 get 0 eq 2 index 2 get 0 eq and 2 index 0 get 0 gt and
+ { exit } if
+ pop -90 matrix rotate exch dup concatmatrix
+ }
+ for
+ dup type /integertype ne
+ { (Only rotations by multiples of 90 degrees are supported:\n) print
+ == flush
+ saved end end end restore stop
+ }
+ if
+ /orientation exch def
+ /rot orientation 90 mul def
+ DEBUG { (orientation: ) print orientation == flush } if
+
+ dup dup 0 get exch 3 get negY sub abs 0.5 ge
+ { (Only identical scaling in X and Y is supported:\n) print
+ exch flipY 3 array astore ==
+ currentdevice .devicename ==
+ matrix defaultmatrix == flush
+ saved end end end restore stop
+ }
+ if pop
+
+ % Determine the font metrics, in the PCL character coordinate system,
+ % which has +Y going towards the top of the page.
+
+ gsave
+ FontMatrix concat
+ 0 0 transform
+ negY round cvi /r0y exch def
+ round cvi /r0x exch def
+ ixbbox
+ negY /rury exch def /rurx exch def
+ negY /rlly exch def /rllx exch def
+ /rminx rllx rurx .min def
+ /rminy rlly negY rury negY .min def
+ /rw rurx rllx sub abs def
+ /rh rury rlly sub abs def
+ gsave rot neg rotate
+ 0 0 transform
+ negY round cvi /u0y exch def
+ round cvi /u0x exch def
+ ixbbox
+ negY /uury exch def /uurx exch def
+ negY /ully exch def /ullx exch def
+ /uw uurx ullx sub def
+ /uh uury ully sub def
+ grestore
+ DEBUG
+ { (rmatrix: ) print matrix currentmatrix ==
+ (rFontBBox: ) print [rllx rlly rurx rury] ==
+ (uFontBBox: ) print [ullx ully uurx uury] ==
+ flush
+ } if
+ grestore
+
+ % Disable the character cache, to avoid excessive allocation
+ % and memory sandbars.
+
+ mark cachestatus /upper exch def
+ cleartomark 0 setcachelimit
+
+ % Write the font header.
+
+ writefontheader
+
+ % Establish an image device for rasterizing characters.
+
+ matrix currentmatrix
+ dup 4 rminx neg put
+ dup 5 rminy neg put
+ % Round the width up to a multiple of 8
+ % so we don't get garbage bits in the last byte of each row.
+ rw 7 add -8 and rh <ff 00> makeimagedevice
+ /cdevice exch def
+ nulldevice % prevent page device switching
+ cdevice setdevice
+
+ % Rasterize each character in turn.
+
+ /raster rw 7 add 8 idiv def
+ /row raster string def
+ /zerow row length string def
+ 0 1 Encoding length 1 sub
+ { /cindex exch def
+ Encoding cindex get /.notdef ne
+ { VDEBUG { Encoding cindex get == flush } if
+ erasepage initgraphics
+ 0 0 moveto currentpoint transform add
+ ( ) dup 0 cindex put show
+ currentpoint transform add exch sub round cvi
+ /cwidth exch abs def
+ rw rh devbbox
+ VDEBUG
+ { (image bbox: ) print 4 copy 4 2 roll 4 array astore == flush
+ } if
+ % Save the device bounding box.
+ % Note that this is in current device coordinates,
+ % not PCL (right-handed) coordinates.
+ /bqx exch def /bpx exch def /bqy exch def /bpy exch def
+ % Re-render with the character justified to (0,0).
+ % This may be either the lower left or the upper left corner.
+ bpx neg bpy neg idtransform moveto
+ erasepage
+ VDEBUG { (show point: ) print [ currentpoint transform ] == flush } if
+ ( ) dup 0 cindex put show
+ % Find the bounding box. Note that xmin and ymin are now 0,
+ % xmax1 = xw, and ymax1 = yh.
+ rw rh devbbox
+ /xw exch def
+ % xmin or ymin can be non-zero only if the character is blank.
+ xw 0 eq
+ { pop }
+ { dup 0 ne { (Non-zero xmin! ) print = } { pop } ifelse }
+ ifelse
+ /yh exch def
+ yh 0 eq
+ { pop }
+ { dup 0 ne { (Non-zero ymin! ) print = } { pop } ifelse }
+ ifelse
+
+ /xbw xw 7 add 8 idiv def
+ /xright raster 8 mul xw sub def
+ % Write the Character Code command.
+ outfile (\033*c) writestring
+ outfile cindex write==only
+ outfile (E) writestring
+ % Write the Character Definition command.
+ outfile (\033\(s) writestring
+ yh xbw mul 16 add
+ outfile exch write=only
+ % Record the character position for the .PCM file.
+ /cfpos outfile fileposition 1 add def
+ outfile (W\004\000\016\001) writestring
+ orientation (Orientation) wbyte 0 (Reserved) wbyte
+ rminx bpx add r0x sub (Left Offset) wword
+ flipY { rminy bpy add neg } { rminy bqy add } ifelse r0y sub
+ (Top Offset) wword
+ xw (Character Width) wword
+ yh (Character Height) wword
+ cwidth orientation 2 ge { neg } if 4 mul (Delta X) wword
+ % Write the character data.
+ flipY { 0 1 yh 1 sub } { yh 1 sub -1 0 } ifelse
+ { cdevice exch row copyscanlines
+ 0 xbw getinterval
+ CDEBUG
+ { dup
+ { 8
+ { dup 128 ge { (+) } { (.) } ifelse print
+ 127 and 1 bitshift
+ }
+ repeat pop
+ }
+ forall (\n) print
+ }
+ if
+ outfile exch writestring
+ }
+ for
+ }
+ { /bpx 0 def /bpy 0 def /bqx 0 def /bqy 0 def
+ /cwidth 0 def
+ /cfpos 0 def
+ }
+ ifelse
+
+ }
+ for
+
+ % Wrap up.
+
+ upper setcachelimit
+ outfile closefile
+
+ nulldevice % prevent page device switching
+ saved end end end restore
+
+ } def
+
+% Provide definitions for testing with older or non-custom interpreters.
+
+/.findzeros where { pop (%END) .skipeof } if
+/.findzeros
+ { userdict begin /zs exch def /zl zs length def
+ 0 { dup zl ge { exit } if dup zs exch get 0 ne { exit } if 1 add } loop
+ zl { dup 0 eq { exit } if dup 1 sub zs exch get 0 ne { exit } if 1 sub } loop
+ exch 3 bitshift exch 3 bitshift
+ 2 copy lt
+ { exch zs 1 index -3 bitshift get
+ { dup 16#80 and 0 ne { exit } if exch 1 add exch 1 bitshift } loop pop
+ exch zs 1 index -3 bitshift 1 sub get
+ { dup 1 and 0 ne { exit } if exch 1 sub exch -1 bitshift } loop pop
+ }
+ if end
+ } bind def
+%END
+
+/write=only where { pop (%END) .skipeof } if
+/w=s 128 string def
+/write=only
+ { w=s cvs writestring
+ } bind def
+%END
+
+%**************** Test
+/PCLTEST where {
+ pop
+ /DEBUG true def
+ /CDEBUG true def
+ /VDEBUG true def
+ /Times-Roman findfont 10 scalefont setfont
+ (t.pcf) (w) file
+ 300 72 div dup scale
+ 300 writePCL
+ flush quit
+} if
diff --git a/Master/xemtex/gslib/gs_agl.ps b/Master/xemtex/gslib/gs_agl.ps
new file mode 100644
index 00000000000..40ac08e1e76
--- /dev/null
+++ b/Master/xemtex/gslib/gs_agl.ps
@@ -0,0 +1,1070 @@
+% Copyright (C) 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_agl.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+
+% This file was derived from the Adobe Glyph List, version 1.2, dated
+% 22 Oct 1998, at
+% http://partners.adobe.com/asn/developer/typeforum/glyphlist.txt
+% That file does not contain any copyright notice.
+
+% The AdobeGlyphList dictionary maps glyph names to Unicode values.
+% Nearly all names map to a single value; however, a few names map to
+% multiple values. See the above file, and also
+% http://partners.adobe.com/asn/developer/typeforum/unicodegn.html
+% for more details.
+
+/AdobeGlyphList 1500 dict
+dup /A 16#0041 put
+dup /AE 16#00C6 put
+dup /AEacute 16#01FC put
+dup /AEsmall 16#F7E6 put
+dup /Aacute 16#00C1 put
+dup /Aacutesmall 16#F7E1 put
+dup /Abreve 16#0102 put
+dup /Acircumflex 16#00C2 put
+dup /Acircumflexsmall 16#F7E2 put
+dup /Acute 16#F6C9 put
+dup /Acutesmall 16#F7B4 put
+dup /Adieresis 16#00C4 put
+dup /Adieresissmall 16#F7E4 put
+dup /Agrave 16#00C0 put
+dup /Agravesmall 16#F7E0 put
+dup /Alpha 16#0391 put
+dup /Alphatonos 16#0386 put
+dup /Amacron 16#0100 put
+dup /Aogonek 16#0104 put
+dup /Aring 16#00C5 put
+dup /Aringacute 16#01FA put
+dup /Aringsmall 16#F7E5 put
+dup /Asmall 16#F761 put
+dup /Atilde 16#00C3 put
+dup /Atildesmall 16#F7E3 put
+dup /B 16#0042 put
+dup /Beta 16#0392 put
+dup /Brevesmall 16#F6F4 put
+dup /Bsmall 16#F762 put
+dup /C 16#0043 put
+dup /Cacute 16#0106 put
+dup /Caron 16#F6CA put
+dup /Caronsmall 16#F6F5 put
+dup /Ccaron 16#010C put
+dup /Ccedilla 16#00C7 put
+dup /Ccedillasmall 16#F7E7 put
+dup /Ccircumflex 16#0108 put
+dup /Cdotaccent 16#010A put
+dup /Cedillasmall 16#F7B8 put
+dup /Chi 16#03A7 put
+dup /Circumflexsmall 16#F6F6 put
+dup /Csmall 16#F763 put
+dup /D 16#0044 put
+dup /Dcaron 16#010E put
+dup /Dcroat 16#0110 put
+dup /Delta [16#2206 16#0394] put
+dup /Dieresis 16#F6CB put
+dup /DieresisAcute 16#F6CC put
+dup /DieresisGrave 16#F6CD put
+dup /Dieresissmall 16#F7A8 put
+dup /Dotaccentsmall 16#F6F7 put
+dup /Dsmall 16#F764 put
+dup /E 16#0045 put
+dup /Eacute 16#00C9 put
+dup /Eacutesmall 16#F7E9 put
+dup /Ebreve 16#0114 put
+dup /Ecaron 16#011A put
+dup /Ecircumflex 16#00CA put
+dup /Ecircumflexsmall 16#F7EA put
+dup /Edieresis 16#00CB put
+dup /Edieresissmall 16#F7EB put
+dup /Edotaccent 16#0116 put
+dup /Egrave 16#00C8 put
+dup /Egravesmall 16#F7E8 put
+dup /Emacron 16#0112 put
+dup /Eng 16#014A put
+dup /Eogonek 16#0118 put
+dup /Epsilon 16#0395 put
+dup /Epsilontonos 16#0388 put
+dup /Esmall 16#F765 put
+dup /Eta 16#0397 put
+dup /Etatonos 16#0389 put
+dup /Eth 16#00D0 put
+dup /Ethsmall 16#F7F0 put
+dup /Euro 16#20AC put
+dup /F 16#0046 put
+dup /Fsmall 16#F766 put
+dup /G 16#0047 put
+dup /Gamma 16#0393 put
+dup /Gbreve 16#011E put
+dup /Gcaron 16#01E6 put
+dup /Gcircumflex 16#011C put
+dup /Gcommaaccent 16#0122 put
+dup /Gdotaccent 16#0120 put
+dup /Grave 16#F6CE put
+dup /Gravesmall 16#F760 put
+dup /Gsmall 16#F767 put
+dup /H 16#0048 put
+dup /H18533 16#25CF put
+dup /H18543 16#25AA put
+dup /H18551 16#25AB put
+dup /H22073 16#25A1 put
+dup /Hbar 16#0126 put
+dup /Hcircumflex 16#0124 put
+dup /Hsmall 16#F768 put
+dup /Hungarumlaut 16#F6CF put
+dup /Hungarumlautsmall 16#F6F8 put
+dup /I 16#0049 put
+dup /IJ 16#0132 put
+dup /Iacute 16#00CD put
+dup /Iacutesmall 16#F7ED put
+dup /Ibreve 16#012C put
+dup /Icircumflex 16#00CE put
+dup /Icircumflexsmall 16#F7EE put
+dup /Idieresis 16#00CF put
+dup /Idieresissmall 16#F7EF put
+dup /Idotaccent 16#0130 put
+dup /Ifraktur 16#2111 put
+dup /Igrave 16#00CC put
+dup /Igravesmall 16#F7EC put
+dup /Imacron 16#012A put
+dup /Iogonek 16#012E put
+dup /Iota 16#0399 put
+dup /Iotadieresis 16#03AA put
+dup /Iotatonos 16#038A put
+dup /Ismall 16#F769 put
+dup /Itilde 16#0128 put
+dup /J 16#004A put
+dup /Jcircumflex 16#0134 put
+dup /Jsmall 16#F76A put
+dup /K 16#004B put
+dup /Kappa 16#039A put
+dup /Kcommaaccent 16#0136 put
+dup /Ksmall 16#F76B put
+dup /L 16#004C put
+dup /LL 16#F6BF put
+dup /Lacute 16#0139 put
+dup /Lambda 16#039B put
+dup /Lcaron 16#013D put
+dup /Lcommaaccent 16#013B put
+dup /Ldot 16#013F put
+dup /Lslash 16#0141 put
+dup /Lslashsmall 16#F6F9 put
+dup /Lsmall 16#F76C put
+dup /M 16#004D put
+dup /Macron 16#F6D0 put
+dup /Macronsmall 16#F7AF put
+dup /Msmall 16#F76D put
+dup /Mu 16#039C put
+dup /N 16#004E put
+dup /Nacute 16#0143 put
+dup /Ncaron 16#0147 put
+dup /Ncommaaccent 16#0145 put
+dup /Nsmall 16#F76E put
+dup /Ntilde 16#00D1 put
+dup /Ntildesmall 16#F7F1 put
+dup /Nu 16#039D put
+dup /O 16#004F put
+dup /OE 16#0152 put
+dup /OEsmall 16#F6FA put
+dup /Oacute 16#00D3 put
+dup /Oacutesmall 16#F7F3 put
+dup /Obreve 16#014E put
+dup /Ocircumflex 16#00D4 put
+dup /Ocircumflexsmall 16#F7F4 put
+dup /Odieresis 16#00D6 put
+dup /Odieresissmall 16#F7F6 put
+dup /Ogoneksmall 16#F6FB put
+dup /Ograve 16#00D2 put
+dup /Ogravesmall 16#F7F2 put
+dup /Ohorn 16#01A0 put
+dup /Ohungarumlaut 16#0150 put
+dup /Omacron 16#014C put
+dup /Omega [16#2126 16#03A9] put
+dup /Omegatonos 16#038F put
+dup /Omicron 16#039F put
+dup /Omicrontonos 16#038C put
+dup /Oslash 16#00D8 put
+dup /Oslashacute 16#01FE put
+dup /Oslashsmall 16#F7F8 put
+dup /Osmall 16#F76F put
+dup /Otilde 16#00D5 put
+dup /Otildesmall 16#F7F5 put
+dup /P 16#0050 put
+dup /Phi 16#03A6 put
+dup /Pi 16#03A0 put
+dup /Psi 16#03A8 put
+dup /Psmall 16#F770 put
+dup /Q 16#0051 put
+dup /Qsmall 16#F771 put
+dup /R 16#0052 put
+dup /Racute 16#0154 put
+dup /Rcaron 16#0158 put
+dup /Rcommaaccent 16#0156 put
+dup /Rfraktur 16#211C put
+dup /Rho 16#03A1 put
+dup /Ringsmall 16#F6FC put
+dup /Rsmall 16#F772 put
+dup /S 16#0053 put
+dup /SF010000 16#250C put
+dup /SF020000 16#2514 put
+dup /SF030000 16#2510 put
+dup /SF040000 16#2518 put
+dup /SF050000 16#253C put
+dup /SF060000 16#252C put
+dup /SF070000 16#2534 put
+dup /SF080000 16#251C put
+dup /SF090000 16#2524 put
+dup /SF100000 16#2500 put
+dup /SF110000 16#2502 put
+dup /SF190000 16#2561 put
+dup /SF200000 16#2562 put
+dup /SF210000 16#2556 put
+dup /SF220000 16#2555 put
+dup /SF230000 16#2563 put
+dup /SF240000 16#2551 put
+dup /SF250000 16#2557 put
+dup /SF260000 16#255D put
+dup /SF270000 16#255C put
+dup /SF280000 16#255B put
+dup /SF360000 16#255E put
+dup /SF370000 16#255F put
+dup /SF380000 16#255A put
+dup /SF390000 16#2554 put
+dup /SF400000 16#2569 put
+dup /SF410000 16#2566 put
+dup /SF420000 16#2560 put
+dup /SF430000 16#2550 put
+dup /SF440000 16#256C put
+dup /SF450000 16#2567 put
+dup /SF460000 16#2568 put
+dup /SF470000 16#2564 put
+dup /SF480000 16#2565 put
+dup /SF490000 16#2559 put
+dup /SF500000 16#2558 put
+dup /SF510000 16#2552 put
+dup /SF520000 16#2553 put
+dup /SF530000 16#256B put
+dup /SF540000 16#256A put
+dup /Sacute 16#015A put
+dup /Scaron 16#0160 put
+dup /Scaronsmall 16#F6FD put
+dup /Scedilla [16#015E 16#F6C1] put
+dup /Scircumflex 16#015C put
+dup /Scommaaccent 16#0218 put
+dup /Sigma 16#03A3 put
+dup /Ssmall 16#F773 put
+dup /T 16#0054 put
+dup /Tau 16#03A4 put
+dup /Tbar 16#0166 put
+dup /Tcaron 16#0164 put
+dup /Tcommaaccent [16#0162 16#021A] put
+dup /Theta 16#0398 put
+dup /Thorn 16#00DE put
+dup /Thornsmall 16#F7FE put
+dup /Tildesmall 16#F6FE put
+dup /Tsmall 16#F774 put
+dup /U 16#0055 put
+dup /Uacute 16#00DA put
+dup /Uacutesmall 16#F7FA put
+dup /Ubreve 16#016C put
+dup /Ucircumflex 16#00DB put
+dup /Ucircumflexsmall 16#F7FB put
+dup /Udieresis 16#00DC put
+dup /Udieresissmall 16#F7FC put
+dup /Ugrave 16#00D9 put
+dup /Ugravesmall 16#F7F9 put
+dup /Uhorn 16#01AF put
+dup /Uhungarumlaut 16#0170 put
+dup /Umacron 16#016A put
+dup /Uogonek 16#0172 put
+dup /Upsilon 16#03A5 put
+dup /Upsilon1 16#03D2 put
+dup /Upsilondieresis 16#03AB put
+dup /Upsilontonos 16#038E put
+dup /Uring 16#016E put
+dup /Usmall 16#F775 put
+dup /Utilde 16#0168 put
+dup /V 16#0056 put
+dup /Vsmall 16#F776 put
+dup /W 16#0057 put
+dup /Wacute 16#1E82 put
+dup /Wcircumflex 16#0174 put
+dup /Wdieresis 16#1E84 put
+dup /Wgrave 16#1E80 put
+dup /Wsmall 16#F777 put
+dup /X 16#0058 put
+dup /Xi 16#039E put
+dup /Xsmall 16#F778 put
+dup /Y 16#0059 put
+dup /Yacute 16#00DD put
+dup /Yacutesmall 16#F7FD put
+dup /Ycircumflex 16#0176 put
+dup /Ydieresis 16#0178 put
+dup /Ydieresissmall 16#F7FF put
+dup /Ygrave 16#1EF2 put
+dup /Ysmall 16#F779 put
+dup /Z 16#005A put
+dup /Zacute 16#0179 put
+dup /Zcaron 16#017D put
+dup /Zcaronsmall 16#F6FF put
+dup /Zdotaccent 16#017B put
+dup /Zeta 16#0396 put
+dup /Zsmall 16#F77A put
+dup /a 16#0061 put
+dup /aacute 16#00E1 put
+dup /abreve 16#0103 put
+dup /acircumflex 16#00E2 put
+dup /acute 16#00B4 put
+dup /acutecomb 16#0301 put
+dup /adieresis 16#00E4 put
+dup /ae 16#00E6 put
+dup /aeacute 16#01FD put
+dup /afii00208 16#2015 put
+dup /afii10017 16#0410 put
+dup /afii10018 16#0411 put
+dup /afii10019 16#0412 put
+dup /afii10020 16#0413 put
+dup /afii10021 16#0414 put
+dup /afii10022 16#0415 put
+dup /afii10023 16#0401 put
+dup /afii10024 16#0416 put
+dup /afii10025 16#0417 put
+dup /afii10026 16#0418 put
+dup /afii10027 16#0419 put
+dup /afii10028 16#041A put
+dup /afii10029 16#041B put
+dup /afii10030 16#041C put
+dup /afii10031 16#041D put
+dup /afii10032 16#041E put
+dup /afii10033 16#041F put
+dup /afii10034 16#0420 put
+dup /afii10035 16#0421 put
+dup /afii10036 16#0422 put
+dup /afii10037 16#0423 put
+dup /afii10038 16#0424 put
+dup /afii10039 16#0425 put
+dup /afii10040 16#0426 put
+dup /afii10041 16#0427 put
+dup /afii10042 16#0428 put
+dup /afii10043 16#0429 put
+dup /afii10044 16#042A put
+dup /afii10045 16#042B put
+dup /afii10046 16#042C put
+dup /afii10047 16#042D put
+dup /afii10048 16#042E put
+dup /afii10049 16#042F put
+dup /afii10050 16#0490 put
+dup /afii10051 16#0402 put
+dup /afii10052 16#0403 put
+dup /afii10053 16#0404 put
+dup /afii10054 16#0405 put
+dup /afii10055 16#0406 put
+dup /afii10056 16#0407 put
+dup /afii10057 16#0408 put
+dup /afii10058 16#0409 put
+dup /afii10059 16#040A put
+dup /afii10060 16#040B put
+dup /afii10061 16#040C put
+dup /afii10062 16#040E put
+dup /afii10063 16#F6C4 put
+dup /afii10064 16#F6C5 put
+dup /afii10065 16#0430 put
+dup /afii10066 16#0431 put
+dup /afii10067 16#0432 put
+dup /afii10068 16#0433 put
+dup /afii10069 16#0434 put
+dup /afii10070 16#0435 put
+dup /afii10071 16#0451 put
+dup /afii10072 16#0436 put
+dup /afii10073 16#0437 put
+dup /afii10074 16#0438 put
+dup /afii10075 16#0439 put
+dup /afii10076 16#043A put
+dup /afii10077 16#043B put
+dup /afii10078 16#043C put
+dup /afii10079 16#043D put
+dup /afii10080 16#043E put
+dup /afii10081 16#043F put
+dup /afii10082 16#0440 put
+dup /afii10083 16#0441 put
+dup /afii10084 16#0442 put
+dup /afii10085 16#0443 put
+dup /afii10086 16#0444 put
+dup /afii10087 16#0445 put
+dup /afii10088 16#0446 put
+dup /afii10089 16#0447 put
+dup /afii10090 16#0448 put
+dup /afii10091 16#0449 put
+dup /afii10092 16#044A put
+dup /afii10093 16#044B put
+dup /afii10094 16#044C put
+dup /afii10095 16#044D put
+dup /afii10096 16#044E put
+dup /afii10097 16#044F put
+dup /afii10098 16#0491 put
+dup /afii10099 16#0452 put
+dup /afii10100 16#0453 put
+dup /afii10101 16#0454 put
+dup /afii10102 16#0455 put
+dup /afii10103 16#0456 put
+dup /afii10104 16#0457 put
+dup /afii10105 16#0458 put
+dup /afii10106 16#0459 put
+dup /afii10107 16#045A put
+dup /afii10108 16#045B put
+dup /afii10109 16#045C put
+dup /afii10110 16#045E put
+dup /afii10145 16#040F put
+dup /afii10146 16#0462 put
+dup /afii10147 16#0472 put
+dup /afii10148 16#0474 put
+dup /afii10192 16#F6C6 put
+dup /afii10193 16#045F put
+dup /afii10194 16#0463 put
+dup /afii10195 16#0473 put
+dup /afii10196 16#0475 put
+dup /afii10831 16#F6C7 put
+dup /afii10832 16#F6C8 put
+dup /afii10846 16#04D9 put
+dup /afii299 16#200E put
+dup /afii300 16#200F put
+dup /afii301 16#200D put
+dup /afii57381 16#066A put
+dup /afii57388 16#060C put
+dup /afii57392 16#0660 put
+dup /afii57393 16#0661 put
+dup /afii57394 16#0662 put
+dup /afii57395 16#0663 put
+dup /afii57396 16#0664 put
+dup /afii57397 16#0665 put
+dup /afii57398 16#0666 put
+dup /afii57399 16#0667 put
+dup /afii57400 16#0668 put
+dup /afii57401 16#0669 put
+dup /afii57403 16#061B put
+dup /afii57407 16#061F put
+dup /afii57409 16#0621 put
+dup /afii57410 16#0622 put
+dup /afii57411 16#0623 put
+dup /afii57412 16#0624 put
+dup /afii57413 16#0625 put
+dup /afii57414 16#0626 put
+dup /afii57415 16#0627 put
+dup /afii57416 16#0628 put
+dup /afii57417 16#0629 put
+dup /afii57418 16#062A put
+dup /afii57419 16#062B put
+dup /afii57420 16#062C put
+dup /afii57421 16#062D put
+dup /afii57422 16#062E put
+dup /afii57423 16#062F put
+dup /afii57424 16#0630 put
+dup /afii57425 16#0631 put
+dup /afii57426 16#0632 put
+dup /afii57427 16#0633 put
+dup /afii57428 16#0634 put
+dup /afii57429 16#0635 put
+dup /afii57430 16#0636 put
+dup /afii57431 16#0637 put
+dup /afii57432 16#0638 put
+dup /afii57433 16#0639 put
+dup /afii57434 16#063A put
+dup /afii57440 16#0640 put
+dup /afii57441 16#0641 put
+dup /afii57442 16#0642 put
+dup /afii57443 16#0643 put
+dup /afii57444 16#0644 put
+dup /afii57445 16#0645 put
+dup /afii57446 16#0646 put
+dup /afii57448 16#0648 put
+dup /afii57449 16#0649 put
+dup /afii57450 16#064A put
+dup /afii57451 16#064B put
+dup /afii57452 16#064C put
+dup /afii57453 16#064D put
+dup /afii57454 16#064E put
+dup /afii57455 16#064F put
+dup /afii57456 16#0650 put
+dup /afii57457 16#0651 put
+dup /afii57458 16#0652 put
+dup /afii57470 16#0647 put
+dup /afii57505 16#06A4 put
+dup /afii57506 16#067E put
+dup /afii57507 16#0686 put
+dup /afii57508 16#0698 put
+dup /afii57509 16#06AF put
+dup /afii57511 16#0679 put
+dup /afii57512 16#0688 put
+dup /afii57513 16#0691 put
+dup /afii57514 16#06BA put
+dup /afii57519 16#06D2 put
+dup /afii57534 16#06D5 put
+dup /afii57636 16#20AA put
+dup /afii57645 16#05BE put
+dup /afii57658 16#05C3 put
+dup /afii57664 16#05D0 put
+dup /afii57665 16#05D1 put
+dup /afii57666 16#05D2 put
+dup /afii57667 16#05D3 put
+dup /afii57668 16#05D4 put
+dup /afii57669 16#05D5 put
+dup /afii57670 16#05D6 put
+dup /afii57671 16#05D7 put
+dup /afii57672 16#05D8 put
+dup /afii57673 16#05D9 put
+dup /afii57674 16#05DA put
+dup /afii57675 16#05DB put
+dup /afii57676 16#05DC put
+dup /afii57677 16#05DD put
+dup /afii57678 16#05DE put
+dup /afii57679 16#05DF put
+dup /afii57680 16#05E0 put
+dup /afii57681 16#05E1 put
+dup /afii57682 16#05E2 put
+dup /afii57683 16#05E3 put
+dup /afii57684 16#05E4 put
+dup /afii57685 16#05E5 put
+dup /afii57686 16#05E6 put
+dup /afii57687 16#05E7 put
+dup /afii57688 16#05E8 put
+dup /afii57689 16#05E9 put
+dup /afii57690 16#05EA put
+dup /afii57694 16#FB2A put
+dup /afii57695 16#FB2B put
+dup /afii57700 16#FB4B put
+dup /afii57705 16#FB1F put
+dup /afii57716 16#05F0 put
+dup /afii57717 16#05F1 put
+dup /afii57718 16#05F2 put
+dup /afii57723 16#FB35 put
+dup /afii57793 16#05B4 put
+dup /afii57794 16#05B5 put
+dup /afii57795 16#05B6 put
+dup /afii57796 16#05BB put
+dup /afii57797 16#05B8 put
+dup /afii57798 16#05B7 put
+dup /afii57799 16#05B0 put
+dup /afii57800 16#05B2 put
+dup /afii57801 16#05B1 put
+dup /afii57802 16#05B3 put
+dup /afii57803 16#05C2 put
+dup /afii57804 16#05C1 put
+dup /afii57806 16#05B9 put
+dup /afii57807 16#05BC put
+dup /afii57839 16#05BD put
+dup /afii57841 16#05BF put
+dup /afii57842 16#05C0 put
+dup /afii57929 16#02BC put
+dup /afii61248 16#2105 put
+dup /afii61289 16#2113 put
+dup /afii61352 16#2116 put
+dup /afii61573 16#202C put
+dup /afii61574 16#202D put
+dup /afii61575 16#202E put
+dup /afii61664 16#200C put
+dup /afii63167 16#066D put
+dup /afii64937 16#02BD put
+dup /agrave 16#00E0 put
+dup /aleph 16#2135 put
+dup /alpha 16#03B1 put
+dup /alphatonos 16#03AC put
+dup /amacron 16#0101 put
+dup /ampersand 16#0026 put
+dup /ampersandsmall 16#F726 put
+dup /angle 16#2220 put
+dup /angleleft 16#2329 put
+dup /angleright 16#232A put
+dup /anoteleia 16#0387 put
+dup /aogonek 16#0105 put
+dup /approxequal 16#2248 put
+dup /aring 16#00E5 put
+dup /aringacute 16#01FB put
+dup /arrowboth 16#2194 put
+dup /arrowdblboth 16#21D4 put
+dup /arrowdbldown 16#21D3 put
+dup /arrowdblleft 16#21D0 put
+dup /arrowdblright 16#21D2 put
+dup /arrowdblup 16#21D1 put
+dup /arrowdown 16#2193 put
+dup /arrowhorizex 16#F8E7 put
+dup /arrowleft 16#2190 put
+dup /arrowright 16#2192 put
+dup /arrowup 16#2191 put
+dup /arrowupdn 16#2195 put
+dup /arrowupdnbse 16#21A8 put
+dup /arrowvertex 16#F8E6 put
+dup /asciicircum 16#005E put
+dup /asciitilde 16#007E put
+dup /asterisk 16#002A put
+dup /asteriskmath 16#2217 put
+dup /asuperior 16#F6E9 put
+dup /at 16#0040 put
+dup /atilde 16#00E3 put
+dup /b 16#0062 put
+dup /backslash 16#005C put
+dup /bar 16#007C put
+dup /beta 16#03B2 put
+dup /block 16#2588 put
+dup /braceex 16#F8F4 put
+dup /braceleft 16#007B put
+dup /braceleftbt 16#F8F3 put
+dup /braceleftmid 16#F8F2 put
+dup /bracelefttp 16#F8F1 put
+dup /braceright 16#007D put
+dup /bracerightbt 16#F8FE put
+dup /bracerightmid 16#F8FD put
+dup /bracerighttp 16#F8FC put
+dup /bracketleft 16#005B put
+dup /bracketleftbt 16#F8F0 put
+dup /bracketleftex 16#F8EF put
+dup /bracketlefttp 16#F8EE put
+dup /bracketright 16#005D put
+dup /bracketrightbt 16#F8FB put
+dup /bracketrightex 16#F8FA put
+dup /bracketrighttp 16#F8F9 put
+dup /breve 16#02D8 put
+dup /brokenbar 16#00A6 put
+dup /bsuperior 16#F6EA put
+dup /bullet 16#2022 put
+dup /c 16#0063 put
+dup /cacute 16#0107 put
+dup /caron 16#02C7 put
+dup /carriagereturn 16#21B5 put
+dup /ccaron 16#010D put
+dup /ccedilla 16#00E7 put
+dup /ccircumflex 16#0109 put
+dup /cdotaccent 16#010B put
+dup /cedilla 16#00B8 put
+dup /cent 16#00A2 put
+dup /centinferior 16#F6DF put
+dup /centoldstyle 16#F7A2 put
+dup /centsuperior 16#F6E0 put
+dup /chi 16#03C7 put
+dup /circle 16#25CB put
+dup /circlemultiply 16#2297 put
+dup /circleplus 16#2295 put
+dup /circumflex 16#02C6 put
+dup /club 16#2663 put
+dup /colon 16#003A put
+dup /colonmonetary 16#20A1 put
+dup /comma 16#002C put
+dup /commaaccent 16#F6C3 put
+dup /commainferior 16#F6E1 put
+dup /commasuperior 16#F6E2 put
+dup /congruent 16#2245 put
+dup /copyright 16#00A9 put
+dup /copyrightsans 16#F8E9 put
+dup /copyrightserif 16#F6D9 put
+dup /currency 16#00A4 put
+dup /cyrBreve 16#F6D1 put
+dup /cyrFlex 16#F6D2 put
+dup /cyrbreve 16#F6D4 put
+dup /cyrflex 16#F6D5 put
+dup /d 16#0064 put
+dup /dagger 16#2020 put
+dup /daggerdbl 16#2021 put
+dup /dblGrave 16#F6D3 put
+dup /dblgrave 16#F6D6 put
+dup /dcaron 16#010F put
+dup /dcroat 16#0111 put
+dup /degree 16#00B0 put
+dup /delta 16#03B4 put
+dup /diamond 16#2666 put
+dup /dieresis 16#00A8 put
+dup /dieresisacute 16#F6D7 put
+dup /dieresisgrave 16#F6D8 put
+dup /dieresistonos 16#0385 put
+dup /divide 16#00F7 put
+dup /dkshade 16#2593 put
+dup /dnblock 16#2584 put
+dup /dollar 16#0024 put
+dup /dollarinferior 16#F6E3 put
+dup /dollaroldstyle 16#F724 put
+dup /dollarsuperior 16#F6E4 put
+dup /dong 16#20AB put
+dup /dotaccent 16#02D9 put
+dup /dotbelowcomb 16#0323 put
+dup /dotlessi 16#0131 put
+dup /dotlessj 16#F6BE put
+dup /dotmath 16#22C5 put
+dup /dsuperior 16#F6EB put
+dup /e 16#0065 put
+dup /eacute 16#00E9 put
+dup /ebreve 16#0115 put
+dup /ecaron 16#011B put
+dup /ecircumflex 16#00EA put
+dup /edieresis 16#00EB put
+dup /edotaccent 16#0117 put
+dup /egrave 16#00E8 put
+dup /eight 16#0038 put
+dup /eightinferior 16#2088 put
+dup /eightoldstyle 16#F738 put
+dup /eightsuperior 16#2078 put
+dup /element 16#2208 put
+dup /ellipsis 16#2026 put
+dup /emacron 16#0113 put
+dup /emdash 16#2014 put
+dup /emptyset 16#2205 put
+dup /endash 16#2013 put
+dup /eng 16#014B put
+dup /eogonek 16#0119 put
+dup /epsilon 16#03B5 put
+dup /epsilontonos 16#03AD put
+dup /equal 16#003D put
+dup /equivalence 16#2261 put
+dup /estimated 16#212E put
+dup /esuperior 16#F6EC put
+dup /eta 16#03B7 put
+dup /etatonos 16#03AE put
+dup /eth 16#00F0 put
+dup /exclam 16#0021 put
+dup /exclamdbl 16#203C put
+dup /exclamdown 16#00A1 put
+dup /exclamdownsmall 16#F7A1 put
+dup /exclamsmall 16#F721 put
+dup /existential 16#2203 put
+dup /f 16#0066 put
+dup /female 16#2640 put
+dup /ff 16#FB00 put
+dup /ffi 16#FB03 put
+dup /ffl 16#FB04 put
+dup /fi 16#FB01 put
+dup /figuredash 16#2012 put
+dup /filledbox 16#25A0 put
+dup /filledrect 16#25AC put
+dup /five 16#0035 put
+dup /fiveeighths 16#215D put
+dup /fiveinferior 16#2085 put
+dup /fiveoldstyle 16#F735 put
+dup /fivesuperior 16#2075 put
+dup /fl 16#FB02 put
+dup /florin 16#0192 put
+dup /four 16#0034 put
+dup /fourinferior 16#2084 put
+dup /fouroldstyle 16#F734 put
+dup /foursuperior 16#2074 put
+dup /fraction [16#2044 16#2215] put
+dup /franc 16#20A3 put
+dup /g 16#0067 put
+dup /gamma 16#03B3 put
+dup /gbreve 16#011F put
+dup /gcaron 16#01E7 put
+dup /gcircumflex 16#011D put
+dup /gcommaaccent 16#0123 put
+dup /gdotaccent 16#0121 put
+dup /germandbls 16#00DF put
+dup /gradient 16#2207 put
+dup /grave 16#0060 put
+dup /gravecomb 16#0300 put
+dup /greater 16#003E put
+dup /greaterequal 16#2265 put
+dup /guillemotleft 16#00AB put
+dup /guillemotright 16#00BB put
+dup /guilsinglleft 16#2039 put
+dup /guilsinglright 16#203A put
+dup /h 16#0068 put
+dup /hbar 16#0127 put
+dup /hcircumflex 16#0125 put
+dup /heart 16#2665 put
+dup /hookabovecomb 16#0309 put
+dup /house 16#2302 put
+dup /hungarumlaut 16#02DD put
+dup /hyphen [16#002D 16#00AD] put
+dup /hypheninferior 16#F6E5 put
+dup /hyphensuperior 16#F6E6 put
+dup /i 16#0069 put
+dup /iacute 16#00ED put
+dup /ibreve 16#012D put
+dup /icircumflex 16#00EE put
+dup /idieresis 16#00EF put
+dup /igrave 16#00EC put
+dup /ij 16#0133 put
+dup /imacron 16#012B put
+dup /infinity 16#221E put
+dup /integral 16#222B put
+dup /integralbt 16#2321 put
+dup /integralex 16#F8F5 put
+dup /integraltp 16#2320 put
+dup /intersection 16#2229 put
+dup /invbullet 16#25D8 put
+dup /invcircle 16#25D9 put
+dup /invsmileface 16#263B put
+dup /iogonek 16#012F put
+dup /iota 16#03B9 put
+dup /iotadieresis 16#03CA put
+dup /iotadieresistonos 16#0390 put
+dup /iotatonos 16#03AF put
+dup /isuperior 16#F6ED put
+dup /itilde 16#0129 put
+dup /j 16#006A put
+dup /jcircumflex 16#0135 put
+dup /k 16#006B put
+dup /kappa 16#03BA put
+dup /kcommaaccent 16#0137 put
+dup /kgreenlandic 16#0138 put
+dup /l 16#006C put
+dup /lacute 16#013A put
+dup /lambda 16#03BB put
+dup /lcaron 16#013E put
+dup /lcommaaccent 16#013C put
+dup /ldot 16#0140 put
+dup /less 16#003C put
+dup /lessequal 16#2264 put
+dup /lfblock 16#258C put
+dup /lira 16#20A4 put
+dup /ll 16#F6C0 put
+dup /logicaland 16#2227 put
+dup /logicalnot 16#00AC put
+dup /logicalor 16#2228 put
+dup /longs 16#017F put
+dup /lozenge 16#25CA put
+dup /lslash 16#0142 put
+dup /lsuperior 16#F6EE put
+dup /ltshade 16#2591 put
+dup /m 16#006D put
+dup /macron [16#00AF 16#02C9] put
+dup /male 16#2642 put
+dup /minus 16#2212 put
+dup /minute 16#2032 put
+dup /msuperior 16#F6EF put
+dup /mu [16#00B5 16#03BC] put
+dup /multiply 16#00D7 put
+dup /musicalnote 16#266A put
+dup /musicalnotedbl 16#266B put
+dup /n 16#006E put
+dup /nacute 16#0144 put
+dup /napostrophe 16#0149 put
+dup /ncaron 16#0148 put
+dup /ncommaaccent 16#0146 put
+dup /nine 16#0039 put
+dup /nineinferior 16#2089 put
+dup /nineoldstyle 16#F739 put
+dup /ninesuperior 16#2079 put
+dup /notelement 16#2209 put
+dup /notequal 16#2260 put
+dup /notsubset 16#2284 put
+dup /nsuperior 16#207F put
+dup /ntilde 16#00F1 put
+dup /nu 16#03BD put
+dup /numbersign 16#0023 put
+dup /o 16#006F put
+dup /oacute 16#00F3 put
+dup /obreve 16#014F put
+dup /ocircumflex 16#00F4 put
+dup /odieresis 16#00F6 put
+dup /oe 16#0153 put
+dup /ogonek 16#02DB put
+dup /ograve 16#00F2 put
+dup /ohorn 16#01A1 put
+dup /ohungarumlaut 16#0151 put
+dup /omacron 16#014D put
+dup /omega 16#03C9 put
+dup /omega1 16#03D6 put
+dup /omegatonos 16#03CE put
+dup /omicron 16#03BF put
+dup /omicrontonos 16#03CC put
+dup /one 16#0031 put
+dup /onedotenleader 16#2024 put
+dup /oneeighth 16#215B put
+dup /onefitted 16#F6DC put
+dup /onehalf 16#00BD put
+dup /oneinferior 16#2081 put
+dup /oneoldstyle 16#F731 put
+dup /onequarter 16#00BC put
+dup /onesuperior 16#00B9 put
+dup /onethird 16#2153 put
+dup /openbullet 16#25E6 put
+dup /ordfeminine 16#00AA put
+dup /ordmasculine 16#00BA put
+dup /orthogonal 16#221F put
+dup /oslash 16#00F8 put
+dup /oslashacute 16#01FF put
+dup /osuperior 16#F6F0 put
+dup /otilde 16#00F5 put
+dup /p 16#0070 put
+dup /paragraph 16#00B6 put
+dup /parenleft 16#0028 put
+dup /parenleftbt 16#F8ED put
+dup /parenleftex 16#F8EC put
+dup /parenleftinferior 16#208D put
+dup /parenleftsuperior 16#207D put
+dup /parenlefttp 16#F8EB put
+dup /parenright 16#0029 put
+dup /parenrightbt 16#F8F8 put
+dup /parenrightex 16#F8F7 put
+dup /parenrightinferior 16#208E put
+dup /parenrightsuperior 16#207E put
+dup /parenrighttp 16#F8F6 put
+dup /partialdiff 16#2202 put
+dup /percent 16#0025 put
+dup /period 16#002E put
+dup /periodcentered [16#00B7 16#2219] put
+dup /periodinferior 16#F6E7 put
+dup /periodsuperior 16#F6E8 put
+dup /perpendicular 16#22A5 put
+dup /perthousand 16#2030 put
+dup /peseta 16#20A7 put
+dup /phi 16#03C6 put
+dup /phi1 16#03D5 put
+dup /pi 16#03C0 put
+dup /plus 16#002B put
+dup /plusminus 16#00B1 put
+dup /prescription 16#211E put
+dup /product 16#220F put
+dup /propersubset 16#2282 put
+dup /propersuperset 16#2283 put
+dup /proportional 16#221D put
+dup /psi 16#03C8 put
+dup /q 16#0071 put
+dup /question 16#003F put
+dup /questiondown 16#00BF put
+dup /questiondownsmall 16#F7BF put
+dup /questionsmall 16#F73F put
+dup /quotedbl 16#0022 put
+dup /quotedblbase 16#201E put
+dup /quotedblleft 16#201C put
+dup /quotedblright 16#201D put
+dup /quoteleft 16#2018 put
+dup /quotereversed 16#201B put
+dup /quoteright 16#2019 put
+dup /quotesinglbase 16#201A put
+dup /quotesingle 16#0027 put
+dup /r 16#0072 put
+dup /racute 16#0155 put
+dup /radical 16#221A put
+dup /radicalex 16#F8E5 put
+dup /rcaron 16#0159 put
+dup /rcommaaccent 16#0157 put
+dup /reflexsubset 16#2286 put
+dup /reflexsuperset 16#2287 put
+dup /registered 16#00AE put
+dup /registersans 16#F8E8 put
+dup /registerserif 16#F6DA put
+dup /revlogicalnot 16#2310 put
+dup /rho 16#03C1 put
+dup /ring 16#02DA put
+dup /rsuperior 16#F6F1 put
+dup /rtblock 16#2590 put
+dup /rupiah 16#F6DD put
+dup /s 16#0073 put
+dup /sacute 16#015B put
+dup /scaron 16#0161 put
+dup /scedilla [16#015F 16#F6C2] put
+dup /scircumflex 16#015D put
+dup /scommaaccent 16#0219 put
+dup /second 16#2033 put
+dup /section 16#00A7 put
+dup /semicolon 16#003B put
+dup /seven 16#0037 put
+dup /seveneighths 16#215E put
+dup /seveninferior 16#2087 put
+dup /sevenoldstyle 16#F737 put
+dup /sevensuperior 16#2077 put
+dup /shade 16#2592 put
+dup /sigma 16#03C3 put
+dup /sigma1 16#03C2 put
+dup /similar 16#223C put
+dup /six 16#0036 put
+dup /sixinferior 16#2086 put
+dup /sixoldstyle 16#F736 put
+dup /sixsuperior 16#2076 put
+dup /slash 16#002F put
+dup /smileface 16#263A put
+dup /space [16#0020 16#00A0] put
+dup /spade 16#2660 put
+dup /ssuperior 16#F6F2 put
+dup /sterling 16#00A3 put
+dup /suchthat 16#220B put
+dup /summation 16#2211 put
+dup /sun 16#263C put
+dup /t 16#0074 put
+dup /tau 16#03C4 put
+dup /tbar 16#0167 put
+dup /tcaron 16#0165 put
+dup /tcommaaccent [16#0163 16#021B] put
+dup /therefore 16#2234 put
+dup /theta 16#03B8 put
+dup /theta1 16#03D1 put
+dup /thorn 16#00FE put
+dup /three 16#0033 put
+dup /threeeighths 16#215C put
+dup /threeinferior 16#2083 put
+dup /threeoldstyle 16#F733 put
+dup /threequarters 16#00BE put
+dup /threequartersemdash 16#F6DE put
+dup /threesuperior 16#00B3 put
+dup /tilde 16#02DC put
+dup /tildecomb 16#0303 put
+dup /tonos 16#0384 put
+dup /trademark 16#2122 put
+dup /trademarksans 16#F8EA put
+dup /trademarkserif 16#F6DB put
+dup /triagdn 16#25BC put
+dup /triaglf 16#25C4 put
+dup /triagrt 16#25BA put
+dup /triagup 16#25B2 put
+dup /tsuperior 16#F6F3 put
+dup /two 16#0032 put
+dup /twodotenleader 16#2025 put
+dup /twoinferior 16#2082 put
+dup /twooldstyle 16#F732 put
+dup /twosuperior 16#00B2 put
+dup /twothirds 16#2154 put
+dup /u 16#0075 put
+dup /uacute 16#00FA put
+dup /ubreve 16#016D put
+dup /ucircumflex 16#00FB put
+dup /udieresis 16#00FC put
+dup /ugrave 16#00F9 put
+dup /uhorn 16#01B0 put
+dup /uhungarumlaut 16#0171 put
+dup /umacron 16#016B put
+dup /underscore 16#005F put
+dup /underscoredbl 16#2017 put
+dup /union 16#222A put
+dup /universal 16#2200 put
+dup /uogonek 16#0173 put
+dup /upblock 16#2580 put
+dup /upsilon 16#03C5 put
+dup /upsilondieresis 16#03CB put
+dup /upsilondieresistonos 16#03B0 put
+dup /upsilontonos 16#03CD put
+dup /uring 16#016F put
+dup /utilde 16#0169 put
+dup /v 16#0076 put
+dup /w 16#0077 put
+dup /wacute 16#1E83 put
+dup /wcircumflex 16#0175 put
+dup /wdieresis 16#1E85 put
+dup /weierstrass 16#2118 put
+dup /wgrave 16#1E81 put
+dup /x 16#0078 put
+dup /xi 16#03BE put
+dup /y 16#0079 put
+dup /yacute 16#00FD put
+dup /ycircumflex 16#0177 put
+dup /ydieresis 16#00FF put
+dup /yen 16#00A5 put
+dup /ygrave 16#1EF3 put
+dup /z 16#007A put
+dup /zacute 16#017A put
+dup /zcaron 16#017E put
+dup /zdotaccent 16#017C put
+dup /zero 16#0030 put
+dup /zeroinferior 16#2080 put
+dup /zerooldstyle 16#F730 put
+dup /zerosuperior 16#2070 put
+dup /zeta 16#03B6 put
+def
diff --git a/Master/xemtex/gslib/gs_btokn.ps b/Master/xemtex/gslib/gs_btokn.ps
new file mode 100644
index 00000000000..21ef12bb286
--- /dev/null
+++ b/Master/xemtex/gslib/gs_btokn.ps
@@ -0,0 +1,321 @@
+% Copyright (C) 1994, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_btokn.ps,v 1.5.2.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Initialization file for binary tokens.
+% When this is run, systemdict is still writable,
+% but everything defined here goes into level2dict.
+
+% Define whether or not to allow writing dictionaries.
+% This is a non-standard feature!
+/WRITEDICTS false def
+
+languagelevel 1 .setlanguagelevel
+level2dict begin
+
+% Initialization for the system name table.
+
+mark
+% 0
+ /abs /add /aload /anchorsearch /and
+ /arc /arcn /arct /arcto /array
+ /ashow /astore /awidthshow /begin /bind
+ /bitshift /ceiling /charpath /clear /cleartomark
+% 20
+ /clip /clippath /closepath /concat /concatmatrix
+ /copy /count /counttomark /currentcmykcolor /currentdash
+ /currentdict /currentfile /currentfont /currentgray /currentgstate
+ /currenthsbcolor /currentlinecap /currentlinejoin /currentlinewidth /currentmatrix
+% 40
+ /currentpoint /currentrgbcolor /currentshared /curveto /cvi
+ /cvlit /cvn /cvr /cvrs /cvs
+ /cvx /def /defineusername /dict /div
+ /dtransform /dup /end /eoclip /eofill
+% 60
+ /eoviewclip /eq /exch /exec /exit
+ /file /fill /findfont /flattenpath /floor
+ /flush /flushfile /for /forall /ge
+ /get /getinterval /grestore /gsave /gstate
+% 80
+ /gt /identmatrix /idiv /idtransform /if
+ /ifelse /image /imagemask /index /ineofill
+ /infill /initviewclip /inueofill /inufill /invertmatrix
+ /itransform /known /le /length /lineto
+% 100
+ /load /loop /lt /makefont /matrix
+ /maxlength /mod /moveto /mul /ne
+ /neg /newpath /not /null /or
+ /pathbbox /pathforall /pop /print /printobject
+% 120
+ /put /putinterval /rcurveto /read /readhexstring
+ /readline /readstring /rectclip /rectfill /rectstroke
+ /rectviewclip /repeat /restore /rlineto /rmoveto
+ /roll /rotate /round /save /scale
+% 140
+ /scalefont /search /selectfont /setbbox /setcachedevice
+ /setcachedevice2 /setcharwidth /setcmykcolor /setdash /setfont
+ /setgray /setgstate /sethsbcolor /setlinecap /setlinejoin
+ /setlinewidth /setmatrix /setrgbcolor /setshared /shareddict
+% 160
+ /show /showpage /stop /stopped /store
+ /string /stringwidth /stroke /strokepath /sub
+ /systemdict /token /transform /translate /truncate
+ /type /uappend /ucache /ueofill /ufill
+% 180
+ /undef /upath /userdict /ustroke /viewclip
+ /viewclippath /where /widthshow /write /writehexstring
+ /writeobject /writestring /wtranslation /xor /xshow
+ /xyshow /yshow /FontDirectory /SharedFontDirectory /Courier
+% 200
+ /Courier-Bold /Courier-BoldOblique /Courier-Oblique /Helvetica /Helvetica-Bold
+ /Helvetica-BoldOblique /Helvetica-Oblique /Symbol /Times-Bold /Times-BoldItalic
+ /Times-Italic /Times-Roman /execuserobject /currentcolor /currentcolorspace
+ /currentglobal /execform /filter /findresource /globaldict
+% 220
+ /makepattern /setcolor /setcolorspace /setglobal /setpagedevice
+ /setpattern
+% pad to 256
+ counttomark 256 exch sub { 0 } repeat
+% 256
+ /= /== /ISOLatin1Encoding /StandardEncoding
+% 260
+ ([) cvn (]) cvn /atan /banddevice /bytesavailable
+ /cachestatus /closefile /colorimage /condition /copypage
+ /cos /countdictstack /countexecstack /cshow /currentblackgeneration
+ /currentcacheparams /currentcolorscreen /currentcolortransfer /currentcontext /currentflat
+% 280
+ /currenthalftone /currenthalftonephase /currentmiterlimit /currentobjectformat /currentpacking
+ /currentscreen /currentstrokeadjust /currenttransfer /currentundercolorremoval /defaultmatrix
+ /definefont /deletefile /detach /deviceinfo /dictstack
+ /echo /erasepage /errordict /execstack /executeonly
+% 300
+ /exp /false /filenameforall /fileposition /fork
+ /framedevice /grestoreall /handleerror /initclip /initgraphics
+ /initmatrix /instroke /inustroke /join /kshow
+ /ln /lock /log /mark /monitor
+% 320
+ /noaccess /notify /nulldevice /packedarray /quit
+ /rand /rcheck /readonly /realtime /renamefile
+ /renderbands /resetfile /reversepath /rootfont /rrand
+ /run /scheck /setblackgeneration /setcachelimit /setcacheparams
+% 340
+ /setcolorscreen /setcolortransfer /setfileposition /setflat /sethalftone
+ /sethalftonephase /setmiterlimit /setobjectformat /setpacking /setscreen
+ /setstrokeadjust /settransfer /setucacheparams /setundercolorremoval /sin
+ /sqrt /srand /stack /status /statusdict
+% 360
+ /true /ucachestatus /undefinefont /usertime /ustrokepath
+ /version /vmreclaim /vmstatus /wait /wcheck
+ /xcheck /yield /defineuserobject /undefineuserobject /UserObjects
+ /cleardictstack
+% 376
+ /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
+ /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
+% 428
+ /setvmthreshold (<<) cvn
+ (>>) cvn /currentcolorrendering /currentdevparams /currentoverprint /currentpagedevice
+ /currentsystemparams /currentuserparams /defineresource /findencoding /gcheck
+% 440
+ /glyphshow /languagelevel /product /pstack /resourceforall
+ /resourcestatus /revision /serialnumber /setcolorrendering /setdevparams
+ /setoverprint /setsystemparams /setuserparams /startjob /undefineresource
+ /GlobalFontDirectory /ASCII85Decode /ASCII85Encode /ASCIIHexDecode /ASCIIHexEncode
+% 460
+ /CCITTFaxDecode /CCITTFaxEncode /DCTDecode /DCTEncode /LZWDecode
+ /LZWEncode /NullEncode /RunLengthDecode /RunLengthEncode /SubFileDecode
+ /CIEBasedA /CIEBasedABC /DeviceCMYK /DeviceGray /DeviceRGB
+ /Indexed /Pattern /Separation /CIEBasedDEF /CIEBasedDEFG
+% 480
+ /DeviceN
+% 481 -- end
+.packtomark
+dup /SystemNames exch def .installsystemnames
+
+% Define printobject and writeobject.
+% These are mostly implemented in PostScript, so that we don't have to
+% worry about interrupts or callbacks when writing to the output file.
+
+% Define procedures for accumulating the space required to represent
+% an object in binary form.
+/cntdict mark % <#refs> <#chars> <obj> -proc- <#refs> <#chars>
+ /integertype /pop load
+ /realtype 1 index
+ /marktype 1 index
+ /nulltype 1 index
+ /booleantype 1 index
+ /nametype { length add } bind
+ /stringtype 1 index
+ /arraytype null
+ /dicttype null
+.dicttomark def
+cntdict /arraytype {
+ dup length 4 -1 roll add 3 1 roll {
+ dup type //cntdict exch get exec
+ } forall
+} bind put
+cntdict /dicttype {
+ WRITEDICTS {
+ dup dup length 2 mul 5 -1 roll add 4 2 roll {
+ 4 1 roll dup type //cntdict exch get exec
+ 3 -1 roll dup type //cntdict exch get exec
+ } forall
+ } {
+ /writeobject load /typecheck signalerror
+ } ifelse
+} bind put
+
+/w2dict mark
+ /nametype { 2 copy .writecvs pop } bind
+ /stringtype 1 index
+.dicttomark def
+
+/.bosheader { % <top_length> <total_length> <string8> .bosheader
+ % <string4|8>
+ dup 0 currentobjectformat 127 add put % object format => BOS tag
+ 2 index 255 le 2 index 65531 le and {
+ % Use the short header format: tag toplen(1) totlen(2)
+ exch 4 add exch
+ 0 4 getinterval
+ dup 1 5 -1 roll put
+ } {
+ % Use the long header format: tag 0(1) toplen(2) totlen(4)
+ exch 8 add exch
+ 0 0 4 2 roll .bosobject exch pop exch pop % store with byte swapping
+ } ifelse % Stack: shortlen str
+ exch dup -8 bitshift exch 255 and % str hibyte lobyte
+ currentobjectformat 1 and 0 eq { % lsb first
+ exch
+ } if
+ 2 index 3 3 -1 roll put
+ 1 index 2 3 -1 roll put
+} .bind def
+
+/.writeobjects { % <file> <tag> <array> .writeobjects -
+ mark exch
+
+ % Count the space required for refs and strings.
+
+ dup length 0 3 -1 roll
+ % Stack: file tag -mark- #refs #chars array
+ dup 4 1 roll {
+ dup type /arraytype eq {
+ % Nested array. An element of the array is also
+ % an array(sub array). Push the sub array to the stack.
+ dup 4 1 roll
+ } if
+ dup type //cntdict exch get exec
+ } forall
+
+ % Write the header.
+
+ % Stack: file tag -mark- array1 ... array|dictN #refs #chars
+ counttomark 3 add -2 roll 4 1 roll
+ % Stack: -mark- array1 ... array|dictN tag #refs #chars file
+ dup counttomark 1 sub index length
+ 4 index 3 bitshift 4 index add
+ (xxxxxxxx) .bosheader writestring
+
+ % Write the objects per se.
+
+ 3 1 roll pop
+ counttomark 1 sub index length 3 bitshift exch
+ 3 bitshift
+ % Stack: -mark- array1 ... array|dictN tag file ref# char#
+ counttomark 4 sub {
+ counttomark -1 roll dup 6 1 roll
+ dup type /dicttype eq { % can't be first object
+ { 5 1 roll (xxxxxxxx) .bosobject
+ 3 index exch writestring
+ 4 -1 roll (xxxxxxxx) .bosobject
+ 3 index exch writestring
+ } forall
+ } {
+ { (xxxxxxxx) .bosobject
+ dup 1 6 index put
+ 3 index exch writestring
+ 4 -1 roll pop 0 4 1 roll % clear tag
+ } forall
+ } ifelse
+ } repeat
+
+ % Write the strings and names.
+
+ pop pop exch pop
+ % Stack: -mark- array1 ... array|dictN file
+ counttomark 1 sub {
+ counttomark -1 roll {
+ % The counting pass ensured that the keys and values
+ % of any dictionary must be writable objects.
+ % Hence, we are processing a dictionary iff
+ % the next-to-top stack element is not a file.
+ 1 index type /filetype ne {
+ exch 2 index exch dup type //w2dict exch .knownget
+ { exec } { pop } ifelse pop
+ } if
+ dup type //w2dict exch .knownget { exec } { pop } ifelse
+ } forall
+ } repeat
+
+ % Clean up.
+
+ % Stack: -mark- file
+ pop pop
+
+} odef
+
+/printobject { % <obj> <tag> printobject -
+ (%stdout) (w) file 2 index 2 index writeobject pop pop
+} odef
+/writeobject { % <file> <obj> <tag> writeobject -
+ 3 copy exch
+ % We must allocate the array in local VM
+ % to avoid a possible invalidaccess.
+ .currentglobal false .setglobal exch 1 array astore exch .setglobal
+ .writeobjects pop pop pop
+} odef
+
+% Implement binary error message output.
+/.objectprinttest { % <obj> .objectprinttest -
+ % This is a pseudo-operator so it will restore the stack
+ % if it gets an error.
+ 0 0 2 index roll dup type //cntdict exch get exec pop pop pop
+} bind odef
+/.printerror {
+ $error /binary get .languagelevel 2 ge and {
+ currentobjectformat 0 ne {
+ [ /Error $error /errorname get $error /command get
+ % Convert the object with cvs if it isn't printable.
+ dup { .objectprinttest } .internalstopped {
+ pop 100 string cvs
+ } if
+ false ] 250 printobject
+ }
+ //.printerror % known to be a procedure
+ ifelse
+ }
+ //.printerror % known to be a procedure
+ ifelse
+} bind def
+
+currentdict /cntdict .undef
+currentdict /w2dict .undef
+
+% End of level2dict
+
+end
+.setlanguagelevel
diff --git a/Master/xemtex/gslib/gs_ccfnt.ps b/Master/xemtex/gslib/gs_ccfnt.ps
new file mode 100644
index 00000000000..ad92b3c7033
--- /dev/null
+++ b/Master/xemtex/gslib/gs_ccfnt.ps
@@ -0,0 +1,76 @@
+% Copyright (C) 1994, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_ccfnt.ps,v 1.5.2.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Find and register all the precompiled font operators in systemdict.
+
+/registerfont % <fontname> <fontdict> registerfont <font>
+ { DEBUG { (Registering ) print 1 index = } if
+ dup begin
+ Encoding type /nametype eq
+ { Encoding .findencoding /Encoding exch def
+ }
+ if
+ dup /PrefEnc known
+ { PrefEnc type /nametype eq
+ { PrefEnc .findencoding /PrefEnc exch def
+ }
+ if
+ }
+ if
+ dup /FDepVector known
+ { /FDepVector [ FDepVector
+ { .FontDirectory 1 index .knownget
+ { exch pop }
+ { ccfonts 1 index .knownget
+ { registerfont
+ }
+ { Fontmap 1 index known
+ { findfont }
+ { pop NullFont }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ }
+ forall ] readonly def
+ }
+ if
+ end
+ % Use the value of definefont appropriate at run-time, not bind-time
+ /definefont load exec
+ } bind odef
+% Bind recursive call (bind descends into oparrays: feature!)
+/registerfont dup load bind def
+
+/.loadinitialfonts {
+ //.loadinitialfonts exec
+ NOCCFONTS not {
+ /ccfonts mark
+ 0 1 null .getccfont 1 sub { .getccfont dup /FontName get exch } for
+ .dicttomark def
+ % Make sure these fonts are registered as "resources".
+ currentfile {
+ pop ccfonts {
+ .FontDirectory 2 index known { pop pop } { registerfont pop } ifelse
+ } forall
+ } .execasresource
+ currentdict /ccfonts .undef
+ } if
+} bind def
+
+currentdict /registerfont .undef
diff --git a/Master/xemtex/gslib/gs_ce_e.ps b/Master/xemtex/gslib/gs_ce_e.ps
new file mode 100644
index 00000000000..0708f1e68e2
--- /dev/null
+++ b/Master/xemtex/gslib/gs_ce_e.ps
@@ -0,0 +1,48 @@
+% Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_ce_e.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Define the Adobe CE (Central European) encoding vector.
+% We define it by differences from the ISOLatin1Encoding vector.
+/CEEncoding
+ISOLatin1Encoding 0 39 getinterval aload pop
+% 047
+ /quotesingle
+ISOLatin1Encoding 40 56 getinterval aload pop
+% 140
+ /grave
+ISOLatin1Encoding 97 31 getinterval aload pop
+% 20x
+ /.notdef /.notdef /quotesinglbase /.notdef /quotedblbase /ellipsis /dagger /daggerdbl
+ /.notdef /perthousand /Scaron /guilsinglleft /Sacute /Tcaron /Zcaron /Zacute
+ /.notdef /grave /acute /circumflex /tilde /bullet /endash /emdash
+ /.notdef /trademark /scaron /guilsinglright /sacute /tcaron /zcaron /zacute
+% 24x
+ /space /caron /breve /Lslash /currency /Aogonek /brokenbar /section
+ /dieresis /copyright /Scommaaccent /guillemotleft /logicalnot /hyphen /registered /Zdotaccent
+ /degree /plusminus /ogonek /lslash /acute /mu /paragraph /periodcentered
+ /cedilla /aogonek /scommaaccent /guillemotright /Lcaron /hungarumlaut /lcaron /zdotaccent
+% 30x
+ /Racute /Aacute /Acircumflex /Abreve /Adieresis /Lacute /Cacute /Ccedilla
+ /Ccaron /Eacute /Eogonek /Edieresis /Ecaron /Iacute /Icircumflex /Dcaron
+ /Dcroat /Nacute /Ncaron /Oacute /Ocircumflex /Ohungarumlaut /Odieresis /multiply
+ /Rcaron /Uring /Uacute /Uhungarumlaut /Udieresis /Yacute /Tcommaaccent /germandbls
+% 34x
+ /racute /aacute /acircumflex /abreve /adieresis /lacute /cacute /ccedilla
+ /ccaron /eacute /eogonek /edieresis /ecaron /iacute /icircumflex /dcaron
+ /dcroat /nacute /ncaron /oacute /ocircumflex /ohungarumlaut /odieresis /divide
+ /rcaron /uring /uacute /uhungarumlaut /udieresis /yacute /tcommaaccent /dotaccent
+256 packedarray .defineencoding
diff --git a/Master/xemtex/gslib/gs_cff.ps b/Master/xemtex/gslib/gs_cff.ps
new file mode 100644
index 00000000000..2b9b510e7c7
--- /dev/null
+++ b/Master/xemtex/gslib/gs_cff.ps
@@ -0,0 +1,758 @@
+% Copyright (C) 1997, 1998, 1999, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_cff.ps,v 1.10.2.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Loader for CFF (compressed) fonts, including OpenType CFFs.
+% The following are not implemented yet:
+% Deleted entries in the Name Index
+% Embedded PostScript
+% Multiple Master fonts
+% Chameleon fonts
+% Synthetic fonts
+
+% ---------------- Font loading machinery ---------------- %
+
+% Augment the FONTPATH machinery so it recognizes OpenType CFF font sets.
+
+/.scanfontheaders where {
+ pop /.scanfontheaders [
+ .scanfontheaders aload pop (OTTO*)
+ ] def
+} if
+
+% Load a font file that might be an OpenType CFF font set.
+
+% <file> .loadfontfile -
+/.loadnonottofontfile /.loadfontfile load def
+/.loadfontfile {
+ dup 4 string .peekstring pop (OTTO) eq {
+ % If this is a font at all, it's an OpenType CFF font set.
+ .loadottofontfile
+ } {
+ % Not a TrueType font.
+ .loadnonottofontfile
+ } ifelse
+} bind def
+
+% <file> .loadottofontfile -
+/.loadottofontfile {
+ /FontSetInit /ProcSet findresource begin
+ 2 dict begin
+ /f exch def /cff null def
+ card32 pop card16 6 { next pop } repeat dup {
+ % Stack: numtables tablesleft
+ dup 0 eq {
+ pop pop /.loadottofontfile cvx /invalidfont signalerror
+ } if
+ f 4 string readstring pop (CFF ) eq { sub exit } if
+ 1 sub
+ } loop
+ % Stack: tablesread
+ card32 pop card32 card32
+ % Stack: tablesread start length
+ exch 3 -1 roll 1 add 16 mul 12 add sub
+ f exch subfilefilter flushfile % skip to start
+ f exch subfilefilter end
+ % Use a random FontSet resource name. ****** WRONG ******
+ realtime rand xor =string cvs exch false
+ ReadData
+} bind def
+
+30 dict begin
+
+% ---------------- Standard strings (actually names) ---------------- %
+
+/StandardStrings mark
+ % The initial StandardStrings that that denote characters are
+ % defined as a pseudo-Encoding.
+% 0
+ /CFFStandardStrings .findencoding aload pop
+% 379
+ (001.000)
+% 380
+ (001.001) (001.002) (001.003) /Black /Bold
+ /Book /Light /Medium /Regular /Roman
+ /Semibold
+.packtomark def
+
+% ---------------- Standard encodings ---------------- %
+
+/StandardEncodings [
+
+% StandardEncoding
+mark
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 1 2 3 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 37 38 39 40 41 42 43 44 45 46 47 48
+ 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
+ 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
+ 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
+ 0 111 112 113 114 0 115 116 117 118 119 120 121 122 0 123
+ 0 124 125 126 127 128 129 130 131 0 132 133 0 134 135 136
+ 137 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 138 0 139 0 0 0 0 140 141 142 143 0 0 0 0
+ 0 144 0 0 0 145 0 0 146 147 148 149 0 0 0 0
+.packtomark
+
+% ExpertEncoding
+mark
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 1 229 230 0 231 232 233 234 235 236 237 238 13 14 15 99
+ 239 240 241 242 243 244 245 246 247 248 27 28 249 250 251 252
+ 0 253 254 255 256 257 0 0 0 258 0 0 259 260 261 262
+ 0 0 263 264 265 0 266 109 110 267 268 269 0 270 271 272
+ 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288
+ 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 304 305 306 0 0 307 308 309 310 311 0 312 0 0 313
+ 0 0 314 315 0 0 316 317 318 0 0 0 158 155 163 319
+ 320 321 322 323 324 325 0 0 326 150 164 169 327 328 329 330
+ 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346
+ 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362
+ 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378
+.packtomark
+
+] readonly def
+
+% ---------------- Standard Charsets ---------------- %
+
+% We include an explicit 0 at the beginning of each charset.
+
+/StandardCharsets [
+
+% ISOAdobe
+mark
+ 0
+ 1 1 228 { } for
+.packtomark
+
+% Expert
+mark
+ 0
+ 1 229 230 231 232 233 234 235 236 237 238 13 14 15 99 239
+ 240 241 242 243 244 245 246 247 248 27 28 249 250 251 252 253
+ 254 255 256 257 258 259 260 261 262 263 264 265 266 109 110 267
+ 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283
+ 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299
+ 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315
+ 316 317 318 158 155 163 319 320 321 322 323 324 325 326 150 164
+ 169 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341
+ 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357
+ 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373
+ 374 375 376 377 378
+.packtomark
+
+% ExpertSubset
+mark
+ 0
+ 1 231 232 235 236 237 238 13 14 15 99 239 240 241 242 243
+ 244 245 246 247 248 27 28 249 250 251 253 254 255 256 257 258
+ 259 260 261 262 263 264 265 266 109 110 267 268 269 270 272 300
+ 301 302 305 314 315 158 155 163 320 321 322 323 324 325 326 150
+ 164 169 327 328 329 330 331 332 333 334 335 336 337 338 339 340
+ 341 342 343 344 345 346
+.packtomark
+
+] readonly def
+
+% ---------------- Font loading ---------------- %
+
+% ------ Utilities ------ %
+
+/advance { % <n> advance -
+ f cff eq { pos add /pos exch store } { pop } ifelse
+} bind def
+/next { % - next <byte>
+ f read {
+ 1 advance
+ DEBUG { ( ) print dup = } if
+ } if
+} bind def
+/next2 { % - next2 <byte1> <byte2>
+ f read {
+ f read {
+ 2 advance
+ DEBUG { ( ) print 1 index =only (,) print dup = } if
+ } {
+ 1 advance
+ DEBUG { ( ) print dup = } if
+ } ifelse
+ } if
+} bind def
+/nextstring { % <length> nextstring <string>
+ dup 0 eq {
+ pop ()
+ } {
+ string f exch readstring pop dup length advance
+ DEBUG { ( ) print dup == } if
+ } ifelse
+} bind def
+/card8 % - card8 <card8>
+ /next load
+def
+/card16 { % - card16 <card16>
+ next2 exch 8 bitshift add
+} bind def
+/card32 { % - card32 <card32>
+ card16 16 bitshift card16 add
+} bind def
+/offsetprocs [
+ /card8 load
+ /card16 load
+ { card8 16 bitshift card16 add } bind
+ /card32 load
+] readonly def
+/offsetproc { % <offsize> offsetproc <proc>
+ 1 sub //offsetprocs exch get
+} bind def
+/offset { % <offsize> offset <offset>
+ offsetproc exec
+} bind def
+/sid % - <sid> sid
+ /card16 load
+def
+/Index { % - Index <array>
+ mark card16 dup 0 ne {
+ 1 exch next offsetproc dup exec pop exch {
+ dup exec dup 4 -1 roll sub 3 1 roll exch
+ } repeat pop
+ } if pop .packtomark
+ [ exch { nextstring } forall ] readonly
+} bind def
+/tokens { % - tokens <num1> ... <op#> (op# = 12 means EOF)
+ {
+ f read not { 12 exit } if
+ DEBUG { (..) print dup = } if
+ 1 advance
+ dup 12 eq { pop next 32 add exit } if
+ dup 28 lt { exit } if
+ dup 32 lt {
+ 28 sub {
+ { card16 32768 xor 32768 sub }
+ { 4 offset dup 16#7fffffff gt { -1 32 bitshift add } if }
+ { tokenreal }
+ { 31 exit }
+ } exch get exec
+ } {
+ dup 247 lt {
+ 139 sub
+ } {
+ 247 sub {
+ { next 108 add }
+ { next 364 add }
+ { next 620 add }
+ { next 876 add }
+ { next 108 add neg }
+ { next 364 add neg }
+ { next 620 add neg }
+ { next 876 add neg }
+ % 255 is deliberately omitted and will cause a rangecheck
+ } exch get exec
+ } ifelse
+ } ifelse
+ } loop
+} bind def
+/tokenbuf 100 string def
+/tokenput { % <index> <char> tokenput <index+1>
+ tokenbuf 2 index 3 -1 roll put 1 add
+} bind def
+/tokenrealarray [
+ (0123456789.E) { } forall
+ [(E) 0 get /tokenput cvx (-) 0 get] cvx
+ null % will give an error
+ (-) 0 get
+ { exit }
+] readonly def
+/tokenreal { % - tokenreal <float>
+ 0 {
+ next exch 1 index -4 bitshift tokenrealarray exch get exec tokenput
+ % We must leave the byte on the stack temporarily so that
+ % the exit will see a consistent stack state.
+ 1 index 15 and tokenrealarray exch get exec tokenput exch pop
+ } loop
+ tokenbuf 0 3 -1 roll getinterval cvr exch pop
+} bind def
+/Dict { % <opsdict> Dict -
+ /opdict exch store {
+ mark tokens
+ DEBUG { (tokens: ) print ] dup === mark exch aload pop } if
+ opdict exch .knownget { exec } if cleartomark
+ } loop cleartomark
+} bind def
+/idstring { % <sid> idstring <string|name>
+ dup 391 lt { //StandardStrings } { 391 sub strings } ifelse exch get
+} bind def
+/idname { % <sid> idname <name>
+ idstring dup type /nametype ne { cvn } if
+} bind def
+/subfilefilter { % <file> <length> subfilefilter <filter>
+ % SubFileDecode interprets a length of 0 as infinite.
+ dup 0 le { pop pop () 0 } if () /SubFileDecode filter
+} bind def
+
+% ------ Top dictionary ------ %
+
+/offput { % <offset> <proc> offput -
+ DEBUG { (queued: ) print 1 index =only ( ) print dup === } if
+ currentdict exch aload length 1 add packedarray cvx
+ offsets 3 1 roll put
+} bind def
+/queueput { % <font> <proc> queueput -
+ 16#7fffffff offsets { pop .min } forall
+ pos sub nextstring
+ 3 1 roll aload length 2 add packedarray cvx
+ [ queued aload pop counttomark 2 add -1 roll ]
+ /queued exch store
+} bind def
+/xxput { % <value> <key> <dict> xxput -
+ 3 1 roll exch put
+} bind def
+/putfi { % <value> <key> putfi -
+ FontInfo xxput
+} bind def
+/xdef { % <value> <key> xdef -
+ exch def
+} bind def
+/topdictops mark
+ 12 { exit }
+ 0 { idstring /version putfi }
+ 1 { idstring /Notice putfi }
+ 32 { idstring /Copyright putfi }
+ 2 { idstring /FullName putfi }
+ 3 { idstring /FamilyName putfi }
+ 4 { idstring /Weight putfi }
+ 33 { 0 ne /isFixedPitch putfi }
+ 34 { /ItalicAngle putfi }
+ 35 { /UnderlinePosition putfi }
+ 36 { /UnderlineThickness putfi }
+ 37 { /PaintType xdef }
+ 38 { /FontType xdef } % actually CharstringType
+ 39 { counttomark array astore /FontMatrix xdef }
+ 13 { /UniqueID xdef }
+ 5 { counttomark array astore /FontBBox xdef }
+ 40 { /StrokeWidth xdef }
+ 14 { counttomark array astore /XUID xdef }
+ 15 {
+ dup StandardCharsets length lt {
+ StandardCharsets exch get /charset xdef
+ } {
+ { queuecharset } offput
+ } ifelse
+ }
+ 16 {
+ dup StandardEncodings length lt {
+ /Encoding xdef
+ } {
+ { queueEncoding } offput
+ } ifelse
+ }
+ 17 { { readCharStrings } offput }
+ 18 { exch /readPrivate cvx 2 packedarray offput }
+ % CIDFont operators
+ 62 { % ROS, must be first in a CIDFont
+ currentdict /FontType undef
+ currentdict /Encoding undef
+ currentdict /FontMatrix undef
+ /CIDFontVersion 0 def
+ /CIDFontRevision 0 def
+ /CIDFontType 0 def
+ /CIDCount 8720 def % Default value defined in CFF spec.
+ 3 dict begin
+ /Supplement xdef
+ idstring /Ordering xdef
+ idstring /Registry xdef
+ /CIDSystemInfo currentdict end def
+ }
+ 63 { /CIDFontVersion xdef }
+ 64 { /CIDFontRevision xdef }
+ 65 { /CIDFontType xdef }
+ 66 { /CIDCount xdef }
+ 67 { /UIDBase xdef }
+ 68 { { readFDArray } offput }
+ 69 { { readFDSelect } offput }
+ % This operator only appears in a FDArray element.
+ 70 { idstring /FontName exch def }
+.dicttomark readonly def
+
+% readcharset and readFDSelect may require the length of CharStringArray,
+% but these structures may occur in the file before the CharStrings.
+% If that happens, use a hack: assume that all the data up to the next
+% queued read should be read.
+
+/charstringcount { % <font> charstringcount <count> true
+ % <font> charstringcount <length> false
+ /CharStringArray .knownget {
+ length true
+ } {
+ % Hack: look for the next queued read.
+ 16#7fffffff offsets { pop .min } forall
+ pos sub false
+ } ifelse
+} bind def
+
+/readCharStrings { % <font> readCharStrings -
+ /CharStringArray Index put
+} bind def
+
+% ------ Charsets and encodings ------ %
+
+% Note: formats 1 and 2 can overflow the operand stack.
+% We'll fix this if it ever becomes necessary.
+/charsetcount {
+ charstringcount { 1 sub } { 2 idiv } ifelse
+} bind def
+/charsetformats [
+{ [ 0 3 -1 roll charsetcount { sid } repeat ]
+} bind
+{ [ 0 3 -1 roll charsetcount {
+ dup 0 eq { pop exit } if
+ sid card8 1 add 2 index .min { exch 1 sub 1 index 1 add } repeat pop
+ } loop ]
+} bind
+{ [ 0 3 -1 roll charsetcount {
+ dup 0 eq { pop exit } if
+ sid card16 1 add 2 index .min { exch 1 sub 1 index 1 add } repeat pop
+ } loop ]
+} bind
+] readonly def
+/queuecharset { % <font> queuecharset -
+ { readcharset } queueput
+} bind def
+/readcharset { % <data> <font> readcharset -
+ begin 0 () /SubFileDecode filter /f exch store
+ charsetformats next get currentdict exch exec /charset exch def end
+} bind def
+
+/encodingformats [
+{ 1 1 next { next exch Encoding 3 1 roll put } for
+} bind
+{ 1 next {
+ next next 1 add {
+ % Stack: gid code
+ Encoding 1 index 3 index put
+ exch 1 add exch 1 add
+ } repeat pop
+ } repeat pop
+} bind
+] readonly def
+/queueEncoding { % <font> queueEncoding -
+ { readEncoding } queueput
+} bind def
+/readEncoding { % <data> <font> readEncoding -
+ begin 0 () /SubFileDecode filter /f exch store
+ /Encoding [ 256 { /.notdef } repeat ] def
+ next encodingformats 1 index 127 and get exec
+ 128 ge {
+ % Read supplementary encodings.
+ next {
+ Encoding next sid idname put
+ } repeat
+ } if end
+} bind def
+
+% ------ FDArray and FDSelect ------ %
+
+/readFDArray { % <font> readFDArray -
+ Index exch
+ 2 dict begin /f null def begin
+ [ exch {
+ dup length subfilefilter /f exch store
+ 10 dict begin
+ /FontType 2 def
+ /PaintType 0 def
+ /FontMatrix [0.001 0 0 0.001 0 0] def
+ /Private 20 dict def
+ //topdictops Dict currentdict end
+ } forall ] /FDArray xdef end end
+} bind def
+
+% Note: this implementation can overflow the operand stack.
+% We'll fix this if it ever becomes necessary.
+/fdselectformats [
+{ [ exch charstringcount pop { card8 } repeat ] } bind
+{ /FDSelect cvx /invalidfont signalerror } bind
+dup
+{ pop [ card16 card16 exch {
+ % Stack: previndex
+ card8 card16 dup 4 1 roll 3 -1 roll sub 1 sub {
+ exch 1 index
+ } repeat exch
+ } repeat pop ]
+} bind
+] readonly def
+
+/readFDSelect { % <font> readFDSelect -
+ begin fdselectformats next get currentdict exch exec /FDSelect exch def end
+} bind def
+
+
+% ------ Private dictionary ------ %
+
+/deltarray { % -mark- <num1> ... deltarray <num1'> ...
+ 0 counttomark 1 sub { counttomark -1 roll add dup } repeat pop
+ counttomark array astore
+} bind def
+
+/privatedictops mark
+ 12 { exit }
+ 6 { deltarray /BlueValues xdef }
+ 7 { deltarray /OtherBlues xdef }
+ 8 { deltarray /FamilyBlues xdef }
+ 9 { deltarray /FamilyOtherBlues xdef }
+ 41 { /BlueScale xdef }
+ 42 { /BlueShift xdef }
+ 43 { /BlueFuzz xdef }
+ 10 { 1 array astore /StdHW xdef }
+ 11 { 1 array astore /StdVW xdef }
+ 44 { deltarray /StemSnapH xdef }
+ 45 { deltarray /StemSnapV xdef }
+ 46 { 0 ne /ForceBold xdef }
+ 47 { /ForceBoldThreshold xdef }
+ 48 { /lenIV xdef }
+ 49 { /LanguageGroup xdef }
+ 50 { /ExpansionFactor xdef }
+ 51 { /initialRandomSeed xdef }
+ 19 { PrivateStart add { readSubrs } offput }
+ 20 { /defaultWidthX xdef }
+ 21 { /nominalWidthX xdef }
+ % Multiple Master fonts only
+ 59 { /NDV xdef }
+ 60 { /CDV xdef }
+ 61 { /lenBuildCharArray xdef }
+.dicttomark readonly def
+
+/readPrivate { % <font> <size> readPrivate -
+ 2 dict begin
+ /PrivateStart pos def
+ f 3 1 roll exch 1 index f exch subfilefilter /f exch store
+ dup /FontType get exch
+ /Private get begin
+ % Default lenIV to -1 even for Type 1 CharStrings.
+ 2 ne { /lenIV -1 def } if
+ //privatedictops Dict end
+ exch /f exch store advance
+ end
+} bind def
+
+/readSubrs { % <font> readSubrs -
+ /Subrs Index put
+} bind def
+
+% ------ Main program ------ %
+
+% Clean up after finishing a font.
+/cleanupFont { % (currentdict) cleanupFont -
+ % Remove unwanted entries.
+ currentdict /charset undef
+ currentdict /CharStringArray undef
+} bind def
+
+% Update the Encoding and CharStrings for a real font.
+/finishFont { % (currentdict) finishFont -
+ % Construct the real Encoding.
+ % The value of Encoding is either a number, for predefined
+ % encodings, or an array of mixed GIDs and names.
+ /Encoding mark Encoding
+ DEBUG { (Encoding: ) print dup === flush } if
+ dup type /integertype eq {
+ StandardEncodings exch get { idname } forall
+ } {
+ {
+ dup type /integertype eq { charset exch get idname } if
+ } forall
+ } ifelse .packtomark def
+ % Construct the CharStrings.
+ % Note that they may only correspond to an initial
+ % subset of the charset.
+ /CharStrings charset length CharStringArray length .min dict def
+ DEBUG {
+ charset length =only ( charset ) print
+ CharStringArray length =only ( CharStringArray) =
+ charset == flush
+ } if
+ 0 1 CharStrings maxlength 1 sub {
+ dup CharStringArray exch get
+ exch charset exch get idstring CharStrings xxput
+ } for
+ cleanupFont
+} bind def
+
+% Replace CharStrings with GlyphDirectory for a CIDFont;
+% Move GlobalSubrs to descendent fonts.
+/finishCIDFont { % (currentdict) finishCIDFont -
+ % Construct the GlyphDirectory, similar to CharStrings.
+ /FDBytes FDArray length 1 gt { 1 } { 0 } ifelse def
+ /GlyphDirectory charset length CharStringArray length .min dict def
+ DEBUG {
+ charset length =only ( charset ) print
+ CharStringArray length =only ( CharStringArray) =
+ charset == flush
+ } if
+ 0 1 GlyphDirectory maxlength 1 sub {
+ dup CharStringArray exch get
+ % If there is more than one FDArray entry, add the font
+ % index to the beginning of each charstring.
+ FDBytes 1 eq {
+ FDSelect 2 index get
+ 1 string dup 0 4 -1 roll put exch concatstrings
+ } if
+ exch charset exch get GlyphDirectory xxput
+ } for
+
+ Private /GlobalSubrs .knownget {
+ FDArray {
+ /Private get /GlobalSubrs 2 index put
+ } forall
+ pop
+ Private /GlobalSubrs undef
+ } if
+
+ % Clean up.
+ currentdict /FDSelect undef
+ cleanupFont
+} bind def
+% We need to pass the file as a parameter for the sake of the PDF
+% interpreter. Also for the sake of PDF, a flag forces the font
+% to be defined as <resname> instead of the name embedded in the data.
+% This is needed for subsetted fonts; it is valid if the CFF
+% contains only a single font.
+/StartData { % <resname> <nbytes> StartData -
+ currentfile exch subfilefilter false ReadData
+} bind def
+/ReadData { % <resname> <file> <forceresname> ReadData -
+
+ % Initialize.
+
+ 30 dict begin
+ /forceresname exch def
+ /cff exch def
+ /pos 0 def
+ /resname exch cvlit def
+ /DEBUG DEBUG def % bring the binding closer
+
+ % Read the header.
+
+ /f cff def
+ /vmajor next def
+ /vminor next def
+ /hdrsize next def
+ /aoffsize next def
+
+ % Read the Indexes.
+
+ /names Index def
+ /topdicts Index def
+ /strings Index def
+ /gsubrs Index def
+
+ % Read the top Dicts.
+
+ /offsets 50 dict def
+ /queued [] def
+ /opdict null def % reserve a slot
+ /fonts [ topdicts {
+ 0 () /SubFileDecode filter /f exch def
+ 40 dict begin
+ % Preload defaults that differ from PostScript defaults,
+ % or that are required.
+ /FontType 2 def
+ /PaintType 0 def
+ /FontMatrix [0.001 0 0 0.001 0 0] def
+ /charset StandardCharsets 0 get def
+ /Encoding 0 def
+ /FontInfo 10 dict
+ dup /UnderlinePosition -100 put
+ dup /UnderlineThickness 50 put
+ def
+ /Private 20 dict
+ gsubrs length 0 ne { dup /GlobalSubrs gsubrs put } if
+ def
+ //topdictops Dict
+ currentdict end
+ } forall ] def
+
+ % Read other tables with queued offsets.
+
+ DEBUG { (offsets: ) print [ offsets { pop } forall ] == } if
+ { /f cff def
+ DEBUG { (pos=) print pos = } if
+ offsets pos 2 copy .knownget not { pop pop exit } if
+ 3 1 roll undef
+ DEBUG { (exec queued: ) print dup == } if
+ exec
+ } loop
+ offsets length 0 ne {
+ (Error: missing tables at ) print [ offsets { pop } forall ] ==
+ (Current position is ) print pos ==
+ flush stop
+ } if
+
+ % Process out-of-order tables.
+
+ DEBUG { queued length =only ( queued) = flush } if
+ queued { exec } forall
+
+ % Update Encoding and CharStrings.
+
+ fonts {
+ begin
+ currentdict /CIDFontType known { finishCIDFont } { finishFont } ifelse
+ end
+ } forall
+
+ % Wrap up.
+
+ resname mark 0 1 fonts length 1 sub {
+ DEBUG { dup =only ( ) print flush } if
+ dup names exch get
+ forceresname { pop resname } if
+ DEBUG { dup == flush } if
+ exch fonts exch get
+ dup /CIDFontType known {
+ % This is a CIDFont.
+ dup /CIDFontName 3 index put
+ 1 index exch /CIDFont defineresource
+ } {
+ % This is a font.
+ dup /FontName 3 index put
+ 1 index exch definefont
+ } ifelse
+ } for .dicttomark
+ end % temporary dict
+ end % FontSetInit ProcSet
+ /FontSet defineresource pop
+
+} bind def
+
+% ---------------- Resource category definition ---------------- %
+
+currentdict end readonly
+
+languagelevel exch 2 .setlanguagelevel
+
+/FontSet /Generic /Category findresource dup length dict .copydict
+/Category defineresource pop
+
+/FontSetInit exch /ProcSet defineresource pop
+
+.setlanguagelevel
diff --git a/Master/xemtex/gslib/gs_cidcm.ps b/Master/xemtex/gslib/gs_cidcm.ps
new file mode 100644
index 00000000000..b965e5cbe33
--- /dev/null
+++ b/Master/xemtex/gslib/gs_cidcm.ps
@@ -0,0 +1,511 @@
+% Copyright (C) 2000 artofcode LLC. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_cidcm.ps,v 1.5.2.2.2.1 2003/04/12 14:02:38 giles Exp $
+% Extending Font resource category with CIDFont-CMap fonts.
+
+languagelevel 2 .setlanguagelevel currentglobal true setglobal
+
+
+% In the comments below, 'CSI' is an abbreviation/acronym for CIDSystemInfo.
+% We pre-scan resource files to retrieve the CSI from them.
+% First we define a hidden procset .prs_dict containing
+% necessary variables and procedures.
+% Then we redefine the old /Font category using this procset.
+
+% We maintain internal caches for the CSI values retrieved from
+% resource files. This supposes that document doesn't uninstall
+% resource files. To disable caching, set enable_cache to false.
+
+% We suppose that names starting with '.prs' do not appear in resource files.
+% If this causes any problem, this prefix should be systematically changed
+% in this file. ('prs' is an abbreviation for 'prescan'.)
+
+25 dict begin
+
+% Define local variables :
+
+/.prs_dict currentdict def % self-reference (constant)
+/.prs_empty 0 dict readonly def
+/path_buffer 255 string def
+/name_buffer 255 string def
+/minus (-) 0 get def % character code constant for '-'
+/period (.) 0 get def % character code constant for '.'
+/CMap 10 dict def % CSI cache for CMaps
+/CIDFont 10 dict def % CSI cache for CIDFonts
+/enable_cache true def % set false to disable cache
+
+% The folloving variables are just placeholders for ones to be set
+% dynamically :
+/.prsFile 0 def % file to prescan
+/.prsResult 0 def % result of prescan
+/.prsDictCount 0 def % save the dictionary stack depth
+
+% Define a dummy CIDInit procset to use while pre-scanning :
+
+/DummyCIDInit 15 dict
+begin
+
+ /begincmap {} def
+ /usecmap {pop} bind def
+
+ {stop} bind
+ [ /begincodespacerange /endcodespacerange /beginnotdefchar /endnotdefchar
+ /beginnotdefrange /endnotdefrange /begincidchar /endcidchar /begincidrange
+ /endcidrange /endcmap /usefont /StartData
+ ] {
+ 1 index def
+ } bind forall
+ pop
+
+currentdict end def
+
+% Define a local 'findresource' for pre-scanning :
+% (it returns the dummy CIDInit instead of the regular CIDInit ProcSet)
+
+/findresource { % <InstName> <CatName> findresource <inst>
+ 2 copy /ProcSet eq exch % /InstName /CatName bool /InstName
+ /CIDInit eq and {
+ pop pop //DummyCIDInit
+ } {
+ //findresource exec
+ } ifelse
+} bind def
+
+% Define procedures for pre-scanning :
+
+/StopIfCSIDefined { % - StopIfCSIDefined -
+
+ % Check if the dictionary stack contains a dictionary containing /CIDSystemInfo.
+ % The search is limited to the top .prsDictCount dictionaries in the stack.
+ % If so, retrieve the CSI, and execute stop to terminate the pre-scanning of the file.
+ % Otherwise, do nothing, so the pre-scanning continues.
+
+ countdictstack //.prs_dict /.prsDictCount get sub dup {
+ currentdict /CIDSystemInfo .knownget {
+ //.prs_dict exch /.prsResult exch put
+ stop
+ } if
+ currentdict exch end
+ } repeat {
+ begin
+ } repeat
+} bind def
+
+/PrescanFile { % - PrescanFile -
+ { //.prs_dict /.prsFile get token {
+ dup type % token type
+ dup /nametype eq exch /operatortype eq or {
+ dup xcheck {
+ exec
+ //StopIfCSIDefined exec
+ } if
+ } if
+ } {
+ stop
+ } ifelse
+ } loop
+} bind odef
+
+/GetCIDSystemInfoFromFile { % <file> GetCIDSystemInfoFromFile <CSI>
+
+ % This procedure reads resource files with 'token',
+ % executing the tokens untill /CIDSystemInfo appears to be defined.
+ % Normally the resource file creates a new dictionary on
+ % dictionary stack and defines /CIDSystemInfo in it.
+ %
+ % Returns an empty dictionary if no CIDSystemInfo is found.
+
+ //.prs_dict begin
+ /.prsFile exch def
+ /.prsResult //.prs_empty def
+ /.prsDictCount countdictstack def
+ { //PrescanFile } stopped pop
+ //.prs_dict /.prsResult get
+ end
+} bind def
+
+/GetCIDSystemInfo { % <InstName> <CatName> GetCIDSystemInfo <CSI>
+
+ % Retrieve CSI, using caches.
+
+ 2 copy resourcestatus {
+ pop 2 lt {
+ findresource /CIDSystemInfo .knownget not {
+ //.prs_empty
+ } if
+ } {
+ dup //.prs_dict exch get % /InstName /CatName CSIs
+ dup 3 index known
+ //enable_cache and {
+ exch pop exch get % CSI
+ } {
+ 3 1 roll % CSIs /InstName /CatName
+ /Category findresource begin % CSIs /InstName
+ dup //path_buffer ResourceFileName % CSIs /InstName (path)
+ end
+ currentglobal exch true setglobal % CSIs /InstName g
+ mark exch % CSIs /InstName g [ (path)
+ { (r) file % CSIs /InstName g [ file
+ //GetCIDSystemInfoFromFile exec % CSIs /InstName g [ CSI
+ } stopped {
+ % Cannot find file from Resource directory
+ cleartomark
+ % Try to find file from CIDFontmap
+ % Stack: CSIs /InstName g
+ 1 index dup .CIDFontmapKnownget {
+ % Stack: CSIs /InstName g /InstName ValueInCIDFontmap
+ % We do look at CIDFontmap in global space.
+ % (When stopped, the space is set to local.)
+ true setglobal
+ 1 index 3 1 roll
+ .CIDFontmapRunHandler
+ /CIDFont findresource /CIDSystemInfo get
+ } {
+ pop //.prs_empty
+ } ifelse
+ } {
+ exch pop
+ } ifelse % CSIs /InstName g CSI
+ exch setglobal % CSIs /InstName CSI
+ dup 4 1 roll % CSI CSIs /InstName CSI
+ put % CSI
+ } ifelse
+ } ifelse
+ } {
+ pop pop //.prs_empty
+ } ifelse
+} bind def
+
+/IsCompatibleCSI { % <CSI-M> <CSI-F> IsCompatibleCSI <bool>
+
+ % The CSI in a CIDFont may be an array, a dict, or null.
+ % If it is an array, it must be of 1 element, which is a dict.
+ % In this case the dict is used for testing the compatibility.
+ % Two dicts are compatible iff they contain same /Ordering and /Registry.
+
+ exch % CSI-F CSI-M
+ { dup type /arraytype eq {
+ dup length 1 ne {
+ pop pop false exit
+ } if
+ 0 get
+ } if % CSI-F CSI-M
+ dup type /dicttype ne {
+ pop pop false exit
+ } if % CSI-F <<CSI-M>>
+ exch % <<CSI-M>> CSI-F
+ dup type /dicttype ne {
+ pop pop false exit
+ } if % <<CSI-M>> <<CSI-F>>
+ true % <<CSI-M>> <<CSI-F>> bEQ
+ [/Registry /Ordering] {
+ 2 index 1 index .knownget not {
+ 1234567
+ } if % <<CSI-M>> <<CSI-F>> bEQ /key vF
+ exch % <<CSI-M>> <<CSI-F>> bEQ vF /key
+ 4 index exch .knownget not {
+ 7654321
+ } if % <<CSI-M>> <<CSI-F>> bEQ vF vM
+ eq and % <<CSI-M>> <<CSI-F>> bEQ
+ } forall
+ exch pop exch pop % bEQ
+ exit
+ } loop
+} bind def
+
+/IsComposedOK { % <CIDFontName> <CMapName> IsComposedOK <bool>
+
+ % Check if the given CIDFont and CMap have compatible CSIs.
+
+ exch % /CMapName /CIDFontName
+ /CIDFont //GetCIDSystemInfo exec % /CMapName CSI-F
+ dup type /dicttype eq {
+ dup length 0 ne {
+ exch % CSI-F /CMapName
+ /CMap //GetCIDSystemInfo exec % CSI-F CSI-M
+ //IsCompatibleCSI exec % bool
+ } {
+ pop pop false
+ } ifelse
+ } {
+ pop pop false
+ } ifelse
+} bind def
+
+/IsComposedFont { % <FontName> IsComposedFont <CIDFontName> <CMapName> true
+ % <FontName> IsComposedFont false
+
+ % Check if the given font name may be decomposed into CIDFont.CMap, CIDFont-CMap
+ % or into CIDFont--CMap, such that CIDFont and CMap have compatible CSIs.
+ % FontName
+ dup type /stringtype ne {
+ //name_buffer cvs
+ } if % (FontName)
+ { dup length 2 sub -1 1 {
+ % (FontName) i
+ 2 copy get dup //minus eq exch //period eq or {
+ 2 copy 2 copy % (FontName) i (FontName) i (FontName) i
+ 2 copy get //minus eq {
+ 2 copy 1 sub get //minus eq {
+ 1 sub
+ } if
+ } if % (FontName) i (FontName) i (FontName) i0
+ 0 exch getinterval cvn % (FontName) i (FontName) i /CIDFontName
+ 3 1 roll % (FontName) i /CIDFontName (FontName) i
+ 1 add dup % (FontName) i /CIDFontName (FontName) i1 i1
+ 5 index length % (FontName) i /CIDFontName (FontName) i1 i1 l
+ exch sub getinterval cvn % (FontName) i /CIDFontName /CMapName
+ 2 copy //IsComposedOK exec { % (FontName) i /CIDFontName /CMapName
+ 4 2 roll pop pop % /CIDFontName /CMapName
+ stop
+ } if
+ pop pop pop
+ } {
+ pop
+ } ifelse % (FontName)
+ } for
+ pop
+ } stopped
+} bind def
+
+/ComposeName { % <CIDFont> <CMap> <scr> ComposeName <CIDFont-CMap>
+ dup dup 5 2 roll % (scr) (scr) /CIDFont /CMap (scr)
+ 3 2 roll exch cvs length dup % (scr) (scr) /CMap l0 l0
+ 4 -1 roll exch //minus put % (scr) /CMap l0
+ 1 add dup % (scr) /CMap l1 l1
+ 3 index dup length % (scr) /CMap l1 l1 (scr) L
+ 2 index sub % (scr) /CMap l1 l1 (scr) LT
+ 3 2 roll % (scr) /CMap l1 (scr) LT l1
+ exch getinterval % (scr) /CMap l1 (scrT)
+ 3 2 roll exch cvs length % (scr) l1 l2
+ add 0 exch getinterval % (CIDFont-CMap)
+} bind def
+
+
+% Define a few procedure templates to be modified dynamically :
+
+currentpacking false setpacking
+
+/BindAux { % <proc> BindAux <proc>
+ 0 exec
+} bind def
+
+/EnumerateFontNames { % - EnumerateFontNames ...
+
+ % This is a pattern for enumeration procedure to be built dynamically,
+ % using Bind with a temporary dictionary.
+ % The following names will be replaced with specific objects
+ % during Bind : en_local_dict, scr, proc, Fonts, Category .
+
+ end % Category
+ {
+ 0 1 2 {
+ en_local_dict exch /status exch put
+ Fonts {
+ en_local_dict /status get eq {
+ scr cvs % ... (Font)
+ proc exec %
+ } {
+ pop
+ } ifelse % ...
+ } forall
+ } for % ...
+ } stopped
+ Category begin
+ { stop } if
+} bind def
+
+setpacking
+
+/Bind { % <proc> Bind <proc>
+
+ % Make a copy of the given procedure, binding in the values of all names
+ % defined in currentdict.
+ % Caution : this code cannot handle procedures that were already
+ % bound recursively.
+
+ dup length array copy
+ dup length 1 sub -1 0 {
+ 2 copy get % {precopy} i {elem}
+ dup dup type /arraytype eq exch xcheck and {
+ % {precopy} i {elem}
+ //BindAux exec % {precopy} i {elem_copy}
+ 2 index 3 1 roll put % {precopy}
+ } {
+ dup dup type /nametype eq exch xcheck and {
+ % {precopy} i {elem}
+ currentdict exch .knownget {
+ 2 index 3 1 roll put % {precopy}
+ } {
+ pop
+ } ifelse
+ } {
+ pop pop
+ } ifelse
+ } ifelse % {precopy}
+ } for % {copy}
+ cvx
+} bind def
+
+//BindAux 0 //Bind put % bind the recursive call in 'Bind'.
+
+
+
+% Redefine the /Font category with CIDFont-CMap construction :
+
+% The following code supposes that the following names are not
+% defined in the old /Font category dictionary :
+% /IsComposedFont, /Bind, /IsComposedOK, /EnumerateFontNames .
+
+
+/Font /Category findresource dup length dict copy begin
+
+/FindResource { % <InstName> FindResource <inst>
+ dup //ResourceStatus exec {
+ pop pop //FindResource exec
+ } {
+ dup //IsComposedFont exec { % /FontName /CIDFontName /CMapName
+ exch [ exch ] composefont % inst
+ } {
+ //FindResource exec
+ } ifelse
+ } ifelse
+} bind def
+
+/ResourceStatus { % <InstName> ResourceStatus <nStatus> <nSize> true
+ % <InstName> ResourceStatus false
+ dup //ResourceStatus exec {
+ 3 2 roll pop true % nStatus nSize true
+ } {
+ //IsComposedFont exec { % /CIDFontName /CMapName
+ /CMap resourcestatus { % /CIDFontName nStatusM nSizeM
+ exch pop exch % nSizeM /CIDFontName
+ /CIDFont resourcestatus { % nSizeM nStatusF nSizeF
+ exch pop % nSizeF nSizeM
+ dup 0 ge {
+ exch dup 0 ge {
+ add
+ } {
+ exch pop
+ } ifelse
+ } {
+ pop
+ } ifelse % nSize
+ 2 exch true % nStatus nSize true
+ } {
+ pop pop pop false % work around buggy resource file
+ } ifelse
+ } {
+ pop pop pop false % work around buggy resource file
+ } ifelse
+ } {
+ false
+ } ifelse
+ } ifelse
+} bind def
+
+/ResourceForAll { % <template> <proc> <scratch> ResourceForAll -
+
+ % We suppose that the resourceforall procedure does not
+ % define or install new fonts, CMaps, and/or CIDFonts.
+
+ % First we create 3 temporary dictionaries to store temporary data
+ % about fonts, CMaps and CIDFonts.
+ % These dictionaries must be created dynamically, to allow for a possible
+ % recursive call to resourceforall from the resourceforall procedure.
+
+ currentglobal false setglobal
+ 20 dict 20 dict 20 dict
+ 4 -1 roll setglobal % (templ) proc (scr) <<CIDFont>> <<CMap>> <<Fonts>>
+
+ % Store resource names into local dictionaries :
+
+ 5 index [ 2 index {exch cvn dup put} aload pop ] cvx 5 index //ResourceForAll exec
+ (*) [ 3 index {exch cvn dup put} aload pop ] cvx 5 index /CMap resourceforall
+ (*) [ 4 index {exch cvn dup put} aload pop ] cvx 5 index /CIDFont resourceforall
+
+ %% Make the list of fonts in the form (/Name status) :
+
+ % (templ) proc (scr) <<CIDFont>> <<CMap>> <<Fonts>>
+ dup {
+ //ResourceStatus exec {
+ pop 2 index % (templ) proc (scr) <<CIDFont>> <<CMap>> <<Fonts>> /Name nStatus <<Font>>
+ 3 1 roll put % (templ) proc (scr) <<CIDFont>> <<CMap>> <<Fonts>>
+ } {
+ pop
+ } ifelse
+ } forall % (templ) proc (scr) <<CIDFont>> <<CMap>> <<Fonts>>
+
+ %% Add CIDFont-CMap to it (filtering duplicates) :
+
+ 3 2 roll {
+ 3 index {
+ 3 1 roll % (templ) proc (scr) <<CMap>> <<Font>> /CIDFont /CMap /CIDFont /CMap
+ 6 index //ComposeName exec % (templ) proc (scr) <<CMap>> <<Font>> /CIDFont /CMap (Font)
+ dup 8 index .stringmatch {
+ cvn % (templ) proc (scr) <<CMap>> <<Font>> /CIDFont /CMap /Font
+ dup 4 index exch known {
+ pop pop
+ } {
+ 2 index % (templ) proc (scr) <<CMap>> <<Font>> /CIDFont /CMap /Font /CIDFont
+ 4 2 roll % (templ) proc (scr) <<CMap>> <<Font>> /Font /CIDFont /CIDFont /CMap
+ //IsComposedOK exec {
+ exch 2 index exch 2 put % (templ) proc (scr) <<CMap>> <<Font>> /CIDFont
+ } {
+ exch pop
+ } ifelse
+ } ifelse
+ } {
+ pop pop
+ } ifelse
+ dup % (templ) proc (scr) <<CMap>> <<Font>> /CIDFont /CIDFont
+ } forall
+ pop pop % (templ) proc (scr) <<CMap>> <<Font>>
+ } forall % (templ) proc (scr) <<CMap>> <<Font>>
+ exch pop % (templ) proc (scr) <<Font>>
+
+ % Build the enumeration procedure :
+
+ % Since the resourceforall procedure may leave values on the operand stack,
+ % we cannot simply store the enumerator's local data on the stack.
+ % We also cannot use a static dictionary to store local variables,
+ % because of possible recursion in the resourceforall procedure.
+ % To work around this, we create a copy of the enumeration procedure and
+ % bind it dynamically with a temporary dictionary, which contains
+ % local variables for the currently executing instance of resourceforall.
+
+ currentdict
+ 6 dict begin % the temporary dictionary
+ /Category exch def
+ /Fonts exch def
+ /scr exch def
+ /proc exch def
+ /en_local_dict currentdict def
+ //EnumerateFontNames //Bind exec % (templ) Enumerator
+ /status 0 def % variable for the current status to enumerate - do not Bind with it !
+ end
+ exch pop % Enumerator
+
+ % Do the enumeration :
+
+ exec
+} bind def
+
+
+currentdict end /Font exch /Category defineresource pop
+end
+setglobal .setlanguagelevel
diff --git a/Master/xemtex/gslib/gs_cidfn.ps b/Master/xemtex/gslib/gs_cidfn.ps
new file mode 100644
index 00000000000..e4b0ed2dc16
--- /dev/null
+++ b/Master/xemtex/gslib/gs_cidfn.ps
@@ -0,0 +1,702 @@
+% Copyright (C) 1995, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_cidfn.ps,v 1.18.4.5.2.1 2003/04/12 14:02:38 giles Exp $
+% ProcSet for implementing CIDFont and CIDMap resources.
+% When this is run, systemdict is still writable.
+
+% ---------------- Defining CIDFont resources ---------------- %
+
+% Define a CIDFont resource. This is the defineresource implementation for
+% the CIDFont resource category.
+
+/.checkfonttype { % <cidfont> <fonttype> .checkfonttype <cidfont> <new?>
+ 1 index /FID known {
+ 1 index /FontType get ne {
+ /definefont cvx /invalidfont signalerror
+ } if false
+ } {
+ 1 index /FontType 3 -1 roll put true
+ } ifelse
+} bind def
+
+/.cidfonttypes where { pop } { /.cidfonttypes 6 dict def } ifelse
+.cidfonttypes
+
+30 dict begin
+
+% The key in .cidfonttypes is the CIDFontType value;
+% the value is a procedure that takes a font name and the CIDFont dictionary
+% and replaces the latter with a real font.
+
+% ------ CIDFontType 0 (FontType 9) ------ %
+
+% We add the following entries to the CIDFont dictionary, in addition to
+% the ones documented by Adobe:
+% SubrCache - dictionary for caching Subr arrays
+% For CIDFonts where we read the data from disk incrementally:
+% GlyphData is 0 (arbitrary)
+% DataSource - a ReusableStreamDecode filter for the data
+% We also add a FID entry, and possibly a Subrs entry, to each element of
+% FDArray.
+
+dup 0 {
+ 9 .checkfonttype {
+ /CIDInit /ProcSet findresource begin
+ .completefont9
+ end
+ } if
+ 1 index exch .buildfont9 exch pop
+} bind put
+
+% Add entries to a new CIDFontType 0 font per documentation (FontMatrix)
+% or for .buildfont9 (FDArray.Private.Subrs).
+/.completefont9 { % <cidfont0> .completefont9 <cidfont0>
+ currentglobal 3 1 roll dup gcheck setglobal
+ dup /FontMatrix known not {
+ dup /FontMatrix [0.001 0 0 0.001 0 0] put
+ dup /FDArray get {
+ /FontMatrix get [1000 0 0 1000 0 0] 1 index concatmatrix pop
+ } forall
+ } if
+ dup /FDArray get {
+ % Read the Subrs if necessary.
+ dup /Private get dup /Subrs known not {
+ dup /SubrCount .knownget {
+ % Stack: font Private SubrCount
+ currentglobal 3 1 roll 1 index gcheck setglobal
+ array 1 index /Subrs 3 -1 roll put
+ % Stack: font global Private
+ 2 index begin begin .loadsubrs end end
+ setglobal
+ } {
+ pop
+ } ifelse readonly pop
+ } {
+ pop pop
+ } ifelse
+ } forall
+ 3 -1 roll setglobal
+} bind def
+
+% Read some Subrs for the current Type 1 subfont.
+% The subfont's Private dict is currentdict; the CIDFont itself is the
+% next dictionary on the stack.
+/.readsubrs { % <Subrs> <start> .readsubrs <Subrs>
+ 1 SubrCount 1 sub {
+ dup SDBytes mul SubrMapOffset add
+ dup SDBytes .readint exch SDBytes add SDBytes .readint
+ 1 index sub string ReadString 2 index 3 1 roll put
+ } for
+} bind def
+
+% Ensure that all the Subrs for the current Type 1 subfont are loaded.
+% The subfont's Private dict is currentdict; the CIDFont itself is the
+% next dictionary on the stack.
+/.loadsubrs {
+ Subrs length 0 ne {
+ SubrCache SubrMapOffset .knownget {
+ % We've already loaded some Subrs at this offset.
+ % Make sure we've got as many as we need.
+ dup length SubrCount lt {
+ % We need to load more.
+ SubrCount array exch 1 index copy length .readsubrs
+ SubrCache SubrMapOffset 2 index put
+ } if
+ } {
+ % We haven't loaded any Subrs at this offset yet.
+ SubrCount array 0 .readsubrs
+ SubrCache SubrMapOffset 2 index put
+ } ifelse
+ Subrs copy pop
+ } if
+} bind def
+
+% ------ CIDFontType 1 (FontType 10) ------ %
+
+dup 1 {
+ 10 .checkfonttype pop
+ 1 index exch .buildfont10 exch pop
+} bind put
+
+% ------ CIDFontType 2 (FontType 11) ------ %
+
+dup 2 {
+ 11 .checkfonttype pop
+ 1 index exch .buildfont11 exch pop
+} bind put
+
+pop % .cidfonttypes
+
+% ---------------- Reading CIDFontType 0 files ---------------- %
+
+/StartData { % <(Binary)|(Hex)> <datalength> StartData -
+ % (currentdict is CID font dict)
+ % If we're loading a resource file and the data format is
+ % binary, we can just save a pointer to the data and load it
+ % incrementally.
+ mark {
+ % Previous versions of this code made provisions for
+ % reading hex-encoded data incrementally. Since hex data
+ % doesn't seem to be used in practice, we no longer bother.
+ 2 index (Binary) ne { stop } if
+ currentfile .currentresourcefile ne { stop } if
+ % Hack: the pdfwrite driver relies on finalization to write
+ % out fonts. However, the font may be finalized after the
+ % resource file, in which case the resource file will be
+ % closed. So if the current output device is pdfwrite,
+ % don't use incremental loading.
+ currentdevice .devicename /pdfwrite eq { stop } if
+ currentfile fileposition
+ } .internalstopped {
+ % File is not positionable, or uses hex data.
+ % Load the data now.
+ cleartomark exch (Hex) eq
+ { { currentfile exch readhexstring pop } }
+ { { currentfile exch readstring pop } }
+ ifelse exch
+ % Stack: readproc length
+ dup 65400 le {
+ % readstring with a 0-length string causes a rangecheck,
+ % but a data length of 0 is allowed.
+ string dup () ne { 1 index exec } if
+ } {
+ mark 3 1 roll {
+ % Stack: mark str ... readproc length
+ dup 0 eq { pop exit } if
+ dup 65400 .min dup string 3 index exec
+ % Stack: mark str ... readproc length newstrlen newstr
+ 4 1 roll sub
+ } loop
+ counttomark 1 add 1 roll ]
+ } ifelse
+ /GlyphData exch def
+ % If we were reading hex data, skip past the >.
+ 2 get { readhexstring } 0 get eq {
+ currentfile 0 (>) .subfiledecode dup flushfile closefile
+ } if
+ } {
+ % File is positionable and binary, just save a pointer.
+ % Stack: (Binary) length -mark- pos
+ /GlyphData 0 def
+ exch pop 3 -1 roll pop exch
+ % Stack: pos length
+ /DataSource currentfile 2 index () .subfiledecode true .reusablestream def
+ currentfile 3 1 roll add setfileposition
+ } ifelse
+ /SubrCache 10 dict def
+ CIDFontName currentdict /CIDFont defineresource pop
+ end % CID font dict
+ end % resource category dict
+} bind def
+
+% Some Adobe fonts include the line
+% /Setup /cid_Setup load def
+% This is apparently included only to prevent proper, conforming PostScript
+% interpreters (as opposed to ATM or a special Adobe font loader) from
+% loading the font, since Setup is not referenced anywhere else in the file.
+/cid_Setup { } def
+
+currentdict end
+
+% ---------------- Rendering ---------------- %
+
+% ------ Generic ------ %
+
+% Read a string at a given offset in a "file" (binary file or
+% GlyphData in RAM).
+/ReadString { % <pos> <string> ReadString <string>
+ GlyphData 0 eq {
+ % Read from the file.
+ DataSource 3 -1 roll setfileposition
+ DataSource exch readstring pop
+ } {
+ % Read from a string or an array of strings.
+ GlyphData .stringsreadstring
+ } ifelse
+} bind def
+/.stringsreadstring % <pos> <string> <strings> .stringsreadstring
+ % <vmstring>
+{ dup type /stringtype eq
+ { 3 1 roll length getinterval
+ }
+ { { % Stack: pos string glyphdata
+ dup 0 get length dup 4 index gt { exit } if
+ 4 -1 roll exch sub 3 1 roll
+ dup length 1 sub 1 exch getinterval
+ }
+ loop
+ % Stack: pos string glyphdata glyphdata[0]length
+ % We know no request can span more than 2 strings.
+ 3 index 3 index length add 1 index le
+ { % Request fits in a single string: just return a substring.
+ pop 0 get 3 1 roll length getinterval
+ }
+ { % Request spans 2 strings. Copy the first part.
+ 1 index 0 get 4 index 3 -1 roll 1 index sub getinterval
+ 2 index copy
+ % Copy the second part.
+ % Stack: pos str glyphdata str1
+ length exch 1 get 0 3 index length
+ 3 index sub getinterval 2 index 3 1 roll putinterval
+ exch pop
+ }
+ ifelse
+ }
+ ifelse
+} bind def
+
+% Interpret a byte string as a (big-endian) integer.
+/.cvbsi % <bytes> .cvbsi <int>
+{ 0 exch { exch 8 bitshift add } forall
+} bind def
+
+% Read an integer from binary data.
+/.readint % <pos> <nbytes> .readint <int>
+{ string ReadString .cvbsi
+} bind def
+
+% ------ CIDFontType 0 ------ %
+
+/.readglyphdata {
+ currentfont exch .type9mapcid
+ FDArray exch get exch
+} bind def
+
+% BuildGlyph procedure for CIDFontType 0.
+% The name %Type9BuildGlyph is known to the interpreter.
+/.cid0buildstring 10 string def
+(%Type9BuildGlyph) cvn { % <cidfont> <cid> %Type9BuildGlyph -
+ .currentglobal 3 1 roll 1 index gcheck .setglobal
+ 1 index begin
+ dup .readglyphdata dup null eq {
+ % Substitute CID 0. **** WRONG ****
+ pop pop 0 .readglyphdata
+ } if
+ % Stack: cidfont cid subfont charstring
+ dup null eq { pop pop pop pop } { %**** WRONG ****
+ 4 -1 roll pop
+ 3 1 roll exch dup 4 -1 roll 0 0 moveto
+ 3 index /FontType get 2 eq { .type2execchar } { .type1execchar } ifelse
+ } ifelse %**** WRONG ****
+ end
+ .setglobal
+} bind def
+
+% ------ CIDFontType 2 ------ %
+
+% BuildGlyph procedure for CIDFontType 2.
+% The name %Type11BuildGlyph is known to the interpreter.
+(%Type11BuildGlyph) cvn { % <cidfont> <cid> %Type11BuildGlyph -
+ % We must be prepared for out-of-range CIDs.
+ 2 copy { .type11mapcid } .internalstopped {
+ pop /CharStrings get /.notdef get
+ } if
+ % Stack: cidfont cid glyphindex
+ 1 index exch .type42execchar
+} bind def
+
+% ---------------- Define resources ---------------- %
+
+languagelevel exch 2 .setlanguagelevel
+
+% Define the CIDInit ProcSet resource.
+% The ProcSet dictionary is still on the stack.
+
+% We might have loaded CMap support already. However, Adobe's
+% protected font downloader defines a CIDInit ProcSet that will be
+% loaded from the filesystem later, so we must check specifically
+% for the ProcSet being defined in VM.
+/CIDInit /ProcSet 2 copy resourcestatus { pop 0 eq } { false } ifelse {
+ pop pop findresource dup length 4 index length add dict .copydict
+ 4 -1 roll exch .copydict
+} {
+ 3 -1 roll
+} ifelse exch defineresource pop
+
+% Define the CIDFont resource category.
+% We break out .buildcidfont because it appears that at least for
+% Type 32 (CIDFontType 4) fonts, the font can be registered in the Font
+% category with only a CIDFontType and no FontType.
+/.buildcidfont { % <name> <fontdict> .buildcidfont
+ % <name> <cidfont>
+ dup /CIDFontType get //.cidfonttypes exch get exec
+} odef
+
+/.loadcidfontwithoutpop {
+ dup 4 string .peekstring pop dup (ttcf) eq exch (\000\001\000\000) eq or {
+ .loadcjkvttcidfont
+ } {
+ /CIDFont /Category findresource /.Instances get
+ dup length 2 div cvi dict .copydict exch
+ .loadfont
+ % Stack: <<original-.Instances>>
+ /CIDFont /Category findresource /.Instances get {% forall
+ % <<original-.Instances>> key value
+ 2 index 2 index known {
+ pop pop
+ } {
+ pop exch pop /CIDFont findresource exit
+ } ifelse
+ } forall
+ dup /CIDFontName known not {
+ {Internal Error in .loadcidfontwithoutpop} stop
+ } if
+ } ifelse
+} bind def
+
+/.loadcidfont {
+ .loadcidfontwithoutpop pop
+} bind def
+
+% Define the name of the CID font map file.
+/defaultcidfontmap (CIDFnmap) def
+userdict /CIDFontmap 10 dict put
+
+% <dict> <file> .readCIDFontmap <dict>
+% Code from gs_fonts.ps::.readFontmap
+/.readCIDFontmap {
+ { dup token not { closefile exit } if
+ % This is a hack to get around the absurd habit of MS-DOS editors
+ % of adding an EOF character at the end of the file.
+ dup (\032) eq { pop closefile exit } if
+ 1 index token not
+ { (CIDFontmap entry for ) print dup =only
+ ( has no associated file or alias name! Giving up.) = flush
+ {.readCIDFontmap} 0 get 1 .quit
+ } if
+ dup type dup /stringtype eq exch /nametype eq or not
+ { (CIDFontmap entry for ) print 1 index =only
+ ( has an invalid file or alias name! Giving up.) = flush
+ {.readCIDFontmap} 0 get 1 .quit
+ } if
+ % stack: dict file cidfontname filename|aliasname
+ 1 index type /stringtype eq
+ 1 index type /nametype eq and 1 index xcheck and
+ 1 index /run eq 2 index /.runlibfile eq or and {
+ % This is an inclusion entry.
+ pop findlibfile { exch pop } { file } ifelse
+ 2 index exch .readCIDFontmap pop
+ } {
+ % This is a real entry.
+ % stack: dict file cidfontname filename|aliasname
+
+ % Before staring a game, we need a hack.
+ % Some CJK pdf file contains a cidfontname that cannot
+ % be represented as a nametype literal. Instead, the
+ % cidfontname is represented as a string literal.
+ % If a cidfontname is represented as a stringtype object,
+ % it must be converted to a nametype object.
+ % We handle such a case here.
+ exch dup type /stringtype eq {cvn} if exch
+
+ % stack: dict file cidfontname filename|aliasname
+ % Read and pop tokens until a semicolon.
+ { 2 index token not
+ { (CIDFontmap entry for ) print 1 index =only
+ ( ends prematurely! Giving up.) = flush
+ {.readCIDFontmap} 0 get 1 .quit
+ } if
+ dup /; eq { pop 3 index 3 1 roll .growput exit } if
+ % Format:
+ % /CIDFontname (file) ttc-index ;
+ % /CIDFontname (file) /Code->CID-dict ;
+ % /CIDFontname (file) ttc-index /Code->CID-dict ;
+ %
+ % e.g.
+ % /HG-MinchoL (hgminchol.ttc) 1 /Adobe-Japan1-Unicode ;
+ % /HG-PMinchoL (hgminchol.ttc) 2 /Adobe-Japan1-Unicode ;
+ % /HG-MinchoL-J2 (hgminchol.ttc) 1 /Adobe-Japan2-Unicode ;
+ % /HG-PGothicB (hggothicb.ttc) 2 ;
+ % /HG-GothicB-J2 (hggothicb.ttc) /Adobe-Japan2-Unicode ;
+ %
+ % CID Fontmap entry is stored into CIDFontmap dict as an array.
+ % Array format:
+ % [filename ttc-index]
+ % [filename /Code->CID-dict]
+ % [filename ttc-index /Code->CID-dict]
+ %
+ % Type:
+ % filename: string
+ % ttc-index: integer
+ % /Code->CID-dict: name
+ %
+ % stack: dict file cidfontname filename something
+ 1 index type /nametype eq {
+ (CIDFontmap entry for ) print 2 index =only
+ (defines an alias! Giving up.) = flush
+ {.readCIDFontmap} 0 get 1 .quit
+ } if
+ % stack: dict file cidfontname filename something
+ exch [ exch 3 -1 roll
+ % stack: dict file cidfontname [ filename something
+ dup type /integertype eq {
+ % stack: dict file cidfontname [ filename int
+ % Read next token
+ 4 index token not
+ { (CIDFontmap entry for ) print 3 index =only
+ ( ends prematurely! Giving up.) = flush
+ {.readCIDFontmap} 0 get 1 .quit
+ } if
+ } if
+ % stack: dict file cidfontname [ filename int something
+ % or dict file cidfontname [ filename something
+ dup /; eq not 1 index type /nametype eq and {
+ % stack: dict file cidfontname [ filename /Code->CID
+ % or dict file cidfontname [ filename int /Code->CID
+ % Read next token
+ counttomark 2 eq {4} {5} ifelse index token not
+ { (CIDFontmap entry for ) print
+ counttomark 2 eq {3} {4} ifelse index =only
+ ( ends prematurely! Giving up.) = flush
+ {.readCIDFontmap} 0 get 1 .quit
+ } if
+ } if
+ % stack: dict file cidfontname [ filename int /Code->CID something
+ % or dict file cidfontname [ filename /Code->CID something
+ dup /; eq {
+ pop ]
+ 3 index 3 1 roll .growput exit
+ } if
+ pop
+ } loop
+ } ifelse
+ } loop
+} bind def
+
+% <file> .loadCIDFontmap -
+/.loadCIDFontmap {
+ userdict /CIDFontmap get exch
+ .readCIDFontmap pop
+} bind def
+
+% Code from .loadinitialfonts
+/.loadinitialcidfonts
+ { NOCIDFONTMAP not
+ { /CIDFONTMAP where
+ { pop [ CIDFONTMAP .pathlist ]
+ {
+ dup VMDEBUG findlibfile
+ { exch pop .loadCIDFontmap }
+ { /undefinedfilename signalerror }
+ ifelse
+ }
+ }
+ { LIBPATH
+ {
+ defaultcidfontmap 1 index .filenamedirseparator
+ exch concatstrings concatstrings dup VMDEBUG
+ (r) { file } .internalstopped
+ { pop pop } { .loadCIDFontmap } ifelse
+ }
+ }
+ ifelse forall
+ }
+ if
+ %%% Do nothing
+ } bind def
+
+.loadinitialcidfonts
+
+/CIDFontmapHandler <<
+ /nametype {
+ /CIDFont findresource
+ /CIDFont defineresource pop
+ } bind
+ /stringtype {
+ findlibfile {
+ exch pop
+ % Define CIDFont with a name defined in the font file
+ .loadcidfontwithoutpop
+ % Define CIDFont with a name define in CIDFontmap
+ dup length 0 ne {
+ dup /CIDFontName get 2 index eq {
+ % Avoid duplicated defineresource for the same CIDFont
+ pop pop
+ } {
+ % Give a name different from the name defined in the file
+ /CIDFont defineresource pop
+ } ifelse
+ } {
+ pop pop
+ } ifelse
+ } {
+ /undefinedresource signalerror
+ } ifelse
+ } bind
+ /arraytype {
+ % Replace filename in the array with file
+ dup 0 get
+ findlibfile {
+ 3 1 roll pop
+ copyarray dup 3 1 roll 0
+ 3 -1 roll put
+ % Expand array
+ aload pop .loadcjkvttcidfont
+ /CIDFont defineresource pop
+ } {
+ /undefinedresource signalerror
+ } ifelse
+ } bind
+>> def
+
+%%% CIDFontmap Public Interface
+% /CIDFontName .CIDFontmapKnown true|false
+/.CIDFontmapKnown {
+ userdict /CIDFontmap get exch known
+} bind def
+
+% /CIDFontName .CIDFontmapKnownget value true
+% /CIDFontName .CIDFontmapKnownget false
+/.CIDFontmapKnownget {
+ userdict /CIDFontmap get exch .knownget
+} bind def
+
+% /CIDFontName value .CIDFontmapRunHandler -
+/.CIDFontmapRunHandler {
+ dup CIDFontmapHandler exch type get .execasresource
+} bind def
+
+% proc .CIDFontmapForAll -
+/.CIDFontmapForAll {
+ CIDFontmap exch forall
+} bind def
+
+% proc .CIDFontmapForAllKey -
+/.CIDFontmapForAllKey {
+ [ /pop cvx 3 -1 roll /exec cvx ] cvx .CIDFontmapForAll
+} bind def
+
+/CIDFont /Generic /Category findresource dup length dict .copydict
+dup /InstanceType /dicttype put
+dup /DefineResource {
+ .buildcidfont
+ /Generic /Category findresource /DefineResource get exec
+} put
+/.originalresourceforall 1 index /ResourceForAll get def
+dup /ResourceForAll {
+ currentglobal false setglobal
+ % (template) (proc) (scratch) g
+ [ % (template) (proc) (scratch) g [
+ %
+ % 1. Gather CIDFont name in /Resource/CIDFont
+ %
+ 4 index % (template) (proc) (scratch) g [ (template)
+ {cvn} % (template) (proc) (scratch) g [ (template) {cvn}
+ 4 index % (template) (proc) (scratch) g [ (template) {cvn} (scratch)
+ .originalresourceforall
+ % (template) (proc) (scratch) g [ ...
+ %
+ % 2. Gather CIDFont name in CIDFontmap
+ %
+ {
+ dup length string cvs
+ dup % (template) (proc) (scratch) g [ ... (Key) (Key)
+ counttomark 4 add index
+ % (template) (proc) (scratch) g [ ... (Key) (Key) (template)
+ .stringmatch {
+ cvn
+ % (template) (proc) (scratch) g [ ... /Key
+ % 3. Remove duplicated /Key
+ counttomark -1 1 {
+ index 1 index eq {
+ pop exit % Duplicated
+ } if
+ } for
+ } {
+ pop
+ } ifelse
+ } .CIDFontmapForAllKey
+ ]
+ exch setglobal
+ %
+ % 4. Build extended procedure
+ %
+ % (template) (proc) (scratch) [CIDFontmapKeys]
+ 4 -1 roll pop
+ % (proc) (scratch) [CIDFontmapKeys]
+ 3 1 roll
+ % [CIDFontmapKeys] (proc) (scratch)
+ [ exch {cvs} aload pop
+ % [CIDFontmapKeys] (proc) [ (scratch) -cvs-
+ 4 -1 roll aload pop ] cvx
+ % [CIDFontmapKeys] proc++
+ %
+ % 5. Exec
+ %
+ forall
+} put
+
+% CIDFonts may be defined in CFF OpenType files.
+% Check for this here.
+/.loadcidfontresource {
+ dup .ResourceFile {
+ {.loadcidfont} .execasresource
+ } {
+ pop dup
+ .CIDFontmapKnownget {
+ .CIDFontmapRunHandler
+ } {
+ dup /undefinedresource signalerror
+ } ifelse
+ } ifelse
+} bind def
+dup /.LoadResource {
+ currentglobal {
+ .loadcidfontresource
+ } {
+ true setglobal {.loadcidfontresource} stopped false setglobal {stop} if
+ } ifelse
+} bind put
+dup /.ResourceFileStatus {
+ dup .CIDFontmapKnown {
+ pop 2 -1 true
+ } {
+ .ResourceFile { closefile 2 -1 true } { pop false } ifelse
+ } ifelse
+} bind put
+
+/Category defineresource pop
+
+% Add the new FontType resources.
+
+9 1 11 { dup /FontType defineresource pop } for
+
+% Add the new FMapType resource.
+
+9 dup /FMapType defineresource pop
+
+% Define the CIDMap resource category.
+% These aren't documented, but it's clear what they are for:
+% to give names to CIDMaps for CIDFontType 2 fonts.
+
+/CIDMap /Generic /Category findresource dup length dict .copydict
+dup /.CheckResource {
+ % Allow a string, an array of strings, or (as of Adobe release 3011)
+ % a dictionary.
+ dup type dup dup /stringtype eq exch /dicttype eq or {
+ pop true
+ } {
+ dup /arraytype eq exch /packedarraytype eq or {
+ true exch { type /stringtype eq and } forall
+ } {
+ false
+ } ifelse
+ } ifelse
+} bind put
+/Category defineresource pop
+
+.setlanguagelevel
diff --git a/Master/xemtex/gslib/gs_cmap.ps b/Master/xemtex/gslib/gs_cmap.ps
new file mode 100644
index 00000000000..5830a6a7c4f
--- /dev/null
+++ b/Master/xemtex/gslib/gs_cmap.ps
@@ -0,0 +1,524 @@
+% Copyright (C) 1995, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_cmap.ps,v 1.11.2.4.2.1 2003/04/12 14:02:38 giles Exp $
+% ProcSet for implementing CMap resources.
+% When this is run, systemdict is still writable.
+
+% NOTE: Rearranged fonts are not implemented yet.
+
+[
+ /CMERGE_DEBUG
+ /USE_CIDCHAR_AS_RANGE
+] {dup where {pop pop} { currentdict exch false def pop } ifelse} forall
+
+% ---------------- Public operators ---------------- %
+
+/.rewriteTempMapsNotDef {
+ %
+ % Before building .CodeMapData from .TempMaps,
+ % we need to replace dst type codes in the notdef map with the value 3,
+ % which corresponds to CODE_VALUE_NOTDEF, see gxfcmap.h .
+ %
+ DEBUG { (rewriting TempMapsNotDef\n) print flush } if
+ .TempMaps 2 get
+ dup length 0 gt {
+ 0 get
+ DEBUG { (...original...\n) print flush } if
+ 1 5 2 index length 1 sub {
+ { 1 index exch get 2 3 put } stopped
+ { DEBUG { (cannot rewrite\n) print flush } if }
+ { DEBUG { (rewrite\n) print flush } if } ifelse
+ } for
+ } if
+ pop
+ DEBUG { (...FINISHED...\n) print } if
+} bind def
+
+% composefont doesn't appear in CMap files -- it's documented in
+% the "PostScript Language Reference Manual Supplement".
+/composefont { % <name> <cmap|cmapname> <fonts> composefont <font>
+ 10 dict begin
+ /CMap 2 index dup type /dicttype ne { /CMap findresource } if def
+ /FDepVector 1 index cvlit def % temporarily
+ /Encoding [ 0 1 FDepVector length 1 sub { } for ] def
+ /FDepVector [ 0 1 FDepVector length 1 sub {
+ % Stack: name cmap[name] fonts /FDepVector [ fonts... i
+ FDepVector 1 index get
+ dup type /dicttype ne {
+ dup /CIDFont resourcestatus {
+ pop pop /CIDFont
+ } {
+ /Font
+ } ifelse findresource
+ } if
+ exch CMap /FontMatrices get dup length 2 index gt {
+ exch get dup null eq { pop } { makefont } ifelse
+ } {
+ pop pop
+ } ifelse
+ } for ] readonly def
+ /FMapType 9 def
+ /FontMatrix matrix def
+ /FontName 3 index def
+ CMap /WMode .knownget { /WMode exch def } if
+ /FontType 0 def
+ pop pop currentdict end /Font defineresource
+} bind odef
+
+% ---------------- CMap operators ---------------- %
+
+40 dict begin
+
+% Our internal .CodeMapData structure closely mirrors the structures
+% defined in gxfcmap.h (q.v.). () indicate a string, [] indicate an array,
+% ? indicates a Boolean, # indicates an integer, {} for grouping.
+% [[(first) (last) ...] % code space ranges
+% [(prefix) (key_size,?is_range,value_type,value_size) (keys...)
+% {(values...) | [value ...]} #font_index % code mappings
+% ...]
+% <<same>> % notdef mappings
+% ]
+% FontMatrices is the array of matrices defined by begin/endusematrix.
+% All of the arrays and strings are read-only after they have been built.
+%
+% Note that the code in zfcmap.c that constructs the C structures from
+% the PostScript structures has intimate knowledge of the above format.
+
+% ****** NOTE: The code currently only handles "well-behaved" CMaps:
+% - CID values only (no bfchars), 16-bit
+% - Entries (both code space and map) must be sorted
+% - Only the last byte must vary in each map range, except for
+% the identity mapping
+
+% ------ Font-level operators ------ %
+
+/begincmap { % - begincmap -
+ /.CodeMapData [[] [] []] def
+ /FontMatrices [] def
+ /.FontIndex 0 def
+ /.TempMaps [20 dict 50 dict 50 dict] def
+ /CodeMap null def % for .buildcmap
+} bind def
+/endcmap { % - endcmap -
+ .rewriteTempMapsNotDef
+ DEBUG {
+ (*** defined charmap ***\n) print
+ .TempMaps 1 get {exch == (\t) print ==} forall
+ (*** undefined charmap ***\n) print
+ .TempMaps 2 get {exch == (\t) print ==} forall
+ } if
+ 10 dict begin 0 1 2 {
+ /i exch def
+ % Append data from .TempMaps to .CodeMapData.
+ /t .TempMaps i get def
+ .CodeMapData i get length t { exch pop length add } forall
+ DEBUG { (requested array size ) print dup == } if
+ array /a exch def
+ a 0 .CodeMapData i get .putmore
+ 0 1 t length 1 sub {
+ t exch get .putmore
+ } for pop pop
+ .CodeMapData i a put
+ } for end
+ currentdict /.TempMaps undef
+ /.CodeMapData .CodeMapData .endmap def
+ /FontMatrices FontMatrices .endmap def
+} bind def
+
+/.putmore { % <array> <i> <array2> .putmore <array> <i+len(array2)>
+ 3 copy putinterval length add
+} bind def
+
+/.endmap { % <map> .endmap <map>
+ dup type /arraytype eq {
+ % This might be a shared read-only array inherited via usecmap.
+ % Don't try to update its elements if this is the case.
+ dup wcheck {
+ 0 1 2 index length 1 sub {
+ 2 copy 2 copy get .endmap put pop
+ } for readonly
+ } if
+ } {
+ dup type /stringtype eq { readonly } if
+ } ifelse
+} bind def
+
+/.appendmap { % -mark- <elt> ... <array#> .appendmap -
+ .TempMaps exch get counttomark 1 add 1 roll
+ ] 1 index length exch put
+} bind def
+
+/begincodespacerange { % <count> begincodespacerange -
+ pop mark
+} bind def
+/endcodespacerange { % <code_lo> <code_hi> ... endcodespacerange -
+ 0 .appendmap
+} bind def
+
+/usecmap { % <CMap_name> usecmap -
+ /CMap findresource dup
+ % Copy the top level of .CodeMapData
+ /.CodeMapData exch /.CodeMapData get copyarray def
+ /FontMatrices exch /FontMatrices get copyarray def
+} bind def
+
+/usefont { % <fontID> usefont -
+ /.FontIndex exch def
+} bind def
+
+/beginusematrix { % <fontID> beginusematrix -
+ FontMatrices wcheck not FontMatrices length 2 index le or {
+ FontMatrices length 1 index 1 add .max array
+ dup 0 FontMatrices putinterval
+ /FontMatrices exch def
+ } if
+} bind def
+/endusematrix { % <matrix> endusematrix -
+ FontMatrices 3 1 roll put
+} bind def
+
+% ------ Rearranged font operators ------ %
+
+/beginrearrangedfont { % <font_name> <font*> beginrearrangedfont -
+ 10 dict begin
+ /.FontNames exch def
+ /.FontName exch def
+ begincmap
+} bind def
+/endrearrangedfont { % - endrearrangedfont -
+ (REARRANGED FONTS NOT IMPLEMENTED YET.) = flush
+ FontName .FontNames 0 get findfont end definefont pop
+} bind def
+
+% ------ Character name/code selector operators ------ %
+
+/beginbfchar { % <count> beginbfchar -
+ pop mark
+} bind def
+/endbfchar { % <code> <to_code|charname> ... endbfchar
+ counttomark 2 idiv {
+ counttomark -2 roll % process in correct order
+ .addbfchar
+ } repeat 1 .appendmap
+} bind def
+
+/beginbfrange { % <count> beginbfrange -
+ pop mark
+} bind def
+/endbfrange { % <code_lo> <code_hi> <to_code|(charname*)> ...
+ % endbfrange -
+ counttomark 3 idiv {
+ counttomark -3 roll % process in correct order
+ dup type dup /arraytype eq exch /packedarraytype eq or {
+ % Array value, split up.
+ exch pop {
+ % Stack: code to_code|charname
+ 1 index exch .addbfchar
+ % Increment the code. As noted above, we require
+ % that only the last byte vary, but we still must
+ % mask it after incrementing, in case the last
+ % value was 0xff.
+ % Stack: code prefix params key value fontindex
+ 6 -1 roll dup length string copy
+ dup dup length 1 sub 2 copy get 1 add 255 and put
+ } forall pop
+ } {
+ % Single value, handle directly.
+ .addbfrange
+ } ifelse
+ } repeat 1 .appendmap
+} bind def
+
+/.addbfchar { % <code> <to_code|charname> .addbfchar
+ % <prefix> <params> <key> <value> <font_index>
+ 1 index exch .addbfrange
+} bind def
+/.addbfrange { % <code_lo> <code_hi> <to_code|charname>
+ % .addbfrange <<same as .addbfchar>>
+ 4 string dup 3
+ 3 index type /nametype eq {
+ 2 index 2 1 put % dst = CODE_VALUE_GLYPH, see gxfcmap.h .
+ 4 -1 roll 1 array astore 4 1 roll 4
+ } {
+ 2 index 2 2 put % dst = CODE_VALUE_CHARS, see gxfcmap.h .
+ 3 index length
+ } ifelse put
+ % Stack: code_lo code_hi value params
+ 3 index 3 index eq {
+ % Single value.
+ 3 -1 roll pop exch () exch
+ } {
+ % Range.
+ dup 0 1 put dup 1 1 put
+ 4 2 roll
+ dup dup length 1 sub 0 exch getinterval 5 1 roll % prefix
+ % Stack: prefix value params code_lo code_hi
+ 2 { exch dup length 1 sub 1 getinterval } repeat concatstrings
+ 3 -1 roll
+ } ifelse
+ .FontIndex
+} bind def
+
+% ------ CID selector operators ------ %
+
+/begincidchar { % <count> begincidchar -
+ pop mark
+} bind def
+/endcidchar { % <code> <cid> ... endcidchar -
+ 1 .endmapchars
+} bind def
+
+/begincidrange { % <count> begincidrange -
+ pop mark
+} bind def
+/endcidrange { % <code_lo> <code_hi> <cid_base> ... endcidrange -
+ 1 .endmapranges
+} bind def
+
+/.endmapchars { % -mark- <code> <cid> ... <map#> .endmapchars -
+ counttomark 1 add 1 roll
+ counttomark 2 idiv {
+ counttomark -2 roll % process in correct order
+ exch % <cid> <code>
+ % Construct prefix, params, key, value, font_index
+ dup length 1 eq { % 1-byte
+ <00 00 00 02> () % <prefix> <param> <null_key>
+ } { % N-byte
+ dup 0 1 getinterval exch % make 1-byte prefix
+ 4 string dup 0
+ USE_CIDCHAR_AS_RANGE {
+ <00 01 00 02> % skelton for param
+ } {
+ <00 00 00 02> % skelton for param
+ } ifelse
+ putinterval
+ exch % <prefix> <param> <code>
+ dup length % <prefix> <param> <code> N
+ 1 sub % <prefix> <param> <code> N-1
+ dup % <prefix> <param> <code> N-1 N-1
+ 3 index % <prefix> <param> <code> N-1 N-1 <param>
+ exch % <prefix> <param> <code> N-1 <param> N-1
+ 0 exch % <prefix> <param> <code> N-1 <param> 0 N-1
+ put % <prefix> <param'> <code> N-1
+ 1 exch % <prefix> <param'> <code> 1 N-1
+ getinterval % <prefix> <param'> <key>
+
+ USE_CIDCHAR_AS_RANGE {
+ dup length 2 mul string % <key> <dkey>
+ dup % <key> <dkey> <dkey>
+ 2 index % <key> <dkey> <dkey> <key>
+ 0 exch putinterval % <key> <dkey'>
+ dup % <key> <dkey'> <dkey'>
+ 3 -1 roll % <dkey'> <dkey'> <key>
+ dup length % <dkey'> <dkey'> <key> N-1
+ exch putinterval % <dkey''>
+ } if
+
+ } ifelse
+
+ 4 -1 roll % <prefix> <param'> <key> <cid>
+ .endmapvalue % <prefix> <param'> <key> <hex_cid> <font_idx>
+ % prefix params keys value fontindex
+ counttomark 5 gt { % 2 (or more) ranges (1 range = 5 item)
+ 4 index 10 index eq % compare prefix
+ 4 index 10 index eq and % compare params
+ 1 index 7 index eq and % compare fontindex
+ {
+ DEBUG { (merge! char\n) print } if
+ pop 4 2 roll pop pop
+ % prefix params keys value fontindex keys2 value2
+ 5 -1 roll 3 -1 roll concatstrings
+ % prefix params value fontindex value2 keys'
+ 4 -1 roll 3 -1 roll concatstrings
+ % prefix params fontindex keys' values'
+ 3 -1 roll
+ } if
+ } if % end of 2 (or more) ranges
+ CMERGE_DEBUG {
+ ( prefix:) print 4 index =only
+ ( param:) print 3 index =only
+ ( key:) print 2 index =only
+ ( hex_cid:) print 1 index =only
+ ( font_idx:) print 0 index == flush
+ } if
+ } repeat
+ counttomark 2 add -1 roll .appendmap
+} bind def
+
+/.endmapranges { % -mark- <code_lo> <code_hi> <cid_base> ... <map#>
+ % .endmapranges -
+ counttomark 1 add 1 roll
+ counttomark 3 idiv {
+ counttomark -3 roll % process in correct order
+ % Construct prefix, params, key_lo, key_hi, value, font_index
+ 3 1 roll % <cid_base> <code_lo> <code_hi>
+ % prefix key
+ % 1-byte code: () .
+ % 1-byte range: () .
+ % N-byte code: . (*)
+ % N-byte range: (*) (*)
+ dup 2 index eq { % <code_lo> == <code_hi>
+ % 0: prefix_len for 1-byte code
+ % 1: prefix_len for N-byte code
+ dup length 1 eq { 0 } { 1 } ifelse
+ } { % <code_lo> != <code_hi>
+ % calculate prefix_len for *-byte range
+ dup length 1 sub % <cid_base> <code_lo> <code_hi> <code_len-1>
+ 0 % initial value for N
+ { % <cid_base> <code_lo> <code_hi> (code_len-1) N
+ dup 2 index ge { exit } if % if (N >= len - 1) exit
+ 3 index 1 index get % N-th byte of code_lo
+ 3 index 2 index get % N-th byte of code_hi
+ eq { 1 add } { exit } ifelse
+ } loop
+ exch pop % discard <code_len-1>
+ } ifelse
+ % cid_base code_lo code_hi prefix_len
+
+ % Althogh Adobe CPSI with native CID/CMap support accept
+ % multi-dimensional range specification in notdef & cidrange
+ % (and CID is calculated as relative position in multi-dimensional
+ % range), but older CPSI & ATM cannot handle it.
+ %
+ % GS accepts such specification, but it's recommended to keep
+ % from using this feature for notdef & cidrange.
+ % Following is a disabler of this feature.
+ % -------------------------------------------------------------
+ % counttomark 1 add index % get map#
+ % 0 ne { % if not codespacerange
+ % 1 index length % get code length
+ % 1 index % get prefix length
+ % sub % calculate key length
+ % 1 gt { % if (key_len > 1),
+ % (.endmapranges error) = flush
+ % (multi-dimensional range specification is used out of codespacerange)
+ % = flush
+ % (/) =only
+ % CMapName CMapName length string cvs =only
+ % (: <) =only
+ % 2 index (%stdout) (w) file exch writehexstring
+ % (> <) =only
+ % 1 index (%stdout) (w) file exch writehexstring
+ % (>\n) =only flush
+ % quit
+ % } if
+ % } if
+ % -------------------------------------------------------------
+
+ 1 index exch 0 exch getinterval
+ % cid_base code_lo code_hi prefix
+ dup length 3 index length exch sub
+ % cid_base code_lo code_hi prefix range_len
+ dup 255 gt {
+ (too long coderange specification for current GS\n) print
+ signalerror
+ } if
+ <00 01 00 02> 4 string copy % create initialized param
+ dup 0 4 -1 roll put % put range_len into param
+
+ % get key_hi
+ 3 -1 roll dup length 3 index length dup 3 1 roll sub getinterval
+
+ % get key_lo
+ 4 -1 roll dup length 4 index length dup 3 1 roll sub getinterval
+
+ % make "keys" (concatenated key_lo + key_hi)
+ exch concatstrings
+
+ %
+ 4 -1 roll
+ .endmapvalue
+
+ % See if we can merge with the previous value.
+ % The prefix, params, and font index must match.
+ % prefix params keys value fontindex
+ counttomark 5 gt { % 2 (or more) ranges (1 range = 5 item)
+ 4 index 10 index eq % compare prefix
+ 4 index 10 index eq and % compare params
+ 1 index 7 index eq and % compare fontindex
+ {
+ DEBUG { (merge!\n) print } if
+ pop 4 2 roll pop pop
+ % prefix params keys value fontindex keys2 value2
+ 5 -1 roll 3 -1 roll concatstrings
+ % prefix params value fontindex value2 keys'
+ 4 -1 roll 3 -1 roll concatstrings
+ % prefix params fontindex keys' values'
+ 3 -1 roll
+ } if
+ } if % end of 2 (or more) ranges
+ } repeat
+ counttomark 2 add -1 roll .appendmap
+} bind def
+
+/.endmapvalue { % <cid> .endmapvalue (hi,lo) .FontIndex
+ 2 string dup 0 3 index -8 bitshift put % value
+ dup 1 4 -1 roll 255 and put
+ .FontIndex % font_index
+} bind def
+
+% ------ notdef operators ------ %
+
+/beginnotdefchar { % <count> beginnotdefchar -
+ pop mark
+} bind def
+/endnotdefchar { % <code> <cid> ... endnotdefchar -
+ 2 .endmapchars
+} bind def
+
+/beginnotdefrange { % <count> beginnotdefrange -
+ pop mark
+} bind def
+/endnotdefrange { % <code_lo> <code_hi> <cid> ... endnotdefrange -
+ 2 .endmapranges
+} bind def
+
+% ---------------- Resource category definition ---------------- %
+
+currentdict end
+
+languagelevel exch 2 .setlanguagelevel
+
+/CMap /Generic /Category findresource dup length dict .copydict
+dup /InstanceType /dicttype put
+dup /DefineResource {
+ % The AdobePS5 Windows driver emits code that attempts to
+ % create CMaps without the required CMapName entry.
+ % Work around this here.
+ dup /CMapName known not {
+ dup wcheck not {
+ .currentglobal exch dup wcheck .setglobal
+ dup length dict .copydict exch .setglobal
+ } if
+ dup gcheck 2 index gcheck not and {
+ exch .currentglobal exch true .setglobal
+ dup length string copy exch .setglobal exch
+ } if dup /CMapName 3 index put
+ } if
+ dup /CodeMap get null eq { .buildcmap } if
+ /Generic /Category findresource /DefineResource get exec
+} put
+/Category defineresource pop
+ % We might have loaded CID font support already.
+/CIDInit /ProcSet 2 copy { findresource } .internalstopped
+ % An interior `stopped' might have reset VM allocation to local.
+true .setglobal
+ { pop pop 3 -1 roll }
+ { dup length 4 index length add dict .copydict 4 -1 roll exch .copydict }
+ifelse exch defineresource pop
+
+.setlanguagelevel
diff --git a/Master/xemtex/gslib/gs_cmdl.ps b/Master/xemtex/gslib/gs_cmdl.ps
new file mode 100644
index 00000000000..e893bafb49d
--- /dev/null
+++ b/Master/xemtex/gslib/gs_cmdl.ps
@@ -0,0 +1,181 @@
+% Copyright (C) 1994, 1996, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_cmdl.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Parse and execute the command line.
+% C code handles the following switches: -h/-? -I -M -v
+
+/cmddict 50 dict def
+cmddict begin
+
+% ---------------- Utility procedures ---------------- %
+
+% Get the next argument from the parsed argument list.
+/nextarg % - nextarg <arg> true
+ % - nextarg false
+ { argv length 0 eq
+ { false }
+ { argv dup 0 get exch dup length 1 sub 1 exch getinterval /argv exch def }
+ ifelse
+ } bind def
+
+% Run a file, under job control if implemented.
+/runjob % <file> runjob -
+ { end % cmddict
+ /startjob where { pop false () startjob pop }
+ run
+ //cmddict begin
+ } bind def
+/runfilejob % <filename> runfilejob -
+ { findlibfile { exch pop } { (r) file } runjob
+ } bind def
+
+% Expand arguments. Free variables: expand@.
+/expandarg % <string> expandarg <args...>
+ { dup () eq
+ { pop
+ }
+ { dup dup (--) eq exch (-+) eq or
+ { pop /expand@ false def
+ }
+ { expand@ { (@) anchorsearch } { false } ifelse
+ { pop findlibfile
+ { exch pop }
+ { (r) file } % let the error happen
+ expandargfile
+ }
+ if
+ }
+ ifelse
+ }
+ } bind def
+/expandargfile % <file> expandargfile <args...>
+ { [ exch cvlit
+ { token not { exit } if
+ dup type /stringtype ne { =string cvs dup length string copy } if
+ expandarg
+ }
+ /exec cvx
+ ] cvx loop
+ } bind def
+
+% ---------------- Recognized switches ---------------- %
+
+% Switches with arguments are defined as <x>;
+% switches without arguments are defined as -<x>.
+
+% Switches without arguments
+/--
+ { nextarg not
+ { (-- and -+ require a file name.) = flush }
+ { //systemdict /ARGUMENTS argv put /argv [] def runjob }
+ ifelse
+ } bind def
+/-+ /-- load def
+/-@ /-- load def
+/-A { (@) Z } bind def
+/-c
+ { { argv length 0 eq { exit } if
+ argv 0 get (-) anchorsearch { pop pop exit } if
+ pop nextarg token
+ { exch pop % Probably should check for empty.
+ end exec //cmddict begin
+ }
+ if
+ }
+ loop
+ } bind def
+/-e { (#) Z } bind def
+/-E /-e load def
+/-f { } def
+/-q { //systemdict /QUIET true put } bind def
+
+% Switches with arguments
+/d
+ { (=) search not { (#) search not { () exch dup } if } if
+ exch pop cvn dup where
+ { pop (Redefining ) print print ( is not allowed.) = flush pop }
+ { exch token
+ { exch pop } % Probably should check for empty.
+ { true }
+ ifelse
+ //systemdict 3 1 roll put
+ }
+ ifelse
+ } bind def
+/D /d load def
+/f { dup length 0 ne { runfilejob } if } bind def
+/g
+ { (x) search { cvi pop exch cvi } { cvi dup } ifelse
+ //systemdict begin /DEVICEHEIGHT exch def /DEVICEWIDTH exch def end
+ } bind def
+/r
+ { (x) search { cvr pop exch cvr } { cvr dup } ifelse
+ //systemdict begin /DEVICEYRESOLUTION exch def /DEVICEXRESOLUTION exch def end
+ } bind def
+/s
+ { (=) search not { (#) search not { () exch dup } if } if
+ exch pop cvn dup where { pop dup load } { () } ifelse
+ type /stringtype ne
+ { (Redefining ) print print ( is not allowed.) = flush pop }
+ { exch //systemdict 3 1 roll put }
+ ifelse
+ } bind def
+/S /s load def
+/Z { true .setdebug } bind def
+
+% ---------------- Main program ---------------- %
+
+% We process the command line in two passes. In the first pass,
+% we read and expand any @-files as necessary. The second pass
+% does the real work.
+
+/cmdstart
+ { //cmddict begin
+ /expand@ true def
+ [
+ % Process the GS_OPTIONS environment variable.
+ (GS_OPTIONS) getenv { 0 () /SubFileDecode filter expandargfile } if
+ % Process the actual command line.
+ .getargv { expandarg } forall
+ ] readonly /argv exch def
+ % Now interpret the commands.
+ { nextarg not { exit } if
+ dup 0 get (-) 0 get eq
+ { dup length 1 eq
+ { pop (%stdin) (r) file runjob
+ }
+ { dup length 2 gt
+ { dup dup length 2 sub 2 exch getinterval exch 1 1 getinterval }
+ if currentdict .knownget
+ { exec
+ }
+ { (Ignoring unknown switch ) print
+ dup length 1 eq { (-) print print } if print
+ () = flush
+ }
+ ifelse
+ }
+ ifelse
+ }
+ { runfilejob
+ }
+ ifelse
+ }
+ loop end
+ } bind def
+
+end % cmddict
diff --git a/Master/xemtex/gslib/gs_css_e.ps b/Master/xemtex/gslib/gs_css_e.ps
new file mode 100644
index 00000000000..78daaeb9ab8
--- /dev/null
+++ b/Master/xemtex/gslib/gs_css_e.ps
@@ -0,0 +1,115 @@
+% Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_css_e.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Define the CFF StandardStrings that represent characters.
+% This is a pseudo-encoding.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/CFFStandardStrings mark
+
+% 0
+ /.notdef /space /exclam /quotedbl /numbersign
+ /dollar /percent /ampersand /quoteright /parenleft
+ /parenright /asterisk /plus /comma /hyphen
+ /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
+% 50
+ /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 /exclamdown /cent /sterling /fraction
+% 100
+ /yen /florin /section /currency /quotesingle
+ /quotedblleft /guillemotleft /guilsinglleft /guilsinglright /fi
+ /fl /endash /dagger /daggerdbl /periodcentered
+ /paragraph /bullet /quotesinglbase /quotedblbase /quotedblright
+ /guillemotright /ellipsis /perthousand /questiondown /grave
+ /acute /circumflex /tilde /macron /breve
+ /dotaccent /dieresis /ring /cedilla /hungarumlaut
+ /ogonek /caron /emdash /AE /ordfeminine
+ /Lslash /Oslash /OE /ordmasculine /ae
+ /dotlessi /lslash /oslash /oe /germandbls
+% 150
+ /onesuperior /logicalnot /mu /trademark /Eth
+ /onehalf /plusminus /Thorn /onequarter /divide
+ /brokenbar /degree /thorn /threequarters /twosuperior
+ /registered /minus /eth /multiply /threesuperior
+ /copyright /Aacute /Acircumflex /Adieresis /Agrave
+ /Aring /Atilde /Ccedilla /Eacute /Ecircumflex
+ /Edieresis /Egrave /Iacute /Icircumflex /Idieresis
+ /Igrave /Ntilde /Oacute /Ocircumflex /Odieresis
+ /Ograve /Otilde /Scaron /Uacute /Ucircumflex
+ /Udieresis /Ugrave /Yacute /Ydieresis /Zcaron
+% 200
+ /aacute /acircumflex /adieresis /agrave /aring
+ /atilde /ccedilla /eacute /ecircumflex /edieresis
+ /egrave /iacute /icircumflex /idieresis /igrave
+ /ntilde /oacute /ocircumflex /odieresis /ograve
+ /otilde /scaron /uacute /ucircumflex /udieresis
+ /ugrave /yacute /ydieresis /zcaron /exclamsmall
+ /Hungarumlautsmall /dollaroldstyle /dollarsuperior /ampersandsmall /Acutesmall
+ /parenleftsuperior /parenrightsuperior /twodotenleader /onedotenleader /zerooldstyle
+ /oneoldstyle /twooldstyle /threeoldstyle /fouroldstyle /fiveoldstyle
+ /sixoldstyle /sevenoldstyle /eightoldstyle /nineoldstyle /commasuperior
+% 250
+ /threequartersemdash /periodsuperior /questionsmall /asuperior /bsuperior
+ /centsuperior /dsuperior /esuperior /isuperior /lsuperior
+ /msuperior /nsuperior /osuperior /rsuperior /ssuperior
+ /tsuperior /ff /ffi /ffl /parenleftinferior
+ /parenrightinferior /Circumflexsmall /hyphensuperior /Gravesmall /Asmall
+ /Bsmall /Csmall /Dsmall /Esmall /Fsmall
+ /Gsmall /Hsmall /Ismall /Jsmall /Ksmall
+ /Lsmall /Msmall /Nsmall /Osmall /Psmall
+ /Qsmall /Rsmall /Ssmall /Tsmall /Usmall
+ /Vsmall /Wsmall /Xsmall /Ysmall /Zsmall
+% 300
+ /colonmonetary /onefitted /rupiah /Tildesmall /exclamdownsmall
+ /centoldstyle /Lslashsmall /Scaronsmall /Zcaronsmall /Dieresissmall
+ /Brevesmall /Caronsmall /Dotaccentsmall /Macronsmall /figuredash
+ /hypheninferior /Ogoneksmall /Ringsmall /Cedillasmall /questiondownsmall
+ /oneeighth /threeeighths /fiveeighths /seveneighths /onethird
+ /twothirds /zerosuperior /foursuperior /fivesuperior /sixsuperior
+ /sevensuperior /eightsuperior /ninesuperior /zeroinferior /oneinferior
+ /twoinferior /threeinferior /fourinferior /fiveinferior /sixinferior
+ /seveninferior /eightinferior /nineinferior /centinferior /dollarinferior
+ /periodinferior /commainferior /Agravesmall /Aacutesmall /Acircumflexsmall
+% 350
+ /Atildesmall /Adieresissmall /Aringsmall /AEsmall /Ccedillasmall
+ /Egravesmall /Eacutesmall /Ecircumflexsmall /Edieresissmall /Igravesmall
+ /Iacutesmall /Icircumflexsmall /Idieresissmall /Ethsmall /Ntildesmall
+ /Ogravesmall /Oacutesmall /Ocircumflexsmall /Otildesmall /Odieresissmall
+ /OEsmall /Oslashsmall /Ugravesmall /Uacutesmall /Ucircumflexsmall
+ /Udieresissmall /Yacutesmall /Thornsmall /Ydieresissmall
+% 379 = end
+
+counttomark packedarray exch pop
+10 1 index .registerencoding
+.defineencoding
+exec
diff --git a/Master/xemtex/gslib/gs_dbt_e.ps b/Master/xemtex/gslib/gs_dbt_e.ps
new file mode 100644
index 00000000000..1057f6d96df
--- /dev/null
+++ b/Master/xemtex/gslib/gs_dbt_e.ps
@@ -0,0 +1,60 @@
+% Copyright (C) 1993, 1994 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_dbt_e.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Define the Dingbats encoding vector.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/DingbatsEncoding
+% \000
+ StandardEncoding 0 32 getinterval aload pop % /.notdef
+% \040
+ /space /a1 /a2 /a202 /a3 /a4 /a5 /a119
+ /a118 /a117 /a11 /a12 /a13 /a14 /a15 /a16
+ /a105 /a17 /a18 /a19 /a20 /a21 /a22 /a23
+ /a24 /a25 /a26 /a27 /a28 /a6 /a7 /a8
+% \100
+ /a9 /a10 /a29 /a30 /a31 /a32 /a33 /a34
+ /a35 /a36 /a37 /a38 /a39 /a40 /a41 /a42
+ /a43 /a44 /a45 /a46 /a47 /a48 /a49 /a50
+ /a51 /a52 /a53 /a54 /a55 /a56 /a57 /a58
+% \140
+ /a59 /a60 /a61 /a62 /a63 /a64 /a65 /a66
+ /a67 /a68 /a69 /a70 /a71 /a72 /a73 /a74
+ /a203 /a75 /a204 /a76 /a77 /a78 /a79 /a81
+ /a82 /a83 /a84 /a97 /a98 /a99 /a100 /.notdef
+% \200
+ StandardEncoding 0 32 getinterval aload pop % /.notdef
+% \240
+ /.notdef /a101 /a102 /a103 /a104 /a106 /a107 /a108
+ /a112 /a111 /a110 /a109 /a120 /a121 /a122 /a123
+ /a124 /a125 /a126 /a127 /a128 /a129 /a130 /a131
+ /a132 /a133 /a134 /a135 /a136 /a137 /a138 /a139
+% \300
+ /a140 /a141 /a142 /a143 /a144 /a145 /a146 /a147
+ /a148 /a149 /a150 /a151 /a152 /a153 /a154 /a155
+ /a156 /a157 /a158 /a159 /a160 /a161 /a163 /a164
+ /a196 /a165 /a192 /a166 /a167 /a168 /a169 /a170
+% \340
+ /a171 /a172 /a173 /a162 /a174 /a175 /a176 /a177
+ /a178 /a179 /a193 /a180 /a199 /a181 /a200 /a182
+ /.notdef /a201 /a183 /a184 /a197 /a185 /a194 /a198
+ /a186 /a195 /a187 /a188 /a189 /a190 /a191 /.notdef
+256 packedarray .defineencoding
+3 DingbatsEncoding .registerencoding
+exec
diff --git a/Master/xemtex/gslib/gs_diskf.ps b/Master/xemtex/gslib/gs_diskf.ps
new file mode 100644
index 00000000000..5d1b4e84d3a
--- /dev/null
+++ b/Master/xemtex/gslib/gs_diskf.ps
@@ -0,0 +1,225 @@
+% Copyright (C) 1996 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_diskf.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Support for converting Type 1 fonts without eexec encryption to
+% Type 4 fonts that load individual character outlines on demand.
+
+% If DISKFONTS is true, we load individual CharStrings as they are needed.
+% (This is intended primarily for machines with very small memories.)
+% Initially, the character definition is the file position of the definition;
+% this gets replaced with the actual CharString.
+% Note that if we are loading characters lazily, CharStrings is writable.
+
+% _Cstring must be long enough to hold the longest CharString for
+% a character defined using seac. This is lenIV + 4 * 5 (for the operands
+% of sbw, assuming div is not used) + 2 (for sbw) + 3 * 5 (for the operands
+% of seac other than the character codes) + 2 * 2 (for the character codes)
+% + 2 (for seac), i.e., lenIV + 43.
+
+/_Cstring 60 string def
+
+% When we initially load the font, we call
+% <index|charname> <length> <readproc> cskip_C
+% to skip over each character definition and return the file position instead.
+% This substitutes for the procedure
+% <index|charname> <length> string currentfile exch read[hex]string pop
+% [encrypt]
+% What we actually store in the CharString is fileposition * 1000 + length,
+% negated if the string is stored in binary form.
+
+/cskip_C
+ { exch dup 1000 ge 3 index type /nametype ne or
+ { % This is a Subrs string, or the string is so long we can't represent
+ % its length. Load it now.
+ exch exec
+ }
+ { % Record the position and length, and skip the string.
+ dup currentfile fileposition 1000 mul add
+ 2 index 3 get /readstring cvx eq { neg } if
+ 3 1 roll
+ dup _Cstring length idiv
+ { currentfile _Cstring 3 index 3 get exec pop pop
+ } repeat
+ _Cstring length mod _Cstring exch 0 exch getinterval
+ currentfile exch 3 -1 roll 3 get exec pop pop
+ }
+ ifelse
+ } bind def
+
+% Load a CharString from the file. The font is the top entry
+% on the dictionary stack.
+/load_C % <charname> <fileposandlength> load_C -
+ { dup abs 1000 idiv FontFile exch setfileposition
+ CharStrings 3 1 roll
+ .currentglobal CharStrings .gcheck .setglobal exch
+ dup 0 lt
+ { neg 1000 mod string FontFile exch readstring }
+ { 1000 mod string FontFile exch readhexstring }
+ ifelse pop
+ exch .setglobal
+% If the CharStrings aren't encrypted on the file, encrypt now.
+ Private /-| get 0 get
+ dup type /nametype ne
+ { dup length 5 sub 5 exch getinterval exec }
+ { pop }
+ ifelse dup 4 1 roll put
+% If the character is defined with seac, load its components now.
+ mark exch seac_C
+ counttomark
+ { StandardEncoding exch get dup CharStrings exch get
+ dup type /integertype eq { load_C } { pop pop } ifelse
+ } repeat
+ pop % the mark
+ } bind def
+
+/seac_C % <charstring> seac_C <achar> <bchar> ..or nothing..
+ { dup length _Cstring length le
+ { 4330 exch _Cstring .type1decrypt exch pop
+ dup dup length 2 sub 2 getinterval <0c06> eq % seac
+ { dup length
+ Private /lenIV known { Private /lenIV get } { 4 } ifelse
+ exch 1 index sub getinterval
+% Parse the string just enough to extract the seac information.
+% We assume that the only possible operators are hsbw, sbw, and seac,
+% and that there are no 5-byte numbers.
+ mark 0 3 -1 roll
+ { exch
+ { { dup 32 lt
+ { pop 0 }
+ { dup 247 lt
+ { 139 sub 0 }
+ { dup 251 lt
+ { 247 sub 256 mul 108 add 1 1 }
+ { 251 sub -256 mul -108 add -1 1 }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ } % 0
+ { mul add 0 } % 1
+ }
+ exch get exec
+ }
+ forall pop
+ counttomark 1 add 2 roll cleartomark % pop all but achar bchar
+ }
+ { pop % not seac
+ }
+ ifelse
+ }
+ { pop % punt
+ }
+ ifelse
+ } bind def
+
+% Define replacement procedures for loading fonts.
+% If DISKFONTS is true and the body of the font is not encrypted with eexec:
+% - Prevent the CharStrings from being made read-only.
+% - Substitute a different CharString-reading procedure.
+% (eexec disables this because the implicit 'systemdict begin' hides
+% the redefinitions that make the scheme work.)
+% We assume that:
+% - The magic procedures (-|, -!, |-, and |) are defined with
+% executeonly or readonly;
+% - The contents of the reading procedures are as defined in bdftops.ps;
+% - The font includes the code
+% <font> /CharStrings <CharStrings> readonly put
+/.loadfontdict 6 dict def mark
+ /begin % push this dict after systemdict
+ { dup begin
+ //systemdict eq { //.loadfontdict begin } if
+ } bind
+ /end % match begin
+ { currentdict end
+ //.loadfontdict eq currentdict //systemdict eq and { end } if
+ } bind
+ /dict % leave room for FontFile, BuildChar, BuildGlyph
+ { 3 add dict
+ } bind
+ /executeonly % for reading procedures
+ { readonly
+ }
+ /noaccess % for Subrs strings and Private dictionary
+ { readonly
+ }
+ /readonly % for procedures and CharStrings dictionary
+ { % We want to take the following non-standard actions here:
+ % - If the operand is the CharStrings dictionary, do nothing;
+ % - If the operand is a number (a file position replacing the
+ % actual CharString), do nothing;
+ % - If the operand is either of the reading procedures (-| or -!),
+ % substitute a different one.
+ dup type /dicttype eq % CharStrings or Private
+ count 2 gt and
+ { 1 index /CharStrings ne { readonly } if }
+ { dup type /arraytype eq % procedure or data array
+ { dup length 5 ge 1 index xcheck and
+ { dup 0 get /string eq
+ 1 index 1 get /currentfile eq and
+ 1 index 2 get /exch eq and
+ 1 index 3 get dup /readstring eq exch /readhexstring eq or and
+ 1 index 4 get /pop eq and
+ { /cskip_C cvx 2 packedarray cvx
+ }
+ { readonly
+ }
+ ifelse
+ }
+ { readonly
+ }
+ ifelse
+ }
+ { dup type /stringtype eq % must be a Subr string
+ { readonly }
+ if
+ }
+ ifelse
+ }
+ ifelse
+ } bind
+ /definefont % to insert BuildChar/Glyph and change FontType
+ { dup /FontType get 1 eq
+ { dup /FontType 4 put
+ dup /BuildChar /build_C load put
+ dup /BuildGlyph /build_C load put
+ }
+ if definefont
+ } bind
+counttomark 2 idiv { .loadfontdict 3 1 roll put } repeat pop
+.loadfontdict readonly pop
+
+% Define the BuildChar and BuildGlyph procedures for modified fonts.
+% A single procedure serves for both.
+/build_C % <font> <code|name> build_C -
+ { 1 index begin
+ dup dup type /integertype eq { Encoding exch get } if
+ % Stack: font code|name name
+ dup CharStrings exch .knownget not
+ { 2 copy eq { exch pop /.notdef exch } if
+ QUIET not
+ { (Substituting .notdef for ) print = flush }
+ { pop }
+ ifelse
+ /.notdef CharStrings /.notdef get
+ } if
+ % Stack: font code|name name charstring
+ dup type /integertype eq
+ { load_C end build_C }
+ { end .type1execchar }
+ ifelse
+ } bind def
diff --git a/Master/xemtex/gslib/gs_dpnxt.ps b/Master/xemtex/gslib/gs_dpnxt.ps
new file mode 100644
index 00000000000..e38e6965074
--- /dev/null
+++ b/Master/xemtex/gslib/gs_dpnxt.ps
@@ -0,0 +1,113 @@
+% Copyright (C) 1997, 1998 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_dpnxt.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% gs_dpnxt.ps
+% NeXT Display PostScript extensions
+
+% Define the operation values for compositing. These must match the values
+% in gsdpnext.h, which also are the ones from the NeXT documentation.
+% We put them in systemdict, which seems like as good a place as any.
+mark
+ /Clear /Copy /Sover /Sin /Sout /Satop /Dover /Din /Dout /Datop /Xor
+ /PlusD /PlusL /Highlight % not sure about Highlight
+counttomark { counttomark 1 sub def } repeat pop
+
+% We implement readimage and sizeimage using the following 3 otherwise
+% undocumented lower-level operators:
+%
+% <x> <y> <width> <height> <matrix> .sizeimagebox
+% <dev_x> <dev_y> <dev_width> <dev_height> <matrix>
+%
+% - .sizeimageparams <bits/sample> <multiproc> <ncolors>
+%
+% <device> <x> <y> <width> <max_height> <alpha?> <std_depth|null>
+% <string> .getbitsrect <height> <substring>
+%
+% NOTE: These operators are subject to change without notice!
+
+% Implement readimage using .getbitsrect. Experimentation on a NeXT system
+% shows that the data is always returned in order of increasing device Y,
+% regardless of the CTM.
+%
+% Note that we can't make stack protection work for this operator,
+% because it must remove its operands from the stack before calling
+% the supplied procedure(s).
+
+/readimage { % <x> <y> <width> <height> <proc> [... <procN-1>]
+ % <string> <alpha?> readimage -
+ .sizeimageparams exch {
+ % multiproc = true. If N > 1, store the procedures in an array.
+ exch pop 1 index { 1 add } if
+ % Stack: ... string alpha? nprocs
+ dup 1 eq {
+ pop false % only 1 procedure, multiproc is irrelevant
+ } {
+ dup array 4 1 roll 3 add 2 roll astore 3 1 roll true
+ } ifelse
+ } {
+ % multiproc = false.
+ pop pop false
+ } ifelse
+ % Map the rectangle to device coordinates.
+ % Stack: x y w h proc(s) str alpha? multi?
+ 8 -4 roll matrix .sizeimagebox pop 8 4 roll
+ % Make sure we allocate the operand array in local VM
+ % to avoid a possible invalidaccess.
+ .currentglobal false .setglobal 9 1 roll
+ exch { 1 } { 0 } ifelse exch % alpha is last, if present
+ exch 4 1 roll 8 array astore exch .setglobal
+ { % Read out a block of scan lines and pass them to the procedure.
+ % Stack: [x y w h alpha? proc(s) str multi?] -- we must consume this.
+ dup 3 get 0 eq { pop exit } if
+ aload 9 1 roll pop exch pop currentdevice 7 1 roll
+ % Always read out the data as standard (not native) pixels.
+ .sizeimageparams pop pop exch .getbitsrect
+ % Stack: [x y w h alpha? proc(s) str multi?] hread substr
+ 3 -1 roll
+ % Stack: hread substr [x y w h alpha? proc(s) str multi?]
+ dup 1 2 copy get 5 index add put
+ % Stack: hread substr [x y' w h alpha? proc(s) str multi?]
+ dup 3 2 copy get 6 -1 roll sub put
+ % Stack: substr [x y' w h' alpha? proc(s) str multi?]
+ dup 5 get exch 7 get {
+ % multiproc = true, pass each plane to a different procedure.
+ % Stack: substr procs
+ 0 1 2 index length 1 sub {
+ % Push 1 plane and its procedure under the top 2 elements.
+ % Stack: ... substr procs plane#
+ 2 index length 2 index length idiv % bytes per plane
+ dup 2 index mul exch
+ % Stack: ... substr procs plane# start length
+ 4 index 3 1 roll getinterval 4 1 roll
+ 2 copy get 4 1 roll pop
+ } for
+ exch pop length 2 mul .execn
+ } {
+ % multiproc = false, just call the procedure.
+ exec
+ } ifelse
+ } //systemdict /exec get 3 packedarray cvx loop
+} bind odef
+
+% Implement sizeimage using lower-level operators.
+
+/sizeimage { % <x> <y> <width> <height> <matrix> sizeimage
+ % <devwidth> <devheight> <bits/sample> <matrix>
+ % <multiproc> <ncolors>
+ .sizeimagebox 5 -2 roll pop pop
+ .sizeimageparams 3 -1 roll 4 1 roll
+} bind odef
diff --git a/Master/xemtex/gslib/gs_dps.ps b/Master/xemtex/gslib/gs_dps.ps
new file mode 100644
index 00000000000..10c7577e1cd
--- /dev/null
+++ b/Master/xemtex/gslib/gs_dps.ps
@@ -0,0 +1,203 @@
+% Copyright (C) 1997, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_dps.ps,v 1.4.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Initialization file for Display PostScript functions.
+
+% ------ Contexts ------ %
+
+% To create a context with private local VM, we use the .localfork
+% operator to actually create the context, the new VM, and an empty
+% userdict, and then we call the .initlocaldicts procedure to make
+% local copies of the initial contents of the dictionaries in local VM.
+% savedlocaldicts in systemdict is a global read-only dictionary whose
+% elements are global read-only copies of these initial contents;
+% we just copy its elements into local VM and install them in systemdict.
+% userdict and internaldict require special handling.
+
+% Switching between contexts with different local VMs requires
+% changing the bindings in systemdict that reference local objects.
+% For this purpose, each userdict has an entry called localdicts
+% which holds the local copies of the elements of savedlocaldicts,
+% plus internaldict. The context switching code in the interpreter
+% effectively copies this dictionary into systemdict.
+% NOTE: the name localdicts is known to the interpreter.
+
+% Switching between contexts also requires resetting the user parameters.
+% The interpreter records the value of userparams (a local dictionary
+% referenced from systemdict) for each context, and uses it for this.
+% See gs_lev2.ps for more details.
+% NOTE: the name userparams is known to the interpreter.
+
+% Save copies of local dictionaries at the end of system initialization.
+% Also save the initial gstate.
+/.savelocalstate {
+ .currentglobal true .setglobal
+ //systemdict /savedlocaldicts mark //systemdict {
+ dup gcheck {
+ pop pop
+ } {
+ dup type /dicttype eq {
+ % Save a copy of this dictionary in global VM.
+ dup maxlength dict .copydict readonly
+ } {
+ pop pop
+ } ifelse
+ } ifelse
+ } forall .dicttomark readonly put
+ % Create localdicts for the current context.
+ false .setglobal
+ userdict /localdicts mark savedlocaldicts {
+ pop dup load
+ } forall /internaldict dup load
+ .dicttomark readonly put
+ % Save a copy of the initial gstate.
+ true .setglobal
+ //systemdict /savedinitialgstate gstate readonly put
+ .setglobal
+} .bind def
+
+% Initialize local dictionaries and gstate when creating a new context.
+% Note that until this completes, we are in the anomalous situation of
+% having systemdict point to dictionaries that are in a non-current
+% local VM. Because of this, we turn off garbage collection temporarily.
+/.copylocal { % <name> <dict> .copylocal <name> <dict'>
+ % Copy a dictionary to the current (local) VM,
+ % and make it read-only if its current definition is.
+ dup maxlength dict .copydict
+ 1 index load wcheck not { readonly } if
+} .bind def
+% When this is called, the dictionary stack is in its initial state,
+% and there is (anomalously) only one gstate on the gstate stack.
+/.initlocaldicts { % - .initlocaldicts -
+ -2 vmreclaim
+ .currentglobal //systemdict begin
+ false .setglobal
+ % Since localdicts doesn't exist yet, references from
+ % systemdict to local objects won't get restored if
+ % a context switch happens in this code. Therefore,
+ % until localdicts is defined, we have to keep all our
+ % state on the operand stack.
+
+ % Acquire userdict.
+ %****** WRONG IF NON-STANDARD INITIAL DSTACK ******
+ countdictstack array dictstack
+ { dup gcheck not { exit } if pop } forall
+ % Create localdicts with a local copy of each dictionary,
+ % except for userdict and userparams, which just need
+ % to be filled in.
+ mark savedlocaldicts {
+ 1 index /userdict eq {
+ % Stack: userdict mark ... /userdict inituserdict
+ counttomark 1 add index .copydict
+ } {
+ 1 index /userparams eq {
+ % Stack: userdict mark ... /userparams inituserparams
+ userparams .copydict
+ } {
+ .copylocal
+ } ifelse
+ } ifelse
+ } forall /internaldict dup .makeinternaldict .makeoperator
+ .dicttomark readonly /localdicts exch put
+ % localdicts is now defined in userdict.
+ % Copy the definitions into systemdict.
+ localdicts { .forcedef } forall
+ % Set the user parameters.
+ userparams readonly .setuserparams
+ % Establish the initial gstate(s).
+ /savedinitialgstate .systemvar setgstate gsave
+ % Wrap up.
+ end .setglobal
+} odef
+
+% Check whether an object is a procedure.
+/.proccheck { % <obj> .proccheck <bool>
+ dup xcheck
+ exch type dup /arraytype eq exch /packedarraytype eq or and
+} bind def
+
+% Create a context with private local VM.
+% The .localfork operator does all the work, but we must ensure that
+% .initlocaldicts gets called when the new context starts up.
+/localfork { % <mark> <obj1> ... <objN> <proc>
+ % <stdin|null> <stdout|null>
+ % localfork <context>
+ .currentglobal true .setglobal 3 index
+ dup .proccheck not {
+ pop .setglobal /localfork cvx /typecheck signalerror
+ } if
+ {exec .initlocaldicts} aload pop
+ 3 1 roll 3 packedarray cvx
+ 4 1 roll 5 -1 roll pop .setglobal .localfork
+} odef
+
+% Fork a context that shares VM. The .fork operator creates an empty
+% userparams dictionary for the context, but we still need to initialize
+% this dictionary when the new context starts up.
+/.postfork { % - .postfork -
+ % Initialize the user parameters.
+ savedlocaldicts /userparams get userparams .copydict readonly pop
+} odef
+/fork { % <mark> <obj1> ... <objN> <proc> fork <context>
+ .currentglobal false .setglobal 1 index
+ dup .proccheck not {
+ pop .setglobal /fork cvx /typecheck signalerror
+ } if
+ {exec .postfork} aload pop
+ 3 1 roll 3 packedarray cvx
+ 3 1 roll exch pop .setglobal .fork
+} odef
+
+% ------ Halftone phase ------ %
+
+/sethalftonephase { % <x> <y> sethalftonephase -
+ -1 2 index 2 index .setscreenphase pop pop
+} odef
+/currenthalftonephase { % - currenthalftonephase <x> <y>
+ 0 .currentscreenphase
+} odef
+
+% ------ Device-source images ------ */
+
+.imagetypes 2 /.image2 load put
+
+% ------ Device information ------ %
+
+/.deviceinfodict mark
+ /Colors null /GrayValues null /RedValues null /GreenValues null
+ /BlueValues null /ColorValues null
+.dicttomark readonly def
+/deviceinfo { % - deviceinfo <dict>
+ currentdevice //.deviceinfodict .getdeviceparams .dicttomark readonly
+} odef
+
+% The current implementation allocates a 2-element array each time.
+% Perhaps we should change this to 2 separate parameters for X and Y?
+/.wtdict mark
+ /wtranslation null
+.dicttomark readonly def
+/wtranslation { % - wtranslation <x> <y>
+ currentdevice //.wtdict .getdeviceparams exch pop exch pop aload pop
+} odef
+currentdict /.wtdict .undef
+
+% ------ View clipping ------ %
+
+/rectviewclip { % <x> <y> <width> <height> rectviewclip -
+ % <numarray|numstring> rectviewclip -
+ newpath .rectappend viewclip
+} odef
diff --git a/Master/xemtex/gslib/gs_dps1.ps b/Master/xemtex/gslib/gs_dps1.ps
new file mode 100644
index 00000000000..177fb68ba11
--- /dev/null
+++ b/Master/xemtex/gslib/gs_dps1.ps
@@ -0,0 +1,142 @@
+% Copyright (C) 1997, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_dps1.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Initialization file for most of the Display PostScript functions
+% that are also included in Level 2.
+
+level2dict begin
+
+% ------ Virtual memory ------ %
+
+/currentshared /.currentglobal load def
+/scheck /.gcheck load def
+%****** FOLLOWING IS WRONG ******
+/shareddict currentdict /globaldict .knownget not { 20 dict } if def
+
+% Global and LocalFontDirectory must remain in systemdict
+% even if we temporarily exit Level 2 mode.
+
+end % level2dict
+systemdict begin
+
+/SharedFontDirectory .FontDirectory .gcheck
+ { .currentglobal false .setglobal
+ /LocalFontDirectory .FontDirectory dup maxlength dict copy
+ .forcedef % LocalFontDirectory is local, systemdict is global
+ .setglobal .FontDirectory
+ }
+ { /LocalFontDirectory .FontDirectory
+ .forcedef % LocalFontDirectory is local, systemdict is global
+ 50 dict
+ }
+ifelse def
+
+end % systemdict
+level2dict begin
+
+% setshared must rebind FontDirectory to the appropriate one of
+% Local or SharedFontDirectory.
+
+/.setglobal % <bool> .setglobal -
+ { dup .setglobal
+ //systemdict /FontDirectory .currentglobal
+ { //SharedFontDirectory }
+ { /LocalFontDirectory .systemvar } % can't embed ref to local VM
+ ifelse .forceput pop % LocalFontDirectory is local, systemdict is global
+ } .bind odef % must bind .forceput and .setglobal
+ % even if NOBIND in effect
+% Don't just copy (load) the definition of .setglobal:
+% it gets redefined for LL3.
+/setshared { /.setglobal .systemvar exec } odef
+.currentglobal setshared
+
+% See below for changes in save and restore.
+
+% ------ Fonts ------ %
+
+/selectfont % <fontname> <size> selectfont -
+ { 1 index findfont
+ 1 index dup type /arraytype eq { makefont } { scalefont } ifelse
+ setfont pop pop
+ } odef
+% undefinefont has to take local/global VM into account.
+/undefinefont % <fontname> undefinefont -
+ { .FontDirectory 1 index .undef
+ .currentglobal
+ { % Current mode is global; delete from local directory too.
+ //systemdict /LocalFontDirectory .knownget
+ { 1 index .undef }
+ if
+ }
+ { % Current mode is local; if there was a shadowed global
+ % definition, copy it into the local directory.
+ //systemdict /SharedFontDirectory .knownget
+ { 1 index .knownget
+ { .FontDirectory 2 index 3 -1 roll put }
+ if
+ }
+ if
+ }
+ ifelse pop
+ } odef
+
+% If we load a font into global VM within an inner save, the restore
+% will delete it from FontDirectory but not from SharedFontDirectory.
+% We have to handle this by making restore copy missing entries from
+% SharedFontDirectory to FontDirectory. Since this could slow down restore
+% considerably, we define a new operator .dictcopynew for this purpose.
+% Furthermore, if FAKEFONTS is in effect, we want global real fonts to
+% override fake local ones. We handle this by brute force.
+/restore % <save> restore -
+ { dup //restore % bind even if NOBIND
+ /LocalFontDirectory .systemvar
+ FAKEFONTS
+ { mark
+ % We want to delete a fake font from the local directory
+ % iff the global directory now has no definition for it,
+ % or a non-fake definition.
+ 1 index dup
+ { % Stack: lfd mark lfd key ... lfd key value
+ length 1 gt
+ { % This is a real local definition; don't do anything.
+ pop
+ }
+ { % This is a fake local definition, check for global.
+ //SharedFontDirectory 1 index .knownget
+ { % A global definition exists, check for fake.
+ length 1 eq { pop } { 1 index } ifelse
+ }
+ { % No global definition, delete the local one.
+ 1 index
+ }
+ ifelse
+ }
+ ifelse
+ } forall
+ pop counttomark 2 idiv { .undef } repeat pop
+ }
+ if
+ //SharedFontDirectory exch .dictcopynew pop
+ .currentglobal .setglobal % Rebind FontDirectory according to current VM.
+ pop
+ } bind odef
+
+% ------ Miscellaneous ------ %
+
+/undef /.undef load def
+
+end % level2dict
diff --git a/Master/xemtex/gslib/gs_dps2.ps b/Master/xemtex/gslib/gs_dps2.ps
new file mode 100644
index 00000000000..c84b5be9b65
--- /dev/null
+++ b/Master/xemtex/gslib/gs_dps2.ps
@@ -0,0 +1,217 @@
+% Copyright (C) 1990, 1996, 1997, 1998, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_dps2.ps,v 1.3.4.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Initialization file for basic Display PostScript functions
+% that are also included in Level 2.
+
+level2dict begin
+
+% ------ Halftones ------ %
+
+/.makestackdict
+ { { counttomark -1 roll } forall .dicttomark
+ } bind def
+/currenthalftone % - currenthalftone <dict>
+ { mark .currenthalftone
+ { { exch pop } % halftone
+ { /HalftoneType 1 % screen
+ { /Frequency /Angle /SpotFunction }
+ .makestackdict
+ }
+ { /HalftoneType 2 % colorscreen
+ { /RedFrequency /RedAngle /RedSpotFunction
+ /GreenFrequency /GreenAngle /GreenSpotFunction
+ /BlueFrequency /BlueAngle /BlueSpotFunction
+ /GrayFrequency /GrayAngle /GraySpotFunction
+ }
+ .makestackdict
+ }
+ }
+ exch get exec
+ } odef
+% Define sethalftone so it converts types 1-4 to type 5.
+/.makehalftoneRGBV { % <dict> <type> <keys> <keysRGBV>
+ 4 -1 roll exch { 1 index exch get exch } forall 15 1 roll
+ 14 -2 roll mark 15 1 roll { /Gray /Blue /Green /Red } {
+ % stack: v0 v1 v2 type keys comp
+ mark
+ 2 index 0 get 8 -1 roll
+ 4 index 1 get 9 -1 roll
+ 6 index 2 get 10 -1 roll
+ % stack: type keys comp mark k0 v0 k1 v1 k2 v2
+ /HalftoneType 10 index .dicttomark
+ counttomark 2 roll
+ } forall pop pop
+ /Default 1 index .dicttomark exch pop { .sethalftone5 }
+} bind def
+
+% The value of each entry in .halftonetypes is a procedure:
+% <setdict> <htdict> <<proc>> <setdict'> <htdict'> <sethalftoneproc>
+% This allows us to use these procedures both for actually implementing
+% sethalftone and for converting subsidiary dictionaries of HalftoneType 5
+% halftones.
+systemdict begin
+15 dict /.halftonetypes 1 index def begin
+ 1 {
+ mark exch /Default exch .dicttomark { .sethalftone5 }
+ } bind def
+ 2 {
+ 1 { /Frequency /Angle /SpotFunction } {
+ /RedFrequency /RedAngle /RedSpotFunction
+ /GreenFrequency /GreenAngle /GreenSpotFunction
+ /BlueFrequency /BlueAngle /BlueSpotFunction
+ /GrayFrequency /GrayAngle /GraySpotFunction
+ } .makehalftoneRGBV
+ } bind def
+ 3 {
+ mark exch /Default exch .dicttomark { .sethalftone5 }
+ } bind def
+ 4 {
+ 3 { /Width /Height /Thresholds } {
+ /RedWidth /RedHeight /RedThresholds
+ /GreenWidth /GreenHeight /GreenThresholds
+ /BlueWidth /BlueHeight /BlueThresholds
+ /GrayWidth /GrayHeight /GrayThresholds
+ } .makehalftoneRGBV
+ } bind def
+ 5 {
+ pop dup length dict copy
+ mark 1 index {
+ % Even HalftoneType 5 dictionaries have entries other than
+ % subsidiary halftone dictionaries.
+ dup type /dicttype ne {
+ 0
+ } {
+ dup /HalftoneType .knownget not { 0 } if
+ } ifelse dup 5 gt {
+ % Stack: dict mark ... keyN dictN httypeN
+ % Assume that all HalftoneTypes > 5 convert to 5.
+ 1 index 3 1 roll
+ //.halftonetypes exch get exec pop /Default get
+ % Stack: dict mark ... keyN setdict'N htdict'N
+ counttomark 1 add index 3 index 4 -1 roll put
+ } {
+ pop
+ } ifelse
+ } forall .dicttomark { .sethalftone5 }
+ } bind def
+end
+end
+/sethalftone { % <dict> sethalftone -
+ % We must create the new dictionary in the same VM as the
+ % operand; otherwise, invalidaccess errors may occur.
+ .currentglobal 1 index dup gcheck .setglobal
+ dup //.halftonetypes 1 index /HalftoneType get get exec exec
+ .setglobal pop
+} odef
+% Redefine setscreen and setcolorscreen to recognize halftone dictionaries,
+% and to insert the Frequency and Angle into Type 1 halftones, per
+% Adobe TN 5085.
+/.fixsethalftonescreen % <freq> <angle> <dict> .fix...screen
+ % <freq> <angle> <dict> <dict'>
+ { dup dup /HalftoneType get 1 eq
+ { dup wcheck not { dup length .copydict } if
+ dup /Frequency 5 index put
+ dup /Angle 4 index put
+ }
+ if
+ } bind def
+/setscreen % <ignore*2> <dict> setscreen -
+ { dup type /dicttype eq
+ { .fixsethalftonescreen sethalftone pop pop pop }
+ { //setscreen }
+ ifelse
+ } odef
+/setcolorscreen % <ignore*11> <dict> setcolorscreen -
+ { dup type /dicttype eq
+ { .fixsethalftonescreen sethalftone 12 { pop } repeat }
+ { //setcolorscreen }
+ ifelse
+ } odef
+% Redefine currentscreen and currentcolorscreen to extract the Frequency
+% and Angle from Type 1 halftones, per Adobe TN 5085.
+/.fixcurrenthalftonescreen % <dict> .fix... <freq> <angle> <proc>
+ { dup /HalftoneType get 1 eq
+ { dup /Frequency get 1 index /Angle get }
+ { 60 0 }
+ ifelse 3 2 roll
+ } bind def
+/currentscreen % - currentscreen 60 0 <dict>
+ { .currenthalftone
+ { { .fixcurrenthalftonescreen } % halftone
+ { } % screen
+ { 12 3 roll 9 { pop } repeat % colorscreen
+ dup type /dicttype eq { .fixcurrenthalftonescreen } if
+ }
+ }
+ exch get exec
+ } odef
+/currentcolorscreen % - currentcolorscreen (60 0 <dict>)*4
+ { .currenthalftone
+ { { .fixcurrenthalftonescreen 3 copy 6 copy } % halftone
+ { 3 copy 6 copy } % screen
+ { } % colorscreen
+ }
+ exch get exec
+ } odef
+
+% ------ User objects ------ %
+
+/.UserObjects {
+ .userdict /UserObjects
+} odef
+% In order to get proper error recovery behavior, we need to be careful
+% not to pop any operands from the stack until we're done.
+% The code below faithfully duplicates the apparent array-growing
+% behavior of Adobe interpreters.
+/defineuserobject { % <index> <value> defineuserobject -
+ .UserObjects .knownget {
+ length dup 3 index le {
+ % Stack: index value len
+ 2 index eq { 1 index 2 mul } { 1 index 1 add } ifelse
+ .localvmarray .UserObjects get
+ 1 index copy pop
+ .UserObjects 3 -1 roll put
+ } {
+ pop
+ } ifelse
+ } {
+ .UserObjects 3 index 1 add 10 .max .localvmarray put
+ } ifelse
+ .UserObjects get 2 index 2 index put pop pop
+} odef
+/execuserobject { % <index> execuserobject -
+ .UserObjects get 1 index get exch pop exec
+} odef
+/undefineuserobject { % <index> undefineuserobject -
+ .UserObjects get 1 index null put pop
+} odef
+
+% ------ Cache control ------ %
+
+% Dummy definitions for cache control operators
+
+/ucachestatus { % - ucachestatus -mark- ? ? ? ? <size>
+ mark 0 0 0 0 .userdict /.ucachesize .knownget not { 0 } if
+} odef
+/setucacheparams { % -mark- ... <size> setucacheparams -
+ % Provoke an appropriate error if needed.
+ counttomark 1 lt { () 0 get } if
+ 0 or .userdict /.ucachesize 2 index 0 .max put cleartomark
+} odef
+
+end % level2dict
diff --git a/Master/xemtex/gslib/gs_dscp.ps b/Master/xemtex/gslib/gs_dscp.ps
new file mode 100644
index 00000000000..355e9d9e0f5
--- /dev/null
+++ b/Master/xemtex/gslib/gs_dscp.ps
@@ -0,0 +1,119 @@
+% Copyright (C) 2000 Artifex Software Inc. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_dscp.ps,v 1.4.2.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Postscript interface routines to DSC parser
+
+/send_orientation { % <orientation> send_orientation -
+ % .parse_dsc_comments returns -1 for an Orientation key with an
+ % unrecognized value.
+ dup 0 ge {
+ << /Orientation 2 index >> setpagedevice
+ } if pop
+} bind def
+
+% This dictionary contains local handlers for DSC comments.
+% See header in zdscpars.c for more information.
+% <dsc_dict> handler <dsc_dict>
+/DSCparseprocs mark
+ /Orientation { dup /Orientation get send_orientation } bind
+ /PageOrientation { dup /PageOrientation .knownget { send_orientation }
+ { dup /Orientation .knownget { send_orientation } if }
+ ifelse } bind
+ /Page { dup /Orientation .knownget { send_orientation } if } bind
+ /NOP { } bind
+.dicttomark readonly def
+
+% This procedure is called whenever a DSC comment is found by the interpreter
+/do_parse_dsc false def
+/parse_dsc { % <file> <DSC string> [<prev proc>]
+ % parse_dsc -
+ % Run any previously installed parser.
+ 0 get dup null eq { pop } { 3 copy exec pop } ifelse
+
+ do_parse_dsc { % Check if this parser is enabled
+ currentglobal true setglobal % Go to global VM, save old state
+ 3 1 roll % Put old VM state under <file> <string>
+ dsc_dict exch % <VM state> <file> <dict> <string>
+ .parse_dsc_comments % <VM state> <file> <dict> <DSC name>
+ 4 -1 roll % Get old VM state from under <file> <dict> <DSC name>
+ setglobal % restore previous VM state
+ //DSCparseprocs exch .knownget { % Check DSC name against local handler list
+ exec % execute any local handler
+ } if
+ } if
+ pop pop % remove file, dict
+} bind def
+
+
+% Check whether the currently installed parser is the one defined in this file.
+/.using_parse_dsc { % - .using_parse_dsc <proc> <using?>
+ currentuserparams /ProcessDSCComment get
+ dup null eq { pop {{//null} //parse_dsc exec} } if
+ dup length 3 eq {
+ dup dup length 1 sub get /parse_dsc load eq
+ } {
+ false
+ } ifelse
+} bind def
+
+% Establish a binding for dsc_dict.
+userdict /dsc_dict null put
+
+% - dsc_init -
+/dsc_init { % Initialize DSC parser
+ currentglobal true setglobal
+ /dsc_dict 50 dict store % Size must be large enough for all DSC values
+ dsc_dict .initialize_dsc_parser
+ .using_parse_dsc {
+ % Already using this parser.
+ pop
+ } {
+ % Encapsulate the previous parser. We know it is in global VM:
+ % allocate the new one in global VM as well.
+ 1 array astore
+ /parse_dsc load /exec load 3 array astore cvx readonly
+ << /ProcessDSCComment 3 -1 roll >>
+ setuserparams
+ } ifelse
+ setglobal
+ /do_parse_dsc true def
+} bind def
+
+
+% Enable the DSC parser defined in this file.
+% - enable_dsc -
+/enable_dsc {
+ dsc_init
+} bind def
+
+% Disable the DSC parser defined in this file.
+% - disable_dsc -
+/disable_dsc {
+ % There might be another parser installed: if so, restore it.
+ % (If it has encapsulated our parser, we can't.)
+ .using_parse_dsc {
+ % Restore the parser we encapsulated.
+ 0 get 0 get
+ currentglobal true setglobal exch
+ << /ProcessDSCComment 3 -1 roll >>
+ exch setglobal setuserparams
+ } {
+ pop
+ } ifelse
+ % If we couldn't restore the old parser, at least disable ours.
+ /do_parse_dsc false def
+} bind def
diff --git a/Master/xemtex/gslib/gs_epsf.ps b/Master/xemtex/gslib/gs_epsf.ps
new file mode 100644
index 00000000000..97d93b58622
--- /dev/null
+++ b/Master/xemtex/gslib/gs_epsf.ps
@@ -0,0 +1,243 @@
+% Copyright (C) 1989, 1996, 2002 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_epsf.ps,v 1.2.6.11.2.3 2003/04/12 14:02:38 giles Exp $
+% Allow the interpreter to encapsulate EPS files, to recognize MS-DOS
+% EPSF file headers, and skip to the PostScript section of the file.
+
+% Encapsulate EPS files and optionally resize page or rescale image.
+% To display an EPS file cropped to the bounding box:
+% gs -dEPSCrop file.eps
+% To display an EPS file scaled to fit the page:
+% gs -dEPSFitPage file.eps
+% To display a file without EPS encapsulation:
+% gs -dNOEPS file.ps
+
+% When starting to process an EPS file, state is 0.
+% After %%BoundingBox processed, state is 1.
+% After %%HiResBoundingBox processed, state is 2.
+% After %%EndComments processed, state is 3.
+/EPSBoundingBoxState 3 def
+/EPSBoundingBoxSetState {
+ //systemdict /EPSBoundingBoxState 3 -1 roll .forceput
+} .bind odef % .forceput must be bound and hidden
+
+% Parse 4 numbers for a bounding box
+/EPSBoundingBoxParse { % (llx lly urx ury) -- llx lly urx ury true OR false
+ mark exch
+ token {exch token {exch token {exch token {exch pop} if} if} if} if
+ counttomark
+ 4 eq {
+ 5 -1 roll pop % remove mark
+ true
+ } {
+ cleartomark false
+ } ifelse
+} bind def
+
+% Rescale and translate to fit the BoundingBox on the page
+/EPSBoundingBoxFitPage { % llx lly urx ury --
+ DEBUG { (gs_epsf.ps: Rescaling EPS to fit page\n) print flush } if
+ clippath pathbbox newpath
+ % translate to new origin at lower left of clippath
+ 3 index 3 index translate
+ % calculate scale to fit smaller of width or height
+ exch 4 -1 roll sub 3 1 roll exch sub
+ 4 2 roll 5 index 5 index 4 2 roll
+ exch 4 -1 roll sub 3 1 roll exch sub
+ 4 2 roll
+ exch 4 -1 roll div 3 1 roll exch div
+ 1 index 1 index lt {pop}{exch pop} ifelse
+ dup scale
+ % translate to EPS -llx,-lly
+ exch neg exch neg translate
+} bind def
+
+% Crop the page to the BoundingBox
+/EPSBoundingBoxCrop { % llx lly urx ury --
+ DEBUG {
+ (gs_epsf.ps: Setting pagesize from EPS bounding box\n) print flush
+ } if
+ exch 3 index sub exch 2 index sub % stack: llx lly urx-llx ury-lly
+ << /PageSize [ 5 -2 roll ] >> setpagedevice
+ neg exch neg exch translate
+} bind def
+
+
+/EPSBoundingBoxProcess { % (llx lly urx ury) state --
+ //systemdict /EPSBoundingBoxState get 1 index lt {
+ exch EPSBoundingBoxParse
+ {
+ //systemdict /EPSCrop known {
+ EPSBoundingBoxCrop
+ } {
+ //systemdict /EPSFitPage known {
+ EPSBoundingBoxFitPage
+ } {
+ % Warn if some of the EPS file will be clipped
+ clippath pathbbox newpath
+ { % context for exit
+ 5 -1 roll lt { 6 { pop } repeat true exit } if
+ 4 -1 roll lt { 4 { pop } repeat true exit } if
+ 3 -1 roll gt { 2 { pop } repeat true exit } if
+ exch gt { true exit } if
+ false exit
+ } loop
+ QUIET not and {
+ (\n **** Warning: Some of the BoundingBox for the EPS file will be clipped.) =
+ ( Use -dEPSCrop or -dEPSFitPage to avoid clipping.\n) =
+ flush
+ } if
+ } ifelse
+ } ifelse
+ EPSBoundingBoxSetState
+ } {
+ pop % state
+ } ifelse
+ } {
+ pop pop
+ } ifelse
+} bind def
+
+/ProcessEPSComment { % file comment -- file comment
+ //systemdict /EPSBoundingBoxState get 3 lt {
+ dup
+ (%%EndComments) anchorsearch {
+ pop pop
+ % ignore any following bounding boxes
+ 3 EPSBoundingBoxSetState
+ } {
+ (%%BoundingBox:) anchorsearch {
+ pop
+ DEBUG { (gs_epsf.ps: found %%BoundingBox\n) print flush } if
+ 1 EPSBoundingBoxProcess
+ } {
+ (%%HiResBoundingBox:) anchorsearch {
+ pop
+ DEBUG { (gs_epsf.ps: found %%HiResBoundingBox\n) print flush } if
+ 2 EPSBoundingBoxProcess
+ } {
+ pop % Not interested in this DSC comment
+ } ifelse
+ } ifelse
+ } ifelse
+ } if
+} bind def
+
+% Install EPS handler for DSC comments, which we do later
+/EPSBoundingBoxInit {
+ systemdict /NOEPS known not {
+ % Merge ProcessEPSComment with existing handler
+ /ProcessEPSComment load /exec load
+ currentuserparams /ProcessDSCComment get
+ dup null eq {pop {pop pop}} if /exec load
+ 4 array astore cvx readonly
+ << /ProcessDSCComment 3 -1 roll >> setuserparams
+ } if
+} bind def
+
+/.runNoEPS /run load def
+
+/.runEPS { % file OR string --
+ /runEPS_save save def
+ /runEPS_dict_count countdictstack def
+ /runEPS_op_count count 2 sub def
+ /runEPS_page_count currentpagedevice /PageCount get def
+ 0 EPSBoundingBoxSetState
+ .runNoEPS
+ currentpagedevice /PageCount get runEPS_page_count sub 0 eq
+ { /showpage load exec } if
+ count runEPS_op_count sub {pop} repeat
+ countdictstack runEPS_dict_count sub {end} repeat
+ runEPS_save restore
+} bind def
+
+/run { % file OR string --
+ dup type /filetype ne { (r) file } if
+ dup (%!PS-Adobe-) .peekstring {
+ (%!PS-Adobe-) eq {
+ dup (%!PS-Adobe-X.X EPSF-X.X) .peekstring {
+ (EPSF) search {
+ pop pop pop
+ DEBUG {(runEPS: Found EPS\n) print flush} if
+ systemdict /NOEPS known {
+ cvx .runNoEPS
+ } {
+ cvx .runEPS
+ } ifelse
+ } {
+ DEBUG {(runEPS: Normal DSC\n) print flush} if
+ pop
+ cvx .runNoEPS
+
+ } ifelse
+ } {
+ DEBUG {(runEPS: Short DSC\n) print flush} if
+ pop
+ cvx .runNoEPS
+ } ifelse
+ } {
+ DEBUG {(runEPS: Not DSC\n) print flush} if
+ cvx .runNoEPS
+ } ifelse
+ } {
+ DEBUG {(runEPS: Short non-DSC\n) print flush} if
+ pop
+ cvx .runNoEPS
+ } ifelse
+} bind odef
+
+
+% Handle DOS EPS files.
+
+/.runnoepsf /run load def
+/.epsfheader <C5D0D3C6> def
+/run
+ { dup type /filetype ne { (r) file } if
+ % Check for MS-DOS EPSF file (see Red Book p. 729).
+ dup ( ) .peekstring
+ { .epsfheader eq { dup ( ) readstring exch pop } { false } ifelse }
+ { pop false }
+ ifelse
+ % Stack: file true/false
+ { % This block is executed if the file is MS-DOS EPSF.
+ % Build up the little-endian byte offset and length.
+ 2
+ { 1 0 4
+ { 2 index read not { pop exit } if % if EOF, let error happen
+ 2 index mul add exch 256 mul exch
+ }
+ repeat exch pop exch
+ }
+ repeat
+ % Stack: offset length file
+ % Use flushfile to skip quickly to the start of the
+ % PostScript section.
+ dup 4 -1 roll 12 sub () /SubFileDecode filter flushfile
+ % Now interpret the PostScript.
+ exch () /SubFileDecode filter cvx run
+ }
+ { .runnoepsf
+ }
+ ifelse
+ } odef
+
+% rebind .runstdin to use redefined run
+userdict begin
+/.runstdin {
+ { (%stdin) run } execute0
+} bind def
+end
diff --git a/Master/xemtex/gslib/gs_fform.ps b/Master/xemtex/gslib/gs_fform.ps
new file mode 100644
index 00000000000..1042b014514
--- /dev/null
+++ b/Master/xemtex/gslib/gs_fform.ps
@@ -0,0 +1,93 @@
+% Copyright (C) 1995, 1996, 1998, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_fform.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Form caching implemented in PostScript.
+
+% This implementation doesn't do the right thing about halftone or
+% Pattern phase, but the Pattern cache doesn't either....
+
+% The Form cache key is the Form dictionary; the value is an array
+% of 2 elements [CTM pattern_instance].
+%
+% In order to prevent restore from clearing the cache, we explicitly
+% push the cache entries on the stack before a restore and reinstall them.
+currentglobal false setglobal
+/.formcachedict 20 dict def % must be local
+true setglobal
+/restore {
+ mark .formcachedict { } forall
+ counttomark 1 add index { //restore } .internalstopped
+ { cleartomark //restore }
+ { counttomark 2 idiv { .formcachedict 3 1 roll put } repeat pop pop }
+ ifelse
+} bind odef
+
+/.execform1 {
+ dup /Implementation known not {
+ dup /FormType get 1 ne { /rangecheck signalerror } if
+ % The Implementation is a Pattern that will draw the form.
+ currentglobal 1 index gcheck setglobal
+ % Stack: form global
+ 10 dict begin
+ /PatternType 1 def
+ /PaintType 1 def % colored
+ /TilingType 1 def % irrelevant
+ % Copy the BBox to the correct VM.
+ /BBox 2 index /BBox get 4 array copy exch 1 index def
+ % Set XStep and YStep to very large numbers,
+ % so we won't get multiple copies of the form.
+ /XStep 1 index dup 2 get exch 0 get sub 100 mul def
+ /YStep exch dup 3 get exch 1 get sub 100 mul def
+ /PaintProc 2 index /PaintProc get def
+ currentdict end readonly
+ % Stack: form global impl
+ exch setglobal
+ 1 index /Implementation 3 -1 roll .forceput
+ } if
+ .formcachedict 1 index .knownget {
+ % Check whether we can use the cached value.
+ % Stack: form cachevalue
+ matrix currentmatrix true 0 1 3 {
+ % Stack: form cachevalue curmat true index
+ 3 index 0 get 1 index get exch 3 index exch get ne {
+ pop pop false exit
+ } if
+ } for exch pop
+ } {
+ false
+ } ifelse not
+ { % Make a new cache entry.
+ gsave
+ matrix currentmatrix dup 4 0 put dup 5 0 put dup setmatrix
+ % Stack: form mat
+ 1 index /Implementation get
+ 2 index /Matrix get
+ makepattern 2 array astore
+ .formcachedict 2 index 2 index put
+ grestore
+ } if
+ % Stack: form cachevalue
+ -1 0 0 transform
+ 2 { exch round cvi } repeat .setscreenphase
+ 1 get setpattern
+ /BBox get aload pop
+ exch 3 index sub exch 2 index sub rectfill
+} .bind odef % must bind .forceput
+
+.formtypes 1 /.execform1 load put
+
+setglobal
diff --git a/Master/xemtex/gslib/gs_fonts.ps b/Master/xemtex/gslib/gs_fonts.ps
new file mode 100644
index 00000000000..3b0e3d08735
--- /dev/null
+++ b/Master/xemtex/gslib/gs_fonts.ps
@@ -0,0 +1,1041 @@
+% Copyright (C) 1990, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_fonts.ps,v 1.13.2.3.2.1 2003/04/12 14:02:38 giles Exp $
+% Font initialization and management code.
+
+% Define the default font.
+/defaultfontname /Courier def
+
+% Define the name of the font map file.
+/defaultfontmap (Fontmap) def
+
+% ------ End of editable parameters ------ %
+
+% Define the UniqueIDs and organization XUID assigned to Aladdin.
+% UniqueIDs 5,066,501 - 5,066,580 are assigned as follows:
+% 01 and 02 for shareware Cyrillic
+% 33 through 67 for Type 1 versions of the Hershey fonts
+% UniqueIDs 5,115,501 - 5,115,600 are currently unassigned.
+/AladdinEnterprisesXUID 107 def
+
+% If SUBSTFONT is defined, make it the default font.
+/SUBSTFONT where { pop /defaultfontname /SUBSTFONT load def } if
+
+% Define a reliable way of accessing FontDirectory in systemdict.
+/.FontDirectory
+{ /FontDirectory .systemvar
+} .bind odef
+
+% If DISKFONTS is true, we load individual CharStrings as they are needed.
+% (This is intended primarily for machines with very small memories.)
+% In this case, we define another dictionary, parallel to FontDirectory,
+% that retains an open file for every font loaded.
+/FontFileDirectory 10 dict def
+
+% Define a temporary string for local use, since using =string
+% interferes with some PostScript programs.
+/.fonttempstring 128 string def
+
+% Split up a search path into individual directories or files.
+/.pathlist % <path> .pathlist <dir1|file1> ...
+ { { dup length 0 eq { pop exit } if
+ .filenamelistseparator search not { exit } if
+ exch pop exch
+ }
+ loop
+ } bind def
+
+% Load a font name -> font file name map.
+userdict /Fontmap .FontDirectory maxlength dict put
+/.loadFontmap { % <file> .loadFontmap -
+ % We would like to simply execute .definefontmap as we read,
+ % but we have to maintain backward compatibility with an older
+ % specification that makes later entries override earlier
+ % ones within the same file.
+ 50 dict exch .readFontmap
+ { .definefontmap } forall
+} bind def
+/.readFontmap { % <dict> <file> .readFontmap <dict>
+ { dup token not { closefile exit } if
+ % stack: dict file fontname
+ % This is a hack to get around the absurd habit of MS-DOS editors
+ % of adding an EOF character at the end of the file.
+ dup (\032) eq { pop closefile exit } if
+ 1 index token not
+ { (Fontmap entry for ) print dup =only
+ ( has no associated file or alias name! Giving up.) = flush
+ {.readFontmap} 0 get 1 .quit
+ } if
+ dup type dup /stringtype eq exch /nametype eq or not
+ { (Fontmap entry for ) print 1 index =only
+ ( has an invalid file or alias name! Giving up.) = flush
+ {.readFontmap} 0 get 1 .quit
+ } if
+ % stack: dict file fontname filename|aliasname
+ 1 index type /stringtype eq
+ 1 index type /nametype eq and 1 index xcheck and
+ 1 index /run eq 2 index /.runlibfile eq or and {
+ % This is an inclusion entry.
+ pop findlibfile { exch pop } { file } ifelse
+ 2 index exch .readFontmap pop
+ } {
+ % This is a real entry.
+ % Read and pop tokens until a semicolon.
+ { 2 index token not
+ { (Fontmap entry for ) print 1 index =only
+ ( ends prematurely! Giving up.) = flush
+ {.loadFontmap} 0 get 1 .quit
+ } if
+ dup /; eq { pop 3 index 3 1 roll .growput exit } if
+ pop
+ } loop
+ } ifelse
+ } loop
+} bind def
+% Add an entry in Fontmap. We redefine this if the Level 2
+% resource machinery is loaded.
+/.definefontmap % <fontname> <file|alias> .definefontmap -
+ { % Since Fontmap is global, make sure the values are storable.
+ .currentglobal 3 1 roll true .setglobal
+ dup type /stringtype eq
+ { dup .gcheck not { dup length string copy } if
+ }
+ if
+ Fontmap 3 -1 roll 2 copy .knownget
+ { % Add an element to the end of the existing value,
+ % unless it's the same as the current last element.
+ mark exch aload pop counttomark 4 add -1 roll
+ 2 copy eq { cleartomark pop pop } { ] readonly .growput } ifelse
+ }
+ { % Make a new entry.
+ mark 4 -1 roll ] readonly .growput
+ }
+ ifelse .setglobal
+ } bind def
+
+% Parse a font file just enough to find the FontName or FontType.
+/.findfontvalue { % <file> <key> .findfontvalue <value> true
+ % <file> <key> .findfontvalue false
+ % Closes the file in either case.
+ exch dup read not { -1 } if
+ 2 copy unread 16#80 eq {
+ dup (xxxxxx) readstring pop pop % skip .PFB header
+ } if
+ { % Stack: key file
+ % Protect ourselves against syntax errors here.
+ dup { token } stopped { pop false exit } if
+ not { false exit } if % end of file
+ dup /eexec eq { pop false exit } if % reached eexec section
+ dup /Subrs eq { pop false exit } if % Subrs without eexec
+ dup /CharStrings eq { pop false exit } if % CharStrings without eexec
+ dup 3 index eq
+ { xcheck not { dup token exit } if } % found key
+ { pop }
+ ifelse
+ } loop
+ % Stack: key file value true (or)
+ % Stack: key file false
+ dup { 4 } { 3 } ifelse -2 roll closefile pop
+} bind def
+/.findfontname
+ { /FontName .findfontvalue
+ } bind def
+
+% If there is no FONTPATH, try to get one from the environment.
+NOFONTPATH { /FONTPATH () def } if
+/FONTPATH where
+ { pop }
+ { /FONTPATH (GS_FONTPATH) getenv not { () } if def }
+ifelse
+FONTPATH length 0 eq { (%END FONTPATH) .skipeof } if
+/FONTPATH [ FONTPATH .pathlist ] def
+
+% Scan directories looking for plausible fonts. "Plausible" means that
+% the file begins with %!PS-AdobeFont or %!FontType1, or with \200\001
+% followed by four arbitrary bytes and then either of these strings.
+% To speed up the search, we skip any file whose name appears in
+% the Fontmap (with any extension and upper/lower case variation) already,
+% and any file whose extension definitely indicates it is not a font.
+%
+% NOTE: The current implementation of this procedure is somewhat Unix/DOS-
+% specific. It assumes that '/' and '\' are directory separators, and that
+% the part of a file name following the last '.' is the extension.
+%
+/.lowerstring % <string> .lowerstring <lowerstring>
+ { 0 1 2 index length 1 sub
+ { 2 copy get dup 65 ge exch 90 le and
+ { 2 copy 2 copy get 32 add put }
+ if pop
+ }
+ for
+ } bind def
+/.splitfilename { % <dir.../base.extn> .basename <base> <extn>
+ % Make the file name read-only to detect aliasing bugs.
+ % We really don't like doing this, but we've had one
+ % such bug already.
+ readonly {
+ (/) search { true } { (\\) search } ifelse { pop pop } { exit } ifelse
+ } loop
+ dup { (.) search { pop pop } { exit } ifelse } loop
+ 2 copy eq {
+ pop ()
+ } {
+ exch dup length 2 index length 1 add sub 0 exch getinterval exch
+ } ifelse
+} bind def
+/.scanfontdict 1 dict def % establish a binding
+/.scanfontbegin
+ { % Construct the table of all file names already in Fontmap.
+ currentglobal true setglobal
+ .scanfontdict dup maxlength Fontmap length 2 add .max .setmaxlength
+ Fontmap
+ { exch pop
+ { dup type /stringtype eq
+ { .splitfilename pop .fonttempstring copy .lowerstring cvn
+ .scanfontdict exch true put
+ }
+ { pop
+ }
+ ifelse
+ }
+ forall
+ }
+ forall
+ setglobal
+ } bind def
+/.scanfontskip mark
+ % Strings are converted to names anyway, so....
+ /afm true
+ /bat true
+ /c true
+ /cmd true
+ /com true
+ /dir true
+ /dll true
+ /doc true
+ /drv true
+ /exe true
+ /fon true
+ /fot true
+ /h true
+ /o true
+ /obj true
+ /pfm true
+ /pss true % Adobe Multiple Master font instances
+ /txt true
+.dicttomark def
+/.scan1fontstring 128 string def
+% %%BeginFont: is not per Adobe documentation, but a few fonts have it.
+/.scanfontheaders [(%!PS-Adobe*) (%!FontType*) (%%BeginFont:*)] def
+0 .scanfontheaders { length .max } forall 6 add % extra for PFB header
+/.scan1fontfirst exch string def
+/.scanfontdir % <dirname> .scanfontdir -
+ { currentglobal exch true setglobal
+ QUIET not { (Scanning ) print dup print ( for fonts...) print flush } if
+ (*) 1 index .filenamedirseparator
+ dup (\\) eq { pop (\\\\) } if % double \ for pattern match
+ exch concatstrings concatstrings
+ 0 0 0 4 -1 roll % found scanned files
+ { % stack: <fontcount> <scancount> <filecount> <filename>
+ exch 1 add exch % increment filecount
+ dup .splitfilename .fonttempstring copy .lowerstring
+ % stack: <fontcount> <scancount> <filecount+1> <filename>
+ % <BASE> <ext>
+ .scanfontskip exch known exch .scanfontdict exch known or
+ { pop
+ % stack: <fontcount> <scancount> <filecount+1>
+ }
+ { 3 -1 roll 1 add 3 1 roll
+ % stack: <fontcount> <scancount+1> <filecount+1> <filename>
+ dup (r) { file } .internalstopped
+ { pop pop null ()
+ % stack: <fontcount> <scancount+1> <filecount+1> <filename>
+ % null ()
+ }
+ {
+ % On some platforms, the file operator will open directories,
+ % but an error will occur if we try to read from one.
+ % Handle this possibility here.
+ dup .scan1fontfirst { readstring } .internalstopped
+ { pop pop () }
+ { pop }
+ ifelse
+ % stack: <fontcount> <scancount+1> <filecount+1>
+ % <filename> <file> <header>
+ }
+ ifelse
+ % Check for PFB file header.
+ dup (\200\001????*) .stringmatch
+ { dup length 6 sub 6 exch getinterval }
+ if
+ % Check for font file headers.
+ false .scanfontheaders
+ { 2 index exch .stringmatch or
+ }
+ forall exch pop
+ { % stack: <fontcount> <scancount+1> <filecount+1> <filename>
+ % <file>
+ dup 0 setfileposition .findfontname
+ { dup Fontmap exch known
+ { pop pop
+ }
+ { exch copystring exch
+ DEBUG { ( ) print dup =only flush } if
+ 1 index .definefontmap
+ .splitfilename pop true .scanfontdict 3 1 roll .growput
+ % Increment fontcount.
+ 3 -1 roll 1 add 3 1 roll
+ }
+ ifelse
+ }
+ { pop
+ }
+ ifelse
+ }
+ % .findfontname will have done a closefile in the above case.
+ { dup null eq { pop } { closefile } ifelse pop
+ }
+ ifelse
+ }
+ ifelse
+ }
+ .scan1fontstring filenameforall
+ QUIET
+ { pop pop pop }
+ { ( ) print =only ( files, ) print =only ( scanned, ) print
+ =only ( new fonts.) = flush
+ }
+ ifelse
+ setglobal
+ } bind def
+
+%END FONTPATH
+
+% Create the dictionary that registers the .buildfont procedure (called by
+% definefont) for each FontType.
+/buildfontdict 20 dict def
+
+% Register Type 3 fonts, which are always supported, for definefont.
+buildfontdict 3 /.buildfont3 cvx put
+
+% Register Type 0 fonts if they are supported. Strictly speaking,
+% we should do this in its own file (gs_type0.ps), but since this is
+% the only thing that would be in that file, it's simpler to put it here.
+/.buildfont0 where { pop buildfontdict 0 /.buildfont0 cvx put } if
+
+% Define definefont. This is a procedure built on a set of operators
+% that do all the error checking and key insertion.
+/.growfontdict
+ { % Grow the font dictionary, if necessary, to ensure room for an
+ % added entry, making sure there is at least one slot left for FID.
+ dup maxlength 1 index length sub 2 lt
+ { dup dup wcheck
+ { .growdict }
+ { .growdictlength dict .copydict }
+ ifelse
+ }
+ { dup wcheck not { dup maxlength dict .copydict } if
+ }
+ ifelse
+ } bind def
+/.completefont {
+ { % Check for disabled platform fonts.
+ NOPLATFONTS
+ { % Make sure we leave room for FID.
+ .growfontdict dup /ExactSize 0 put
+ }
+ { % Hack: if the Encoding looks like it might be the
+ % Symbol or Dingbats encoding, load those now (for the
+ % benefit of platform font matching) just in case
+ % the font didn't actually reference them.
+ % Note that some types of font don't have an Encoding.
+ dup /Encoding .knownget {
+ dup length 65 ge {
+ 64 get
+ dup /congruent eq { SymbolEncoding pop } if
+ /a9 eq { DingbatsEncoding pop } if
+ } {
+ pop
+ } ifelse
+ } if
+ }
+ ifelse
+ true exch
+ % If this is a CIDFont, CIDFontType takes precedence
+ % over FontType.
+ dup /CIDFontType known {
+ /.buildcidfont where {
+ pop exch not exch % true => false
+ } if
+ } if
+ exch {
+ dup /FontType get //buildfontdict exch get exec
+ } {
+ .buildcidfont
+ } ifelse
+
+ DISKFONTS
+ { FontFileDirectory 2 index known
+ { dup /FontFile FontFileDirectory 4 index get .growput
+ }
+ if
+ }
+ if
+ readonly % stack: name fontdict
+ } stopped { /invalidfont signalerror } if
+} bind odef
+/definefont
+ { .completefont
+ % If the current allocation mode is global, also enter
+ % the font in LocalFontDirectory.
+ .currentglobal
+ { //systemdict /LocalFontDirectory .knownget
+ { 2 index 2 index .growput }
+ if
+ }
+ if
+ dup .FontDirectory 4 -2 roll .growput
+ % If the font originated as a resource, register it.
+ currentfile .currentresourcefile eq { dup .registerfont } if
+ } odef
+
+% Define a procedure for defining aliased fonts.
+% We use this only for explicitly aliased fonts, not substituted fonts:
+% we think this matches the observed behavior of Adobe interpreters.
+/.aliasfont % <name> <font> .aliasfont <newFont>
+ { .currentglobal 3 1 roll dup .gcheck .setglobal
+ dup length 2 add dict
+ dup 3 -1 roll { 1 index /FID eq { pop pop } { put dup } ifelse } forall
+ % Stack: global fontname newfont newfont.
+ % We might be defining a global font whose FontName
+ % is a local string. This is weird, but legal,
+ % and doesn't cause problems anywhere else:
+ % to avoid any possible problems in this case, do a cvn.
+ % We might also be defining (as an alias) a global font
+ % whose FontName is a local non-string, if someone passed a
+ % garbage value to findfont. In this case, just don't
+ % call definefont at all.
+ 2 index dup type /stringtype eq exch .gcheck or 1 index .gcheck not or
+ { /FontName 3 index dup type /stringtype eq { cvn } if put
+ % Don't bind in definefont, since Level 2 redefines it.
+ /definefont .systemvar exec
+ }
+ { .completefont pop exch pop
+ }
+ ifelse exch .setglobal
+ } odef % so findfont will bind it
+
+% Define .loadfontfile for loading a font. If we recognize Type 1 and/or
+% TrueType fonts, gs_type1.ps and/or gs_ttf.ps will redefine this.
+/.loadfontfile {
+ % According to Ed Taft, Adobe interpreters push userdict
+ % before loading a font, and pop it afterwards.
+ userdict begin
+ cvx exec
+ end
+} bind def
+/.loadfont
+ { % Some buggy fonts leave extra junk on the stack,
+ % so we have to make a closure that records the stack depth
+ % in a fail-safe way.
+ {{.loadfontfile} .execasresource} count 1 sub 2 .execn
+ count exch sub { pop } repeat
+ } bind def
+
+% Find an alternate font to substitute for an unknown one.
+% We go to some trouble to parse the font name and extract
+% properties from it. Later entries take priority over earlier.
+/.substitutefaces [
+ % Guess at suitable substitutions for random unknown fonts.
+ [(Book) /NewCenturySchlbk 0]
+ [(Grot) /Helvetica 0]
+ [(Roman) /Times 0]
+ [(Chancery) /ZapfChancery-MediumItalic 0]
+ % If the family name appears in the font name,
+ % use a font from that family.
+ [(Arial) /Helvetica 0]
+ [(Avant) /AvantGarde 0]
+ [(Bookman) /Bookman 0]
+ [(Century) /NewCenturySchlbk 0]
+ [(Cour) /Courier 0]
+ [(Frut) /Helvetica 0]
+ [(Garamond) /Palatino 0]
+ [(Geneva) /Helvetica 0]
+ [(Helv) /Helvetica 0]
+ [(NewYork) /Bookman 0]
+ [(Pala) /Palatino 0]
+ [(Schlbk) /NewCenturySchlbk 0]
+ [(Swiss) /Helvetica 0]
+ [(Symbol) /Symbol 0]
+ [(Times) /Times 0]
+ % Substitute for Adobe Multiple Master fonts.
+ [(Minion) /Times 0]
+ [(Myriad) /Helvetica 0]
+ % If the font wants to be monospace, use Courier.
+ [(Monospace) /Courier 0]
+ [(Typewriter) /Courier 0]
+ % Define substitutes for the other Adobe PostScript 3 fonts.
+ % For some of them, the substitution is pretty bad!
+ [(Albertus) /Palatino 0]
+ [(AntiqueOlive) /Helvetica 0]
+ [(Bodoni) /NewCenturySchlbk 0]
+ [(Chicago) /Helvetica 2]
+ [(Clarendon) /Bookman 0]
+ [(Cooper) /NewCenturySchlbk 0]
+ [(Copperplate) /AvantGarde 0] % inappropriate, small-cap font
+ [(Coronet) /ZapfChancery-MediumItalic 0]
+ [(Eurostile) /Helvetica 0]
+ [(Geneva) /Courier 2] % should be fixed-pitch sans demi
+ [(GillSans) /Helvetica 2]
+ [(GillSans-Light) /Helvetica 0]
+ [(Goudy) /Palatino 0]
+ [(Hoefler) /NewCenturySchlbk 0]
+ [(Joanna) /Times 0]
+ [(LetterGothic) /Courier 0] % should be fixed-pitch sans
+ [(LubalinGraph-Book) /Bookman 2]
+ [(LubalinGraph-Demi) /Bookman 0]
+ [(Marigold) /ZapfChancery-MediumItalic 0]
+ [(MonaLisa-Recut) /Palatino 0] % inappropriate
+ [(Monaco) /Courier 2] % should be fixed-pitch sans demi
+ [(Optima) /Helvetica 0]
+ [(Oxford) /ZapfChancery-MediumItalic 0]
+ [(Tekton) /Helvetica 0]
+ [(Univers) /Helvetica 0]
+] readonly def
+/.substituteproperties [
+ [(It) 9] [(Oblique) 1]
+ [(Black) 2] [(Bd) 2] [(Bold) 2] [(bold) 2] [(Demi) 2] [(Heavy) 2] [(Sb) 2]
+ [(Cn) 4] [(Cond) 4] [(Narrow) 4] [(Pkg) 4] [(Compr) 4]
+ [(Serif) 8] [(Sans) -8]
+] readonly def
+/.fontnameproperties { % <int> <string|name> .fontnameproperties
+ % <int'>
+ .fontnamestring
+ .substituteproperties {
+ 2 copy 0 get search {
+ pop pop pop dup length 1 sub 1 exch getinterval 3 -1 roll exch {
+ dup 0 ge { or } { neg not and } ifelse
+ } forall exch
+ } {
+ pop pop
+ } ifelse
+ } forall pop
+} bind def
+/.substitutefamilies mark
+ /AvantGarde
+ {/AvantGarde-Book /AvantGarde-BookOblique
+ /AvantGarde-Demi /AvantGarde-DemiOblique}
+ /Bookman
+ {/Bookman-Demi /Bookman-DemiItalic /Bookman-Light /Bookman-LightItalic}
+ /Courier
+ {/Courier /Courier-Oblique /Courier-Bold /Courier-BoldOblique}
+ /Helvetica
+ {/Helvetica /Helvetica-Oblique /Helvetica-Bold /Helvetica-BoldOblique
+ /Helvetica-Narrow /Helvetica-Narrow-Oblique
+ /Helvetica-Narrow-Bold /Helvetica-Narrow-BoldOblique}
+ /NewCenturySchlbk
+ {/NewCenturySchlbk-Roman /NewCenturySchlbk-Italic
+ /NewCenturySchlbk-Bold /NewCenturySchlbk-BoldItalic}
+ /Palatino
+ {/Palatino-Roman /Palatino-Italic /Palatino-Bold /Palatino-BoldItalic}
+ /Symbol
+ {/Symbol /Symbol /Symbol /Symbol}
+ /Times
+ {/Times-Roman /Times-Italic /Times-Bold /Times-BoldItalic}
+ /ZapfChancery-MediumItalic
+ {/ZapfChancery-MediumItalic}
+.dicttomark readonly def
+/.nametostring { % <name> .nametostring <string>
+ % <other> .nametostring <other>
+ dup type /nametype eq { .namestring } if
+} bind def
+/.fontnamestring { % <fontname> .fontnamestring <string|name>
+ dup type dup /nametype eq {
+ pop .namestring
+ } {
+ /stringtype ne { pop () } if
+ } ifelse
+} bind def
+/.substitutefontname { % <fontname> <properties> .substitutefontname
+ % <altname|null>
+ % Look for properties and/or a face name in the font name.
+ % If we find any, use Times (serif) or Helvetica (sans) as the
+ % base font; otherwise, use the default font.
+ % Note that the "substituted" font name may be the same as
+ % the requested one; the caller must check this.
+ exch .fontnamestring {
+ defaultfontname /Helvetica-Oblique /Helvetica-Bold /Helvetica-BoldOblique
+ /Helvetica-Narrow /Helvetica-Narrow-Oblique
+ /Helvetica-Narrow-Bold /Helvetica-Narrow-BoldOblique
+ /Times-Roman /Times-Italic /Times-Bold /Times-BoldItalic
+ /Helvetica-Narrow /Helvetica-Narrow-Oblique
+ /Helvetica-Narrow-Bold /Helvetica-Narrow-BoldOblique
+ } 3 1 roll
+ % Stack: facelist properties fontname
+ % Look for a face name.
+ .substitutefaces {
+ 2 copy 0 get search {
+ pop pop pop
+ % Stack: facelist properties fontname [(pattern) family properties]
+ dup 2 get 4 -1 roll or 3 1 roll
+ 1 get .substitutefamilies exch get
+ 4 -1 roll pop 3 1 roll
+ } {
+ pop pop
+ } ifelse
+ } forall pop
+ 1 index length mod get exec
+} bind def
+/.substitutefont { % <fontname> .substitutefont <altname>
+ dup 0 exch .fontnameproperties .substitutefontname
+ % Only accept fonts known in the Fontmap.
+ Fontmap 1 index known not { pop defaultfontname } if
+} bind def
+
+% If requested, make (and recognize) fake entries in FontDirectory for fonts
+% present in Fontmap but not actually loaded. Thanks to Ray Johnston for
+% the idea behind this code.
+FAKEFONTS not { (%END FAKEFONTS) .skipeof } if
+
+% We use the presence or absence of the FontMatrix key to indicate whether
+% a font is real or fake. We must pop the arguments at the very end,
+% so that stack protection will be effective.
+
+/definefont { % <name> <font> definefont <font>
+ dup /FontMatrix known {
+ //definefont
+ } {
+ 2 copy /FontName get findfont //definefont exch pop exch pop
+ } ifelse
+} bind odef
+
+/scalefont { % <font> <scale> scalefont <font>
+ 1 index /FontMatrix known {
+ //scalefont
+ } {
+ 1 index /FontName get findfont 1 index //scalefont
+ exch pop exch pop
+ } ifelse
+} bind odef
+
+/makefont { % <font> <matrix> makefont <font>
+ 1 index /FontMatrix known {
+ //makefont
+ } {
+ 1 index /FontName get findfont 1 index //makefont
+ exch pop exch pop
+ } ifelse
+} bind odef
+
+/setfont { % <font> setfont -
+ dup /FontMatrix known {
+ //setfont
+ } {
+ dup /FontName get findfont //setfont pop
+ } ifelse
+} bind odef
+
+%END FAKEFONTS
+
+% Define findfont so it tries to load a font if it's not found.
+% The Red Book requires that findfont be a procedure, not an operator,
+% but it still needs to restore the stacks reliably if it fails,
+% so we do all the work in an operator.
+/.findfont {
+ mark 1 index
+ //systemdict begin .dofindfont
+ % Define any needed aliases.
+ counttomark 1 sub { .aliasfont } repeat end
+ exch pop exch pop
+} odef
+/findfont {
+ .findfont
+} bind def
+% Check whether the font name we are about to look for is already on the list
+% of aliases we're accumulating; if so, cause an error.
+/.checkalias % -mark- <alias1> ... <name> .checkalias <<same>>
+ { counttomark 1 sub -1 1
+ { index 1 index eq
+ { pop QUIET not
+ { (Unable to substitute for font.) = flush
+ } if
+ /findfont cvx /invalidfont signalerror
+ }
+ if
+ }
+ for
+ } bind def
+% Get a (non-fake) font if present in a FontDirectory.
+/.fontknownget % <fontdir> <fontname> .fontknownget <font> true
+ % <fontdir> <fontname> .fontknownget false
+ { .knownget
+ { FAKEFONTS
+ { dup /FontMatrix known { true } { pop false } ifelse }
+ { true }
+ ifelse
+ }
+ { false
+ }
+ ifelse
+ } bind def
+% This is the standard procedure for handling font substitution.
+% Its location is per an Adobe newsgroup posting.
+% It is called with the font name on the stack, standing in for findfont.
+/.stdsubstfont { % mark <alias1> ... <fontname> .stdsubstfont <font>
+ /SUBSTFONT where {
+ pop QUIET not {
+ (Substituting for font ) print dup =only
+ (.) = flush
+ } if
+ % No aliasing.
+ cleartomark mark defaultfontname
+ } {
+ dup .substitutefont
+ 2 copy eq { pop defaultfontname } if
+ .checkalias
+ QUIET not {
+ SHORTERRORS {
+ (%%[) print 1 index =only
+ ( not found, substituting ) print dup =only (]%%)
+ } {
+ (Substituting font ) print dup =only
+ ( for ) print 1 index =only (.)
+ } ifelse = flush
+ } if
+ % Remove all the accumulated aliases.
+ counttomark 1 add 1 roll cleartomark mark exch
+ } ifelse
+ .dofindfont
+} bind def
+$error /SubstituteFont { .stdsubstfont } put
+% Scan the next directory on FONTPATH.
+/.scannextfontdir { % - .scannextfontdir <bool>
+ % If we haven't scanned all the directories in
+ % FONTPATH, scan the next one.
+ null 0 1 FONTPATH length 1 sub {
+ FONTPATH 1 index get null ne { exch pop exit } if pop
+ } for dup null ne {
+ dup 0 eq { .scanfontbegin } if
+ FONTPATH 1 index get .scanfontdir
+ FONTPATH exch null put true
+ } {
+ pop false
+ } ifelse
+} bind def
+% Do the work of findfont, including substitution, defaulting, and
+% scanning of FONTPATH.
+/.dofindfont { % <fontname> .dofindfont <font>
+ .tryfindfont not {
+ % We didn't find the font. If we haven't scanned
+ % all the directories in FONTPATH, scan the next one
+ % now and look for the font again.
+ .scannextfontdir {
+ % Start over with an empty alias list.
+ counttomark 1 sub { pop } repeat
+ .dofindfont
+ } {
+ % No luck. Make sure we're not already
+ % looking for the default font.
+ dup defaultfontname eq {
+ QUIET not {
+ (Unable to load default font ) print
+ dup =only (! Giving up.) = flush
+ } if
+ /findfont cvx /invalidfont signalerror
+ } if
+ % Substitute for the font. Don't alias.
+ $error /SubstituteFont get exec
+ } ifelse
+ } if
+} bind def
+% Try to find a font using only the present contents of Fontmap.
+/.tryfindfont { % <fontname> .tryfindfont <font> true
+ % <fontname> .tryfindfont false
+ .FontDirectory 1 index .fontknownget
+ { % Already loaded
+ exch pop true
+ }
+ { dup Fontmap exch .knownget not
+ { % Unknown font name. Look for a file with the
+ % same name as the requested font.
+ .tryloadfont
+ }
+ { % Try each element of the Fontmap in turn.
+ false exch % (in case we exhaust the list)
+ % Stack: fontname false fontmaplist
+ { exch pop
+ dup type /nametype eq
+ { % Font alias
+ .checkalias .tryfindfont exit
+ }
+ { dup dup type dup /arraytype eq exch /packedarraytype eq or exch xcheck and
+ { % Font with a procedural definition
+ exec % The procedure will load the font.
+ % Check to make sure this really happened.
+ .FontDirectory 1 index .knownget
+ { exch pop true exit }
+ if
+ }
+ { % Font file name
+ .loadfontloop { true exit } if
+ }
+ ifelse
+ }
+ ifelse false
+ }
+ forall
+ % Stack: font true -or- fontname false
+ { true
+ }
+ { % None of the Fontmap entries worked.
+ % Try loading a file with the same name
+ % as the requested font.
+ .tryloadfont
+ }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ } bind def
+
+% Attempt to load a font from a file.
+/.tryloadfont { % <fontname> .tryloadfont <font> true
+ % <fontname> .tryloadfont false
+ dup .nametostring
+ % Hack: check for the presence of the resource machinery.
+ /.genericrfn where {
+ pop
+ 2 copy .fonttempstring /FontResourceDir getsystemparam .genericrfn
+ .loadfontloop {
+ exch pop exch pop true
+ } {
+ dup .nametostring .loadfontloop
+ } ifelse
+ } {
+ .loadfontloop
+ } ifelse
+} bind def
+/.loadfontloop { % <fontname> <filename> .loadfontloop
+ % <font> true
+ % -or-
+ % <fontname> false
+ % See above regarding the use of 'loop'.
+ { % Is the font name a string?
+ dup type /stringtype ne
+ { QUIET not
+ { (Can't find font with non-string name: ) print dup =only (.) = flush
+ }
+ if pop false exit
+ }
+ if
+ % Can we open the file?
+ findlibfile not
+ { QUIET not
+ { (Can't find \(or can't open\) font file ) print dup print
+ (.) = flush
+ }
+ if pop false exit
+ }
+ if
+
+ % Stack: fontname fontfilename fontfile
+ DISKFONTS
+ { .currentglobal true .setglobal
+ 2 index (r) file
+ FontFileDirectory exch 5 index exch .growput
+ .setglobal
+ }
+ if
+ QUIET not
+ { (Loading ) print 2 index =only
+ ( font from ) print 1 index print (... ) print flush
+ }
+ if
+ % If LOCALFONTS isn't set, load the font into local or global
+ % VM according to FontType; if LOCALFONTS is set, load the font
+ % into the current VM, which is what Adobe printers (but not
+ % DPS or CPSI) do.
+ LOCALFONTS { false } { /setglobal where } ifelse
+ { pop /FontType .findfontvalue { 1 eq } { false } ifelse
+ % .setglobal, like setglobal, aliases FontDirectory to
+ % GlobalFontDirectory if appropriate. However, we mustn't
+ % allow the current version of .setglobal to be bound in,
+ % because it's different depending on language level.
+ .currentglobal exch /.setglobal .systemvar exec
+ % Remove the fake definition, if any.
+ .FontDirectory 3 index .undef
+ 1 index (r) file .loadfont .FontDirectory exch
+ /.setglobal .systemvar exec
+ }
+ { .loadfont .FontDirectory
+ }
+ ifelse
+ % Stack: fontname fontfilename fontdirectory
+ QUIET not
+ { //systemdict /level2dict known
+ { .currentglobal false .setglobal vmstatus
+ true .setglobal vmstatus 3 -1 roll pop
+ 6 -1 roll .setglobal 5
+ }
+ { vmstatus 3
+ }
+ ifelse { =only ( ) print } repeat
+ (done.) = flush
+ } if
+
+ % Check to make sure the font was actually loaded.
+ dup 3 index .fontknownget
+ { 4 1 roll pop pop pop true exit } if
+
+ % Maybe the file had a different FontName.
+ % See if we can get a FontName from the file, and if so,
+ % whether a font by that name exists now.
+ exch (r) file .findfontname
+ { 2 copy .fontknownget
+ { % Yes. Stack: origfontname fontdirectory filefontname fontdict
+ 3 -1 roll pop exch
+ QUIET
+ { pop
+ }
+ { (Using ) print =only
+ ( font for ) print 1 index =only
+ (.) = flush
+ }
+ ifelse true exit
+ }
+ if pop
+ }
+ if pop
+
+ % The font definitely did not load correctly.
+ QUIET not
+ { (Loading ) print dup =only
+ ( font failed.) = flush
+ } if
+ false exit
+
+ } loop % end of loop
+
+ } bind def
+
+% Define a procedure to load all known fonts.
+% This isn't likely to be very useful.
+/loadallfonts
+ { Fontmap { pop findfont pop } forall
+ } bind def
+
+% If requested, load all the fonts defined in the Fontmap into FontDirectory
+% as "fake" fonts i.e., font dicts with only FontName and FontType defined.
+% (We define FontType only for the sake of some questionable code in the
+% Apple Printer Utility 2.0 font inquiry code.)
+%
+% Note that this procedure only creates fake fonts in the FontDirectory
+% associated with the current VM. This is because in multi-context systems,
+% creating the fake fonts in local VM leads to undesirable complications.
+/.definefakefonts
+ {
+ }
+ {
+ (gs_fonts FAKEFONTS) VMDEBUG
+ Fontmap {
+ pop dup type /stringtype eq { cvn } if
+ .FontDirectory 1 index known not {
+ 2 dict dup /FontName 3 index put
+ dup /FontType 1 put
+ .FontDirectory 3 1 roll put
+ } {
+ pop
+ } ifelse
+ } forall
+ }
+FAKEFONTS { exch } if pop def % don't bind, .current/setglobal get redefined
+
+% Install initial fonts from Fontmap.
+/.loadinitialfonts
+ { NOFONTMAP not
+ { /FONTMAP where
+ { pop [ FONTMAP .pathlist ]
+ { dup VMDEBUG findlibfile
+ { exch pop .loadFontmap }
+ { /undefinedfilename signalerror }
+ ifelse
+ }
+ }
+ { LIBPATH
+ { defaultfontmap 1 index .filenamedirseparator
+ exch concatstrings concatstrings dup VMDEBUG
+ (r) { file } .internalstopped
+ { pop pop } { .loadFontmap } ifelse
+ }
+ }
+ ifelse forall
+ }
+ if
+ .definefakefonts % current VM is global
+ } def % don't bind, .current/setglobal get redefined
+
+% ---------------- Synthetic font support ---------------- %
+
+% Create a new font by modifying an existing one. paramdict contains
+% entries with the same keys as the ones found in a Type 1 font;
+% it should also contain enough empty entries to allow adding the
+% corresponding non-overridden entries from the original font dictionary,
+% including FID. If paramdict includes a FontInfo entry, this will
+% also override the original font's FontInfo, entry by entry;
+% again, it must contain enough empty entries.
+
+% Note that this procedure does not perform a definefont.
+
+/.makemodifiedfont % <fontdict> <paramdict> .makemodifiedfont <fontdict'>
+ { exch
+ { % Stack: destdict key value
+ 1 index /FID ne
+ { 2 index 2 index known
+ { % Skip fontdict entry supplied in paramdict, but
+ % handle FontInfo specially.
+ 1 index /FontInfo eq
+ { 2 index 2 index get % new FontInfo
+ 1 index % old FontInfo
+ { % Stack: destdict key value destinfo key value
+ 2 index 2 index known
+ { pop pop }
+ { 2 index 3 1 roll put }
+ ifelse
+ }
+ forall pop
+ }
+ if
+ }
+ { % No override, copy the fontdict entry.
+ 2 index 3 1 roll put
+ dup dup % to match pop pop below
+ }
+ ifelse
+ }
+ if
+ pop pop
+ } forall
+ } bind def
+
+% Make a modified font and define it. Note that unlike definefont,
+% this does not leave the font on the operand stack.
+
+/.definemodifiedfont % <fontdict> <paramdict> .definemodifiedfont -
+ { .makemodifiedfont
+ dup /FontName get exch definefont pop
+ } bind def
diff --git a/Master/xemtex/gslib/gs_frsd.ps b/Master/xemtex/gslib/gs_frsd.ps
new file mode 100644
index 00000000000..10593579bf3
--- /dev/null
+++ b/Master/xemtex/gslib/gs_frsd.ps
@@ -0,0 +1,83 @@
+% Copyright (C) 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_frsd.ps,v 1.4.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Implementation of ReusableStreamDecode filter.
+% This file must be loaded after gs_lev2.ps and gs_res.ps.
+
+level2dict begin
+
+% ------ ReusableStreamDecode filter ------ %
+
+/.reusablestreamdecode { % <source> <dict> .reusablestreamdecode <file>
+ % <source> .reusablestreamdecode <file>
+ % Collect the filter parameters.
+ dup type /dicttype eq { 2 copy } { dup 0 dict } ifelse
+ dup .rsdparams
+ % Construct the filter pipeline.
+ % The very first filter should use the value of CloseSource
+ % from the RSD dictionary; all the others should have
+ % CloseSource = true.
+ % Stack: source dict filters parms
+ 2 index /CloseSource .knownget not { false } if 5 -1 roll
+ % Stack: dict filters parms CloseSource source
+ 0 1 5 index length 1 sub {
+ 4 index 1 index get
+ % Stack: dict filters parms CloseSource source index filtname
+ 4 index null eq {
+ 0 dict
+ } {
+ 4 index 2 index get dup null eq { pop } if
+ } ifelse
+ 3 -1 roll pop exch filter
+ exch pop true exch % set CloseSource for further filters
+ } for
+ % If AsyncRead is true, try to create the filter directly.
+ % Stack: dict filters parms CloseSource source
+ 4 index /AsyncRead .knownget not { false } if {
+ 1 index { .reusablestream } .internalstopped
+ } {
+ null true
+ } ifelse {
+ pop
+ % No luck. Read the entire contents of the stream now.
+ dup type /filetype ne {
+ % Make a stream from a procedure or string data source.
+ 0 () .subfiledecode
+ } if
+ 10 dict exch {
+ % Stack: dict filters parms CloseSource contdict file
+ dup 1000 string readstring
+ 3 index dup length 4 -1 roll put not { exit } if
+ } loop pop
+ % Concatenate the contents into one big string.
+ % Stack: dict filters parms CloseSource contdict
+ 0 1 index { length exch pop add } forall
+ .bigstring exch {
+ % Stack: dict filters parms CloseSource string index substring
+ exch 1000 mul exch 2 index 3 1 roll putinterval
+ } forall
+ % Now create the stream on the string.
+ 1 index .reusablestream
+ } if
+ % We created the stream successfully: clean up.
+ 4 { exch pop } repeat
+ 1 index type /dicttype eq { exch pop } if exch pop
+} odef
+
+filterdict /ReusableStreamDecode /.reusablestreamdecode load put
+
+end % level2dict
diff --git a/Master/xemtex/gslib/gs_icc.ps b/Master/xemtex/gslib/gs_icc.ps
new file mode 100644
index 00000000000..323462342f1
--- /dev/null
+++ b/Master/xemtex/gslib/gs_icc.ps
@@ -0,0 +1,115 @@
+% Copyright (C) 2001 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_icc.ps,v 1.2.2.1.2.1 2003/04/12 14:02:38 giles Exp $
+% PostScript portion of ICCBased color space support
+
+//userdict /.icc_comp_map_dict
+ << 1 /DeviceGray 3 /DeviceRGB 4 /DeviceCMYK >>
+put
+
+colorspacedict /ICCBased
+ {
+ % Verify that the source object is an array, that it is at least of length
+ % two, and that the second entry is a readable dictionary. If we got this
+ % far, we know the top-level object exists and is readable, but it might
+ % be a dictionary.
+ dup type dup /arraytype ne exch /packedarraytype ne and
+ { /setcolorspace /typecheck signalerror }
+ if
+ dup length 2 lt
+ { /setcolorspace /rangecheck signalerror }
+ if
+ dup 1 get type /dicttype ne
+ { /setcolorspace /typecheck signalerror }
+ if
+ dup 1 get rcheck not
+ { /setcolorspace /invalidaccess signalerror }
+ if
+
+ % Verify that the dictionary defines the key N (number of components) and
+ % entry is provided and has a legitimate value
+ dup 1 get /N .knownget
+ {
+ //.icc_comp_map_dict exch known not
+ {
+ % generate the appropriate error
+ /setcolorspace
+ 1 index 1 get /N type type /integertype ne
+ { /typecheck }
+ { /rangecheck }
+ ifelse
+ signalerror
+ }
+ if
+ }
+ { /setcolorspace /undefined signalerror }
+ ifelse
+
+ % Verify DataSrouce and, if it is a string, convert it to a file
+ dup 1 get /DataSource .knownget
+ {
+ dup rcheck not
+ { pop /setcolorspace /invalidaccess signalerror }
+ if
+ type dup /stringtype eq
+ {
+ pop
+ 2 array copy
+ dup 1
+ 2 copy get dup length dict copy
+ dup /DataSource
+ 2 copy get /ReusableStreamDecode filter
+ put
+ put
+ }
+ {
+ /filetype ne
+ { /setcolorspace /typecheck signalerror }
+ if
+ }
+ ifelse
+ }
+ { /setcolorspace /undefined signalerror }
+ ifelse
+
+ % set the alternate color space to be the current color space
+ dup 1 get /Alternate .knownget not
+ { dup 1 get /N get //.icc_comp_map_dict exch get }
+ if
+ setcolorspace
+
+ % if CIE spaces are not use, just take the alternate space
+ NOCIE
+ { pop //null }
+ { % check for native support
+ /.seticcspace where
+ { pop dup 1 get
+ % Acrobat Reader silently ignores errors with ICC profiles
+ % and uses the alternate color space -- do the same.
+ mark exch { .seticcspace } stopped
+ { cleartomark pop //null }
+ { pop }
+ ifelse
+ }
+ { pop //null }
+ ifelse
+ }
+ ifelse
+ }
+bind put
+
+//userdict /.icc_comp_map_dict undef
diff --git a/Master/xemtex/gslib/gs_il1_e.ps b/Master/xemtex/gslib/gs_il1_e.ps
new file mode 100644
index 00000000000..5557cc5bdef
--- /dev/null
+++ b/Master/xemtex/gslib/gs_il1_e.ps
@@ -0,0 +1,67 @@
+% Copyright (C) 1993, 1994, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_il1_e.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Define the ISO Latin-1 encoding vector.
+% The first half is the same as the standard encoding,
+% except for minus instead of hyphen at code 055.
+/ISOLatin1Encoding
+StandardEncoding 0 45 getinterval aload pop
+ /minus
+StandardEncoding 46 82 getinterval aload pop
+% NOTE: the following are missing in the Adobe documentation,
+% but appear in the displayed table:
+% macron at 0225, dieresis at 0230, cedilla at 0233, space at 0240.
+% This is an error in the Red Book, corrected in Adobe TN 5085.
+% \20x
+ /.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
+% \24x
+ /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
+% \30x
+ /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
+% \34x
+ /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
+% Make an array on large systems, a packed array on small ones.
+256
+vmstatus exch pop exch pop
+100000 ge { array astore readonly } { packedarray } ifelse
+def
+1 ISOLatin1Encoding .registerencoding
+/ISOLatin1Encoding ISOLatin1Encoding .defineencoding
diff --git a/Master/xemtex/gslib/gs_il2_e.ps b/Master/xemtex/gslib/gs_il2_e.ps
new file mode 100644
index 00000000000..bbfcfbb1496
--- /dev/null
+++ b/Master/xemtex/gslib/gs_il2_e.ps
@@ -0,0 +1,64 @@
+% Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_il2_e.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Define the ISO Latin-2 (8859-2) encoding vector.
+
+% The original version of this encoding vector used Unicode names, rather
+% than Adobe names, for many characters. Here are the names that appeared
+% in the original version:
+% \047 /quoteright /apostrophe
+% \056 /period /fullstop
+% \137 /underscore /lowline
+% \140 /quoteleft /grave
+% \055 is /hyphen in StandardEncoding, but /minus in 8859-1; we follow
+% 8859-1 here. In addition, the following substitutions were made:
+% /Lstroke => /Lslash
+% /Dstroke => /Dcroat
+% /*diaeresis => /*dieresis
+% /softhyphen => /hyphen
+% /*abovedot => /*dotaccent
+% /*doubleacute => /*hungarumlaut
+% /division => /divide
+% /ssharp => /germandbls
+
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/ISOLatin2Encoding
+% The first 144 entries are the same as the ISO Latin-1 encoding.
+ISOLatin1Encoding 0 144 getinterval aload pop
+% \22x
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+% \24x
+ /nbspace /Aogonek /breve /Lslash /currency /Lcaron /Sacute /section
+ /dieresis /Scaron /Scedilla /Tcaron /Zacute /hyphen /Zcaron /Zdotaccent
+ /degree /aogonek /ogonek /lslash /acute /lcaron /sacute /caron
+ /cedilla /scaron /scedilla /tcaron /zacute /hungarumlaut /zcaron /zdotaccent
+% \30x
+ /Racute /Aacute /Acircumflex /Abreve /Adieresis /Lacute /Cacute /Ccedilla
+ /Ccaron /Eacute /Eogonek /Edieresis /Ecaron /Iacute /Icircumflex /Dcaron
+ /Dcroat /Nacute /Ncaron /Oacute /Ocircumflex /Ohungarumlaut /Odieresis /multiply
+ /Rcaron /Uring /Uacute /Uhungarumlaut /Udieresis /Yacute /Tcedilla /germandbls
+% \34x
+ /racute /aacute /acircumflex /abreve /adieresis /lacute /cacute /ccedilla
+ /ccaron /eacute /eogonek /edieresis /ecaron /iacute /icircumflex /dcaron
+ /dcroat /nacute /ncaron /oacute /ocircumflex /ohungarumlaut /odieresis /divide
+ /rcaron /uring /uacute /uhungarumlaut /udieresis /yacute /tcedilla /dotaccent
+256 packedarray .defineencoding
+exec
diff --git a/Master/xemtex/gslib/gs_init.ps b/Master/xemtex/gslib/gs_init.ps
new file mode 100644
index 00000000000..b8938dd0750
--- /dev/null
+++ b/Master/xemtex/gslib/gs_init.ps
@@ -0,0 +1,1885 @@
+% (C) 1989, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_init.ps,v 1.40.2.12.2.3 2003/04/12 14:02:38 giles Exp $
+% Initialization file for the interpreter.
+% When this is run, systemdict is still writable.
+
+% Comment lines of the form
+% %% Replace <n> <file(s)>
+% indicate places where the next <n> lines should be replaced by
+% the contents of <file(s)>, when creating a single merged init file.
+
+% The interpreter can call out to PostScript code. All procedures
+% called in this way, and no other procedures defined in these
+% initialization files, have names that begin with %, e.g.,
+% (%Type1BuildChar) cvn.
+
+% Check the interpreter revision. NOTE: the interpreter code requires
+% that the first non-comment token in this file be an integer.
+707
+dup revision ne
+ { (gs: Interpreter revision \() print revision 10 string cvs print
+ (\) does not match gs_init.ps revision \() print 10 string cvs print
+ (\).\n) print flush null 1 .quit
+ }
+if pop
+
+% Acquire userdict, and set its length if necessary.
+/userdict where
+ { pop userdict maxlength 0 eq }
+ { true }
+ifelse
+systemdict exch
+ { % userdict wasn't already set up by iinit.c.
+ dup /userdict
+ currentdict dup 200 .setmaxlength % userdict
+ .forceput % userdict is local, systemdict is global
+ }
+if begin
+
+% Define dummy local/global operators if needed.
+systemdict /.setglobal known
+ { true .setglobal
+ }
+ { /.setglobal { pop } bind def
+ /.currentglobal { false } bind def
+ /.gcheck { pop false } bind def
+ }
+ifelse
+
+% Define .languagelevel if needed.
+systemdict /.languagelevel known not { /.languagelevel 1 def } if
+
+% Optionally choose a default paper size other than U.S. letter.
+% (a4) /PAPERSIZE where { pop pop } { /PAPERSIZE exch def } ifelse
+
+% Turn on array packing for the rest of initialization.
+true setpacking
+
+% Define the old MS-DOS EOF character as a no-op.
+% This is a hack to get around the absurd habit of MS-DOS editors
+% of adding an EOF character at the end of the file.
+<1a> cvn { } def
+
+% Acquire the debugging flags.
+currentdict /DEBUG known /DEBUG exch def
+ /VMDEBUG
+ DEBUG {{print mark
+ systemdict /level2dict known
+ { .currentglobal dup false .setglobal vmstatus
+ true .setglobal vmstatus 3 -1 roll pop
+ 6 -2 roll pop .setglobal
+ }
+ { vmstatus 3 -1 roll pop
+ }
+ ifelse usertime 16#fffff and counttomark
+ { ( ) print ( ) cvs print }
+ repeat pop
+ ( ) print systemdict length ( ) cvs print
+ ( ) print countdictstack ( ) cvs print
+ ( <) print count ( ) cvs print (>\n) print flush
+ }}
+ {{pop
+ }}
+ ifelse
+ def
+
+currentdict /BATCH known /BATCH exch def
+currentdict /DELAYBIND known /DELAYBIND exch def
+currentdict /DISKFONTS known /DISKFONTS exch def
+currentdict /DOINTERPOLATE .knownget { /INTERPOLATE exch def } if
+currentdict /ESTACKPRINT known /ESTACKPRINT exch def
+currentdict /FAKEFONTS known /FAKEFONTS exch def
+currentdict /FIXEDMEDIA known /FIXEDMEDIA exch def
+currentdict /FIXEDRESOLUTION known /FIXEDRESOLUTION exch def
+currentdict /LOCALFONTS known /LOCALFONTS exch def
+currentdict /NOBIND known /NOBIND exch def
+/.bind /bind load def
+NOBIND { /bind { } def } if
+currentdict /NOCACHE known /NOCACHE exch def
+currentdict /NOCCFONTS known /NOCCFONTS exch def
+currentdict /NOCIE known /NOCIE exch def
+currentdict /NODISPLAY known not /DISPLAYING exch def
+currentdict /NOFONTMAP known /NOFONTMAP exch def
+currentdict /NOCIDFONTMAP known /NOCIDFONTMAP exch def
+currentdict /NOFONTPATH known /NOFONTPATH exch def
+currentdict /NOGC known /NOGC exch def
+currentdict /NOINTERPOLATE .knownget { /INTERPOLATE exch not def } if
+currentdict /NOPAGEPROMPT known /NOPAGEPROMPT exch def
+currentdict /NOPAUSE known /NOPAUSE exch def
+currentdict /NOPLATFONTS known /NOPLATFONTS exch def
+currentdict /NOPROMPT known /NOPROMPT exch def
+% The default value of ORIENT1 is true, not false.
+currentdict /ORIENT1 known not { /ORIENT1 true def } if
+currentdict /OSTACKPRINT known /OSTACKPRINT exch def
+currentdict /OUTPUTFILE known % obsolete
+ { /OutputFile /OUTPUTFILE load def
+ currentdict /OUTPUTFILE .undef
+ } if
+currentdict /QUIET known /QUIET exch def
+% DELAYSAFER is effectively the same as newer NOSAFER
+currentdict /DELAYSAFER known { /DELAYSAFER true def /NOSAFER true def } if
+currentdict /PARANOIDSAFER known /PARANOIDSAFER exch def
+/SAFER currentdict /NOSAFER known {
+ false
+} {
+ currentdict /SAFER known PARANOIDSAFER or
+}
+ifelse def
+currentdict /SHORTERRORS known /SHORTERRORS exch def
+currentdict /STRICT known /STRICT exch def
+currentdict /TTYPAUSE known /TTYPAUSE exch def
+currentdict /WRITESYSTEMDICT known /WRITESYSTEMDICT exch def
+
+% Acquire environment variables.
+currentdict /DEVICE known not
+ { (GS_DEVICE) getenv { /DEVICE exch def } if } if
+
+(START) VMDEBUG
+
+% Open the standard files, so they will be open at the outermost save level.
+(%stdin) (r) file pop
+(%stdout) (w) file pop
+(%stderr) (w) file pop
+
+/.currentuserparams where {
+ pop mark
+ % The Adobe implementations appear to have very large maximum
+ % stack sizes. This turns out to actually make a difference,
+ % since some badly-behaved files include extremely long procedures,
+ % or construct huge arrays on the operand stack.
+ % We reset the stack sizes now so that we don't have to worry
+ % about overflowing the (rather small) built-in stack sizes
+ % during initialization.
+ /MaxDictStack 500
+ /MaxExecStack 5000
+ /MaxOpStack 50000
+ .dicttomark .setuserparams
+} if
+
+% Define a procedure for skipping over an unneeded section of code.
+% This avoids allocating space for the skipped procedures.
+% We can't use readline, because that imposes a line length limit.
+/.skipeof % <string> .skipeof -
+ { currentfile exch 1 exch .subfiledecode flushfile
+ } .bind def
+
+% Define procedures to assist users who don't read the documentation.
+userdict begin
+/help
+ { (Enter PostScript commands. '(filename) run' runs a file, 'quit' exits.\n)
+ print flush
+ } .bind def
+end
+
+% Define =string, which is used by some PostScript programs even though
+% it isn't documented anywhere.
+% Put it in userdict so that each context can have its own copy.
+userdict /=string 256 string put
+
+% Print the greeting.
+
+/printgreeting
+ { mark
+ product (Ghostscript) search
+ { pop pop pop
+ (This software comes with NO WARRANTY: see the file PUBLIC for details.\n)
+ }
+ { pop
+ }
+ ifelse
+ (\n) copyright
+ (\)\n) revisiondate 10 mod revisiondate 10 idiv 10 mod (-)
+ revisiondate 100 idiv 10 mod revisiondate 1000 idiv 10 mod (-)
+ revisiondate 10000 idiv ( \()
+ revision 10 mod
+ revision 100 mod 10 idiv (.)
+ revision 100 idiv ( )
+ product
+ counttomark
+ { (%stdout) (w) file exch 0 .writecvp
+ } repeat pop
+ } .bind def
+
+QUIET not { printgreeting flush } if
+
+% Define a special version of def for making operator procedures.
+/obind { % <name> <proc> obind <name> <oper>
+ 1 index exch .makeoperator
+} .bind def
+/odef { % <name> <proc> odef -
+ 1 index exch .makeoperator def
+} .bind def
+
+% Define a special version of def for storing local objects into global
+% dictionaries. Like .forceput, this exists only during initialization.
+/.forcedef { % <key> <value> .forcedef -
+ currentdict 3 1 roll .forceput
+} .bind odef
+
+% Define procedures for accessing variables in systemdict and userdict
+% regardless of the contents of the dictionary stack.
+/.systemvar { % <name> .systemvar <value>
+ //systemdict exch get
+} .bind odef
+/.userdict { % - .userdict <dict>
+ /userdict .systemvar
+} .bind odef
+/.uservar { % <name> .uservar <value>
+ .userdict exch get
+} .bind odef
+
+% If we're delaying binding, remember everything that needs to be bound later.
+DELAYBIND NOBIND not and
+ { .currentglobal false .setglobal
+ systemdict /.delaybind 1500 array .forceput
+ .setglobal
+ userdict /.delaycount 0 put
+ % When we've done the delayed bind, we want to stop saving.
+ % Detect this by the disappearance of .delaybind.
+ /bind
+ { /.delaybind .systemvar dup length 0 ne
+ { .delaycount 2 index put
+ .userdict /.delaycount .delaycount 1 add put
+ }
+ { pop .bind
+ }
+ ifelse
+ } .bind def
+ } if
+
+%**************** BACKWARD COMPATIBILITY ****************
+/hwsizedict mark /HWSize null .dicttomark readonly def
+/copyscanlines { % <device> <y> <string> copyscanlines <substr>
+ 0 3 1 roll 3 index //hwsizedict .getdeviceparams
+ exch pop exch pop aload pop 3 2 roll
+ 0 exch null exch .getbitsrect exch pop
+} bind odef
+currentdict /hwsizedict .undef
+/getdeviceprops
+ { null .getdeviceparams
+ } bind odef
+/.putdeviceprops
+ { null true counttomark 1 add 3 roll .putdeviceparams
+ dup type /booleantype ne
+ { dup mark eq { /unknown /rangecheck } if
+ counttomark 4 add 1 roll cleartomark pop pop pop
+ /.putdeviceprops load exch signalerror
+ }
+ if
+ } bind odef
+/.currentfilladjust { .currentfilladjust2 pop } bind odef
+/.setfilladjust { dup .setfilladjust2 } bind odef
+/.writecvs { 0 .writecvp } bind odef
+%**************** DEPRECATED PROCEDURES ****************
+%**************** DO NOT USE THESE IN NEW CODE ****************
+/max { .max } bind def % use .max instead
+/min { .min } bind def % use .min instead
+/unread /.unread load def % use .peekstring instead
+%**************** END OF BACKWARD COMPATIBILITY SECTION ****************
+
+% Define predefined procedures substituting for operators,
+% in alphabetical order.
+
+userdict /#copies 1 put
+% Adobe implementations don't accept /[ or /], so we don't either.
+([) cvn
+ /mark load def
+(]) cvn
+ {counttomark array astore exch pop} odef
+% .beginpage is redefined if setpagedevice is present.
+/.beginpage { } odef
+% In LanguageLevel 3, copypage erases the page.
+/copypage {
+ .languagelevel 3 ge
+ dup { 0 } { 1 } ifelse .endpage {
+ .currentnumcopies 1 index .outputpage
+ (>>copypage, press <return> to continue<<\n) .confirm
+ dup { erasepage } if
+ } if pop .beginpage
+} odef
+/currentmatrix {
+ .currentmatrix 6 index astore pop
+} odef
+% .currentnumcopies is redefined in Level 2.
+/.currentnumcopies { #copies } odef
+/setcolorscreen where { pop % not in all Level 1 configurations
+ /currentcolorscreen
+ { .currenthalftone
+ { { 60 exch 0 exch 3 copy 6 copy } % halftone - not possible
+ { 3 copy 6 copy } % screen
+ { } % colorscreen
+ }
+ exch get exec
+ } odef
+} if
+/currentscreen
+ { .currenthalftone
+ { { 60 exch 0 exch } % halftone - not possible
+ { } % screen
+ { 12 3 roll 9 { pop } repeat } % colorscreen
+ }
+ exch get exec
+ } odef
+/.echo /echo load def
+userdict /.echo.mode true put
+/echo {dup /.echo.mode exch store .echo} odef
+/eexec {
+ % Rebind .currentresourcefile if it is the source for the eexec.
+ dup 55665 //filterdict /eexecDecode get exec
+ cvx exch .currentresourcefile eq
+ //systemdict begin { {exec} .execasresource } { exec } ifelse
+ % Only pop systemdict if it is still the top element,
+ % because this is apparently what Adobe interpreters do.
+ currentdict //systemdict eq { end } if
+} odef
+% .endpage is redefined if setpagedevice is present.
+/.endpage { 2 ne } odef
+% erasepage mustn't use gsave/grestore, because we call it before
+% the graphics state stack has been fully initialized.
+/erasepage
+ { /currentcolor where
+ { pop currentcolor currentcolorspace { setcolorspace setcolor } }
+ { /currentcmykcolor where
+ { pop currentcmykcolor { setcmykcolor } }
+ { currentrgbcolor { setrgbcolor } }
+ ifelse
+ }
+ ifelse 1 setgray .fillpage exec
+ } odef
+% To satisfy the Genoa FTS, executive must be a procedure, not an operator.
+/executive
+ { { prompt
+ { (%statementedit) (r) file } stopped
+ { pop pop $error /errorname get /undefinedfilename eq
+ { .clearerror exit } if % EOF
+ handleerror null % ioerror??
+ }
+ if
+ cvx { .runexec } execute
+ } loop
+ } bind def
+/filter
+ { //filterdict 1 index .knownget
+ { exch pop exec }
+ { /filter load /undefined signalerror }
+ ifelse
+ } odef
+/handleerror
+ { /errordict .systemvar /handleerror get exec } bind def
+/identmatrix [1.0 0.0 0.0 1.0 0.0 0.0] readonly def
+/identmatrix
+ { dup 0 //identmatrix putinterval } odef
+/languagelevel 1 def % gs_lev2.ps may change this
+/makeimagedevice { false makewordimagedevice } odef
+/matrix { 6 array identmatrix } odef
+/pathbbox
+ { false .pathbbox
+ } odef
+% .promptmsg is redefined if the interpreter includes readline support.
+/.promptmsg {
+ (GS) print
+ count 0 ne { (<) print count =only } if
+ (>) print flush
+} bind def
+/prompt { flush flushpage NOPROMPT not { .promptmsg } if } bind def
+/pstack { 0 1 count 3 sub { index == } for } bind def
+/putdeviceprops
+ { .putdeviceprops { erasepage } if } odef
+/quit { /quit load 0 .quit } odef
+/run { dup type /filetype ne { (r) file } if
+ % We must close the file when execution terminates,
+ % regardless of the state of the stack,
+ % and then propagate an error, if any.
+ cvx .runexec
+ } odef
+% Execute a file.
+% Level 2 uses 2 .stop to clear the e-stack for a successful startjob:
+% we detect that here, since we need to handle this even if we start out
+% without job control in effect.
+%
+% What we push on the e-stack is the following to be executed in this order:
+% <lit-file|fileproc> .runexec1 <lit-file|fileproc> .runexec2
+/.runexec1 { % <file|fileproc> .runexec1 -
+ dup type /filetype ne { cvx exec } if
+ cvx null 2 .stopped
+ % If we got back here from a startjob, just keep going.
+ % startjob replaces the null on the o-stack with a procedure
+ % to be executed when we get back here.
+ dup null ne { exec true } { pop false } ifelse
+} bind def
+/.runexec2 { % <continue> <file|fileproc> .runexec2 -
+ exch {
+ .runexec
+ } {
+ dup type /filetype ne { cvx exec } if
+ closefile
+ } ifelse
+} bind def
+/.runexec { % <file|fileproc> .runexec -
+ cvlit /.runexec1 cvx 1 index /.runexec2 cvx 4 .execn
+} bind def
+% The following is only for compatibility with Adobe interpreters.
+/setdash {
+ 1 index length 11 gt { /setdash load /limitcheck signalerror } if
+ //setdash
+} odef
+/setdevice
+ { .setdevice { erasepage } if } odef
+/setlinecap {
+ dup 2 gt { /setlinecap load /rangecheck signalerror } if
+ .setlinecap
+} odef
+/setlinejoin {
+ dup 2 gt { /setlinejoin load /rangecheck signalerror } if
+ .setlinejoin
+} odef
+/setmatrix {
+ dup aload pop .setmatrix pop
+} odef
+/showpage {
+ 0 .endpage .doneshowpage {
+ .currentnumcopies true .outputpage
+ (>>showpage, press <return> to continue<<\n) .confirm
+ erasepage
+ } if initgraphics .beginpage
+} odef
+% Code output by Adobe Illustrator relies on the fact that
+% `stack' is a procedure, not an operator!!!
+/stack { 0 1 count 3 sub { index = } for } bind def
+/start { BATCH { null 0 .quit } { executive } ifelse } def
+% Internal uses of stopped that aren't going to do a stop if an error occurs
+% should use .internalstopped to avoid setting newerror et al.
+/.internalstopped { null 1 .stopped null ne } bind def
+/store { % Don't alter operands before completing.
+ 1 index where { 2 index 2 index put pop pop } { def } ifelse
+} odef
+/.typenames mark .typenames counttomark packedarray exch pop def
+/type {
+ //.typenames .type
+} odef
+currentdict /.typenames .undef
+% When running in Level 1 mode, this interpreter is supposed to be
+% compatible with PostScript "version" 54.0 (I think).
+/version (54.0) readonly def
+/.wheredict 10 dict def
+/.where /where load def
+/where {
+ //.wheredict 1 index .knownget { exec } { .where } ifelse
+} odef
+
+% internaldict is defined in systemdict, but the dictionary is allocated
+% in local VM. However, the procedure must be global, since it is an
+% "operator" and must be bind-able into global procedures.
+% We make a procedure for creating it, since we must create a new one
+% for each context with private local VM.
+/.makeinternaldict {
+ .currentglobal true .setglobal
+ [ /dup .systemvar 1183615869 /eq .systemvar
+ [ /pop .systemvar null ] cvx
+ false .setglobal
+ dup 1 10 dict .forceput % proc is global, dict is local
+ true .setglobal
+ [ /internaldict /cvx .systemvar /invalidaccess /signalerror cvx ] cvx
+ /ifelse .systemvar
+ ] cvx executeonly
+ exch .setglobal
+} odef
+systemdict /internaldict dup .makeinternaldict .makeoperator
+.forceput % proc is local, systemdict is global
+% Move superexec to internaldict if superexec is defined.
+currentdict /superexec .knownget {
+ 1183615869 internaldict /superexec 3 -1 roll put
+ currentdict /superexec .undef
+} if
+
+% Define some additional built-in procedures (beyond the ones defined by
+% the PostScript Language Reference Manual).
+% Warning: these are not guaranteed to stay the same from one release
+% to the next!
+/concatstrings % (str1) (str2) concatstrings (str1str2)
+ { exch dup length 2 index length add string % str2 str1 new
+ dup dup 4 2 roll copy % str2 new new new1
+ length 4 -1 roll putinterval
+ } bind def
+/copyarray
+ { dup length array copy } bind def
+% Copy a dictionary per the Level 2 spec even in Level 1.
+/.copydict % <fromdict> <todict> .copydict <todict>
+ { dup 3 -1 roll { put dup } forall pop } bind def
+/copystring
+ { dup length string copy } bind def
+/findlibfile {
+ .libfile { dup .filename pop exch true } { false } ifelse
+} odef
+/.growdictlength % get size for growing a dictionary
+ { length 3 mul 2 idiv 1 add
+ } bind def
+/.growdict % grow a dictionary
+ { dup .growdictlength .setmaxlength
+ } bind def
+/.growput % put, grow the dictionary if needed
+ { 2 index length 3 index maxlength eq
+ { 3 copy pop known not { 2 index .growdict } if
+ } if
+ put
+ } bind def
+% .localvmarray may be an operator: see zsysvm.c.
+/.localvmarray where {
+ pop
+} {
+ /.localvmarray {
+ .currentglobal false .setglobal
+ exch array exch .setglobal
+ } bind def
+} ifelse
+/.localvmdict where {
+ pop
+} {
+ /.localvmdict {
+ .currentglobal false .setglobal
+ exch dict exch .setglobal
+ } bind def
+} ifelse
+/.packtomark
+ { counttomark packedarray exch pop } bind def
+/ppstack
+ { 0 1 count 3 sub { index === } for } bind def
+/runlibfile
+ { % We don't want to bind 'run' into this procedure,
+ % since run may get redefined.
+ findlibfile
+ { exch pop /run .systemvar exec }
+ { /undefinedfilename signalerror }
+ ifelse
+ } bind def
+/selectdevice
+ { finddevice setdevice .setdefaultscreen } bind def
+/signalerror % <object> <errorname> signalerror -
+ { /errordict .systemvar exch get exec } bind def
+
+% Define the =[only] procedures. Also define =print,
+% which is used by some PostScript programs even though
+% it isn't documented anywhere.
+/write=only {
+ .writecvs
+} bind def
+/write= {
+ 1 index exch write=only (\n) writestring
+} bind def
+/=only { (%stdout) (w) file exch write=only } bind def
+/= { =only (\n) print } bind def
+/=print /=only load def
+% Temporarily define == as = for the sake of runlibfile0.
+/== /= load def
+
+% The following procedures are documented.
+/copydevice { % <device> copydevice <newdevice>
+ false .copydevice2
+} odef
+/finddevice { % <devicename> finddevice <device>
+ /devicedict .systemvar exch get
+ dup 1 get null eq {
+ % This is the first request for this type of device.
+ % Create a default instance now.
+ % Stack: [proto null]
+ .currentglobal true .setglobal exch
+ dup dup 0 get copydevice 1 exch put
+ exch .setglobal
+ } if 1 get
+} bind def
+/findprotodevice { % <devicename> findprotodevice <protodevice>
+ /devicedict .systemvar exch get 0 get
+} bind def
+
+% Run a resource file. This allows us to distinguish resource objects
+% from objects coming from input files.
+userdict /.currentresourcefile null put
+/.execasresource { % <file> <proc|runfile> .execasresource -
+ /stopped .systemvar
+ /.currentresourcefile .uservar
+ % Stack: file proc -stopped- currfile
+ .userdict /.currentresourcefile 5 index cvlit put
+ 2 .execn % stopped <file>
+ .userdict /.currentresourcefile 3 -1 roll put
+ { stop } if
+} bind def
+/.runresource { % <file> .runresource -
+ { /run .systemvar exec } .execasresource
+} bind def
+
+% Define procedures for getting and setting the current device resolution.
+
+/gsgetdeviceprop % <device> <propname> gsgetdeviceprop <value>
+ { 2 copy mark exch null .dicttomark .getdeviceparams
+ dup mark eq % if true, not found
+ { pop dup /undefined signalerror }
+ { 5 1 roll pop pop pop pop }
+ ifelse
+ } bind def
+/gscurrentresolution % - gscurrentresolution <[xres yres]>
+ { currentdevice /HWResolution gsgetdeviceprop
+ } bind def
+/gssetresolution % <[xres yres]> gssetresolution -
+ { 2 array astore mark exch /HWResolution exch
+ currentdevice copydevice putdeviceprops setdevice
+ } bind def
+
+% Define auxiliary procedures needed for the above.
+/shellarguments % -> shell_arguments true (or) false
+ { /ARGUMENTS where
+ { /ARGUMENTS get dup type /arraytype eq
+ { aload pop /ARGUMENTS null store true }
+ { pop false }
+ ifelse }
+ { false } ifelse
+ } bind def
+/.confirm {
+ DISPLAYING NOPAUSE not TTYPAUSE or and {
+ % Print a message (unless NOPAGEPROMPT or NOPROMPT is true)
+ % and wait for the user to type something.
+ % If the user just types a newline, flush it.
+ NOPAGEPROMPT NOPROMPT or { pop } { print flush } ifelse
+ .confirmread
+ } {
+ pop
+ } ifelse
+} bind def
+/.confirmread {
+ TTYPAUSE {
+ (/dev/tty) (r) file dup read pop pop closefile
+ } {
+ .echo.mode false echo
+ (%stdin) (r) file dup read {
+ dup (\n) 0 get eq { pop pop } { unread } ifelse
+ } {
+ pop
+ } ifelse echo
+ } ifelse
+} bind def
+
+% Define the procedure used by .runfile, .runstdin and .runstring
+% for executing user input.
+% This is called with a procedure or executable file on the operand stack.
+/.execute { % <obj> .execute <stopped>
+ stopped $error /newerror get and
+ { handleerror flush true } { false } ifelse
+} bind def
+/execute { % <obj> execute -
+ .execute pop
+} odef
+% Define an execute analogue of runlibfile0.
+/execute0 { % <obj> execute0 -
+ .execute { /execute0 cvx 1 .quit } if
+} bind def
+% Define the procedure that the C code uses for running files
+% named on the command line.
+/.runfile {
+ { runlibfile } execute0
+} def
+% Define the procedure that the C code uses for running piped input.
+% We don't use the obvious { (%stdin) run }, because we want the file to be
+% reopened if a startjob does a restore.
+/.runstdin {
+ { { (%stdin) (r) file cvx } .runexec } execute0
+} bind def
+% Define the procedure that the C code uses for running commands
+% given on the command line with -c. We turn the string into a file so that
+% .runexec can do the right thing with a startjob.
+/.runstring {
+ .currentglobal exch true .setglobal
+ 0 () .subfiledecode
+ exch .setglobal cvx { .runexec } execute0
+} bind def
+% Define the procedure that the C code uses to set up for executing
+% a string that may be received in pieces.
+/.runstringbegin {
+ .currentglobal true .setglobal
+ { .needinput } bind 0 () .subfiledecode
+ exch .setglobal cvx .runexec
+} bind def
+
+% Define a special version of runlibfile that aborts on errors.
+/runlibfile0
+ { cvlit dup /.currentfilename exch def
+ { findlibfile not { stop } if }
+ stopped
+ { (Can't find \(or open\) initialization file ) print
+ .currentfilename == flush /runlibfile0 cvx 1 .quit
+ } if
+ exch pop cvx stopped
+ { (While reading ) print .currentfilename print (:\n) print flush
+ handleerror /runlibfile0 1 .quit
+ } if
+ } bind def
+% Temporarily substitute it for the real runlibfile.
+/.runlibfile /runlibfile load def
+/runlibfile /runlibfile0 load def
+
+% Create the error handling machinery.
+% Define the standard error handlers.
+% The interpreter has created the ErrorNames array.
+/.unstoppederrorhandler % <command> <errorname> .unstoppederrorhandler -
+ { % This is the handler that gets used for recursive errors,
+ % or errors outside the scope of a 'stopped'.
+ 2 copy SHORTERRORS
+ { (%%[ Error: ) print =only flush
+ (; OffendingCommand: ) print =only ( ]%%) =
+ }
+ { (Unrecoverable error: ) print =only flush
+ ( in ) print = flush
+ count 2 gt
+ { (Operand stack:\n ) print
+ count 1 sub -1 2 { ( ) print index =only flush } for
+ () = flush
+ } if
+ }
+ ifelse
+ -1 0 1 //ErrorNames length 1 sub
+ { dup //ErrorNames exch get 3 index eq
+ { not exch pop exit } { pop } ifelse
+ }
+ for exch pop .quit
+ } bind def
+/.errorhandler % <command> <errorname> .errorhandler -
+ { % Detect an internal 'stopped'.
+ 1 .instopped { null eq { pop pop stop } if } if
+ $error /.inerror get 1 .instopped { pop } { pop true } ifelse
+ { .unstoppederrorhandler
+ } if % detect error recursion
+ $error /globalmode .currentglobal false .setglobal put
+ $error /.inerror true put
+ $error /newerror true put
+ $error exch /errorname exch put
+ $error exch /command exch put
+ $error /recordstacks get $error /errorname get /VMerror ne and
+ { % Attempt to store the stack contents atomically.
+ count array astore dup $error /ostack 4 -1 roll
+ countexecstack array execstack $error /estack 3 -1 roll
+ countdictstack array dictstack $error /dstack 3 -1 roll
+ put put put aload pop
+ }
+ { $error /dstack .undef
+ $error /estack .undef
+ $error /ostack .undef
+ }
+ ifelse
+ $error /position currentfile status
+ { currentfile { fileposition } .internalstopped { pop null } if
+ }
+ { % If this was a scanner error, the file is no longer current,
+ % but the command holds the file, which may still be open.
+ $error /command get dup type /filetype eq
+ { { fileposition } .internalstopped { pop null } if }
+ { pop null }
+ ifelse
+ }
+ ifelse put
+ % During initialization, we don't reset the allocation
+ % mode on errors.
+ $error /globalmode get $error /.nosetlocal get and .setglobal
+ $error /.inerror false put
+ stop
+ } bind def
+% Define the standard handleerror. We break out the printing procedure
+% (.printerror) so that it can be extended for binary output
+% if the Level 2 facilities are present.
+ /.printerror
+ { $error begin
+ /command load errorname SHORTERRORS
+ { (%%[ Error: ) print =only flush
+ (; OffendingCommand: ) print =only
+ errorinfo dup null eq {
+ pop
+ } {
+ (;\nErrorInfo:) print
+ dup type /arraytype eq
+ { { ( ) print =only } forall }
+ { ( ) print =only }
+ ifelse
+ } ifelse
+ ( ]%%) = flush
+ }
+ { (Error: ) print ==only flush
+ ( in ) print ==only flush
+ errorinfo dup null eq {
+ pop
+ } {
+ (\nAdditional information: ) print ==only flush
+ } ifelse
+ .printerror_long
+ }
+ ifelse
+ .clearerror
+ end
+ flush
+ } bind def
+ /.printerror_long % long error printout,
+ % $error is on the dict stack
+ { % Push the (anonymous) stack printing procedure.
+ % <heading> <==flag> <override-name> <stackname> proc
+ {
+ currentdict exch .knownget % stackname defined in $error?
+ {
+ 4 1 roll % stack: <stack> <head> <==flag> <over>
+ errordict exch .knownget % overridename defined?
+ {
+ exch pop exch pop exec % call override with <stack>
+ }
+ {
+ exch print exch % print heading. stack <==flag> <stack>
+ 1 index not { () = } if
+ { 1 index { (\n ) } { ( ) } ifelse print
+ dup type /dicttype eq
+ {
+ (--dict:) print
+ dup rcheck {
+ dup length =only (/) print dup maxlength =only
+ dup wcheck not { ((ro)) print } if
+ } if
+ /gcheck where {
+ pop gcheck { ((G)) } { ((L)) } ifelse print
+ } {
+ pop
+ } ifelse (--) print
+ }
+ {
+ dup type /stringtype eq 2 index or
+ { ==only } { =only } ifelse
+ } ifelse
+ } forall
+ pop
+ }
+ ifelse % overridden
+ }
+ { pop pop pop
+ }
+ ifelse % stack known
+ }
+
+ (\nOperand stack:) OSTACKPRINT /.printostack /ostack 4 index exec
+ (\nExecution stack:) ESTACKPRINT /.printestack /estack 4 index exec
+ (\nBacktrace:) true /.printbacktrace /backtrace 4 index exec
+ (\nDictionary stack:) false /.printdstack /dstack 4 index exec
+ () =
+ pop % printing procedure
+
+ errorname /VMerror eq
+ { (VM status:) print mark vmstatus
+ counttomark { ( ) print counttomark -1 roll dup =only } repeat
+ cleartomark () =
+ } if
+
+ .languagelevel 2 ge
+ { (Current allocation mode is ) print
+ globalmode { (global\n) } { (local\n) } ifelse print
+ } if
+
+ .oserrno dup 0 ne
+ { (Last OS error: ) print
+ errorname /VMerror ne
+ { dup .oserrorstring { = pop } { = } ifelse }
+ { = }
+ ifelse
+ }
+ { pop
+ }
+ ifelse
+
+ position null ne
+ { (Current file position is ) print position = }
+ if
+
+ } bind def
+% Define a procedure for clearing the error indication.
+/.clearerror
+ { $error /newerror false put
+ $error /errorname null put
+ $error /errorinfo null put
+ 0 .setoserrno
+ } bind def
+
+% Define $error. This must be in local VM.
+.currentglobal false .setglobal
+/$error 40 dict .forcedef % $error is local, systemdict is global
+ % newerror, errorname, command, errorinfo,
+ % ostack, estack, dstack, recordstacks,
+ % binary, globalmode,
+ % .inerror, .nosetlocal, position,
+ % plus extra space for badly designed error handers.
+$error begin
+ /newerror false def
+ /recordstacks true def
+ /binary false def
+ /globalmode .currentglobal def
+ /.inerror false def
+ /.nosetlocal true def
+ /position null def
+end
+% Define errordict similarly. It has one entry per error name,
+% plus handleerror. However, some astonishingly badly written PostScript
+% files require it to have at least one empty slot.
+/errordict ErrorNames length 2 add dict
+.forcedef % errordict is local, systemdict is global
+.setglobal % contents of errordict are global
+errordict begin
+ ErrorNames
+ { mark 1 index systemdict /.errorhandler get /exec load .packtomark cvx def
+ } forall
+% The handlers for interrupt and timeout are special; there is no
+% 'current object', so they push their own name.
+ { /interrupt /timeout }
+ { mark 1 index dup systemdict /.errorhandler get /exec load .packtomark cvx def
+ } forall
+/handleerror
+ { /.printerror .systemvar exec
+ } bind def
+end
+
+% Define the [write]==[only] procedures.
+/.dict 8 dict dup
+begin def
+ /.cvp {1 index exch 1 .writecvp} bind def
+ /.p {1 index exch writestring} bind def
+ /.p1 {2 index exch writestring} bind def
+ /.p2 {3 index exch writestring} bind def
+ /.print
+ { dup type .dict exch .knownget { exec } { .cvp } ifelse
+ } bind def
+ /arraytype
+ {dup rcheck
+ {() exch dup xcheck
+ {({) .p2
+ {exch .p1
+ 1 index exch .print pop ( )} forall
+ (})}
+ {([) .p2
+ {exch .p1
+ 1 index exch .print pop ( )} forall
+ (])}
+ ifelse exch pop .p}
+ {.cvp}
+ ifelse} bind def
+ /packedarraytype /arraytype load def
+{//.dict begin .print pop end}
+ bind
+end
+
+/write==only exch def
+/write== {1 index exch write==only (\n) writestring} bind def
+/==only { (%stdout) (w) file exch write==only } bind def
+/== {==only (\n) print} bind def
+
+% Define [write]===[only], an extension that prints dictionaries
+% in readable form and doesn't truncate strings.
+/.dict /write==only load 0 get dup length 2 add dict .copydict dup
+begin def
+ /dicttype
+ { dup rcheck
+ { (<< ) .p1
+ { 2 index 3 -1 roll .print pop ( ) .p1
+ 1 index exch .print pop ( ) .p
+ }
+ forall (>>) .p
+ }
+ { .cvp
+ }
+ ifelse
+ } bind def
+ /stringtype
+ { 1 index exch 2 .writecvp
+ } bind def
+
+{//.dict begin .print pop end}
+ bind
+end
+
+/write===only exch def
+/write=== {1 index exch write===only (\n) writestring} bind def
+/===only { (%stdout) (w) file exch write===only } bind def
+/=== { ===only (\n) print } bind def
+
+(END PROCS) VMDEBUG
+
+% Define the font directory.
+/FontDirectory false .setglobal 100 dict true .setglobal
+.forcedef % FontDirectory is local, systemdict is global
+
+% Define the encoding dictionary.
+/EncodingDirectory 16 dict def % enough for Level 2 + PDF standard encodings
+
+% Define .findencoding. (This is redefined in Level 2.)
+/.findencoding
+ { //EncodingDirectory exch get exec
+ } bind def
+/.defineencoding
+ { //EncodingDirectory 3 1 roll put
+ } bind def
+% If we've got the composite font extensions, define findencoding.
+% To satisfy the Genoa FTS, findencoding must be a procedure, not an operator.
+/rootfont where { pop /findencoding { .findencoding } def } if
+
+% Define .registerencoding.
+% NOTE: the name registeredencodings is known to (initialized by and shared
+% with) the interpreter.
+/.registerencoding { % <index> <array> .registerencoding -
+ % Check that the array is indexable.
+ % (It might still be a string, but then the .namestring will fail.)
+ dup 0 0 getinterval pop
+ % Check that all the elements of the array are names.
+ dup { .namestring pop } forall
+ % Do the store.
+ //registeredencodings 2 index 2 index readonly put pop pop
+} bind odef
+systemdict /registeredencodings .undef
+
+% Load StandardEncoding.
+%% Replace 1 (gs_std_e.ps)
+(gs_std_e.ps) dup runlibfile VMDEBUG
+
+% Load ISOLatin1Encoding.
+%% Replace 1 (gs_il1_e.ps)
+(gs_il1_e.ps) dup runlibfile VMDEBUG
+
+% Define stubs for the Symbol and Dingbats encodings.
+% Note that the first element of the procedure must be the file name,
+% since gs_lev2.ps extracts it to set up the Encoding resource category.
+
+ /SymbolEncoding { /SymbolEncoding .findencoding } bind def
+%% Replace 3 (gs_sym_e.ps)
+ EncodingDirectory /SymbolEncoding
+ { (gs_sym_e.ps) //systemdict begin runlibfile SymbolEncoding end }
+ bind put
+
+ /DingbatsEncoding { /DingbatsEncoding .findencoding } bind def
+%% Replace 3 (gs_dbt_e.ps)
+ EncodingDirectory /DingbatsEncoding
+ { (gs_dbt_e.ps) //systemdict begin runlibfile DingbatsEncoding end }
+ bind put
+
+(END FONTDIR/ENCS) VMDEBUG
+
+% Construct a dictionary of all available devices.
+% These are (read-only) device prototypes that can't be
+% installed or have their parameters changed. For this reason,
+% the value in the dictionary is actually a 2-element writable array,
+% to allow us to create a default instance of the prototype on demand.
+
+ % Loop until the .getdevice gets a rangecheck.
+errordict /rangecheck 2 copy get
+errordict /rangecheck { pop stop } put % pop the command
+ 0 { {dup .getdevice exch 1 add} loop} .internalstopped pop
+ 1 add dict /devicedict 1 index def
+ begin % 2nd copy of count is on stack
+ { dup .devicename exch
+ dup wcheck { dup } { null } ifelse 2 array astore def
+ } repeat
+ end
+put % errordict /rangecheck
+.clearerror
+/devicenames devicedict { pop } forall devicedict length packedarray def
+
+% Determine the default device.
+/defaultdevice DISPLAYING
+ { systemdict /DEVICE .knownget
+ { devicedict 1 index known not
+ { (Unknown device: ) print =
+ flush /defaultdevice cvx 1 .quit
+ }
+ if
+ }
+ { 0 .getdevice .devicename
+ }
+ ifelse
+ }
+ { /nullpage
+ }
+ifelse
+/.defaultdevicename 1 index def
+finddevice % make a copy
+def
+devicedict /Default devicedict .defaultdevicename get put
+
+(END DEVS) VMDEBUG
+
+% Define statusdict, for the benefit of programs
+% that think they are running on a LaserWriter or similar printer.
+%% Replace 1 (gs_statd.ps)
+(gs_statd.ps) runlibfile
+
+(END STATD) VMDEBUG
+
+% Load the standard font environment.
+%% Replace 1 (gs_fonts.ps)
+(gs_fonts.ps) runlibfile
+
+(END GS_FONTS) VMDEBUG
+
+% Define the default halftone screen and BG/UCR functions now, so that
+% it will bind in the original definitions of set[color]screen.
+% We make this a procedure so we can call it again when switching devices.
+
+% Use an ordered dither for low-resolution devices.
+/.setloreshalftone { % <dpi> .setloreshalftone -
+ % The following 'ordered dither' spot function was contributed by
+ % Gregg Townsend. Thanks, Gregg!
+ 16.001 div 0 % not 16: avoids rounding problems
+ { 1 add 7.9999 mul cvi exch 1 add 7.9999 mul cvi 16 mul add <
+ 0E 8E 2E AE 06 86 26 A6 0C 8C 2C AC 04 84 24 A4
+ CE 4E EE 6E C6 46 E6 66 CC 4C EC 6C C4 44 E4 64
+ 3E BE 1E 9E 36 B6 16 96 3C BC 1C 9C 34 B4 14 94
+ FE 7E DE 5E F6 76 D6 56 FC 7C DC 5C F4 74 D4 54
+ 01 81 21 A1 09 89 29 A9 03 83 23 A3 0B 8B 2B AB
+ C1 41 E1 61 C9 49 E9 69 C3 43 E3 63 CB 4B EB 6B
+ 31 B1 11 91 39 B9 19 99 33 B3 13 93 3B BB 1B 9B
+ F1 71 D1 51 F9 79 D9 59 F3 73 D3 53 FB 7B DB 5B
+ 0D 8D 2D AD 05 85 25 A5 0F 8F 2F AF 07 87 27 A7
+ CD 4D ED 6D C5 45 E5 65 CF 4F EF 6F C7 47 E7 67
+ 3D BD 1D 9D 35 B5 15 95 3F BF 1F 9F 37 B7 17 97
+ FD 7D DD 5D F5 75 D5 55 FF 7F DF 5F F7 77 D7 57
+ 02 82 22 A2 0A 8A 2A AA 00 80 20 A0 08 88 28 A8
+ C2 42 E2 62 CA 4A EA 6A C0 40 E0 60 C8 48 E8 68
+ 32 B2 12 92 3A BA 1A 9A 30 B0 10 90 38 B8 18 98
+ F2 72 D2 52 FA 7A DA 5A F0 70 D0 50 F8 78 D8 58
+ > exch get 256 div
+ }
+ bind
+ % Use correct, per-plane screens for CMYK devices only.
+ //systemdict /setcolorscreen known processcolors 4 eq and
+ { 3 copy 6 copy //setcolorscreen }
+ { //setscreen }
+ ifelse
+} bind def
+/.setloresscreen { % <dpi> .setloresscreen -
+ .setloreshalftone
+ 0 array cvx settransfer % Genoa CET won't accept a packed array!
+ /setstrokeadjust where { pop true setstrokeadjust } if
+} bind def
+% Use a 45-degree spot screen for high-resolution devices.
+/.sethireshalftone { % <dpi> .sethireshalftone <doscreen>
+ % According to information published by Hewlett-Packard,
+ % they use a 60 line screen on 300 DPI printers and
+ % an 85 line screen on 600 DPI printers.
+ % However, we use a 106 line screen, which produces smoother-
+ % looking shades but fewer of them (32 vs. 50).
+ % 46 was suggested as a good frequency value for printers
+ % between 200 and 400 DPI, so we use it for lower resolutions.
+ % Imagesetters need even higher frequency screens.
+ //systemdict /DITHERPPI known
+ { DITHERPPI
+ }
+ { dup cvi 100 idiv 15 .min
+ {null 46 46 60 60 60 106 106 106 106 133 133 133 133 133 150}
+ exch get
+ }
+ ifelse
+ 1 index 4.01 div .min % at least a 4x4 cell
+ 45
+ % The following screen algorithm is used by permission of the author.
+ { 1 add 180 mul cos 1 0.08 add mul exch 2 add 180 mul cos
+ 1 0.08 sub mul add 2 div % (C) 1989 Berthold K.P. Horn
+ }
+ bind
+ % Determine whether we have lots of process colors.
+ % If so, don't bother with color screening or gamma correction.
+ % Also don't do gamma correction on very high-resolution devices.
+ % (This should depend on dot gain, not resolution, but we don't
+ % currently have a way to determine this.)
+ currentdevice mark
+ /RedValues 0 /GreenValues 0 /BlueValues 0 /GrayValues 0
+ .dicttomark .getdeviceparams
+ counttomark 2 idiv 1 sub { exch pop .min } repeat
+ exch pop exch pop 32 lt 4 index 800 lt and 5 1 roll
+ % Stack: doscreen dpi freq angle proc
+ % Ghostscript currently doesn't use correct, per-plane halftones
+ % unless setcolorscreen has been executed. Since these are
+ % computationally much more expensive than binary halftones,
+ % we check to make sure they are really warranted, i.e., we have
+ % a high-resolution CMYK device (i.e., not a display) with
+ % fewer than 5 bits per plane (i.e., not a true-color device).
+ 4 -1 roll 150 ge
+ { /setcolorscreen where
+ { pop //systemdict /COLORSCREEN known
+ { COLORSCREEN }
+ { 3 index }
+ ifelse
+ dup false ne
+ { 4 1 roll 3 copy 6 copy 13 -1 roll
+ % For really high-quality screening on printers, we need to
+ % give each plane its own screen angle. Unfortunately,
+ % this currently has very large space and time costs.
+ true eq % true => different angles,
+ % 0 => same angles
+ { { 45 90 15 75 } { 3 1 roll exch pop 12 3 roll } forall
+ }
+ if //setcolorscreen
+ }
+ { pop //setscreen % false => single binary screen
+ }
+ ifelse
+ }
+ { //setscreen % setcolorscreen not known
+ }
+ ifelse
+ }
+ { //setscreen % not high resolution
+ }
+ ifelse
+} bind def
+/.sethiresscreen { % <dpi> .sethiresscreen -
+ .sethireshalftone
+ % Stack: doscreen
+ { % Set the transfer function to lighten up the grays.
+ % We correct at the high end so that very light grays
+ % don't disappear completely if they darken <1 screen pixel.
+ % Parameter values closer to 1 are better for devices with
+ % less dot spreading; lower values are better with more spreading.
+ % The value 0.8 is a compromise that will probably please no one!
+ %
+ % Because of a bug in FrameMaker, we have to accept operands
+ % outside the valid range of [0..1].
+ { dup dup 0.0 gt exch 1.0 lt and
+ { 0.8 exp dup dup 0.9375 gt exch 0.999 lt and % > 15/16
+ { .currentscreenlevels 1 sub % tweak to avoid boundary
+ 1 exch div 1 exch sub .min
+ }
+ if
+ }
+ if
+ }
+ }
+ { % Set the transfer function to the identity.
+ 0 array cvx % Genoa CET won't accept a packed array!
+ }
+ ifelse settransfer
+ /setstrokeadjust where { pop false setstrokeadjust } if
+ % Increase fill adjustment so that we effectively use Adobe's
+ % any-part-of-pixel rule.
+ 0.5 .setfilladjust
+} bind def
+% Set the default screen and BG/UCR.
+/.setdefaultbgucr {
+ systemdict /setblackgeneration known {
+ { pop 0 } dup setblackgeneration setundercolorremoval
+ } if
+} bind def
+/.useloresscreen { % - .useloresscreen <bool>
+ % Compute min(|dpi x|,|dpi y|) as the definition of the resolution.
+ 72 72 matrix defaultmatrix dtransform abs exch abs .min
+ dup 150 lt //systemdict /DITHERPPI known not and
+} bind def
+
+% The following implementation uses LL2 extensions, but only in stopped
+% contexts so that with LL1, the .set??reshalftone will be used.
+%
+% - .getdefaulthalftone <halftonedict> true if default found
+% false
+/.getdefaulthalftone {
+ % try the device to see if it has a default halftone
+ { currentdevice /HalftoneDefault gsgetdeviceprop } stopped
+ { pop pop false } % no device property
+ { dup type /dicttype eq { true } { pop false } ifelse }
+ ifelse
+ % stack: <halftonedict> true if default found
+ % false not found
+ dup not
+ { % device did not provide a default, try Resource
+ pop { /Default /Halftone /findresource .systemvar exec } stopped
+ { pop pop false } { true } ifelse
+ }
+ if
+} bind def
+
+/.setdefaulthalftone {
+ .getdefaulthalftone
+ { sethalftone }
+ { % default not found
+ .useloresscreen { .setloreshalftone } { .sethireshalftone pop } ifelse
+ }
+ ifelse
+} bind def
+
+/.setdefaultscreen {
+ .useloresscreen { .setloresscreen } { .sethiresscreen } ifelse
+ .setdefaultbgucr
+} bind def
+
+% Load the initialization files for optional features.
+%% Replace 4 INITFILES
+systemdict /INITFILES known
+ { INITFILES { dup runlibfile VMDEBUG } forall
+ }
+if
+
+% If Level 2 (or higher) functionality is implemented, enable it now.
+/.setlanguagelevel where {
+ pop 2 .setlanguagelevel
+ % If the resource machinery is loaded, fix up some things now.
+ /.fixresources where { pop .fixresources } if
+} if
+/ll3dict where {
+ pop 3 .setlanguagelevel
+} if
+
+(END INITFILES) VMDEBUG
+
+% Create a null font. This is the initial font.
+8 dict dup begin
+ /FontMatrix [ 1 0 0 1 0 0 ] readonly def
+ /FontType 3 def
+ /FontName () def
+ /Encoding StandardEncoding def
+ /FontBBox { 0 0 0 0 } readonly def % executable is bogus, but customary ...
+ /BuildChar { pop pop 0 0 setcharwidth } bind def
+ /PaintType 0 def % shouldn't be needed!
+end
+/NullFont exch definefont setfont
+
+% Define NullFont as the font.
+/NullFont currentfont def
+
+% Load initial fonts from FONTPATH directories, Fontmap file,
+% and/or .getccfont as appropriate.
+.loadinitialfonts
+
+% Remove NullFont from FontDirectory, so it can't be accessed by mistake.
+/undefinefont where {
+ pop /NullFont undefinefont
+} {
+ FontDirectory /NullFont .undef
+} ifelse
+
+(END FONTS) VMDEBUG
+
+% Restore the real definition of runlibfile.
+/runlibfile /.runlibfile load def
+currentdict /.runlibfile .undef
+
+% Bind all the operators defined as procedures.
+/.bindoperators % binds operators in currentdict
+ { % Temporarily disable the typecheck error.
+ errordict /typecheck 2 copy get
+ errordict /typecheck { pop } put % pop the command
+ currentdict
+ { dup type /operatortype eq
+ { % This might be a real operator, so bind might cause a typecheck,
+ % but we've made the error a no-op temporarily.
+ .bind % do a real bind even if NOBIND is set
+ }
+ if pop pop
+ } forall
+ put
+ } def
+NOBIND DELAYBIND or not { .bindoperators } if
+
+% Establish a default environment.
+
+defaultdevice
+% The following line used to skip setting of page size and resolution if
+% NODISPLAY was selected. We think this was only to save time and memory,
+% and it is a bad idea because it prevents setting the resolution in this
+% situation, which pstoedit (among other programs) relies on.
+%DISPLAYING not { setdevice (%END DISPLAYING) .skipeof } if
+systemdict /DEVICEWIDTH known
+systemdict /DEVICEHEIGHT known or
+systemdict /DEVICEWIDTHPOINTS known or
+systemdict /DEVICEHEIGHTPOINTS known or
+systemdict /DEVICEXRESOLUTION known or
+systemdict /DEVICEYRESOLUTION known or
+systemdict /PAPERSIZE known or
+not { (%END DEVICE) .skipeof } if
+% Let DEVICE{WIDTH,HEIGHT}[POINTS] override PAPERSIZE.
+systemdict /PAPERSIZE known
+systemdict /DEVICEWIDTH known not and
+systemdict /DEVICEHEIGHT known not and
+systemdict /DEVICEWIDTHPOINTS known not and
+systemdict /DEVICEHEIGHTPOINTS known not and
+ { % Convert the paper size to device dimensions.
+ true statusdict /.pagetypenames get
+ { PAPERSIZE eq
+ { PAPERSIZE load
+ dup 0 get /DEVICEWIDTHPOINTS exch def
+ 1 get /DEVICEHEIGHTPOINTS exch def
+ pop false exit
+ }
+ if
+ }
+ forall
+ { (Unknown paper size: ) print PAPERSIZE ==only (.) =
+ }
+ if
+ }
+if
+% Adjust the device parameters per the command line.
+% It is possible to specify resolution, pixel size, and page size;
+% since any two of these determine the third, conflicts are possible.
+% We simply pass them to .setdeviceparams and let it sort things out.
+ mark /HWResolution null /HWSize null /PageSize null .dicttomark
+ .getdeviceparams .dicttomark begin
+ mark
+ % Check for resolution.
+ /DEVICEXRESOLUTION where dup
+ { exch pop HWResolution 0 DEVICEXRESOLUTION put }
+ if
+ /DEVICEYRESOLUTION where dup
+ { exch pop HWResolution 1 DEVICEYRESOLUTION put }
+ if
+ or { /HWResolution HWResolution } if
+ % Check for device sizes specified in pixels.
+ /DEVICEWIDTH where dup
+ { exch pop HWSize 0 DEVICEWIDTH put }
+ if
+ /DEVICEHEIGHT where dup
+ { exch pop HWSize 1 DEVICEHEIGHT put }
+ if
+ or { /HWSize HWSize } if
+ % Check for device sizes specified in points.
+ /DEVICEWIDTHPOINTS where dup
+ { exch pop PageSize 0 DEVICEWIDTHPOINTS put }
+ if
+ /DEVICEHEIGHTPOINTS where dup
+ { exch pop PageSize 1 DEVICEHEIGHTPOINTS put }
+ if
+ or { /PageSize PageSize } if
+ % Check whether any parameters were set.
+ dup mark eq { pop } { defaultdevice putdeviceprops } ifelse
+ end
+%END DEVICE
+% Set any device properties defined on the command line.
+% If BufferSpace is defined but not MaxBitmap, set MaxBitmap to BufferSpace.
+systemdict /BufferSpace known
+systemdict /MaxBitmap known not and
+ { systemdict /MaxBitmap BufferSpace put
+ } if
+dup getdeviceprops
+counttomark 2 idiv
+ { systemdict 2 index known
+ { pop dup load counttomark 2 roll }
+ { pop pop }
+ ifelse
+ } repeat
+counttomark dup 0 ne
+ { 2 add -1 roll putdeviceprops }
+ { pop pop }
+ifelse
+% If the initial device parameters are invalid, the setdevice may fail.
+% Trap this and produce a reasonable error message.
+{ setdevice } % does an erasepage
+DEBUG { exec false } { .internalstopped } ifelse {
+ (**** Unable to open the initial device, quitting.) = flush 1 .quit
+} if
+
+% If the media size is fixed, update the current page device dictionary.
+FIXEDMEDIA
+dup { pop systemdict /.currentpagedevice known } if
+dup { pop .currentpagedevice exch pop } if
+not { (%END MEDIA) .skipeof } if
+currentpagedevice dup length dict .copydict
+dup /Policies
+ % Stack: <pagedevice> <pagedevice> /Policies
+1 index /InputAttributes
+2 copy get dup length dict .copydict
+ % Stack: <pagedevice> <pagedevice> /Policies <pagedevice>
+ % /InputAttributes <inputattrs'>
+dup 0 2 copy get dup length dict .copydict
+ % Stack: <pagedevice> <pagedevice> /Policies <pagedevice>
+ % /InputAttributes <inputattrs'> <inputattrs'> 0 <attrs0'>
+dup /PageSize 7 index /PageSize get
+put % PageSize in 0
+put % 0 in InputAttributes
+put % InputAttributes in pagedevice
+% Also change the page size policy so we don't get an error.
+ % Stack: <pagedevice> <pagedevice> /Policies
+2 copy get dup length dict .copydict
+ % Stack: <pagedevice> <pagedevice> /Policies <policies'>
+dup /PageSize 7 put % PageSize in Policies
+put % Policies in pagedevice
+.setpagedevice
+%END MEDIA
+%END DISPLAYING
+
+(END DEVICE) VMDEBUG
+
+% Establish a default upper limit in the character cache,
+% namely, enough room for a 18-point character at the resolution
+% of the default device, or for a character consuming 1% of the
+% maximum cache size, whichever is larger.
+mark
+ % Compute limit based on character size.
+ 18 dup dtransform
+ exch abs cvi 31 add 32 idiv 4 mul % X raster
+ exch abs cvi mul % Y
+ % Compute limit based on allocated space.
+ cachestatus pop pop pop pop pop exch pop 0.01 mul cvi
+ .max dup 10 idiv exch
+setcacheparams
+% Conditionally disable the character cache.
+NOCACHE { 0 setcachelimit } if
+
+(END CONFIG) VMDEBUG
+
+% Initialize graphics.
+
+.setdefaultscreen
+initgraphics
+
+% The interpreter relies on there being at least 2 entries
+% on the graphics stack. Establish the second one now.
+gsave
+
+% Define some control sequences as no-ops.
+% This is a hack to get around problems
+% in some common PostScript-generating applications.
+<04> cvn { } def % Apple job separator
+<0404> cvn { } def % two of the same
+<1b> cvn { } def % MS Windows LaserJet 4 prologue
+ % (UEL = ESC %-12345X)
+<1b45> cvn { } def % PJL reset prologue (ESC E)
+<1b451b> cvn { } def % PJL reset epilogue (ESC E + UEL)
+<041b> cvn { } def % MS Windows LaserJet 4 epilogue (^D + UEL)
+(\001M) cvn % TBCP initiator
+ { currentfile /TBCPDecode filter cvx exec
+ } bind def
+/@PJL % H-P job control
+ { currentfile //=string readline { pop } if
+ } bind def
+
+% Install the EPS handler if needed
+systemdict /EPSBoundingBoxInit known { EPSBoundingBoxInit } if
+
+% If we want a "safer" system, disable some obvious ways to cause havoc.
+.currentglobal true .setglobal
+/SAFETY 2 dict
+ dup /safe false put
+ dup /tempfiles 10 dict readonly put
+readonly def
+.setglobal
+
+% Convert a path name into a string suitable for filenameforall
+% For example: (a\\b*?c) to (a\\\\b\\*\\?c)
+/.makepathtemplate { % str1 -- str2
+ dup length dup add string 0 % result string up to twice the size
+ 0 1 4 index length 1 sub {
+ 3 index exch get
+ dup 92 eq { % \ -> \\
+ 2 index 2 index 92
+ put
+ exch 1 add exch
+ }
+ if
+ dup 42 eq { % * -> \*
+ 2 index 2 index 92
+ put
+ exch 1 add exch
+ }
+ if
+ dup 63 eq { % ? -> \?
+ 2 index 2 index 92
+ put
+ exch 1 add exch
+ }
+ if
+ 2 index 2 index 3 -1 roll put 1 add
+ } for
+ 0 exch getinterval exch pop
+} bind def
+
+/.locksafe {
+ SAFETY /safe get not {
+ <<
+ /PermitFileReading [
+ currentuserparams /PermitFileReading get aload pop
+ { .makepathtemplate
+ dup .filenamedirseparator concatstrings (*) concatstrings
+ exch % put string below this procedure
+ }
+ /LIBPATH .systemvar { 1 index exec } forall
+ /FONTPATH .systemvar { 1 index exec } forall
+ currentsystemparams /GenericResourceDir get 1 index exec
+ currentsystemparams /FontResourceDir get exch exec
+ ]
+ /LockFilePermissions true
+ >> setuserparams
+ }
+ if
+ % setpagedevice has the side effect of clearing the page, but
+ % we will just document that. Using setpagedevice keeps the device
+ % properties and pagedevice .LockSafetyParams in agreement even
+ % after a restore that changes the value to false.
+ currentglobal currentpagedevice gcheck setglobal % use correct VM space
+ << /.LockSafetyParams true >> setpagedevice
+ setglobal
+ //SAFETY /safe //true .forceput % overrides readonly
+} .bind executeonly odef
+
+/.setsafe
+{
+ SAFETY /safe get not {
+ <<
+ PARANOIDSAFER { % only PARANOIDSAFER locks down reading files
+ /PermitFileReading [ ]
+ } if
+ /PermitFileWriting [ ]
+ /PermitFileControl [ ]
+ >> setuserparams
+ }
+ if
+ .locksafe
+} .bind executeonly odef
+
+/deletefile {
+ count 1 lt {
+ //deletefile /stackunderflow signalerror
+ }
+ if
+ dup { deletefile } stopped {
+ pop //deletefile $error /errorname get signalerror
+ } {
+ % deletefile succeeded. Remove from tempfile list if present
+ //SAFETY /tempfiles get exch cvn 2 copy known {
+ .forceundef
+ } {
+ pop pop
+ }
+ ifelse
+ }
+ ifelse
+} .bind executeonly odef
+
+% If a file is opened with .tempfile with SAFER not (yet) set,
+% the file can be deleted later, even if SAFER is set.
+/.tempfile {
+ .tempfile % filename file
+ //SAFETY /tempfiles get 2 index true .forceput
+} .bind executeonly odef
+
+% If we are running in SAFER mode, lock things down
+SAFER { .setsafe } if
+
+% If we delayed binding, make it possible to do it later.
+/.bindnow {
+ //systemdict begin .bindoperators end
+ % Temporarily disable the typecheck error.
+ errordict /typecheck 2 copy get
+ errordict /typecheck { pop } put % pop the command
+ 0 1 .delaycount 1 sub { .delaybind exch get .bind pop } for
+ //systemdict /.delaybind {} .forceput % reclaim the space
+ //systemdict /.bindnow .forceundef % ditto
+ put
+ //systemdict /.forcedef .forceundef % remove temptation
+ //systemdict /.forceput .forceundef % ditto
+ //systemdict /.forceundef .forceundef % ditto
+} .bind odef
+
+% Turn off array packing, since some PostScript code assumes that
+% procedures are writable.
+false setpacking
+
+(END INIT) VMDEBUG
+
+/.currentuserparams where {
+ pop
+ % Remove real user params from psuserparams.
+ mark .currentuserparams counttomark 2 idiv {
+ pop psuserparams exch undef
+ } repeat pop
+ % Update the copy of the user parameters.
+ mark .currentuserparams counttomark 2 idiv {
+ userparams 3 1 roll .forceput % userparams is read-only
+ } repeat pop
+ % Turn on idiom recognition, if available.
+ currentuserparams /IdiomRecognition known {
+ /IdiomRecognition true .definepsuserparam
+ } if
+ psuserparams readonly pop
+ systemdict /.definepsuserparam undef
+ % Save a copy of userparams for use with save/restore
+ % (and, if implemented, context switching).
+ .currentglobal false .setglobal
+ mark userparams { } forall .dicttomark readonly
+ /userparams exch .forcedef % systemdict is read-only
+ .setglobal
+} if
+/.currentsystemparams where {
+ pop
+ % Remove real system params from pssystemparams.
+ mark .currentsystemparams counttomark 2 idiv {
+ pop pssystemparams exch .forceundef
+ } repeat pop
+} if
+
+% Conditionally turn image interpolation on or off.
+currentdict /INTERPOLATE known not { (%END INTERPOLATE) .skipeof } if
+
+/.interpolate {
+ dup /Interpolate .knownget not { //false } if
+ /INTERPOLATE .systemvar ne {
+ dup gcheck .currentglobal exch .setglobal
+ exch dup length dict copy
+ dup /Interpolate /INTERPOLATE .systemvar put
+ exch .setglobal
+ } if
+} bind odef
+
+/colorimage
+ { /INTERPOLATE .systemvar
+ { .currentglobal % w h bit [] {}...{} multi ncomp glob
+ //false .setglobal
+ 9 dict begin % w h bit [] {}...{} multi ncomp glob
+ 2 index { 1 index 7 add } { 8 } ifelse
+ copy gsave pop % preserve the arguments
+ { 0 /DeviceGray 0 /DeviceRGB /DeviceCMYK }
+ 1 index get setcolorspace % ... glob w h bit [] {}...{} multi ncomp
+ {0 1 0 1 0 1 0 1}
+ 1 index 2 mul 0 exch % ... glob w h bit [] {}...{} multi ncomp {0 1 ...} 0 2*ncomp
+ getinterval /Decode exch def % ... glob w h bit [] {}...{} multi ncomp
+ exch dup % ... glob w h bit [] {}...{} ncomp multi multi
+ /MultipleDataSources exch def % ... glob w h bit [] {}...{} ncomp multi
+ { array astore} { pop } ifelse % ... glob w h bit [] [{}...{}]
+ /DataSource exch def % ... glob w h bit []
+ /ImageMatrix exch def % ... glob w h bit
+ /BitsPerComponent exch def % ... glob w h
+ /Height exch def % ... glob w
+ /Width exch def % ... glob
+ /ImageType 1 def
+ /Interpolate //true def
+ .setglobal currentdict end % ... <<>>
+ image grestore
+ exch { 4 add } { 6 } ifelse
+ { pop } repeat % -
+ }
+ { colorimage
+ }
+ ifelse
+ } bind odef
+
+/image
+ { dup type /dicttype eq
+ { dup /ImageType get 3 eq
+ { .currentglobal //false .setglobal exch
+ dup length dict copy begin .setglobal
+ /DataDict DataDict .interpolate def
+ /MaskDict MaskDict .interpolate def
+ currentdict end
+ }
+ { .interpolate
+ }
+ ifelse
+ image
+ }
+ { /INTERPOLATE .systemvar
+ { .currentglobal //false .setglobal
+ 8 dict begin .setglobal
+ /ImageType 1 def
+ /DataSource 1 index def
+ /ImageMatrix 2 index def
+ /BitsPerComponent 3 index def
+ /Decode {0 1} def
+ /Height 4 index def
+ /Width 5 index def
+ /Interpolate //true def
+ currentdict end
+ gsave /DeviceGray setcolorspace image grestore
+ 5 { pop } repeat
+ }
+ { image
+ }
+ ifelse
+ }
+ ifelse
+ } bind odef
+
+/imagemask {
+ dup type /dicttype eq {
+ .interpolate imagemask
+ } {
+ /INTERPOLATE .systemvar {
+ .currentglobal //false .setglobal
+ 8 dict begin .setglobal
+ /ImageType 1 def
+ /DataSource 1 index def
+ /ImageMatrix 2 index def
+ /BitsPerComponent 1 def
+ 2 index { {1 0} } { {0 1} } ifelse /Decode exch def
+ /Height 4 index def
+ /Width 5 index def
+ /Interpolate //true def
+ currentdict end imagemask 5 { pop } repeat
+ } {
+ imagemask
+ } ifelse
+ } ifelse
+} bind odef
+
+currentdict /.interpolate undef
+
+%END INTERPOLATE
+
+% Establish local VM as the default.
+false /setglobal where { pop setglobal } { .setglobal } ifelse
+$error /.nosetlocal false put
+
+(END GLOBAL) VMDEBUG
+
+/.savelocalstate where {
+ % If we might create new contexts, save away copies of all dictionaries
+ % referenced from systemdict that are stored in local VM,
+ % and also save a copy of the initial gstate.
+ pop .savelocalstate
+} {
+ % If we're *not* running in a multi-context system and FAKEFONTS is
+ % defined, add the fake fonts to LocalFontDirectory.
+ .definefakefonts % current VM is local
+} ifelse
+
+% Remove systemdict entries for things that have been bound in where used
+% and that shouldn't be accessible by name, and close up systemdict.
+currentdict /filterdict .undef
+currentdict /.cidfonttypes .undef
+currentdict /.colorrenderingtypes .undef
+currentdict /.formtypes .undef
+currentdict /.halftonetypes .undef
+currentdict /.imagetypes .undef
+currentdict /.imagemasktypes .undef
+currentdict /.patterntypes .undef
+currentdict /.shadingtypes .undef
+currentdict /.wheredict .undef
+end
+
+% Clean up VM, and enable GC.
+/vmreclaim where
+ { pop NOGC not { 2 vmreclaim 0 vmreclaim } if
+ } if
+DELAYBIND not {
+ systemdict /.forcedef .undef % remove temptation
+ systemdict /.forceput .undef % ditto
+ systemdict /.forceundef .undef % ditto
+} if
+WRITESYSTEMDICT not { systemdict readonly pop } if
+
+(END GC) VMDEBUG
+
+% The Adobe AGM_Core used by Illustrator 9 has some code that breaks
+% if the 'product' is not (Adobe PostScript Parser). A bug has been
+% submitted to Adobe since this also fails with Acrobat Distiller.
+% As a temporary work around, the following HACK will work for
+% devices without spot color support. Once Ghostscript can
+% support DeviceN and spot color separations this will need to
+% be 'true' in some cases.
+userdict /AGM_preserve_spots false put
+
+% The interpreter will run the initial procedure (start).
diff --git a/Master/xemtex/gslib/gs_kanji.ps b/Master/xemtex/gslib/gs_kanji.ps
new file mode 100644
index 00000000000..73514205904
--- /dev/null
+++ b/Master/xemtex/gslib/gs_kanji.ps
@@ -0,0 +1,159 @@
+% Copyright (C) 1994, 1995, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_kanji.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Scaffolding for Kanji fonts. This is based on the Wadalab free font
+% from the University of Tokyo; it may not be appropriate for other
+% Kanji fonts.
+
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+
+% Define the encoding for the root font.
+
+/KanjiEncoding
+% \x00
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+% \x20
+ 0 1 2 3 4 5 6 7
+ 8 0 0 0 0 0 0 0
+ 9 10 11 12 13 14 15 16
+ 17 18 19 20 21 22 23 24
+% \x40
+ 25 26 27 28 29 30 31 32
+ 33 34 35 36 37 38 39 40
+ 41 42 43 44 45 46 47 48
+ 49 50 51 52 53 54 55 56
+% \x60
+ 57 58 59 60 61 62 63 64
+ 65 66 67 68 69 70 71 72
+ 73 74 75 76 77 0 0 0
+ 0 0 0 0 0 0 0 0
+% \x80
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+% \xA0
+ 0 1 2 3 4 5 6 7
+ 8 0 0 0 0 0 0 0
+ 9 10 11 12 13 14 15 16
+ 17 18 19 20 21 22 23 24
+% \xC0
+ 25 26 27 28 29 30 31 32
+ 33 34 35 36 37 38 39 40
+ 41 42 43 44 45 46 47 48
+ 49 50 51 52 53 54 55 56
+% \xE0
+ 57 58 59 60 61 62 63 64
+ 65 66 67 68 69 70 71 72
+ 73 74 75 76 77 0 0 0
+ 0 0 0 0 0 0 0 0
+256 packedarray def
+
+% Define a stub for the base font encoding.
+
+ /KanjiSubEncoding { /KanjiSubEncoding .findencoding } bind def
+%% Replace 3 (gs_ksb_e.ps)
+ EncodingDirectory /KanjiSubEncoding
+ { (gs_ksb_e.ps) //systemdict begin runlibfile KanjiSubEncoding end }
+ bind put
+
+% Support procedures and data.
+
+/T1FontInfo 8 dict begin
+ /version (001.001) readonly def
+ /FullName (KanjiBase) readonly def
+ /FamilyName (KanjiBase) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ /UnderlinePosition 0 def
+ /UnderlineThickness 0 def
+currentdict end readonly def
+
+/T1NF % <fontname> T1NF <font>
+{
+20 dict begin
+ /FontName exch def
+ /FontType 1 def
+ /FontInfo T1FontInfo def
+ /FontMatrix [.001 0 0 .001 0 0] def
+ /FontBBox [0 0 1000 1000] def
+ /Encoding KanjiSubEncoding def
+ /CharStrings 150 dict def
+ /PaintType 0 def
+ /Private 2 dict def
+ Private begin
+ /BlueValues [] def
+ /password 5839 def
+ end
+FontName currentdict end definefont
+} def
+
+/T0NF % <fontname> T0NF <font>
+{
+20 dict begin
+ /FontName exch def
+ /FDepVector exch def
+ /FontType 0 def
+ /FontMatrix [1 0 0 1 0 0] def
+ /FMapType 2 def
+ /Encoding KanjiEncoding def
+FontName currentdict end definefont
+} def
+
+% Define the composite font and all the base fonts.
+
+/CompNF % <fontname> CompNF <font>
+{
+/newname1 exch def
+newname1 dup length string cvs /str exch def
+str length /len exch def
+/fdepvector 78 array def
+/j 1 def
+16#21 1 16#74 {
+/i exch def
+KanjiEncoding i get 0 gt {
+len 4 add string /newstr exch def
+newstr 0 str putinterval
+newstr len (.r) putinterval
+newstr len 2 add i 16 2 string cvrs putinterval
+newstr cvn /newlit exch def
+newlit T1NF /newfont exch def
+fdepvector j newfont put
+/j j 1 add def
+} if
+} for
+fdepvector 0 fdepvector 1 get put
+/j 0 def
+fdepvector newname1 T0NF
+} def
+
+% Define an individual character in a composite font.
+/CompD % <charstring> <(HL)> CompD -
+ { currentfont /Encoding get 1 index 0 get get % FDepVector index
+ currentfont /FDepVector get exch get % base font
+ dup /Encoding get 3 -1 roll 1 get get % base font character name
+ exch /CharStrings get exch 3 -1 roll put
+ } bind def
+
+exec
diff --git a/Master/xemtex/gslib/gs_ksb_e.ps b/Master/xemtex/gslib/gs_ksb_e.ps
new file mode 100644
index 00000000000..58993feaf12
--- /dev/null
+++ b/Master/xemtex/gslib/gs_ksb_e.ps
@@ -0,0 +1,65 @@
+% Copyright (C) 1994 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_ksb_e.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Define the KanjiSub encoding vector.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/KanjiSubEncoding
+%\x00
+ /.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
+%\x20
+ /.notdef /c21 /c22 /c23 /c24 /c25 /c26 /c27
+ /c28 /c29 /c2A /c2B /c2C /c2D /c2E /c2F
+ /c30 /c31 /c32 /c33 /c34 /c35 /c36 /c37
+ /c38 /c39 /c3A /c3B /c3C /c3D /c3E /c3F
+%\x40
+ /c40 /c41 /c42 /c43 /c44 /c45 /c46 /c47
+ /c48 /c49 /c4A /c4B /c4C /c4D /c4E /c4F
+ /c50 /c51 /c52 /c53 /c54 /c55 /c56 /c57
+ /c58 /c59 /c5A /c5B /c5C /c5D /c5E /c5F
+%\x60
+ /c60 /c61 /c62 /c63 /c64 /c65 /c66 /c67
+ /c68 /c69 /c6A /c6B /c6C /c6D /c6E /c6F
+ /c70 /c71 /c72 /c73 /c74 /c75 /c76 /c77
+ /c78 /c79 /c7A /c7B /c7C /c7D /c7E /.notdef
+%\x80
+ /.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
+%\xA0
+ /.notdef /c21 /c22 /c23 /c24 /c25 /c26 /c27
+ /c28 /c29 /c2A /c2B /c2C /c2D /c2E /c2F
+ /c30 /c31 /c32 /c33 /c34 /c35 /c36 /c37
+ /c38 /c39 /c3A /c3B /c3C /c3D /c3E /c3F
+%\xC0
+ /c40 /c41 /c42 /c43 /c44 /c45 /c46 /c47
+ /c48 /c49 /c4A /c4B /c4C /c4D /c4E /c4F
+ /c50 /c51 /c52 /c53 /c54 /c55 /c56 /c57
+ /c58 /c59 /c5A /c5B /c5C /c5D /c5E /c5F
+%\xE0
+ /c60 /c61 /c62 /c63 /c64 /c65 /c66 /c67
+ /c68 /c69 /c6A /c6B /c6C /c6D /c6E /c6F
+ /c70 /c71 /c72 /c73 /c74 /c75 /c76 /c77
+ /c78 /c79 /c7A /c7B /c7C /c7D /c7E /.notdef
+256 packedarray .defineencoding
+exec
diff --git a/Master/xemtex/gslib/gs_l.xbm b/Master/xemtex/gslib/gs_l.xbm
new file mode 100644
index 00000000000..4f9de445487
--- /dev/null
+++ b/Master/xemtex/gslib/gs_l.xbm
@@ -0,0 +1,29 @@
+#define gs_l.xbm_width 48
+#define gs_l.xbm_height 48
+#define gs_l.xbm_x_hot 0
+#define gs_l.xbm_y_hot 0
+static unsigned char gs_l.xbm_bits[] = {
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x20, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x3e, 0x03, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x07, 0x00,
+ 0x00, 0xe0, 0xff, 0x0f, 0x07, 0x00, 0x00, 0xf8, 0xff, 0x81, 0x07, 0x00,
+ 0x00, 0xfc, 0x1f, 0xc0, 0x0f, 0x00, 0x00, 0xfe, 0x07, 0xf0, 0x1f, 0x00,
+ 0x00, 0xff, 0x01, 0xf8, 0x1f, 0x00, 0x00, 0xff, 0x41, 0xfc, 0x3f, 0x00,
+ 0x80, 0xff, 0xc8, 0xfc, 0x3f, 0x00, 0x80, 0xff, 0xd8, 0xf8, 0x3f, 0x00,
+ 0x80, 0xff, 0x98, 0xf0, 0x3f, 0x00, 0x80, 0xff, 0x10, 0xe0, 0x3f, 0x00,
+ 0x00, 0xff, 0x01, 0xc0, 0x3f, 0x00, 0x00, 0xff, 0x81, 0x81, 0x1f, 0x00,
+ 0x00, 0xfe, 0x83, 0x83, 0x1f, 0x00, 0x00, 0xfc, 0x0f, 0x83, 0x0f, 0x00,
+ 0x00, 0xf8, 0x1f, 0xc3, 0x03, 0x00, 0x00, 0xe0, 0x1f, 0xe0, 0x01, 0x00,
+ 0x00, 0xf0, 0x1f, 0x38, 0x00, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0x00,
+ 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00,
+ 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0xc0, 0xff, 0xff, 0xff, 0x01, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x0f, 0x00,
+ 0x80, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x03,
+ 0x00, 0xc0, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x03,
+ 0xc0, 0x3f, 0x00, 0x00, 0xff, 0x03, 0xe0, 0x0f, 0x00, 0x00, 0xfe, 0x03,
+ 0xf0, 0x07, 0xfc, 0x00, 0xfc, 0x01, 0xf0, 0x07, 0x0e, 0x00, 0xff, 0x04,
+ 0xf0, 0x07, 0x7e, 0xe0, 0x7f, 0x02, 0xf0, 0x0f, 0xfc, 0xff, 0x1f, 0x01,
+ 0xe0, 0x1f, 0xf0, 0xff, 0xc3, 0x00, 0xc0, 0xff, 0x00, 0x00, 0x78, 0x00,
+ 0x80, 0xff, 0x0f, 0xf8, 0x3f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x07, 0x00,
+ 0x00, 0xe0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/Master/xemtex/gslib/gs_l.xpm b/Master/xemtex/gslib/gs_l.xpm
new file mode 100644
index 00000000000..ef898c29c8c
--- /dev/null
+++ b/Master/xemtex/gslib/gs_l.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char * gs_l_xpm[] = {
+/* width height ncolors cpp [x_hot y_hot] */
+"48 48 4 1 0 0",
+/* colors */
+" s none m none c none",
+". s iconColor1 m black c black",
+"X s iconColor2 m white c white",
+"o s iconColor5 m black c blue",
+/* pixels */
+" . ",
+" .X.. ",
+" .X.. ",
+" .XX.. ",
+" .....XX.. ",
+" .............XXX... ",
+" ...............XXXX... ",
+" ..............XXXXXX.... ",
+" ...........XXXXXXXXX...... ",
+" ..........XXXXXXXXX......... ",
+" .........XXXXXXXXXX.......... ",
+" .........XXXXXoXXX............ ",
+" .........XXXoXXooXX............ ",
+" .........XXXooXooXXX........... ",
+" .........XXXooXXoXXXX.......... ",
+" .........XXXXoXXXXXXXX......... ",
+" .........XXXXXXXXXXXXX........ ",
+" .........XXXXXXooXXXXXX...... ",
+" .........XXXXXoooXXXXX...... ",
+" ..........XXXXooXXXXX..... ",
+" ..........XXXooXXXX.... ",
+" ........XXXXXXXX.... ",
+" .........XXXXXX... ",
+" ..........XXXXXXX ",
+" ........XXXXXXXXXXXX ",
+" ........XXXXXXXXXXXXXX ",
+" ..........XXXXXXXXXXXXXXX ",
+" ..................XXXXXXXXX ",
+" ...........................X ",
+" .............................. ",
+" ................................ ",
+" ................................. ",
+" ................................. ",
+" ................................ ",
+" ............................ ",
+" XXXXXXXXXXXXX.............. ",
+" ........XXXXXXXXXXXXXXXXXX.......... ",
+" .......XXXXXXXXXXXXXXXXXXXXX......... ",
+" .......XXXXXXX......XXXXXXXXXX.......X ",
+" .......XXXXXX...XXXXXXXXXXXX........XX. ",
+" .......XXXXXX......XXXXXX..........XX. ",
+" ........XXXXXX...................XXX. ",
+" ........XXXXXXX..............XXXX.. ",
+" ..........XXXXXXXXXXXXXXXXXXX.... ",
+" .............XXXXXXX........... ",
+" .......................... ",
+" ................... ",
+" "};
diff --git a/Master/xemtex/gslib/gs_l2img.ps b/Master/xemtex/gslib/gs_l2img.ps
new file mode 100644
index 00000000000..39188c68ade
--- /dev/null
+++ b/Master/xemtex/gslib/gs_l2img.ps
@@ -0,0 +1,185 @@
+% Copyright (C) 1995, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_l2img.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Emulate the Level 2 dictionary-based image operator in Level 1,
+% except for Interpolate (ignored) and MultipleDataSources = true;
+% also, we require that the data source be either a procedure of a
+% particular form or a stream, not a string or a general procedure.
+
+% pdf2ps copies the portion of this file from %BEGIN to %END if Level 1
+% compatible output is requested.
+
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+
+/packedarray where
+ { pop }
+ { /packedarray { array astore readonly } bind def }
+ifelse
+
+%BEGIN
+
+11 dict /.csncompdict 1 index def begin
+ /DeviceGray { 1 /setgray load } bind def
+ /DeviceRGB { 3 /setrgbcolor load } bind def
+ /DeviceCMYK { 4 /setcmykcolor load } bind def
+ /Indexed
+ { dup 1 index 1 get //.csncompdict exch get exec
+ % Stack: [/Indexed base hival map] ncomp basesetcolor
+ 3 -1 roll 3 get mark 3 1 roll
+ % Stack: ncomp -mark- basesetcolor map
+ dup type /stringtype eq
+ { { -
+ { exch round cvi get 255 div
+ }
+ -
+ { exch round cvi 3 mul 2 copy 2 copy get 255 div
+ 3 1 roll 1 add get 255 div
+ 4 2 roll 2 add get 255 div
+ }
+ { exch round cvi 4 mul 2 copy 2 copy 2 copy get 255 div
+ 3 1 roll 1 add get 255 div
+ 4 2 roll 2 add get 255 div
+ 5 3 roll 3 add get 255 div
+ }
+ }
+ 4 index get aload pop counttomark -1 roll
+ }
+ { /exec load 3 -1 roll
+ % Stack: -mark- mapproc --exec-- basesetcolor
+ }
+ ifelse .packtomark cvx
+ exch pop 1 exch
+ } bind def
+ /Separation
+ { dup 2 index //.csncompdict exch get exec
+ % Stack: [/Separation name alt xform] ncomp altsetcolor
+ 3 -1 roll 3 get /exec load 3 -1 roll 3 array astore readonly cvx
+ exch pop 1 exch
+ } bind def
+ % Substitute device spaces for CIE spaces.
+ /CIEBasedA /DeviceGray load def
+ /CIEBasedABC /DeviceRGB load def
+ /CIEBasedDEF /DeviceRGB load def
+ /CIEBasedDEFG /DeviceCMYK load def
+end
+
+/.packtomark { counttomark packedarray exch pop } bind def
+
+/.csinextbits % - .csinextbits <bits>
+ % Uses b, nnb, i, row, mask, BitsPerComponent;
+ % sets b, nnb, i.
+ { /nnb nnb BitsPerComponent add
+ { dup 0 le { exit } if
+ /b b 8 bitshift row i get add def
+ /i i 1 add def 8 sub
+ }
+ loop def
+ b nnb bitshift mask and
+ } bind def
+
+% Note that the ColorSpace key must be present in the image dictionary.
+/.colorspaceimage % <imagedict> .colorspaceimage -
+ { save exch
+ dup length 15 add dict begin { cvlit def } forall
+ ColorSpace dup dup type /nametype ne { 0 get } if
+ .csncompdict exch get exec
+ /setpixelcolor exch def /ncomp exch def pop
+ /row ncomp BitsPerComponent mul Width mul 7 add 8 idiv string def
+ /mask 1 BitsPerComponent bitshift 1 sub def
+ /nextbits BitsPerComponent 8 eq
+ { { row i get /i i 1 add def } }
+ { /.csinextbits load }
+ ifelse def
+ /nextpixel mark 0 2 ncomp 1 sub 2 mul
+ { /nextbits cvx exch
+ Decode exch 2 getinterval
+ dup aload pop exch sub
+ dup mask eq { pop } { mask div /mul load 3 -1 roll } ifelse
+ 0 get dup 0 eq { pop } { /sub load 3 -1 roll } ifelse
+ }
+ for
+ /setpixelcolor load dup type /operatortype ne { /exec load } if
+ .packtomark cvx def
+ /readrow
+ /DataSource load dup type
+ dup /arraytype eq exch /packedarraytype eq or
+ { % Must be { <file> <string> ... }
+ aload length 1 add array /pop load exch astore
+ dup 1 row put cvx
+ }
+ { pop
+ % Adobe requires readstring to signal an error if given
+ % an empty string. Work around this nonsense here.
+ row length 0 eq
+ { { } }
+ { { DataSource row readstring pop pop } }
+ ifelse
+ }
+ ifelse def
+ ImageMatrix matrix invertmatrix concat
+ /imat matrix def
+ 0 1 Height 1 sub
+ { imat 5 3 -1 roll neg put
+ readrow
+ /b 0 def /nnb 0 def /i 0 def
+ 0 1 Width 1 sub
+ { imat 4 3 -1 roll neg put nextpixel
+ 1 1 true imat {<80>} imagemask
+ }
+ for
+ }
+ for
+ end restore
+ } bind def
+
+%END
+exec
+currentfile closefile
+
+% Patch for testing.
+/.cincompdict 3 dict begin
+ 1 { {0 1} {/DeviceGray} } def
+ 3 { {0 1 0 1 0 1} {/DeviceRGB} } def
+ 4 { {0 1 0 1 0 1 0 1} {/DeviceCMYK} } def
+currentdict end def
+/.imagekeys [
+ /Decode /DataSource /ImageMatrix /BitsPerComponent /Height /Width
+] def
+/colorimage % <width> <height> <bits/comp> <matrix>
+ % <datasrc> false <ncomp> colorimage -
+ { 1 index { /colorimage load /rangecheck signalerror } if exch pop
+ //.cincompdict exch get exec
+ 7 dict begin /ColorSpace exch cvlit def
+ .imagekeys { exch cvlit def } forall
+ currentdict end .colorspaceimage
+ } bind odef
+/image
+ { dup type /dicttype ne
+ { 7 dict begin /ColorSpace /DeviceGray def [0 1]
+ .imagekeys { exch cvlit def } forall
+ currentdict end
+ }
+ { dup length 1 add dict .copydict dup /ColorSpace currentcolorspace put
+ }
+ ifelse
+ .colorspaceimage
+ } bind odef
+
+exec
diff --git a/Master/xemtex/gslib/gs_l_m.xbm b/Master/xemtex/gslib/gs_l_m.xbm
new file mode 100644
index 00000000000..0253814e7b0
--- /dev/null
+++ b/Master/xemtex/gslib/gs_l_m.xbm
@@ -0,0 +1,29 @@
+#define gs_l_m.xbm_width 48
+#define gs_l_m.xbm_height 48
+#define gs_l_m.xbm_x_hot 0
+#define gs_l_m.xbm_y_hot 0
+static unsigned char gs_l_m.xbm_bits[] = {
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0x00,
+ 0x00, 0xe0, 0xff, 0xff, 0x07, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x07, 0x00,
+ 0x00, 0xfc, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x1f, 0x00,
+ 0x00, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0xff, 0x3f, 0x00,
+ 0x80, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x80, 0xff, 0xff, 0xff, 0x3f, 0x00,
+ 0x80, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x80, 0xff, 0xff, 0xff, 0x3f, 0x00,
+ 0x00, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xff, 0x1f, 0x00,
+ 0x00, 0xfe, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x0f, 0x00,
+ 0x00, 0xf8, 0xff, 0xff, 0x03, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x01, 0x00,
+ 0x00, 0xf0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x07, 0x00, 0x00,
+ 0x00, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x80, 0xff, 0xff, 0x1f, 0x00, 0x00,
+ 0xc0, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x01, 0x00,
+ 0xc0, 0xff, 0xff, 0xff, 0x03, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x0f, 0x00,
+ 0x80, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x03,
+ 0x00, 0xc0, 0xff, 0xff, 0xff, 0x03, 0x00, 0x80, 0xff, 0xff, 0xff, 0x03,
+ 0xc0, 0xff, 0xff, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x03,
+ 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x07,
+ 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x01,
+ 0xe0, 0xff, 0xff, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x7f, 0x00,
+ 0x80, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x07, 0x00,
+ 0x00, 0xe0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/Master/xemtex/gslib/gs_lev2.ps b/Master/xemtex/gslib/gs_lev2.ps
new file mode 100644
index 00000000000..70b62018752
--- /dev/null
+++ b/Master/xemtex/gslib/gs_lev2.ps
@@ -0,0 +1,935 @@
+% Copyright (C) 1990, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_lev2.ps,v 1.7.2.4.2.3 2003/04/12 14:02:38 giles Exp $
+% Initialization file for Level 2 functions.
+% When this is run, systemdict is still writable,
+% but (almost) everything defined here goes into level2dict.
+
+level2dict begin
+
+% ------ System and user parameters ------ %
+
+% User parameters must obey save/restore, and must also be maintained
+% per-context. We implement the former, and some of the latter, here
+% with PostScript code. NOTE: our implementation assumes that user
+% parameters change only as a result of setuserparams -- that there are
+% no user parameters that are ever changed dynamically by the interpreter
+% (although the interpreter may adjust the value presented to setuserparams)
+%
+% There are two types of user parameters: those which are actually
+% maintained in the interpreter, and those which exist only at the
+% PostScript level. We maintain the current state of both types in
+% a read-only local dictionary named userparams, defined in systemdict.
+% In a multi-context system, each context has its own copy of this
+% dictionary. In addition, there is a constant dictionary named
+% psuserparams where each key is the name of a user parameter that exists
+% only in PostScript and the value is a procedure to check that the value
+% is legal: setuserparams uses this for checking the values.
+% setuserparams updates userparams explicitly, in addition to setting
+% any user parameters in the interpreter; thus we can use userparams
+% to reset those parameters after a restore or a context switch.
+% NOTE: the name userparams is known to the interpreter, and in fact
+% the interpreter creates the userparams dictionary.
+
+% Check parameters that are managed at the PostScript level.
+/.checkparamtype { % <newvalue> <type> .checkparamtype <bool>
+ exch type eq
+} .bind def
+/.checksetparams { % <newdict> <opname> <checkdict>
+ % .checksetparams <newdict>
+ 2 index {
+ % Stack: newdict opname checkdict key newvalue
+ 3 copy 3 1 roll .knownget {
+ exec not {
+ pop pop pop load /typecheck signalerror
+ } if
+ dup type /stringtype eq {
+ dup rcheck not {
+ pop pop pop load /invalidaccess signalerror
+ } if
+ } if
+ } {
+ pop
+ } ifelse pop pop
+ } forall pop pop
+} .bind def % not odef, shouldn't reset stacks
+
+% currentuser/systemparams creates and returns a dictionary in the
+% current VM. The easiest way to make this work is to copy any composite
+% PostScript-level parameters to global VM. Currently we have strings
+% as well as arrays. For arrays, we also need to copy any contents that
+% are in VM. Also copying string parameters insures the contents won't
+% be changed. Also be careful to preserve 'executable' state.
+/.copyparam { % <value> .copyparam <value'>
+ dup type /arraytype eq {
+ .currentglobal true .setglobal exch
+ dup xcheck exch % original executable state
+ [ exch {
+ dup type dup /arraytype eq exch /stringtype eq or {
+ .copyparam % recurse to handle composite array elements
+ } if
+ } forall ]
+ exch { cvx } if % set executable state
+ exch .setglobal
+ } if
+ dup type /stringtype eq {
+ .currentglobal true .setglobal
+ 1 index length string exch .setglobal
+ copy readonly
+ } if
+} .bind def
+
+% Some user parameters are managed entirely at the PostScript level.
+% We take care of that here.
+systemdict begin
+/psuserparams 48 dict def
+/getuserparam { % <name> getuserparam <value>
+ /userparams .systemvar 1 index get exch pop
+} odef
+% Fill in userparams (created by the interpreter) with current values.
+mark .currentuserparams
+counttomark 2 idiv {
+ userparams 3 1 roll put
+} repeat pop
+/.definepsuserparam { % <name> <value> .definepsuserparam -
+ psuserparams 3 copy pop
+ type cvlit /.checkparamtype cvx 2 packedarray cvx put
+ userparams 3 1 roll put
+} .bind def
+end
+/currentuserparams { % - currentuserparams <dict>
+ /userparams .systemvar dup length dict .copydict
+} odef
+/setuserparams { % <dict> setuserparams -
+ % Check that we will be able to set the PostScript-level
+ % user parameters.
+ /setuserparams /psuserparams .systemvar .checksetparams
+ % Set the C-level user params. If this succeeds, we know that
+ % the password check succeeded.
+ dup .setuserparams
+ % Now set the PostScript-level params.
+ % The interpreter may have adjusted the values of some of the
+ % parameters, so we have to read them back.
+ dup {
+ /userparams .systemvar 2 index known {
+ psuserparams 2 index known not {
+ pop dup .getuserparam
+ } if
+ .copyparam
+ /userparams .systemvar 3 1 roll .forceput % userparams is read-only
+ } {
+ pop pop
+ } ifelse
+ } forall
+ % A context switch might have occurred during the above loop,
+ % causing the interpreter-level parameters to be reset.
+ % Set them again to the new values. From here on, we are safe,
+ % since a context switch will consult userparams.
+ .setuserparams
+} .bind odef
+% Initialize user parameters managed here.
+/JobName () .definepsuserparam
+
+% Restore must restore the user parameters.
+% (Since userparams is in local VM, save takes care of saving them.)
+/restore { % <save> restore -
+ //restore /userparams .systemvar .setuserparams
+} .bind odef
+
+% The pssystemparams dictionary holds some system parameters that
+% are managed entirely at the PostScript level.
+systemdict begin
+currentdict /pssystemparams known not {
+ /pssystemparams 40 dict readonly def
+} if
+/getsystemparam { % <name> getsystemparam <value>
+ //pssystemparams 1 index .knownget { exch pop } { .getsystemparam } ifelse
+} odef
+end
+/currentsystemparams { % - currentsystemparams <dict>
+ mark .currentsystemparams //pssystemparams { } forall .dicttomark
+} odef
+/setsystemparams { % <dict> setsystemparams -
+ % Check that we will be able to set the PostScript-level
+ % system parameters.
+ /SAFETY .systemvar /safe get {
+ % SAFER mode disallows some changes
+ [ /GenericResourceDir /FontResourceDir /GenericResourcePathSep ] {
+ 2 copy .knownget {
+ exch //pssystemparams exch .knownget {
+ ne { /setsystemparams /invalidaccess signalerror } if
+ } {
+ pop
+ } ifelse
+ } {
+ pop
+ } ifelse
+ } forall
+ } if
+ /setsystemparams //pssystemparams mark exch {
+ type cvlit /.checkparamtype cvx 2 packedarray cvx
+ } forall .dicttomark .checksetparams
+ % Set the C-level system params. If this succeeds, we know that
+ % the password check succeeded.
+ dup .setsystemparams
+ % Now set the PostScript-level params. We must copy local strings
+ % into global VM.
+ dup
+ { //pssystemparams 2 index known
+ { % Stack: key newvalue
+ .copyparam
+ //pssystemparams 3 1 roll .forceput % pssystemparams is read-only
+ }
+ { pop pop
+ }
+ ifelse
+ }
+ forall pop
+} .bind odef
+
+% Initialize the passwords.
+% NOTE: the names StartJobPassword and SystemParamsPassword are known to
+% the interpreter, and must be bound to noaccess strings.
+% The length of these strings must be max_password (iutil2.h) + 1.
+/StartJobPassword 65 string noaccess def
+/SystemParamsPassword 65 string noaccess def
+
+% Redefine cache parameter setting to interact properly with userparams.
+/setcachelimit {
+ mark /MaxFontItem 2 index .dicttomark setuserparams pop
+} .bind odef
+/setcacheparams {
+ % The MaxFontCache parameter is a system parameter, which we might
+ % not be able to set. Fortunately, this doesn't matter, because
+ % system parameters don't have to be synchronized between this code
+ % and the VM.
+ counttomark 1 add copy setcacheparams
+ currentcacheparams % mark size lower upper
+ 3 -1 roll pop
+ /MinFontCompress 3 1 roll
+ /MaxFontItem exch
+ .dicttomark setuserparams
+ cleartomark
+} .bind odef
+
+% Add bogus user and system parameters to satisfy badly written PostScript
+% programs that incorrectly assume the existence of all the parameters
+% listed in Appendix C of the Red Book. Note that some of these may become
+% real parameters later: code near the end of gs_init.ps takes care of
+% removing any such parameters from ps{user,system}params.
+
+% psuserparams
+ /MaxFormItem 100000 .definepsuserparam
+ /MaxPatternItem 20000 .definepsuserparam
+ /MaxScreenItem 48000 .definepsuserparam
+ /MaxUPathItem 5000 .definepsuserparam
+
+% File Access Permission parameters
+ .currentglobal true .setglobal
+ /.checkFilePermitparams {
+ type /arraytype eq {
+ currentuserparams /LockFilePermissions get {
+ 5 { pop } repeat /setuserparams /invalidaccess signalerror
+ }
+ if
+ } {
+ 5 { pop } repeat /setuserparams /typecheck signalerror
+ }
+ ifelse
+ true
+ } .bind def
+% Initialize the File Permission access control to wide open
+% These will only be accessed via current/set userparams.
+% Values are a string containing multiple nul terminated path strings
+ /PermitFileReading dup [ (*) ] .definepsuserparam
+ psuserparams exch /.checkFilePermitparams load put
+ /PermitFileWriting dup [ (*) ] .definepsuserparam
+ psuserparams exch /.checkFilePermitparams load put
+ /PermitFileControl dup [ (*) ] .definepsuserparam
+ psuserparams exch /.checkFilePermitparams load put
+ .setglobal
+
+pssystemparams begin
+ /CurDisplayList 0 .forcedef
+ /CurFormCache 0 .forcedef
+ /CurOutlineCache 0 .forcedef
+ /CurPatternCache 0 .forcedef
+ /CurUPathCache 0 .forcedef
+ /CurScreenStorage 0 .forcedef
+ /CurSourceList 0 .forcedef
+ /DoPrintErrors false .forcedef
+ /MaxDisplayList 140000 .forcedef
+ /MaxFormCache 100000 .forcedef
+ /MaxOutlineCache 65000 .forcedef
+ /MaxPatternCache 100000 .forcedef
+ /MaxUPathCache 300000 .forcedef
+ /MaxScreenStorage 84000 .forcedef
+ /MaxSourceList 25000 .forcedef
+ /RamSize 4194304 .forcedef
+end
+
+% Define the procedures for handling comment scanning. The names
+% %ProcessComment and %ProcessDSCComment are known to the interpreter.
+% These procedures take the file and comment string and file as operands.
+/.checkprocesscomment {
+ dup null eq {
+ pop true
+ } {
+ dup xcheck {
+ type dup /arraytype eq exch /packedarraytype eq or
+ } {
+ pop false
+ } ifelse
+ } ifelse
+} .bind def
+/ProcessComment null .definepsuserparam
+psuserparams /ProcessComment {.checkprocesscomment} put
+(%ProcessComment) cvn {
+ /ProcessComment getuserparam
+ dup null eq { pop pop pop } { exec } ifelse
+} bind def
+/ProcessDSCComment null .definepsuserparam
+psuserparams /ProcessDSCComment {.checkprocesscomment} put
+(%ProcessDSCComment) cvn {
+ /ProcessDSCComment getuserparam
+ dup null eq { pop pop pop } { exec } ifelse
+} bind def
+
+% ------ Miscellaneous ------ %
+
+(<<) cvn % - << -mark-
+ /mark load def
+(>>) cvn % -mark- <key1> <value1> ... >> <dict>
+ /.dicttomark load def
+/languagelevel 2 def
+% When running in Level 2 mode, this interpreter is supposed to be
+% compatible with Adobe version 2017.
+/version (2017) readonly def
+
+% If binary tokens are supported by this interpreter,
+% set an appropriate default binary object format.
+/setobjectformat where
+ { pop
+ /RealFormat getsystemparam (IEEE) eq { 1 } { 3 } ifelse
+ /ByteOrder getsystemparam { 1 add } if
+ setobjectformat
+ } if
+
+% Aldus Freehand versions 2.x check for the presence of the
+% setcolor operator, and if it is missing, substitute a procedure.
+% Unfortunately, the procedure takes different parameters from
+% the operator. As a result, files produced by this application
+% cause an error if the setcolor operator is actually defined
+% and 'bind' is ever used. Aldus fixed this bug in Freehand 3.0,
+% but there are a lot of files created by the older versions
+% still floating around. Therefore, at Adobe's suggestion,
+% we implement the following dreadful hack in the 'where' operator:
+% If the key is /setcolor, and
+% there is a dictionary named FreeHandDict, and
+% currentdict is that dictionary,
+% then "where" consults only that dictionary and not any other
+% dictionaries on the dictionary stack.
+.wheredict /setcolor {
+ /FreeHandDict .where {
+ /FreeHandDict get currentdict eq {
+ pop currentdict /setcolor known { currentdict true } { false } ifelse
+ } {
+ .where
+ } ifelse
+ } {
+ .where
+ } ifelse
+} bind put
+
+% ------ Virtual memory ------ %
+
+/currentglobal % - currentglobal <bool>
+ /currentshared load def
+/gcheck % <obj> gcheck <bool>
+ /scheck load def
+/setglobal % <bool> setglobal -
+ /setshared load def
+% We can make the global dictionaries very small, because they auto-expand.
+/globaldict currentdict /shareddict .knownget not { 4 dict } if def
+/GlobalFontDirectory SharedFontDirectory def
+
+% VMReclaim and VMThreshold are user parameters.
+/setvmthreshold { % <int> setvmthreshold -
+ mark /VMThreshold 2 index .dicttomark setuserparams pop
+} odef
+/vmreclaim { % <int> vmreclaim -
+ dup 0 gt {
+ .vmreclaim
+ } {
+ mark /VMReclaim 2 index .dicttomark setuserparams pop
+ } ifelse
+} odef
+-1 setvmthreshold
+
+% ------ IODevices ------ %
+
+/.getdevparams where {
+ pop /currentdevparams { % <iodevice> currentdevparams <dict>
+ .getdevparams .dicttomark
+ } odef
+} if
+/.putdevparams where {
+ pop /setdevparams { % <iodevice> <dict> setdevparams -
+ mark 1 index { } forall counttomark 2 add index
+ .putdevparams pop pop
+ } odef
+} if
+
+% ------ Job control ------ %
+
+serverdict begin
+
+% We could protect the job information better, but we aren't attempting
+% (currently) to protect ourselves against maliciousness.
+
+/.jobsave null def % top-level save object
+/.jobsavelevel 0 def % save depth of job (0 if .jobsave is null,
+ % 1 otherwise)
+/.adminjob true def % status of current unencapsulated job
+
+end % serverdict
+
+% Because there may be objects on the e-stack created since the job save,
+% we have to clear the e-stack before doing the end-of-job restore.
+% We do this by executing a 2 .stop, which is caught by the 2 .stopped
+% in .runexec; we leave on the o-stack a procedure to execute aftewards.
+%
+%**************** The definition of startjob is not complete yet, since
+% it doesn't reset stdin/stdout.
+/.startnewjob { % <exit_bool> <password_level>
+ % .startnewjob -
+ serverdict /.jobsave get dup null eq { pop } { restore } ifelse
+ exch {
+ % Unencapsulated job
+ serverdict /.jobsave null put
+ serverdict /.jobsavelevel 0 put
+ serverdict /.adminjob 3 -1 roll 1 gt put
+ % The Adobe documentation doesn't say what happens to the
+ % graphics state stack in this case, but an experiment
+ % produced results suggesting that a grestoreall occurs.
+ grestoreall
+ } {
+ % Encapsulated job
+ pop
+ serverdict /.jobsave save put
+ serverdict /.jobsavelevel 1 put
+ } ifelse
+ % Reset the interpreter state.
+ clear cleardictstack
+ initgraphics
+ false setglobal
+} bind def
+/.startjob { % <exit_bool> <password> <finish_proc>
+ % .startjob <ok_bool>
+ vmstatus pop pop serverdict /.jobsavelevel get eq
+ 2 index .checkpassword 0 gt and {
+ exch .checkpassword exch count 3 roll count 3 sub { pop } repeat
+ cleardictstack
+ % Reset the e-stack back to the 2 .stopped in .runexec,
+ % passing the finish_proc to be executed afterwards.
+ 2 .stop
+ } { % Password check failed
+ pop pop pop false
+ } ifelse
+} odef
+/startjob { % <exit_bool> <password> startjob <ok_bool>
+ % This is a hack. We really need some way to indicate explicitly
+ % to the interpreter that we are under control of a job server.
+ .userdict /quit /stop load put
+ { .startnewjob true } .startjob
+} odef
+
+systemdict begin
+/quit { % - quit -
+ //systemdict begin serverdict /.jobsave get null eq
+ { end //quit }
+ { /quit load /invalidaccess /signalerror load end exec }
+ ifelse
+} bind odef
+end
+
+% We would like to define exitserver as a procedure, using the code
+% that the Red Book says is equivalent to it. However, since startjob
+% resets the exec stack, we can't do this, because control would never
+% proceed past the call on startjob if the exitserver is successful.
+% Instead, we need to construct exitserver out of pieces of startjob.
+
+serverdict begin
+
+/exitserver { % <password> exitserver -
+ true exch { .startnewjob } .startjob not {
+ /exitserver /invalidaccess signalerror
+ } if
+} bind def
+
+end % serverdict
+
+% ------ Compatibility ------ %
+
+% In Level 2 mode, the following replace the definitions that gs_statd.ps
+% installs in statusdict and serverdict.
+% Note that statusdict must be allocated in local VM.
+% We don't bother with many of these yet.
+
+/.dict1 { exch mark 3 1 roll .dicttomark } bind def
+
+currentglobal false setglobal 25 dict exch setglobal begin
+currentsystemparams
+
+% The following do not depend on the presence of setpagedevice.
+/buildtime 1 index /BuildTime get def
+/byteorder 1 index /ByteOrder get def
+/checkpassword { .checkpassword 0 gt } bind def
+dup /DoStartPage known
+ { /dostartpage { /DoStartPage getsystemparam } bind def
+ /setdostartpage { /DoStartPage .dict1 setsystemparams } bind def
+ } if
+dup /StartupMode known
+ { /dosysstart { /StartupMode getsystemparam 0 ne } bind def
+ /setdosysstart { { 1 } { 0 } ifelse /StartupMode .dict1 setsystemparams } bind def
+ } if
+%****** Setting jobname is supposed to set userparams.JobName, too.
+/jobname { /JobName getuserparam } bind def
+/jobtimeout { /JobTimeout getuserparam } bind def
+/ramsize { /RamSize getsystemparam } bind def
+/realformat 1 index /RealFormat get def
+dup /PrinterName known
+ { /setprintername { /PrinterName .dict1 setsystemparams } bind def
+ } if
+/printername
+ { currentsystemparams /PrinterName .knownget not { () } if exch copy
+ } bind def
+currentuserparams /WaitTimeout known
+ { /waittimeout { /WaitTimeout getuserparam } bind def
+ } if
+
+% The following do require setpagedevice.
+/.setpagedevice where { pop } { (%END PAGEDEVICE) .skipeof } ifelse
+/defaulttimeouts
+ { currentsystemparams dup
+ /JobTimeout .knownget not { 0 } if
+ exch /WaitTimeout .knownget not { 0 } if
+ currentpagedevice /ManualFeedTimeout .knownget not { 0 } if
+ } bind def
+/margins
+ { currentpagedevice /Margins .knownget { exch } { [0 0] } ifelse
+ } bind def
+/pagemargin
+ { currentpagedevice /PageOffset .knownget { 0 get } { 0 } ifelse
+ } bind def
+/pageparams
+ { currentpagedevice
+ dup /Orientation .knownget { 1 and ORIENT1 { 1 xor } if } { 0 } ifelse exch
+ dup /PageSize get aload pop 3 index 0 ne { exch } if 3 2 roll
+ /PageOffset .knownget { 0 get } { 0 } ifelse 4 -1 roll
+ } bind def
+/setdefaulttimeouts
+ { exch mark /ManualFeedTimeout 3 -1 roll
+ /Policies mark /ManualFeedTimeout 1 .dicttomark
+ .dicttomark setpagedevice
+ /WaitTimeout exch mark /JobTimeout 5 2 roll .dicttomark setsystemparams
+ } bind def
+/.setpagesize { 2 array astore /PageSize .dict1 setpagedevice } bind def
+/setduplexmode { /Duplex .dict1 setpagedevice } bind def
+/setmargins
+ { exch 2 array astore /Margins .dict1 setpagedevice
+ } bind def
+/setpagemargin { 0 2 array astore /PageOffset .dict1 setpagedevice } bind def
+/setpageparams
+ { mark /PageSize 6 -2 roll
+ 4 index 1 and ORIENT1 { 1 } { 0 } ifelse ne { exch } if 2 array astore
+ /Orientation 5 -1 roll ORIENT1 { 1 xor } if
+ /PageOffset counttomark 2 add -1 roll 0 2 array astore
+ .dicttomark setpagedevice
+ } bind def
+/setresolution
+ { dup 2 array astore /HWResolution .dict1 setpagedevice
+ } bind def
+%END PAGEDEVICE
+
+% The following are not implemented yet.
+%manualfeed
+%manualfeedtimeout
+%pagecount
+%pagestackorder
+%setpagestackorder
+
+pop % currentsystemparams
+
+% Flag the current dictionary so it will be swapped when we
+% change language levels. (See zmisc2.c for more information.)
+/statusdict currentdict def
+
+currentdict end
+/statusdict exch .forcedef % statusdict is local, systemdict is global
+
+% The following compatibility operators are in systemdict. They are
+% defined here, rather than in gs_init.ps, because they require the
+% resource machinery.
+
+/devforall { % <pattern> <proc> <scratch> devforall -
+ exch {
+ 1 index currentdevparams
+ /Type .knownget { /FileSystem eq } { false } ifelse
+ { exec } { pop pop } ifelse
+ } /exec load 3 packedarray cvx exch
+ (*) 3 1 roll ppstack flush /IODevice resourceforall
+} odef
+/devstatus { % <(%disk*%)> devstatus <searchable> <writable>
+ % <hasNames> <mounted> <removable> <searchOrder>
+ % <freePages> <size> true
+ % <string> devstatus false
+ dup length 5 ge {
+ dup 0 5 getinterval (%disk) eq {
+ dup /IODevice resourcestatus {
+ pop pop dup currentdevparams
+ dup /Searchable get
+ exch dup /Writable get
+ exch dup /HasNames get
+ exch dup /Mounted get
+ exch dup /Removable get
+ exch dup /SearchOrder get
+ exch dup /Free get
+ exch /LogicalSize get
+ 9 -1 roll pop true
+ } {
+ pop false
+ } ifelse
+ } {
+ pop false
+ } ifelse
+ } {
+ pop false
+ } ifelse
+} odef
+
+% ------ Color spaces ------ %
+
+% Attempt to convert a tint transformation procedure to a type 4 Function.
+% The value <m> is the number of function inputs
+% The current color space defines the number of function output values.
+% The current color space will be the alternate color space for the function.
+% If the conversion fails then build a color cube function.
+
+/.converttinttransform { % [.. .. .. proc ] <m>
+ % .converttinttransform [.. .. .. proc']
+ .currentglobal % Save current global memory state
+ 2 index gcheck .setglobal % Set gobal mode to match the array's mode
+ 4 dict % Build a dictionary for our type 4 function
+ dup /FunctionType 4 put % Set FunctionType
+ dup /Function 5 index 3 get put % Set function expression
+ % Stack: orig m global func
+ dup /Domain
+ [ 5 index {0 1} repeat ] put % set Domain values
+ dup /Range
+ [ mark currentcolor counttomark
+ dup 2 add 1 roll cleartomark % # of components in alternate space
+ {0 1} repeat ] put % Set Range values
+ { .buildfunction } .internalstopped % Try to build a type 4 function
+ dup
+ { % type 4 function failed - Collect data for a color cube
+ pop % Remove duplicate copy of stopped status
+ pop % Remove invalid type 4 function
+ 1 index % Get number of inputs
+ mark currentcolor counttomark % Count number of output colors
+ dup 2 add 1 roll cleartomark % # of components in alternate space
+ 4 index 3 get % Get tint transform function
+ { .buildcolorcube } .internalstopped
+ } if
+ { % Color cube build failed
+ pop pop pop exch pop exch pop % Remove unused parameters
+ .setglobal % Restore global state
+ } { % Function build succeeded - install function
+ % Stack: orig m global func
+ 3 -1 roll pop % Stack: orig global func
+ 2 index 4 array copy dup 3 4 -1 roll put
+ exch .setglobal exch pop
+ } ifelse
+} bind def
+
+% Define the setcolorspace procedures:
+% <colorspace> proc <colorspace'|null>
+% We have to define the dictionary first, so it can be bound into the
+% implementation procedure, but we can't populate it until the procedure
+% has been defined, so that the procedure can get bound into recursive calls.
+/colorspacedict 20 dict def
+
+/.devcs [
+ /DeviceGray /DeviceRGB /DeviceCMYK /DevicePixel
+] readonly def
+/currentcolorspace { % - currentcolorspace <array>
+ .currentcolorspace dup type /integertype eq {
+ //.devcs exch 1 getinterval
+ } if
+} odef
+currentdict /.devcs .undef
+
+/setcolorspace { % <name|array> setcolorspace -
+ dup dup dup type /nametype ne { 0 get } if
+ //colorspacedict exch get exec
+ dup null eq { pop } { .setcolorspace } ifelse pop
+} odef
+
+colorspacedict
+ dup /DeviceGray { pop 0 setgray null } bind put
+ dup /DeviceRGB { pop 0 0 0 setrgbcolor null } bind put
+ /setcmykcolor where
+ { pop dup /DeviceCMYK { pop 0 0 0 1 setcmykcolor null } bind put
+ } if
+ /.setcieaspace where
+ { pop dup /CIEBasedA { NOCIE { pop 0 setgray null } { dup 1 get .setcieaspace } ifelse } bind put
+ } if
+ /.setcieabcspace where
+ { pop dup /CIEBasedABC { NOCIE { pop 0 0 0 setrgbcolor null } { dup 1 get .setcieabcspace } ifelse } bind put
+ } if
+ /.setciedefspace where
+ { pop dup /CIEBasedDEF { NOCIE { pop 0 0 0 setrgbcolor null } { dup 1 get .setciedefspace } ifelse } bind put
+ } if
+ /.setciedefgspace where
+ { pop dup /CIEBasedDEFG { NOCIE { pop 0 0 0 1 setcmykcolor null } { dup 1 get .setciedefgspace } ifelse } bind put
+ } if
+ /.setseparationspace where
+ { pop dup /Separation { dup 2 get setcolorspace dup 1 .converttinttransform .setseparationspace } bind put
+ } if
+ /.setindexedspace where
+ { pop dup /Indexed { dup 1 get setcolorspace dup .setindexedspace } bind put
+ } if
+ /.nullpatternspace [/Pattern] readonly def
+ /.setpatternspace where
+ { pop dup /Pattern
+ { dup type /nametype eq { pop //.nullpatternspace } if
+ dup length 1 gt { dup 1 get setcolorspace } if
+ dup .setpatternspace
+ } bind put
+ } if
+ % If DeviceN space is included, gs_ll3.ps registers it.
+ /.setdevicepixelspace where
+ { pop dup /DevicePixel { dup .setdevicepixelspace } bind put
+ } if
+ currentdict /.nullpatternspace .undef
+pop
+
+% ------ CIE color rendering ------ %
+
+% Define findcolorrendering and a default ColorRendering ProcSet.
+
+/findcolorrendering { % <intentname> findcolorrendering
+ % <crdname> <found>
+ /ColorRendering /ProcSet findresource
+ 1 index .namestring (.) concatstrings
+ 1 index /GetPageDeviceName get exec .namestring (.) concatstrings
+ 2 index /GetHalftoneName get exec .namestring
+ concatstrings concatstrings
+ dup /ColorRendering resourcestatus {
+ pop pop exch pop exch pop true
+ } {
+ pop /GetSubstituteCRD get exec false
+ } ifelse
+} odef
+
+5 dict dup begin
+
+/GetPageDeviceName { % - GetPageDeviceName <name>
+ currentpagedevice dup /PageDeviceName .knownget {
+ exch pop dup null eq { pop /none } if
+ } {
+ pop /none
+ } ifelse
+} bind def
+
+/GetHalftoneName { % - GetHalftoneName <name>
+ currenthalftone /HalftoneName .knownget not { /none } if
+} bind def
+
+/GetSubstituteCRD { % <intentname> GetSubstituteCRD <crdname>
+ pop /DefaultColorRendering
+} bind def
+
+end
+% The resource machinery hasn't been activated, so just save the ProcSet
+% and let .fixresources finish the installation process.
+/ColorRendering exch def
+
+% Define setcolorrendering.
+
+/.colorrenderingtypes 5 dict def
+
+/setcolorrendering { % <crd> setcolorrendering -
+ dup /ColorRenderingType get //.colorrenderingtypes exch get exec
+} odef
+
+/.setcolorrendering1 where { pop } { (%END CRD) .skipeof } ifelse
+
+.colorrenderingtypes 1 {
+ dup .buildcolorrendering1 .setcolorrendering1
+} .bind put
+
+% Note: the value 101 in the next line must be the same as the value of
+% GX_DEVICE_CRD1_TYPE in gscrdp.h.
+.colorrenderingtypes 101 {
+ dup .builddevicecolorrendering1 .setdevicecolorrendering1
+} .bind put
+
+% Initialize the default CIE rendering dictionary.
+% The most common CIE files seem to assume the "calibrated RGB color space"
+% described on p. 189 of the PostScript Language Reference Manual,
+% 2nd Edition; we simply invert this transformation back to RGB.
+mark
+ /ColorRenderingType 1
+% We must make RangePQR and RangeLMN large enough so that values computed by
+% the assumed encoding MatrixLMN don't get clamped.
+ /RangePQR [0 0.9505 0 1 0 1.0890] readonly
+% This TransformPQR implements a relative colorimetric intent by scaling
+% the XYZ values relative to the white and black points.
+ /TransformPQR
+ [ { 5 1 roll % p Ws Bs Wd Bd
+ 4 {3 get 5 1 roll} repeat % ws bs wd bd p
+ 3 index sub % ws bs wd bd p-bs
+ 1 index % ws bs wd bd p-bs bd
+ 6 2 roll % p-bs bd ws bs wd bd
+ sub % p-bs bd ws bs wd-bd
+ 5 1 roll % wd-bd p-bs bd ws bs
+ sub % wd-bd p-bs bd ws-bs
+ 4 2 roll % bd ws-bs wd-bd p-bs
+ mul % bd ws-bs (wd-bd)*(p-bs)
+ exch div add % bd + (wd-bd)*(p-bs)/(ws-bs)
+ } bind
+ { 5 1 roll
+ 4 {4 get 5 1 roll} repeat
+ 3 index sub 1 index 6 2 roll sub 5 1 roll
+ sub 4 2 roll mul exch div add
+ } bind
+ { 5 1 roll
+ 4 {5 get 5 1 roll} repeat
+ 3 index sub 1 index 6 2 roll sub 5 1 roll
+ sub 4 2 roll mul exch div add
+ } bind
+ ] readonly
+ /RangeLMN [0 0.9505 0 1 0 1.0890] readonly
+ /MatrixABC
+ [ 3.24063 -0.96893 0.05571
+ -1.53721 1.87576 -0.20402
+ -0.49863 0.04152 1.05700
+ ] readonly
+ /EncodeABC [ {0 .max 0.45 exp} bind dup dup] readonly
+ /WhitePoint [0.9505 1 1.0890] readonly
+ % Some Genoa tests seem to require the presence of BlackPoint.
+ /BlackPoint [0 0 0] readonly
+.dicttomark setcolorrendering
+
+%END CRD
+
+% Initialize a CIEBased color space for sRGB.
+/CIEsRGB [ /CIEBasedABC
+ mark
+ /DecodeLMN [ {
+ dup 0.03928 le { 12.92321 div } { 0.055 add 1.055 div 2.4 exp } ifelse
+ } bind dup dup ] readonly
+ /MatrixLMN [
+ 0.412457 0.212673 0.019334
+ 0.357576 0.715152 0.119192
+ 0.180437 0.072175 0.950301
+ ] readonly
+ /WhitePoint [0.9505 1.0 1.0890] readonly
+ .dicttomark readonly
+] readonly def
+
+% ------ Painting ------ %
+
+% A straightforward definition of execform that doesn't actually
+% do any caching.
+/.execform1 {
+ % This is a separate operator so that the stacks will be restored
+ % properly if an error occurs.
+ dup /Matrix get concat
+ dup /BBox get aload pop
+ exch 3 index sub exch 2 index sub rectclip
+ dup /PaintProc get
+ 1 index /Implementation known not {
+ 1 index dup /Implementation null .forceput readonly pop
+ } if
+ exec
+} .bind odef % must bind .forceput
+
+/.formtypes 5 dict
+ dup 1 /.execform1 load put
+def
+
+/execform { % <form> execform -
+ gsave {
+ dup /FormType get //.formtypes exch get exec
+ } stopped grestore { stop } if
+} odef
+
+/.patterntypes 5 dict
+ dup 1 /.buildpattern1 load put
+def
+
+/makepattern { % <proto_dict> <matrix> makepattern <pattern>
+ //.patterntypes 2 index /PatternType get get
+ .currentglobal false .setglobal exch
+ % Stack: proto matrix global buildproc
+ 3 index dup length 1 add dict .copydict
+ 3 index 3 -1 roll exec 3 -1 roll .setglobal
+ 1 index /Implementation 3 -1 roll put
+ readonly exch pop exch pop
+} odef
+
+/setpattern { % [<comp1> ...] <pattern> setpattern -
+ currentcolorspace 0 get /Pattern ne {
+ [ /Pattern currentcolorspace ] setcolorspace
+ } if setcolor
+} odef
+
+% Extend image and imagemask to accept dictionaries.
+% We must create .imagetypes and .imagemasktypes outside level2dict,
+% and leave some extra space because we're still in Level 1 mode.
+systemdict begin
+/.imagetypes 5 dict
+ dup 1 /.image1 load put
+def
+/.imagemasktypes 5 dict
+ dup 1 /.imagemask1 load put
+def
+end
+
+/.image /image load def
+/image {
+ dup type /dicttype eq {
+ dup /ImageType get //.imagetypes exch get exec
+ } {
+ //.image
+ } ifelse
+} odef
+currentdict /.image undef
+
+/.imagemask /imagemask load def
+/imagemask {
+ dup type /dicttype eq {
+ dup /ImageType get //.imagemasktypes exch get exec
+ } {
+ //.imagemask
+ } ifelse
+} odef
+currentdict /.imagemask undef
+
+end % level2dict
diff --git a/Master/xemtex/gslib/gs_lgo_e.ps b/Master/xemtex/gslib/gs_lgo_e.ps
new file mode 100644
index 00000000000..3b692eaa468
--- /dev/null
+++ b/Master/xemtex/gslib/gs_lgo_e.ps
@@ -0,0 +1,92 @@
+% Copyright (C) 1999, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_lgo_e.ps,v 1.3.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Define the Adobe "original" Latin glyph set.
+% This is not an Encoding strictly speaking, but we treat it like one.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/AdobeLatinOriginalGlyphEncoding mark
+
+/.notdef
+/A /AE /Aacute /Acircumflex /Adieresis /Agrave /Aring /Atilde
+/B
+/C /Ccedilla
+/D
+/E /Eacute /Ecircumflex /Edieresis /Egrave /Eth
+/F
+/G
+/H
+/I /Iacute /Icircumflex /Idieresis /Igrave
+/J
+/K
+/L /Lslash
+/M
+/N /Ntilde
+/O /OE /Oacute /Ocircumflex /Odieresis /Ograve /Oslash /Otilde
+/P
+/Q
+/R
+/S /Scaron
+/T /Thorn
+/U /Uacute /Ucircumflex /Udieresis /Ugrave
+/V
+/W
+/X
+/Y /Yacute /Ydieresis
+/Z /Zcaron
+/a /aacute /acircumflex /acute /adieresis /ae /agrave /ampersand /aring
+ /asciicircum /asciitilde /asterisk /at /atilde
+/b /backslash /bar /braceleft /braceright /bracketleft /bracketright /breve
+ /brokenbar /bullet
+/c /caron /ccedilla /cedilla /cent /circumflex /colon /comma /copyright
+ /currency
+/d /dagger /daggerdbl /degree /dieresis /divide /dollar /dotaccent /dotlessi
+/e /eacute /ecircumflex /edieresis /egrave /eight /ellipsis /emdash /endash
+ /equal /eth /exclam /exclamdown
+/f /fi /five /fl /florin /four /fraction
+/g /germandbls /grave /greater /guillemotleft /guillemotright /guilsinglleft
+ /guilsinglright
+/h /hungarumlaut /hyphen
+/i /iacute /icircumflex /idieresis /igrave
+/j
+/k
+/l /less /logicalnot /lslash
+/m /macron /minus /mu /multiply
+/n /nine /ntilde /numbersign
+/o /oacute /ocircumflex /odieresis /oe /ogonek /ograve /one /onehalf
+ /onequarter /onesuperior /ordfeminine /ordmasculine /oslash /otilde
+/p /paragraph /parenleft /parenright /percent /period /periodcentered
+ /perthousand /plus /plusminus
+/q /question /questiondown /quotedbl /quotedblbase /quotedblleft
+ /quotedblright /quoteleft /quoteright /quotesinglbase /quotesingle
+/r /registered /ring
+/s /scaron /section /semicolon /seven /six /slash /space /sterling
+/t /thorn /three /threequarters /threesuperior /tilde /trademark /two
+ /twosuperior
+/u /uacute /ucircumflex /udieresis /ugrave /underscore
+/v
+/w
+/x
+/y /yacute /ydieresis /yen
+/z /zcaron /zero
+
+counttomark packedarray exch pop
+8 1 index .registerencoding
+.defineencoding
+exec
diff --git a/Master/xemtex/gslib/gs_lgx_e.ps b/Master/xemtex/gslib/gs_lgx_e.ps
new file mode 100644
index 00000000000..45ec80400f9
--- /dev/null
+++ b/Master/xemtex/gslib/gs_lgx_e.ps
@@ -0,0 +1,61 @@
+% Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_lgx_e.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Define the Adobe "extension" Latin glyph set.
+% This is not an Encoding strictly speaking, but we treat it like one.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/AdobeLatinExtensionGlyphEncoding mark
+
+/Abreve /Amacron /Aogonek
+/Cacute /Ccaron /Dcaron
+/Dcroat /Delta
+/Ecaron /Edotaccent /Emacron /Eogonek
+/Gbreve /Gcommaaccent
+/Idotaccent /Imacron /Iogonek
+/Kcommaaccent
+/Lacute /Lcaron /Lcommaaccent
+/Nacute /Ncaron /Ncommaaccent
+/Ohungarumlaut /Omacron
+/Racute /Rcaron /Rcommaaccent
+/Sacute /Scedilla /Scommaaccent
+/Tcaron /Tcommaaccent
+/Uhungarumlaut /Umacron /Uogonek /Uring
+/Zacute /Zdotaccent
+/abreve /amacron /aogonek
+/cacute /ccaron /commaaccent
+/dcaron /dcroat
+/ecaron /edotaccent /emacron /eogonek
+/gbreve /gcommaaccent /greaterequal
+/imacron /iogonek
+/kcommaaccent
+/lacute /lcaron /lcommaaccent /lessequal /lozenge
+/nacute /ncaron /ncommaaccent /notequal
+/ohungarumlaut /omacron
+/partialdiff
+/racute /radical /rcaron /rcommaaccent
+/sacute /scedilla /scommaaccent /summation
+/tcaron /tcommaaccent
+/uhungarumlaut /umacron /uogonek /uring
+/zacute /zdotaccent
+
+counttomark packedarray exch pop
+9 1 index .registerencoding
+.defineencoding
+exec
diff --git a/Master/xemtex/gslib/gs_ll3.ps b/Master/xemtex/gslib/gs_ll3.ps
new file mode 100644
index 00000000000..dfcd3a09445
--- /dev/null
+++ b/Master/xemtex/gslib/gs_ll3.ps
@@ -0,0 +1,469 @@
+% Copyright (C) 1997, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_ll3.ps,v 1.10.2.2.2.1 2003/04/12 14:02:38 giles Exp $
+% Initialization file for PostScript LanguageLevel 3 functions.
+% This file must be loaded after gs_lev2.ps and gs_res.ps.
+% These definitions go into ll3dict or various ProcSets.
+% NOTE: the interpreter creates ll3dict.
+
+ll3dict begin
+
+% We need LanguageLevel 2 or higher in order to have setuserparams and
+% defineresource.
+languagelevel dup 2 .max .setlanguagelevel
+
+% ------ Idiom recognition ------ %
+
+/IdiomRecognition false .definepsuserparam
+
+% Modify `bind' to apply idiom recognition afterwards.
+/.bindscratch 128 string def
+% Do the right thing if NOBIND or DELAYBIND is in effect.
+% Note also that since this definition of `bind' may get bound in,
+% it has to function properly even at lower language levels,
+% where IdiomRecognition may not be defined.
+/bind load /.bind load ne
+/bind { % <proc> bind <proc'>
+ //.bind currentuserparams /IdiomRecognition
+ .knownget not { false } if {
+ (*) {
+ /IdiomSet findresource
+ false exch {
+ % Stack: proc false dummykey [template substitute]
+ exch pop dup 1 get exch 0 get
+ % Stack: proc false substitute template
+ 3 index .eqproc {
+ 2 index gcheck 1 index gcheck not and {
+ pop
+ } {
+ 3 -1 roll pop exch not exit
+ } ifelse
+ } {
+ pop
+ } ifelse
+ } forall { exit } if
+ } //.bindscratch /IdiomSet resourceforall
+ } if
+} odef
+{ /.bind /bind load def
+ /bind { } def
+} if
+currentdict /.bindscratch .undef
+
+% ------ HalftoneTypes 6, 10, 16 and HalftoneMode ------ %
+
+% This code depends on an internal HalftoneType 7 with the following keys:
+% Width, Height, Width2, Height2, TransferFunction:
+% as for HalftoneType 16.
+% Thresholds: a string or bytestring holding the thresholds,
+% (Width x Height + Width2 x Height2) x BitsPerSample / 8 bytes,
+% as for HalftoneType 16 except that the samples may be either
+% 8 or 16 bits wide.
+% BitsPerSample: 8 or 16.
+
+% Note that this HalftoneType never appears in halftone dictionaries given
+% to sethalftone, only as a component in those given to .sethalftone5,
+% so its numeric value can be chosen ad lib as long as it differs from the
+% other values that are legal in component dictionaries for .sethalftone5
+% (currently only 1 and 3).
+
+/.makehalftone7 { % <dict> <dict> <source> <Width> <Height>
+ % (<Width2> <Height2> | null) <BPS> .makehalftone7
+ % <setdict> <dict5> { .sethalftone5 }
+ 8 dict begin
+ /HalftoneType 7 def
+ /BitsPerSample exch def
+ dup null eq {
+ pop 0
+ } {
+ /Height2 1 index def /Width2 2 index def mul
+ } ifelse 3 1 roll
+ /Height 1 index def
+ /Width 2 index def
+ mul add BitsPerSample 8 idiv mul .bigstring
+ % Stack: dict dict source str
+ dup type /stringtype eq { readstring } { .readbytestring } ifelse
+ not { /sethalftone load /rangecheck signalerror exit } if
+ readonly /Thresholds exch def
+ /TransferFunction .knownget { /TransferFunction exch def } if
+ % If the original Thresholds was a file, replace it with
+ % a new one.
+ dup /Thresholds get type /filetype eq {
+ dup /Thresholds [ Thresholds ] cvx 0 () .subfiledecode put
+ } if
+ mark /HalftoneType 5 /Default currentdict end .dicttomark
+ { .sethalftone5 }
+} bind def
+
+/.bigstring { % <size> .bigstring <string|bytestring>
+ dup 65400 gt { .bytestring } { string } ifelse
+} bind def
+
+/.readbytestring { % <source> <bytestring> .readbytestring
+ % <bytestring> <filled>
+ % Note that since bytestrings don't implement getinterval,
+ % if filled is false, there is no way to tell how much
+ % was read.
+ true exch 0 1 2 index length 1 sub {
+ % Stack: source true str index
+ 3 index read not { pop exch not exch exit } if
+ 3 copy put pop pop
+ } for 3 -1 roll pop exch
+} bind def
+
+/.sethalftone6 { % <dict> <dict> .sethalftone6 <setdict> <dict5>
+ % { .sethalftone5 }
+ % Keys: Width, Height, Thresholds, T'Function
+ dup /Thresholds get
+ 1 index /Width get 2 index /Height get
+ null 8 .makehalftone7
+} bind def
+
+/.sethalftone10 { % <dict> <dict> .sethalftone10 <setdict> <dict5>
+ % { .sethalftone5 }
+ % Keys: Xsquare, Ysquare, Thresholds, T'Function
+ % Note that this is the only one of these three HalftoneTypes
+ % that allows either a file or a string for Thresholds.
+ dup /Thresholds get dup type /stringtype eq { 0 () .subfiledecode } if
+ 1 index /Xsquare get dup 3 index /Ysquare get dup
+ 8 .makehalftone7
+} bind def
+
+/.sethalftone16 { % <dict> <dict> .sethalftone16 <setdict> <dict5>
+ % { .sethalftone5 }
+ % Keys: Width, Height, Width2, Height2,
+ % Thresholds, T'Function
+ dup /Thresholds get
+ 1 index /Width get 2 index /Height get
+ 3 index /Width2 .knownget { % 2-rectangle case
+ 4 index /Height2 get
+ } { % 1-rectangle case
+ null
+ } ifelse 16 .makehalftone7
+} bind def
+
+.halftonetypes begin
+ 6 /.sethalftone6 load def
+ 10 /.sethalftone10 load def
+ 16 /.sethalftone16 load def
+end
+
+% Redefine the halftone-setting operators to honor HalftoneMode.
+/setcolorscreen {
+ /HalftoneMode getuserparam 0 eq {
+ //setcolorscreen
+ } {
+ 12 { pop } repeat .getdefaulthalftone
+ { //sethalftone }
+ { .setdefaulthalftone }
+ ifelse
+ } ifelse
+} odef
+/setscreen {
+ /HalftoneMode getuserparam 0 eq {
+ //setscreen
+ } {
+ pop pop pop .getdefaulthalftone
+ { //sethalftone }
+ { .setdefaulthalftone }
+ ifelse
+ } ifelse
+} odef
+/sethalftone {
+ /HalftoneMode getuserparam 0 eq {
+ //sethalftone
+ } {
+ pop .getdefaulthalftone
+ { //sethalftone }
+ { .setdefaulthalftone }
+ ifelse
+ } ifelse
+} odef
+
+% ------ ImageTypes 3 and 4 (masked images) ------ %
+
+.imagetypes
+ dup 3 /.image3 load put
+ dup 4 /.image4 load put
+% We also detect ImageType 103 here: it isn't worth making a separate file
+% just for this.
+ /.image3x where { pop dup 103 /.image3x load put } if
+pop
+
+% ------ Functions ------ %
+
+% Define the FunctionType resource category.
+/Generic /Category findresource dup maxlength 3 add dict .copydict begin
+ /InstanceType /integertype def
+/FunctionType currentdict end /Category defineresource pop
+
+{0 2 3} { dup /FunctionType defineresource pop } forall
+
+% ------ Smooth shading ------ %
+
+% Define the ShadingType resource category.
+/Generic /Category findresource dup maxlength 3 add dict .copydict begin
+ /InstanceType /integertype def
+/ShadingType currentdict end /Category defineresource pop
+
+systemdict /.shadingtypes mark % not ll3dict
+ 1 /.buildshading1 load
+ 2 /.buildshading2 load
+ 3 /.buildshading3 load
+ 4 /.buildshading4 load
+ 5 /.buildshading5 load
+ 6 /.buildshading6 load
+ 7 /.buildshading7 load
+.dicttomark put
+
+systemdict /.reuseparamdict mark
+ /Intent 2
+ /AsyncRead false
+ /CloseSource true
+.dicttomark readonly put
+/.buildshading { % <shadingdict> .buildshading <shading>
+ % Unfortunately, we always need to make the DataSource reusable,
+ % because if clipping is involved, even shfill may need to read
+ % the source data multiple times. If it weren't for this,
+ % we would only need to create a reusable stream if the ultimate
+ % source of the data is a procedure (since the library can't
+ % suspend shading to do a procedure callout).
+ dup /DataSource .knownget {
+ dup type /filetype eq {
+ //.reuseparamdict /ReusableStreamDecode filter
+ .currentglobal 1 index gcheck .setglobal
+ % Stack: shdict rsdfile saveglobal
+ 2 index dup length dict copy exch .setglobal
+ dup /DataSource 4 -1 roll put exch pop
+ } {
+ pop
+ } ifelse
+ } if
+ % The .buildshading operators use the current color space
+ % for ColorSpace.
+ dup /ShadingType get //.shadingtypes exch get
+ 1 index /ColorSpace get setcolorspace exec
+} bind def
+systemdict /.reuseparamdict undef
+
+/.buildpattern2 { % <template> <matrix> .buildpattern2
+ % <template> <pattern>
+ % We want to build the pattern without doing gsave/grestore,
+ % since we want it to load the CIE caches.
+ 1 index /Shading get
+ mark currentcolor currentcolorspace
+ counttomark 4 add -3 roll mark 4 1 roll
+ % Stack: -mark- ..color.. cspace -mark- template matrix shadingdict
+ { .buildshading } stopped {
+ cleartomark setcolorspace setcolor pop stop
+ } if
+ .buildshadingpattern
+ 3 -1 roll pop counttomark 1 add 2 roll setcolorspace setcolor pop
+} bind def
+
+.patterntypes
+ 2 /.buildpattern2 load put
+
+/shfill { % <shadingdict> shfill -
+ % Currently, .shfill requires that the color space
+ % in the pattern be the current color space.
+ dup gsave { .buildshading .shfill } stopped grestore { stop } if
+ pop
+} odef
+
+% Establish an initial smoothness value that matches Adobe RIPs.
+0.02 setsmoothness
+
+% ------ UseCIEColor ------ %
+
+% The library maintains and detects the UseCIEColor device parameter,
+% but it doesn't have access to the resource dictionaries. We also
+% want color space substitution to work in systems without a PostScript
+% interpreter. Therefore, we eagerly inform the library of changes in
+% the (effective) ColorSpace category that might affect the operation of
+% UseCIEColor. We must notice the following events:
+% 1) defineresource and undefineresource of the Default ColorSpaces.
+% 2) restore.
+% 3) Changes in current VM, which cause a different set of resources
+% to become visible.
+% #1 is rare. #2 is handled in C code. If checking the ColorSpace
+% category on #3 turns out to be expensive, we can cache more information
+% about whether these operations actually affect UseCIEColor.
+
+% This operator implements color space substitution in the library:
+% <index> <bool> .setsubstitutecolorspace -
+% <bool> = true means substitute the current color space for the one given
+% by <index>; <bool> = false means stop substituting. Substitution is not
+% affected by grestore/setgstate, but it is affected by restore.
+
+% ColorSpace defineresource and undefineresource for the Default keys
+% call .definedefaultcs and .undefinedefaultcs. See gs_res.ps.
+
+/.useciecolorkeydict mark
+ /UseCIEColor null
+.dicttomark readonly def
+/.definedefaultcs { % <index> <value> .definedefaultcs -
+ currentcolorspace
+ % Temporarily disable color substitution, in case the substitute
+ % color space is or mentions a color space that is currently
+ % being substituted.
+ currentdevice //.useciecolorkeydict .getdeviceparams exch pop exch pop
+ mark 5 -2 roll
+ % Stack: cspace UseCIEColor mark index value
+ { setcolorspace true .setsubstitutecolorspace }
+ stopped counttomark 1 add 1 roll cleartomark
+ % Stack: cspace UseCIEColor stopped?
+ 3 1 roll
+ currentdevice null true mark /UseCIEColor 6 -1 roll .putdeviceparams pop pop
+ setcolorspace { stop } if
+} bind def
+currentdict /.useciecolorkeydict undef
+
+/.undefinedefaultcs { % <index> .undefinedefaultcs -
+ false .setsubstitutecolorspace
+} bind def
+
+/.setdefaultcs { % <index> <value|null> .setdefaultcs -
+ dup null eq { pop .undefinedefaultcs } { .definedefaultcs } ifelse
+} bind def
+
+/.getdefaultcs { % <key> .getdefaultcs <value|null>
+ .GetInstance { 0 get } { null } ifelse
+} bind def
+
+/.setglobal { % <bool> .setglobal -
+ dup .currentglobal ne {
+ % If there are no local definitions of the Default keys,
+ % changing VM can't affect the definition of any resource.
+ /.localcsdefaults .uservar {
+ % We only want to change substitutions for color spaces
+ % whose definitions are actually changing.
+ /ColorSpace /Category findresource begin
+ /DefaultGray .getdefaultcs
+ /DefaultRGB .getdefaultcs
+ /DefaultCMYK .getdefaultcs
+ end
+ 3 index .setglobal
+ /ColorSpace /Category findresource begin
+ /DefaultGray .getdefaultcs
+ /DefaultRGB .getdefaultcs
+ /DefaultCMYK .getdefaultcs
+ end
+ % Stack: bool oldgray oldrgb oldcmyk
+ % newgray newrgb newcmyk
+ dup 4 index ne { 2 exch .setdefaultcs } { pop } ifelse
+ dup 4 index ne { 1 exch .setdefaultcs } { pop } ifelse
+ dup 4 index ne { 0 exch .setdefaultcs } { pop } ifelse
+ pop pop pop pop
+ } {
+ .setglobal
+ } ifelse
+ } {
+ .setglobal
+ } ifelse
+} .bind odef % bind in .setglobal
+
+
+% Define default device color spaces to allow substitution
+% on UseCIEColor == true :
+
+/DefaultGray
+[ /CIEBasedA
+ 3 dict begin
+ /WhitePoint [ 0.9505 1.0 1.089 ] def
+ /DecodeLMN [ { 1.8 exp } { 1.8 exp } { 1.8 exp } ] def
+ /MatrixLMN [ 0.4439 0.2522 0.0436 0.3341 0.6371 0.1387 0.1725 0.1107 0.9067 ] def
+ currentdict end
+]
+/ColorSpace defineresource pop
+
+/DefaultRGB
+[ /CIEBasedABC
+ 3 dict begin
+ /WhitePoint [ 0.9505 1.0 1.089 ] def
+ /DecodeLMN [ { 1.8 exp } { 1.8 exp } { 1.8 exp } ] def
+ /MatrixLMN [ 0.4439 0.2522 0.0436 0.3341 0.6371 0.1387 0.1725 0.1107 0.9067 ] def
+ currentdict end
+]
+/ColorSpace defineresource pop
+
+/DefaultCMYK
+[ /CIEBasedDEFG
+ 4 dict begin
+ /WhitePoint [ 0.9505 1.0 1.089 ] def
+ /Table [ 2 2 2 2
+ % Trivial table :
+ % [
+ % [ < FFFFFF 000000 FFFF00 000000>
+ % < FF00FF 000000 FF0000 000000> ]
+ % [ < 00FFFF 000000 00FF00 000000>
+ % < 0000FF 000000 000000 000000> ]
+ % ]
+
+ % AcrobatReader-compatible table :
+ [
+ [ < FFFFFF 000000 FFFF00 000000>
+ < EA007F 000000 FC000F 000000> ]
+
+ [ < 00A0C8 000000 008436 000000>
+ < 00007C 000000 000000 000000> ]
+ ]
+ ] def
+ /DecodeLMN [ { 1.8 exp } { 1.8 exp } { 1.8 exp } ] def
+ /MatrixLMN [ 0.4439 0.2522 0.0436 0.3341 0.6371 0.1387 0.1725 0.1107 0.9067 ] def
+ currentdict end
+]
+/ColorSpace defineresource pop
+
+
+% ------ DeviceN color space ------ %
+
+% This isn't quite right, because the ColorSpaceFamily resource will exist
+% even with languagelevel < 3, but it's close enough.
+
+/.setdevicenspace where {
+ pop colorspacedict /DeviceN {
+ dup 2 get setcolorspace dup
+ dup 1 get length % # of components
+ .converttinttransform .setdevicenspace
+ } bind put
+} if
+
+% ------ Miscellaneous ------ %
+
+% Define additional user and system parameters.
+/HalftoneMode 0 .definepsuserparam
+/MaxSuperScreen 1016 .definepsuserparam
+pssystemparams begin % read-only, so use .forcedef
+ /MaxDisplayAndSourceList 160000 .forcedef
+end
+
+% Define the IdiomSet resource category.
+{ /IdiomSet } {
+ /Generic /Category findresource dup maxlength 3 add dict .copydict begin
+ /InstanceType /dicttype def
+ currentdict end /Category defineresource pop
+} forall
+
+/languagelevel 3 def
+% When running in LanguageLevel 3 mode, this interpreter is supposed to be
+% compatible with Adobe version 3010.
+/version (3010) readonly def
+
+.setlanguagelevel
+
+end % ll3dict
diff --git a/Master/xemtex/gslib/gs_m.xbm b/Master/xemtex/gslib/gs_m.xbm
new file mode 100644
index 00000000000..a94e079e257
--- /dev/null
+++ b/Master/xemtex/gslib/gs_m.xbm
@@ -0,0 +1,16 @@
+#define gs_m.xbm_width 32
+#define gs_m.xbm_height 32
+#define gs_m.xbm_x_hot 0
+#define gs_m.xbm_y_hot 0
+static unsigned char gs.m.bm_bits[] = {
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x48, 0x00,
+ 0x00, 0xf8, 0xc7, 0x00, 0x00, 0xff, 0xc1, 0x00, 0x80, 0x3f, 0xf0, 0x00,
+ 0xc0, 0x0f, 0xf8, 0x01, 0xc0, 0x87, 0xfc, 0x03, 0xe0, 0xa7, 0xfc, 0x03,
+ 0xe0, 0x27, 0xf8, 0x03, 0xe0, 0x07, 0xf0, 0x03, 0xc0, 0x0f, 0xe3, 0x01,
+ 0x80, 0x1f, 0xe3, 0x00, 0x00, 0x3f, 0x60, 0x00, 0x00, 0x7c, 0x10, 0x00,
+ 0xc0, 0x3f, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00,
+ 0xf0, 0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07,
+ 0xc0, 0xff, 0xff, 0x0f, 0x00, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x1f,
+ 0xf0, 0x00, 0x80, 0x0f, 0x78, 0x10, 0x80, 0x07, 0x78, 0x10, 0xc0, 0x13,
+ 0x70, 0xe0, 0xff, 0x08, 0xf0, 0x00, 0x00, 0x06, 0xc0, 0x03, 0xe0, 0x01,
+ 0x00, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/Master/xemtex/gslib/gs_m.xpm b/Master/xemtex/gslib/gs_m.xpm
new file mode 100644
index 00000000000..d99770097a9
--- /dev/null
+++ b/Master/xemtex/gslib/gs_m.xpm
@@ -0,0 +1,44 @@
+/* XPM */
+static char * gs_m_xpm[] = {
+/* width height ncolors cpp [x_hot y_hot] */
+"32 32 6 1 0 0",
+/* colors */
+" s none m none c none",
+". s iconColor1 m black c black",
+"X s iconColor2 m white c white",
+"o c #C0C0C0C0C0C0",
+"O c #808080808080",
+"+ c #00000000FFFF",
+/* pixels */
+" .X ",
+" .X. ",
+" .XX. ",
+" ........XXX.. ",
+" .........oXXXo.. ",
+" .......XXXXXXO... ",
+" ......XXXXXXX...... ",
+" .....XXXX+XX........ ",
+" ......XX+X+XX........ ",
+" ......XX+XXXXX....... ",
+" ......XXXXXXXXX...... ",
+" ......XXXX++XXX.... ",
+" .....OXXX++XXX... ",
+" ......XXXXXXX.. ",
+" .....XXXXX. ",
+" ........XXXXXXX ",
+" .....XXXXXXXXXXXX ",
+" .......XXXXXXXXXXXX ",
+" ...................X ",
+" ...................... ",
+" ...................... ",
+" ...................... ",
+" ..................... ",
+" XXXXXXXXXXXX........ ",
+" ....XXXXXXXXXXXXXXX.....X ",
+" ....XXXXX.XXXXXXXXXX....XX ",
+" ....XXXXX.XXXXXXXXX....XX. ",
+" ...XXXXXX...........XXX. ",
+" ....XXXXXXXXXXXXXXXXX.. ",
+" ....XXXXXXXXXXX.... ",
+" ............. ",
+" "};
diff --git a/Master/xemtex/gslib/gs_m_m.xbm b/Master/xemtex/gslib/gs_m_m.xbm
new file mode 100644
index 00000000000..c792a4f5239
--- /dev/null
+++ b/Master/xemtex/gslib/gs_m_m.xbm
@@ -0,0 +1,16 @@
+#define gs_m_m.xbm_width 32
+#define gs_m_m.xbm_height 32
+#define gs_m_m.xbm_x_hot 0
+#define gs_m_m.xbm_y_hot 0
+static unsigned char gs.m_m.bm_bits[] = {
+ 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x78, 0x00,
+ 0x00, 0xf8, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00,
+ 0xc0, 0xff, 0xff, 0x01, 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x03,
+ 0xe0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x01,
+ 0x80, 0xff, 0xff, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0xfc, 0x1f, 0x00,
+ 0xc0, 0xff, 0x1f, 0x00, 0xe0, 0xff, 0x3f, 0x00, 0xf0, 0xff, 0x7f, 0x00,
+ 0xf0, 0xff, 0xff, 0x00, 0xf0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07,
+ 0xc0, 0xff, 0xff, 0x0f, 0x00, 0xff, 0xff, 0x1f, 0x00, 0xfe, 0xff, 0x1f,
+ 0xf0, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x1f,
+ 0xf0, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0x07, 0xc0, 0xff, 0xff, 0x01,
+ 0x00, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/Master/xemtex/gslib/gs_mex_e.ps b/Master/xemtex/gslib/gs_mex_e.ps
new file mode 100644
index 00000000000..227329a1e2a
--- /dev/null
+++ b/Master/xemtex/gslib/gs_mex_e.ps
@@ -0,0 +1,67 @@
+% Copyright (C) 1994, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_mex_e.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Define the MacExpert encoding vector.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/MacExpertEncoding
+% \00x
+ /.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
+% \04x
+ /space /exclamsmall /Hungarumlautsmall /centoldstyle /dollaroldstyle /dollarsuperior /ampersandsmall /Acutesmall
+ /parenleftsuperior /parenrightsuperior /twodotenleader /onedotenleader /comma /hyphen /period /fraction
+ /zerooldstyle /oneoldstyle /twooldstyle /threeoldstyle /fouroldstyle /fiveoldstyle /sixoldstyle /sevenoldstyle
+ /eightoldstyle /nineoldstyle /colon /semicolon /.notdef /threequartersemdash /.notdef /questionsmall
+% \10x
+ /.notdef /.notdef /.notdef /.notdef /Ethsmall /.notdef /.notdef /onequarter
+ /onehalf /threequarters /oneeighth /threeeighths /fiveeighths /seveneighths /onethird /twothirds
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /ff /fi
+ /fl /ffi /ffl /parenleftinferior /.notdef /parenrightinferior /Circumflexsmall /hypheninferior
+% \14x
+ /Gravesmall /Asmall /Bsmall /Csmall /Dsmall /Esmall /Fsmall /Gsmall
+ /Hsmall /Ismall /Jsmall /Ksmall /Lsmall /Msmall /Nsmall /Osmall
+ /Psmall /Qsmall /Rsmall /Ssmall /Tsmall /Usmall /Vsmall /Wsmall
+ /Xsmall /Ysmall /Zsmall /colonmonetary /onefitted /rupiah /Tildesmall /.notdef
+% \20x
+ /.notdef /asuperior /centsuperior /.notdef /.notdef /.notdef /.notdef /Aacutesmall
+ /Agravesmall /Acircumflexsmall /Adieresissmall /Atildesmall /Aringsmall /Ccedillasmall /Eacutesmall /Egravesmall
+ /Ecircumflexsmall /Edieresissmall /Iacutesmall /Igravesmall /Icircumflexsmall /Idieresissmall /Ntildesmall /Oacutesmall
+ /Ogravesmall /Ocircumflexsmall /Odieresissmall /Otildesmall /Uacutesmall /Ugravesmall /Ucircumflexsmall /Udieresissmall
+% \24x
+ /.notdef /eightsuperior /fourinferior /threeinferior /sixinferior /eightinferior /seveninferior /Scaronsmall
+ /.notdef /centinferior /twoinferior /.notdef /Dieresissmall /.notdef /Caronsmall /osuperior
+ /fiveinferior /.notdef /commainferior /periodinferior /Yacutesmall /.notdef /dollarinferior /.notdef
+ /.notdef /Thornsmall /.notdef /nineinferior /zeroinferior /Zcaronsmall /AEsmall /Oslashsmall
+% \30x
+ /questiondownsmall /oneinferior /Lslashsmall /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /Cedillasmall /.notdef /.notdef /.notdef /.notdef /.notdef /OEsmall
+ /figuredash /hyphensuperior /.notdef /.notdef /.notdef /.notdef /exclamdownsmall /.notdef
+ /Ydieresissmall /.notdef /onesuperior /twosuperior /threesuperior /foursuperior /fivesuperior /sixsuperior
+% \34x
+ /sevensuperior /ninesuperior /zerosuperior /.notdef /esuperior /rsuperior /tsuperior /.notdef
+ /.notdef /isuperior /ssuperior /dsuperior /.notdef /.notdef /.notdef /.notdef
+ /.notdef /lsuperior /Ogoneksmall /Brevesmall /Macronsmall /bsuperior /nsuperior /msuperior
+ /commasuperior /periodsuperior /Dotaccentsmall /Ringsmall /.notdef /.notdef /.notdef /.notdef
+256 packedarray
+6 1 index .registerencoding
+.defineencoding
+exec
diff --git a/Master/xemtex/gslib/gs_mgl_e.ps b/Master/xemtex/gslib/gs_mgl_e.ps
new file mode 100644
index 00000000000..b3560b844ad
--- /dev/null
+++ b/Master/xemtex/gslib/gs_mgl_e.ps
@@ -0,0 +1,65 @@
+% Copyright (C) 1999, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_mgl_e.ps,v 1.3.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Define the Macintosh standard glyph encoding vector.
+% This is not an Encoding strictly speaking, but we treat it like one.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/MacRomanEncoding .findencoding
+/MacGlyphEncoding
+ /.notdef /.null /CR
+% 3
+4 index 32 95 getinterval aload pop
+% 98
+99 index 128 45 getinterval aload pop
+% 143
+ /notequal /AE
+ /Oslash /infinity /plusminus /lessequal /greaterequal
+ /yen /mu1 /partialdiff /summation /product
+ /pi /integral /ordfeminine /ordmasculine /Ohm
+ /ae /oslash /questiondown /exclamdown /logicalnot
+ /radical /florin /approxequal /increment /guillemotleft
+ /guillemotright /ellipsis /nbspace
+% 173
+174 index 203 12 getinterval aload pop
+ /lozenge
+% 186
+187 index 216 24 getinterval aload pop
+ /applelogo
+% 211
+212 index 241 7 getinterval aload pop
+ /overscore
+% 219
+220 index 249 7 getinterval aload pop
+% 226
+ /Lslash /lslash /Scaron /scaron
+ /Zcaron /zcaron /brokenbar /Eth /eth
+ /Yacute /yacute /Thorn /thorn /minus
+ /multiply /onesuperior /twosuperior /threesuperior /onehalf
+ /onequarter /threequarters /franc /Gbreve /gbreve
+ % The TrueType documentation says the next glyph is named
+ % Idot, but the Adobe standard name for this glyph is
+ % Idotaccent.
+ /Idotaccent /Scedilla /scedilla /Cacute /cacute
+ /Ccaron /ccaron /dmacron
+260 -1 roll pop % delete MacRomanEncoding
+258 packedarray
+7 1 index .registerencoding
+.defineencoding
+exec
diff --git a/Master/xemtex/gslib/gs_mro_e.ps b/Master/xemtex/gslib/gs_mro_e.ps
new file mode 100644
index 00000000000..b9a06a45517
--- /dev/null
+++ b/Master/xemtex/gslib/gs_mro_e.ps
@@ -0,0 +1,62 @@
+% Copyright (C) 1994, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_mro_e.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Define the MacRoman encoding vector.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/MacRomanEncoding
+StandardEncoding 0 39 getinterval aload pop
+ /quotesingle
+StandardEncoding 40 56 getinterval aload pop
+ /grave
+StandardEncoding 97 31 getinterval aload pop
+% \20x
+ /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute
+ /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave
+ /ecircumflex /edieresis /iacute /igrave
+ /icircumflex /idieresis /ntilde /oacute
+ /ograve /ocircumflex /odieresis /otilde
+ /uacute /ugrave /ucircumflex /udieresis
+% \24x
+ /dagger /degree /cent /sterling /section /bullet /paragraph /germandbls
+ /registered /copyright /trademark /acute /dieresis /.notdef /AE /Oslash
+ /.notdef /plusminus /.notdef /.notdef /yen /mu /.notdef /.notdef
+ /.notdef /.notdef /.notdef /ordfeminine /ordmasculine /.notdef /ae /oslash
+% \30x
+ /questiondown /exclamdown /logicalnot /.notdef
+ /florin /.notdef /.notdef /guillemotleft
+ /guillemotright /ellipsis /space /Agrave /Atilde /Otilde /OE /oe
+ /endash /emdash /quotedblleft /quotedblright
+ /quoteleft /quoteright /divide /.notdef
+ % NOTE: Euro should replace currency, but the PDF 1.3 documentation
+ % explicitly says it does not.
+ /ydieresis /Ydieresis /fraction /currency
+ /guilsinglleft /guilsinglright /fi /fl
+% \34x
+ /daggerdbl /periodcentered /quotesinglbase /quotedblbase
+ /perthousand /Acircumflex /Ecircumflex /Aacute
+ /Edieresis /Egrave /Iacute /Icircumflex
+ /Idieresis /Igrave /Oacute /Ocircumflex
+ /.notdef /Ograve /Uacute /Ucircumflex
+ /Ugrave /dotlessi /circumflex /tilde
+ /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron
+256 packedarray
+5 1 index .registerencoding
+.defineencoding
+exec
diff --git a/Master/xemtex/gslib/gs_pdf_e.ps b/Master/xemtex/gslib/gs_pdf_e.ps
new file mode 100644
index 00000000000..dc36d89c72d
--- /dev/null
+++ b/Master/xemtex/gslib/gs_pdf_e.ps
@@ -0,0 +1,45 @@
+% Copyright (C) 1994, 1997, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_pdf_e.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Define the PDFDoc encoding vector.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/PDFDocEncoding
+ISOLatin1Encoding 0 24 getinterval aload pop
+ /breve /caron /circumflex /dotaccent /hungarumlaut /ogonek /ring /tilde
+ISOLatin1Encoding 32 7 getinterval aload pop
+ /quotesingle
+ISOLatin1Encoding 40 5 getinterval aload pop
+ /hyphen
+ISOLatin1Encoding 46 50 getinterval aload pop
+ /grave
+ISOLatin1Encoding 97 31 getinterval aload pop
+% \20x
+ /bullet /dagger /daggerdbl /ellipsis /emdash /endash /florin /fraction
+ /guilsinglleft /guilsinglright /minus /perthousand
+ /quotedblbase /quotedblleft /quotedblright /quoteleft
+ /quoteright /quotesinglbase /trademark /fi /fl /Lslash /OE /Scaron
+ /Ydieresis /Zcaron /dotlessi /lslash /oe /scaron /zcaron /.notdef
+% \24x
+ /Euro
+ISOLatin1Encoding 161 12 getinterval aload pop
+ /.notdef
+ISOLatin1Encoding 174 82 getinterval aload pop
+256 packedarray .defineencoding
+exec
diff --git a/Master/xemtex/gslib/gs_pdfwr.ps b/Master/xemtex/gslib/gs_pdfwr.ps
new file mode 100644
index 00000000000..7d960cdd135
--- /dev/null
+++ b/Master/xemtex/gslib/gs_pdfwr.ps
@@ -0,0 +1,495 @@
+% Copyright (C) 1996, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_pdfwr.ps,v 1.11.2.1.2.1 2003/04/12 14:02:38 giles Exp $
+% PDF writer additions to systemdict.
+
+% This file should be included iff the pdfwrite "device" is included
+% in the executable.
+
+% ---------------- Predefined configurations ---------------- %
+
+% These correspond to the 3 predefined settings in Acrobat Distiller 4,
+% plus a "default" setting.
+
+% Parameters common to all configurations.
+% Note that we don't set AlwaysEmbed or NeverEmbed, since the default values
+% depend on the CompatibilityLevel and are initialized internally.
+/.defaultImageDict mark
+ /QFactor 0.9 /Blend 1
+ /HSamples [2 1 1 2] /VSamples [2 1 1 2]
+.dicttomark readonly def
+/.distillercommon mark
+ /ASCII85EncodePages false
+ /AntiAliasColorImages false
+ /AntiAliasGrayImages false
+ /AntiAliasMonoImages false
+ /AutoFilterColorImages true
+ /AutoFilterGrayImages true
+ /AutoFilterMonoImages true
+ /AutoPositionEPSFiles true
+ /Binding /Left
+ % What to do about the CalxxxProfiles?
+ /ColorACSImageDict .defaultImageDict
+ /ColorImageDepth -1
+ /ColorImageDict .defaultImageDict
+ /ColorImageDownsampleThreshold 1.5
+ /ColorImageFilter /DCTEncode
+ /CompressPages true
+ /ConvertImagesToIndexed true
+ /DefaultRenderingIntent /Default
+ /DetectBlends true
+ /DownsampleColorImages true
+ /DownsampleGrayImages true
+ /DownsampleMonoImages true
+ /EmitDSCWarnings false
+ /EncodeColorImages true
+ /EncodeGrayImages true
+ /EncodeMonoImages true
+ /EndPage -1
+ /GrayACSImageDict .defaultImageDict
+ /GrayImageDepth -1
+ /GrayImageDict .defaultImageDict
+ /GrayImageDownsampleThreshold 1.5
+ /GrayImageFilter /DCTEncode
+ /ImageMemory 500000
+ /LockDistillerParams false
+ /MaxSubsetPct 100
+ /MonoImageDepth -1
+ /MonoImageDict mark
+ /K -1
+ .dicttomark readonly
+ /MonoImageDownsampleThreshold 1.5
+ /MonoImageFilter /CCITTFaxEncode
+ /OPM 1
+ /Optimize true
+ /ParseDSCComments true
+ /ParseDSCCommentsForDocInfo true
+ /PreserveCopyPage true
+ /PreserveEPSInfo true
+ /PreserveHalftoneInfo false
+ /StartPage 1
+ /SubsetFonts true
+ /TransferFunctionInfo /Preserve
+ /UseFlateCompression true
+ /UsePrologue false
+.dicttomark readonly def
+
+/.distillersettings mark
+
+/default mark
+ /AutoRotatePages /PageByPage
+ /CannotEmbedFontPolicy /Warning
+ /DownsampleColorImages false
+ /DownsampleGrayImages false
+ /DownsampleMonoImages false
+ /Optimize false
+.dicttomark readonly
+
+/screen mark
+ /AutoRotatePages /PageByPage
+ /CannotEmbedFontPolicy /Warning
+ /ColorConversionStrategy /sRGB
+ /ColorImageDownsampleType /Average
+ /ColorImageResolution 72
+ /CompatibilityLevel 1.2
+ /CreateJobTicket false
+ /DoThumbnails false
+ /DownsampleColorImages true
+ /DownsampleGrayImages true
+ /DownsampleMonoImages true
+ /EmbedAllFonts false
+ /GrayImageDownsampleType /Average
+ /GrayImageResolution 72
+ /MonoImageDownsampleType /Average
+ /MonoImageResolution 300
+ /ParseDSCCommentsForDocInfo false
+ /PreserveOPIComments false
+ /PreserveOverprintSettings false
+ /UCRandBGInfo /Remove
+.dicttomark readonly
+
+/.printerACSImageDict mark
+ /QFactor 0.55 /Blend 1
+ /HSamples [2 1 1 2] /VSamples [2 1 1 2]
+.dicttomark readonly def
+/printer mark
+ /AutoRotatePages /None
+ /CannotEmbedFontPolicy /Warning
+ /ColorACSImageDict .printerACSImageDict
+ /ColorConversionStrategy /UseDeviceIndependentColor
+ /ColorImageDownsampleType /Bicubic
+ /ColorImageResolution 300
+ /CompatibilityLevel 1.3
+ /CreateJobTicket true
+ /DoThumbnails false
+ /EmbedAllFonts true
+ /GrayACSImageDict .printerACSImageDict
+ /GrayImageDownsampleType /Bicubic
+ /GrayImageResolution 300
+ /MonoImageDownsampleType /Bicubic
+ /MonoImageResolution 1200
+ /ParseDSCCommentsForDocInfo true
+ /PreserveOPIComments true
+ /PreserveOverprintSettings true
+ /UCRandBGInfo /Preserve
+.dicttomark readonly
+
+/.prepressACSImageDict mark
+ /QFactor 0.25
+ /HSamples [1 1 1 1] /VSamples [1 1 1 1]
+.dicttomark readonly def
+/prepress mark
+ /AutoRotatePages /None
+ /CannotEmbedFontPolicy /Error
+ /ColorACSImageDict .prepressACSImageDict
+ /ColorConversionStrategy /LeaveColorUnchanged
+ /ColorImageDownsampleType /Bicubic
+ /ColorImageResolution 300
+ /CompatibilityLevel 1.3
+ /CreateJobTicket true
+ /DoThumbnails true
+ /EmbedAllFonts true
+ /GrayACSImageDict .prepressACSImageDict
+ /GrayImageDownsampleType /Bicubic
+ /GrayImageResolution 300
+ /MonoImageDownsampleType /Bicubic
+ /MonoImageResolution 1200
+ /ParseDSCCommentsForDocInfo true
+ /PreserveOPIComments true
+ /PreserveOverprintSettings true
+ /UCRandBGInfo /Preserve
+.dicttomark readonly
+
+.dicttomark readonly def
+
+% ---------------- End of predefined configurations ---------------- %
+
+% Set optimizations for converting PostScript to PDF.
+% The ps2pdf* scripts invoke this.
+/.setpdfwrite { % - .setpdfwrite -
+ % Set a large VM threshold to reduce garbage collection.
+ currentuserparams /VMThreshold get 3000000 .max setvmthreshold
+ % Install a level of 'save' to reduce font loading.
+ save pop
+} bind def
+
+% ---------------- pdfmark and DSC processing ---------------- %
+
+% Encode values to pass for the /pdfmark or /DSC pseudo-parameter.
+/.pdf===dict mark
+ /arraytype
+ { dup xcheck { ({) (}) } { ([) (]) } ifelse
+ % Stack: file obj left right
+ 4 1 roll 2 index exch writestring () exch
+ { exch 2 index exch writestring
+ 1 index exch pdf===only ( )
+ }
+ forall pop exch writestring
+ } bind
+ /packedarraytype 1 index
+ /dicttype
+ { 1 index (<<\n) writestring
+ { 2 index 3 -1 roll pdf===only 1 index ( ) writestring
+ 1 index exch pdf===only dup (\n) writestring
+ }
+ forall (>>) writestring
+ } bind
+.dicttomark readonly def
+/pdf===only { % <file> <obj> pdf===only -
+ .pdf===dict 1 index type .knownget { exec } { write===only } ifelse
+} bind def
+/.pdfcvbuf 10 string def % enough for most arguments
+userdict /.pdfcvstring () put
+/.pdfcvs { % <obj> .pdfcvs <string>
+ currentglobal exch false .setglobal
+ /.pdfcvstring () store
+ % We can't handle long values yet.
+ { pop dup length 0 eq { pop } {
+ /.pdfcvstring .pdfcvstring 3 -1 roll concatstrings store
+ } ifelse //.pdfcvbuf
+ } /NullEncode filter dup 3 -1 roll pdf===only
+ closefile
+ .setglobal .pdfcvstring
+} bind def
+
+% Redefine pdfmark to pass the data to the driver.
+% We use a pseudo-parameter named /pdfmark whose value is an array:
+% /key1 (value1) ... (CTM) /type
+/.pdfputparams { % -mark- <key1> <value1> ... .pdfputparams <result...>
+ currentdevice null false counttomark 1 add 3 roll
+ % Don't allow the page device to get cleared....
+ {.putdeviceparams} .currentpagedevice pop {.setpagedevice} 3 .execn
+} bind def
+% Convert relevant operands to strings in an array.
+/.pdfcvsloop { % -mark- values ... markname start step .pdfcvsloop
+ % [values ... ctm markname]
+ matrix currentmatrix .pdfcvs 4 1 roll
+ counttomark 1 add 2 roll
+ counttomark .localvmarray astore exch pop
+ 3 1 roll
+ % Stack: values start step
+ 2 index length 3 sub { 2 copy 2 copy get .pdfcvs put pop } for
+} bind def
+/.pdfcvsall { % -mark- values ... markname .pdfcvsall <<same>>
+ 0 1 .pdfcvsloop
+} bind def
+/.pdfcvseven { % -mark- key value ... markname .pdfcvseven <<same>>
+ 1 2 .pdfcvsloop
+} bind def
+/.pdfcvsnone { % -mark- values ... markname .pdfcvsnone <<same>>
+ 100000 1 .pdfcvsloop
+} bind def
+/.pdfcvsfirst { % -mark- first values ... markname .pdfcvsfirst<<same>>
+ .pdfcvsnone
+ dup 0 2 copy get .pdfcvs put
+} bind def
+% The procedures in the following dictionary are called with the entire
+% pdfmark operand list (including the pdfmark name) on the stack;
+% they may modify this ad lib. They must call .pdfcvsxxx.
+/.pdfmarkparams mark
+ % Unpack a dictionary for PUT, and don't convert stream data.
+ /PUT {
+ counttomark 3 eq {
+ 1 index type /dicttype eq {
+ pop { } forall /.PUTDICT .pdfcvsall
+ } {
+ pop dup type /filetype eq {
+ % Read the file into a sequence of strings.
+ % This isn't great, but it's simple.
+ {
+ dup 1000 string readstring not { exch exit } if
+ exch
+ } loop closefile
+ } if
+ /.PUTSTREAM .pdfcvsfirst
+ } ifelse
+ } {
+ .pdfcvsall
+ } ifelse
+ } bind
+ % Unpack the array for PUTINTERVAL.
+ /PUTINTERVAL {
+ pop aload pop /.PUTINTERVAL .pdfcvsall
+ } bind
+.dicttomark readonly def
+/.pdfparamerror { % ? ? ? -mark- ... <errname> <opname> .pdfparamerror -
+ counttomark 4 add 2 roll cleartomark pop pop pop
+ .systemvar exch signalerror
+} bind def
+/pdfmark { % -mark- <key> <value> ... <markname> pdfmark -
+ counttomark 1 add copy
+ //.pdfmarkparams 1 index .knownget { exec } { .pdfcvsall } ifelse
+ mark /pdfmark 3 -1 roll .pdfputparams
+ dup type /booleantype ne {
+ /pdfmark .pdfparamerror
+ } if cleartomark
+} odef
+userdict /pdfmark .undef
+currentdict /.pdfmarkparams .undef
+
+% Use the DSC processing hook to pass DSC comments to the driver.
+% We use a pseudo-parameter named DSC whose value is an array:
+% /key1 (value1) ... /type
+/.pdfdsc_dict 2 dict def
+/.pdfdsc { % <file> <DSC string> <dsc dict> [<prev proc>] .pdfdsc -
+ 0 get dup null ne { 4 copy exch pop exec } { pop } ifelse 3 -1 roll pop
+ % Stack: <dsc string> <dsc dict>
+ 20 .localvmdict 1 index { 3 copy put pop pop } forall
+ 3 -1 roll .parse_dsc_comments % <dsc dict> <dict> <type>
+ dup /NOP ne 2 index length 1 gt or { % Skip unparsed comments
+ DEBUG { (**** DSC comment: ) print dup == 1 index === flush } if
+ exch mark 4 1 roll {
+ % mark <key1> <value1> ... <dsc dict> <type> <key> <value>
+ 3 index 2 index known { % Skip the DSC_struct entry
+ pop pop
+ } {
+ .pdfcvs 4 -2 roll
+ } ifelse
+ } forall exch pop counttomark .localvmarray astore
+ mark /DSC 3 -1 roll .pdfputparams
+ dup type /booleantype ne {
+ /DSC .pdfparamerror
+ } {
+ cleartomark
+ } ifelse
+ } {
+ pop pop pop
+ } ifelse
+} bind def
+/.initialize_dsc_parser where {
+ pop 2 dict dup .initialize_dsc_parser readonly
+ currentuserparams /ProcessDSCComment get
+ 1 array astore % in case the value is executable
+ //.pdfdsc /exec load 4 array astore cvx readonly
+ << /ProcessDSCComment 3 -1 roll >> setuserparams
+} if
+
+% ---------------- {set,current}distillerparams ---------------- %
+
+% Define setdistillerparams / currentdistillerparams.
+% Distiller parameters are currently treated as device parameters.
+/.distillerparamkeys mark
+ % General parameters -- all distillers
+ /ASCII85EncodePages { }
+ /AutoRotatePages { }
+ /Binding { }
+ /CompressPages { }
+ /DefaultRenderingIntent { }
+ /DetectBlends { }
+ /DoThumbnails { }
+ /ImageMemory { }
+ /LockDistillerParams { }
+ /LZWEncodePages { }
+ /OPM { }
+ /PreserveHalftoneInfo { }
+ /PreserveOPIComments { }
+ /PreserveOverprintSettings { }
+ /TransferFunctionInfo { }
+ /UCRandBGInfo { }
+ /UseFlateCompression { }
+ % General parameters -- PDF writer
+ % StartPage and EndPage are renamed because EndPage
+ % clashes with a page device parameter.
+ /CoreDistVersion { }
+ /CompatibilityLevel { }
+ % ****** NOTE: StartPage and EndPage are disabled because
+ % ****** EndPage clashes with a page device parameter.
+% /EndPage { exch pop /PDFEndPage exch }
+ /PDFEndPage { pop pop }
+% /StartPage { exch pop /PDFStartPage exch }
+ /PDFStartPage { pop pop }
+ /Optimize { }
+ /ParseDSCCommentsForDocInfo { }
+ /ParseDSCComments { }
+ /EmitDSCWarnings { }
+ /CreateJobTicket { }
+ /PreserveEPSInfo { }
+ /AutoPositionEPSFiles { }
+ /PreserveCopyPage { }
+ /UsePrologue { }
+ % Color sampled image parameters
+ /ColorACSImageDict { }
+ /AntiAliasColorImages { }
+ /AutoFilterColorImages { }
+ /ColorImageDepth { }
+ /ColorImageDict { }
+ /DownsampleColorImages { }
+ /ColorImageDownsampleThreshold { }
+ /ColorImageDownsampleType { }
+ /EncodeColorImages { }
+ /ColorImageFilter { }
+ /ColorImageResolution { }
+ % Color processing parameters
+ /CalCMYKProfile { }
+ /CalGrayProfile { }
+ /CalRGBProfile { }
+ /sRGBProfile { }
+ /ColorConversionStrategy { }
+ /ConvertCMYKImagesToRGB { }
+ /ConvertImagesToIndexed { }
+ % Grayscale sampled image parameters
+ /GrayACSImageDict { }
+ /AntiAliasGrayImages { }
+ /AutoFilterGrayImages { }
+ /GrayImageDepth { }
+ /GrayImageDict { }
+ /DownsampleGrayImages { }
+ /GrayImageDownsampleThreshold { }
+ /GrayImageDownsampleType { }
+ /EncodeGrayImages { }
+ /GrayImageFilter { }
+ /GrayImageResolution { }
+ % Monochrome sampled image parameters
+ /AntiAliasMonoImages { }
+ /MonoImageDepth { }
+ /MonoImageDict { }
+ /DownsampleMonoImages { }
+ /MonoImageDownsampleThreshold { }
+ /MonoImageDownsampleType { }
+ /EncodeMonoImages { }
+ /MonoImageFilter { }
+ /MonoImageResolution { }
+ % Font embedding parameters
+ /AlwaysEmbed
+ { dup length 0 gt
+ { dup 0 get false eq
+ { dup length 1 sub 1 exch getinterval exch pop /~AlwaysEmbed exch
+ } if
+ } if
+ }
+ /NeverEmbed
+ { dup length 0 gt
+ { dup 0 get false eq
+ { dup length 1 sub 1 exch getinterval exch pop /~NeverEmbed exch
+ } if
+ } if
+ }
+ /CannotEmbedFontPolicy { }
+ /EmbedAllFonts { }
+ /MaxSubsetPct { }
+ /SubsetFonts { }
+.dicttomark readonly def
+/.distillerdevice
+ { currentdevice .devicename /pdfwrite eq
+ { currentdevice }
+ { /pdfwrite finddevice }
+ ifelse
+ } bind def
+/setdistillerparams { % <dict> setdistillerparams -
+ .distillerdevice null false mark 4 index {
+ //.distillerparamkeys 2 index .knownget { exec } { pop pop } ifelse
+ } forall .putdeviceparams
+ dup type /booleantype ne {
+ /setdistillerparams .pdfparamerror
+ } {
+ pop pop pop
+ } ifelse
+} odef
+/currentdistillerparams { % - currentdistillerparams <dict>
+ .distillerdevice //.distillerparamkeys .getdeviceparams .dicttomark
+ % Patch StartPage and EndPage
+ % ****** NOTE: StartPage and EndPage are disabled because
+ % ****** EndPage clashes with a page device parameter.
+% begin /StartPage PDFStartPage /EndPage PDFEndPage
+% currentdict dup /PDFStartPage undef /PDFEndPage undef
+% def def currentdict end
+} odef
+
+% Patch 'where' so that the distillerparams operators are only visible
+% if the pdfwrite device is the current one, for the benefit of badly
+% designed PostScript files that "know" they have to do something different
+% if a distiller is processing them.
+.wheredict /currentdistillerparams {
+ currentdevice .devicename /pdfwrite eq {
+ .where
+ } {
+ .where pop dup //systemdict eq { pop false } { true } ifelse
+ } ifelse
+} bind put
+.wheredict /setdistillerparams .wheredict /currentdistillerparams get put
+
+% Set a predefined configuration if PDFSETTINGS is defined.
+/PDFSETTINGS where { pop /PDFSETTINGS load } { /default } ifelse
+.distillersettings exch get
+% Don't override parameters defined on the command line.
+dup length .distillercommon length add dict begin
+.distillercommon 2 {
+ {
+ systemdict 2 index known { pop pop } { def } ifelse
+ } forall
+} repeat
+currentdict end setdistillerparams
diff --git a/Master/xemtex/gslib/gs_pfile.ps b/Master/xemtex/gslib/gs_pfile.ps
new file mode 100644
index 00000000000..34a8e48b0ce
--- /dev/null
+++ b/Master/xemtex/gslib/gs_pfile.ps
@@ -0,0 +1,128 @@
+% Copyright (C) 1994, 1995 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_pfile.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Runtime support for minimum-space fonts and packed files.
+
+% ****** NOTE: This file must be kept consistent with
+% ****** packfile.ps and wrfont.ps.
+
+% ---------------- Packed file support ---------------- %
+
+% A packed file is the concatenation of several file groups, each of which
+% is the result of compressing several files concatenated together.
+% The packed file begins with a procedure that creates an appropriate
+% decoding filter for each file group, as follows:
+% <group-subfile-filter> -proc- <group-decode-filter>
+% Thus, accessing an individual file requires 4 parameters:
+% the starting address and length of the outer compressed file,
+% and the starting address and length of the inner file.
+/.packedfilefilter % <file> <ostart> <olength> <istart> <ilength>
+ % .packedfilefilter <filter>
+ { 4 index systemdict begin token pop end 6 1 roll
+ % Stack: fproc file ostart olength istart ilength
+ 4 index 5 -1 roll setfileposition
+ % Stack: fproc file olength istart ilength
+ 4 -2 roll () /SubFileDecode filter
+ % Stack: fproc istart ilength ofilter
+ 4 -1 roll exec
+ % Filters don't support setfileposition, so we must skip data
+ % by reading it into a buffer. We rely on the fact that
+ % save/restore don't affect file positions.
+ % Stack: istart ilength dfilter
+ save exch 1000 string
+ % Stack: istart ilength save dfilter scratch
+ 4 index 1 index length idiv { 2 copy readstring pop pop } repeat
+ 2 copy 0 8 -1 roll 2 index length mod getinterval readstring pop pop pop
+ % Stack: ilength save dfilter
+ exch restore exch () /SubFileDecode filter
+ } bind def
+
+% Run a packed library file.
+/.runpackedlibfile % <filename> <ostart> <olength> <istart> <ilength>
+ % .runpackedlibfile
+ { 5 -1 roll findlibfile
+ { exch pop dup 6 2 roll .packedfilefilter
+ currentobjectformat exch 1 setobjectformat run
+ setobjectformat closefile
+ }
+ { 5 1 roll /findlibfile load /undefinedfilename signalerror
+ }
+ ifelse
+ } bind def
+
+% ---------------- Compacted font support ---------------- %
+
+% Compacted fonts written by wrfont.ps depend on the existence and
+% specifications of the procedures and data in this section.
+
+/.compactfontdefault mark
+ /PaintType 0
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly
+ /FontType 1
+ /Encoding StandardEncoding
+.dicttomark readonly def
+
+/.checkexistingfont % <fontname> <uid> <privatesize> <fontsize>
+ % .checkexistingfont
+ % {} (<font> on d-stack)
+ % <fontname> <uid> <privatesize> <fontsize>
+ % .checkexistingfont
+ % -save- --restore-- (<font> on d-stack)
+ { FontDirectory 4 index .knownget
+ { dup /UniqueID .knownget
+ { 4 index eq exch /FontType get 1 eq and }
+ { pop false }
+ ifelse
+ }
+ { false
+ }
+ ifelse
+ { save /restore load 6 2 roll }
+ { {} 5 1 roll }
+ ifelse
+ dict //.compactfontdefault exch .copydict begin
+ dict /Private exch def
+ Private begin
+ /MinFeature {16 16} def
+ /Password 5839 def
+ /UniqueID 1 index def
+ end
+ /UniqueID exch def
+ /FontName exch def
+ } bind def
+
+/.knownEncodings [
+ ISOLatin1Encoding
+ StandardEncoding
+ SymbolEncoding
+] readonly def
+
+/.readCharStrings % <count> <encrypt> .readCharStrings <dict>
+ { exch dup dict dup 3 -1 roll
+ { currentfile token pop dup type /integertype eq
+ { dup -8 bitshift //.knownEncodings exch get exch 255 and get } if
+ currentfile token pop dup type /nametype eq
+ { 2 index exch get
+ }
+ { % Stack: encrypt dict dict key value
+ 4 index { 4330 exch dup .type1encrypt exch pop } if
+ readonly
+ }
+ ifelse put dup
+ }
+ repeat pop exch pop
+ } bind def
diff --git a/Master/xemtex/gslib/gs_rdlin.ps b/Master/xemtex/gslib/gs_rdlin.ps
new file mode 100644
index 00000000000..026e3edf6c4
--- /dev/null
+++ b/Master/xemtex/gslib/gs_rdlin.ps
@@ -0,0 +1,21 @@
+% Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_rdlin.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Patch for systems with readline support in the interpreter.
+
+% Disable the prompt message, since readline will generate it.
+/.promptmsg { } def
diff --git a/Master/xemtex/gslib/gs_res.ps b/Master/xemtex/gslib/gs_res.ps
new file mode 100644
index 00000000000..67099d29102
--- /dev/null
+++ b/Master/xemtex/gslib/gs_res.ps
@@ -0,0 +1,928 @@
+% Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_res.ps,v 1.16.2.2.2.1 2003/04/12 14:02:38 giles Exp $
+% Initialization file for Level 2 resource machinery.
+% When this is run, systemdict is still writable,
+% but (almost) everything defined here goes into level2dict.
+
+level2dict begin
+
+(BEGIN RESOURCES) VMDEBUG
+
+% We keep track of (global) instances with another entry in the resource
+% dictionary, an .Instances dictionary. For categories with implicit
+% instances, the values in .Instances are the same as the keys;
+% for other categories, the values are [instance status size].
+
+% Note that the dictionary that defines a resource category is stored
+% in global VM. The PostScript manual says that each category must
+% manage global and local instances separately. However, objects in
+% global VM other than systemdict can't reference objects in local VM.
+% This means that the resource category dictionary, which would otherwise be
+% the obvious place to keep track of the instances, can't be used to keep
+% track of local instances. Instead, we define a dictionary in local VM
+% called localinstancedict, in which the key is the category name and
+% the value is the analogue of .Instances for local instances.
+
+% We don't currently implement automatic resource unloading.
+% When and if we do, it should be hooked to the garbage collector.
+% However, Ed Taft of Adobe says their interpreters don't implement this
+% either, so we aren't going to worry about it for a while.
+
+currentglobal false setglobal systemdict begin
+ /localinstancedict 5 dict
+ .forcedef % localinstancedict is local, systemdict is global
+end true setglobal
+/.emptydict 0 dict readonly def
+setglobal
+
+% Resource category dictionaries have the following keys (those marked with
+% * are optional):
+% Standard, defined in the Red Book:
+% Category (name)
+% *InstanceType (name)
+% DefineResource
+% <key> <instance> DefineResource <instance>
+% UndefineResource
+% <key> UndefineResource -
+% FindResource
+% <key> FindResource <instance>
+% ResourceStatus
+% <key> ResourceStatus <status> <size> true
+% <key> ResourceStatus false
+% ResourceForAll
+% <template> <proc> <scratch> ResourceForAll -
+% *ResourceFileName
+% <key> <scratch> ResourceFileName <filename>
+% Additional, specific to our implementation:
+% .Instances (dictionary)
+% .LocalInstances
+% - .LocalInstances <dict>
+% .GetInstance
+% <key> .GetInstance <instance> -true-
+% <key> .GetInstance -false-
+% .CheckResource
+% <key> <value> .CheckResource <key> <value> <ok>
+% (or may give an error if not OK)
+% .DoLoadResource
+% <key> .DoLoadResource <key> (may give an error)
+% .LoadResource
+% <key> .LoadResource - (may give an error)
+% .ResourceFile
+% <key> .ResourceFile <file> -true-
+% <key> .ResourceFile <key> -false-
+% .ResourceFileStatus
+% <key> .ResourceFileStatus 2 <vmusage> -true-
+% <key> .ResourceFileStatus -false-
+% All the above procedures expect that the top dictionary on the d-stack
+% is the resource dictionary.
+
+% Define enough of the Category category so we can define other categories.
+% The dictionary we're about to create will become the Category
+% category definition dictionary.
+
+% .findcategory and .resourceexec are only called from within the
+% implementation of the resource 'operators', so they doesn't have to worry
+% about cleaning up the stack if they fail (the interpreter's stack
+% protection machinery for pseudo-operators takes care of this).
+/.findcategory { % <name> .findcategory -
+ % (pushes the category on the dstack)
+ /Category findresource begin
+} bind def
+
+/.resourceexec { % <key> /xxxResource .resourceexec -
+ % (also pops the category from the dstack)
+ load exec end
+} bind def
+
+% .getvminstance treats instances on disk as undefined.
+/.getvminstance { % <key> .getvminstance <instance> -true-
+ % <key> .getvminstance -false-
+ .GetInstance {
+ dup 1 get 2 ne { true } { pop false } ifelse
+ } {
+ false
+ } ifelse
+} bind def
+
+20 dict begin
+
+ % Standard entries
+
+/Category /Category def
+/InstanceType /dicttype def
+
+/DefineResource {
+ .CheckResource {
+ dup /Category 3 index cvlit .growput
+ dup [ exch 0 -1 ] exch
+ .Instances 4 2 roll put
+ % Make the Category dictionary read-only. We will have to
+ % use .forceput / .forcedef later to replace the dummy,
+ % empty .Instances dictionary with the real one later.
+ readonly
+ } {
+ /defineresource load /typecheck signalerror
+ } ifelse
+} bind def
+/FindResource % (redefined below)
+ { .Instances exch get 0 get
+ } bind def
+
+ % Additional entries
+
+/.Instances 30 dict def
+.Instances /Category [currentdict 0 -1] put
+
+/.LocalInstances 0 dict def
+/.GetInstance
+ { .Instances exch .knownget
+ } bind def
+/.CheckResource
+ { dup gcheck currentglobal and
+ { /DefineResource /FindResource /ResourceForAll /ResourceStatus
+ /UndefineResource }
+ { 2 index exch known and }
+ forall
+ not { /defineresource load /invalidaccess signalerror } if
+ true
+ } bind def
+
+.Instances end begin % for the base case of findresource
+
+(END CATEGORY) VMDEBUG
+
+% Define the resource operators. We use the "stack protection" feature of
+% odef to make sure the stacks are restored properly on an error.
+% This requires that the operators not pop anything from the stack until
+% they have executed their logic successfully. We can't make this
+% work for resourceforall, because the procedure it executes mustn't see
+% the operands of resourceforall on the stack, but we can make it work for
+% the others.
+
+% findresource is the only operator that needs to bind //Category.
+/findresource { % <key> <category> findresource <instance>
+ 2 copy dup /Category eq
+ { pop //Category 0 get begin } { .findcategory } ifelse
+ /FindResource .resourceexec exch pop exch pop
+} bind
+end % .Instances of Category
+odef
+
+/defineresource { % <key> <instance> <category> defineresource <instance>
+ 3 copy .findcategory
+ currentdict /InstanceType known {
+ dup type InstanceType ne {
+ dup type /packedarraytype eq InstanceType /arraytype eq and
+ not { /defineresource load /typecheck signalerror } if
+ } if
+ } if
+ /DefineResource .resourceexec
+ 4 1 roll pop pop pop
+} bind odef
+% We must prevent resourceforall from automatically restoring the stacks,
+% because we don't want the stacks restored if proc causes an error.
+% On the other hand, resourceforall is defined in the PLRM as an operator,
+% so it must have type /operatortype. We hack this by taking advantage of
+% the fact that the interpreter optimizes tail calls, so stack protection
+% doesn't apply to the very last token of an operator procedure.
+/resourceforall1 { % <template> <proc> <scratch> <category> resourceforall1 -
+ dup /Category findresource begin
+ /ResourceForAll load
+ % Make sure we can recover the original operands.
+ % We must create the array in local VM, in case any of the
+ % operands are local.
+ % Stack: ...operands... proc
+ 5 copy pop .currentglobal false .setglobal 5 1 roll
+ 4 packedarray exch .setglobal count
+ % Stack: ...operands... proc saved count
+ 4 -1 roll pop % pop the category
+ /stopped load 3 1 roll
+ 3 .execn
+ % Stack: ... stopped saved count
+ 3 -1 roll {
+ .currentstackprotect {
+ % The count is the original stack depth + 2.
+ count exch 4 sub sub { exch pop } repeat
+ aload pop end
+ } {
+ % Don't restore the stacks.
+ pop pop
+ } ifelse stop
+ } {
+ pop pop end
+ } ifelse
+} bind def
+/resourceforall { % <template> <proc> <scratch> <category> resourceforall1 -
+ //resourceforall1 exec % see above
+} bind odef
+/resourcestatus { % <key> <category> resourcestatus <status> <size> true
+ % <key> <category> resourcestatus false
+ 2 copy .findcategory /ResourceStatus .resourceexec
+ { 4 2 roll pop pop true } { pop pop false } ifelse
+} bind odef
+/undefineresource { % <key> <category> undefineresource -
+ 2 copy .findcategory /UndefineResource .resourceexec pop pop
+} bind odef
+
+% Define the system parameters used for the Generic implementation of
+% ResourceFileName.
+systemdict begin
+currentdict /pssystemparams known not {
+ /pssystemparams 10 dict readonly def
+} if
+pssystemparams begin
+ /FontResourceDir (/Resource/Font/) readonly .forcedef % pssys'params is r-o
+ /GenericResourceDir (/Resource/) readonly .forcedef % pssys'params is r-o
+ /GenericResourcePathSep (/) readonly .forcedef % pssys'params is r-o
+end
+end
+
+% Define the generic algorithm for computing resource file names.
+/.rfnstring 100 string def
+/.genericrfn % <key> <scratch> <prefix> .genericrfn <filename>
+ { 3 -1 roll //.rfnstring cvs concatstrings exch copy
+ } bind def
+
+% Define a procedure for making a packed array in local VM.
+/.localpackedarray { % <obj1> ... <objn> <n> .localpackedarray <packedarray>
+ .currentglobal false .setglobal 1 index 2 add 1 roll
+ packedarray exch .setglobal
+} bind def
+
+% Define the Generic category.
+
+/Generic mark
+
+ % Standard entries
+
+% We're still running in Level 1 mode, so dictionaries won't expand.
+% Leave room for the /Category entry.
+/Category null
+
+% Implement the body of Generic resourceforall for local, global, and
+% external cases. 'args' is [template proc scratch resdict].
+/.enumerateresource { % <key> [- <proc> <scratch>] .enumerateresource -
+ 1 index type dup /stringtype eq exch /nametype eq or {
+ exch 1 index 2 get cvs exch
+ } if
+ % Use .setstackprotect to prevent the stacks from being restored if
+ % an error occurs during execution of proc.
+ 1 get false .setstackprotect exec true .setstackprotect
+} bind def
+/.localresourceforall { % <key> <value> <args> .localr'forall -
+ exch pop
+ 2 copy 0 get .stringmatch { .enumerateresource } { pop pop } ifelse
+} bind def
+/.globalresourceforall { % <key> <value> <args> .globalr'forall -
+ exch pop
+ 2 copy 0 get .stringmatch {
+ dup 3 get begin .LocalInstances end 2 index known not {
+ .enumerateresource
+ } if
+ } {
+ pop pop
+ } ifelse
+} bind def
+/.externalresourceforall { % <filename> <len> <args> .externalr'forall -
+ 3 1 roll 1 index length 1 index sub getinterval exch
+ dup 3 get begin .Instances .LocalInstances end
+ % Stack: key args insts localinsts
+ 3 index known {
+ pop pop pop
+ } {
+ 2 index known { pop pop } { .enumerateresource } ifelse
+ } ifelse
+} bind def
+
+/DefineResource {
+ .CheckResource
+ { dup [ exch 0 -1 ]
+ % Stack: key value instance
+ currentglobal
+ { false setglobal 2 index UndefineResource % remove local def if any
+ true setglobal
+ .Instances dup //.emptydict eq {
+ pop 3 dict
+ % As noted above, Category dictionaries are read-only,
+ % so we have to use .forcedef here.
+ /.Instances 1 index .forcedef % Category dict is read-only
+ } if
+ }
+ { .LocalInstances dup //.emptydict eq
+ { pop 3 dict localinstancedict Category 2 index put
+ }
+ if
+ }
+ ifelse
+ % Stack: key value instance instancedict
+ 3 index 2 index .growput
+ % Now make the resource value read-only.
+ 0 2 copy get { readonly } .internalstopped pop
+ dup 4 1 roll put exch pop exch pop
+ }
+ { /defineresource load /typecheck signalerror
+ }
+ ifelse
+} .bind executeonly % executeonly to prevent access to .forcedef
+/UndefineResource
+ { { dup 2 index .knownget
+ { dup 1 get 1 ge
+ { dup 0 null put 1 2 put pop pop }
+ { pop exch .undef }
+ ifelse
+ }
+ { pop pop
+ }
+ ifelse
+ }
+ currentglobal
+ { 2 copy .Instances exch exec
+ }
+ if .LocalInstances exch exec
+ } bind
+% Because of some badly designed code in Adobe's CID font downloader that
+% makes findresource and resourcestatus deliberately inconsistent with each
+% other, the default FindResource must not call ResourceStatus if there is
+% an instance of the desired name already defined in VM.
+/FindResource {
+ dup .getvminstance {
+ exch pop 0 get
+ } {
+ dup ResourceStatus {
+ pop 1 gt {
+ .DoLoadResource .getvminstance not {
+ /findresource load /undefinedresource signalerror
+ } if 0 get
+ } {
+ .GetInstance pop 0 get
+ } ifelse
+ } {
+ /findresource load /undefinedresource signalerror
+ } ifelse
+ } ifelse
+} bind
+% Because of some badly designed code in Adobe's CID font downloader, the
+% definition of ResourceStatus for Generic and Font must be the same (!).
+% We patch around this by using an intermediate .ResourceFileStatus procedure.
+/ResourceStatus {
+ dup .GetInstance {
+ exch pop dup 1 get exch 2 get true
+ } {
+ .ResourceFileStatus
+ } ifelse
+} bind
+/.ResourceFileStatus {
+ .ResourceFile { closefile 2 -1 true } { pop false } ifelse
+} bind
+/ResourceForAll {
+ % **************** Doesn't present instance groups in
+ % **************** the correct order yet.
+ % Construct a new procedure to hold the arguments.
+ % All objects constructed here must be in local VM to avoid
+ % a possible invalidaccess.
+ currentdict 4 .localpackedarray % [template proc scratch resdict]
+ % We must pop the resource dictionary off the dict stack
+ % when doing the actual iteration, and restore it afterwards.
+ .currentglobal not {
+ .LocalInstances length 0 ne {
+ % We must do local instances, and do them first.
+ //.localresourceforall {exec} 0 get 3 .localpackedarray cvx
+ .LocalInstances exch {forall} 0 get 1 index 0 get
+ currentdict end 3 .execn begin
+ } if
+ } if
+ % Do global instances next.
+ //.globalresourceforall {exec} 0 get 3 .localpackedarray cvx
+ .Instances exch cvx {forall} 0 get 1 index 0 get
+ currentdict end 3 .execn begin
+ currentdict /ResourceFileName known {
+ % Finally, do instances stored on files.
+ dup 0 get 100 string ResourceFileName
+ dup length 2 index 0 get length sub 3 -1 roll
+ //.externalresourceforall {exec} 0 get 4 .localpackedarray cvx
+ 100 string {filenameforall} 0 get
+ currentdict end 2 .execn begin null % for pop
+ } if pop
+} bind
+/ResourceFileName
+ { /GenericResourceDir getsystemparam
+ Category .namestring concatstrings
+ /GenericResourcePathSep getsystemparam concatstrings
+ .genericrfn
+ } bind
+
+ % Additional entries
+
+% Unfortunately, we can't create the real .Instances dictionary now,
+% because if someone copies the Generic category (which pp. 95-96 of the
+% 2nd Edition Red Book says is legitimate), they'll wind up sharing
+% the .Instances. Instead, we have to create .Instances on demand,
+% just like the entry in localinstancedict.
+% We also have to prevent anyone from creating instances of Generic itself.
+/.Instances //.emptydict
+
+/.LocalInstances
+ { localinstancedict Category .knownget not { //.emptydict } if
+ } bind
+/.GetInstance
+ { currentglobal
+ { .Instances exch .knownget }
+ { .LocalInstances 1 index .knownget
+ { exch pop true }
+ { .Instances exch .knownget }
+ ifelse
+ }
+ ifelse
+ } bind
+/.CheckResource
+ { true
+ } bind
+/.vmused {
+ % - .vmused <usedvalue>
+ % usedvalue = vmstatus in global + vmstatus in local.
+ 0 2 {
+ .currentglobal not .setglobal
+ vmstatus pop exch pop add
+ } repeat
+} bind def
+/.DoLoadResource {
+ % .LoadResource may push entries on the operand stack.
+ % It is an undocumented feature of Adobe implementations,
+ % which we must match for the sake of some badly written
+ % font downloading code, that such entries are popped
+ % automatically.
+ count 1 index cvlit .vmused
+ % Stack: key count litkey memused
+ {.LoadResource} 4 1 roll 4 .execn
+ % Stack: ... count key memused
+ .vmused exch sub
+ 1 index .getvminstance not {
+ pop dup /undefinedresource signalerror % didn't load
+ } if
+ dup 1 1 put
+ 2 3 -1 roll put
+ % Stack: ... count key
+ exch count 1 sub exch sub {exch pop} repeat
+} bind
+/.LoadResource
+ { dup .ResourceFile
+ { exch pop currentglobal
+ { .runresource }
+ { true setglobal { .runresource } stopped false setglobal { stop } if }
+ ifelse
+ }
+ { dup /undefinedresource signalerror
+ }
+ ifelse
+ } bind
+/.ResourceFile
+ { currentdict /ResourceFileName known
+ { mark 1 index 100 string { ResourceFileName }
+ .internalstopped
+ { cleartomark false }
+ { exch pop findlibfile
+ { exch pop exch pop true }
+ { pop false }
+ ifelse
+ }
+ ifelse
+ }
+ { false }
+ ifelse
+ } bind
+
+.dicttomark
+/Category defineresource pop
+
+% Fill in the rest of the Category category.
+/Category /Category findresource dup
+/Generic /Category findresource begin {
+ /FindResource /ResourceForAll /ResourceStatus /.ResourceFileStatus
+ /UndefineResource /ResourceFileName
+ /.ResourceFile /.LoadResource /.DoLoadResource
+} { dup load put dup } forall
+pop readonly pop end
+
+(END GENERIC) VMDEBUG
+
+% Define the fixed categories.
+
+mark
+ % Non-Type categories with existing entries.
+ /ColorSpaceFamily
+ { } % These must be deferred, because optional features may add some.
+ /Emulator
+ mark EMULATORS { cvn } forall .packtomark
+ /Filter
+ { } % These must be deferred, because optional features may add some.
+ /IODevice
+ % Loop until the .getiodevice gets a rangecheck.
+ errordict /rangecheck 2 copy get
+ errordict /rangecheck { pop stop } put % pop the command
+ mark 0 { {
+ dup .getiodevice dup null eq { pop } { exch } ifelse 1 add
+ } loop} .internalstopped
+ pop pop pop .packtomark
+ 4 1 roll put
+ .clearerror
+ % Type categories listed in the Red Book.
+ /ColorRenderingType
+ { } % These must be deferred, because optional features may add some.
+ /FMapType
+ { } % These must be deferred, because optional features may add some.
+ /FontType
+ { } % These must be deferred, because optional features may add some.
+ /FormType
+ { } % These must be deferred, because optional features may add some.
+ /HalftoneType
+ { } % These must be deferred, because optional features may add some.
+ /ImageType
+ { } % Deferred, optional features may add some.
+ /PatternType
+ { } % Deferred, optional features may add some.
+ % Type categories added since the Red Book.
+ /setsmoothness where {
+ pop /ShadingType { } % Deferred, optional features may add some.
+ } if
+counttomark 2 idiv
+ { mark
+
+ % Standard entries
+
+ % We'd like to prohibit defineresource,
+ % but because optional features may add entries, we can't.
+ % We can at least require that the key and value match.
+ /DefineResource
+ { currentglobal not
+ { /defineresource load /invalidaccess signalerror }
+ { 2 copy ne
+ { /defineresource load /rangecheck signalerror }
+ { dup .Instances 4 -2 roll .growput }
+ ifelse
+ }
+ ifelse
+ } bind
+ /UndefineResource
+ { /undefineresource load /invalidaccess signalerror } bind
+ /FindResource
+ { .Instances 1 index .knownget
+ { exch pop }
+ { /findresource load /undefinedresource signalerror }
+ ifelse
+ } bind
+ /ResourceStatus
+ { .Instances exch known { 0 0 true } { false } ifelse } bind
+ /ResourceForAll
+ /Generic /Category findresource /ResourceForAll get
+
+ % Additional entries
+
+ counttomark 2 add -1 roll
+ dup length dict dup begin exch { dup def } forall end
+ % We'd like to make the .Instances readonly here,
+ % but because optional features may add entries, we can't.
+ /.Instances exch
+ /.LocalInstances % used by ResourceForAll
+ 0 dict def
+
+ .dicttomark /Category defineresource pop
+ } repeat pop
+
+(END FIXED) VMDEBUG
+
+% Define the other built-in categories.
+
+/.definecategory % <name> -mark- <key1> ... <valuen> .definecategory -
+ { counttomark 2 idiv 2 add % .Instances, Category
+ /Generic /Category findresource dup maxlength 3 -1 roll add
+ dict .copydict begin
+ counttomark 2 idiv { def } repeat pop % pop the mark
+ currentdict end /Category defineresource pop
+ } bind def
+
+/ColorRendering mark /InstanceType /dicttype .definecategory
+% ColorSpace is defined below
+% Encoding is defined below
+% Font is defined below
+/Form mark /InstanceType /dicttype .definecategory
+/Halftone mark /InstanceType /dicttype .definecategory
+/Pattern mark /InstanceType /dicttype .definecategory
+/ProcSet mark /InstanceType /dicttype .definecategory
+% Added since the Red Book:
+/ControlLanguage mark /InstanceType /dicttype .definecategory
+/HWOptions mark /InstanceType /dicttype .definecategory
+/Localization mark /InstanceType /dicttype .definecategory
+/OutputDevice mark /InstanceType /dicttype .definecategory
+/PDL mark /InstanceType /dicttype .definecategory
+% CIDFont, CIDMap, and CMap are defined in gs_cidfn.ps
+% FontSet is defined in gs_cff.ps
+% IdiomSet is defined in gs_ll3.ps
+% InkParams and TrapParams are defined in gs_trap.ps
+
+(END MISC) VMDEBUG
+
+% Define the ColorSpace category.
+
+/.defaultcsnames mark
+ /DefaultGray 0
+ /DefaultRGB 1
+ /DefaultCMYK 2
+.dicttomark readonly def
+
+% The "hooks" are no-ops here, redefined in LL3.
+/.definedefaultcs { % <index> <value> .definedefaultcs -
+ pop pop
+} bind def
+/.undefinedefaultcs { % <index> .undefinedefaultcs -
+ pop
+} bind def
+
+/ColorSpace mark
+
+/InstanceType /arraytype
+
+% We keep track of whether there are any local definitions for any of
+% the Default keys. This information must get saved and restored in
+% parallel with the local instance dictionary, so it must be stored in
+% local VM.
+userdict /.localcsdefaults false put
+
+/DefineResource {
+ 2 copy /Generic /Category findresource /DefineResource get exec
+ exch pop
+ exch //.defaultcsnames exch .knownget {
+ 1 index .definedefaultcs
+ currentglobal not { .userdict /.localcsdefaults true put } if
+ } if
+} bind
+
+/UndefineResource {
+ dup /Generic /Category findresource /UndefineResource get exec
+ //.defaultcsnames 1 index .knownget {
+ % Stack: resname index
+ currentglobal {
+ .undefinedefaultcs pop
+ } {
+ % We removed the local definition, but there might be a global one.
+ exch .GetInstance {
+ 0 get .definedefaultcs
+ } {
+ .undefinedefaultcs
+ } ifelse
+ % Recompute .localcsdefaults by scanning. This is rarely needed.
+ .userdict /.localcsdefaults false //.defaultcsnames {
+ pop .LocalInstances exch known { pop true exit } if
+ } forall put
+ } ifelse
+ } {
+ pop
+ } ifelse
+} bind
+
+.definecategory % ColorSpace
+
+% Define the Encoding category.
+
+/Encoding mark
+
+/InstanceType /arraytype
+
+% Handle already-registered encodings, including lazily loaded encodings
+% that aren't loaded yet.
+
+/.Instances mark
+ EncodingDirectory
+ { dup length 256 eq { [ exch readonly 0 -1 ] } { pop [null 2 -1] } ifelse
+ } forall
+.dicttomark
+
+/.ResourceFileDict mark
+ EncodingDirectory
+ { dup length 256 eq { pop pop } { 0 get } ifelse
+ } forall
+.dicttomark
+
+/ResourceFileName
+ { .ResourceFileDict 2 index .knownget
+ { exch copy exch pop }
+ { /Generic /Category findresource /ResourceFileName get exec }
+ ifelse
+ } bind
+
+.definecategory % Encoding
+
+% Make placeholders in level2dict for the redefined Encoding operators,
+% so that they will be swapped properly when we switch language levels.
+
+/.findencoding /.findencoding load def
+/findencoding /findencoding load def
+/.defineencoding /.defineencoding load def
+
+(END ENCODING) VMDEBUG
+
+% Define the Font category.
+
+/.fontstatus { % <fontname> .fontstatus <fontname> <found>
+ { % Create a loop context just so we can exit it early.
+ % Check Fontmap.
+ Fontmap 1 index .knownget {
+ {
+ dup type /nametype eq {
+ .fontstatus { pop null exit } if
+ } {
+ dup type /stringtype eq {
+ findlibfile { closefile pop null exit } if pop
+ } {
+ % Procedure, assume success.
+ pop null exit
+ } ifelse
+ } ifelse
+ } forall dup null eq { pop true exit } if
+ } if
+ % Convert names to strings; give up on other types.
+ dup type /nametype eq { .namestring } if
+ dup type /stringtype ne { false exit } if
+ % Check the resource directory.
+ dup .fonttempstring /FontResourceDir getsystemparam .genericrfn
+ status {
+ pop pop pop pop true exit
+ } if
+ % Check for a file on the search path with the same name
+ % as the font.
+ findlibfile { closefile true exit } if
+ % Scan a FONTPATH directory and try again.
+ .scannextfontdir not { false exit } if
+ } loop
+} bind def
+
+/Font mark
+
+/InstanceType /dicttype
+
+/DefineResource
+ { 2 copy //definefont exch pop
+ /Generic /Category findresource /DefineResource get exec
+ } bind
+/UndefineResource
+ { dup //undefinefont
+ /Generic /Category findresource /UndefineResource get exec
+ } bind
+/FindResource {
+ dup .getvminstance {
+ exch pop 0 get
+ } {
+ dup ResourceStatus {
+ pop 1 gt { .loadfontresource } { .GetInstance pop 0 get } ifelse
+ } {
+ .loadfontresource
+ } ifelse
+ } ifelse
+} bind
+/ResourceForAll {
+ { .scannextfontdir not { exit } if } loop
+ /Generic /Category findresource /ResourceForAll get exec
+} bind
+/.ResourceFileStatus {
+ .fontstatus { pop 2 -1 true } { pop false } ifelse
+} bind
+
+/.loadfontresource {
+ dup vmstatus pop exch pop exch
+ % Hack: rebind .currentresourcefile so that all calls of
+ % definefont will know these are built-in fonts.
+ currentfile {pop //findfont exec} .execasresource % (findfont is a procedure)
+ exch vmstatus pop exch pop exch sub
+ % stack: name font vmused
+ % findfont has the prerogative of not calling definefont
+ % in certain obscure cases of font substitution.
+ 2 index .getvminstance {
+ dup 1 1 put
+ 2 3 -1 roll put
+ } {
+ pop
+ } ifelse exch pop
+} bind
+
+/.Instances FontDirectory length 2 mul dict
+
+.definecategory % Font
+
+% Redefine font "operators".
+/.definefontmap
+ { /Font /Category findresource /.Instances get
+ dup 3 index known
+ { pop
+ }
+ { 2 index
+ % Make sure we create the array in global VM.
+ .currentglobal true .setglobal
+ [null 2 -1] exch .setglobal
+ .growput
+ }
+ ifelse
+ //.definefontmap exec
+ } bind def
+
+% Make sure the old definitions are still in systemdict so that
+% they will get bound properly.
+systemdict begin
+ /.origdefinefont /definefont load def
+ /.origundefinefont /undefinefont load def
+ /.origfindfont /findfont load def
+end
+/definefont {
+ /Font defineresource
+} bind odef
+/undefinefont {
+ /Font undefineresource
+} bind odef
+% The Red Book requires that findfont be a procedure, not an operator,
+% but it still needs to restore the stacks reliably if it fails.
+/.findfontop {
+ /Font findresource
+} bind odef
+/findfont {
+ .findfontop
+} bind def % Must be a procedure, not an operator
+
+% Remove initialization utilities.
+currentdict /.definecategory .undef
+currentdict /.emptydict .undef
+
+end % level2dict
+
+% Convert deferred resources after we finally switch to Level 2.
+
+/.fixresources {
+ % Encoding resources
+ EncodingDirectory
+ { dup length 256 eq
+ { /Encoding defineresource pop }
+ { pop pop }
+ ifelse
+ } forall
+ /.findencoding { /Encoding findresource } bind def
+ /findencoding /.findencoding load def % must be a procedure
+ /.defineencoding { /Encoding defineresource pop } bind def
+ % ColorRendering resources and ProcSet
+ systemdict /ColorRendering .knownget {
+ /ColorRendering exch /ProcSet defineresource pop
+ systemdict /ColorRendering undef
+ /Default currentcolorrendering /ColorRendering defineresource pop
+ } if
+ % ColorSpace resources
+ systemdict /CIEsRGB .knownget {
+ /sRGB exch /ColorSpace defineresource pop
+ systemdict /CIEsRGB undef
+ } if
+ % ColorSpaceFamily resources
+ colorspacedict { pop dup /ColorSpaceFamily defineresource pop } forall
+ % Filter resources
+ filterdict { pop dup /Filter defineresource pop } forall
+ % FontType and FMapType resources
+ buildfontdict { pop dup /FontType defineresource pop } forall
+ mark
+ buildfontdict 0 known { 2 3 4 5 6 7 8 } if
+ buildfontdict 9 known { 9 } if
+ counttomark { dup /FMapType defineresource pop } repeat pop
+ % FormType resources
+ .formtypes { pop dup /FormType defineresource pop } forall
+ % HalftoneType resources
+ .halftonetypes { pop dup /HalftoneType defineresource pop } forall
+ % ColorRenderingType resources
+ .colorrenderingtypes {pop dup /ColorRenderingType defineresource pop} forall
+ % ImageType resources
+ .imagetypes { pop dup /ImageType defineresource pop } forall
+ % PatternType resources
+ .patterntypes { pop dup /PatternType defineresource pop } forall
+ % Make the fixed resource categories immutable.
+ /.shadingtypes where {
+ pop .shadingtypes { pop dup /ShadingType defineresource pop } forall
+ } if
+ [ /ColorSpaceFamily /Emulator /Filter /IODevice /ColorRenderingType
+ /FMapType /FontType /FormType /HalftoneType /ImageType /PatternType
+ /.shadingtypes where { pop /ShadingType } if
+ ] {
+ /Category findresource
+ dup /.Instances get readonly pop
+ .LocalInstances readonly pop
+ readonly pop
+ } forall
+ % clean up
+ systemdict /.fixresources undef
+} bind def
diff --git a/Master/xemtex/gslib/gs_s.xbm b/Master/xemtex/gslib/gs_s.xbm
new file mode 100644
index 00000000000..4d5234f63e1
--- /dev/null
+++ b/Master/xemtex/gslib/gs_s.xbm
@@ -0,0 +1,11 @@
+#define gs_s.xbm_width 24
+#define gs_s.xbm_height 24
+#define gs_s.xbm_x_hot 0
+#define gs_s.xbm_y_hot 0
+static unsigned char gs.s.bm_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x80, 0x08, 0x00, 0x00, 0x13,
+ 0x00, 0x00, 0x33, 0x00, 0xfe, 0x31, 0xe0, 0xff, 0x38, 0xf0, 0x3f, 0x38,
+ 0xf8, 0x07, 0x7e, 0xfc, 0x01, 0x7f, 0xfe, 0x90, 0x7f, 0x7e, 0x94, 0x7f,
+ 0x7e, 0x84, 0x7f, 0x7e, 0x00, 0x7f, 0x7e, 0x00, 0x7e, 0xfc, 0x60, 0x7c,
+ 0xfc, 0x61, 0x38, 0xf8, 0x03, 0x38, 0xf8, 0x03, 0x18, 0xf0, 0x07, 0x0c,
+ 0xc0, 0x0f, 0x06, 0xc0, 0x07, 0x03, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00};
diff --git a/Master/xemtex/gslib/gs_s.xpm b/Master/xemtex/gslib/gs_s.xpm
new file mode 100644
index 00000000000..765d9d79dd5
--- /dev/null
+++ b/Master/xemtex/gslib/gs_s.xpm
@@ -0,0 +1,36 @@
+/* XPM */
+static char * gs_s_xpm[] = {
+/* width height ncolors cpp [x_hot y_hot] */
+"24 24 6 1 0 0",
+/* colors */
+" s none m none c none",
+". c #808080808080",
+"X s iconColor1 m black c black",
+"o c #C0C0C0C0C0C0",
+"O s iconColor2 m white c white",
+"+ c #00000000FFFF",
+/* pixels */
+" ",
+" .. ",
+" XoOo. ",
+" X.OoX ",
+" X.OoX. ",
+" .XXXXXX.oOoXX ",
+" ..XXXXXXXX.oOO.XX ",
+" XXXXXXXX..oOOOo.XX ",
+" XXXXXXX.OOOOOo.XXXX. ",
+" XXXXXX.OOOOOOOXXXXXXX ",
+" .XXXXX.OOOO+OOXXXXXXXX ",
+" XXXXXXOOO+O+OOXXXXXXXX ",
+" XXXXXXOOO+OOOOXXXXXXXX ",
+" XXXXXXOOOOOOOOOXXXXXXX ",
+" .XXXXXOOOOOOOOOO.XXXXX ",
+" XXXXXXOOOOO++OOO.XXXX ",
+" .XXXXX.OOOO++OOOoXXX ",
+" XXXXXX.OOOOOOOOOXXX ",
+" .XXXXXXoOOOOOOOoXX ",
+" .XXXXXXoOOOOOo.X ",
+" .XXXXXOOOOO.X ",
+" .XXXXOOOOO.. ",
+" XXXXXOOOOOOOO ",
+" "};
diff --git a/Master/xemtex/gslib/gs_s_m.xbm b/Master/xemtex/gslib/gs_s_m.xbm
new file mode 100644
index 00000000000..941e9c48475
--- /dev/null
+++ b/Master/xemtex/gslib/gs_s_m.xbm
@@ -0,0 +1,11 @@
+#define gs_s_m.xbm_width 24
+#define gs_s_m.xbm_height 24
+#define gs_s_m.xbm_x_hot 0
+#define gs_s_m.xbm_y_hot 0
+static unsigned char gs.s_m.bm_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x1f,
+ 0x00, 0x00, 0x3f, 0x00, 0xfe, 0x3f, 0xe0, 0xff, 0x3f, 0xf0, 0xff, 0x3f,
+ 0xf8, 0xff, 0x7f, 0xfc, 0xff, 0x7f, 0xfe, 0xff, 0x7f, 0xfe, 0xff, 0x7f,
+ 0xfe, 0xff, 0x7f, 0xfe, 0xff, 0x7f, 0xfe, 0xff, 0x7f, 0xfc, 0xff, 0x7f,
+ 0xfc, 0xff, 0x3f, 0xf8, 0xff, 0x3f, 0xf8, 0xff, 0x1f, 0xf0, 0xff, 0x0f,
+ 0xc0, 0xff, 0x07, 0xc0, 0xff, 0x03, 0xf0, 0xff, 0x01, 0x00, 0x00, 0x00};
diff --git a/Master/xemtex/gslib/gs_setpd.ps b/Master/xemtex/gslib/gs_setpd.ps
new file mode 100644
index 00000000000..edfa072c85d
--- /dev/null
+++ b/Master/xemtex/gslib/gs_setpd.ps
@@ -0,0 +1,777 @@
+% Copyright (C) 1994, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_setpd.ps,v 1.8.2.2.2.2 2003/04/12 14:02:38 giles Exp $
+% The current implementation of setpagedevice has the following limitations:
+% - It doesn't attempt to "interact with the user" for Policy = 2.
+
+languagelevel 1 .setlanguagelevel
+level2dict begin
+
+% ---------------- Redefinitions ---------------- %
+
+% Redefine .beginpage and .endpage so that they call BeginPage and
+% EndPage respectively if appropriate.
+
+% We have to guard against the BeginPage procedure not popping its operand.
+% This is really stupid, but the Genoa CET does it.
+/.beginpage { % - .beginpage -
+ .currentshowpagecount {
+ .currentpagedevice pop
+ dup null ne { /BeginPage .knownget } { pop false } ifelse {
+ % Stack: ... pagecount proc
+ count 2 .execn
+ % Stack: ... ..???.. oldcount
+ count 1 add exch sub { pop } repeat
+ } {
+ pop
+ } ifelse
+ } if
+} bind odef
+
+% Guard similarly against EndPage not popping its operand.
+/.endpage { % <reason> .endpage <print_bool>
+ .currentshowpagecount {
+ 1 index .currentpagedevice pop
+ dup null ne { /EndPage .knownget } { pop false } ifelse {
+ % Stack: ... reason pagecount reason proc
+ count 2 .execn
+ % Stack: ... ..???.. print oldcount
+ count 2 add exch sub { exch pop } repeat
+ } {
+ pop pop 2 ne
+ } ifelse
+ } {
+ 2 ne
+ } ifelse
+} bind odef
+
+% Define interpreter callouts for handling gstate-saving operators,
+% to make sure that they create a page device dictionary for use by
+% the corresponding gstate-restoring operator.
+% We'd really like to avoid the cost of doing this, but we don't see how.
+% The names %gsavepagedevice, %savepagedevice, %gstatepagedevice,
+% %copygstatepagedevice, and %currentgstatepagedevice are known to the
+% interpreter.
+
+(%gsavepagedevice) cvn
+ { currentpagedevice pop gsave
+ } bind def
+
+(%savepagedevice) cvn
+ { currentpagedevice pop save
+ } bind def
+
+(%gstatepagedevice) cvn
+ { currentpagedevice pop gstate
+ } bind def
+
+(%copygstatepagedevice) cvn
+ { currentpagedevice pop copy
+ } bind def
+
+(%currentgstatepagedevice) cvn
+ { currentpagedevice pop currentgstate
+ } bind def
+
+% Define interpreter callouts for handling gstate-restoring operators
+% when the current page device needs to be changed.
+% The names %grestorepagedevice, %grestoreallpagedevice,
+% %restorepagedevice, %restore1pagedevice, and %setgstatepagedevice
+% are known to the interpreter.
+
+/.installpagedevice
+ { % Since setpagedevice doesn't create new device objects,
+ % we must (carefully) reinstall the old parameters in
+ % the same device.
+ .currentpagedevice pop null currentdevice null .trysetparams
+ dup type /booleantype eq
+ { pop pop }
+ { % This should never happen!
+ DEBUG { (Error in .trysetparams!) = pstack flush } if
+ cleartomark pop pop pop
+ /.installpagedevice cvx /rangecheck signalerror
+ }
+ ifelse pop pop
+ % A careful reading of the Red Book reveals that an erasepage
+ % should occur, but *not* an initgraphics.
+ erasepage .beginpage
+ } bind def
+
+/.uninstallpagedevice
+ { 2 .endpage { .currentnumcopies false .outputpage } if
+ nulldevice
+ } bind def
+
+(%grestorepagedevice) cvn
+ { .uninstallpagedevice grestore .installpagedevice
+ } bind def
+
+(%grestoreallpagedevice) cvn
+ { .uninstallpagedevice grestore .installpagedevice grestoreall
+ } bind def
+
+(%restore1pagedevice) cvn
+ { .uninstallpagedevice grestore .installpagedevice restore
+ } bind def
+
+(%restorepagedevice) cvn
+ { .uninstallpagedevice restore .installpagedevice
+ } bind def
+
+(%setgstatepagedevice) cvn
+ { .uninstallpagedevice setgstate .installpagedevice
+ } bind def
+
+% Redefine .currentnumcopies so it consults the NumCopies device parameter.
+/.numcopiesdict mark
+ /NumCopies dup
+.dicttomark readonly def
+
+/.currentnumcopies
+ { currentdevice //.numcopiesdict .getdeviceparams
+ dup type /integertype eq
+ { exch pop exch pop }
+ { cleartomark #copies }
+ ifelse
+ } bind odef
+
+% Redefine .currentpagedevice and .setpagedevice so they convert between
+% null and a fixed empty directionary.
+/.nullpagedevice 0 dict readonly def
+/.currentpagedevice {
+ //.currentpagedevice exch dup null eq { pop //.nullpagedevice } if exch
+} bind odef
+/.setpagedevice {
+ dup //.nullpagedevice eq { pop null } if //.setpagedevice
+} bind odef
+
+% ---------------- Auxiliary definitions ---------------- %
+
+% Define the required attributes of all page devices, and their default values.
+% We don't include attributes such as .MediaSize, which all devices
+% are guaranteed to supply on their own.
+/.defaultpolicies mark
+ /PolicyNotFound 1
+ /PageSize 0
+ /PolicyReport {
+ dup /.LockSafetyParams known {
+ % Only possible error is invalidaccess
+ /setpagedevice .systemvar /invalidaccess signalerror
+ }
+ if
+ pop
+ } bind
+.dicttomark readonly def
+% Note that the values of .requiredattrs are executed, not just fetched.
+/.requiredattrs mark
+ /PageDeviceName null
+ /PageOffset [0 0] readonly
+% We define InputAttributes and OutputAttributes with a single
+% dummy media type that handles pages of any size.
+% Devices that care will override this.
+ /InputAttributes {
+ mark 0
+ % Since sizes match within 5 user units, we need to set the smallest
+ % PageSize to 6 units so that [0 0] will fail.
+ mark /PageSize [6 dup 16#7ffff dup] .dicttomark
+ .dicttomark
+ }
+ (%MediaSource) 0
+ /OutputAttributes {
+ mark 0 mark .dicttomark readonly .dicttomark
+ }
+ (%MediaDestination) 0
+ /Install {{.callinstall}} bind
+ /BeginPage {{.callbeginpage}} bind
+ /EndPage {{.callendpage}} bind
+ /Policies .defaultpolicies
+.dicttomark readonly def
+
+% Define currentpagedevice so it creates the dictionary on demand if needed,
+% adding all the required entries defined just above.
+% We have to deal specially with entries that the driver may change
+% on its own.
+/.dynamicppkeys mark
+ /.MediaSize dup % because it changes when PageSize is set
+ /PageCount dup
+.dicttomark readonly def
+/.makecurrentpagedevice { % - .makecurrentpagedevice <dict>
+ currentdevice null .getdeviceparams
+ % Make the dictionary large enough to add defaulted entries.
+ counttomark 2 idiv .requiredattrs length add dict
+ counttomark 2 idiv { dup 4 2 roll put } repeat exch pop
+ % Add any missing required attributes.
+ % Make a writable and (if possible) local copy of any default
+ % dictionaries, to work around a bug in the output of WordPerfect,
+ % which assumes that these dictionaries are writable and local.
+ .currentglobal exch dup gcheck .setglobal
+ .requiredattrs {
+ 2 index 2 index known {
+ pop pop
+ } {
+ exec 2 index 3 1 roll put
+ } ifelse
+ } forall exch .setglobal
+ dup .setpagedevice
+} bind def
+/currentpagedevice {
+ .currentpagedevice {
+ dup length 0 eq {
+ pop .makecurrentpagedevice
+ } {
+ % If any of the dynamic keys have changed,
+ % we must update the page device dictionary.
+ currentdevice //.dynamicppkeys .getdeviceparams .dicttomark {
+ % Stack: current key value
+ 2 index 2 index .knownget { 1 index ne } { true } ifelse
+ { 2 index wcheck not
+ { % This is the first entry being updated.
+ % Copy the dictionary to make it writable.
+ 3 -1 roll
+ currentglobal 1 index dup gcheck currentglobal and setglobal
+ length dict exch setglobal .copydict
+ 3 1 roll
+ }
+ if
+ 2 index 3 1 roll put
+ }
+ { pop pop
+ }
+ ifelse
+ } forall
+ % If the dictionary was global and is now local, copy
+ % any global subsidiary dictionaries to local VM. This
+ % too is to work around the Word Perfect bug (see above).
+ dup gcheck not {
+ dup {
+ dup type /dicttype eq { dup gcheck } { false } ifelse {
+ % Copy-on-write, see above.
+ 2 index wcheck not {
+ 3 -1 roll dup length dict .copydict
+ 3 1 roll
+ } if
+ .copytree 2 index 3 1 roll put
+ } {
+ pop pop
+ } ifelse
+ } forall
+ } if
+ % We would like to do a .setpagedevice so we don't keep
+ % re-creating the dictionary. Unfortunately, the effect
+ % of this is that if any dynamic key changes (PageCount
+ % in particular), we will do the equivalent of a
+ % setpagedevice at the next restore or grestore.
+ % Therefore, we make the dictionary read-only, but
+ % we don't store it away. I.e., NOT:
+ % dup wcheck { .setpagedevice .currentpagedevice pop } if
+ readonly
+ } ifelse
+ } if
+} bind odef
+
+% Copy a dictionary recursively.
+/.copytree { % <dict> .copytree <dict'>
+ dup length dict exch {
+ dup type /dicttype eq { .copytree } if 2 index 3 1 roll put
+ } forall
+} bind def
+
+% The implementation of setpagedevice is quite complex. Currently,
+% everything but the media matching algorithm is implemented here.
+
+% By default, we only present the requested changes to the device,
+% but there are some parameters that require special merging action.
+% Define those parameters here, with the procedures that do the merging.
+% The procedures are called as follows:
+% <merged> <key> <new_value> -proc- <merged> <key> <new_value'>
+/.mergespecial mark
+ /InputAttributes
+ { dup null eq
+ { pop null
+ }
+ { 3 copy pop .knownget
+ { dup null eq
+ { pop dup length dict }
+ { dup length 2 index length add dict .copydict }
+ ifelse
+ }
+ { dup length dict
+ }
+ ifelse .copydict readonly
+ }
+ ifelse
+ } bind
+ /OutputAttributes 1 index
+ /Policies
+ { 3 copy pop .knownget
+ { dup length 2 index length add dict .copydict }
+ { dup length dict }
+ ifelse copy readonly
+ } bind
+.dicttomark readonly def
+
+% Define the keys used in input attribute matching.
+/.inputattrkeys [
+ /PageSize /MediaColor /MediaWeight /MediaType /InsertSheet
+ % The following are documented in Adobe's supplement for v2017.
+ /LeadingEdge /MediaClass
+] readonly def
+% Define other keys used in media selection.
+/.inputselectionkeys [
+ /MediaPosition /Orientation
+] readonly def
+
+% Define the keys used in output attribute matching.
+/.outputattrkeys [
+ /OutputType
+] readonly def
+
+% Define all the parameters that should always be copied to the merged
+% dictionary.
+/.copiedkeys [
+ /OutputDevice
+ .mergespecial { pop } forall
+ .inputattrkeys aload pop
+ .inputselectionkeys aload pop
+ .outputattrkeys aload pop
+] readonly def
+
+% Define the parameters that should not be presented to the device.
+% The procedures are called as follows:
+% <merged> <key> <value> -proc-
+% The procedure leaves all its operands on the stack and returns
+% true iff the key/value pair should be presented to .putdeviceparams.
+/.presentspecial mark
+ .dynamicppkeys { pop false } forall
+ % We must ignore an explicit request for .MediaSize,
+ % because media matching always handles this.
+ /.MediaSize false
+ /Name false
+ /OutputDevice false
+ /PageDeviceName false
+ /PageOffset false
+ /PageSize false % obsolete alias for .MediaSize
+ /InputAttributes false
+ .inputattrkeys
+ { dup /PageSize eq
+ { pop }
+ { { 2 index /InputAttributes .knownget { null eq } { true } ifelse } }
+ ifelse
+ }
+ forall
+ .inputselectionkeys { false } forall
+ /OutputAttributes false
+ .outputattrkeys
+ { { 2 index /OutputAttributes .knownget { null eq } { true } ifelse } }
+ forall
+ /Install false
+ /BeginPage false
+ /EndPage false
+ /Policies false
+ % Our extensions:
+ /HWColorMap
+ { % HACK: don't transmit the color map, because
+ % window systems can change the color map on their own
+ % incrementally. Someday we'll have a better
+ % solution for this....
+ false
+ }
+ /ViewerPreProcess false
+.dicttomark readonly def
+
+% Define access to device defaults.
+/.defaultdeviceparams
+ { finddevice null .getdeviceparams
+ } bind def
+
+% Select media (input or output). The hard work is done in an operator:
+% <pagedict> <attrdict> <policydict> <keys> .matchmedia <key> true
+% <pagedict> <attrdict> <policydict> <keys> .matchmedia false
+% <pagedict> null <policydict> <keys> .matchmedia null true
+/.selectmedia % <orig> <request> <merged> <failed> <-- retained
+ % <attrdict> <policydict> <attrkeys> <mediakey>
+ % .selectmedia
+ { 5 index 5 -2 roll 4 index .matchmedia
+ % Stack: orig request merged failed attrkeys mediakey
+ % (key true | false)
+ { 4 index 3 1 roll put pop
+ }
+ { % Adobe's implementations have a "big hairy heuristic"
+ % to choose the set of keys to report as having failed the match.
+ % For the moment, we report any keys that are in the request
+ % and don't have the same value as in the original dictionary.
+ 5 index 1 index .knownget
+ { 4 index 3 1 roll put }
+ { 3 index exch .undef }
+ ifelse
+ { % Stack: <orig> <request> <merged> <failed> <attrkey>
+ 3 index 1 index .knownget
+ { 5 index 2 index .knownget { ne } { pop true } ifelse }
+ { true }
+ ifelse % Stack: ... <failed> <attrkey> <report>
+ { 2 copy /rangecheck put }
+ if pop
+ }
+ forall
+ }
+ ifelse
+ } bind def
+
+% Apply Policies to any unprocessed failed requests.
+% As we process each request entry, we replace the error name
+% in the <failed> dictionary with the policy value,
+% and we replace the key in the <merged> dictionary with its prior value
+% (or remove it if it had no prior value).
+/.policyprocs mark
+% These procedures are called with the following on the stack:
+% <orig> <merged> <failed> <Policies> <key> <policy>
+% They are expected to consume the top 2 operands.
+% NOTE: we currently treat all values other than 0, 1, or 7 (for PageSize)
+% the same as 0, i.e., we signal an error.
+ 0 { % Set errorinfo and signal a configurationerror.
+ pop dup 4 index exch get 2 array astore
+ $error /errorinfo 3 -1 roll put
+ cleartomark
+ /setpagedevice load /configurationerror signalerror
+ } bind
+ 1 { % Roll back the failed request to its previous status.
+DEBUG { (Rolling back.) = pstack flush } if
+ 3 index 2 index 3 -1 roll put
+ 4 index 1 index .knownget
+ { 4 index 3 1 roll put }
+ { 3 index exch .undef }
+ ifelse
+ } bind
+ 7 { % For PageSize only, just impose the request.
+ 1 index /PageSize eq
+ { pop pop 1 index /PageSize 7 put }
+ { .policyprocs 0 get exec }
+ ifelse
+ } bind
+.dicttomark readonly def
+/.applypolicies % <orig> <merged> <failed> .applypolicies
+ % <orig> <merged'> <failed'>
+ { 1 index /Policies get 1 index
+ { type /integertype eq
+ { pop % already processed
+ }
+ { 2 copy .knownget not { 1 index /PolicyNotFound get } if
+ % Stack: <orig> <merged> <failed> <Policies> <key>
+ % <policy>
+ .policyprocs 1 index .knownget not { .policyprocs 0 get } if exec
+ }
+ ifelse
+ }
+ forall pop
+ } bind def
+
+% Prepare to present parameters to the device, by spreading them onto the
+% operand stack and removing any that shouldn't be presented.
+/.prepareparams % <params> .prepareparams -mark- <key1> <value1> ...
+ { mark exch dup
+ { % Stack: -mark- key1 value1 ... merged key value
+ .presentspecial 2 index .knownget
+ { exec { 3 -1 roll } { pop pop } ifelse }
+ { 3 -1 roll }
+ ifelse
+ }
+ forall pop
+ } bind def
+
+% Put device parameters without resetting currentpagedevice.
+% (.putdeviceparams clears the current page device.)
+/.putdeviceparamsonly % <device> <Policies|null> <require_all> -mark-
+ % <key1> <value1> ... .putdeviceparamsonly
+ % On success: <device> <eraseflag>
+ % On failure: <device> <Policies|null> <req_all> -mark-
+ % <key1> <error1> ...
+ { .currentpagedevice
+ { counttomark 4 add 1 roll .putdeviceparams
+ dup type /booleantype eq { 3 } { counttomark 5 add } ifelse -1 roll
+ .setpagedevice
+ }
+ { pop .putdeviceparams
+ }
+ ifelse
+ } bind def
+
+% Try setting the device parameters from the merged request.
+/.trysetparams % <merged> <(ignored)> <device> <Policies>
+ % .trysetparams
+ { true 4 index .prepareparams
+ % Add the computed .MediaSize.
+ % Stack: merged (ignored) device Policies -true-
+ % -mark- key1 value1 ...
+ counttomark 5 add index .computemediasize
+ exch pop exch pop /.MediaSize exch
+DEBUG { (Putting.) = pstack flush } if
+ .putdeviceparamsonly
+DEBUG { (Result of putting.) = pstack flush } if
+ } bind def
+
+% Compute the media size and initial matrix from a merged request (after
+% media selection).
+/.computemediasize % <request> .computemediasize
+ % <request> <matrix> <[width height]>
+ { dup /PageSize get % requested page size
+ 1 index /InputAttributes get
+ 2 index (%MediaSource) get get /PageSize get % media size
+ % (may be a range)
+ 2 index /Policies get
+ dup /PageSize .knownget
+ { exch pop } { /PolicyNotFound get } ifelse % PageSize policy,
+ % affects scaling
+ 3 index /Orientation .knownget not { null } if
+ 4 index /RollFedMedia .knownget not { false } if
+ matrix .matchpagesize not {
+ % This is a "can't happen" condition!
+ /setpagedevice load /rangecheck signalerror
+ } if
+ 2 array astore
+ } bind def
+
+% ---------------- setpagedevice itself ---------------- %
+
+/setpagedevice
+ { % We mustn't pop the argument until the very end,
+ % so that the pseudo-operator machinery can restore the stack
+ % if an error occurs.
+ mark 1 index currentpagedevice
+
+ % Check whether we are changing OutputDevice;
+ % also handle the case where the current device
+ % is not a page device.
+ % Stack: mark <request> <current>
+DEBUG { (Checking.) = pstack flush } if
+
+ dup /OutputDevice .knownget
+ { % Current device is a page device.
+ 2 index /OutputDevice .knownget
+ { % A specific OutputDevice was requested.
+ 2 copy eq
+ { pop pop null }
+ { exch pop }
+ ifelse
+ }
+ { pop null
+ }
+ ifelse
+ }
+ { % Current device is not a page device.
+ % Use the default device.
+ 1 index /OutputDevice .knownget not { .defaultdevicename } if
+ }
+ ifelse
+ dup null eq
+ { pop
+ }
+ { exch pop .defaultdeviceparams
+ % In case of duplicate keys, .dicttomark takes the entry
+ % lower on the stack, so we can just append the defaults here.
+ .requiredattrs { exec } forall .dicttomark
+ }
+ ifelse
+
+ % Check whether a viewer wants to intervene.
+ % We must check both the request (which takes precedence)
+ % and the current dictionary.
+ % Stack: mark <request> <orig>
+ exch dup /ViewerPreProcess .knownget
+ { exec }
+ { 1 index /ViewerPreProcess .knownget { exec } if }
+ ifelse exch
+
+ % Construct a merged request from the actual request plus
+ % any keys that should always be propagated.
+ % Stack: mark <request> <orig>
+DEBUG { (Merging.) = pstack flush } if
+
+ exch 1 index length 1 index length add dict
+ .copiedkeys
+ { % Stack: <orig> <request> <merged> <key>
+ 3 index 1 index .knownget { 3 copy put pop } if pop
+ }
+ forall
+ % Stack: <orig> <request> <merged>
+ dup 2 index
+ { % stack: <orig> <request> <merged> <merged> <rkey> <rvalue>
+ .mergespecial 2 index .knownget { exec } if
+ put dup
+ }
+ forall pop
+ % Hack: if FIXEDRESOLUTION is true, discard any attempt to
+ % change HWResolution.
+ FIXEDRESOLUTION { dup /HWResolution .undef } if
+ % Hack: if FIXEDMEDIA is true, discard any attempt to change
+ % PageSize or HWSize.
+ FIXEDMEDIA
+ { dup /PageSize 4 index /PageSize get put
+ dup /HWSize 4 index /HWSize get put
+ } if
+ % Hack: to work around some files that take a PageSize
+ % from InputAttributes and impose it, discard any attempt
+ % to set PageSize to a 4-element value.
+ % Stack: mark <orig> <request> <merged>
+ dup /PageSize .knownget {
+ length 2 ne {
+ dup /PageSize 4 index /PageSize get put
+ } if
+ } if
+
+ % Select input and output media.
+ % Stack: mark <orig> <request> <merged>
+DEBUG { (Selecting.) = pstack flush } if
+
+ 0 dict % <failed>
+ 1 index /InputAttributes .knownget
+ { 2 index /Policies get
+ .inputattrkeys (%MediaSource) cvn .selectmedia
+ } if
+ 1 index /OutputAttributes .knownget
+ { 2 index /Policies get
+ .outputattrkeys (%MediaDestination) cvn .selectmedia
+ } if
+ 3 -1 roll 4 1 roll % temporarily swap orig & request
+ .applypolicies
+ 3 -1 roll 4 1 roll % swap back
+
+ % Construct the new device, and attempt to set its attributes.
+ % Stack: mark <orig> <request> <merged> <failed>
+DEBUG { (Constructing.) = pstack flush } if
+
+ currentdevice .devicename 2 index /OutputDevice get eq
+ { currentdevice }
+ { 1 index /OutputDevice get finddevice }
+ ifelse
+ %**************** We should copy the device here,
+ %**************** but since we can't close the old device,
+ %**************** we don't. This is WRONG.
+ %****************copydevice
+ 2 index /Policies get
+ .trysetparams
+ dup type /booleantype ne
+ { % The request failed.
+ % Stack: ... <orig> <request> <merged> <failed> <device>
+ % <Policies> true mark <name> <errorname> ...
+DEBUG { (Recovering.) = pstack flush } if
+ counttomark 4 add index
+ counttomark 2 idiv { dup 4 -2 roll put } repeat
+ pop pop pop
+ % Stack: mark ... <orig> <request> <merged> <failed> <device>
+ % <Policies>
+ 6 2 roll 3 -1 roll 4 1 roll
+ .applypolicies
+ 3 -1 roll 4 1 roll 6 -2 roll
+ .trysetparams % shouldn't fail!
+ dup type /booleantype ne
+ { 2 { counttomark 1 add 1 roll cleartomark } repeat
+ /setpagedevice load exch signalerror
+ }
+ if
+ }
+ if
+
+ % The attempt succeeded. Install the new device.
+ % Stack: mark ... <merged> <failed> <device> <eraseflag>
+DEBUG { (Installing.) = pstack flush } if
+
+ pop 2 .endpage
+ { 1 true .outputpage
+ (>>setpagedevice, press <return> to continue<<\n) .confirm
+ }
+ if
+ % .setdevice clears the current page device!
+ .currentpagedevice pop exch
+ .setdevice pop
+ .setpagedevice
+
+ % Merge the request into the current page device,
+ % unless we're changing the OutputDevice.
+ % Stack: mark ... <merged> <failed>
+ exch currentpagedevice dup length 2 index length add dict
+ % Stack: mark ... <failed> <merged> <current> <newdict>
+ 2 index /OutputDevice .knownget {
+ 2 index /OutputDevice .knownget not { null } if eq
+ } {
+ true
+ } ifelse {
+ % Same OutputDevice, merge the dictionaries.
+ .copydict
+ } {
+ % Different OutputDevice, discard the old dictionary.
+ exch pop
+ } ifelse .copydict
+ % Initialize the default matrix, taking media matching
+ % into account.
+ .computemediasize pop initmatrix concat
+ dup /PageOffset .knownget
+ { % Translate by the given number of 1/72" units in device X/Y.
+ dup 0 get exch 1 get
+ 2 index /HWResolution get dup 1 get exch 0 get
+ 4 -1 roll mul 72 div 3 1 roll mul 72 div
+ idtransform translate
+ }
+ if
+ % We must install the new page device dictionary
+ % before calling the Install procedure.
+ dup .setpagedevice
+ .setdefaultscreen % Set the default screen before calling Install.
+ dup /Install .knownget {
+ { .execinstall } stopped { .postinstall stop } { .postinstall } ifelse
+ } {
+ .postinstall
+ } ifelse
+} odef
+
+% We break out the code after calling the Install procedure into a
+% separate procedure, since it is executed even if Install causes an error.
+% By making .execinstall a separate operator procedure, we get the stacks
+% restored if it fails.
+
+/.execinstall { % <proc> .execinstall -
+ % Because the interpreter optimizes tail calls, we can't just let
+ % the body of this procedure be 'exec', because that would lose
+ % the stack protection that is the whole reason for having the
+ % procedure in the first place. We hack this by adding a couple
+ % of extra tokens to ensure that the operator procedure is still
+ % on the stack during the exec.
+ exec
+ 0 pop % See above.
+} odef
+/.postinstall { % mark ... <failed> <merged> .postinstall -
+ matrix currentmatrix .setdefaultmatrix
+ % Erase and initialize the page.
+ erasepage initgraphics
+ .beginpage
+
+ % Clean up, calling PolicyReport if needed.
+ % Stack: mark ... <failed> <merged>
+DEBUG { (Finishing.) = pstack flush } if
+
+ exch dup length 0 ne
+ { 1 index /Policies get /PolicyReport get
+ counttomark 1 add 2 roll cleartomark
+ exec
+ }
+ { cleartomark
+ }
+ ifelse pop
+
+} odef
+
+end % level2dict
+.setlanguagelevel
diff --git a/Master/xemtex/gslib/gs_statd.ps b/Master/xemtex/gslib/gs_statd.ps
new file mode 100644
index 00000000000..824f480d239
--- /dev/null
+++ b/Master/xemtex/gslib/gs_statd.ps
@@ -0,0 +1,366 @@
+% Copyright (C) 1989, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_statd.ps,v 1.5.2.2.2.1 2003/04/12 14:02:38 giles Exp $
+% This file provides statusdict, serverdict, and assorted LaserWriter
+% operators, mostly for the benefit of poorly designed PostScript programs
+% that 'know' they are running on a LaserWriter.
+
+systemdict begin
+ % We make statusdict a little larger for Level 2 stuff.
+ % Note that it must be allocated in local VM.
+ .currentglobal false .setglobal
+ /statusdict 89 dict .forcedef % statusdict is local, sys'dict global
+ % To support the Level 2 job control features,
+ % serverdict must also be in local VM.
+ /serverdict 10 dict .forcedef % serverdict is local, sys'dict global
+ .setglobal
+end
+
+% Define various paper formats. The Adobe documentation defines only these:
+% 11x17, a3, a4, a4small, b5, ledger, legal, letter, lettersmall, note.
+% These procedures are also accessed as data structures during initialization,
+% so the page dimensions must be the first two elements of the procedure.
+
+/.setpagesize { /statusdict .systemvar begin .setpagesize end } bind def
+userdict begin
+ % Page sizes defined by Adobe documentation
+ /11x17 {792 1224 //.setpagesize exec} bind def % 11x17 portrait
+ /a3 {842 1191 //.setpagesize exec} bind def
+ /a4 {595 842 //.setpagesize exec} bind def
+% a4small should be a4 with an ImagingBBox of [25 25 570 817].
+ /a4small /a4 load def
+% b5 see below.
+ /ledger {1224 792 //.setpagesize exec} bind def % 11x17 landscape
+ /legal {612 1008 //.setpagesize exec} bind def
+ /letter {612 792 //.setpagesize exec} bind def
+% lettersmall should be letter with an ImagingBBox of [25 25 587 767].
+ /lettersmall /letter load def
+% note should be letter (or some other size) with the ImagingBBox
+% shrunk by 25 units on all 4 sides.
+ /note /letter load def
+ % End of Adobe-defined page sizes
+STRICT { (%END SIZES) .skipeof } if
+ % Other page sizes
+ % ISO standard paper sizes
+ /a0 {2384 3370 //.setpagesize exec} bind def
+ /a1 {1684 2384 //.setpagesize exec} bind def
+ /a2 {1191 1684 //.setpagesize exec} bind def
+% /a3 {842 1191 //.setpagesize exec} bind def % defined by Adobe
+% /a4 {595 842 //.setpagesize exec} bind def % defined by Adobe
+ /a5 {420 595 //.setpagesize exec} bind def
+ /a6 {297 420 //.setpagesize exec} bind def
+ /a7 {210 297 //.setpagesize exec} bind def
+ /a8 {148 210 //.setpagesize exec} bind def
+ /a9 {105 148 //.setpagesize exec} bind def
+ /a10 {73 105 //.setpagesize exec} bind def
+% ISO and JIS B sizes are different....
+ /isob0 {2835 4008 //.setpagesize exec} bind def
+ /b0 /isob0 load def
+ /isob1 {2004 2835 //.setpagesize exec} bind def
+ /b1 /isob1 load def
+ /isob2 {1417 2004 //.setpagesize exec} bind def
+ /b2 /isob2 load def
+ /isob3 {1001 1417 //.setpagesize exec} bind def
+ /b3 /isob3 load def
+ /isob4 {709 1001 //.setpagesize exec} bind def
+ /b4 /isob4 load def
+ /isob5 {499 709 //.setpagesize exec} bind def
+ /b5 /isob5 load def
+ /isob6 {354 499 //.setpagesize exec} bind def
+ /b6 /isob6 load def
+ /jisb0 {2920 4127 //.setpagesize exec} bind def
+ /jisb1 {2064 2920 //.setpagesize exec} bind def
+ /jisb2 {1460 2064 //.setpagesize exec} bind def
+ /jisb3 {1032 1460 //.setpagesize exec} bind def
+ /jisb4 {729 1032 //.setpagesize exec} bind def
+ /jisb5 {516 729 //.setpagesize exec} bind def
+ /jisb6 {363 516 //.setpagesize exec} bind def
+ /c0 {2599 3677 //.setpagesize exec} bind def
+ /c1 {1837 2599 //.setpagesize exec} bind def
+ /c2 {1298 1837 //.setpagesize exec} bind def
+ /c3 {918 1298 //.setpagesize exec} bind def
+ /c4 {649 918 //.setpagesize exec} bind def
+ /c5 {459 649 //.setpagesize exec} bind def
+ /c6 {323 459 //.setpagesize exec} bind def
+ % U.S. CAD standard paper sizes
+ /archE {2592 3456 //.setpagesize exec} bind def
+ /archD {1728 2592 //.setpagesize exec} bind def
+ /archC {1296 1728 //.setpagesize exec} bind def
+ /archB {864 1296 //.setpagesize exec} bind def
+ /archA {648 864 //.setpagesize exec} bind def
+ % Other paper sizes
+ /flsa {612 936 //.setpagesize exec} bind def % U.S. foolscap
+ /flse {612 936 //.setpagesize exec} bind def % European foolscap
+ /halfletter {396 612 //.setpagesize exec} bind def
+% /tabloid {792 1224 //.setpagesize exec} bind def % 11x17 portrait
+% /csheet {1224 1584 //.setpagesize exec} bind def % ANSI C 17x22
+% /dsheet {1584 2448 //.setpagesize exec} bind def % ANSI D 22x34
+% /esheet {2448 3168 //.setpagesize exec} bind def % ANSI E 34x44
+%END SIZES
+end
+currentdict /.setpagesize .undef
+
+statusdict begin
+
+% Define the pagetype values for the known page formats.
+% The values for all but letter and note are arbitrary.
+/.pagetypenames
+ { /letter /note %do not change this line, needed by 'setpagetype'
+ /legal /lettersmall
+ /11x17 /ledger
+ /a4small /a3 /a4
+STRICT { (%END SIZES) .skipeof } if
+ /a0 /a1 /a2 /a5 /a6 /a7 /a8 /a9 /a10
+ /archA /archB /archC /archD /archE
+ /b0 /b1 /b2 /b3 /b4 /b5 /b6
+ /c0 /c1 /c2 /c3 /c4 /c5 /c6
+ /flsa /flse /halfletter
+ /isob0 /isob1 /isob2 /isob3 /isob4 /isob5 /isob6
+ /jisb0 /jisb1 /jisb2 /jisb3 /jisb4 /jisb5 /jisb6
+%END SIZES
+ } cvlit readonly def
+
+%%%%%% The following items were suggested by a user as useful.
+
+% Permanent definitions
+
+/ramsize 4194304 def
+/hardwareiomode 0 def
+ /sethardwareiomode {pop} bind def
+/softwareiomode 0 def
+ /setsoftwareiomode {pop} bind def
+/dosysstart false def
+ /setdosysstart {pop} bind def
+/allowjobreset true def
+ /setallowjobreset {pop} bind def
+/defaultpaperfamily 0 def
+ /setdefaultpaperfamily {pop} bind def
+/defaultpapertray 0 def
+ /setdefaultpapertray {pop} bind def
+/defaulttrayswitch false def
+ /setdefaulttrayswitch {pop} bind def
+
+% Tray and format selection
+
+ /11x17tray {/11x17 .uservar exec} bind def
+ /a3tray {/a3 .uservar exec} bind def
+ /a4tray {/a4 .uservar exec} bind def
+ /a5tray {/a5 .uservar exec} bind def
+ /a6tray {/a6 .uservar exec} bind def
+ /b4tray {/b4 .uservar exec} bind def
+ /b5tray {/b5 .uservar exec} bind def
+ /flsatray {/flsa .uservar exec} bind def
+ /flsetray {/flse .uservar exec} bind def
+ /halflettertray {/halfletter .uservar exec} bind def
+ /ledgertray {/ledger .uservar exec} bind def
+ /legaltray {/legal .uservar exec} bind def
+ /lettertray {/letter .uservar exec} bind def
+
+% Per-job parameters
+
+/paperfamily 0 def % 0 is US, 1 is European
+/papertray 1 def
+ /setpapertray {statusdict exch /papertray exch put} bind def
+/trayswitch false def % paperout feeds from another tray
+% We don't implement the (undocumented by Adobe) papersize 'operator',
+% because it's very awkward to make it interact properly with all the
+% different ways of setting the paper size.
+%/papersize {/letter true} bind def % <name of paper size>, <short-edge-first-p>
+/appletalktype (LaserWriter) def
+
+%%%%%% The following items are defined in the PostScript Language
+%%%%%% Reference Manual, First Edition, and subsequent 'compatibility'
+%%%%%% documentation from Adobe.
+
+ /checkpassword {statusdict begin .password eq end} bind def
+ /defaulttimeouts {statusdict begin .timeouts aload pop end} bind def
+ /diskonline {
+ false (%disk*%) { pop not exit } 100 string /IODevice resourceforall
+ } bind def
+%/dostartpage
+ /eescratch {pop 0} bind def
+ /idlefonts {statusdict begin mark .idlefonts aload pop end} bind def
+ /jobname () def
+%/jobtimeout
+ /manualfeed false def
+ /manualfeedtimeout 60 def
+ /margins {statusdict begin .topmargin .leftmargin end} bind def
+ /pagecount {4711} bind def
+ /pagestackorder {false} bind def
+ /pagetype 0 def
+ /prefeed false def
+ /printererror {pop pop} bind def
+ /printername {statusdict /.printername get exch copy} bind def
+ /processcolors /processcolors load def % defined in systemdict
+ /product product def % product is defined in systemdict
+ /revision revision def % revision is defined in systemdict
+ /sccbatch {pop 9600 0} bind def
+ /sccinteractive {pop 9600 0} bind def
+ /setdefaulttimeouts {statusdict begin .timeouts astore pop end} bind def
+ /setdostartpage {statusdict exch /dostartpage exch put} bind def
+ /setduplexmode {mark /Duplex 3 -1 roll currentdevice putdeviceprops} bind def
+ /seteescratch {pop pop} bind def
+ /setidlefonts {] statusdict exch /.idlefonts exch put} bind def
+ /setjobtimeout {statusdict exch /jobtimeout exch put} bind def
+ /setmargins
+ { statusdict begin
+ /.leftmargin exch def /.topmargin exch def
+ end
+ } bind def
+
+% The following compatibility operators are only documented by Adobe in a
+% supplement to the Red Book.
+%
+% - pagemargin <offset>
+% - pageparams <width> <height> <offset> <orientation>
+% <width> <height> <orientation> setpage -
+% <offset> setpagemargin -
+% <width> <height> <offset> <orientation> setpageparams -
+%
+% width and height are in default units (and if orientation is odd, are
+% exchanged!). offset is the x margin, also in default units.
+% Unfortunately, because orientation is relative to the device paper feed,
+% it does not have a consistent meaning in terms of image orientation.
+% We follow the convention that ORIENT1 determines the orientation value
+% that means portait: false means 0, true means 1.
+
+ /pagemargin { 0 } bind def
+ /pageparams
+ { currentdevice 1 dict dup /.MediaSize dup put .getdeviceparams
+ exch pop exch pop aload pop 0 ORIENT1 { 1 } { 0 } ifelse
+ } bind def
+ /setpage
+ { ORIENT1 { 1 } { 0 } ifelse ne {exch} if
+ statusdict /.setpagesize get exec
+ } bind def
+ /setpagemargin {pop} bind def % can't do better without setpagedevice
+ /setpageparams
+ { exch pop ORIENT1 { 1 } { 0 } ifelse ne {exch} if
+ statusdict /.setpagesize get exec
+ } bind def
+ /setpagetype
+ { statusdict begin
+ % The Adobe documentation only defines setpagetype
+ % (a Level 1 operator) as accepting the values 0 and 1,
+ % so we do too.
+ dup .pagetypenames 0 2 getinterval exch get //systemdict exch get exec
+ /pagetype exch def
+ end
+ } bind def
+ /setpassword
+ {exch checkpassword
+ {statusdict exch /.password exch put true}
+ {pop false}
+ ifelse} bind def
+ /setprintername
+ {dup length string copy statusdict exch /.printername exch put} bind def
+
+% setresolution is not documented by Adobe, but some applications
+% use it anyway, without testing whether or not it is present.
+%
+% <pixels_per_inch> setresolution -
+%
+% sets the resolution of the device.
+
+ /setresolution
+ { mark /HWResolution [ 4 -1 roll dup ] currentdevice putdeviceprops pop
+ initmatrix erasepage
+ } bind def
+ /setsccbatch {pop pop pop} bind def
+ /setsccinteractive {pop pop pop} bind def
+ /settumble {pop} bind def
+ /waittimeout 300 def
+
+%%%%%% End of documented items.
+
+/.setpagesize
+ { mark /HWSize [
+ 4 index 4 index matrix defaultmatrix dtransform
+ abs ceiling cvi exch abs ceiling cvi exch
+ ] currentdevice putdeviceprops pop pop pop
+ initmatrix initclip erasepage
+ } bind def
+/.password 0 def
+/.timeouts [0 60 30] def
+true setdostartpage
+mark setidlefonts
+0 setjobtimeout
+0 0 setmargins
+product setprintername
+
+end % statusdict
+
+%%%%%% The following documented compatibility "operators" are in systemdict,
+%%%%%% not in statusdict.
+
+systemdict begin
+.currentglobal true .setglobal
+
+/devforall { % <pattern> <proc> <scratch> devforall -
+ exch {
+ 1 index currentdevparams
+ /Type .knownget { /FileSystem eq } { false } ifelse
+ { exec } { pop pop } ifelse
+ } /exec load 3 packedarray cvx exch
+ (*) 3 1 roll /IODevice resourceforall
+} odef
+
+/devstatus { % <(%disk*%)> devstatus <searchable> <writable>
+ % <hasNames> <mounted> <removable> <searchOrder>
+ % <freePages> <size> true
+ % <string> devstatus false
+ dup length 5 ge {
+ dup 0 5 getinterval (%disk) eq {
+ dup /IODevice resourcestatus {
+ pop pop dup currentdevparams
+ dup /Searchable get
+ exch dup /Writeable get
+ exch dup /HasNames get
+ exch dup /Mounted get
+ exch dup /Removable get
+ exch dup /SearchOrder get
+ exch dup /Free get
+ exch /LogicalSize get
+ 9 -1 roll pop true
+ } {
+ pop false
+ } ifelse
+ } {
+ pop false
+ } ifelse
+ } {
+ pop false
+ } ifelse
+} odef
+
+.setglobal end % systemdict
+
+% The following contents of serverdict are a complete guess,
+% based on some observed LaserWriter boilerplate.
+
+serverdict begin
+
+ /execjob { } bind def
+% The Red Book implies that something like the following is
+% an appropriate definition of exitserver.
+ /exitserver { clear stop } bind def
+% However, this interacts badly with our standard error handler,
+% so we override it with the following less appropriate definition.
+ /exitserver { 0 ne { clear cleardictstack } if } bind def
+ /setrealdevice { } bind def
+
+end % serverdict
diff --git a/Master/xemtex/gslib/gs_std_e.ps b/Master/xemtex/gslib/gs_std_e.ps
new file mode 100644
index 00000000000..6dec0db3a65
--- /dev/null
+++ b/Master/xemtex/gslib/gs_std_e.ps
@@ -0,0 +1,74 @@
+% Copyright (C) 1993, 1994 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_std_e.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Define the standard encoding vector.
+/StandardEncoding
+% \00x
+ /.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
+% \04x
+ /space /exclam /quotedbl /numbersign
+ /dollar /percent /ampersand /quoteright
+ /parenleft /parenright /asterisk /plus
+ /comma /hyphen /period /slash
+ /zero /one /two /three
+ /four /five /six /seven
+ /eight /nine /colon /semicolon
+ /less /equal /greater /question
+% \10x
+ /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
+% \14x
+ /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
+% \20x
+ /.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
+% \24x
+ /.notdef /exclamdown /cent /sterling
+ /fraction /yen /florin /section
+ /currency /quotesingle /quotedblleft /guillemotleft
+ /guilsinglleft /guilsinglright /fi /fl
+ /.notdef /endash /dagger /daggerdbl
+ /periodcentered /.notdef /paragraph /bullet
+ /quotesinglbase /quotedblbase /quotedblright /guillemotright
+ /ellipsis /perthousand /.notdef /questiondown
+% \30x
+ /.notdef /grave /acute /circumflex /tilde /macron /breve /dotaccent
+ /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron
+ /emdash /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+% \34x
+ /.notdef /AE /.notdef /ordfeminine /.notdef /.notdef /.notdef /.notdef
+ /Lslash /Oslash /OE /ordmasculine /.notdef /.notdef /.notdef /.notdef
+ /.notdef /ae /.notdef /.notdef /.notdef /dotlessi /.notdef /.notdef
+ /lslash /oslash /oe /germandbls /.notdef /.notdef /.notdef /.notdef
+% Make an array on large systems, a packed array on small ones.
+256
+vmstatus exch pop exch pop
+100000 ge { array astore readonly } { packedarray } ifelse
+def
+0 StandardEncoding .registerencoding
+/StandardEncoding StandardEncoding .defineencoding
diff --git a/Master/xemtex/gslib/gs_sym_e.ps b/Master/xemtex/gslib/gs_sym_e.ps
new file mode 100644
index 00000000000..75581831f5a
--- /dev/null
+++ b/Master/xemtex/gslib/gs_sym_e.ps
@@ -0,0 +1,84 @@
+% Copyright (C) 1991, 1994, 1998, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_sym_e.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Define the Symbol encoding vector.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/SymbolEncoding
+% \000
+ StandardEncoding 0 32 getinterval aload pop % /.notdef
+% \040
+ /space /exclam /universal /numbersign
+ /existential /percent /ampersand /suchthat
+ /parenleft /parenright /asteriskmath /plus
+ /comma /minus /period /slash
+ /zero /one /two /three
+ /four /five /six /seven
+ /eight /nine /colon /semicolon
+ /less /equal /greater /question
+% \100
+ /congruent /Alpha /Beta /Chi
+ /Delta /Epsilon /Phi /Gamma
+ /Eta /Iota /theta1 /Kappa
+ /Lambda /Mu /Nu /Omicron
+ /Pi /Theta /Rho /Sigma
+ /Tau /Upsilon /sigma1 /Omega
+ /Xi /Psi /Zeta /bracketleft
+ /therefore /bracketright /perpendicular /underscore
+% \140
+ /radicalex /alpha /beta /chi
+ /delta /epsilon /phi /gamma
+ /eta /iota /phi1 /kappa
+ /lambda /mu /nu /omicron
+ /pi /theta /rho /sigma
+ /tau /upsilon /omega1 /omega
+ /xi /psi /zeta /braceleft
+ /bar /braceright /similar /.notdef
+% \200
+ StandardEncoding 0 32 getinterval aload pop % /.notdef
+% \240
+ /Euro /Upsilon1 /minute /lessequal
+ /fraction /infinity /florin /club
+ /diamond /heart /spade /arrowboth
+ /arrowleft /arrowup /arrowright /arrowdown
+ /degree /plusminus /second /greaterequal
+ /multiply /proportional /partialdiff /bullet
+ /divide /notequal /equivalence /approxequal
+ /ellipsis /arrowvertex /arrowhorizex /carriagereturn
+% \300
+ /aleph /Ifraktur /Rfraktur /weierstrass
+ /circlemultiply /circleplus /emptyset /intersection
+ /union /propersuperset /reflexsuperset /notsubset
+ /propersubset /reflexsubset /element /notelement
+ /angle /gradient /registerserif /copyrightserif
+ /trademarkserif /product /radical /dotmath
+ /logicalnot /logicaland /logicalor /arrowdblboth
+ /arrowdblleft /arrowdblup /arrowdblright /arrowdbldown
+% \340
+ /lozenge /angleleft /registersans /copyrightsans
+ /trademarksans /summation /parenlefttp /parenleftex
+ /parenleftbt /bracketlefttp /bracketleftex /bracketleftbt
+ /bracelefttp /braceleftmid /braceleftbt /braceex
+ /.notdef /angleright /integral /integraltp
+ /integralex /integralbt /parenrighttp /parenrightex
+ /parenrightbt /bracketrighttp /bracketrightex /bracketrightbt
+ /bracerighttp /bracerightmid /bracerightbt /.notdef
+256 packedarray .defineencoding
+2 SymbolEncoding .registerencoding
+exec
diff --git a/Master/xemtex/gslib/gs_t.xbm b/Master/xemtex/gslib/gs_t.xbm
new file mode 100644
index 00000000000..e35c2b7acb8
--- /dev/null
+++ b/Master/xemtex/gslib/gs_t.xbm
@@ -0,0 +1,8 @@
+#define gs_t.xbm_width 16
+#define gs_t.xbm_height 16
+#define gs_t.xbm_x_hot 0
+#define gs_t.xbm_y_hot 0
+static unsigned char gs.t.bm_bits[] = {
+ 0x00, 0x10, 0x00, 0x20, 0x00, 0x68, 0xf0, 0x67, 0xfc, 0x61, 0x7e, 0x70,
+ 0x1f, 0xf9, 0x4f, 0xfd, 0x4f, 0xfc, 0x0f, 0xf8, 0x1f, 0xf3, 0x1e, 0xe3,
+ 0x3e, 0x60, 0x7c, 0x30, 0x70, 0x0c, 0x1e, 0x00};
diff --git a/Master/xemtex/gslib/gs_t.xpm b/Master/xemtex/gslib/gs_t.xpm
new file mode 100644
index 00000000000..8b587ecd69d
--- /dev/null
+++ b/Master/xemtex/gslib/gs_t.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * gs_t_xpm[] = {
+/* width height ncolors cpp [x_hot y_hot] */
+"16 16 6 1 0 0",
+/* colors */
+" s none m none c none",
+". s iconColor1 m black c black",
+"X s iconColor2 m white c white",
+"o c #808080808080",
+"O c #C0C0C0C0C0C0",
+"+ c #00000000FFFF",
+/* pixels */
+" . ",
+" X. ",
+" .X.o ",
+" o......XX.. ",
+" .......OXXX.. ",
+" ......XXXXXo.. ",
+"o....XXX+XX.....",
+"....XX+X+Xo.....",
+"....XX+XXXo.....",
+"....XXXXXXX.....",
+"o...oXXX++XX....",
+" ....XXX++XXX..o",
+" ....oXXXXXXX.. ",
+" .....XXXXX.. ",
+" ...XXXoo ",
+" o...XXXXXXX "};
diff --git a/Master/xemtex/gslib/gs_t_m.xbm b/Master/xemtex/gslib/gs_t_m.xbm
new file mode 100644
index 00000000000..3cfe6237bc5
--- /dev/null
+++ b/Master/xemtex/gslib/gs_t_m.xbm
@@ -0,0 +1,8 @@
+#define gs_t_m.xbm_width 16
+#define gs_t_m.xbm_height 16
+#define gs_t_m.xbm_x_hot 0
+#define gs_t_m.xbm_y_hot 0
+static unsigned char gs.t_m.bm_bits[] = {
+ 0x00, 0x10, 0x00, 0x30, 0x00, 0x78, 0xf0, 0x7f, 0xfc, 0x7f, 0xfe, 0x7f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
+ 0xfe, 0x7f, 0xfc, 0x3f, 0xf0, 0x0f, 0xfe, 0x0f};
diff --git a/Master/xemtex/gslib/gs_trap.ps b/Master/xemtex/gslib/gs_trap.ps
new file mode 100644
index 00000000000..a3d37d3bd3f
--- /dev/null
+++ b/Master/xemtex/gslib/gs_trap.ps
@@ -0,0 +1,104 @@
+% Copyright (C) 1999, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_trap.ps,v 1.3.6.2.2.1 2003/04/12 14:02:38 giles Exp $
+% PostScript LanguageLevel 3 in-RIP trapping support.
+
+ll3dict begin
+
+% We need LanguageLevel 2 or higher in order to have setuserparams and
+% defineresource.
+languagelevel dup 2 .max .setlanguagelevel
+
+% ------ Trapping ------ %
+
+% The PostScript-level trapping parameters are maintained in userdict,
+% and explicitly reinstalled upon restore.
+
+/Trapping mark
+
+/settrapparams dup { % <paramdict> settrapparams -
+ /.trapparams .uservar dup length dict .copydict
+ dup 2 index {
+ % Stack: paramdict olddict olddict key value
+ 2 index 2 index known { put dup } { pop pop } ifelse
+ } forall pop
+ dup .settrapparams % Let the operator check parameter validity.
+ .userdict /.trapparams 3 -1 roll put pop
+} bind .makeoperator
+
+/.copyparams { % <obj> .copyparams <obj'>
+ dup type /dicttype eq {
+ dup length dict .copydict
+ dup {
+ .copyparams 3 copy put pop pop
+ } forall
+ } {
+ dup type /arraytype eq {
+ [ exch { .copyparams } forall ]
+ } if
+ } ifelse
+} odef
+
+/currenttrapparams dup { % - currenttrapparams <paramdict>
+ /.trapparams .uservar .copyparams
+} bind .makeoperator
+
+/settrapzone dup { % - settrapzone -
+ % ****** DUMMY ******
+ newpath
+} bind .makeoperator
+
+% Define initial (dummy) trapping parameters.
+% These values are mostly complete guesses.
+userdict /.trapparams mark
+ /BlackColorLimit 1.0
+ /BlackDensityLimit 1.0
+ /BlackWidth 1.0
+ /ColorantZoneDetails 0 dict
+ /Enabled true
+ /HalftoneName null
+ /ImageInternalTrapping false
+ /ImagemaskTrapping true
+ /ImageResolution 1
+ /ImageToObjectTrapping true
+ /ImageTrapPlacement /Center
+ /SlidingTrapLimit 1.0
+ /StepLimit 1.0
+ /TrapColorScaling 0.0
+ /TrapSetName null
+ /TrapWidth 1.0
+.dicttomark readonly put
+
+.dicttomark /ProcSet defineresource pop
+
+% Define the InkParams and TrapParams resource categories.
+{ /InkParams /TrapParams } {
+ /Generic /Category findresource dup maxlength 3 add dict .copydict begin
+ /InstanceType /dicttype def
+ currentdict end /Category defineresource pop
+} forall
+
+% Define the TrappingType resource category.
+/Generic /Category findresource dup maxlength 3 add dict .copydict begin
+ /InstanceType /integertype def
+/TrappingType currentdict end /Category defineresource pop
+
+{1001} { dup /TrappingType defineresource pop } forall
+
+.setlanguagelevel
+
+end % ll3dict
diff --git a/Master/xemtex/gslib/gs_ttf.ps b/Master/xemtex/gslib/gs_ttf.ps
new file mode 100644
index 00000000000..3d3a6ba1f1b
--- /dev/null
+++ b/Master/xemtex/gslib/gs_ttf.ps
@@ -0,0 +1,1789 @@
+% Copyright (C) 1996, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_ttf.ps,v 1.9.2.4.2.1 2003/04/12 14:02:38 giles Exp $
+% Support code for direct use of TrueType fonts.
+% (Not needed for Type 42 fonts.)
+
+% Note that if you want to use this file without including the ttfont.dev
+% option when you built Ghostscript, you will need to load the following
+% files before this one:
+% lib/gs_mgl_e.ps
+% lib/gs_mro_e.ps
+% lib/gs_wan_e.ps
+
+% Thanks to B. Jackowski and GUST (the Polish TeX Users' Group) for
+% the glyf-splitting code.
+
+[
+ /TTCMAP_DEBUG
+ /TTCMAP2_DEBUG
+] {dup where {pop pop} { currentdict exch false def pop } ifelse} forall
+
+
+% ---------------- Font loading machinery ---------------- %
+
+% Augment the FONTPATH machinery so it recognizes TrueType fonts.
+
+/.scanfontheaders where {
+ pop /.scanfontheaders [
+ .scanfontheaders aload pop (\000\001\000\000*) (true*)
+ ] def
+} if
+
+% <file> <key> .findfontvalue <value> true
+% <file> <key> .findfontvalue false
+% Closes the file in either case.
+/.findnonttfontvalue /.findfontvalue load def
+/.findfontvalue {
+ 1 index read pop 2 index 1 index unread
+ dup 0 eq exch (t) 0 get eq or {
+ % If this is a font at all, it's a TrueType font.
+ dup /FontType eq {
+ pop closefile 42 true
+ } {
+ dup /FontName eq { pop .findttfontname } { pop closefile false } ifelse
+ } ifelse
+ } {
+ % Not a TrueType font.
+ .findnonttfontvalue
+ } ifelse
+} bind def
+
+% <file> .findttfontname <fname> true
+% <file> .findttfontname false
+% Closes the file in either case.
+/.findttfontname {
+ .loadttfonttables
+ tabdict /name .knownget {
+ dup 8 getu32 f exch setfileposition
+ 12 getu32 string f exch readstring pop
+ 6 findname
+ } {
+ false
+ } ifelse
+ f closefile end end
+} bind def
+
+% Load a font file that might be a TrueType font.
+
+% <file> .loadfontfile -
+/.loadnonttfontfile /.loadfontfile load def
+/.loadfontfile {
+ dup read pop 2 copy unread 0 eq {
+ % If this is a font at all, it's a TrueType font.
+ .loadttfont pop
+ } {
+ % Not a TrueType font.
+ .loadnonttfontfile
+ } ifelse
+} bind def
+
+% ---------------- Automatic Type 42 generation ---------------- %
+
+% Load a TrueType font from a file as a Type 42 PostScript font.
+% The thing that makes this really messy is the handling of encodings.
+% There are 2 interacting tables that affect the encoding:
+% 'cmap' provides multiple maps from character codes to glyph indices
+% 'post' maps glyph indices to glyph names (if present)
+% What we need to get out of this is:
+% Encoding mapping character codes to glyph names
+% (the composition of cmap and post)
+% CharStrings mapping glyph names to glyph indices
+% (the inverse of post)
+% If the post table is missing, we have to take a guess based on the cmap
+% table.
+
+/.loadttfontdict 50 dict dup begin
+
+/orgXUID AladdinEnterprisesXUID def
+/maxstring 32000 def % half the maximum length of a PostScript string,
+ % must be a multiple of 4 (for hmtx / loca / vmtx)
+
+% Define the Macintosh standard mapping from characters to glyph indices.
+/MacRomanEncoding dup .findencoding def
+/MacGlyphEncoding dup .findencoding def
+
+% Invert the MacRomanEncoding.
+/.romanmacdict 300 dict
+0 1 MacRomanEncoding length 1 sub {
+ MacRomanEncoding 1 index get
+ % Stack: dict index charname
+ dup /.notdef ne {
+ exch 2 index 2 index .knownget {
+ dup type /arraytype eq {
+ [ exch aload pop counttomark 2 add -1 roll ]
+ } {
+ exch 2 array astore
+ } ifelse
+ } if 2 index 3 1 roll put
+ } {
+ pop pop
+ } ifelse
+} for def
+
+% Define remapping for misnamed glyphs in TrueType 'post' tables.
+% There are probably a lot more than this!
+/postremap mark
+ /Cdot /Cdotaccent
+ /Edot /Edotaccent
+ /Eoverdot /Edotaccent
+ /Gdot /Gdotaccent
+ /Ldot /Ldotaccent
+ /Zdot /Zdotaccent
+ /cdot /cdotaccent
+ /edot /edotaccent
+ /eoverdot /edotaccent
+ /gdot /gdotaccent
+ /ldot /ldotaccent
+ /zdot /zdotaccent
+.dicttomark readonly def
+
+% ---- Utilities ---- %
+
+% Define a serial number for creating unique XUIDs for TrueType fonts.
+% We used to use the checkSumAdjustment value from the font, but this is
+% not reliable, since some fonts don't set it correctly.
+% Note that we must do this in a string to make it immune to save/restore.
+/xuidstring <80000000> def
+/curxuid { % - curxuid <int>
+ 0 xuidstring { exch 8 bitshift exch add } forall
+} bind def
+/nextxuid { % - nextxuid -
+ 3 -1 0 {
+ xuidstring 1 index 2 copy get dup 255 ne {
+ 1 add put pop exit
+ } if pop 0 put pop
+ } for
+} bind def
+
+% <string> <index> getu16 <integer>
+/getu16 {
+ 2 copy get 8 bitshift 3 1 roll 1 add get add
+} bind def
+
+% <string> <index> gets16 <integer>
+/gets16 {
+ getu16 16#8000 xor 16#8000 sub
+} bind def
+
+% <string> <index> getu32 <integer>
+/getu32 {
+ 2 copy getu16 16 bitshift 3 1 roll 2 add getu16 add
+} bind def
+
+% <string> <index> gets32 <integer>
+/gets32 {
+ 2 copy gets16 16 bitshift 3 1 roll 2 add getu16 add
+} bind def
+
+% <string> <index> <integer> putu16 -
+/putu16 {
+ 3 copy -8 bitshift put
+ exch 1 add exch 16#ff and put
+} bind def
+
+% <string> <index> <integer> putu32 -
+/putu32 {
+ 3 copy -16 bitshift putu16
+ exch 2 add exch 16#ffff and putu16
+} bind def
+
+% <string> .strtoint <integer>
+/.strtoint {
+ 0 exch { exch 8 bitshift add } forall
+} bind def
+
+% <nametable> <nameid> findname <string> true
+% <nametable> <nameid> findname false
+/findname {
+ DEBUG { (findname: ) print dup =only } if
+ false 3 1 roll 0 1 3 index 2 getu16 1 sub {
+ % Stack: false table id index
+ 12 mul 6 add 2 index exch 12 getinterval
+ dup 6 getu16 2 index eq {
+ % We found the name we want.
+ exch pop
+ % Stack: false table record
+ dup 10 getu16 2 index 4 getu16 add
+ 1 index 8 getu16 4 -1 roll 3 1 roll getinterval exch
+ % Stack: false string record
+ % Check for 8- vs. 16-bit characters.
+ is2byte { string2to1 } if true null 4 -1 roll exit
+ } if pop
+ } for pop pop
+ DEBUG {
+ dup { ( = ) print 1 index == } { ( not found) = } ifelse
+ } if
+} bind def
+
+% <namerecord> is2byte <bool>
+/is2byte {
+ dup 0 getu16 {
+ { pop true } % Apple Unicode
+ { pop false } % Macintosh Script manager
+ { 1 getu16 1 eq } % ISO
+ { 1 getu16 1 eq } % Microsoft
+ } exch get exec
+} bind def
+
+% <string2> string2to1 <string>
+/string2to1 {
+ dup length 2 idiv string dup
+ 0 1 3 index length 1 sub {
+ 3 index 1 index 2 mul 1 add get put dup
+ } for pop exch pop
+} bind def
+
+% <array> <lt-proc> sort <array>
+/sort {
+ 1 index length 1 sub -1 1 {
+ 2 index exch 2 copy get 3 copy % arr proc arr i arr[i] arr i arr[i]
+ 0 1 3 index 1 sub {
+ 3 index 1 index get % arr proc arr i arr[i] arr imax amax j arr[j]
+ 2 index 1 index 10 index exec { % ... amax < arr[j]
+ 4 2 roll
+ } if pop pop
+ } for % arr proc arr i arr[i] arr imax amax
+ 4 -1 roll exch 4 1 roll put put
+ } for pop
+} def
+
+% <array|string> <index> <count> .safegetinterval <subarray|substring>
+/.safegetinterval {
+ exch 2 index length .min exch
+ 2 index length 2 index sub .min
+ getinterval
+} bind def
+
+% <array> <index> <obj> .safeput -
+/.safeput {
+ 2 index length 2 index gt { put } { pop pop pop } ifelse
+} bind def
+
+% Each procedure in this dictionary is called as follows:
+% <encodingtable> proc <glypharray>
+/cmapformats mark
+ 0 { % Apple standard 1-to-1 mapping.
+ 6 256 getinterval { } forall 256 packedarray
+ } bind
+ 2 { % Apple 16bit CJK (ShiftJIS etc)
+
+ % /sHK_sz subHeaderKey_size % 1 * uint16
+ % /sH_sz subHeader_size % 4 * uint16
+ % /sH_len subHeader_length
+ % /cmapf2_tblen total table length
+ % /cmapf2_lang language code (not used)
+ % /sHKs subHeaderKeys
+
+ /sHK_sz 2 def
+ /sH_sz 8 def
+ dup 2 getu16 /cmapf2_tblen exch def
+
+ TTCMAP2_DEBUG {
+ (format2 table length: 0x) print
+ cmapf2_tblen 16 10 string cvrs print
+ (=) print
+ cmapf2_tblen == flush
+ } if
+ dup 4 getu16 /cmapf2_lang exch def
+
+ TTCMAP2_DEBUG {
+ (format2 lang code: 0x) print
+ cmapf2_lang 16 10 string cvrs == flush
+ } if
+ dup 6 256 sHK_sz mul getinterval /sHKs exch def
+ TTCMAP2_DEBUG {
+ (format2 subHeaderKeys: ) print
+ sHKs == flush
+ (scan subHeaderKeys\n) print flush
+ } if
+
+ 0 % initialization value for /sH_len
+ 0 1 255 {
+ TTCMAP2_DEBUG {
+ (hi byte ) =only
+ dup 16 10 string cvrs =only
+ (-> subHeader #) print
+ flush
+ } if
+ sHKs exch
+ 2 mul getu16
+ TTCMAP2_DEBUG {
+ dup 16 10 string cvrs =only
+ ( ) print dup == flush
+ } if
+ 1 index % get current max
+ 1 index % get current subHeaderKey
+ lt {exch} if pop
+ } for
+ /sH_len exch def
+
+ TTCMAP2_DEBUG {
+ (format2 subHeader length: ) print
+ sH_len ==
+ flush
+ } if
+ dup 6 256 sHK_sz mul add
+ cmapf2_tblen 1 index sub getinterval
+ /sH_gIA exch def
+ TTCMAP2_DEBUG {
+ (format2 subHeaders + GID array: ) print
+ sH_gIA ==
+ } if
+
+ /cmapf2_glyph_array 65535 array def
+
+ /.cmapf2_putGID {
+ /cmapf2_ch cmapf2_ch_hi 8 bitshift cmapf2_ch_lo add def
+ TTCMAP2_DEBUG {
+ (code: ) =only cmapf2_ch 16 4 string cvrs =only
+ ( -> ) =only
+ } if
+ firstCode cmapf2_ch_lo le
+ cmapf2_ch_lo firstCode entryCount add lt
+ and { % true: j is inside
+ sH_offset idRangeOffset add % offset to gI
+ cmapf2_ch_lo firstCode sub 2 mul % rel. pos. in range
+ add 6 add % offset in sH_gIA
+ sH_gIA exch getu16
+ dup 0 gt { %
+ TTCMAP2_DEBUG {
+ dup 16 8 string cvrs =only
+ (+) =only idDelta 16 8 string cvrs =only
+ } if
+ idDelta add
+ TTCMAP2_DEBUG {
+ (=) =only dup 16 8 string cvrs == flush
+ } if
+ cmapf2_glyph_array exch cmapf2_ch exch put
+ } {
+ TTCMAP2_DEBUG {(specified 0: 0\n) print flush} if
+ pop
+ % cmapf2_glyph_array cmapf2_ch 0 put
+ } ifelse
+ } { % false: j is outside
+ TTCMAP2_DEBUG {(outside of range: 0\n) print flush} if
+ % cmapf2_glyph_array cmapf2_ch 0 put
+ } ifelse
+ } def
+
+ 16#00 1 16#ff { % hi_byte scan
+ /cmapf2_ch_hi exch def
+ sHKs cmapf2_ch_hi sHK_sz mul getu16
+ TTCMAP2_DEBUG {
+ (subHeader_offset = idx * 8 = ) print
+ dup ==
+ } if
+ /sH_offset exch def
+ sH_gIA sH_offset sH_sz getinterval
+ dup 0 getu16 /firstCode exch def
+ dup 2 getu16 /entryCount exch def
+ dup 4 gets16 /idDelta exch def
+ dup 6 getu16 /idRangeOffset exch def
+ pop
+ TTCMAP2_DEBUG {
+ (idRangeOffset: ) print idRangeOffset 16 8 string cvrs ==
+ } if
+ sH_offset 0 eq {
+ /cmapf2_ch_lo cmapf2_ch_hi def
+ /cmapf2_ch_hi 0 def
+ .cmapf2_putGID
+ } {
+ 16#00 1 16#ff { % lo_byte scan
+ /cmapf2_ch_lo exch def
+ .cmapf2_putGID
+ } for
+ } ifelse
+ } for
+ pop
+ 0 1 cmapf2_glyph_array length 1 sub { % rewrite null -> 0.
+ % TTCMAP2_DEBUG { (rewriting null: ) print dup == flush } if
+ dup cmapf2_glyph_array exch get
+ null eq { cmapf2_glyph_array exch 0 put } {pop} ifelse
+ } for
+ TTCMAP2_DEBUG { (rewriting finished\n) print flush } if
+ cmapf2_glyph_array
+ TTCMAP2_DEBUG {
+ 16#0000 16#0010 16#fff0 {
+ 16#0000 16#0001 16#000f {
+ 1 index add dup 16#ffff lt {
+ 2 index exch get =only
+ ( ) =only
+ } { pop } ifelse
+ } for
+ pop
+ (\n) print flush
+ } for
+ } if
+ } bind
+ 4 { % Microsoft/Adobe segmented mapping.
+ /etab exch def
+ /nseg2 etab 6 getu16 def
+ 14 /endc etab 2 index nseg2 getinterval def
+ % The Apple TrueType documentation omits the 2-byte
+ % 'reserved pad' that follows the endCount vector!
+ 2 add
+ nseg2 add /startc etab 2 index nseg2 getinterval def
+ nseg2 add /iddelta etab 2 index nseg2 getinterval def
+ nseg2 add /idroff etab 2 index nseg2 getinterval def
+ % The following hack allows us to properly handle
+ % idiosyncratic fonts that start at 0xf000:
+ pop
+ /firstcode startc 0 getu16 16#ff00 and dup 16#f000 ne { pop 0 } if def
+ /putglyph {
+ glyphs code 3 -1 roll put /code code 1 add def
+ } bind def
+ % Do a first pass to compute the size of the glyphs array.
+ /numcodes 0 def /glyphs 0 0 2 nseg2 3 sub {
+ % Stack: /glyphs numglyphs i2
+ /i2 exch def
+ /scode startc i2 getu16 def
+ /ecode endc i2 getu16 def
+ numcodes scode firstcode sub
+ % Hack for fonts that have only 0x0000 and 0xf000 ranges
+ %dup 16#e000 ge { 255 and } if
+ % the previous line is obstructive to CJK fonts, so it was removed
+ exch sub 0 .max ecode scode sub 1 add add
+ exch 1 index add exch
+ numcodes add /numcodes exch def
+ } for array def
+ % Now fill in the array.
+ /numcodes 0 def /code 0 def
+ 0 2 nseg2 3 sub {
+ /i2 exch def
+ /scode startc i2 getu16 def
+ /ecode endc i2 getu16 def
+ numcodes scode firstcode sub
+ % Hack for fonts that have only 0x0000 and 0xf000 ranges
+ %dup 16#e000 ge { 255 and } if
+ % the previous line is obstructive to CJK fonts, so it was removed
+ exch sub 0 .max dup { 0 putglyph } repeat
+ ecode scode sub 1 add add numcodes add /numcodes exch def
+ /delta iddelta i2 gets16 def
+ DEBUG {
+ (scode=) print scode =only
+ ( ecode=) print ecode =only
+ ( delta=) print delta =only
+ ( droff=) print idroff i2 getu16 =
+ } if
+ idroff i2 getu16 dup 0 eq {
+ pop scode delta add 65535 and 1 ecode delta add 65535 and
+ { putglyph } for
+ } { % The +2 is for the 'reserved pad'.
+ /gloff exch 14 nseg2 3 mul add 2 add i2 add add def
+ 0 1 ecode scode sub {
+ 2 mul gloff add etab exch getu16
+ dup 0 ne { delta add 65535 and } if putglyph
+ } for
+ } ifelse
+ } for glyphs /glyphs null def % for GC
+ } bind
+ 6 { % Single interval lookup.
+ dup 6 getu16 /firstcode exch def dup 8 getu16 /ng exch def
+ firstcode ng add array
+ % Stack: tab array
+ % Fill elements 0 .. firstcode-1 with 0
+ 0 1 firstcode 1 sub { 2 copy 0 put pop } for
+ dup firstcode ng getinterval
+ % Stack: tab array subarray
+ % Fill elements firstcode .. firstcode+nvalue-1 with glyph values
+ 0 1 ng 1 sub {
+ dup 2 mul 10 add 4 index exch getu16 3 copy put pop pop
+ } for pop exch pop
+ } bind
+.dicttomark readonly def % cmapformats
+
+% <cmaptab> cmaparray <glypharray>
+/cmaparray {
+ dup 0 getu16
+
+ cmapformats exch .knownget {
+ DEBUG {
+ (cmap: format ) print 1 index 0 getu16 = flush
+ } if exec
+ } {
+ (Can't handle format ) print 0 getu16 = flush
+ 0 1 255 { } for 256 packedarray
+ } ifelse
+ DEBUG {
+ (cmap: length=) print dup length = dup ==
+ } if
+} bind def
+
+% Each procedure in this dictionary is called as follows:
+% posttable <<proc>> glyphencoding
+/postformats mark
+ 16#00010000 { % 258 standard Macintosh glyphs.
+ pop MacGlyphEncoding
+ }
+ 16#00020000 { % Detailed map, required by Microsoft fonts.
+ /postglyphs exch def
+ postglyphs 32 getu16 /numglyphs exch def
+ /glyphnames numglyphs 2 mul 34 add def
+ [ 0 1 numglyphs 1 sub {
+ 2 mul 34 add postglyphs exch getu16
+ dup 258 lt {
+ MacGlyphEncoding exch get
+ } {
+ dup 32768 ge {
+ % According to the published TrueType spec, such values are
+ % "reserved for future use", but at least some PDF files
+ % produced by the Adobe PDF library contain entries with a
+ % value of 16#ffff.
+ pop /.notdef
+ } {
+ 258 sub glyphnames exch {
+ postglyphs 1 index get 1 add add
+ } repeat
+ 1 add postglyphs exch 2 copy 1 sub get getinterval cvn
+ % At least some of Microsoft's TrueType fonts use incorrect
+ % (Adobe-incompatible) names for some glyphs.
+ % Correct for this here.
+ postremap 1 index .knownget { exch pop } if
+ } ifelse
+ } ifelse
+ } for ]
+ } bind
+ 16#00030000 { % No map.
+ pop [ ]
+ } bind
+.dicttomark readonly def % postformats
+
+% Each procedure in this dictionary is called as follows:
+% <file> <length> -proc- <string|array_of_strings>
+% Note that each table must have an even length, because of a strange
+% Adobe requirement that each sfnts entry have even length.
+/readtables mark
+ % Ordinary tables
+ (cmap) { .readtable }
+ (head) 1 index
+ (hhea) 1 index
+ (maxp) 1 index
+ (name) 1 index
+ (OS/2) 1 index
+ (post) 1 index
+ (vhea) 1 index
+ % Big tables
+ (glyf) { .readbigtable }
+ (loca) 1 index
+ (hmtx) 1 index
+ (vmtx) 1 index
+ % Tables only needed for embedding in PDF files
+ (cvt ) { .readtable }
+ (fpgm) 1 index
+ (prep) 1 index
+ (GSUB) 1 index
+.dicttomark
+% Normally there would be a 'readonly' here, but the ttf2pf utility wants
+% to include the 'kern' table as well, so we leave the readtables dictionary
+% writable.
+def % readtables
+
+% Read a table as a single string.
+% <file> <length> .readtable <string>
+/.readtable {
+ dup dup 1 and add string
+ % Stack: f len str
+ dup 0 4 -1 roll getinterval
+ % Stack: f str str1
+ % Because of the absurd PostScript specification that gives an
+ % error for reading into an empty string, we have to check for
+ % this explicitly here.
+ 3 -1 roll exch
+ dup () ne { readstring } if pop pop
+} bind def
+
+% Read a big table (one that may exceed 64K).
+% <file> <length> .readbigtable <string[s]>
+/.readbigtable {
+ dup 65400 lt {
+ .readtable
+ } {
+ currentuserparams /VMReclaim get -2 vmreclaim
+ [ 4 2 roll {
+ % Stack: mark ... f left
+ dup maxstring le { exit } if
+ 1 index maxstring string readstring pop 3 1 roll maxstring sub
+ } loop .readtable ]
+ exch vmreclaim
+ } ifelse
+} bind def
+
+end readonly def % .loadttfontdict
+
+% <tab> .printtab -
+/.printtab {
+ dup 0 4 getinterval print ( ) print
+ dup 8 getu32 =only ( ) print
+ 12 getu32 =
+} bind def
+
+% <file> .loadttfonttables -
+% <file> <fontindex> .loadttfonttables - % extention by hideyuki
+% Pushes .loadttfontdict & scratch dict on d-stack.
+% Defines f, offsets, tables, tabdict, tabs.
+/.loadttfonttables {
+ .loadttfontdict begin
+ 40 dict begin
+ dup type /integertype eq % extention by hideyuki
+ { 1 sub } { 0 } ifelse /findex exch def
+ /f exch def
+ /offsets f 12 string readstring pop def
+
+ % TrueType Collection File support
+ % Jan 11 2000: Hideyuki Suzuki <hideyuki@sat.t.u-tokyo.ac.jp>
+ % Feb 10 2001: suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+ offsets 0 4 getinterval (ttcf) eq {
+ [ 1 1 offsets 8 getu32 { pop f 4 string readstring pop 0 getu32} for ]
+ dup findex get dup /ttcheader exch def exch length 4 mul 12 add sub
+ %dup 0 gt { string f exch readstring pop } if pop
+ f fileposition add f exch setfileposition
+ % the previous line is for very large ttcf, hacked by suzuki toshiya
+ /offsets f 12 string readstring pop def
+ } { /ttcheader 0 def } ifelse
+
+ /tables f offsets 4 getu16 16 mul string readstring pop def
+ /tabdict tables length 16 idiv dict def
+ % tabs = tables we want to keep, sorted by file position.
+ /tabs [ 0 16 tables length 1 sub {
+ tables exch 16 getinterval
+ DEBUG { dup .printtab } if
+ dup 0 4 getinterval readtables 1 index known {
+ tabdict exch 2 index put
+ } {
+ pop pop
+ } ifelse
+ } for ] {
+ exch 8 getu32 exch 8 getu32 lt
+ } sort def
+ % In certain malformed TrueType fonts, tables overlap.
+ % Truncate tables if necessary.
+ 0 1 tabs length 2 sub {
+ dup tabs exch get exch 1 add tabs exch get
+ 1 index 8 getu32 2 index 12 getu32 add
+ 1 index 8 getu32 gt {
+ (**** Warning: ) print 1 index 0 4 getinterval print
+ ( overlaps ) print dup 0 4 getinterval print
+ (, truncating.) = flush
+ dup 8 getu32 2 index 8 getu32 sub
+ 2 index 12 3 -1 roll putu32
+ } if pop pop
+ } for
+} bind def
+
+% - .readttdata -
+% Read data. Updates offsets, tabs; stores data in tabdict.
+/.readttdata {
+
+ % TrueType Collection File support
+ % Jan 11 2000: Hideyuki Suzuki <hideyuki@sat.t.u-tokyo.ac.jp>
+ % /fpos offsets length tables length add def
+ /fpos ttcheader offsets length tables length add add def
+ /sfpos offsets length tabs length 16 mul add def
+ offsets 4 tabs length putu16
+ tabs {
+ dup 0 4 getinterval /tname exch def
+ dup 8 getu32 /tpos exch def
+ dup 12 getu32 /tlen exch def
+ 8 sfpos putu32
+ % Skip data between the end of the previous table and
+ % the beginning of this one, if any.
+ tpos fpos gt {
+ f tpos fpos sub () /SubFileDecode filter dup flushfile closefile
+ /fpos tpos def
+ } if
+ f tlen readtables tname get exec
+ tabdict tname 3 -1 roll put
+ /fpos fpos tlen add def
+ % Round up the table length to an even value.
+ /sfpos sfpos tlen dup 1 and add add def
+ } forall
+} bind def
+
+% Find the string in a list of strings that includes a given index.
+% <strings> <index> .findseg <string> <index'>
+/.findseg {
+ exch {
+ dup length 2 index gt { exch exit } if
+ length sub
+ } forall
+} bind def
+
+% - .makesfnts -
+% Defines checksum, getloca, head, locatable, numloca, post, sfnts, upem
+/.makesfnts {
+ .readttdata
+ /head tabdict /head get def
+ /locatable tabdict /loca get def
+ /post tabdict /post .knownget not { null } if def
+ /numloca
+ locatable dup type /stringtype eq
+ { length }
+ { 0 exch { length add } forall }
+ ifelse % no def yet
+ locatable type /stringtype eq {
+ /.indexloca {} def
+ } {
+ /.indexloca /.findseg load def
+ } ifelse
+ head 50 getu16 0 ne {
+ /getloca {
+ 2 bitshift locatable exch .indexloca getu32
+ } def
+ 4 idiv 1 sub
+ } {
+ /getloca {
+ dup add locatable exch .indexloca getu16 dup add
+ } def
+ 2 idiv 1 sub
+ } ifelse def % numloca
+ % If necessary, re-partition the glyfs.
+ tabdict /glyf get dup type /stringtype ne {
+ .dividesfnts tabdict /glyf 3 -1 roll put
+ } {
+ pop
+ } ifelse
+ /sfnts [
+ offsets tabs { concatstrings } forall
+ tabs {
+ 0 4 getinterval tabdict exch get
+ dup type /stringtype ne { aload pop } if
+ } forall
+ ] def
+} bind def
+
+% <glyfs> .dividesfnts <glyfs'>
+/.dividesfnts {
+ /glyfs exch def
+ /len1 0 glyfs { length add } forall def
+ % Determine where to split the glyfs by scanning loca.
+ % The very last entry in loca may be bogus.
+ % Note that some loca entries may be odd, but we can only
+ % split at even positions.
+ %
+ % Construct splitarray, the array of final lengths of
+ % the sfnts entries covering the glyfs (i.e., all but
+ % the first and last sfnts entries).
+ /prevsplit 0 def
+ /prevboundary 0 def
+ /prevoddboundary 0 def % see TYPE42_NO_ODDSIZE_STR in zfont42.c
+ /splitarray [
+ 0 1 numloca 1 sub {
+ getloca dup prevsplit maxstring add gt {
+ prevboundary prevsplit eq { % see TYPE42_NO_ODDSIZE_STR in zfont42.c
+ /ferr (%stderr) (w) file def
+ ferr (glyf table ) writestring
+ ferr prevsplit 10 string cvs writestring
+ ferr ( - ) writestring
+ dup 10 string cvs ferr exch writestring
+ ferr ( too long segment without suitable boundary.\n)
+ writestring
+ ferr closefile
+ /prevboundary prevoddboundary def
+ } if
+ DEBUG {
+ dup 10 string cvs print
+ ( segment is longer than maxstring, split now ) print
+ prevboundary 10 string cvs print
+ ( - ) print
+ prevsplit 10 string cvs print
+ (\n) print
+ } if
+ prevboundary prevsplit sub exch
+ /prevsplit prevboundary def
+ % /prevoddboundary 0 def
+ } if
+ dup 1 and 0 eq { % see TYPE42_NO_ODDSIZE_STR in zfont42.c
+ DEBUG {
+ dup 10 string cvs print
+ ( \() print
+ dup prevsplit sub 10 string cvs print
+ (\) ) print
+ ( even length OK\n) print
+ } if
+ /prevboundary exch def
+ % /prevoddboundary 0 def
+ } {
+ DEBUG {
+ dup 10 string cvs print
+ ( \() print
+ dup prevsplit sub 10 string cvs print
+ (\) ) print
+ ( odd length!\n) print
+ } if
+ % prevoddboundary 0 eq {
+ /prevoddboundary exch def
+ % } { pop } ifelse
+ } ifelse
+ % dup 0 eq { (why ZERO?\n) print } if
+ % dup ==
+ } for
+ len1 prevsplit sub
+ ] def
+ currentuserparams /VMReclaim get -2 vmreclaim
+ [
+ % Re-split the sfnts glyfs strings according to splitarray.
+ % We do this by iterating over the final segments defined
+ % by splitarray, and constructing them from pieces of the
+ % current glyfs strings. We recycle the current strings
+ % when possible, to avoid stressing the allocator.
+ /sfnt_idx 0 def
+ /strpos 0 def
+ /avail () def
+ splitarray {
+ /seglen exch def
+ /segpos 0 def
+ avail length seglen ge
+ { avail 0 seglen getinterval /avail () def } { seglen string }
+ ifelse
+ {
+ /str glyfs sfnt_idx get def
+ /strlen str length def
+ /strleft strlen strpos sub def
+ seglen segpos sub strleft lt { exit } if
+ % Copy the (rest of the) string into the new segment.
+ % We know strleft <= segleft.
+ dup segpos str strpos strleft getinterval putinterval
+ /segpos segpos strleft add def
+ /avail str def
+ /sfnt_idx sfnt_idx 1 add def
+ /strpos 0 def
+ segpos seglen eq { exit } if
+ } loop
+ % Fill up the segment with an initial piece of the next
+ % existing glyfs string. We know strleft > segleft.
+ /segleft seglen segpos sub def
+ dup segpos str strpos segleft getinterval putinterval
+ /strpos strpos segleft add def
+ } forall
+ ]
+ exch vmreclaim
+} bind def
+
+% - .getpost -
+% Uses post, defines glyphencoding
+/.getpost {
+ /glyphencoding post null eq {
+ DEBUG { (post missing) = flush } if [ ]
+ } {
+ postformats post 0 getu32 .knownget {
+ DEBUG {
+ (post: format ) print
+ post 0 getu16 =only (,) print post 2 getu16 = flush
+ } if
+ post exch exec
+ } {
+ DEBUG { (post: unknown format ) print post 0 getu32 = flush } if [ ]
+ } ifelse
+ } ifelse def
+} bind def
+
+% - .ttkeys <key> <value> ...
+/.ttkeys {
+ count /ttkeycount exch def
+ /upem head 18 getu16 def
+ /FontMatrix matrix
+ /FontBBox [ 36 2 42 { head exch gets16 upem div } for ]
+ nextxuid
+ tabdict /name .knownget {
+ % Find the names from the 'name' table.
+ /names exch def
+ /FontName names 6 findname not { curxuid 16 8 string cvrs } if
+ /fontname 1 index def
+ /FontInfo mark
+ names 0 findname { /Notice exch } if
+ names 1 findname { /FamilyName exch } if
+ names 4 findname { /FullName exch } if
+ names 5 findname { /Version exch } if
+ } {
+ % No name table, fabricate a FontName.
+ /FontName curxuid 16 8 string cvrs
+ /fontname 1 index def
+ /FontInfo mark
+ } ifelse
+ DEBUG { (fontname ) print fontname = } if
+ % Stack: ... /FontInfo mark key1 value1 ...
+ post null ne {
+ /ItalicAngle post 4 gets32 65536.0 div
+ /isFixedPitch post 12 getu32 0 ne
+ /UnderlinePosition post 8 gets16 upem div
+ /UnderlineThickness post 10 gets16 upem div
+ } if
+ counttomark 0 ne { .dicttomark } { pop pop } ifelse
+ /XUID [orgXUID 42 curxuid]
+ DEBUG {
+ tabs { .printtab } forall
+ [ sfnts { length } forall ] ==
+ count ttkeycount sub array astore dup { == } forall aload pop
+ } if
+ /sfnts sfnts
+} bind def
+
+% ---------------- Standard TrueType font loading ---------------- %
+
+% - .pickcmap -
+% Defines cmapsub, cmaptab
+/.pickcmap {
+ tabdict /cmap get
+ % The Apple cmap format is no help in determining the encoding.
+ % Look for a Microsoft table. If we can't find one,
+ % just use the first table, whatever it is.
+ dup 4 8 getinterval exch % the default
+ 0 1 2 index 2 getu16 1 sub {
+ 8 mul 4 add 1 index exch 8 getinterval
+ dup 0 getu16 /cmap_platform exch def
+ dup 2 getu16 /cmap_encoding exch def
+ DEBUG {
+ (cmap: platform ) print cmap_platform =only
+ ( encoding ) print cmap_encoding = flush
+ } if
+ cmap_platform 3 eq { exch 3 -1 roll pop exit } if pop
+ } for
+ % Stack: subentry table
+ /cmapsub 2 index def
+ exch 4 getu32 1 index length 1 index sub getinterval
+ /cmaptab exch def
+} bind def
+
+% <glyph> .nname <_name>
+/.nname {
+ =string cvs (_) exch concatstrings cvn
+} bind def
+
+% - .charkeys /CharStrings <charstrings> /Encoding <encoding>
+% Resets glyphencoding
+/.charkeys {
+ DEBUG {
+ (glyphencoding: length=) print glyphencoding dup length = === flush
+ } if
+ % Hack: if there is no usable post table but the cmap uses
+ % the Microsoft Unicode encoding, use ISOLatin1Encoding.
+ glyphencoding length 0 eq cmapsub 0 4 getinterval <00030001> eq and {
+ /glyphencoding ISOLatin1Encoding dup length array copy def
+ } if
+ % If necessary, fabricate additional glyphencoding entries
+ % to cover all of loca, or truncate glyphencoding.
+ glyphencoding length numloca lt {
+ /glyphencoding [ glyphencoding aload pop
+ counttomark 1 numloca 1 sub { .nname } for ] def
+ } {
+ /glyphencoding glyphencoding 0 numloca getinterval def
+ } ifelse
+ % Some badly designed Chinese fonts have a post table
+ % in which all glyphs other than 0 are named .null.
+ % Use CharStrings to keep track of the reverse map from
+ % names to glyphs, and don't let any name be used for
+ % more than one glyph.
+ /CharStrings glyphencoding dup length 1 add dict % +1 for .notdef
+ 0 1 3 index length 1 sub {
+ % Stack: glyphencoding dict index
+ 2 index 1 index get 2 index 1 index known {
+ % The same name maps to more than one glyph.
+ % Change the name.
+ pop dup .nname 3 index 2 index 2 index put
+ } if
+ 2 index exch 3 -1 roll put
+ } for exch pop
+ % If there is no .notdef entry, map it to glyph 0.
+ dup /.notdef known not { dup /.notdef 0 put } if
+ readonly
+ /Encoding
+ [ cmaptab cmaparray dup length 256 gt { 0 256 getinterval } if
+ { glyphencoding exch get } forall
+ counttomark 256 exch sub { /.notdef } repeat ]
+ DEBUG { (Encoding: ) print dup === flush } if
+} bind def
+
+% -mark- <key> <value> ... .definettfont <font>
+/.definettfont {
+ /FontType 42
+ /PaintType 0
+ DEBUG {
+ (numloca=) print numloca =
+ } if
+ .dicttomark
+ end end dup /FontName get exch definefont
+} bind def
+
+% <file> .loadttfont <type42font>
+/.loadttfont {
+ .loadttfonttables
+ .makesfnts
+ .getpost
+ .pickcmap
+ mark
+ .charkeys
+ .ttkeys
+ .definettfont
+} bind def
+
+% ---------------- CIDFontType 2 font loading ---------------- %
+
+% Create a string with array of CIDs
+% [ <cid1> ... <cidN> ] .makecidmapstring <string>
+/.makecidmapstring {
+ mark exch cvx exec counttomark % mark 1..N len
+ dup 2 mul string % mark 1..N len s
+ dup 3 -1 roll 1 sub 2 mul -2 0 { % mark 1..N s s
+ 2 copy 5 index -8 bitshift put % mark 1..N s s j2
+ 1 add 4 -1 roll 16#ff and put dup % mark 1..N-1 s s
+ } for pop % mark s
+ exch pop % s
+} bind def
+
+% Create a string or an array of strings with array of CIDs
+% [ <cid1> ... <cidN> ] .makecidmap <string>|[<string> ...]
+% written by Taiji Yamada <taiji@aihara.co.jp>
+/.makecidmap {
+ dup length maxstring le {
+ .makecidmapstring
+ } {
+ dup length dup maxstring idiv exch
+ maxstring mod 0 ne { 1 add } if array exch
+ 0 1 3 index length 1 sub {
+ dup maxstring mul 1 index 1 add maxstring mul
+ 3 index length .min 1 index sub
+ 3 index 3 1 roll getinterval
+ .makecidmapstring
+ 3 index 3 1 roll put
+ } for pop
+ } ifelse
+} bind def
+
+% <file> .loadttcidfont <cidtype2font>
+/.loadttcidfont {
+ .loadttfonttables
+ .makesfnts
+ % CIDFontType2 fonts don't have a cmap: they are indexed by CID.
+ /.ttencmapproc false def
+ mark
+ .ttkeys
+ .definettcidfont
+} bind def
+
+% - .getgsub -
+% Defines gsubh, gsubv, gsubh2v and also defines gsubver, gsubfmt
+% in the case that GSUB table has 'Single Substitution Format 2'
+% which is formally used for vertically oriented glyphs such as CJK fonts.
+% Written by Hideyuki Suzuki <hideyuki@sat.t.u-tokyo.ac.jp>
+% Modified by Taiji Yamada <taiji@aihara.co.jp>
+%
+% [GSUB - The Glyph Substitution Table]
+% Index Size Type Name of Entry
+% -----------------------------------
+% 0 4 Fixed Version
+% 4 2 Offset ScriptList
+% 6 2 Offset FeatureList
+% 8 2 Offset LookupList
+%
+% [Single Substitution Format 2, Subtable at LookupList]
+% Index Size Type Name of Entry
+% -----------------------------------
+% 0 2 uint16 SubstFormat
+% 4 2 Offset Coverage(--)
+% 6 2 uint16 GlyphCount
+% 8 2 GlyphID Substitute(vertically oriented glyphs)
+% -- 2 uint16 SubstFormat
+% +2 2 uint16 GlyphCount(same as above GlyphCount)
+% +4 2 GlyphID GlyphArray(horizontally oriented glyphs)
+% -----------------------------------
+% References
+% 1. http://www.microsoft.com/typography/OTSPEC/gsub.htm
+%
+/.getgsub {
+ /gsubhog null def
+ /gsubvog null def
+ /gsubh2v null def
+ tabdict /GSUB .knownget { % if
+ dup /gsubver exch 0 getu32 def
+ %dup /gsubosl exch 4 getu16 12 add def
+ %dup /gsubofl exch 6 getu16 12 add def
+ dup /gsuboll exch 8 getu16 12 add def
+ DEBUG {
+ (gsubver: ) print gsubver =
+ %(gsubosl: ) print gsubosl =
+ %(gsubofl: ) print gsubofl =
+ (gsuboll: ) print gsuboll =
+ } if
+ dup /gsubfmt exch gsuboll 0 add getu16 def
+ DEBUG {
+ (gsubfmt: ) print gsubfmt =
+ } if
+% gsubver 16#00010000 eq { % ifelse
+ gsubfmt 2 eq { % ifelse
+ dup /gsubocv exch gsuboll 2 add getu16 def
+ dup /gsubglc exch gsuboll 4 add getu16 def
+ % hacked by suzuki toshiya at 2001/3/6
+ %dup /gsubvog exch gsuboll 6 add gsubglc getinterval def
+ %dup /gsubhog exch gsuboll gsubocv add 4 add gsubglc getinterval def
+ dup /gsubvog exch gsuboll 6 add gsubglc 2 mul getinterval def
+ dup /gsubhog exch gsuboll gsubocv add 4 add gsubglc 2 mul getinterval def
+ DEBUG {
+ (gsubocv: ) print gsubocv =
+ (gsubglc: ) print gsubglc =
+
+ (gsubhog->gsubvog ) =
+ 0 2 gsubhog length 2 sub { % for
+ dup
+ gsubhog exch getu16 =only
+ (->) =only
+ gsubvog exch getu16 =
+ } for
+ } if
+ /gsubh2v << 0 2 gsubhog length 2 sub {
+ dup gsubhog exch getu16
+ exch gsubvog exch getu16
+ } for >> def
+ } {
+ %(UNKNOWN GSUB FORMAT.) = flush
+ } ifelse
+% } {
+% (ILLEGAL GSUB VERSION.) = flush
+% } ifelse
+ pop
+ } if
+} bind def
+
+% glyphid .gsublookup glyphid
+% Lookup substitute table. return the origin if not found.
+% modified by Taiji Yamada <taiji@aihara.co.jp> and Hideyuki Suzuki
+/.gsublookup {
+ dup gsubh2v exch .knownget { exch pop } if
+} bind def
+
+% - .getos2 -
+% Defines os2ver, os2cp1, os2cp2
+% to detect the kind of CID with the OS/2 table of a TrueType font.
+% Written by Taiji Yamada <taiji@aihara.co.jp>
+%
+% [OS/2 - OS/2 and Windows Metrics]
+% Index Size Type Name of Entry
+% -----------------------------------
+% 0 2 USHORT version
+% 2 2 SHORT xAvgCharWidth
+% 4 2 USHORT usWeightClass
+% 6 2 USHORT usWidthClass
+% 8 2 SHORT fsType
+% 10 2 SHORT ySubscriptXSize
+% 12 2 SHORT ySubscriptYSize
+% 14 2 SHORT ySubscriptXOffset
+% 16 2 SHORT ySubscriptYOffset
+% 18 2 SHORT ySuperscriptXSize
+% 20 2 SHORT ySuperscriptYSize
+% 22 2 SHORT ySuperscriptXOffset
+% 24 2 SHORT ySuperscriptYOffset
+% 26 2 SHORT yStrikeoutSize
+% 28 2 SHORT yStrikeoutPosition
+% 30 2 SHORT sFamilyClass
+% 32 10 BYTE panose[10]
+% 42 4 ULONG ulUnicodeRange1
+% 46 4 ULONG ulUnicodeRange2
+% 50 4 ULONG ulUnicodeRange3
+% 54 4 ULONG ulUnicodeRange4
+% 58 4 CHAR achVendID[4]
+% 62 2 USHORT fsSelection
+% 64 2 USHORT usFirstCharIndex
+% 66 2 USHORT usLastCharIndex
+% 68 2 SHORT sTypoAscender
+% 70 2 SHORT sTypoDescender
+% 72 2 SHORT sTypoLineGap
+% 74 2 USHORT usWinAscent
+% 76 2 USHORT usWinDescent
+% 78 4 ULONG ulCodePageRange1
+% 82 4 ULONG ulCodePageRange2
+% 86 2 SHORT sxHeight
+% 88 2 SHORT sCapHeight
+% 90 2 USHORT usDefaultChar
+% 92 2 USHORT usBreakChar
+% 94 2 USHORT usMaxContext
+% -----------------------------------
+% References
+% 1. http://www.microsoft.com/typography/OTSPEC/os2.htm
+%
+/.getos2 {
+ /os2ver 0 def
+ tabdict (OS/2) cvn .knownget { % if
+ dup /os2ver exch 0 getu16 def
+ os2ver 0 gt { % if
+ %dup /os2typ exch 8 gets16 def
+ %dup /os2fam exch 30 gets16 def
+ dup /os2ur1 exch 42 getu32 def
+ dup /os2ur2 exch 46 getu32 def
+ dup /os2ur3 exch 50 getu32 def
+ dup /os2ur4 exch 54 getu32 def
+ %dup /os2sel exch 62 getu16 def
+ %dup /os2fci exch 64 getu16 def
+ %dup /os2lci exch 64 getu16 def
+ dup /os2cp1 exch 78 getu32 def
+ dup /os2cp2 exch 82 getu32 def
+ DEBUG {
+ /tmp 64 string def
+ (os2ver: ) print os2ver 2 tmp cvrs =
+ %(os2typ: ) print os2typ 2 tmp cvrs =
+ %(os2fam: ) print os2fam 2 tmp cvrs =
+ (os2ur1: ) print os2ur1 2 tmp cvrs =
+ (os2ur2: ) print os2ur2 2 tmp cvrs =
+ (os2ur3: ) print os2ur3 2 tmp cvrs =
+ (os2ur4: ) print os2ur4 2 tmp cvrs =
+ %(os2sel: ) print os2sel 2 tmp cvrs =
+ %(os2fci: ) print os2fci 2 tmp cvrs =
+ %(os2lci: ) print os2lci 2 tmp cvrs =
+ (os2cp1: ) print os2cp1 2 tmp cvrs =
+ (os2cp2: ) print os2cp2 2 tmp cvrs =
+ [
+ [ 1 0 bitshift (Latin 1) ]
+ [ 1 1 bitshift (Latin 2) ]
+ [ 1 2 bitshift (Cyrillic) ]
+ [ 1 3 bitshift (Greek) ]
+ [ 1 4 bitshift (Turkish) ]
+ [ 1 5 bitshift (Hebrew) ]
+ [ 1 6 bitshift (Arabic) ]
+ [ 1 7 bitshift (Baltic) ]
+ [ 1 8 bitshift (Vietnamese) ]
+ [ 1 16 bitshift (Thai) ]
+ [ 1 17 bitshift (Japanese) ]
+ [ 1 18 bitshift (Simplified Chinese) ]
+ [ 1 19 bitshift (Korean Wansung) ]
+ [ 1 20 bitshift (Traditional Chinese) ]
+ [ 1 21 bitshift (Korean Johab) ]
+ [ 1 31 bitshift (Symbol) ]
+ ] { % forall
+ dup 0 get os2cp1 and 0 gt { % if
+ (CodePage: ) print 1 get =
+ } {
+ pop
+ } ifelse
+ } forall
+ } if
+ } if
+ pop
+ } if
+} bind def
+
+% ---------------- PDF TrueType font loading ---------------- %
+
+% Strictly speaking, this code should be loaded only if we have a PDF
+% interpreter, but it's so closely tied to the rest of the code in this
+% file that we always include it.
+
+% <plat+enc> .findcmap <subtable> true
+% <plat+enc> .findcmap false
+/.findcmap {
+ false exch tabdict /cmap get
+ % Some fonts have multiple cmaps with the same platform and
+ % encoding. Use the first one we find.
+ 0 1 2 index 2 getu16 1 sub {
+ % Stack: false plat+enc cmap index
+ 8 mul 4 add 1 index exch 8 getinterval
+ dup 0 4 getinterval 3 index eq {
+ 4 getu32 1 index exch 1 index length 1 index sub getinterval
+ 4 -1 roll not 4 2 roll exit
+ } if pop
+ } for
+ % Stack: false plat+enc cmap || subtable true plat+enc cmap
+ pop pop
+} bind def
+
+% <subcmap> <chartoglyphmap> .pdfmapchars
+% /CharStrings <charstrings> /Encoding <encoding>
+% Uses encoding
+/.pdfmapchars {
+ exch cmaparray /cmapencoding exch def
+ % Invert glyphencoding (post).
+ /inversepost glyphencoding length dict def
+ 0 1 glyphencoding length 1 sub {
+ glyphencoding 1 index get exch inversepost 3 1 roll put
+ } for
+ /CharStrings mark 3 -1 roll {
+ dup type /arraytype eq {
+ exch /ch exch def { ch exch .pdfaddchar } forall
+ } {
+ .pdfaddchar
+ } ifelse
+ } forall
+ % Add a .notdef => 0 entry if needed. Per Adobe's spec,
+ % .dicttomark (>>) adds pairs in top-to-bottom order.
+ /.notdef 0
+ .dicttomark
+ /Encoding encoding
+} bind def
+% <charname> <charcode> .pdfaddchar <charname> <glyph#>
+% <charname> <charcode> .pdfaddchar -
+/.pdfaddchar {
+ dup cmapencoding length lt {
+ cmapencoding exch get dup 0 eq {
+ pop .pdfaddpost
+ } if
+ } {
+ pop .pdfaddpost
+ } ifelse
+} bind def
+% <charname> .pdfaddpost <charname> <glyph#>
+% <charname> .pdfaddpost -
+/.pdfaddpost {
+ inversepost 1 index .knownget not { pop } if
+} bind def
+
+% - .pdfcharkeys /CharStrings <charstrings> /Encoding <encoding>
+/.pdfcharkeys {
+ % The following algorithms are per the PDF Reference, Second Edition
+ % (PDF 1.3 reference manual).
+ encoding null eq {
+ .charkeys % use default algorithm
+ } {
+ <00030001> .findcmap {
+ AdobeGlyphList .pdfmapchars
+ } {
+ <00010000> .findcmap {
+ .romanmacdict .pdfmapchars
+ } {
+ .charkeys % use default algorithm
+ } ifelse
+ } ifelse
+ } ifelse
+} bind def
+
+% <file> <encoding|null> .loadpdfttfont <type42font>
+/.loadpdfttfont {
+ exch .loadttfonttables
+ /encoding exch def
+ .makesfnts
+ .getpost
+ .pickcmap
+ mark
+ .pdfcharkeys
+ .ttkeys
+ .definettfont
+} bind def
+
+% ---------------- CJK TrueType font loading ---------------- %
+
+% Written by the gs-cjk project
+
+% .parsecmap
+% push an array as a result of reading a CMap file.
+% the array is of the following form.
+% [ [ [ dst src num ] [ dst src num ] ... [ dst src num ] ]
+% [ [ dst src num ] [ dst src num ] ... [ dst src num ] ]
+% ...
+% [ [ dst src num ] [ dst src num ] ... [ dst src num ] ] ]
+% each array [dst src num] corresponds to each line within
+% /begin{bf,cid}{char,range}/end{bf,cid}{char,range} pairs.
+
+/.parsecmapdict mark
+
+ % override system operators
+ /findresource { pop } bind
+ /defineresource { pop pop } bind
+ /dict {}
+ /def { pop pop } bind
+ /dup null
+ /begin { pop } bind
+ /end {}
+ /currentdict null
+
+ % override CMap operators
+ /usecmap { pop } bind
+ /CMapName null
+ /begincmap { [ } bind
+ /endcmap { ] } bind
+ /begincodespacerange { pop mark } bind
+ /endcodespacerange { cleartomark } bind
+ /beginnotdefrange { pop mark } bind
+ /endnotdefrange { cleartomark } bind
+ /beginbfchar { /parsecmapcounter exch def } bind % for FromCID CMaps
+ /endbfchar {
+ parsecmapcounter dup array exch 1 sub -1 0 {
+ [ 5 3 roll exch .strtoint 1 ]
+ 2 index 3 1 roll put
+ } for
+ } bind
+ /beginbfrange { begincidrange } % for FromCID CMaps
+ /endbfrange { endcidrange }
+ /begincidchar { beginbfchar } % for ToCID CMaps
+ /endcidchar { endbfchar }
+ /begincidrange { /parsecmapcounter exch def } bind % for ToCID CMaps
+ /endcidrange {
+ parsecmapcounter dup array exch 1 sub -1 0 {
+ [ 6 3 roll 3 1 roll .strtoint exch .strtoint exch 1 index sub 1 add ]
+ 2 index 3 1 roll put
+ } for
+ } bind
+
+ % misc
+ /parsecmapcounter 0
+
+.dicttomark def % .parsecmapdict
+
+
+/.parsecmapfname 100 string def
+
+% <CMapName> .parsecmap <array>
+% Return the contents of the CMap. If the CMap is not found, empty array
+% is returned. Note that usecmap is ignored because of efficiency.
+/.parsecmap {
+ /CMap /Category findresource begin
+ //.parsecmapfname ResourceFileName end % filename
+ dup status {
+ pop pop pop pop
+ .parsecmapdict begin run end
+ } {
+ pop []
+ } ifelse
+} bind def
+
+% .buildcmaptab
+% construct a cmap table using information obtained from horizontal/vertical
+% CMaps, ToUnicode CMap, and substition data.
+
+% cmap /CMap proc .applyCMap cmap
+/.applyCMap {
+ exch .parsecmap % {} [[[].].]
+ dup length 1 sub -1 0 { % {} [[[].].] len-1 -1 0 {} for
+ 1 index exch get % {} [[[].].] [[].]
+ dup length 1 sub -1 0 { % {} [[[].].] [[].] len-1 -1 0 for {}
+ 1 index exch get % {} [[[].].] [[].] [ cid gid num ]
+ cvx exec cmapglyphs % {} [[[].].] [[].] cid gid num gmap
+ 3 1 roll .safegetinterval { % {} [[[].].] [[].] cid [gid'..]
+ 4 index exec dup cmapglyphs 0 get eq {
+ % found no glyph
+ pop
+ } {
+ % found a glyph
+ 5 index exch 2 index exch .safeput
+ } ifelse
+ 1 add % {} [[[].].] [[].] cid++
+ } forall pop
+ } for % {} [[[].].] [[].]
+ pop % {} [[[].].]
+ } for % {} [[[].].]
+ pop pop %
+} bind def
+
+% cmap /CMap-V .applyvCMap cmap
+/.applyvCMap {
+ gsubh2v null ne {
+ { .gsublookup } .applyCMap
+ } {
+ { } .applyCMap
+ } ifelse
+} bind def
+
+% cmap /CMap-H .applyhCMap cmap
+/.applyhCMap {
+ { } .applyCMap
+} bind def
+
+% cmap /CMap-V .applyvCMapUnicode cmap
+/.applyvCMapUnicode {
+ gsubh2v null ne {
+ {
+ dup 16#f900 ge
+ 1 index 16#ff00 ge 2 index 16#ff9f le and not
+ and not {
+ .gsublookup
+ } if
+ } bind .applyCMap
+ } {
+ { } .applyCMap
+ } ifelse
+} bind def
+
+% cmap /Adobe-*-* .applyCIDToCode cmap
+/.applyCIDToCode {
+ .parsecmap
+ {
+ { % cmap [ dist cid num ]
+ dup 0 get length 2 gt { % multi-byte dist is not supported yet.
+ pop
+ } {
+ cvx exec exch % cmap dist num cid
+ cmapglyphs 4 2 roll % cmap cid cmapglyphs dist num
+ exch .strtoint exch
+ .safegetinterval % cmap cid subcmapglyphs
+ { % cmap cid gid
+ 2 index 2 index % cmap cid gid cmap cid
+ 3 2 roll % cmap cid cmap cid gid
+ .safeput % cmap cid
+ 1 add % cmap nextcid
+ } forall pop
+ } ifelse
+ } forall
+ } forall
+} bind def
+
+% cmap /Adobe-*-UCS2 .applyCIDToUnicode cmap
+/.applyCIDToUnicode {
+ .parsecmap
+ {
+ { % cmap [ distuni cid num ]
+ dup 0 get length 2 gt % multi-byte dist is not supported yet.
+ 1 index 0 get <fffd> eq % the value <fffd> is regard as undefined code.
+ or {
+ pop
+ } {
+ cvx exec exch % cmap distuni num cid
+ cmapglyphs 4 2 roll % cmap cid cmapglyphs distuni num
+ exch .strtoint exch % cmap cid cmapglyphs distuni num
+ .safegetinterval % cmap cid subcmapglyphs
+ { % cmap cid gid
+ 2 index 2 index % cmap cid gid cmap cid
+ 3 2 roll % cmap cid cmap cid gid
+ .safeput % cmap cid
+ 1 add % cmap nextcid
+ } forall pop
+ } ifelse
+ } forall
+ } forall
+} bind def
+
+/.buildcmapdict mark
+ /Adobe-CNS1 <<
+ /Registry (Adobe)
+ /Ordering (CNS1)
+ /CIDCounts [ 14099 17408 17601 18846 18962 ]
+ /Big5 { 0 {
+ /Adobe-CNS1-ETen-B5 .applyCIDToCode
+ /ETen-B5-V .applyvCMap
+ /ETen-B5-H .applyhCMap
+ } }
+ /Unicode { 3 {
+ /Adobe-CNS1-UCS2 .applyCIDToUnicode
+ /UniCNS-UCS2-V .applyvCMapUnicode
+ /UniCNS-UCS2-H .applyhCMap
+ } }
+ >>
+ /Adobe-GB1 <<
+ /Registry (Adobe)
+ /Ordering (GB1)
+ /CIDCounts [ 7717 9897 22127 22353 29064 ]
+ /PRC { 2 {
+ /Adobe-GB1-GBK-EUC .applyCIDToCode
+ /GBK-EUC-V .applyvCMap
+ /GBK-EUC-H .applyhCMap
+ } }
+ /Unicode { 4 {
+ /Adobe-GB1-UCS2 .applyCIDToUnicode
+ /UniGB-UCS2-V .applyvCMapUnicode
+ /UniGB-UCS2-H .applyhCMap
+ } }
+ >>
+ /Adobe-Japan1 <<
+ /Registry (Adobe)
+ /Ordering (Japan1)
+ /CIDCounts [ 8284 8359 8720 9354 15444 ]
+ /ShiftJIS { 2 {
+ /Adobe-Japan1-90ms-RKSJ .applyCIDToCode
+ /90ms-RKSJ-V .applyvCMap
+ /90ms-RKSJ-H .applyhCMap
+ } }
+ /Unicode { 4 {
+ /Adobe-Japan1-UCS2 .applyCIDToUnicode
+ /UniJIS-UCS2-V .applyvCMapUnicode
+ /UniJIS-UCS2-H .applyhCMap
+ } }
+ >>
+ /Adobe-Japan2 <<
+ /Registry (Adobe)
+ /Ordering (Japan2)
+ /CIDCounts [ 6068 ]
+ /Unicode { 0 {
+ /UniHojo-UCS2-V .applyvCMapUnicode
+ /UniHojo-UCS2-H .applyhCMap
+ } }
+ >>
+ /Adobe-Korea1 <<
+ /Registry (Adobe)
+ /Ordering (Korea1)
+ /CIDCounts [ 9333 18155 18352 ]
+ /Johab { 1 {
+ /KSC-Johab-V .applyvCMap
+ /KSC-Johab-H .applyhCMap
+ } }
+ /Unicode { 2 {
+ /Adobe-Korea1-UCS2 .applyCIDToUnicode
+ /UniKS-UCS2-V .applyvCMapUnicode
+ /UniKS-UCS2-H .applyhCMap
+ } }
+ /Wansung { 1 {
+ /Adobe-Korea1-KSCms-UHC .applyCIDToCode
+ /KSCms-UHC-V .applyvCMap
+ /KSCms-UHC-H .applyhCMap
+ } }
+ >>
+ /Identity << % ttcmap ordering CIDMap only for specific and rare CJK TTF
+ /Registry (Unregistered) % Thus Registry value is unpredictable. This
+ /Ordering (Identity) % CIDFont can be used with Identity-H|V CMap
+ /CIDCounts [ 65535 ]
+ /H { 0 {
+ /Identity-H .applyhCMap % for ttcmap-order CIDMap
+ } }
+ /V { 0 {
+ /Identity-H .applyvCMap % for ttcmap-order and vertically-used CIDMap
+ } }
+ >>
+.dicttomark def
+
+/.ttencmap <<
+ /Identity false
+ /Auto { .ttencoding {
+ dup .ttcharset exch get exec exch true
+ } { false } ifelse
+ } bind
+ /Adobe-CNS1 { /Adobe-CNS1 .ttencoding }
+ /Adobe-GB1 { /Adobe-GB1 .ttencoding }
+ /Adobe-Japan1 { /Adobe-Japan1 .ttencoding }
+ /Adobe-Japan2 { /Adobe-Japan2 .ttencoding }
+ /Adobe-Korea1 { /Adobe-Korea1 .ttencoding }
+ /Adobe-CNS1-Big5 { /Adobe-CNS1 /Big5 true }
+ /Adobe-CNS1-Unicode { /Adobe-CNS1 /Unicode true }
+ /Adobe-GB1-PRC { /Adobe-GB1 /PRC true }
+ /Adobe-GB1-Unicode { /Adobe-GB1 /Unicode true }
+ /Adobe-Japan1-ShiftJIS { /Adobe-Japan1 /ShiftJIS true }
+ /Adobe-Japan1-Unicode { /Adobe-Japan1 /Unicode true }
+ /Adobe-Japan2-Unicode { /Adobe-Japan2 /Unicode true }
+ /Adobe-Korea1-Johab { /Adobe-Korea1 /Johab true }
+ /Adobe-Korea1-Unicode { /Adobe-Korea1 /Unicode true }
+ /Adobe-Korea1-Wansung { /Adobe-Korea1 /Wansung true }
+ /Identity-H { /Identity /H true }
+ /Identity-V { /Identity /V true }
+>> def
+
+/.ttcharset <<
+ /Unicode { .detectos2 }
+ /ShiftJIS /Adobe-Japan1
+ /Big5 /Adobe-CNS1
+ /PRC /Adobe-GB1
+ /Wansung /Adobe-Korea1
+ /Johab /Adobe-Korea1
+>> def
+
+/.ttencdict <<
+ <00030001> /Unicode
+ <00030002> /ShiftJIS
+ <00030003> /Big5
+ <00030004> /PRC
+ <00030005> /Wansung
+ <00030006> /Johab
+>> def
+
+/.ttencoding {
+ .ttencdict cmapsub 0 4 getinterval .knownget
+} bind def
+
+/.ttos2tab [
+ [ 1 20 bitshift /Adobe-CNS1 ]
+ [ 1 18 bitshift /Adobe-GB1 ]
+ [ 1 17 bitshift /Adobe-Japan1 ]
+ [ 1 19 bitshift /Adobe-Korea1 ]
+ [ 1 21 bitshift /Adobe-Korea1 ]
+] def
+
+/.detectos2 {
+ /Identity % default linear ordering to GID, Adobe Identity CIDs
+ os2ver 0 gt {
+ .ttos2tab {
+ dup 0 get os2cp1 and 0 ne {
+ 1 get exch
+ } if pop
+ } forall
+ } if
+} bind def
+
+% /Charset /TTEncoding .buildcmaptab cmap
+/.buildcmaptab {
+ .buildcmapdict 3 2 roll get begin
+ cvx exec exch CIDCounts end exch get array
+ dup length 1 sub 0 1 3 -1 roll { 1 index exch cmapglyphs 0 get put } for
+ exch exec
+} bind def
+
+% -mark- <key> <value> ... .definettcidfont <font>
+% rapid version of .definecjkvttcidfont
+% Proposed by Hideyuki Suzuki <hideyuki@sat.t.u-tokyo.ac.jp>
+% Modified by Taiji Yamada <taiji@aihara.co.jp>
+/.definettcidfont {
+ /CIDFontName fontname
+ /CIDFontType 2
+ /CIDSystemInfo
+ mark .ttencmapproc {
+ .buildcmapdict 3 2 roll get begin
+ cvx exec pop
+ /Supplement exch
+ /Registry Registry
+ /Ordering Ordering
+ end
+ } {
+ /Registry (Adobe)
+ /Ordering (Identity) % pursuant to makeIdentityCMap in pdf_font.ps
+ /Supplement 0
+ } ifelse
+ .dicttomark
+ /CharStrings mark /.notdef 0 .dicttomark
+ .ttencmapproc {
+ /cmapglyphs cmaptab cmaparray def
+ exec .buildcmaptab
+ dup length /CIDCount exch
+ 3 -1 roll .makecidmap % it has not supported a dictionary yet
+ /CIDMap exch % it should be a string or an array of strings
+ } {
+ /CIDCount numloca
+ /CIDMap 0 % an integer interpreted as an offset from GI (see #5012 p.16)
+ } ifelse
+ /GDBytes 2
+ .dicttomark
+ end end dup /CIDFontName get exch /CIDFont defineresource
+} bind def
+
+% Load a TrueType font from a file as a CIDFontType 2 font.
+% rapid version of .loadcjkvttcidfont
+% Proposed by Hideyuki Suzuki <hideyuki@sat.t.u-tokyo.ac.jp>
+% Modified by Taiji Yamada <taiji@aihara.co.jp>
+%
+% <file> .loadttcidfont <cidtype2font>
+% <file> <fontindex> .loadttcidfont <cidtype2font>
+% detect a kind of CID and encode a TrueType font to a CID-Keyed font.
+%
+% <file> <ttcidcode> .loadttcidfont <cidtype2font>
+% <file> <fontindex> <ttcidcode> .loadttcidfont <cidtype2font>
+% load a TrueType font and encode it with the kind of CID described
+% in <ttcidcode> which is one of entry in .ttencmap.
+/.loadcjkvttcidfont {
+ dup type /nametype ne { /Auto } if
+ 1 index type /integertype eq { 3 1 roll } { exch } ifelse
+ .loadttfonttables
+ .makesfnts
+ .pickcmap % when we can't pick a Microsoft cmap table, do what to do
+ .getgsub
+ .getos2 % we need an OS/2 table for CJKV TrueType fonts (by taiji)
+ .ttencmap exch get /.ttencmapproc exch def
+ mark
+ .ttkeys
+ .definettcidfont
+} bind def
+
+% Open and load a TrueType font from a file as a CIDFontType 2 font.
+% <filename> .openttcidfont <cidtype2font>
+% <filename> <fontindex> .openttcidfont <cidtype2font>
+% <filename> <ttcidcode> .openttcidfont <cidtype2font>
+% <filename> <fontindex> <ttcidcode> .openttcidfont <cidtype2font>
+/.openttcidfont {
+ 1 dup index type /nametype eq { 1 add } if
+ dup index type /integertype eq { 1 add } if
+ dup 1 add -1 roll (r) file exch 1 roll
+ .loadcjkvttcidfont % rapid version, since 20010316
+} bind def
diff --git a/Master/xemtex/gslib/gs_typ32.ps b/Master/xemtex/gslib/gs_typ32.ps
new file mode 100644
index 00000000000..b6cba9f5583
--- /dev/null
+++ b/Master/xemtex/gslib/gs_typ32.ps
@@ -0,0 +1,128 @@
+% Copyright (C) 1997 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_typ32.ps,v 1.3.2.2.2.1 2003/04/12 14:02:38 giles Exp $
+% Initialization file for Type 32 fonts.
+
+% ------ Type 32 fonts ------ %
+
+% We need LanguageLevel 2 or higher in order to have defineresource.
+languagelevel dup 2 .max .setlanguagelevel
+
+/BitmapFontInit mark
+
+/.makeglyph32 systemdict /.makeglyph32 get
+systemdict /.makeglyph32 .undef
+
+/addglyph { % ([wx wy llx lly urx ury] |
+ % [w0x w0y llx lly urx ury w1x w1y vx vy])
+ % <bitmap> <cid> <type32font> addglyph -
+ 1 index dup 2 index .removeglyphs
+ 22 string .makeglyph32
+ % Stack: metrics bitmap cid font metstr
+ 3 index () ne {
+ % Use G4 encoding to compress the bitmap.
+ % Define a string large enough to hold the metrics,
+ % an uncompressed bitmap (worst case = 5x expansion),
+ % and the 2 RTC codes (3 bytes).
+ dup length 4 index length 5 mul add 10 add string
+ % Stack: metrics bitmap cid font metstr buffer
+ dup 0 3 index putinterval
+ dup 2 index length 1 index length 1 index sub getinterval
+ % Stack: metrics bitmap cid font metstr buffer bitbuf
+ mark /Columns 8 index dup 4 get exch 2 get sub
+ /Rows 10 index dup 5 get exch 3 get sub
+ /K -1 /EndOfBlock true /BlackIs1 true
+ .dicttomark /CCITTFaxEncode filter
+ % Stack: metrics bitmap cid font metstr buffer filter
+ dup 6 index writestring closefile
+ % Find the end of the data by scanning backwards for the RTC.
+ % There are 2 RTCs x 12 bits = 3 bytes to remove.
+ {
+ dup dup length 1 sub get 0 ne { exit } if
+ 0 1 index length 1 sub getinterval
+ } loop
+ 0 1 index length 3 sub getinterval
+ exch pop % metstr
+ } if
+ 1 index /CharStrings get 3 index 3 -1 roll put
+ pop pop pop pop
+} obind
+
+/removeall { % <type32font> removeall -
+ 0 65535 2 index removeglyphs pop
+} obind
+
+/.removeglyphs systemdict /.removeglyphs get
+systemdict /.removeglyphs .undef
+
+/removeglyphs { % <cid_min> <cid_max> <type32font> .removeglyphs -
+ 3 copy .removeglyphs
+ dup /CharStrings get dup {
+ % Stack: cidmin cidmax font CharStrings cid bitmap
+ pop dup 5 index ge { dup 4 index le { 2 copy undef } if } if pop
+ } forall pop pop pop pop
+} obind
+
+.dicttomark /ProcSet defineresource pop
+
+/.cidfonttypes where { pop } { /.cidfonttypes 6 dict def } ifelse
+.cidfonttypes begin
+
+4 % CIDFontType 4 = FontType 32
+{ dup /FontType 32 put
+ dup /CharStrings 20 dict put
+ 1 index exch .buildfont32 exch pop
+} bind def
+
+end % .cidfonttypes
+
+% Define the BuildGlyph procedure.
+% Since Type 32 fonts are indexed by CID, there is no BuildChar procedure.
+% The name %Type32BuildGlyph is known to the interpreter.
+(%Type32BuildGlyph) cvn { % <font> <cid> %Type32BuildGlyph -
+ 1 index /CharStrings get
+ % Stack: font cid CharStrings
+ dup 2 index .knownget
+ { exch pop } { 0 get } ifelse
+ % Stack: font cid cstr
+ dup //.getmetrics32 % use // because of .undef below
+ dup 14 gt {
+ 8 index 8 index 13 3 roll setcachedevice2
+ } {
+ 4 index 4 index 9 3 roll setcachedevice
+ } ifelse
+ % Stack: font cid cstr w h nmetrics llx lly
+ 6 -1 roll 4 -1 roll 1 index length 1 index sub getinterval
+ % Stack: font cid w h llx lly bitstr
+ dup () eq {
+ pop pop pop
+ } {
+ mark /Columns 6 index /Rows 7 index /K -1 /EndOfBlock false /BlackIs1 true
+ .dicttomark /CCITTFaxDecode filter 4 index 4 index true
+ % Stack: font cid w h llx lly filter w h true
+ [ 1 0 0 1 11 -2 roll exch neg exch neg ] 5 -1 roll imagemask
+ } ifelse
+ pop pop pop pop
+} bind def
+
+systemdict /.getmetrics32 .undef
+
+buildfontdict 32 /.buildfont32 cvx put
+
+32 dup /FontType defineresource pop
+
+.setlanguagelevel
diff --git a/Master/xemtex/gslib/gs_typ42.ps b/Master/xemtex/gslib/gs_typ42.ps
new file mode 100644
index 00000000000..4f48b1e58cf
--- /dev/null
+++ b/Master/xemtex/gslib/gs_typ42.ps
@@ -0,0 +1,45 @@
+% Copyright (C) 1996 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_typ42.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Type 42 font support code.
+
+% Here are the BuildChar and BuildGlyph implementation for Type 42 fonts.
+% The names %Type42BuildChar and %Type42BuildGlyph are known to the
+% interpreter. The real work is done in an operator:
+% <font> <code|name> <name> <glyphindex> .type42execchar -
+
+(%Type42BuildChar) cvn % <font> <code> %Type42BuildChar -
+ { 1 index /Encoding get 1 index get .type42build
+ } bind def
+(%Type42BuildGlyph) cvn % <font> <name> %Type42BuildGlyph -
+ { dup .type42build
+ } bind def
+/.type42build % <font> <code|name> <name> .type42build -
+ { 2 index begin
+ dup CharStrings exch .knownget not
+ { 2 copy eq { exch pop /.notdef exch } if
+ QUIET not
+ { (Substituting .notdef for ) print = flush }
+ { pop }
+ ifelse
+ /.notdef CharStrings /.notdef get
+ } if
+ end .type42execchar
+ } bind def
+
+% Register the font type for definefont.
+buildfontdict 42 /.buildfont42 cvx put
diff --git a/Master/xemtex/gslib/gs_type1.ps b/Master/xemtex/gslib/gs_type1.ps
new file mode 100644
index 00000000000..ab355e111f0
--- /dev/null
+++ b/Master/xemtex/gslib/gs_type1.ps
@@ -0,0 +1,183 @@
+% Copyright (C) 1994, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_type1.ps,v 1.5.2.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Type 1 font support code.
+
+% The standard representation for PostScript compatible fonts is described
+% in the book "Adobe Type 1 Font Format", published by Adobe Systems Inc.
+
+% Define an augmented version of .buildfont1 that inserts UnderlinePosition
+% and UnderlineThickness entries in FontInfo if they aren't there already,
+% and FontBBox isn't degenerate.
+% (This works around the incorrect assumption, made by many word processors,
+% that these entries are present in the built-in fonts.)
+/.buildfont1
+ {
+ false 1 index /FontBBox .knownget {
+ { 0 ne { not exit } if } forall
+ } if
+ { dup /FontInfo known not
+ { .growfontdict dup /FontInfo 2 dict put }
+ if
+ dup dup /FontInfo get dup dup
+ /UnderlinePosition known exch /UnderlineThickness known and
+ { pop pop % entries already present
+ }
+ { dup length 2 add dict .copydict
+ dup /UnderlinePosition known not
+ { dup /UnderlinePosition 3 index /FontBBox .knownget
+ { 1 get 2 div } % 1/2 the font descent
+ { -100 } ifelse put
+ }
+ if
+ dup /UnderlineThickness known not
+ { dup /UnderlineThickness 3 index /FontBBox .knownget
+ { dup 3 get exch 1 get sub 20 div } % 1/20 the font height
+ { 50 } ifelse put
+ }
+ if
+ 1 index /FontInfo get wcheck not { readonly } if
+ /FontInfo exch put
+ }
+ ifelse
+ } if
+ //.buildfont1
+ } bind def
+% If the diskfont feature isn't included, define a dummy .loadfontdict.
+/.loadfontdict where
+ { pop }
+ { /.loadfontdict 0 dict readonly def }
+ifelse
+/.loadfontfile % <file> .loadfontfile -
+ { mark exch
+ DISKFONTS { .loadfontdict begin } if
+ % In order to load fonts reliably, we should push systemdict
+ % here. However, Ed Taft says that Adobe implementations
+ % push userdict and nothing else!
+ % We really would just like systemdict on the stack,
+ % but fonts produced by Fontographer require a writable dictionary.
+ % However, we can't use any of the other well-known dictionaries
+ % (such as userdict), since the whole point of pushing systemdict
+ % is to make sure that nothing important has been redefined.
+ userdict begin
+ % We can't just use `run', because we want to check for .PFB files.
+ currentpacking
+ { false setpacking .loadfont1 true setpacking }
+ { .loadfont1 }
+ ifelse end
+ { stop } if
+ DISKFONTS { end } if
+ cleartomark
+ } bind def
+/.loadfont1 { % <file> .loadfont1 <errorflag>
+ { % We would like to use `false /PFBDecode filter',
+ % but this occasionally produces a whitespace character as
+ % the first of an eexec section, so we can't do it.
+ % Also, since the real input file never reaches EOF if we are using
+ % a PFBDecode filter (the filter stops just after reading the last
+ % character), we must explicitly close the real file in this case.
+ % Since the file might leave garbage on the operand stack,
+ % we have to create a procedure to close the file reliably.
+ dup read not { -1 } if
+ 2 copy unread 16#80 eq {
+ dup true /PFBDecode filter cvx
+ exch .currentresourcefile eq {
+ dup /.execasresource .systemvar
+ } {
+ {exec}
+ } ifelse
+ 2 index cvlit
+ /closefile .systemvar 3 .execn
+ } {
+ cvx exec
+ } ifelse
+ } stopped
+} bind def
+
+% Here are the BuildChar and BuildGlyph implementation for Type 1 fonts.
+% The names %Type1BuildChar and %Type1BuildGlyph are known to the interpreter.
+% The real work is done in an operator:
+% <font> <code|name> <name> <charstring> .type1execchar -
+
+(%Type1BuildChar) cvn { % <font> <code> %Type1BuildChar -
+ 1 index /Encoding get 1 index get .type1build .type1execchar
+} bind def
+(%Type1BuildGlyph) cvn { % <font> <name> %Type1BuildGlyph -
+ dup .type1build .type1execchar
+} bind def
+% Note: this procedure is used for both Type 1 and Type 2 fonts.
+/.type1build { % <font> <code|name> <name> .type1build
+ % <font> <code|name> <name> <charstring>
+ 2 index begin
+ dup CharStrings exch .knownget not {
+ 2 copy eq { exch pop /.notdef exch } if
+ QUIET not
+ { (Substituting .notdef for ) print = flush }
+ { pop }
+ ifelse
+ /.notdef CharStrings /.notdef get
+ } if
+ end
+} bind def
+% CCRun is an undocumented procedure provided for Type 4 and Type 0 fonts.
+1183615869 internaldict begin
+% Apparently there are two different argument lists for CCRun.
+% Handling the one with the extra Private dictionary requires fabricating
+% a Type 1 font on the fly, since we aren't currently prepared to parse the
+% dictionary any other way.
+/CCRun { % <font> <code|name> <charstring> CCRun -
+ % <font> <code|name> <charstring> <Private> CCRun -
+ dup type /dicttype eq {
+ dup 4 index /Private .knownget { ne } { pop true } ifelse {
+ % The Private dictionary was supplied, and is different
+ % from the Private dictionary of the font. Fabricate a
+ % Type 1 font with this Private dictionary. Most of the
+ % font entries are arbitrary or not needed.
+ .currentglobal false .setglobal 10 dict exch .setglobal begin
+ /Private exch def
+ /FontType 1 def
+ /FontMatrix 3 index /FontMatrix get def
+ /Encoding 3 index /Encoding .knownget not { StandardEncoding } if def
+ /FontBBox 3 index /FontBBox .knownget not { {0 0 0 0} } if def
+ /PaintType 0 def
+ /CharStrings 1 dict dup /.notdef () put def
+ 3 -1 roll pop () currentdict end .buildfont1 exch pop 3 1 roll
+ } {
+ pop
+ } ifelse
+ } if
+ 1 index dup type /integertype eq {
+ 3 index /Encoding get exch get
+ } if exch .type1execchar
+} bind def
+end
+
+% Register the font types for definefont.
+buildfontdict 1 /.buildfont1 cvx put
+buildfontdict 4 /.buildfont4 cvx put
+
+% Add Type 2 support if applicable.
+/.buildfont2 where not { (%END2) .skipeof } if
+pop
+(%Type2BuildChar) cvn { % <font> <code> %Type2BuildChar -
+ 1 index /Encoding get 1 index get .type1build .type2execchar
+} bind def
+(%Type2BuildGlyph) cvn { % <font> <name> %Type2BuildGlyph -
+ dup .type1build .type2execchar
+} bind def
+buildfontdict 2 /.buildfont2 cvx put
+%END2
diff --git a/Master/xemtex/gslib/gs_wan_e.ps b/Master/xemtex/gslib/gs_wan_e.ps
new file mode 100644
index 00000000000..9fe2ff2227b
--- /dev/null
+++ b/Master/xemtex/gslib/gs_wan_e.ps
@@ -0,0 +1,47 @@
+% Copyright (C) 1994, 1996, 1997, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_wan_e.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Define the WinAnsi encoding vector.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/WinAnsiEncoding
+ISOLatin1Encoding 0 39 getinterval aload pop
+ /quotesingle
+ISOLatin1Encoding 40 5 getinterval aload pop
+ /hyphen
+ISOLatin1Encoding 46 50 getinterval aload pop
+ /grave
+ISOLatin1Encoding 97 30 getinterval aload pop
+ /bullet
+% \20x
+ % NOTE: /Euro, /Zcaron, and /zcaron are new for PDF 1.3.
+ % We may have to take them out for backward compatibility.
+ /Euro /bullet /quotesinglbase /florin
+ /quotedblbase /ellipsis /dagger /daggerdbl
+ /circumflex /perthousand /Scaron /guilsinglleft
+ /OE /bullet /Zcaron /bullet
+ /bullet /quoteleft /quoteright /quotedblleft
+ /quotedblright /bullet /endash /emdash
+ /tilde /trademark /scaron /guilsinglright
+ /oe /bullet /zcaron /Ydieresis
+ISOLatin1Encoding 160 96 getinterval aload pop
+256 packedarray
+4 1 index .registerencoding
+.defineencoding
+exec
diff --git a/Master/xemtex/gslib/gs_wl1_e.ps b/Master/xemtex/gslib/gs_wl1_e.ps
new file mode 100644
index 00000000000..10f95141ee9
--- /dev/null
+++ b/Master/xemtex/gslib/gs_wl1_e.ps
@@ -0,0 +1,67 @@
+% Copyright (C) 1996 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_wl1_e.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Define the Windows 3.1 Latin 1 encoding vector (H-P Symbol set 19U).
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/Win31Latin1Encoding
+ISOLatin1Encoding 0 39 getinterval aload pop
+ /quotesingle
+ISOLatin1Encoding 40 5 getinterval aload pop
+ /hyphen
+ISOLatin1Encoding 46 50 getinterval aload pop
+ /grave
+ISOLatin1Encoding 97 30 getinterval aload pop
+ /graybox
+% \20x
+ /.notdef /.notdef /quotesinglbase /florin
+ /quotedblbase /ellipsis /dagger /daggerdbl
+ /circumflex /perthousand /Scaron /guilsinglleft
+ /OE /.notdef /.notdef /.notdef
+ /.notdef /quoteleft /quoteright /quotedblleft
+ /quotedblright /bullet /endash /emdash
+ /tilde /trademark /scaron /guilsinglright
+ /oe /.notdef /.notdef /Ydieresis
+ /.notdef /exclamdown /cent /sterling
+ /currency /yen /brokenbar /section
+ /dieresis /copyright /ordfeminine /guillemotleft
+ /logicalnot /softhyphen /registered /overscore
+ /degree /plusminus /twosuperior /threesuperior
+ /acute /mu /paragraph /periodcentered
+ /cedilla /onesuperior /ordmasculine /guillemotright
+ /onequarter /onehalf /threequarters /questiondown
+% \30x
+ /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
+256 packedarray .defineencoding
+exec
diff --git a/Master/xemtex/gslib/gs_wl2_e.ps b/Master/xemtex/gslib/gs_wl2_e.ps
new file mode 100644
index 00000000000..0d168e8422d
--- /dev/null
+++ b/Master/xemtex/gslib/gs_wl2_e.ps
@@ -0,0 +1,67 @@
+% Copyright (C) 1996 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_wl2_e.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Define the Windows 3.1 Latin 2 encoding vector (H-P Symbol set 9E).
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/Win32Latin2Encoding
+ISOLatin1Encoding 0 39 getinterval aload pop
+ /quotesingle
+ISOLatin1Encoding 40 5 getinterval aload pop
+ /hyphen
+ISOLatin1Encoding 46 50 getinterval aload pop
+ /grave
+ISOLatin1Encoding 97 30 getinterval aload pop
+ /graybox
+% \20x
+ /.notdef /.notdef /quotesinglbase /.notdef
+ /quotedblbase /ellipsis /dagger /daggerdbl
+ /.notdef /perthousand /Scaron /guilsinglleft
+ /Sacute /Tcaron /Zcaron /Zacute
+ /.notdef /quoteleft /quoteright /quotedblleft
+ /quotedblright /bullet /endash /emdash
+ /.notdef /trademark /scaron /guilsinglright
+ /sacute /tcaron /zcaron /zacute
+ /.notdef /caron /breve /Lslash
+ /currency /Aogonek /brokenbar /section
+ /dieresis /copyright /Scedilla /guillemotleft
+ /logicalnot /softhyphen /registered /Zdotaccent
+ /degree /plusminus /ogonek /lslash
+ /acute /mu /paragraph /periodcentered
+ /cedilla /aogonek /scedilla /guillemotright
+ /Lcaron /hungarumlaut /lcaron /zdotaccent
+% \30x
+ /Racute /Aacute /Acircumflex /Abreve
+ /Adieresis /Lacute /Cacute /Ccedilla
+ /Ccaron /Eacute /Eogonek /Edieresis
+ /Ecaron /Iacute /Icircumflex /Dcaron
+ /Dcroat /Nacute /Ncaron /Oacute
+ /Ocircumflex /Ohungarumlaut /Odieresis /multiply
+ /Rcaron /Uring /Uacute /Uhungarumlaut
+ /Udieresis /Yacute /Tcommaaccent /germandbls
+ /racute /aacute /acircumflex /abreve
+ /adieresis /lacute /cacute /ccedilla
+ /ccaron /eacute /eogonek /edieresis
+ /ecaron /iacute /icircumflex /dcaron
+ /dcroat /nacute /ncaron /oacute
+ /ocircumflex /ohungarumlaut /odieresis /divide
+ /rcaron /uring /uacute /uhungarumlaut
+ /udieresis /yacute /tcommaaccent /dotaccent
+256 packedarray .defineencoding
+exec
diff --git a/Master/xemtex/gslib/gs_wl5_e.ps b/Master/xemtex/gslib/gs_wl5_e.ps
new file mode 100644
index 00000000000..98bdd470238
--- /dev/null
+++ b/Master/xemtex/gslib/gs_wl5_e.ps
@@ -0,0 +1,67 @@
+% Copyright (C) 1996 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gs_wl5_e.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Define the Windows 3.1 Latin 5 encoding vector (H-P Symbol set 5T).
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/Win32Latin5Encoding
+ISOLatin1Encoding 0 39 getinterval aload pop
+ /quotesingle
+ISOLatin1Encoding 40 5 getinterval aload pop
+ /hyphen
+ISOLatin1Encoding 46 50 getinterval aload pop
+ /grave
+ISOLatin1Encoding 97 30 getinterval aload pop
+ /graybox
+% \20x
+ /.notdef /.notdef /quotesinglbase /florin
+ /quotedblbase /ellipsis /dagger /daggerdbl
+ /circumflex /perthousand /Scaron /guilsinglleft
+ /OE /.notdef /.notdef /.notdef
+ /.notdef /quoteleft /quoteright /quotedblleft
+ /quotedblright /bullet /endash /emdash
+ /tilde /trademark /scaron /guilsinglright
+ /oe /.notdef /.notdef /Ydieresis
+ /.notdef /exclamdown /cent /sterling
+ /currency /yen /brokenbar /section
+ /dieresis /copyright /ordfeminine /guillemotleft
+ /logicalnot /softhyphen /registered /overscore
+ /degree /plusminus /twosuperior /threesuperior
+ /acute /mu /paragraph /periodcentered
+ /cedilla /onesuperior /ordmasculine /guillemotright
+ /onequarter /onehalf /threequarters /questiondown
+% \30x
+ /Agrave /Aacute /Acircumflex /Atilde
+ /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+ /Gbreve /Ntilde /Ograve /Oacute
+ /Ocircumflex /Otilde /Odieresis /multiply
+ /Oslash /Ugrave /Uacute /Ucircumflex
+ /Udieresis /Idotaccent /Scedilla /germandbls
+ /agrave /aacute /acircumflex /atilde
+ /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+ /gbreve /ntilde /ograve /oacute
+ /ocircumflex /otilde /odieresis /divide
+ /oslash /ugrave /uacute /ucircumflex
+ /udieresis /dotlessi /scedilla /ydieresis
+256 packedarray .defineencoding
+exec
diff --git a/Master/xemtex/gslib/gsbj b/Master/xemtex/gslib/gsbj
new file mode 100644
index 00000000000..3146b555dff
--- /dev/null
+++ b/Master/xemtex/gslib/gsbj
@@ -0,0 +1,3 @@
+#!/bin/sh
+# $Id: gsbj,v 1.1 2000/03/09 08:40:40 lpd Exp $
+exec gs -q -sDEVICE=bj10e -r180 -dNOPAUSE -sPROGNAME=$0 -- gslp.ps --heading-center "`date`" "$@"
diff --git a/Master/xemtex/gslib/gsbj.bat b/Master/xemtex/gslib/gsbj.bat
new file mode 100644
index 00000000000..6769ea304d8
--- /dev/null
+++ b/Master/xemtex/gslib/gsbj.bat
@@ -0,0 +1,5 @@
+@echo off
+@rem $Id: gsbj.bat,v 1.2 2000/05/20 20:53:05 lpd Exp $
+
+call gssetgs.bat
+%GSC% -q -sDEVICE=bj10e -r180 -dNOPAUSE -sPROGNAME=gsbj -- gslp.ps %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/Master/xemtex/gslib/gsdj b/Master/xemtex/gslib/gsdj
new file mode 100644
index 00000000000..9f3e200f622
--- /dev/null
+++ b/Master/xemtex/gslib/gsdj
@@ -0,0 +1,3 @@
+#!/bin/sh
+# $Id: gsdj,v 1.1 2000/03/09 08:40:40 lpd Exp $
+exec gs -q -sDEVICE=deskjet -r300 -dNOPAUSE -sPROGNAME=$0 -- gslp.ps --heading-center "`date`" "$@"
diff --git a/Master/xemtex/gslib/gsdj.bat b/Master/xemtex/gslib/gsdj.bat
new file mode 100644
index 00000000000..c281323246b
--- /dev/null
+++ b/Master/xemtex/gslib/gsdj.bat
@@ -0,0 +1,5 @@
+@echo off
+@rem $Id: gsdj.bat,v 1.2 2000/05/20 20:53:05 lpd Exp $
+
+call gssetgs.bat
+%GSC% -q -sDEVICE=deskjet -r300 -dNOPAUSE -sPROGNAME=gsdj -- gslp.ps %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/Master/xemtex/gslib/gsdj500 b/Master/xemtex/gslib/gsdj500
new file mode 100644
index 00000000000..01f546a1139
--- /dev/null
+++ b/Master/xemtex/gslib/gsdj500
@@ -0,0 +1,3 @@
+#!/bin/sh
+# $Id: gsdj500,v 1.1 2000/03/09 08:40:40 lpd Exp $
+exec gs -q -sDEVICE=djet500 -r300 -dNOPAUSE -sPROGNAME=$0 -- gslp.ps --heading-center "`date`" "$@"
diff --git a/Master/xemtex/gslib/gsdj500.bat b/Master/xemtex/gslib/gsdj500.bat
new file mode 100644
index 00000000000..830717b090c
--- /dev/null
+++ b/Master/xemtex/gslib/gsdj500.bat
@@ -0,0 +1,5 @@
+@echo off
+@rem $Id: gsdj500.bat,v 1.2 2000/05/20 20:53:05 lpd Exp $
+
+call gssetgs.bat
+%GSC% -q -sDEVICE#djet500 -r300 -dNOPAUSE -sPROGNAME=gsdj500 -- gslp.ps %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/Master/xemtex/gslib/gslj b/Master/xemtex/gslib/gslj
new file mode 100644
index 00000000000..21a9f22f63a
--- /dev/null
+++ b/Master/xemtex/gslib/gslj
@@ -0,0 +1,3 @@
+#!/bin/sh
+# $Id: gslj,v 1.1 2000/03/09 08:40:40 lpd Exp $
+exec gs -q -sDEVICE=laserjet -r300 -dNOPAUSE -sPROGNAME=$0 -- gslp.ps --heading-center "`date`" "$@"
diff --git a/Master/xemtex/gslib/gslj.bat b/Master/xemtex/gslib/gslj.bat
new file mode 100644
index 00000000000..1009da8f9d2
--- /dev/null
+++ b/Master/xemtex/gslib/gslj.bat
@@ -0,0 +1,5 @@
+@echo off
+@rem $Id: gslj.bat,v 1.2 2000/05/20 20:53:05 lpd Exp $
+
+call gssetgs.bat
+%GSC% -q -sDEVICE=laserjet -r300 -dNOPAUSE -sPROGNAME=gslj -- gslp.ps %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/Master/xemtex/gslib/gslp b/Master/xemtex/gslib/gslp
new file mode 100644
index 00000000000..cb01cbf5054
--- /dev/null
+++ b/Master/xemtex/gslib/gslp
@@ -0,0 +1,3 @@
+#!/bin/sh
+# $Id: gslp,v 1.1 2000/03/09 08:40:40 lpd Exp $
+exec gs -q -sDEVICE=epson -r180 -dNOPAUSE -sPROGNAME=$0 -- gslp.ps --heading-center "`date`" "$@"
diff --git a/Master/xemtex/gslib/gslp.bat b/Master/xemtex/gslib/gslp.bat
new file mode 100644
index 00000000000..3a9a415020b
--- /dev/null
+++ b/Master/xemtex/gslib/gslp.bat
@@ -0,0 +1,5 @@
+@echo off
+@rem $Id: gslp.bat,v 1.2 2000/05/20 20:53:05 lpd Exp $
+
+call gssetgs.bat
+%GSC% -q -sDEVICE=epson -r180 -dNOPAUSE -sPROGNAME=gslp -- gslp.ps %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/Master/xemtex/gslib/gslp.ps b/Master/xemtex/gslib/gslp.ps
new file mode 100644
index 00000000000..64147ab6828
--- /dev/null
+++ b/Master/xemtex/gslib/gslp.ps
@@ -0,0 +1,695 @@
+% Copyright (C) 1991, 1995, 1996, 1997, 1998, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gslp.ps,v 1.2.6.2.2.1 2003/04/12 14:02:38 giles Exp $
+% gslp.ps - format and print text
+
+% This utility provides functionality approximately equivalent to the Unix
+% `enscript' program. It prints plain text files using a single font.
+% It currently handles tabs and formfeeds, but not backspaces.
+% It will line-wrap when using fixed-pitch fonts.
+% It will also do kerning and width adjustment.
+% Standard switches implemented:
+% -12BclqRr -b<header> -f<font> -F<hfont> -L<lines> -p<outfile>
+% Sun switches implemented:
+% -T<n> set tab width
+% Switches ignored:
+% -GghKkmow -# -C -d -J -n -P -S -s -t -v
+% Switches added:
+% --add-to-space <units>
+% add the given number of 1/72" units to the width of each
+% space (may be negative)
+% --add-to-width <units>
+% add the given number of 1/72" units to the width of each
+% character (may be negative)
+% --columns <n>
+% print in <n> columns
+% --detect
+% treat the file as PostScript if it starts with %!
+% --first-page <n>
+% start printing at page <n>
+% --kern <file.afm>
+% kern using information from the given .AFM file
+% --last-page <n>
+% stop printing after page <n>
+% --(heading|footing)-(left|center|right) <string>
+% set the heading/footing fields; use -B first to clear
+% --margin-(top|bottom|left|right) <inches>
+% set a margin
+% --no-eject-(file|formfeed)
+% end-of-file/FF only starts a new column, not a new sheet
+% --spacing <n>
+% use double (n=2), triple (n=3), etc. spacing
+% Also, the string %# in a heading or footing is replaced with the page #.
+/PageNumberString (%#) def
+
+/lpdict 150 dict def
+lpdict begin
+
+% build iso-latin-1 version of a font
+/font-to-iso-latin-1 { % <font> font-to-iso-latin-1 <font>
+ %% reencode for iso latin1; from the 2nd edition red book, sec 5.6.1
+ dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding ISOLatin1Encoding def currentdict end
+ dup /FontName get 80 string cvs (-ISOLatin1) concatstrings cvn
+ exch definefont
+} def
+
+/find-latin-font { % <name> find-latin-font <font>
+ findfont font-to-iso-latin-1
+} def
+
+% Define the initial values of the printing parameters.
+
+/AddToSpace 0 def
+/AddToWidth 0 def
+/BodyFont null def % use default
+ /defaultBodyFontPortrait
+ /Courier find-latin-font 10 scalefont def
+ /defaultBodyFontLandscape
+ /Courier find-latin-font 7 scalefont def
+ /defaultBodyFont
+ { Landscape { defaultBodyFontLandscape } { defaultBodyFontPortrait } ifelse } def
+/Columns 1 def
+/DetectFileType false def
+/EjectEOF true def
+/EjectFF true def
+/Footers false def
+/FootingLeft () def
+/FootingCenter () def
+/FootingRight () def
+/Headers true def
+/HeadingLeft () def
+/HeadingCenter () def
+/HeadingRight (page ) PageNumberString concatstrings def
+/HeadingFont null def % use default
+ /defaultHeadingFont
+ /Courier-Bold find-latin-font 10 scalefont def
+/Kern 0 dict def % no kerning
+/Landscape false def
+/MarginBottom 36 def % 1/2"
+/MarginLeft 36 def % 1/2"
+/MarginRight 36 def % 1/2"
+/MarginTop 36 def % 1/2"
+/MaxLines 9999 def % max lines per page
+/Noisy true def % i.e., not quiet
+/OutFile null def % null = write directly to device
+/PageFirst 1 def
+/PageLast 99999 def
+/Spacing 1 def
+/Tab 8 def
+/Truncate false def % wrap long lines, don't truncate
+
+% When writing to a file, we want to write out PostScript;
+% when writing to the printer, we want to execute it;
+% some commands should be executed regardless.
+% lpexec provides for all this.
+
+/lpdef { % <name> <value> lpdef -
+ /def 2 true lpexec
+} def
+
+/lpexec { % <arg1> ... <argn> </op> <n> <do_always> lpexec -
+ OutFile null eq {
+ pop 1 add true
+ } {
+ /t exch def 1 add /n exch def cvx
+ n -1 roll dup wo
+ n 1 sub { n -1 roll dup wosp } repeat
+ (\n) ws n t
+ } ifelse
+ { pop load exec }
+ { { pop } repeat }
+ ifelse
+} def
+
+/lpmoveto { % <x> <y> lpmoveto -
+ % Round the coordinates for smaller output.
+ 2 {
+ exch 100 mul round 100 div
+ dup dup cvi eq { cvi } if
+ } repeat
+ 1 index X eq { neg exch pop /V 1 } { neg /M 2 } ifelse true lpexec
+} def
+/lpshow { % <string> lpshow -
+ dup length 0 ne {
+ addspace 0 ne {
+ addspace 0 32
+ addwidth 0 ne {
+ addwidth 0 6 -1 roll /awidthshow 6 true lpexec
+ } {
+ 4 -1 roll /widthshow 4 true lpexec
+ } ifelse
+ } {
+ addwidth 0 ne {
+ addwidth 0 3 -1 roll /ashow 3 true lpexec
+ } {
+ OutFile null ne {
+ dup dup length =string length gt {
+ /show 1 false lpexec
+ } {
+ (S ) ws ws (\n) ws
+ } ifelse
+ } if show
+ } ifelse
+ } ifelse
+ } {
+ pop
+ } ifelse
+} def
+/lpsetmyfont {
+ dup load setfont
+ OutFile null ne { cvx /setfont 1 false lpexec } { pop } ifelse
+} def
+
+% Define some utility procedures.
+
+/banner % ypos left center right
+ { /HFont lpsetmyfont
+ /addspace 0 def /addwidth 0 def
+ /pairkern 0 dict def
+ 3 -1 roll bannerstring pop 0 4 index pwidth showline2 pop
+ exch bannerstring pwidth exch sub 2 div 3 index pwidth showline2 pop
+ bannerstring
+ % Prevent the last character of the heading from grazing
+ % the right margin.
+ % ****** WHY DOES IT REQUIRE SO MUCH PADDING? ******
+ ( ) stringwidth pop 2 mul add
+ pwidth exch sub
+ 3 -1 roll pwidth showline2 pop
+ } def
+
+/bannerstring % string -> string width
+ { PageNumberString search
+ { exch pop pindex 4 string cvs concatstrings exch concatstrings
+ }
+ if dup stringwidth pop
+ } def
+
+/beginpage
+ { /lindex 0 def
+ /skipping pindex PageFirst ge pindex PageLast le and not def
+ pagex pagey Landscape {/BL} {/B} ifelse 2 true lpexec
+ /pagesave exch def
+ skipping { nulldevice /OutFile null def } if
+ Headers
+ { lheight hdescent add
+ HeadingLeft HeadingCenter HeadingRight banner
+ } if
+ /BFont lpsetmyfont
+ /pairkern Kern def
+ /addspace AddToSpace def /addwidth AddToWidth def
+ pairkern length 0 ne {
+ /addspace AddToSpace lpdef /addwidth AddToWidth lpdef
+ } if
+ } def
+
+/endpage {
+ lindex 0 ne {
+ Footers {
+ topskip plength sub hdescent add
+ FootingLeft FootingCenter FootingRight banner
+ } if
+ /E
+ } {
+ /restore
+ } ifelse
+ pagesave exch 0 true lpexec
+ /pindex pindex 1 add def
+} def
+
+/endcolumn
+ { lindex colines 1 sub add colines idiv colines mul
+ dup llength ge { pop endpage beginpage } { /lindex exch def } ifelse
+ } def
+
+/fontheight % <font> fontheight <ascent> <height>
+ { gsave setfont
+ newpath 0 0 moveto
+ (|^_j) false charpath
+ pathbbox exch pop dup 2 index sub 4 -2 roll pop pop
+ grestore exch 1.25 mul exch 1.25 mul
+ } def
+
+/wdict {
+ dup length wosp ( dict\n) ws
+ { (dup) ws exch wosp wosp ( put\n) ws } forall
+} def
+/wosp { ( ) ws wo } def
+/wo {
+ dup type /dicttype eq { wdict } { OutFile exch write==only } ifelse
+} def
+/ws {
+ OutFile exch writestring
+} def
+
+/outfont { % <name> <font> outfont -
+ OutFile null ne {
+ exch wo
+ dup /FontName get
+ dup wosp (-ISOLatin1) ws wosp ( RE) ws
+ /FontMatrix get 0 get 1000 mul round cvi wosp
+ ( scalefont def\n) ws
+ } {
+ pop pop
+ }ifelse
+} def
+
+/StringFF (\f) def
+/CharFF StringFF 0 get def
+/StringTAB (\t) def
+/CharTAB StringTAB 0 get def
+
+/showline % line -> leftover_line (handles \f)
+ { { showline1 dup length 0 eq { exit } if
+ dup 0 get CharFF ne { exit } if
+ EjectFF { endpage beginpage } { endcolumn } ifelse
+ skip1
+ }
+ loop
+ } def
+
+/showline1 % line -> leftover_line (handles page break)
+ { lindex llength eq { endpage beginpage } if
+ lindex colines idiv cowidth mul % x
+ lindex colines mod 1 add lheight mul neg fascent sub % y
+ 1 index cowidth add
+ showline2
+ /lindex lindex 1 add def
+ } def
+
+/setxy {
+ /ty exch def /tx exch def
+} def
+
+/showline2 { % string x y xlimit -> leftover_string (handles tabs)
+ 2 index exch 5 2 roll setxy {
+ % Stack: xinit xlimit string
+ showline3 dup length 0 eq { exit } if
+ dup 0 get CharTAB ne { exit } if
+ tx 3 index sub tabwx div
+ 0.05 add ceiling tabwx mul 3 index add ty setxy
+ skip1
+ tx 2 index ge { exit } if
+ } loop exch pop exch pop
+} def
+
+/showline3 { % xlimit string -> xlimit leftover_string
+ % (finds line break / tab / formfeed)
+ 1 index tx sub
+ cwx div 0.1 add cvi 0 .max 1 index length .min
+ 1 index 0 3 -1 roll getinterval
+ % look for \f or \t
+ StringFF search { exch pop exch pop } if
+ StringTAB search { exch pop exch pop } if
+ dup length 0 ne {
+ tx ty lpmoveto
+ dup pairkern length 0 eq {
+ lpshow
+ } {
+ { kproc } exch /kshow 2 true lpexec
+ } ifelse
+ currentpoint setxy
+ } if
+ length dup 2 index length exch sub getinterval
+} def
+
+/kproc { % <char1> <char2> kproc -
+ pairkern currentfont /Encoding get 3 index get
+ 2 copy known {
+ get currentfont /Encoding get 2 index get
+ 2 copy known {
+ get currentfont /FontMatrix get 0 get mul
+ } {
+ pop pop 0
+ } ifelse
+ } {
+ pop pop 0
+ } ifelse
+ addwidth add 2 index 32 eq { addspace add } if
+ dup 0 eq { pop } { 0 rmoveto } ifelse
+ pop pop
+} def
+
+/skip1
+ { dup length 1 sub 1 exch getinterval
+ } def
+
+/e== { % <object> e== - -- print an object to stderr
+ (%stderr) (w) file dup 3 -1 roll write==only flushfile
+} def
+
+/eprint { % <string> eprint - -- print a string to stderr
+ (%stderr) (w) file dup 3 -1 roll writestring flushfile
+} def
+
+% Read kerning information from a .AFM file.
+
+/readkern { % <afmfile> readkern <pairkerndict>
+ /mfilename 1 index def
+ (r) file /mfile exch def
+ mfile =string readline pop
+ (StartFontMetrics ) anchorsearch {
+ pop pop
+ /kdict 256 dict def
+ { mfile =string readline pop
+ (EndFontMetrics) anchorsearch { pop pop exit } if
+ (KPX ) anchorsearch {
+ pop token pop cvlit /char1 exch def
+ token pop cvlit /char2 exch def
+ token pop /kern exch def pop
+ kdict char1 .knownget not {
+ 5 dict kdict char1 2 index .growput
+ } if
+ char2 kern .growput
+ } {
+ pop
+ } ifelse
+ } loop kdict
+ } {
+ pop
+ mfilename eprint ( does not begin with StartFontMetrics.\n) eprint
+ 0 dict
+ } ifelse
+ mfile closefile
+} def
+
+% The main printing procedure
+
+/doFirst true def
+/prevBFont null def
+/prevHFont null def
+
+/lpfirst { % - lpfirst -
+% Define some abbreviating procedures.
+ /B {save 3 1 roll translate /X 0 def} lpdef
+ /BL {save 3 1 roll 90 rotate translate /X 0 def} lpdef
+ /E {showpage restore} lpdef
+ /V {neg X exch moveto} lpdef
+ /M {/X 2 index def neg moveto} lpdef
+ /S {currentfile =string readline pop show} lpdef
+ /RE { % <isoname> <fontname> RE <font>
+ findfont
+ %% reencode for iso latin1; from the 2nd edition red book, sec 5.6.1
+ dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding ISOLatin1Encoding def currentdict end
+ definefont
+ } lpdef
+} def
+
+/lp { % file initial_chars ->
+ /lpline exch def
+ /lpfile exch def
+
+ doFirst { lpfirst /doFirst false def } if
+
+% Initialize the device and fonts.
+ /BFont
+ BodyFont null eq { defaultBodyFont } { BodyFont } ifelse def
+ BFont prevBFont ne {
+ /BFont BFont outfont
+ /prevBFont BFont def
+ } if
+ Headers Footers or {
+ /HFont
+ HeadingFont null eq { defaultHeadingFont } { HeadingFont } ifelse def
+ HFont prevHFont ne {
+ /HFont HFont outfont
+ /prevHFont HFont def
+ } if
+ } if
+ save
+
+% Get the layout parameters.
+ clippath
+ gsave % for possible rotation
+ Landscape { 90 rotate } if
+ BFont setfont ( ) stringwidth pop /cwx exch def
+ cwx Tab mul /tabwx exch def
+ BFont fontheight /fheight exch def /fascent exch def
+ Headers Footers or { HFont fontheight } { 0 0 } ifelse
+ /hheight exch def /hascent exch def
+ /hdescent hheight hascent sub def
+ fheight Spacing mul /lheight exch def
+ Headers { hheight lheight add } { 0 } ifelse
+ /topskip exch def
+ Footers { hheight lheight add } { 0 } ifelse
+ /botskip exch def
+ /pskip topskip botskip add def
+ % Translate the page so that (0,0) corresponds to
+ % the top of the topmost body line.
+ pathbbox
+ 2 index sub MarginBottom MarginTop add sub /plength exch def
+ 2 index sub MarginLeft MarginRight add sub /pwidth exch def
+ pwidth Columns div /cowidth exch def
+ exch MarginLeft add
+ exch MarginBottom add plength add topskip sub
+ /pagey exch def /pagex exch def
+ plength pskip sub lheight div cvi MaxLines .min
+ dup /colines exch def
+ Columns mul /llength exch def
+ grestore
+ OutFile null ne { nulldevice } if
+
+% Print layout
+ Noisy
+ { (Page height = ) eprint llength e==
+ (.\n) eprint flush
+ } if
+
+% Write the kerning table, if relevant.
+ OutFile null ne Kern length 0 ne and {
+ (/kproc) ws /kproc load wosp ( def\n) ws
+ (/pairkern) ws Kern wosp ( def\n) ws
+ } if
+
+% Disable stack recording so we can use stopped with readline.
+ $error /recordstacks false put
+
+% Initialize for the first page.
+ /lbuf 1000 string def
+ /pindex 1 def
+ beginpage
+
+% Iterate through the file.
+ lpline
+ { dup length /pos exch def
+ lbuf exch 0 exch putinterval
+ { lpfile lbuf pos lbuf length pos sub getinterval readline } stopped
+ { % Filled the line before a CR or EOF.
+ exch pop showline
+ }
+ { % Reached CR and/or EOF first.
+ exch length pos add lbuf exch 0 exch getinterval
+ 1 index { showline } if % omit final empty line
+ { dup length 0 eq Truncate or { pop () exit } if
+ showline
+ }
+ loop
+ exch not { exit } if
+ }
+ ifelse
+ } loop
+ pop
+
+% Wrap up.
+%**************** WHY IS THIS COMMENTED OUT? ****************
+% EjectEOF { endpage } { endcolumn } ifelse
+ endpage
+ restore
+
+} def
+
+end
+
+% Usage: <file> lp
+% prints <file> using the current parameter settings.
+% Usage: [ <arg1> ... <argn> ] lpcommand
+% interprets args like a command line.
+
+/lp { save lpdict begin () lp end restore } def
+
+lpdict begin
+
+/splitfn % (FontNNN) -> <font>
+ { dup /arg exch def length
+ { dup 0 le { exit } if
+ dup 1 sub arg exch get dup 48 ge exch 59 le and not { exit } if
+ 1 sub
+ } loop
+ arg exch 0 exch getinterval dup cvn find-latin-font
+ exch arg exch anchorsearch pop pop cvr scalefont
+ } def
+
+% Parse the command line switches.
+
+/doswitch % argn ... arg1 (-?) restofswitch ->
+ { exch dup cvn lpdict exch known
+ { cvn load exec }
+ { exch pop (Unknown switch: ) eprint eprint (\n) eprint }
+ ifelse
+ } def
+
+/more % argn ... arg1 restofswitch ->
+ { dup length 0 ne
+ { (- ) dup 1 3 index 0 get put
+ exch dup length 1 sub 1 exch getinterval
+ doswitch
+ }
+ { pop
+ }
+ ifelse
+ } def
+
+/-- { (--) exch concatstrings
+ dup cvn lpdict exch known
+ { cvn load exec }
+ { (Unknown switch: ) eprint eprint (\n) eprint }
+ ifelse
+ } def
+/--add-to-space { cvr /AddToSpace exch def } def
+/--add-to-width { cvr /AddToWidth exch def } def
+/--columns { cvi 1 .max /Columns exch def } def
+/--detect { /DetectFileType true def } def
+/--first-page { cvi /PageFirst exch def } def
+/--footing-center { /FootingCenter exch def /Footers true def } def
+/--footing-left { /FootingLeft exch def /Footers true def } def
+/--footing-right { /FootingRight exch def /Footers true def} def
+/--heading-center { /HeadingCenter exch def /Headers true def } def
+/--heading-left { /HeadingLeft exch def /Headers true def } def
+/--heading-right { /HeadingRight exch def /Headers true def } def
+/--kern { readkern /Kern exch def } def
+/--last-page { cvi /PageLast exch def } def
+/--margin-bottom { cvr 72.0 mul /MarginBottom exch def } def
+/--margin-left { cvr 72.0 mul /MarginLeft exch def } def
+/--margin-right { cvr 72.0 mul /MarginRight exch def } def
+/--margin-top { cvr 72.0 mul /MarginTop exch def } def
+/--no-eject-file { /EjectEOF false def } def
+/--no-eject-formfeed { /EjectFF false def } def
+/--spacing { cvr /Spacing exch def } def
+
+/-# { pop } def % ignore
+/-+ { -- } def
+(-1)cvn { /Columns 1 def more } def
+(-2)cvn { /Columns 2 def more } def
+/-b { /HeadingLeft exch def /HeadingCenter () def /HeadingRight PageNumberString def
+ /Headers true def
+ /break true def
+ } def
+/-B { /HeadingLeft () def /HeadingCenter () def /HeadingRight () def
+ /Headers false def
+ /FootingLeft () def /FootingCenter () def /FootingRight () def
+ /Footers false def
+ /break true def
+ more
+ } def
+/-C { pop } def % ignore
+/-c { /Truncate true def more } def
+/-d { pop } def % ignore
+/-f { splitfn /BodyFont exch def } def
+/-F { splitfn /HeadingFont exch def } def
+/-G { more } def % ignore
+/-g { more } def % ignore
+/-h { more } def % ignore
+/-J { pop } def % ignore
+/-K { more } def % ignore
+/-k { more } def % ignore
+/-l { 66 -L -B } def
+/-L { cvi /MaxLines exch def } def
+/-m { more } def % ignore
+/-n { pop } def % ignore
+/-o { more } def % ignore
+/-p { (w) file /OutFile exch def OutFile (%!\n) writestring } def
+/-P { pop } def % ignore
+/-q { /Noisy false def more } def
+/-r { /Landscape true def more } def
+/-R { /Landscape false def more } def
+/-S { pop } def % ignore
+/-s { pop } def % ignore
+/-T { cvi /Tab exch def } def
+/-v { pop } def % ignore
+/-w { more } def % ignore
+
+/lp1 % filename ->
+ { break not { dup /HeadingLeft exch def } if
+ Noisy
+ { (Printing ) eprint dup eprint (\n) eprint
+ } if
+ (r) file
+ % If requested, check for a PostScript file.
+ DetectFileType
+ { dup 2 string readstring pop dup (%!) eq
+ { % Yes, it's a PostScript file.
+ pop dup 80 string readline pop pop cvx exec
+ }
+ { lp
+ }
+ ifelse
+ }
+ { () lp
+ }
+ ifelse
+ } bind def
+
+/lpcstring 100 string def
+
+end
+
+/lpcommand % <[arg1 ... argn]> lpcommand <any_printed>
+ { % Push the commands on the stack in reverse order
+ mark exch
+ dup length 1 sub -1 0 { 1 index exch get exch } for pop
+ lpdict begin
+ /any false def
+ /break false def
+ { dup mark eq { pop exit } if
+ dup length 2 ge { dup 0 get (-) 0 get eq } { false } ifelse
+ { dup 0 2 getinterval
+ exch dup length 2 sub 2 exch getinterval
+ doswitch
+ }
+ { dup /matched false def
+ { /matched true def /any true def lp1 } lpcstring filenameforall
+ matched { pop } { lp1 } ifelse % let the error happen
+ }
+ ifelse
+ } loop
+ OutFile null ne
+ { OutFile (%stdout) (w) file ne { OutFile closefile } if
+ /OutFile null def
+ } if
+ any
+ end
+ } def
+
+[ shellarguments
+ { ] dup length 0 ne { lpcommand } { false } ifelse not
+ { (%stderr) (w) file
+ [ (Usage: )
+ /PROGNAME where { pop PROGNAME } { (gslp) } ifelse
+ ( [-12BclqRr] [-b<header>] [-f<font>] [-F<hfont>]\n)
+ ( [-L<lines>] [-p<outfile>] [-T<tabwidth>]\n)
+ ( [--add-to-(space|width) <units>] [--columns <n>]\n)
+ ( [--detect] [--first-page <page#>] [--last-page <page#>]\n)
+ ( [--(heading|footing)-(left|right|center) <string>]\n)
+ ( [--kern <afmfile>] [--margin-(top|bottom|left|right) <inches>]\n)
+ ( [--no-eject-(file|formfeed)] [--spacing <n>] file1 ... filen\n)
+ ] { 2 copy writestring pop } forall dup flushfile closefile
+ }
+ if
+ }
+ { pop }
+ifelse
diff --git a/Master/xemtex/gslib/gsnd b/Master/xemtex/gslib/gsnd
new file mode 100644
index 00000000000..32257d07d96
--- /dev/null
+++ b/Master/xemtex/gslib/gsnd
@@ -0,0 +1,3 @@
+#!/bin/sh
+# $Id: gsnd,v 1.1 2000/03/09 08:40:40 lpd Exp $
+exec gs -DNODISPLAY "$@"
diff --git a/Master/xemtex/gslib/gsnd.bat b/Master/xemtex/gslib/gsnd.bat
new file mode 100644
index 00000000000..fc536e046b5
--- /dev/null
+++ b/Master/xemtex/gslib/gsnd.bat
@@ -0,0 +1,5 @@
+@echo off
+@rem $Id: gsnd.bat,v 1.2 2000/05/20 20:53:05 lpd Exp $
+
+call gssetgs.bat
+%GSC% -DNODISPLAY %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/Master/xemtex/gslib/gsndt.bat b/Master/xemtex/gslib/gsndt.bat
new file mode 100644
index 00000000000..1fefbee8512
--- /dev/null
+++ b/Master/xemtex/gslib/gsndt.bat
@@ -0,0 +1,5 @@
+@echo off
+@rem $Id: gsndt.bat,v 1.2 2000/05/20 20:53:05 lpd Exp $
+
+call gssetgs.bat
+%GSC% -DNODISPLAY %1 %2 %3 %4 %5 %6 %7 %8 %9 >t
diff --git a/Master/xemtex/gslib/gsnup.ps b/Master/xemtex/gslib/gsnup.ps
new file mode 100644
index 00000000000..bec6f72539e
--- /dev/null
+++ b/Master/xemtex/gslib/gsnup.ps
@@ -0,0 +1,89 @@
+%!
+% Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: gsnup.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Prefix this to very well-behaved PostScript files for n-up printing.
+
+/cdef { 1 index where { pop pop } { def } ifelse } def
+
+%%%%%%%%%%%%%%%% Begin parameters %%%%%%%%%%%%%%%%
+
+% All parameters are also settable from the command line with -d, e.g.,
+% -d.Nx=3
+
+/.Nx 2 cdef % # of pages across the physical page
+/.Ny 2 cdef % # of pages down the physical page
+/.Landscape false cdef % if true, rotate page by 90 degrees
+
+%%%%%%%%%%%%%%%% End parameters %%%%%%%%%%%%%%%%
+
+vmstatus pop pop 0 eq { save pop } if
+.Landscape {
+ currentpagedevice /PageSize get aload pop
+ exch 2 array astore
+ 1 dict dup /PageSize 4 -1 roll put
+ setpagedevice
+} if
+/.BP currentpagedevice /BeginPage get def
+/.EP currentpagedevice /EndPage get def
+/.Ps 1 string def % survive save/restore
+/.Pn { .Ps 0 get } def
+true setglobal % protect from restore
+/.ELevel [0] def
+/.Rmat matrix def
+false setglobal
+/.max { 2 copy lt { exch } if pop } cdef
+% Work around the common save ... showpage ... restore locution.
+/restore {
+ .Rmat currentmatrix pop restore
+ vmstatus pop pop .ELevel 0 get lt { .Rmat setmatrix } if
+} bind def
+<<
+ /BeginPage {
+ .BP .Nx .Ny .max
+ gsave
+ initclip clippath pathbbox exch 4 -1 roll sub 3 1 roll exch sub
+ grestore
+ 2 copy exch .Nx div exch .Ny div
+ .Pn dup .Nx mod exch .Nx idiv .Ny 1 sub exch sub
+ % Stack: nmax pw ph pw/nx ph/ny ix iy
+ exch 3 index mul exch 2 index mul
+ translate
+ % Stack: nmax pw ph pw/nx ph/ny
+ 4 -1 roll 4 index div 4 -1 roll 4 index div
+ % Stack: nmax pw/nx ph/ny pw/nmax ph/nmax
+ exch 4 -1 roll exch sub 2 div
+ 3 1 roll sub 2 div
+ translate
+ % Stack: nmax
+ 1 exch div dup scale
+ }
+ /EndPage {
+ .ELevel 0 vmstatus pop pop put
+ .Ps 0 .Pn 1 add .Nx .Ny mul mod put
+ .Pn 0 eq {
+ .EP
+ } {
+ pop pop false
+ } ifelse
+ }
+>> setpagedevice
+/.EOJ {
+ { .Pn 0 eq { exit } if showpage } loop
+} def
+
+{ currentfile cvx exec .EOJ } exec
diff --git a/Master/xemtex/gslib/gssetgs.bat b/Master/xemtex/gslib/gssetgs.bat
new file mode 100644
index 00000000000..2de966321cb
--- /dev/null
+++ b/Master/xemtex/gslib/gssetgs.bat
@@ -0,0 +1,8 @@
+@echo off
+@rem $Id: gssetgs.bat,v 1.3 2001/06/22 16:09:22 lpd Exp $
+
+rem Set default values for GS (gs with graphics window) and GSC
+rem (console mode gs) if the user hasn't set them.
+
+if %GS%/==/ set GS=gswin32
+if %GSC%/==/ set GSC=gswin32c
diff --git a/Master/xemtex/gslib/gst.bat b/Master/xemtex/gslib/gst.bat
new file mode 100644
index 00000000000..80381f7fb13
--- /dev/null
+++ b/Master/xemtex/gslib/gst.bat
@@ -0,0 +1,5 @@
+@echo off
+@rem $Id: gst.bat,v 1.2 2000/05/20 20:53:05 lpd Exp $
+
+call gssetgs.bat
+%GS% %1 %2 %3 %4 %5 %6 %7 %8 %9 >t
diff --git a/Master/xemtex/gslib/gstt.bat b/Master/xemtex/gslib/gstt.bat
new file mode 100644
index 00000000000..fdb5d7d4e14
--- /dev/null
+++ b/Master/xemtex/gslib/gstt.bat
@@ -0,0 +1,5 @@
+@echo off
+@rem $Id: gstt.bat,v 1.2 2000/05/20 20:53:05 lpd Exp $
+
+call gssetgs.bat
+%GS% %1 %2 %3 %4 %5 %6 %7 %8 %9 >>t
diff --git a/Master/xemtex/gslib/ht_ccsto.ps b/Master/xemtex/gslib/ht_ccsto.ps
new file mode 100644
index 00000000000..f0825d74dcc
--- /dev/null
+++ b/Master/xemtex/gslib/ht_ccsto.ps
@@ -0,0 +1,3171 @@
+%!
+% This file is a reformatting of data placed in the public domain by its
+% author, CalComp Technology, Inc. The original file bore this comment:
+%
+% convert 167.pat 167a360h.dat 167a360h.lin
+%
+% Aladdin Enterprises, Menlo Park, CA reformatted the original data as
+% PostScript halftone dictionaries, and hereby places this file in the
+% public domain as well.
+
+% $Id: ht_ccsto.ps,v 1.1 2000/03/09 08:40:40 lpd Exp $
+% This file defines a /StochasticDefault Type 5 Halftone.
+
+% Note that the Black array is used for Default, Black, and Gray
+% (not too surprisingly), as well as for Red, Green, and Blue.
+
+% The reason for using the single Black array for the
+% RGB additive primaries is to make stochastic dither to displays
+% look better since there is no misalignment between primaries to
+% a screen (as there often is printing to paper).
+
+% The CMY components are decorrelated (90 degree rotations of the
+% Black data) so that misalignment doesn't cause color shifts. This
+% is the same reason that conventional ordered screening uses
+% varying angles for C, M, Y, and K inks.
+
+/StochasticDefault <<
+ /HalftoneType 5
+
+ /Black <<
+ /HalftoneType 3
+ /Width 167
+ /Height 167
+ /Thresholds <
+ff51ef01d993ec6bd87ae0b102f24fff9f52da29e9bbff389add8cd834f3a5cf26f879fb
+6afe32d2f8adfe79f7c760d0ea6ad87ae561f804ff53ed2dd95ec5ea52c1ff25f787ff94
+c7b3ff6cf7a7cb86f24388fecc5ce1be6bf356ffaef137cb4fd8b966c1ff43f9cb2fe4bc
+0bee36f554d969e91fed4ebffb79ff37b4f88affa501ed94e5bf0ac6fc8ef57cface63de
+7abfee7bb8fe4694ff2eed86f1a5ff70eeafd694c0f61a9cd883b6ff52affe8ef62bfec4
+93e578edc193f28609d9aee556f179ffc112fe87b9d618c89cf1b8875ac0dd49a8ff36b6
+f60affc1a1b9eda7cc93f679ff1ea7fb08a3ec5dd005e035e44ad9c00bed32d0afdd963d
+f6b215e085dcc5019ffe8dfb7ad9fa2b9fec9459ee79f8cf80d886ffa5cc95fe84ffa561
+ea89f2ca27da4fcbfb5ad83093f79a53d824dda53ef0adff29a7e0169ef2cf77d8b64ac7
+32b7db933bfb0de086cef223fdc932e0c20edd56d465ef33afd80bfe41afffcd7afa6dfe
+07c7b565e595ed39ffa5e64fd909ffe21d99f2d880e086c3dd8946fe24c84cfb0fbfe086
+edd165e5cb89db83f2b8fb87f2a15aff9af561ff0ff0acd875ffa9f92693fabe54e510f1
+45a5e6cc03d8fbacdc4cafff62e0b329f95cc0da2de0c015d453a4fe86f270aae289fec5
+48bee483ff56c4ff9013d893f868ffd834bafa19f6a5fe87f703fbc59ef176fe5b7ae4a7
+5aed79fb9ebff296e282c0ff59f296c5e12fa5ec22becfa2ed2dfaaf44d8bf64f286ff7a
+afc56bd0fe8c05f964fe52a5f9d17ae091e488d9aa38f84993ffb94ffa30fea5467bd213
+fab0d868afd990e083fc2dedc2449be7c249edd793db84d0ff875efeb98612c5fd25c0ed
+11c6eb7be00db0f35afa86ffafdd07d83cc6ff13d676eaacff1aeebf9ae669bde46eed42
+cbb57ce75ba4e081d85be09fd961e845acd833d9ff45bffa95d12ae57b3cff17b5f97bd8
+ad61fb79d3fc67b4f43bff79d98acbff79f7b025e03dcef62ffba53fe5c3aaed1abfed2a
+adf260ff2ef357ffc395bfde289fed7dd868e5b6fe93db77e22ac9fe1df347c858d0b669
+fed879ffb28628ff61f8af1ac2f0933eddff9a6ae05f9ffe934affa2fb6dcb9bd8b633ed
+64fb9df6b67aed58fb25d963d8a635fb08d7f83afd9dbefb02f48efec24bff0eedbd41b7
+ff7ec1fe67f598c7a4df14d963ffa5f9d886c9e946dc24e7bf1aed9944c2df83d893e252
+fb1da5e303ddc297fbb58ade81edbe72ff4fce9bd97cffc913daafcf84e56cdd01fe6df4
+d516feadef0ed82eec55ff8ffbaa51e078b6fa94ff1ae0a50bef3ad3fbc0a5ca35ed9ce0
+2fd5f6b64ebef388facf52f1d7af37c3ee3eff1cf7ce92e4ae48d01ef993cfa1f18cf57c
+fec293f2b250afcd1eea79e04fd91fed93ccb378fe87f21db1e417ecaf0870f486fe89ec
+b60bc361eea56bf49cfc83ffb66ef7acff15f952ef0bd26bf2bf56fd78ff6cd80de951d6
+15fab22df27afe5ee24395fb9e42fab91afe9ef1adcc4dafe29342c4ff97f679cb20d85c
+eac582ffd509e45ff27af7c766e09818ed5afeb669fa77febe6193f2d836e206a5dd8b18
+f4db7cb6d793e0874dfe24c9ff86de6bd932e04cca07da44e061ce7afed979ff57d398fe
+aad067fb2cf3d323e197c4fa7ada86cffbe026d851cc36f592feb325ffd208cb51d931cb
+e403da62ed93cba6fe87eb82de9bcab82fee5ffa7cff9fda5adfc0a0e533f4a5beea6ff0
+c667e0a5cd4bc631fb9bff5bc6f975bb45b5dd9fef94f701a5ed299feec2a5bfdc41aeff
+80f5b873d904e5cc3dd9af09fbd81d97ff7ac3fb34ffc8965afe02f550abedc681dc79ba
+f250fda6ff80fa9dff86fa96f32ae6bf0af1c2a5f22bc75ef99cc0e56193faac5eed55d4
+33ff4bbdafff80f194df5dd839e0c055affe89f793f05ea0fe86d8af2bfb46afdc37ff23
+f447f8a9cc9cc6b636ed84fe73f817c7afcc0dff52dd05a5ff28f779fb8eed86e50bb7ec
+1cc0ed93fb07ff60d981c7fa61ccfb874efe3189fbce21d94bceff90f7a279ff87f2a4c5
+85fec14ab8e66cedb64ff9d98fe479bfff0ca1fb60ee1094e8c40bc1dd22d85bd2b814b6
+ff5c9edf9337d988ff86ee0ddd40a6ffcb3cddbe06fe8bf09dea633ab8e510ff6dfb9bf2
+7efba4ed79df20d87afbc74ae038ffc09bc3f37bcda0d889d980ec1ffe45f4d493cc02d8
+87eb67fe81f193d686fecb7cd993e012d85bd877cffa6aaffe33e36fd086e638fd4bb4df
+9b3fc0dd7bd3ed9e5ff193faa02edf55c5eb15d849e058e575dda5f826afd07be09f21ce
+45fbd866cdf136e5a5fed83d9af35aaff06be539eda5dd85cbf94affaffa11acdc76b6ff
+88d808afea82ffcd6cdbad1fcafaed78d09fbfdc03d54fcd14d931d060ffa6e511b7f699
+ec79dd60e41bfe61f766fb14ff5ad890d9a51bff62f352ffa6d23ce04dd922edb65af240
+d160ffb6f526ffac39c1df81d9a5f94af4bfadd094ff0ff2afff1df6b905fec586d80ced
+c686fe3ba8f691fb7dff39f518ed80d8ff0bfa41ffaff288b424fabb7ad8b64abf6aedbe
+79fe86bdff98f679fe52ee1ab6e980d75ac1ed43f8d859b9f481fc50f227a5f442ffbf6c
+b2c3fe30fa4bb0f779ff93f687ff96edb13ec0ff5ad120aff707fd80d194ea0db6c99ec1
+e479f16afbbc7adc93e0bf22fb9fc2ff7dfabf32e7affe84eda94498dd86f19eff4cf217
+cc64d8a413fe2deb6cd879d886e59752e0a52af357ff62b3e871f2ca61de29cfacc79dcd
+62fb4688dfadcc79e85bfec6e59848f81bff93f7cc29ffd019e047cb02afd82ed876fc8f
+c622f69efe6acbaf1cfbc837e29fd96ac7e787d87fd8fb1554a5e491ed7cc5e027dc5be4
+4ad806c9fa6295ef86febf53d6a5ed32dd56d3f14ae838affe07e03fcaf22afc4086ee89
+d811afe4639cfb9308c0db24f7b8fe62d81de07bd18fff94fb27f1c97ce09cf63cfe26f9
+61d8ff79fad170e3c0a5fb10daaf24ffb99fe60ef05cfeb8a0c1f3982cedbe11dc9e3b82
+efd388de6fe004b1d958aaedb6fb6dd9fe65f286e5af3ffebe8ce42fb9ff7bed9962ffb4
+25b8fe9a3dfe0cf8459ce0ffcb66d81cfe43adefbfa2c2fb86f56da2eacc31d865f294ff
+3bbffa86ffa579ff8efa82bbd0a0fe6eb0d89dc2e5af5af897fc39c2e05dd3f29e69e47c
+d507e8b1fd5fd903eb57e07ddb6cbdfb53d686ca8ee19fc513b6ca3aafff9430dd51d87a
+ed99d154fa88ff93dc38e501e052cbfe67fdaf78f7c1ff09affe32c8a1fe79fb96f98739
+93efad43c7a5ff0fc1e07dec52cda5ed01df50d0f186db93f612e4b879e08bbaf374a90b
+f386e5c19cff883efe1eb5e037d2fb1aa8fe92e20ccf60e570b4cb2ce5c101d950e028ec
+59b7db13ff57f50affbd2bde68b5f518ffa943fbcc38ff92f39c46c2ed87f6a8c73cf4ac
+ff39b1ed08ff5deeaf45f5d96af29aec16ccfe80f498ff46fb08edc130d863bff77bff92
+f782b9dd3dd4ec1e8cd99dec52b7f35ed8b840e312d3ffbf1de597f926cba1fb5ed406ff
+6bfb84d88ffea50de546ed70d886fbcb4ceed02cd8f7bf50ffb161df09d0f480e679c5ff
+885bc0e450f577b5eda1c3f510feaf6dfb9db9f4a6ff94f631fa88bdd093dd75d2f286cd
+ed55d87bcbe578b3eb72d859c9ff9330fbbc70fe9fc50bcf9ae07bd9a4d819ffbe72b0ff
+4fdc83f8a545e0ad27c9b683e2af68f7a5fe21afd04ed92ae016a5f25fb7ffc55afb79d0
+ff85e822f1cb83f4a44ed8fb73d656ed64dc35f394f1aedc20e54ef532c0fa7bc6afff51
+f12e9fffa56afe865cec9ecf2ffb93f861abd959f20e96eeadff78d925c1ff4cfb289bd9
+80d0ed50de62c71bcd74bfd697ed4cfb33abfe41a4ff0ca0fe93f721baff0ec2fb29f8a6
+13e2afcc4ae527ee66fc5ff321fe62fa87e879d1fb03c2e923d861c6ef6ad8fa6ef3cc59
+ff94d351c4ea6beda6bffb6fffc986fb9538e0b12be4a913cb4cff64afdd6dc9f78835bf
+ff92b8fe93e579d9874dc4f87bcebc9ae03ad8fc219fde7bbedb19c6e901ddd13cfb78f1
+b949b5eacb2dffa5bfde44d801f2c499e085d87ccaff5fe51ebdf836ff7afb5af30dfe49
+aed97df1ca65e6c77ae0bc3bdc61ed519bf25ba5dd81edcf75f268ff95dd81d8a1d992d5
+a5c72ecf53fd31a3e05ea6fb92ff09b6fe1ebdd915acdd33e006f286b8ff0cf93d93eda1
+47e305beef86f4be67fa97e5abc59dfc30fe06bce7abed08e23ed114bfff2afae09544b1
+ff16f279ffaa67bff906ccfe6bf859b5fa98ff8ec2e022d997ff148aedc36af87afdb5e9
+8652fb3ef819f3af45ef87ff6ca5d894e493da85e068c1fd06e0af1cf9b726ef5ffbcb81
+fe88c4d981e1bf4eff3bb8fe1cdbaf06c1ff1ef541ff59f788ee9edd82baf286fec042ed
+76e589d0af64ff93fb79f5a4fe79e32d9fd987e5c71dd6f37dd0fe4cd817ffcc3cf251fb
+0fec53d87ee09661fe79cd9ffe7ff8a958ceb90affc1ea6dd85addc44ff4d286e4af43ed
+88e47dcb28b7e50ea4ff5eed81d8fc9f46e225d89f3b94feafd6a5bfe169dd93d0b841c4
+ed10f245d72dffc3a3e677f35aff96d078fe9ed817ade504b1fa2ff71bfc97c4e062a4ea
+7dd6f7ad5acb86ed7ae011db51ff09f7cb40d818e19ebfd951f235f7c24cea42d0ba6ac2
+da5ffcc976fe61aaff5ab8fc64a5e180ed76afd881dd92d881f9b6f258ffd01fb6f569c3
+ea44ef9efb71afd9882dfe97f6b00febb527ff60f295c9b733fe64ee4d7bfbcc79ddb636
+c552befa84fe63f1b8da29e510fe489eff31fb05f39ffd87cd7efeb6ee8742f927cea6c7
+86e952deaf4af595ff67f3d070e0a5d386ee098cf5d04ffe3487ec9bfab92ecaaffe7fd2
+93e0a969ff97f661f32eabfe83de77e19ec7a5ff0dee3a95f3ae4cf115cdf480da952ee8
+c421faa1d902fdb625ff60dea61b9cd839a1f9d849de27b4d162e01ed8f55ffbd5b73dc8
+89febd82e095d938fb11ffd693d9a2b3f2ad43f403fea5f186e007dba6cc14ff72f481ce
+93eed979cba5e077d82ce04ddca8049be1afd893ff3bed20acfb0fedc188d843c7b735fe
+c060ff48afd8ff30bee48dc9fb46dd12e5a5fb43bff023fb4bb7ed27d77bcd8fffc110cb
+a1ff02fb29ed5bd885ffcb19e9d18bddaf42e508edbf52ff95cb39feb96bebc67aef31ff
+b8fb85f3c25186ffadfa6fff93c1ff9731cba918ed86fa64d92efe5af779d0acdf844af6
+15ffd828e98ad8bf88d71fff9af6b84aecbf8fdf4eb6fc5fc007b8f566bfff5af7afff68
+fab8f64ffe15ed61d893fed781d86dff2cf9a5fd7aed9f11f195c1fb619eed930ff164b7
+d377ff6ad885e66aa5d87febc886f993fe07dc4be598f940afd990de7afa9be54ba9fb93
+28ff57fb99c2ff77f9b062ed7ae069c9f2439fe391cf6de444dc14e0afed9411bee603f3
+3a87dfb1f14fffafdf03edafd074ed0abeff569cecc1a5e586fe83bcff52f73afba8c73e
+cf79ff6afb37aefac930d8ff87e64bfe1396eac1189eed28d585dd79ca9fbdf269c037f2
+50e4aecb86e01dd852deafce38eb22e3c043fec3a5ff22ed99bdf24afe01c1ff3bfaa014
+d947df5bed6dfb79d865edca5cf23cbece11c1f8d550e0c0a5ec84d933add825dfc10dfb
+a5f62593ffd20af34ef795cd78ff61fa2fc4f280caa0cfaef954fe7de5c05f93ff9b52fb
+a5c79fe130caf31ffb51c639c1e212c99adab26ee580fe92de21d893cbed1a8ff69d42f2
+a2d485e5c54888f2cf79d95dff21b6fa46ff04b3e59fc3fa9b01ed57bff293ff87f76cfe
+86d97bf2af79e052d8b459fa19c796d0abf28ee362baf379ffc09bb8d0a5ee36ffa81cfe
+86b5ff7bf1a03187ff7bf649c511f388e469fe7af79ecf45d7aedd5ab6fe83d8af05fba8
+c890d1a3fe60e135fe5be576d80cdb9f24f8c545c0e21ddd42fe87f9b688dd7ab6ed954a
+a5fd76f11cccef47d815eb5ff27be45ba4ffd469e0afc720edb632fbafffa53afe94e888
+bfec7adf8bd1f74cff1890d3fe7affa23dd907d547e0a5ca51fe02cefb28f477fccd86e0
+66ec32de51d80dcaff30e5a81bf739ff24b6d987c5e56dd1ec18d964feb1e4b904b4d8fe
+9fbcff45efb2d93feb86ff60f114e579c1ed2cffbf5aed31e30de94cd7aff279db17eeb0
+fc78c9ed6cdda7f285ff93f1af1ad55dfe6cceff06fad1ed5add93ff65b9ff6bf5bf9dc3
+fe04f7c12fafed0efe5bfa73ffcd7ad809dfbd54f20fcbfc5bd830ef5797dd7abbef3eb8
+e026d0fb6af47efcbf17edb89de85bb6d395ed069fff3cf8a4fb81fe79f7b083d987d0ed
+6fddc38afd0ef5499ffa2da5fb91e525d851eda0fd8627f05acea0c80793feaf1ad9bd93
+fca7f73eafd97ce09ec3f86dffbf93fb1c9bd88dffc23f96e72eadfb13fe34ce60d86ecb
+ee78d90ce73ba0d96aaf30f9be3fafe60a9ae0ae35ff42a5d86ee687fb55d095e086d952
+a0e562ee70fac780ddaf36f1affe82c7ff2acffb75d9a465f787b6c6a5ea3098ff61f635
+beff86f83cc7afe56db6d60dbccb25e6c240ef65fd519ffeab58e495d67dedcd7be0c041
+cb5ef782ff6bd83bc0dd93e51cfe60f3d178dfc38cfa4bc72ed0a0fe5df21ffe4a93daaf
+42f062c0ff2dec5086fad467ffcf79d895d97df706fb4ca5ff93f481bbed7ce4ff95cb6a
+fed37dfad829fb86d1b1ed87ff4fd89fbef22bb0f414baf822fb99cb1da4ff6af99ec60a
+a1e51eb7eba542e413f3cd4ce50fff4dccb2dd83d893df70d913abe588ff4dc6f387ff79
+f493b75afb9ecc28e7c505bff93df25effaa04ff51f396ffa9c0df13affa94f578fb69d8
+81dda52efa4dff33afed86ff64e00cce95dd7abded22fb86d8a5e473f6a5bfdda408f09d
+3af286e453eca5d083eac324e04cd0ff5af72387e90de0ad2cf24ebb7fc3ee11fa53de24
+b7f409ff86cbfe63c9ed80daae45ffafed2bd84be06dffd066fb9461fec188ff82bffe79
+d893f186fb0bf341ff1ffaa0c1fe6cd81df7a124d950dd39d8ff88d80affb660fa88e07b
+cf85d82cddbd86db6bd808eb468cf2cc5ce00cd03feda7f639ffbf98ed6cbfe104d89af0
+85f962fb3bd0ff6dd39fcb08f33adac405f149ffc87ae0bf59ff0efdbf2bffb53bfa97bf
+fcae16c7a9cf60c1ff79f697caa6d9ff569fdd8bd67afbc779d958dd3993e4ab3dff4fc1
+e179d984e596fe86f32fafd943f4cd0af0b44adb25afed44de25d864e1afcd7be8c451dd
+2fee5be07ad2fe7df089feae18edabec79dbc198f030ff16fb9ff66dfbc822feb5f76dd4
+febe2bfe9dbcff8ec601b6d971e111cda9f779fe5bdd25cba5d888e5a501b4f437ffb681
+feaf5dfe97e066b7fb1df7a0ccb68d5df371e5bf85d93586ea9bfb43f0fb3db0d81feb53
+fe0293f2cf48ff1deda542fe99ee6beabc02fb9fd093fe07f73af351cf05dcc09aed6de2
+be87dd79cbf88afb7cbcfea5f97bff9f5bfdbe4696fe81f59cc7a7f154b5cb0fcfb868f9
+be3695f71cfe47afd893dfaf59b9e83e9ae3a54993dda23986edc478ec59b3fb86fe5bf8
+86f152e01fd989ed81ff54f419ff51f7c6e55bd969eccb51e993d833aef428d0af61ed3d
+d8fac59edb16f252ffc5f65ddc70e0a3d893ed67fc82dd87e3c12eafe595cb86e0afcf27
+c0f97effcb61f22ded66d8b79dc2ff7cf1a547fa11ffa525ff51fa31a8ed5ce51bcb62c0
+e831caed1ad9aced09b6d042ea04bffa2cff9ef23be1c581e5bf6bde86d0fb60ed43cff2
+0bcaafff79f2b8ff20f0b6deae4df91ac2e128eaafd420c79eff6cfba5ce34c6b2df72e3
+c086bd4493fe86fa15aadd1afb61ffcd7ce083ffd993fe8022ed45affe8ad8ac02b3d220
+ffb0065dfe15cdabc632f563faa4fe6ff25efe0af66cff9f17d149addd81e0bf90f160fb
+17afd85afeca91d87ecaed84d895e7b907d898ff8cf30d9adc51a8f886ff65d8f97bff92
+fb5cd8af6ee563fcaf23ff56fbcb3be9a611c97afe83befe61ed34d70fe088cf79fb05ff
+93d9a4fe7dd89644f2a5fe32d1aec54fffa2fa0f9efb932dd9feaded21b7c997ff79efc1
+87ba12f957ed38c101b2e2c094fbd465e02ced9dfe89f27dc7f5e2bf9ff943ff9eceb94b
+e008d832d876da93e550d9affc96f722feb00fff40bed093eb36e3b879e560f243aff619
+fe79c9ff68dc3bd95ad0fb79ffc660e02bcbaf48e027cf76e485edc242bcd18eee7bd807
+acff53f492ffb61ee54aa5dd86f966feac5afbbe51ce67f130d44aed60ffcb79e077e959
+ee0af367e56bf2d846c7f19810e080d6f643e557d8af40f7d993d3a7c98ffba5f550ff69
+c40ff7a4ff61d83bd950e5309a8427e071dc7aed1affb37cf797ff88f9bf3baff183e832
+e063d9c177eac5a5e427fe77f9a21bff33fbc29ee06ccf5ae03ca4f284faadfeb139edb6
+05f476b6f26fffc29dedb534ff12f5a5fe02e548b6f696ef77d7afe04ed8f79cc3ed21d0
+9ed981cbf41ce49be8a5c88dffba9df516bdfa04c599fb7fde92dc25ccb77dffab53facb
+6bff5a9ed984f224fe9cc632fb4dff0de060d884dd17b7ed87ca41b7dd7bee77ff86d6fb
+c4ffb7f108d393d985e4c241cd51ed229affc30ffe5dc97cf2a44cfb995afc7def95d95e
+cbee8fd8ae01ff32fb9cf293fdbb14e5c11e86e49fc77cdf93cefe12eaba1efb4cfec993
+d886db79d886ffce61e033b9fc2487ef7fbf32fb65ff54f115e642b8d886ff22fa54f30d
+e538d0af66d8a4ff2acbb638ffbfa5fe3bea07d0e67cb5ee39c1fb0afea5e06add7aeda2
+e56df1b6ff2def6bcefd34aff193f80afeafc80ef4bc45e58c4ca5fe5afb3df924f48efb
+bea5c5e04bdd87cfa5edb605ffd81fd3f331dc4dd409ffbd40da51eb88d2b579dd0cd667
+ebcc5396f7cf4aff29f951fb349bdca560e588da9f67f35efb37f860f2a51dfec19fdd67
+ccfeab04ffd88ad47fe195ff6dfd8eed5bc0d971e0afce79fe86d9fc43f36ce57bd8f487
+57f179d89bf78840ff1bd4a4eb78bace37bdf903ffb81bb2d9933e9fdd8dfaac52c1ff59
+d87ee0a334e697d967af16f8b6d979e0a8c96cd0acde16ea63fe78f4a2fb3af629fec76a
+baed86b6cc9cff84e0a86afb85febbf75ceec14eff85f72ea5ffd861bee992d8a5d887ed
+be50fdd279f20ac1e31cddb1c99adf32c6ed884cf213f9be43e5ce9351f309f9b629c6af
+c501b4fe39aafc9334ecb64fed1fb7e793da52fe169cd3e413c5fa5bb1e0a8c3f261fe27
+afe467ed80ccaf63e788fe49fbc7f554d01de59bdc80e524ff4bd0fb86fe2bccfedd6bec
+2ef2c012ef9ffe5a86ff93dc01d8b720b4d87fdd5994e59e52ff62f814aff12df6c30fe0
+a52495d912faa5bfe35fb7f08924fea208fb55f310ff45d7f39329ffbfa8fa83fea44bff
+0faffe5a94cbff83e09f71f59762ecafc0df6adaa5ef4afaa1f37ccfed15c6ff86f9c96d
+ff88c70fb6ed86c1fb42acfe932ac0fe1efb5495df84c8ff4cf696ff2ef4c241f2bd81bf
+13afe07bff64f605fb61c6abf289c143b5ef7a9c52c893feb24fff61e537f2b6c644b1f1
+57ff88f272ff90ccf81afbc20ade92e7ca6dd888e5b371f3b7ff72e658dd2893fbd04be0
+c16deed379e084ca9ae58601c4e69751e033d852cfed7abfee80d6fb08b7d83affc427d9
+ff19fb3e9ffe35fa86e06fdc2de54e93f6a54ddd06a1e2c03efba5ff3bb0e062c9ec70d9
+a9ed60da7ae2bf04f8b66ed910d05bd875de99d12cf9d895fe39edafd293b9cda0eb69d5
+10eaa6e058d5fab3ff21cf74dd87d994bed80ded9dfb79e89ee03fd709ed44afdb82f2b3
+79fe51a5fb5aff40facd39e14acc9ffe81efc4039cfe7af5b334b7fa3bbaec5eb0ffabf7
+41c0f08eff99f7bb30facd53e02ab5f26aedaf79eab359b7d893c2e473cd58d618ff97cb
+85ffd862caef7bd7ff2f9bf27ee564bffa22f19e02f54dff8bceaff536ffa0d834ed87fe
+93f29ffa14ff6deda54ee46ed89847fb29f342fe1ef596ff5ff71cffbe05d87ae8a8f702
+fbc41dff79fb60e32ccfbb1cc3fe6bfac0a4fe61d83de3c434bfed19d094dd679ffe7fb4
+fb1bafd96affafdf41d914d8fe7ccba4ff20f9c72ed966b4fe16d65ae00593e7a022ff95
+f77bd0a725fbd10dfbc887f64cff11f583ff93edae3febbf0eaffe27b7fb4487edd260d9
+27cfed6bda79ffd086e0c10af2439ad881e868fb9ee04ed824e579cbade10bceff90f807
+ffc0a5e17adc86b6cb51d9b684d99f67f33ff9be469ae556a0ed4eafd495c9a5ff70f95a
+addf9350e528f09dff6ef5a5ff7ad961f01fc1df06d4ee7dcaf243d837ea86f4afff964e
+ed18e07fd9a563f17bfbcb55dd81f47ac2fe47b8e085d861e53effc15e99e06ded28acdb
+7dd8a5e022d961c9f769fb9df155e56cccadf7be16fab6fe9508ffa5c73eaffe30a4fb82
+befe0ff746becb18aff77bff51b9fe5a89fb84be26afdd84eb68c5fe50d7ff75fa27cefe
+48f2ca94abd065ffd87ad2fa6ec2f632fe17f34be5c594ec2bceff7bd3be1eafdd0cd849
+e593fbbe9dff85f7a530e55299fe8bf9bf21cb5486e5bfa9ff5bef44cefd93de0e8cedaf
+ff25b4f26ccbfe69f303fdacd877edaafa41ff96c3fe68f2bb47b0f8befe0ab6d426e074
+d987ff09dd5393e9a74386e0afcc2cf797ed66bbdd52d2ed6ab4caa5ff7df2d23fb6c893
+df20ecc3d946eec7f35ad830fb119eeda507e0aded6eafe28726fde011edaf2ef2af27b4
+ea7bdd8bec7dd7ac06ff86f5b711aff779fcd061fe86fab603c64bf236eb53c7ff79dbc0
+0fe04ea8ff8efad106f267d09ec1fe861eeb58d0fec23f95d0eb3bd99e18d1afde952ff4
+c614dc81d9bf54e707d12cfe86eb8c44a2f27cff93bbfb1ec5b1f17dfdd051ffc4f65afb
+73ea7bd915cbf97bffaf27c2e950e029d95aa4fedc09fb64f5b4369ffe93499ffe7af186
+d9bf35c6f2933dc5fb0bc2ffd86082fec179fcb969ffd814ff53d041befe67dbbf41d861
+edc83cdd5193ed98ce2feea7fe8fd8b67ada8abaf424fbb476f1d061dc39b6fb93d92cf7
+0c95e0afc0ffa0317ef9d962a5ff86f6b0fb578dffbe5dafff52ef1aa5f387dd80e59bd9
+05ffb5e461dd37ed4bd0a0f94197e023a5e08e0ea1d834e0aefc59ffa548e41bf096fe7a
+fa8cf695ffc63286f0c0a5cf7affd102dcb7e716cda8e04dff90fa5fbfff6a9ceb9037a5
+edcbb638e6c609edbf81de86b6fa9ef224b0f079fa9afeb686ff95f3c514da5ae179d862
+e427cafb14fe43aae05fceff960df79eed7fc843fe87ddafed4dfa3a82e5b6eda614fbc7
+0be24fdd31c5e81cd8f986ccb688fec133ff4cfbb438b9f16dd82efcafcc96ff7aed64ce
+ff69c8fe38f4c6f267fec01a95d882f1c789d871db3fd816d055eb0188edd89644ff1aee
+56bef77dff6bb2f73ac1f477e824afe117ddbf45f7bafb1bf56efb5793db9f4afe3af7cb
+07e184d9fb33afd418cb4ce103d836a9ff80f7a5ff3df3b3ff5aaae569f1c686ed9e2ac7
+ea74d71cff64edafc560ff77d4a7f3d908ff5ccbe7945af07ad588ffa979ee9e42e505f7
+d449e093ceb76defa4fe4ad086ed9e4fe802c0db14e0af2ceeb884d9ab4a93dcaf52c6ed
+44e50baffe37faadf486ff94dc7cccfba75cfdd681d98de09a4bec33c1e486ff9405d298
+c2fb7bf688fea7cf5dd8984fdda0c3ff2ffac1a5e65b93ffc148b888c1ed68ff94f27cfb
+84f9cb52e0b118c3de9d0d88edd081d89f02ff3dd8fa81bafe52e092d89c16f8d831c6fb
+178ab7cc9bdb2887ffc0aafc1fed62cffb4dc7fe79d99d6bfa79ed0ff2c71ed866de93fb
+12c7ff81f8a75bfe86fba3d610f85efbb7ff21f39fff6cfbc19cf35ce7a006becd4be524
+feb52be1bf11aff463fa25fdafcba2fb20d94de6b8fd4bdd39d864d253ef03ff79e7ffb8
+0cf17ce460f20eccafed639bfed812ff4ae6a926d8b546ecbc74fb2cd2fe6188fbb8f5a2
+21fa48fed06ae8b85be534a5f371fa35ffbf5793e7b15ac2e545f867febef245d92db6de
+93f509a5e081b6f138ffc221d8affe61a5ff85f619ea59dc77bedf3ed3f273cb46f388e6
+76d706ec6bd87ae201d0b52edf85d87bc5ff65eeb66ff2c167ef74ff99ed2ccaa5db73e5
+0def60d079f2c55fa5ef7effa5ed29db94e086c72dce7ae067d897d092e073ff20d5f435
+a4e493d883cef772ffdb9f20e59af15895e5c13ae04dd9bf9bedb77bf6a715ff93ddc204
+cba8de79e2acfe03f49ffe74ee93d83b7fd19af986ff41d858c9f835ff13d0af5ae5a1fb
+5999d1eb4be0afcb7dff99f625a5fe9429bde69cc735affe8ade94d03efec293f679ff52
+f920fd42d9ae31fcd89b43faa2de41d95cb5ff50c0ff5ad882ff93faa52effd61de3be0c
+c2fe6bf53bb3eda320f6afff1ffa47fe32f394dab950c3ef52f704fe59b6c70e8bcffe65
+d988c9f905ffaf7af980fe37c912de4dd9c279ef55fc9fee4cc1f529f081dc86d724d9b0
+1cfbaeef02e553ce9ff27dffbb68dc94ed76f6bf89f23ebfe42b93fb9c39feb72ed95eed
+c66cefafff07f75dffdb26f056ff83f1af31ec5bdd87cfade08bd185ecc18d10ffafd00b
+c2fb82f7d479eb1794f3b8e240d808dec06293fb9e67f25bacd880cbfb56feddc040a5ec
+88dd86d8ae58fb79afff87d17cde9ff038fdacf43bbeee0cff43a8db72efcb1cdd5ef28f
+ff93fb83feb024d86de17bff0fafd86bcf3aff53f36bffc761e087ffa5bcec12c0e02a92
+f0b249b8de30ff09cba9ff7ef7bf03c4da79edc986feab0de14dd863de91d8bb79cda5c8
+1ce163da9bbeff13baf23ca0ef58ff1bf8b8e679df61ec932fccb704fb9fc5df8728afed
+80fe76eeace052cbfe8ccff818ffbc0ed88e5f95fdc352cb14f165e9c005c5e51ad92ffb
+bf71c4e06cd962e07cb3d878bfeb86d82dbbff95d784e063cc2ce040d0f888fe1db4cf99
+fb50ffb7ed79e0a2cd3f94f5af4dc925fb6afe78a3fad31bfea5fd68d297e06fed17d952
+e5a9ff51f80cafe039cdfb86ff93f9ac43fb15b1ff6df79fbff912fb4dcca5fa68c0fe0d
+d87ddd9646c4f534fa7bffaaf255ddac47f936fe9efa5bc79fcd3cff10f4b62ddf3d96ed
+9f61f27de9f9d206ef93ffa9bfff26f69afe66f281e0a541ff19b1f729ff9bfa4efea0f6
+1dfe56f3a34ae909fe3cbaf3a4c0f06db6ec4dbff761ed86df9f1a93fac00bfbaeec0ed0
+fc8df081d848cbed5dbee681d90cec7bf255fb94d088fe73d883ddc07bff54f176b9dc35
+d01fedc198c4e546d932ed49a8d888e079ed34afd974e5affb5cceff69acd887da4fe088
+fe7aedc16dd3b0e814b7f125f8b96db2d87bed88ffbf48c4e293ff266bafe079d835e24b
+9ed978df3dd0a4ff5cedc896ed7fd1a3cb18beed2ac762d0afe579fbc86ef7c3a6e55aff
+0e97ff08c8a5e085d922d73df2c3d933afdd7ad882fe9c2fe160db96e8ab06ff933cf95c
+c6a0fb22daaf3cf9b628ed44ec22a5e792d89ff71a9fed7ed970ff66f378faa5fd93c3ff
+61f425fe95c4ff1df5c1369cf123b5ed03fec617eec01cafe522ff93f55c85d8fe71dd55
+ecc7fb4afe01d969e5a8fb32d94fc99fff5afb99f483fdc951fbc187ec23cbb20dfa61c1
+fe51f17ae66dcca9e492ff3997d90fabdb9350ed1ad886d2e467dc7afb2eff5afa76feb9
+6cff87f755ff2be44ad9bfa5f711ff37f4b870e0c498ddff4aaed861fec67ae0c1a3fd97
+fad242fc1fe55fc8fb4cfeb7e53ad81ddfc004d058e80ce59bd2bf56e786deaa52ffc67f
+e26dd2bf63afff7799fbd061d852e00bcbff973ed0a9ff961c87e097cfa5fa1fd875ed87
+bee5f237d9b828b6d90b93edaf15ff93f372fcbf92e62aafe403fb94f459ff0bf153c2ed
+67ceff27f2bf9dfb79f7af43fa99f252d8a5cb93e0a510ea4bd3a9ed96c6b4fa79ff52c8
+b785dd7bccfb4df31fb987c1ea86e39c14f24fff0cc85aba87f36acf94ff7cbfde8a089f
+f186fcaf80ef8dfe7ab6ca4aff87f204d86cfa93d108f9a1fe51f79ee539cef34c94fe86
+f99cd9b629e5aff6058ae4b6f3af37f251bfef92ff09b0fe1a86cd7feda5fe77f9ce2ee0
+a0d843abd835e04bc6fb79d8b75fdd37d87adfbfa5fa18fdb186df5cfe32ceb630eda1cb
+28bfe689f301ee42d1f9c49ee505c94feb199ee51eee74fdd04ffe27a5eb7affd833f101
+ff37f5ce86d879e092d8ff08afe084ed06d92eacf5b4ff48b6ca31ff51dd27c6fb84edb3
+3bb7fe5ced29d978e0b138b9dc25d85bfaa526e7c406edaa3bf167fb53d886c1fb45d95d
+ffc87cfe9c35dd5db9eb69dcf74dfe01d857e0a55ef26cfa7abefe69f5a1ff68b5f24fff
+c285fe93f89e31d96addc42feb78d286e069ffc862fc82ffa916fe5fda79ffb8862eff61
+fb86fe7cf4cc69d888e028a3e592d9bf15ceaf6bfc9ecb79d8ba45ffa5f933f149a3edc0
+36ff5abefa87ec5ad86bcfed7ae093d89cf4ab3fdd15f8a5e388cd9dffb7f34cfc94f373
+ff85ed89d9bf7af2b56ed9ff91cebea0ff2feb77d782e522a8e113c2f484cdfa51d6ad9b
+df86e56df21dc4ffafdc31d0ea02ddc420c0e80bcfa925e2b015ea49c1f288ff9c5af7b8
+ff04fab3ed12a5e506dd5fe4cc7fd89fec961ef5bf92d0a6e039d9af44fba5f959b8f102
+f669ff87f244e6c362f9a5fe65afdc1eb2d882fbca6efe9ad6a9e83fcd96fd28f7a110fe
+56f519ed61ceff73d560d920fb43e07d169fe568cc12d5a3c90afe52ffac58fbc51cbc4d
+fa13ee61d0a5fe10f893d0fc61b4ff78e6a12bbffe0eff38d198ffb993e9860fc2ff9356
+f9b486ed799cfe84d9f769ffd771b6fe01e63fbde29345a5d99f4194d8f96fd0aff146bc
+f634fd4ac2e16ddd45f218bff865ff89d808bfdaff61d5ade040dd99fab60ee047ed28c0
+fb6dc7f268e6a926d951f017fb64b8ff0cc1df79e9c689d9a5cb88fb0abcea96fe80ed79
+d893f6befe2db5ff8cef3fe5bb79dd11e0c033e59ff2d578e091bff25ac2dc6aed3986e9
+d850cd1effaaf179c564bef124c649fb3bc0fb9a5eedacca49ff3bf9d15de030b6cb4096
+facd5bd880ccf612feb5f16df5baff8647b7ff3793fe9d69e086b6f15afea5fc9bec77b2
+d011edaffe823d87c6fe5793fbc12acf80ff88b5ca96e105ed994efe11bfff80e5c293cb
+a4e47af2ae4bffb75cf938ff4ada78e0a24df22ccba8ff09eb52dd85c4de47e0b6fb6af8
+94c4f472ffb062fe3793ffb33dfe20e79744ffa2bff7a508ed95d95be045afecacf979b3
+e68bd8a5ed4be4ba1bfe80e595daa619f1adff77f5a9ef1fa5ed8ffd5fa5d87dda25d650
+e323d9c1f27ceabf1ec4fa0fceff26b0ca0ad35ec3fe33ed9fc85194eecbf5972cc1ed12
+a7fe6eef3ad3f769ff86d87bffafcd94e35ff5a131f84cff20d861dd9bcc1fe196d07eed
+b8ff33f9c391bbe54bc7b673feae39f28bfa831ea5d927e944afd82aebd187cae609dc9c
+cbb66dfeb0cb18dd59c8ff6cfb88f781d0fb21e43ecffb5ff306ff72d982f3ce61d810f2
+7bc2fe9343c4dc0fe487c1ff47dd26c6ff39f460fc8df979affb8f19dc52fba5da80e4a3
+62dbf872ed86e525b6d86cff7ffbd832b117ebaff871b9dd5bd894e4a415d836ec4ce525
+d940fb89d003bfe088d87fecaffe31f687fe61f205fba41c93d86de010ff6cf486fad61b
+cffba805cbaffed060ffc09dfe86f99a16ed79baf765f379f9d803e079fa8dfe2ab5df40
+d304edb269bf86fe9e14bfd296b7cb29ff42afee91ffb129e54dbeeb935bfbb939df6bd2
+9ffa86b6e795cfafdf09cbee33c7fe95d66be62aff48f4c7934ad898fa52ff7cf6af3be0
+15a5f7c4ff62d946cfff7af608ff52c6fe86f4afd09ffa80eeb233f1acff50fb0ff3c255
+93e0bb45b6d886d96adfb1f644fca5f095d921e041a4ed934ed8ed6bdd5498f18f4fed02
+d84cc7fb5aff40a5d82fe44794edadf140d261ec7ac2f479fec134ffd8ed5cddaeff7af6
+54faa5c7a0fb25de72cbfd86d2f809feafce7afe98f207e76df251c90eff4286febd82e0
+aa4ded08f47bcd93d8af05fbbeff19c0de99d904ccf078bcea85539fe287fc9c26eda5c7
+90f1b76ddaa81cff61c1e058c6fd6beb7bda95d4a53cfbd001f0a8fa17ffaff452eb7add
+c15bd03cc2fe7dcbff62bbff7bbeff24f4c714dfc5aff679f0a96bdd88ccfb7dfec1afff
+8634c79ff3bb93fb1b9adda75ae6a01074f62de54cdb1de562de0be269d755f838a3f05e
+9cdd7fed2ae5c255b1fc93d91ee078ed9bc2f29f56ff62f5cf83ddaffe5df275ff88d932
+ade49339f362fe5abffdd23efec7fa38d20be0adcb4ee540d623fa48feca8bed0ba5ff1b
+9fdd42c92cee79ffbd78b8ff72db82e99f38bed22bfeb60dff80f7a661ee9630d8f30fe5
+3d99e47aaaff6dfb2f87e034ffbf0af5b624e09e07dd57d4fb6fff0ce447d8afff3bc7fa
+86debbc993d86cfbafd086fe94f28cfe9ded85bbdc12c9ff3ad854ffa518f9d633ce62ff
+9ffbba61e01dcde513d8a222ff9c2fc0e012d83cedc284f15efbc782d894e090229ae493
+05b5e979f288fe66fbaff381e292ed9b5bf67abdd979f3ce86fea5f959df19d8f72996ec
+3ad367c5fb79ff9bca51ed9fe02edabf01c3fbaf58cda7fdd85dfbd24be295bffe9dd380
+e2a5d86af15ec9fb87f6b81de093cfa5ff68f081e5960dee4afc19ff88f19e3bfeb635d8
+4fcd30d805c7ff68fa79b8ed88d973cbed79a3ff87edaf47d62efa93feb67bf889febf5c
+c4eb54b4fb9ff5b555fe9bd228b0ff16f445fab2ff4bd8f37ac0ff4ad72fe0c10f98fb62
+cc02bfdf3acefe2ee5bc47e10dd88ecb9efa5cabe4c765fe93f726d8b313e582faad67c0
+fb5aff9cf272e58ef12886b6ca0b93f8c11fd955dc1cee4bfa37ff86d9ab51ea2999eec1
+52f228cab612d960fecd79d9a5b857d90acbed80c6f577ff84f77afbaf44eca5e431affc
+02fa9642bfe058d90ecbf17de9c151d337ed4edd3befa8fa86ff8ac965d024e0af0ceea5
+dc6ae09fcf68dd7aedb961fe2baed96cf9b67cffc535b9ffa5f785ffaf54f26197ff7ff5
+6bff24e881cbed42a5f20fd85ee051edbf60f226c4fe0893eb86e04bd314feb9d9f742ff
+afed35a5ea88f27bffc193d09ac0e517ffcf7cbeff45a4fe8ae57cfcbfa3f330b4ff38f2
+cef76bffbc5ce003aadd18e5b1dd5ae096ce22c1f362c4e566f1affe1ff694fb79b5ff02
+9df682ffa5c77ae588d803d63ded1df996ff62f7cd7dff3df8af2dedb60cf7a41fe0c59a
+e580edc01ddd50eda7e55ad944d819e09dc7afea22caa9e051d861fe0987ffd07ae5b0fc
+95ff6dfaa5cf88e456f2d8b21db8ff88dda24880bfec6fde65cdff4efb06ccb15df70ffe
+51a5f29036fad867cbe907d95af535eb4dc6ace085d87d2298eda72ff978ffca88f1a53e
+bffe1af579fe8eb6ff46add814d986debf46c3e537c8aedd2bd9af07fbb61fff59f280e5
+79b6d841c0dd9347e96ed888cafb79ffc96ed0ff864cfa10ff419ffe93f786d917ee78fb
+95f265fa07fc79b7ed3bbffb86f2afbfdd9822fe9f46c81dafd902dd43ff97ccb746eda5
+d930ed64fab3ff039ed82efeb979ddbfa5e53ceda2e07eedc64abfe0ac13fdb56cfa83d0
+9edb93ff6dfb1ff652fee1bf42c3de8cd8a044fb53d1ff9361d9a4d856ef0cd09efb7aff
+6cf35c9dffa666fe8cf366fe71f2d561edcb73e0b5fe50cbff7ae8a513fec1a7fb01e556
+b8d73ea7e854bff2aad493cbb0f277d826d262fe9ed0be28afdc88d851cffe83f79c06d9
+a132fd4af1c268d9f978f4d081fe8ff0af1ff984ff7af76cfc9fcb20ed87c3fb79f2a411
+ed9739ff61fec46cd7b822fb96fe72f492dc2cd8afef1cff49cb02ed9cd991c8a04dff94
+f360fe21eebe7ceb9a0fc2f286ff2de07cdb86e524dfa4cb32c1e409d0ed20d840e1a1ca
+4e93ff9a4afba52795dba909f15afbce82e02cbdf279ff1df387fb2cfe9416e669ed5eda
+06e55eff7ee0af37f458fecd38ff79f8a617dd5dccfe6ae5c591e66efbb50bbee2ab4ced
+35d85ac9e969d813d03de0c251e5a5cf39e952d18ae0c366f8d583d99c28f946ffaf6de2
+0bd83fedc386ff4ba5d879e586df7bd05ef007fbd478d813e3aec967fdd62afab0e738cb
+6dea8afa3aff5bf6c03ff9a9fe87f581b9f883ffaf1afabfdb16c0da7bf0b9fa34f5c693
+deb938f05bff68c79fd9b45fe1afd976e0afc2ff22f8a5fd97c7b0f20afbc986e0a462ed
+b5de30e6c593ff2dbaef4dfa13add834ccff912cff9cc1f67bffa341fe8cf386feaf0af6
+88ff6dd999ff19f641ffb026b6f217e5b988e77bf1c153f89effb659f296c1fe3bf5aff9
+51fd28ffa5e88828f9b6ff8743eab80daedf79db85ff9ff705d0abc59cceb583e36fd823
+d560dd51a5dd6dd0ec873af7a7f237e610d383e08c4cfa239fff93d986e026f64cd0fe96
+09c3f73afe4788dcbf38ce4efa2a9edd934cff08c1fa94118ff39f56ed7adb71b4d59ac0
+ff85ed9450efce6adf0ab5e41adfc09add53e2c55dde7ad82ab5fb5daee069d97dccfb5f
+c3fb7affcd01d830dda6d079c724e4af04ec85e0bf1293d895dc83cb62ddef933ba3d1fa
+6fff93f74cfe3dd01fda5bb6fe4bf217fd48f210ff95f079ff2afbcb0efa4596fdb979d8
+65fec188ff4aafffd86bcbea4dd107eea5fe7ae69334bfed6ca4dd80cff59559ff7bde85
+ecd067f0c0d97ae841bdfed868fed201faaff61cff3df25ae163fbd8af3ff786fe78c3fb
+61f60eadff2798fbb6fe56f4c811f2cb86fe97f10893e89e4cd834a5fa85fe60ff11f35a
+f977fcd06afa5e9dd9ff34f255f719fe9e51dab9ed04bfd934e063caa5ed77fb93f1c678
+d992e079dd87d8b947b6d988e45c9bedc0ade00dcdff2cdea544f398c3ed0da1fe86bcf7
+7cfbb641bbd814f2c6f943ffcb24f0b501e1c1a0ed10feb63cffb520a5f38cd0f15eb6c9
+3cb0e29333c4e57cdd94cf26c7b716ff99beec4fd93aaad87dedcf6dbeea8636a5e6bd64
+e0af3ee829d455d8ff3cc0ed87e2bf4eecabc994e086d888dd39a5db26cdfe44b6c6a2ce
+abe279d0ff6afb7af55aaaf1c198f209afe04fd8149ff92fff51caaffe38f6a5fe03f3a5
+bfff8a61ff7bf3a05aed7bfbafcb20fb5db8db40f218a4d86add98ed80ffa55090d89d5c
+fbbe78ff61fb2cd7a8c77ae5c15ffacf4aff1d9de427ffa3f277cfff8a5bfbaf06fea5f2
+79ea61e421cba5ff8af225ffb93bd9f902c3f2d71693fa7fffa0bff76ffdbb79b1f60efe
+62f29ecc16f646afed1fff9fc0ff7bf6b087ee68fb0aff3cbff40f86e01eb3ce9bfe861a
+ff5bd8ff7bf386ffdd65eda2beed079ee57ceb67b0c83fe016d0e52fd84de9c793d702e3
+6ddf84d0fc77e562c4ff30f454ff1fe061d9b7fe1cedadd051eaafd393f279fb56f71394
+ed9c75e586c6fb79da6ed818fd48a5e0bf43c2e484dd4cfaa0d091fb79ee05cf93d7af5a
+fba779afff4a95ffd031d84ded0593dcae17c6e06adb97d01eff79e585befb64b6cb4aed
+16e052d91bc0e088d87ced5bafd8f79fc3ff47dd2ce0afcd87be42cc26c7b83bb3cc21fb
+61f7c74cd91ccdfa7efe86f553b7f795feb51cff60f299ff53edad30f3be9bd96fe0a5c9
+94ccaffb05f185e567ff10f69e1ee447bfe021d986d5ff32cafe04ddaf42f3b0ed53e698
+bfee0ef7a0ff5cf52eb6d70afe43adda62b6f54bfc86eebf2dedd868caed60b6fc9df378
+c3fe44f49efa2cfeac42fbbc93db3affd02bd8fe79f495c980fe93f2a92ef347fac296fe
+33be57e670ee93fb60f738d9fd93f8a5fc5ad8ff79e493d6b574fb99ffb64fda25d893ed
+74c605c072e08ed8b628b8d911ffa1ca04fe43f9c00efd3af64a93e4b343b9d891d97cc8
+fe80f9a560ffaff34ab0dd51a5ef6bff9fcb0e93fec360fa7bd886d923d86dcbff7af193
+c1f830ffc87ae0c10bdb6bfec01bfbaf23d986df0ec9a8e26bd987e55bd87ec9e579ed5a
+aeed6ba0f89607e2ae33fbb60ae64dffcb91dfa61ee980e58efb27d8b60cb8d87eebb104
+e04dd586e7920cf2bd40ff19eec230d683e59bef6cfe1fb0ff92d9fb3cf549fea7fa8acd
+79e07fe686edb07ded86df7ad9c468ff9ffa31f353fd32b6ed0dc4ec9335cca1fc6bf9c5
+87d82ce761fbd934a5dc22eb43fe60f387fba551e5c55fe077edaf1bfa399fffaad34a98
+dd75f4a1fe44bff859ff25f9bf1cc1ff92f106b5f82dc4fd03c0de4becc756ffd665ead0
+83db9f61fe6dc8ffb643c801aef281fe9ff349fec46af2c19fed16aff3a7d069ec83dfae
+5cf965f40bff49d09fc2e440ed5aafcf85ea78dd39f156f636ff50d3b82aff4cd0a8fe17
+f4b02bdf88cd84e096dd58cf9bfe43c0fe72ee0ae2a81dfe5af694d6b676bef886ff82c9
+a9cf9ee502edbf20acff12b4d088de82d2ed8724f9b0f288e538ce8ff16296d889de5eab
+ed953bdd54ff70d09fdf68b0fe87f373a5db7ebaf026aafb2bc5ed05d94b87efa5fee5cd
+60de36e06dd7a424ff972dfb77ffca4bfe2dfa99cf55fe93d8a4cabc93c0f837fb86cb9a
+f928febe0dcf96e57fd888dbc094ed6ce2c58bfb2fc1e35bd5f9c213ffb507f579ff8bdc
+6db2e31bd993d884cbed7dd8af12f248ffd108e450b6f413fb3bafdb71fe95f252bdfd3f
+f462feb84df3c778e00cff57b6ea05c1dcfd29ed79d0ff4efbce83ec9dd847ff1af4cc3c
+d820b9fb0ff7408bffcb79e051adf593fbd013d965a13dffafd093ff15f6ba78e2c558e5
+bf66df7edbac11f4be2fed05ff3fe15ceb7aafd60fe961d8b56beea5ff23affe15fbaf26
+f71bfeaf0be79ff2659bff9248a5e679edc0a5cb22ea3afad167f17bfb5bff2fb7f743ff
+c97de3ae67f498c2de6ae093c1ff85d038d976e5ca6bd99de32695dda55dff95d87cc6f7
+7fffa53cb6cba3fa1393dca50af5ae24fbbf93edb66ffa81ffd05ce4a1c3e09959f886ff
+ce7ae030a5ff86f7c2ed9518f94ea9d883edcf50feb68825f898ed46c8ff6be5a5ceb88c
+f2a8fb13bff168ffa2f518ffcb3ad861edc866de70eb9bd8a5ce69fabd57d6afdd03edb3
+fe61d93cff4afbbc62f2b704ff9cc727eb88e579c1e0893afabe25ddb03dfd26ffaf4ee9
+2bf261f7a2fb2c99f60ffe58bfff01fbcd31ee43faab2ad95bd0f67aff51c6aff235caff
+68d9b87ae45bce32e599eb4488febf63fe1ef4bf16edb710fe5ebae44ddc2bfc52beeb7b
+c1ed63fb31adf30bd8feacd201b0fb73b9dc43ff70fb61d82acb9ffe32ddb244bde0799c
+fa86f7ba4cf29fd051fb3fff4bf2c480ff1dfb50f56ad025ed93d686d86fdda5c887e6ac
+3ff8bca1d54dfe02afeaa6cf79fe85f9cd7ad988c7fb79d88fe0c006ccafed81d886cbf0
+6de7ba8ad984e367ccfe87ed1d99e10adb6dfe85e479bce646f3c90bfe81fbae12c8afee
+a52edc86d86cdd9fd168e897c2f16ffabe936bcfff44b2fe08ddc093dc7be9943af160ff
+cb86e2279fed92d81be697ff79dc62d879ee93fc4eb8de06e43c94ffaf02ffbd93ca89d8
+af2cdd79e086b8c796e2b77efb19f39ef70fff2efc79cced59dd13fbaad897f25cff19f1
+53e805abf242ed0da5f01afe46afff7fd954ff39faaf2bd8a246f710fea6d8159fe06fff
+c768f1aeea23d854fc2da4fb9361edb5dd4cd3ff78e006cbf951f2a7ff4cfa36feaf41fb
+1ab0cc23e1f30e86e3d56ef4ad5aff1efa51bfd986e0a438f059fec108fa58f6c44ac1ed
+21f7b7ff03e586c6f265fea5c0d927e0c286f12ff408e560ffabef41cffa29ff52fac65a
+dfbf32afed84d956e01eb7fe95ee67c63dfc31d984e09fd8b987ff5ed07dfeda59bacb97
+e75cef18e3a3ceb979f886fecb7aecc053ffb8ef3dd8af30fbbe3994f89cef86c1e01ad1
+ff982591f59f5ef28bfd6a9ae2c502beeb93da72c8e579d8f67affaad8aff8992ae5c237
+edc69dd0a5ff69fb2abffe93d57bebb581e0a67af286afe38a419ed9ad2fff20b0ce6ffb
+88f86cfd41d8a5b9fe95edc5118ffeb169d87ae90a9bffab63fecc6bd89ef986ff61d02d
+cba5ff91cfb56efbc04cfb36d9c09ce5b647c289ff67fa2fd787febf60f208e950df17af
+dd389cf29249c3fe7bf3a4cd7cffd14bdd02b6ff68f0af3dc2f9d838e9c62bd946d8ff38
+8dfb80cb24b5f806a0ff9351df9d3b75de4acafd8f61ffb463e445ed11e6c29ad962e017
+d851fecb34ffba09fe3bc5fbb5f451fbc39ac0ea4bdd1ae147cc9fed79e45bcc45b786f9
+bed915ed9fdb92caf236d0ee934ce418ed40c6a6f192fa5af20bde62f8c30f96ecc493ef
+2efb1afa86f6d636dfb6ed79ddaf3efb7dda8affc296ff67fbcf22d7fb9407e04cd910e3
+61bffe80c8f442d879fea5eb70bbfe7ab7ffa0f7b577baedae43fe9fe063edd432c6ef0b
+c8fbf193ffb61cf2b9d804fb8afe81ccaf5ef20ff9acff88f324a1d96aecd06bde9911e0
+85d387ed68f681fe99f383b6e913bfff23f87bd9fe35d24d9cf45aff23f84aa5e08b01c1
+fb98ff7fb6e507d947afda7ee59fed26ddacff801ffe66b7d493d8be0dacec93089fff25
+f79bc2ed5ad6ac37f24ae5b77be9a664ecc0a5fa81ff8af51dafe15c9feb93cf10dd51ff
+08a8e01ad052c610f4d31fddc088f046ffb786eaaf65ffb758af02d879ecc6439eed79da
+20b8f732ff84ecc5439dde79bef186fb51a5fa80ffbc6efe1ddd3cd90cd731d853c7ff77
+fa5fabdc93ed17a6f288ffc972e086cc6bbfff79fbaff22ada52cafd66f795c2ff19fbbf
+44affe7bee5ab8e2c6a5f658ff3bf39ffe4cfbc8e552d062e521a7fe1aee84d8a5c904ff
+5ff7c933ff5abded41b9d486fa36ffcd19fe5df788d893cbf35bfb84ee93e4a552ff65f2
+11c6a9cd1efc5af798d92ce5ccfb87f65e97ffd252f5c1a1e373dd52d0af69bffb34ceff
+5de617c8e527d84fedca56f27dfb89ffa6f87afea52ed993e0c23bfb64c0e654dd05b6fb
+39b9fca5ef1ed93ee571d191eaaf33d7be6ded86d86994ffd250d938cbf48d46ed11df77
+cb64e079d9bf6db2f384dc8affc968e0b1ff27fa6ee086da19b0df75dd16cb9fe555edab
+db69b9e586da78ed37e64e9fdd93d929ff61f9ca84e09bff7cfa79da80e014cf88fe649a
+49e434ddc11591e0a62eff4bfb99bef628ffd87fe4ad0dc79fd9b35af0acf71ca5e7afc6
+60ecbf47c5e007d3f257f60eff86cda2ff7ed896ec82d8a5e40fd85fe7b1ca94ff57f90b
+f397ff22fa37e14aecc40c86f5b6fc8705ffc093feba9bedb02bf5951aff3ac4fe03ec51
+9ef6944dbed093ed51fec493fb86f59afe6df924ffc60693f3a54cfb32c8afff7cfabf2f
+fe6cd482dc31affb27d056d838f24bffa4bffa40acedffc0a5fe70fbadf841fec594bcd3
+09e06ee59504f161f796fe48f98fffbf6188d2fe8e07ffd82b96f286b0ed6bb1cb77d69c
+ea08d93ef525fe4bf72dfe7cf488fe974cfe12bfe080d865e07ab5d898c0ff79f7afe99f
+1c95e5d171e05ccf43f801ffd06ae5c2a4f078add87bf9d10dd8f474fb11b5d8ad3bed4d
+d625cf4fe0b7d99661c1fc29ecc397bef91fa2d903e186c2f00dfbc1a4e079d993ed86e6
+9ad2ba2add61edca1978d920cfb92fe06cd787ed18f379ffa7fa48ccfcb4d930e088edba
+32d001dafa9e42dfc15aa4e5c313fe5dc1ff1dfbbef14abffe7ce3abcb6de0aec561ce46
+de26ceed7cdda041fea6fb3ec3f15cfe14acd82ad95cfeb8f346a5f228fbaed983dd7bbe
+fe25f959dab831fbbf42aefd8d35e4c499ff29f59fbfff7cf28efba73e88edafe07bd988
+ff0cdf6fe8ca65ffa8f741afe4954bff04f64cfd15feaf08fb61f593ffb582e0f393fa7f
+ef93c4f20ed961dd50b0d8388dd9b8864fa0ffaf21cb5df586fdaf2fc0f181fdaff76bfb
+b677e5349fda94378ffba561f3bf58eda4c71ff099ffba9ff26db5fa37f6b2c720ce9ffe
+06afd187f455fb92e32fd861c9fe7fd8a114ffb632fb4aa5de86d810ffce6ae093ed62c0
+ffa548f179e069da0eaae061d803ecb4fe13fa33ff56d56af2a2fe3e94edc11fd5a5ff5a
+bded7be59ec7b3db6acbe484dec24ed00afb5d3add57e009ff4bafff7df888fece67eec4
+fe26e4c4ed6bd4fb7be79cd86ded96ff6fd021ed32dc4cd2f092cef748ffb6e41cddc42b
+94ff12fa51ff79dd0de55bc2ff07c1d986ed79f285e873bbe43ced9fe07ad06df983ffaf
+34e564efc961f2c793eacc5cff98ed7eaff308ff2eb4db1fde86d3bb40fe80f7ce33fea5
+f96dd884dd79cdaded16dcb94ab6d8fb4c90f279de7ccef936b6cf5ff22da5ed3eb6ff20
+aded7be8a3d1b889fea8cb9ae567bee835cab520fca50f7dafff8c07f445a6d80eff3ce5
+4cd80ee152d995cc92fea526ff7ebae065d87aee51ffafdb86d580e99ed052f593fb3aa3
+e09353ff17d951ff2ccbf669fec524bfff03ebb5dc10e099beff3e94e69c53f50ab8ed28
+d950fa38cbbb9ec5e95bf0affe05f9a4c2e04b93edc558bfe539f24dbde75f98fb7cff89
+f608aae0bc55fc33ee1699d9ff1dfa93c0ff88fb79c99ff836fec127ffec11c351f939b3
+fb24d093fb79eb84e0b6f2d842bddf83c6ff79ef85ccaefe79f5affb7cff75f20addbe55
+ed03a5f315feaed070e55ced41d9af01fba9c970d5afee61feaec3e588d493dfae46d8b4
+79fb50a8f29343a4f66afa1eccaffe23d1ff8dd978aaf78cd285e668fe6ff57eff9a55c1
+e76bed2196fbb80990f126a4ffc19dff21f8cb45e226b1d07ff12affcd88d893fec75289
+eaaf63dd55d819f24be567d9b078de62be9eefd278d8f173d9a8ed02dc55f73ffe5393cf
+fb5ffe9f1fe249b8f31b9eddc235a3e016d859e87afbd06bfbcb84d9992ff9b707fcaaf8
+6afec086ee2fff1af886d921ed449cf402fc5ff887ff0eed9ac2de61cdffc34cd088ed79
+df81dba538e34cffc95fe014feafd71ce045d815d6fa9249d97dffca5bd8ffbb68fad981
+0de063d878b5f59ec2ed37feb5da9911f263e56baef5d844cbfe0bf775e286d888ffc404
+fb93f44afb2790ff9f0cbffe5c86ffa1bcc998d1adf81ba5eb37d1f686d9fe68c1fb2793
+edbe69f787fe9fc9399bdfaf3fff4df5c979edd09a25c2de33e347afdc8ae0bf42c5fb7e
+b9ff6edca9ca1de5be9fcf5cf32ffea520f086feb948fb06f361fbc37ef2a61efd93f2a1
+4bf995c2fc93e1b929c5ffb4e43ba8f38840ead29646c6fbaff393fd07d058fe86dda248
+85ebc1acff2cbfe00da4fb9369ed96ceaafe12ee4395e1b632c787d8b0e531f3aeed3bb8
+e2c34af116ff30dd62edc779dcaf50cbb40aace081cff858ffd040b7c629f9afff21f593
+c3ec68b5ff4689d8ff79b2f693ffd379f35c9affa565e2d014ebc16aed99d54dfb39ff93
+d586e8c095e218e7a7c79ecebc0fedb830c0eb66d93acbe374ed29b661fe78acf386139d
+fad819cffb9f1bffafee864bc435bfed92e019d56df2befe3efa59c9a5fa50ffc537e5d4
+af2dff41b8cfa4bff151f7a7ffea5bfe7ade65d886c8fe1d93fa88d978e97bff9f4dfe13
+fa98ff65c2f140ff60b6e5028bd9f270e062d888d670e50aa6e01eceadf32ebeed17cb53
+b909fe35cbec0dd8f13093fa9f30ff4bfa82f18ad873e00cd952fb3aaed87cff5bf740ff
+b06cfa9ffe7ad387ffae0cffbe9ff7c402c6e543d0efc05092e8af7ac1e06fd82bdea9d8
+fea05bff7af75aff0be591d878df01ec81dc965ef8b71decc39de760fa28fe83d86fd91e
+9dd005cb95ff21f94f9cf2d832e55afbafcc07c0e585ed88e023d8fa74d296ed38c9a8fe
+b01bffa5ef10e451fe9fc1fa7afe61dc75fb599ffe81d8fa99c3e57ab6f955afffc84ee0
+bb85ddb429b7db18eeaffe79f281befe61f227dd92d885e5d51cd950dd08ed52e589d03b
+e050db96f068ffaf31feaff664fe32f752f494fe62fa0186eac51fceafe886d8b322b8f3
+96fe61d626f2aecd86ff7efb6dbdf396dc62e50cfe93f267f8abfb43afda6ee6cf6cb6ff
+a5d68626f28bfa2bd7b93eb6ed932ebdfe12afff83dd52e398cb4abffc7ef2af36ed56d9
+87ee11e797c4e166f2a626ed4a96ff28cf8ce761a5f379fdce0cfea0f665ffc2449fdd1d
+c7ed01d988d172ed16f94ba5ff92f385fbc398bafb5af480ff79fa2fb8d884e578dd10cc
+9bd887ddbf15b0ec87e4bf42fba5f23b9dde52fba5ff30cf87f19fff77e907df51d83be0
+03cc4fc0ed87d2b53dc5bc38ed5ac1f583fea507ec4dc80cedbfffade05bda6dffa4f84d
+ffadeb5ae1c763eb1ef66dfb87ed79b6d122c0da90ff26c6a1feb83cff04d83fdfc091fb
+d869f0a8fe04bedf19d845a6ee6dd83ae0ad70facf7effa760e4b8ff3bfbafca79edc055
+d035e0a546fa2dd7a5c8b410e9c29ffb0af25ad894ff58f104ff42a0fcce3bd85dffb271
+dd83c7ff26ed82dd6ce652d919cb4cdabefe6df5a5f286ff91fca91cff53f8a5ffe092d6
+a3e518d137c0ff81fb7af69552cd399afeafe805d86acf7bdc86f79f48fb93d1a5d936dd
+07ff45f68eff6be174b6f74fcc86da7deda4fb79ff61be0eb8db4386d8fb7bfe8af7c65a
+dd86fec004eab726e250ccf4934ba5e09643feb32afb86f6b66bffbe7aed86fe23f2d193
+50dd80cba5fe23eb86d77ee4a5c2f26093ff9df125d0f50ffe4eafd262f815ccaffe7dfb
+8bf7a73d94d8b916b4d94dd82df6c993e07fdc156afe26fb62b6ed97e147d0a5df3eb8fb
+76d8f38646c2fb80f218e537d809cff0ae2fff5dc0fe7bd886e09fcd4ced01d7ed79e41a
+fb51f4be6cc3eb1bd1f59fff75bff2af3bcd5ae62497ff19f2b07cfbc659f085fa9a2efe
+b5f20acef17edcc499de03eccb1ff1cc14dc6dd99949fbbcff3eed69c6b661f42efbb34c
+df23e6c70bd96ce552b7cb95ed77fac09dbbed3a98e05fd822edb3fd2efa9ffe7aef87e5
+bc4af225d85bf1c7afe080c8ff50f787bbf323c2ffd219e1a50ec5ef9655dfb2fe9ff96b
+feb975ddc19af10faff343faaf13fbbc9dfeaf36ff95d3a6e09116fe35a5dc9357eb39d1
+fd1ee493eda5c9afed79b7d143e73395ffafd811c0ec7cd96afdbf64e50efe49b9ff5a9f
+df935effaef737ffafd71e87d8aff937fbcd9fdc78cbff93f979a9fa90fe82da89fb31d8
+b604ee4bff79f9c70af0a1ff67d086ed5be03dd00efe599ed97bfbaaff98eb419ff20e93
+dcaf15ff5fe5934b9ff580ffaffb30bbff933ac650b6e9983fff1bfa64cca2e688dd79c7
+ec60de2dcf65bbca61fa2bc1ffd886cef84effc986e0ad5cc767ff07fa4dff38ccfb69f9
+a3c4e0883cfda5f75dd521e99f2cffadcb93e778ceabfe3df8afd854a1e082ed69f7c2f1
+1693e09907ff51f1147fd939bdee49d72ec6f91cabe061ffc689d893e060a5feb649bae1
+0fdd76cd93eba5dd91c6ff09e6c039cc017dffd179fbcc42fdc497db74fab5ea31d861d9
+7bcfeb1dd9afed90db14cbf37fd891e033ff51cf25ff3da7fe86f292d9fb0de5afed8046
+b3e85f99e3ae31f711fb88ed9ed8b67ee090da9e0fedbe74ff08f5ca62d837dd87ff79bd
+df934cf230c1fa20ef71d980eb0bc1ed61cd06dda54b8fffd053edba7ad992c5f389fecb
+67e087eda560c2ff7af09e44fe2ef40ebed939dd93f679ffa5fb19ff75f966f235b7f45d
+a0ee8afadab521e752a6ed78e52ec1ed03d86dfe87f121e45aa0f67afa09ff6efb86bee3
+59ee7af4c293fbb583f1cb1cd953ff3aa5f2934ac5fba5f223fec105fc84d8be9fd625fe
+48f7c51ef461feafca28de5cd9bb85ed7bfeafed45d0fa5bf5d885ffa561e093d617ff62
+b6fe29f693ff7afdb6df39befe80c7f728feac44e41d9eff0ff551ffbae640d816cfe57b
+d985caff73fa7eed31d7b446b8d95ac926d89ce07ac8affe62de47bf60f49cbfff07d985
+fb4fb0fe57e0afcb50fa86ffc043cd5ce5a3d048ed23b1fd03d2b219ed61e4c04a94ea9d
+d27be7c55cd8ff8906dd6dd67bdd93b9ee4bff3cf6b780dd6ba5ec82d830e078f393fbad
+4aff1ae09f0cc1fb9704c9b716eb51d0f2af43fbbe9dc4e586d875e442cb24ed61faa20b
+e843a5e069d5fb6db7de79d9c094d8089af386fbb959f1a5fc479ae228cba3fe63f396f2
+84f488fe52fb1aff4ce415d87bf193fec334e068d059ee9fd979c6f49613eca2c6b601ed
+93feabc62de7a6c2ff51cba1ff6cf99edb06feaff567fe09f6a020feac27e0afc0ff51f4
+34fa62d0b181de78edcc14ffd05affa6f893fe52d21fe498d6be6af3cb8e5fe5a8ff71f8
+9bda8a06ffc387ed33dd3ef24efbc09ff9b384d97ae5cd6dfed186ef0fa0cfff4bf7af2e
+fd6df7c95ddbae3affbf1fd0aff367b7e806c2df1fd839d502deabed83d093d886f7b0fe
+2de50fadfb86f397feaf11ffbf2388d0fb62ff35f2d078d91be086fe7ef76094de7dec3c
+bed834c3ed5dd727dc84e06dc7ed66cbf371fd3194e1afcd9ce51ef3c102fe4d9af3bd30
+e5b60ac641b7da8bf16cfa32feb247ffb8f232dc4ce0af28febbd96de55aaafa7afe99d1
+b002e05dd5ff12f14db8f2af1dff5abfe93390edc561eca5d345afff27f4a1cb7aec5bdf
+15c7ff79f96dafff81fa9affb93ab6dc60fa32ed993fcbaa80ceed4dd81ed83be5bb6ae0
+aaed47bedf89d8994bffa8f861f042dd0ecef42bfa5bafe586fe75a5fa80ff52c8b3fc3c
+a9f79350e59dd9f9860eff4abfff58e4a5caafe08952f179d998e8aaef02ff4eceabdf75
+d0e68616c5fb7bd887fcc78342f6b223fdcf08b4c91eef86ff93ed2cafca9dff8b30e096
+caa5f97cfbc10193feb71dfb93e080d075e409f894ff87fbaa40d3afed52c0e061cb79ec
+a3f60be8afc779ffd96dfade599fff90f984f062caf841fc6bffa528f67afaafd82fc89a
+d2b99fff74b6d895c5ff1ff148b9d90fe0bfa5f91896e4d010d8ffc215ba50c2ec89ef76
+a1d87aff41f82dfcc3a3fe3af75dff85e47ab6f61293ed239ff8d869b3eb1cee3ea6fad8
+79eacb6794f6e060ffb752c534c1f563fa3ed8bffb5cf749df29d863daade53add84c3eb
+13ef61fe86d954d72cdc61ed93e5249efb10a5f01cfc58d37eff9f27feb706b4ea2089f7
+c503dd5ccb94ff1eafd093da0ae5b859dc11e864fd54f307fe66bfed47fb12ed88d96acc
+ff7bf3963ae585cfff498afba33f86ddf57ffe43de13d4f926f292d894d879dd10c0e077
+d025d844caea7bc8fb5fffc138adfe39c2ff7ccde7129dff2ea1ffd951a4d87de496d9fe
+6fb7d893e78118da86c1ed71ffb5f244ff5cf39dff497bfeb7d923eaaffe71f5afcf03fa
+5bffd87acdfe4dd894e024d950cbf36ad6ef61c0ffd93ba7f297fe2bdc6fe079ec30c2f4
+7dfecb6fffc493bfe080d88ee024d5af84e0b84cb4fb9b29e058caff6af25ba2edbf61ed
+b5fbae37d8a4cbadfeaf5fcb6de60bef5bff96fa55a9fb91f395fea42cff4aafd881de94
+ed79d955abe05c93f3b860d4f08718c1fb31f314fb499eee0dff27acfbc2a5ff04afd894
+119ee0c0a5cc0cd8afdc9351a6fb9a36c3e89b4bffa1c8b98842f5b668e57df96cfe88e5
+86bee24696fba54d7afdd672d07aedb9f64dffb6fa9e55d738aee09c45f218a5ff38f65a
+fa79ffc339fea2f20be8c0a9fb13b0d822e0b902ffd82adb62e997ff23f15185ed9afebe
+4ffb73c920e486d9bf18e166d861edbcd89de509f24eff07bff189f703febd4bd8f9bf3d
+e4b6ed6bdd90d0a7bfe07bd886c8ed5fe142d09ffe35f6b8fe8421fa69f686fd29fac8f1
+43beff8e19bfed6de43bd9f1add02ceda4c736cba9f23cfe12a1ffc728d8f3cab612ff36
+daa70a9cd8931686dfafff87fa20eeb97ffbc366eda9cb97e505f0af6bd886dd7afe62d6
+a0f57dfe88f9cd79aff794fe08c66de588fbc83ad91bddabc79eebb563f535ff86c2ff0e
+f8c1841bfd5af9af88d2a5fa28d09add69d2ff880e85fec55893ffaf4cfe24f73cfe4cf7
+a538ff93f86ae07cd488e346cfed88e0bf4cc3e2a30285d6e563e0cbfb31d893fe8215fb
+6effc007feafee0cc2dc79b9f25290e69418f96deda2e552feb6fa32f2c8fe40ef05ea96
+d26dffc852e69ad111fe44acd963ccf92bff52ce39f087ea40d050dd359cee1dc54aca84
+f6d358db06b7ff86f67afd26ff48f3ce7be0a5ed3eb0dc943fc7ecb5dc71cbed3be560b4
+ff45affb2699edb1f29e23fad601e0c195ec88ceafe479ddb2cf0bafed26f356d96ffbaf
+5bff38aeed9257f4b6ff9410f7b04886b6fd0eb1eaa7c1e05194f279dd7fff9354fbd080
+d8fa3ffeac45e0c264aff287d679e4b06cb7d393bdcb52e5ac0ae1b227fe60e493bfff7b
+f31cb5e698bbfa91c419b6fb94ed7ac8fe6cb7ff92f2b73ba5fb93f579d4af5ae093d786
+d8a502fec024d0a0f156fbaef38932a3ff17b7fb96c0dd6cebc685f0cb37da4ed0e57db9
+f564fa38ca53f2049cff1bf262fbcb88dc85ff17f2c308bbd299f811ffcc72df46edacce
+79ffc5f15ec9f84cdc349bf8d549d828ec47bfe0a533ed09b2ce61dfff9b28fbcf1bdd46
+fec259f623ff5ff779fe3bf3c179f8be82f2c24fec27d79dfb77c144ee05dcfe9fd965e0
+0bffb554e5d65fdd22d8ffc21bd04ee72bedba08f252f73bffc45e95f879fe88d424e05b
+feb9f253e47ac951ff0ef8a51ee077b6ff70fbbc62ff42a1d97ee6acff9fc1d957d68ae0
+bb50ff60cda5e9b486d9fb2bde6dd8af30fe97c75cfe35edb50593e09e76f28affc81bac
+ff86fac49ff718ff88beff72f6b78308bef1935bff80eda507e07bdb9fe218ddb7d96afb
+af4dedd834a5fb88dc5be940d8ff92d0b47f4af229ffc189d42ff5a50cf8affb8052ea86
+febba0ff6df9cf6be0afdd69ecb7d94de50ada63ff96cd04da80d893fe2aee87d883cdfe
+5dfa15c1ec930af095c3ed1effbe11d35efb87f574fd2d98e41bb6fc40c652fe6496ef7d
+fd47f3a5d020e784d599d957fed82effcf1fe15687eecc6ad9a561e66ed9afe95cd8ae2e
+edd2f3d850c9ea94d830cbff88fbbf4bc3fc8f2fa0ec26cfff0594ffce1ff46eff86c9af
+13f257fdd8adc1e0aa38fa9ee774caed86439ae0bf9ef134e360c4dc369fffc5189bfa8f
+13ffc680fb72eb86d977ed60ff27f46bd89edf62ed36abd98de2a03fc4e0af2efe5bd8a5
+50f993e526dd3aeda5c3fe6df6c87eee8ef423e6bf3dcb9ee168dd79fba7f317fb6df2c0
+62e752a4fbafd8faa03de501ffb823fe953bc1f922fec35a9e388dfeaf0dfb61f79d50ed
+2a93f3a562edb1ff7dd85ba7ddc15186e3afd201beed73dd93e09e1cff5287f780d85bbb
+fb3e99ffb8f312fc45afd87efd1795fbbf4893fec132f1bfa53eddadcb45f616feb1d1a4
+c6b0e14cf514fe9fbff128ff56f3afff6dfbd07ce086f1cb6dd87aff68b6cc06e74bd3af
+38de0ed89fd783f9a8ff1bb6ff07edc041d887cbbb2a9afa86beed7e48bc0dc0fe86f158
+d2f279c5fb669ce27cefaaffb9e52bdd86c3e077d9bfa9c5e703fed047d910b6fe92f572
+faaff29c3ffca2f837fe50f732beed84eecd04ebafff1ad0ace028d861ddc593ff03f3a5
+c1f074e5afed74e4b45adafb87f529fea5bfe09938fb49f10a9aff7cb7c752ff80cc97d6
+6bd820dc48a5f608fb36aafe17f19fc0f879ff94bcf07bff9afa72ff5ee404d85ef1c782
+d99460ff9ff844ffaced1ed0ff0ac4dbff84e95ed095dd9342b4e305f1cd43d80edc67d3
+55f999ff3ca4fe15fa43ff6dd886bcfa77f6cc3be41ae03fd80cffbe5ae081d98dd77dca
+fb61d83abcfe9443c4ef6bfe7cf290fea765ed79b6cd5be04bd80efe2dd952f4d0841ed8
+9fc889ed3086f9c193e57dfbcc39d7ed6ddc01e54ef70cfd86f881beed78cd9dc0ed87e0
+af43eb20d8ac42fb14e05acf88ec26c8a3fe7addaf4df63efbb7c60ab5e07dd874e4af68
+b3f6923fd59df436fe17fac5ff69d979afff86f791fb84e8c160abf2bf53ed7ad597e33f
+f1209ee0935ff2c096c5fe86e97ad0efb017b6f024fea50ee599ff915ad8fa7ab3dd14d8
+4fcb09e0bc2ff9d93dfa93ff85cb8cd897ff059fffaff050e60eafffcf56ed1bafdd5ca9
+f29321fba5f688d379e0b6de3acbff19b5ff5adf20d360ffc493fe5af3c392d0a8fa30db
+51b7f244b0ed27fb93d0a7cb26eb93dc5ef011fec440f9d32ae0aafb22afd97ee0be871d
+f3abfd29bbeb4ac81df59502eed724de8fcaa5ea1caffa82cbff33c7fea56bff51a9d860
+f92693fa86ff5de270deb766f11ed0f5bf23e04bc0f994ff83f75afecf9f6aedb125b7f2
+42f564e87abfed45e36cff7ffad9499ddb84ffd032fec774ffb1d05fc0ed31fea74695eb
+ac5dc2e53bf386fe7bdb06e051bfdc84e529fe62bff279fed06cffc688d86ee812fe88f3
+79fc37ffa3cd5593edbd6bfe88f164bfff6df6ae46ceec9644c6ed76d09effaf3ecfffbc
+78fb65ff0df559feca5dddaf53edb602e6d824baee15dd82cae54edbc695c2f443ffc687
+e0a5479cff88f3a558e024d69eec931be5bf11fe9fea7adaa5fc1dcafa68ce95c634d3b6
+68bff208e54e95ea9e15dd4be687fa1a9dd87ef1b9ff05f493fb6bd999cf4bf29ff783fb
+af0fff6fd99be00294e7a40be59c1ff74dffa5e068d85ae29dd2bd70e6affb17a1e24dd8
+03cbe54ad80fed9efe63b8e58f50fe12e556d9fab5874bed94cca8e06ed9ba79ff0df29f
+d286f04c9df3ce79fba3ff33bffea53bfb06a8d89c2ffd79f9b6e764d801fec88af172da
+3ac7fa79ffcc5fdd3fff0ad05fe0af28b8fe0cf9a1f321fcde79fea2c0fb65bdf089f7aa
+37d8afff4ee513d964d854dd2eedad0ffba5c837b0d82df29cc1ee53f67fffd840bdfc7d
+cdec7fd9b936b6f031ffaf19f54cfa07f286c3ff88f47afbb179ee99fe86dd25c9ff08f7
+c1a5dd86f079dc10fed8af18f84ac4fe9226edaacd79fb27ff68cafc8954e2b646b3ed93
+0df2c46cbfff78f8d05cd90bd736f27ee4af2cfb54e686ff69b2d84396f6aad56ee586f1
+7dffa5ee79d862e079ccac3ab1cb5eed28d8f942ce05c2fe7bf269caa2fe88f683fe9ed1
+75ffc462ed6ad9ff77e65dde36b5d519c94faff8ca57df37b8fb0df496fb86cf80ddc193
+e082d9bf50e03bd91eb7dd34febb2ec54fb5f8569fd978e035b7fb23bf6aadc537f5d284
+e49538c1fc9a4fe1be57e380daa52fc0f809ff97f463b9e079d99fed52e516aaf4b6ff71
+fb9fce4aed9bd3b80af4a4e320edacdf8728fbbf9dfe31cf53d83ae59bfe42b6ff6cd8f7
+1eff93cbb371afff86e057dd26b6fb36c7b52de0af0dfabc40e9b728fe941bc7a5fe93f5
+61ff8efba0ed1f93edadff76afd06ae057da01fa4bfe26b0ff349ffe97ef7ecbff67add0
+69fad993e279edd55fff93fa5ecda0ffd8f27de09d56ff21f1afde6bd4f818ff95c2f713
+ffafdf5cd97ee01fd3ff59f721fb33db86cbea893f94daae15ffbc86fb60ffa8d036c1fb
+5ef307ffc45aee15afdd91f785fdc417c0f2d704efbe81e0a846f60efeda5fee94fba5c0
+ed7be379facf61edca86e0b179f9d27cf2adfb49cc0bd886beed27e060d3ff8614c3ee3c
+febe2bff9fedb1e376d0ef6acaf321d260fba543c1f212e0a53eff06fbaf28e7c01bc4ed
+81e04fb527ff62fbc2a5d888fb04ed3cb5eb62d835afdd7ded79fe9fd067fcaf3cc8ace1
+80d56afea253fec9ed2ee5c18df31dd9bf39e56dfe7fb6cb93d16ce6b893c6fb4bea01dd
+4aaeec8a4c93dda734fe62d1ea7ae0bf27b6cf18c84bff09d951ed19a3ff9350f125fec1
+02a9e542d888ef6cffb6f847ceaf79faa748d8fa9c65d988f2a5cc79c63895f8a453dd86
+b8e883d906dfafeb86ff7bf5c29ebed051fe6aa4f29432fe03f778e599d009ed40fe4aca
+b682ff86c8a1fe93f24ad81ccb41e419edc07cd9fb884cffb8ed27f3c10385befe62f73b
+cbb175ec93c5f24fe010fe48f8af32fe4df386d5a3ffbe94f862ffc6f660ff94c3ed09b6
+ff508bd8fe7df999f087d298ff86c0dd3cc6fe80d969e498ff64b8eb15b1e0902ca4e57b
+ffc409c0edba50d7fe05e551dd16f95bffd80ec7fe13fb4aa8ff6df75cfc24d35ad828e9
+60f282db92cbfc47e4b1d19dc7fec051ebb893cf9fe569f2d051dd2bed09d260fe85fa9b
+f590ffa52dec9805c2f29510a5d871deaefa479fd87de055d9ff51f817a5d886edaddc79
+edbe7bd9ac26fe66cb5ce122d99e2cb9e315d9529ffa86c9adeda53ce352d82bde5bec38
+b5fc7af5b010ce97f34dd932ccf979ffd03ff4c7fc12d83bf297fe3193f27bb2ca7cff86
+eb88d8a266eeac7ae593edc21ce086ce93dc9fed92fe84cd16ff40f60bb6d786ff58f43b
+a51cfd81fa60f216bfff2facf97bfeba8ce5bda2e038d867d97accf950ffafe638dab6fa
+86ff5af193c3e410ffb6fa9606ce9cc0ff32f99f29c3ff1ecef205e5c197ed1bf5b6fe70
+d1fb79affa80f4d04be52dfc13f5c275ff86f6b0fd93bfe021d857eaa5fa34aeff8dedaf
+22c65295dea65486eda0e371da81d1fb1be341edbd30cdabfe23f6bb41facc5bd93af69f
+bff232ff51fa06ca4eb7fb9abaed6de17aed26afe98ddeefcb68d927dda4fa79d789e513
+b1cf65fb45f70ec2ff86f103fb5abadd74d37afe5fed45e018bacc2cff60f1a52786eeaf
+fe61ed7adf60d0fb945ce066a5ff7ef938afdb933da5ee0ebfed3fc1e023b5ff79d896d6
+83dfb301eaa549cc11fa6df395ff7edb62e6c81dd851fc9ef5affe03fab2ffbb4db7fe20
+ee53b7cc98ff6bfb9ff448c1e06de8d18927ff85d775ff45a6d88ae07cbeffa5dd35e15c
+d2a7c1ff54fbc609d84c72acf492ffb945b4e054fe9bc3ed35e1abcd95ec6db5d64fc7af
+e813a3f625f19cce7ffec39efb51e58fcf83dcbee258d879dc26d793efbf4eb7f687fbb9
+33dd62d2ff79fabbd986ff9966ffa36bfe87c0f13ff75bff31f2bf5dc3ff7bedaece4ee1
+03d046febe6cfb86e57adb39e286d968e032d993f665cba5ff86f65bd4b00ce175d97eb5
+ff09aafec0afed04e593c5fe0ff539b4e623f16df482fe20f83a98dba565f985ffc5e510
+d85be987fe07eeb929f65bff941dff5abffb21f39fff6292fdcb6ad855e008d9a62aed84
+d879fc0bf94dff8efb37f3a3ff5bfb0291ffd80ed845e9c992eaae4eca12ed53e63ac5d9
+09f2cd47e803a6e092cc95d87afb9de51dd9a429ff9cc1fb86f0af16f2a5ca09ff93d66b
+f22acb81f26de807b3e546d90fabeb2af7c493ff19fa3bc999f252e26096fbaf57ec80d9
+9bccf261d994cf0cc7afdf76eccb14f1d08bdb29a34dfe96f71eb0d497ca70df86d86ec8
+f083e53ad0af60de33d8f2bf42ff87fa83ff6bf5bc63ff1ff0a5dd74d7b21cc5afc70fb6
+e583c4e13ca5f18bff9e51fe0df49efeb586fc7aaff578e55bafdc7cfbc875fe19f04de5
+22d48af860fec96bec38afd869de9bd643eab65aee0ffec39effbe1dfb9fc1ff6dfb97c5
+fe79df58db43bfed93e586de6cd815f3ce2fddc21df968ff5493fbae4bffa6fa53a1fe95
+5effaf36fe59f5ecc96add7abef15df73cffa5fb06e6a444d8adff72d9fe8df7b62086ec
+aee433c6afdd3ee5cd94d9b53db8e92fed9ff549fe95f730affe79f4bc5ae417c0f288d0
+5ed831e0c527c1e41cfebf98ff29f3be32dd5ad8a5fe85b7ff40afd89345f6bd90ff25f8
+3dff87fd78f6d073e0b55ee43fdda5cd45f029d8ad33f24acf9ffe81f9a263d85dfe2df8
+9effb67aff6df0a3bbd62ce5c413c0e374da39edc405bfde7ce393c1d97a01a8fb36cfff
+2ee07ed9bb4bb6f17bfeaffb0297ed2fbe10ca5ec5fe950acba5ed1e9afb9307f74cfe9c
+f77bfe85e066d879e06abedd4bd520ccfe7cb3d92ede73fb84f26af8a0ff80d89337f786
+d7b168ff8bfa80dc35c6ed6acaf409edacd010e079d293ebb31fbfdd2b9afbc14bf193f8
+73fe83d993dd7eeac291bee622b9ec06c1ff27f2a5cfba4eca37ed9ad340fe5df4af7afe
+9ff729fe84d88eff86f330fb4af81cafffb9ee86e6af61c7a5fb12ed93dd5fd035dc62c6
+f77accf493ffa5e046d7f979ff67f8d04bedc888d86de013ca52d009ffa5f021cdff7df2
+9dfb943ec2fa66ffafed15db98d202dd44ed51c4e0ad4fed17e8a4cf08ec6df3a00ffab6
+7adb84ff6ff99ff158d973ccf2a253ffc41693ffae1ab8d20af362ff59f802ff61fa79f3
+68cba7e07dd9af02fc77ef87ddac0dfab779e005cbed3ddd63d09ded1bdd46b6d89ec6ac
+d299e06dcd5ad80cf29bfe51ccb163fa25ff83f98af2a553e09f4dd83aed88f26cbadf3a
+dab279ffb461ff31f3c096ffa6fab7c63ab3fc9343e519d86ae0afdc25e09f4bc0feaa47
+ffb779fab8a5ff0cf1c29efeba48f6b788ff54e0aad93bfe4fe629ddc03ac4fb0bfe4988
+fac679edabe039d0fe66ed9fc0e523b6c993d9b717dd94ff31fb4ff73aedc194e51efa51
+fec269ebc796fd74b6fa90bce95aaffb6bf7cc61ff0cf252ff42fb2df979ff89de1aec85
+ffc19fd4afe016d82dd0fc0cffaefa86c517b2fe1d9bf2c110e6c22ae07edba957ee26e5
+4691ec86de5edac0a5fe84f708ff5af279d1f48739e1be64ed99cd1edf87d96cfb3bcc68
+da7ae5c922d887ff64bfd79cbbfb5d93fea57add9be1c007e5af35fa6ded86bede4fff3b
+88d1fc6aed3fd0feaf46b6d88ed894d086ff42afd891d880f2af1aff3aace01ece50ff02
+f5c980e4a52bed93e085da88eda2e093ddbf47c2f978da09e03ff5519aeeb6ff61bcd981
+e424b8ff9ee552d5fb4b8ffd9453f1acf903fed189d97fd6f41cffa0f804f15fb9cf52ec
+93c7a3fd0694d8f76dfbca2bfe58f373fb30d093e085fa11ff40affb60ed30aff206ff66
+cdaee51eedbc30f755ffaf68fed885d55af7219bebc5affaa735d8aff75a85ed9ee469f0
+16fe58dc76c9f561ff2be548dabf64c3f65aff93ef81d6ae42ff10c1fe7ed85bfe33ca17
+bf51fe21abf09e37d893f288ea7dc7fe874899eb933df26bd0ed5ad97aefbf7bceec61d8
+fa9e5dcbb78437ff61f6be5ab5d03fc1e97bff2deda6ca67e636cbb0ff24b6ce12acd980
+e2abcb4ee779ff1fef97e4be9ded8ad37ff9ce70e093ef15f352d861ffce92d87ceeb925
+beff01dd78cdfb8710e260f196ff0c9de0c22af907ff83e5a9f21dfba512e098cca6fe79
+f79dee86d76edf27b8fe6dd9be97dd5ae61ff4c09be6aaf3d97acbfe70d1ff63fb4ac91f
+fbb804e5c8fb1cdfc1a5fe4694f601fbaf28ffaf06feb623d0ff44d9f0abc3df1293fed9
+6bfb964ccc9fd886fb14ffaff986ee5ae579f196ff3ff7c00affa0c1f45dd8b652c82ffe
+51d904e7b525fbab43d8b99bff85e7a245f017e041cef559a3f08cffb045c1fe7dd81cdf
+86c6fb3aff89cebf52cbba6dc4e064d4ffbf4cfb08bee02ed812dd35fac19ae537b4f260
+fb32f7a3ceb278f166ff8404f7a542e911b6e49bbdff9fd86af7b470bef264fb0fc9afe0
+79b7cb64de77e198c96be575beed931bfa4c99fcc53195ed0ed9bbf510fa4bb6e09647d8
+1ad0a5c3fb42e588ebb46cdd60ed14a9d981fea5f98fc4f26ffec279df86cafe61fa34cb
+b602fbc67efa99fe6f96eaca4ad828e5a5dc31edb9feab48e860d9b3ed5dfda5f520ff3f
+9eeb8d52a1ed88ec5ca5fb7bffa5e9870cff79f8cd18e08dd8bc69ff3afb12dd47d1db81
+e0c097f35dcb1ced53e538aed943ff31a5d88bdb86fa20ffd839fea8f538f24ff69ffe0e
+87fbc4a3bfe778efaefa79b0ff8761e4c2a2f161c1ed91ff6ef83186dcbf55d025fe9ef9
+93befe3cf202e64ad918ace09f38ff4cf71bbee98ae279f2d76fb5db50d22bd9fb14abfe
+93f381ff79f99d4a7bf5c493f38618a0d832d978e386beef04fdc2f826d96dffce44edbf
+51caf2aac5dc4e93ffad47fe04ed93bdd89ebffc884dff28fb52afff81fc7adb86fed079
+ed95c4e64dff2ded61cdab73edc1119cd88bd9ae36d8afe03bda54ff06d94ae021bee033
+d3fe9341ff23affe2edb4ddf9bbeffa40cfe91eec147d22edd65e0a5d093bff184ff45bf
+ea83d19bed8640d414fe4b97ed1dff87f491b85ec3e073dd5bc709cd63e5b1d905ed29af
+ffb7fb62f297fe47cffa68d0b038d884c4e52091d9af79fc932afb429ff2c062ecc59cb8
+d150e57aec2faceee1b0d093f1d931e6a7c60bf3b624fac015fe7ff393e07cb6f351fbb2
+6fd9fa4dff1afbc386f85dff7af286cd66ff82cffe5bf3a41fc6dd7ed0e579d886f2c403
+e15ad3ed79d960a8f380ff7af7c350ff2cfb54b8d293fa11b5f35bc3ffa7fb9ec7affd68
+d8a5ca0dc1f186ff43f61bb5fb9cf4b621ff88fba0c0e451de7bd9b908b6de952bb8ff79
+f496ff44aff1bff501e53fc1e07ebffe0ae4b023f558fb7ff709ff60f6c76da013ed3dc2
+87b9d045eda4cb6ceb59a5df71d906cd58fed50ee1c42bff87b8cb7bed88e514bfd399ea
+21b8fb9db9f2409ed872e8b6fb66f7b850fa0afeb36afb94f62bb2f920ffcc04e0afd61a
+95ed7cb2d787fe1ff062ccfe2adbaf09e563ed5add2cb7f33bfba6ff36e59fd591bfe062
+d93cd8eec156d038fe65cf0ced3fff8af76ffeaedd3ee0c10ddba5fb804d86ffc6a0fe61
+b2eb6fd97dfdd079d92cdd9ecb89d8a521ffd8fa7cb6fe06fa70ff84f72fff85ccff48f9
+bf9eedb54095fba466e65aed21e4b03edd61ff8df129cba5e439ed17c9aced01ffc33c90
+ed0b9aeabfa5cd3cecc176c6e962c0e0a576fb9843f0bcfe38c0e50dec98de7ad9a457e4
+79ed93cdb725ff84f7c881da78e37bd9af06fa57ff2ff87eff934ca5f27edd79f294ff83
+d0adeb4ed512ea7df2ab57fb66d416c2fed89749f214d0fa1fd795ed51a1ff87f26cff5a
+f23efecc5e934ccdf479d893dd23d860e0afd90e95e59133ff66f6c2dd27bff593da82fe
+66f3bf7febaa47affb7af470db93fe68f886d95995febf54c4ff8734ef60ffa123fe499c
+ff8c4df5d85bc7ff8f60d9a3f259fdac3ec3f82fffc095fa4cff3cf8d86be0a908ff57ee
+28d051edbf93eaa6cb97ed12b8fbc517ffabe723d84ac6f91c9be085f260cb18fe93cdac
+f288e09d25edba80e2a24cf05dff27bee70cc7a7ce17e095de79a5f2c7fe9d28e447ee5a
+f388fb9c3ffebdd862f4c6ade01588ff7fd844ff04c69fd20cffcf2afdc7e352d90cffbe
+48afdd2ee579fad017dea8e05ed4fb8de080d0e585d9be0fc4ed9616e4ad2aecc207fb70
+dd81d0ff6bb1e58aed0fd0bb9de075afcf41ed87d3b79ffe88f76bfe3bd21cf24bafd2e5
+72dd98cc42befe86e5af5abffc3bffc49efbb886ec1fe44cff3cf7c168fed85fffcb86d9
+88cefb69b2f938feb664fa1dc1e40bb638eabfa9ff9fc6aacc14edc55d87f8b31ae14ba0
+fad74db6ee9ec9abf941fbbc59abf2940284ffc19fce63fbd77dffb1c944aff574fe37f3
+af12cb47f216b8fa39f3a5fc39cafe7ef9cf79fe93b8d819f85fbbed03d64aaafc77f521
+c4fe0df395c3fb4af514c0e021d8aeda79fe6cc2fe8745ff31f96df6a256f10ffe9fef77
+d9b222da46e061baff9fc894da75e9b30babf328affb05f5ad42c2e27bed86e5c38fbaff
+69f97bdd88fb63cf1cf83bffba70fbabdd27cffb86fec35a93f2cb19fd5ce67add6eec99
+e04adab6eb9343ed28e0a212f0961ffd9dee2fd891d87ddd9ffeba99fd71afdf79d86add
+af52ed1e9edd3ae54eff9fc1e826a1fb7ffecb34d986df66b6e887ff1eafe27edd6ea8ff
+955bfba5c89de403f3bfa8d093e004d9c398df65d82fe6c06afa79ffa5f033d05ded05af
+fe31d3fb52c5e56cc1e067dd97fe12d850d324ff51ed40afd8
+ >
+ >>
+ /Gray 1 index
+ /Default 1 index
+% See the beginning of this file regarding the following.
+ /Red 1 index
+ /Green 1 index
+ /Blue 1 index
+
+ /Cyan <<
+ /HalftoneType 3
+ /Width 167
+ /Height 167
+ /Thresholds <
+7bb6c793d8a0e14ddb04d951e02dcdb901eca3c572efa5fe78b5d86adcfa3ef584d3b938
+f308ff45f9ca7ad989de80e593bfda7debc76ae0bc679dea874abeecb83af378ff9accaf
+f175d8f36bfcc2a1e5018ebef786ff51ef28d44de122ceb819c974ed86e4ac64ff9bf786
+f29f6bf95fdd20ceff4ff5cb82e0ab3fd8b352dd16e5c484e25dd8fb6087ffafd14ac1fe
+d8b34db7ffd15cf7a9ff54c3ed3aafe070c7ff7af29cffdd38fe4cfa13b0ff81f77afe93
+f95aeea8c94de5accb1cc0e527f2ad10b5cf95e855e58dd8be9be06db6fd3bf759ce0ffe
+60b5ff41affe9238f8d05bd8fb9e1189dd93d9c049fb0293deaf0ecf52ed3dcdaefb579f
+e06ada93f978ffbf98f757ff93f65cfe3ef9be38df4dcd37ffafd295c0f67ab8dd6eb6fe
+11d0f97affc86bf88cff27bffe933dc1e99530eda5e28328f27be58e3cecbf0bcba5fe78
+b8ff26f4a445e423d85188ea9dcd7cedd028e0a5cb21dd79d886fb6afe10f468fd5199ff
+7dc5fe87ff02c1f92bfe50f128c2ed12d6a7c59fedadc3f421d19fe026d6edab05feb027
+efc3fe57fa20a5e487d8ff4af886ffbe95ff60f227e6c31efbb93bb6d89442ed6bd988d8
+2ddd9ecf79f1d186fe7fd95ae006fd40afe00ca0fb38c1ed65bee82193ecb64cb7e09f15
+edb0ff0dcbf95afd12bce9adfb0ec2fb9e50f366e430d0e580d886dfbfa7fd83effbbf28
+f4b63d93fbc042feabbfff0ce636dd96d892d981ebd062e037d84bbcee6099ddafc993fb
+64a2ff72f203ff4dfb349ce779f280fba35afbcb7ae590d251a8e07fcffe34f679b6ca99
+e344eb18afde81d870ffb37aeda3ff13f3c3a7ff0af16ce5ae14fbb32498e501edb8fb79
+efc3a5ff67f1c357e679afff46a8cffe2ed9a5f171f9cd67d879e06abedd76c9ff8a43cc
+a4e078cfff86d891fa9f10f151fe14fa5ac9b60163a9e479fec2f15297e970f04789f2af
+cf7af75bff27fab809fb9df5afed78d7abff860dea5bcfafe536d097dd90d886e0bf52fb
+0ec862e5c14395de31ff78f9cb09efb970dd5eec1cfd2ad5b27bf9d036feb6ee47cef504
+d187e360de2fbccb9efb4cffbf5fe6c6ff6dd8a52899d89352ec1fd87cff93c6fc2ed89a
+f774b2f279fe08dc43abfc1ff6adfe3f93f19a52d8f479ff22f12fb1e51ced4bbfff94cc
+89d995ed32ffd9cfff47d80687d9aff311d19ec2de9b61ffbe1ee9b9dd6093edc256d218
+94fb24f23cc3fb94ff1bf252da7afe5cf91ef368ffa6cc93ffb618f5afff65f39fd8399a
+ff932ffbc197c6f28fe56efec14e93e09f0c93dd9b5abffa43aefe8cf95ced3bafdb7ad2
+f38b49b9f257feb6f435ffcb88fa97e42fdb09b9f27ae502dd4fc0e05ad37affc682eb97
+2cd3afff1cdaf7bf03dd5ed9b9fb61c1fe7cb0dc6ddf36ec63d179e052931c9fee93fab9
+31ff5db6ff37f91afec72ef1b08745a4f2cf40a5ff84f8cc65debfa4e061d880dd87fea7
+ed2bcb84d897d007ed42dc50edd183da21d8ae0cf1b3e54bc4e0ad15ff43b961c2f408ed
+a9ff6df3b8fb2cfeaad96feac921d878e080fed01df69606d8fb931de077d983e2a914dd
+47d060fa9fed69afd256fb87ff12a8fb93ed9e32dd53caf27de665ccb23a88feb6ed9749
+93df9c43c5f703fb5df5b6ff2afbc2afecf8c65add70d0e681cbe463d878ec51a5e05dd4
+feb4fa169ffed821e44aa8ff8f53fe77f730ed46d6b60ab9dc94f03bfe59d978fdaff797
+37fe6ef986edbf73fb67aff26cf891d29ed8ff37addd63d815d749d860e086f134ffb867
+eea0ff03c6b686e554b7ffa53be9c4a5f90bfd4bbff186fe92f2c14abfff27faa0c4d961
+efc93dd91acef587fea64efa0ab9ef6efbd7a53681ffb5f809ffade079d59bd8920ba5e5
+9e0efe6b3baaf323ff45a7fc1c9bfb93da85ccfb7ef79707e079bfe54a88f195c4e00dca
+ed15d99dcba5fe79fa9cf66fff62e5afee85e5c41587e1c0a5e64fc83bfed924beff0ed7
+41e052ed04b4ed5ac0fb83f6a4fe7ef7af1ac1e0930dfdbe44caaaf535fe62facb72edc0
+86ff5ece93c99eff65d832e00ea5fe81d8b46eed1d94e59f6cf985ffb963e302d9bbd89a
+ff47e5a81ff1c5d814ea61d088ef27ff4ff239fec3f97bbfdd8ed8ffcc88d884edc67aed
+bd4af209ffb112d93ccaee54d7ff69cafbaf38fe6ef5a57afabf50ff07c2e432d84de01e
+cabb119ffb2e97ffbb47ff07cf9cfeb85ca8d0e87dd987fea6f579fb63c6ff9331edba24
+c4eb38cdff9863f7aed67cfb88dd77d894dea529d94bfb0faff22eed51d926e9aef373cc
+e63ade14eac24effbe37fed024e4b34bfac193ff7f29e06bd880c7ff8652fc8acbabf43e
+bfdc93cd7ee0b361d83cf256f67aba14fb60f7a40bdb53ffc988e0c163edbbff70b9fe89
+2ff2b604dec192d959ead543a9ed88e059b0f293ff79aff86affd94fc1db5ff3d081ec6c
+f21de286ed9335f861edc52ec1da8ae49d1edcadcf78ff6ab1d9875bf2ca4cdf2aeb53f1
+18ff4ff20bc7ff82e49ac2dc6ce0affb78f6c05894ffaf5bf786ff7bf6af79d8f25aacf4
+c27ce0a42ef256c3fbaef515fe3e9ae0be9fed2dd980fea25bf614fbc025ee86ff96d42b
+e070ed9ce02fcbf386e59f1fea3f9ffa934ba5df299be5acd082ed6bfc26bafe1c97ffc5
+2afb7bf66cc816b6ecd041e0bf79b0ed74e523a5fb4db6d893c3ff02fbca88dd1894ffa1
+20fe45d0fa7bf350e297f204fdbed809a5fe79fa9ad1a5e584cd8ce2a042f3ba5eff31fa
+a015c1df9a05fbda20ed93cbb653dd32d4fb0db686de8e41f708feafcf9fee8635bfeb92
+cff607fa46c3ff59e61ec2e487d9a455ffa5c917e265feb1fbc53fafff6cb6fe38d8fb7d
+f5d425ddb6fb86f6c313f951ff3cd49aed79caafe36de793bfdb23b7fe86fa3093fcaa23
+c6fe03fa93c2df7ac8ff32fa4aa1dc79b5fe50f3bc4be3b881eda551e90bfec52dc1e093
+42ffafed3ddbb00fff3eb1f730fe69fbafce1bed93d07ad8ff873dfec579b9d563ff07fa
+d08bfe9560edc6ff16fbcd97d86fe548dd11d1ff9d5fde79b8db84e26aa5f279b5fb4aff
+31edafd26be9b582efc402ab5dfed985eb24d0ae6ab8c751afff5ff106d85bedb17bdd86
+b5f84faaff5dfa3fd803f34b9fffd340df9ec2da6bed88f457d8b54bff3ef60ca5e588f1
+bc55eb20ceb079d3fb73f7cc11ffbf94d8b658fb9f4df8cc7be077d085e7c293bfdd7ad8
+9dd725ee61feac56eabe4393ecd066e5af50f49bc1e19e41ec17c9e39d4493eabe51ff32
+f295ff8bfab142c3f221ff4aa6fe25f8bf0ec5e086d896d079fe08f446f9c03393f2dd87
+bd0ecc59fa79d9f704fe9ae083d07be66eff35cffe2bc8eb18e1cd0ddd82f186fea5c3e2
+5f93efaf55f40aff47d096e06dea9fd2b895edd65ad916c9f784fc67d8ff0999dd32afe6
+69d93afe88e577edd5a526f34ffb1fff38f261fe5afb05ed55de91d880caf902feabf323
+a4f21affc335fe4884f2be7df3a52cfbb1dc63a5ed88d85ecb1dd653eda5fe7bd86aeccc
+63d87ade96ff37f506ed60df89cb9cdc7bffafe54f27f8d895ffa5c0ed43b4e587ee16f9
+35fea4c894e165baeda162ffbe79f2afcb20bcd062fc18f7bd05ffd77de5a5befb13affe
+31f519fb52bf86fb78ff983fe0a5ee38a7e0be52ff5ec2fb86f1ac25bfff1686fcc786d8
+93da9fcb86d91ae0afc785f872ff10e549b4dd69d872cbff81d987efa4d8b8d924fed74b
+ffcf79f101fec522f976fe86ed7ade87d804e493fbbf14f19ffd44ee88d26dc9b1ff20f7
+51fc24d859d878ffcfb362e548df1595ff70c848b6d88adcaf44f01dabfb8c09fed89557
+fb9f53ff9efa47ed8fdd79cbea8738feb828df62eccb87d880e176cdff26afe930d1feb6
+0fc48dfa6ef6d084f29a2ae060d2f866caafe75ab8ff14f15bf76dffa4f59644ffbb38cb
+b1f295ff86c4f535fcb25ce02fd152e41288fbb067ace570bbe857d878e09abfda0ae0a5
+fb24ff6ef75bcb378fffb83bb5d8ad5bfba2fa3ea6d893d983e7adf20bed9ffb1af491f9
+71fec431befb99ff2df262fbd883ffcd45e5d29335c2e327d2ed33e077d9b12fb7fe5296
+faaecb59f689ffa250f161ffa5d839adf2cc7bddad53f27dfed948e528afec0fd9bfa4ff
+0198df4bf392d83bdd9fc6b605ea2dd879ceec68dca3fd297bda3bed20a1e0bf0deda5fb
+7cf793ffc133f0db06c5f91c9effb7f44bff3b93f6af42c7b74fe6c1a4edaedf72da94e9
+01ffc01aea62c0e57af031ffbf6196fec15286e1c633bfd97fe6a5f21ceb61d0a5c602ad
+e55a95f7bd60f2aff780ff86b6c793f610ffa0d93be5d220e06fdc7ad835c6fa21d9af0e
+f39ae08b07ff62f893d8af26b8cc95ff69c5f962fe38cbb0ed7efea70cffb365f978fed0
+8ae056fe22a5fa12f086e5c2a6f979c0ff4b92fac841bfde04d84aedaf79bfff945ac3e0
+8820a2ddc3afe56ccffe79f4d8872fff1afa4ef429fe86f278e4a8cc95ff11fb5ecbb61a
+fbc54193dafe4badff9e06f34dd864df93bcfc53f797ff3abfec0ea2fe4add13da68f002
+fe5fccb67dec6af3ac6dee9cff11fa99f2b686e47bfbc586fe5bfac09fed1bcf42ffe486
+fc04d8bf43ace093f086fb46db2dd0f279cced2fd94babfa7cef8ec1e479c95ed24dfe19
+d19ce868c6e66196ff719ffe83e668d4fa4186ecadfe3ff2b4fb870ff150ff2799d9099f
+fbafd48fc9b681e5af52c4d950fe31ef5ab7c7a0e46eed79e1aff229c3a0e066edcd93ff
+8bfbc13dd90ce07aed72d0fb6dc2e085d87dffa5ca4ce6a5f23bfed826fbc10affb945c4
+e8af4bd001ff5acf30ef46afda2be54dc7a5fbbd8cc44fb4f17ffb9dff17d559e273c8ac
+fa69bde421a2ff92f2c53adb0cb6f331b8ff9cf8be93f15dfe0bb5fb2ac1ed19c4f059ce
+a9ff189ad8f52bdf6bd772d83acffe83d99fc0ee58ffbe55ed69f630fcce10d6fb9925f5
+92d886d1f64afe03f799d32fff86e95afa15f6b558e02ddb0fa5f281ff9fcc2fd9af21b5
+ff38fa1cedaf2ffc9dd86bc0e4925bcfaf79e1c87ff29364d8ff78edc0a0ebbb96c2e86d
+d785fe79eb5fdf07eda0d961e434de88d87bfe27b9ff1199ec4093fbbe51e0179cff86d0
+ff62afed3add09eb43ade084cff279affe7fb1e038b6f72694cbfe61b7ce93fa09ff7ff6
+a55de8af17f96bdd86f2d00ee09dd85f93fea53ee0c177e265fe2099e086daac44fca5cd
+09bb93d788c240fe7ced86c9fe6be4ae4df4befe60f3d686d89bcb79dfc089f324ff961a
+f5a7ff4df8b252fb18bffd2fa8d99343f61dff55fb05ffb9ed13dc37fe83f46bff30f7ad
+ce79f351ebc19fdc6bf4cf83ffd661edca79fdce5be59e46c4fc88d87ffe93c4ff30d9a9
+4fd8e451d1f76cfdc772d8f24cb6ed11ff50c0ed90dd29edc932fcd17eea39cb2b95feaf
+42ffc0ee48bff885ffb50cf2bfafec38d862ffc267ec7ad9fff24dffdd95d5b661faaf46
+d024fad893108dde9f4ff167f541fe5cf854ceba51c5e072dd05edbe27e6c3a5e054c8f8
+1bfecd7ad993df80d8a43e88faafd19fc645d4afe0960dffbe24feb508ed43e5be55df19
+b5f707afdd48b5f624fbade502d954edaf5bdc77b6f725ffb703f1a329d9ac0effb57ce1
+86c8af7be5a444cc59feb67ce09649ffbc93feb0e05bc7f28707d99ee119d84cedcf9453
+f779ffafed15dfb422faae38cbb67f27fb0ef3cd20e094edb8863affcaf733ffc703d990
+e49fd909e279eea9fe3ffac194d882fe9a66ff80f39a61e0ab5cfaaf3ab2f26af8b6e098
+50f61fffa6fb2188fec75df1a1cb81fa92ffa52ffeaeee74c79efe87f283c0df7ad866fa
+73ff2acefb0ff5cb69e2c25ffb7acbff62f48bdb46fb03ff3cf7d328feaff894c705f263
+f7adcb02e463f486fa20a2e6b879ff69f37cfba160ffd607ddc02b93f983f4be6de59a19
+eed8bfa4e151abff79f65affc5eda55eb6d862affb7aff19d07effb6fb15d886d8af51ff
+34f260d1ed38d807d2f086c6e509edc6fe18cf4ded23ffcb86e279d87bcbed489fe686d9
+34e058d870ceed935cc2fb4ce538d810e33fa4ff14f196cba5e57ab9e4a940ffb085dd94
+e6189be03bcf9fec84d895dd79bef061db1ae56affa4d922dd61fbabc914d973edd44bf5
+cb31ddafca28c3e53ba5fd609bfbcb52d83bcffe56ddfd9e44f566c4fb73d8b701d99e17
+88e0c520f292e85acca5ed67e09746a3dd60e90cf286cea5c2e411a9f68efeb942fe2da3
+ff90509fe57bff93d865b4d949ef0ee75dbaf9d917fb6affa6f61bfbb805d8f93099d97c
+f6b9ff6ff9cb6cd9af42ed18c2fe3987ef96d715fe37f46dbefa7cbefe20bcf936f351fc
+1e9dd882fb9ebad84cc1fe81f29f3dedba52ffb685fe66a5fb9345ff9bf570bfed80e4c3
+46a6ef93ffa207f18c5cc9ff93e62bb2ed39cbfb7ae5b2f246fe86bffd13baf92dc0fc1f
+f4b3ff82f97aff9ce31ffb4f93fecb5ae0669fdd7ee7d06edbb6f937dcad2efac20afeb8
+85ff9cf5328fb3c851ecba7ac4e6618cffa465d6ff1ceba54795d8a932f386febf79f955
+98dfc11ffa71ea93d859cced4eb3ee65e574cba9c593d0afff3df2c252ed1ffb77b0e02d
+d0ff80f8a0cd32e513bfe005d0ef5fd910b4fa32d11bf3affe0be279edc779d8e6ab04da
+5aff6fc1fe64afef52fe6cd795ec42cba3dd50ec7cafd363ed33ca26d0be3faff488ecbf
+4497fa24bfff0ef7a648fb14e96bd886ebbd74f1ac68f3cc3cd886d0ff5ae5a5d009f24a
+97d8f23fcaf483b6cd67feb6f023fec15cde1fe0a3d6b1f26bffa5cdb649f87affa92afe
+d80cd99afb52ff14ed61dd6ee3b30aff86d399ea0fbfed934fda22e57afbc596ff77f3b8
+87e580fecb86dd94fe7bdc87d252d92db5ff347af9c682ed87d911a8de28bfd51dbaf90a
+aeff6af674ff98d93cffb993bfe593ef5afcd26edc27fface579d5ed74ce60c2ed86cb98
+fe09f75afed240e0c11baee56dfd01bff027fa6bfe86c1ff2aa8e1bc0be54ffab003d979
+d587e49dbff658ff33fc07d247ed5bfec19edf0be4c7a078ff88f12ce080da98fe0cf5c4
+79de62b6f35ac5ff9066fec1aefb62d8af48ea5ad89f41ff1ed0af2cff56ea61cd37eb6b
+fb8afa65c1f3dd419ffe21b8fa9cf577ff7bfb9bdf79cbe487d825d3af05fbc859e00dfe
+4efab0e0a201ff5bd77bd905ffaf47b6f494ff23bef33fb9cf9fe11296ff81fb9efe4ced
+afda61acd880de3bafed79cbfb5c93ff9bda7ec8f388ff60f509ff4694d987ce93e79fdd
+8fd801f231bff19262f6bf43c958d2b1f75ace86d8a534fe92f8cc31fca540f1d807e145
+99ee09ff88c1f72cfdc46cbded6de5a5d30df7a0ff82f21dcbafe512a56efbd266e4cb4d
+d838e1afce4bf23affa533fa55f17ae6c288acf779f2a5db861781f8be86e99df363f0c3
+84fbd82bde51b1e37fff75f048c7afed60cf27dd79d8962ffa88f74fff99c5e321dc9f13
+ebc049ef25fe3fa5e42add81d0a6c3fb0eed62d96dfa26fd80e688d9a553ffd01deba8f9
+95fe18a5e12ffa49ffbf51e7149cdc7de4be60b7f779ffcb70dfa5f218afe087eda5f850
+fbc179f1b666d823debfa5ff4495fecfecbc0cf3b07bff8bf29806ec8fc1da67edc683e0
+9cfe38f24ce121d9c43bc6ffb6d937edc940fb1cccaf39e01295fa7dcbfd59d81bddaefb
+63ff38b6f893c2f50effc09ed21cedbc11fb8af762febf7af8d06cd886e0bf5cfb51b9ed
+66e579cbafff1ef286c65fcc3fff6afac239affe86db05e561c3ff79eeb6e57aeda5caaf
+ff4def27d0fb9d3ad9af1dfabd3acf9eff4dcd10d836de9d01ff4ac9fb89f49b56e379d8
+ed87269959ffbf3eed1ad94fc9fe61fd10b2f81eafff08ce5fda95ff80fb9f6cfb955df0
+8dfe73afd877b5f96bfeb8edc55beca103ee91fac12f93eb83c9e558ed35afe16ff142fe
+a5ca6ee0b541b7d832f1af379ffe93f516ff9bcba5f820fe37b5f1479fe051b6ffa5f6bd
+9cdd18ed97e556d872ffc188de3dd8a70393d919fb6df184d495fe9317c2f384eda4c754
+fe79ed68dc7ef294ff62b9d98ee89e14d947cafd03f7bf39b9f8e0abcf7fdd88fbaef66b
+b6d894e679d09add6bd97fedb610b8d533edbf06c2e224d750dd13ffc1e62bd8a24c88ff
+af3cffd27ae0649affd11edda802ffbea3fb52d081df8ee756fe85f49eff79dd68d6fbc2
+1fed53d08aed0edd83d88cc8ff7dd6fb78c9e739d812e25ac4fd67d979f32defaf3afb9d
+f362fec6fb61d05ad82de009d977ebafff51e52bff80f294d928faa8fe45e47ac7f450fa
+38c1ff80f8b878ddb064ffd6794af22aeb61e5c3369fe523fa53c2ff4bfb3ef5a6fe45fa
+a5ed6adb52ffa8f470fe7df793f2924498ff86f2b4d91fe5be6cb2f433ccf15da5f652fe
+8bd069e07cd921fdc107aff21dd351d903eeb2ff0f86e4b074b7e561c0fa6dff40f3ae02
+e92ebaed0e95f47dfe93f72fb1ce0ffba3bbcb7ae0b80db3e48f4bbef094ff88f6a8ff5e
+f936d87ccf96d86add0fe85dd5b804b6d793fb1ba6e082afe45aeca92fffc225f2a518fb
+da94fdaaff1486d8fe75d09ef12ab4ed93e5bc2ac3e086d827fe86e578d843dea5ca32e0
+57d0eebb52dd0bfb6af186d8f919c2ffa20fc0d96de3b0d940f716ff95edaf5affc67ddd
+87fbade59344a2e9cb40ffc6f72fffad45d0afe166dd9dc1fa619bffcf60dab545b8eb86
+ffabc84aff1cf94df588ff27d8f29d1fdd40e5c36abdcba2e35af105fe4bf9afcb88ff85
+f69bee2dda5acdff28bbfe79d81fccee6c97e086e6c86ab602c7478dbff8af0ebeff5dac
+e061c807cd63ed9e18ff71f3a2cb16f89cffb70efbbe9efdb405face7ae89bcc48fe349e
+ed9351e6affe36fb981bf2b787d875cc32f7a4d860fb3cedc32f86fcbdf5619aed920595
+d87be096ec1aa1fe2bf65193e0c242affc25f1a5ff78df27db6ee995dd80d9a2ed5acab6
+36ffc167fab30ffb40ee1bb8fea5dc86e09e36fcbf21dd4fe187ff85f37494ecd007f190
+fe9c5fd8fb3dff4f9cfeeb84e3aff1d35de087ed44cbf97eff88f794ff84fbba5adec153
+eaaad02fc666e561ed1cd87fdc9139fec029ffb975c3db61fbcf88f37bdd87cbff70c6fe
+59f292dc6be52bec89d9689affc64ee018d8f95ad9c0fe4df30dfd87faca71d982d3fe1d
+f286df8dd66dd904d25cf293f709d75efebf21d0aafb7aeb85df9fcd71e085da8fff79ca
+47c0f36dc6f15becb679feaf42c3e00dbff659a0e06ad945c6fa0db5ce7ad9f13293ff52
+fb2999ff3bfb93d9b703db31d84cd91fd851ccf1ae03fe89f45cfd87f199d884ffad4afe
+c4f062a9e07bd9a5ed06e4b525dd43d807ed4aa5e0299fe80afe4cfbc396bfff0cf6c020
+f2b879ffb528affb72b5e9a0cdb93abf4ef2afff37b6cd9ffe09f950f59ffa86febf50c3
+fe84f2379bfa81e514da53f706fe39f3a5fe51d833e591fa9a2fff0aafd87afaca15d8f9
+a368fed631b7fe3ffba5f4b67ce98af6af09b8d243c1d97acbea7adac41bf084fea9f36d
+feb5f079e52c93fa85c93fb6d979e01eff3aee52c1f29f1987d6fb58f30ffa5dfec083ff
+79fa86ff79bfef62f9c97adda5d2b613f247a6d781eab065de9ccb6bfecf3ce01cc75aff
+79f7db93d507a5ed7be556bdcb79e3ba41b3e0329deda63ce08fc9ed48d869fe8ac7a5d4
+7fe1b724bbebaefb60d811edafd0a1fe30df469fed9327e6c14997fadb6ecabc1bd436ff
+51de2fc5ff87f8ed9f0cf4a521f254a3faab37d157c0e09c3da5fc8fffc347beed94ff0b
+f9a5d091bccd87e029d9b6eaa013ca96e080d7af4af13dc7afe045b6fc10d8af39fbbe26
+f077fe86c5f831fe4bcefe06fa3aeebe85f58eff93ed2cd8a716ff61fbc74ef813ff82ee
+af23ff94ed69cefb1ae5ba63ff12b7fe9ff143baff30eeb44aff95f78801c2f27eff6dd9
+66e582ef8bffbd61ffce77fdaeed8813b0f27aff93ed9fd681fb6be25aad28ceff70e4b8
+86ffbf4cc3ff89ee9613f7b8dd0bcf60e49ffe2eda71d7b647f55afe04f7aaff65fb40f5
+b0ff3abfff27f594cba7ec139ff6d17ee488ff9bd055ff92e55db0e07ad899dd6fa5e486
+d8a50dea49d860d77bde65f2c09aedb67add89d862e033fbd986d812ffb679d85af3cc93
+de7bd002c6aaf479e57dfbcc72d95cd2ff9e43caa5e243fb1ec757d104f2d83ba6f306d9
+4cbdffd82adc62cc84da15eda5d01dc0fee063bedb39fbcd06e799df61d926ffca7be974
+f983f110d862e5aefb36e79cbfd894eb8038c1e094d07dd86ae5a552dc67ea1cfe60fbcd
+8e22f251d621df6bed7ece34c1ed07fe53f31afbc03cf761ffcf78feb6f202fba5fe37da
+4acb1fe53bfea2f5aac78fc147f9a5c830f786ffa42cfb4df66aff86e024db52ca1b9fe6
+12eeb532e0afed25bef494b7ff97f7b36993edc75ae07dfbd0579dfc93f302fe5afabe3f
+fe99dd79a2fb4893ed9d66d978fc12f67fe5a652fe2fd74ddca5ff7df7c1159ff264ff23
+fa43afd8fa890bed50fe22f285f9c884fe9dd986debc4cffc0affe70f5affb03baf79fff
+6bd3a5c783e188d994baed2396dda72899e3af44c1e67bfb73ff88efbf22cf4dfe19f2b7
+6fe562edafd20ec0e083d9a7e83ded5ffbc099f2affe58fac179fb6cf684ff87cd61eb2a
+dd4ce5c0fe2086ffaff13393f5c240e052d873dfb272e58cf249f712d7affe17b9ff4aef
+c593bed646fad085edb2ffbe27b6e03b8dffce7ed888e07ac4ff5b9ed4ff7add88e05bcf
+18b3e009d253f22d9ded6bda369fe5933fcba5e048da1db1f22effb647f827ff4cc8afe5
+39fab8ff6dcbf38810f0a5e059d8a85cff83ed95dc7cffd006fca143e497f040fec215b8
+d89eceb40ffe43d981dda54edd9ccf19d851dd0afea5cf7aff9f37d7ace9961ccaabdd0a
+e586bfff87f8c02dffc305d8a8c7f07ddd68c9f282e0ae31fe5af491b709e09f1c8ee286
+fa55cbf3bc4ae401f34bb3ef1abbe72fb5c835f9b9a2ff96fc6df67bff92cffe01e190ed
+c10ac3ff84f365ff94fbcb57d977e9cc6ce0aff266fe7ff18ad953df2098ffd3b927b5f2
+03fac49cdd08d652ea37afdd82cbfa67ff6dd0b079ff5bfa2aff76e08bd86aef28bfff0c
+f25afe95fa79f0c142fbbb18c3f281fb52d0f965fe75ffafee22a6eb17a0f24faaf980ff
+6096ff2ef8ac40cf21fa95d9b51cecc6ff66f5c5fb58ee96d9b11d86edaffea5c0dd6bd0
+fb74f554fe9ccd02ed49e43cc7a0e73ad965afd774ff56faa6ec4dd915d8b637be77f693
+fa139ffdc2029fde15d856cd11ed84fbc34a83fa95fe80d686eb2faff46bfbbf93f15fff
+2899dc08b6f824ef93e581c796f14ef937ffc493e385d693e079e731cbb488e475ef90fa
+50d80fde78b7e641d2bd5a89fbd267c7e57aceed64e036d01fb1e586ed9efebe79ed6bd0
+ff863aa5d849af37d8af06ff75d9fb9b2cc858f914feac3ecaa5e56cee79ffbf8ad0a9ed
+20c5a5fbbb36edb626d97ae068f599fe7ae48ff1d60ee05fbfed4186ffd070fb88f679ff
+add05dedafe034db50e53dff54c0fe7be6a51efe46e4a9bff27ac8ec88d855dd34baea0d
+d0a8bfeaaf03fb5ff767fd3cc9b9a8f84aff13d93ed39be46dedaffe26c7a4f22bf8d89f
+3cfeaf33fe9b1afe86b6eafdc979d901d85be0b00efb3fa0deb3f079fec7f379fece51ec
+bf60d3fb8ae094d87ce099ed0cd6b71dafd861fb10f766fe5cf20dcaff79f7c687fe1eb5
+c92faeee1cfb4a9cffc2abff79d8f1bd51ebafdb36e0a130fcb80dff8cf5a9cb79ed8ab4
+e05dcd2adac49dbccc16e652fba54dfe6dfcc2a5fe74f761ff2186df9cd0b72eebbba4ff
+07ed8adb82f3a4b8fe01aeffc14a9eef7aff86de9711c2e081ccf45ed9bf52c3f66a9d44
+fa59ff72f333ffd996c1f85efc21e0950fa3dc619cf89339ffb854f124ff4ff228ff86f8
+5fffc5f72aeda3d893cbacd893e56195e44fa1ee61ceff79f9d051dda5bfea863bdc23e4
+a52f93fb9b26c0ff7fcaf377dba1d84cc609ffb61dc9fb12f293ff80fa69f67ffe89d82e
+e0bf1de19f04f352d79edc8ecbf441fe4bf0a5cc14f268d85cfb25bfcd65e07aedcb2c88
+f5d85fe00ccd68fcafff4df10da5e27ceda5dd0ad8eeafd095c3e8a4d387bb4ce904da93
+cd6af7b6ff26edc017c5e5a80ae672d683cb90d8b843afdd924a94dbb53fff50f327ff4a
+affad31accfe11dcad46edb770ffc461fe08cdfb93f85bb9f4ca3fd8f79450e604bee540
+fe6bfa93f17ad8f9659fd875d848e40fe034d85ff3a5ff85f7b47beecb71e01ced39fa54
+afd97ae089ff53e584dc98e57caffe4cf726ff5786f9d89517fbbca0edb539e47dd993ff
+be43ff2af989ff7a2ff517fe3cb61ffe61f5cc7bf1c043ffbe30e55bd77affa5f26dd0f4
+86da9ef709fe61f39afb22f2cafe62fb86c2e571e089c5ed2ba6fb86b8e775f389d007e5
+af2bf37cd9a264ed7bccfe0889ffa51bedd386fe9b62f286cb23de5ae84196d0f53cffaf
+f4a3ce86fd9fda01cb5ad961cfff4ca8fa92ff7fb6d186ff14f5c124d896c1fa3bff1bbc
+ed79e587d0a2bfe0a543ffadcb3bfe55f5c263fa22d652ea95c9add146c1e5d874debf90
+fbc693e4109fff5fa5e57dddaf83fb93df32d84ffe36a4ff3aec5ae0a7dd12e080d8b784
+08e9aedd159dfdaf06fb80c1e051da3c97fb2ed89afc5cdb94bfe33effc017d94595e5d8
+4bcefe6cb8ed43d9c418bcea9fb9fba5c0ff24b5ed8805c762ffb64aec79ee93fa22ed99
+0fc1de35d864c8fb06e596d8b36dfe61f71eadd98ccbfe44d80fb6fb3df21dfdc767e581
+dc93d818e09cbfed86dd6ffb13f27afea16191fea854ed66dd41c2fad82db9fe19f24bfe
+c402ef60f986e07fc1e369c793febc65c5fcbf52ff3bf6c69737f5bad931c0dda546ff91
+f47dffc459beff25aaed86ff58abf57ee6a6feb7ed60aff269afe22ab0f96fffa4f74dff
+38ce13dd62e055c2d9fb93db26f1c296ff42e076d786fbaff579ff9ced4393f2bf4efe34
+eea2becf86fe5af362a5de93ffc66ad993d87ab7f304fe61f77bff5dfb32b6fe05f09eda
+60e024b9f8d837e0c40bf77effa24b86edcf84d89dd579e191bfd09fed10b6fb20b2fa1b
+cf2fed93459eeac2a5d36dffd87f50f994ff6df2b3d816beed04e19fed79c2f841d512ed
+cb25d854f23586c5ff2cc4fa0bc5ff7dc0e030d87cd193f082fe93f7affe8432be4af8b0
+5ae11eb8d1a5fe3ddf50d829e2bf16affed967a9ed7cb7d308e94ae4b1d00dc0f925f14d
+a5f407ff52ed35d0b188ed21cba9d393e75acba5c642afff91c8ed047df35eff9ab8d023
+f1b6fba652f76afb20f43cff4efb29adfecb5eedd879e59ff979ffaff1861bfb58e523a4
+fec286e151d623e886fe6ca4d866fe17b2de6ad980faa46dfe96dd88d2f911abdd80bde7
+8b4ced0ea5f46afb07d95be0c147cd0c9bf1adffd872cafe6df586f910b9f29fff6bf0ac
+57f8c5872cd0ff18cbfa79fb92ff9f39fb9ae87bd886ccea7ed587de9ffe70fac451bae5
+43f208aff27cff67facf2ee44ca7ffddafd487ea50e5af61e014caec08e094ccbca5d8b7
+94c3dc4893f3ac43ffbf6ad9b603d834fed093db88f1cb43ec0eaff47bfe5fce35c3fb3f
+f281cbf633feafe951c7e04bec05ff4dbe8fef79ff579ffbd086fdc954ddb6ee86ff2ca7
+e97deed25ee41998ed0aa5ddbf2ec4ea6cc31ab7cf81fe93d860ddf79e5be0a43be055d8
+29c7ed79dc31ff64fbb230fc47f7af11c0e02fd99bff78fb9ec0fe40d928e0b984f388fb
+cc539f12fb34bffa79fec196ff6793ffaf3efe5af10ef65cff79f8d107df96cc11ed3dcd
+f37ee3bb4ef506fb51adde89ffcd34ddc199f8a5eb79dfa6d85393e3c0019eff1faef782
+b6c99cd9fe41e01dd6f22fa8df3a94ff9841a5e068bdfb6effa528fb93c0fa86d3fc4592
+ff9e4bffd993ed3adc03e731ffaf0cc1ef7fffba84f3a5f97cb6ff51ca9fe10bdd98bfe0
+6ccef160a5f781f20eb3cc69db84d193f7a51ae557d90f93edfecb8defa50ad82eed47af
+e6c75adcc27ce48bd887e01eedaf6cff87f65ffeb1fa5ba5fd60a0e779b7c885fe13ef4a
+9cfa9305e34edc1bffc026fab9ff4786fbd079f0c52dd8fb72f415b1cf86fbaf65c1fe7a
+f6cc1fedbbfe26c7f201d83ddcb0c739de52e55e9bf2d061e5d38733fa79ff86f4b1c677
+ed95fe44d920ecca10d851df05c6a8ed5baff383ff17a5fe3895ffd31be15bc2eb38e424
+ed60e079cdfe6cffaabff62dba47e060cdfe86db91d8f936a3f225fab317ff45fb66cebe
+32e6c428aadd9f2593e0c117c4ff2bd4ff3aedafd476bfe562b9fcaeff93d16191ed9909
+d3afeea952dd9961fea539e05aed69fab850dd9be317d94aafe080d87af69f79e588f86a
+ff82f399ff25c3ec18a6fb05a9f7afc0e053d79f5afbd44de086cea5f95e9aff87fb93f4
+60f81afdcd41d861edca86ebc14886fcbfa5fb72ff7cf7a9ff12fb4b9eddc338e079d999
+f280ff3cb3f24dff1a86cbfd79e066d9c09ee9b9a5f27bfeb85afbd53feab7ff4bf095dc
+6dedaf86d99a5ff9a1ff1ed0ee8431c957f5befb4ac3fe79dc2fc9f50dffce7ce4b986ff
+9fd829c7f503ff5bf4c493fb61ff14e64cd9ff56caafe016d862d97cb6fe77bfe086c9ed
+55dd0ba2f324fec217a7faaf1efd63c7b0e545ed34ce76e086d9be7bff93f6b851d922fb
+afee974edd29d892d5b844b6d88ec6f10195f886ff5efd16d0a1ec6ac4df6ed0eeb006d1
+9fff2ef251c933ff05d94d93eebf6eff7af285d874fb36f9ba5af61bfecb26d858f3b14b
+d8f786eb9f0ed896e535f38aff7093e5ba46f40ffccc23db7aff966aed92d5b068e405d9
+a5f293d0b41db8fb2d9ff494fe04f6d833b2f839fe4f96ff7afbcd6bd974e58af33ac0eb
+93f12eff86d7be9bfeb62bffac46e81fdf359dfe7be361d809c4ff81f859f307fe98f55b
+ed31adfebf49ed1ec571b8e523c1fb039bf8a55aff94f44bafde88fe92dd7ee5acf3c615
+9de50ada42cb0ee5bf9fcf08e07addbe6df27ae4c181ffbe11e039ffb869ff7acb5ce01a
+d5fb5b9fde88d8a56bf892e952e2d0b348f92bffb3f1b750c634fe5ff3d779edcf45e05a
+ccaf6cedd065d97cebc62bd8ae3fffb0ee45b7d982ff58de7bd9ab01f350dc12f2cb65ed
+96c4fa70bee802f2c09eff8ce03beda6c99ce862dd26d886fbcc6dde93d1a7eaaffa85fe
+7694e1be31c3e524d887c0ed73d00dea62f9c12686fbaffe86d0a5f58cfeaf48ff6bf293
+fdab4fe692ffa502de3c9ffbadd175dbf028b6ec9abff8af3ac2f226fe5fefbf4aca0afa
+b725fea5c2df9f4385fe90f9bf96e1873effb668fa90bff03bff9f11ffaff419b4e482ec
+94c71c93f8cc08e5a0d00efb66f7c493fda5ea6fafd809fe51a0d9ff5bceaf43ed30f562
+b8cf13ff46b1d886ff77e59b4df428ff65fb52df39d949c6f65aff86fb79b6f739fe15fb
+5ef4aed23897fed54bdd31f15ffc64d82ded93c5e052d726c7fb0bd841cafe78f6d6885c
+fdbf43a8cff90dff4286eea3ff6dce97e71effa5f29bc67eed61e61388fab9e51cd843ed
+09affba7c90cddb222fd78e07fc8ed8944cc9efa4afe0ef561fbd8679bffb631fe8ccbb4
+41e629d260baff48f9b681ddc11386b6fb79fe93bed0a4fe75e293c2fd1df1accf0bffaf
+d59fb9e508c179f3be9ce92bd3a4dc42f1ce6de1aadb84d89e4effafed66a3ea91cf7de0
+1de897d974fe18aff786ff9e73ef94f8af4dedb725edc71ef286fe8c55d8a5c5d961e007
+b5ed4cb1d979e036ff5afb93d979ffcd31d867ed9dff6cc3d92ce86ef77aff9ad2bc15fb
+51afd8fb69e579d99cd0afe0ae3bfedb5ced7ec2ed55fec097ff79e51ec2e07bd0f52ffe
+abf8d328e0c30fe44fea1cf2af30ed5fe09e39fab75be216ed4fcba3ffd8a50fff62b2ed
+0cbfe59612fbbe4798f231feca79db1bcbff01f753ffafca7aff52e4c19bdd3bd848ebc9
+5bd82de09acc80fe9e67e4afd804e7aff165fb21fe93c1fa7cfeca3efb8bd0abdf19d63c
+edb584f391ffad5ccba4f776fe54d0a4ed4be43eeaa5d894fe08a5d81effbf2ffc4d87ef
+7fbe28cba6f93fafdd16f051bff288fb9d27ff429cee6ce53c95f452a5f18dfe7ddb68cc
+fb87d97bffc16aecc693fe7dfa89ec256afcc48cc0f979fe5588ffacca64ffd26ae0b512
+fa93f55cbedd85d8a528fabf05f4b432fa69ffa5f3b520ff79fc89f314dd48d8ff933bfb
+be61ff30e27eedae53d937dd1294e5af01ee63bff386ffc007e053d910d0fb24dd3ae094
+bfff1fb9d893fe85f732ee82bff988ee52a5e18dc9ff02d1f287e714d995ff81d68ee0a8
+0ada4cedcf92eac75bd888c7ed77d8ff64c934d6afff4abcf603d14cdfaf1cf942add830
+db5df7dd39ed4de020d991d0eb3fd92bedb702f8c586edbb3db6e1944afd3aeeb868ed9f
+d05af18fecc402ce63e496ddc352bdff6bf7b607edcd7bdfa5c893d0b944c3ff86f6a0bf
+ff71f2c193fe329ed84aa5f596fd7cf651bef080feaf16f286e061f305c753c4b1cb3dda
+59e074c8f760f025a5e59a45ff94fb62d025f45aff33fac19ffeb576fb04a7e01dffaf06
+fcb422b7fb87f70695e570a8eb8ff281fec075c4ef68fe83d087afca96f5a5ff60ee25b4
+f780fe9979dda027fc53d9a5fe22f8aec4e579fece45ff84dabf13b75efe7bf586fa10a3
+f130d0a5c57efaa55afe19f34efa14ff9ce517edb241e057d12afb4cccaff76ffbcb79dd
+32c89eea78b5cf47c2e6aa4cc5fe7ab5fa9fff17f587ffb828fdb711db81fbbc53f9d9c0
+5ac7a5ebb47ae099d883e367c934e45cbff17af74de59fcd59edd346ecadc1dd27fec757
+ff17d933edbbff0ee5a5f205ff52fe16d876cca8c1fe6cc0e258cdfa44ffc17ae686ee70
+d962ec179bd80c95e3af1efba5ffd995c0e035d955c0fe79e55aec1ee04dc9e68ad879e0
+9feb6ef488d979c7fe80f991da98e46bed0fddbc22ff58b6fe1eafff01f588ff69d4fa9a
+2bc0e938e262eb97c661f1a3d085ff96d86aecce862daaf00bff3bf2c205f752fe1cf393
+ff85d8fa54d2a1c66dff86fa9977dd9b5aff81ee9f3ce094cca5e3934597d8b646b8e094
+ed7ee45bfb04f3479edd0aabf31eb8ed80e4af3aff0ed19eff8ac0fe62f9c66cf0d8873e
+c64df824a5ffbfa9e03ad9b6ff82f490ffaf24f745fdbb30c1dc02d451f220a6d80bea52
+ff18d884ffa562ea8bcfed80e4d361e195dc22ed9310e5aeff79d287d9af2cfed502e54f
+dd37e848fe129fffb6fc7ae286d96cfe93bbcfa4dd5ed812edaf2cb5fe24f3b63ce019bd
+ff12facb1ed866c5f47dfb64f96ffbb5f62efe7bfb35c71ef9adc798e080d2f960ffcb73
+dfa551d81cf5c599bffb2cc64cf242e0a134ff509ff5dd80e579d0ed8618fb77f7980aa6
+d861da38ed97c6a6ce85ff6aa9fc93ff85cefb65f3afca7fed9ed92ec8f23adc9b0df947
+93fbc159bff85ecbff80d94af20bfc46f8c157adf692fe7bf4abcb78c0f241de1fd54ff6
+9ecb47e730ed4bb1fb86f5c26effcb7dd987d6f866c7f26ae5b986f5a1fc0bacdb27d84a
+d007dd79ec93d287e4b39ecf2aff43afff2e93eda04efb87ffc493fe78d966ed79b9f693
+d7b679f3d37fe6c829adfb0afea03ec2e191d05de8c6f830fe9ecc79ff5aee0cdd4bedca
+5fdf2ce89f3ee09733fdb640f956fc87b7fa6dfec4a5bff22ca0ff38a5dab041ed6cd788
+e09ccf71ed93e069d927ccb806eda3e07dd893ed88ddb018feb8a0fa7affc937dba542e5
+9e0ff050ff0da4ec964ad8a52eed41d95fcfff6cf1a4f486ff9fcb55db13f24affdd79ec
+8ff0d67addbe14c1e730d90ce037bfe509ff3fafe360dd04ffcc21b6fa0e89fecb72da88
+f1b0ff66f325ffaa4193e0af0ffbb719dd6dfeb4fa991df8aecb73fec37affd766e5c686
+e079e604d1b243ec60e079d7ed7bcefd06f29fc0f92ffead26ffb912fb40ffbfa5fb70ff
+5dfa2aff58f562ff31fbd169e022cdbf0f9af879febc63f2cf89dd79bcfb32d0fe85fbca
+7aff92f39a39bdc913bfe660ef20ff77faa1d96c3afec260bc1af765fea9f479d06cf1ad
+f7985bf2a3c1fa15ffa7ef6cacfc68d9afeda545eb63d456dc0ed895d885efb7fe78caed
+69d1f286d8a02982d5e58746f6bb06f1b522bef707a6ff1eccacff67e3c093ff21fba810
+de4e97e577fe1db6e066cbed7adda7c1dd8715eb4de093bed392bbc909cfa9c557aff385
+ff53eeafdf60d802d1fc3bb8fe39f4cb81deab01e643afe059d521e0b1fb7cfead38d994
+d88fe2b05ac0f7e59307d9fe95c3e03cd95dff93fbc24f86ffafcd6be080d99434bed83a
+debf49ff30bff686ff24fb94f861fe44e402da52f328bef943b0fe3af6b7f14dbeffd869
+e4af5cd8fa6d95d9f161b7ed3f9cf11bfe35afd956c7fe85fac75ed893dd7cc1fb4ea5f6
+5bfe2a99f2ce7af3c43ce61bf068f8a5fb79e88dde03d895e080fe32f286e58eafe168ae
+d89325fe51f2c16abffe11f7a5fe7bed53e02dd0fd81f75cfb2ad8ff0ba74eb8fba338ed
+50a5f281d81fe03b9eedd729dc47fe23f452c3fe81f7b179f29dcf86e016d996e0ae3fc1
+eda4ca7aff8bd293de74a3e77cc0e065db8afb9f0eb4fe3cd1fe9837edc24792d0fe59f8
+c77bd972ccf386f77ab6ec2ab0ff26f750ff0fafe5c708d86ecffa44afff1f98f981feb2
+dc35e04dee1cff95fd61f72ad65ac6a5ff48ee23c5f918ffb7e679d88effa5f07fdb88c7
+62d908d69ceb944bc701eaaac9689aedcbffd870f2c07cffd002feb6ef85ccfe17b1f37c
+e887b5d09fed62e01ecbfe08db56f999fe77cd5bf3c784bc2ceab64ef11ffb5cffc433fb
+04adff18d839cfed79c5ed8714c0e186ffaffa2d95ddbc27fb93eea14ad513e53cd09ef2
+7ed286edc598f34090ff94ef80b6e66bd8b9dd5cd9a54994ff81c79ed8be2face57bb5fb
+94ed1dceb67bff81beed885ac2f70de33bd823d251ee2efaa4ff86f66cffb4faa5c551fe
+aff532869f19dd59e5b22c93e6a55297fa68bae868befb03c0ff4bfa09d1a8ff5ea2e584
+edc138b1ed04fe89ec1bd8ff7bf6ce6ce4add908e095c6ea70c2ee73ff5c9afb249ff4ac
+ff4ad819da5acbee13a1eb5bd80afcb0ff94c1ff67dd0ae062d9a735fb81d6f152e43aff
+0ec3fc3387ffc60cfdb8ed13b6fe42f95df4d83ed0f208cb88fe61f6d856e536abd8fb40
+b0ca62fa7ffb93ff9ecf87d85dca3cd80fdf61ed82e01dd961d0f2c1f881fd0dd7fbbf4a
+f9c8e411da48a4ff32c8a6f179e586b6ea4693edc04eff1b93fbd160dab932b5fd9d4ac8
+12abfa984abbf588ff59b7fa44afe093f3c250bfe055d879ec69fb7ef2a567fbd588ff84
+e26bdd32ed5fb5f093fbaffe17e5b962e223b7c6a4d388e0629ef1c14aa0ec68de76d0f1
+79e586afc677ffa76ab7ff4cc1e09607fbbf95ec0a9eef83ffbaa0eb4be009dd53e819ee
+8efe79f29bcc29ff78f390ffaf43e85fd0acec8754f1d98f2fbeff7af6cf8bdd75e03fd8
+2dc9ff7af6cb28fb95d0afe549a4ff80f2a3dc5ae5affb93df32d6ff85ca3caff026cf9f
+fe0cd52fdea8ff7afb2af7c494bfe50bffc6aa4de52fcba8f951ca9cfa20c04cc9379eee
+5affcc92fa6dfe15f7b547f9cb01eaaefb7bd230f6af38d905ccff14edc125edd883f29f
+33efaccb6bf779ffcc65d930f314c8b7a9f782fd79ffafe126d8af3ffb9fd5b647e00fdd
+8826bbff3e98feb88418c4fe9d40e5b708fa5afe92f796fcad50e00eb3d865ea32dd7df1
+c627d853ff71f909d85fed75febe1aed62fdd885e27edd79d986fe61f203d092d9af0cff
+449fde913dd8fe79b7ed1dc5a5fe75cfa5d9ff86f4d078d9a502ed48da86d869caeda579
+ff86d822f297ffbf5aff9df7b652dcaa5efbaf3ae013ddb977ff3bde1cdbb628fd87e579
+d986ed69cbba31d1be459ff986ffc087ee09fac883f096fea1ed6bc3de1fd2ffacf251ed
+afc988ec80d819cc5bd613ed8bbffe71f9bd9efe5cfb0ab0f493e417cbaff281ff23d0b2
+6ae07bd8a511fa50ff1df252e8a5cd93eb6de35ce986d2afed62cffc9702c1f77dfe87ef
+04e54af37a08e058befb44f7bf9bfea8f436ff9628fed837e361da55e00989e5c26bd488
+ef81fa99d179ff9ff967fcd753e986fec160e751d0a8ff47f927ff40f2a3fb72f5c561e5
+1ddd4ec2e49458fcac3dccfb03b1f87af09345e06fd98afb22ff6ddca5f095ff83f5a5d8
+27daaf42f015c7a9cc9ae16bfe7ab7ed884edec19fe647f39ffe37f7c09acca7c781fbc0
+20ff43b5f92ffe9ff550fe26f8b531f2afe043d85ad86bdd86ff8ce8c1a4fe2895d885df
+5bca1cafec86e1c065baf59cfeaffb6fcbf2a121fa49fe1ad941e00deac471becc24aff4
+a6d04798fac59fed1bc0df93d797d886e003b0d913d897f67bfea55fffd02dd8f65c7fd6
+e52fd962fabf9ffe04d360d854f335fe4dd831dfc23cfeb65fffce89dd74f239ff4cd82a
+c9fb3bd2ff9438f886ffcb0cafdd5dec2ef460edbe3a95f0c3a4dc83d8b81cb6d97bddc3
+6ed95cea89ffaff62cffafc61dd041fa62cdaff219ff3af68bffd04cd805fbaf45ce14c6
+3c94eda93efbd879e0c1a5bfff6dfbb327f543fe87e09211fbaff08805fe6ff79b5bfe7b
+f618fe5ec2ff6ab6ff52b9d331bff21ab6ed75b2e1fe4a8affa4cc11ea38c2e77fed87e0
+a0c685e57af2b375e37dcfee8605f74bff93d77cf59eee5196e5a507edadd816b88ec1ed
+87d57cfe93e401feaee2864cf610ff61f395fc38eeac0ffb84ffa63ac91294e79f42fb9d
+f1bd94ed38dc65e0afce7aed619fe57bed6ddcff86f27af9d017ffbf59afed9333f35496
+edc859d997e5abef4effc960d830e0bfabdd39b8ed07cd61e1c0a6e94ff2ca79e005ed89
+dc7ae069c2ff15becbaaedc057feb583ff79b5f930ffaa0fedb722fbbf01ff52f91894e0
+c2aae6b121edb714df87ffc060fabf79fe69c5f25ffb45ff21d9b54bb8d961d818fed06a
+e0afc946e587cb5aff96c0e019cffa7df2d661cbf379e45efe11b5ff88fa9d54febd0bc1
+fa25ff99c71ea5d84fe0b688d97ee499fe0fceff87e7c32887b7ff62ce047fd8b67aed93
+ff7bf958c3ffd06ddc8ff39e42fb23dc9a3afaa5fe9efb41f7a5fe44a9e06b34fc0f95e4
+2af3d14cdf25ceaf64d9fa6affd49d5dea86d899c8fb57fe3787d0fb6dc7fe62d80eddb4
+28f1d939b3fb32e597d079e96af2a5ff88f27ce7b988fa9934fea5d105f4b880ec4c9ff1
+79bee348b6fb0eb0da27b6d88fde79d807c7f22ed9a5e080d9af4ef2b2f979ffc128fe52
+f72bd161f2b74cdd07feacf6d819ec93ffbff71efe43df16cf3de48a24a5fb4bff2ebfed
+92d883ecafd12ac55fceaec70bd89bf985f3d977d0fa79db5b9bf786fb70f2bf3bb6ca40
+8ae5c3a5f62bf04ba5dd7bd8fa5fa5dc529fed83f86cffd08955c2eb7bdca804fabd9ffd
+0ae03bd127ffa748ed1ebee57ff271ff8de21fc4fbd853fe25aeff76d993ed6effc968f3
+30f851fcaf61e579ff58ee40cdfe68d833e00ca3ed73e5bf93eba5c76dfb80d168db4c93
+fbaf51d8329ce583cfaffb85f295fdb6ee79e5c1abd976ff61f816ff70f386f121ff66ef
+79e726dc5686f5bb4cedafc3ed1bcaabe006d7fe7af4aff81dff49b0de87ffc026f2af1a
+c0f601ffbf36cda5eb459af7abff1cd84cffc95bdf2cbfce96fb72dd5bc7fb79ccff64d8
+28e0c046c6fe9336b9e885dd67d1be34fe53d8a33cfe9fe6a6cf79ea97bcf31bc6b2fb94
+11e682f192c8fd44d8a903fb4bff1eefb4e52cf27dffc23ec0f38afbc34abef2599fd85e
+d60ed936d89810fe51e509c6a5cc94e357d893d980e03affc293c5ffdf219dff9309ff86
+befe4393ff9c4fdb09d860d97bccfd5bd209edb669ff9ded88e580f1abfe1ec6afdd03e0
+7cee87e071b7f593ff64f143afed92f79e06dfaf3eefa1fb5c93eda566efd98705f9b0f4
+08f8a5c3e618f2b0d256c517feb722ff47ce9ffd3389e3bfa9fb49d85a97ec83ffc49ce0
+85d8a4389bfebbd811e49fdf09d465eda5fe0bb9f62cff7df587ff65f9cb83f289b6ef45
+fe30c0ff0cfa4bf598d3b249fa01ae66c4e03ccde5a740e961d8ef66bbe684ed93fea4ed
+1193ec98d97bfbca4ed831d34ecc28d95de085fb69fe5ccd3efcaff816d84cade57efeca
+16d840cef381fe94c914aecffe11f6b72ec0ffabcd3d98e486dc6098fd77e201ed93dd83
+edca7fe186dd6bf1d05fff26caa3ffbafa22dd51da39aff666feb9d98647a5f573fe6af9
+7fff21dd61cae86dddaaed49c5a8ed40a1de35d0fe6ae080dda562eda0ceb818fb86edbe
+9ff1b6fe75f8b763fbd48afab915cdfb29ffac45c929aefabf38ff51e336a2e57efe79f7
+97ff8dfa77f026d2bd93e7a6c7289beb85f2cb0edcb379f985ffbc61db23e661ffd943ba
+df58d4fb9c5ef27afdc250ff22fabf48cf93fa7aff5df73ba9f50dfe42ebac03f580d96e
+ed0887d2a5c0f879fecb19de4af105ebb0e083cd35dab6e154d086edaf3efbbd04cd9fe5
+1ccaafff77f7af1ed8adf451fbb3c62eff73edc028d754fe37e80dafd825ed9e14e2349b
+f3ae5ddd6fd0f66bffce6de0b586ed79c7fe13f1a7e00cd656e215b6cb99ff4bf312fa83
+feda51ff3093fec42aed4be5b00ffba5d19cf2b683f89b77ff931ae5d042d926deb682eb
+7beea5ff33afdb2dcc9cbfe06bd8a5c97bffbfa1e551fec0aff342e77b0cedb77dea93d0
+6dff8cf822ff58faa52995f19ef934ff9ac886ff7bfa6dfe5cd902e1c264bdfa2798d810
+e886df90d95aa5ff93e58dcb87f3cf6bff5ac7fe79cbff52e593c0f910bdec9c4ef321fc
+c019fab588d9b946b6fd6bf3a0c1ff37ed88d8b89dd842bb8ad0a5c1e74999fbc0a5d56c
+edc338ff53c732dd01edcb3bd8fab67ded88ff6af4c943d80ee08ac4f671bafe06fb51ff
+8ef92cda50e031c2f09a36e06afc92ffafc92eff59fb86d8b544bed993d686efc6ff15d9
+66d779e322db51e02dd186f290fb9e4cffd96ec9ff7ada71fe55f704feca61db10fb4fff
+9541e084ddaf4bf2b685d81efe3a9fe09038c1e195d87adda3cf2df664ff95de86d8af3f
+ec70dab10ef960ff79f6d906f261fa78b9de8655ff1cfab87ee38df593fb7bffb064f3be
+8647fe0dc7afe013a9fe86f7bf5be51cb4ef6ad986d824cb59ee95fb88f89317d6ff84cf
+1fd854e086d999dc12ed2ee4a2fe61ed18e04aaf6de681fe0ff2a5fe6bf3c0a5ecb53cde
+29c7ea9315f3b646edaff23bc5a2e5b635f884f17ad81ec3eda9f72cfd97d702e761eda5
+c4f179ffaffb03ff57f53cff61e083d805eb3af820ffc493fb4ef285bfd42eeab26dffaf
+e020ceff03f6d092d99f30f24cd90aea4abed02be09f0df6c2daa5fb4e93fbcf60d9a043
+fb7cffd54de5a1f261e89edf79d40fd84ccbfba95aed94e59ff139fe5ef677c79efc61f2
+0ac9aeff6ffac5fd42cbace0b849b5d89641fb18ffbe7aeda542fbaccc83fb9924caa8eb
+79cc69edafd045d9b9affb8708c8b768ed6ffba2ffbc7afb58d225d886d07eeab0c693ed
+affe54f4accb81dc6de00abcd09efe3df0a1cb23e5c34393efab5aecb635f350fec0a6ff
+78b8cca5fe6af579feacd68959f079e9c13b9ef323ffc2afdd3d9afac532affe81fa19ff
+a5f37fffa464e8be06ff5ff776cdabed25beff4fafdd7cb6f73f97dca1018eb8f45a88ff
+93f708ffcb91d97bcefa5bffd079dd59e208d1ff61f615ff3dfa9c1affa5fa66e24ad3ff
+81f3d81db5c645ce30dd0bd993f869f046dba510fe50ca0d9edd935dffbe48fbaff062e5
+23c5e487ff67fd5a87fbd671fe9fcb6be085dd7aeb1ec9aaed5cde25e595d94cec36ffba
+1ad82bffafe587d85ce40694f2c01391fdbf09cb5cd8bd3cc2ec20e4b83ffad97cc81ab9
+fb0dc6a5df81e8cc37ffd469ebcb2df3b4edd81cfbcf20dd6deba95ee564f1119bd80dba
+f533ffafed54b9de91d887d977e0c287e62bc17ef5b757da3ba5ffdb7ef092f79bfe73eb
+3ddeaffe62face80f186fad12efbc219eda5d02e95ff7dfa58b618d994cfaaedbe17d93d
+df1fffa5fb08d366fd5ff728ff86f9c21abffb93df67cbfe8ff285db02fb6df584fecf5a
+ffade64add87edabf778fb55afd87affcd872ebffb9fdc86e16cfe3ef80296ed9326fbbf
+85e57cfe5b86e4be79f0a2d446c0f725fea0c1e585ee6aa4e09468c1fa9f29fb49f2affe
+2ff05ecc9fffdd149fee78fbca8750fa17d855e149ccb3ff9b16bee63497d925e0bc75ed
+6be5b578f67cfec342b9d693edc151f608fa339dff80f893f1be46c3ed87d993e08cd998
+d859a4ff6dc808b6fa9746e061d071eda5cb2edda526e185d86ef198ff42e429b8d093fe
+61f20c96ecacde4ced35ff4def94d3a7c0ff4bbbe09d0eff4ecf39c0ff9b51fbb639fe8c
+df82d8b131f84bff3ac2fe06d3f73088e6cf7de0a409bed593fe03ec436ec0fe28e3a60d
+f4d299e07cffc088f21f87d6f26cc8aef369feb140ffadd93bffcd08e05beda1f501ff6b
+fba4e0b47addc462ebaf5ecc7afa9852ff3af214d250ed10daf03ab2e59fed2fe7afc0f7
+38febf51ffb64cf2c763ed34fbc222d0a5c796ff01e031ddaec1fd5af58afe7ed093d8af
+29f25bdb7ad0fb74f1afd893edaad922e8ce05de86bef213ff51e487d5a9cb95da79f251
+a5d8ff0eacff58c5fb61f63eb9d894f9a8e088d07bffc1912bfe41eeaf07faa2bffd43a5
+fb1dff4de4c179e9c40f99f35a9dfb86d81ed964e0afdd31d860c9fe3ee5b60bd8ff14ed
+2dbae5aecba1fe85fa7effb878c4f352ff79d75cff06a2d99520e57ad7fa79b7fb94ccb5
+68fe7af265ec72f0bbf69b4bdf28d8b408b7d91ff963ffbd73fe14eda01ed955fe62f615
+fc71faa567ffaeed2bccaf6bedb9ff50fb19f35fe386c4fe6393f0c739e585d893b6dd86
+fb59cbff21f751d936f1b8d96fceb968e5c653dd78eaca86d88dd99802f9b762fbcf86df
+c036f1a5ff7efac14c90f37dff1e99f286fec154aedc86d7fb890ce34bafe638afce31ad
+fe84d025dd87ef7fccfb76f2acc5f10aa0ea16d850ff0bd99fe50ffe3adba84587ccff79
+f76bff9fe570edacde07e6cb86e064f9c587e527caa5c693e054c8f1934dc4fe5cfad8a0
+047be093e9aefc2db8ea21bfdc5c9df575fe1df24eff12acee2f95d86bedafe5865efb96
+f525feaf79ff2bf6b609e551ed32ffa9d228eda54bfe20edaacb50bee63895fed014e4b7
+efd14ed829eda1f76dfea55ad0ff74f9d768cbf36afbd803dc62f7affe18d9af2ce552ff
+5f93fed061ffafef91bef946b0d893d382fab6fe1fb7e9a1cf48f13affc14391f79c46fb
+afce41b1ff6cb7ef4dff34aff38d30d9f9789de0943bfdb4f6c028d14cc99fff6baff738
+fecd18ddc197d8be9ac5dc79e45baefebf069fffc314ea59bed835edc49ad05aff7afcaf
+cc64e57cfe6ac8f27bd387fe6df911accaec24a7fb965286b0fb75f661e037d923c8f43b
+beed951cfebb08e0bf7bec8ae59b3ebfe354ed99cabd12e0c14391e4993fce2ce278c8fc
+5ef767e917d861e15cc610edb686d86698fbd85dc7f3a32cff97f109ccfb7bdd86ecce0d
+ffd4a41aecbc0cf5c086d849a5ff8bf176d90cedd07be5b862eda54aff36f36afd4cf8bc
+fbda3b93fad543e0abcaa3ff85faab16fb73ee93db9e22f9b842f294d9379fdb60e017d8
+93d3ff5388f7bf49d9c5ff02c0e493cd82ff99f2b480e09f29c2e06f9eff9342f951ff21
+c2fb60a3ff81f66bfdb477f8adfb21bef76affabf41d95e026c59fff86f296f989fe7aca
+fc1df3c415bbff3588d6ee69e07dddad44d706f9b679e5ba4afec259ffd078dd27fec5ec
+57dd15fe87f9a64eff01a0fb80f8b87ae288e025afcf0ba579d2ea5791f673fe4af001d5
+6de093c1e00fd639f5c679ebd8ad1bffb0f706ffaff17ae55e9ff2ce3ce09efe3493e09f
+42ff06edaf49d110ff50f7b6fc45f5c52eedaed19ec9a7ed7df2ce39d80fd93fd0ed30da
+79cbec86df9c4cd0afff51d8fb38afd905d038d956e031afdf78e5b179dbafe610b8c823
+fd53f787ffa1c94ffe389ded7de1b38e3ffb93f09f1184fbafcd61e53dbfd992e0c146d8
+26e6c306fa5fc0ff80eec8fe1ca6ffbf1bdd93d88cdd5aed39ff4bb5fe6be2af52ff1588
+fbc777d883e0c4439fff26fbc104affe7bee6fc1ed5df9cb7add69d7fb93e979dbc46193
+d87ee9b462fd0df668fe5ada08b9fa86fe9df488afff62eea54ffe0ac1ed81d96dedb379
+bef46afb7effa5f593ff80c0fa46ffcd26fe76f884fea5d093beed2fe26ded86d0f560d8
+28fbc6ed69e55abcf3d99942f4aac793fb2af752f388ffaf6cfba5cf9fed62d8369d6cf2
+cb2fe0b55bf328ff78f786d0aef15ec3f286fe95d0b1ef49a5e62dfb5193ebc068dd87d9
+9ce44cd80db7f52cd5b324fda5f71ebc50c2fa9602fee115ff5bdbc08dd894e01ad68ae9
+79afcb58e362de1bc8b605ffd978b5f635fe02fabf13ffd252dfa4ed4acb19d851ef04a5
+d96da5f08ad75ed938e051e916d29bc0ff1fd9af16ff96ea8601a7d81cceff8833c2e580
+ff1ded6fe082cb98df0bd0ed34dd52fe11e086f5e4c24b97f862fbc781e5b0cd21befe1a
+93e49e2ad903de3fe06cccfe5df2afbffe20f8b63af557ff79f786ffd863afff84edb64b
+c287ffdd9f2ff0c678b9d69af01fff35f44db1eeacff50f82bf0bf26fe82fa7af5cf8a3a
+c3e47bd88fdda560e59b2bebb11cb8da88ed9cdd8dd0fd32f7c856de06fbabf48effa7fa
+60f23e88b7fc66bdcb44affeb6f681fea045e4adff08da5ad6a1ff16b9fe2cadfa7bb6ff
+8bf193c6b3ff5403feafed7ed99c09ffa545fb9bde66b8f83fffcb68faa6f490ff0b93de
+9c0fdc5ad879cced74d61bdda5c82793faca12d961df8ff1d83e80fbb868e5ac29fa55af
+dea5e474beff8437c2df86d86dff95b8d239e04b93f2aafb1aff5af043cff282cafe7af6
+93ff78fb61f427fe5893ed9f1cff94ecb74ac60ec443b6d97efbc7e743d8fa79f2d45bd9
+39dd60c8ef69d877ed95b8f347c9a5dd67edcc41e04fc818d74aeb29a5d9f387d212ff3c
+f4cd79dcc187eb4fedd273ddbe81e0b254c72cb6d8f536c1ff84f3acff06a5fd8af2b238
+edace73e9df17afa39ff16afedcb0ad8ff43f3c592c1fe8648c4fbd027d8f29617fea2e7
+01dd4ded9fc1fcd725d861dfa3c9afff8826fa51b6dd44d833e00aceabc67ae8c349bfe1
+83d06bff93f2a1f686fe27e5a50f93f3a404e0a520f871ffa5f307b2fe25f9bf2efc7de3
+86f23dfdbe79ff9ff996f4afff7bf9cc69bf45e5b893d8b663f931fe10c5ff9f0afea51d
+f232ff86fca4f88661b5ee6fe5c34294e7c32de062cfff5ffb81d8ff4de5a2bed093f969
+a5f284afd086ff49e705d3f1991193faa54affafcb46bafba5f387ff0b86afff7df6c041
+e91f97e4c4aded0dc1fc6df9a2bcff3ffbb60cffa8f963f13ed821dc67d85ae095cf64ff
+b6da6cffc577fec786e1bf2ed193d97adfb052e864d005fb5fd4af11e8af21d95adb37a2
+e05c95e9a8ff72fb4cee21e59ded7de2af3bc0f383cdfb6dd9bbed12e547beffd553d929
+92fbbc4bfe98bbfb0b93e1c218bf8bb8cd0bfe53e037c6fe5ae531ef13b4d96bf9bb79ff
+b5ed6ec9e567dd7af78acd5dc724aadbee5ab9ed0e9afe69f9cc56fe679fff5ba5e0c34d
+ea73dd84cae561d812daaffe7af3affe34fbaf08edbf3bed52e52a99e9329ef11198fa78
+fe3ff7c162ffc4a5febe95b7ec78dc5bf2ce8ffe7cc3fb0dc0fe1fd031ddc5a5c1ffb14a
+b9d860fa88e562d9459fe8934da0d87bceed8e19f69bfed014f0d36de450cbaff842a5da
+fb30f26de880ed99fbb623d878fec09de47deda440e029d851e004b7fb38ec10d931ff78
+f9d36bbffb3bcfaddd8cd884b7f208c0e080d0f01091f296d515ed4a9bf488fb9b31c2e2
+9f52c0e073ccff6bfab086fe7bcbfb59d1ff52cded4ddfafeb9e0ded9521e14cef38ff1e
+f79efe8845e402b6ee6db0da84ed93f99817f25688d97bfe1cf1a7d123ff93f0c107f6b7
+e33bffaf27fbc97fe062a8e07baff61bff88ed6ad0ff865ce0affe43c7ba07cd61eb94dd
+af50fa3bff21c2fe69f5adfe86ff7bcf9cc0fe84ee95e0b04afe2da7d96dff53f313ff46
+d893fb2ef73c95ffbb2cfe60f8b3ffd225e04dbeec9301ffc61aaeea2ca5da22e0c116d8
+b67feeae6ce0a96cffc31a86cffb7acbfa80d886e0c58cc13bc6b4fb79f5d73ecbf32dff
+4ee06dccff7ed0fb05f5abdf9635fcb659dd29ffb365fe71f2c479e0a04fff02bffa5aff
+38c8b660dc26e09f04c1f7961dd1a5f77aff9ff486ff10f692d8a8ca96e080da9f3bc4da
+5fe922f253a6e343d80cf298c0ed79f9be27e286d07aedb2eb5adaa6c2d96ce5cb80d9a5
+3b87bffe79ccff5bf6d06ced95fc7bf7c779f162fb9cf438de0ac5fb1ff7bf338cd9ff45
+a5e039a1ed17f4b15ad9ff82e524d8bf5093ff9b5ae0a5bf04f642abdd38a0edc44886ff
+d86ac9f87ed86de5cb20da9709fa60edafd894f230cf9ade7efccd85f37cfeafed49caff
+86e028d951dc2ed758cc64e819f35bfb4bf70ebfed9319f7a6d792ffd867fa7cff88dd1b
+d8af02ea98c5fe3df7a51d86ffbf61fe21f44ba8ed20e3b7f25695eda513dd79b5fb44d8
+59d9973eff9ec942d387ff92f34fa5d979e1affabd60d7f669fed976ffbe2bfb9d09ef98
+fa66ffabe01cd8fac061fbd9a2bee779fec02993e8c60cafed9302eaadfb46a5ee81fec0
+a7d31ff840e779db88fa0eee40a5ff56d435d871dfa55aef69fe92f178fb7ef19bfeafcf
+88d8b893ceaaff4dfbb0c964fb49b815ccabc657e575fb68ffc386fb5dafe06cd9b8e09c
+01ee7de086c7ff79fb88fe04e7c434faba87ff2ec1e582ff15edafd002ecace457bfdc67
+ffce89fe04ed4b93f1ae25c9b902afcc67e479ecafd348bbcd0ced87f7b68615ea79c356
+fe23f265e4aff360fb9df73fd9ffc23397d9ff53d131ed48ff93cabda4fe51ec72d88ec6
+e917d988f694ff29f9bf0fd5acc514cbb3e404d8327afb40ff09ed33e07cd686df33ec94
+c3ef9ffe2af7b638f4afca4af236b6de0ac2fc30ff4bf2c396cb41fab609d843cd5cd886
+ffaf68f2cf52df9c0bf1a5cb66fe86f570fe13f1a525e5a234ed5bd886c7fc14dd93f26b
+fdd83cfaa9d052fe88f87af1a1c64dce33ffd489ff98f186d894cf51ff86d93ae05ad0b7
+6191f2c50f86b7fb93bad886ed57fc0bd0b726ff9ff452b4f26fe3b811b5d87ce9a0fb44
+f37fff4ca5ff87f7c19feabb90c5fe61f225f575ffc007fe3de087d97feacea123ed95d7
+a5fe7af6519fed88d372fb30ffa4d673eb93e09ded6cde1dd9c03cadf985f3afc748f9bb
+30e04dd993c579fecc6bfac681dd9aff2ea7e55aff43ebb681f29713ffb732de1bd836fb
+81fe92edaf53f237df0fe54aff0cdeb718b3ffc285fe17fabe4afeabf6cc1bf250fa14ad
+df7de56cf2c85ed723fe86c3fb46fe9ef263fb33cf6de489d993dfc242dd52e01bd268f1
+58a5d88ecf9add5aa5e07bd86fed5bff058ffed960ff16e656d888e5cb64dd14e5afd862
+ed1bfe52f67dff29faaaf574fea0e020d85cfe89e47bdda4c1ffa92afad83bb7f20fb2ff
+25f064d0f779b6d29fc625dd51e5cb85f3c86fffb6e560dc24e464dda4cab465feafc683
+ed7bfba0ed892aedafdd79e6cf79eb5b98e37bd79cc3ff37cd9cff44a3e483e664d908af
+cf84e044dac190ffb71dfe39f923f2a0bff46fff96fa26bff903fb4ffe16bdfa4cf3afff
+1dd0a5c1f14486b6d093bdf42affa520faa2fe8e58f3bb93cfaeddbe16b7d99352c1e50d
+ef8bfd7be737d81bff52fb0a8bedc05b9bea7dd89edf54cb85e0a03ec1fe0ae37aff92fb
+ab4ce85ea1e0934aa5ee79c9aefb07fe27f8d89f5af9d03fd962d85dcef99e4694f3229f
+df2ad4ff41b2fe65ee76b8ec1fc6b0fe04f9bf96fbbb5bed21c0ffad01ed4bde9ecbbd79
+e660fc1594d8af46d9a4e56deca7e06dcbed81d9a430c799f63cdc62bfdffc31fa64c8b5
+6dcfedb348b9f1cd0fff4efb3985fe9ff378d1ff36afd858d142c5a0fa71f0afd282f2ce
+60feb1f707ff46fb72f4a5f90cfeafed83f391ef60d80fc5ff22d8fe04f7bffe10baff48
+9dd886da8a2fefbf1cadffb9f232fdbf07e4b6ff68b9fe58f7b06bedca05d93caffb7ff7
+88ed7ad8a83def2bd2ff88faa55ce593c5f779ff67eea9c793ceb0fe2beec681ff39d8b4
+3eb7f99f41ff10cdfb68e17ab6fd96f80e9dd87fe011fbd93987ff80d928a7e57bd8a8f2
+c42de54ce008c69cfb7dff85d9ff06addb9627edbe43afda1ee088d0abc793e319d862ce
+5dd92cd84ecf31de81ec9d64f1b879b1cc6ad894f286d0f63cf24fffe677fc9beb8a0897
+d9a552ff69d831cbec81dbc40cfbbd7ce588fed00dd94dd827dd5effcb7dde9938e069cc
+f33afe61afd90fe049fa0bff3bec62de86fb0dc1f284fe88d924e5b98ae37cbef10affcb
+29d859c9f34dffaff25d99e9c303bff786fd3dbeed058bdeb568fcb1f97ff15cdd1becae
+65bef43ffec26afe9af57afba840e653f12dc0ff88fb95f27cffaff76dffa6f953fcafcb
+40fbd929ed3de850de1eb6c670cba5c0d93be04ef7b6fe78f5cb83f08efba706f94393e1
+9f30ff51f2be6af4b9ff6efbaff11b9efd6df8aebff60c9dddb7ec2ec0f587d790d99dd8
+87faa94bafe09d4ddd13ed96ff55d4f561ff39aedb51a3ed89ffa878eda03ecbaeff52fb
+9eec42b6d899ff6bcbfa47ffcc9438a1e223ce96f8c131eecd86d87ae9b40fd836e254c3
+ff7cfa98d98651e53bdd1fe0bf0595e4b81bb6d830dd83e39658ffbe9ac4fd6bf97affaa
+fb016ab2ff85d56fde47e320bae516d84fe0c1a2bfff75f4cd86dda52be09636a5e8934d
+c7b6e147d811ed4c86d8ff841da5fd9451ed2efe6cf15de401d8c4f363ffbd79faaf61c6
+ed861dbfd194ea6dc6fa79de25e2c305bfe886e019d179d86fffca5de424ddaf83e08c12
+f3b9fe6db5ff46b88dfcb64bff16fa50caf781ffbf95f21bb5cb10febdf7a5d07afe9e5a
+fbcd44fb9cf27efe6df412f9aad079f30ba6d993ed13e25aedfa22c4f212fe95cf86ff6d
+a9fe94f77dff63ed19d948abeb16ccff57fbb6e012d0f682ff68f3afff92c3fdaf49c3fb
+d36dd8ffa5c682e525ffbf86fe3593d821e7cd33e0c106abfaaffe4bf823feaf13d05ef9
+6bfe93f729fe69f68af22edeaf0bfb7af454fe1eb6efd573dc51d2ed69c4e610d86fe594
+d08ce0a546e8a004df61d4ee6be0ad44c601ffbd4ac3eda878dc85d858e006c9a4d387ed
+19fe5ac1ff32cf58d689d89479da9e60eaae2bfabe3fc4f258d03ad927d893fa7ec1fe88
+f9799fda86f068fea73ed907dda530cc57e229dc7beb9345f708ba60f9da52d0b242eaa0
+bffd78f85fadff7bfc93db36e180dd9cd885f293ffabbfd944dc6fd497d941e0a4fe65ed
+93d2aac798d0a5fb3fa3ff25f7bf03acf579ff9bf224dc55f629ffbe68d8f884fea439ff
+80ed93e5b46ded93f831c8ff14f339ff96bcf74eff39b6e086afdd80e0a1fb76fe30e5ff
+46fbcb7dddb868ef9ee01ddc86edaff25de53bb5e023d85bc6ed01cf31d888cbfb94ed79
+d0fe72f4a3fa93fe13e0afc99ae6c21c89b7f571fbc55bed07b5cb98ed56d929f369ff5c
+c802ef54e435dc4eed1c87f4aefd55f17dffc311b9cd35f84bff14f160d96ae5c985d89e
+63fed834dfaf43c1fe7ceb95d97dcbfb34b6c827ebc15ad621fe5bf4d322da6de39061e0
+c2a1d061e788d8bf93fb47bdf022fa4cf125eac593bfa5e0b818f23effd004eb64fb76ff
+c102a5fe86c9ff6df6a2ff38b1fa80ff5af326b760c0fb2097dfb602c851b7ef80ff5df3
+40ffabfbcb0fdda51fff92d0f545fb16d588eca5b9cd9ff4b686fc79caa5fb95c1e59e17
+bbd808ccb066ed79ffa5c1e26ddf8fff27f8bb0aed5be5afc687fa61d0fa67b5cc01ff5a
+f2189eed6effaf78fb9ef6b786d9379ffbafff0dd1faaf51f91ffeab35fb1def6dcbff6b
+d89dca8cd9ac48f70af06186feabe079b0fd8dd4a5c94294fccf2dde9909e8bb66d895e3
+4bddafe279ebc6ff41a7e7c746ff85f1a6d961d027db86d87ae03195fe83f2ce7ae0589e
+e27cdc6affc34ce519eb42ffc12dbcff0ace3bff5bfac679ff93fb26f897dd4eea1f95fb
+c54fc0e99479fe89fa39ff17da7bec0ba2ef2bfb88c6a4d2afe087d94ce4ba0ad943c9fa
+69ffcb8642bfe9a32fed86d8b679edbf73e5add90298e55bff07f563ffbe9ac633baec93
+57c1f438c252ff12f5afe577baf86cf2aad141ee0ef876fec1199dfc930a9fd8f3845ced
+94d643fb23fe75f4aefb16f061d8ed4ec73baff719fec226ffb9f20c97fb86fe93d868e0
+a4e668f583dd92d82ce0b13ce85fb6d539bffb88d9bf2fafed9d44c4dd52d9a5ce77ee4f
+ff93c2de74e1a7ed32fe3ff74efe10f667cefe84e59715ecb608d8f0934cfec494ff49f5
+cd08ffd69743feaff639d286da7cd81ae453fcd0ff1fcdfb0d96d8f8a1bfe061d81eef4e
+9ed852fe89faacc7a4d02693f5d237dcb5f88717d5feac10e5be9aea86e4a13ab9cf9eff
+b677afff9de85ad586edb1894aa2dfbe32da5dcf79f01afb46d9aeec54f17efe6af6c09e
+c3f283ffa506f255fe87f602feaff411ffbf26f399c0e0aa2ffb41ffbf5cd886dcb67bd8
+93d096ed37a5f257ffaacb81f3a562fbd760f211adde699fe29256f9c765d879edb8fa44
+fea6ee83d88e5d9fe4ac66dbff8426ed4c98ff91fa87caff15e2c027cc7afe53efb0e04c
+bdff5ee044cbfb9935cef763ff36afd909cbff59e544c604fad226de86ff6ddd37d0f6b6
+fe6ff9c878f710feafd193f3b8249dff06c9acdb0eed4cfb17d961e5cc7bdc9de079d886
+d872e0ac7ae74cfb1c88f2cc82d99911fd96f009c8ff24f25bff80bde024d879dd51fe3a
+e4c01cafe180befa27c3fe3eb8ed26a5f22efea51496e0c235bfff24f5edc84cf2d4a544
+c4d988fbcc2bd851dd37b6f360afff5be513dd6aff82fa70a3f07dffbb6dd9ed79b0e08e
+c3fe54f87abff17bfe89eec062ed52d80bf2a2fe7f08d83ee81fafed88dda53dff61c97a
+fbd870b5e54297fe87d87ae59cfe3cb1ff1cd334f04cf92affc058f2c494d0affe55b7f7
+5cedafd644c0fb9351e59fd82eccf96afeafef1ae9afda73ff9bf235cae66fb4ea7fd1fe
+64cbff86d852ddb6f36193fb9a56dd7c0594ff8816fbafe56dec08a6e580feaced7ace96
+ed85d993fb86ca34d907e6cd11d8ac2af257b5ff48cb19e871d794ec1fa5d92ed84b9df8
+82fbb3e5be48b5f1aafb94caa2ff37d851ebc298ed0be4bf47d0f879fbd062e234ffb928
+c4ed5dc1ee80ffa9c79aebb033fbb506fe61e57add04d4b52cf481ffa564dfb979fa75f4
+af03dd9c40c1fb935dc4f62dd879fea003ffd144f81493dca10fe576ee85ff2acef208e6
+c4a5faafda3ce0c280f120ff5cbefe48f2c20d9aff2ffb04d73aed4ab8f39fbff2af55fe
+74ed9ac0fe05c586fbbf9bf52cff5bd0fc85f493ffbb15dda52291fe85da2ae04ced65d9
+7ce693ff70f925b5fe5b93ff9f2dedbc1ef2bfa5cd88f96ca2f7934be2bf6bfb16d162e5
+c56eed86d822edacfb79ffca63d91acff520fecb14dec263ff7ac6f78761d8fe05a5ec8d
+db5bcff39362efa9bfe535fbc1affc1acb5ce67ab2d769ff3ecefe75f79dfe4dbf91cea5
+e079daaf69fad36dddafe575f6c2a8e821fe5086fb93c4e41efa62d893f1b631ed4bafdc
+87dfaf47ca0ee079edcc6cffb8d83eeb99ffbc90c1ff03fa4ecb08bbd891dd81ceed1adf
+c45a93ff9e4efa01e746d7e00fd0faa50add5aed87fe9f1cd9aaf952ffc1479feb50a5fa
+8dee7ab4ec5aadff9941e7b8ed32d9baff3397f1bf50ff17e5ae3ac1e09e58ff79f35ee0
+3f8fb6f99ebffe50f8bd90f06331e9c125d886f5d944fb2ef7bf1aebb740f0c25793ff9f
+1cff83d297e0c317ed40afd086e72ee05efdd86dffcf61fb15f39affbe60f93aafe630f3
+78fac111cd55f21fa8e1bf9ff3a8fe38f54cfb32b6f468fdaedb79ccec85d87bffb87efe
+9a37d8f588ff79ca37f2bcff3b9ce0936df9c517c0db25e056ff36c389e16dd1f2881ba2
+fb9312cdaee049dd86c2ee76f987ff1efbce2ad994d47dfec6e94adf0ad9af3ae413adde
+d3b368ed97ff01afed7bd89d64ffc779fea31decc545bfe06dd960ef3bffa1bdf968ffbe
+52ff9ec90e93e4a103edaac767e273d9a5c798fe52cf96df59acf288fc79d5f7862fdd5b
+e07ae99fd3aee56fccb003ed3ae516abfe30f1af22ed51c0ff6ab6cc40bae693d54d91f1
+d90bf5d336df94ff73fd9abed19fd9fb0bed2cbdfeb2e54dd3f97cf466ffa4fa3fb0d854
+df97d871b9fa87f106ecbe2280ff93f179cdfd6ed8ff7afb0bfeba49c6e579bfff12eec3
+3a96e05dbbf980fea6f286f706fb7ed988e26bd3b30aeda4cf76f8b1fe3bc8fa9340ffb7
+28fa39fe0ae07dd987fe01c9ff63d833dea541c2fe93fb1ab7c65eff1299fa3cfec06bff
+85f6c960ddc16dfbc6a5e586f124fba5f709ff78face67b6cb5cb0fe87f35ae5af4bf702
+fe4684cea5f98149d96dffa757e028b7c808d496fc0cfeb131f5af0ae04daeff528cf6d7
+af37c2ff1e9ded9329bf52abd880f2a03ffc51a5dd86f6acfd05f4d668d90fd832ce5cdf
+a5cb1ef44dfe2af6c47efb1ff24cea82d9b95be5d379e8cb7eddb6f05ffb19f161eca52c
+e593ee7cffaff06cd984d0ff2bf278c8eb81d887dea0d0be4694ffa653e2964af217d95e
+e07dd865dcb3e013befb29ff85e89e28b8d80dcbec7ddc93eebeff4ed8bffb93f10dc9ed
+83d0fb7af067e778db7df1cb5fd9ff95c4dc6bcde49e5afad9a557eabe42f8a7eec5f35f
+e214fec193cae935d75ae074cbaf2cff9bf58aff93fcaf43ffb77ad888e092db48afe18a
+dca715f188ff24aff906a3ed9349a1d88bcb9fd681fabf6bfe16ce5ae40dd429ee52a0d9
+8be0af44ff20f34bf82bfbafe011d0f80bfebf90ffabc99efe2ff39c3d91eea053e597d8
+14faafe282efa233ffb749c72690e49513c73eb6e08f38ffaf1de09dff2ec99fe54fa9fb
+88c144f820fba52ffec11188f2d379fbcb68e07be528ffa2d061e02af287fa6eff1eb6ed
+7ae554cc39e051dc24ebc167ddfb03f1aa3fffbcd856ff34c1fbad42d89eed6dc2fe31f6
+baff22f74cff26dc50e0aec799f9bd95fb82ff93c6f746fd06ee88d0b973ec96d864ed86
+f3799ed872e036cf51fb07c1e479cbfebf61ffd8af3efeb75bed40ff60fbc16be79ff3af
+f86efeaff59fff60fbc1d961f7bf3acfaded24c0ff18d52deab17be584edb96aedacff2b
+98e002b5ff16b86cafcb4cfab27efbaa0cc1df93cefa3dfec493f2b47cfa9fd386f2ad34
+b1cb64fbd5840dfa87c89be06ed0f57afb52afdf63d779e167eda7da77f296ff0df552d9
+36ed4bc1dc61e410b5d86acba5fe5cfba5c707feb61fd85ac7ff3ff4acfa7cea87ddaf47
+f9b620f2d02f86f6d071f1c780d893d020e4b216fe5add07d839e054dd2dd8a50193eda0
+59f279fb6cf85fafedb7fe6dffce4ed801ffcb43dc86c7fe4ff47cd89efec1fb86f01feb
+bf42c5ff9a27ef5090dd9f13fb61e6be06ed5aff12d0fe79e5bf229de9c0a0ee1bf851ff
+2cb6cd10c0ff1ff3b4ff0fd0b33dbee9ae5ec5a4d889ffb67bffa431f9a5f477ff9af92e
+bfe40fdb56e279cbff88f924b6ed9213d8be29f657ff94d86de75aa5ebc105a9dd259ffe
+08fa79d986f7cd7ad884ff98ed7bd08def84f5b2fe3dccff86d813ddc593df863d97d816
+bcf58fdf7baff876ee5eaad98ee734f246e005d95dd76ffe9fdc79e5b881ffbc63f7c0ae
+d923ffca92d87be069bbee4affaff45efe3dccacd594c0ed68fea5e081d89646a5dd86fd
+94fe07cdf837fb44ea1dcfe504e0afca52d3ba38e251dc63a1f77effaef44a9fdd77e459
+c3dcfd67ff99b8d486ed03fe97c2fe77fb8aff55f8cd76dea5f24dff3aa8f130ebc047af
+ff1dfa6bdd50e280d8b60ee495fea745ff03fac8f65af29a32fe50ed1cd8b60df9d01ffe
+5bbacf9467f588ff95d90af24ef837fed602e9d029e34b94f1a54efe28f5a5fa2e99d86d
+d936d086e56aff49f207a4e54df061fa39f2b8fb76ed2ed86ddf86b7e593cbaffa5f9ef6
+79fb84ff1fed8dc5f286fec340bad63395edc039fcaff2862cb5cb45ee1dfb34ade0b044
+dc10d745e496ecb93ceec02ec5e694c1e086fb68a5fbd264e5acce17ffc022fa8dfd53d9
+34f2c09bed6489b0dd79e0c0a5d099fb59ffdd9c67edc2a4fa77ffddadce27ed7de4c093
+cdb46daef55a9dfe74ffcf6dddb784e9c23ed9c5fe0ff67efe95f101d986d879fec77dd8
+1ccb9ad584d919cd5bfab9f551ff1dd469fe6393f2c74cd927e065ddaefb02a7d81ee08b
+f065fbc916ffa5d00496ffd86ce9a4c1e06fc7f179cbff6af882d9b61cc76dffac62ff5f
+b805f44dd911c5e12993f69b52fdb76994edc55dbfec7dce85e252afd9fe0fc4ff3afa0d
+f162c8b98840c0fb934be019d82e9742fbbe51fdb062ff18f2d942c9afed84daa60cf435
+fbcd609eff934f86edaee017dd58ffa5fa28ddaf36f994fc79ff02f45aff93e09f16a5d8
+7eecafed0bddc02db3fd93d09bf2c04380beff6cf499ff26eab680e07bdb6aecc14baffa
+07fe5293ff9f40fa18a2ed93e55df387fbb210e093d6a5fdd277ffbf9efe7af3b905dcc1
+34edc4fb459ef32ba5f760ff1dfbd02ebdeb4faad87be586ff37f4d8a6e52cccff81f6b6
+edfec269e7a1d023ecade060beff80fb1bd839fac782e19a16f2be06e2b5dd9e46befa93
+d2b861c4ec7feecb6ce058ecb9de88c975eb3dfeb4f23bfbc32d96f755ffa5db15ed56ff
+1188fecbeb4cddbf59cbaad00afe52f626fa85fea5ef83d98af2cf0cf3d28dddbf39d022
+ffafe04ad8f452fb1def4b98e89035ed50dc42cdfb80ffaf870fd4afdb71ffd006d893dd
+a574fe82b5f467fcc646dbb4e28108ff61f3b30ed8a54a8612e2b20cff79f5c5478dfb97
+10e46bdd8eed53affe5cbaff82d0fb79f825fece87c542f223e69f47ff0ca9fe24d3a33a
+abfe26f9a5d07ad986e06d9dffce75d888ed6afe86d87cc6f09f2493fa9f16f879fb83e6
+93d9b0cd5ee03bd81cd05ae528a5e4bb61fe59f786fca8c83797fe7bb6cb9ee37eddc224
+fac6a5d786fea061e559f1caf765fe16e5b583fb6ef142c7ed5ae027d2bf21afed93259f
+fcafcb93d378ed5bfec7f1d87bf9c787d9589cfed832ddc1a5f746ffc4a1df20d2ed40db
+51afed56c963ec1dffb479fe6ef7bf93c2f288d97ef6b6ed52d866dd0eef4dff03bde741
+aae219fb3ecbafe638faa946e0b5da36d1ed86e02bdb4df21b87fe9dbff579ff9ef57cca
+ff4793ec2ac8a5e961e17cf2cf01ed2dfe67beff39fbaf5ff207ffb61eebc624d89341a4
+e08af2bf3bea4ccbaffe9f0af795ff86f99fff70f6b8d950ea3cfa23febde08732a550ed
+38a7f22cfbb804bcf75afe2bccb68605fe76f8a76df692fe28d59fffb896f369e3c595d9
+18e054dc3ce550ff0bdc83fb9cf291fe87d891ccf360b8fe86f279b6e4089af279cdff63
+f872fe68b7ff51c59fffa9c0ee44d912afe549db35fcb668d8fb7ab5ff08d8b413fe51a5
+d988df8cf20ca5d87be1bf93e075cbf569abff7ef8b7ff2cd85285fac3a5ee1a87e1be79
+d960e406de51d812fe6af282ddace187419ff7b7ffd386fece6cdd7fd1ed69a3e67eed61
+d8f3bf95ec3ac1e10bcb6ae75fd908e544abd905fb3bafffa5fb79fe86cb9fe860d01ae0
+35c659e52dfc4f96facf12d84bc9ff84fbd24bda1eb7ed06c8afe810ceaded61cb2ee068
+b6ff93f986cb93ebbf12f0af1bc2df6ced50ffc29cbffa69ff3dcf5bc2ed64f617ff3dad
+fa5196d5f24be00add61edacffd99724ff78d5f930ffd038f2afcc7bf186e49ac727ffbe
+5e97f2b7d903db7024e5b617ff9ef75093ffce1fd893ff9e30de5ecb98ff7ab6fca4c0ff
+78f78fc6fd79f166c1e98833d0b912bef327affa93ff7ab7ff9ebcf6a9c0dc28a4ee88e5
+9f20de61baff80fc86d4a0e54197fe7af505fe91f388fbc634d851df02ff4da3d981ff9a
+f440fb95cd78f435ef1fe5bf96f8acfe29d288dd6ac5ed27d9ff1089d0a3fe7bd89d02c5
+35bfe093d95db6ca56acfb9543febe2efbb83de7a5cd06edc41dff61fb93eeffc364e05a
+cb09e5bd3ab2f45be00cc6fb7cff14db54edd747f21b93e0c150ed29afcd9cf95cbeed80
+f2a1e26afec732d84cc8f409d94ac91ced62febf43ff67f8adc2f52aa4e05aea32ff79fb
+c25ee093d96ddf47d80aa2f295fd7bed6dc6f360e53bdd79d388d91ee684dd92d8a848ed
+18d86bdb53febf9cfb6eceb65feac1fb34afee3bfeb3f686fc4cf40cfe88f39cdf11c9ed
+6bdb9fcb79fe87f46cfe55fab17ee8c53baf518ffa95f289ff7ad8fb78c0fe85f2ac4ae3
+aff1a5fb2686e494c4fa35a5fe76bbff43e222d8ff09d852ff46d6b779ed86e4af5de67b
+f293ff87e583f195c4d936ed4e93ddbf14f7afc693d81af1ba30fb4bc8a6fa7cffce55dc
+28d09cfbac30fe96c7a7fe04f75bffa1cd5dff75fbc49fff80f594efa745eb0baffe84f7
+a64386e6c877d989d25deaaed081e76cdd1fec84ffb788f819ff4ce00cd842db8bd47ae4
+c1459efbd6edba1dde3ed860ec9e12f19b33da52d2f89336d065c6afffb132ed5eb7dd12
+d0eb86d87cfeae72b2fa90c796ef06ff99f715fea0c0fb25e053d20cd851e104b0fe7bd0
+ff61facf9865ef51f6b06fe4a5d087ff1ec2ed3cabf783ff5ed91fe0b4cd0dfa5ac1ed81
+e0aa2bfab909ed32e261bccb3be003cff790c2e248d91ce0b5fe970eff50f220dc9b16ff
+bb3bce7afbc14ad633e459c6a5ee8bf87fffadf033da17feacf10d9440ffc179fea5f62f
+bfdd66e6ca88ff991cc1fe8bf909e958d1fe81cdfb86e59e4af70eefc32ef6ce3fe628fb
+61b4d93fb0d862ee39aad87ff8b5fe6ff7b6fb78c1e80ab5ed4088d9ff0bdf7accfa4dff
+13efb6e9965bbfe219cba5f091f685ff79ee86e634b2d045f1bf51ebb087d993f20efbb3
+86ff5dba37ff87f29fff58ef2bd9f486e57dff70fbc75aeda0ffb651a5f693fe7db5e96a
+d0ba45d8bf1f9dff86ec67d876e0c0af69e4a5cc21c7acfc47ffaa17ed42e0afd959db85
+d88df49d03e0a023f056ffc891dcaa5aedb761fe94d8a5c0ea6dcbfe7bde8accff5bdca5
+3d93d9a73293de27a3fb82caacfe2cb7c89dff23bedc86d9a54380feaff479fe62e807c8
+52d838d94adea0ff69fbaf79fed669febe4fff7dd856edc779d8fba5d826ca67bed57acc
+67bcd630c7b0e043a9f77cd906edc6e515d964cbfa01fe2cf39cfb6ccaea4bcfaff533fe
+86f6d8f90bf25eff6dee88d184f3bfa2fb6dff7af529ff4cde3bc7f74fffbf79d9af1dfb
+67ff9ed283dfac18f34dff20faaa2df147fa0198f115ffc5f21effc7f462ffd15de019ed
+64e558fb3baae1932bf765fec8e533d80fd09edd88fba0fe7df2a5fcbb10d8bf21ecc50e
+addc1ae5c926e98efea32de7981bed60fd94f305fa9cfeaf45fb9af506a3f0cf23e46afa
+953986ffa2ee2898dd86d874e015b2fa63bdfb0898d95bce1a
+ >
+ >>
+
+ /Magenta <<
+ /HalftoneType 3
+ /Width 167
+ /Height 167
+ /Thresholds <
+d8af40ed51ff24d350d812fe97dd67e0c16ce5c552fbd331feaf05ed5dd033f0a5ff79fa
+6ac0e62fd865df98c3d904e093d0a8bff303e49dc8a5fb5b95ffa86edd7ee2af1eff87e8
+b666df86d934cbfe7ffba126e8c19fff4ee53add9e1eed52afdd6ad879dfaf71fd99bafe
+9fdd7dd891d82fee9dfd1f96f012a2e028ed4393ebb6da4ae099ec6edd7ae65cfd19cbf2
+935ac3fe86fbcf27ddabfb70baff3bf81ccf63fb88dd7bf969ffba8fc3e586ed7be2c242
+adf505fbaf28f3ab0bb3e975da94c89fffba61e046da22b2d977ef9ffe0ff156a2f66df9
+31ff4587fec26cfe79daaed821e0c014f54afbc395f30dfec421f577fcaa4ad603edbb5f
+f819d8b893fe79cff97efeca39fca5f339fab816f247cb12aff337fe74f5af44c9b1ff7d
+d7fb63ce9fc1ff840294f2ab59bcfb41f9abc99eeeb64dd7faa04be11ab3f8875dc5ed14
+ccaac69fffa9bfea38b60be4c11dfa64b6fe38f9b269fbce88d986cbff5fd8fe68c1f73c
+ff4ce41fec86b8fb9ec4ff3bfcbf5aafe586febe42cc98dd72e5d2af4bf21cd23bfe6bf7
+88fe9fb7d387ed41cfaf75e09dbbd00fed8ae5b16bffd081dd70fb07c2ec2aade41696ed
+c40fbed985e5d080e08dfbd45ee0a8de17d0fa79e52eddaf48beff0cd952e3c7fd2acfff
+0cd29fc604ff44d87fff8815e0adc6f462d8bdfe3f9cfb88f35aee47e4289dfec7f2a579
+de95e017cea7c70ce7be27ff5df04ca2e280baed259de088f2accd93fe18cb60f285e09b
+1cf9c64ad823e7abff17c5fbb812ed97cba6ea93bfed51d028ee57ff08a9e06bd8f83cff
+4cfa95c0ff2ff8c33eacfd59f2a3d9608fffc75bd8f54d8cff9c49fe23a1ff60ef3487ff
+c454bffe9559d986f868fe93db70f47afbaf47aaeb7fbff366fe82da93f5bf27ddc2f666
+ff3391e5950ed9afe060d823dd93d879f4cd4c935eccfe3ef25aff6cf287ffa151ed95d7
+1ffad014f24997d8fec216d466fb57abf27dea12d54eebadd083ff94f279dd7ef2a54c93
+ff7ef82fff57fa06afd97be378da81c8f784ff25b7cd93ed79e457a4d97ade98ec0de5c0
+38febcf04398fb76a5e0c062e9c676c1ec3ccda5bfea9a0bed903cc3ff01edacc917ed39
+e4a5cb29f18dff61dd3eb0e421ed5ae666a4fb9540b5ed9ebff948ffcc85ff2ff784ff70
+fa06feb67cfad8ff21a5d889cb9edd2cd979d0fd7dd96febb261fea0c6ff864d80fba5db
+0dc1e03eddaefe6ff78aff3fed0ccf65fe38d056c1eed83cd962e0bf91d59fe536ffa6fb
+3bf3b72cdd5aed63e509afdb2afecc62f01ffe87d7b27ced951ad6afe004ccff20f9b22b
+f694fb6ab3fe0afa50b8f766fbb6e872d89e40f2b99dfbb821ea99d3bf14e588ed7bcbb8
+87ff2bc4e10ed5fe58cd06d971dfa559eb6ccba4ed45d0b987c23ded13a06dc7f660ff09
+f77ffb58f523b0e40afebf7ee0c13fe501f5bff1af44ff96f479ffb82b95deb608b9d97b
+de51e4c0a0fb88ff21b6f49cfbb51bf643ff86f1c10dcaa5d868fdafc79efba7ffc35bf3
+b511fa93d2b854fb2cff50c3f77aff80f3a860d979edd35ae103c4f286d879e5d07eddc6
+1fa4f35bfecf82ff66cd86f27aff5df886c3fb1aff4dfad96fb2fb51f3b67ce093f37ffe
+15c0fa24b6f30bc6a7e631d9f193d0b0e1eeac2fec7ae550d1b89cc5ec62c0f29f42fb2a
+93fc79afd99120e5c484d838b0d068facf47fe97f262fbb7ffaf29ed05d9b1e563cd09c7
+5bdd73e0c35eb891f487ff1ded974bfe14d44086ed9bd183eabf45ff84f1bf93d0a5e065
+dd2ed247c1ee91fe0ca4ffbe9bdf4ddb2efeaf23ff4193fed333e0be21e04ad906ff54da
+3be0afd836aed98bd89c11c1ed73abcd61ed2dff4de6c495ed79d0fe86db7afc81ffaf52
+fb28ff4d88fcbf9ed8bd93ed04fe47adff934edcc5aaf2ca51bfed44ceff6dd926f8c2fd
+04efbe86e378d932d8a01886f393c4f57b4a9df979ff81f393feab14fbd92bd250dbb56f
+d7f279e28ae9be1bf74cff389fe0ac18d94ae602f23cfebe93f99efe25d055bfdc8631f8
+6eff91edc161f1a2c2e46187ffb079faaeef78e7bfa3c4fb870efe9ff64ff238f5a8fe39
+d8ff20fa86db8bd8a531ff43d9ae38e553ed1ccb5df397c0e081dbd147dd12fb3aff69bc
+d88de018cdf879ff0c87e9a5ff7bfba55cec88eda1528deb9e3fff20f5a5fd5dedb3d960
+e848abfeb9ed31dca5e528d84acaea966ffe99fa7ec6fb02b6cb34fa61feca86df79c2fe
+6ff2c48ff9a5fe81d9a914ed60dd6cb4eb88e542fbc3a5d01ad84796e0b64bfa10f5bbd9
+0eed9531c5fc994cfa1b93edbe75e56bc998e177de64cbb779e0afc90ffb64f2be70b4f7
+6ad89fffbd9be4b611e942a5f70484ff66f178b2cea3f732fb60f2b437e59ac1fa35dd12
+d82ee0be08fb4cbfffd464e0c46dbacb52bfce89ff3afbc686df1cd87dfec145b0ff8cf0
+a359f5ce41e017f045a2e785ff9bb9d843abfb25b5e704d951fe2fc852b6d85df4c1a0ff
+0ac0f73fff96f179e55aee86f9afff14fb86d89fcc4c96fb6bd9fe9312dfc3abf0d944ff
+d023b6fe06afff28affb01f69446fea5c1df1cfbc8e504b8fb1fc94afb63ffd170fecb7a
+d9f3aae69bc0f41fe65add97bed96dfeb827df6ed786ee9df779fea6cc98e012a5fb1df2
+a9e583ff07f92ac2e09d0cff96f160e21087fbcd78dd01ffbe25b9ee7cd892ceff61d852
+f315ef93e070cef97fd38aed9dbee497ef1fff79e74ecbabe280d9ac12ceb624ffb0cb36
+e667caa6ed2dff7be9c13fd0b55abef661ff3784b7cb5d9efad861ecce7bbfef7ad95aed
+d06bf23d93eb994887fec77dea88f293d8379ef0ab21fe51bf17ca33fe5bd87efec110ff
+42aed681ef93ff5af6c364bfda48e52bff61f5c976dc58fe16f069e49eed855af7afd835
+a7faafc5eb9b21f75ad585d8fe68afff55f730bced1ee5aecd66ff06f2af30ed60fbaf40
+ff11fa85e093d030fb73f358fe2bcafb6df7d89406fda3c793ec52cfb95ff104f8a0ff1c
+f4d67fd989d1fe03f9acf15394fd8f4bfbd552e59effb824e481d9bc61ffb6ee9a51f53f
+e009da78f9c247bfdd93e0a2ed88da85e093ed2ba5e480c9f502ff50ce1ee0ac3aff1aaf
+f280d891d8af42ff86d094d88ed8b646affed03fed6afcd1883bff4fdebe86ed6dfa35af
+e507c0e19bdd7aa5fe935dfbbb9cd7bf64ff87d822c9e57ada68cc3bfb6cd987df1ecd99
+ed64bee13987f4d179f25aff08f784fea5c0da5ede86ec9146e526ee57a9db7ee02ac2e6
+10c1f29b1dfeb217c586faaeff0cfcd02dd816e0afd49fc1ff85ec1ade89ff79f92dfb42
+ff52f20cff61ccf76bfbaf5ae9bc90fab674fd96c7eb69c2fe51fa1ee594c1ed3af74ffb
+31ff94dd17b7d993c9b623e5c09fed66fed039e0abed79c6fa8849fe0bfbc43ac0dd29e6
+4ffe3bd9aae054ff88b7f648bafe9ec2f10cffa5b8fa79b7ff47aafec04b9fe025dcafe0
+6ad819e54393fcb33ac6b7faa6ff96c0f331ff61b4ff79b2da3adfba6cf288ed3ad84d9f
+e053a5f28af983ff25fa63b1cc51fe9bf20cd85acd6de099d2acc69ed8b646dd1bed9dd0
+63dd3dedcb05e079b7fa0dacdd87ef77fc02afd97de0a7cb68f379fa61ff02f859ff62f3
+0ad2b81aaeff9316c4ff53a2f2cc73d958f19ff96fff84db7ab6fa0fa0f36dec08cfa4e8
+17ed4fade0c451ed44dd02d298db15edafff66fac23e94fb9df27dffcd21f0a5ff09d052
+ca13e06dd888c8ed4bd0f867ff79f9d746e0a5ff93f4cc7af7c662dc35d05fdd93ed12fb
+a5c761afe686eeb9ffaf1cf84afb30f386ff8ed884fe29f79ffe7aaff45dfe40d39aed37
+ca4ebacfa5f227ffc106ecb922e6be91c2ea7edd93d983fe73f893f14bc1fb9a2bddbf1f
+b3eb93d279e010d0aced09f4ca6aedc635dc80fa8bff68b1d786f73793d880ffa0f86af2
+84fb73de2ed9b37cfecc20d54bddbe6ae079d866e085fe7bf79cfe4cf70793fb9a1eeda5
+cb0a95fec55eca10be2fed9702fbaffe7bf1b64bbbd97ee02effcf36fba8017ad9c193e3
+7cdebf05c4ed39da74e3c013c4e52cd6bba3f06dff7ab6ff9ef82dfe5dd863a2f981fe9f
+cf4af233add829f045cda5dd3fe45eb5e073d0f678fd87ff3df825ff90bdf64593d8af40
+ffb785fea5d85add32bef329ff98bffe1ce4c127c5e031d85ed088f2c017e45abcf479fe
+af30f795fe49f59fed2fe9b83db5d994cde53eddafc633e4aeec8620b6f78dfed972ffad
+d844a4e606fba5ff3cf75df1be7add6ac9ecf559fe36afff5e95fea153faa6ff4baefb93
+54ff68f91dc2dd2fcef315d86cde86e593edbf43db58df79fec597fb6dffc19ffb1dbeff
+9ec3fe0fee5ab6ea43d69bde69d8af38ec6bc9fe60f88ad422e54df019fe75c8fb7cdcaf
+5be578f5af7afc86b5fe9ef40dfe519eff8bf1a53ce1c483e5b60fc7afc51cb2d774dda5
+f01fff63bcf56bff83fa87ff42bff2d833de60afd03ae583f0c86ed886df70ca97d4b01e
+f796fe4da329db8bd0f114cbec76dfafc70ccf94d961f2cc9bd980ec57affb9660e252f2
+99c93bfa19ff93c4f72aebab0fd946e5b307e86df281cb2af26bd693ff09caa5f216aff0
+86fbc19cff29a4d91de59dfb7ad895cc92e0a603e847cdf209d9c53ae653ed12ca4eaeea
+92c9e945d80ed8ff9102fb5bffa3f337fb8eff4df90bfc79d884ed2aa6d908e055d86acb
+fd9262ff9ff321fbbf5aff1d94ff5bf629b9ee07fe87e95bd810e5c5ff85f965a5db983a
+f820fe82f46df123e6b439f50ffec593e504edafc0feaa09ffb57ed975e10cb0d45bf686
+ffa5cb65f693d932e068d986e239db7ae586fb6cbefe46d003e14eceaeed7bffc35dbff2
+31ff5bf73ff1c087fe6ba3ff6699ff86d9bbfa79ffd262dd33b9fb87f6b74ebfef93d726
+dc79d858e2bedc83cf8fe551fb9ec3fe7fce9cf125f6a313e8afc74fd6b56dec95cdabe1
+35edc39bfe54e0b445b9ff92f4ac724cd809c6fb54ffc1a7d25ce135dda5ffbe7ce08ad8
+a645ff75d785ff2789d1e86de0c148f49ffb6bff98ccb753ee20feb74dbbffb2fa03feaf
+f59efc51d81dc8e662db7eff95f36dfa11cc49a5ea01b3df83d696d879ffb523e0c13fed
+bf0eeea53d93dbaf38f97effa566e05c94fbd060df7aed61feafee8627a5f160ff2cccba
+18e045ed5ffe7ad374ddba5afb03f186ffc20ef745fb65cfb113e589d779faa4dd27d968
+cbefde8de9af26ed7ae16dedba9afbb74eca06fa51ff32f2bf9ff63ad95bccfa41bbf623
+feabcd30bded41e31bfbd181da71e3a0ed8654a6de9552c622afed8dffae34faa5ea57d8
+21e0bf93fdb0f686ff75c2f513fc2de54bd0f480faaf79fbd170feb6f51bed97c1e505f2
+ce1effc3299ff932ffc09cce0696fab6ff10e4c393f15aff86fab6da38e6afff50f9cc7a
+d967d838e0a2bde58cbafe7bf9ac2fffbf16f260fa81fd1ca53bf458ff86d7b60bf640ff
+16cd84fe92ed9fdc93ce86e01cc2ed93e57aacee66a2d888eb86ff7ccab27bf29331fe97
+f23bd812fcc7f43fd0ff79f9cc32d94df397ce10b0f57afcb538ec5bde2bd852e33ca5ed
+adc986fa9f52d915e3b92c9ed922e15ccb66fe26acd97bbeed79dcaded86d8a517f851ff
+d955e07dd89f47faaede71d8a51095f2c20598ec2da5ff90f59bfa85fe60d209ed2bdd51
+d0f269e59fcf93b8eb51c0fec79dd1b1e447fccb92db82f260e928d85ad324fc5cf76dff
+a84afb13fec70ed8ff5bf916dd51e505fed750baedc009c4ff7be5a42c90e0b115ebb864
+ff98e469d980fec63cddc086ff98d287f099f97dfed88b50ffb609edc394ff60f6c6ff62
+f894beffa3d586f34dfe32aff848fe10e04ff2c593ec75b1cb3bf762febe8503c1f327ed
+b8ff4c88fbd97cc0ed19e441cb1cd84af293fea1c886ff82b6ca4afe40ed09d099e578f7
+03fe3294f2a46afe51d0be9ec2f57bff86ebafdf06d983e8b886dd53a4f89538c679cca5
+f288d9659cfad848a7fa79afce47f8b6ff6cef88d842e5a902c1fe25f15093ffa319ed51
+d909ff4bc818cfb627bfe07aead162fe34a7dd934c8aecae4add01ea4bfbc693b8e66cd1
+93cbb67ffe6de539bfd91df38dc1e52eedc9fe53a2fe6ad580e1acc83caffc67d09ffe79
+ed7dddaf35d862ebb53ced04fb88d8a5c2fb62ff27b54fe081edc41bc0e728affb06ff3e
+a5e012f2c143a5fb60d221f3ca6aefd076e3b1ed9fff2bbefe3ceec31486ffd360e027ed
+be86d80bcc49fbadf27cd2f979b1e086caed61cffa79e37bedc0a5fb94ee5fdafe0ef646
+a8e081beef04d7f2c017c4fd85f791ddaf15ee5ac4ff07f35efbc136d0a8ff60fb86bcff
+15aeda943f89eacb86db33fb21f759ffd31fe07ed95cdfafff13f7c295ff18f8d46bdeaf
+f121ff569de07df2d8ffa0cd5efa93ff5fd5ed79e293d9fa69d0ad67ffcb7eef97fe9f34
+ffb026fe4bfa01da57e06ad0af76ffaded931feda0fb8eff61f593fea5c71b94fe28b7e9
+40bcfa0dafe02db5c736fbb626dd57e086ffaf71b3cb93ff1ef7d86cffb642fe9be53ad8
+53cf31fe9dbffb2887dfaced20e3a4f40ab8d39bed4ace9ffb71ffb6f4aa16e552ed9fd9
+79e0b963f497ff09f8c02fa5da80e357bee14f9afcc13895e484d2f537c5ad6abf23fbb7
+35e078d99f56f8b54fc52ebbfe34ddb71ed93be050bfd982e093c1dd80cf86fb96f40dfb
+b837df57caf8af4fc919d5b536de5de677ffd96aed62c4ff75d19efe83f688fea2ca69f2
+7bfec205ce42f9d828ed5ecbb13aaccc79e062d879eea5ff7df186e56ed5aaf69643d8b2
+69ff86e654fb2cafe47ef236d70bd95cd0f878ffbf6cc4f20d93edb346b6e25489fcca68
+ff27fb79cdaaed2692fec44af818afd8fe10dc79f086dda5c1f708ffc925dd86fe99ee79
+b1fb7af488ffc386f207fa4cf519afff31f0b636b9d97feccd7dfcbd40d8ff7ff653eec1
+9cf22dd8b037c8a5fb0faded2edd54d864d913e54effafd837aaf789f0bd65fbc0a2fe79
+defc21f3a1f90cfeb828afe05fd00aff3fdd5fccff79fac73ada72f18ac8fe01d864e7b6
+f979fd2f9cd8a806fb3ba5febf33ffa3fb79cef39d4cf086d29ff20dff79bad96ee0a8cc
+94ed4b87b5fad956e512fe508fe5b863fe9eed0fd84ae5cb03d84de2a117fbafe670bdd2
+9de25ad868e0a5ff4df71f9ce50ba4e79402e09bd96fff0faffb83f79ff24bcf99d96bfb
+93f405ffb9f17ed89d1afa87e64bdd159eea954ee508f2bf68b6d334c695ce68faca1dfc
+a5da7aea9ffe11bfe51b93ec9ed624e058a5f388ff9c47a5e087c6ff43f4c295c6db4ee5
+ca82dd15eeba24d8e602b6ed53afdd5dcafe59f50dff65fb78bcffcf3eafff9ed076edc6
+4496ecce46aef66dffbf64f188fe6bbded9355cda3ff37fc79f388fe12e86ed888c6ff6c
+d0fe79f2bf62fe29e584dcbf51e006db7bfe86f33be5c25daceb9546a7fe31edc05fd0b1
+ff74c7fe32d0ff84db9d49d9fa7fff6ce345edbf7ae864f542f2b725b1ed6a9fcffe5af7
+83ff94f9c04be023bff5d01ef166b7de70e25dff86fa9326f960d8a951ff6ba5fec733ff
+cb82faaf1ceaa5ca8fde24d7ee0295f51dc84aebbb29fdabf31d87bee07ed9af22fbaae0
+2ad3f940c4fe11f05edc93eb26cba7d093fb27edb044f2b751db30faa8d092c3f35afe93
+c4ff60d320df5affb519ffcb3adeb6e079d388f6a5fb2193f2a95cddaf1bed56cfffaf0e
+e650f0afff9f05ff97d88ccb85ff93fa3dd9f92fbce009cb4fd814ddb37afad85a91ff99
+e50ea5fe24f0b617b0efd07ae986fec596c0f25f93e09e20f13fe397d57aed53bff2ab60
+c1e884fb91f786ffaf79d969ffc5fa17fe36f49dd53f92f6b368afe474d87de0b50ac6b7
+fb3ef64dafdd7afea3c826ec88cf5ae014fb42acd820eb43afe087edc09dcd78edbe81f8
+86fd0cf74ee501dc6dedd739ccfb7de593c1f98630ed89c89fd81e84d0f452d92dfe0ed8
+4be05bcdb679ed65a7fe90f27cfe6befc44394febc3ad861fbca7dd78dd981e05abeff0c
+d83fe01ae43bccf677fabc86d86dff43fa15fea43cff99f955d367dc0ed843cdf105e3b4
+4293dd95d05ee984ffdbc40affd01eedacff44f89fff6094d982c7f15ed804e45eff72fa
+9aff7bf0bc94ff79f8c09ff117feaa36fb08f6a548dc20d86bd697cc80ff52c7b77cff9a
+0af149fb3899e0bfa5fe29f587fbda5ab4e474edafe574f0c1a5f303ff93c5dd61d828e0
+acd01affafeb04cdee84edbe32f750fe37f8a2fc3f9cf2affa72f592feb610d947d0fe03
+e7c5a9bfd977e0c386dd2be5b9ffaaef7ce29c66fbc579f2d258f186fec00dbc487eedbe
+86fa9a2abbcb87d841c0ed07ffb61bffa8f983d79fd80ede38afd34be706ccb668ff7ad8
+6dcbf186e07cd0fb6dffaff356ff28f1bf9ffe14f54ce1b0c6a4d1b1fe16f645cbaddd3e
+a5bff132c1fe9348bffb9517fd7ed8af45fc12f3b8ff993efbbb5bd880f78752ff1c9ee0
+93dd73edbe01d2afe38651c1dda75bd87dffb1ed62a5f3932aed509df761fb0daffe8d38
+9e5ac3fe22f9c13b95fe23b8ff01e53da0fad8affba452e762c0f26dfb17f3a7fb79dd68
+e19ecb3dbfe623f48eee7ec8f66dfec3a5ed3add26e593f950a5d85bfe2eafe0c43fa0e2
+8dd9ab36ed62df9ed86bf427ff60ed77d986eb72fb80c6ff138ffa9b18c5ff9f36dcc460
+e334f19ebfe09a4386edca74e79efa38aae0c1add8fd57f213afc986ff6ef41fceff9405
+ffcf26eca02f8ffcc34bbffb88ffcb30d894eac950d8f3d2ed2eaed85ce9afd96ee661a5
+d96accee8756e11fcfff2ed8fe57d999d584e720d0a5f347fd7def9664fe52c640fcb61b
+e4982dfd74f587fb5ed311beff1eedc395f00a93ecc115fa5dfecd83d887ee2afe93d880
+da04cd96ff63da0ae54dd9b7ec69ddafe06bcff96dffa0bbfe86ea5280fbaff80ca5f52f
+d489c1ff29f24a7fb4d092ffd840e95bdc88fba534d8ed4daffb6ad9b7dd18e29fdb7be0
+07a5ed80ff5b93f1be0883b7f672ffbe88ff18f79fc4fa86ffac1bc8ff8af2769ee09305
+b5ed35fe5cc797fe30afd86dde2bfbd986b4e9a5cd60ff50bbe08ad657d9c19ffface67e
+d9a142ff62bcfb70ffb677e01ea5f80eff51c97ae453f2b9fe5be024d488fe79f8955ec4
+ff3bf752f208baed2be74ed01bc2ffd822dd5fd6e554b5ff0be065d99ffedc05ee44c177
+fb9dd727ec4fc2f282bef879c1f33bfe79f75fff23f659c2fe46dd1bcffb289bffdf61ce
+b209ed33a5e0bf47ec28d849d5f89b34dc4cf8c95ef1c5ff79ceaced46df72ccff11f899
+d2bb08c3f217ff85dc88cbfb62f21bff9c04f253ca38fa64f5b97de5d04eda37cbf085c6
+eb6cddc096fbb717ffa33289f3aefb56f1a0d024c0fe02a5d886d793e05aafd479f593fb
+a53bb7f292ffb76cfec87aed94fbb619c491fabb98e6b51cf37bffbf93e460fe27b2e10a
+ace552cbbd93d3b76cb0e479d687f2af64c2e045acfe3ffad880d0fb5493ff7fdd79f294
+51e0c1a7eab10efdb68648b0f71094ffb6f45792edae38ff5baffb6fd956f326edaf0bcf
+b2dd79e4afce88ec95c1e001d6fa239ef2b1ed9926fbaf45ffb460e53bedcb71dcb5ecc7
+3f94dcb03eeda5e07bcef348ff26fd7af686ffb706db58d3f684ca4ac51dee9c35dd50d0
+40ea87f039ce52ff2bf9cc63d9ac44fe11d19ae652c8ff6dd296ea05ef40fec8f232fab6
+fe52e5a2ed6df91894e69052f2b979dcc20ceeaffe07c0ff6efb1582fe93d831fbcbe063
+e5d68502a3e2c34cbfe088edcf46e388d47ce06af893ff38a5f74cfe3cf724fe4cafff93
+58c5fe850e88ffd269dd9ad028faa5d288aff95afd1b84c1f80effc286ff35f563b5eb9e
+c7abdd1bd93ac8fb88e56dc608fe94f7af79cdf988fe7df5a0d662fe7add86d86baff005
+e597cba9ed66c3fb7fb9ee20fa87ffafdf861693d89c0aa7da36ff12b6caf3d828c7ffa1
+12fe3cf2a9cb36c7a4ed2cd0adf1d93be46dedbf198effbe43f1c8fa29fd86f669fa2184
+feb8f635fe9fd042e15fedc886d87be0bfa7d090dd6bedb6e43dbff9d84bbdfe03f789f1
+bf07ff4ef209e59dd8bced61d866e118bfd986e420c973fb4fbefe9aed8551f123ff97e9
+62db2ad8ff02b9e022d8b013fba9c0e80bf2a2fe39c3ff79fa5af638ffa518f2459ce0ae
+38d7559efab6ff4df6b9ed7ad072d6fd7a4da5fb9646e2be86e588fe6cf97de568b6f542
+88b9c8a1ff4b9be8c3369afba65193dcafd80ccca5c0e09e1194d8af04ffa5c2fbac27ff
+0dee9e49fb14f331fbc11887f0d460b8f3935ce0ab55d979ed94de81d8af4aff2ca4fe95
+f391fba955fa96ff5bef0be66dcb5faffeadcba4d837aefbb5ed61bfeda25bf26affca58
+e0299bfbb44cb8e084afd524e08ed880e0bf93c4ff6fcbfe7df4c230ec79e06fdc2bfe97
+f2a73bd9ffc061efd66af3cb50d924e094d84dfecd7ad8ff5bfa03cfaff571feafea23d9
+b7fe7b49ff9df35cff44f2b5ff71edc186da1881e793d8b76ffed996e47dd8a451d9ffa1
+2eff9d12e7cd7cffc239fead38c1ff5ffbc87beaca44d825d077e0c010dd79d894d892f2
+26f9d413de43fe7ff5dd863fa3fb8a49ffcf85e53a96f37bffcc6ad988ed12fb47edbf66
+fe07f354fd64e811dc59b8e50ada93d0af1eff94cb5cdd03c5f78920eab406b7fe279fff
+7ed358fc1cf0a510fb9e24e593ed61dc2cd754d986fe61ef13ebc384dd3ae5adda63d829
+df49f75cfbbfd83efa63f5c134c552b7ff60e0f69467cbea79d8faa63eee1cebb369d8f8
+9f23ed9312f6b67ae485ff5df73afea3c3fc2df841ff7ad8a176ef89ecc250ba15c2ffd8
+10d0e49618f9a5bfe00fd9b948f11fffc595d8b674ff9fb9d29ac82fd8affa7af628a5ff
+6bfc41f8ca62f084f990ff9f59defa6dd9ff79c7afe80bf6a3ec79cb61e0c052edafd340
+aafb87ff94f809e475d080e093fb1db7fe9301c1fb7cf9a5ca96e0308bff9dcaaf2ced93
+ff86ef1ec9b408cffd23b2f64283c7fc87d87bfbc51686e6d075dfabce4eff02efaae898
+d979f15289e0afcaa5e458ffbf4aff0e86f9d99de55093f7a93cfcb3c852ff80faa575fe
+86e5af5bfa2bf4ce0edd42f061f8a8ff4b99d889dfbe47edaae06abbe53bd81ed84dedce
+80aacb3f99ed32fa60dcb63ab9ff9afa81ffaf6df979ffc715df5bec7acba1f427ffaf45
+d3a5ec61c5ed9033e9bf5aff1daff2b84df112ffd55de002b0d199fe7afaaa5ae56dd9bb
+fe28afe04cdc32f2b8ff47b2fe32fa6cf18bdab741c60ab6e530bdf39a4dfe02c1f31ee5
+9ccdafe19431fd71f3cb66edc76de084dc27d75dedc334d8be3cec7dde9460f77efe86e0
+1bd978d0f235ff62fbd08823bfff11affe97f386fbad0fe52dfeb0f786d893d083edabde
+02d539d81fdfc206e8b767f3afd01fbfff3aaedb5dc9f76dfd2eaff74bffcfa00fef86d1
+fe6dcde57ad984b3f99fc0fb4ef23edd33ed87c3ff068ada9bf871ffa8e55f8ecbf36abe
+d698e41fd252fe93f8a6ff5ad0ff14cced78de81b1d062fa34f451ffc0afe027acfe20a0
+f609fe67f5affe06db9ef96cffa1cb51ffc2a6e72dc6abfe93ed01b6c6a2ec1396f4c679
+d99fee59d068e034c3fe93f17bd815e44cff1afb52fe88f484f296f363fea3cb28e29a47
+fca5f159b9fb86f39a08d894c0d979deb76dfbd569e0a543e80ba2fa61ed24cb42e475d8
+86e5c49dbefb43aff2d051eb16b7c90497fbc10c9fe01aff4aadfb93f378e030d882eca5
+6bdd80b7f63cff4beeb993dd7bd66ddd0689ffd85cc5e77bd29dea944ac0e461ed19b2d2
+03fdb123ed48d0a3e55ccd43c0ff86fa50cbafe057feb04ffb85d907ffbf9cf460bf47de
+62feafc87ae09cd826c95ad9b846b4d731ed7efa73ffca85d97be5cf16d840e6baff51f5
+0fff9e1de444acfe28f7c780febe39dfb6fd7aff93f629feb662ff17d693e061a5ff85d8
+f55bfad045edaffe7bed85bbd95cde28caaffe61f41ec5f748fe25d69fbed884fc05c1fe
+23f2a5fbc54a93f2a53aff53d91ccbf183b5fb93c2f47aee59e3be86fb6eff09fa7af6a0
+5ae421f187fe6dd803edc12ee578eda652e721b5dafa8aeea05df4b735f266f975ff19fb
+a5ff79f693dd39d9be0ef42efe449ef07affc260a5ed87e067cbfe89f3c592d97abaed53
+d0ff8f4ba5dd06cd61edc10beb80d971ef20fac130f24c93dfbd79ff87dd37d862caf508
+ff74beed0f9eda90e07eb6d89eed88fb11f731aee3995fe8b34680edafe50dfbd992f286
+fea73dff25cf51ff33e091d87ff3cb14db90edafd91debcf7bd961d831eab5fa74db97c4
+fd42ccfb79d1ff7d01cc39c0e609ffc691dda5eb93cd76dd0fe1ba49b6fea560e093d889
+c6ff61e0ab1cf9c62ed749eebd39d97f14f151ff0799e09316f1c2f769ed82e0a154d8af
+f83dfeabce78e793cbadff2c9fe921d55df7a5fd3c88e0c4a3f969fbcc38ff4dfa07ff67
+c75cade086c9ff4ef8ce86d8ffc12bfa61cabb65cf2dde60ecc779dd88e6a2cc64fa1bff
+3f98e9b650c63a93ffbb30fbafff80f59f4b93e55fff15afdc930ef29f41eb98ffaafb7b
+d99e59fe0ed03de05bed86d067ffa1f00ac7f979ff4bee04b6d831fb89da82fe90faa979
+f993ffcb78dc9fcdfb37f9afd8871ed7afff37f7aeff5e93df9f5affb949fe0ee564bffd
+6ad97cecc011d8afff9533e743d1b779edafc9a5ed93e41efdd139eb5793dca535fe1691
+e0a6d395ff36affe9dbcfb13affa43f3af0ff19ac1dd75b9fe6bf99ffeb2df5596efc50e
+a5e119d2ffc223f3bb87f750ffc880e0afc7f15bd825f24abce587ef7afe9ffa2efdb3ed
+22d85fe0983aedbb9dc0fa77ed95cbb752e56cd90bc7e623df4cb3fb2ef461b6c669ed3e
+ffbcfb4999d96ddc14ccf11fcbec03de99c4dc7ef1ce0af2b5fe2e9afa85f059c6fb7cb0
+f219ff9724e65acd3baff2bf75ff9ff5d11bebc36cbef451fb1ae479edd701ed4ccd9fe0
+86d87bfec05dff2faef0cf09d837e518f280fbc24686f3d876fbb83edfa5d047e197edb6
+62fb26fe6a15dc7fe093c9f62dd84dd9b416b9d8943da7f78bfb7dfeafcc15f862d2af4e
+fe0ff5d025f19dff9360f2c2a5e47ed786eb23fea5cb80dd5093d1f223fe86ed7abeff6b
+b6f686fb2ab3fe4396e0a54b93f4cc50e226b7ea04c0fe86dd5ac6f78afe7bfbd88643db
+b80ebe61ff79fba4ed7dda86cc4ff7b674e16bff8ef645ff07dd36d9a5d193fb489ff786
+dc7bcf6ad805e8affe9a39cd5295f67afb81ffc037d118e5a3d692e0ffa5f853ff1ca9fc
+91ff86f2a5f56dfebeda4ccb19d952e66cdd82ed26ffc783dd71b2ff5dd83bcefca042ff
+04f158ff94d85af20afb9fc2e910b4c8a5d72dfa46a5e035d055c0ed79caaffb3bffb8e4
+60a7ff7ecffa70ade03ad86deea645d819dfbe04fea8f069d8fb91c0df3fd804ff3cb8fe
+a1c626ff90dac022d1b679ed87fb6df61eeb63c7e15aebadff4df8a4ff6dda5be0adffbf
+ed0cc84dec07a5fe83f5c15aed38bcc53db5d287edc04fcc03e03bd851df07e977ff9ff1
+87cf30ffa5fb52de9d3bf2a5fb42bfe487ecb015bfdd87d89bcc10dd78e584d8b82ffa79
+ff80f45afbba98c3fb85f392ffa54bf916ed72d188d901edc71ddd9f44c2ff65f6a0fe0c
+cefd79f3a561e78ccf28ff964aed26a6f266e1c497e711ee87d956ed36aff27efcbf4acb
+98e352dd83ffaf12febd2e93edb63eb9d72bfa8bf22686d6a5ffb66ccfe66edaaf43fbab
+f867f293fe0ce562dc96f3bd6dfb7eff86cdaef226d661fe96f3b822b3d886e8afce1fc5
+ea8601fa62fe94f452f732fe64f6affe31afff68f096db50e03bd089e552ed08dd50d91c
+d5e585d892dd27f261febe81f279feafee18dbb729b4dd85bbe04ec8ffaf55f9b67ae5c3
+99fad881fe9f59fb75dc61fe7afac19ffe51e410efa5ff1bb0fea8c938ed96d274fad823
+e088ed85e5c007ccaffb5ae532d8f29c4ff921ff95cb05d09d1ed96fd883fe28fa60e79d
+c3ec1db7f85e96dc81ec01df78d891e50bff5af77aff5ba0fed8a9de2bd86fe0c17aafe8
+9250c0efd043e5c602c4f79fbeff0caeff87d37afe9ffa6cb0ff40f75bff7cd8ae3afb52
+d90ce073d88af182fa4bff309ffa9330f1d80deccb35fe09b953cb17edbe2ef3adce1ee0
+a60ae570d688d862e070f2d98b02e5b660ff40f1c265ff98fa13fe4d9fff7be978d988fa
+931dfec886d865de7afe5beaffa7f751f1bfa4cfb841ff2dafd4e537c5ff50faa5c959fa
+3efebef26dd519e092edbf35c44b86eeafff1b9ffbcf19d8fa9d1386f3ac78fe61b629ed
+74e3cb3ad966ebc030b8ed0fbcce9ec7a7e718e295c0e886d593ff39fb4dd599ed6ac1eb
+14d0e265a5ff9a5cf379d3ff93f6b279ffd88946ffb568ecc393f521ffaff929c6b740d0
+ff58f8cf81e0ac0ab4cb50afdc79c7ed62dd30ff16f14ac3e2b83bedaef331e5b0d887c7
+32b6e19543ee12feaace96ed6993fba40de0bf2cffacc1eb8548a2dd86fe58d007fd93f3
+affbc64696d2ea4088f3a83be4b4ffc529b9e193fcc295f94ba1f293fd1ea6f27ec3fb61
+f306fb48b9fe86f020a5fe2ff35ccf9fbee51dcaa9dc6effb97efbc542bfe08adcaf47e3
+33dec2259ad0ed79c9f54dff3fafdf9b39c99ffe87f769beed9327fbc168fed986f6d137
+eba51bf8add198c9bca1ff865cfebf0c9fff9027fb4af493fb04c4ff88d886e275f70bfe
+cb44d8f5ae6be563f21199dab5fe37edc29ef5b578d863e00d81d9fa68bbffd85bcaff7d
+d94992fad615d845e01cd7affe14e05fc9ff4ce338a5db81df79ed88d04cc3ffcd61dec2
+9aed0eff87f85ffc02f49c44ed21d986f81aff2fee86c0fe6af8aafc07b7f92f99d984cb
+fb6bd0fb7ae859d816e0a335c2dd9e1bf3b849e21f9ffe5ffbcf9353fe3ff755dc02eda8
+d973f1d878d2ef9ebe62de78b0d967e54bf219d855dd63afea8952c7fe93d888cdff2af1
+7fd0b126e245cbf821ff9dc1ffa426f19009b8fb9621ed6be7c1559aff7ef56ffe68e685
+d28cf7aa78d98dffd123feafcc1efa6af6a44393f2a850fb79b4d846aedf93d488e5c3ae
+fe61eeafd570c9a9fb01afd941ed5ce570d0aefe15f3a503ed55bedd0af275ff7cfbaff5
+79feaecc85ef79ffc683dfbd42d8f2b6e084eb79fb93d024fbb339f951c311ecff27c1fe
+36f89fc979fb88ffc093fa1dffd99916ee33fc55bce0aa08f689ff7cfb985fe7bd4df239
+e5bf58c5ed934be0c2a4f905feaff05be9c59ebbcb38fa50d928edb80af5539ce6943eff
+be99e010dcb5eb03ffbf24c5fe69f6cb2cff51d917ff5393e0a33afb93f552d09ee980d5
+86dbafff51ee7ad865e0ba7eff26a5fe92cc95d952e10ed84ce53cff0ed8a645f4078cff
+af7d0fa5fc20b5ca35e8be67e59acba8fe89b8d1a3e87bedad20ffb63eeda52df25fcfb6
+36f9ce7cde79f2904cfbd8b64ab9dc16edadcd79dd84d86df9a5fe33cef780fe40bbd386
+de1fdbb42eff08f3af7eed98ff5cccea93c7f261c9ef64e534afff83f96dd07ae09fed3c
+e4bb73e885f279ed86d9c107ffc25be50ddd79ff51fa12ff942bc4dd1ce4b6ff48f7ce92
+f0d24cdc32ed21d06fff96ed6dd89ce77bfbd46bedc4e426fec4ee67cefe88f87dffaf4b
+ff09e057dd3a5dfb0ad04ec2de84e4cb6adbb3c79ee57bedbd5affa5d51fc1ed943efea2
+f26ad556ff33fa13feb4ec03d861e0aa0eda69e079f148a5ffc062ed93e06aceff10d886
+dea54afb32b6ff14a1d87ffec961d82fe392fb55f487d1af06fe9fce20c7b2f637fab56d
+f29fbaff99f01fc7a4ed58bff361a5fb8f3794da9f34e577b6fb6bf7affd81f1c02faffd
+86f55dcb21afffa04f86b8d98d38d8b050dd61d90ef2c493ef7ffa93f3e082b5ff93f561
+fb08affe15fd4cf604ff4b95e4af41f7a8ff65cae86fdf0cff88d97be0afed883ea7fb8e
+f27cffbf9ff529ff99c4e4358dfdae42bffb31b8da59f925febe7bdd83d9aefb28f2a546
+f3b8fe5cd92ad8ac14fe5cf1c33efba6fe41a0dd7cedce26de46ce61c5aee06dcbabe37c
+febf4af1befb1dffc15dfe13c3e5a45ac1df429efada01d032baed88e030d9b4fccc48fa
+a7ff79f318ed87d76ce02fb9cf20d97819caed61dd2abad29ae686ed93d979e0a4c1fb0d
+f0c286e103d9a21ff9be97c3ec29fcc16196d9b7e04fcf25d64ded3badd8b511fb74f4d8
+0dd1f97bd8ad78f0a4c2e56ad0ff01f843cf5ce071d1e5951c9fe9aff779ffc098d8b57a
+e065d880e0bf12fe4c97fe88f47cfe2df74bfe25f53ed908ea9cd677cbb16bedb086f296
+2bd8ff078efed28861bfff8ff948fe96f761f10495e56ee009d3bc94c5fe41f8adfb70fe
+a5c0ffedac40fabfa4ff4bf238d856d027fbaf31dc82d46cfe2fbffa7cffafc832fb4ca5
+f39306c6ff24f96dfe9af586fb93c4fe51ed93d0be4d94f69e51ec03fec43aff1a95f52b
+b0ed9bbafe93c0ff0587fcb6f5860cc4ec4ae137fa22ff97f30bf957ff94cab1e75fd80f
+e4a5d882ec96d87effa2cd86ff0ef657f2d307e0c547bfec60c6afe7a51cf7acf05ab3d9
+9fc70dade47fd8ff28f6be99fb4bff2ea6e09115c1dd34e4499a64fe88cf14e080da79fa
+7cff9be084caf961ff29d993dd9f4ee637ed78da86e5b969dbabed55e59fcb16dd75dfb0
+19da86e06efa27ffb1e068c9ff8adc84f3b26dbfd979e064cb77df11ed468df4cb38d950
+d2ff9469d886ed6dbed733afea91d171e53ed91eefa5fcb939fbb605dd54e6c064fb3bc2
+e093d92ea5fe7af8a6ff89fb7df256caed4fd827e5c817e65dffce34fbbf69afd052dd73
+e3a1c1f552d2ff975ef687fbcce52cd998f75afc1ecda9c611f265ff52a5e493ee84fb5b
+f3cb93d888f75dfe19cdff36fa86d4b941edbd5aff33c9f75fff04c9a5d884ee1afea721
+e562d052e5c8fb4cfe9ff33bff58f6a5c6e2b85aee7bfeaf44bffb19ffc295f766fdca52
+da2af2affb79ffbf6bcc86e072c9ff88f2a617ed93dcab5ffa77ffc753d831d70cd93cdd
+1dfe6ebcff80faa551fb86f1be79de9d43c5ec84ff32f7b820da79ed9e43c6ec79d802af
+58b7ff65afea86b7ff46f088c0dd1fd3f410c652d01ae0a808ff51dd10cf93eb9f5ce1af
+1df58aff81faa5c0ec64a6e97bb7e54af237acd65aedc29bf725ff9f0893ecac0dbed893
+d4b766fe1f80ffacdd26ed9fe57edaaf47d907e5b67fff98fbc1018be0a54af823ff5af4
+9c4dd235fed97bf823ffbf13e9b683f399fe81f668ed87d385e01199de6bd0ec6ad9a124
+f388ffacf90ff25eafcc81fe8afb04d8b9f21cb6ff93f1fbc80befc632d4ed63e09ffe43
+aeedba77b5f7a0ffb77afebb70eba5fe79d842f4c880febf61e310d94ce00794fbd722cf
+fb67ff96c2ff8ada7dfb3eafdd79edb6df36d6f686fa1afb2eef93c4ec960fc3f862de0b
+f25afa92f1a6c640ed18e44c93eed036f2ca92db9fed15d9bef986b745cc5be479ed9fcc
+47e11add4beac09ac3fb51f4b5fbc53bfe09baff34cbfe51d817e062d99ac2e611ed45e4
+63b4ff618ffdca4ade753b9ddf5193ffa006f8b524cb80fb8d38ffd846d92bc6e938d8f9
+c23daff068ffb602dd4bd1ff7ccda4f37bfec34992f29c38ddaf17df50e908f260bffe87
+d72ffa67ff89c247b6e59cc0d936fb4cc0fb6eb5cf91ffa5cb2dd061ff86f99ed86bccfe
+63abff9b0ae97ad869b1fe8f11c5ed95feb9a5d841fd6cf888fb6fceb020ff2fadd99e41
+8ae3af86f27aa6e081b5eb7bd593febf2afb69ffa5d09dc6ed37c2e52a99f8afd8aaff7a
+f6d879e5c872da93ebbe02c5e29a6afd8bf25e9ff5912598ffd11ae0c186ef9cf89439be
+fb30afd83defb8ff53c0ec7acbfe86f879b9cea3e318ef5ce797cbba59dafe7dd05eff87
+b9d89fe084d931fc3dc667ee95feb71ee056d984edaf32bfdf5ac6fa52ff29facf41efab
+ff60e508f42ff186c2e027d9c0a5fe65f2c686e503ffb7f721edc14ac4f658fa08c1fe59
+f038a4e086d9bf51fa1eff5aadf46ed5e3860ef3e123ccb01afb41affe36fa4cffa7f251
+f9cb06e078ffd34cddb5ed6193fba42dfc54d823eaaef168c7ff6fe09f15d8a6fe10f746
+a2d82baffa39ff54d97fffaf46fe1af0a50ded42f2ab05e853f119ff5cf297d8aafb13dd
+59edcc79fc2eff0ff79ef319fb7eb7e296c7b886e079dd2cafd889ca93bdff02afff943c
+e406deb84efc93ee79d862dc79ff97e61bd892ed9f27e286cbff60f13a94e97bdc93c0dd
+08feb244ffcf6b93befa6ff1c297e868d19fdd6cd886dc2ea5eeafc812aefb81fe0bc9f3
+46e6bc79e485fe6ddb0ae1991ded87fecc67e384d98abae76df0cb86d881edafcc06c0e0
+8fd879fbc788d97acdf985fe79cfa6eaaf02fe4dd5a1bcf83face687c8a5dd6fd886d693
+ed25d06af550fb1dff80c4f24bff3ffb51d09ff24cbaf786fa9c79e0bd44b2dd32fe9fcb
+2ad861fb70ff43dcb973fbb001d2acfed80bf3ad31fb63edc17bebbe52fc2bdc4de4ba5e
+fe10b7ed16bff41efe63bffe8844eb99e532ce5be47ab8d968ffca35f2afc651ff7af6d0
+5bd92aabfa43ee31cdfb01ffbf58fe0ff6992cfba2f761f22be94eafff26fd3db0dd25be
+fa3a89e0c179e588eb27c79cff04b7f262bcfb4aff3cd961feb3ed03ddafd657bdfa69ce
+a5d89beb70de66c8ed61d83acbff18f5a2ff68f1bf13fba8f28cb8cea5e56bffc846ed98
+f82588b6fe50cfed83d8a94ef91895edc2f786ffa530e07aceff86f85999e0c3a1e45cd0
+ff81fa6fb6ed93bffb24aef50aa5dc9313faa3cbb63ca5ff7ff7c67cd895ff5da5dd9526
+e39dd96bcae576d938d085ffc193e06adec298f467aee37dc9ff43f7b72fff5bfb7bf167
+d1fa3aea22cba5c0ed79e6a54892ff9b65f29fe70baffe1bf726affb15feaf23ffa5ee6b
+b5d861e90fd6af7aeb5ce13fff05ed2fbef411acdb7edf66bfe558c5e278baf615ff93d0
+afff3da165d913d0fb93f5ad51e079cbff8b40f70ffbb920d83cccf41aff47d89dec83ce
+fb4effd079ed29fddcc105eab657ff0ce078c7f34db8fe62f43ffdbd52f295fe71dbaf3b
+fb13f4b650e408d1ff48f212afd87dedcb84d893d91be3b26ddc8bff79f507b5ff13c2f9
+d55be3c12ffb8bc5e26ced94c0db88d87fe596cf0dbefe28f99acb86fb37f8c093bccaa4
+d893fe55cf99fa2dfe4bcaff77fb2d97ff24a4d76de036de60cde5fea5ef874bd905edc5
+2bfbaa26f0ba7edba573f387feb068df9fd070ff54dd3b95edab5ede89d89662f18fce38
+e588f2b0f92487edd282de88d0b412ffac20bfed02e59ecfa9c982ff86f8be76b6d694f6
+5afe1da8e20aee72fec043fe9bcf58dd96e084cd88df2bb0f417fea8d04cff2ab8d350ff
+36f656f139dd78ea85cfaf5aed40e4c29fd049ff0bf465f95caedf83ec69d0a7f3af16ed
+9fc1f26ac4fe49f39ffe81f2ae01c843b6ffc86dfe619fdb83d0ea65d6ff56c7ec4bdec0
+03fdc42df8b506f192ffc11cbff925ff59f8bf44fea1f475dd984ad3aaff9f39fa1bafed
+77e05fc5e551a5fb87f360fe43eb22dca534d9fb61e72cd887c5f96bfca1cc3593ecc40d
+edb632fd53f331fa9fff68c4d97adf86ed7db0ed86e67fe079cd8afaa7fe49f53cfbd992
+ffb01ffe6cef9be583d630c2ee19ff40bdf20c92e786d54de004b1eb7ed8b80cb6d827fb
+8ee580e91ea6df91cbff4de60ab6fb33aee20796f8a06bedae5aed79e5c97ed85be587d9
+6be2a8c90edf86d923affb1bc0fe6bdb0bc1e07ac8ff30f8c193f17affcb6dd823d986d8
+7bfa60c3fe930ecb9fff6befa551ddb04af3afff60a5f980fec87cd991d8b943b3e4934a
+f63afd0ec0f943fe04caa1ff11d9b828b6d88ee072c005c674ed93d825da4fb6ff99fb74
+b5d693e479ffd85afca5f893fdd938f760fb93ee70e657be33fe96c2fa47f32ea9f293fe
+80c995f479fed82bd0ff3adb93bcfb42acfe2cfa9ef444fec378f39dfcb660edca68d8ed
+2dbfee86fc4bf5b662daad43fe0ad7b62ef55cffa0f70eeebf98e653edb0f342afdd04fe
+ca32ffd586d921e0bf47e41e9ef610ff67e585f105fbafcc94c9a5e06fd99bbef330aded
+53ff99f260ff1cb5fe95f7b753f586fe7efacd1cd94cc7f761fb21ccb33bb8c726cc42be
+87cdafe02cdd47ffc39ff7d8af5bed7cd888e0c01bd952e016ed4acbb664fbbe85e579ff
+1ed097db6ae0c617aedc9305ed4dd831d0ff954affaf79a7fb5aafd793cf05ee79fb91d0
+a0fa4cdd84e4c243bfe0a548fd18d86eda79fbc686e5759ced9413f756fb79f293d3afea
+51d0aded1cfeb7d961e01fff54f430ffc462e577fcd084df6de302d793c7e94dd82fe5d0
+16e03fc8b067eb7ce59e07edbea2ed65ddff86f37bffd85bff1a86fe9bceb31ee0860ff4
+bf3cff0afb68ee87b0f67bffc09fff1fedaf46f616cc9ef262fe0ef6b179bbfd6ff7bfa0
+ff7ffa9316d7f2c302f9d93bb9ff25f28affa5cb21e461ea79f2a5fe06affb5b8affcf77
+f2a3ff27e49d1dff4acffa5fc1e57ac7a8d72cfb61ff78befb5c9dd89050a5ff80ed98dd
+6ad8a418f240dbb85dfb20cbaffb7bed5aa0f37bff618affbfa5f303fea5f638feafca51
+ff2ff99f14d84fe0af09f298c1f1aa5af57afb6affd079e2abcea2c6b644fecd26dba539
+dd88d886e094c9abec4ebfe287edc03cffd855d429e83eafe064bde6a53686eabe6dcfed
+7dd8aa3ad94fecbe99ff16b7c726cf94dd7ce5c43393e2b03cc9b65ef1d08cf3a520b5ff
+3cb6fe10eda0c1e101b5f024cbff43f9c6f214d8bb41b6fb7cf7bc86fea10dedc398f344
+a5de2cffcd0de0adc0ed9b5ce488d9b647b9d887dd79e092d978c6f193fb77eda5ca63e0
+34d9bf04edb9da519efe19f755f234ffd99d5efa6ad0fc77f95af311ff60fe85faa534d8
+4c9ee89308f197fe86cbf211c8f456feb6fb9827ffad0ef661fbc378fe86f73fafd8fb63
+e15af23dff1cf6affa01d2fe68d8febd41e87ad9c0f067d0ec85de7bff5995f5cf80dda4
+6cedbf3493e67afea5ee07d14deacb6bd8ffaf4aff88c1fe65d879b9fd9645fa0ecbfb2a
+ff79f095ff10f248fd17f24bfeb65bda1fd03dfe4cf793ff6ffad1a33b93efdd62cb83dc
+95d89312bfe085ec04afe424c779d0a6dd30d801cdff7afbc35ffbcc7dd969e0ae5dfbb5
+2ad87ade5dc5e253dd9ac0df1ae4b50adf6aceef5094ed85ffc09ad5b471db7aed569ff3
+8f1194fac108ff4c93dd9e2afa4ece38bfdc8847fe3af7c30996fed04cf626e086d993ff
+9f23fa4c8ce083d310e637f2a7f73a87ecd06ddda551dd60d523d86fe383b5ce9cc5abd0
+05f79fff85db79dfae0db8ea4387ffb6f92888e8a5ff28fd51f9aff53bfec196f259b6ff
+9ef853c1f17be788b9e517f2b626b0ff41f619ff99d96dff88f60aaffe86f38cfe41a3ff
+7bf6c19cff2c91ffcc34d8ad13fa4defba2dff93c5e630deb5ed62a4e086c9fb0af2b0c7
+97fda5f822ffc2afe076d9afe15fb4d99fc768ff5bf038b9de93c6f534fab9f07bdac016
+dbbffa1aafff83f8b981f587fea9f93fc0f65bff3afa8aea6dcb38e7b0fa2ad6fd67c9ae
+e313d878d4fb07f05ed07bdf86e579d8a54bff86c3ed3fd80be26dafff46f9289cd983d5
+f866c3e08ad152e939cfa5e551c2e03dd013d869e9c95ad835ed4cabe2be0bb5fb6ee691
+c5e56afecc5ddd17a6f879ff38cdfe58f437afe07eff5ee506da5eed69e61694fe2cfb87
+f31dff79f2bd2ce082cefb5af109a9db9527a5fb4a9aff934ecaa1e140d820edd009e4c1
+32cba4df24e586db7ce02dff86f2c20f9aeb7cbeee21fe60f394ff4da0c891d99ced02cb
+49ff1cefafd82cdc92f472fe96fb22b8d76cc4fe61ff3997ed11a4f279fbc387ed20cb9f
+fc6cf77aff84f91faff08ffe81d0f478f9d968c2f14afd32a1d9069cf783fecf51d888dc
+af28bed09efe62d226d877f2b0cb93d4aaf2bf54e8a73ed7b856e501fba7c1fe13a5e87a
+ffcb50feb5e073cbed61d5f271fe66f38cfe66a6ff9d5cf36cff7afb9ed00cef56d8a4d9
+6193ffd153fb44a0d88cdec342bfe1fe52f61ffb6dff93db9ed083fa6cb5fd13ace0bf4a
+c6ed7ee0a2ed3ce5a5bfdd79b9fe2ed89e03ffb3fa64ed30d9a5ed46b7cc97ff43dd02d9
+af1dc8469ffe2298ddbfaff286fbbf3bedb779fc07fa65f295fb78ee17d986f793fe9f41
+ff10fa4c86ffd06ec9ff79fbca88d86ee94793ddc041d8b679e580f259ff1fb6fb07afd9
+2bddaec837e5c346bfde86d914d8ad46ffb68efe79f51afebf3ea5f188caff78f92fa7ed
+98227dd885e0acc64deb35f55ad907e9cb67d8fa3690f2a551fe0ff75db1cc06fb4effcd
+65de6fecbf8048a2dd88ffb81db2d8f256e488cfa5fa6dff95fcb0e57ad0ff8709fe61d8
+51e0a9ca22eaafc79de019d844d95ae5a7ed50dd1dc0ed80e59ac5e01fa4f70cb6ed2daf
+f83dff7dcdf762ff96f91ded3dd603d888e57ac7a5ff82f69d02ffb579fb94f61ffeaff1
+66e5c462f3c122ce96e05addb1e518ddaa03e05cbcff6bf7cef238ffb430f3a3bffc7ce5
+8afea445ffbe7ccfff17e5c09ad093c1ff7bf288eaa535edafff42f7d9b9fe14d34be086
+eb9308fec426f260bfed51e05ed80ff2a542edcb81e824ff6bf57fff9761f254afff85f7
+a5ffb935c5ff7cb6f96cd9ae2bfe61b9ed7add68cf9fe06adca5ee0cafe024d065c98aff
+86faa8ef3bdd4eed37d351c1e97df1cb0ed958e0bf4296fa02fcaf31e4a5ec44affb7af7
+84ff77f5c680edcb0ad957b8a5d979cdfe60d912b6ca28f252c1ee9929ea51abd986ff37
+fa4bee1cdc55d91fc1f8930bcab68628f18ee572f29cff5afbc067adfa82e513b3d826f7
+93fe65c7e4ab5cfa9ecb8ed80de147bce52efece3adfbf02cc62fb980fc1e02fd74affc0
+7af3d84bffb2fa45f416ffb028d29bfe55b5f59ffbb454ebc45cbffe89f87bb6fe93fa2e
+d647afed87ffa379edcb73d988edb879fa68ffc705d830cd4fd835b6fe3b9ef188ff19fc
+4aee0d96e581f068ffa5cf93e01db8f687fbc95ef16ad8a5e280d39dfebf95e24bd2fb5d
+d8fda7cd58affbc301bfda2ee09fed51ca9bff79fbc567d33aec9629f7d819df59f9a5fe
+86cef379d9bd7af65b9bed92e281f3affb66fe88f279e9b50593e49a2290e094d882c7fb
+5ef184c2ed3cd812e0c02f9cff22a2d813e5cd1de061bafb9fff62ce33d6f918a5ff54d8
+3affc912dcbb85ed9dfe8cf294fe86d0affb6cd893c9bbde86fac73bffafd847e40cff6f
+fbd457dd079ee024b6f50abfff34e0872ffb6dffaa7ae4993de50ff3d83096ee61a6f780
+ff0db6fe2bd2be389fe982db72ffb878bdff79ee2cc942dd9f1bffa50bed8bcafe48fa23
+d640e54ecbade00bd238fac7fe3ed2fdbf5afe62f33993e4ad32d988ff75f25dfeafdd83
+cff562ff569ff2c29bed78e01ed993fcb155c2e52aed7fdd9c5ef0a338f855d769e20bde
+62e51ddb4ce52df67410a0e65aa7dd9a1bfb93bbf39fc73486ffafc1fe7dfbcc88dd6ba9
+f079f6afc5df14c7f424ffbe7bffbb62ffcb7dfec23cd05bc1dd7aeb52f4afff17faa8f0
+01d0fb3ca5d495da7beb6bfdc658e0c161ff1ca8da6db7f190c7a5ed269cfc87e29f5385
+eabc78f0cc04d999dec019ffbefb05afd893cd7bf408ed4daae082bdfe8642ff0ec951f2
+6de707f298fe7aceaffe09f8d286fdcb72de25fba0c7a5fa54f67affaedd5cedd8ff34c1
+fe79f4c27aec61d240f1aded9447e42fd8a540ff5afbc74cd802ed4f8ff19854dd6bedd8
+4e93eda441e021d995f0a5fc44f6b1df6ad986d8b645bbe09355c2f30ffb50ffacf133b2
+ee80fa9fd0aff486fec652ff08f67affcf46d962ffc4f7a515e03baff67cff52fa98d84a
+93c7f448ff2ae66bd695fec733eecb09dfafcf95e7b686fa9fd26bdf39b9fb5b93ebbe4d
+e529b1ff91eeaf42ff29cbb796d2bf149efe86bf69b2ed04d340dfb52afe8dfa79e003d8
+f979f365f7ba79ed169af986fe9dc0ff60d0feafcb05a8fbcf1bd6fa86f46cff10e06dd8
+931ca4fb05f261fe87f631feafec7fd888e0bf03d089fb40d925e54cec36d815a4e494d8
+5bddb971f8afeb17b132d8fb7fff6cd8b625e586ed72f8db62a3e480daa5fb52dc198ffb
+af79f98dfc60f439ffc626dd47ffc187e40fdcc44393fec27bf210d861cef382d972ff06
+f35ffbcf3ee421fbd081f788fb6cffc859dd18cbb0fe6db6cb9cdc09e6ca87d1eb2ad8af
+44e927d9a51e83fa8bf239aefe73b6c74be5bb91c3f933ffb8ed7ed096e11fcc9bdd61d8
+20ff4cf831a1f55fe394cdafff7bd886ff69f7d33aef6efea712edc12c97f5cbee9451c8
+9fed33fec35ed30acab026ffce0ffac41ebfea7cf2c1d923e350d625da7dd8a55ffd8fed
+a51fefa9f577ffadf119a6da95e580fe1bbae44beda5d88be6b379f9acecaf45e05bd995
+ed08a5f7bfa2ff4497e720fe3db3ff9337fe62b0ff72f4c494f86afbb6e047dec485dd52
+eb09ffa8cb2cf24da2e078da4aff38f95cb7ff4baef27ae4a4cb93c2e580ffbf11fe4e99
+ed05e196cab588ff80cf2ac1fb9357fec6873d82feafed11d0b277ec9bfca5fe5af1b686
+e0699dfe9337ffb74786ffbaf56df1b5fe12f6cc80d85bcdfa9640cbb630e05dd1f93bff
+49caaced5e9afbc03bfb49c624f1be64c579f1aaff1ecd50d8e98639ed6adcc25af2bf91
+e078d5f29fe533c0e011dd79bbe53fef8cffb52dfebef693d879ed80fe96eabc0afb88cb
+a5d989c6e979dfc10cffb864fb17f051d926a9e668f2c76dfbc028ed47e00eb6fa99dd40
+e0add561ffdabf08d889ff65f8bf18f245dd6de1c24afd34f6bc46f1afd06ff9d894419f
+d9a54593e2bd3fe601feb671d7ff69f7d984fe9c79ed86b4f95693ffc20f86e993b9ff98
+d138ff0efebf2ba1e678ffb461fcd093f810fea5d061ee13fa4dbc1cc5fb58acff52fe0a
+c9a3d512cc68e59f167de043fb20d960d573ffce61ed19f556fe10a1f728fd96cd3fe8a9
+d69afe6ecafb82d8b21edcaf65fea5f962c3e644f287ff69f602f1b859f9a5fb44afd939
+e0a6d092bff51e96ec9fd87fcce45fdd06e5a512edb3fa04ffb8f75a9cff88f2c149ea15
+b0e225a9cf0be8c020c4dd02ead031dcafffc41df26de586df9badd651facd84f4c213e1
+a822e582d777eb2fffa0bece91ffd96eb5f27abfd989ed85ff73f394fc4cf3b7ff9dcd88
+e3a5f815dd3fabf49cd893e07aedcf6bd85aec87fabe5aff36c0eda349f133f9a5ff45ba
+d879cb9efc6bafce15bfd992e5a328e088d869ccf47cfe86fb61ff2e86b8ff79da5ffe16
+a9ff82fc62c8ff69e086d278eb2fc4dd6ad9319ef893fe85c2ff4ff2b568ffa1f569febe
+7afa6cf25ea5e057d801fe4df7dc69ebb95ddd359cfe7cc8ff5dd945fbc186d853fb67f1
+3baaed06c4e726a5fa5bd825dcb938b1e078d929ed5cfeb73bb3ed84fbc627dd51ff31ca
+b648ffb4f5ac2ed906ed84e0af08ffd892e079d886cef537ff01f133d8ff7aeba527fe4f
+d0fd74ee1ee59e19eb4fc905e59ec4f9d142ee01f389e6bf28cba1ed30b6ce32fe5cdf86
+b1fd18faa5bfdf7ad837dd5fb7d879fbc64be035d8ab43d8a0e02ecef977fea5ed7fcd86
+1afeb009ff92efbf51f237aff3b6e48a05f6afe529b6d99cf986fe944cf3ce39e59ef751
+fea1f908d193fa6cd804f287ff4acab67afe8def80affc86f19f088adebf7cff94cf6af3
+87ba5ac80cff4ff2149ce386eac187b91ff34dfbcc7bdd85b7c852ff79fab4c696eda9d3
+4bea10a5e093cba5d852f299fa43aff779fb9dbff227ffce67edc253f10bff59f494fb03
+e4af2ae692bffc72f393ff15afed930bd9b628b8d937f2e5be87ed75d81ffaa5cf97e087
+1c96ffa9d03e97ffcb0be052d861d0fb9977ffaf63bfd26de27fc6ff52aade86e756bfd2
+9be50ce858d004c0df1dd83ae5b7fe4cfbc85fe51ffc42d2fa97fda3c1e07ac6fe61d8ae
+4affdd98c4e070b8f437ff11f7a5bfd94ae42bff55f787ff6cb9fe76fa5aff2efb7adc67
+e4d286d81aed5093dbab0fd99739ff92e4a9cc6de67af151fec161fa0db2cb23ec87c1fb
+51c9fd83f499fb5aff9fc94fd932fba8e569d901fe4afbc7ec55dd71fed8855cf593ff22
+e5af1cc0ee17c6fe03edb523f19c36c1f51dffc495fe25f461ffc393fda5fa78f366ff70
+d97eed9f1af79fd892e7a522ec44ed28b6f93cafda22fba0c65cf93c93ff06abe896db60
+e12f9cfe82d87addaf33d9c3f23dd722d985e0a5c808ff970eff5ae5a6c3f76ec8fb79e5
+afd062c72aedbe18cba3d17fed96c8ed5cffa4d03ddf78d99e4be235d879e0af6b26ff93
+e2c448bfff88ed7bd8b26db9f825f1b714e8b0d36dc1ed7afe88e04fda87d8ac69ffce5c
+fbafe574d9af34ed79e088d8a849ed32d946e5c498c1ed1fd035dcb976f154ff7bc0dd83
+d873fe88d094fb55f27bec0cd981e6be5dedcb48d881f08dfcd00eecaefb0bc0fa931a9f
+df86ed61f7bf4decb66df0c0a4f3ba3cfe09e94aa3f356fe1df6a0fe4efa9bff29f7b119
+ff41a5e081f266fe9af626ffbfa9ff93ef06d2f9e97df2619fed963ddf2db6f410ff3ccd
+9fc75bfa9efe36f947acdd55f2aaff7bfa34f5c44696dd7dd80dfec068faa5cc4dfb12f9
+bf9ff76dffb115fb43acf993ff86fbcd39e0af0cf851ffa9e552d917ed6fe097d268fda5
+fe1bd3faa378fe6afb25c94daff5943fcda2e079edb7ff50fb99cfb41dfe88f8d040e02c
+cc63e084d795ffbb2dd886ebbf78d8b37ce062d96ce0c471bffb2fd91ae5c505c0e965f1
+14cb52c3fd955f8ed80ebcff18f8cf8cfecb52e0acee76fe80edaf2887dfc59ffb04b7cc
+2f93ec61df79e6b8f81bff58efa03cf2ba13ffbe9bda63e11cc8a5cd79bbd891de63d84d
+e10dabfe86c9ed79dac403bff77effa9cb09ff30deb849b2f0922ae0c012ecbca5ff87e0
+61c7ff6bf353ff3acf6bd8af0fff7be16dd824b0fe83fb93ff8ff25edd1ccbef72dba843
+ff0ceebe3bf4acfd38f09fde7cd187ffaf79fb58aed886dd88eca540c0ddfe56fbcb80d8
+ac5bf2679efb9362c0de08d840e2b8f39417eb79d4f782fbc20bd0afff108dc1ec85d18b
+e0adcf87dd5bec31aff183ff56f026dbff5df707ffafef6cc6ed5ed92eb7fe399cfb932b
+e4bf3ef289bff676ed94dc68bbff7df29fce53e502efaefb1cb0d924d786dc81f029f5c1
+4cee9ffc55ef79c2d94dde12c937fe80f97aafff05f9c988d965fecf8b0ec7b659fe04f7
+52efc350b9da94f332fe47fa1fffaff620a3edb33bf56bfec20cbee31dd6ff2ea5fa93ff
+82d85affc050ffb55cd941dea2fa439bd8fc31aed942fd20f952ff79f693c2fe3ed094de
+8afeaf35c79ce6bd2994fea525f699ff7dcbafe04bebd19959fba1e55aafd013ff35f8c9
+58d841ff86f99ad17f3bd893ee74fe9ff403feace279dea8cb04c2dd93ff15a7f67bb7ed
+9bbfd94de03ac1e59558f19ae5209fdbff72f7ce83d893e4a435f4d520ff73e092d097d8
+67e07ace2dc786e094db29eda5ff7eefa55fc5f279d060ef0de573dba5ca2ced99ff74ef
+67c1f26fb6ee65ffc57bd885df2eb5d001e27ad86bec06d776e688f346cb73f2d33edfbe
+77dc59ea19f685ffa561feafd821c2ff38f1b681e0a509f593deb62dd945f2befe67f845
+e5c25ab1e79357bfff35fa71f3a534e55bb8e86ad0fe48fa21a2f5b8fb8861fed22cfb74
+bcec46b5d826a9e64aff12d8fe9b63edafcc0ef260e47cf10cb8ffe779ff03ef53d264d8
+39dd4bfdb8e64dd920fba2cbaffd25fa63f4af11bfe12bb5fe24e54bcdbe06a0e75cf39c
+c1fb6cff9ff321ffb7fb5ef810d6a3fb86fe5ba7f881ffc712fb93de66d81ec7f20fed79
+fa6b9dd979fec74dfbcf62ed1ffcaac0ff8728db9bccb78a17fbc631d8f8169cd892e052
+feba81fad83dff029fd881d0ed880d9ddec318b1e052cbf984fb7cf294ff68edc188b848
+c1ff935be6a5c1fa2fffc3a0dd4f98d85dcfa7fe88f67bfbc298d20594ff86e4c133ec4b
+9ae08dd981d6fd5ca7fbcc7cdc94ff86f4adfa37feaf0be544edc652afdc934aabd984b8
+ee2cafe014dbc002e84f9eed86d04afea4ef6db7ce93e049d4f705e5429eee79a9ff88d5
+7af05a94e7cb5cff08d9f3a7d477ff60c5afed64ff1cd774eac72a9eed86c6f169e5aa5a
+ffb3f33dffa5f780ffa936d803e14ccb18d4af33fbd984e107cbf73afe4a9fdb9357fb6e
+f51bfbbaf745bfdd17e1af24e877f4c13af7b26bff7df7be56ee1aff4496d8ed8801eb55
+d016d83fdb71d889c7f182d8951ac0fe67f2c6f438fec869ffce64ed7aff96ccaffc2ed8
+6df1b938b4fb4cff33c1fe88b6cc86f9d81ce8c531dd4fe20bc7fb14a6edb6e5823afa4d
+edafdd87fe43c87fed9ef70d96ffce5fe0aa43fe14fbca27e462d879e15ada14c5f395ff
+86b6fe9afa79f0b024f29efab686de81bfed09c6e638b6cbeda53790eb9c6affbf5ffa90
+ff4de0a8cd16e7b7dc02d1ff7acfa5c0f08632c6ff95f68cfa7afe96f01be448a5ff59fc
+aee034d8a10e8ee0a523e09741f9a0d04bed37dd61e4b5ff05d99be580dd87f3a51aef52
+ffaf5dbeff8d57fbb0f686ffa562d9f97e31a0ffc0afe0950cf72cd993fbb639dc61d0f1
+76b4fb24f4ba8ada7ab6d88ffea7ee2fce98ed9351dd3cc8ed61d841bfdb67febe41d053
+ff14d8ff69b9fc79c1fe8260d8ffc20bfbc53d93f2c635bfd986f17afe9f4993fe9f36b4
+f564fb09dcfea45ad929e050e9c227afff7bf9cb15d97bea73fb5af6c4ff51d0fd7df1b1
+c51efbbb93ff7cf2a2448ceb86fe2cd107e754bfd981dc14c6f42f95deafd1189ed93beb
+d0953fc2fed058eb1e86fec19ed067f206d1fa8effa84ee00fc0db79ffc753eb36f24bc6
+03b6fa86fe61d0fc79f7af11b7f586ff06acd77dec8bdd7beab427aff22eafed11e0fd26
+87e2af6eedade007a5ed9e11fb30d85af3c7ee46d9c3ec20df93c8b63fd2f27dffa5cab4
+6aedd252ddbb66ed97f72cccafe08643a7e99353dd09ff87d974e026d4b60afebef8b047
+bbf268fec396ff41faaaed77d8acfd03f369fecb6cf2b425ffafed8c0ede93fdce44ef5b
+ffa9bfe58654cb21bff98bfe9952e530a5f785ff9dbefb93e549d80cddaf1ebed37bffce
+2bec94c5e54bf317fe32f6c26efad27ad8ff65d0ab94caf248fece27fa75ffd750fec568
+eb84ddaf26be84fb895afeb951ff7bf7af18cbbe46f70ffebe82fba430feaf3ec7a5ff08
+95feb6fa16bef7adcc6ce555f19dfb69f7c961d922e0a5d87ddbac28ed6de0995ec1ff3e
+e561d885e0b847fec27af481dd55cbfb7bf163a5d97fe018ed4e96ffaff486ea37d843f2
+ca7deed406dfc11ff061d97affa5f56eff9df028e55093dfad5af970ffa5c995d4af4eed
+a056e59a46bef93ff3679fd984b6d951cbb686dc7ae1a5c0ff07f890ffce0be1adcb79e5
+24d84ee09efb68e881d89a43f20ac1e086d0ff79da6bedcf27d960d2ed8744fbb727feaf
+0ebfeb3faeed93ff83f511ff4cf687c8fb0dd1fb25a7d07bf795ff22a0e79305e05ad616
+feb466d92ec7f920ffa4cb7cfed814d941dfafff6ad9af1bfbb47ffe9f67dd94d019edbf
+34c4e33dd861fea4c0fa6bfec31cbbcf2ce360fb79ff1dc4fb02f7a8e87ad805beff1cf7
+5fff96f51efe42f329fb4798d86ee44ea5ed6dff14fa9ff293fe87ed34d8a0ff36f5afce
+8bff4df5029ef122fabf64e57ef29b2fffd77befca62d8ff85cb97ff18d658cd73e4c293
+d8b759b3ea79afed6af2b52ae053cdfa30bbf799ff8ef0c041f7abffb05eecba3bfab734
+b3f57afe9c03c4ef81fe9fcc4ae139cdfa40ff5afba551fe79b3f282dbaf44ed09d73fe0
+9ee879fb9ded0dd8be94d987dd74cf21ffb3fad558e0a6ea10d569eba0cdb993d2afed39
+fe95d8f92cd199de75d85bd010d96eb6f804bfe27ada60eda9d970ecc962e0b03bffa5fb
+3ec0e2a106dd4da5f6934ee52ddc6fe086fa35fe9f3efb19ffd927c4ff3ad8b708fbd680
+eebf7aedcf52d833e05197e6c40186e59aca84e079d3ee6dc1e04bd0fb9328dd58e672ff
+b7f371b3e588d86dcae792de0ac2fb1af8cc90ff72f288ff57f1b144c6b6f237e561ff4f
+b2fe93c8529c7aefb543c189f2abc661fb05f664ff7be0af13bf81bdf241c2f42eff96f6
+4cffc884df9554fb1efec02a93feac42fbc186edb60fc788ff6dc9f986ffc615edcf7cf3
+a1fa4aefa5da6adfc0afec6297f5719fe083ffcb945afeaf0fff4ba4fe83faa8bfff2993
+f3d745ff10f355fb08a2fe2489f0b75fe3bfa5fa12d99524a5e00fc3f62df1af14f862ff
+529ee59459dd7fd8b420b7d801dc93ff865afe9fef12c0f22eec6bddfecc2bfe86fbd04b
+ff24e580dc9be51dd054f5c7fb49fe88e763afcc80ed67e4af27fe61f2c3a8e0b15bfac5
+13e4d39c16fe52da93e7b71fed4fb6ec3493fcaa39feb401c5afc629b6f909f35193cee5
+43bef913f24c88edc632df9ac9b1dd1ce3c10af279d2fd50beed87d8a5d892e9be61d8ff
+a52ef785ff4ec1ee5cf7bbfe85fb6aa8e084ff9cccb686edba6ac7fe29f63afba2f478fe
+63ea16deacd06cc9a8e079d9b6f816af67d997e634a3e07ed859ffc152acfa8ddd9f3e93
+d9b21bb8ff03f9bd37ceba78eba4d41bff4088f79bd879f15787f4d87be56cf343fcd986
+fe79ceafe071d9c05bed8efd6dff95e17fd48ad8ff04abfecc67dd9fc1fe1da5f260f837
+fb5ef3679fda88e560a5dc9b34fb51f929ff4acff79653cceb67d60cdd79b5d288eb51da
+40bdff09d44ddc31f3d31fd8ff05b6eda5cf87dd4be0c5a5befb8ef424f93dfb5afea54c
+8ce545bcf40ec8affe0af893f1af34fdce6bef2dffb6f16de5a2ed7add6ae0a5fe0afbc1
+39eeb57ce6d007ea3bfea5bfff38b6cb2affa4d866afd038e50df354fa22ff86d8b842e6
+15f154ff65fb32bf7fef8724fcb933e061ceff86d879db86d893c9fe4cfb1ebaea12fece
+93df7cc79fe4861ec1e514bbfd93f29cfb32ff01aed88feecb5ed995ef7dfc5a99fb4ca4
+f27cc95dfe0fc3ff9a22ed51cd41c2e485d993d308f1b7ffc4fbd686ff77ee7bddb741ca
+87edb717dd84d860e00dff4dfb32c69cfe24f284d99e5aff6bcbfa53abff7db7cc25dc92
+de7ffb99c504fabd16f59dbaff8dc8a5e89be41cf4cb81d99ed021edc39cf7d84ee0afd7
+77ef96f6b648e502fea5f512ff34b5ed9dc2ff6ff2b676f405b6ed39b1feadfa84f2a43c
+e05acf6ce09ec2fb33ff1ba2f977fe27e4a5c5ea77c1d963e032e883f1af3bbff988ff97
+f77cb3ff1aed7adc71e027849a30e550d93bd861ffa4f70fc469ff50f5a5fb8fc9a7d393
+d9f740afd857e543f6d680e01098f1c746d8f26be567f30aee59e977e079cbff60ed4ad4
+30f167ce51befb5aacfe66f986dda54ae51eb6ff92f453ffac07d87bee8ed1bc42c2ed85
+e476cf27e048afcb2be060c6ff79fbd05ad93bdc68ffc979fe19f6af43f260e579b8e336
+eb93d0be40ff0fb0fe22f796fcafd950e593da76d832d808e04bb9ce9eff43f99fbfe2f5
+c77df289fe9ded2ce065d4fb94c0e2b201c138ed57f912ba87c1ef79ff97c9b721edadfe
+d92d93fb9e0ffaa2ff4fc5aed132fea5f24496d87dfea4d993ff05fb79cf88e00fd734ed
+61febe83fe7ac911a6e93bcbfb56ff23affc63e56eafd85cfb92ff7bf9d865ff86f8a851
+dc9a0df38cff98d807b9e795d884edca7ed891cafe5ad8af17fb60f190bfe081ddad49d1
+179fff6cf60afe5ef26ffea4fa63f532c6abcd15fe5d06b0ff20d2b302acd88afeaf45ed
+2280fe93d9ff83e07ccdff61fb1addaa15fa86fe9344bd86c0e372dfb2c634cea5fb6cff
+9ec720d4afea28e1c21af94daedeb6f020ffb8f279ffafca0bf2cf43ed60fbd086de6bbf
+e581c5e13bf29eff2cfabf04ea42d0b609edacd91aedca31e8c062cb1be55ceda831fa51
+ff25a5ff11fa47a5f17cffc29db7d866ed2df261cbff7ef9c027cfafe086cb95e5af2ec1
+e387dd82fc67ed93d8a3e070dc5df6c5ff52f216db9ec5fad83ded61afd028f4ae33d893
+e951cbec69d95be5c6f751ff19f454ff81ed89d91fe052f186f85bfe86fbb359ec78c4ed
+8639a2dd9349a5e39a3ee8b959afdf93d8af47fe1cf79536bef968b8cf0fcbb554f1a7c7
+9cf581fe9646befd5b9fff7bf9a5febc7cfb8af8cb79dd87bee26ded9ac0dc05cf51f33a
+f707fe93d09ffb02bcea6bee99fe42a5ed1dff48cff29302fe53eb1fd8b03dfbf043fb9b
+ea8635d985bfe571f35d8db6cca0f71dfbb766e097fe5daffe81b6ff37f4b401a5e588d8
+a5cb25dd5bfe79f7a9cd11e171d9b601c68effbc9dfe2bbefed46df7b5fe22c8fb6df69f
+fb16ff30f098c1db79ecabed18aefe89f07dfed27ae05bee2fdd51c4e87bcdafe164d825
+de44edaf25db4ab4f00acdf443d9af2ff386fe96e584d979e1c14fff3dabe49339dd58d9
+79c7fb7ad68bdd9f56ffd9a6ca97f679ffc160cfa9c716aefcbf97fa3bb5ff2bbffd0eff
+59bfe07ac8ff49f105c4da3af308cb9fd36dffd03bfb62f985f09ad804e1bf6ced98bfff
+39f6a7ed3fd00ce05cccf28c46eb08d86bdb86bddd2cd885cf7be088fa60b6ff0ad888ff
+d839dd50d924a1f71dd86cfec1a0fa1fff41f30bfb86f193d879febf82ff88c1fe6194fb
+66d0ff6de04bd82bedafff45aeda80edc963fecb86ff09f4b724de53fa11eec37fbb4ef2
+2cade00de98723f75affd04ce024c3ea83d0a5ec53e486f23a9df008a4ddbfa5f673e4a5
+d886fb22edbd7add95ce0ce064ff86edaf33ff4dfa2ea5dd81d869fb78f594faaf13dfc0
+a9ff96f351ff04aaff5ef23df9bf05c5e728cc9efb5ab793f479ff87f3c64dff88e5ab13
+d970df93d883ddb2cc4dff0fe54ccdf313e442a5ebb71ee5a10ac69ef96affa41dcb99fb
+22f8ba14f4b02bf2be9fd84fff87edb1d186fb29d8fa7dd3fe6acb95ffe47cedbb81f493
+ffa54cfb06f77dd995d879cfff67d4fa8650ec2dffc062f042afda934afe1ff25dfea0d0
+2ec74bfa8cc3df78d1f360fe1ce593ddc03bd86bff82f75ecb41c0e07bcded7dd695e458
+abfe9f51fd65ef40c2e625cbbc0dd6b66de5afc73cf886ffbe35f661ff9830eaa5c6b687
+f765a4d975fbcf2affc782feaff136afdd80c7fa70ee62e5a052d986e095d055fb87e66e
+d8a542ff35aee09a0ae6af3fbef930af6ad9a03be70cd978eecb6ed860ce34fe13fbad2e
+e7963fc2ff8dd89b1cfb93bfff6df8c39ee07cd9af3ef7a7fc93bdd91aaffe9307c8a0ce
+5af02786fda0ed51d825e591fba52dfa9f49f50efd8ac3dd6fedd087d983b0f779fe81fb
+a4f83cff9f06ed95d3b65be89db8ed17bffc7ef46afbd026e0b83eefbb7add9757ef30d8
+5bfccb0ff254bddf09d87acdff73fa5bfe0eedaf2fc1f704fec39dbff56bffb965ff93dd
+5aedd1fa06ffce6cfe5dd51aaff193ff85f2a7dd6cedc978fcb0ee17db79f2afd74ce90d
+e331ed5abfff2cedc179e514f160ff86eb3fd9b2ef45ffbc9ffed8b404b9e4b1fe64d918
+ecd16de5c587d9b624ff39f71ba8e530ffca0dd851de32ec66e086cdfc77f428fbce02fe
+51caa5e047d507d93da2ff7afed39018ff4cf7d18bdf7aecbf88e894fe3aa5ffaffb32b6
+ed20c7afe069d4ffa45be47bf25feb15d847efcc1cf176fda54a95edb67add88b6f987fe
+42dd1de2c045c5f8249fdb0cd876e55bfe35e160fea3d190c8a8fb05afd883feb65addae
+d745cf9ef77afe69e488f311c549f67bff8731a0f17bffb586fe1ca8ff36eea5d0b89bc0
+ff79f3ba62e38ef2abd096c719fa59b4d852e079aff27bd986fe6cf787ff93f2bf57ed01
+9bfac39fe5b304ff46fab621ff5dd979cff28848c5e585d4a2f2429df68f1aedcb93d821
+de92fe80e56eb2da9ac912e2c139c651fb1ff3ca30e19fc7a5fb529bff935fc0e57dfe54
+f9aecfa0ca80f2c42ffa61ff78cd95f74ef30ad2ff9325f6a5fb0dc1df25d8ad33d984ec
+a5c0e050d5f8c111cebe3cf25ccaed65d879fb6ded5bdf47d914a0fa3bffc101fe4af2bd
+99ed22ffa5c3fe43c0e322eb38ceafde52d81de086cbaee450f237c069f2bd9fca79dd85
+d528ed9e18c1ea9613fe4be687ffd830c9faae37fb6aff79cf3ec7a8fb3af752ffbc83fe
+86e5a5c1ec9c56ffbe0aed74d0afed03dfafff4ff1b1df873af303e6be1194edafe014dc
+44e46dcf91e39f43f2c969e07aed62b0f977ffc299fb57ff2893fba94be59bfa7ade90d9
+af40f998e54bdc07fe93f986c8eb7fd8a56ae685d86aff77d3b764f10f93ed9e61fbc195
+f1119fed7afda5f92cff6dd881d7fe93d861ed15fe4ff6b8fa68ffaff75affbf66f5b807
+c05ffcb64edf8fbfec4ab8f69aff1fd788bfd88ae928d8ff15f64a84dfacd079f75afe2e
+d964fa86ed18a9cb3197ffc193ff6ffaadff8651c2f385fbb8ff31ef7ac6eb6bb9fe39cb
+95ff52bfed08e542afdd8bd1e919cbff85d85bed29fb02ffa1cb10c1ff8fcd7bd727edb7
+4bfb23f0bf43fba5e512dd46fbc98de4be30ffd8af48ff60c0fe35b7c743d888c1ed0ffb
+ac20ed3bff93d8afe19b04a8dc4de02cd877e0a5cb79d9ee93ce81f472ff14cca6db07e0
+86f1a5fe03f443adf2b3a2d993d6ff11fb38d995e082bdfe89c83db7d5fb5ff5d81ee062
+d1b427de49d8f9a139d89c1ba6de60ff25b6fd02d9a1fa21c4e82e95da80f4cd15f14cae
+f3953aee0dffa5c79ee177de83feab2ef361f697ff69a9e093d27ffeafca2eb9fa9bec87
+34fe4fd0f58c09ee86d3a5e070d0f367ff95f54aafde52e986c7a6ce27f94287eeb6fe7e
+cd87fd9ff305fb31ff9e48fe10e529dab8f163fe84fabe52c536b6dd79ccfb7b4dee64fe
+33b7c995f260ff27b5eb0fb0f697fe2d88d9af71fb9eef44eac369f5b61fd0ff58f2b6f9
+81d892dd81d8af76ed80e1a564fcb85affaa61fe76c9fc5fdac26abad042ea4cc2f735f2
+51d9bf9ee118d840cbf709ff51db11e07aed86cb5aadf7d67deaa462e0c497fc1bf72ffa
+b104e5ad17d89efe78d096ff5af377e6a3c3ff2dd745f210edc441b8d093dd69e1bfa5d6
+affe943b9fd825e2469ffcd881ed5effa40ee5b728cb7de488ed43afe486d2f44fc4dd5a
+d86deac1ff0ab9ce58a9f87ffe9fcd79fe6196e07ed853ec0ffb51f23cccff17d84cfed0
+7df3d61dc7e587d99f2de379fea4f579fb93ff64afd089e576ed42c0fe86f2ba82dd9eee
+88f759ff41f51effc106afdb1cfeb83bff4ebfe181d9c488fe81cbfb5fef26b7f91cafe0
+06fdc168e085da93e494d8a56cff87ef45aff319f83efb5286e9b5fd7af86ac3ed8a14ff
+97d922e0c28eff98fab559f86bfecc06f9bf67aaff79f216ffb14495e0fa2affbf14d13e
+e208edabe7bc06fe30fc9dc5abe597fa67bef486efbe05e347a1ed933df90cffb886f206
+e033ddac15d9bd1efeb609ff92fba65ee0a331fd53cf2ec7a5d592d9a1d881dd95ff68f2
+75cfed81dda55bf29b51ed61dc3bbce07ac7e665caf17dd9ae49fe0df35afb7aff36f8bd
+1ee55fffca7cd885e099c4f201d844debfa5ff2dcbeab549b9f178fb3cd1dd01e9c619db
+be7bde9f21fcd83ae09abcce7bf8c44d87d979e593feb892ffbf3588f7c96dddaf64ff4c
+cb13a9e42bb1e03895fb86c9ff6ffbbfa6ed6beac451d394ff59ccf36efad86aefc661d8
+23e9c203fbd179e887fa62fe21f35ffc66ee27e54accafe213a6f829fbc20effba21f793
+fea00cffa441feab33fb4ced97d6bf74cd1bc762de50edd080d99b28fb4cffc125d978ff
+adee960ef259d9ab61f893fb2fcf9eec5c86fe6aa5ff9f2ef151ffafc67bfac032f54ee5
+20dcaef194f335dc64ed56d673fbd84ea4f483cbf122e885ffd079fb5ac5ffb75ff2a516
+e02ad94ed0af21fea5f768afe283b6c927ade045a5f883dc4fffb072beff19d8a4d97be0
+9acf0bc59ffe70bcfb3093ffc959d872ebb378e5cb7bd855edcd86f2d275dd93d0bd88fa
+31f694ffa6f4b99dfb6daffe10f5c3a1edb577f550e4c05b88ffc579e680f4d009df61b1
+ff50bff7d82cd0ee4ccbfb86d870ed46e50da5fe8fd884fb6bff06d45efba1cb26f997e5
+1dbfffd312e340b8d85ef3b752ec9dd98c1eecd43dddb982f792ff7bf7bf63d830c1ed08
+fb46ff98f480fecc16ec9af26ad9f545afee5dff08edb139ffacf43cc7a8f687edc2469c
+f392ff38ccfb43a9ff18f5b568de2bbdff0af557ff13dbb759ec28e050d901c1e52ccbb4
+70e560cf0ce292fea81afbd237e0b51efe3e88ff9cc1e586f30ba974f3ba8be079b8e412
+f693db86f1d050df01eda5cd52ec7de0c10fffa5c743adef933987f996fb79fea1c832fe
+af09ffc1f778affd67fecb52e001e538dc93ff88fa54d199ed7ad851dd3094ffaf3acab6
+13c59fe18eca86d653fbbd6cdb7de057eb03d95ffdb1e807d57ce4699ef2d35de0c239fc
+97f85aafe5c29dd8b06efea0d0bb82fa8eff79a5ff86fabf3bff94f265d831cceaa26df5
+86fbc2a2bfefad43fe1cd866cbffe09c45f80cfe3d9afeb825b4ff6299ed7bffb92fe48c
+befe3fafe586f265fed96dfbb6edaa58d9b104e06fde88d3ef823b9edc11beed2c98f3c1
+a0b8fe5cf00ee69fb9ff24afda10fba5c0e370d1fa79ffd861f926fe3cf69ce07cc9f127
+fb94ff8fd17be01dd862feb8f724dbc00893fb9c63e4af11d889ee8640fc2af2ca3fe007
+feaf38e84af1d356dd32eda5d653bffe86ef9562fac906d84ae45bdc27e0c57ced91e4a5
+5415fbd87fd887e7c76ad99fe237c8fb1cafcb6afe9ef622c68ffc76d82ed8af02cb47e0
+19d0ff29ccf793ff1bf84898e5c6fe5be879ccaddf8846fb62cd9dc7accf29de61caf271
+e8b362ff57f32aa5e05297e586d879d86ceb2dfe13a4d864cc17f24cff9ef186dd9844a9
+ed84feafe732bffa7dffc29ffb22bfe093dc7abcfb6af179e4c19ec9b60dea94d180fd07
+f7af20d15affc03eb1ed96ff87f693ff79f7b04bfa30fec3b26cbfff42f4a527f250fc81
+f4b959d8f843edc15ad780e9b61aee52fe79f698ffbd86fe79beed6abf4ab6d87abbfa24
+b488f2afff41fa0bffd880ed18f539ff7dfb91f6a83bfe86c6ed0cd886c5fe05b9f61dff
+aff20fff94d0adbff44af9a5d981dfc139acff26f5b6ff60d140f25ab6ed22d94de03cd2
+a6ff52f362ff1ba5d990d85aff14fb66f761fe1be460dd79ec99f6b711e5a6ff60d031d9
+14cd4fd503dcbf9fd078edfaca1faddb6ccdff82eaaf08d888ffb676dcac11faafff4af9
+cb85dda5ed39e56bf0af5af39a3dd8fea5e536f1cd66d8fb45ce219fe07bd0af26f8a5dd
+75e558e049d815ebc555df2ea0fa93f15f9eedd37bddc03f9bdfb44bfd38e686d06fe333
+feaf6afacf77d85bd812e093d97ccbfe86d693f181fe67eb87d802cc93d4f445fe1fec80
+d989d8a0cd7bf3c39bc0ff38e04ac7fb7ad820df79eda4fb7ef29bfb6dff10e5b83a63ea
+9df08bfe06bedd3ccbffa640dd0dee86ff88d93793df9e5cffb614b8d25bd822ddc10bc4
+e89410ee60fba10cffbf79e48fd9f94fb6ed6ce6b84ac1fe85c5a4f287ff79a2f790ffce
+4bd921cefb8931fe4e87fbcc61fac781d960ff07fb93edc01cecb70be586ed8efb79f728
+ffa505dd52ff0dccafc717f873fe84ed36b6c69ccca9f847f423ff37dcaf46fb2bafd886
+fea05ef093f789feaf55c0e039d85ddf94f180ffafbd4bff33d455ed5eacfa9361e5c09c
+f95ec72bf2a5c2f10abfe62af396fa86ff9dfa80ffa6fd50f2ba79dc81c6edab50f502fe
+5a96c8ff34fbc37aff971dd8fb09afd93dcce504d973b8f580ffae41dcbfa5c2ee9f29ed
+a501f794ef9fddb545bb75f9c65bff9bfb31c64bcda5e067c6f06feabea5f433e5a0c0df
+5ada9fff7cfa5fee2fb8ca9bde82eb87fea6cb93ed62da03e4cb31d951cb08d2ff25b3fe
+92f536cc51d826e0fbcf86da7afac497e123d3f32cfb67d0aafe98d357ff79d9fe7ace61
+e044da07ca4ce032d96bde86ffc924fe4d87e093d7b67cdbf4188bdda506e236d8f29361
+befe77fa69b6fe5aed1898e066c7f77af25fe409d5ff82c5ea5cd820cb79f697ffc44293
+e2af4dccadf19efe1ab9fa429efb9543e25efe7af22db2fa15d651e90dd86cff78fd56bf
+f26bd20bef52f915ffacf76eb6ff83fc9cf46ba5ee61c30bb6ec89fe86f47008afec17e4
+b11df287fe78b3cc93ed1fd94fe079ea1ecdaf50b2f293c2fe7cf58cf1a1cf93f91ed048
+aee492cef71cff3eeec337afd7f152cffa88f3be4eb6f6d52fe09ced35caa5c0fbd33aef
+0ba5e01aff94fab678e051aafb8fff55ec2ed80eefadfe16d5f46dfe01dd6ce584cfafda
+13c9ff7cd99bce4fff72beed81de8ab5fb97c2dd03e3a51dfb52e293d883dfc24499ed1a
+bfe724dc46e9c986d8f9a5ff63d914dfa4c798f567fec17effb741bded0eff4bc2fe8ef4
+02fbbe9dfd3af8d708fb35a6d863d925fb58ed7ab6f69dfb64ed33b6d89bcb6dfba2ff4a
+93fe9f5fe06a9affdd3e93f0c21aaff861ff2886b2ff79d8fe69b6d058c847f31dfec92a
+e277db93feb6e568d87ded9f28debf95c3ff57f32eff60f2ad2aedbf1aedaac3e53fa5fb
+2ff6ce3de025b0f779ffcb8ad979ff3bf4b467fcd379fb61add87bf9b517ff3c7be52ad1
+95fabf45ffd933d8ac45e861d99fe05bd881e0a45be77cb5cb42ed6ee4bd69e69abfee1a
+ffacea76d613ffc63cd807ddafff86fa5af3b00de07bebc611edc025fdc51286b9fe5e87
+ffd084db93d7ed49c2e79b44c2ed2dfc83e090d9af68d8b0fa13d27b46a5fe30fa4fb9ff
+9349f838aad988e491e07ad1f9a552fe64f9058cfed06bc5af7aff86f264bfd844affa2d
+eda2cfbe22eca52fe1c596f259ffc082e296f2bf9efb79ed5aa7e47a5bfe76f19ec5fb03
+f787fea5f619faba34d8ff68f893d81390ffc456ff83e4be48c5fe89e2aa70f286fea453
+d415c0e02ddac05cf929b3e062ffaf4cdcacfbd803cce6a545f110e554befa9326f9a9ff
+75d8acf00fff61f59aff5aa1f287fbb8f283db89cbe565d1ed86e0bf0ffb4cc824fe4689
+ddc386e080d8f2991de2ff09d94fe6a5ff39ed95e565b5c707fe6dfa7acdffaf41fe0bd8
+af33ef65d456dd0ec2e032c9fd23f2ce86e00dfb3b93dbb732c74ab6d877cff29e16e0a7
+29ffadf03ea5dd24d8539af79330d85afbcb4fda27caf289ea61a5ff84fe95cca5ff86d8
+80cff879ee5994ec9f2bfad97afb8dfe9f01c5dc85e015b2f63d96ddafd032ed0bc0d94a
+e435e005d05deca308fba71eff79f693cca7edb9a1c1ff0af6b636ffa849ddc05a87b8f1
+9cc818d6b987fe12c1ff79f156e5aed90986f293c1ed78e593c4fe2bf68efeaf52ffb683
+d89c1af6c094d6afee70ffa5f186ed2eff9446feb87beebf7ade63cefa7cf58efcc60abf
+e594ed01a5ff8af8b437ff79fbbf4eed1fe969d954f536ee0bbce42fcbf943ffc166b9d8
+4fcb37f1aeff56f36bbee15cccfe8843f286cba7f76cffb3c794ff87f725ffc152eac55e
+d92ded53ff04f861e57ad86aead060c7f779feadf8d232fe6afb79f826cfa5f334d88cdd
+9a38ffbbe929da529fff4ff202b1e07ad86bec93d901ef51ff
+ >
+ >>
+
+ /Yellow <<
+ /HalftoneType 3
+ /Width 167
+ /Height 167
+ /Thresholds <
+1ace5bd99808fbbd63fab215e074d886dd9828eea2ff863995fa6ae423cff0a306f59afb
+45affe9cfa05f394fd60ed1b98e72da3fe8ee926c9e51adcad0ec5ec21bfd810bbfca5f2
+7dfea0fb88dd9ed00fd833e5c8fe65f72b93e1aa3bfb58e564ed19e05dd1ff62f4c7ff1e
+f2c5ff15f19801fa47f12daafa20ff4df318acdf83d29eff67fb1dafd979bfff4ff7c73b
+de4cff29f57aff6dfba2bff384d188ee6dff5ef20bf9d8f686fe33f5afcf4beaca6cfb9c
+f32cfe01facb64d915e5c6ed06d97cf7a943e0b0c730d6bc67cc7ad5be67ca26d8a5fbd8
+79c7ed56d87dff4fbefe69d6fe79affb69ffa0de4ad938d852c807e862fe79f4affe8043
+a5d986dcbe23ff9dc8b72cfeacca82fba327de9332a7d9933da5dc5bffcc8ade7bfecb6d
+eac0a5d894fe61b7ed5aaadc91c8ff56f023a0e0039df48dd885db59d9afe042ed17aaff
+47fcacc721cca5e469afc0e076d867ec86ff9d1fbfd845bad06ae9b57dfe93f6a551b6ff
+a0ed5ac7fb70ff7de586f4d92bef58ff9ff287ff37ba5dff86b3fb0ef293d987b0eb51bf
+f145d0b234e686ee79ff85f691f0a5cb19e2bf5b96e9b6ef13ff4dfacc7adf0bffd98840
+edb50ae8c178fbb6f76ffeb5f87fd8aa39ee62d8b03fd9b461fb28e63fcef62ec3ef0ef7
+4a9ee586fbcd81fed158e909f98bfec11c99ff88cae666ddbf2ff6a5fe79c1ff40940df1
+acfe17da33f0adff7ff88beea5c659e433d64ac1fb7ace3bbbff169bdc20f250ff0e97fe
+b5e01cd948e2c290f7cf03e03bcbbc61e232ed09b9fa2baae081edc15afa0dcdb4e01fd9
+5eff83f7ab3cedc21eff87d0a5e46fb0f651ef6598cffa61ffd07bfeb004e151d80cd253
+e025fbc0a0fe15f799ff06ef96c790fab272aefe7cd886ebd012ddb75eed32b1ffafc665
+d03693f8d252da339bf1129eec60d83ede1dbaedd6fb9e45c1e47ad48bdb42d80ce04cff
+19f888b7ff84ec1fdd6ce781d0aeea5dd289d977c8e68643a6f784feaf0beb45a7ef94f5
+80ff9fc4fb75ff5dcda1ff5bf704fea7c796fe30acfb9cd028dc55ceff7cfaa6c84bfb30
+baf11ad893c6aff714bfdd934eed36d9c495f183e587ff93f27be65dafe486ed79b7d646
+ff52d809ffd822e243ffbb76fea535fac494e48626fba5f1afe34aacf285fec078fbd87a
+ff89f295fa8f51af3bc5e87eb1fa55fe6cf487fe79cb9fdb6bedc911df9cf388fe0cf44c
+fc86f6b3fe3beeaf34fbc1ea5fb6ce6efb9cbffe53db6bd818ed48a8d892dd84e61ed988
+d379dd3be560f3c66ded7bfd95f2a20ad847df6dd993e05ec2fb79ff32ea5ae0a42af5c2
+adf867ff43bffe62ed1cc94ad909f4c84cd832c7fe6ae2a1f280edbe5cf99ccdaf29ed50
+c1e0931bf247d7ed54db14ff7cfbc60ce05bf4b23abde509cb5ae064c3ffee93fb61ff1d
+c4ed06cda5e73db8fb2ebefe4395fbac56cab65dd993e0bf35c5029dd87bfea3d08910ff
+d927edc56add88d229feacf896bfe51fef35f478cd95fb40f49aff81d9a34dff02df51d8
+34c6fb88f391fe05f57afe9741e5a0d486fc80ffba61de209fe588eea428dcc0a9f6bc9e
+ffb77aff93faaf27f3be12b9d03388e9c166f179fdc68ff778ffc0a4fcb67aff98cb5ede
+309eff93d81fceff9350f79eff17b6e52470db03d9b7f2975ebeff27c79ae486f17bccaf
+f238d0ff30f9d578ff2497d9ffaced61dd0ae04bf2d59651faad3dff17f664edc25bcf3d
+ff69fabf9cc2ff50ed6cdfc21baff012bfeb93cb86f993ffb668e02ecb61edadce10e8af
+c806edb71eda4bd2fb84ffc94bd812cffa964ffc2de559c635e01ad060e89fcb86fe79fb
+a5ffaf3bfb05d9ab44e508d95fe76acb0be1c13aec95bff3d861ed7ee6a369edd17fdd6c
+cefe86d3ffb7f79f4187e1acdd82f26afe12d851de06e460d979bee1871aeea5c3fa8552
+d82cffb7f87effab69f5cb75e093bfe17bd8a50cf28cdf88d9a551fe13b4d808ffb57afb
+d868b6fc35db49e5af12d944eec0a9ff9fc551ffb768fe72f863ffcd79f29a08e4b679f2
+86feb860f3cc91d887fe91f29cfb83dc0bff50e53cdc54e018d995c5e369f396b8ff9fd5
+28fe92f66da7f876fe0586b6cc2bfe5af7bc04b8fb2cf2a738ed50a53287e0bdfe23fa3c
+ea50d9b8f670ff9ff986ff95f70a9ffeafcb4cea3bbff28ae0a44193d824c6eb1eb6ff07
+f25faffb39ffbe67fe2ded01cff27ce161e9a5c82aec9347ffca7cf59eff79f5bf9dfe87
+1bf24ddb2be086edd136dab5e046a9fa38e6afcb3efb19e2aa41e7bd03ff4def0edd66d8
+52edb6f67ed988f2c293bff76efe79b4ff1dec63c956edaf51db40edd220dfa1c4ff46f7
+a5c1dd32d8fe9c58d987c7f97bd8f1c7fe5bed78d393cbaffc9f2593edaf21bfd227e05a
+edc742f16efb83b5e516fe65f7caf159e561a0fe86d7a5c6fa24c2dd7ee39ecbb67bfe97
+37c8a8fc86f759fe61bbe4a528e55ad01cd83be05ecdb0d993e683fb79f8169ffa93249f
+f0c67cd886fe6aed88d875ceff9d6de086d97ad0a5f926feab3aa3d324fea90cff479fe6
+23f242c587cefe25f879fbd082ffba5cfeaf53ed8edd6be41097fb8d47c5f579ff0cb2e2
+12864aa5d80eb3f361ff0881e2b4db46c6fc67f4b582fe74a5dd93d806d0ff71dbafd40f
+87afff80fbcd42dc50ed3590e8984bef1dfb52f4d84ae0afff22d039bfdd8dd2f30ccff2
+8ad983efa5fe85fa26f652fe0ad0aacb59bfdd4cebcbfe8811ff56ed15dba5ff55f7962d
+c3fb3bf2b4fe3deb75c988deb9ec58e06ccbee7fecc461b8d293fabe469eddb5e206bef2
+169ae182c7fa39d81bfb80ffbe60e0adec23d0a1e769c2feedb6f681ffcc2ce5a6d8f437
+ff86e57bd8aa4febbd2ed0fb1dff60f7a52bf39e45fbc4ed34c1dc05b9f37afe9ebfff77
+d2fda5d693e010b2fb87f35de593eda218fa409fff9352fe07faaf4bc1ec6adb7be080b6
+ea26ff99f46cffbe8043c0f29bd093fdb32dc0dd0bedafec7ed8a5169fe093ff5af402ff
+79fc94f936afdd28faa5ff58dd17e0aeed864f93ff9e60cdfb35f40ca6da84edafc942d9
+f218ff62b0fd51befb42972ed819e04b93fbc04088b9c862f10dfa3affc40ffed9af52e2
+85ce7decbf5dc5ed9469b7fd529bf69329e1c511d94df405b85fff62acff6dc71cb6d982
+f86affcb79f1c76fe0c1a4e96cd8ff9604d0a5ff16c9fb65f08be01ed8a702fbaedd65e0
+27d94cc7f29363fe69d41dff51f5b9fa5bcd19d984d59acb1cd87dc7fe79d886d901f195
+fe7ef60ffec5d93ec2e984b7dd6dcfff74fe9d5af5ae6db4cd93c0e47ded27ceadddff77
+faa4c2ed679cddff59fb99d0a5c0e079ddb08964ed9bc0f234d953fd8dfa22c0ff17ceac
+e564d2fba568fb86e0c194e6c52ec0ee3cb9ec96e445d710dc44b0e0ad34fb1dee45cbb5
+2c86f2affc39c0ed9533d6ba40c3fe86f2c58ded1fff84fb79f69e5ffaafcb93e5b786df
+6dd82eed76fbb8f239fa61f04de5a407f249ff6ae586d036d96dd8992efaa5f528fe4ea5
+f1944be329d0e902d6fe37f84ef20ad995ff88f56794cfba5bfe1fd0f90db6d81ced50fe
+329af25af6c8fa03ff45a7fe95e40eb6d880e250dd6bfa1dffaf47c0eb30f1a83aff4df2
+a5de76cdf855ff8afb77fec297fe03ed86d4b899ff67fddcc359e477dd9f4af4aeff7ef7
+a163dc51e238bad352caafe004e5cf1dea44fb37f8cd07fe94fd86dda54696d881e0a5fe
+68edc094d5accc3dfe5ef4afff4aeebb69e07bd892caff23d9aec0f763bcff81b8e579dc
+9ffe6fd75dd905e046f234e78ed9aa5eee76f8af7bdf8ff5bc16d8973d86df93c5dd13d8
+86ffcc3dfeb2f584ef8dd07bed98ff84d87acdf786d979fa08fe9f25dda905c1eba55ae7
+6dd894ff57f629bed81392edb624f988ffcb79e256db0fe4bf2ef99aff77f4a5f931a4ff
+7bb6ff89d8a4c55eaee9be3db3d00fffb4f31fffc010cdb62cff51f81beea0c0e99d22bf
+e579fed012ff5aed06bee661fb139fdd9050ef279affc542bfeb1ff086fbc1fe9ed87cf4
+4ffec786dc43cbff01d84eceff6dfeb7edaf5ff86cfb79f259a0ed9301a5d82ddd54e039
+d807dd5afe16b2e420d093d880c7f171d0f6862fd0f220b6f947afdd87ea7cfaacf43fff
+c75ad81fb6fe07c7a5fb5cfea5cb6ad8b510e461dcc14bed36d952f50dff96f277daa7ed
+67e179d763dfaf52fb7af5d06ee09bc887fa0d84d5fb64cbb134adf286d39ffa7cb4f293
+c4fe3dface93dfc10caafb7eb2fa4ccbaf6cb816ffb502e0982bffaced6ab9ed84e57bb1
+ea2dd518ffc024edadcf3abff761d9c1fb60ff9ff5affe6ef8aff39fe76bc1fb60ff40ed
+5bb7fe3eafd8ff61bffecb79e4c107fb51cf36e072d89e79f386ed64d896ec73b9d088ee
+06fd46f7c693ff82fb95bdf999c7aee050dc26ff4cf722ffbaf631fec26ded9ed842adfb
+c134ff56d8bcff3faaf103fbdd67c1eb24dc51e039cc54e57aedb61eff6efa87f22ae061
+d0a2ff28e57be068cbfb79d3f28811c1fe2fa5fb20f844c188fba94fe59fc92eff9de01d
+afff388fe0b63ec71395e49026c749b7ff33a2ef82e2affa14d897e553a0ee913d9cf32f
+fe9ec9abff90bffe0bf8d011e0affb2bf84bf320ff44afe08bd9a052ee29d40de45ace16
+fe6bbffa81d69fcb8bd8a14993eda306f9af24ff88f115a7dc8ae1af48db92e088d87ab7
+ff43affc93ff8af59bff2cafcb74e05ad735e9ca93c1fe14e25ff3c5eea7f842beea57a5
+d9fa5a9ee4cd6bdcc495ffd95fcbf17ddb78e767f07afbd083edc90df193fbbfd84effbe
+ee93dc7deccb0dd8b8289ee885ff29fbbe13e0b3dc65d87de05ed917f24a96e253a6ff94
+46bed0a0de87d881ebc878f22bffd084d96cf0afff7cee93e52ca5ec61f119fb5ff0b6dd
+7ecbe879d3e55bb9d982ea4cf21ffb7ec4f62afe4df41ecba5df5cce32d80fd968d6f405
+fdacf686dda551fc3fa0f280d8ab52bf2993ed9d1effc237afd7f68c52ffae4de00aaff5
+31b1fe0cfc96d408c8b728e057a7ff6dd94981f9a5ce8446fe02f74bafe55af387feb05c
+cbb667cefa78ff09f7a5fb24f186e5a5c6fb6dc1dd60c9f685ff6bc0fe3cfa9912ff5ec6
+b71afb93fec241a5de33d863ffc901fe87d97de00afe39fa28b7ff4093fac83bfeb1f876
+cfa4ed0ab3d36be288d97efb06f786f2a6fe80f9bb5de0963ac3ee12ffbf79e5c649bafe
+0bfb7affd86efdcd79f193ff8022beec06f187fab971d897df54d8b03ffaa4ff66f47cf9
+d34de5b2febd2ced0bfbd99fd1be9afd73ff94df36d3f50bd9f1914dd593e6ba40ccb66a
+ffc051ed22aff130feab16e53aed03b0cc6fe5aed39fe97ae05bdd2f86f7d579fc88f2ac
+59df96cf52fe98c7a5d973e267c7aaed03a1e4930ec99eff52beff68f9bda1ff3bef60d9
+6de0bf45c5ec1da3fe79c7ff649dd87bedaf01ff97ed68b3d3dead13e43aafd90adf4ae9
+c6fe7dd494d92acefb1eff87f976eec286dd49e0aecd1293fba21b88f2d16de189c336ff
+56e025dbc017c5f96d93e09c3bffbcf237ca79ff88f5d8379afe7eb8ff7bd885eccc79db
+aefd68f4b632fb4cf538fea8f39fbfe1a81ff255cd11c1fa78f330e6af3af960beff9af3
+15fb61cfff6dd8fd5ee02ee786d0af40ed17c3e097d283ff1c9fff9357c2f040b7eb1abf
+f72efb44d9f586d825c1e93163f090bdf850febf9ef9b68f3fe05ef379ff589ee0c13aae
+e517ff50bff19733ffbad932edb8e74199ffad5aecb47aee8dfaa550eb9f47c1ff52f9aa
+d91c9ffe87ed5add0aa5fad00fe0d746e701fa4e9eff935ac4df1aedce81dd91d8bb08cb
+4efa03ffc190bcff99eb3ed8b8ff6ccced79e00eca47afdf87dcaf4bed31b6f193d862fa
+1ee4c493fb8650fe21e8a8c2f675e5afdd6dd3fa69afda79e0a5ce91bf4dfe9df775fece
+3eff69d7b27ae65ccb1afcafc1fb35e5bfa9ef6293f3cf5bdb8deca505fed86187f7c67a
+ff63c2de14cbfe20f5cf1ad963caff79fbaced22d886ed6ec5e562d116fb6bbfe24b93f7
+a26cf988cda5bff21ebced2d9fff935bfeb525f970ff93e67cd965ed4ce02ada85fe9122
+a5dd15bbff93f485fcd05bff2cf59bbffb86c505fec09aed74fe55aff2bf9ff3b84aed3a
+d704fb2fff9a0dc2f248febe5cff20f180c2e03cdaaffaa5c4e608f2ce2aff85ee76e50f
+a1dc9314f844d1ff03a0fe79d82df6c45d93fbc1409cdd03aff475fa79b9df64a5ff81f4
+2cb5d404dd7ae561fe06b5fb33b0eb9ac7a9ff80eec15dedc428b9ff34e262d0fb79f8d0
+47bfe40bed98c2eb51d837ffa2ca94fbaaf1b548bee5b3fb82f89d4bd82ed9a51fec94d7
+71e819cb48ffb557f22aacd811cde607d934ca86fb93d985ed96ce7aedacfe80e5a608ec
+6de5affb1688ff94057cdd569afb9361f3b6dd52d886ffcb64fed17feab46fe6ca35f29b
+ff73daafe91aefaffe6af9cc2ed89fe55193fbc044d6afed5cf7b755feafd094c4f258c0
+ff2af94cf034d31cffb13cfe9ce57ad887fe9742e5b570d8fb7ac961ff3da5dd88edaf1f
+e83ed8087ffea2f20bd852ed62c0ee89fe7bf1bf7af854fec38ee0b079edd96dbbff7df0
+a370fa82ff6add13e55bffaf60f3b637dd51d82bccfb88d9c444a5d4f24cc8edf524ffbf
+35c2e09614a5fe2ef2a526edb83efec327fabe80e1af1cc0e43afe51dd79d824e0bd80ff
+5bf224ffc809f096fd1199d982ccf2881cfb4ce77aace072d886d879e09ddc7bcce561d9
+17fb4ced0edbacc906ff9d24b8f393d1affe10f778c8f96ffeb6f6d037dd6dff86de26d2
+fa04c644e559ffcb09d9af36ff63f7ce3599fbcb44e05effbd4ce0b0ef53fe7acc27c0e2
+15ffca87fa91ff984ced2684ffdb66ace49f5d8ed883eea6fe44fab8ed79d865c7f95692
+e29f69dead11f260d7fb62a5f381cbaaff57f2a537ed96d093d87bb6dc86d85cbfff41fb
+2faae0c099f326bfff11f4affe02f687fe55f206a5ff83f2c39ec0f66afe7ef154ecaed9
+46fb1af079cf5dda32bedfa24a89b1ed86d55ae89dffaf77b6ff9ecfb93aa1e486ea9abe
+e510acfed51787f8b5dc37d2f59326d0a4c7acfa89fe52d89e4eef1ed861e0bfa1f8d896
+0dfbcd1fffd0fc53e41ad87cda86d239f6affe4397d6ff08cdf549ff94c4fe4c93f0d808
+b6ec1597e584fece67f610fe4ef73ffe32eda7e174dec293ff4fee77cea5d952ddc4449d
+edaf2fbfd988fbbf39d5b65fe83cb1e02cd892dd83f568e6a4e068d893fe86fb970cf2b9
+ff26c2fe19f7af3bc74eedd861f016fbaef475fe23fb43d694ed5c84f3d89f0a93fc9d19
+c1fe76f80eee41d1aaf26cf8ba77e5aff512ff52c238f4c15793ecba33c69abeff63f507
+ff5be59802d9ade573bfed79b6d886ed2fa3e9bf4286cbff69fac943d90abae44cd987e0
+afd2a4c688fb2befa20bec7bda17ff39fa89fe7994e9c04fc5fb951fea4edd97f826fb93
+ff79c6fa5bff3bce0affbc2dc1ff42eb19e54cc3ff6adc7ce29e58e07acef283fe9531e0
+7ad886db27d061d9a6f185ff46c7e7a741ffc6eb79e2afdd4be395d866bbe80999de2dcf
+fc9442c9a5d48dfdb079e0abfe8661f00af748acd98cca9dd86bffcb6def1dfb35abfe1f
+f951affad10dffaffb9f37d986b7f69efb78afff6eed9e18f25aff01ccb567fad061fa87
+c6afe55bed0abbf827ff8fdf6de2c1a5ff79ed66b0cc08d8bb179ee5c195fba5ca79fc86
+b6f49fcdb9a5ec88d516fb45f5d092ff1fa5dd0fcbfbabff40f35dff80efb751c802b6df
+9720fbc060b726f35aff80fab138ffa2f66dffc986fea502c1ff76fb64eb04d0ff3ef218
+b8e0a5bf93c5ea25f14cfa22f0bd47fb93bfd888e761d0a1c2e06190e36dda22d3f45bfe
+21d65ac1eb27c8b634fbcb7dd995eb7cfec143afdf34d8fe639ed885c9e56ad960f114ff
+4bf835cdb911c3ff7df155fdaef4871ced4edc35e454ef02c85cff69f329d956ed98cbb5
+07ed5bc5fb71f5b7891cc2e69ac9afe013fe93faa3f472fed079ed94fbcb88d831cf01ed
+c65bd823e0b53be55df2afed86dc1de09eef68b8dd7dcbfb46ffe530fe76fba1e080ddaf
+86e0b639ff4ef7bc96ff39f314ffc831f893ed6db4e593ed80ff39a4fe84f8d868beff29
+f655dc24f29bff79f5ac03bff725ffa33ffba5d098c7aad293ed65fea4e041d997d46fdc
+44d9bfabff93f285d89cdd80e136db93fc7bffad5ff878fdbfa0ea42b2d052daf960ba08
+f74593eb7bdc29e257cc30a5dd07d93ea7fe68f086da9f79f988fec17efa93d827d93ad0
+58f2c43fbefa2baeea609eda7994d889d658cf32ffc15afe19ed87d3a4c906e058d885dc
+78a8edc34abdff01c644ade06beed461df04a0e846a5e08cd094e56fd810e6c469edd251
+dc73d5efb61efe54f47afb0bafde2ef28af669fe29f793fe6bf95ed013affe23f84bfeaf
+faab06c1e033cde721d89335fe86bfff25e582c6a5ffd86dd3fbc349affdc392ffaff368
+ff82f6d012e0b6fb57ffcc16ebab48d919ed63ff7df794fea96dff86cf95fe12f2c422fa
+ed5ae213ed93d9a60bf379d0aaf912f46dfe7ef29cfb44cdfb5a9efe7ad0a5f7bdfe10cb
+b51bf295bfff81f7ca50fa16ff4bb6fc8db846ffb56dfeb9f3128ce083afdd24e45dcaff
+6fd879d119e086e8bf05c3e225de79fac66dea94d1bf1d86edc661affa79bdff63f3c4d8
+01e45df16cfe2eed5194fda51d84ffd8864ced11d847e1b6c74d93e8a53696e02ba5dd86
+cdf475ffbfa2c1e04fd816e5ba20e347de6fd585ffb26a01fbaaff7af96bfdc49abeff58
+96e383dd30d8b61bb8e49505bfe01fdd3be55186d998fa7cffc354e236d80fb4e97ad886
+cdee31c1f896ce23e2a13894ccff47facb6bff99d8b642ec9efb52ffaecb3ea0ed78a8ff
+89eda351dbae39ff61f5d455ff96ed13dd4d9de0af4ba9fa87d89dd990d787f5c02eecb7
+dd9d0cf6bfaef86dfd9e1bf1affb6effb9f46abef251ff309fe19343f906a7fb8ef083cb
+f578feb6f74ee03bd9c0a5cb70c6b61ede50e83ded29d9fb40cbaffc53f9a6ff6df7afff
+7cf295fb88ffc02df153e640a8fb7af59afe6ac2fe3ff4be65aeec1bdd5cf17ff9b1fc68
+b5de8b05edbe3dfd86f7bf03c3e9995df2afff4df3c959d829cbff0af1be7ce38ab9e524
+d988fe84f2c10dfb86de62ec3bff0bfa49e00fd9af61fe3af3cc69e03899de7dcbff5edd
+27d84dd90dd0fe88e57cbdfb0cc4db81eccb31d869ff52a5d997088aeb9bfc77e6ff4ff2
+3cf6d086f294d86accb179b8f1649dec81de31cf4ed82cd95dce62d819e393c7abd088e0
+1edaaf43beed2796dbad06ffd985ff7dfb9cc608e04ce52dc4f2a8d87be5a728d980ff87
+39d9fb11e07fd89d0ef896fdb67ae168fbcd10ff419ff9b73eb4d839ff81c6ee2bfeb0ce
+93c7a9ee67ff79f7c593e55ca5fa88ffd22bef3da8d87aed88f77ffbaf3cd905caed6bb0
+f758feb968ffb6e407bffd32f2b9ffad1cbfef2f8ada86d89d48ffba10febff704fed822
+ffc50fd860ef91f383edaffe0cf9a5f472fb46ff07f7b1fe60cef282d2aff071faa0c542
+d158d8af36ffd178f39ffe8539fb4eff0fcdf1b948b3edcf6db5c864fa31fcdfbf62dc3c
+f699c730a4d981edcb6de0a7ec6de5a4d946afd89415fc60e679bdcb9ede4bed01adffc0
+21ed5bbbfb96bff904feb0c61fecb876ee65feb241ffd42adf9f22f394469ef9ce5dd862
+d93fd0f95a9fd8f827fe07fbaec979eea54a93e0a15ee84cabfb92ff7ae30afec13ea0e0
+85cb54df9ed87dea9b5bc0ed8b0afb52ff1bd837e77bfd8bef0de5c15293d9b716beddae
+cf93bbf3588efea2fa20a5ff2af4bd93d0b68644f1c1a5d01dffaff34cfabd16fe4ffb03
+f9bf26fa96ff6ff4bfa0f223f939fe1db7ff90c1da44e084cfaf08d964e683e4a344ff9c
+cd37ffc39cd77be3985beb79cfe679ddafed2a89eda0fb7bed83c6affe65b4caa4dd64e4
+24dc60e5b6ff6fc8f385cbe551dd25c69fd2b679f7d064f025ffb20ff2b73bd8fa2aa9ff
+c1a4dd7be489fe5cd820e0a0fe74f5aafa29ff7df652fe1bed62d8afe514dd64cbe588d8
+56e616ff60d9fe8f05ff5bed6fd87be0a55add9acf8ed8a558f168d21be052dd42c2df93
+d989e46dcf33fb63f29efe46fbc386fe23d75ec8f26ce57ddfad14fa50f21bccf6abfe4a
+befa17fe85c2ffb318b7de0cff4ae50fdf37f253afed92fe81fb36d81bde32b7ff1397f2
+81b6eb43ff5ae5a72eff9add81c6fa6bccfe79c593d94de030bbf948c7aff385f9ad3cc0
+d91dde6ced9de093eb73d6a4ff30fb72d388ed9f51f67afea5d795ed23a1ceea7fd987e0
+3dfe07c0ff75f525f261fec590bbea9fc1f787ffa54cff7ff344fba0e97cd8b511b8e36f
+f2b452f49fff26b7d00bfc57ed86d8ba93fbb7860fc5f29161b7d05ae03ad986ff51cf94
+d886f198ff89d4ff33ce4dc6a1f17af888fe52d0a9fa3cd8fd6bf293dd14fcc786d85bed
+34a2e525a5f113fe70f586fe66cba5f10b9cdf52cff268afff86d85ccd43d809b6fa41cb
+96c3f24bff30fcc20adeb636f24acaaff438b6f72afe9fefc394ec33df86d67ce033ed09
+ff40fb7a32d804e4b3cb14c5acd50fbff929ff94f688d917e9c68ed872ec51fea4bdca93
+ff48ed31d153ffd99733c2ffd93ff79dfb60f3afe465f223fe56c379ea1586b6f787ed0c
+cdbb48d3afec79e467ccaf02b9c925aef1934bed04fe89ceff67dcbf57e4acec02d0afed
+15ff82e5c12eff87bafa34c4e704fe88fb79ffc786e07dee019ce0b8d96ce0af5dfb86c3
+ff68fb75e557c6abcc15b849fb64c9b0fb4dffaace93b8d888cfaffe9bf17efb78f192fe
+69ef5aa5df71d835d456ffa540ee0efa88db79e740f81fd3a7c0fe81eea546fbadea0293
+edaf0cc6e89329c0fe79e7bea2d9fb61c0fad81ce0abff66fa98ef099dfb2bbeff76d9fe
+69f6d760bdfaafe179d9a54ff392ff87d342c99eff3e97d959d844fbb579dd13a5ed9556
+f2b7e320eda84bf421fe61bfff861da5f73dfec598ea02afd81bdd88ff7cfa67d8ff92d7
+a6f71993edbf0ef74bfb5bf319e864cc58d72edc51d928e086ffca49edaffe7cf385cdfc
+7ede9acf30f294d8afed60fa0997da20cbe56dd87ef8c96ad8ff8648c4eda038ddab42f6
+04bfa5e05a9bff9350bfd824e582ffd95ab1f417eda139e0a545ffd98c33bff71ffbc50a
+de38f49cfb62f179c7f77bfc95ed6cd0f65bffcc79febf873ba5d980cbe56cd9c2a6da5a
+ebb2ed7ad086e227bef979edc098f20cd843e3a653f222e95fdac43b9fda80e096caa8d8
+92f610ff86f49fff7af7a5d11d96f7c1049fe026dc60b6c838ff5afabf02ff4fa0e079c4
+f271fe65b3ff29dd59b6fc3596dfabf505fbd07effcc6de04eff2df3cb3ed7f579fbb4c6
+3bc18cc5e086d880facb7afbcf861ac3ff6ca9e06caeee7fb6d816c1e022daa52ceaae1a
+c6ff0193ecbe4de025d2ffb3f860fe2cbbff953cf72efb93d846ff13f353ff6dd9a72dfe
+4ab0e095ee84fec09ccf7bff86feadf569fec221ff3bfa50afdd94eb61cd07bac743feaf
+e05c86ffd06aed88ff1bf6af7be0a862e07fc9fb27afff3be3b7f607c1f093ff23d1a7f1
+1cfe7bd98856f21798f993ed84dab06deeb602e44588fe9ef71eff38ef4ce12195ed0d9e
+ebafdf4dedcd52ffd159fbcb7bfe86b0fa6bffcc73e0c0529fe2c2319bfb88f49b4aed15
+d596f29110f0d080e0c008f2b784d88cddadcf3bfbbf6bd3f978ff31d910ec38fbb704e0
+51d829e040a4ed7de49dc0fe78d823b6fb99ed80e86df230fbdaa542f8afcb50e46dd3f0
+14d0fe9bf6198eedce7bd8a04d93e89f45d962e588fa60d8b94ab1ffc1a5c5dd31d01ffe
+c00dfbc37cfe8fcef25bdc78ecb795befea5c4ff62c1f73ffe78fa9811f19e32e9992ae5
+52ed3bbfed08affb34feaff37afeafda12d861e5ca84dd73ea4dc3e0a55bff9f67fe56cc
+f969fe9a0eedb95aeedbaa24c75dcd8af77add67e5c96eedb5ff79bbf96bd9b413ef31e5
+5afec637e053fe0bcdb88bbf18c2e1930bfbbb98fe4bbcfb9229d953d5ffbe47e512edbb
+d96dfbcd83f3c03bafe27ded9de521ee4cfb72ffa8e9955ce0a237db5ad921afe811afd4
+5ffb05d064e852b0df7ad993d12ebfe186c7fe77c5ff6cdab6ff64cf95e05ad867dc21d8
+3ef163f9a8ff0cb6fb3fffbca2f96dfcc10dedadc4e4971fe941c0f67dffaf860bff87f3
+a5fbba46cbafff4aa5fa931199f1d305e749ff86d0af84f2a569f993d0bea2e54dffd881
+fb5fffcf62e02dc3e79442c3e56feeb56186f8a4fc86ff32f21da5fe0a9fffc510fe31f9
+63b6d893b8e545bf69ccf97bffaff496f99fff79befd3df286e37dfc2ebff925feb207f3
+a5ff71f820a5e004a4f3930fa5e527fe86f6a1f293ff6bd083e1bf49c3e87ac6abce0ae0
+33d844ddb651fa2688ffafc9a3df61d825d7fcc19fed4ddd01e7a2fe1796f2d827d0fbc4
+4886fec192c5f343ffd80acbedaf16ff39fa7af19d3ee7aced38b2f28afda506ffacf384
+ffc136f5d8b62cc754b2e081bedd73d2ed4feb87c1dc79cdf43cff12d287f3d9a529eb4a
+d718c84fe041cced67dda5c947f3b895ed77d869efc860dd39d95bd4f279fad843e7c7fb
+7ed9b643c40ec64ab7ec94ff1c9fed9358fe27f461fb78ff93f67afeca82f2cf43f05aff
+1afbaaf2934be039d2b895ff6dd886dfc23784ffbe74e4a5deaf55fa29ace568b8fb803e
+d8f18fdf61d912cafa9327c8a5dd1bd674edcc79d85adc0f9cde930bff90f4a6fa68cbff
+3ff8b866de9bfb45a5ff099cd97eedaffe0354ffb3c693f18bffb67bfaad2cfeb916ffa1
+d65ada08ffade445a0fe81f6b6feaf44cbbd66fcb7883ef260faa7ff8ef4abfb06de56c8
+f732fdd08ddd9ced88dab81cb1eb2b9be560a5dd8fd87be4c33a8acff57afa82fe26bff0
+2bf850ffaceeb14df435ff1ff09ad6b978c6f02f9fddff87c24bb6ed84ffaf63d8ff86f7
+79ff57f53ab6f820febfaff25dfecc6ce03fde03d92a9ee4931afebe21cdb0e581c7fb62
+f8974bc2e4f586e011fe52dd34edd00bdf98cb82e06fed1dff80e5c23388ffce1cd8a701
+86ea96ff16afd91fffc09bd216e951e038d95ed78af0a56dd9a504ef51d819cb4aeda4df
+52d2ff13bffa02fe35f6b578d9ff05b6c81bde62e358cbaf79e98ad61ae094d88dc0db5b
+ff15e1fe0296fac250bc1ef7a5fd24b3d52cf5b70dd84ce49cd987dd68c0eb9351fb2de6
+a549efb1d095fe86f2c35ef1aed086f778ff28f35bb5e02fcbf26c9d36d862ed9fcfa5fb
+6cafff88f352f72afb93c7aaf44299d9f3bc5ae569edc6fb28d860f5d086ed6de22fedbe
+93d0a5fe84f876fe26cdff46fac080ff93f5a5ff7efb6af4be79b3ed6dd981edc10afe4f
+a5ee62ffaf88f49dfe86fab908da5afe68f60dfd62b4e97ed89361c4db79e993fbd769dd
+7acbf95dedc16fee7bfeaf04c1fb26ff9f43c4e083d877c7fb8815ff52afe26bfeb54bff
+39ed5add8cd893dd1bbfffa61cfec8ee80ffc05ffa06c3e626d846c1e092d9bf3de561cd
+affb84119ff093fb3f8eb3e17ded9d38fe4fc9a1ff87f753fd23c8b810e6afdb79b1e578
+dfaf31e056d938d005d9af38fbd851ffafd04c9cdf86eccb79da30edd03fd90fd839cef2
+7deda7c99ed1aeed2ec5f545fcb6f750ff10d149afed06ff429fe09334fe9ee03ccef29f
+5ee57af1afff06f7b0ff1badd8eb79c6f539d60fe0c193e06dd501f04afe73f69157ead2
+79a50bcfaf25e088e27ab8f880fba001ff4ea6f987fe15dd57ecc5fe27dd78d0ff59c2fe
+4abae579b6f906d744addd7de069eed68835ffbb15c4f31dfcca7afe89f996f286ff9fc5
+26e0951df4abff6af7be21fbadf877b4fd6bf681ffa360fbc221ff51f94293ff9e6fe0c2
+299fe080b4f299ff82cd93e4c002ffc5d949bff78853ffd393d817e060db9f37d994f242
+b8f9229edb93ee73fb16abfa85ffa3caabe043d5fa933bdafbbcf84cfd6af336ff4aa5ed
+62b8e57bd0ed0cd976f18bffa549d886c0f50cbcec1aa4d4ff0dceec86dd7bfbcc09f197
+ff2ca3f3c75dd8fb9866d886b6ed10c65ce161d817e967f75efcc878e22cce3f99e49143
+c1e012bdca99ed54e3bf3e9be58aec7bbfe008bbfe1c95edbe3bf4c823d937e061f675fb
+b0865296fba724eccaac11f96dfe87d37bf2c86afe7ce564ccaffc7aff5ad09ac4ed35d8
+be59ea14c3ff9f06bffeae5be479dcc59abed897c1dd18cdfe38f7af6bff9fc94cd128c0
+f6b4fd3b94e09d78f9d9308df3af34ff4defb76cffb141ceaffb469cf79143c1ff3af148
+cfa1e9b71ffeb6fa82d393d8b046f9be91efafff61d0fe935fff52e52cafd918feaff762
+dc03d8fb6af3cb68d7f974ffd05aa5fe6df7a1ed29d84ed1efb7e414d0fe9538e6be50cb
+aaed20fe4ba5ed28d2a9ff32ed51e509b6f62bff79affe25f596fb5e86e5afed6bd8952f
+eeac12ff4ef21dfe75f59d5cdcbf21eab82dfcaee993e07b04a0d8fa5cfec44d93f1c854
+e093c6a5ca27e587c5f964e086cbe607deaced70e59fff6bf779ffcc8745a8db3afe0fe5
+9fd90bff50d816eaa00af1c5acf276fbcc7fef87dd25d084fead31ceaf38e6af4be30c89
+fbd786dcae54c1fe86f2991eff7df3904cc1fa7effa5f136c0df86cffb62b7f90298d98d
+d886caea78dd53c6e568b9ce6fd9b8f136d951f721ffcb59fb86ddb693d885e539c7f093
+63fec486e35ff319fb50ffb9ed6bafcc2bedaeff67a5fa71fc15f662fe55d91ea0ed14fe
+73bdff63f91fd9b708b4d828df4b9bf6bbf072ec65f27afe68b5cc94fbb779fad77ae520
+95d9a206ff5cd779ff52f3c478b8ff7efa85fea1cbaee5ba2ded14ffd80bb6e53efec960
+d831ddafe064d91ed886fb9d5af3990fc4e979c1e44dff1dfba543fdbfa2fa07afee41fe
+2b91c1ff7bd088e0a8f994d8b93ef661fbc558ffac0effd8a551f279da95cba9d587e451
+ff13f2be86de05cee822d9aaed93d8aff174fbd07adb5bf229afd893d07efe8af55afdc1
+aedd31e001ff96c7a5d022c2fb34ed63c7f24cb6ff51bffe38f7c0afe72fed9fe5b23af0
+da10ed50d214f23aff5298fa7acc5eafeb62c4dd7ab4e0a4fb6bff01f5a1ed5be008cdff
+3bd9adff40b1fe69f3aec86cf2d6871ff288c0ff7ce099d2f40da6e328fec06e43ec03fe
+93d5be09a4e07dcfe68830f7d306fec23aff4bf831b1d882df8cfe39b6fb519bffc039cf
+4eff0e9de0bb4bffc0a7d394ef4dff35ed4cdeacec960cf261fe93d0b829e442ff98f16e
+d885e126a5dd2ecba5ed71d061e04697fab608c86dffa459d898d98ce093d987edc346be
+f193f880ff9d33fa08f651c1ed93d6b942c3fe7cf678b5e56bed75bce025d99734e6be16
+9bffb3cc49e155d817fa5087cafb78ee9f14ddff9fcc5ef02ffeaff249fb299ffac16894
+e0a46aee85e5c1a0fe25f7c046d4a2f079bee4865bfe7ce585bffb2693ed9602f83efe6c
+e186dc9ffbbf2e87cdff7ad8af55fb78f7abed87dd4ae6adff5acffe84f56dfb02db85f2
+8ffecb67df93fbbf1ac2f986ff28f75ffd66d308fba5ff1fdf3dd917beedaacf94d918b6
+58fa7dff952ed0a5ed19c2fb2ed1fa86f180cefa62feafde3deb73fe9bf792f07edbffa5
+3bda57b7f57ec12be687c2e077d987d891deb954edafff33f5ba0dd89b11f164e55ea9eb
+6ddd20cffb1cd8edb4f32dcbeb69d4ff37cce881dfa5c60dfbb91ac87cd9fa3fb8e420ec
+c23cbdd85ccb09bffd9113c0f29406e45cd887e5afff2bd81abaff36ec4cd995e525de5c
+edaac91eeb7add85e06bcb9ffe71d6fb875afd67ff87e4c523e562f0affb48beff5d93dd
+9e0dca50fe10a5db46f069f893d90bdd30ce45c6b51dd8f381ffd34ae266faa5ff1a9cfa
+3dff15f661ffd108e259dd79d0ff5bface7bd991cbff08f793ff885af4b88e01a1dc973f
+f7b67cddaf4fffbe25edabcd76f75fff06bee864a4ff7ff3a5ff19fa81feaf32c5fa9a3d
+ddafc2ff23f39e3bc1e979f05989d6acfe79f56afea5ccb878ffa6c0fe50f335b6ec5aab
+ef9343c3e523cba1f03dfe9ed0bc0ae06ddc81cbacf454feafed93c6b0ea7ed086d825d2
+58fb7abcffa2fb6fed68b7c80887fbafb9d945d0afed69cc79eba8ca2499fb83ccacfb42
+a5ed7abeff18fb4196d8b549b8e0accb42fdc5fa6fffaec90af261fc9ec777f65efe39f1
+9fe594ed5aa9fbcb4cd80fd479df9ee861f2a1e54dd5ff7cfb43a0d960cffb934efba5da
+c2f60d9fe02bd0be4aea0ad94cf2309fd992d0f603ffce20e0afff6db2ea2ed4bf85f24e
+fb93c4ff20f83aeb05d883e061ff3cf557ff03fbafff79f1c4a5ed61e702d797fd2cf7a9
+edc31ed87af184f835b6e5a2c53bf2afed46b6f31593eac729de3cb5eca5c0f36bfea5f2
+0ffe81e66daf4ae018ed61fea2e42eed12dc99d986e054d81fcf84ffd61793f888fb95ee
+59cb24d886d96aefb41ce55bbff786fea913e0afc70dfe4786bef364b0ff7bfb93f58de3
+7eb8fa1cff5586deb978fa61f206d9f679ff60f90eb1da70ec3fafd886de95ff64f62dcf
+a3dd7ad895e1c13890e09f3afe1ed885b6f24bafdd84e04195ff4ffb10db61cafe04f755
+fe71da7affc96ed9ff4c9efb90f286d12de051db22e379d766d915ffc6ef86d693d9be44
+b5d886fb59ff2ec9afff92fc6ae0369af0c231e050da2cf98eff51fb06feba71f6c48ae0
+0ed843c9f46aff88ed7db6fad83bcbed01dd32c753ff38c3ed6cd5a5c0fb9949e7c1a5d0
+8abb42d89db8d888ed37ffc1a0f36bfdb646b9d988b5fa19c0fc21f34e9cecbd10f9c093
+e552ffcb79fec75aff6bcff387cb8de593ffa55ad990df86e810d89827fabd64c2e102d9
+5cfe6dfa7bff86c89aff34f99ef19529a5fa58ff22f88cff6dd093ea7db7ed0c7be742f3
+afc0fe51e5a1bfff7bc9a5d86be0bf9ccc2ddbaf33ffa5ee7beb82b6de26d942d0e51a93
+ff779bf883b6f29cd1a5fb0fb0e54bed2ac4fe9330ff51dafe83fa12f34bff99cbb615e2
+56d60ce0a7f113fec779ed86b5e06dceff6bf6d06fdd5daef39b34e2149eed25d8af0de8
+37fe54d728c0ed73ff2ec6b3fb51f4add81eaff777ffafca1ce59fcd04bdfb3eafed86d0
+54e1b6da35cd83e0b0eb05f14ade19cbfe79f8c0a5d28708ed6ed980f503aceb42fe0df5
+a93bf75dff7afa93cf48bffa22ff50c2fd7af25e9cfbd458dfba43d9ff61e623db61bcff
+85f979b3dc0ecbf285eb9b28c7a6e793bdd226f077fa8dff97f779fe7ee5a236e351ff38
+bffaae29c945acff29fbcd15b9fa8ad4fb63b7f875feb6f19fbeed86fb18b8cea0ed62a5
+dd80e06afed035dea140eda8c549edaadd6de8ca61dd21ff7ff96afe73f5a54786d9b9fe
+66f6af39da51dd22fabaffa3ca26ff5fd0f16bdd86e17fcaed83dd93ed01e277fd9860dc
+86e4983dcdabffc02eb7f611fecfae14c994fe81f3ce40d816cafe7ee5ad4cd816f8affc
+3ecd5cfe69fb85e05dd928cc4ed331d84ecafb7bd998ec9311eda4fe93ed84e6bb66efd8
+61e940a7e5cd3ce0c466ae01fa49b2d398f54bfa0cffc030fe45efb689f283cbf965ff87
+f57dff2cf6b90bfea5ed65d409df9fe411d8bbfe9b38a4d885e09cc4ff83ec975ad849fb
+a9bfe38933fd9fce47ff22b7fe17c556d2b0f218e6c3a5f808f4b0f90587d9ef66a5ed93
+5cfba1ef3eafdf069ef792edaf43f164ff93f5b771e087ee7ce003ddafc61efeabf180e5
+88ed9dff69b6ed09d25bfdcc7bd960d809db4f9cff9343febe86ff0993ff9d21dfffc593
+c2ff3ae080d993d857e394cca5c609e551fe1098d836d90ed65ed89f59f2be4ac3fb8af3
+c03ec2ff7df22ce5b4ef1eff4bfb03a9d844fdc892f182e61194fbb2c61bf3bc97ea79cf
+a6e69ffe3ca3d853fe34bed167dd85e8b93693fec646c0e028d864ffcc79fbc75bdd72fb
+96cebf2cdf5bc9ff4cd81cffabf79a45eba5cd36bfff01f6c01aaff226c0ff87deb049ff
+1df8aff47afed706e0abca1bedc3afed4cbbf58656dc26e779ef66ff21f186f370ff16f8
+61ff76d9abc1e579eeb6fd95f285fbafcf83e59c32d851affb934cdb68d180fb6dc7a5eb
+93bfe573eda30ce033d868fecd40ee58ff79e561affc51f830f368c9ff6eed93d976ffae
+25fe53d8fbc41fe28dff71f27fe5be1eed48a7ff27d13be00afd9fbdfa04a8dc7bebc255
+89d0ff6cf883ed9f52dca55ffad87bdda54bf02bf6a5c3e58a40cab63bbff270fb86f79b
+5bdb79fad077d9f385f99bd80bc7aece5fc52ad1afec83d892edbf2eff4bfba5248ae43d
+cf16df43fe1ef7bfff93ec19d8f6acfe07dd4cb7f261d12bf752fe28c1ff79f9b2f24eaf
+d980e0a5d92ef2c707d879de8fd8b627dab00efbb648e3be79f19f4cec80b8f405d1a5fe
+3499fa88b9e77cf288ffa5f26ae979d097e532fbb339d9f128b4dd0ed862fec76dfbd087
+37fe57fbc899d886ea5d9dd4ff6afad964afce25df4cd1f32ae4950ffc346be0a944fea5
+f741fb9efea5fa3a9adc23fb429ef38fdc6dd0ffc358f97bff93ed7ab6d87f04ce62ffb7
+8728c3e787ffce0ffe99e47ed988b6e04fd8a51ec799ff25fac10bbdfe549dfa88ffb511
+fe5ee479f3cb61d6f27dfacf19e0c096ff5acb87e546c9afe06ad0fe18d861d9b84bb5d9
+21ff45fb5ff2c569fe79bffa60c0ff87df14b7ed21b1e6aac2e09418f952ff01bffb22b7
+ed0faaff30f9b579ff83b5fe57c0edaacbbe15ffc269e07adc89ed05e079caf24fe9a6c0
+e161cd07edb839ddabbfe030d860c9ff4eefabe597d959c8ed9654f33393edaf59bfff17
+d0f97af286ffdc6ded7be59f61ed7aceafe065dc38ed94bdf19dfb429fe79412c93aa6ff
+84fb0facee38fc95f361ff10f64c86e2aefe01e493fe7cd587edc18eb816d8aded07a5e5
+9651ee9ef57cd793ff4bf70586eecf7de375b3f27ae585c6a0e087ed7fe7c238ea11cca4
+ff8a4afee1b275edb61af2bf31d3b952ffb66affc25efe18f67bfe5b9bf76ffe0588f0af
+fb1192e087fe43f527b3fb6dffbfa5c1e079d8fb3ea9ed943cc614ce45affb05d84cd0ff
+8bf63aff19f2afcd62fa41d01dc6afff2cf6afff89ea5cd96ec3dd7bd9b61cb8d883dca4
+c3f0953abeed60f42eec5dddaf0ccbff86f83894ffd23bfbc92ad84cff39f274dd89ceff
+5fb6fe3cc2df31d84dfe35f354d860d304fe9fbffa62d92fe5d67f5cf6d82dd0ff5fa5fe
+7bf697d813d9b003e086d897d793dfc01bed9fc5fa9847d0a6f4af24ccbe71c4ea0de041
+d91afe49fa21a1f2cb6ffbaffe9cf5ba65c0e186ecaf1cca5bdf85d89528fea4c1e88cff
+86dd6bd85ad843e0aff231b5f826fe50f59ffe2ff9b543ff20c0fb81c7a7cc9ac0f737fe
+9ff347e69fc1de4e88edb77afe6be19acca9c715f042afda27d8a5f583ff95f0a5dc6dff
+22fb8ad96fe04593f07af8b103fbcc3dacfc5894e4c24edd1de561c5f572fba3f240ff27
+f947ffa8d051e760c1fe86e953d7fc67f99fff79d199fa81ef88d46bc2e58909e055da61
+e337d8fe2896ff36f4a8fe9bbff744fbbe58e0087af34ae504ef87fe7df7c10297fccf62
+edafd286e95ce36deb93cda5e852f21dff50fa11a5d87be06ab2d023ff81f2afcb17e493
+f4b00afb5cfe9ebdf971febf8bed13d65bcc19d880ec88c9afed51f2acffd21fdec36bed
+a1fe96f083c8fa09ee87c0ff86f99f45bed131bacb69ed86d979e587fd28b6db1cde3bff
+77b9dd13e03aaffb5eaadc52b6f79dff5abfff97f222d886ff79a5edca69d886da48ed02
+a5d978d0f486ffd9a5cf75fea5c51dedb779fed83d91de9f44ff0cafd992d003f261fe86
+d979dd7ee285d8fd62ed1abefe75ed5fd809f971ff53d827c6f17ddd32ea65d8b30ee050
+adfc96f792fe5afa08b7e5409dfec41884b8fe983effbb2688dd0fe047b6d59ffb3fafd8
+26e1afff79fd82f7a9b7c814f330d965ccff79f76bcbacef339ff283d8ed25c1ed14ffcc
+05d938aff630d27bfbaeea01cbf947b5f715fe6dfa92ccff5aee9e37c94cc020fa9cca51
+f9a8cb2fe54daac6ff0be5bf94c4f72afb7affa8de2fd50cfe9fcf26f0af3cca85ffd632
+df93fbafe55adca3f280ffa449e5afd095fb28cbf67affc92dd83fe075dd8bcff67affbe
+2f8fd9f15487ecacd05fe843afff90f378ff29cc9bf279fe8eee19e853dd09e04beba0ba
+ff83ef9e0aec95bffb0796e0c14cffb76aa7ff77c6af86e579f1d076de68eca04ac1f19e
+62e088d3a4c6b723e262b9e517feaffb93f0b55fed32dd6be284ff88d5fb67a5f27efb69
+ec79d855e0bf50c2f393e0af44fab759ff88f5bb4a98faab12c84a9dfdb532b9da60d1fb
+931bff4ec0ed9346eab686e579f1a6c832ffa448da11e4c8f94abffbd70dfd81f8c1f2d0
+61d91de082ed61df0fd83cca5dd887cf9eff93fb7ffa62cab040fbd8ab36e556d8f661fe
+88cb08f2d03ed8f45df942feb613edb8fd0cc6ff8733fcc30eff3ae452f1d681fb35a7d9
+62e00add67ffc194ffb0fc0ad85beba113eecb5ada19d84affacf49f24fb9a5cff73eec2
+70eac695e008d9ade46ccef67bffd81bec89fe04edb138c1ed84e5a25effa8d109fa4bff
+c003fbbe68e8ba68fa9752a5e6932cb2e559dd199f8632f5affe51c5a5fab4ff6cf686ff
+a4fa2eee51d223d83be30df7c25a88edbe81ff7bb6ce1ded94fbb57be5ac2fbed89ec781
+ff9449a5d95cddb9d86be6b680ef94ff9040f398c5ed86d27ef29ed03ce513d54aa1ee93
+fb27bcdd952dfaafff86e1c01487edc579edcf39d818ffad04fb33c4ff5cfb1ff14eb6ea
+2cbc84c7f35bcd77fe99f956db08fecb1ee062ed9fd0b587e87cf3b117fecc85efb6fe02
+d0ff7cc0f270d8ffcbed9a68c9aaea01c74b94eb9cd608d962c788db7ff0a5ff8ed879e6
+b7ff18f9c523ee48ffa5c65ad62af761fd95ff1cee4de035dcb2fe81f9981fffaf44facf
+6ed808c7e5af0fff50f726ffb02aecb67af786f3cc72d97bc7f859fed09247c2ed3798fe
+d13cfeb40e9ffb8adb65e0c07ce7a374de93d28bff7acaa4edc13faee096d916e086cf9d
+f279b1f781fec352f423fe47dc29d7ed9e3be01fd881f2a550ed38a3fbb84ea70bffd82a
+fb5cf781fdd02de053ed7bfea5f711febf6ac1f251fe2593d8ae68e1af8ee586f232fe80
+e095d803de8de879fba5f868f01be63cc4f37acef2992afe5bf6a54efbc17cdd93d85ec7
+fa85fec756d9af35fe1bf19c3fedb761f1d9956dfad85cafe469d8ffbe4df1b7f63afeb0
+43f9be28f352da02e444fe61f894fb24ff86f6bf30ff49bfde3ad8be3494d980e06bcdaf
+ff864fc2fb93ff5dd93ce0c395fed90793e5f7c05ab0e28fd894d938adfe7cfbb1e021d5
+59e0af43e601abde81cbf439feb83bfcd102d860dfafee53ff85f3af57c5a9cf09c9bb92
+d3be93e04deb1587ddc1a7dd7aedcb66e0b61dfe77e5974ede10a8fb21ff93c0e367ffac
+cc1effa607f7be22b5f106bbf64687e5d58229a0d886f2d169edca78feb7ef85d895d80e
+dc56d463eb45a5edafd968fcac6cefa7ff15fac1a3f25b98f7adf16cd079f4a9fe65f71a
+bc60c2fe3a6cd9a1fa77ff20ef60e6bf13c9bd399af392ff7acafb85fed032fbbc79dd89
+cff263bcfe79f89a0fbfcd22e069d1fb31ff62f558ff2afa5dff70fba5bfff40fb12b9ff
+26adfe2ff9c09ff206fdce7bedd779e060ec43b2d104e679e086c6e566d7ff7ac3fe73cb
+aef81d99fab4fe6ddd19b7fb0fafe09341aaff25f366ffb0f188da72cbfe890efab621cc
+ff04dd60e3af3fff09e5bf37e00cd930e7c114bedd7ad6f08fec79ddff4af213db55cb9f
+ff86f4a4f16cffcf5fd941ed2ea5d84a96eca40dff50f00f9ee542a5db37c9ff7afaa0b8
+fe18b0dd88ed93d87de0a3ed06b8cc27d969e093ed71cf9ce088d76ced41b0daa538ffa0
+2cf2bfa5c4fe6dfab787fc56f940b6fd3397e03e9fe82cdf5fcaed4bdd0cee5aff79cc9e
+fe30f8c6e85dd091e1c23ea0fe0afbad29c8e67fd3f379b6d793f6b979ed66d978fe93c4
+ff87fb4ea0ed932effaf43ff2acf9eb3e487d293ec79dd07d04ad827dbac0bfca1f586b9
+e56af2c766f8d687d97dcbff6ec2f586fbb14bed30e747cb9ef64fd51fde41f2c078cbab
+f47bfe92f6ad57c1f846fc0bf24ad980ffcb5ef8bf59c1fb9347f90d9bdc3af2c82ed99e
+ed7fcaaff365fbce85ff93fca96aff85cea6c697ed38da61d8a60a98f777fb1886edd079
+e580ddf59f50ff34a1e042f24cc62cfbbf99c5f51cd851a5df73cbff60f9d280e098c7ad
+f91ec735fb7bfe2ef6b5fb6ff964fb7df4c566d81ecbfa12ffbd19e03cb6f324feb52caf
+ed12d85edda4cfbb93fe6cd986e27afcb6ff9f12fe48e837dd4fe502d5fe2cafd987d279
+ffaee51093ed22dc95e161d3e480edcf8bea62a5ff84d818ff52ea0bd8a620f251d402dc
+c130bbfd45f724afff90f482ffb6d93ae0a9bfffa524f84dc63e87d8f06cc6f962fec08a
+ff9ed10eff3aafe480edb81ef3ab0add9e47f304fb5be47eed94e0b846b6d8974593e3a5
+cc94e03c9fee81ff5a9bdd7799fa86ff6dc6a1d254fad885ff93f31cfe52f705c2f23bff
+0bf0aa2d86ceec6ad896ff85d0a3f161c697eb62e238e9c02b9afad469ff88f501ffaf1e
+feb658ff22bcdd0fed6be498da91f980fec779d988f46eeb9fe079d88ae6c94de01eec5a
+e579fec055d935e0c095d9ffa5fb1eafe3950cd89b17ec62d970ee86e67ac1ff44facd58
+e2c06cfec1a8cc76d816fe52ff05f2a5e50effbbed33d917ff57c7fe27ddc1adec46d3ed
+59cd9fe54df77af1bf5ce434c967e383d899e07ab4eba5c75ac0d9f953bcfb81db11b7fd
+28b8ff87f517ff9ffab57afec54caae6c247cfb578ea9ec832dd79cbfb6ff7afcc4cfb2a
+d157e041b2ed17e59cff14fa4ef319fe5aa5fa7ec5a5d030f1a310fa86f57bfe5eb713bf
+da84ff45cefe79e5c4aef822fea5d953fc27a0dd7999fe80f7b425ee60ffa5f596caaf87
+d083fe68efc475c0fe81f28feba870e59506f787fbb722b4fc06afff1de0a704fb76b5fe
+9fc1fa33ff5af425d062fb94ff459ae5a525f060f7c874e059da3dcbb1c453c705f361e0
+86f216affe80f0be51f67cfd96f5a54ad89e32fe93c1f271ffbfa0f686ffc344b9d093c8
+a5df7bcded07b6f76bffbd52c3dd96e463ce02c4ec8ff15ad09fed68b8ee3afd4a94e1b6
+3dbbed86c5f802b7ed2bd93febd091d920e04ded39ddf75ddb30d8ad42f91cafdf4cd103
+f6bc4affafd634c964ffd877edc788d85bc7ea92cfed4cda0aa8e08ed681ff95d914e787
+f2d102ffc98de1a552ee88f9bf82ee32f785fe93d8b91fffbf94e03add24fbd010d953e0
+07c0ff86f3bf63ee01afe59412dd37d953aeed7ee230ff61befb3b93ffd848dd14f389fc
+79ff20b5f3a5ff69fa32b4f405bffa28a5d885ddbe5cf593fa12b5e06ad2ff64caacff88
+55fe79f9c08cc4fc6a25ec89fa7dfe93c6ec6ac1ff7bd987fbcc68db7dfe8df1a552f495
+3ce56cee9c42ff279dfb88f2bf51f016ddaf3ff9a6cb28be7fef874dfc2fbfff1ed8a508
+fe94d8a5ea3ee44beda4d054fe76f7a4cb5cadff91f384b5ed3cd619dfabd08bfb3ecafe
+7cfac193fe21fb65f1afe704d8afe4679efe80cc9ae02dd85bc9eb48d83bdd9bc1e452ff
+7acaafff53f701ffcb1bdb79cafe31f29847befb1296e5bf0cedb262ff0fa5d8ffa3cb4f
+ed16e25bb7fa399ee05fed30aff21cea4fe40fc3e028d3f8abfe2ff5d07be0c21ee579ff
+97c0fe55edc27eed5cdbfe3baee0afd09cd979e569fbd8af51fb15bcd29aff7af76ee82c
+d9c36cff9ded67d831cdff79d993fb5aff36e079d9b14cedb507e061d9c5a5d8558cfe86
+f21ec7ed25b7ed4daff894ef739eff86f7af18fe74d997e81de07dcf91eaa366edafff4e
+9ed884dbaae16dcef142dca4d32be99cbef379c108e5b99fd5afff0bcfacf11dfdc293e2
+75fea4d0be93fe79fbb68613c1dd81b6f948ffba60d229e641b4cb8cfe31b6ff9b67d8fb
+61f50efe4afa9ecc4489edc87fe078fd22b2dd0cc9a7fbaf09ed43d81ce5b9fa8813e661
+ed7ec69bf2a5ff1ee797ce6dffa3ee8642ff0df9cfa843bffd5c88d6f678feca41d80bfb
+c726d752e0c593ed2dd864fc5ff131dd4bd5fe9738d2aef45efb15fe39f7b679fb86ff5a
+f6c649d939df52fb65ff28f44d9be577ff86d8b146ff13cfb862f530ed43afce5bffd9a0
+51fe09d8af6feaa5fd93c4f766fb0ed0a0e508ccf8931cc794ec82e4b419f4afff119fff
+3bf0bf90fa68b6ff3e87e196bff990fe85439fdfc2a5fe25b7fa0aca4abfef5ffe26f2c2
+3aaff8bf9aecb628f0db75d1adfb9f3cde02a5ff92e64fabfd93f26bff48affe8cf5a5d0
+86feaffb8626c1f962ea0dd073edc087d824e5c331bee19476fe85faafeaa7d193de6dcc
+fb86d826dd62e89cc9a6ed3be08cff9ec0f202e8be70fac496ed65cbf212dc50f301abd9
+7bde58ff82d9b745eeb0ff3faed82bc6eb7cd965d0ed6cafcc5ae045cfed79d7f35ffe34
+c650b7f1b3ff2bf948b3d0e252e992f86ba5d888de9f5bfbd51ae05ccb7aff69b8ff39e0
+11beff81c1e47af26dbedd7ae008cf9fbfe50ecb42da0ae59d15c6f3ace57edd92fe88de
+af4bf494ff5aa5f89b03fbc123e5b871c51eed49bffead31ed5bf598fe07f359f881ffc4
+09d861e37bfe9d35df1fe846acff2bb6fe9bbed786ff2ef193ebc03af38ae574d96bcdfb
+7aff964ffe39f8b233d8f604fe94f49f2dfbb81db4d093f2a5d905e468b0d592ed6a96ff
+7adb23ccfc0ff446bae59370ff8af335e596d80e9feb86f7d84bb1f358d826cbfe1bf65a
+baf936fb74d885f27aff6ebfee934dd905ff33c951f22eff9fd106b0eed06edfc46aeca1
+d016fd5eff86f89501f1c68ed8b644b8d592d829dd4e97eeaffb22d951b8f693ff7bbed9
+86e076ce34ed45e5b0c763fd1eaffaa717c2fe24f3a20bdd55edc986e0bf77feb67cd962
+d816e0afca56ffd94ce614ff61fb93c4f45bff03f5c729d89fff86b9e47cceff0df5c92f
+dc79fec34afbbef557c93184eed01effa1f95f9ad986afed6ddc95f04bffb7ea3fd5fb5a
+b8fe7bf2a5b9e99ec0d966e079fdcb861aff4df2b33cff80f299d979e038c3dd9e4bfb12
+ffa9f77cff72fba5bffc8648c1eb86caed61d841cdfd1af860f493fb87ff9a5ef9a5ce86
+e04dd4fb5a9fd753e0c0aff7a905fba618ecc325ff99f382ff6af888e5799ff67ad880e0
+af4ad917e39bdd50b8fa69ed5ae039a5fe6199dd52a9eeafd30999ed9161d193ffaefcb9
+62e5bf76d4afed3affd42bffc417c1e093259fddaa28c4e632bece66fb45ff17b3fa25f2
+a336f9d891db86fecd60e047ba2df6bfaaff6cfecd79e060ed24e438ebc25be11bd3ff95
+38fea517ff83f3af5beda8c605df51d810caec20d944fe95ed77c6b1f486ff79fa3387d3
+e561d0f29b5ee552de39c7b0dc3dd801f2c726febbed1fccf67afec165affb86cfb115f4
+72fbd82dc5f079d0fb8647ffb9fa26c0ff1bdc4ee30593fa9c4aef13fe85c8b779e7a060
+fda55bfab1fe5ff687ff6cafed1ee087d88be47cc2dc5ac7e6af47ed2ed80aa5ef8dcbfe
+ed930fd957e51aa5f793d184db69ccb30ef281f7a560f1ce6ce0bf98dd0be19fca51ffb6
+7cf9a5f384baff7fefc10cafff31e703dc3aed93d9ff4b9eff9245fcd386fac093fb28a5
+ff6efbbd68e0a54198ff943adfa82ff2d61de041fed99cc9b682f7ae1fff9e01c0e39353
+d8a6df79eba5f899c1dd34cdff89dead51fb06f54ebbe37ef3cd3ded11cc96df07d1f879
+ff5cf60ef15afe3eafff9367ff96c1fe79fabf34fb129f53ccfb88f384b9e028d940fec0
+9efb78ff9bd92fe0c011aff747fc30b2fb64ff31dc79edc729d855e03ba4e05b9ef7dd60
+d893fe81cfb71ac36ceac42ebfdda50aed9819e45ed2ee7de9a72cff86eeb6dd54c9fd86
+d0fb9f57ff79ef8fbe4dff05ec4be0c751e9affe33f6cb81f23ffbc335ce5ffe7bf4af0e
+ec43cbf188db93d0fe34d803b6d96abfff43acf39348dcc394b7d8a5bccc94e008ecca14
+e061afe550ea87d4afddffa74ce42ecffa67ff7cf2af08f243e5ba51c4fa70fe9fde87d5
+7eeacc86d87be89afb399fff92fb79facb18ffd02c87c5f857acf06bff9ff2b910f986f5
+6dfeca72d8ffadf19b0ccd47c1e05bd907fb6af4a50eed4c8be7bd80ddab11f9d288dd96
+fe6da4fa80d96adeb217fe66d8a46cfe86e823d651e186c2fea423e558fb1b86f1afff79
+f99fe579d8ed5ecbfead29fb4eff3cf420fb6af752a6fbb6f123d0b89aff5ef37d04edc8
+91ffaf42c6a5cb5ae793d3a9cb21ed88b1d035ed52ff07f4a54df125f9c00dd0b1e44ae9
+08d3b77ceda967d9feaf16bfe229d850df3dfea5d1b81ee15ab0f84abe3284feaff793fe
+82f093d17cd830e0c07dffc50bfac42cffc58635f254d825cbed12d541f8c279ed9fe104
+edbe16d8b3f26dff94f9507fd8ff6dd3a5c2ea9e4593ed2fcf1bfab220fbb610ed9fd0bf
+91e179d59dd884cfed864ba2ff7ef70bc4e037d8f8b924e060da9ef005feb632fb5dff7b
+f761fe04f3b77ad893d96ac6ff93dea562f35afe86cfbea2ee34fe4ebff29343ed9cff79
+f5affb86d776e042ff96c2f126db93fbd9c255e062dd13ce38ff4df7a4ff6ff9b02ae2af
+69f2af60edb7fea6e67ef5ab58ff86edaa25ffbe59c4ff7df491ff46a5ddc031d9baf537
+97c6f63bff52bffcc565bcfe93c769e3c17fe086f960ef02c4fe4bf219feb92dd8fac241
+dd66ed54a8fe9161a1fe7af213fb6fdd86edbf9ce018d893dc81e567c7fd1df23dfbb60f
+d844fecb8cd9ad1ef761fe6db3d896e506fbc864d835dec10f99ed22fa93ee79ec4ab6ff
+62c70588edb524ffc0a5fbb99feabc18c4d943edb86cfece4bd8e59545d917c0ff3ee3bf
+94db5cfc9ad82efb973cda51e0c180fb06affd9d15ddaee90884b7d880e012dda7e05aec
+3affa436fe4fd832df93fb83afdd7de5a55fff9f10e493c6fb90bfde74d8e5c146d1adc9
+95ea52d622fa63c2f555fe3bcbadff43a5e0bfa2d087e579edbc1bff3bfac196d824c1f5
+14ff86d1b67fff92faa84cffcf61d95acb01da9ffd86cea3f4afff3cf5d09641e85ade23
+cb86f2629bfe86d3ed1ba5ff8908fecc7bed64a2d97cf32bafe507d089f375e7b886fba6
+2bedc589e071e5c286fb62fecaf222fb9af361fe09f79eda86f4d06df2a5ff7ad75be530
+beff43c0f17bccf561fe1fb63cfe17f52f7aff89f92aff43beff93d97de439b5eda0bcfb
+1795d8f98657ff26f74cfeaf7ce598dc84e553ff89e07ad9af54fa39ed1ce071cbee7bb4
+f785ffa5f35fd834e00fe448d875d89f65f9d87af193fa6bfe40e5be04e65094f7d83fca
+f4b95bf893fbcd08fe61c4ff70b7ed46addc11fecc1ad3faaf4aff27f350ff3fb5db944a
+92ddaf43b8d890cb83d672e60aa8e5c517c0ed26ffb6f76acd93da04e94cbb87d3a4e8c3
+95d0afeed80adda5ed7ce2a50df14dffaffc68cd0ce05fd8f5882ccbed7ae065cdbf25fb
+5cd868f214cca5f04bfe41f4cb8edc9ed752f3049fe11dbfe02ed889fe7ff669fa80ff93
+f212fbc91db6ff09c64cd8a1db77f3ca7fffc0269bfb932fa5e423dc3b86eabfa5dd51d0
+f979ffce61eea14fe49561e593d8accb93d8a3ed2af7c5ff5ff886ff28f24fff24f154b8
+ff3993f89c61dca30f95e021fc5ef8c196d9ff33f372ff59fa449d6af6c352bfd95ef4cc
+81e0c21197de86ff7aef9e4ac1ffae01feb8a4f382db8aed07ffa4bbeb2eb7d09cdf8621
+ff61f774fea5c2fc6dfe4da5fb52e616ccbc9dc4da2acd5de0b48aed79cba9f58cff0db8
+fc30a1e036dbafeb51bdf1d879ffabc2ff9c4afb1ceeae2fc9b51efe87c6f779ffca0df2
+5cfe66f710fb61d8af1db7d60ced99e07cd894e08afbd360bfec51cefe79f3c7fe79f0b3
+dea03ffb0eb0e05bd801d979c9fdeab686fe1a9bfe33affe3c9fd8f82bf2a4c726feafed
+6de49bd33ed913ff4af8a8b9c93cfd67f75ffb03afeabfa8d00deaba34dd55d888ecc87a
+f2bfa9e446fe1ea5e67bfec054ff3de550db34e0afed5dd0adff79f688fb70d0ff8641ed
+bf5fe00ed6f18fe47afe99f568e07ad926b6ed36bbfba5c520eda9d08abfff79ee6ce5a5
+ca3eacfe14f958c82c9bfbd975ff06afd837af49d8a53a86ffd06bed79befe9eed86e5b1
+1fd036e064edce7ae5c767d2fb895abdd241e6b778de0fd850fa90ef75e488b4cb31e779
+e093d685e393c4ff37f94ef196c781e593ef24f8b608dc9928ff5ff193bffb6bf4af2feb
+86d680fe95fa834ac3fb84ed11cd56d815de9f02c2fd9f13fa93f677be37b6d815d94dec
+a6fa56ff74d7af65d93ae7a0c73ce449ed02cd9cfe54f574fbd06bddc0a5feafed861db1
+d996ee58fbc5f566ffc6ec1cb5d995fa21cf40acf82eff9660ff80f9aa4ff2a017eba622
+eeafff75fe65f9d052fb81f2c318bbfb42c1f079fa95fe5af20cffbf28ef6ad88be076ff
+2afa5bff79b0d06dff67facb82ddaf37ea52d608dd9cc4fa03f2b527b9d3ff9820df53d9
+8af17ffe66f2afe06ccce977d957cbfb94ff65f384ffc30ac1ed90e101fecf92ff7bf66d
+fc96ffa2b9f935c8b52fe7bb1aefb34bf301e44abcf3cb55fa86e28e1c9fe009b791f45a
+fe31aee082f2c968dd7df0c7a8d805c3ff2dc0f887ffbf86e50addabca1c96e9acd7379f
+ff7acfa5fe0add51d819cf9cdd4ea5dd81d943fe0fb4ce9ed8b815c2fe40f097e443a1fc
+06d0ff7cdc95ed83ff5ca8d859e0a5f01088f3cb6dffb8fa39e5afc84cff27f847b6ff2e
+f2b11dda48e0a5cb3f93e59f36da6bed9d2df253d209e0b318cf5be088dd7affd49e5bff
+c47ae088d87eceff8d3be0b627beffb2ed85d0fa46d6be93c5ef4affb917feafd712f749
+f28ce572b2df73d852e040c2f59333f1afff8620fec0e54cdd2aeb61cd87ff84f66cfb79
+c1fa58feaff299c0fb5fed3de8a7d983e0c00ed2afed62e56fb7f219fe4dcf22bfef88ff
+73fb7be6c144afe39928a7dd9623edba94d988e183c7a5d36bff9ff7ba03fbaff570feaf
+c0ff4cbcde86d99dfe84c8f985f222fe50ed0b89fad8af43fa23ff64f29f15c1f77dffa5
+dc4dd72ffe52a6e57ff612fc78d9669ded9348fba279dd99fe3fbefa5afe02f393fc9d57
+d0fb7de05ac7ed9369b3f797ffb794f4be25edafe032b5ee12e69f1bca52db24e086ff6a
+f64dfb2ca4ff86f730c8a5f947c18fc7aaf5a2fe3be51fcb4ada37fea5fb02f2b6fe78cf
+ff61f73cc0fb1af353fe07edc134ce7eed6bdf21d651f2228ecdfb60fe1cea67dc52a5e5
+6ad87dd094e0c13880eb94d8bf9ce736fbaee562d810f183f974e97bcaff26d961df99e7
+06cdfb39dbbe63e0fec01dd0a5ed15da84cc62dc2ad8ffbd4cd906f3a63bd8f204d157c7
+1efb43e2a5ca439effd25cd972ccfb7de579f4aac602d07bde93ccf35ad879b6ff12d886
+d9fb33e062d889dd7ab6ed9ac0f265de7bd760d849ea0da5d886e4a56fdd99d87ae0b05d
+e592ff55d09bff88e47ed1f69f13eca7cb94f527ffbf3affb0f540fb65ffaaf704fe5af5
+47b6d771da2efe9fe460cf0bddb8f71396ee89ffc34cbfff86b8e470ffce28ad5ae26bfb
+81d69fed93ff7af2b01388edaefd77ceff61bdff8bef82e566d96dff7ef2c20188f795ff
+4ab4ee30ffba43f19ffeb712ff63bae51afbce69ed94ff23afee82ff13f84ec7fb61ff16
+a7d82ced93ff8ef585beee3afa06fece4bfe31f8c586fe77f026befb39afd810fcb645e0
+afc73df14aafd780e096ca13a0eab6d929e087cdbc91d0a5f90bff94edbe47c3ff8ffca5
+3d9ce0c057d137abfaa354f221a5f40c9fedf887ffc52fde51ff36d41bbcca6edbfa9749
+c1e62793ed9f46df30fea1d0afed11d860fbaeebbb24b7e17fd4a5c78afe69d848edc98f
+e03ca6ed9d32e0b341bae379cbbd56e57beda507d593dbf779ff5ac71ce03ccffe6bcb9c
+de65b0ea81d7a647f213b6d2a5dd7ac9f962efbf79ff86fa79ff83c0fe5dfa0ff358fbd6
+87199ff2c152ee3aff1ee079d9b63fc985fa932ce579f0b5fe6df3a9fe84f01bc4da7aea
+cb7ad9c143d2b809aff68ae97cb6f4a5fb3ffeb731d6fe68a3f9d815cafa7ad8af0aff2f
+9afa91e533d851fea5f339fe06f753da14e581fa9b37f284fec350bffe86fa9ff550f909
+fe9fcdb637ffaff24ebf3ab9cda0e9b572fbaf28b5ff79b8f220c0f60cffbf96c3fb4cfe
+0ae89f29e0a54aed07d843dd25b5e406eda5d97be0a962f0c4fe4aadff84d899f187fd5c
+f489fe03aef1cc51d81fd94cd831db03b7d993fb3bff9929fb52ff9332f1d97aceb50dfa
+c645d96ae0a059f6bf0de0c342affe79b6ec5bf1c66df3c047ca79ff8fda85e071cd9fdf
+85eb7afbaad021bffe5ed709f793f25cd204d96dd68ddf86f21dfed382d971cafa87fd0d
+f34dfec0d95af9d818e04ec6ff9a68d989ec2be56bdc92f259fec670ffcb87dd7bf388cf
+fb61dbc375b9ff29c0fe3991dc7fd81ced61e566c62fd0aaea53c1de5abafb84ff94f788
+ff7ef9cb44ed87e05dd3f1afe384ebfe9c4fff3dfbd85f9cfe90f107d0ec9474f385ff87
+e14fdd21bffc369ee086dca5feb81bee40fb0fb3fa67c1ff36b6ca5aeda2d980dd95e96e
+db27df78ffa5f125fcaf42c2e09351f62bfea11aec96e07bd8950592ed9a61f5bdfc862f
+c3ed3cfb60d8a4f732cc75d887b7f21b98fb36feafe65193ed9e34fe48cc9be87acefa05
+b4fd9ebefb0eb7ff9cf816cba2f371ff189eed63cd07c861e0ac5dffbe0eaff8bf8d47c7
+02b66ac8e686e0976ceecc1fd879febb28ffcd5ada2dee9bf685ff88cbaff94bfe05f15a
+e3a2cbbd6ac3e540dd1f9df2d827ff88f54df91cff4ac8abff86ebb845b5da60cfff9b61
+fac19ddd66e1afd045adff2ff7c6ff40cbe9a24493e5adfb87dd7dc6ff5aafed95ff16f7
+40d9b0e36dd9c00fa2ffc219f9d886f16afb0bdd52bbeed057e032caa5de43d878e586fe
+27d886e0c32abce593edb42af19ed075fed88614ffaafd94dafb18a5f225c2ff2fa9ec5a
+e4af82e0a61bfb93d7b604b8d55de80fdd6ad896cf7cd836f95effa8f688ff94f0be4b8f
+e4b30db8e07acbbba3fb0fceb12ff793fe7df4950eedba2ee902aef340ff6dfac061e5b7
+74b0e4860fffb2ee03d951d31df2af07c1fd21d97ce069d08bfe52f6a55df1cc33f4b26c
+bee51fd9b4f286ff984492f293f77dfe70f4a8ff52db6aeda5fa45fea6f53efb4bffc253
+fa23e59f36c3e561eb2af24a79d6ff64b0dd78b8f880ffc138fa50f4c77ae445fea8fa28
+d994f280ff2be551ffafeb77d909e02dd85ad061fbc6fe62f39dfb3aafef2df379d967fd
+c45ae212d839e7c978fbd67dffc88cd883dd0eed8ad053ed1fc2fbd668dd79ff9ef485fe
+56e78edf81d052fba3beff02a8dd1ed1ff9a64e07ad2ff3cafff884ca2d82be6c1ff13dd
+50d724e2c206bfed33d5b810b6ed7fd96bdd9ad079e694d8b66bf6aefb88dd7fcfabe0f8
+b939bff703fdca47d9149ee88ed9b962ff94f27edc68ed79fe54c7a4ed84f3c21793fe95
+d484f16dfb19d99303a7d83dde88c1ff72d856e597ed18dd9cbdf6a5ffb651e09f47f1b5
+37fe20f8a5cb9bff16f593fe9f37aff132d8b741b5e06ecaa5fe42f16fe1af35ed58e5c9
+83eb932fc1fa91ee03a1ec5bc5edb8fe6bf9b577d8af73fe8df05d95fb6c9ffb80ff95da
+5fce08ffaf1ef8b210fd61fec94fd91aed3ebfff59992687edd879e3569bf489fbc94aff
+019dde36d810cd4dff9ecf3abdfa1dafd93a9dfbd027ef4dffafcaa5ed7ae5b6ee79ffc3
+61e505db86feaf39c2fa6aff3fcc5fc686f21effafcb79e566edb951fb5cbfe086d86cd0
+f87abffe62f78afb11bced1cd29ec0ff0ef5c293f8b638ff63fbaedd1bd859fdcb7dfa95
+12e039afcc1cfb40c9ed37d9b6ffc63bc4d921e14cf238fe9ce083c6ed67dac18fec0698
+f28bff7bb0f30cbceccffe9544ffa5bfde23d866b6f179c1fb50f8a5ed87e0af18f2a5df
+70cbff79f7b760bee47ddc9c14e751bfff49fa2fe1a518fe95f9a8eb1dd0ff53a5d988e6
+80fd26fa6dd962ed0efbc3a6d081dd2ae4a53ffe25ef49c0eb139fdc21e3c599ff4ff788
+fa2f96d879dd27cf60edafc748f075ff7fe3b151de2bd8fb84c3f063f39de986bef88117
+86dba5f279f7ac88c2e67af155fa33a5ff3af24bceafe138d84dcbe466d2fb6ea512e5af
+cb1df282ffa0f70dd3a5e56dedbd6cc4fd2cf7c188ff09ee9945e107d8f140a5fc31ccf8
+92fe34a5d886ce5af7b1d258c943bff66292f1bf31f201d88fdd9fe793ce87d99446ff09
+f560ff88f3c87eda9bff935cfbcb79edaf3bde80d8ac61daafed4cfe9efb81ff9612e19f
+cfb93ff3be23ff94f4b647afff05d97bd75bff01a2e0b0fa4efe0de059c8fb05afd325d8
+87e4cb79df9bfb7bff77f59cfab821fe9f41ddf3c165fa8afb6beb37cd61ea56ff2cafd0
+1eff419fd85aea48afd862fbaec1fe6690ffc55af3b662de79c4f50cfe98da80e02cf188
+ff78a0c7e40bdf9ec1fe5bed47d207fc33ff58f6bf9de487d579d903b0fa4fe50bbce1a8
+2affc186fe6bfa27f0bf01fd6de5ae1bc1e040d2fe5af709fe98cb86edc260ce74edd579
+e5acff27dc6ed2fc5aef93e5bf93b9ff3cd998ff74f66affae0af9ba1dd5bf28dea811d9
+87ed82c6f97a34ffb52dd952d287dc7bfe94dd86cbfe80e587b8f377ff96c5fb7ae522da
+4f93edbf0fea99d386ff0ab3e36edd61ed14ff52fb9ad90cd8fe2aa9ff7af849b6cda5ff
+6bf2b1d6a3e01fde5cc1fe23f0b6fe67cdb683f4ca3ff2d8974af209d0a5e55affd086d8
+3cccf368acf174bdeb86d86be914fb48a6f70effbf24fa9744bfec88f4af3fbed026ca33
+ed63d3af7cec50dda3cb42ec95d76cfe52efaf64fec16fff5ada04abe6d879c7ed79e20b
+feaff31bd132fab410d95fefd005e0bf13e532cda0f880ffd02de0b077fb1fed52c2f23d
+ffafd093c5a9cb74e565eeb34eedcc59d893ea71fa1fc1df9855f979bffe86f332a9d895
+47a5eb1cffd665a4ff8c61e6c47abaec51c8b38f32f59cff85b8fe0ac2fa2eaddc37f9b6
+db6ed0e77edd9f66e05acbfe934ffb1fe39cff7af982ffb3f41ffcc02df9ba13fdbf86fe
+46f2b2e57afbcb39edb22be693ffc95c8cf107a2ff93efa646c3e480edbf70f59bff4593
+fba566fe85b6ff52baed3d9ff281fec14cd8ba9efb82d89d1efc51f336f9bc20febe7cfa
+be6df437fe15d796ef8739fec218ed42afd96ccbf96fffb9f67cd99930f9d805b8fb1bf6
+a6ff6afb17d9f9ba5de70eef49d9b465d893ff7be59f5090ffa32dfe42b9fe8ef6a911e4
+c2a5ce86f20ce960dda34697e067eda5cc5ae892f220c5e088179ed901b7d873fbc466f5
+449efddd56fecf3bd852cbfb9b60fda53be5c328caafdd31cbf54bd4ed73d914c9abfb61
+dd22d9a4ff6ae51adb61f0be79dd95d884ec9fcf3be09b18e694dd85b0ff40a9e4b97ae5
+a5cb96f114ffa43fe310d838e54cfbc25c93edce70d858e034d986e69f48edcb7bd879e2
+86cbff23ed4dcf18fec6ed09e5c686f0d207d838edd160f234ff51afd886d815fbb6ff7e
+d019ff7afbaf62d8b65ea5edc5ff5af679ffab51e1a4bfd8ee199ae56dbef483f9932bc0
+dd07d6ff60a1fb7cf369ff79b8e6a220fa86f463e402cbadf763f205c794f8affe28d3f7
+3cff03fb46db8bf462ffcb7afb5fc2e269cbf50ffbce2aff73fa66d87adfc083f287fe9e
+c774eeaefe2fa5ff92fa81cba1f15dc7fe8821fba6ff1ff65098e0b6f86af2b23aaffa5c
+abe0619af380ff669afe82d894c1fa3ffea9ee79e209d99fe490d903c7ff33f7caff3a86
+b8ed94e020cdf30efb277fb6cb38aefa22b4df15edafff79f75394cfed4cd819e19ed907
+87f2c75be0b0fe93bcff4996e07cb6fe59cc44a4e57bafc886e17cb5ff0eacd929a3f103
+b7ff25f7b677dc5bafed54d902e5adfb24f6b548ddaf07f7b519df55bee543ed08b5fe24
+beff0d96e0afd445c69fd1affa883ea4d880df93d97acdfe1bf8c854e0a5c3e627beed05
+dd72e0c551bace54f85cfe41f567f14f9fde8d1093d8fa24d046affa61b6d595ddff4df2
+ffd97aec67c2ff62d838ecafbff20cb5ff85f8bf48eec0ff42affe952bcb39ea7ed1fc32
+c9ed29dd90edc050ff11edb64cf2d872c7fd6cf7d151e4d84fa9d930ffc493fe7fd888fc
+c4469ee55bcefd79caed61d6ff83cff46bdc9fc1eb51f379ceadf730ff6bf483fe37dc13
+edb9ff05fb55ff1df64393d9a82ffdbf18fb52b2f84dffa7f51a96ff24f389c0df79cb9b
+d886d6f360febef44daee46bfec986ed7cfe40c288d793bb09cda5fc44acda86e09920fe
+65e277c1e03ea5fe935fd89de00ed0f286dd6bf917afe85da5f67fff09fa93ceb761fecb
+9426f7b638e0b17ffeaf79f2cf84e0ad43eb09dd3aedaf62ffd086ff9c17e051befb9340
+ec9911ffb927fe7bd888de34e461d9a0ed07df5feb79fe85d76de8c296bbeba0c0ed78ff
+d86493f27fc8e179afcf5b92e4c06bd89dfc2fafed1cfa38ffb521afd92fcc9fff81f2a5
+0fdb2de058b5f615fa5ae986ff2fd399f703fe4af6d186d892f52599fbd610cefc30f669
+ed55beff58eec09fd983fecf3ad872d76bdf2bf5d89a18ffa9ce59f0c419edc12afbb50b
+fe5df193bef89cffb831f3b60cdb3ac5f292ffa221e4bd69faacc873e259d517ff9dfb7f
+f1b44fc48cbdfba5c74de52bdaaf46ef30cf5aff01d04bafe8c445b9ff0ac1fb26d8fe3b
+f2a5e64ccaa5ff7dd885e0c26dfbd072ed7ae00cd93dc1fb8bff93cded66e0a0c329f2af
+e179ed6ee4a0c7b75aef31fe50d9c452afe581b6c98fd4affb9f09d99927ff50f10f87fb
+b4f23ffeadec8641fad468e683fe9f71ff9661e6c668e89cd119fe4dd25ec979e4c18eef
+7cfaab4bd92fedcc79f2d02ddb46fb86f093e0ac43bfd804fc86e4ff42cf1bed9fc0fa5b
+fe86c5fb7be486b6f299fa11ff9cee6dacf36aec7db6cc5ffe02f068da13dd4afea20eec
+bf3aff97f753fcbc93df64d84df3069effad4bfeda9341c5fb1ab6cb5efb11ff95cca8e4
+78f286fe29f44efa1aff2f87d8f479fecf6ce5afc3dda22088e0c35a94ffbf79afed4ad8
+04debf41c8fa924bffc079f9a6c2e586f012faa522fe56e08ad0fe78f965b3ff0ca7fe7e
+edb0cb38fe62f9c569ff95ccb826afd893f862ff078be09af30eafd921fac635d87adc6f
+e020d2e53bd9a0ff10f693c7b686ff80f7aff260bdf7955ae5ad02c6a5d061eb1cf2a5e6
+7fd9bf33c6e18652c1fe9661bfff31f07ae5c062ea1ac0ff01e994da72dfaeeda4c1e64f
+b7c742aff6933bff4bf4b7ff9e1cf9c506dbf033c1ff93f77cfba5ed0dbfe0a120ed3bda
+7b29fda3dc68ecce79d82dea05b6c69fdd3bd892f34bdf9801ffa4bfd90fecaf28e548d9
+fe7df253addd7bccf2ad39d8a5ff61f150a2ff89f659cbaefa9652feb72fb1d977e033ed
+d227e3c23593d2e545cdff83d8fb62f22dff99fbbe31c4fe71f991f41afb9fed0bf2ade7
+83d993d8a63efaa2fb5badd8b53bb8ff8f37cb5bf76eff24fba5e00adabf9ae078d857e8
+bb70e5ac67b0fb8812e452d12fe05cb2fc35f5c486ff95f2b1cb38bbff4496f5a4ff6df7
+5bf114ffb85ae7afca66f8d260e02a9af284d0f66efa8dc40fb6fed130e9af26ffcd76e1
+80d887cbec62df28b8fe3887eacb79dd8fed47fa9eff539ffb5795d8fe098cfbab1df044
+afdc8ad8b648c870ff9515df48e562b3cfff78d859d824fc51f720ffb1c96dd288ee44fd
+9ff114bffb93e404d887de7aed86fe76f922c5fe01f179cfff4bd7fe24d9b8d8a4ef87d9
+81ffcb72d869ddb449e510ff72f885c7afe01ad986cb9fda93d886c7fc8616ffbf25acf1
+86fbc25eff52bee0a738eea5e03f98ff78fb86bf52fb19f531feaf13fbbea5e57dd7ff05
+bdf718fc62d0bc20cbaff279beff62a1edba65e194c8a4fe35f916ee87e5b443edc0a5ff
+95d8f8274fe5afff7bdc9ccb89df60ed06f537ff96de7ad863ccec6ad87bfea5ed53d61d
+cb5ed888eda563dcb1fb2ca5f37dbef28448fe35c3ff1af2a423f3abfe02f9ca80d891de
+55ed05fb5afe61f238ff1ffb4ff326a5d5ed77e588fe3ad969e6af32dd9909ffd867fc84
+f7c916d95ad6ed95b8d29fea6de096d047ff0af455afef935fe2c3a5fe86f182dd0dcde1
+18ebc82bfecf35ff6ee67bd083e09afe04f7d979fa59cc0ebd87ddf29333c0f946f408fe
+79d096d886e0c50ebff825fea64aff21f2c342b1fa8bff95f232ff51beea93449de3c917
+ec419ee1c19bf450afe566d0ec9343beea56acfe61ee25d79dd87addbf93c2e785d077e0
+7bccf84d9ffb58b6d894bfff11ccf773fbd379b0ce20eb55bcf188e5a50cf63eff4bb5d8
+57f488ed6bdac29edf40d3ff9f4bf303d83ffa5dffaa4ff8b586dd7bb1ed5bd806f15fff
+af51c7b86aaed024eb85d9fe5dab02c4ef82b5e96bd2afed31ff4afbb579f2a56ae284db
+b879de5f9dffd111dd48e56fd897cdfb16ffc6ed6095fe8bd0fa07ff63d5b979c5fe3d87
+ffd87ad093ed1bceaffb69fe30f7b13eff0fb0db3dedafff4293e0c12dc5fe0be951a5ed
+81b8e34bbcf350feb579dca14afa32ffc87adfc293fa03fec623aafc9330fa86feb723db
+bf93e76de3afca79ed9ad43cff51f913c3f686fbb6dd25d4f57dfbd838feb66cffaf3fc5
+fbb1fe65e217c9a5ff55a4d987e4c21ee659ffc346fa07f6cf92ebbf3586ee9fcfaffe08
+f7418ede86b60dfbd432dd53b6cb93ed20dafb059adfc115a0fa31ff5ebaf342a0e28ccd
+84e5a5d19afa79fea509d8befd04f297e250f37bfad045fe20a1ff9418dd88cafb02ffc3
+93d8b64dfba523e574edb079bfe041d0ecb616c86cf67bfb2ac5ff971cfeba26fc6bed82
+d0ace59b29dfa54b93fa9f3fea1f9fe586f3cb2fe09ced70e02bd496ff86ee25c0fb14f6
+5ba2fe80d92ded9fbee09a3efe15f5aefbc356f22ea4e07cc2f4ac5af2d879aff67bff86
+f75bafff9458c0f678fbafe06cdcc29ae482ffc70bf24fff18f153eb2adf4ccaf25b87d9
+b16aff78cfaddc1e9de48adac12ec5ed61f83593ed86e21df26cec81d0f35fdbc14fd9ff
+6af8af79ff93f2b059e088eda943d5ea59d992c1de04b6f22f89feb970ffbbed63c1e088
+c9ff53db0ba4f760fb14ba7af656f23cd861b3e07ecd93dcbf3ef4abcb8afc5286ffc780
+d86be0297fff93c1fa4bb3e424d0fe37beff4ec2ea14de3ae6cc73f3aee926d951ed2ef2
+af0ffb4bd929a5de94d877dd88fb7cd6aef76398ffcd38ebc424baed3193ffc663fb79f5
+a6fe87d97de8d0a85cb8fe9ccf07ff47bbff972efb9f11bbca1ee04dd832e4c207ff50bf
+fa7aa5f56efe38affbca69ffd754eeca3cd912b1ff09f24abded7ac6ed84d888ccffd88e
+ddbf7bf9c3fe39f24fff27ef88d061ea14d8c5f11fa8e547ff9ad8bbd902e363b9ff85f9
+6c9fe5941ded6eb4d881fea50ee032d865ff9ec993ce5eff86c0ed72cbfa62fe35f5aaca
+44befd0d93e0c11aaff77efea4f683fbc05aedb404ed52e041d70effbe24d9fe3bc84fe6
+a5c0e18715c4e585eeafe562ff6ff69cfa79fea5cb9dd915edca0de0c495f1884ae5bf79
+e00797f77efbcc85da93fb9b1cfca745ff23f3aa3b6bfe0e9ee5a50b92d89bd579e0adff
+09f8b5ff8136a5d7fb6eefb90afa4ea6fe87f5ce1ad93dc9ef61d9c4a0fa27ffbf4ac1f2
+92fe86f1bf4bfd0bf9a5c4e93ba5ffb754e586b6c603ffa0ee67b8ff34f186e060d849d7
+15d863ddad37ffd89ed291f86cf2af67fb73bfed86f96efe3797f7affd78d959fe3bf094
+dcb90ab6d646ed30f777fe538fffa84ae421d8fe9f16fab4fed45de0a551ec78d863e4cb
+81e6d070dd5ac6f8ecafc2fb2affb6f55dfb03f7c5439cdf934997edb6fe883ab2cc65e6
+7df2ca53dd329eed93fba812ff87fb56d2af69ed9ffa60d047dd14a9e283d977e01d93fb
+d80696f61dd0fe80e078d821c9ea6fd9aafe2cfbb8f36dffa9ed08f4c261b943ff15ade0
+c44be5b3f10caed821da83d1ed50dc42ed07d097d884cb2beda7fe87dd80d861e0a4bfde
+65ccf884ffa540cff2a44587b0f12ec7fe1af937ffb65dff31b9fa93ee9f1c9352e079d1
+63ec36df6ddcb07cfec161fbb9d95edd03bff7da1cffafd32c97eb82c6ff7ad35ae0c04f
+dd02e57af2b909db2fe497fa88cbff35f4b6fe57f2b9498bf3d27adbaf3bed5cf98cfeae
+43fabf5a9bdd930c9fe0934ec1fe6ee58ff2c697c1fb2f93ff9a39d89ff365ffaff518b6
+ff93cca6ff68f31ef95cfe7ada52f21bff94fbc33cf224fb9418d256c2ed9360ddb9e91e
+beff619bdec29ed111f3afd98706d847ffcfd9ff32ed95d989cc94ffbf4bed1ce5b12ff1
+22ff79f4d8529af1933ffeadf61ffcab43dc08fe79f2b274f79ad82efcc693ff7cd81fec
+5293d89928a5d86dffc6e65fbfff4cfb9ecbbc2fde60e387d104f5ce47eeb6fe36d0f97b
+b2d52afd1cec5edd70b9ef09cbf978ff31de9543c1e562c80efb52bfe086d890dd97d036
+e5afcf5bea0d86ffabd778edaff59dfb09b8fa27ff5bf77acfaff28947f070e99752f1c2
+fe79e4a96301b6c95afa14fe51f1109ffa91d886ffcf78e0a4cc438affc976ddbe6ae079
+d867cdf971f1a5d92efecfa846ffaf79e657c3f167ffa5c3ef79fbb8ed01e59824b3fb14
+aee56cf10affa7c3f313ffa3ed7ab3ff70d881deaf18eb44e399cab679f634fecf7fe0a8
+51d290e57acbfb5aa3fb80f279e79c34fb4dff03f272ffa264fb93c9afdd9960eebc4bd8
+37e062d0eb81d992d896dd36e60cffbfabfe42c0fb933db6f428bffbef83fda7bfdf86d8
+80e5d030e466f3509efbc20efbade9bc12fd5af9cb0dffb0ed159fe0b74cb6ec9321e8be
+65edc138fba00ce0af40fd06e05ad97ffe86d1f179cf9edd2dd888d96bed4294d8b63bb9
+fb1ec3e627f260ff95beff86f84affd887e4a520fa57fec3ef27b0fe05abedd626e09fd1
+21f4c3aded9fc5a7d612edc228f150fe2bf9c102ff87fec57dff9951fd68f410fe6afb86
+d879dd21cba5e028d0ed7ccd9dea8851d823e445a4f426ffb878fea5cb0bbfec3c8ee57b
+f22883e2a5ed3095e9c13d93febf27ff8cf86bc8ff7af9d011feb66eddb87af6c095d2af
+ff37cd4ddf38bef93efe5cf693ff57f798bfff78f993da6ae09f57fbaecd3ded52cf0eaf
+de9302fb49c0d993dd89119efbd85bd0f83892feaf41ffb560fe0fce59f73bfdb66de09b
+bed88de555e895cfb510adf227e5c01ccbace54dc9a8ee5af993fe7af781ffb013fa4cfe
+38ddff9cf27affc770e0af3aedc354ffa9f75cd1ffb74db3d8fec14ad1afff8760fbd85d
+e284c4e516dd52b3d83fabe082cbf54fffce20dd5ff96b9ff286f79bff64ace486ed74c9
+19b8ce22e14dd428ef51ff86f7be8e01e5a1c2fc6bf3d875f1afcc9aff78f33ab8ecbe4a
+87ea9d67bce06ac7eb7ddabf93e580de89d97acaf945ff08f338b9d384f53efadc6ad8b5
+78fea5ef72c5a3ec01b9cd2de051d904db4de1a0d893c7b67b
+ >
+ >>
+
+>>
+dup /HalftoneName 3 index put
+/Halftone defineresource
+pop
diff --git a/Master/xemtex/gslib/image-qa.ps b/Master/xemtex/gslib/image-qa.ps
new file mode 100644
index 00000000000..eb22b919b73
--- /dev/null
+++ b/Master/xemtex/gslib/image-qa.ps
@@ -0,0 +1,1827 @@
+%!PS
+% Copyright (C) 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+%
+% $Id: image-qa.ps,v 1.3.2.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Tests for the image operators
+
+% Specifications for Image operator testing.
+%
+% 1. All 8 standard orientations (0, 90, 180, 270 degree rotations with
+% and without reflection); ditto those orientations perturbed by +/-
+% 10 degrees, and by 45 degrees.
+%
+% Enough space is provided around images on a test page to allow
+% these permutations to use the same page layout. This will make
+% test page construction easier and simplify page checking.
+%
+% 2. All 9 image types (ImageType 1 mask, ImageType 1 opaque,
+% ImageType 3 with all 3 InterleaveTypes and with unequal scaling
+% for InterleaveType 2 and 3, ImageType 4 with both range and
+% single-point matching).
+%
+% 3. DeviceGray, DeviceRGB, and DeviceN color, both direct and Indexed.
+% Indexed color will use the common pallete size of 256 colors.
+%
+% 4. For simple masks, both colored and uncolored Patterns.
+%
+% 5. CombineWithColor true and false; several different colors for the
+% true case (including black, white, other solid colors, halftones,
+% and patterns).
+%
+% 6. Source transparency true and false.
+%
+% 7. Texture transparency true and false.
+%
+% 8. Different RasterOp values.
+%
+% 9. For ImageType 4, different color keys (out-of-range, specific
+% color other than white, range without white).
+%
+% 10. String, file, and procedure data sources; for multi-component
+% color spaces, MultipleDataSources = true. This is tested by
+% constructing string data sources that are used as input to
+% SubFileDecode filter to create a filetype data source. These
+% filters are read into scratch strings for the procedure data
+% source case. The procedure data source scratch string length
+% does not match the raster width, and the width x height is
+% not an integer multiple of the string length.
+%
+% Also for the File case, the number of bytes consumed is
+% checked after the image operator to verify that the exact
+% amount of data is used. This is particularly important when
+% the currentfile is used as a source (possibly through a
+% filter.
+%
+% Image bytes per line are < 500 bytes to exercise direct and
+% buffer copy gs_image_next_planes mode with the default stream
+% buffer size of 512 bytes. Procedure string size is greater
+% than the image bytes per line for the same reason (sM and sD).
+%
+% Total string size is kept below 65535.
+
+/WidthRGB 83 def
+/HeightRGB 89 def
+
+%
+% 11. Banded and non-banded rendering. This can be tested by running
+% test files throuch with different page device parameters to
+% force banding vs. page mode.
+%
+% -------------------------------------------------------------------------
+%
+% Testing the RasterOp-related functions (5/6/7/8) is not necessary at this
+% time. They are well isolated logically.
+%
+% Testing orientation (1) and color masking (9) would be a good idea at some
+% point, because this code has broken many times in the past and has had a
+% long bug tail.
+%
+% The really important things to test are 2 (image type), 3/4 (color space --
+% but only with regard to number of components, plus DeviceN and simple masks
+% with a Pattern, which exercise special control paths), 10 (data source),
+% and 11 (banding modes).
+%
+% ==========================================================================
+
+%
+% Procedure to generate test mask data
+%
+% WM and HM must be defined prior to invocation
+% MaskGen -
+%
+% The mask data is stored into a string named /MaskData
+%
+% The mask consists of a "target". Bits past width WM are
+% filled with 1's to make sure that pad bits are ignored.
+%
+/MaskGen {
+ /H8 HM 8 div def
+ /X0 WM 2 div def
+ /Y0 HM 2 div def
+ /WB WM 7 add 8 div cvi def
+ /MaskData WB HM mul string def
+ /MB [ 128 64 32 16 8 4 2 1 ] def
+ 0 1 HM 1 sub {
+ /Y exch def
+ 0 1 WB 1 sub {
+ /B exch def % byte within the row
+ /C B Y WB mul add def
+ /P 0 def
+ 0 1 7 {
+ /b exch def % bit within the character
+ /X b B 8 mul add def
+ X WM lt
+ { X Y eq
+ X HM 1 sub Y sub eq or
+ Y Y0 gt X X0 sub abs 2 le and or
+ X X0 sub WM div dup mul Y Y0 sub HM div dup mul add sqrt 9 mul cvi 2 mod 1 eq or
+ }
+ { true } % pad bits are always set
+ ifelse
+ % stack: true if pixel is set
+ {
+ MB b get P or /P exch def
+ } if
+ } for % Bits within a byte
+ MaskData C P put
+ } for % Bytes within the row
+ } for % Rows in the mask
+} bind def % MaskGen
+
+%
+% WM and HM must be defined prior to invocation
+% BPC MaskGenBPC -
+%
+% The mask data is stored into a string named /MaskData
+%
+% The mask consists of a "target". BPC is the size of the elements
+% in the MaskData string (must be 4, 8 or 12)
+%
+/MaskGenBPC {
+ /BPC exch def
+ /X0 WM 2 div def
+ /Y0 HM 2 div def
+ /WB WM BPC mul 7 add 8 div cvi def % Width in Bytes
+ /MaskData WB HM mul string def
+ 0 1 HM 1 sub {
+ /Y exch def
+ 0 1 WM 1 sub {
+ /X exch def
+ MaskData % Target string
+ X Y eq
+ X HM 1 sub Y sub eq or
+ Y Y0 gt X X0 sub abs 2 le and or
+ X X0 sub WM div dup mul Y Y0 sub HM div dup mul add sqrt 9 mul cvi 2 mod 1 eq or
+ X BPC mul 8 div Y WB mul add exch
+ [
+ { } % BPC = 0
+ { { 1 } { 0 } ifelse put4bit } % BPC = 4
+ { { 255 } { 0 } ifelse exch cvi exch put } % BPC = 8
+ { { 1 } { 0 } ifelse put12bit } % BPC = 12
+ ] BPC 4 div cvi get exec
+ } for
+ } for % Rows in the mask
+} bind def
+
+% -----------------------------------------------------------------------
+
+% Procedure to generate image data
+%
+% WD and HD must be defined prior to invocation
+% { proc } ImageGen -
+%
+% The procedure is called once for each pixel
+% Local definitions are R, G, B, X and Y
+
+% Example: Generate RGB Chunky pixel data (single data source) BPC = 8
+% /WD WidthRGB def
+% /HD HeightRGB def
+% /RGBData WD HD mul 3 mul string def
+% { X Y WD mul add 3 mul RGBData
+% dup 2 index R 255 mul cvi put
+% dup 2 index 1 add G 255 mul cvi put
+% exch 2 add B 255 mul cvi put
+% } ImageGen
+
+/ImageGen {
+ gsave
+ 0 1 HD 1 sub {
+ /Y exch def
+ 0 1 WD 1 sub {
+ /X exch def
+ /D X WD 2 div sub WD div dup mul Y HD 2 div sub HD div dup mul add sqrt def
+ /D D .6 div def
+ /A X WD 2 div sub Y HD 2 div sub atan 360 div def
+ A % Hue
+ .7 D .3 sub .60 div sub % Saturation
+ dup 0.05 lt
+ { .95 D .8 sub 3 mul sub 3 mul cvi 3 div sqrt } % Level once Saturation < 0
+ { .7 D .25 sub .75 div add } % Level inside
+ ifelse
+ X WD 2 div gt Y HD 2 div sub abs 2 le and { pop 0 } if % asymmetric marker
+ sethsbcolor
+ currentrgbcolor /B exch def /G exch def /R exch def
+ dup exec
+ } for
+ } for
+ pop % discard the procedure
+ grestore
+} bind def
+
+
+% -----------------------------------------------------------------------
+%
+% Procedures for ImageMatrix creation
+/IMLRTB { [ WD 0 0 HD neg 0 HD ] } def
+/IMLRBT { [ WD 0 0 HD 0 0 ] } def
+/IMRLTB { [ WD neg 0 0 HD neg WD HD ] } def
+/IMRLBT { [ WD neg 0 0 HD WD 0 ] } def
+% -----------------------------------------------------------------------
+%
+% Procedure to make invocation of image operators more concise
+%
+% YY, SX, SY, WD and HD should be defined prior to invocation
+% X matrix source decode DoImageMask -
+%
+/DoImageMask {
+ gsave
+ /D exch def
+ /S exch def
+ /M exch def
+ /XX 1 index def
+ YY translate SX SY scale
+ 0 setlinewidth 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto 0 0 lineto stroke
+ .5 .5 translate
+ IR rotate
+ -.5 -.5 translate
+ <<
+ /ImageType 1
+ /Width WM
+ /Height HM
+ /ImageMatrix M
+ /MultipleDataSources false
+ /DataSource S
+ /Decode D
+ /BitsPerComponent 1
+ >>
+ imagemask
+ grestore
+} bind def
+
+% YY, SX, SY, WD and HD should be defined prior to invocation
+% X Y BPC matrix source multi decode DoImage1 -
+%
+/DoImage1 {
+ gsave
+ CSpace setcolorspace
+ /D exch def
+ /MS exch def
+ /S exch def % May be an array of sources
+ /M exch def
+ /BPC exch def
+ /XX 1 index def
+ YY translate SX SY scale
+ 0 setlinewidth 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto 0 0 lineto stroke
+ .5 .5 translate
+ IR rotate
+ -.5 -.5 translate
+ <<
+ /ImageType 1
+ /Width WD
+ /Height HD
+ /ImageMatrix M
+ /MultipleDataSources MS
+ /DataSource S
+ /BitsPerComponent BPC
+ /Decode D
+ >>
+ image
+ grestore
+} bind def
+
+
+% YY, SX, SY, WD and HD should be defined prior to invocation
+% X Y BPC matrix source multi decode MaskColor DoImage4 -
+%
+/DoImage4 {
+ gsave
+ CSpace setcolorspace
+ /MC exch def
+ /D exch def
+ /MS exch def
+ /S exch def % May be an array of sources
+ /M exch def
+ /BPC exch def
+ /XX 1 index def
+ YY translate SX SY scale
+ 0 setlinewidth 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto 0 0 lineto stroke
+ .5 .5 translate
+ IR rotate
+ -.5 -.5 translate
+ <<
+ /ImageType 4
+ /Width WD
+ /Height HD
+ /ImageMatrix M
+ /MultipleDataSources MS
+ /DataSource S
+ /BitsPerComponent BPC
+ /Decode D
+ /MaskColor MC
+ >>
+ image
+ grestore
+} bind def
+
+% YY, SX, SY, W, HD (Data) WM, HM (Mask) should be defined prior to invocation
+% (IT is InterleaveType)
+% X Y BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+%
+/DoImage3 {
+ gsave
+ CSpace setcolorspace
+ /IT exch def
+ /DD exch def
+ /DM exch def
+ /MS exch def
+ /S exch def % May be an array of sources - For InterleaveType 3
+ % S[0] is the Mask DataSource
+ /M exch def
+ /BPC exch def
+ /XX 1 index def
+ YY translate SX SY scale
+ 0 setlinewidth 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto 0 0 lineto stroke
+ .5 .5 translate
+ IR rotate
+ -.5 -.5 translate
+ /DataImage
+ <<
+ /ImageType 1
+ /Width WD
+ /Height HD
+ /ImageMatrix M
+ /MultipleDataSources MS
+ /DataSource IT 3 ne { S } { S 1 get exec } ifelse
+ /BitsPerComponent BPC
+ /Decode DD
+ >>
+ def
+ /MaskImage
+ <<
+ /ImageType 1
+ /Width WM
+ /Height HM
+ /ImageMatrix % construct the mask matrix using signs from the DataImage matrix
+ /M0 M 0 get WD abs div cvi def
+ /M3 M 3 get HD abs div cvi def
+ /M4 M 4 get WD abs div cvi def
+ /M5 M 5 get HD abs div cvi def
+ [ WM M0 mul 0 0 HM M3 mul WM M4 mul HM M5 mul ]
+ IT 3 eq {
+ /DataSource S 0 get exec % DataSource only allowed for InterleaveType 3
+ } if
+ /BitsPerComponent IT 1 eq { BPC } { 1 } ifelse
+ /Decode DM
+ >>
+ def
+ <<
+ /ImageType 3
+ /DataDict DataImage
+ /MaskDict MaskImage
+ /InterleaveType IT
+ >>
+ image
+ grestore
+} bind def
+
+
+% -----------------------------------------------------------------------
+%
+/Helvetica-Bold findfont 20 scalefont /TitleFont exch def
+
+/FontSize 10 def
+/Helvetica-Narrow findfont FontSize scalefont /LegendFont exch def
+
+/blockshow { % like "show" but '\n' causes new-line
+ dup = flush %DEBUG
+ currentpoint /showY exch def /showX exch def
+ {
+ dup 10 ne
+ { 1 string dup 0 4 -1 roll put show }
+ { pop showX showY FontSize sub dup /showY exch def moveto }
+ ifelse
+ } forall
+} bind def
+
+/TX 013 def % Title left X
+/SX 036 def
+/XA 060 def
+/XB XA SX 1.5 mul add def
+/XC XA SX 3.0 mul add def
+/XD XA SX 4.5 mul add def
+/XE XA SX 6.0 mul add def
+/XF XA SX 7.5 mul add def
+/XG XA SX 9.0 mul add def
+/XH XA SX 10.5 mul add def
+/XI XA SX 12.0 mul add def
+/XJ XA SX 13.5 mul add def
+
+/BY 036 def % Bottom Title Top line
+/SY 037 def
+/YA 050 def
+/YB YA SY 1.8 mul add def
+/YC YA SY 3.6 mul add def
+/YD YA SY 5.4 mul add def
+/YE YA SY 7.2 mul add def
+/YF YA SY 9.0 mul add def
+/YG YA SY 10.8 mul add def
+/YH YA SY 12.6 mul add def
+/YI YA SY 14.4 mul add def
+/YJ YA SY 16.2 mul add def
+/YK YA SY 18.0 mul add def
+
+% -----------------------------------------------------------------------
+%
+% Utility procedures to support storing 4 and 12 bit elements in
+% strings.
+%
+% <string> <index> <value> put##bit -
+%
+% <index> will have a fractional part ( .5 ) if the element
+% starts on a 4-bit boundary.
+%
+% <value> is between 0 and 1 and is scaled 0 to 15 (4bit) or
+% 0 to 4095 (12 bit)
+
+/put4bit {
+ 15 mul cvi
+ exch dup cvi dup 3 1 roll eq 3 -1 roll exch
+ { % integer index means high nibble.
+ 16 mul put
+ }
+ { % low nibble -- combine with high nibble
+ 2 index 2 index get or put
+ }
+ ifelse
+} bind def
+
+/put12bit {
+ 1 index cvi /I exch def
+ 2 index /S exch def
+ 4095 mul cvi
+ exch dup dup cvi eq
+ { % integer index means high byte is aligned
+ cvi exch 3 copy 16 div cvi put
+ exch 1 add exch 15 and 16 mul put
+ }
+ { % low nibble -- combine with high nibble
+ cvi exch 3 copy 2 index 2 index get exch 256 div cvi or put
+ 255 and exch 1 add exch put
+ }
+ ifelse
+} bind def
+
+% -----------------------------------------------------------------------
+%
+% Procedures to use generated string data as procedure or files
+
+/WD WidthRGB def
+/HD HeightRGB def
+
+/sM WidthRGB 2 mul 1 sub string def % long enough to hold more than one mask line
+/sD WidthRGB 7 mul 1 sub string def % long enough to hold more than one 12 bit RGB line
+ % worst case is 12bit ImageType3 InterleaveType 1 == 48 bits
+
+/MaskDProc {
+ /FM MaskData dup length () /SubFileDecode filter def
+ { { FM sM readstring pop } }
+} bind def
+
+/FileTailString (12345) def % Marker string to check file data usage
+
+/AppendFileTail { % <string> AppendFileTail <string_with_tail> <original_length>
+ dup length FileTailString length add string
+ dup 0 3 index putinterval
+ dup 2 index length FileTailString putinterval
+ exch length
+} bind def
+
+/MaskDFile {
+ MaskData dup length () /SubFileDecode filter
+ /MDF 1 index def
+} bind def
+
+/RGBDProc {
+ /FD RGBData dup length () /SubFileDecode filter def
+ { { FD sD readstring pop } }
+} bind def
+
+/RGBDFile {
+ RGBData dup length () /SubFileDecode filter
+ /RGBDF 1 index def
+} bind def
+
+/sR WidthRGB 2 mul 1 sub string def % long enough to hold more than one line of 12 bit data
+/sG WidthRGB 2 mul 1 sub string def
+/sB WidthRGB 2 mul 1 sub string def
+
+/RDProc {
+ /FR RData dup length () /SubFileDecode filter def
+ { FR sR readstring pop }
+} bind def
+
+/GDProc {
+ /FG GData dup length () /SubFileDecode filter def
+ { FG sG readstring pop }
+} bind def
+
+/BDProc {
+ /FB BData dup length () /SubFileDecode filter def
+ { FB sB readstring pop }
+} bind def
+
+/RDFile {
+ RData dup length () /SubFileDecode filter
+ /RDF 1 index def
+} bind def
+
+/GDFile {
+ GData dup length () /SubFileDecode filter
+ /GDF 1 index def
+} bind def
+
+/BDFile {
+ BData dup length () /SubFileDecode filter
+ /BDF 1 index def
+} bind def
+
+% -----------------------------------------------------------------------
+%
+% Procedure to handle fileposition. Ghostscript has a private
+% operator .fileposition that works when fileposition does not
+%
+% <file> tryfilepos
+% Returns: fileposition true if successful
+% 0 false if not
+/tryfilepos {
+ /.fileposition where
+ { pop /.fileposition load } % most likely to succeed
+ { /fileposition load }
+ ifelse
+ stopped
+ { pop 0 false }
+ { true }
+ ifelse
+} bind def
+
+% -----------------------------------------------------------------------
+%
+% Procedure to provide =only operator if not present. Suggested
+% by Alex Cherepanov to use =print operator present on some Adobe
+% implementations.
+/=only where
+ { pop }
+ { /=print where { pop /=print load } { /print load } ifelse
+ /=only exch def
+ }
+ifelse
+
+% -----------------------------------------------------------------------
+%
+% Procedure to make sure that the file is at the EOF.
+% added above (string == FileTailString.
+%
+% If not, it will mark the image area with a red "F"
+%
+% <string> <title> <file> CheckFileTail - XX is the horizontal position
+% YY is the vertical position
+% SX,SY determine size of "F" if fail
+/CheckFileTail {
+ dup
+ status not dup % status false says no longer valid
+ { (Unexpected EOF: XX,YY=) print XX =only (,) print YY = false }
+ { 1 index tryfilepos not exch 5 index length ne or dup
+ { 3 index print ( fileposition = ) print
+ 2 index tryfilepos pop =only
+ ( doesn't match expected = ) print 4 index length = flush
+ }
+ if
+ }
+ ifelse
+ or
+ {
+ gsave .8 0 0 setrgbcolor
+ SX 4 div setlinewidth
+ XX YY moveto 0 SY rlineto SX 0 rlineto stroke
+ XX YY SY .5 mul add moveto SX .5 mul 0 rlineto stroke
+ grestore
+ }
+ if
+ pop pop pop
+} bind def
+
+/CSpaceName { % - CSpaceName <string>
+ CSpace dup type /arraytype eq { 0 get } if
+ 15 string cvs
+} bind def
+% -----------------------------------------------------------------------
+%
+% tests
+
+/CheckImage {
+
+ /IR 0 def
+ /CSpace /DeviceRGB def
+
+ % Use an unusual (unpleasant?) underlying color
+ .6 .95 .4 setrgbcolor clippath fill
+
+ 0 0 0 setrgbcolor
+ TitleFont setfont
+ 200 760 moveto (Image Type 3 Tests) show
+ 200 740 moveto (Rotation Angle = ) show IR 3 string cvs show
+ 170 720 moveto (Colorspace = ) show CSpaceName show
+ LegendFont setfont
+
+ .4 .1 .7 setrgbcolor % contrasting color for stencil masking
+ /SX SX 2 mul def /SY SY 2 mul def
+ /YY 780 SY sub def
+ MaskGen
+ TX IMLRTB MaskData [1 0] DoImageMask
+
+ /RGBData WD HD mul 3 mul string def
+ { X Y WD mul add 3 mul RGBData
+ dup 2 index R 255 mul cvi put
+ dup 2 index 1 add G 255 mul cvi put
+ exch 2 add B 255 mul cvi put
+ } ImageGen
+
+ % X BPC matrix source multi decode
+ XI 8 IMLRTB RGBData false [0 1 0 1 0 1] DoImage1
+ /SX SX 2 div def /SY SY 2 div def
+
+ showpage
+} def
+
+% -----------------------------------------------------------------------
+%
+% Type 1 and Type 4 Tests
+
+% /CSpace and /IR are defined in order to generate various pages
+/T1T4Tests { %
+
+ % Use an unusual (unpleasant?) underlying color
+ .6 .95 .4 setrgbcolor clippath fill
+ 0 0 0 setrgbcolor
+
+ TitleFont setfont
+ 120 760 moveto (Image Type 1 and ImageType 4 Tests) show
+ 200 740 moveto (Rotation Angle = ) show IR 3 string cvs show
+ 170 720 moveto (Colorspace = ) show CSpaceName show
+ LegendFont setfont
+
+ XA BY moveto (Decode\nInverted) blockshow
+ XB BY moveto ( IMLRTB\nDS=string) blockshow
+ XC BY moveto ( IMLRBT\nDS=string) blockshow
+ XD BY moveto ( IMRLTB\nDS=string) blockshow
+ XE BY moveto ( IMRLBT\nDS=string) blockshow
+ XF BY moveto (IMLRTB\nDS=proc) blockshow
+ XG BY moveto (IMLRTB\nDS=file) blockshow
+ XH BY moveto ( Multi\nDS=string) blockshow
+ XI BY moveto ( Multi\nDS=proc) blockshow
+ XJ BY moveto ( Multi\nDS=file) blockshow
+
+ .4 .1 .7 setrgbcolor % contrasting color for stencil masking
+
+ /WM WD def
+ /HM HD def
+ /SX SX 2 mul def /SY SY 2 mul def
+ /YY 780 SY sub def
+ MaskGen
+ TX IMLRTB MaskData [1 0] DoImageMask
+
+ /RGBData WD HD mul 3 mul string def
+ { X Y WD mul add 3 mul RGBData
+ dup 2 index R 255 mul cvi put
+ dup 2 index 1 add G 255 mul cvi put
+ exch 2 add B 255 mul cvi put
+ } ImageGen
+
+ % X BPC matrix source multi decode
+ XI 8 IMLRTB RGBData false [0 1 0 1 0 1] DoImage1
+ /SX SX 2 div def /SY SY 2 div def
+
+ % ----------------------------------------------------------------------
+ % Type 1 Stencil Mask Images
+
+ /YY YA def
+ TX YA SY add moveto (\nType 1\nStencil\nMask) blockshow
+
+ MaskGen
+
+ % X matrix source decode
+ XA IMLRTB MaskData [0 1] DoImageMask
+ XB IMLRTB MaskData [1 0] DoImageMask
+ XC IMLRBT MaskData [1 0] DoImageMask
+ XD IMRLTB MaskData [1 0] DoImageMask
+ XE IMRLBT MaskData [1 0] DoImageMask
+ XF IMLRTB MaskDProc [1 0] DoImageMask
+ XG IMLRTB MaskDFile [1 0] DoImageMask
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 1 RGB Single Data Sources, BPC==8
+
+ /YY YB def
+ TX YY SY add moveto (\nType 1\nRGB\nBPC=8) blockshow
+
+ /RGBData WD HD mul 3 mul string def
+ { X Y WD mul add 3 mul RGBData
+ dup 2 index R 255 mul cvi put
+ dup 2 index 1 add G 255 mul cvi put
+ exch 2 add B 255 mul cvi put
+ } ImageGen
+
+ % X BPC matrix source multi decode
+ XA 8 IMLRTB RGBData false [1 0 1 0 1 0] DoImage1
+ XB 8 IMLRTB RGBData false [0 1 0 1 0 1] DoImage1
+ XC 8 IMLRBT RGBData false [0 1 0 1 0 1] DoImage1
+ XD 8 IMRLTB RGBData false [0 1 0 1 0 1] DoImage1
+ XE 8 IMRLBT RGBData false [0 1 0 1 0 1] DoImage1
+ XF 8 IMLRTB RGBDProc false [0 1 0 1 0 1] DoImage1
+ XG 8 IMLRTB RGBDFile false [0 1 0 1 0 1] DoImage1
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 1 RGB Multiple Data Sources, BPC==8
+
+ WD HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ { X Y WD mul add
+ RData 1 index R 255 mul cvi put
+ GData 1 index G 255 mul cvi put
+ BData exch B 255 mul cvi put
+ } ImageGen
+
+
+ % X BPC matrix source multi decode
+ XH 8 IMLRTB [ RData GData BData ] true [0 1 0 1 0 1] DoImage1
+ XI 8 IMLRTB [ RDProc GDProc BDProc ] true [0 1 0 1 0 1] DoImage1
+ XJ 8 IMLRTB [ RDFile GDFile BDFile ] true [0 1 0 1 0 1] DoImage1
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Single Data Sources, BPC==8, mask black
+
+ /YY YE def
+ TX YY SY add moveto (\nType 4\nBPC=8\nmask=black) blockshow
+
+ % X BPC matrix source multi decode MaskColor
+ XA 8 IMLRTB RGBData false [1 0 1 0 1 0] [ 000 000 000 ] DoImage4
+ XB 8 IMLRTB RGBData false [0 1 0 1 0 1] [ 000 000 000 ] DoImage4
+ XC 8 IMLRBT RGBData false [0 1 0 1 0 1] [ 000 000 000 ] DoImage4
+ XD 8 IMRLTB RGBData false [0 1 0 1 0 1] [ 000 000 000 ] DoImage4
+ XE 8 IMRLBT RGBData false [0 1 0 1 0 1] [ 000 000 000 ] DoImage4
+ XF 8 IMLRTB RGBDProc false [0 1 0 1 0 1] [ 000 000 000 ] DoImage4
+ XG 8 IMLRTB RGBDFile false [0 1 0 1 0 1] [ 000 000 000 ] DoImage4
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Multiple Data Sources, BPC==8, mask black
+
+ % X BPC matrix source multi decode MaskColor
+ XH 8 IMLRTB [ RData GData BData ] true [0 1 0 1 0 1] [ 000 000 000 ] DoImage4
+ XI 8 IMLRTB [ RDProc GDProc BDProc ] true [0 1 0 1 0 1] [ 000 000 000 ] DoImage4
+ XJ 8 IMLRTB [ RDFile GDFile BDFile ] true [0 1 0 1 0 1] [ 000 000 000 ] DoImage4
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Single Data Sources, BPC==8, mask white
+
+ /YY YF def
+ TX YY SY add moveto (\nType 4\nBPC=8\nmask=white) blockshow
+
+ % X BPC matrix source multi decode MaskColor
+ XA 8 IMLRTB RGBData false [1 0 1 0 1 0] [ 255 255 255 ] DoImage4
+ gsave .5 .2 .2 setrgbcolor XB YY SX 13 mul SY rectfill grestore
+ XB 8 IMLRTB RGBData false [0 1 0 1 0 1] [ 255 255 255 ] DoImage4
+ XC 8 IMLRBT RGBData false [0 1 0 1 0 1] [ 255 255 255 ] DoImage4
+ XD 8 IMRLTB RGBData false [0 1 0 1 0 1] [ 255 255 255 ] DoImage4
+ XE 8 IMRLBT RGBData false [0 1 0 1 0 1] [ 255 255 255 ] DoImage4
+ XF 8 IMLRTB RGBDProc false [0 1 0 1 0 1] [ 255 255 255 ] DoImage4
+ XG 8 IMLRTB RGBDFile false [0 1 0 1 0 1] [ 255 255 255 ] DoImage4
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Multiple Data Sources, BPC==8, mask white
+
+ % X BPC matrix source multi decode MaskColor
+ XH 8 IMLRTB [ RData GData BData ] true [0 1 0 1 0 1] [ 255 255 255 ] DoImage4
+ XI 8 IMLRTB [ RDProc GDProc BDProc ] true [0 1 0 1 0 1] [ 255 255 255 ] DoImage4
+ XJ 8 IMLRTB [ RDFile GDFile BDFile ] true [0 1 0 1 0 1] [ 255 255 255 ] DoImage4
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Single Data Sources, BPC==8, mask gray
+
+ /YY YG def
+ TX YY SY add moveto (\nType 4\nBPC=8\nmask=gray) blockshow
+
+ % X BPC matrix source multi decode MaskColor
+ XA 8 IMLRTB RGBData false [1 0 1 0 1 0] [ 147 147 147 ] DoImage4
+ XB 8 IMLRTB RGBData false [0 1 0 1 0 1] [ 147 147 147 ] DoImage4
+ XC 8 IMLRBT RGBData false [0 1 0 1 0 1] [ 147 147 147 ] DoImage4
+ XD 8 IMRLTB RGBData false [0 1 0 1 0 1] [ 147 147 147 ] DoImage4
+ XE 8 IMRLBT RGBData false [0 1 0 1 0 1] [ 147 147 147 ] DoImage4
+ XF 8 IMLRTB RGBDProc false [0 1 0 1 0 1] [ 147 147 147 ] DoImage4
+ XG 8 IMLRTB RGBDFile false [0 1 0 1 0 1] [ 147 147 147 ] DoImage4
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Multiple Data Sources, BPC==8, mask gray
+
+ % X BPC matrix source multi decode MaskColor
+ XH 8 IMLRTB [ RData GData BData ] true [0 1 0 1 0 1] [ 147 147 147 ] DoImage4
+ XI 8 IMLRTB [ RDProc GDProc BDProc ] true [0 1 0 1 0 1] [ 147 147 147 ] DoImage4
+ XJ 8 IMLRTB [ RDFile GDFile BDFile ] true [0 1 0 1 0 1] [ 147 147 147 ] DoImage4
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Single Data Sources, BPC==8, mask range
+
+ /YY YH def
+ TX YY SY add moveto (\nType 4\nBPC=8\nmask range) blockshow
+
+ % X BPC matrix source multi decode MaskColor
+ XA 8 IMLRTB RGBData false [1 0 1 0 1 0] [ 020 200 020 200 020 200 ] DoImage4
+ XB 8 IMLRTB RGBData false [0 1 0 1 0 1] [ 020 200 020 200 020 200 ] DoImage4
+ XC 8 IMLRBT RGBData false [0 1 0 1 0 1] [ 020 200 020 200 020 200 ] DoImage4
+ XD 8 IMRLTB RGBData false [0 1 0 1 0 1] [ 020 200 020 200 020 200 ] DoImage4
+ XE 8 IMRLBT RGBData false [0 1 0 1 0 1] [ 020 200 020 200 020 200 ] DoImage4
+ XF 8 IMLRTB RGBDProc false [0 1 0 1 0 1] [ 020 200 020 200 020 200 ] DoImage4
+ XG 8 IMLRTB RGBDFile false [0 1 0 1 0 1] [ 020 200 020 200 020 200 ] DoImage4
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Multiple Data Sources, BPC==8, mask range
+
+ % X Y SX SY BPC matrix source multi decode MaskColor
+ XH 8 IMLRTB [ RData GData BData ] true [0 1 0 1 0 1] [ 020 200 020 200 020 200 ] DoImage4
+ XI 8 IMLRTB [ RDProc GDProc BDProc ] true [0 1 0 1 0 1] [ 020 200 020 200 020 200 ] DoImage4
+ XJ 8 IMLRTB [ RDFile GDFile BDFile ] true [0 1 0 1 0 1] [ 020 200 020 200 020 200 ] DoImage4
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 1 RGB Single Data Sources, BPC==12
+
+ /YY YC def
+ TX YY SY add moveto (\nType 1\nRGB\nBPC=12) blockshow
+
+ /RGBData WD 36 mul 7 add 8 div cvi HD mul string def
+ {
+ X 36 mul 8 div Y WD 36 mul 7 add 8 div cvi mul add
+ RGBData 1 index R put12bit
+ RGBData 1 index 1.5 add G put12bit
+ RGBData exch 3 add B put12bit
+ } ImageGen
+
+ % X BPC matrix source multi decode
+ XA 12 IMLRTB RGBData false [1 0 1 0 1 0] DoImage1
+ XB 12 IMLRTB RGBData false [0 1 0 1 0 1] DoImage1
+ XC 12 IMLRBT RGBData false [0 1 0 1 0 1] DoImage1
+ XD 12 IMRLTB RGBData false [0 1 0 1 0 1] DoImage1
+ XE 12 IMRLBT RGBData false [0 1 0 1 0 1] DoImage1
+ XF 12 IMLRTB RGBDProc false [0 1 0 1 0 1] DoImage1
+ XG 12 IMLRTB RGBDFile false [0 1 0 1 0 1] DoImage1
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 1 RGB Multiple Data Sources, BPC==12
+
+ WD 3 mul 1 add 2 div cvi HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ {
+ X 3 mul 2 div Y WD 3 mul 1 add 2 div cvi mul add
+ RData 1 index R put12bit
+ GData 1 index G put12bit
+ BData exch B put12bit
+ } ImageGen
+
+ % X BPC matrix source multi decode
+ XH 12 IMLRTB [ RData GData BData ] true [0 1 0 1 0 1] DoImage1
+ XI 12 IMLRTB [ RDProc GDProc BDProc ] true [0 1 0 1 0 1] DoImage1
+ XJ 12 IMLRTB [ RDFile GDFile BDFile ] true [0 1 0 1 0 1] DoImage1
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Single Data Sources, BPC==12, mask range
+
+ /YY YI def
+ TX YY SY add moveto (\nType 4\nBPC=12\nmask range) blockshow
+
+ % X BPC matrix source multi decode MaskColor
+ XA 12 IMLRTB RGBData false [1 0 1 0 1 0] [ 300 3000 300 3000 300 3000 ] DoImage4
+ XB 12 IMLRTB RGBData false [0 1 0 1 0 1] [ 300 3000 300 3000 300 3000 ] DoImage4
+ XC 12 IMLRBT RGBData false [0 1 0 1 0 1] [ 300 3000 300 3000 300 3000 ] DoImage4
+ XD 12 IMRLTB RGBData false [0 1 0 1 0 1] [ 300 3000 300 3000 300 3000 ] DoImage4
+ XE 12 IMRLBT RGBData false [0 1 0 1 0 1] [ 300 3000 300 3000 300 3000 ] DoImage4
+ XF 12 IMLRTB RGBDProc false [0 1 0 1 0 1] [ 300 3000 300 3000 300 3000 ] DoImage4
+ XG 12 IMLRTB RGBDFile false [0 1 0 1 0 1] [ 300 3000 300 3000 300 3000 ] DoImage4
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Multiple Data Sources, BPC==12, mask range
+
+ % X BPC matrix source multi decode MaskColor
+ XH 12 IMLRTB [ RData GData BData ] true [0 1 0 1 0 1] [ 300 3000 300 3000 300 3000 ] DoImage4
+ XI 12 IMLRTB [ RDProc GDProc BDProc ] true [0 1 0 1 0 1] [ 300 3000 300 3000 300 3000 ] DoImage4
+ XJ 12 IMLRTB [ RDFile GDFile BDFile ] true [0 1 0 1 0 1] [ 300 3000 300 3000 300 3000 ] DoImage4
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 1 RGB Single Data Sources, BPC==4
+
+ /YY YD def
+ TX YY SY add moveto (\nType 1\nRGB\nBPC=4) blockshow
+
+ /RGBData WD 12 mul 7 add 8 div cvi HD mul string def
+ {
+ X 12 mul 8 div Y WD 12 mul 7 add 8 div cvi mul add
+ RGBData 1 index R put4bit
+ RGBData 1 index 0.5 add G put4bit
+ RGBData exch 1.0 add B put4bit
+ } ImageGen
+
+ % X BPC matrix source multi decode
+ XA 4 IMLRTB RGBData false [1 0 1 0 1 0] DoImage1
+ XB 4 IMLRTB RGBData false [0 1 0 1 0 1] DoImage1
+ XC 4 IMLRBT RGBData false [0 1 0 1 0 1] DoImage1
+ XD 4 IMRLTB RGBData false [0 1 0 1 0 1] DoImage1
+ XE 4 IMRLBT RGBData false [0 1 0 1 0 1] DoImage1
+ XF 4 IMLRTB RGBDProc false [0 1 0 1 0 1] DoImage1
+ XG 4 IMLRTB RGBDFile false [0 1 0 1 0 1] DoImage1
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 1 RGB Multiple Data Sources, BPC==4
+
+ WD 1 add 2 div cvi HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ {
+ X 2 div Y WD 1 add 2 div cvi mul add
+ RData 1 index R put4bit
+ GData 1 index G put4bit
+ BData exch B put4bit
+ } ImageGen
+
+ % X BPC matrix source multi decode
+ XH 4 IMLRTB [ RData GData BData ] true [0 1 0 1 0 1] DoImage1
+ XI 4 IMLRTB [ RDProc GDProc BDProc ] true [0 1 0 1 0 1] DoImage1
+ XJ 4 IMLRTB [ RDFile GDFile BDFile ] true [0 1 0 1 0 1] DoImage1
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Single Data Sources, BPC==4, mask range
+
+ /YY YJ def
+ TX YY SY add moveto (\nType 4\nBPC=4\nmask range) blockshow
+
+ % X BPC matrix source multi decode MaskColor
+ XA 4 IMLRTB RGBData false [1 0 1 0 1 0] [ 1 10 1 10 1 10 ] DoImage4
+ XB 4 IMLRTB RGBData false [0 1 0 1 0 1] [ 1 10 1 10 1 10 ] DoImage4
+ XC 4 IMLRBT RGBData false [0 1 0 1 0 1] [ 1 10 1 10 1 10 ] DoImage4
+ XD 4 IMRLTB RGBData false [0 1 0 1 0 1] [ 1 10 1 10 1 10 ] DoImage4
+ XE 4 IMRLBT RGBData false [0 1 0 1 0 1] [ 1 10 1 10 1 10 ] DoImage4
+ XF 4 IMLRTB RGBDProc false [0 1 0 1 0 1] [ 1 10 1 10 1 10 ] DoImage4
+ XG 4 IMLRTB RGBDFile false [0 1 0 1 0 1] [ 1 10 1 10 1 10 ] DoImage4
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Multiple Data Sources, BPC==4, mask range
+
+ % X BPC matrix source multi decode MaskColor
+ XH 4 IMLRTB [ RData GData BData ] true [0 1 0 1 0 1] [ 1 10 1 10 1 10 ] DoImage4
+ XI 4 IMLRTB [ RDProc GDProc BDProc ] true [0 1 0 1 0 1] [ 1 10 1 10 1 10 ] DoImage4
+ XJ 4 IMLRTB [ RDFile GDFile BDFile ] true [0 1 0 1 0 1] [ 1 10 1 10 1 10 ] DoImage4
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ showpage
+
+} bind def % T1T4Tests
+
+% -----------------------------------------------------------------------
+%
+% Type 3 Tests
+
+/T3Tests {
+ % Use an unusual (unpleasant?) underlying color
+ .6 .95 .4 setrgbcolor clippath fill
+
+ 0 0 0 setrgbcolor
+ TitleFont setfont
+ 200 760 moveto (Image Type 3 Tests) show
+ 200 740 moveto (Rotation Angle = ) show IR 3 string cvs show
+ 170 720 moveto (Colorspace = ) show CSpaceName show
+ LegendFont setfont
+
+ .4 .1 .7 setrgbcolor % contrasting color for stencil masking
+
+ /WM WD def
+ /HM HD def
+ /SX SX 2 mul def /SY SY 2 mul def
+ /YY 780 SY sub def
+ MaskGen
+ XA IMLRTB MaskData [1 0] DoImageMask
+
+ /RGBData WD HD mul 3 mul string def
+ { X Y WD mul add 3 mul RGBData
+ dup 2 index R 255 mul cvi put
+ dup 2 index 1 add G 255 mul cvi put
+ exch 2 add B 255 mul cvi put
+ } ImageGen
+
+ % X BPC matrix source multi decode
+ XH 8 IMLRTB RGBData false [0 1 0 1 0 1] DoImage1
+ /SX SX 2 div def /SY SY 2 div def
+
+% ----------------------------------------------------------------------
+% InterleaveType 1, BPC==8, WM=WD, HM=HD
+% IT 1 is what GS calls "chunky pixel"
+ /YY YA def
+ TX YY SY add moveto (\nIntType 1\nBPC=8) blockshow
+
+ % Generate the MaskData first
+ 8 MaskGenBPC
+
+ % Generate the Data Image (uses the MaskData)
+ /RGBData WD HD mul 4 mul string def
+ { X Y WD mul add 4 mul % 4 bytes Mask,Red,Green,Blue
+ RGBData
+ dup 2 index MaskData X Y WB mul add get put
+ dup 2 index 1 add R 255 mul cvi put
+ dup 2 index 2 add G 255 mul cvi put
+ exch 3 add B 255 mul cvi put
+ }
+ ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 8 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 1 DoImage3
+ XB 8 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 1 DoImage3
+ XC 8 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 1 DoImage3
+ XD 8 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XE 8 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XF 8 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XG 8 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XH 8 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XI 8 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 1, BPC==12, WM=WD, HM=HD
+% IT 1 is what GS calls "chunky pixel"
+ /YY YB def
+ TX YY SY add moveto (\nIntType 1\nBPC=12) blockshow
+
+ % Generate the MaskData first
+ 12 MaskGenBPC
+
+ % Generate the Data Image (uses the MaskData)
+ /RGBData WD HD mul 6 mul string def
+ { X Y WD mul add 6 mul % 6 bytes Mask,Red,Green,Blue
+ RGBData
+ dup 2 index
+ MaskData X 1.5 mul .5 add cvi
+ Y WB mul add get % get the aligned mask byte (hi or lo)
+ 0 eq { 0 } { 1 } ifelse
+ put12bit
+ dup 2 index 1.5 add R put12bit
+ dup 2 index 3.0 add G put12bit
+ exch 4.5 add B put12bit
+ }
+ ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 12 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 1 DoImage3
+ XB 12 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 1 DoImage3
+ XC 12 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 1 DoImage3
+ XD 12 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XE 12 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XF 12 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XG 12 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XH 12 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XI 12 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 1, BPC==4, WM=WD, HM=HD
+% IT 1 is what GS calls "chunky pixel"
+ /YY YC def
+ TX YY SY add moveto (\nIntType 1\nBPC=4) blockshow
+
+ % Generate the MaskData first
+ 4 MaskGenBPC
+
+ % Generate the Data Image (uses the MaskData)
+ /RGBData WD HD mul 2 mul string def
+ { X Y WD mul add 2 mul % 2 bytes Mask,Red,Green,Blue
+ RGBData
+ dup 2 index MaskData X 2 div cvi Y WB mul add get
+ X 1 and 0 eq { 128 div cvi } { 1 and } ifelse
+ put4bit
+ dup 2 index 0.5 add R put4bit
+ dup 2 index 1.0 add G put4bit
+ exch 1.5 add B put4bit
+ }
+ ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 4 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 1 DoImage3
+ XB 4 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 1 DoImage3
+ XC 4 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 1 DoImage3
+ XD 4 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XE 4 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XF 4 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XG 4 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XH 4 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XI 4 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 2, BPC==8, WM=WD, HM=HD
+% IT 2 is line interleave -- Mask line follwoed by Data line
+% RGB Image Data must be chunky (MultipleDatasources==false).
+ /YY YD def
+ TX YY SY add moveto (\nIntType 2\nBPC=8) blockshow
+
+ % Generate the MaskData first
+ MaskGen
+
+ % Generate the Data Image (uses the MaskData)
+ /BPL WD 3 mul WB add cvi def % BytesPerLine
+ /RGBData BPL HD mul string def
+ { X 3 mul Y BPL mul add WB add % 3 bytes Red,Green,Blue + Mask Bytes
+ X 0 eq {
+ RGBData 1 index WB sub
+ MaskData Y WB mul WB getinterval
+ putinterval
+ } if
+ RGBData
+ dup 2 index R 255 mul cvi put
+ dup 2 index 1 add G 255 mul cvi put
+ exch 2 add B 255 mul cvi put
+ }
+ ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 8 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 2 DoImage3
+ XB 8 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 2 DoImage3
+ XC 8 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 2 DoImage3
+ XD 8 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XE 8 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XF 8 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XG 8 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XH 8 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XI 8 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 2, BPC==12, WM=WD, HM=HD
+ /YY YE def
+ TX YY SY add moveto (\nIntType 2\nBPC=12) blockshow
+
+ % Generate the Data Image (uses the MaskData)
+ /BPL WD 36 mul 7 add 8 div cvi WB add def % BytesPerLine
+ /RGBData BPL HD mul string def
+ { X 36 mul 8 div Y BPL mul add WB add
+ X 0 eq {
+ RGBData 1 index WB sub cvi
+ MaskData Y WB mul WB getinterval
+ putinterval
+ } if
+ RGBData
+ dup 2 index R put12bit
+ dup 2 index 1.5 add G put12bit
+ exch 3.0 add B put12bit
+ }
+ ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 12 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 2 DoImage3
+ XB 12 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 2 DoImage3
+ XC 12 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 2 DoImage3
+ XD 12 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XE 12 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XF 12 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XG 12 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XH 12 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XI 12 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 2, BPC==4, WM=WD, HM=HD
+ /YY YF def
+ TX YY SY add moveto (\nIntType 2\nBPC=4) blockshow
+
+ % Generate the Data Image (uses the MaskData)
+ /BPL WD 12 mul 7 add 8 div cvi WB add def % BytesPerLine
+ /RGBData BPL HD mul string def
+ { X 12 mul 8 div Y BPL mul add WB add
+ X 0 eq {
+ RGBData 1 index WB sub cvi
+ MaskData Y WB mul WB getinterval
+ putinterval
+ } if
+ RGBData
+ dup 2 index R put4bit
+ dup 2 index 0.5 add G put4bit
+ exch 1.0 add B put4bit
+ }
+ ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 4 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 2 DoImage3
+ XB 4 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 2 DoImage3
+ XC 4 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 2 DoImage3
+ XD 4 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XE 4 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XF 4 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XG 4 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XH 4 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XI 4 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 2, BPC==8, WM=.6*WD, HM=HD/2
+% IT 2 is line interleave -- Mask line follwoed by Data line
+% RGB Image Data must be chunky (MultipleDatasources==false).
+ /YY YG def
+ TX YY SY add moveto (\nIntType 2\nBPC=8\nWM=.6*WD\nHM=HD/2) blockshow
+
+ % Generate the MaskData first
+ /WM WD .6 mul cvi def
+ /HM HD 2 div cvi def
+ /saveHD HD def
+ /HD HM 2 mul def % make HD even for this exercise
+ MaskGen
+
+ % Generate the Data Image (uses the MaskData)
+ /BPL WD 3 mul def % BytesPerLine RGB Data
+ /RGBData BPL HD mul WB HM mul add string def
+ { X 3 mul Y BPL mul add Y 2 div cvi 1 add WB mul add % 3 bytes Red,Green,Blue + Mask
+ X 0 eq Y 1 and 0 eq and { % Do one row of Mask every other image row
+ RGBData 1 index WB sub
+ MaskData Y 2 div cvi WB mul WB getinterval
+ putinterval
+ } if
+ RGBData
+ dup 2 index R 255 mul cvi put
+ dup 2 index 1 add G 255 mul cvi put
+ exch 2 add B 255 mul cvi put
+ }
+ ImageGen
+
+%DEBUG /xx (xx) (w) file def
+%DEBUG 0 1 HM 1 sub { MaskData exch WB mul WB getinterval xx exch writehexstring xx (\n) writestring } for
+%DEBUG xx (----------------------------------------------------------------\n) writestring
+%DEBUG 0 2 HD 1 sub {
+%DEBUG RGBData 1 index BPL mul 2 index 2 div cvi WB mul add
+%DEBUG WB getinterval xx exch writehexstring xx (\n) writestring
+%DEBUG RGBData 1 index BPL mul 2 index 2 div cvi 1 add WB mul add
+%DEBUG BPL getinterval xx exch writehexstring xx (\n) writestring
+%DEBUG RGBData 1 index 1 add BPL mul 2 index 2 div cvi 1 add WB mul add
+%DEBUG BPL getinterval xx exch writehexstring xx (\n) writestring
+%DEBUG pop
+%DEBUG } for
+%DEBUG xx closefile
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 8 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 2 DoImage3
+ XB 8 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 2 DoImage3
+ XC 8 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 2 DoImage3
+ XD 8 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XE 8 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XF 8 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XG 8 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XH 8 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XI 8 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ /HD saveHD def % put odd HD back
+
+% ----------------------------------------------------------------------
+% InterleaveType 2, BPC==8, WM=1.3*WD, HM=2*HD
+% IT 2 is line interleave -- Mask line follwoed by Data line
+% RGB Image Data must be chunky (MultipleDatasources==false).
+ /YY YH def
+ TX YY SY add moveto (\nIntType 2\nBPC=8\nWM=1.3*WD\nHM=2*HD) blockshow
+
+ % Generate the MaskData first
+ /WM WD 1.3 mul cvi def
+ /HM HD 2 mul def
+ MaskGen
+
+ % Generate the Data Image (uses the MaskData)
+ /HR HM HD div cvi def
+ /BPL WD 3 mul WB HR mul add cvi def % BytesPerLine
+ /RGBData BPL HD mul string def
+ { X 3 mul Y BPL mul add WB HR mul add % 3 bytes Red,Green,Blue + Mask Bytes
+ X 0 eq { % Do HM/HD rows of Mask
+ RGBData 1 index WB HR mul sub
+ MaskData Y WB HR mul mul WB HR mul getinterval
+ putinterval
+ } if
+ RGBData
+ dup 2 index R 255 mul cvi put
+ dup 2 index 1 add G 255 mul cvi put
+ exch 2 add B 255 mul cvi put
+ }
+ ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 8 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 2 DoImage3
+ XB 8 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 2 DoImage3
+ XC 8 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 2 DoImage3
+ XD 8 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XE 8 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XF 8 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XG 8 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XH 8 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XI 8 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+% ----------------------------------------------------------------------
+% InterleaveType 2, BPC==12, WM=1.3*WD, HM=2*HD
+ /YY YI def
+ TX YY SY add moveto (\nIntType 2\nBPC=12\nWM=1.3*WD\nHM=2*HD) blockshow
+
+ % Generate the Data Image (uses the MaskData)
+ /HR HM HD div cvi def
+ /BPL WD 36 mul 7 add 8 div cvi WB HR mul add def % BytesPerLine
+ /RGBData BPL HD mul string def
+ { X 36 mul 8 div Y BPL mul add WB HR mul add
+ X 0 eq {
+ RGBData 1 index WB HR mul sub cvi
+ MaskData Y WB HR mul mul WB HR mul getinterval
+ putinterval
+ } if
+ RGBData
+ dup 2 index R put12bit
+ dup 2 index 1.5 add G put12bit
+ exch 3.0 add B put12bit
+ }
+ ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 12 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 2 DoImage3
+ XB 12 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 2 DoImage3
+ XC 12 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 2 DoImage3
+ XD 12 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XE 12 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XF 12 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XG 12 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XH 12 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XI 12 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 2, BPC==4, WM=1.3*WD, HM=2*HD
+ /YY YJ def
+ TX YY SY add moveto (\nIntType 2\nBPC=4\nWM=1.3*WD\nHM=2*HD) blockshow
+
+ % Generate the Data Image (uses the MaskData)
+ /HR HM HD div cvi def
+ /BPL WD 12 mul 7 add 8 div cvi WB HR mul add def % BytesPerLine
+ /RGBData BPL HD mul string def
+ { X 12 mul 8 div Y BPL mul add WB HR mul add
+ X 0 eq {
+ RGBData 1 index WB HR mul sub cvi
+ MaskData Y WB HR mul mul WB HR mul getinterval
+ putinterval
+ } if
+ RGBData
+ dup 2 index R put4bit
+ dup 2 index 0.5 add G put4bit
+ exch 1.0 add B put4bit
+ }
+ ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 4 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 2 DoImage3
+ XB 4 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 2 DoImage3
+ XC 4 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 2 DoImage3
+ XD 4 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XE 4 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XF 4 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XG 4 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XH 4 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XI 4 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ showpage
+% ----------------------------------------------------------------------
+
+ % Use an unusual (unpleasant?) underlying color
+ .6 .95 .4 setrgbcolor clippath fill
+
+ 0 0 0 setrgbcolor
+ TitleFont setfont
+ 200 760 moveto (Image Type 3 Tests) show
+ 200 740 moveto (Rotation Angle = ) show IR 3 string cvs show
+ 200 720 moveto (InterleaveType 3) show
+ 170 700 moveto (Colorspace = ) show CSpaceName show
+ LegendFont setfont
+
+ .4 .1 .7 setrgbcolor % contrasting color for stencil masking
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==8, WM=WD, HM=HD
+% IT 3 is line interleave -- Mask and Data in separate sources
+% RGB Image Data chunky (MultipleDatasources==false).
+ /YY YA def
+ TX YY SY add moveto (BPC=8\nMulti\nfalse) blockshow
+
+ % Generate the MaskData first
+ /WM WD def
+ /HM HD def
+ MaskGen
+
+ % Generate the Data Image
+ /RGBData WD HD mul 3 mul string def
+ { X Y WD mul add 3 mul RGBData
+ dup 2 index R 255 mul cvi put
+ dup 2 index 1 add G 255 mul cvi put
+ exch 2 add B 255 mul cvi put
+ } ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 8 IMLRTB [ MaskData RGBData ] false [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 8 IMLRTB [ MaskData RGBData ] false [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 8 IMLRTB [ MaskData RGBData ] false [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 8 IMLRTB [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 8 IMLRBT [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 8 IMRLTB [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 8 IMRLBT [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 8 IMLRTB [ MaskDProc RGBDProc ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 8 IMLRTB [ MaskDFile RGBDFile ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==12, WM=WD, HM=HD
+ /YY YB def
+ TX YY SY add moveto (BPC=12\nMulti\nfalse) blockshow
+
+ /RGBData WD 36 mul 7 add 8 div cvi HD mul string def
+ {
+ X 36 mul 8 div Y WD 36 mul 7 add 8 div cvi mul add
+ RGBData 1 index R put12bit
+ RGBData 1 index 1.5 add G put12bit
+ RGBData exch 3 add B put12bit
+ } ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 12 IMLRTB [ MaskData RGBData ] false [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 12 IMLRTB [ MaskData RGBData ] false [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 12 IMLRTB [ MaskData RGBData ] false [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 12 IMLRTB [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 12 IMLRBT [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 12 IMRLTB [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 12 IMRLBT [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 12 IMLRTB [ MaskDProc RGBDProc ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 12 IMLRTB [ MaskDFile RGBDFile ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==4, WM=WD, HM=HD
+ /YY YC def
+ TX YY SY add moveto (BPC=4\nMulti\nfalse) blockshow
+
+ /RGBData WD 12 mul 7 add 8 div cvi HD mul string def
+ {
+ X 12 mul 8 div Y WD 12 mul 7 add 8 div cvi mul add
+ RGBData 1 index R put4bit
+ RGBData 1 index 0.5 add G put4bit
+ RGBData exch 1.0 add B put4bit
+ } ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 4 IMLRTB [ MaskData RGBData ] false [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 4 IMLRTB [ MaskData RGBData ] false [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 4 IMLRTB [ MaskData RGBData ] false [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 4 IMLRTB [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 4 IMLRBT [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 4 IMRLTB [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 4 IMRLBT [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 4 IMLRTB [ MaskDProc RGBDProc ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 4 IMLRTB [ MaskDFile RGBDFile ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==8, WM=WD, HM=HD
+% IT 3 is line interleave -- Mask and Data in separate sources
+% RGB Image Data seprate (MultipleDatasources==true).
+ /YY YA def
+ TX YY SY add moveto (BPC=8\nMulti\ntrue) blockshow
+
+ % Generate the MaskData first
+ MaskGen
+
+ % Generate the Data Image
+ WD HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ { X Y WD mul add
+ RData 1 index R 255 mul cvi put
+ GData 1 index G 255 mul cvi put
+ BData exch B 255 mul cvi put
+ } ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 8 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 8 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 8 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 8 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 8 IMLRBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 8 IMRLTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 8 IMRLBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 8 IMLRTB [ MaskDProc [RDProc GDProc BDProc]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 8 IMLRTB [ MaskDFile [RDFile GDFile BDFile]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==8, WM=WD, HM=HD
+% IT 3 is line interleave -- Mask and Data in separate sources
+% RGB Image Data seprate (MultipleDatasources==true).
+ /YY YD def
+ TX YY SY add moveto (BPC=8\nMulti\ntrue) blockshow
+
+ % Generate the MaskData first
+ MaskGen
+
+ % Generate the Data Image
+ WD HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ { X Y WD mul add
+ RData 1 index R 255 mul cvi put
+ GData 1 index G 255 mul cvi put
+ BData exch B 255 mul cvi put
+ } ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 8 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 8 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 8 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 8 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 8 IMLRBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 8 IMRLTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 8 IMRLBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 8 IMLRTB [ MaskDProc [RDProc GDProc BDProc]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 8 IMLRTB [ MaskDFile [RDFile GDFile BDFile]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==12, WM=WD, HM=HD
+ /YY YE def
+ TX YY SY add moveto (BPC=12\nMulti\ntrue) blockshow
+
+ WD 3 mul 1 add 2 div cvi HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ {
+ X 3 mul 2 div Y WD 3 mul 1 add 2 div cvi mul add
+ RData 1 index R put12bit
+ GData 1 index G put12bit
+ BData exch B put12bit
+ } ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 12 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 12 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 12 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 12 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 12 IMLRBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 12 IMRLTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 12 IMRLBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 12 IMLRTB [ MaskDProc [RDProc GDProc BDProc]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 12 IMLRTB [ MaskDFile [RDFile GDFile BDFile]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==4, WM=WD, HM=HD
+ /YY YF def
+ TX YY SY add moveto (BPC=4\nMulti\ntrue) blockshow
+
+ WD 1 add 2 div cvi HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ {
+ X 2 div Y WD 1 add 2 div cvi mul add
+ RData 1 index R put4bit
+ GData 1 index G put4bit
+ BData exch B put4bit
+ } ImageGen
+
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 4 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 4 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 4 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 4 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 4 IMLRBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 4 IMRLTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 4 IMRLBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 4 IMLRTB [ MaskDProc [RDProc GDProc BDProc]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 4 IMLRTB [ MaskDFile [RDFile GDFile BDFile]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==8, WM=.9*WD, HM=1.1*HD
+% IT 3 is line interleave -- Mask and Data in separate sources
+% RGB Image Data seprate (MultipleDatasources==true).
+ /YY YG def
+ TX YY SY add moveto (BPC=8\nMulti\ntrue\nWM=.9*WD\nHM=1.1*HD) blockshow
+
+ /WM 0.9 WD mul cvi def
+ /HM 1.1 HD mul cvi def
+ % Generate the MaskData first
+ MaskGen
+
+ % Generate the Data Image
+ WD HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ { X Y WD mul add
+ RData 1 index R 255 mul cvi put
+ GData 1 index G 255 mul cvi put
+ BData exch B 255 mul cvi put
+ } ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 8 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 8 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 8 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 8 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 8 IMLRBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 8 IMRLTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 8 IMRLBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 8 IMLRTB [ MaskDProc [RDProc GDProc BDProc]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 8 IMLRTB [ MaskDFile [RDFile GDFile BDFile]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==12, WM=WD, HM=HD
+ /YY YI def
+ TX YY SY add moveto (BPC=12\nMulti\ntrue\nWM=.9*WD\nHM=1.1*HD) blockshow
+
+ WD 3 mul 1 add 2 div cvi HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ {
+ X 3 mul 2 div Y WD 3 mul 1 add 2 div cvi mul add
+ RData 1 index R put12bit
+ GData 1 index G put12bit
+ BData exch B put12bit
+ } ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 12 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 12 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 12 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 12 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 12 IMLRBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 12 IMRLTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 12 IMRLBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 12 IMLRTB [ MaskDProc [RDProc GDProc BDProc]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 12 IMLRTB [ MaskDFile [RDFile GDFile BDFile]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==4, WM=WD, HM=HD
+ /YY YJ def
+ TX YY SY add moveto (BPC=4\nMulti\ntrue\nWM=.9*WD\nHM=1.1*HD) blockshow
+
+ WD 1 add 2 div cvi HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ {
+ X 2 div Y WD 1 add 2 div cvi mul add
+ RData 1 index R put4bit
+ GData 1 index G put4bit
+ BData exch B put4bit
+ } ImageGen
+
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 4 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 4 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 4 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 4 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 4 IMLRBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 4 IMRLTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 4 IMRLBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 4 IMLRTB [ MaskDProc [RDProc GDProc BDProc]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 4 IMLRTB [ MaskDFile [RDFile GDFile BDFile]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==8, WM=1.1*WD, HM=.9*HD
+% IT 3 is line interleave -- Mask and Data in separate sources
+% RGB Image Data seprate (MultipleDatasources==true).
+ /YY YH def
+ TX YY SY add moveto (BPC=8\nMulti\ntrue\nWM=1.1*WD\nHM=.9*HD) blockshow
+
+ /WM 1.1 WD mul cvi def
+ /HM 0.9 HD mul cvi def
+ % Generate the MaskData first
+ MaskGen
+
+ % Generate the Data Image
+ WD HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ { X Y WD mul add
+ RData 1 index R 255 mul cvi put
+ GData 1 index G 255 mul cvi put
+ BData exch B 255 mul cvi put
+ } ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 8 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 8 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 8 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 8 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 8 IMLRBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 8 IMRLTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 8 IMRLBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 8 IMLRTB [ MaskDProc [RDProc GDProc BDProc]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 8 IMLRTB [ MaskDFile [RDFile GDFile BDFile]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ showpage
+} bind def % T3Tests
+
+
+% ----------------------------------------------------------------------
+% Do the various rotations
+%
+/CSpace /DeviceRGB def
+
+[ 0 10 -10 45 90 180 270 ]
+pop [ 0 ] % delete this line to enable tests
+{ /IR exch def T1T4Tests } forall
+
+[ 0 10 -10 45 90 180 270 ]
+pop [ 0 ] % delete this line to enable tests
+{ /IR exch def T3Tests } forall
+
+/CSpace [ /DeviceN [/Blue /Red /Green] /DeviceRGB { } ] def
+
+[ 0 10 -10 45 90 180 270 ]
+pop [ 0 ] % delete this line to enable tests
+{ /IR exch def T1T4Tests } forall
+
+[ 0 10 -10 45 90 180 270 ]
+pop [ 0 ] % delete this line to enable tests
+{ /IR exch def T3Tests } forall
diff --git a/Master/xemtex/gslib/impath.ps b/Master/xemtex/gslib/impath.ps
new file mode 100644
index 00000000000..2b7d79fe67f
--- /dev/null
+++ b/Master/xemtex/gslib/impath.ps
@@ -0,0 +1,180 @@
+% Copyright (C) 1992, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: impath.ps,v 1.3.4.1.2.1 2003/04/12 14:02:38 giles Exp $
+% impath.ps
+% Reverse-rasterize a bitmap to produce a Type 1 outline.
+% (This was formerly a Ghostscript operator implemented in C.)
+
+% <image> <width> <height> <wx> <wy> <ox> <oy> <string>
+% type1imagepath <substring>
+% Converts an image (bitmap) description of a character into
+% a scalable description in Adobe Type 1 format. The
+% current transformation matrix should be the same as the
+% FontMatrix of the font in which this character will be
+% used: this establishes the scaling relationship between
+% image pixels (the image is assumed to be 1 unit high in
+% user space) and the character coordinate system used in
+% the scalable description. wx and wy are the character
+% width, and ox and oy are the character origin relative
+% to the lower left corner of the bitmap, in *pixels*.
+% The image is assumed to be stored in left-to-right,
+% top-to-bottom order. Note that this is not consistent
+% with the `image' operator's interpretation of the CTM.
+% All coordinates in the scalable description are rounded to
+% integers, so the coefficients in the FontMatrix should
+% be on the order of 1/N for some value of N that is
+% either a multiple of the height/width or is large
+% compared to the width and height. (There is a
+% convention, which some PostScript programs rely on, that
+% N=1000.)
+% Note that the encoded description has *not* been subjected
+% to CharString encryption, which is necessary before the
+% description can be given to type1addpath: to do this,
+% follow the type1imagepath with
+% 4330 exch dup .type1encrypt exch pop
+% If the description is too complex to fit into the supplied
+% string, a limitcheck error results. A good rule of
+% thumb is that the size of the string should be about 6
+% times the number of 1-bits in the image that are not
+% completely surrounded by other 1-bits.
+
+% Import the Type 1 opcodes.
+(type1ops.ps) runlibfile
+
+100 dict
+dup /type1imagepath_dict exch def
+begin
+
+/rc { round cvi } bind def
+/moving [/rmoveto /hmoveto /vmoveto] def
+/drawing [/rlineto /hlineto /vlineto] def
+
+% Convert the current path to a Type 1 token array.
+/putxy % x y ops -> cs_elements
+ { 3 -1 roll dup x sub rc exch /x exch def
+ 3 -1 roll dup y sub rc exch /y exch def
+ % stack: ops dx dy
+ dup 0 eq
+ { % dy = 0, use hmoveto/lineto
+ pop exch 1 get
+ }
+ { 1 index 0 eq
+ { % dx = 0, use vmoveto/lineto
+ exch pop exch 2 get
+ }
+ { % use rmoveto/rlineto
+ 3 -1 roll 0 get
+ }
+ ifelse
+ }
+ ifelse
+ } bind def
+/pathtotype1 % -> charstack
+ { 3 dict begin /x 0 def /y 0 def
+ mark
+ { moving putxy
+ }
+ { drawing putxy
+ }
+ { % Convert curve to relative form
+ x y 3
+ { exch neg 7 index add rc
+ exch neg 6 index add rc
+ 8 -2 roll
+ }
+ repeat /y exch def /x exch def
+ 1 index 0 eq 5 index 0 eq and % dy1=dx3=0, hv
+ { 5 -1 roll pop exch pop /hvcurveto
+ }
+ { dup 0 eq 6 index 0 eq and % dx1=dy3=0, vh
+ { 6 -1 roll pop pop /vhcurveto
+ }
+ { /rrcurveto % none of the above
+ }
+ ifelse
+ }
+ ifelse
+ }
+ { /closepath
+ }
+ pathforall end
+ } bind def
+
+end % type1imagepath_dict
+
+% The main program
+/type1imagepath % image width height wx wy ox oy string ->
+ % substring
+ { type1imagepath_dict begin
+ /tsave save def
+ /ostring exch def
+ /oy exch def /ox exch def
+ /wy exch def /wx exch def
+ /height exch def /width exch def
+ /data exch def
+
+ /ofilter ostring /NullEncode filter def
+ /raster width 7 add 8 idiv def
+
+% Construct the coordinate transformation.
+ height dup scale
+ matrix currentmatrix matrix invertmatrix setmatrix
+
+% Determine the left side bearing.
+ /lsbx width
+ 0 1 width 1 sub
+ { dup dup 8 idiv 0 exch
+ raster raster height mul 1 sub
+ { data exch get or }
+ for exch 8 mod bitshift 128 and 0 ne
+ { exch pop exit }
+ if pop
+ }
+ for def
+
+% Compute and encode the origin, width, and side bearing.
+ mark
+ ox oy dtransform
+ rc /opty exch def rc /optx exch def
+ wx wy dtransform
+ rc /iwy exch def rc /iwx exch def
+ lsbx ox sub 0 dtransform
+ rc /ilsby exch def rc /ilsbx exch def
+ ilsbx
+ iwy 0 ne ilsby 0 ne or
+ { ilsby iwx iwy /sbw }
+ { iwx /hsbw }
+ ifelse
+ ofilter charstack_write
+
+% Flip over the Y axis, because the image is stored top-to-bottom.
+ [1 0 0 -1 0 height] concat
+% Account for the character origin.
+ lsbx oy translate
+% Trace the outline.
+ newpath
+ width height data .imagepath
+ gsave matrix setmatrix pathtotype1 grestore
+ ofilter charstack_write
+% Terminate the output
+ mark /endchar ofilter charstack_write
+
+ ofilter .fileposition ofilter closefile % flush buffers
+ ostring 0 3 -1 roll getinterval
+ tsave restore
+ end
+ } bind def
diff --git a/Master/xemtex/gslib/jispaper.ps b/Master/xemtex/gslib/jispaper.ps
new file mode 100644
index 00000000000..94ef1384ce9
--- /dev/null
+++ b/Master/xemtex/gslib/jispaper.ps
@@ -0,0 +1,28 @@
+% Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: jispaper.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Select JIS B paper sizes for b0...b6.
+
+userdict begin
+ /b0 /jisb0 load def
+ /b1 /jisb1 load def
+ /b2 /jisb2 load def
+ /b3 /jisb3 load def
+ /b4 /jisb4 load def
+ /b5 /jisb5 load def
+ /b6 /jisb6 load def
+end
diff --git a/Master/xemtex/gslib/landscap.ps b/Master/xemtex/gslib/landscap.ps
new file mode 100644
index 00000000000..c99a312be01
--- /dev/null
+++ b/Master/xemtex/gslib/landscap.ps
@@ -0,0 +1,31 @@
+%!
+% landscap.ps
+% This file can be prepended to most PostScript pages to force
+% rotation to "landscape" mode.
+%
+% There are (at least) four possible ways to reasonably position a
+% page after rotation. Any of the four old corners (llx,lly e.g.)
+% can be moved to match the corresonding new corner.
+% By uncommmenting the appropriate line below (i.e., remove the
+% leading '%'), any such positioning can be chosen for positive or
+% negative rotation. The comments at the end of each "rotate" line
+% indicate the ORIGINAL corner to be aligned. For example, as given
+% below, the lower left hand corner is aligned. When viewed, this
+% corner will have moved to the urx,lly corner.
+%
+% James E. Burns, 3/8/93, burns@nova.bellcore.com
+%
+% $Id: landscap.ps,v 1.1.6.1 2002/04/10 09:22:58 giles Exp $
+%
+gsave clippath pathbbox grestore
+4 dict begin
+/ury exch def /urx exch def /lly exch def /llx exch def
+%90 rotate llx neg ury neg translate % llx,ury
+90 rotate llx neg llx urx sub lly sub translate % llx,lly
+%90 rotate ury lly sub urx sub ury neg translate % urx,ury
+%90 rotate ury lly sub urx sub llx urx sub lly sub translate % urx,lly
+%-90 rotate urx neg lly neg translate % urx,lly
+%-90 rotate urx neg urx llx sub ury sub translate % urx,ury
+%-90 rotate llx lly add ury sub urx llx sub ury sub translate % llx,ury
+%-90 rotate llx lly add ury sub lly neg translate % llx,lly
+end
diff --git a/Master/xemtex/gslib/level1.ps b/Master/xemtex/gslib/level1.ps
new file mode 100644
index 00000000000..b64374d18b1
--- /dev/null
+++ b/Master/xemtex/gslib/level1.ps
@@ -0,0 +1,3 @@
+%!
+% $Id: level1.ps,v 1.1.6.1 2002/04/10 09:22:58 giles Exp $
+/.setlanguagelevel where { pop 1 .setlanguagelevel } if
diff --git a/Master/xemtex/gslib/lines.ps b/Master/xemtex/gslib/lines.ps
new file mode 100644
index 00000000000..b784e01aa7c
--- /dev/null
+++ b/Master/xemtex/gslib/lines.ps
@@ -0,0 +1,166 @@
+%!
+% Copyright (C) 1989, 1990, 1992, 1994, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: lines.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $
+% Test line rendering (stroke).
+
+% Exercise the miter limit. The left column of lines should bevel at
+% 90 degrees, the right column at 60 degrees.
+
+gsave
+1.8 setlinewidth
+0 setgray
+15 15 scale
+-5 5 translate
+[1.415 2.0]
+ { setmiterlimit 12 0 translate 0 0 moveto
+ 10 30 360
+ { gsave 5 0 rlineto rotate 2.5 0 rlineto
+ gsave 0 setlinewidth 1 0 0 setrgbcolor stroke grestore
+ strokepath 0 setlinewidth stroke
+ grestore
+ 0 4 rmoveto
+ } for
+ } forall
+
+showpage
+grestore
+
+% Exercise all the combinations of cap and join styles
+% for one-line, two-line, and closed paths.
+
+gsave
+
+/drawlines {
+gsave
+2.0 setmiterlimit
+2.0 setlinewidth
+6 6 scale
+5 20 translate
+{0 1 2} % line cap
+ { setlinecap gsave
+ {0 1 2} % line join
+ { setlinejoin gsave
+ { {currentpoint lineto}
+ {3 7 lineto}
+ {3 7 lineto 5 1 lineto}
+ {3 7 lineto 6 3 lineto closepath}
+ }
+ { gsave 0 0 moveto exec
+ gsave stroke grestore
+ 0.5 setlinewidth 1 0 0 setrgbcolor stroke
+ grestore 8 0 translate
+ } forall
+ grestore 35 0 translate
+ } forall
+ grestore 0 20 translate
+ } forall
+grestore
+} def
+/xflip
+ { 8.5 72 mul 0 translate -1 1 scale
+ } def
+/rot90
+ { 90 rotate 0 -9.75 72 mul translate
+ } def
+/rot180
+ { rot90 rot90
+ } def
+/rot270
+ { rot180 rot90
+ } def
+
+drawlines showpage
+gsave xflip drawlines grestore showpage
+gsave rot90 drawlines grestore showpage
+gsave rot90 xflip drawlines grestore showpage
+gsave drawlines rot180 showpage
+gsave rot180 xflip drawlines grestore showpage
+gsave rot270 drawlines grestore showpage
+gsave rot270 xflip drawlines grestore showpage
+grestore
+
+% Here are some boundary conditions, contributed by Mark Rawling.
+
+gsave
+1 setlinecap
+2.6 setmiterlimit
+3.0 setlinewidth
+
+5 5 scale
+10 20 translate
+
+% [ 0.5 sqrt dup dup dup neg exch 0 0 ] concat % 45 rotate
+
+{0 1 2} % line join
+{
+ setlinejoin gsave
+ 0 0 moveto 0 10 lineto 10 0 lineto gsave stroke grestore
+ 15 0 translate
+ 0 0 moveto 0 10 lineto 10 20 lineto gsave stroke grestore
+ 15 0 translate
+ 10 0 moveto 10 10 lineto 0 20 lineto gsave stroke grestore
+ 15 0 translate
+ 10 0 moveto 10 10 lineto 0 0 lineto gsave stroke grestore
+ grestore
+ gsave
+ 0 20 translate
+ 0 20 moveto 0 10 lineto 10 20 lineto gsave stroke grestore
+ 15 0 translate
+ 0 20 moveto 0 10 lineto 10 0 lineto gsave stroke grestore
+ 15 0 translate
+ 10 20 moveto 10 10 lineto 0 0 lineto gsave stroke grestore
+ 15 0 translate
+ 10 20 moveto 10 10 lineto 0 20 lineto gsave stroke grestore
+ grestore 60 0 translate
+} forall
+
+showpage
+grestore
+
+% Test narrow lines at a variety of angles.
+
+gsave
+
+/rad 120 def
+/ray { gsave rotate 0 0 moveto rad 0 rlineto stroke grestore } def
+/star
+ { newpath gsave
+ gsave 0.5 setgray 0 0 rad 0 360 arc stroke grestore
+ 0 90 359
+ { rotate
+ 0 3 14 { ray } for
+ 15 15 89 { ray } for
+ } for
+ grestore
+ } def
+
+0 setgray
+150 150 translate
+[ [ 0 0.5 1 ] [ 1.5 2 2.5 ] [ 3 3.5 4 ] ]
+ { gsave
+ { setlinewidth star
+ 250 0 translate
+ } forall
+ grestore 0 250 translate
+ } forall
+
+grestore showpage
+
+% End
+
+quit
diff --git a/Master/xemtex/gslib/lp386.bat b/Master/xemtex/gslib/lp386.bat
new file mode 100644
index 00000000000..65141bcefb0
--- /dev/null
+++ b/Master/xemtex/gslib/lp386.bat
@@ -0,0 +1,2 @@
+@rem $Id: lp386.bat,v 1.1 2000/03/09 08:40:40 lpd Exp $
+@gs386 -sDEVICE=djet500 -dNOPAUSE -- gslp.ps -fCourier9 %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/Master/xemtex/gslib/lp386r2.bat b/Master/xemtex/gslib/lp386r2.bat
new file mode 100644
index 00000000000..9a6f80d9afd
--- /dev/null
+++ b/Master/xemtex/gslib/lp386r2.bat
@@ -0,0 +1,2 @@
+@rem $Id: lp386r2.bat,v 1.1 2000/03/09 08:40:40 lpd Exp $
+@gs386 -sDEVICE=djet500 -dNOPAUSE -- gslp.ps -2r %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/Master/xemtex/gslib/lpgs.bat b/Master/xemtex/gslib/lpgs.bat
new file mode 100644
index 00000000000..179667212d6
--- /dev/null
+++ b/Master/xemtex/gslib/lpgs.bat
@@ -0,0 +1,5 @@
+@echo off
+@rem $Id: lpgs.bat,v 1.2 2000/05/20 20:53:05 lpd Exp $
+
+call gssetgs.bat
+%GSC% -sDEVICE#djet500 -dNOPAUSE -sPROGNAME=lpgs -- gslp.ps -fCourier9 %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/Master/xemtex/gslib/lpr2.bat b/Master/xemtex/gslib/lpr2.bat
new file mode 100644
index 00000000000..ede47c51e78
--- /dev/null
+++ b/Master/xemtex/gslib/lpr2.bat
@@ -0,0 +1,5 @@
+@echo off
+@rem $Id: lpr2.bat,v 1.2 2000/05/20 20:53:05 lpd Exp $
+
+call gssetgs.bat
+%GSC% -sDEVICE#djet500 -dNOPAUSE -sPROGNAME=lpr2 -- gslp.ps -2r %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/Master/xemtex/gslib/lprsetup.sh b/Master/xemtex/gslib/lprsetup.sh
new file mode 100644
index 00000000000..8d4bc5073c3
--- /dev/null
+++ b/Master/xemtex/gslib/lprsetup.sh
@@ -0,0 +1,189 @@
+#!/bin/sh
+# $Id: lprsetup.sh,v 1.1 2000/03/09 08:40:40 lpd Exp $
+#
+# BSD PRINT FILTER SETUP utility for Ghostscript - used and tested on
+# SunOS 4.1.3, but I hope it will be useful on other BSD systems
+# See documentation for usage
+#
+
+DEVICES="bjt600.32 bjc600.32 bjc600.24 bjc600.24.3 bjc600.16 bjc600.8 bjc600.8.1 bjc600.1 bjc600.dq"
+#FILTERS="if nf tf gf vf df cf rf"
+FILTERS="if"
+
+# The port your printer is on
+PRINTERDEV=/dev/lp1
+# The kind of printer (accepted values: 'parallel' and 'serial')
+PRINTERTYPE=parallel
+
+GSDIR=/usr/local/lib/ghostscript
+GSFILTERDIR=$GSDIR/filt
+SPOOLDIR=/var/spool
+GSIF=unix-lpr.sh
+PCAP=printcap.insert
+
+PATH=/bin:/usr/bin:/usr/ucb
+export PATH
+
+if [ ! -w $GSDIR ]; then
+ echo "$GSDIR must be writable to create filter directory"
+ exit 1
+fi
+
+echo "
+Making links in the filter directory $GSFILTERDIR ...
+"
+
+#
+# Make the directory for holding the filter and links
+#
+if [ -d $GSFILTERDIR ]; then
+ echo "$GSFILTERDIR already exists - not created"
+else
+ mkdir $GSFILTERDIR
+fi
+rm -f $GSFILTERDIR/direct
+ln -s . $GSFILTERDIR/direct
+rm -f $GSFILTERDIR/indirect
+ln -s . $GSFILTERDIR/indirect
+
+#
+# Create a link from each filtertype to the real filter script
+#
+for filter in $FILTERS
+do
+ rm -f $GSFILTERDIR/gs$filter
+ ln -s ../$GSIF $GSFILTERDIR/gs$filter
+done
+
+#
+# Create a link from each device to the filter directory
+#
+for device in $DEVICES
+do
+ dualqueue=
+ case "$device" in
+ *.dq) device=`basename $device .dq` ; dualqueue=t ;;
+ esac
+ rm -f $GSFILTERDIR/$device
+ if [ $dualqueue ]; then
+ rm -f $GSFILTERDIR/indirect/$device
+ ln -s . $GSFILTERDIR/indirect/$device
+ else
+ rm -f $GSFILTERDIR/direct/$device
+ ln -s . $GSFILTERDIR/direct/$device
+ fi
+done
+
+#
+# Create a basic printcap insert - this is made in the CURRENT directory
+#
+rm -f $PCAP
+cat > $PCAP << EOF
+# This is an example printcap insert for Ghostscript printers
+# You will probably want either to change the names for each printer
+# below (first line for each device) to something more sensible, or
+# to add additional name entries (eg cdjcolor for cdj500.24)
+# The example is shown set up for $PRINTERTYPE printers - you will need
+# to alter the entries for different or networked remote printer,
+# eg. a remote network printer would have a line something like:
+# :lp=:rm=artemis:rp=LPT1:
+# for a PC called artemis, replacing the serial port settings
+#
+# NB/ This is only an example - it is unlikely to be complete or exactly
+# correct for your system, but is designed to illustrate filter names
+# corresponding to the accompanying bsd-if print filter
+#
+EOF
+
+(
+previous=undefined
+for device in $DEVICES
+do
+ dualqueue=
+ case "$device" in
+ *.dq) device=`basename $device .dq` ; dualqueue=t ;;
+ esac
+ base="`echo $device | sed 's/\.[0-9][0-9]*$//'`"
+ base="`echo $base | sed 's/\.[0-9][0-9]*$//'`"
+#
+# If device listed with '.dq' suffix, we set up a separate output queue
+#
+ if [ $dualqueue ]; then
+ if [ $base != $previous ]; then
+ previous=$base
+ echo "\
+# Entry for raw device $base.raw
+$base.raw|Raw output device $base:\\
+ :lp=$PRINTERDEV:\\"
+ if test "$PRINTERTYPE" = serial
+ then
+ echo "br#19200:xc#0177777:\\"
+ echo ":ms=-parity,ixon,-opost:\\"
+ fi
+ echo ":sd=$SPOOLDIR/$base/raw:\\
+ :mx#0:sf:sh:rs:"
+ fi
+ echo "\
+# Entry for device $device (output to $base.raw)
+$device|Ghostscript device $device:\\
+ :lp=/dev/null:\\"
+ else
+ echo "\
+# Entry for device $device
+$device|Ghostscript device $device:\\
+ :lp=$PRINTERDEV:\\"
+ if test "$PRINTERTYPE" = serial
+ then
+ echo "br#19200:xc#0177777:\\"
+ echo ":ms=-parity,ixon,-opost:\\"
+ fi
+ fi
+ echo "\
+ :sd=$SPOOLDIR/$base:\\
+ :lf=$SPOOLDIR/$base/logfile:\\
+ :af=$SPOOLDIR/$base/acct:\\"
+ for filter in $FILTERS
+ do
+ if [ $dualqueue ]; then
+ echo "\
+ :$filter=$GSFILTERDIR/indirect/$device/gs$filter:\\"
+ else
+ echo "\
+ :$filter=$GSFILTERDIR/direct/$device/gs$filter:\\"
+ fi
+ done
+ echo "\
+ :mx#0:sf:sh:rs:"
+done
+) >> $PCAP
+
+echo "
+Example printcap insert file \"$PCAP\" now created"
+
+#
+# Remind the user what's still to do
+#
+
+echo "
+NB/ You will need to create the following directories, with
+appropriate permissions, and do 'touch logfile' and 'touch acct'
+in the top level directories (ie. not the 'raw' ones):
+"
+(
+for device in $DEVICES
+do
+ dualqueue=
+ case "$device" in
+ *.dq) device=`basename $device .dq` ; dualqueue=t ;;
+ esac
+ base="`echo $device | sed 's/\.[0-9][0-9]*$//'`"
+ base="`echo $base | sed 's/\.[0-9][0-9]*$//'`"
+ echo " $SPOOLDIR/$base"
+ if [ $dualqueue ]; then
+ echo " $SPOOLDIR/$base/raw"
+ fi
+done
+) | sort -u
+
+echo "
+ + + + "
diff --git a/Master/xemtex/gslib/markhint.ps b/Master/xemtex/gslib/markhint.ps
new file mode 100644
index 00000000000..1ce2498fe55
--- /dev/null
+++ b/Master/xemtex/gslib/markhint.ps
@@ -0,0 +1,131 @@
+% Copyright (C) 1994, 1995, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: markhint.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% markhint.ps
+% Draw the hints for a Type 1 font.
+
+(type1ops.ps) runlibfile
+
+/mhsetup % <matrix> <print> mhsetup -
+ { /mhprint exch def
+ /mhmx exch def
+ /mhdash 0 9 gsave initmatrix dtransform grestore idtransform add abs def
+ gsave
+ clippath pathbbox
+ 2 index sub /bbh exch def
+ 2 index sub /bbw exch def
+ /bby exch def
+ /bbx exch def
+ grestore
+ } def
+
+/markfonthints % <matrix> <print> markfonthints -
+ { mhsetup
+ } def
+
+/hmark % <y> hmark -
+ { bbx exch moveto bbw 0 rlineto stroke
+ } def
+/hsmark % <y0> <dy> hsmark -
+ { 1 index add exch gsave
+ [mhdash] 0 setdash 0 exch mhmx transform exch pop hmark
+ [mhdash 2 div dup 2 mul] 0 setdash 0 exch mhmx transform exch pop hmark
+ grestore
+ } def
+/vmark % <x> vmark -
+ { bby moveto 0 bbh rlineto stroke
+ } def
+/vsmark % <x0> <dx> vsmark -
+ { 1 index add exch gsave
+ [mhdash] mhdash setdash 0 mhmx transform pop vmark
+ [mhdash 2 div dup 2 mul] 0 setdash 0 mhmx transform pop vmark
+ grestore
+ } def
+/pmark % <x> <y> pmark -
+ { newpath 0 4.5 gsave initmatrix dtransform grestore idtransform add abs
+ 0 360 arc stroke
+ } def
+/mchdict mark
+ /hsbw { pop 0 mhmx transform translate 0 0 pmark }
+ /sbw { pop pop mhmx transform translate 0 0 pmark }
+ /hstem
+ { mhprint { (hstem ) print 2 copy 2 packedarray == } if
+ hsmark
+ }
+ /vstem
+ { mhprint { (vstem ) print 2 copy 2 packedarray == } if
+ vsmark
+ }
+ /hstem3
+ { mhprint { (hstem3 ) print 6 copy 6 packedarray == } if
+ 3 { hsmark } repeat
+ }
+ /vstem3
+ { mhprint { (vstem3 ) print 6 copy 6 packedarray == } if
+ 3 { vsmark } repeat
+ }
+ /div
+ { div
+ }
+ /callothersubr
+ { 3 eq
+ { pop
+ mhprint { (replace) = } if
+ % We're replacing hints; lighten the color.
+ currentrgbcolor 3 { 2 mul 3 div 3 1 roll } repeat setrgbcolor
+ }
+ { { pop } repeat
+ } ifelse
+ }
+ /callsubr
+ { Private /Subrs get exch get mchinterp
+ }
+ /pop
+ {
+ }
+ /return
+ {
+ }
+.dicttomark def
+
+/mchinterp % <charstring> mchinterp -
+ { 4330 exch dup length string .type1decrypt exch pop
+ dup length lenIV sub lenIV exch getinterval
+ 0 () /SubFileDecode filter
+ mark exch charstack_read ]
+ { dup type /nametype eq
+ { mchdict exch .knownget { exec } { cleartomark mark } ifelse
+ }
+ if
+ }
+ forall
+ } def
+
+/markcharhints % <charname> <matrix> <print> markcharhints -
+ { mhsetup
+ gsave mark
+ /Private currentfont /Private get def
+ Private rcheck % make sure we won't get an access error
+ { /lenIV Private /lenIV .knownget not { 4 } if def
+ currentfont /CharStrings get 3 -1 roll get mchinterp
+ }
+ { (Sorry, this font is protected; I can't show the hints.\n) print flush
+ exch
+ }
+ ifelse
+ cleartomark grestore
+ } def
diff --git a/Master/xemtex/gslib/markpath.ps b/Master/xemtex/gslib/markpath.ps
new file mode 100644
index 00000000000..e85dfe63ca8
--- /dev/null
+++ b/Master/xemtex/gslib/markpath.ps
@@ -0,0 +1,60 @@
+% Copyright (C) 1993 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: markpath.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% markpath.ps
+% Mark the corners of a path, drawing it slowly if desired.
+
+/Delay where { pop } { /Delay 0 def } ifelse
+/setxy0
+ { currentpoint /y0 exch def /x0 exch def
+ } def
+/bip
+ { epsx epsy idtransform /ey exch def /ex exch def
+ currentpoint ex 2 div ey 2 div rlineto currentpoint 0 ey neg rlineto
+ ex neg 0 rlineto 0 ey rlineto lineto lineto
+ stroke
+ } def
+/dally
+ { Delay { } repeat
+ Delay 0 ne { flushpage } if
+ } def
+/movebip
+ { /xs 2 index def /ys 1 index def
+ gsave newpath mpmx transform moveto setxy0 bip grestore
+ } def
+/linebip
+ { gsave newpath x0 y0 moveto mpmx transform lineto setxy0 bip dally grestore
+ } def
+/curvebip
+ { gsave newpath x0 y0 moveto 5 index 5 index mpmx transform lineto bip
+ 2 copy mpmx transform moveto 3 index 3 index mpmx transform lineto bip
+ x0 y0 moveto
+ 3 { mpmx transform 6 2 roll } repeat
+ curveto setxy0 bip dally grestore
+ } def
+/closebip
+ { xs ys linebip
+ } def
+
+/markpath % <matrix> markpath -
+ { /mpmx exch def
+ gsave initgraphics 9 dup dtransform grestore
+ /epsy exch def /epsx exch def
+ gsave 0 setlinewidth
+ { movebip } { linebip } { curvebip } { closebip } pathforall
+ grestore
+ } def
diff --git a/Master/xemtex/gslib/necp2x.upp b/Master/xemtex/gslib/necp2x.upp
new file mode 100644
index 00000000000..70a9d7e7cbd
--- /dev/null
+++ b/Master/xemtex/gslib/necp2x.upp
@@ -0,0 +1,35 @@
+-supModel="NEC Prinwriter 2X, 360x360DpI, Plain Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceGray
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Epson
+-r360x360
+-dupMargins="{ 9.0 40.0 9.0 67.0}"
+-dupWhiteTransfer="{
+ 0.40000 0.36253 0.32747 0.29475
+ 0.26428 0.23599 0.20979 0.18561
+ 0.16336 0.14297 0.12435 0.10741
+ 0.09209 0.07831 0.06597 0.05500
+ 0.04532 0.03684 0.02950 0.02320
+ 0.01787 0.01343 0.00979 0.00687
+ 0.00461 0.00290 0.00168 0.00086
+ 0.00036 0.00011 0.00001 0.00000
+}"
+-dupWeaveXPasses=2
+-dupWeaveYPasses=2
+-dupOutputPins=24
+-dupWeaveYFeeds="{11 12 13 12}"
+-dupWeaveInitialYFeeds="{ 0 1 0 11}"
+-dupWeaveInitialPins="{ 6 24 16 5}"
+-dupFormatXabsolute
+-dupBeginPageCommand="<
+1b40 1b40 1b7401 1b5200 1b50 1b54 1b7200 1b32 1b4306 1b5500 0d 1c242000
+>"
+-dupAdjustPageLengthCommand
+-dupEndPageCommand="(\014)"
+-dupAbortCommand="(\034F\034\063\044\15\12\12\12 Printout-Aborted\15\014)"
+-dupXMoveCommand="(\015\034$)"
+-dupSetLineFeedCommand="(\034F\034\063)"
+-dupWriteComponentCommands="{(\033*\047)}"
diff --git a/Master/xemtex/gslib/necp2x6.upp b/Master/xemtex/gslib/necp2x6.upp
new file mode 100644
index 00000000000..f0af04e03de
--- /dev/null
+++ b/Master/xemtex/gslib/necp2x6.upp
@@ -0,0 +1,35 @@
+-supModel="NEC Prinwriter 2X, 360x360DpI, Plain Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceGray
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/Epson
+-r360x360
+-dupMargins="{ 9.0 9.0 9.0 67.0}"
+-dupWhiteTransfer="{
+ 0.40000 0.36253 0.32747 0.29475
+ 0.26428 0.23599 0.20979 0.18561
+ 0.16336 0.14297 0.12435 0.10741
+ 0.09209 0.07831 0.06597 0.05500
+ 0.04532 0.03684 0.02950 0.02320
+ 0.01787 0.01343 0.00979 0.00687
+ 0.00461 0.00290 0.00168 0.00086
+ 0.00036 0.00011 0.00001 0.00000
+}"
+-dupWeaveXPasses=3
+-dupWeaveYPasses=2
+-dupOutputPins=24
+-dupWeaveYFeeds="{ 7 9 7 9 7 9}"
+-dupWeaveInitialYFeeds="{ 0 0 1 0 0 9}"
+-dupWeaveInitialPins="{ 5 21 13 16 8 24}"
+-dupFormatXabsolute
+-dupBeginPageCommand="<
+1b40 1b40 1b7401 1b5200 1b50 1b54 1b7200 1b32 1b4306 1b5500 0d 1c242000
+>"
+-dupAdjustPageLengthCommand
+-dupEndPageCommand="(\014)"
+-dupAbortCommand="(\034F\034\063\044\15\12\12\12 Printout-Aborted\15\014)"
+-dupXMoveCommand="(\015\034$)"
+-dupSetLineFeedCommand="(\034F\034\063)"
+-dupWriteComponentCommands="{(\033*\041)}"
diff --git a/Master/xemtex/gslib/packfile.ps b/Master/xemtex/gslib/packfile.ps
new file mode 100644
index 00000000000..3a311b2613e
--- /dev/null
+++ b/Master/xemtex/gslib/packfile.ps
@@ -0,0 +1,334 @@
+% Copyright (C) 1994, 1995, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: packfile.ps,v 1.2.6.2.2.1 2003/04/12 14:02:39 giles Exp $
+% packfile.ps
+% Pack groups of files together, with compression, for use in
+% storage-scarce environments.
+
+% ****** NOTE: This file must be kept consistent with gs_pfile.ps.
+
+% ---------------- Huffman coding utilities ---------------- %
+
+% We count runs of zeros, and individual byte frequencies separately
+% depending on whether they follow or do not follow a run of zeros.
+/zruns 256 array def
+/zfreq 256 array def
+/nzfreq 256 array def
+/maxcode 13 def % max code length, must be between 10 and 16
+/maxzrun 100 def % max length of zero run, must be <= 100
+/statbuf 10000 string def
+
+% Initialize statistics.
+/initstats % - initstats -
+ { 0 1 255 { zruns exch 0 put } for
+ 0 1 255 { zfreq exch 0 put } for
+ 0 1 255 { nzfreq exch 0 put } for
+ } bind def
+
+% Accumulate statistics from an individual file.
+/addstats % <file> addstats -
+ { 0
+ { 1 index //statbuf readstring 3 1 roll
+ % Stack: file eof numzeros data
+ { dup 0 eq
+ { pop 1 add
+ }
+ { 1 index 0 ne
+ { exch 255 .min
+ //zruns exch 2 copy get 1 add put
+ 0 exch //zfreq
+ }
+ { //nzfreq
+ }
+ ifelse
+ exch 2 copy get 1 add put
+ }
+ ifelse
+ } forall
+ exch not { exit } if (.) print flush
+ } loop
+ pop closefile
+ } bind def
+
+% Compute the Huffman codes from the statistics.
+/statcodes % - statcodes <array>
+ { maxcode 1 add 256 add maxzrun 2 sub add 1 add array % full array
+ dup maxcode 1 add dup 2 index length exch sub getinterval % data
+ % Put statistics into array
+ dup 0 1 255
+ { zfreq 1 index get nzfreq 2 index get add put dup
+ } for
+ 0 zruns 1 get put
+ 256 zruns 2 maxzrun 2 sub getinterval putinterval
+ dup dup length 1 sub 1 put % EOD
+ maxcode .computecodes
+ } bind def
+
+% ---------------- File handling ---------------- %
+
+% Copy one file to another.
+% Close the input file, but not the output file.
+/copyfile % <infile> <outfile> copyfile <outfile> <length>
+ { 0 mark statbuf
+ { 4 index 1 index readstring
+ exch 5 index 1 index writestring
+ length 5 -1 roll add 4 1 roll
+ not { exit } if (.) print flush
+ } loop
+ cleartomark 3 -1 roll closefile dup == flush
+ } bind def
+
+% Represent a Type 1 font in its most compressed format.
+% Requires -dWRITESYSTEMDICT to run.
+% Does not close the output file.
+(wrfont.ps) runlibfile
+/compressfont % <fontname> <outfile> compressfont <outfile>
+ { exch save
+ systemdict /executeonly /readonly load put
+ systemdict /noaccess /readonly load put
+ systemdict readonly pop
+ wrfont_dict begin
+ /binary_CharStrings true def
+ /binary_tokens true def
+ /encrypt_CharStrings false def
+ /standard_only false def
+ /use_lenIV 0 def
+ /smallest_output true def
+ end
+ exch findfont setfont
+ 1 index writefont
+ restore
+ } bind def
+
+% ---------------- Main program ---------------- %
+
+% Find the length of a file.
+/filelength % <filename> filelength <length>
+ { status { pop pop exch pop } { -1 } ifelse
+ } bind def
+
+% Define the header string for a compressed file.
+/beginfilestring
+({dup token pop exch[/MaxCodeLength 2 index token pop/Tables 4 index token pop
+/EndOfData true/EncodeZeroRuns 256 .dicttomark
+/BoundedHuffmanDecode filter/MoveToFrontDecode filter
+[/BlockSize 4 -1 roll .dicttomark/BWBlockSortDecode filter
+}) readonly def
+
+% Write a 16-bit big-endian non-negative integer on a file.
+/write16 % <file> <int> write16 -
+ { 2 copy -8 bitshift write 255 and write
+ } bind def
+
+% Compress a group of files together.
+% Return a dictionary in which the keys are the input file names
+% and the values are [startpos length] in the uncompressed concatenation.
+% Does not open or close the output file.
+/tempname (t.em) def
+/packfiles % <filenames> <outfile> packfiles <outfile> <posdict>
+ { % Concatenate files to a temporary file.
+ tempname (w) file
+ dup /MoveToFrontEncode filter
+ dup <<
+ /BlockSize 1000000
+ >> /BWBlockSortEncode filter
+ % Stack: filenames outfile tempfile mtfe bwe
+ 5 -1 roll dup length dict 0 6 2 roll
+ { % Stack: outfile posdict pos tempfile mtfe bwe infilename
+ dup ==only dup (r) file 2 index copyfile exch pop
+ dup 7 index 4 2 roll 7 index exch 2 array astore put
+ 5 -1 roll add 4 1 roll
+ } forall
+ closefile closefile closefile pop exch
+ % Stack: posdict outfile
+ % Compute an optimal Huffman code.
+ initstats
+ tempname (r) file addstats
+ % Actually compress the file.
+ % Write the decompression information on the output first.
+ dup tempname filelength write==
+ dup maxcode write==
+ % Write the code table as a homogenous number array.
+ statcodes exch
+ dup 149 write dup 32 write dup 2 index length write16
+ exch { 2 copy write16 pop } forall
+ dup <<
+ /MaxCodeLength maxcode
+ /EndOfData true
+ /EncodeZeroRuns 256
+ /Tables statcodes
+ >> /BoundedHuffmanEncode filter
+ tempname (r) file exch copyfile pop closefile
+ exch
+ } bind def
+
+% Squeeze a font to a .cpf file in anticipation of compression.
+/squeezefont % <fontname> squeezefont <filename.cpf>
+ { dup type /nametype ne { cvn } if
+ dup
+ { dup type /stringtype eq { exit } if
+ Fontmap exch get
+ }
+ loop
+ % Stack: fontname filename
+ dup dup
+ { (.) search not { exit } if
+ exch pop exch 3 -1 roll pop
+ }
+ loop
+ % Stack: fontname filename noextname extension
+ exch
+ { (/) search not { (\\) search not { exit } if } if
+ pop pop
+ }
+ loop
+ % If the font extension is anything other than
+ % .pfa or .pfb, we assume it can't be rewritten
+ % using compressfont.
+ % Stack: fontname filename extension basename
+ (.cpf) concatstrings dup 5 1 roll (w) file
+ % Stack: outfilename fontname filename extension outfile
+ exch dup (pfa) eq exch (pfb) eq or
+ % Stack: outfilename fontname filename outfile bool
+ { exch pop compressfont
+ }
+ { 3 -1 roll pop
+ exch findlibfile pop exch pop
+ exch copyfile pop
+ }
+ ifelse closefile
+ } bind def
+
+% ---------------- Production code ---------------- %
+
+% The following code constructs a packed version of the commercial-quality
+% fonts available from Aladdin Enterprises. To use this code:
+% - If desired, change the output file names below.
+% - Make sure you have the synthetic font data (fontmap.shs and the
+% *.ps files for the commercial fonts) in a directory that is on
+% Ghostscript's search path.
+% - Construct the packed fonts by running
+% gs -dNODISPLAY -dWRITESYSTEMDICT packfile.ps
+% - If desired, move the output files to the directory that will be
+% used at run time. You no longer need the *.pfb or *.ps files
+% for the original fonts; however, you do still need the Fontmap
+% for these fonts, because it defines the font name aliases.
+% - Add the following line to the end of gs_fonts.ps:
+% (ALL.cmp) run
+% (substituting the definition of allmapname if you changed it).
+
+% Define the output file names. The extensions are arbitrary;
+% any legal file name is allowed.
+/allname (ALL.cff) def % the compressed font file
+/allmapname (ALL.cmp) def % the Fontmap override file
+
+% Load an alternate Fontmap that references the synthetic oblique and
+% narrow fonts.
+true .setglobal
+(fontmap.shs) findlibfile pop exch pop .loadFontmap
+false .setglobal
+
+% Define the packaging of fonts into font groups.
+% Fewer larger groups compress better, but make decompression slower.
+/Lists [
+[ % The oblique and narrow fonts are synthetic,
+ % and take very little space.
+ /AvantGarde-BookOblique /AvantGarde-DemiOblique
+ /Courier-Oblique /Courier-BoldOblique
+ /Helvetica-Oblique /Helvetica-BoldOblique
+ /Helvetica-Narrow /Helvetica-Narrow-Oblique
+ /Helvetica-Narrow-Bold /Helvetica-Narrow-BoldOblique
+]
+[/AvantGarde-Book /AvantGarde-Demi
+ /Bookman-Light] [/Bookman-LightItalic
+ /Bookman-Demi /Bookman-DemiItalic
+ /Courier] [/Courier-Bold
+ /Helvetica /Helvetica-Bold]
+[/NewCenturySchlbk-Roman /NewCenturySchlbk-Italic
+ /NewCenturySchlbk-Bold /NewCenturySchlbk-BoldItalic]
+[/Palatino-Roman /Palatino-Italic
+ /Palatino-Bold /Palatino-BoldItalic]
+[/Times-Roman /Times-Italic
+ /Times-Bold /Times-BoldItalic]
+[/Symbol
+ /ZapfChancery-MediumItalic
+ /ZapfDingbats]
+] def
+
+% We need to register the fonts under their true names, not aliases.
+/Lists Lists mark exch
+ { mark exch
+ { { Fontmap 1 index get dup type /nametype ne { pop exit } if
+ exch pop
+ }
+ loop
+ }
+ forall ]
+ }
+forall ] def
+
+% Squeeze the fonts to their .cpf format.
+(Squeezing... ) print flush
+/fdict mark
+Lists
+ { { dup squeezefont } forall } forall
+.dicttomark def
+(done.\n) print flush
+
+% Invert fdict.
+/f2dict fdict length dict def
+fdict { exch f2dict 3 1 roll put } forall
+
+% Construct the compressed font file.
+(Creating ) print allname print (... ) print flush
+/posdict fdict length dict def
+/all allname (w) file def
+all beginfilestring writestring
+Lists
+ { dup == flush
+ /fbegin all fileposition def
+ mark exch { fdict exch get } forall ]
+ all packfiles exch pop
+ /flength all fileposition fbegin sub def
+ { fbegin flength 3 -1 roll aload pop 4 packedarray
+ exch f2dict exch get exch posdict 3 1 roll put
+ }
+ forall
+ }
+forall
+all closefile
+(done.\n) print flush
+
+% Write the Fontmap addendum for accessing compressed fonts.
+(Writing ) print allmapname print (... ) print flush
+allmapname (w) file
+dup (%!
+/.runpackedlibfile where{pop}{(gs_pfile.ps)runlibfile}ifelse
+.currentglobal true .setglobal
+) writestring
+posdict
+ { exch 2 index exch write==only exch dup ({) writestring
+ dup allname write==only
+ exch { 1 index dup ( ) writestring exch write==only } forall
+ dup ( .runpackedlibfile}bind .definefontmap
+) writestring
+ }
+forall
+dup (.setglobal
+) writestring
+closefile
+(done.\n) print flush
diff --git a/Master/xemtex/gslib/pcharstr.ps b/Master/xemtex/gslib/pcharstr.ps
new file mode 100644
index 00000000000..06d6a29ca52
--- /dev/null
+++ b/Master/xemtex/gslib/pcharstr.ps
@@ -0,0 +1,127 @@
+% Copyright (C) 1990, 1992, 1997, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: pcharstr.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% pcharstr.ps
+% Print the CharStrings and Subrs (if present) from a Type 1 font,
+% in either a PostScript-like or a C-compatible form,
+% depending on whether CSFormat is defined as /PS or /C.
+
+% Load the Type 1 utilities.
+(type1ops.ps) runlibfile
+
+% Define the printing procedures for PostScript-like output.
+/pcs_ps_dict mark
+ /, {( ) print}
+ /charname {==only}
+ /csbegin {}
+ /beginchars {(%---------------- CharStrings\n) print}
+ /charbegin {==only}
+ /char1 {( ) print ==only}
+ /endchars {}
+ /beginsubrs {(%---------------- Subrs\n) print}
+ /subrbegin {=only}
+ /endsubrs {}
+ /beginboxes {(%---------------- Encoding & metrics\n) print}
+ /notdefbox {}
+ /boxbegin {=only ( ) print}
+ /boxend {(\n) print}
+ /endboxes {(%----------------\n) print}
+.dicttomark readonly def
+
+% Define the printing procedures for C-like output.
+/pcs_c_dict mark
+ /, {(, ) print}
+ /charname {(") print =only (") print}
+ /csbegin {counttomark =only ,}
+ /beginchars {(\nconstdata int CSCharData[] = {\n) print}
+ /charbegin {pop}
+ /char1 {=only ,}
+ /endchars {
+ (-1\n};\nconstdata char *CSCharNames[] = {\n) print
+ CharStrings {pop charname ,} forall (0\n};\n) print
+ }
+ /beginsubrs {(\nconstdata int CSSubrs[] = {\n) print}
+ /subrbegin {pop}
+ /endsubrs {(-1\n};\n) print}
+ /beginboxes {(\nconstdata type1_box CSboxes[] = {\n) print}
+ /notdefbox {( {""},\n) print}
+ /boxbegin {pop ( {) print}
+ /boxend {(},) =}
+ /endboxes {( {0}\n};\n) print}
+.dicttomark readonly def
+
+/printcs
+ { dup type /stringtype eq
+ { printcs1 (\n) print }
+ { ( ) print == }
+ ifelse
+ } bind def
+/printcs1
+ { save exch
+ lenIV 0 ge {
+ 4330 exch dup length string .type1decrypt exch pop
+ dup length lenIV sub lenIV exch getinterval
+ } if
+ 0 () /SubFileDecode filter
+ mark exch charstack_read csbegin
+ counttomark 1 sub -1 0 { index char1 } for
+ cleartomark restore
+ } bind def
+
+/printfont
+ { pcs_ps_dict
+ /CSFormat where { pop CSFormat /C eq { pop pcs_c_dict } if } if
+ begin
+ currentfont begin Private begin 10 dict begin
+
+ % Print the CharStrings and Subrs
+
+ beginchars
+ CharStrings { exch charbegin printcs } forall
+ endchars
+ /Subrs where
+ { pop % the dictionary
+ beginsubrs
+ 0 1 Subrs length 1 sub
+ { dup subrbegin
+ Subrs exch get printcs
+ } for
+ endsubrs
+ } if
+
+ % Print the bounding boxes
+
+ gsave nulldevice FontMatrix matrix invertmatrix concat
+ beginboxes
+ 0 1 Encoding length 1 sub
+ { dup Encoding exch get dup /.notdef eq
+ { pop pop notdefbox
+ }
+ { 1 index boxbegin charname ,
+ ( ) dup 0 4 -1 roll put
+ newpath 0 0 moveto false charpath
+ pathbbox ({) print 4 -1 roll =only ,
+ 3 -1 roll =only , exch =only , =only (}) print
+ boxend
+ }
+ ifelse
+ } for
+ endboxes
+ grestore
+
+ end end end end
+ } bind def
diff --git a/Master/xemtex/gslib/pdf2dsc b/Master/xemtex/gslib/pdf2dsc
new file mode 100644
index 00000000000..e47b429c40c
--- /dev/null
+++ b/Master/xemtex/gslib/pdf2dsc
@@ -0,0 +1,26 @@
+#! /bin/sh
+# $Id: pdf2dsc,v 1.3 2000/12/29 05:03:49 alexcher Exp $
+
+# psf2dsc: generates an index of a PDF file.
+#
+# Yves Arrouye <arrouye@debian.org>, 1996.
+# 2000-05-18 lpd <ghost@aladdin.com> added -dSAFER
+
+me=`basename $0`
+
+usage() {
+ >&2 echo usage: $me "pdffile [ dscfile ]"
+ exit 1
+}
+
+if [ $# -gt 2 ]
+then
+ usage
+fi
+
+pdffile=$1
+dscfile=$2
+: ${dscfile:=`echo $pdffile | sed 's,\.[^/.]*,,'`.dsc}
+
+exec gs -q -dNODISPLAY -dSAFER -dDELAYSAFER\
+ -sPDFname="$pdffile" -sDSCname="$dscfile" pdf2dsc.ps -c quit
diff --git a/Master/xemtex/gslib/pdf2dsc.bat b/Master/xemtex/gslib/pdf2dsc.bat
new file mode 100644
index 00000000000..8d33bc9e48a
--- /dev/null
+++ b/Master/xemtex/gslib/pdf2dsc.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem $Id: pdf2dsc.bat,v 1.2 2001/06/22 16:09:22 lpd Exp $
+@rem Convert PDF to DSC
+
+if %1/==/ goto usage
+if %2/==/ goto usage
+call gssetgs.bat
+
+rem Watcom C deletes = signs, so use # instead.
+%GSC% -q -dNODISPLAY -dSAFER -dDELAYSAFER -sPDFname#%1 -sDSCname#%2 -sOutputFile#%2 pdf2dsc.ps
+goto end
+
+:usage
+echo "Usage: pdf2dsc input.pdf output.dsc"
+
+:end
+
+
diff --git a/Master/xemtex/gslib/pdf2dsc.ps b/Master/xemtex/gslib/pdf2dsc.ps
new file mode 100644
index 00000000000..168dbd91632
--- /dev/null
+++ b/Master/xemtex/gslib/pdf2dsc.ps
@@ -0,0 +1,166 @@
+% Copyright (C) 1994, 1995, 1996, 1997, 1998 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: pdf2dsc.ps,v 1.3.4.2.2.1 2003/04/12 14:02:39 giles Exp $
+% pdf2dsc.ps
+% read pdf file and produce DSC "index" file.
+%
+% Input file is named PDFname
+% Output file is named DSCname
+%
+% Run using:
+% gs -dNODISPLAY -sPDFname=pdffilename -sDSCname=tempfilename pdf2dsc.ps
+% Then display the PDF file with
+% gs tempfilename
+%
+% Modified by Geoff Keating <geoffk@ozemail.com.au> 21/12/98:
+% Add DocumentMedia, PageMedia comments
+% Use inherited BoundingBox and Orientation
+% Reformat, add new macro 'puts', generally clean up
+% Modified by Johannes Plass <plass@dipmza.physik.uni-mainz.de> 1996-11-05:
+% Adds BoundingBox and Orientation if available.
+% Modified by rjl/lpd 9/19/96
+% Updates for compatibility with modified pdf_*.ps code for handling
+% page ranges (i.e., partial files) better.
+% Modified by Geoff Keating <Geoff.Keating@anu.edu.au> 7/3/96:
+% include Title and CreationDate DSC comments (these are displayed by
+% Ghostview);
+% reduce the size of typical output files by a factor of about 3.
+% Modified by L. Peter Deutsch 3/18/96:
+% Removes unnecessary and error-prone code duplicated from pdf_main.ps
+% Modified by L. Peter Deutsch for GS 3.33
+% Originally by Russell Lang 1995-04-26
+
+/PDFfile PDFname (r) file def
+/DSCfile DSCname (w) file def
+systemdict /.setsafe known { .setsafe } if
+
+/puts { DSCfile exch writestring } bind def
+/DSCstring 255 string def
+/MediaTypes 10 dict def
+
+% (str1) (str2) concatstr (str1str2)
+/concatstr {
+ 2 copy length exch length add string
+ dup dup 5 2 roll copy length
+% stack: newstring newstring str2 str1-length
+ exch putinterval
+} bind def
+
+ GS_PDF_ProcSet begin
+ pdfdict begin
+ PDFfile
+ pdfopen begin
+ /FirstPage where { pop } { /FirstPage 1 def } ifelse
+ /LastPage where { pop } { /LastPage pdfpagecount def } ifelse
+
+% scan through for media sizes, keep them in the dictionary
+ FirstPage 1 LastPage {
+ pdfgetpage /MediaBox pget pop % MediaBox is a required attribute
+ aload pop
+ 3 -1 roll sub 3 1 roll exch sub exch
+ 2 array astore
+ aload 3 1 roll 10 string cvs exch 10 string cvs
+ (x) exch concatstr concatstr cvn
+ MediaTypes 3 1 roll exch put
+ } for
+
+% write header and prolog
+ (%!PS-Adobe-3.0\n) puts
+ Trailer /Info knownoget
+ {
+ dup /Title knownoget
+ {
+ (%%Title: ) puts
+ DSCfile exch write==
+ }
+ if
+ /CreationDate knownoget
+ {
+ (%%CreationDate: ) puts
+ DSCfile exch write==
+ }
+ if
+ }
+ if
+ % This is really supposed to be sorted by frequency of usage...
+ (%%DocumentMedia: )
+ MediaTypes {
+ exch pop
+ 1 index puts
+ (y) puts dup 1 get DSCstring cvs puts
+ (x) puts dup 0 get DSCstring cvs puts
+ ( ) puts dup 0 get DSCstring cvs puts
+ ( ) puts 1 get DSCstring cvs puts
+ ( 70 white ()\n) puts
+ pop (%%+ )
+ } forall
+ pop
+
+ (%%Pages: ) puts
+ LastPage FirstPage sub 1 add DSCstring cvs puts
+ (\n%%EndComments\n) puts
+ (%%BeginProlog\n) puts
+ (/Page null def\n/Page# 0 def\n/PDFSave null def\n) puts
+ (/DSCPageCount 0 def\n) puts
+ (/DoPDFPage {dup /Page# exch store pdfgetpage pdfshowpage } def\n) puts
+ (GS_PDF_ProcSet begin\npdfdict begin\n) puts
+ (%%EndProlog\n) puts
+ (%%BeginSetup\n) puts
+ DSCfile PDFname write==only
+ ( \(r\) file pdfopen begin\n) puts
+ (%%EndSetup\n) puts
+ % process each page
+ FirstPage 1 LastPage {
+ (%%Page: ) puts
+ dup DSCstring cvs puts
+ ( ) puts
+ dup DSCstring cvs puts
+ (\n) puts
+
+ dup pdfgetpage
+ dup /MediaBox pget pop
+ (%%PageMedia: y) puts
+ aload pop 3 -1 roll sub DSCstring cvs puts
+ (x) puts exch sub DSCstring cvs puts
+ (\n) puts
+ dup /CropBox pget {
+ (%%PageBoundingBox: ) puts
+ {DSCfile exch write=only ( ) puts} forall
+ (\n) puts
+ } if
+ /Rotate pget {
+ (%%PageOrientation: ) puts
+ 90 div cvi 4 mod dup 0 lt {4 add} if
+ [(Portrait) (Landscape) (UpsideDown) (Seascape)] exch get puts
+ (\n) puts
+ } if
+
+ DSCfile exch DSCstring cvs writestring
+ ( DoPDFPage\n) puts
+ } for
+ currentdict pdfclose
+ end
+ end
+ end
+% write trailer
+(%%Trailer\n) puts
+(currentdict pdfclose\nend\nend\nend\n) puts
+(%%EOF\n) puts
+% close output file and exit
+DSCfile closefile
+quit
+% end of pdf2dsc.ps
diff --git a/Master/xemtex/gslib/pdf2ps b/Master/xemtex/gslib/pdf2ps
new file mode 100644
index 00000000000..b684739be95
--- /dev/null
+++ b/Master/xemtex/gslib/pdf2ps
@@ -0,0 +1,29 @@
+#!/bin/sh
+# $Id: pdf2ps,v 1.4 2001/06/22 16:09:22 lpd Exp $
+# Convert PDF to PostScript.
+
+OPTIONS=""
+while true
+do
+ case "$1" in
+ -?*) OPTIONS="$OPTIONS $1" ;;
+ *) break ;;
+ esac
+ shift
+done
+
+if [ $# -eq 2 ]
+then
+ outfile=$2
+elif [ $# -eq 1 ]
+then
+ outfile=`basename "$1" \.pdf`.ps
+else
+ echo "Usage: `basename $0` [-dASCII85EncodePages=false] [-dLanguageLevel=1|2|3] input.pdf [output.ps]" 1>&2
+ exit 1
+fi
+
+# Doing an initial 'save' helps keep fonts from being flushed between pages.
+# We have to include the options twice because -I only takes effect if it
+# appears before other options.
+exec gs $OPTIONS -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pswrite "-sOutputFile=$outfile" $OPTIONS -c save pop -f "$1"
diff --git a/Master/xemtex/gslib/pdf2ps.bat b/Master/xemtex/gslib/pdf2ps.bat
new file mode 100644
index 00000000000..618e1d15446
--- /dev/null
+++ b/Master/xemtex/gslib/pdf2ps.bat
@@ -0,0 +1,24 @@
+@echo off
+@rem $Id: pdf2ps.bat,v 1.5 2001/06/22 16:09:22 lpd Exp $
+@rem Convert PDF to PostScript.
+
+if %1/==/ goto usage
+if %2/==/ goto usage
+call gssetgs.bat
+echo -dNOPAUSE -dBATCH -dSAFER -sDEVICE#pswrite >_.at
+:cp
+if %3/==/ goto doit
+echo %1 >>_.at
+shift
+goto cp
+
+:doit
+rem Watcom C deletes = signs, so use # instead.
+%GSC% -q -sOutputFile#%2 @_.at %1
+if exist _.at erase _.at
+goto end
+
+:usage
+echo "Usage: pdf2ps [-dASCII85DecodePages=false] [-dLanguageLevel=n] input.pdf output.ps"
+
+:end
diff --git a/Master/xemtex/gslib/pdf2ps.cmd b/Master/xemtex/gslib/pdf2ps.cmd
new file mode 100755
index 00000000000..34e4a419c93
--- /dev/null
+++ b/Master/xemtex/gslib/pdf2ps.cmd
@@ -0,0 +1,41 @@
+/* $Id: pdf2ps.cmd,v 1.2 2001/02/03 18:31:12 alexcher Exp $ */
+/*
+ * This file is maintained by a user: if you have any questions about it,
+ * please contact Mark Hale (mark.hale@physics.org).
+ */
+
+/* Convert PDF to PostScript. */
+
+parse arg params
+
+gs='@gsos2'
+inext='.pdf'
+outext='.ps'
+
+if params='' then call usage
+
+options='-dNOPAUSE -dBATCH -dSAFER -sDEVICE=pswrite'
+
+/* extract options from command line */
+i=1
+param=word(params,i)
+do while substr(param,1,1)='-'
+ options=options param
+ i=i+1
+ param=word(params,i)
+end
+
+infile=param
+if infile='' then call usage
+outfile=word(params,i+1)
+if outfile='' then do
+ outfile=infile''outext
+ infile=infile''inext
+end
+
+gs '-q -sOutputFile='outfile options infile
+exit
+
+usage:
+say 'Usage: pdf2ps [-dASCII85DecodePages=false] [-dLanguageLevel=n] input[.pdf output.ps]'
+exit
diff --git a/Master/xemtex/gslib/pdf_base.ps b/Master/xemtex/gslib/pdf_base.ps
new file mode 100644
index 00000000000..b18caf6803b
--- /dev/null
+++ b/Master/xemtex/gslib/pdf_base.ps
@@ -0,0 +1,640 @@
+% Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: pdf_base.ps,v 1.14.2.1.2.1 2003/04/12 14:02:39 giles Exp $
+% pdf_base.ps
+% Basic parser for PDF reader.
+
+% This handles basic parsing of the file (including the trailer
+% and cross-reference table), as well as objects, object references,
+% streams, and name/number trees; it doesn't include any facilities for
+% making marks on the page.
+
+/.setlanguagelevel where { pop 2 .setlanguagelevel } if
+.currentglobal true .setglobal
+/pdfdict where { pop } { /pdfdict 100 dict def } ifelse
+pdfdict begin
+
+% Define the name interpretation dictionary for reading values.
+/valueopdict mark
+ (<<) cvn { mark } bind % don't push an actual mark!
+ (>>) cvn /.dicttomark load
+ ([) cvn { mark } bind % ditto
+ (]) cvn dup load
+% /true true % see .pdfexectoken below
+% /false false % ibid.
+% /null null % ibid.
+ /F dup cvx % see Objects section below
+ /R dup cvx % see Objects section below
+ /stream dup cvx % see Streams section below
+.dicttomark readonly def
+
+% ------ Utilities ------ %
+
+% Define a scratch string. The PDF language definition says that
+% no line in a PDF file can exceed 255 characters.
+/pdfstring 255 string def
+
+% Read the previous line of a file. If we aren't at a line boundary,
+% read the line containing the current position.
+% Skip any blank lines.
+/prevline % - prevline <startpos> <substring>
+ { PDFfile fileposition dup () pdfstring
+ 2 index 257 sub 0 .max PDFfile exch setfileposition
+ { % Stack: initpos linepos line string
+ PDFfile fileposition
+ PDFfile 2 index readline pop
+ dup length 0 gt
+ { 3 2 roll 5 -2 roll pop pop 2 index }
+ { pop }
+ ifelse
+ % Stack: initpos linepos line string startpos
+ PDFfile fileposition 5 index ge { exit } if
+ pop
+ }
+ loop pop pop 3 -1 roll pop
+ } bind def
+
+% Handle the PDF 1.2 #nn escape convention when reading from a file.
+% This should eventually be done in C.
+/.pdffixname { % <execname> .pdffixname <execname'>
+ PDFversion 1.2 ge {
+ dup .namestring (#) search {
+ name#escape cvn exch pop
+ } {
+ pop
+ } ifelse
+ } if
+} bind def
+/name#escape % <post> <(#)> <pre> name#escape <string>
+{ exch pop
+ 1 index 2 () /SubFileDecode filter dup (x) readhexstring
+ % Stack: post pre stream char t/f
+ not { /.pdftoken cvx /syntaxerror signalerror } if
+ exch closefile concatstrings
+ exch 2 1 index length 2 sub getinterval
+ (#) search { name#escape } if concatstrings
+} bind def
+
+% Execute a file, interpreting its executable names in a given
+% dictionary. The name procedures may do whatever they want
+% to the operand stack.
+/.pdftokenerror { % <count> <opdict> <errtoken> .pdftokenerror -
+ BXlevel 0 le {
+ (%stderr) (w) file
+ dup (****************Unknown operator: ) writestring
+ dup 2 index .writecvs dup (\n) writestring flushfile
+ } if pop pop
+ count exch sub { pop } repeat % pop all the operands
+} bind def
+/.pdfexectoken { % <count> <opdict> <exectoken> .pdfexectoken ?
+ DEBUG { dup == flush } if
+ 2 copy .knownget {
+ exch pop exch pop exch pop exec
+ } {
+ % Normally, true, false, and null would appear in opdict
+ % and be treated as "operators". However, there is a
+ % special fast case in the PostScript interpreter for names
+ % that are defined in, and only in, systemdict and/or
+ % userdict: putting these three names in the PDF dictionaries
+ % destroys this property for them, slowing down their
+ % interpretation in all PostScript code. Therefore, we
+ % check for them explicitly here instead.
+ dup dup dup /true eq exch /false eq or exch /null eq or {
+ exch pop exch pop //systemdict exch get
+ } {
+ .pdftokenerror
+ } ifelse
+ } ifelse
+} bind def
+/.pdfrun { % <file> <opdict> .pdfrun -
+ % Construct a procedure with the stack depth, file and opdict
+ % bound into it.
+ 1 index cvlit count 2 sub 3 1 roll mark mark 5 2 roll
+ { % Stack: ..operands.. count opdict file
+ token {
+ dup type /nametype eq {
+ dup xcheck {
+ .pdfexectoken
+ } {
+ .pdffixname
+ exch pop exch pop DEBUG { dup ==only ( ) print flush } if
+ } ifelse
+ } {
+ exch pop exch pop DEBUG { dup ==only ( ) print flush } if
+ } ifelse
+ } {
+ (%%EOF) cvn cvx .pdfexectoken
+ } ifelse
+ }
+ aload pop .packtomark cvx
+ /loop cvx 2 packedarray cvx
+ { stopped /PDFsource } aload pop
+ PDFsource
+ { store { stop } if } aload pop .packtomark cvx
+ /PDFsource 3 -1 roll store exec
+} bind def
+
+% Execute a file, like .pdfrun, for a marking context.
+% This temporarily rebinds LocalResources and DefaultMatrix.
+/.pdfruncontext { % <resdict> <file> <opdict> .pdfruncontext -
+ /.pdfrun load LocalResources DefaultMatrix
+ /LocalResources 7 -1 roll store
+ /DefaultMatrix matrix currentmatrix store
+ 3 .execn
+ /DefaultMatrix exch store
+ /LocalResources exch store
+} bind def
+
+% Get the depth of the PDF operand stack. The main program (pdf_main.ps)
+% sets pdfemptycount before calling .pdfrun.
+/.pdfcount { % - .pdfcount <count>
+ count pdfemptycount sub
+} bind def
+
+% ------ File reading ------ %
+
+% Read the cross-reference entry for an (unresolved) object.
+% The caller must save and restore the PDFfile position if desired.
+% For invalid (free) objects, we return 0.
+/readxrefentry % <object#> readxrefentry <objpos>
+ { dup Objects exch lget
+ PDFfile exch setfileposition
+ PDFfile token pop % object position
+ PDFfile token pop % generation #
+ PDFfile token pop % n or f
+ dup /n eq
+ { pop 1 add dup 255 gt
+ { Generations ltype /stringtype eq
+ { % Convert Generations from a string to an array.
+ larray Generations llength lgrowto dup
+ 0 1 2 index llength 1 sub
+ { Generations 1 index lget lput dup
+ }
+ for pop /Generations exch store
+ }
+ if
+ }
+ if
+ }
+ { /f eq
+ { pop 0 }
+ { /readxrefentry cvx /syntaxerror signalerror }
+ ifelse
+ }
+ ifelse
+ % Stack: obj# objpos 1+gen#
+ Generations 4 -1 roll 3 -1 roll lput
+ } bind def
+
+% ================================ Objects ================================ %
+
+% Since we may have more than 64K objects, we have to use a 2-D array to
+% hold them (and the parallel Generations structure).
+/lshift 9 def
+/lnshift lshift neg def
+/lsubmask 1 lshift bitshift 1 sub def
+/lsublen lsubmask 1 add def
+/larray { % - larray <larray>
+ [ [] ]
+} bind def
+/lstring { % - lstring <lstring>
+ [ () ]
+} bind def
+/ltype { % <lseq> type <type>
+ 0 get type
+} bind def
+/lget { % <lseq> <index> lget <value>
+ dup //lsubmask and 3 1 roll //lnshift bitshift get exch get
+} bind def
+/lput { % <lseq> <index> <value> lput -
+ 3 1 roll
+ dup //lsubmask and 4 1 roll //lnshift bitshift get
+ 3 1 roll put
+} bind def
+/llength { % <lseq> llength <length>
+ dup length 1 sub dup //lshift bitshift
+ 3 1 roll get length add
+} bind def
+% lgrowto assumes newlength > llength(lseq)
+/growto { % <string/array> <length> growto <string'/array'>
+ 1 index type /stringtype eq { string } { array } ifelse
+ 2 copy copy pop exch pop
+} bind def
+/lgrowto { % <lseq> <newlength> lgrowto <lseq'>
+ dup //lsubmask add //lnshift bitshift dup 3 index length gt {
+ % Add more sub-arrays. Start by completing the last existing one.
+ % Stack: lseq newlen newtoplen
+ 3 -1 roll dup llength 1 sub //lsubmask or 1 add lgrowto
+ % Stack: newlen newtoplen lseq
+ [ exch aload pop
+ counttomark 2 add -1 roll % newtoplen
+ counttomark sub { dup 0 0 getinterval lsublen growto } repeat
+ dup 0 0 getinterval ] exch
+ } {
+ pop
+ } ifelse
+ % Expand the last sub-array.
+ 1 sub //lsubmask and 1 add
+ exch dup dup length 1 sub 2 copy
+ % Stack: newsublen lseq lseq len-1 lseq len-1
+ get 5 -1 roll growto put
+} bind def
+/lforall { % <lseq> <proc> lforall -
+ /forall cvx 2 packedarray cvx forall
+} bind def
+
+% We keep track of PDF objects using the following PostScript variables:
+%
+% Generations (lstring): Generations[N] holds 1+ the current
+% generation number for object number N. (As far as we can tell,
+% this is needed only for error checking.) For free objects,
+% Generations[N] is 0.
+%
+% Objects (larray): If object N is loaded, Objects[N] is the actual
+% object; otherwise, Objects[N] is an executable integer giving
+% the file offset of the object's entry in the cross-reference
+% table.
+%
+% GlobalObjects (dictionary): If object N has been resolved in
+% global VM, GlobalObjects[N] is the same as Objects[N]
+% (except that GlobalObjects itself is stored in global VM,
+% so the entry will not be deleted at the end of the page).
+%
+% IsGlobal (lstring): IsGlobal[N] = 1 iff object N was resolved in
+% global VM. This is an accelerator to avoid having to do a
+% dictionary lookup in GlobalObjects when resolving every object.
+
+% Initialize the PDF object tables.
+/initPDFobjects { % - initPDFobjects -
+ /Objects larray def
+ /Generations lstring def
+ .currentglobal true .setglobal
+ /GlobalObjects 20 dict def
+ .setglobal
+ /IsGlobal lstring def
+} bind def
+
+% Grow the tables to a specified size.
+/growPDFobjects { % <minsize> growPDFobjects -
+ dup Objects llength gt {
+ dup Objects exch lgrowto /Objects exch def
+ } if
+ dup Generations llength gt {
+ dup Generations exch lgrowto /Generations exch def
+ } if
+ dup IsGlobal llength gt {
+ dup IsGlobal exch lgrowto /IsGlobal exch def
+ } if
+ pop
+} bind def
+
+% We represent an unresolved object reference by a procedure of the form
+% {obj# gen# resolveR}. This is not a possible PDF object, because PDF has
+% no way to represent procedures. Since PDF in fact has no way to represent
+% any PostScript object that doesn't evaluate to itself, we can 'force'
+% a possibly indirect object painlessly with 'exec'.
+% Note that since we represent streams by executable dictionaries
+% (see below), we need both an xcheck and a type check to determine
+% whether an object has been resolved.
+/resolved? { % <object#> resolved? <value> true
+ % <object#> resolved? false
+ Objects 1 index lget dup xcheck {
+ dup type /integertype eq {
+ % Check whether the object is in GlobalObjects.
+ pop IsGlobal 1 index lget 0 eq {
+ pop false
+ } {
+ % Update Objects from GlobalObjects
+ DEBUG { (%Global=>local: ) print dup == } if
+ GlobalObjects 1 index get dup Objects 4 1 roll lput true
+ } ifelse
+ } {
+ exch pop true
+ } ifelse
+ } {
+ exch pop true
+ } ifelse
+} bind def
+/oforce /exec load def
+/oget { % <array> <index> oget <object>
+ % <dict> <key> oget <object>
+ % Before release 6.20, this procedure stored the resolved
+ % object back into the referring slot. In order to support
+ % PDF linearization, we no longer do this.
+ get oforce
+} bind def
+% A null value in a dictionary is equivalent to an omitted key;
+% we must check for this specially.
+/knownoget { % <dict> <key> knownoget <value> true
+ % <dict> <key> knownoget false
+ % See oget above regarding this procedure.
+ .knownget {
+ oforce dup null eq { pop false } { true } ifelse
+ } {
+ false
+ } ifelse
+} bind def
+
+% PDF 1.1 defines a 'foreign file reference', but not its meaning.
+% Per the specification, we convert these to nulls.
+/F { % <file#> <object#> <generation#> F <object>
+ % Some PDF 1.1 files use F as a synonym for f!
+ .pdfcount 3 lt { f } { pop pop pop null } ifelse
+} bind def
+
+/checkgeneration { % <object#> <generation#> checkgeneration <object#> <OK>
+ Generations 2 index lget 1 sub 1 index eq {
+ pop true
+ } {
+ QUIET not {
+ Generations 2 index lget 0 eq {
+ (Warning: reference to free object: )
+ } {
+ (Warning: wrong generation: )
+ } ifelse print 1 index =only ( ) print =only ( R) =
+ } {
+ pop
+ } ifelse false
+ } ifelse
+} bind def
+/R { % <object#> <generation#> R <object>
+ /resolveR cvx 3 packedarray cvx
+} bind def
+
+% If we encounter an object definition while reading sequentially,
+% we just store it away and keep going.
+/objopdict mark
+ valueopdict { } forall
+ /endobj dup cvx
+.dicttomark readonly def
+/obj { % <object#> <generation#> obj <object>
+ PDFfile objopdict .pdfrun
+} bind def
+/endobj { % <object#> <generation#> <object> endobj <object>
+ 3 1 roll
+ % Read the xref entry if we haven't yet done so.
+ % This is only needed for generation # checking.
+ 1 index resolved? {
+ pop
+ } {
+ PDFfile fileposition
+ 2 index readxrefentry pop
+ PDFoffset add PDFfile exch setfileposition
+ } ifelse
+ checkgeneration {
+ % The only global objects we bother to save are
+ % (resource) dictionaries.
+ 1 index dup gcheck exch type /dicttype eq and {
+ DEBUG { (%Local=>global: ) print dup == } if
+ GlobalObjects 1 index 3 index put
+ IsGlobal 1 index 1 put
+ } if
+ Objects exch 2 index lput
+ } {
+ pop pop null
+ } ifelse
+} bind def
+
+% When resolving an object reference, we stop at the endobj.
+/resolveopdict mark
+ valueopdict { } forall
+ /endobj { endobj exit } bind
+ % OmniForm generates PDF file with endobj missing in some
+ % objects. AR ignores this. So we have to do it too.
+ /obj { pop pop endobj exit } bind
+.dicttomark readonly def
+/resolveR { % <object#> <generation#> resolveR <object>
+ DEBUG { (%Resolving: ) print 2 copy 2 array astore == } if
+ 1 index resolved? {
+ exch pop exch pop
+ } {
+ PDFfile fileposition 3 1 roll
+ 1 index readxrefentry
+ 3 1 roll checkgeneration {
+ % Stack: savepos objpos obj#
+ exch PDFoffset add PDFfile exch setfileposition
+ PDFfile token pop 2 copy ne
+ { (xref error!) = /resolveR cvx /rangecheck signalerror
+ }
+ if pop PDFfile token pop
+ PDFfile token pop /obj ne
+ { (xref error!) = /resolveR cvx /rangecheck signalerror
+ }
+ if
+ pdf_run_resolve % PDFfile resolveopdict .pdfrun
+ }
+ { % Don't cache if the generation # is wrong.
+ pop pop null
+ } ifelse
+ exch PDFfile exch setfileposition
+ } ifelse
+} bind def
+
+% ================================ Streams ================================ %
+
+% We represent a stream by an executable dictionary that contains,
+% in addition to the contents of the original stream dictionary:
+% /File - the file or string where the stream contents are stored,
+% if the stream is not an external one.
+% /FilePosition - iff File is a file, the position in the file
+% where the contents start.
+% /StreamKey - the key used to decrypt this stream, if any.
+% We do the real work of constructing the data stream only when the
+% contents are needed.
+
+% Construct a stream. The length is not reliable in the face of
+% different end-of-line conventions, but it's all we've got.
+%
+% PDF files are inconsistent about what may fall between the 'stream' keyword
+% and the actual stream data, and it appears that no one algorithm can
+% detect this reliably. We used to try to guess whether the file included
+% extraneous \r and/or \n characters, but we no longer attempt to do so,
+% especially since the PDF 1.2 specification states flatly that the only
+% legal terminators following the 'stream' keyword are \n or \r\n, both of
+% which are properly skipped and discarded by the token operator.
+/stream { % <dict> stream <modified_dict>
+ dup /F known dup PDFsource PDFfile eq or {
+ not {
+ dup /File PDFfile put
+ dup /FilePosition PDFfile fileposition put
+ DEBUG { (%FilePosition: ) print dup /FilePosition get == } if
+ } if
+ PDFfile fileposition 1 index /Length oget add
+ PDFfile exch setfileposition
+ } {
+ pop
+ % We're already reading from a stream, which we can't reposition.
+ % Capture the sub-stream contents in a string.
+ dup /Length oget string PDFsource exch readstring
+ not {
+ (Unexpected EOF in stream!) =
+ /stream cvx /rangecheck signalerror
+ } if
+ 1 index exch /File exch put
+ } ifelse
+ PDFsource token pop
+ /endstream ne { /stream cvx /syntaxerror signalerror } if
+ cvx
+} bind def
+/endstream {
+ exit
+} bind def
+
+% Contrary to the published PDF (1.3) specification, Acrobat Reader
+% accepts abbreviated filter names everywhere, not just for in-line images,
+% and some applications (notably htmldoc) rely on this.
+/unabbrevfilterdict mark
+ /AHx /ASCIIHexDecode /A85 /ASCII85Decode /CCF /CCITTFaxDecode
+ /DCT /DCTDecode /Fl /FlateDecode /LZW /LZWDecode /RL /RunLengthDecode
+.dicttomark readonly def
+
+% Extract and apply filters.
+/filterparms { % <dict> <DPkey> <Fkey> filterparms
+ % <dict> <parms> <filternames>
+ 2 index exch .knownget {
+ exch 2 index exch .knownget {
+ % Both filters and parameters.
+ exch dup type /nametype eq {
+ 1 array astore exch 1 array astore exch
+ } if
+ } {
+ % Filters, but no parameters.
+ null exch
+ dup type /nametype eq { 1 array astore } if
+ } ifelse
+ } {
+ % No filters: ignore parameters, if any.
+ pop null { }
+ } ifelse
+} bind def
+/filtername { % <filtername> filtername <filtername'>
+ //unabbrevfilterdict 1 index .knownget { exch pop } if
+} bind def
+/applyfilters { % <parms> <source> <filternames> applyfilters <stream>
+ 2 index null eq {
+ { filtername filter }
+ } {
+ { % Stack: parms stream filtername
+ 2 index 0 oget dup null eq { pop } { exch } ifelse filtername filter
+ exch dup length 1 sub 1 exch getinterval exch
+ }
+ } ifelse forall exch pop
+} bind def
+
+% Resolve a stream dictionary to a PostScript stream.
+% Streams with no filters require special handling:
+% - If we are going to interpret their contents, we let endstream
+% terminate the interpretation loop;
+% - If we are just going to read data from them, we impose
+% a SubFileDecode filter that reads just the requisite amount of data.
+% Note that, in general, resolving a stream repositions PDFfile.
+% Clients must save and restore the position of PDFfile themselves.
+/resolvestream { % <streamdict> <readdata?> resolvestream <stream>
+ 1 index /F .knownget {
+ % This stream is stored on an external file.
+ (r) file 3 -1 roll
+ /FDecodeParms /FFilter filterparms
+ % Stack: readdata? file dict parms filternames
+ 4 -1 roll exch
+ pdf_decrypt_stream
+ applyfilters
+ } {
+ exch dup /FilePosition .knownget {
+ 1 index /File get exch setfileposition
+ } if
+ % Stack: readdata? dict
+ /DecodeParms /Filter filterparms
+ % Stack: readdata? dict parms filternames
+ 2 index /File get exch
+ % Stack: readdata? dict parms file/string filternames
+ pdf_decrypt_stream % add decryption if needed
+ dup length 0 eq {
+ % All the PDF filters have EOD markers, but in this case
+ % there is no specified filter.
+ pop exch pop
+ % Stack: readdata? dict file/string
+ 2 index {
+ % We're going to read data; use a SubFileDecode filter.
+ 1 index /Length oget () /SubFileDecode filter
+ } {
+ dup type /filetype ne {
+ % Use a SubFileDecode filter to read from a string.
+ 0 () /SubFileDecode filter
+ } if
+ } ifelse
+ } {
+ applyfilters
+ } ifelse
+ } ifelse
+ % Stack: readdata? dict file
+ exch pop exch pop
+} bind def
+
+% ============================ Name/number trees ============================ %
+
+/nameoget { % <nametree> <key> nameoget <obj|null>
+ exch /Names exch .treeget
+} bind def
+
+/numoget { % <numtree> <key> numoget <obj|null>
+ exch /Nums exch .treeget
+} bind def
+
+/.treeget { % <key> <leafkey> <tree> .treeget <obj|null>
+ dup /Kids knownoget {
+ exch pop .branchget
+ } {
+ exch get .leafget
+ } ifelse
+} bind def
+
+/.branchget { % <key> <leafkey> <kids> .branchget <obj|null>
+ dup length 0 eq {
+ pop pop pop null
+ } {
+ dup length -1 bitshift 2 copy oget
+ % Stack: key leafkey kids mid kids[mid]
+ dup /Limits oget aload pop
+ % Stack: key leafkey kids mid kids[mid] min max
+ 6 index lt {
+ pop pop
+ 1 add 1 index length 1 index sub getinterval .branchget
+ } {
+ 5 index gt {
+ pop
+ 0 exch getinterval .branchget
+ } {
+ exch pop exch pop .treeget
+ } ifelse
+ } ifelse
+ } ifelse
+} bind def
+
+/.leafget { % <key> <pairs> .leafget <obj|null>
+ dup length 2 eq {
+ dup 0 get 2 index eq { 1 oget } { pop null } ifelse
+ exch pop
+ } {
+ dup length -1 bitshift -2 and 2 copy oget
+ % Stack: key pairs mid pairs[mid]
+ 3 index gt { 0 exch } { 1 index length 1 index sub } ifelse
+ getinterval .leafget
+ } ifelse
+} bind def
+
+end % pdfdict
+.setglobal
diff --git a/Master/xemtex/gslib/pdf_draw.ps b/Master/xemtex/gslib/pdf_draw.ps
new file mode 100644
index 00000000000..b75a84e725a
--- /dev/null
+++ b/Master/xemtex/gslib/pdf_draw.ps
@@ -0,0 +1,1151 @@
+% Copyright (C) 1994, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: pdf_draw.ps,v 1.36.2.2.2.1 2003/04/12 14:02:39 giles Exp $
+% pdf_draw.ps
+% PDF drawing operations (graphics, text, and images).
+
+/.setlanguagelevel where { pop 2 .setlanguagelevel } if
+.currentglobal true .setglobal
+/pdfdict where { pop } { /pdfdict 100 dict def } ifelse
+GS_PDF_ProcSet begin
+pdfdict begin
+
+% For simplicity, we use a single interpretation dictionary for all
+% PDF graphics operations, even though this is too liberal.
+/drawopdict 100 dict def
+
+% ================================ Graphics ================================ %
+
+% ---------------- Functions ---------------- %
+
+% Note that resolvefunction converts a PDF Function to a PostScript Function;
+% resolve*fnproc converts a PDF function to a PostScript procedure.
+
+/fnrdict mark
+ 0 { .resolvefn0 }
+ 2 { }
+ 3 { .resolvefn3 }
+ 4 { .resolvefn4 }
+.dicttomark readonly def
+
+/.resolvefn0 {
+ % Don't lose our place in PDFfile.
+ PDFfile fileposition exch
+ dup true resolvestream
+ % The stream isn't positionable, so read all the data now.
+ % Stack: filepos fndict stream
+ 1 index /Range oget length 2 idiv 2 index /BitsPerSample oget mul
+ 2 index /Size oget { mul } forall
+ 7 add 8 idiv string
+ 1 index exch readstring pop exch closefile
+ % Stack: filepos fndict data
+ exch dup length 1 add dict .copydict
+ dup /DataSource 4 -1 roll put
+ exch PDFfile exch setfileposition
+} bdef
+
+/.resolvefn3 {
+ dup length dict .copydict
+ dup /Bounds 2 copy knownoget { put } { pop pop } ifelse
+ dup /Encode 2 copy knownoget { put } { pop pop } ifelse
+ dup /Functions 2 copy oget mark exch dup {
+ oforce .resolvefn
+ } forall
+ counttomark -1 roll astore exch pop put
+} bdef
+
+/.resolvefn4 {
+ PDFfile fileposition exch % filepos fndict
+ dup true resolvestream % filepos fndict stream
+ exch dup length dict copy % filepos stream fndict2
+ dup /Function undef % filepos stream fndict2
+ exch dup token not {
+ () /rangecheck cvx signalerror
+ } if
+ exch token {
+ /rangecheck cvx signalerror
+ } if
+ % Use .bind to avoid idiom recognition.
+ .bind
+ 1 index /Function 3 -1 roll put
+ exch PDFfile exch setfileposition
+} bdef
+currentdict /tfopdict undef
+
+/.resolvefn { % <fndict> .resolvefn <fndict'>
+ dup /FunctionType oget //fnrdict exch get exec
+} bdef
+
+/resolvefunction { % <fndict> resolvefunction <function>
+ .resolvefn
+ DEBUG { (%Function: ) print dup === flush } if
+} bdef
+
+/resolvefnproc { % <fndict> resolvefnproc <proc>
+ resolvefunction .buildfunction
+} bdef
+
+/resolveidfnproc { % <fndict> resolveidfnproc <proc>
+ dup /Identity eq { pop { } } { resolvefnproc } ifelse
+} bdef
+
+/resolvedefaultfnproc { % <fndict> <default> resolved'fnproc <proc>
+ 1 index /Default eq { exch pop } { pop resolveidfnproc } ifelse
+} bdef
+
+% ---------------- Shadings ---------------- %
+
+/shrdict mark
+ /ColorSpace {
+ resolvecolorspace
+ }
+ /Function {
+ dup type /dicttype eq {
+ resolvefunction
+ } {
+ [ exch { oforce resolvefunction } forall ]
+ } ifelse
+ }
+.dicttomark readonly def
+
+/resolveshading { % <shadingstream> resolveshading <shading>
+ PDFfile fileposition exch
+ mark exch {
+ oforce //shrdict 2 index .knownget { exec } if
+ } forall .dicttomark
+ dup /ShadingType get 4 ge {
+ dup dup true resolvestream
+ % Make a reusable stream so that the shading doesn't
+ % reposition PDFfile at unexpected times.
+ /ReusableStreamDecode filter /DataSource exch put
+ } if exch PDFfile exch setfileposition
+} bdef
+/resolvesh { % <shname> resolveshading <shading>
+ Page /Shading rget {
+ resolveshading
+ } {
+ null
+ }ifelse
+} bdef
+
+% ---------------- Halftones ---------------- %
+
+/spotfunctions mark
+ /Round {
+ abs exch abs 2 copy add 1 le {
+ dup mul exch dup mul add 1 exch sub
+ } {
+ 1 sub dup mul exch 1 sub dup mul add 1 sub
+ } ifelse
+ }
+ /Diamond {
+ abs exch abs 2 copy add .75 le {
+ dup mul exch dup mul add 1 exch sub
+ } {
+ 2 copy add 1.23 le {
+ .85 mul add 1 exch sub
+ } {
+ 1 sub dup mul exch 1 sub dup mul add 1 sub
+ } ifelse
+ } ifelse
+ }
+ /Ellipse {
+ abs exch abs 2 copy 3 mul exch 4 mul add 3 sub dup 0 lt {
+ pop dup mul exch .75 div dup mul add 4 div 1 exch sub
+ } {
+ dup 1 gt {
+ pop 1 exch sub dup mul exch 1 exch sub
+ .75 div dup mul add 4 div 1 sub
+ } {
+ .5 exch sub exch pop exch pop
+ } ifelse
+ } ifelse
+ }
+ /EllipseA { dup mul .9 mul exch dup mul add 1 exch sub }
+ /InvertedEllipseA { dup mul .9 mul exch dup mul add 1 sub }
+ /EllipseB { dup 5 mul 8 div mul exch dup mul exch add sqrt 1 exch sub }
+ /EllipseC { dup mul .9 mul exch dup mul add 1 exch sub }
+ /InvertedEllipseC { dup mul .9 mul exch dup mul add 1 sub }
+ /Line { exch pop abs neg }
+ /LineX { pop }
+ /LineY { exch pop }
+ /Square { abs exch abs 2 copy lt { exch } if pop neg }
+ /Cross { abs exch abs 2 copy gt { exch } if pop neg }
+ /Rhomboid { abs exch abs 0.9 mul add 2 div }
+ /DoubleDot { 2 {360 mul sin 2 div exch } repeat add }
+ /InvertedDoubleDot { 2 {360 mul sin 2 div exch } repeat add neg }
+ /SimpleDot { dup mul exch dup mul add 1 exch sub }
+ /InvertedSimpleDot { dup mul exch dup mul add 1 sub }
+ /CosineDot { 180 mul cos exch 180 mul cos add 2 div }
+ /Double { exch 2 div exch 2 { 360 mul sin 2 div exch } repeat add }
+ /InvertedDouble {
+ exch 2 div exch 2 { 360 mul sin 2 div exch } repeat add neg
+ }
+.dicttomark readonly def
+
+/htrdict mark
+ 1 { .resolveht1 }
+ 5 { .resolveht5 }
+ % We don't support types 6, 10, or 16 yet.
+.dicttomark readonly def
+
+/.resolveht1 {
+ mark exch {
+ oforce
+ 1 index /SpotFunction eq {
+ dup type /nametype eq
+ { //spotfunctions exch get } { resolvefnproc }
+ ifelse
+ } {
+ 1 index /TransferFunction eq {
+ resolveidfnproc
+ } if
+ } ifelse
+ } forall .dicttomark
+} bdef
+
+/.resolveht5 {
+ mark exch {
+ oforce dup type /dicttype eq { resolvehalftone } if
+ } forall .dicttomark
+} bdef
+
+/resolvehalftone { % <dict> resolvehalftone <halftone>
+ dup /HalftoneType get //htrdict exch get exec
+} bdef
+
+% ---------------- Graphics state management ---------------- %
+
+/cmmatrix matrix def
+drawopdict begin
+ % Graphics state stack
+ /q { q } def
+ /Q { Q } def
+ % Graphics state setting
+ /cm { //cmmatrix astore concat } def
+ /i /setflat load def
+ /J /setlinecap load def
+ /d /setdash load def
+ /j /setlinejoin load def
+ /w /setlinewidth load def
+ /M /setmiterlimit load def
+ /gs { gs } def
+end
+
+% Each entry in this dictionary is
+% <gsres> <value> -proc- <gsres>
+/gsbg {
+ /BGDefault load resolvedefaultfnproc setblackgeneration
+} bdef
+/gsucr {
+ /UCRDefault load resolvedefaultfnproc setundercolorremoval
+} bdef
+/gstr {
+ dup type /arraytype eq {
+ { oforce /TRDefault load resolvedefaultfnproc } forall
+ setcolortransfer
+ } {
+ /TRDefault load resolvedefaultfnproc settransfer
+ } ifelse
+} bdef
+/gsparamdict mark
+ /SA { setstrokeadjust }
+ /OP { 1 index /op known not { dup op } if OP }
+ % The PDF 1.3 specification says that the name /Default is only
+ % recognized for {BG,UCR,TR}2. However, PDF 1.3 files produced
+ % by Adobe Acrobat Distiller 4.0 for Windows use the name /Default
+ % with the older keys, so we have to implement this.
+ /BG { 1 index /BG2 known { pop } { gsbg } ifelse }
+ /UCR { 1 index /UCR2 known { pop } { gsucr } ifelse }
+ /TR { 1 index /TR2 known { pop } { gstr } ifelse }
+ /HT {
+ dup /Default eq {
+ pop .setdefaultscreen
+ } {
+ %****** DOESN'T IMPLEMENT THE STREAM CASE YET ******
+ resolvehalftone sethalftone
+ } ifelse
+ }
+ /HTP {
+ % HTP may be present even if this isn't a DPS interpreter.
+ /sethalftonephase where { pop aload pop sethalftonephase } { pop } ifelse
+ }
+ % PDF 1.3
+ /Font { aload pop Tf }
+ /LW { setlinewidth }
+ /LC { setlinecap }
+ /LJ { setlinejoin }
+ /ML { setmiterlimit }
+ /D { aload pop setdash }
+ /RI { ri }
+ /op { op }
+ /OPM { OPM }
+ /BG2 { gsbg }
+ /UCR2 { gsucr }
+ /TR2 { gstr }
+ /FL { setflat }
+ /SM {
+ % SM may be present even if this is only a Level 2 interpreter.
+ /setsmoothness where { pop setsmoothness } { pop } ifelse
+ }
+ % PDF 1.4
+ % All of these require the "transparency" feature in the interpreter.
+ /ca { ca }
+ /CA { CA }
+ /SMask { gssmask }
+ /AIS { AIS }
+ /BM { BM }
+ /TK { TK }
+.dicttomark readonly def
+/gs { % <gsres> gs -
+ Page /ExtGState rget {
+ % We keep the dictionary on the stack during the forall so that
+ % keys that interact with each other have access to it.
+ dup {
+ oforce exch gsparamdict exch .knownget { exec } { pop } ifelse
+ } forall pop
+ } if
+} bdef
+
+% ------ Transparency support ------ %
+
+/gssmask {
+ dup /None eq {
+ pop null
+ } {
+ % Preprocess the SMask value into a parameter dictionary for
+ % .begintransparencymask, with added /BBox and /Draw keys.
+ mark exch % Stack: mark smaskdict
+ dup /S oget /Subtype exch 3 2 roll
+ % Stack: mark ... smaskdict
+ dup /BC knownoget { /Background exch 3 2 roll } if
+ dup /TR knownoget {
+ resolveidfnproc /TransferFunction exch 3 2 roll
+ } if
+ dup /G oget dup /BBox oget /BBox exch 4 2 roll
+ /.execmaskgroup cvx 2 packedarray cvx /Draw exch 3 2 roll
+ pop .dicttomark
+ } ifelse SMask
+} bdef
+
+% This procedure is called to actually render the soft mask.
+/.execmaskgroup { % <masknum> <paramdict> <formdict> .execmaskgroup -
+ % Save our place in PDFfile, and do a gsave to avoid resetting
+ % the color space.
+ gsave PDFfile fileposition 4 1 roll
+ % We have to select the group's color space so that the
+ % background color will be interpreted correctly.
+ dup /Group oget /CS knownoget { csresolve setcolorspace } if
+ exch dup /BBox get aload pop .begintransparencymask {
+ dup /Resources knownoget { oforce } { 0 dict } ifelse
+ exch false resolvestream
+ .execgroup .endtransparencymask
+ } .internalstopped {
+ .discardtransparencymask stop
+ } if
+ PDFfile exch setfileposition grestore
+} bdef
+% Paint a Form+Group XObject, either for a transparency mask or for a Do.
+/.execgroup { % <resdict> <stream> .execgroup -
+ gsave
+ 1 .setopacityalpha 1 .setshapealpha
+ 0 .inittransparencymask 1 .inittransparencymask
+ /Compatible .setblendmode
+ % Execute the body of the Form, similar to DoForm.
+ pdfopdict .pdfruncontext
+ grestore
+} bdef
+
+/.beginformgroup { % groupdict bbox .beginformgroup -
+ exch mark exch % bbox mark groupdict
+ dup /CS knownoget { csresolve setcolorspace } if
+ dup /I knownoget { /Isolated exch 3 2 roll } if
+ dup /K knownoget { /Knockout exch 3 2 roll } if
+ pop .dicttomark
+ % Stack: bbox paramdict
+ exch aload pop
+ .begintransparencygroup
+} bdef
+
+% .paintgroupform implements the Form PaintProc in the case where the
+% Form XObject dictionary includes a Group key. See .paintform below.
+/.paintgroupform { % <resdict> <stream> <formdict> .paintgroupform -
+ dup /Group oget exch /BBox oget
+ % Stack: resdict stream groupdict bbox
+ .beginformgroup {
+ .execgroup
+ } .internalstopped {
+ .discardtransparencygroup stop
+ } if .endtransparencygroup
+} bdef
+
+% Make an ImageType 103 (soft-masked) image.
+/makesoftmaskimage { % <datasource> <imagemask> <SMask> makesoftmaskimage
+ % <datasource> <imagemask>, updates currentdict =
+ % imagedict
+ % See the ImageType 3 case of makemaskimage below.
+ % SMask is a stream, another Image XObject.
+ % Stack: datasource imagemask(false) smaskstreamdict
+ PDFfile fileposition exch
+ dup /Matte knownoget { /Matte exch def } if
+ dup length dict makeimagedict pop
+ % In order to prevent the two data sources from being
+ % aliased, we need to make at least one a reusable stream.
+ % We pick the mask, since it's smaller (in case we need to
+ % read all its data now).
+ % Stack: datasource imagemask(false) savedpos
+ % maskdict is currentdict
+ /DataSource DataSource mark
+ /Intent 1
+ /AsyncRead true
+ .dicttomark .reusablestreamdecode def
+ PDFfile exch setfileposition
+ currentdict end currentdict end
+ 5 dict begin
+ /ImageType 103 def
+ /DataDict exch def
+ dup /InterleaveType 3 put
+ DataDict /Matte .knownget {
+ /Matte exch def
+ } if
+ AlphaIsShape { /ShapeMaskDict } { /OpacityMaskDict } ifelse exch def
+ /ColorSpace DataDict /ColorSpace get def
+} bdef
+
+% ---------------- Color setting ---------------- %
+
+/01_1 [0 1] readonly def
+/01_3 [0 1 0 1 0 1] readonly def
+/01_4 [0 1 0 1 0 1 0 1] readonly def
+
+% The keys here are resolved (PostScript, not PDF) color space names.
+/csncompdict mark
+ /DeviceGray { pop 1 }
+ /DeviceRGB { pop 3 }
+ /DeviceCMYK { pop 4 }
+ /CIEBasedA { pop 1 }
+ /CIEBasedABC { pop 3 }
+ /ICCBased { 1 oget /N oget }
+ /Separation { pop 1 }
+ /DeviceN { 1 oget length }
+.dicttomark readonly def
+
+% Perhaps some of the values in the following need to be modified
+% depending on the WhitePoint value....
+/cslabinit mark
+ /DecodeABC [{16 add 116 div} bind {500 div} bind {200 div} bind]
+ /MatrixABC [1 1 1 1 0 0 0 0 -1]
+ /DecodeLMN [
+ {dup 6 29 div ge {dup dup mul mul} {4 29 div sub 108 841 div mul} ifelse
+ 0.9505 mul} bind
+ {dup 6 29 div ge {dup dup mul mul} {4 29 div sub 108 841 div mul} ifelse
+ } bind
+ {dup 6 29 div ge {dup dup mul mul} {4 29 div sub 108 841 div mul} ifelse
+ 1.0890 mul} bind
+ ]
+.dicttomark readonly def
+
+/csrdict mark
+ /DeviceGray {
+ /DefaultGray Page /ColorSpace rget { exch pop resolvecolorspace } if
+ }
+ /DeviceRGB {
+ /DefaultRGB Page /ColorSpace rget { exch pop resolvecolorspace } if
+ }
+ /DeviceCMYK { }
+ /CalGray {
+ 1 oget 6 dict begin
+ dup /Gamma knownoget {
+ /exp load 2 packedarray cvx /DecodeA exch def
+ } if
+ dup /BlackPoint knownoget { /BlackPoint exch def } if
+ dup /WhitePoint knownoget { /WhitePoint exch def } if
+ pop [ /CIEBasedA currentdict end ]
+ }
+ /CalRGB {
+ 1 oget 6 dict begin
+ dup /Gamma knownoget {
+ [ exch { /exp load 2 packedarray cvx } forall
+ ] /DecodeABC exch def
+ } if
+ dup /Matrix knownoget { /MatrixABC exch def } if
+ dup /BlackPoint knownoget { /BlackPoint exch def } if
+ dup /WhitePoint knownoget { /WhitePoint exch def } if
+ pop [ /CIEBasedABC currentdict end ]
+ }
+ /CalCMYK {
+ pop /DeviceCMYK % not defined by Adobe
+ }
+ /Lab {
+ 1 oget 6 dict begin
+ dup /Range knownoget not { [-100 100 -100 100] } if
+ [0 100 null null null null] dup 2 4 -1 roll putinterval
+ /RangeABC exch def
+ //cslabinit { def } forall
+ dup /BlackPoint knownoget { /BlackPoint exch def } if
+ dup /WhitePoint knownoget { /WhitePoint exch def } if
+ pop [ /CIEBasedABC currentdict end ]
+ }
+ /ICCBased {
+ PDFfile fileposition exch
+ dup dup 1 oget
+ mark exch { oforce } forall .dicttomark
+ dup dup true resolvestream
+ /ReusableStreamDecode filter /DataSource exch put
+ 1 exch put
+ exch PDFfile exch setfileposition
+ } bind
+ /Separation {
+ aload pop exch oforce resolvecolorspace exch oforce resolvefnproc
+ 4 array astore
+ }
+ /DeviceN {
+ 0 4 getinterval % ignore attributes
+ aload pop 3 -1 roll oforce
+ 3 -1 roll oforce resolvecolorspace
+ 3 -1 roll oforce resolvefnproc
+ 4 array astore
+ }
+ /Indexed {
+ aload pop 3 -1 roll oforce resolvecolorspace
+ % If the underlying space is a Lab space, we must scale
+ % the output of the lookup table as part of DecodeABC.
+ dup dup type /arraytype eq { 0 get } if /CIEBasedABC eq {
+ dup 1 get /DecodeLMN known {
+ 1 get dup length dict copy
+ begin /DecodeABC [ 0 2 4 {
+ RangeABC 1 index 1 add get RangeABC 2 index get sub /mul load
+ RangeABC 3 index get /add load
+ DecodeABC 6 -1 roll 2 idiv get [ 6 1 roll aload pop ] cvx
+ } for ] def
+ /RangeABC //01_3 def
+ currentdict end /CIEBasedABC exch 2 array astore
+ } if
+ } if
+ 3 1 roll
+ oforce dup type /stringtype ne {
+ % The color lookup table is a stream.
+ % Get its contents. Don't lose our place in PDFfile.
+ % Stack: /Indexed basespace hival lookup
+ PDFfile fileposition 5 1 roll true resolvestream
+ % Stack: filepos /Indexed basespace hival lookupstream
+ 1 index 1 add
+ % Stack: filepos /Indexed basespace hival lookupstream len
+ 3 index
+ dup dup type /arraytype eq { 0 get } if
+ //csncompdict exch get exec mul
+ string readstring pop
+ % Stack: filepos /Indexed basespace hival table
+ 5 -1 roll PDFfile exch setfileposition
+ }
+ if 4 array astore
+ }
+ /Pattern {
+ dup type /nametype ne {
+ dup length 1 gt {
+ 1 oget resolvecolorspace
+ /Pattern exch 2 array astore
+ } if
+ } if
+ }
+.dicttomark readonly def
+
+/cssubst { % <csname> cssubst <cspace'> true
+ % <csname> cssubst false
+ dup resolvecolorspace
+ dup 1 index ne { exch pop true } { pop pop false } ifelse
+} bdef
+
+/csnames mark
+ /DeviceGray dup /DeviceRGB dup /DeviceCMYK dup /Pattern dup
+.dicttomark readonly def
+/csresolve { % <csresourcename> csresolve <cspace>
+ dup Page /ColorSpace rget {
+ exch pop resolvecolorspace
+ } {
+ //csnames 1 index known not { /undefined cvx signalerror } if
+ } ifelse
+} bdef
+/resolvecolorspace { % <cspace> resolvecolorspace <cspace'>
+ dup dup type /arraytype eq { 0 get } if
+ //csrdict exch .knownget {
+ exec dup type /nametype ne { dup length 1 eq { 0 get } if } if
+ } {
+ csresolve
+ } ifelse
+} bdef
+
+/scresolve { % <c0> ... scresolve <multi>
+ % We can't really make sc[n] and SC[N] work, because
+ % the color space information isn't available at
+ % conversion time; so we hack it by assuming that
+ % all the operands on the stack are used, and that
+ % if the top operand is a name, it's a Pattern resource.
+ dup type /nametype eq
+ { Page /Pattern rget { resolvepattern } { null } ifelse }
+ if
+ dup type /dicttype eq {
+ % Check the PaintType, if any (shading patterns don't
+ % have one).
+ dup /PaintType .knownget { 2 eq } { false } ifelse
+ } {
+ .pdfcount 1 gt
+ } ifelse
+} bdef
+
+/.pdfpaintproc { % <patdict> <resdict> .pdfpaintproc -
+ DEBUG { (%Begin PaintProc) = flush } if
+ % For uncolored patterns, we have to unbind the current
+ % color and color space before running the PaintProc.
+ % There's no harm in doing this for colored patterns,
+ % so for simplicity, we always do it.
+ PDFfile fileposition 3 1 roll
+ q
+ null sc1 null SC1
+ exch false resolvestream pdfopdict .pdfruncontext
+ Q
+ DEBUG { (%End PaintProc) = flush } if
+ PDFfile exch setfileposition
+} bdef
+
+/resolvepattern { % <patternstreamdict> resolvepattern <patterndict>
+ % Don't do the resolvestream now: just capture the data
+ % from the file if necessary.
+ dup length dict copy
+ dup /FilePosition .knownget {
+ 1 index /File get dup fileposition 3 1 roll
+ % Stack: dict savepos pos file
+ dup 3 -1 roll setfileposition
+ dup 3 index /Length oget string readstring pop
+ % Stack: dict savepos file string
+ 3 1 roll exch setfileposition
+ 1 index /File 3 -1 roll put
+ dup /FilePosition undef
+ } if
+ dup /Shading knownoget {
+ resolveshading 1 index /Shading 3 -1 roll put
+ } if
+ dup /PaintProc [
+ % Bind the resource dictionary into the PaintProc.
+ 2 index /Resources knownoget { oforce } { 0 dict } ifelse
+ /.pdfpaintproc cvx
+ ] cvx put
+ DEBUG {
+ (%Pattern: ) print dup === flush
+ } if
+} bdef
+
+drawopdict begin
+ /g { /DeviceGray cssubst { cs sc1 } { g } ifelse } bdef
+ /rg { /DeviceRGB cssubst { cs sc* } { rg } ifelse } bdef
+ /k { k } bdef
+ /cs { csresolve cs } bdef
+ /sc { scresolve { sc* } { sc1 } ifelse } bdef
+ /scn /sc load def
+ /G { /DeviceGray cssubst { CS SC1 } { G } ifelse } bdef
+ /RG { /DeviceRGB cssubst { CS SC* } { RG } ifelse } bdef
+ /K { K } bdef
+ /CS { csresolve CS } bdef
+ /ri { ri } bdef
+ /SC { scresolve { SC* } { SC1 } ifelse } bdef
+ /SCN /SC load def
+end
+
+% ---------------- Paths ---------------- %
+
+drawopdict begin
+ % Path construction
+ /m /moveto load def
+ /l /lineto load def
+ /c /curveto load def
+ /v { currentpoint 6 2 roll curveto } def
+ /y { 2 copy curveto } def
+ /re {
+ 4 2 roll moveto exch dup 0 rlineto 0 3 -1 roll rlineto neg 0 rlineto
+ closepath
+ } def
+ /h /closepath load def
+ % Path painting and clipping
+ /n { n } def
+ /S { S } def
+ /s { s } def
+ /f { f } def
+ /f* { f* } def
+ /B { B } def
+ /b { b } def
+ /B* { B* } def
+ /b* { b* } def
+ /W { W } def
+ /W* { W* } def
+ /sh { resolvesh shfill } def
+end
+
+% ---------------- XObjects ---------------- %
+
+/xobjectprocs mark % <dict> -proc- -
+ /Image { DoImage }
+ /Form { DoForm }
+ /PS { DoPS }
+.dicttomark readonly def
+
+% Note that the keys in defaultdecodedict are resolved (PostScript, not PDF)
+% color space names.
+/defaultdecodedict mark
+ /DeviceGray { pop //01_1 } bind
+ /DeviceRGB { pop //01_3 } bind
+ /DeviceCMYK { pop //01_4 } bind
+ /CIEBasedA { 1 get /RangeA .knownget not { //01_1 } if } bind
+ /CIEBasedABC { 1 get /RangeABC .knownget not { //01_3 } if } bind
+ /ICCBased {
+ 1 oget dup /Range .knownget {
+ exch pop
+ }{
+ /N get [ exch {0 1} repeat ] readonly
+ } ifelse
+ } bind
+ /Separation { pop //01_1 } bind
+ /DeviceN {
+ 1 oget length [ exch {0 1} repeat ] readonly
+ } bind
+ /Indexed {
+ pop [ 0 1 BitsPerComponent bitshift 1 sub ]
+ } bind
+.dicttomark readonly def
+
+/checkaltimage { % <resdict> checkaltimage <resdict[']>
+ Printed {
+ dup /Alternates knownoget {
+ {
+ dup /DefaultForPrinting knownoget {
+ {
+ /Image oget exch pop exit
+ } {
+ pop
+ } ifelse
+ } {
+ pop
+ } ifelse
+ } forall
+ } if
+ } if
+} bdef
+
+/makeimagedict { % <resdict> <newdict> makeimagedict <imagemask>
+ % On return, newdict' is currentdict
+ begin
+ /Width 2 copy oget def
+ /Height 2 copy oget def
+ /BitsPerComponent 2 copy oget def
+ /Interpolate 2 copy knownoget { def } { pop } ifelse
+ makeimagekeys
+} bdef
+/makeimagekeys { % <resdict> makeimagekeys <imagemask>
+ % newdict is currentdict
+ % Assumes Width, Height, BPC, Interpolate already copied.
+ /ImageType 1 def
+ /ImageMatrix Width 0 0
+ % Handle 0-height images specially.
+ Height dup 0 eq { pop 1 } if neg 0 1 index neg
+ 6 array astore def
+ dup /ImageMask knownoget dup { and } if {
+ % Image mask
+ % Decode is required for the PostScript image operators.
+ % AI8 writes bogus decode array [0 1 0 0 0 0 0 0]
+ /Decode 2 copy knownoget { 0 2 getinterval } { //01_1 } ifelse def
+ % BitsPerComponent may be missing for masks.
+ % The spec requires it, but some producers omit it, and
+ % Acrobat Reader doesn't care.
+ /BitsPerComponent 2 copy known { pop } { 1 def } ifelse
+ true
+ } {
+ % Opaque image
+ dup /ColorSpace oget resolvecolorspace /ColorSpace exch def
+ % Decode is required for the PostScript image operators.
+ /Decode 2 copy knownoget not {
+ ColorSpace //defaultdecodedict
+ ColorSpace dup type /arraytype eq { 0 get } if get exec
+ } if def
+ false
+ } ifelse
+ % Even though we're going to read data,
+ % pass false to resolvestream so that
+ % it doesn't try to use Length (which may not be present).
+ exch false resolvestream /DataSource exch def
+} bdef
+
+/DoImage {
+ checkaltimage dup length 6 add dict
+ 1 index /SMask knownoget { 1 index exch /SMask exch put } if
+ 1 index /Mask knownoget { 1 index exch /Mask exch put } if
+ makeimagedict doimage
+} bdef
+/makemaskimage { % <datasource> <imagemask> <Mask> makemaskimage
+ % <datasource> <imagemask>, updates currentdict =
+ % imagedict
+ dup type /arraytype eq {
+ /ImageType 4 def
+ /MaskColor exch def
+ } {
+ % Mask is a stream, another Image XObject.
+ % Stack: datasource imagemask(false) maskstreamdict
+ PDFfile fileposition exch
+ dup length dict makeimagedict pop
+ % In order to prevent the two data sources from being
+ % aliased, we need to make at least one a reusable stream.
+ % We pick the mask, since it's smaller (in case we need to
+ % read all its data now).
+ % Stack: datasource imagemask(false) savedpos
+ % maskdict is currentdict
+ /DataSource DataSource mark
+ /Intent 1
+ /AsyncRead true
+ .dicttomark .reusablestreamdecode def
+ PDFfile exch setfileposition
+ currentdict end currentdict end
+ 5 dict begin
+ /ImageType 3 def
+ /InterleaveType 3 def
+ /DataDict exch def
+ /MaskDict exch def
+ /ColorSpace DataDict /ColorSpace get def
+ } ifelse
+} bdef
+/doimage { % <imagemask> doimage -
+ % imagedict is currentdict, gets popped from dstack
+ DataSource exch
+ PDFversion 1.4 ge { currentdict /SMask knownoget } { false } ifelse {
+ makesoftmaskimage
+ } {
+ currentdict /Mask knownoget {
+ makemaskimage
+ } if
+ } ifelse
+ % Stack: datasource imagemask
+ % image and imagemask can be redefined in gs_init.ps to tweak interpolation
+ % after device-specific files are run. Don't bind them here.
+ { currentdict end setfillstate /imagemask }
+ { ColorSpace setcolorspace currentdict end setfillblend /image }
+ ifelse
+ .systemvar exec
+
+ % Close the input stream, unless it is PDFfile or
+ % PDFsource.
+ dup dup PDFfile eq exch PDFsource eq or { pop } { closefile } ifelse
+} bdef
+
+/.paintform { % <formdict> <resdict> <stream> .paintform -
+ 3 -1 roll dup /Group known {
+ .paintgroupform
+ } {
+ pop pdfopdict .pdfruncontext
+ } ifelse
+} bdef
+
+/DoForm {
+ % Adobe 2nd edition of the PDF 1.3 spec makes /FormType
+ % and /Matrix keys optional. Cope with the missing keys.
+ dup length
+ 1 index /Matrix known
+ { dict
+ }
+ { 1 add dict
+ dup /Matrix { 1 0 0 1 0 0 } cvlit put
+ }
+ ifelse
+ copy
+ dup /FormType known not {
+ dup length 1 add dict copy dup /FormType 1 put
+ } if
+
+ dup [ 2 index /Resources knownoget { oforce } { 0 dict } ifelse
+ 3 index false /resolvestream cvx
+ /.paintform cvx
+ ] cvx /PaintProc exch put
+ execform
+} bdef
+
+/DoPS {
+ true resolvestream cvx exec
+} bdef
+
+drawopdict begin
+ /Do {
+ setfillblend
+ PDFfile fileposition exch
+ dup Page /XObject rget {
+ exch pop dup /Subtype get xobjectprocs exch get
+ % Don't leave extra objects on the stack while executing
+ % the definition of the form.
+ 3 -1 roll 2 .execn
+ } {
+ % This should cause an error, but Acrobat Reader can
+ % continue, so we do too.
+ (%stderr) (w) file
+ dup (****************Undefined XObject resource: ) writestring
+ dup 3 -1 roll write===
+ flushfile
+ } ifelse
+ PDFfile exch setfileposition
+ } bdef
+end
+
+% ---------------- In-line images ---------------- %
+
+% Undo the abbreviations in an in-line image dictionary.
+% Note that we must look inside array values.
+% /I is context-dependent.
+/unabbrevkeydict mark
+ /BPC /BitsPerComponent /CS /ColorSpace /D /Decode /DP /DecodeParms
+ /F /Filter /H /Height /I /Interpolate /IM /ImageMask /W /Width
+.dicttomark readonly def
+/unabbrevvaluedict mark
+ /AHx /ASCIIHexDecode /A85 /ASCII85Decode /CC /CalCMYK
+ /CCF /CCITTFaxDecode /CG /CalGray /CR /CalRGB
+ /DCT /DCTDecode /CMYK /DeviceCMYK /Fl /FlateDecode
+ /G /DeviceGray /RGB /DeviceRGB
+ /I /Indexed /LZW /LZWDecode /RL /RunLengthDecode
+.dicttomark readonly def
+/unabbrevtypedict mark
+ /nametype {
+ //unabbrevvaluedict 1 index .knownget { exch pop } if
+ }
+ /arraytype {
+ dup 0 1 2 index length 1 sub {
+ 2 copy get unabbrevvalue put dup
+ } for pop
+ }
+.dicttomark readonly def
+/unabbrevvalue { % <obj> unabbrevvalue <obj'>
+ oforce //unabbrevtypedict 1 index type .knownget { exec } if
+} bdef
+
+drawopdict begin
+ /BI { mark } bdef
+ /ID {
+ counttomark 2 idiv dup 6 add dict begin {
+ exch //unabbrevkeydict 1 index .knownget { exch pop } if
+ exch unabbrevvalue def
+ } repeat pop
+ /File PDFsource def
+ currentdict makeimagekeys doimage
+ % The Adobe documentation says that the data following ID
+ % consists of "lines", and some PDF files (specifically, some files
+ % produced by PCL2PDF from Visual Software) contain garbage bytes
+ % between the last byte of valid data and an EOL.
+ % Some files (PDFOUT v3.8d by GenText) have EI immediately following
+ % the stream. Some have no EOL and garbage bytes.
+ % Therefore, we skip all bytes before EI or EOL
+ 0
+ { PDFsource read not { //true exit } if
+ dup 10 eq 1 index 13 eq or
+ { pop PDFsource token pop /EI ne exit
+ }
+ if
+ exch 69 eq 1 index 73 eq and { //false exit } if % 'EI'
+ }
+ loop
+ exch pop
+ { /ID cvx /syntaxerror signalerror
+ }
+ if
+ } bdef
+end
+
+% ================================ Text ================================ %
+
+drawopdict begin
+ % Text control
+ /BT { BT } def
+ /ET { ET } def
+ /Tc { Tc } def
+ /TL { TL } def
+ /Tr { Tr } def
+ /Ts { Ts } def
+ /Tw { Tw } def
+ /Tz { Tz } def
+ % Text positioning
+ /Td { Td } def
+ /TD { TD } def
+ /Tm { Tm } def
+ /T* { T* } def
+ % Text painting
+ /Tj { Tj } def
+ /' { ' } def
+ /" { " } def
+ /TJ { TJ } def
+end
+
+% ============================== Annotations ============================== %
+
+
+
+% Get and normalize an annotation's rectangle.
+/annotrect { % <annot> annotrect <x> <y> <w> <h>
+ /Rect get aload pop
+ exch 3 index sub dup 0 lt { dup 5 -1 roll add 4 1 roll neg } if
+ exch 2 index sub dup 0 lt { dup 4 -1 roll add 3 1 roll neg } if
+} bdef
+
+% Set an annotation color.
+/annotsetcolor { % <annot> annotsetcolor -
+ /C knownoget { aload pop setrgbcolor } { 0 setgray } ifelse
+} bdef
+
+% Draw the border. Currently, we ignore requests for beveling, and we
+% don't round the corners of rectangles.
+/strokeborder { % <annot> <width> <dash> strokeborder -
+ 1 index 0 ne { % do not draw if border width is 0
+ gsave
+ 2 index annotsetcolor
+ 0 setdash dup setlinewidth
+ exch annotrect
+ 2 { 4 index sub 4 1 roll } repeat
+ 2 { 4 index 0.5 mul add 4 1 roll } repeat
+ rectstroke pop
+ grestore
+ } {
+ pop pop pop
+ } ifelse
+} bdef
+
+% Draw an annotation border.
+/drawborder { % <annot> drawborder -
+ gsave
+ dup /BS knownoget {
+ dup /W knownoget not { 1 } if
+ [] 2 index /S knownoget {
+ /D eq { 2 index /D knownoget not { [3] } if exch pop } if
+ } if 3 -1 roll pop strokeborder
+ } {
+ dup /Border knownoget {
+ dup 2 get
+ exch dup length 3 gt { 3 get } { pop [] } ifelse
+ strokeborder
+ } {
+ 1 [] strokeborder
+ } ifelse
+ } ifelse
+ grestore
+} bdef
+
+%
+% The PDF annotation F (flags) integer is bit encoded.
+% Bit 1 (LSB) Invisible: 1 --> Do not display if no handler.
+% Note: We have no handlers but we ignore this bit.
+% Bit 2 Hidden: 1 --> Do not display. We will not display if this bit is set.
+% Bit 3 Print: 1 --> Display if printing. We will display if this bit set
+% (and not hidden) and Printed is true
+% Bit 4 NoZoom: 1 --> Do not zoom annotation even if image is zoomed.
+% Bit 5 NoRotate: 1 --> Do not rotate annotation even if image is rotated.
+% Bit 6 NoView: 0 --> Display if this is a 'viewer'. We will display
+% if this bit is not set (and not hidden) and Printed is false
+% Bit 7 Read Only - 1 --> No interaction. We ignore this bit
+%
+/annotvisible { % <annot> annotvisible <visible>
+ /F knownoget not { 0 } if % Get flag value
+ dup 2 and 0 eq % Check hidden flag
+ exch dup 4 and 0 ne Printed and % Check print flag
+ exch 64 and 0 eq Printed not and % Check noview flag
+ or % Combine print and view
+ and % Combine with 'hidden' flag test
+} bdef
+
+/drawwidget { % <scalefactor> <annot> drawwidget -
+ dup /AP knownoget {
+ % Always use the Normal appearance.
+ /N oget
+ % Acrobat Distiller produces files in which this Form
+ % XObject lacks Type and Subtype keys. This is illegal,
+ % but Acrobat Reader accepts it. The only way we can
+ % tell whether this is a Form or a set of sub-appearances
+ % is by testing for the stream Length key.
+ dup /Length known {
+ % If this is a form then simply use it
+ true
+ } {
+ 1 index /AS knownoget not {
+ % If we do not have AS then use any appearance
+ { exch pop oforce exit } forall true
+ } {
+ % Stack: annot Ndict AS
+ % Get the specified appearance. If no appearance, then
+ % display nothing - set stack = false.
+ knownoget
+ } ifelse
+ } ifelse
+
+ % Stack: scale annot appearance true
+ % Stack: scale annot false
+ {
+ % Draw appearance
+ 1 index annotrect pop pop translate
+ 2 index dup scale % Apply scale factor
+ DoForm
+ } if
+ } if pop pop
+} bdef
+
+%
+% For stamp object we have to determine the size of the output rectangle
+% and the size of the BBox for the stamp image. From these we calculate
+% a scale factor for drawing the stamp.
+%
+/calcstampscale { % <annot> calcstampscale scale
+ dup annotrect 4 -2 roll pop pop pop % get x width
+ dup 0 lt { neg } if % get magnitude
+ exch /AP knownoget {
+ /N knownoget {
+ /BBox knownoget {
+ aload pop 4 -2 roll pop pop pop
+ div
+ } {
+ pop 1 % default to unity scaling
+ } ifelse % if we have /BBox
+ } {
+ pop 1
+ } ifelse % if we have /N
+ } {
+ pop 1
+ } ifelse % if we have /AP
+} bdef
+
+/drawlink { % <annot> drawlink -
+ dup drawborder
+ 1 exch drawwidget
+} bdef
+
+% Draw an annotation.
+/drawannottypes mark
+ /Link { drawlink } bind
+ /Stamp { dup calcstampscale exch drawwidget } bind
+.dicttomark readonly def
+/drawannot { % <annot> drawannot -
+ dup annotvisible {
+ gsave
+ dup dup /Subtype get //drawannottypes exch .knownget {
+ exec
+ } {
+ 1 exch drawwidget % Use drawwidget for everything else
+ } ifelse % type known
+ grestore
+ } if pop % annotvisible
+} bdef
+currentdict /drawannottypes undef
+
+end % pdfdict
+end % GS_PDF_ProcSet
+.setglobal
diff --git a/Master/xemtex/gslib/pdf_font.ps b/Master/xemtex/gslib/pdf_font.ps
new file mode 100644
index 00000000000..525ae34866e
--- /dev/null
+++ b/Master/xemtex/gslib/pdf_font.ps
@@ -0,0 +1,1224 @@
+% Copyright (C) 1994-2002 artofcode LLC. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: pdf_font.ps,v 1.23.2.6.2.1 2003/04/12 14:02:39 giles Exp $
+% pdf_font.ps
+% PDF font operations.
+
+/.setlanguagelevel where { pop 2 .setlanguagelevel } if
+.currentglobal true .setglobal
+/pdfdict where { pop } { /pdfdict 100 dict def } ifelse
+GS_PDF_ProcSet begin
+pdfdict begin
+
+% We cache the PostScript font in an additional element of the
+% font resource dictionary, called PSFont.
+
+% ---------------- Encodings ---------------- %
+
+% Apply a list of differences to an Encoding.
+% Note that the differences may cause the array to grow.
+/updateencoding { % <encoding> <differences> updateencoding <enc'>
+ % Calculate the length of the result.
+ exch 0 2 index {
+ dup type /nametype ne { exch pop } { pop 1 add } ifelse
+ } forall
+ 1 index length .max array dup 0 4 -1 roll putinterval
+ exch 0 exch {
+ % Stack: enc' code element
+ dup type /nametype ne
+ { exch pop }
+ { 3 copy put pop 1 add }
+ ifelse
+ } forall pop
+} bdef
+
+% Get the Encoding for a font.
+/getencoding % <base-encoding> <font-resource> getencoding <enc>
+ { /Encoding knownoget
+ { dup type /nametype eq
+ {
+ % The published PDF specification says the Encoding name
+ % "must be" one of the 3 predefined Encodings, implying
+ % that an error should occur if it isn't. However, Acrobat
+ % Reader simply ignores unknown names, and since there are
+ % some buggy applications that rely on this, we do the same.
+
+ dup dup dup /MacRomanEncoding eq
+ exch /MacExpertEncoding eq or
+ exch /WinAnsiEncoding eq or
+ { exch pop findencoding
+ }
+ { pop
+ }
+ ifelse
+ }
+ { dup /BaseEncoding knownoget
+ { findencoding 3 -1 roll pop exch
+ }
+ if
+ /Differences knownoget { updateencoding } if
+ }
+ ifelse
+ }
+ if
+ } bdef
+
+% Rename a font with a generated name.
+/renamefont { % <fontdict> renamefont <font'>
+ dup /FontName 2 copy get genfontname dup 5 1 roll put definefont
+} bind def
+
+% Adjust a font according to the Encoding and Widths in the font resource.
+/adjustfont { % <font-resource> <font> adjustfont <font'>
+ getfontencoding
+ getfontmetrics 4 -1 roll pop .updatefont { renamefont } if
+} bind def
+
+% Get the (possibly modified) encoding of a font.
+/getfontencoding { % <font-resource> <font> getfontencoding
+ % <font-resource> <font> <Encoding|null>
+ 1 index /Encoding known {
+ dup /Encoding .knownget { 2 index getencoding } { null } ifelse
+ } {
+ null
+ } ifelse
+} bdef
+
+/find_in_diff % <Differences> <index> find_in_diff <bool>
+{ false exch 0 4 3 roll
+ { dup type /nametype ne { exch pop } { pop 1 add } ifelse
+ 2 copy eq {
+ pop pop pop true 0 0 exit
+ } if
+ } forall
+ pop pop
+} bdef
+
+% Get the metrics of a font, if specified.
+/getfontmetrics { % <font-resource> <font> <Encoding|null> getfontmetrics
+ % <font-resource> <font> <Encoding|null>
+ % <Metrics|null>
+ 2 index /Widths known {
+ dup null eq { pop dup /Encoding get } if
+ 4 dict begin
+ /Encoding exch def
+ /Metrics Encoding length dict def
+ exch
+ dup /Widths oget /Widths exch def
+ % Stack: font font-res
+ % Note that widths are always based on a 1000-unit
+ % character space, but the FontMatrix may specify
+ % some other scale factor. Compensate for this here,
+ % by scaling the Widths if necessary.
+ 0.001 2 index /FontMatrix get 0 get div
+ % Stack: font font-res mscale
+ 1 index /FirstChar oget dup 1 4 index /LastChar oget
+ { % Stack: font font-res mscale first-char index
+ Encoding 1 index get
+ Widths 2 index 4 index sub oget
+ % Stack: font font-res mscale first-char index charname width
+ 4 index mul
+ % The following 'loop' is only context for 'exit'.
+ {
+ % Work around a bug in pdfTeX, which can generate Encoding
+ % vectors containing nulls :
+ 1 index null eq { exit } if
+ % There is a hack here to deal with encodings where the
+ % same character appears more than once, because the Metrics
+ % dictionary works by character name, not by character code.
+ % We prefer to take (1) non-zero width, and (2) width for
+ % the character code which appears in Differences.
+ Metrics 2 index .knownget not { 0 } if 0 ne {
+ 5 index /Encoding knownoget not { exit } if
+ dup type /dicttype ne { pop exit } if
+ /Differences knownoget not { exit } if
+ 3 index //find_in_diff exec not { exit } if
+ } if
+ 2 copy Metrics 3 1 roll put
+ exit
+ } loop
+ pop pop pop
+ }
+ for pop
+ % Now fill in the MissingWidth for any encoded characters
+ % that aren't in Metrics already. Note that built-in
+ % fonts may have Widths/FirstChar/LastChar but no
+ % FontDescriptor, so we must check for this.
+ % Stack: font font-res mscale
+ 1 index /FontDescriptor knownoget {
+ Metrics exch
+ /MissingWidth knownoget { 2 index mul } { 0 } ifelse exch
+ Encoding {
+ % Stack: font font-res mscale missing-width metrics charname
+ % Work around the abovementioned pdfTeX bug.
+ dup null ne {
+ 2 copy known not { 2 copy 4 index put } if pop
+ } {
+ pop
+ } ifelse
+ } forall pop pop pop
+ } {
+ pop
+ } ifelse
+ exch Encoding Metrics end
+ } {
+ null
+ } ifelse
+} bdef
+
+currentdict /find_in_diff undef
+
+% ---------------- Descriptors ---------------- %
+
+% Partial descriptors for the 14 built-in fonts. Note that
+% from PDF 1.1 to PDF 1.2, the meaning of the Flag 6 in the FontDescriptor
+% object has undergone a subtle change in its meaning which has serious
+% consequences for searching with Acrobat:
+% In PDF 1.1, the flag meant: Font has StandardEncoding
+% In PDF 1.2, the flag means: Font has (subset of) StandardRomanCharacterSet
+/standardfontdescriptors mark
+ /Courier mark /Flags 16#23 .dicttomark
+ /Courier-Oblique 1 index
+ /Courier-Bold 1 index
+ /Courier-BoldOblique 1 index
+ /Helvetica mark /Flags 16#20 .dicttomark
+ /Helvetica-Oblique 1 index
+ /Helvetica-Bold 1 index
+ /Helvetica-BoldOblique 1 index
+ /Times-Roman mark /Flags 16#22 .dicttomark
+ /Times-Bold 1 index
+ /Times-Italic mark /Flags 16#62 .dicttomark
+ /Times-BoldItalic 1 index
+ /Symbol mark /Flags 16#4 .dicttomark
+ /ZapfDingbats 1 index
+.dicttomark readonly def
+
+% ---------------- Utilities ---------------- %
+
+/.glyphpath { % <glyphname> <boolean> .glyphpath -
+ % another glyphpath written in addxchar.ps does not work here...
+ currentfont 3 1 roll exch
+ currentfont dup length dict begin
+ { 1 index /Encoding eq { pop [ 3 -1 roll ] def } { def } ifelse } forall
+ currentdict end /.glyphpathfont exch definefont
+ setfont <00> exch charpath setfont
+} bdef
+
+/makeboldfont { % <basefont> <strokewidth> makeboldfont <boldfont>
+ 10 dict begin
+ /strokewidth exch def
+ /basefont exch def
+ /FontMatrix matrix def
+ %/FontName basefont /FontName get def
+ /FontName /.boldfont def
+ /FontType 3 def
+ /Encoding basefont /Encoding get def
+ /FontBBox [ basefont /FontBBox get cvx exec
+ 4 2 roll basefont /FontMatrix get transform
+ 4 2 roll basefont /FontMatrix get transform
+ ] def
+ /BuildGlyph {
+ gsave
+ exch begin
+ basefont setfont
+ strokewidth setlinewidth
+ 1 setlinejoin
+ newpath
+ 0 0 moveto dup false .glyphpath stroke
+ 0 0 moveto glyphshow
+ currentpoint setcharwidth
+ end
+ grestore
+ } bind def
+ currentdict
+ end
+ dup /FontName get exch definefont
+} bind def
+
+% Fabricate a font name by adding ?'s on the end.
+/genfontname % <name> genfontname <name>
+ { dup length string cvs
+ { (?) concatstrings
+ dup cvn FontDirectory exch known not { cvn exit } if
+ }
+ loop
+ } bdef
+
+% Find a font, and adjust its encoding if necessary.
+/.pdfdfndict mark
+ /defaultfontname /Helvetica
+.dicttomark readonly def
+/pdffindfont { % <font-resource> <fontname> pdffindfont <font>
+ % If the font isn't available, synthesize one based on
+ % its descriptor.
+ dup /Font resourcestatus {
+ pop pop findfont
+ } {
+ 1 index /FontDescriptor knownoget {
+ % Stack: font-res fontname fontdesc
+ dup /Flags oget
+ dup 16#40 and -6 bitshift % 1, oblique/italic
+ 1 index 16#40000 and -17 bitshift add % 2, bold
+ exch 16#2 and 2 bitshift add % 8, serif
+ % We should look at the fixed flag, too.
+ % Stack: font-res fontname fontdesc properties
+ 1 index /FontName oget exch
+ % Analyzes font name and extract "Narrow" property
+ % which is not described by the FontDescriptor Flags.
+ 0 2 index .fontnameproperties 4 and or
+ % Rebind the default font name to Helvetica so that
+ % fonts with no properties are handled correctly.
+ //.pdfdfndict begin .substitutefontname end
+ % Stack: font-res fontname fontdesc substname|null
+ Fontmap 1 index known not {
+ % No available good substitution, use the standard one.
+ pop 1 index .substitutefont
+ } if
+ QUIET not {
+ (Substituting font ) print dup =only
+ ( for ) print 2 index =only (.) = flush
+ } if
+ 3 -1 roll pop findfont
+ % Stack: font-res fontdesc font
+ % If this is a small-caps font, replace the CharString
+ % entries for a..z.
+ exch /Flags oget 16#20000 and 0 ne {
+ true .copyfontdict
+ dup /CharStrings 2 copy get dup length dict .copydict
+ 4 index /FirstChar get 97 .max
+ 5 index /LastChar get 122 .min 1 exch {
+ % Stack: font-res font' font' /CharStrings charstrings code
+ % Note that this only remaps a-z, not accented characters.
+ 5 index /Widths oget 1 index 7 index /FirstChar get sub oget
+ 1 string dup 0 5 -1 roll put
+ % Stack: font-res font' font' /CharStrings charstrings code
+ % width (x)
+ 2 index exch dup cvn exch
+ dup 0 2 copy get 32 sub put 4 -1 roll {
+ % Stack: operand (X) width
+ 0 setcharwidth exch pop
+ currentfont /FontMatrix get matrix invertmatrix concat
+ 0.7 dup scale 0 0 moveto show
+ } /exec cvx 4 packedarray cvx put
+ } for put
+ renamefont
+ } if
+ } {
+ % No descriptor available, use the default algorithm.
+ findfont
+ } ifelse
+ } ifelse adjustfont
+} bdef
+/findpdffont { % <font-resource> <fontname> findpdffont <font>
+ {} 3 1 roll % proc fnres fnname
+ [
+ [ (,Bold) { .03 makeboldfont } ]
+ [ (,BoldItalic) { .03 makeboldfont [ 1 0 .3 1 0 0 ] makefont } bind ]
+ [ (,Italic) { [ 1 0 .3 1 0 0 ] makefont } bind ]
+ ] {
+ 1 index dup length string cvs
+ 1 index 0 get tailmatch { % proc fnres fnname []
+ 3 -1 roll pop exch 1 get % proc fnres pre-fnname proc
+ 4 -1 roll pop 3 1 roll % proc fnres pre-fnname
+ exit
+ } { pop pop } ifelse % proc fnres fnname
+ } forall
+ pdffindfont exch exec
+} bdef
+
+% ---------------- Type 1 fonts ---------------- %
+
+/buildType1 % <Type1-font-resource> buildType1 <font>
+ { dup /BaseFont get pdffindfont
+ } bdef
+
+% The state dictionary for the embedded Type 1 font reading procedure
+% has the following keys and values:
+% data - stream (filter)
+% buffer, buffer2 - string
+% hexify - procedure to convert buffer to hex if needed
+% leftstr - string containing (non-negative) integer
+% sectionstr - string containing a character 0 .. 3
+% stream - (stream) dictionary
+% proc - procedure of the form {-dict- type1read}
+% pfbhdr - string containing 16#80 if PFB, 0 otherwise
+% When the procedure is executing, this dictionary is current.
+% leftstr and sectionstr are strings so that we can change their values
+% reliably in case the font executes a restore!
+% We also have to do something special about embedded fonts that
+% execute definefont more than once -- that is the function of topFontDict.
+
+% Read an embedded Type 1 font.
+/readfontfilter { % <proc> readfontfilter <filter>
+ 0 () /SubFileDecode filter
+} bdef
+/readtype1dict 5 dict dup begin
+ /definefont {
+ dup topFontDict eq topFontDict null eq or {
+ dup wcheck not { dup length dict copy } if
+ exch pop savedFontName exch
+ } if
+ //systemdict /definefont get exec
+ } bdef
+ /eexec {
+ % Assume the font dictionary is directly below the file on the stack
+ count 0 gt { /topFontDict 2 index cvlit store } if
+ 55665 /eexecDecode filter
+ //systemdict begin readtype1dictcopy begin cvx stopped
+ currentdict readtype1dictcopy eq { end } if
+ currentdict //systemdict eq { end } if
+ { stop } if
+ } bdef
+end readonly def
+/readtype1 { % <font-resource> <stream-dict> readtype1 <font>
+ % Read the definition, using a procedure-based filter
+ % that turns binary/hex conversion on and off
+ % at the right times.
+ 1 index exch
+ PDFfile fileposition 3 1 roll
+ 11 dict begin
+ /leftstr ( ) 10 string copy def
+ dup /Length1 oget leftstr cvs pop
+ /sectionstr <00> 1 string copy def
+ /pfbhdr <00> 1 string copy def
+ /stream 1 index def
+ true resolvestream /data exch def
+ /buffer 1000 string def % arbitrary
+ /buffer2 buffer length 2.1 div cvi 1 sub string def
+ /hexify /buf2hex load def
+ currentdict end
+ /type1read cvx 2 array astore cvx dup 0 get /proc 2 index put
+ readfontfilter
+ % Some buggy embedded fonts leave extra junk on the stack,
+ % so we have to make a closure that records the stack depth
+ % in a fail-safe way.
+ //systemdict begin
+ % The PDF specification is somewhat muddy about whether
+ % an embedded font's name is supposed to be the BaseFont
+ % from the Font object or the FontName from the descriptor.
+ % Acrobat Distiller requires the former. Save away the
+ % name so we can substitute it at definefont time.
+ //readtype1dict dup length 3 add dict copy begin
+ 1 index /BaseFont oget /savedFontName exch def
+ /topFontDict null def
+ /readtype1dictcopy currentdict def
+ { run } aload pop count 1 sub 2 packedarray cvx exec
+ end end
+ count exch sub { pop } repeat
+ PDFfile 3 -1 roll setfileposition
+ /BaseFont oget findfont
+ adjustfont
+ } bdef
+
+% Execute the appropriate reading procedure.
+/type1read % <dict> type1read <string>
+ { begin leftstr cvi
+ { type1read0 type1read1 type1read2 type1read3 } sectionstr 0 get get exec
+ ( ) leftstr copy cvs pop end
+ } bdef
+
+% Read the next block of data into the buffer.
+/type1readdata % <left> <buffer> type1readdata <substring> <left'>
+ { 0 2 index 2 index length .min getinterval
+ % Adobe requires readstring to signal an error if given
+ % an empty string. Work around this nonsense here.
+ dup length 0 ne { data exch readstring pop } if
+ dup length 3 -1 roll exch sub
+ DEBUG
+ { dup =only ( read ) print
+ 1 index length =only (: ) print
+ 1 index == flush
+ } if
+ } bdef
+
+% Read the initial byte to see if we need to skip a 6 byte PFB header
+/type1read0 { % <left> type1read0 <string> <left'>
+ sectionstr 0 1 put % either way we go to the next stage
+ pfbhdr type1readdata
+ 1 index 0 get 16#80 eq {
+ (\n **** Warning: Embedded Type1 font in PFB format is not valid PDF.)
+ pdfformaterror
+ DEBUG { (skipping PFB header) = flush } if
+ exch pop buffer 0 5 getinterval type1readdata exch
+ dup 4 get 256 mul 1 index 3 get add 256 mul
+ 1 index 2 get add 256 mul 1 index 1 get add
+ DEBUG { (PFB segment length = ) print dup = } if
+ exch pop % discard the string keeping the PFB segment length
+ 2 copy ne {
+ (\n **** Warning: Type 1 PFB segment length and Length 1 value do not match.)
+ pdfformaterror
+ exch % keep the PFB length instead
+ } if
+ pop
+ buffer type1readdata % go ahead and read a block
+ }
+ if % if not PFB, return pfbhdr string (first char of file, usually %).
+} bdef
+
+% Read the next block of the initial text portion.
+/type1read1 { % <left> type1read1 <string> <left'>
+ DEBUG { (read1 ) print } if
+ dup 0 eq {
+ pop sectionstr 0 2 put
+ stream /Length2 oget
+ % Determine whether to hexify data for eexec.
+ dup 8 lt {
+ type1read2 % Hexify.
+ } {
+ DEBUG { (read2 ) print } if
+ pfbhdr 0 get 16#80 eq {
+ % eat 6 more bytes of PFB junk before proceeding
+ DEBUG { (skipping PFB header in segment 2) = flush } if
+ buffer 0 6 getinterval type1readdata exch
+ dup 5 get 256 mul 1 index 4 get add 256 mul
+ 1 index 3 get add 256 mul 1 index 2 get add
+ DEBUG { (PFB segment length = ) print dup = } if
+ exch pop % discard the string keeping the PFB segment length
+ 2 copy ne {
+ (\n **** Warning: Type 1 PFB segment length and Length 2 value do not match.)
+ pdfformaterror
+ dup =
+ exch % keep the PFB length instead
+ } if
+ pop
+ } if
+ buffer2 type1readdata exch
+ % The check doesn't have to be 100% accurate:
+ % hexifying is always OK.
+ dup 0 8 getinterval 0 exch { or } forall
+ 128 ge {
+ /hexify { } store
+ /buffer2 buffer def % We don't need an intermediate buffer.
+ } if hexify exch
+ } ifelse
+ } {
+ buffer type1readdata
+ } ifelse
+} bdef
+
+% Convert a string from binary to hex for eexec.
+% Free variables: buffer.
+/buf2hex { % <string> buf2hex <hexstring>
+ buffer /ASCIIHexEncode filter dup 3 -1 roll writestring closefile
+ buffer (>) search pop exch pop exch pop
+} bdef
+
+% Read the next block of the encrypted portion.
+/type1trailer
+(0000000000000000000000000000000000000000000000000000000000000000\n\
+0000000000000000000000000000000000000000000000000000000000000000\n\
+0000000000000000000000000000000000000000000000000000000000000000\n\
+0000000000000000000000000000000000000000000000000000000000000000\n\
+0000000000000000000000000000000000000000000000000000000000000000\n\
+0000000000000000000000000000000000000000000000000000000000000000\n\
+0000000000000000000000000000000000000000000000000000000000000000\n\
+0000000000000000000000000000000000000000000000000000000000000000\n\
+cleartomark\n)
+readonly def
+/type1read2 { % <left> type1read2 <string> <left'>
+ DEBUG { (read2 ) print } if
+ dup 0 eq
+ { pop sectionstr 0 3 put
+ stream /Length3 oget
+ dup 0 eq
+ { DEBUG { (trailer ) print } if
+ type1trailer exch
+ }
+ {
+ pfbhdr 0 get 16#80 eq {
+ % eat 6 more bytes of PFB junk before proceeding
+ DEBUG { (skipping PFB header in segment 3) = flush } if
+ buffer 0 6 getinterval type1readdata exch
+ dup 5 get 256 mul 1 index 4 get add 256 mul
+ 1 index 3 get add 256 mul 1 index 2 get add
+ DEBUG { (PFB segment length = ) print dup = } if
+ exch pop % discard the string keeping the PFB segment length
+ 2 copy ne {
+ (\n **** Warning: Type 1 PFB segment length and Length 3 value do not match.)
+ pdfformaterror
+ exch % keep the PFB length instead
+ } if
+ pop
+ (\n) pdfformaterror
+ } if
+ type1read3
+ }
+ ifelse
+ }
+ { buffer2 type1readdata exch hexify exch
+ }
+ ifelse
+} bdef
+
+% Read the next block of the final text portion.
+% When finished, this procedure returns an empty string.
+/type1read3 % <left> type1read3 <string> <left'>
+ { DEBUG { (read3 ) print } if
+ buffer type1readdata
+ } bdef
+
+% ---------------- Type 3 fonts ---------------- %
+
+/.notdefEncoding 256 { /.notdef } repeat 256 packedarray def
+
+/buildType3 { % <Type3-font-resource> buildType3 <font>
+ 8 dict begin
+ /FontType 3 def
+ /Resources 1 index /Resources knownoget { oforce } { 0 dict } ifelse def
+ /FontBBox 1 index /FontBBox get cvx def
+ /FontMatrix 1 index /FontMatrix oget def
+ /CharProcs 1 index /CharProcs oget def
+ 1 index /Widths knownoget {
+ /Widths exch def
+ /FirstChar 1 index /FirstChar oget def
+ /LastChar 1 index /LastChar oget def
+ } if
+ /FontName 1 index /Name get genfontname def
+ /Encoding .notdefEncoding 2 index getencoding def
+ % We have to define BuildChar rather than BuildGlyph:
+ % there is no PDF equivalent of glyphshow, and we need
+ % the character code to access the Widths.
+ /BuildChar {
+ % Stack: font charcode
+ 1 index begin 3 dict begin
+ /Font 3 -1 roll def /CharCode 1 index def
+ % Make unknown characters map to /.notdef
+ Encoding exch get dup CharProcs exch known
+ { CharProcs exch oget }
+ { pop CharProcs /.notdef oget }
+ ifelse
+ PDFfile fileposition exch
+ false resolvestream
+ % Stack: filepos stream
+ % Don't let setgcolor set the color inside the BuildGlyph
+ % procedure, because this causes an /undefined error.
+ q null /FillColor gput null /StrokeColor gput
+ Font /Resources get exch pdfopdict .pdfruncontext
+ Q
+ PDFfile exch setfileposition
+ end end
+ } bdef
+ FontName currentdict end definefont exch pop
+} bdef
+/.adjustcharwidth { % <wx> <wy> .adjustcharwidth <wx'> <wy'>
+ /Widths where {
+ begin
+ CharCode FirstChar ge CharCode LastChar le and {
+ exch pop Widths CharCode FirstChar sub get exch
+ } if end
+ } if
+} bdef
+
+% ---------------- TrueType fonts ---------------- %
+
+/TTfonts mark
+ /Arial /Helvetica
+ /Arial,Italic /Helvetica-Oblique
+ /Arial,Bold /Helvetica-Bold
+ /Arial,BoldItalic /Helvetica-BoldOblique
+ /CourierNew /Courier
+ /CourierNew,Bold /Courier-Bold
+ /TimesNewRoman /Times-Roman
+ /TimesNewRoman,Italic /Times-Italic
+ /TimesNewRoman,Bold /Times-Bold
+ /TimesNewRoman,BoldItalic /Times-BoldItalic
+ %
+ /ArialBlack,Italic /Arial-BlackItalic
+ /ArialNarrow,Bold /ArialNarrow-Bold
+ /ArialNarrow,BoldItalic /ArialNarrow-BoldItalic
+ /ArialNarrow,Italic /ArialNarrow-Italic
+ /BookAntiqua,Bold /BookAntiqua-Bold
+ /BookAntiqua,BoldItalic /BookAntiqua-BoldItalic
+ /BookAntiqua,Italic /BookAntiqua-Italic
+ /BookmanOldStyle,Bold /BookmanOldStyle-Bold
+ /BookmanOldStyle,BoldItalic /BookmanOldStyle-BoldItalic
+ /BookmanOldStyle,Italic /BookmanOldStyle-Italic
+ /CenturyGothic,Bold /CenturyGothic-Bold
+ /CenturyGothic,BoldItalic /CenturyGothic-BoldItalic
+ /CenturyGothic,Italic /CenturyGothic-Italic
+ /ComicSansMS,Bold /ComicSansMS-Bold
+ /CourierNew,Bold /CourierNewPS-BoldMT
+ /CourierNew,BoldItalic /CourierNewPS-BoldItalicMT
+ /CourierNew,Italic /CourierNewPS-ItalicMT
+ /FranklinGothicMedium,Italic /FranklinGothic-MediumItalic
+ /Garamond,Bold /Garamond-Bold
+ /Garamond,Italic /Garamond-Italic
+ /Georgia,Bold /Georgia-Bold
+ /Georgia,BoldItalic /Georgia-BoldItalic
+ /Georgia,Italic /Georgia-Italic
+ /Tahoma,Bold /Tahoma-Bold
+ /TrebuchetMS,Bold /TrebuchetMS-Bold
+ /TrebuchetMS,BoldItalic /Trebuchet-BoldItalic
+ /TrebuchetMS,Italic /TrebuchetMS-Italic
+ /Verdana,Bold /Verdana-Bold
+ /Verdana,BoldItalic /Verdana-BoldItalic
+ /Verdana,Italic /Verdana-Italic
+.dicttomark readonly def
+
+/buildTrueType { % <TrueType-font-resource> buildTrueType <font>
+ dup /BaseFont get
+ dup TTfonts exch .knownget {
+ exch pop
+ % Hack required by the PDF specification: if the
+ % font resource has Subtype = /TrueType but the actual
+ % (installed) font is not a TrueType font, ignore the
+ % Encoding in the font resource. However, all current
+ % versions of Acrobat Reader have the 14 base TrueType
+ % fonts built in, so this produces incorrect output for
+ % badly designed PDF files that specify these file names
+ % with /Subtype = /TrueType but no embedded definition.
+ % Compensate for this by removing the /Subtype key when
+ % looking up the font.
+ exch dup length dict copy dup /Subtype null put exch
+ } if
+ pdffindfont % findfont for PDF
+ % disable the auto-bold and auto-italic since it sometimes applies
+ % so an already bold or italic substitute font
+ %findpdffont % findfont and auto-bold and/or auto-italic font for PDF
+} bdef
+
+% Read an embedded TrueType font.
+/readtruetype { % <font-resource> <stream-dict> readtruetype <font>
+ % This is much simpler than readtype1, because we don't
+ % have to deal with the tripartite .PFB format.
+ 1 index exch
+ PDFfile fileposition 3 1 roll
+ true resolvestream readfontfilter
+ % Stack: filepos fontres stream
+ 1 index /Subtype get /CIDFontType2 eq {
+ .loadttcidfont
+ % Stack: filepos fontres cidfont
+ 1 index /CIDToGIDMap knownoget {
+ dup /Identity eq {
+ pop
+ } {
+ true resolvestream
+ % The following doesn't work for CIDToGIDMaps with more
+ % than 32K-1 entries. We'll fix it later if necessary.
+ % Stack: filepos fontres font mapstream
+ dup 2 index /CIDCount oget 2 mul string readstring pop exch closefile
+ exch dup length 5 add dict .copydict
+ dup /FID undef
+ dup /CIDMap 4 -1 roll put
+ dup /CIDFontName get exch /CIDFont defineresource
+ } ifelse
+ } if
+ } {
+ null 2 index getencoding .loadpdfttfont
+ } ifelse
+ exch pop
+ PDFfile 3 -1 roll setfileposition
+ % Ignore both the Encoding and the Widths.
+ exch pop
+} bdef
+
+% ---------------- Type 0 fonts ---------------- %
+
+% Predefine the known CMaps, but only create them on demand.
+/knownCMaps mark
+ /Identity-H { /Identity-H 0 makeIdentityCMap }
+ /Identity-V { /Identity-V 1 makeIdentityCMap }
+.dicttomark def
+
+/makeIdentityCMap { % <cmapname> <wmode> .makeIdentityCMap -
+ .currentglobal true .setglobal 3 1 roll
+ /CIDInit /ProcSet findresource begin
+ 12 dict begin
+ begincmap
+ /WMode exch def
+ /CMapName exch def
+ /CIDSystemInfo 3 dict dup begin
+ /Registry (Adobe) def
+ /Ordering (Identity) def
+ /Supplement 0 def
+ end def
+ %/CMapName (see above)
+ /CMapVersion 1 def
+ /CMapType 1 def
+ %WMode (see above)
+ % The PDF documentation says that these CMaps map CIDs
+ % "1 to 65,536". This is a misprint for 0 to 65,535.
+ 1 begincodespacerange
+ % <0001> <00ff> <0100> <ffff>
+ <0000> <ffff>
+ endcodespacerange
+ 1 begincidrange
+ % <0001> <00ff> 1 <0100> <ffff> 256
+ <0000> <ffff> 0
+ endcidrange
+ endcmap
+ CMapName currentdict /CMap defineresource
+ knownCMaps CMapName 2 index put
+ end % CMap
+ end % CIDInit ProcSet
+ exch .setglobal
+} bdef
+
+/buildType0 { % <Type0-font-resource> buildType0 <font>
+ dup /BaseFont get % FontName
+ 1 index /Encoding oget
+ dup type /nametype eq {
+ dup /CMap resourcestatus {
+ pop pop /CMap findresource
+ } {
+ knownCMaps 1 index .knownget
+ { exch pop exec } { /undefined signalerror } ifelse
+ } ifelse
+ } {
+ PDFfile fileposition exch
+ dup /CMapName get exch true resolvestream cvx exec
+ /CMap findresource
+ exch PDFfile exch setfileposition
+ } ifelse % CMap
+ [
+ 3 index /DescendantFonts oget { exec resourcefont } forall
+ ] % subfonts
+ composefont
+ % Stack: fontres font
+ 1 index /FontMatrix knownoget {
+ dup aload pop true {0 0 1 0 0 1} {3 -1 roll eq and} forall {
+ 1 index exch makefont exch /FontName get exch definefont
+ } {
+ pop
+ } ifelse
+ } if exch pop
+} bdef
+
+% ---------------- CIDFontType0/2 fonts ---------------- %
+
+% Insert metrics into a CIDFont, by saving the PDF W, W2, DW, and DW2
+% arrays and using a (currently very inefficient) CDevProc.
+% For detail, refer "PDF Reference" third edition, p. 337,
+% "5.6.3 CIDFonts" and table "Entries in a CIDFont dictionary".
+
+/.pdfDefaultDW 1000 def
+/.pdfDefaultDW2 [ 880 -1000 ] def
+
+/addCIDmetrics { % <CIDFont-resource> <CIDFont> addCIDmetrics <fontdict>
+ dup length 5 add dict .copydict
+ dup /FID undef
+ dup /UniqueID undef
+ dup /XUID undef
+ % Insert the widths into the font.
+
+ % Stack: pdfresource newfont
+
+ 1 index /DW .knownget {
+ 1 index /DW 3 -1 roll put
+ } {
+ dup /DW .pdfDefaultDW put
+ } ifelse
+
+
+ 1 index /W .knownget {
+ dup 2 index /W 3 -1 roll put
+ .pdfMakeInternalW 1 index /.internalW 3 -1 roll put
+ } if
+
+
+ 1 index /DW2 .knownget {
+ 1 index /DW2 3 -1 roll put
+ } {
+ dup /DW2 .pdfDefaultDW2 put
+ } ifelse
+
+
+ 1 index /W2 .knownget {
+ dup 2 index /W2 3 -1 roll put
+ .pdfMakeInternalW2 1 index /.internalW2 3 -1 roll put
+ } if
+
+
+ dup /CDevProc 1 index /CIDWProc load /exec load 3 packedarray cvx put
+ exch pop
+} bdef
+
+/.pdfMakeInternalMTXArray { % <mtx_array> <item_size> .pdfConvertInternalW <mtx_array'>
+
+ % convert /W or /W2 to internal expression
+ %
+ % mtx_array: original /W or /W2 array
+ % item_size: number of metrics values per CID
+ %
+ % for detail of the metrics list format in PDF,
+ % refer PDF Ref. p.317 "Glyph Metrics in CIDFonts".
+ %
+ % format of single entry in internal expression
+ %
+ % [
+ % [cid_begin cid_end]
+ % value_is_varied (bool)
+ % [ [values for cid_begin...]
+ % [values for cid_begin + 1]
+ % ... ]
+ % ]
+ %
+
+ 7 dict
+ begin
+ /itemSize exch def
+ /M exch def % original /W or /W2
+ /Msize M length def
+ /Mi { M i get } def % W[i]
+ /Mi1 { M i 1 add get } def % W[i + 1]
+ /putMTXEntry <<
+ /arraytype {
+ [
+ [Mi Mi Mi1 length add 1 sub]
+ true
+ [
+ 0 itemSize Mi1 length 1 sub {
+ [ exch 1 1 index itemSize add 1 sub { Mi1 exch get } for ]
+ } for
+ ]
+ ]
+ /i i 2 add def
+ }
+ /integertype {
+ [
+ [Mi Mi1]
+ false
+ [[ i 2 add 1 i 1 add itemSize add { M exch get } for ]]
+ ]
+ /i i 3 add def
+ }
+ >> def
+
+ /i 0 def
+
+ [ { putMTXEntry Mi1 type get exec i Msize ge { exit } if } loop ]
+ end
+} def
+
+/.pdfMakeInternalW { dup length 0 gt { 1 .pdfMakeInternalMTXArray } if } def
+/.pdfMakeInternalW2 { dup length 0 gt { 3 .pdfMakeInternalMTXArray } if } def
+
+/.pdfGetMTXByCID { % <internalMTXArray> <cid>
+ % .pdfGetMTXByCID
+ % { <MTXEntry> true | false }
+
+ % get values for given CID from internal format of /W or /W2
+
+ exch
+ {
+ {
+ dup 0 get {} forall % Stack: <cid> <entry> <cid_0> <cid_1>
+ 3 index lt { pop pop false exit } if
+ 2 index exch sub dup 0 lt { pop pop false exit } if
+ 1 index 1 get not { pop 0 } if
+ exch 2 get exch get true exit
+ } loop
+ { exit } if
+ } forall
+ dup type /arraytype eq { exch pop true } { pop false } ifelse
+} def
+
+
+% Apply the [D]W[2] metrics to a character before displaying.
+/CIDWProc { % <w0x> <w0y> <llx> <lly> <urx> <ury>
+ % <w1x> <w1y> <vx> <vy> <cid> <font> CIDWproc
+ % <w0x'> ... <vy'>
+
+ begin % push <font> to currentdict
+ % <w1x> <w1y> <vx> <vy> won't be used and replaced, discard now
+ 5 1 roll pop pop pop pop
+
+ {
+ currentdict /DW .knownget not { % no DW
+ .pdfDefaultDW exit % replace <w0x> by defaultDW
+ } if
+
+ currentdict /.internalW .knownget not { % no W
+ exit % use already-stacked DW
+ } if
+
+ dup length 0 eq { % W is null array
+ pop % discard unusable W
+ exit % use already-stacked DW
+ } if
+
+ % W is finite array, try to get W_cid
+ 2 index .pdfGetMTXByCID { % got W, discard DW
+ exch pop {} forall
+ exit
+ } if
+
+ exit
+ } loop
+
+ 1000 div % <w0x'> (normalized W)
+ 0 % <w0y'>
+
+ % Stack: <w0x> <w0y> <llx> <lly> <urx> <ury> <cid> <w0x'> <w0y'>
+ 9 -2 roll pop pop % discard <w0x> <w0y>
+ 7 2 roll % put <w0x'> <w0y'>
+
+ % Stack: <w0x'> <w0y'> <llx> <lly> <urx> <ury> <cid>
+ 0 % <w1x'>
+ exch % put <w1x'>
+
+ % Stack: <w0x'> <w0y'> <llx> <lly> <urx> <ury> <w1x'> <cid>
+ {
+ currentdict /DW2 .knownget not { % no DW2, use defaultDW2
+ .pdfDefaultDW2 exit
+ } if
+
+ currentdict /.internalW2 .knownget not { % has DW2, no W2
+ exit % use already-stacked DW2
+ } if
+
+ dup length 0 eq { % W2 is null array
+ pop % discard unusable W2
+ exit % use already-stacked DW2
+ } if
+
+ 2 index .pdfGetMTXByCID { % got W2_cid, discard DW2
+ exch pop
+ exit
+ } if
+
+ % could not get W2_cid
+ exit
+
+ } loop
+
+ exch pop % discard <cid>
+
+
+ % Stack: <w0x'> <w0y'> <llx> <lly> <urx> <ury> <w1x'> { [<vy'> <w1y'>] | [<w1y'> <vx'> <vy'>] }
+ dup length 2 eq { % this is DW2
+ {1000 div} forall exch
+ 4 index 7 index add 2 div % <vx'> = (<urx> + <llx>) / 2
+ exch
+ }{ % assume W2
+ {1000 div} forall
+ } ifelse
+ end % recover currentdict
+
+} def
+
+
+
+%----------------------------------------------------------------
+
+% <string> <match> tailmatch ==> <pre> true
+% ==> <string> false
+/tailmatch {
+ 2 copy length 1 index length .min
+ dup 2 index length exch sub exch getinterval
+ 1 index eq {
+ length 1 index length exch sub
+ 0 exch getinterval true
+ } {
+ pop false
+ } ifelse
+} bind def
+
+/makeboldcidfont {
+ 16 dict begin
+ /strokewidth exch def
+ /basecidfont exch def
+ /FontMatrix [ 1 0 0 1 0 0 ] def
+
+ /CIDFontName /.boldfont def
+ /CIDFontType 1 def
+
+ /basefont-H /.basefont-H /Identity-H [ basecidfont ] composefont def
+ /basefont-V /.basefont-V /Identity-V [ basecidfont ] composefont def
+
+ /CIDSystemInfo dup basecidfont exch get def
+ /FontBBox [ basecidfont /FontBBox get cvx exec
+ 4 2 roll basecidfont /FontMatrix get transform
+ 4 2 roll basecidfont /FontMatrix get transform
+ ] def
+
+ /tmpstr 2 string def
+ /BuildGlyph {
+ gsave
+ exch begin
+ dup 256 idiv tmpstr exch 0 exch put
+ 256 mod tmpstr exch 1 exch put
+ rootfont /WMode known { rootfont /WMode get 1 eq } { false } ifelse
+ { basefont-V } { basefont-H } ifelse setfont
+ strokewidth setlinewidth
+ 1 setlinejoin
+ newpath
+ 0 0 moveto tmpstr false charpath stroke
+ 0 0 moveto tmpstr show
+ currentpoint setcharwidth
+ end
+ grestore
+ } bind def
+
+ currentdict
+ end
+ dup /CIDFontName get exch /CIDFont defineresource
+} bind def
+
+% <CIDFont-resource> <CIDFontName> findCIDFont <CIDFont-resource> <font>
+% CIDFont-resource is not modified.
+/findCIDFont {
+ {
+ dup /CIDFont resourcestatus {
+ pop pop /CIDFont findresource
+ exit
+ } if
+
+ dup dup length string cvs
+ (,Bold) tailmatch {
+ exch pop
+ cvn findCIDFont 0.03 makeboldcidfont
+ exit
+ } if
+ (,Italic) tailmatch {
+ exch pop
+ cvn findCIDFont
+ [ 1 0 0.3 1 0 0 ] makefont
+ exit
+ } if
+ (,BoldItalic) tailmatch {
+ exch pop
+ cvn findCIDFont 0.03 makeboldcidfont
+ [ 1 0 0.3 1 0 0 ] makefont
+ exit
+ } if
+ pop
+
+ 1 index /CIDSystemInfo get begin Registry (-) Ordering end
+ concatstrings concatstrings
+ cvn
+ QUIET not {
+ (Substituting ) print dup ==only
+ ( for ) print 1 index ==only (.\n) print
+ } if
+ exch pop
+ /CIDFont findresource
+ exit
+ } loop
+} bdef
+
+/buildCIDType0 { % <CIDFontType0-font-resource> buildCIDType0 <font>
+ dup /BaseFont get exch 1 index findCIDFont
+ addCIDmetrics /CIDFont defineresource
+} bdef
+
+/buildCIDType2 { % <CIDFontType2-font-resource> buildCIDType2 <font>
+ dup /BaseFont get exch 1 index findCIDFont
+ addCIDmetrics /CIDFont defineresource
+} bdef
+
+% ---------------- Other embedded fonts ---------------- %
+
+/fontloadprocs mark
+ /Type1C /readType1C cvx
+ /CIDFontType0C /readCIDFontType0C cvx
+.dicttomark readonly def
+
+% Read an embedded compressed font.
+/readType1C { % <font-resource> <stream-dict> readType1C <font>
+ 1 index exch
+ PDFfile fileposition 3 1 roll
+ dup true resolvestream dup readfontfilter
+ % Stack: pos resource streamdict stream filter
+ 3 index /FontDescriptor oget /FontName oget
+ 1 index FRD
+ closefile closefile pop
+ PDFfile 3 -1 roll setfileposition
+ /FontDescriptor oget /FontName oget findfont
+ adjustfont
+} bdef
+
+% Read an embedded CFF CIDFont.
+/readCIDFontType0C { % <font-resource> <stream-dict> readCIDFontType0C <font>
+ PDFfile fileposition 3 1 roll
+ dup true resolvestream dup readfontfilter
+ % Stack: pos resource streamdict stream filter
+ 3 index /FontDescriptor oget /FontName oget
+ 1 index FRD
+ closefile closefile pop
+ PDFfile 3 -1 roll setfileposition
+ % Some broken Adobe software produces PDF files in which
+ % the FontName of the CFF font and the FontName in the
+ % FontDescriptor don't match the BaseFont in the font.
+ % Use the FontName, rather than the BaseFont, here.
+ dup /FontDescriptor oget /FontName oget /CIDFont findresource
+ addCIDmetrics dup /CIDFontName get exch /CIDFont defineresource
+} bdef
+
+% ---------------- Font lookup ---------------- %
+
+/fonttypeprocs mark % <font-resource> -proc- <font>
+ /Type0 /buildType0 cvx
+ /Type1 /buildType1 cvx
+ /MMType1 1 index
+ /Type3 /buildType3 cvx
+ /TrueType /buildTrueType cvx
+ /CIDFontType0 /buildCIDType0 cvx
+ /CIDFontType2 /buildCIDType2 cvx
+.dicttomark readonly def
+
+/resourcefont % <font-resource> resourcefont <font>
+ { dup /PSFont .knownget
+ { /FID .knownget { type /fonttype eq } { false } ifelse }
+ { false }
+ ifelse
+ { /PSFont get
+ }
+ { dup dup /FontDescriptor knownoget
+ { % Stack: font-res font-res font-desc
+ dup /FontFile knownoget
+ { exch pop readtype1 true }
+ { dup /FontFile2 knownoget
+ { exch pop readtruetype true }
+ { /FontFile3 knownoget
+ { dup /Subtype get fontloadprocs exch get exec true }
+ { false }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ }
+ { false }
+ ifelse
+ % Stack: font-res font-res false
+ % -or-: font-res font true
+ not
+ { dup /Subtype get fonttypeprocs exch get exec }
+ if
+ 2 copy /PSFont exch put
+ exch pop
+ }
+ ifelse
+ } bdef
+
+drawopdict begin
+ /d0 {
+ .adjustcharwidth setcharwidth
+ } bdef
+ /d1 {
+ 6 -2 roll .adjustcharwidth 6 2 roll setcachedevice
+ } bdef
+ /Tf {
+ 1 index Page /Font rget not { 1 index /invalidfont signalerror } if
+ resourcefont exch Tf pop
+ } bdef
+end
+
+end % pdfdict
+end % GS_PDF_ProcSet
+.setglobal
diff --git a/Master/xemtex/gslib/pdf_main.ps b/Master/xemtex/gslib/pdf_main.ps
new file mode 100644
index 00000000000..fd87aa5c99d
--- /dev/null
+++ b/Master/xemtex/gslib/pdf_main.ps
@@ -0,0 +1,813 @@
+% Copyright (C) 1994, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: pdf_main.ps,v 1.35.2.7.2.3 2003/04/12 14:02:39 giles Exp $
+% pdf_main.ps
+% PDF file- and page-level operations.
+
+/.setlanguagelevel where { pop 2 .setlanguagelevel } if
+.currentglobal true .setglobal
+/pdfdict where { pop } { /pdfdict 100 dict def } ifelse
+pdfdict begin
+
+% Patch in an obsolete variable used by some third-party software.
+/#? false def
+
+% Test whether the current output device handles pdfmark.
+/.writepdfmarkdict 1 dict dup /pdfmark null put readonly def
+/.writepdfmarks { % - .writepdfmarks <bool>
+ currentdevice //.writepdfmarkdict .getdeviceparams
+ mark eq { false } { pop pop true } ifelse
+ systemdict /DOPDFMARKS known or
+} bind def
+
+% For simplicity, we use a single interpretation dictionary for all
+% PDF graphics execution, even though this is too liberal.
+/pdfopdict mark
+ objopdict { } forall
+ drawopdict { } forall
+ /endstream { exit } bind
+ (%%EOF) cvn { exit } bind % for filters
+ % PDF 1.1 operators
+ /BX { /BXlevel BXlevel 1 add store } bind
+ /EX { /BXlevel BXlevel 1 sub store } bind
+ /PS { cvx exec } bind
+ % PDF 1.2 operators
+ /BMC { pop } bind
+ /BDC { pop pop } bind
+ /EMC { }
+ /MP { pop } bind
+ /DP { pop pop } bind
+.dicttomark readonly def
+
+% ======================== Main program ======================== %
+
+end % pdfdict
+userdict begin
+
+/defaultfontname /Times-Roman def
+
+% Make sure the registered encodings are loaded, so we don't run the risk
+% that some of the indices for their names will overflow the packed
+% representation. (Yes, this is a hack.)
+SymbolEncoding pop
+DingbatsEncoding pop
+
+% Redefine 'run' so it recognizes PDF files.
+systemdict begin
+/.runps /run load def
+/run {
+ dup type /filetype ne { (r) file } if
+ dup ( ) .peekstring {
+ (%) eq {
+ dup ( ) .peekstring {
+ (%PDF-) eq {
+ dup (%stdin) (r) file eq {
+ % Copy PDF from stdin to temporary file then run it.
+ null (w+) //systemdict /.tempfile get exec exch 3 1 roll
+ % stack: tempname stdin tempfile
+ 1024 string
+ {
+ % stack: tempname stdin tempfile string
+ 2 index 1 index readstring
+ exch 3 index exch writestring
+ not { exit } if
+ }
+ loop
+ pop exch closefile
+ % stack: tempname tempfile
+ dup 0 setfileposition
+ dup runpdf
+ closefile deletefile
+ } {
+ runpdf
+ } ifelse
+ } {
+ cvx .runps % doesn't start with %PDF-
+ } ifelse
+ } {
+ pop cvx .runps % didn't read 5 characters
+ } ifelse
+ } {
+ cvx .runps % didn't start with %
+ } ifelse
+ } {
+ pop closefile % file was empty
+ } ifelse
+} bind odef
+currentdict /runpdfstring .undef
+
+/runpdf { % <file> runpdf -
+ userdict begin
+ % It turns out that the PDF interpreter uses memory more
+ % effectively if it is run under at least one level of save.
+ % This is counter-intuitive, and we don't understand why it happens,
+ % but the improvement is significant.
+ /PDFTopSave save def
+ /Page# null def
+ /Page null def
+ /DSCPageCount 0 def
+ /PDFSave null def
+ GS_PDF_ProcSet begin
+ pdfdict begin
+ pdfopen begin
+ Trailer /Root oget /Pages oget /CropBox knownoget
+ { mark /CropBox 3 -1 roll /PAGES pdfmark
+ }
+ if
+ /FirstPage where
+ { pop FirstPage dup pdfpagecount gt
+ { (\nRequested FirstPage is greater than the number of pages in the file: ) print
+ pdfpagecount = flush
+ } if
+ } {
+ 1
+ } ifelse
+ 1
+ /LastPage where { pop LastPage pdfpagecount .min } { pdfpagecount } ifelse
+ 2 index 1 index gt
+ { ( No pages will be processed \(FirstPage > LastPage\).) = flush }
+ { QUIET not
+ { (Processing pages ) print 2 index =only ( through ) print dup =only
+ (.) = flush
+ }
+ if
+ }
+ ifelse
+ { dup /Page# exch store
+ QUIET not { (Page ) print dup == flush } if
+ pdfgetpage pdfshowpage
+ } for
+ currentdict pdfclose
+ end % temporary dict
+ end % pdfdict
+ end % userdict
+ end % GS_PDF_ProcSet
+ PDFTopSave restore
+} bind def
+end % systemdict
+% Redefine the procedure that the C code uses for running piped input.
+% It is OK to use { (%stdin) run } here, because a startjob cannot occur.
+/.runstdin {
+ { (%stdin) run } execute0
+} bind def
+
+end % userdict
+pdfdict begin
+
+% ======================== File parsing ======================== %
+
+% Read the cross-reference and trailer sections.
+
+/traileropdict mark
+ (<<) cvn { mark } bind
+ (>>) cvn /.dicttomark load
+ ([) cvn { mark } bind % ditto
+ (]) cvn dup load
+% /true true % see .pdfexectoken in pdf_base.ps
+% /false false % ibid.
+% /null null % ibid.
+ /R { /resolveR cvx 3 packedarray cvx } bind % see Objects below
+ /startxref /exit load
+.dicttomark readonly def
+
+% Because of EOL conversion, lines with fixed contents might be followed
+% by one or more blanks.
+/lineeq % <filestr> <conststr> lineeq <bool>
+ { anchorsearch
+ { pop { ( ) anchorsearch not { () eq exit } if pop } loop }
+ { pop false }
+ ifelse
+ } bind def
+/linene { lineeq not } bind def
+
+% Read (mostly scan) the cross-reference table.
+/readxref % <pos> readxref <trailerdict>
+ { PDFoffset add PDFfile exch setfileposition
+ % In some PDF files, this position actually points to
+ % white space before the xref line. Skip over this here.
+ { PDFfile fileposition PDFfile read pop 32 gt { exit } if pop
+ } loop
+ PDFfile exch setfileposition
+ % The PDF specification says that the 'xref' must be on a line
+ % by itself. The code here formerly used readline and linene to
+ % check this. However, Acrobat Reader only requires the line to
+ % begin with 'xref', and there are enough applications producing
+ % non-compliant PDF files that we have to do this too.
+ PDFfile pdfstring 0 4 getinterval readstring pop
+ (xref) ne { /readxref cvx /syntaxerror signalerror } if
+ % Store the xref table entry position for each object.
+ % We only need to read the run headers, not every entry.
+ { PDFfile token pop % first object # or trailer
+ dup /trailer eq { pop exit } if
+ PDFfile pdfstring readline pop
+ token pop % entry count
+ exch pop exch
+ % This section might be adding new objects:
+ % ensure that Objects and Generations are big enough.
+ % Stack: count obj#
+ 2 copy add growPDFobjects
+ PDFfile fileposition 3 -1 roll
+ { Objects 2 index lget null eq % later update might have set it
+ { Objects 2 index 2 index cvx lput }
+ if exch 1 add exch 20 add
+ }
+ repeat PDFfile exch setfileposition pop
+ } loop
+ count /pdfemptycount exch def
+ PDFfile traileropdict .pdfrun
+ } bind def
+
+% Open a PDF file and read the header, trailer, and cross-reference.
+/pdfopen { % <file> pdfopen <dict>
+ pdfopenfile begin
+ pdfopencache
+ .writepdfmarks {
+ % Copy bookmarks (outline) to the output.
+ Trailer /Root oget /Outlines knownoget {
+ /First knownoget {
+ { dup writeoutline /Next knownoget not { exit } if } loop
+ } if
+ } if
+ } if % end .writepdfmarks
+ currentdict end
+} bind def
+/pdfopencache { % - pdfopencache -
+ % Create and initialize some caches.
+ /PageCount pdfpagecount def
+ /PageNumbers PageCount 65534 .min dict def
+ /PageIndex PageCount 65534 .min array def
+} bind def
+/pdfopenfile { % <file> pdfopenfile <dict>
+ pdfdict readonly pop % can't do it any earlier than this
+ 15 dict begin
+ /LocalResources 0 dict def
+ /DefaultMatrix null def % establish binding
+ /Printed where { pop } {
+ % Guess whether the output device is a printer.
+ /Printed currentpagedevice /OutputFile known def
+ } ifelse
+ /PSLevel1 where { pop } { /PSLevel1 false def } ifelse
+ cvlit /PDFfile exch def
+ /PDFsource PDFfile def
+ /Repaired false def
+ PDFfile dup 0 setfileposition pdfstring readstring
+ not {/pdfopen cvx /syntaxerror signalerror} if
+ (%PDF-) search not {/pdfopen cvx /syntaxerror signalerror} if
+ length /PDFoffset exch def pop cvr /PDFversion exch def
+ findxref
+ initPDFobjects
+ % Read the last cross-reference table.
+ readxref /Trailer exch def
+ Trailer /Encrypt known
+ { pdf_process_Encrypt % signal error
+ }
+ if
+ % Read any previous cross-reference tables.
+ Trailer { /Prev .knownget not { exit } if readxref } loop
+ Repaired { printrepaired } if
+ currentdict end
+ } bind def
+
+% Skip backward over the %%EOF at the end of the PDF file, and read
+% the preceding startxref line. The PDF specification unambiguously
+% requires that the %%EOF appear on a line by itself, and that the
+% startxref and the following position value appear on separate lines;
+% however, some applications (including, apparently, Acrobat Distiller
+% on the Macintosh) may add up to 2K of garbage after the %%EOF, and some
+% other applications also truncate the %%EOF to %%EO, and/or put the
+% startxref and the following value on the same line.
+% A file reported from Distiller 3.02b for AIX 4.1.1 has 2076 bytes
+% of garbage. The tolerance is increased to 4K to cover future
+% applications and bigger allocation units.
+/findxref { % - findxref <xrefpos>
+ PDFfile dup dup 0 setfileposition bytesavailable
+ dup /PDFfilelen exch def
+ % Find the last %%EOF string (within 4096 bytes)
+ 4096 sub PDFoffset .max
+ 2 copy setfileposition
+ PDFfilelen exch sub string 1 index exch readstring pop {
+ (\015%%EO) search { % Adobe can handle truncated key string
+ pop pop % if found, keep searching 'post' string
+ } {
+ (\012%%EO) search
+ { pop pop } { exit } ifelse % exit if neither string found
+ } ifelse
+ } loop
+ PDFfilelen exch length sub 4 sub PDFoffset .max exch 1 index setfileposition
+ % Stack: eofpos
+ % Check for whether this is, in fact, a valid PDF file.
+ dup PDFfilelen exch sub dup dup 7 gt exch 6 lt or {
+ pop true
+ } {
+ string PDFfile exch readstring pop
+ dup (%%EOF\n) eq exch dup (%%EOF\r) eq
+ exch (%%EOF\r\n) eq or or not
+ } ifelse {
+ (
+ **** This file has a corrupted %%EOF marker, or garbage after the %%EOF.
+) pdfformaterror
+ } if
+ PDFfile exch setfileposition
+ % Now read the startxref and xref start position.
+ prevline token not { null } if dup type /integertype eq {
+ exch pop cvi % xref start position
+ exch PDFfile exch setfileposition
+ prevline (startxref) linene { /findxref cvx /syntaxerror signalerror } if
+ pop
+ } { % else, this file has 'startxref #####' format
+ (startxref) ne { /findxref cvx /syntaxerror signalerror } if
+ cvi % xref start position
+ (
+ **** The format of the startxref line in this file is invalid.
+) pdfformaterror
+ exch PDFfile exch setfileposition
+ } ifelse
+} bind def
+/stderrfile (%stderr) (w) file def
+/stderrprint { % <string> stderrprint -
+ //stderrfile dup 3 -1 roll writestring flushfile
+} bind def
+/pdfformaterror { % <string> pdfformaterror -
+ stderrprint
+ /Repaired true store
+} bind def
+/printrepaired {
+ Trailer /Info knownoget {
+ /Producer knownoget not { null } if
+ } {
+ null
+ } ifelse
+ dup null eq {
+ pop (\
+ **** Please notify the author of the software that produced this file
+)
+ } {
+ ( **** The file was produced by ) stderrprint
+ % Handle a Unicode Producer.
+ (\376\377) anchorsearch {
+ pop dup length 2 idiv string 0 1 2 index length 1 sub {
+ % Stack: origstr newstr i
+ 1 index exch 3 index 1 index 2 mul 1 add get put
+ } for exch pop
+ } if
+ stderrprint
+ (:
+ **** please notify the author of this software
+)
+ } ifelse stderrprint
+(\
+ **** that the file does not conform to Adobe's published PDF
+ **** specification. Processing of the file will continue normally.
+
+) stderrprint
+} bind def
+
+% Write the outline structure for a file. Uses linkdest (below).
+/writeoutline % <outlinedict> writeoutline -
+ { mark
+ 0 2 index /First knownoget
+ { { exch 1 add exch /Next knownoget not { exit } if } loop }
+ if
+ % stack: dict mark count
+ dup 0 eq
+ { pop 1 index
+ }
+ { 2 index /Count knownoget { 0 lt { neg } if } if
+ /Count exch 3 index
+ }
+ ifelse linkdest /Title oget /Title exch /OUT pdfmark
+ /First knownoget
+ { { dup writeoutline /Next knownoget not { exit } if } loop }
+ if
+ } bind def
+
+% Close a PDF file.
+/pdfclose % <dict> pdfclose -
+ { begin
+ PDFfile closefile
+ end
+ } bind def
+
+% ======================== Page accessing ======================== %
+
+% Get a (possibly inherited) attribute of a page.
+/pget % <pagedict> <key> pget <value> -true-
+ % <pagedict> <key> pget -false-
+ { 2 copy knownoget
+ { exch pop exch pop true
+ }
+ { exch /Parent knownoget
+ { exch pget }
+ { pop false }
+ ifelse
+ }
+ ifelse
+ } bind def
+
+% Get the value of a resource on a given page.
+/rget { % <resname> <pagedict> <restype> rget <value> -true-
+ % <resname> <pagedict> <restype> rget -false-
+ LocalResources 1 index knownoget {
+ 3 index knownoget
+ } {
+ false
+ } ifelse {
+ exch pop exch pop exch pop true
+ } {
+ exch /Resources pget {
+ exch knownoget { exch knownoget } { pop false } ifelse
+ } {
+ pop pop false
+ } ifelse
+ } ifelse
+} bind def
+
+% Get the total number of pages in the document.
+/pdfpagecount % - pdfpagecount <int>
+ { Trailer /Root oget /Pages oget /Count oget
+ } bind def
+
+% Find the N'th page of the document by iterating through the Pages tree.
+% The first page is numbered 1.
+/pdffindpageref { % <int> pdffindpage <objref>
+ dup Trailer /Root oget /Pages get
+ { % We should be able to tell when we reach a leaf
+ % by finding a Type unequal to /Pages. Unfortunately,
+ % some files distributed by Adobe lack the Type key
+ % in some of the Pages nodes! Instead, we check for Kids.
+ dup oforce /Kids knownoget not { exit } if
+ exch pop null
+ 0 1 3 index length 1 sub {
+ 2 index exch get
+ dup oforce dup /Kids known { /Count oget } { pop 1 } ifelse
+ % Stack: index kids null noderef count
+ dup 5 index ge { pop exch pop exit } if
+ 5 -1 roll exch sub 4 1 roll pop
+ } for exch pop
+ % Stack: index null|noderef
+ dup null eq { pop pop 1 null exit } if
+ } loop
+ % Stack: index countleft noderef
+ 1 index 1 ne { pop pop /pdffindpage cvx /rangecheck signalerror } if
+ exch pop
+ PageIndex 2 index 1 sub 65533 .min 2 index oforce put
+ PageNumbers 1 index oforce 3 index dup 65534 le
+ { put }
+ { pop pop pop } % don't store more than 65534 pagenumbers
+ ifelse
+ exch pop
+} bind def
+/pdffindpage { % <int> pdffindpage <pagedict>
+ pdffindpageref oforce
+} bind def
+
+% Find the N'th page of the document.
+% The first page is numbered 1.
+/pdfgetpage % <int> pdfgetpage <pagedict>
+ { PageIndex 1 index 1 sub dup 65533 lt
+ { get }
+ { pop pop null }
+ ifelse
+ dup null ne
+ { exch pop oforce }
+ { pop pdffindpage }
+ ifelse
+ } bind def
+
+% Find the page number of a page object (inverse of pdfgetpage).
+/pdfpagenumber % <pagedict> pdfpagenumber <int>
+ { % We use the simplest and stupidest of all possible algorithms....
+ PageNumbers 1 index .knownget
+ { exch pop
+ }
+ { 1 1 PageCount 1 add % will give a rangecheck if not found
+ { dup pdfgetpage oforce 2 index eq { exit } if pop
+ }
+ for exch pop
+ }
+ ifelse
+ } bind def
+
+% Display a given page.
+/boxrect % [<llx> <lly> <urx> <ury>] boxrect <x> <y> <w> <h>
+ { aload pop exch 3 index sub exch 2 index sub
+ } bind def
+/resolvedest { % <name|string|other> resolvedest <other|null>
+ dup type /nametype eq {
+ Trailer /Root oget /Dests knownoget {
+ exch knownoget not { null } if
+ } {
+ null
+ } ifelse
+ } {
+ dup type /stringtype eq {
+ Trailer /Root oget /Names knownoget {
+ /Dests knownoget {
+ exch nameoget
+ } {
+ pop null
+ } ifelse
+ } {
+ pop null
+ } ifelse
+ } if
+ } ifelse
+} bind def
+/linkdest { % <link|outline> linkdest
+ % ([/Page <n>] /View <view> | ) <link|outline>
+ dup /Dest knownoget
+ { resolvedest
+ dup type /dicttype eq { /D knownoget not { null } if } if
+ dup null eq
+ { pop }
+ { dup 0 oget
+ dup null eq
+ { pop }
+ { dup type /integertype ne { pdfpagenumber } if
+ /Page exch 4 -2 roll
+ }
+ ifelse
+ dup length 1 sub 1 exch getinterval /View exch 3 -1 roll
+ }
+ ifelse
+ }
+ if
+} bind def
+% <pagedict> mark ... -proc- -
+/namedactions 8 dict dup begin
+ /FirstPage {
+ /Page 1 3 -1 roll
+ } def
+ /LastPage {
+ counttomark 2 add index pdfpagecount /Page exch 3 -1 roll
+ } def
+ /NextPage {
+ counttomark 2 add index pdfpagenumber 1 add /Page exch 3 -1 roll
+ } def
+ /PrevPage {
+ counttomark 2 add index pdfpagenumber 1 sub /Page exch 3 -1 roll
+ } def
+end readonly def
+% <pagedict> <annotdict> -proc- -
+/annottypes 5 dict dup begin
+ /Text {
+ mark exch
+ { /Rect /Open /Contents }
+ { 2 copy knownoget { 3 -1 roll } { pop } ifelse }
+ forall pop /ANN pdfmark
+ } bind def
+ /Link {
+ mark exch
+ dup /C knownoget { /Color exch 3 -1 roll } if
+ { /Rect /Border }
+ { 2 copy knownoget { 3 -1 roll } { pop } ifelse }
+ forall dup /A knownoget {
+ dup /URI known {
+ /A mark 3 2 roll % <<>> /A [ <<action>>
+ { oforce } forall
+ .dicttomark
+ 3 2 roll
+ } {
+ dup /D knownoget {
+ exch pop exch dup length dict copy dup /Dest 4 -1 roll put
+ } {
+ /N knownoget { % Assume /S /Named
+ namedactions exch .knownget { exec } if
+ } if
+ } ifelse
+ } ifelse
+ } if
+ linkdest pop /LNK pdfmark
+ } bind def
+end readonly def
+
+/pdfshowpage % <pagedict> pdfshowpage -
+ { dup /Page exch store
+ pdfshowpage_init
+ pdfshowpage_setpage
+ pdfshowpage_finish
+ } bind def
+
+/pdfpagecontents % <pagedict> pdfpagecontents <contents>
+ { } bind def
+
+/pdfshowpage_init % <pagedict> pdfshowpage_init <pagedict>
+ { /DSCPageCount DSCPageCount 1 add store
+ } bind def
+
+/.pdfshowpage_Install { % <pagedict> [<prevproc>] .pdfshowpage_Install -
+ exch
+ % We would like to clip to the CropBox here, but the subsequent
+ % initgraphics would override it. Instead, we have to handle it
+ % in graphicsbeginpage.
+ dup /CropBox pget dup {exch pop} if systemdict /UseCropBox known and {
+ dup /CropBox pget pop dup 0 get neg exch 1 get neg translate
+ } {
+ dup /MediaBox pget {
+ dup 0 get neg exch 1 get neg translate
+ } if
+ } ifelse
+ pop 0 get exec
+} bind def
+
+/pdfshowpage_setpage { % <pagedict> pdfshowpage_setpage <pagedict>
+ 4 dict begin % for setpagedevice
+ % Stack: pagedict
+ currentpagedevice /Orientation 2 index /Rotate pget not { 0 } if 90 idiv
+ % Rotate specifies *clockwise* rotation!
+ neg 3 and def
+ % Stack: pagedict currentpagedict
+ 1 index /CropBox pget dup {exch pop} if systemdict /UseCropBox known and {
+ % Set the page size.
+ 1 index /CropBox pget pop
+ boxrect 2 array astore /PageSize exch def pop pop
+ } {
+ 1 index /MediaBox pget {
+ % Set the page size.
+ boxrect 2 array astore /PageSize exch def pop pop
+ } if
+ } ifelse
+ dup /Install .knownget {
+ % Don't let the Install procedure get more deeply
+ % nested after every page.
+ dup type dup /arraytype eq exch /packedarraytype eq or {
+ dup length 4 eq {
+ dup 2 get /.pdfshowpage_Install load eq {
+ 1 get 0 get % previous procedure
+ } if
+ } if
+ } if
+ } {
+ { }
+ } ifelse 1 array astore
+ 2 index exch /.pdfshowpage_Install load /exec load
+ 4 packedarray cvx
+ % Stack: pagedict currentpagedict installproc
+ /Install exch def
+ % Stack: pagedict currentpagedict
+ pop currentdict end setpagedevice
+} bind def
+
+/pdfshowpage_finish { % <pagedict> pdfshowpage_finish -
+ save /PDFSave exch store
+ (before exec) VMDEBUG
+
+ .writepdfmarks {
+
+ % Copy the crop box.
+ dup /CropBox knownoget {
+ % If the page has been rotated, rotate the CropBox.
+ mark /CropBox 3 -1 roll
+ 3 index /Rotate pget {
+ 90 idiv 1 and 0 ne {
+ aload pop 4 -2 roll exch 4 2 roll exch 4 array astore
+ } if
+ } if
+ /PAGE pdfmark
+ } if
+
+ % Copy annotations and links.
+ dup /Annots knownoget {
+ 0 1 2 index length 1 sub
+ { 1 index exch oget
+ dup /Subtype oget annottypes exch .knownget { exec } { pop } ifelse
+ }
+ for pop
+ } if
+
+ } if % end .writepdfmarks
+
+ % Display the actual page contents.
+ 6 dict begin
+ /BXlevel 0 def
+ /BGDefault currentblackgeneration def
+ /UCRDefault currentundercolorremoval def
+ %****** DOESN'T HANDLE COLOR TRANSFER YET ******
+ /TRDefault currenttransfer def
+ matrix currentmatrix 2 dict
+ 2 index /CropBox knownoget {
+ boxrect 4 array astore 1 index /ClipRect 3 -1 roll put
+ } if
+ dictbeginpage /DefaultMatrix 1 index store setmatrix
+ dup % for showing annotations below
+ count /pdfemptycount exch store
+ gsave
+ % If the page uses any transparency features, show it within
+ % a transparency group.
+ PDFversion 1.4 lt {
+ showpagecontents
+ } {
+ dup pageusestransparency {
+ % Show the page within a PDF 1.4 device filter.
+ 0 .pushpdf14devicefilter {
+ % If the page has a Group, enclose contents in transparency group.
+ % (Adobe Tech Note 5407, sec 9.2)
+ dup /Group knownoget {
+ 1 index /CropBox knownoget not {
+ 1 index /MediaBox oget
+ } if .beginformgroup {
+ showpagecontents
+ } .internalstopped {
+ .discardtransparencygroup stop
+ } if .endtransparencygroup
+ } {
+ showpagecontents
+ } ifelse
+ } .internalstopped {
+ % todo: discard
+ .popdevicefilter stop
+ } if .popdevicefilter
+ } {
+ showpagecontents
+ } ifelse
+ } ifelse
+ grestore
+ % todo: mixing drawing ops outside the device filter could cause
+ % problems, for example with the pnga device.
+ /Annots knownoget { { oforce drawannot } forall } if
+ endpage
+ end % scratch dict
+ (after exec) VMDEBUG
+ PDFSave restore
+} bind def
+/showpagecontents { % <pagedict> showpagecontents -
+ /Contents knownoget not { 0 array } if
+ dup type /arraytype ne { 1 array astore } if {
+ oforce false resolvestream pdfopdict .pdfrun
+ } forall
+} bind def
+/processcolorspace { % - processcolorspace <colorspace>
+ % The following is per the PLRM3.
+ currentdevice 1 dict dup /ProcessColorModel dup put .getdeviceparams
+ exch pop exch pop
+ dup type /nametype ne { cvn } if
+ dup { setcolorspace } .internalstopped { pop /DeviceRGB } if
+} bind def
+
+% ------ Transparency support ------ %
+
+% Determine whether a page might invoke any transparency features:
+% - Group in the page dictionary
+% - Non-default ca, CA, or SMask in an ExtGState
+% - Form XObject with Group
+% - Image XObject with SMask
+% ****** DO WE NEED TO LOOK IN RESOURCE DICTS OF OTHER CONTENT STREAMS? ******
+/pageusestransparency { % <pagedict> pageusestransparency <bool>
+ PDFversion 1.4 lt {
+ pop false
+ } {
+ dup /Group known {
+ pop true
+ } {
+ false exch {
+ dup resourceusestransparency { pop not exit } if
+ /Parent knownoget not { exit } if
+ } loop
+ } ifelse
+ } ifelse
+} bind def
+% Check the Resources of a page or Form.
+/resourceusestransparency { % <dict> resourceusestransparency <bool>
+ { % Use loop to provide an exitable context.
+ /Resources knownoget not { 0 dict } if
+ dup /ExtGState knownoget {
+ false exch {
+ exch pop oforce
+ dup /ca knownoget { 1 ne { pop not exit } if } if
+ dup /CA knownoget { 1 ne { pop not exit } if } if
+ dup /SMask knownoget { /None ne { pop not exit } if } if
+ pop
+ } forall { pop true exit } if
+ } if
+ dup /XObject knownoget {
+ false exch {
+ exch pop oforce dup /Subtype get
+ dup /Image eq { 1 index /SMask known { pop pop not exit } if } if
+ /Form eq {
+ dup /Group known { pop not exit } if
+ resourceusestransparency { not exit } if
+ } {
+ pop
+ } ifelse
+ } forall { pop true exit } if
+ } if
+ pop false exit
+ } loop
+} bind def
+
+end % pdfdict
+.setglobal
diff --git a/Master/xemtex/gslib/pdf_ops.ps b/Master/xemtex/gslib/pdf_ops.ps
new file mode 100644
index 00000000000..4c98a7f23b7
--- /dev/null
+++ b/Master/xemtex/gslib/pdf_ops.ps
@@ -0,0 +1,521 @@
+% Copyright (C) 1994, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: pdf_ops.ps,v 1.17.2.2.2.1 2003/04/12 14:02:39 giles Exp $
+% Definitions for most of the PDF operators.
+
+.currentglobal true .setglobal
+
+% Define pdfmark. Don't allow it to be bound in.
+% Also don't define it in systemdict, because this leads some Adobe code
+% to think this interpreter is a distiller.
+% (If this interpreter really is a distiller, don't do this.)
+systemdict /pdfmark known not
+ { userdict /pdfmark { cleartomark } bind put } if
+
+userdict /GS_PDF_ProcSet 127 dict dup begin
+
+% ---------------- Abbreviations ---------------- %
+
+/bdef { bind def } bind def
+
+% ---------------- Graphics state stack ---------------- %
+
+% PDF adds a number of parameters to the graphics state.
+% We implement this by pushing and popping a dictionary
+% each time we do a PDF gsave or grestore.
+% The keys in this dictionary are as follows:
+% self % identifies the dictionary as one of ours
+% ClipRect % (optional)
+% Show
+% TextSaveMatrix % matrix at time of BT (iff within BT/ET)
+% (The following correspond directly to PDF state parameters.)
+% AlphaIsShape
+% FillConstantAlpha
+% FillColor
+% FillColorSpace
+% FillOverprint
+% SoftMask
+% StrokeConstantAlpha
+% StrokeColor
+% StrokeColorSpace
+% StrokeOverprint
+% TextSpacing
+% TextHScaling
+% Leading
+% TextFont
+% TextLineMatrix
+% TextMatrix
+% TextRise
+% TextRenderingMode
+% WordSpacing
+
+/nodict 1 dict def
+nodict /self { //nodict } executeonly put
+nodict readonly pop
+
+/dictbeginpage { % <initialdict> dictbeginpage -
+ //nodict 20 dict .copydict begin { def } forall
+ graphicsbeginpage textbeginpage
+} bdef
+/endpage { % - endpage -
+ showpage end
+} bdef
+
+/graphicsbeginpage {
+ initgraphics
+ currentdict /ClipRect .knownget { aload pop rectclip } if
+ 0 g 0 G false op false OP 0 OPM
+ 1 ca 1 CA null SMask false AIS /Compatible BM true TK
+} bdef
+
+/gput % <value> <key> gput -
+ { exch currentdict //nodict eq { /self dup load end 5 dict begin def } if
+ % If we're in a Level 1 system, we need to grow the
+ % dictionary explicitly.
+ currentdict length currentdict maxlength ge %eq
+ { currentdict dup length 3 mul 2 idiv 1 add dict .copydict end begin
+ }
+ if def
+ } bdef
+
+/q {
+ gsave //nodict begin
+} bdef
+% Some PDF files have excess Q operators!
+/Q {
+ currentdict /self .knownget { exec //nodict eq { end grestore } if } if
+} bdef
+
+% ---------------- Color setting ---------------- %
+
+/fcput % <color> <colorspace> fcput -
+ { /FillColorSpace gput /FillColor gput
+ } bdef
+/scput % <color> <colorspace> scput -
+ { /StrokeColorSpace gput /StrokeColor gput
+ } bdef
+
+/csdevgray [/DeviceGray] readonly def
+/csdevrgb [/DeviceRGB] readonly def
+/csdevcmyk [/DeviceCMYK] readonly def
+/cspattern [/Pattern] readonly def
+/nullpattern1 mark
+ /PatternType 1 /PaintType 1 /TilingType 3 /BBox [0 0 0 0]
+ /XStep 1 /YStep 1 /PaintProc { }
+.dicttomark readonly def
+/nullpattern2 nullpattern1 dup length dict copy readonly def
+
+% Each entry in the color space dictionary is a procedure of the form
+% <cspace> -proc- <cspace> <initial-color>
+/CSdict mark
+ /DeviceGray { pop //csdevgray 0 } bind
+ /DeviceRGB { pop //csdevrgb [0 0 0] cvx } bind
+ /DeviceCMYK { pop //csdevcmyk [0 0 0 1] cvx } bind
+ /CIEBasedA { 0 } bind
+ /CIEBasedABC { [0 0 0] cvx } bind
+ /ICCBased { [ 1 index 1 oget /N get { 0 } repeat ] cvx } bind
+ /Separation { 1 } bind
+ /DeviceN { % What is the correct value??
+ [ 1 index 1 get length { 1 } repeat ] cvx
+ } bind
+ /Indexed { 0 } bind
+ /Pattern {
+ dup type /nametype eq 1 index length 1 eq or {
+ pop //cspattern //nullpattern1 matrix makepattern
+ } {
+ //nullpattern2 matrix makepattern 1 index 1 get csset
+ % Stack: patternspace nullpattern basecolor basespace
+ pop [ 3 1 roll dup type /arraytype eq { aload pop } if
+ counttomark -1 roll ] cvx
+ } ifelse
+ } bind
+.dicttomark readonly def
+/csset % <cspace> csset <color> <cspace>
+ { dup dup type /nametype ne { 0 get } if //CSdict exch get exec exch
+ } bdef
+
+/g { //csdevgray fcput } bdef
+/G { //csdevgray scput } bdef
+/rg { 3 array astore cvx //csdevrgb fcput } bdef
+/RG { 3 array astore cvx //csdevrgb scput } bdef
+/k { 4 array astore cvx //csdevcmyk fcput } bdef
+/K { 4 array astore cvx //csdevcmyk scput } bdef
+/cs { csset fcput } bdef
+/CS { csset scput } bdef
+/ri { pop } bdef
+% We have to break up sc according to the number of operands.
+/sc1 { /FillColor gput } bdef
+/SC1 { /StrokeColor gput } bdef
+% We have to avoid storing into a color array associated with an outer
+% gsave level, so we do a kind of "copy on write".
+/sc* {
+ currentdict /FillColor .knownget {
+ astore pop
+ } {
+ /FillColor load length array astore cvx /FillColor gput
+ } ifelse
+} bdef
+/SC* {
+ currentdict /StrokeColor .knownget {
+ astore pop
+ } {
+ /StrokeColor load length array astore cvx /StrokeColor gput
+ } ifelse
+} bdef
+
+% ---------------- Overprint/transparency setting ---------------- %
+
+/op { /FillOverprint gput } bdef
+/OP { /StrokeOverprint gput } bdef
+/OPM {
+ /.setoverprintmode where { pop .setoverprintmode } { pop } ifelse
+} bdef
+/ca { /FillConstantAlpha gput } bdef
+/CA { /StrokeConstantAlpha gput } bdef
+/SMask { /SoftMask gput } bdef
+/AIS { /AlphaIsShape gput } bdef
+/BM {
+ /.setblendmode where {
+ pop [ exch dup type /nametype ne { aload pop } if /Normal ] {
+ { .setblendmode } .internalstopped not { exit } if pop
+ } forall
+ } {
+ pop
+ } ifelse
+} bdef
+/TK {
+ /.settextknockout where { pop .settextknockout } { pop } ifelse
+} bdef
+
+% ---------------- Color installation ---------------- %
+
+% Establish a given color (and color space) as current.
+/.settransparencyparams { % <alpha> <smask> .settransparencyparams -
+ /.begintransparencymask where {
+ pop AlphaIsShape {
+ 1 .setopacityalpha 0 .inittransparencymask exch .setshapealpha 1
+ } {
+ 1 .setshapealpha 1 .inittransparencymask exch .setopacityalpha 0
+ } ifelse
+ % Set the soft mask by rendering the XObject. Doing this every time
+ % is obviously very inefficient; we'll improve it later.
+ .settransparencymask
+ } {
+ pop pop
+ } ifelse
+} bdef
+/.settransparencymask { % <paramdict> <masknum> .settransparencymask -
+ exch dup null eq {
+ pop .inittransparencymask
+ } {
+ dup /Draw get exec
+ } ifelse
+} bdef
+% (Non-mask) images must execute setfillblend.
+/setfillblend {
+ FillOverprint setoverprint
+ FillConstantAlpha SoftMask .settransparencyparams
+} def
+/setfillstate {
+ FillColor FillColorSpace setgcolor setfillblend
+} def
+/setstrokestate {
+ StrokeColor StrokeColorSpace setgcolor StrokeOverprint setoverprint
+ StrokeConstantAlpha SoftMask .settransparencyparams
+} def
+/Cdict 15 dict dup begin % <color...> <colorspace> -proc- -
+ /DeviceGray { pop setgray } bdef
+ /DeviceRGB { pop setrgbcolor } bdef
+ /DeviceCMYK { pop setcmykcolor } bdef
+ /CIEBasedA
+ { dup currentcolorspace eq { pop } { setcolorspace } ifelse setcolor } bdef
+ /CIEBasedABC /CIEBasedA load def
+ /CIEBasedDEF /CIEBasedA load def
+ /CIEBasedDEFG /CIEBasedA load def
+ /ICCBased /CIEBasedA load def
+ /Separation /CIEBasedA load def
+ /DeviceN /CIEBasedA load def
+ /Indexed /CIEBasedA load def
+ /Pattern
+ { dup currentcolorspace eq { pop } { setcolorspace } ifelse
+ dup /Matrix .knownget not { matrix } if
+ gsave DefaultMatrix setmatrix makepattern grestore setcolor
+ } bdef
+end def
+/setgcolor % (null | <color...>) <colorspace> setgcolor -
+ { 1 index null eq
+ { pop pop }
+ { dup 0 get //Cdict exch get exec }
+ ifelse
+ } bdef
+/fsexec % <fillop|strokeop> fsexec -
+ { % Preserve the current point, if any.
+ { currentpoint } stopped
+ { $error /newerror false put cvx exec }
+ { 3 -1 roll cvx exec moveto }
+ ifelse
+ } bdef
+
+% ---------------- Path painting and clipping ---------------- %
+
+/S { setstrokestate /stroke fsexec } bdef
+/f { setfillstate /fill fsexec } bdef
+/f* { setfillstate /eofill fsexec } bdef
+/n { newpath } bdef % don't allow n to get bound in
+/s { closepath S } bdef
+/B { gsave setfillstate fill grestore S } bdef
+/b { closepath B } bdef
+/B* { gsave setfillstate eofill grestore S } bdef
+/b* { closepath B* } bdef
+
+% Clipping:
+
+/Wdict 4 dict dup begin
+/S { gsave setstrokestate stroke grestore n } bdef
+/f { gsave setfillstate fill grestore n } bdef
+/f* { gsave setfillstate eofill grestore n } bdef
+/n { end clip newpath } bdef
+end readonly def
+/W { //Wdict begin } bdef
+/W*dict 4 dict dup begin
+Wdict { def } forall
+/n { end eoclip newpath } bdef
+end readonly def
+/W* { //W*dict begin } bdef
+
+% ---------------- Text control ---------------- %
+
+/textbeginpage
+ { /TextSpacing 0 def % 0 Tc
+ /TextLeading 0 def % 0 TL
+ /TextRenderingMode 0 def % 0 Tr
+ /TextRise 0 def % 0 Ts
+ /WordSpacing 0 def % 0 Tw
+ /TextHScaling 1.0 def % 100 Tz
+ /TextFont null def
+ /Show { showfirst } def
+ } bdef
+
+% Contrary to the statement in the PDF manual, BT and ET *can* be nested,
+% if the CharProc for a Type 3 font does a BT/ET itself.
+% Since we always call the CharProc inside a q/Q, we simply ensure that
+% the text state is saved and restored like the rest of the extended
+% graphics state.
+
+/settextmatrix {
+ TextMatrix concat
+ TextHScaling 1 ne { TextHScaling 1 scale } if
+ TextRise 0 ne { 0 TextRise translate } if
+ TextFont dup null eq { pop } { setfont } ifelse
+} bdef
+/settextstate {
+ % The text state can be set even outside BT/ET.
+ currentdict /TextSaveMatrix known {
+ TextSaveMatrix setmatrix settextmatrix
+ } if
+} bdef
+/settextposition {
+ % Update the TextMatrix translation.
+ gsave TextSaveMatrix setmatrix
+ currentpoint TextMatrix 4 2 getinterval astore pop
+ % We would like to do "grestore currentpoint translate"
+ % here, but some PDF files set a singular text matrix
+ % (0 0 0 0 <x> <y> Tm), so we can't do this.
+ TextTempMatrix identmatrix setmatrix currentpoint
+ grestore
+ TextTempMatrix currentmatrix 4 2 getinterval astore pop
+ TextTempMatrix setmatrix
+} bdef
+
+/BT {
+ currentdict /TextLineMatrix .knownget
+ { identmatrix pop TextMatrix identmatrix pop }
+ { matrix /TextLineMatrix gput matrix /TextMatrix gput }
+ ifelse
+ { showfirst } /Show gput
+ currentdict /TextSaveMatrix .knownget not {
+ matrix dup /TextSaveMatrix gput
+ } if currentmatrix pop settextmatrix
+ matrix /TextTempMatrix gput % see settextposition
+} bdef
+/ET {
+ TextRenderingMode 4 ge { clip newpath } if
+ TextSaveMatrix setmatrix
+ currentdict /TextSaveMatrix undef
+} bdef
+/Tc { /TextSpacing gput { showfirst } /Show gput } bdef
+/TL { /TextLeading gput } bdef
+/Tr { /TextRenderingMode gput { showfirst } /Show gput } bdef
+/Ts { /TextRise gput settextstate } bdef
+/Tw { /WordSpacing gput { showfirst } /Show gput } bdef
+/Tz { 100 div /TextHScaling gput settextstate} bdef
+
+% ---------------- Font control ---------------- %
+
+/Tf { % <font> <scale> Tf -
+ dup 1 eq { pop } { scalefont } ifelse
+ /TextFont gput settextstate
+} bdef
+
+% Read a CFF font.
+/FRD % <resname> <file> FRD -
+ { /FontSetInit /ProcSet findresource begin true ReadData
+ } bdef
+
+% Copy a font, removing its FID. If changed is true, also remove
+% the UniqueID and XUID, if any. If the original dictionary doesn't have
+% the keys being removed, don't copy it.
+/.copyfontdict % <font> <changed> .copyfontdict <dict>
+ { 1 index /FID known
+ 1 index { 2 index /UniqueID known or 2 index /XUID known or } if
+ { % We add 1 to the length just in case the original
+ % didn't have a FID.
+ exch dup length 1 add dict exch
+ { % Stack: changed newfont key value
+ 1 index /FID eq 4 index
+ { 2 index /UniqueID eq or 2 index /XUID eq or }
+ if not { 3 copy put } if pop pop
+ }
+ forall exch
+ }
+ if pop
+ } bdef
+
+% Insert a new Encoding or Metrics into a font if necessary.
+% Return a possibly updated font, and a flag to indicate whether
+% the font was actually copied.
+/.updatefontmetrics { % <font> <Metrics|null> .updatefontmetrics
+ % <font'> <copied>
+ dup null ne {
+ exch true .copyfontdict dup /Metrics 4 -1 roll put true
+ } {
+ pop false
+ } ifelse
+} bdef
+/.updatefontencoding { % <font> <Encoding|null> .updatefontencoding
+ % <font'> <copied>
+ dup null ne { dup 2 index /Encoding get ne } { false } ifelse {
+ exch false .copyfontdict dup /Encoding 4 -1 roll put true
+ } {
+ pop false
+ } ifelse
+} bdef
+/.updatefont { % <font> <Encoding|null> <Metrics|null> .updatefont
+ % <font'> <copied>
+ 3 -1 roll exch .updatefontmetrics
+ % Stack: enc|null font' copied
+ 3 1 roll exch .updatefontencoding 3 -1 roll or
+} bdef
+
+% ---------------- Text positioning ---------------- %
+
+/Td {
+ TextLineMatrix transform TextLineMatrix 4 2 getinterval astore pop
+ TextLineMatrix TextMatrix copy pop settextstate
+} bdef
+/TD { dup neg /TextLeading gput Td } bdef
+/T* { 0 TextLeading neg Td } bdef
+/Tm {
+ TextLineMatrix astore TextMatrix copy pop settextstate
+} bdef
+
+% ---------------- Text painting ---------------- %
+
+/Vexch {
+ rootfont /WMode .knownget { 1 eq { exch } if } if
+} bind def
+
+/textrenderingprocs [ % (0 is handled specially)
+ % Painting-only modes
+ { tf } { tS } { tB } { tn }
+ % Clipping modes
+ { gsave tf grestore tW }
+ { gsave tS grestore tW }
+ { gsave tB grestore tW }
+ { tW }
+] readonly def
+/setshowstate
+ { WordSpacing 0 eq TextSpacing 0 eq and
+ { TextRenderingMode 0 eq
+ { { setfillstate show } }
+ { { false charpath textrenderingprocs TextRenderingMode get exec } }
+ ifelse
+ }
+ { TextRenderingMode 0 eq
+ { WordSpacing 0 eq
+ { { setfillstate TextSpacing 0 Vexch 3 -1 roll ashow } }
+ { TextSpacing 0 eq
+ { { setfillstate WordSpacing 0 Vexch 32 4 -1 roll widthshow } }
+ { { setfillstate WordSpacing 0 Vexch 32
+ TextSpacing 0 Vexch 6 -1 roll awidthshow } }
+ ifelse
+ }
+ ifelse
+ }
+ { { WordSpacing TextSpacing
+ % Implement the combination of t3 and false charpath.
+ % Note that we must use cshow for this, because we
+ % can't parse multi-byte strings any other way.
+ % Stack: string xword xchar
+ { pop pop (x) dup 0 3 index put false charpath
+ % Stack: xword xchar ccode
+ 3 copy 32 eq { add } { exch pop } ifelse 0 Vexch rmoveto pop
+ }
+ 4 -1 roll cshow pop pop
+ textrenderingprocs TextRenderingMode get exec
+ }
+ }
+ ifelse
+ }
+ ifelse /Show gput
+ } bdef
+/showfirst { setshowstate Show } def
+
+/Tj {
+ 0 0 moveto Show settextposition
+} bdef
+/' { T* Tj } bdef
+/" { exch Tc exch Tw T* Tj } bdef
+/TJ {
+ 0 0 moveto {
+ dup type /stringtype eq {
+ Show
+ } { -1000 div
+ currentfont /ScaleMatrix .knownget { 0 get mul } if
+ 0 Vexch rmoveto
+ } ifelse
+ } forall settextposition
+} bdef
+
+/tf { setfillstate currentpoint fill moveto } bdef
+/tn { currentpoint newpath moveto } bdef
+% For stroking characters, temporarily restore the graphics CTM so that
+% the line width will be transformed properly.
+/Tmatrix matrix def
+/tS
+ { setstrokestate
+ currentpoint //Tmatrix currentmatrix TextSaveMatrix setmatrix stroke
+ setmatrix moveto
+ } bdef
+/tB { gsave tf grestore tS } bdef
+% This does the wrong thing if there have been multiple text operations
+% within a single BT/ET pair, but it's a start.
+/tW { } bdef
+
+end readonly put % GS_PDF_ProcSet
+
+.setglobal
diff --git a/Master/xemtex/gslib/pdf_sec.ps b/Master/xemtex/gslib/pdf_sec.ps
new file mode 100644
index 00000000000..e19e4b4397e
--- /dev/null
+++ b/Master/xemtex/gslib/pdf_sec.ps
@@ -0,0 +1,361 @@
+% Copyright (C) 1996-1998 Geoffrey Keating.
+% Copyright (C) 2001 Artifex Software, Inc.
+% This file may be freely distributed with or without modifications,
+% so long as modified versions are marked as such and copyright notices are
+% not removed.
+
+% $Id: pdf_sec.ps,v 1.5.2.1 2002/04/02 13:57:27 mpsuzuki Exp $
+% Implementation of security hooks for PDF reader.
+
+% This file contains the procedures that have to take encryption into
+% account when reading a PDF file. It replaces the stub version of this
+% file that is shipped with GhostScript. It requires GhostScript 7.01
+% or later.
+
+% Documentation for using this file is available at
+% http://www.ozemail.com.au/%7Egeoffk/pdfencrypt/
+
+% Modified by Alex Cherepanov to work with GS 6.60 and higher.
+% New versions of GS require explicit checks for /true , /false, and /null
+% in .decpdfrun . This fix is backward-compatible.
+
+% Modified by Raph Levien and Ralph Giles to use the new C
+% implementations of md5 and arcfour in ghostscript 7.01, and to
+% be compatible with PDF 1.4 128-bit encryption.
+
+/.setlanguagelevel where { pop 2 .setlanguagelevel } if
+.currentglobal true .setglobal
+/pdfdict where { pop } { /pdfdict 100 dict def } ifelse
+pdfdict begin
+
+% Older ghostscript versions do not have .pdftoken, so we use 'token' instead.
+/.pdftoken where { pop } { /.pdftoken /token load def } ifelse
+
+% take a stream and arc4 decrypt it.
+% <stream> <key> arc4decodefilter <stream>
+/arc4decodefilter {
+ 1 dict begin
+ /Key exch def
+ currentdict end /ArcfourDecode filter
+} bind def
+
+% <ciphertext> <key> arc4decode <plaintext>
+/arc4decode {
+ %(key: ) print dup == (ct: ) print 1 index ==
+ 1 index length 0 eq {
+ pop
+ } {
+ 1 index length string 3 1 roll arc4decodefilter exch readstring pop
+ } ifelse
+} bind def
+
+/md5 {
+ 16 string dup /MD5Encode filter dup 4 3 roll writestring closefile
+} bind def
+
+/pdf_padding_string
+ <28bf4e5e4e758a41 64004e56fffa0108
+ 2e2e00b6d0683e80 2f0ca9fe6453697a>
+def
+
+% Pad a key out to 32 bytes.
+/pdf_pad_key { % <key> pdf_pad_key <padded key>
+ dup length 32 gt { 0 32 getinterval } if
+ pdf_padding_string
+ 0 32 3 index length sub getinterval
+ concatstrings
+} bind def
+
+/pdf_xorbytes { % <iter-num> <key> pdf_xorbytes <xored-key>
+ dup length dup string
+ exch 1 sub 0 1 3 2 roll {
+ % <iter-num> <key> <new-key> <byte-num>
+ dup 3 index exch get 4 index xor
+ % <iter-num> <key> <new-key> <byte-num> <byte>
+ 3 copy put pop pop
+ } for
+ 3 1 roll pop pop
+} bind def
+
+% Get length of encryption key in bytes
+/pdf_key_length { % pdf_key_length <key_length>
+ Trailer /Encrypt oget /Length knownoget { -3 bitshift } { 5 } ifelse
+} bind def
+
+% Algorithm 3.2
+/pdf_compute_encryption_key { % <password> pdf_compute_encryption_key <key>
+ % Step 1.
+ pdf_pad_key
+
+ % Step 2, 3.
+ Trailer /Encrypt oget dup /O oget
+ % <padded-key> <encrypt> <O>
+
+ % Step 4.
+ exch /P oget 4 string exch
+ 2 copy 255 and 0 exch put
+ 2 copy -8 bitshift 255 and 1 exch put
+ 2 copy -16 bitshift 255 and 2 exch put
+ 2 copy -24 bitshift 255 and 3 exch put pop
+ % <padded-key> <O> <P>
+
+ % Step 5.
+ Trailer /ID oget 0 oget
+ 3 { concatstrings } repeat md5
+
+ % Step 6.
+ Trailer /Encrypt oget /R oget 3 eq {
+ 50 { md5 } repeat
+ } if
+
+ % Step 7.
+ 0 pdf_key_length getinterval
+} bind def
+
+% Algorithm 3.4
+/pdf_gen_user_password_R2 { % <filekey> pdf_gen_user_password_R2 <U>
+
+ % Step 2.
+ pdf_padding_string exch arc4decode
+} bind def
+
+% Algorithm 3.5
+/pdf_gen_user_password_R3 { % <filekey> pdf_gen_user_password_R3 <U>
+
+ % Step 2.
+ pdf_padding_string
+
+ % Step 3.
+ Trailer /ID oget 0 oget
+ concatstrings md5
+
+ % Step 4.
+ 1 index arc4decode
+
+ % Step 5.
+ 1 1 19 {
+ 2 index pdf_xorbytes arc4decode
+ } for
+ exch pop
+
+} bind def
+
+/pdf_gen_user_password { % <password> pdf_gen_user_password <filekey> <U>
+ % common Step 1 of Algorithms 3.4 and 3.5.
+ pdf_compute_encryption_key dup
+
+ Trailer /Encrypt oget
+
+ /R oget dup 2 eq {
+ pop pdf_gen_user_password_R2
+ } {
+ dup 3 eq {
+ pop pdf_gen_user_password_R3
+ } {
+ (****This file uses an unknown standard security handler revision: )
+ print == flush
+ /pdf_check_user_password cvx /undefined signalerror
+ } ifelse
+ } ifelse
+} bind def
+
+% Algorithm 3.6
+/pdf_check_user_password { % <password> pdf_check_user_password <filekey> true
+ % <password> pdf_check_user_password false
+ pdf_gen_user_password
+
+ Trailer /Encrypt oget /U oget
+
+ 0 2 index length getinterval eq {
+ true
+ } {
+ pop false
+ } ifelse
+} bind def
+
+% Compute an owner key, ie the result of step 4 of Algorithm 3.3
+/pdf_owner_key % <password> pdf_owner_key <owner-key>
+{
+ % Step 1.
+ pdf_pad_key
+
+ % Step 2.
+ md5
+
+ % 3.3 Step 3.
+ Trailer /Encrypt oget /R oget 3 eq {
+ 50 { md5 } repeat
+ } if
+
+ % Step 4.
+ 0 pdf_key_length getinterval
+} bind def
+
+% Algorithm 3.7
+/pdf_check_owner_password { % <password> pdf_check_owner_password <filekey> true
+ % <password> pdf_check_owner_password false
+ % Step 1.
+ pdf_owner_key
+
+ % Step 2.
+ Trailer /Encrypt oget dup /O oget 2 index arc4decode
+ % <encryption-key> <encrypt-dict> <decrypted-O>
+
+ % Step 3.
+ exch /R oget 3 eq {
+ 1 1 19 {
+ 2 index pdf_xorbytes arc4decode
+ } for
+ } if
+ exch pop
+ % <result-of-step-3>
+
+ pdf_check_user_password
+} bind def
+
+% Process the encryption information in the Trailer.
+/pdf_process_Encrypt {
+ Trailer /Encrypt oget
+ /Filter oget /Standard eq not {
+ (****This file uses an unknown security handler.\n) print flush
+ /pdf_process_Encrypt cvx /undefined signalerror
+ } if
+ () pdf_check_user_password
+ {
+ /FileKey exch def
+ } {
+ /PDFPassword where {
+ pop PDFPassword pdf_check_user_password
+ {
+ /FileKey exch def
+ } {
+ PDFPassword pdf_check_owner_password
+ {
+ /FileKey exch def
+ } {
+ (****Password did not work.\n) print flush
+ /pdf_process_Encrypt cvx /invalidfileaccess signalerror
+ } ifelse
+ } ifelse
+ } {
+ (****This file requires a password for access.\n) print flush
+ /pdf_process_Encrypt cvx /invalidfileaccess signalerror
+ } ifelse
+ } ifelse
+
+% Trailer /Encrypt oget /P oget 4 and 0 eq #? and
+% { (****This owner of this file has requested you do not print it.\n)
+% print flush
+% /pdf_process_Encrypt cvx /invalidfileaccess signalerror
+% }
+% if
+} bind def
+
+% Calculate the key used to decrypt an object (to pass to .decpdfrun or
+% put into a stream dictionary).
+/computeobjkey % <object#> <generation#> computeobjkey <keystring>
+{
+ exch
+ FileKey length 5 add string
+ dup 0 FileKey putinterval
+ exch
+ % stack: gen# string obj#
+ 2 copy 255 and FileKey length exch put
+ 2 copy -8 bitshift 255 and FileKey length 1 add exch put
+ 2 copy -16 bitshift 255 and FileKey length 2 add exch put
+ pop exch
+ 2 copy 255 and FileKey length 3 add exch put
+ 2 copy -8 bitshift 255 and FileKey length 4 add exch put
+ pop md5 0 FileKey length 5 add 2 index length .min getinterval
+} bind def
+
+% As .pdfrun, but decrypt strings with key <key>.
+/.decpdfrun % <file> <keystring> <opdict> .decpdfrun -
+ { % Construct a procedure with the file, opdict and key bound into it.
+ 2 index cvlit mark mark 5 2 roll
+ { .pdftoken not { (%%EOF) cvn cvx } if
+ dup xcheck
+ { DEBUG { dup == flush } if
+ 3 -1 roll pop
+ 2 copy .knownget
+ { exch pop exch pop exec
+ }
+ { exch pop
+ dup /true eq
+ { pop //true
+ }
+ { dup /false eq
+ { pop //false
+ }
+ { dup /null eq
+ { pop //null
+ }
+ { (%stderr) (w) file
+ dup (****************Unknown operator: ) writestring
+ dup 3 -1 roll .writecvs dup (\n) writestring flushfile
+ }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ }
+ { exch pop DEBUG { dup ==only ( ) print flush } if
+ dup type /stringtype eq
+ { 1 index arc4decode
+ DEBUG { (%Decrypted: ) print dup == flush } if
+ }
+ if
+ exch pop
+ }
+ ifelse
+ }
+ aload pop .packtomark cvx
+ /loop cvx 2 packedarray cvx
+ { stopped /PDFsource } aload pop
+ PDFsource
+ { store { stop } if } aload pop .packtomark cvx
+ /PDFsource 3 -1 roll store exec
+ } bind def
+
+% Run the code to resolve an object reference.
+/pdf_run_resolve
+ { /FileKey where
+ { pop
+ 2 copy computeobjkey dup 4 1 roll
+ PDFfile exch resolveopdict .decpdfrun
+ dup dup dup 5 2 roll
+ % stack: object object key object object
+ xcheck exch type /dicttype eq and
+ { /StreamKey exch put }
+ { pop pop }
+ ifelse
+ }
+ { PDFfile resolveopdict .pdfrun }
+ ifelse
+ } bind def
+
+% Prefix a decryption filter to a stream if needed.
+% Stack: readdata? dict parms file/string filternames
+% (both before and after).
+/pdf_decrypt_stream
+ { 3 index /StreamKey known
+ {
+ exch
+ % Stack: readdata? dict parms filternames file/string
+ 3 index /Length oget
+ dup 0 eq {
+ % Handle Length=0 case specially to avoid SubFileDecode semantics
+ pop pop ()
+ } {
+ () /SubFileDecode filter
+ } ifelse
+ 3 index /StreamKey get arc4decodefilter
+ exch
+ } if
+ } bind def
+
+end % pdfdict
+.setglobal
diff --git a/Master/xemtex/gslib/pdfopt b/Master/xemtex/gslib/pdfopt
new file mode 100644
index 00000000000..0c2413bd7ef
--- /dev/null
+++ b/Master/xemtex/gslib/pdfopt
@@ -0,0 +1,20 @@
+#!/bin/sh
+# $Id: pdfopt,v 1.4 2001/07/23 06:57:27 lpd Exp $
+# Convert PDF to "optimized" form.
+
+OPTIONS="-dSAFER -dDELAYSAFER"
+while true
+do
+ case "$1" in
+ -*) OPTIONS="$OPTIONS $1" ;;
+ *) break ;;
+ esac
+ shift
+done
+
+if [ $# -ne 2 ]; then
+ echo "Usage: `basename $0` input.pdf output.pdf" 1>&2
+ exit 1
+fi
+
+exec gs -q -dNODISPLAY $OPTIONS -- pdfopt.ps "$1" "$2"
diff --git a/Master/xemtex/gslib/pdfopt.bat b/Master/xemtex/gslib/pdfopt.bat
new file mode 100644
index 00000000000..18d86e404e3
--- /dev/null
+++ b/Master/xemtex/gslib/pdfopt.bat
@@ -0,0 +1,22 @@
+@echo off
+@rem $Id: pdfopt.bat,v 1.4 2001/07/23 06:57:27 lpd Exp $
+@rem Convert PDF to "optimized" form.
+
+if %1/==/ goto usage
+if %2/==/ goto usage
+call gssetgs.bat
+echo -q -dNODISPLAY -dSAFER -dDELAYSAFER >_.at
+:cp
+if %3/==/ goto doit
+echo %1 >>_.at
+shift
+goto cp
+
+:doit
+%GSC% -q @_.at -- pdfopt.ps %1 %2
+goto end
+
+:usage
+echo "Usage: pdfopt input.pdf output.pdf"
+
+:end
diff --git a/Master/xemtex/gslib/pdfopt.ps b/Master/xemtex/gslib/pdfopt.ps
new file mode 100644
index 00000000000..c037b126556
--- /dev/null
+++ b/Master/xemtex/gslib/pdfopt.ps
@@ -0,0 +1,1126 @@
+% Copyright (C) 2000, 2001 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: pdfopt.ps,v 1.10.2.2.2.1 2003/04/12 14:02:39 giles Exp $
+% PDF linearizer ("optimizer").
+
+.currentglobal true .setglobal
+/pdfoptdict 200 dict def
+pdfoptdict begin
+
+% This linearizer is designed for simplicity, not for performance.
+% See the main program (the last procedure in the file) for comments
+% describing the main processing sequence.
+
+% ---------------- Utilities ---------------- %
+
+% ------ Data structures ------ %
+
+% Distinguish dictionaries, arrays, and everything else.
+/ifdaelse { % <obj> <dictproc> <arrayproc> <otherproc> ifdaelse -
+ 3 index type dup /dicttype eq {
+ pop pop pop
+ } {
+ dup /arraytype ne exch /packedarraytype ne and {
+ exch
+ } if pop exch pop
+ } ifelse exec
+} bind def
+
+% Implement dynamically growable arrays using a dictionary.
+/darray { % <size> darray <darray>
+ dict
+} bind def
+/dadd { % <darray> <value> dadd -
+ 1 index length exch put
+} bind def
+/daforall { % <darray> <proc> daforall -
+ /exch cvx /get cvx 3 -1 roll /exec cvx 5 packedarray cvx
+ 0 1 2 index 0 get length 1 sub 4 -1 roll for
+} bind def
+/dacontents { % <darray> dacontents <array>
+ [ exch { } daforall ]
+} bind def
+/dacontstring { % <darray> dacontstring <string>
+ 0 1 index { exch pop length add } forall string
+ dup /NullEncode filter
+ % Stack: darray str filter
+ 3 -1 roll { 1 index exch writestring } daforall
+ closefile
+} bind def
+
+% Force an object, mapping it if it is a reference.
+/omforcenew { % <obj> omforce <obj'> <notseen>
+ dup oforce 2 copy eq { pop true } { exch 0 get omapnew exch pop } ifelse
+} bind def
+/omforce { % <obj> omforce <obj'>
+ omforcenew pop
+} bind def
+/omget { % <dict|array> <key> omget <obj>
+ get omforce
+} bind def
+% Visit an entire tree.
+/omvisit { % <obj> omvisit -
+ omforcenew {
+ { { omvisit omvisit } forall }
+ { { omvisit } forall }
+ { pop }
+ ifdaelse
+ } {
+ pop
+ } ifelse
+} bind def
+% Visit a tree, stopping at references to Page objects.
+% (This is only needed for the OpenAction in the Catalog.)
+/omvisitnopage { % <obj> omvisitnopage -
+ dup oforce dup type /dicttype eq {
+ /Type .knownget { /Page eq } { false } ifelse
+ } {
+ pop false
+ } ifelse {
+ pop % Page reference
+ } {
+ omforcenew {
+ { { omvisitnopage omvisitnopage } forall }
+ { { omvisitnopage } forall }
+ { pop }
+ ifdaelse
+ } {
+ pop
+ } ifelse
+ } ifelse
+} bind def
+
+% Collect the list of currently mapped object numbers, in order.
+/omapped { % - omapped <obj#s>
+ RMap length array RMap {
+ 2 index 3 1 roll 1 sub exch put
+ } forall
+} bind def
+
+% Collect the list of object numbers passed to omap by a procedure.
+/visited { % <proc> visited <obj#s>
+ false currentomap 2 .execn
+ omapped exch setomap
+} bind def
+
+% ------ Output ------ %
+
+% Provide a framework for closure-based streams.
+.currentglobal false .setglobal
+userdict /clostreams 20 dict put % stream -> [data endproc]
+.setglobal
+% Create a closure-based stream.
+/clostream { % <data> <proc> <endproc> clostream <stream>
+ 2 index 3 -1 roll /exec load 3 packedarray cvx
+ /NullEncode filter
+ % Stack: data endproc stream
+ clostreams 1 index 5 -2 roll 2 array astore put
+} bind def
+% Close a closure-based stream.
+/closend { % <stream> closend <result>
+ dup closefile clostreams exch
+ 2 copy get 3 1 roll undef aload pop exec
+} bind def
+
+% Implement in-memory output streams.
+/msproc { % <data> <more> <accum> msproc <scratch>
+ 3 -1 roll dadd { 100 string } { () } ifelse
+} bind def
+/mstream { % - mstream <mstream>
+ 10 darray {msproc} {dacontstring} clostream
+} bind def
+/mcontents { % <mstream> mcontents <string>
+ closend
+} bind def
+
+% Implement a stream that only keeps track of its position.
+% (All streams should do this, but the PLRM doesn't require it.)
+/posbuf 100 string def
+/posproc { % <data> <more> <accum> posproc <scratch>
+ 0 2 copy get 5 -1 roll length add put
+ pop //posbuf
+} bind def
+/postream { % - postream <postream>
+ [0] {posproc} {0 get} clostream
+} bind def
+/poslength { % <postream> poslength <pos>
+ closend
+} bind def
+
+% Implement streams with variable-bit-width data.
+% Note that these are dictionary objects, not stream objects.
+/bitstream { % <stream> bitstream <bstream>
+ 4 dict begin /S exch def /N 8 def /B 0 def
+ currentdict end
+} bind def
+/bitwrite { % <bstream> <value> <width> bitwrite -
+ PDEBUG { ( ) print 1 index =only (:) print dup = } if
+ 3 -1 roll begin
+ N exch sub dup 0 ge {
+ /N exch def N bitshift B add
+ } {
+ 2 copy bitshift B add S exch write
+ % Stack: value -left
+ { 8 add dup 0 ge { exit } if
+ 2 copy bitshift 255 and S exch write
+ } loop
+ /N 1 index def bitshift 255 and
+ } ifelse /B exch def
+ end
+} bind def
+/bitflush { % <bstream> bitflush -
+ begin N 8 ne { S B write /B 0 def /N 8 def } if end
+} bind def
+
+% Capture OFile output on the temporary file, in memory, or just as a length.
+/totemp { % <proc> totemp <start> <end>
+ TFile fileposition OFile
+ /OFile TFile def 3 .execn
+ /OFile exch def
+ TFile fileposition
+} bind def
+/tomemory { % <proc> tomemory <string>
+ OFile /OFile mstream def 2 .execn
+ OFile mcontents exch /OFile exch def
+} bind def
+/tolength { % <proc> tolength <string>
+ OFile /OFile postream def 2 .execn
+ OFile poslength exch /OFile exch def
+} bind def
+
+% Copy a range of bytes from TFile to OFile.
+/copyrange { % <start> <end> copybytes -
+ TFile 2 index setfileposition
+ exch sub 1024 string exch {
+ % Stack: buf left
+ 2 copy 1 index length .min 0 exch getinterval
+ TFile exch readstring pop OFile exch writestring
+ 1 index length sub dup 0 le { exit } if
+ } loop pop pop
+} bind def
+
+% Pad with blanks to a specified position.
+/padto { % <pos> padto -
+ OFile fileposition sub
+ dup 0 lt {
+ (ERROR: file position incorrect by ) print =
+ /padto cvx /rangecheck signalerror
+ } {
+ { ( ) ows } repeat
+ } ifelse
+} bind def
+
+% ---------------- Read objects into memory ---------------- %
+
+/touch { % <object> touch -
+ {
+ { touch touch } forall
+ } {
+ dup xcheck {
+ % Executable array, must be an indirect object.
+ dup 0 get resolved? { pop pop } { oforce touch } ifelse
+ } {
+ { touch } forall
+ } ifelse
+ } {
+ pop
+ } ifdaelse
+} bind def
+
+% ---------------- Replace references with referents ---------------- %
+
+/replaceable? { % <value> replaceable? <bool>
+ dup type /integertype eq exch xcheck not and
+} bind def
+/replacement { % <obj|ref> replacement <obj'>
+ dup oforce dup replaceable? { exch } if pop
+} bind def
+
+/replacerefs { % <object> replacerefs <object>
+ {
+ dup {
+ 2 index 2 index undef
+ exch replacement exch replacement
+ 2 index 3 1 roll put
+ } forall
+ } {
+ 0 1 2 index length 1 sub {
+ 1 index exch 2 copy get replacement put
+ } for
+ } {
+ } ifdaelse
+} bind def
+
+/replaceReferences { % - replaceReferences -
+ Objects { replacerefs pop } lforall
+ % Delete replaced objects.
+ 0 1 Objects llength 1 sub {
+ Objects 1 index lget replaceable? {
+ PDEBUG { (Deleting ) print dup = } if
+ Generations 1 index 0 lput
+ } if pop
+ } for
+} bind def
+
+% ---------------- Create new objects ---------------- %
+
+/createObjects { % [<obj>...] createObjects <firstobj#>
+ Objects llength dup
+ dup 3 index length add growPDFobjects
+ % Stack: objects objn objn
+ 3 1 roll exch {
+ Objects 2 index 3 -1 roll lput
+ Generations 1 index 1 lput
+ 1 add
+ } forall pop
+} bind def
+
+% ---------------- Propagate attributes ---------------- %
+
+/nopropattrs <<
+ % Never propagate these.
+ /Type dup /Kids dup /Count dup /Parent dup
+ % Handle Resources specially.
+ /Resources dup
+>> def
+
+% Merge Resources.
+/mergeres { % <fromdict> <todict> mergeres -
+ % Values in todict take priority over fromdict.
+ 1 index /Resources .knownget {
+ 1 index /Resources .knownget {
+ % Stack: fromdict todict fromres tores
+ exch oforce exch oforce
+ % todict's Resources may be shared, so make a copy.
+ dup length dict .copydict
+ exch {
+ % Stack: fromdict todict tores' fromkey fromvalue
+ 2 index 2 index knownoget {
+ % Stack: fromdict todict tores' fromkey fromvalue tovalue
+ exch oforce exch
+ % ProcSet is an array, other types are dictionaries.
+ dup type /dicttype eq {
+ % Dictionary, not ProcSet.
+ exch dup length 2 index length add dict .copydict .copydict
+ } {
+ % Array or packed array, ProcSet.
+ % Use dictionaries to do the merge.
+ dup length 2 index length add dict begin
+ exch { dup def } forall { dup def } forall
+ mark currentdict end { pop } forall .packtomark
+ } ifelse
+ } if
+ 2 index 3 1 roll put
+ } forall
+ } if /Resources exch put pop
+ } {
+ pop pop
+ } ifelse
+} bind def
+
+% Merge attributes other than Resources.
+/mergeattrs { % <fromdict> <todict> mergeattrs <fromdict> <todict>
+ % Values in todict take priority over fromdict.
+ 1 index {
+ % Stack: fromdict todict fromkey fromvalue
+ //nopropattrs 2 index known {
+ pop pop
+ } {
+ 2 index 2 index known { pop pop } { 2 index 3 1 roll put } ifelse
+ } ifelse
+ } forall
+} bind def
+
+% Propagate attributes to a subtree.
+/proppage { % <attrs> <subtree> proppage -
+ % We should be able to tell when we reach a leaf
+ % by finding a Type unequal to /Pages. Unfortunately,
+ % some files distributed by Adobe lack the Type key
+ % in some of the Pages nodes! Instead, we check for Kids.
+ dup /Kids knownoget {
+ % Accumulate inherited values.
+ 3 1 roll
+ % Stack: kids attrs pagesnode
+ dup length dict .copydict mergeattrs
+ dup 3 1 roll mergeres
+ exch { oforce 1 index exch proppage } forall pop
+ } {
+ % Merge inherited values into the leaf.
+ mergeattrs mergeres
+ } ifelse
+} bind def
+
+% Propagate attributes to all pages.
+/propagateAttributes { % - propagateAttributes -
+ 0 dict Trailer /Root oget /Pages oget proppage
+} bind def
+
+% ---------------- Identify document-level objects ---------------- %
+
+/identifyDocumentObjects { % - identifyDocumentObjects <obj#s>
+ {
+ Trailer /Root omget
+ dup /PageMode .knownget { omvisit } if
+ % Don't allow omvisit to trace references to Page objects.
+ dup /OpenAction .knownget { omvisitnopage } if
+ Trailer /Encrypt .knownget { omvisit } if
+ dup /Threads .knownget {
+ omforce { omforce } forall
+ } if
+ dup /AcroForm .knownget { omvisit } if
+ pop
+ } visited
+} bind def
+
+% ---------------- Identify the objects of each page ---------------- %
+
+/identifyfont { % <fontref> identifyfont -
+ omforce {
+ exch /FontDescriptor eq {
+ omforce dup /Flags .knownget { 32 and 0 ne } { false } ifelse
+ exch {
+ exch dup dup /FontFile eq exch /FontFile2 eq or
+ exch /FontFile3 eq or 2 index and {
+ fontfiles exch dadd
+ } {
+ omvisit
+ } ifelse
+ } forall pop
+ } {
+ omvisit
+ } ifelse
+ } forall
+} bind def
+
+/identifyPageObjects { % <extra> <page#> identifyPageObjects <obj#s>
+ pdffindpageref
+ 4 dict begin
+ /images 10 darray def
+ /fontfiles 10 darray def
+ {
+ omforce
+ % Stack: extra page
+ % Visit any extra objects if applicable.
+ exch omvisit
+ % Visit Annots, if any.
+ % We don't try to defer the drawing information.
+ dup /Annots .knownget { omvisit } if
+ % Visit beads.
+ dup /B .knownget { omvisit } if
+ % Visit resources dictionaries.
+ dup /Resources .knownget {
+ omforce dup {
+ % Visit the first-level Resource dictionaries.
+ omforce pop pop
+ } forall {
+ % Visit the resources themselves.
+ % Skip Image XObjects, and FontFile streams if the
+ % FontDescriptor Flags have bit 6 set.
+ % We don't try to visit the resources in the order in which
+ % the Contents stream(s) reference(s) them.
+ exch dup /XObject eq {
+ pop oforce {
+ dup oforce /Subtype get /Image eq {
+ images exch dadd
+ } {
+ omvisit
+ } ifelse pop
+ } forall
+ } {
+ /Font eq {
+ oforce { identifyfont pop } forall
+ } {
+ oforce omvisit
+ } ifelse
+ } ifelse
+ } forall
+ } if
+ % Visit the Contents stream(s).
+ dup /Contents .knownget { omvisit } if
+ % Visit Image XObjects. We don't try to visit them in
+ % reference order.
+ images { omvisit } daforall
+ % Visit FontFile streams. We don't try to visit them in
+ % reference order.
+ fontfiles { omvisit } daforall
+ pop
+ } visited end
+} bind def
+
+% Identify the objects of the first page.
+/identifyFirstPageObjects { % -identifyFirstPageObjects <obj#s>
+ Trailer /Root oget null
+ 1 index /PageMode knownoget {
+ /UseOutlines eq {
+ 1 index /Outlines knownoget { exch pop } if
+ } if
+ } if exch pop
+ 1 identifyPageObjects
+} bind def
+
+% Identify the non-shared objects of the other pages, and the shared objects.
+/identifyOtherPageObjects { % - identifyOtherPageObjects [<pageobj#s> ...]
+ % <sharedobj#s>
+ 4 dict begin
+ /marks lstring Objects llength lgrowto def
+ % Mark document-level and first page objectsw.
+ [CatalogNs FirstPageNs] {
+ { marks exch 255 lput } forall
+ } forall
+ % Collect objects of other pages and identify sharing.
+ [ 2 1 pdfpagecount { null exch identifyPageObjects } for ]
+ dup {
+ { marks exch 2 copy lget 1 add 254 .min lput } forall
+ } forall
+ [ exch {
+ [ exch {
+ marks 1 index lget 1 ne { pop } if
+ } forall ]
+ } forall ]
+ [ 1 1 marks llength 1 sub {
+ marks 1 index lget dup 1 le exch 255 eq or { pop } if
+ } for ]
+ end
+} bind def
+
+% Identify objects not associated with any page.
+/identifyNonPageObjects { % - identifyNonPageObjects <obj#s>
+ 4 dict begin
+ /marks lstring Objects llength lgrowto def
+ [[[LPDictN PHSN] CatalogNs FirstPageNs SharedNs] OtherPageNs] {
+ { { marks exch 1 lput } forall } forall
+ } forall
+ %****** PUT THESE IN A REASONABLE ORDER ******
+ [ 1 1 Objects llength 1 sub {
+ marks 1 index lget 0 eq {
+ Generations 1 index lget 0 eq { pop } if
+ } {
+ pop
+ } ifelse
+ } for ]
+} bind def
+
+% ---------------- Assign object numbers ---------------- %
+
+% Assign object numbers to all objects that will be copied.
+% Return the first (translated) object number in the First Page xref table.
+/assignObjectNumbers { % - assignObjectNumbers -
+ OtherPageNs { { omap pop } forall } forall
+ SharedNs { omap pop } forall
+ NonPageNs { omap pop } forall
+ % Assign object numbers for the First Page xref table last.
+ LPDictN omap % don't pop, this is the return value
+ CatalogNs { omap pop } forall
+ FirstPageNs { omap pop } forall
+ PHSN omap pop
+} bind def
+
+% ---------------- Create the LPDict ---------------- %
+
+% Create the contents of the LPDict.
+/createLPDict { % <phsstart> <phsend> <firstpageend>
+ % <xref0start> <filelength> createLPDict -
+ LPDict
+ dup /Linearized 1 put
+ dup /L 4 -1 roll put % filelength
+ dup /T 4 -1 roll put % xref0start
+ dup /E 4 -1 roll put % firstpageend
+ dup /H 5 -2 roll 1 index sub 2 array astore put % phsstart, end-start
+ dup /O 1 pdffindpageref 0 get omap put
+ /N pdfpagecount put
+} bind def
+
+% ---------------- Adjust object positions ---------------- %
+
+/adjustObjectPositions { % <boundary> <deltabelow> <deltaabove>
+ % adjustObjectPositions -
+ % Objects fall into 4 categories: LPDict, PHS, Catalog, and others.
+ % We handle the first two as special cases.
+ XRef {
+ % Stack: bdy below above key loc
+ dup 5 index ge { 2 } { 3 } ifelse index add
+ XRef 3 1 roll put
+ } forall pop pop pop
+ XRef LPDictN omap HeaderLength put
+ XRef PHSN omap PHSStart put
+} bind def
+
+% ---------------- Write the output file ---------------- %
+
+% Write objects identified by object number.
+/writeobjn { % <obj#> writeobjn -
+ Generations 1 index lget pdfwriteobj
+} bind def
+/writeobjns { % <obj#s> writeobjns -
+ { writeobjn } forall
+} bind def
+
+% Write a part of the output file.
+/writePart { % <proc> <label> writePart -
+ PDEBUG {
+ dup print ( start=) print
+ OFile { .fileposition } stopped { pop (???) } if =
+ 2 .execn
+ print ( end=) print
+ OFile { .fileposition } stopped { pop (???) } if =
+ } {
+ pop exec
+ } ifelse
+} bind def
+
+% Write the header.
+/writePart1 { % - writePart1 -
+ {
+ pdfwriteheader
+ } (part1) writePart
+} bind def
+
+% Write the linearization parameters dictionary.
+/writePart2 { % - writePart2 -
+ {
+ LPDictN writeobjn
+ } (part2) writePart
+} bind def
+
+% Write the First Page xref table and trailer.
+% Free variables: FirstPageXN.
+/writePart3 { % <xrefstart> writePart3 -
+ {
+ FirstPageXN NObjects 1 add 1 index sub pdfwritexref
+ Trailer dup length 1 add dict copy
+ dup /Size NObjects 1 add put
+ dup /Prev 4 -1 roll put
+ pdfwritetrailer
+ 0 pdfwritestartxref
+ } (part3) writePart
+} bind def
+
+% Write the Catalog and other required document-level objects.
+% Free variables: CatalogNs.
+/writePart4 { % - writePart4 -
+ {
+ CatalogNs writeobjns
+ } (part4) writePart
+} bind def
+
+% Write the Primary Hint Stream.
+/writePart5 { % - writePart5 -
+ {
+ PHSN writeobjn
+ } (part5) writePart
+} bind def
+
+% Write the First Page's objects.
+% Free variables: FirstPageNs.
+/writePart6 { % - writePart6 -
+ {
+ FirstPageNs writeobjns
+ } (part6) writePart
+} bind def
+
+% Write the objects of other pages (Page + non-shared objects).
+% Free variables: OtherPageNs.
+/writePart7 { % - writePart7 <lengths>
+ {
+ [ OtherPageNs {
+ OFile fileposition exch
+ writeobjns OFile fileposition exch sub
+ } forall ]
+ } (part7) writePart
+} bind def
+
+% Write the shared objects of other pages.
+% Free variables: SharedNs.
+/writePart8 { % - writePart8 -
+ {
+ SharedNs writeobjns
+ } (part8) writePart
+} bind def
+
+% Write the other objects not associated with pages.
+% Free variables: NonPageNs.
+/writePart9 { % - writePart9 -
+ {
+ NonPageNs writeobjns
+ } (part9) writePart
+} bind def
+
+% Write the main xref table and trailer.
+% Free variables: FirstPageXN.
+/writePart11xref { % writePart11 -
+ {
+ 0 FirstPageXN pdfwritexref
+ } (part11xref) writePart
+} bind def
+/writePart11rest { % <part3start> writePart11rest -
+ {
+ << /Size FirstPageXN >> pdfwritetrailer
+ pdfwritestartxref
+ } (part11rest) writePart
+} bind def
+
+% ---------------- Write hint tables ---------------- %
+
+/bitsneeded { % <maxvalue> bitsneeded <#bits>
+ 0 exch { dup 0 eq { pop exit } if exch 1 add exch 2 idiv } loop
+} bind def
+
+% Find the start and end of objects in the output.
+/omstart { % <obj#> omstart <pos>
+ PDEBUG { (start\() print dup =only } if
+ omap
+ PDEBUG { (=>) print dup =only } if
+ XRef exch get
+ PDEBUG { (\) = ) print dup = } if
+} bind def
+/omend { % <obj#> omend <pos>
+ % The end of an object is the start of the next object.
+ % The caller must be sure that this object is not the last one
+ % in part 9.
+ PDEBUG { (end\() print dup =only } if
+ omap
+ PDEBUG { (=>) print dup =only } if
+ 1 add
+ % Check that the requested object wasn't the last one in part 6:
+ % the next object in the output file is the first in part 7.
+ PHSN omap 1 index eq { pop 1 } if
+ XRef exch get
+ PDEBUG { (\) = ) print dup = } if
+} bind def
+/omlength { % <obj#> omlength <length>
+ dup omend exch omstart sub
+} bind def
+
+% Find the Contents of a page.
+/contentsobjects { % <pagedict> contentsobjects <firstobj#> <lastobj#>
+ /Contents get
+ dup oforce dup type /dicttype eq {
+ pop dup
+ } {
+ dup 0 get exch dup length 1 sub get
+ } ifelse
+ exch 0 get exch 0 get
+} bind def
+/contentsstart { % <pagedict> contentsstart <pos>
+ contentsobjects pop omstart
+} bind def
+/contentslength { % <pagedict> contentslength <length>
+ contentsobjects omend exch omstart sub
+} bind def
+
+
+/writePageOffsetHints {
+ PDEBUG { /writePageOffsetHints == } if
+ 20 dict begin
+ /bits OFile bitstream def
+ /bwn { bits 3 1 roll bitwrite } def
+
+ % Calculate least length of a page.
+ FirstPageLength OtherPageLengths { .min } forall
+ /minpl exch def
+ % Calculate least contents length.
+ FirstPageNs 0 get Objects exch lget contentslength
+ OtherPageNs { 0 get Objects exch lget contentslength .min } forall
+ /mincl exch def
+
+ % The Adobe documentation says that all versions of Acrobat
+ % require item 8 (mincl) to be zero. Patch this here.
+ /mincl 0 def
+
+ % Calculate bits needed to represent greatest page length.
+ FirstPageLength OtherPageLengths { .max } forall
+ minpl sub bitsneeded /maxplbits exch def
+ % Calculate bits needed to represent the greatest Contents length.
+ FirstPageNs 0 get Objects exch lget contentslength
+ OtherPageNs { 0 get Objects exch lget contentslength .max } forall
+ mincl sub bitsneeded /maxclbits exch def
+
+ % Per Adobe documentation, Acrobat requires that item 5 (maxplbits)
+ % be equal to item 9 (maxclbits). Set both to the max of the two.
+ maxplbits maxclbits .max /maxplbits 1 index def /maxclbits exch def
+
+ % 1: Least number of objects in a page:
+ FirstPageNs length OtherPageNs { length .min } forall
+ /minnop 1 index def 32 bwn
+ % 2: Location of first page's Page object:
+ FirstPageNs 0 get omap XRef exch get 32 bwn
+ % 3: Bits needed to represent greatest # of objects in a page:
+ FirstPageNs length OtherPageNs { length .max } forall
+ minnop sub bitsneeded /maxnopbits 1 index def 16 bwn
+ % 4: Least length of a page:
+ minpl 32 bwn
+ % 5: Bits needed to represent the greatest page length:
+ maxplbits 16 bwn
+ % 6: Least start of Contents offset:
+ 0 % (Acrobat requires that this be 0.)
+ /minsco 1 index def 32 bwn
+ % 7: Bits needed to represent the greatest start of Contents
+ % offset:
+ 0 % (Acrobat ignores this.)
+ /maxscobits 1 index def 16 bwn
+ % 8: Least contents length:
+ mincl 32 bwn
+ % 9: Bits needed to represent the greatest Contents length:
+ maxclbits 16 bwn
+ % 10: Bits needed to represent the greatest number of Shared
+ 0 % Object references (we don't report any):
+ /maxsorbits 1 index def 16 bwn
+ % 11: Bits needed to identify a Shared Object (we don't
+ 0 % report any):
+ /sobits 1 index def 16 bwn
+ % 12: Bits needed to represent numerator of fraction (only
+ 0 % needed for Shared Object references, which we don't report):
+ /numfbits 1 index def 16 bwn
+ % 13: Denominator of fraction (only needed for Shared Object
+ % references, which we don't report):
+ 255 % arbitrary
+ /denf 1 index def 16 bwn
+
+ % Number of objects in pages:
+ FirstPageNs length minnop sub maxnopbits bwn
+ OtherPageNs {
+ length minnop sub maxnopbits bwn
+ } forall
+
+ % Total length of pages in bytes;
+ FirstPageLength minpl sub maxplbits bwn
+ OtherPageLengths {
+ minpl sub maxplbits bwn
+ } forall
+
+ % Number of shared objects referenced from page:
+ % (Currently we don't report this.)
+ OtherPageNs length 1 add { 0 maxsorbits bwn } repeat
+
+ % Since there are no shared object references,
+ % the next two sections are empty.
+
+ % Contents offsets:
+ [FirstPageNs OtherPageNs aload pop] {
+ 0 get Objects exch lget contentsstart minsco sub maxscobits bwn
+ } forall
+
+ % Contents lengths:
+ [FirstPageNs OtherPageNs aload pop] {
+ 0 get Objects exch lget contentslength mincl sub maxclbits bwn
+ } forall
+
+ bits bitflush end
+} bind def
+
+/writeSharedObjectHints {
+ PDEBUG { /writeSharedObjectHints == } if
+ 20 dict begin
+ /bits OFile bitstream def
+ /bwn { bits 3 1 roll bitwrite } def
+
+ % Currently we use the Shared Object hint table only for
+ % the objects in the first page, which are all treated as
+ % "shared" objects.
+
+ % Object number of first object in Shared Objects section
+ % (not currently used):
+ 0 32 bwn
+ % Location of first object in Shared Objects section
+ % (not currently used): If there are no shared objects,
+ % Acrobat sets this to the location of linearization
+ % parameters object (the very first object).
+ { pdfwriteheader } tomemory length 32 bwn
+ % Number of Shared Object entries for first page:
+ FirstPageNs length 32 bwn
+ % Number of Shared Object entries for Shared Objects
+ % section (not currently used):
+ FirstPageNs length 32 bwn
+ % Bits needed to represent the greatest number of objects
+ % in a shared object group (always 0, because all groups
+ % have only 1 object):
+ 0 16 bwn
+ % Least length of a Shared Object Group in bytes:
+ 16#7fffffff FirstPageNs { omlength .min } forall
+ /minsol 1 index def 32 bwn
+ % Bits needed to represent the greatest length of a
+ % Shared Object Group:
+ 0 FirstPageNs { omlength .max } forall
+ minsol sub bitsneeded
+ /maxsolbits 1 index def 16 bwn
+
+ % Lengths of shared object groups:
+ FirstPageNs { omlength minsol sub maxsolbits bwn } forall
+
+ % MD5 flag:
+ 0 1 bwn
+
+ bits bitflush end
+} bind def
+
+% ---------------- Main program ---------------- %
+
+/tmpprefix (/tmp/) def
+
+/pdfOptimize { % <infile> <outfile> pdfOptimize -
+ realtime 3 1 roll
+ exch pdfdict begin pdfopenfile dup begin
+ 40 dict begin
+ /IDict exch def
+ /OFile exch def
+ /starttime exch def
+ /now {
+ QUIET { pop } { print (, t = ) print realtime starttime sub = flush } ifelse
+ } def
+ omapinit
+
+ % Create and open a temporary file.
+
+ null (w) .tempfile /TFile exch def /TFileName exch def
+ .setsafe
+
+ % Read all objects into memory.
+
+ Trailer touch
+ (Read objects) now
+
+ % Replace indirect references to numbers. This is needed
+ % for the Length of streams, and doesn't hurt anything else.
+
+ replaceReferences
+ (Replaced references) now
+
+ % Create the two new objects: the linearization parameter
+ % dictionary, and the Primary Hint Stream.
+
+ /LPDict 10 dict def
+ /PHS 10 dict cvx def % executable = stream
+ [LPDict PHS] createObjects
+ /LPDictN 1 index def 1 add
+ /PHSN exch def
+ PDEBUG { << /LPDictN LPDictN /PHSN PHSN >> === } if
+
+ % Count the number of objects in the output.
+
+ 0 0 1 Objects llength 1 sub {
+ Generations exch lget 0 ne { 1 add } if
+ } for
+ /NObjects exch def
+ QUIET not { NObjects =only ( objects total) = flush } if
+
+ % Propagate inherited attributes down the page tree.
+
+ propagateAttributes
+ (Propagated attributes) now
+
+ % Identify the document-level objects (part 4).
+
+ identifyDocumentObjects /CatalogNs exch def
+ QUIET not { CatalogNs === flush } if
+ (Identified Catalog) now
+
+ % Identify the first page's objects (part 6),
+ % including the Outlines tree if appropriate.
+
+ pdfopencache
+ /FirstPageNs identifyFirstPageObjects def
+ QUIET not { FirstPageNs === flush } if
+ (Identified first page) now
+
+ % Identify shared vs. non-shared objects for remaining pages
+ % (parts 7 and 8).
+
+ identifyOtherPageObjects
+ /SharedNs exch def
+ /OtherPageNs exch def
+ QUIET not { OtherPageNs === flush SharedNs === flush } if
+ (Identified other pages) now
+
+ % Identify objects not associated with any page (part 9).
+
+ /NonPageNs identifyNonPageObjects def
+ QUIET not { NonPageNs === flush } if
+ (Identified non-pages) now
+
+ % Assign final object numbers to all the objects.
+ % (The omap is currently empty.)
+
+ /FirstPageXN assignObjectNumbers def
+ (Assigned objects #s) now
+
+ % Write the document-level objects (part 4).
+
+ { writePart4 } totemp
+ /CatalogTempEnd exch def /CatalogTempStart exch def
+ (Wrote Catalog) now
+
+ % Write the first page's objects (part 6).
+
+ { writePart6 } totemp
+ /FirstPageTempEnd exch def /FirstPageTempStart exch def
+ (Wrote first page) now
+
+ % Write the non-shared objects for other pages (part 7).
+
+ { writePart7 /OtherPageLengths exch def } totemp
+ /OtherPageTempEnd exch def /OtherPageTempStart exch def
+ (Wrote other pages) now
+
+ % Write the shared objects for other pages (part 8).
+
+ { writePart8 } totemp
+ /SharedTempEnd exch def /SharedTempStart exch def
+ (Wrote shared objects) now
+
+ % Write the objects not associated with pages (part 9).
+
+ { writePart9 } totemp
+ /NonPageTempEnd exch def /NonPageTempStart exch def
+
+ % Compute conservative lengths of parts 2,3,5,11 of the output.
+ % It's OK for these to be too large, but not too small.
+
+ % Make dummy XRef entres for LPDict and PHS.
+ XRef LPDictN omap 0 put
+ XRef PHSN omap 0 put
+
+ /HeaderLength { % this is exact
+ writePart1 % part 1
+ } tolength def
+ /CatalogLength % this is exact
+ CatalogTempEnd CatalogTempStart sub def % part 4
+ /FirstPageLength % this is exact
+ FirstPageTempEnd FirstPageTempStart sub def % part 6
+ /OtherObjectsLength % this is exact
+ NonPageTempEnd OtherPageTempStart sub def % parts 7,8,9
+ /ObjectsLength % this is exact
+ CatalogLength FirstPageLength add OtherObjectsLength add def
+ /XrefLength { % part 11
+ % The LPDict must end within the first 1024 bytes,
+ % so the start of the FirstPage xref table can't exceed 1024.
+ writePart11xref 1024 writePart11rest
+ } tolength def
+ /NominalFileLength % Make a generous allowance for parts 2,3,5.
+ HeaderLength ObjectsLength 3 mul add 10000 add 99999 .max def
+ /FirstPageXrefLength { % part 3
+ NominalFileLength writePart3
+ } tolength def
+ /LPDictLength { % part 2
+ NominalFileLength dup 2 mul 2 copy add 1 index dup createLPDict writePart2
+ } tolength def
+
+ % Compute a few additional values from the above.
+
+ /XrefBeginLength {
+ (xref\n0 ) ows
+ OFile FirstPageXN write=
+ } tolength def
+ HeaderLength LPDictLength add
+ /FirstPageXrefStart 1 index def
+ FirstPageXrefLength add
+ /CatalogStart 1 index def
+ CatalogLength add % phsstart
+ /PHSStart exch def
+
+ % Adjust the object positions ignoring PHS.
+ % (Writing the PHS needs these.)
+
+ 0 0 CatalogStart CatalogTempStart sub adjustObjectPositions
+ % Make a temporary XRef entry for the PHS, for the benefit of omend.
+ XRef PHSN omap CatalogStart put
+ (Adjusted positions) now
+
+ % Construct the hint tables (part 5).
+
+ { writePageOffsetHints } totemp
+ pop /PHSTempStart exch def
+ { writeSharedObjectHints } totemp
+ exch PHSTempStart sub PHS /S 3 -1 roll put
+ PHSTempStart sub /PHSTempLength exch def
+ (Wrote hints) now
+
+ % Prepare to read TFile.
+ TFile closefile
+ /TFile TFileName (r) file def
+
+ PHS
+ dup /File TFile put
+ dup /FilePosition PHSTempStart put
+ dup /Length PHSTempLength put
+ pop
+ /PHSLength { writePart5 } tolength def
+
+ % Construct the linearization parameter dictionary (part 2).
+
+ PHSStart
+ dup PHSLength add % phsend
+ /FirstPageStart 1 index def
+ dup FirstPageLength add % firstpageend
+ dup OtherObjectsLength add
+ /XrefStart 1 index def
+ XrefBeginLength add % xref0start
+ dup XrefBeginLength sub XrefLength add % fileend
+ % Because of a bug, Acrobat Reader doesn't recognize any file
+ % shorter than 1K as linearized. Patch this here.
+ 1024 .max
+ /FileLength 1 index def
+ createLPDict
+
+ % Adjust the object positions again, taking the PHS into account.
+
+ PHSStart 0 PHSLength adjustObjectPositions
+ (Readjusted positions) now
+
+ % Finally, write the output file.
+
+ writePart1
+ writePart2
+ FirstPageXrefStart padto
+ XrefStart writePart3
+ CatalogStart padto
+ CatalogTempStart CatalogTempEnd copyrange % part 4
+ writePart5
+ FirstPageStart padto
+ FirstPageTempStart NonPageTempEnd copyrange % parts 6,7,8,9
+ % No Overflow Hint Stream (part 10).
+ XrefStart padto
+ writePart11xref
+ { FirstPageXrefStart writePart11rest } tomemory
+ FileLength 1 index length sub padto ows
+ (Wrote output file) now
+
+ % Wrap up.
+
+ TFile closefile TFileName deletefile
+ end % temporary dict
+ end % IDict
+} bind def
+
+end % pdfoptdict
+.setglobal
+
+% Check for command line arguments.
+[ shellarguments {
+ ] dup length 2 eq {
+ % Load the pdfwrite utilities if necessary.
+ /omapinit where { pop } { (pdfwrite.ps) runlibfile } ifelse
+ save exch
+ aload pop exch (r) file exch (w) file
+ 3000000 setvmthreshold
+ pdfoptdict begin pdfOptimize end
+ restore
+ } {
+ (Usage: gs -dNODISPLAY -- pdfopt.ps input.pdf output.pdf) = flush quit
+ } ifelse
+} {
+ pop
+} ifelse
diff --git a/Master/xemtex/gslib/pdfwrite.ps b/Master/xemtex/gslib/pdfwrite.ps
new file mode 100644
index 00000000000..922bfaafd1a
--- /dev/null
+++ b/Master/xemtex/gslib/pdfwrite.ps
@@ -0,0 +1,284 @@
+% Copyright (C) 1999, 2000, 2001 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: pdfwrite.ps,v 1.7.2.1.2.1 2003/04/12 14:02:39 giles Exp $
+% Writer for transmuting PDF files.
+
+% NOTES:
+% We do editing by replacing objects (in the cache) and then doing a
+% simple recursive walk with object renumbering.
+% Free variables:
+% RMap [per input file] (dict): input_obj# => output_obj#
+% PDFfile (file): current input file
+% OFile (file): current output file
+% XRef (dict): output_obj# => output_file_pos
+% ToWrite: 0..N-1 => [obj# gen#]
+
+/.setlanguagelevel where { pop 2 .setlanguagelevel } if
+.currentglobal true .setglobal
+
+/PDEBUG where { pop } { /PDEBUG false def } ifelse
+
+% ================ Object mapping ================ %
+
+% Initialize the object number and location map.
+/omapinit { % - omapinit -
+ /RMap 100 dict def
+ /XRef 100 dict def
+ PDEBUG { (omapinit) = } if
+} def
+
+% Map an object number.
+/omapnew { % <oldobj#> omap <newobj#> <isnew>
+ RMap 1 index .knownget {
+ exch pop false
+ } {
+ PDEBUG { (omap\() print dup =only } if
+ RMap dup length 1 add 2 index exch dup 5 1 roll put pop true
+ PDEBUG { (\) = ) print 1 index = } if
+ } ifelse
+} def
+/omap { % <oldobj#> omap <newobj#>
+ omapnew pop
+} bind def
+
+% Save and restore the object map.
+% Note that currentomap either returns a copy or calls omapinit.
+/currentomap { % <copy> currentomap <omap>
+ {
+ [RMap dup length dict copy XRef dup length dict copy]
+ } {
+ [RMap XRef] omapinit
+ } ifelse
+} bind def
+/setomap { % <omap> setomap -
+ aload pop /XRef exch def /RMap exch def
+ PDEBUG {
+ (setomap: #Xref = ) print XRef length =only
+ (, #RMap = ) print RMap length =
+ } if
+} bind def
+
+% ================ Writing ================ %
+
+% ---------------- Low-level output ---------------- %
+
+% Write a string on the output file.
+/ows { % <string> ows -
+ OFile exch writestring
+} def
+
+% ---------------- Scalars ---------------- %
+
+% Note that the '#' character isn't legal in a name unless it is a prefix
+% for a hex encoded character (for PDF 1.2 and later). The following assumes
+% that the names are already valid PDF 1.2+ names so that we can treat the
+% '#' as a legal character. The next two hex characters are already in the
+% set of valid name characters. PDF 1.1 and earlier allowed spaces in names
+% which probably wouldn't make it past the tokenizer anyway.
+/pdfnamechars
+ (!"#$&'*+,-.0123456789:;=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\\^_`abcdefghijklmnopqrstuvwxyz|~)
+readonly def
+/pdfwritename { % <name> pdfwritename -
+ (/) ows .namestring {
+ ( ) dup 0 4 -1 roll put
+ //pdfnamechars 1 index search {
+ pop pop pop
+ } {
+ pop 0 get 256 add 16 =string cvrs
+ dup 0 (#) 0 get put
+ } ifelse ows
+ } forall
+} def
+
+% ---------------- Composite objects ---------------- %
+
+/pdfwriteprocs mark
+ /resolveR { pdfwriteref }
+ /O { pdfwritenewref }
+.dicttomark readonly def
+/pdfwritearray { % <array> pdfwritearray -
+ dup xcheck {
+ aload pop //pdfwriteprocs exch get exec
+ } {
+ % Because of a bug in Acrobat's parser for linearization parameters,
+ % we have to include some whitespace after the opening [ (!).
+ ([ ) ows { pdfwritevalue (\n) ows } forall (]) ows
+ } ifelse
+} def
+
+/pdfwritedict { % <dict> pdfwritedict -
+ dup xcheck {
+ pdfwritestream
+ } {
+ (<<) ows {
+ exch pdfwritevalue ( ) ows pdfwritevalue (\n) ows
+ } forall (>>) ows
+ } ifelse
+} def
+
+% ---------------- References ---------------- %
+
+/pdfwritenewref { % <newobj#> pdfwritenewref -
+ OFile exch write=only ( 0 R) ows
+} def
+
+/pdfwriteref { % <obj#> <gen#> pdfwriteref -
+ 1 index omapnew {
+ ToWrite dup length 5 -2 roll 2 packedarray put
+ } {
+ exch pop exch pop
+ } ifelse
+ pdfwritenewref
+} def
+
+/pdfcopystring 200 string def
+/pdfwritestream { % <streamdict> pdfwritestream -
+ % Remove File, FilePosition, and StreamKey;
+ % optimize by replacing an indirect Length.
+ dup dup length dict copy
+ % Stack: origdict dict
+ dup /File undef dup /FilePosition undef dup /StreamKey undef
+ dup /Length get dup oforce ne {
+ dup /Length 2 copy oget put
+ } if
+ exch dup /File get dup 3 -1 roll /FilePosition get setfileposition
+ pdfcopystream
+} def
+
+% We put copying the stream contents in separate procedures so that we
+% can replace this function if desired.
+/pdfcopybytes { % <fromfile> <tofile> <length> pdfcopybytes -
+ {
+ dup 0 eq { exit } if
+ //pdfcopystring 0 2 index 2 index length .min getinterval
+ 3 index exch readstring 3 1 roll
+ 3 index 1 index writestring length sub exch not { exit } if
+ } loop pop pop pop
+} def
+/pdfcopystream { % <newstreamdict> <file> pdfcopystream -
+ % (file has been positioned)
+ 1 index pdfwritevalue (stream\n) ows
+ exch /Length get OFile exch pdfcopybytes
+ (endstream) ows
+} def
+
+% ---------------- General values/objects ---------------- %
+
+/pdfwritetypes mark
+ % Scalars
+ /nulltype { pop (null) ows }
+ /integertype { =string cvs ows }
+ /booleantype 1 index
+ /realtype { OFile exch write===only }
+ /stringtype 1 index
+ /nametype { pdfwritename }
+ % Composite/reference objects
+ /arraytype { pdfwritearray }
+ /packedarraytype 1 index
+ /dicttype { pdfwritedict }
+.dicttomark readonly def
+
+/pdfwritevalue { % <obj> pdfwritevalue -
+ PDEBUG { (****Writing: ) print dup === flush } if
+ //pdfwritetypes 1 index type get exec
+} def
+
+% We make pdfwriteobjdef a separate procedure for external use.
+/pdfwriteobjheader { % <newobj#> pdfwriteobjheader -
+ XRef 1 index OFile .fileposition put
+ PDEBUG { (XRef\() print dup =only (\) = ) print XRef 1 index get = } if
+ OFile exch write=only ( 0 obj\n) ows
+} def
+/pdfwriteobjdef { % <newobj#> <value> pdfwriteobjdef -
+ exch pdfwriteobjheader
+ pdfwritevalue (\nendobj\n) ows
+} def
+/pdfwriteobj { % <obj#> <gen#> pdfwriteobj -
+ 1 index exch resolveR exch omap exch pdfwriteobjdef
+} def
+
+% ---------------- File-level entities ---------------- %
+
+% Write a PDF file header.
+% Free variables: OFile, PDFversion.
+/pdfwriteheader { % - pdfwriteheader -
+ (%PDF-) ows OFile PDFversion write=
+ (%\347\363\317\323\n) ows
+} bind def
+
+% Write a cross-reference table and trailer.
+/pdfwritexref { % <firstobj#> <#objs> pdfwritexref -
+ (xref\n) ows
+ OFile 2 index write=only ( ) ows OFile 1 index write=
+ 1 index add 1 sub 1 exch {
+ dup 0 eq {
+ pop (0000000000 65535 f \n) ows
+ } {
+ XRef exch get 1000000000 add =string cvs
+ dup 0 (0) 0 get put
+ ows ( 00000 n \n) ows
+ } ifelse
+ } for
+} bind def
+/pdfwritetrailer { % <trailer> pdfwritetrailer -
+ (trailer\n) ows pdfwritevalue (\n) ows
+} bind def
+/pdfwritestartxref { % <startpos> pdfwritestartxref -
+ (startxref\n) ows OFile exch write=
+ (%%EOF\n) ows
+} bind def
+
+% ================ Top-level control ================ %
+
+/pdfwrite { % <file> <trailer> pdfwrite -
+ 10 dict begin
+ /trailer exch def
+ /OFile exch def
+ /ToWrite 100 dict def
+ omapinit
+
+ % Write the PDF file header.
+
+ pdfwriteheader
+
+ % Write the objects.
+
+ trailer {
+ exch pop dup xcheck { % The only executable objects are references.
+ aload pop pop pdfwriteobj
+ } {
+ pop
+ } ifelse
+ } forall
+ % Walk the object graph.
+ {
+ ToWrite dup length dup 0 eq { pop pop exit } if
+ 1 sub 2 copy get 3 1 roll undef aload pop pdfwriteobj
+ } loop
+
+ % Write the xref table and trailer.
+
+ /xref OFile fileposition def
+ 0 XRef length 1 add pdfwritexref
+ trailer dup length 1 add dict copy
+ dup /Size XRef length 1 add put pdfwritetrailer
+ xref pdfwritestartxref
+
+ end
+} def
+
+.setglobal
diff --git a/Master/xemtex/gslib/pf2afm b/Master/xemtex/gslib/pf2afm
new file mode 100644
index 00000000000..6e36d3e1f61
--- /dev/null
+++ b/Master/xemtex/gslib/pf2afm
@@ -0,0 +1,8 @@
+#!/bin/sh
+# $Id: pf2afm,v 1.2 2001/02/03 21:31:40 alexcher Exp $
+# Make an AFM file from PFB / PFA and (optionally) PFM files. Usage:
+# pf2afm fontfilename
+# Output goes to fontfilename.afm, which must not already exist.
+# See pf2afm.ps for more details.
+
+exec gs -q -dNODISPLAY -dSAFER -dDELAYSAFER -- pf2afm.ps "$@"
diff --git a/Master/xemtex/gslib/pf2afm.bat b/Master/xemtex/gslib/pf2afm.bat
new file mode 100644
index 00000000000..ec03a6ccd20
--- /dev/null
+++ b/Master/xemtex/gslib/pf2afm.bat
@@ -0,0 +1,17 @@
+@echo off
+@rem $Id: pf2afm.bat,v 1.3 2001/06/22 16:09:22 lpd Exp $
+@rem Make an AFM file from PFB / PFA and (optionally) PFM files.
+
+if %1/==/ goto usage
+if not %2/==/ goto usage
+call gssetgs.bat
+
+%GSC% -q -dNODISPLAY -dSAFER -dDELAYSAFER -- pf2afm.ps %1
+goto end
+
+:usage
+echo "Usage: pf2afm disk_font_name"
+
+:end
+
+
diff --git a/Master/xemtex/gslib/pf2afm.cmd b/Master/xemtex/gslib/pf2afm.cmd
new file mode 100755
index 00000000000..2165e988d96
--- /dev/null
+++ b/Master/xemtex/gslib/pf2afm.cmd
@@ -0,0 +1,7 @@
+/* $Id: pf2afm.cmd,v 1.2 2001/02/03 21:31:40 alexcher Exp $ */
+/*
+ * This file is maintained by a user: if you have any questions about it,
+ * please contact Mark Hale (mark.hale@physics.org).
+ */
+
+@gsos2 -q -dNODISPLAY -dSAFER -dDELAYSAFER -- pf2afm.ps %1
diff --git a/Master/xemtex/gslib/pf2afm.ps b/Master/xemtex/gslib/pf2afm.ps
new file mode 100644
index 00000000000..3bc9013f8f7
--- /dev/null
+++ b/Master/xemtex/gslib/pf2afm.ps
@@ -0,0 +1,497 @@
+%!
+% 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
+
+% $Id: pf2afm.ps,v 1.3.2.1 2002/04/10 09:22:58 giles Exp $
+
+% 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
+
+% charnumber print-charname -
+% prints the name of the encoded character
+/print-charname {
+ PFBencoding 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) 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) 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
+ skipb-p % PFM: CharSet
+ 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) 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 =string cvs 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?) 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
+
+% pf[ba]filename makeafm -
+
+/makeafm {
+ count 0 eq {(Missing font file name) printquit} if
+ /ifn edef
+ ifn length 0 eq {(Empty font file name) 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
+ ifn (.pfb) search {
+ 3 -1 roll length 0 eq {% file name extension = ".pfb"
+ ifn dup length string copy /pfbn edef
+ /ifn edef
+ }{pop} ifelse
+ } if pop
+ ifn (.pfa) search {
+ 3 -1 roll length 0 eq {% file name extension = ".pfa"
+ ifn dup length string copy /pfan edef
+ /ifn edef
+ }{pop} ifelse
+ } if pop
+ 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) printquit
+ } if
+
+ /ofn ifn (.afm) concatstrings def
+ ofn status {
+ pop pop pop pop (Resulting file exists) printquit
+ } if
+ /ofi ofn (w) file def
+ //systemdict /.setsafe known { .setsafe } if
+
+ /pfmn ifn (.pfm) concatstrings def
+ pfmn status {
+ pop pop pop pop
+ }{
+ () pfmn {
+ (/) search {
+ 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) print
+ } ifelse
+ } ifelse
+
+ 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)
+ (Usage: gs [-dNODISPLAY] -- pf2afm.ps disk_font_name\n) printquit
+ } ifelse
+ }
+ {pop}
+ifelse
diff --git a/Master/xemtex/gslib/pfbtopfa b/Master/xemtex/gslib/pfbtopfa
new file mode 100644
index 00000000000..1e914fb53fd
--- /dev/null
+++ b/Master/xemtex/gslib/pfbtopfa
@@ -0,0 +1,16 @@
+#!/bin/sh
+# $Id: pfbtopfa,v 1.3 2001/06/22 16:09:22 lpd Exp $
+# Convert .pfb fonts to .pfa format
+
+if [ $# -eq 2 ]
+then
+ outfile=$2
+elif [ $# -eq 1 ]
+then
+ outfile=`basename "$1" \.pfb`.pfa
+else
+ echo "Usage: `basename $0` input.pfb [output.pfa]" 1>&2
+ exit 1
+fi
+
+exec gs -q -dNODISPLAY -- pfbtopfa.ps "$1" "$outfile"
diff --git a/Master/xemtex/gslib/pfbtopfa.ps b/Master/xemtex/gslib/pfbtopfa.ps
new file mode 100644
index 00000000000..886d9eef471
--- /dev/null
+++ b/Master/xemtex/gslib/pfbtopfa.ps
@@ -0,0 +1,35 @@
+% Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: pfbtopfa.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% pfbtopfa.ps
+% Convert a .pfb font to .pfa format.
+
+[ shellarguments {
+ counttomark 2 eq {
+ /pfa exch def /pfb exch def pop
+ /in1 pfb (r) file def
+ /in in1 true /PFBDecode filter def
+ /out pfa (w) file def
+ { in read not { exit } if out exch write } loop
+ out closefile in closefile in1 closefile
+ quit
+ } {
+ cleartomark (Usage: pfbtopfa input.pfb output.pfa) = flush
+ } ifelse
+} {
+ pop
+} ifelse
diff --git a/Master/xemtex/gslib/pftogsf.bat b/Master/xemtex/gslib/pftogsf.bat
new file mode 100644
index 00000000000..3808852cacd
--- /dev/null
+++ b/Master/xemtex/gslib/pftogsf.bat
@@ -0,0 +1,20 @@
+@echo off
+@rem $Id: pftogsf.bat,v 1.2 2000/05/20 20:53:05 lpd Exp $
+
+rem ******************************
+rem * Convert .pf? files to .gsf *
+rem ******************************
+
+call gssetgs.bat
+echo (wrfont.ps) run (unprot.ps) run unprot >_temp_.ps
+echo systemdict /definefont. /definefont load put >>_temp_.ps
+echo systemdict /definefont { userdict /LFN 3 index put definefont. } bind put >>_temp_.ps
+echo ARGUMENTS 0 get (r) file .loadfont LFN findfont setfont prunefont reprot >>_temp_.ps
+echo ARGUMENTS 1 get (w) file dup writefont closefile quit >>_temp_.ps
+rem for %%f in (cyr cyri) do %GSC% -q -dNODISPLAY -dWRITESYSTEMDICT -- _temp_.ps fonts\pfa\%%f.pfa fonts\%%f.gsf
+rem for %%f in (ncrr ncrb ncrri ncrbi) do %GSC% -q -dNODISPLAY -dWRITESYSTEMDICT -- _temp_.ps fonts\pfa\%%f.pfa fonts\%%f.gsf
+rem for %%f in (bchr bchb bchri bchbi) do %GSC% -q -dNODISPLAY -dWRITESYSTEMDICT -- _temp_.ps fonts\pfa\%%f.pfa fonts\%%f.gsf
+rem for %%f in (putr putb putri putbi) do %GSC% -q -dNODISPLAY -dWRITESYSTEMDICT -- _temp_.ps fonts\pfa\%%f.pfa fonts\%%f.gsf
+rem for %%f in (n019003l n021003l u003043t u004006t) do %GSC% -q -dNODISPLAY -dWRITESYSTEMDICT -- _temp_.ps fonts\%%f.gsf %%f.gsf
+for %%f in (hig_____ kak_____) do %GSC% -q -dNODISPLAY -dWRITESYSTEMDICT -- _temp_.ps fonts\pfb\%%f.pfb %%f.gsf
+rem %GSC% -q -dNODISPLAY -dWRITESYSTEMDICT -- _temp_.ps allfonts\baxter.pfb baxter.gsf
diff --git a/Master/xemtex/gslib/pj-gs.sh b/Master/xemtex/gslib/pj-gs.sh
new file mode 100644
index 00000000000..7f8eaa78c85
--- /dev/null
+++ b/Master/xemtex/gslib/pj-gs.sh
@@ -0,0 +1,289 @@
+#!/bin/sh
+# $Id: pj-gs.sh,v 1.1 2000/03/09 08:40:40 lpd Exp $
+
+# PaintJet driver script for Ghostscript,
+# created by Philippe-Andre Prindeville <philipp@res.enst.fr>
+
+# PCL level 1 interface
+#
+#=======================================================================#
+# OPTIONS RECOGNIZED: ( all may be preceded with a "-" ) #
+# NOTE: Options marked with a "*" before their descriptions #
+# are provided for backward compatibility with the #
+# former hp2225a, hp2227a and hp3630a printer models - #
+# these models have become links to this model. Consult #
+# your printer reference manual to determine which #
+# options are valid for your particular printer. #
+# #
+# Horizontal Pitch Selection: #
+# c compressed print mode #
+# e * expanded print pitch #
+# 10 * 10 cpi (Pica print pitch) #
+# (expanded compressed on thinkjet and quietjet)#
+# 12 * 12 cpi (Elite print pitch) #
+# #
+# Print Quality Selection #
+# q | lq * near letter quality #
+# #
+# Font Selection #
+# b | bold * set font stroke weight to bold #
+# #
+# Output filtering: (Default Cooked) #
+# r | raw raw mode for plotting mode etc. #
+# #
+# Other: #
+# nb do not output banner page (to save paper) #
+# #
+# NOTE: * = NOT OFFICIAL PCL LEVEL 1 OPTIONS, USE OF #
+# THESE OPTIONS MAY OR MAY NOT PRODUCE #
+# DESIRED RESULTS. #
+#=======================================================================#
+
+PATH="/bin:/usr/bin:/usr/lib:/usr/local/bin"
+export PATH
+
+# set up redirection of stderr
+log=/usr/spool/lp/log
+exec 2>>$log
+
+# sec_class=`getconf SECURITY_CLASS`
+sec_class=
+if [ $? -ne 0 ]
+then
+ echo "getconf SECURITY_CLASS failed"
+fi
+
+# Save the arguments to the model
+printer=`basename $0`
+
+if [ "$sec_class" = "2" ] # B1 Trusted System
+then
+ reqid=$1
+ user=$2
+ dev=$3
+ title=$4
+ copies=$5
+ options=$6
+else
+ reqid=$1
+ user=$2
+ title=$3
+ copies=$4
+ options=$5
+fi
+
+
+# Definitions of functions used within this script
+do_banner()
+{
+ # Print the standard header
+ x="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ echo "$x\n$x\n$x\n$x\n"
+ banner `echo $user`
+ echo "\n"
+ user=`pwget -n $user | line | cut -d: -f5`
+ if [ -n "$user" ]
+ then
+ echo "User: $user\n"
+ else
+ echo "\n"
+ fi
+ echo "Request id: $reqid Printer: `basename $0`\n"
+ date
+ echo "\n"
+ if [ -n "$title" ]
+ then
+ banner "$title"
+ fi
+ echo "\014\r\c"
+}
+
+# Set up interface
+if [ -t 1 ]
+then
+ stty 9600 opost onlcr -parenb cs8 ixon -istrip clocal tab3 <&1 2>/dev/null
+else
+ slp -n -k 2>/dev/null
+fi
+
+# Handle disable and cancel traps.
+trap "echo 'Terminated: $reqid' >> $log; trap 15; kill -15 0; exit 0 " 15
+
+# Set up printer default modes
+echo "\033&k0S\c" # reset pitches
+echo "\033(s0B\033)s0B\c" # reset stroke weights
+echo "\033&d@\c" # disable auto-underline
+echo "\033&l6D\c" # reset to 6 lpi
+echo "\033(s0Q\c" # reset print quality
+echo "\033&v0S\c" # reset color
+echo "\033&k2G\c" # Set line termination mode
+
+
+# Determine which options have been invoked
+pitch="def"
+weight="def"
+quality="def"
+# outputmode="cooked"
+outputmode="raw"
+# banner="yes"
+banner=
+
+for i in $options
+do
+ case "$i" in
+ -c | c) # compressed print
+ pitch="c";;
+
+ -e | e) # expanded print
+ pitch="e";;
+
+ -10 | 10) # pitch set to 10 cpi
+ pitch="10";;
+
+ -12 | 12) # pitch set to 12 cpi
+ pitch="12";;
+
+ -q | q | -lq | lq) # near letter quality
+ quality=1;;
+
+ -b | b | -bold | bold) # set font weight to bold
+ weight=1;;
+
+ r | raw) # raw mode for binary output to printer
+ outputmode="raw";;
+
+ -nb | nb) # do not output banner page
+ banner="";;
+
+ esac
+done
+
+shift; shift; shift; shift; shift
+
+if [ "$sec_class" = "2" ] # B1 Trusted System
+then
+ shift
+ files="$*"
+ Nofilter= Nolabel=
+ set -- `getopt fl $options`
+ if [ $? != 0 ]
+ then
+ exit 2
+ fi
+
+ for opt in $*
+ do
+ shift
+ case $opt in
+ -f) Nofilter=$opt ;;
+ -l) Nolabel=$opt ;;
+ --) break ;;
+ esac
+ done
+
+ # Print the sensitivity label of the process
+ echo "$x\n$x\n"
+ /usr/lib/lpbanner -j $reqid -t "$title" -u $user -p PCL1 -n $printer -d $dev $files
+ echo "\n$x\n$x"
+
+else
+ # Assume that the rest of the arguments are files
+ files="$*"
+ # print the banner if nb option not specified
+ if [ -n "$banner" ]
+ then
+ do_banner
+ fi
+fi
+
+# Print the spooled files
+i=1
+while [ $i -le $copies ]
+do
+ for file in $files
+ do
+
+ # If raw mode, turn off output processing,
+ # set for no tab expansion
+ # If cooked mode, uncomment the cooked case if it is
+ # desired not to print on the page perforations
+ case "$outputmode" in
+ raw) if [ -t 1 ]
+ then
+ stty raw 9600 -opost -parenb cs8 ixon -istrip clocal tab0 <&1 2>/dev/null
+ else
+ slp -r 2>/dev/null
+ fi
+ echo "\033&k0G";; # Reset line termination mode
+ # cooked) echo "\033&l1L\r\c";;
+ esac
+
+ case "$pitch" in
+ def);;
+ c) echo "\033&k2S\r\c";;
+ e) echo "\033&k1S\r\c";;
+ 10) echo "\033&k3S\r\c";;
+ 12) echo "\033&k0S\r\c"
+ echo "\033&k4S\r\c";;
+ esac
+
+ case "$quality" in
+ def);;
+ *) echo "\033(s${quality}Q\r\c";;
+ esac
+
+ case "$weight" in
+ def) echo "\033(s0B\033)s0B\r\c";;
+ *) echo "\033(s${weight}B\r\c";;
+ esac
+
+ if [ "$sec_class" = "2" ] # B1 Trusted System
+ then
+ /usr/lib/lprcat $Nofilter $Nolabel $file PCL1 $user $dev
+ else
+ type=`file $file | sed 's/^[^:]*..//'`
+ case "$type" in
+ postscript*)
+#
+# We could do the following, but this would leave gs with a rather large
+# image in memory for (possibly) several minutes. Better to use and
+# intermediate file, since cat is "lightweight"...
+#
+# gs -q -sDEVICE=paintjet -r180 -sOutputFile=- -dDISKFONTS -dNOPAUSE - < $file 2>/tmp/sh$$
+
+ gs -q -sDEVICE=paintjet -r180 -sOutputFile=/tmp/pj$$ -dDISKFONTS -dNOPAUSE - < $file 1>2
+ cat /tmp/pj$$
+ rm /tmp/pj$$
+ needff=
+ ;;
+ *) cat "$file" 2>/tmp/sh$$
+ needff=1
+ ;;
+ esac
+
+ if [ -s /tmp/sh$$ ]
+ then
+# cat /tmp/sh$$ # output any errors
+ cat /tmp/sh$$ 1>2 # output any errors
+ fi
+ rm -f /tmp/sh$$
+ if [ $needff ]; then echo "\014\r\c"; fi
+ fi
+
+ echo "\033&k0S\r\c" # reset pitches
+ echo "\033(s0B\033)s0B\r\c" # reset stroke weights
+ echo "\033&d@\r\c" # disable auto-underline
+ echo "\033&l6D\r\c" # reset to 6 lpi
+ echo "\033(s0Q\c" # reset print quality
+ echo "\033&v0S\c" # reset color
+ done
+ i=`expr $i + 1`
+ done
+
+# Insure all buffers are flushed to printer
+if [ -t 1 ]
+then
+ stty 9600 opost onlcr -parenb cs8 ixon -istrip clocal tab3 <&1 2>/dev/null
+fi
+
+exit 0
diff --git a/Master/xemtex/gslib/ppath.ps b/Master/xemtex/gslib/ppath.ps
new file mode 100644
index 00000000000..8c2b596da95
--- /dev/null
+++ b/Master/xemtex/gslib/ppath.ps
@@ -0,0 +1,55 @@
+% Copyright (C) 1989, 1995, 1997 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: ppath.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% Redefine pathforall for tracing.
+% Can't be used recursively.
+
+/# {( )print} def
+
+/-mat matrix def
+/-imat matrix def
+/-smat { //-mat currentmatrix pop //-imat setmatrix } bind def
+/-rmat { //-mat setmatrix } bind def
+/-pathforall /pathforall load def
+/-p2 { ( ) print exch =only ( ) print =only } bind def
+/-dp2 { 2 copy -p2 2 { exch 4096 mul dup cvi dup ( ) print =only sub dup 0 eq { pop } { (+) print =only } ifelse } repeat } bind def
+/-tp2 { //-mat itransform -p2 } bind def
+/-dict 5 dict def
+
+/pathforall
+ { -dict begin
+ /-close exch def /-curve exch def /-line exch def /-move exch def
+ end -smat -mat ==only ( setmatrix) =
+ {2 copy -tp2 ( moveto\t%)print
+ 2 copy -dp2 (\n)print
+ flush -dict /-move get -rmat exec -smat}
+ {2 copy -tp2 ( lineto\t%)print
+ 2 copy -dp2 (\n)print
+ flush -dict /-line get -rmat exec -smat}
+ {5 index 5 index -tp2 3 index 3 index -tp2 2 copy -tp2 ( curveto\t%)print
+ 5 index 5 index -dp2 3 index 3 index -dp2 2 copy -dp2 (\n)print
+ flush -dict /-curve get -rmat exec -smat}
+ {(closepath\n)print flush -dict /-close get -rmat exec -smat}
+ -pathforall -rmat
+ }
+def
+
+% Just print the current path
+
+/printpath {
+ {pop pop} {pop pop} {pop pop pop pop pop pop} {} pathforall
+} def
diff --git a/Master/xemtex/gslib/pphs b/Master/xemtex/gslib/pphs
new file mode 100644
index 00000000000..03fc797ec63
--- /dev/null
+++ b/Master/xemtex/gslib/pphs
@@ -0,0 +1,7 @@
+#!/bin/sh
+# $Id: pphs,v 1.1 2001/07/15 16:25:02 lpd Exp $
+# Print the Primary Hint Stream from a linearized PDF file. Usage:
+# pphs filename.pdf
+# Output goes to stdout.
+
+exec gs -q -dNODISPLAY -- pphs.ps "$@"
diff --git a/Master/xemtex/gslib/pphs.ps b/Master/xemtex/gslib/pphs.ps
new file mode 100644
index 00000000000..5b841f744fb
--- /dev/null
+++ b/Master/xemtex/gslib/pphs.ps
@@ -0,0 +1,222 @@
+% Copyright (C) 2001 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: pphs.ps,v 1.3.2.1.2.1 2003/04/12 14:02:39 giles Exp $
+% Print Linearized PDF hint streams
+
+% Utilities
+/read1 { % <file> read1 <value>
+ read not {
+ (**** Unexpected EOF) = flush quit
+ } if
+} bind def
+/read2 { % <file> read2 <value>
+ dup read1 8 bitshift exch read1 add
+} bind def
+/read4 { % <file> read4 <value>
+ dup read2 16 bitshift exch read2 add
+} bind def
+% Free variables: Bits, Bitsleft
+/readninit { % - <readninit> -
+ /Bits 0 def
+ /Bitsleft 0 def
+} bind def
+
+/pdftoken { % <file> pdftoken <token>
+ dup token pop
+ dup type /nametype eq 1 index xcheck and {
+ dup dup (<<) cvn eq exch ([) eq or {
+ exec exch {
+ dup pdftoken dup dup (>>) cvn eq exch (]) eq or {
+ exch pop exec exit
+ } if exch
+ } loop
+ } {
+ exch pop
+ } ifelse
+ } {
+ exch pop
+ } ifelse
+} bind def
+/makemask { % <nbits> makemask <mask>
+ 1 exch bitshift 1 sub
+} bind def
+/readn { % <file> <nbits> readn <value>
+ dup Bitsleft le {
+ exch pop
+ /Bitsleft Bitsleft 2 index sub def
+ makemask Bits Bitsleft neg bitshift and
+ } {
+ Bitsleft makemask Bits and
+ exch Bitsleft sub exch 1 index bitshift 3 1 roll
+ /Bits 2 index read1 def /Bitsleft 8 def
+ readn add
+ } ifelse
+} bind def
+/sread { % <string> sread <file>
+ 0 () /SubFileDecode filter
+} bind def
+
+/ptag { % <pre-tag> <proc> <post-tag> ptag -
+ 3 -1 roll print (: ) print
+ exch exec
+ ( % ) print =
+} bind def
+
+% Print the linearization parameters dictionary.
+/plpkeys <<
+ /E (end of p. 1 objects)
+ /L (total file length)
+ /H (PHS start + length)
+ /N (# of pages)
+ /O (p. 1 object #)
+ /T (offset of first main xref entry)
+>> def
+/plpdict { % <dict> plpdict -
+ (<<) = plpkeys {
+ 2 index 2 index .knownget {
+ % Stack: dict key label value
+ ( ) print 3 -1 roll ===only ( ) print ===only
+ ( % ) print =
+ } {
+ pop pop
+ } ifelse
+ } forall {
+ plpkeys 2 index known {
+ pop pop
+ } {
+ ( ) print exch ===only ( ) print ===
+ } ifelse
+ } forall (>>) =
+} bind def
+
+% Print the Page Offset Hint Table.
+/ppoht { % <npages> <file> ppoht -
+
+ 20 dict begin
+ /f exch def
+ /npages exch def
+ readninit
+
+ (1) { f read4 =only } (least # objs/page) ptag
+ (2) { f read4 =only } (offset of p. 1 object (+PHS length if beyond PHS)) ptag
+ (3) { f read2 dup =only /nb3 exch def } (# bits for # objs/page delta) ptag
+ (4) { f read4 =only } (least # bytes/page) ptag
+ (5) { f read2 dup =only /nb5 exch def } (# bits for # bytes/page delta) ptag
+ (6) { f read4 =only } (least content stream offset-in-page) ptag
+ (7) { f read2 dup =only /nb7 exch def } (# bits for content stream offset delta) ptag
+ (8) { f read4 =only } (least content stream length) ptag
+ (9) { f read2 dup =only /nb9 exch def } (# bits for content stream length delta) ptag
+ (10) { f read2 dup =only /nb10 exch def } (# bits for # of shared obj refs) ptag
+ (11) { f read2 dup =only /nb11 exch def } (# bits for shared obj indices) ptag
+ (12) { f read2 dup =only /nb12 exch def } (# bits for shared obj ref pos numerators) ptag
+ (13) { f read2 =only } (shared obj ref pos denominator) ptag
+
+ (*1) { [ npages { f nb3 readn } repeat ] ==only } (# objs/page deltas (see 1,3)) ptag
+ (*2) { [ npages { f nb5 readn } repeat ] ==only } (# bytes/page deltas (see 4,5)) ptag
+ (*3) { [ npages { f nb10 readn } repeat ] dup ==only /nso exch def } (# of shared obj refs (see 10)) ptag
+ (*4) { [ nso { [ exch { f nb11 readn } repeat ] } forall ] ==only } (shared obj indices (see 11)) ptag
+ (*5) { [ nso { [ exch { f nb12 readn } repeat ] } forall ] ==only } (shared obj ref pos numerators (see 12)) ptag
+ (*6) { [ npages { f nb7 readn } repeat ] ==only } (content stream offset-in-page deltas (see 6,7)) ptag
+ (*7) { [ npages { f nb9 readn } repeat ] ==only } (content stream length deltas (see 8,9)) ptag
+
+ end % temp dict
+
+} bind def
+
+% Print the Shared Objects Hint Table.
+/psoht { % <file> psoht -
+
+ 20 dict begin
+ /f exch def
+ readninit
+
+ (1) { f read4 =only } (first shared obj #) ptag
+ (2) { f read4 =only } (first shared obj offset (+PHS length if beyond PHS)) ptag
+ (3) { f read4 dup =only /n3 exch def } (# of p. 1 shared objs) ptag
+ (4) { f read4 dup =only /n4 exch def } (total # of shared objs) ptag
+ (5) { f read2 dup =only /nb5 exch def } (# bits for # of shared objs/group) ptag
+ (6) { f read4 =only } (least shared obj group length) ptag
+ (7) { f read2 dup =only /nb7 exch def } (# bits for shared obj group length delta) ptag
+
+ /nse n4 def
+ (*1) { [ nse { f nb7 readn } repeat ] ==only } (shared obj group length deltas (see 6,7)) ptag
+ (*2) { [ nse { f 1 readn } repeat ] dup ==only /md5s exch def } (MD5 present?) ptag
+ (*3:) = md5s {
+ 0 ne {
+ ( ) print f 16 string readstring pop
+ (%stdout) (w) file dup 3 -1 roll writehexstring closefile () =
+ } if
+ } forall
+ (*4) { [ nse { f nb5 readn } repeat ] ==only } (# objs/group (see 5)) ptag
+
+ end % temp dict
+
+} bind def
+
+% Print the Primary Hint Stream of a PDF file.
+/pphs { % <file> pphs -
+ /pdf exch def
+
+ % Read the linearization parameter dictionary.
+ { pdf pdftoken /obj eq { exit } if } loop
+ pdf pdftoken /lpdict exch def
+ /lpdict type /dicttype eq { lpdict /Linearized known } { false } ifelse {
+ (Not a linearized PDF file.) = stop
+ } if
+
+ lpdict plpdict flush
+
+ % Read the primary hint stream.
+ null {
+ pdf pdftoken dup /stream eq { pop exit } if
+ exch pop
+ } loop
+ /phsdict exch def
+ % Remove Length if indirect reference.
+ phsdict 0 known {
+ phsdict 0 undef phsdict /Length undef
+ } if
+ (PHS: ) print phsdict === flush
+ pdf 0 (endstream) /SubFileDecode filter
+ dup 5000 string readstring pop exch closefile
+ sread /phsdata exch def
+
+ % Decode the hint stream data if necessary.
+ phsdict /Filter .knownget {
+ phsdata exch filter
+ dup 5000 string readstring pop exch closefile
+ sread /phsdata exch def
+ } if
+
+ % Adobe says we can assume /P = 0.
+ (Page Offset Hint Table:) =
+ lpdict /N get
+ phsdata phsdict /S get string readstring pop sread
+ ppoht
+ (Shared Objects Hint Table:) =
+ phsdata psoht
+} bind def
+
+% Check for command line arguments.
+[ shellarguments
+ { ] dup length 1 eq
+ { 0 get (r) file dup pphs closefile }
+ { (Usage: pphs filename.pdf\n) print flush }
+ ifelse
+ }
+ { pop }
+ifelse
diff --git a/Master/xemtex/gslib/prfont.ps b/Master/xemtex/gslib/prfont.ps
new file mode 100644
index 00000000000..c71dce1ad01
--- /dev/null
+++ b/Master/xemtex/gslib/prfont.ps
@@ -0,0 +1,242 @@
+%!
+%%Creator: Eric Gisin <egisin@waterloo.csnet>
+%%Title: Print font catalog
+% Copyright (c) 1986 Eric Gisin
+% Copyright (C) 1992 Aladdin Enterprises, Menlo Park, CA (ghost@aladdin.com)
+% Modified to print all 256 encoded characters.
+% Copyright (C) 1993 Aladdin Enterprises, Menlo Park, CA (ghost@aladdin.com)
+% Modified to print unencoded characters.
+% Copyright (C) 1994 Aladdin Enterprises, Menlo Park, CA (ghost@aladdin.com)
+% Modified to always create 256-element Encoding vectors.
+% Copyright (C) 1995 Aladdin Enterprises, Menlo Park, CA (ghost@aladdin.com)
+% Modified to print more than 128 unencoded characters.
+% Copyright (C) 1996 Aladdin Enterprises, Menlo Park, CA (ghost@aladdin.com)
+% Modified to leave a slightly wider left margin, because many H-P
+% printers can't print in the leftmost 1/4" of the page.
+% Modified to print unencoded characters in any font that has CharStrings.
+% Copyright (C) 1999 Aladdin Enterprises, Menlo Park, CA (ghost@aladdin.com)
+% Modified to sort unencoded characters.
+% Copyright (C) 2000 Aladdin Enterprises, Menlo Park, CA (ghost@aladdin.com)
+% Modified to print CIDFonts as well as fonts.
+% O(N^2) sorting replaced with O(N log N).
+
+% $Id: prfont.ps,v 1.2.6.1 2002/04/02 13:57:27 mpsuzuki Exp $
+
+% Example usages at bottom of file
+
+/#copies 1 def
+/min { 2 copy gt { exch } if pop } bind def
+
+/T6 /Times-Roman findfont 6 scalefont def
+/Temp 64 string def
+/Inch {72 mul} def
+/Base 16 def % char code output base
+/TempEncoding [ 256 { /.notdef } repeat ] def
+
+% Sort an array. Code used by permission of the author, Aladdin Enterprises.
+/sort { % <array> <lt-proc> sort <array>
+ % Heapsort (algorithm 5.2.3H, Knuth vol. 2, p. 146),
+ % modified for 0-origin indexing. */
+ 10 dict begin
+ /LT exch def
+ /recs exch def
+ /N recs length def
+ N 1 gt {
+ /l N 2 idiv def
+ /r N 1 sub def {
+ l 0 gt {
+ /l l 1 sub def
+ /R recs l get def
+ } {
+ /R recs r get def
+ recs r recs 0 get put
+ /r r 1 sub def
+ r 0 eq { recs 0 R put exit } if
+ } ifelse
+ /j l def {
+ /i j def
+ /j j dup add 1 add def
+ j r lt {
+ recs j get recs j 1 add get LT { /j j 1 add def } if
+ } if
+ j r gt { recs i R put exit } if
+ R recs j get LT not { recs i R put exit } if
+ recs i recs j get put
+ } loop
+ } loop
+ } if recs end
+} def
+
+% do single character of page
+% output to rectangle ll=(0,-24) ur=(36,24)
+/DoGlyph { % C, N, W set
+
+ % print code name, width and char name
+ T6 setfont
+ N /.notdef ne {0 -20 moveto N Temp cvs show} if
+ 0 -12 moveto C Base Temp cvrs show ( ) show
+ W 0.0005 add Temp cvs 0 5 getinterval show
+
+ % print char with reference lines
+ N /.notdef ne {
+ 3 0 translate
+ 0 0 moveto F24 setfont N glyphshow
+ /W W 24 mul def
+ 0 -6 moveto 0 24 lineto
+ W -6 moveto W 24 lineto
+ -3 0 moveto W 3 add 0 lineto
+ 0 setlinewidth stroke
+ } if
+} def
+/DoChar {
+ /C exch def
+ /N F /Encoding get C get def
+ /S (_) dup 0 C put def
+ /W F setfont S stringwidth pop def
+ DoGlyph
+} def
+/CIDTemp 20 string def
+/DoCID {
+ /N exch def
+ /C N def
+ /W F setfont gsave
+ matrix currentmatrix nulldevice setmatrix
+ 0 0 moveto N glyphshow currentpoint pop
+ grestore def
+ DoGlyph
+} def
+
+% print page title
+/DoTitle {
+ /Times-Roman findfont 18 scalefont setfont
+ 36 10.5 Inch moveto FName Temp cvs show ( ) show ((24 point)) show
+} def
+
+% print one block of characters
+/DoBlock { % firstcode lastcode
+ /FirstCode 2 index def
+ 1 exch {
+ /I exch def
+ /Xn I FirstCode sub 16 mod def /Yn I FirstCode sub 16 idiv def
+ gsave
+ Xn 35 mul 24 add Yn -56 mul 9.5 Inch add translate
+ I DoCode
+ grestore
+ } for
+} def
+
+% print a line of character
+/DoCharLine { % firstcode lastcode
+ 1 exch { (_) dup 0 3 index put show pop } for
+} def
+/DoCIDLine { % firstcode lastcode
+ 1 exch { glyphshow } for
+} def
+
+% initialize variables
+/InitDoFont { % fontname font
+ /F exch def % font
+ /FName exch def % font name
+ /F24 F 24 scalefont def
+ /Line0 96 string def
+ /Line1 96 string def
+ /Namestring1 128 string def
+ /Namestring2 128 string def
+} def
+
+% print pages of unencoded characters
+/DoUnencoded { % glyphs
+ /Unencoded exch def
+ /Count Unencoded length def
+
+ % Print the unencoded characters in blocks of 128.
+
+ 0 128 Unencoded length 1 sub
+ { /BlockStart 1 index def
+ dup 128 add Unencoded length .min 1 index sub
+ Unencoded 3 1 roll getinterval TempEncoding copy
+ /BlockEncoding exch def
+ /BlockCount BlockEncoding length def
+ save
+ F /Encoding known {
+ F length dict F
+ { 1 index /FID eq { pop pop } { 2 index 3 1 roll put } ifelse }
+ forall dup /Encoding TempEncoding put
+ /* exch definefont
+ /F exch def
+ /F24 F 24 scalefont def
+ /BlockStart 0 def
+ } if
+
+ DoTitle (, unencoded characters) show
+ BlockStart dup BlockCount 1 sub add DoBlock
+ F 10 scalefont setfont
+ 36 2.4 Inch moveto
+ 0 32 BlockCount 32 sub 224 .min {
+ 0 -0.4 Inch rmoveto gsave
+ dup 31 add BlockCount 1 sub .min
+ exch BlockStart add exch BlockStart add DoLine
+ grestore
+ } for
+ showpage
+ restore
+ } for
+
+} def
+
+% print font sample pages
+/DoFont {
+ dup findfont InitDoFont
+ /DoCode {DoChar} def
+ /DoLine {DoCharLine} def
+
+ % Display the first 128 encoded characters.
+
+ DoTitle (, characters 0-127) show
+ 0 127 DoBlock
+ F 10 scalefont setfont
+ 36 2.0 Inch moveto 0 63 DoLine
+ 36 1.5 Inch moveto 64 127 DoLine
+ showpage
+
+ % Display the second 128 encoded characters.
+
+ DoTitle (, characters 128-255) show
+ 128 255 DoBlock
+ F 10 scalefont setfont
+ 36 2.0 Inch moveto 128 191 DoLine
+ 36 1.5 Inch moveto 192 255 DoLine
+ showpage
+
+ F /CharStrings known
+ {
+ % Find and display the unencoded characters.
+
+ /Encoded F /Encoding get length dict def
+ F /Encoding get { true Encoded 3 1 roll put } forall
+ [ F /CharStrings get
+ { pop dup Encoded exch known { pop } if }
+ forall ] {
+ exch Namestring1 cvs exch Namestring2 cvs lt
+ } sort DoUnencoded
+
+ }
+ if
+
+} def
+
+% print CIDFont sample pages
+/DoCIDFont {
+ dup /CIDFont findresource InitDoFont
+ /DoCode {DoCID} def
+ /DoLine {DoCIDLine} def
+
+ [ 0 1 F /CIDCount get 1 sub { } for ] DoUnencoded
+} def
+
+% Do font samples
+% /Times-Roman DoFont % Test (less than a minute)
+% /Hershey-Gothic-English DoFont % Test (8 minutes)
+
+% Do a complete catalog
+% FontDirectory {pop DoFont} forall % All fonts (quite a long time)
diff --git a/Master/xemtex/gslib/printafm b/Master/xemtex/gslib/printafm
new file mode 100644
index 00000000000..97e09ae83b6
--- /dev/null
+++ b/Master/xemtex/gslib/printafm
@@ -0,0 +1,7 @@
+#!/bin/sh
+# $Id: printafm,v 1.1 2000/03/09 08:40:40 lpd Exp $
+# Print the metrics from a font in AFM format. Usage:
+# printafm fontname
+# Output goes to stdout.
+
+exec gs -q -dNODISPLAY -- printafm.ps "$@"
diff --git a/Master/xemtex/gslib/printafm.ps b/Master/xemtex/gslib/printafm.ps
new file mode 100644
index 00000000000..2b4ed14e889
--- /dev/null
+++ b/Master/xemtex/gslib/printafm.ps
@@ -0,0 +1,149 @@
+%!
+% written by James Clark <jjc@jclark.uucp>
+
+% print an afm file on the standard output
+% usage is `fontname printafm' eg `/Times-Roman printafm'
+
+% From the `dvitops' distribution, which included this notice:
+% dvitops is not copyrighted; you can do with it exactly as you please.
+% I would, however, ask that if you make improvements or modifications,
+% you ask me before distributing them to others.
+
+% Altered by d.love@dl.ac.uk to produce input for Rokicki's afm2tfm,
+% which groks the format of the Adobe AFMs.
+
+% $Id: printafm.ps,v 1.1.6.1 2002/04/10 09:22:58 giles Exp $
+
+% Modified by L. Peter Deutsch 9/14/93:
+% uses Ghostscript's =only procedure to replace 'buf cvs print'.
+% Modified by L. Peter Deutsch 9/6/95:
+% uses Ghostscript's shellarguments facility to accept the font name
+% on the command line.
+
+/onechar 1 string def
+
+% c toupper - c
+/toupper {
+ dup dup 8#141 ge exch 8#172 le and {
+ 8#40 sub
+ } if
+} bind def
+
+% printcharmetrics -
+
+/printcharmetrics {
+ (StartCharMetrics ) print
+ currentfont /CharStrings get dup length exch /.notdef known { 1 sub } if =
+ currentfont 1000 scalefont setfont 0 0 moveto
+ /e currentfont /Encoding get def
+ 0 1 255 {
+ dup e exch get
+ dup /.notdef ne {
+ exch dup printmetric
+ } {
+ pop pop
+ } ifelse
+ } for
+ % s contains an entry for each name in the original encoding vector
+ /s 256 dict def
+ e {
+ s exch true put
+ } forall
+ % v is the new encoding vector
+ /v 256 array def
+ 0 1 255 {
+ v exch /.notdef put
+ } for
+ % fill up v with names in CharStrings
+ /i 0 def
+ currentfont /CharStrings get {
+ pop
+ i 255 le {
+ v i 3 -1 roll put
+ /i i 1 add def
+ } {
+ pop
+ } ifelse
+ } forall
+ % define a new font with v as its encoding vector
+ currentfont maxlength dict /f exch def
+ currentfont {
+ exch dup dup /FID ne exch /Encoding ne and {
+ exch f 3 1 roll put
+ } {
+ pop pop
+ } ifelse
+ } forall
+ f /Encoding v put
+ f /FontName /temp put
+ % make this new font the current font
+ /temp f definefont setfont
+ % print a entry for each character not in old vector
+ /e currentfont /Encoding get def
+ 0 1 255 {
+ dup e exch get
+ dup dup /.notdef ne exch s exch known not and {
+ exch -1 printmetric
+ } {
+ pop pop
+ } ifelse
+ } for
+ (EndCharMetrics) =
+} bind def
+
+% name actual_code normal_code printmetric -
+
+/printmetric {
+ /saved save def
+ (C ) print =only
+ ( ; WX ) print
+ onechar 0 3 -1 roll put
+ onechar stringwidth pop round cvi =only
+ ( ; N ) print =only
+ ( ; B ) print
+ onechar false charpath flattenpath mark pathbbox counttomark {
+ counttomark -1 roll
+ round cvi =only
+ ( ) print
+ } repeat pop
+ (;) =
+ saved restore
+} bind def
+
+% fontname printafm -
+
+/printafm {
+ findfont gsave setfont
+ (StartFontMetrics 2.0) =
+ (FontName ) print currentfont /FontName get =
+
+ % Print the FontInfo
+
+ currentfont /FontInfo get {
+ exch
+ =string cvs dup dup 0 get 0 exch toupper put print
+ ( ) print =
+ } forall
+
+ % Print the FontBBox
+
+ (FontBBox) print
+ currentfont /FontBBox get {
+ ( ) print round cvi =only
+ } forall
+ (\n) print
+
+ printcharmetrics
+ (EndFontMetrics) =
+ grestore
+} bind def
+
+% Check for command line arguments.
+[ shellarguments
+ { ] dup length 1 eq
+ { 0 get printafm }
+ { (Usage: printafm fontname\n) print flush }
+ ifelse
+ }
+ { pop }
+ifelse
diff --git a/Master/xemtex/gslib/ps2ai.ps b/Master/xemtex/gslib/ps2ai.ps
new file mode 100644
index 00000000000..15bb6fef675
--- /dev/null
+++ b/Master/xemtex/gslib/ps2ai.ps
@@ -0,0 +1,552 @@
+%!
+% Copyright (C) 1994 , 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: ps2ai.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+%
+% ps2ai.ps - a postscript to editable adobe illustrator file filter
+%
+/vers {2.14} def % January 31, 1999
+
+% conditional def ( if the key is already defined before, don't
+% redefine it. This can be used by other programs to overwrite
+% some settings from externally
+%
+/cdef { 1 index where { pop pop pop } { def } ifelse } def
+%
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+%
+% needs a postscript level 2 interpreter, like gnu ghostscript, to work
+%
+% Usage: gs -q -dNODISPLAY ps2ai.ps file.ps > file.aips
+% or (see below)
+% gs -q -dNODISPLAY ps2ai.ps file.ps
+% or
+% cat ps2ai.ps file.ps | lpr (then look in log file)
+%
+% or from within gsview via:
+% Edit->Convert to vector format
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+% Options
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+% Output Options: directly to a file or standard out
+%
+/jout false cdef % true=file false=stdout (default=false)
+/joutput (ps2ai.out.aips) cdef % Name of Output file
+%
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+%
+% Other Options
+%
+/jtxt3 true cdef % output text in AI3 form (false=ai88)
+ % for coreldraw/photoshop readable output
+/joutln false cdef % use font outline instead of font
+/jerr false def % use error handling (ie die gracefully)
+/jbiterr false def % attempt to handle bitmap fonts (kludge)
+/jMacGS false def % true if using MacGS (not fully implemented yet)
+/jMacfix true def % convert filled boxes to lines (only usefull with
+ % laserwriter 8 postscript input)
+
+%
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+% No options below here
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+%
+% - Notes -
+% ai uses cmykcolor, so level 1 interpreters don't work
+% ai doesn't use image/imagemask - so bitmaps don't work correctly
+% the output file has a header so it is viewable/printable/reconvertable
+%
+% Comments, suggestions, bug-fixes, etc send to:
+%
+% Jason Olszewski (olszewsk@splash.princeton.edu)
+%
+% anonymous ftp: toby.princeton.edu /pub/olszewsk/ps2ai.ps
+% URL ftp://toby.princeton.edu/pub/olszewsk
+%
+% - Fix History -
+% 2.14 added cdef to allow overwriting of certain values from externally
+% 2.13 check for bitmap fonts, work better with TeX,WinPS,etc
+% 2.12 fixed initclip to US letter size page
+% 2.11 added header support for *u/*U compound paths
+% 2.1 option of font outline instead of text(gwhite@trevnx.bio.dfo.ca)
+% 2.0 major change to complex path handling
+% 1.9 fixed text leaking ascii (,),\
+% 1.85 added default font to handle no setfont (Courier)
+% 1.84 added even-odd fill/clip (D)
+% 1.83 undefined PPD PageSize printer specific info
+% 1.82 added kludge to save clipping status through a restore
+% 1.81 added custom color/gray support to header (x/X, g/G)
+% 1.8 added newpath if clippath is not consumed correctly(amiga)
+% 1.79 eliminated scientific notation of numbers less than 0.0001
+% 1.78 fixed transposed h & H
+% 1.77 made laserwriter 8 fixes optional
+% 1.76 added margin fix for unix AI (brown@wi.extrel.com)
+% 1.75 added kludge to handle bitmap font errors (TeX, Windows.ps)
+% 1.74 made grestore a little smarter
+% 1.73 included header handle encoded fontname (/_fontname)
+% 1.72 fixed problem with restore/clip info - (not enough Qs problem)
+% 1.71 filter font names to remove previous encoding (|,_,etc)
+% 1.7 change text format to AI3, works better with PS & CD
+% 1.67 deal with weird makefonts
+% 1.66 handle to many bad stroke/fills (s s s w/o paths)
+% 1.65 more useable with non-gs interpreters (defaultmatrix fix)
+% 1.64 fixed "smart grestore" repeat bug
+% 1.63 fixed ashow/awidthshow bug
+% 1.62 check if cmykcolor is understood otherwise rgb
+% 1.61 made grestore smarter (only print if different)
+% 1.6 add better compatibility to CorelDraw and PhotoShop
+% 1.53 make it more gs-backward compatible (clarke@lsl.co.uk)
+% 1.52 handle clipping paths a little better (Posted)
+% 1.51 improve mac lw8 output (lines instead of filled boxes)
+% 1.5 handle some level 2 stuff (mac lw8)
+% 1.4 fixed scaling of linewidth and dash
+% 1.31 made trailer more AI88 friendly
+% 1.3 add ablity to output to file directly
+% 1.21 print matrix cleaner
+% 1.2 fix rotated fonts, thanks to G.Cameron (g.cameron@biomed.abdn.ac.uk)
+% 1.1 fix stroke/fill color difference (k vs K)
+% 1.0 posted to comp.lang.postscript
+%
+% - To Do List -
+% find real %%BoundingBox: llx lly urx ury
+% make MacGS friendly (line-endings)
+% handle eps w/o showpage:(append to end)
+% write out image data to external file
+%
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+% Nothing of Interest below here
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+matrix identmatrix setmatrix % make ctm [1 0 0 1 0 0]
+/oldgsave {} def /oldgrestore {} def
+/initgraphics {} def /initmatrix {} def
+% undefine PPD PageSizes to be more printer independant
+/letter {} def /legal {} def /a4 {} def /b5 {} def /lettersmall {} def
+/setpagedevice { pop } def % for level 2 PPD PageSizes
+/Courier findfont 12 scalefont setfont % handle no setfont
+/initclip {0 0 moveto 0 792 lineto 612 792 lineto 612 0 lineto closepath
+ clip newpath } def
+/xdef {exch def} def
+/trx {transform exch} def
+/cbdef {cvx bind def} def
+/jltz {dup abs 0.0001 lt {pop 0} if} def % get rid of scientific notation bug
+/clstate false def % closepath state
+/dpth false def % destroy path (ie newpath)
+/fclp false def % first paint after clip
+/kscl {1.0} def % default current scale X-factor
+/gcnt {1} def % graphics state counter
+/spth {1} def % multiple paths on stack
+/jeol (\n) def % default end-of-line
+/jnump {0} def % number of paths on stack
+/jx {0} def /jy {0} def /j_ax {0} def
+/j3ftxt true def
+/clarry 10 array def
+0 1 9 {clarry exch false put} for % initilize no clipping path
+%
+% handle cmyk color on level 1 interpreters
+/setcmykcolor where {pop}
+ {/setcmykcolor {
+ /blk exch def /yel exch def /mag exch def /cyan exch def
+ /ccomp {add dup 1 gt {pop 1} if} def
+ /red {1 cyan blk ccomp sub} def
+ /green {1 mag blk ccomp sub} def
+ /blue {1 yel blk ccomp sub} def
+ red green blue setrgbcolor
+ } def
+} ifelse
+/currentcmykcolor where {pop}
+ {/currentcmykcolor {
+ currentrgbcolor /bval xdef /gval xdef /rval xdef
+ /rawC 1 rval sub def /rawM 1 gval sub def /rawY 1 bval sub def
+ rawC rawM ge { rawY rawM ge { /blk rawM def} if } if
+ rawC rawY ge { rawM rawY ge { /blk rawY def} if } if
+ rawY rawC ge { rawM rawC ge { /blk rawC def} if } if
+ rawY rawC eq { rawM rawC eq { /blk rawC def} if } if
+ /cyan rawC blk sub def
+ /mag rawM blk sub def
+ /yel rawY blk sub def
+ /blk blk def
+ cyan mag yel blk
+ } def
+} ifelse
+% If using Mac Ghostscript
+jMacGS {
+% /jeol {(\r) jp} def
+ /jout true def
+ (%%Note: Loading ps2ai.ps\n) print
+ } if
+/jstr 40 string def
+jout {joutput (w) file /joutput xdef} if
+%
+% Output
+%
+jout {/jp { joutput exch writestring } bind def }{/jp {print}bind def} ifelse
+/jpnum {jltz ( ) jp =string cvs jp } bind def
+/jpmat { dup /jarry exch def length 1 sub /j_num exch def
+ (\[) jp 0 1 j_num {jarry exch get jpnum} for (\]) jp } def
+%
+% Stack to Paths converters
+%
+/ckpnt { % check which paint and clipping to use
+ dpth { % if there are multiple paths on the stack
+ clarry gcnt get fclp and {clstate {(h W\n) jp }{(H W\n) jp } ifelse} if
+ spth 0 eq {clstate {(n\n) jp }{(N\n) jp } ifelse} if
+ spth 1 eq {clstate {(s\n) jp }{(S\n) jp } ifelse} if
+ spth 2 eq {clstate {(f\n) jp }{(F\n) jp } ifelse} if
+ } if
+} def
+/jpm {
+ ckpnt
+ /dpth true def
+ transform 2 copy /yst xdef /xst xdef exch jpnum jpnum ( m\n) jp } bind def
+/jpl { trx jpnum jpnum ( l\n) jp } bind def
+/jpc { 6 4 roll trx jpnum jpnum 4 2 roll trx jpnum jpnum trx
+ jpnum jpnum ( c\n) jp } bind def
+/jpp {xst jpnum yst jpnum ( l\n) jp /clstate true def} def
+/cntpaths { % count paths on stack
+ oldgsave
+ {pop pop /jnump jnump 1 add def} {pop pop} {6 {pop} repeat}{} pathforall
+ oldgrestore
+} def
+/ppforall {
+ cntpaths % find out how many paths are on the stack
+ jnump 1 gt { (*u\n) jp } if
+ {jpm}{jpl}{jpc}{jpp} pathforall
+ ckpnt
+ jnump 1 gt { (*U\n) jp } if
+ /jnump 0 def /clstate false def /dpth false def /fclp false def
+ oldnewpath
+} bind def
+%
+% Painting Operators
+%
+/oldnewpath [/newpath load] cbdef
+/newpath { (\n) jp /spth 0 def ppforall} def
+/stroke { (\n) jp /spth 1 def ppforall } def
+/fill {(\n) jp /spth 2 def ppforall } def
+/eofill {(1 D\n) jp fill (0 D\n) jp} def
+/clip {clarry gcnt get {(Q\nq\n) jp}{(q\n) jp} ifelse
+ /fclp true def clarry gcnt true put} def
+/eoclip {(1 D\n) jp clip (0 D\n) jp} def
+%
+% Text Operators
+%
+/oldshow [/show load] cbdef
+/curpt {stringwidth pop jx add jy} def
+/jNN {dup 0 eq {pop oldgsave currentfont /FontMatrix get setmatrix kscl
+ oldgrestore} if
+} def
+/curftmatrix {
+ currentfont /FontMatrix get dup 0 get jNN abs /norm exch def
+ dup 0 get norm div exch dup
+ 1 get norm div exch dup 2 get norm div exch dup 3 get norm div exch dup
+ 4 get exch 5 get 6 array astore matrix currentmatrix matrix concatmatrix
+} def
+% AI does not support negitive font sizes
+/curftsize {currentfont /FontMatrix get 0 get jNN abs 1000 mul} def
+/hstr (X) def
+/vbar (|) 0 get def /undsc (_) 0 get def
+/ftnamefix { % handle font names with |,_ (previously encoded)
+jstr cvs
+{ %forall
+ dup vbar eq {pop}{ %ifelse
+ dup undsc eq {pop}{ %ifelse
+ hstr exch 0 exch put hstr jp
+ } ifelse
+ } ifelse
+ } forall flush
+} bind def
+%/curftname {currentfont /FontName get ftnamefix}def
+/curftname { currentfont /FontName known {currentfont /FontName get}
+ { (Times-Roman)} ifelse ftnamefix } def
+/lftpar (\() 0 get def
+/rhtpar (\)) 0 get def
+/bckslsh (\\) 0 get def
+/handft { % handle strings with (,),\
+ (\() jp
+ { %forall
+ dup lftpar eq { (\\\() jp }{ %ifelse
+ dup rhtpar eq { (\\\)) jp }{ %ifelse
+ dup bckslsh eq { (\\\\) jp }{ %ifelse
+ hstr exch 0 exch put hstr jp
+ } ifelse
+ } ifelse
+ } ifelse
+ } forall (\)) jp flush
+} bind def
+% AI 3 text format pieces
+jtxt3 {
+/j3txt { j3ftxt {(0 Ts 100 Tz 0 Tt 0 TA 0 0 5 TC 100 100 200 TW 0 0 0 Ti\n) jp
+ (0 Ta 0 Tq 0 0 TI 0 Tc 0 Tw\n) jp} if } def
+/show {oldgsave (0 To\n) jp
+ currentpoint 2 copy /jy exch def /jx exch def translate
+ curftmatrix /jitm exch def
+ 0 1 5 {jitm exch get jpnum} for ( 0 Tp\n) jp (TP\n) jp
+ (0 Tr\n) jp (\/_) jp curftname curftsize jpnum ( Tf\n) jp
+ (0) jp j_ax curftsize div 100 mul jpnum ( 100 TC\n) jp % percent(?)
+ dup curpt moveto mark exch handft ( Tx\n) jp (TO\n) jp /j3ftxt false def
+ cleartomark currentpoint oldgrestore moveto
+} def
+/ashow {exch pop exch /j_ax exch def show /j_ax {0} def } def
+}
+ {
+/show {oldgsave (u\n) jp currentpoint 2 copy /jy exch def /jx exch def translate
+ (\/) jp curftname jstr cvs jp
+ curftsize dup jpnum jpnum ( 0 0 z\n) jp
+ curftmatrix jpmat ( e\n) jp
+ dup curpt moveto mark exch handft ( t T U\n) jp
+ cleartomark currentpoint oldgrestore moveto} def
+/ashow {oldgsave (u\n) jp currentpoint translate (\/) jp curftname jstr cvs jp
+ curftsize dup jpnum jpnum exch kscl mul jpnum ( 0 z\n) jp
+ curftmatrix jpmat ( e\n) jp dup curpt moveto mark exch handft
+ ( t T U\n) jp cleartomark currentpoint oldgrestore moveto} def
+} ifelse
+/widthshow { show pop pop pop} def
+/awidthshow {ashow pop pop pop} def
+/kshow {show pop} def
+%/show {true charpath fill} bind def % get outline of charactor
+joutln {/show { true charpath currentpoint
+ /jy exch def /jx exch def fill jx jy moveto} bind def} if
+%/show {oldshow} def % do nothing different
+%
+% Color Operators
+%
+/oldsetcmykcolor [/setcmykcolor load] cbdef
+/setcmykcolor {oldsetcmykcolor
+currentcmykcolor 4 -1 roll jpnum 3 -1 roll jpnum 2 -1 roll jpnum jpnum ( k\n) jp
+currentcmykcolor 4 -1 roll jpnum 3 -1 roll jpnum 2 -1 roll jpnum jpnum ( K\n) jp
+ } def
+/oldsetgray [/setgray load] cbdef
+/setgray {0 0 0 4 -1 roll 1 exch sub setcmykcolor} def
+/oldsethsbcolor [/sethsbcolor load] cbdef
+/sethsbcolor {oldsethsbcolor currentcmykcolor setcmykcolor} def
+/oldsetrgbcolor [/setrgbcolor load] cbdef
+/setrgbcolor {oldsetrgbcolor currentrgbcolor /bval xdef /gval xdef /rval xdef
+ /rawC 1 rval sub def /rawM 1 gval sub def /rawY 1 bval sub def
+ rawC rawM ge { rawY rawM ge { /blk rawM def} if } if
+ rawC rawY ge { rawM rawY ge { /blk rawY def} if } if
+ rawY rawC ge { rawM rawC ge { /blk rawC def} if } if
+ rawY rawC eq { rawM rawC eq { /blk rawC def} if } if
+ /cyan rawC blk sub def
+ /mag rawM blk sub def
+ /yel rawY blk sub def
+ /blk blk def
+ cyan mag yel blk setcmykcolor } def
+%
+% State Operators
+%
+/oldsetlinewidth [/setlinewidth load] cbdef
+/setlinewidth {kscl abs mul jltz oldsetlinewidth
+ currentlinewidth jpnum ( w\n) jp } def
+/oldsetlinecap [/setlinecap load] cbdef
+/setlinecap {dup oldsetlinecap jpnum ( J\n) jp} def
+/oldsetlinejoin [/setlinejoin load] cbdef
+/setlinejoin {dup oldsetlinejoin jpnum ( j\n) jp} def
+/oldsetmiterlimit [/setmiterlimit load] cbdef
+/setmiterlimit {dup oldsetmiterlimit jpnum ( M\n) jp}def
+/oldsetdash [/setdash load] cbdef
+/setdash {exch [ exch {kscl abs mul} forall ] exch kscl abs mul oldsetdash
+ currentdash exch jpmat jpnum ( d\n) jp } def
+/oldsetflat [/setflat load] cbdef
+/setflat {dup oldsetflat jpnum ( i\n) jp } def
+%
+% More State Operators
+%
+/kscl { % use just the x scale factor
+ oldgsave
+ matrix currentmatrix /jctm exch def
+ jctm 4 0 put jctm 5 0 put jctm setmatrix
+ 1 0 moveto currentpoint transform
+ dup mul exch dup mul add sqrt 10000 mul round 10000 div
+ oldgrestore
+} def
+/currentstate {currentcmykcolor setcmykcolor
+ currentflat jpnum ( i) jp currentlinecap jpnum ( J) jp
+ currentlinejoin jpnum ( j) jp currentlinewidth jpnum ( w) jp
+ currentmiterlimit jpnum ( M ) jp currentdash exch jpmat jpnum ( d\n) jp
+} def
+/jdifG {
+ currentcmykcolor /jok xdef /joy xdef /jom xdef /joc xdef
+ currentflat /jof xdef currentlinecap /jolc xdef currentlinejoin /jolj xdef
+ currentlinewidth /jolw xdef currentmiterlimit /joml xdef
+ currentdash /jood xdef /joad xdef
+ oldgrestore
+ currentcmykcolor /jnk xdef /jny xdef /jnm xdef /jnc xdef
+ currentflat /jnf xdef currentlinecap /jnlc xdef currentlinejoin /jnlj xdef
+ currentlinewidth /jnlw xdef currentmiterlimit /jnml xdef
+ currentdash /jnod xdef /jnad xdef
+ % compare old gstate to new gstate
+ joc jnc ne jom jnm ne joy jny ne jok jnk ne
+ jof jnf ne jolc jnlc ne jolj jnlj ne jolw jnlw ne joml jnml ne
+ false joad {true exit} forall {pop pop true}{false} ifelse
+ false jnad {true exit} forall {pop pop true}{false} ifelse ne
+ jood jnod ne 10 {or} repeat {currentstate} if
+} def
+/oldgsave [/gsave load] cbdef
+/gsave {oldgsave /gcnt gcnt 1 add def } def % clarry gcnt false put} def
+% (%%Note:gsave ) jp gcnt jpnum (\n) jp} def
+/oldgrestore [/grestore load] cbdef
+/grestore {dpth {newpath} if clarry gcnt get {(Q\n) jp clarry gcnt false put} if
+ jdifG /gcnt gcnt 1 sub def } def
+% oldgrestore currentstate } def
+% (%%Note:grestore ) jp gcnt 1 add jpnum (\n) jp} def
+/oldrestore [/restore load] cbdef
+% a kludgy way of saving the clipping path status information
+/restore {clarry aload pop 11 -1 roll oldrestore clarry astore pop} def
+/showpage { 0 1 9 {clarry exch get {(Q\n) jp} if } for
+ (%%Note: If Error, make sure there are matched pairs of 'q's and 'Q's\n) jp
+ (%%Note: in the file. Add 'Q's before '%%Trailer' until equal\n) jp
+ (%%Trailer\n) jp
+ jtxt3 {(Adobe_IllustratorA_AI3 /terminate get exec\n) jp
+ (Adobe_typography_AI3 /terminate get exec\n) jp
+ (Adobe_customcolor /terminate get exec\n) jp
+ (Adobe_cshow /terminate get exec\n) jp
+ (Adobe_cmykcolor /terminate get exec\n) jp
+ (Adobe_packedarray /terminate get exec\n) jp
+}{
+ (Adobe_Illustrator881 /terminate get exec\n) jp
+ (Adobe_customcolor /terminate get exec\n) jp
+ (Adobe_cshow /terminate get exec\n) jp
+ (Adobe_cmykcolor /terminate get exec\n) jp
+ (Adobe_packedarray /terminate get exec\n) jp
+ } ifelse
+( showpage\n%EOF\n%%EndDocument\n) jp
+ jout {joutput closefile} if jMacGS not {quit} if /j3ftxt true def } def
+%
+% Error handling
+%
+errordict begin
+% Attempt to handle the error caused by bitmap fonts (TeX,Windows.ps,etc)
+% this is a big-time kludge
+jbiterr {
+ /undefined {pop pop (Times-Roman)} def
+ /typecheck {pop pop} def
+} if
+jerr {
+ /handleerror {
+ (%%Note: ps2ai error, aborting rest of conversion\n) jp showpage
+ } def
+} if
+end
+%
+% Mac LW 8 improvements
+%
+/jmacimp { % stroked line instead of thin filled boxes
+ /@a { 3 -1 roll 2 div dup 3 -1 roll add exch 3 -1 roll add exch moveto
+ 3 -1 roll 2 div dup 3 -1 roll add exch 3 -1 roll exch sub exch lineto
+ abs setlinewidth stroke pop pop} def
+ /@b { 3 -1 roll 2 div dup 3 -1 roll add exch 3 -1 roll add exch moveto
+ pop
+ 3 -1 roll 2 div dup 3 -1 roll add exch 3 -1 roll add exch lineto
+ abs setlinewidth stroke} def
+ /endp {showpage pm restore} def % because the restore stops clean up
+} def
+%
+% Handle (some) PS Level 2
+%
+/rectstroke { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto
+ closepath stroke} def
+/rectfill { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto
+ fill } def
+/rectclip { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto
+ closepath clip newpath jMacfix {jmacimp} if } def
+%
+% Add a header prolog to the output file so it is still view/print-able
+%
+(%!PS-Adobe-2.0 EPSF-1.2\n%%BoundingBox: 0 0 612 792\n) jp
+(%%Title: Adobe Illustator 3 Editable Document\n) jp
+(%%Creator: ps2ai.ps vers.) jp vers jpnum ( \(C\) 1993-94 Jason Olszewski\n) jp
+(%%TemplateBox: 0 0 612 792\n) jp
+jtxt3 {(%%AI3_Margin:0 0 0 0\n) jp } if
+(%%EndComments\n) jp
+(%%BeginProlog\n) jp
+(/m {moveto} def /l {lineto} def /c {curveto} def\n) jp
+(/S {stroke} def /F {fill} def\n) jp
+(/s {closepath S} def /f {closepath F} def\n) jp
+(/q {gsave} def /Q {grestore} def /W {clip} def /k {setcmykcolor} def\n) jp
+(/i {setflat} def /J {setlinecap} def /j {setlinejoin} def\n) jp
+(/w {setlinewidth} def /M {setmiterlimit} def /d {setdash} def\n) jp
+(/u {gsave} def /U {grestore} def /K {k} def\n) jp
+(/N {newpath} def /n {closepath N} def\n) jp
+(/g {setgray} def /G {g} def\n) jp
+(/x {pop pop k} def /X {x} def\n) jp
+(/H {} def /h {H closepath} def /D {pop} def\n) jp
+(/*u { /N {/spth 0 def}def /S{/spth 1 def}def /F {/spth 2 def} def} def\n) jp
+(/*U { spth 0 eq {newpath} if spth 1 eq {stroke} if spth 2 eq {fill} if\n) jp
+( /N {newpath} def /S {stroke} def /F {fill} def } def\n) jp
+%(\n) jp
+jtxt3 {
+ (/TC {pop pop pop} def /Tr {pop} def\n) jp
+ (/To {pop gsave} def /TO {grestore} def\n) jp
+ (/Tp {pop matrix astore concat} def /TP {0 0 moveto} def\n) jp
+ (/a_str 40 string def /cnt 0 def /h_str (X) def /undsc (_) 0 get def\n) jp
+ (/fntfix {a_str cvs dup length 1 sub /f_str exch string def\n) jp
+ ( {dup undsc eq {pop}{f_str cnt 3 -1 roll put /cnt cnt 1 add def\n) jp
+ ( } ifelse } forall flush /cnt 0 def f_str cvn } bind def\n) jp
+
+ (/Tf {exch fntfix findfont exch scalefont setfont} def /Tx {show} def\n) jp
+}{
+ (/z {pop pop pop exch findfont exch scalefont setfont} def\n) jp
+ (/e {concat 0 0 m} def /t {show} def /T {} def\n) jp
+} ifelse
+(\n) jp
+jtxt3 {
+ (userdict /Adobe_packedarray 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+ (userdict /Adobe_cmykcolor 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+ (userdict /Adobe_cshow 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+ (userdict /Adobe_customcolor 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+ (userdict /Adobe_typography_AI3 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+ (userdict /Adobe_IllustratorA_AI3 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+}{
+ (userdict /Adobe_packedarray 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+ (userdict /Adobe_cmykcolor 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+ (userdict /Adobe_cshow 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+ (userdict /Adobe_customcolor 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+ (userdict /Adobe_Illustrator881 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+} ifelse
+(%%EndProlog\n) jp
+(%%BeginSetup\n) jp
+jtxt3 {
+ (Adobe_packedarray /initialize get exec\n) jp
+ (Adobe_cmykcolor /initialize get exec\n) jp
+ (Adobe_cshow /initialize get exec\n) jp
+ (Adobe_customcolor /initialize get exec\n) jp
+ (Adobe_typography_AI3 /initialize get exec\n) jp
+ (Adobe_IllustratorA_AI3 /initialize get exec\n) jp
+}{
+ (Adobe_packedarray /initialize get exec\n) jp
+ (Adobe_cmykcolor /initialize get exec\n) jp
+ (Adobe_cshow /initialize get exec\n) jp
+ (Adobe_customcolor /initialize get exec\n) jp
+ (Adobe_Illustrator881 /initialize get exec\n) jp
+} ifelse
+(%%EndSetup\n) jp
+0 0 0 1 oldsetcmykcolor
+currentstate
+
+jout {(%%Note: Load Postscript file to be converted now\n) print} if
diff --git a/Master/xemtex/gslib/ps2ascii b/Master/xemtex/gslib/ps2ascii
new file mode 100644
index 00000000000..7e285b12e6a
--- /dev/null
+++ b/Master/xemtex/gslib/ps2ascii
@@ -0,0 +1,18 @@
+#!/bin/sh
+# $Id: ps2ascii,v 1.3 2001/06/22 16:09:22 lpd Exp $
+# Extract ASCII text from a PostScript file. Usage:
+# ps2ascii [infile.ps [outfile.txt]]
+# If outfile is omitted, output goes to stdout.
+# If both infile and outfile are omitted, ps2ascii acts as a filter,
+# reading from stdin and writing on stdout.
+
+trap "rm -f _temp_.err _temp_.out" 0 1 2 15
+
+OPTIONS="-q -dNODISPLAY -dSAFER -dNOBIND -dWRITESYSTEMDICT -dSIMPLE"
+if ( test $# -eq 0 ) then
+ gs $OPTIONS -c save -f ps2ascii.ps - -c quit
+elif ( test $# -eq 1 ) then
+ gs $OPTIONS -c save -f ps2ascii.ps "$1" -c quit
+else
+ gs $OPTIONS -c save -f ps2ascii.ps "$1" -c quit >"$2"
+fi
diff --git a/Master/xemtex/gslib/ps2ascii.bat b/Master/xemtex/gslib/ps2ascii.bat
new file mode 100644
index 00000000000..ad1bdcd2478
--- /dev/null
+++ b/Master/xemtex/gslib/ps2ascii.bat
@@ -0,0 +1,15 @@
+@echo off
+@rem $Id: ps2ascii.bat,v 1.3 2000/05/20 20:53:05 lpd Exp $
+
+call gssetgs.bat
+if '%1'=='' goto a0
+if '%2'=='' goto a1
+%GSC% -q -dNODISPLAY -dSAFER -dNOBIND -dWRITESYSTEMDICT -dSIMPLE ps2ascii.ps %1 -c quit >%2
+goto x
+:a0
+%GSC% -q -dNODISPLAY -dSAFER -dNOBIND -dWRITESYSTEMDICT -dSIMPLE ps2ascii.ps - -c quit
+goto x
+:a1
+%GSC% -q -dNODISPLAY -dSAFER -dNOBIND -dWRITESYSTEMDICT -dSIMPLE ps2ascii.ps %1 -c quit
+goto x
+:x
diff --git a/Master/xemtex/gslib/ps2ascii.cmd b/Master/xemtex/gslib/ps2ascii.cmd
new file mode 100755
index 00000000000..c1316b89841
--- /dev/null
+++ b/Master/xemtex/gslib/ps2ascii.cmd
@@ -0,0 +1,18 @@
+/* $Id: ps2ascii.cmd,v 1.1 2000/07/05 16:21:13 lpd Exp $ */
+/*
+ * This file is maintained by a user: if you have any questions about it,
+ * please contact Mark Hale (mark.hale@physics.org).
+ */
+
+@echo off
+if '%1'=='' goto a0
+if '%2'=='' goto a1
+gsos2 -q -dNODISPLAY -dNOBIND -dWRITESYSTEMDICT -dSIMPLE ps2ascii.ps %1 -c quit >%2
+goto x
+:a0
+gsos2 -q -dNODISPLAY -dNOBIND -dWRITESYSTEMDICT -dSIMPLE ps2ascii.ps - -c quit
+goto x
+:a1
+gsos2 -q -dNODISPLAY -dNOBIND -dWRITESYSTEMDICT -dSIMPLE ps2ascii.ps %1 -c quit
+goto x
+:x
diff --git a/Master/xemtex/gslib/ps2ascii.ps b/Master/xemtex/gslib/ps2ascii.ps
new file mode 100644
index 00000000000..44770910fb5
--- /dev/null
+++ b/Master/xemtex/gslib/ps2ascii.ps
@@ -0,0 +1,1509 @@
+% Copyright (C) 1991, 1995, 1996, 1998, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: ps2ascii.ps,v 1.3.2.2.2.1 2003/04/12 14:02:39 giles Exp $
+% Extract the ASCII text from a PostScript file. Nothing is displayed.
+% Instead, ASCII information is written to stdout. The idea is similar to
+% Glenn Reid's `distillery', only a lot more simple-minded, and less robust.
+
+% If SIMPLE is defined, just the text is written, with a guess at line
+% breaks and word spacing. If SIMPLE is not defined, lines are written
+% to stdout as follows:
+%
+% F <height> <width> (<fontname>)
+% Indicate the font height and the width of a space.
+%
+% P
+% Indicate the end of the page.
+%
+% S <x> <y> (<string>) <width>
+% Display a string.
+%
+% <width> and <height> are integer dimensions in units of 1/720".
+% <x> and <y> are integer coordinates, in units of 1/720", with the origin
+% at the lower left.
+% <string> and <fontname> are strings represented with the standard
+% PostScript escape conventions.
+
+% If COMPLEX is defined, the following additional types of lines are
+% written to stdout.
+%
+% C <r> <g> <b>
+% Indicate the current color.
+%
+% I <x> <y> <width> <height>
+% Note the presence of an image.
+%
+% R <x> <y> <width> <height>
+% Fill a rectangle.
+%
+% <r>, <g>, and <b> are RGB values expressed as integers between 0 and 1000.
+%
+% Note that future versions of this program (in COMPLEX mode) may add
+% other output elements, so programs parsing the output should be
+% prepared to ignore elements that they do not recognize.
+
+% Note that this code will only work in all cases if systemdict is writable
+% and if `binding' the definitions of operators defined as procedures
+% is deferred. For this reason, it is normally invoked with
+% gs -q -dNODISPLAY -dNOBIND -dWRITESYSTEMDICT ps2ascii.ps
+
+% Thanks to:
+% J Greely <jgreely@cis.ohio-state.edu> for improvements to this code;
+% Jerry Whelan <jerryw@abode.ccd.bnl.gov> for motivating other improvements;
+% David M. Jones <dmjones@theory.lcs.mit.edu> for improvements noted below.
+
+%% Additional modifications by David M. Jones
+%% (dmjones@theory.lcs.mit.edu), December 23, 1997
+%%
+%% (a) Rewrote forall loop at the end of .show.write. This fixes a
+%% stack leakage problem, but the changes are more significant
+%% than that.
+%%
+%% .char.map includes the names of all characters in the
+%% StandardEncoding, ISOLatin1Encoding, OT1Encoding and
+%% T1Encoding vectors. Thus, if the Encoding vector for the
+%% current font contains a name that is not in .char.map, it's
+%% redundant to check if the Encoding vector is equal to one of
+%% the known vectors. Previous versions of ps2ascii would give
+%% up at this point, and substitute an asterisk (*) for the
+%% character. I've taken the liberty of instead using the
+%% OT1Encoding vector to translate the character, on the grounds
+%% that in the cases I'm most interested in, a font without a
+%% useful Encoding vector was most likely created by a DVI to PS
+%% converter such as dvips or DVILASER (and OT1Encoding is
+%% largely compatible with StandardEncoding anyway). [Note that
+%% this does not make my earlier changes to support dvips (see
+%% fix (a) under my 1996 changes) completely obsolete, since
+%% there's additional useful information I can extract in that
+%% case.]
+%%
+%% Overall, this should provide better support for some documents
+%% (e.g, DVILASER documents will no longer be translated into a
+%% series of *'s) without breaking any other documents any worse
+%% than they already were broken.
+%%
+%% (b) Fixed two bugs in dvips.df-tail: (1) changed "dup 127" to "dup
+%% 128" to fix fencepost error, and (2) gave each font it's own
+%% FontName rather than having all fonts share the same name.
+%%
+%% (c) Added one further refinement to the heuristic for detecting
+%% paragraph breaks: do not ever start a new paragraph after a
+%% line ending in a hyphen.
+%%
+%% (d) Added a bunch of missing letters from the T1Encoding,
+%% OT1Encoding and ISOLatin1Encoding vectors to .letter.chars to
+%% improve hyphen-elimination algorithm. This still won't help
+%% if there's no useful Encoding vector.
+%%
+%% NOTE: A better solution to the problem of missing Encoding vectors
+%% might be to redefine definefont to check whether the Encoding
+%% vector is sensible and, if not, replace it by a default. This
+%% would alleviate the need for constant tests in the .show.write
+%% loop, as well as automatically solving the problem noted in fix
+%% (d) above, and the similar problem with .break.chars. This should
+%% be investigated. Also, the hyphen-elimination algorithm really
+%% needs to be looked at carefully and rethought.
+
+%%* Modifications to ps2ascii.ps by David M. Jones
+%%* (dmjones@theory.lcs.mit.edu), June 25-July 8, 1996
+
+%%* Modifications:
+%%*
+%%* (a) added code to give better support for dvips files by providing
+%%* FontBBox's, FontName's and Encoding vectors for downloaded
+%%* bitmap fonts. This is done by using dvips's start-hook to
+%%* overwrite the df-tail and D procedures that dvips uses to
+%%* define its Type 3 bitmap fonts. Thus, this change should
+%%* provide better support for dvips-generated PS files without
+%%* affecting the handling of other documents.
+%%*
+%%* (b) Fixed two bugs that could potentially affect any PS file, not
+%%* just those created by dvips: (1) added missing "get" operator
+%%* in .show.write and (2) fixed bug that caused a hyphen at the
+%%* end of a line to be replaced by a space rather than begin
+%%* deleted. Note that the first bug was a source of stack
+%%* leakage, causing ps2ascii to run out of operand stack space
+%%* occasionally.
+%%*
+%%* Search for "%%* BF" to find these modifications.
+%%*
+%%* (c) Improved the heuristic for determining whether a line break
+%%* has occurred and whether a line break represents a paragraph
+%%* break. Previously, any change in the vertical position caused
+%%* a line break; now a line break is only registered if the
+%%* change is larger than the height of the current font. This
+%%* means that superscripts, subscripts, and such things as
+%%* shifted accents generated by TeX won't cause line breaks.
+%%* Paragraph-recognition is now done by comparing the indentation
+%%* of the new line to the indentation of the previous line and by
+%%* comparing the vertical distance between the new line and the
+%%* previous line to the vertical distance between the previous
+%%* line and its predecessor.
+%%*
+%%* (d) Added a hook for renaming the files where stdout and stderr
+%%* go.
+%%*
+%%* In general, my additions or changes to the code are described in
+%%* comments beginning with "%%*". However, there are numerous other
+%%* places where I have either re-formatted code or added comments to
+%%* the code while I was trying to understand it. These are usually
+%%* not specially marked.
+%%*
+
+/QUIET true def
+systemdict wcheck { systemdict } { userdict } ifelse begin
+/.max where { pop } { /.max { 2 copy lt { exch } if pop } bind def } ifelse
+/COMPLEX dup where { pop true } { false } ifelse def
+/SIMPLE dup where { pop true } { false } ifelse def
+/setglobal where
+ { pop currentglobal /setglobal load true setglobal }
+ { { } }
+ifelse
+
+% Define a way to store and retrieve integers that survives save/restore.
+/.i.string0 (0 ) def
+/.i.string .i.string0 length string def
+/.iget { cvi } bind def
+/.iput { exch //.i.string exch copy cvs pop } bind def
+/.inew { //.i.string0 dup length string copy } bind def
+
+% We only want to redefine operators if they are defined already.
+
+/codef { 1 index where { pop def } { pop pop } ifelse } def
+
+% Redefine the end-of-page operators.
+
+/erasepage { } codef
+/copypage { SIMPLE { (\014) } { (P\n) } ifelse //print } codef
+/showpage { copypage erasepage initgraphics } codef
+
+% Redefine the fill operators to detect rectangles.
+
+/.orderrect % <llx> <lly> <urx> <ury> .orderrect <llx> <lly> <w> <h>
+ { % Ensure llx <= urx, lly <= ury.
+ 1 index 4 index lt { 4 2 roll } if
+ dup 3 index lt { 3 1 roll exch } if
+ exch 3 index sub exch 2 index sub
+ } odef
+/.fillcomplex
+ { % Do a first pass to see if the path is all rectangles in
+ % the output coordinate system. We don't worry about overlapping
+ % rectangles that might be partially not filled.
+ % Stack: mark llx0 lly0 urx0 ury0 ... true mark x0 y0 ...
+ mark true mark
+ % Add a final moveto so we pick up any trailing unclosed subpath.
+ 0 0 itransform moveto
+ { .coord counttomark 2 gt
+ { counttomark 4 gt { .fillcheckrect } { 4 2 roll pop pop } ifelse }
+ if
+ }
+ { .coord }
+ { cleartomark not mark exit }
+ { counttomark -2 roll 2 copy counttomark 2 roll .fillcheckrect }
+ pathforall cleartomark
+ { .showcolor counttomark 4 idiv
+ { counttomark -4 roll .orderrect
+ (R ) //print .show==4
+ }
+ repeat pop
+ }
+ { cleartomark
+ }
+ ifelse
+ } odef
+/.fillcheckrect
+ { % Check whether the current subpath is a rectangle.
+ % If it is, add it to the list of rectangles being accumulated;
+ % if not exit the .fillcomplex loop.
+ % The subpath has not been closed.
+ % Stack: as in .fillcomplex, + newx newy
+ counttomark 10 eq { 9 index 9 index 4 2 roll } if
+ counttomark 12 ne { cleartomark not mark exit } if
+ 12 2 roll
+ % Check for the two possible forms of rectangles:
+ % x0 y0 x0 y1 x1 y1 x1 y0 x0 y0
+ % x0 y0 x1 y0 x1 y1 x0 y1 x0 y0
+ 9 index 2 index eq 9 index 2 index eq and
+ 10 index 9 index eq
+ { % Check for first form.
+ 7 index 6 index eq and 6 index 5 index eq and 3 index 2 index eq and
+ }
+ { % Check for second form.
+ 9 index 8 index eq and
+ 8 index 7 index eq and 5 index 4 index eq and 4 index 3 index eq and
+ }
+ ifelse not { cleartomark not mark exit } if
+ % We have a rectangle.
+ pop pop pop pop 4 2 roll pop pop 8 4 roll
+ } odef
+/eofill { COMPLEX { .fillcomplex } if newpath } codef
+/fill { COMPLEX { .fillcomplex } if newpath } codef
+/rectfill { gsave newpath .rectappend fill grestore } codef
+/ueofill { gsave newpath uappend eofill grestore } codef
+/ufill { gsave newpath uappend fill grestore } codef
+
+% Redefine the stroke operators to detect rectangles.
+
+/rectstroke
+ { gsave newpath
+ dup type dup /arraytype eq exch /packedarraytype eq or
+ { dup length 6 eq { exch .rectappend concat } { .rectappend } ifelse }
+ { .rectappend }
+ ifelse stroke grestore
+ } codef
+/.strokeline % <fromx> <fromy> <tox> <toy> .strokeline <tox> <toy>
+ % Note: fromx and fromy are in output coordinates;
+ % tox and toy are in user coordinates.
+ { .coord 2 copy 6 2 roll .orderrect
+ % Add in the line width. Assume square or round caps.
+ currentlinewidth 2 div dup .dcoord add abs 1 .max 5 1 roll
+ 4 index add 4 1 roll 4 index add 4 1 roll
+ 4 index sub 4 1 roll 5 -1 roll sub 4 1 roll
+ (R ) //print .show==4
+ } odef
+/.strokecomplex
+ { % Do a first pass to see if the path is all horizontal and vertical
+ % lines in the output coordinate system.
+ % Stack: true mark origx origy curx cury
+ true mark null null null null
+ { .coord 6 2 roll pop pop pop pop 2 copy }
+ { .coord 1 index 4 index eq 1 index 4 index eq or
+ { 4 2 roll pop pop }
+ { cleartomark not mark exit }
+ ifelse
+ }
+ { cleartomark not mark exit }
+ { counttomark -2 roll 2 copy counttomark 2 roll
+ 1 index 4 index eq 1 index 4 index eq or
+ { pop pop 2 copy }
+ { cleartomark not mark exit }
+ ifelse
+ }
+ pathforall cleartomark
+ 0 currentlinewidth .dcoord 0 eq exch 0 eq or and
+ % Do the second pass to write out the rectangles.
+ % Stack: origx origy curx cury
+ { .showcolor null null null null
+ { 6 2 roll pop pop pop pop 2 copy .coord }
+ { .strokeline }
+ { }
+ { 3 index 3 index .strokeline }
+ pathforall pop pop pop pop
+ }
+ if
+ } odef
+/stroke { COMPLEX { .strokecomplex } if newpath } codef
+/ustroke
+ { gsave newpath
+ dup length 6 eq { exch uappend concat } { uappend } ifelse
+ stroke grestore
+ } codef
+
+% The image operators must read the input and note the dimensions.
+% Eventually we should redefine these to detect 1-bit-high all-black images,
+% since this is how dvips does underlining (!).
+
+/.noteimagerect % <width> <height> <matrix> .noteimagerect -
+ { COMPLEX
+ { gsave setmatrix itransform 0 0 itransform
+ grestore .coord 4 2 roll .coord .orderrect
+ (I ) //print .show==4
+ }
+ { pop pop pop
+ }
+ ifelse
+ } odef
+/colorimage where
+ { pop /colorimage
+ { 1 index
+ { dup 6 add index 1 index 6 add index 2 index 5 add index }
+ { 6 index 6 index 5 index }
+ ifelse .noteimagerect gsave nulldevice //colorimage grestore
+ } codef
+ } if
+/.noteimage % Arguments as for image[mask]
+ { dup type /dicttype eq
+ { dup /Width get 1 index /Height get 2 index /ImageMatrix get }
+ { 4 index 4 index 3 index }
+ ifelse .noteimagerect
+ } odef
+/image { .noteimage gsave nulldevice //image grestore } codef
+/imagemask { .noteimage gsave nulldevice //imagemask grestore } codef
+
+% Output the current color if necessary.
+/.color.r .inew def
+ .color.r -1 .iput % make sure we write the color at the beginning
+/.color.g .inew def
+/.color.b .inew def
+/.showcolor
+ { COMPLEX
+ { currentrgbcolor
+ 1000 mul round cvi
+ 3 1 roll 1000 mul round cvi
+ exch 1000 mul round cvi
+ % Stack: b g r
+ dup //.color.r .iget eq
+ 2 index //.color.g .iget eq and
+ 3 index //.color.b .iget eq and
+ { pop pop pop
+ }
+ { (C ) //print
+ dup //.color.r exch .iput .show==only
+ ( ) //print dup //.color.g exch .iput .show==only
+ ( ) //print dup //.color.b exch .iput .show==only
+ (\n) //print
+ }
+ ifelse
+ }
+ if
+ } bind def
+
+% Redefine `show'.
+
+% Set things up so our output will be in tenths of a point, with origin at
+% lower left. This isolates us from the peculiarities of individual devices.
+
+/.show.ident.matrix matrix def
+/.show.ident { % - .show.ident <scale> <matrix>
+% //.show.ident.matrix defaultmatrix
+% % Assume the original transformation is well-behaved.
+% 0.1 0 2 index dtransform abs exch abs .max /.show.scale exch def
+% 0.1 dup 3 -1 roll scale
+ gsave initmatrix
+ % Assume the original transformation is well-behaved...
+ 0.1 0 dtransform abs exch abs .max
+ 0.1 dup scale .show.ident.matrix currentmatrix
+ % ... but undo any rotation into landscape orientation.
+ dup 0 get 0 eq {
+ 1 get dup abs div 90 mul rotate
+ .show.ident.matrix currentmatrix
+ } if
+ grestore
+} bind def
+
+/.coord { % <x> <y> .coord <x'> <y'>
+ transform .show.ident exch pop itransform
+ exch round cvi exch round cvi
+} odef
+
+/.dcoord { % <dx> <dy> .coord <dx'> <dy'>
+ % Transforming distances is trickier, because
+ % the coordinate system might be rotated.
+ .show.ident pop 3 1 roll
+ exch 0 dtransform
+ dup mul exch dup mul add sqrt
+ 2 index div round cvi
+ exch 0 exch dtransform
+ dup mul exch dup mul add sqrt
+ 3 -1 roll div round cvi
+} odef
+
+% Remember the current X, Y, and height.
+/.show.x .inew def
+/.show.y .inew def
+/.show.height .inew def
+
+% Remember the last character of the previous string; if it was a
+% hyphen preceded by a letter, we didn't output the hyphen.
+
+/.show.last (\000) def
+
+% Remember the current font.
+/.font.name 130 string def
+/.font.name.length .inew def
+/.font.height .inew def
+/.font.width .inew def
+
+%%* Also remember indentation of current line and previous vertical
+%%* skip
+
+/.show.indent .inew def
+/.show.dy .inew def
+
+% We have to redirect stdout somehow....
+
+/.show.stdout { (%stdout) (w) file } bind def
+
+% Make sure writing will work even if a program uses =string.
+/.show.string =string length string def
+/.show.=string =string length string def
+/.show==only
+ { //=string //.show.=string copy pop
+ dup type /stringtype eq
+ { dup length //.show.string length le
+ { dup rcheck { //.show.string copy } if
+ } if
+ } if
+ .show.stdout exch write==only
+ //.show.=string //=string copy pop
+ } odef
+/.show==4
+ { 4 -1 roll .show==only ( ) //print
+ 3 -1 roll .show==only ( ) //print
+ exch .show==only ( ) //print
+ .show==only (\n) //print
+ } odef
+
+/.showwidth % Same as stringwidth, but disable COMPLEX so that
+ % we don't try to detect rectangles during BuildChar.
+ { COMPLEX
+ { /COMPLEX false def stringwidth /COMPLEX true def }
+ { stringwidth }
+ ifelse
+ } odef
+
+/.showfont % <string> .showfont <string>
+ { gsave
+ % Try getting the height and width of the font from the FontBBox.
+ currentfont /FontBBox .knownget not { {0 0 0 0} } if
+ aload pop % llx lly urx ury
+ exch 4 -1 roll % lly ury urx llx
+ sub % lly ury dx
+ 3 1 roll exch % dx ury lly
+ sub % dx dy
+ 2 copy .max 0 ne
+ { currentfont /FontMatrix get dtransform
+ }
+ { pop pop
+ % Fonts produced by dvips, among other applications, have
+ % BuildChar procedures that bomb out when given unexpected
+ % characters, and there is no way to determine whether a given
+ % character will do this. So for Type 1 fonts, we measure a
+ % typical character ('X'); for others, we punt.
+ currentfont /FontType get 1 eq
+ { (X) .showwidth pop dup 1.3 mul
+ }
+ { % No safe way to get the character size. Punt.
+ 0 0
+ }
+ ifelse
+ }
+ ifelse .dcoord exch
+ currentfont /FontName .knownget not { () } if
+ dup type /stringtype ne { //.show.string cvs } if
+ grestore
+ % Stack: height width fontname
+ SIMPLE
+ { pop pop //.show.height exch .iput }
+ { 2 index //.font.height .iget eq
+ 2 index //.font.width .iget eq and
+ 1 index //.font.name 0 //.font.name.length .iget getinterval eq and
+ { pop pop pop
+ }
+ { (F ) //print
+ 3 -1 roll dup //.font.height exch .iput .show==only ( ) //print
+ exch dup //.font.width exch .iput .show==only ( ) //print
+ dup length //.font.name.length exch .iput
+ //.font.name cvs .show==only (\n) //print
+ }
+ ifelse
+ }
+ ifelse
+ } odef
+
+% Define the letters -- characters which, if they occur followed by a hyphen
+% at the end of a line, cause the hyphen and line break to be ignored.
+/.letter.chars 100 dict def
+mark
+ 65 1 90 { dup 32 add } for
+ counttomark
+ { StandardEncoding exch get .letter.chars exch dup put }
+ repeat
+pop
+
+%%* Add the rest of the letters from the [O]T1Encoding and
+%%* ISOLatin1Encoding vectors
+
+mark
+ /AE
+ /Aacute
+ /Abreve
+ /Acircumflex
+ /Adieresis
+ /Agrave
+ /Aogonek
+ /Aring
+ /Atilde
+ /Cacute
+ /Ccaron
+ /Ccedilla
+ /Dcaron
+ /Eacute
+ /Ecaron
+ /Ecircumflex
+ /Edieresis
+ /Egrave
+ /Eng
+ /Eogonek
+ /Eth
+ /Gbreve
+ /Germandbls
+ /IJ
+ /Iacute
+ /Icircumflex
+ /Idieresis
+ /Idot
+ /Igrave
+ /Lacute
+ /Lcaron
+ /Lslash
+ /Nacute
+ /Ncaron
+ /Ntilde
+ /OE
+ /Oacute
+ /Ocircumflex
+ /Odieresis
+ /Ograve
+ /Ohungarumlaut
+ /Oslash
+ /Otilde
+ /Racute
+ /Rcaron
+ /Sacute
+ /Scaron
+ /Scedilla
+ /Tcaron
+ /Tcedilla
+ /Thorn
+ /Uacute
+ /Ucircumflex
+ /Udieresis
+ /Ugrave
+ /Uhungarumlaut
+ /Uring
+ /Yacute
+ /Ydieresis
+ /Zacute
+ /Zcaron
+ /Zdot
+ /aacute
+ /abreve
+ /acircumflex
+ /adieresis
+ /ae
+ /agrave
+ /aogonek
+ /aring
+ /atilde
+ /cacute
+ /ccaron
+ /ccedilla
+ /dbar
+ /dcaron
+ /dotlessi
+ /dotlessj
+ /eacute
+ /ecaron
+ /ecircumflex
+ /edieresis
+ /egrave
+ /eng
+ /eogonek
+ /eth
+ /exclamdown
+ /ff
+ /ffi
+ /ffl
+ /fi
+ /fl
+ /gbreve
+ /germandbls
+ /iacute
+ /icircumflex
+ /idieresis
+ /igrave
+ /ij
+ /lacute
+ /lcaron
+ /lslash
+ /nacute
+ /ncaron
+ /ntilde
+ /oacute
+ /ocircumflex
+ /odieresis
+ /oe
+ /ograve
+ /ohungarumlaut
+ /oslash
+ /otilde
+ /questiondown
+ /racute
+ /rcaron
+ /sacute
+ /scaron
+ /scedilla
+ /section
+ /sterling
+ /tcaron
+ /tcedilla
+ /thorn
+ /uacute
+ /ucircumflex
+ /udieresis
+ /ugrave
+ /uhungarumlaut
+ /uring
+ /yacute
+ /ydieresis
+ /zacute
+ /zcaron
+ /zdot
+counttomark
+ { .letter.chars exch dup put }
+repeat
+pop
+
+% Define a set of characters which, if they occur at the start of a line,
+% are taken as indicating a paragraph break.
+/.break.chars 50 dict def
+mark
+ /bullet /dagger /daggerdbl /periodcentered /section
+ counttomark
+ { .break.chars exch dup put }
+ repeat
+pop
+
+% Define character translation to ASCII.
+% We have to do this for the entire character set.
+
+/.char.map 500 dict def
+
+/.chars.def { counttomark 2 idiv { .char.map 3 1 roll put } repeat pop } def
+
+% Encode the printable ASCII characters.
+
+mark 32 1 126
+ { 1 string dup 0 4 -1 roll put
+ dup 0 get StandardEncoding exch get exch
+ }
+for .chars.def
+
+ % Encode accents.
+mark
+ /acute (')
+ /caron (^)
+ /cedilla (,)
+ /circumflex (^)
+ /dieresis (")
+ /grave (`)
+ /ring (*)
+ /tilde (~)
+.chars.def
+
+ % Encode the ISO accented characters.
+mark 192 1 255
+ { ISOLatin1Encoding exch get =string cvs
+ dup 0 1 getinterval 1 index dup length 1 sub 1 exch getinterval
+ .char.map 2 index known .char.map 2 index known and
+ { .char.map 3 -1 roll get .char.map 3 -1 roll get concatstrings
+ .char.map 3 1 roll put
+ }
+ { pop pop pop
+ }
+ ifelse
+ }
+for .chars.def
+
+% Encode the remaining standard and ISO alphabetic characters.
+
+mark
+ /AE (AE) /Eth (DH) /OE (OE) /Thorn (Th)
+ /ae (ae) /eth (dh)
+ /ffi (ffi) /ffl (ffl) /fi (fi) /fl (fl)
+ /germandbls (ss) /oe (oe) /thorn (th)
+.chars.def
+
+% Encode the other standard and ISO characters.
+
+mark
+ /brokenbar (|) /bullet (*) /copyright ((C)) /currency (#)
+ /dagger (#) /daggerdbl (##) /degree (o) /divide (/) /dotaccent (.)
+ /dotlessi (i)
+ /ellipsis (...) /emdash (--) /endash (-) /exclamdown (!)
+ /florin (f) /fraction (/)
+ /guillemotleft (<<) /guillemotright (>>)
+ /guilsinglleft (<) /guilsinglright (>) /hungarumlaut ("") /logicalnot (~)
+ /macron (_) /minus (-) /mu (u) /multiply (*)
+ /ogonek (,) /onehalf (1/2) /onequarter (1/4) /onesuperior (1)
+ /ordfeminine (-a) /ordmasculine (-o)
+ /paragraph (||) /periodcentered (*) /perthousand (o/oo) /plusminus (+-)
+ /questiondown (?) /quotedblbase (") /quotedblleft (") /quotedblright (")
+ /quotesinglbase (,) /quotesingle (') /registered ((R))
+ /section ($) /sterling (#)
+ /threequarters (3/4) /threesuperior (3) /trademark ((TM)) /twosuperior (2)
+ /yen (Y)
+.chars.def
+
+% Encode a few common Symbol characters.
+
+mark
+ /asteriskmath (*) /copyrightsans ((C)) /copyrightserif ((C))
+ /greaterequal (>=) /lessequal (<=) /registersans ((R)) /registerserif ((R))
+ /trademarksans ((TM)) /trademarkserif ((TM))
+.chars.def
+
+%%* Add a few characters from StandardEncoding and ISOLatin1Encoding
+%%* that were missing.
+
+mark
+ /cent (c)
+ /guilsinglleft (<)
+ /guilsinglright (>)
+ /breve (*)
+ /Lslash (L/)
+ /lslash (l/)
+.chars.def
+
+%%* Define the OT1Encoding and T1Encoding vectors for use with dvips
+%%* files. Unfortunately, there's no way of telling what font is
+%%* really being used within a dvips document, so we can't provide an
+%%* appropriate encoding for each individual font. Instead, we'll
+%%* just provide support for the two most popular text encodings, the
+%%* OT1 and T1 encodings, and just accept the fact that any font not
+%%* using one of those encodings will be rendered as gibberish.
+%%*
+%%* OT1 is Knuth's 7-bit encoding for the CMR text fonts, while T1
+%%* (aka the Cork encoding) is the 8-bit encoding used by the DC
+%%* fonts, a preliminary version of the proposed Extended Computer
+%%* Modern fonts. Unfortunately, T1 is not a strict extension of OT1;
+%%* they differ in positions 8#000 through 8#040, 8#074, 8#076, 8#134,
+%%* 8#137, 8#173, 8#174, 8#175 and 8#177, so we can't use the same
+%%* vector for both.
+%%*
+%%* Of course, we also can't reliably tell the difference between an
+%%* OT1-encoded font and a T1-encoded font based on the information in
+%%* a dvips-created PostScript file. As a best-guess solution, we'll
+%%* use the T1 encoding if the font contains any characters in
+%%* positions above 8#177 and the OT1 encoding if it doesn't.
+
+/T1Encoding 256 array def
+
+/OT1Encoding 256 array def
+
+%%* T1Encoding shares a lot with StandardEncoding, so let's start
+%%* there.
+
+StandardEncoding T1Encoding copy pop
+
+/OT1.encode {
+ counttomark
+ 2 idiv
+ { OT1Encoding 3 1 roll put }
+ repeat
+ cleartomark
+} def
+
+/T1.encode {
+ counttomark
+ 2 idiv
+ { T1Encoding 3 1 roll put }
+ repeat
+ cleartomark
+} def
+
+mark
+ 8#000 /grave
+ 8#001 /acute
+ 8#002 /circumflex
+ 8#003 /tilde
+ 8#004 /dieresis
+ 8#005 /hungarumlaut
+ 8#006 /ring
+ 8#007 /caron
+
+ 8#010 /breve
+ 8#011 /macron
+ 8#012 /dotaccent
+ 8#013 /cedilla
+ 8#014 /ogonek
+ 8#015 /quotesinglbase
+ 8#016 /guilsinglleft
+ 8#017 /guilsinglright
+
+ 8#020 /quotedblleft
+ 8#021 /quotedblright
+ 8#022 /quotedblbase
+ 8#023 /guillemotleft
+ 8#024 /guillemotright
+ 8#025 /endash
+ 8#026 /emdash
+ 8#027 /cwm
+
+ 8#030 /perthousandzero
+ 8#031 /dotlessi
+ 8#032 /dotlessj
+ 8#033 /ff
+ 8#034 /fi
+ 8#035 /fl
+ 8#036 /ffi
+ 8#037 /ffl
+
+%% 8#040 through 8#176 follow StandardEncoding
+
+ 8#177 /hyphen
+T1.encode
+
+mark
+ 8#200 /Abreve
+ 8#201 /Aogonek
+ 8#202 /Cacute
+ 8#203 /Ccaron
+ 8#204 /Dcaron
+ 8#205 /Ecaron
+ 8#206 /Eogonek
+ 8#207 /Gbreve
+ 8#210 /Lacute
+ 8#211 /Lcaron
+ 8#212 /Lslash
+ 8#213 /Nacute
+ 8#214 /Ncaron
+ 8#215 /Eng
+ 8#216 /Ohungarumlaut
+ 8#217 /Racute
+ 8#220 /Rcaron
+ 8#221 /Sacute
+ 8#222 /Scaron
+ 8#223 /Scedilla
+ 8#224 /Tcaron
+ 8#225 /Tcedilla
+ 8#226 /Uhungarumlaut
+ 8#227 /Uring
+ 8#230 /Ydieresis
+ 8#231 /Zacute
+ 8#232 /Zcaron
+ 8#233 /Zdot
+ 8#234 /IJ
+ 8#235 /Idot
+ 8#236 /dbar
+ 8#237 /section
+ 8#240 /abreve
+ 8#241 /aogonek
+ 8#242 /cacute
+ 8#243 /ccaron
+ 8#244 /dcaron
+ 8#245 /ecaron
+ 8#246 /eogonek
+ 8#247 /gbreve
+ 8#250 /lacute
+ 8#251 /lcaron
+ 8#252 /lslash
+ 8#253 /nacute
+ 8#254 /ncaron
+ 8#255 /eng
+ 8#256 /ohungarumlaut
+ 8#257 /racute
+ 8#260 /rcaron
+ 8#261 /sacute
+ 8#262 /scaron
+ 8#263 /scedilla
+ 8#264 /tcaron
+ 8#265 /tcedilla
+ 8#266 /uhungarumlaut
+ 8#267 /uring
+ 8#270 /ydieresis
+ 8#271 /zacute
+ 8#272 /zcaron
+ 8#273 /zdot
+ 8#274 /ij
+ 8#275 /exclamdown
+ 8#276 /questiondown
+ 8#277 /sterling
+
+ 8#300 /Agrave
+ 8#301 /Aacute
+ 8#302 /Acircumflex
+ 8#303 /Atilde
+ 8#304 /Adieresis
+ 8#305 /Aring
+ 8#306 /AE
+ 8#307 /Ccedilla
+ 8#310 /Egrave
+ 8#311 /Eacute
+ 8#312 /Ecircumflex
+ 8#313 /Edieresis
+ 8#314 /Igrave
+ 8#315 /Iacute
+ 8#316 /Icircumflex
+ 8#317 /Idieresis
+ 8#320 /Eth
+ 8#321 /Ntilde
+ 8#322 /Ograve
+ 8#323 /Oacute
+ 8#324 /Ocircumflex
+ 8#325 /Otilde
+ 8#326 /Odieresis
+ 8#327 /OE
+ 8#330 /Oslash
+ 8#331 /Ugrave
+ 8#332 /Uacute
+ 8#333 /Ucircumflex
+ 8#334 /Udieresis
+ 8#335 /Yacute
+ 8#336 /Thorn
+ 8#337 /Germandbls
+
+ 8#340 /agrave
+ 8#341 /aacute
+ 8#342 /acircumflex
+ 8#343 /atilde
+ 8#344 /adieresis
+ 8#345 /aring
+ 8#346 /ae
+ 8#347 /ccedilla
+ 8#350 /egrave
+ 8#351 /eacute
+ 8#352 /ecircumflex
+ 8#353 /edieresis
+ 8#354 /igrave
+ 8#355 /iacute
+ 8#356 /icircumflex
+ 8#357 /idieresis
+ 8#360 /eth
+ 8#361 /ntilde
+ 8#362 /ograve
+ 8#363 /oacute
+ 8#364 /ocircumflex
+ 8#365 /otilde
+ 8#366 /odieresis
+ 8#367 /oe
+ 8#370 /oslash
+ 8#371 /ugrave
+ 8#372 /uacute
+ 8#373 /ucircumflex
+ 8#374 /udieresis
+ 8#375 /yacute
+ 8#376 /thorn
+ 8#377 /germandbls
+
+T1.encode
+
+%%* Now copy OT1Encoding into T1Encoding and make a few changes.
+
+T1Encoding OT1Encoding copy pop
+
+mark
+ 8#000 /Gamma
+ 8#001 /Delta
+ 8#002 /Theta
+ 8#003 /Lambda
+ 8#004 /Xi
+ 8#005 /Pi
+ 8#006 /Sigma
+ 8#007 /Upsilon
+
+ 8#010 /Phi
+ 8#011 /Psi
+ 8#012 /Omega
+ 8#013 /ff
+ 8#014 /fi
+ 8#015 /fl
+ 8#016 /ffi
+ 8#017 /ffl
+
+ 8#020 /dotlessi
+ 8#021 /dotlessj
+ 8#022 /grave
+ 8#023 /acute
+ 8#024 /caron
+ 8#025 /breve
+ 8#026 /macron
+ 8#027 /ring
+
+ 8#030 /cedilla
+ 8#031 /germandbls
+ 8#032 /ae
+ 8#033 /oe
+ 8#034 /oslash
+ 8#035 /AE
+ 8#036 /OE
+ 8#037 /Oslash
+
+ 8#040 /polishslash
+
+ 8#042 /quotedblright
+
+ 8#074 /exclamdown
+ 8#076 /questiondown
+
+ 8#134 /quotedblleft
+ 8#137 /dotaccent
+
+ 8#173 /endash
+ 8#174 /emdash
+ 8#175 /hungarumlaut
+ 8#177 /dieresis
+OT1.encode
+
+%%* And add a few characters from the OT1Encoding
+
+mark
+ /Gamma (\\Gamma )
+ /Delta (\\Delta )
+ /Theta (\\Theta )
+ /Lambda (\\Lambda )
+ /Xi (\\Xi )
+ /Pi (\\Pi )
+ /Sigma (\\Sigma )
+ /Upsilon (\\Upsilon )
+
+ /Phi (\\Phi )
+ /Psi (\\Psi )
+ /Omega (\\Omega )
+
+ /dotlessj (j)
+ /ff (ff)
+
+ /cwm ()
+
+ /perthousandzero (0)
+
+ /polishslash ()
+
+ /Abreve (A*)
+ /Aogonek (A,)
+ /Cacute (C')
+ /Ccaron (C^)
+ /Dcaron (D^)
+ /Ecaron (E^)
+ /Eogonek (E,)
+ /Gbreve (G*)
+ /Lacute (L')
+ /Lcaron (L^)
+ /Nacute (N')
+ /Ncaron (N^)
+ /Eng (NG)
+ /Ohungarumlaut (O"")
+ /Racute (R')
+ /Rcaron (R^)
+ /Sacute (S')
+ /Scaron (S^)
+ /Scedilla (S,)
+ /Tcaron (T^)
+ /Tcedilla (T,)
+ /Uhungarumlaut (U"")
+ /Uring (U*)
+ /Ydieresis (Y")
+ /Zacute (Z')
+ /Zcaron (Z^)
+ /Zdot (Z.)
+ /IJ (IJ)
+ /Idot (I.)
+ /dbar (d-)
+ /abreve (a*)
+ /aogonek (a,)
+ /cacute (c')
+ /ccaron (c^)
+ /dcaron (d^)
+ /ecaron (e^)
+ /eogonek (e,)
+ /gbreve (g*)
+ /lacute (l')
+ /lcaron (l^)
+ /nacute (n')
+ /ncaron (n^)
+ /eng (ng)
+ /ohungarumlaut (o"")
+ /racute (r')
+ /rcaron (r^)
+ /sacute (s')
+ /scaron (s^)
+ /scedilla (s,)
+ /tcaron (t^)
+ /tcedilla (t,)
+ /uhungarumlaut (u"")
+ /uring (u*)
+ /zacute (z')
+ /zcaron (z^)
+ /zdot (z.)
+ /ij (ij)
+ /Germandbls (SS)
+.chars.def
+
+%%* We extend the df-tail command to stick in an Encoding vector (see
+%%* above for a discussion of the T1 and OT1 encodings), put in a
+%%* FontName (which will just be dvips's name for the font, i.e., Fa,
+%%* Fb, etc.) and give each font a separate FontBBox instead of
+%%* letting them all share a single one.
+
+/dvips.df-tail % id numcc maxcc df-tail
+ {
+ /nn 9 dict N
+ nn begin
+ %%
+ %% Choose an encoding based on the highest position occupied.
+ %%
+ dup 128 gt { T1Encoding } { OT1Encoding } ifelse
+ /Encoding X
+ /FontType 3 N
+ %%
+ %% It's ok for all the fonts to share a FontMatrix, but they
+ %% need to have separate FontBBoxes
+ %%
+ /FontMatrix fntrx N
+ /FontBBox [0 0 0 0] N
+ string /base X
+ array /BitMaps X
+ %%
+ %% And let's throw in a FontName for good measure
+ %%
+ dup ( ) cvs
+ %%
+ %% Make sure each font gets it own private FontName. -- dmj,
+ %% 12/23/97
+ %%
+ dup length string copy
+ /FontName X
+ /BuildChar {CharBuilder} N
+ end
+ dup { /foo setfont }
+ 2 array copy cvx N
+ load
+ 0 nn put
+ /ctr 0 N
+ [
+} def
+
+%%* This is functionally equivalent to dvips's /D procedure, but it
+%%* also calculates the Font Bounding Box while defining the
+%%* characters.
+
+/dvips.D % char-data ch D - : define character bitmap in current font
+{
+ /cc X % char-data
+ dup type /stringtype ne {]} if % char-data
+
+ /ch-data X
+ nn /base get cc ctr put % (adds ctr to cc'th position of BASE)
+ nn /BitMaps get
+ ctr
+ ch-data % BitMaps ctr char-data
+ sf 1 ne {
+ dup dup length 1 sub dup 2 index S get sf div put
+ } if
+ put % puts char-data into BitMaps at index ctr
+ /ctr ctr 1 add N
+%%
+%% Make sure the Font Bounding Box encloses the Bounding Box of the
+%% current character
+%%
+ nn /FontBBox get % BB
+
+ dup % calculate new llx
+ dup 0 get
+ ch-xoff
+ .min
+ 0 exch put
+
+ dup % calculate new lly
+ dup 1 get
+ ch-yoff ch-height sub
+ .min
+ 1 exch put
+
+ dup % calculate new urx
+ dup 2 get
+ ch-dx ch-width add
+ .max
+ 2 exch put
+
+ dup 3 get % calculate new ury
+ ch-yoff
+ .max
+ 3 exch put
+
+} def
+
+%%* Define start-hook to replace df-tail and D by our versions.
+%%* Unfortunately, the user can redefine start-hook and thus bypass
+%%* these changes, but I don't see an obvious way around that.
+
+userdict /start-hook {
+ TeXDict /df-tail /dvips.df-tail load bind put
+ TeXDict /D /dvips.D load bind put
+} put
+
+%%* Introduce a symbolic constant for hyphens. (Need to make
+%%* allowance for hyphen being in different place?)
+
+/.hyphen 45 def
+
+% Write out a string. If it ends in a letter and a hyphen,
+% don't write the hyphen, and set .show.last to a hyphen;
+% otherwise, set .show.last to the character (or \000 if it was a hyphen).
+/.show.write % <string>
+ {
+ dup length 1 ge
+ { dup dup length 1 sub get % string last_char
+ dup .hyphen eq % string last_char hyphen?
+ { % string last_char
+ 1 index length 1 gt
+ { 1 index dup length 2 sub get }
+ { //.show.last 0 get }
+ ifelse % string last_char prev-char
+ currentfont /Encoding get exch get % look up prev-char
+ //.letter.chars exch known % is it a letter?
+ { % Remove the hyphen % string last_char
+ exch % last_char string
+ dup length 1 sub % last_char string len-1
+ 0 exch getinterval % last_char string-1
+ exch % string-1 last_char
+ }
+ { pop 0 } % string 0
+ ifelse
+ }
+ if
+ //.show.last 0 3 -1 roll put % store last_char
+ % in .show.last
+ % If .show.last ==
+ % hyphen, then
+ % last char of
+ % previous string
+ % was a hyphen
+ }
+ if % string
+ { % begin forall % c
+ dup % c c
+ currentfont /Encoding get % c c vec
+ exch get % c name
+ dup //.char.map exch known % c name bool
+ { exch pop }
+ { pop OT1Encoding exch get }
+ ifelse % name
+ //.char.map exch get % translation
+ .show.stdout exch writestring
+ }
+ forall
+} odef
+
+/.showstring1 { % string
+ currentpoint .coord % string x y
+ 3 -1 roll dup .showwidth % x y string dx dy
+ 1 index % x y string dx dy dx
+ 0 rmoveto % x y string dx dy
+ .dcoord pop % x y string width
+ SIMPLE
+ { % x y string width
+ 2 index % x y string width y
+ //.show.y .iget % x y string width y old.y
+ %%*
+ %%* Replaced test "has y changed" by "has y changed by more
+ %%* than the current font height" so that subscripts and
+ %%* superscripts won't cause line/paragraph breaks
+ %%*
+ sub abs dup % x y string width dy dy
+ //.show.height .iget
+ gt
+ { % x y string width dy
+
+ %%* Vertical position has changed by more than the font
+ %%* height, so we now try to figure out whether we've
+ %%* started a new paragraph or merely a new line, using a
+ %%* variety of heuristics.
+
+ %%* If any of the following is true, we start a new
+ %%* paragraph:
+
+ %%* (a) the current vertical shift is more than 1.1 times
+ %%* the previous vertical shift, where 1.1 is an
+ %%* arbitrarily chosen factor that could probably be
+ %%* refined.
+
+ dup % x y string width dy dy
+ //.show.dy .iget 1.1 mul
+ gt
+ exch
+
+ %%* Save the new vertical shift
+
+ //.show.dy exch .iput
+
+ %%* (b) The vertical shift is more than 1.3 times the
+ %%* "size" of the current font. I've removed this
+ %%* test since it's not really very useful.
+
+%%* //.show.dy .iget
+%%* //.show.height .iget 1.4 mul
+%%* gt % x y string width bool
+%%* .show.height .iget 0 gt and % only perform test if font
+%%* % height is nonzero
+%%* or
+
+ %%* (c) the first character of the new line is one of the
+ %%* .break.chars
+
+ 2 index length % x y string width newpar? len
+ 0 gt % x y string width newpar? len>0?
+ {
+ 2 index 0 get % x y string width newpar? s
+ currentfont /Encoding get
+ exch get % x y string width newpar? s_enc
+ //.break.chars exch known { pop true } if
+ }
+ if % x y string width newpar?
+
+ %%* (d) The indentation of the new line is greater than
+ %%* the indentation of the previous line.
+
+ 4 index
+ //.show.indent .iget
+ gt
+ or
+
+ %%* HOWEVER, if the line ends in a hyphen, we do NOT begin
+ %%* a new paragraph (cf. comment at end of BF2). --dmj,
+ %%* 12/23/97
+
+ //.show.last 0 get .hyphen ne
+ and
+
+ % newpar?
+ { (\n\n) } % Paragraph
+ { % Line
+ %%*
+ %%* BF2: If last character on a line is
+ %%* a hyphen, we omit the hyphen and
+ %%* run the lines together. Of
+ %%* course, this will fail if a word
+ %%* with an explicit hyphen (e.g.,
+ %%* X-ray) is split across two lines.
+ %%* Oh, well. (What should we do
+ %%* about a hyphen that ends a
+ %%* "paragraph"? Perhaps that should
+ %%* inhibit a paragraph break.)
+ %%*
+ //.show.last 0 get .hyphen eq
+ { () }
+ { ( ) }
+ ifelse % x y string width char
+ }
+ ifelse
+ //print
+
+ //.show.y 3 index .iput % x y string width
+ //.show.x 4 index .iput % x y string width
+ //.show.indent 4 index .iput
+ }
+ { % x y string width dy
+ % If the word processor split a hyphenated word within
+ % the same line, put out the hyphen now.
+ pop
+ //.show.last 0 get .hyphen eq { (-) //print } if
+ }
+ ifelse
+ %%*
+ %%* If have moved more than 1 point to
+ %%* the right, interpret it as a
+ %%* space? This need to be looked at
+ %%* more closely.
+ %%*
+ 3 index % x y string width x
+ //.show.x .iget 10 add gt % x y string width bool
+ { ( ) //print }
+ if
+ % x y string width
+ 4 1 roll % width x y string
+ .show.write pop % width x
+ add //.show.x exch .iput % <empty>
+ }
+ { (S ) //print .show==4 }
+ ifelse
+} odef
+
+/.showstring
+ { dup () eq { pop } { .showstring1 } ifelse
+ } bind def
+
+% Redefine all the string display operators.
+
+/show {
+ .showfont
+ .showcolor
+ .showstring
+} codef
+
+% We define all the other operators in terms of .show1.
+
+/.show1.string ( ) def
+/.show1 { //.show1.string exch 0 exch put //.show1.string .showstring } odef
+/ashow
+ { .showfont .showcolor
+ { .show1 2 copy rmoveto } forall
+ pop pop
+ } codef
+/awidthshow
+ { .showfont .showcolor
+ { dup .show1 4 index eq { 4 index 4 index rmoveto } if
+ 2 copy rmoveto
+ }
+ forall
+ pop pop pop pop pop
+ } codef
+/widthshow
+ { .showfont .showcolor
+ //.show1.string 0 4 -1 roll put
+ { //.show1.string search not { exit } if
+ .showstring .showstring
+ 2 index 2 index rmoveto
+ } loop
+ .showstring pop pop
+ } codef
+/kshow
+ { .showfont .showcolor
+ %**************** Should construct a closure, in case the procedure
+ %**************** affects the o-stack.
+ { .show1 dup exec } forall pop
+ } codef
+
+% We don't really do the right thing with the Level 2 show operators,
+% but we do something semi-reasonable.
+/xshow { pop show } codef
+/yshow { pop show } codef
+/xyshow { pop show } codef
+/glyphshow
+ { currentfont /Encoding .knownget not { {} } if
+ 0 1 2 index length 1 sub
+ { % Stack: glyph encoding index
+ 2 copy get 3 index eq { exch pop exch pop null exit } if
+ pop
+ }
+ for null eq { (X) dup 0 4 -1 roll put show } { pop } ifelse
+ } codef
+
+end
+
+% Bind the operators we just defined, and all the others if we didn't
+% do it before. Also reenable 'bind' for future files.
+
+.bindoperators
+NOBIND currentdict systemdict ne and
+ { systemdict begin .bindoperators end }
+if
+NOBIND
+ { /bind /.bind load def }
+if
+
+% Make systemdict read-only if it wasn't already.
+
+systemdict wcheck { systemdict readonly pop } if
+
+% Restore the current local/global VM mode.
+
+exec
+
+
diff --git a/Master/xemtex/gslib/ps2epsi b/Master/xemtex/gslib/ps2epsi
new file mode 100644
index 00000000000..8e349d205a1
--- /dev/null
+++ b/Master/xemtex/gslib/ps2epsi
@@ -0,0 +1,78 @@
+#!/bin/sh
+# $Id: ps2epsi,v 1.7.2.1 2002/04/22 20:18:24 giles Exp $
+
+tmpfile=/tmp/ps2epsi$$
+
+export outfile
+
+if [ $# -lt 1 -o $# -gt 2 ]; then
+ echo "Usage: `basename $0` file.ps [file.epsi]" 1>&2
+ exit 1
+fi
+
+infile=$1;
+
+if [ $# -eq 1 ]
+then
+ case "${infile}" in
+ *.ps) base=`basename "${infile}" .ps` ;;
+ *.cps) base=`basename "${infile}" .cps` ;;
+ *.eps) base=`basename "${infile}" .eps` ;;
+ *.epsf) base=`basename "${infile}" .epsf` ;;
+ *) base=`basename "${infile}"` ;;
+ esac
+ outfile=${base}.epsi
+else
+ outfile=$2
+fi
+
+ls -l "${infile}" |
+awk 'F==1 {
+ cd="%%CreationDate: " $6 " " $7 " " $8;
+ t="%%Title: " $9;
+ f="%%For:" U " " $3;
+ c="%%Creator: Ghostscript ps2epsi from " $9;
+ next;
+ }
+ /^%!/ {next;}
+ /^%%Title:/ {t=$0; next;}
+ /^%%Creator:/ {c=$0; next;}
+ /^%%CreationDate:/ {cd=$0; next;}
+ /^%%For:/ {f=$0; next;}
+ !/^%/ {
+ print "/ps2edict 30 dict def";
+ print "ps2edict begin";
+ print "/epsititle (" t "\\n) def";
+ print "/epsicreator (" c "\\n) def";
+ print "/epsicrdt (" cd "\\n) def";
+ print "/epsifor (" f "\\n) def";
+ print "end";
+ exit(0);
+ }
+ ' U="$USERNAME$LOGNAME" F=1 - F=2 "${infile}" >$tmpfile
+
+gs -q -dNOPAUSE -dSAFER -dDELAYSAFER -r72 -sDEVICE=bit -sOutputFile=/dev/null $tmpfile ps2epsi.ps $tmpfile <"${infile}" 1>&2
+rm -f $tmpfile
+
+(
+cat << BEGINEPS
+save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def
+%%EndProlog
+%%Page: 1 1
+%%BeginDocument: ${infile}
+BEGINEPS
+
+cat "${infile}" |
+sed -e '/^%%BeginPreview:/,/^%%EndPreview[^!-~]*$/d' -e '/^%!PS-Adobe/d'\
+ -e '/^%%[A-Za-z][A-Za-z]*[^!-~]*$/d' -e '/^%%[A-Za-z][A-Za-z]*: /d'
+
+cat << ENDEPS
+%%EndDocument
+%%Trailer
+cleartomark countdictstack exch sub { end } repeat restore
+%%EOF
+ENDEPS
+
+) >> "${outfile}"
+
+exit 0
diff --git a/Master/xemtex/gslib/ps2epsi.bat b/Master/xemtex/gslib/ps2epsi.bat
new file mode 100644
index 00000000000..53ff10d1aac
--- /dev/null
+++ b/Master/xemtex/gslib/ps2epsi.bat
@@ -0,0 +1,28 @@
+@echo off
+@rem $Id: ps2epsi.bat,v 1.6 2001/06/22 16:09:22 lpd Exp $
+
+if %1/==/ goto usage
+if %2/==/ goto usage
+
+call gssetgs.bat
+set infile=%1
+set outfile=%2
+
+rem Ghostscript uses %outfile% to define the output file
+%GSC% -q -dNOPAUSE -dSAFER -dDELAYSAFER -sDEVICE=bit -sOutputFile=NUL ps2epsi.ps < %infile%
+
+rem We bracket the actual file with a few commands to help encapsulation
+echo /InitDictCount countdictstack def gsave save mark newpath >> %outfile%
+
+rem Append the original onto the preview header
+copy %outfile% + %infile%
+
+echo countdictstack InitDictCount sub { end } repeat >> %outfile%
+echo cleartomark restore grestore >> %outfile%
+
+goto end
+
+:usage
+echo "Usage: ps2epsi <infile.ps> <outfile.epi>"
+
+:end
diff --git a/Master/xemtex/gslib/ps2epsi.cmd b/Master/xemtex/gslib/ps2epsi.cmd
new file mode 100755
index 00000000000..d5a0f52ccba
--- /dev/null
+++ b/Master/xemtex/gslib/ps2epsi.cmd
@@ -0,0 +1,31 @@
+/* $Id: ps2epsi.cmd,v 1.3 2001/06/22 16:09:22 lpd Exp $ */
+/*
+ * This file is maintained by a user: if you have any questions about it,
+ * please contact Mark Hale (mark.hale@physics.org).
+ */
+
+@echo off
+if %1/==/ goto usage
+if %2/==/ goto usage
+
+set infile=%1
+set outfile=%2
+
+rem Ghostscript uses %outfile% to define the output file
+gsos2 -q -dNOPAUSE -dSAFER -dDELAYSAFER -sDEVICE=bit -sOutputFile=NUL ps2epsi.ps < %infile%
+
+rem We bracket the actual file with a few commands to help encapsulation
+echo /InitDictCount countdictstack def gsave save mark newpath >> %outfile%
+
+rem Append the original onto the preview header
+copy %outfile% + %infile%
+
+echo countdictstack InitDictCount sub { end } repeat >> %outfile%
+echo cleartomark restore grestore >> %outfile%
+
+goto end
+
+:usage
+echo "Usage: ps2epsi <infile.ps> <outfile.epi>"
+
+:end
diff --git a/Master/xemtex/gslib/ps2epsi.ps b/Master/xemtex/gslib/ps2epsi.ps
new file mode 100644
index 00000000000..0bd22288def
--- /dev/null
+++ b/Master/xemtex/gslib/ps2epsi.ps
@@ -0,0 +1,248 @@
+% Copyright (C) 1990-2002 artofcode LLC. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: ps2epsi.ps,v 1.5.2.3.2.1 2003/04/12 14:02:39 giles Exp $
+% Convert an arbitrary PostScript file to an EPSI file.
+%
+% Please do not contact these users if you have questions. They no longer
+% have the time, interest, or current expertise to keep this code working.
+% If you find bugs, please send proposed fixes to bug-gs@aladdin.com.
+%
+% Bug fix 2002-04-20 by rayjj: Bounding box was incorrect since it depended
+% on the dither pattern and gray shade at the boundary. Changed to use
+% 8-bit grayscale preview image to allow correct bounding box (at the
+% expense of a 8x larger preview image). Also moved .setsafe until after
+% the device and file operations are complete (but still before the input
+% file is processed.
+% Bug fix 2000-04-11 by lpd: if a font didn't have a FontName (which is the
+% case for bitmap fonts produced by recent versions of dvips), setfont
+% caused an error.
+% Bug fix 8/21/99 by lpd: many of the margin and width computations were
+% wrong (off by 1). The code only "worked" because the bugs were
+% (mostly) in conservative directions.
+% Modified 3/17/98 by lpd to make it possible to run this file without
+% running the ps2epsi script first, for debugging.
+% Bug fix 9/29/97 by lpd <ghost@aladdin.com>: if the page size wasn't an
+% exact multiple of 8 bits, an incorrect bounding box (or a rangecheck
+% error) could occur.
+% Patched 7/26/95 by
+% Greg P. Kochanski <gpk@bell-labs.com>
+% to add many new DSC comments and make the comments conforming.
+% Original version contributed by
+% George Cameron <george@bio-medical-physics.aberdeen.ac.uk>
+%
+
+% Initialize, and redefine copypage and showpage.
+
+% ps2edict is normally defined in the pre-loaded code created by the
+% ps2epsi script.
+/ps2edict where { pop } { /ps2edict 25 dict def } ifelse
+ps2edict begin
+
+ % The main procedure
+ /ps2epsi
+ { % Open the file
+ outfile (w) file /epsifile exch def
+ % Get the device parameters
+ currentdevice getdeviceprops .dicttomark
+ /HWSize get aload pop
+ /devheight exch def
+ /devwidth exch def
+ matrix defaultmatrix
+ /devmatrix exch def
+ % Make a corresponding 8-bit deep memory device
+ devmatrix devwidth devheight
+ 256 string 0 1 255 { 1 index exch dup 255 exch sub put } for
+ makeimagedevice
+ /arraydevice exch def
+ arraydevice
+ % Turn on anti-aliasing
+ mark /TextAlphaBits 4 /GraphicsAlphaBits 4 6 -1 roll
+ putdeviceprops
+ setdevice % (does an erasepage)
+ /rowwidth devwidth def
+ /row rowwidth string def
+ /zerorow rowwidth string def % all zero
+ % Replace the definition of showpage
+ userdict /showpage { ps2edict begin epsipage end } bind put
+ userdict /setfont { ps2edict begin epsisetfont end } bind put
+ //systemdict /.setsafe known { .setsafe } if
+ } bind def
+
+ /epsifontdict 100 dict def
+
+ /epsisetfont
+ {
+ % code here keeps a list of font names in dictionary epsifontdict
+ /tmpfont exch def
+ tmpfont /FontName known {
+ /tmpfontname tmpfont /FontName get def
+ epsifontdict tmpfontname known not { epsifontdict tmpfontname 0 put } if
+ epsifontdict tmpfontname 2 copy get 1 add put
+ } if
+ tmpfont setfont
+ } bind def
+
+% Get a scan line from the memory device, zeroing any bits beyond
+% the device width.
+/getscanline { % <device> <y> <string> getscanline <string>
+ dup 4 1 roll copyscanlines pop
+ 16#ff00 devwidth 7 and neg bitshift 255 and
+ dup 0 ne {
+ 1 index dup length 1 sub 2 copy get 4 -1 roll and put
+ } {
+ pop
+ } ifelse
+} bind def
+
+/margintest { % <y-start> <step> <y-limit> margintest <y-non-blank>
+ % <y-start> <step> <y-limit> margintest -
+ { dup arraydevice exch row getscanline
+ zerorow ne { exit } if pop
+ } for
+} bind def
+
+
+ /epsiNameStr 200 string def
+ /epsiNpages 0 def
+ /epsiNpageStr 20 string def
+ /epsipage
+ {
+ /epsiNpages epsiNpages 1 add def
+ /loopcount devheight 1 sub def
+
+ % Find top margin -- minimum Y of non-blank scan line.
+ -1 0 1 loopcount margintest
+ dup -1 eq { (blank page!!\n) print quit }{ exch pop } ifelse
+ /tm exch def
+
+ % Find bottom margin -- maximum Y of non-blank scan line.
+ loopcount -1 0 margintest
+ /bm exch def
+
+ % Initialise limit variables
+ /loopcount rowwidth 1 sub def
+ /lm loopcount def
+ /rm 0 def
+
+ % Find left and right boundaries of image
+ tm 1 bm
+ { % Get more data
+ arraydevice exch row getscanline pop
+ % Scan from left to find first non-zero element
+ % We save first the element, then the index
+ -1 0 1 loopcount
+ { dup row exch get 0 ne { exch pop exit }{ pop } ifelse
+ } for
+ % If we found -1, row is blank ..
+ dup -1 ne
+ { % Find the leftmost index
+ dup lm lt
+ % If the new index is less, we save index and element
+ { /lm exch def } { pop } ifelse
+ % Now find the rightmost index
+ loopcount -1 0
+ { dup row exch get 0 ne { exit }{ pop } ifelse
+ } for
+ dup rm gt
+ % If the new index is greater, we save index and element
+ { /rm exch def } { pop } ifelse
+ } if
+ } for
+
+ % Calculate the bounding box values.
+ % Note that these must be corrected to produce closed-open intervals.
+ /llx lm def
+ /lly devheight bm sub 1 sub def
+ /urx rm 1 add def
+ /ury devheight tm sub def
+
+ % Write out the magic string and bounding box information
+ epsifile (%!PS-Adobe-2.0 EPSF-1.2\n) writestring
+ /epsititle where { pop epsifile epsititle writestring } if
+ /epsicreator where { pop epsifile epsicreator writestring } if
+ /epsicrdt where { pop epsifile epsicrdt writestring } if
+ /epsifor where { pop epsifile epsifor writestring } if
+ epsifile flushfile
+
+ % Write out the page count:
+ epsifile (%%Pages: ) writestring
+ epsifile epsiNpages epsiNpageStr cvs writestring
+ epsifile (\n) writestring
+ epsifile flushfile
+
+ % Write out the list of used fonts:
+ epsifile (%%DocumentFonts:) writestring
+ epsifontdict {
+ epsifile ( ) writestring
+ pop epsiNameStr cvs epsifile exch writestring
+ } forall
+ epsifile (\n) writestring
+ epsifile flushfile
+
+ epsifile (%%BoundingBox: ) writestring
+ epsifile llx write==only epsifile ( ) writestring
+ epsifile lly write==only epsifile ( ) writestring
+ epsifile urx write==only epsifile ( ) writestring
+ epsifile ury write==
+
+ % Define character and bit widths for the output line buffer:
+ /cwidth rm lm sub 1 add def
+ /out cwidth string def
+
+ epsifile (%%BeginPreview: ) writestring
+ epsifile cwidth write==only epsifile ( ) writestring
+ epsifile bm tm sub 1 add write==only epsifile ( 8 ) writestring
+ epsifile bm tm sub 1 add
+ cwidth 39 add 40 idiv mul write==
+ epsifile flushfile
+
+ gsave
+
+ tm 1 bm
+ { % Get a scan line interval from the array device
+ arraydevice exch row copyscanlines lm cwidth getinterval
+ % Write out the hex data as 40 bytes per line (82 chars)
+ 0 40 cwidth
+ { epsifile (% ) writestring
+ epsifile exch 2 index exch
+ dup cwidth exch sub 40 .min getinterval writehexstring
+ epsifile (\n) writestring
+ } for
+ pop
+ } for
+
+ epsifile (%%EndImage\n) writestring
+ epsifile (%%EndPreview\n) writestring
+ epsifile flushfile
+ grestore
+ erasepage initgraphics
+
+ DonePage 0 1 put
+ } bind def
+
+
+(outfile) getenv
+ { /outfile exch def
+ ps2epsi
+
+ /DonePage 1 string def
+ (%stdin) (r) file cvx execute0
+ DonePage 0 get 0 eq { showpage } if
+ } if
+
+end
+quit
diff --git a/Master/xemtex/gslib/ps2pdf b/Master/xemtex/gslib/ps2pdf
new file mode 100644
index 00000000000..1f4c8376531
--- /dev/null
+++ b/Master/xemtex/gslib/ps2pdf
@@ -0,0 +1,7 @@
+#!/bin/sh
+# $Id: ps2pdf,v 1.1 2000/03/09 08:40:40 lpd Exp $
+# Convert PostScript to PDF.
+
+# Currently, we produce PDF 1.2 by default, but this is not guaranteed
+# not to change in the future.
+exec ps2pdf12 "$@"
diff --git a/Master/xemtex/gslib/ps2pdf.bat b/Master/xemtex/gslib/ps2pdf.bat
new file mode 100644
index 00000000000..4abdf2becaf
--- /dev/null
+++ b/Master/xemtex/gslib/ps2pdf.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem $Id: ps2pdf.bat,v 1.6 2001/06/22 16:09:22 lpd Exp $
+
+rem Convert PostScript to PDF 1.2 (Acrobat 3-and-later compatible).
+rem The default PDF compatibility level may change in the future:
+rem use ps2pdf12 or ps2pdf13 if you want a specific level.
+
+rem The current default compatibility level is PDF 1.2.
+echo -dCompatibilityLevel#1.2 >_.at
+goto bot
+
+rem Pass arguments through a file to avoid overflowing the command line.
+:top
+echo %1 >>_.at
+shift
+:bot
+if not %3/==/ goto top
+call ps2pdfxx %1 %2
diff --git a/Master/xemtex/gslib/ps2pdf.cmd b/Master/xemtex/gslib/ps2pdf.cmd
new file mode 100755
index 00000000000..1ca35f2f416
--- /dev/null
+++ b/Master/xemtex/gslib/ps2pdf.cmd
@@ -0,0 +1,43 @@
+/* $Id: ps2pdf.cmd,v 1.1 2000/07/05 16:21:13 lpd Exp $ */
+/*
+ * This file is maintained by a user: if you have any questions about it,
+ * please contact Mark Hale (mark.hale@physics.org).
+ */
+
+/* Convert PostScript to PDF 1.3 (Acrobat 4-and-later compatible). */
+/* The PDF compatibility level may change in the future: */
+/* use ps2pdf12 or ps2pdf13 if you want a specific level. */
+
+parse arg params
+
+gs='@gsos2'
+inext='.ps'
+outext='.pdf'
+
+if params='' then call usage
+
+options=''
+
+/* extract options from command line */
+i=1
+param=word(params,i)
+do while substr(param,1,1)='-'
+ options=options param
+ i=i+1
+ param=word(params,i)
+end
+
+infile=param
+if infile='' then call usage
+outfile=word(params,i+1)
+if outfile='' then do
+ outfile=infile''outext
+ infile=infile''inext
+end
+
+gs options '-q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile='outfile options '-c save pop -f' infile
+exit
+
+usage:
+say 'Usage: ps2pdf [options...] input[.ps output.pdf]'
+exit
diff --git a/Master/xemtex/gslib/ps2pdf12 b/Master/xemtex/gslib/ps2pdf12
new file mode 100644
index 00000000000..885960a0476
--- /dev/null
+++ b/Master/xemtex/gslib/ps2pdf12
@@ -0,0 +1,5 @@
+#!/bin/sh
+# $Id: ps2pdf12,v 1.1 2000/03/09 08:40:40 lpd Exp $
+# Convert PostScript to PDF 1.2 (Acrobat 3-and-later compatible).
+
+exec ps2pdfwr -dCompatibilityLevel=1.2 "$@"
diff --git a/Master/xemtex/gslib/ps2pdf12.bat b/Master/xemtex/gslib/ps2pdf12.bat
new file mode 100644
index 00000000000..c18d30c2f30
--- /dev/null
+++ b/Master/xemtex/gslib/ps2pdf12.bat
@@ -0,0 +1,15 @@
+@echo off
+@rem $Id: ps2pdf12.bat,v 1.5 2001/06/22 16:09:22 lpd Exp $
+
+rem Convert PostScript to PDF 1.2 (Acrobat 3-and-later compatible).
+
+echo -dCompatibilityLevel#1.2 >_.at
+goto bot
+
+rem Pass arguments through a file to avoid overflowing the command line.
+:top
+echo %1 >>_.at
+shift
+:bot
+if not %3/==/ goto top
+call ps2pdfxx %1 %2
diff --git a/Master/xemtex/gslib/ps2pdf12.cmd b/Master/xemtex/gslib/ps2pdf12.cmd
new file mode 100755
index 00000000000..2514039a76c
--- /dev/null
+++ b/Master/xemtex/gslib/ps2pdf12.cmd
@@ -0,0 +1,11 @@
+/* $Id: ps2pdf12.cmd,v 1.1 2000/07/05 16:21:13 lpd Exp $ */
+/*
+ * This file is maintained by a user: if you have any questions about it,
+ * please contact Mark Hale (mark.hale@physics.org).
+ */
+
+/* Convert PostScript to PDF 1.2 (Acrobat 3-and-later compatible). */
+
+parse arg params
+
+call 'ps2pdf' '-dCompatibilityLevel=1.2' params
diff --git a/Master/xemtex/gslib/ps2pdf13 b/Master/xemtex/gslib/ps2pdf13
new file mode 100644
index 00000000000..86b4d3ca963
--- /dev/null
+++ b/Master/xemtex/gslib/ps2pdf13
@@ -0,0 +1,5 @@
+#!/bin/sh
+# $Id: ps2pdf13,v 1.1 2000/03/09 08:40:40 lpd Exp $
+# Convert PostScript to PDF 1.3 (Acrobat 4-and-later compatible).
+
+exec ps2pdfwr -dCompatibilityLevel=1.3 "$@"
diff --git a/Master/xemtex/gslib/ps2pdf13.bat b/Master/xemtex/gslib/ps2pdf13.bat
new file mode 100644
index 00000000000..3881a1c967f
--- /dev/null
+++ b/Master/xemtex/gslib/ps2pdf13.bat
@@ -0,0 +1,15 @@
+@echo off
+@rem $Id: ps2pdf13.bat,v 1.5 2001/06/22 16:09:22 lpd Exp $
+
+rem Convert PostScript to PDF 1.3 (Acrobat 4-and-later compatible).
+
+echo -dCompatibilityLevel#1.3 >_.at
+goto bot
+
+rem Pass arguments through a file to avoid overflowing the command line.
+:top
+echo %1 >>_.at
+shift
+:bot
+if not %3/==/ goto top
+call ps2pdfxx %1 %2
diff --git a/Master/xemtex/gslib/ps2pdf13.cmd b/Master/xemtex/gslib/ps2pdf13.cmd
new file mode 100755
index 00000000000..8b26b38874b
--- /dev/null
+++ b/Master/xemtex/gslib/ps2pdf13.cmd
@@ -0,0 +1,11 @@
+/* $Id: ps2pdf13.cmd,v 1.2 2000/09/10 19:32:44 lpd Exp $ */
+/*
+ * This file is maintained by a user: if you have any questions about it,
+ * please contact Mark Hale (mark.hale@physics.org).
+ */
+
+/* Convert PostScript to PDF 1.3 (Acrobat 4-and-later compatible). */
+
+parse arg params
+
+call 'ps2pdf' '-dCompatibilityLevel=1.3' params
diff --git a/Master/xemtex/gslib/ps2pdf14 b/Master/xemtex/gslib/ps2pdf14
new file mode 100644
index 00000000000..65802329861
--- /dev/null
+++ b/Master/xemtex/gslib/ps2pdf14
@@ -0,0 +1,5 @@
+#!/bin/sh
+# $Id: ps2pdf14,v 1.1 2000/09/10 19:33:47 lpd Exp $
+# Convert PostScript to PDF 1.4 (Acrobat 5-and-later compatible).
+
+exec ps2pdfwr -dCompatibilityLevel=1.4 "$@"
diff --git a/Master/xemtex/gslib/ps2pdf14.bat b/Master/xemtex/gslib/ps2pdf14.bat
new file mode 100644
index 00000000000..a5f7d7d9397
--- /dev/null
+++ b/Master/xemtex/gslib/ps2pdf14.bat
@@ -0,0 +1,15 @@
+@echo off
+@rem $Id: ps2pdf14.bat,v 1.2 2001/06/22 16:09:22 lpd Exp $
+
+rem Convert PostScript to PDF 1.4 (Acrobat 5-and-later compatible).
+
+echo -dCompatibilityLevel#1.4 >_.at
+goto bot
+
+rem Pass arguments through a file to avoid overflowing the command line.
+:top
+echo %1 >>_.at
+shift
+:bot
+if not %3/==/ goto top
+call ps2pdfxx %1 %2
diff --git a/Master/xemtex/gslib/ps2pdf14.cmd b/Master/xemtex/gslib/ps2pdf14.cmd
new file mode 100755
index 00000000000..9144e695dae
--- /dev/null
+++ b/Master/xemtex/gslib/ps2pdf14.cmd
@@ -0,0 +1,11 @@
+/* $Id: ps2pdf14.cmd,v 1.1 2000/09/10 19:33:47 lpd Exp $ */
+/*
+ * This file is maintained by a user: if you have any questions about it,
+ * please contact Mark Hale (mark.hale@physics.org).
+ */
+
+/* Convert PostScript to PDF 1.4 (Acrobat 5-and-later compatible). */
+
+parse arg params
+
+call 'ps2pdf' '-dCompatibilityLevel=1.4' params
diff --git a/Master/xemtex/gslib/ps2pdfwr b/Master/xemtex/gslib/ps2pdfwr
new file mode 100644
index 00000000000..562824094bc
--- /dev/null
+++ b/Master/xemtex/gslib/ps2pdfwr
@@ -0,0 +1,36 @@
+#!/bin/sh
+# $Id: ps2pdfwr,v 1.6.2.1 2002/01/22 21:34:04 jackiem Exp $
+# Convert PostScript to PDF without specifying CompatibilityLevel.
+
+OPTIONS="-dSAFER"
+while true
+do
+ case "$1" in
+ -?*) OPTIONS="$OPTIONS $1" ;;
+ *) break ;;
+ esac
+ shift
+done
+
+if [ $# -lt 1 -o $# -gt 2 ]; then
+ echo "Usage: `basename $0` [options...] (input.[e]ps|-) [output.pdf|-]" 1>&2
+ exit 1
+fi
+
+infile="$1";
+
+if [ $# -eq 1 ]
+then
+ case "${infile}" in
+ -) outfile=- ;;
+ *.eps) base=`basename "${infile}" .eps`; outfile="${base}.pdf" ;;
+ *.ps) base=`basename "${infile}" .ps`; outfile="${base}.pdf" ;;
+ *) base=`basename "${infile}"`; outfile="${base}.pdf" ;;
+ esac
+else
+ outfile="$2"
+fi
+
+# We have to include the options twice because -I only takes effect if it
+# appears before other options.
+exec gs $OPTIONS -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite "-sOutputFile=$outfile" $OPTIONS -c .setpdfwrite -f "$infile"
diff --git a/Master/xemtex/gslib/ps2pdfxx.bat b/Master/xemtex/gslib/ps2pdfxx.bat
new file mode 100644
index 00000000000..5e6797d0d35
--- /dev/null
+++ b/Master/xemtex/gslib/ps2pdfxx.bat
@@ -0,0 +1,56 @@
+@echo off
+@rem $Id: ps2pdfxx.bat,v 1.10 2001/06/22 16:09:22 lpd Exp $
+rem Internal batch file for calling pdfwrite driver.
+
+rem The files that call this one (ps2pdf*.bat) write the command-line
+rem options into _.at, and then pass the last 2 (or fewer) arguments
+rem to this file.
+
+call gssetgs.bat
+echo -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE#pdfwrite >_.at2
+
+if "%OS%"=="Windows_NT" goto nt
+
+rem Run ps2pdf on any Microsoft OS.
+
+if %1/==/ goto usage
+if %2/==/ goto usage
+
+rem Watcom C deletes = signs, so use # instead.
+rem We have to include the options twice because -I only takes effect if it
+rem appears before other options.
+
+:run
+echo -sOutputFile#%2 >>_.at2
+copy /b /y _.at2+_.at >NUL
+echo -c .setpdfwrite -f %1 >>_.at2
+%GSC% @_.at @_.at2
+goto end
+
+:usage
+echo Usage: ps2pdf [options...] input.[e]ps output.pdf
+goto end
+
+rem Run ps2pdf on Windows NT.
+
+:nt
+if not CMDEXTVERSION 1 goto run
+if %1/==/ goto ntusage
+if %2/==/ goto nooutfile
+goto run
+
+:ntusage
+echo Usage: ps2pdf input.ps [output.pdf]
+echo or: ps2pdf [options...] input.[e]ps output.pdf
+goto end
+
+:nooutfile
+rem We don't know why the circumlocution with _1 is needed....
+set _1=%1
+call ps2pdfxx %1 %_1:.PS=.pdf%
+set _1=
+
+:end
+rem Clean up.
+if exist _.at erase _.at
+if exist _.at2 erase _.at2
diff --git a/Master/xemtex/gslib/ps2ps b/Master/xemtex/gslib/ps2ps
new file mode 100644
index 00000000000..9449b563fb6
--- /dev/null
+++ b/Master/xemtex/gslib/ps2ps
@@ -0,0 +1,20 @@
+#!/bin/sh
+# $Id: ps2ps,v 1.3 2001/06/22 16:09:22 lpd Exp $
+# "Distill" PostScript.
+
+OPTIONS="-dSAFER"
+while true
+do
+ case "$1" in
+ -*) OPTIONS="$OPTIONS $1" ;;
+ *) break ;;
+ esac
+ shift
+done
+
+if [ $# -ne 2 ]; then
+ echo "Usage: `basename $0` ...switches... input.ps output.ps" 1>&2
+ exit 1
+fi
+
+exec gs -q -sDEVICE=pswrite "-sOutputFile=$2" -dNOPAUSE -dBATCH $OPTIONS "$1"
diff --git a/Master/xemtex/gslib/ps2ps.bat b/Master/xemtex/gslib/ps2ps.bat
new file mode 100644
index 00000000000..be005e0f484
--- /dev/null
+++ b/Master/xemtex/gslib/ps2ps.bat
@@ -0,0 +1,23 @@
+@echo off
+@rem $Id: ps2ps.bat,v 1.4 2001/06/22 16:09:22 lpd Exp $
+@rem "Distill" PostScript.
+
+if %1/==/ goto usage
+if %2/==/ goto usage
+call gssetgs.bat
+echo -dNODISPLAY -dNOPAUSE -dSAFER -dBATCH >_.at
+:cp
+if %3/==/ goto doit
+echo %1 >>_.at
+shift
+goto cp
+
+:doit
+rem Watcom C deletes = signs, so use # instead.
+%GSC% -q -sDEVICE#pswrite -sOutputFile#%2 @_.at %1
+goto end
+
+:usage
+echo "Usage: ps2ps ...switches... input.ps output.ps"
+
+:end
diff --git a/Master/xemtex/gslib/ps2ps.cmd b/Master/xemtex/gslib/ps2ps.cmd
new file mode 100755
index 00000000000..9a556fdff14
--- /dev/null
+++ b/Master/xemtex/gslib/ps2ps.cmd
@@ -0,0 +1,36 @@
+/* $Id: ps2ps.cmd,v 1.1 2000/07/05 16:21:13 lpd Exp $ */
+/*
+ * This file is maintained by a user: if you have any questions about it,
+ * please contact Mark Hale (mark.hale@physics.org).
+ */
+
+/* "Distill" PostScript. */
+
+parse arg params
+
+gs='@gsos2'
+
+if params='' then call usage
+
+options='-dNOPAUSE -dBATCH'
+
+/* extract options from command line */
+i=1
+param=word(params,i)
+do while substr(param,1,1)='-'
+ options=options param
+ i=i+1
+ param=word(params,i)
+end
+
+infile=param
+if infile='' then call usage
+outfile=word(params,i+1)
+if outfile='' then call usage
+
+gs '-q -sDEVICE=pswrite -sOutputFile='outfile options infile
+exit
+
+usage:
+say 'Usage: ps2ps ...switches... input.ps output.ps'
+exit
diff --git a/Master/xemtex/gslib/pv.sh b/Master/xemtex/gslib/pv.sh
new file mode 100644
index 00000000000..0f3ae56f1c7
--- /dev/null
+++ b/Master/xemtex/gslib/pv.sh
@@ -0,0 +1,37 @@
+#!/bin/sh -f
+# $Id: pv.sh,v 1.1 2000/03/09 08:40:40 lpd Exp $
+#
+# pv - preview a specified page of a dvi file in a Ghostscript window
+# usage: pv page file
+#
+# pv converts the given page to PostScript and displays it
+# in a Ghostscript window.
+#
+if [ $# -lt 2 ] ;then
+ echo usage: $0 'page_number file_name[.dvi]'
+ exit 1
+fi
+#
+# The following line used to appear here:
+#
+#RESOLUTION=100
+#
+# But according to Peter Dyballa
+# <pete@lovelace.informatik.uni-frankfurt.de>, "Modern versions of dvips are
+# taught to read configuration files which tell them the paths to PK, TFM,
+# VF and other files for example PostScript font programmes. These files
+# tell #dvips too which default resolution is used and therefore which
+# series of PK files (based on 300 DPI or 400 DPI or 600 DPI or even more)
+# are held on the system." So we have deleted this line, and also removed
+# the -D switch from the call of dvips below.
+#
+TEMPDIR=.
+PAGE=$1
+shift
+FILE=$1
+shift
+trap "rm -rf $TEMPDIR/$FILE.$$.pv" 0 1 2 15
+#dvips -D$RESOLUTION -p $PAGE -n 1 $FILE $* -o $FILE.$$.pv
+dvips -p $PAGE -n 1 $FILE $* -o $FILE.$$.pv
+gs $FILE.$$.pv
+exit 0
diff --git a/Master/xemtex/gslib/quit.ps b/Master/xemtex/gslib/quit.ps
new file mode 100644
index 00000000000..eb5f288470a
--- /dev/null
+++ b/Master/xemtex/gslib/quit.ps
@@ -0,0 +1 @@
+quit
diff --git a/Master/xemtex/gslib/ras1.upp b/Master/xemtex/gslib/ras1.upp
new file mode 100644
index 00000000000..beb3433f845
--- /dev/null
+++ b/Master/xemtex/gslib/ras1.upp
@@ -0,0 +1,8 @@
+-supModel="SUN rasterfile, 1 Bit, 2 Colors (Ghostscript-Rendering)"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceGray
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/SunRaster
+-dupComponentBits={1}
diff --git a/Master/xemtex/gslib/ras24.upp b/Master/xemtex/gslib/ras24.upp
new file mode 100644
index 00000000000..c92f26e9694
--- /dev/null
+++ b/Master/xemtex/gslib/ras24.upp
@@ -0,0 +1,8 @@
+-supModel="SUN rasterfile, 24 Bit, 7 Colors (RGB-Error-Diffusion)"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceRGB
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/SunRaster
+-dupComponentBits="{8 8 8}"
diff --git a/Master/xemtex/gslib/ras3.upp b/Master/xemtex/gslib/ras3.upp
new file mode 100644
index 00000000000..96a0a2c7087
--- /dev/null
+++ b/Master/xemtex/gslib/ras3.upp
@@ -0,0 +1,8 @@
+-supModel="SUN rasterfile, 3 Bit, 7 Colors (RGB-Ghostscript)"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceRGB
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/SunRaster
+-dupComponentBits="{1 1 1}"
diff --git a/Master/xemtex/gslib/ras32.upp b/Master/xemtex/gslib/ras32.upp
new file mode 100644
index 00000000000..f75c6bbfa77
--- /dev/null
+++ b/Master/xemtex/gslib/ras32.upp
@@ -0,0 +1,8 @@
+-supModel="SUN rasterfile, 32 Bit, 6+1 Colors (CMYK-Error-Diffusion)"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/SunRaster
+
diff --git a/Master/xemtex/gslib/ras4.upp b/Master/xemtex/gslib/ras4.upp
new file mode 100644
index 00000000000..1a9330058fa
--- /dev/null
+++ b/Master/xemtex/gslib/ras4.upp
@@ -0,0 +1,8 @@
+-supModel="SUN rasterfile, 4 Bit, 6+1 Colors (CMYK-Ghostscript)"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/SunRaster
+-dupComponentBits="{1 1 1 1}"
diff --git a/Master/xemtex/gslib/ras8m.upp b/Master/xemtex/gslib/ras8m.upp
new file mode 100644
index 00000000000..304ad535d41
--- /dev/null
+++ b/Master/xemtex/gslib/ras8m.upp
@@ -0,0 +1,8 @@
+-supModel="SUN rasterfile, 8 Bit, 2 Colors (Error-Diffusion)"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceGray
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/SunRaster
+-dupComponentBits={8}
diff --git a/Master/xemtex/gslib/rollconv.ps b/Master/xemtex/gslib/rollconv.ps
new file mode 100644
index 00000000000..fbf5cacea69
--- /dev/null
+++ b/Master/xemtex/gslib/rollconv.ps
@@ -0,0 +1,385 @@
+%!
+% Copyright (C) 1995, 1996 Aladdin Enterprises. All rights reserved.
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: rollconv.ps,v 1.1.8.1 2003/04/12 14:02:39 giles Exp $
+% Utility program for converting Japanese fonts produced by Macromedia's
+% Rollup program to Type 0 fonts suitable for use with Ghostscript.
+%
+% Rollup produces the following files, where xxx is the font name:
+% xxx-H, xxx-SA, xxx-SB, xxx-SK, xxx-SR, xxx-UG
+% JIS83-1_COD
+% JIS83-1_CSA
+% The _COD and _CSA files are large files containing the actual
+% character outline data; they may theoretically be shared between
+% multiple fonts.
+%
+% rollconv.ps converts the above to files named:
+% fff.ps
+% fff.COD
+% fff.CSA
+% fff.CSR
+% where fff is a font file name provided by the user at conversion time.
+% The fff.ps file is the actual font file to be loaded with `run'
+% or placed in a Fontmap or a directory named by [GS_]FONTPATH;
+% the other two files must be present at runtime in a directory that is
+% on Ghostscript's search path (-I, GS_LIB, GS_LIB_DEFAULT).
+%
+% The normal way to invoke this program is
+% gsnd -- rollconv.ps xxx fff InDir CDir OutDir
+% (assuming that gsnd is an alias for gs -dNODISPLAY), where:
+% xxx is the font name;
+% fff is the base part of the output file name;
+% InDir is the name of the directory containing the xxx-* input files;
+% CDir is the name of the directory containing the _COD and _CSA
+% input files (typically the same as InDir);
+% OutDir is the name of the directory where the output should be written
+% (OutDir must already exist).
+% For example:
+% gsnd -- rollconv.ps HGGothicBPRO gothic /gs/k/rufonts/Gothic \
+% /gs/k/rufonts/Gothic /gs/k/gsfonts
+% To suppress output messages, you may insert -q:
+% gsnd -q -- rollconv.ps ...
+%
+% This program assumes that the files have been FTP'ed from a Macintosh and
+% therefore have 128 bytes of garbage at the beginning. If you have
+% transferred them in some manner that avoids this, change true to false
+% in the following line.
+/fromMac true def
+% The FontName of the converted font is xxx-83pv-RKSJ-H. In order to
+% use a converted font with Ghostscript, you may either load it explicitly
+% at run time, e.g.,
+% (gothic.ps) run
+% or you may add an entry to the Fontmap file, in the form:
+% /HGGothicBPRO-83pv-RKSJ-H (gothic.ps) ;
+% which will allow the font to be loaded automatically. After
+% loading the font, by either method, you can select it in the usual way:
+% /HGGothicBPRO-83pv-RKSJ-H findfont 36 scalefont setfont
+% or
+% /HGGothicBPRO-83pv-RKSJ-H 36 selectfont
+
+
+/macrfile % <filename> macrfile <file>
+ { (r) file
+ fromMac
+ { % Get rid of the initial Mac garbage (128 characters).
+ % The garbage at the end is unpredictable,
+ % so we'll just have to hope that it's all nulls.
+ dup =string 0 128 getinterval readstring pop pop
+ }
+ if
+ } bind def
+
+/convert % <FName> <OutBase> <InDir> <CDir> <OutDir> convert -
+ { /OutDir exch def
+ /CDir exch def
+ /InDir exch def
+ /OutBase exch def
+ /FName exch def
+
+ /inprefix InDir (/) concatstrings FName concatstrings (-) concatstrings def
+ /inh inprefix (H) concatstrings def
+
+ % Open the output file.
+
+/OutDot OutDir (/) concatstrings OutBase concatstrings (.) concatstrings def
+/outname OutDot (ps) concatstrings def
+QUIET not { (Writing ) print outname = flush } if
+/cdfromstr (\(pgfonts/) FName concatstrings (-JIS83-1_) concatstrings def
+/cdstr (\() OutBase concatstrings (.) concatstrings def
+/out outname (w) file def
+/buffer 65000 string def
+
+ % Copy the initial comments from the input file.
+
+inh macrfile
+ { dup =string readline pop
+ out 1 index writestring out (\n) writestring
+ (%%EndComments) eq { exit } if
+ }
+loop
+
+ % Write out our preamble.
+
+out (
+currentpacking true setpacking
+userdict /AltsysCFD3 known { (%END) .skipeof } if
+userdict /AltsysCFD3 25 dict dup begin
+/beint { 0 exch { exch 8 bitshift add } forall } bind def
+/rfile { findlibfile { exch pop } { (r) file } ifelse } bind def
+/str 500 string def
+/AltRO { } def
+/BuildCh % <font> <ccode> <bias> BuildCh -
+ { /bias exch def /ccode exch def begin % font
+ ccode dup 255 and dup bias lt exch 252 gt or { pop 127 } if
+ dup -8 bitshift -67 mul add % subfonts have 189 chars, not 256
+ bias sub buildch1
+ } bind def
+/BuildChr % <font> <ccode> BuildChr -
+ { /ccode exch def begin % font
+ ccode buildch1
+ } bind def
+/buildch1
+ { 6 mul PGOffsets add
+ FileNames 0 get rfile dup dup 4 -1 roll setfileposition
+ (xxxxxx) readstring pop exch closefile
+ dup 1 3 getinterval beint % COD offset
+ exch 4 2 getinterval beint % length
+ dup 0 eq
+ { pop pop currentdict end
+ 1000 0 0 0 1 1 0 -1000 500 1000 setcachedevice2
+ }
+ { dup str length gt { /str 1 index string store } if
+ FileNames 1 get rfile dup dup % offset length file file file
+ 5 -1 roll setfileposition % length file file
+ str 0 5 -1 roll getinterval readstring pop pop closefile
+ currentdict end ccode str 1183615869 internaldict /CCRun get exec
+ }
+ ifelse
+ } bind def
+/privates 100 dict def
+/BuildPr % <stdhw> <stdvw> BuildPr <dict>
+ { 2 copy 1000 mul add privates 1 index known
+ { privates exch get 3 1 roll pop pop
+ }
+ { 7 dict begin
+ /MinFeature{16 16}executeonly def
+ /BlueValues BlueValues def
+ /StdVW 3 -1 roll 1 array astore def
+ /StdHW 3 -1 roll 1 array astore def
+ /password 5839 def
+ /LanguageGroup 1 def
+ /Subrs Subrs def
+ currentdict readonly end
+ privates 2 index 2 index put exch pop
+ }
+ ifelse
+ } bind def
+/FullEncoding
+ systemdict { pop } forall
+ systemdict length 512 sub 1 255 { (x) dup 0 4 -1 roll put cvn } for
+768 packedarray def
+/BlueValues[-250 -250 1100 1100]readonly def
+/BuildChar{AltsysCFD3 begin 64 BuildCh end}bind def
+/CharStrings 1 dict
+dup /.notdef (¿1pyÊ8å) noaccess put
+readonly def
+/CDevProc
+ { pop pop pop pop 0 exch -1000 exch 2 div currentfont /FontBBox get 3 get
+ } bind def
+/FontMatrix[0.001 0.0 0.0 0.001 0.0 0.0]readonly def
+/Subrs [
+(¿1p|=-“D\âR) noaccess
+(¿1py¼öUz) noaccess
+(¿1py½Äži) noaccess
+(¿1pù) noaccess
+(¿1p|35r·I) noaccess
+] noaccess def
+end put
+%END
+) writestring
+
+ % Locate and copy the definition of NotDefFont.
+
+out (
+FontDirectory /NotDefFont known { (%END) .skipeof } if
+) writestring
+ { dup =string readline pop
+ dup (/NotDefFont) eq { exit } if pop
+ }
+loop out exch writestring out (\n) writestring
+ { dup =string readline pop
+ (definefont) search { pop pop pop exit } if
+ out exch writestring out (\n) writestring
+ }
+loop out (definefont pop
+%END
+) writestring
+
+ % Copy the definitions of the subfonts, moving the
+ % CharStrings of the Roman supplement to an external file.
+ % Stack for pattern procedures: infile line
+
+/CSRName OutDot (CSR) concatstrings def
+/csr CSRName (w) file def
+QUIET not { (Writing ) print CSRName = flush } if
+
+/encoding 256 array def
+
+/patterns [
+ % Patterns specific to the Roman supplement, in which
+ % the outlines are in an eexec section.
+ { (/Encoding 256 array) {
+ pop out (/Encoding ) writestring
+ { dup buffer readline pop
+ dup (dup) search { exit } if pop pop
+ }
+ loop
+ { % Stack: infile dupline postdup (dup) predup
+ pop pop exch pop
+ % The top element of the stack is a string beginning with
+ % an index and value to put into the Encoding.
+ token pop exch token pop exch pop encoding 3 1 roll put
+ dup buffer readline pop
+ dup (dup) search not { pop exit } if
+ }
+ loop
+ out encoding cvx write== out ( cvlit ) writestring
+ out exch writestring out (\n) writestring
+ } }
+ { (/FontType 1 def) {
+ pop out (/FontType 4 def\n) writestring
+ out (/BuildChar{AltsysCFD3 begin BuildChr end}bind def\n) writestring
+ out (/FileNames[) writestring
+ 2 { out OutBase (.CSR) concatstrings write==only } repeat
+ out (]def\n) writestring
+ } }
+ { (currentfile eexec) {
+ pop out (systemdict begin\n) writestring
+ dup 55665 /eexecDecode filter
+ } }
+ { (dup/CharStrings ) {
+ % Copy the individual CharStrings to the CSR file,
+ % recording the lengths and offsets.
+ pop out (dup/CharStrings AltsysCFD3 /CharStrings get put\n) writestring
+ /offsets 256 dict def
+ { dup token pop % char name
+ dup dup type /nametype eq exch xcheck not and not { pop exit } if
+ 1 index token pop % length of binary data
+ 2 index token pop pop % skip RD
+ 2 index buffer 0 3 index getinterval readstring pop % charstring
+ offsets 3 index csr fileposition 16 bitshift 4 index add put
+ csr exch writestring pop pop
+ dup buffer readline pop pop % skip ND
+ }
+ loop
+ % We skipped the 'end'; skip the 'readonly put' as well.
+ 2 { dup token pop pop } repeat
+ out (dup/PGOffsets ) writestring
+ out csr fileposition write=only
+ out ( put\n) writestring
+ encoding
+ { offsets exch .knownget not { 0 } if
+ 2 { csr 0 write } repeat
+ 4 { dup -24 bitshift csr exch write 8 bitshift } repeat pop
+ }
+ forall
+ } }
+ { (/OtherSubrs[) {
+ pop
+ { dup buffer readline pop
+ (]noaccess def) search { pop pop pop exit } if pop
+ }
+ loop
+ } }
+ { (/Subrs 5 array) {
+ pop out (/Subrs AltsysCFD3 /Subrs get def\n) writestring
+ 6 { dup buffer readline pop pop } repeat
+ } }
+ { (currentfile closefile) {
+ pop out (end % systemdict\n) writestring
+ closefile
+ } }
+ % Patterns for other supplements.
+ { (pgfonts/) {
+ { cdfromstr search not { exit } if
+ out exch writestring pop out cdstr writestring
+ }
+ loop out exch writestring out (\n) writestring
+ } }
+ { (/BuildChar{AltsysCFD3 begin 64 BuildCh end}bind def) {
+ pop out (\t/BuildChar AltsysCFD3 /BuildChar get def\n) writestring
+ } }
+ { (/CDevProc{pop pop pop pop 0 exch -1000 exch 2 div ) {
+ pop out (\t/CDevProc AltsysCFD3 /CDevProc get def\n) writestring
+ } }
+ { (/CharStrings 1 dict dup begin) {
+ pop out (\t/CharStrings AltsysCFD3 /CharStrings get def\n) writestring
+ 2 { dup buffer readline pop pop } repeat
+ } }
+ { (/FontMatrix[0.001 0.0 0.0 0.001 0.0 0.0]def) {
+ pop out (\t/FontMatrix AltsysCFD3 /FontMatrix get def\n) writestring
+ } }
+ { (/Private 14 dict dup begin) {
+ pop out (\t/Private) writestring
+ { dup buffer readline pop
+ (end def) search { pop pop pop exit } if
+ (/Std) search
+ { pop pop dup length 3 sub 3 exch getinterval
+ (]) search pop out ( ) writestring out exch writestring pop
+ }
+ if pop
+ }
+ loop out ( AltsysCFD3 begin BuildPr end def\n) writestring
+ } }
+ { (UniqueID) { pop } }
+ { () {
+ out exch writestring out (\n) writestring
+ } }
+] def
+[ (SR) (SA) (SK) (SB) (UG) ]
+ { 0 1 255 { encoding exch /.notdef put } for
+ inprefix exch concatstrings macrfile
+ { dup buffer readline not { pop exit } if
+ /patterns load
+ { 2 copy 0 get search { pop pop pop 1 get exec exit } if pop pop }
+ forall
+ }
+ loop closefile
+ }
+forall
+csr closefile
+
+ % Copy the definition of the root font.
+
+dup buffer readstring pop out exch writestring closefile
+out (
+setpacking
+) writestring
+out closefile
+
+ % Remove the Mac garbage from the outline files.
+
+[ (COD) (CSA) ]
+ { CDir (/) concatstrings (JIS83-1_) concatstrings
+ 1 index concatstrings macrfile
+ exch OutDot exch concatstrings
+ QUIET not { (Writing ) print dup = flush } if
+ (w) file
+ % Stack: infile outfile
+ { 1 index buffer readstring exch
+ % Stack: infile outfile noteof substring
+ 2 index exch writestring not { exit } if
+ }
+ loop closefile closefile
+ }
+forall
+
+ } bind def
+
+% If the program was invoked from the command line, run it now.
+[ shellarguments
+ { counttomark 5 eq
+ { convert
+ QUIET not { (Done.\n) print flush } if
+ }
+ { cleartomark
+ (Usage: gsnd -- rollconv.ps FName OutBase InDir CDir OutDir\n) print
+ ( e.g.: gsnd -- rollconv.ps HGMinchoE mincho HGfonts/Mincho HGfonts/Mincho HGfonts/gs\n) print flush
+ mark
+ }
+ ifelse
+ }
+if pop
diff --git a/Master/xemtex/gslib/showchar.ps b/Master/xemtex/gslib/showchar.ps
new file mode 100644
index 00000000000..bf560dd5383
--- /dev/null
+++ b/Master/xemtex/gslib/showchar.ps
@@ -0,0 +1,94 @@
+% Copyright (C) 1993, 1994, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: showchar.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% showchar.ps
+% Show the outline and rasterized forms of a character.
+
+/F where { pop } { /F /Times-Roman def } ifelse
+/P where { pop } { /P 16 def } ifelse
+/Rx where { pop } { /Rx 100 def } ifelse
+/Ry where { pop } { /Ry 100 def } ifelse
+/Cs where { pop } { /Cs (M) def } ifelse
+/Pr where { pop } { /Pr false def } ifelse
+/Delay where { pop } { /Delay 0 def } ifelse
+
+0 setgray
+(markpath.ps) runlibfile
+(markhint.ps) runlibfile
+/mmx [1 0 0 1 0 0] def
+/getpath % - getpath <pathproc>
+ { [
+ { /moveto cvx } { /lineto cvx } { /curveto cvx } { /closepath cvx }
+ pathforall
+ ] cvx
+ } def
+/bitselectfont % <fontname> <scale> bitselectfont -
+ { exch findfont exch scalefont setfont
+ % Compute the bounding box in device coordinates.
+ gsave [Rx 72 div 0 0 Ry 72 div 0 0] setmatrix
+ currentfont /FontMatrix get concat
+ currentfont /FontBBox get aload pop
+ transform ceiling cvi /ury exch def ceiling cvi /urx exch def
+ transform floor cvi /lly exch def floor cvi /llx exch def
+ /bbx urx llx sub def /bby ury lly sub def
+ grestore
+ } def
+/bitshow % <string> bitshow -
+ { /S exch def gsave
+ /W bbx 8 add 7 or 1 add def
+ /H bby 8 add def
+ /buf W 8 idiv string def
+ /M [Rx 72 div 0 0 Ry -72 div 4 llx sub H 4 sub] def
+ M W H <ff 00> makeimagedevice
+ /dev exch def
+ gsave dev setdevice
+ newpath 0 lly idtransform moveto
+ 0 setgray
+ gsave
+ /hpath S false charpath getpath def
+ grestore
+ S show grestore
+ 20 20 translate
+ 50000 Rx Ry .max P mul div dup scale
+ 0.7 setgray
+ 0 W H true M
+ { dup 1 add exch dev exch buf copyscanlines
+ } imagemask pop
+ 0 setlinewidth
+ gsave 0.5 1 0.5 setrgbcolor hpath exec mmx markpath grestore
+ 0 0.5 1 setrgbcolor hpath exec stroke
+ % Show the hints for Type 1 fonts also.
+ currentfont /FontType get 1 eq
+ { gsave 1 0 0 setrgbcolor
+ 0 lly M idtransform translate
+ currentfont /FontMatrix get
+ dup Pr markfonthints
+ currentfont /Encoding get S 0 get get exch Pr markcharhints
+ grestore
+ }
+ if
+ } def
+F P bitselectfont
+/S1 1 string def
+Cs
+ { /C exch def
+ currentfont /Encoding get C get /.notdef ne
+ { save S1 0 C put S1 bitshow
+ showpage restore
+ } if
+ } forall
+quit
diff --git a/Master/xemtex/gslib/showpage.ps b/Master/xemtex/gslib/showpage.ps
new file mode 100644
index 00000000000..0a6ae9a7e1f
--- /dev/null
+++ b/Master/xemtex/gslib/showpage.ps
@@ -0,0 +1 @@
+showpage
diff --git a/Master/xemtex/gslib/st640ih.upp b/Master/xemtex/gslib/st640ih.upp
new file mode 100644
index 00000000000..0c79f3bbc76
--- /dev/null
+++ b/Master/xemtex/gslib/st640ih.upp
@@ -0,0 +1,57 @@
+-supModel="Epson Stylus Color 640, 1440x720DpI, Inkjet Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYKgenerate
+-dupRendering=/FSCMYK32
+-dupOutputFormat=/EscP2XY
+-r1440x720
+-dupMargins="{ 9.0 24.0 9.0 9.0}"
+-dupBlackTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.30000000
+}"
+-dupCyanTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.30000000
+}"
+-dupMagentaTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.30000000
+}"
+-dupYellowTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.30000000
+}"
+-dupOutputComponentOrder="{ 1 2 3 0 }"
+-dupWeaveXPasses=2
+-dupOutputXStep=2
+-dupWeaveYPasses=8
+-dupOutputPins=30
+-dupWeaveYFeeds="{15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15}"
+-dupWeaveXStarts="{0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0}"
+-dupWeaveYOffset=38
+-dupWeaveInitialYFeeds="{ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 15}"
+-dupWeaveInitialXStarts="{0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0}"
+-dupWeaveInitialPins="{ 15 9 18 12 6 15 9 18 27 21 30 24 18 27 21 30}"
+-dupFormatYabsolute
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2855 0100 05
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+ 1b5501
+ 1b2865 0200 0002
+ 1b284b 0200 0002
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupXStepCommand="<1b285c 0400 a005 0100 0000>"
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
diff --git a/Master/xemtex/gslib/st640ihg.upp b/Master/xemtex/gslib/st640ihg.upp
new file mode 100644
index 00000000000..faaf5dfc10e
--- /dev/null
+++ b/Master/xemtex/gslib/st640ihg.upp
@@ -0,0 +1,42 @@
+-supModel="Epson Stylus Color 640, 1440x720DpI, Grayscale, Inkjet Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceGray
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2XY
+-r1440x720
+-dupMargins="{ 9.0 24.0 9.0 9.0}"
+-dupWhiteTransfer="{
+ 0.30000000 0.25411765 0.20862745 0.18509804 0.16313725 0.14588235 0.12862745
+ 0.11450980 0.10196078 0.09098039 0.08156863 0.07215686 0.06431373 0.05490196
+ 0.04549020 0.03764706 0.02980392 0.02196078 0.01254902 0.00627451 0.00000000
+}"
+-dupOutputComponentOrder="{ 0 }"
+-dupWeaveXPasses=2
+-dupOutputXStep=2
+-dupWeaveYPasses=8
+-dupOutputPins=30
+-dupWeaveYFeeds="{15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15}"
+-dupWeaveXStarts="{0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0}"
+-dupWeaveYOffset=38
+-dupWeaveInitialYFeeds="{ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 15}"
+-dupWeaveInitialXStarts="{0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0}"
+-dupWeaveInitialPins="{ 15 9 18 12 6 15 9 18 27 21 30 24 18 27 21 30}"
+-dupFormatYabsolute
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2855 0100 05
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+ 1b5501
+ 1b2865 0200 0002
+ 1b284b 0200 0002
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupXStepCommand="<1b285c 0400 a005 0100 0000>"
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
diff --git a/Master/xemtex/gslib/st640p.upp b/Master/xemtex/gslib/st640p.upp
new file mode 100644
index 00000000000..431592ffd96
--- /dev/null
+++ b/Master/xemtex/gslib/st640p.upp
@@ -0,0 +1,49 @@
+-supModel="Epson Stylus Color 640, 720x720DpI, Plain Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYKgenerate
+-dupRendering=/FSCMYK32
+-dupOutputFormat=/EscP2
+-r720x720
+-dupMargins="{ 9.0 24.0 9.0 9.0}"
+-dupBlackTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.30000000
+}"
+-dupCyanTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.30000000
+}"
+-dupMagentaTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.30000000
+}"
+-dupYellowTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.30000000
+}"
+-dupOutputComponentOrder="{ 1 2 3 0 }"
+-dupWeaveYPasses=8
+-dupOutputPins=32
+-dupWeaveYFeeds="{31 31 31 31 37 33 33 29}"
+-dupWeaveInitialYFeeds="{1 1 1 1 1 1 1 25}"
+-dupWeaveInitialPins="{ 4 24 28 32 19 15 11 7}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2855 0100 05
+ 1b5501
+ 1b2865 0200 0002
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
diff --git a/Master/xemtex/gslib/st640pg.upp b/Master/xemtex/gslib/st640pg.upp
new file mode 100644
index 00000000000..07cca7d7204
--- /dev/null
+++ b/Master/xemtex/gslib/st640pg.upp
@@ -0,0 +1,34 @@
+-supModel="Epson Stylus Color 640, 720x720DpI, Grayscale, Plain Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceGray
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2
+-r720x720
+-dupMargins="{ 9.0 24.0 9.0 9.0}"
+-dupWhiteTransfer="{
+ 0.30000000 0.25411765 0.20862745 0.18509804 0.16313725 0.14588235 0.12862745
+ 0.11450980 0.10196078 0.09098039 0.08156863 0.07215686 0.06431373 0.05490196
+ 0.04549020 0.03764706 0.02980392 0.02196078 0.01254902 0.00627451 0.00000000
+}"
+-dupOutputComponentOrder="{ 0 }"
+-dupWeaveYPasses=8
+-dupOutputPins=32
+-dupWeaveYFeeds="{31 31 31 31 37 33 33 29}"
+-dupWeaveInitialYFeeds="{1 1 1 1 1 1 1 25}"
+-dupWeaveInitialPins="{ 4 24 28 32 19 15 11 7}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2855 0100 05
+ 1b5501
+ 1b2865 0200 0002
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
diff --git a/Master/xemtex/gslib/st640pl.upp b/Master/xemtex/gslib/st640pl.upp
new file mode 100644
index 00000000000..4c851d51e51
--- /dev/null
+++ b/Master/xemtex/gslib/st640pl.upp
@@ -0,0 +1,49 @@
+-supModel="Epson Stylus Color 640, 360x360DpI, Plain Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYKgenerate
+-dupRendering=/FSCMYK32
+-dupOutputFormat=/EscP2
+-r360x360
+-dupMargins="{ 9.0 24.0 9.0 9.0}"
+-dupBlackTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.30000000
+}"
+-dupCyanTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.30000000
+}"
+-dupMagentaTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.30000000
+}"
+-dupYellowTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.30000000
+}"
+-dupOutputComponentOrder="{ 1 2 3 0 }"
+-dupWeaveYPasses=4
+-dupOutputPins=32
+-dupWeaveYFeeds="{33 30 35 30}"
+-dupWeaveInitialYFeeds="{1 1 1 29}"
+-dupWeaveInitialPins="{ 8 16 32 23}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2855 0100 0A
+ 1b5501
+ 1b2865 0200 0002
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
diff --git a/Master/xemtex/gslib/st640plg.upp b/Master/xemtex/gslib/st640plg.upp
new file mode 100644
index 00000000000..82fe7a668b8
--- /dev/null
+++ b/Master/xemtex/gslib/st640plg.upp
@@ -0,0 +1,34 @@
+-supModel="Epson Stylus Color 640, 360x360DpI, Grayscale, Plain Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceGray
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2
+-r360x360
+-dupMargins="{ 9.0 24.0 9.0 9.0}"
+-dupWhiteTransfer="{
+ 0.30000000 0.25411765 0.20862745 0.18509804 0.16313725 0.14588235 0.12862745
+ 0.11450980 0.10196078 0.09098039 0.08156863 0.07215686 0.06431373 0.05490196
+ 0.04549020 0.03764706 0.02980392 0.02196078 0.01254902 0.00627451 0.00000000
+}"
+-dupOutputComponentOrder="{ 0 }"
+-dupWeaveYPasses=4
+-dupOutputPins=32
+-dupWeaveYFeeds="{33 30 35 30}"
+-dupWeaveInitialYFeeds="{1 1 1 29}"
+-dupWeaveInitialPins="{ 8 16 32 23}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2855 0100 0A
+ 1b5501
+ 1b2865 0200 0002
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
diff --git a/Master/xemtex/gslib/stc.upp b/Master/xemtex/gslib/stc.upp
new file mode 100644
index 00000000000..c363728ab8e
--- /dev/null
+++ b/Master/xemtex/gslib/stc.upp
@@ -0,0 +1,53 @@
+-supModel="Epson Stylus Color I (and PRO Series), 360x360DpI, Plain Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2
+-r360x360
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupWeaveYPasses=4
+-dupOutputPins=15
+-dupWeaveYFeeds="{15 15 15 15}"
+-dupWeaveInitialYFeeds="{1 1 1 13}"
+-dupWeaveInitialPins="{ 4 15 11 7}"
+-dupBlackTransfer="{
+ 0.0000 0.0034 0.0185 0.0377 0.0574 0.0769 0.0952 0.1147
+ 0.1337 0.1540 0.1759 0.1985 0.2209 0.2457 0.2706 0.2949
+ 0.3209 0.3496 0.3820 0.4145 0.4505 0.4907 0.5344 0.5840
+ 0.6445 0.7093 0.8154 0.9816 0.9983 0.9988 0.9994 1.0000
+}"
+-dupCyanTransfer="{
+ 0.0000 0.0034 0.0185 0.0377 0.0574 0.0769 0.0952 0.1147
+ 0.1337 0.1540 0.1759 0.1985 0.2209 0.2457 0.2706 0.2949
+ 0.3209 0.3496 0.3820 0.4145 0.4505 0.4907 0.5344 0.5840
+ 0.6445 0.7093 0.8154 0.9816 0.9983 0.9988 0.9994 1.0000
+}"
+-dupMagentaTransfer="{
+ 0.0000 0.0034 0.0185 0.0377 0.0574 0.0769 0.0952 0.1147
+ 0.1337 0.1540 0.1759 0.1985 0.2209 0.2457 0.2706 0.2949
+ 0.3209 0.3496 0.3820 0.4145 0.4505 0.4907 0.5344 0.5840
+ 0.6445 0.7093 0.8154 0.9816 0.9983 0.9988 0.9994 1.0000
+}"
+-dupYellowTransfer="{
+ 0.0000 0.0034 0.0185 0.0377 0.0574 0.0769 0.0952 0.1147
+ 0.1337 0.1540 0.1759 0.1985 0.2209 0.2457 0.2706 0.2949
+ 0.3209 0.3496 0.3820 0.4145 0.4505 0.4907 0.5344 0.5840
+ 0.6445 0.7093 0.8154 0.9816 0.9983 0.9988 0.9994 1.0000
+}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2869 0100 00
+ 1b2855 0100 0A
+ 1b5500
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
+
diff --git a/Master/xemtex/gslib/stc1520h.upp b/Master/xemtex/gslib/stc1520h.upp
new file mode 100644
index 00000000000..e58b831cd24
--- /dev/null
+++ b/Master/xemtex/gslib/stc1520h.upp
@@ -0,0 +1,58 @@
+-supModel="Epson Stylus Color 1520, 1440x720DpI, Inkjet Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2XY
+-r1440x720
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupBlackTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.40000000
+}"
+-dupCyanTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.40000000
+}"
+-dupMagentaTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.40000000
+}"
+-dupYellowTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.40000000
+}"
+-dupOutputComponentOrder="{ 1 2 3 0 }"
+-dupWeaveXPasses=2
+-dupOutputXStep=2
+-dupWeaveYPasses=4
+-dupOutputPins=62
+-dupWeaveYFeeds="{31 31 31 31 31 31 31 31}"
+-dupWeaveXStarts="{0 1 0 1 1 0 1 0}"
+-dupWeaveYOffset=18
+-dupWeaveInitialYFeeds="{ 3 3 3 3 3 3 3 31}"
+-dupWeaveInitialXStarts="{0 1 0 1 1 0 1 0}"
+-dupWeaveInitialPins="{ 13 20 27 34 41 48 55 62}"
+-dupFormatYabsolute
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2855 0100 05
+ 1b2873 0100 02
+ 1b5501
+ 1b2865 0200 0001
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupXStepCommand="<1b285c 0400 a005 0100>"
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
+
diff --git a/Master/xemtex/gslib/stc2.upp b/Master/xemtex/gslib/stc2.upp
new file mode 100644
index 00000000000..b3a0ce16239
--- /dev/null
+++ b/Master/xemtex/gslib/stc2.upp
@@ -0,0 +1,53 @@
+-supModel="Epson Stylus Color II / IIs, 360x360DpI, Plain Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2
+-r360x360
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupWeaveYPasses=3
+-dupOutputPins=20
+-dupWeaveYFeeds="{20 20 20}"
+-dupWeaveInitialYFeeds="{1 1 19}"
+-dupWeaveInitialPins="{ 7 20 13}"
+-dupBlackTransfer="{
+ 0.0000 0.0034 0.0185 0.0377 0.0574 0.0769 0.0952 0.1147
+ 0.1337 0.1540 0.1759 0.1985 0.2209 0.2457 0.2706 0.2949
+ 0.3209 0.3496 0.3820 0.4145 0.4505 0.4907 0.5344 0.5840
+ 0.6445 0.7093 0.8154 0.9816 0.9983 0.9988 0.9994 1.0000
+}"
+-dupCyanTransfer="{
+ 0.0000 0.0034 0.0185 0.0377 0.0574 0.0769 0.0952 0.1147
+ 0.1337 0.1540 0.1759 0.1985 0.2209 0.2457 0.2706 0.2949
+ 0.3209 0.3496 0.3820 0.4145 0.4505 0.4907 0.5344 0.5840
+ 0.6445 0.7093 0.8154 0.9816 0.9983 0.9988 0.9994 1.0000
+}"
+-dupMagentaTransfer="{
+ 0.0000 0.0034 0.0185 0.0377 0.0574 0.0769 0.0952 0.1147
+ 0.1337 0.1540 0.1759 0.1985 0.2209 0.2457 0.2706 0.2949
+ 0.3209 0.3496 0.3820 0.4145 0.4505 0.4907 0.5344 0.5840
+ 0.6445 0.7093 0.8154 0.9816 0.9983 0.9988 0.9994 1.0000
+}"
+-dupYellowTransfer="{
+ 0.0000 0.0034 0.0185 0.0377 0.0574 0.0769 0.0952 0.1147
+ 0.1337 0.1540 0.1759 0.1985 0.2209 0.2457 0.2706 0.2949
+ 0.3209 0.3496 0.3820 0.4145 0.4505 0.4907 0.5344 0.5840
+ 0.6445 0.7093 0.8154 0.9816 0.9983 0.9988 0.9994 1.0000
+}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2869 0100 00
+ 1b2855 0100 0A
+ 1b5500
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
+
diff --git a/Master/xemtex/gslib/stc200_h.upp b/Master/xemtex/gslib/stc200_h.upp
new file mode 100644
index 00000000000..40cdcd9c9bc
--- /dev/null
+++ b/Master/xemtex/gslib/stc200_h.upp
@@ -0,0 +1,51 @@
+-supModel="Epson Stylus Color 200 , 360x720DpI"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2XY
+-r360x720
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupOutputPins=19
+-dupWeaveYPasses=6
+-dupWeaveXPasses=1
+-dupWeaveYFeeds="{19 19 19 19 19 19}"
+-dupBlackTransfer="{
+ 0.0000 0.0034 0.0185 0.0377 0.0574 0.0769 0.0952 0.1147
+ 0.1337 0.1540 0.1759 0.1985 0.2209 0.2457 0.2706 0.2949
+ 0.3209 0.3496 0.3820 0.4145 0.4505 0.4907 0.5344 0.5840
+ 0.6445 0.7093 0.8154 0.9816 0.9983 0.9988 0.9994 1.0000
+}"
+-dupCyanTransfer="{
+ 0.0000 0.0034 0.0185 0.0377 0.0574 0.0769 0.0952 0.1147
+ 0.1337 0.1540 0.1759 0.1985 0.2209 0.2457 0.2706 0.2949
+ 0.3209 0.3496 0.3820 0.4145 0.4505 0.4907 0.5344 0.5840
+ 0.6445 0.7093 0.8154 0.9816 0.9983 0.9988 0.9994 1.0000
+}"
+-dupMagentaTransfer="{
+ 0.0000 0.0034 0.0185 0.0377 0.0574 0.0769 0.0952 0.1147
+ 0.1337 0.1540 0.1759 0.1985 0.2209 0.2457 0.2706 0.2949
+ 0.3209 0.3496 0.3820 0.4145 0.4505 0.4907 0.5344 0.5840
+ 0.6445 0.7093 0.8154 0.9816 0.9983 0.9988 0.9994 1.0000
+}"
+-dupYellowTransfer="{
+ 0.0000 0.0034 0.0185 0.0377 0.0574 0.0769 0.0952 0.1147
+ 0.1337 0.1540 0.1759 0.1985 0.2209 0.2457 0.2706 0.2949
+ 0.3209 0.3496 0.3820 0.4145 0.4505 0.4907 0.5344 0.5840
+ 0.6445 0.7093 0.8154 0.9816 0.9983 0.9988 0.9994 1.0000
+}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2855 0100 05
+ 1b5501
+ 1b2865 0200 0001
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
diff --git a/Master/xemtex/gslib/stc2_h.upp b/Master/xemtex/gslib/stc2_h.upp
new file mode 100644
index 00000000000..878abae53c5
--- /dev/null
+++ b/Master/xemtex/gslib/stc2_h.upp
@@ -0,0 +1,53 @@
+-supModel="Epson Stylus Color II, 720x720DpI, Special Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2
+-r720x720
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupWeaveYPasses=6
+-dupOutputPins=20
+-dupWeaveYFeeds="{20 20 19 22 16 23}"
+-dupWeaveInitialYFeeds="{1 1 1 1 1 19}"
+-dupWeaveInitialPins="{ 4 20 7 17 10 13}"
+-dupBlackTransfer="{
+ 0.0000 0.0011 0.0079 0.0151 0.0217 0.0287 0.0354 0.0425
+ 0.0492 0.0562 0.0633 0.0700 0.0766 0.0835 0.0900 0.0975
+ 0.1054 0.1147 0.1243 0.1364 0.1489 0.1641 0.1833 0.2012
+ 0.2217 0.2492 0.2814 0.3139 0.3487 0.3996 0.4527 0.5195
+}"
+-dupCyanTransfer="{
+ 0.0000 0.0011 0.0079 0.0151 0.0217 0.0287 0.0354 0.0425
+ 0.0492 0.0562 0.0633 0.0700 0.0766 0.0835 0.0900 0.0975
+ 0.1054 0.1147 0.1243 0.1364 0.1489 0.1641 0.1833 0.2012
+ 0.2217 0.2492 0.2814 0.3139 0.3487 0.3996 0.4527 0.5195
+}"
+-dupMagentaTransfer="{
+ 0.0000 0.0011 0.0079 0.0151 0.0217 0.0287 0.0354 0.0425
+ 0.0492 0.0562 0.0633 0.0700 0.0766 0.0835 0.0900 0.0975
+ 0.1054 0.1147 0.1243 0.1364 0.1489 0.1641 0.1833 0.2012
+ 0.2217 0.2492 0.2814 0.3139 0.3487 0.3996 0.4527 0.5195
+}"
+-dupYellowTransfer="{
+ 0.0000 0.0011 0.0079 0.0151 0.0217 0.0287 0.0354 0.0425
+ 0.0492 0.0562 0.0633 0.0700 0.0766 0.0835 0.0900 0.0975
+ 0.1054 0.1147 0.1243 0.1364 0.1489 0.1641 0.1833 0.2012
+ 0.2217 0.2492 0.2814 0.3139 0.3487 0.3996 0.4527 0.5195
+}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2869 0100 00
+ 1b2855 0100 05
+ 1b5500
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
+
diff --git a/Master/xemtex/gslib/stc2s_h.upp b/Master/xemtex/gslib/stc2s_h.upp
new file mode 100644
index 00000000000..802621fc876
--- /dev/null
+++ b/Master/xemtex/gslib/stc2s_h.upp
@@ -0,0 +1,57 @@
+-supModel="Epson Stylus Color IIs, 720x720DpI, Special Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2XY
+-r720x720
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupBlackTransfer="{
+ 0.0000 0.0003 0.0027 0.0056 0.0085 0.0120 0.0156 0.0196
+ 0.0227 0.0260 0.0292 0.0323 0.0354 0.0386 0.0416 0.0450
+ 0.0503 0.0564 0.0630 0.0711 0.0799 0.0905 0.1038 0.1169
+ 0.1321 0.1522 0.1761 0.2011 0.2285 0.2678 0.3102 0.3637
+}"
+-dupCyanTransfer="{
+ 0.0000 0.0008 0.0055 0.0106 0.0152 0.0201 0.0248 0.0298
+ 0.0344 0.0393 0.0443 0.0490 0.0536 0.0585 0.0630 0.0683
+ 0.0738 0.0803 0.0870 0.0955 0.1042 0.1149 0.1283 0.1408
+ 0.1552 0.1744 0.1970 0.2197 0.2441 0.2797 0.3169 0.3637
+}"
+-dupMagentaTransfer="{
+ 0.0000 0.0008 0.0055 0.0106 0.0152 0.0201 0.0248 0.0298
+ 0.0344 0.0393 0.0443 0.0490 0.0536 0.0585 0.0630 0.0683
+ 0.0738 0.0803 0.0870 0.0955 0.1042 0.1149 0.1283 0.1408
+ 0.1552 0.1744 0.1970 0.2197 0.2441 0.2797 0.3169 0.3637
+}"
+-dupYellowTransfer="{
+ 0.0000 0.0008 0.0055 0.0106 0.0152 0.0201 0.0248 0.0298
+ 0.0344 0.0393 0.0443 0.0490 0.0536 0.0585 0.0630 0.0683
+ 0.0738 0.0803 0.0870 0.0955 0.1042 0.1149 0.1283 0.1408
+ 0.1552 0.1744 0.1970 0.2197 0.2441 0.2797 0.3169 0.3637
+}"
+-dupFormatYabsolute
+-dupWeaveYPasses=6
+-dupWeaveXPasses=2
+-dupOutputPins=20
+-dupWeaveYFeeds="{10 10 10 10 10 11 10 10 10 10 10 9}"
+-dupWeaveXStarts="{0 1 0 1 0 1 0 1 0 1 0 1}"
+-dupWeaveInitialYFeeds="{ 1 1 1 1 1 1 1 1 1 1 1 1}"
+-dupWeaveInitialXStarts="{0 1 0 1 0 1 1 0 1 0 1 0}"
+-dupWeaveInitialPins="{ 2 17 5 20 8 13 6 11 9 14 2 17}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2869 0100 00
+ 1b2855 0100 05
+ 1b5500
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
+
diff --git a/Master/xemtex/gslib/stc300.upp b/Master/xemtex/gslib/stc300.upp
new file mode 100644
index 00000000000..029faac5dc5
--- /dev/null
+++ b/Master/xemtex/gslib/stc300.upp
@@ -0,0 +1,60 @@
+-supModel="Epson Stylus Color 300, 360x360 dpi, colour, Plain Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscNozzleMap
+-r360x360
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupWeaveYPasses=6
+-dupOutputPins=11
+-dupWeaveYFeeds="{11 11 11 11 11 11}"
+-dupWeaveInitialYFeeds="{1 1 1 1 1 7}"
+-dupWeaveInitialPins="{ 2 11 9 7 5 3}"
+-dupWeaveYOffset=0
+-dupNozzleMapRowsPerPass=64
+-dupNozzleMapPatternRepeat=6
+-dupNozzleMapRowMask="{ 2 4 1 3 0 0 }"
+-dupNozzleMapMaskScanOffset="{ 0 1 2 3 0 0 }"
+-dupBlackTransfer="{
+ 0.0000 0.0034 0.0185 0.0377 0.0574 0.0769 0.0952 0.1147
+ 0.1337 0.1540 0.1759 0.1985 0.2209 0.2457 0.2706 0.2949
+ 0.3209 0.3496 0.3820 0.4145 0.4505 0.4907 0.5344 0.5840
+ 0.6445 0.7093 0.8154 0.9816 0.9983 0.9988 0.9994 1.0000
+}"
+-dupCyanTransfer="{
+ 0.0000 0.0034 0.0185 0.0377 0.0574 0.0769 0.0952 0.1147
+ 0.1337 0.1540 0.1759 0.1985 0.2209 0.2457 0.2706 0.2949
+ 0.3209 0.3496 0.3820 0.4145 0.4505 0.4907 0.5344 0.5840
+ 0.6445 0.7093 0.8154 0.9816 0.9983 0.9988 0.9994 1.0000
+}"
+-dupMagentaTransfer="{
+ 0.0000 0.0034 0.0185 0.0377 0.0574 0.0769 0.0952 0.1147
+ 0.1337 0.1540 0.1759 0.1985 0.2209 0.2457 0.2706 0.2949
+ 0.3209 0.3496 0.3820 0.4145 0.4505 0.4907 0.5344 0.5840
+ 0.6445 0.7093 0.8154 0.9816 0.9983 0.9988 0.9994 1.0000
+}"
+-dupYellowTransfer="{
+ 0.0000 0.0034 0.0185 0.0377 0.0574 0.0769 0.0952 0.1147
+ 0.1337 0.1540 0.1759 0.1985 0.2209 0.2457 0.2706 0.2949
+ 0.3209 0.3496 0.3820 0.4145 0.4505 0.4907 0.5344 0.5840
+ 0.6445 0.7093 0.8154 0.9816 0.9983 0.9988 0.9994 1.0000
+}"
+
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b7c000900802a2c640316110524
+ 1b285208000052454d4f544531
+ 1b000000
+ 1b2847 0100 01
+ 1b2855 0100 0A
+ 1b2843 0200 7210
+ 1b5501
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
+
diff --git a/Master/xemtex/gslib/stc300bl.upp b/Master/xemtex/gslib/stc300bl.upp
new file mode 100644
index 00000000000..4c577952ea9
--- /dev/null
+++ b/Master/xemtex/gslib/stc300bl.upp
@@ -0,0 +1,40 @@
+-supModel="Epson Stylus Color 300, 180x180 dpi, black only, Plain Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceGray
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscNozzleMap
+-r360x180
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupWeaveYPasses=1
+-dupOutputPins=31
+-dupNozzleMapRowsPerPass=64
+-dupNozzleMapPatternRepeat=6
+-dupNozzleMapRowMask="{ 0 0 1 0 1 1}"
+-dupNozzleMapMaskScanOffset="{ 0 0 0 0 1 2 }"
+-dupWhiteTransfer="{
+1.0 0.921295345 0.846429467 0.775337517 0.707954228
+0.644212425 0.584044278 0.527380228 0.474149585 0.424279869
+0.377697408 0.334326446 0.294089675 0.256907612 0.222698912
+0.191379622 0.162863538 0.137061611 0.113881744 0.0932285339
+0.0750028 0.0591011234 0.0454152822 0.0338314585 0.0242292974
+0.0164806321 0.0104477014 0.00598061318 0.00291339168 0.00105723308
+0.000186894162 0.0
+}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b7c000900802a2c640316110524
+ 1b285208000052454d4f544531
+ 1b000000
+ 1b2847 0100 01
+ 1b2855 0100 14
+ 1b2843 0200 7210
+ 1b5501
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
+
diff --git a/Master/xemtex/gslib/stc300bm.upp b/Master/xemtex/gslib/stc300bm.upp
new file mode 100644
index 00000000000..db69d4a164a
--- /dev/null
+++ b/Master/xemtex/gslib/stc300bm.upp
@@ -0,0 +1,43 @@
+-supModel="Epson Stylus Color 300, 360x360 dpi, black only, Plain Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceGray
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscNozzleMap
+-r360x360
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupWeaveYPasses=2
+-dupOutputPins=31
+-dupWeaveYFeeds="{31 31}"
+-dupWeaveInitialYFeeds="{1 31}"
+-dupWeaveInitialPins="{16 31}"
+-dupNozzleMapRowsPerPass=64
+-dupNozzleMapPatternRepeat=6
+-dupNozzleMapRowMask="{ 0 0 1 0 1 1}"
+-dupNozzleMapMaskScanOffset="{ 0 0 0 0 2 4 }"
+-dupWhiteTransfer="{
+1.0 0.921295345 0.846429467 0.775337517 0.707954228
+0.644212425 0.584044278 0.527380228 0.474149585 0.424279869
+0.377697408 0.334326446 0.294089675 0.256907612 0.222698912
+0.191379622 0.162863538 0.137061611 0.113881744 0.0932285339
+0.0750028 0.0591011234 0.0454152822 0.0338314585 0.0242292974
+0.0164806321 0.0104477014 0.00598061318 0.00291339168 0.00105723308
+0.000186894162 0.0
+}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b7c000900802a2c640316110524
+ 1b285208000052454d4f544531
+ 1b000000
+ 1b2847 0100 01
+ 1b2855 0100 0a
+ 1b2843 0200 7210
+ 1b5501
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
+
diff --git a/Master/xemtex/gslib/stc500p.upp b/Master/xemtex/gslib/stc500p.upp
new file mode 100644
index 00000000000..e3b43d25b13
--- /dev/null
+++ b/Master/xemtex/gslib/stc500p.upp
@@ -0,0 +1,48 @@
+-supModel="Epson Stylus Color 500, 360x360DpI, not Weaved, Plain Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2
+-r360x360
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupBlackTransfer="{
+ 0.0000 0.0008 0.0075 0.0155 0.0235 0.0331 0.0430 0.0540
+ 0.0625 0.0714 0.0804 0.0889 0.0973 0.1061 0.1143 0.1239
+ 0.1382 0.1551 0.1732 0.1956 0.2196 0.2488 0.2854 0.3215
+ 0.3633 0.4185 0.4841 0.5529 0.6284 0.7365 0.8529 1.0000
+}"
+-dupCyanTransfer="{
+ 0.0000 0.0021 0.0152 0.0291 0.0418 0.0552 0.0681 0.0818
+ 0.0947 0.1082 0.1218 0.1347 0.1474 0.1607 0.1732 0.1877
+ 0.2029 0.2208 0.2393 0.2626 0.2866 0.3159 0.3528 0.3873
+ 0.4268 0.4797 0.5417 0.6042 0.6712 0.7692 0.8714 1.0000
+}"
+-dupMagentaTransfer="{
+ 0.0000 0.0021 0.0152 0.0291 0.0418 0.0552 0.0681 0.0818
+ 0.0947 0.1082 0.1218 0.1347 0.1474 0.1607 0.1732 0.1877
+ 0.2029 0.2208 0.2393 0.2626 0.2866 0.3159 0.3528 0.3873
+ 0.4268 0.4797 0.5417 0.6042 0.6712 0.7692 0.8714 1.0000
+}"
+-dupYellowTransfer="{
+ 0.0000 0.0021 0.0152 0.0291 0.0418 0.0552 0.0681 0.0818
+ 0.0947 0.1082 0.1218 0.1347 0.1474 0.1607 0.1732 0.1877
+ 0.2029 0.2208 0.2393 0.2626 0.2866 0.3159 0.3528 0.3873
+ 0.4268 0.4797 0.5417 0.6042 0.6712 0.7692 0.8714 1.0000
+}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2869 0100 01
+ 1b2855 0100 0A
+ 1b5500
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
+
diff --git a/Master/xemtex/gslib/stc500ph.upp b/Master/xemtex/gslib/stc500ph.upp
new file mode 100644
index 00000000000..c14bae5fe60
--- /dev/null
+++ b/Master/xemtex/gslib/stc500ph.upp
@@ -0,0 +1,48 @@
+-supModel="Epson Stylus Color 500, 720x720DpI, not Weaved, Plain Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2
+-r720x720
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupBlackTransfer="{
+ 0.0000 0.0003 0.0027 0.0056 0.0085 0.0120 0.0156 0.0196
+ 0.0227 0.0260 0.0292 0.0323 0.0354 0.0386 0.0416 0.0450
+ 0.0503 0.0564 0.0630 0.0711 0.0799 0.0905 0.1038 0.1169
+ 0.1321 0.1522 0.1761 0.2011 0.2285 0.2678 0.3102 0.3637
+}"
+-dupCyanTransfer="{
+ 0.0000 0.0008 0.0055 0.0106 0.0152 0.0201 0.0248 0.0298
+ 0.0344 0.0393 0.0443 0.0490 0.0536 0.0585 0.0630 0.0683
+ 0.0738 0.0803 0.0870 0.0955 0.1042 0.1149 0.1283 0.1408
+ 0.1552 0.1744 0.1970 0.2197 0.2441 0.2797 0.3169 0.3637
+}"
+-dupMagentaTransfer="{
+ 0.0000 0.0008 0.0055 0.0106 0.0152 0.0201 0.0248 0.0298
+ 0.0344 0.0393 0.0443 0.0490 0.0536 0.0585 0.0630 0.0683
+ 0.0738 0.0803 0.0870 0.0955 0.1042 0.1149 0.1283 0.1408
+ 0.1552 0.1744 0.1970 0.2197 0.2441 0.2797 0.3169 0.3637
+}"
+-dupYellowTransfer="{
+ 0.0000 0.0008 0.0055 0.0106 0.0152 0.0201 0.0248 0.0298
+ 0.0344 0.0393 0.0443 0.0490 0.0536 0.0585 0.0630 0.0683
+ 0.0738 0.0803 0.0870 0.0955 0.1042 0.1149 0.1283 0.1408
+ 0.1552 0.1744 0.1970 0.2197 0.2441 0.2797 0.3169 0.3637
+}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2869 0100 01
+ 1b2855 0100 05
+ 1b5500
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
+
diff --git a/Master/xemtex/gslib/stc600ih.upp b/Master/xemtex/gslib/stc600ih.upp
new file mode 100644
index 00000000000..6428c273da6
--- /dev/null
+++ b/Master/xemtex/gslib/stc600ih.upp
@@ -0,0 +1,58 @@
+-supModel="Epson Stylus Color 600, 1440x720DpI, Inkjet Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2XY
+-r1440x720
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupBlackTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.40000000
+}"
+-dupCyanTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.40000000
+}"
+-dupMagentaTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.40000000
+}"
+-dupYellowTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.40000000
+}"
+-dupOutputComponentOrder="{ 1 2 3 0 }"
+-dupWeaveXPasses=2
+-dupOutputXStep=2
+-dupWeaveYPasses=8
+-dupOutputPins=30
+-dupWeaveYFeeds="{15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15}"
+-dupWeaveXStarts="{0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0}"
+-dupWeaveYOffset=38
+-dupWeaveInitialYFeeds="{ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 15}"
+-dupWeaveInitialXStarts="{0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0}"
+-dupWeaveInitialPins="{ 15 9 18 12 6 15 9 18 27 21 30 24 18 27 21 30}"
+-dupFormatYabsolute
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2855 0100 05
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+ 1b5501
+ 1b2865 0200 0002
+ 1b284b 0200 0002
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupXStepCommand="<1b285c 0400 a005 0100 0000>"
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
+
diff --git a/Master/xemtex/gslib/stc600p.upp b/Master/xemtex/gslib/stc600p.upp
new file mode 100644
index 00000000000..f3b8338cac8
--- /dev/null
+++ b/Master/xemtex/gslib/stc600p.upp
@@ -0,0 +1,34 @@
+-supModel="Epson Stylus Color 600, 720x720DpI, Plain Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2
+-r720x720
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupBlackTransfer="{ 0.0000 0.0329 0.0706 0.1160 0.2392 0.7955 }"
+-dupCyanTransfer="{ 0.0000 0.0602 0.1133 0.1961 0.2945 0.3885 }"
+-dupMagentaTransfer="{ 0.0000 0.0452 0.0836 0.1215 0.1493 0.1749 }"
+-dupYellowTransfer="{ 0.0000 0.0350 0.0914 0.1567 0.2430 0.2934 }"
+-dupOutputComponentOrder="{ 1 2 3 0 }"
+-dupWeaveYPasses=8
+-dupOutputPins=32
+-dupWeaveYFeeds="{31 31 31 31 37 33 33 29}"
+-dupWeaveInitialYFeeds="{1 1 1 1 1 1 1 25}"
+-dupWeaveInitialPins="{ 4 24 28 32 19 15 11 7}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2855 0100 05
+ 1b5501
+ 1b2865 0200 0002
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
+
diff --git a/Master/xemtex/gslib/stc600pl.upp b/Master/xemtex/gslib/stc600pl.upp
new file mode 100644
index 00000000000..cfd6abf3530
--- /dev/null
+++ b/Master/xemtex/gslib/stc600pl.upp
@@ -0,0 +1,34 @@
+-supModel="Epson Stylus Color 600, 360x360DpI, Plain Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2
+-r360x360
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupBlackTransfer="{ 0.0000 0.0553 0.1158 0.1998 0.4321 1.0000 }"
+-dupCyanTransfer="{ 0.0000 0.1188 0.2272 0.3745 0.5396 0.6145 }"
+-dupMagentaTransfer="{ 0.0000 0.0851 0.1512 0.2111 0.2606 0.2818 }"
+-dupYellowTransfer="{ 0.0000 0.0679 0.1742 0.3129 0.4587 0.5389 }"
+-dupOutputComponentOrder="{ 1 2 3 0 }"
+-dupWeaveYPasses=4
+-dupOutputPins=32
+-dupWeaveYFeeds="{33 30 35 30}"
+-dupWeaveInitialYFeeds="{1 1 1 29}"
+-dupWeaveInitialPins="{ 8 16 32 23}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2855 0100 0A
+ 1b5501
+ 1b2865 0200 0002
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
+
diff --git a/Master/xemtex/gslib/stc640p.upp b/Master/xemtex/gslib/stc640p.upp
new file mode 100644
index 00000000000..6559f89defd
--- /dev/null
+++ b/Master/xemtex/gslib/stc640p.upp
@@ -0,0 +1,33 @@
+-supModel="Epson Stylus Color 640, 720x720DpI, Inkjet Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2
+-r720x720
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupBlackTransfer="{ 0.0 0.04 0.08 0.16 0.20 0.35}"
+-dupCyanTransfer="{ 0.0 0.06 0.12 0.18 0.24 0.45}"
+-dupMagentaTransfer="{ 0.0 0.05 0.10 0.15 0.20 0.42}"
+-dupYellowTransfer="{ 0.0 0.04 0.08 0.16 0.20 0.37}"
+-dupOutputComponentOrder="{ 1 2 3 0 }"
+-dupWeaveYPasses=8
+-dupOutputPins=32
+-dupWeaveYFeeds="{31 31 31 31 37 33 33 29}"
+-dupWeaveInitialYFeeds="{1 1 1 1 1 1 1 25}"
+-dupWeaveInitialPins="{ 4 24 28 32 19 15 11 7}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2855 0100 05
+ 1b5501
+ 1b2865 0200 0002
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
diff --git a/Master/xemtex/gslib/stc800ih.upp b/Master/xemtex/gslib/stc800ih.upp
new file mode 100644
index 00000000000..2adbab95952
--- /dev/null
+++ b/Master/xemtex/gslib/stc800ih.upp
@@ -0,0 +1,58 @@
+-supModel="Epson Stylus Color 800, 1440x720DpI, Inkjet Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2XY
+-r1440x720
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupBlackTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.40000000
+}"
+-dupCyanTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.40000000
+}"
+-dupMagentaTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.40000000
+}"
+-dupYellowTransfer="{
+ 0.00000000 0.00627451 0.01254902 0.02196078 0.02980392 0.03764706 0.04549020
+ 0.05490196 0.06431373 0.07215686 0.08156863 0.09098039 0.10196078 0.11450980
+ 0.12862745 0.14588235 0.16313725 0.18509804 0.20862745 0.25411765 0.40000000
+}"
+-dupOutputComponentOrder="{ 1 2 3 0 }"
+-dupWeaveXPasses=2
+-dupOutputXStep=2
+-dupWeaveYPasses=4
+-dupOutputPins=62
+-dupWeaveYFeeds="{31 31 31 31 31 31 31 31}"
+-dupWeaveXStarts="{0 1 0 1 1 0 1 0}"
+-dupWeaveYOffset=18
+-dupWeaveInitialYFeeds="{ 3 3 3 3 3 3 3 31}"
+-dupWeaveInitialXStarts="{0 1 0 1 1 0 1 0}"
+-dupWeaveInitialPins="{ 13 20 27 34 41 48 55 62}"
+-dupFormatYabsolute
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2855 0100 05
+ 1b2873 0100 02
+ 1b5501
+ 1b2865 0200 0001
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupXStepCommand="<1b285c 0400 a005 0100 0000>"
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
+
diff --git a/Master/xemtex/gslib/stc800p.upp b/Master/xemtex/gslib/stc800p.upp
new file mode 100644
index 00000000000..daaa005eb5f
--- /dev/null
+++ b/Master/xemtex/gslib/stc800p.upp
@@ -0,0 +1,34 @@
+-supModel="Epson Stylus Color 800, 720x720DpI, Plain Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2
+-r720x720
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupBlackTransfer="{ 0.0000 0.0329 0.0706 0.1160 0.2392 0.7955 }"
+-dupCyanTransfer="{ 0.0000 0.0602 0.1133 0.1961 0.2945 0.3885 }"
+-dupMagentaTransfer="{ 0.0000 0.0452 0.0836 0.1215 0.1493 0.1749 }"
+-dupYellowTransfer="{ 0.0000 0.0350 0.0914 0.1567 0.2430 0.2934 }"
+-dupOutputComponentOrder="{ 1 2 3 0 }"
+-dupWeaveYPasses=4
+-dupOutputPins=64
+-dupWeaveYFeeds="{63 63 67 63}"
+-dupWeaveInitialYFeeds="{1 1 1 61}"
+-dupWeaveInitialPins="{ 16 64 47 31}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2855 0100 05
+ 1b5501
+ 1b2865 0200 0002
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
+
diff --git a/Master/xemtex/gslib/stc800pl.upp b/Master/xemtex/gslib/stc800pl.upp
new file mode 100644
index 00000000000..7eceb31fd0c
--- /dev/null
+++ b/Master/xemtex/gslib/stc800pl.upp
@@ -0,0 +1,34 @@
+-supModel="Epson Stylus Color 800, 360x360DpI, Plain Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2
+-r360x360
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupBlackTransfer="{ 0.0000 0.0553 0.1158 0.1998 0.4321 1.0000 }"
+-dupCyanTransfer="{ 0.0000 0.1188 0.2272 0.3745 0.5396 0.6145 }"
+-dupMagentaTransfer="{ 0.0000 0.0851 0.1512 0.2111 0.2606 0.2818 }"
+-dupYellowTransfer="{ 0.0000 0.0679 0.1742 0.3129 0.4587 0.5389 }"
+-dupOutputComponentOrder="{ 1 2 3 0 }"
+-dupWeaveYPasses=2
+-dupOutputPins=64
+-dupWeaveYFeeds="{63 65}"
+-dupWeaveInitialYFeeds="{1 65}"
+-dupWeaveInitialPins="{ 33 64}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2855 0100 0A
+ 1b5501
+ 1b2865 0200 0002
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
+
diff --git a/Master/xemtex/gslib/stc_h.upp b/Master/xemtex/gslib/stc_h.upp
new file mode 100644
index 00000000000..6cf3c11026b
--- /dev/null
+++ b/Master/xemtex/gslib/stc_h.upp
@@ -0,0 +1,53 @@
+-supModel="Epson Stylus Color I (and PRO Series), 720x720DpI, Special Paper"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2
+-r720x720
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupWeaveYPasses=8
+-dupOutputPins=15
+-dupWeaveYFeeds="{15 15 15 15 15 15 15 15}"
+-dupWeaveInitialYFeeds="{1 1 1 1 1 1 1 8}"
+-dupWeaveInitialPins="{ 15 13 11 9 7 5 3 1}"
+-dupBlackTransfer="{
+ 0.0000 0.0011 0.0079 0.0151 0.0217 0.0287 0.0354 0.0425
+ 0.0492 0.0562 0.0633 0.0700 0.0766 0.0835 0.0900 0.0975
+ 0.1054 0.1147 0.1243 0.1364 0.1489 0.1641 0.1833 0.2012
+ 0.2217 0.2492 0.2814 0.3139 0.3487 0.3996 0.4527 0.5195
+}"
+-dupCyanTransfer="{
+ 0.0000 0.0011 0.0079 0.0151 0.0217 0.0287 0.0354 0.0425
+ 0.0492 0.0562 0.0633 0.0700 0.0766 0.0835 0.0900 0.0975
+ 0.1054 0.1147 0.1243 0.1364 0.1489 0.1641 0.1833 0.2012
+ 0.2217 0.2492 0.2814 0.3139 0.3487 0.3996 0.4527 0.5195
+}"
+-dupMagentaTransfer="{
+ 0.0000 0.0011 0.0079 0.0151 0.0217 0.0287 0.0354 0.0425
+ 0.0492 0.0562 0.0633 0.0700 0.0766 0.0835 0.0900 0.0975
+ 0.1054 0.1147 0.1243 0.1364 0.1489 0.1641 0.1833 0.2012
+ 0.2217 0.2492 0.2814 0.3139 0.3487 0.3996 0.4527 0.5195
+}"
+-dupYellowTransfer="{
+ 0.0000 0.0011 0.0079 0.0151 0.0217 0.0287 0.0354 0.0425
+ 0.0492 0.0562 0.0633 0.0700 0.0766 0.0835 0.0900 0.0975
+ 0.1054 0.1147 0.1243 0.1364 0.1489 0.1641 0.1833 0.2012
+ 0.2217 0.2492 0.2814 0.3139 0.3487 0.3996 0.4527 0.5195
+}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2869 0100 00
+ 1b2855 0100 05
+ 1b5500
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
+
diff --git a/Master/xemtex/gslib/stc_l.upp b/Master/xemtex/gslib/stc_l.upp
new file mode 100644
index 00000000000..f6de35a3bd3
--- /dev/null
+++ b/Master/xemtex/gslib/stc_l.upp
@@ -0,0 +1,26 @@
+-supModel="Epson Stylus Color I (and PRO Series), 360x360DpI, noWeave"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2
+-r360x360
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupComponentBits="{1 1 1 1}"
+-dupWeaveYPasses=4
+-dupOutputPins=15
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2869 0100 00
+ 1b2855 0100 0A
+ 1b5500
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
diff --git a/Master/xemtex/gslib/stcany.upp b/Master/xemtex/gslib/stcany.upp
new file mode 100644
index 00000000000..e00ea5c29e0
--- /dev/null
+++ b/Master/xemtex/gslib/stcany.upp
@@ -0,0 +1,24 @@
+-supModel="Any Epson Stylus Color, 360x360DpI"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYK
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2
+-r360x360
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupComponentBits="{1 1 1 1}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2869 0100 01
+ 1b2855 0100 0A
+ 1b5500
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
diff --git a/Master/xemtex/gslib/stcany_h.upp b/Master/xemtex/gslib/stcany_h.upp
new file mode 100644
index 00000000000..43a67b3dcfd
--- /dev/null
+++ b/Master/xemtex/gslib/stcany_h.upp
@@ -0,0 +1,24 @@
+-supModel="Any Epson Stylus Color, 720x720DpI"
+-sDEVICE=uniprint
+-dNOPAUSE
+-dSAFER
+-dupColorModel=/DeviceCMYKgenerate
+-dupRendering=/ErrorDiffusion
+-dupOutputFormat=/EscP2
+-r720x720
+-dupMargins="{ 9.0 39.96 9.0 9.0}"
+-dupComponentBits="{1 1 1 1}"
+-dupBeginPageCommand="<
+ 1b40 1b40
+ 1b2847 0100 01
+ 1b2869 0100 01
+ 1b2855 0100 05
+ 1b5500
+ 1b2843 0200 0000
+ 1b2863 0400 0000 0000
+>"
+-dupAdjustPageLengthCommand
+-dupAdjustTopMarginCommand
+-dupAdjustBottomMarginCommand
+-dupEndPageCommand="(\033@\014)"
+-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
diff --git a/Master/xemtex/gslib/stcinfo.ps b/Master/xemtex/gslib/stcinfo.ps
new file mode 100644
index 00000000000..c910f0d9435
--- /dev/null
+++ b/Master/xemtex/gslib/stcinfo.ps
@@ -0,0 +1,800 @@
+% Copyright (C) 1995 Aladdin Enterprises. All rights reserved
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: stcinfo.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% stcinfo.ps
+% Epson Stylus-Color Printer-Driver
+
+% The purpose of this file is to print & show Parameters of the
+% stcolor-driver. If not run on ghostscript/stcolor, it prints
+% something like a color-chart.
+
+% use either existing STCinfo-dictionary, retrieve new one or create dummy
+
+statusdict begin product end
+dup (Ghostscript) eq 1 index (Aladdin Ghostscript) eq or
+exch (AFPL Ghostscript) eq or{
+
+ currentdevice getdeviceprops .dicttomark
+ dup /Name get (stcolor) eq /STCi_onstc exch def
+ /STCinfo where {/STCinfo get exch pop} if
+ /STCinfo exch def
+
+}{
+
+ /STCinfo 10 dict def
+ STCinfo begin /Name (unknown) def end
+ /STCi_onstc false def
+
+}ifelse
+
+% Next Block are procedures to generate the color-triangles.
+% you may wish to separate them, just look ahead for the name
+% given in the next line to achieve that.
+% Begin: colortri_procedures
+
+% Plot the CIE-XY-triangle (or something like that)
+
+% /colortri_mat Conversion matrix RGB -> XYZ
+% /colortri_bg procedure, that takes X/Y-Values and delivers the
+% "background color" as RGB-Values, default is:
+% {pop pop 0.85 dup dup}
+
+% The default matrix was taken from:
+% Color spaces FAQ - David Bourgin
+% Date: 15/6/94 (items 5.3 and 6 updated)
+% Last update: 29/6/94
+
+ /colortri_mat [ % RGB -> CIE XYZitu601-1 (D65)
+ 0.4306 0.3415 0.1784
+ 0.2220 0.7067 0.0713
+ 0.0202 0.1295 0.9394
+ ] def
+
+ /colortri_bg {pop pop 0.85 dup dup} bind def
+
+
+% +---------------------------------------------------------------------+
+% | Besides from fixing bugs, nothing should be changed below this line |
+% +---------------------------------------------------------------------+
+
+
+% Arbitrary operation on a pair of vectors, *CHANGES* 1st.
+% invoke: Vaccu Vop op vop
+ /vop {
+ bind 0 1 3 index length 1 sub {
+ 3 index 1 index get 3 index 2 index get 3 index exec 4 index 3 1 roll put
+ } for pop pop
+ } bind def
+
+ /vsub { {sub} vop } bind def % subtract two vectors
+ /vmul { {mul} vop } bind def % multiply two vectors
+
+% Compute sum of vectors elements
+ /vsum {0.0 exch{add}forall} bind def
+
+
+% Sum up products of elements
+ /veqn { [ 3 -1 roll {} forall ] exch vmul vsum } bind def
+
+% Find index of |maximum| in array
+ /imax {
+ dup 0 get abs 0 exch % array i v[i]
+ 1 1 4 index length 1 sub {
+ 3 index 1 index get abs dup 3 index gt {4 2 roll}if pop pop
+ } for
+ 3 -1 roll pop
+ } bind def
+
+% Procedure to *CHANGE* RGB-Values into XYZ-Values
+ /rgb2xyz {
+ 0 3 6 { colortri_mat exch 3 getinterval 1 index veqn exch } for astore
+ } bind def
+
+% Procedure to *CHANGE* transform rgb->xy
+ /rgb2xy {
+ rgb2xyz
+ dup 0 get 1 index 1 get 2 index vsum % XYZ X Y sum
+ dup 0 ne {
+ exch 1 index div 3 1 roll div % XYZ y x
+ 2 index exch 0 exch put % xYZ y
+ 1 index exch 1 exch put % xyZ
+ }{
+ pop pop pop dup 0 0 put dup 0 1 put
+ } ifelse
+ 0 2 getinterval
+ } bind def
+
+% So here we go with our procedure
+
+/colortri { %Usage: box #pixels
+ save
+ 1 index type /arraytype eq {exch 8}{3 1 roll} ifelse % Default scale
+ /colortri_scale exch def
+ /colortri_box exch def
+
+
+% Prepare some useful constants for xy -> RGB conversion
+
+ /colsum [ % Array with column-sums
+ 0 1 2{0 exch 3 1 index 6 add{colortri_mat exch get add}for}for
+ ] def
+
+ /Xrow colortri_mat 0 3 getinterval def % two rows from colortri_mat
+ /Yrow colortri_mat 3 3 getinterval def
+
+% Avoid allocating new arrays
+ /xcoeff 3 array def
+ /ycoeff 3 array def
+
+% Procedure to derive RGB-Values form X,Y
+ /xy2rgb{ aload pop
+ dup dup dup ycoeff astore colsum vmul Yrow vsub imax
+ 3 index dup dup xcoeff astore colsum vmul Xrow vsub imax
+ 3 -1 roll 1 index 1 index gt{
+ xcoeff ycoeff /xcoeff exch def /ycoeff exch def pop 3 -1 roll pop
+ }{
+ 3 1 roll pop pop
+ } ifelse
+ 1e-6 lt { % No Pivot ?
+ pop colortri_bg xcoeff astore pop
+ }{ % Have a Pivot
+ dup ycoeff exch get neg
+ 0 1 2 { dup ycoeff exch get 2 index div ycoeff 3 1 roll put} for
+ pop ycoeff 1 index 0 put
+
+ xcoeff 1 index get
+ 0 1 2 {
+ ycoeff 1 index get 2 index mul xcoeff 2 index get add
+ xcoeff 3 1 roll put
+ } for
+ pop xcoeff 1 index 0 put
+ xcoeff imax 1e-6 lt { % no Pivot ?
+ pop pop colortri_bg xcoeff astore pop
+ }{
+ dup 2 index or 3 exch sub
+ xcoeff 1 index get xcoeff 3 index get div neg
+ xcoeff exch 3 index exch put
+ xcoeff 1 index 1 put
+ ycoeff exch get ycoeff 2 index get xcoeff 4 -1 roll get mul add
+ xcoeff 3 1 roll put
+ 0 1 2 {
+ xcoeff exch get dup -0.0015 lt exch 1.0015 gt or {
+ colortri_bg xcoeff astore dup exit
+ } if
+ } for
+ pop pop xcoeff
+ } ifelse
+ } ifelse
+ } bind def
+
+% Compute the displayed range
+ [ 1 1 1 ] rgb2xy
+ dup 0 get /colortri_x0 exch def /colortri_dx colortri_x0 def
+ 1 get /colortri_y0 exch def /colortri_dy colortri_y0 def
+ [[0 0 1][0 1 0][0 1 1][1 0 0][1 0 1][1 1 0]] {
+ rgb2xy
+ dup 0 get
+ dup colortri_x0 lt {/colortri_x0 1 index def}if
+ dup colortri_dx gt {/colortri_dx 1 index def}if
+ pop 1 get
+ dup colortri_y0 lt {/colortri_y0 1 index def}if
+ dup colortri_dy gt {/colortri_dy 1 index def}if
+ pop
+ } forall
+ colortri_dx colortri_x0 sub /colortri_dx exch def
+ colortri_dy colortri_y0 sub /colortri_dy exch def
+%
+
+% determine the scale
+ colortri_box 2 get colortri_box 0 get sub colortri_dx div % fx
+ colortri_box 3 get colortri_box 1 get sub colortri_dy div % fx fy
+ gt { % fy limits
+ colortri_box 3 get colortri_box 1 get sub
+ dup colortri_dx mul colortri_dy div exch
+ }{ % fx limits
+ colortri_box 2 get colortri_box 0 get sub
+ dup colortri_dy mul colortri_dx div
+ } ifelse
+ dtransform abs colortri_scale div cvi /colortri_ny exch def
+ abs colortri_scale div cvi /colortri_nx exch def
+ colortri_nx colortri_scale mul colortri_ny colortri_scale mul
+ idtransform abs exch abs exch
+ colortri_box 0 get colortri_box 2 get 1 index sub 3 index sub 2 div add
+ colortri_box 1 get colortri_box 3 get 1 index sub 3 index sub 2 div add
+ transform .5 add cvi exch .5 add cvi exch itransform
+ translate scale
+
+% String & indices
+ /colortri_tmp colortri_nx 3 mul string def
+ /colortri_dx colortri_dx colortri_nx 1 sub div def
+ /colortri_dy colortri_dy colortri_ny 1 sub div def
+ /colortri_xy [ colortri_x0 colortri_y0 ] def
+ /colortri_ie colortri_tmp length 3 sub def
+
+ colortri_nx colortri_ny 8 [ colortri_nx 0 0 colortri_ny 0 0 ]
+ {
+ colortri_xy 0 colortri_x0 put
+ 0 3 colortri_ie {
+ colortri_tmp exch % buf ir
+ colortri_xy xy2rgb % buf ir rgb buf ib
+ 2 index 2 index 2 add 2 index 2 get 255 mul cvi put
+ 2 index 2 index 1 add 2 index 1 get 255 mul cvi put
+ 0 get 255 mul cvi put
+ colortri_xy dup 0 exch 0 get colortri_dx add put
+ }for
+ colortri_xy dup 1 exch 1 get colortri_dy add put
+ colortri_tmp
+ } bind
+ false 3 colorimage
+ restore
+} bind def
+
+% [ newpath clippath pathbbox ] colortri showpage % standalone usage
+
+% End: colortri_procedures
+
+% The next section is a group of procedures, that I for myself
+% do no more fully understand, but they do the Job.
+
+% Begin: stcinfo_procedures_1
+
+% fetch a parameter from the dictionary
+/STCiget { STCinfo exch get } bind def
+
+% action upon ProcessColorModel
+/STCimode {
+ /ProcessColorModel STCiget dup
+ /DeviceCMYK eq{pop 2}{/DeviceRGB eq{1}{0}ifelse}ifelse get exec
+} bind def
+
+% print given number of blanks
+/STCipspace {
+ dup 0 gt{ 1 exch 1 exch { pop ( ) print}for }{ pop } ifelse
+} bind def
+
+% print right or left-justified text
+/STCiprint {
+ dup 0 gt { dup 2 index length sub STCipspace } if
+ 1 index print
+ dup 0 lt { neg dup 2 index length sub STCipspace } if
+ pop pop
+} bind def
+
+% floating-point to fixed-length-string conversion
+
+/STCicvs { % number -> string
+
+% Prepare the result
+ 8 string dup 0 ( ) putinterval
+ exch
+
+% Make it unsigned
+ dup 0 lt {neg(-)}{( )}ifelse 0 get exch
+
+ dup 1000 lt 1 index 0 eq 2 index 0.001 ge or and { % floating point
+ (e+) 0
+ }{ % engineering
+ 0 {
+ 1 index 1000.0 ge
+ {3 add exch 1000 div exch}
+ {1 index 1 lt {3 sub exch 1000 mul exch}{exit}ifelse}
+ ifelse
+ }loop
+ dup 0 lt {neg(e-)}{(e+)}ifelse exch
+ }ifelse
+
+% string sign num esig e
+
+% always up to three Integer Digits plus sign
+ 2 index cvi 3 { % string sign num esig e int ind
+ 1 index 10 div cvi dup 10 mul 3 index exch sub cvi
+ (0123456789) exch get 8 index exch 3 index exch put
+ 3 -2 roll 1 sub exch pop dup 0 eq 2 index 0 eq or {exit} if
+ } loop exch pop % string sign num esig e ind
+ 5 index exch 6 -1 roll put % string num esig e
+
+% print either fraction or exponent
+ dup 0 eq { pop pop dup cvi sub % String fraction
+
+ dup 0.0 ne { % Fraction present
+ 0.0005 add 1 index 4 (.) putinterval
+ 5 1 7 { % string frac ind
+ exch 10 mul dup cvi exch 1 index sub % string ind ic nfrac
+ exch (0123456789) exch get 3 -1 roll % string nfrac chr ind
+ exch 3 index 3 1 roll put
+ } for
+ } if
+ pop
+
+ }{ 3 -1 roll pop % string esig e
+
+ exch 2 index exch 4 exch putinterval
+ 7 -1 6 { % string n i
+ 1 index 10 div cvi dup 10 mul 3 index exch sub cvi % string n i n/10
+ (0123456789) exch get 4 index exch 3 index exch put
+ exch pop exch pop
+ } for
+ pop
+ } ifelse
+
+} bind def
+
+% compute colorvalue-steps from transfer & coding
+/STCisteps { % xfer, coding => X-values, Y-Values
+% 2^nbits
+ 2 /BitsPerComponent STCiget dup 11 gt { pop 11 } if exp cvi
+
+% X & Y - Arrays (stack: xv:4 yv:3 xfer:2 coding:1 2^ni:0)
+ dup 1 add array 1 index array 5 2 roll
+
+% compute GS-Color-Value according to the coding-array
+
+ 1 index null eq { % no coding present
+
+ 0 1 2 index 1 sub {
+ dup 6 index exch dup 4 index div put
+ 4 index exch dup 3 index 1 sub div put
+ } for
+
+ }{ % coding-array given
+
+ 1.0 1 index 1 sub div % y step
+ 0 % current index
+ 0 1 4 index 1 sub { % over indices
+ dup 3 index mul
+ {
+ dup 3 index 1 add dup 8 index length ge {pop pop exit} if % i y
+ 7 index exch get le {exit} if
+ 2 index 1 add 3 1 roll 4 -1 roll pop
+ } loop
+ 5 index 3 index get sub
+ 5 index 3 index 1 add get 6 index 4 index get sub div
+ 2 index add 5 index length 1 sub div
+ 2 copy exch dup 0 eq {
+ 10 index exch 0.0 put pop
+ }{
+ dup 10 index exch 1 sub get 3 -1 roll add 2 div
+ 10 index 3 1 roll put
+ }ifelse
+ 7 index 3 1 roll put
+ } for % over indices
+ pop pop
+ } ifelse
+ 4 index 1 index 1.0 put
+
+% Replace the raw y-values by those computed from the transfer-array
+
+ 0 1 2 index 1 sub { % over indices, 2nd
+ dup 5 index exch get
+ dup 5 index length 1 sub mul cvi % -> iy
+ 5 index 1 index get
+ 1 index 1 add 7 index length lt {
+ dup 7 index 3 index 1 add get exch sub
+ 3 index 3 index 9 index length 1 sub div sub mul
+ 7 index length 1 sub mul add
+ } if
+ exch pop exch pop 5 index 3 1 roll put
+ } for % over indices, 2nd
+
+ pop pop pop
+} bind def
+
+/STCibar { % Window X-Values proc => Window
+ 0 1 3 index length 2 sub {
+ dup 3 index exch get exch
+ 1 add 3 index exch get
+ dup 2 index add 2 div 3 index exec % Color to average
+ 4 index 2 get 5 index 0 get sub exch 1 index mul 5 index 0 get add 3 1 roll
+ mul 4 index 0 get add 4 index 3 get 5 index 1 get
+ newpath
+ 2 index 1 index moveto
+ 3 index 1 index lineto
+ 3 index 2 index lineto
+ 2 index 2 index lineto
+ closepath fill
+ pop pop pop pop
+ } for
+ pop pop
+ 0 setgray
+ newpath
+ dup 0 get 1 index 1 get moveto
+ dup 2 get 1 index 1 get lineto
+ dup 2 get 1 index 3 get lineto
+ dup 0 get 1 index 3 get lineto
+ closepath stroke
+ pop
+} bind def
+
+% End: stcinfo_procedures_1
+
+% Begin: stcinfo_preparation
+
+% Compute used area from clippath
+
+/STCi_clip [
+ newpath clippath pathbbox
+ 2 sub 4 1 roll 2 sub 4 1 roll 2 add 4 1 roll 2 add 4 1 roll
+] def
+
+%
+% Perpare the texual messages, assume no stcolor if this fails
+%
+{
+ /STCi_stopped % A Special Mark
+
+% Textual Parameters (an array of pairs of strings)
+ /STCi_l1 0 def
+ /STCi_l2 0 def
+ /STCi_text [
+% Driver-Name & Version
+ (Parameters of)
+ /Name STCiget length /Version STCiget length add 1 add string
+ dup 0 /Name STCiget putinterval dup /Name STCiget length (-)putinterval
+ dup /Name STCiget length 1 add /Version STCiget putinterval
+% Dithering-Algorithm
+ (Dithering)
+ /Dithering STCiget
+ [{( \(Monochrome\))}{( \(RGB\))}{( \(CMYK\))}] STCimode
+ dup length 2 index length add string exch 1 index exch
+ 3 index length exch putinterval dup 3 1 roll exch 0 exch putinterval
+% Flags for the algorithm
+ (Flag4-0) 5 string
+ dup 0 /Flag4 STCiget {(T)}{(f)} ifelse putinterval
+ dup 1 /Flag3 STCiget {(T)}{(f)} ifelse putinterval
+ dup 2 /Flag2 STCiget {(T)}{(f)} ifelse putinterval
+ dup 3 /Flag1 STCiget {(T)}{(f)} ifelse putinterval
+ dup 4 /Flag0 STCiget {(T)}{(f)} ifelse putinterval
+
+% Bits Per Pixel & Bits Per Component
+ (BitsPerPixel) 10 string % (nn -> nxnn)
+ /BitsPerPixel STCiget 1 index cvs length % string used
+ dup 2 index exch ( -> ) putinterval 4 add dup 2 add exch 2 index exch
+ [{(1x)}{(3x)}{(4x)}] STCimode putinterval % String used
+ /BitsPerComponent STCiget 2 index 2 index 2 getinterval cvs length add
+ 0 exch getinterval
+
+ () ()
+% ColorAdjustMatrix
+ (ColorAdjustMatrix)
+ /ColorAdjustMatrix STCiget dup null eq {
+ pop (default)
+ }{
+ { STCicvs } forall
+ [{ % Monochrome
+ 26 string
+ dup 0 6 -1 roll putinterval dup 8 ( ) putinterval
+ dup 9 5 -1 roll putinterval dup 17 ( ) putinterval
+ dup 18 4 -1 roll putinterval
+ }{ % RGB
+ 26 string
+ dup 0 12 -1 roll putinterval dup 8 ( ) putinterval
+ dup 9 11 -1 roll putinterval dup 17 ( ) putinterval
+ dup 18 10 -1 roll putinterval
+
+ () 26 string
+ dup 0 11 -1 roll putinterval dup 8 ( ) putinterval
+ dup 9 10 -1 roll putinterval dup 17 ( ) putinterval
+ dup 18 9 -1 roll putinterval
+
+ () 26 string
+ dup 0 10 -1 roll putinterval dup 8 ( ) putinterval
+ dup 9 9 -1 roll putinterval dup 17 ( ) putinterval
+ dup 18 8 -1 roll putinterval
+ }{
+ 35 string
+ dup 0 19 -1 roll putinterval dup 8 ( ) putinterval
+ dup 9 18 -1 roll putinterval dup 17 ( ) putinterval
+ dup 18 17 -1 roll putinterval dup 26 ( ) putinterval
+ dup 27 16 -1 roll putinterval
+
+ () 35 string
+ dup 0 17 -1 roll putinterval dup 8 ( ) putinterval
+ dup 9 16 -1 roll putinterval dup 17 ( ) putinterval
+ dup 18 15 -1 roll putinterval dup 26 ( ) putinterval
+ dup 27 14 -1 roll putinterval
+
+ () 35 string
+ dup 0 15 -1 roll putinterval dup 8 ( ) putinterval
+ dup 9 14 -1 roll putinterval dup 17 ( ) putinterval
+ dup 18 13 -1 roll putinterval dup 26 ( ) putinterval
+ dup 27 12 -1 roll putinterval
+
+ () 35 string
+ dup 0 13 -1 roll putinterval dup 8 ( ) putinterval
+ dup 9 12 -1 roll putinterval dup 17 ( ) putinterval
+ dup 18 11 -1 roll putinterval dup 26 ( ) putinterval
+ dup 27 10 -1 roll putinterval
+
+ }
+ ] STCimode
+ } ifelse
+ () ()
+
+% Printer Model
+ (Printer-Model) /Model STCiget
+
+% Resolution
+ (Resolution) 15 string % (nnnnnxnnnnn DpI)
+ /HWResolution STCiget 0 get cvi 1 index cvs length
+ dup 2 index exch (x) putinterval 1 add dup 2 index exch 5 getinterval
+ /HWResolution STCiget 1 get cvi exch cvs length add dup 2 index
+ exch ( DpI) putinterval 4 add 0 exch getinterval
+
+% HWsize holds entire Page in Pixels,
+% .HWMargins is [left,bottom,right,top] in Points
+ (Printed Area) 18 string % (nnnnnxnnnnn Pixel)
+ /HWSize STCiget 0 get /.HWMargins STCiget dup 0 get exch 2 get add
+ /HWResolution STCiget 0 get mul 72.0 div sub cvi 1 index cvs length
+ dup 2 index exch (x) putinterval 1 add dup 2 index exch 5 getinterval
+ /HWSize STCiget 1 get /.HWMargins STCiget dup 1 get exch 3 get add
+ /HWResolution STCiget 1 get mul 72.0 div sub cvi exch cvs length add
+ dup 2 index exch ( Pixel) putinterval 6 add 0 exch getinterval
+
+ () ()
+% WeaveMode
+ (Weave-Mode)
+ /noWeave STCiget {
+ (noWeave)
+ }{
+ /Microweave STCiget {(Microweave)}{(Softweave)}ifelse
+ }ifelse
+% Unidirectional
+ (Unidirectional) /Unidirectional STCiget {(ON)}{(off)} ifelse
+% Output coding
+ (OutputCode) /OutputCode STCiget
+% number of heads
+ (escp_Band) /escp_Band STCiget 3 string cvs
+ (escp_Width) /escp_Width STCiget 5 string cvs
+ (escp_Height) /escp_Height STCiget 5 string cvs
+ (escp_Top) /escp_Top STCiget 5 string cvs
+ (escp_Bottom) /escp_Bottom STCiget 5 string cvs
+ ] def
+
+%
+% compute the Proper X & Y-Arrays
+%
+ [{ % Monochrome
+ /Ktransfer STCiget /Kcoding STCiget STCisteps
+ /STCi_yv [ 3 -1 roll ] def
+ /STCi_xv [ 3 -1 roll ] def
+ /STCi_col [[0 0 0]] def
+ /STCi_set [{1.0 exch sub setgray}] def
+ }{ % RGB
+ /Rtransfer STCiget /Rcoding STCiget STCisteps
+ /Gtransfer STCiget /Gcoding STCiget STCisteps
+ /Btransfer STCiget /Bcoding STCiget STCisteps
+ exch 4 -1 roll 6 -1 roll exch 3 -1 roll
+ /STCi_xv [ 5 2 roll ] def
+ /STCi_yv [ 5 2 roll ] def
+ /STCi_col [[1 0 0] [0 1 0] [0 0 1]] def
+ /STCi_set [
+ {1.0 exch sub 1 exch dup setrgbcolor}
+ {1.0 exch sub dup 1 exch setrgbcolor}
+ {1.0 exch sub dup 1 setrgbcolor}
+ ] def
+ }{ % CMYK
+ /Ctransfer STCiget /Ccoding STCiget STCisteps
+ /Mtransfer STCiget /Mcoding STCiget STCisteps exch 3 1 roll
+ /Ytransfer STCiget /Ycoding STCiget STCisteps exch 4 1 roll
+ /Ktransfer STCiget /Kcoding STCiget STCisteps exch 5 1 roll
+ /STCi_yv [ 6 2 roll ] def
+ /STCi_xv [ 6 2 roll ] def
+ /STCi_col [[0 1 1] [1 0 1] [1.0 0.5 0.0] [0 0 0]] def
+ /STCi_set [
+ { 0 0 0 setcmykcolor }
+ { 0 exch 0 0 setcmykcolor }
+ { 0 exch 0 exch 0 setcmykcolor }
+ { 0 exch 0 exch 0 exch setcmykcolor }
+ ] def
+ }
+ ]STCimode
+
+} stopped
+
+{ {/STCi_stopped eq {exit}if}loop true}
+{ {/STCi_stopped eq {exit}if}loop false} ifelse
+
+% End: stcinfo_preparation
+
+% The Next section does the real job
+
+% Begin: stcinfo_execution
+{
+ (%%[ stcinfo.ps: currentdevice is not supported -> colortri ]%%\n) print
+ STCi_clip colortri % The default action
+
+}{
+%
+% Print the text
+%
+ 0 2 STCi_text length 2 sub { dup 1 add exch
+ STCi_text exch get length dup STCi_l1 gt{/STCi_l1 exch def}{pop}ifelse
+ STCi_text exch get length dup STCi_l2 gt{/STCi_l2 exch def}{pop}ifelse
+ } for
+ /STCi_l2 STCi_l2 neg def
+ 0 2 STCi_text length 2 sub {
+ dup 1 add STCi_text exch get exch STCi_text exch get
+ 1 index length 0 gt {
+ dup STCi_l1 STCiprint length 0 gt {(: )}{( )}ifelse print print
+ }{
+ pop pop
+ } ifelse
+ (\n) print
+ } for
+%
+% Deactivate a present ColorAdjust Matrix, if any
+%
+ /ColorAdjustMatrix STCiget null ne STCi_onstc and {
+ mark
+ /ColorAdjustMatrix null
+ currentdevice putdeviceprops pop
+ } if
+%
+% "Show" the text
+%
+ /Times-Roman findfont 10 scalefont setfont
+ /STCi_l1 0 def
+ 0 2 STCi_text length 2 sub {
+ STCi_text exch get stringwidth pop dup STCi_l1 gt {
+ /STCi_l1 exch def
+ }{
+ pop
+ } ifelse
+ } for
+ STCi_l1 STCi_clip 0 get add /STCi_l1 exch def
+
+ STCi_clip 3 get 12 sub
+ 0 2 STCi_text length 2 sub {
+ STCi_text exch get dup length 0 gt {
+ dup stringwidth pop STCi_l1 exch sub 2 index moveto show
+ }{
+ pop
+ } ifelse
+ 12 sub
+ } for
+ pop
+
+ /Courier findfont 10 scalefont setfont
+ /STCi_l2 0 def
+ 1 2 STCi_text length 1 sub {
+ STCi_text exch get stringwidth pop dup STCi_l2 gt {
+ /STCi_l2 exch def
+ }{
+ pop
+ } ifelse
+ } for
+
+ STCi_clip 3 get 12 sub
+ 1 2 STCi_text length 1 sub {
+ STCi_text exch get dup length 0 gt {
+ STCi_l1 12 add 2 index moveto show
+ }{
+ pop
+ } ifelse
+ 12 sub
+ } for
+ pop
+
+%
+% compute the space for the graph-window
+%
+ STCi_l1 12 add STCi_l2 add 12 add dup STCi_clip 2 get exch sub % Extend
+ [ 3 -1 roll dup 3 index add STCi_clip 3 get dup 5 index sub 3 1 roll ]
+ /STCi_win exch def /STCi_l1 exch def
+
+% The "Axis"
+ newpath
+ STCi_win 0 get STCi_win 1 get 14 add moveto
+ STCi_win 2 get STCi_win 1 get 14 add lineto stroke
+
+ STCi_win 0 get 14 add STCi_win 1 get moveto
+ STCi_win 0 get 14 add STCi_win 3 get lineto stroke
+
+% The Labels
+ /Times-Roman findfont 10 scalefont setfont
+ (Postscript-color) dup stringwidth pop
+ STCi_win 2 get STCi_win 0 get sub 14 sub 1 index sub 2 div exch pop
+ STCi_win 0 get add 14 add STCi_win 1 get 4 add moveto show
+
+ gsave
+ STCi_win 0 get 10 add STCi_win 1 get 14 add translate 90 rotate
+ (Device-color) dup stringwidth pop
+ STCi_win 3 get STCi_win 1 get sub 14 sub 1 index sub 2 div exch pop
+ 0 moveto show
+ grestore
+
+% The Graphs
+ gsave
+ STCi_win 0 get 14 add STCi_win 1 get 14 add
+ STCi_win 2 get 2 index sub STCi_win 3 get 2 index sub
+ 4 2 roll translate
+ STCi_col 0 1 2 index length 1 sub {
+ 1 index 1 index get aload pop setrgbcolor
+ STCi_xv 1 index get STCi_yv 3 -1 roll get
+ newpath
+ 1 index 0 get 5 index mul 1 index 0 get 5 index mul moveto
+ 1 index 1 get 5 index mul 1 index 0 get 5 index mul lineto
+ 1 1 2 index length 1 sub {
+ 2 index 1 index get 6 index mul
+ 2 index 2 index get 6 index mul lineto
+ 2 index 1 index 1 add get 6 index mul
+ 2 index 2 index get 6 index mul lineto
+ pop
+ } for
+ stroke pop pop
+ } for
+ pop pop pop
+ grestore
+
+%
+% Find lowest Y from Text or graph
+%
+ STCi_win 1 get STCi_clip 3 get STCi_text length 2 div 12 mul sub
+ dup 2 index gt { pop } { exch pop } ifelse 12 sub
+
+%
+% compute the upper bar-window
+%
+ /STCi_win [
+ STCi_clip 0 get 4 -1 roll 36 sub STCi_clip 2 get 1 index 36 add
+ ] def
+
+%
+% Draw the required number of graphs
+%
+ [{ % Monochrome
+ STCi_win STCi_xv 0 get {setgray} STCibar
+ }{ % RGB
+ STCi_win STCi_xv 0 get {0 0 setrgbcolor} STCibar
+ STCi_win dup 1 exch 1 get 47 sub put
+ STCi_win dup 3 exch 3 get 47 sub put
+ STCi_win STCi_xv 1 get {0 0 3 1 roll setrgbcolor} STCibar
+ STCi_win dup 1 exch 1 get 47 sub put
+ STCi_win dup 3 exch 3 get 47 sub put
+ STCi_win STCi_xv 2 get {0 0 3 2 roll setrgbcolor} STCibar
+ }{ % CMYK
+ STCi_win STCi_xv 0 get {0 0 0 setcmykcolor} STCibar
+ STCi_win dup 1 exch 1 get 47 sub put
+ STCi_win dup 3 exch 3 get 47 sub put
+ STCi_win STCi_xv 1 get {0 0 0 4 1 roll setcmykcolor} STCibar
+ STCi_win dup 1 exch 1 get 47 sub put
+ STCi_win dup 3 exch 3 get 47 sub put
+ STCi_win STCi_xv 2 get {0 0 0 4 2 roll setcmykcolor} STCibar
+ STCi_win dup 1 exch 1 get 47 sub put
+ STCi_win dup 3 exch 3 get 47 sub put
+ STCi_win STCi_xv 3 get {0 0 0 4 3 roll setcmykcolor} STCibar
+ }
+ ] STCimode
+
+ STCi_win 1 STCi_clip 1 get put
+ STCi_win dup 3 exch 3 get 47 sub put
+
+%
+% Plot either one or two Color-Triangles
+%
+ /ColorAdjustMatrix STCiget null ne STCi_onstc and {
+ STCi_win 0 get STCi_win 2 get add 2 div
+ [STCi_win 0 get STCi_win 1 get 3 index STCi_win 3 get ] colortri
+ mark /ColorAdjustMatrix dup STCiget currentdevice putdeviceprops pop
+ [1 index STCi_win 1 get STCi_win 2 get STCi_win 3 get ] colortri
+ pop
+ }{
+ STCi_win colortri
+ } ifelse
+ newpath clippath stroke
+} ifelse
+showpage
diff --git a/Master/xemtex/gslib/stcolor.ps b/Master/xemtex/gslib/stcolor.ps
new file mode 100644
index 00000000000..76b51dcc383
--- /dev/null
+++ b/Master/xemtex/gslib/stcolor.ps
@@ -0,0 +1,172 @@
+% Copyright (C) 1995 Aladdin Enterprises. All rights reserved
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: stcolor.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% stcolor.ps
+% Epson Stylus-Color Printer-Driver
+
+% The purpose of this file is to configure the stcolor-printer driver
+
+%
+% It is useless and dangerous to interpret the following code with anything
+% else than Ghostscript, so this condition is verified first. If this fails
+% a message is send to the output. If this message bothers you, remove it,
+% but I prefer to know why the device-setup failed.
+
+statusdict begin product end
+dup (Ghostscript) eq 1 index (Aladdin Ghostscript) eq or
+exch (AFPL Ghostscript) eq or{
+
+% fetch the current device-parameters this is specific for Ghostscript.
+
+ /STCold currentdevice getdeviceprops .dicttomark def
+
+% Any Ghostscript-Driver has a Name, verify that the selected device is
+% stcolor, otherwise nothing than another message will be produced.
+
+ STCold /Name get (stcolor) eq {
+
+%
+% The main thing this file does, is to establish transfer-functions.
+% Here are two predefined arrays for 360x360Dpi and for 720x720DpI.
+% If resolution is 360x720 or 720x360 the average is used. You may
+% want to define other arrays here.
+%
+
+ /STCdeftransfer [ 0.0 1.0 ] def
+
+ /STCKtransfer360 [
+ 0.0000 0.0034 0.0185 0.0377 0.0574 0.0769 0.0952 0.1147
+ 0.1337 0.1540 0.1759 0.1985 0.2209 0.2457 0.2706 0.2949
+ 0.3209 0.3496 0.3820 0.4145 0.4505 0.4907 0.5344 0.5840
+ 0.6445 0.7093 0.8154 0.9816 0.9983 0.9988 0.9994 1.0000
+ ] def
+
+ /STCKtransfer720 [
+ 0.0000 0.0011 0.0079 0.0151 0.0217 0.0287 0.0354 0.0425
+ 0.0492 0.0562 0.0633 0.0700 0.0766 0.0835 0.0900 0.0975
+ 0.1054 0.1147 0.1243 0.1364 0.1489 0.1641 0.1833 0.2012
+ 0.2217 0.2492 0.2814 0.3139 0.3487 0.3996 0.4527 0.5195
+ ] def
+
+% compute the resolution
+
+ STCold /HWResolution get dup
+ 0 get exch 1 get mul sqrt /STCdpi exch def
+
+% pick the colormodel
+ STCold /ProcessColorModel get /STCcolor exch def
+
+
+ mark % prepare stack for "putdeviceprops"
+
+% warn for BitsPerPixel=30 with fsrgb
+ STCcolor /DeviceRGB eq STCold /BitsPerPixel get 32 eq and
+ {
+ (%%[ stcolor.ps: inefficient RGB-setup, recommend BitsPerPixel=24 ]%%\n)
+ print
+ } if
+
+% if the Dithering-Method is default (gscmyk), change it to fscmyk
+% this is achieved by pushing a name/value-pair onto the stack
+% if the selected algorithm uses another ProcessColorModel, it is necessary
+% to change the Value of STCcolor according to the new algorithm.
+
+ STCold /Dithering get (gscmyk) eq
+ {
+ /Dithering (hscmyk) % preferred dithering-method
+ } if % might be necessary to change STCcolor too
+
+%
+% select the array according to the resolution
+%
+ STCdpi 359.0 lt
+ { STCdeftransfer }
+ { STCdpi 361.0 lt
+ { STCKtransfer360 }
+ { STCdpi 719.0 gt
+ { STCKtransfer720 }
+ {
+ STCKtransfer360 length STCKtransfer720 length eq
+ {
+ 0 1 STCKtransfer360 length 1 sub
+ {
+ dup dup
+ STCKtransfer360 exch get
+ exch STCKtransfer720 exch get
+ add 2.0 div
+ STCKtransfer360 3 1 roll put
+ } for
+ }if
+ STCKtransfer360
+ } ifelse
+ }ifelse
+ } ifelse
+ /STCtransfer exch def
+
+%
+% Add the arrays. With Version 1.17 and above, it seems to be
+% a good idea, to use the transfer-arrays as coding-arrays too.
+%
+
+%
+% RGB-Model requires inversion of the transfer-arrays
+%
+ STCcolor /DeviceRGB eq
+ {
+ /RGBtransfer STCtransfer length array def
+ 0 1 STCtransfer length 1 sub
+ {
+ dup RGBtransfer length 1 sub exch sub exch
+ STCtransfer exch get 1.0 exch sub
+ RGBtransfer 3 1 roll put
+ } for
+
+ /Rtransfer RGBtransfer
+ /Gtransfer RGBtransfer
+ /Btransfer RGBtransfer
+
+ /Rcoding RGBtransfer
+ /Gcoding RGBtransfer
+ /Bcoding RGBtransfer
+
+ }{
+
+ /Ctransfer STCtransfer
+ /Mtransfer STCtransfer
+ /Ytransfer STCtransfer
+ /Ktransfer STCtransfer
+
+ /Ccoding STCtransfer
+ /Mcoding STCtransfer
+ /Ycoding STCtransfer
+ /Kcoding STCtransfer
+
+ } ifelse
+
+ counttomark 0 ne
+ {currentdevice putdeviceprops pop}{cleartomark}ifelse
+
+% decativate predefined correction
+
+ {} dup dup currenttransfer setcolortransfer
+
+ }{
+ (%%[ stcolor.ps: currentdevice is not stcolor - ignored ]%%\n) print
+ } ifelse
+}{
+ (%%[ stcolor.ps: not interpreted by AFPL Ghostscript - ignored ]%%\n) print
+} ifelse
diff --git a/Master/xemtex/gslib/stocht.ps b/Master/xemtex/gslib/stocht.ps
new file mode 100644
index 00000000000..db56356c3a6
--- /dev/null
+++ b/Master/xemtex/gslib/stocht.ps
@@ -0,0 +1,63 @@
+% Copyright (C) 1999, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: stocht.ps,v 1.3.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% helper file to simplify use of Stochastic Halftone - uses ht_ccsto.ps
+
+% This file sets the /StochasticDefault /Halftone as the current
+% and the /Default halftoning, loading the Stochastic halftone
+% if required.
+
+% Stochastic halftoning is recommended for inkjet printers, and may
+% produce output as pleasing as the more computationally expensive
+% "error diffusion" that *some* device drivers provide.
+
+% For printing technologies other than inkjet, Stochastic halftoning
+% may not look better than standard screening. In particular, thermal
+% transfer and direct thermal tend to be better with standard ordered
+% screening methods. Some laser printers may produce "smoother"
+% looking gray shades with Stochastic halftoning. Try it, and if
+% you like it, use it.
+
+% Note that this /Default halftone can be overridden by PostScript
+% operators that set the screening or halftone (such as setscreen).
+
+% To make Stochastic Halftone be "sticky" so that other screening and
+% halftone setting in the subsequent PostScript will be ignored, use:
+% -c "<< /HalftoneMode 1 >> setuserparams"
+% on the command line prior to the file to be processed. For example,
+%
+% gs stocht.ps -c "<< /HalftoneMode 1 >> setuserparams" -f examples/tiger.ps
+
+% Alternatively, the command to set the /HalftoneMode userparam can be
+% concatenated to this file (see below).
+
+% =====================================================================
+% Try to get the previously defined resource
+{ /StochasticDefault /Halftone findresource } stopped
+{
+ pop pop
+ % Need to load the Stochastic Halftone using the lib file
+ (ht_ccsto.ps) runlibfile
+} if
+
+% If we didn't error out by now, then go ahead and define the /Default
+/StochasticDefault /Halftone findresource
+/Default exch /Halftone defineresource
+sethalftone % Use the halftone
+
+% Uncomment the next line to make the Stocahstic halftoning be "sticky"
+% << /HalftoneMode 1 >> setuserparams
diff --git a/Master/xemtex/gslib/sysvlp.sh b/Master/xemtex/gslib/sysvlp.sh
new file mode 100644
index 00000000000..b93304ce481
--- /dev/null
+++ b/Master/xemtex/gslib/sysvlp.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+# $Id: sysvlp.sh,v 1.1 2000/03/09 08:40:40 lpd Exp $
+
+# System V 3.2 lp interface for parallel, postscript printer
+# with ghostscript 2.5.n.
+#
+# Thanks to Arne Ludwig (arne@rrzbu.hanse.de) for this script.
+#
+
+DEVICE=lbp8
+GSHOME=/local/gs/2.5b2
+FONT=/local
+LIBDIR=/usr/spool/lp/admins/lp/interfaces
+#EHANDLER=$LIBDIR/ehandler.ps
+
+GS_LIB=$GSHOME:$FONT/fonts:$FONT/fonts/lw:$FONT/fonts/gs
+export GS_LIB
+
+copies=$4
+shift 5
+files="$*"
+
+# serial line settings
+# stty 19200 ixon ixoff 0<&1
+# stty 1200 tabs cread opost onlcr ixon ixany ff1 cr2 nl0 0<&1
+
+# Brother HL-4: switch to HP laserjet II+ emulation
+# echo "\033\015H\c"
+
+i=1
+while [ $i -le $copies ]
+do
+ for file in $files
+ do
+ $GSHOME/gs \
+ -sOUTPUTFILE=/tmp/psp$$.%02d \
+ -sDEVICE=$DEVICE \
+ $EHANDLER $file \
+ < /dev/null >> /usr/tmp/ps_log 2>&1
+
+ cat /tmp/psp$$.* 2>> /usr/tmp/ps_log
+ rm -f /tmp/psp$$.*
+ done
+ i=`expr $i + 1`
+done
+exit 0
diff --git a/Master/xemtex/gslib/traceimg.ps b/Master/xemtex/gslib/traceimg.ps
new file mode 100644
index 00000000000..1b8488c9aa7
--- /dev/null
+++ b/Master/xemtex/gslib/traceimg.ps
@@ -0,0 +1,43 @@
+% Copyright (C) 1994 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: traceimg.ps,v 1.2.6.2.2.1 2003/04/12 14:02:39 giles Exp $
+% traceimg.ps
+% Trace the data supplied to the 'image' operator.
+
+% This code currently handles only the (Level 2) dictionary form of image,
+% with a single data source and 8-bit pixels.
+
+/traceimage % <dict> traceimage -
+ { currentcolorspace == (setcolorspace\n) print
+ (<<) print
+ dup { (\t) print exch ==only ( ) print == } forall
+ (>>\n) print flush
+ begin /i_left Width Height mul store /i_dict currentdict store end
+ { i_left 0 le { exit } if
+ i_dict /DataSource get exec
+ dup type /filetype eq
+ { i_buf 0 i_left 32 .min getinterval readstring pop
+ } if
+ dup (%stdout) (w) file exch writehexstring (\n) print flush
+ i_left exch length sub /i_left exch def
+ } loop
+ } bind odef
+
+/image /traceimage load def
+/i_left 0 def
+/i_dict null def
+/i_buf 32 string def
diff --git a/Master/xemtex/gslib/traceop.ps b/Master/xemtex/gslib/traceop.ps
new file mode 100644
index 00000000000..3ac00cb8623
--- /dev/null
+++ b/Master/xemtex/gslib/traceop.ps
@@ -0,0 +1,84 @@
+% Copyright (C) 1992, 1993, 1994, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: traceop.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% Trace individual operators or procedures.
+% <opref> is <opname> or <opname> <dict>
+% (dict defaults to dict where op is currently defined, if writable;
+% otherwise uses userdict)
+% <opref> traceop prints vmem usage before;
+% <opref> <numargs|preproc> prints arguments or runs proc before;
+% <opref> <numargs|preproc> <numresults|postproc>
+% also prints results or runs proc after.
+% If traceflush is true, flush the output after each printout.
+/traceflush true def
+
+currentpacking true setpacking
+.currentglobal true .setglobal
+
+% Define the default "before" action
+/tracebefore { vmstatus 3 traceprint pop pop pop } def
+
+% Define the default "after" action
+/traceafter { } def
+
+/traceprint {
+ dup type /integertype eq {
+ 1 sub -1 0 { ( ) print index ==only } for
+ } {
+ exec
+ } ifelse
+} bind def
+/traceend {
+ traceflush { flush } if
+} bind def
+/traceop {
+ userdict begin
+ dup type dup /nametype eq exch /dicttype eq or { { tracebefore } } if
+ 1 index type dup /nametype eq exch /dicttype eq or { { traceafter } } if
+ /.tpost exch def /.tpre exch def
+ dup type /dicttype ne {
+ dup where not { userdict 1 index {} put userdict } if
+ } if
+ dup dup wcheck not {
+ (Warning: substituting userdict for non-writable dictionary.) =
+ pop userdict
+ } if
+ /.tddict exch def /.tdict exch def /.tname exch cvlit def
+ .currentglobal [
+ .tname /=only cvx ( ) /print cvx
+ /.tpre load /traceprint cvx /traceend cvx
+ .tdict .tname get /.tdef 1 index cvlit def
+ dup xcheck {
+ dup type dup /arraytype eq exch /packedarraytype eq or {
+ /exec cvx
+ } if
+ } if
+ /.tpost load /traceprint cvx () /= cvx /traceend cvx
+ .tdef gcheck /.tpre load gcheck and /.tpost load gcheck and .setglobal
+ ] cvx
+ .tdef type /operatortype eq {
+ .tname exch .makeoperator
+ } if
+ exch .setglobal
+ .tddict exch .tname exch put
+ end % userdict
+} bind def
+/tracebind /bind load def % in case someone wants to put it back
+/bind { } def % disable
+
+.setglobal
+setpacking
diff --git a/Master/xemtex/gslib/type1enc.ps b/Master/xemtex/gslib/type1enc.ps
new file mode 100644
index 00000000000..02573c42f01
--- /dev/null
+++ b/Master/xemtex/gslib/type1enc.ps
@@ -0,0 +1,66 @@
+% Copyright (C) 1992, 1993 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: type1enc.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% type1enc.ps
+% PostScript language versions of the Type 1 encryption/decryption algorithms.
+
+% This file is normally not needed with Ghostscript, since Ghostscript
+% implements these algorithms in C. For the specifications, see Chapter 7 of
+% "Adobe Type 1 Font Format," ISBN 0-201-57044-0, published by Addison-Wesley.
+
+/.type1crypt % <R> <from> <to> <proc> .type1crypt <R'> <to>
+ % (auxiliary procedure)
+ { 4 1 roll
+ 0 2 index length getinterval
+ 0 1 2 index length 1 sub
+ { % Stack: proc R from to index
+ 2 index 1 index get % proc R from to index C/P
+ 4 index -8 bitshift xor 3 copy put % proc R from to index P/C
+ 5 index exec % proc R from to C
+
+% Compute R' = ((R + C) * 52845 + 22719) mod 65536
+% without exceeding a 31-bit integer magnitude, given that
+% 0 <= R <= 65535 and 0 <= C <= 255.
+
+ 4 -1 roll add
+ dup 20077 mul % 52845 - 32768
+ exch 1 and 15 bitshift add % only care about 16 low-order bits
+ 22719 add 65535 and 3 1 roll
+ }
+ for exch pop 3 -1 roll pop
+ } bind def
+
+% <state> <fromString> <toString> .type1encrypt <newState> <toSubstring>
+% Encrypts fromString according to the algorithm for Adobe
+% Type 1 fonts, writing the result into toString.
+% toString must be at least as long as fromString or a
+% rangecheck error occurs. state is the initial state of
+% the encryption algorithm (a 16-bit non-negative
+% integer); newState is the new state of the algorithm.
+
+/.type1encrypt
+ { { exch pop } .type1crypt
+ } bind def
+
+% <state> <fromString> <toString> .type1decrypt <newState> <toSubstring>
+% Decrypts fromString according to the algorithm for Adobe
+% Type 1 fonts, writing the result into toString. Other
+% specifications are as for type1encrypt.
+
+/.type1decrypt
+ { { pop 2 index exch get } .type1crypt
+ } bind def
diff --git a/Master/xemtex/gslib/type1ops.ps b/Master/xemtex/gslib/type1ops.ps
new file mode 100644
index 00000000000..c4644924f73
--- /dev/null
+++ b/Master/xemtex/gslib/type1ops.ps
@@ -0,0 +1,238 @@
+% Copyright (C) 1992, 1997, 1998, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: type1ops.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% type1ops.ps
+% Define the Type 1 and Type 2 font opcodes for use by Ghostscript utilities.
+
+% Define the default value of lenIV.
+% Note that this expects the current font to be on the dictionary stack.
+
+/lenIV { FontType 2 eq { -1 } { 4 } ifelse } def
+
+% ---------------- Encoding ---------------- %
+
+/Type1encode 70 dict
+
+ % Data types
+
+dup /nulltype {
+ pop ()
+} put
+dup /nametype {
+ Type1encode exch get
+} put
+dup /stringtype {
+} put
+dup /integertype {
+ dup dup -107 ge exch 107 le and {
+ 139 add (x) dup 0 4 -1 roll put
+ } {
+ dup dup -1131 ge exch 1131 le and {
+ dup 0 ge { 16#f694 } { neg 16#fa94 } ifelse add
+ (xx) dup dup 0 4 index -8 bitshift put
+ 1 4 -1 roll 255 and put
+ } {
+ (\377xxxx) 1 1 4 {
+ dup 8 mul 32 sub 3 index exch bitshift 255 and
+ 2 index 3 1 roll put
+ } for exch pop
+ } ifelse
+ } ifelse
+} put
+
+ % Operators
+
+% Identical or similar in Type 1 and Type 2.
+/c_hstem 1 def dup /hstem <01> put
+/c_vstem 3 def dup /vstem <03> put
+/c_vmoveto 4 def dup /vmoveto <04> put
+/c_rlineto 5 def dup /rlineto <05> put
+/c_hlineto 6 def dup /hlineto <06> put
+/c_vlineto 7 def dup /vlineto <07> put
+/c_rrcurveto 8 def dup /rrcurveto <08> put
+/c_callsubr 10 def /s_callsubr <0a> def dup /callsubr s_callsubr put
+/c_return 11 def dup /return <0b> put
+/c_escape 12 def
+ /ce_div 12 def /s_div <0c0c> def dup /div s_div put
+/c_endchar 14 def /s_endchar <0e> def dup /endchar s_endchar put
+/c_rmoveto 21 def dup /rmoveto <15> put
+/c_hmoveto 22 def dup /hmoveto <16> put
+/c_vhcurveto 30 def dup /vhcurveto <1e> put
+/c_hvcurveto 31 def dup /hvcurveto <1f> put
+% Only in Type 1.
+/c_closepath 9 def dup /closepath <09> put
+/c_hsbw 13 def /s_hsbw <0d> def dup /hsbw s_hsbw put
+ /ce_dotsection 0 def /s_dotsection <0c06> def dup /dotsection s_dotsection put
+ /ce_vstem3 1 def /s_vstem3 <0c01> def dup /vstem3 s_vstem3 put
+ /ce_hstem3 2 def /s_hstem3 <0c02> def dup /hstem3 s_hstem3 put
+ /ce_seac 6 def /s_seac <0c06> def dup /seac s_seac put
+ /ce_sbw 7 def /s_sbw <0c07> def dup /sbw s_sbw put
+ /ce_callothersubr 16 def /s_callothersubr <0c10> def dup /callothersubr s_callothersubr put
+ /ce_pop 17 def /s_pop <0c11> def dup /pop s_pop put
+ /ce_setcurrentpoint 33 def /s_setcurrentpoint <0c21> def dup /setcurrentpoint s_setcurrentpoint put
+ /s_setcurrentpoint_hmoveto s_setcurrentpoint <8b16> concatstrings def
+% Only in Type 2.
+dup /blend <10> put
+dup /hstemhm <12> put
+dup /hintmask <13> put
+dup /cntrmask <14> put
+dup /vstemhm <17> put
+dup /rcurveline <18> put
+dup /rlinecurve <19> put
+dup /vvcurveto <1a> put
+dup /hhcurveto <1b> put
+dup /callgsubr <1d> put
+ dup /and <0c03> put
+ dup /or <0c04> put
+ dup /not <0c05> put
+ dup /store <0c08> put
+ dup /abs <0c09> put
+ dup /add <0c0a> put
+ dup /sub <0c0b> put
+ dup /load <0c0d> put
+ dup /neg <0c0c> put
+ dup /eq <0c0f> put
+ dup /drop <0c12> put
+ dup /put <0c14> put
+ dup /get <0c15> put
+ dup /ifelse <0c16> put
+ dup /random <0c17> put
+ dup /mul <0c18> put
+ dup /sqrt <0c1a> put
+ dup /dup <0c1b> put
+ dup /exch <0c1c> put
+ dup /index <0c1d> put
+ dup /roll <0c1e> put
+ dup /hflex <0c22> put
+ dup /flex <0c23> put
+ dup /hflex1 <0c24> put
+ dup /flex1 <0c25> put
+
+readonly def
+
+% ---------------- Decoding ---------------- %
+
+/Type1decode 512 array
+
+Type1encode {
+ dup type /stringtype eq {
+ dup length 1 eq { 0 get } { 1 get 256 add } ifelse
+ % stack: array key code
+ exch 2 index 3 1 roll put
+ } {
+ pop pop
+ } ifelse
+} forall
+
+dup 12 {
+ dup read pop dup Type1decode exch 256 add get dup null ne
+ { exch pop }
+ { pop 2 string dup 0 12 put dup 1 4 -1 roll put }
+ ifelse
+} put
+dup 28 { % Type 2 only
+ dup read pop 128 xor 128 sub 8 bitshift
+ 1 index read pop add
+} put
+32 1 246 { 2 copy dup 139 sub put pop } for
+dup 247 { dup read pop 108 add } put
+dup 248 { dup read pop 364 add } put
+dup 249 { dup read pop 620 add } put
+dup 250 { dup read pop 876 add } put
+dup 251 { dup read pop 108 add neg } put
+dup 252 { dup read pop 364 add neg } put
+dup 253 { dup read pop 620 add neg } put
+dup 254 { dup read pop 876 add neg } put
+dup 255 { % Different for Type 1 and Type 2
+ dup read pop 128 xor 128 sub
+ 3 { 8 bitshift 1 index read pop add } repeat
+ FontType 2 eq { 65536.0 div } if
+} put
+
+readonly def
+
+% ---------------- Procedures ---------------- %
+
+% For these utilities, a CharString is represented by a sequence of
+% integers, reals, strings, and names, either in an array or on the stack.
+% Integers and reals represent themselves; strings are other data that
+% appears in the CharString; names are CharString operator names.
+% A CharString in an array is called a "charproc"; a CharString on
+% the stack is called a "charstack", and is delimited by a mark.
+% Individual elements are called "chartokens".
+
+% ------ Encoding ------ %
+
+% Get the string for a chartoken.
+% Note that this string may be overwritten by the next call.
+/chartoken_string { % <chartoken> chartoken_string <string>
+ dup type Type1encode exch get exec
+} bind def
+% Compute the length of a CharString.
+/chartoken_length { % <chartoken> chartoken_length <length>
+ chartoken_string length
+} bind def
+/charproc_length { % <charproc> charproc_length <length>
+ 0 exch { chartoken_length add } forall
+} bind def
+/charstack_length { % <charstack> charstack_length <charstack> <length>
+ counttomark 0 exch -1 1 { index chartoken_length add } for
+} bind def
+
+% Write a CharString to a file. Normally this will be a NullEncode filter
+% writing on a string of the correct length.
+/chartoken_write { % <file> <chartoken> chartoken_write -
+ chartoken_string writestring
+} bind def
+/charproc_write { % <file> <charproc> charproc_write -
+ { 1 index exch chartoken_write } forall pop
+} bind def
+% Note that the arguments of charstack_write are backwards.
+/charstack_write { % <charstack> <file> charstack_write -
+ counttomark 1 sub -1 1 { index 1 index exch chartoken_write } for
+ cleartomark
+} bind def
+
+% Convert a charproc or charstack to an *un*encrypted CharString.
+/charproc_string { % <charproc> charproc_string <string>
+ mark exch aload pop charstack_string
+} bind def
+/charstack_string { % <charstack> charstack_string <string>
+ charstack_length lenIV 0 gt {
+ lenIV add string
+ dup dup length lenIV sub lenIV exch getinterval % skip lenIV
+ } {
+ string
+ } ifelse
+ /NullEncode filter
+ exch 1 index counttomark 1 add 2 roll
+ charstack_write closefile
+% lenIV 0 ge { 4330 exch dup .type1encrypt exch pop readonly } if
+} bind def
+
+% ------ Decoding ------ %
+
+% Decode a CharString (unencrypted).
+/charstack_read { % <file> charstack_read <no-mark-charstack>
+ { dup read not { pop exit } if
+ Type1decode 1 index get dup null eq {
+ pop 1 string dup 0 4 -1 roll put
+ } {
+ exch pop exec
+ } ifelse exch
+ } loop
+} bind def
diff --git a/Master/xemtex/gslib/uninfo.ps b/Master/xemtex/gslib/uninfo.ps
new file mode 100644
index 00000000000..211d3af15a5
--- /dev/null
+++ b/Master/xemtex/gslib/uninfo.ps
@@ -0,0 +1,221 @@
+%!
+% Copyright (C) 1997 Aladdin Enterprises. All rights reserved
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: uninfo.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% uninfo.ps: Utilities for "printing" PostScript items, especially dictionaries
+% Usage:
+% (prefix-string) dict unprint
+
+% Maximum Print-Width
+/HSpwidth 80 def
+
+% any HScvs string
+/HScvs {
+% Number-Syntax
+ dup type % stack: any /anytype
+ dup /integertype eq 1 index /realtype eq or { pop
+ 16 string cvs
+ }{
+% Logical-Type
+ dup /booleantype eq { pop
+ 5 string cvs
+ }{
+% Identifiers
+ dup /nametype eq { pop
+ dup length 1 add string
+ dup 0 (/) putinterval
+ exch 1 index 1 1 index length 1 sub getinterval cvs pop
+ }{
+% Strings
+ dup /stringtype eq { pop
+% ------- Compute Length
+ 2 1 index { % stack: str len item
+ dup 32 lt 1 index 126 gt or { % need 4
+ pop 4 add
+ }{
+ dup 40 eq 1 index 41 eq or 1 index 92 eq or {
+ pop 2 add
+ }{
+ pop 1 add
+ } ifelse
+ } ifelse
+ } forall
+% ------- Allocate & Fill String
+ string dup 0 (\() putinterval 1
+ 3 -1 roll { % outstr pos item
+ dup 32 lt 1 index 126 gt or {
+ dup 7 le {
+ 2 index 2 index (\\00) putinterval
+ 8 3 index 3 index 3 add 1 getinterval cvrs
+ }{
+ dup 63 le {
+ 2 index 2 index (\\0) putinterval
+ 8 3 index 3 index 2 add 2 getinterval cvrs
+ }{
+ 2 index 2 index (\\) putinterval
+ 8 3 index 3 index 1 add 3 getinterval cvrs
+ } ifelse
+ } ifelse
+ pop 4 add
+ }{
+ dup 40 eq 1 index 41 eq or 1 index 92 eq or {
+ 2 index 2 index (\\) putinterval
+ exch 1 add exch
+ } if
+ 2 index exch 2 index exch put
+ 1 add
+ } ifelse
+ } forall
+ 1 index exch (\)) putinterval
+ }{ exch pop
+ dup length 1 add string
+ dup 0 (-) putinterval
+ exch 1 index 1 1 index length 1 sub getinterval cvs pop
+ dup dup length 4 sub (-) putinterval
+ 0 1 index length 3 sub getinterval
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+} bind def
+
+% int HSpindent - indent-spaces
+/HSpindent {
+ dup 0 gt {
+ 1 1 3 -1 roll { pop ( ) print } for
+ }{
+ pop
+ } ifelse
+} bind def
+
+% indent array HSaprint -> Print an Array
+/HSaprint {
+ dup type /arraytype eq {
+ ( [) print
+ exch 1 add dup 1 add
+ 3 -1 roll { % rind pos item
+ HScvs dup length % rind pos str len
+ dup 3 index add HSpwidth ge {
+ (\n) print
+ 3 index HSpindent
+ 3 -1 roll pop
+ 2 index add
+ exch
+ }{
+ ( ) print
+ 2 index add 1 add
+ 3 -1 roll pop
+ exch
+ } ifelse
+ print
+ } forall
+ ( ]) print
+ pop pop
+ }{
+ ( ) print
+ HScvs print pop
+ } ifelse
+ (\n) print
+} bind def
+
+% dict HSdnames dict names (creates sorted name-strings)
+/HSdnames {
+% Build namelist, stack: dic
+ dup length 0 eq {
+ []
+ }{
+ [ 1 index {
+ pop dup type /nametype eq {
+ dup length string cvs
+ }{
+ pop
+ } ifelse
+ } forall
+ ]
+% Sort the namelist, stack: dic nam
+ 0 1 2 index length 2 sub { % stack: dic nam I
+ 2 copy get % stack: pre dic nam I nam[I]
+ 1 index 1 add 1 4 index length 1 sub { % stack: dic nam I nam[I] J
+ 3 index 1 index get % dic nam I S[I] J S[J]
+ 2 index 1 index gt { % swap them
+ 4 index 2 index 4 index put
+ 4 index 4 index 2 index put
+ 3 1 roll
+ } if
+ pop pop
+ } for
+ pop pop
+ } for
+ } ifelse
+} bind def
+
+% string:prefix dict:which unprint
+/unprint {
+ HSdnames % pre dic nam
+% compute the maximum length
+ 0 1 index { % pre dic nam maxlen nam[I]
+ length 2 copy lt { exch } if pop
+ } forall
+% Print out all the items, stack: pre dic nam maxlen
+ (\n) print
+ exch { % pre dic maxlen nam[I]
+% no prefix yet, -> flush right
+ 3 index length 0 eq {
+ dup length 2 index exch sub HSpindent
+ }{
+ 3 index print (/) print
+ } ifelse
+% print the name
+ dup print
+% prefix: fill up with blanks
+ 3 index length 0 ne {
+ dup length 2 index exch sub HSpindent
+ } if
+% now print the item itself, stack: pre dic maxlen nam[I]
+ 2 index 1 index cvn get dup type % stack: pre dic maxlen nam[i] item typ
+% Dict-Syntax
+ dup /dicttype eq { pop % stack: pre dic maxlen nam[i] item
+ ( ) print dup HScvs print
+ 4 index length 0 eq { % brand new prefix
+ 2 index string 0 1 5 index 1 sub { 1 index exch 32 put } for
+ dup 4 index 4 index length sub 5 -1 roll putinterval
+ }{
+ 4 index length 1 add 2 index length add string
+ dup 0 7 index putinterval
+ dup 6 index length (/) putinterval
+ dup 6 index length 1 add 5 -1 roll putinterval
+ } ifelse
+ exch unprint
+ }{
+ 3 -1 roll pop % tack: pre dic maxlen item typ
+% Array-Syntax
+ dup /arraytype eq { pop % stack: pre dic maxlen item
+ 3 index length dup 0 ne { 1 add } if 2 index add
+ exch HSaprint
+ }{ pop
+ ( ) print
+ HScvs print
+ (\n) print
+ } ifelse
+ } ifelse
+ } forall
+ pop pop length -1 eq { (\n) print } if
+} bind def
+
+/currentpagedevice where { % check for currentpagedevice
+ /currentpagedevice get exec () exch unprint
+} if
diff --git a/Master/xemtex/gslib/unix-lpr.sh b/Master/xemtex/gslib/unix-lpr.sh
new file mode 100644
index 00000000000..48754326920
--- /dev/null
+++ b/Master/xemtex/gslib/unix-lpr.sh
@@ -0,0 +1,161 @@
+#!/bin/sh
+# $Id: unix-lpr.sh,v 1.1.6.1 2002/04/22 19:54:55 giles Exp $
+#
+# Unix lpr filter. The default setup sends output directly to a pipe,
+# which requires the Ghostscript process to fork, and thus may cause
+# small systems to run out of memory/swap space. An alternative strategy,
+# based on a suggestion by Andy Fyfe (andy@cs.caltech.edu), uses a named
+# pipe for output, which avoids the fork and can thus save a lot of memory.
+#
+# Unfortunately this approach can cause problems when a print job is aborted,
+# as the abort can cause one of the processes to die, leaving the process
+# at the other end of the pipe hanging forever.
+#
+# Because of this, the named pipe method has not been made the default,
+# but it may be restored by commenting out the lines referring to
+# 'gsoutput' and uncommenting the lines referring to 'gspipe'.
+#
+
+PBMPLUSPATH=/usr/local/bin
+PSFILTERPATH=/usr/local/lib/ghostscript
+LOCALPATH=/usr/local/bin
+X11HOME=/usr/X11R6
+
+PATH=/bin:/usr/bin:/usr/ucb:/usr/etc
+PATH=${PATH}\:${LOCALPATH}\:${PBMPLUSPATH}\:${PSFILTERPATH}
+LD_LIBRARY_PATH=${X11HOME}/lib
+
+export PATH LD_LIBRARY_PATH acctfile host user
+
+user= host= acctfile=/dev/null
+
+#
+# Redirect stdout to stderr (for the logfile) and open a new channel
+# connected to stdout for the raw data. This enables us to keep the
+# raw data separate from programmed postscript output and error messages.
+#
+exec 3>&1 1>&2
+
+#
+# Get username and hostname from filter parameters
+#
+while [ $# != 0 ]
+do case "$1" in
+ -n) user=$2 ; shift ;;
+ -h) host=$2 ; shift ;;
+ -*) ;;
+ *) acctfile=$1 ;;
+ esac
+ shift
+done
+
+#
+# Get the filter, printer device and queue type (direct/indirect)
+#
+filter=`basename $0`
+device=`dirname $0`
+type=`dirname ${device}`
+device=`basename ${device}`
+fdevname=$device
+type=`basename ${type}`
+
+#
+# Find the bpp and number of colors, if specified
+#
+
+colorspec="`echo ${device} | sed 's/.*\.[0-9][0-9]*\.\([0-9][0-9]*\)$/\1/'`"
+if test "$colorspec" = "${device}"
+then
+ colorspec=""
+else
+ device=`basename ${device} .$colorspec`
+ colorspec="-dColors=$colorspec"
+fi
+
+bpp="`echo ${device} | sed 's/.*\.\([0-9][0-9]*\)$/\1/'`"
+if test "$bpp" = "${device}"
+then
+ bpp=1
+else
+ device=`basename ${device} .$bpp`
+fi
+
+#
+# Information for the logfile
+#
+lock=`dirname ${acctfile}`/lock
+cf=`sed -n '$p' ${lock}`
+job=`sed -n 's/^J//p' ${cf}`
+
+echo "gsbanner: ${host}:${user} Job: ${job} Date: `date`"
+echo "gsif: ${host}:${user} ${fdevname} start - `date`"
+
+#
+# Set the direct or indirect output destinations
+#
+#gspipe=/tmp/gspipe.$$
+#mknod ${gspipe} p
+
+case "${type}" in
+ direct)
+ gsoutput="cat 1>&3" ;;
+# cat ${gspipe} 1>&3 & ;;
+ indirect)
+ gsoutput="lpr -P${device}.raw" ;;
+# cat ${gspipe} | lpr -P${device}.raw & ;;
+esac
+
+(
+#
+# Any setup required may be done here (eg. setting gamma for colour printing)
+#
+#echo "{0.333 exp} dup dup currenttransfer setcolortransfer"
+
+#
+# The input data is filtered here, before being passed on to Ghostscript
+#
+case "${filter}" in
+ gsif) cat ;;
+ gsnf) psdit ;;
+ gstf) pscat ;;
+ gsgf) psplot ;;
+ gsvf) rasttopnm | pnmtops ;;
+ gsdf) dvi2ps -sqlw ;;
+ gscf|gsrf) echo "${filter}: filter not available" 1>&2 ; exit 0 ;;
+esac
+
+#
+# This is the postlude which does the accounting
+#
+echo "\
+(acctfile) getenv
+ { currentdevice /PageCount gsgetdeviceprop dup cvi 0 gt
+ { exch (a) file /acctfile exch def
+ /string 20 string def
+ string cvs dup length dup
+ 4 lt
+ { 4 exch sub
+ { acctfile ( ) writestring } repeat
+ } { pop } ifelse
+ acctfile exch writestring
+ acctfile (.00 ) writestring
+ acctfile (host) getenv
+ { string cvs } { (NOHOST) } ifelse writestring
+ acctfile (:) writestring
+ acctfile (user) getenv
+ { string cvs } { (NOUSER) } ifelse writestring
+ acctfile (\n) writestring
+ acctfile closefile
+ } { pop } ifelse
+ } if
+quit"
+) | gs -q -dNOPAUSE -sDEVICE=${device} -dBitsPerPixel=${bpp} $colorspec \
+ -sOutputFile=\|"${gsoutput}" -
+# -sOutputFile=${gspipe} -
+
+rm -f ${gspipe}
+#
+# End the logfile entry
+#
+echo "gsif: end - `date`"
+
diff --git a/Master/xemtex/gslib/unprot.ps b/Master/xemtex/gslib/unprot.ps
new file mode 100644
index 00000000000..712eff6064e
--- /dev/null
+++ b/Master/xemtex/gslib/unprot.ps
@@ -0,0 +1,68 @@
+% Copyright (C) 1991, 1992, 1998 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: unprot.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% Disable all access checks. This is useful for printing out
+% eexec-encrypted Type 1 fonts, and similar purposes.
+
+systemdict wcheck
+ { /protdict systemdict def
+ }
+ { (Please restart Ghostscript with the -dWRITESYSTEMDICT switch.\n) print
+ (Some access checks will remain active if you do not do this.\n) print
+ flush
+ /protdict userdict def
+ }
+ifelse
+
+% The procedures we're about to define will go in systemdict,
+% so they must be allocated in global VM.
+
+.currentglobal true .setglobal
+
+protdict begin
+ /readonly. /readonly load def
+ /executeonly. /executeonly load def
+ /noaccess. /noaccess load def
+ /readonly { } odef
+ /readonly.. /readonly load def
+ /executeonly { } odef
+ /executeonly.. /executeonly load def
+ /noaccess { } odef
+ /noaccess.. /noaccess load def
+end
+
+% Disable the access checks.
+
+/unprot
+ { protdict begin
+ /readonly /readonly.. load def
+ /executeonly /executeonly.. load def
+ /noaccess /noaccess.. load def
+ end
+ } bind def
+
+% Re-enable the access checks.
+
+/reprot
+ { protdict begin
+ /readonly /readonly. load def
+ /executeonly /executeonly. load def
+ /noaccess /noaccess. load def
+ end
+ } bind def
+
+.setglobal
diff --git a/Master/xemtex/gslib/viewcmyk.ps b/Master/xemtex/gslib/viewcmyk.ps
new file mode 100644
index 00000000000..8a95f8b02cd
--- /dev/null
+++ b/Master/xemtex/gslib/viewcmyk.ps
@@ -0,0 +1,64 @@
+% Copyright (C) 1996, 1997, 1998 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: viewcmyk.ps,v 1.2.6.2.2.1 2003/04/12 14:02:39 giles Exp $
+% viewcmyk.ps
+% Display a raw CMYK file.
+% Requires the colorimage operator.
+% If SCALE is defined, maps input pixels to output pixels with that scale;
+% if SCALE is undefined, scales the image to fit the page.
+% If BITS is defined, it is the number of bits per sample (1,2,4,8,12);
+% if BITS is undefined, its default value is 1.
+
+/viewcmyk { % <filename> <width> viewcmyk -
+ 20 dict begin
+ /w exch def
+ /fname exch def
+ /bpc /BITS where { pop BITS } { 1 } ifelse def
+ /f fname (r) file def
+ mark fname status pop pop pop /flen exch def cleartomark
+ /h flen w bpc 4 mul mul 7 add 8 idiv idiv def
+ (Dimensions: ) print [w h] == flush
+ % Set up scaling.
+ /SCALE where {
+ pop
+ % Map pixels SCALE-for-1. Assume orthogonal transformation.
+ SCALE 1 0 dtransform add abs div
+ SCALE 0 1 dtransform add abs div
+ } {
+ % Scale the image (uniformly) to fit the page.
+ clippath pathbbox pop pop translate
+ pathbbox 3 -1 roll sub h div
+ 3 1 roll exch sub w div .min dup
+ } ifelse scale
+ w h bpc [1 0 0 -1 0 h] f false 4 colorimage
+ showpage
+ f closefile
+ end
+} bind def
+
+% If the program was invoked from the command line, run it now.
+[ shellarguments {
+ counttomark 2 eq {
+ cvi viewcmyk
+ } {
+ cleartomark
+ (Usage: gs -- viewcmyk.ps filename.cmyk width\n) print
+ ( e.g.: gs -- viewcmyk.ps my.cmyk 2550\n) print flush
+ } ifelse
+} {
+ pop
+} ifelse
diff --git a/Master/xemtex/gslib/viewgif.ps b/Master/xemtex/gslib/viewgif.ps
new file mode 100644
index 00000000000..a03bff0aa00
--- /dev/null
+++ b/Master/xemtex/gslib/viewgif.ps
@@ -0,0 +1,161 @@
+% Copyright (C) 1989, 1992, 1993, 1998 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: viewgif.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% viewgif.ps
+% Display a GIF file.
+
+/read1 % <file> read1 <int>
+ { read pop
+ } bind def
+/read2 % <file> read2 <int>
+ { dup read1 exch read1 8 bitshift add
+ } bind def
+
+/readGIFheader % <file> readGIFheader <dict>
+ { 20 dict begin
+ dup 6 string readstring pop
+ dup (GIF87a) eq exch (GIF89a) eq or not
+ { (Not a GIF file.\n) print cleartomark stop
+ } if
+ dup read2 /Width exch def
+ dup read2 /Height exch def
+ dup read1
+ dup 128 ge /GlobalColor exch def
+ dup -4 bitshift 7 and 1 add /BitsPerPixel exch def %***BOGUS?***
+ dup 8 and 0 ne /PaletteSorted exch def
+ 7 and 1 add dup /BitsPerPixel exch def
+ 1 exch bitshift /PaletteSize exch def
+ dup read1 /BackgroundIndex exch def
+ dup read1 15 add 64 div /AspectRatio exch def
+ GlobalColor
+ { PaletteSize 3 mul string readstring pop
+ /GlobalPalette exch def
+ } if
+ currentdict end
+ } bind def
+
+/readGIFimageHeader % <file> readGIFimageHeader <dict>
+ % Note: GIF header must be on dict stack
+ { 10 dict begin
+ { dup read1
+ dup (!) 0 get ne { exit } if pop % extension
+ dup read1 pop
+ { dup read1 dup 0 eq { pop exit } if { dup read1 pop } repeat
+ } loop
+ } loop
+ (,) 0 get ne
+ { (Not a GIF image.\n) print stop
+ } if
+ dup read2 /Left exch def
+ dup read2 /Top exch def
+ dup read2 /Width exch def
+ dup read2 /Height exch def
+ dup read1
+ dup 128 ge /LocalColor exch def
+ dup 64 and 0 ne /Interlaced exch def
+ LocalColor
+ { 7 and 1 add /BitsPerPixel exch def
+ 1 BitsPerPixel bitshift 3 mul string readstring pop
+ /Palette exch def
+ }
+ { pop pop /Palette GlobalPalette def
+ }
+ ifelse
+ currentdict end
+ } bind def
+
+/imageGIF % <imagedict> imageGIF
+ { /ImageOut where
+ { pop
+ % We know BitsPerComponent = 8, Decode = [0 255].
+ % and there is only a single data source which is
+ % either a filter or a string whose size is exactly
+ % the width of the row.
+ dup /DataSource get dup type /stringtype eq
+ { ImageOut exch writestring
+ }
+ { pop dup /Width get string
+ 1 index /Height get
+ { 1 index /DataSource get 1 index readstring pop
+ ImageOut exch writestring
+ }
+ repeat pop pop
+ }
+ ifelse
+ }
+ { image
+ }
+ ifelse
+ } bind def
+
+/viewGIF % <file|string> viewGIF -
+ { save 20 dict begin
+ /saved exch def
+ dup type /stringtype eq { (r) file } if
+ /F exch def
+ /ImageOutFile where { /ImageOut ImageOutFile (w) file def } if
+ F readGIFheader /Header exch def
+ currentdict Header end begin begin
+ DEBUG { Header { exch == == } forall (----------------\n) print flush } if
+ F readGIFimageHeader /ImageHeader exch def
+ currentdict ImageHeader end begin begin
+ DEBUG { ImageHeader { exch == == } forall (----------------\n) print flush } if
+ /D F
+ << /InitialCodeLength F read1
+ /FirstBitLowOrder true
+ /BlockData true
+ /EarlyChange 0
+ >> /LZWDecode filter def
+
+ [/Indexed /DeviceRGB 1 BitsPerPixel bitshift 1 sub Palette] setcolorspace
+ matrix currentmatrix
+ 0 1 3 { 2 copy get dup 0 ne { dup abs div } if 3 copy put pop pop } for
+ setmatrix
+ << /ImageType 1
+ /ImageMatrix [1 0 0 -1 0 Height]
+ /BitsPerComponent 8
+ /Decode [0 255]
+ Interlaced
+ { /Width Width /Height 1
+ /row Width string def
+ /DataSource row
+ >> /I exch def
+ /inter % <num> <denom> inter -
+ { /denom exch def /num exch def
+ gsave
+ /lines Height denom 1 sub add num sub denom idiv def
+ 0 1 lines 1 sub {
+ Height exch denom mul num add sub
+ I /ImageMatrix get 5 3 -1 roll put
+ D row readstring pop pop
+ I imageGIF
+ } for
+ grestore
+ }
+ bind def
+ 0 8 inter
+ 4 8 inter
+ 2 4 inter
+ 1 2 inter
+ }
+ { /Width Width /Height Height
+ /DataSource D
+ >> imageGIF
+ }
+ ifelse
+ saved end end end restore
+ } bind def
diff --git a/Master/xemtex/gslib/viewjpeg.ps b/Master/xemtex/gslib/viewjpeg.ps
new file mode 100644
index 00000000000..082c27d2c52
--- /dev/null
+++ b/Master/xemtex/gslib/viewjpeg.ps
@@ -0,0 +1,153 @@
+%! viewjpeg.ps Copyright (C) 1994 Thomas Merz <tm@pdflib.com>
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: viewjpeg.ps,v 1.1.6.2.2.1 2003/04/12 14:02:39 giles Exp $
+% View JPEG files with Ghostscript
+%
+% This PostScript code relies on level 2 features.
+%
+% Only JPEG baseline, extended sequential, and progressive files
+% are supported. Note that Adobe PostScript level 2 does not include
+% progressive-JPEG support. Ghostscript with IJG JPEG v6 or later
+% will decode progressive JPEG, but only if you edit gsjmorec.h to
+% enable that feature.
+%
+% Updated by L. Peter Deutsch 20-May-1997:
+% move the usage example to the beginning
+% Updates by Tom Lane 6-Sep-1995
+
+% Usage example:
+% (jpeg-6/testimg.jpg) viewJPEG
+
+/languagelevel where {pop languagelevel 2 lt}{true} ifelse {
+ (JPEG needs PostScript Level 2!\n) print flush stop
+} if
+
+/JPEGdict 20 dict def
+JPEGdict begin
+
+/NoParamMarkers [ % JPEG markers without additional parameters
+ 16#D0 16#D1 16#D2 16#D3 16#D4 16#D5 16#D6 16#D7 16#D8 16#01
+] def
+
+/NotSupportedMarkers [ % JPEG markers not supported by PostScript level 2
+ 16#C3 16#C5 16#C6 16#C7 16#C8 16#C9 16#CA 16#CB 16#CD 16#CE 16#CF
+] def
+
+% Names of color spaces
+/ColorSpaceNames << /1 /DeviceGray /3 /DeviceRGB /4 /DeviceCMYK >> def
+
+% read one byte from file F
+% - ==> int --or-- stop context
+/NextByte {
+ F read not { (Read error in ViewJPEG!\n) print flush stop } if
+} bind def
+
+/SkipSegment { % read two bytes and skip that much data
+ NextByte 8 bitshift NextByte add 2 sub { NextByte pop } repeat
+} bind def
+
+% read width, height, and # of components from JPEG markers
+% and store in dict
+/readJPEGmarkers { % - ==> dict --or-- stop context
+ 5 dict begin
+
+ { % loop: read JPEG marker segments until we find SOFn marker or EOF
+ NextByte
+ 16#FF eq { % found marker
+ /markertype NextByte def
+ % Is it S0F0=baseline, SOF1=extended sequential, SOF2=progressive ?
+ markertype dup 16#C0 ge exch 16#C2 le and {
+ NextByte pop NextByte pop % segment length
+ % Ghostscript and Adobe PS accept only data precision 8
+ NextByte 8 ne {
+ (Error: not 8 bits per component!\n) print flush stop
+ } if
+
+ % Read crucial image parameters
+ /height NextByte 8 bitshift NextByte add def
+ /width NextByte 8 bitshift NextByte add def
+ /colors NextByte def
+
+ DEBUG { currentdict { exch == == } forall flush } if
+ exit
+ } if
+
+ % detect several segment types which are not compatible with PS
+ NotSupportedMarkers {
+ markertype eq {
+ (Marker ) print markertype ==
+ (not supported!\n) print flush stop
+ } if
+ } forall
+
+ % Skip segment if marker has parameters associated with it
+ true NoParamMarkers { markertype eq {pop false exit} if } forall
+ { SkipSegment } if
+ } if
+ } loop
+
+ currentdict dup /markertype undef
+ end
+} bind def
+
+end % JPEGdict
+
+% read image parameters from JPEG file and display the image
+/viewJPEG { % <file|string> ==> -
+ save
+ JPEGdict begin
+ /saved exch def
+ /scratch 1 string def
+ dup type /stringtype eq { (r) file } if
+ /F exch def
+
+ readJPEGmarkers begin
+ F 0 setfileposition % reset file pointer
+
+ % We use the whole clipping area for the image (at least in one dimension)
+ gsave clippath pathbbox grestore
+ /ury exch def /urx exch def
+ /lly exch def /llx exch def
+
+ llx lly translate
+ width height scale
+
+ % use whole width or height, whichever is appropriate
+ urx llx sub width div ury lly sub height div
+ 2 copy gt { exch } if pop % min
+ dup scale
+ ColorSpaceNames colors scratch cvs get setcolorspace
+
+ % prepare image dictionary
+ << /ImageType 1
+ /Width width
+ /Height height
+ /ImageMatrix [ width 0 0 height neg 0 height ]
+ /BitsPerComponent 8
+ % If 4-component (CMYK), assume data is inverted per Adobe Photoshop
+ colors 4 eq {
+ /Decode [ colors { 1 0 } repeat ]
+ } {
+ /Decode [ colors { 0 1 } repeat ]
+ } ifelse
+ /DataSource F /DCTDecode filter
+ >> image
+
+ end % image parameter dictionary
+
+ saved end restore
+} bind def
diff --git a/Master/xemtex/gslib/viewmiff.ps b/Master/xemtex/gslib/viewmiff.ps
new file mode 100644
index 00000000000..daf56ed458c
--- /dev/null
+++ b/Master/xemtex/gslib/viewmiff.ps
@@ -0,0 +1,125 @@
+% Copyright (C) 1998 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: viewmiff.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% viewmiff.ps
+% Display a MIFF file. You would think the 'display' command would do this,
+% but many versions of 'display' either core-dump or require unacceptably
+% large amounts of memory.
+
+% Recognize MIFF keywords.
+/miffwords mark
+ /class { cvn /class exch def }
+ /colors { cvi /colors exch def }
+ /columns { cvi /Width exch def }
+ /compression { cvn /compression exch def }
+ /depth { cvi /depth exch def }
+ /packets { cvi /packets exch def }
+ /rows { cvi /Height exch def }
+.dicttomark readonly def
+
+% Recognize MIFF image classes.
+/miffclasses mark
+ /DirectClass {
+ /DeviceRGB setcolorspace
+ /BitsPerComponent depth def
+ /Decode [ 0 1 0 1 0 1 ] def
+ }
+ /PseudoClass {
+ [ /Indexed
+ % The MIFF documentation lies about the size of pixels
+ % for this case: the pixel size is determined only by
+ % the number of colors, and is not affected by the image
+ % depth. Specifically, if there are 256 or fewer colors
+ % but the depth (of color map entries) is 16, each pixel
+ % is still only 1 byte, not 2.
+ currentdict /colors known {
+ /DeviceRGB colors 1 sub
+ /BitsPerComponent colors 256 le { 8 } { 16 } ifelse def
+ colors 3 mul string depth 8 eq {
+ f exch readstring pop
+ } {
+ % 16-bit color map entries: take only the high-order byte.
+ 0 1 2 index length 1 sub {
+ f read pop 2 index 3 1 roll put f read pop pop
+ } for
+ } ifelse
+ } {
+ /colors 256 def
+ /DeviceGray 255
+ 256 string 0 1 255 { 1 index exch dup put } for
+ } ifelse
+ ] setcolorspace
+ /Decode [ 0 1 BitsPerComponent bitshift 1 sub ] def
+ }
+.dicttomark readonly def
+
+% Recognize MIFF compression methods.
+/rlstring 768 string def
+/rlread {
+ % packets is not reliable -- disregard it.
+ dup rlstring 0 3 getinterval readstring {
+ pop read pop 3 mul 3 3 2 index {
+ rlstring exch rlstring 0 3 getinterval putinterval
+ } for
+ rlstring 0 3 -1 roll 3 add getinterval
+ } {
+ pop pop ()
+ } ifelse
+} bind def
+/miffcompress mark
+ /Uncompressed { f }
+ /RunLengthEncoded { { f rlread } }
+ /Zip { [ f /FlateDecode filter cvlit /rlread cvx ] cvx }
+.dicttomark readonly def
+
+% Read a MIFF file and display the image.
+/viewmiff { % <filename> viewmiff -
+ 50 dict begin
+ /fname 1 index def
+ /f exch (r) file def
+ % Set defaults.
+ /ImageType 1 def
+ /class /DirectClass def
+ /compression /Uncompressed def
+ /depth 8 def
+ /packets 16#7fffffff def
+ % Read and parse the header.
+ { f token pop
+ dup (:) eq { pop exit } if
+ dup type /nametype eq {
+ .namestring (=) search {
+ exch pop miffwords exch .knownget { exec } { pop } ifelse
+ } {
+ pop % who knows?
+ } ifelse
+ } {
+ pop % probably a comment in braces
+ } ifelse
+ } loop
+ % Read and display the image.
+ miffclasses class get exec
+ /DataSource miffcompress compression get exec def
+ /ImageMatrix [Width 0 0 Height neg 0 Height] def
+ currentpagedevice /PageSize get
+ dup 0 get exch 1 get scale
+ gsave 0.8 setgray 0 0 1 1 rectfill grestore % provide background
+ currentdict image
+ showpage
+ % Clean up.
+ f closefile
+ end
+} bind def
diff --git a/Master/xemtex/gslib/viewpbm.ps b/Master/xemtex/gslib/viewpbm.ps
new file mode 100644
index 00000000000..2ba6907e48f
--- /dev/null
+++ b/Master/xemtex/gslib/viewpbm.ps
@@ -0,0 +1,185 @@
+% Copyright (C) 1992, 1995, 1996, 1998, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: viewpbm.ps,v 1.2.6.2.2.1 2003/04/12 14:02:39 giles Exp $
+% viewpbm.ps
+% Display a PBM/PGM/PPM file.
+% Requires the Level 2 `image' operator (to handle variable pixel widths).
+% If SCALE is defined, maps input pixels to output pixels with that scale;
+% if SCALE is undefined, scales the image to fit the page.
+
+/s 100 string def
+/readmaxv { % <file> readmaxv -
+ 10 string readline pop cvx exec /maxv exch def
+} bind def
+/readrow { % <file> <row> readrow <row>
+ 0 1 2 index length 1 sub {
+ 1 index exch 3 index token pop put
+ } for exch pop
+} bind def
+/read01 { % <file> <count> read01 <byte>
+ 0 exch {
+ 1 index read pop 48 xor dup 1 le { exch dup add add } { pop } ifelse
+ } repeat
+} bind def
+/readrow01 { % <file> <row> readrow01 <row>
+ 0 1 w 8 idiv {
+ 1 index exch 3 index 8 read01 put
+ } for
+ wrem 0 ne {
+ dup rsize 1 sub wrem read01 8 wrem sub bitshift put
+ } if
+ exch pop
+} bind def
+/readwh { % <file> readwh <w> <h>
+ dup s readline pop % check for comment
+ (#) anchorsearch {
+ pop pop dup s readline pop
+ } if
+ cvx exec
+} bind def
+/pbmtypes mark
+% The procedures in this dictionary are called as
+% <file> Pn <w> <h> <readproc>
+/P1 { % ASCII 1-bit white/black
+ /bpc 1 def /maxv 1 def /rsize w 7 add 8 idiv def
+ /wrem w 8 mod def
+ /ncomp 1 def /invert true def /DeviceGray setcolorspace
+ readwh
+ { readrow01 }
+} bind
+/P2 { % ASCII 8-bit gray
+ readwh
+ /bpc 8 def 2 index readmaxv /rsize 2 index def
+ /ncomp 1 def /invert false def /DeviceGray setcolorspace
+ { readrow }
+} bind
+/P3 { % ASCII 8-bit RGB
+ readwh
+ /bpc 8 def 2 index readmaxv /rsize 2 index 3 mul def
+ /ncomp 3 def /invert false def /DeviceRGB setcolorspace
+ { readrow }
+} bind
+/P4 { % Binary 1-bit white/black
+ readwh
+ /bpc 1 def /maxv 1 def /rsize 2 index 7 add 8 idiv def
+ /ncomp 1 def /invert true def /DeviceGray setcolorspace
+ { readstring pop }
+} bind
+/P5 { % Binary 8-bit gray
+ readwh
+ /bpc 8 def 2 index readmaxv /rsize 2 index def
+ /ncomp 1 def /invert false def /DeviceGray setcolorspace
+ { readstring pop }
+} bind
+/P6 { % Binary 8-bit RGB
+ readwh
+ /bpc 8 def 2 index readmaxv /rsize 2 index 3 mul def
+ /ncomp 3 def /invert false def /DeviceRGB setcolorspace
+ { readstring pop }
+} bind
+.dicttomark readonly def
+/pbmsetup { % <file> <w> <h> <readproc> runpbm -
+ /readproc exch def
+ /h exch def
+ /w exch def
+ /f exch def
+ 20 dict begin % image dictionary
+ /ImageType 1 def
+ /Width w def
+ /Height h def
+ /ImageMatrix [w 0 0 h neg 0 h] def
+ /BitsPerComponent bpc def
+ /Decode [ 0 255 maxv div invert { exch } if ncomp 1 sub { 2 copy } repeat ] def
+ /DataSource [ f rsize string /readproc load /exec load ] cvx def
+ currentdict end
+} def
+/imagescale { % <imagedict> imagescale -
+ begin
+ /SCALE where {
+ pop
+ % Map pixels SCALE-for-1. Assume orthogonal transformation.
+ Width 1 0 dtransform add abs div SCALE mul
+ Height 0 1 dtransform add abs div SCALE mul
+ } {
+ % Scale the image (uniformly) to fit the page.
+ clippath pathbbox pop pop translate
+ pathbbox .min exch pop exch pop ceiling
+ dup Height Width gt {
+ Width mul Height div exch
+ } {
+ Height mul Width div
+ } ifelse
+ }
+ ifelse scale
+ end
+} def
+
+% Image a PBM file page by page.
+/viewpbm { % <filename> viewpbm -
+ 20 dict begin
+ (r) file /pf exch def {
+ pf token not { exit } if
+ pbmtypes exch get pf exch exec pbmsetup
+ dup imagescale image showpage
+ } loop
+ end
+} def
+
+% Reassemble a composite PBM file from the CMYK separations.
+/viewpsm {
+ 20 dict begin
+ /fname exch def
+ /sources [ 0 1 3 {
+ /plane exch def
+ /pf fname (r) file def
+ pf pbmtypes pf token pop get exec
+ % Stack: pf w h readproc
+ plane {
+ /readproc exch def /h exch def /w exch def pop
+ /row rsize string def
+ h { pf row readproc pop } repeat
+ pf pbmtypes pf token pop get exec
+ } repeat
+ pbmsetup
+ } for ] def
+ /datas [ sources { /DataSource get 0 get } forall ] def
+ /decode sources 0 get /Decode get
+ dup 0 get exch 1 get add cvi 0 exch
+ 2 copy 4 copy 8 array astore def
+ sources 0 get
+ dup /MultipleDataSources true put
+ dup /DataSource datas put
+ dup /Decode decode put
+ /DeviceCMYK setcolorspace
+ dup imagescale image showpage
+ end
+} def
+
+% If the program was invoked from the command line, run it now.
+[ shellarguments
+ { counttomark 1 ge
+ { ] { viewpbm } forall
+ }
+ { cleartomark
+ (Usage: gs [--] viewpbm.ps filename.p*m ...\n) print
+ ( e.g.: gs [--] viewpbm.ps my.ppm another.ppm\n) print flush
+ }
+ ifelse
+ }
+ { pop
+ }
+ifelse
diff --git a/Master/xemtex/gslib/viewpcx.ps b/Master/xemtex/gslib/viewpcx.ps
new file mode 100644
index 00000000000..204db00eb03
--- /dev/null
+++ b/Master/xemtex/gslib/viewpcx.ps
@@ -0,0 +1,151 @@
+% Copyright (C) 1996, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: viewpcx.ps,v 1.2.6.2.2.1 2003/04/12 14:02:39 giles Exp $
+% viewpcx.ps
+% Display a PCX file.
+% Requires the Level 2 `image' operator (to handle variable pixel widths).
+% If SCALE is defined, maps input pixels to output pixels with that scale;
+% if SCALE is undefined, scales the image to fit the page.
+% ****NOTE: does not handle multi-plane images with palette.
+
+/pcxbytes [
+ 0 1 255 {
+ 64 string exch 0 1 63 {
+ 3 copy exch put pop
+ } for pop
+ } for
+] readonly def
+/readpcx { % - readpcx <str>
+ f % gets replaced
+ dup read not {
+ pop ()
+ } {
+ dup 192 lt {
+ ( ) dup 0 4 -1 roll put exch pop
+ } {
+ 192 sub //pcxbytes 3 -1 roll read pop get exch 0 exch getinterval
+ } ifelse
+ } ifelse
+} def
+/get2 % <string> <index> get2 <int>
+ { 2 copy get 3 1 roll 1 add get 8 bitshift add
+ } bind def
+/dsproc
+ { df s readstring pop % s gets filled in
+ s1 () ne { df s1 readstring pop pop } if % discard padding bytes
+ } def % don't bind, must be writable
+/viewpcx % <filename> viewpcx -
+ { 100 dict begin
+ /fname 1 index def
+ /f exch (r) file def
+ % Read and unpack the header.
+ /header f 128 string readstring pop def
+ /version header 1 get def
+ /bpp header 3 get def
+ /w header 8 get2 header 4 get2 sub 1 add def
+ /h header 10 get2 header 6 get2 sub 1 add def
+ /nplanes header 65 get def
+ /bpl header 66 get2 def
+ /palinfo header 68 get2 def
+ /nbits bpp nplanes mul def
+ version 5 eq
+ { nbits 8 le
+ { /cspace
+ [/Indexed /DeviceRGB 1 bpp bitshift 1 sub
+ f fileposition
+ 1 nbits bitshift 3 mul string
+ fname status pop pop pop exch pop
+ 1 index length sub f exch setfileposition
+ f exch readstring pop
+ exch f exch setfileposition
+ ] def
+ /decode [0 cspace 2 get] def
+ }
+ { /cspace /DeviceRGB def
+ /decode [0 1 0 1 0 1] def
+ }
+ ifelse
+ }
+ { /cspace
+ [/Indexed /DeviceRGB 1 bpp bitshift 1 sub
+ header 16 1 nbits bitshift 16 .min 3 mul getinterval
+ ] def
+ /decode [0 cspace 2 get] def
+ }
+ ifelse
+ % Set up scaling.
+ /SCALE where
+ { pop
+ % Map pixels SCALE-for-1. Assume orthogonal transformation.
+ w 1 0 dtransform add abs div SCALE mul
+ h 0 1 dtransform add abs div SCALE mul
+ }
+ { % Scale the image (uniformly) to fit the page.
+ clippath pathbbox pop pop translate
+ pathbbox .min exch pop exch pop ceiling
+ dup h w gt { w mul h div exch } { h mul w div } ifelse
+ }
+ ifelse scale
+ % Since the number of bytes per line is always even,
+ % it may not match the width specification.
+ /wbpl w bpp mul 7 add 8 idiv def
+ % Define the data source procedure.
+ /s1 bpl wbpl sub string def
+ /df /readpcx load copyarray dup 0 f put cvx bind readonly
+ 0 () /SubFileDecode filter def
+ /dsource [ nplanes
+ { /dsproc load copyarray
+ dup 1 wbpl string put
+ cvx bind readonly
+ }
+ repeat ] def
+ % Construct the image dictionary.
+ 20 dict begin % image dictionary
+ /ImageType 1 def
+ /Width w def
+ /Height h def
+ /ImageMatrix [w 0 0 h neg 0 h] def
+ /BitsPerComponent bpp def
+ /Decode decode def
+ /DataSource dsource dup length 1 gt
+ { /MultipleDataSources true def }
+ { 0 get }
+ ifelse def
+ currentdict end
+ % Finally, display the image.
+ cspace setcolorspace
+ image
+ showpage
+ df closefile
+ f closefile
+ end
+ } bind def
+
+% If the program was invoked from the command line, run it now.
+[ shellarguments
+ { counttomark 1 ge
+ { ] { viewpcx } forall
+ }
+ { cleartomark
+ (Usage: gs -- viewpcx.ps filename.pcx ...\n) print
+ ( e.g.: gs -- viewpcx.ps my.pcx another.pcx\n) print flush
+ }
+ ifelse
+ }
+ { pop
+ }
+ifelse
diff --git a/Master/xemtex/gslib/viewps2a.ps b/Master/xemtex/gslib/viewps2a.ps
new file mode 100644
index 00000000000..53073ea3fdd
--- /dev/null
+++ b/Master/xemtex/gslib/viewps2a.ps
@@ -0,0 +1,33 @@
+% Copyright (C) 1995 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: viewps2a.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% Display a file produced by ps2ascii with no switch or with -dCOMPLEX.
+% This is just a procset to read in before the file to display.
+
+/init { 0.1 0.1 scale } bind def
+init
+/next { currentfile token pop } bind def
+/F { next next pop next exch selectfont } bind def
+/P { showpage init } bind def
+/S
+ { next next moveto
+ next dup stringwidth pop next exch div
+ gsave 1 scale show grestore
+ } bind def
+/C { next next next setrgbcolor } bind def
+/I { next next next next gsave 0.75 setgray rectfill grestore } bind def
+/R { next next next next rectfill } bind def
diff --git a/Master/xemtex/gslib/wftopfa b/Master/xemtex/gslib/wftopfa
new file mode 100644
index 00000000000..a6cf9bb9729
--- /dev/null
+++ b/Master/xemtex/gslib/wftopfa
@@ -0,0 +1,3 @@
+#!/bin/sh
+# $Id: wftopfa,v 1.1 2000/03/09 08:40:40 lpd Exp $
+exec gs -q -dNODISPLAY -- wftopfa.ps "$@"
diff --git a/Master/xemtex/gslib/wftopfa.ps b/Master/xemtex/gslib/wftopfa.ps
new file mode 100644
index 00000000000..a3ab45964a8
--- /dev/null
+++ b/Master/xemtex/gslib/wftopfa.ps
@@ -0,0 +1,304 @@
+% Copyright (C) 1995, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: wftopfa.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% wftopfa.ps
+% Convert a Wadalab base font to .PFA (or .PFB) format.
+
+(gs_ksb_e.ps) runlibfile
+(wrfont.ps) runlibfile
+
+/wftopfa_dict 100 dict def
+wftopfa_dict begin
+
+/KanjiSubEncoding dup .findencoding def
+
+% Initialize parameters.
+/init % - init -
+ { /chars 256 dict def
+ /version (001.001) def
+ /highcode 0 def
+ /StdHW [32] def
+ /StdVW [32] def
+ /UniqueID 20000000 def
+ /FontBase (Wadalab) def
+ /StdEncMode false def
+ /CustomEncMode false def
+ /Binary false def
+ /Encrypt true def
+ } bind def
+
+% Read definitions.
+/rdstring 5000 string def
+/readdefs % <filename> readdefs -
+ { (r) file
+ { dup rdstring readline not { pop exit } if
+ dup length 15 ge
+ { dup dup length 7 sub 7 getinterval (> CompD) eq
+ { token pop exch token pop exch pop
+ dup 0 get /highcode exch def
+ exch chars 3 1 roll put
+ }
+ { pop
+ }
+ ifelse
+ }
+ { pop
+ }
+ ifelse
+ }
+ loop closefile
+ } bind def
+
+% Write out the final font.
+/writepfa
+ { 4 string highcode 16#1000 add 16 2 index cvrs 0 (.r) putinterval
+ FontBase exch concatstrings /fullname exch def
+ UniqueID 20000000 eq { /UniqueID 4990000 highcode add def } if
+ /encoding CustomEncMode
+ { KanjiSubEncoding }
+ { StdEncMode { StandardEncoding } { ISOLatin1Encoding } ifelse }
+ ifelse def
+
+ /Font 30 dict def
+ Font begin
+ /FontInfo 20 dict def
+ FontInfo begin
+
+ % Write the clear text part.
+
+ /CreationDate (%Calendar%) currentdevparams
+ dup /Weekday get {(Sun )(Mon )(Tue )(Wed )(Thu )(Fri )(Sat )} exch get
+ 1 index /Month get 1 sub
+ {(Jan)(Feb)(Mar)(Apr)(May)(Jun)(Jul)(Aug)(Sep)(Oct)(Nov)(Dec)} exch get
+ concatstrings
+ {{/Day ( )} {/Hour ( )} {/Minute (:)} {/Second (:)} {/Year ( )}}
+ { dup 1 get 3 -1 roll exch concatstrings exch
+ 0 get 2 index exch get
+ dup 10 lt { =string cvs (0) exch concatstrings } { =string cvs } ifelse
+ concatstrings
+ }
+ forall exch pop readonly def
+ /VMusage 100000 def
+ /version version readonly def
+ /Notice (No copyright on this font. Original available from moe.ipl.t.u-tokyo.ac.jp:/Font. Converted by wftopfa.ps (Aladdin Enterprises).) readonly def
+ /FullName fullname readonly def
+ /FamilyName FontBase readonly def
+ /Weight (Regular) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch true def
+ /UnderlinePosition 0 def
+ /UnderlineThickness 0 def
+
+ end % FontInfo
+
+ /FontName fullname cvn def
+ /Encoding encoding def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [.001 0 0 .001 0 -0.16] readonly def
+ /UniqueID UniqueID def
+ /FontBBox [0 0 1000 1000] readonly def
+
+ /Private 20 dict def
+ Private begin
+
+ /-| {string currentfile exch readstring pop} readonly def
+ /|- {readonly def} readonly def
+ /| {readonly put} readonly def
+ /BlueValues [] readonly def
+ /OtherBlues [] readonly def
+ /MinFeature {16 16} readonly def
+ /StdHW StdHW def
+ /StdVW StdVW def
+ /ForceBold false def
+ /password 5839 def
+ /UniqueID UniqueID def
+ /OtherSubrs [] readonly def
+ /Subrs [
+ (\020\2771p|\020\024\020=-\223D\\\342R) readonly
+ (\020\2771py\274\366Uz) readonly
+ (\020\2771py\275\304\236i) readonly
+ (\020\2771p\371) readonly
+ (\020\2771p~\266+6\034\3446z) readonly
+ ] readonly def
+
+ end % Private
+
+ /CharStrings 256 dict def
+ chars
+ { exch =string cvs
+ dup 0 get highcode eq
+ { 1 get encoding exch get exch CharStrings 3 1 roll put }
+ { pop pop }
+ ifelse
+ }
+ forall
+
+ end % Font
+
+ Font /FontName get Font definefont setfont
+ (%stdout) (w) file writefont
+ } bind def
+
+% Scan the command line and process files.
+/options mark
+ /version { 2 copy get /version exch def 1 add } bind
+ /StdHW { 2 copy get cvx exec /StdHW exch def 1 add } bind
+ /StdVW { 2 copy get cvx exec /StdVW exch def 1 add } bind
+ /UniqueId { 2 copy get cvi /UniqueID exch def 1 add } bind
+ /UniqueID 1 index
+ /FontBase { 2 copy get /FontBase exch def 1 add } bind
+ /StdEnc { /StdEncMode true def } bind
+ /CustomEnc { /CustomEncMode true def } bind
+ /Binary { /Binary true def } bind
+ /noEncrypt { /Encrypt false def } bind
+.dicttomark def
+/wftopfa % [(arg1) ...] wftopfa -
+ { init dup 0
+ { dup 2 index length ge { exit } if
+ 2 copy get exch 1 add exch
+ options 1 index .knownget { exch pop exec } { readdefs } ifelse
+ }
+ loop pop pop
+ wrfont_dict /binary_CharStrings Binary put
+ wrfont_dict /eexec_encrypt Encrypt put
+ wrfont_dict /name_all_Encodings CustomEncMode put
+ writepfa
+ } bind def
+
+end % wftopfa_dict
+
+/wftopfa
+ { mark exch wftopfa_dict begin /saved save def { wftopfa } exec false%stopped
+ { cleartomark true } { cleartomark false } ifelse
+ saved end restore { stop } if
+ } bind def
+
+[ shellarguments
+ { ] wftopfa }
+ { pop }
+ifelse
+
+% ---------------- Root font ---------------- %
+
+% Define the Encoding for the root font.
+/wfrootencoding
+% \x00-\x3F
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 1 2 3 4 5 6 7 8 0 0 0 0 0 0 0
+ 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+% \x40-\x7F
+ 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
+ 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
+ 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
+ 73 74 75 76 77 0 0 0 0 0 0 0 0 0 0 0
+% \x80-\xFF
+128 copy
+256 packedarray def
+
+% Define the template for the root font dictionary.
+/wfrootfontdict mark
+ /FontType 0
+ /FontMatrix [1 0 0 1 0 0]
+ /FMapType 2
+ /Encoding wfrootencoding
+.dicttomark def
+
+% Define a dummy (placeholder) Type 1 font for the FDepVector.
+/type1dummyfont % <fontname> type1dummyfont <font>
+ { mark /FontName 3 -1 roll
+ /FontType 1
+ /FontMatrix [.001 0 0 .001 0 0]
+ /FontBBox [0 0 1000 1000]
+ /Encoding /KanjiSubEncoding findencoding
+ /CharStrings 0 dict
+ /Private mark /BlueValues [] /password 5839 .dicttomark
+ .dicttomark dup /FontName get exch definefont
+ } bind def
+
+% Write a root font. Again, wrfont.ps does most of the work.
+/makerootfont % <rootname> makerootfont <font>
+ { wfrootfontdict dup length 4 add % FontName, FDepVector, PrefEnc, FID
+ dict copy begin
+ cvlit /FontName exch def
+ 4 dict begin
+ /len FontName length def
+ /str len 4 add string def
+ FontName str cvs pop
+ str len (.r) putinterval
+ /FDepVector [ 16#21 1 16#74
+ { dup wfrootencoding exch get 0 eq
+ { pop
+ }
+ { 16 str len 2 add 2 getinterval cvrs pop
+ str cvn type1dummyfont
+ }
+ ifelse
+ }
+ for end counttomark -1 roll dup counttomark 2 roll
+ ] def
+ FontName currentdict end definefont
+ } bind def
+/writerootfont % <rootname> writerootfont -
+ { save exch makerootfont setfont (%stdout) (w) file writefont restore
+ } bind def
+
+% ---------------- Converting entire fonts ---------------- %
+
+% Define the directory where the Wadalab fonts are stored.
+/wfdir (/home/ghost/kanji/w) def
+
+% Convert an entire Wadalab font.
+/writeentirefont % <fontname> <template*> writeentirefont -
+ { 2 dict begin
+ /templates exch def
+ /fontname exch def
+ [ templates
+ { wfdir (/) concatstrings exch concatstrings { copystring }
+ 100 string filenameforall
+ }
+ forall
+ wfdir (/wadalab-sym/*.ps) concatstrings { copystring }
+ 100 string filenameforall
+ ]
+ (%!\n) print
+ { /currentuserparams where
+ { pop currentuserparams /VMReclaim get -2 vmreclaim { vmreclaim } }
+ { { } }
+ ifelse
+ } == (exec\n) print
+ (/KanjiSubEncoding ) print /KanjiSubEncoding findencoding ==
+ (readonly def\n) print
+ { (%stderr) (w) file dup 2 index write== flushfile
+ mark exch (CustomEnc) (Binary) (noEncrypt)
+ (FontBase) fontname counttomark -1 roll ] wftopfa
+ }
+ forall
+ fontname cvn writerootfont
+ (exec\n) print
+ end
+ } def % don't bind, so we can print the procedure
+
+% Convert the Wadalab JIS 1&2 SaiMincho font.
+% To invoke this from the command line,
+% gs -dNODISPLAY -q wftopfa.ps -c writeSaiMincho0 flush quit >wmin0.ps
+% To make the resulting font loadable on demand, add to the Fontmap file:
+% /Wadalab-SaiMincho (wmin0.ps) ;
+/writeSaiMincho0
+ { (Wadalab-SaiMincho) [ (wadalab-mincho-0-8/*.ps) ] writeentirefont
+ } bind def
diff --git a/Master/xemtex/gslib/winmaps.ps b/Master/xemtex/gslib/winmaps.ps
new file mode 100644
index 00000000000..40939ce0282
--- /dev/null
+++ b/Master/xemtex/gslib/winmaps.ps
@@ -0,0 +1,107 @@
+% Copyright (C) 1993 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: winmaps.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% winmaps.ps - make maps between PostScript encodings and Windows
+% character sets.
+
+% Define the two Windows encodings.
+
+/ANSIEncoding
+ ISOLatin1Encoding 256 array copy
+ dup 16#90 /.notdef put
+ 16#93 1 16#9f { 2 copy /.notdef put pop } for
+def
+
+/OEMEncoding [
+ /.notdef /.notdef /.notdef /heart /diamond /club /spade /bullet
+ 8 { /.notdef } repeat
+ /.notdef /.notdef /.notdef /.notdef /paragraph /section /.notdef /.notdef
+ /arrowup /arrowdown /arrowright /arrowleft /.notdef /arrowboth /.notdef /.notdef
+ StandardEncoding 32 96 getinterval aload pop
+ /Ccedilla /udieresis /eacute /acircumflex /adieresis /agrave /aring /ccedilla
+ /ecircumflex /edieresis /egrave /idieresis /igrave /Adieresis /Aring
+ /Eacute /ae /AE /ocircumflex /odieresis /ograve /ucircumflex /ugrave
+ /ydieresis /Odieresis /Udieresis /cent /sterling /yen /.notdef /florin
+ /aacute /iacute /oacute /uacute /ntilde /Ntilde /ordfeminine /ordmasculine
+ /questiondown /.notdef /logicalnot /onehalf /onequarter /exclamdown /guillemotleft /guillemotright
+ 48 { /.notdef } repeat
+ /alpha /beta /Gamma /Pi /Sigma /sigma /mu /tau
+ /Phi /Theta /Omega /delta /infinity /phi /element /intersection
+ /equivalence /plusminus /greaterequal /lessequal /integraltp /integralbt /divide /.notdef
+ /degree /dotmath /periodcentered /radical /.notdef /twosuperior /.notdef /.notdef
+] def
+
+% Utility procedures
+
+/invertencoding % <array> invertencoding <dict>
+ { 256 dict exch dup length 1 sub -1 0
+ { % stack: dict array index
+ 2 copy get /.notdef ne
+ { 2 copy get exch 3 index 3 1 roll put }
+ { pop }
+ ifelse
+ } for
+ pop
+ } def
+
+/pmarray 256 array def
+/printmap % <chars> <decode> printmap -
+ { mark 3 1 roll exch
+ { 2 copy known { 1 index exch get } { pop 0 } ifelse exch
+ }
+ forall pop
+ pmarray 0 counttomark 2 sub getinterval astore
+ ([) print dup length =only 0 exch (] = {\n ) exch
+ { exch print =only
+ 1 add 15 and dup 0 eq { (,\n ) } { (, ) } ifelse
+ }
+ forall pop pop (\n};\n) print pop
+ } def
+
+/decodeStd StandardEncoding invertencoding def
+/decodeISO ISOLatin1Encoding
+ % Remove the redundant characters
+ dup length array copy
+ [8#222 8#225 8#230 8#233 8#240] { 2 copy /.notdef put pop } forall
+invertencoding def
+/decodeSym SymbolEncoding invertencoding def
+
+/decodeANSI ANSIEncoding invertencoding def
+/decodeOEM OEMEncoding invertencoding def
+
+% Construct the map from Symbol to OEM.
+
+(\nprivate const byte far_data gs_map_symbol_to_oem) print
+SymbolEncoding decodeOEM printmap
+
+% Construct the map from ISOLatin1 to OEM.
+
+(\nprivate const byte far_data gs_map_iso_to_oem) print
+ISOLatin1Encoding decodeOEM printmap
+
+% Construct the map from Standard to ISOLatin1.
+
+(\nprivate const byte far_data gs_map_std_to_iso) print
+StandardEncoding decodeISO printmap
+
+% Construct the map from ISOLatin1 to Standard.
+% The Windows driver doesn't need this, but the X11 driver does.
+
+(\nprivate const byte far_data gs_map_iso_to_std) print
+ISOLatin1Encoding decodeStd printmap
+
+quit
diff --git a/Master/xemtex/gslib/wmakebat.bat b/Master/xemtex/gslib/wmakebat.bat
new file mode 100644
index 00000000000..cfe53b955a1
--- /dev/null
+++ b/Master/xemtex/gslib/wmakebat.bat
@@ -0,0 +1,4 @@
+@rem Execute this script with echo on, so we can see what's happening.
+@rem $Id: wmakebat.bat,v 1.1 2000/03/09 08:40:40 lpd Exp $
+wmakel -u -n -h %1 %2 %3 %4 %5 %6 %7 %8 %9 >_wm_temp.bat
+_wm_temp.bat
diff --git a/Master/xemtex/gslib/wrfont.ps b/Master/xemtex/gslib/wrfont.ps
new file mode 100644
index 00000000000..3d1ffc463fb
--- /dev/null
+++ b/Master/xemtex/gslib/wrfont.ps
@@ -0,0 +1,663 @@
+% Copyright (C) 1991, 1995, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: wrfont.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% wrfont.ps
+% Write out a Type 1 font in readable, reloadable form.
+% Note that this does NOT work on protected fonts, such as Adobe fonts
+% (unless you have loaded unprot.ps first, in which case you may be
+% violating the Adobe license).
+
+% ****** NOTE: This file must be kept consistent with gs_pfile.ps.
+
+/wrfont_dict 100 dict def
+wrfont_dict begin
+
+% ------ Options ------ %
+
+% Define whether to use eexec encryption for the font.
+% eexec encryption is only useful for compatibility with Adobe Type Manager
+% and other programs; it only slows Ghostscript down.
+ /eexec_encrypt false def
+
+% Define whether to write out the CharStrings in binary or in hex.
+% Binary takes less space on the file, but isn't guaranteed portable.
+ /binary_CharStrings false def
+
+% Define whether to use binary token encodings when possible.
+% Binary tokens are smaller and load faster, but are a Level 2 feature.
+ /binary_tokens false def
+
+% Define whether to encrypt the CharStrings on the file. (CharStrings
+% are always encrypted in memory.) Unencrypted CharStrings load about
+% 20% slower, but make the files compress much better for transport.
+ /encrypt_CharStrings true def
+
+% Define whether the font must provide standard PostScript language
+% equivalents for any facilities it uses that are provided in Ghostscript
+% but are not part of the standard PostScript language.
+ /standard_only true def
+
+% Define the value of lenIV to use in writing out the font.
+% use_lenIV = 0 produces the smallest output, but this may not be
+% compatible with old Adobe interpreters. use_lenIV = -1 means
+% use the value of lenIV from the font.
+ /use_lenIV -1 def
+
+% Define whether to produce the smallest possible output, relying
+% as much as possible on Ghostscript-specific support code.
+% Taking full advantage of this requires the following settings:
+% binary_CharStrings = true, binary_tokens = true, standard_only = false.
+ /smallest_output false def
+
+% Define whether to write out all currently known Encodings by name,
+% or only StandardEncoding and ISOLatin1Encoding.
+ /name_all_Encodings false def
+
+% ---------------- Runtime support ---------------- %
+
+/.packedfilefilter where
+ { pop }
+ { (gs_pfile.ps) runlibfile }
+ifelse
+
+% ------ Output utilities ------ %
+
+% By convention, the output file is named psfile.
+
+% Define some utilities for writing the output file.
+ /wtstring 2000 string def
+ /wb {psfile exch write} bind def
+ /wnb {/wb load repeat} bind def
+ /w1 {psfile exch write} bind def
+ /ws {psfile exch writestring} bind def
+ /wl {ws (\n) ws} bind def
+ /wt {wtstring cvs ws ( ) ws} bind def
+ /wd % Write a dictionary.
+ { dup length wo {dict dup begin} wol { we } forall
+ {end} wol
+ } bind def
+ /wld % Write a large dictionary more efficiently.
+ % Ignore the readonly attributes.
+ { dup length wo {dict dup begin} wol
+ 0 exch
+ { exch wo wo () wl
+ 1 add dup 200 eq
+ { wo ({def} repeat) wl 0 }
+ if
+ }
+ forall
+ dup 0 ne
+ { wo ({def} repeat) wl }
+ { pop }
+ ifelse
+ (end) ws
+ } bind def
+ /we % Write a dictionary entry.
+ { exch wo wo /def cvx wo (\n) ws
+ } bind def
+ /wcs % Write a CharString (or Subrs entry)
+ { dup type /stringtype eq
+ { 4330 exch changelenIV 0 ge
+ { % Add some leading garbage bytes.
+ wtstring changelenIV 2 index length getinterval
+ .type1decrypt exch pop
+ wtstring exch 0 exch length changelenIV add getinterval
+ }
+ { % Drop some leading garbage bytes.
+ wtstring .type1decrypt exch pop
+ changelenIV neg 1 index length 1 index sub getinterval
+ }
+ ifelse
+ binary_tokens encrypt_CharStrings and
+ { % Suppress recognizing the readonly status of the string.
+ 4330 exch dup .type1encrypt exch pop wo
+ }
+ { encrypt_CharStrings
+ { 4330 exch dup .type1encrypt exch pop
+ } if
+ smallest_output
+ { wo
+ }
+ { readonly dup length wo
+ binary_tokens not { ( ) ws } if
+ readproc ws wx
+ }
+ ifelse
+ }
+ ifelse
+ }
+ { wo % PostScript procedure
+ }
+ ifelse
+ } bind def
+
+% Construct the inversion of the system name table.
+ /SystemNames where
+ { pop /snit 256 dict def
+ 0 1 255
+ { dup SystemNames exch get
+ dup null ne { exch snit 3 1 roll put } { pop pop } ifelse
+ }
+ for
+ }
+ { /snit 1 dict def
+ }
+ ifelse
+
+% Write an object, using binary tokens if requested and possible.
+ /woa % write in ascii
+ { psfile exch write==only
+ } bind def
+
+ % Lookup table for ASCII output.
+
+ /intbytes % int nbytes -> byte*
+ { { dup 255 and exch -8 bitshift } repeat pop
+ } bind def
+ /wotta 10 dict dup begin
+ { /booleantype /integertype }
+ { { ( ) ws woa } def }
+ forall
+ % Iterate over arrays so we can print operators.
+ /arraytype
+ { dup xcheck {(}) ({)} {(]) ([)} ifelse ws exch dup wol exch ws wop
+ } bind def
+ /dicttype
+ { ( ) ws wd } def
+ /nametype
+ { dup xcheck { ( ) ws } if woa
+ } bind def
+ % Map back operators to their names,
+ % so we can write procedures.
+ /nulltype
+ { pop ( null) ws
+ } bind def
+ /operatortype
+ { wtstring cvs cvn cvx wo
+ } bind def
+ % Convert reals to integers if possible.
+ /realtype
+ { dup cvi 1 index eq { cvi wo } { ( ) ws woa } ifelse
+ } bind def
+ % == truncates strings longer than 200 characters!
+ /stringtype
+ { (\() ws dup
+ { dup dup 32 lt exch 127 ge or
+ { (\\) ws dup -6 bitshift 48 add w1
+ dup -3 bitshift 7 and 48 add w1
+ 7 and 48 add
+ }
+ { dup dup -2 and 40 eq exch 92 eq or {(\\) ws} if
+ }
+ ifelse w1
+ }
+ forall
+ (\)) ws wop
+ } bind def
+ /packedarraytype
+ { ([) ws dup { wo } forall
+ encodingnames 1 index known
+ % This is an encoding, but not one of the standard ones.
+ % Use the built-in encoding only if it is available.
+ { encodingnames exch get wo
+ ({findencoding}stopped{pop) ws
+ (}{counttomark 1 add 1 roll cleartomark}ifelse)
+ }
+ { pop ()
+ }
+ ifelse
+ (/packedarray where{pop counttomark packedarray exch pop}{]readonly}ifelse) ws
+ wl
+ }
+ def
+ end def
+
+ % Lookup table for binary output.
+
+ /wottb 8 dict dup begin
+ wotta currentdict copy pop
+ /integertype
+ { dup dup 127 le exch -128 ge and
+ { 136 wb 255 and wb }
+ { dup dup 32767 le exch -32768 ge and
+ { 134 wb 2 intbytes wb wb }
+ { 132 wb 4 intbytes wb wb wb wb }
+ ifelse
+ }
+ ifelse
+ } bind def
+ /nametype
+ { dup snit exch known
+ { dup xcheck { 146 } { 145 } ifelse wb
+ snit exch get wb
+ }
+ { wotta /nametype get exec
+ }
+ ifelse
+ } bind def
+ /stringtype
+ { dup dup length dup 255 le { 142 2 } { 2 intbytes 143 3 } ifelse wnb
+ ws wop
+ } bind def
+ end def
+
+ /wop % Write object protection
+ { wcheck not { /readonly cvx wo } if
+ } bind def
+ /wo % Write an object.
+ { dup type binary_tokens { wottb } { wotta } ifelse
+ exch get exec
+ } bind def
+ /wol % Write a list of objects.
+ { { wo } forall
+ } bind def
+
+% Write a hex string for Subrs or CharStrings.
+ /wx % string ->
+ { binary_CharStrings
+ { ws
+ }
+ { % Some systems choke on very long lines, so
+ % we break up the hexstring into chunks of 50 characters.
+ { dup length 25 le {exit} if
+ dup 0 25 getinterval psfile exch writehexstring (\n) ws
+ dup length 25 sub 25 exch getinterval
+ } loop
+ psfile exch writehexstring
+ } ifelse
+ } bind def
+
+% ------ CharString encryption utilities ------ %
+
+/enc_dict 20 dict def
+1 dict begin
+/bind { } def % make sure we can print out the procedures
+enc_dict begin
+
+(type1enc.ps) runlibfile
+enc_dict /.type1decrypt undef % we don't need this
+
+end end
+
+enc_dict { 1 index where { pop pop pop } { def } ifelse } forall
+
+% ------ Other utilities ------ %
+
+% Test whether two values are equal (for default dictionary entries).
+ /valueeq % <obj1> <obj2> valueeq <bool>
+ { 2 copy eq
+ { pop pop true }
+ { % Special hack for comparing FontMatrix values
+ dup type /arraytype eq 2 index type /arraytype eq and
+ { dup length 2 index length eq
+ { true 0 1 3 index length 1 sub
+ { % Stack: arr1 arr2 true index
+ 3 index 1 index get 3 index 3 -1 roll get eq not
+ { pop false exit }
+ if
+ }
+ for 3 1 roll pop pop
+ }
+ { pop pop false
+ }
+ ifelse
+ }
+ { pop pop false
+ }
+ ifelse
+ }
+ ifelse
+ } bind def
+
+% ------ The main program ------ %
+
+% Define the dictionary of keys to skip because they are treated specially.
+/.fontskipkeys mark
+ /CharStrings dup
+ /Encoding dup
+ /FDepVector dup
+ /FID dup
+ /FontInfo dup
+ /Metrics dup
+ /Metrics2 dup
+ /Private dup
+.dicttomark def
+/.minfontskipkeys mark
+ .fontskipkeys { } forall
+ /FontName dup
+ /UniqueID dup
+.dicttomark def
+/.privateskipkeys mark
+ /ND dup
+ /NP dup
+ /RD dup
+ /Subrs dup
+.dicttomark def
+/.minprivateskipkeys mark
+ .privateskipkeys { } forall
+ /MinFeature dup
+ /Password dup
+ /UniqueID dup
+.dicttomark def
+
+% Define the procedures for the Private dictionary.
+% These must be defined without `bind',
+% for the sake of the DISKFONTS feature.
+4 dict begin
+ /-! {string currentfile exch readhexstring pop} def
+ /-| {string currentfile exch readstring pop} def
+ /|- {readonly def} def
+ /| {readonly put} def
+currentdict end /encrypted_procs exch def
+4 dict begin
+ /-! {string currentfile exch readhexstring pop
+ 4330 exch dup .type1encrypt exch pop} def
+ /-| {string currentfile exch readstring pop
+ 4330 exch dup .type1encrypt exch pop} def
+ /|- {readonly def} def
+ /| {readonly put} def
+currentdict end /unencrypted_procs exch def
+
+% Construct an inverse dictionary of encodings.
+/encodingnames mark
+ StandardEncoding /StandardEncoding
+ ISOLatin1Encoding /ISOLatin1Encoding
+ SymbolEncoding /SymbolEncoding
+ DingbatsEncoding /DingbatsEncoding
+ /resourceforall where
+ { pop (*) { cvn dup findencoding exch } 100 string /Encoding resourceforall }
+ if
+.dicttomark def
+
+% Invert the standard encodings.
+.knownEncodings length 256 mul dict begin
+ 0 .knownEncodings
+ { { currentdict 1 index known { pop } { 1 index def } ifelse
+ 1 add
+ }
+ forall
+ }
+ forall pop
+currentdict end /inverseencodings exch def
+
+/writefont % <psfile> writefont - (writes the current font)
+ { /psfile exch def
+ /Font currentfont def
+ /FontInfo Font /FontInfo .knownget not { 0 dict } if def
+ /FontType Font /FontType get def
+ /hasPrivate Font /Private known def
+ /Private hasPrivate { Font /Private get } { 0 dict } ifelse def
+ /readproc binary_CharStrings { (-| ) } { (-! ) } ifelse def
+ /privateprocs
+ encrypt_CharStrings binary_tokens not and
+ { encrypted_procs } { unencrypted_procs } ifelse
+ def
+ /addlenIV false def
+ /changelenIV use_lenIV 0 lt
+ { 0 }
+ { use_lenIV Private /lenIV .knownget not
+ { 4 /addlenIV use_lenIV 4 ne def } if sub }
+ ifelse def
+ /minimize
+ smallest_output
+ FontType 1 eq and
+ Font /UniqueID known and
+ def
+ (%!FontType) ws FontType wtstring cvs ws (-1.0: ) ws
+ currentfont /FontName get wt
+ FontInfo /version .knownget not { (001.001) } if wl
+ FontInfo /CreationDate .knownget { (%%Creation Date: ) ws wl } if
+ FontInfo /VMusage .knownget
+ { (%%VMusage: ) ws dup wt wtstring cvs wl }
+ if
+ (systemdict begin) wl
+
+% If we're going to use eexec, create the filters now.
+ /realpsfile psfile def
+ eexec_encrypt
+ { /eexecfilter psfile binary_CharStrings not
+ { pop /bxstring 35 string def
+ { pop dup length 0 ne
+ { realpsfile exch writehexstring realpsfile (\n) writestring }
+ { pop }
+ ifelse bxstring
+ }
+ /NullEncode filter dup /hexfilter exch def
+ }
+ if 55665 /eexecEncode filter def
+ }
+ if
+
+% Turn on binary tokens if relevant.
+ binary_tokens { (currentobjectformat 1 setobjectformat) wl } if
+
+% If the file has a UniqueID, write out a check against loading it twice.
+ minimize
+ { Font /FontName get wo
+ Font /UniqueID get wo
+ Private length addlenIV { 1 add } if wo
+ Font length 1 add wo % +1 for FontFile
+ ( .checkexistingfont) wl
+ }
+ { Font /UniqueID known
+ { ({} FontDirectory) ws Font /FontName get dup wo ( known) wl
+ ( {) ws wo ( findfont dup /UniqueID known) wl
+ ( { dup /UniqueID get) ws Font /UniqueID get wo ( eq exch /FontType get 1 eq and }) wl
+ ( { pop false } ifelse) wl
+ ( { pop save /restore load } if) wl
+ ( } if) wl
+ }
+ if
+ }
+ ifelse
+
+% If we are writing unencrypted CharStrings for a standard environment,
+% write out the encryption procedures.
+ privateprocs unencrypted_procs eq standard_only and
+ { (systemdict /.type1encrypt known) wl
+ ( { save /restore load } { { } } ifelse) wl
+ (userdict begin) wl
+ enc_dict { we } forall
+ (end exec) wl
+ }
+ if
+
+% Write out the creation of the font dictionary and FontInfo.
+ minimize not
+ { Font length 1 add wo {dict begin} wol % +1 for FontFile
+ }
+ if
+ (/FontInfo ) ws FontInfo wd {readonly def} wol
+
+% Write out the other fixed entries in the font dictionary.
+ Font begin
+ Font
+ { minimize
+ { .minfontskipkeys 2 index known
+ { pop pop
+ }
+ { //.compactfontdefault 2 index .knownget
+ { 1 index valueeq { pop pop } { we } ifelse }
+ { we }
+ ifelse
+ }
+ ifelse
+ }
+ { .fontskipkeys 2 index known { pop pop } { we } ifelse
+ }
+ ifelse
+ } forall
+ /Encoding
+ encodingnames Encoding known
+ name_all_Encodings
+ Encoding StandardEncoding eq or
+ Encoding ISOLatin1Encoding eq or and
+ { encodingnames Encoding get cvx }
+ { Encoding }
+ ifelse
+ dup /StandardEncoding cvx eq minimize and
+ { pop pop }
+ { we }
+ ifelse
+
+% Write the FDepVector, if any.
+ Font /FDepVector .knownget
+ { {/FDepVector [} wol
+ { /FontName get wo {findfont} wol () wl } forall
+ {] readonly def} wol
+ }
+ if
+
+% Write out the Metrics, if any.
+ Font /Metrics .knownget
+ { (/Metrics ) ws wld {readonly def} wol
+ }
+ if
+ Font /Metrics2 .knownget
+ { (/Metrics2 ) ws wld {readonly def} wol
+ }
+ if
+
+% Start the eexec-encrypted section, if applicable.
+ eexec_encrypt
+ { {currentdict currentfile eexec} wol () wl
+ /psfile eexecfilter store
+ (\000\000\000\000) ws {begin} wol
+ }
+ if
+
+% Create and initialize the Private dictionary, if any.
+ hasPrivate
+{
+ Private
+ minimize
+ { begin {Private dup begin}
+ }
+ { dup length privateprocs length add dict copy begin
+ privateprocs { readonly def } forall
+ /Private wo
+ currentdict length 1 add wo {dict dup begin}
+ }
+ ifelse wol () wl
+ currentdict
+ { 1 index minimize { .minprivateskipkeys } { .privateskipkeys } ifelse
+ exch known
+ { pop pop }
+ { 1 index /lenIV eq use_lenIV 0 ge and { pop use_lenIV } if we }
+ ifelse
+ } forall
+ addlenIV { /lenIV use_lenIV we } if
+}
+if
+
+% Write the Subrs entries, if any.
+ currentdict /Subrs known
+ { (/Subrs[) wl
+ Subrs
+ { dup null ne
+ { wcs minimize not { () wl } if }
+ { pop /null cvx wo }
+ ifelse
+ } forall
+ {] dup {readonly pop} forall readonly def} wol () wl
+ }
+ if
+
+% Wrap up the Private dictionary.
+ hasPrivate
+ { end % Private
+ minimize
+ { {end readonly pop} } % Private
+ { {end readonly def} } % Private in font
+ ifelse wol
+ }
+ if
+
+% Write the CharStrings entries.
+% Detect identical (eq) entries, which bdftops produces.
+ currentdict /CharStrings known
+{
+ /CharStrings wo CharStrings length wo
+ minimize
+ { encrypt_CharStrings not wo ( .readCharStrings) wl
+ CharStrings length dict
+ CharStrings
+ { exch inverseencodings 1 index .knownget not { dup } if wo
+ % Stack: vdict value key
+ 3 copy pop .knownget { wo pop pop } { 3 copy put pop wcs } ifelse
+ } forall
+ }
+ { {dict dup Private begin begin} wol () wl
+ CharStrings length dict
+ CharStrings
+ { 2 index 1 index known
+ { exch wo 1 index exch get wo {load def} wol () wl
+ }
+ { 2 index 1 index 3 index put
+ exch wo wcs ( |-) wl
+ }
+ ifelse
+ } forall
+ {end end} wol
+ }
+ ifelse
+ pop
+ { readonly def } % CharStrings in font
+ wol
+}
+if
+
+% Terminate the output.
+ end % Font
+ eexec_encrypt
+ { {end mark currentfile closefile} wol () wl
+ eexecfilter dup flushfile closefile % psfile is eexecfilter
+ binary_CharStrings not { hexfilter dup flushfile closefile } if
+ /psfile realpsfile store
+ 8
+ { (0000000000000000000000000000000000000000000000000000000000000000)
+ wl
+ }
+ repeat {cleartomark} wol
+ }
+ if
+ { FontName currentdict end definefont pop
+ }
+ wol
+ Font /UniqueID known { /exec cvx wo } if
+ binary_tokens { /setobjectformat cvx wo } if
+ ( end) wl % systemdict
+
+ } bind def
+
+% ------ Other utilities ------ %
+
+% Prune garbage characters and OtherSubrs out of the current font,
+% if the relevant dictionaries are writable.
+/prunefont
+ { currentfont /CharStrings get wcheck
+ { currentfont /CharStrings get dup [ exch
+ { pop dup (S????00?) .stringmatch not { pop } if
+ } forall
+ ] { 2 copy undef pop } forall pop
+ }
+ if
+ } bind def
+
+end % wrfont_dict
+
+/writefont { wrfont_dict begin writefont end } def
diff --git a/Master/xemtex/gslib/zeroline.ps b/Master/xemtex/gslib/zeroline.ps
new file mode 100644
index 00000000000..7411a170d64
--- /dev/null
+++ b/Master/xemtex/gslib/zeroline.ps
@@ -0,0 +1,101 @@
+%!
+% Copyright (C) 1994 Aladdin Enterprises. All rights reserved.
+%
+% This program is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by the
+% Free Software Foundation; either version 2 of the License, or (at your
+% option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
+
+% $Id: zeroline.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $
+% zeroline.ps
+% Test file to determine how other PostScript implementations handle
+% filling zero-width lines under a variety of conditions.
+
+% Add a small "fan" of zero-width lines at different angles to the path.
+/fan
+ { currentpoint 100 0 rlineto
+ 2 copy moveto 100 20 rlineto
+ 2 copy moveto 100 100 rlineto
+ 2 copy moveto 20 100 rlineto
+ moveto 0 100 rlineto
+ } def
+
+% Append a rectangle to the current path.
+/rectappend
+ { 4 -2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath
+ } def
+% Fill a rectangle.
+/rectfill
+ { gsave newpath rectappend fill grestore
+ } def
+% Stroke a rectangle.
+/rectstroke
+ { gsave newpath rectappend stroke grestore
+ } def
+% Clip to a rectangle. Unlike the real rectclip,
+% this clear the current path.
+/rectclip
+ { newpath rectappend clip newpath
+ } def
+
+40 40 translate
+
+% Display fans of different colors on different backgrounds.
+gsave
+0 setgray
+0 0 120 120 rectstroke
+10 10 moveto fan fill
+140 0 translate
+0 setgray
+0 0 120 120 rectstroke
+0.8 setgray
+10 10 moveto fan fill
+140 0 translate
+0 setgray
+0 0 120 120 rectfill
+1 setgray
+10 10 moveto fan fill
+grestore
+0 140 translate
+
+% Display rectangles with two edges coincident.
+gsave
+newpath
+0 setgray
+0 0 40 40 rectappend
+0 0 20 20 rectappend
+eofill
+60 0 translate
+0 0 40 40 rectappend
+40 0 -20 20 rectappend
+fill
+grestore
+0 60 translate
+
+% Display superimposed lines.
+gsave
+/super
+ { currentpoint fan
+ 2 copy moveto 20 0 rmoveto 50 0 rlineto
+ 2 copy moveto 20 4 rmoveto 50 10 rlineto
+ 2 copy moveto 20 20 rmoveto 50 50 rlineto
+ 2 copy moveto 4 20 rmoveto 10 50 rlineto
+ moveto 0 20 rmoveto 0 50 rlineto
+ } def
+0 setgray
+0 0 moveto super fill
+140 0 translate 0 0 moveto super eofill
+grestore
+0 140 translate
+
+showpage
diff --git a/Master/xemtex/perl/lib/AnyDBM_File.pm b/Master/xemtex/perl/lib/AnyDBM_File.pm
new file mode 100644
index 00000000000..d73abab0f9e
--- /dev/null
+++ b/Master/xemtex/perl/lib/AnyDBM_File.pm
@@ -0,0 +1,93 @@
+package AnyDBM_File;
+
+use 5.006_001;
+our $VERSION = '1.00';
+our @ISA = qw(NDBM_File DB_File GDBM_File SDBM_File ODBM_File) unless @ISA;
+
+my $mod;
+for $mod (@ISA) {
+ if (eval "require $mod") {
+ @ISA = ($mod); # if we leave @ISA alone, warnings abound
+ return 1;
+ }
+}
+
+die "No DBM package was successfully found or installed";
+#return 0;
+
+=head1 NAME
+
+AnyDBM_File - provide framework for multiple DBMs
+
+NDBM_File, DB_File, GDBM_File, SDBM_File, ODBM_File - various DBM implementations
+
+=head1 SYNOPSIS
+
+ use AnyDBM_File;
+
+=head1 DESCRIPTION
+
+This module is a "pure virtual base class"--it has nothing of its own.
+It's just there to inherit from one of the various DBM packages. It
+prefers ndbm for compatibility reasons with Perl 4, then Berkeley DB (See
+L<DB_File>), GDBM, SDBM (which is always there--it comes with Perl), and
+finally ODBM. This way old programs that used to use NDBM via dbmopen()
+can still do so, but new ones can reorder @ISA:
+
+ BEGIN { @AnyDBM_File::ISA = qw(DB_File GDBM_File NDBM_File) }
+ use AnyDBM_File;
+
+Having multiple DBM implementations makes it trivial to copy database formats:
+
+ use POSIX; use NDBM_File; use DB_File;
+ tie %newhash, 'DB_File', $new_filename, O_CREAT|O_RDWR;
+ tie %oldhash, 'NDBM_File', $old_filename, 1, 0;
+ %newhash = %oldhash;
+
+=head2 DBM Comparisons
+
+Here's a partial table of features the different packages offer:
+
+ odbm ndbm sdbm gdbm bsd-db
+ ---- ---- ---- ---- ------
+ Linkage comes w/ perl yes yes yes yes yes
+ Src comes w/ perl no no yes no no
+ Comes w/ many unix os yes yes[0] no no no
+ Builds ok on !unix ? ? yes yes ?
+ Code Size ? ? small big big
+ Database Size ? ? small big? ok[1]
+ Speed ? ? slow ok fast
+ FTPable no no yes yes yes
+ Easy to build N/A N/A yes yes ok[2]
+ Size limits 1k 4k 1k[3] none none
+ Byte-order independent no no no no yes
+ Licensing restrictions ? ? no yes no
+
+
+=over 4
+
+=item [0]
+
+on mixed universe machines, may be in the bsd compat library,
+which is often shunned.
+
+=item [1]
+
+Can be trimmed if you compile for one access method.
+
+=item [2]
+
+See L<DB_File>.
+Requires symbolic links.
+
+=item [3]
+
+By default, but can be redefined.
+
+=back
+
+=head1 SEE ALSO
+
+dbm(3), ndbm(3), DB_File(3), L<perldbmfilter>
+
+=cut
diff --git a/Master/xemtex/perl/lib/AutoLoader.pm b/Master/xemtex/perl/lib/AutoLoader.pm
new file mode 100644
index 00000000000..b42d5ff4b68
--- /dev/null
+++ b/Master/xemtex/perl/lib/AutoLoader.pm
@@ -0,0 +1,337 @@
+package AutoLoader;
+
+use 5.006_001;
+our(@EXPORT, @EXPORT_OK, $VERSION);
+
+my $is_dosish;
+my $is_epoc;
+my $is_vms;
+my $is_macos;
+
+BEGIN {
+ require Exporter;
+ @EXPORT = @EXPORT = ();
+ @EXPORT_OK = @EXPORT_OK = qw(AUTOLOAD);
+ $is_dosish = $^O eq 'dos' || $^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'NetWare';
+ $is_epoc = $^O eq 'epoc';
+ $is_vms = $^O eq 'VMS';
+ $is_macos = $^O eq 'MacOS';
+ $VERSION = '5.59';
+}
+
+AUTOLOAD {
+ my $sub = $AUTOLOAD;
+ my $filename;
+ # Braces used to preserve $1 et al.
+ {
+ # Try to find the autoloaded file from the package-qualified
+ # name of the sub. e.g., if the sub needed is
+ # Getopt::Long::GetOptions(), then $INC{Getopt/Long.pm} is
+ # something like '/usr/lib/perl5/Getopt/Long.pm', and the
+ # autoload file is '/usr/lib/perl5/auto/Getopt/Long/GetOptions.al'.
+ #
+ # However, if @INC is a relative path, this might not work. If,
+ # for example, @INC = ('lib'), then $INC{Getopt/Long.pm} is
+ # 'lib/Getopt/Long.pm', and we want to require
+ # 'auto/Getopt/Long/GetOptions.al' (without the leading 'lib').
+ # In this case, we simple prepend the 'auto/' and let the
+ # C<require> take care of the searching for us.
+
+ my ($pkg,$func) = ($sub =~ /(.*)::([^:]+)$/);
+ $pkg =~ s#::#/#g;
+ if (defined($filename = $INC{"$pkg.pm"})) {
+ if ($is_macos) {
+ $pkg =~ tr#/#:#;
+ $filename =~ s#^(.*)$pkg\.pm\z#$1auto:$pkg:$func.al#s;
+ } else {
+ $filename =~ s#^(.*)$pkg\.pm\z#$1auto/$pkg/$func.al#s;
+ }
+
+ # if the file exists, then make sure that it is a
+ # a fully anchored path (i.e either '/usr/lib/auto/foo/bar.al',
+ # or './lib/auto/foo/bar.al'. This avoids C<require> searching
+ # (and failing) to find the 'lib/auto/foo/bar.al' because it
+ # looked for 'lib/lib/auto/foo/bar.al', given @INC = ('lib').
+
+ if (-r $filename) {
+ unless ($filename =~ m|^/|s) {
+ if ($is_dosish) {
+ unless ($filename =~ m{^([a-z]:)?[\\/]}is) {
+ if ($^O ne 'NetWare') {
+ $filename = "./$filename";
+ } else {
+ $filename = "$filename";
+ }
+ }
+ }
+ elsif ($is_epoc) {
+ unless ($filename =~ m{^([a-z?]:)?[\\/]}is) {
+ $filename = "./$filename";
+ }
+ }
+ elsif ($is_vms) {
+ # XXX todo by VMSmiths
+ $filename = "./$filename";
+ }
+ elsif (!$is_macos) {
+ $filename = "./$filename";
+ }
+ }
+ }
+ else {
+ $filename = undef;
+ }
+ }
+ unless (defined $filename) {
+ # let C<require> do the searching
+ $filename = "auto/$sub.al";
+ $filename =~ s#::#/#g;
+ }
+ }
+ my $save = $@;
+ local $!; # Do not munge the value.
+ eval { local $SIG{__DIE__}; require $filename };
+ if ($@) {
+ if (substr($sub,-9) eq '::DESTROY') {
+ *$sub = sub {};
+ } else {
+ # The load might just have failed because the filename was too
+ # long for some old SVR3 systems which treat long names as errors.
+ # If we can succesfully truncate a long name then it's worth a go.
+ # There is a slight risk that we could pick up the wrong file here
+ # but autosplit should have warned about that when splitting.
+ if ($filename =~ s/(\w{12,})\.al$/substr($1,0,11).".al"/e){
+ eval { local $SIG{__DIE__}; require $filename };
+ }
+ if ($@){
+ $@ =~ s/ at .*\n//;
+ my $error = $@;
+ require Carp;
+ Carp::croak($error);
+ }
+ }
+ }
+ $@ = $save;
+ goto &$sub;
+}
+
+sub import {
+ my $pkg = shift;
+ my $callpkg = caller;
+
+ #
+ # Export symbols, but not by accident of inheritance.
+ #
+
+ if ($pkg eq 'AutoLoader') {
+ local $Exporter::ExportLevel = 1;
+ Exporter::import $pkg, @_;
+ }
+
+ #
+ # Try to find the autosplit index file. Eg., if the call package
+ # is POSIX, then $INC{POSIX.pm} is something like
+ # '/usr/local/lib/perl5/POSIX.pm', and the autosplit index file is in
+ # '/usr/local/lib/perl5/auto/POSIX/autosplit.ix', so we require that.
+ #
+ # However, if @INC is a relative path, this might not work. If,
+ # for example, @INC = ('lib'), then
+ # $INC{POSIX.pm} is 'lib/POSIX.pm', and we want to require
+ # 'auto/POSIX/autosplit.ix' (without the leading 'lib').
+ #
+
+ (my $calldir = $callpkg) =~ s#::#/#g;
+ my $path = $INC{$calldir . '.pm'};
+ if (defined($path)) {
+ # Try absolute path name.
+ if ($is_macos) {
+ (my $malldir = $calldir) =~ tr#/#:#;
+ $path =~ s#^(.*)$malldir\.pm\z#$1auto:$malldir:autosplit.ix#s;
+ } else {
+ $path =~ s#^(.*)$calldir\.pm\z#$1auto/$calldir/autosplit.ix#;
+ }
+
+ eval { require $path; };
+ # If that failed, try relative path with normal @INC searching.
+ if ($@) {
+ $path ="auto/$calldir/autosplit.ix";
+ eval { require $path; };
+ }
+ if ($@) {
+ my $error = $@;
+ require Carp;
+ Carp::carp($error);
+ }
+ }
+}
+
+sub unimport {
+ my $callpkg = caller;
+ eval "package $callpkg; sub AUTOLOAD;";
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+AutoLoader - load subroutines only on demand
+
+=head1 SYNOPSIS
+
+ package Foo;
+ use AutoLoader 'AUTOLOAD'; # import the default AUTOLOAD subroutine
+
+ package Bar;
+ use AutoLoader; # don't import AUTOLOAD, define our own
+ sub AUTOLOAD {
+ ...
+ $AutoLoader::AUTOLOAD = "...";
+ goto &AutoLoader::AUTOLOAD;
+ }
+
+=head1 DESCRIPTION
+
+The B<AutoLoader> module works with the B<AutoSplit> module and the
+C<__END__> token to defer the loading of some subroutines until they are
+used rather than loading them all at once.
+
+To use B<AutoLoader>, the author of a module has to place the
+definitions of subroutines to be autoloaded after an C<__END__> token.
+(See L<perldata>.) The B<AutoSplit> module can then be run manually to
+extract the definitions into individual files F<auto/funcname.al>.
+
+B<AutoLoader> implements an AUTOLOAD subroutine. When an undefined
+subroutine in is called in a client module of B<AutoLoader>,
+B<AutoLoader>'s AUTOLOAD subroutine attempts to locate the subroutine in a
+file with a name related to the location of the file from which the
+client module was read. As an example, if F<POSIX.pm> is located in
+F</usr/local/lib/perl5/POSIX.pm>, B<AutoLoader> will look for perl
+subroutines B<POSIX> in F</usr/local/lib/perl5/auto/POSIX/*.al>, where
+the C<.al> file has the same name as the subroutine, sans package. If
+such a file exists, AUTOLOAD will read and evaluate it,
+thus (presumably) defining the needed subroutine. AUTOLOAD will then
+C<goto> the newly defined subroutine.
+
+Once this process completes for a given function, it is defined, so
+future calls to the subroutine will bypass the AUTOLOAD mechanism.
+
+=head2 Subroutine Stubs
+
+In order for object method lookup and/or prototype checking to operate
+correctly even when methods have not yet been defined it is necessary to
+"forward declare" each subroutine (as in C<sub NAME;>). See
+L<perlsub/"SYNOPSIS">. Such forward declaration creates "subroutine
+stubs", which are place holders with no code.
+
+The AutoSplit and B<AutoLoader> modules automate the creation of forward
+declarations. The AutoSplit module creates an 'index' file containing
+forward declarations of all the AutoSplit subroutines. When the
+AutoLoader module is 'use'd it loads these declarations into its callers
+package.
+
+Because of this mechanism it is important that B<AutoLoader> is always
+C<use>d and not C<require>d.
+
+=head2 Using B<AutoLoader>'s AUTOLOAD Subroutine
+
+In order to use B<AutoLoader>'s AUTOLOAD subroutine you I<must>
+explicitly import it:
+
+ use AutoLoader 'AUTOLOAD';
+
+=head2 Overriding B<AutoLoader>'s AUTOLOAD Subroutine
+
+Some modules, mainly extensions, provide their own AUTOLOAD subroutines.
+They typically need to check for some special cases (such as constants)
+and then fallback to B<AutoLoader>'s AUTOLOAD for the rest.
+
+Such modules should I<not> import B<AutoLoader>'s AUTOLOAD subroutine.
+Instead, they should define their own AUTOLOAD subroutines along these
+lines:
+
+ use AutoLoader;
+ use Carp;
+
+ sub AUTOLOAD {
+ my $sub = $AUTOLOAD;
+ (my $constname = $sub) =~ s/.*:://;
+ my $val = constant($constname, @_ ? $_[0] : 0);
+ if ($! != 0) {
+ if ($! =~ /Invalid/ || $!{EINVAL}) {
+ $AutoLoader::AUTOLOAD = $sub;
+ goto &AutoLoader::AUTOLOAD;
+ }
+ else {
+ croak "Your vendor has not defined constant $constname";
+ }
+ }
+ *$sub = sub { $val }; # same as: eval "sub $sub { $val }";
+ goto &$sub;
+ }
+
+If any module's own AUTOLOAD subroutine has no need to fallback to the
+AutoLoader's AUTOLOAD subroutine (because it doesn't have any AutoSplit
+subroutines), then that module should not use B<AutoLoader> at all.
+
+=head2 Package Lexicals
+
+Package lexicals declared with C<my> in the main block of a package
+using B<AutoLoader> will not be visible to auto-loaded subroutines, due to
+the fact that the given scope ends at the C<__END__> marker. A module
+using such variables as package globals will not work properly under the
+B<AutoLoader>.
+
+The C<vars> pragma (see L<perlmod/"vars">) may be used in such
+situations as an alternative to explicitly qualifying all globals with
+the package namespace. Variables pre-declared with this pragma will be
+visible to any autoloaded routines (but will not be invisible outside
+the package, unfortunately).
+
+=head2 Not Using AutoLoader
+
+You can stop using AutoLoader by simply
+
+ no AutoLoader;
+
+=head2 B<AutoLoader> vs. B<SelfLoader>
+
+The B<AutoLoader> is similar in purpose to B<SelfLoader>: both delay the
+loading of subroutines.
+
+B<SelfLoader> uses the C<__DATA__> marker rather than C<__END__>.
+While this avoids the use of a hierarchy of disk files and the
+associated open/close for each routine loaded, B<SelfLoader> suffers a
+startup speed disadvantage in the one-time parsing of the lines after
+C<__DATA__>, after which routines are cached. B<SelfLoader> can also
+handle multiple packages in a file.
+
+B<AutoLoader> only reads code as it is requested, and in many cases
+should be faster, but requires a mechanism like B<AutoSplit> be used to
+create the individual files. L<ExtUtils::MakeMaker> will invoke
+B<AutoSplit> automatically if B<AutoLoader> is used in a module source
+file.
+
+=head1 CAVEATS
+
+AutoLoaders prior to Perl 5.002 had a slightly different interface. Any
+old modules which use B<AutoLoader> should be changed to the new calling
+style. Typically this just means changing a require to a use, adding
+the explicit C<'AUTOLOAD'> import if needed, and removing B<AutoLoader>
+from C<@ISA>.
+
+On systems with restrictions on file name length, the file corresponding
+to a subroutine may have a shorter name that the routine itself. This
+can lead to conflicting file names. The I<AutoSplit> package warns of
+these potential conflicts when used to split a module.
+
+AutoLoader may fail to find the autosplit files (or even find the wrong
+ones) in cases where C<@INC> contains relative paths, B<and> the program
+does C<chdir>.
+
+=head1 SEE ALSO
+
+L<SelfLoader> - an autoloader that doesn't use external files.
+
+=cut
diff --git a/Master/xemtex/perl/lib/B.pm b/Master/xemtex/perl/lib/B.pm
new file mode 100644
index 00000000000..feca2e59d6e
--- /dev/null
+++ b/Master/xemtex/perl/lib/B.pm
@@ -0,0 +1,971 @@
+# B.pm
+#
+# Copyright (c) 1996, 1997, 1998 Malcolm Beattie
+#
+# You may distribute under the terms of either the GNU General Public
+# License or the Artistic License, as specified in the README file.
+#
+package B;
+
+our $VERSION = '1.01';
+
+use XSLoader ();
+require Exporter;
+@ISA = qw(Exporter);
+
+# walkoptree_slow comes from B.pm (you are there),
+# walkoptree comes from B.xs
+@EXPORT_OK = qw(minus_c ppname save_BEGINs
+ class peekop cast_I32 cstring cchar hash threadsv_names
+ main_root main_start main_cv svref_2object opnumber
+ amagic_generation perlstring
+ walkoptree_slow walkoptree walkoptree_exec walksymtable
+ parents comppadlist sv_undef compile_stats timing_info
+ begin_av init_av end_av regex_padav);
+
+sub OPf_KIDS ();
+use strict;
+@B::SV::ISA = 'B::OBJECT';
+@B::NULL::ISA = 'B::SV';
+@B::PV::ISA = 'B::SV';
+@B::IV::ISA = 'B::SV';
+@B::NV::ISA = 'B::IV';
+@B::RV::ISA = 'B::SV';
+@B::PVIV::ISA = qw(B::PV B::IV);
+@B::PVNV::ISA = qw(B::PV B::NV);
+@B::PVMG::ISA = 'B::PVNV';
+@B::PVLV::ISA = 'B::PVMG';
+@B::BM::ISA = 'B::PVMG';
+@B::AV::ISA = 'B::PVMG';
+@B::GV::ISA = 'B::PVMG';
+@B::HV::ISA = 'B::PVMG';
+@B::CV::ISA = 'B::PVMG';
+@B::IO::ISA = 'B::PVMG';
+@B::FM::ISA = 'B::CV';
+
+@B::OP::ISA = 'B::OBJECT';
+@B::UNOP::ISA = 'B::OP';
+@B::BINOP::ISA = 'B::UNOP';
+@B::LOGOP::ISA = 'B::UNOP';
+@B::LISTOP::ISA = 'B::BINOP';
+@B::SVOP::ISA = 'B::OP';
+@B::PADOP::ISA = 'B::OP';
+@B::PVOP::ISA = 'B::OP';
+@B::CVOP::ISA = 'B::OP';
+@B::LOOP::ISA = 'B::LISTOP';
+@B::PMOP::ISA = 'B::LISTOP';
+@B::COP::ISA = 'B::OP';
+
+@B::SPECIAL::ISA = 'B::OBJECT';
+
+{
+ # Stop "-w" from complaining about the lack of a real B::OBJECT class
+ package B::OBJECT;
+}
+
+sub B::GV::SAFENAME {
+ my $name = (shift())->NAME;
+
+ # The regex below corresponds to the isCONTROLVAR macro
+ # from toke.c
+
+ $name =~ s/^([\cA-\cZ\c\\c[\c]\c?\c_\c^])/"^".
+ chr( utf8::unicode_to_native( 64 ^ ord($1) ))/e;
+
+ # When we say unicode_to_native we really mean ascii_to_native,
+ # which matters iff this is a non-ASCII platform (EBCDIC).
+
+ return $name;
+}
+
+sub B::IV::int_value {
+ my ($self) = @_;
+ return (($self->FLAGS() & SVf_IVisUV()) ? $self->UVX : $self->IV);
+}
+
+sub B::NULL::as_string() {""}
+sub B::IV::as_string() {goto &B::IV::int_value}
+sub B::PV::as_string() {goto &B::PV::PV}
+
+my $debug;
+my $op_count = 0;
+my @parents = ();
+
+sub debug {
+ my ($class, $value) = @_;
+ $debug = $value;
+ walkoptree_debug($value);
+}
+
+sub class {
+ my $obj = shift;
+ my $name = ref $obj;
+ $name =~ s/^.*:://;
+ return $name;
+}
+
+sub parents { \@parents }
+
+# For debugging
+sub peekop {
+ my $op = shift;
+ return sprintf("%s (0x%x) %s", class($op), $$op, $op->name);
+}
+
+sub walkoptree_slow {
+ my($op, $method, $level) = @_;
+ $op_count++; # just for statistics
+ $level ||= 0;
+ warn(sprintf("walkoptree: %d. %s\n", $level, peekop($op))) if $debug;
+ $op->$method($level);
+ if ($$op && ($op->flags & OPf_KIDS)) {
+ my $kid;
+ unshift(@parents, $op);
+ for ($kid = $op->first; $$kid; $kid = $kid->sibling) {
+ walkoptree_slow($kid, $method, $level + 1);
+ }
+ shift @parents;
+ }
+ if (class($op) eq 'PMOP' && $op->pmreplroot && ${$op->pmreplroot}) {
+ unshift(@parents, $op);
+ walkoptree_slow($op->pmreplroot, $method, $level + 1);
+ shift @parents;
+ }
+}
+
+sub compile_stats {
+ return "Total number of OPs processed: $op_count\n";
+}
+
+sub timing_info {
+ my ($sec, $min, $hr) = localtime;
+ my ($user, $sys) = times;
+ sprintf("%02d:%02d:%02d user=$user sys=$sys",
+ $hr, $min, $sec, $user, $sys);
+}
+
+my %symtable;
+
+sub clearsym {
+ %symtable = ();
+}
+
+sub savesym {
+ my ($obj, $value) = @_;
+# warn(sprintf("savesym: sym_%x => %s\n", $$obj, $value)); # debug
+ $symtable{sprintf("sym_%x", $$obj)} = $value;
+}
+
+sub objsym {
+ my $obj = shift;
+ return $symtable{sprintf("sym_%x", $$obj)};
+}
+
+sub walkoptree_exec {
+ my ($op, $method, $level) = @_;
+ $level ||= 0;
+ my ($sym, $ppname);
+ my $prefix = " " x $level;
+ for (; $$op; $op = $op->next) {
+ $sym = objsym($op);
+ if (defined($sym)) {
+ print $prefix, "goto $sym\n";
+ return;
+ }
+ savesym($op, sprintf("%s (0x%lx)", class($op), $$op));
+ $op->$method($level);
+ $ppname = $op->name;
+ if ($ppname =~
+ /^(or|and|mapwhile|grepwhile|entertry|range|cond_expr)$/)
+ {
+ print $prefix, uc($1), " => {\n";
+ walkoptree_exec($op->other, $method, $level + 1);
+ print $prefix, "}\n";
+ } elsif ($ppname eq "match" || $ppname eq "subst") {
+ my $pmreplstart = $op->pmreplstart;
+ if ($$pmreplstart) {
+ print $prefix, "PMREPLSTART => {\n";
+ walkoptree_exec($pmreplstart, $method, $level + 1);
+ print $prefix, "}\n";
+ }
+ } elsif ($ppname eq "substcont") {
+ print $prefix, "SUBSTCONT => {\n";
+ walkoptree_exec($op->other->pmreplstart, $method, $level + 1);
+ print $prefix, "}\n";
+ $op = $op->other;
+ } elsif ($ppname eq "enterloop") {
+ print $prefix, "REDO => {\n";
+ walkoptree_exec($op->redoop, $method, $level + 1);
+ print $prefix, "}\n", $prefix, "NEXT => {\n";
+ walkoptree_exec($op->nextop, $method, $level + 1);
+ print $prefix, "}\n", $prefix, "LAST => {\n";
+ walkoptree_exec($op->lastop, $method, $level + 1);
+ print $prefix, "}\n";
+ } elsif ($ppname eq "subst") {
+ my $replstart = $op->pmreplstart;
+ if ($$replstart) {
+ print $prefix, "SUBST => {\n";
+ walkoptree_exec($replstart, $method, $level + 1);
+ print $prefix, "}\n";
+ }
+ }
+ }
+}
+
+sub walksymtable {
+ my ($symref, $method, $recurse, $prefix) = @_;
+ my $sym;
+ my $ref;
+ my $fullname;
+ no strict 'refs';
+ $prefix = '' unless defined $prefix;
+ while (($sym, $ref) = each %$symref) {
+ $fullname = "*main::".$prefix.$sym;
+ if ($sym =~ /::$/) {
+ $sym = $prefix . $sym;
+ if ($sym ne "main::" && $sym ne "<none>::" && &$recurse($sym)) {
+ walksymtable(\%$fullname, $method, $recurse, $sym);
+ }
+ } else {
+ svref_2object(\*$fullname)->$method();
+ }
+ }
+}
+
+{
+ package B::Section;
+ my $output_fh;
+ my %sections;
+
+ sub new {
+ my ($class, $section, $symtable, $default) = @_;
+ $output_fh ||= FileHandle->new_tmpfile;
+ my $obj = bless [-1, $section, $symtable, $default], $class;
+ $sections{$section} = $obj;
+ return $obj;
+ }
+
+ sub get {
+ my ($class, $section) = @_;
+ return $sections{$section};
+ }
+
+ sub add {
+ my $section = shift;
+ while (defined($_ = shift)) {
+ print $output_fh "$section->[1]\t$_\n";
+ $section->[0]++;
+ }
+ }
+
+ sub index {
+ my $section = shift;
+ return $section->[0];
+ }
+
+ sub name {
+ my $section = shift;
+ return $section->[1];
+ }
+
+ sub symtable {
+ my $section = shift;
+ return $section->[2];
+ }
+
+ sub default {
+ my $section = shift;
+ return $section->[3];
+ }
+
+ sub output {
+ my ($section, $fh, $format) = @_;
+ my $name = $section->name;
+ my $sym = $section->symtable || {};
+ my $default = $section->default;
+
+ seek($output_fh, 0, 0);
+ while (<$output_fh>) {
+ chomp;
+ s/^(.*?)\t//;
+ if ($1 eq $name) {
+ s{(s\\_[0-9a-f]+)} {
+ exists($sym->{$1}) ? $sym->{$1} : $default;
+ }ge;
+ printf $fh $format, $_;
+ }
+ }
+ }
+}
+
+XSLoader::load 'B';
+
+1;
+
+__END__
+
+=head1 NAME
+
+B - The Perl Compiler
+
+=head1 SYNOPSIS
+
+ use B;
+
+=head1 DESCRIPTION
+
+The C<B> module supplies classes which allow a Perl program to delve
+into its own innards. It is the module used to implement the
+"backends" of the Perl compiler. Usage of the compiler does not
+require knowledge of this module: see the F<O> module for the
+user-visible part. The C<B> module is of use to those who want to
+write new compiler backends. This documentation assumes that the
+reader knows a fair amount about perl's internals including such
+things as SVs, OPs and the internal symbol table and syntax tree
+of a program.
+
+=head1 OVERVIEW OF CLASSES
+
+The C structures used by Perl's internals to hold SV and OP
+information (PVIV, AV, HV, ..., OP, SVOP, UNOP, ...) are modelled on a
+class hierarchy and the C<B> module gives access to them via a true
+object hierarchy. Structure fields which point to other objects
+(whether types of SV or types of OP) are represented by the C<B>
+module as Perl objects of the appropriate class. The bulk of the C<B>
+module is the methods for accessing fields of these structures. Note
+that all access is read-only: you cannot modify the internals by
+using this module.
+
+=head2 SV-RELATED CLASSES
+
+B::IV, B::NV, B::RV, B::PV, B::PVIV, B::PVNV, B::PVMG, B::BM, B::PVLV,
+B::AV, B::HV, B::CV, B::GV, B::FM, B::IO. These classes correspond in
+the obvious way to the underlying C structures of similar names. The
+inheritance hierarchy mimics the underlying C "inheritance". Access
+methods correspond to the underlying C macros for field access,
+usually with the leading "class indication" prefix removed (Sv, Av,
+Hv, ...). The leading prefix is only left in cases where its removal
+would cause a clash in method name. For example, C<GvREFCNT> stays
+as-is since its abbreviation would clash with the "superclass" method
+C<REFCNT> (corresponding to the C function C<SvREFCNT>).
+
+=head2 B::SV METHODS
+
+=over 4
+
+=item REFCNT
+
+=item FLAGS
+
+=back
+
+=head2 B::IV METHODS
+
+=over 4
+
+=item IV
+
+Returns the value of the IV, I<interpreted as
+a signed integer>. This will be misleading
+if C<FLAGS & SVf_IVisUV>. Perhaps you want the
+C<int_value> method instead?
+
+=item IVX
+
+=item UVX
+
+=item int_value
+
+This method returns the value of the IV as an integer.
+It differs from C<IV> in that it returns the correct
+value regardless of whether it's stored signed or
+unsigned.
+
+=item needs64bits
+
+=item packiv
+
+=back
+
+=head2 B::NV METHODS
+
+=over 4
+
+=item NV
+
+=item NVX
+
+=back
+
+=head2 B::RV METHODS
+
+=over 4
+
+=item RV
+
+=back
+
+=head2 B::PV METHODS
+
+=over 4
+
+=item PV
+
+This method is the one you usually want. It constructs a
+string using the length and offset information in the struct:
+for ordinary scalars it will return the string that you'd see
+from Perl, even if it contains null characters.
+
+=item RV
+
+Same as B::RV::RV, except that it will die() if the PV isn't
+a reference.
+
+=item PVX
+
+This method is less often useful. It assumes that the string
+stored in the struct is null-terminated, and disregards the
+length information.
+
+It is the appropriate method to use if you need to get the name
+of a lexical variable from a padname array. Lexical variable names
+are always stored with a null terminator, and the length field
+(SvCUR) is overloaded for other purposes and can't be relied on here.
+
+=back
+
+=head2 B::PVMG METHODS
+
+=over 4
+
+=item MAGIC
+
+=item SvSTASH
+
+=back
+
+=head2 B::MAGIC METHODS
+
+=over 4
+
+=item MOREMAGIC
+
+=item precomp
+
+Only valid on r-magic, returns the string that generated the regexp.
+
+=item PRIVATE
+
+=item TYPE
+
+=item FLAGS
+
+=item OBJ
+
+Will die() if called on r-magic.
+
+=item PTR
+
+=item REGEX
+
+Only valid on r-magic, returns the integer value of the REGEX stored
+in the MAGIC.
+
+=back
+
+=head2 B::PVLV METHODS
+
+=over 4
+
+=item TARGOFF
+
+=item TARGLEN
+
+=item TYPE
+
+=item TARG
+
+=back
+
+=head2 B::BM METHODS
+
+=over 4
+
+=item USEFUL
+
+=item PREVIOUS
+
+=item RARE
+
+=item TABLE
+
+=back
+
+=head2 B::GV METHODS
+
+=over 4
+
+=item is_empty
+
+This method returns TRUE if the GP field of the GV is NULL.
+
+=item NAME
+
+=item SAFENAME
+
+This method returns the name of the glob, but if the first
+character of the name is a control character, then it converts
+it to ^X first, so that *^G would return "^G" rather than "\cG".
+
+It's useful if you want to print out the name of a variable.
+If you restrict yourself to globs which exist at compile-time
+then the result ought to be unambiguous, because code like
+C<${"^G"} = 1> is compiled as two ops - a constant string and
+a dereference (rv2gv) - so that the glob is created at runtime.
+
+If you're working with globs at runtime, and need to disambiguate
+*^G from *{"^G"}, then you should use the raw NAME method.
+
+=item STASH
+
+=item SV
+
+=item IO
+
+=item FORM
+
+=item AV
+
+=item HV
+
+=item EGV
+
+=item CV
+
+=item CVGEN
+
+=item LINE
+
+=item FILE
+
+=item FILEGV
+
+=item GvREFCNT
+
+=item FLAGS
+
+=back
+
+=head2 B::IO METHODS
+
+=over 4
+
+=item LINES
+
+=item PAGE
+
+=item PAGE_LEN
+
+=item LINES_LEFT
+
+=item TOP_NAME
+
+=item TOP_GV
+
+=item FMT_NAME
+
+=item FMT_GV
+
+=item BOTTOM_NAME
+
+=item BOTTOM_GV
+
+=item SUBPROCESS
+
+=item IoTYPE
+
+=item IoFLAGS
+
+=item IsSTD
+
+Takes one arguments ( 'stdin' | 'stdout' | 'stderr' ) and returns true
+if the IoIFP of the object is equal to the handle whose name was
+passed as argument ( i.e. $io->IsSTD('stderr') is true if
+IoIFP($io) == PerlIO_stdin() ).
+
+=back
+
+=head2 B::AV METHODS
+
+=over 4
+
+=item FILL
+
+=item MAX
+
+=item OFF
+
+=item ARRAY
+
+=item AvFLAGS
+
+=back
+
+=head2 B::CV METHODS
+
+=over 4
+
+=item STASH
+
+=item START
+
+=item ROOT
+
+=item GV
+
+=item FILE
+
+=item DEPTH
+
+=item PADLIST
+
+=item OUTSIDE
+
+=item XSUB
+
+=item XSUBANY
+
+For constant subroutines, returns the constant SV returned by the subroutine.
+
+=item CvFLAGS
+
+=item const_sv
+
+=back
+
+=head2 B::HV METHODS
+
+=over 4
+
+=item FILL
+
+=item MAX
+
+=item KEYS
+
+=item RITER
+
+=item NAME
+
+=item PMROOT
+
+=item ARRAY
+
+=back
+
+=head2 OP-RELATED CLASSES
+
+B::OP, B::UNOP, B::BINOP, B::LOGOP, B::LISTOP, B::PMOP,
+B::SVOP, B::PADOP, B::PVOP, B::CVOP, B::LOOP, B::COP.
+These classes correspond in
+the obvious way to the underlying C structures of similar names. The
+inheritance hierarchy mimics the underlying C "inheritance". Access
+methods correspond to the underlying C structre field names, with the
+leading "class indication" prefix removed (op_).
+
+=head2 B::OP METHODS
+
+=over 4
+
+=item next
+
+=item sibling
+
+=item name
+
+This returns the op name as a string (e.g. "add", "rv2av").
+
+=item ppaddr
+
+This returns the function name as a string (e.g. "PL_ppaddr[OP_ADD]",
+"PL_ppaddr[OP_RV2AV]").
+
+=item desc
+
+This returns the op description from the global C PL_op_desc array
+(e.g. "addition" "array deref").
+
+=item targ
+
+=item type
+
+=item seq
+
+=item flags
+
+=item private
+
+=back
+
+=head2 B::UNOP METHOD
+
+=over 4
+
+=item first
+
+=back
+
+=head2 B::BINOP METHOD
+
+=over 4
+
+=item last
+
+=back
+
+=head2 B::LOGOP METHOD
+
+=over 4
+
+=item other
+
+=back
+
+=head2 B::LISTOP METHOD
+
+=over 4
+
+=item children
+
+=back
+
+=head2 B::PMOP METHODS
+
+=over 4
+
+=item pmreplroot
+
+=item pmreplstart
+
+=item pmnext
+
+=item pmregexp
+
+=item pmflags
+
+=item pmdynflags
+
+=item pmpermflags
+
+=item precomp
+
+=item pmoffet
+
+Only when perl was compiled with ithreads.
+
+=back
+
+=head2 B::SVOP METHOD
+
+=over 4
+
+=item sv
+
+=item gv
+
+=back
+
+=head2 B::PADOP METHOD
+
+=over 4
+
+=item padix
+
+=back
+
+=head2 B::PVOP METHOD
+
+=over 4
+
+=item pv
+
+=back
+
+=head2 B::LOOP METHODS
+
+=over 4
+
+=item redoop
+
+=item nextop
+
+=item lastop
+
+=back
+
+=head2 B::COP METHODS
+
+=over 4
+
+=item label
+
+=item stash
+
+=item file
+
+=item cop_seq
+
+=item arybase
+
+=item line
+
+=back
+
+=head1 FUNCTIONS EXPORTED BY C<B>
+
+The C<B> module exports a variety of functions: some are simple
+utility functions, others provide a Perl program with a way to
+get an initial "handle" on an internal object.
+
+=over 4
+
+=item main_cv
+
+Return the (faked) CV corresponding to the main part of the Perl
+program.
+
+=item init_av
+
+Returns the AV object (i.e. in class B::AV) representing INIT blocks.
+
+=item begin_av
+
+Returns the AV object (i.e. in class B::AV) representing BEGIN blocks.
+
+=item end_av
+
+Returns the AV object (i.e. in class B::AV) representing END blocks.
+
+=item main_root
+
+Returns the root op (i.e. an object in the appropriate B::OP-derived
+class) of the main part of the Perl program.
+
+=item main_start
+
+Returns the starting op of the main part of the Perl program.
+
+=item comppadlist
+
+Returns the AV object (i.e. in class B::AV) of the global comppadlist.
+
+=item regex_padav
+
+Only when perl was compiled with ithreads.
+
+=item sv_undef
+
+Returns the SV object corresponding to the C variable C<sv_undef>.
+
+=item sv_yes
+
+Returns the SV object corresponding to the C variable C<sv_yes>.
+
+=item sv_no
+
+Returns the SV object corresponding to the C variable C<sv_no>.
+
+=item amagic_generation
+
+Returns the SV object corresponding to the C variable C<amagic_generation>.
+
+=item walkoptree(OP, METHOD)
+
+Does a tree-walk of the syntax tree based at OP and calls METHOD on
+each op it visits. Each node is visited before its children. If
+C<walkoptree_debug> (q.v.) has been called to turn debugging on then
+the method C<walkoptree_debug> is called on each op before METHOD is
+called.
+
+=item walkoptree_debug(DEBUG)
+
+Returns the current debugging flag for C<walkoptree>. If the optional
+DEBUG argument is non-zero, it sets the debugging flag to that. See
+the description of C<walkoptree> above for what the debugging flag
+does.
+
+=item walksymtable(SYMREF, METHOD, RECURSE, PREFIX)
+
+Walk the symbol table starting at SYMREF and call METHOD on each
+symbol (a B::GV object) visited. When the walk reaches package
+symbols (such as "Foo::") it invokes RECURSE, passing in the symbol
+name, and only recurses into the package if that sub returns true.
+
+PREFIX is the name of the SYMREF you're walking.
+
+For example...
+
+ # Walk CGI's symbol table calling print_subs on each symbol.
+ # Only recurse into CGI::Util::
+ walksymtable(\%CGI::, 'print_subs', sub { $_[0] eq 'CGI::Util::' },
+ 'CGI::');
+
+print_subs() is a B::GV method you have declared.
+
+
+=item svref_2object(SV)
+
+Takes any Perl variable and turns it into an object in the
+appropriate B::OP-derived or B::SV-derived class. Apart from functions
+such as C<main_root>, this is the primary way to get an initial
+"handle" on an internal perl data structure which can then be followed
+with the other access methods.
+
+=item ppname(OPNUM)
+
+Return the PP function name (e.g. "pp_add") of op number OPNUM.
+
+=item hash(STR)
+
+Returns a string in the form "0x..." representing the value of the
+internal hash function used by perl on string STR.
+
+=item cast_I32(I)
+
+Casts I to the internal I32 type used by that perl.
+
+
+=item minus_c
+
+Does the equivalent of the C<-c> command-line option. Obviously, this
+is only useful in a BEGIN block or else the flag is set too late.
+
+
+=item cstring(STR)
+
+Returns a double-quote-surrounded escaped version of STR which can
+be used as a string in C source code.
+
+=item perlstring(STR)
+
+Returns a double-quote-surrounded escaped version of STR which can
+be used as a string in Perl source code.
+
+=item class(OBJ)
+
+Returns the class of an object without the part of the classname
+preceding the first "::". This is used to turn "B::UNOP" into
+"UNOP" for example.
+
+=item threadsv_names
+
+In a perl compiled for threads, this returns a list of the special
+per-thread threadsv variables.
+
+=back
+
+=head1 AUTHOR
+
+Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
+
+=cut
diff --git a/Master/xemtex/perl/lib/B/Deparse.pm b/Master/xemtex/perl/lib/B/Deparse.pm
new file mode 100644
index 00000000000..924f4366d66
--- /dev/null
+++ b/Master/xemtex/perl/lib/B/Deparse.pm
@@ -0,0 +1,4233 @@
+# B::Deparse.pm
+# Copyright (c) 1998, 1999, 2000 Stephen McCamant. All rights reserved.
+# This module is free software; you can redistribute and/or modify
+# it under the same terms as Perl itself.
+
+# This is based on the module of the same name by Malcolm Beattie,
+# but essentially none of his code remains.
+
+package B::Deparse;
+use Carp;
+use B qw(class main_root main_start main_cv svref_2object opnumber perlstring
+ OPf_WANT OPf_WANT_VOID OPf_WANT_SCALAR OPf_WANT_LIST
+ OPf_KIDS OPf_REF OPf_STACKED OPf_SPECIAL OPf_MOD
+ OPpLVAL_INTRO OPpOUR_INTRO OPpENTERSUB_AMPER OPpSLICE OPpCONST_BARE
+ OPpTRANS_SQUASH OPpTRANS_DELETE OPpTRANS_COMPLEMENT OPpTARGET_MY
+ OPpCONST_ARYBASE OPpEXISTS_SUB OPpSORT_NUMERIC OPpSORT_INTEGER
+ OPpSORT_REVERSE
+ SVf_IOK SVf_NOK SVf_ROK SVf_POK SVpad_OUR
+ CVf_METHOD CVf_LOCKED CVf_LVALUE
+ PMf_KEEP PMf_GLOBAL PMf_CONTINUE PMf_EVAL PMf_ONCE PMf_SKIPWHITE
+ PMf_MULTILINE PMf_SINGLELINE PMf_FOLD PMf_EXTENDED);
+$VERSION = 0.63;
+use strict;
+use vars qw/$AUTOLOAD/;
+use warnings ();
+
+# Changes between 0.50 and 0.51:
+# - fixed nulled leave with live enter in sort { }
+# - fixed reference constants (\"str")
+# - handle empty programs gracefully
+# - handle infinte loops (for (;;) {}, while (1) {})
+# - differentiate between `for my $x ...' and `my $x; for $x ...'
+# - various minor cleanups
+# - moved globals into an object
+# - added `-u', like B::C
+# - package declarations using cop_stash
+# - subs, formats and code sorted by cop_seq
+# Changes between 0.51 and 0.52:
+# - added pp_threadsv (special variables under USE_5005THREADS)
+# - added documentation
+# Changes between 0.52 and 0.53:
+# - many changes adding precedence contexts and associativity
+# - added `-p' and `-s' output style options
+# - various other minor fixes
+# Changes between 0.53 and 0.54:
+# - added support for new `for (1..100)' optimization,
+# thanks to Gisle Aas
+# Changes between 0.54 and 0.55:
+# - added support for new qr// construct
+# - added support for new pp_regcreset OP
+# Changes between 0.55 and 0.56:
+# - tested on base/*.t, cmd/*.t, comp/*.t, io/*.t
+# - fixed $# on non-lexicals broken in last big rewrite
+# - added temporary fix for change in opcode of OP_STRINGIFY
+# - fixed problem in 0.54's for() patch in `for (@ary)'
+# - fixed precedence in conditional of ?:
+# - tweaked list paren elimination in `my($x) = @_'
+# - made continue-block detection trickier wrt. null ops
+# - fixed various prototype problems in pp_entersub
+# - added support for sub prototypes that never get GVs
+# - added unquoting for special filehandle first arg in truncate
+# - print doubled rv2gv (a bug) as `*{*GV}' instead of illegal `**GV'
+# - added semicolons at the ends of blocks
+# - added -l `#line' declaration option -- fixes cmd/subval.t 27,28
+# Changes between 0.56 and 0.561:
+# - fixed multiply-declared my var in pp_truncate (thanks to Sarathy)
+# - used new B.pm symbolic constants (done by Nick Ing-Simmons)
+# Changes between 0.561 and 0.57:
+# - stylistic changes to symbolic constant stuff
+# - handled scope in s///e replacement code
+# - added unquote option for expanding "" into concats, etc.
+# - split method and proto parts of pp_entersub into separate functions
+# - various minor cleanups
+# Changes after 0.57:
+# - added parens in \&foo (patch by Albert Dvornik)
+# Changes between 0.57 and 0.58:
+# - fixed `0' statements that weren't being printed
+# - added methods for use from other programs
+# (based on patches from James Duncan and Hugo van der Sanden)
+# - added -si and -sT to control indenting (also based on a patch from Hugo)
+# - added -sv to print something else instead of '???'
+# - preliminary version of utf8 tr/// handling
+# Changes after 0.58:
+# - uses of $op->ppaddr changed to new $op->name (done by Sarathy)
+# - added support for Hugo's new OP_SETSTATE (like nextstate)
+# Changes between 0.58 and 0.59
+# - added support for Chip's OP_METHOD_NAMED
+# - added support for Ilya's OPpTARGET_MY optimization
+# - elided arrows before `()' subscripts when possible
+# Changes between 0.59 and 0.60
+# - support for method attribues was added
+# - some warnings fixed
+# - separate recognition of constant subs
+# - rewrote continue block handling, now recoginizing for loops
+# - added more control of expanding control structures
+# Changes between 0.60 and 0.61 (mostly by Robin Houston)
+# - many bug-fixes
+# - support for pragmas and 'use'
+# - support for the little-used $[ variable
+# - support for __DATA__ sections
+# - UTF8 support
+# - BEGIN, CHECK, INIT and END blocks
+# - scoping of subroutine declarations fixed
+# - compile-time output from the input program can be suppressed, so that the
+# output is just the deparsed code. (a change to O.pm in fact)
+# - our() declarations
+# - *all* the known bugs are now listed in the BUGS section
+# - comprehensive test mechanism (TEST -deparse)
+# Changes between 0.62 and 0.63 (mostly by Rafael Garcia-Suarez)
+# - bug-fixes
+# - new switch -P
+# - support for command-line switches (-l, -0, etc.)
+
+# Todo:
+# (See also BUGS section at the end of this file)
+#
+# - finish tr/// changes
+# - add option for even more parens (generalize \&foo change)
+# - left/right context
+# - treat top-level block specially for incremental output
+# - copy comments (look at real text with $^P?)
+# - avoid semis in one-statement blocks
+# - associativity of &&=, ||=, ?:
+# - ',' => '=>' (auto-unquote?)
+# - break long lines ("\r" as discretionary break?)
+# - configurable syntax highlighting: ANSI color, HTML, TeX, etc.
+# - more style options: brace style, hex vs. octal, quotes, ...
+# - print big ints as hex/octal instead of decimal (heuristic?)
+# - handle `my $x if 0'?
+# - coordinate with Data::Dumper (both directions? see previous)
+# - version using op_next instead of op_first/sibling?
+# - avoid string copies (pass arrays, one big join?)
+# - here-docs?
+
+# Tests that will always fail:
+# (see t/TEST for the short list)
+
+# Object fields (were globals):
+#
+# avoid_local:
+# (local($a), local($b)) and local($a, $b) have the same internal
+# representation but the short form looks better. We notice we can
+# use a large-scale local when checking the list, but need to prevent
+# individual locals too. This hash holds the addresses of OPs that
+# have already had their local-ness accounted for. The same thing
+# is done with my().
+#
+# curcv:
+# CV for current sub (or main program) being deparsed
+#
+# curcvlex:
+# Cached hash of lexical variables for curcv: keys are names,
+# each value is an array of pairs, indicating the cop_seq of scopes
+# in which a var of that name is valid.
+#
+# curcop:
+# COP for statement being deparsed
+#
+# curstash:
+# name of the current package for deparsed code
+#
+# subs_todo:
+# array of [cop_seq, CV, is_format?] for subs and formats we still
+# want to deparse
+#
+# protos_todo:
+# as above, but [name, prototype] for subs that never got a GV
+#
+# subs_done, forms_done:
+# keys are addresses of GVs for subs and formats we've already
+# deparsed (or at least put into subs_todo)
+#
+# subs_declared
+# keys are names of subs for which we've printed declarations.
+# That means we can omit parentheses from the arguments.
+#
+# subs_deparsed
+# Keeps track of fully qualified names of all deparsed subs.
+#
+# parens: -p
+# linenums: -l
+# unquote: -q
+# cuddle: ` ' or `\n', depending on -sC
+# indent_size: -si
+# use_tabs: -sT
+# ex_const: -sv
+
+# A little explanation of how precedence contexts and associativity
+# work:
+#
+# deparse() calls each per-op subroutine with an argument $cx (short
+# for context, but not the same as the cx* in the perl core), which is
+# a number describing the op's parents in terms of precedence, whether
+# they're inside an expression or at statement level, etc. (see
+# chart below). When ops with children call deparse on them, they pass
+# along their precedence. Fractional values are used to implement
+# associativity (`($x + $y) + $z' => `$x + $y + $y') and related
+# parentheses hacks. The major disadvantage of this scheme is that
+# it doesn't know about right sides and left sides, so say if you
+# assign a listop to a variable, it can't tell it's allowed to leave
+# the parens off the listop.
+
+# Precedences:
+# 26 [TODO] inside interpolation context ("")
+# 25 left terms and list operators (leftward)
+# 24 left ->
+# 23 nonassoc ++ --
+# 22 right **
+# 21 right ! ~ \ and unary + and -
+# 20 left =~ !~
+# 19 left * / % x
+# 18 left + - .
+# 17 left << >>
+# 16 nonassoc named unary operators
+# 15 nonassoc < > <= >= lt gt le ge
+# 14 nonassoc == != <=> eq ne cmp
+# 13 left &
+# 12 left | ^
+# 11 left &&
+# 10 left ||
+# 9 nonassoc .. ...
+# 8 right ?:
+# 7 right = += -= *= etc.
+# 6 left , =>
+# 5 nonassoc list operators (rightward)
+# 4 right not
+# 3 left and
+# 2 left or xor
+# 1 statement modifiers
+# 0 statement level
+
+# Also, lineseq may pass a fourth parameter to the pp_ routines:
+# if present, the fourth parameter is passed on by deparse.
+#
+# If present and true, it means that the op exists directly as
+# part of a lineseq. Currently it's only used by scopeop to
+# decide whether its results need to be enclosed in a do {} block.
+
+# Nonprinting characters with special meaning:
+# \cS - steal parens (see maybe_parens_unop)
+# \n - newline and indent
+# \t - increase indent
+# \b - decrease indent (`outdent')
+# \f - flush left (no indent)
+# \cK - kill following semicolon, if any
+
+sub null {
+ my $op = shift;
+ return class($op) eq "NULL";
+}
+
+sub todo {
+ my $self = shift;
+ my($cv, $is_form) = @_;
+ return unless ($cv->FILE eq $0 || exists $self->{files}{$cv->FILE});
+ my $seq;
+ if (!null($cv->START) and is_state($cv->START)) {
+ $seq = $cv->START->cop_seq;
+ } else {
+ $seq = 0;
+ }
+ push @{$self->{'subs_todo'}}, [$seq, $cv, $is_form];
+ unless ($is_form || class($cv->STASH) eq 'SPECIAL') {
+ $self->{'subs_deparsed'}{$cv->STASH->NAME."::".$cv->GV->NAME} = 1;
+ }
+}
+
+sub next_todo {
+ my $self = shift;
+ my $ent = shift @{$self->{'subs_todo'}};
+ my $cv = $ent->[1];
+ my $gv = $cv->GV;
+ my $name = $self->gv_name($gv);
+ if ($ent->[2]) {
+ return "format $name =\n"
+ . $self->deparse_format($ent->[1]). "\n";
+ } else {
+ $self->{'subs_declared'}{$name} = 1;
+ if ($name eq "BEGIN") {
+ my $use_dec = $self->begin_is_use($cv);
+ if (defined ($use_dec)) {
+ return () if 0 == length($use_dec);
+ return $use_dec;
+ }
+ }
+ my $l = '';
+ if ($self->{'linenums'}) {
+ my $line = $gv->LINE;
+ my $file = $gv->FILE;
+ $l = "\n\f#line $line \"$file\"\n";
+ }
+ return "${l}sub $name " . $self->deparse_sub($cv);
+ }
+}
+
+# Return a "use" declaration for this BEGIN block, if appropriate
+sub begin_is_use {
+ my ($self, $cv) = @_;
+ my $root = $cv->ROOT;
+ local @$self{qw'curcv curcvlex'} = ($cv);
+#require B::Debug;
+#B::walkoptree($cv->ROOT, "debug");
+ my $lineseq = $root->first;
+ return if $lineseq->name ne "lineseq";
+
+ my $req_op = $lineseq->first->sibling;
+ return if $req_op->name ne "require";
+
+ my $module;
+ if ($req_op->first->private & OPpCONST_BARE) {
+ # Actually it should always be a bareword
+ $module = $self->const_sv($req_op->first)->PV;
+ $module =~ s[/][::]g;
+ $module =~ s/.pm$//;
+ }
+ else {
+ $module = const($self->const_sv($req_op->first));
+ }
+
+ my $version;
+ my $version_op = $req_op->sibling;
+ return if class($version_op) eq "NULL";
+ if ($version_op->name eq "lineseq") {
+ # We have a version parameter; skip nextstate & pushmark
+ my $constop = $version_op->first->next->next;
+
+ return unless $self->const_sv($constop)->PV eq $module;
+ $constop = $constop->sibling;
+ $version = $self->const_sv($constop)->int_value;
+ $constop = $constop->sibling;
+ return if $constop->name ne "method_named";
+ return if $self->const_sv($constop)->PV ne "VERSION";
+ }
+
+ $lineseq = $version_op->sibling;
+ return if $lineseq->name ne "lineseq";
+ my $entersub = $lineseq->first->sibling;
+ if ($entersub->name eq "stub") {
+ return "use $module $version ();\n" if defined $version;
+ return "use $module ();\n";
+ }
+ return if $entersub->name ne "entersub";
+
+ # See if there are import arguments
+ my $args = '';
+
+ my $svop = $entersub->first->sibling; # Skip over pushmark
+ return unless $self->const_sv($svop)->PV eq $module;
+
+ # Pull out the arguments
+ for ($svop=$svop->sibling; $svop->name ne "method_named";
+ $svop = $svop->sibling) {
+ $args .= ", " if length($args);
+ $args .= $self->deparse($svop, 6);
+ }
+
+ my $use = 'use';
+ my $method_named = $svop;
+ return if $method_named->name ne "method_named";
+ my $method_name = $self->const_sv($method_named)->PV;
+
+ if ($method_name eq "unimport") {
+ $use = 'no';
+ }
+
+ # Certain pragmas are dealt with using hint bits,
+ # so we ignore them here
+ if ($module eq 'strict' || $module eq 'integer'
+ || $module eq 'bytes' || $module eq 'warnings') {
+ return "";
+ }
+
+ if (defined $version && length $args) {
+ return "$use $module $version ($args);\n";
+ } elsif (defined $version) {
+ return "$use $module $version;\n";
+ } elsif (length $args) {
+ return "$use $module ($args);\n";
+ } else {
+ return "$use $module;\n";
+ }
+}
+
+sub stash_subs {
+ my ($self, $pack) = @_;
+ my (@ret, $stash);
+ if (!defined $pack) {
+ $pack = '';
+ $stash = \%::;
+ }
+ else {
+ $pack =~ s/(::)?$/::/;
+ no strict 'refs';
+ $stash = \%$pack;
+ }
+ my %stash = svref_2object($stash)->ARRAY;
+ while (my ($key, $val) = each %stash) {
+ next if $key eq 'main::'; # avoid infinite recursion
+ my $class = class($val);
+ if ($class eq "PV") {
+ # Just a prototype. As an ugly but fairly effective way
+ # to find out if it belongs here is to see if the AUTOLOAD
+ # (if any) for the stash was defined in one of our files.
+ my $A = $stash{"AUTOLOAD"};
+ if (defined ($A) && class($A) eq "GV" && defined($A->CV)
+ && class($A->CV) eq "CV") {
+ my $AF = $A->FILE;
+ next unless $AF eq $0 || exists $self->{'files'}{$AF};
+ }
+ push @{$self->{'protos_todo'}}, [$pack . $key, $val->PV];
+ } elsif ($class eq "IV") {
+ # Just a name. As above.
+ my $A = $stash{"AUTOLOAD"};
+ if (defined ($A) && class($A) eq "GV" && defined($A->CV)
+ && class($A->CV) eq "CV") {
+ my $AF = $A->FILE;
+ next unless $AF eq $0 || exists $self->{'files'}{$AF};
+ }
+ push @{$self->{'protos_todo'}}, [$pack . $key, undef];
+ } elsif ($class eq "GV") {
+ if (class(my $cv = $val->CV) ne "SPECIAL") {
+ next if $self->{'subs_done'}{$$val}++;
+ next if $$val != ${$cv->GV}; # Ignore imposters
+ $self->todo($cv, 0);
+ }
+ if (class(my $cv = $val->FORM) ne "SPECIAL") {
+ next if $self->{'forms_done'}{$$val}++;
+ next if $$val != ${$cv->GV}; # Ignore imposters
+ $self->todo($cv, 1);
+ }
+ if (class($val->HV) ne "SPECIAL" && $key =~ /::$/) {
+ $self->stash_subs($pack . $key);
+ }
+ }
+ }
+}
+
+sub print_protos {
+ my $self = shift;
+ my $ar;
+ my @ret;
+ foreach $ar (@{$self->{'protos_todo'}}) {
+ my $proto = (defined $ar->[1] ? " (". $ar->[1] . ")" : "");
+ push @ret, "sub " . $ar->[0] . "$proto;\n";
+ }
+ delete $self->{'protos_todo'};
+ return @ret;
+}
+
+sub style_opts {
+ my $self = shift;
+ my $opts = shift;
+ my $opt;
+ while (length($opt = substr($opts, 0, 1))) {
+ if ($opt eq "C") {
+ $self->{'cuddle'} = " ";
+ $opts = substr($opts, 1);
+ } elsif ($opt eq "i") {
+ $opts =~ s/^i(\d+)//;
+ $self->{'indent_size'} = $1;
+ } elsif ($opt eq "T") {
+ $self->{'use_tabs'} = 1;
+ $opts = substr($opts, 1);
+ } elsif ($opt eq "v") {
+ $opts =~ s/^v([^.]*)(.|$)//;
+ $self->{'ex_const'} = $1;
+ }
+ }
+}
+
+sub new {
+ my $class = shift;
+ my $self = bless {}, $class;
+ $self->{'subs_todo'} = [];
+ $self->{'files'} = {};
+ $self->{'curstash'} = "main";
+ $self->{'curcop'} = undef;
+ $self->{'cuddle'} = "\n";
+ $self->{'indent_size'} = 4;
+ $self->{'use_tabs'} = 0;
+ $self->{'expand'} = 0;
+ $self->{'unquote'} = 0;
+ $self->{'linenums'} = 0;
+ $self->{'parens'} = 0;
+ $self->{'ex_const'} = "'???'";
+
+ $self->{'ambient_arybase'} = 0;
+ $self->{'ambient_warnings'} = undef; # Assume no lexical warnings
+ $self->{'ambient_hints'} = 0;
+ $self->init();
+
+ while (my $arg = shift @_) {
+ if ($arg =~ /^-f(.*)/) {
+ $self->{'files'}{$1} = 1;
+ } elsif ($arg eq "-p") {
+ $self->{'parens'} = 1;
+ } elsif ($arg eq "-P") {
+ $self->{'noproto'} = 1;
+ } elsif ($arg eq "-l") {
+ $self->{'linenums'} = 1;
+ } elsif ($arg eq "-q") {
+ $self->{'unquote'} = 1;
+ } elsif (substr($arg, 0, 2) eq "-s") {
+ $self->style_opts(substr $arg, 2);
+ } elsif ($arg =~ /^-x(\d)$/) {
+ $self->{'expand'} = $1;
+ }
+ }
+ return $self;
+}
+
+{
+ # Mask out the bits that L<warnings::register> uses
+ my $WARN_MASK;
+ BEGIN {
+ $WARN_MASK = $warnings::Bits{all} | $warnings::DeadBits{all};
+ }
+ sub WARN_MASK () {
+ return $WARN_MASK;
+ }
+}
+
+# Initialise the contextual information, either from
+# defaults provided with the ambient_pragmas method,
+# or from perl's own defaults otherwise.
+sub init {
+ my $self = shift;
+
+ $self->{'arybase'} = $self->{'ambient_arybase'};
+ $self->{'warnings'} = defined ($self->{'ambient_warnings'})
+ ? $self->{'ambient_warnings'} & WARN_MASK
+ : undef;
+ $self->{'hints'} = $self->{'ambient_hints'} & 0xFF;
+
+ # also a convenient place to clear out subs_declared
+ delete $self->{'subs_declared'};
+}
+
+sub compile {
+ my(@args) = @_;
+ return sub {
+ my $self = B::Deparse->new(@args);
+ # First deparse command-line args
+ if (defined $^I) { # deparse -i
+ print q(BEGIN { $^I = ).perlstring($^I).qq(; }\n);
+ }
+ if ($^W) { # deparse -w
+ print qq(BEGIN { \$^W = $^W; }\n);
+ }
+ if ($/ ne "\n" or defined $O::savebackslash) { # deparse -l and -0
+ my $fs = perlstring($/) || 'undef';
+ my $bs = perlstring($O::savebackslash) || 'undef';
+ print qq(BEGIN { \$/ = $fs; \$\\ = $bs; }\n);
+ }
+ my @BEGINs = B::begin_av->isa("B::AV") ? B::begin_av->ARRAY : ();
+ my @INITs = B::init_av->isa("B::AV") ? B::init_av->ARRAY : ();
+ my @ENDs = B::end_av->isa("B::AV") ? B::end_av->ARRAY : ();
+ for my $block (@BEGINs, @INITs, @ENDs) {
+ $self->todo($block, 0);
+ }
+ $self->stash_subs();
+ $self->{'curcv'} = main_cv;
+ $self->{'curcvlex'} = undef;
+ print $self->print_protos;
+ @{$self->{'subs_todo'}} =
+ sort {$a->[0] <=> $b->[0]} @{$self->{'subs_todo'}};
+ print $self->indent($self->deparse(main_root, 0)), "\n"
+ unless null main_root;
+ my @text;
+ while (scalar(@{$self->{'subs_todo'}})) {
+ push @text, $self->next_todo;
+ }
+ print $self->indent(join("", @text)), "\n" if @text;
+
+ # Print __DATA__ section, if necessary
+ no strict 'refs';
+ my $laststash = defined $self->{'curcop'}
+ ? $self->{'curcop'}->stash->NAME : $self->{'curstash'};
+ if (defined *{$laststash."::DATA"}{IO}) {
+ print "__DATA__\n";
+ print readline(*{$laststash."::DATA"});
+ }
+ }
+}
+
+sub coderef2text {
+ my $self = shift;
+ my $sub = shift;
+ croak "Usage: ->coderef2text(CODEREF)" unless UNIVERSAL::isa($sub, "CODE");
+
+ $self->init();
+ return $self->indent($self->deparse_sub(svref_2object($sub)));
+}
+
+sub ambient_pragmas {
+ my $self = shift;
+ my ($arybase, $hint_bits, $warning_bits) = (0, 0);
+
+ while (@_ > 1) {
+ my $name = shift();
+ my $val = shift();
+
+ if ($name eq 'strict') {
+ require strict;
+
+ if ($val eq 'none') {
+ $hint_bits &= ~strict::bits(qw/refs subs vars/);
+ next();
+ }
+
+ my @names;
+ if ($val eq "all") {
+ @names = qw/refs subs vars/;
+ }
+ elsif (ref $val) {
+ @names = @$val;
+ }
+ else {
+ @names = split' ', $val;
+ }
+ $hint_bits |= strict::bits(@names);
+ }
+
+ elsif ($name eq '$[') {
+ $arybase = $val;
+ }
+
+ elsif ($name eq 'integer'
+ || $name eq 'bytes'
+ || $name eq 'utf8') {
+ require "$name.pm";
+ if ($val) {
+ $hint_bits |= ${$::{"${name}::"}{"hint_bits"}};
+ }
+ else {
+ $hint_bits &= ~${$::{"${name}::"}{"hint_bits"}};
+ }
+ }
+
+ elsif ($name eq 're') {
+ require re;
+ if ($val eq 'none') {
+ $hint_bits &= ~re::bits(qw/taint eval/);
+ next();
+ }
+
+ my @names;
+ if ($val eq 'all') {
+ @names = qw/taint eval/;
+ }
+ elsif (ref $val) {
+ @names = @$val;
+ }
+ else {
+ @names = split' ',$val;
+ }
+ $hint_bits |= re::bits(@names);
+ }
+
+ elsif ($name eq 'warnings') {
+ if ($val eq 'none') {
+ $warning_bits = $warnings::NONE;
+ next();
+ }
+
+ my @names;
+ if (ref $val) {
+ @names = @$val;
+ }
+ else {
+ @names = split/\s+/, $val;
+ }
+
+ $warning_bits = $warnings::NONE if !defined ($warning_bits);
+ $warning_bits |= warnings::bits(@names);
+ }
+
+ elsif ($name eq 'warning_bits') {
+ $warning_bits = $val;
+ }
+
+ elsif ($name eq 'hint_bits') {
+ $hint_bits = $val;
+ }
+
+ else {
+ croak "Unknown pragma type: $name";
+ }
+ }
+ if (@_) {
+ croak "The ambient_pragmas method expects an even number of args";
+ }
+
+ $self->{'ambient_arybase'} = $arybase;
+ $self->{'ambient_warnings'} = $warning_bits;
+ $self->{'ambient_hints'} = $hint_bits;
+}
+
+sub deparse {
+ my $self = shift;
+ my($op, $cx, $flags) = @_;
+
+ Carp::confess("Null op in deparse") if !defined($op)
+ || class($op) eq "NULL";
+ my $meth = "pp_" . $op->name;
+ if (is_scope($op)) {
+ return $self->$meth($op, $cx, $flags);
+ }
+ return $self->$meth($op, $cx);
+}
+
+sub indent {
+ my $self = shift;
+ my $txt = shift;
+ my @lines = split(/\n/, $txt);
+ my $leader = "";
+ my $level = 0;
+ my $line;
+ for $line (@lines) {
+ my $cmd = substr($line, 0, 1);
+ if ($cmd eq "\t" or $cmd eq "\b") {
+ $level += ($cmd eq "\t" ? 1 : -1) * $self->{'indent_size'};
+ if ($self->{'use_tabs'}) {
+ $leader = "\t" x ($level / 8) . " " x ($level % 8);
+ } else {
+ $leader = " " x $level;
+ }
+ $line = substr($line, 1);
+ }
+ if (substr($line, 0, 1) eq "\f") {
+ $line = substr($line, 1); # no indent
+ } else {
+ $line = $leader . $line;
+ }
+ $line =~ s/\cK;?//g;
+ }
+ return join("\n", @lines);
+}
+
+sub deparse_sub {
+ my $self = shift;
+ my $cv = shift;
+ my $proto = "";
+Carp::confess("NULL in deparse_sub") if !defined($cv) || $cv->isa("B::NULL");
+Carp::confess("SPECIAL in deparse_sub") if $cv->isa("B::SPECIAL");
+ local $self->{'curcop'} = $self->{'curcop'};
+ if ($cv->FLAGS & SVf_POK) {
+ $proto = "(". $cv->PV . ") ";
+ }
+ if ($cv->CvFLAGS & (CVf_METHOD|CVf_LOCKED|CVf_LVALUE)) {
+ $proto .= ": ";
+ $proto .= "lvalue " if $cv->CvFLAGS & CVf_LVALUE;
+ $proto .= "locked " if $cv->CvFLAGS & CVf_LOCKED;
+ $proto .= "method " if $cv->CvFLAGS & CVf_METHOD;
+ }
+
+ local($self->{'curcv'}) = $cv;
+ local($self->{'curcvlex'});
+ local(@$self{qw'curstash warnings hints'})
+ = @$self{qw'curstash warnings hints'};
+ my $body;
+ if (not null $cv->ROOT) {
+ my $lineseq = $cv->ROOT->first;
+ if ($lineseq->name eq "lineseq") {
+ my @ops;
+ for(my$o=$lineseq->first; $$o; $o=$o->sibling) {
+ push @ops, $o;
+ }
+ $body = $self->lineseq(undef, @ops).";";
+ my $scope_en = $self->find_scope_en($lineseq);
+ if (defined $scope_en) {
+ my $subs = join"", $self->seq_subs($scope_en);
+ $body .= ";\n$subs" if length($subs);
+ }
+ }
+ else {
+ $body = $self->deparse($cv->ROOT->first, 0);
+ }
+ }
+ else {
+ my $sv = $cv->const_sv;
+ if ($$sv) {
+ # uh-oh. inlinable sub... format it differently
+ return $proto . "{ " . const($sv) . " }\n";
+ } else { # XSUB? (or just a declaration)
+ return "$proto;\n";
+ }
+ }
+ return $proto ."{\n\t$body\n\b}" ."\n";
+}
+
+sub deparse_format {
+ my $self = shift;
+ my $form = shift;
+ my @text;
+ local($self->{'curcv'}) = $form;
+ local($self->{'curcvlex'});
+ local($self->{'in_format'}) = 1;
+ local(@$self{qw'curstash warnings hints'})
+ = @$self{qw'curstash warnings hints'};
+ my $op = $form->ROOT;
+ my $kid;
+ return "\f." if $op->first->name eq 'stub'
+ || $op->first->name eq 'nextstate';
+ $op = $op->first->first; # skip leavewrite, lineseq
+ while (not null $op) {
+ $op = $op->sibling; # skip nextstate
+ my @exprs;
+ $kid = $op->first->sibling; # skip pushmark
+ push @text, "\f".$self->const_sv($kid)->PV;
+ $kid = $kid->sibling;
+ for (; not null $kid; $kid = $kid->sibling) {
+ push @exprs, $self->deparse($kid, 0);
+ }
+ push @text, "\f".join(", ", @exprs)."\n" if @exprs;
+ $op = $op->sibling;
+ }
+ return join("", @text) . "\f.";
+}
+
+sub is_scope {
+ my $op = shift;
+ return $op->name eq "leave" || $op->name eq "scope"
+ || $op->name eq "lineseq"
+ || ($op->name eq "null" && class($op) eq "UNOP"
+ && (is_scope($op->first) || $op->first->name eq "enter"));
+}
+
+sub is_state {
+ my $name = $_[0]->name;
+ return $name eq "nextstate" || $name eq "dbstate" || $name eq "setstate";
+}
+
+sub is_miniwhile { # check for one-line loop (`foo() while $y--')
+ my $op = shift;
+ return (!null($op) and null($op->sibling)
+ and $op->name eq "null" and class($op) eq "UNOP"
+ and (($op->first->name =~ /^(and|or)$/
+ and $op->first->first->sibling->name eq "lineseq")
+ or ($op->first->name eq "lineseq"
+ and not null $op->first->first->sibling
+ and $op->first->first->sibling->name eq "unstack")
+ ));
+}
+
+sub is_scalar {
+ my $op = shift;
+ return ($op->name eq "rv2sv" or
+ $op->name eq "padsv" or
+ $op->name eq "gv" or # only in array/hash constructs
+ $op->flags & OPf_KIDS && !null($op->first)
+ && $op->first->name eq "gvsv");
+}
+
+sub maybe_parens {
+ my $self = shift;
+ my($text, $cx, $prec) = @_;
+ if ($prec < $cx # unary ops nest just fine
+ or $prec == $cx and $cx != 4 and $cx != 16 and $cx != 21
+ or $self->{'parens'})
+ {
+ $text = "($text)";
+ # In a unop, let parent reuse our parens; see maybe_parens_unop
+ $text = "\cS" . $text if $cx == 16;
+ return $text;
+ } else {
+ return $text;
+ }
+}
+
+# same as above, but get around the `if it looks like a function' rule
+sub maybe_parens_unop {
+ my $self = shift;
+ my($name, $kid, $cx) = @_;
+ if ($cx > 16 or $self->{'parens'}) {
+ $kid = $self->deparse($kid, 1);
+ if ($name eq "umask" && $kid =~ /^\d+$/) {
+ $kid = sprintf("%#o", $kid);
+ }
+ return "$name($kid)";
+ } else {
+ $kid = $self->deparse($kid, 16);
+ if ($name eq "umask" && $kid =~ /^\d+$/) {
+ $kid = sprintf("%#o", $kid);
+ }
+ if (substr($kid, 0, 1) eq "\cS") {
+ # use kid's parens
+ return $name . substr($kid, 1);
+ } elsif (substr($kid, 0, 1) eq "(") {
+ # avoid looks-like-a-function trap with extra parens
+ # (`+' can lead to ambiguities)
+ return "$name(" . $kid . ")";
+ } else {
+ return "$name $kid";
+ }
+ }
+}
+
+sub maybe_parens_func {
+ my $self = shift;
+ my($func, $text, $cx, $prec) = @_;
+ if ($prec <= $cx or substr($text, 0, 1) eq "(" or $self->{'parens'}) {
+ return "$func($text)";
+ } else {
+ return "$func $text";
+ }
+}
+
+sub maybe_local {
+ my $self = shift;
+ my($op, $cx, $text) = @_;
+ my $our_intro = ($op->name =~ /^(gv|rv2)[ash]v$/) ? OPpOUR_INTRO : 0;
+ if ($op->private & (OPpLVAL_INTRO|$our_intro)
+ and not $self->{'avoid_local'}{$$op}) {
+ my $our_local = ($op->private & OPpLVAL_INTRO) ? "local" : "our";
+ if (want_scalar($op)) {
+ return "$our_local $text";
+ } else {
+ return $self->maybe_parens_func("$our_local", $text, $cx, 16);
+ }
+ } else {
+ return $text;
+ }
+}
+
+sub maybe_targmy {
+ my $self = shift;
+ my($op, $cx, $func, @args) = @_;
+ if ($op->private & OPpTARGET_MY) {
+ my $var = $self->padname($op->targ);
+ my $val = $func->($self, $op, 7, @args);
+ return $self->maybe_parens("$var = $val", $cx, 7);
+ } else {
+ return $func->($self, $op, $cx, @args);
+ }
+}
+
+sub padname_sv {
+ my $self = shift;
+ my $targ = shift;
+ return (($self->{'curcv'}->PADLIST->ARRAY)[0]->ARRAY)[$targ];
+}
+
+sub maybe_my {
+ my $self = shift;
+ my($op, $cx, $text) = @_;
+ if ($op->private & OPpLVAL_INTRO and not $self->{'avoid_local'}{$$op}) {
+ if (want_scalar($op)) {
+ return "my $text";
+ } else {
+ return $self->maybe_parens_func("my", $text, $cx, 16);
+ }
+ } else {
+ return $text;
+ }
+}
+
+# The following OPs don't have functions:
+
+# pp_padany -- does not exist after parsing
+
+sub AUTOLOAD {
+ if ($AUTOLOAD =~ s/^.*::pp_//) {
+ warn "unexpected OP_".uc $AUTOLOAD;
+ return "XXX";
+ } else {
+ die "Undefined subroutine $AUTOLOAD called";
+ }
+}
+
+sub DESTROY {} # Do not AUTOLOAD
+
+# $root should be the op which represents the root of whatever
+# we're sequencing here. If it's undefined, then we don't append
+# any subroutine declarations to the deparsed ops, otherwise we
+# append appropriate declarations.
+sub lineseq {
+ my($self, $root, @ops) = @_;
+ my($expr, @exprs);
+
+ my $out_cop = $self->{'curcop'};
+ my $out_seq = defined($out_cop) ? $out_cop->cop_seq : undef;
+ my $limit_seq;
+ if (defined $root) {
+ $limit_seq = $out_seq;
+ my $nseq = $self->find_scope_st($root->sibling) if ${$root->sibling};
+ $limit_seq = $nseq if !defined($limit_seq)
+ or defined($nseq) && $nseq < $limit_seq;
+ }
+ $limit_seq = $self->{'limit_seq'}
+ if defined($self->{'limit_seq'})
+ && (!defined($limit_seq) || $self->{'limit_seq'} < $limit_seq);
+ local $self->{'limit_seq'} = $limit_seq;
+ for (my $i = 0; $i < @ops; $i++) {
+ $expr = "";
+ if (is_state $ops[$i]) {
+ $expr = $self->deparse($ops[$i], 0);
+ $i++;
+ if ($i > $#ops) {
+ push @exprs, $expr;
+ last;
+ }
+ }
+ if (!is_state $ops[$i] and (my $ls = $ops[$i+1]) and
+ !null($ops[$i+1]) and $ops[$i+1]->name eq "lineseq")
+ {
+ if ($ls->first && !null($ls->first) && is_state($ls->first)
+ && (my $sib = $ls->first->sibling)) {
+ if (!null($sib) && $sib->name eq "leaveloop") {
+ push @exprs, $expr . $self->for_loop($ops[$i], 0);
+ $i++;
+ next;
+ }
+ }
+ }
+ $expr .= $self->deparse($ops[$i], 0, (@ops != 1));
+ $expr =~ s/;\n?\z//;
+ push @exprs, $expr;
+ }
+ my $body = join(";\n", grep {length} @exprs);
+ my $subs = "";
+ if (defined $root && defined $limit_seq && !$self->{'in_format'}) {
+ $subs = join "\n", $self->seq_subs($limit_seq);
+ }
+ return join(";\n", grep {length} $body, $subs);
+}
+
+sub scopeop {
+ my($real_block, $self, $op, $cx, $flags) = @_;
+ my $kid;
+ my @kids;
+
+ local(@$self{qw'curstash warnings hints'})
+ = @$self{qw'curstash warnings hints'} if $real_block;
+ if ($real_block) {
+ $kid = $op->first->sibling; # skip enter
+ if (is_miniwhile($kid)) {
+ my $top = $kid->first;
+ my $name = $top->name;
+ if ($name eq "and") {
+ $name = "while";
+ } elsif ($name eq "or") {
+ $name = "until";
+ } else { # no conditional -> while 1 or until 0
+ return $self->deparse($top->first, 1) . " while 1";
+ }
+ my $cond = $top->first;
+ my $body = $cond->sibling->first; # skip lineseq
+ $cond = $self->deparse($cond, 1);
+ $body = $self->deparse($body, 1);
+ return "$body $name $cond";
+ }
+ } else {
+ $kid = $op->first;
+ }
+ for (; !null($kid); $kid = $kid->sibling) {
+ push @kids, $kid;
+ }
+ if ($flags || $cx > 0) { # inside an expression, (a do {} while for lineseq)
+ return "do {\n\t" . $self->lineseq($op, @kids) . "\n\b}";
+ } else {
+ my $lineseq = $self->lineseq($op, @kids);
+ return (length ($lineseq) ? "$lineseq;" : "");
+ }
+}
+
+sub pp_scope { scopeop(0, @_); }
+sub pp_lineseq { scopeop(0, @_); }
+sub pp_leave { scopeop(1, @_); }
+
+# The BEGIN {} is used here because otherwise this code isn't executed
+# when you run B::Deparse on itself.
+my %globalnames;
+BEGIN { map($globalnames{$_}++, "SIG", "STDIN", "STDOUT", "STDERR", "INC",
+ "ENV", "ARGV", "ARGVOUT", "_"); }
+
+sub gv_name {
+ my $self = shift;
+ my $gv = shift;
+Carp::confess() if $gv->isa("B::CV");
+ my $stash = $gv->STASH->NAME;
+ my $name = $gv->SAFENAME;
+ if (($stash eq 'main' && $globalnames{$name})
+ or ($stash eq $self->{'curstash'} && !$globalnames{$name})
+ or $name =~ /^[^A-Za-z_]/)
+ {
+ $stash = "";
+ } else {
+ $stash = $stash . "::";
+ }
+ if ($name =~ /^(\^..|{)/) {
+ $name = "{$name}"; # ${^WARNING_BITS}, etc and ${
+ }
+ return $stash . $name;
+}
+
+# Return the name to use for a stash variable.
+# If a lexical with the same name is in scope, it may need to be
+# fully-qualified.
+sub stash_variable {
+ my ($self, $prefix, $name) = @_;
+
+ return "$prefix$name" if $name =~ /::/;
+
+ unless ($prefix eq '$' || $prefix eq '@' ||
+ $prefix eq '%' || $prefix eq '$#') {
+ return "$prefix$name";
+ }
+
+ my $v = ($prefix eq '$#' ? '@' : $prefix) . $name;
+ return $prefix .$self->{'curstash'}.'::'. $name if $self->lex_in_scope($v);
+ return "$prefix$name";
+}
+
+sub lex_in_scope {
+ my ($self, $name) = @_;
+ $self->populate_curcvlex() if !defined $self->{'curcvlex'};
+
+ return 0 if !defined($self->{'curcop'});
+ my $seq = $self->{'curcop'}->cop_seq;
+ return 0 if !exists $self->{'curcvlex'}{$name};
+ for my $a (@{$self->{'curcvlex'}{$name}}) {
+ my ($st, $en) = @$a;
+ return 1 if $seq > $st && $seq <= $en;
+ }
+ return 0;
+}
+
+sub populate_curcvlex {
+ my $self = shift;
+ for (my $cv = $self->{'curcv'}; class($cv) eq "CV"; $cv = $cv->OUTSIDE) {
+ my @padlist = $cv->PADLIST->ARRAY;
+ my @ns = $padlist[0]->ARRAY;
+
+ for (my $i=0; $i<@ns; ++$i) {
+ next if class($ns[$i]) eq "SPECIAL";
+ next if $ns[$i]->FLAGS & SVpad_OUR; # Skip "our" vars
+ if (class($ns[$i]) eq "PV") {
+ # Probably that pesky lexical @_
+ next;
+ }
+ my $name = $ns[$i]->PVX;
+ my $seq_st = $ns[$i]->NVX;
+ my $seq_en = int($ns[$i]->IVX);
+
+ push @{$self->{'curcvlex'}{$name}}, [$seq_st, $seq_en];
+ }
+ }
+}
+
+sub find_scope_st { ((find_scope(@_))[0]); }
+sub find_scope_en { ((find_scope(@_))[1]); }
+
+# Recurses down the tree, looking for pad variable introductions and COPs
+sub find_scope {
+ my ($self, $op, $scope_st, $scope_en) = @_;
+ carp("Undefined op in find_scope") if !defined $op;
+ return ($scope_st, $scope_en) unless $op->flags & OPf_KIDS;
+
+ for (my $o=$op->first; $$o; $o=$o->sibling) {
+ if ($o->name =~ /^pad.v$/ && $o->private & OPpLVAL_INTRO) {
+ my $s = int($self->padname_sv($o->targ)->NVX);
+ my $e = $self->padname_sv($o->targ)->IVX;
+ $scope_st = $s if !defined($scope_st) || $s < $scope_st;
+ $scope_en = $e if !defined($scope_en) || $e > $scope_en;
+ }
+ elsif (is_state($o)) {
+ my $c = $o->cop_seq;
+ $scope_st = $c if !defined($scope_st) || $c < $scope_st;
+ $scope_en = $c if !defined($scope_en) || $c > $scope_en;
+ }
+ elsif ($o->flags & OPf_KIDS) {
+ ($scope_st, $scope_en) =
+ $self->find_scope($o, $scope_st, $scope_en)
+ }
+ }
+
+ return ($scope_st, $scope_en);
+}
+
+# Returns a list of subs which should be inserted before the COP
+sub cop_subs {
+ my ($self, $op, $out_seq) = @_;
+ my $seq = $op->cop_seq;
+ # If we have nephews, then our sequence number indicates
+ # the cop_seq of the end of some sort of scope.
+ if (class($op->sibling) ne "NULL" && $op->sibling->flags & OPf_KIDS
+ and my $nseq = $self->find_scope_st($op->sibling) ) {
+ $seq = $nseq;
+ }
+ $seq = $out_seq if defined($out_seq) && $out_seq < $seq;
+ return $self->seq_subs($seq);
+}
+
+sub seq_subs {
+ my ($self, $seq) = @_;
+ my @text;
+#push @text, "# ($seq)\n";
+
+ return "" if !defined $seq;
+ while (scalar(@{$self->{'subs_todo'}})
+ and $seq > $self->{'subs_todo'}[0][0]) {
+ push @text, $self->next_todo;
+ }
+ return @text;
+}
+
+# Notice how subs and formats are inserted between statements here;
+# also $[ assignments and pragmas.
+sub pp_nextstate {
+ my $self = shift;
+ my($op, $cx) = @_;
+ $self->{'curcop'} = $op;
+ my @text;
+ push @text, $self->cop_subs($op);
+ push @text, $op->label . ": " if $op->label;
+ my $stash = $op->stashpv;
+ if ($stash ne $self->{'curstash'}) {
+ push @text, "package $stash;\n";
+ $self->{'curstash'} = $stash;
+ }
+ if ($self->{'linenums'}) {
+ push @text, "\f#line " . $op->line .
+ ' "' . $op->file, qq'"\n';
+ }
+
+ if ($self->{'arybase'} != $op->arybase) {
+ push @text, '$[ = '. $op->arybase .";\n";
+ $self->{'arybase'} = $op->arybase;
+ }
+
+ my $warnings = $op->warnings;
+ my $warning_bits;
+ if ($warnings->isa("B::SPECIAL") && $$warnings == 4) {
+ $warning_bits = $warnings::Bits{"all"} & WARN_MASK;
+ }
+ elsif ($warnings->isa("B::SPECIAL") && $$warnings == 5) {
+ $warning_bits = $warnings::NONE;
+ }
+ elsif ($warnings->isa("B::SPECIAL")) {
+ $warning_bits = undef;
+ }
+ else {
+ $warning_bits = $warnings->PV & WARN_MASK;
+ }
+
+ if (defined ($warning_bits) and
+ !defined($self->{warnings}) || $self->{'warnings'} ne $warning_bits) {
+ push @text, declare_warnings($self->{'warnings'}, $warning_bits);
+ $self->{'warnings'} = $warning_bits;
+ }
+
+ if ($self->{'hints'} != $op->private) {
+ push @text, declare_hints($self->{'hints'}, $op->private);
+ $self->{'hints'} = $op->private;
+ }
+
+ return join("", @text);
+}
+
+sub declare_warnings {
+ my ($from, $to) = @_;
+ if (($to & WARN_MASK) eq warnings::bits("all")) {
+ return "use warnings;\n";
+ }
+ elsif (($to & WARN_MASK) eq "\0"x length($to)) {
+ return "no warnings;\n";
+ }
+ return "BEGIN {\${^WARNING_BITS} = ".perlstring($to)."}\n";
+}
+
+sub declare_hints {
+ my ($from, $to) = @_;
+ my $use = $to & ~$from;
+ my $no = $from & ~$to;
+ my $decls = "";
+ for my $pragma (hint_pragmas($use)) {
+ $decls .= "use $pragma;\n";
+ }
+ for my $pragma (hint_pragmas($no)) {
+ $decls .= "no $pragma;\n";
+ }
+ return $decls;
+}
+
+sub hint_pragmas {
+ my ($bits) = @_;
+ my @pragmas;
+ push @pragmas, "integer" if $bits & 0x1;
+ push @pragmas, "strict 'refs'" if $bits & 0x2;
+ push @pragmas, "bytes" if $bits & 0x8;
+ return @pragmas;
+}
+
+sub pp_dbstate { pp_nextstate(@_) }
+sub pp_setstate { pp_nextstate(@_) }
+
+sub pp_unstack { return "" } # see also leaveloop
+
+sub baseop {
+ my $self = shift;
+ my($op, $cx, $name) = @_;
+ return $name;
+}
+
+sub pp_stub {
+ my $self = shift;
+ my($op, $cx, $name) = @_;
+ if ($cx) {
+ return "()";
+ }
+ else {
+ return "();";
+ }
+}
+sub pp_wantarray { baseop(@_, "wantarray") }
+sub pp_fork { baseop(@_, "fork") }
+sub pp_wait { maybe_targmy(@_, \&baseop, "wait") }
+sub pp_getppid { maybe_targmy(@_, \&baseop, "getppid") }
+sub pp_time { maybe_targmy(@_, \&baseop, "time") }
+sub pp_tms { baseop(@_, "times") }
+sub pp_ghostent { baseop(@_, "gethostent") }
+sub pp_gnetent { baseop(@_, "getnetent") }
+sub pp_gprotoent { baseop(@_, "getprotoent") }
+sub pp_gservent { baseop(@_, "getservent") }
+sub pp_ehostent { baseop(@_, "endhostent") }
+sub pp_enetent { baseop(@_, "endnetent") }
+sub pp_eprotoent { baseop(@_, "endprotoent") }
+sub pp_eservent { baseop(@_, "endservent") }
+sub pp_gpwent { baseop(@_, "getpwent") }
+sub pp_spwent { baseop(@_, "setpwent") }
+sub pp_epwent { baseop(@_, "endpwent") }
+sub pp_ggrent { baseop(@_, "getgrent") }
+sub pp_sgrent { baseop(@_, "setgrent") }
+sub pp_egrent { baseop(@_, "endgrent") }
+sub pp_getlogin { baseop(@_, "getlogin") }
+
+sub POSTFIX () { 1 }
+
+# I couldn't think of a good short name, but this is the category of
+# symbolic unary operators with interesting precedence
+
+sub pfixop {
+ my $self = shift;
+ my($op, $cx, $name, $prec, $flags) = (@_, 0);
+ my $kid = $op->first;
+ $kid = $self->deparse($kid, $prec);
+ return $self->maybe_parens(($flags & POSTFIX) ? "$kid$name" : "$name$kid",
+ $cx, $prec);
+}
+
+sub pp_preinc { pfixop(@_, "++", 23) }
+sub pp_predec { pfixop(@_, "--", 23) }
+sub pp_postinc { maybe_targmy(@_, \&pfixop, "++", 23, POSTFIX) }
+sub pp_postdec { maybe_targmy(@_, \&pfixop, "--", 23, POSTFIX) }
+sub pp_i_preinc { pfixop(@_, "++", 23) }
+sub pp_i_predec { pfixop(@_, "--", 23) }
+sub pp_i_postinc { maybe_targmy(@_, \&pfixop, "++", 23, POSTFIX) }
+sub pp_i_postdec { maybe_targmy(@_, \&pfixop, "--", 23, POSTFIX) }
+sub pp_complement { maybe_targmy(@_, \&pfixop, "~", 21) }
+
+sub pp_negate { maybe_targmy(@_, \&real_negate) }
+sub real_negate {
+ my $self = shift;
+ my($op, $cx) = @_;
+ if ($op->first->name =~ /^(i_)?negate$/) {
+ # avoid --$x
+ $self->pfixop($op, $cx, "-", 21.5);
+ } else {
+ $self->pfixop($op, $cx, "-", 21);
+ }
+}
+sub pp_i_negate { pp_negate(@_) }
+
+sub pp_not {
+ my $self = shift;
+ my($op, $cx) = @_;
+ if ($cx <= 4) {
+ $self->pfixop($op, $cx, "not ", 4);
+ } else {
+ $self->pfixop($op, $cx, "!", 21);
+ }
+}
+
+sub unop {
+ my $self = shift;
+ my($op, $cx, $name) = @_;
+ my $kid;
+ if ($op->flags & OPf_KIDS) {
+ $kid = $op->first;
+ if (defined prototype("CORE::$name")
+ && prototype("CORE::$name") =~ /^;?\*/
+ && $kid->name eq "rv2gv") {
+ $kid = $kid->first;
+ }
+
+ return $self->maybe_parens_unop($name, $kid, $cx);
+ } else {
+ return $name . ($op->flags & OPf_SPECIAL ? "()" : "");
+ }
+}
+
+sub pp_chop { maybe_targmy(@_, \&unop, "chop") }
+sub pp_chomp { maybe_targmy(@_, \&unop, "chomp") }
+sub pp_schop { maybe_targmy(@_, \&unop, "chop") }
+sub pp_schomp { maybe_targmy(@_, \&unop, "chomp") }
+sub pp_defined { unop(@_, "defined") }
+sub pp_undef { unop(@_, "undef") }
+sub pp_study { unop(@_, "study") }
+sub pp_ref { unop(@_, "ref") }
+sub pp_pos { maybe_local(@_, unop(@_, "pos")) }
+
+sub pp_sin { maybe_targmy(@_, \&unop, "sin") }
+sub pp_cos { maybe_targmy(@_, \&unop, "cos") }
+sub pp_rand { maybe_targmy(@_, \&unop, "rand") }
+sub pp_srand { unop(@_, "srand") }
+sub pp_exp { maybe_targmy(@_, \&unop, "exp") }
+sub pp_log { maybe_targmy(@_, \&unop, "log") }
+sub pp_sqrt { maybe_targmy(@_, \&unop, "sqrt") }
+sub pp_int { maybe_targmy(@_, \&unop, "int") }
+sub pp_hex { maybe_targmy(@_, \&unop, "hex") }
+sub pp_oct { maybe_targmy(@_, \&unop, "oct") }
+sub pp_abs { maybe_targmy(@_, \&unop, "abs") }
+
+sub pp_length { maybe_targmy(@_, \&unop, "length") }
+sub pp_ord { maybe_targmy(@_, \&unop, "ord") }
+sub pp_chr { maybe_targmy(@_, \&unop, "chr") }
+
+sub pp_each { unop(@_, "each") }
+sub pp_values { unop(@_, "values") }
+sub pp_keys { unop(@_, "keys") }
+sub pp_pop { unop(@_, "pop") }
+sub pp_shift { unop(@_, "shift") }
+
+sub pp_caller { unop(@_, "caller") }
+sub pp_reset { unop(@_, "reset") }
+sub pp_exit { unop(@_, "exit") }
+sub pp_prototype { unop(@_, "prototype") }
+
+sub pp_close { unop(@_, "close") }
+sub pp_fileno { unop(@_, "fileno") }
+sub pp_umask { unop(@_, "umask") }
+sub pp_untie { unop(@_, "untie") }
+sub pp_tied { unop(@_, "tied") }
+sub pp_dbmclose { unop(@_, "dbmclose") }
+sub pp_getc { unop(@_, "getc") }
+sub pp_eof { unop(@_, "eof") }
+sub pp_tell { unop(@_, "tell") }
+sub pp_getsockname { unop(@_, "getsockname") }
+sub pp_getpeername { unop(@_, "getpeername") }
+
+sub pp_chdir { maybe_targmy(@_, \&unop, "chdir") }
+sub pp_chroot { maybe_targmy(@_, \&unop, "chroot") }
+sub pp_readlink { unop(@_, "readlink") }
+sub pp_rmdir { maybe_targmy(@_, \&unop, "rmdir") }
+sub pp_readdir { unop(@_, "readdir") }
+sub pp_telldir { unop(@_, "telldir") }
+sub pp_rewinddir { unop(@_, "rewinddir") }
+sub pp_closedir { unop(@_, "closedir") }
+sub pp_getpgrp { maybe_targmy(@_, \&unop, "getpgrp") }
+sub pp_localtime { unop(@_, "localtime") }
+sub pp_gmtime { unop(@_, "gmtime") }
+sub pp_alarm { unop(@_, "alarm") }
+sub pp_sleep { maybe_targmy(@_, \&unop, "sleep") }
+
+sub pp_dofile { unop(@_, "do") }
+sub pp_entereval { unop(@_, "eval") }
+
+sub pp_ghbyname { unop(@_, "gethostbyname") }
+sub pp_gnbyname { unop(@_, "getnetbyname") }
+sub pp_gpbyname { unop(@_, "getprotobyname") }
+sub pp_shostent { unop(@_, "sethostent") }
+sub pp_snetent { unop(@_, "setnetent") }
+sub pp_sprotoent { unop(@_, "setprotoent") }
+sub pp_sservent { unop(@_, "setservent") }
+sub pp_gpwnam { unop(@_, "getpwnam") }
+sub pp_gpwuid { unop(@_, "getpwuid") }
+sub pp_ggrnam { unop(@_, "getgrnam") }
+sub pp_ggrgid { unop(@_, "getgrgid") }
+
+sub pp_lock { unop(@_, "lock") }
+
+sub pp_exists {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $arg;
+ if ($op->private & OPpEXISTS_SUB) {
+ # Checking for the existence of a subroutine
+ return $self->maybe_parens_func("exists",
+ $self->pp_rv2cv($op->first, 16), $cx, 16);
+ }
+ if ($op->flags & OPf_SPECIAL) {
+ # Array element, not hash element
+ return $self->maybe_parens_func("exists",
+ $self->pp_aelem($op->first, 16), $cx, 16);
+ }
+ return $self->maybe_parens_func("exists", $self->pp_helem($op->first, 16),
+ $cx, 16);
+}
+
+sub pp_delete {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $arg;
+ if ($op->private & OPpSLICE) {
+ if ($op->flags & OPf_SPECIAL) {
+ # Deleting from an array, not a hash
+ return $self->maybe_parens_func("delete",
+ $self->pp_aslice($op->first, 16),
+ $cx, 16);
+ }
+ return $self->maybe_parens_func("delete",
+ $self->pp_hslice($op->first, 16),
+ $cx, 16);
+ } else {
+ if ($op->flags & OPf_SPECIAL) {
+ # Deleting from an array, not a hash
+ return $self->maybe_parens_func("delete",
+ $self->pp_aelem($op->first, 16),
+ $cx, 16);
+ }
+ return $self->maybe_parens_func("delete",
+ $self->pp_helem($op->first, 16),
+ $cx, 16);
+ }
+}
+
+sub pp_require {
+ my $self = shift;
+ my($op, $cx) = @_;
+ if (class($op) eq "UNOP" and $op->first->name eq "const"
+ and $op->first->private & OPpCONST_BARE)
+ {
+ my $name = $self->const_sv($op->first)->PV;
+ $name =~ s[/][::]g;
+ $name =~ s/\.pm//g;
+ return "require $name";
+ } else {
+ $self->unop($op, $cx, "require");
+ }
+}
+
+sub pp_scalar {
+ my $self = shift;
+ my($op, $cv) = @_;
+ my $kid = $op->first;
+ if (not null $kid->sibling) {
+ # XXX Was a here-doc
+ return $self->dquote($op);
+ }
+ $self->unop(@_, "scalar");
+}
+
+
+sub padval {
+ my $self = shift;
+ my $targ = shift;
+ return (($self->{'curcv'}->PADLIST->ARRAY)[1]->ARRAY)[$targ];
+}
+
+sub pp_refgen {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $kid = $op->first;
+ if ($kid->name eq "null") {
+ $kid = $kid->first;
+ if ($kid->name eq "anonlist" || $kid->name eq "anonhash") {
+ my($pre, $post) = @{{"anonlist" => ["[","]"],
+ "anonhash" => ["{","}"]}->{$kid->name}};
+ my($expr, @exprs);
+ $kid = $kid->first->sibling; # skip pushmark
+ for (; !null($kid); $kid = $kid->sibling) {
+ $expr = $self->deparse($kid, 6);
+ push @exprs, $expr;
+ }
+ return $pre . join(", ", @exprs) . $post;
+ } elsif (!null($kid->sibling) and
+ $kid->sibling->name eq "anoncode") {
+ return "sub " .
+ $self->deparse_sub($self->padval($kid->sibling->targ));
+ } elsif ($kid->name eq "pushmark") {
+ my $sib_name = $kid->sibling->name;
+ if ($sib_name =~ /^(pad|rv2)[ah]v$/
+ and not $kid->sibling->flags & OPf_REF)
+ {
+ # The @a in \(@a) isn't in ref context, but only when the
+ # parens are there.
+ return "\\(" . $self->deparse($kid->sibling, 1) . ")";
+ } elsif ($sib_name eq 'entersub') {
+ my $text = $self->deparse($kid->sibling, 1);
+ # Always show parens for \(&func()), but only with -p otherwise
+ $text = "($text)" if $self->{'parens'}
+ or $kid->sibling->private & OPpENTERSUB_AMPER;
+ return "\\$text";
+ }
+ }
+ }
+ $self->pfixop($op, $cx, "\\", 20);
+}
+
+sub pp_srefgen { pp_refgen(@_) }
+
+sub pp_readline {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $kid = $op->first;
+ $kid = $kid->first if $kid->name eq "rv2gv"; # <$fh>
+ return "<" . $self->deparse($kid, 1) . ">" if is_scalar($kid);
+ return $self->unop($op, $cx, "readline");
+}
+
+sub pp_rcatline {
+ my $self = shift;
+ my($op) = @_;
+ return "<" . $self->gv_name($op->gv) . ">";
+}
+
+# Unary operators that can occur as pseudo-listops inside double quotes
+sub dq_unop {
+ my $self = shift;
+ my($op, $cx, $name, $prec, $flags) = (@_, 0, 0);
+ my $kid;
+ if ($op->flags & OPf_KIDS) {
+ $kid = $op->first;
+ # If there's more than one kid, the first is an ex-pushmark.
+ $kid = $kid->sibling if not null $kid->sibling;
+ return $self->maybe_parens_unop($name, $kid, $cx);
+ } else {
+ return $name . ($op->flags & OPf_SPECIAL ? "()" : "");
+ }
+}
+
+sub pp_ucfirst { dq_unop(@_, "ucfirst") }
+sub pp_lcfirst { dq_unop(@_, "lcfirst") }
+sub pp_uc { dq_unop(@_, "uc") }
+sub pp_lc { dq_unop(@_, "lc") }
+sub pp_quotemeta { maybe_targmy(@_, \&dq_unop, "quotemeta") }
+
+sub loopex {
+ my $self = shift;
+ my ($op, $cx, $name) = @_;
+ if (class($op) eq "PVOP") {
+ return "$name " . $op->pv;
+ } elsif (class($op) eq "OP") {
+ return $name;
+ } elsif (class($op) eq "UNOP") {
+ # Note -- loop exits are actually exempt from the
+ # looks-like-a-func rule, but a few extra parens won't hurt
+ return $self->maybe_parens_unop($name, $op->first, $cx);
+ }
+}
+
+sub pp_last { loopex(@_, "last") }
+sub pp_next { loopex(@_, "next") }
+sub pp_redo { loopex(@_, "redo") }
+sub pp_goto { loopex(@_, "goto") }
+sub pp_dump { loopex(@_, "dump") }
+
+sub ftst {
+ my $self = shift;
+ my($op, $cx, $name) = @_;
+ if (class($op) eq "UNOP") {
+ # Genuine `-X' filetests are exempt from the LLAFR, but not
+ # l?stat(); for the sake of clarity, give'em all parens
+ return $self->maybe_parens_unop($name, $op->first, $cx);
+ } elsif (class($op) eq "SVOP") {
+ return $self->maybe_parens_func($name, $self->pp_gv($op, 1), $cx, 16);
+ } else { # I don't think baseop filetests ever survive ck_ftst, but...
+ return $name;
+ }
+}
+
+sub pp_lstat { ftst(@_, "lstat") }
+sub pp_stat { ftst(@_, "stat") }
+sub pp_ftrread { ftst(@_, "-R") }
+sub pp_ftrwrite { ftst(@_, "-W") }
+sub pp_ftrexec { ftst(@_, "-X") }
+sub pp_fteread { ftst(@_, "-r") }
+sub pp_ftewrite { ftst(@_, "-w") }
+sub pp_fteexec { ftst(@_, "-x") }
+sub pp_ftis { ftst(@_, "-e") }
+sub pp_fteowned { ftst(@_, "-O") }
+sub pp_ftrowned { ftst(@_, "-o") }
+sub pp_ftzero { ftst(@_, "-z") }
+sub pp_ftsize { ftst(@_, "-s") }
+sub pp_ftmtime { ftst(@_, "-M") }
+sub pp_ftatime { ftst(@_, "-A") }
+sub pp_ftctime { ftst(@_, "-C") }
+sub pp_ftsock { ftst(@_, "-S") }
+sub pp_ftchr { ftst(@_, "-c") }
+sub pp_ftblk { ftst(@_, "-b") }
+sub pp_ftfile { ftst(@_, "-f") }
+sub pp_ftdir { ftst(@_, "-d") }
+sub pp_ftpipe { ftst(@_, "-p") }
+sub pp_ftlink { ftst(@_, "-l") }
+sub pp_ftsuid { ftst(@_, "-u") }
+sub pp_ftsgid { ftst(@_, "-g") }
+sub pp_ftsvtx { ftst(@_, "-k") }
+sub pp_fttty { ftst(@_, "-t") }
+sub pp_fttext { ftst(@_, "-T") }
+sub pp_ftbinary { ftst(@_, "-B") }
+
+sub SWAP_CHILDREN () { 1 }
+sub ASSIGN () { 2 } # has OP= variant
+sub LIST_CONTEXT () { 4 } # Assignment is in list context
+
+my(%left, %right);
+
+sub assoc_class {
+ my $op = shift;
+ my $name = $op->name;
+ if ($name eq "concat" and $op->first->name eq "concat") {
+ # avoid spurious `=' -- see comment in pp_concat
+ return "concat";
+ }
+ if ($name eq "null" and class($op) eq "UNOP"
+ and $op->first->name =~ /^(and|x?or)$/
+ and null $op->first->sibling)
+ {
+ # Like all conditional constructs, OP_ANDs and OP_ORs are topped
+ # with a null that's used as the common end point of the two
+ # flows of control. For precedence purposes, ignore it.
+ # (COND_EXPRs have these too, but we don't bother with
+ # their associativity).
+ return assoc_class($op->first);
+ }
+ return $name . ($op->flags & OPf_STACKED ? "=" : "");
+}
+
+# Left associative operators, like `+', for which
+# $a + $b + $c is equivalent to ($a + $b) + $c
+
+BEGIN {
+ %left = ('multiply' => 19, 'i_multiply' => 19,
+ 'divide' => 19, 'i_divide' => 19,
+ 'modulo' => 19, 'i_modulo' => 19,
+ 'repeat' => 19,
+ 'add' => 18, 'i_add' => 18,
+ 'subtract' => 18, 'i_subtract' => 18,
+ 'concat' => 18,
+ 'left_shift' => 17, 'right_shift' => 17,
+ 'bit_and' => 13,
+ 'bit_or' => 12, 'bit_xor' => 12,
+ 'and' => 3,
+ 'or' => 2, 'xor' => 2,
+ );
+}
+
+sub deparse_binop_left {
+ my $self = shift;
+ my($op, $left, $prec) = @_;
+ if ($left{assoc_class($op)} && $left{assoc_class($left)}
+ and $left{assoc_class($op)} == $left{assoc_class($left)})
+ {
+ return $self->deparse($left, $prec - .00001);
+ } else {
+ return $self->deparse($left, $prec);
+ }
+}
+
+# Right associative operators, like `=', for which
+# $a = $b = $c is equivalent to $a = ($b = $c)
+
+BEGIN {
+ %right = ('pow' => 22,
+ 'sassign=' => 7, 'aassign=' => 7,
+ 'multiply=' => 7, 'i_multiply=' => 7,
+ 'divide=' => 7, 'i_divide=' => 7,
+ 'modulo=' => 7, 'i_modulo=' => 7,
+ 'repeat=' => 7,
+ 'add=' => 7, 'i_add=' => 7,
+ 'subtract=' => 7, 'i_subtract=' => 7,
+ 'concat=' => 7,
+ 'left_shift=' => 7, 'right_shift=' => 7,
+ 'bit_and=' => 7,
+ 'bit_or=' => 7, 'bit_xor=' => 7,
+ 'andassign' => 7,
+ 'orassign' => 7,
+ );
+}
+
+sub deparse_binop_right {
+ my $self = shift;
+ my($op, $right, $prec) = @_;
+ if ($right{assoc_class($op)} && $right{assoc_class($right)}
+ and $right{assoc_class($op)} == $right{assoc_class($right)})
+ {
+ return $self->deparse($right, $prec - .00001);
+ } else {
+ return $self->deparse($right, $prec);
+ }
+}
+
+sub binop {
+ my $self = shift;
+ my ($op, $cx, $opname, $prec, $flags) = (@_, 0);
+ my $left = $op->first;
+ my $right = $op->last;
+ my $eq = "";
+ if ($op->flags & OPf_STACKED && $flags & ASSIGN) {
+ $eq = "=";
+ $prec = 7;
+ }
+ if ($flags & SWAP_CHILDREN) {
+ ($left, $right) = ($right, $left);
+ }
+ $left = $self->deparse_binop_left($op, $left, $prec);
+ $left = "($left)" if $flags & LIST_CONTEXT
+ && $left !~ /^(my|our|local|)[\@\(]/;
+ $right = $self->deparse_binop_right($op, $right, $prec);
+ return $self->maybe_parens("$left $opname$eq $right", $cx, $prec);
+}
+
+sub pp_add { maybe_targmy(@_, \&binop, "+", 18, ASSIGN) }
+sub pp_multiply { maybe_targmy(@_, \&binop, "*", 19, ASSIGN) }
+sub pp_subtract { maybe_targmy(@_, \&binop, "-",18, ASSIGN) }
+sub pp_divide { maybe_targmy(@_, \&binop, "/", 19, ASSIGN) }
+sub pp_modulo { maybe_targmy(@_, \&binop, "%", 19, ASSIGN) }
+sub pp_i_add { maybe_targmy(@_, \&binop, "+", 18, ASSIGN) }
+sub pp_i_multiply { maybe_targmy(@_, \&binop, "*", 19, ASSIGN) }
+sub pp_i_subtract { maybe_targmy(@_, \&binop, "-", 18, ASSIGN) }
+sub pp_i_divide { maybe_targmy(@_, \&binop, "/", 19, ASSIGN) }
+sub pp_i_modulo { maybe_targmy(@_, \&binop, "%", 19, ASSIGN) }
+sub pp_pow { maybe_targmy(@_, \&binop, "**", 22, ASSIGN) }
+
+sub pp_left_shift { maybe_targmy(@_, \&binop, "<<", 17, ASSIGN) }
+sub pp_right_shift { maybe_targmy(@_, \&binop, ">>", 17, ASSIGN) }
+sub pp_bit_and { maybe_targmy(@_, \&binop, "&", 13, ASSIGN) }
+sub pp_bit_or { maybe_targmy(@_, \&binop, "|", 12, ASSIGN) }
+sub pp_bit_xor { maybe_targmy(@_, \&binop, "^", 12, ASSIGN) }
+
+sub pp_eq { binop(@_, "==", 14) }
+sub pp_ne { binop(@_, "!=", 14) }
+sub pp_lt { binop(@_, "<", 15) }
+sub pp_gt { binop(@_, ">", 15) }
+sub pp_ge { binop(@_, ">=", 15) }
+sub pp_le { binop(@_, "<=", 15) }
+sub pp_ncmp { binop(@_, "<=>", 14) }
+sub pp_i_eq { binop(@_, "==", 14) }
+sub pp_i_ne { binop(@_, "!=", 14) }
+sub pp_i_lt { binop(@_, "<", 15) }
+sub pp_i_gt { binop(@_, ">", 15) }
+sub pp_i_ge { binop(@_, ">=", 15) }
+sub pp_i_le { binop(@_, "<=", 15) }
+sub pp_i_ncmp { binop(@_, "<=>", 14) }
+
+sub pp_seq { binop(@_, "eq", 14) }
+sub pp_sne { binop(@_, "ne", 14) }
+sub pp_slt { binop(@_, "lt", 15) }
+sub pp_sgt { binop(@_, "gt", 15) }
+sub pp_sge { binop(@_, "ge", 15) }
+sub pp_sle { binop(@_, "le", 15) }
+sub pp_scmp { binop(@_, "cmp", 14) }
+
+sub pp_sassign { binop(@_, "=", 7, SWAP_CHILDREN) }
+sub pp_aassign { binop(@_, "=", 7, SWAP_CHILDREN | LIST_CONTEXT) }
+
+# `.' is special because concats-of-concats are optimized to save copying
+# by making all but the first concat stacked. The effect is as if the
+# programmer had written `($a . $b) .= $c', except legal.
+sub pp_concat { maybe_targmy(@_, \&real_concat) }
+sub real_concat {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $left = $op->first;
+ my $right = $op->last;
+ my $eq = "";
+ my $prec = 18;
+ if ($op->flags & OPf_STACKED and $op->first->name ne "concat") {
+ $eq = "=";
+ $prec = 7;
+ }
+ $left = $self->deparse_binop_left($op, $left, $prec);
+ $right = $self->deparse_binop_right($op, $right, $prec);
+ return $self->maybe_parens("$left .$eq $right", $cx, $prec);
+}
+
+# `x' is weird when the left arg is a list
+sub pp_repeat {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $left = $op->first;
+ my $right = $op->last;
+ my $eq = "";
+ my $prec = 19;
+ if ($op->flags & OPf_STACKED) {
+ $eq = "=";
+ $prec = 7;
+ }
+ if (null($right)) { # list repeat; count is inside left-side ex-list
+ my $kid = $left->first->sibling; # skip pushmark
+ my @exprs;
+ for (; !null($kid->sibling); $kid = $kid->sibling) {
+ push @exprs, $self->deparse($kid, 6);
+ }
+ $right = $kid;
+ $left = "(" . join(", ", @exprs). ")";
+ } else {
+ $left = $self->deparse_binop_left($op, $left, $prec);
+ }
+ $right = $self->deparse_binop_right($op, $right, $prec);
+ return $self->maybe_parens("$left x$eq $right", $cx, $prec);
+}
+
+sub range {
+ my $self = shift;
+ my ($op, $cx, $type) = @_;
+ my $left = $op->first;
+ my $right = $left->sibling;
+ $left = $self->deparse($left, 9);
+ $right = $self->deparse($right, 9);
+ return $self->maybe_parens("$left $type $right", $cx, 9);
+}
+
+sub pp_flop {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $flip = $op->first;
+ my $type = ($flip->flags & OPf_SPECIAL) ? "..." : "..";
+ return $self->range($flip->first, $cx, $type);
+}
+
+# one-line while/until is handled in pp_leave
+
+sub logop {
+ my $self = shift;
+ my ($op, $cx, $lowop, $lowprec, $highop, $highprec, $blockname) = @_;
+ my $left = $op->first;
+ my $right = $op->first->sibling;
+ if ($cx == 0 and is_scope($right) and $blockname
+ and $self->{'expand'} < 7)
+ { # if ($a) {$b}
+ $left = $self->deparse($left, 1);
+ $right = $self->deparse($right, 0);
+ return "$blockname ($left) {\n\t$right\n\b}\cK";
+ } elsif ($cx == 0 and $blockname and not $self->{'parens'}
+ and $self->{'expand'} < 7) { # $b if $a
+ $right = $self->deparse($right, 1);
+ $left = $self->deparse($left, 1);
+ return "$right $blockname $left";
+ } elsif ($cx > $lowprec and $highop) { # $a && $b
+ $left = $self->deparse_binop_left($op, $left, $highprec);
+ $right = $self->deparse_binop_right($op, $right, $highprec);
+ return $self->maybe_parens("$left $highop $right", $cx, $highprec);
+ } else { # $a and $b
+ $left = $self->deparse_binop_left($op, $left, $lowprec);
+ $right = $self->deparse_binop_right($op, $right, $lowprec);
+ return $self->maybe_parens("$left $lowop $right", $cx, $lowprec);
+ }
+}
+
+sub pp_and { logop(@_, "and", 3, "&&", 11, "if") }
+sub pp_or { logop(@_, "or", 2, "||", 10, "unless") }
+
+# xor is syntactically a logop, but it's really a binop (contrary to
+# old versions of opcode.pl). Syntax is what matters here.
+sub pp_xor { logop(@_, "xor", 2, "", 0, "") }
+
+sub logassignop {
+ my $self = shift;
+ my ($op, $cx, $opname) = @_;
+ my $left = $op->first;
+ my $right = $op->first->sibling->first; # skip sassign
+ $left = $self->deparse($left, 7);
+ $right = $self->deparse($right, 7);
+ return $self->maybe_parens("$left $opname $right", $cx, 7);
+}
+
+sub pp_andassign { logassignop(@_, "&&=") }
+sub pp_orassign { logassignop(@_, "||=") }
+
+sub listop {
+ my $self = shift;
+ my($op, $cx, $name) = @_;
+ my(@exprs);
+ my $parens = ($cx >= 5) || $self->{'parens'};
+ my $kid = $op->first->sibling;
+ return $name if null $kid;
+ my $first;
+ $name = "socketpair" if $name eq "sockpair";
+ if (defined prototype("CORE::$name")
+ && prototype("CORE::$name") =~ /^;?\*/
+ && $kid->name eq "rv2gv") {
+ $first = $self->deparse($kid->first, 6);
+ }
+ else {
+ $first = $self->deparse($kid, 6);
+ }
+ if ($name eq "chmod" && $first =~ /^\d+$/) {
+ $first = sprintf("%#o", $first);
+ }
+ $first = "+$first" if not $parens and substr($first, 0, 1) eq "(";
+ push @exprs, $first;
+ $kid = $kid->sibling;
+ for (; !null($kid); $kid = $kid->sibling) {
+ push @exprs, $self->deparse($kid, 6);
+ }
+ if ($parens) {
+ return "$name(" . join(", ", @exprs) . ")";
+ } else {
+ return "$name " . join(", ", @exprs);
+ }
+}
+
+sub pp_bless { listop(@_, "bless") }
+sub pp_atan2 { maybe_targmy(@_, \&listop, "atan2") }
+sub pp_substr { maybe_local(@_, listop(@_, "substr")) }
+sub pp_vec { maybe_local(@_, listop(@_, "vec")) }
+sub pp_index { maybe_targmy(@_, \&listop, "index") }
+sub pp_rindex { maybe_targmy(@_, \&listop, "rindex") }
+sub pp_sprintf { maybe_targmy(@_, \&listop, "sprintf") }
+sub pp_formline { listop(@_, "formline") } # see also deparse_format
+sub pp_crypt { maybe_targmy(@_, \&listop, "crypt") }
+sub pp_unpack { listop(@_, "unpack") }
+sub pp_pack { listop(@_, "pack") }
+sub pp_join { maybe_targmy(@_, \&listop, "join") }
+sub pp_splice { listop(@_, "splice") }
+sub pp_push { maybe_targmy(@_, \&listop, "push") }
+sub pp_unshift { maybe_targmy(@_, \&listop, "unshift") }
+sub pp_reverse { listop(@_, "reverse") }
+sub pp_warn { listop(@_, "warn") }
+sub pp_die { listop(@_, "die") }
+# Actually, return is exempt from the LLAFR (see examples in this very
+# module!), but for consistency's sake, ignore that fact
+sub pp_return { listop(@_, "return") }
+sub pp_open { listop(@_, "open") }
+sub pp_pipe_op { listop(@_, "pipe") }
+sub pp_tie { listop(@_, "tie") }
+sub pp_binmode { listop(@_, "binmode") }
+sub pp_dbmopen { listop(@_, "dbmopen") }
+sub pp_sselect { listop(@_, "select") }
+sub pp_select { listop(@_, "select") }
+sub pp_read { listop(@_, "read") }
+sub pp_sysopen { listop(@_, "sysopen") }
+sub pp_sysseek { listop(@_, "sysseek") }
+sub pp_sysread { listop(@_, "sysread") }
+sub pp_syswrite { listop(@_, "syswrite") }
+sub pp_send { listop(@_, "send") }
+sub pp_recv { listop(@_, "recv") }
+sub pp_seek { listop(@_, "seek") }
+sub pp_fcntl { listop(@_, "fcntl") }
+sub pp_ioctl { listop(@_, "ioctl") }
+sub pp_flock { maybe_targmy(@_, \&listop, "flock") }
+sub pp_socket { listop(@_, "socket") }
+sub pp_sockpair { listop(@_, "sockpair") }
+sub pp_bind { listop(@_, "bind") }
+sub pp_connect { listop(@_, "connect") }
+sub pp_listen { listop(@_, "listen") }
+sub pp_accept { listop(@_, "accept") }
+sub pp_shutdown { listop(@_, "shutdown") }
+sub pp_gsockopt { listop(@_, "getsockopt") }
+sub pp_ssockopt { listop(@_, "setsockopt") }
+sub pp_chown { maybe_targmy(@_, \&listop, "chown") }
+sub pp_unlink { maybe_targmy(@_, \&listop, "unlink") }
+sub pp_chmod { maybe_targmy(@_, \&listop, "chmod") }
+sub pp_utime { maybe_targmy(@_, \&listop, "utime") }
+sub pp_rename { maybe_targmy(@_, \&listop, "rename") }
+sub pp_link { maybe_targmy(@_, \&listop, "link") }
+sub pp_symlink { maybe_targmy(@_, \&listop, "symlink") }
+sub pp_mkdir { maybe_targmy(@_, \&listop, "mkdir") }
+sub pp_open_dir { listop(@_, "opendir") }
+sub pp_seekdir { listop(@_, "seekdir") }
+sub pp_waitpid { maybe_targmy(@_, \&listop, "waitpid") }
+sub pp_system { maybe_targmy(@_, \&listop, "system") }
+sub pp_exec { maybe_targmy(@_, \&listop, "exec") }
+sub pp_kill { maybe_targmy(@_, \&listop, "kill") }
+sub pp_setpgrp { maybe_targmy(@_, \&listop, "setpgrp") }
+sub pp_getpriority { maybe_targmy(@_, \&listop, "getpriority") }
+sub pp_setpriority { maybe_targmy(@_, \&listop, "setpriority") }
+sub pp_shmget { listop(@_, "shmget") }
+sub pp_shmctl { listop(@_, "shmctl") }
+sub pp_shmread { listop(@_, "shmread") }
+sub pp_shmwrite { listop(@_, "shmwrite") }
+sub pp_msgget { listop(@_, "msgget") }
+sub pp_msgctl { listop(@_, "msgctl") }
+sub pp_msgsnd { listop(@_, "msgsnd") }
+sub pp_msgrcv { listop(@_, "msgrcv") }
+sub pp_semget { listop(@_, "semget") }
+sub pp_semctl { listop(@_, "semctl") }
+sub pp_semop { listop(@_, "semop") }
+sub pp_ghbyaddr { listop(@_, "gethostbyaddr") }
+sub pp_gnbyaddr { listop(@_, "getnetbyaddr") }
+sub pp_gpbynumber { listop(@_, "getprotobynumber") }
+sub pp_gsbyname { listop(@_, "getservbyname") }
+sub pp_gsbyport { listop(@_, "getservbyport") }
+sub pp_syscall { listop(@_, "syscall") }
+
+sub pp_glob {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $text = $self->dq($op->first->sibling); # skip pushmark
+ if ($text =~ /^\$?(\w|::|\`)+$/ # could look like a readline
+ or $text =~ /[<>]/) {
+ return 'glob(' . single_delim('qq', '"', $text) . ')';
+ } else {
+ return '<' . $text . '>';
+ }
+}
+
+# Truncate is special because OPf_SPECIAL makes a bareword first arg
+# be a filehandle. This could probably be better fixed in the core
+# by moving the GV lookup into ck_truc.
+
+sub pp_truncate {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my(@exprs);
+ my $parens = ($cx >= 5) || $self->{'parens'};
+ my $kid = $op->first->sibling;
+ my $fh;
+ if ($op->flags & OPf_SPECIAL) {
+ # $kid is an OP_CONST
+ $fh = $self->const_sv($kid)->PV;
+ } else {
+ $fh = $self->deparse($kid, 6);
+ $fh = "+$fh" if not $parens and substr($fh, 0, 1) eq "(";
+ }
+ my $len = $self->deparse($kid->sibling, 6);
+ if ($parens) {
+ return "truncate($fh, $len)";
+ } else {
+ return "truncate $fh, $len";
+ }
+}
+
+sub indirop {
+ my $self = shift;
+ my($op, $cx, $name) = @_;
+ my($expr, @exprs);
+ my $kid = $op->first->sibling;
+ my $indir = "";
+ if ($op->flags & OPf_STACKED) {
+ $indir = $kid;
+ $indir = $indir->first; # skip rv2gv
+ if (is_scope($indir)) {
+ $indir = "{" . $self->deparse($indir, 0) . "}";
+ } elsif ($indir->name eq "const" && $indir->private & OPpCONST_BARE) {
+ $indir = $self->const_sv($indir)->PV;
+ } else {
+ $indir = $self->deparse($indir, 24);
+ }
+ $indir = $indir . " ";
+ $kid = $kid->sibling;
+ }
+ if ($name eq "sort" && $op->private & (OPpSORT_NUMERIC | OPpSORT_INTEGER)) {
+ $indir = ($op->private & OPpSORT_REVERSE) ? '{$b <=> $a} '
+ : '{$a <=> $b} ';
+ }
+ elsif ($name eq "sort" && $op->private & OPpSORT_REVERSE) {
+ $indir = '{$b cmp $a} ';
+ }
+ for (; !null($kid); $kid = $kid->sibling) {
+ $expr = $self->deparse($kid, 6);
+ push @exprs, $expr;
+ }
+ return $self->maybe_parens_func($name, $indir . join(", ", @exprs),
+ $cx, 5);
+}
+
+sub pp_prtf { indirop(@_, "printf") }
+sub pp_print { indirop(@_, "print") }
+sub pp_sort { indirop(@_, "sort") }
+
+sub mapop {
+ my $self = shift;
+ my($op, $cx, $name) = @_;
+ my($expr, @exprs);
+ my $kid = $op->first; # this is the (map|grep)start
+ $kid = $kid->first->sibling; # skip a pushmark
+ my $code = $kid->first; # skip a null
+ if (is_scope $code) {
+ $code = "{" . $self->deparse($code, 0) . "} ";
+ } else {
+ $code = $self->deparse($code, 24) . ", ";
+ }
+ $kid = $kid->sibling;
+ for (; !null($kid); $kid = $kid->sibling) {
+ $expr = $self->deparse($kid, 6);
+ push @exprs, $expr if defined $expr;
+ }
+ return $self->maybe_parens_func($name, $code . join(", ", @exprs), $cx, 5);
+}
+
+sub pp_mapwhile { mapop(@_, "map") }
+sub pp_grepwhile { mapop(@_, "grep") }
+
+sub pp_list {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my($expr, @exprs);
+ my $kid = $op->first->sibling; # skip pushmark
+ my $lop;
+ my $local = "either"; # could be local(...), my(...) or our(...)
+ for ($lop = $kid; !null($lop); $lop = $lop->sibling) {
+ # This assumes that no other private flags equal 128, and that
+ # OPs that store things other than flags in their op_private,
+ # like OP_AELEMFAST, won't be immediate children of a list.
+ #
+ # OP_ENTERSUB can break this logic, so check for it.
+ # I suspect that open and exit can too.
+
+ if (!($lop->private & (OPpLVAL_INTRO|OPpOUR_INTRO)
+ or $lop->name eq "undef")
+ or $lop->name eq "entersub"
+ or $lop->name eq "exit"
+ or $lop->name eq "open")
+ {
+ $local = ""; # or not
+ last;
+ }
+ if ($lop->name =~ /^pad[ash]v$/) { # my()
+ ($local = "", last) if $local eq "local" || $local eq "our";
+ $local = "my";
+ } elsif ($lop->name =~ /^(gv|rv2)[ash]v$/
+ && $lop->private & OPpOUR_INTRO
+ or $lop->name eq "null" && $lop->first->name eq "gvsv"
+ && $lop->first->private & OPpOUR_INTRO) { # our()
+ ($local = "", last) if $local eq "my" || $local eq "local";
+ $local = "our";
+ } elsif ($lop->name ne "undef") { # local()
+ ($local = "", last) if $local eq "my" || $local eq "our";
+ $local = "local";
+ }
+ }
+ $local = "" if $local eq "either"; # no point if it's all undefs
+ return $self->deparse($kid, $cx) if null $kid->sibling and not $local;
+ for (; !null($kid); $kid = $kid->sibling) {
+ if ($local) {
+ if (class($kid) eq "UNOP" and $kid->first->name eq "gvsv") {
+ $lop = $kid->first;
+ } else {
+ $lop = $kid;
+ }
+ $self->{'avoid_local'}{$$lop}++;
+ $expr = $self->deparse($kid, 6);
+ delete $self->{'avoid_local'}{$$lop};
+ } else {
+ $expr = $self->deparse($kid, 6);
+ }
+ push @exprs, $expr;
+ }
+ if ($local) {
+ return "$local(" . join(", ", @exprs) . ")";
+ } else {
+ return $self->maybe_parens( join(", ", @exprs), $cx, 6);
+ }
+}
+
+sub is_ifelse_cont {
+ my $op = shift;
+ return ($op->name eq "null" and class($op) eq "UNOP"
+ and $op->first->name =~ /^(and|cond_expr)$/
+ and is_scope($op->first->first->sibling));
+}
+
+sub pp_cond_expr {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $cond = $op->first;
+ my $true = $cond->sibling;
+ my $false = $true->sibling;
+ my $cuddle = $self->{'cuddle'};
+ unless ($cx == 0 and (is_scope($true) and $true->name ne "null") and
+ (is_scope($false) || is_ifelse_cont($false))
+ and $self->{'expand'} < 7) {
+ $cond = $self->deparse($cond, 8);
+ $true = $self->deparse($true, 8);
+ $false = $self->deparse($false, 8);
+ return $self->maybe_parens("$cond ? $true : $false", $cx, 8);
+ }
+
+ $cond = $self->deparse($cond, 1);
+ $true = $self->deparse($true, 0);
+ my $head = "if ($cond) {\n\t$true\n\b}";
+ my @elsifs;
+ while (!null($false) and is_ifelse_cont($false)) {
+ my $newop = $false->first;
+ my $newcond = $newop->first;
+ my $newtrue = $newcond->sibling;
+ $false = $newtrue->sibling; # last in chain is OP_AND => no else
+ $newcond = $self->deparse($newcond, 1);
+ $newtrue = $self->deparse($newtrue, 0);
+ push @elsifs, "elsif ($newcond) {\n\t$newtrue\n\b}";
+ }
+ if (!null($false)) {
+ $false = $cuddle . "else {\n\t" .
+ $self->deparse($false, 0) . "\n\b}\cK";
+ } else {
+ $false = "\cK";
+ }
+ return $head . join($cuddle, "", @elsifs) . $false;
+}
+
+sub loop_common {
+ my $self = shift;
+ my($op, $cx, $init) = @_;
+ my $enter = $op->first;
+ my $kid = $enter->sibling;
+ local(@$self{qw'curstash warnings hints'})
+ = @$self{qw'curstash warnings hints'};
+ my $head = "";
+ my $bare = 0;
+ my $body;
+ my $cond = undef;
+ if ($kid->name eq "lineseq") { # bare or infinite loop
+ if (is_state $kid->last) { # infinite
+ $head = "while (1) "; # Can't use for(;;) if there's a continue
+ $cond = "";
+ } else {
+ $bare = 1;
+ }
+ $body = $kid;
+ } elsif ($enter->name eq "enteriter") { # foreach
+ my $ary = $enter->first->sibling; # first was pushmark
+ my $var = $ary->sibling;
+ if ($enter->flags & OPf_STACKED
+ and not null $ary->first->sibling->sibling)
+ {
+ $ary = $self->deparse($ary->first->sibling, 9) . " .. " .
+ $self->deparse($ary->first->sibling->sibling, 9);
+ } else {
+ $ary = $self->deparse($ary, 1);
+ }
+ if (null $var) {
+ if ($enter->flags & OPf_SPECIAL) { # thread special var
+ $var = $self->pp_threadsv($enter, 1);
+ } else { # regular my() variable
+ $var = $self->pp_padsv($enter, 1);
+ if ($self->padname_sv($enter->targ)->IVX ==
+ $kid->first->first->sibling->last->cop_seq)
+ {
+ # If the scope of this variable closes at the last
+ # statement of the loop, it must have been
+ # declared here.
+ $var = "my " . $var;
+ }
+ }
+ } elsif ($var->name eq "rv2gv") {
+ $var = $self->pp_rv2sv($var, 1);
+ } elsif ($var->name eq "gv") {
+ $var = "\$" . $self->deparse($var, 1);
+ }
+ $head = "foreach $var ($ary) ";
+ $body = $kid->first->first->sibling; # skip OP_AND and OP_ITER
+ } elsif ($kid->name eq "null") { # while/until
+ $kid = $kid->first;
+ my $name = {"and" => "while", "or" => "until"}->{$kid->name};
+ $cond = $self->deparse($kid->first, 1);
+ $head = "$name ($cond) ";
+ $body = $kid->first->sibling;
+ } elsif ($kid->name eq "stub") { # bare and empty
+ return "{;}"; # {} could be a hashref
+ }
+ # If there isn't a continue block, then the next pointer for the loop
+ # will point to the unstack, which is kid's penultimate child, except
+ # in a bare loop, when it will point to the leaveloop. When neither of
+ # these conditions hold, then the third-to-last child in the continue
+ # block (or the last in a bare loop).
+ my $cont_start = $enter->nextop;
+ my $cont;
+ if ($$cont_start != $$op && ${$cont_start->sibling} != ${$body->last}) {
+ if ($bare) {
+ $cont = $body->last;
+ } else {
+ $cont = $body->first;
+ while (!null($cont->sibling->sibling->sibling)) {
+ $cont = $cont->sibling;
+ }
+ }
+ my $state = $body->first;
+ my $cuddle = $self->{'cuddle'};
+ my @states;
+ for (; $$state != $$cont; $state = $state->sibling) {
+ push @states, $state;
+ }
+ $body = $self->lineseq(undef, @states);
+ if (defined $cond and not is_scope $cont and $self->{'expand'} < 3) {
+ $head = "for ($init; $cond; " . $self->deparse($cont, 1) .") ";
+ $cont = "\cK";
+ } else {
+ $cont = $cuddle . "continue {\n\t" .
+ $self->deparse($cont, 0) . "\n\b}\cK";
+ }
+ } else {
+ return "" if !defined $body;
+ if (length $init) {
+ $head = "for ($init; $cond;) ";
+ }
+ $cont = "\cK";
+ $body = $self->deparse($body, 0);
+ }
+ $body =~ s/;?$/;\n/;
+
+ return $head . "{\n\t" . $body . "\b}" . $cont;
+}
+
+sub pp_leaveloop { loop_common(@_, "") }
+
+sub for_loop {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $init = $self->deparse($op, 1);
+ return $self->loop_common($op->sibling->first->sibling, $cx, $init);
+}
+
+sub pp_leavetry {
+ my $self = shift;
+ return "eval {\n\t" . $self->pp_leave(@_) . "\n\b}";
+}
+
+BEGIN { eval "sub OP_CONST () {" . opnumber("const") . "}" }
+BEGIN { eval "sub OP_STRINGIFY () {" . opnumber("stringify") . "}" }
+BEGIN { eval "sub OP_RV2SV () {" . opnumber("rv2sv") . "}" }
+BEGIN { eval "sub OP_LIST () {" . opnumber("list") . "}" }
+
+sub pp_null {
+ my $self = shift;
+ my($op, $cx) = @_;
+ if (class($op) eq "OP") {
+ # old value is lost
+ return $self->{'ex_const'} if $op->targ == OP_CONST;
+ } elsif ($op->first->name eq "pushmark") {
+ return $self->pp_list($op, $cx);
+ } elsif ($op->first->name eq "enter") {
+ return $self->pp_leave($op, $cx);
+ } elsif ($op->targ == OP_STRINGIFY) {
+ return $self->dquote($op, $cx);
+ } elsif (!null($op->first->sibling) and
+ $op->first->sibling->name eq "readline" and
+ $op->first->sibling->flags & OPf_STACKED) {
+ return $self->maybe_parens($self->deparse($op->first, 7) . " = "
+ . $self->deparse($op->first->sibling, 7),
+ $cx, 7);
+ } elsif (!null($op->first->sibling) and
+ $op->first->sibling->name eq "trans" and
+ $op->first->sibling->flags & OPf_STACKED) {
+ return $self->maybe_parens($self->deparse($op->first, 20) . " =~ "
+ . $self->deparse($op->first->sibling, 20),
+ $cx, 20);
+ } elsif ($op->flags & OPf_SPECIAL && $cx == 0 && !$op->targ) {
+ return "do {\n\t". $self->deparse($op->first, $cx) ."\n\b};";
+ } elsif (!null($op->first->sibling) and
+ $op->first->sibling->name eq "null" and
+ class($op->first->sibling) eq "UNOP" and
+ $op->first->sibling->first->flags & OPf_STACKED and
+ $op->first->sibling->first->name eq "rcatline") {
+ return $self->maybe_parens($self->deparse($op->first, 18) . " .= "
+ . $self->deparse($op->first->sibling, 18),
+ $cx, 18);
+ } else {
+ return $self->deparse($op->first, $cx);
+ }
+}
+
+sub padname {
+ my $self = shift;
+ my $targ = shift;
+ return $self->padname_sv($targ)->PVX;
+}
+
+sub padany {
+ my $self = shift;
+ my $op = shift;
+ return substr($self->padname($op->targ), 1); # skip $/@/%
+}
+
+sub pp_padsv {
+ my $self = shift;
+ my($op, $cx) = @_;
+ return $self->maybe_my($op, $cx, $self->padname($op->targ));
+}
+
+sub pp_padav { pp_padsv(@_) }
+sub pp_padhv { pp_padsv(@_) }
+
+my @threadsv_names;
+
+BEGIN {
+ @threadsv_names = ("_", "1", "2", "3", "4", "5", "6", "7", "8", "9",
+ "&", "`", "'", "+", "/", ".", ",", "\\", '"', ";",
+ "^", "-", "%", "=", "|", "~", ":", "^A", "^E",
+ "!", "@");
+}
+
+sub pp_threadsv {
+ my $self = shift;
+ my($op, $cx) = @_;
+ return $self->maybe_local($op, $cx, "\$" . $threadsv_names[$op->targ]);
+}
+
+sub gv_or_padgv {
+ my $self = shift;
+ my $op = shift;
+ if (class($op) eq "PADOP") {
+ return $self->padval($op->padix);
+ } else { # class($op) eq "SVOP"
+ return $op->gv;
+ }
+}
+
+sub pp_gvsv {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $gv = $self->gv_or_padgv($op);
+ return $self->maybe_local($op, $cx, $self->stash_variable("\$",
+ $self->gv_name($gv)));
+}
+
+sub pp_gv {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $gv = $self->gv_or_padgv($op);
+ return $self->gv_name($gv);
+}
+
+sub pp_aelemfast {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $gv = $self->gv_or_padgv($op);
+ my $name = $self->gv_name($gv);
+ $name = $self->{'curstash'}."::$name"
+ if $name !~ /::/ && $self->lex_in_scope('@'.$name);
+
+ return "\$" . $name . "[" .
+ ($op->private + $self->{'arybase'}) . "]";
+}
+
+sub rv2x {
+ my $self = shift;
+ my($op, $cx, $type) = @_;
+
+ if (class($op) eq 'NULL' || !$op->can("first")) {
+ carp("Unexpected op in pp_rv2x");
+ return 'XXX';
+ }
+ my $kid = $op->first;
+ my $str = $self->deparse($kid, 0);
+ return $self->stash_variable($type, $str) if is_scalar($kid);
+ return $type ."{$str}";
+}
+
+sub pp_rv2sv { maybe_local(@_, rv2x(@_, "\$")) }
+sub pp_rv2hv { maybe_local(@_, rv2x(@_, "%")) }
+sub pp_rv2gv { maybe_local(@_, rv2x(@_, "*")) }
+
+# skip rv2av
+sub pp_av2arylen {
+ my $self = shift;
+ my($op, $cx) = @_;
+ if ($op->first->name eq "padav") {
+ return $self->maybe_local($op, $cx, '$#' . $self->padany($op->first));
+ } else {
+ return $self->maybe_local($op, $cx,
+ $self->rv2x($op->first, $cx, '$#'));
+ }
+}
+
+# skip down to the old, ex-rv2cv
+sub pp_rv2cv {
+ my ($self, $op, $cx) = @_;
+ if (!null($op->first) && $op->first->name eq 'null' &&
+ $op->first->targ eq OP_LIST)
+ {
+ return $self->rv2x($op->first->first->sibling, $cx, "&")
+ }
+ else {
+ return $self->rv2x($op, $cx, "")
+ }
+}
+
+sub pp_rv2av {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $kid = $op->first;
+ if ($kid->name eq "const") { # constant list
+ my $av = $self->const_sv($kid);
+ return "(" . join(", ", map(const($_), $av->ARRAY)) . ")";
+ } else {
+ return $self->maybe_local($op, $cx, $self->rv2x($op, $cx, "\@"));
+ }
+ }
+
+sub is_subscriptable {
+ my $op = shift;
+ if ($op->name =~ /^[ahg]elem/) {
+ return 1;
+ } elsif ($op->name eq "entersub") {
+ my $kid = $op->first;
+ return 0 unless null $kid->sibling;
+ $kid = $kid->first;
+ $kid = $kid->sibling until null $kid->sibling;
+ return 0 if is_scope($kid);
+ $kid = $kid->first;
+ return 0 if $kid->name eq "gv";
+ return 0 if is_scalar($kid);
+ return is_subscriptable($kid);
+ } else {
+ return 0;
+ }
+}
+
+sub elem {
+ my $self = shift;
+ my ($op, $cx, $left, $right, $padname) = @_;
+ my($array, $idx) = ($op->first, $op->first->sibling);
+ unless ($array->name eq $padname) { # Maybe this has been fixed
+ $array = $array->first; # skip rv2av (or ex-rv2av in _53+)
+ }
+ if ($array->name eq $padname) {
+ $array = $self->padany($array);
+ } elsif (is_scope($array)) { # ${expr}[0]
+ $array = "{" . $self->deparse($array, 0) . "}";
+ } elsif ($array->name eq "gv") {
+ $array = $self->gv_name($self->gv_or_padgv($array));
+ if ($array !~ /::/) {
+ my $prefix = ($left eq '[' ? '@' : '%');
+ $array = $self->{curstash}.'::'.$array
+ if $self->lex_in_scope($prefix . $array);
+ }
+ } elsif (is_scalar $array) { # $x[0], $$x[0], ...
+ $array = $self->deparse($array, 24);
+ } else {
+ # $x[20][3]{hi} or expr->[20]
+ my $arrow = is_subscriptable($array) ? "" : "->";
+ return $self->deparse($array, 24) . $arrow .
+ $left . $self->deparse($idx, 1) . $right;
+ }
+ $idx = $self->deparse($idx, 1);
+
+ # Outer parens in an array index will confuse perl
+ # if we're interpolating in a regular expression, i.e.
+ # /$x$foo[(-1)]/ is *not* the same as /$x$foo[-1]/
+ #
+ # If $self->{parens}, then an initial '(' will
+ # definitely be paired with a final ')'. If
+ # !$self->{parens}, the misleading parens won't
+ # have been added in the first place.
+ #
+ # [You might think that we could get "(...)...(...)"
+ # where the initial and final parens do not match
+ # each other. But we can't, because the above would
+ # only happen if there's an infix binop between the
+ # two pairs of parens, and *that* means that the whole
+ # expression would be parenthesized as well.]
+ #
+ $idx =~ s/^\((.*)\)$/$1/ if $self->{'parens'};
+
+ # Hash-element braces will autoquote a bareword inside themselves.
+ # We need to make sure that C<$hash{warn()}> doesn't come out as
+ # C<$hash{warn}>, which has a quite different meaning. Currently
+ # B::Deparse will always quote strings, even if the string was a
+ # bareword in the original (i.e. the OPpCONST_BARE flag is ignored
+ # for constant strings.) So we can cheat slightly here - if we see
+ # a bareword, we know that it is supposed to be a function call.
+ #
+ $idx =~ s/^([A-Za-z_]\w*)$/$1()/;
+
+ return "\$" . $array . $left . $idx . $right;
+}
+
+sub pp_aelem { maybe_local(@_, elem(@_, "[", "]", "padav")) }
+sub pp_helem { maybe_local(@_, elem(@_, "{", "}", "padhv")) }
+
+sub pp_gelem {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my($glob, $part) = ($op->first, $op->last);
+ $glob = $glob->first; # skip rv2gv
+ $glob = $glob->first if $glob->name eq "rv2gv"; # this one's a bug
+ my $scope = is_scope($glob);
+ $glob = $self->deparse($glob, 0);
+ $part = $self->deparse($part, 1);
+ return "*" . ($scope ? "{$glob}" : $glob) . "{$part}";
+}
+
+sub slice {
+ my $self = shift;
+ my ($op, $cx, $left, $right, $regname, $padname) = @_;
+ my $last;
+ my(@elems, $kid, $array, $list);
+ if (class($op) eq "LISTOP") {
+ $last = $op->last;
+ } else { # ex-hslice inside delete()
+ for ($kid = $op->first; !null $kid->sibling; $kid = $kid->sibling) {}
+ $last = $kid;
+ }
+ $array = $last;
+ $array = $array->first
+ if $array->name eq $regname or $array->name eq "null";
+ if (is_scope($array)) {
+ $array = "{" . $self->deparse($array, 0) . "}";
+ } elsif ($array->name eq $padname) {
+ $array = $self->padany($array);
+ } else {
+ $array = $self->deparse($array, 24);
+ }
+ $kid = $op->first->sibling; # skip pushmark
+ if ($kid->name eq "list") {
+ $kid = $kid->first->sibling; # skip list, pushmark
+ for (; !null $kid; $kid = $kid->sibling) {
+ push @elems, $self->deparse($kid, 6);
+ }
+ $list = join(", ", @elems);
+ } else {
+ $list = $self->deparse($kid, 1);
+ }
+ return "\@" . $array . $left . $list . $right;
+}
+
+sub pp_aslice { maybe_local(@_, slice(@_, "[", "]", "rv2av", "padav")) }
+sub pp_hslice { maybe_local(@_, slice(@_, "{", "}", "rv2hv", "padhv")) }
+
+sub pp_lslice {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $idx = $op->first;
+ my $list = $op->last;
+ my(@elems, $kid);
+ $list = $self->deparse($list, 1);
+ $idx = $self->deparse($idx, 1);
+ return "($list)" . "[$idx]";
+}
+
+sub want_scalar {
+ my $op = shift;
+ return ($op->flags & OPf_WANT) == OPf_WANT_SCALAR;
+}
+
+sub want_list {
+ my $op = shift;
+ return ($op->flags & OPf_WANT) == OPf_WANT_LIST;
+}
+
+sub method {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $kid = $op->first->sibling; # skip pushmark
+ my($meth, $obj, @exprs);
+ if ($kid->name eq "list" and want_list $kid) {
+ # When an indirect object isn't a bareword but the args are in
+ # parens, the parens aren't part of the method syntax (the LLAFR
+ # doesn't apply), but they make a list with OPf_PARENS set that
+ # doesn't get flattened by the append_elem that adds the method,
+ # making a (object, arg1, arg2, ...) list where the object
+ # usually is. This can be distinguished from
+ # `($obj, $arg1, $arg2)->meth()' (which is legal if $arg2 is an
+ # object) because in the later the list is in scalar context
+ # as the left side of -> always is, while in the former
+ # the list is in list context as method arguments always are.
+ # (Good thing there aren't method prototypes!)
+ $meth = $kid->sibling;
+ $kid = $kid->first->sibling; # skip pushmark
+ $obj = $kid;
+ $kid = $kid->sibling;
+ for (; not null $kid; $kid = $kid->sibling) {
+ push @exprs, $self->deparse($kid, 6);
+ }
+ } else {
+ $obj = $kid;
+ $kid = $kid->sibling;
+ for (; !null ($kid->sibling) && $kid->name ne "method_named";
+ $kid = $kid->sibling) {
+ push @exprs, $self->deparse($kid, 6);
+ }
+ $meth = $kid;
+ }
+ $obj = $self->deparse($obj, 24);
+ if ($meth->name eq "method_named") {
+ $meth = $self->const_sv($meth)->PV;
+ } else {
+ $meth = $meth->first;
+ if ($meth->name eq "const") {
+ # As of 5.005_58, this case is probably obsoleted by the
+ # method_named case above
+ $meth = $self->const_sv($meth)->PV; # needs to be bare
+ } else {
+ $meth = $self->deparse($meth, 1);
+ }
+ }
+ my $args = join(", ", @exprs);
+ $kid = $obj . "->" . $meth;
+ if (length $args) {
+ return $kid . "(" . $args . ")"; # parens mandatory
+ } else {
+ return $kid;
+ }
+}
+
+# returns "&" if the prototype doesn't match the args,
+# or ("", $args_after_prototype_demunging) if it does.
+sub check_proto {
+ my $self = shift;
+ return "&" if $self->{'noproto'};
+ my($proto, @args) = @_;
+ my($arg, $real);
+ my $doneok = 0;
+ my @reals;
+ # An unbackslashed @ or % gobbles up the rest of the args
+ 1 while $proto =~ s/(?<!\\)([@%])[^\]]+$/$1/;
+ while ($proto) {
+ $proto =~ s/^(\\?[\$\@&%*]|\\\[[\$\@&%*]+\]|;)//;
+ my $chr = $1;
+ if ($chr eq "") {
+ return "&" if @args;
+ } elsif ($chr eq ";") {
+ $doneok = 1;
+ } elsif ($chr eq "@" or $chr eq "%") {
+ push @reals, map($self->deparse($_, 6), @args);
+ @args = ();
+ } else {
+ $arg = shift @args;
+ last unless $arg;
+ if ($chr eq "\$") {
+ if (want_scalar $arg) {
+ push @reals, $self->deparse($arg, 6);
+ } else {
+ return "&";
+ }
+ } elsif ($chr eq "&") {
+ if ($arg->name =~ /^(s?refgen|undef)$/) {
+ push @reals, $self->deparse($arg, 6);
+ } else {
+ return "&";
+ }
+ } elsif ($chr eq "*") {
+ if ($arg->name =~ /^s?refgen$/
+ and $arg->first->first->name eq "rv2gv")
+ {
+ $real = $arg->first->first; # skip refgen, null
+ if ($real->first->name eq "gv") {
+ push @reals, $self->deparse($real, 6);
+ } else {
+ push @reals, $self->deparse($real->first, 6);
+ }
+ } else {
+ return "&";
+ }
+ } elsif (substr($chr, 0, 1) eq "\\") {
+ $chr =~ tr/\\[]//d;
+ if ($arg->name =~ /^s?refgen$/ and
+ !null($real = $arg->first) and
+ ($chr =~ /\$/ && is_scalar($real->first)
+ or ($chr =~ /@/
+ && class($real->first->sibling) ne 'NULL'
+ && $real->first->sibling->name
+ =~ /^(rv2|pad)av$/)
+ or ($chr =~ /%/
+ && class($real->first->sibling) ne 'NULL'
+ && $real->first->sibling->name
+ =~ /^(rv2|pad)hv$/)
+ #or ($chr =~ /&/ # This doesn't work
+ # && $real->first->name eq "rv2cv")
+ or ($chr =~ /\*/
+ && $real->first->name eq "rv2gv")))
+ {
+ push @reals, $self->deparse($real, 6);
+ } else {
+ return "&";
+ }
+ }
+ }
+ }
+ return "&" if $proto and !$doneok; # too few args and no `;'
+ return "&" if @args; # too many args
+ return ("", join ", ", @reals);
+}
+
+sub pp_entersub {
+ my $self = shift;
+ my($op, $cx) = @_;
+ return $self->method($op, $cx) unless null $op->first->sibling;
+ my $prefix = "";
+ my $amper = "";
+ my($kid, @exprs);
+ if ($op->flags & OPf_SPECIAL && !($op->flags & OPf_MOD)) {
+ $prefix = "do ";
+ } elsif ($op->private & OPpENTERSUB_AMPER) {
+ $amper = "&";
+ }
+ $kid = $op->first;
+ $kid = $kid->first->sibling; # skip ex-list, pushmark
+ for (; not null $kid->sibling; $kid = $kid->sibling) {
+ push @exprs, $kid;
+ }
+ my $simple = 0;
+ my $proto = undef;
+ if (is_scope($kid)) {
+ $amper = "&";
+ $kid = "{" . $self->deparse($kid, 0) . "}";
+ } elsif ($kid->first->name eq "gv") {
+ my $gv = $self->gv_or_padgv($kid->first);
+ if (class($gv->CV) ne "SPECIAL") {
+ $proto = $gv->CV->PV if $gv->CV->FLAGS & SVf_POK;
+ }
+ $simple = 1; # only calls of named functions can be prototyped
+ $kid = $self->deparse($kid, 24);
+ } elsif (is_scalar ($kid->first) && $kid->first->name ne 'rv2cv') {
+ $amper = "&";
+ $kid = $self->deparse($kid, 24);
+ } else {
+ $prefix = "";
+ my $arrow = is_subscriptable($kid->first) ? "" : "->";
+ $kid = $self->deparse($kid, 24) . $arrow;
+ }
+
+ # Doesn't matter how many prototypes there are, if
+ # they haven't happened yet!
+ my $declared;
+ {
+ no strict 'refs';
+ no warnings 'uninitialized';
+ $declared = exists $self->{'subs_declared'}{$kid}
+ || (
+ defined &{ %{$self->{'curstash'}."::"}->{$kid} }
+ && !exists
+ $self->{'subs_deparsed'}{$self->{'curstash'}."::".$kid}
+ && defined prototype $self->{'curstash'}."::".$kid
+ );
+ if (!$declared && defined($proto)) {
+ # Avoid "too early to check prototype" warning
+ ($amper, $proto) = ('&');
+ }
+ }
+
+ my $args;
+ if ($declared and defined $proto and not $amper) {
+ ($amper, $args) = $self->check_proto($proto, @exprs);
+ if ($amper eq "&") {
+ $args = join(", ", map($self->deparse($_, 6), @exprs));
+ }
+ } else {
+ $args = join(", ", map($self->deparse($_, 6), @exprs));
+ }
+ if ($prefix or $amper) {
+ if ($op->flags & OPf_STACKED) {
+ return $prefix . $amper . $kid . "(" . $args . ")";
+ } else {
+ return $prefix . $amper. $kid;
+ }
+ } else {
+ # glob() invocations can be translated into calls of
+ # CORE::GLOBAL::glob with a second parameter, a number.
+ # Reverse this.
+ if ($kid eq "CORE::GLOBAL::glob") {
+ $kid = "glob";
+ $args =~ s/\s*,[^,]+$//;
+ }
+
+ # It's a syntax error to call CORE::GLOBAL::foo without a prefix,
+ # so it must have been translated from a keyword call. Translate
+ # it back.
+ $kid =~ s/^CORE::GLOBAL:://;
+
+ if (!$declared) {
+ return "$kid(" . $args . ")";
+ } elsif (defined $proto and $proto eq "") {
+ return $kid;
+ } elsif (defined $proto and $proto eq "\$" and is_scalar($exprs[0])) {
+ return $self->maybe_parens_func($kid, $args, $cx, 16);
+ } elsif (defined($proto) && $proto or $simple) {
+ return $self->maybe_parens_func($kid, $args, $cx, 5);
+ } else {
+ return "$kid(" . $args . ")";
+ }
+ }
+}
+
+sub pp_enterwrite { unop(@_, "write") }
+
+# escape things that cause interpolation in double quotes,
+# but not character escapes
+sub uninterp {
+ my($str) = @_;
+ $str =~ s/(^|\G|[^\\])((?:\\\\)*)([\$\@]|\\[uUlLQE])/$1$2\\$3/g;
+ return $str;
+}
+
+{
+my $bal;
+BEGIN {
+ use re "eval";
+ # Matches any string which is balanced with respect to {braces}
+ $bal = qr(
+ (?:
+ [^\\{}]
+ | \\\\
+ | \\[{}]
+ | \{(??{$bal})\}
+ )*
+ )x;
+}
+
+# the same, but treat $|, $), $( and $ at the end of the string differently
+sub re_uninterp {
+ my($str) = @_;
+
+ $str =~ s/
+ ( ^|\G # $1
+ | [^\\]
+ )
+
+ ( # $2
+ (?:\\\\)*
+ )
+
+ ( # $3
+ (\(\?\??\{$bal\}\)) # $4
+ | [\$\@]
+ (?!\||\)|\(|$)
+ | \\[uUlLQE]
+ )
+
+ /length($4) ? "$1$2$4" : "$1$2\\$3"/xeg;
+
+ return $str;
+}
+
+# This is for regular expressions with the /x modifier
+# We have to leave comments unmangled.
+sub re_uninterp_extended {
+ my($str) = @_;
+
+ $str =~ s/
+ ( ^|\G # $1
+ | [^\\]
+ )
+
+ ( # $2
+ (?:\\\\)*
+ )
+
+ ( # $3
+ ( \(\?\??\{$bal\}\) # $4 (skip over (?{}) and (??{}) blocks)
+ | \#[^\n]* # (skip over comments)
+ )
+ | [\$\@]
+ (?!\||\)|\(|$|\s)
+ | \\[uUlLQE]
+ )
+
+ /length($4) ? "$1$2$4" : "$1$2\\$3"/xeg;
+
+ return $str;
+}
+}
+
+my %unctrl = # portable to to EBCDIC
+ (
+ "\c@" => '\c@', # unused
+ "\cA" => '\cA',
+ "\cB" => '\cB',
+ "\cC" => '\cC',
+ "\cD" => '\cD',
+ "\cE" => '\cE',
+ "\cF" => '\cF',
+ "\cG" => '\cG',
+ "\cH" => '\cH',
+ "\cI" => '\cI',
+ "\cJ" => '\cJ',
+ "\cK" => '\cK',
+ "\cL" => '\cL',
+ "\cM" => '\cM',
+ "\cN" => '\cN',
+ "\cO" => '\cO',
+ "\cP" => '\cP',
+ "\cQ" => '\cQ',
+ "\cR" => '\cR',
+ "\cS" => '\cS',
+ "\cT" => '\cT',
+ "\cU" => '\cU',
+ "\cV" => '\cV',
+ "\cW" => '\cW',
+ "\cX" => '\cX',
+ "\cY" => '\cY',
+ "\cZ" => '\cZ',
+ "\c[" => '\c[', # unused
+ "\c\\" => '\c\\', # unused
+ "\c]" => '\c]', # unused
+ "\c_" => '\c_', # unused
+ );
+
+# character escapes, but not delimiters that might need to be escaped
+sub escape_str { # ASCII, UTF8
+ my($str) = @_;
+ $str =~ s/(.)/ord($1) > 255 ? sprintf("\\x{%x}", ord($1)) : $1/eg;
+ $str =~ s/\a/\\a/g;
+# $str =~ s/\cH/\\b/g; # \b means something different in a regex
+ $str =~ s/\t/\\t/g;
+ $str =~ s/\n/\\n/g;
+ $str =~ s/\e/\\e/g;
+ $str =~ s/\f/\\f/g;
+ $str =~ s/\r/\\r/g;
+ $str =~ s/([\cA-\cZ])/$unctrl{$1}/ge;
+ $str =~ s/([[:^print:]])/sprintf("\\%03o", ord($1))/ge;
+ return $str;
+}
+
+# For regexes with the /x modifier.
+# Leave whitespace unmangled.
+sub escape_extended_re {
+ my($str) = @_;
+ $str =~ s/(.)/ord($1) > 255 ? sprintf("\\x{%x}", ord($1)) : $1/eg;
+ $str =~ s/([[:^print:]])/
+ ($1 =~ y! \t\n!!) ? $1 : sprintf("\\%03o", ord($1))/ge;
+ $str =~ s/\n/\n\f/g;
+ return $str;
+}
+
+# Don't do this for regexen
+sub unback {
+ my($str) = @_;
+ $str =~ s/\\/\\\\/g;
+ return $str;
+}
+
+# Remove backslashes which precede literal control characters,
+# to avoid creating ambiguity when we escape the latter.
+sub re_unback {
+ my($str) = @_;
+
+ # the insane complexity here is due to the behaviour of "\c\"
+ $str =~ s/(^|[^\\]|\\c\\)(?<!\\c)\\(\\\\)*(?=[[:^print:]])/$1$2/g;
+ return $str;
+}
+
+sub balanced_delim {
+ my($str) = @_;
+ my @str = split //, $str;
+ my($ar, $open, $close, $fail, $c, $cnt);
+ for $ar (['[',']'], ['(',')'], ['<','>'], ['{','}']) {
+ ($open, $close) = @$ar;
+ $fail = 0; $cnt = 0;
+ for $c (@str) {
+ if ($c eq $open) {
+ $cnt++;
+ } elsif ($c eq $close) {
+ $cnt--;
+ if ($cnt < 0) {
+ # qq()() isn't ")("
+ $fail = 1;
+ last;
+ }
+ }
+ }
+ $fail = 1 if $cnt != 0;
+ return ($open, "$open$str$close") if not $fail;
+ }
+ return ("", $str);
+}
+
+sub single_delim {
+ my($q, $default, $str) = @_;
+ return "$default$str$default" if $default and index($str, $default) == -1;
+ if ($q ne 'qr') {
+ (my $succeed, $str) = balanced_delim($str);
+ return "$q$str" if $succeed;
+ }
+ for my $delim ('/', '"', '#') {
+ return "$q$delim" . $str . $delim if index($str, $delim) == -1;
+ }
+ if ($default) {
+ $str =~ s/$default/\\$default/g;
+ return "$default$str$default";
+ } else {
+ $str =~ s[/][\\/]g;
+ return "$q/$str/";
+ }
+}
+
+sub const {
+ my $sv = shift;
+ if (class($sv) eq "SPECIAL") {
+ return ('undef', '1', '0')[$$sv-1]; # sv_undef, sv_yes, sv_no
+ } elsif (class($sv) eq "NULL") {
+ return 'undef';
+ } elsif ($sv->FLAGS & SVf_IOK) {
+ return $sv->int_value;
+ } elsif ($sv->FLAGS & SVf_NOK) {
+ # try the default stringification
+ my $r = "".$sv->NV;
+ if ($r =~ /e/) {
+ # If it's in scientific notation, we might have lost information
+ return sprintf("%.20e", $sv->NV);
+ }
+ return $r;
+ } elsif ($sv->FLAGS & SVf_ROK && $sv->can("RV")) {
+ return "\\(" . const($sv->RV) . ")"; # constant folded
+ } elsif ($sv->FLAGS & SVf_POK) {
+ my $str = $sv->PV;
+ if ($str =~ /[^ -~]/) { # ASCII for non-printing
+ return single_delim("qq", '"', uninterp escape_str unback $str);
+ } else {
+ return single_delim("q", "'", unback $str);
+ }
+ } else {
+ return "undef";
+ }
+}
+
+sub const_sv {
+ my $self = shift;
+ my $op = shift;
+ my $sv = $op->sv;
+ # the constant could be in the pad (under useithreads)
+ $sv = $self->padval($op->targ) unless $$sv;
+ return $sv;
+}
+
+sub pp_const {
+ my $self = shift;
+ my($op, $cx) = @_;
+ if ($op->private & OPpCONST_ARYBASE) {
+ return '$[';
+ }
+# if ($op->private & OPpCONST_BARE) { # trouble with `=>' autoquoting
+# return $self->const_sv($op)->PV;
+# }
+ my $sv = $self->const_sv($op);
+# return const($sv);
+ my $c = const $sv;
+ return $c =~ /^-\d/ ? $self->maybe_parens($c, $cx, 21) : $c;
+}
+
+sub dq {
+ my $self = shift;
+ my $op = shift;
+ my $type = $op->name;
+ if ($type eq "const") {
+ return '$[' if $op->private & OPpCONST_ARYBASE;
+ return uninterp(escape_str(unback($self->const_sv($op)->as_string)));
+ } elsif ($type eq "concat") {
+ my $first = $self->dq($op->first);
+ my $last = $self->dq($op->last);
+
+ # Disambiguate "${foo}bar", "${foo}{bar}", "${foo}[1]"
+ ($last =~ /^[A-Z\\\^\[\]_?]/ &&
+ $first =~ s/([\$@])\^$/${1}{^}/) # "${^}W" etc
+ || ($last =~ /^[{\[\w_]/ &&
+ $first =~ s/([\$@])([A-Za-z_]\w*)$/${1}{$2}/);
+
+ return $first . $last;
+ } elsif ($type eq "uc") {
+ return '\U' . $self->dq($op->first->sibling) . '\E';
+ } elsif ($type eq "lc") {
+ return '\L' . $self->dq($op->first->sibling) . '\E';
+ } elsif ($type eq "ucfirst") {
+ return '\u' . $self->dq($op->first->sibling);
+ } elsif ($type eq "lcfirst") {
+ return '\l' . $self->dq($op->first->sibling);
+ } elsif ($type eq "quotemeta") {
+ return '\Q' . $self->dq($op->first->sibling) . '\E';
+ } elsif ($type eq "join") {
+ return $self->deparse($op->last, 26); # was join($", @ary)
+ } else {
+ return $self->deparse($op, 26);
+ }
+}
+
+sub pp_backtick {
+ my $self = shift;
+ my($op, $cx) = @_;
+ # skip pushmark
+ return single_delim("qx", '`', $self->dq($op->first->sibling));
+}
+
+sub dquote {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $kid = $op->first->sibling; # skip ex-stringify, pushmark
+ return $self->deparse($kid, $cx) if $self->{'unquote'};
+ $self->maybe_targmy($kid, $cx,
+ sub {single_delim("qq", '"', $self->dq($_[1]))});
+}
+
+# OP_STRINGIFY is a listop, but it only ever has one arg
+sub pp_stringify { maybe_targmy(@_, \&dquote) }
+
+# tr/// and s/// (and tr[][], tr[]//, tr###, etc)
+# note that tr(from)/to/ is OK, but not tr/from/(to)
+sub double_delim {
+ my($from, $to) = @_;
+ my($succeed, $delim);
+ if ($from !~ m[/] and $to !~ m[/]) {
+ return "/$from/$to/";
+ } elsif (($succeed, $from) = balanced_delim($from) and $succeed) {
+ if (($succeed, $to) = balanced_delim($to) and $succeed) {
+ return "$from$to";
+ } else {
+ for $delim ('/', '"', '#') { # note no `'' -- s''' is special
+ return "$from$delim$to$delim" if index($to, $delim) == -1;
+ }
+ $to =~ s[/][\\/]g;
+ return "$from/$to/";
+ }
+ } else {
+ for $delim ('/', '"', '#') { # note no '
+ return "$delim$from$delim$to$delim"
+ if index($to . $from, $delim) == -1;
+ }
+ $from =~ s[/][\\/]g;
+ $to =~ s[/][\\/]g;
+ return "/$from/$to/";
+ }
+}
+
+# Only used by tr///, so backslashes hyphens
+sub pchr { # ASCII
+ my($n) = @_;
+ if ($n == ord '\\') {
+ return '\\\\';
+ } elsif ($n == ord "-") {
+ return "\\-";
+ } elsif ($n >= ord(' ') and $n <= ord('~')) {
+ return chr($n);
+ } elsif ($n == ord "\a") {
+ return '\\a';
+ } elsif ($n == ord "\b") {
+ return '\\b';
+ } elsif ($n == ord "\t") {
+ return '\\t';
+ } elsif ($n == ord "\n") {
+ return '\\n';
+ } elsif ($n == ord "\e") {
+ return '\\e';
+ } elsif ($n == ord "\f") {
+ return '\\f';
+ } elsif ($n == ord "\r") {
+ return '\\r';
+ } elsif ($n >= ord("\cA") and $n <= ord("\cZ")) {
+ return '\\c' . chr(ord("@") + $n);
+ } else {
+# return '\x' . sprintf("%02x", $n);
+ return '\\' . sprintf("%03o", $n);
+ }
+}
+
+sub collapse {
+ my(@chars) = @_;
+ my($str, $c, $tr) = ("");
+ for ($c = 0; $c < @chars; $c++) {
+ $tr = $chars[$c];
+ $str .= pchr($tr);
+ if ($c <= $#chars - 2 and $chars[$c + 1] == $tr + 1 and
+ $chars[$c + 2] == $tr + 2)
+ {
+ for (; $c <= $#chars-1 and $chars[$c + 1] == $chars[$c] + 1; $c++)
+ {}
+ $str .= "-";
+ $str .= pchr($chars[$c]);
+ }
+ }
+ return $str;
+}
+
+sub tr_decode_byte {
+ my($table, $flags) = @_;
+ my(@table) = unpack("s*", $table);
+ splice @table, 0x100, 1; # Number of subsequent elements
+ my($c, $tr, @from, @to, @delfrom, $delhyphen);
+ if ($table[ord "-"] != -1 and
+ $table[ord("-") - 1] == -1 || $table[ord("-") + 1] == -1)
+ {
+ $tr = $table[ord "-"];
+ $table[ord "-"] = -1;
+ if ($tr >= 0) {
+ @from = ord("-");
+ @to = $tr;
+ } else { # -2 ==> delete
+ $delhyphen = 1;
+ }
+ }
+ for ($c = 0; $c < @table; $c++) {
+ $tr = $table[$c];
+ if ($tr >= 0) {
+ push @from, $c; push @to, $tr;
+ } elsif ($tr == -2) {
+ push @delfrom, $c;
+ }
+ }
+ @from = (@from, @delfrom);
+ if ($flags & OPpTRANS_COMPLEMENT) {
+ my @newfrom = ();
+ my %from;
+ @from{@from} = (1) x @from;
+ for ($c = 0; $c < 256; $c++) {
+ push @newfrom, $c unless $from{$c};
+ }
+ @from = @newfrom;
+ }
+ unless ($flags & OPpTRANS_DELETE || !@to) {
+ pop @to while $#to and $to[$#to] == $to[$#to -1];
+ }
+ my($from, $to);
+ $from = collapse(@from);
+ $to = collapse(@to);
+ $from .= "-" if $delhyphen;
+ return ($from, $to);
+}
+
+sub tr_chr {
+ my $x = shift;
+ if ($x == ord "-") {
+ return "\\-";
+ } elsif ($x == ord "\\") {
+ return "\\\\";
+ } else {
+ return chr $x;
+ }
+}
+
+# XXX This doesn't yet handle all cases correctly either
+
+sub tr_decode_utf8 {
+ my($swash_hv, $flags) = @_;
+ my %swash = $swash_hv->ARRAY;
+ my $final = undef;
+ $final = $swash{'FINAL'}->IV if exists $swash{'FINAL'};
+ my $none = $swash{"NONE"}->IV;
+ my $extra = $none + 1;
+ my(@from, @delfrom, @to);
+ my $line;
+ foreach $line (split /\n/, $swash{'LIST'}->PV) {
+ my($min, $max, $result) = split(/\t/, $line);
+ $min = hex $min;
+ if (length $max) {
+ $max = hex $max;
+ } else {
+ $max = $min;
+ }
+ $result = hex $result;
+ if ($result == $extra) {
+ push @delfrom, [$min, $max];
+ } else {
+ push @from, [$min, $max];
+ push @to, [$result, $result + $max - $min];
+ }
+ }
+ for my $i (0 .. $#from) {
+ if ($from[$i][0] == ord '-') {
+ unshift @from, splice(@from, $i, 1);
+ unshift @to, splice(@to, $i, 1);
+ last;
+ } elsif ($from[$i][1] == ord '-') {
+ $from[$i][1]--;
+ $to[$i][1]--;
+ unshift @from, ord '-';
+ unshift @to, ord '-';
+ last;
+ }
+ }
+ for my $i (0 .. $#delfrom) {
+ if ($delfrom[$i][0] == ord '-') {
+ push @delfrom, splice(@delfrom, $i, 1);
+ last;
+ } elsif ($delfrom[$i][1] == ord '-') {
+ $delfrom[$i][1]--;
+ push @delfrom, ord '-';
+ last;
+ }
+ }
+ if (defined $final and $to[$#to][1] != $final) {
+ push @to, [$final, $final];
+ }
+ push @from, @delfrom;
+ if ($flags & OPpTRANS_COMPLEMENT) {
+ my @newfrom;
+ my $next = 0;
+ for my $i (0 .. $#from) {
+ push @newfrom, [$next, $from[$i][0] - 1];
+ $next = $from[$i][1] + 1;
+ }
+ @from = ();
+ for my $range (@newfrom) {
+ if ($range->[0] <= $range->[1]) {
+ push @from, $range;
+ }
+ }
+ }
+ my($from, $to, $diff);
+ for my $chunk (@from) {
+ $diff = $chunk->[1] - $chunk->[0];
+ if ($diff > 1) {
+ $from .= tr_chr($chunk->[0]) . "-" . tr_chr($chunk->[1]);
+ } elsif ($diff == 1) {
+ $from .= tr_chr($chunk->[0]) . tr_chr($chunk->[1]);
+ } else {
+ $from .= tr_chr($chunk->[0]);
+ }
+ }
+ for my $chunk (@to) {
+ $diff = $chunk->[1] - $chunk->[0];
+ if ($diff > 1) {
+ $to .= tr_chr($chunk->[0]) . "-" . tr_chr($chunk->[1]);
+ } elsif ($diff == 1) {
+ $to .= tr_chr($chunk->[0]) . tr_chr($chunk->[1]);
+ } else {
+ $to .= tr_chr($chunk->[0]);
+ }
+ }
+ #$final = sprintf("%04x", $final) if defined $final;
+ #$none = sprintf("%04x", $none) if defined $none;
+ #$extra = sprintf("%04x", $extra) if defined $extra;
+ #print STDERR "final: $final\n none: $none\nextra: $extra\n";
+ #print STDERR $swash{'LIST'}->PV;
+ return (escape_str($from), escape_str($to));
+}
+
+sub pp_trans {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my($from, $to);
+ if (class($op) eq "PVOP") {
+ ($from, $to) = tr_decode_byte($op->pv, $op->private);
+ } else { # class($op) eq "SVOP"
+ ($from, $to) = tr_decode_utf8($op->sv->RV, $op->private);
+ }
+ my $flags = "";
+ $flags .= "c" if $op->private & OPpTRANS_COMPLEMENT;
+ $flags .= "d" if $op->private & OPpTRANS_DELETE;
+ $to = "" if $from eq $to and $flags eq "";
+ $flags .= "s" if $op->private & OPpTRANS_SQUASH;
+ return "tr" . double_delim($from, $to) . $flags;
+}
+
+# Like dq(), but different
+sub re_dq {
+ my $self = shift;
+ my ($op, $extended) = @_;
+
+ my $type = $op->name;
+ if ($type eq "const") {
+ return '$[' if $op->private & OPpCONST_ARYBASE;
+ my $unbacked = re_unback($self->const_sv($op)->as_string);
+ return re_uninterp_extended(escape_extended_re($unbacked))
+ if $extended;
+ return re_uninterp(escape_str($unbacked));
+ } elsif ($type eq "concat") {
+ my $first = $self->re_dq($op->first, $extended);
+ my $last = $self->re_dq($op->last, $extended);
+
+ # Disambiguate "${foo}bar", "${foo}{bar}", "${foo}[1]"
+ ($last =~ /^[A-Z\\\^\[\]_?]/ &&
+ $first =~ s/([\$@])\^$/${1}{^}/) # "${^}W" etc
+ || ($last =~ /^[{\[\w_]/ &&
+ $first =~ s/([\$@])([A-Za-z_]\w*)$/${1}{$2}/);
+
+ return $first . $last;
+ } elsif ($type eq "uc") {
+ return '\U' . $self->re_dq($op->first->sibling, $extended) . '\E';
+ } elsif ($type eq "lc") {
+ return '\L' . $self->re_dq($op->first->sibling, $extended) . '\E';
+ } elsif ($type eq "ucfirst") {
+ return '\u' . $self->re_dq($op->first->sibling, $extended);
+ } elsif ($type eq "lcfirst") {
+ return '\l' . $self->re_dq($op->first->sibling, $extended);
+ } elsif ($type eq "quotemeta") {
+ return '\Q' . $self->re_dq($op->first->sibling, $extended) . '\E';
+ } elsif ($type eq "join") {
+ return $self->deparse($op->last, 26); # was join($", @ary)
+ } else {
+ return $self->deparse($op, 26);
+ }
+}
+
+sub pure_string {
+ my ($self, $op) = @_;
+ my $type = $op->name;
+
+ if ($type eq 'const') {
+ return 1;
+ }
+ elsif ($type =~ /^[ul]c(first)?$/ || $type eq 'quotemeta') {
+ return $self->pure_string($op->first->sibling);
+ }
+ elsif ($type eq 'join') {
+ my $join_op = $op->first->sibling; # Skip pushmark
+ return 0 unless $join_op->name eq 'null' && $join_op->targ eq OP_RV2SV;
+
+ my $gvop = $join_op->first;
+ return 0 unless $gvop->name eq 'gvsv';
+ return 0 unless '"' eq $self->gv_name($self->gv_or_padgv($gvop));
+
+ return 0 unless ${$join_op->sibling} eq ${$op->last};
+ return 0 unless $op->last->name =~ /^(rv2|pad)av$/;
+ }
+ elsif ($type eq 'concat') {
+ return $self->pure_string($op->first)
+ && $self->pure_string($op->last);
+ }
+ elsif (is_scalar($op) || $type =~ /^[ah]elem(fast)?$/) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+
+ return 1;
+}
+
+sub regcomp {
+ my $self = shift;
+ my($op, $cx, $extended) = @_;
+ my $kid = $op->first;
+ $kid = $kid->first if $kid->name eq "regcmaybe";
+ $kid = $kid->first if $kid->name eq "regcreset";
+ return ($self->re_dq($kid, $extended), 1) if $self->pure_string($kid);
+ return ($self->deparse($kid, $cx), 0);
+}
+
+sub pp_regcomp {
+ my ($self, $op, $cx) = @_;
+ return (($self->regcomp($op, $cx, 0))[0]);
+}
+
+# osmic acid -- see osmium tetroxide
+
+my %matchwords;
+map($matchwords{join "", sort split //, $_} = $_, 'cig', 'cog', 'cos', 'cogs',
+ 'cox', 'go', 'is', 'ism', 'iso', 'mig', 'mix', 'osmic', 'ox', 'sic',
+ 'sig', 'six', 'smog', 'so', 'soc', 'sog', 'xi');
+
+sub matchop {
+ my $self = shift;
+ my($op, $cx, $name, $delim) = @_;
+ my $kid = $op->first;
+ my ($binop, $var, $re) = ("", "", "");
+ if ($op->flags & OPf_STACKED) {
+ $binop = 1;
+ $var = $self->deparse($kid, 20);
+ $kid = $kid->sibling;
+ }
+ my $quote = 1;
+ my $extended = ($op->pmflags & PMf_EXTENDED);
+ if (null $kid) {
+ my $unbacked = re_unback($op->precomp);
+ if ($extended) {
+ $re = re_uninterp_extended(escape_extended_re($unbacked));
+ } else {
+ $re = re_uninterp(escape_str(re_unback($op->precomp)));
+ }
+ } elsif ($kid->name ne 'regcomp') {
+ carp("found ".$kid->name." where regcomp expected");
+ } else {
+ ($re, $quote) = $self->regcomp($kid, 1, $extended);
+ }
+ my $flags = "";
+ $flags .= "c" if $op->pmflags & PMf_CONTINUE;
+ $flags .= "g" if $op->pmflags & PMf_GLOBAL;
+ $flags .= "i" if $op->pmflags & PMf_FOLD;
+ $flags .= "m" if $op->pmflags & PMf_MULTILINE;
+ $flags .= "o" if $op->pmflags & PMf_KEEP;
+ $flags .= "s" if $op->pmflags & PMf_SINGLELINE;
+ $flags .= "x" if $op->pmflags & PMf_EXTENDED;
+ $flags = $matchwords{$flags} if $matchwords{$flags};
+ if ($op->pmflags & PMf_ONCE) { # only one kind of delimiter works here
+ $re =~ s/\?/\\?/g;
+ $re = "?$re?";
+ } elsif ($quote) {
+ $re = single_delim($name, $delim, $re);
+ }
+ $re = $re . $flags if $quote;
+ if ($binop) {
+ return $self->maybe_parens("$var =~ $re", $cx, 20);
+ } else {
+ return $re;
+ }
+}
+
+sub pp_match { matchop(@_, "m", "/") }
+sub pp_pushre { matchop(@_, "m", "/") }
+sub pp_qr { matchop(@_, "qr", "") }
+
+sub pp_split {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my($kid, @exprs, $ary, $expr);
+ $kid = $op->first;
+ # under ithreads pmreplroot is an integer, not an SV
+ my $replroot = $kid->pmreplroot;
+ if ( ( ref($replroot) && $$replroot ) ||
+ ( !ref($replroot) && $replroot ) ) {
+ $ary = $self->stash_variable('@', $self->gv_name($kid->pmreplroot));
+ }
+ for (; !null($kid); $kid = $kid->sibling) {
+ push @exprs, $self->deparse($kid, 6);
+ }
+
+ # handle special case of split(), and split(" ") that compiles to /\s+/
+ $kid = $op->first;
+ if ($kid->flags & OPf_SPECIAL
+ && $exprs[0] eq '/\\s+/'
+ && $kid->pmflags & PMf_SKIPWHITE ) {
+ $exprs[0] = '" "';
+ }
+
+ $expr = "split(" . join(", ", @exprs) . ")";
+ if ($ary) {
+ return $self->maybe_parens("$ary = $expr", $cx, 7);
+ } else {
+ return $expr;
+ }
+}
+
+# oxime -- any of various compounds obtained chiefly by the action of
+# hydroxylamine on aldehydes and ketones and characterized by the
+# bivalent grouping C=NOH [Webster's Tenth]
+
+my %substwords;
+map($substwords{join "", sort split //, $_} = $_, 'ego', 'egoism', 'em',
+ 'es', 'ex', 'exes', 'gee', 'go', 'goes', 'ie', 'ism', 'iso', 'me',
+ 'meese', 'meso', 'mig', 'mix', 'os', 'ox', 'oxime', 'see', 'seem',
+ 'seg', 'sex', 'sig', 'six', 'smog', 'sog', 'some', 'xi');
+
+sub pp_subst {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $kid = $op->first;
+ my($binop, $var, $re, $repl) = ("", "", "", "");
+ if ($op->flags & OPf_STACKED) {
+ $binop = 1;
+ $var = $self->deparse($kid, 20);
+ $kid = $kid->sibling;
+ }
+ my $flags = "";
+ if (null($op->pmreplroot)) {
+ $repl = $self->dq($kid);
+ $kid = $kid->sibling;
+ } else {
+ $repl = $op->pmreplroot->first; # skip substcont
+ while ($repl->name eq "entereval") {
+ $repl = $repl->first;
+ $flags .= "e";
+ }
+ if ($op->pmflags & PMf_EVAL) {
+ $repl = $self->deparse($repl, 0);
+ } else {
+ $repl = $self->dq($repl);
+ }
+ }
+ my $extended = ($op->pmflags & PMf_EXTENDED);
+ if (null $kid) {
+ my $unbacked = re_unback($op->precomp);
+ if ($extended) {
+ $re = re_uninterp_extended(escape_extended_re($unbacked));
+ }
+ else {
+ $re = re_uninterp(escape_str($unbacked));
+ }
+ } else {
+ ($re) = $self->regcomp($kid, 1, $extended);
+ }
+ $flags .= "e" if $op->pmflags & PMf_EVAL;
+ $flags .= "g" if $op->pmflags & PMf_GLOBAL;
+ $flags .= "i" if $op->pmflags & PMf_FOLD;
+ $flags .= "m" if $op->pmflags & PMf_MULTILINE;
+ $flags .= "o" if $op->pmflags & PMf_KEEP;
+ $flags .= "s" if $op->pmflags & PMf_SINGLELINE;
+ $flags .= "x" if $extended;
+ $flags = $substwords{$flags} if $substwords{$flags};
+ if ($binop) {
+ return $self->maybe_parens("$var =~ s"
+ . double_delim($re, $repl) . $flags,
+ $cx, 20);
+ } else {
+ return "s". double_delim($re, $repl) . $flags;
+ }
+}
+
+1;
+__END__
+
+=head1 NAME
+
+B::Deparse - Perl compiler backend to produce perl code
+
+=head1 SYNOPSIS
+
+B<perl> B<-MO=Deparse>[B<,-u>I<PACKAGE>][B<,-p>][B<,-q>][B<,-l>]
+ [B<,-s>I<LETTERS>][B<,-x>I<LEVEL>] I<prog.pl>
+
+=head1 DESCRIPTION
+
+B::Deparse is a backend module for the Perl compiler that generates
+perl source code, based on the internal compiled structure that perl
+itself creates after parsing a program. The output of B::Deparse won't
+be exactly the same as the original source, since perl doesn't keep
+track of comments or whitespace, and there isn't a one-to-one
+correspondence between perl's syntactical constructions and their
+compiled form, but it will often be close. When you use the B<-p>
+option, the output also includes parentheses even when they are not
+required by precedence, which can make it easy to see if perl is
+parsing your expressions the way you intended.
+
+Please note that this module is mainly new and untested code and is
+still under development, so it may change in the future.
+
+=head1 OPTIONS
+
+As with all compiler backend options, these must follow directly after
+the '-MO=Deparse', separated by a comma but not any white space.
+
+=over 4
+
+=item B<-l>
+
+Add '#line' declarations to the output based on the line and file
+locations of the original code.
+
+=item B<-p>
+
+Print extra parentheses. Without this option, B::Deparse includes
+parentheses in its output only when they are needed, based on the
+structure of your program. With B<-p>, it uses parentheses (almost)
+whenever they would be legal. This can be useful if you are used to
+LISP, or if you want to see how perl parses your input. If you say
+
+ if ($var & 0x7f == 65) {print "Gimme an A!"}
+ print ($which ? $a : $b), "\n";
+ $name = $ENV{USER} or "Bob";
+
+C<B::Deparse,-p> will print
+
+ if (($var & 0)) {
+ print('Gimme an A!')
+ };
+ (print(($which ? $a : $b)), '???');
+ (($name = $ENV{'USER'}) or '???')
+
+which probably isn't what you intended (the C<'???'> is a sign that
+perl optimized away a constant value).
+
+=item B<-P>
+
+Disable prototype checking. With this option, all function calls are
+deparsed as if no prototype was defined for them. In other words,
+
+ perl -MO=Deparse,-P -e 'sub foo (\@) { 1 } foo @x'
+
+will print
+
+ sub foo (\@) {
+ 1;
+ }
+ &foo(\@x);
+
+making clear how the parameters are actually passed to C<foo>.
+
+=item B<-q>
+
+Expand double-quoted strings into the corresponding combinations of
+concatenation, uc, ucfirst, lc, lcfirst, quotemeta, and join. For
+instance, print
+
+ print "Hello, $world, @ladies, \u$gentlemen\E, \u\L$me!";
+
+as
+
+ print 'Hello, ' . $world . ', ' . join($", @ladies) . ', '
+ . ucfirst($gentlemen) . ', ' . ucfirst(lc $me . '!');
+
+Note that the expanded form represents the way perl handles such
+constructions internally -- this option actually turns off the reverse
+translation that B::Deparse usually does. On the other hand, note that
+C<$x = "$y"> is not the same as C<$x = $y>: the former makes the value
+of $y into a string before doing the assignment.
+
+=item B<-f>I<FILE>
+
+Normally, B::Deparse deparses the main code of a program, and all the subs
+defined in the same file. To include subs defined in other files, pass the
+B<-f> option with the filename. You can pass the B<-f> option several times, to
+include more than one secondary file. (Most of the time you don't want to
+use it at all.) You can also use this option to include subs which are
+defined in the scope of a B<#line> directive with two parameters.
+
+=item B<-s>I<LETTERS>
+
+Tweak the style of B::Deparse's output. The letters should follow
+directly after the 's', with no space or punctuation. The following
+options are available:
+
+=over 4
+
+=item B<C>
+
+Cuddle C<elsif>, C<else>, and C<continue> blocks. For example, print
+
+ if (...) {
+ ...
+ } else {
+ ...
+ }
+
+instead of
+
+ if (...) {
+ ...
+ }
+ else {
+ ...
+ }
+
+The default is not to cuddle.
+
+=item B<i>I<NUMBER>
+
+Indent lines by multiples of I<NUMBER> columns. The default is 4 columns.
+
+=item B<T>
+
+Use tabs for each 8 columns of indent. The default is to use only spaces.
+For instance, if the style options are B<-si4T>, a line that's indented
+3 times will be preceded by one tab and four spaces; if the options were
+B<-si8T>, the same line would be preceded by three tabs.
+
+=item B<v>I<STRING>B<.>
+
+Print I<STRING> for the value of a constant that can't be determined
+because it was optimized away (mnemonic: this happens when a constant
+is used in B<v>oid context). The end of the string is marked by a period.
+The string should be a valid perl expression, generally a constant.
+Note that unless it's a number, it probably needs to be quoted, and on
+a command line quotes need to be protected from the shell. Some
+conventional values include 0, 1, 42, '', 'foo', and
+'Useless use of constant omitted' (which may need to be
+B<-sv"'Useless use of constant omitted'.">
+or something similar depending on your shell). The default is '???'.
+If you're using B::Deparse on a module or other file that's require'd,
+you shouldn't use a value that evaluates to false, since the customary
+true constant at the end of a module will be in void context when the
+file is compiled as a main program.
+
+=back
+
+=item B<-x>I<LEVEL>
+
+Expand conventional syntax constructions into equivalent ones that expose
+their internal operation. I<LEVEL> should be a digit, with higher values
+meaning more expansion. As with B<-q>, this actually involves turning off
+special cases in B::Deparse's normal operations.
+
+If I<LEVEL> is at least 3, for loops will be translated into equivalent
+while loops with continue blocks; for instance
+
+ for ($i = 0; $i < 10; ++$i) {
+ print $i;
+ }
+
+turns into
+
+ $i = 0;
+ while ($i < 10) {
+ print $i;
+ } continue {
+ ++$i
+ }
+
+Note that in a few cases this translation can't be perfectly carried back
+into the source code -- if the loop's initializer declares a my variable,
+for instance, it won't have the correct scope outside of the loop.
+
+If I<LEVEL> is at least 7, if statements will be translated into equivalent
+expressions using C<&&>, C<?:> and C<do {}>; for instance
+
+ print 'hi' if $nice;
+ if ($nice) {
+ print 'hi';
+ }
+ if ($nice) {
+ print 'hi';
+ } else {
+ print 'bye';
+ }
+
+turns into
+
+ $nice and print 'hi';
+ $nice and do { print 'hi' };
+ $nice ? do { print 'hi' } : do { print 'bye' };
+
+Long sequences of elsifs will turn into nested ternary operators, which
+B::Deparse doesn't know how to indent nicely.
+
+=back
+
+=head1 USING B::Deparse AS A MODULE
+
+=head2 Synopsis
+
+ use B::Deparse;
+ $deparse = B::Deparse->new("-p", "-sC");
+ $body = $deparse->coderef2text(\&func);
+ eval "sub func $body"; # the inverse operation
+
+=head2 Description
+
+B::Deparse can also be used on a sub-by-sub basis from other perl
+programs.
+
+=head2 new
+
+ $deparse = B::Deparse->new(OPTIONS)
+
+Create an object to store the state of a deparsing operation and any
+options. The options are the same as those that can be given on the
+command line (see L</OPTIONS>); options that are separated by commas
+after B<-MO=Deparse> should be given as separate strings. Some
+options, like B<-u>, don't make sense for a single subroutine, so
+don't pass them.
+
+=head2 ambient_pragmas
+
+ $deparse->ambient_pragmas(strict => 'all', '$[' => $[);
+
+The compilation of a subroutine can be affected by a few compiler
+directives, B<pragmas>. These are:
+
+=over 4
+
+=item *
+
+use strict;
+
+=item *
+
+use warnings;
+
+=item *
+
+Assigning to the special variable $[
+
+=item *
+
+use integer;
+
+=item *
+
+use bytes;
+
+=item *
+
+use utf8;
+
+=item *
+
+use re;
+
+=back
+
+Ordinarily, if you use B::Deparse on a subroutine which has
+been compiled in the presence of one or more of these pragmas,
+the output will include statements to turn on the appropriate
+directives. So if you then compile the code returned by coderef2text,
+it will behave the same way as the subroutine which you deparsed.
+
+However, you may know that you intend to use the results in a
+particular context, where some pragmas are already in scope. In
+this case, you use the B<ambient_pragmas> method to describe the
+assumptions you wish to make.
+
+Not all of the options currently have any useful effect. See
+L</BUGS> for more details.
+
+The parameters it accepts are:
+
+=over 4
+
+=item strict
+
+Takes a string, possibly containing several values separated
+by whitespace. The special values "all" and "none" mean what you'd
+expect.
+
+ $deparse->ambient_pragmas(strict => 'subs refs');
+
+=item $[
+
+Takes a number, the value of the array base $[.
+
+=item bytes
+
+=item utf8
+
+=item integer
+
+If the value is true, then the appropriate pragma is assumed to
+be in the ambient scope, otherwise not.
+
+=item re
+
+Takes a string, possibly containing a whitespace-separated list of
+values. The values "all" and "none" are special. It's also permissible
+to pass an array reference here.
+
+ $deparser->ambient_pragmas(re => 'eval');
+
+
+=item warnings
+
+Takes a string, possibly containing a whitespace-separated list of
+values. The values "all" and "none" are special, again. It's also
+permissible to pass an array reference here.
+
+ $deparser->ambient_pragmas(warnings => [qw[void io]]);
+
+If one of the values is the string "FATAL", then all the warnings
+in that list will be considered fatal, just as with the B<warnings>
+pragma itself. Should you need to specify that some warnings are
+fatal, and others are merely enabled, you can pass the B<warnings>
+parameter twice:
+
+ $deparser->ambient_pragmas(
+ warnings => 'all',
+ warnings => [FATAL => qw/void io/],
+ );
+
+See L<perllexwarn> for more information about lexical warnings.
+
+=item hint_bits
+
+=item warning_bits
+
+These two parameters are used to specify the ambient pragmas in
+the format used by the special variables $^H and ${^WARNING_BITS}.
+
+They exist principally so that you can write code like:
+
+ { my ($hint_bits, $warning_bits);
+ BEGIN {($hint_bits, $warning_bits) = ($^H, ${^WARNING_BITS})}
+ $deparser->ambient_pragmas (
+ hint_bits => $hint_bits,
+ warning_bits => $warning_bits,
+ '$[' => 0 + $[
+ ); }
+
+which specifies that the ambient pragmas are exactly those which
+are in scope at the point of calling.
+
+=back
+
+=head2 coderef2text
+
+ $body = $deparse->coderef2text(\&func)
+ $body = $deparse->coderef2text(sub ($$) { ... })
+
+Return source code for the body of a subroutine (a block, optionally
+preceded by a prototype in parens), given a reference to the
+sub. Because a subroutine can have no names, or more than one name,
+this method doesn't return a complete subroutine definition -- if you
+want to eval the result, you should prepend "sub subname ", or "sub "
+for an anonymous function constructor. Unless the sub was defined in
+the main:: package, the code will include a package declaration.
+
+=head1 BUGS
+
+=over 4
+
+=item *
+
+The only pragmas to be completely supported are: C<use warnings>,
+C<use strict 'refs'>, C<use bytes>, and C<use integer>. (C<$[>, which
+behaves like a pragma, is also supported.)
+
+Excepting those listed above, we're currently unable to guarantee that
+B::Deparse will produce a pragma at the correct point in the program.
+Since the effects of pragmas are often lexically scoped, this can mean
+that the pragma holds sway over a different portion of the program
+than in the input file.
+
+=item *
+
+In fact, the above is a specific instance of a more general problem:
+we can't guarantee to produce BEGIN blocks or C<use> declarations in
+exactly the right place. So if you use a module which affects compilation
+(such as by over-riding keywords, overloading constants or whatever)
+then the output code might not work as intended.
+
+This is the most serious outstanding problem, and will be very hard
+to fix.
+
+=item *
+
+If a keyword is over-ridden, and your program explicitly calls
+the built-in version by using CORE::keyword, the output of B::Deparse
+will not reflect this. If you run the resulting code, it will call
+the over-ridden version rather than the built-in one. (Maybe there
+should be an option to B<always> print keyword calls as C<CORE::name>.)
+
+=item *
+
+C<sort foo (1, 2, 3)> comes out as C<sort (foo 1, 2, 3)>, which
+causes perl to issue a warning.
+
+The obvious fix doesn't work, because these are different:
+
+ print (FOO 1, 2, 3), 4, 5, 6;
+ print FOO (1, 2, 3), 4, 5, 6;
+
+=item *
+
+Constants (other than simple strings or numbers) don't work properly.
+Pathological examples that fail (and probably always will) include:
+
+ use constant E2BIG => ($!=7);
+ use constant x=>\$x; print x
+
+The following could (and should) be made to work:
+
+ use constant regex => qr/blah/;
+ print regex;
+
+=item *
+
+An input file that uses source filtering probably won't be deparsed into
+runnable code, because it will still include the B<use> declaration
+for the source filtering module, even though the code that is
+produced is already ordinary Perl which shouldn't be filtered again.
+
+=item *
+
+There are probably many more bugs on non-ASCII platforms (EBCDIC).
+
+=back
+
+=head1 AUTHOR
+
+Stephen McCamant <smcc@CSUA.Berkeley.EDU>, based on an earlier
+version by Malcolm Beattie <mbeattie@sable.ox.ac.uk>, with
+contributions from Gisle Aas, James Duncan, Albert Dvornik, Robin
+Houston, Hugo van der Sanden, Gurusamy Sarathy, Nick Ing-Simmons,
+and Rafael Garcia-Suarez.
+
+=cut
diff --git a/Master/xemtex/perl/lib/Carp.pm b/Master/xemtex/perl/lib/Carp.pm
new file mode 100644
index 00000000000..6199f894487
--- /dev/null
+++ b/Master/xemtex/perl/lib/Carp.pm
@@ -0,0 +1,196 @@
+package Carp;
+
+our $VERSION = '1.01';
+
+=head1 NAME
+
+carp - warn of errors (from perspective of caller)
+
+cluck - warn of errors with stack backtrace
+ (not exported by default)
+
+croak - die of errors (from perspective of caller)
+
+confess - die of errors with stack backtrace
+
+shortmess - return the message that carp and croak produce
+
+longmess - return the message that cluck and confess produce
+
+=head1 SYNOPSIS
+
+ use Carp;
+ croak "We're outta here!";
+
+ use Carp qw(cluck);
+ cluck "This is how we got here!";
+
+ print FH Carp::shortmess("This will have caller's details added");
+ print FH Carp::longmess("This will have stack backtrace added");
+
+=head1 DESCRIPTION
+
+The Carp routines are useful in your own modules because
+they act like die() or warn(), but with a message which is more
+likely to be useful to a user of your module. In the case of
+cluck, confess, and longmess that context is a summary of every
+call in the call-stack. For a shorter message you can use carp,
+croak or shortmess which report the error as being from where
+your module was called. There is no guarantee that that is where
+the error was, but it is a good educated guess.
+
+Here is a more complete description of how shortmess works. What
+it does is search the call-stack for a function call stack where
+it hasn't been told that there shouldn't be an error. If every
+call is marked safe, it then gives up and gives a full stack
+backtrace instead. In other words it presumes that the first likely
+looking potential suspect is guilty. Its rules for telling whether
+a call shouldn't generate errors work as follows:
+
+=over 4
+
+=item 1.
+
+Any call from a package to itself is safe.
+
+=item 2.
+
+Packages claim that there won't be errors on calls to or from
+packages explicitly marked as safe by inclusion in @CARP_NOT, or
+(if that array is empty) @ISA. The ability to override what
+@ISA says is new in 5.8.
+
+=item 3.
+
+The trust in item 2 is transitive. If A trusts B, and B
+trusts C, then A trusts C. So if you do not override @ISA
+with @CARP_NOT, then this trust relationship is identical to,
+"inherits from".
+
+=item 4.
+
+Any call from an internal Perl module is safe. (Nothing keeps
+user modules from marking themselves as internal to Perl, but
+this practice is discouraged.)
+
+=item 5.
+
+Any call to Carp is safe. (This rule is what keeps it from
+reporting the error where you call carp/croak/shortmess.)
+
+=back
+
+=head2 Forcing a Stack Trace
+
+As a debugging aid, you can force Carp to treat a croak as a confess
+and a carp as a cluck across I<all> modules. In other words, force a
+detailed stack trace to be given. This can be very helpful when trying
+to understand why, or from where, a warning or error is being generated.
+
+This feature is enabled by 'importing' the non-existent symbol
+'verbose'. You would typically enable it by saying
+
+ perl -MCarp=verbose script.pl
+
+or by including the string C<MCarp=verbose> in the PERL5OPT
+environment variable.
+
+=head1 BUGS
+
+The Carp routines don't handle exception objects currently.
+If called with a first argument that is a reference, they simply
+call die() or warn(), as appropriate.
+
+=cut
+
+# This package is heavily used. Be small. Be fast. Be good.
+
+# Comments added by Andy Wardley <abw@kfs.org> 09-Apr-98, based on an
+# _almost_ complete understanding of the package. Corrections and
+# comments are welcome.
+
+# The members of %Internal are packages that are internal to perl.
+# Carp will not report errors from within these packages if it
+# can. The members of %CarpInternal are internal to Perl's warning
+# system. Carp will not report errors from within these packages
+# either, and will not report calls *to* these packages for carp and
+# croak. They replace $CarpLevel, which is deprecated. The
+# $Max(EvalLen|(Arg(Len|Nums)) variables are used to specify how the eval
+# text and function arguments should be formatted when printed.
+
+$CarpInternal{Carp}++;
+$CarpInternal{warnings}++;
+$CarpLevel = 0; # How many extra package levels to skip on carp.
+ # How many calls to skip on confess.
+ # Reconciling these notions is hard, use
+ # %Internal and %CarpInternal instead.
+$MaxEvalLen = 0; # How much eval '...text...' to show. 0 = all.
+$MaxArgLen = 64; # How much of each argument to print. 0 = all.
+$MaxArgNums = 8; # How many arguments to print. 0 = all.
+$Verbose = 0; # If true then make shortmess call longmess instead
+
+require Exporter;
+@ISA = ('Exporter');
+@EXPORT = qw(confess croak carp);
+@EXPORT_OK = qw(cluck verbose longmess shortmess);
+@EXPORT_FAIL = qw(verbose); # hook to enable verbose mode
+
+
+# if the caller specifies verbose usage ("perl -MCarp=verbose script.pl")
+# then the following method will be called by the Exporter which knows
+# to do this thanks to @EXPORT_FAIL, above. $_[1] will contain the word
+# 'verbose'.
+
+sub export_fail {
+ shift;
+ $Verbose = shift if $_[0] eq 'verbose';
+ return @_;
+}
+
+
+# longmess() crawls all the way up the stack reporting on all the function
+# calls made. The error string, $error, is originally constructed from the
+# arguments passed into longmess() via confess(), cluck() or shortmess().
+# This gets appended with the stack trace messages which are generated for
+# each function call on the stack.
+
+sub longmess {
+ { local $@; require Carp::Heavy; } # XXX fix require to not clear $@?
+ # Icky backwards compatibility wrapper. :-(
+ my $call_pack = caller();
+ if ($Internal{$call_pack} or $CarpInternal{$call_pack}) {
+ return longmess_heavy(@_);
+ }
+ else {
+ local $CarpLevel = $CarpLevel + 1;
+ return longmess_heavy(@_);
+ }
+}
+
+
+# shortmess() is called by carp() and croak() to skip all the way up to
+# the top-level caller's package and report the error from there. confess()
+# and cluck() generate a full stack trace so they call longmess() to
+# generate that. In verbose mode shortmess() calls longmess() so
+# you always get a stack trace
+
+sub shortmess { # Short-circuit &longmess if called via multiple packages
+ { local $@; require Carp::Heavy; } # XXX fix require to not clear $@?
+ # Icky backwards compatibility wrapper. :-(
+ my $call_pack = caller();
+ local @CARP_NOT = caller();
+ shortmess_heavy(@_);
+}
+
+
+# the following four functions call longmess() or shortmess() depending on
+# whether they should generate a full stack trace (confess() and cluck())
+# or simply report the caller's package (croak() and carp()), respectively.
+# confess() and croak() die, carp() and cluck() warn.
+
+sub croak { die shortmess @_ }
+sub confess { die longmess @_ }
+sub carp { warn shortmess @_ }
+sub cluck { warn longmess @_ }
+
+1;
diff --git a/Master/xemtex/perl/lib/Carp/Heavy.pm b/Master/xemtex/perl/lib/Carp/Heavy.pm
new file mode 100644
index 00000000000..c3d3c26fa1a
--- /dev/null
+++ b/Master/xemtex/perl/lib/Carp/Heavy.pm
@@ -0,0 +1,247 @@
+# Carp::Heavy uses some variables in common with Carp.
+package Carp;
+
+=head1 NAME
+
+Carp heavy machinery - no user serviceable parts inside
+
+=cut
+
+# use strict; # not yet
+
+# On one line so MakeMaker will see it.
+use Carp; our $VERSION = $Carp::VERSION;
+
+our ($CarpLevel, $MaxArgNums, $MaxEvalLen, $MaxArgLen, $Verbose);
+
+sub caller_info {
+ my $i = shift(@_) + 1;
+ package DB;
+ my %call_info;
+ @call_info{
+ qw(pack file line sub has_args wantarray evaltext is_require)
+ } = caller($i);
+
+ unless (defined $call_info{pack}) {
+ return ();
+ }
+
+ my $sub_name = Carp::get_subname(\%call_info);
+ if ($call_info{has_args}) {
+ my @args = map {Carp::format_arg($_)} @DB::args;
+ if ($MaxArgNums and @args > $MaxArgNums) { # More than we want to show?
+ $#args = $MaxArgNums;
+ push @args, '...';
+ }
+ # Push the args onto the subroutine
+ $sub_name .= '(' . join (',', @args) . ')';
+ }
+ $call_info{sub_name} = $sub_name;
+ return wantarray() ? %call_info : \%call_info;
+}
+
+# Transform an argument to a function into a string.
+sub format_arg {
+ my $arg = shift;
+ if (not defined($arg)) {
+ $arg = 'undef';
+ }
+ elsif (ref($arg)) {
+ $arg = defined($overload::VERSION) ? overload::StrVal($arg) : "$arg";
+ }
+ $arg =~ s/'/\\'/g;
+ $arg = str_len_trim($arg, $MaxArgLen);
+
+ # Quote it?
+ $arg = "'$arg'" unless $arg =~ /^-?[\d.]+\z/;
+
+ # The following handling of "control chars" is direct from
+ # the original code - I think it is broken on Unicode though.
+ # Suggestions?
+ $arg =~ s/([[:cntrl:]]|[[:^ascii:]])/sprintf("\\x{%x}",ord($1))/eg;
+ return $arg;
+}
+
+# Takes an inheritance cache and a package and returns
+# an anon hash of known inheritances and anon array of
+# inheritances which consequences have not been figured
+# for.
+sub get_status {
+ my $cache = shift;
+ my $pkg = shift;
+ $cache->{$pkg} ||= [{$pkg => $pkg}, [trusts_directly($pkg)]];
+ return @{$cache->{$pkg}};
+}
+
+# Takes the info from caller() and figures out the name of
+# the sub/require/eval
+sub get_subname {
+ my $info = shift;
+ if (defined($info->{evaltext})) {
+ my $eval = $info->{evaltext};
+ if ($info->{is_require}) {
+ return "require $eval";
+ }
+ else {
+ $eval =~ s/([\\\'])/\\$1/g;
+ return "eval '" . str_len_trim($eval, $MaxEvalLen) . "'";
+ }
+ }
+
+ return ($info->{sub} eq '(eval)') ? 'eval {...}' : $info->{sub};
+}
+
+# Figures out what call (from the point of view of the caller)
+# the long error backtrace should start at.
+sub long_error_loc {
+ my $i;
+ my $lvl = $CarpLevel;
+ {
+ my $pkg = caller(++$i);
+ unless(defined($pkg)) {
+ # This *shouldn't* happen.
+ if (%Internal) {
+ local %Internal;
+ $i = long_error_loc();
+ last;
+ }
+ else {
+ # OK, now I am irritated.
+ return 2;
+ }
+ }
+ redo if $CarpInternal{$pkg};
+ redo unless 0 > --$lvl;
+ redo if $Internal{$pkg};
+ }
+ return $i - 1;
+}
+
+
+sub longmess_heavy {
+ return @_ if ref($_[0]); # don't break references as exceptions
+ my $i = long_error_loc();
+ return ret_backtrace($i, @_);
+}
+
+# Returns a full stack backtrace starting from where it is
+# told.
+sub ret_backtrace {
+ my ($i, @error) = @_;
+ my $mess;
+ my $err = join '', @error;
+ $i++;
+
+ my $tid_msg = '';
+ if (defined &Thread::tid) {
+ my $tid = Thread->self->tid;
+ $tid_msg = " thread $tid" if $tid;
+ }
+
+ { if ($err =~ /\n$/) { # extra block to localise $1 etc
+ $mess = $err;
+ }
+ else {
+ my %i = caller_info($i);
+ $mess = "$err at $i{file} line $i{line}$tid_msg\n";
+ }}
+
+ while (my %i = caller_info(++$i)) {
+ $mess .= "\t$i{sub_name} called at $i{file} line $i{line}$tid_msg\n";
+ }
+
+ return $mess;
+}
+
+sub ret_summary {
+ my ($i, @error) = @_;
+ my $mess;
+ my $err = join '', @error;
+ $i++;
+
+ my $tid_msg = '';
+ if (defined &Thread::tid) {
+ my $tid = Thread->self->tid;
+ $tid_msg = " thread $tid" if $tid;
+ }
+
+ my %i = caller_info($i);
+ return "$err at $i{file} line $i{line}$tid_msg\n";
+}
+
+
+sub short_error_loc {
+ my $cache;
+ my $i = 1;
+ my $lvl = $CarpLevel;
+ {
+ my $called = caller($i++);
+ my $caller = caller($i);
+ return 0 unless defined($caller); # What happened?
+ redo if $Internal{$caller};
+ redo if $CarpInternal{$called};
+ redo if trusts($called, $caller, $cache);
+ redo if trusts($caller, $called, $cache);
+ redo unless 0 > --$lvl;
+ }
+ return $i - 1;
+}
+
+sub shortmess_heavy {
+ return longmess_heavy(@_) if $Verbose;
+ return @_ if ref($_[0]); # don't break references as exceptions
+ my $i = short_error_loc();
+ if ($i) {
+ ret_summary($i, @_);
+ }
+ else {
+ longmess_heavy(@_);
+ }
+}
+
+# If a string is too long, trims it with ...
+sub str_len_trim {
+ my $str = shift;
+ my $max = shift || 0;
+ if (2 < $max and $max < length($str)) {
+ substr($str, $max - 3) = '...';
+ }
+ return $str;
+}
+
+# Takes two packages and an optional cache. Says whether the
+# first inherits from the second.
+#
+# Recursive versions of this have to work to avoid certain
+# possible endless loops, and when following long chains of
+# inheritance are less efficient.
+sub trusts {
+ my $child = shift;
+ my $parent = shift;
+ my $cache = shift || {};
+ my ($known, $partial) = get_status($cache, $child);
+ # Figure out consequences until we have an answer
+ while (@$partial and not exists $known->{$parent}) {
+ my $anc = shift @$partial;
+ next if exists $known->{$anc};
+ $known->{$anc}++;
+ my ($anc_knows, $anc_partial) = get_status($cache, $anc);
+ my @found = keys %$anc_knows;
+ @$known{@found} = ();
+ push @$partial, @$anc_partial;
+ }
+ return exists $known->{$parent};
+}
+
+# Takes a package and gives a list of those trusted directly
+sub trusts_directly {
+ my $class = shift;
+ no strict 'refs';
+ no warnings 'once';
+ return @{"$class\::CARP_NOT"}
+ ? @{"$class\::CARP_NOT"}
+ : @{"$class\::ISA"};
+}
+
+1;
+
diff --git a/Master/xemtex/perl/lib/Class/Struct.pm b/Master/xemtex/perl/lib/Class/Struct.pm
new file mode 100644
index 00000000000..bad4f78165f
--- /dev/null
+++ b/Master/xemtex/perl/lib/Class/Struct.pm
@@ -0,0 +1,632 @@
+package Class::Struct;
+
+## See POD after __END__
+
+use 5.006_001;
+
+use strict;
+use warnings::register;
+our(@ISA, @EXPORT, $VERSION);
+
+use Carp;
+
+require Exporter;
+@ISA = qw(Exporter);
+@EXPORT = qw(struct);
+
+$VERSION = '0.61';
+
+## Tested on 5.002 and 5.003 without class membership tests:
+my $CHECK_CLASS_MEMBERSHIP = ($] >= 5.003_95);
+
+my $print = 0;
+sub printem {
+ if (@_) { $print = shift }
+ else { $print++ }
+}
+
+{
+ package Class::Struct::Tie_ISA;
+
+ sub TIEARRAY {
+ my $class = shift;
+ return bless [], $class;
+ }
+
+ sub STORE {
+ my ($self, $index, $value) = @_;
+ Class::Struct::_subclass_error();
+ }
+
+ sub FETCH {
+ my ($self, $index) = @_;
+ $self->[$index];
+ }
+
+ sub FETCHSIZE {
+ my $self = shift;
+ return scalar(@$self);
+ }
+
+ sub DESTROY { }
+}
+
+sub import {
+ my $self = shift;
+
+ if ( @_ == 0 ) {
+ $self->export_to_level( 1, $self, @EXPORT );
+ } elsif ( @_ == 1 ) {
+ # This is admittedly a little bit silly:
+ # do we ever export anything else than 'struct'...?
+ $self->export_to_level( 1, $self, @_ );
+ } else {
+ &struct;
+ }
+}
+
+sub struct {
+
+ # Determine parameter list structure, one of:
+ # struct( class => [ element-list ])
+ # struct( class => { element-list })
+ # struct( element-list )
+ # Latter form assumes current package name as struct name.
+
+ my ($class, @decls);
+ my $base_type = ref $_[1];
+ if ( $base_type eq 'HASH' ) {
+ $class = shift;
+ @decls = %{shift()};
+ _usage_error() if @_;
+ }
+ elsif ( $base_type eq 'ARRAY' ) {
+ $class = shift;
+ @decls = @{shift()};
+ _usage_error() if @_;
+ }
+ else {
+ $base_type = 'ARRAY';
+ $class = (caller())[0];
+ @decls = @_;
+ }
+
+ _usage_error() if @decls % 2 == 1;
+
+ # Ensure we are not, and will not be, a subclass.
+
+ my $isa = do {
+ no strict 'refs';
+ \@{$class . '::ISA'};
+ };
+ _subclass_error() if @$isa;
+ tie @$isa, 'Class::Struct::Tie_ISA';
+
+ # Create constructor.
+
+ croak "function 'new' already defined in package $class"
+ if do { no strict 'refs'; defined &{$class . "::new"} };
+
+ my @methods = ();
+ my %refs = ();
+ my %arrays = ();
+ my %hashes = ();
+ my %classes = ();
+ my $got_class = 0;
+ my $out = '';
+
+ $out = "{\n package $class;\n use Carp;\n sub new {\n";
+ $out .= " my (\$class, \%init) = \@_;\n";
+ $out .= " \$class = __PACKAGE__ unless \@_;\n";
+
+ my $cnt = 0;
+ my $idx = 0;
+ my( $cmt, $name, $type, $elem );
+
+ if( $base_type eq 'HASH' ){
+ $out .= " my(\$r) = {};\n";
+ $cmt = '';
+ }
+ elsif( $base_type eq 'ARRAY' ){
+ $out .= " my(\$r) = [];\n";
+ }
+ while( $idx < @decls ){
+ $name = $decls[$idx];
+ $type = $decls[$idx+1];
+ push( @methods, $name );
+ if( $base_type eq 'HASH' ){
+ $elem = "{'${class}::$name'}";
+ }
+ elsif( $base_type eq 'ARRAY' ){
+ $elem = "[$cnt]";
+ ++$cnt;
+ $cmt = " # $name";
+ }
+ if( $type =~ /^\*(.)/ ){
+ $refs{$name}++;
+ $type = $1;
+ }
+ my $init = "defined(\$init{'$name'}) ? \$init{'$name'} :";
+ if( $type eq '@' ){
+ $out .= " croak 'Initializer for $name must be array reference'\n";
+ $out .= " if defined(\$init{'$name'}) && ref(\$init{'$name'}) ne 'ARRAY';\n";
+ $out .= " \$r->$elem = $init [];$cmt\n";
+ $arrays{$name}++;
+ }
+ elsif( $type eq '%' ){
+ $out .= " croak 'Initializer for $name must be hash reference'\n";
+ $out .= " if defined(\$init{'$name'}) && ref(\$init{'$name'}) ne 'HASH';\n";
+ $out .= " \$r->$elem = $init {};$cmt\n";
+ $hashes{$name}++;
+ }
+ elsif ( $type eq '$') {
+ $out .= " \$r->$elem = $init undef;$cmt\n";
+ }
+ elsif( $type =~ /^\w+(?:::\w+)*$/ ){
+ $out .= " if (defined(\$init{'$name'})) {\n";
+ $out .= " if (ref \$init{'$name'} eq 'HASH')\n";
+ $out .= " { \$r->$elem = $type->new(\%{\$init{'$name'}}) } $cmt\n";
+ $out .= " elsif (UNIVERSAL::isa(\$init{'$name'}, '$type'))\n";
+ $out .= " { \$r->$elem = \$init{'$name'} } $cmt\n";
+ $out .= " else { croak 'Initializer for $name must be hash or $type reference' }\n";
+ $out .= " }\n";
+ $classes{$name} = $type;
+ $got_class = 1;
+ }
+ else{
+ croak "'$type' is not a valid struct element type";
+ }
+ $idx += 2;
+ }
+ $out .= " bless \$r, \$class;\n }\n";
+
+ # Create accessor methods.
+
+ my( $pre, $pst, $sel );
+ $cnt = 0;
+ foreach $name (@methods){
+ if ( do { no strict 'refs'; defined &{$class . "::$name"} } ) {
+ warnings::warnif("function '$name' already defined, overrides struct accessor method");
+ }
+ else {
+ $pre = $pst = $cmt = $sel = '';
+ if( defined $refs{$name} ){
+ $pre = "\\(";
+ $pst = ")";
+ $cmt = " # returns ref";
+ }
+ $out .= " sub $name {$cmt\n my \$r = shift;\n";
+ if( $base_type eq 'ARRAY' ){
+ $elem = "[$cnt]";
+ ++$cnt;
+ }
+ elsif( $base_type eq 'HASH' ){
+ $elem = "{'${class}::$name'}";
+ }
+ if( defined $arrays{$name} ){
+ $out .= " my \$i;\n";
+ $out .= " \@_ ? (\$i = shift) : return \$r->$elem;\n";
+ $out .= " if (ref(\$i) eq 'ARRAY' && !\@_) { \$r->$elem = \$i; return \$r }\n";
+ $sel = "->[\$i]";
+ }
+ elsif( defined $hashes{$name} ){
+ $out .= " my \$i;\n";
+ $out .= " \@_ ? (\$i = shift) : return \$r->$elem;\n";
+ $out .= " if (ref(\$i) eq 'HASH' && !\@_) { \$r->$elem = \$i; return \$r }\n";
+ $sel = "->{\$i}";
+ }
+ elsif( defined $classes{$name} ){
+ if ( $CHECK_CLASS_MEMBERSHIP ) {
+ $out .= " croak '$name argument is wrong class' if \@_ && ! UNIVERSAL::isa(\$_[0], '$classes{$name}');\n";
+ }
+ }
+ $out .= " croak 'Too many args to $name' if \@_ > 1;\n";
+ $out .= " \@_ ? ($pre\$r->$elem$sel = shift$pst) : $pre\$r->$elem$sel$pst;\n";
+ $out .= " }\n";
+ }
+ }
+ $out .= "}\n1;\n";
+
+ print $out if $print;
+ my $result = eval $out;
+ carp $@ if $@;
+}
+
+sub _usage_error {
+ confess "struct usage error";
+}
+
+sub _subclass_error {
+ croak 'struct class cannot be a subclass (@ISA not allowed)';
+}
+
+1; # for require
+
+
+__END__
+
+=head1 NAME
+
+Class::Struct - declare struct-like datatypes as Perl classes
+
+=head1 SYNOPSIS
+
+ use Class::Struct;
+ # declare struct, based on array:
+ struct( CLASS_NAME => [ ELEMENT_NAME => ELEMENT_TYPE, ... ]);
+ # declare struct, based on hash:
+ struct( CLASS_NAME => { ELEMENT_NAME => ELEMENT_TYPE, ... });
+
+ package CLASS_NAME;
+ use Class::Struct;
+ # declare struct, based on array, implicit class name:
+ struct( ELEMENT_NAME => ELEMENT_TYPE, ... );
+
+ # Declare struct at compile time
+ use Class::Struct CLASS_NAME => [ ELEMENT_NAME => ELEMENT_TYPE, ... ];
+ use Class::Struct CLASS_NAME => { ELEMENT_NAME => ELEMENT_TYPE, ... };
+
+ package Myobj;
+ use Class::Struct;
+ # declare struct with four types of elements:
+ struct( s => '$', a => '@', h => '%', c => 'My_Other_Class' );
+
+ $obj = new Myobj; # constructor
+
+ # scalar type accessor:
+ $element_value = $obj->s; # element value
+ $obj->s('new value'); # assign to element
+
+ # array type accessor:
+ $ary_ref = $obj->a; # reference to whole array
+ $ary_element_value = $obj->a(2); # array element value
+ $obj->a(2, 'new value'); # assign to array element
+
+ # hash type accessor:
+ $hash_ref = $obj->h; # reference to whole hash
+ $hash_element_value = $obj->h('x'); # hash element value
+ $obj->h('x', 'new value'); # assign to hash element
+
+ # class type accessor:
+ $element_value = $obj->c; # object reference
+ $obj->c->method(...); # call method of object
+ $obj->c(new My_Other_Class); # assign a new object
+
+=head1 DESCRIPTION
+
+C<Class::Struct> exports a single function, C<struct>.
+Given a list of element names and types, and optionally
+a class name, C<struct> creates a Perl 5 class that implements
+a "struct-like" data structure.
+
+The new class is given a constructor method, C<new>, for creating
+struct objects.
+
+Each element in the struct data has an accessor method, which is
+used to assign to the element and to fetch its value. The
+default accessor can be overridden by declaring a C<sub> of the
+same name in the package. (See Example 2.)
+
+Each element's type can be scalar, array, hash, or class.
+
+=head2 The C<struct()> function
+
+The C<struct> function has three forms of parameter-list.
+
+ struct( CLASS_NAME => [ ELEMENT_LIST ]);
+ struct( CLASS_NAME => { ELEMENT_LIST });
+ struct( ELEMENT_LIST );
+
+The first and second forms explicitly identify the name of the
+class being created. The third form assumes the current package
+name as the class name.
+
+An object of a class created by the first and third forms is
+based on an array, whereas an object of a class created by the
+second form is based on a hash. The array-based forms will be
+somewhat faster and smaller; the hash-based forms are more
+flexible.
+
+The class created by C<struct> must not be a subclass of another
+class other than C<UNIVERSAL>.
+
+It can, however, be used as a superclass for other classes. To facilitate
+this, the generated constructor method uses a two-argument blessing.
+Furthermore, if the class is hash-based, the key of each element is
+prefixed with the class name (see I<Perl Cookbook>, Recipe 13.12).
+
+A function named C<new> must not be explicitly defined in a class
+created by C<struct>.
+
+The I<ELEMENT_LIST> has the form
+
+ NAME => TYPE, ...
+
+Each name-type pair declares one element of the struct. Each
+element name will be defined as an accessor method unless a
+method by that name is explicitly defined; in the latter case, a
+warning is issued if the warning flag (B<-w>) is set.
+
+=head2 Class Creation at Compile Time
+
+C<Class::Struct> can create your class at compile time. The main reason
+for doing this is obvious, so your class acts like every other class in
+Perl. Creating your class at compile time will make the order of events
+similar to using any other class ( or Perl module ).
+
+There is no significant speed gain between compile time and run time
+class creation, there is just a new, more standard order of events.
+
+=head2 Element Types and Accessor Methods
+
+The four element types -- scalar, array, hash, and class -- are
+represented by strings -- C<'$'>, C<'@'>, C<'%'>, and a class name --
+optionally preceded by a C<'*'>.
+
+The accessor method provided by C<struct> for an element depends
+on the declared type of the element.
+
+=over 4
+
+=item Scalar (C<'$'> or C<'*$'>)
+
+The element is a scalar, and by default is initialized to C<undef>
+(but see L<Initializing with new>).
+
+The accessor's argument, if any, is assigned to the element.
+
+If the element type is C<'$'>, the value of the element (after
+assignment) is returned. If the element type is C<'*$'>, a reference
+to the element is returned.
+
+=item Array (C<'@'> or C<'*@'>)
+
+The element is an array, initialized by default to C<()>.
+
+With no argument, the accessor returns a reference to the
+element's whole array (whether or not the element was
+specified as C<'@'> or C<'*@'>).
+
+With one or two arguments, the first argument is an index
+specifying one element of the array; the second argument, if
+present, is assigned to the array element. If the element type
+is C<'@'>, the accessor returns the array element value. If the
+element type is C<'*@'>, a reference to the array element is
+returned.
+
+As a special case, when the accessor is called with an array reference
+as the sole argument, this causes an assignment of the whole array element.
+The object reference is returned.
+
+=item Hash (C<'%'> or C<'*%'>)
+
+The element is a hash, initialized by default to C<()>.
+
+With no argument, the accessor returns a reference to the
+element's whole hash (whether or not the element was
+specified as C<'%'> or C<'*%'>).
+
+With one or two arguments, the first argument is a key specifying
+one element of the hash; the second argument, if present, is
+assigned to the hash element. If the element type is C<'%'>, the
+accessor returns the hash element value. If the element type is
+C<'*%'>, a reference to the hash element is returned.
+
+As a special case, when the accessor is called with a hash reference
+as the sole argument, this causes an assignment of the whole hash element.
+The object reference is returned.
+
+=item Class (C<'Class_Name'> or C<'*Class_Name'>)
+
+The element's value must be a reference blessed to the named
+class or to one of its subclasses. The element is not initialized
+by default.
+
+The accessor's argument, if any, is assigned to the element. The
+accessor will C<croak> if this is not an appropriate object
+reference.
+
+If the element type does not start with a C<'*'>, the accessor
+returns the element value (after assignment). If the element type
+starts with a C<'*'>, a reference to the element itself is returned.
+
+=back
+
+=head2 Initializing with C<new>
+
+C<struct> always creates a constructor called C<new>. That constructor
+may take a list of initializers for the various elements of the new
+struct.
+
+Each initializer is a pair of values: I<element name>C< =E<gt> >I<value>.
+The initializer value for a scalar element is just a scalar value. The
+initializer for an array element is an array reference. The initializer
+for a hash is a hash reference.
+
+The initializer for a class element is an object of the corresponding class,
+or of one of it's subclasses, or a reference to a hash containing named
+arguments to be passed to the element's constructor.
+
+See Example 3 below for an example of initialization.
+
+=head1 EXAMPLES
+
+=over 4
+
+=item Example 1
+
+Giving a struct element a class type that is also a struct is how
+structs are nested. Here, C<timeval> represents a time (seconds and
+microseconds), and C<rusage> has two elements, each of which is of
+type C<timeval>.
+
+ use Class::Struct;
+
+ struct( rusage => {
+ ru_utime => timeval, # seconds
+ ru_stime => timeval, # microseconds
+ });
+
+ struct( timeval => [
+ tv_secs => '$',
+ tv_usecs => '$',
+ ]);
+
+ # create an object:
+ my $t = new rusage;
+
+ # $t->ru_utime and $t->ru_stime are objects of type timeval.
+ # set $t->ru_utime to 100.0 sec and $t->ru_stime to 5.0 sec.
+ $t->ru_utime->tv_secs(100);
+ $t->ru_utime->tv_usecs(0);
+ $t->ru_stime->tv_secs(5);
+ $t->ru_stime->tv_usecs(0);
+
+=item Example 2
+
+An accessor function can be redefined in order to provide
+additional checking of values, etc. Here, we want the C<count>
+element always to be nonnegative, so we redefine the C<count>
+accessor accordingly.
+
+ package MyObj;
+ use Class::Struct;
+
+ # declare the struct
+ struct ( 'MyObj', { count => '$', stuff => '%' } );
+
+ # override the default accessor method for 'count'
+ sub count {
+ my $self = shift;
+ if ( @_ ) {
+ die 'count must be nonnegative' if $_[0] < 0;
+ $self->{'count'} = shift;
+ warn "Too many args to count" if @_;
+ }
+ return $self->{'count'};
+ }
+
+ package main;
+ $x = new MyObj;
+ print "\$x->count(5) = ", $x->count(5), "\n";
+ # prints '$x->count(5) = 5'
+
+ print "\$x->count = ", $x->count, "\n";
+ # prints '$x->count = 5'
+
+ print "\$x->count(-5) = ", $x->count(-5), "\n";
+ # dies due to negative argument!
+
+=item Example 3
+
+The constructor of a generated class can be passed a list
+of I<element>=>I<value> pairs, with which to initialize the struct.
+If no initializer is specified for a particular element, its default
+initialization is performed instead. Initializers for non-existent
+elements are silently ignored.
+
+Note that the initializer for a nested class may be specified as
+an object of that class, or as a reference to a hash of initializers
+that are passed on to the nested struct's constructor.
+
+ use Class::Struct;
+
+ struct Breed =>
+ {
+ name => '$',
+ cross => '$',
+ };
+
+ struct Cat =>
+ [
+ name => '$',
+ kittens => '@',
+ markings => '%',
+ breed => 'Breed',
+ ];
+
+
+ my $cat = Cat->new( name => 'Socks',
+ kittens => ['Monica', 'Kenneth'],
+ markings => { socks=>1, blaze=>"white" },
+ breed => Breed->new(name=>'short-hair', cross=>1),
+ or: breed => {name=>'short-hair', cross=>1},
+ );
+
+ print "Once a cat called ", $cat->name, "\n";
+ print "(which was a ", $cat->breed->name, ")\n";
+ print "had two kittens: ", join(' and ', @{$cat->kittens}), "\n";
+
+=back
+
+=head1 Author and Modification History
+
+Modified by Damian Conway, 2001-09-10, v0.62.
+
+ Modified implicit construction of nested objects.
+ Now will also take an object ref instead of requiring a hash ref.
+ Also default initializes nested object attributes to undef, rather
+ than calling object constructor without args
+ Original over-helpfulness was fraught with problems:
+ * the class's constructor might not be called 'new'
+ * the class might not have a hash-like-arguments constructor
+ * the class might not have a no-argument constructor
+ * "recursive" data structures didn't work well:
+ package Person;
+ struct { mother => 'Person', father => 'Person'};
+
+
+Modified by Casey West, 2000-11-08, v0.59.
+
+ Added the ability for compile time class creation.
+
+Modified by Damian Conway, 1999-03-05, v0.58.
+
+ Added handling of hash-like arg list to class ctor.
+
+ Changed to two-argument blessing in ctor to support
+ derivation from created classes.
+
+ Added classname prefixes to keys in hash-based classes
+ (refer to "Perl Cookbook", Recipe 13.12 for rationale).
+
+ Corrected behaviour of accessors for '*@' and '*%' struct
+ elements. Package now implements documented behaviour when
+ returning a reference to an entire hash or array element.
+ Previously these were returned as a reference to a reference
+ to the element.
+
+Renamed to C<Class::Struct> and modified by Jim Miner, 1997-04-02.
+
+ members() function removed.
+ Documentation corrected and extended.
+ Use of struct() in a subclass prohibited.
+ User definition of accessor allowed.
+ Treatment of '*' in element types corrected.
+ Treatment of classes as element types corrected.
+ Class name to struct() made optional.
+ Diagnostic checks added.
+
+Originally C<Class::Template> by Dean Roehrich.
+
+ # Template.pm --- struct/member template builder
+ # 12mar95
+ # Dean Roehrich
+ #
+ # changes/bugs fixed since 28nov94 version:
+ # - podified
+ # changes/bugs fixed since 21nov94 version:
+ # - Fixed examples.
+ # changes/bugs fixed since 02sep94 version:
+ # - Moved to Class::Template.
+ # changes/bugs fixed since 20feb94 version:
+ # - Updated to be a more proper module.
+ # - Added "use strict".
+ # - Bug in build_methods, was using @var when @$var needed.
+ # - Now using my() rather than local().
+ #
+ # Uses perl5 classes to create nested data types.
+ # This is offered as one implementation of Tom Christiansen's "structs.pl"
+ # idea.
+
+=cut
diff --git a/Master/xemtex/perl/lib/Config.pm b/Master/xemtex/perl/lib/Config.pm
new file mode 100644
index 00000000000..c5b8bd0be9c
--- /dev/null
+++ b/Master/xemtex/perl/lib/Config.pm
@@ -0,0 +1,8895 @@
+package Config;
+use Exporter ();
+@EXPORT = qw(%Config);
+@EXPORT_OK = qw(myconfig config_sh config_vars);
+
+# Define our own import method to avoid pulling in the full Exporter:
+sub import {
+ my $pkg = shift;
+ @_ = @EXPORT unless @_;
+ my @func = grep {$_ ne '%Config'} @_;
+ local $Exporter::ExportLevel = 1;
+ Exporter::import('Config', @func) if @func;
+ return if @func == @_;
+ my $callpkg = caller(0);
+ *{"$callpkg\::Config"} = \%Config;
+}
+
+die "Perl lib version (v5.8.0) doesn't match executable version ($])"
+ unless $^V;
+
+$^V eq v5.8.0
+ or die "Perl lib version (v5.8.0) doesn't match executable version (" .
+ (sprintf "v%vd",$^V) . ")";
+
+# This file was created by configpm when Perl was built. Any changes
+# made to this file will be lost the next time perl is built.
+
+## Configured by: popineau@ANSIBLE
+### Target system: WIN32
+
+my $config_sh = <<'!END!';
+archlibexp='c:\Local\Perl\lib'
+archname='MSWin32-x86-multi-thread'
+cc='cl'
+ccflags='-nologo -GF -W3 -MD -DNDEBUG -O2xtb2 -G6 -GL -DWIN32 -D_CONSOLE -DNO_STRICT -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READFIX'
+cppflags='-DWIN32'
+dlsrc='dl_win32.xs'
+dynamic_ext='Storable Encode XS/Typemap B/C IO MIME/Base64 Devel/Peek Opcode Time/HiRes attrs ByteLoader PerlIO/scalar Unicode/Normalize re B XS/APItest Encode/Unicode SDBM_File PerlIO/via PerlIO/encoding Fcntl Sys/Hostname Digest/MD5 Devel/PPPort POSIX Filter/Util/Call Socket threads/shared Data/Dumper List/Util threads File/Glob Devel/DProf Cwd'
+extensions='Storable Encode XS/Typemap B/C IO MIME/Base64 Devel/Peek Opcode Time/HiRes attrs ByteLoader PerlIO/scalar Unicode/Normalize re B XS/APItest Encode/Unicode SDBM_File PerlIO/via PerlIO/encoding Fcntl Sys/Hostname Digest/MD5 Devel/PPPort POSIX Filter/Util/Call Socket threads/shared Data/Dumper List/Util threads File/Glob Devel/DProf Cwd'
+installarchlib='c:\Local\Perl\lib'
+installprivlib='c:\Local\Perl\lib'
+libpth='..\..\texk\msvc\lib'
+libs=' oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvcrt.lib'
+osname='MSWin32'
+osvers='4.0'
+prefix='c:\Local\Perl'
+privlibexp='c:\Local\Perl\lib'
+sharpbang='#!'
+shsharp='true'
+sig_name='ZERO HUP INT QUIT ILL NUM05 NUM06 NUM07 FPE KILL NUM10 SEGV NUM12 PIPE ALRM TERM NUM16 NUM17 NUM18 NUM19 CHLD BREAK ABRT STOP NUM24 CONT CLD'
+sig_num='0 1 2 21 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 20 0'
+so='dll'
+startsh='#!/bin/sh'
+static_ext=' '
+Author=''
+Date='$Date'
+Header=''
+Id='$Id'
+Locker=''
+Log='$Log'
+PERL_API_REVISION='5'
+PERL_API_SUBVERSION='0'
+PERL_API_VERSION='8'
+PERL_CONFIG_SH='true'
+PERL_PATCHLEVEL='8'
+PERL_REVISION='5'
+PERL_SUBVERSION='0'
+PERL_VERSION='8'
+RCSfile='$RCSfile'
+Revision='$Revision'
+Source=''
+State=''
+_a='.lib'
+_exe='.exe'
+_o='.obj'
+afs='false'
+afsroot='/afs'
+alignbytes='8'
+ansi2knr=''
+aphostname=''
+api_revision='5'
+api_subversion='0'
+api_version='8'
+api_versionstring='5.8.0'
+ar='lib'
+archlib='c:\Local\Perl\lib'
+archname64=''
+archobjs=''
+asctime_r_proto='0'
+awk='awk'
+baserev='5'
+bash=''
+bin='c:\Local\Perl\bin'
+binexp='c:\Local\Perl\bin'
+bison=''
+byacc='byacc'
+byteorder='1234'
+c=''
+castflags='0'
+cat='type'
+cccdlflags=' '
+ccdlflags=' '
+ccflags_uselargefiles=''
+ccname=''
+ccsymbols=''
+ccversion=''
+cf_by='popineau'
+cf_email='popineau@ANSIBLE'
+cf_time='Mon Aug 18 21:40:53 2003'
+charsize='1'
+chgrp=''
+chmod=''
+chown=''
+clocktype='clock_t'
+comm=''
+compress=''
+contains='grep'
+cp='copy'
+cpio=''
+cpp='cl -nologo -E'
+cpp_stuff='42'
+cppccsymbols=''
+cpplast=''
+cppminus=''
+cpprun='cl -nologo -E'
+cppstdin='cppstdin'
+cppsymbols=''
+crypt_r_proto='0'
+cryptlib=''
+csh='undef'
+ctermid_r_proto='0'
+ctime_r_proto='0'
+d_Gconvert='sprintf((b),"%.*g",(n),(x))'
+d_PRIEUldbl='undef'
+d_PRIFUldbl='undef'
+d_PRIGUldbl='undef'
+d_PRIXU64='undef'
+d_PRId64='undef'
+d_PRIeldbl='undef'
+d_PRIfldbl='undef'
+d_PRIgldbl='undef'
+d_PRIi64='undef'
+d_PRIo64='undef'
+d_PRIu64='undef'
+d_PRIx64='undef'
+d_SCNfldbl='undef'
+d__fwalk='undef'
+d_access='define'
+d_accessx='undef'
+d_alarm='define'
+d_archlib='define'
+d_asctime_r='undef'
+d_atolf='undef'
+d_atoll='undef'
+d_attribut='undef'
+d_bcmp='undef'
+d_bcopy='undef'
+d_bsd='define'
+d_bsdgetpgrp='undef'
+d_bsdsetpgrp='undef'
+d_bzero='undef'
+d_casti32='undef'
+d_castneg='define'
+d_charvspr='undef'
+d_chown='undef'
+d_chroot='undef'
+d_chsize='define'
+d_class='undef'
+d_closedir='define'
+d_cmsghdr_s='undef'
+d_const='define'
+d_crypt='undef'
+d_crypt_r='undef'
+d_csh='undef'
+d_ctermid_r='undef'
+d_ctime_r='undef'
+d_cuserid='undef'
+d_dbl_dig='define'
+d_dbminitproto='undef'
+d_difftime='define'
+d_dirfd='undef'
+d_dirnamlen='define'
+d_dlerror='define'
+d_dlopen='define'
+d_dlsymun='undef'
+d_dosuid='undef'
+d_drand48_r='undef'
+d_drand48proto='undef'
+d_dup2='define'
+d_eaccess='undef'
+d_endgrent='undef'
+d_endgrent_r='undef'
+d_endhent='undef'
+d_endhostent_r='undef'
+d_endnent='undef'
+d_endnetent_r='undef'
+d_endpent='undef'
+d_endprotoent_r='undef'
+d_endpwent='undef'
+d_endpwent_r='undef'
+d_endsent='undef'
+d_endservent_r='undef'
+d_eofnblk='define'
+d_eunice='undef'
+d_fchdir='undef'
+d_fchmod='undef'
+d_fchown='undef'
+d_fcntl='undef'
+d_fcntl_can_lock='undef'
+d_fd_macros='define'
+d_fd_set='define'
+d_fds_bits='define'
+d_fgetpos='define'
+d_finite='undef'
+d_finitel='undef'
+d_flexfnam='define'
+d_flock='define'
+d_flockproto='define'
+d_fork='undef'
+d_fp_class='undef'
+d_fpathconf='undef'
+d_fpclass='undef'
+d_fpclassify='undef'
+d_fpclassl='undef'
+d_fpos64_t='undef'
+d_frexpl='undef'
+d_fs_data_s='undef'
+d_fseeko='undef'
+d_fsetpos='define'
+d_fstatfs='undef'
+d_fstatvfs='undef'
+d_fsync='undef'
+d_ftello='undef'
+d_ftime='define'
+d_getcwd='define'
+d_getespwnam='undef'
+d_getfsstat='undef'
+d_getgrent='undef'
+d_getgrent_r='undef'
+d_getgrgid_r='undef'
+d_getgrnam_r='undef'
+d_getgrps='undef'
+d_gethbyaddr='define'
+d_gethbyname='define'
+d_gethent='undef'
+d_gethname='define'
+d_gethostbyaddr_r='undef'
+d_gethostbyname_r='undef'
+d_gethostent_r='undef'
+d_gethostprotos='define'
+d_getitimer='undef'
+d_getlogin='define'
+d_getlogin_r='undef'
+d_getmnt='undef'
+d_getmntent='undef'
+d_getnbyaddr='undef'
+d_getnbyname='undef'
+d_getnent='undef'
+d_getnetbyaddr_r='undef'
+d_getnetbyname_r='undef'
+d_getnetent_r='undef'
+d_getnetprotos='undef'
+d_getpagsz='undef'
+d_getpbyname='define'
+d_getpbynumber='define'
+d_getpent='undef'
+d_getpgid='undef'
+d_getpgrp2='undef'
+d_getpgrp='undef'
+d_getppid='undef'
+d_getprior='undef'
+d_getprotobyname_r='undef'
+d_getprotobynumber_r='undef'
+d_getprotoent_r='undef'
+d_getprotoprotos='define'
+d_getprpwnam='undef'
+d_getpwent='undef'
+d_getpwent_r='undef'
+d_getpwnam_r='undef'
+d_getpwuid_r='undef'
+d_getsbyname='define'
+d_getsbyport='define'
+d_getsent='undef'
+d_getservbyname_r='undef'
+d_getservbyport_r='undef'
+d_getservent_r='undef'
+d_getservprotos='define'
+d_getspnam='undef'
+d_getspnam_r='undef'
+d_gettimeod='define'
+d_gmtime_r='undef'
+d_gnulibc='undef'
+d_grpasswd='undef'
+d_hasmntopt='undef'
+d_htonl='define'
+d_index='undef'
+d_inetaton='undef'
+d_int64_t='undef'
+d_isascii='define'
+d_isfinite='undef'
+d_isinf='undef'
+d_isnan='define'
+d_isnanl='undef'
+d_killpg='undef'
+d_lchown='undef'
+d_ldbl_dig='define'
+d_link='define'
+d_localtime_r='undef'
+d_locconv='define'
+d_lockf='undef'
+d_longdbl='define'
+d_longlong='undef'
+d_lseekproto='define'
+d_lstat='undef'
+d_madvise='undef'
+d_mblen='define'
+d_mbstowcs='define'
+d_mbtowc='define'
+d_memchr='define'
+d_memcmp='define'
+d_memcpy='define'
+d_memmove='define'
+d_memset='define'
+d_mkdir='define'
+d_mkdtemp='undef'
+d_mkfifo='undef'
+d_mkstemp='undef'
+d_mkstemps='undef'
+d_mktime='define'
+d_mmap='undef'
+d_modfl='undef'
+d_modfl_pow32_bug='undef'
+d_mprotect='undef'
+d_msg='undef'
+d_msg_ctrunc='undef'
+d_msg_dontroute='undef'
+d_msg_oob='undef'
+d_msg_peek='undef'
+d_msg_proxy='undef'
+d_msgctl='undef'
+d_msgget='undef'
+d_msghdr_s='undef'
+d_msgrcv='undef'
+d_msgsnd='undef'
+d_msync='undef'
+d_munmap='undef'
+d_mymalloc='undef'
+d_nice='undef'
+d_nl_langinfo='undef'
+d_nv_preserves_uv='define'
+d_off64_t='undef'
+d_old_pthread_create_joinable='undef'
+d_oldpthreads='undef'
+d_oldsock='undef'
+d_open3='undef'
+d_pathconf='undef'
+d_pause='define'
+d_perl_otherlibdirs='undef'
+d_phostname='undef'
+d_pipe='define'
+d_poll='undef'
+d_portable='define'
+d_procselfexe='undef'
+d_pthread_atfork='undef'
+d_pthread_yield='undef'
+d_pwage='undef'
+d_pwchange='undef'
+d_pwclass='undef'
+d_pwcomment='undef'
+d_pwexpire='undef'
+d_pwgecos='undef'
+d_pwpasswd='undef'
+d_pwquota='undef'
+d_qgcvt='undef'
+d_quad='undef'
+d_random_r='undef'
+d_readdir64_r='undef'
+d_readdir='define'
+d_readdir_r='undef'
+d_readlink='undef'
+d_readv='undef'
+d_recvmsg='undef'
+d_rename='define'
+d_rewinddir='define'
+d_rmdir='define'
+d_safebcpy='undef'
+d_safemcpy='undef'
+d_sanemcmp='define'
+d_sbrkproto='undef'
+d_sched_yield='undef'
+d_scm_rights='undef'
+d_seekdir='define'
+d_select='define'
+d_sem='undef'
+d_semctl='undef'
+d_semctl_semid_ds='undef'
+d_semctl_semun='undef'
+d_semget='undef'
+d_semop='undef'
+d_sendmsg='undef'
+d_setegid='undef'
+d_seteuid='undef'
+d_setgrent='undef'
+d_setgrent_r='undef'
+d_setgrps='undef'
+d_sethent='undef'
+d_sethostent_r='undef'
+d_setitimer='undef'
+d_setlinebuf='undef'
+d_setlocale='define'
+d_setlocale_r='undef'
+d_setnent='undef'
+d_setnetent_r='undef'
+d_setpent='undef'
+d_setpgid='undef'
+d_setpgrp2='undef'
+d_setpgrp='undef'
+d_setprior='undef'
+d_setproctitle='undef'
+d_setprotoent_r='undef'
+d_setpwent='undef'
+d_setpwent_r='undef'
+d_setregid='undef'
+d_setresgid='undef'
+d_setresuid='undef'
+d_setreuid='undef'
+d_setrgid='undef'
+d_setruid='undef'
+d_setsent='undef'
+d_setservent_r='undef'
+d_setsid='undef'
+d_setvbuf='define'
+d_sfio='undef'
+d_shm='undef'
+d_shmat='undef'
+d_shmatprototype='undef'
+d_shmctl='undef'
+d_shmdt='undef'
+d_shmget='undef'
+d_sigaction='undef'
+d_sigprocmask='undef'
+d_sigsetjmp='undef'
+d_sockatmark='undef'
+d_sockatmarkproto='undef'
+d_socket='define'
+d_socklen_t='undef'
+d_sockpair='undef'
+d_socks5_init='undef'
+d_sqrtl='undef'
+d_srand48_r='undef'
+d_srandom_r='undef'
+d_sresgproto='undef'
+d_sresuproto='undef'
+d_statblks='undef'
+d_statfs_f_flags='undef'
+d_statfs_s='undef'
+d_statvfs='undef'
+d_stdio_cnt_lval='define'
+d_stdio_ptr_lval='define'
+d_stdio_ptr_lval_nochange_cnt='define'
+d_stdio_ptr_lval_sets_cnt='undef'
+d_stdio_stream_array='undef'
+d_stdiobase='define'
+d_stdstdio='define'
+d_strchr='define'
+d_strcoll='define'
+d_strctcpy='define'
+d_strerrm='strerror(e)'
+d_strerror='define'
+d_strerror_r='undef'
+d_strftime='define'
+d_strtod='define'
+d_strtol='define'
+d_strtold='undef'
+d_strtoll='undef'
+d_strtoq='undef'
+d_strtoul='define'
+d_strtoull='undef'
+d_strtouq='undef'
+d_strxfrm='define'
+d_suidsafe='undef'
+d_symlink='undef'
+d_syscall='undef'
+d_syscallproto='undef'
+d_sysconf='undef'
+d_sysernlst=''
+d_syserrlst='define'
+d_system='define'
+d_tcgetpgrp='undef'
+d_tcsetpgrp='undef'
+d_telldir='define'
+d_telldirproto='define'
+d_time='define'
+d_times='define'
+d_tm_tm_gmtoff='undef'
+d_tm_tm_zone='undef'
+d_tmpnam_r='undef'
+d_truncate='undef'
+d_ttyname_r='undef'
+d_tzname='define'
+d_u32align='define'
+d_ualarm='undef'
+d_umask='define'
+d_uname='define'
+d_union_semun='define'
+d_unordered='undef'
+d_usleep='undef'
+d_usleepproto='undef'
+d_ustat='undef'
+d_vendorarch='undef'
+d_vendorbin='undef'
+d_vendorlib='undef'
+d_vfork='undef'
+d_void_closedir='undef'
+d_voidsig='define'
+d_voidtty=''
+d_volatile='define'
+d_vprintf='define'
+d_wait4='undef'
+d_waitpid='define'
+d_wcstombs='define'
+d_wctomb='define'
+d_writev='undef'
+d_xenix='undef'
+date='date'
+db_hashtype='int'
+db_prefixtype='int'
+db_version_major='0'
+db_version_minor='0'
+db_version_patch='0'
+defvoidused='15'
+direntrytype='struct direct'
+dlext='dll'
+doublesize='8'
+drand01='(rand()/(double)((unsigned)1<<RANDBITS))'
+drand48_r_proto='0'
+eagain='EAGAIN'
+ebcdic='undef'
+echo='echo'
+egrep='egrep'
+emacs=''
+endgrent_r_proto='0'
+endhostent_r_proto='0'
+endnetent_r_proto='0'
+endprotoent_r_proto='0'
+endpwent_r_proto='0'
+endservent_r_proto='0'
+eunicefix=':'
+exe_ext='.exe'
+expr='expr'
+extras=''
+fflushNULL='define'
+fflushall='undef'
+find='find'
+firstmakefile='makefile'
+flex=''
+fpossize='8'
+fpostype='fpos_t'
+freetype='void'
+full_ar=''
+full_csh=''
+full_sed=''
+gccosandvers=''
+gccversion=''
+getgrent_r_proto='0'
+getgrgid_r_proto='0'
+getgrnam_r_proto='0'
+gethostbyaddr_r_proto='0'
+gethostbyname_r_proto='0'
+gethostent_r_proto='0'
+getlogin_r_proto='0'
+getnetbyaddr_r_proto='0'
+getnetbyname_r_proto='0'
+getnetent_r_proto='0'
+getprotobyname_r_proto='0'
+getprotobynumber_r_proto='0'
+getprotoent_r_proto='0'
+getpwent_r_proto='0'
+getpwnam_r_proto='0'
+getpwuid_r_proto='0'
+getservbyname_r_proto='0'
+getservbyport_r_proto='0'
+getservent_r_proto='0'
+getspnam_r_proto='0'
+gidformat='"ld"'
+gidsign='-1'
+gidsize='4'
+gidtype='gid_t'
+glibpth='/usr/shlib /lib/pa1.1 /usr/lib/large /lib /usr/lib /usr/lib/386 /lib/386 /lib/large /usr/lib/small /lib/small /usr/ccs/lib /usr/ucblib /usr/shlib '
+gmake='gmake'
+gmtime_r_proto='0'
+grep='grep'
+groupcat=''
+groupstype='gid_t'
+gzip='gzip'
+h_fcntl='false'
+h_sysfile='true'
+hint='recommended'
+hostcat='ypcat hosts'
+i16size='2'
+i16type='short'
+i32size='4'
+i32type='long'
+i64size='8'
+i64type='__int64'
+i8size='1'
+i8type='char'
+i_arpainet='define'
+i_bsdioctl=''
+i_crypt='undef'
+i_db='undef'
+i_dbm='undef'
+i_dirent='define'
+i_dld='undef'
+i_dlfcn='define'
+i_fcntl='define'
+i_float='define'
+i_fp='undef'
+i_fp_class='undef'
+i_gdbm='undef'
+i_grp='undef'
+i_ieeefp='undef'
+i_inttypes='undef'
+i_langinfo='undef'
+i_libutil='undef'
+i_limits='define'
+i_locale='define'
+i_machcthr='undef'
+i_malloc='define'
+i_math='define'
+i_memory='undef'
+i_mntent='undef'
+i_ndbm='undef'
+i_netdb='undef'
+i_neterrno='undef'
+i_netinettcp='undef'
+i_niin='undef'
+i_poll='undef'
+i_prot='undef'
+i_pthread='undef'
+i_pwd='undef'
+i_rpcsvcdbm='define'
+i_sfio='undef'
+i_sgtty='undef'
+i_shadow='undef'
+i_socks='undef'
+i_stdarg='define'
+i_stddef='define'
+i_stdlib='define'
+i_string='define'
+i_sunmath='undef'
+i_sysaccess='undef'
+i_sysdir='undef'
+i_sysfile='undef'
+i_sysfilio='define'
+i_sysin='undef'
+i_sysioctl='undef'
+i_syslog='undef'
+i_sysmman='undef'
+i_sysmode='undef'
+i_sysmount='undef'
+i_sysndir='undef'
+i_sysparam='undef'
+i_sysresrc='undef'
+i_syssecrt='undef'
+i_sysselct='undef'
+i_syssockio='undef'
+i_sysstat='define'
+i_sysstatfs='undef'
+i_sysstatvfs='undef'
+i_systime='undef'
+i_systimek='undef'
+i_systimes='undef'
+i_systypes='define'
+i_sysuio='undef'
+i_sysun='undef'
+i_sysutsname='undef'
+i_sysvfs='undef'
+i_syswait='undef'
+i_termio='undef'
+i_termios='undef'
+i_time='define'
+i_unistd='undef'
+i_ustat='undef'
+i_utime='define'
+i_values='undef'
+i_varargs='undef'
+i_varhdr='varargs.h'
+i_vfork='undef'
+ignore_versioned_solibs=''
+inc_version_list=''
+inc_version_list_init='0'
+incpath='..\..\texk\msvc\include'
+inews=''
+installbin='c:\Local\Perl\bin'
+installhtmldir='c:\Local\Perl\html'
+installhtmlhelpdir='c:\Local\Perl\htmlhelp'
+installman1dir='c:\Local\Perl\man\man1'
+installman3dir='c:\Local\Perl\man\man3'
+installprefix='c:\Local\Perl'
+installprefixexp='c:\Local\Perl'
+installscript='c:\Local\Perl\bin'
+installsitearch='c:\Local\Perl\site\lib'
+installsitebin='c:\Local\Perl\bin'
+installsitelib='c:\Local\Perl\site\lib'
+installstyle='lib'
+installusrbinperl='undef'
+installvendorarch=''
+installvendorbin=''
+installvendorlib=''
+intsize='4'
+issymlink=''
+ivdformat='"ld"'
+ivsize='4'
+ivtype='long'
+known_extensions='B B/C ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Encode/Byte Encode/CN Encode/EBCDIC Encode/JP Encode/KR Encode/Symbol Encode/TW Encode/Unicode Errno Fcntl File/Glob Filter/Util/Call IO List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Thread Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared'
+ksh=''
+ld='link'
+lddlflags='-dll -nologo -nodefaultlib -release -LTCG -libpath:"c:\Local\Perl\lib\CORE" -machine:x86'
+ldflags='-nologo -nodefaultlib -release -LTCG -libpath:"c:\Local\Perl\lib\CORE" -machine:x86'
+ldflags_uselargefiles=''
+ldlibpthname=''
+less='less'
+lib_ext='.lib'
+libc='msvcrt.lib'
+libperl='perl58.lib'
+libsdirs=''
+libsfiles=''
+libsfound=''
+libspath=''
+libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x'
+line='line'
+lint=''
+lkflags=''
+ln=''
+lns='copy'
+localtime_r_proto='0'
+locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
+loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
+longdblsize='10'
+longlongsize='8'
+longsize='4'
+lp=''
+lpr=''
+ls='dir'
+lseeksize='4'
+lseektype='off_t'
+mail=''
+mailx=''
+make='nmake'
+make_set_make='#'
+mallocobj='malloc.o'
+mallocsrc='malloc.c'
+malloctype='void *'
+man1dir='c:\Local\Perl\man\man1'
+man1direxp='c:\Local\Perl\man\man1'
+man1ext='1'
+man3dir='c:\Local\Perl\man\man3'
+man3direxp='c:\Local\Perl\man\man3'
+man3ext='3'
+mips_type=''
+mkdir='mkdir'
+mmaptype='void *'
+modetype='mode_t'
+more='more /e'
+multiarch='undef'
+mv=''
+myarchname='MSWin32'
+mydomain=''
+myhostname=''
+myuname=''
+n='-n'
+need_va_copy='undef'
+netdb_hlen_type='int'
+netdb_host_type='char *'
+netdb_name_type='char *'
+netdb_net_type='long'
+nm=''
+nm_opt=''
+nm_so_opt=''
+nonxs_ext='Encode/TW Encode/Byte Errno Encode/KR Encode/EBCDIC Encode/JP Encode/Symbol Encode/CN'
+nroff=''
+nvEUformat='"E"'
+nvFUformat='"F"'
+nvGUformat='"G"'
+nv_preserves_uv_bits='32'
+nveformat='"e"'
+nvfformat='"f"'
+nvgformat='"g"'
+nvsize='8'
+nvtype='double'
+o_nonblock='O_NONBLOCK'
+obj_ext='.obj'
+old_pthread_create_joinable=''
+optimize='-MD -DNDEBUG -O2xtb2 -G6 -GL'
+orderlib='false'
+otherlibdirs=''
+package='perl5'
+pager='more /e'
+passcat=''
+patchlevel=''
+path_sep=';'
+perl5=''
+perl='perl'
+perladmin=''
+perllibs=' oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvcrt.lib'
+perlpath='c:\Local\Perl\bin\perl.exe'
+pg=''
+phostname='hostname'
+pidtype='int'
+plibpth=''
+pm_apiversion='5.005'
+pmake=''
+pr=''
+prefixexp='c:'
+privlib='c:\Local\Perl\lib'
+procselfexe=''
+prototype='define'
+ptrsize='4'
+quadkind='5'
+quadtype='__int64'
+randbits='15'
+randfunc='rand'
+random_r_proto='0'
+randseedtype='unsigned'
+ranlib='rem'
+rd_nodata='-1'
+readdir64_r_proto='0'
+readdir_r_proto='0'
+revision='5'
+rm='del'
+rmail=''
+runnm='true'
+sPRIEUldbl='"E"'
+sPRIFUldbl='"F"'
+sPRIGUldbl='"G"'
+sPRIXU64='"lX"'
+sPRId64='"ld"'
+sPRIeldbl='"e"'
+sPRIfldbl='"f"'
+sPRIgldbl='"g"'
+sPRIi64='"li"'
+sPRIo64='"lo"'
+sPRIu64='"lu"'
+sPRIx64='"lx"'
+sSCNfldbl='"f"'
+sched_yield=''
+scriptdir='c:\Local\Perl\bin'
+scriptdirexp='c:\Local\Perl\bin'
+sed='sed'
+seedfunc='srand'
+selectminbits='32'
+selecttype='Perl_fd_set *'
+sendmail='blat'
+setgrent_r_proto='0'
+sethostent_r_proto='0'
+setlocale_r_proto='0'
+setnetent_r_proto='0'
+setprotoent_r_proto='0'
+setpwent_r_proto='0'
+setservent_r_proto='0'
+sh='cmd /x /c'
+shar=''
+shmattype='void *'
+shortsize='2'
+shrpenv=''
+sig_count='26'
+sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0'
+sig_num_init='0, 1, 2, 21, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 20, 0'
+sig_size='27'
+signal_t='void'
+sitearch='c:\Local\Perl\site\lib'
+sitearchexp='c:\Local\Perl\site\lib'
+sitebin='c:\Local\Perl\site\bin'
+sitebinexp='c:\Local\Perl\site\bin'
+sitelib='c:\Local\Perl\site\lib'
+sitelib_stem=''
+sitelibexp='c:\Local\Perl\site\lib'
+siteprefix='c:\Local\Perl\site'
+siteprefixexp='c:\Local\Perl\site'
+sizesize='4'
+sizetype='size_t'
+sleep=''
+smail=''
+sockethdr=''
+socketlib=''
+socksizetype='int'
+sort='sort'
+spackage='Perl5'
+spitshell=''
+srand48_r_proto='0'
+srandom_r_proto='0'
+src=''
+ssizetype='int'
+startperl='#!perl'
+stdchar='char'
+stdio_base='((fp)->_base)'
+stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)'
+stdio_cnt='((fp)->_cnt)'
+stdio_filbuf=''
+stdio_ptr='((fp)->_ptr)'
+stdio_stream_array=''
+strerror_r_proto='0'
+strings='/usr/include/string.h'
+submit=''
+subversion=''
+sysman='/usr/man/man1'
+tail=''
+tar=''
+targetarch=''
+tbl=''
+tee=''
+test=''
+timeincl='/usr/include/sys/time.h '
+timetype='time_t'
+tmpnam_r_proto='0'
+touch='touch'
+tr=''
+trnl='\012'
+troff=''
+ttyname_r_proto='0'
+u16size='2'
+u16type='unsigned short'
+u32size='4'
+u32type='unsigned long'
+u64size='8'
+u64type='unsigned __int64'
+u8size='1'
+u8type='unsigned char'
+uidformat='"ld"'
+uidsign='-1'
+uidsize='4'
+uidtype='uid_t'
+uname='uname'
+uniq='uniq'
+uquadtype='unsigned __int64'
+use5005threads='undef'
+use64bitall='undef'
+use64bitint='undef'
+usecrosscompile='undef'
+usedl='define'
+useithreads='define'
+uselargefiles='undef'
+uselongdouble='undef'
+usemorebits='undef'
+usemultiplicity='define'
+usemymalloc='n'
+usenm='false'
+useopcode='true'
+useperlio='define'
+useposix='true'
+usereentrant='undef'
+usesfio='false'
+useshrplib='yes'
+usesocks='undef'
+usethreads='undef'
+usevendorprefix='undef'
+usevfork='false'
+usrinc='/usr/include'
+uuname=''
+uvXUformat='"lX"'
+uvoformat='"lo"'
+uvsize='4'
+uvtype='unsigned long'
+uvuformat='"lu"'
+uvxformat='"lx"'
+vendorarch=''
+vendorarchexp=''
+vendorbin=''
+vendorbinexp=''
+vendorlib=''
+vendorlib_stem=''
+vendorlibexp=''
+vendorprefix=''
+vendorprefixexp=''
+version='5.8.0'
+version_patchlevel_string='version 8 subversion 0'
+versiononly='undef'
+vi=''
+voidflags='15'
+xlibpth='/usr/lib/386 /lib/386'
+xs_apiversion='5.6.0'
+zcat=''
+zip='zip'
+!END!
+
+my $summary = <<'!END!';
+Summary of my $package (revision $baserev $version_patchlevel_string) configuration:
+ Platform:
+ osname=$osname, osvers=$osvers, archname=$archname
+ uname='$myuname'
+ config_args='$config_args'
+ hint=$hint, useposix=$useposix, d_sigaction=$d_sigaction
+ usethreads=$usethreads use5005threads=$use5005threads useithreads=$useithreads usemultiplicity=$usemultiplicity
+ useperlio=$useperlio d_sfio=$d_sfio uselargefiles=$uselargefiles usesocks=$usesocks
+ use64bitint=$use64bitint use64bitall=$use64bitall uselongdouble=$uselongdouble
+ usemymalloc=$usemymalloc, bincompat5005=undef
+ Compiler:
+ cc='$cc', ccflags ='$ccflags',
+ optimize='$optimize',
+ cppflags='$cppflags'
+ ccversion='$ccversion', gccversion='$gccversion', gccosandvers='$gccosandvers'
+ intsize=$intsize, longsize=$longsize, ptrsize=$ptrsize, doublesize=$doublesize, byteorder=$byteorder
+ d_longlong=$d_longlong, longlongsize=$longlongsize, d_longdbl=$d_longdbl, longdblsize=$longdblsize
+ ivtype='$ivtype', ivsize=$ivsize, nvtype='$nvtype', nvsize=$nvsize, Off_t='$lseektype', lseeksize=$lseeksize
+ alignbytes=$alignbytes, prototype=$prototype
+ Linker and Libraries:
+ ld='$ld', ldflags ='$ldflags'
+ libpth=$libpth
+ libs=$libs
+ perllibs=$perllibs
+ libc=$libc, so=$so, useshrplib=$useshrplib, libperl=$libperl
+ gnulibc_version='$gnulibc_version'
+ Dynamic Linking:
+ dlsrc=$dlsrc, dlext=$dlext, d_dlsymun=$d_dlsymun, ccdlflags='$ccdlflags'
+ cccdlflags='$cccdlflags', lddlflags='$lddlflags'
+
+!END!
+my $summary_expanded = 0;
+
+sub myconfig {
+ return $summary if $summary_expanded;
+ $summary =~ s{\$(\w+)}
+ { my $c = $Config{$1}; defined($c) ? $c : 'undef' }ge;
+ $summary_expanded = 1;
+ $summary;
+}
+
+sub FETCH {
+ # check for cached value (which may be undef so we use exists not defined)
+ return $_[0]->{$_[1]} if (exists $_[0]->{$_[1]});
+
+ # Search for it in the big string
+ my($value, $start, $marker, $quote_type);
+
+ $quote_type = "'";
+ # Virtual entries.
+ if ($_[1] eq 'byteorder') {
+ # byteorder does exist on its own but we overlay a virtual
+ # dynamically recomputed value.
+ my $t = $Config{ivtype};
+ my $s = $Config{ivsize};
+ my $f = $t eq 'long' ? 'L!' : $s == 8 ? 'Q': 'I';
+ if ($s == 4 || $s == 8) {
+ my $i = 0;
+ foreach my $c (reverse(2..$s)) { $i |= ord($c); $i <<= 8 }
+ $i |= ord(1);
+ $value = join('', unpack('a'x$s, pack($f, $i)));
+ } else {
+ $value = '?'x$s;
+ }
+ } elsif ($_[1] =~ /^((?:cc|ld)flags|libs(?:wanted)?)_nolargefiles/) {
+ # These are purely virtual, they do not exist, but need to
+ # be computed on demand for largefile-incapable extensions.
+ my $key = "${1}_uselargefiles";
+ $value = $Config{$1};
+ my $withlargefiles = $Config{$key};
+ if ($key =~ /^(?:cc|ld)flags_/) {
+ $value =~ s/\Q$withlargefiles\E\b//;
+ } elsif ($key =~ /^libs/) {
+ my @lflibswanted = split(' ', $Config{libswanted_uselargefiles});
+ if (@lflibswanted) {
+ my %lflibswanted;
+ @lflibswanted{@lflibswanted} = ();
+ if ($key =~ /^libs_/) {
+ my @libs = grep { /^-l(.+)/ &&
+ not exists $lflibswanted{$1} }
+ split(' ', $Config{libs});
+ $Config{libs} = join(' ', @libs);
+ } elsif ($key =~ /^libswanted_/) {
+ my @libswanted = grep { not exists $lflibswanted{$_} }
+ split(' ', $Config{libswanted});
+ $Config{libswanted} = join(' ', @libswanted);
+ }
+ }
+ }
+ } else {
+ $marker = "$_[1]=";
+ # return undef unless (($value) = $config_sh =~ m/^$_[1]='(.*)'\s*$/m);
+ # Check for the common case, ' delimeted
+ $start = index($config_sh, "\n$marker$quote_type");
+ # If that failed, check for " delimited
+ if ($start == -1) {
+ $quote_type = '"';
+ $start = index($config_sh, "\n$marker$quote_type");
+ }
+ return undef if ( ($start == -1) && # in case it's first
+ (substr($config_sh, 0, length($marker)) ne $marker) );
+ if ($start == -1) {
+ # It's the very first thing we found. Skip $start forward
+ # and figure out the quote mark after the =.
+ $start = length($marker) + 1;
+ $quote_type = substr($config_sh, $start - 1, 1);
+ }
+ else {
+ $start += length($marker) + 2;
+ }
+ $value = substr($config_sh, $start,
+ index($config_sh, "$quote_type\n", $start) - $start);
+ }
+ # If we had a double-quote, we'd better eval it so escape
+ # sequences and such can be interpolated. Since the incoming
+ # value is supposed to follow shell rules and not perl rules,
+ # we escape any perl variable markers
+ if ($quote_type eq '"') {
+ $value =~ s/\$/\\\$/g;
+ $value =~ s/\@/\\\@/g;
+ eval "\$value = \"$value\"";
+ }
+ #$value = sprintf($value) if $quote_type eq '"';
+ # So we can say "if $Config{'foo'}".
+ $value = undef if $value eq 'undef';
+ $_[0]->{$_[1]} = $value; # cache it
+ return $value;
+}
+
+my $prevpos = 0;
+
+sub FIRSTKEY {
+ $prevpos = 0;
+ # my($key) = $config_sh =~ m/^(.*?)=/;
+ substr($config_sh, 0, index($config_sh, '=') );
+ # $key;
+}
+
+sub NEXTKEY {
+ # Find out how the current key's quoted so we can skip to its end.
+ my $quote = substr($config_sh, index($config_sh, "=", $prevpos)+1, 1);
+ my $pos = index($config_sh, qq($quote\n), $prevpos) + 2;
+ my $len = index($config_sh, "=", $pos) - $pos;
+ $prevpos = $pos;
+ $len > 0 ? substr($config_sh, $pos, $len) : undef;
+}
+
+sub EXISTS {
+ # exists($_[0]->{$_[1]}) or $config_sh =~ m/^$_[1]=/m;
+ exists($_[0]->{$_[1]}) or
+ index($config_sh, "\n$_[1]='") != -1 or
+ substr($config_sh, 0, length($_[1])+2) eq "$_[1]='" or
+ index($config_sh, "\n$_[1]=\"") != -1 or
+ substr($config_sh, 0, length($_[1])+2) eq "$_[1]=\"" or
+ $_[1] =~ /^(?:(?:cc|ld)flags|libs(?:wanted)?)_nolargefiles$/;
+}
+
+sub STORE { die "\%Config::Config is read-only\n" }
+sub DELETE { &STORE }
+sub CLEAR { &STORE }
+
+
+sub config_sh {
+ $config_sh
+}
+
+sub config_re {
+ my $re = shift;
+ my @matches = grep /^$re=/, split /^/, $config_sh;
+ @matches ? (print @matches) : print "$re: not found\n";
+}
+
+sub config_vars {
+ foreach(@_){
+ config_re($_), next if /\W/;
+ my $v=(exists $Config{$_}) ? $Config{$_} : 'UNKNOWN';
+ $v='undef' unless defined $v;
+ print "$_='$v';\n";
+ }
+}
+
+sub TIEHASH { bless {} }
+
+# avoid Config..Exporter..UNIVERSAL search for DESTROY then AUTOLOAD
+sub DESTROY { }
+
+tie %Config, 'Config';
+
+1;
+__END__
+
+=head1 NAME
+
+Config - access Perl configuration information
+
+=head1 SYNOPSIS
+
+ use Config;
+ if ($Config{'cc'} =~ /gcc/) {
+ print "built by gcc\n";
+ }
+
+ use Config qw(myconfig config_sh config_vars);
+
+ print myconfig();
+
+ print config_sh();
+
+ config_vars(qw(osname archname));
+
+
+=head1 DESCRIPTION
+
+The Config module contains all the information that was available to
+the C<Configure> program at Perl build time (over 900 values).
+
+Shell variables from the F<config.sh> file (written by Configure) are
+stored in the readonly-variable C<%Config>, indexed by their names.
+
+Values stored in config.sh as 'undef' are returned as undefined
+values. The perl C<exists> function can be used to check if a
+named variable exists.
+
+=over 4
+
+=item myconfig()
+
+Returns a textual summary of the major perl configuration values.
+See also C<-V> in L<perlrun/Switches>.
+
+=item config_sh()
+
+Returns the entire perl configuration information in the form of the
+original config.sh shell variable assignment script.
+
+=item config_vars(@names)
+
+Prints to STDOUT the values of the named configuration variable. Each is
+printed on a separate line in the form:
+
+ name='value';
+
+Names which are unknown are output as C<name='UNKNOWN';>.
+See also C<-V:name> in L<perlrun/Switches>.
+
+=back
+
+=head1 EXAMPLE
+
+Here's a more sophisticated example of using %Config:
+
+ use Config;
+ use strict;
+
+ my %sig_num;
+ my @sig_name;
+ unless($Config{sig_name} && $Config{sig_num}) {
+ die "No sigs?";
+ } else {
+ my @names = split ' ', $Config{sig_name};
+ @sig_num{@names} = split ' ', $Config{sig_num};
+ foreach (@names) {
+ $sig_name[$sig_num{$_}] ||= $_;
+ }
+ }
+
+ print "signal #17 = $sig_name[17]\n";
+ if ($sig_num{ALRM}) {
+ print "SIGALRM is $sig_num{ALRM}\n";
+ }
+
+=head1 WARNING
+
+Because this information is not stored within the perl executable
+itself it is possible (but unlikely) that the information does not
+relate to the actual perl binary which is being used to access it.
+
+The Config module is installed into the architecture and version
+specific library directory ($Config{installarchlib}) and it checks the
+perl version number when loaded.
+
+The values stored in config.sh may be either single-quoted or
+double-quoted. Double-quoted strings are handy for those cases where you
+need to include escape sequences in the strings. To avoid runtime variable
+interpolation, any C<$> and C<@> characters are replaced by C<\$> and
+C<\@>, respectively. This isn't foolproof, of course, so don't embed C<\$>
+or C<\@> in double-quoted strings unless you're willing to deal with the
+consequences. (The slashes will end up escaped and the C<$> or C<@> will
+trigger variable interpolation)
+
+=head1 GLOSSARY
+
+Most C<Config> variables are determined by the C<Configure> script
+on platforms supported by it (which is most UNIX platforms). Some
+platforms have custom-made C<Config> variables, and may thus not have
+some of the variables described below, or may have extraneous variables
+specific to that particular port. See the port specific documentation
+in such cases.
+
+=head2 _
+
+=over 4
+
+=item C<_a>
+
+From F<Unix.U>:
+
+This variable defines the extension used for ordinary library files.
+For unix, it is F<.a>. The F<.> is included. Other possible
+values include F<.lib>.
+
+=item C<_exe>
+
+From F<Unix.U>:
+
+This variable defines the extension used for executable files.
+C<DJGPP>, Cygwin and F<OS/2> use F<.exe>. Stratus C<VOS> uses F<.pm>.
+On operating systems which do not require a specific extension
+for executable files, this variable is empty.
+
+=item C<_o>
+
+From F<Unix.U>:
+
+This variable defines the extension used for object files.
+For unix, it is F<.o>. The F<.> is included. Other possible
+values include F<.obj>.
+
+=back
+
+=head2 a
+
+=over 4
+
+=item C<afs>
+
+From F<afs.U>:
+
+This variable is set to C<true> if C<AFS> (Andrew File System) is used
+on the system, C<false> otherwise. It is possible to override this
+with a hint value or command line option, but you'd better know
+what you are doing.
+
+=item C<afsroot>
+
+From F<afs.U>:
+
+This variable is by default set to F</afs>. In the unlikely case
+this is not the correct root, it is possible to override this with
+a hint value or command line option. This will be used in subsequent
+tests for AFSness in the Perl configure and test process.
+
+=item C<alignbytes>
+
+From F<alignbytes.U>:
+
+This variable holds the number of bytes required to align a
+double-- or a long double when applicable. Usual values are
+2, 4 and 8. The default is eight, for safety.
+
+=item C<ansi2knr>
+
+From F<ansi2knr.U>:
+
+This variable is set if the user needs to run ansi2knr.
+Currently, this is not supported, so we just abort.
+
+=item C<aphostname>
+
+From F<d_gethname.U>:
+
+This variable contains the command which can be used to compute the
+host name. The command is fully qualified by its absolute path, to make
+it safe when used by a process with super-user privileges.
+
+=item C<api_revision>
+
+From F<patchlevel.U>:
+
+The three variables, api_revision, api_version, and
+api_subversion, specify the version of the oldest perl binary
+compatible with the present perl. In a full version string
+such as F<5.6.1>, api_revision is the C<5>.
+Prior to 5.5.640, the format was a floating point number,
+like 5.00563.
+
+F<perl.c>:incpush() and F<lib/lib.pm> will automatically search in
+F<$sitelib/.>. for older directories back to the limit specified
+by these api_ variables. This is only useful if you have a
+perl library directory tree structured like the default one.
+See C<INSTALL> for how this works. The versioned site_perl
+directory was introduced in 5.005, so that is the lowest
+possible value. The version list appropriate for the current
+system is determined in F<inc_version_list.U>.
+
+C<XXX> To do: Since compatibility can depend on compile time
+options (such as bincompat, longlong, etc.) it should
+(perhaps) be set by Configure, but currently it isn't.
+Currently, we read a hard-wired value from F<patchlevel.h>.
+Perhaps what we ought to do is take the hard-wired value from
+F<patchlevel.h> but then modify it if the current Configure
+options warrant. F<patchlevel.h> then would use an #ifdef guard.
+
+=item C<api_subversion>
+
+From F<patchlevel.U>:
+
+The three variables, api_revision, api_version, and
+api_subversion, specify the version of the oldest perl binary
+compatible with the present perl. In a full version string
+such as F<5.6.1>, api_subversion is the C<1>. See api_revision for
+full details.
+
+=item C<api_version>
+
+From F<patchlevel.U>:
+
+The three variables, api_revision, api_version, and
+api_subversion, specify the version of the oldest perl binary
+compatible with the present perl. In a full version string
+such as F<5.6.1>, api_version is the C<6>. See api_revision for
+full details. As a special case, 5.5.0 is rendered in the
+old-style as 5.005. (In the 5.005_0x maintenance series,
+this was the only versioned directory in $sitelib.)
+
+=item C<api_versionstring>
+
+From F<patchlevel.U>:
+
+This variable combines api_revision, api_version, and
+api_subversion in a format such as 5.6.1 (or 5_6_1) suitable
+for use as a directory name. This is filesystem dependent.
+
+=item C<ar>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the ar program. After Configure runs,
+the value is reset to a plain C<ar> and is not useful.
+
+=item C<archlib>
+
+From F<archlib.U>:
+
+This variable holds the name of the directory in which the user wants
+to put architecture-dependent public library files for $package.
+It is most often a local directory such as F</usr/local/lib>.
+Programs using this variable must be prepared to deal
+with filename expansion.
+
+=item C<archlibexp>
+
+From F<archlib.U>:
+
+This variable is the same as the archlib variable, but is
+filename expanded at configuration time, for convenient use.
+
+=item C<archname64>
+
+From F<use64bits.U>:
+
+This variable is used for the 64-bitness part of $archname.
+
+=item C<archname>
+
+From F<archname.U>:
+
+This variable is a short name to characterize the current
+architecture. It is used mainly to construct the default archlib.
+
+=item C<archobjs>
+
+From F<Unix.U>:
+
+This variable defines any additional objects that must be linked
+in with the program on this architecture. On unix, it is usually
+empty. It is typically used to include emulations of unix calls
+or other facilities. For perl on F<OS/2>, for example, this would
+include F<os2/os2.obj>.
+
+=item C<asctime_r_proto>
+
+From F<d_asctime_r.U>:
+
+This variable encodes the prototype of asctime_r.
+It is zero if d_asctime_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_asctime_r
+is defined.
+
+=item C<awk>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the awk program. After Configure runs,
+the value is reset to a plain C<awk> and is not useful.
+
+=back
+
+=head2 b
+
+=over 4
+
+=item C<baserev>
+
+From F<baserev.U>:
+
+The base revision level of this package, from the F<.package> file.
+
+=item C<bash>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<bin>
+
+From F<bin.U>:
+
+This variable holds the name of the directory in which the user wants
+to put publicly executable images for the package in question. It
+is most often a local directory such as F</usr/local/bin>. Programs using
+this variable must be prepared to deal with F<~name> substitution.
+
+=item C<binexp>
+
+From F<bin.U>:
+
+This is the same as the bin variable, but is filename expanded at
+configuration time, for use in your makefiles.
+
+=item C<bison>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the bison program. After Configure runs,
+the value is reset to a plain C<bison> and is not useful.
+
+=item C<byacc>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the byacc program. After Configure runs,
+the value is reset to a plain C<byacc> and is not useful.
+
+=item C<byteorder>
+
+From F<byteorder.U>:
+
+This variable holds the byte order in a C<UV>. In the following,
+larger digits indicate more significance. The variable byteorder
+is either 4321 on a big-endian machine, or 1234 on a little-endian,
+or 87654321 on a Cray ... or 3412 with weird order !
+
+=back
+
+=head2 c
+
+=over 4
+
+=item C<c>
+
+From F<n.U>:
+
+This variable contains the \c string if that is what causes the echo
+command to suppress newline. Otherwise it is null. Correct usage is
+$echo $n "prompt for a question: $c".
+
+=item C<castflags>
+
+From F<d_castneg.U>:
+
+This variable contains a flag that precise difficulties the
+compiler has casting odd floating values to unsigned long:
+0 = ok
+1 = couldn't cast < 0
+2 = couldn't cast >= 0x80000000
+4 = couldn't cast in argument expression list
+
+=item C<cat>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the cat program. After Configure runs,
+the value is reset to a plain C<cat> and is not useful.
+
+=item C<cc>
+
+From F<cc.U>:
+
+This variable holds the name of a command to execute a C compiler which
+can resolve multiple global references that happen to have the same
+name. Usual values are C<cc> and C<gcc>.
+Fervent C<ANSI> compilers may be called C<c89>. C<AIX> has xlc.
+
+=item C<cccdlflags>
+
+From F<dlsrc.U>:
+
+This variable contains any special flags that might need to be
+passed with C<cc -c> to compile modules to be used to create a shared
+library that will be used for dynamic loading. For hpux, this
+should be +z. It is up to the makefile to use it.
+
+=item C<ccdlflags>
+
+From F<dlsrc.U>:
+
+This variable contains any special flags that might need to be
+passed to cc to link with a shared library for dynamic loading.
+It is up to the makefile to use it. For sunos 4.1, it should
+be empty.
+
+=item C<ccflags>
+
+From F<ccflags.U>:
+
+This variable contains any additional C compiler flags desired by
+the user. It is up to the Makefile to use this.
+
+=item C<ccflags_uselargefiles>
+
+From F<uselfs.U>:
+
+This variable contains the compiler flags needed by large file builds
+and added to ccflags by hints files.
+
+=item C<ccname>
+
+From F<Checkcc.U>:
+
+This can set either by hints files or by Configure. If using
+gcc, this is gcc, and if not, usually equal to cc, unimpressive, no?
+Some platforms, however, make good use of this by storing the
+flavor of the C compiler being used here. For example if using
+the Sun WorkShop suite, ccname will be C<workshop>.
+
+=item C<ccsymbols>
+
+From F<Cppsym.U>:
+
+The variable contains the symbols defined by the C compiler alone.
+The symbols defined by cpp or by cc when it calls cpp are not in
+this list, see cppsymbols and cppccsymbols.
+The list is a space-separated list of symbol=value tokens.
+
+=item C<ccversion>
+
+From F<Checkcc.U>:
+
+This can set either by hints files or by Configure. If using
+a (non-gcc) vendor cc, this variable may contain a version for
+the compiler.
+
+=item C<cf_by>
+
+From F<cf_who.U>:
+
+Login name of the person who ran the Configure script and answered the
+questions. This is used to tag both F<config.sh> and F<config_h.SH>.
+
+=item C<cf_email>
+
+From F<cf_email.U>:
+
+Electronic mail address of the person who ran Configure. This can be
+used by units that require the user's e-mail, like F<MailList.U>.
+
+=item C<cf_time>
+
+From F<cf_who.U>:
+
+Holds the output of the C<date> command when the configuration file was
+produced. This is used to tag both F<config.sh> and F<config_h.SH>.
+
+=item C<charsize>
+
+From F<charsize.U>:
+
+This variable contains the value of the C<CHARSIZE> symbol, which
+indicates to the C program how many bytes there are in a character.
+
+=item C<chgrp>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<chmod>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the chmod program. After Configure runs,
+the value is reset to a plain C<chmod> and is not useful.
+
+=item C<chown>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<clocktype>
+
+From F<d_times.U>:
+
+This variable holds the type returned by times(). It can be long,
+or clock_t on C<BSD> sites (in which case <sys/types.h> should be
+included).
+
+=item C<comm>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the comm program. After Configure runs,
+the value is reset to a plain C<comm> and is not useful.
+
+=item C<compress>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<contains>
+
+From F<contains.U>:
+
+This variable holds the command to do a grep with a proper return
+status. On most sane systems it is simply C<grep>. On insane systems
+it is a grep followed by a cat followed by a test. This variable
+is primarily for the use of other Configure units.
+
+=item C<cp>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the cp program. After Configure runs,
+the value is reset to a plain C<cp> and is not useful.
+
+=item C<cpio>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<cpp>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the cpp program. After Configure runs,
+the value is reset to a plain C<cpp> and is not useful.
+
+=item C<cpp_stuff>
+
+From F<cpp_stuff.U>:
+
+This variable contains an identification of the catenation mechanism
+used by the C preprocessor.
+
+=item C<cppccsymbols>
+
+From F<Cppsym.U>:
+
+The variable contains the symbols defined by the C compiler
+when it calls cpp. The symbols defined by the cc alone or cpp
+alone are not in this list, see ccsymbols and cppsymbols.
+The list is a space-separated list of symbol=value tokens.
+
+=item C<cppflags>
+
+From F<ccflags.U>:
+
+This variable holds the flags that will be passed to the C pre-
+processor. It is up to the Makefile to use it.
+
+=item C<cpplast>
+
+From F<cppstdin.U>:
+
+This variable has the same functionality as cppminus, only it applies
+to cpprun and not cppstdin.
+
+=item C<cppminus>
+
+From F<cppstdin.U>:
+
+This variable contains the second part of the string which will invoke
+the C preprocessor on the standard input and produce to standard
+output. This variable will have the value C<-> if cppstdin needs
+a minus to specify standard input, otherwise the value is "".
+
+=item C<cpprun>
+
+From F<cppstdin.U>:
+
+This variable contains the command which will invoke a C preprocessor
+on standard input and put the output to stdout. It is guaranteed not
+to be a wrapper and may be a null string if no preprocessor can be
+made directly available. This preprocessor might be different from the
+one used by the C compiler. Don't forget to append cpplast after the
+preprocessor options.
+
+=item C<cppstdin>
+
+From F<cppstdin.U>:
+
+This variable contains the command which will invoke the C
+preprocessor on standard input and put the output to stdout.
+It is primarily used by other Configure units that ask about
+preprocessor symbols.
+
+=item C<cppsymbols>
+
+From F<Cppsym.U>:
+
+The variable contains the symbols defined by the C preprocessor
+alone. The symbols defined by cc or by cc when it calls cpp are
+not in this list, see ccsymbols and cppccsymbols.
+The list is a space-separated list of symbol=value tokens.
+
+=item C<crypt_r_proto>
+
+From F<d_crypt_r.U>:
+
+This variable encodes the prototype of crypt_r.
+It is zero if d_crypt_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_crypt_r
+is defined.
+
+=item C<cryptlib>
+
+From F<d_crypt.U>:
+
+This variable holds -lcrypt or the path to a F<libcrypt.a> archive if
+the crypt() function is not defined in the standard C library. It is
+up to the Makefile to use this.
+
+=item C<csh>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the csh program. After Configure runs,
+the value is reset to a plain C<csh> and is not useful.
+
+=item C<ctermid_r_proto>
+
+From F<d_ctermid_r.U>:
+
+This variable encodes the prototype of ctermid_r.
+It is zero if d_ctermid_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_ctermid_r
+is defined.
+
+=item C<ctime_r_proto>
+
+From F<d_ctime_r.U>:
+
+This variable encodes the prototype of ctime_r.
+It is zero if d_ctime_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_ctime_r
+is defined.
+
+=back
+
+=head2 d
+
+=over 4
+
+=item C<d__fwalk>
+
+From F<d__fwalk.U>:
+
+This variable conditionally defines C<HAS__FWALK> if _fwalk() is
+available to apply a function to all the file handles.
+
+=item C<d_access>
+
+From F<d_access.U>:
+
+This variable conditionally defines C<HAS_ACCESS> if the access() system
+call is available to check for access permissions using real IDs.
+
+=item C<d_accessx>
+
+From F<d_accessx.U>:
+
+This variable conditionally defines the C<HAS_ACCESSX> symbol, which
+indicates to the C program that the accessx() routine is available.
+
+=item C<d_alarm>
+
+From F<d_alarm.U>:
+
+This variable conditionally defines the C<HAS_ALARM> symbol, which
+indicates to the C program that the alarm() routine is available.
+
+=item C<d_archlib>
+
+From F<archlib.U>:
+
+This variable conditionally defines C<ARCHLIB> to hold the pathname
+of architecture-dependent library files for $package. If
+$archlib is the same as $privlib, then this is set to undef.
+
+=item C<d_asctime_r>
+
+From F<d_asctime_r.U>:
+
+This variable conditionally defines the C<HAS_ASCTIME_R> symbol,
+which indicates to the C program that the asctime_r()
+routine is available.
+
+=item C<d_atolf>
+
+From F<atolf.U>:
+
+This variable conditionally defines the C<HAS_ATOLF> symbol, which
+indicates to the C program that the atolf() routine is available.
+
+=item C<d_atoll>
+
+From F<atoll.U>:
+
+This variable conditionally defines the C<HAS_ATOLL> symbol, which
+indicates to the C program that the atoll() routine is available.
+
+=item C<d_attribut>
+
+From F<d_attribut.U>:
+
+This variable conditionally defines C<HASATTRIBUTE>, which
+indicates the C compiler can check for function attributes,
+such as printf formats.
+
+=item C<d_bcmp>
+
+From F<d_bcmp.U>:
+
+This variable conditionally defines the C<HAS_BCMP> symbol if
+the bcmp() routine is available to compare strings.
+
+=item C<d_bcopy>
+
+From F<d_bcopy.U>:
+
+This variable conditionally defines the C<HAS_BCOPY> symbol if
+the bcopy() routine is available to copy strings.
+
+=item C<d_bsd>
+
+From F<Guess.U>:
+
+This symbol conditionally defines the symbol C<BSD> when running on a
+C<BSD> system.
+
+=item C<d_bsdgetpgrp>
+
+From F<d_getpgrp.U>:
+
+This variable conditionally defines C<USE_BSD_GETPGRP> if
+getpgrp needs one arguments whereas C<USG> one needs none.
+
+=item C<d_bsdsetpgrp>
+
+From F<d_setpgrp.U>:
+
+This variable conditionally defines C<USE_BSD_SETPGRP> if
+setpgrp needs two arguments whereas C<USG> one needs none.
+See also d_setpgid for a C<POSIX> interface.
+
+=item C<d_bzero>
+
+From F<d_bzero.U>:
+
+This variable conditionally defines the C<HAS_BZERO> symbol if
+the bzero() routine is available to set memory to 0.
+
+=item C<d_casti32>
+
+From F<d_casti32.U>:
+
+This variable conditionally defines CASTI32, which indicates
+whether the C compiler can cast large floats to 32-bit ints.
+
+=item C<d_castneg>
+
+From F<d_castneg.U>:
+
+This variable conditionally defines C<CASTNEG>, which indicates
+wether the C compiler can cast negative float to unsigned.
+
+=item C<d_charvspr>
+
+From F<d_vprintf.U>:
+
+This variable conditionally defines C<CHARVSPRINTF> if this system
+has vsprintf returning type (char*). The trend seems to be to
+declare it as "int vsprintf()".
+
+=item C<d_chown>
+
+From F<d_chown.U>:
+
+This variable conditionally defines the C<HAS_CHOWN> symbol, which
+indicates to the C program that the chown() routine is available.
+
+=item C<d_chroot>
+
+From F<d_chroot.U>:
+
+This variable conditionally defines the C<HAS_CHROOT> symbol, which
+indicates to the C program that the chroot() routine is available.
+
+=item C<d_chsize>
+
+From F<d_chsize.U>:
+
+This variable conditionally defines the C<CHSIZE> symbol, which
+indicates to the C program that the chsize() routine is available
+to truncate files. You might need a -lx to get this routine.
+
+=item C<d_class>
+
+From F<d_class.U>:
+
+This variable conditionally defines the C<HAS_CLASS> symbol, which
+indicates to the C program that the class() routine is available.
+
+=item C<d_closedir>
+
+From F<d_closedir.U>:
+
+This variable conditionally defines C<HAS_CLOSEDIR> if closedir() is
+available.
+
+=item C<d_cmsghdr_s>
+
+From F<d_cmsghdr_s.U>:
+
+This variable conditionally defines the C<HAS_STRUCT_CMSGHDR> symbol,
+which indicates that the struct cmsghdr is supported.
+
+=item C<d_const>
+
+From F<d_const.U>:
+
+This variable conditionally defines the C<HASCONST> symbol, which
+indicates to the C program that this C compiler knows about the
+const type.
+
+=item C<d_crypt>
+
+From F<d_crypt.U>:
+
+This variable conditionally defines the C<CRYPT> symbol, which
+indicates to the C program that the crypt() routine is available
+to encrypt passwords and the like.
+
+=item C<d_crypt_r>
+
+From F<d_crypt_r.U>:
+
+This variable conditionally defines the C<HAS_CRYPT_R> symbol,
+which indicates to the C program that the crypt_r()
+routine is available.
+
+=item C<d_csh>
+
+From F<d_csh.U>:
+
+This variable conditionally defines the C<CSH> symbol, which
+indicates to the C program that the C-shell exists.
+
+=item C<d_ctermid_r>
+
+From F<d_ctermid_r.U>:
+
+This variable conditionally defines the C<HAS_CTERMID_R> symbol,
+which indicates to the C program that the ctermid_r()
+routine is available.
+
+=item C<d_ctime_r>
+
+From F<d_ctime_r.U>:
+
+This variable conditionally defines the C<HAS_CTIME_R> symbol,
+which indicates to the C program that the ctime_r()
+routine is available.
+
+=item C<d_cuserid>
+
+From F<d_cuserid.U>:
+
+This variable conditionally defines the C<HAS_CUSERID> symbol, which
+indicates to the C program that the cuserid() routine is available
+to get character login names.
+
+=item C<d_dbl_dig>
+
+From F<d_dbl_dig.U>:
+
+This variable conditionally defines d_dbl_dig if this system's
+header files provide C<DBL_DIG>, which is the number of significant
+digits in a double precision number.
+
+=item C<d_dbminitproto>
+
+From F<d_dbminitproto.U>:
+
+This variable conditionally defines the C<HAS_DBMINIT_PROTO> symbol,
+which indicates to the C program that the system provides
+a prototype for the dbminit() function. Otherwise, it is
+up to the program to supply one.
+
+=item C<d_difftime>
+
+From F<d_difftime.U>:
+
+This variable conditionally defines the C<HAS_DIFFTIME> symbol, which
+indicates to the C program that the difftime() routine is available.
+
+=item C<d_dirfd>
+
+From F<d_dirfd.U>:
+
+This variable conditionally defines the C<HAS_DIRFD> constant,
+which indicates to the C program that dirfd() is available
+to return the file descriptor of a directory stream.
+
+=item C<d_dirnamlen>
+
+From F<i_dirent.U>:
+
+This variable conditionally defines C<DIRNAMLEN>, which indicates
+to the C program that the length of directory entry names is
+provided by a d_namelen field.
+
+=item C<d_dlerror>
+
+From F<d_dlerror.U>:
+
+This variable conditionally defines the C<HAS_DLERROR> symbol, which
+indicates to the C program that the dlerror() routine is available.
+
+=item C<d_dlopen>
+
+From F<d_dlopen.U>:
+
+This variable conditionally defines the C<HAS_DLOPEN> symbol, which
+indicates to the C program that the dlopen() routine is available.
+
+=item C<d_dlsymun>
+
+From F<d_dlsymun.U>:
+
+This variable conditionally defines C<DLSYM_NEEDS_UNDERSCORE>, which
+indicates that we need to prepend an underscore to the symbol
+name before calling dlsym().
+
+=item C<d_dosuid>
+
+From F<d_dosuid.U>:
+
+This variable conditionally defines the symbol C<DOSUID>, which
+tells the C program that it should insert setuid emulation code
+on hosts which have setuid #! scripts disabled.
+
+=item C<d_drand48_r>
+
+From F<d_drand48_r.U>:
+
+This variable conditionally defines the HAS_DRAND48_R symbol,
+which indicates to the C program that the drand48_r()
+routine is available.
+
+=item C<d_drand48proto>
+
+From F<d_drand48proto.U>:
+
+This variable conditionally defines the HAS_DRAND48_PROTO symbol,
+which indicates to the C program that the system provides
+a prototype for the drand48() function. Otherwise, it is
+up to the program to supply one.
+
+=item C<d_dup2>
+
+From F<d_dup2.U>:
+
+This variable conditionally defines HAS_DUP2 if dup2() is
+available to duplicate file descriptors.
+
+=item C<d_eaccess>
+
+From F<d_eaccess.U>:
+
+This variable conditionally defines the C<HAS_EACCESS> symbol, which
+indicates to the C program that the eaccess() routine is available.
+
+=item C<d_endgrent>
+
+From F<d_endgrent.U>:
+
+This variable conditionally defines the C<HAS_ENDGRENT> symbol, which
+indicates to the C program that the endgrent() routine is available
+for sequential access of the group database.
+
+=item C<d_endgrent_r>
+
+From F<d_endgrent_r.U>:
+
+This variable conditionally defines the C<HAS_ENDGRENT_R> symbol,
+which indicates to the C program that the endgrent_r()
+routine is available.
+
+=item C<d_endhent>
+
+From F<d_endhent.U>:
+
+This variable conditionally defines C<HAS_ENDHOSTENT> if endhostent() is
+available to close whatever was being used for host queries.
+
+=item C<d_endhostent_r>
+
+From F<d_endhostent_r.U>:
+
+This variable conditionally defines the C<HAS_ENDHOSTENT_R> symbol,
+which indicates to the C program that the endhostent_r()
+routine is available.
+
+=item C<d_endnent>
+
+From F<d_endnent.U>:
+
+This variable conditionally defines C<HAS_ENDNETENT> if endnetent() is
+available to close whatever was being used for network queries.
+
+=item C<d_endnetent_r>
+
+From F<d_endnetent_r.U>:
+
+This variable conditionally defines the C<HAS_ENDNETENT_R> symbol,
+which indicates to the C program that the endnetent_r()
+routine is available.
+
+=item C<d_endpent>
+
+From F<d_endpent.U>:
+
+This variable conditionally defines C<HAS_ENDPROTOENT> if endprotoent() is
+available to close whatever was being used for protocol queries.
+
+=item C<d_endprotoent_r>
+
+From F<d_endprotoent_r.U>:
+
+This variable conditionally defines the C<HAS_ENDPROTOENT_R> symbol,
+which indicates to the C program that the endprotoent_r()
+routine is available.
+
+=item C<d_endpwent>
+
+From F<d_endpwent.U>:
+
+This variable conditionally defines the C<HAS_ENDPWENT> symbol, which
+indicates to the C program that the endpwent() routine is available
+for sequential access of the passwd database.
+
+=item C<d_endpwent_r>
+
+From F<d_endpwent_r.U>:
+
+This variable conditionally defines the C<HAS_ENDPWENT_R> symbol,
+which indicates to the C program that the endpwent_r()
+routine is available.
+
+=item C<d_endsent>
+
+From F<d_endsent.U>:
+
+This variable conditionally defines C<HAS_ENDSERVENT> if endservent() is
+available to close whatever was being used for service queries.
+
+=item C<d_endservent_r>
+
+From F<d_endservent_r.U>:
+
+This variable conditionally defines the C<HAS_ENDSERVENT_R> symbol,
+which indicates to the C program that the endservent_r()
+routine is available.
+
+=item C<d_eofnblk>
+
+From F<nblock_io.U>:
+
+This variable conditionally defines C<EOF_NONBLOCK> if C<EOF> can be seen
+when reading from a non-blocking I/O source.
+
+=item C<d_eunice>
+
+From F<Guess.U>:
+
+This variable conditionally defines the symbols C<EUNICE> and C<VAX>, which
+alerts the C program that it must deal with ideosyncracies of C<VMS>.
+
+=item C<d_fchdir>
+
+From F<d_fchdir.U>:
+
+This variable conditionally defines the C<HAS_FCHDIR> symbol, which
+indicates to the C program that the fchdir() routine is available.
+
+=item C<d_fchmod>
+
+From F<d_fchmod.U>:
+
+This variable conditionally defines the C<HAS_FCHMOD> symbol, which
+indicates to the C program that the fchmod() routine is available
+to change mode of opened files.
+
+=item C<d_fchown>
+
+From F<d_fchown.U>:
+
+This variable conditionally defines the C<HAS_FCHOWN> symbol, which
+indicates to the C program that the fchown() routine is available
+to change ownership of opened files.
+
+=item C<d_fcntl>
+
+From F<d_fcntl.U>:
+
+This variable conditionally defines the C<HAS_FCNTL> symbol, and indicates
+whether the fcntl() function exists
+
+=item C<d_fcntl_can_lock>
+
+From F<d_fcntl_can_lock.U>:
+
+This variable conditionally defines the C<FCNTL_CAN_LOCK> symbol
+and indicates whether file locking with fcntl() works.
+
+=item C<d_fd_macros>
+
+From F<d_fd_set.U>:
+
+This variable contains the eventual value of the C<HAS_FD_MACROS> symbol,
+which indicates if your C compiler knows about the macros which
+manipulate an fd_set.
+
+=item C<d_fd_set>
+
+From F<d_fd_set.U>:
+
+This variable contains the eventual value of the C<HAS_FD_SET> symbol,
+which indicates if your C compiler knows about the fd_set typedef.
+
+=item C<d_fds_bits>
+
+From F<d_fd_set.U>:
+
+This variable contains the eventual value of the C<HAS_FDS_BITS> symbol,
+which indicates if your fd_set typedef contains the fds_bits member.
+If you have an fd_set typedef, but the dweebs who installed it did
+a half-fast job and neglected to provide the macros to manipulate
+an fd_set, C<HAS_FDS_BITS> will let us know how to fix the gaffe.
+
+=item C<d_fgetpos>
+
+From F<d_fgetpos.U>:
+
+This variable conditionally defines C<HAS_FGETPOS> if fgetpos() is
+available to get the file position indicator.
+
+=item C<d_finite>
+
+From F<d_finite.U>:
+
+This variable conditionally defines the C<HAS_FINITE> symbol, which
+indicates to the C program that the finite() routine is available.
+
+=item C<d_finitel>
+
+From F<d_finitel.U>:
+
+This variable conditionally defines the C<HAS_FINITEL> symbol, which
+indicates to the C program that the finitel() routine is available.
+
+=item C<d_flexfnam>
+
+From F<d_flexfnam.U>:
+
+This variable conditionally defines the C<FLEXFILENAMES> symbol, which
+indicates that the system supports filenames longer than 14 characters.
+
+=item C<d_flock>
+
+From F<d_flock.U>:
+
+This variable conditionally defines C<HAS_FLOCK> if flock() is
+available to do file locking.
+
+=item C<d_flockproto>
+
+From F<d_flockproto.U>:
+
+This variable conditionally defines the C<HAS_FLOCK_PROTO> symbol,
+which indicates to the C program that the system provides
+a prototype for the flock() function. Otherwise, it is
+up to the program to supply one.
+
+=item C<d_fork>
+
+From F<d_fork.U>:
+
+This variable conditionally defines the C<HAS_FORK> symbol, which
+indicates to the C program that the fork() routine is available.
+
+=item C<d_fp_class>
+
+From F<d_fp_class.U>:
+
+This variable conditionally defines the C<HAS_FP_CLASS> symbol, which
+indicates to the C program that the fp_class() routine is available.
+
+=item C<d_fpathconf>
+
+From F<d_pathconf.U>:
+
+This variable conditionally defines the C<HAS_FPATHCONF> symbol, which
+indicates to the C program that the pathconf() routine is available
+to determine file-system related limits and options associated
+with a given open file descriptor.
+
+=item C<d_fpclass>
+
+From F<d_fpclass.U>:
+
+This variable conditionally defines the C<HAS_FPCLASS> symbol, which
+indicates to the C program that the fpclass() routine is available.
+
+=item C<d_fpclassify>
+
+From F<d_fpclassify.U>:
+
+This variable conditionally defines the C<HAS_FPCLASSIFY> symbol, which
+indicates to the C program that the fpclassify() routine is available.
+
+=item C<d_fpclassl>
+
+From F<d_fpclassl.U>:
+
+This variable conditionally defines the C<HAS_FPCLASSL> symbol, which
+indicates to the C program that the fpclassl() routine is available.
+
+=item C<d_fpos64_t>
+
+From F<d_fpos64_t.U>:
+
+This symbol will be defined if the C compiler supports fpos64_t.
+
+=item C<d_frexpl>
+
+From F<d_frexpl.U>:
+
+This variable conditionally defines the C<HAS_FREXPL> symbol, which
+indicates to the C program that the frexpl() routine is available.
+
+=item C<d_fs_data_s>
+
+From F<d_fs_data_s.U>:
+
+This variable conditionally defines the C<HAS_STRUCT_FS_DATA> symbol,
+which indicates that the struct fs_data is supported.
+
+=item C<d_fseeko>
+
+From F<d_fseeko.U>:
+
+This variable conditionally defines the C<HAS_FSEEKO> symbol, which
+indicates to the C program that the fseeko() routine is available.
+
+=item C<d_fsetpos>
+
+From F<d_fsetpos.U>:
+
+This variable conditionally defines C<HAS_FSETPOS> if fsetpos() is
+available to set the file position indicator.
+
+=item C<d_fstatfs>
+
+From F<d_fstatfs.U>:
+
+This variable conditionally defines the C<HAS_FSTATFS> symbol, which
+indicates to the C program that the fstatfs() routine is available.
+
+=item C<d_fstatvfs>
+
+From F<d_statvfs.U>:
+
+This variable conditionally defines the C<HAS_FSTATVFS> symbol, which
+indicates to the C program that the fstatvfs() routine is available.
+
+=item C<d_fsync>
+
+From F<d_fsync.U>:
+
+This variable conditionally defines the C<HAS_FSYNC> symbol, which
+indicates to the C program that the fsync() routine is available.
+
+=item C<d_ftello>
+
+From F<d_ftello.U>:
+
+This variable conditionally defines the C<HAS_FTELLO> symbol, which
+indicates to the C program that the ftello() routine is available.
+
+=item C<d_ftime>
+
+From F<d_ftime.U>:
+
+This variable conditionally defines the C<HAS_FTIME> symbol, which indicates
+that the ftime() routine exists. The ftime() routine is basically
+a sub-second accuracy clock.
+
+=item C<d_Gconvert>
+
+From F<d_gconvert.U>:
+
+This variable holds what Gconvert is defined as to convert
+floating point numbers into strings. By default, Configure
+sets C<this> macro to use the first of gconvert, gcvt, or sprintf
+that pass sprintf-%g-like behaviour tests. If perl is using
+long doubles, the macro uses the first of the following
+functions that pass Configure's tests: qgcvt, sprintf (if
+Configure knows how to make sprintf format long doubles--see
+sPRIgldbl), gconvert, gcvt, and sprintf (casting to double).
+The gconvert_preference and gconvert_ld_preference variables
+can be used to alter Configure's preferences, for doubles and
+long doubles, respectively. If present, they contain a
+space-separated list of one or more of the above function
+names in the order they should be tried.
+
+d_Gconvert may be set to override Configure with a platform-
+specific function. If this function expects a double, a
+different value may need to be set by the F<uselongdouble.cbu>
+call-back unit so that long doubles can be formatted without
+loss of precision.
+
+=item C<d_getcwd>
+
+From F<d_getcwd.U>:
+
+This variable conditionally defines the C<HAS_GETCWD> symbol, which
+indicates to the C program that the getcwd() routine is available
+to get the current working directory.
+
+=item C<d_getespwnam>
+
+From F<d_getespwnam.U>:
+
+This variable conditionally defines C<HAS_GETESPWNAM> if getespwnam() is
+available to retrieve enchanced (shadow) password entries by name.
+
+=item C<d_getfsstat>
+
+From F<d_getfsstat.U>:
+
+This variable conditionally defines the C<HAS_GETFSSTAT> symbol, which
+indicates to the C program that the getfsstat() routine is available.
+
+=item C<d_getgrent>
+
+From F<d_getgrent.U>:
+
+This variable conditionally defines the C<HAS_GETGRENT> symbol, which
+indicates to the C program that the getgrent() routine is available
+for sequential access of the group database.
+
+=item C<d_getgrent_r>
+
+From F<d_getgrent_r.U>:
+
+This variable conditionally defines the C<HAS_GETGRENT_R> symbol,
+which indicates to the C program that the getgrent_r()
+routine is available.
+
+=item C<d_getgrgid_r>
+
+From F<d_getgrgid_r.U>:
+
+This variable conditionally defines the C<HAS_GETGRGID_R> symbol,
+which indicates to the C program that the getgrgid_r()
+routine is available.
+
+=item C<d_getgrnam_r>
+
+From F<d_getgrnam_r.U>:
+
+This variable conditionally defines the C<HAS_GETGRNAM_R> symbol,
+which indicates to the C program that the getgrnam_r()
+routine is available.
+
+=item C<d_getgrps>
+
+From F<d_getgrps.U>:
+
+This variable conditionally defines the C<HAS_GETGROUPS> symbol, which
+indicates to the C program that the getgroups() routine is available
+to get the list of process groups.
+
+=item C<d_gethbyaddr>
+
+From F<d_gethbyad.U>:
+
+This variable conditionally defines the C<HAS_GETHOSTBYADDR> symbol, which
+indicates to the C program that the gethostbyaddr() routine is available
+to look up hosts by their C<IP> addresses.
+
+=item C<d_gethbyname>
+
+From F<d_gethbynm.U>:
+
+This variable conditionally defines the C<HAS_GETHOSTBYNAME> symbol, which
+indicates to the C program that the gethostbyname() routine is available
+to look up host names in some data base or other.
+
+=item C<d_gethent>
+
+From F<d_gethent.U>:
+
+This variable conditionally defines C<HAS_GETHOSTENT> if gethostent() is
+available to look up host names in some data base or another.
+
+=item C<d_gethname>
+
+From F<d_gethname.U>:
+
+This variable conditionally defines the C<HAS_GETHOSTNAME> symbol, which
+indicates to the C program that the gethostname() routine may be
+used to derive the host name.
+
+=item C<d_gethostbyaddr_r>
+
+From F<d_gethostbyaddr_r.U>:
+
+This variable conditionally defines the C<HAS_GETHOSTBYADDR_R> symbol,
+which indicates to the C program that the gethostbyaddr_r()
+routine is available.
+
+=item C<d_gethostbyname_r>
+
+From F<d_gethostbyname_r.U>:
+
+This variable conditionally defines the C<HAS_GETHOSTBYNAME_R> symbol,
+which indicates to the C program that the gethostbyname_r()
+routine is available.
+
+=item C<d_gethostent_r>
+
+From F<d_gethostent_r.U>:
+
+This variable conditionally defines the C<HAS_GETHOSTENT_R> symbol,
+which indicates to the C program that the gethostent_r()
+routine is available.
+
+=item C<d_gethostprotos>
+
+From F<d_gethostprotos.U>:
+
+This variable conditionally defines the C<HAS_GETHOST_PROTOS> symbol,
+which indicates to the C program that <netdb.h> supplies
+prototypes for the various gethost*() functions.
+See also F<netdbtype.U> for probing for various netdb types.
+
+=item C<d_getitimer>
+
+From F<d_getitimer.U>:
+
+This variable conditionally defines the C<HAS_GETITIMER> symbol, which
+indicates to the C program that the getitimer() routine is available.
+
+=item C<d_getlogin>
+
+From F<d_getlogin.U>:
+
+This variable conditionally defines the C<HAS_GETLOGIN> symbol, which
+indicates to the C program that the getlogin() routine is available
+to get the login name.
+
+=item C<d_getlogin_r>
+
+From F<d_getlogin_r.U>:
+
+This variable conditionally defines the C<HAS_GETLOGIN_R> symbol,
+which indicates to the C program that the getlogin_r()
+routine is available.
+
+=item C<d_getmnt>
+
+From F<d_getmnt.U>:
+
+This variable conditionally defines the C<HAS_GETMNT> symbol, which
+indicates to the C program that the getmnt() routine is available
+to retrieve one or more mount info blocks by filename.
+
+=item C<d_getmntent>
+
+From F<d_getmntent.U>:
+
+This variable conditionally defines the C<HAS_GETMNTENT> symbol, which
+indicates to the C program that the getmntent() routine is available
+to iterate through mounted files to get their mount info.
+
+=item C<d_getnbyaddr>
+
+From F<d_getnbyad.U>:
+
+This variable conditionally defines the C<HAS_GETNETBYADDR> symbol, which
+indicates to the C program that the getnetbyaddr() routine is available
+to look up networks by their C<IP> addresses.
+
+=item C<d_getnbyname>
+
+From F<d_getnbynm.U>:
+
+This variable conditionally defines the C<HAS_GETNETBYNAME> symbol, which
+indicates to the C program that the getnetbyname() routine is available
+to look up networks by their names.
+
+=item C<d_getnent>
+
+From F<d_getnent.U>:
+
+This variable conditionally defines C<HAS_GETNETENT> if getnetent() is
+available to look up network names in some data base or another.
+
+=item C<d_getnetbyaddr_r>
+
+From F<d_getnetbyaddr_r.U>:
+
+This variable conditionally defines the C<HAS_GETNETBYADDR_R> symbol,
+which indicates to the C program that the getnetbyaddr_r()
+routine is available.
+
+=item C<d_getnetbyname_r>
+
+From F<d_getnetbyname_r.U>:
+
+This variable conditionally defines the C<HAS_GETNETBYNAME_R> symbol,
+which indicates to the C program that the getnetbyname_r()
+routine is available.
+
+=item C<d_getnetent_r>
+
+From F<d_getnetent_r.U>:
+
+This variable conditionally defines the C<HAS_GETNETENT_R> symbol,
+which indicates to the C program that the getnetent_r()
+routine is available.
+
+=item C<d_getnetprotos>
+
+From F<d_getnetprotos.U>:
+
+This variable conditionally defines the C<HAS_GETNET_PROTOS> symbol,
+which indicates to the C program that <netdb.h> supplies
+prototypes for the various getnet*() functions.
+See also F<netdbtype.U> for probing for various netdb types.
+
+=item C<d_getpagsz>
+
+From F<d_getpagsz.U>:
+
+This variable conditionally defines C<HAS_GETPAGESIZE> if getpagesize()
+is available to get the system page size.
+
+=item C<d_getpbyname>
+
+From F<d_getprotby.U>:
+
+This variable conditionally defines the C<HAS_GETPROTOBYNAME>
+symbol, which indicates to the C program that the
+getprotobyname() routine is available to look up protocols
+by their name.
+
+=item C<d_getpbynumber>
+
+From F<d_getprotby.U>:
+
+This variable conditionally defines the C<HAS_GETPROTOBYNUMBER>
+symbol, which indicates to the C program that the
+getprotobynumber() routine is available to look up protocols
+by their number.
+
+=item C<d_getpent>
+
+From F<d_getpent.U>:
+
+This variable conditionally defines C<HAS_GETPROTOENT> if getprotoent() is
+available to look up protocols in some data base or another.
+
+=item C<d_getpgid>
+
+From F<d_getpgid.U>:
+
+This variable conditionally defines the C<HAS_GETPGID> symbol, which
+indicates to the C program that the getpgid(pid) function
+is available to get the process group id.
+
+=item C<d_getpgrp2>
+
+From F<d_getpgrp2.U>:
+
+This variable conditionally defines the HAS_GETPGRP2 symbol, which
+indicates to the C program that the getpgrp2() (as in F<DG/C<UX>>) routine
+is available to get the current process group.
+
+=item C<d_getpgrp>
+
+From F<d_getpgrp.U>:
+
+This variable conditionally defines C<HAS_GETPGRP> if getpgrp() is
+available to get the current process group.
+
+=item C<d_getppid>
+
+From F<d_getppid.U>:
+
+This variable conditionally defines the C<HAS_GETPPID> symbol, which
+indicates to the C program that the getppid() routine is available
+to get the parent process C<ID>.
+
+=item C<d_getprior>
+
+From F<d_getprior.U>:
+
+This variable conditionally defines C<HAS_GETPRIORITY> if getpriority()
+is available to get a process's priority.
+
+=item C<d_getprotobyname_r>
+
+From F<d_getprotobyname_r.U>:
+
+This variable conditionally defines the C<HAS_GETPROTOBYNAME_R> symbol,
+which indicates to the C program that the getprotobyname_r()
+routine is available.
+
+=item C<d_getprotobynumber_r>
+
+From F<d_getprotobynumber_r.U>:
+
+This variable conditionally defines the C<HAS_GETPROTOBYNUMBER_R> symbol,
+which indicates to the C program that the getprotobynumber_r()
+routine is available.
+
+=item C<d_getprotoent_r>
+
+From F<d_getprotoent_r.U>:
+
+This variable conditionally defines the C<HAS_GETPROTOENT_R> symbol,
+which indicates to the C program that the getprotoent_r()
+routine is available.
+
+=item C<d_getprotoprotos>
+
+From F<d_getprotoprotos.U>:
+
+This variable conditionally defines the C<HAS_GETPROTO_PROTOS> symbol,
+which indicates to the C program that <netdb.h> supplies
+prototypes for the various getproto*() functions.
+See also F<netdbtype.U> for probing for various netdb types.
+
+=item C<d_getprpwnam>
+
+From F<d_getprpwnam.U>:
+
+This variable conditionally defines C<HAS_GETPRPWNAM> if getprpwnam() is
+available to retrieve protected (shadow) password entries by name.
+
+=item C<d_getpwent>
+
+From F<d_getpwent.U>:
+
+This variable conditionally defines the C<HAS_GETPWENT> symbol, which
+indicates to the C program that the getpwent() routine is available
+for sequential access of the passwd database.
+
+=item C<d_getpwent_r>
+
+From F<d_getpwent_r.U>:
+
+This variable conditionally defines the C<HAS_GETPWENT_R> symbol,
+which indicates to the C program that the getpwent_r()
+routine is available.
+
+=item C<d_getpwnam_r>
+
+From F<d_getpwnam_r.U>:
+
+This variable conditionally defines the C<HAS_GETPWNAM_R> symbol,
+which indicates to the C program that the getpwnam_r()
+routine is available.
+
+=item C<d_getpwuid_r>
+
+From F<d_getpwuid_r.U>:
+
+This variable conditionally defines the C<HAS_GETPWUID_R> symbol,
+which indicates to the C program that the getpwuid_r()
+routine is available.
+
+=item C<d_getsbyname>
+
+From F<d_getsrvby.U>:
+
+This variable conditionally defines the C<HAS_GETSERVBYNAME>
+symbol, which indicates to the C program that the
+getservbyname() routine is available to look up services
+by their name.
+
+=item C<d_getsbyport>
+
+From F<d_getsrvby.U>:
+
+This variable conditionally defines the C<HAS_GETSERVBYPORT>
+symbol, which indicates to the C program that the
+getservbyport() routine is available to look up services
+by their port.
+
+=item C<d_getsent>
+
+From F<d_getsent.U>:
+
+This variable conditionally defines C<HAS_GETSERVENT> if getservent() is
+available to look up network services in some data base or another.
+
+=item C<d_getservbyname_r>
+
+From F<d_getservbyname_r.U>:
+
+This variable conditionally defines the C<HAS_GETSERVBYNAME_R> symbol,
+which indicates to the C program that the getservbyname_r()
+routine is available.
+
+=item C<d_getservbyport_r>
+
+From F<d_getservbyport_r.U>:
+
+This variable conditionally defines the C<HAS_GETSERVBYPORT_R> symbol,
+which indicates to the C program that the getservbyport_r()
+routine is available.
+
+=item C<d_getservent_r>
+
+From F<d_getservent_r.U>:
+
+This variable conditionally defines the C<HAS_GETSERVENT_R> symbol,
+which indicates to the C program that the getservent_r()
+routine is available.
+
+=item C<d_getservprotos>
+
+From F<d_getservprotos.U>:
+
+This variable conditionally defines the C<HAS_GETSERV_PROTOS> symbol,
+which indicates to the C program that <netdb.h> supplies
+prototypes for the various getserv*() functions.
+See also F<netdbtype.U> for probing for various netdb types.
+
+=item C<d_getspnam>
+
+From F<d_getspnam.U>:
+
+This variable conditionally defines C<HAS_GETSPNAM> if getspnam() is
+available to retrieve SysV shadow password entries by name.
+
+=item C<d_getspnam_r>
+
+From F<d_getspnam_r.U>:
+
+This variable conditionally defines the C<HAS_GETSPNAM_R> symbol,
+which indicates to the C program that the getspnam_r()
+routine is available.
+
+=item C<d_gettimeod>
+
+From F<d_ftime.U>:
+
+This variable conditionally defines the C<HAS_GETTIMEOFDAY> symbol, which
+indicates that the gettimeofday() system call exists (to obtain a
+sub-second accuracy clock). You should probably include <sys/resource.h>.
+
+=item C<d_gmtime_r>
+
+From F<d_gmtime_r.U>:
+
+This variable conditionally defines the C<HAS_GMTIME_R> symbol,
+which indicates to the C program that the gmtime_r()
+routine is available.
+
+=item C<d_gnulibc>
+
+From F<d_gnulibc.U>:
+
+Defined if we're dealing with the C<GNU> C Library.
+
+=item C<d_grpasswd>
+
+From F<i_grp.U>:
+
+This variable conditionally defines C<GRPASSWD>, which indicates
+that struct group in <grp.h> contains gr_passwd.
+
+=item C<d_hasmntopt>
+
+From F<d_hasmntopt.U>:
+
+This variable conditionally defines the C<HAS_HASMNTOPT> symbol, which
+indicates to the C program that the hasmntopt() routine is available
+to query the mount options of file systems.
+
+=item C<d_htonl>
+
+From F<d_htonl.U>:
+
+This variable conditionally defines C<HAS_HTONL> if htonl() and its
+friends are available to do network order byte swapping.
+
+=item C<d_index>
+
+From F<d_strchr.U>:
+
+This variable conditionally defines C<HAS_INDEX> if index() and
+rindex() are available for string searching.
+
+=item C<d_inetaton>
+
+From F<d_inetaton.U>:
+
+This variable conditionally defines the C<HAS_INET_ATON> symbol, which
+indicates to the C program that the inet_aton() function is available
+to parse C<IP> address C<dotted-quad> strings.
+
+=item C<d_int64_t>
+
+From F<d_int64_t.U>:
+
+This symbol will be defined if the C compiler supports int64_t.
+
+=item C<d_isascii>
+
+From F<d_isascii.U>:
+
+This variable conditionally defines the C<HAS_ISASCII> constant,
+which indicates to the C program that isascii() is available.
+
+=item C<d_isfinite>
+
+From F<d_isfinite.U>:
+
+This variable conditionally defines the C<HAS_ISFINITE> symbol, which
+indicates to the C program that the isfinite() routine is available.
+
+=item C<d_isinf>
+
+From F<d_isinf.U>:
+
+This variable conditionally defines the C<HAS_ISINF> symbol, which
+indicates to the C program that the isinf() routine is available.
+
+=item C<d_isnan>
+
+From F<d_isnan.U>:
+
+This variable conditionally defines the C<HAS_ISNAN> symbol, which
+indicates to the C program that the isnan() routine is available.
+
+=item C<d_isnanl>
+
+From F<d_isnanl.U>:
+
+This variable conditionally defines the C<HAS_ISNANL> symbol, which
+indicates to the C program that the isnanl() routine is available.
+
+=item C<d_killpg>
+
+From F<d_killpg.U>:
+
+This variable conditionally defines the C<HAS_KILLPG> symbol, which
+indicates to the C program that the killpg() routine is available
+to kill process groups.
+
+=item C<d_lchown>
+
+From F<d_lchown.U>:
+
+This variable conditionally defines the C<HAS_LCHOWN> symbol, which
+indicates to the C program that the lchown() routine is available
+to operate on a symbolic link (instead of following the link).
+
+=item C<d_ldbl_dig>
+
+From F<d_ldbl_dig.U>:
+
+This variable conditionally defines d_ldbl_dig if this system's
+header files provide C<LDBL_DIG>, which is the number of significant
+digits in a long double precision number.
+
+=item C<d_link>
+
+From F<d_link.U>:
+
+This variable conditionally defines C<HAS_LINK> if link() is
+available to create hard links.
+
+=item C<d_localtime_r>
+
+From F<d_localtime_r.U>:
+
+This variable conditionally defines the C<HAS_LOCALTIME_R> symbol,
+which indicates to the C program that the localtime_r()
+routine is available.
+
+=item C<d_locconv>
+
+From F<d_locconv.U>:
+
+This variable conditionally defines C<HAS_LOCALECONV> if localeconv() is
+available for numeric and monetary formatting conventions.
+
+=item C<d_lockf>
+
+From F<d_lockf.U>:
+
+This variable conditionally defines C<HAS_LOCKF> if lockf() is
+available to do file locking.
+
+=item C<d_longdbl>
+
+From F<d_longdbl.U>:
+
+This variable conditionally defines C<HAS_LONG_DOUBLE> if
+the long double type is supported.
+
+=item C<d_longlong>
+
+From F<d_longlong.U>:
+
+This variable conditionally defines C<HAS_LONG_LONG> if
+the long long type is supported.
+
+=item C<d_lseekproto>
+
+From F<d_lseekproto.U>:
+
+This variable conditionally defines the C<HAS_LSEEK_PROTO> symbol,
+which indicates to the C program that the system provides
+a prototype for the lseek() function. Otherwise, it is
+up to the program to supply one.
+
+=item C<d_lstat>
+
+From F<d_lstat.U>:
+
+This variable conditionally defines C<HAS_LSTAT> if lstat() is
+available to do file stats on symbolic links.
+
+=item C<d_madvise>
+
+From F<d_madvise.U>:
+
+This variable conditionally defines C<HAS_MADVISE> if madvise() is
+available to map a file into memory.
+
+=item C<d_mblen>
+
+From F<d_mblen.U>:
+
+This variable conditionally defines the C<HAS_MBLEN> symbol, which
+indicates to the C program that the mblen() routine is available
+to find the number of bytes in a multibye character.
+
+=item C<d_mbstowcs>
+
+From F<d_mbstowcs.U>:
+
+This variable conditionally defines the C<HAS_MBSTOWCS> symbol, which
+indicates to the C program that the mbstowcs() routine is available
+to convert a multibyte string into a wide character string.
+
+=item C<d_mbtowc>
+
+From F<d_mbtowc.U>:
+
+This variable conditionally defines the C<HAS_MBTOWC> symbol, which
+indicates to the C program that the mbtowc() routine is available
+to convert multibyte to a wide character.
+
+=item C<d_memchr>
+
+From F<d_memchr.U>:
+
+This variable conditionally defines the C<HAS_MEMCHR> symbol, which
+indicates to the C program that the memchr() routine is available
+to locate characters within a C string.
+
+=item C<d_memcmp>
+
+From F<d_memcmp.U>:
+
+This variable conditionally defines the C<HAS_MEMCMP> symbol, which
+indicates to the C program that the memcmp() routine is available
+to compare blocks of memory.
+
+=item C<d_memcpy>
+
+From F<d_memcpy.U>:
+
+This variable conditionally defines the C<HAS_MEMCPY> symbol, which
+indicates to the C program that the memcpy() routine is available
+to copy blocks of memory.
+
+=item C<d_memmove>
+
+From F<d_memmove.U>:
+
+This variable conditionally defines the C<HAS_MEMMOVE> symbol, which
+indicates to the C program that the memmove() routine is available
+to copy potentatially overlapping blocks of memory.
+
+=item C<d_memset>
+
+From F<d_memset.U>:
+
+This variable conditionally defines the C<HAS_MEMSET> symbol, which
+indicates to the C program that the memset() routine is available
+to set blocks of memory.
+
+=item C<d_mkdir>
+
+From F<d_mkdir.U>:
+
+This variable conditionally defines the C<HAS_MKDIR> symbol, which
+indicates to the C program that the mkdir() routine is available
+to create F<directories.>.
+
+=item C<d_mkdtemp>
+
+From F<d_mkdtemp.U>:
+
+This variable conditionally defines the C<HAS_MKDTEMP> symbol, which
+indicates to the C program that the mkdtemp() routine is available
+to exclusively create a uniquely named temporary directory.
+
+=item C<d_mkfifo>
+
+From F<d_mkfifo.U>:
+
+This variable conditionally defines the C<HAS_MKFIFO> symbol, which
+indicates to the C program that the mkfifo() routine is available.
+
+=item C<d_mkstemp>
+
+From F<d_mkstemp.U>:
+
+This variable conditionally defines the C<HAS_MKSTEMP> symbol, which
+indicates to the C program that the mkstemp() routine is available
+to exclusively create and open a uniquely named temporary file.
+
+=item C<d_mkstemps>
+
+From F<d_mkstemps.U>:
+
+This variable conditionally defines the C<HAS_MKSTEMPS> symbol, which
+indicates to the C program that the mkstemps() routine is available
+to exclusively create and open a uniquely named (with a suffix)
+temporary file.
+
+=item C<d_mktime>
+
+From F<d_mktime.U>:
+
+This variable conditionally defines the C<HAS_MKTIME> symbol, which
+indicates to the C program that the mktime() routine is available.
+
+=item C<d_mmap>
+
+From F<d_mmap.U>:
+
+This variable conditionally defines C<HAS_MMAP> if mmap() is
+available to map a file into memory.
+
+=item C<d_modfl>
+
+From F<d_modfl.U>:
+
+This variable conditionally defines the C<HAS_MODFL> symbol, which
+indicates to the C program that the modfl() routine is available.
+
+=item C<d_modfl_pow32_bug>
+
+From F<d_modfl.U>:
+
+This variable conditionally defines the HAS_MODFL_POW32_BUG symbol,
+which indicates that modfl() is broken for long doubles >= pow(2, 32).
+For example from 4294967303.150000 one would get 4294967302.000000
+and 1.150000. The bug has been seen in certain versions of glibc,
+release 2.2.2 is known to be okay.
+
+=item C<d_mprotect>
+
+From F<d_mprotect.U>:
+
+This variable conditionally defines C<HAS_MPROTECT> if mprotect() is
+available to modify the access protection of a memory mapped file.
+
+=item C<d_msg>
+
+From F<d_msg.U>:
+
+This variable conditionally defines the C<HAS_MSG> symbol, which
+indicates that the entire msg*(2) library is present.
+
+=item C<d_msg_ctrunc>
+
+From F<d_socket.U>:
+
+This variable conditionally defines the C<HAS_MSG_CTRUNC> symbol,
+which indicates that the C<MSG_CTRUNC> is available. #ifdef is
+not enough because it may be an enum, glibc has been known to do this.
+
+=item C<d_msg_dontroute>
+
+From F<d_socket.U>:
+
+This variable conditionally defines the C<HAS_MSG_DONTROUTE> symbol,
+which indicates that the C<MSG_DONTROUTE> is available. #ifdef is
+not enough because it may be an enum, glibc has been known to do this.
+
+=item C<d_msg_oob>
+
+From F<d_socket.U>:
+
+This variable conditionally defines the C<HAS_MSG_OOB> symbol,
+which indicates that the C<MSG_OOB> is available. #ifdef is
+not enough because it may be an enum, glibc has been known to do this.
+
+=item C<d_msg_peek>
+
+From F<d_socket.U>:
+
+This variable conditionally defines the C<HAS_MSG_PEEK> symbol,
+which indicates that the C<MSG_PEEK> is available. #ifdef is
+not enough because it may be an enum, glibc has been known to do this.
+
+=item C<d_msg_proxy>
+
+From F<d_socket.U>:
+
+This variable conditionally defines the C<HAS_MSG_PROXY> symbol,
+which indicates that the C<MSG_PROXY> is available. #ifdef is
+not enough because it may be an enum, glibc has been known to do this.
+
+=item C<d_msgctl>
+
+From F<d_msgctl.U>:
+
+This variable conditionally defines the C<HAS_MSGCTL> symbol, which
+indicates to the C program that the msgctl() routine is available.
+
+=item C<d_msgget>
+
+From F<d_msgget.U>:
+
+This variable conditionally defines the C<HAS_MSGGET> symbol, which
+indicates to the C program that the msgget() routine is available.
+
+=item C<d_msghdr_s>
+
+From F<d_msghdr_s.U>:
+
+This variable conditionally defines the C<HAS_STRUCT_MSGHDR> symbol,
+which indicates that the struct msghdr is supported.
+
+=item C<d_msgrcv>
+
+From F<d_msgrcv.U>:
+
+This variable conditionally defines the C<HAS_MSGRCV> symbol, which
+indicates to the C program that the msgrcv() routine is available.
+
+=item C<d_msgsnd>
+
+From F<d_msgsnd.U>:
+
+This variable conditionally defines the C<HAS_MSGSND> symbol, which
+indicates to the C program that the msgsnd() routine is available.
+
+=item C<d_msync>
+
+From F<d_msync.U>:
+
+This variable conditionally defines C<HAS_MSYNC> if msync() is
+available to synchronize a mapped file.
+
+=item C<d_munmap>
+
+From F<d_munmap.U>:
+
+This variable conditionally defines C<HAS_MUNMAP> if munmap() is
+available to unmap a region mapped by mmap().
+
+=item C<d_mymalloc>
+
+From F<mallocsrc.U>:
+
+This variable conditionally defines C<MYMALLOC> in case other parts
+of the source want to take special action if C<MYMALLOC> is used.
+This may include different sorts of profiling or error detection.
+
+=item C<d_nice>
+
+From F<d_nice.U>:
+
+This variable conditionally defines the C<HAS_NICE> symbol, which
+indicates to the C program that the nice() routine is available.
+
+=item C<d_nl_langinfo>
+
+From F<d_nl_langinfo.U>:
+
+This variable conditionally defines the C<HAS_NL_LANGINFO> symbol, which
+indicates to the C program that the nl_langinfo() routine is available.
+
+=item C<d_nv_preserves_uv>
+
+From F<perlxv.U>:
+
+This variable indicates whether a variable of type nvtype
+can preserve all the bits a variable of type uvtype.
+
+=item C<d_off64_t>
+
+From F<d_off64_t.U>:
+
+This symbol will be defined if the C compiler supports off64_t.
+
+=item C<d_old_pthread_create_joinable>
+
+From F<d_pthrattrj.U>:
+
+This variable conditionally defines pthread_create_joinable.
+undef if F<pthread.h> defines C<PTHREAD_CREATE_JOINABLE>.
+
+=item C<d_oldpthreads>
+
+From F<usethreads.U>:
+
+This variable conditionally defines the C<OLD_PTHREADS_API> symbol,
+and indicates that Perl should be built to use the old
+draft C<POSIX> threads C<API>. This is only potentially meaningful if
+usethreads is set.
+
+=item C<d_oldsock>
+
+From F<d_socket.U>:
+
+This variable conditionally defines the C<OLDSOCKET> symbol, which
+indicates that the C<BSD> socket interface is based on 4.1c and not 4.2.
+
+=item C<d_open3>
+
+From F<d_open3.U>:
+
+This variable conditionally defines the HAS_OPEN3 manifest constant,
+which indicates to the C program that the 3 argument version of
+the open(2) function is available.
+
+=item C<d_pathconf>
+
+From F<d_pathconf.U>:
+
+This variable conditionally defines the C<HAS_PATHCONF> symbol, which
+indicates to the C program that the pathconf() routine is available
+to determine file-system related limits and options associated
+with a given filename.
+
+=item C<d_pause>
+
+From F<d_pause.U>:
+
+This variable conditionally defines the C<HAS_PAUSE> symbol, which
+indicates to the C program that the pause() routine is available
+to suspend a process until a signal is received.
+
+=item C<d_perl_otherlibdirs>
+
+From F<otherlibdirs.U>:
+
+This variable conditionally defines C<PERL_OTHERLIBDIRS>, which
+contains a colon-separated set of paths for the perl binary to
+include in @C<INC>. See also otherlibdirs.
+
+=item C<d_phostname>
+
+From F<d_gethname.U>:
+
+This variable conditionally defines the C<HAS_PHOSTNAME> symbol, which
+contains the shell command which, when fed to popen(), may be
+used to derive the host name.
+
+=item C<d_pipe>
+
+From F<d_pipe.U>:
+
+This variable conditionally defines the C<HAS_PIPE> symbol, which
+indicates to the C program that the pipe() routine is available
+to create an inter-process channel.
+
+=item C<d_poll>
+
+From F<d_poll.U>:
+
+This variable conditionally defines the C<HAS_POLL> symbol, which
+indicates to the C program that the poll() routine is available
+to poll active file descriptors.
+
+=item C<d_portable>
+
+From F<d_portable.U>:
+
+This variable conditionally defines the C<PORTABLE> symbol, which
+indicates to the C program that it should not assume that it is
+running on the machine it was compiled on.
+
+=item C<d_PRId64>
+
+From F<quadfio.U>:
+
+This variable conditionally defines the PERL_PRId64 symbol, which
+indiciates that stdio has a symbol to print 64-bit decimal numbers.
+
+=item C<d_PRIeldbl>
+
+From F<longdblfio.U>:
+
+This variable conditionally defines the PERL_PRIfldbl symbol, which
+indiciates that stdio has a symbol to print long doubles.
+
+=item C<d_PRIEUldbl>
+
+From F<longdblfio.U>:
+
+This variable conditionally defines the PERL_PRIfldbl symbol, which
+indiciates that stdio has a symbol to print long doubles.
+The C<U> in the name is to separate this from d_PRIeldbl so that even
+case-blind systems can see the difference.
+
+=item C<d_PRIfldbl>
+
+From F<longdblfio.U>:
+
+This variable conditionally defines the PERL_PRIfldbl symbol, which
+indiciates that stdio has a symbol to print long doubles.
+
+=item C<d_PRIFUldbl>
+
+From F<longdblfio.U>:
+
+This variable conditionally defines the PERL_PRIfldbl symbol, which
+indiciates that stdio has a symbol to print long doubles.
+The C<U> in the name is to separate this from d_PRIfldbl so that even
+case-blind systems can see the difference.
+
+=item C<d_PRIgldbl>
+
+From F<longdblfio.U>:
+
+This variable conditionally defines the PERL_PRIfldbl symbol, which
+indiciates that stdio has a symbol to print long doubles.
+
+=item C<d_PRIGUldbl>
+
+From F<longdblfio.U>:
+
+This variable conditionally defines the PERL_PRIfldbl symbol, which
+indiciates that stdio has a symbol to print long doubles.
+The C<U> in the name is to separate this from d_PRIgldbl so that even
+case-blind systems can see the difference.
+
+=item C<d_PRIi64>
+
+From F<quadfio.U>:
+
+This variable conditionally defines the PERL_PRIi64 symbol, which
+indiciates that stdio has a symbol to print 64-bit decimal numbers.
+
+=item C<d_PRIo64>
+
+From F<quadfio.U>:
+
+This variable conditionally defines the PERL_PRIo64 symbol, which
+indiciates that stdio has a symbol to print 64-bit octal numbers.
+
+=item C<d_PRIu64>
+
+From F<quadfio.U>:
+
+This variable conditionally defines the PERL_PRIu64 symbol, which
+indiciates that stdio has a symbol to print 64-bit unsigned decimal
+numbers.
+
+=item C<d_PRIx64>
+
+From F<quadfio.U>:
+
+This variable conditionally defines the PERL_PRIx64 symbol, which
+indiciates that stdio has a symbol to print 64-bit hexadecimal numbers.
+
+=item C<d_PRIXU64>
+
+From F<quadfio.U>:
+
+This variable conditionally defines the PERL_PRIXU64 symbol, which
+indiciates that stdio has a symbol to print 64-bit hExADECimAl numbers.
+The C<U> in the name is to separate this from d_PRIx64 so that even
+case-blind systems can see the difference.
+
+=item C<d_procselfexe>
+
+From F<d_procselfexe.U>:
+
+Defined if $procselfexe is symlink to the absolute
+pathname of the executing program.
+
+=item C<d_pthread_atfork>
+
+From F<d_pthread_atfork.U>:
+
+This variable conditionally defines the C<HAS_PTHREAD_ATFORK> symbol,
+which indicates to the C program that the pthread_atfork()
+routine is available.
+
+=item C<d_pthread_yield>
+
+From F<d_pthread_y.U>:
+
+This variable conditionally defines the C<HAS_PTHREAD_YIELD>
+symbol if the pthread_yield routine is available to yield
+the execution of the current thread.
+
+=item C<d_pwage>
+
+From F<i_pwd.U>:
+
+This variable conditionally defines C<PWAGE>, which indicates
+that struct passwd contains pw_age.
+
+=item C<d_pwchange>
+
+From F<i_pwd.U>:
+
+This variable conditionally defines C<PWCHANGE>, which indicates
+that struct passwd contains pw_change.
+
+=item C<d_pwclass>
+
+From F<i_pwd.U>:
+
+This variable conditionally defines C<PWCLASS>, which indicates
+that struct passwd contains pw_class.
+
+=item C<d_pwcomment>
+
+From F<i_pwd.U>:
+
+This variable conditionally defines C<PWCOMMENT>, which indicates
+that struct passwd contains pw_comment.
+
+=item C<d_pwexpire>
+
+From F<i_pwd.U>:
+
+This variable conditionally defines C<PWEXPIRE>, which indicates
+that struct passwd contains pw_expire.
+
+=item C<d_pwgecos>
+
+From F<i_pwd.U>:
+
+This variable conditionally defines C<PWGECOS>, which indicates
+that struct passwd contains pw_gecos.
+
+=item C<d_pwpasswd>
+
+From F<i_pwd.U>:
+
+This variable conditionally defines C<PWPASSWD>, which indicates
+that struct passwd contains pw_passwd.
+
+=item C<d_pwquota>
+
+From F<i_pwd.U>:
+
+This variable conditionally defines C<PWQUOTA>, which indicates
+that struct passwd contains pw_quota.
+
+=item C<d_qgcvt>
+
+From F<d_qgcvt.U>:
+
+This variable conditionally defines the C<HAS_QGCVT> symbol, which
+indicates to the C program that the qgcvt() routine is available.
+
+=item C<d_quad>
+
+From F<quadtype.U>:
+
+This variable, if defined, tells that there's a 64-bit integer type,
+quadtype.
+
+=item C<d_random_r>
+
+From F<d_random_r.U>:
+
+This variable conditionally defines the C<HAS_RANDOM_R> symbol,
+which indicates to the C program that the random_r()
+routine is available.
+
+=item C<d_readdir64_r>
+
+From F<d_readdir64_r.U>:
+
+This variable conditionally defines the HAS_READDIR64_R symbol,
+which indicates to the C program that the readdir64_r()
+routine is available.
+
+=item C<d_readdir>
+
+From F<d_readdir.U>:
+
+This variable conditionally defines C<HAS_READDIR> if readdir() is
+available to read directory entries.
+
+=item C<d_readdir_r>
+
+From F<d_readdir_r.U>:
+
+This variable conditionally defines the C<HAS_READDIR_R> symbol,
+which indicates to the C program that the readdir_r()
+routine is available.
+
+=item C<d_readlink>
+
+From F<d_readlink.U>:
+
+This variable conditionally defines the C<HAS_READLINK> symbol, which
+indicates to the C program that the readlink() routine is available
+to read the value of a symbolic link.
+
+=item C<d_readv>
+
+From F<d_readv.U>:
+
+This variable conditionally defines the C<HAS_READV> symbol, which
+indicates to the C program that the readv() routine is available.
+
+=item C<d_recvmsg>
+
+From F<d_recvmsg.U>:
+
+This variable conditionally defines the C<HAS_RECVMSG> symbol, which
+indicates to the C program that the recvmsg() routine is available.
+
+=item C<d_rename>
+
+From F<d_rename.U>:
+
+This variable conditionally defines the C<HAS_RENAME> symbol, which
+indicates to the C program that the rename() routine is available
+to rename files.
+
+=item C<d_rewinddir>
+
+From F<d_readdir.U>:
+
+This variable conditionally defines C<HAS_REWINDDIR> if rewinddir() is
+available.
+
+=item C<d_rmdir>
+
+From F<d_rmdir.U>:
+
+This variable conditionally defines C<HAS_RMDIR> if rmdir() is
+available to remove directories.
+
+=item C<d_safebcpy>
+
+From F<d_safebcpy.U>:
+
+This variable conditionally defines the C<HAS_SAFE_BCOPY> symbol if
+the bcopy() routine can do overlapping copies. Normally, you
+should probably use memmove().
+
+=item C<d_safemcpy>
+
+From F<d_safemcpy.U>:
+
+This variable conditionally defines the C<HAS_SAFE_MEMCPY> symbol if
+the memcpy() routine can do overlapping copies.
+For overlapping copies, memmove() should be used, if available.
+
+=item C<d_sanemcmp>
+
+From F<d_sanemcmp.U>:
+
+This variable conditionally defines the C<HAS_SANE_MEMCMP> symbol if
+the memcpy() routine is available and can be used to compare relative
+magnitudes of chars with their high bits set.
+
+=item C<d_sbrkproto>
+
+From F<d_sbrkproto.U>:
+
+This variable conditionally defines the C<HAS_SBRK_PROTO> symbol,
+which indicates to the C program that the system provides
+a prototype for the sbrk() function. Otherwise, it is
+up to the program to supply one.
+
+=item C<d_sched_yield>
+
+From F<d_pthread_y.U>:
+
+This variable conditionally defines the C<HAS_SCHED_YIELD>
+symbol if the sched_yield routine is available to yield
+the execution of the current thread.
+
+=item C<d_scm_rights>
+
+From F<d_socket.U>:
+
+This variable conditionally defines the C<HAS_SCM_RIGHTS> symbol,
+which indicates that the C<SCM_RIGHTS> is available. #ifdef is
+not enough because it may be an enum, glibc has been known to do this.
+
+=item C<d_SCNfldbl>
+
+From F<longdblfio.U>:
+
+This variable conditionally defines the PERL_PRIfldbl symbol, which
+indiciates that stdio has a symbol to scan long doubles.
+
+=item C<d_seekdir>
+
+From F<d_readdir.U>:
+
+This variable conditionally defines C<HAS_SEEKDIR> if seekdir() is
+available.
+
+=item C<d_select>
+
+From F<d_select.U>:
+
+This variable conditionally defines C<HAS_SELECT> if select() is
+available to select active file descriptors. A <sys/time.h>
+inclusion may be necessary for the timeout field.
+
+=item C<d_sem>
+
+From F<d_sem.U>:
+
+This variable conditionally defines the C<HAS_SEM> symbol, which
+indicates that the entire sem*(2) library is present.
+
+=item C<d_semctl>
+
+From F<d_semctl.U>:
+
+This variable conditionally defines the C<HAS_SEMCTL> symbol, which
+indicates to the C program that the semctl() routine is available.
+
+=item C<d_semctl_semid_ds>
+
+From F<d_union_semun.U>:
+
+This variable conditionally defines C<USE_SEMCTL_SEMID_DS>, which
+indicates that struct semid_ds * is to be used for semctl C<IPC_STAT>.
+
+=item C<d_semctl_semun>
+
+From F<d_union_semun.U>:
+
+This variable conditionally defines C<USE_SEMCTL_SEMUN>, which
+indicates that union semun is to be used for semctl C<IPC_STAT>.
+
+=item C<d_semget>
+
+From F<d_semget.U>:
+
+This variable conditionally defines the C<HAS_SEMGET> symbol, which
+indicates to the C program that the semget() routine is available.
+
+=item C<d_semop>
+
+From F<d_semop.U>:
+
+This variable conditionally defines the C<HAS_SEMOP> symbol, which
+indicates to the C program that the semop() routine is available.
+
+=item C<d_sendmsg>
+
+From F<d_sendmsg.U>:
+
+This variable conditionally defines the C<HAS_SENDMSG> symbol, which
+indicates to the C program that the sendmsg() routine is available.
+
+=item C<d_setegid>
+
+From F<d_setegid.U>:
+
+This variable conditionally defines the C<HAS_SETEGID> symbol, which
+indicates to the C program that the setegid() routine is available
+to change the effective gid of the current program.
+
+=item C<d_seteuid>
+
+From F<d_seteuid.U>:
+
+This variable conditionally defines the C<HAS_SETEUID> symbol, which
+indicates to the C program that the seteuid() routine is available
+to change the effective uid of the current program.
+
+=item C<d_setgrent>
+
+From F<d_setgrent.U>:
+
+This variable conditionally defines the C<HAS_SETGRENT> symbol, which
+indicates to the C program that the setgrent() routine is available
+for initializing sequential access to the group database.
+
+=item C<d_setgrent_r>
+
+From F<d_setgrent_r.U>:
+
+This variable conditionally defines the C<HAS_SETGRENT_R> symbol,
+which indicates to the C program that the setgrent_r()
+routine is available.
+
+=item C<d_setgrps>
+
+From F<d_setgrps.U>:
+
+This variable conditionally defines the C<HAS_SETGROUPS> symbol, which
+indicates to the C program that the setgroups() routine is available
+to set the list of process groups.
+
+=item C<d_sethent>
+
+From F<d_sethent.U>:
+
+This variable conditionally defines C<HAS_SETHOSTENT> if sethostent() is
+available.
+
+=item C<d_sethostent_r>
+
+From F<d_sethostent_r.U>:
+
+This variable conditionally defines the C<HAS_SETHOSTENT_R> symbol,
+which indicates to the C program that the sethostent_r()
+routine is available.
+
+=item C<d_setitimer>
+
+From F<d_setitimer.U>:
+
+This variable conditionally defines the C<HAS_SETITIMER> symbol, which
+indicates to the C program that the setitimer() routine is available.
+
+=item C<d_setlinebuf>
+
+From F<d_setlnbuf.U>:
+
+This variable conditionally defines the C<HAS_SETLINEBUF> symbol, which
+indicates to the C program that the setlinebuf() routine is available
+to change stderr or stdout from block-buffered or unbuffered to a
+line-buffered mode.
+
+=item C<d_setlocale>
+
+From F<d_setlocale.U>:
+
+This variable conditionally defines C<HAS_SETLOCALE> if setlocale() is
+available to handle locale-specific ctype implementations.
+
+=item C<d_setlocale_r>
+
+From F<d_setlocale_r.U>:
+
+This variable conditionally defines the C<HAS_SETLOCALE_R> symbol,
+which indicates to the C program that the setlocale_r()
+routine is available.
+
+=item C<d_setnent>
+
+From F<d_setnent.U>:
+
+This variable conditionally defines C<HAS_SETNETENT> if setnetent() is
+available.
+
+=item C<d_setnetent_r>
+
+From F<d_setnetent_r.U>:
+
+This variable conditionally defines the C<HAS_SETNETENT_R> symbol,
+which indicates to the C program that the setnetent_r()
+routine is available.
+
+=item C<d_setpent>
+
+From F<d_setpent.U>:
+
+This variable conditionally defines C<HAS_SETPROTOENT> if setprotoent() is
+available.
+
+=item C<d_setpgid>
+
+From F<d_setpgid.U>:
+
+This variable conditionally defines the C<HAS_SETPGID> symbol if the
+setpgid(pid, gpid) function is available to set process group C<ID>.
+
+=item C<d_setpgrp2>
+
+From F<d_setpgrp2.U>:
+
+This variable conditionally defines the HAS_SETPGRP2 symbol, which
+indicates to the C program that the setpgrp2() (as in F<DG/C<UX>>) routine
+is available to set the current process group.
+
+=item C<d_setpgrp>
+
+From F<d_setpgrp.U>:
+
+This variable conditionally defines C<HAS_SETPGRP> if setpgrp() is
+available to set the current process group.
+
+=item C<d_setprior>
+
+From F<d_setprior.U>:
+
+This variable conditionally defines C<HAS_SETPRIORITY> if setpriority()
+is available to set a process's priority.
+
+=item C<d_setproctitle>
+
+From F<d_setproctitle.U>:
+
+This variable conditionally defines the C<HAS_SETPROCTITLE> symbol,
+which indicates to the C program that the setproctitle() routine
+is available.
+
+=item C<d_setprotoent_r>
+
+From F<d_setprotoent_r.U>:
+
+This variable conditionally defines the C<HAS_SETPROTOENT_R> symbol,
+which indicates to the C program that the setprotoent_r()
+routine is available.
+
+=item C<d_setpwent>
+
+From F<d_setpwent.U>:
+
+This variable conditionally defines the C<HAS_SETPWENT> symbol, which
+indicates to the C program that the setpwent() routine is available
+for initializing sequential access to the passwd database.
+
+=item C<d_setpwent_r>
+
+From F<d_setpwent_r.U>:
+
+This variable conditionally defines the C<HAS_SETPWENT_R> symbol,
+which indicates to the C program that the setpwent_r()
+routine is available.
+
+=item C<d_setregid>
+
+From F<d_setregid.U>:
+
+This variable conditionally defines C<HAS_SETREGID> if setregid() is
+available to change the real and effective gid of the current
+process.
+
+=item C<d_setresgid>
+
+From F<d_setregid.U>:
+
+This variable conditionally defines C<HAS_SETRESGID> if setresgid() is
+available to change the real, effective and saved gid of the current
+process.
+
+=item C<d_setresuid>
+
+From F<d_setreuid.U>:
+
+This variable conditionally defines C<HAS_SETREUID> if setresuid() is
+available to change the real, effective and saved uid of the current
+process.
+
+=item C<d_setreuid>
+
+From F<d_setreuid.U>:
+
+This variable conditionally defines C<HAS_SETREUID> if setreuid() is
+available to change the real and effective uid of the current
+process.
+
+=item C<d_setrgid>
+
+From F<d_setrgid.U>:
+
+This variable conditionally defines the C<HAS_SETRGID> symbol, which
+indicates to the C program that the setrgid() routine is available
+to change the real gid of the current program.
+
+=item C<d_setruid>
+
+From F<d_setruid.U>:
+
+This variable conditionally defines the C<HAS_SETRUID> symbol, which
+indicates to the C program that the setruid() routine is available
+to change the real uid of the current program.
+
+=item C<d_setsent>
+
+From F<d_setsent.U>:
+
+This variable conditionally defines C<HAS_SETSERVENT> if setservent() is
+available.
+
+=item C<d_setservent_r>
+
+From F<d_setservent_r.U>:
+
+This variable conditionally defines the C<HAS_SETSERVENT_R> symbol,
+which indicates to the C program that the setservent_r()
+routine is available.
+
+=item C<d_setsid>
+
+From F<d_setsid.U>:
+
+This variable conditionally defines C<HAS_SETSID> if setsid() is
+available to set the process group C<ID>.
+
+=item C<d_setvbuf>
+
+From F<d_setvbuf.U>:
+
+This variable conditionally defines the C<HAS_SETVBUF> symbol, which
+indicates to the C program that the setvbuf() routine is available
+to change buffering on an open stdio stream.
+
+=item C<d_sfio>
+
+From F<d_sfio.U>:
+
+This variable conditionally defines the C<USE_SFIO> symbol,
+and indicates whether sfio is available (and should be used).
+
+=item C<d_shm>
+
+From F<d_shm.U>:
+
+This variable conditionally defines the C<HAS_SHM> symbol, which
+indicates that the entire shm*(2) library is present.
+
+=item C<d_shmat>
+
+From F<d_shmat.U>:
+
+This variable conditionally defines the C<HAS_SHMAT> symbol, which
+indicates to the C program that the shmat() routine is available.
+
+=item C<d_shmatprototype>
+
+From F<d_shmat.U>:
+
+This variable conditionally defines the C<HAS_SHMAT_PROTOTYPE>
+symbol, which indicates that F<sys/shm.h> has a prototype for
+shmat.
+
+=item C<d_shmctl>
+
+From F<d_shmctl.U>:
+
+This variable conditionally defines the C<HAS_SHMCTL> symbol, which
+indicates to the C program that the shmctl() routine is available.
+
+=item C<d_shmdt>
+
+From F<d_shmdt.U>:
+
+This variable conditionally defines the C<HAS_SHMDT> symbol, which
+indicates to the C program that the shmdt() routine is available.
+
+=item C<d_shmget>
+
+From F<d_shmget.U>:
+
+This variable conditionally defines the C<HAS_SHMGET> symbol, which
+indicates to the C program that the shmget() routine is available.
+
+=item C<d_sigaction>
+
+From F<d_sigaction.U>:
+
+This variable conditionally defines the C<HAS_SIGACTION> symbol, which
+indicates that the Vr4 sigaction() routine is available.
+
+=item C<d_sigprocmask>
+
+From F<d_sigprocmask.U>:
+
+This variable conditionally defines C<HAS_SIGPROCMASK>
+if sigprocmask() is available to examine or change the signal mask
+of the calling process.
+
+=item C<d_sigsetjmp>
+
+From F<d_sigsetjmp.U>:
+
+This variable conditionally defines the C<HAS_SIGSETJMP> symbol,
+which indicates that the sigsetjmp() routine is available to
+call setjmp() and optionally save the process's signal mask.
+
+=item C<d_sockatmark>
+
+From F<d_sockatmark.U>:
+
+This variable conditionally defines the C<HAS_SOCKATMARK> symbol, which
+indicates to the C program that the sockatmark() routine is available.
+
+=item C<d_sockatmarkproto>
+
+From F<d_sockatmarkproto.U>:
+
+This variable conditionally defines the C<HAS_SOCKATMARK_PROTO> symbol,
+which indicates to the C program that the system provides
+a prototype for the sockatmark() function. Otherwise, it is
+up to the program to supply one.
+
+=item C<d_socket>
+
+From F<d_socket.U>:
+
+This variable conditionally defines C<HAS_SOCKET>, which indicates
+that the C<BSD> socket interface is supported.
+
+=item C<d_socklen_t>
+
+From F<d_socklen_t.U>:
+
+This symbol will be defined if the C compiler supports socklen_t.
+
+=item C<d_sockpair>
+
+From F<d_socket.U>:
+
+This variable conditionally defines the C<HAS_SOCKETPAIR> symbol, which
+indicates that the C<BSD> socketpair() is supported.
+
+=item C<d_socks5_init>
+
+From F<d_socks5_init.U>:
+
+This variable conditionally defines the HAS_SOCKS5_INIT symbol, which
+indicates to the C program that the socks5_init() routine is available.
+
+=item C<d_sqrtl>
+
+From F<d_sqrtl.U>:
+
+This variable conditionally defines the C<HAS_SQRTL> symbol, which
+indicates to the C program that the sqrtl() routine is available.
+
+=item C<d_srand48_r>
+
+From F<d_srand48_r.U>:
+
+This variable conditionally defines the HAS_SRAND48_R symbol,
+which indicates to the C program that the srand48_r()
+routine is available.
+
+=item C<d_srandom_r>
+
+From F<d_srandom_r.U>:
+
+This variable conditionally defines the C<HAS_SRANDOM_R> symbol,
+which indicates to the C program that the srandom_r()
+routine is available.
+
+=item C<d_sresgproto>
+
+From F<d_sresgproto.U>:
+
+This variable conditionally defines the C<HAS_SETRESGID_PROTO> symbol,
+which indicates to the C program that the system provides
+a prototype for the setresgid() function. Otherwise, it is
+up to the program to supply one.
+
+=item C<d_sresuproto>
+
+From F<d_sresuproto.U>:
+
+This variable conditionally defines the C<HAS_SETRESUID_PROTO> symbol,
+which indicates to the C program that the system provides
+a prototype for the setresuid() function. Otherwise, it is
+up to the program to supply one.
+
+=item C<d_statblks>
+
+From F<d_statblks.U>:
+
+This variable conditionally defines C<USE_STAT_BLOCKS>
+if this system has a stat structure declaring
+st_blksize and st_blocks.
+
+=item C<d_statfs_f_flags>
+
+From F<d_statfs_f_flags.U>:
+
+This variable conditionally defines the C<HAS_STRUCT_STATFS_F_FLAGS>
+symbol, which indicates to struct statfs from has f_flags member.
+This kind of struct statfs is coming from F<sys/mount.h> (C<BSD>),
+not from F<sys/statfs.h> (C<SYSV>).
+
+=item C<d_statfs_s>
+
+From F<d_statfs_s.U>:
+
+This variable conditionally defines the C<HAS_STRUCT_STATFS> symbol,
+which indicates that the struct statfs is supported.
+
+=item C<d_statvfs>
+
+From F<d_statvfs.U>:
+
+This variable conditionally defines the C<HAS_STATVFS> symbol, which
+indicates to the C program that the statvfs() routine is available.
+
+=item C<d_stdio_cnt_lval>
+
+From F<d_stdstdio.U>:
+
+This variable conditionally defines C<STDIO_CNT_LVALUE> if the
+C<FILE_cnt> macro can be used as an lvalue.
+
+=item C<d_stdio_ptr_lval>
+
+From F<d_stdstdio.U>:
+
+This variable conditionally defines C<STDIO_PTR_LVALUE> if the
+C<FILE_ptr> macro can be used as an lvalue.
+
+=item C<d_stdio_ptr_lval_nochange_cnt>
+
+From F<d_stdstdio.U>:
+
+This symbol is defined if using the C<FILE_ptr> macro as an lvalue
+to increase the pointer by n leaves File_cnt(fp) unchanged.
+
+=item C<d_stdio_ptr_lval_sets_cnt>
+
+From F<d_stdstdio.U>:
+
+This symbol is defined if using the C<FILE_ptr> macro as an lvalue
+to increase the pointer by n has the side effect of decreasing the
+value of File_cnt(fp) by n.
+
+=item C<d_stdio_stream_array>
+
+From F<stdio_streams.U>:
+
+This variable tells whether there is an array holding
+the stdio streams.
+
+=item C<d_stdiobase>
+
+From F<d_stdstdio.U>:
+
+This variable conditionally defines C<USE_STDIO_BASE> if this system
+has a C<FILE> structure declaring a usable _base field (or equivalent)
+in F<stdio.h>.
+
+=item C<d_stdstdio>
+
+From F<d_stdstdio.U>:
+
+This variable conditionally defines C<USE_STDIO_PTR> if this system
+has a C<FILE> structure declaring usable _ptr and _cnt fields (or
+equivalent) in F<stdio.h>.
+
+=item C<d_strchr>
+
+From F<d_strchr.U>:
+
+This variable conditionally defines C<HAS_STRCHR> if strchr() and
+strrchr() are available for string searching.
+
+=item C<d_strcoll>
+
+From F<d_strcoll.U>:
+
+This variable conditionally defines C<HAS_STRCOLL> if strcoll() is
+available to compare strings using collating information.
+
+=item C<d_strctcpy>
+
+From F<d_strctcpy.U>:
+
+This variable conditionally defines the C<USE_STRUCT_COPY> symbol, which
+indicates to the C program that this C compiler knows how to copy
+structures.
+
+=item C<d_strerrm>
+
+From F<d_strerror.U>:
+
+This variable holds what Strerrr is defined as to translate an error
+code condition into an error message string. It could be C<strerror>
+or a more C<complex> macro emulating strrror with sys_errlist[], or the
+C<unknown> string when both strerror and sys_errlist are missing.
+
+=item C<d_strerror>
+
+From F<d_strerror.U>:
+
+This variable conditionally defines C<HAS_STRERROR> if strerror() is
+available to translate error numbers to strings.
+
+=item C<d_strerror_r>
+
+From F<d_strerror_r.U>:
+
+This variable conditionally defines the C<HAS_STRERROR_R> symbol,
+which indicates to the C program that the strerror_r()
+routine is available.
+
+=item C<d_strftime>
+
+From F<d_strftime.U>:
+
+This variable conditionally defines the C<HAS_STRFTIME> symbol, which
+indicates to the C program that the strftime() routine is available.
+
+=item C<d_strtod>
+
+From F<d_strtod.U>:
+
+This variable conditionally defines the C<HAS_STRTOD> symbol, which
+indicates to the C program that the strtod() routine is available
+to provide better numeric string conversion than atof().
+
+=item C<d_strtol>
+
+From F<d_strtol.U>:
+
+This variable conditionally defines the C<HAS_STRTOL> symbol, which
+indicates to the C program that the strtol() routine is available
+to provide better numeric string conversion than atoi() and friends.
+
+=item C<d_strtold>
+
+From F<d_strtold.U>:
+
+This variable conditionally defines the C<HAS_STRTOLD> symbol, which
+indicates to the C program that the strtold() routine is available.
+
+=item C<d_strtoll>
+
+From F<d_strtoll.U>:
+
+This variable conditionally defines the C<HAS_STRTOLL> symbol, which
+indicates to the C program that the strtoll() routine is available.
+
+=item C<d_strtoq>
+
+From F<d_strtoq.U>:
+
+This variable conditionally defines the C<HAS_STRTOQ> symbol, which
+indicates to the C program that the strtoq() routine is available.
+
+=item C<d_strtoul>
+
+From F<d_strtoul.U>:
+
+This variable conditionally defines the C<HAS_STRTOUL> symbol, which
+indicates to the C program that the strtoul() routine is available
+to provide conversion of strings to unsigned long.
+
+=item C<d_strtoull>
+
+From F<d_strtoull.U>:
+
+This variable conditionally defines the C<HAS_STRTOULL> symbol, which
+indicates to the C program that the strtoull() routine is available.
+
+=item C<d_strtouq>
+
+From F<d_strtouq.U>:
+
+This variable conditionally defines the C<HAS_STRTOUQ> symbol, which
+indicates to the C program that the strtouq() routine is available.
+
+=item C<d_strxfrm>
+
+From F<d_strxfrm.U>:
+
+This variable conditionally defines C<HAS_STRXFRM> if strxfrm() is
+available to transform strings.
+
+=item C<d_suidsafe>
+
+From F<d_dosuid.U>:
+
+This variable conditionally defines C<SETUID_SCRIPTS_ARE_SECURE_NOW>
+if setuid scripts can be secure. This test looks in F</dev/fd/>.
+
+=item C<d_symlink>
+
+From F<d_symlink.U>:
+
+This variable conditionally defines the C<HAS_SYMLINK> symbol, which
+indicates to the C program that the symlink() routine is available
+to create symbolic links.
+
+=item C<d_syscall>
+
+From F<d_syscall.U>:
+
+This variable conditionally defines C<HAS_SYSCALL> if syscall() is
+available call arbitrary system calls.
+
+=item C<d_syscallproto>
+
+From F<d_syscallproto.U>:
+
+This variable conditionally defines the C<HAS_SYSCALL_PROTO> symbol,
+which indicates to the C program that the system provides
+a prototype for the syscall() function. Otherwise, it is
+up to the program to supply one.
+
+=item C<d_sysconf>
+
+From F<d_sysconf.U>:
+
+This variable conditionally defines the C<HAS_SYSCONF> symbol, which
+indicates to the C program that the sysconf() routine is available
+to determine system related limits and options.
+
+=item C<d_sysernlst>
+
+From F<d_strerror.U>:
+
+This variable conditionally defines C<HAS_SYS_ERRNOLIST> if sys_errnolist[]
+is available to translate error numbers to the symbolic name.
+
+=item C<d_syserrlst>
+
+From F<d_strerror.U>:
+
+This variable conditionally defines C<HAS_SYS_ERRLIST> if sys_errlist[] is
+available to translate error numbers to strings.
+
+=item C<d_system>
+
+From F<d_system.U>:
+
+This variable conditionally defines C<HAS_SYSTEM> if system() is
+available to issue a shell command.
+
+=item C<d_tcgetpgrp>
+
+From F<d_tcgtpgrp.U>:
+
+This variable conditionally defines the C<HAS_TCGETPGRP> symbol, which
+indicates to the C program that the tcgetpgrp() routine is available.
+to get foreground process group C<ID>.
+
+=item C<d_tcsetpgrp>
+
+From F<d_tcstpgrp.U>:
+
+This variable conditionally defines the C<HAS_TCSETPGRP> symbol, which
+indicates to the C program that the tcsetpgrp() routine is available
+to set foreground process group C<ID>.
+
+=item C<d_telldir>
+
+From F<d_readdir.U>:
+
+This variable conditionally defines C<HAS_TELLDIR> if telldir() is
+available.
+
+=item C<d_telldirproto>
+
+From F<d_telldirproto.U>:
+
+This variable conditionally defines the C<HAS_TELLDIR_PROTO> symbol,
+which indicates to the C program that the system provides
+a prototype for the telldir() function. Otherwise, it is
+up to the program to supply one.
+
+=item C<d_time>
+
+From F<d_time.U>:
+
+This variable conditionally defines the C<HAS_TIME> symbol, which indicates
+that the time() routine exists. The time() routine is normaly
+provided on C<UNIX> systems.
+
+=item C<d_times>
+
+From F<d_times.U>:
+
+This variable conditionally defines the C<HAS_TIMES> symbol, which indicates
+that the times() routine exists. The times() routine is normaly
+provided on C<UNIX> systems. You may have to include <sys/times.h>.
+
+=item C<d_tm_tm_gmtoff>
+
+From F<i_time.U>:
+
+This variable conditionally defines C<HAS_TM_TM_GMTOFF>, which indicates
+indicates to the C program that the struct tm has the tm_gmtoff field.
+
+=item C<d_tm_tm_zone>
+
+From F<i_time.U>:
+
+This variable conditionally defines C<HAS_TM_TM_ZONE>, which indicates
+indicates to the C program that the struct tm has the tm_zone field.
+
+=item C<d_tmpnam_r>
+
+From F<d_tmpnam_r.U>:
+
+This variable conditionally defines the C<HAS_TMPNAM_R> symbol,
+which indicates to the C program that the tmpnam_r()
+routine is available.
+
+=item C<d_truncate>
+
+From F<d_truncate.U>:
+
+This variable conditionally defines C<HAS_TRUNCATE> if truncate() is
+available to truncate files.
+
+=item C<d_ttyname_r>
+
+From F<d_ttyname_r.U>:
+
+This variable conditionally defines the C<HAS_TTYNAME_R> symbol,
+which indicates to the C program that the ttyname_r()
+routine is available.
+
+=item C<d_tzname>
+
+From F<d_tzname.U>:
+
+This variable conditionally defines C<HAS_TZNAME> if tzname[] is
+available to access timezone names.
+
+=item C<d_u32align>
+
+From F<d_u32align.U>:
+
+This variable tells whether you must access character data
+through U32-aligned pointers.
+
+=item C<d_ualarm>
+
+From F<d_ualarm.U>:
+
+This variable conditionally defines the C<HAS_UALARM> symbol, which
+indicates to the C program that the ualarm() routine is available.
+
+=item C<d_umask>
+
+From F<d_umask.U>:
+
+This variable conditionally defines the C<HAS_UMASK> symbol, which
+indicates to the C program that the umask() routine is available.
+to set and get the value of the file creation mask.
+
+=item C<d_uname>
+
+From F<d_gethname.U>:
+
+This variable conditionally defines the C<HAS_UNAME> symbol, which
+indicates to the C program that the uname() routine may be
+used to derive the host name.
+
+=item C<d_union_semun>
+
+From F<d_union_semun.U>:
+
+This variable conditionally defines C<HAS_UNION_SEMUN> if the
+union semun is defined by including <sys/sem.h>.
+
+=item C<d_unordered>
+
+From F<d_unordered.U>:
+
+This variable conditionally defines the C<HAS_UNORDERED> symbol, which
+indicates to the C program that the unordered() routine is available.
+
+=item C<d_usleep>
+
+From F<d_usleep.U>:
+
+This variable conditionally defines C<HAS_USLEEP> if usleep() is
+available to do high granularity sleeps.
+
+=item C<d_usleepproto>
+
+From F<d_usleepproto.U>:
+
+This variable conditionally defines the C<HAS_USLEEP_PROTO> symbol,
+which indicates to the C program that the system provides
+a prototype for the usleep() function. Otherwise, it is
+up to the program to supply one.
+
+=item C<d_ustat>
+
+From F<d_ustat.U>:
+
+This variable conditionally defines C<HAS_USTAT> if ustat() is
+available to query file system statistics by dev_t.
+
+=item C<d_vendorarch>
+
+From F<vendorarch.U>:
+
+This variable conditionally defined C<PERL_VENDORARCH>.
+
+=item C<d_vendorbin>
+
+From F<vendorbin.U>:
+
+This variable conditionally defines C<PERL_VENDORBIN>.
+
+=item C<d_vendorlib>
+
+From F<vendorlib.U>:
+
+This variable conditionally defines C<PERL_VENDORLIB>.
+
+=item C<d_vfork>
+
+From F<d_vfork.U>:
+
+This variable conditionally defines the C<HAS_VFORK> symbol, which
+indicates the vfork() routine is available.
+
+=item C<d_void_closedir>
+
+From F<d_closedir.U>:
+
+This variable conditionally defines C<VOID_CLOSEDIR> if closedir()
+does not return a value.
+
+=item C<d_voidsig>
+
+From F<d_voidsig.U>:
+
+This variable conditionally defines C<VOIDSIG> if this system
+declares "void (*signal(...))()" in F<signal.h>. The old way was to
+declare it as "int (*signal(...))()".
+
+=item C<d_voidtty>
+
+From F<i_sysioctl.U>:
+
+This variable conditionally defines C<USE_IOCNOTTY> to indicate that the
+ioctl() call with C<TIOCNOTTY> should be used to void tty association.
+Otherwise (on C<USG> probably), it is enough to close the standard file
+decriptors and do a setpgrp().
+
+=item C<d_volatile>
+
+From F<d_volatile.U>:
+
+This variable conditionally defines the C<HASVOLATILE> symbol, which
+indicates to the C program that this C compiler knows about the
+volatile declaration.
+
+=item C<d_vprintf>
+
+From F<d_vprintf.U>:
+
+This variable conditionally defines the C<HAS_VPRINTF> symbol, which
+indicates to the C program that the vprintf() routine is available
+to printf with a pointer to an argument list.
+
+=item C<d_wait4>
+
+From F<d_wait4.U>:
+
+This variable conditionally defines the HAS_WAIT4 symbol, which
+indicates the wait4() routine is available.
+
+=item C<d_waitpid>
+
+From F<d_waitpid.U>:
+
+This variable conditionally defines C<HAS_WAITPID> if waitpid() is
+available to wait for child process.
+
+=item C<d_wcstombs>
+
+From F<d_wcstombs.U>:
+
+This variable conditionally defines the C<HAS_WCSTOMBS> symbol, which
+indicates to the C program that the wcstombs() routine is available
+to convert wide character strings to multibyte strings.
+
+=item C<d_wctomb>
+
+From F<d_wctomb.U>:
+
+This variable conditionally defines the C<HAS_WCTOMB> symbol, which
+indicates to the C program that the wctomb() routine is available
+to convert a wide character to a multibyte.
+
+=item C<d_writev>
+
+From F<d_writev.U>:
+
+This variable conditionally defines the C<HAS_WRITEV> symbol, which
+indicates to the C program that the writev() routine is available.
+
+=item C<d_xenix>
+
+From F<Guess.U>:
+
+This variable conditionally defines the symbol C<XENIX>, which alerts
+the C program that it runs under Xenix.
+
+=item C<date>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the date program. After Configure runs,
+the value is reset to a plain C<date> and is not useful.
+
+=item C<db_hashtype>
+
+From F<i_db.U>:
+
+This variable contains the type of the hash structure element
+in the <db.h> header file. In older versions of C<DB>, it was
+int, while in newer ones it is u_int32_t.
+
+=item C<db_prefixtype>
+
+From F<i_db.U>:
+
+This variable contains the type of the prefix structure element
+in the <db.h> header file. In older versions of C<DB>, it was
+int, while in newer ones it is size_t.
+
+=item C<db_version_major>
+
+From F<i_db.U>:
+
+This variable contains the major version number of
+Berkeley C<DB> found in the <db.h> header file.
+
+=item C<db_version_minor>
+
+From F<i_db.U>:
+
+This variable contains the minor version number of
+Berkeley C<DB> found in the <db.h> header file.
+For C<DB> version 1 this is always 0.
+
+=item C<db_version_patch>
+
+From F<i_db.U>:
+
+This variable contains the patch version number of
+Berkeley C<DB> found in the <db.h> header file.
+For C<DB> version 1 this is always 0.
+
+=item C<defvoidused>
+
+From F<voidflags.U>:
+
+This variable contains the default value of the C<VOIDUSED> symbol (15).
+
+=item C<direntrytype>
+
+From F<i_dirent.U>:
+
+This symbol is set to C<struct direct> or C<struct dirent> depending on
+whether dirent is available or not. You should use this pseudo type to
+portably declare your directory entries.
+
+=item C<dlext>
+
+From F<dlext.U>:
+
+This variable contains the extension that is to be used for the
+dynamically loaded modules that perl generaties.
+
+=item C<dlsrc>
+
+From F<dlsrc.U>:
+
+This variable contains the name of the dynamic loading file that
+will be used with the package.
+
+=item C<doublesize>
+
+From F<doublesize.U>:
+
+This variable contains the value of the C<DOUBLESIZE> symbol, which
+indicates to the C program how many bytes there are in a double.
+
+=item C<drand01>
+
+From F<randfunc.U>:
+
+Indicates the macro to be used to generate normalized
+random numbers. Uses randfunc, often divided by
+(double) (((unsigned long) 1 << randbits)) in order to
+normalize the result.
+In C programs, the macro C<Drand01> is mapped to drand01.
+
+=item C<drand48_r_proto>
+
+From F<d_drand48_r.U>:
+
+This variable encodes the prototype of drand48_r.
+It is zero if d_drand48_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_drand48_r
+is defined.
+
+=item C<dynamic_ext>
+
+From F<Extensions.U>:
+
+This variable holds a list of C<XS> extension files we want to
+link dynamically into the package. It is used by Makefile.
+
+=back
+
+=head2 e
+
+=over 4
+
+=item C<eagain>
+
+From F<nblock_io.U>:
+
+This variable bears the symbolic errno code set by read() when no
+data is present on the file and non-blocking I/O was enabled (otherwise,
+read() blocks naturally).
+
+=item C<ebcdic>
+
+From F<ebcdic.U>:
+
+This variable conditionally defines C<EBCDIC> if this
+system uses C<EBCDIC> encoding. Among other things, this
+means that the character ranges are not contiguous.
+See F<trnl.U>
+
+=item C<echo>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the echo program. After Configure runs,
+the value is reset to a plain C<echo> and is not useful.
+
+=item C<egrep>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the egrep program. After Configure runs,
+the value is reset to a plain C<egrep> and is not useful.
+
+=item C<emacs>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<endgrent_r_proto>
+
+From F<d_endgrent_r.U>:
+
+This variable encodes the prototype of endgrent_r.
+It is zero if d_endgrent_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_endgrent_r
+is defined.
+
+=item C<endhostent_r_proto>
+
+From F<d_endhostent_r.U>:
+
+This variable encodes the prototype of endhostent_r.
+It is zero if d_endhostent_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_endhostent_r
+is defined.
+
+=item C<endnetent_r_proto>
+
+From F<d_endnetent_r.U>:
+
+This variable encodes the prototype of endnetent_r.
+It is zero if d_endnetent_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_endnetent_r
+is defined.
+
+=item C<endprotoent_r_proto>
+
+From F<d_endprotoent_r.U>:
+
+This variable encodes the prototype of endprotoent_r.
+It is zero if d_endprotoent_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_endprotoent_r
+is defined.
+
+=item C<endpwent_r_proto>
+
+From F<d_endpwent_r.U>:
+
+This variable encodes the prototype of endpwent_r.
+It is zero if d_endpwent_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_endpwent_r
+is defined.
+
+=item C<endservent_r_proto>
+
+From F<d_endservent_r.U>:
+
+This variable encodes the prototype of endservent_r.
+It is zero if d_endservent_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_endservent_r
+is defined.
+
+=item C<eunicefix>
+
+From F<Init.U>:
+
+When running under Eunice this variable contains a command which will
+convert a shell script to the proper form of text file for it to be
+executable by the shell. On other systems it is a no-op.
+
+=item C<exe_ext>
+
+From F<Unix.U>:
+
+This is an old synonym for _exe.
+
+=item C<expr>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the expr program. After Configure runs,
+the value is reset to a plain C<expr> and is not useful.
+
+=item C<extensions>
+
+From F<Extensions.U>:
+
+This variable holds a list of all extension files (both C<XS> and
+non-xs linked into the package. It is propagated to F<Config.pm>
+and is typically used to test whether a particular extesion
+is available.
+
+=item C<extras>
+
+From F<Extras.U>:
+
+This variable holds a list of extra modules to install.
+
+=back
+
+=head2 f
+
+=over 4
+
+=item C<fflushall>
+
+From F<fflushall.U>:
+
+This symbol, if defined, tells that to flush
+all pending stdio output one must loop through all
+the stdio file handles stored in an array and fflush them.
+Note that if fflushNULL is defined, fflushall will not
+even be probed for and will be left undefined.
+
+=item C<fflushNULL>
+
+From F<fflushall.U>:
+
+This symbol, if defined, tells that fflush(C<NULL>) does flush
+all pending stdio output.
+
+=item C<find>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<firstmakefile>
+
+From F<Unix.U>:
+
+This variable defines the first file searched by make. On unix,
+it is makefile (then Makefile). On case-insensitive systems,
+it might be something else. This is only used to deal with
+convoluted make depend tricks.
+
+=item C<flex>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<fpossize>
+
+From F<fpossize.U>:
+
+This variable contains the size of a fpostype in bytes.
+
+=item C<fpostype>
+
+From F<fpostype.U>:
+
+This variable defines Fpos_t to be something like fpos_t, long,
+uint, or whatever type is used to declare file positions in libc.
+
+=item C<freetype>
+
+From F<mallocsrc.U>:
+
+This variable contains the return type of free(). It is usually
+void, but occasionally int.
+
+=item C<from>
+
+From F<Cross.U>:
+
+This variable contains the command used by Configure
+to copy files from the target host. Useful and available
+only during Perl build.
+The string C<:> if not cross-compiling.
+
+=item C<full_ar>
+
+From F<Loc_ar.U>:
+
+This variable contains the full pathname to C<ar>, whether or
+not the user has specified C<portability>. This is only used
+in the F<Makefile.SH>.
+
+=item C<full_csh>
+
+From F<d_csh.U>:
+
+This variable contains the full pathname to C<csh>, whether or
+not the user has specified C<portability>. This is only used
+in the compiled C program, and we assume that all systems which
+can share this executable will have the same full pathname to
+F<csh.>
+
+=item C<full_sed>
+
+From F<Loc_sed.U>:
+
+This variable contains the full pathname to C<sed>, whether or
+not the user has specified C<portability>. This is only used
+in the compiled C program, and we assume that all systems which
+can share this executable will have the same full pathname to
+F<sed.>
+
+=back
+
+=head2 g
+
+=over 4
+
+=item C<gccosandvers>
+
+From F<gccvers.U>:
+
+If C<GNU> cc (gcc) is used, this variable the operating system and
+version used to compile the gcc. It is set to '' if not gcc,
+or if nothing useful can be parsed as the os version.
+
+=item C<gccversion>
+
+From F<gccvers.U>:
+
+If C<GNU> cc (gcc) is used, this variable holds C<1> or C<2> to
+indicate whether the compiler is version 1 or 2. This is used in
+setting some of the default cflags. It is set to '' if not gcc.
+
+=item C<getgrent_r_proto>
+
+From F<d_getgrent_r.U>:
+
+This variable encodes the prototype of getgrent_r.
+It is zero if d_getgrent_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_getgrent_r
+is defined.
+
+=item C<getgrgid_r_proto>
+
+From F<d_getgrgid_r.U>:
+
+This variable encodes the prototype of getgrgid_r.
+It is zero if d_getgrgid_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_getgrgid_r
+is defined.
+
+=item C<getgrnam_r_proto>
+
+From F<d_getgrnam_r.U>:
+
+This variable encodes the prototype of getgrnam_r.
+It is zero if d_getgrnam_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_getgrnam_r
+is defined.
+
+=item C<gethostbyaddr_r_proto>
+
+From F<d_gethostbyaddr_r.U>:
+
+This variable encodes the prototype of gethostbyaddr_r.
+It is zero if d_gethostbyaddr_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_gethostbyaddr_r
+is defined.
+
+=item C<gethostbyname_r_proto>
+
+From F<d_gethostbyname_r.U>:
+
+This variable encodes the prototype of gethostbyname_r.
+It is zero if d_gethostbyname_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_gethostbyname_r
+is defined.
+
+=item C<gethostent_r_proto>
+
+From F<d_gethostent_r.U>:
+
+This variable encodes the prototype of gethostent_r.
+It is zero if d_gethostent_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_gethostent_r
+is defined.
+
+=item C<getlogin_r_proto>
+
+From F<d_getlogin_r.U>:
+
+This variable encodes the prototype of getlogin_r.
+It is zero if d_getlogin_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_getlogin_r
+is defined.
+
+=item C<getnetbyaddr_r_proto>
+
+From F<d_getnetbyaddr_r.U>:
+
+This variable encodes the prototype of getnetbyaddr_r.
+It is zero if d_getnetbyaddr_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_getnetbyaddr_r
+is defined.
+
+=item C<getnetbyname_r_proto>
+
+From F<d_getnetbyname_r.U>:
+
+This variable encodes the prototype of getnetbyname_r.
+It is zero if d_getnetbyname_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_getnetbyname_r
+is defined.
+
+=item C<getnetent_r_proto>
+
+From F<d_getnetent_r.U>:
+
+This variable encodes the prototype of getnetent_r.
+It is zero if d_getnetent_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_getnetent_r
+is defined.
+
+=item C<getprotobyname_r_proto>
+
+From F<d_getprotobyname_r.U>:
+
+This variable encodes the prototype of getprotobyname_r.
+It is zero if d_getprotobyname_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_getprotobyname_r
+is defined.
+
+=item C<getprotobynumber_r_proto>
+
+From F<d_getprotobynumber_r.U>:
+
+This variable encodes the prototype of getprotobynumber_r.
+It is zero if d_getprotobynumber_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_getprotobynumber_r
+is defined.
+
+=item C<getprotoent_r_proto>
+
+From F<d_getprotoent_r.U>:
+
+This variable encodes the prototype of getprotoent_r.
+It is zero if d_getprotoent_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_getprotoent_r
+is defined.
+
+=item C<getpwent_r_proto>
+
+From F<d_getpwent_r.U>:
+
+This variable encodes the prototype of getpwent_r.
+It is zero if d_getpwent_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_getpwent_r
+is defined.
+
+=item C<getpwnam_r_proto>
+
+From F<d_getpwnam_r.U>:
+
+This variable encodes the prototype of getpwnam_r.
+It is zero if d_getpwnam_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_getpwnam_r
+is defined.
+
+=item C<getpwuid_r_proto>
+
+From F<d_getpwuid_r.U>:
+
+This variable encodes the prototype of getpwuid_r.
+It is zero if d_getpwuid_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_getpwuid_r
+is defined.
+
+=item C<getservbyname_r_proto>
+
+From F<d_getservbyname_r.U>:
+
+This variable encodes the prototype of getservbyname_r.
+It is zero if d_getservbyname_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_getservbyname_r
+is defined.
+
+=item C<getservbyport_r_proto>
+
+From F<d_getservbyport_r.U>:
+
+This variable encodes the prototype of getservbyport_r.
+It is zero if d_getservbyport_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_getservbyport_r
+is defined.
+
+=item C<getservent_r_proto>
+
+From F<d_getservent_r.U>:
+
+This variable encodes the prototype of getservent_r.
+It is zero if d_getservent_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_getservent_r
+is defined.
+
+=item C<getspnam_r_proto>
+
+From F<d_getspnam_r.U>:
+
+This variable encodes the prototype of getspnam_r.
+It is zero if d_getspnam_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_getspnam_r
+is defined.
+
+=item C<gidformat>
+
+From F<gidf.U>:
+
+This variable contains the format string used for printing a Gid_t.
+
+=item C<gidsign>
+
+From F<gidsign.U>:
+
+This variable contains the signedness of a gidtype.
+1 for unsigned, -1 for signed.
+
+=item C<gidsize>
+
+From F<gidsize.U>:
+
+This variable contains the size of a gidtype in bytes.
+
+=item C<gidtype>
+
+From F<gidtype.U>:
+
+This variable defines Gid_t to be something like gid_t, int,
+ushort, or whatever type is used to declare the return type
+of getgid(). Typically, it is the type of group ids in the kernel.
+
+=item C<glibpth>
+
+From F<libpth.U>:
+
+This variable holds the general path (space-separated) used to
+find libraries. It may contain directories that do not exist on
+this platform, libpth is the cleaned-up version.
+
+=item C<gmake>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the gmake program. After Configure runs,
+the value is reset to a plain C<gmake> and is not useful.
+
+=item C<gmtime_r_proto>
+
+From F<d_gmtime_r.U>:
+
+This variable encodes the prototype of gmtime_r.
+It is zero if d_gmtime_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_gmtime_r
+is defined.
+
+=item C<gnulibc_version>
+
+From F<d_gnulibc.U>:
+
+This variable contains the version number of the C<GNU> C library.
+It is usually something like F<2.2.5>. It is a plain '' if this
+is not the C<GNU> C library, or if the version is unknown.
+
+=item C<grep>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the grep program. After Configure runs,
+the value is reset to a plain C<grep> and is not useful.
+
+=item C<groupcat>
+
+From F<nis.U>:
+
+This variable contains a command that produces the text of the
+F</etc/group> file. This is normally "cat F</etc/group>", but can be
+"ypcat group" when C<NIS> is used.
+On some systems, such as os390, there may be no equivalent
+command, in which case this variable is unset.
+
+=item C<groupstype>
+
+From F<groupstype.U>:
+
+This variable defines Groups_t to be something like gid_t, int,
+ushort, or whatever type is used for the second argument to
+getgroups() and setgroups(). Usually, this is the same as
+gidtype (gid_t), but sometimes it isn't.
+
+=item C<gzip>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the gzip program. After Configure runs,
+the value is reset to a plain C<gzip> and is not useful.
+
+=back
+
+=head2 h
+
+=over 4
+
+=item C<h_fcntl>
+
+From F<h_fcntl.U>:
+
+This is variable gets set in various places to tell i_fcntl that
+<fcntl.h> should be included.
+
+=item C<h_sysfile>
+
+From F<h_sysfile.U>:
+
+This is variable gets set in various places to tell i_sys_file that
+<sys/file.h> should be included.
+
+=item C<hint>
+
+From F<Oldconfig.U>:
+
+Gives the type of hints used for previous answers. May be one of
+C<default>, C<recommended> or C<previous>.
+
+=item C<hostcat>
+
+From F<nis.U>:
+
+This variable contains a command that produces the text of the
+F</etc/hosts> file. This is normally "cat F</etc/hosts>", but can be
+"ypcat hosts" when C<NIS> is used.
+On some systems, such as os390, there may be no equivalent
+command, in which case this variable is unset.
+
+=back
+
+=head2 i
+
+=over 4
+
+=item C<i16size>
+
+From F<perlxv.U>:
+
+This variable is the size of an I16 in bytes.
+
+=item C<i16type>
+
+From F<perlxv.U>:
+
+This variable contains the C type used for Perl's I16.
+
+=item C<i32size>
+
+From F<perlxv.U>:
+
+This variable is the size of an I32 in bytes.
+
+=item C<i32type>
+
+From F<perlxv.U>:
+
+This variable contains the C type used for Perl's I32.
+
+=item C<i64size>
+
+From F<perlxv.U>:
+
+This variable is the size of an I64 in bytes.
+
+=item C<i64type>
+
+From F<perlxv.U>:
+
+This variable contains the C type used for Perl's I64.
+
+=item C<i8size>
+
+From F<perlxv.U>:
+
+This variable is the size of an I8 in bytes.
+
+=item C<i8type>
+
+From F<perlxv.U>:
+
+This variable contains the C type used for Perl's I8.
+
+=item C<i_arpainet>
+
+From F<i_arpainet.U>:
+
+This variable conditionally defines the C<I_ARPA_INET> symbol,
+and indicates whether a C program should include <arpa/inet.h>.
+
+=item C<i_bsdioctl>
+
+From F<i_sysioctl.U>:
+
+This variable conditionally defines the C<I_SYS_BSDIOCTL> symbol, which
+indicates to the C program that <sys/bsdioctl.h> exists and should
+be included.
+
+=item C<i_crypt>
+
+From F<i_crypt.U>:
+
+This variable conditionally defines the C<I_CRYPT> symbol, and indicates
+whether a C program should include <crypt.h>.
+
+=item C<i_db>
+
+From F<i_db.U>:
+
+This variable conditionally defines the C<I_DB> symbol, and indicates
+whether a C program may include Berkeley's C<DB> include file <db.h>.
+
+=item C<i_dbm>
+
+From F<i_dbm.U>:
+
+This variable conditionally defines the C<I_DBM> symbol, which
+indicates to the C program that <dbm.h> exists and should
+be included.
+
+=item C<i_dirent>
+
+From F<i_dirent.U>:
+
+This variable conditionally defines C<I_DIRENT>, which indicates
+to the C program that it should include <dirent.h>.
+
+=item C<i_dld>
+
+From F<i_dld.U>:
+
+This variable conditionally defines the C<I_DLD> symbol, which
+indicates to the C program that <dld.h> (C<GNU> dynamic loading)
+exists and should be included.
+
+=item C<i_dlfcn>
+
+From F<i_dlfcn.U>:
+
+This variable conditionally defines the C<I_DLFCN> symbol, which
+indicates to the C program that <dlfcn.h> exists and should
+be included.
+
+=item C<i_fcntl>
+
+From F<i_fcntl.U>:
+
+This variable controls the value of C<I_FCNTL> (which tells
+the C program to include <fcntl.h>).
+
+=item C<i_float>
+
+From F<i_float.U>:
+
+This variable conditionally defines the C<I_FLOAT> symbol, and indicates
+whether a C program may include <float.h> to get symbols like C<DBL_MAX>
+or C<DBL_MIN>, F<i.e>. machine dependent floating point values.
+
+=item C<i_fp>
+
+From F<i_fp.U>:
+
+This variable conditionally defines the C<I_FP> symbol, and indicates
+whether a C program should include <fp.h>.
+
+=item C<i_fp_class>
+
+From F<i_fp_class.U>:
+
+This variable conditionally defines the C<I_FP_CLASS> symbol, and indicates
+whether a C program should include <fp_class.h>.
+
+=item C<i_gdbm>
+
+From F<i_gdbm.U>:
+
+This variable conditionally defines the C<I_GDBM> symbol, which
+indicates to the C program that <gdbm.h> exists and should
+be included.
+
+=item C<i_grp>
+
+From F<i_grp.U>:
+
+This variable conditionally defines the C<I_GRP> symbol, and indicates
+whether a C program should include <grp.h>.
+
+=item C<i_ieeefp>
+
+From F<i_ieeefp.U>:
+
+This variable conditionally defines the C<I_IEEEFP> symbol, and indicates
+whether a C program should include <ieeefp.h>.
+
+=item C<i_inttypes>
+
+From F<i_inttypes.U>:
+
+This variable conditionally defines the C<I_INTTYPES> symbol,
+and indicates whether a C program should include <inttypes.h>.
+
+=item C<i_langinfo>
+
+From F<i_langinfo.U>:
+
+This variable conditionally defines the C<I_LANGINFO> symbol,
+and indicates whether a C program should include <langinfo.h>.
+
+=item C<i_libutil>
+
+From F<i_libutil.U>:
+
+This variable conditionally defines the C<I_LIBUTIL> symbol, and indicates
+whether a C program should include <libutil.h>.
+
+=item C<i_limits>
+
+From F<i_limits.U>:
+
+This variable conditionally defines the C<I_LIMITS> symbol, and indicates
+whether a C program may include <limits.h> to get symbols like C<WORD_BIT>
+and friends.
+
+=item C<i_locale>
+
+From F<i_locale.U>:
+
+This variable conditionally defines the C<I_LOCALE> symbol,
+and indicates whether a C program should include <locale.h>.
+
+=item C<i_machcthr>
+
+From F<i_machcthr.U>:
+
+This variable conditionally defines the C<I_MACH_CTHREADS> symbol,
+and indicates whether a C program should include <mach/cthreads.h>.
+
+=item C<i_malloc>
+
+From F<i_malloc.U>:
+
+This variable conditionally defines the C<I_MALLOC> symbol, and indicates
+whether a C program should include <malloc.h>.
+
+=item C<i_math>
+
+From F<i_math.U>:
+
+This variable conditionally defines the C<I_MATH> symbol, and indicates
+whether a C program may include <math.h>.
+
+=item C<i_memory>
+
+From F<i_memory.U>:
+
+This variable conditionally defines the C<I_MEMORY> symbol, and indicates
+whether a C program should include <memory.h>.
+
+=item C<i_mntent>
+
+From F<i_mntent.U>:
+
+This variable conditionally defines the C<I_MNTENT> symbol, and indicates
+whether a C program should include <mntent.h>.
+
+=item C<i_ndbm>
+
+From F<i_ndbm.U>:
+
+This variable conditionally defines the C<I_NDBM> symbol, which
+indicates to the C program that <ndbm.h> exists and should
+be included.
+
+=item C<i_netdb>
+
+From F<i_netdb.U>:
+
+This variable conditionally defines the C<I_NETDB> symbol, and indicates
+whether a C program should include <netdb.h>.
+
+=item C<i_neterrno>
+
+From F<i_neterrno.U>:
+
+This variable conditionally defines the C<I_NET_ERRNO> symbol, which
+indicates to the C program that <net/errno.h> exists and should
+be included.
+
+=item C<i_netinettcp>
+
+From F<i_netinettcp.U>:
+
+This variable conditionally defines the C<I_NETINET_TCP> symbol,
+and indicates whether a C program should include <netinet/tcp.h>.
+
+=item C<i_niin>
+
+From F<i_niin.U>:
+
+This variable conditionally defines C<I_NETINET_IN>, which indicates
+to the C program that it should include <netinet/in.h>. Otherwise,
+you may try <sys/in.h>.
+
+=item C<i_poll>
+
+From F<i_poll.U>:
+
+This variable conditionally defines the C<I_POLL> symbol, and indicates
+whether a C program should include <poll.h>.
+
+=item C<i_prot>
+
+From F<i_prot.U>:
+
+This variable conditionally defines the C<I_PROT> symbol, and indicates
+whether a C program should include <prot.h>.
+
+=item C<i_pthread>
+
+From F<i_pthread.U>:
+
+This variable conditionally defines the C<I_PTHREAD> symbol,
+and indicates whether a C program should include <pthread.h>.
+
+=item C<i_pwd>
+
+From F<i_pwd.U>:
+
+This variable conditionally defines C<I_PWD>, which indicates
+to the C program that it should include <pwd.h>.
+
+=item C<i_rpcsvcdbm>
+
+From F<i_dbm.U>:
+
+This variable conditionally defines the C<I_RPCSVC_DBM> symbol, which
+indicates to the C program that <rpcsvc/dbm.h> exists and should
+be included. Some System V systems might need this instead of <dbm.h>.
+
+=item C<i_sfio>
+
+From F<i_sfio.U>:
+
+This variable conditionally defines the C<I_SFIO> symbol,
+and indicates whether a C program should include <sfio.h>.
+
+=item C<i_sgtty>
+
+From F<i_termio.U>:
+
+This variable conditionally defines the C<I_SGTTY> symbol, which
+indicates to the C program that it should include <sgtty.h> rather
+than <termio.h>.
+
+=item C<i_shadow>
+
+From F<i_shadow.U>:
+
+This variable conditionally defines the C<I_SHADOW> symbol, and indicates
+whether a C program should include <shadow.h>.
+
+=item C<i_socks>
+
+From F<i_socks.U>:
+
+This variable conditionally defines the C<I_SOCKS> symbol, and indicates
+whether a C program should include <socks.h>.
+
+=item C<i_stdarg>
+
+From F<i_varhdr.U>:
+
+This variable conditionally defines the C<I_STDARG> symbol, which
+indicates to the C program that <stdarg.h> exists and should
+be included.
+
+=item C<i_stddef>
+
+From F<i_stddef.U>:
+
+This variable conditionally defines the C<I_STDDEF> symbol, which
+indicates to the C program that <stddef.h> exists and should
+be included.
+
+=item C<i_stdlib>
+
+From F<i_stdlib.U>:
+
+This variable conditionally defines the C<I_STDLIB> symbol, which
+indicates to the C program that <stdlib.h> exists and should
+be included.
+
+=item C<i_string>
+
+From F<i_string.U>:
+
+This variable conditionally defines the C<I_STRING> symbol, which
+indicates that <string.h> should be included rather than <strings.h>.
+
+=item C<i_sunmath>
+
+From F<i_sunmath.U>:
+
+This variable conditionally defines the C<I_SUNMATH> symbol, and indicates
+whether a C program should include <sunmath.h>.
+
+=item C<i_sysaccess>
+
+From F<i_sysaccess.U>:
+
+This variable conditionally defines the C<I_SYS_ACCESS> symbol,
+and indicates whether a C program should include <sys/access.h>.
+
+=item C<i_sysdir>
+
+From F<i_sysdir.U>:
+
+This variable conditionally defines the C<I_SYS_DIR> symbol, and indicates
+whether a C program should include <sys/dir.h>.
+
+=item C<i_sysfile>
+
+From F<i_sysfile.U>:
+
+This variable conditionally defines the C<I_SYS_FILE> symbol, and indicates
+whether a C program should include <sys/file.h> to get C<R_OK> and friends.
+
+=item C<i_sysfilio>
+
+From F<i_sysioctl.U>:
+
+This variable conditionally defines the C<I_SYS_FILIO> symbol, which
+indicates to the C program that <sys/filio.h> exists and should
+be included in preference to <sys/ioctl.h>.
+
+=item C<i_sysin>
+
+From F<i_niin.U>:
+
+This variable conditionally defines C<I_SYS_IN>, which indicates
+to the C program that it should include <sys/in.h> instead of
+<netinet/in.h>.
+
+=item C<i_sysioctl>
+
+From F<i_sysioctl.U>:
+
+This variable conditionally defines the C<I_SYS_IOCTL> symbol, which
+indicates to the C program that <sys/ioctl.h> exists and should
+be included.
+
+=item C<i_syslog>
+
+From F<i_syslog.U>:
+
+This variable conditionally defines the C<I_SYSLOG> symbol,
+and indicates whether a C program should include <syslog.h>.
+
+=item C<i_sysmman>
+
+From F<i_sysmman.U>:
+
+This variable conditionally defines the C<I_SYS_MMAN> symbol, and
+indicates whether a C program should include <sys/mman.h>.
+
+=item C<i_sysmode>
+
+From F<i_sysmode.U>:
+
+This variable conditionally defines the C<I_SYSMODE> symbol,
+and indicates whether a C program should include <sys/mode.h>.
+
+=item C<i_sysmount>
+
+From F<i_sysmount.U>:
+
+This variable conditionally defines the C<I_SYSMOUNT> symbol,
+and indicates whether a C program should include <sys/mount.h>.
+
+=item C<i_sysndir>
+
+From F<i_sysndir.U>:
+
+This variable conditionally defines the C<I_SYS_NDIR> symbol, and indicates
+whether a C program should include <sys/ndir.h>.
+
+=item C<i_sysparam>
+
+From F<i_sysparam.U>:
+
+This variable conditionally defines the C<I_SYS_PARAM> symbol, and indicates
+whether a C program should include <sys/param.h>.
+
+=item C<i_sysresrc>
+
+From F<i_sysresrc.U>:
+
+This variable conditionally defines the C<I_SYS_RESOURCE> symbol,
+and indicates whether a C program should include <sys/resource.h>.
+
+=item C<i_syssecrt>
+
+From F<i_syssecrt.U>:
+
+This variable conditionally defines the C<I_SYS_SECURITY> symbol,
+and indicates whether a C program should include <sys/security.h>.
+
+=item C<i_sysselct>
+
+From F<i_sysselct.U>:
+
+This variable conditionally defines C<I_SYS_SELECT>, which indicates
+to the C program that it should include <sys/select.h> in order to
+get the definition of struct timeval.
+
+=item C<i_syssockio>
+
+From F<i_sysioctl.U>:
+
+This variable conditionally defines C<I_SYS_SOCKIO> to indicate to the
+C program that socket ioctl codes may be found in <sys/sockio.h>
+instead of <sys/ioctl.h>.
+
+=item C<i_sysstat>
+
+From F<i_sysstat.U>:
+
+This variable conditionally defines the C<I_SYS_STAT> symbol,
+and indicates whether a C program should include <sys/stat.h>.
+
+=item C<i_sysstatfs>
+
+From F<i_sysstatfs.U>:
+
+This variable conditionally defines the C<I_SYSSTATFS> symbol,
+and indicates whether a C program should include <sys/statfs.h>.
+
+=item C<i_sysstatvfs>
+
+From F<i_sysstatvfs.U>:
+
+This variable conditionally defines the C<I_SYSSTATVFS> symbol,
+and indicates whether a C program should include <sys/statvfs.h>.
+
+=item C<i_systime>
+
+From F<i_time.U>:
+
+This variable conditionally defines C<I_SYS_TIME>, which indicates
+to the C program that it should include <sys/time.h>.
+
+=item C<i_systimek>
+
+From F<i_time.U>:
+
+This variable conditionally defines C<I_SYS_TIME_KERNEL>, which
+indicates to the C program that it should include <sys/time.h>
+with C<KERNEL> defined.
+
+=item C<i_systimes>
+
+From F<i_systimes.U>:
+
+This variable conditionally defines the C<I_SYS_TIMES> symbol, and indicates
+whether a C program should include <sys/times.h>.
+
+=item C<i_systypes>
+
+From F<i_systypes.U>:
+
+This variable conditionally defines the C<I_SYS_TYPES> symbol,
+and indicates whether a C program should include <sys/types.h>.
+
+=item C<i_sysuio>
+
+From F<i_sysuio.U>:
+
+This variable conditionally defines the C<I_SYSUIO> symbol, and indicates
+whether a C program should include <sys/uio.h>.
+
+=item C<i_sysun>
+
+From F<i_sysun.U>:
+
+This variable conditionally defines C<I_SYS_UN>, which indicates
+to the C program that it should include <sys/un.h> to get C<UNIX>
+domain socket definitions.
+
+=item C<i_sysutsname>
+
+From F<i_sysutsname.U>:
+
+This variable conditionally defines the C<I_SYSUTSNAME> symbol,
+and indicates whether a C program should include <sys/utsname.h>.
+
+=item C<i_sysvfs>
+
+From F<i_sysvfs.U>:
+
+This variable conditionally defines the C<I_SYSVFS> symbol,
+and indicates whether a C program should include <sys/vfs.h>.
+
+=item C<i_syswait>
+
+From F<i_syswait.U>:
+
+This variable conditionally defines C<I_SYS_WAIT>, which indicates
+to the C program that it should include <sys/wait.h>.
+
+=item C<i_termio>
+
+From F<i_termio.U>:
+
+This variable conditionally defines the C<I_TERMIO> symbol, which
+indicates to the C program that it should include <termio.h> rather
+than <sgtty.h>.
+
+=item C<i_termios>
+
+From F<i_termio.U>:
+
+This variable conditionally defines the C<I_TERMIOS> symbol, which
+indicates to the C program that the C<POSIX> <termios.h> file is
+to be included.
+
+=item C<i_time>
+
+From F<i_time.U>:
+
+This variable conditionally defines C<I_TIME>, which indicates
+to the C program that it should include <time.h>.
+
+=item C<i_unistd>
+
+From F<i_unistd.U>:
+
+This variable conditionally defines the C<I_UNISTD> symbol, and indicates
+whether a C program should include <unistd.h>.
+
+=item C<i_ustat>
+
+From F<i_ustat.U>:
+
+This variable conditionally defines the C<I_USTAT> symbol, and indicates
+whether a C program should include <ustat.h>.
+
+=item C<i_utime>
+
+From F<i_utime.U>:
+
+This variable conditionally defines the C<I_UTIME> symbol, and indicates
+whether a C program should include <utime.h>.
+
+=item C<i_values>
+
+From F<i_values.U>:
+
+This variable conditionally defines the C<I_VALUES> symbol, and indicates
+whether a C program may include <values.h> to get symbols like C<MAXLONG>
+and friends.
+
+=item C<i_varargs>
+
+From F<i_varhdr.U>:
+
+This variable conditionally defines C<I_VARARGS>, which indicates
+to the C program that it should include <varargs.h>.
+
+=item C<i_varhdr>
+
+From F<i_varhdr.U>:
+
+Contains the name of the header to be included to get va_dcl definition.
+Typically one of F<varargs.h> or F<stdarg.h>.
+
+=item C<i_vfork>
+
+From F<i_vfork.U>:
+
+This variable conditionally defines the C<I_VFORK> symbol, and indicates
+whether a C program should include F<vfork.h>.
+
+=item C<ignore_versioned_solibs>
+
+From F<libs.U>:
+
+This variable should be non-empty if non-versioned shared
+libraries (F<libfoo.so.x.y>) are to be ignored (because they
+cannot be linked against).
+
+=item C<inc_version_list>
+
+From F<inc_version_list.U>:
+
+This variable specifies the list of subdirectories in over
+which F<perl.c>:incpush() and F<lib/lib.pm> will automatically
+search when adding directories to @C<INC>. The elements in
+the list are separated by spaces. This is only useful
+if you have a perl library directory tree structured like the
+default one. See C<INSTALL> for how this works. The versioned
+site_perl directory was introduced in 5.005, so that is the
+lowest possible value.
+
+=item C<inc_version_list_init>
+
+From F<inc_version_list.U>:
+
+This variable holds the same list as inc_version_list, but
+each item is enclosed in double quotes and separated by commas,
+suitable for use in the C<PERL_INC_VERSION_LIST> initialization.
+
+=item C<incpath>
+
+From F<usrinc.U>:
+
+This variable must preceed the normal include path to get hte
+right one, as in F<$F<incpath/usr/include>> or F<$F<incpath/usr/lib>>.
+Value can be "" or F</bsd43> on mips.
+
+=item C<inews>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<installarchlib>
+
+From F<archlib.U>:
+
+This variable is really the same as archlibexp but may differ on
+those systems using C<AFS>. For extra portability, only this variable
+should be used in makefiles.
+
+=item C<installbin>
+
+From F<bin.U>:
+
+This variable is the same as binexp unless C<AFS> is running in which case
+the user is explicitely prompted for it. This variable should always
+be used in your makefiles for maximum portability.
+
+=item C<installman1dir>
+
+From F<man1dir.U>:
+
+This variable is really the same as man1direxp, unless you are using
+C<AFS> in which case it points to the read/write location whereas
+man1direxp only points to the read-only access location. For extra
+portability, you should only use this variable within your makefiles.
+
+=item C<installman3dir>
+
+From F<man3dir.U>:
+
+This variable is really the same as man3direxp, unless you are using
+C<AFS> in which case it points to the read/write location whereas
+man3direxp only points to the read-only access location. For extra
+portability, you should only use this variable within your makefiles.
+
+=item C<installprefix>
+
+From F<installprefix.U>:
+
+This variable holds the name of the directory below which
+"make install" will install the package. For most users, this
+is the same as prefix. However, it is useful for
+installing the software into a different (usually temporary)
+location after which it can be bundled up and moved somehow
+to the final location specified by prefix.
+
+=item C<installprefixexp>
+
+From F<installprefix.U>:
+
+This variable holds the full absolute path of installprefix
+with all F<~>-expansion done.
+
+=item C<installprivlib>
+
+From F<privlib.U>:
+
+This variable is really the same as privlibexp but may differ on
+those systems using C<AFS>. For extra portability, only this variable
+should be used in makefiles.
+
+=item C<installscript>
+
+From F<scriptdir.U>:
+
+This variable is usually the same as scriptdirexp, unless you are on
+a system running C<AFS>, in which case they may differ slightly. You
+should always use this variable within your makefiles for portability.
+
+=item C<installsitearch>
+
+From F<sitearch.U>:
+
+This variable is really the same as sitearchexp but may differ on
+those systems using C<AFS>. For extra portability, only this variable
+should be used in makefiles.
+
+=item C<installsitebin>
+
+From F<sitebin.U>:
+
+This variable is usually the same as sitebinexp, unless you are on
+a system running C<AFS>, in which case they may differ slightly. You
+should always use this variable within your makefiles for portability.
+
+=item C<installsitelib>
+
+From F<sitelib.U>:
+
+This variable is really the same as sitelibexp but may differ on
+those systems using C<AFS>. For extra portability, only this variable
+should be used in makefiles.
+
+=item C<installstyle>
+
+From F<installstyle.U>:
+
+This variable describes the C<style> of the perl installation.
+This is intended to be useful for tools that need to
+manipulate entire perl distributions. Perl itself doesn't use
+this to find its libraries -- the library directories are
+stored directly in F<Config.pm>. Currently, there are only two
+styles: C<lib> and F<lib/perl5>. The default library locations
+(e.g. privlib, sitelib) are either F<$prefix/lib> or
+F<$prefix/lib/perl5>. The former is useful if $prefix is a
+directory dedicated to perl (e.g. F</opt/perl>), while the latter
+is useful if $prefix is shared by many packages, e.g. if
+$prefix=F</usr/local>.
+
+This may later be extended to include other information, so
+be careful with pattern-matching on the results.
+
+For compatibility with F<perl5.005> and earlier, the default
+setting is based on whether or not $prefix contains the string
+C<perl>.
+
+=item C<installusrbinperl>
+
+From F<instubperl.U>:
+
+This variable tells whether Perl should be installed also as
+F</usr/bin/perl> in addition to
+F<$installbin/perl>
+
+=item C<installvendorarch>
+
+From F<vendorarch.U>:
+
+This variable is really the same as vendorarchexp but may differ on
+those systems using C<AFS>. For extra portability, only this variable
+should be used in makefiles.
+
+=item C<installvendorbin>
+
+From F<vendorbin.U>:
+
+This variable is really the same as vendorbinexp but may differ on
+those systems using C<AFS>. For extra portability, only this variable
+should be used in makefiles.
+
+=item C<installvendorlib>
+
+From F<vendorlib.U>:
+
+This variable is really the same as vendorlibexp but may differ on
+those systems using C<AFS>. For extra portability, only this variable
+should be used in makefiles.
+
+=item C<intsize>
+
+From F<intsize.U>:
+
+This variable contains the value of the C<INTSIZE> symbol, which
+indicates to the C program how many bytes there are in an int.
+
+=item C<issymlink>
+
+From F<issymlink.U>:
+
+This variable holds the test command to test for a symbolic link
+(if they are supported). Typical values include C<test -h> and
+C<test -L>.
+
+=item C<ivdformat>
+
+From F<perlxvf.U>:
+
+This variable contains the format string used for printing
+a Perl C<IV> as a signed decimal integer.
+
+=item C<ivsize>
+
+From F<perlxv.U>:
+
+This variable is the size of an C<IV> in bytes.
+
+=item C<ivtype>
+
+From F<perlxv.U>:
+
+This variable contains the C type used for Perl's C<IV>.
+
+=back
+
+=head2 k
+
+=over 4
+
+=item C<known_extensions>
+
+From F<Extensions.U>:
+
+This variable holds a list of all C<XS> extensions included in
+the package.
+
+=item C<ksh>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=back
+
+=head2 l
+
+=over 4
+
+=item C<ld>
+
+From F<dlsrc.U>:
+
+This variable indicates the program to be used to link
+libraries for dynamic loading. On some systems, it is C<ld>.
+On C<ELF> systems, it should be $cc. Mostly, we'll try to respect
+the hint file setting.
+
+=item C<lddlflags>
+
+From F<dlsrc.U>:
+
+This variable contains any special flags that might need to be
+passed to $ld to create a shared library suitable for dynamic
+loading. It is up to the makefile to use it. For hpux, it
+should be C<-b>. For sunos 4.1, it is empty.
+
+=item C<ldflags>
+
+From F<ccflags.U>:
+
+This variable contains any additional C loader flags desired by
+the user. It is up to the Makefile to use this.
+
+=item C<ldflags_uselargefiles>
+
+From F<uselfs.U>:
+
+This variable contains the loader flags needed by large file builds
+and added to ldflags by hints files.
+
+=item C<ldlibpthname>
+
+From F<libperl.U>:
+
+This variable holds the name of the shared library
+search path, often C<LD_LIBRARY_PATH>. To get an empty
+string, the hints file must set this to C<none>.
+
+=item C<less>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the less program. After Configure runs,
+the value is reset to a plain C<less> and is not useful.
+
+=item C<lib_ext>
+
+From F<Unix.U>:
+
+This is an old synonym for _a.
+
+=item C<libc>
+
+From F<libc.U>:
+
+This variable contains the location of the C library.
+
+=item C<libperl>
+
+From F<libperl.U>:
+
+The perl executable is obtained by linking F<perlmain.c> with
+libperl, any static extensions (usually just DynaLoader),
+and any other libraries needed on this system. libperl
+is usually F<libperl.a>, but can also be F<libperl.so.xxx> if
+the user wishes to build a perl executable with a shared
+library.
+
+=item C<libpth>
+
+From F<libpth.U>:
+
+This variable holds the general path (space-separated) used to find
+libraries. It is intended to be used by other units.
+
+=item C<libs>
+
+From F<libs.U>:
+
+This variable holds the additional libraries we want to use.
+It is up to the Makefile to deal with it. The list can be empty.
+
+=item C<libsdirs>
+
+From F<libs.U>:
+
+This variable holds the directory names aka dirnames of the libraries
+we found and accepted, duplicates are removed.
+
+=item C<libsfiles>
+
+From F<libs.U>:
+
+This variable holds the filenames aka basenames of the libraries
+we found and accepted.
+
+=item C<libsfound>
+
+From F<libs.U>:
+
+This variable holds the full pathnames of the libraries
+we found and accepted.
+
+=item C<libspath>
+
+From F<libs.U>:
+
+This variable holds the directory names probed for libraries.
+
+=item C<libswanted>
+
+From F<Myinit.U>:
+
+This variable holds a list of all the libraries we want to
+search. The order is chosen to pick up the c library
+ahead of ucb or bsd libraries for SVR4.
+
+=item C<libswanted_uselargefiles>
+
+From F<uselfs.U>:
+
+This variable contains the libraries needed by large file builds
+and added to ldflags by hints files. It is a space separated list
+of the library names without the C<lib> prefix or any suffix, just
+like F<libswanted.>.
+
+=item C<line>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<lint>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<lkflags>
+
+From F<ccflags.U>:
+
+This variable contains any additional C partial linker flags desired by
+the user. It is up to the Makefile to use this.
+
+=item C<ln>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the ln program. After Configure runs,
+the value is reset to a plain C<ln> and is not useful.
+
+=item C<lns>
+
+From F<lns.U>:
+
+This variable holds the name of the command to make
+symbolic links (if they are supported). It can be used
+in the Makefile. It is either C<ln -s> or C<ln>
+
+=item C<localtime_r_proto>
+
+From F<d_localtime_r.U>:
+
+This variable encodes the prototype of localtime_r.
+It is zero if d_localtime_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_localtime_r
+is defined.
+
+=item C<locincpth>
+
+From F<ccflags.U>:
+
+This variable contains a list of additional directories to be
+searched by the compiler. The appropriate C<-I> directives will
+be added to ccflags. This is intended to simplify setting
+local directories from the Configure command line.
+It's not much, but it parallels the loclibpth stuff in F<libpth.U>.
+
+=item C<loclibpth>
+
+From F<libpth.U>:
+
+This variable holds the paths (space-separated) used to find local
+libraries. It is prepended to libpth, and is intended to be easily
+set from the command line.
+
+=item C<longdblsize>
+
+From F<d_longdbl.U>:
+
+This variable contains the value of the C<LONG_DOUBLESIZE> symbol, which
+indicates to the C program how many bytes there are in a long double,
+if this system supports long doubles.
+
+=item C<longlongsize>
+
+From F<d_longlong.U>:
+
+This variable contains the value of the C<LONGLONGSIZE> symbol, which
+indicates to the C program how many bytes there are in a long long,
+if this system supports long long.
+
+=item C<longsize>
+
+From F<intsize.U>:
+
+This variable contains the value of the C<LONGSIZE> symbol, which
+indicates to the C program how many bytes there are in a long.
+
+=item C<lp>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<lpr>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<ls>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the ls program. After Configure runs,
+the value is reset to a plain C<ls> and is not useful.
+
+=item C<lseeksize>
+
+From F<lseektype.U>:
+
+This variable defines lseektype to be something like off_t, long,
+or whatever type is used to declare lseek offset's type in the
+kernel (which also appears to be lseek's return type).
+
+=item C<lseektype>
+
+From F<lseektype.U>:
+
+This variable defines lseektype to be something like off_t, long,
+or whatever type is used to declare lseek offset's type in the
+kernel (which also appears to be lseek's return type).
+
+=back
+
+=head2 m
+
+=over 4
+
+=item C<mail>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<mailx>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<make>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the make program. After Configure runs,
+the value is reset to a plain C<make> and is not useful.
+
+=item C<make_set_make>
+
+From F<make.U>:
+
+Some versions of C<make> set the variable C<MAKE>. Others do not.
+This variable contains the string to be included in F<Makefile.SH>
+so that C<MAKE> is set if needed, and not if not needed.
+Possible values are:
+make_set_make=C<#> # If your make program handles this for you,
+make_set_make=C<MAKE=$make> # if it doesn't.
+I used a comment character so that we can distinguish a
+C<set> value (from a previous F<config.sh> or Configure C<-D> option)
+from an uncomputed value.
+
+=item C<mallocobj>
+
+From F<mallocsrc.U>:
+
+This variable contains the name of the F<malloc.o> that this package
+generates, if that F<malloc.o> is preferred over the system malloc.
+Otherwise the value is null. This variable is intended for generating
+Makefiles. See mallocsrc.
+
+=item C<mallocsrc>
+
+From F<mallocsrc.U>:
+
+This variable contains the name of the F<malloc.c> that comes with
+the package, if that F<malloc.c> is preferred over the system malloc.
+Otherwise the value is null. This variable is intended for generating
+Makefiles.
+
+=item C<malloctype>
+
+From F<mallocsrc.U>:
+
+This variable contains the kind of ptr returned by malloc and realloc.
+
+=item C<man1dir>
+
+From F<man1dir.U>:
+
+This variable contains the name of the directory in which manual
+source pages are to be put. It is the responsibility of the
+F<Makefile.SH> to get the value of this into the proper command.
+You must be prepared to do the F<~name> expansion yourself.
+
+=item C<man1direxp>
+
+From F<man1dir.U>:
+
+This variable is the same as the man1dir variable, but is filename
+expanded at configuration time, for convenient use in makefiles.
+
+=item C<man1ext>
+
+From F<man1dir.U>:
+
+This variable contains the extension that the manual page should
+have: one of C<n>, C<l>, or C<1>. The Makefile must supply the F<.>.
+See man1dir.
+
+=item C<man3dir>
+
+From F<man3dir.U>:
+
+This variable contains the name of the directory in which manual
+source pages are to be put. It is the responsibility of the
+F<Makefile.SH> to get the value of this into the proper command.
+You must be prepared to do the F<~name> expansion yourself.
+
+=item C<man3direxp>
+
+From F<man3dir.U>:
+
+This variable is the same as the man3dir variable, but is filename
+expanded at configuration time, for convenient use in makefiles.
+
+=item C<man3ext>
+
+From F<man3dir.U>:
+
+This variable contains the extension that the manual page should
+have: one of C<n>, C<l>, or C<3>. The Makefile must supply the F<.>.
+See man3dir.
+
+=back
+
+=head2 M
+
+=over 4
+
+=item C<Mcc>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the Mcc program. After Configure runs,
+the value is reset to a plain C<Mcc> and is not useful.
+
+=item C<mips_type>
+
+From F<usrinc.U>:
+
+This variable holds the environment type for the mips system.
+Possible values are "BSD 4.3" and "System V".
+
+=item C<mkdir>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the mkdir program. After Configure runs,
+the value is reset to a plain C<mkdir> and is not useful.
+
+=item C<mmaptype>
+
+From F<d_mmap.U>:
+
+This symbol contains the type of pointer returned by mmap()
+(and simultaneously the type of the first argument).
+It can be C<void *> or C<caddr_t>.
+
+=item C<modetype>
+
+From F<modetype.U>:
+
+This variable defines modetype to be something like mode_t,
+int, unsigned short, or whatever type is used to declare file
+modes for system calls.
+
+=item C<more>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the more program. After Configure runs,
+the value is reset to a plain C<more> and is not useful.
+
+=item C<multiarch>
+
+From F<multiarch.U>:
+
+This variable conditionally defines the C<MULTIARCH> symbol
+which signifies the presence of multiplatform files.
+This is normally set by hints files.
+
+=item C<mv>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<myarchname>
+
+From F<archname.U>:
+
+This variable holds the architecture name computed by Configure in
+a previous run. It is not intended to be perused by any user and
+should never be set in a hint file.
+
+=item C<mydomain>
+
+From F<myhostname.U>:
+
+This variable contains the eventual value of the C<MYDOMAIN> symbol,
+which is the domain of the host the program is going to run on.
+The domain must be appended to myhostname to form a complete host name.
+The dot comes with mydomain, and need not be supplied by the program.
+
+=item C<myhostname>
+
+From F<myhostname.U>:
+
+This variable contains the eventual value of the C<MYHOSTNAME> symbol,
+which is the name of the host the program is going to run on.
+The domain is not kept with hostname, but must be gotten from mydomain.
+The dot comes with mydomain, and need not be supplied by the program.
+
+=item C<myuname>
+
+From F<Oldconfig.U>:
+
+The output of C<uname -a> if available, otherwise the hostname. On Xenix,
+pseudo variables assignments in the output are stripped, thank you. The
+whole thing is then lower-cased.
+
+=back
+
+=head2 n
+
+=over 4
+
+=item C<n>
+
+From F<n.U>:
+
+This variable contains the C<-n> flag if that is what causes the echo
+command to suppress newline. Otherwise it is null. Correct usage is
+$echo $n "prompt for a question: $c".
+
+=item C<need_va_copy>
+
+From F<need_va_copy.U>:
+
+This symbol, if defined, indicates that the system stores
+the variable argument list datatype, va_list, in a format
+that cannot be copied by simple assignment, so that some
+other means must be used when copying is required.
+As such systems vary in their provision (or non-provision)
+of copying mechanisms, F<handy.h> defines a platform-
+C<independent> macro, Perl_va_copy(src, dst), to do the job.
+
+=item C<netdb_hlen_type>
+
+From F<netdbtype.U>:
+
+This variable holds the type used for the 2nd argument to
+gethostbyaddr(). Usually, this is int or size_t or unsigned.
+This is only useful if you have gethostbyaddr(), naturally.
+
+=item C<netdb_host_type>
+
+From F<netdbtype.U>:
+
+This variable holds the type used for the 1st argument to
+gethostbyaddr(). Usually, this is char * or void *, possibly
+with or without a const prefix.
+This is only useful if you have gethostbyaddr(), naturally.
+
+=item C<netdb_name_type>
+
+From F<netdbtype.U>:
+
+This variable holds the type used for the argument to
+gethostbyname(). Usually, this is char * or const char *.
+This is only useful if you have gethostbyname(), naturally.
+
+=item C<netdb_net_type>
+
+From F<netdbtype.U>:
+
+This variable holds the type used for the 1st argument to
+getnetbyaddr(). Usually, this is int or long.
+This is only useful if you have getnetbyaddr(), naturally.
+
+=item C<nm>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the nm program. After Configure runs,
+the value is reset to a plain C<nm> and is not useful.
+
+=item C<nm_opt>
+
+From F<usenm.U>:
+
+This variable holds the options that may be necessary for nm.
+
+=item C<nm_so_opt>
+
+From F<usenm.U>:
+
+This variable holds the options that may be necessary for nm
+to work on a shared library but that can not be used on an
+archive library. Currently, this is only used by Linux, where
+nm --dynamic is *required* to get symbols from an C<ELF> library which
+has been stripped, but nm --dynamic is *fatal* on an archive library.
+Maybe Linux should just always set usenm=false.
+
+=item C<nonxs_ext>
+
+From F<Extensions.U>:
+
+This variable holds a list of all non-xs extensions included
+in the package. All of them will be built.
+
+=item C<nroff>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the nroff program. After Configure runs,
+the value is reset to a plain C<nroff> and is not useful.
+
+=item C<nv_preserves_uv_bits>
+
+From F<perlxv.U>:
+
+This variable indicates how many of bits type uvtype
+a variable nvtype can preserve.
+
+=item C<nveformat>
+
+From F<perlxvf.U>:
+
+This variable contains the format string used for printing
+a Perl C<NV> using %e-ish floating point format.
+
+=item C<nvEUformat>
+
+From F<perlxvf.U>:
+
+This variable contains the format string used for printing
+a Perl C<NV> using %E-ish floating point format.
+
+=item C<nvfformat>
+
+From F<perlxvf.U>:
+
+This variable confains the format string used for printing
+a Perl C<NV> using %f-ish floating point format.
+
+=item C<nvFUformat>
+
+From F<perlxvf.U>:
+
+This variable confains the format string used for printing
+a Perl C<NV> using %F-ish floating point format.
+
+=item C<nvgformat>
+
+From F<perlxvf.U>:
+
+This variable contains the format string used for printing
+a Perl C<NV> using %g-ish floating point format.
+
+=item C<nvGUformat>
+
+From F<perlxvf.U>:
+
+This variable contains the format string used for printing
+a Perl C<NV> using %G-ish floating point format.
+
+=item C<nvsize>
+
+From F<perlxv.U>:
+
+This variable is the size of an C<NV> in bytes.
+
+=item C<nvtype>
+
+From F<perlxv.U>:
+
+This variable contains the C type used for Perl's C<NV>.
+
+=back
+
+=head2 o
+
+=over 4
+
+=item C<o_nonblock>
+
+From F<nblock_io.U>:
+
+This variable bears the symbol value to be used during open() or fcntl()
+to turn on non-blocking I/O for a file descriptor. If you wish to switch
+between blocking and non-blocking, you may try ioctl(C<FIOSNBIO>) instead,
+but that is only supported by some devices.
+
+=item C<obj_ext>
+
+From F<Unix.U>:
+
+This is an old synonym for _o.
+
+=item C<old_pthread_create_joinable>
+
+From F<d_pthrattrj.U>:
+
+This variable defines the constant to use for creating joinable
+(aka undetached) pthreads. Unused if F<pthread.h> defines
+C<PTHREAD_CREATE_JOINABLE>. If used, possible values are
+C<PTHREAD_CREATE_UNDETACHED> and C<__UNDETACHED>.
+
+=item C<optimize>
+
+From F<ccflags.U>:
+
+This variable contains any F<optimizer/debugger> flag that should be used.
+It is up to the Makefile to use it.
+
+=item C<orderlib>
+
+From F<orderlib.U>:
+
+This variable is C<true> if the components of libraries must be ordered
+(with `lorder $* | tsort`) before placing them in an archive. Set to
+C<false> if ranlib or ar can generate random libraries.
+
+=item C<osname>
+
+From F<Oldconfig.U>:
+
+This variable contains the operating system name (e.g. sunos,
+solaris, hpux, etc.). It can be useful later on for setting
+defaults. Any spaces are replaced with underscores. It is set
+to a null string if we can't figure it out.
+
+=item C<osvers>
+
+From F<Oldconfig.U>:
+
+This variable contains the operating system version (e.g.
+4.1.3, 5.2, etc.). It is primarily used for helping select
+an appropriate hints file, but might be useful elsewhere for
+setting defaults. It is set to '' if we can't figure it out.
+We try to be flexible about how much of the version number
+to keep, e.g. if 4.1.1, 4.1.2, and 4.1.3 are essentially the
+same for this package, hints files might just be F<os_4.0> or
+F<os_4.1>, etc., not keeping separate files for each little release.
+
+=item C<otherlibdirs>
+
+From F<otherlibdirs.U>:
+
+This variable contains a colon-separated set of paths for the perl
+binary to search for additional library files or modules.
+These directories will be tacked to the end of @C<INC>.
+Perl will automatically search below each path for version-
+and architecture-specific directories. See inc_version_list
+for more details.
+A value of C< > means C<none> and is used to preserve this value
+for the next run through Configure.
+
+=back
+
+=head2 p
+
+=over 4
+
+=item C<package>
+
+From F<package.U>:
+
+This variable contains the name of the package being constructed.
+It is primarily intended for the use of later Configure units.
+
+=item C<pager>
+
+From F<pager.U>:
+
+This variable contains the name of the preferred pager on the system.
+Usual values are (the full pathnames of) more, less, pg, or cat.
+
+=item C<passcat>
+
+From F<nis.U>:
+
+This variable contains a command that produces the text of the
+F</etc/passwd> file. This is normally "cat F</etc/passwd>", but can be
+"ypcat passwd" when C<NIS> is used.
+On some systems, such as os390, there may be no equivalent
+command, in which case this variable is unset.
+
+=item C<patchlevel>
+
+From F<patchlevel.U>:
+
+The patchlevel level of this package.
+The value of patchlevel comes from the F<patchlevel.h> file.
+In a version number such as 5.6.1, this is the C<6>.
+In F<patchlevel.h>, this is referred to as C<PERL_VERSION>.
+
+=item C<path_sep>
+
+From F<Unix.U>:
+
+This is an old synonym for p_ in F<Head.U>, the character
+used to separate elements in the command shell search C<PATH>.
+
+=item C<perl5>
+
+From F<perl5.U>:
+
+This variable contains the full path (if any) to a previously
+installed F<perl5.005> or later suitable for running the script
+to determine inc_version_list.
+
+=item C<perl>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<perl_patchlevel>
+
+From F<patchlevel.U>:
+
+This is the Perl patch level, a numeric change identifier,
+as defined by whichever source code maintenance system
+is used to maintain the patches; currently Perforce.
+It does not correlate with the Perl version numbers or
+the maintenance versus development dichotomy except
+by also being increasing.
+
+=back
+
+=head2 P
+
+=over 4
+
+=item C<PERL_REVISION>
+
+From F<Oldsyms.U>:
+
+In a Perl version number such as 5.6.2, this is the 5.
+This value is manually set in F<patchlevel.h>
+
+=item C<PERL_SUBVERSION>
+
+From F<Oldsyms.U>:
+
+In a Perl version number such as 5.6.2, this is the 2.
+Values greater than 50 represent potentially unstable
+development subversions.
+This value is manually set in F<patchlevel.h>
+
+=item C<PERL_VERSION>
+
+From F<Oldsyms.U>:
+
+In a Perl version number such as 5.6.2, this is the 6.
+This value is manually set in F<patchlevel.h>
+
+=item C<perladmin>
+
+From F<perladmin.U>:
+
+Electronic mail address of the perl5 administrator.
+
+=item C<perllibs>
+
+From F<End.U>:
+
+The list of libraries needed by Perl only (any libraries needed
+by extensions only will by dropped, if using dynamic loading).
+
+=item C<perlpath>
+
+From F<perlpath.U>:
+
+This variable contains the eventual value of the C<PERLPATH> symbol,
+which contains the name of the perl interpreter to be used in
+shell scripts and in the "eval C<exec>" idiom. This variable is
+not necessarily the pathname of the file containing the perl
+interpreter; you must append the executable extension (_exe) if
+it is not already present. Note that Perl code that runs during
+the Perl build process cannot reference this variable, as Perl
+may not have been installed, or even if installed, may be a
+different version of Perl.
+
+=item C<pg>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the pg program. After Configure runs,
+the value is reset to a plain C<pg> and is not useful.
+
+=item C<phostname>
+
+From F<myhostname.U>:
+
+This variable contains the eventual value of the C<PHOSTNAME> symbol,
+which is a command that can be fed to popen() to get the host name.
+The program should probably not presume that the domain is or isn't
+there already.
+
+=item C<pidtype>
+
+From F<pidtype.U>:
+
+This variable defines C<PIDTYPE> to be something like pid_t, int,
+ushort, or whatever type is used to declare process ids in the kernel.
+
+=item C<plibpth>
+
+From F<libpth.U>:
+
+Holds the private path used by Configure to find out the libraries.
+Its value is prepend to libpth. This variable takes care of special
+machines, like the mips. Usually, it should be empty.
+
+=item C<pm_apiversion>
+
+From F<xs_apiversion.U>:
+
+This variable contains the version of the oldest perl
+compatible with the present perl. (That is, pure perl modules
+written for $pm_apiversion will still work for the current
+version). F<perl.c>:incpush() and F<lib/lib.pm> will automatically
+search in $sitelib for older directories across major versions
+back to pm_apiversion. This is only useful if you have a perl
+library directory tree structured like the default one. The
+versioned site_perl library was introduced in 5.005, so that's
+the default setting for this variable. It's hard to imagine
+it changing before Perl6. It is included here for symmetry
+with xs_apiveprsion -- the searching algorithms will
+(presumably) be similar.
+See the C<INSTALL> file for how this works.
+
+=item C<pmake>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<pr>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<prefix>
+
+From F<prefix.U>:
+
+This variable holds the name of the directory below which the
+user will install the package. Usually, this is F</usr/local>, and
+executables go in F</usr/local/bin>, library stuff in F</usr/local/lib>,
+man pages in F</usr/local/man>, etc. It is only used to set defaults
+for things in F<bin.U>, F<mansrc.U>, F<privlib.U>, or F<scriptdir.U>.
+
+=item C<prefixexp>
+
+From F<prefix.U>:
+
+This variable holds the full absolute path of the directory below
+which the user will install the package. Derived from prefix.
+
+=item C<privlib>
+
+From F<privlib.U>:
+
+This variable contains the eventual value of the C<PRIVLIB> symbol,
+which is the name of the private library for this package. It may
+have a F<~> on the front. It is up to the makefile to eventually create
+this directory while performing installation (with F<~> substitution).
+
+=item C<privlibexp>
+
+From F<privlib.U>:
+
+This variable is the F<~name> expanded version of privlib, so that you
+may use it directly in Makefiles or shell scripts.
+
+=item C<procselfexe>
+
+From F<d_procselfexe.U>:
+
+If d_procselfexe is defined, $procselfexe is the filename
+of the symbolic link pointing to the absolute pathname of
+the executing program.
+
+=item C<prototype>
+
+From F<prototype.U>:
+
+This variable holds the eventual value of C<CAN_PROTOTYPE>, which
+indicates the C compiler can handle funciton prototypes.
+
+=item C<ptrsize>
+
+From F<ptrsize.U>:
+
+This variable contains the value of the C<PTRSIZE> symbol, which
+indicates to the C program how many bytes there are in a pointer.
+
+=back
+
+=head2 q
+
+=over 4
+
+=item C<quadkind>
+
+From F<quadtype.U>:
+
+This variable, if defined, encodes the type of a quad:
+1 = int, 2 = long, 3 = long long, 4 = int64_t.
+
+=item C<quadtype>
+
+From F<quadtype.U>:
+
+This variable defines Quad_t to be something like long, int,
+long long, int64_t, or whatever type is used for 64-bit integers.
+
+=back
+
+=head2 r
+
+=over 4
+
+=item C<randbits>
+
+From F<randfunc.U>:
+
+Indicates how many bits are produced by the function used to
+generate normalized random numbers.
+
+=item C<randfunc>
+
+From F<randfunc.U>:
+
+Indicates the name of the random number function to use.
+Values include drand48, random, and rand. In C programs,
+the C<Drand01> macro is defined to generate uniformly distributed
+random numbers over the range [0., 1.[ (see drand01 and nrand).
+
+=item C<random_r_proto>
+
+From F<d_random_r.U>:
+
+This variable encodes the prototype of random_r.
+It is zero if d_random_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_random_r
+is defined.
+
+=item C<randseedtype>
+
+From F<randfunc.U>:
+
+Indicates the type of the argument of the seedfunc.
+
+=item C<ranlib>
+
+From F<orderlib.U>:
+
+This variable is set to the pathname of the ranlib program, if it is
+needed to generate random libraries. Set to C<:> if ar can generate
+random libraries or if random libraries are not supported
+
+=item C<rd_nodata>
+
+From F<nblock_io.U>:
+
+This variable holds the return code from read() when no data is
+present. It should be -1, but some systems return 0 when C<O_NDELAY> is
+used, which is a shame because you cannot make the difference between
+no data and an F<EOF.>. Sigh!
+
+=item C<readdir64_r_proto>
+
+From F<d_readdir64_r.U>:
+
+This variable encodes the prototype of readdir64_r.
+It is zero if d_readdir64_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_readdir64_r
+is defined.
+
+=item C<readdir_r_proto>
+
+From F<d_readdir_r.U>:
+
+This variable encodes the prototype of readdir_r.
+It is zero if d_readdir_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_readdir_r
+is defined.
+
+=item C<revision>
+
+From F<patchlevel.U>:
+
+The value of revision comes from the F<patchlevel.h> file.
+In a version number such as 5.6.1, this is the C<5>.
+In F<patchlevel.h>, this is referred to as C<PERL_REVISION>.
+
+=item C<rm>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the rm program. After Configure runs,
+the value is reset to a plain C<rm> and is not useful.
+
+=item C<rmail>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<run>
+
+From F<Cross.U>:
+
+This variable contains the command used by Configure
+to copy and execute a cross-compiled executable in the
+target host. Useful and available only during Perl build.
+Empty string '' if not cross-compiling.
+
+=item C<runnm>
+
+From F<usenm.U>:
+
+This variable contains C<true> or C<false> depending whether the
+nm extraction should be performed or not, according to the value
+of usenm and the flags on the Configure command line.
+
+=back
+
+=head2 s
+
+=over 4
+
+=item C<sched_yield>
+
+From F<d_pthread_y.U>:
+
+This variable defines the way to yield the execution
+of the current thread.
+
+=item C<scriptdir>
+
+From F<scriptdir.U>:
+
+This variable holds the name of the directory in which the user wants
+to put publicly scripts for the package in question. It is either
+the same directory as for binaries, or a special one that can be
+mounted across different architectures, like F</usr/share>. Programs
+must be prepared to deal with F<~name> expansion.
+
+=item C<scriptdirexp>
+
+From F<scriptdir.U>:
+
+This variable is the same as scriptdir, but is filename expanded
+at configuration time, for programs not wanting to bother with it.
+
+=item C<sed>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the sed program. After Configure runs,
+the value is reset to a plain C<sed> and is not useful.
+
+=item C<seedfunc>
+
+From F<randfunc.U>:
+
+Indicates the random number generating seed function.
+Values include srand48, srandom, and srand.
+
+=item C<selectminbits>
+
+From F<selectminbits.U>:
+
+This variable holds the minimum number of bits operated by select.
+That is, if you do select(n, ...), how many bits at least will be
+cleared in the masks if some activity is detected. Usually this
+is either n or 32*ceil(F<n/32>), especially many little-endians do
+the latter. This is only useful if you have select(), naturally.
+
+=item C<selecttype>
+
+From F<selecttype.U>:
+
+This variable holds the type used for the 2nd, 3rd, and 4th
+arguments to select. Usually, this is C<fd_set *>, if C<HAS_FD_SET>
+is defined, and C<int *> otherwise. This is only useful if you
+have select(), naturally.
+
+=item C<sendmail>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<setgrent_r_proto>
+
+From F<d_setgrent_r.U>:
+
+This variable encodes the prototype of setgrent_r.
+It is zero if d_setgrent_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_setgrent_r
+is defined.
+
+=item C<sethostent_r_proto>
+
+From F<d_sethostent_r.U>:
+
+This variable encodes the prototype of sethostent_r.
+It is zero if d_sethostent_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_sethostent_r
+is defined.
+
+=item C<setlocale_r_proto>
+
+From F<d_setlocale_r.U>:
+
+This variable encodes the prototype of setlocale_r.
+It is zero if d_setlocale_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_setlocale_r
+is defined.
+
+=item C<setnetent_r_proto>
+
+From F<d_setnetent_r.U>:
+
+This variable encodes the prototype of setnetent_r.
+It is zero if d_setnetent_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_setnetent_r
+is defined.
+
+=item C<setprotoent_r_proto>
+
+From F<d_setprotoent_r.U>:
+
+This variable encodes the prototype of setprotoent_r.
+It is zero if d_setprotoent_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_setprotoent_r
+is defined.
+
+=item C<setpwent_r_proto>
+
+From F<d_setpwent_r.U>:
+
+This variable encodes the prototype of setpwent_r.
+It is zero if d_setpwent_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_setpwent_r
+is defined.
+
+=item C<setservent_r_proto>
+
+From F<d_setservent_r.U>:
+
+This variable encodes the prototype of setservent_r.
+It is zero if d_setservent_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_setservent_r
+is defined.
+
+=item C<sh>
+
+From F<sh.U>:
+
+This variable contains the full pathname of the shell used
+on this system to execute Bourne shell scripts. Usually, this will be
+F</bin/sh>, though it's possible that some systems will have F</bin/ksh>,
+F</bin/pdksh>, F</bin/ash>, F</bin/bash>, or even something such as
+D:F</bin/sh.exe>.
+This unit comes before F<Options.U>, so you can't set sh with a C<-D>
+option, though you can override this (and startsh)
+with C<-O -Dsh=F</bin/whatever> -Dstartsh=whatever>
+
+=item C<shar>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<sharpbang>
+
+From F<spitshell.U>:
+
+This variable contains the string #! if this system supports that
+construct.
+
+=item C<shmattype>
+
+From F<d_shmat.U>:
+
+This symbol contains the type of pointer returned by shmat().
+It can be C<void *> or C<char *>.
+
+=item C<shortsize>
+
+From F<intsize.U>:
+
+This variable contains the value of the C<SHORTSIZE> symbol which
+indicates to the C program how many bytes there are in a short.
+
+=item C<shrpenv>
+
+From F<libperl.U>:
+
+If the user builds a shared F<libperl.so>, then we need to tell the
+C<perl> executable where it will be able to find the installed F<libperl.so>.
+One way to do this on some systems is to set the environment variable
+C<LD_RUN_PATH> to the directory that will be the final location of the
+shared F<libperl.so>. The makefile can use this with something like
+$shrpenv $(C<CC>) -o perl F<perlmain.o> $libperl $libs
+Typical values are
+shrpenv="env C<LD_RUN_PATH>=F<$archlibexp/C<CORE>>"
+or
+shrpenv=''
+See the main perl F<Makefile.SH> for actual working usage.
+Alternatively, we might be able to use a command line option such
+as -R F<$archlibexp/C<CORE>> (Solaris) or -Wl,-rpath
+F<$archlibexp/C<CORE>> (Linux).
+
+=item C<shsharp>
+
+From F<spitshell.U>:
+
+This variable tells further Configure units whether your sh can
+handle # comments.
+
+=item C<sig_count>
+
+From F<sig_name.U>:
+
+This variable holds a number larger than the largest valid
+signal number. This is usually the same as the C<NSIG> macro.
+
+=item C<sig_name>
+
+From F<sig_name.U>:
+
+This variable holds the signal names, space separated. The leading
+C<SIG> in signal name is removed. A C<ZERO> is prepended to the
+list. This is currently not used.
+
+=item C<sig_name_init>
+
+From F<sig_name.U>:
+
+This variable holds the signal names, enclosed in double quotes and
+separated by commas, suitable for use in the C<SIG_NAME> definition
+below. A C<ZERO> is prepended to the list, and the list is
+terminated with a plain 0. The leading C<SIG> in signal names
+is removed. See sig_num.
+
+=item C<sig_num>
+
+From F<sig_name.U>:
+
+This variable holds the signal numbers, space separated. A C<ZERO> is
+prepended to the list (corresponding to the fake C<SIGZERO>), and
+the list is terminated with a 0. Those numbers correspond to
+the value of the signal listed in the same place within the
+sig_name list.
+
+=item C<sig_num_init>
+
+From F<sig_name.U>:
+
+This variable holds the signal numbers, enclosed in double quotes and
+separated by commas, suitable for use in the C<SIG_NUM> definition
+below. A C<ZERO> is prepended to the list, and the list is
+terminated with a plain 0.
+
+=item C<sig_size>
+
+From F<sig_name.U>:
+
+This variable contains the number of elements of the sig_name
+and sig_num arrays, excluding the final C<NULL> entry.
+
+=item C<signal_t>
+
+From F<d_voidsig.U>:
+
+This variable holds the type of the signal handler (void or int).
+
+=item C<sitearch>
+
+From F<sitearch.U>:
+
+This variable contains the eventual value of the C<SITEARCH> symbol,
+which is the name of the private library for this package. It may
+have a F<~> on the front. It is up to the makefile to eventually create
+this directory while performing installation (with F<~> substitution).
+The standard distribution will put nothing in this directory.
+After perl has been installed, users may install their own local
+architecture-dependent modules in this directory with
+MakeMaker F<Makefile.PL>
+or equivalent. See C<INSTALL> for details.
+
+=item C<sitearchexp>
+
+From F<sitearch.U>:
+
+This variable is the F<~name> expanded version of sitearch, so that you
+may use it directly in Makefiles or shell scripts.
+
+=item C<sitebin>
+
+From F<sitebin.U>:
+
+This variable holds the name of the directory in which the user wants
+to put add-on publicly executable files for the package in question. It
+is most often a local directory such as F</usr/local/bin>. Programs using
+this variable must be prepared to deal with F<~name> substitution.
+The standard distribution will put nothing in this directory.
+After perl has been installed, users may install their own local
+executables in this directory with
+MakeMaker F<Makefile.PL>
+or equivalent. See C<INSTALL> for details.
+
+=item C<sitebinexp>
+
+From F<sitebin.U>:
+
+This is the same as the sitebin variable, but is filename expanded at
+configuration time, for use in your makefiles.
+
+=item C<sitelib>
+
+From F<sitelib.U>:
+
+This variable contains the eventual value of the C<SITELIB> symbol,
+which is the name of the private library for this package. It may
+have a F<~> on the front. It is up to the makefile to eventually create
+this directory while performing installation (with F<~> substitution).
+The standard distribution will put nothing in this directory.
+After perl has been installed, users may install their own local
+architecture-independent modules in this directory with
+MakeMaker F<Makefile.PL>
+or equivalent. See C<INSTALL> for details.
+
+=item C<sitelib_stem>
+
+From F<sitelib.U>:
+
+This variable is $sitelibexp with any trailing version-specific component
+removed. The elements in inc_version_list (F<inc_version_list.U>) can
+be tacked onto this variable to generate a list of directories to search.
+
+=item C<sitelibexp>
+
+From F<sitelib.U>:
+
+This variable is the F<~name> expanded version of sitelib, so that you
+may use it directly in Makefiles or shell scripts.
+
+=item C<siteprefix>
+
+From F<siteprefix.U>:
+
+This variable holds the full absolute path of the directory below
+which the user will install add-on packages.
+See C<INSTALL> for usage and examples.
+
+=item C<siteprefixexp>
+
+From F<siteprefix.U>:
+
+This variable holds the full absolute path of the directory below
+which the user will install add-on packages. Derived from siteprefix.
+
+=item C<sizesize>
+
+From F<sizesize.U>:
+
+This variable contains the size of a sizetype in bytes.
+
+=item C<sizetype>
+
+From F<sizetype.U>:
+
+This variable defines sizetype to be something like size_t,
+unsigned long, or whatever type is used to declare length
+parameters for string functions.
+
+=item C<sleep>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<smail>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<so>
+
+From F<so.U>:
+
+This variable holds the extension used to identify shared libraries
+(also known as shared objects) on the system. Usually set to C<so>.
+
+=item C<sockethdr>
+
+From F<d_socket.U>:
+
+This variable has any cpp C<-I> flags needed for socket support.
+
+=item C<socketlib>
+
+From F<d_socket.U>:
+
+This variable has the names of any libraries needed for socket support.
+
+=item C<socksizetype>
+
+From F<socksizetype.U>:
+
+This variable holds the type used for the size argument
+for various socket calls like accept. Usual values include
+socklen_t, size_t, and int.
+
+=item C<sort>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the sort program. After Configure runs,
+the value is reset to a plain C<sort> and is not useful.
+
+=item C<spackage>
+
+From F<package.U>:
+
+This variable contains the name of the package being constructed,
+with the first letter uppercased, F<i.e>. suitable for starting
+sentences.
+
+=item C<spitshell>
+
+From F<spitshell.U>:
+
+This variable contains the command necessary to spit out a runnable
+shell on this system. It is either cat or a grep C<-v> for # comments.
+
+=item C<sPRId64>
+
+From F<quadfio.U>:
+
+This variable, if defined, contains the string used by stdio to
+format 64-bit decimal numbers (format C<d>) for output.
+
+=item C<sPRIeldbl>
+
+From F<longdblfio.U>:
+
+This variable, if defined, contains the string used by stdio to
+format long doubles (format C<e>) for output.
+
+=item C<sPRIEUldbl>
+
+From F<longdblfio.U>:
+
+This variable, if defined, contains the string used by stdio to
+format long doubles (format C<E>) for output.
+The C<U> in the name is to separate this from sPRIeldbl so that even
+case-blind systems can see the difference.
+
+=item C<sPRIfldbl>
+
+From F<longdblfio.U>:
+
+This variable, if defined, contains the string used by stdio to
+format long doubles (format C<f>) for output.
+
+=item C<sPRIFUldbl>
+
+From F<longdblfio.U>:
+
+This variable, if defined, contains the string used by stdio to
+format long doubles (format C<F>) for output.
+The C<U> in the name is to separate this from sPRIfldbl so that even
+case-blind systems can see the difference.
+
+=item C<sPRIgldbl>
+
+From F<longdblfio.U>:
+
+This variable, if defined, contains the string used by stdio to
+format long doubles (format C<g>) for output.
+
+=item C<sPRIGUldbl>
+
+From F<longdblfio.U>:
+
+This variable, if defined, contains the string used by stdio to
+format long doubles (format C<G>) for output.
+The C<U> in the name is to separate this from sPRIgldbl so that even
+case-blind systems can see the difference.
+
+=item C<sPRIi64>
+
+From F<quadfio.U>:
+
+This variable, if defined, contains the string used by stdio to
+format 64-bit decimal numbers (format C<i>) for output.
+
+=item C<sPRIo64>
+
+From F<quadfio.U>:
+
+This variable, if defined, contains the string used by stdio to
+format 64-bit octal numbers (format C<o>) for output.
+
+=item C<sPRIu64>
+
+From F<quadfio.U>:
+
+This variable, if defined, contains the string used by stdio to
+format 64-bit unsigned decimal numbers (format C<u>) for output.
+
+=item C<sPRIx64>
+
+From F<quadfio.U>:
+
+This variable, if defined, contains the string used by stdio to
+format 64-bit hexadecimal numbers (format C<x>) for output.
+
+=item C<sPRIXU64>
+
+From F<quadfio.U>:
+
+This variable, if defined, contains the string used by stdio to
+format 64-bit hExADECimAl numbers (format C<X>) for output.
+The C<U> in the name is to separate this from sPRIx64 so that even
+case-blind systems can see the difference.
+
+=item C<srand48_r_proto>
+
+From F<d_srand48_r.U>:
+
+This variable encodes the prototype of srand48_r.
+It is zero if d_srand48_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_srand48_r
+is defined.
+
+=item C<srandom_r_proto>
+
+From F<d_srandom_r.U>:
+
+This variable encodes the prototype of srandom_r.
+It is zero if d_srandom_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_srandom_r
+is defined.
+
+=item C<src>
+
+From F<src.U>:
+
+This variable holds the path to the package source. It is up to
+the Makefile to use this variable and set C<VPATH> accordingly to
+find the sources remotely.
+
+=item C<sSCNfldbl>
+
+From F<longdblfio.U>:
+
+This variable, if defined, contains the string used by stdio to
+format long doubles (format C<f>) for input.
+
+=item C<ssizetype>
+
+From F<ssizetype.U>:
+
+This variable defines ssizetype to be something like ssize_t,
+long or int. It is used by functions that return a count
+of bytes or an error condition. It must be a signed type.
+We will pick a type such that sizeof(SSize_t) == sizeof(Size_t).
+
+=item C<startperl>
+
+From F<startperl.U>:
+
+This variable contains the string to put on the front of a perl
+script to make sure (hopefully) that it runs with perl and not some
+shell. Of course, that leading line must be followed by the classical
+perl idiom:
+eval 'exec perl -S $0 ${1+C<$@>}'
+if $running_under_some_shell;
+to guarantee perl startup should the shell execute the script. Note
+that this magic incatation is not understood by csh.
+
+=item C<startsh>
+
+From F<startsh.U>:
+
+This variable contains the string to put on the front of a shell
+script to make sure (hopefully) that it runs with sh and not some
+other shell.
+
+=item C<static_ext>
+
+From F<Extensions.U>:
+
+This variable holds a list of C<XS> extension files we want to
+link statically into the package. It is used by Makefile.
+
+=item C<stdchar>
+
+From F<stdchar.U>:
+
+This variable conditionally defines C<STDCHAR> to be the type of char
+used in F<stdio.h>. It has the values "unsigned char" or C<char>.
+
+=item C<stdio_base>
+
+From F<d_stdstdio.U>:
+
+This variable defines how, given a C<FILE> pointer, fp, to access the
+_base field (or equivalent) of F<stdio.h>'s C<FILE> structure. This will
+be used to define the macro FILE_base(fp).
+
+=item C<stdio_bufsiz>
+
+From F<d_stdstdio.U>:
+
+This variable defines how, given a C<FILE> pointer, fp, to determine
+the number of bytes store in the I/O buffer pointer to by the
+_base field (or equivalent) of F<stdio.h>'s C<FILE> structure. This will
+be used to define the macro FILE_bufsiz(fp).
+
+=item C<stdio_cnt>
+
+From F<d_stdstdio.U>:
+
+This variable defines how, given a C<FILE> pointer, fp, to access the
+_cnt field (or equivalent) of F<stdio.h>'s C<FILE> structure. This will
+be used to define the macro FILE_cnt(fp).
+
+=item C<stdio_filbuf>
+
+From F<d_stdstdio.U>:
+
+This variable defines how, given a C<FILE> pointer, fp, to tell
+stdio to refill its internal buffers (?). This will
+be used to define the macro FILE_filbuf(fp).
+
+=item C<stdio_ptr>
+
+From F<d_stdstdio.U>:
+
+This variable defines how, given a C<FILE> pointer, fp, to access the
+_ptr field (or equivalent) of F<stdio.h>'s C<FILE> structure. This will
+be used to define the macro FILE_ptr(fp).
+
+=item C<stdio_stream_array>
+
+From F<stdio_streams.U>:
+
+This variable tells the name of the array holding the stdio streams.
+Usual values include _iob, __iob, and __sF.
+
+=item C<strerror_r_proto>
+
+From F<d_strerror_r.U>:
+
+This variable encodes the prototype of strerror_r.
+It is zero if d_strerror_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_strerror_r
+is defined.
+
+=item C<strings>
+
+From F<i_string.U>:
+
+This variable holds the full path of the string header that will be
+used. Typically F</usr/include/string.h> or F</usr/include/strings.h>.
+
+=item C<submit>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<subversion>
+
+From F<patchlevel.U>:
+
+The subversion level of this package.
+The value of subversion comes from the F<patchlevel.h> file.
+In a version number such as 5.6.1, this is the C<1>.
+In F<patchlevel.h>, this is referred to as C<PERL_SUBVERSION>.
+This is unique to perl.
+
+=item C<sysman>
+
+From F<sysman.U>:
+
+This variable holds the place where the manual is located on this
+system. It is not the place where the user wants to put his manual
+pages. Rather it is the place where Configure may look to find manual
+for unix commands (section 1 of the manual usually). See mansrc.
+
+=back
+
+=head2 t
+
+=over 4
+
+=item C<tail>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<tar>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<targetarch>
+
+From F<Cross.U>:
+
+If cross-compiling, this variable contains the target architecture.
+If not, this will be empty.
+
+=item C<tbl>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<tee>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<test>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the test program. After Configure runs,
+the value is reset to a plain C<test> and is not useful.
+
+=item C<timeincl>
+
+From F<i_time.U>:
+
+This variable holds the full path of the included time header(s).
+
+=item C<timetype>
+
+From F<d_time.U>:
+
+This variable holds the type returned by time(). It can be long,
+or time_t on C<BSD> sites (in which case <sys/types.h> should be
+included). Anyway, the type Time_t should be used.
+
+=item C<tmpnam_r_proto>
+
+From F<d_tmpnam_r.U>:
+
+This variable encodes the prototype of tmpnam_r.
+It is zero if d_tmpnam_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_tmpnam_r
+is defined.
+
+=item C<to>
+
+From F<Cross.U>:
+
+This variable contains the command used by Configure
+to copy to from the target host. Useful and available
+only during Perl build.
+The string C<:> if not cross-compiling.
+
+=item C<touch>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the touch program. After Configure runs,
+the value is reset to a plain C<touch> and is not useful.
+
+=item C<tr>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the tr program. After Configure runs,
+the value is reset to a plain C<tr> and is not useful.
+
+=item C<trnl>
+
+From F<trnl.U>:
+
+This variable contains the value to be passed to the tr(1)
+command to transliterate a newline. Typical values are
+C<\012> and C<\n>. This is needed for C<EBCDIC> systems where
+newline is not necessarily C<\012>.
+
+=item C<troff>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<ttyname_r_proto>
+
+From F<d_ttyname_r.U>:
+
+This variable encodes the prototype of ttyname_r.
+It is zero if d_ttyname_r is undef, and one of the
+C<REENTRANT_PROTO_T_ABC> macros of F<reentr.h> if d_ttyname_r
+is defined.
+
+=back
+
+=head2 u
+
+=over 4
+
+=item C<u16size>
+
+From F<perlxv.U>:
+
+This variable is the size of an U16 in bytes.
+
+=item C<u16type>
+
+From F<perlxv.U>:
+
+This variable contains the C type used for Perl's U16.
+
+=item C<u32size>
+
+From F<perlxv.U>:
+
+This variable is the size of an U32 in bytes.
+
+=item C<u32type>
+
+From F<perlxv.U>:
+
+This variable contains the C type used for Perl's U32.
+
+=item C<u64size>
+
+From F<perlxv.U>:
+
+This variable is the size of an U64 in bytes.
+
+=item C<u64type>
+
+From F<perlxv.U>:
+
+This variable contains the C type used for Perl's U64.
+
+=item C<u8size>
+
+From F<perlxv.U>:
+
+This variable is the size of an U8 in bytes.
+
+=item C<u8type>
+
+From F<perlxv.U>:
+
+This variable contains the C type used for Perl's U8.
+
+=item C<uidformat>
+
+From F<uidf.U>:
+
+This variable contains the format string used for printing a Uid_t.
+
+=item C<uidsign>
+
+From F<uidsign.U>:
+
+This variable contains the signedness of a uidtype.
+1 for unsigned, -1 for signed.
+
+=item C<uidsize>
+
+From F<uidsize.U>:
+
+This variable contains the size of a uidtype in bytes.
+
+=item C<uidtype>
+
+From F<uidtype.U>:
+
+This variable defines Uid_t to be something like uid_t, int,
+ushort, or whatever type is used to declare user ids in the kernel.
+
+=item C<uname>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the uname program. After Configure runs,
+the value is reset to a plain C<uname> and is not useful.
+
+=item C<uniq>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the uniq program. After Configure runs,
+the value is reset to a plain C<uniq> and is not useful.
+
+=item C<uquadtype>
+
+From F<quadtype.U>:
+
+This variable defines Uquad_t to be something like unsigned long,
+unsigned int, unsigned long long, uint64_t, or whatever type is
+used for 64-bit integers.
+
+=item C<use5005threads>
+
+From F<usethreads.U>:
+
+This variable conditionally defines the USE_5005THREADS symbol,
+and indicates that Perl should be built to use the 5.005-based
+threading implementation.
+
+=item C<use64bitall>
+
+From F<use64bits.U>:
+
+This variable conditionally defines the USE_64_BIT_ALL symbol,
+and indicates that 64-bit integer types should be used
+when available. The maximal possible
+64-bitness is employed: LP64 or ILP64, meaning that you will
+be able to use more than 2 gigabytes of memory. This mode is
+even more binary incompatible than USE_64_BIT_INT. You may not
+be able to run the resulting executable in a 32-bit C<CPU> at all or
+you may need at least to reboot your C<OS> to 64-bit mode.
+
+=item C<use64bitint>
+
+From F<use64bits.U>:
+
+This variable conditionally defines the USE_64_BIT_INT symbol,
+and indicates that 64-bit integer types should be used
+when available. The minimal possible 64-bitness
+is employed, just enough to get 64-bit integers into Perl.
+This may mean using for example "long longs", while your memory
+may still be limited to 2 gigabytes.
+
+=item C<usecrosscompile>
+
+From F<Cross.U>:
+
+This variable conditionally defines the C<USE_CROSS_COMPILE> symbol,
+and indicates that Perl has been cross-compiled.
+
+=item C<usedl>
+
+From F<dlsrc.U>:
+
+This variable indicates if the system supports dynamic
+loading of some sort. See also dlsrc and dlobj.
+
+=item C<useithreads>
+
+From F<usethreads.U>:
+
+This variable conditionally defines the C<USE_ITHREADS> symbol,
+and indicates that Perl should be built to use the interpreter-based
+threading implementation.
+
+=item C<uselargefiles>
+
+From F<uselfs.U>:
+
+This variable conditionally defines the C<USE_LARGE_FILES> symbol,
+and indicates that large file interfaces should be used when
+available.
+
+=item C<uselongdouble>
+
+From F<uselongdbl.U>:
+
+This variable conditionally defines the C<USE_LONG_DOUBLE> symbol,
+and indicates that long doubles should be used when available.
+
+=item C<usemorebits>
+
+From F<usemorebits.U>:
+
+This variable conditionally defines the C<USE_MORE_BITS> symbol,
+and indicates that explicit 64-bit interfaces and long doubles
+should be used when available.
+
+=item C<usemultiplicity>
+
+From F<usemultiplicity.U>:
+
+This variable conditionally defines the C<MULTIPLICITY> symbol,
+and indicates that Perl should be built to use multiplicity.
+
+=item C<usemymalloc>
+
+From F<mallocsrc.U>:
+
+This variable contains y if the malloc that comes with this package
+is desired over the system's version of malloc. People often include
+special versions of malloc for effiency, but such versions are often
+less portable. See also mallocsrc and mallocobj.
+If this is C<y>, then -lmalloc is removed from $libs.
+
+=item C<usenm>
+
+From F<usenm.U>:
+
+This variable contains C<true> or C<false> depending whether the
+nm extraction is wanted or not.
+
+=item C<useopcode>
+
+From F<Extensions.U>:
+
+This variable holds either C<true> or C<false> to indicate
+whether the Opcode extension should be used. The sole
+use for this currently is to allow an easy mechanism
+for users to skip the Opcode extension from the Configure
+command line.
+
+=item C<useperlio>
+
+From F<useperlio.U>:
+
+This variable conditionally defines the C<USE_PERLIO> symbol,
+and indicates that the PerlIO abstraction should be
+used throughout.
+
+=item C<useposix>
+
+From F<Extensions.U>:
+
+This variable holds either C<true> or C<false> to indicate
+whether the C<POSIX> extension should be used. The sole
+use for this currently is to allow an easy mechanism
+for hints files to indicate that C<POSIX> will not compile
+on a particular system.
+
+=item C<usereentrant>
+
+From F<usethreads.U>:
+
+This variable conditionally defines the C<USE_REENTRANT_API> symbol,
+which indicates that the thread code may try to use the various
+_r versions of library functions. This is only potentially
+meaningful if usethreads is set and is very experimental, it is
+not even prompted for.
+
+=item C<usesfio>
+
+From F<d_sfio.U>:
+
+This variable is set to true when the user agrees to use sfio.
+It is set to false when sfio is not available or when the user
+explicitely requests not to use sfio. It is here primarily so
+that command-line settings can override the auto-detection of
+d_sfio without running into a "WHOA THERE".
+
+=item C<useshrplib>
+
+From F<libperl.U>:
+
+This variable is set to C<yes> if the user wishes
+to build a shared libperl, and C<no> otherwise.
+
+=item C<usesocks>
+
+From F<usesocks.U>:
+
+This variable conditionally defines the C<USE_SOCKS> symbol,
+and indicates that Perl should be built to use C<SOCKS>.
+
+=item C<usethreads>
+
+From F<usethreads.U>:
+
+This variable conditionally defines the C<USE_THREADS> symbol,
+and indicates that Perl should be built to use threads.
+
+=item C<usevendorprefix>
+
+From F<vendorprefix.U>:
+
+This variable tells whether the vendorprefix
+and consequently other vendor* paths are in use.
+
+=item C<usevfork>
+
+From F<d_vfork.U>:
+
+This variable is set to true when the user accepts to use vfork.
+It is set to false when no vfork is available or when the user
+explicitely requests not to use vfork.
+
+=item C<usrinc>
+
+From F<usrinc.U>:
+
+This variable holds the path of the include files, which is
+usually F</usr/include>. It is mainly used by other Configure units.
+
+=item C<uuname>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<uvoformat>
+
+From F<perlxvf.U>:
+
+This variable contains the format string used for printing
+a Perl C<UV> as an unsigned octal integer.
+
+=item C<uvsize>
+
+From F<perlxv.U>:
+
+This variable is the size of a C<UV> in bytes.
+
+=item C<uvtype>
+
+From F<perlxv.U>:
+
+This variable contains the C type used for Perl's C<UV>.
+
+=item C<uvuformat>
+
+From F<perlxvf.U>:
+
+This variable contains the format string used for printing
+a Perl C<UV> as an unsigned decimal integer.
+
+=item C<uvxformat>
+
+From F<perlxvf.U>:
+
+This variable contains the format string used for printing
+a Perl C<UV> as an unsigned hexadecimal integer in lowercase abcdef.
+
+=item C<uvXUformat>
+
+From F<perlxvf.U>:
+
+This variable contains the format string used for printing
+a Perl C<UV> as an unsigned hexadecimal integer in uppercase C<ABCDEF>.
+
+=back
+
+=head2 v
+
+=over 4
+
+=item C<vendorarch>
+
+From F<vendorarch.U>:
+
+This variable contains the value of the C<PERL_VENDORARCH> symbol.
+It may have a F<~> on the front.
+The standard distribution will put nothing in this directory.
+Vendors who distribute perl may wish to place their own
+architecture-dependent modules and extensions in this directory with
+MakeMaker F<Makefile.PL> C<INSTALLDIRS>=vendor
+or equivalent. See C<INSTALL> for details.
+
+=item C<vendorarchexp>
+
+From F<vendorarch.U>:
+
+This variable is the F<~name> expanded version of vendorarch, so that you
+may use it directly in Makefiles or shell scripts.
+
+=item C<vendorbin>
+
+From F<vendorbin.U>:
+
+This variable contains the eventual value of the C<VENDORBIN> symbol.
+It may have a F<~> on the front.
+The standard distribution will put nothing in this directory.
+Vendors who distribute perl may wish to place additional
+binaries in this directory with
+MakeMaker F<Makefile.PL> C<INSTALLDIRS>=vendor
+or equivalent. See C<INSTALL> for details.
+
+=item C<vendorbinexp>
+
+From F<vendorbin.U>:
+
+This variable is the F<~name> expanded version of vendorbin, so that you
+may use it directly in Makefiles or shell scripts.
+
+=item C<vendorlib>
+
+From F<vendorlib.U>:
+
+This variable contains the eventual value of the C<VENDORLIB> symbol,
+which is the name of the private library for this package.
+The standard distribution will put nothing in this directory.
+Vendors who distribute perl may wish to place their own
+modules in this directory with
+MakeMaker F<Makefile.PL> C<INSTALLDIRS>=vendor
+or equivalent. See C<INSTALL> for details.
+
+=item C<vendorlib_stem>
+
+From F<vendorlib.U>:
+
+This variable is $vendorlibexp with any trailing version-specific component
+removed. The elements in inc_version_list (F<inc_version_list.U>) can
+be tacked onto this variable to generate a list of directories to search.
+
+=item C<vendorlibexp>
+
+From F<vendorlib.U>:
+
+This variable is the F<~name> expanded version of vendorlib, so that you
+may use it directly in Makefiles or shell scripts.
+
+=item C<vendorprefix>
+
+From F<vendorprefix.U>:
+
+This variable holds the full absolute path of the directory below
+which the vendor will install add-on packages.
+See C<INSTALL> for usage and examples.
+
+=item C<vendorprefixexp>
+
+From F<vendorprefix.U>:
+
+This variable holds the full absolute path of the directory below
+which the vendor will install add-on packages. Derived from vendorprefix.
+
+=item C<version>
+
+From F<patchlevel.U>:
+
+The full version number of this package, such as 5.6.1 (or 5_6_1).
+This combines revision, patchlevel, and subversion to get the
+full version number, including any possible subversions.
+This is suitable for use as a directory name, and hence is
+filesystem dependent.
+
+=item C<version_patchlevel_string>
+
+From F<patchlevel.U>:
+
+This is a string combining version, subversion and
+perl_patchlevel (if perl_patchlevel is non-zero).
+It is typically something like
+'version 7 subversion 1' or
+'version 7 subversion 1 patchlevel 11224'
+It is computed here to avoid duplication of code in F<myconfig.SH>
+and F<lib/Config.pm>.
+
+=item C<versiononly>
+
+From F<versiononly.U>:
+
+If set, this symbol indicates that only the version-specific
+components of a perl installation should be installed.
+This may be useful for making a test installation of a new
+version without disturbing the existing installation.
+Setting versiononly is equivalent to setting installperl's -v option.
+In particular, the non-versioned scripts and programs such as
+a2p, c2ph, h2xs, pod2*, and perldoc are not installed
+(see C<INSTALL> for a more complete list). Nor are the man
+pages installed.
+Usually, this is undef.
+
+=item C<vi>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<voidflags>
+
+From F<voidflags.U>:
+
+This variable contains the eventual value of the C<VOIDFLAGS> symbol,
+which indicates how much support of the void type is given by this
+compiler. See C<VOIDFLAGS> for more info.
+
+=back
+
+=head2 x
+
+=over 4
+
+=item C<xlibpth>
+
+From F<libpth.U>:
+
+This variable holds extra path (space-separated) used to find
+libraries on this platform, for example C<CPU>-specific libraries
+(on multi-C<CPU> platforms) may be listed here.
+
+=item C<xs_apiversion>
+
+From F<xs_apiversion.U>:
+
+This variable contains the version of the oldest perl binary
+compatible with the present perl. F<perl.c>:incpush() and
+F<lib/lib.pm> will automatically search in $sitearch for older
+directories across major versions back to xs_apiversion.
+This is only useful if you have a perl library directory tree
+structured like the default one.
+See C<INSTALL> for how this works.
+The versioned site_perl directory was introduced in 5.005,
+so that is the lowest possible value.
+Since this can depend on compile time options
+it is set by Configure. Other non-default sources
+of potential incompatibility, such as multiplicity, threads,
+debugging, 64bits, sfio, etc., are not checked for currently,
+though in principle we could go snooping around in old
+F<Config.pm> files.
+
+=back
+
+=head2 y
+
+=over 4
+
+=item C<yacc>
+
+From F<yacc.U>:
+
+This variable holds the name of the compiler compiler we
+want to use in the Makefile. It can be yacc, byacc, or bison -y.
+
+=item C<yaccflags>
+
+From F<yacc.U>:
+
+This variable contains any additional yacc flags desired by the
+user. It is up to the Makefile to use this.
+
+=back
+
+=head2 z
+
+=over 4
+
+=item C<zcat>
+
+From F<Loc.U>:
+
+This variable is defined but not used by Configure.
+The value is a plain '' and is not useful.
+
+=item C<zip>
+
+From F<Loc.U>:
+
+This variable is used internally by Configure to determine the
+full pathname (if any) of the zip program. After Configure runs,
+the value is reset to a plain C<zip> and is not useful.
+
+
+=back
+
+=head1 NOTE
+
+This module contains a good example of how to use tie to implement a
+cache and an example of how to make a tied variable readonly to those
+outside of it.
+
+=cut
+
diff --git a/Master/xemtex/perl/lib/Cwd.pm b/Master/xemtex/perl/lib/Cwd.pm
new file mode 100644
index 00000000000..8b00543e1e9
--- /dev/null
+++ b/Master/xemtex/perl/lib/Cwd.pm
@@ -0,0 +1,570 @@
+package Cwd;
+use 5.006;
+
+=head1 NAME
+
+Cwd - get pathname of current working directory
+
+=head1 SYNOPSIS
+
+ use Cwd;
+ my $dir = getcwd;
+
+ use Cwd 'abs_path';
+ my $abs_path = abs_path($file);
+
+=head1 DESCRIPTION
+
+This module provides functions for determining the pathname of the
+current working directory. It is recommended that getcwd (or another
+*cwd() function) be used in I<all> code to ensure portability.
+
+By default, it exports the functions cwd(), getcwd(), fastcwd(), and
+fastgetcwd() into the caller's namespace.
+
+
+=head2 getcwd and friends
+
+Each of these functions are called without arguments and return the
+absolute path of the current working directory.
+
+=over 4
+
+=item getcwd
+
+ my $cwd = getcwd();
+
+Returns the current working directory.
+
+Re-implements the getcwd(3) (or getwd(3)) functions in Perl.
+
+Taint-safe.
+
+=item cwd
+
+ my $cwd = cwd();
+
+The cwd() is the most natural form for the current architecture. For
+most systems it is identical to `pwd` (but without the trailing line
+terminator).
+
+Taint-safe.
+
+=item fastcwd
+
+ my $cwd = fastcwd();
+
+A more dangerous version of getcwd(), but potentially faster.
+
+It might conceivably chdir() you out of a directory that it can't
+chdir() you back into. If fastcwd encounters a problem it will return
+undef but will probably leave you in a different directory. For a
+measure of extra security, if everything appears to have worked, the
+fastcwd() function will check that it leaves you in the same directory
+that it started in. If it has changed it will C<die> with the message
+"Unstable directory path, current directory changed
+unexpectedly". That should never happen.
+
+=item fastgetcwd
+
+ my $cwd = fastgetcwd();
+
+The fastgetcwd() function is provided as a synonym for cwd().
+
+=back
+
+
+=head2 abs_path and friends
+
+These functions are exported only on request. They each take a single
+argument and return the absolute pathname for it.
+
+=over 4
+
+=item abs_path
+
+ my $abs_path = abs_path($file);
+
+Uses the same algorithm as getcwd(). Symbolic links and relative-path
+components ("." and "..") are resolved to return the canonical
+pathname, just like realpath(3).
+
+Taint-safe.
+
+=item realpath
+
+ my $abs_path = realpath($file);
+
+A synonym for abs_path().
+
+Taint-safe.
+
+=item fast_abs_path
+
+ my $abs_path = fast_abs_path($file);
+
+A more dangerous, but potentially faster version of abs_path.
+
+This function is B<Not> taint-safe : you can't use it in programs
+that work under taint mode.
+
+=back
+
+=head2 $ENV{PWD}
+
+If you ask to override your chdir() built-in function,
+
+ use Cwd qw(chdir);
+
+then your PWD environment variable will be kept up to date. Note that
+it will only be kept up to date if all packages which use chdir import
+it from Cwd.
+
+
+=head1 NOTES
+
+=over 4
+
+=item *
+
+Since the path seperators are different on some operating systems ('/'
+on Unix, ':' on MacPerl, etc...) we recommend you use the File::Spec
+modules wherever portability is a concern.
+
+=item *
+
+Actually, on Mac OS, the C<getcwd()>, C<fastgetcwd()> and C<fastcwd()>
+functions are all aliases for the C<cwd()> function, which, on Mac OS,
+calls `pwd`. Likewise, the C<abs_path()> function is an alias for
+C<fast_abs_path()>.
+
+=back
+
+=head1 SEE ALSO
+
+L<File::chdir>
+
+=cut
+
+use strict;
+
+use Carp;
+
+our $VERSION = '2.06';
+
+use base qw/ Exporter /;
+our @EXPORT = qw(cwd getcwd fastcwd fastgetcwd);
+our @EXPORT_OK = qw(chdir abs_path fast_abs_path realpath fast_realpath);
+
+# sys_cwd may keep the builtin command
+
+# All the functionality of this module may provided by builtins,
+# there is no sense to process the rest of the file.
+# The best choice may be to have this in BEGIN, but how to return from BEGIN?
+
+if ($^O eq 'os2' && defined &sys_cwd && defined &sys_abspath) {
+ local $^W = 0;
+ *cwd = \&sys_cwd;
+ *getcwd = \&cwd;
+ *fastgetcwd = \&cwd;
+ *fastcwd = \&cwd;
+ *abs_path = \&sys_abspath;
+ *fast_abs_path = \&abs_path;
+ *realpath = \&abs_path;
+ *fast_realpath = \&abs_path;
+ return 1;
+}
+
+eval {
+ require XSLoader;
+ undef *Cwd::fastcwd; # avoid redefinition warning
+ XSLoader::load('Cwd');
+};
+
+
+# Find the pwd command in the expected locations. We assume these
+# are safe. This prevents _backtick_pwd() consulting $ENV{PATH}
+# so everything works under taint mode.
+my $pwd_cmd;
+foreach my $try (qw(/bin/pwd /usr/bin/pwd)) {
+ if( -x $try ) {
+ $pwd_cmd = $try;
+ last;
+ }
+}
+$pwd_cmd ||= 'pwd';
+
+# The 'natural and safe form' for UNIX (pwd may be setuid root)
+sub _backtick_pwd {
+ local @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)};
+ my $cwd = `$pwd_cmd`;
+ # Belt-and-suspenders in case someone said "undef $/".
+ local $/ = "\n";
+ # `pwd` may fail e.g. if the disk is full
+ chomp($cwd) if defined $cwd;
+ $cwd;
+}
+
+# Since some ports may predefine cwd internally (e.g., NT)
+# we take care not to override an existing definition for cwd().
+
+unless(defined &cwd) {
+ # The pwd command is not available in some chroot(2)'ed environments
+ if( $^O eq 'MacOS' || (defined $ENV{PATH} &&
+ grep { -x "$_/pwd" } split(':', $ENV{PATH})) )
+ {
+ *cwd = \&_backtick_pwd;
+ }
+ else {
+ *cwd = \&getcwd;
+ }
+}
+
+# set a reasonable (and very safe) default for fastgetcwd, in case it
+# isn't redefined later (20001212 rspier)
+*fastgetcwd = \&cwd;
+
+# By Brandon S. Allbery
+#
+# Usage: $cwd = getcwd();
+
+sub getcwd
+{
+ abs_path('.');
+}
+
+
+# By John Bazik
+#
+# Usage: $cwd = &fastcwd;
+#
+# This is a faster version of getcwd. It's also more dangerous because
+# you might chdir out of a directory that you can't chdir back into.
+
+sub fastcwd {
+ my($odev, $oino, $cdev, $cino, $tdev, $tino);
+ my(@path, $path);
+ local(*DIR);
+
+ my($orig_cdev, $orig_cino) = stat('.');
+ ($cdev, $cino) = ($orig_cdev, $orig_cino);
+ for (;;) {
+ my $direntry;
+ ($odev, $oino) = ($cdev, $cino);
+ CORE::chdir('..') || return undef;
+ ($cdev, $cino) = stat('.');
+ last if $odev == $cdev && $oino == $cino;
+ opendir(DIR, '.') || return undef;
+ for (;;) {
+ $direntry = readdir(DIR);
+ last unless defined $direntry;
+ next if $direntry eq '.';
+ next if $direntry eq '..';
+
+ ($tdev, $tino) = lstat($direntry);
+ last unless $tdev != $odev || $tino != $oino;
+ }
+ closedir(DIR);
+ return undef unless defined $direntry; # should never happen
+ unshift(@path, $direntry);
+ }
+ $path = '/' . join('/', @path);
+ if ($^O eq 'apollo') { $path = "/".$path; }
+ # At this point $path may be tainted (if tainting) and chdir would fail.
+ # Untaint it then check that we landed where we started.
+ $path =~ /^(.*)\z/s # untaint
+ && CORE::chdir($1) or return undef;
+ ($cdev, $cino) = stat('.');
+ die "Unstable directory path, current directory changed unexpectedly"
+ if $cdev != $orig_cdev || $cino != $orig_cino;
+ $path;
+}
+
+
+# Keeps track of current working directory in PWD environment var
+# Usage:
+# use Cwd 'chdir';
+# chdir $newdir;
+
+my $chdir_init = 0;
+
+sub chdir_init {
+ if ($ENV{'PWD'} and $^O ne 'os2' and $^O ne 'dos' and $^O ne 'MSWin32') {
+ my($dd,$di) = stat('.');
+ my($pd,$pi) = stat($ENV{'PWD'});
+ if (!defined $dd or !defined $pd or $di != $pi or $dd != $pd) {
+ $ENV{'PWD'} = cwd();
+ }
+ }
+ else {
+ my $wd = cwd();
+ $wd = Win32::GetFullPathName($wd) if $^O eq 'MSWin32';
+ $ENV{'PWD'} = $wd;
+ }
+ # Strip an automounter prefix (where /tmp_mnt/foo/bar == /foo/bar)
+ if ($^O ne 'MSWin32' and $ENV{'PWD'} =~ m|(/[^/]+(/[^/]+/[^/]+))(.*)|s) {
+ my($pd,$pi) = stat($2);
+ my($dd,$di) = stat($1);
+ if (defined $pd and defined $dd and $di == $pi and $dd == $pd) {
+ $ENV{'PWD'}="$2$3";
+ }
+ }
+ $chdir_init = 1;
+}
+
+sub chdir {
+ my $newdir = @_ ? shift : ''; # allow for no arg (chdir to HOME dir)
+ $newdir =~ s|///*|/|g unless $^O eq 'MSWin32';
+ chdir_init() unless $chdir_init;
+ my $newpwd;
+ if ($^O eq 'MSWin32') {
+ # get the full path name *before* the chdir()
+ $newpwd = Win32::GetFullPathName($newdir);
+ }
+
+ return 0 unless CORE::chdir $newdir;
+
+ if ($^O eq 'VMS') {
+ return $ENV{'PWD'} = $ENV{'DEFAULT'}
+ }
+ elsif ($^O eq 'MacOS') {
+ return $ENV{'PWD'} = cwd();
+ }
+ elsif ($^O eq 'MSWin32') {
+ $ENV{'PWD'} = $newpwd;
+ return 1;
+ }
+
+ if ($newdir =~ m#^/#s) {
+ $ENV{'PWD'} = $newdir;
+ } else {
+ my @curdir = split(m#/#,$ENV{'PWD'});
+ @curdir = ('') unless @curdir;
+ my $component;
+ foreach $component (split(m#/#, $newdir)) {
+ next if $component eq '.';
+ pop(@curdir),next if $component eq '..';
+ push(@curdir,$component);
+ }
+ $ENV{'PWD'} = join('/',@curdir) || '/';
+ }
+ 1;
+}
+
+
+# In case the XS version doesn't load.
+*abs_path = \&_perl_abs_path unless defined &abs_path;
+sub _perl_abs_path
+{
+ my $start = @_ ? shift : '.';
+ my($dotdots, $cwd, @pst, @cst, $dir, @tst);
+
+ unless (@cst = stat( $start ))
+ {
+ carp "stat($start): $!";
+ return '';
+ }
+ $cwd = '';
+ $dotdots = $start;
+ do
+ {
+ $dotdots .= '/..';
+ @pst = @cst;
+ unless (opendir(PARENT, $dotdots))
+ {
+ carp "opendir($dotdots): $!";
+ return '';
+ }
+ unless (@cst = stat($dotdots))
+ {
+ carp "stat($dotdots): $!";
+ closedir(PARENT);
+ return '';
+ }
+ if ($pst[0] == $cst[0] && $pst[1] == $cst[1])
+ {
+ $dir = undef;
+ }
+ else
+ {
+ do
+ {
+ unless (defined ($dir = readdir(PARENT)))
+ {
+ carp "readdir($dotdots): $!";
+ closedir(PARENT);
+ return '';
+ }
+ $tst[0] = $pst[0]+1 unless (@tst = lstat("$dotdots/$dir"))
+ }
+ while ($dir eq '.' || $dir eq '..' || $tst[0] != $pst[0] ||
+ $tst[1] != $pst[1]);
+ }
+ $cwd = (defined $dir ? "$dir" : "" ) . "/$cwd" ;
+ closedir(PARENT);
+ } while (defined $dir);
+ chop($cwd) unless $cwd eq '/'; # drop the trailing /
+ $cwd;
+}
+
+
+# added function alias for those of us more
+# used to the libc function. --tchrist 27-Jan-00
+*realpath = \&abs_path;
+
+sub fast_abs_path {
+ my $cwd = getcwd();
+ require File::Spec;
+ my $path = @_ ? shift : File::Spec->curdir;
+ CORE::chdir($path) || croak "Cannot chdir to $path: $!";
+ my $realpath = getcwd();
+ -d $cwd && CORE::chdir($cwd) ||
+ croak "Cannot chdir back to $cwd: $!";
+ $realpath;
+}
+
+# added function alias to follow principle of least surprise
+# based on previous aliasing. --tchrist 27-Jan-00
+*fast_realpath = \&fast_abs_path;
+
+
+# --- PORTING SECTION ---
+
+# VMS: $ENV{'DEFAULT'} points to default directory at all times
+# 06-Mar-1996 Charles Bailey bailey@newman.upenn.edu
+# Note: Use of Cwd::chdir() causes the logical name PWD to be defined
+# in the process logical name table as the default device and directory
+# seen by Perl. This may not be the same as the default device
+# and directory seen by DCL after Perl exits, since the effects
+# the CRTL chdir() function persist only until Perl exits.
+
+sub _vms_cwd {
+ return $ENV{'DEFAULT'};
+}
+
+sub _vms_abs_path {
+ return $ENV{'DEFAULT'} unless @_;
+ my $path = VMS::Filespec::pathify($_[0]);
+ croak("Invalid path name $_[0]") unless defined $path;
+ return VMS::Filespec::rmsexpand($path);
+}
+
+sub _os2_cwd {
+ $ENV{'PWD'} = `cmd /c cd`;
+ chop $ENV{'PWD'};
+ $ENV{'PWD'} =~ s:\\:/:g ;
+ return $ENV{'PWD'};
+}
+
+sub _win32_cwd {
+ $ENV{'PWD'} = Win32::GetCwd();
+ $ENV{'PWD'} =~ s:\\:/:g ;
+ return $ENV{'PWD'};
+}
+
+*_NT_cwd = \&_win32_cwd if (!defined &_NT_cwd &&
+ defined &Win32::GetCwd);
+
+*_NT_cwd = \&_os2_cwd unless defined &_NT_cwd;
+
+sub _dos_cwd {
+ if (!defined &Dos::GetCwd) {
+ $ENV{'PWD'} = `command /c cd`;
+ chop $ENV{'PWD'};
+ $ENV{'PWD'} =~ s:\\:/:g ;
+ } else {
+ $ENV{'PWD'} = Dos::GetCwd();
+ }
+ return $ENV{'PWD'};
+}
+
+sub _qnx_cwd {
+ local $ENV{PATH} = '';
+ local $ENV{CDPATH} = '';
+ local $ENV{ENV} = '';
+ $ENV{'PWD'} = `/usr/bin/fullpath -t`;
+ chop $ENV{'PWD'};
+ return $ENV{'PWD'};
+}
+
+sub _qnx_abs_path {
+ local $ENV{PATH} = '';
+ local $ENV{CDPATH} = '';
+ local $ENV{ENV} = '';
+ my $path = @_ ? shift : '.';
+ my $realpath=`/usr/bin/fullpath -t $path`;
+ chop $realpath;
+ return $realpath;
+}
+
+sub _epoc_cwd {
+ $ENV{'PWD'} = EPOC::getcwd();
+ return $ENV{'PWD'};
+}
+
+{
+ no warnings; # assignments trigger 'subroutine redefined' warning
+
+ if ($^O eq 'VMS') {
+ *cwd = \&_vms_cwd;
+ *getcwd = \&_vms_cwd;
+ *fastcwd = \&_vms_cwd;
+ *fastgetcwd = \&_vms_cwd;
+ *abs_path = \&_vms_abs_path;
+ *fast_abs_path = \&_vms_abs_path;
+ }
+ elsif ($^O eq 'NT' or $^O eq 'MSWin32') {
+ # We assume that &_NT_cwd is defined as an XSUB or in the core.
+ *cwd = \&_NT_cwd;
+ *getcwd = \&_NT_cwd;
+ *fastcwd = \&_NT_cwd;
+ *fastgetcwd = \&_NT_cwd;
+ *abs_path = \&fast_abs_path;
+ *realpath = \&fast_abs_path;
+ }
+ elsif ($^O eq 'os2') {
+ # sys_cwd may keep the builtin command
+ *cwd = defined &sys_cwd ? \&sys_cwd : \&_os2_cwd;
+ *getcwd = \&cwd;
+ *fastgetcwd = \&cwd;
+ *fastcwd = \&cwd;
+ *abs_path = \&fast_abs_path;
+ }
+ elsif ($^O eq 'dos') {
+ *cwd = \&_dos_cwd;
+ *getcwd = \&_dos_cwd;
+ *fastgetcwd = \&_dos_cwd;
+ *fastcwd = \&_dos_cwd;
+ *abs_path = \&fast_abs_path;
+ }
+ elsif ($^O =~ m/^(?:qnx|nto)$/ ) {
+ *cwd = \&_qnx_cwd;
+ *getcwd = \&_qnx_cwd;
+ *fastgetcwd = \&_qnx_cwd;
+ *fastcwd = \&_qnx_cwd;
+ *abs_path = \&_qnx_abs_path;
+ *fast_abs_path = \&_qnx_abs_path;
+ }
+ elsif ($^O eq 'cygwin') {
+ *getcwd = \&cwd;
+ *fastgetcwd = \&cwd;
+ *fastcwd = \&cwd;
+ *abs_path = \&fast_abs_path;
+ }
+ elsif ($^O eq 'epoc') {
+ *cwd = \&_epoc_cwd;
+ *getcwd = \&_epoc_cwd;
+ *fastgetcwd = \&_epoc_cwd;
+ *fastcwd = \&_epoc_cwd;
+ *abs_path = \&fast_abs_path;
+ }
+ elsif ($^O eq 'MacOS') {
+ *getcwd = \&cwd;
+ *fastgetcwd = \&cwd;
+ *fastcwd = \&cwd;
+ *abs_path = \&fast_abs_path;
+ }
+}
+
+
+1;
diff --git a/Master/xemtex/perl/lib/Data/Dumper.pm b/Master/xemtex/perl/lib/Data/Dumper.pm
new file mode 100644
index 00000000000..189ad007cbc
--- /dev/null
+++ b/Master/xemtex/perl/lib/Data/Dumper.pm
@@ -0,0 +1,1160 @@
+#
+# Data/Dumper.pm
+#
+# convert perl data structures into perl syntax suitable for both printing
+# and eval
+#
+# Documentation at the __END__
+#
+
+package Data::Dumper;
+
+$VERSION = '2.12';
+
+#$| = 1;
+
+use 5.006_001;
+require Exporter;
+use XSLoader ();
+require overload;
+
+use Carp;
+
+@ISA = qw(Exporter);
+@EXPORT = qw(Dumper);
+@EXPORT_OK = qw(DumperX);
+
+XSLoader::load 'Data::Dumper';
+
+# module vars and their defaults
+$Indent = 2 unless defined $Indent;
+$Purity = 0 unless defined $Purity;
+$Pad = "" unless defined $Pad;
+$Varname = "VAR" unless defined $Varname;
+$Useqq = 0 unless defined $Useqq;
+$Terse = 0 unless defined $Terse;
+$Freezer = "" unless defined $Freezer;
+$Toaster = "" unless defined $Toaster;
+$Deepcopy = 0 unless defined $Deepcopy;
+$Quotekeys = 1 unless defined $Quotekeys;
+$Bless = "bless" unless defined $Bless;
+#$Expdepth = 0 unless defined $Expdepth;
+$Maxdepth = 0 unless defined $Maxdepth;
+$Useperl = 0 unless defined $Useperl;
+$Sortkeys = 0 unless defined $Sortkeys;
+$Deparse = 0 unless defined $Deparse;
+
+#
+# expects an arrayref of values to be dumped.
+# can optionally pass an arrayref of names for the values.
+# names must have leading $ sign stripped. begin the name with *
+# to cause output of arrays and hashes rather than refs.
+#
+sub new {
+ my($c, $v, $n) = @_;
+
+ croak "Usage: PACKAGE->new(ARRAYREF, [ARRAYREF])"
+ unless (defined($v) && (ref($v) eq 'ARRAY'));
+ $n = [] unless (defined($n) && (ref($v) eq 'ARRAY'));
+
+ my($s) = {
+ level => 0, # current recursive depth
+ indent => $Indent, # various styles of indenting
+ pad => $Pad, # all lines prefixed by this string
+ xpad => "", # padding-per-level
+ apad => "", # added padding for hash keys n such
+ sep => "", # list separator
+ seen => {}, # local (nested) refs (id => [name, val])
+ todump => $v, # values to dump []
+ names => $n, # optional names for values []
+ varname => $Varname, # prefix to use for tagging nameless ones
+ purity => $Purity, # degree to which output is evalable
+ useqq => $Useqq, # use "" for strings (backslashitis ensues)
+ terse => $Terse, # avoid name output (where feasible)
+ freezer => $Freezer, # name of Freezer method for objects
+ toaster => $Toaster, # name of method to revive objects
+ deepcopy => $Deepcopy, # dont cross-ref, except to stop recursion
+ quotekeys => $Quotekeys, # quote hash keys
+ 'bless' => $Bless, # keyword to use for "bless"
+# expdepth => $Expdepth, # cutoff depth for explicit dumping
+ maxdepth => $Maxdepth, # depth beyond which we give up
+ useperl => $Useperl, # use the pure Perl implementation
+ sortkeys => $Sortkeys, # flag or filter for sorting hash keys
+ deparse => $Deparse, # use B::Deparse for coderefs
+ };
+
+ if ($Indent > 0) {
+ $s->{xpad} = " ";
+ $s->{sep} = "\n";
+ }
+ return bless($s, $c);
+}
+
+#
+# add-to or query the table of already seen references
+#
+sub Seen {
+ my($s, $g) = @_;
+ if (defined($g) && (ref($g) eq 'HASH')) {
+ my($k, $v, $id);
+ while (($k, $v) = each %$g) {
+ if (defined $v and ref $v) {
+ ($id) = (overload::StrVal($v) =~ /\((.*)\)$/);
+ if ($k =~ /^[*](.*)$/) {
+ $k = (ref $v eq 'ARRAY') ? ( "\\\@" . $1 ) :
+ (ref $v eq 'HASH') ? ( "\\\%" . $1 ) :
+ (ref $v eq 'CODE') ? ( "\\\&" . $1 ) :
+ ( "\$" . $1 ) ;
+ }
+ elsif ($k !~ /^\$/) {
+ $k = "\$" . $k;
+ }
+ $s->{seen}{$id} = [$k, $v];
+ }
+ else {
+ carp "Only refs supported, ignoring non-ref item \$$k";
+ }
+ }
+ return $s;
+ }
+ else {
+ return map { @$_ } values %{$s->{seen}};
+ }
+}
+
+#
+# set or query the values to be dumped
+#
+sub Values {
+ my($s, $v) = @_;
+ if (defined($v) && (ref($v) eq 'ARRAY')) {
+ $s->{todump} = [@$v]; # make a copy
+ return $s;
+ }
+ else {
+ return @{$s->{todump}};
+ }
+}
+
+#
+# set or query the names of the values to be dumped
+#
+sub Names {
+ my($s, $n) = @_;
+ if (defined($n) && (ref($n) eq 'ARRAY')) {
+ $s->{names} = [@$n]; # make a copy
+ return $s;
+ }
+ else {
+ return @{$s->{names}};
+ }
+}
+
+sub DESTROY {}
+
+sub Dump {
+ return &Dumpxs
+ unless $Data::Dumper::Useperl || (ref($_[0]) && $_[0]->{useperl}) ||
+ $Data::Dumper::Useqq || (ref($_[0]) && $_[0]->{useqq}) ||
+ $Data::Dumper::Deparse || (ref($_[0]) && $_[0]->{deparse});
+ return &Dumpperl;
+}
+
+#
+# dump the refs in the current dumper object.
+# expects same args as new() if called via package name.
+#
+sub Dumpperl {
+ my($s) = shift;
+ my(@out, $val, $name);
+ my($i) = 0;
+ local(@post);
+
+ $s = $s->new(@_) unless ref $s;
+
+ for $val (@{$s->{todump}}) {
+ my $out = "";
+ @post = ();
+ $name = $s->{names}[$i++];
+ if (defined $name) {
+ if ($name =~ /^[*](.*)$/) {
+ if (defined $val) {
+ $name = (ref $val eq 'ARRAY') ? ( "\@" . $1 ) :
+ (ref $val eq 'HASH') ? ( "\%" . $1 ) :
+ (ref $val eq 'CODE') ? ( "\*" . $1 ) :
+ ( "\$" . $1 ) ;
+ }
+ else {
+ $name = "\$" . $1;
+ }
+ }
+ elsif ($name !~ /^\$/) {
+ $name = "\$" . $name;
+ }
+ }
+ else {
+ $name = "\$" . $s->{varname} . $i;
+ }
+
+ my $valstr;
+ {
+ local($s->{apad}) = $s->{apad};
+ $s->{apad} .= ' ' x (length($name) + 3) if $s->{indent} >= 2;
+ $valstr = $s->_dump($val, $name);
+ }
+
+ $valstr = "$name = " . $valstr . ';' if @post or !$s->{terse};
+ $out .= $s->{pad} . $valstr . $s->{sep};
+ $out .= $s->{pad} . join(';' . $s->{sep} . $s->{pad}, @post)
+ . ';' . $s->{sep} if @post;
+
+ push @out, $out;
+ }
+ return wantarray ? @out : join('', @out);
+}
+
+#
+# twist, toil and turn;
+# and recurse, of course.
+# sometimes sordidly;
+# and curse if no recourse.
+#
+sub _dump {
+ my($s, $val, $name) = @_;
+ my($sname);
+ my($out, $realpack, $realtype, $type, $ipad, $id, $blesspad);
+
+ $type = ref $val;
+ $out = "";
+
+ if ($type) {
+
+ # prep it, if it looks like an object
+ if (my $freezer = $s->{freezer}) {
+ $val->$freezer() if UNIVERSAL::can($val, $freezer);
+ }
+
+ ($realpack, $realtype, $id) =
+ (overload::StrVal($val) =~ /^(?:(.*)\=)?([^=]*)\(([^\(]*)\)$/);
+
+ # if it has a name, we need to either look it up, or keep a tab
+ # on it so we know when we hit it later
+ if (defined($name) and length($name)) {
+ # keep a tab on it so that we dont fall into recursive pit
+ if (exists $s->{seen}{$id}) {
+# if ($s->{expdepth} < $s->{level}) {
+ if ($s->{purity} and $s->{level} > 0) {
+ $out = ($realtype eq 'HASH') ? '{}' :
+ ($realtype eq 'ARRAY') ? '[]' :
+ 'do{my $o}' ;
+ push @post, $name . " = " . $s->{seen}{$id}[0];
+ }
+ else {
+ $out = $s->{seen}{$id}[0];
+ if ($name =~ /^([\@\%])/) {
+ my $start = $1;
+ if ($out =~ /^\\$start/) {
+ $out = substr($out, 1);
+ }
+ else {
+ $out = $start . '{' . $out . '}';
+ }
+ }
+ }
+ return $out;
+# }
+ }
+ else {
+ # store our name
+ $s->{seen}{$id} = [ (($name =~ /^[@%]/) ? ('\\' . $name ) :
+ ($realtype eq 'CODE' and
+ $name =~ /^[*](.*)$/) ? ('\\&' . $1 ) :
+ $name ),
+ $val ];
+ }
+ }
+
+ if ($realpack and $realpack eq 'Regexp') {
+ $out = "$val";
+ $out =~ s,/,\\/,g;
+ return "qr/$out/";
+ }
+
+ # If purity is not set and maxdepth is set, then check depth:
+ # if we have reached maximum depth, return the string
+ # representation of the thing we are currently examining
+ # at this depth (i.e., 'Foo=ARRAY(0xdeadbeef)').
+ if (!$s->{purity}
+ and $s->{maxdepth} > 0
+ and $s->{level} >= $s->{maxdepth})
+ {
+ return qq['$val'];
+ }
+
+ # we have a blessed ref
+ if ($realpack) {
+ $out = $s->{'bless'} . '( ';
+ $blesspad = $s->{apad};
+ $s->{apad} .= ' ' if ($s->{indent} >= 2);
+ }
+
+ $s->{level}++;
+ $ipad = $s->{xpad} x $s->{level};
+
+ if ($realtype eq 'SCALAR' || $realtype eq 'REF') {
+ if ($realpack) {
+ $out .= 'do{\\(my $o = ' . $s->_dump($$val, "\${$name}") . ')}';
+ }
+ else {
+ $out .= '\\' . $s->_dump($$val, "\${$name}");
+ }
+ }
+ elsif ($realtype eq 'GLOB') {
+ $out .= '\\' . $s->_dump($$val, "*{$name}");
+ }
+ elsif ($realtype eq 'ARRAY') {
+ my($v, $pad, $mname);
+ my($i) = 0;
+ $out .= ($name =~ /^\@/) ? '(' : '[';
+ $pad = $s->{sep} . $s->{pad} . $s->{apad};
+ ($name =~ /^\@(.*)$/) ? ($mname = "\$" . $1) :
+ # omit -> if $foo->[0]->{bar}, but not ${$foo->[0]}->{bar}
+ ($name =~ /^\\?[\%\@\*\$][^{].*[]}]$/) ? ($mname = $name) :
+ ($mname = $name . '->');
+ $mname .= '->' if $mname =~ /^\*.+\{[A-Z]+\}$/;
+ for $v (@$val) {
+ $sname = $mname . '[' . $i . ']';
+ $out .= $pad . $ipad . '#' . $i if $s->{indent} >= 3;
+ $out .= $pad . $ipad . $s->_dump($v, $sname);
+ $out .= "," if $i++ < $#$val;
+ }
+ $out .= $pad . ($s->{xpad} x ($s->{level} - 1)) if $i;
+ $out .= ($name =~ /^\@/) ? ')' : ']';
+ }
+ elsif ($realtype eq 'HASH') {
+ my($k, $v, $pad, $lpad, $mname);
+ $out .= ($name =~ /^\%/) ? '(' : '{';
+ $pad = $s->{sep} . $s->{pad} . $s->{apad};
+ $lpad = $s->{apad};
+ ($name =~ /^\%(.*)$/) ? ($mname = "\$" . $1) :
+ # omit -> if $foo->[0]->{bar}, but not ${$foo->[0]}->{bar}
+ ($name =~ /^\\?[\%\@\*\$][^{].*[]}]$/) ? ($mname = $name) :
+ ($mname = $name . '->');
+ $mname .= '->' if $mname =~ /^\*.+\{[A-Z]+\}$/;
+ my ($sortkeys, $keys, $key) = ("$s->{sortkeys}");
+ if ($sortkeys) {
+ if (ref($s->{sortkeys}) eq 'CODE') {
+ $keys = $s->{sortkeys}($val);
+ unless (ref($keys) eq 'ARRAY') {
+ carp "Sortkeys subroutine did not return ARRAYREF";
+ $keys = [];
+ }
+ }
+ else {
+ $keys = [ sort keys %$val ];
+ }
+ }
+ while (($k, $v) = ! $sortkeys ? (each %$val) :
+ @$keys ? ($key = shift(@$keys), $val->{$key}) :
+ () )
+ {
+ my $nk = $s->_dump($k, "");
+ $nk = $1 if !$s->{quotekeys} and $nk =~ /^[\"\']([A-Za-z_]\w*)[\"\']$/;
+ $sname = $mname . '{' . $nk . '}';
+ $out .= $pad . $ipad . $nk . " => ";
+
+ # temporarily alter apad
+ $s->{apad} .= (" " x (length($nk) + 4)) if $s->{indent} >= 2;
+ $out .= $s->_dump($val->{$k}, $sname) . ",";
+ $s->{apad} = $lpad if $s->{indent} >= 2;
+ }
+ if (substr($out, -1) eq ',') {
+ chop $out;
+ $out .= $pad . ($s->{xpad} x ($s->{level} - 1));
+ }
+ $out .= ($name =~ /^\%/) ? ')' : '}';
+ }
+ elsif ($realtype eq 'CODE') {
+ if ($s->{deparse}) {
+ require B::Deparse;
+ my $sub = 'sub ' . (B::Deparse->new)->coderef2text($val);
+ $pad = $s->{sep} . $s->{pad} . $s->{xpad} . $s->{apad} . ' ';
+ $sub =~ s/\n/$pad/gse;
+ $out .= $sub;
+ } else {
+ $out .= 'sub { "DUMMY" }';
+ carp "Encountered CODE ref, using dummy placeholder" if $s->{purity};
+ }
+ }
+ else {
+ croak "Can\'t handle $realtype type.";
+ }
+
+ if ($realpack) { # we have a blessed ref
+ $out .= ', \'' . $realpack . '\'' . ' )';
+ $out .= '->' . $s->{toaster} . '()' if $s->{toaster} ne '';
+ $s->{apad} = $blesspad;
+ }
+ $s->{level}--;
+
+ }
+ else { # simple scalar
+
+ my $ref = \$_[1];
+ # first, catalog the scalar
+ if ($name ne '') {
+ ($id) = ("$ref" =~ /\(([^\(]*)\)$/);
+ if (exists $s->{seen}{$id}) {
+ if ($s->{seen}{$id}[2]) {
+ $out = $s->{seen}{$id}[0];
+ #warn "[<$out]\n";
+ return "\${$out}";
+ }
+ }
+ else {
+ #warn "[>\\$name]\n";
+ $s->{seen}{$id} = ["\\$name", $ref];
+ }
+ }
+ if (ref($ref) eq 'GLOB' or "$ref" =~ /=GLOB\([^()]+\)$/) { # glob
+ my $name = substr($val, 1);
+ if ($name =~ /^[A-Za-z_][\w:]*$/) {
+ $name =~ s/^main::/::/;
+ $sname = $name;
+ }
+ else {
+ $sname = $s->_dump($name, "");
+ $sname = '{' . $sname . '}';
+ }
+ if ($s->{purity}) {
+ my $k;
+ local ($s->{level}) = 0;
+ for $k (qw(SCALAR ARRAY HASH)) {
+ my $gval = *$val{$k};
+ next unless defined $gval;
+ next if $k eq "SCALAR" && ! defined $$gval; # always there
+
+ # _dump can push into @post, so we hold our place using $postlen
+ my $postlen = scalar @post;
+ $post[$postlen] = "\*$sname = ";
+ local ($s->{apad}) = " " x length($post[$postlen]) if $s->{indent} >= 2;
+ $post[$postlen] .= $s->_dump($gval, "\*$sname\{$k\}");
+ }
+ }
+ $out .= '*' . $sname;
+ }
+ elsif (!defined($val)) {
+ $out .= "undef";
+ }
+ elsif ($val =~ /^(?:0|-?[1-9]\d{0,8})\z/) { # safe decimal number
+ $out .= $val;
+ }
+ else { # string
+ if ($s->{useqq} or $val =~ tr/\0-\377//c) {
+ # Fall back to qq if there's unicode
+ $out .= qquote($val, $s->{useqq});
+ }
+ else {
+ $val =~ s/([\\\'])/\\$1/g;
+ $out .= '\'' . $val . '\'';
+ }
+ }
+ }
+ if ($id) {
+ # if we made it this far, $id was added to seen list at current
+ # level, so remove it to get deep copies
+ if ($s->{deepcopy}) {
+ delete($s->{seen}{$id});
+ }
+ elsif ($name) {
+ $s->{seen}{$id}[2] = 1;
+ }
+ }
+ return $out;
+}
+
+#
+# non-OO style of earlier version
+#
+sub Dumper {
+ return Data::Dumper->Dump([@_]);
+}
+
+# compat stub
+sub DumperX {
+ return Data::Dumper->Dumpxs([@_], []);
+}
+
+sub Dumpf { return Data::Dumper->Dump(@_) }
+
+sub Dumpp { print Data::Dumper->Dump(@_) }
+
+#
+# reset the "seen" cache
+#
+sub Reset {
+ my($s) = shift;
+ $s->{seen} = {};
+ return $s;
+}
+
+sub Indent {
+ my($s, $v) = @_;
+ if (defined($v)) {
+ if ($v == 0) {
+ $s->{xpad} = "";
+ $s->{sep} = "";
+ }
+ else {
+ $s->{xpad} = " ";
+ $s->{sep} = "\n";
+ }
+ $s->{indent} = $v;
+ return $s;
+ }
+ else {
+ return $s->{indent};
+ }
+}
+
+sub Pad {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{pad} = $v), return $s) : $s->{pad};
+}
+
+sub Varname {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{varname} = $v), return $s) : $s->{varname};
+}
+
+sub Purity {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{purity} = $v), return $s) : $s->{purity};
+}
+
+sub Useqq {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{useqq} = $v), return $s) : $s->{useqq};
+}
+
+sub Terse {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{terse} = $v), return $s) : $s->{terse};
+}
+
+sub Freezer {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{freezer} = $v), return $s) : $s->{freezer};
+}
+
+sub Toaster {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{toaster} = $v), return $s) : $s->{toaster};
+}
+
+sub Deepcopy {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{deepcopy} = $v), return $s) : $s->{deepcopy};
+}
+
+sub Quotekeys {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{quotekeys} = $v), return $s) : $s->{quotekeys};
+}
+
+sub Bless {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{'bless'} = $v), return $s) : $s->{'bless'};
+}
+
+sub Maxdepth {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{'maxdepth'} = $v), return $s) : $s->{'maxdepth'};
+}
+
+sub Useperl {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{'useperl'} = $v), return $s) : $s->{'useperl'};
+}
+
+sub Sortkeys {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{'sortkeys'} = $v), return $s) : $s->{'sortkeys'};
+}
+
+sub Deparse {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{'deparse'} = $v), return $s) : $s->{'deparse'};
+}
+
+# used by qquote below
+my %esc = (
+ "\a" => "\\a",
+ "\b" => "\\b",
+ "\t" => "\\t",
+ "\n" => "\\n",
+ "\f" => "\\f",
+ "\r" => "\\r",
+ "\e" => "\\e",
+);
+
+# put a string value in double quotes
+sub qquote {
+ local($_) = shift;
+ s/([\\\"\@\$])/\\$1/g;
+ my $bytes; { use bytes; $bytes = length }
+ s/([^\x00-\x7f])/'\x{'.sprintf("%x",ord($1)).'}'/ge if $bytes > length;
+ return qq("$_") unless
+ /[^ !"\#\$%&'()*+,\-.\/0-9:;<=>?\@A-Z[\\\]^_`a-z{|}~]/; # fast exit
+
+ my $high = shift || "";
+ s/([\a\b\t\n\f\r\e])/$esc{$1}/g;
+
+ if (ord('^')==94) { # ascii
+ # no need for 3 digits in escape for these
+ s/([\0-\037])(?!\d)/'\\'.sprintf('%o',ord($1))/eg;
+ s/([\0-\037\177])/'\\'.sprintf('%03o',ord($1))/eg;
+ # all but last branch below not supported --BEHAVIOR SUBJECT TO CHANGE--
+ if ($high eq "iso8859") {
+ s/([\200-\240])/'\\'.sprintf('%o',ord($1))/eg;
+ } elsif ($high eq "utf8") {
+# use utf8;
+# $str =~ s/([^\040-\176])/sprintf "\\x{%04x}", ord($1)/ge;
+ } elsif ($high eq "8bit") {
+ # leave it as it is
+ } else {
+ s/([\200-\377])/'\\'.sprintf('%03o',ord($1))/eg;
+ s/([^\040-\176])/sprintf "\\x{%04x}", ord($1)/ge;
+ }
+ }
+ else { # ebcdic
+ s{([^ !"\#\$%&'()*+,\-.\/0-9:;<=>?\@A-Z[\\\]^_`a-z{|}~])(?!\d)}
+ {my $v = ord($1); '\\'.sprintf(($v <= 037 ? '%o' : '%03o'), $v)}eg;
+ s{([^ !"\#\$%&'()*+,\-.\/0-9:;<=>?\@A-Z[\\\]^_`a-z{|}~])}
+ {'\\'.sprintf('%03o',ord($1))}eg;
+ }
+
+ return qq("$_");
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Data::Dumper - stringified perl data structures, suitable for both printing and C<eval>
+
+=head1 SYNOPSIS
+
+ use Data::Dumper;
+
+ # simple procedural interface
+ print Dumper($foo, $bar);
+
+ # extended usage with names
+ print Data::Dumper->Dump([$foo, $bar], [qw(foo *ary)]);
+
+ # configuration variables
+ {
+ local $Data::Dump::Purity = 1;
+ eval Data::Dumper->Dump([$foo, $bar], [qw(foo *ary)]);
+ }
+
+ # OO usage
+ $d = Data::Dumper->new([$foo, $bar], [qw(foo *ary)]);
+ ...
+ print $d->Dump;
+ ...
+ $d->Purity(1)->Terse(1)->Deepcopy(1);
+ eval $d->Dump;
+
+
+=head1 DESCRIPTION
+
+Given a list of scalars or reference variables, writes out their contents in
+perl syntax. The references can also be objects. The contents of each
+variable is output in a single Perl statement. Handles self-referential
+structures correctly.
+
+The return value can be C<eval>ed to get back an identical copy of the
+original reference structure.
+
+Any references that are the same as one of those passed in will be named
+C<$VAR>I<n> (where I<n> is a numeric suffix), and other duplicate references
+to substructures within C<$VAR>I<n> will be appropriately labeled using arrow
+notation. You can specify names for individual values to be dumped if you
+use the C<Dump()> method, or you can change the default C<$VAR> prefix to
+something else. See C<$Data::Dumper::Varname> and C<$Data::Dumper::Terse>
+below.
+
+The default output of self-referential structures can be C<eval>ed, but the
+nested references to C<$VAR>I<n> will be undefined, since a recursive
+structure cannot be constructed using one Perl statement. You should set the
+C<Purity> flag to 1 to get additional statements that will correctly fill in
+these references.
+
+In the extended usage form, the references to be dumped can be given
+user-specified names. If a name begins with a C<*>, the output will
+describe the dereferenced type of the supplied reference for hashes and
+arrays, and coderefs. Output of names will be avoided where possible if
+the C<Terse> flag is set.
+
+In many cases, methods that are used to set the internal state of the
+object will return the object itself, so method calls can be conveniently
+chained together.
+
+Several styles of output are possible, all controlled by setting
+the C<Indent> flag. See L<Configuration Variables or Methods> below
+for details.
+
+
+=head2 Methods
+
+=over 4
+
+=item I<PACKAGE>->new(I<ARRAYREF [>, I<ARRAYREF]>)
+
+Returns a newly created C<Data::Dumper> object. The first argument is an
+anonymous array of values to be dumped. The optional second argument is an
+anonymous array of names for the values. The names need not have a leading
+C<$> sign, and must be comprised of alphanumeric characters. You can begin
+a name with a C<*> to specify that the dereferenced type must be dumped
+instead of the reference itself, for ARRAY and HASH references.
+
+The prefix specified by C<$Data::Dumper::Varname> will be used with a
+numeric suffix if the name for a value is undefined.
+
+Data::Dumper will catalog all references encountered while dumping the
+values. Cross-references (in the form of names of substructures in perl
+syntax) will be inserted at all possible points, preserving any structural
+interdependencies in the original set of values. Structure traversal is
+depth-first, and proceeds in order from the first supplied value to
+the last.
+
+=item I<$OBJ>->Dump I<or> I<PACKAGE>->Dump(I<ARRAYREF [>, I<ARRAYREF]>)
+
+Returns the stringified form of the values stored in the object (preserving
+the order in which they were supplied to C<new>), subject to the
+configuration options below. In a list context, it returns a list
+of strings corresponding to the supplied values.
+
+The second form, for convenience, simply calls the C<new> method on its
+arguments before dumping the object immediately.
+
+=item I<$OBJ>->Seen(I<[HASHREF]>)
+
+Queries or adds to the internal table of already encountered references.
+You must use C<Reset> to explicitly clear the table if needed. Such
+references are not dumped; instead, their names are inserted wherever they
+are encountered subsequently. This is useful especially for properly
+dumping subroutine references.
+
+Expects an anonymous hash of name => value pairs. Same rules apply for names
+as in C<new>. If no argument is supplied, will return the "seen" list of
+name => value pairs, in a list context. Otherwise, returns the object
+itself.
+
+=item I<$OBJ>->Values(I<[ARRAYREF]>)
+
+Queries or replaces the internal array of values that will be dumped.
+When called without arguments, returns the values. Otherwise, returns the
+object itself.
+
+=item I<$OBJ>->Names(I<[ARRAYREF]>)
+
+Queries or replaces the internal array of user supplied names for the values
+that will be dumped. When called without arguments, returns the names.
+Otherwise, returns the object itself.
+
+=item I<$OBJ>->Reset
+
+Clears the internal table of "seen" references and returns the object
+itself.
+
+=back
+
+=head2 Functions
+
+=over 4
+
+=item Dumper(I<LIST>)
+
+Returns the stringified form of the values in the list, subject to the
+configuration options below. The values will be named C<$VAR>I<n> in the
+output, where I<n> is a numeric suffix. Will return a list of strings
+in a list context.
+
+=back
+
+=head2 Configuration Variables or Methods
+
+Several configuration variables can be used to control the kind of output
+generated when using the procedural interface. These variables are usually
+C<local>ized in a block so that other parts of the code are not affected by
+the change.
+
+These variables determine the default state of the object created by calling
+the C<new> method, but cannot be used to alter the state of the object
+thereafter. The equivalent method names should be used instead to query
+or set the internal state of the object.
+
+The method forms return the object itself when called with arguments,
+so that they can be chained together nicely.
+
+=over 4
+
+=item $Data::Dumper::Indent I<or> I<$OBJ>->Indent(I<[NEWVAL]>)
+
+Controls the style of indentation. It can be set to 0, 1, 2 or 3. Style 0
+spews output without any newlines, indentation, or spaces between list
+items. It is the most compact format possible that can still be called
+valid perl. Style 1 outputs a readable form with newlines but no fancy
+indentation (each level in the structure is simply indented by a fixed
+amount of whitespace). Style 2 (the default) outputs a very readable form
+which takes into account the length of hash keys (so the hash value lines
+up). Style 3 is like style 2, but also annotates the elements of arrays
+with their index (but the comment is on its own line, so array output
+consumes twice the number of lines). Style 2 is the default.
+
+=item $Data::Dumper::Purity I<or> I<$OBJ>->Purity(I<[NEWVAL]>)
+
+Controls the degree to which the output can be C<eval>ed to recreate the
+supplied reference structures. Setting it to 1 will output additional perl
+statements that will correctly recreate nested references. The default is
+0.
+
+=item $Data::Dumper::Pad I<or> I<$OBJ>->Pad(I<[NEWVAL]>)
+
+Specifies the string that will be prefixed to every line of the output.
+Empty string by default.
+
+=item $Data::Dumper::Varname I<or> I<$OBJ>->Varname(I<[NEWVAL]>)
+
+Contains the prefix to use for tagging variable names in the output. The
+default is "VAR".
+
+=item $Data::Dumper::Useqq I<or> I<$OBJ>->Useqq(I<[NEWVAL]>)
+
+When set, enables the use of double quotes for representing string values.
+Whitespace other than space will be represented as C<[\n\t\r]>, "unsafe"
+characters will be backslashed, and unprintable characters will be output as
+quoted octal integers. Since setting this variable imposes a performance
+penalty, the default is 0. C<Dump()> will run slower if this flag is set,
+since the fast XSUB implementation doesn't support it yet.
+
+=item $Data::Dumper::Terse I<or> I<$OBJ>->Terse(I<[NEWVAL]>)
+
+When set, Data::Dumper will emit single, non-self-referential values as
+atoms/terms rather than statements. This means that the C<$VAR>I<n> names
+will be avoided where possible, but be advised that such output may not
+always be parseable by C<eval>.
+
+=item $Data::Dumper::Freezer I<or> $I<OBJ>->Freezer(I<[NEWVAL]>)
+
+Can be set to a method name, or to an empty string to disable the feature.
+Data::Dumper will invoke that method via the object before attempting to
+stringify it. This method can alter the contents of the object (if, for
+instance, it contains data allocated from C), and even rebless it in a
+different package. The client is responsible for making sure the specified
+method can be called via the object, and that the object ends up containing
+only perl data types after the method has been called. Defaults to an empty
+string.
+
+=item $Data::Dumper::Toaster I<or> $I<OBJ>->Toaster(I<[NEWVAL]>)
+
+Can be set to a method name, or to an empty string to disable the feature.
+Data::Dumper will emit a method call for any objects that are to be dumped
+using the syntax C<bless(DATA, CLASS)-E<gt>METHOD()>. Note that this means that
+the method specified will have to perform any modifications required on the
+object (like creating new state within it, and/or reblessing it in a
+different package) and then return it. The client is responsible for making
+sure the method can be called via the object, and that it returns a valid
+object. Defaults to an empty string.
+
+=item $Data::Dumper::Deepcopy I<or> $I<OBJ>->Deepcopy(I<[NEWVAL]>)
+
+Can be set to a boolean value to enable deep copies of structures.
+Cross-referencing will then only be done when absolutely essential
+(i.e., to break reference cycles). Default is 0.
+
+=item $Data::Dumper::Quotekeys I<or> $I<OBJ>->Quotekeys(I<[NEWVAL]>)
+
+Can be set to a boolean value to control whether hash keys are quoted.
+A false value will avoid quoting hash keys when it looks like a simple
+string. Default is 1, which will always enclose hash keys in quotes.
+
+=item $Data::Dumper::Bless I<or> $I<OBJ>->Bless(I<[NEWVAL]>)
+
+Can be set to a string that specifies an alternative to the C<bless>
+builtin operator used to create objects. A function with the specified
+name should exist, and should accept the same arguments as the builtin.
+Default is C<bless>.
+
+=item $Data::Dumper::Maxdepth I<or> $I<OBJ>->Maxdepth(I<[NEWVAL]>)
+
+Can be set to a positive integer that specifies the depth beyond which
+which we don't venture into a structure. Has no effect when
+C<Data::Dumper::Purity> is set. (Useful in debugger when we often don't
+want to see more than enough). Default is 0, which means there is
+no maximum depth.
+
+=item $Data::Dumper::Useperl I<or> $I<OBJ>->Useperl(I<[NEWVAL]>)
+
+Can be set to a boolean value which controls whether the pure Perl
+implementation of C<Data::Dumper> is used. The C<Data::Dumper> module is
+a dual implementation, with almost all functionality written in both
+pure Perl and also in XS ('C'). Since the XS version is much faster, it
+will always be used if possible. This option lets you override the
+default behavior, usually for testing purposes only. Default is 0, which
+means the XS implementation will be used if possible.
+
+=item $Data::Dumper::Sortkeys I<or> $I<OBJ>->Sortkeys(I<[NEWVAL]>)
+
+Can be set to a boolean value to control whether hash keys are dumped in
+sorted order. A true value will cause the keys of all hashes to be
+dumped in Perl's default sort order. Can also be set to a subroutine
+reference which will be called for each hash that is dumped. In this
+case C<Data::Dumper> will call the subroutine once for each hash,
+passing it the reference of the hash. The purpose of the subroutine is
+to return a reference to an array of the keys that will be dumped, in
+the order that they should be dumped. Using this feature, you can
+control both the order of the keys, and which keys are actually used. In
+other words, this subroutine acts as a filter by which you can exclude
+certain keys from being dumped. Default is 0, which means that hash keys
+are not sorted.
+
+=item $Data::Dumper::Deparse I<or> $I<OBJ>->Deparse(I<[NEWVAL]>)
+
+Can be set to a boolean value to control whether code references are
+turned into perl source code. If set to a true value, C<B::Deparse>
+will be used to get the source of the code reference. Using this option
+will force using the Perl implementation of the dumper, since the fast
+XSUB implementation doesn't support it.
+
+Caution : use this option only if you know that your coderefs will be
+properly reconstructed by C<B::Deparse>.
+
+=back
+
+=head2 Exports
+
+=over 4
+
+=item Dumper
+
+=back
+
+=head1 EXAMPLES
+
+Run these code snippets to get a quick feel for the behavior of this
+module. When you are through with these examples, you may want to
+add or change the various configuration variables described above,
+to see their behavior. (See the testsuite in the Data::Dumper
+distribution for more examples.)
+
+
+ use Data::Dumper;
+
+ package Foo;
+ sub new {bless {'a' => 1, 'b' => sub { return "foo" }}, $_[0]};
+
+ package Fuz; # a weird REF-REF-SCALAR object
+ sub new {bless \($_ = \ 'fu\'z'), $_[0]};
+
+ package main;
+ $foo = Foo->new;
+ $fuz = Fuz->new;
+ $boo = [ 1, [], "abcd", \*foo,
+ {1 => 'a', 023 => 'b', 0x45 => 'c'},
+ \\"p\q\'r", $foo, $fuz];
+
+ ########
+ # simple usage
+ ########
+
+ $bar = eval(Dumper($boo));
+ print($@) if $@;
+ print Dumper($boo), Dumper($bar); # pretty print (no array indices)
+
+ $Data::Dumper::Terse = 1; # don't output names where feasible
+ $Data::Dumper::Indent = 0; # turn off all pretty print
+ print Dumper($boo), "\n";
+
+ $Data::Dumper::Indent = 1; # mild pretty print
+ print Dumper($boo);
+
+ $Data::Dumper::Indent = 3; # pretty print with array indices
+ print Dumper($boo);
+
+ $Data::Dumper::Useqq = 1; # print strings in double quotes
+ print Dumper($boo);
+
+
+ ########
+ # recursive structures
+ ########
+
+ @c = ('c');
+ $c = \@c;
+ $b = {};
+ $a = [1, $b, $c];
+ $b->{a} = $a;
+ $b->{b} = $a->[1];
+ $b->{c} = $a->[2];
+ print Data::Dumper->Dump([$a,$b,$c], [qw(a b c)]);
+
+
+ $Data::Dumper::Purity = 1; # fill in the holes for eval
+ print Data::Dumper->Dump([$a, $b], [qw(*a b)]); # print as @a
+ print Data::Dumper->Dump([$b, $a], [qw(*b a)]); # print as %b
+
+
+ $Data::Dumper::Deepcopy = 1; # avoid cross-refs
+ print Data::Dumper->Dump([$b, $a], [qw(*b a)]);
+
+
+ $Data::Dumper::Purity = 0; # avoid cross-refs
+ print Data::Dumper->Dump([$b, $a], [qw(*b a)]);
+
+ ########
+ # deep structures
+ ########
+
+ $a = "pearl";
+ $b = [ $a ];
+ $c = { 'b' => $b };
+ $d = [ $c ];
+ $e = { 'd' => $d };
+ $f = { 'e' => $e };
+ print Data::Dumper->Dump([$f], [qw(f)]);
+
+ $Data::Dumper::Maxdepth = 3; # no deeper than 3 refs down
+ print Data::Dumper->Dump([$f], [qw(f)]);
+
+
+ ########
+ # object-oriented usage
+ ########
+
+ $d = Data::Dumper->new([$a,$b], [qw(a b)]);
+ $d->Seen({'*c' => $c}); # stash a ref without printing it
+ $d->Indent(3);
+ print $d->Dump;
+ $d->Reset->Purity(0); # empty the seen cache
+ print join "----\n", $d->Dump;
+
+
+ ########
+ # persistence
+ ########
+
+ package Foo;
+ sub new { bless { state => 'awake' }, shift }
+ sub Freeze {
+ my $s = shift;
+ print STDERR "preparing to sleep\n";
+ $s->{state} = 'asleep';
+ return bless $s, 'Foo::ZZZ';
+ }
+
+ package Foo::ZZZ;
+ sub Thaw {
+ my $s = shift;
+ print STDERR "waking up\n";
+ $s->{state} = 'awake';
+ return bless $s, 'Foo';
+ }
+
+ package Foo;
+ use Data::Dumper;
+ $a = Foo->new;
+ $b = Data::Dumper->new([$a], ['c']);
+ $b->Freezer('Freeze');
+ $b->Toaster('Thaw');
+ $c = $b->Dump;
+ print $c;
+ $d = eval $c;
+ print Data::Dumper->Dump([$d], ['d']);
+
+
+ ########
+ # symbol substitution (useful for recreating CODE refs)
+ ########
+
+ sub foo { print "foo speaking\n" }
+ *other = \&foo;
+ $bar = [ \&other ];
+ $d = Data::Dumper->new([\&other,$bar],['*other','bar']);
+ $d->Seen({ '*foo' => \&foo });
+ print $d->Dump;
+
+
+ ########
+ # sorting and filtering hash keys
+ ########
+
+ $Data::Dumper::Sortkeys = \&my_filter;
+ my $foo = { map { (ord, "$_$_$_") } 'I'..'Q' };
+ my $bar = { %$foo };
+ my $baz = { reverse %$foo };
+ print Dumper [ $foo, $bar, $baz ];
+
+ sub my_filter {
+ my ($hash) = @_;
+ # return an array ref containing the hash keys to dump
+ # in the order that you want them to be dumped
+ return [
+ # Sort the keys of %$foo in reverse numeric order
+ $hash eq $foo ? (sort {$b <=> $a} keys %$hash) :
+ # Only dump the odd number keys of %$bar
+ $hash eq $bar ? (grep {$_ % 2} keys %$hash) :
+ # Sort keys in default order for all other hashes
+ (sort keys %$hash)
+ ];
+ }
+
+=head1 BUGS
+
+Due to limitations of Perl subroutine call semantics, you cannot pass an
+array or hash. Prepend it with a C<\> to pass its reference instead. This
+will be remedied in time, now that Perl has subroutine prototypes.
+For now, you need to use the extended usage form, and prepend the
+name with a C<*> to output it as a hash or array.
+
+C<Data::Dumper> cheats with CODE references. If a code reference is
+encountered in the structure being processed (and if you haven't set
+the C<Deparse> flag), an anonymous subroutine that
+contains the string '"DUMMY"' will be inserted in its place, and a warning
+will be printed if C<Purity> is set. You can C<eval> the result, but bear
+in mind that the anonymous sub that gets created is just a placeholder.
+Someday, perl will have a switch to cache-on-demand the string
+representation of a compiled piece of code, I hope. If you have prior
+knowledge of all the code refs that your data structures are likely
+to have, you can use the C<Seen> method to pre-seed the internal reference
+table and make the dumped output point to them, instead. See L<EXAMPLES>
+above.
+
+The C<Useqq> and C<Deparse> flags makes Dump() run slower, since the
+XSUB implementation does not support them.
+
+SCALAR objects have the weirdest looking C<bless> workaround.
+
+
+=head1 AUTHOR
+
+Gurusamy Sarathy gsar@activestate.com
+
+Copyright (c) 1996-98 Gurusamy Sarathy. All rights reserved.
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+
+=head1 VERSION
+
+Version 2.12 (unreleased)
+
+=head1 SEE ALSO
+
+perl(1)
+
+=cut
diff --git a/Master/xemtex/perl/lib/Digest/MD5.pm b/Master/xemtex/perl/lib/Digest/MD5.pm
new file mode 100644
index 00000000000..372e007cb70
--- /dev/null
+++ b/Master/xemtex/perl/lib/Digest/MD5.pm
@@ -0,0 +1,279 @@
+package Digest::MD5;
+
+use strict;
+use vars qw($VERSION @ISA @EXPORT_OK);
+
+$VERSION = '2.20'; # $Date: 2002/05/06 05:15:09 $
+
+require Exporter;
+*import = \&Exporter::import;
+@EXPORT_OK = qw(md5 md5_hex md5_base64);
+
+require DynaLoader;
+@ISA=qw(DynaLoader);
+
+eval {
+ Digest::MD5->bootstrap($VERSION);
+};
+if ($@) {
+ my $olderr = $@;
+ eval {
+ # Try to load the pure perl version
+ require Digest::Perl::MD5;
+
+ Digest::Perl::MD5->import(qw(md5 md5_hex md5_base64));
+ push(@ISA, "Digest::Perl::MD5"); # make OO interface work
+ };
+ if ($@) {
+ # restore the original error
+ die $olderr;
+ }
+}
+else {
+ *reset = \&new;
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Digest::MD5 - Perl interface to the MD5 Algorithm
+
+=head1 SYNOPSIS
+
+ # Functional style
+ use Digest::MD5 qw(md5 md5_hex md5_base64);
+
+ $digest = md5($data);
+ $digest = md5_hex($data);
+ $digest = md5_base64($data);
+
+ # OO style
+ use Digest::MD5;
+
+ $ctx = Digest::MD5->new;
+
+ $ctx->add($data);
+ $ctx->addfile(*FILE);
+
+ $digest = $ctx->digest;
+ $digest = $ctx->hexdigest;
+ $digest = $ctx->b64digest;
+
+=head1 DESCRIPTION
+
+The C<Digest::MD5> module allows you to use the RSA Data Security
+Inc. MD5 Message Digest algorithm from within Perl programs. The
+algorithm takes as input a message of arbitrary length and produces as
+output a 128-bit "fingerprint" or "message digest" of the input.
+
+The C<Digest::MD5> module provide a procedural interface for simple
+use, as well as an object oriented interface that can handle messages
+of arbitrary length and which can read files directly.
+
+A binary digest will be 16 bytes long. A hex digest will be 32
+characters long. A base64 digest will be 22 characters long.
+
+=head1 FUNCTIONS
+
+The following functions can be exported from the C<Digest::MD5>
+module. No functions are exported by default.
+
+=over 4
+
+=item md5($data,...)
+
+This function will concatenate all arguments, calculate the MD5 digest
+of this "message", and return it in binary form.
+
+=item md5_hex($data,...)
+
+Same as md5(), but will return the digest in hexadecimal form.
+
+=item md5_base64($data,...)
+
+Same as md5(), but will return the digest as a base64 encoded string.
+
+The base64 encoded string returned is not padded to be a multiple of 4
+bytes long. If you want interoperability with other base64 encoded
+md5 digests you might want to append the string "==" to the result.
+
+=back
+
+=head1 METHODS
+
+The following methods are available:
+
+=over 4
+
+=item $md5 = Digest::MD5->new
+
+The constructor returns a new C<Digest::MD5> object which encapsulate
+the state of the MD5 message-digest algorithm. You can add data to
+the object and finally ask for the digest.
+
+If called as an instance method (i.e. $md5->new) it will just reset the
+state the object to the state of a newly created object. No new
+object is created in this case.
+
+=item $md5->reset
+
+This is just an alias for $md5->new.
+
+=item $md5->add($data,...)
+
+The $data provided as argument are appended to the message we
+calculate the digest for. The return value is the $md5 object itself.
+
+=item $md5->addfile($io_handle)
+
+The $io_handle is read until EOF and the content is appended to the
+message we calculate the digest for. The return value is the $md5
+object itself.
+
+In most cases you want to make sure that the $io_handle is set up to
+be in binmode().
+
+=item $md5->digest
+
+Return the binary digest for the message.
+
+Note that the C<digest> operation is effectively a destructive,
+read-once operation. Once it has been performed, the C<Digest::MD5>
+object is automatically C<reset> and can be used to calculate another
+digest value.
+
+=item $md5->hexdigest
+
+Same as $md5->digest, but will return the digest in hexadecimal form.
+
+=item $md5->b64digest
+
+Same as $md5->digest, but will return the digest as a base64 encoded
+string.
+
+The base64 encoded string returned is not padded to be a multiple of 4
+bytes long. If you want interoperability with other base64 encoded
+md5 digests you might want to append the string "==" to the result.
+
+=back
+
+
+=head1 EXAMPLES
+
+The simplest way to use this library is to import the md5_hex()
+function (or one of its cousins):
+
+ use Digest::MD5 qw(md5_hex);
+ print "Digest is ", md5_hex("foobarbaz"), "\n";
+
+The above example would print out the message
+
+ Digest is 6df23dc03f9b54cc38a0fc1483df6e21
+
+provided that the implementation is working correctly. The same
+checksum can also be calculated in OO style:
+
+ use Digest::MD5;
+
+ $md5 = Digest::MD5->new;
+ $md5->add('foo', 'bar');
+ $md5->add('baz');
+ $digest = $md5->hexdigest;
+
+ print "Digest is $digest\n";
+
+With OO style you can break the message arbitrary. This means that we
+are no longer limited to have space for the whole message in memory, i.e.
+we can handle messages of any size.
+
+This is useful when calculating checksum for files:
+
+ use Digest::MD5;
+
+ my $file = shift || "/etc/passwd";
+ open(FILE, $file) or die "Can't open '$file': $!";
+ binmode(FILE);
+
+ $md5 = Digest::MD5->new;
+ while (<FILE>) {
+ $md5->add($_);
+ }
+ close(FILE);
+ print $md5->b64digest, " $file\n";
+
+Or we can use the builtin addfile method for more efficient reading of
+the file:
+
+ use Digest::MD5;
+
+ my $file = shift || "/etc/passwd";
+ open(FILE, $file) or die "Can't open '$file': $!";
+ binmode(FILE);
+
+ print Digest::MD5->new->addfile(*FILE)->hexdigest, " $file\n";
+
+=head1 SEE ALSO
+
+L<Digest>,
+L<Digest::MD2>,
+L<Digest::SHA1>,
+L<Digest::HMAC>
+
+L<md5sum(1)>
+
+RFC 1321
+
+=head1 COPYRIGHT
+
+This library is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+ Copyright 1998-2002 Gisle Aas.
+ Copyright 1995-1996 Neil Winton.
+ Copyright 1991-1992 RSA Data Security, Inc.
+
+The MD5 algorithm is defined in RFC 1321. The basic C code
+implementing the algorithm is derived from that in the RFC and is
+covered by the following copyright:
+
+=over 4
+
+=item
+
+Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+rights reserved.
+
+License to copy and use this software is granted provided that it
+is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+Algorithm" in all material mentioning or referencing this software
+or this function.
+
+License is also granted to make and use derivative works provided
+that such works are identified as "derived from the RSA Data
+Security, Inc. MD5 Message-Digest Algorithm" in all material
+mentioning or referencing the derived work.
+
+RSA Data Security, Inc. makes no representations concerning either
+the merchantability of this software or the suitability of this
+software for any particular purpose. It is provided "as is"
+without express or implied warranty of any kind.
+
+These notices must be retained in any copies of any part of this
+documentation and/or software.
+
+=back
+
+This copyright does not prohibit distribution of any version of Perl
+containing this extension under the terms of the GNU or Artistic
+licenses.
+
+=head1 AUTHORS
+
+The original MD5 interface was written by Neil Winton
+(C<N.Winton@axion.bt.co.uk>).
+
+This release was made by Gisle Aas <gisle@ActiveState.com>
+
+=cut
diff --git a/Master/xemtex/perl/lib/DynaLoader.pm b/Master/xemtex/perl/lib/DynaLoader.pm
new file mode 100644
index 00000000000..da7923e2bc2
--- /dev/null
+++ b/Master/xemtex/perl/lib/DynaLoader.pm
@@ -0,0 +1,826 @@
+
+# Generated from DynaLoader.pm.PL
+
+package DynaLoader;
+
+# And Gandalf said: 'Many folk like to know beforehand what is to
+# be set on the table; but those who have laboured to prepare the
+# feast like to keep their secret; for wonder makes the words of
+# praise louder.'
+
+# (Quote from Tolkien suggested by Anno Siegel.)
+#
+# See pod text at end of file for documentation.
+# See also ext/DynaLoader/README in source tree for other information.
+#
+# Tim.Bunce@ig.co.uk, August 1994
+
+use vars qw($VERSION *AUTOLOAD);
+
+$VERSION = 1.04; # avoid typo warning
+
+require AutoLoader;
+*AUTOLOAD = \&AutoLoader::AUTOLOAD;
+
+use Config;
+
+# The following require can't be removed during maintenance
+# releases, sadly, because of the risk of buggy code that does
+# require Carp; Carp::croak "..."; without brackets dying
+# if Carp hasn't been loaded in earlier compile time. :-(
+# We'll let those bugs get found on the development track.
+require Carp if $] < 5.00450;
+
+# enable debug/trace messages from DynaLoader perl code
+$dl_debug = $ENV{PERL_DL_DEBUG} || 0 unless defined $dl_debug;
+
+#
+# Flags to alter dl_load_file behaviour. Assigned bits:
+# 0x01 make symbols available for linking later dl_load_file's.
+# (only known to work on Solaris 2 using dlopen(RTLD_GLOBAL))
+# (ignored under VMS; effect is built-in to image linking)
+#
+# This is called as a class method $module->dl_load_flags. The
+# definition here will be inherited and result on "default" loading
+# behaviour unless a sub-class of DynaLoader defines its own version.
+#
+
+sub dl_load_flags { 0x00 }
+
+# ($dl_dlext, $dlsrc)
+# = @Config::Config{'dlext', 'dlsrc'};
+ ($dl_dlext, $dlsrc) = ('dll','dl_win32.xs')
+;
+# Some systems need special handling to expand file specifications
+# (VMS support by Charles Bailey <bailey@HMIVAX.HUMGEN.UPENN.EDU>)
+# See dl_expandspec() for more details. Should be harmless but
+# inefficient to define on systems that don't need it.
+$Is_VMS = $^O eq 'VMS';
+$do_expand = $Is_VMS;
+$Is_MacOS = $^O eq 'MacOS';
+
+my $Mac_FS;
+$Mac_FS = eval { require Mac::FileSpec::Unixish } if $Is_MacOS;
+
+@dl_require_symbols = (); # names of symbols we need
+@dl_resolve_using = (); # names of files to link with
+@dl_library_path = (); # path to look for files
+
+#XSLoader.pm may have added elements before we were required
+#@dl_librefs = (); # things we have loaded
+#@dl_modules = (); # Modules we have loaded
+
+# This is a fix to support DLD's unfortunate desire to relink -lc
+@dl_resolve_using = dl_findfile('-lc') if $dlsrc eq "dl_dld.xs";
+
+# Initialise @dl_library_path with the 'standard' library path
+# for this platform as determined by Configure.
+
+push(@dl_library_path, split(' ', $Config::Config{libpth}));
+
+
+my $ldlibpthname = $Config::Config{ldlibpthname};
+my $ldlibpthname_defined = defined $Config::Config{ldlibpthname};
+my $pthsep = $Config::Config{path_sep};
+
+# Add to @dl_library_path any extra directories we can gather from environment
+# during runtime.
+
+if ($ldlibpthname_defined &&
+ exists $ENV{$ldlibpthname}) {
+ push(@dl_library_path, split(/$pthsep/, $ENV{$ldlibpthname}));
+}
+
+# E.g. HP-UX supports both its native SHLIB_PATH *and* LD_LIBRARY_PATH.
+
+if ($ldlibpthname_defined &&
+ $ldlibpthname ne 'LD_LIBRARY_PATH' &&
+ exists $ENV{LD_LIBRARY_PATH}) {
+ push(@dl_library_path, split(/$pthsep/, $ENV{LD_LIBRARY_PATH}));
+}
+
+
+# No prizes for guessing why we don't say 'bootstrap DynaLoader;' here.
+# NOTE: All dl_*.xs (including dl_none.xs) define a dl_error() XSUB
+boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) &&
+ !defined(&dl_error);
+
+if ($dl_debug) {
+ print STDERR "DynaLoader.pm loaded (@INC, @dl_library_path)\n";
+ print STDERR "DynaLoader not linked into this perl\n"
+ unless defined(&boot_DynaLoader);
+}
+
+1; # End of main code
+
+
+sub croak { require Carp; Carp::croak(@_) }
+
+sub bootstrap_inherit {
+ my $module = $_[0];
+ local *isa = *{"$module\::ISA"};
+ local @isa = (@isa, 'DynaLoader');
+ # Cannot goto due to delocalization. Will report errors on a wrong line?
+ bootstrap(@_);
+}
+
+# The bootstrap function cannot be autoloaded (without complications)
+# so we define it here:
+
+sub bootstrap {
+ # use local vars to enable $module.bs script to edit values
+ local(@args) = @_;
+ local($module) = $args[0];
+ local(@dirs, $file);
+
+ unless ($module) {
+ require Carp;
+ Carp::confess("Usage: DynaLoader::bootstrap(module)");
+ }
+
+ # A common error on platforms which don't support dynamic loading.
+ # Since it's fatal and potentially confusing we give a detailed message.
+ croak("Can't load module $module, dynamic loading not available in this perl.\n".
+ " (You may need to build a new perl executable which either supports\n".
+ " dynamic loading or has the $module module statically linked into it.)\n")
+ unless defined(&dl_load_file);
+
+ my @modparts = split(/::/,$module);
+ my $modfname = $modparts[-1];
+
+ # Some systems have restrictions on files names for DLL's etc.
+ # mod2fname returns appropriate file base name (typically truncated)
+ # It may also edit @modparts if required.
+ $modfname = &mod2fname(\@modparts) if defined &mod2fname;
+
+ # Truncate the module name to 8.3 format for NetWare
+ if (($^O eq 'NetWare') && (length($modfname) > 8)) {
+ $modfname = substr($modfname, 0, 8);
+ }
+
+ my $modpname = join(($Is_MacOS ? ':' : '/'),@modparts);
+
+ print STDERR "DynaLoader::bootstrap for $module ",
+ ($Is_MacOS
+ ? "(:auto:$modpname:$modfname.$dl_dlext)\n" :
+ "(auto/$modpname/$modfname.$dl_dlext)\n")
+ if $dl_debug;
+
+ foreach (@INC) {
+ chop($_ = VMS::Filespec::unixpath($_)) if $Is_VMS;
+ my $dir;
+ if ($Is_MacOS) {
+ my $path = $_;
+ if ($Mac_FS && ! -d $path) {
+ $path = Mac::FileSpec::Unixish::nativize($path);
+ }
+ $path .= ":" unless /:$/;
+ $dir = "${path}auto:$modpname";
+ } else {
+ $dir = "$_/auto/$modpname";
+ }
+
+ next unless -d $dir; # skip over uninteresting directories
+
+ # check for common cases to avoid autoload of dl_findfile
+ my $try = $Is_MacOS ? "$dir:$modfname.$dl_dlext" : "$dir/$modfname.$dl_dlext";
+ last if $file = ($do_expand) ? dl_expandspec($try) : ((-f $try) && $try);
+
+ # no luck here, save dir for possible later dl_findfile search
+ push @dirs, $dir;
+ }
+ # last resort, let dl_findfile have a go in all known locations
+ $file = dl_findfile(map("-L$_",@dirs,@INC), $modfname) unless $file;
+
+ croak("Can't locate loadable object for module $module in \@INC (\@INC contains: @INC)")
+ unless $file; # wording similar to error from 'require'
+
+ $file = uc($file) if $Is_VMS && $Config::Config{d_vms_case_sensitive_symbols};
+ my $bootname = "boot_$module";
+ $bootname =~ s/\W/_/g;
+ @dl_require_symbols = ($bootname);
+
+ # Execute optional '.bootstrap' perl script for this module.
+ # The .bs file can be used to configure @dl_resolve_using etc to
+ # match the needs of the individual module on this architecture.
+ my $bs = $file;
+ $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library
+ if (-s $bs) { # only read file if it's not empty
+ print STDERR "BS: $bs ($^O, $dlsrc)\n" if $dl_debug;
+ eval { do $bs; };
+ warn "$bs: $@\n" if $@;
+ }
+
+ my $boot_symbol_ref;
+
+ if ($^O eq 'darwin') {
+ if ($boot_symbol_ref = dl_find_symbol(0, $bootname)) {
+ goto boot; #extension library has already been loaded, e.g. darwin
+ }
+ }
+
+ # Many dynamic extension loading problems will appear to come from
+ # this section of code: XYZ failed at line 123 of DynaLoader.pm.
+ # Often these errors are actually occurring in the initialisation
+ # C code of the extension XS file. Perl reports the error as being
+ # in this perl code simply because this was the last perl code
+ # it executed.
+
+ my $libref = dl_load_file($file, $module->dl_load_flags) or
+ croak("Can't load '$file' for module $module: ".dl_error());
+
+ push(@dl_librefs,$libref); # record loaded object
+
+ my @unresolved = dl_undef_symbols();
+ if (@unresolved) {
+ require Carp;
+ Carp::carp("Undefined symbols present after loading $file: @unresolved\n");
+ }
+
+ $boot_symbol_ref = dl_find_symbol($libref, $bootname) or
+ croak("Can't find '$bootname' symbol in $file\n");
+
+ push(@dl_modules, $module); # record loaded module
+
+ boot:
+ my $xs = dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file);
+
+ # See comment block above
+ &$xs(@args);
+}
+
+
+#sub _check_file { # private utility to handle dl_expandspec vs -f tests
+# my($file) = @_;
+# return $file if (!$do_expand && -f $file); # the common case
+# return $file if ( $do_expand && ($file=dl_expandspec($file)));
+# return undef;
+#}
+
+
+# Let autosplit and the autoloader deal with these functions:
+__END__
+
+
+sub dl_findfile {
+ # Read ext/DynaLoader/DynaLoader.doc for detailed information.
+ # This function does not automatically consider the architecture
+ # or the perl library auto directories.
+ my (@args) = @_;
+ my (@dirs, $dir); # which directories to search
+ my (@found); # full paths to real files we have found
+ my $dl_ext= 'dll'; # $Config::Config{'dlext'} suffix for perl extensions
+ my $dl_so = 'dll'; # $Config::Config{'so'} suffix for shared libraries
+
+ print STDERR "dl_findfile(@args)\n" if $dl_debug;
+
+ # accumulate directories but process files as they appear
+ arg: foreach(@args) {
+ # Special fast case: full filepath requires no search
+ if ($Is_VMS && m%[:>/\]]% && -f $_) {
+ push(@found,dl_expandspec(VMS::Filespec::vmsify($_)));
+ last arg unless wantarray;
+ next;
+ }
+ elsif ($Is_MacOS) {
+ if (m/:/ && -f $_) {
+ push(@found,$_);
+ last arg unless wantarray;
+ }
+ }
+ elsif (m:/: && -f $_ && !$do_expand) {
+ push(@found,$_);
+ last arg unless wantarray;
+ next;
+ }
+
+ # Deal with directories first:
+ # Using a -L prefix is the preferred option (faster and more robust)
+ if (m:^-L:) { s/^-L//; push(@dirs, $_); next; }
+
+ if ($Is_MacOS) {
+ # Otherwise we try to try to spot directories by a heuristic
+ # (this is a more complicated issue than it first appears)
+ if (m/:/ && -d $_) { push(@dirs, $_); next; }
+ # Only files should get this far...
+ my(@names, $name); # what filenames to look for
+ s/^-l//;
+ push(@names, $_);
+ foreach $dir (@dirs, @dl_library_path) {
+ next unless -d $dir;
+ $dir =~ s/^([^:]+)$/:$1/;
+ $dir =~ s/:$//;
+ foreach $name (@names) {
+ my($file) = "$dir:$name";
+ print STDERR " checking in $dir for $name\n" if $dl_debug;
+ if (-f $file) {
+ push(@found, $file);
+ next arg; # no need to look any further
+ }
+ }
+ }
+ next;
+ }
+
+ # Otherwise we try to try to spot directories by a heuristic
+ # (this is a more complicated issue than it first appears)
+ if (m:/: && -d $_) { push(@dirs, $_); next; }
+
+ # VMS: we may be using native VMS directory syntax instead of
+ # Unix emulation, so check this as well
+ if ($Is_VMS && /[:>\]]/ && -d $_) { push(@dirs, $_); next; }
+
+ # Only files should get this far...
+ my(@names, $name); # what filenames to look for
+ if (m:-l: ) { # convert -lname to appropriate library name
+ s/-l//;
+ push(@names,"lib$_.$dl_so");
+ push(@names,"lib$_.a");
+ } else { # Umm, a bare name. Try various alternatives:
+ # these should be ordered with the most likely first
+ push(@names,"$_.$dl_ext") unless m/\.$dl_ext$/o;
+ push(@names,"$_.$dl_so") unless m/\.$dl_so$/o;
+ push(@names,"lib$_.$dl_so") unless m:/:;
+ push(@names,"$_.a") if !m/\.a$/ and $dlsrc eq "dl_dld.xs";
+ push(@names, $_);
+ }
+ foreach $dir (@dirs, @dl_library_path) {
+ next unless -d $dir;
+ chop($dir = VMS::Filespec::unixpath($dir)) if $Is_VMS;
+ foreach $name (@names) {
+ my($file) = "$dir/$name";
+ print STDERR " checking in $dir for $name\n" if $dl_debug;
+ $file = ($do_expand) ? dl_expandspec($file) : (-f $file && $file);
+ #$file = _check_file($file);
+ if ($file) {
+ push(@found, $file);
+ next arg; # no need to look any further
+ }
+ }
+ }
+ }
+ if ($dl_debug) {
+ foreach(@dirs) {
+ print STDERR " dl_findfile ignored non-existent directory: $_\n" unless -d $_;
+ }
+ print STDERR "dl_findfile found: @found\n";
+ }
+ return $found[0] unless wantarray;
+ @found;
+}
+
+
+sub dl_expandspec {
+ my($spec) = @_;
+ # Optional function invoked if DynaLoader.pm sets $do_expand.
+ # Most systems do not require or use this function.
+ # Some systems may implement it in the dl_*.xs file in which case
+ # this autoload version will not be called but is harmless.
+
+ # This function is designed to deal with systems which treat some
+ # 'filenames' in a special way. For example VMS 'Logical Names'
+ # (something like unix environment variables - but different).
+ # This function should recognise such names and expand them into
+ # full file paths.
+ # Must return undef if $spec is invalid or file does not exist.
+
+ my $file = $spec; # default output to input
+
+ if ($Is_VMS) { # dl_expandspec should be defined in dl_vms.xs
+ require Carp;
+ Carp::croak("dl_expandspec: should be defined in XS file!\n");
+ } else {
+ return undef unless -f $file;
+ }
+ print STDERR "dl_expandspec($spec) => $file\n" if $dl_debug;
+ $file;
+}
+
+sub dl_find_symbol_anywhere
+{
+ my $sym = shift;
+ my $libref;
+ foreach $libref (@dl_librefs) {
+ my $symref = dl_find_symbol($libref,$sym);
+ return $symref if $symref;
+ }
+ return undef;
+}
+
+=head1 NAME
+
+DynaLoader - Dynamically load C libraries into Perl code
+
+dl_error(), dl_findfile(), dl_expandspec(), dl_load_file(), dl_unload_file(), dl_find_symbol(), dl_find_symbol_anywhere(), dl_undef_symbols(), dl_install_xsub(), dl_load_flags(), bootstrap() - routines used by DynaLoader modules
+
+=head1 SYNOPSIS
+
+ package YourPackage;
+ require DynaLoader;
+ @ISA = qw(... DynaLoader ...);
+ bootstrap YourPackage;
+
+ # optional method for 'global' loading
+ sub dl_load_flags { 0x01 }
+
+
+=head1 DESCRIPTION
+
+This document defines a standard generic interface to the dynamic
+linking mechanisms available on many platforms. Its primary purpose is
+to implement automatic dynamic loading of Perl modules.
+
+This document serves as both a specification for anyone wishing to
+implement the DynaLoader for a new platform and as a guide for
+anyone wishing to use the DynaLoader directly in an application.
+
+The DynaLoader is designed to be a very simple high-level
+interface that is sufficiently general to cover the requirements
+of SunOS, HP-UX, NeXT, Linux, VMS and other platforms.
+
+It is also hoped that the interface will cover the needs of OS/2, NT
+etc and also allow pseudo-dynamic linking (using C<ld -A> at runtime).
+
+It must be stressed that the DynaLoader, by itself, is practically
+useless for accessing non-Perl libraries because it provides almost no
+Perl-to-C 'glue'. There is, for example, no mechanism for calling a C
+library function or supplying arguments. A C::DynaLib module
+is available from CPAN sites which performs that function for some
+common system types. And since the year 2000, there's also Inline::C,
+a module that allows you to write Perl subroutines in C. Also available
+from your local CPAN site.
+
+DynaLoader Interface Summary
+
+ @dl_library_path
+ @dl_resolve_using
+ @dl_require_symbols
+ $dl_debug
+ @dl_librefs
+ @dl_modules
+ Implemented in:
+ bootstrap($modulename) Perl
+ @filepaths = dl_findfile(@names) Perl
+ $flags = $modulename->dl_load_flags Perl
+ $symref = dl_find_symbol_anywhere($symbol) Perl
+
+ $libref = dl_load_file($filename, $flags) C
+ $status = dl_unload_file($libref) C
+ $symref = dl_find_symbol($libref, $symbol) C
+ @symbols = dl_undef_symbols() C
+ dl_install_xsub($name, $symref [, $filename]) C
+ $message = dl_error C
+
+=over 4
+
+=item @dl_library_path
+
+The standard/default list of directories in which dl_findfile() will
+search for libraries etc. Directories are searched in order:
+$dl_library_path[0], [1], ... etc
+
+@dl_library_path is initialised to hold the list of 'normal' directories
+(F</usr/lib>, etc) determined by B<Configure> (C<$Config{'libpth'}>). This should
+ensure portability across a wide range of platforms.
+
+@dl_library_path should also be initialised with any other directories
+that can be determined from the environment at runtime (such as
+LD_LIBRARY_PATH for SunOS).
+
+After initialisation @dl_library_path can be manipulated by an
+application using push and unshift before calling dl_findfile().
+Unshift can be used to add directories to the front of the search order
+either to save search time or to override libraries with the same name
+in the 'normal' directories.
+
+The load function that dl_load_file() calls may require an absolute
+pathname. The dl_findfile() function and @dl_library_path can be
+used to search for and return the absolute pathname for the
+library/object that you wish to load.
+
+=item @dl_resolve_using
+
+A list of additional libraries or other shared objects which can be
+used to resolve any undefined symbols that might be generated by a
+later call to load_file().
+
+This is only required on some platforms which do not handle dependent
+libraries automatically. For example the Socket Perl extension
+library (F<auto/Socket/Socket.so>) contains references to many socket
+functions which need to be resolved when it's loaded. Most platforms
+will automatically know where to find the 'dependent' library (e.g.,
+F</usr/lib/libsocket.so>). A few platforms need to be told the
+location of the dependent library explicitly. Use @dl_resolve_using
+for this.
+
+Example usage:
+
+ @dl_resolve_using = dl_findfile('-lsocket');
+
+=item @dl_require_symbols
+
+A list of one or more symbol names that are in the library/object file
+to be dynamically loaded. This is only required on some platforms.
+
+=item @dl_librefs
+
+An array of the handles returned by successful calls to dl_load_file(),
+made by bootstrap, in the order in which they were loaded.
+Can be used with dl_find_symbol() to look for a symbol in any of
+the loaded files.
+
+=item @dl_modules
+
+An array of module (package) names that have been bootstrap'ed.
+
+=item dl_error()
+
+Syntax:
+
+ $message = dl_error();
+
+Error message text from the last failed DynaLoader function. Note
+that, similar to errno in unix, a successful function call does not
+reset this message.
+
+Implementations should detect the error as soon as it occurs in any of
+the other functions and save the corresponding message for later
+retrieval. This will avoid problems on some platforms (such as SunOS)
+where the error message is very temporary (e.g., dlerror()).
+
+=item $dl_debug
+
+Internal debugging messages are enabled when $dl_debug is set true.
+Currently setting $dl_debug only affects the Perl side of the
+DynaLoader. These messages should help an application developer to
+resolve any DynaLoader usage problems.
+
+$dl_debug is set to C<$ENV{'PERL_DL_DEBUG'}> if defined.
+
+For the DynaLoader developer/porter there is a similar debugging
+variable added to the C code (see dlutils.c) and enabled if Perl was
+built with the B<-DDEBUGGING> flag. This can also be set via the
+PERL_DL_DEBUG environment variable. Set to 1 for minimal information or
+higher for more.
+
+=item dl_findfile()
+
+Syntax:
+
+ @filepaths = dl_findfile(@names)
+
+Determine the full paths (including file suffix) of one or more
+loadable files given their generic names and optionally one or more
+directories. Searches directories in @dl_library_path by default and
+returns an empty list if no files were found.
+
+Names can be specified in a variety of platform independent forms. Any
+names in the form B<-lname> are converted into F<libname.*>, where F<.*> is
+an appropriate suffix for the platform.
+
+If a name does not already have a suitable prefix and/or suffix then
+the corresponding file will be searched for by trying combinations of
+prefix and suffix appropriate to the platform: "$name.o", "lib$name.*"
+and "$name".
+
+If any directories are included in @names they are searched before
+@dl_library_path. Directories may be specified as B<-Ldir>. Any other
+names are treated as filenames to be searched for.
+
+Using arguments of the form C<-Ldir> and C<-lname> is recommended.
+
+Example:
+
+ @dl_resolve_using = dl_findfile(qw(-L/usr/5lib -lposix));
+
+
+=item dl_expandspec()
+
+Syntax:
+
+ $filepath = dl_expandspec($spec)
+
+Some unusual systems, such as VMS, require special filename handling in
+order to deal with symbolic names for files (i.e., VMS's Logical Names).
+
+To support these systems a dl_expandspec() function can be implemented
+either in the F<dl_*.xs> file or code can be added to the autoloadable
+dl_expandspec() function in F<DynaLoader.pm>. See F<DynaLoader.pm> for
+more information.
+
+=item dl_load_file()
+
+Syntax:
+
+ $libref = dl_load_file($filename, $flags)
+
+Dynamically load $filename, which must be the path to a shared object
+or library. An opaque 'library reference' is returned as a handle for
+the loaded object. Returns undef on error.
+
+The $flags argument to alters dl_load_file behaviour.
+Assigned bits:
+
+ 0x01 make symbols available for linking later dl_load_file's.
+ (only known to work on Solaris 2 using dlopen(RTLD_GLOBAL))
+ (ignored under VMS; this is a normal part of image linking)
+
+(On systems that provide a handle for the loaded object such as SunOS
+and HPUX, $libref will be that handle. On other systems $libref will
+typically be $filename or a pointer to a buffer containing $filename.
+The application should not examine or alter $libref in any way.)
+
+This is the function that does the real work. It should use the
+current values of @dl_require_symbols and @dl_resolve_using if required.
+
+ SunOS: dlopen($filename)
+ HP-UX: shl_load($filename)
+ Linux: dld_create_reference(@dl_require_symbols); dld_link($filename)
+ NeXT: rld_load($filename, @dl_resolve_using)
+ VMS: lib$find_image_symbol($filename,$dl_require_symbols[0])
+
+(The dlopen() function is also used by Solaris and some versions of
+Linux, and is a common choice when providing a "wrapper" on other
+mechanisms as is done in the OS/2 port.)
+
+=item dl_unload_file()
+
+Syntax:
+
+ $status = dl_unload_file($libref)
+
+Dynamically unload $libref, which must be an opaque 'library reference' as
+returned from dl_load_file. Returns one on success and zero on failure.
+
+This function is optional and may not necessarily be provided on all platforms.
+If it is defined, it is called automatically when the interpreter exits for
+every shared object or library loaded by DynaLoader::bootstrap. All such
+library references are stored in @dl_librefs by DynaLoader::Bootstrap as it
+loads the libraries. The files are unloaded in last-in, first-out order.
+
+This unloading is usually necessary when embedding a shared-object perl (e.g.
+one configured with -Duseshrplib) within a larger application, and the perl
+interpreter is created and destroyed several times within the lifetime of the
+application. In this case it is possible that the system dynamic linker will
+unload and then subsequently reload the shared libperl without relocating any
+references to it from any files DynaLoaded by the previous incarnation of the
+interpreter. As a result, any shared objects opened by DynaLoader may point to
+a now invalid 'ghost' of the libperl shared object, causing apparently random
+memory corruption and crashes. This behaviour is most commonly seen when using
+Apache and mod_perl built with the APXS mechanism.
+
+ SunOS: dlclose($libref)
+ HP-UX: ???
+ Linux: ???
+ NeXT: ???
+ VMS: ???
+
+(The dlclose() function is also used by Solaris and some versions of
+Linux, and is a common choice when providing a "wrapper" on other
+mechanisms as is done in the OS/2 port.)
+
+=item dl_loadflags()
+
+Syntax:
+
+ $flags = dl_loadflags $modulename;
+
+Designed to be a method call, and to be overridden by a derived class
+(i.e. a class which has DynaLoader in its @ISA). The definition in
+DynaLoader itself returns 0, which produces standard behavior from
+dl_load_file().
+
+=item dl_find_symbol()
+
+Syntax:
+
+ $symref = dl_find_symbol($libref, $symbol)
+
+Return the address of the symbol $symbol or C<undef> if not found. If the
+target system has separate functions to search for symbols of different
+types then dl_find_symbol() should search for function symbols first and
+then other types.
+
+The exact manner in which the address is returned in $symref is not
+currently defined. The only initial requirement is that $symref can
+be passed to, and understood by, dl_install_xsub().
+
+ SunOS: dlsym($libref, $symbol)
+ HP-UX: shl_findsym($libref, $symbol)
+ Linux: dld_get_func($symbol) and/or dld_get_symbol($symbol)
+ NeXT: rld_lookup("_$symbol")
+ VMS: lib$find_image_symbol($libref,$symbol)
+
+
+=item dl_find_symbol_anywhere()
+
+Syntax:
+
+ $symref = dl_find_symbol_anywhere($symbol)
+
+Applies dl_find_symbol() to the members of @dl_librefs and returns
+the first match found.
+
+=item dl_undef_symbols()
+
+Example
+
+ @symbols = dl_undef_symbols()
+
+Return a list of symbol names which remain undefined after load_file().
+Returns C<()> if not known. Don't worry if your platform does not provide
+a mechanism for this. Most do not need it and hence do not provide it,
+they just return an empty list.
+
+
+=item dl_install_xsub()
+
+Syntax:
+
+ dl_install_xsub($perl_name, $symref [, $filename])
+
+Create a new Perl external subroutine named $perl_name using $symref as
+a pointer to the function which implements the routine. This is simply
+a direct call to newXSUB(). Returns a reference to the installed
+function.
+
+The $filename parameter is used by Perl to identify the source file for
+the function if required by die(), caller() or the debugger. If
+$filename is not defined then "DynaLoader" will be used.
+
+
+=item bootstrap()
+
+Syntax:
+
+bootstrap($module)
+
+This is the normal entry point for automatic dynamic loading in Perl.
+
+It performs the following actions:
+
+=over 8
+
+=item *
+
+locates an auto/$module directory by searching @INC
+
+=item *
+
+uses dl_findfile() to determine the filename to load
+
+=item *
+
+sets @dl_require_symbols to C<("boot_$module")>
+
+=item *
+
+executes an F<auto/$module/$module.bs> file if it exists
+(typically used to add to @dl_resolve_using any files which
+are required to load the module on the current platform)
+
+=item *
+
+calls dl_load_flags() to determine how to load the file.
+
+=item *
+
+calls dl_load_file() to load the file
+
+=item *
+
+calls dl_undef_symbols() and warns if any symbols are undefined
+
+=item *
+
+calls dl_find_symbol() for "boot_$module"
+
+=item *
+
+calls dl_install_xsub() to install it as "${module}::bootstrap"
+
+=item *
+
+calls &{"${module}::bootstrap"} to bootstrap the module (actually
+it uses the function reference returned by dl_install_xsub for speed)
+
+=back
+
+=back
+
+
+=head1 AUTHOR
+
+Tim Bunce, 11 August 1994.
+
+This interface is based on the work and comments of (in no particular
+order): Larry Wall, Robert Sanders, Dean Roehrich, Jeff Okamoto, Anno
+Siegel, Thomas Neumann, Paul Marquess, Charles Bailey, myself and others.
+
+Larry Wall designed the elegant inherited bootstrap mechanism and
+implemented the first Perl 5 dynamic loader using it.
+
+Solaris global loading added by Nick Ing-Simmons with design/coding
+assistance from Tim Bunce, January 1996.
+
+=cut
diff --git a/Master/xemtex/perl/lib/Errno.pm b/Master/xemtex/perl/lib/Errno.pm
new file mode 100644
index 00000000000..e23fdf215d2
--- /dev/null
+++ b/Master/xemtex/perl/lib/Errno.pm
@@ -0,0 +1,221 @@
+#
+# This file is auto-generated. ***ANY*** changes here will be lost
+#
+
+package Errno;
+our (@EXPORT_OK,%EXPORT_TAGS,@ISA,$VERSION,%errno,$AUTOLOAD);
+use Exporter ();
+use Config;
+use strict;
+
+"$Config{'archname'}-$Config{'osvers'}" eq
+"MSWin32-x86-multi-thread-4.0" or
+ die "Errno architecture (MSWin32-x86-multi-thread-4.0) does not match executable architecture ($Config{'archname'}-$Config{'osvers'})";
+
+$VERSION = "1.09_00";
+$VERSION = eval $VERSION;
+@ISA = qw(Exporter);
+
+@EXPORT_OK = qw(EROFS ESHUTDOWN EPROTONOSUPPORT ENFILE ENOLCK
+ EADDRINUSE ECONNABORTED EBADF EDEADLK ENOTDIR EINVAL ENOTTY EXDEV
+ ELOOP ECONNREFUSED EISCONN EFBIG ECONNRESET EPFNOSUPPORT ENOENT
+ EDISCON EWOULDBLOCK EDOM EMSGSIZE EDESTADDRREQ ENOTSOCK EIO ENOSPC
+ EINPROGRESS ENOBUFS ERANGE EADDRNOTAVAIL EAFNOSUPPORT ENOSYS EINTR
+ EHOSTDOWN EREMOTE EILSEQ ENOMEM ENOTCONN ENETUNREACH EPIPE ESTALE
+ EDQUOT EUSERS EOPNOTSUPP ESPIPE EALREADY EMFILE ENAMETOOLONG EACCES
+ ENOEXEC EISDIR EPROCLIM EBUSY E2BIG EPERM EEXIST ETOOMANYREFS
+ ESOCKTNOSUPPORT ETIMEDOUT ENXIO ESRCH ENODEV EFAULT EAGAIN EMLINK
+ EDEADLOCK ENOPROTOOPT ECHILD ENETDOWN EHOSTUNREACH EPROTOTYPE
+ ENETRESET ENOTEMPTY);
+
+%EXPORT_TAGS = (
+ POSIX => [qw(
+ E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN EALREADY
+ EBADF EBUSY ECHILD ECONNABORTED ECONNREFUSED ECONNRESET EDEADLK
+ EDESTADDRREQ EDOM EDQUOT EEXIST EFAULT EFBIG EHOSTDOWN EHOSTUNREACH
+ EINPROGRESS EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK
+ EMSGSIZE ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH ENFILE ENOBUFS
+ ENODEV ENOENT ENOEXEC ENOLCK ENOMEM ENOPROTOOPT ENOSPC ENOSYS ENOTCONN
+ ENOTDIR ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOPNOTSUPP EPERM EPFNOSUPPORT
+ EPIPE EPROCLIM EPROTONOSUPPORT EPROTOTYPE ERANGE EREMOTE EROFS
+ ESHUTDOWN ESOCKTNOSUPPORT ESPIPE ESRCH ESTALE ETIMEDOUT ETOOMANYREFS
+ EUSERS EWOULDBLOCK EXDEV
+ )]
+);
+
+sub EPERM () { 1 }
+sub ENOENT () { 2 }
+sub ESRCH () { 3 }
+sub EINTR () { 4 }
+sub EIO () { 5 }
+sub ENXIO () { 6 }
+sub E2BIG () { 7 }
+sub ENOEXEC () { 8 }
+sub EBADF () { 9 }
+sub ECHILD () { 10 }
+sub EAGAIN () { 11 }
+sub ENOMEM () { 12 }
+sub EACCES () { 13 }
+sub EFAULT () { 14 }
+sub EBUSY () { 16 }
+sub EEXIST () { 17 }
+sub EXDEV () { 18 }
+sub ENODEV () { 19 }
+sub ENOTDIR () { 20 }
+sub EISDIR () { 21 }
+sub EINVAL () { 22 }
+sub ENFILE () { 23 }
+sub EMFILE () { 24 }
+sub ENOTTY () { 25 }
+sub EFBIG () { 27 }
+sub ENOSPC () { 28 }
+sub ESPIPE () { 29 }
+sub EROFS () { 30 }
+sub EMLINK () { 31 }
+sub EPIPE () { 32 }
+sub EDOM () { 33 }
+sub ERANGE () { 34 }
+sub EDEADLK () { 36 }
+sub EDEADLOCK () { 36 }
+sub ENAMETOOLONG () { 38 }
+sub ENOLCK () { 39 }
+sub ENOSYS () { 40 }
+sub ENOTEMPTY () { 41 }
+sub EILSEQ () { 42 }
+sub EWOULDBLOCK () { 10035 }
+sub EINPROGRESS () { 10036 }
+sub EALREADY () { 10037 }
+sub ENOTSOCK () { 10038 }
+sub EDESTADDRREQ () { 10039 }
+sub EMSGSIZE () { 10040 }
+sub EPROTOTYPE () { 10041 }
+sub ENOPROTOOPT () { 10042 }
+sub EPROTONOSUPPORT () { 10043 }
+sub ESOCKTNOSUPPORT () { 10044 }
+sub EOPNOTSUPP () { 10045 }
+sub EPFNOSUPPORT () { 10046 }
+sub EAFNOSUPPORT () { 10047 }
+sub EADDRINUSE () { 10048 }
+sub EADDRNOTAVAIL () { 10049 }
+sub ENETDOWN () { 10050 }
+sub ENETUNREACH () { 10051 }
+sub ENETRESET () { 10052 }
+sub ECONNABORTED () { 10053 }
+sub ECONNRESET () { 10054 }
+sub ENOBUFS () { 10055 }
+sub EISCONN () { 10056 }
+sub ENOTCONN () { 10057 }
+sub ESHUTDOWN () { 10058 }
+sub ETOOMANYREFS () { 10059 }
+sub ETIMEDOUT () { 10060 }
+sub ECONNREFUSED () { 10061 }
+sub ELOOP () { 10062 }
+sub EHOSTDOWN () { 10064 }
+sub EHOSTUNREACH () { 10065 }
+sub EPROCLIM () { 10067 }
+sub EUSERS () { 10068 }
+sub EDQUOT () { 10069 }
+sub ESTALE () { 10070 }
+sub EREMOTE () { 10071 }
+sub EDISCON () { 10101 }
+
+sub TIEHASH { bless [] }
+
+sub FETCH {
+ my ($self, $errname) = @_;
+ my $proto = prototype("Errno::$errname");
+ my $errno = "";
+ if (defined($proto) && $proto eq "") {
+ no strict 'refs';
+ $errno = &$errname;
+ $errno = 0 unless $! == $errno;
+ }
+ return $errno;
+}
+
+sub STORE {
+ require Carp;
+ Carp::confess("ERRNO hash is read only!");
+}
+
+*CLEAR = \&STORE;
+*DELETE = \&STORE;
+
+sub NEXTKEY {
+ my($k,$v);
+ while(($k,$v) = each %Errno::) {
+ my $proto = prototype("Errno::$k");
+ last if (defined($proto) && $proto eq "");
+ }
+ $k
+}
+
+sub FIRSTKEY {
+ my $s = scalar keys %Errno::; # initialize iterator
+ goto &NEXTKEY;
+}
+
+sub EXISTS {
+ my ($self, $errname) = @_;
+ my $proto = prototype($errname);
+ defined($proto) && $proto eq "";
+}
+
+tie %!, __PACKAGE__;
+
+1;
+__END__
+
+=head1 NAME
+
+Errno - System errno constants
+
+=head1 SYNOPSIS
+
+ use Errno qw(EINTR EIO :POSIX);
+
+=head1 DESCRIPTION
+
+C<Errno> defines and conditionally exports all the error constants
+defined in your system C<errno.h> include file. It has a single export
+tag, C<:POSIX>, which will export all POSIX defined error numbers.
+
+C<Errno> also makes C<%!> magic such that each element of C<%!> has a
+non-zero value only if C<$!> is set to that value. For example:
+
+ use Errno;
+
+ unless (open(FH, "/fangorn/spouse")) {
+ if ($!{ENOENT}) {
+ warn "Get a wife!\n";
+ } else {
+ warn "This path is barred: $!";
+ }
+ }
+
+If a specified constant C<EFOO> does not exist on the system, C<$!{EFOO}>
+returns C<"">. You may use C<exists $!{EFOO}> to check whether the
+constant is available on the system.
+
+=head1 CAVEATS
+
+Importing a particular constant may not be very portable, because the
+import will fail on platforms that do not have that constant. A more
+portable way to set C<$!> to a valid value is to use:
+
+ if (exists &Errno::EFOO) {
+ $! = &Errno::EFOO;
+ }
+
+=head1 AUTHOR
+
+Graham Barr <gbarr@pobox.com>
+
+=head1 COPYRIGHT
+
+Copyright (c) 1997-8 Graham Barr. All rights reserved.
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+=cut
+
diff --git a/Master/xemtex/perl/lib/Exporter.pm b/Master/xemtex/perl/lib/Exporter.pm
new file mode 100644
index 00000000000..8b8d4c49392
--- /dev/null
+++ b/Master/xemtex/perl/lib/Exporter.pm
@@ -0,0 +1,416 @@
+package Exporter;
+
+require 5.006;
+
+# Be lean.
+#use strict;
+#no strict 'refs';
+
+our $Debug = 0;
+our $ExportLevel = 0;
+our $Verbose ||= 0;
+our $VERSION = '5.566';
+$Carp::Internal{Exporter} = 1;
+
+sub as_heavy {
+ require Exporter::Heavy;
+ # Unfortunately, this does not work if the caller is aliased as *name = \&foo
+ # Thus the need to create a lot of identical subroutines
+ my $c = (caller(1))[3];
+ $c =~ s/.*:://;
+ \&{"Exporter::Heavy::heavy_$c"};
+}
+
+sub export {
+ goto &{as_heavy()};
+}
+
+sub import {
+ my $pkg = shift;
+ my $callpkg = caller($ExportLevel);
+
+ # We *need* to treat @{"$pkg\::EXPORT_FAIL"} since Carp uses it :-(
+ my($exports, $export_cache, $fail)
+ = (\@{"$pkg\::EXPORT"}, \%{"$pkg\::EXPORT"}, \@{"$pkg\::EXPORT_FAIL"});
+ return export $pkg, $callpkg, @_
+ if $Verbose or $Debug or @$fail > 1;
+ my $args = @_ or @_ = @$exports;
+
+ local $_;
+ if ($args and not %$export_cache) {
+ s/^&//, $export_cache->{$_} = 1
+ foreach (@$exports, @{"$pkg\::EXPORT_OK"});
+ }
+ my $heavy;
+ # Try very hard not to use {} and hence have to enter scope on the foreach
+ # We bomb out of the loop with last as soon as heavy is set.
+ if ($args or $fail) {
+ ($heavy = (/\W/ or $args and not exists $export_cache->{$_}
+ or @$fail and $_ eq $fail->[0])) and last
+ foreach (@_);
+ } else {
+ ($heavy = /\W/) and last
+ foreach (@_);
+ }
+ return export $pkg, $callpkg, ($args ? @_ : ()) if $heavy;
+ local $SIG{__WARN__} =
+ sub {require Carp; &Carp::carp};
+ # shortcut for the common case of no type character
+ *{"$callpkg\::$_"} = \&{"$pkg\::$_"} foreach @_;
+}
+
+# Default methods
+
+sub export_fail {
+ my $self = shift;
+ @_;
+}
+
+# Unfortunately, caller(1)[3] "does not work" if the caller is aliased as
+# *name = \&foo. Thus the need to create a lot of identical subroutines
+# Otherwise we could have aliased them to export().
+
+sub export_to_level {
+ goto &{as_heavy()};
+}
+
+sub export_tags {
+ goto &{as_heavy()};
+}
+
+sub export_ok_tags {
+ goto &{as_heavy()};
+}
+
+sub require_version {
+ goto &{as_heavy()};
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Exporter - Implements default import method for modules
+
+=head1 SYNOPSIS
+
+In module YourModule.pm:
+
+ package YourModule;
+ require Exporter;
+ @ISA = qw(Exporter);
+ @EXPORT_OK = qw(munge frobnicate); # symbols to export on request
+
+In other files which wish to use YourModule:
+
+ use ModuleName qw(frobnicate); # import listed symbols
+ frobnicate ($left, $right) # calls YourModule::frobnicate
+
+=head1 DESCRIPTION
+
+The Exporter module implements an C<import> method which allows a module
+to export functions and variables to its users' namespaces. Many modules
+use Exporter rather than implementing their own C<import> method because
+Exporter provides a highly flexible interface, with an implementation optimised
+for the common case.
+
+Perl automatically calls the C<import> method when processing a
+C<use> statement for a module. Modules and C<use> are documented
+in L<perlfunc> and L<perlmod>. Understanding the concept of
+modules and how the C<use> statement operates is important to
+understanding the Exporter.
+
+=head2 How to Export
+
+The arrays C<@EXPORT> and C<@EXPORT_OK> in a module hold lists of
+symbols that are going to be exported into the users name space by
+default, or which they can request to be exported, respectively. The
+symbols can represent functions, scalars, arrays, hashes, or typeglobs.
+The symbols must be given by full name with the exception that the
+ampersand in front of a function is optional, e.g.
+
+ @EXPORT = qw(afunc $scalar @array); # afunc is a function
+ @EXPORT_OK = qw(&bfunc %hash *typeglob); # explicit prefix on &bfunc
+
+If you are only exporting function names it is recommended to omit the
+ampersand, as the implementation is faster this way.
+
+=head2 Selecting What To Export
+
+Do B<not> export method names!
+
+Do B<not> export anything else by default without a good reason!
+
+Exports pollute the namespace of the module user. If you must export
+try to use @EXPORT_OK in preference to @EXPORT and avoid short or
+common symbol names to reduce the risk of name clashes.
+
+Generally anything not exported is still accessible from outside the
+module using the ModuleName::item_name (or $blessed_ref-E<gt>method)
+syntax. By convention you can use a leading underscore on names to
+informally indicate that they are 'internal' and not for public use.
+
+(It is actually possible to get private functions by saying:
+
+ my $subref = sub { ... };
+ $subref->(@args); # Call it as a function
+ $obj->$subref(@args); # Use it as a method
+
+However if you use them for methods it is up to you to figure out
+how to make inheritance work.)
+
+As a general rule, if the module is trying to be object oriented
+then export nothing. If it's just a collection of functions then
+@EXPORT_OK anything but use @EXPORT with caution. For function and
+method names use barewords in preference to names prefixed with
+ampersands for the export lists.
+
+Other module design guidelines can be found in L<perlmod>.
+
+=head2 How to Import
+
+In other files which wish to use your module there are three basic ways for
+them to load your module and import its symbols:
+
+=over 4
+
+=item C<use ModuleName;>
+
+This imports all the symbols from ModuleName's @EXPORT into the namespace
+of the C<use> statement.
+
+=item C<use ModuleName ();>
+
+This causes perl to load your module but does not import any symbols.
+
+=item C<use ModuleName qw(...);>
+
+This imports only the symbols listed by the caller into their namespace.
+All listed symbols must be in your @EXPORT or @EXPORT_OK, else an error
+occurs. The advanced export features of Exporter are accessed like this,
+but with list entries that are syntactically distinct from symbol names.
+
+=back
+
+Unless you want to use its advanced features, this is probably all you
+need to know to use Exporter.
+
+=head1 Advanced features
+
+=head2 Specialised Import Lists
+
+If the first entry in an import list begins with !, : or / then the
+list is treated as a series of specifications which either add to or
+delete from the list of names to import. They are processed left to
+right. Specifications are in the form:
+
+ [!]name This name only
+ [!]:DEFAULT All names in @EXPORT
+ [!]:tag All names in $EXPORT_TAGS{tag} anonymous list
+ [!]/pattern/ All names in @EXPORT and @EXPORT_OK which match
+
+A leading ! indicates that matching names should be deleted from the
+list of names to import. If the first specification is a deletion it
+is treated as though preceded by :DEFAULT. If you just want to import
+extra names in addition to the default set you will still need to
+include :DEFAULT explicitly.
+
+e.g., Module.pm defines:
+
+ @EXPORT = qw(A1 A2 A3 A4 A5);
+ @EXPORT_OK = qw(B1 B2 B3 B4 B5);
+ %EXPORT_TAGS = (T1 => [qw(A1 A2 B1 B2)], T2 => [qw(A1 A2 B3 B4)]);
+
+ Note that you cannot use tags in @EXPORT or @EXPORT_OK.
+ Names in EXPORT_TAGS must also appear in @EXPORT or @EXPORT_OK.
+
+An application using Module can say something like:
+
+ use Module qw(:DEFAULT :T2 !B3 A3);
+
+Other examples include:
+
+ use Socket qw(!/^[AP]F_/ !SOMAXCONN !SOL_SOCKET);
+ use POSIX qw(:errno_h :termios_h !TCSADRAIN !/^EXIT/);
+
+Remember that most patterns (using //) will need to be anchored
+with a leading ^, e.g., C</^EXIT/> rather than C</EXIT/>.
+
+You can say C<BEGIN { $Exporter::Verbose=1 }> to see how the
+specifications are being processed and what is actually being imported
+into modules.
+
+=head2 Exporting without using Exporter's import method
+
+Exporter has a special method, 'export_to_level' which is used in situations
+where you can't directly call Exporter's import method. The export_to_level
+method looks like:
+
+ MyPackage->export_to_level($where_to_export, $package, @what_to_export);
+
+where $where_to_export is an integer telling how far up the calling stack
+to export your symbols, and @what_to_export is an array telling what
+symbols *to* export (usually this is @_). The $package argument is
+currently unused.
+
+For example, suppose that you have a module, A, which already has an
+import function:
+
+ package A;
+
+ @ISA = qw(Exporter);
+ @EXPORT_OK = qw ($b);
+
+ sub import
+ {
+ $A::b = 1; # not a very useful import method
+ }
+
+and you want to Export symbol $A::b back to the module that called
+package A. Since Exporter relies on the import method to work, via
+inheritance, as it stands Exporter::import() will never get called.
+Instead, say the following:
+
+ package A;
+ @ISA = qw(Exporter);
+ @EXPORT_OK = qw ($b);
+
+ sub import
+ {
+ $A::b = 1;
+ A->export_to_level(1, @_);
+ }
+
+This will export the symbols one level 'above' the current package - ie: to
+the program or module that used package A.
+
+Note: Be careful not to modify '@_' at all before you call export_to_level
+- or people using your package will get very unexplained results!
+
+
+=head2 Module Version Checking
+
+The Exporter module will convert an attempt to import a number from a
+module into a call to $module_name-E<gt>require_version($value). This can
+be used to validate that the version of the module being used is
+greater than or equal to the required version.
+
+The Exporter module supplies a default require_version method which
+checks the value of $VERSION in the exporting module.
+
+Since the default require_version method treats the $VERSION number as
+a simple numeric value it will regard version 1.10 as lower than
+1.9. For this reason it is strongly recommended that you use numbers
+with at least two decimal places, e.g., 1.09.
+
+=head2 Managing Unknown Symbols
+
+In some situations you may want to prevent certain symbols from being
+exported. Typically this applies to extensions which have functions
+or constants that may not exist on some systems.
+
+The names of any symbols that cannot be exported should be listed
+in the C<@EXPORT_FAIL> array.
+
+If a module attempts to import any of these symbols the Exporter
+will give the module an opportunity to handle the situation before
+generating an error. The Exporter will call an export_fail method
+with a list of the failed symbols:
+
+ @failed_symbols = $module_name->export_fail(@failed_symbols);
+
+If the export_fail method returns an empty list then no error is
+recorded and all the requested symbols are exported. If the returned
+list is not empty then an error is generated for each symbol and the
+export fails. The Exporter provides a default export_fail method which
+simply returns the list unchanged.
+
+Uses for the export_fail method include giving better error messages
+for some symbols and performing lazy architectural checks (put more
+symbols into @EXPORT_FAIL by default and then take them out if someone
+actually tries to use them and an expensive check shows that they are
+usable on that platform).
+
+=head2 Tag Handling Utility Functions
+
+Since the symbols listed within %EXPORT_TAGS must also appear in either
+@EXPORT or @EXPORT_OK, two utility functions are provided which allow
+you to easily add tagged sets of symbols to @EXPORT or @EXPORT_OK:
+
+ %EXPORT_TAGS = (foo => [qw(aa bb cc)], bar => [qw(aa cc dd)]);
+
+ Exporter::export_tags('foo'); # add aa, bb and cc to @EXPORT
+ Exporter::export_ok_tags('bar'); # add aa, cc and dd to @EXPORT_OK
+
+Any names which are not tags are added to @EXPORT or @EXPORT_OK
+unchanged but will trigger a warning (with C<-w>) to avoid misspelt tags
+names being silently added to @EXPORT or @EXPORT_OK. Future versions
+may make this a fatal error.
+
+=head2 Generating combined tags
+
+If several symbol categories exist in %EXPORT_TAGS, it's usually
+useful to create the utility ":all" to simplify "use" statements.
+
+The simplest way to do this is:
+
+ %EXPORT_TAGS = (foo => [qw(aa bb cc)], bar => [qw(aa cc dd)]);
+
+ # add all the other ":class" tags to the ":all" class,
+ # deleting duplicates
+ {
+ my %seen;
+
+ push @{$EXPORT_TAGS{all}},
+ grep {!$seen{$_}++} @{$EXPORT_TAGS{$_}} foreach keys %EXPORT_TAGS;
+ }
+
+CGI.pm creates an ":all" tag which contains some (but not really
+all) of its categories. That could be done with one small
+change:
+
+ # add some of the other ":class" tags to the ":all" class,
+ # deleting duplicates
+ {
+ my %seen;
+
+ push @{$EXPORT_TAGS{all}},
+ grep {!$seen{$_}++} @{$EXPORT_TAGS{$_}}
+ foreach qw/html2 html3 netscape form cgi internal/;
+ }
+
+Note that the tag names in %EXPORT_TAGS don't have the leading ':'.
+
+=head2 C<AUTOLOAD>ed Constants
+
+Many modules make use of C<AUTOLOAD>ing for constant subroutines to
+avoid having to compile and waste memory on rarely used values (see
+L<perlsub> for details on constant subroutines). Calls to such
+constant subroutines are not optimized away at compile time because
+they can't be checked at compile time for constancy.
+
+Even if a prototype is available at compile time, the body of the
+subroutine is not (it hasn't been C<AUTOLOAD>ed yet). perl needs to
+examine both the C<()> prototype and the body of a subroutine at
+compile time to detect that it can safely replace calls to that
+subroutine with the constant value.
+
+A workaround for this is to call the constants once in a C<BEGIN> block:
+
+ package My ;
+
+ use Socket ;
+
+ foo( SO_LINGER ); ## SO_LINGER NOT optimized away; called at runtime
+ BEGIN { SO_LINGER }
+ foo( SO_LINGER ); ## SO_LINGER optimized away at compile time.
+
+This forces the C<AUTOLOAD> for C<SO_LINGER> to take place before
+SO_LINGER is encountered later in C<My> package.
+
+If you are writing a package that C<AUTOLOAD>s, consider forcing
+an C<AUTOLOAD> for any constants explicitly imported by other packages
+or which are usually used when your package is C<use>d.
+
+=cut
diff --git a/Master/xemtex/perl/lib/Exporter/Heavy.pm b/Master/xemtex/perl/lib/Exporter/Heavy.pm
new file mode 100644
index 00000000000..3bdc4b4f204
--- /dev/null
+++ b/Master/xemtex/perl/lib/Exporter/Heavy.pm
@@ -0,0 +1,232 @@
+package Exporter::Heavy;
+
+use strict;
+no strict 'refs';
+
+# On one line so MakeMaker will see it.
+require Exporter; our $VERSION = $Exporter::VERSION;
+$Carp::Internal{"Exporter::Heavy"} = 1;
+our $Verbose;
+
+=head1 NAME
+
+Exporter::Heavy - Exporter guts
+
+=head1 SYNOPSIS
+
+(internal use only)
+
+=head1 DESCRIPTION
+
+No user-serviceable parts inside.
+
+=cut
+
+#
+# We go to a lot of trouble not to 'require Carp' at file scope,
+# because Carp requires Exporter, and something has to give.
+#
+
+sub heavy_export {
+
+ # First make import warnings look like they're coming from the "use".
+ local $SIG{__WARN__} = sub {
+ my $text = shift;
+ if ($text =~ s/ at \S*Exporter\S*.pm line \d+.*\n//) {
+ require Carp;
+ local $Carp::CarpLevel = 1; # ignore package calling us too.
+ Carp::carp($text);
+ }
+ else {
+ warn $text;
+ }
+ };
+ local $SIG{__DIE__} = sub {
+ require Carp;
+ local $Carp::CarpLevel = 1; # ignore package calling us too.
+ Carp::croak("$_[0]Illegal null symbol in \@${1}::EXPORT")
+ if $_[0] =~ /^Unable to create sub named "(.*?)::"/;
+ };
+
+ my($pkg, $callpkg, @imports) = @_;
+ my($type, $sym, $oops);
+ my($exports, $export_cache) = (\@{"${pkg}::EXPORT"},
+ \%{"${pkg}::EXPORT"});
+
+ if (@imports) {
+ if (!%$export_cache) {
+ s/^&// foreach @$exports;
+ @{$export_cache}{@$exports} = (1) x @$exports;
+ my $ok = \@{"${pkg}::EXPORT_OK"};
+ if (@$ok) {
+ s/^&// foreach @$ok;
+ @{$export_cache}{@$ok} = (1) x @$ok;
+ }
+ }
+
+ if ($imports[0] =~ m#^[/!:]#){
+ my $tagsref = \%{"${pkg}::EXPORT_TAGS"};
+ my $tagdata;
+ my %imports;
+ my($remove, $spec, @names, @allexports);
+ # negated first item implies starting with default set:
+ unshift @imports, ':DEFAULT' if $imports[0] =~ m/^!/;
+ foreach $spec (@imports){
+ $remove = $spec =~ s/^!//;
+
+ if ($spec =~ s/^://){
+ if ($spec eq 'DEFAULT'){
+ @names = @$exports;
+ }
+ elsif ($tagdata = $tagsref->{$spec}) {
+ @names = @$tagdata;
+ }
+ else {
+ warn qq["$spec" is not defined in %${pkg}::EXPORT_TAGS];
+ ++$oops;
+ next;
+ }
+ }
+ elsif ($spec =~ m:^/(.*)/$:){
+ my $patn = $1;
+ @allexports = keys %$export_cache unless @allexports; # only do keys once
+ @names = grep(/$patn/, @allexports); # not anchored by default
+ }
+ else {
+ @names = ($spec); # is a normal symbol name
+ }
+
+ warn "Import ".($remove ? "del":"add").": @names "
+ if $Verbose;
+
+ if ($remove) {
+ foreach $sym (@names) { delete $imports{$sym} }
+ }
+ else {
+ @imports{@names} = (1) x @names;
+ }
+ }
+ @imports = keys %imports;
+ }
+
+ my @carp;
+ foreach $sym (@imports) {
+ if (!$export_cache->{$sym}) {
+ if ($sym =~ m/^\d/) {
+ $pkg->VERSION($sym); # inherit from UNIVERSAL
+ # If the version number was the only thing specified
+ # then we should act as if nothing was specified:
+ if (@imports == 1) {
+ @imports = @$exports;
+ last;
+ }
+ # We need a way to emulate 'use Foo ()' but still
+ # allow an easy version check: "use Foo 1.23, ''";
+ if (@imports == 2 and !$imports[1]) {
+ @imports = ();
+ last;
+ }
+ } elsif ($sym !~ s/^&// || !$export_cache->{$sym}) {
+ # accumulate the non-exports
+ push @carp,
+ qq["$sym" is not exported by the $pkg module\n];
+ $oops++;
+ }
+ }
+ }
+ if ($oops) {
+ require Carp;
+ Carp::croak("@{carp}Can't continue after import errors");
+ }
+ }
+ else {
+ @imports = @$exports;
+ }
+
+ my($fail, $fail_cache) = (\@{"${pkg}::EXPORT_FAIL"},
+ \%{"${pkg}::EXPORT_FAIL"});
+
+ if (@$fail) {
+ if (!%$fail_cache) {
+ # Build cache of symbols. Optimise the lookup by adding
+ # barewords twice... both with and without a leading &.
+ # (Technique could be applied to $export_cache at cost of memory)
+ my @expanded = map { /^\w/ ? ($_, '&'.$_) : $_ } @$fail;
+ warn "${pkg}::EXPORT_FAIL cached: @expanded" if $Verbose;
+ @{$fail_cache}{@expanded} = (1) x @expanded;
+ }
+ my @failed;
+ foreach $sym (@imports) { push(@failed, $sym) if $fail_cache->{$sym} }
+ if (@failed) {
+ @failed = $pkg->export_fail(@failed);
+ foreach $sym (@failed) {
+ require Carp;
+ Carp::carp(qq["$sym" is not implemented by the $pkg module ],
+ "on this architecture");
+ }
+ if (@failed) {
+ require Carp;
+ Carp::croak("Can't continue after import errors");
+ }
+ }
+ }
+
+ warn "Importing into $callpkg from $pkg: ",
+ join(", ",sort @imports) if $Verbose;
+
+ foreach $sym (@imports) {
+ # shortcut for the common case of no type character
+ (*{"${callpkg}::$sym"} = \&{"${pkg}::$sym"}, next)
+ unless $sym =~ s/^(\W)//;
+ $type = $1;
+ *{"${callpkg}::$sym"} =
+ $type eq '&' ? \&{"${pkg}::$sym"} :
+ $type eq '$' ? \${"${pkg}::$sym"} :
+ $type eq '@' ? \@{"${pkg}::$sym"} :
+ $type eq '%' ? \%{"${pkg}::$sym"} :
+ $type eq '*' ? *{"${pkg}::$sym"} :
+ do { require Carp; Carp::croak("Can't export symbol: $type$sym") };
+ }
+}
+
+sub heavy_export_to_level
+{
+ my $pkg = shift;
+ my $level = shift;
+ (undef) = shift; # XXX redundant arg
+ my $callpkg = caller($level);
+ $pkg->export($callpkg, @_);
+}
+
+# Utility functions
+
+sub _push_tags {
+ my($pkg, $var, $syms) = @_;
+ my @nontag = ();
+ my $export_tags = \%{"${pkg}::EXPORT_TAGS"};
+ push(@{"${pkg}::$var"},
+ map { $export_tags->{$_} ? @{$export_tags->{$_}}
+ : scalar(push(@nontag,$_),$_) }
+ (@$syms) ? @$syms : keys %$export_tags);
+ if (@nontag and $^W) {
+ # This may change to a die one day
+ require Carp;
+ Carp::carp(join(", ", @nontag)." are not tags of $pkg");
+ }
+}
+
+sub heavy_require_version {
+ my($self, $wanted) = @_;
+ my $pkg = ref $self || $self;
+ return ${pkg}->VERSION($wanted);
+}
+
+sub heavy_export_tags {
+ _push_tags((caller)[0], "EXPORT", \@_);
+}
+
+sub heavy_export_ok_tags {
+ _push_tags((caller)[0], "EXPORT_OK", \@_);
+}
+
+1;
diff --git a/Master/xemtex/perl/lib/Fcntl.pm b/Master/xemtex/perl/lib/Fcntl.pm
new file mode 100644
index 00000000000..6e4236713de
--- /dev/null
+++ b/Master/xemtex/perl/lib/Fcntl.pm
@@ -0,0 +1,216 @@
+package Fcntl;
+
+=head1 NAME
+
+Fcntl - load the C Fcntl.h defines
+
+=head1 SYNOPSIS
+
+ use Fcntl;
+ use Fcntl qw(:DEFAULT :flock);
+
+=head1 DESCRIPTION
+
+This module is just a translation of the C F<fnctl.h> file.
+Unlike the old mechanism of requiring a translated F<fnctl.ph>
+file, this uses the B<h2xs> program (see the Perl source distribution)
+and your native C compiler. This means that it has a
+far more likely chance of getting the numbers right.
+
+=head1 NOTE
+
+Only C<#define> symbols get translated; you must still correctly
+pack up your own arguments to pass as args for locking functions, etc.
+
+=head1 EXPORTED SYMBOLS
+
+By default your system's F_* and O_* constants (eg, F_DUPFD and
+O_CREAT) and the FD_CLOEXEC constant are exported into your namespace.
+
+You can request that the flock() constants (LOCK_SH, LOCK_EX, LOCK_NB
+and LOCK_UN) be provided by using the tag C<:flock>. See L<Exporter>.
+
+You can request that the old constants (FAPPEND, FASYNC, FCREAT,
+FDEFER, FEXCL, FNDELAY, FNONBLOCK, FSYNC, FTRUNC) be provided for
+compatibility reasons by using the tag C<:Fcompat>. For new
+applications the newer versions of these constants are suggested
+(O_APPEND, O_ASYNC, O_CREAT, O_DEFER, O_EXCL, O_NDELAY, O_NONBLOCK,
+O_SYNC, O_TRUNC).
+
+For ease of use also the SEEK_* constants (for seek() and sysseek(),
+e.g. SEEK_END) and the S_I* constants (for chmod() and stat()) are
+available for import. They can be imported either separately or using
+the tags C<:seek> and C<:mode>.
+
+Please refer to your native fcntl(2), open(2), fseek(3), lseek(2)
+(equal to Perl's seek() and sysseek(), respectively), and chmod(2)
+documentation to see what constants are implemented in your system.
+
+See L<perlopentut> to learn about the uses of the O_* constants
+with sysopen().
+
+See L<perlfunc/seek> and L<perlfunc/sysseek> about the SEEK_* constants.
+
+See L<perlfunc/stat> about the S_I* constants.
+
+=cut
+
+our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $AUTOLOAD);
+
+require Exporter;
+use XSLoader ();
+@ISA = qw(Exporter);
+$VERSION = "1.04";
+# Items to export into callers namespace by default
+# (move infrequently used names to @EXPORT_OK below)
+@EXPORT =
+ qw(
+ FD_CLOEXEC
+ F_ALLOCSP
+ F_ALLOCSP64
+ F_COMPAT
+ F_DUP2FD
+ F_DUPFD
+ F_EXLCK
+ F_FREESP
+ F_FREESP64
+ F_FSYNC
+ F_FSYNC64
+ F_GETFD
+ F_GETFL
+ F_GETLK
+ F_GETLK64
+ F_GETOWN
+ F_NODNY
+ F_POSIX
+ F_RDACC
+ F_RDDNY
+ F_RDLCK
+ F_RWACC
+ F_RWDNY
+ F_SETFD
+ F_SETFL
+ F_SETLK
+ F_SETLK64
+ F_SETLKW
+ F_SETLKW64
+ F_SETOWN
+ F_SHARE
+ F_SHLCK
+ F_UNLCK
+ F_UNSHARE
+ F_WRACC
+ F_WRDNY
+ F_WRLCK
+ O_ACCMODE
+ O_ALIAS
+ O_APPEND
+ O_ASYNC
+ O_BINARY
+ O_CREAT
+ O_DEFER
+ O_DIRECT
+ O_DIRECTORY
+ O_DSYNC
+ O_EXCL
+ O_EXLOCK
+ O_LARGEFILE
+ O_NDELAY
+ O_NOCTTY
+ O_NOFOLLOW
+ O_NOINHERIT
+ O_NONBLOCK
+ O_RANDOM
+ O_RAW
+ O_RDONLY
+ O_RDWR
+ O_RSRC
+ O_RSYNC
+ O_SEQUENTIAL
+ O_SHLOCK
+ O_SYNC
+ O_TEMPORARY
+ O_TEXT
+ O_TRUNC
+ O_WRONLY
+ );
+
+# Other items we are prepared to export if requested
+@EXPORT_OK = qw(
+ FAPPEND
+ FASYNC
+ FCREAT
+ FDEFER
+ FDSYNC
+ FEXCL
+ FLARGEFILE
+ FNDELAY
+ FNONBLOCK
+ FRSYNC
+ FSYNC
+ FTRUNC
+ LOCK_EX
+ LOCK_NB
+ LOCK_SH
+ LOCK_UN
+ S_ISUID S_ISGID S_ISVTX S_ISTXT
+ _S_IFMT S_IFREG S_IFDIR S_IFLNK
+ S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
+ S_IRUSR S_IWUSR S_IXUSR S_IRWXU
+ S_IRGRP S_IWGRP S_IXGRP S_IRWXG
+ S_IROTH S_IWOTH S_IXOTH S_IRWXO
+ S_IREAD S_IWRITE S_IEXEC
+ &S_ISREG &S_ISDIR &S_ISLNK &S_ISSOCK &S_ISBLK &S_ISCHR &S_ISFIFO
+ &S_ISWHT &S_ISENFMT &S_IFMT &S_IMODE
+ SEEK_SET
+ SEEK_CUR
+ SEEK_END
+);
+# Named groups of exports
+%EXPORT_TAGS = (
+ 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
+ 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE
+ FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)],
+ 'seek' => [qw(SEEK_SET SEEK_CUR SEEK_END)],
+ 'mode' => [qw(S_ISUID S_ISGID S_ISVTX S_ISTXT
+ _S_IFMT S_IFREG S_IFDIR S_IFLNK
+ S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
+ S_IRUSR S_IWUSR S_IXUSR S_IRWXU
+ S_IRGRP S_IWGRP S_IXGRP S_IRWXG
+ S_IROTH S_IWOTH S_IXOTH S_IRWXO
+ S_IREAD S_IWRITE S_IEXEC
+ S_ISREG S_ISDIR S_ISLNK S_ISSOCK
+ S_ISBLK S_ISCHR S_ISFIFO
+ S_ISWHT S_ISENFMT
+ S_IFMT S_IMODE
+ )],
+);
+
+sub S_IFMT { @_ ? ( $_[0] & _S_IFMT() ) : _S_IFMT() }
+sub S_IMODE { $_[0] & 07777 }
+
+sub S_ISREG { ( $_[0] & _S_IFMT() ) == S_IFREG() }
+sub S_ISDIR { ( $_[0] & _S_IFMT() ) == S_IFDIR() }
+sub S_ISLNK { ( $_[0] & _S_IFMT() ) == S_IFLNK() }
+sub S_ISSOCK { ( $_[0] & _S_IFMT() ) == S_IFSOCK() }
+sub S_ISBLK { ( $_[0] & _S_IFMT() ) == S_IFBLK() }
+sub S_ISCHR { ( $_[0] & _S_IFMT() ) == S_IFCHR() }
+sub S_ISFIFO { ( $_[0] & _S_IFMT() ) == S_IFIFO() }
+sub S_ISWHT { ( $_[0] & _S_IFMT() ) == S_IFWHT() }
+sub S_ISENFMT { ( $_[0] & _S_IFMT() ) == S_IFENFMT() }
+
+sub AUTOLOAD {
+ (my $constname = $AUTOLOAD) =~ s/.*:://;
+ die "&Fcntl::constant not defined" if $constname eq 'constant';
+ my ($error, $val) = constant($constname);
+ if ($error) {
+ my (undef,$file,$line) = caller;
+ die "$error at $file line $line.\n";
+ }
+ *$AUTOLOAD = sub { $val };
+ goto &$AUTOLOAD;
+}
+
+XSLoader::load 'Fcntl', $VERSION;
+
+1;
diff --git a/Master/xemtex/perl/lib/File/Basename.pm b/Master/xemtex/perl/lib/File/Basename.pm
new file mode 100644
index 00000000000..f2ef495cddf
--- /dev/null
+++ b/Master/xemtex/perl/lib/File/Basename.pm
@@ -0,0 +1,289 @@
+package File::Basename;
+
+=head1 NAME
+
+fileparse - split a pathname into pieces
+
+basename - extract just the filename from a path
+
+dirname - extract just the directory from a path
+
+=head1 SYNOPSIS
+
+ use File::Basename;
+
+ ($name,$path,$suffix) = fileparse($fullname,@suffixlist)
+ fileparse_set_fstype($os_string);
+ $basename = basename($fullname,@suffixlist);
+ $dirname = dirname($fullname);
+
+ ($name,$path,$suffix) = fileparse("lib/File/Basename.pm",qr{\.pm});
+ fileparse_set_fstype("VMS");
+ $basename = basename("lib/File/Basename.pm",qr{\.pm});
+ $dirname = dirname("lib/File/Basename.pm");
+
+=head1 DESCRIPTION
+
+These routines allow you to parse file specifications into useful
+pieces using the syntax of different operating systems.
+
+=over 4
+
+=item fileparse_set_fstype
+
+You select the syntax via the routine fileparse_set_fstype().
+
+If the argument passed to it contains one of the substrings
+"VMS", "MSDOS", "MacOS", "AmigaOS" or "MSWin32", the file specification
+syntax of that operating system is used in future calls to
+fileparse(), basename(), and dirname(). If it contains none of
+these substrings, Unix syntax is used. This pattern matching is
+case-insensitive. If you've selected VMS syntax, and the file
+specification you pass to one of these routines contains a "/",
+they assume you are using Unix emulation and apply the Unix syntax
+rules instead, for that function call only.
+
+If the argument passed to it contains one of the substrings "VMS",
+"MSDOS", "MacOS", "AmigaOS", "os2", "MSWin32" or "RISCOS", then the pattern
+matching for suffix removal is performed without regard for case,
+since those systems are not case-sensitive when opening existing files
+(though some of them preserve case on file creation).
+
+If you haven't called fileparse_set_fstype(), the syntax is chosen
+by examining the builtin variable C<$^O> according to these rules.
+
+=item fileparse
+
+The fileparse() routine divides a file specification into three
+parts: a leading B<path>, a file B<name>, and a B<suffix>. The
+B<path> contains everything up to and including the last directory
+separator in the input file specification. The remainder of the input
+file specification is then divided into B<name> and B<suffix> based on
+the optional patterns you specify in C<@suffixlist>. Each element of
+this list can be a qr-quoted pattern (or a string which is interpreted
+as a regular expression), and is matched
+against the end of B<name>. If this succeeds, the matching portion of
+B<name> is removed and prepended to B<suffix>. By proper use of
+C<@suffixlist>, you can remove file types or versions for examination.
+
+You are guaranteed that if you concatenate B<path>, B<name>, and
+B<suffix> together in that order, the result will denote the same
+file as the input file specification.
+
+=back
+
+=head1 EXAMPLES
+
+Using Unix file syntax:
+
+ ($base,$path,$type) = fileparse('/virgil/aeneid/draft.book7',
+ qr{\.book\d+});
+
+would yield
+
+ $base eq 'draft'
+ $path eq '/virgil/aeneid/',
+ $type eq '.book7'
+
+Similarly, using VMS syntax:
+
+ ($name,$dir,$type) = fileparse('Doc_Root:[Help]Rhetoric.Rnh',
+ qr{\..*});
+
+would yield
+
+ $name eq 'Rhetoric'
+ $dir eq 'Doc_Root:[Help]'
+ $type eq '.Rnh'
+
+=over
+
+=item C<basename>
+
+The basename() routine returns the first element of the list produced
+by calling fileparse() with the same arguments, except that it always
+quotes metacharacters in the given suffixes. It is provided for
+programmer compatibility with the Unix shell command basename(1).
+
+=item C<dirname>
+
+The dirname() routine returns the directory portion of the input file
+specification. When using VMS or MacOS syntax, this is identical to the
+second element of the list produced by calling fileparse() with the same
+input file specification. (Under VMS, if there is no directory information
+in the input file specification, then the current default device and
+directory are returned.) When using Unix or MSDOS syntax, the return
+value conforms to the behavior of the Unix shell command dirname(1). This
+is usually the same as the behavior of fileparse(), but differs in some
+cases. For example, for the input file specification F<lib/>, fileparse()
+considers the directory name to be F<lib/>, while dirname() considers the
+directory name to be F<.>).
+
+=back
+
+=cut
+
+
+## use strict;
+# A bit of juggling to insure that C<use re 'taint';> always works, since
+# File::Basename is used during the Perl build, when the re extension may
+# not be available.
+BEGIN {
+ unless (eval { require re; })
+ { eval ' sub re::import { $^H |= 0x00100000; } ' }
+ import re 'taint';
+}
+
+
+
+use 5.006;
+use warnings;
+our(@ISA, @EXPORT, $VERSION, $Fileparse_fstype, $Fileparse_igncase);
+require Exporter;
+@ISA = qw(Exporter);
+@EXPORT = qw(fileparse fileparse_set_fstype basename dirname);
+$VERSION = "2.71";
+
+
+# fileparse_set_fstype() - specify OS-based rules used in future
+# calls to routines in this package
+#
+# Currently recognized values: VMS, MSDOS, MacOS, AmigaOS, os2, RISCOS
+# Any other name uses Unix-style rules and is case-sensitive
+
+sub fileparse_set_fstype {
+ my @old = ($Fileparse_fstype, $Fileparse_igncase);
+ if (@_) {
+ $Fileparse_fstype = $_[0];
+ $Fileparse_igncase = ($_[0] =~ /^(?:MacOS|VMS|AmigaOS|os2|RISCOS|MSWin32|MSDOS)/i);
+ }
+ wantarray ? @old : $old[0];
+}
+
+# fileparse() - parse file specification
+#
+# Version 2.4 27-Sep-1996 Charles Bailey bailey@genetics.upenn.edu
+
+
+sub fileparse {
+ my($fullname,@suffices) = @_;
+ unless (defined $fullname) {
+ require Carp;
+ Carp::croak "fileparse(): need a valid pathname";
+ }
+ my($fstype,$igncase) = ($Fileparse_fstype, $Fileparse_igncase);
+ my($dirpath,$tail,$suffix,$basename);
+ my($taint) = substr($fullname,0,0); # Is $fullname tainted?
+
+ if ($fstype =~ /^VMS/i) {
+ if ($fullname =~ m#/#) { $fstype = '' } # We're doing Unix emulation
+ else {
+ ($dirpath,$basename) = ($fullname =~ /^(.*[:>\]])?(.*)/s);
+ $dirpath ||= ''; # should always be defined
+ }
+ }
+ if ($fstype =~ /^MS(DOS|Win32)|epoc/i) {
+ ($dirpath,$basename) = ($fullname =~ /^((?:.*[:\\\/])?)(.*)/s);
+ $dirpath .= '.\\' unless $dirpath =~ /[\\\/]\z/;
+ }
+ elsif ($fstype =~ /^os2/i) {
+ ($dirpath,$basename) = ($fullname =~ m#^((?:.*[:\\/])?)(.*)#s);
+ $dirpath = './' unless $dirpath; # Can't be 0
+ $dirpath .= '/' unless $dirpath =~ m#[\\/]\z#;
+ }
+ elsif ($fstype =~ /^MacOS/si) {
+ ($dirpath,$basename) = ($fullname =~ /^(.*:)?(.*)/s);
+ $dirpath = ':' unless $dirpath;
+ }
+ elsif ($fstype =~ /^AmigaOS/i) {
+ ($dirpath,$basename) = ($fullname =~ /(.*[:\/])?(.*)/s);
+ $dirpath = './' unless $dirpath;
+ }
+ elsif ($fstype !~ /^VMS/i) { # default to Unix
+ ($dirpath,$basename) = ($fullname =~ m#^(.*/)?(.*)#s);
+ if ($^O eq 'VMS' and $fullname =~ m:^(/[^/]+/000000(/|$))(.*):) {
+ # dev:[000000] is top of VMS tree, similar to Unix '/'
+ # so strip it off and treat the rest as "normal"
+ my $devspec = $1;
+ my $remainder = $3;
+ ($dirpath,$basename) = ($remainder =~ m#^(.*/)?(.*)#s);
+ $dirpath ||= ''; # should always be defined
+ $dirpath = $devspec.$dirpath;
+ }
+ $dirpath = './' unless $dirpath;
+ }
+
+ if (@suffices) {
+ $tail = '';
+ foreach $suffix (@suffices) {
+ my $pat = ($igncase ? '(?i)' : '') . "($suffix)\$";
+ if ($basename =~ s/$pat//s) {
+ $taint .= substr($suffix,0,0);
+ $tail = $1 . $tail;
+ }
+ }
+ }
+
+ $tail .= $taint if defined $tail; # avoid warning if $tail == undef
+ wantarray ? ($basename .= $taint, $dirpath .= $taint, $tail)
+ : ($basename .= $taint);
+}
+
+
+# basename() - returns first element of list returned by fileparse()
+
+sub basename {
+ my($name) = shift;
+ (fileparse($name, map("\Q$_\E",@_)))[0];
+}
+
+
+# dirname() - returns device and directory portion of file specification
+# Behavior matches that of Unix dirname(1) exactly for Unix and MSDOS
+# filespecs except for names ending with a separator, e.g., "/xx/yy/".
+# This differs from the second element of the list returned
+# by fileparse() in that the trailing '/' (Unix) or '\' (MSDOS) (and
+# the last directory name if the filespec ends in a '/' or '\'), is lost.
+
+sub dirname {
+ my($basename,$dirname) = fileparse($_[0]);
+ my($fstype) = $Fileparse_fstype;
+
+ if ($fstype =~ /VMS/i) {
+ if ($_[0] =~ m#/#) { $fstype = '' }
+ else { return $dirname || $ENV{DEFAULT} }
+ }
+ if ($fstype =~ /MacOS/i) {
+ if( !length($basename) && $dirname !~ /^[^:]+:\z/) {
+ $dirname =~ s/([^:]):\z/$1/s;
+ ($basename,$dirname) = fileparse $dirname;
+ }
+ $dirname .= ":" unless $dirname =~ /:\z/;
+ }
+ elsif ($fstype =~ /MS(DOS|Win32)|os2/i) {
+ $dirname =~ s/([^:])[\\\/]*\z/$1/;
+ unless( length($basename) ) {
+ ($basename,$dirname) = fileparse $dirname;
+ $dirname =~ s/([^:])[\\\/]*\z/$1/;
+ }
+ }
+ elsif ($fstype =~ /AmigaOS/i) {
+ if ( $dirname =~ /:\z/) { return $dirname }
+ chop $dirname;
+ $dirname =~ s#[^:/]+\z## unless length($basename);
+ }
+ else {
+ $dirname =~ s:(.)/*\z:$1:s;
+ unless( length($basename) ) {
+ local($File::Basename::Fileparse_fstype) = $fstype;
+ ($basename,$dirname) = fileparse $dirname;
+ $dirname =~ s:(.)/*\z:$1:s;
+ }
+ }
+
+ $dirname;
+}
+
+fileparse_set_fstype $^O;
+
+1;
diff --git a/Master/xemtex/perl/lib/File/Compare.pm b/Master/xemtex/perl/lib/File/Compare.pm
new file mode 100644
index 00000000000..0b73d7c7657
--- /dev/null
+++ b/Master/xemtex/perl/lib/File/Compare.pm
@@ -0,0 +1,178 @@
+package File::Compare;
+
+use 5.006;
+use strict;
+use warnings;
+our($VERSION, @ISA, @EXPORT, @EXPORT_OK, $Too_Big);
+
+require Exporter;
+use Carp;
+
+$VERSION = '1.1003';
+@ISA = qw(Exporter);
+@EXPORT = qw(compare);
+@EXPORT_OK = qw(cmp compare_text);
+
+$Too_Big = 1024 * 1024 * 2;
+
+sub compare {
+ croak("Usage: compare( file1, file2 [, buffersize]) ")
+ unless(@_ == 2 || @_ == 3);
+
+ my ($from,$to,$size) = @_;
+ my $text_mode = defined($size) && (ref($size) eq 'CODE' || $size < 0);
+
+ my ($fromsize,$closefrom,$closeto);
+ local (*FROM, *TO);
+
+ croak("from undefined") unless (defined $from);
+ croak("to undefined") unless (defined $to);
+
+ if (ref($from) &&
+ (UNIVERSAL::isa($from,'GLOB') || UNIVERSAL::isa($from,'IO::Handle'))) {
+ *FROM = *$from;
+ } elsif (ref(\$from) eq 'GLOB') {
+ *FROM = $from;
+ } else {
+ open(FROM,"<$from") or goto fail_open1;
+ unless ($text_mode) {
+ binmode FROM;
+ $fromsize = -s FROM;
+ }
+ $closefrom = 1;
+ }
+
+ if (ref($to) &&
+ (UNIVERSAL::isa($to,'GLOB') || UNIVERSAL::isa($to,'IO::Handle'))) {
+ *TO = *$to;
+ } elsif (ref(\$to) eq 'GLOB') {
+ *TO = $to;
+ } else {
+ open(TO,"<$to") or goto fail_open2;
+ binmode TO unless $text_mode;
+ $closeto = 1;
+ }
+
+ if (!$text_mode && $closefrom && $closeto) {
+ # If both are opened files we know they differ if their size differ
+ goto fail_inner if $fromsize != -s TO;
+ }
+
+ if ($text_mode) {
+ local $/ = "\n";
+ my ($fline,$tline);
+ while (defined($fline = <FROM>)) {
+ goto fail_inner unless defined($tline = <TO>);
+ if (ref $size) {
+ # $size contains ref to comparison function
+ goto fail_inner if &$size($fline, $tline);
+ } else {
+ goto fail_inner if $fline ne $tline;
+ }
+ }
+ goto fail_inner if defined($tline = <TO>);
+ }
+ else {
+ unless (defined($size) && $size > 0) {
+ $size = $fromsize || -s TO || 0;
+ $size = 1024 if $size < 512;
+ $size = $Too_Big if $size > $Too_Big;
+ }
+
+ my ($fr,$tr,$fbuf,$tbuf);
+ $fbuf = $tbuf = '';
+ while(defined($fr = read(FROM,$fbuf,$size)) && $fr > 0) {
+ unless (defined($tr = read(TO,$tbuf,$fr)) && $tbuf eq $fbuf) {
+ goto fail_inner;
+ }
+ }
+ goto fail_inner if defined($tr = read(TO,$tbuf,$size)) && $tr > 0;
+ }
+
+ close(TO) || goto fail_open2 if $closeto;
+ close(FROM) || goto fail_open1 if $closefrom;
+
+ return 0;
+
+ # All of these contortions try to preserve error messages...
+ fail_inner:
+ close(TO) || goto fail_open2 if $closeto;
+ close(FROM) || goto fail_open1 if $closefrom;
+
+ return 1;
+
+ fail_open2:
+ if ($closefrom) {
+ my $status = $!;
+ $! = 0;
+ close FROM;
+ $! = $status unless $!;
+ }
+ fail_open1:
+ return -1;
+}
+
+sub cmp;
+*cmp = \&compare;
+
+sub compare_text {
+ my ($from,$to,$cmp) = @_;
+ croak("Usage: compare_text( file1, file2 [, cmp-function])")
+ unless @_ == 2 || @_ == 3;
+ croak("Third arg to compare_text() function must be a code reference")
+ if @_ == 3 && ref($cmp) ne 'CODE';
+
+ # Using a negative buffer size puts compare into text_mode too
+ $cmp = -1 unless defined $cmp;
+ compare($from, $to, $cmp);
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+File::Compare - Compare files or filehandles
+
+=head1 SYNOPSIS
+
+ use File::Compare;
+
+ if (compare("file1","file2") == 0) {
+ print "They're equal\n";
+ }
+
+=head1 DESCRIPTION
+
+The File::Compare::compare function compares the contents of two
+sources, each of which can be a file or a file handle. It is exported
+from File::Compare by default.
+
+File::Compare::cmp is a synonym for File::Compare::compare. It is
+exported from File::Compare only by request.
+
+File::Compare::compare_text does a line by line comparison of the two
+files. It stops as soon as a difference is detected. compare_text()
+accepts an optional third argument: This must be a CODE reference to
+a line comparison function, which returns 0 when both lines are considered
+equal. For example:
+
+ compare_text($file1, $file2)
+
+is basically equivalent to
+
+ compare_text($file1, $file2, sub {$_[0] ne $_[1]} )
+
+=head1 RETURN
+
+File::Compare::compare and its sibling functions return 0 if the files
+are equal, 1 if the files are unequal, or -1 if an error was encountered.
+
+=head1 AUTHOR
+
+File::Compare was written by Nick Ing-Simmons.
+Its original documentation was written by Chip Salzenberg.
+
+=cut
+
diff --git a/Master/xemtex/perl/lib/File/Copy.pm b/Master/xemtex/perl/lib/File/Copy.pm
new file mode 100644
index 00000000000..08da5e5d31e
--- /dev/null
+++ b/Master/xemtex/perl/lib/File/Copy.pm
@@ -0,0 +1,443 @@
+# File/Copy.pm. Written in 1994 by Aaron Sherman <ajs@ajs.com>. This
+# source code has been placed in the public domain by the author.
+# Please be kind and preserve the documentation.
+#
+# Additions copyright 1996 by Charles Bailey. Permission is granted
+# to distribute the revised code under the same terms as Perl itself.
+
+package File::Copy;
+
+use 5.006;
+use strict;
+use warnings;
+use Carp;
+use File::Spec;
+use Config;
+our(@ISA, @EXPORT, @EXPORT_OK, $VERSION, $Too_Big, $Syscopy_is_copy);
+sub copy;
+sub syscopy;
+sub cp;
+sub mv;
+
+# Note that this module implements only *part* of the API defined by
+# the File/Copy.pm module of the File-Tools-2.0 package. However, that
+# package has not yet been updated to work with Perl 5.004, and so it
+# would be a Bad Thing for the CPAN module to grab it and replace this
+# module. Therefore, we set this module's version higher than 2.0.
+$VERSION = '2.05';
+
+require Exporter;
+@ISA = qw(Exporter);
+@EXPORT = qw(copy move);
+@EXPORT_OK = qw(cp mv);
+
+$Too_Big = 1024 * 1024 * 2;
+
+my $macfiles;
+if ($^O eq 'MacOS') {
+ $macfiles = eval { require Mac::MoreFiles };
+ warn 'Mac::MoreFiles could not be loaded; using non-native syscopy'
+ if $^W;
+}
+
+sub _catname {
+ my($from, $to) = @_;
+ if (not defined &basename) {
+ require File::Basename;
+ import File::Basename 'basename';
+ }
+
+ if ($^O eq 'MacOS') {
+ # a partial dir name that's valid only in the cwd (e.g. 'tmp')
+ $to = ':' . $to if $to !~ /:/;
+ }
+
+ return File::Spec->catfile($to, basename($from));
+}
+
+sub copy {
+ croak("Usage: copy(FROM, TO [, BUFFERSIZE]) ")
+ unless(@_ == 2 || @_ == 3);
+
+ my $from = shift;
+ my $to = shift;
+
+ my $from_a_handle = (ref($from)
+ ? (ref($from) eq 'GLOB'
+ || UNIVERSAL::isa($from, 'GLOB')
+ || UNIVERSAL::isa($from, 'IO::Handle'))
+ : (ref(\$from) eq 'GLOB'));
+ my $to_a_handle = (ref($to)
+ ? (ref($to) eq 'GLOB'
+ || UNIVERSAL::isa($to, 'GLOB')
+ || UNIVERSAL::isa($to, 'IO::Handle'))
+ : (ref(\$to) eq 'GLOB'));
+
+ if ($from eq $to) { # works for references, too
+ croak("'$from' and '$to' are identical (not copied)");
+ }
+
+ if ($Config{d_symlink} && $Config{d_readlink} &&
+ !($^O eq 'Win32' || $^O eq 'os2' || $^O eq 'vms')) {
+ no warnings 'io'; # don't warn if -l on filehandle
+ if ((-e $from && -l $from) || (-e $to && -l $to)) {
+ my @fs = stat($from);
+ my @ts = stat($to);
+ if (@fs && @ts && $fs[0] == $ts[0] && $fs[1] == $ts[1]) {
+ croak("'$from' and '$to' are identical (not copied)");
+ }
+ }
+ }
+
+ if (!$from_a_handle && !$to_a_handle && -d $to && ! -d $from) {
+ $to = _catname($from, $to);
+ }
+
+ if (defined &syscopy && !$Syscopy_is_copy
+ && !$to_a_handle
+ && !($from_a_handle && $^O eq 'os2' ) # OS/2 cannot handle handles
+ && !($from_a_handle && $^O eq 'mpeix') # and neither can MPE/iX.
+ && !($from_a_handle && $^O eq 'MSWin32')
+ && !($from_a_handle && $^O eq 'MacOS')
+ && !($from_a_handle && $^O eq 'NetWare')
+ )
+ {
+ return syscopy($from, $to);
+ }
+
+ my $closefrom = 0;
+ my $closeto = 0;
+ my ($size, $status, $r, $buf);
+ local($\) = '';
+
+ my $from_h;
+ if ($from_a_handle) {
+ $from_h = $from;
+ } else {
+ $from = _protect($from) if $from =~ /^\s/s;
+ $from_h = \do { local *FH };
+ open($from_h, "< $from\0") or goto fail_open1;
+ binmode $from_h or die "($!,$^E)";
+ $closefrom = 1;
+ }
+
+ my $to_h;
+ if ($to_a_handle) {
+ $to_h = $to;
+ } else {
+ $to = _protect($to) if $to =~ /^\s/s;
+ $to_h = \do { local *FH };
+ open($to_h,"> $to\0") or goto fail_open2;
+ binmode $to_h or die "($!,$^E)";
+ $closeto = 1;
+ }
+
+ if (@_) {
+ $size = shift(@_) + 0;
+ croak("Bad buffer size for copy: $size\n") unless ($size > 0);
+ } else {
+ $size = tied(*$from_h) ? 0 : -s $from_h || 0;
+ $size = 1024 if ($size < 512);
+ $size = $Too_Big if ($size > $Too_Big);
+ }
+
+ $! = 0;
+ for (;;) {
+ my ($r, $w, $t);
+ defined($r = sysread($from_h, $buf, $size))
+ or goto fail_inner;
+ last unless $r;
+ for ($w = 0; $w < $r; $w += $t) {
+ $t = syswrite($to_h, $buf, $r - $w, $w)
+ or goto fail_inner;
+ }
+ }
+
+ close($to_h) || goto fail_open2 if $closeto;
+ close($from_h) || goto fail_open1 if $closefrom;
+
+ # Use this idiom to avoid uninitialized value warning.
+ return 1;
+
+ # All of these contortions try to preserve error messages...
+ fail_inner:
+ if ($closeto) {
+ $status = $!;
+ $! = 0;
+ close $to_h;
+ $! = $status unless $!;
+ }
+ fail_open2:
+ if ($closefrom) {
+ $status = $!;
+ $! = 0;
+ close $from_h;
+ $! = $status unless $!;
+ }
+ fail_open1:
+ return 0;
+}
+
+sub move {
+ my($from,$to) = @_;
+ my($copied,$fromsz,$tosz1,$tomt1,$tosz2,$tomt2,$sts,$ossts);
+
+ if (-d $to && ! -d $from) {
+ $to = _catname($from, $to);
+ }
+
+ ($tosz1,$tomt1) = (stat($to))[7,9];
+ $fromsz = -s $from;
+ if ($^O eq 'os2' and defined $tosz1 and defined $fromsz) {
+ # will not rename with overwrite
+ unlink $to;
+ }
+ return 1 if rename $from, $to;
+
+ ($sts,$ossts) = ($! + 0, $^E + 0);
+ # Did rename return an error even though it succeeded, because $to
+ # is on a remote NFS file system, and NFS lost the server's ack?
+ return 1 if defined($fromsz) && !-e $from && # $from disappeared
+ (($tosz2,$tomt2) = (stat($to))[7,9]) && # $to's there
+ ($tosz1 != $tosz2 or $tomt1 != $tomt2) && # and changed
+ $tosz2 == $fromsz; # it's all there
+
+ ($tosz1,$tomt1) = (stat($to))[7,9]; # just in case rename did something
+ return 1 if ($copied = copy($from,$to)) && unlink($from);
+
+ ($tosz2,$tomt2) = ((stat($to))[7,9],0,0) if defined $tomt1;
+ unlink($to) if !defined($tomt1) or $tomt1 != $tomt2 or $tosz1 != $tosz2;
+ ($!,$^E) = ($sts,$ossts);
+ return 0;
+}
+
+*cp = \&copy;
+*mv = \&move;
+
+
+if ($^O eq 'MacOS') {
+ *_protect = sub { MacPerl::MakeFSSpec($_[0]) };
+} else {
+ *_protect = sub { "./$_[0]" };
+}
+
+# &syscopy is an XSUB under OS/2
+unless (defined &syscopy) {
+ if ($^O eq 'VMS') {
+ *syscopy = \&rmscopy;
+ } elsif ($^O eq 'mpeix') {
+ *syscopy = sub {
+ return 0 unless @_ == 2;
+ # Use the MPE cp program in order to
+ # preserve MPE file attributes.
+ return system('/bin/cp', '-f', $_[0], $_[1]) == 0;
+ };
+ } elsif ($^O eq 'MSWin32') {
+ *syscopy = sub {
+ return 0 unless @_ == 2;
+ return Win32::CopyFile(@_, 1);
+ };
+ } elsif ($macfiles) {
+ *syscopy = sub {
+ my($from, $to) = @_;
+ my($dir, $toname);
+
+ return 0 unless -e $from;
+
+ if ($to =~ /(.*:)([^:]+):?$/) {
+ ($dir, $toname) = ($1, $2);
+ } else {
+ ($dir, $toname) = (":", $to);
+ }
+
+ unlink($to);
+ Mac::MoreFiles::FSpFileCopy($from, $dir, $toname, 1);
+ };
+ } else {
+ $Syscopy_is_copy = 1;
+ *syscopy = \&copy;
+ }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+File::Copy - Copy files or filehandles
+
+=head1 SYNOPSIS
+
+ use File::Copy;
+
+ copy("file1","file2");
+ copy("Copy.pm",\*STDOUT);'
+ move("/dev1/fileA","/dev2/fileB");
+
+ use POSIX;
+ use File::Copy cp;
+
+ $n = FileHandle->new("/a/file","r");
+ cp($n,"x");'
+
+=head1 DESCRIPTION
+
+The File::Copy module provides two basic functions, C<copy> and
+C<move>, which are useful for getting the contents of a file from
+one place to another.
+
+=over 4
+
+=item *
+
+The C<copy> function takes two
+parameters: a file to copy from and a file to copy to. Either
+argument may be a string, a FileHandle reference or a FileHandle
+glob. Obviously, if the first argument is a filehandle of some
+sort, it will be read from, and if it is a file I<name> it will
+be opened for reading. Likewise, the second argument will be
+written to (and created if need be). Trying to copy a file on top
+of itself is a fatal error.
+
+B<Note that passing in
+files as handles instead of names may lead to loss of information
+on some operating systems; it is recommended that you use file
+names whenever possible.> Files are opened in binary mode where
+applicable. To get a consistent behaviour when copying from a
+filehandle to a file, use C<binmode> on the filehandle.
+
+An optional third parameter can be used to specify the buffer
+size used for copying. This is the number of bytes from the
+first file, that wil be held in memory at any given time, before
+being written to the second file. The default buffer size depends
+upon the file, but will generally be the whole file (up to 2Mb), or
+1k for filehandles that do not reference files (eg. sockets).
+
+You may use the syntax C<use File::Copy "cp"> to get at the
+"cp" alias for this function. The syntax is I<exactly> the same.
+
+=item *
+
+The C<move> function also takes two parameters: the current name
+and the intended name of the file to be moved. If the destination
+already exists and is a directory, and the source is not a
+directory, then the source file will be renamed into the directory
+specified by the destination.
+
+If possible, move() will simply rename the file. Otherwise, it copies
+the file to the new location and deletes the original. If an error occurs
+during this copy-and-delete process, you may be left with a (possibly partial)
+copy of the file under the destination name.
+
+You may use the "mv" alias for this function in the same way that
+you may use the "cp" alias for C<copy>.
+
+=back
+
+File::Copy also provides the C<syscopy> routine, which copies the
+file specified in the first parameter to the file specified in the
+second parameter, preserving OS-specific attributes and file
+structure. For Unix systems, this is equivalent to the simple
+C<copy> routine, which doesn't preserve OS-specific attributes. For
+VMS systems, this calls the C<rmscopy> routine (see below). For OS/2
+systems, this calls the C<syscopy> XSUB directly. For Win32 systems,
+this calls C<Win32::CopyFile>.
+
+On Mac OS (Classic), C<syscopy> calls C<Mac::MoreFiles::FSpFileCopy>,
+if available.
+
+=head2 Special behaviour if C<syscopy> is defined (OS/2, VMS and Win32)
+
+If both arguments to C<copy> are not file handles,
+then C<copy> will perform a "system copy" of
+the input file to a new output file, in order to preserve file
+attributes, indexed file structure, I<etc.> The buffer size
+parameter is ignored. If either argument to C<copy> is a
+handle to an opened file, then data is copied using Perl
+operators, and no effort is made to preserve file attributes
+or record structure.
+
+The system copy routine may also be called directly under VMS and OS/2
+as C<File::Copy::syscopy> (or under VMS as C<File::Copy::rmscopy>, which
+is the routine that does the actual work for syscopy).
+
+=over 4
+
+=item rmscopy($from,$to[,$date_flag])
+
+The first and second arguments may be strings, typeglobs, typeglob
+references, or objects inheriting from IO::Handle;
+they are used in all cases to obtain the
+I<filespec> of the input and output files, respectively. The
+name and type of the input file are used as defaults for the
+output file, if necessary.
+
+A new version of the output file is always created, which
+inherits the structure and RMS attributes of the input file,
+except for owner and protections (and possibly timestamps;
+see below). All data from the input file is copied to the
+output file; if either of the first two parameters to C<rmscopy>
+is a file handle, its position is unchanged. (Note that this
+means a file handle pointing to the output file will be
+associated with an old version of that file after C<rmscopy>
+returns, not the newly created version.)
+
+The third parameter is an integer flag, which tells C<rmscopy>
+how to handle timestamps. If it is E<lt> 0, none of the input file's
+timestamps are propagated to the output file. If it is E<gt> 0, then
+it is interpreted as a bitmask: if bit 0 (the LSB) is set, then
+timestamps other than the revision date are propagated; if bit 1
+is set, the revision date is propagated. If the third parameter
+to C<rmscopy> is 0, then it behaves much like the DCL COPY command:
+if the name or type of the output file was explicitly specified,
+then no timestamps are propagated, but if they were taken implicitly
+from the input filespec, then all timestamps other than the
+revision date are propagated. If this parameter is not supplied,
+it defaults to 0.
+
+Like C<copy>, C<rmscopy> returns 1 on success. If an error occurs,
+it sets C<$!>, deletes the output file, and returns 0.
+
+=back
+
+=head1 RETURN
+
+All functions return 1 on success, 0 on failure.
+$! will be set if an error was encountered.
+
+=head1 NOTES
+
+=over 4
+
+=item *
+
+On Mac OS (Classic), the path separator is ':', not '/', and the
+current directory is denoted as ':', not '.'. You should be careful
+about specifying relative pathnames. While a full path always begins
+with a volume name, a relative pathname should always begin with a
+':'. If specifying a volume name only, a trailing ':' is required.
+
+E.g.
+
+ copy("file1", "tmp"); # creates the file 'tmp' in the current directory
+ copy("file1", ":tmp:"); # creates :tmp:file1
+ copy("file1", ":tmp"); # same as above
+ copy("file1", "tmp"); # same as above, if 'tmp' is a directory (but don't do
+ # that, since it may cause confusion, see example #1)
+ copy("file1", "tmp:file1"); # error, since 'tmp:' is not a volume
+ copy("file1", ":tmp:file1"); # ok, partial path
+ copy("file1", "DataHD:"); # creates DataHD:file1
+
+ move("MacintoshHD:fileA", "DataHD:fileB"); # moves (don't copies) files from one
+ # volume to another
+
+=back
+
+=head1 AUTHOR
+
+File::Copy was written by Aaron Sherman I<E<lt>ajs@ajs.comE<gt>> in 1995,
+and updated by Charles Bailey I<E<lt>bailey@newman.upenn.eduE<gt>> in 1996.
+
+=cut
+
diff --git a/Master/xemtex/perl/lib/File/Find.pm b/Master/xemtex/perl/lib/File/Find.pm
new file mode 100644
index 00000000000..72fd195c9b0
--- /dev/null
+++ b/Master/xemtex/perl/lib/File/Find.pm
@@ -0,0 +1,1212 @@
+package File::Find;
+use 5.006;
+use strict;
+use warnings;
+use warnings::register;
+our $VERSION = '1.04';
+require Exporter;
+require Cwd;
+
+=head1 NAME
+
+File::Find - Traverse a directory tree.
+
+=head1 SYNOPSIS
+
+ use File::Find;
+ find(\&wanted, @directories_to_seach);
+ sub wanted { ... }
+
+ use File::Find;
+ finddepth(\&wanted, @directories_to_search);
+ sub wanted { ... }
+
+ use File::Find;
+ find({ wanted => \&process, follow => 1 }, '.');
+
+=head1 DESCRIPTION
+
+These are functions for searching through directory trees doing work
+on each file found similar to the Unix I<find> command. File::Find
+exports two functions, C<find> and C<finddepth>. They work similarly
+but have subtle differences.
+
+=over 4
+
+=item B<find>
+
+ find(\&wanted, @directories);
+ find(\%options, @directories);
+
+find() does a breadth-first search over the given @directories in the
+order they are given. In essense, it works from the top down.
+
+For each file or directory found the &wanted subroutine is called (see
+below for details). Additionally, for each directory found it will go
+into that directory and continue the search.
+
+=item B<finddepth>
+
+ finddepth(\&wanted, @directories);
+ finddepth(\%options, @directories);
+
+finddepth() works just like find() except it does a depth-first search.
+It works from the bottom of the directory tree up.
+
+=back
+
+=head2 %options
+
+The first argument to find() is either a hash reference describing the
+operations to be performed for each file, or a code reference. The
+code reference is described in L<The wanted function> below.
+
+Here are the possible keys for the hash:
+
+=over 3
+
+=item C<wanted>
+
+The value should be a code reference. This code reference is
+described in L<The wanted function> below.
+
+=item C<bydepth>
+
+Reports the name of a directory only AFTER all its entries
+have been reported. Entry point finddepth() is a shortcut for
+specifying C<{ bydepth =E<gt> 1 }> in the first argument of find().
+
+=item C<preprocess>
+
+The value should be a code reference. This code reference is used to
+preprocess the current directory. The name of currently processed
+directory is in $File::Find::dir. Your preprocessing function is
+called after readdir() but before the loop that calls the wanted()
+function. It is called with a list of strings (actually file/directory
+names) and is expected to return a list of strings. The code can be
+used to sort the file/directory names alphabetically, numerically,
+or to filter out directory entries based on their name alone. When
+I<follow> or I<follow_fast> are in effect, C<preprocess> is a no-op.
+
+=item C<postprocess>
+
+The value should be a code reference. It is invoked just before leaving
+the currently processed directory. It is called in void context with no
+arguments. The name of the current directory is in $File::Find::dir. This
+hook is handy for summarizing a directory, such as calculating its disk
+usage. When I<follow> or I<follow_fast> are in effect, C<postprocess> is a
+no-op.
+
+=item C<follow>
+
+Causes symbolic links to be followed. Since directory trees with symbolic
+links (followed) may contain files more than once and may even have
+cycles, a hash has to be built up with an entry for each file.
+This might be expensive both in space and time for a large
+directory tree. See I<follow_fast> and I<follow_skip> below.
+If either I<follow> or I<follow_fast> is in effect:
+
+=over 6
+
+=item *
+
+It is guaranteed that an I<lstat> has been called before the user's
+I<wanted()> function is called. This enables fast file checks involving S< _>.
+
+=item *
+
+There is a variable C<$File::Find::fullname> which holds the absolute
+pathname of the file with all symbolic links resolved
+
+=back
+
+=item C<follow_fast>
+
+This is similar to I<follow> except that it may report some files more
+than once. It does detect cycles, however. Since only symbolic links
+have to be hashed, this is much cheaper both in space and time. If
+processing a file more than once (by the user's I<wanted()> function)
+is worse than just taking time, the option I<follow> should be used.
+
+=item C<follow_skip>
+
+C<follow_skip==1>, which is the default, causes all files which are
+neither directories nor symbolic links to be ignored if they are about
+to be processed a second time. If a directory or a symbolic link
+are about to be processed a second time, File::Find dies.
+C<follow_skip==0> causes File::Find to die if any file is about to be
+processed a second time.
+C<follow_skip==2> causes File::Find to ignore any duplicate files and
+directories but to proceed normally otherwise.
+
+=item C<dangling_symlinks>
+
+If true and a code reference, will be called with the symbolic link
+name and the directory it lives in as arguments. Otherwise, if true
+and warnings are on, warning "symbolic_link_name is a dangling
+symbolic link\n" will be issued. If false, the dangling symbolic link
+will be silently ignored.
+
+=item C<no_chdir>
+
+Does not C<chdir()> to each directory as it recurses. The wanted()
+function will need to be aware of this, of course. In this case,
+C<$_> will be the same as C<$File::Find::name>.
+
+=item C<untaint>
+
+If find is used in taint-mode (-T command line switch or if EUID != UID
+or if EGID != GID) then internally directory names have to be untainted
+before they can be chdir'ed to. Therefore they are checked against a regular
+expression I<untaint_pattern>. Note that all names passed to the user's
+I<wanted()> function are still tainted. If this option is used while
+not in taint-mode, C<untaint> is a no-op.
+
+=item C<untaint_pattern>
+
+See above. This should be set using the C<qr> quoting operator.
+The default is set to C<qr|^([-+@\w./]+)$|>.
+Note that the parentheses are vital.
+
+=item C<untaint_skip>
+
+If set, a directory which fails the I<untaint_pattern> is skipped,
+including all its sub-directories. The default is to 'die' in such a case.
+
+=back
+
+=head2 The wanted function
+
+The wanted() function does whatever verifications you want on each
+file and directory. It takes no arguments but rather does its work
+through a collection of variables.
+
+=over 4
+
+=item C<$File::Find::dir> is the current directory name,
+
+=item C<$_> is the current filename within that directory
+
+=item C<$File::Find::name> is the complete pathname to the file.
+
+=back
+
+Don't modify these variables.
+
+For example, when examining the file /some/path/foo.ext you will have:
+
+ $File::Find::dir = /some/path/
+ $_ = foo.ext
+ $File::Find::name = /some/path/foo.ext
+
+You are chdir()'d toC<$File::Find::dir> when the function is called,
+unless C<no_chdir> was specified. Note that when changing to
+directories is in effect the root directory (F</>) is a somewhat
+special case inasmuch as the concatenation of C<$File::Find::dir>,
+C<'/'> and C<$_> is not literally equal to C<$File::Find::name>. The
+table below summarizes all variants:
+
+ $File::Find::name $File::Find::dir $_
+ default / / .
+ no_chdir=>0 /etc / etc
+ /etc/x /etc x
+
+ no_chdir=>1 / / /
+ /etc / /etc
+ /etc/x /etc /etc/x
+
+
+When <follow> or <follow_fast> are in effect, there is
+also a C<$File::Find::fullname>. The function may set
+C<$File::Find::prune> to prune the tree unless C<bydepth> was
+specified. Unless C<follow> or C<follow_fast> is specified, for
+compatibility reasons (find.pl, find2perl) there are in addition the
+following globals available: C<$File::Find::topdir>,
+C<$File::Find::topdev>, C<$File::Find::topino>,
+C<$File::Find::topmode> and C<$File::Find::topnlink>.
+
+This library is useful for the C<find2perl> tool, which when fed,
+
+ find2perl / -name .nfs\* -mtime +7 \
+ -exec rm -f {} \; -o -fstype nfs -prune
+
+produces something like:
+
+ sub wanted {
+ /^\.nfs.*\z/s &&
+ (($dev, $ino, $mode, $nlink, $uid, $gid) = lstat($_)) &&
+ int(-M _) > 7 &&
+ unlink($_)
+ ||
+ ($nlink || (($dev, $ino, $mode, $nlink, $uid, $gid) = lstat($_))) &&
+ $dev < 0 &&
+ ($File::Find::prune = 1);
+ }
+
+Notice the C<_> in the above C<int(-M _)>: the C<_> is a magical
+filehandle that caches the information from the preceding
+stat(), lstat(), or filetest.
+
+Here's another interesting wanted function. It will find all symbolic
+links that don't resolve:
+
+ sub wanted {
+ -l && !-e && print "bogus link: $File::Find::name\n";
+ }
+
+See also the script C<pfind> on CPAN for a nice application of this
+module.
+
+=head1 WARNINGS
+
+If you run your program with the C<-w> switch, or if you use the
+C<warnings> pragma, File::Find will report warnings for several weird
+situations. You can disable these warnings by putting the statement
+
+ no warnings 'File::Find';
+
+in the appropriate scope. See L<perllexwarn> for more info about lexical
+warnings.
+
+=head1 CAVEAT
+
+=over 2
+
+=item $dont_use_nlink
+
+You can set the variable C<$File::Find::dont_use_nlink> to 1, if you want to
+force File::Find to always stat directories. This was used for file systems
+that do not have an C<nlink> count matching the number of sub-directories.
+Examples are ISO-9660 (CD-ROM), AFS, HPFS (OS/2 file system), FAT (DOS file
+system) and a couple of others.
+
+You shouldn't need to set this variable, since File::Find should now detect
+such file systems on-the-fly and switch itself to using stat. This works even
+for parts of your file system, like a mounted CD-ROM.
+
+If you do set C<$File::Find::dont_use_nlink> to 1, you will notice slow-downs.
+
+=item symlinks
+
+Be aware that the option to follow symbolic links can be dangerous.
+Depending on the structure of the directory tree (including symbolic
+links to directories) you might traverse a given (physical) directory
+more than once (only if C<follow_fast> is in effect).
+Furthermore, deleting or changing files in a symbolically linked directory
+might cause very unpleasant surprises, since you delete or change files
+in an unknown directory.
+
+=back
+
+=head1 NOTES
+
+=over 4
+
+=item *
+
+Mac OS (Classic) users should note a few differences:
+
+=over 4
+
+=item *
+
+The path separator is ':', not '/', and the current directory is denoted
+as ':', not '.'. You should be careful about specifying relative pathnames.
+While a full path always begins with a volume name, a relative pathname
+should always begin with a ':'. If specifying a volume name only, a
+trailing ':' is required.
+
+=item *
+
+C<$File::Find::dir> is guaranteed to end with a ':'. If C<$_>
+contains the name of a directory, that name may or may not end with a
+':'. Likewise, C<$File::Find::name>, which contains the complete
+pathname to that directory, and C<$File::Find::fullname>, which holds
+the absolute pathname of that directory with all symbolic links resolved,
+may or may not end with a ':'.
+
+=item *
+
+The default C<untaint_pattern> (see above) on Mac OS is set to
+C<qr|^(.+)$|>. Note that the parentheses are vital.
+
+=item *
+
+The invisible system file "Icon\015" is ignored. While this file may
+appear in every directory, there are some more invisible system files
+on every volume, which are all located at the volume root level (i.e.
+"MacintoshHD:"). These system files are B<not> excluded automatically.
+Your filter may use the following code to recognize invisible files or
+directories (requires Mac::Files):
+
+ use Mac::Files;
+
+ # invisible() -- returns 1 if file/directory is invisible,
+ # 0 if it's visible or undef if an error occurred
+
+ sub invisible($) {
+ my $file = shift;
+ my ($fileCat, $fileInfo);
+ my $invisible_flag = 1 << 14;
+
+ if ( $fileCat = FSpGetCatInfo($file) ) {
+ if ($fileInfo = $fileCat->ioFlFndrInfo() ) {
+ return (($fileInfo->fdFlags & $invisible_flag) && 1);
+ }
+ }
+ return undef;
+ }
+
+Generally, invisible files are system files, unless an odd application
+decides to use invisible files for its own purposes. To distinguish
+such files from system files, you have to look at the B<type> and B<creator>
+file attributes. The MacPerl built-in functions C<GetFileInfo(FILE)> and
+C<SetFileInfo(CREATOR, TYPE, FILES)> offer access to these attributes
+(see MacPerl.pm for details).
+
+Files that appear on the desktop actually reside in an (hidden) directory
+named "Desktop Folder" on the particular disk volume. Note that, although
+all desktop files appear to be on the same "virtual" desktop, each disk
+volume actually maintains its own "Desktop Folder" directory.
+
+=back
+
+=back
+
+=head1 HISTORY
+
+File::Find used to produce incorrect results if called recursively.
+During the development of perl 5.8 this bug was fixed.
+The first fixed version of File::Find was 1.01.
+
+=cut
+
+our @ISA = qw(Exporter);
+our @EXPORT = qw(find finddepth);
+
+
+use strict;
+my $Is_VMS;
+my $Is_MacOS;
+
+require File::Basename;
+require File::Spec;
+
+# Should ideally be my() not our() but local() currently
+# refuses to operate on lexicals
+
+our %SLnkSeen;
+our ($wanted_callback, $avoid_nlink, $bydepth, $no_chdir, $follow,
+ $follow_skip, $full_check, $untaint, $untaint_skip, $untaint_pat,
+ $pre_process, $post_process, $dangling_symlinks);
+
+sub contract_name {
+ my ($cdir,$fn) = @_;
+
+ return substr($cdir,0,rindex($cdir,'/')) if $fn eq $File::Find::current_dir;
+
+ $cdir = substr($cdir,0,rindex($cdir,'/')+1);
+
+ $fn =~ s|^\./||;
+
+ my $abs_name= $cdir . $fn;
+
+ if (substr($fn,0,3) eq '../') {
+ 1 while $abs_name =~ s!/[^/]*/\.\./!/!;
+ }
+
+ return $abs_name;
+}
+
+# return the absolute name of a directory or file
+sub contract_name_Mac {
+ my ($cdir,$fn) = @_;
+ my $abs_name;
+
+ if ($fn =~ /^(:+)(.*)$/) { # valid pathname starting with a ':'
+
+ my $colon_count = length ($1);
+ if ($colon_count == 1) {
+ $abs_name = $cdir . $2;
+ return $abs_name;
+ }
+ else {
+ # need to move up the tree, but
+ # only if it's not a volume name
+ for (my $i=1; $i<$colon_count; $i++) {
+ unless ($cdir =~ /^[^:]+:$/) { # volume name
+ $cdir =~ s/[^:]+:$//;
+ }
+ else {
+ return undef;
+ }
+ }
+ $abs_name = $cdir . $2;
+ return $abs_name;
+ }
+
+ }
+ else {
+
+ # $fn may be a valid path to a directory or file or (dangling)
+ # symlink, without a leading ':'
+ if ( (-e $fn) || (-l $fn) ) {
+ if ($fn =~ /^[^:]+:/) { # a volume name like DataHD:*
+ return $fn; # $fn is already an absolute path
+ }
+ else {
+ $abs_name = $cdir . $fn;
+ return $abs_name;
+ }
+ }
+ else { # argh!, $fn is not a valid directory/file
+ return undef;
+ }
+ }
+}
+
+sub PathCombine($$) {
+ my ($Base,$Name) = @_;
+ my $AbsName;
+
+ if ($Is_MacOS) {
+ # $Name is the resolved symlink (always a full path on MacOS),
+ # i.e. there's no need to call contract_name_Mac()
+ $AbsName = $Name;
+
+ # (simple) check for recursion
+ if ( ( $Base =~ /^$AbsName/) && (-d $AbsName) ) { # recursion
+ return undef;
+ }
+ }
+ else {
+ if (substr($Name,0,1) eq '/') {
+ $AbsName= $Name;
+ }
+ else {
+ $AbsName= contract_name($Base,$Name);
+ }
+
+ # (simple) check for recursion
+ my $newlen= length($AbsName);
+ if ($newlen <= length($Base)) {
+ if (($newlen == length($Base) || substr($Base,$newlen,1) eq '/')
+ && $AbsName eq substr($Base,0,$newlen))
+ {
+ return undef;
+ }
+ }
+ }
+ return $AbsName;
+}
+
+sub Follow_SymLink($) {
+ my ($AbsName) = @_;
+
+ my ($NewName,$DEV, $INO);
+ ($DEV, $INO)= lstat $AbsName;
+
+ while (-l _) {
+ if ($SLnkSeen{$DEV, $INO}++) {
+ if ($follow_skip < 2) {
+ die "$AbsName is encountered a second time";
+ }
+ else {
+ return undef;
+ }
+ }
+ $NewName= PathCombine($AbsName, readlink($AbsName));
+ unless(defined $NewName) {
+ if ($follow_skip < 2) {
+ die "$AbsName is a recursive symbolic link";
+ }
+ else {
+ return undef;
+ }
+ }
+ else {
+ $AbsName= $NewName;
+ }
+ ($DEV, $INO) = lstat($AbsName);
+ return undef unless defined $DEV; # dangling symbolic link
+ }
+
+ if ($full_check && defined $DEV && $SLnkSeen{$DEV, $INO}++) {
+ if ( ($follow_skip < 1) || ((-d _) && ($follow_skip < 2)) ) {
+ die "$AbsName encountered a second time";
+ }
+ else {
+ return undef;
+ }
+ }
+
+ return $AbsName;
+}
+
+our($dir, $name, $fullname, $prune);
+sub _find_dir_symlnk($$$);
+sub _find_dir($$$);
+
+# check whether or not a scalar variable is tainted
+# (code straight from the Camel, 3rd ed., page 561)
+sub is_tainted_pp {
+ my $arg = shift;
+ my $nada = substr($arg, 0, 0); # zero-length
+ local $@;
+ eval { eval "# $nada" };
+ return length($@) != 0;
+}
+
+sub _find_opt {
+ my $wanted = shift;
+ die "invalid top directory" unless defined $_[0];
+
+ # This function must local()ize everything because callbacks may
+ # call find() or finddepth()
+
+ local %SLnkSeen;
+ local ($wanted_callback, $avoid_nlink, $bydepth, $no_chdir, $follow,
+ $follow_skip, $full_check, $untaint, $untaint_skip, $untaint_pat,
+ $pre_process, $post_process, $dangling_symlinks);
+ local($dir, $name, $fullname, $prune);
+
+ my $cwd = $wanted->{bydepth} ? Cwd::fastcwd() : Cwd::getcwd();
+ my $cwd_untainted = $cwd;
+ my $check_t_cwd = 1;
+ $wanted_callback = $wanted->{wanted};
+ $bydepth = $wanted->{bydepth};
+ $pre_process = $wanted->{preprocess};
+ $post_process = $wanted->{postprocess};
+ $no_chdir = $wanted->{no_chdir};
+ $full_check = $wanted->{follow};
+ $follow = $full_check || $wanted->{follow_fast};
+ $follow_skip = $wanted->{follow_skip};
+ $untaint = $wanted->{untaint};
+ $untaint_pat = $wanted->{untaint_pattern};
+ $untaint_skip = $wanted->{untaint_skip};
+ $dangling_symlinks = $wanted->{dangling_symlinks};
+
+ # for compatibility reasons (find.pl, find2perl)
+ local our ($topdir, $topdev, $topino, $topmode, $topnlink);
+
+ # a symbolic link to a directory doesn't increase the link count
+ $avoid_nlink = $follow || $File::Find::dont_use_nlink;
+
+ my ($abs_dir, $Is_Dir);
+
+ Proc_Top_Item:
+ foreach my $TOP (@_) {
+ my $top_item = $TOP;
+
+ if ($Is_MacOS) {
+ ($topdev,$topino,$topmode,$topnlink) = $follow ? stat $top_item : lstat $top_item;
+ $top_item = ":$top_item"
+ if ( (-d _) && ( $top_item !~ /:/ ) );
+ }
+ else {
+ $top_item =~ s|/\z|| unless $top_item eq '/';
+ ($topdev,$topino,$topmode,$topnlink) = $follow ? stat $top_item : lstat $top_item;
+ }
+
+ $Is_Dir= 0;
+
+ if ($follow) {
+
+ if ($Is_MacOS) {
+ $cwd = "$cwd:" unless ($cwd =~ /:$/); # for safety
+
+ if ($top_item eq $File::Find::current_dir) {
+ $abs_dir = $cwd;
+ }
+ else {
+ $abs_dir = contract_name_Mac($cwd, $top_item);
+ unless (defined $abs_dir) {
+ warnings::warnif "Can't determine absolute path for $top_item (No such file or directory)\n";
+ next Proc_Top_Item;
+ }
+ }
+
+ }
+ else {
+ if (substr($top_item,0,1) eq '/') {
+ $abs_dir = $top_item;
+ }
+ elsif ($top_item eq $File::Find::current_dir) {
+ $abs_dir = $cwd;
+ }
+ else { # care about any ../
+ $abs_dir = contract_name("$cwd/",$top_item);
+ }
+ }
+ $abs_dir= Follow_SymLink($abs_dir);
+ unless (defined $abs_dir) {
+ if ($dangling_symlinks) {
+ if (ref $dangling_symlinks eq 'CODE') {
+ $dangling_symlinks->($top_item, $cwd);
+ } else {
+ warnings::warnif "$top_item is a dangling symbolic link\n";
+ }
+ }
+ next Proc_Top_Item;
+ }
+
+ if (-d _) {
+ _find_dir_symlnk($wanted, $abs_dir, $top_item);
+ $Is_Dir= 1;
+ }
+ }
+ else { # no follow
+ $topdir = $top_item;
+ unless (defined $topnlink) {
+ warnings::warnif "Can't stat $top_item: $!\n";
+ next Proc_Top_Item;
+ }
+ if (-d _) {
+ $top_item =~ s/\.dir\z// if $Is_VMS;
+ _find_dir($wanted, $top_item, $topnlink);
+ $Is_Dir= 1;
+ }
+ else {
+ $abs_dir= $top_item;
+ }
+ }
+
+ unless ($Is_Dir) {
+ unless (($_,$dir) = File::Basename::fileparse($abs_dir)) {
+ if ($Is_MacOS) {
+ ($dir,$_) = (':', $top_item); # $File::Find::dir, $_
+ }
+ else {
+ ($dir,$_) = ('./', $top_item);
+ }
+ }
+
+ $abs_dir = $dir;
+ if (( $untaint ) && (is_tainted($dir) )) {
+ ( $abs_dir ) = $dir =~ m|$untaint_pat|;
+ unless (defined $abs_dir) {
+ if ($untaint_skip == 0) {
+ die "directory $dir is still tainted";
+ }
+ else {
+ next Proc_Top_Item;
+ }
+ }
+ }
+
+ unless ($no_chdir || chdir $abs_dir) {
+ warnings::warnif "Couldn't chdir $abs_dir: $!\n";
+ next Proc_Top_Item;
+ }
+
+ $name = $abs_dir . $_; # $File::Find::name
+
+ { $wanted_callback->() }; # protect against wild "next"
+
+ }
+
+ unless ( $no_chdir ) {
+ if ( ($check_t_cwd) && (($untaint) && (is_tainted($cwd) )) ) {
+ ( $cwd_untainted ) = $cwd =~ m|$untaint_pat|;
+ unless (defined $cwd_untainted) {
+ die "insecure cwd in find(depth)";
+ }
+ $check_t_cwd = 0;
+ }
+ unless (chdir $cwd_untainted) {
+ die "Can't cd to $cwd: $!\n";
+ }
+ }
+ }
+}
+
+# API:
+# $wanted
+# $p_dir : "parent directory"
+# $nlink : what came back from the stat
+# preconditions:
+# chdir (if not no_chdir) to dir
+
+sub _find_dir($$$) {
+ my ($wanted, $p_dir, $nlink) = @_;
+ my ($CdLvl,$Level) = (0,0);
+ my @Stack;
+ my @filenames;
+ my ($subcount,$sub_nlink);
+ my $SE= [];
+ my $dir_name= $p_dir;
+ my $dir_pref;
+ my $dir_rel = $File::Find::current_dir;
+ my $tainted = 0;
+ my $no_nlink;
+
+ if ($Is_MacOS) {
+ $dir_pref= ($p_dir =~ /:$/) ? $p_dir : "$p_dir:"; # preface
+ }
+ else {
+ $dir_pref= ( $p_dir eq '/' ? '/' : "$p_dir/" );
+ }
+
+ local ($dir, $name, $prune, *DIR);
+
+ unless ( $no_chdir || ($p_dir eq $File::Find::current_dir)) {
+ my $udir = $p_dir;
+ if (( $untaint ) && (is_tainted($p_dir) )) {
+ ( $udir ) = $p_dir =~ m|$untaint_pat|;
+ unless (defined $udir) {
+ if ($untaint_skip == 0) {
+ die "directory $p_dir is still tainted";
+ }
+ else {
+ return;
+ }
+ }
+ }
+ unless (chdir $udir) {
+ warnings::warnif "Can't cd to $udir: $!\n";
+ return;
+ }
+ }
+
+ # push the starting directory
+ push @Stack,[$CdLvl,$p_dir,$dir_rel,-1] if $bydepth;
+
+ if ($Is_MacOS) {
+ $p_dir = $dir_pref; # ensure trailing ':'
+ }
+
+ while (defined $SE) {
+ unless ($bydepth) {
+ $dir= $p_dir; # $File::Find::dir
+ $name= $dir_name; # $File::Find::name
+ $_= ($no_chdir ? $dir_name : $dir_rel ); # $_
+ # prune may happen here
+ $prune= 0;
+ { $wanted_callback->() }; # protect against wild "next"
+ next if $prune;
+ }
+
+ # change to that directory
+ unless ($no_chdir || ($dir_rel eq $File::Find::current_dir)) {
+ my $udir= $dir_rel;
+ if ( ($untaint) && (($tainted) || ($tainted = is_tainted($dir_rel) )) ) {
+ ( $udir ) = $dir_rel =~ m|$untaint_pat|;
+ unless (defined $udir) {
+ if ($untaint_skip == 0) {
+ if ($Is_MacOS) {
+ die "directory ($p_dir) $dir_rel is still tainted";
+ }
+ else {
+ die "directory (" . ($p_dir ne '/' ? $p_dir : '') . "/) $dir_rel is still tainted";
+ }
+ } else { # $untaint_skip == 1
+ next;
+ }
+ }
+ }
+ unless (chdir $udir) {
+ if ($Is_MacOS) {
+ warnings::warnif "Can't cd to ($p_dir) $udir: $!\n";
+ }
+ else {
+ warnings::warnif "Can't cd to (" .
+ ($p_dir ne '/' ? $p_dir : '') . "/) $udir: $!\n";
+ }
+ next;
+ }
+ $CdLvl++;
+ }
+
+ if ($Is_MacOS) {
+ $dir_name = "$dir_name:" unless ($dir_name =~ /:$/);
+ }
+
+ $dir= $dir_name; # $File::Find::dir
+
+ # Get the list of files in the current directory.
+ unless (opendir DIR, ($no_chdir ? $dir_name : $File::Find::current_dir)) {
+ warnings::warnif "Can't opendir($dir_name): $!\n";
+ next;
+ }
+ @filenames = readdir DIR;
+ closedir(DIR);
+ @filenames = $pre_process->(@filenames) if $pre_process;
+ push @Stack,[$CdLvl,$dir_name,"",-2] if $post_process;
+
+ # default: use whatever was specifid
+ # (if $nlink >= 2, and $avoid_nlink == 0, this will switch back)
+ $no_nlink = $avoid_nlink;
+ # if dir has wrong nlink count, force switch to slower stat method
+ $no_nlink = 1 if ($nlink < 2);
+
+ if ($nlink == 2 && !$no_nlink) {
+ # This dir has no subdirectories.
+ for my $FN (@filenames) {
+ next if $FN =~ $File::Find::skip_pattern;
+
+ $name = $dir_pref . $FN; # $File::Find::name
+ $_ = ($no_chdir ? $name : $FN); # $_
+ { $wanted_callback->() }; # protect against wild "next"
+ }
+
+ }
+ else {
+ # This dir has subdirectories.
+ $subcount = $nlink - 2;
+
+ for my $FN (@filenames) {
+ next if $FN =~ $File::Find::skip_pattern;
+ if ($subcount > 0 || $no_nlink) {
+ # Seen all the subdirs?
+ # check for directoriness.
+ # stat is faster for a file in the current directory
+ $sub_nlink = (lstat ($no_chdir ? $dir_pref . $FN : $FN))[3];
+
+ if (-d _) {
+ --$subcount;
+ $FN =~ s/\.dir\z// if $Is_VMS;
+ push @Stack,[$CdLvl,$dir_name,$FN,$sub_nlink];
+ }
+ else {
+ $name = $dir_pref . $FN; # $File::Find::name
+ $_= ($no_chdir ? $name : $FN); # $_
+ { $wanted_callback->() }; # protect against wild "next"
+ }
+ }
+ else {
+ $name = $dir_pref . $FN; # $File::Find::name
+ $_= ($no_chdir ? $name : $FN); # $_
+ { $wanted_callback->() }; # protect against wild "next"
+ }
+ }
+ }
+ }
+ continue {
+ while ( defined ($SE = pop @Stack) ) {
+ ($Level, $p_dir, $dir_rel, $nlink) = @$SE;
+ if ($CdLvl > $Level && !$no_chdir) {
+ my $tmp;
+ if ($Is_MacOS) {
+ $tmp = (':' x ($CdLvl-$Level)) . ':';
+ }
+ else {
+ $tmp = join('/',('..') x ($CdLvl-$Level));
+ }
+ die "Can't cd to $dir_name" . $tmp
+ unless chdir ($tmp);
+ $CdLvl = $Level;
+ }
+
+ if ($Is_MacOS) {
+ # $pdir always has a trailing ':', except for the starting dir,
+ # where $dir_rel eq ':'
+ $dir_name = "$p_dir$dir_rel";
+ $dir_pref = "$dir_name:";
+ }
+ else {
+ $dir_name = ($p_dir eq '/' ? "/$dir_rel" : "$p_dir/$dir_rel");
+ $dir_pref = "$dir_name/";
+ }
+
+ if ( $nlink == -2 ) {
+ $name = $dir = $p_dir; # $File::Find::name / dir
+ $_ = $File::Find::current_dir;
+ $post_process->(); # End-of-directory processing
+ }
+ elsif ( $nlink < 0 ) { # must be finddepth, report dirname now
+ $name = $dir_name;
+ if ($Is_MacOS) {
+ if ($dir_rel eq ':') { # must be the top dir, where we started
+ $name =~ s|:$||; # $File::Find::name
+ $p_dir = "$p_dir:" unless ($p_dir =~ /:$/);
+ }
+ $dir = $p_dir; # $File::Find::dir
+ $_ = ($no_chdir ? $name : $dir_rel); # $_
+ }
+ else {
+ if ( substr($name,-2) eq '/.' ) {
+ substr($name, length($name) == 2 ? -1 : -2) = '';
+ }
+ $dir = $p_dir;
+ $_ = ($no_chdir ? $dir_name : $dir_rel );
+ if ( substr($_,-2) eq '/.' ) {
+ substr($_, length($_) == 2 ? -1 : -2) = '';
+ }
+ }
+ { $wanted_callback->() }; # protect against wild "next"
+ }
+ else {
+ push @Stack,[$CdLvl,$p_dir,$dir_rel,-1] if $bydepth;
+ last;
+ }
+ }
+ }
+}
+
+
+# API:
+# $wanted
+# $dir_loc : absolute location of a dir
+# $p_dir : "parent directory"
+# preconditions:
+# chdir (if not no_chdir) to dir
+
+sub _find_dir_symlnk($$$) {
+ my ($wanted, $dir_loc, $p_dir) = @_; # $dir_loc is the absolute directory
+ my @Stack;
+ my @filenames;
+ my $new_loc;
+ my $updir_loc = $dir_loc; # untainted parent directory
+ my $SE = [];
+ my $dir_name = $p_dir;
+ my $dir_pref;
+ my $loc_pref;
+ my $dir_rel = $File::Find::current_dir;
+ my $byd_flag; # flag for pending stack entry if $bydepth
+ my $tainted = 0;
+ my $ok = 1;
+
+ if ($Is_MacOS) {
+ $dir_pref = ($p_dir =~ /:$/) ? "$p_dir" : "$p_dir:";
+ $loc_pref = ($dir_loc =~ /:$/) ? "$dir_loc" : "$dir_loc:";
+ } else {
+ $dir_pref = ( $p_dir eq '/' ? '/' : "$p_dir/" );
+ $loc_pref = ( $dir_loc eq '/' ? '/' : "$dir_loc/" );
+ }
+
+ local ($dir, $name, $fullname, $prune, *DIR);
+
+ unless ($no_chdir) {
+ # untaint the topdir
+ if (( $untaint ) && (is_tainted($dir_loc) )) {
+ ( $updir_loc ) = $dir_loc =~ m|$untaint_pat|; # parent dir, now untainted
+ # once untainted, $updir_loc is pushed on the stack (as parent directory);
+ # hence, we don't need to untaint the parent directory every time we chdir
+ # to it later
+ unless (defined $updir_loc) {
+ if ($untaint_skip == 0) {
+ die "directory $dir_loc is still tainted";
+ }
+ else {
+ return;
+ }
+ }
+ }
+ $ok = chdir($updir_loc) unless ($p_dir eq $File::Find::current_dir);
+ unless ($ok) {
+ warnings::warnif "Can't cd to $updir_loc: $!\n";
+ return;
+ }
+ }
+
+ push @Stack,[$dir_loc,$updir_loc,$p_dir,$dir_rel,-1] if $bydepth;
+
+ if ($Is_MacOS) {
+ $p_dir = $dir_pref; # ensure trailing ':'
+ }
+
+ while (defined $SE) {
+
+ unless ($bydepth) {
+ # change (back) to parent directory (always untainted)
+ unless ($no_chdir) {
+ unless (chdir $updir_loc) {
+ warnings::warnif "Can't cd to $updir_loc: $!\n";
+ next;
+ }
+ }
+ $dir= $p_dir; # $File::Find::dir
+ $name= $dir_name; # $File::Find::name
+ $_= ($no_chdir ? $dir_name : $dir_rel ); # $_
+ $fullname= $dir_loc; # $File::Find::fullname
+ # prune may happen here
+ $prune= 0;
+ lstat($_); # make sure file tests with '_' work
+ { $wanted_callback->() }; # protect against wild "next"
+ next if $prune;
+ }
+
+ # change to that directory
+ unless ($no_chdir || ($dir_rel eq $File::Find::current_dir)) {
+ $updir_loc = $dir_loc;
+ if ( ($untaint) && (($tainted) || ($tainted = is_tainted($dir_loc) )) ) {
+ # untaint $dir_loc, what will be pushed on the stack as (untainted) parent dir
+ ( $updir_loc ) = $dir_loc =~ m|$untaint_pat|;
+ unless (defined $updir_loc) {
+ if ($untaint_skip == 0) {
+ die "directory $dir_loc is still tainted";
+ }
+ else {
+ next;
+ }
+ }
+ }
+ unless (chdir $updir_loc) {
+ warnings::warnif "Can't cd to $updir_loc: $!\n";
+ next;
+ }
+ }
+
+ if ($Is_MacOS) {
+ $dir_name = "$dir_name:" unless ($dir_name =~ /:$/);
+ }
+
+ $dir = $dir_name; # $File::Find::dir
+
+ # Get the list of files in the current directory.
+ unless (opendir DIR, ($no_chdir ? $dir_loc : $File::Find::current_dir)) {
+ warnings::warnif "Can't opendir($dir_loc): $!\n";
+ next;
+ }
+ @filenames = readdir DIR;
+ closedir(DIR);
+
+ for my $FN (@filenames) {
+ next if $FN =~ $File::Find::skip_pattern;
+
+ # follow symbolic links / do an lstat
+ $new_loc = Follow_SymLink($loc_pref.$FN);
+
+ # ignore if invalid symlink
+ next unless defined $new_loc;
+
+ if (-d _) {
+ push @Stack,[$new_loc,$updir_loc,$dir_name,$FN,1];
+ }
+ else {
+ $fullname = $new_loc; # $File::Find::fullname
+ $name = $dir_pref . $FN; # $File::Find::name
+ $_ = ($no_chdir ? $name : $FN); # $_
+ { $wanted_callback->() }; # protect against wild "next"
+ }
+ }
+
+ }
+ continue {
+ while (defined($SE = pop @Stack)) {
+ ($dir_loc, $updir_loc, $p_dir, $dir_rel, $byd_flag) = @$SE;
+ if ($Is_MacOS) {
+ # $p_dir always has a trailing ':', except for the starting dir,
+ # where $dir_rel eq ':'
+ $dir_name = "$p_dir$dir_rel";
+ $dir_pref = "$dir_name:";
+ $loc_pref = ($dir_loc =~ /:$/) ? $dir_loc : "$dir_loc:";
+ }
+ else {
+ $dir_name = ($p_dir eq '/' ? "/$dir_rel" : "$p_dir/$dir_rel");
+ $dir_pref = "$dir_name/";
+ $loc_pref = "$dir_loc/";
+ }
+ if ( $byd_flag < 0 ) { # must be finddepth, report dirname now
+ unless ($no_chdir || ($dir_rel eq $File::Find::current_dir)) {
+ unless (chdir $updir_loc) { # $updir_loc (parent dir) is always untainted
+ warnings::warnif "Can't cd to $updir_loc: $!\n";
+ next;
+ }
+ }
+ $fullname = $dir_loc; # $File::Find::fullname
+ $name = $dir_name; # $File::Find::name
+ if ($Is_MacOS) {
+ if ($dir_rel eq ':') { # must be the top dir, where we started
+ $name =~ s|:$||; # $File::Find::name
+ $p_dir = "$p_dir:" unless ($p_dir =~ /:$/);
+ }
+ $dir = $p_dir; # $File::Find::dir
+ $_ = ($no_chdir ? $name : $dir_rel); # $_
+ }
+ else {
+ if ( substr($name,-2) eq '/.' ) {
+ substr($name, length($name) == 2 ? -1 : -2) = ''; # $File::Find::name
+ }
+ $dir = $p_dir; # $File::Find::dir
+ $_ = ($no_chdir ? $dir_name : $dir_rel); # $_
+ if ( substr($_,-2) eq '/.' ) {
+ substr($_, length($_) == 2 ? -1 : -2) = '';
+ }
+ }
+
+ lstat($_); # make sure file tests with '_' work
+ { $wanted_callback->() }; # protect against wild "next"
+ }
+ else {
+ push @Stack,[$dir_loc, $updir_loc, $p_dir, $dir_rel,-1] if $bydepth;
+ last;
+ }
+ }
+ }
+}
+
+
+sub wrap_wanted {
+ my $wanted = shift;
+ if ( ref($wanted) eq 'HASH' ) {
+ if ( $wanted->{follow} || $wanted->{follow_fast}) {
+ $wanted->{follow_skip} = 1 unless defined $wanted->{follow_skip};
+ }
+ if ( $wanted->{untaint} ) {
+ $wanted->{untaint_pattern} = $File::Find::untaint_pattern
+ unless defined $wanted->{untaint_pattern};
+ $wanted->{untaint_skip} = 0 unless defined $wanted->{untaint_skip};
+ }
+ return $wanted;
+ }
+ else {
+ return { wanted => $wanted };
+ }
+}
+
+sub find {
+ my $wanted = shift;
+ _find_opt(wrap_wanted($wanted), @_);
+}
+
+sub finddepth {
+ my $wanted = wrap_wanted(shift);
+ $wanted->{bydepth} = 1;
+ _find_opt($wanted, @_);
+}
+
+# default
+$File::Find::skip_pattern = qr/^\.{1,2}\z/;
+$File::Find::untaint_pattern = qr|^([-+@\w./]+)$|;
+
+# These are hard-coded for now, but may move to hint files.
+if ($^O eq 'VMS') {
+ $Is_VMS = 1;
+ $File::Find::dont_use_nlink = 1;
+}
+elsif ($^O eq 'MacOS') {
+ $Is_MacOS = 1;
+ $File::Find::dont_use_nlink = 1;
+ $File::Find::skip_pattern = qr/^Icon\015\z/;
+ $File::Find::untaint_pattern = qr|^(.+)$|;
+}
+
+# this _should_ work properly on all platforms
+# where File::Find can be expected to work
+$File::Find::current_dir = File::Spec->curdir || '.';
+
+$File::Find::dont_use_nlink = 1
+ if $^O eq 'os2' || $^O eq 'dos' || $^O eq 'amigaos' || $^O eq 'MSWin32' ||
+ $^O eq 'cygwin' || $^O eq 'epoc' || $^O eq 'qnx' ||
+ $^O eq 'nto';
+
+# Set dont_use_nlink in your hint file if your system's stat doesn't
+# report the number of links in a directory as an indication
+# of the number of files.
+# See, e.g. hints/machten.sh for MachTen 2.2.
+unless ($File::Find::dont_use_nlink) {
+ require Config;
+ $File::Find::dont_use_nlink = 1 if ($Config::Config{'dont_use_nlink'});
+}
+
+# We need a function that checks if a scalar is tainted. Either use the
+# Scalar::Util module's tainted() function or our (slower) pure Perl
+# fallback is_tainted_pp()
+{
+ local $@;
+ eval { require Scalar::Util };
+ *is_tainted = $@ ? \&is_tainted_pp : \&Scalar::Util::tainted;
+}
+
+1;
diff --git a/Master/xemtex/perl/lib/File/Glob.pm b/Master/xemtex/perl/lib/File/Glob.pm
new file mode 100644
index 00000000000..a704b567bb0
--- /dev/null
+++ b/Master/xemtex/perl/lib/File/Glob.pm
@@ -0,0 +1,465 @@
+package File::Glob;
+
+use strict;
+our($VERSION, @ISA, @EXPORT_OK, @EXPORT_FAIL, %EXPORT_TAGS,
+ $AUTOLOAD, $DEFAULT_FLAGS);
+
+use XSLoader ();
+
+@ISA = qw(Exporter);
+
+# NOTE: The glob() export is only here for compatibility with 5.6.0.
+# csh_glob() should not be used directly, unless you know what you're doing.
+
+@EXPORT_OK = qw(
+ csh_glob
+ bsd_glob
+ glob
+ GLOB_ABEND
+ GLOB_ALPHASORT
+ GLOB_ALTDIRFUNC
+ GLOB_BRACE
+ GLOB_CSH
+ GLOB_ERR
+ GLOB_ERROR
+ GLOB_LIMIT
+ GLOB_MARK
+ GLOB_NOCASE
+ GLOB_NOCHECK
+ GLOB_NOMAGIC
+ GLOB_NOSORT
+ GLOB_NOSPACE
+ GLOB_QUOTE
+ GLOB_TILDE
+);
+
+%EXPORT_TAGS = (
+ 'glob' => [ qw(
+ GLOB_ABEND
+ GLOB_ALPHASORT
+ GLOB_ALTDIRFUNC
+ GLOB_BRACE
+ GLOB_CSH
+ GLOB_ERR
+ GLOB_ERROR
+ GLOB_LIMIT
+ GLOB_MARK
+ GLOB_NOCASE
+ GLOB_NOCHECK
+ GLOB_NOMAGIC
+ GLOB_NOSORT
+ GLOB_NOSPACE
+ GLOB_QUOTE
+ GLOB_TILDE
+ glob
+ bsd_glob
+ ) ],
+);
+
+$VERSION = '1.01';
+
+sub import {
+ require Exporter;
+ my $i = 1;
+ while ($i < @_) {
+ if ($_[$i] =~ /^:(case|nocase|globally)$/) {
+ splice(@_, $i, 1);
+ $DEFAULT_FLAGS &= ~GLOB_NOCASE() if $1 eq 'case';
+ $DEFAULT_FLAGS |= GLOB_NOCASE() if $1 eq 'nocase';
+ if ($1 eq 'globally') {
+ local $^W;
+ *CORE::GLOBAL::glob = \&File::Glob::csh_glob;
+ }
+ next;
+ }
+ ++$i;
+ }
+ goto &Exporter::import;
+}
+
+sub AUTOLOAD {
+ # This AUTOLOAD is used to 'autoload' constants from the constant()
+ # XS function. If a constant is not found then control is passed
+ # to the AUTOLOAD in AutoLoader.
+
+ my $constname;
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ my ($error, $val) = constant($constname);
+ if ($error) {
+ require Carp;
+ Carp::croak($error);
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+XSLoader::load 'File::Glob', $VERSION;
+
+# Preloaded methods go here.
+
+sub GLOB_ERROR {
+ return (constant('GLOB_ERROR'))[1];
+}
+
+sub GLOB_CSH () {
+ GLOB_BRACE()
+ | GLOB_NOMAGIC()
+ | GLOB_QUOTE()
+ | GLOB_TILDE()
+ | GLOB_ALPHASORT()
+}
+
+$DEFAULT_FLAGS = GLOB_CSH();
+if ($^O =~ /^(?:MSWin32|VMS|os2|dos|riscos|MacOS)$/) {
+ $DEFAULT_FLAGS |= GLOB_NOCASE();
+}
+
+# Autoload methods go after =cut, and are processed by the autosplit program.
+
+sub bsd_glob {
+ my ($pat,$flags) = @_;
+ $flags = $DEFAULT_FLAGS if @_ < 2;
+ return doglob($pat,$flags);
+}
+
+# File::Glob::glob() is deprecated because its prototype is different from
+# CORE::glob() (use bsd_glob() instead)
+sub glob {
+ goto &bsd_glob;
+}
+
+## borrowed heavily from gsar's File::DosGlob
+my %iter;
+my %entries;
+
+sub csh_glob {
+ my $pat = shift;
+ my $cxix = shift;
+ my @pat;
+
+ # glob without args defaults to $_
+ $pat = $_ unless defined $pat;
+
+ # extract patterns
+ $pat =~ s/^\s+//; # Protect against empty elements in
+ $pat =~ s/\s+$//; # things like < *.c> and <*.c >.
+ # These alone shouldn't trigger ParseWords.
+ if ($pat =~ /\s/) {
+ # XXX this is needed for compatibility with the csh
+ # implementation in Perl. Need to support a flag
+ # to disable this behavior.
+ require Text::ParseWords;
+ @pat = Text::ParseWords::parse_line('\s+',0,$pat);
+ }
+
+ # assume global context if not provided one
+ $cxix = '_G_' unless defined $cxix;
+ $iter{$cxix} = 0 unless exists $iter{$cxix};
+
+ # if we're just beginning, do it all first
+ if ($iter{$cxix} == 0) {
+ if (@pat) {
+ $entries{$cxix} = [ map { doglob($_, $DEFAULT_FLAGS) } @pat ];
+ }
+ else {
+ $entries{$cxix} = [ doglob($pat, $DEFAULT_FLAGS) ];
+ }
+ }
+
+ # chuck it all out, quick or slow
+ if (wantarray) {
+ delete $iter{$cxix};
+ return @{delete $entries{$cxix}};
+ }
+ else {
+ if ($iter{$cxix} = scalar @{$entries{$cxix}}) {
+ return shift @{$entries{$cxix}};
+ }
+ else {
+ # return undef for EOL
+ delete $iter{$cxix};
+ delete $entries{$cxix};
+ return undef;
+ }
+ }
+}
+
+1;
+__END__
+
+=head1 NAME
+
+File::Glob - Perl extension for BSD glob routine
+
+=head1 SYNOPSIS
+
+ use File::Glob ':glob';
+ @list = bsd_glob('*.[ch]');
+ $homedir = bsd_glob('~gnat', GLOB_TILDE | GLOB_ERR);
+ if (GLOB_ERROR) {
+ # an error occurred reading $homedir
+ }
+
+ ## override the core glob (CORE::glob() does this automatically
+ ## by default anyway, since v5.6.0)
+ use File::Glob ':globally';
+ my @sources = <*.{c,h,y}>
+
+ ## override the core glob, forcing case sensitivity
+ use File::Glob qw(:globally :case);
+ my @sources = <*.{c,h,y}>
+
+ ## override the core glob forcing case insensitivity
+ use File::Glob qw(:globally :nocase);
+ my @sources = <*.{c,h,y}>
+
+=head1 DESCRIPTION
+
+File::Glob::bsd_glob() implements the FreeBSD glob(3) routine, which is
+a superset of the POSIX glob() (described in IEEE Std 1003.2 "POSIX.2").
+bsd_glob() takes a mandatory C<pattern> argument, and an optional
+C<flags> argument, and returns a list of filenames matching the
+pattern, with interpretation of the pattern modified by the C<flags>
+variable.
+
+Since v5.6.0, Perl's CORE::glob() is implemented in terms of bsd_glob().
+Note that they don't share the same prototype--CORE::glob() only accepts
+a single argument. Due to historical reasons, CORE::glob() will also
+split its argument on whitespace, treating it as multiple patterns,
+whereas bsd_glob() considers them as one pattern.
+
+The POSIX defined flags for bsd_glob() are:
+
+=over 4
+
+=item C<GLOB_ERR>
+
+Force bsd_glob() to return an error when it encounters a directory it
+cannot open or read. Ordinarily bsd_glob() continues to find matches.
+
+=item C<GLOB_LIMIT>
+
+Make bsd_glob() return an error (GLOB_NOSPACE) when the pattern expands
+to a size bigger than the system constant C<ARG_MAX> (usually found in
+limits.h). If your system does not define this constant, bsd_glob() uses
+C<sysconf(_SC_ARG_MAX)> or C<_POSIX_ARG_MAX> where available (in that
+order). You can inspect these values using the standard C<POSIX>
+extension.
+
+=item C<GLOB_MARK>
+
+Each pathname that is a directory that matches the pattern has a slash
+appended.
+
+=item C<GLOB_NOCASE>
+
+By default, file names are assumed to be case sensitive; this flag
+makes bsd_glob() treat case differences as not significant.
+
+=item C<GLOB_NOCHECK>
+
+If the pattern does not match any pathname, then bsd_glob() returns a list
+consisting of only the pattern. If C<GLOB_QUOTE> is set, its effect
+is present in the pattern returned.
+
+=item C<GLOB_NOSORT>
+
+By default, the pathnames are sorted in ascending ASCII order; this
+flag prevents that sorting (speeding up bsd_glob()).
+
+=back
+
+The FreeBSD extensions to the POSIX standard are the following flags:
+
+=over 4
+
+=item C<GLOB_BRACE>
+
+Pre-process the string to expand C<{pat,pat,...}> strings like csh(1).
+The pattern '{}' is left unexpanded for historical reasons (and csh(1)
+does the same thing to ease typing of find(1) patterns).
+
+=item C<GLOB_NOMAGIC>
+
+Same as C<GLOB_NOCHECK> but it only returns the pattern if it does not
+contain any of the special characters "*", "?" or "[". C<NOMAGIC> is
+provided to simplify implementing the historic csh(1) globbing
+behaviour and should probably not be used anywhere else.
+
+=item C<GLOB_QUOTE>
+
+Use the backslash ('\') character for quoting: every occurrence of a
+backslash followed by a character in the pattern is replaced by that
+character, avoiding any special interpretation of the character.
+(But see below for exceptions on DOSISH systems).
+
+=item C<GLOB_TILDE>
+
+Expand patterns that start with '~' to user name home directories.
+
+=item C<GLOB_CSH>
+
+For convenience, C<GLOB_CSH> is a synonym for
+C<GLOB_BRACE | GLOB_NOMAGIC | GLOB_QUOTE | GLOB_TILDE | GLOB_ALPHASORT>.
+
+=back
+
+The POSIX provided C<GLOB_APPEND>, C<GLOB_DOOFFS>, and the FreeBSD
+extensions C<GLOB_ALTDIRFUNC>, and C<GLOB_MAGCHAR> flags have not been
+implemented in the Perl version because they involve more complex
+interaction with the underlying C structures.
+
+The following flag has been added in the Perl implementation for
+csh compatibility:
+
+=over 4
+
+=item C<GLOB_ALPHASORT>
+
+If C<GLOB_NOSORT> is not in effect, sort filenames is alphabetical
+order (case does not matter) rather than in ASCII order.
+
+=back
+
+=head1 DIAGNOSTICS
+
+bsd_glob() returns a list of matching paths, possibly zero length. If an
+error occurred, &File::Glob::GLOB_ERROR will be non-zero and C<$!> will be
+set. &File::Glob::GLOB_ERROR is guaranteed to be zero if no error occurred,
+or one of the following values otherwise:
+
+=over 4
+
+=item C<GLOB_NOSPACE>
+
+An attempt to allocate memory failed.
+
+=item C<GLOB_ABEND>
+
+The glob was stopped because an error was encountered.
+
+=back
+
+In the case where bsd_glob() has found some matching paths, but is
+interrupted by an error, it will return a list of filenames B<and>
+set &File::Glob::ERROR.
+
+Note that bsd_glob() deviates from POSIX and FreeBSD glob(3) behaviour
+by not considering C<ENOENT> and C<ENOTDIR> as errors - bsd_glob() will
+continue processing despite those errors, unless the C<GLOB_ERR> flag is
+set.
+
+Be aware that all filenames returned from File::Glob are tainted.
+
+=head1 NOTES
+
+=over 4
+
+=item *
+
+If you want to use multiple patterns, e.g. C<bsd_glob "a* b*">, you should
+probably throw them in a set as in C<bsd_glob "{a*,b*}">. This is because
+the argument to bsd_glob() isn't subjected to parsing by the C shell.
+Remember that you can use a backslash to escape things.
+
+=item *
+
+On DOSISH systems, backslash is a valid directory separator character.
+In this case, use of backslash as a quoting character (via GLOB_QUOTE)
+interferes with the use of backslash as a directory separator. The
+best (simplest, most portable) solution is to use forward slashes for
+directory separators, and backslashes for quoting. However, this does
+not match "normal practice" on these systems. As a concession to user
+expectation, therefore, backslashes (under GLOB_QUOTE) only quote the
+glob metacharacters '[', ']', '{', '}', '-', '~', and backslash itself.
+All other backslashes are passed through unchanged.
+
+=item *
+
+Win32 users should use the real slash. If you really want to use
+backslashes, consider using Sarathy's File::DosGlob, which comes with
+the standard Perl distribution.
+
+=item *
+
+Mac OS (Classic) users should note a few differences. Since
+Mac OS is not Unix, when the glob code encounters a tilde glob (e.g.
+~user) and the C<GLOB_TILDE> flag is used, it simply returns that
+pattern without doing any expansion.
+
+Glob on Mac OS is case-insensitive by default (if you don't use any
+flags). If you specify any flags at all and still want glob
+to be case-insensitive, you must include C<GLOB_NOCASE> in the flags.
+
+The path separator is ':' (aka colon), not '/' (aka slash). Mac OS users
+should be careful about specifying relative pathnames. While a full path
+always begins with a volume name, a relative pathname should always
+begin with a ':'. If specifying a volume name only, a trailing ':' is
+required.
+
+The specification of pathnames in glob patterns adheres to the usual Mac
+OS conventions: The path separator is a colon ':', not a slash '/'. A
+full path always begins with a volume name. A relative pathname on Mac
+OS must always begin with a ':', except when specifying a file or
+directory name in the current working directory, where the leading colon
+is optional. If specifying a volume name only, a trailing ':' is
+required. Due to these rules, a glob like E<lt>*:E<gt> will find all
+mounted volumes, while a glob like E<lt>*E<gt> or E<lt>:*E<gt> will find
+all files and directories in the current directory.
+
+Note that updirs in the glob pattern are resolved before the matching begins,
+i.e. a pattern like "*HD:t?p::a*" will be matched as "*HD:a*". Note also,
+that a single trailing ':' in the pattern is ignored (unless it's a volume
+name pattern like "*HD:"), i.e. a glob like E<lt>:*:E<gt> will find both
+directories I<and> files (and not, as one might expect, only directories).
+You can, however, use the C<GLOB_MARK> flag to distinguish (without a file
+test) directory names from file names.
+
+If the C<GLOB_MARK> flag is set, all directory paths will have a ':' appended.
+Since a directory like 'lib:' is I<not> a valid I<relative> path on Mac OS,
+both a leading and a trailing colon will be added, when the directory name in
+question doesn't contain any colons (e.g. 'lib' becomes ':lib:').
+
+=back
+
+=head1 AUTHOR
+
+The Perl interface was written by Nathan Torkington E<lt>gnat@frii.comE<gt>,
+and is released under the artistic license. Further modifications were
+made by Greg Bacon E<lt>gbacon@cs.uah.eduE<gt>, Gurusamy Sarathy
+E<lt>gsar@activestate.comE<gt>, and Thomas Wegner
+E<lt>wegner_thomas@yahoo.comE<gt>. The C glob code has the
+following copyright:
+
+ Copyright (c) 1989, 1993 The Regents of the University of California.
+ All rights reserved.
+
+ This code is derived from software contributed to Berkeley by
+ Guido van Rossum.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+=cut
diff --git a/Master/xemtex/perl/lib/File/Path.pm b/Master/xemtex/perl/lib/File/Path.pm
new file mode 100644
index 00000000000..46af24fdb20
--- /dev/null
+++ b/Master/xemtex/perl/lib/File/Path.pm
@@ -0,0 +1,267 @@
+package File::Path;
+
+=head1 NAME
+
+File::Path - create or remove directory trees
+
+=head1 SYNOPSIS
+
+ use File::Path;
+
+ mkpath(['/foo/bar/baz', 'blurfl/quux'], 1, 0711);
+ rmtree(['foo/bar/baz', 'blurfl/quux'], 1, 1);
+
+=head1 DESCRIPTION
+
+The C<mkpath> function provides a convenient way to create directories, even
+if your C<mkdir> kernel call won't create more than one level of directory at
+a time. C<mkpath> takes three arguments:
+
+=over 4
+
+=item *
+
+the name of the path to create, or a reference
+to a list of paths to create,
+
+=item *
+
+a boolean value, which if TRUE will cause C<mkpath>
+to print the name of each directory as it is created
+(defaults to FALSE), and
+
+=item *
+
+the numeric mode to use when creating the directories
+(defaults to 0777)
+
+=back
+
+It returns a list of all directories (including intermediates, determined
+using the Unix '/' separator) created.
+
+If a system error prevents a directory from being created, then the
+C<mkpath> function throws a fatal error with C<Carp::croak>. This error
+can be trapped with an C<eval> block:
+
+ eval { mkpath($dir) };
+ if ($@) {
+ print "Couldn't create $dir: $@";
+ }
+
+Similarly, the C<rmtree> function provides a convenient way to delete a
+subtree from the directory structure, much like the Unix command C<rm -r>.
+C<rmtree> takes three arguments:
+
+=over 4
+
+=item *
+
+the root of the subtree to delete, or a reference to
+a list of roots. All of the files and directories
+below each root, as well as the roots themselves,
+will be deleted.
+
+=item *
+
+a boolean value, which if TRUE will cause C<rmtree> to
+print a message each time it examines a file, giving the
+name of the file, and indicating whether it's using C<rmdir>
+or C<unlink> to remove it, or that it's skipping it.
+(defaults to FALSE)
+
+=item *
+
+a boolean value, which if TRUE will cause C<rmtree> to
+skip any files to which you do not have delete access
+(if running under VMS) or write access (if running
+under another OS). This will change in the future when
+a criterion for 'delete permission' under OSs other
+than VMS is settled. (defaults to FALSE)
+
+=back
+
+It returns the number of files successfully deleted. Symlinks are
+simply deleted and not followed.
+
+B<NOTE:> If the third parameter is not TRUE, C<rmtree> is B<unsecure>
+in the face of failure or interruption. Files and directories which
+were not deleted may be left with permissions reset to allow world
+read and write access. Note also that the occurrence of errors in
+rmtree can be determined I<only> by trapping diagnostic messages
+using C<$SIG{__WARN__}>; it is not apparent from the return value.
+Therefore, you must be extremely careful about using C<rmtree($foo,$bar,0>
+in situations where security is an issue.
+
+=head1 AUTHORS
+
+Tim Bunce <F<Tim.Bunce@ig.co.uk>> and
+Charles Bailey <F<bailey@newman.upenn.edu>>
+
+=cut
+
+use 5.006;
+use Carp;
+use File::Basename ();
+use Exporter ();
+use strict;
+use warnings;
+
+our $VERSION = "1.05";
+our @ISA = qw( Exporter );
+our @EXPORT = qw( mkpath rmtree );
+
+my $Is_VMS = $^O eq 'VMS';
+my $Is_MacOS = $^O eq 'MacOS';
+
+# These OSes complain if you want to remove a file that you have no
+# write permission to:
+my $force_writeable = ($^O eq 'os2' || $^O eq 'dos' || $^O eq 'MSWin32' ||
+ $^O eq 'amigaos' || $^O eq 'MacOS' || $^O eq 'epoc');
+
+sub mkpath {
+ my($paths, $verbose, $mode) = @_;
+ # $paths -- either a path string or ref to list of paths
+ # $verbose -- optional print "mkdir $path" for each directory created
+ # $mode -- optional permissions, defaults to 0777
+ local($")=$Is_MacOS ? ":" : "/";
+ $mode = 0777 unless defined($mode);
+ $paths = [$paths] unless ref $paths;
+ my(@created,$path);
+ foreach $path (@$paths) {
+ $path .= '/' if $^O eq 'os2' and $path =~ /^\w:\z/s; # feature of CRT
+ # Logic wants Unix paths, so go with the flow.
+ if ($Is_VMS) {
+ next if $path eq '/';
+ $path = VMS::Filespec::unixify($path);
+ if ($path =~ m:^(/[^/]+)/?\z:) {
+ $path = $1.'/000000';
+ }
+ }
+ next if -d $path;
+ my $parent = File::Basename::dirname($path);
+ unless (-d $parent or $path eq $parent) {
+ push(@created,mkpath($parent, $verbose, $mode));
+ }
+ print "mkdir $path\n" if $verbose;
+ unless (mkdir($path,$mode)) {
+ my $e = $!;
+ # allow for another process to have created it meanwhile
+ croak "mkdir $path: $e" unless -d $path;
+ }
+ push(@created, $path);
+ }
+ @created;
+}
+
+sub rmtree {
+ my($roots, $verbose, $safe) = @_;
+ my(@files);
+ my($count) = 0;
+ $verbose ||= 0;
+ $safe ||= 0;
+
+ if ( defined($roots) && length($roots) ) {
+ $roots = [$roots] unless ref $roots;
+ }
+ else {
+ carp "No root path(s) specified\n";
+ return 0;
+ }
+
+ my($root);
+ foreach $root (@{$roots}) {
+ if ($Is_MacOS) {
+ $root = ":$root" if $root !~ /:/;
+ $root =~ s#([^:])\z#$1:#;
+ } else {
+ $root =~ s#/\z##;
+ }
+ (undef, undef, my $rp) = lstat $root or next;
+ $rp &= 07777; # don't forget setuid, setgid, sticky bits
+ if ( -d _ ) {
+ # notabene: 0777 is for making readable in the first place,
+ # it's also intended to change it to writable in case we have
+ # to recurse in which case we are better than rm -rf for
+ # subtrees with strange permissions
+ chmod(0777, ($Is_VMS ? VMS::Filespec::fileify($root) : $root))
+ or carp "Can't make directory $root read+writeable: $!"
+ unless $safe;
+
+ if (opendir my $d, $root) {
+ no strict 'refs';
+ if (!defined ${"\cTAINT"} or ${"\cTAINT"}) {
+ # Blindly untaint dir names
+ @files = map { /^(.*)$/s ; $1 } readdir $d;
+ } else {
+ @files = readdir $d;
+ }
+ closedir $d;
+ }
+ else {
+ carp "Can't read $root: $!";
+ @files = ();
+ }
+
+ # Deleting large numbers of files from VMS Files-11 filesystems
+ # is faster if done in reverse ASCIIbetical order
+ @files = reverse @files if $Is_VMS;
+ ($root = VMS::Filespec::unixify($root)) =~ s#\.dir\z## if $Is_VMS;
+ if ($Is_MacOS) {
+ @files = map("$root$_", @files);
+ } else {
+ @files = map("$root/$_", grep $_!~/^\.{1,2}\z/s,@files);
+ }
+ $count += rmtree(\@files,$verbose,$safe);
+ if ($safe &&
+ ($Is_VMS ? !&VMS::Filespec::candelete($root) : !-w $root)) {
+ print "skipped $root\n" if $verbose;
+ next;
+ }
+ chmod 0777, $root
+ or carp "Can't make directory $root writeable: $!"
+ if $force_writeable;
+ print "rmdir $root\n" if $verbose;
+ if (rmdir $root) {
+ ++$count;
+ }
+ else {
+ carp "Can't remove directory $root: $!";
+ chmod($rp, ($Is_VMS ? VMS::Filespec::fileify($root) : $root))
+ or carp("and can't restore permissions to "
+ . sprintf("0%o",$rp) . "\n");
+ }
+ }
+ else {
+ if ($safe &&
+ ($Is_VMS ? !&VMS::Filespec::candelete($root)
+ : !(-l $root || -w $root)))
+ {
+ print "skipped $root\n" if $verbose;
+ next;
+ }
+ chmod 0666, $root
+ or carp "Can't make file $root writeable: $!"
+ if $force_writeable;
+ print "unlink $root\n" if $verbose;
+ # delete all versions under VMS
+ for (;;) {
+ unless (unlink $root) {
+ carp "Can't unlink file $root: $!";
+ if ($force_writeable) {
+ chmod $rp, $root
+ or carp("and can't restore permissions to "
+ . sprintf("0%o",$rp) . "\n");
+ }
+ last;
+ }
+ ++$count;
+ last unless $Is_VMS && lstat $root;
+ }
+ }
+ }
+
+ $count;
+}
+
+1;
diff --git a/Master/xemtex/perl/lib/File/Spec.pm b/Master/xemtex/perl/lib/File/Spec.pm
new file mode 100644
index 00000000000..529e34fe84a
--- /dev/null
+++ b/Master/xemtex/perl/lib/File/Spec.pm
@@ -0,0 +1,292 @@
+package File::Spec;
+
+use strict;
+our(@ISA, $VERSION);
+
+$VERSION = 0.83 ;
+
+my %module = (MacOS => 'Mac',
+ MSWin32 => 'Win32',
+ os2 => 'OS2',
+ VMS => 'VMS',
+ epoc => 'Epoc',
+ NetWare => 'Win32', # Yes, File::Spec::Win32 works on NetWare.
+ dos => 'OS2', # Yes, File::Spec::OS2 works on DJGPP.
+ cygwin => 'Cygwin');
+
+
+my $module = $module{$^O} || 'Unix';
+
+require "File/Spec/$module.pm";
+@ISA = ("File::Spec::$module");
+
+1;
+
+__END__
+
+=head1 NAME
+
+File::Spec - portably perform operations on file names
+
+=head1 SYNOPSIS
+
+ use File::Spec;
+
+ $x=File::Spec->catfile('a', 'b', 'c');
+
+which returns 'a/b/c' under Unix. Or:
+
+ use File::Spec::Functions;
+
+ $x = catfile('a', 'b', 'c');
+
+=head1 DESCRIPTION
+
+This module is designed to support operations commonly performed on file
+specifications (usually called "file names", but not to be confused with the
+contents of a file, or Perl's file handles), such as concatenating several
+directory and file names into a single path, or determining whether a path
+is rooted. It is based on code directly taken from MakeMaker 5.17, code
+written by Andreas KE<ouml>nig, Andy Dougherty, Charles Bailey, Ilya
+Zakharevich, Paul Schinder, and others.
+
+Since these functions are different for most operating systems, each set of
+OS specific routines is available in a separate module, including:
+
+ File::Spec::Unix
+ File::Spec::Mac
+ File::Spec::OS2
+ File::Spec::Win32
+ File::Spec::VMS
+
+The module appropriate for the current OS is automatically loaded by
+File::Spec. Since some modules (like VMS) make use of facilities available
+only under that OS, it may not be possible to load all modules under all
+operating systems.
+
+Since File::Spec is object oriented, subroutines should not be called directly,
+as in:
+
+ File::Spec::catfile('a','b');
+
+but rather as class methods:
+
+ File::Spec->catfile('a','b');
+
+For simple uses, L<File::Spec::Functions> provides convenient functional
+forms of these methods.
+
+=head1 METHODS
+
+=over 2
+
+=item canonpath
+
+No physical check on the filesystem, but a logical cleanup of a
+path.
+
+ $cpath = File::Spec->canonpath( $path ) ;
+
+=item catdir
+
+Concatenate two or more directory names to form a complete path ending
+with a directory. But remove the trailing slash from the resulting
+string, because it doesn't look good, isn't necessary and confuses
+OS2. Of course, if this is the root directory, don't cut off the
+trailing slash :-)
+
+ $path = File::Spec->catdir( @directories );
+
+=item catfile
+
+Concatenate one or more directory names and a filename to form a
+complete path ending with a filename
+
+ $path = File::Spec->catfile( @directories, $filename );
+
+=item curdir
+
+Returns a string representation of the current directory.
+
+ $curdir = File::Spec->curdir();
+
+=item devnull
+
+Returns a string representation of the null device.
+
+ $devnull = File::Spec->devnull();
+
+=item rootdir
+
+Returns a string representation of the root directory.
+
+ $rootdir = File::Spec->rootdir();
+
+=item tmpdir
+
+Returns a string representation of the first writable directory from a
+list of possible temporary directories. Returns "" if no writable
+temporary directories are found. The list of directories checked
+depends on the platform; e.g. File::Spec::Unix checks $ENV{TMPDIR} and
+/tmp.
+
+ $tmpdir = File::Spec->tmpdir();
+
+=item updir
+
+Returns a string representation of the parent directory.
+
+ $updir = File::Spec->updir();
+
+=item no_upwards
+
+Given a list of file names, strip out those that refer to a parent
+directory. (Does not strip symlinks, only '.', '..', and equivalents.)
+
+ @paths = File::Spec->no_upwards( @paths );
+
+=item case_tolerant
+
+Returns a true or false value indicating, respectively, that alphabetic
+is not or is significant when comparing file specifications.
+
+ $is_case_tolerant = File::Spec->case_tolerant();
+
+=item file_name_is_absolute
+
+Takes as argument a path and returns true if it is an absolute path.
+
+ $is_absolute = File::Spec->file_name_is_absolute( $path );
+
+This does not consult the local filesystem on Unix, Win32, OS/2, or
+Mac OS (Classic). It does consult the working environment for VMS
+(see L<File::Spec::VMS/file_name_is_absolute>).
+
+=item path
+
+Takes no argument, returns the environment variable PATH as an array.
+
+ @PATH = File::Spec->path();
+
+=item join
+
+join is the same as catfile.
+
+=item splitpath
+
+Splits a path in to volume, directory, and filename portions. On systems
+with no concept of volume, returns undef for volume.
+
+ ($volume,$directories,$file) = File::Spec->splitpath( $path );
+ ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
+
+For systems with no syntax differentiating filenames from directories,
+assumes that the last file is a path unless $no_file is true or a
+trailing separator or /. or /.. is present. On Unix this means that $no_file
+true makes this return ( '', $path, '' ).
+
+The directory portion may or may not be returned with a trailing '/'.
+
+The results can be passed to L</catpath()> to get back a path equivalent to
+(usually identical to) the original path.
+
+=item splitdir
+
+The opposite of L</catdir()>.
+
+ @dirs = File::Spec->splitdir( $directories );
+
+$directories must be only the directory portion of the path on systems
+that have the concept of a volume or that have path syntax that differentiates
+files from directories.
+
+Unlike just splitting the directories on the separator, empty
+directory names (C<''>) can be returned, because these are significant
+on some OSs.
+
+=item catpath()
+
+Takes volume, directory and file portions and returns an entire path. Under
+Unix, $volume is ignored, and directory and file are catenated. A '/' is
+inserted if need be. On other OSs, $volume is significant.
+
+ $full_path = File::Spec->catpath( $volume, $directory, $file );
+
+=item abs2rel
+
+Takes a destination path and an optional base path returns a relative path
+from the base path to the destination path:
+
+ $rel_path = File::Spec->abs2rel( $path ) ;
+ $rel_path = File::Spec->abs2rel( $path, $base ) ;
+
+If $base is not present or '', then L<cwd()|Cwd> is used. If $base is relative,
+then it is converted to absolute form using L</rel2abs()>. This means that it
+is taken to be relative to L<cwd()|Cwd>.
+
+On systems with the concept of a volume, this assumes that both paths
+are on the $destination volume, and ignores the $base volume.
+
+On systems that have a grammar that indicates filenames, this ignores the
+$base filename as well. Otherwise all path components are assumed to be
+directories.
+
+If $path is relative, it is converted to absolute form using L</rel2abs()>.
+This means that it is taken to be relative to L<cwd()|Cwd>.
+
+No checks against the filesystem are made. On VMS, there is
+interaction with the working environment, as logicals and
+macros are expanded.
+
+Based on code written by Shigio Yamaguchi.
+
+=item rel2abs()
+
+Converts a relative path to an absolute path.
+
+ $abs_path = File::Spec->rel2abs( $path ) ;
+ $abs_path = File::Spec->rel2abs( $path, $base ) ;
+
+If $base is not present or '', then L<cwd()|Cwd> is used. If $base is relative,
+then it is converted to absolute form using L</rel2abs()>. This means that it
+is taken to be relative to L<cwd()|Cwd>.
+
+On systems with the concept of a volume, this assumes that both paths
+are on the $base volume, and ignores the $path volume.
+
+On systems that have a grammar that indicates filenames, this ignores the
+$base filename as well. Otherwise all path components are assumed to be
+directories.
+
+If $path is absolute, it is cleaned up and returned using L</canonpath()>.
+
+No checks against the filesystem are made. On VMS, there is
+interaction with the working environment, as logicals and
+macros are expanded.
+
+Based on code written by Shigio Yamaguchi.
+
+=back
+
+For further information, please see L<File::Spec::Unix>,
+L<File::Spec::Mac>, L<File::Spec::OS2>, L<File::Spec::Win32>, or
+L<File::Spec::VMS>.
+
+=head1 SEE ALSO
+
+L<File::Spec::Unix>, L<File::Spec::Mac>, L<File::Spec::OS2>,
+L<File::Spec::Win32>, L<File::Spec::VMS>, L<File::Spec::Functions>,
+L<ExtUtils::MakeMaker>
+
+=head1 AUTHORS
+
+Kenneth Albanowski <kjahds@kjahds.com>, Andy Dougherty
+<doughera@lafcol.lafayette.edu>, Andreas KE<ouml>nig
+<A.Koenig@franz.ww.TU-Berlin.DE>, Tim Bunce <Tim.Bunce@ig.co.uk.
+VMS support by Charles Bailey <bailey@newman.upenn.edu>.
+OS/2 support by Ilya Zakharevich <ilya@math.ohio-state.edu>.
+Mac support by Paul Schinder <schinder@pobox.com>, and Thomas Wegner
+<wegner_thomas@yahoo.com>. abs2rel() and rel2abs() written by Shigio
+Yamaguchi <shigio@tamacom.com>, modified by Barrie Slaymaker
+<barries@slaysys.com>. splitpath(), splitdir(), catpath() and
+catdir() by Barrie Slaymaker.
diff --git a/Master/xemtex/perl/lib/File/Spec/Unix.pm b/Master/xemtex/perl/lib/File/Spec/Unix.pm
new file mode 100644
index 00000000000..87ee5051022
--- /dev/null
+++ b/Master/xemtex/perl/lib/File/Spec/Unix.pm
@@ -0,0 +1,482 @@
+package File::Spec::Unix;
+
+use strict;
+our($VERSION);
+
+$VERSION = '1.4';
+
+use Cwd;
+
+=head1 NAME
+
+File::Spec::Unix - File::Spec for Unix, base for other File::Spec modules
+
+=head1 SYNOPSIS
+
+ require File::Spec::Unix; # Done automatically by File::Spec
+
+=head1 DESCRIPTION
+
+Methods for manipulating file specifications. Other File::Spec
+modules, such as File::Spec::Mac, inherit from File::Spec::Unix and
+override specific methods.
+
+=head1 METHODS
+
+=over 2
+
+=item canonpath()
+
+No physical check on the filesystem, but a logical cleanup of a
+path. On UNIX eliminates successive slashes and successive "/.".
+
+ $cpath = File::Spec->canonpath( $path ) ;
+
+=cut
+
+sub canonpath {
+ my ($self,$path) = @_;
+
+ # Handle POSIX-style node names beginning with double slash (qnx, nto)
+ # Handle network path names beginning with double slash (cygwin)
+ # (POSIX says: "a pathname that begins with two successive slashes
+ # may be interpreted in an implementation-defined manner, although
+ # more than two leading slashes shall be treated as a single slash.")
+ my $node = '';
+ if ( $^O =~ m/^(?:qnx|nto|cygwin)$/ && $path =~ s:^(//[^/]+)(/|\z):/:s ) {
+ $node = $1;
+ }
+ # This used to be
+ # $path =~ s|/+|/|g unless($^O eq 'cygwin');
+ # but that made tests 29, 30, 35, 46, and 213 (as of #13272) to fail
+ # (Mainly because trailing "" directories didn't get stripped).
+ # Why would cygwin avoid collapsing multiple slashes into one? --jhi
+ $path =~ s|/+|/|g; # xx////xx -> xx/xx
+ $path =~ s@(/\.)+(/|\Z(?!\n))@/@g; # xx/././xx -> xx/xx
+ $path =~ s|^(\./)+||s unless $path eq "./"; # ./xx -> xx
+ $path =~ s|^/(\.\./)+|/|s; # /../../xx -> xx
+ $path =~ s|/\Z(?!\n)|| unless $path eq "/"; # xx/ -> xx
+ return "$node$path";
+}
+
+=item catdir()
+
+Concatenate two or more directory names to form a complete path ending
+with a directory. But remove the trailing slash from the resulting
+string, because it doesn't look good, isn't necessary and confuses
+OS2. Of course, if this is the root directory, don't cut off the
+trailing slash :-)
+
+=cut
+
+sub catdir {
+ my $self = shift;
+ my @args = @_;
+ foreach (@args) {
+ # append a slash to each argument unless it has one there
+ $_ .= "/" if $_ eq '' || substr($_,-1) ne "/";
+ }
+ return $self->canonpath(join('', @args));
+}
+
+=item catfile
+
+Concatenate one or more directory names and a filename to form a
+complete path ending with a filename
+
+=cut
+
+sub catfile {
+ my $self = shift;
+ my $file = pop @_;
+ return $file unless @_;
+ my $dir = $self->catdir(@_);
+ $dir .= "/" unless substr($dir,-1) eq "/";
+ return $dir.$file;
+}
+
+=item curdir
+
+Returns a string representation of the current directory. "." on UNIX.
+
+=cut
+
+sub curdir {
+ return ".";
+}
+
+=item devnull
+
+Returns a string representation of the null device. "/dev/null" on UNIX.
+
+=cut
+
+sub devnull {
+ return "/dev/null";
+}
+
+=item rootdir
+
+Returns a string representation of the root directory. "/" on UNIX.
+
+=cut
+
+sub rootdir {
+ return "/";
+}
+
+=item tmpdir
+
+Returns a string representation of the first writable directory
+from the following list or "" if none are writable:
+
+ $ENV{TMPDIR}
+ /tmp
+
+Since perl 5.8.0, if running under taint mode, and if $ENV{TMPDIR}
+is tainted, it is not used.
+
+=cut
+
+my $tmpdir;
+sub tmpdir {
+ return $tmpdir if defined $tmpdir;
+ my @dirlist = ($ENV{TMPDIR}, "/tmp");
+ {
+ no strict 'refs';
+ if (${"\cTAINT"}) { # Check for taint mode on perl >= 5.8.0
+ require Scalar::Util;
+ shift @dirlist if Scalar::Util::tainted($ENV{TMPDIR});
+ }
+ }
+ foreach (@dirlist) {
+ next unless defined && -d && -w _;
+ $tmpdir = $_;
+ last;
+ }
+ $tmpdir = '' unless defined $tmpdir;
+ return $tmpdir;
+}
+
+=item updir
+
+Returns a string representation of the parent directory. ".." on UNIX.
+
+=cut
+
+sub updir {
+ return "..";
+}
+
+=item no_upwards
+
+Given a list of file names, strip out those that refer to a parent
+directory. (Does not strip symlinks, only '.', '..', and equivalents.)
+
+=cut
+
+sub no_upwards {
+ my $self = shift;
+ return grep(!/^\.{1,2}\Z(?!\n)/s, @_);
+}
+
+=item case_tolerant
+
+Returns a true or false value indicating, respectively, that alphabetic
+is not or is significant when comparing file specifications.
+
+=cut
+
+sub case_tolerant {
+ return 0;
+}
+
+=item file_name_is_absolute
+
+Takes as argument a path and returns true if it is an absolute path.
+
+This does not consult the local filesystem on Unix, Win32, OS/2 or Mac
+OS (Classic). It does consult the working environment for VMS (see
+L<File::Spec::VMS/file_name_is_absolute>).
+
+=cut
+
+sub file_name_is_absolute {
+ my ($self,$file) = @_;
+ return scalar($file =~ m:^/:s);
+}
+
+=item path
+
+Takes no argument, returns the environment variable PATH as an array.
+
+=cut
+
+sub path {
+ my @path = split(':', $ENV{PATH});
+ foreach (@path) { $_ = '.' if $_ eq '' }
+ return @path;
+}
+
+=item join
+
+join is the same as catfile.
+
+=cut
+
+sub join {
+ my $self = shift;
+ return $self->catfile(@_);
+}
+
+=item splitpath
+
+ ($volume,$directories,$file) = File::Spec->splitpath( $path );
+ ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
+
+Splits a path in to volume, directory, and filename portions. On systems
+with no concept of volume, returns undef for volume.
+
+For systems with no syntax differentiating filenames from directories,
+assumes that the last file is a path unless $no_file is true or a
+trailing separator or /. or /.. is present. On Unix this means that $no_file
+true makes this return ( '', $path, '' ).
+
+The directory portion may or may not be returned with a trailing '/'.
+
+The results can be passed to L</catpath()> to get back a path equivalent to
+(usually identical to) the original path.
+
+=cut
+
+sub splitpath {
+ my ($self,$path, $nofile) = @_;
+
+ my ($volume,$directory,$file) = ('','','');
+
+ if ( $nofile ) {
+ $directory = $path;
+ }
+ else {
+ $path =~ m|^ ( (?: .* / (?: \.\.?\Z(?!\n) )? )? ) ([^/]*) |xs;
+ $directory = $1;
+ $file = $2;
+ }
+
+ return ($volume,$directory,$file);
+}
+
+
+=item splitdir
+
+The opposite of L</catdir()>.
+
+ @dirs = File::Spec->splitdir( $directories );
+
+$directories must be only the directory portion of the path on systems
+that have the concept of a volume or that have path syntax that differentiates
+files from directories.
+
+Unlike just splitting the directories on the separator, empty
+directory names (C<''>) can be returned, because these are significant
+on some OSs.
+
+On Unix,
+
+ File::Spec->splitdir( "/a/b//c/" );
+
+Yields:
+
+ ( '', 'a', 'b', '', 'c', '' )
+
+=cut
+
+sub splitdir {
+ my ($self,$directories) = @_ ;
+ #
+ # split() likes to forget about trailing null fields, so here we
+ # check to be sure that there will not be any before handling the
+ # simple case.
+ #
+ if ( $directories !~ m|/\Z(?!\n)| ) {
+ return split( m|/|, $directories );
+ }
+ else {
+ #
+ # since there was a trailing separator, add a file name to the end,
+ # then do the split, then replace it with ''.
+ #
+ my( @directories )= split( m|/|, "${directories}dummy" ) ;
+ $directories[ $#directories ]= '' ;
+ return @directories ;
+ }
+}
+
+
+=item catpath()
+
+Takes volume, directory and file portions and returns an entire path. Under
+Unix, $volume is ignored, and directory and file are catenated. A '/' is
+inserted if needed (though if the directory portion doesn't start with
+'/' it is not added). On other OSs, $volume is significant.
+
+=cut
+
+sub catpath {
+ my ($self,$volume,$directory,$file) = @_;
+
+ if ( $directory ne '' &&
+ $file ne '' &&
+ substr( $directory, -1 ) ne '/' &&
+ substr( $file, 0, 1 ) ne '/'
+ ) {
+ $directory .= "/$file" ;
+ }
+ else {
+ $directory .= $file ;
+ }
+
+ return $directory ;
+}
+
+=item abs2rel
+
+Takes a destination path and an optional base path returns a relative path
+from the base path to the destination path:
+
+ $rel_path = File::Spec->abs2rel( $path ) ;
+ $rel_path = File::Spec->abs2rel( $path, $base ) ;
+
+If $base is not present or '', then L<cwd()|Cwd> is used. If $base is relative,
+then it is converted to absolute form using L</rel2abs()>. This means that it
+is taken to be relative to L<cwd()|Cwd>.
+
+On systems with the concept of a volume, this assumes that both paths
+are on the $destination volume, and ignores the $base volume.
+
+On systems that have a grammar that indicates filenames, this ignores the
+$base filename as well. Otherwise all path components are assumed to be
+directories.
+
+If $path is relative, it is converted to absolute form using L</rel2abs()>.
+This means that it is taken to be relative to L<cwd()|Cwd>.
+
+No checks against the filesystem are made. On VMS, there is
+interaction with the working environment, as logicals and
+macros are expanded.
+
+Based on code written by Shigio Yamaguchi.
+
+=cut
+
+sub abs2rel {
+ my($self,$path,$base) = @_;
+
+ # Clean up $path
+ if ( ! $self->file_name_is_absolute( $path ) ) {
+ $path = $self->rel2abs( $path ) ;
+ }
+ else {
+ $path = $self->canonpath( $path ) ;
+ }
+
+ # Figure out the effective $base and clean it up.
+ if ( !defined( $base ) || $base eq '' ) {
+ $base = cwd() ;
+ }
+ elsif ( ! $self->file_name_is_absolute( $base ) ) {
+ $base = $self->rel2abs( $base ) ;
+ }
+ else {
+ $base = $self->canonpath( $base ) ;
+ }
+
+ # Now, remove all leading components that are the same
+ my @pathchunks = $self->splitdir( $path);
+ my @basechunks = $self->splitdir( $base);
+
+ while (@pathchunks && @basechunks && $pathchunks[0] eq $basechunks[0]) {
+ shift @pathchunks ;
+ shift @basechunks ;
+ }
+
+ $path = CORE::join( '/', @pathchunks );
+ $base = CORE::join( '/', @basechunks );
+
+ # $base now contains the directories the resulting relative path
+ # must ascend out of before it can descend to $path_directory. So,
+ # replace all names with $parentDir
+ $base =~ s|[^/]+|..|g ;
+
+ # Glue the two together, using a separator if necessary, and preventing an
+ # empty result.
+ if ( $path ne '' && $base ne '' ) {
+ $path = "$base/$path" ;
+ } else {
+ $path = "$base$path" ;
+ }
+
+ return $self->canonpath( $path ) ;
+}
+
+=item rel2abs()
+
+Converts a relative path to an absolute path.
+
+ $abs_path = File::Spec->rel2abs( $path ) ;
+ $abs_path = File::Spec->rel2abs( $path, $base ) ;
+
+If $base is not present or '', then L<cwd()|Cwd> is used. If $base is relative,
+then it is converted to absolute form using L</rel2abs()>. This means that it
+is taken to be relative to L<cwd()|Cwd>.
+
+On systems with the concept of a volume, this assumes that both paths
+are on the $base volume, and ignores the $path volume.
+
+On systems that have a grammar that indicates filenames, this ignores the
+$base filename as well. Otherwise all path components are assumed to be
+directories.
+
+If $path is absolute, it is cleaned up and returned using L</canonpath()>.
+
+No checks against the filesystem are made. On VMS, there is
+interaction with the working environment, as logicals and
+macros are expanded.
+
+Based on code written by Shigio Yamaguchi.
+
+=cut
+
+sub rel2abs {
+ my ($self,$path,$base ) = @_;
+
+ # Clean up $path
+ if ( ! $self->file_name_is_absolute( $path ) ) {
+ # Figure out the effective $base and clean it up.
+ if ( !defined( $base ) || $base eq '' ) {
+ $base = cwd() ;
+ }
+ elsif ( ! $self->file_name_is_absolute( $base ) ) {
+ $base = $self->rel2abs( $base ) ;
+ }
+ else {
+ $base = $self->canonpath( $base ) ;
+ }
+
+ # Glom them together
+ $path = $self->catdir( $base, $path ) ;
+ }
+
+ return $self->canonpath( $path ) ;
+}
+
+
+=back
+
+=head1 SEE ALSO
+
+L<File::Spec>
+
+=cut
+
+1;
diff --git a/Master/xemtex/perl/lib/File/Spec/Win32.pm b/Master/xemtex/perl/lib/File/Spec/Win32.pm
new file mode 100644
index 00000000000..186052bb4d8
--- /dev/null
+++ b/Master/xemtex/perl/lib/File/Spec/Win32.pm
@@ -0,0 +1,370 @@
+package File::Spec::Win32;
+
+use strict;
+use Cwd;
+use vars qw(@ISA $VERSION);
+require File::Spec::Unix;
+
+$VERSION = '1.3';
+
+@ISA = qw(File::Spec::Unix);
+
+=head1 NAME
+
+File::Spec::Win32 - methods for Win32 file specs
+
+=head1 SYNOPSIS
+
+ require File::Spec::Win32; # Done internally by File::Spec if needed
+
+=head1 DESCRIPTION
+
+See File::Spec::Unix for a documentation of the methods provided
+there. This package overrides the implementation of these methods, not
+the semantics.
+
+=over 4
+
+=item devnull
+
+Returns a string representation of the null device.
+
+=cut
+
+sub devnull {
+ return "nul";
+}
+
+=item tmpdir
+
+Returns a string representation of the first existing directory
+from the following list:
+
+ $ENV{TMPDIR}
+ $ENV{TEMP}
+ $ENV{TMP}
+ SYS:/temp
+ C:/temp
+ /tmp
+ /
+
+The SYS:/temp is preferred in Novell NetWare.
+
+Since Perl 5.8.0, if running under taint mode, and if the environment
+variables are tainted, they are not used.
+
+=cut
+
+my $tmpdir;
+sub tmpdir {
+ return $tmpdir if defined $tmpdir;
+ my $self = shift;
+ my @dirlist = (@ENV{qw(TMPDIR TEMP TMP)}, qw(C:/temp /tmp /));
+ {
+ no strict 'refs';
+ if (${"\cTAINT"}) { # Check for taint mode on perl >= 5.8.0
+ require Scalar::Util;
+ @dirlist = grep { ! Scalar::Util::tainted $_ } @dirlist;
+ }
+ }
+ foreach (@dirlist) {
+ next unless defined && -d;
+ $tmpdir = $_;
+ last;
+ }
+ $tmpdir = '' unless defined $tmpdir;
+ $tmpdir = $self->canonpath($tmpdir);
+ return $tmpdir;
+}
+
+sub case_tolerant {
+ return 1;
+}
+
+sub file_name_is_absolute {
+ my ($self,$file) = @_;
+ return scalar($file =~ m{^([a-z]:)?[\\/]}is);
+}
+
+=item catfile
+
+Concatenate one or more directory names and a filename to form a
+complete path ending with a filename
+
+=cut
+
+sub catfile {
+ my $self = shift;
+ my $file = pop @_;
+ return $file unless @_;
+ my $dir = $self->catdir(@_);
+ $dir .= "\\" unless substr($dir,-1) eq "\\";
+ return $dir.$file;
+}
+
+sub path {
+ my $path = $ENV{'PATH'} || $ENV{'Path'} || $ENV{'path'};
+ my @path = split(';',$path);
+ foreach (@path) { $_ = '.' if $_ eq '' }
+ return @path;
+}
+
+=item canonpath
+
+No physical check on the filesystem, but a logical cleanup of a
+path. On UNIX eliminated successive slashes and successive "/.".
+
+=cut
+
+sub canonpath {
+ my ($self,$path) = @_;
+ $path =~ s/^([a-z]:)/\u$1/s;
+ $path =~ s|/|\\|g;
+ $path =~ s|([^\\])\\+|$1\\|g; # xx\\\\xx -> xx\xx
+ $path =~ s|(\\\.)+\\|\\|g; # xx\.\.\xx -> xx\xx
+ $path =~ s|^(\.\\)+||s unless $path eq ".\\"; # .\xx -> xx
+ $path =~ s|\\\Z(?!\n)||
+ unless $path =~ m#^([A-Z]:)?\\\Z(?!\n)#s; # xx\ -> xx
+ return $path;
+}
+
+=item splitpath
+
+ ($volume,$directories,$file) = File::Spec->splitpath( $path );
+ ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
+
+Splits a path in to volume, directory, and filename portions. Assumes that
+the last file is a path unless the path ends in '\\', '\\.', '\\..'
+or $no_file is true. On Win32 this means that $no_file true makes this return
+( $volume, $path, undef ).
+
+Separators accepted are \ and /.
+
+Volumes can be drive letters or UNC sharenames (\\server\share).
+
+The results can be passed to L</catpath> to get back a path equivalent to
+(usually identical to) the original path.
+
+=cut
+
+sub splitpath {
+ my ($self,$path, $nofile) = @_;
+ my ($volume,$directory,$file) = ('','','');
+ if ( $nofile ) {
+ $path =~
+ m{^( (?:[a-zA-Z]:|(?:\\\\|//)[^\\/]+[\\/][^\\/]+)? )
+ (.*)
+ }xs;
+ $volume = $1;
+ $directory = $2;
+ }
+ else {
+ $path =~
+ m{^ ( (?: [a-zA-Z]: |
+ (?:\\\\|//)[^\\/]+[\\/][^\\/]+
+ )?
+ )
+ ( (?:.*[\\\\/](?:\.\.?\Z(?!\n))?)? )
+ (.*)
+ }xs;
+ $volume = $1;
+ $directory = $2;
+ $file = $3;
+ }
+
+ return ($volume,$directory,$file);
+}
+
+
+=item splitdir
+
+The opposite of L<catdir()|File::Spec/catdir()>.
+
+ @dirs = File::Spec->splitdir( $directories );
+
+$directories must be only the directory portion of the path on systems
+that have the concept of a volume or that have path syntax that differentiates
+files from directories.
+
+Unlike just splitting the directories on the separator, leading empty and
+trailing directory entries can be returned, because these are significant
+on some OSs. So,
+
+ File::Spec->splitdir( "/a/b/c" );
+
+Yields:
+
+ ( '', 'a', 'b', '', 'c', '' )
+
+=cut
+
+sub splitdir {
+ my ($self,$directories) = @_ ;
+ #
+ # split() likes to forget about trailing null fields, so here we
+ # check to be sure that there will not be any before handling the
+ # simple case.
+ #
+ if ( $directories !~ m|[\\/]\Z(?!\n)| ) {
+ return split( m|[\\/]|, $directories );
+ }
+ else {
+ #
+ # since there was a trailing separator, add a file name to the end,
+ # then do the split, then replace it with ''.
+ #
+ my( @directories )= split( m|[\\/]|, "${directories}dummy" ) ;
+ $directories[ $#directories ]= '' ;
+ return @directories ;
+ }
+}
+
+
+=item catpath
+
+Takes volume, directory and file portions and returns an entire path. Under
+Unix, $volume is ignored, and this is just like catfile(). On other OSs,
+the $volume become significant.
+
+=cut
+
+sub catpath {
+ my ($self,$volume,$directory,$file) = @_;
+
+ # If it's UNC, make sure the glue separator is there, reusing
+ # whatever separator is first in the $volume
+ $volume .= $1
+ if ( $volume =~ m@^([\\/])[\\/][^\\/]+[\\/][^\\/]+\Z(?!\n)@s &&
+ $directory =~ m@^[^\\/]@s
+ ) ;
+
+ $volume .= $directory ;
+
+ # If the volume is not just A:, make sure the glue separator is
+ # there, reusing whatever separator is first in the $volume if possible.
+ if ( $volume !~ m@^[a-zA-Z]:\Z(?!\n)@s &&
+ $volume =~ m@[^\\/]\Z(?!\n)@ &&
+ $file =~ m@[^\\/]@
+ ) {
+ $volume =~ m@([\\/])@ ;
+ my $sep = $1 ? $1 : '\\' ;
+ $volume .= $sep ;
+ }
+
+ $volume .= $file ;
+
+ return $volume ;
+}
+
+
+sub abs2rel {
+ my($self,$path,$base) = @_;
+
+ # Clean up $path
+ if ( ! $self->file_name_is_absolute( $path ) ) {
+ $path = $self->rel2abs( $path ) ;
+ }
+ else {
+ $path = $self->canonpath( $path ) ;
+ }
+
+ # Figure out the effective $base and clean it up.
+ if ( !defined( $base ) || $base eq '' ) {
+ $base = cwd() ;
+ }
+ elsif ( ! $self->file_name_is_absolute( $base ) ) {
+ $base = $self->rel2abs( $base ) ;
+ }
+ else {
+ $base = $self->canonpath( $base ) ;
+ }
+
+ # Split up paths
+ my ( undef, $path_directories, $path_file ) =
+ $self->splitpath( $path, 1 ) ;
+
+ my $base_directories = ($self->splitpath( $base, 1 ))[1] ;
+
+ # Now, remove all leading components that are the same
+ my @pathchunks = $self->splitdir( $path_directories );
+ my @basechunks = $self->splitdir( $base_directories );
+
+ while ( @pathchunks &&
+ @basechunks &&
+ lc( $pathchunks[0] ) eq lc( $basechunks[0] )
+ ) {
+ shift @pathchunks ;
+ shift @basechunks ;
+ }
+
+ # No need to catdir, we know these are well formed.
+ $path_directories = CORE::join( '\\', @pathchunks );
+ $base_directories = CORE::join( '\\', @basechunks );
+
+ # $base_directories now contains the directories the resulting relative
+ # path must ascend out of before it can descend to $path_directory. So,
+ # replace all names with $parentDir
+
+ #FA Need to replace between backslashes...
+ $base_directories =~ s|[^\\]+|..|g ;
+
+ # Glue the two together, using a separator if necessary, and preventing an
+ # empty result.
+
+ #FA Must check that new directories are not empty.
+ if ( $path_directories ne '' && $base_directories ne '' ) {
+ $path_directories = "$base_directories\\$path_directories" ;
+ } else {
+ $path_directories = "$base_directories$path_directories" ;
+ }
+
+ return $self->canonpath(
+ $self->catpath( "", $path_directories, $path_file )
+ ) ;
+}
+
+
+sub rel2abs {
+ my ($self,$path,$base ) = @_;
+
+ if ( ! $self->file_name_is_absolute( $path ) ) {
+
+ if ( !defined( $base ) || $base eq '' ) {
+ $base = cwd() ;
+ }
+ elsif ( ! $self->file_name_is_absolute( $base ) ) {
+ $base = $self->rel2abs( $base ) ;
+ }
+ else {
+ $base = $self->canonpath( $base ) ;
+ }
+
+ my ( $path_directories, $path_file ) =
+ ($self->splitpath( $path, 1 ))[1,2] ;
+
+ my ( $base_volume, $base_directories ) =
+ $self->splitpath( $base, 1 ) ;
+
+ $path = $self->catpath(
+ $base_volume,
+ $self->catdir( $base_directories, $path_directories ),
+ $path_file
+ ) ;
+ }
+
+ return $self->canonpath( $path ) ;
+}
+
+=back
+
+=head2 Note For File::Spec::Win32 Maintainers
+
+Novell NetWare inherits its File::Spec behaviour from File::Spec::Win32.
+
+=head1 SEE ALSO
+
+L<File::Spec>
+
+=cut
+
+1;
diff --git a/Master/xemtex/perl/lib/File/Temp.pm b/Master/xemtex/perl/lib/File/Temp.pm
new file mode 100644
index 00000000000..6f351dfa6ce
--- /dev/null
+++ b/Master/xemtex/perl/lib/File/Temp.pm
@@ -0,0 +1,1876 @@
+package File::Temp;
+
+=head1 NAME
+
+File::Temp - return name and handle of a temporary file safely
+
+=begin __INTERNALS
+
+=head1 PORTABILITY
+
+This module is designed to be portable across operating systems
+and it currently supports Unix, VMS, DOS, OS/2, Windows and
+Mac OS (Classic). When
+porting to a new OS there are generally three main issues
+that have to be solved:
+
+=over 4
+
+=item *
+
+Can the OS unlink an open file? If it can not then the
+C<_can_unlink_opened_file> method should be modified.
+
+=item *
+
+Are the return values from C<stat> reliable? By default all the
+return values from C<stat> are compared when unlinking a temporary
+file using the filename and the handle. Operating systems other than
+unix do not always have valid entries in all fields. If C<unlink0> fails
+then the C<stat> comparison should be modified accordingly.
+
+=item *
+
+Security. Systems that can not support a test for the sticky bit
+on a directory can not use the MEDIUM and HIGH security tests.
+The C<_can_do_level> method should be modified accordingly.
+
+=back
+
+=end __INTERNALS
+
+=head1 SYNOPSIS
+
+ use File::Temp qw/ tempfile tempdir /;
+
+ $dir = tempdir( CLEANUP => 1 );
+ ($fh, $filename) = tempfile( DIR => $dir );
+
+ ($fh, $filename) = tempfile( $template, DIR => $dir);
+ ($fh, $filename) = tempfile( $template, SUFFIX => '.dat');
+
+ $fh = tempfile();
+
+MkTemp family:
+
+ use File::Temp qw/ :mktemp /;
+
+ ($fh, $file) = mkstemp( "tmpfileXXXXX" );
+ ($fh, $file) = mkstemps( "tmpfileXXXXXX", $suffix);
+
+ $tmpdir = mkdtemp( $template );
+
+ $unopened_file = mktemp( $template );
+
+POSIX functions:
+
+ use File::Temp qw/ :POSIX /;
+
+ $file = tmpnam();
+ $fh = tmpfile();
+
+ ($fh, $file) = tmpnam();
+ ($fh, $file) = tmpfile();
+
+
+Compatibility functions:
+
+ $unopened_file = File::Temp::tempnam( $dir, $pfx );
+
+=begin later
+
+Objects (NOT YET IMPLEMENTED):
+
+ require File::Temp;
+
+ $fh = new File::Temp($template);
+ $fname = $fh->filename;
+
+=end later
+
+=head1 DESCRIPTION
+
+C<File::Temp> can be used to create and open temporary files in a safe way.
+The tempfile() function can be used to return the name and the open
+filehandle of a temporary file. The tempdir() function can
+be used to create a temporary directory.
+
+The security aspect of temporary file creation is emphasized such that
+a filehandle and filename are returned together. This helps guarantee
+that a race condition can not occur where the temporary file is
+created by another process between checking for the existence of the
+file and its opening. Additional security levels are provided to
+check, for example, that the sticky bit is set on world writable
+directories. See L<"safe_level"> for more information.
+
+For compatibility with popular C library functions, Perl implementations of
+the mkstemp() family of functions are provided. These are, mkstemp(),
+mkstemps(), mkdtemp() and mktemp().
+
+Additionally, implementations of the standard L<POSIX|POSIX>
+tmpnam() and tmpfile() functions are provided if required.
+
+Implementations of mktemp(), tmpnam(), and tempnam() are provided,
+but should be used with caution since they return only a filename
+that was valid when function was called, so cannot guarantee
+that the file will not exist by the time the caller opens the filename.
+
+=cut
+
+# 5.6.0 gives us S_IWOTH, S_IWGRP, our and auto-vivifying filehandls
+# People would like a version on 5.005 so give them what they want :-)
+use 5.005;
+use strict;
+use Carp;
+use File::Spec 0.8;
+use File::Path qw/ rmtree /;
+use Fcntl 1.03;
+use Errno;
+require VMS::Stdio if $^O eq 'VMS';
+
+# Need the Symbol package if we are running older perl
+require Symbol if $] < 5.006;
+
+
+# use 'our' on v5.6.0
+use vars qw($VERSION @EXPORT_OK %EXPORT_TAGS $DEBUG);
+
+$DEBUG = 0;
+
+# We are exporting functions
+
+use base qw/Exporter/;
+
+# Export list - to allow fine tuning of export table
+
+@EXPORT_OK = qw{
+ tempfile
+ tempdir
+ tmpnam
+ tmpfile
+ mktemp
+ mkstemp
+ mkstemps
+ mkdtemp
+ unlink0
+ };
+
+# Groups of functions for export
+
+%EXPORT_TAGS = (
+ 'POSIX' => [qw/ tmpnam tmpfile /],
+ 'mktemp' => [qw/ mktemp mkstemp mkstemps mkdtemp/],
+ );
+
+# add contents of these tags to @EXPORT
+Exporter::export_tags('POSIX','mktemp');
+
+# Version number
+
+$VERSION = '0.13';
+
+# This is a list of characters that can be used in random filenames
+
+my @CHARS = (qw/ 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
+ 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
+ 0 1 2 3 4 5 6 7 8 9 _
+ /);
+
+# Maximum number of tries to make a temp file before failing
+
+use constant MAX_TRIES => 10;
+
+# Minimum number of X characters that should be in a template
+use constant MINX => 4;
+
+# Default template when no template supplied
+
+use constant TEMPXXX => 'X' x 10;
+
+# Constants for the security level
+
+use constant STANDARD => 0;
+use constant MEDIUM => 1;
+use constant HIGH => 2;
+
+# OPENFLAGS. If we defined the flag to use with Sysopen here this gives
+# us an optimisation when many temporary files are requested
+
+my $OPENFLAGS = O_CREAT | O_EXCL | O_RDWR;
+
+unless ($^O eq 'MacOS') {
+ for my $oflag (qw/ FOLLOW BINARY LARGEFILE EXLOCK NOINHERIT /) {
+ my ($bit, $func) = (0, "Fcntl::O_" . $oflag);
+ no strict 'refs';
+ $OPENFLAGS |= $bit if eval {
+ # Make sure that redefined die handlers do not cause problems
+ # eg CGI::Carp
+ local $SIG{__DIE__} = sub {};
+ local $SIG{__WARN__} = sub {};
+ $bit = &$func();
+ 1;
+ };
+ }
+}
+
+# On some systems the O_TEMPORARY flag can be used to tell the OS
+# to automatically remove the file when it is closed. This is fine
+# in most cases but not if tempfile is called with UNLINK=>0 and
+# the filename is requested -- in the case where the filename is to
+# be passed to another routine. This happens on windows. We overcome
+# this by using a second open flags variable
+
+my $OPENTEMPFLAGS = $OPENFLAGS;
+unless ($^O eq 'MacOS') {
+ for my $oflag (qw/ TEMPORARY /) {
+ my ($bit, $func) = (0, "Fcntl::O_" . $oflag);
+ no strict 'refs';
+ $OPENTEMPFLAGS |= $bit if eval {
+ # Make sure that redefined die handlers do not cause problems
+ # eg CGI::Carp
+ local $SIG{__DIE__} = sub {};
+ local $SIG{__WARN__} = sub {};
+ $bit = &$func();
+ 1;
+ };
+ }
+}
+
+# INTERNAL ROUTINES - not to be used outside of package
+
+# Generic routine for getting a temporary filename
+# modelled on OpenBSD _gettemp() in mktemp.c
+
+# The template must contain X's that are to be replaced
+# with the random values
+
+# Arguments:
+
+# TEMPLATE - string containing the XXXXX's that is converted
+# to a random filename and opened if required
+
+# Optionally, a hash can also be supplied containing specific options
+# "open" => if true open the temp file, else just return the name
+# default is 0
+# "mkdir"=> if true, we are creating a temp directory rather than tempfile
+# default is 0
+# "suffixlen" => number of characters at end of PATH to be ignored.
+# default is 0.
+# "unlink_on_close" => indicates that, if possible, the OS should remove
+# the file as soon as it is closed. Usually indicates
+# use of the O_TEMPORARY flag to sysopen.
+# Usually irrelevant on unix
+
+# Optionally a reference to a scalar can be passed into the function
+# On error this will be used to store the reason for the error
+# "ErrStr" => \$errstr
+
+# "open" and "mkdir" can not both be true
+# "unlink_on_close" is not used when "mkdir" is true.
+
+# The default options are equivalent to mktemp().
+
+# Returns:
+# filehandle - open file handle (if called with doopen=1, else undef)
+# temp name - name of the temp file or directory
+
+# For example:
+# ($fh, $name) = _gettemp($template, "open" => 1);
+
+# for the current version, failures are associated with
+# stored in an error string and returned to give the reason whilst debugging
+# This routine is not called by any external function
+sub _gettemp {
+
+ croak 'Usage: ($fh, $name) = _gettemp($template, OPTIONS);'
+ unless scalar(@_) >= 1;
+
+ # the internal error string - expect it to be overridden
+ # Need this in case the caller decides not to supply us a value
+ # need an anonymous scalar
+ my $tempErrStr;
+
+ # Default options
+ my %options = (
+ "open" => 0,
+ "mkdir" => 0,
+ "suffixlen" => 0,
+ "unlink_on_close" => 0,
+ "ErrStr" => \$tempErrStr,
+ );
+
+ # Read the template
+ my $template = shift;
+ if (ref($template)) {
+ # Use a warning here since we have not yet merged ErrStr
+ carp "File::Temp::_gettemp: template must not be a reference";
+ return ();
+ }
+
+ # Check that the number of entries on stack are even
+ if (scalar(@_) % 2 != 0) {
+ # Use a warning here since we have not yet merged ErrStr
+ carp "File::Temp::_gettemp: Must have even number of options";
+ return ();
+ }
+
+ # Read the options and merge with defaults
+ %options = (%options, @_) if @_;
+
+ # Make sure the error string is set to undef
+ ${$options{ErrStr}} = undef;
+
+ # Can not open the file and make a directory in a single call
+ if ($options{"open"} && $options{"mkdir"}) {
+ ${$options{ErrStr}} = "doopen and domkdir can not both be true\n";
+ return ();
+ }
+
+ # Find the start of the end of the Xs (position of last X)
+ # Substr starts from 0
+ my $start = length($template) - 1 - $options{"suffixlen"};
+
+ # Check that we have at least MINX x X (eg 'XXXX") at the end of the string
+ # (taking suffixlen into account). Any fewer is insecure.
+
+ # Do it using substr - no reason to use a pattern match since
+ # we know where we are looking and what we are looking for
+
+ if (substr($template, $start - MINX + 1, MINX) ne 'X' x MINX) {
+ ${$options{ErrStr}} = "The template must contain at least ".
+ MINX . " 'X' characters\n";
+ return ();
+ }
+
+ # Replace all the X at the end of the substring with a
+ # random character or just all the XX at the end of a full string.
+ # Do it as an if, since the suffix adjusts which section to replace
+ # and suffixlen=0 returns nothing if used in the substr directly
+ # and generate a full path from the template
+
+ my $path = _replace_XX($template, $options{"suffixlen"});
+
+
+ # Split the path into constituent parts - eventually we need to check
+ # whether the directory exists
+ # We need to know whether we are making a temp directory
+ # or a tempfile
+
+ my ($volume, $directories, $file);
+ my $parent; # parent directory
+ if ($options{"mkdir"}) {
+ # There is no filename at the end
+ ($volume, $directories, $file) = File::Spec->splitpath( $path, 1);
+
+ # The parent is then $directories without the last directory
+ # Split the directory and put it back together again
+ my @dirs = File::Spec->splitdir($directories);
+
+ # If @dirs only has one entry (i.e. the directory template) that means
+ # we are in the current directory
+ if ($#dirs == 0) {
+ $parent = File::Spec->curdir;
+ } else {
+
+ if ($^O eq 'VMS') { # need volume to avoid relative dir spec
+ $parent = File::Spec->catdir($volume, @dirs[0..$#dirs-1]);
+ $parent = 'sys$disk:[]' if $parent eq '';
+ } else {
+
+ # Put it back together without the last one
+ $parent = File::Spec->catdir(@dirs[0..$#dirs-1]);
+
+ # ...and attach the volume (no filename)
+ $parent = File::Spec->catpath($volume, $parent, '');
+ }
+
+ }
+
+ } else {
+
+ # Get rid of the last filename (use File::Basename for this?)
+ ($volume, $directories, $file) = File::Spec->splitpath( $path );
+
+ # Join up without the file part
+ $parent = File::Spec->catpath($volume,$directories,'');
+
+ # If $parent is empty replace with curdir
+ $parent = File::Spec->curdir
+ unless $directories ne '';
+
+ }
+
+ # Check that the parent directories exist
+ # Do this even for the case where we are simply returning a name
+ # not a file -- no point returning a name that includes a directory
+ # that does not exist or is not writable
+
+ unless (-d $parent) {
+ ${$options{ErrStr}} = "Parent directory ($parent) is not a directory";
+ return ();
+ }
+ unless (-w _) {
+ ${$options{ErrStr}} = "Parent directory ($parent) is not writable\n";
+ return ();
+ }
+
+
+ # Check the stickiness of the directory and chown giveaway if required
+ # If the directory is world writable the sticky bit
+ # must be set
+
+ if (File::Temp->safe_level == MEDIUM) {
+ my $safeerr;
+ unless (_is_safe($parent,\$safeerr)) {
+ ${$options{ErrStr}} = "Parent directory ($parent) is not safe ($safeerr)";
+ return ();
+ }
+ } elsif (File::Temp->safe_level == HIGH) {
+ my $safeerr;
+ unless (_is_verysafe($parent, \$safeerr)) {
+ ${$options{ErrStr}} = "Parent directory ($parent) is not safe ($safeerr)";
+ return ();
+ }
+ }
+
+
+ # Now try MAX_TRIES time to open the file
+ for (my $i = 0; $i < MAX_TRIES; $i++) {
+
+ # Try to open the file if requested
+ if ($options{"open"}) {
+ my $fh;
+
+ # If we are running before perl5.6.0 we can not auto-vivify
+ if ($] < 5.006) {
+ $fh = &Symbol::gensym;
+ }
+
+ # Try to make sure this will be marked close-on-exec
+ # XXX: Win32 doesn't respect this, nor the proper fcntl,
+ # but may have O_NOINHERIT. This may or may not be in Fcntl.
+ local $^F = 2;
+
+ # Store callers umask
+ my $umask = umask();
+
+ # Set a known umask
+ umask(066);
+
+ # Attempt to open the file
+ my $open_success = undef;
+ if ( $^O eq 'VMS' and $options{"unlink_on_close"} ) {
+ # make it auto delete on close by setting FAB$V_DLT bit
+ $fh = VMS::Stdio::vmssysopen($path, $OPENFLAGS, 0600, 'fop=dlt');
+ $open_success = $fh;
+ } else {
+ my $flags = ( $options{"unlink_on_close"} ?
+ $OPENTEMPFLAGS :
+ $OPENFLAGS );
+ $open_success = sysopen($fh, $path, $flags, 0600);
+ }
+ if ( $open_success ) {
+
+ # Reset umask
+ umask($umask) if defined $umask;
+
+ # Opened successfully - return file handle and name
+ return ($fh, $path);
+
+ } else {
+ # Reset umask
+ umask($umask) if defined $umask;
+
+ # Error opening file - abort with error
+ # if the reason was anything but EEXIST
+ unless ($!{EEXIST}) {
+ ${$options{ErrStr}} = "Could not create temp file $path: $!";
+ return ();
+ }
+
+ # Loop round for another try
+
+ }
+ } elsif ($options{"mkdir"}) {
+
+ # Store callers umask
+ my $umask = umask();
+
+ # Set a known umask
+ umask(066);
+
+ # Open the temp directory
+ if (mkdir( $path, 0700)) {
+ # created okay
+ # Reset umask
+ umask($umask) if defined $umask;
+
+ return undef, $path;
+ } else {
+
+ # Reset umask
+ umask($umask) if defined $umask;
+
+ # Abort with error if the reason for failure was anything
+ # except EEXIST
+ unless ($!{EEXIST}) {
+ ${$options{ErrStr}} = "Could not create directory $path: $!";
+ return ();
+ }
+
+ # Loop round for another try
+
+ }
+
+ } else {
+
+ # Return true if the file can not be found
+ # Directory has been checked previously
+
+ return (undef, $path) unless -e $path;
+
+ # Try again until MAX_TRIES
+
+ }
+
+ # Did not successfully open the tempfile/dir
+ # so try again with a different set of random letters
+ # No point in trying to increment unless we have only
+ # 1 X say and the randomness could come up with the same
+ # file MAX_TRIES in a row.
+
+ # Store current attempt - in principal this implies that the
+ # 3rd time around the open attempt that the first temp file
+ # name could be generated again. Probably should store each
+ # attempt and make sure that none are repeated
+
+ my $original = $path;
+ my $counter = 0; # Stop infinite loop
+ my $MAX_GUESS = 50;
+
+ do {
+
+ # Generate new name from original template
+ $path = _replace_XX($template, $options{"suffixlen"});
+
+ $counter++;
+
+ } until ($path ne $original || $counter > $MAX_GUESS);
+
+ # Check for out of control looping
+ if ($counter > $MAX_GUESS) {
+ ${$options{ErrStr}} = "Tried to get a new temp name different to the previous value $MAX_GUESS times.\nSomething wrong with template?? ($template)";
+ return ();
+ }
+
+ }
+
+ # If we get here, we have run out of tries
+ ${ $options{ErrStr} } = "Have exceeded the maximum number of attempts ("
+ . MAX_TRIES . ") to open temp file/dir";
+
+ return ();
+
+}
+
+# Internal routine to return a random character from the
+# character list. Does not do an srand() since rand()
+# will do one automatically
+
+# No arguments. Return value is the random character
+
+# No longer called since _replace_XX runs a few percent faster if
+# I inline the code. This is important if we are creating thousands of
+# temporary files.
+
+sub _randchar {
+
+ $CHARS[ int( rand( $#CHARS ) ) ];
+
+}
+
+# Internal routine to replace the XXXX... with random characters
+# This has to be done by _gettemp() every time it fails to
+# open a temp file/dir
+
+# Arguments: $template (the template with XXX),
+# $ignore (number of characters at end to ignore)
+
+# Returns: modified template
+
+sub _replace_XX {
+
+ croak 'Usage: _replace_XX($template, $ignore)'
+ unless scalar(@_) == 2;
+
+ my ($path, $ignore) = @_;
+
+ # Do it as an if, since the suffix adjusts which section to replace
+ # and suffixlen=0 returns nothing if used in the substr directly
+ # Alternatively, could simply set $ignore to length($path)-1
+ # Don't want to always use substr when not required though.
+
+ if ($ignore) {
+ substr($path, 0, - $ignore) =~ s/X(?=X*\z)/$CHARS[ int( rand( $#CHARS ) ) ]/ge;
+ } else {
+ $path =~ s/X(?=X*\z)/$CHARS[ int( rand( $#CHARS ) ) ]/ge;
+ }
+
+ return $path;
+}
+
+# internal routine to check to see if the directory is safe
+# First checks to see if the directory is not owned by the
+# current user or root. Then checks to see if anyone else
+# can write to the directory and if so, checks to see if
+# it has the sticky bit set
+
+# Will not work on systems that do not support sticky bit
+
+#Args: directory path to check
+# Optionally: reference to scalar to contain error message
+# Returns true if the path is safe and false otherwise.
+# Returns undef if can not even run stat() on the path
+
+# This routine based on version written by Tom Christiansen
+
+# Presumably, by the time we actually attempt to create the
+# file or directory in this directory, it may not be safe
+# anymore... Have to run _is_safe directly after the open.
+
+sub _is_safe {
+
+ my $path = shift;
+ my $err_ref = shift;
+
+ # Stat path
+ my @info = stat($path);
+ unless (scalar(@info)) {
+ $$err_ref = "stat(path) returned no values";
+ return 0;
+ };
+ return 1 if $^O eq 'VMS'; # owner delete control at file level
+
+ # Check to see whether owner is neither superuser (or a system uid) nor me
+ # Use the real uid from the $< variable
+ # UID is in [4]
+ if ($info[4] > File::Temp->top_system_uid() && $info[4] != $<) {
+
+ Carp::cluck(sprintf "uid=$info[4] topuid=%s \$<=$< path='$path'",
+ File::Temp->top_system_uid());
+
+ $$err_ref = "Directory owned neither by root nor the current user"
+ if ref($err_ref);
+ return 0;
+ }
+
+ # check whether group or other can write file
+ # use 066 to detect either reading or writing
+ # use 022 to check writability
+ # Do it with S_IWOTH and S_IWGRP for portability (maybe)
+ # mode is in info[2]
+ if (($info[2] & &Fcntl::S_IWGRP) || # Is group writable?
+ ($info[2] & &Fcntl::S_IWOTH) ) { # Is world writable?
+ # Must be a directory
+ unless (-d _) {
+ $$err_ref = "Path ($path) is not a directory"
+ if ref($err_ref);
+ return 0;
+ }
+ # Must have sticky bit set
+ unless (-k _) {
+ $$err_ref = "Sticky bit not set on $path when dir is group|world writable"
+ if ref($err_ref);
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+# Internal routine to check whether a directory is safe
+# for temp files. Safer than _is_safe since it checks for
+# the possibility of chown giveaway and if that is a possibility
+# checks each directory in the path to see if it is safe (with _is_safe)
+
+# If _PC_CHOWN_RESTRICTED is not set, does the full test of each
+# directory anyway.
+
+# Takes optional second arg as scalar ref to error reason
+
+sub _is_verysafe {
+
+ # Need POSIX - but only want to bother if really necessary due to overhead
+ require POSIX;
+
+ my $path = shift;
+ print "_is_verysafe testing $path\n" if $DEBUG;
+ return 1 if $^O eq 'VMS'; # owner delete control at file level
+
+ my $err_ref = shift;
+
+ # Should Get the value of _PC_CHOWN_RESTRICTED if it is defined
+ # and If it is not there do the extensive test
+ my $chown_restricted;
+ $chown_restricted = &POSIX::_PC_CHOWN_RESTRICTED()
+ if eval { &POSIX::_PC_CHOWN_RESTRICTED(); 1};
+
+ # If chown_resticted is set to some value we should test it
+ if (defined $chown_restricted) {
+
+ # Return if the current directory is safe
+ return _is_safe($path,$err_ref) if POSIX::sysconf( $chown_restricted );
+
+ }
+
+ # To reach this point either, the _PC_CHOWN_RESTRICTED symbol
+ # was not avialable or the symbol was there but chown giveaway
+ # is allowed. Either way, we now have to test the entire tree for
+ # safety.
+
+ # Convert path to an absolute directory if required
+ unless (File::Spec->file_name_is_absolute($path)) {
+ $path = File::Spec->rel2abs($path);
+ }
+
+ # Split directory into components - assume no file
+ my ($volume, $directories, undef) = File::Spec->splitpath( $path, 1);
+
+ # Slightly less efficient than having a function in File::Spec
+ # to chop off the end of a directory or even a function that
+ # can handle ../ in a directory tree
+ # Sometimes splitdir() returns a blank at the end
+ # so we will probably check the bottom directory twice in some cases
+ my @dirs = File::Spec->splitdir($directories);
+
+ # Concatenate one less directory each time around
+ foreach my $pos (0.. $#dirs) {
+ # Get a directory name
+ my $dir = File::Spec->catpath($volume,
+ File::Spec->catdir(@dirs[0.. $#dirs - $pos]),
+ ''
+ );
+
+ print "TESTING DIR $dir\n" if $DEBUG;
+
+ # Check the directory
+ return 0 unless _is_safe($dir,$err_ref);
+
+ }
+
+ return 1;
+}
+
+
+
+# internal routine to determine whether unlink works on this
+# platform for files that are currently open.
+# Returns true if we can, false otherwise.
+
+# Currently WinNT, OS/2 and VMS can not unlink an opened file
+# On VMS this is because the O_EXCL flag is used to open the
+# temporary file. Currently I do not know enough about the issues
+# on VMS to decide whether O_EXCL is a requirement.
+
+sub _can_unlink_opened_file {
+
+ if ($^O eq 'MSWin32' || $^O eq 'os2' || $^O eq 'VMS' || $^O eq 'dos' || $^O eq 'MacOS') {
+ return 0;
+ } else {
+ return 1;
+ }
+
+}
+
+# internal routine to decide which security levels are allowed
+# see safe_level() for more information on this
+
+# Controls whether the supplied security level is allowed
+
+# $cando = _can_do_level( $level )
+
+sub _can_do_level {
+
+ # Get security level
+ my $level = shift;
+
+ # Always have to be able to do STANDARD
+ return 1 if $level == STANDARD;
+
+ # Currently, the systems that can do HIGH or MEDIUM are identical
+ if ( $^O eq 'MSWin32' || $^O eq 'os2' || $^O eq 'cygwin' || $^O eq 'dos' || $^O eq 'MacOS') {
+ return 0;
+ } else {
+ return 1;
+ }
+
+}
+
+# This routine sets up a deferred unlinking of a specified
+# filename and filehandle. It is used in the following cases:
+# - Called by unlink0 if an opened file can not be unlinked
+# - Called by tempfile() if files are to be removed on shutdown
+# - Called by tempdir() if directories are to be removed on shutdown
+
+# Arguments:
+# _deferred_unlink( $fh, $fname, $isdir );
+#
+# - filehandle (so that it can be expclicitly closed if open
+# - filename (the thing we want to remove)
+# - isdir (flag to indicate that we are being given a directory)
+# [and hence no filehandle]
+
+# Status is not referred to since all the magic is done with an END block
+
+{
+ # Will set up two lexical variables to contain all the files to be
+ # removed. One array for files, another for directories
+ # They will only exist in this block
+ # This means we only have to set up a single END block to remove all files
+ # @files_to_unlink contains an array ref with the filehandle and filename
+ my (@files_to_unlink, @dirs_to_unlink);
+
+ # Set up an end block to use these arrays
+ END {
+ # Files
+ foreach my $file (@files_to_unlink) {
+ # close the filehandle without checking its state
+ # in order to make real sure that this is closed
+ # if its already closed then I dont care about the answer
+ # probably a better way to do this
+ close($file->[0]); # file handle is [0]
+
+ if (-f $file->[1]) { # file name is [1]
+ unlink $file->[1] or warn "Error removing ".$file->[1];
+ }
+ }
+ # Dirs
+ foreach my $dir (@dirs_to_unlink) {
+ if (-d $dir) {
+ rmtree($dir, $DEBUG, 1);
+ }
+ }
+
+ }
+
+ # This is the sub called to register a file for deferred unlinking
+ # This could simply store the input parameters and defer everything
+ # until the END block. For now we do a bit of checking at this
+ # point in order to make sure that (1) we have a file/dir to delete
+ # and (2) we have been called with the correct arguments.
+ sub _deferred_unlink {
+
+ croak 'Usage: _deferred_unlink($fh, $fname, $isdir)'
+ unless scalar(@_) == 3;
+
+ my ($fh, $fname, $isdir) = @_;
+
+ warn "Setting up deferred removal of $fname\n"
+ if $DEBUG;
+
+ # If we have a directory, check that it is a directory
+ if ($isdir) {
+
+ if (-d $fname) {
+
+ # Directory exists so store it
+ # first on VMS turn []foo into [.foo] for rmtree
+ $fname = VMS::Filespec::vmspath($fname) if $^O eq 'VMS';
+ push (@dirs_to_unlink, $fname);
+
+ } else {
+ carp "Request to remove directory $fname could not be completed since it does not exist!\n" if $^W;
+ }
+
+ } else {
+
+ if (-f $fname) {
+
+ # file exists so store handle and name for later removal
+ push(@files_to_unlink, [$fh, $fname]);
+
+ } else {
+ carp "Request to remove file $fname could not be completed since it is not there!\n" if $^W;
+ }
+
+ }
+
+ }
+
+
+}
+
+=head1 FUNCTIONS
+
+This section describes the recommended interface for generating
+temporary files and directories.
+
+=over 4
+
+=item B<tempfile>
+
+This is the basic function to generate temporary files.
+The behaviour of the file can be changed using various options:
+
+ ($fh, $filename) = tempfile();
+
+Create a temporary file in the directory specified for temporary
+files, as specified by the tmpdir() function in L<File::Spec>.
+
+ ($fh, $filename) = tempfile($template);
+
+Create a temporary file in the current directory using the supplied
+template. Trailing `X' characters are replaced with random letters to
+generate the filename. At least four `X' characters must be present
+in the template.
+
+ ($fh, $filename) = tempfile($template, SUFFIX => $suffix)
+
+Same as previously, except that a suffix is added to the template
+after the `X' translation. Useful for ensuring that a temporary
+filename has a particular extension when needed by other applications.
+But see the WARNING at the end.
+
+ ($fh, $filename) = tempfile($template, DIR => $dir);
+
+Translates the template as before except that a directory name
+is specified.
+
+ ($fh, $filename) = tempfile($template, UNLINK => 1);
+
+Return the filename and filehandle as before except that the file is
+automatically removed when the program exits. Default is for the file
+to be removed if a file handle is requested and to be kept if the
+filename is requested. In a scalar context (where no filename is
+returned) the file is always deleted either on exit or when it is closed.
+
+If the template is not specified, a template is always
+automatically generated. This temporary file is placed in tmpdir()
+(L<File::Spec>) unless a directory is specified explicitly with the
+DIR option.
+
+ $fh = tempfile( $template, DIR => $dir );
+
+If called in scalar context, only the filehandle is returned
+and the file will automatically be deleted when closed (see
+the description of tmpfile() elsewhere in this document).
+This is the preferred mode of operation, as if you only
+have a filehandle, you can never create a race condition
+by fumbling with the filename. On systems that can not unlink
+an open file or can not mark a file as temporary when it is opened
+(for example, Windows NT uses the C<O_TEMPORARY> flag))
+the file is marked for deletion when the program ends (equivalent
+to setting UNLINK to 1). The C<UNLINK> flag is ignored if present.
+
+ (undef, $filename) = tempfile($template, OPEN => 0);
+
+This will return the filename based on the template but
+will not open this file. Cannot be used in conjunction with
+UNLINK set to true. Default is to always open the file
+to protect from possible race conditions. A warning is issued
+if warnings are turned on. Consider using the tmpnam()
+and mktemp() functions described elsewhere in this document
+if opening the file is not required.
+
+Options can be combined as required.
+
+=cut
+
+sub tempfile {
+
+ # Can not check for argument count since we can have any
+ # number of args
+
+ # Default options
+ my %options = (
+ "DIR" => undef, # Directory prefix
+ "SUFFIX" => '', # Template suffix
+ "UNLINK" => 0, # Do not unlink file on exit
+ "OPEN" => 1, # Open file
+ );
+
+ # Check to see whether we have an odd or even number of arguments
+ my $template = (scalar(@_) % 2 == 1 ? shift(@_) : undef);
+
+ # Read the options and merge with defaults
+ %options = (%options, @_) if @_;
+
+ # First decision is whether or not to open the file
+ if (! $options{"OPEN"}) {
+
+ warn "tempfile(): temporary filename requested but not opened.\nPossibly unsafe, consider using tempfile() with OPEN set to true\n"
+ if $^W;
+
+ }
+
+ if ($options{"DIR"} and $^O eq 'VMS') {
+
+ # on VMS turn []foo into [.foo] for concatenation
+ $options{"DIR"} = VMS::Filespec::vmspath($options{"DIR"});
+ }
+
+ # Construct the template
+
+ # Have a choice of trying to work around the mkstemp/mktemp/tmpnam etc
+ # functions or simply constructing a template and using _gettemp()
+ # explicitly. Go for the latter
+
+ # First generate a template if not defined and prefix the directory
+ # If no template must prefix the temp directory
+ if (defined $template) {
+ if ($options{"DIR"}) {
+
+ $template = File::Spec->catfile($options{"DIR"}, $template);
+
+ }
+
+ } else {
+
+ if ($options{"DIR"}) {
+
+ $template = File::Spec->catfile($options{"DIR"}, TEMPXXX);
+
+ } else {
+
+ $template = File::Spec->catfile(File::Spec->tmpdir, TEMPXXX);
+
+ }
+
+ }
+
+ # Now add a suffix
+ $template .= $options{"SUFFIX"};
+
+ # Determine whether we should tell _gettemp to unlink the file
+ # On unix this is irrelevant and can be worked out after the file is
+ # opened (simply by unlinking the open filehandle). On Windows or VMS
+ # we have to indicate temporary-ness when we open the file. In general
+ # we only want a true temporary file if we are returning just the
+ # filehandle - if the user wants the filename they probably do not
+ # want the file to disappear as soon as they close it.
+ # For this reason, tie unlink_on_close to the return context regardless
+ # of OS.
+ my $unlink_on_close = ( wantarray ? 0 : 1);
+
+ # Create the file
+ my ($fh, $path, $errstr);
+ croak "Error in tempfile() using $template: $errstr"
+ unless (($fh, $path) = _gettemp($template,
+ "open" => $options{'OPEN'},
+ "mkdir"=> 0 ,
+ "unlink_on_close" => $unlink_on_close,
+ "suffixlen" => length($options{'SUFFIX'}),
+ "ErrStr" => \$errstr,
+ ) );
+
+ # Set up an exit handler that can do whatever is right for the
+ # system. This removes files at exit when requested explicitly or when
+ # system is asked to unlink_on_close but is unable to do so because
+ # of OS limitations.
+ # The latter should be achieved by using a tied filehandle.
+ # Do not check return status since this is all done with END blocks.
+ _deferred_unlink($fh, $path, 0) if $options{"UNLINK"};
+
+ # Return
+ if (wantarray()) {
+
+ if ($options{'OPEN'}) {
+ return ($fh, $path);
+ } else {
+ return (undef, $path);
+ }
+
+ } else {
+
+ # Unlink the file. It is up to unlink0 to decide what to do with
+ # this (whether to unlink now or to defer until later)
+ unlink0($fh, $path) or croak "Error unlinking file $path using unlink0";
+
+ # Return just the filehandle.
+ return $fh;
+ }
+
+
+}
+
+=item B<tempdir>
+
+This is the recommended interface for creation of temporary directories.
+The behaviour of the function depends on the arguments:
+
+ $tempdir = tempdir();
+
+Create a directory in tmpdir() (see L<File::Spec|File::Spec>).
+
+ $tempdir = tempdir( $template );
+
+Create a directory from the supplied template. This template is
+similar to that described for tempfile(). `X' characters at the end
+of the template are replaced with random letters to construct the
+directory name. At least four `X' characters must be in the template.
+
+ $tempdir = tempdir ( DIR => $dir );
+
+Specifies the directory to use for the temporary directory.
+The temporary directory name is derived from an internal template.
+
+ $tempdir = tempdir ( $template, DIR => $dir );
+
+Prepend the supplied directory name to the template. The template
+should not include parent directory specifications itself. Any parent
+directory specifications are removed from the template before
+prepending the supplied directory.
+
+ $tempdir = tempdir ( $template, TMPDIR => 1 );
+
+Using the supplied template, create the temporary directory in
+a standard location for temporary files. Equivalent to doing
+
+ $tempdir = tempdir ( $template, DIR => File::Spec->tmpdir);
+
+but shorter. Parent directory specifications are stripped from the
+template itself. The C<TMPDIR> option is ignored if C<DIR> is set
+explicitly. Additionally, C<TMPDIR> is implied if neither a template
+nor a directory are supplied.
+
+ $tempdir = tempdir( $template, CLEANUP => 1);
+
+Create a temporary directory using the supplied template, but
+attempt to remove it (and all files inside it) when the program
+exits. Note that an attempt will be made to remove all files from
+the directory even if they were not created by this module (otherwise
+why ask to clean it up?). The directory removal is made with
+the rmtree() function from the L<File::Path|File::Path> module.
+Of course, if the template is not specified, the temporary directory
+will be created in tmpdir() and will also be removed at program exit.
+
+=cut
+
+# '
+
+sub tempdir {
+
+ # Can not check for argument count since we can have any
+ # number of args
+
+ # Default options
+ my %options = (
+ "CLEANUP" => 0, # Remove directory on exit
+ "DIR" => '', # Root directory
+ "TMPDIR" => 0, # Use tempdir with template
+ );
+
+ # Check to see whether we have an odd or even number of arguments
+ my $template = (scalar(@_) % 2 == 1 ? shift(@_) : undef );
+
+ # Read the options and merge with defaults
+ %options = (%options, @_) if @_;
+
+ # Modify or generate the template
+
+ # Deal with the DIR and TMPDIR options
+ if (defined $template) {
+
+ # Need to strip directory path if using DIR or TMPDIR
+ if ($options{'TMPDIR'} || $options{'DIR'}) {
+
+ # Strip parent directory from the filename
+ #
+ # There is no filename at the end
+ $template = VMS::Filespec::vmspath($template) if $^O eq 'VMS';
+ my ($volume, $directories, undef) = File::Spec->splitpath( $template, 1);
+
+ # Last directory is then our template
+ $template = (File::Spec->splitdir($directories))[-1];
+
+ # Prepend the supplied directory or temp dir
+ if ($options{"DIR"}) {
+
+ $template = File::Spec->catdir($options{"DIR"}, $template);
+
+ } elsif ($options{TMPDIR}) {
+
+ # Prepend tmpdir
+ $template = File::Spec->catdir(File::Spec->tmpdir, $template);
+
+ }
+
+ }
+
+ } else {
+
+ if ($options{"DIR"}) {
+
+ $template = File::Spec->catdir($options{"DIR"}, TEMPXXX);
+
+ } else {
+
+ $template = File::Spec->catdir(File::Spec->tmpdir, TEMPXXX);
+
+ }
+
+ }
+
+ # Create the directory
+ my $tempdir;
+ my $suffixlen = 0;
+ if ($^O eq 'VMS') { # dir names can end in delimiters
+ $template =~ m/([\.\]:>]+)$/;
+ $suffixlen = length($1);
+ }
+ if ( ($^O eq 'MacOS') && (substr($template, -1) eq ':') ) {
+ # dir name has a trailing ':'
+ ++$suffixlen;
+ }
+
+ my $errstr;
+ croak "Error in tempdir() using $template: $errstr"
+ unless ((undef, $tempdir) = _gettemp($template,
+ "open" => 0,
+ "mkdir"=> 1 ,
+ "suffixlen" => $suffixlen,
+ "ErrStr" => \$errstr,
+ ) );
+
+ # Install exit handler; must be dynamic to get lexical
+ if ( $options{'CLEANUP'} && -d $tempdir) {
+ _deferred_unlink(undef, $tempdir, 1);
+ }
+
+ # Return the dir name
+ return $tempdir;
+
+}
+
+=back
+
+=head1 MKTEMP FUNCTIONS
+
+The following functions are Perl implementations of the
+mktemp() family of temp file generation system calls.
+
+=over 4
+
+=item B<mkstemp>
+
+Given a template, returns a filehandle to the temporary file and the name
+of the file.
+
+ ($fh, $name) = mkstemp( $template );
+
+In scalar context, just the filehandle is returned.
+
+The template may be any filename with some number of X's appended
+to it, for example F</tmp/temp.XXXX>. The trailing X's are replaced
+with unique alphanumeric combinations.
+
+=cut
+
+
+
+sub mkstemp {
+
+ croak "Usage: mkstemp(template)"
+ if scalar(@_) != 1;
+
+ my $template = shift;
+
+ my ($fh, $path, $errstr);
+ croak "Error in mkstemp using $template: $errstr"
+ unless (($fh, $path) = _gettemp($template,
+ "open" => 1,
+ "mkdir"=> 0 ,
+ "suffixlen" => 0,
+ "ErrStr" => \$errstr,
+ ) );
+
+ if (wantarray()) {
+ return ($fh, $path);
+ } else {
+ return $fh;
+ }
+
+}
+
+
+=item B<mkstemps>
+
+Similar to mkstemp(), except that an extra argument can be supplied
+with a suffix to be appended to the template.
+
+ ($fh, $name) = mkstemps( $template, $suffix );
+
+For example a template of C<testXXXXXX> and suffix of C<.dat>
+would generate a file similar to F<testhGji_w.dat>.
+
+Returns just the filehandle alone when called in scalar context.
+
+=cut
+
+sub mkstemps {
+
+ croak "Usage: mkstemps(template, suffix)"
+ if scalar(@_) != 2;
+
+
+ my $template = shift;
+ my $suffix = shift;
+
+ $template .= $suffix;
+
+ my ($fh, $path, $errstr);
+ croak "Error in mkstemps using $template: $errstr"
+ unless (($fh, $path) = _gettemp($template,
+ "open" => 1,
+ "mkdir"=> 0 ,
+ "suffixlen" => length($suffix),
+ "ErrStr" => \$errstr,
+ ) );
+
+ if (wantarray()) {
+ return ($fh, $path);
+ } else {
+ return $fh;
+ }
+
+}
+
+=item B<mkdtemp>
+
+Create a directory from a template. The template must end in
+X's that are replaced by the routine.
+
+ $tmpdir_name = mkdtemp($template);
+
+Returns the name of the temporary directory created.
+Returns undef on failure.
+
+Directory must be removed by the caller.
+
+=cut
+
+#' # for emacs
+
+sub mkdtemp {
+
+ croak "Usage: mkdtemp(template)"
+ if scalar(@_) != 1;
+
+ my $template = shift;
+ my $suffixlen = 0;
+ if ($^O eq 'VMS') { # dir names can end in delimiters
+ $template =~ m/([\.\]:>]+)$/;
+ $suffixlen = length($1);
+ }
+ if ( ($^O eq 'MacOS') && (substr($template, -1) eq ':') ) {
+ # dir name has a trailing ':'
+ ++$suffixlen;
+ }
+ my ($junk, $tmpdir, $errstr);
+ croak "Error creating temp directory from template $template\: $errstr"
+ unless (($junk, $tmpdir) = _gettemp($template,
+ "open" => 0,
+ "mkdir"=> 1 ,
+ "suffixlen" => $suffixlen,
+ "ErrStr" => \$errstr,
+ ) );
+
+ return $tmpdir;
+
+}
+
+=item B<mktemp>
+
+Returns a valid temporary filename but does not guarantee
+that the file will not be opened by someone else.
+
+ $unopened_file = mktemp($template);
+
+Template is the same as that required by mkstemp().
+
+=cut
+
+sub mktemp {
+
+ croak "Usage: mktemp(template)"
+ if scalar(@_) != 1;
+
+ my $template = shift;
+
+ my ($tmpname, $junk, $errstr);
+ croak "Error getting name to temp file from template $template: $errstr"
+ unless (($junk, $tmpname) = _gettemp($template,
+ "open" => 0,
+ "mkdir"=> 0 ,
+ "suffixlen" => 0,
+ "ErrStr" => \$errstr,
+ ) );
+
+ return $tmpname;
+}
+
+=back
+
+=head1 POSIX FUNCTIONS
+
+This section describes the re-implementation of the tmpnam()
+and tmpfile() functions described in L<POSIX>
+using the mkstemp() from this module.
+
+Unlike the L<POSIX|POSIX> implementations, the directory used
+for the temporary file is not specified in a system include
+file (C<P_tmpdir>) but simply depends on the choice of tmpdir()
+returned by L<File::Spec|File::Spec>. On some implementations this
+location can be set using the C<TMPDIR> environment variable, which
+may not be secure.
+If this is a problem, simply use mkstemp() and specify a template.
+
+=over 4
+
+=item B<tmpnam>
+
+When called in scalar context, returns the full name (including path)
+of a temporary file (uses mktemp()). The only check is that the file does
+not already exist, but there is no guarantee that that condition will
+continue to apply.
+
+ $file = tmpnam();
+
+When called in list context, a filehandle to the open file and
+a filename are returned. This is achieved by calling mkstemp()
+after constructing a suitable template.
+
+ ($fh, $file) = tmpnam();
+
+If possible, this form should be used to prevent possible
+race conditions.
+
+See L<File::Spec/tmpdir> for information on the choice of temporary
+directory for a particular operating system.
+
+=cut
+
+sub tmpnam {
+
+ # Retrieve the temporary directory name
+ my $tmpdir = File::Spec->tmpdir;
+
+ croak "Error temporary directory is not writable"
+ if $tmpdir eq '';
+
+ # Use a ten character template and append to tmpdir
+ my $template = File::Spec->catfile($tmpdir, TEMPXXX);
+
+ if (wantarray() ) {
+ return mkstemp($template);
+ } else {
+ return mktemp($template);
+ }
+
+}
+
+=item B<tmpfile>
+
+In scalar context, returns the filehandle of a temporary file.
+
+ $fh = tmpfile();
+
+The file is removed when the filehandle is closed or when the program
+exits. No access to the filename is provided.
+
+If the temporary file can not be created undef is returned.
+Currently this command will probably not work when the temporary
+directory is on an NFS file system.
+
+=cut
+
+sub tmpfile {
+
+ # Simply call tmpnam() in a list context
+ my ($fh, $file) = tmpnam();
+
+ # Make sure file is removed when filehandle is closed
+ # This will fail on NFS
+ unlink0($fh, $file)
+ or return undef;
+
+ return $fh;
+
+}
+
+=back
+
+=head1 ADDITIONAL FUNCTIONS
+
+These functions are provided for backwards compatibility
+with common tempfile generation C library functions.
+
+They are not exported and must be addressed using the full package
+name.
+
+=over 4
+
+=item B<tempnam>
+
+Return the name of a temporary file in the specified directory
+using a prefix. The file is guaranteed not to exist at the time
+the function was called, but such guarantees are good for one
+clock tick only. Always use the proper form of C<sysopen>
+with C<O_CREAT | O_EXCL> if you must open such a filename.
+
+ $filename = File::Temp::tempnam( $dir, $prefix );
+
+Equivalent to running mktemp() with $dir/$prefixXXXXXXXX
+(using unix file convention as an example)
+
+Because this function uses mktemp(), it can suffer from race conditions.
+
+=cut
+
+sub tempnam {
+
+ croak 'Usage tempnam($dir, $prefix)' unless scalar(@_) == 2;
+
+ my ($dir, $prefix) = @_;
+
+ # Add a string to the prefix
+ $prefix .= 'XXXXXXXX';
+
+ # Concatenate the directory to the file
+ my $template = File::Spec->catfile($dir, $prefix);
+
+ return mktemp($template);
+
+}
+
+=back
+
+=head1 UTILITY FUNCTIONS
+
+Useful functions for dealing with the filehandle and filename.
+
+=over 4
+
+=item B<unlink0>
+
+Given an open filehandle and the associated filename, make a safe
+unlink. This is achieved by first checking that the filename and
+filehandle initially point to the same file and that the number of
+links to the file is 1 (all fields returned by stat() are compared).
+Then the filename is unlinked and the filehandle checked once again to
+verify that the number of links on that file is now 0. This is the
+closest you can come to making sure that the filename unlinked was the
+same as the file whose descriptor you hold.
+
+ unlink0($fh, $path) or die "Error unlinking file $path safely";
+
+Returns false on error. The filehandle is not closed since on some
+occasions this is not required.
+
+On some platforms, for example Windows NT, it is not possible to
+unlink an open file (the file must be closed first). On those
+platforms, the actual unlinking is deferred until the program ends and
+good status is returned. A check is still performed to make sure that
+the filehandle and filename are pointing to the same thing (but not at
+the time the end block is executed since the deferred removal may not
+have access to the filehandle).
+
+Additionally, on Windows NT not all the fields returned by stat() can
+be compared. For example, the C<dev> and C<rdev> fields seem to be
+different. Also, it seems that the size of the file returned by stat()
+does not always agree, with C<stat(FH)> being more accurate than
+C<stat(filename)>, presumably because of caching issues even when
+using autoflush (this is usually overcome by waiting a while after
+writing to the tempfile before attempting to C<unlink0> it).
+
+Finally, on NFS file systems the link count of the file handle does
+not always go to zero immediately after unlinking. Currently, this
+command is expected to fail on NFS disks.
+
+=cut
+
+sub unlink0 {
+
+ croak 'Usage: unlink0(filehandle, filename)'
+ unless scalar(@_) == 2;
+
+ # Read args
+ my ($fh, $path) = @_;
+
+ warn "Unlinking $path using unlink0\n"
+ if $DEBUG;
+
+ # Stat the filehandle
+ my @fh = stat $fh;
+
+ if ($fh[3] > 1 && $^W) {
+ carp "unlink0: fstat found too many links; SB=@fh" if $^W;
+ }
+
+ # Stat the path
+ my @path = stat $path;
+
+ unless (@path) {
+ carp "unlink0: $path is gone already" if $^W;
+ return;
+ }
+
+ # this is no longer a file, but may be a directory, or worse
+ unless (-f _) {
+ confess "panic: $path is no longer a file: SB=@fh";
+ }
+
+ # Do comparison of each member of the array
+ # On WinNT dev and rdev seem to be different
+ # depending on whether it is a file or a handle.
+ # Cannot simply compare all members of the stat return
+ # Select the ones we can use
+ my @okstat = (0..$#fh); # Use all by default
+ if ($^O eq 'MSWin32') {
+ @okstat = (1,2,3,4,5,7,8,9,10);
+ } elsif ($^O eq 'os2') {
+ @okstat = (0, 2..$#fh);
+ } elsif ($^O eq 'VMS') { # device and file ID are sufficient
+ @okstat = (0, 1);
+ } elsif ($^O eq 'dos') {
+ @okstat = (0,2..7,11..$#fh);
+ }
+
+ # Now compare each entry explicitly by number
+ for (@okstat) {
+ print "Comparing: $_ : $fh[$_] and $path[$_]\n" if $DEBUG;
+ # Use eq rather than == since rdev, blksize, and blocks (6, 11,
+ # and 12) will be '' on platforms that do not support them. This
+ # is fine since we are only comparing integers.
+ unless ($fh[$_] eq $path[$_]) {
+ warn "Did not match $_ element of stat\n" if $DEBUG;
+ return 0;
+ }
+ }
+
+ # attempt remove the file (does not work on some platforms)
+ if (_can_unlink_opened_file()) {
+ # XXX: do *not* call this on a directory; possible race
+ # resulting in recursive removal
+ croak "unlink0: $path has become a directory!" if -d $path;
+ unlink($path) or return 0;
+
+ # Stat the filehandle
+ @fh = stat $fh;
+
+ print "Link count = $fh[3] \n" if $DEBUG;
+
+ # Make sure that the link count is zero
+ # - Cygwin provides deferred unlinking, however,
+ # on Win9x the link count remains 1
+ # On NFS the link count may still be 1 but we cant know that
+ # we are on NFS
+ return ( $fh[3] == 0 or $^O eq 'cygwin' ? 1 : 0);
+
+ } else {
+ _deferred_unlink($fh, $path, 0);
+ return 1;
+ }
+
+}
+
+=back
+
+=head1 PACKAGE VARIABLES
+
+These functions control the global state of the package.
+
+=over 4
+
+=item B<safe_level>
+
+Controls the lengths to which the module will go to check the safety of the
+temporary file or directory before proceeding.
+Options are:
+
+=over 8
+
+=item STANDARD
+
+Do the basic security measures to ensure the directory exists and
+is writable, that the umask() is fixed before opening of the file,
+that temporary files are opened only if they do not already exist, and
+that possible race conditions are avoided. Finally the L<unlink0|"unlink0">
+function is used to remove files safely.
+
+=item MEDIUM
+
+In addition to the STANDARD security, the output directory is checked
+to make sure that it is owned either by root or the user running the
+program. If the directory is writable by group or by other, it is then
+checked to make sure that the sticky bit is set.
+
+Will not work on platforms that do not support the C<-k> test
+for sticky bit.
+
+=item HIGH
+
+In addition to the MEDIUM security checks, also check for the
+possibility of ``chown() giveaway'' using the L<POSIX|POSIX>
+sysconf() function. If this is a possibility, each directory in the
+path is checked in turn for safeness, recursively walking back to the
+root directory.
+
+For platforms that do not support the L<POSIX|POSIX>
+C<_PC_CHOWN_RESTRICTED> symbol (for example, Windows NT) it is
+assumed that ``chown() giveaway'' is possible and the recursive test
+is performed.
+
+=back
+
+The level can be changed as follows:
+
+ File::Temp->safe_level( File::Temp::HIGH );
+
+The level constants are not exported by the module.
+
+Currently, you must be running at least perl v5.6.0 in order to
+run with MEDIUM or HIGH security. This is simply because the
+safety tests use functions from L<Fcntl|Fcntl> that are not
+available in older versions of perl. The problem is that the version
+number for Fcntl is the same in perl 5.6.0 and in 5.005_03 even though
+they are different versions.
+
+On systems that do not support the HIGH or MEDIUM safety levels
+(for example Win NT or OS/2) any attempt to change the level will
+be ignored. The decision to ignore rather than raise an exception
+allows portable programs to be written with high security in mind
+for the systems that can support this without those programs failing
+on systems where the extra tests are irrelevant.
+
+If you really need to see whether the change has been accepted
+simply examine the return value of C<safe_level>.
+
+ $newlevel = File::Temp->safe_level( File::Temp::HIGH );
+ die "Could not change to high security"
+ if $newlevel != File::Temp::HIGH;
+
+=cut
+
+{
+ # protect from using the variable itself
+ my $LEVEL = STANDARD;
+ sub safe_level {
+ my $self = shift;
+ if (@_) {
+ my $level = shift;
+ if (($level != STANDARD) && ($level != MEDIUM) && ($level != HIGH)) {
+ carp "safe_level: Specified level ($level) not STANDARD, MEDIUM or HIGH - ignoring\n" if $^W;
+ } else {
+ # Dont allow this on perl 5.005 or earlier
+ if ($] < 5.006 && $level != STANDARD) {
+ # Cant do MEDIUM or HIGH checks
+ croak "Currently requires perl 5.006 or newer to do the safe checks";
+ }
+ # Check that we are allowed to change level
+ # Silently ignore if we can not.
+ $LEVEL = $level if _can_do_level($level);
+ }
+ }
+ return $LEVEL;
+ }
+}
+
+=item TopSystemUID
+
+This is the highest UID on the current system that refers to a root
+UID. This is used to make sure that the temporary directory is
+owned by a system UID (C<root>, C<bin>, C<sys> etc) rather than
+simply by root.
+
+This is required since on many unix systems C</tmp> is not owned
+by root.
+
+Default is to assume that any UID less than or equal to 10 is a root
+UID.
+
+ File::Temp->top_system_uid(10);
+ my $topid = File::Temp->top_system_uid;
+
+This value can be adjusted to reduce security checking if required.
+The value is only relevant when C<safe_level> is set to MEDIUM or higher.
+
+=back
+
+=cut
+
+{
+ my $TopSystemUID = 10;
+ sub top_system_uid {
+ my $self = shift;
+ if (@_) {
+ my $newuid = shift;
+ croak "top_system_uid: UIDs should be numeric"
+ unless $newuid =~ /^\d+$/s;
+ $TopSystemUID = $newuid;
+ }
+ return $TopSystemUID;
+ }
+}
+
+=head1 WARNING
+
+For maximum security, endeavour always to avoid ever looking at,
+touching, or even imputing the existence of the filename. You do not
+know that that filename is connected to the same file as the handle
+you have, and attempts to check this can only trigger more race
+conditions. It's far more secure to use the filehandle alone and
+dispense with the filename altogether.
+
+If you need to pass the handle to something that expects a filename
+then, on a unix system, use C<"/dev/fd/" . fileno($fh)> for arbitrary
+programs, or more generally C<< "+<=&" . fileno($fh) >> for Perl
+programs. You will have to clear the close-on-exec bit on that file
+descriptor before passing it to another process.
+
+ use Fcntl qw/F_SETFD F_GETFD/;
+ fcntl($tmpfh, F_SETFD, 0)
+ or die "Can't clear close-on-exec flag on temp fh: $!\n";
+
+=head2 Temporary files and NFS
+
+Some problems are associated with using temporary files that reside
+on NFS file systems and it is recommended that a local filesystem
+is used whenever possible. Some of the security tests will most probably
+fail when the temp file is not local. Additionally, be aware that
+the performance of I/O operations over NFS will not be as good as for
+a local disk.
+
+=head1 HISTORY
+
+Originally began life in May 1999 as an XS interface to the system
+mkstemp() function. In March 2000, the OpenBSD mkstemp() code was
+translated to Perl for total control of the code's
+security checking, to ensure the presence of the function regardless of
+operating system and to help with portability.
+
+=head1 SEE ALSO
+
+L<POSIX/tmpnam>, L<POSIX/tmpfile>, L<File::Spec>, L<File::Path>
+
+See L<IO::File> and L<File::MkTemp> for different implementations of
+temporary file handling.
+
+=head1 AUTHOR
+
+Tim Jenness E<lt>t.jenness@jach.hawaii.eduE<gt>
+
+Copyright (C) 1999-2001 Tim Jenness and the UK Particle Physics and
+Astronomy Research Council. All Rights Reserved. This program is free
+software; you can redistribute it and/or modify it under the same
+terms as Perl itself.
+
+Original Perl implementation loosely based on the OpenBSD C code for
+mkstemp(). Thanks to Tom Christiansen for suggesting that this module
+should be written and providing ideas for code improvements and
+security enhancements.
+
+=cut
+
+
+1;
diff --git a/Master/xemtex/perl/lib/FindBin.pm b/Master/xemtex/perl/lib/FindBin.pm
new file mode 100644
index 00000000000..8be9cb6b5af
--- /dev/null
+++ b/Master/xemtex/perl/lib/FindBin.pm
@@ -0,0 +1,183 @@
+# FindBin.pm
+#
+# Copyright (c) 1995 Graham Barr & Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+
+=head1 NAME
+
+FindBin - Locate directory of original perl script
+
+=head1 SYNOPSIS
+
+ use FindBin;
+ use lib "$FindBin::Bin/../lib";
+
+ or
+
+ use FindBin qw($Bin);
+ use lib "$Bin/../lib";
+
+=head1 DESCRIPTION
+
+Locates the full path to the script bin directory to allow the use
+of paths relative to the bin directory.
+
+This allows a user to setup a directory tree for some software with
+directories E<lt>rootE<gt>/bin and E<lt>rootE<gt>/lib and then the above example will allow
+the use of modules in the lib directory without knowing where the software
+tree is installed.
+
+If perl is invoked using the B<-e> option or the perl script is read from
+C<STDIN> then FindBin sets both C<$Bin> and C<$RealBin> to the current
+directory.
+
+=head1 EXPORTABLE VARIABLES
+
+ $Bin - path to bin directory from where script was invoked
+ $Script - basename of script from which perl was invoked
+ $RealBin - $Bin with all links resolved
+ $RealScript - $Script with all links resolved
+
+=head1 KNOWN ISSUES
+
+If there are two modules using C<FindBin> from different directories
+under the same interpreter, this won't work. Since C<FindBin> uses
+C<BEGIN> block, it'll be executed only once, and only the first caller
+will get it right. This is a problem under mod_perl and other persistent
+Perl environments, where you shouldn't use this module. Which also means
+that you should avoid using C<FindBin> in modules that you plan to put
+on CPAN. The only way to make sure that C<FindBin> will work is to force
+the C<BEGIN> block to be executed again:
+
+ delete $INC{'FindBin.pm'};
+ require FindBin;
+
+=head1 KNOWN BUGS
+
+If perl is invoked as
+
+ perl filename
+
+and I<filename> does not have executable rights and a program called I<filename>
+exists in the users C<$ENV{PATH}> which satisfies both B<-x> and B<-T> then FindBin
+assumes that it was invoked via the C<$ENV{PATH}>.
+
+Workaround is to invoke perl as
+
+ perl ./filename
+
+=head1 AUTHORS
+
+FindBin is supported as part of the core perl distribution. Please send bug
+reports to E<lt>F<perlbug@perl.org>E<gt> using the perlbug program included with perl.
+
+Graham Barr E<lt>F<gbarr@pobox.com>E<gt>
+Nick Ing-Simmons E<lt>F<nik@tiuk.ti.com>E<gt>
+
+=head1 COPYRIGHT
+
+Copyright (c) 1995 Graham Barr & Nick Ing-Simmons. All rights reserved.
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+=cut
+
+package FindBin;
+use Carp;
+require 5.000;
+require Exporter;
+use Cwd qw(getcwd abs_path);
+use Config;
+use File::Basename;
+use File::Spec;
+
+@EXPORT_OK = qw($Bin $Script $RealBin $RealScript $Dir $RealDir);
+%EXPORT_TAGS = (ALL => [qw($Bin $Script $RealBin $RealScript $Dir $RealDir)]);
+@ISA = qw(Exporter);
+
+$VERSION = "1.43";
+
+BEGIN
+{
+ *Dir = \$Bin;
+ *RealDir = \$RealBin;
+
+ if($0 eq '-e' || $0 eq '-')
+ {
+ # perl invoked with -e or script is on C<STDIN>
+
+ $Script = $RealScript = $0;
+ $Bin = $RealBin = getcwd();
+ }
+ else
+ {
+ my $script = $0;
+
+ if ($^O eq 'VMS')
+ {
+ ($Bin,$Script) = VMS::Filespec::rmsexpand($0) =~ /(.*\])(.*)/s;
+ ($RealBin,$RealScript) = ($Bin,$Script);
+ }
+ else
+ {
+ my $dosish = ($^O eq 'MSWin32' or $^O eq 'os2');
+ unless(($script =~ m#/# || ($dosish && $script =~ m#\\#))
+ && -f $script)
+ {
+ my $dir;
+ foreach $dir (File::Spec->path)
+ {
+ my $scr = File::Spec->catfile($dir, $script);
+ if(-r $scr && (!$dosish || -x _))
+ {
+ $script = $scr;
+
+ if (-f $0)
+ {
+ # $script has been found via PATH but perl could have
+ # been invoked as 'perl file'. Do a dumb check to see
+ # if $script is a perl program, if not then $script = $0
+ #
+ # well we actually only check that it is an ASCII file
+ # we know its executable so it is probably a script
+ # of some sort.
+
+ $script = $0 unless(-T $script);
+ }
+ last;
+ }
+ }
+ }
+
+ croak("Cannot find current script '$0'") unless(-f $script);
+
+ # Ensure $script contains the complete path incase we C<chdir>
+
+ $script = File::Spec->catfile(getcwd(), $script)
+ unless File::Spec->file_name_is_absolute($script);
+
+ ($Script,$Bin) = fileparse($script);
+
+ # Resolve $script if it is a link
+ while(1)
+ {
+ my $linktext = readlink($script);
+
+ ($RealScript,$RealBin) = fileparse($script);
+ last unless defined $linktext;
+
+ $script = (File::Spec->file_name_is_absolute($linktext))
+ ? $linktext
+ : File::Spec->catfile($RealBin, $linktext);
+ }
+
+ # Get absolute paths to directories
+ $Bin = abs_path($Bin) if($Bin);
+ $RealBin = abs_path($RealBin) if($RealBin);
+ }
+ }
+}
+
+1; # Keep require happy
+
diff --git a/Master/xemtex/perl/lib/Getopt/Long.pm b/Master/xemtex/perl/lib/Getopt/Long.pm
new file mode 100644
index 00000000000..7e1663d557a
--- /dev/null
+++ b/Master/xemtex/perl/lib/Getopt/Long.pm
@@ -0,0 +1,2048 @@
+# GetOpt::Long.pm -- Universal options parsing
+
+package Getopt::Long;
+
+# RCS Status : $Id: GetoptLong.pm,v 2.58 2002-06-20 09:32:09+02 jv Exp $
+# Author : Johan Vromans
+# Created On : Tue Sep 11 15:00:12 1990
+# Last Modified By: Johan Vromans
+# Last Modified On: Thu Jun 20 07:48:05 2002
+# Update Count : 1083
+# Status : Released
+
+################ Copyright ################
+
+# This program is Copyright 1990,2002 by Johan Vromans.
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the Perl Artistic License or the
+# GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any
+# later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# If you do not have a copy of the GNU General Public License write to
+# the Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
+# MA 02139, USA.
+
+################ Module Preamble ################
+
+use 5.004;
+
+use strict;
+
+use vars qw($VERSION);
+$VERSION = 2.32;
+# For testing versions only.
+use vars qw($VERSION_STRING);
+$VERSION_STRING = "2.32";
+
+use Exporter;
+
+use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+@ISA = qw(Exporter);
+%EXPORT_TAGS = qw();
+BEGIN {
+ # Init immediately so their contents can be used in the 'use vars' below.
+ @EXPORT = qw(&GetOptions $REQUIRE_ORDER $PERMUTE $RETURN_IN_ORDER);
+ @EXPORT_OK = qw();
+}
+
+# User visible variables.
+use vars @EXPORT, @EXPORT_OK;
+use vars qw($error $debug $major_version $minor_version);
+# Deprecated visible variables.
+use vars qw($autoabbrev $getopt_compat $ignorecase $bundling $order
+ $passthrough);
+# Official invisible variables.
+use vars qw($genprefix $caller $gnu_compat);
+
+# Public subroutines.
+sub Configure (@);
+sub config (@); # deprecated name
+sub GetOptions;
+
+# Private subroutines.
+sub ConfigDefaults ();
+sub ParseOptionSpec ($$);
+sub OptCtl ($);
+sub FindOption ($$$$);
+
+################ Local Variables ################
+
+################ Resident subroutines ################
+
+sub ConfigDefaults () {
+ # Handle POSIX compliancy.
+ if ( defined $ENV{"POSIXLY_CORRECT"} ) {
+ $genprefix = "(--|-)";
+ $autoabbrev = 0; # no automatic abbrev of options
+ $bundling = 0; # no bundling of single letter switches
+ $getopt_compat = 0; # disallow '+' to start options
+ $order = $REQUIRE_ORDER;
+ }
+ else {
+ $genprefix = "(--|-|\\+)";
+ $autoabbrev = 1; # automatic abbrev of options
+ $bundling = 0; # bundling off by default
+ $getopt_compat = 1; # allow '+' to start options
+ $order = $PERMUTE;
+ }
+ # Other configurable settings.
+ $debug = 0; # for debugging
+ $error = 0; # error tally
+ $ignorecase = 1; # ignore case when matching options
+ $passthrough = 0; # leave unrecognized options alone
+ $gnu_compat = 0; # require --opt=val if value is optional
+}
+
+# Override import.
+sub import {
+ my $pkg = shift; # package
+ my @syms = (); # symbols to import
+ my @config = (); # configuration
+ my $dest = \@syms; # symbols first
+ for ( @_ ) {
+ if ( $_ eq ':config' ) {
+ $dest = \@config; # config next
+ next;
+ }
+ push (@$dest, $_); # push
+ }
+ # Hide one level and call super.
+ local $Exporter::ExportLevel = 1;
+ $pkg->SUPER::import(@syms);
+ # And configure.
+ Configure (@config) if @config;
+}
+
+################ Initialization ################
+
+# Values for $order. See GNU getopt.c for details.
+($REQUIRE_ORDER, $PERMUTE, $RETURN_IN_ORDER) = (0..2);
+# Version major/minor numbers.
+($major_version, $minor_version) = $VERSION =~ /^(\d+)\.(\d+)/;
+
+ConfigDefaults();
+
+################ OO Interface ################
+
+package Getopt::Long::Parser;
+
+# Store a copy of the default configuration. Since ConfigDefaults has
+# just been called, what we get from Configure is the default.
+my $default_config = do {
+ Getopt::Long::Configure ()
+};
+
+sub new {
+ my $that = shift;
+ my $class = ref($that) || $that;
+ my %atts = @_;
+
+ # Register the callers package.
+ my $self = { caller_pkg => (caller)[0] };
+
+ bless ($self, $class);
+
+ # Process config attributes.
+ if ( defined $atts{config} ) {
+ my $save = Getopt::Long::Configure ($default_config, @{$atts{config}});
+ $self->{settings} = Getopt::Long::Configure ($save);
+ delete ($atts{config});
+ }
+ # Else use default config.
+ else {
+ $self->{settings} = $default_config;
+ }
+
+ if ( %atts ) { # Oops
+ die(__PACKAGE__.": unhandled attributes: ".
+ join(" ", sort(keys(%atts)))."\n");
+ }
+
+ $self;
+}
+
+sub configure {
+ my ($self) = shift;
+
+ # Restore settings, merge new settings in.
+ my $save = Getopt::Long::Configure ($self->{settings}, @_);
+
+ # Restore orig config and save the new config.
+ $self->{settings} = Getopt::Long::Configure ($save);
+}
+
+sub getoptions {
+ my ($self) = shift;
+
+ # Restore config settings.
+ my $save = Getopt::Long::Configure ($self->{settings});
+
+ # Call main routine.
+ my $ret = 0;
+ $Getopt::Long::caller = $self->{caller_pkg};
+
+ eval {
+ # Locally set exception handler to default, otherwise it will
+ # be called implicitly here, and again explicitly when we try
+ # to deliver the messages.
+ local ($SIG{__DIE__}) = '__DEFAULT__';
+ $ret = Getopt::Long::GetOptions (@_);
+ };
+
+ # Restore saved settings.
+ Getopt::Long::Configure ($save);
+
+ # Handle errors and return value.
+ die ($@) if $@;
+ return $ret;
+}
+
+package Getopt::Long;
+
+# Indices in option control info.
+# Note that ParseOptions uses the fields directly. Search for 'hard-wired'.
+use constant CTL_TYPE => 0;
+#use constant CTL_TYPE_FLAG => '';
+#use constant CTL_TYPE_NEG => '!';
+#use constant CTL_TYPE_INCR => '+';
+#use constant CTL_TYPE_INT => 'i';
+#use constant CTL_TYPE_INTINC => 'I';
+#use constant CTL_TYPE_XINT => 'o';
+#use constant CTL_TYPE_FLOAT => 'f';
+#use constant CTL_TYPE_STRING => 's';
+
+use constant CTL_CNAME => 1;
+
+use constant CTL_MAND => 2;
+
+use constant CTL_DEST => 3;
+ use constant CTL_DEST_SCALAR => 0;
+ use constant CTL_DEST_ARRAY => 1;
+ use constant CTL_DEST_HASH => 2;
+ use constant CTL_DEST_CODE => 3;
+
+use constant CTL_DEFAULT => 4;
+
+# FFU.
+#use constant CTL_RANGE => ;
+#use constant CTL_REPEAT => ;
+
+sub GetOptions {
+
+ my @optionlist = @_; # local copy of the option descriptions
+ my $argend = '--'; # option list terminator
+ my %opctl = (); # table of option specs
+ my $pkg = $caller || (caller)[0]; # current context
+ # Needed if linkage is omitted.
+ my @ret = (); # accum for non-options
+ my %linkage; # linkage
+ my $userlinkage; # user supplied HASH
+ my $opt; # current option
+ my $prefix = $genprefix; # current prefix
+
+ $error = '';
+
+ print STDERR ("GetOpt::Long $Getopt::Long::VERSION (",
+ '$Revision: 2.58 $', ") ",
+ "called from package \"$pkg\".",
+ "\n ",
+ "ARGV: (@ARGV)",
+ "\n ",
+ "autoabbrev=$autoabbrev,".
+ "bundling=$bundling,",
+ "getopt_compat=$getopt_compat,",
+ "gnu_compat=$gnu_compat,",
+ "order=$order,",
+ "\n ",
+ "ignorecase=$ignorecase,",
+ "passthrough=$passthrough,",
+ "genprefix=\"$genprefix\".",
+ "\n")
+ if $debug;
+
+ # Check for ref HASH as first argument.
+ # First argument may be an object. It's OK to use this as long
+ # as it is really a hash underneath.
+ $userlinkage = undef;
+ if ( @optionlist && ref($optionlist[0]) and
+ "$optionlist[0]" =~ /^(?:.*\=)?HASH\([^\(]*\)$/ ) {
+ $userlinkage = shift (@optionlist);
+ print STDERR ("=> user linkage: $userlinkage\n") if $debug;
+ }
+
+ # See if the first element of the optionlist contains option
+ # starter characters.
+ # Be careful not to interpret '<>' as option starters.
+ if ( @optionlist && $optionlist[0] =~ /^\W+$/
+ && !($optionlist[0] eq '<>'
+ && @optionlist > 0
+ && ref($optionlist[1])) ) {
+ $prefix = shift (@optionlist);
+ # Turn into regexp. Needs to be parenthesized!
+ $prefix =~ s/(\W)/\\$1/g;
+ $prefix = "([" . $prefix . "])";
+ print STDERR ("=> prefix=\"$prefix\"\n") if $debug;
+ }
+
+ # Verify correctness of optionlist.
+ %opctl = ();
+ while ( @optionlist ) {
+ my $opt = shift (@optionlist);
+
+ # Strip leading prefix so people can specify "--foo=i" if they like.
+ $opt = $+ if $opt =~ /^$prefix+(.*)$/s;
+
+ if ( $opt eq '<>' ) {
+ if ( (defined $userlinkage)
+ && !(@optionlist > 0 && ref($optionlist[0]))
+ && (exists $userlinkage->{$opt})
+ && ref($userlinkage->{$opt}) ) {
+ unshift (@optionlist, $userlinkage->{$opt});
+ }
+ unless ( @optionlist > 0
+ && ref($optionlist[0]) && ref($optionlist[0]) eq 'CODE' ) {
+ $error .= "Option spec <> requires a reference to a subroutine\n";
+ # Kill the linkage (to avoid another error).
+ shift (@optionlist)
+ if @optionlist && ref($optionlist[0]);
+ next;
+ }
+ $linkage{'<>'} = shift (@optionlist);
+ next;
+ }
+
+ # Parse option spec.
+ my ($name, $orig) = ParseOptionSpec ($opt, \%opctl);
+ unless ( defined $name ) {
+ # Failed. $orig contains the error message. Sorry for the abuse.
+ $error .= $orig;
+ # Kill the linkage (to avoid another error).
+ shift (@optionlist)
+ if @optionlist && ref($optionlist[0]);
+ next;
+ }
+
+ # If no linkage is supplied in the @optionlist, copy it from
+ # the userlinkage if available.
+ if ( defined $userlinkage ) {
+ unless ( @optionlist > 0 && ref($optionlist[0]) ) {
+ if ( exists $userlinkage->{$orig} &&
+ ref($userlinkage->{$orig}) ) {
+ print STDERR ("=> found userlinkage for \"$orig\": ",
+ "$userlinkage->{$orig}\n")
+ if $debug;
+ unshift (@optionlist, $userlinkage->{$orig});
+ }
+ else {
+ # Do nothing. Being undefined will be handled later.
+ next;
+ }
+ }
+ }
+
+ # Copy the linkage. If omitted, link to global variable.
+ if ( @optionlist > 0 && ref($optionlist[0]) ) {
+ print STDERR ("=> link \"$orig\" to $optionlist[0]\n")
+ if $debug;
+ my $rl = ref($linkage{$orig} = shift (@optionlist));
+
+ if ( $rl eq "ARRAY" ) {
+ $opctl{$name}[CTL_DEST] = CTL_DEST_ARRAY;
+ }
+ elsif ( $rl eq "HASH" ) {
+ $opctl{$name}[CTL_DEST] = CTL_DEST_HASH;
+ }
+ elsif ( $rl eq "SCALAR" || $rl eq "CODE" ) {
+ # Ok.
+ }
+ else {
+ $error .= "Invalid option linkage for \"$opt\"\n";
+ }
+ }
+ else {
+ # Link to global $opt_XXX variable.
+ # Make sure a valid perl identifier results.
+ my $ov = $orig;
+ $ov =~ s/\W/_/g;
+ if ( $opctl{$name}[CTL_DEST] == CTL_DEST_ARRAY ) {
+ print STDERR ("=> link \"$orig\" to \@$pkg","::opt_$ov\n")
+ if $debug;
+ eval ("\$linkage{\$orig} = \\\@".$pkg."::opt_$ov;");
+ }
+ elsif ( $opctl{$name}[CTL_DEST] == CTL_DEST_HASH ) {
+ print STDERR ("=> link \"$orig\" to \%$pkg","::opt_$ov\n")
+ if $debug;
+ eval ("\$linkage{\$orig} = \\\%".$pkg."::opt_$ov;");
+ }
+ else {
+ print STDERR ("=> link \"$orig\" to \$$pkg","::opt_$ov\n")
+ if $debug;
+ eval ("\$linkage{\$orig} = \\\$".$pkg."::opt_$ov;");
+ }
+ }
+ }
+
+ # Bail out if errors found.
+ die ($error) if $error;
+ $error = 0;
+
+ # Show the options tables if debugging.
+ if ( $debug ) {
+ my ($arrow, $k, $v);
+ $arrow = "=> ";
+ while ( ($k,$v) = each(%opctl) ) {
+ print STDERR ($arrow, "\$opctl{$k} = $v ", OptCtl($v), "\n");
+ $arrow = " ";
+ }
+ }
+
+ # Process argument list
+ my $goon = 1;
+ while ( $goon && @ARGV > 0 ) {
+
+ # Get next argument.
+ $opt = shift (@ARGV);
+ print STDERR ("=> arg \"", $opt, "\"\n") if $debug;
+
+ # Double dash is option list terminator.
+ last if $opt eq $argend;
+
+ # Look it up.
+ my $tryopt = $opt;
+ my $found; # success status
+ my $key; # key (if hash type)
+ my $arg; # option argument
+ my $ctl; # the opctl entry
+
+ ($found, $opt, $ctl, $arg, $key) =
+ FindOption ($prefix, $argend, $opt, \%opctl);
+
+ if ( $found ) {
+
+ # FindOption undefines $opt in case of errors.
+ next unless defined $opt;
+
+ if ( defined $arg ) {
+
+ # Get the canonical name.
+ print STDERR ("=> cname for \"$opt\" is ") if $debug;
+ $opt = $ctl->[CTL_CNAME];
+ print STDERR ("\"$ctl->[CTL_CNAME]\"\n") if $debug;
+
+ if ( defined $linkage{$opt} ) {
+ print STDERR ("=> ref(\$L{$opt}) -> ",
+ ref($linkage{$opt}), "\n") if $debug;
+
+ if ( ref($linkage{$opt}) eq 'SCALAR' ) {
+ if ( $ctl->[CTL_TYPE] eq '+' ) {
+ print STDERR ("=> \$\$L{$opt} += \"$arg\"\n")
+ if $debug;
+ if ( defined ${$linkage{$opt}} ) {
+ ${$linkage{$opt}} += $arg;
+ }
+ else {
+ ${$linkage{$opt}} = $arg;
+ }
+ }
+ else {
+ print STDERR ("=> \$\$L{$opt} = \"$arg\"\n")
+ if $debug;
+ ${$linkage{$opt}} = $arg;
+ }
+ }
+ elsif ( ref($linkage{$opt}) eq 'ARRAY' ) {
+ print STDERR ("=> push(\@{\$L{$opt}, \"$arg\")\n")
+ if $debug;
+ push (@{$linkage{$opt}}, $arg);
+ }
+ elsif ( ref($linkage{$opt}) eq 'HASH' ) {
+ print STDERR ("=> \$\$L{$opt}->{$key} = \"$arg\"\n")
+ if $debug;
+ $linkage{$opt}->{$key} = $arg;
+ }
+ elsif ( ref($linkage{$opt}) eq 'CODE' ) {
+ print STDERR ("=> &L{$opt}(\"$opt\"",
+ $ctl->[CTL_DEST] == CTL_DEST_HASH ? ", \"$key\"" : "",
+ ", \"$arg\")\n")
+ if $debug;
+ my $eval_error = do {
+ local $@;
+ local $SIG{__DIE__} = '__DEFAULT__';
+ eval {
+ &{$linkage{$opt}}($opt,
+ $ctl->[CTL_DEST] == CTL_DEST_HASH ? ($key) : (),
+ $arg);
+ };
+ $@;
+ };
+ print STDERR ("=> die($eval_error)\n")
+ if $debug && $eval_error ne '';
+ if ( $eval_error =~ /^!/ ) {
+ if ( $eval_error =~ /^!FINISH\b/ ) {
+ $goon = 0;
+ }
+ }
+ elsif ( $eval_error ne '' ) {
+ warn ($eval_error);
+ $error++;
+ }
+ }
+ else {
+ print STDERR ("Invalid REF type \"", ref($linkage{$opt}),
+ "\" in linkage\n");
+ die("Getopt::Long -- internal error!\n");
+ }
+ }
+ # No entry in linkage means entry in userlinkage.
+ elsif ( $ctl->[CTL_DEST] == CTL_DEST_ARRAY ) {
+ if ( defined $userlinkage->{$opt} ) {
+ print STDERR ("=> push(\@{\$L{$opt}}, \"$arg\")\n")
+ if $debug;
+ push (@{$userlinkage->{$opt}}, $arg);
+ }
+ else {
+ print STDERR ("=>\$L{$opt} = [\"$arg\"]\n")
+ if $debug;
+ $userlinkage->{$opt} = [$arg];
+ }
+ }
+ elsif ( $ctl->[CTL_DEST] == CTL_DEST_HASH ) {
+ if ( defined $userlinkage->{$opt} ) {
+ print STDERR ("=> \$L{$opt}->{$key} = \"$arg\"\n")
+ if $debug;
+ $userlinkage->{$opt}->{$key} = $arg;
+ }
+ else {
+ print STDERR ("=>\$L{$opt} = {$key => \"$arg\"}\n")
+ if $debug;
+ $userlinkage->{$opt} = {$key => $arg};
+ }
+ }
+ else {
+ if ( $ctl->[CTL_TYPE] eq '+' ) {
+ print STDERR ("=> \$L{$opt} += \"$arg\"\n")
+ if $debug;
+ if ( defined $userlinkage->{$opt} ) {
+ $userlinkage->{$opt} += $arg;
+ }
+ else {
+ $userlinkage->{$opt} = $arg;
+ }
+ }
+ else {
+ print STDERR ("=>\$L{$opt} = \"$arg\"\n") if $debug;
+ $userlinkage->{$opt} = $arg;
+ }
+ }
+ }
+ }
+
+ # Not an option. Save it if we $PERMUTE and don't have a <>.
+ elsif ( $order == $PERMUTE ) {
+ # Try non-options call-back.
+ my $cb;
+ if ( (defined ($cb = $linkage{'<>'})) ) {
+ print STDERR ("=> &L{$tryopt}(\"$tryopt\")\n")
+ if $debug;
+ my $eval_error = do {
+ local $@;
+ local $SIG{__DIE__} = '__DEFAULT__';
+ eval { &$cb ($tryopt) };
+ $@;
+ };
+ print STDERR ("=> die($eval_error)\n")
+ if $debug && $eval_error ne '';
+ if ( $eval_error =~ /^!/ ) {
+ if ( $eval_error =~ /^!FINISH\b/ ) {
+ $goon = 0;
+ }
+ }
+ elsif ( $eval_error ne '' ) {
+ warn ($eval_error);
+ $error++;
+ }
+ }
+ else {
+ print STDERR ("=> saving \"$tryopt\" ",
+ "(not an option, may permute)\n") if $debug;
+ push (@ret, $tryopt);
+ }
+ next;
+ }
+
+ # ...otherwise, terminate.
+ else {
+ # Push this one back and exit.
+ unshift (@ARGV, $tryopt);
+ return ($error == 0);
+ }
+
+ }
+
+ # Finish.
+ if ( @ret && $order == $PERMUTE ) {
+ # Push back accumulated arguments
+ print STDERR ("=> restoring \"", join('" "', @ret), "\"\n")
+ if $debug;
+ unshift (@ARGV, @ret);
+ }
+
+ return ($error == 0);
+}
+
+# A readable representation of what's in an optbl.
+sub OptCtl ($) {
+ my ($v) = @_;
+ my @v = map { defined($_) ? ($_) : ("<undef>") } @$v;
+ "[".
+ join(",",
+ "\"$v[CTL_TYPE]\"",
+ "\"$v[CTL_CNAME]\"",
+ $v[CTL_MAND] ? "O" : "M",
+ ("\$","\@","\%","\&")[$v[CTL_DEST] || 0],
+ "\"$v[CTL_DEFAULT]\"",
+# $v[CTL_RANGE] || '',
+# $v[CTL_REPEAT] || '',
+ ). "]";
+}
+
+# Parse an option specification and fill the tables.
+sub ParseOptionSpec ($$) {
+ my ($opt, $opctl) = @_;
+
+ # Match option spec.
+ if ( $opt !~ m;^
+ (
+ # Option name
+ (?: \w+[-\w]* )
+ # Alias names, or "?"
+ (?: \| (?: \? | \w[-\w]* )? )*
+ )?
+ (
+ # Either modifiers ...
+ [!+]
+ |
+ # ... or a value/dest specification
+ [=:] [ionfs] [@%]?
+ |
+ # ... or an optional-with-default spec
+ : (?: -?\d+ | \+ ) [@%]?
+ )?
+ $;x ) {
+ return (undef, "Error in option spec: \"$opt\"\n");
+ }
+
+ my ($names, $spec) = ($1, $2);
+ $spec = '' unless defined $spec;
+
+ # $orig keeps track of the primary name the user specified.
+ # This name will be used for the internal or external linkage.
+ # In other words, if the user specifies "FoO|BaR", it will
+ # match any case combinations of 'foo' and 'bar', but if a global
+ # variable needs to be set, it will be $opt_FoO in the exact case
+ # as specified.
+ my $orig;
+
+ my @names;
+ if ( defined $names ) {
+ @names = split (/\|/, $names);
+ $orig = $names[0];
+ }
+ else {
+ @names = ('');
+ $orig = '';
+ }
+
+ # Construct the opctl entries.
+ my $entry;
+ if ( $spec eq '' || $spec eq '+' || $spec eq '!' ) {
+ # Fields are hard-wired here.
+ $entry = [$spec,$orig,0,CTL_DEST_SCALAR,undef];
+ }
+ elsif ( $spec =~ /:(-?\d+|\+)([@%])?/ ) {
+ my $def = $1;
+ my $dest = $2;
+ my $type = $def eq '+' ? 'I' : 'i';
+ $dest ||= '$';
+ $dest = $dest eq '@' ? CTL_DEST_ARRAY
+ : $dest eq '%' ? CTL_DEST_HASH : CTL_DEST_SCALAR;
+ # Fields are hard-wired here.
+ $entry = [$type,$orig,0,$dest,$def eq '+' ? undef : $def];
+ }
+ else {
+ my ($mand, $type, $dest) = $spec =~ /([=:])([ionfs])([@%])?/;
+ $type = 'i' if $type eq 'n';
+ $dest ||= '$';
+ $dest = $dest eq '@' ? CTL_DEST_ARRAY
+ : $dest eq '%' ? CTL_DEST_HASH : CTL_DEST_SCALAR;
+ # Fields are hard-wired here.
+ $entry = [$type,$orig,$mand eq '=',$dest,undef];
+ }
+
+ # Process all names. First is canonical, the rest are aliases.
+ my $dups = '';
+ foreach ( @names ) {
+
+ $_ = lc ($_)
+ if $ignorecase > (($bundling && length($_) == 1) ? 1 : 0);
+
+ if ( exists $opctl->{$_} ) {
+ $dups .= "Duplicate specification \"$opt\" for option \"$_\"\n";
+ }
+
+ if ( $spec eq '!' ) {
+ $opctl->{"no$_"} = $entry;
+ $opctl->{$_} = [@$entry];
+ $opctl->{$_}->[CTL_TYPE] = '';
+ }
+ else {
+ $opctl->{$_} = $entry;
+ }
+ }
+
+ if ( $dups && $^W ) {
+ foreach ( split(/\n+/, $dups) ) {
+ warn($_."\n");
+ }
+ }
+ ($names[0], $orig);
+}
+
+# Option lookup.
+sub FindOption ($$$$) {
+
+ # returns (1, $opt, $ctl, $arg, $key) if okay,
+ # returns (1, undef) if option in error,
+ # returns (0) otherwise.
+
+ my ($prefix, $argend, $opt, $opctl) = @_;
+
+ print STDERR ("=> find \"$opt\"\n") if $debug;
+
+ return (0) unless $opt =~ /^$prefix(.*)$/s;
+ return (0) if $opt eq "-" && !defined $opctl->{''};
+
+ $opt = $+;
+ my $starter = $1;
+
+ print STDERR ("=> split \"$starter\"+\"$opt\"\n") if $debug;
+
+ my $optarg; # value supplied with --opt=value
+ my $rest; # remainder from unbundling
+
+ # If it is a long option, it may include the value.
+ # With getopt_compat, only if not bundling.
+ if ( ($starter eq "--"
+ || ($getopt_compat && ($bundling == 0 || $bundling == 2)))
+ && $opt =~ /^([^=]+)=(.*)$/s ) {
+ $opt = $1;
+ $optarg = $2;
+ print STDERR ("=> option \"", $opt,
+ "\", optarg = \"$optarg\"\n") if $debug;
+ }
+
+ #### Look it up ###
+
+ my $tryopt = $opt; # option to try
+
+ if ( $bundling && $starter eq '-' ) {
+
+ # To try overrides, obey case ignore.
+ $tryopt = $ignorecase ? lc($opt) : $opt;
+
+ # If bundling == 2, long options can override bundles.
+ if ( $bundling == 2 && length($tryopt) > 1
+ && defined ($opctl->{$tryopt}) ) {
+ print STDERR ("=> $starter$tryopt overrides unbundling\n")
+ if $debug;
+ }
+ else {
+ $tryopt = $opt;
+ # Unbundle single letter option.
+ $rest = length ($tryopt) > 0 ? substr ($tryopt, 1) : '';
+ $tryopt = substr ($tryopt, 0, 1);
+ $tryopt = lc ($tryopt) if $ignorecase > 1;
+ print STDERR ("=> $starter$tryopt unbundled from ",
+ "$starter$tryopt$rest\n") if $debug;
+ $rest = undef unless $rest ne '';
+ }
+ }
+
+ # Try auto-abbreviation.
+ elsif ( $autoabbrev ) {
+ # Sort the possible long option names.
+ my @names = sort(keys (%$opctl));
+ # Downcase if allowed.
+ $opt = lc ($opt) if $ignorecase;
+ $tryopt = $opt;
+ # Turn option name into pattern.
+ my $pat = quotemeta ($opt);
+ # Look up in option names.
+ my @hits = grep (/^$pat/, @names);
+ print STDERR ("=> ", scalar(@hits), " hits (@hits) with \"$pat\" ",
+ "out of ", scalar(@names), "\n") if $debug;
+
+ # Check for ambiguous results.
+ unless ( (@hits <= 1) || (grep ($_ eq $opt, @hits) == 1) ) {
+ # See if all matches are for the same option.
+ my %hit;
+ foreach ( @hits ) {
+ $_ = $opctl->{$_}->[CTL_CNAME]
+ if defined $opctl->{$_}->[CTL_CNAME];
+ $hit{$_} = 1;
+ }
+ # Now see if it really is ambiguous.
+ unless ( keys(%hit) == 1 ) {
+ return (0) if $passthrough;
+ warn ("Option ", $opt, " is ambiguous (",
+ join(", ", @hits), ")\n");
+ $error++;
+ return (1, undef);
+ }
+ @hits = keys(%hit);
+ }
+
+ # Complete the option name, if appropriate.
+ if ( @hits == 1 && $hits[0] ne $opt ) {
+ $tryopt = $hits[0];
+ $tryopt = lc ($tryopt) if $ignorecase;
+ print STDERR ("=> option \"$opt\" -> \"$tryopt\"\n")
+ if $debug;
+ }
+ }
+
+ # Map to all lowercase if ignoring case.
+ elsif ( $ignorecase ) {
+ $tryopt = lc ($opt);
+ }
+
+ # Check validity by fetching the info.
+ my $ctl = $opctl->{$tryopt};
+ unless ( defined $ctl ) {
+ return (0) if $passthrough;
+ warn ("Unknown option: ", $opt, "\n");
+ $error++;
+ return (1, undef);
+ }
+ # Apparently valid.
+ $opt = $tryopt;
+ print STDERR ("=> found ", OptCtl($ctl),
+ " for \"", $opt, "\"\n") if $debug;
+
+ #### Determine argument status ####
+
+ # If it is an option w/o argument, we're almost finished with it.
+ my $type = $ctl->[CTL_TYPE];
+ my $arg;
+
+ if ( $type eq '' || $type eq '!' || $type eq '+' ) {
+ if ( defined $optarg ) {
+ return (0) if $passthrough;
+ warn ("Option ", $opt, " does not take an argument\n");
+ $error++;
+ undef $opt;
+ }
+ elsif ( $type eq '' || $type eq '+' ) {
+ # Supply explicit value.
+ $arg = 1;
+ }
+ else {
+ $opt =~ s/^no//i; # strip NO prefix
+ $arg = 0; # supply explicit value
+ }
+ unshift (@ARGV, $starter.$rest) if defined $rest;
+ return (1, $opt, $ctl, $arg);
+ }
+
+ # Get mandatory status and type info.
+ my $mand = $ctl->[CTL_MAND];
+
+ # Check if there is an option argument available.
+ if ( $gnu_compat && defined $optarg && $optarg eq '' ) {
+ return (1, $opt, $ctl, $type eq 's' ? '' : 0) unless $mand;
+ $optarg = 0 unless $type eq 's';
+ }
+
+ # Check if there is an option argument available.
+ if ( defined $optarg
+ ? ($optarg eq '')
+ : !(defined $rest || @ARGV > 0) ) {
+ # Complain if this option needs an argument.
+ if ( $mand ) {
+ return (0) if $passthrough;
+ warn ("Option ", $opt, " requires an argument\n");
+ $error++;
+ return (1, undef);
+ }
+ if ( $type eq 'I' ) {
+ # Fake incremental type.
+ my @c = @$ctl;
+ $c[CTL_TYPE] = '+';
+ return (1, $opt, \@c, 1);
+ }
+ return (1, $opt, $ctl,
+ defined($ctl->[CTL_DEFAULT]) ? $ctl->[CTL_DEFAULT] :
+ $type eq 's' ? '' : 0);
+ }
+
+ # Get (possibly optional) argument.
+ $arg = (defined $rest ? $rest
+ : (defined $optarg ? $optarg : shift (@ARGV)));
+
+ # Get key if this is a "name=value" pair for a hash option.
+ my $key;
+ if ($ctl->[CTL_DEST] == CTL_DEST_HASH && defined $arg) {
+ ($key, $arg) = ($arg =~ /^([^=]*)=(.*)$/s) ? ($1, $2)
+ : ($arg, defined($ctl->[CTL_DEFAULT]) ? $ctl->[CTL_DEFAULT] : 1);
+ }
+
+ #### Check if the argument is valid for this option ####
+
+ if ( $type eq 's' ) { # string
+ # A mandatory string takes anything.
+ return (1, $opt, $ctl, $arg, $key) if $mand;
+
+ # An optional string takes almost anything.
+ return (1, $opt, $ctl, $arg, $key)
+ if defined $optarg || defined $rest;
+ return (1, $opt, $ctl, $arg, $key) if $arg eq "-"; # ??
+
+ # Check for option or option list terminator.
+ if ($arg eq $argend ||
+ $arg =~ /^$prefix.+/) {
+ # Push back.
+ unshift (@ARGV, $arg);
+ # Supply empty value.
+ $arg = '';
+ }
+ }
+
+ elsif ( $type eq 'i' # numeric/integer
+ || $type eq 'I' # numeric/integer w/ incr default
+ || $type eq 'o' ) { # dec/oct/hex/bin value
+
+ my $o_valid =
+ $type eq 'o' ? "[-+]?[1-9][0-9]*|0x[0-9a-f]+|0b[01]+|0[0-7]*"
+ : "[-+]?[0-9]+";
+
+ if ( $bundling && defined $rest && $rest =~ /^($o_valid)(.*)$/si ) {
+ $arg = $1;
+ $rest = $2;
+ $arg = ($type eq 'o' && $arg =~ /^0/) ? oct($arg) : 0+$arg;
+ unshift (@ARGV, $starter.$rest) if defined $rest && $rest ne '';
+ }
+ elsif ( $arg =~ /^($o_valid)$/si ) {
+ $arg = ($type eq 'o' && $arg =~ /^0/) ? oct($arg) : 0+$arg;
+ }
+ else {
+ if ( defined $optarg || $mand ) {
+ if ( $passthrough ) {
+ unshift (@ARGV, defined $rest ? $starter.$rest : $arg)
+ unless defined $optarg;
+ return (0);
+ }
+ warn ("Value \"", $arg, "\" invalid for option ",
+ $opt, " (",
+ $type eq 'o' ? "extended " : '',
+ "number expected)\n");
+ $error++;
+ # Push back.
+ unshift (@ARGV, $starter.$rest) if defined $rest;
+ return (1, undef);
+ }
+ else {
+ # Push back.
+ unshift (@ARGV, defined $rest ? $starter.$rest : $arg);
+ if ( $type eq 'I' ) {
+ # Fake incremental type.
+ my @c = @$ctl;
+ $c[CTL_TYPE] = '+';
+ return (1, $opt, \@c, 1);
+ }
+ # Supply default value.
+ $arg = defined($ctl->[CTL_DEFAULT]) ? $ctl->[CTL_DEFAULT] : 0;
+ }
+ }
+ }
+
+ elsif ( $type eq 'f' ) { # real number, int is also ok
+ # We require at least one digit before a point or 'e',
+ # and at least one digit following the point and 'e'.
+ # [-]NN[.NN][eNN]
+ if ( $bundling && defined $rest &&
+ $rest =~ /^([-+]?[0-9]+(\.[0-9]+)?([eE][-+]?[0-9]+)?)(.*)$/s ) {
+ $arg = $1;
+ $rest = $+;
+ unshift (@ARGV, $starter.$rest) if defined $rest && $rest ne '';
+ }
+ elsif ( $arg !~ /^[-+]?[0-9.]+(\.[0-9]+)?([eE][-+]?[0-9]+)?$/ ) {
+ if ( defined $optarg || $mand ) {
+ if ( $passthrough ) {
+ unshift (@ARGV, defined $rest ? $starter.$rest : $arg)
+ unless defined $optarg;
+ return (0);
+ }
+ warn ("Value \"", $arg, "\" invalid for option ",
+ $opt, " (real number expected)\n");
+ $error++;
+ # Push back.
+ unshift (@ARGV, $starter.$rest) if defined $rest;
+ return (1, undef);
+ }
+ else {
+ # Push back.
+ unshift (@ARGV, defined $rest ? $starter.$rest : $arg);
+ # Supply default value.
+ $arg = 0.0;
+ }
+ }
+ }
+ else {
+ die("GetOpt::Long internal error (Can't happen)\n");
+ }
+ return (1, $opt, $ctl, $arg, $key);
+}
+
+# Getopt::Long Configuration.
+sub Configure (@) {
+ my (@options) = @_;
+
+ my $prevconfig =
+ [ $error, $debug, $major_version, $minor_version,
+ $autoabbrev, $getopt_compat, $ignorecase, $bundling, $order,
+ $gnu_compat, $passthrough, $genprefix ];
+
+ if ( ref($options[0]) eq 'ARRAY' ) {
+ ( $error, $debug, $major_version, $minor_version,
+ $autoabbrev, $getopt_compat, $ignorecase, $bundling, $order,
+ $gnu_compat, $passthrough, $genprefix ) = @{shift(@options)};
+ }
+
+ my $opt;
+ foreach $opt ( @options ) {
+ my $try = lc ($opt);
+ my $action = 1;
+ if ( $try =~ /^no_?(.*)$/s ) {
+ $action = 0;
+ $try = $+;
+ }
+ if ( ($try eq 'default' or $try eq 'defaults') && $action ) {
+ ConfigDefaults ();
+ }
+ elsif ( ($try eq 'posix_default' or $try eq 'posix_defaults') ) {
+ local $ENV{POSIXLY_CORRECT};
+ $ENV{POSIXLY_CORRECT} = 1 if $action;
+ ConfigDefaults ();
+ }
+ elsif ( $try eq 'auto_abbrev' or $try eq 'autoabbrev' ) {
+ $autoabbrev = $action;
+ }
+ elsif ( $try eq 'getopt_compat' ) {
+ $getopt_compat = $action;
+ }
+ elsif ( $try eq 'gnu_getopt' ) {
+ if ( $action ) {
+ $gnu_compat = 1;
+ $bundling = 1;
+ $getopt_compat = 0;
+ $order = $PERMUTE;
+ }
+ }
+ elsif ( $try eq 'gnu_compat' ) {
+ $gnu_compat = $action;
+ }
+ elsif ( $try eq 'ignorecase' or $try eq 'ignore_case' ) {
+ $ignorecase = $action;
+ }
+ elsif ( $try eq 'ignore_case_always' ) {
+ $ignorecase = $action ? 2 : 0;
+ }
+ elsif ( $try eq 'bundling' ) {
+ $bundling = $action;
+ }
+ elsif ( $try eq 'bundling_override' ) {
+ $bundling = $action ? 2 : 0;
+ }
+ elsif ( $try eq 'require_order' ) {
+ $order = $action ? $REQUIRE_ORDER : $PERMUTE;
+ }
+ elsif ( $try eq 'permute' ) {
+ $order = $action ? $PERMUTE : $REQUIRE_ORDER;
+ }
+ elsif ( $try eq 'pass_through' or $try eq 'passthrough' ) {
+ $passthrough = $action;
+ }
+ elsif ( $try =~ /^prefix=(.+)$/ && $action ) {
+ $genprefix = $1;
+ # Turn into regexp. Needs to be parenthesized!
+ $genprefix = "(" . quotemeta($genprefix) . ")";
+ eval { '' =~ /$genprefix/; };
+ die("Getopt::Long: invalid pattern \"$genprefix\"") if $@;
+ }
+ elsif ( $try =~ /^prefix_pattern=(.+)$/ && $action ) {
+ $genprefix = $1;
+ # Parenthesize if needed.
+ $genprefix = "(" . $genprefix . ")"
+ unless $genprefix =~ /^\(.*\)$/;
+ eval { '' =~ /$genprefix/; };
+ die("Getopt::Long: invalid pattern \"$genprefix\"") if $@;
+ }
+ elsif ( $try eq 'debug' ) {
+ $debug = $action;
+ }
+ else {
+ die("Getopt::Long: unknown config parameter \"$opt\"")
+ }
+ }
+ $prevconfig;
+}
+
+# Deprecated name.
+sub config (@) {
+ Configure (@_);
+}
+
+################ Documentation ################
+
+=head1 NAME
+
+Getopt::Long - Extended processing of command line options
+
+=head1 SYNOPSIS
+
+ use Getopt::Long;
+ my $data = "file.dat";
+ my $length = 24;
+ my $verbose;
+ $result = GetOptions ("length=i" => \$length, # numeric
+ "file=s" => \$data, # string
+ "verbose" => \$verbose); # flag
+
+=head1 DESCRIPTION
+
+The Getopt::Long module implements an extended getopt function called
+GetOptions(). This function adheres to the POSIX syntax for command
+line options, with GNU extensions. In general, this means that options
+have long names instead of single letters, and are introduced with a
+double dash "--". Support for bundling of command line options, as was
+the case with the more traditional single-letter approach, is provided
+but not enabled by default.
+
+=head1 Command Line Options, an Introduction
+
+Command line operated programs traditionally take their arguments from
+the command line, for example filenames or other information that the
+program needs to know. Besides arguments, these programs often take
+command line I<options> as well. Options are not necessary for the
+program to work, hence the name 'option', but are used to modify its
+default behaviour. For example, a program could do its job quietly,
+but with a suitable option it could provide verbose information about
+what it did.
+
+Command line options come in several flavours. Historically, they are
+preceded by a single dash C<->, and consist of a single letter.
+
+ -l -a -c
+
+Usually, these single-character options can be bundled:
+
+ -lac
+
+Options can have values, the value is placed after the option
+character. Sometimes with whitespace in between, sometimes not:
+
+ -s 24 -s24
+
+Due to the very cryptic nature of these options, another style was
+developed that used long names. So instead of a cryptic C<-l> one
+could use the more descriptive C<--long>. To distinguish between a
+bundle of single-character options and a long one, two dashes are used
+to precede the option name. Early implementations of long options used
+a plus C<+> instead. Also, option values could be specified either
+like
+
+ --size=24
+
+or
+
+ --size 24
+
+The C<+> form is now obsolete and strongly deprecated.
+
+=head1 Getting Started with Getopt::Long
+
+Getopt::Long is the Perl5 successor of C<newgetopt.pl>. This was
+the first Perl module that provided support for handling the new style
+of command line options, hence the name Getopt::Long. This module
+also supports single-character options and bundling. In this case, the
+options are restricted to alphabetic characters only, and the
+characters C<?> and C<->.
+
+To use Getopt::Long from a Perl program, you must include the
+following line in your Perl program:
+
+ use Getopt::Long;
+
+This will load the core of the Getopt::Long module and prepare your
+program for using it. Most of the actual Getopt::Long code is not
+loaded until you really call one of its functions.
+
+In the default configuration, options names may be abbreviated to
+uniqueness, case does not matter, and a single dash is sufficient,
+even for long option names. Also, options may be placed between
+non-option arguments. See L<Configuring Getopt::Long> for more
+details on how to configure Getopt::Long.
+
+=head2 Simple options
+
+The most simple options are the ones that take no values. Their mere
+presence on the command line enables the option. Popular examples are:
+
+ --all --verbose --quiet --debug
+
+Handling simple options is straightforward:
+
+ my $verbose = ''; # option variable with default value (false)
+ my $all = ''; # option variable with default value (false)
+ GetOptions ('verbose' => \$verbose, 'all' => \$all);
+
+The call to GetOptions() parses the command line arguments that are
+present in C<@ARGV> and sets the option variable to the value C<1> if
+the option did occur on the command line. Otherwise, the option
+variable is not touched. Setting the option value to true is often
+called I<enabling> the option.
+
+The option name as specified to the GetOptions() function is called
+the option I<specification>. Later we'll see that this specification
+can contain more than just the option name. The reference to the
+variable is called the option I<destination>.
+
+GetOptions() will return a true value if the command line could be
+processed successfully. Otherwise, it will write error messages to
+STDERR, and return a false result.
+
+=head2 A little bit less simple options
+
+Getopt::Long supports two useful variants of simple options:
+I<negatable> options and I<incremental> options.
+
+A negatable option is specified with an exclamation mark C<!> after the
+option name:
+
+ my $verbose = ''; # option variable with default value (false)
+ GetOptions ('verbose!' => \$verbose);
+
+Now, using C<--verbose> on the command line will enable C<$verbose>,
+as expected. But it is also allowed to use C<--noverbose>, which will
+disable C<$verbose> by setting its value to C<0>. Using a suitable
+default value, the program can find out whether C<$verbose> is false
+by default, or disabled by using C<--noverbose>.
+
+An incremental option is specified with a plus C<+> after the
+option name:
+
+ my $verbose = ''; # option variable with default value (false)
+ GetOptions ('verbose+' => \$verbose);
+
+Using C<--verbose> on the command line will increment the value of
+C<$verbose>. This way the program can keep track of how many times the
+option occurred on the command line. For example, each occurrence of
+C<--verbose> could increase the verbosity level of the program.
+
+=head2 Mixing command line option with other arguments
+
+Usually programs take command line options as well as other arguments,
+for example, file names. It is good practice to always specify the
+options first, and the other arguments last. Getopt::Long will,
+however, allow the options and arguments to be mixed and 'filter out'
+all the options before passing the rest of the arguments to the
+program. To stop Getopt::Long from processing further arguments,
+insert a double dash C<--> on the command line:
+
+ --size 24 -- --all
+
+In this example, C<--all> will I<not> be treated as an option, but
+passed to the program unharmed, in C<@ARGV>.
+
+=head2 Options with values
+
+For options that take values it must be specified whether the option
+value is required or not, and what kind of value the option expects.
+
+Three kinds of values are supported: integer numbers, floating point
+numbers, and strings.
+
+If the option value is required, Getopt::Long will take the
+command line argument that follows the option and assign this to the
+option variable. If, however, the option value is specified as
+optional, this will only be done if that value does not look like a
+valid command line option itself.
+
+ my $tag = ''; # option variable with default value
+ GetOptions ('tag=s' => \$tag);
+
+In the option specification, the option name is followed by an equals
+sign C<=> and the letter C<s>. The equals sign indicates that this
+option requires a value. The letter C<s> indicates that this value is
+an arbitrary string. Other possible value types are C<i> for integer
+values, and C<f> for floating point values. Using a colon C<:> instead
+of the equals sign indicates that the option value is optional. In
+this case, if no suitable value is supplied, string valued options get
+an empty string C<''> assigned, while numeric options are set to C<0>.
+
+=head2 Options with multiple values
+
+Options sometimes take several values. For example, a program could
+use multiple directories to search for library files:
+
+ --library lib/stdlib --library lib/extlib
+
+To accomplish this behaviour, simply specify an array reference as the
+destination for the option:
+
+ my @libfiles = ();
+ GetOptions ("library=s" => \@libfiles);
+
+Used with the example above, C<@libfiles> would contain two strings
+upon completion: C<"lib/srdlib"> and C<"lib/extlib">, in that order.
+It is also possible to specify that only integer or floating point
+numbers are acceptible values.
+
+Often it is useful to allow comma-separated lists of values as well as
+multiple occurrences of the options. This is easy using Perl's split()
+and join() operators:
+
+ my @libfiles = ();
+ GetOptions ("library=s" => \@libfiles);
+ @libfiles = split(/,/,join(',',@libfiles));
+
+Of course, it is important to choose the right separator string for
+each purpose.
+
+=head2 Options with hash values
+
+If the option destination is a reference to a hash, the option will
+take, as value, strings of the form I<key>C<=>I<value>. The value will
+be stored with the specified key in the hash.
+
+ my %defines = ();
+ GetOptions ("define=s" => \%defines);
+
+When used with command line options:
+
+ --define os=linux --define vendor=redhat
+
+the hash C<%defines> will contain two keys, C<"os"> with value
+C<"linux> and C<"vendor"> with value C<"redhat">.
+It is also possible to specify that only integer or floating point
+numbers are acceptible values. The keys are always taken to be strings.
+
+=head2 User-defined subroutines to handle options
+
+Ultimate control over what should be done when (actually: each time)
+an option is encountered on the command line can be achieved by
+designating a reference to a subroutine (or an anonymous subroutine)
+as the option destination. When GetOptions() encounters the option, it
+will call the subroutine with two or three arguments. The first
+argument is the name of the option. For a scalar or array destination,
+the second argument is the value to be stored. For a hash destination,
+the second arguments is the key to the hash, and the third argument
+the value to be stored. It is up to the subroutine to store the value,
+or do whatever it thinks is appropriate.
+
+A trivial application of this mechanism is to implement options that
+are related to each other. For example:
+
+ my $verbose = ''; # option variable with default value (false)
+ GetOptions ('verbose' => \$verbose,
+ 'quiet' => sub { $verbose = 0 });
+
+Here C<--verbose> and C<--quiet> control the same variable
+C<$verbose>, but with opposite values.
+
+If the subroutine needs to signal an error, it should call die() with
+the desired error message as its argument. GetOptions() will catch the
+die(), issue the error message, and record that an error result must
+be returned upon completion.
+
+If the text of the error message starts with an exclamantion mark C<!>
+it is interpreted specially by GetOptions(). There is currently one
+special command implemented: C<die("!FINISH")> will cause GetOptions()
+to stop processing options, as if it encountered a double dash C<-->.
+
+=head2 Options with multiple names
+
+Often it is user friendly to supply alternate mnemonic names for
+options. For example C<--height> could be an alternate name for
+C<--length>. Alternate names can be included in the option
+specification, separated by vertical bar C<|> characters. To implement
+the above example:
+
+ GetOptions ('length|height=f' => \$length);
+
+The first name is called the I<primary> name, the other names are
+called I<aliases>.
+
+Multiple alternate names are possible.
+
+=head2 Case and abbreviations
+
+Without additional configuration, GetOptions() will ignore the case of
+option names, and allow the options to be abbreviated to uniqueness.
+
+ GetOptions ('length|height=f' => \$length, "head" => \$head);
+
+This call will allow C<--l> and C<--L> for the length option, but
+requires a least C<--hea> and C<--hei> for the head and height options.
+
+=head2 Summary of Option Specifications
+
+Each option specifier consists of two parts: the name specification
+and the argument specification.
+
+The name specification contains the name of the option, optionally
+followed by a list of alternative names separated by vertical bar
+characters.
+
+ length option name is "length"
+ length|size|l name is "length", aliases are "size" and "l"
+
+The argument specification is optional. If omitted, the option is
+considered boolean, a value of 1 will be assigned when the option is
+used on the command line.
+
+The argument specification can be
+
+=over 4
+
+=item !
+
+The option does not take an argument and may be negated, i.e. prefixed
+by "no". E.g. C<"foo!"> will allow C<--foo> (a value of 1 will be
+assigned) and C<--nofoo> (a value of 0 will be assigned). If the
+option has aliases, this applies to the aliases as well.
+
+Using negation on a single letter option when bundling is in effect is
+pointless and will result in a warning.
+
+=item +
+
+The option does not take an argument and will be incremented by 1
+every time it appears on the command line. E.g. C<"more+">, when used
+with C<--more --more --more>, will increment the value three times,
+resulting in a value of 3 (provided it was 0 or undefined at first).
+
+The C<+> specifier is ignored if the option destination is not a scalar.
+
+=item = I<type> [ I<desttype> ]
+
+The option requires an argument of the given type. Supported types
+are:
+
+=over 4
+
+=item s
+
+String. An arbitrary sequence of characters. It is valid for the
+argument to start with C<-> or C<-->.
+
+=item i
+
+Integer. An optional leading plus or minus sign, followed by a
+sequence of digits.
+
+=item o
+
+Extended integer, Perl style. This can be either an optional leading
+plus or minus sign, followed by a sequence of digits, or an octal
+string (a zero, optionally followed by '0', '1', .. '7'), or a
+hexadecimal string (C<0x> followed by '0' .. '9', 'a' .. 'f', case
+insensitive), or a binary string (C<0b> followed by a series of '0'
+and '1').
+
+=item f
+
+Real number. For example C<3.14>, C<-6.23E24> and so on.
+
+=back
+
+The I<desttype> can be C<@> or C<%> to specify that the option is
+list or a hash valued. This is only needed when the destination for
+the option value is not otherwise specified. It should be omitted when
+not needed.
+
+=item : I<type> [ I<desttype> ]
+
+Like C<=>, but designates the argument as optional.
+If omitted, an empty string will be assigned to string values options,
+and the value zero to numeric options.
+
+Note that if a string argument starts with C<-> or C<-->, it will be
+considered an option on itself.
+
+=item : I<number> [ I<desttype> ]
+
+Like C<:i>, but if the value is omitted, the I<number> will be assigned.
+
+=item : + [ I<desttype> ]
+
+Like C<:i>, but if the value is omitted, the current value for the
+option will be incremented.
+
+=back
+
+=head1 Advanced Possibilities
+
+=head2 Object oriented interface
+
+Getopt::Long can be used in an object oriented way as well:
+
+ use Getopt::Long;
+ $p = new Getopt::Long::Parser;
+ $p->configure(...configuration options...);
+ if ($p->getoptions(...options descriptions...)) ...
+
+Configuration options can be passed to the constructor:
+
+ $p = new Getopt::Long::Parser
+ config => [...configuration options...];
+
+=head2 Thread Safety
+
+Getopt::Long is thread safe when using ithreads as of Perl 5.8. It is
+I<not> thread safe when using the older (experimental and now
+obsolete) threads implementation that was added to Perl 5.005.
+
+=head2 Documentation and help texts
+
+Getopt::Long encourages the use of Pod::Usage to produce help
+messages. For example:
+
+ use Getopt::Long;
+ use Pod::Usage;
+
+ my $man = 0;
+ my $help = 0;
+
+ GetOptions('help|?' => \$help, man => \$man) or pod2usage(2);
+ pod2usage(1) if $help;
+ pod2usage(-exitstatus => 0, -verbose => 2) if $man;
+
+ __END__
+
+ =head1 NAME
+
+ sample - Using GetOpt::Long and Pod::Usage
+
+ =head1 SYNOPSIS
+
+ sample [options] [file ...]
+
+ Options:
+ -help brief help message
+ -man full documentation
+
+ =head1 OPTIONS
+
+ =over 8
+
+ =item B<-help>
+
+ Print a brief help message and exits.
+
+ =item B<-man>
+
+ Prints the manual page and exits.
+
+ =back
+
+ =head1 DESCRIPTION
+
+ B<This program> will read the given input file(s) and do someting
+ useful with the contents thereof.
+
+ =cut
+
+See L<Pod::Usage> for details.
+
+=head2 Storing options in a hash
+
+Sometimes, for example when there are a lot of options, having a
+separate variable for each of them can be cumbersome. GetOptions()
+supports, as an alternative mechanism, storing options in a hash.
+
+To obtain this, a reference to a hash must be passed I<as the first
+argument> to GetOptions(). For each option that is specified on the
+command line, the option value will be stored in the hash with the
+option name as key. Options that are not actually used on the command
+line will not be put in the hash, on other words,
+C<exists($h{option})> (or defined()) can be used to test if an option
+was used. The drawback is that warnings will be issued if the program
+runs under C<use strict> and uses C<$h{option}> without testing with
+exists() or defined() first.
+
+ my %h = ();
+ GetOptions (\%h, 'length=i'); # will store in $h{length}
+
+For options that take list or hash values, it is necessary to indicate
+this by appending an C<@> or C<%> sign after the type:
+
+ GetOptions (\%h, 'colours=s@'); # will push to @{$h{colours}}
+
+To make things more complicated, the hash may contain references to
+the actual destinations, for example:
+
+ my $len = 0;
+ my %h = ('length' => \$len);
+ GetOptions (\%h, 'length=i'); # will store in $len
+
+This example is fully equivalent with:
+
+ my $len = 0;
+ GetOptions ('length=i' => \$len); # will store in $len
+
+Any mixture is possible. For example, the most frequently used options
+could be stored in variables while all other options get stored in the
+hash:
+
+ my $verbose = 0; # frequently referred
+ my $debug = 0; # frequently referred
+ my %h = ('verbose' => \$verbose, 'debug' => \$debug);
+ GetOptions (\%h, 'verbose', 'debug', 'filter', 'size=i');
+ if ( $verbose ) { ... }
+ if ( exists $h{filter} ) { ... option 'filter' was specified ... }
+
+=head2 Bundling
+
+With bundling it is possible to set several single-character options
+at once. For example if C<a>, C<v> and C<x> are all valid options,
+
+ -vax
+
+would set all three.
+
+Getopt::Long supports two levels of bundling. To enable bundling, a
+call to Getopt::Long::Configure is required.
+
+The first level of bundling can be enabled with:
+
+ Getopt::Long::Configure ("bundling");
+
+Configured this way, single-character options can be bundled but long
+options B<must> always start with a double dash C<--> to avoid
+abiguity. For example, when C<vax>, C<a>, C<v> and C<x> are all valid
+options,
+
+ -vax
+
+would set C<a>, C<v> and C<x>, but
+
+ --vax
+
+would set C<vax>.
+
+The second level of bundling lifts this restriction. It can be enabled
+with:
+
+ Getopt::Long::Configure ("bundling_override");
+
+Now, C<-vax> would set the option C<vax>.
+
+When any level of bundling is enabled, option values may be inserted
+in the bundle. For example:
+
+ -h24w80
+
+is equivalent to
+
+ -h 24 -w 80
+
+When configured for bundling, single-character options are matched
+case sensitive while long options are matched case insensitive. To
+have the single-character options matched case insensitive as well,
+use:
+
+ Getopt::Long::Configure ("bundling", "ignorecase_always");
+
+It goes without saying that bundling can be quite confusing.
+
+=head2 The lonesome dash
+
+Normally, a lone dash C<-> on the command line will not be considered
+an option. Option processing will terminate (unless "permute" is
+configured) and the dash will be left in C<@ARGV>.
+
+It is possible to get special treatment for a lone dash. This can be
+achieved by adding an option specification with an empty name, for
+example:
+
+ GetOptions ('' => \$stdio);
+
+A lone dash on the command line will now be a legal option, and using
+it will set variable C<$stdio>.
+
+=head2 Argument callback
+
+A special option 'name' C<<>> can be used to designate a subroutine
+to handle non-option arguments. When GetOptions() encounters an
+argument that does not look like an option, it will immediately call this
+subroutine and passes it one parameter: the argument name.
+
+For example:
+
+ my $width = 80;
+ sub process { ... }
+ GetOptions ('width=i' => \$width, '<>' => \&process);
+
+When applied to the following command line:
+
+ arg1 --width=72 arg2 --width=60 arg3
+
+This will call
+C<process("arg1")> while C<$width> is C<80>,
+C<process("arg2")> while C<$width> is C<72>, and
+C<process("arg3")> while C<$width> is C<60>.
+
+This feature requires configuration option B<permute>, see section
+L<Configuring Getopt::Long>.
+
+
+=head1 Configuring Getopt::Long
+
+Getopt::Long can be configured by calling subroutine
+Getopt::Long::Configure(). This subroutine takes a list of quoted
+strings, each specifying a configuration option to be enabled, e.g.
+C<ignore_case>, or disabled, e.g. C<no_ignore_case>. Case does not
+matter. Multiple calls to Configure() are possible.
+
+Alternatively, as of version 2.24, the configuration options may be
+passed together with the C<use> statement:
+
+ use Getopt::Long qw(:config no_ignore_case bundling);
+
+The following options are available:
+
+=over 12
+
+=item default
+
+This option causes all configuration options to be reset to their
+default values.
+
+=item posix_default
+
+This option causes all configuration options to be reset to their
+default values as if the environment variable POSIXLY_CORRECT had
+been set.
+
+=item auto_abbrev
+
+Allow option names to be abbreviated to uniqueness.
+Default is enabled unless environment variable
+POSIXLY_CORRECT has been set, in which case C<auto_abbrev> is disabled.
+
+=item getopt_compat
+
+Allow C<+> to start options.
+Default is enabled unless environment variable
+POSIXLY_CORRECT has been set, in which case C<getopt_compat> is disabled.
+
+=item gnu_compat
+
+C<gnu_compat> controls whether C<--opt=> is allowed, and what it should
+do. Without C<gnu_compat>, C<--opt=> gives an error. With C<gnu_compat>,
+C<--opt=> will give option C<opt> and empty value.
+This is the way GNU getopt_long() does it.
+
+=item gnu_getopt
+
+This is a short way of setting C<gnu_compat> C<bundling> C<permute>
+C<no_getopt_compat>. With C<gnu_getopt>, command line handling should be
+fully compatible with GNU getopt_long().
+
+=item require_order
+
+Whether command line arguments are allowed to be mixed with options.
+Default is disabled unless environment variable
+POSIXLY_CORRECT has been set, in which case C<require_order> is enabled.
+
+See also C<permute>, which is the opposite of C<require_order>.
+
+=item permute
+
+Whether command line arguments are allowed to be mixed with options.
+Default is enabled unless environment variable
+POSIXLY_CORRECT has been set, in which case C<permute> is disabled.
+Note that C<permute> is the opposite of C<require_order>.
+
+If C<permute> is enabled, this means that
+
+ --foo arg1 --bar arg2 arg3
+
+is equivalent to
+
+ --foo --bar arg1 arg2 arg3
+
+If an argument callback routine is specified, C<@ARGV> will always be
+empty upon succesful return of GetOptions() since all options have been
+processed. The only exception is when C<--> is used:
+
+ --foo arg1 --bar arg2 -- arg3
+
+This will call the callback routine for arg1 and arg2, and then
+terminate GetOptions() leaving C<"arg2"> in C<@ARGV>.
+
+If C<require_order> is enabled, options processing
+terminates when the first non-option is encountered.
+
+ --foo arg1 --bar arg2 arg3
+
+is equivalent to
+
+ --foo -- arg1 --bar arg2 arg3
+
+If C<pass_through> is also enabled, options processing will terminate
+at the first unrecognized option, or non-option, whichever comes
+first.
+
+=item bundling (default: disabled)
+
+Enabling this option will allow single-character options to be
+bundled. To distinguish bundles from long option names, long options
+I<must> be introduced with C<--> and bundles with C<->.
+
+Note that, if you have options C<a>, C<l> and C<all>, and
+auto_abbrev enabled, possible arguments and option settings are:
+
+ using argument sets option(s)
+ ------------------------------------------
+ -a, --a a
+ -l, --l l
+ -al, -la, -ala, -all,... a, l
+ --al, --all all
+
+The suprising part is that C<--a> sets option C<a> (due to auto
+completion), not C<all>.
+
+Note: disabling C<bundling> also disables C<bundling_override>.
+
+=item bundling_override (default: disabled)
+
+If C<bundling_override> is enabled, bundling is enabled as with
+C<bundling> but now long option names override option bundles.
+
+Note: disabling C<bundling_override> also disables C<bundling>.
+
+B<Note:> Using option bundling can easily lead to unexpected results,
+especially when mixing long options and bundles. Caveat emptor.
+
+=item ignore_case (default: enabled)
+
+If enabled, case is ignored when matching long option names. If,
+however, bundling is enabled as well, single character options will be
+treated case-sensitive.
+
+With C<ignore_case>, option specifications for options that only
+differ in case, e.g., C<"foo"> and C<"Foo">, will be flagged as
+duplicates.
+
+Note: disabling C<ignore_case> also disables C<ignore_case_always>.
+
+=item ignore_case_always (default: disabled)
+
+When bundling is in effect, case is ignored on single-character
+options also.
+
+Note: disabling C<ignore_case_always> also disables C<ignore_case>.
+
+=item pass_through (default: disabled)
+
+Options that are unknown, ambiguous or supplied with an invalid option
+value are passed through in C<@ARGV> instead of being flagged as
+errors. This makes it possible to write wrapper scripts that process
+only part of the user supplied command line arguments, and pass the
+remaining options to some other program.
+
+If C<require_order> is enabled, options processing will terminate at
+the first unrecognized option, or non-option, whichever comes first.
+However, if C<permute> is enabled instead, results can become confusing.
+
+=item prefix
+
+The string that starts options. If a constant string is not
+sufficient, see C<prefix_pattern>.
+
+=item prefix_pattern
+
+A Perl pattern that identifies the strings that introduce options.
+Default is C<(--|-|\+)> unless environment variable
+POSIXLY_CORRECT has been set, in which case it is C<(--|-)>.
+
+=item debug (default: disabled)
+
+Enable debugging output.
+
+=back
+
+=head1 Return values and Errors
+
+Configuration errors and errors in the option definitions are
+signalled using die() and will terminate the calling program unless
+the call to Getopt::Long::GetOptions() was embedded in C<eval { ...
+}>, or die() was trapped using C<$SIG{__DIE__}>.
+
+GetOptions returns true to indicate success.
+It returns false when the function detected one or more errors during
+option parsing. These errors are signalled using warn() and can be
+trapped with C<$SIG{__WARN__}>.
+
+Errors that can't happen are signalled using Carp::croak().
+
+=head1 Legacy
+
+The earliest development of C<newgetopt.pl> started in 1990, with Perl
+version 4. As a result, its development, and the development of
+Getopt::Long, has gone through several stages. Since backward
+compatibility has always been extremely important, the current version
+of Getopt::Long still supports a lot of constructs that nowadays are
+no longer necessary or otherwise unwanted. This section describes
+briefly some of these 'features'.
+
+=head2 Default destinations
+
+When no destination is specified for an option, GetOptions will store
+the resultant value in a global variable named C<opt_>I<XXX>, where
+I<XXX> is the primary name of this option. When a progam executes
+under C<use strict> (recommended), these variables must be
+pre-declared with our() or C<use vars>.
+
+ our $opt_length = 0;
+ GetOptions ('length=i'); # will store in $opt_length
+
+To yield a usable Perl variable, characters that are not part of the
+syntax for variables are translated to underscores. For example,
+C<--fpp-struct-return> will set the variable
+C<$opt_fpp_struct_return>. Note that this variable resides in the
+namespace of the calling program, not necessarily C<main>. For
+example:
+
+ GetOptions ("size=i", "sizes=i@");
+
+with command line "-size 10 -sizes 24 -sizes 48" will perform the
+equivalent of the assignments
+
+ $opt_size = 10;
+ @opt_sizes = (24, 48);
+
+=head2 Alternative option starters
+
+A string of alternative option starter characters may be passed as the
+first argument (or the first argument after a leading hash reference
+argument).
+
+ my $len = 0;
+ GetOptions ('/', 'length=i' => $len);
+
+Now the command line may look like:
+
+ /length 24 -- arg
+
+Note that to terminate options processing still requires a double dash
+C<-->.
+
+GetOptions() will not interpret a leading C<< "<>" >> as option starters
+if the next argument is a reference. To force C<< "<" >> and C<< ">" >> as
+option starters, use C<< "><" >>. Confusing? Well, B<using a starter
+argument is strongly deprecated> anyway.
+
+=head2 Configuration variables
+
+Previous versions of Getopt::Long used variables for the purpose of
+configuring. Although manipulating these variables still work, it is
+strongly encouraged to use the C<Configure> routine that was introduced
+in version 2.17. Besides, it is much easier.
+
+=head1 Trouble Shooting
+
+=head2 Warning: Ignoring '!' modifier for short option
+
+This warning is issued when the '!' modifier is applied to a short
+(one-character) option and bundling is in effect. E.g.,
+
+ Getopt::Long::Configure("bundling");
+ GetOptions("foo|f!" => \$foo);
+
+Note that older Getopt::Long versions did not issue a warning, because
+the '!' modifier was applied to the first name only. This bug was
+fixed in 2.22.
+
+Solution: separate the long and short names and apply the '!' to the
+long names only, e.g.,
+
+ GetOptions("foo!" => \$foo, "f" => \$foo);
+
+=head2 GetOptions does not return a false result when an option is not supplied
+
+That's why they're called 'options'.
+
+=head2 GetOptions does not split the command line correctly
+
+The command line is not split by GetOptions, but by the command line
+interpreter (CLI). On Unix, this is the shell. On Windows, it is
+COMMAND.COM or CMD.EXE. Other operating systems have other CLIs.
+
+It is important to know that these CLIs may behave different when the
+command line contains special characters, in particular quotes or
+backslashes. For example, with Unix shells you can use single quotes
+(C<'>) and double quotes (C<">) to group words together. The following
+alternatives are equivalent on Unix:
+
+ "two words"
+ 'two words'
+ two\ words
+
+In case of doubt, insert the following statement in front of your Perl
+program:
+
+ print STDERR (join("|",@ARGV),"\n");
+
+to verify how your CLI passes the arguments to the program.
+
+=head2 How do I put a "-?" option into a Getopt::Long?
+
+You can only obtain this using an alias, and Getopt::Long of at least
+version 2.13.
+
+ use Getopt::Long;
+ GetOptions ("help|?"); # -help and -? will both set $opt_help
+
+=head1 AUTHOR
+
+Johan Vromans <jvromans@squirrel.nl>
+
+=head1 COPYRIGHT AND DISCLAIMER
+
+This program is Copyright 2002,1990 by Johan Vromans.
+This program is free software; you can redistribute it and/or
+modify it under the terms of the Perl Artistic License or the
+GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+If you do not have a copy of the GNU General Public License write to
+the Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
+MA 02139, USA.
+
+=cut
+
diff --git a/Master/xemtex/perl/lib/IO.pm b/Master/xemtex/perl/lib/IO.pm
new file mode 100644
index 00000000000..0087530c7e6
--- /dev/null
+++ b/Master/xemtex/perl/lib/IO.pm
@@ -0,0 +1,47 @@
+#
+
+package IO;
+
+use XSLoader ();
+use Carp;
+
+$VERSION = "1.20";
+XSLoader::load 'IO', $VERSION;
+
+sub import {
+ shift;
+ my @l = @_ ? @_ : qw(Handle Seekable File Pipe Socket Dir);
+
+ eval join("", map { "require IO::" . (/(\w+)/)[0] . ";\n" } @l)
+ or croak $@;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+IO - load various IO modules
+
+=head1 SYNOPSIS
+
+ use IO;
+
+=head1 DESCRIPTION
+
+C<IO> provides a simple mechanism to load some of the IO modules at one go.
+Currently this includes:
+
+ IO::Handle
+ IO::Seekable
+ IO::File
+ IO::Pipe
+ IO::Socket
+ IO::Dir
+
+For more information on any of these modules, please see its respective
+documentation.
+
+=cut
+
diff --git a/Master/xemtex/perl/lib/IO/File.pm b/Master/xemtex/perl/lib/IO/File.pm
new file mode 100644
index 00000000000..d5520cbd933
--- /dev/null
+++ b/Master/xemtex/perl/lib/IO/File.pm
@@ -0,0 +1,169 @@
+#
+
+package IO::File;
+
+=head1 NAME
+
+IO::File - supply object methods for filehandles
+
+=head1 SYNOPSIS
+
+ use IO::File;
+
+ $fh = new IO::File;
+ if ($fh->open("< file")) {
+ print <$fh>;
+ $fh->close;
+ }
+
+ $fh = new IO::File "> file";
+ if (defined $fh) {
+ print $fh "bar\n";
+ $fh->close;
+ }
+
+ $fh = new IO::File "file", "r";
+ if (defined $fh) {
+ print <$fh>;
+ undef $fh; # automatically closes the file
+ }
+
+ $fh = new IO::File "file", O_WRONLY|O_APPEND;
+ if (defined $fh) {
+ print $fh "corge\n";
+
+ $pos = $fh->getpos;
+ $fh->setpos($pos);
+
+ undef $fh; # automatically closes the file
+ }
+
+ autoflush STDOUT 1;
+
+=head1 DESCRIPTION
+
+C<IO::File> inherits from C<IO::Handle> and C<IO::Seekable>. It extends
+these classes with methods that are specific to file handles.
+
+=head1 CONSTRUCTOR
+
+=over 4
+
+=item new ( FILENAME [,MODE [,PERMS]] )
+
+Creates an C<IO::File>. If it receives any parameters, they are passed to
+the method C<open>; if the open fails, the object is destroyed. Otherwise,
+it is returned to the caller.
+
+=item new_tmpfile
+
+Creates an C<IO::File> opened for read/write on a newly created temporary
+file. On systems where this is possible, the temporary file is anonymous
+(i.e. it is unlinked after creation, but held open). If the temporary
+file cannot be created or opened, the C<IO::File> object is destroyed.
+Otherwise, it is returned to the caller.
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item open( FILENAME [,MODE [,PERMS]] )
+
+C<open> accepts one, two or three parameters. With one parameter,
+it is just a front end for the built-in C<open> function. With two or three
+parameters, the first parameter is a filename that may include
+whitespace or other special characters, and the second parameter is
+the open mode, optionally followed by a file permission value.
+
+If C<IO::File::open> receives a Perl mode string ("E<gt>", "+E<lt>", etc.)
+or an ANSI C fopen() mode string ("w", "r+", etc.), it uses the basic
+Perl C<open> operator (but protects any special characters).
+
+If C<IO::File::open> is given a numeric mode, it passes that mode
+and the optional permissions value to the Perl C<sysopen> operator.
+The permissions default to 0666.
+
+For convenience, C<IO::File> exports the O_XXX constants from the
+Fcntl module, if this module is available.
+
+=back
+
+=head1 SEE ALSO
+
+L<perlfunc>,
+L<perlop/"I/O Operators">,
+L<IO::Handle>
+L<IO::Seekable>
+
+=head1 HISTORY
+
+Derived from FileHandle.pm by Graham Barr E<lt>F<gbarr@pobox.com>E<gt>.
+
+=cut
+
+use 5.006_001;
+use strict;
+our($VERSION, @EXPORT, @EXPORT_OK, @ISA);
+use Carp;
+use Symbol;
+use SelectSaver;
+use IO::Seekable;
+use File::Spec;
+
+require Exporter;
+
+@ISA = qw(IO::Handle IO::Seekable Exporter);
+
+$VERSION = "1.09";
+
+@EXPORT = @IO::Seekable::EXPORT;
+
+eval {
+ # Make all Fcntl O_XXX constants available for importing
+ require Fcntl;
+ my @O = grep /^O_/, @Fcntl::EXPORT;
+ Fcntl->import(@O); # first we import what we want to export
+ push(@EXPORT, @O);
+};
+
+################################################
+## Constructor
+##
+
+sub new {
+ my $type = shift;
+ my $class = ref($type) || $type || "IO::File";
+ @_ >= 0 && @_ <= 3
+ or croak "usage: new $class [FILENAME [,MODE [,PERMS]]]";
+ my $fh = $class->SUPER::new();
+ if (@_) {
+ $fh->open(@_)
+ or return undef;
+ }
+ $fh;
+}
+
+################################################
+## Open
+##
+
+sub open {
+ @_ >= 2 && @_ <= 4 or croak 'usage: $fh->open(FILENAME [,MODE [,PERMS]])';
+ my ($fh, $file) = @_;
+ if (@_ > 2) {
+ my ($mode, $perms) = @_[2, 3];
+ if ($mode =~ /^\d+$/) {
+ defined $perms or $perms = 0666;
+ return sysopen($fh, $file, $mode, $perms);
+ }
+ if (! File::Spec->file_name_is_absolute($file)) {
+ $file = File::Spec->catfile(File::Spec->curdir(),$file);
+ }
+ $file = IO::Handle::_open_mode_string($mode) . " $file\0";
+ }
+ open($fh, $file);
+}
+
+1;
diff --git a/Master/xemtex/perl/lib/IO/Handle.pm b/Master/xemtex/perl/lib/IO/Handle.pm
new file mode 100644
index 00000000000..81bec5a6c1a
--- /dev/null
+++ b/Master/xemtex/perl/lib/IO/Handle.pm
@@ -0,0 +1,613 @@
+
+package IO::Handle;
+
+=head1 NAME
+
+IO::Handle - supply object methods for I/O handles
+
+=head1 SYNOPSIS
+
+ use IO::Handle;
+
+ $io = new IO::Handle;
+ if ($io->fdopen(fileno(STDIN),"r")) {
+ print $io->getline;
+ $io->close;
+ }
+
+ $io = new IO::Handle;
+ if ($io->fdopen(fileno(STDOUT),"w")) {
+ $io->print("Some text\n");
+ }
+
+ use IO::Handle '_IOLBF';
+ $io->setvbuf($buffer_var, _IOLBF, 1024);
+
+ undef $io; # automatically closes the file if it's open
+
+ autoflush STDOUT 1;
+
+=head1 DESCRIPTION
+
+C<IO::Handle> is the base class for all other IO handle classes. It is
+not intended that objects of C<IO::Handle> would be created directly,
+but instead C<IO::Handle> is inherited from by several other classes
+in the IO hierarchy.
+
+If you are reading this documentation, looking for a replacement for
+the C<FileHandle> package, then I suggest you read the documentation
+for C<IO::File> too.
+
+=head1 CONSTRUCTOR
+
+=over 4
+
+=item new ()
+
+Creates a new C<IO::Handle> object.
+
+=item new_from_fd ( FD, MODE )
+
+Creates an C<IO::Handle> like C<new> does.
+It requires two parameters, which are passed to the method C<fdopen>;
+if the fdopen fails, the object is destroyed. Otherwise, it is returned
+to the caller.
+
+=back
+
+=head1 METHODS
+
+See L<perlfunc> for complete descriptions of each of the following
+supported C<IO::Handle> methods, which are just front ends for the
+corresponding built-in functions:
+
+ $io->close
+ $io->eof
+ $io->fileno
+ $io->format_write( [FORMAT_NAME] )
+ $io->getc
+ $io->read ( BUF, LEN, [OFFSET] )
+ $io->print ( ARGS )
+ $io->printf ( FMT, [ARGS] )
+ $io->stat
+ $io->sysread ( BUF, LEN, [OFFSET] )
+ $io->syswrite ( BUF, [LEN, [OFFSET]] )
+ $io->truncate ( LEN )
+
+See L<perlvar> for complete descriptions of each of the following
+supported C<IO::Handle> methods. All of them return the previous
+value of the attribute and takes an optional single argument that when
+given will set the value. If no argument is given the previous value
+is unchanged (except for $io->autoflush will actually turn ON
+autoflush by default).
+
+ $io->autoflush ( [BOOL] ) $|
+ $io->format_page_number( [NUM] ) $%
+ $io->format_lines_per_page( [NUM] ) $=
+ $io->format_lines_left( [NUM] ) $-
+ $io->format_name( [STR] ) $~
+ $io->format_top_name( [STR] ) $^
+ $io->input_line_number( [NUM]) $.
+
+The following methods are not supported on a per-filehandle basis.
+
+ IO::Handle->format_line_break_characters( [STR] ) $:
+ IO::Handle->format_formfeed( [STR]) $^L
+ IO::Handle->output_field_separator( [STR] ) $,
+ IO::Handle->output_record_separator( [STR] ) $\
+
+ IO::Handle->input_record_separator( [STR] ) $/
+
+Furthermore, for doing normal I/O you might need these:
+
+=over 4
+
+=item $io->fdopen ( FD, MODE )
+
+C<fdopen> is like an ordinary C<open> except that its first parameter
+is not a filename but rather a file handle name, an IO::Handle object,
+or a file descriptor number.
+
+=item $io->opened
+
+Returns true if the object is currently a valid file descriptor, false
+otherwise.
+
+=item $io->getline
+
+This works like <$io> described in L<perlop/"I/O Operators">
+except that it's more readable and can be safely called in a
+list context but still returns just one line.
+
+=item $io->getlines
+
+This works like <$io> when called in a list context to read all
+the remaining lines in a file, except that it's more readable.
+It will also croak() if accidentally called in a scalar context.
+
+=item $io->ungetc ( ORD )
+
+Pushes a character with the given ordinal value back onto the given
+handle's input stream. Only one character of pushback per handle is
+guaranteed.
+
+=item $io->write ( BUF, LEN [, OFFSET ] )
+
+This C<write> is like C<write> found in C, that is it is the
+opposite of read. The wrapper for the perl C<write> function is
+called C<format_write>.
+
+=item $io->error
+
+Returns a true value if the given handle has experienced any errors
+since it was opened or since the last call to C<clearerr>, or if the
+handle is invalid. It only returns false for a valid handle with no
+outstanding errors.
+
+=item $io->clearerr
+
+Clear the given handle's error indicator. Returns -1 if the handle is
+invalid, 0 otherwise.
+
+=item $io->sync
+
+C<sync> synchronizes a file's in-memory state with that on the
+physical medium. C<sync> does not operate at the perlio api level, but
+operates on the file descriptor (similar to sysread, sysseek and
+systell). This means that any data held at the perlio api level will not
+be synchronized. To synchronize data that is buffered at the perlio api
+level you must use the flush method. C<sync> is not implemented on all
+platforms. Returns "0 but true" on success, C<undef> on error, C<undef>
+for an invalid handle. See L<fsync(3c)>.
+
+=item $io->flush
+
+C<flush> causes perl to flush any buffered data at the perlio api level.
+Any unread data in the buffer will be discarded, and any unwritten data
+will be written to the underlying file descriptor. Returns "0 but true"
+on success, C<undef> on error.
+
+=item $io->printflush ( ARGS )
+
+Turns on autoflush, print ARGS and then restores the autoflush status of the
+C<IO::Handle> object. Returns the return value from print.
+
+=item $io->blocking ( [ BOOL ] )
+
+If called with an argument C<blocking> will turn on non-blocking IO if
+C<BOOL> is false, and turn it off if C<BOOL> is true.
+
+C<blocking> will return the value of the previous setting, or the
+current setting if C<BOOL> is not given.
+
+If an error occurs C<blocking> will return undef and C<$!> will be set.
+
+=back
+
+
+If the C functions setbuf() and/or setvbuf() are available, then
+C<IO::Handle::setbuf> and C<IO::Handle::setvbuf> set the buffering
+policy for an IO::Handle. The calling sequences for the Perl functions
+are the same as their C counterparts--including the constants C<_IOFBF>,
+C<_IOLBF>, and C<_IONBF> for setvbuf()--except that the buffer parameter
+specifies a scalar variable to use as a buffer. You should only
+change the buffer before any I/O, or immediately after calling flush.
+
+WARNING: A variable used as a buffer by C<setbuf> or C<setvbuf> B<must not
+be modified> in any way until the IO::Handle is closed or C<setbuf> or
+C<setvbuf> is called again, or memory corruption may result! Remember that
+the order of global destruction is undefined, so even if your buffer
+variable remains in scope until program termination, it may be undefined
+before the file IO::Handle is closed. Note that you need to import the
+constants C<_IOFBF>, C<_IOLBF>, and C<_IONBF> explicitly. Like C, setbuf
+returns nothing. setvbuf returns "0 but true", on success, C<undef> on
+failure.
+
+Lastly, there is a special method for working under B<-T> and setuid/gid
+scripts:
+
+=over 4
+
+=item $io->untaint
+
+Marks the object as taint-clean, and as such data read from it will also
+be considered taint-clean. Note that this is a very trusting action to
+take, and appropriate consideration for the data source and potential
+vulnerability should be kept in mind. Returns 0 on success, -1 if setting
+the taint-clean flag failed. (eg invalid handle)
+
+=back
+
+=head1 NOTE
+
+An C<IO::Handle> object is a reference to a symbol/GLOB reference (see
+the C<Symbol> package). Some modules that
+inherit from C<IO::Handle> may want to keep object related variables
+in the hash table part of the GLOB. In an attempt to prevent modules
+trampling on each other I propose the that any such module should prefix
+its variables with its own name separated by _'s. For example the IO::Socket
+module keeps a C<timeout> variable in 'io_socket_timeout'.
+
+=head1 SEE ALSO
+
+L<perlfunc>,
+L<perlop/"I/O Operators">,
+L<IO::File>
+
+=head1 BUGS
+
+Due to backwards compatibility, all filehandles resemble objects
+of class C<IO::Handle>, or actually classes derived from that class.
+They actually aren't. Which means you can't derive your own
+class from C<IO::Handle> and inherit those methods.
+
+=head1 HISTORY
+
+Derived from FileHandle.pm by Graham Barr E<lt>F<gbarr@pobox.com>E<gt>
+
+=cut
+
+use 5.006_001;
+use strict;
+our($VERSION, @EXPORT_OK, @ISA);
+use Carp;
+use Symbol;
+use SelectSaver;
+use IO (); # Load the XS module
+
+require Exporter;
+@ISA = qw(Exporter);
+
+$VERSION = "1.21_00";
+$VERSION = eval $VERSION;
+
+@EXPORT_OK = qw(
+ autoflush
+ output_field_separator
+ output_record_separator
+ input_record_separator
+ input_line_number
+ format_page_number
+ format_lines_per_page
+ format_lines_left
+ format_name
+ format_top_name
+ format_line_break_characters
+ format_formfeed
+ format_write
+
+ print
+ printf
+ getline
+ getlines
+
+ printflush
+ flush
+
+ SEEK_SET
+ SEEK_CUR
+ SEEK_END
+ _IOFBF
+ _IOLBF
+ _IONBF
+);
+
+################################################
+## Constructors, destructors.
+##
+
+sub new {
+ my $class = ref($_[0]) || $_[0] || "IO::Handle";
+ @_ == 1 or croak "usage: new $class";
+ my $io = gensym;
+ bless $io, $class;
+}
+
+sub new_from_fd {
+ my $class = ref($_[0]) || $_[0] || "IO::Handle";
+ @_ == 3 or croak "usage: new_from_fd $class FD, MODE";
+ my $io = gensym;
+ shift;
+ IO::Handle::fdopen($io, @_)
+ or return undef;
+ bless $io, $class;
+}
+
+#
+# There is no need for DESTROY to do anything, because when the
+# last reference to an IO object is gone, Perl automatically
+# closes its associated files (if any). However, to avoid any
+# attempts to autoload DESTROY, we here define it to do nothing.
+#
+sub DESTROY {}
+
+
+################################################
+## Open and close.
+##
+
+sub _open_mode_string {
+ my ($mode) = @_;
+ $mode =~ /^\+?(<|>>?)$/
+ or $mode =~ s/^r(\+?)$/$1</
+ or $mode =~ s/^w(\+?)$/$1>/
+ or $mode =~ s/^a(\+?)$/$1>>/
+ or croak "IO::Handle: bad open mode: $mode";
+ $mode;
+}
+
+sub fdopen {
+ @_ == 3 or croak 'usage: $io->fdopen(FD, MODE)';
+ my ($io, $fd, $mode) = @_;
+ local(*GLOB);
+
+ if (ref($fd) && "".$fd =~ /GLOB\(/o) {
+ # It's a glob reference; Alias it as we cannot get name of anon GLOBs
+ my $n = qualify(*GLOB);
+ *GLOB = *{*$fd};
+ $fd = $n;
+ } elsif ($fd =~ m#^\d+$#) {
+ # It's an FD number; prefix with "=".
+ $fd = "=$fd";
+ }
+
+ open($io, _open_mode_string($mode) . '&' . $fd)
+ ? $io : undef;
+}
+
+sub close {
+ @_ == 1 or croak 'usage: $io->close()';
+ my($io) = @_;
+
+ close($io);
+}
+
+################################################
+## Normal I/O functions.
+##
+
+# flock
+# select
+
+sub opened {
+ @_ == 1 or croak 'usage: $io->opened()';
+ defined fileno($_[0]);
+}
+
+sub fileno {
+ @_ == 1 or croak 'usage: $io->fileno()';
+ fileno($_[0]);
+}
+
+sub getc {
+ @_ == 1 or croak 'usage: $io->getc()';
+ getc($_[0]);
+}
+
+sub eof {
+ @_ == 1 or croak 'usage: $io->eof()';
+ eof($_[0]);
+}
+
+sub print {
+ @_ or croak 'usage: $io->print(ARGS)';
+ my $this = shift;
+ print $this @_;
+}
+
+sub printf {
+ @_ >= 2 or croak 'usage: $io->printf(FMT,[ARGS])';
+ my $this = shift;
+ printf $this @_;
+}
+
+sub getline {
+ @_ == 1 or croak 'usage: $io->getline()';
+ my $this = shift;
+ return scalar <$this>;
+}
+
+*gets = \&getline; # deprecated
+
+sub getlines {
+ @_ == 1 or croak 'usage: $io->getlines()';
+ wantarray or
+ croak 'Can\'t call $io->getlines in a scalar context, use $io->getline';
+ my $this = shift;
+ return <$this>;
+}
+
+sub truncate {
+ @_ == 2 or croak 'usage: $io->truncate(LEN)';
+ truncate($_[0], $_[1]);
+}
+
+sub read {
+ @_ == 3 || @_ == 4 or croak 'usage: $io->read(BUF, LEN [, OFFSET])';
+ read($_[0], $_[1], $_[2], $_[3] || 0);
+}
+
+sub sysread {
+ @_ == 3 || @_ == 4 or croak 'usage: $io->sysread(BUF, LEN [, OFFSET])';
+ sysread($_[0], $_[1], $_[2], $_[3] || 0);
+}
+
+sub write {
+ @_ >= 2 && @_ <= 4 or croak 'usage: $io->write(BUF [, LEN [, OFFSET]])';
+ local($\) = "";
+ $_[2] = length($_[1]) unless defined $_[2];
+ print { $_[0] } substr($_[1], $_[3] || 0, $_[2]);
+}
+
+sub syswrite {
+ @_ >= 2 && @_ <= 4 or croak 'usage: $io->syswrite(BUF [, LEN [, OFFSET]])';
+ if (defined($_[2])) {
+ syswrite($_[0], $_[1], $_[2], $_[3] || 0);
+ } else {
+ syswrite($_[0], $_[1]);
+ }
+}
+
+sub stat {
+ @_ == 1 or croak 'usage: $io->stat()';
+ stat($_[0]);
+}
+
+################################################
+## State modification functions.
+##
+
+sub autoflush {
+ my $old = new SelectSaver qualify($_[0], caller);
+ my $prev = $|;
+ $| = @_ > 1 ? $_[1] : 1;
+ $prev;
+}
+
+sub output_field_separator {
+ carp "output_field_separator is not supported on a per-handle basis"
+ if ref($_[0]);
+ my $prev = $,;
+ $, = $_[1] if @_ > 1;
+ $prev;
+}
+
+sub output_record_separator {
+ carp "output_record_separator is not supported on a per-handle basis"
+ if ref($_[0]);
+ my $prev = $\;
+ $\ = $_[1] if @_ > 1;
+ $prev;
+}
+
+sub input_record_separator {
+ carp "input_record_separator is not supported on a per-handle basis"
+ if ref($_[0]);
+ my $prev = $/;
+ $/ = $_[1] if @_ > 1;
+ $prev;
+}
+
+sub input_line_number {
+ local $.;
+ my $tell = tell qualify($_[0], caller) if ref($_[0]);
+ my $prev = $.;
+ $. = $_[1] if @_ > 1;
+ $prev;
+}
+
+sub format_page_number {
+ my $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
+ my $prev = $%;
+ $% = $_[1] if @_ > 1;
+ $prev;
+}
+
+sub format_lines_per_page {
+ my $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
+ my $prev = $=;
+ $= = $_[1] if @_ > 1;
+ $prev;
+}
+
+sub format_lines_left {
+ my $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
+ my $prev = $-;
+ $- = $_[1] if @_ > 1;
+ $prev;
+}
+
+sub format_name {
+ my $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
+ my $prev = $~;
+ $~ = qualify($_[1], caller) if @_ > 1;
+ $prev;
+}
+
+sub format_top_name {
+ my $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
+ my $prev = $^;
+ $^ = qualify($_[1], caller) if @_ > 1;
+ $prev;
+}
+
+sub format_line_break_characters {
+ carp "format_line_break_characters is not supported on a per-handle basis"
+ if ref($_[0]);
+ my $prev = $:;
+ $: = $_[1] if @_ > 1;
+ $prev;
+}
+
+sub format_formfeed {
+ carp "format_formfeed is not supported on a per-handle basis"
+ if ref($_[0]);
+ my $prev = $^L;
+ $^L = $_[1] if @_ > 1;
+ $prev;
+}
+
+sub formline {
+ my $io = shift;
+ my $picture = shift;
+ local($^A) = $^A;
+ local($\) = "";
+ formline($picture, @_);
+ print $io $^A;
+}
+
+sub format_write {
+ @_ < 3 || croak 'usage: $io->write( [FORMAT_NAME] )';
+ if (@_ == 2) {
+ my ($io, $fmt) = @_;
+ my $oldfmt = $io->format_name($fmt);
+ CORE::write($io);
+ $io->format_name($oldfmt);
+ } else {
+ CORE::write($_[0]);
+ }
+}
+
+# XXX undocumented
+sub fcntl {
+ @_ == 3 || croak 'usage: $io->fcntl( OP, VALUE );';
+ my ($io, $op) = @_;
+ return fcntl($io, $op, $_[2]);
+}
+
+# XXX undocumented
+sub ioctl {
+ @_ == 3 || croak 'usage: $io->ioctl( OP, VALUE );';
+ my ($io, $op) = @_;
+ return ioctl($io, $op, $_[2]);
+}
+
+# this sub is for compatability with older releases of IO that used
+# a sub called constant to detemine if a constant existed -- GMB
+#
+# The SEEK_* and _IO?BF constants were the only constants at that time
+# any new code should just chech defined(&CONSTANT_NAME)
+
+sub constant {
+ no strict 'refs';
+ my $name = shift;
+ (($name =~ /^(SEEK_(SET|CUR|END)|_IO[FLN]BF)$/) && defined &{$name})
+ ? &{$name}() : undef;
+}
+
+
+# so that flush.pl can be deprecated
+
+sub printflush {
+ my $io = shift;
+ my $old = new SelectSaver qualify($io, caller) if ref($io);
+ local $| = 1;
+ if(ref($io)) {
+ print $io @_;
+ }
+ else {
+ print @_;
+ }
+}
+
+1;
diff --git a/Master/xemtex/perl/lib/IO/Seekable.pm b/Master/xemtex/perl/lib/IO/Seekable.pm
new file mode 100644
index 00000000000..2ddee4d53ce
--- /dev/null
+++ b/Master/xemtex/perl/lib/IO/Seekable.pm
@@ -0,0 +1,128 @@
+#
+
+package IO::Seekable;
+
+=head1 NAME
+
+IO::Seekable - supply seek based methods for I/O objects
+
+=head1 SYNOPSIS
+
+ use IO::Seekable;
+ package IO::Something;
+ @ISA = qw(IO::Seekable);
+
+=head1 DESCRIPTION
+
+C<IO::Seekable> does not have a constructor of its own as it is intended to
+be inherited by other C<IO::Handle> based objects. It provides methods
+which allow seeking of the file descriptors.
+
+=over 4
+
+=item $io->getpos
+
+Returns an opaque value that represents the current position of the
+IO::File, or C<undef> if this is not possible (eg an unseekable stream such
+as a terminal, pipe or socket). If the fgetpos() function is available in
+your C library it is used to implements getpos, else perl emulates getpos
+using C's ftell() function.
+
+=item $io->setpos
+
+Uses the value of a previous getpos call to return to a previously visited
+position. Returns "0 but true" on success, C<undef> on failure.
+
+=back
+
+See L<perlfunc> for complete descriptions of each of the following
+supported C<IO::Seekable> methods, which are just front ends for the
+corresponding built-in functions:
+
+=over 4
+
+=item $io->seek ( POS, WHENCE )
+
+Seek the IO::File to position POS, relative to WHENCE:
+
+=over 8
+
+=item WHENCE=0 (SEEK_SET)
+
+POS is absolute position. (Seek relative to the start of the file)
+
+=item WHENCE=1 (SEEK_CUR)
+
+POS is an offset from the current position. (Seek relative to current)
+
+=item WHENCE=2 (SEEK_END)
+
+POS is an offset from the end of the file. (Seek relative to end)
+
+=back
+
+The SEEK_* constants can be imported from the C<Fcntl> module if you
+don't wish to use the numbers C<0> C<1> or C<2> in your code.
+
+Returns C<1> upon success, C<0> otherwise.
+
+=item $io->sysseek( POS, WHENCE )
+
+Similar to $io->seek, but sets the IO::File's position using the system
+call lseek(2) directly, so will confuse most perl IO operators except
+sysread and syswrite (see L<perlfunc> for full details)
+
+Returns the new position, or C<undef> on failure. A position
+of zero is returned as the string C<"0 but true">
+
+=item $io->tell
+
+Returns the IO::File's current position, or -1 on error.
+
+=back
+
+=head1 SEE ALSO
+
+L<perlfunc>,
+L<perlop/"I/O Operators">,
+L<IO::Handle>
+L<IO::File>
+
+=head1 HISTORY
+
+Derived from FileHandle.pm by Graham Barr E<lt>gbarr@pobox.comE<gt>
+
+=cut
+
+use 5.006_001;
+use Carp;
+use strict;
+our($VERSION, @EXPORT, @ISA);
+use IO::Handle ();
+# XXX we can't get these from IO::Handle or we'll get prototype
+# mismatch warnings on C<use POSIX; use IO::File;> :-(
+use Fcntl qw(SEEK_SET SEEK_CUR SEEK_END);
+require Exporter;
+
+@EXPORT = qw(SEEK_SET SEEK_CUR SEEK_END);
+@ISA = qw(Exporter);
+
+$VERSION = "1.08_00";
+$VERSION = eval $VERSION;
+
+sub seek {
+ @_ == 3 or croak 'usage: $io->seek(POS, WHENCE)';
+ seek($_[0], $_[1], $_[2]);
+}
+
+sub sysseek {
+ @_ == 3 or croak 'usage: $io->sysseek(POS, WHENCE)';
+ sysseek($_[0], $_[1], $_[2]);
+}
+
+sub tell {
+ @_ == 1 or croak 'usage: $io->tell()';
+ tell($_[0]);
+}
+
+1;
diff --git a/Master/xemtex/perl/lib/List/Util.pm b/Master/xemtex/perl/lib/List/Util.pm
new file mode 100644
index 00000000000..7686ffe82cd
--- /dev/null
+++ b/Master/xemtex/perl/lib/List/Util.pm
@@ -0,0 +1,194 @@
+# List::Util.pm
+#
+# Copyright (c) 1997-2001 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package List::Util;
+
+require Exporter;
+require DynaLoader;
+
+our @ISA = qw(Exporter DynaLoader);
+our @EXPORT_OK = qw(first min max minstr maxstr reduce sum shuffle);
+our $VERSION = "1.07_00";
+our $XS_VERSION = $VERSION;
+$VERSION = eval $VERSION;
+
+bootstrap List::Util $XS_VERSION;
+
+1;
+
+__END__
+
+=head1 NAME
+
+List::Util - A selection of general-utility list subroutines
+
+=head1 SYNOPSIS
+
+ use List::Util qw(first max maxstr min minstr reduce shuffle sum);
+
+=head1 DESCRIPTION
+
+C<List::Util> contains a selection of subroutines that people have
+expressed would be nice to have in the perl core, but the usage would
+not really be high enough to warrant the use of a keyword, and the size
+so small such that being individual extensions would be wasteful.
+
+By default C<List::Util> does not export any subroutines. The
+subroutines defined are
+
+=over 4
+
+=item first BLOCK LIST
+
+Similar to C<grep> in that it evaluates BLOCK setting C<$_> to each element
+of LIST in turn. C<first> returns the first element where the result from
+BLOCK is a true value. If BLOCK never returns true or LIST was empty then
+C<undef> is returned.
+
+ $foo = first { defined($_) } @list # first defined value in @list
+ $foo = first { $_ > $value } @list # first value in @list which
+ # is greater than $value
+
+This function could be implemented using C<reduce> like this
+
+ $foo = reduce { defined($a) ? $a : wanted($b) ? $b : undef } undef, @list
+
+for example wanted() could be defined() which would return the first
+defined value in @list
+
+=item max LIST
+
+Returns the entry in the list with the highest numerical value. If the
+list is empty then C<undef> is returned.
+
+ $foo = max 1..10 # 10
+ $foo = max 3,9,12 # 12
+ $foo = max @bar, @baz # whatever
+
+This function could be implemented using C<reduce> like this
+
+ $foo = reduce { $a > $b ? $a : $b } 1..10
+
+=item maxstr LIST
+
+Similar to C<max>, but treats all the entries in the list as strings
+and returns the highest string as defined by the C<gt> operator.
+If the list is empty then C<undef> is returned.
+
+ $foo = maxstr 'A'..'Z' # 'Z'
+ $foo = maxstr "hello","world" # "world"
+ $foo = maxstr @bar, @baz # whatever
+
+This function could be implemented using C<reduce> like this
+
+ $foo = reduce { $a gt $b ? $a : $b } 'A'..'Z'
+
+=item min LIST
+
+Similar to C<max> but returns the entry in the list with the lowest
+numerical value. If the list is empty then C<undef> is returned.
+
+ $foo = min 1..10 # 1
+ $foo = min 3,9,12 # 3
+ $foo = min @bar, @baz # whatever
+
+This function could be implemented using C<reduce> like this
+
+ $foo = reduce { $a < $b ? $a : $b } 1..10
+
+=item minstr LIST
+
+Similar to C<min>, but treats all the entries in the list as strings
+and returns the lowest string as defined by the C<lt> operator.
+If the list is empty then C<undef> is returned.
+
+ $foo = minstr 'A'..'Z' # 'A'
+ $foo = minstr "hello","world" # "hello"
+ $foo = minstr @bar, @baz # whatever
+
+This function could be implemented using C<reduce> like this
+
+ $foo = reduce { $a lt $b ? $a : $b } 'A'..'Z'
+
+=item reduce BLOCK LIST
+
+Reduces LIST by calling BLOCK multiple times, setting C<$a> and C<$b>
+each time. The first call will be with C<$a> and C<$b> set to the first
+two elements of the list, subsequent calls will be done by
+setting C<$a> to the result of the previous call and C<$b> to the next
+element in the list.
+
+Returns the result of the last call to BLOCK. If LIST is empty then
+C<undef> is returned. If LIST only contains one element then that
+element is returned and BLOCK is not executed.
+
+ $foo = reduce { $a < $b ? $a : $b } 1..10 # min
+ $foo = reduce { $a lt $b ? $a : $b } 'aa'..'zz' # minstr
+ $foo = reduce { $a + $b } 1 .. 10 # sum
+ $foo = reduce { $a . $b } @bar # concat
+
+=item shuffle LIST
+
+Returns the elements of LIST in a random order
+
+ @cards = shuffle 0..51 # 0..51 in a random order
+
+=item sum LIST
+
+Returns the sum of all the elements in LIST.
+
+ $foo = sum 1..10 # 55
+ $foo = sum 3,9,12 # 24
+ $foo = sum @bar, @baz # whatever
+
+This function could be implemented using C<reduce> like this
+
+ $foo = reduce { $a + $b } 1..10
+
+=back
+
+=head1 KNOWN BUGS
+
+With perl versions prior to 5.005 there are some cases where reduce
+will return an incorrect result. This will show up as test 7 of
+reduce.t failing.
+
+=head1 SUGGESTED ADDITIONS
+
+The following are additions that have been requested, but I have been reluctant
+to add due to them being very simple to implement in perl
+
+ # One argument is true
+
+ sub any { $_ && return 1 for @_; 0 }
+
+ # All arguments are true
+
+ sub all { $_ || return 0 for @_; 1 }
+
+ # All arguments are false
+
+ sub none { $_ && return 0 for @_; 1 }
+
+ # One argument is false
+
+ sub notall { $_ || return 1 for @_; 0 }
+
+ # How many elements are true
+
+ sub true { scalar grep { $_ } @_ }
+
+ # How many elements are false
+
+ sub false { scalar grep { !$_ } @_ }
+
+=head1 COPYRIGHT
+
+Copyright (c) 1997-2001 Graham Barr <gbarr@pobox.com>. All rights reserved.
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
diff --git a/Master/xemtex/perl/lib/POSIX.pm b/Master/xemtex/perl/lib/POSIX.pm
new file mode 100644
index 00000000000..05634f01322
--- /dev/null
+++ b/Master/xemtex/perl/lib/POSIX.pm
@@ -0,0 +1,950 @@
+package POSIX;
+
+our(@ISA, %EXPORT_TAGS, @EXPORT_OK, $AUTOLOAD) = ();
+
+use AutoLoader;
+
+use XSLoader ();
+
+our $VERSION = "1.05" ;
+
+# Grandfather old foo_h form to new :foo_h form
+my $loaded;
+
+sub import {
+ load_imports() unless $loaded++;
+ my $this = shift;
+ my @list = map { m/^\w+_h$/ ? ":$_" : $_ } @_;
+ local $Exporter::ExportLevel = 1;
+ Exporter::import($this,@list);
+}
+
+sub croak { require Carp; goto &Carp::croak }
+# declare usage to assist AutoLoad
+sub usage;
+
+XSLoader::load 'POSIX', $VERSION;
+
+my %NON_CONSTS = (map {($_,1)}
+ qw(S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISREG WEXITSTATUS
+ WIFEXITED WIFSIGNALED WIFSTOPPED WSTOPSIG WTERMSIG));
+
+sub AUTOLOAD {
+ if ($AUTOLOAD =~ /::(_?[a-z])/) {
+ # require AutoLoader;
+ $AutoLoader::AUTOLOAD = $AUTOLOAD;
+ goto &AutoLoader::AUTOLOAD
+ }
+ local $! = 0;
+ my $constname = $AUTOLOAD;
+ $constname =~ s/.*:://;
+ if ($NON_CONSTS{$constname}) {
+ my ($val, $error) = &int_macro_int($constname, $_[0]);
+ croak $error if $error;
+ *$AUTOLOAD = sub { &int_macro_int($constname, $_[0]) };
+ } else {
+ my ($error, $val) = constant($constname);
+ croak $error if $error;
+ *$AUTOLOAD = sub { $val };
+ }
+
+ goto &$AUTOLOAD;
+}
+
+sub POSIX::SigAction::new {
+ bless {HANDLER => $_[1], MASK => $_[2], FLAGS => $_[3] || 0}, $_[0];
+}
+
+1;
+__END__
+
+sub usage {
+ my ($mess) = @_;
+ croak "Usage: POSIX::$mess";
+}
+
+sub redef {
+ my ($mess) = @_;
+ croak "Use method $mess instead";
+}
+
+sub unimpl {
+ my ($mess) = @_;
+ $mess =~ s/xxx//;
+ croak "Unimplemented: POSIX::$mess";
+}
+
+sub assert {
+ usage "assert(expr)" if @_ != 1;
+ if (!$_[0]) {
+ croak "Assertion failed";
+ }
+}
+
+sub tolower {
+ usage "tolower(string)" if @_ != 1;
+ lc($_[0]);
+}
+
+sub toupper {
+ usage "toupper(string)" if @_ != 1;
+ uc($_[0]);
+}
+
+sub closedir {
+ usage "closedir(dirhandle)" if @_ != 1;
+ CORE::closedir($_[0]);
+}
+
+sub opendir {
+ usage "opendir(directory)" if @_ != 1;
+ my $dirhandle;
+ CORE::opendir($dirhandle, $_[0])
+ ? $dirhandle
+ : undef;
+}
+
+sub readdir {
+ usage "readdir(dirhandle)" if @_ != 1;
+ CORE::readdir($_[0]);
+}
+
+sub rewinddir {
+ usage "rewinddir(dirhandle)" if @_ != 1;
+ CORE::rewinddir($_[0]);
+}
+
+sub errno {
+ usage "errno()" if @_ != 0;
+ $! + 0;
+}
+
+sub creat {
+ usage "creat(filename, mode)" if @_ != 2;
+ &open($_[0], &O_WRONLY | &O_CREAT | &O_TRUNC, $_[1]);
+}
+
+sub fcntl {
+ usage "fcntl(filehandle, cmd, arg)" if @_ != 3;
+ CORE::fcntl($_[0], $_[1], $_[2]);
+}
+
+sub getgrgid {
+ usage "getgrgid(gid)" if @_ != 1;
+ CORE::getgrgid($_[0]);
+}
+
+sub getgrnam {
+ usage "getgrnam(name)" if @_ != 1;
+ CORE::getgrnam($_[0]);
+}
+
+sub atan2 {
+ usage "atan2(x,y)" if @_ != 2;
+ CORE::atan2($_[0], $_[1]);
+}
+
+sub cos {
+ usage "cos(x)" if @_ != 1;
+ CORE::cos($_[0]);
+}
+
+sub exp {
+ usage "exp(x)" if @_ != 1;
+ CORE::exp($_[0]);
+}
+
+sub fabs {
+ usage "fabs(x)" if @_ != 1;
+ CORE::abs($_[0]);
+}
+
+sub log {
+ usage "log(x)" if @_ != 1;
+ CORE::log($_[0]);
+}
+
+sub pow {
+ usage "pow(x,exponent)" if @_ != 2;
+ $_[0] ** $_[1];
+}
+
+sub sin {
+ usage "sin(x)" if @_ != 1;
+ CORE::sin($_[0]);
+}
+
+sub sqrt {
+ usage "sqrt(x)" if @_ != 1;
+ CORE::sqrt($_[0]);
+}
+
+sub getpwnam {
+ usage "getpwnam(name)" if @_ != 1;
+ CORE::getpwnam($_[0]);
+}
+
+sub getpwuid {
+ usage "getpwuid(uid)" if @_ != 1;
+ CORE::getpwuid($_[0]);
+}
+
+sub longjmp {
+ unimpl "longjmp() is C-specific: use die instead";
+}
+
+sub setjmp {
+ unimpl "setjmp() is C-specific: use eval {} instead";
+}
+
+sub siglongjmp {
+ unimpl "siglongjmp() is C-specific: use die instead";
+}
+
+sub sigsetjmp {
+ unimpl "sigsetjmp() is C-specific: use eval {} instead";
+}
+
+sub kill {
+ usage "kill(pid, sig)" if @_ != 2;
+ CORE::kill $_[1], $_[0];
+}
+
+sub raise {
+ usage "raise(sig)" if @_ != 1;
+ CORE::kill $_[0], $$; # Is this good enough?
+}
+
+sub offsetof {
+ unimpl "offsetof() is C-specific, stopped";
+}
+
+sub clearerr {
+ redef "IO::Handle::clearerr()";
+}
+
+sub fclose {
+ redef "IO::Handle::close()";
+}
+
+sub fdopen {
+ redef "IO::Handle::new_from_fd()";
+}
+
+sub feof {
+ redef "IO::Handle::eof()";
+}
+
+sub fgetc {
+ redef "IO::Handle::getc()";
+}
+
+sub fgets {
+ redef "IO::Handle::gets()";
+}
+
+sub fileno {
+ redef "IO::Handle::fileno()";
+}
+
+sub fopen {
+ redef "IO::File::open()";
+}
+
+sub fprintf {
+ unimpl "fprintf() is C-specific--use printf instead";
+}
+
+sub fputc {
+ unimpl "fputc() is C-specific--use print instead";
+}
+
+sub fputs {
+ unimpl "fputs() is C-specific--use print instead";
+}
+
+sub fread {
+ unimpl "fread() is C-specific--use read instead";
+}
+
+sub freopen {
+ unimpl "freopen() is C-specific--use open instead";
+}
+
+sub fscanf {
+ unimpl "fscanf() is C-specific--use <> and regular expressions instead";
+}
+
+sub fseek {
+ redef "IO::Seekable::seek()";
+}
+
+sub ferror {
+ redef "IO::Handle::error()";
+}
+
+sub fflush {
+ redef "IO::Handle::flush()";
+}
+
+sub fgetpos {
+ redef "IO::Seekable::getpos()";
+}
+
+sub fsetpos {
+ redef "IO::Seekable::setpos()";
+}
+
+sub ftell {
+ redef "IO::Seekable::tell()";
+}
+
+sub fwrite {
+ unimpl "fwrite() is C-specific--use print instead";
+}
+
+sub getc {
+ usage "getc(handle)" if @_ != 1;
+ CORE::getc($_[0]);
+}
+
+sub getchar {
+ usage "getchar()" if @_ != 0;
+ CORE::getc(STDIN);
+}
+
+sub gets {
+ usage "gets()" if @_ != 0;
+ scalar <STDIN>;
+}
+
+sub perror {
+ print STDERR "@_: " if @_;
+ print STDERR $!,"\n";
+}
+
+sub printf {
+ usage "printf(pattern, args...)" if @_ < 1;
+ CORE::printf STDOUT @_;
+}
+
+sub putc {
+ unimpl "putc() is C-specific--use print instead";
+}
+
+sub putchar {
+ unimpl "putchar() is C-specific--use print instead";
+}
+
+sub puts {
+ unimpl "puts() is C-specific--use print instead";
+}
+
+sub remove {
+ usage "remove(filename)" if @_ != 1;
+ CORE::unlink($_[0]);
+}
+
+sub rename {
+ usage "rename(oldfilename, newfilename)" if @_ != 2;
+ CORE::rename($_[0], $_[1]);
+}
+
+sub rewind {
+ usage "rewind(filehandle)" if @_ != 1;
+ CORE::seek($_[0],0,0);
+}
+
+sub scanf {
+ unimpl "scanf() is C-specific--use <> and regular expressions instead";
+}
+
+sub sprintf {
+ usage "sprintf(pattern,args)" if @_ == 0;
+ CORE::sprintf(shift,@_);
+}
+
+sub sscanf {
+ unimpl "sscanf() is C-specific--use regular expressions instead";
+}
+
+sub tmpfile {
+ redef "IO::File::new_tmpfile()";
+}
+
+sub ungetc {
+ redef "IO::Handle::ungetc()";
+}
+
+sub vfprintf {
+ unimpl "vfprintf() is C-specific";
+}
+
+sub vprintf {
+ unimpl "vprintf() is C-specific";
+}
+
+sub vsprintf {
+ unimpl "vsprintf() is C-specific";
+}
+
+sub abs {
+ usage "abs(x)" if @_ != 1;
+ CORE::abs($_[0]);
+}
+
+sub atexit {
+ unimpl "atexit() is C-specific: use END {} instead";
+}
+
+sub atof {
+ unimpl "atof() is C-specific, stopped";
+}
+
+sub atoi {
+ unimpl "atoi() is C-specific, stopped";
+}
+
+sub atol {
+ unimpl "atol() is C-specific, stopped";
+}
+
+sub bsearch {
+ unimpl "bsearch() not supplied";
+}
+
+sub calloc {
+ unimpl "calloc() is C-specific, stopped";
+}
+
+sub div {
+ unimpl "div() is C-specific, stopped";
+}
+
+sub exit {
+ usage "exit(status)" if @_ != 1;
+ CORE::exit($_[0]);
+}
+
+sub free {
+ unimpl "free() is C-specific, stopped";
+}
+
+sub getenv {
+ usage "getenv(name)" if @_ != 1;
+ $ENV{$_[0]};
+}
+
+sub labs {
+ unimpl "labs() is C-specific, use abs instead";
+}
+
+sub ldiv {
+ unimpl "ldiv() is C-specific, use / and int instead";
+}
+
+sub malloc {
+ unimpl "malloc() is C-specific, stopped";
+}
+
+sub qsort {
+ unimpl "qsort() is C-specific, use sort instead";
+}
+
+sub rand {
+ unimpl "rand() is non-portable, use Perl's rand instead";
+}
+
+sub realloc {
+ unimpl "realloc() is C-specific, stopped";
+}
+
+sub srand {
+ unimpl "srand()";
+}
+
+sub system {
+ usage "system(command)" if @_ != 1;
+ CORE::system($_[0]);
+}
+
+sub memchr {
+ unimpl "memchr() is C-specific, use index() instead";
+}
+
+sub memcmp {
+ unimpl "memcmp() is C-specific, use eq instead";
+}
+
+sub memcpy {
+ unimpl "memcpy() is C-specific, use = instead";
+}
+
+sub memmove {
+ unimpl "memmove() is C-specific, use = instead";
+}
+
+sub memset {
+ unimpl "memset() is C-specific, use x instead";
+}
+
+sub strcat {
+ unimpl "strcat() is C-specific, use .= instead";
+}
+
+sub strchr {
+ unimpl "strchr() is C-specific, use index() instead";
+}
+
+sub strcmp {
+ unimpl "strcmp() is C-specific, use eq instead";
+}
+
+sub strcpy {
+ unimpl "strcpy() is C-specific, use = instead";
+}
+
+sub strcspn {
+ unimpl "strcspn() is C-specific, use regular expressions instead";
+}
+
+sub strerror {
+ usage "strerror(errno)" if @_ != 1;
+ local $! = $_[0];
+ $! . "";
+}
+
+sub strlen {
+ unimpl "strlen() is C-specific, use length instead";
+}
+
+sub strncat {
+ unimpl "strncat() is C-specific, use .= instead";
+}
+
+sub strncmp {
+ unimpl "strncmp() is C-specific, use eq instead";
+}
+
+sub strncpy {
+ unimpl "strncpy() is C-specific, use = instead";
+}
+
+sub strpbrk {
+ unimpl "strpbrk() is C-specific, stopped";
+}
+
+sub strrchr {
+ unimpl "strrchr() is C-specific, use rindex() instead";
+}
+
+sub strspn {
+ unimpl "strspn() is C-specific, stopped";
+}
+
+sub strstr {
+ usage "strstr(big, little)" if @_ != 2;
+ CORE::index($_[0], $_[1]);
+}
+
+sub strtok {
+ unimpl "strtok() is C-specific, stopped";
+}
+
+sub chmod {
+ usage "chmod(mode, filename)" if @_ != 2;
+ CORE::chmod($_[0], $_[1]);
+}
+
+sub fstat {
+ usage "fstat(fd)" if @_ != 1;
+ local *TMP;
+ CORE::open(TMP, "<&$_[0]"); # Gross.
+ my @l = CORE::stat(TMP);
+ CORE::close(TMP);
+ @l;
+}
+
+sub mkdir {
+ usage "mkdir(directoryname, mode)" if @_ != 2;
+ CORE::mkdir($_[0], $_[1]);
+}
+
+sub stat {
+ usage "stat(filename)" if @_ != 1;
+ CORE::stat($_[0]);
+}
+
+sub umask {
+ usage "umask(mask)" if @_ != 1;
+ CORE::umask($_[0]);
+}
+
+sub wait {
+ usage "wait()" if @_ != 0;
+ CORE::wait();
+}
+
+sub waitpid {
+ usage "waitpid(pid, options)" if @_ != 2;
+ CORE::waitpid($_[0], $_[1]);
+}
+
+sub gmtime {
+ usage "gmtime(time)" if @_ != 1;
+ CORE::gmtime($_[0]);
+}
+
+sub localtime {
+ usage "localtime(time)" if @_ != 1;
+ CORE::localtime($_[0]);
+}
+
+sub time {
+ usage "time()" if @_ != 0;
+ CORE::time;
+}
+
+sub alarm {
+ usage "alarm(seconds)" if @_ != 1;
+ CORE::alarm($_[0]);
+}
+
+sub chdir {
+ usage "chdir(directory)" if @_ != 1;
+ CORE::chdir($_[0]);
+}
+
+sub chown {
+ usage "chown(filename, uid, gid)" if @_ != 3;
+ CORE::chown($_[0], $_[1], $_[2]);
+}
+
+sub execl {
+ unimpl "execl() is C-specific, stopped";
+}
+
+sub execle {
+ unimpl "execle() is C-specific, stopped";
+}
+
+sub execlp {
+ unimpl "execlp() is C-specific, stopped";
+}
+
+sub execv {
+ unimpl "execv() is C-specific, stopped";
+}
+
+sub execve {
+ unimpl "execve() is C-specific, stopped";
+}
+
+sub execvp {
+ unimpl "execvp() is C-specific, stopped";
+}
+
+sub fork {
+ usage "fork()" if @_ != 0;
+ CORE::fork;
+}
+
+sub getegid {
+ usage "getegid()" if @_ != 0;
+ $) + 0;
+}
+
+sub geteuid {
+ usage "geteuid()" if @_ != 0;
+ $> + 0;
+}
+
+sub getgid {
+ usage "getgid()" if @_ != 0;
+ $( + 0;
+}
+
+sub getgroups {
+ usage "getgroups()" if @_ != 0;
+ my %seen;
+ grep(!$seen{$_}++, split(' ', $) ));
+}
+
+sub getlogin {
+ usage "getlogin()" if @_ != 0;
+ CORE::getlogin();
+}
+
+sub getpgrp {
+ usage "getpgrp()" if @_ != 0;
+ CORE::getpgrp;
+}
+
+sub getpid {
+ usage "getpid()" if @_ != 0;
+ $$;
+}
+
+sub getppid {
+ usage "getppid()" if @_ != 0;
+ CORE::getppid;
+}
+
+sub getuid {
+ usage "getuid()" if @_ != 0;
+ $<;
+}
+
+sub isatty {
+ usage "isatty(filehandle)" if @_ != 1;
+ -t $_[0];
+}
+
+sub link {
+ usage "link(oldfilename, newfilename)" if @_ != 2;
+ CORE::link($_[0], $_[1]);
+}
+
+sub rmdir {
+ usage "rmdir(directoryname)" if @_ != 1;
+ CORE::rmdir($_[0]);
+}
+
+sub setbuf {
+ redef "IO::Handle::setbuf()";
+}
+
+sub setvbuf {
+ redef "IO::Handle::setvbuf()";
+}
+
+sub sleep {
+ usage "sleep(seconds)" if @_ != 1;
+ $_[0] - CORE::sleep($_[0]);
+}
+
+sub unlink {
+ usage "unlink(filename)" if @_ != 1;
+ CORE::unlink($_[0]);
+}
+
+sub utime {
+ usage "utime(filename, atime, mtime)" if @_ != 3;
+ CORE::utime($_[1], $_[2], $_[0]);
+}
+
+sub load_imports {
+%EXPORT_TAGS = (
+
+ assert_h => [qw(assert NDEBUG)],
+
+ ctype_h => [qw(isalnum isalpha iscntrl isdigit isgraph islower
+ isprint ispunct isspace isupper isxdigit tolower toupper)],
+
+ dirent_h => [],
+
+ errno_h => [qw(E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT
+ EAGAIN EALREADY EBADF EBUSY ECHILD ECONNABORTED
+ ECONNREFUSED ECONNRESET EDEADLK EDESTADDRREQ EDOM EDQUOT
+ EEXIST EFAULT EFBIG EHOSTDOWN EHOSTUNREACH EINPROGRESS
+ EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK
+ EMSGSIZE ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH
+ ENFILE ENOBUFS ENODEV ENOENT ENOEXEC ENOLCK ENOMEM
+ ENOPROTOOPT ENOSPC ENOSYS ENOTBLK ENOTCONN ENOTDIR
+ ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOPNOTSUPP EPERM
+ EPFNOSUPPORT EPIPE EPROCLIM EPROTONOSUPPORT EPROTOTYPE
+ ERANGE EREMOTE ERESTART EROFS ESHUTDOWN ESOCKTNOSUPPORT
+ ESPIPE ESRCH ESTALE ETIMEDOUT ETOOMANYREFS ETXTBSY
+ EUSERS EWOULDBLOCK EXDEV errno)],
+
+ fcntl_h => [qw(FD_CLOEXEC F_DUPFD F_GETFD F_GETFL F_GETLK F_RDLCK
+ F_SETFD F_SETFL F_SETLK F_SETLKW F_UNLCK F_WRLCK
+ O_ACCMODE O_APPEND O_CREAT O_EXCL O_NOCTTY O_NONBLOCK
+ O_RDONLY O_RDWR O_TRUNC O_WRONLY
+ creat
+ SEEK_CUR SEEK_END SEEK_SET
+ S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU
+ S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISREG S_ISUID
+ S_IWGRP S_IWOTH S_IWUSR)],
+
+ float_h => [qw(DBL_DIG DBL_EPSILON DBL_MANT_DIG
+ DBL_MAX DBL_MAX_10_EXP DBL_MAX_EXP
+ DBL_MIN DBL_MIN_10_EXP DBL_MIN_EXP
+ FLT_DIG FLT_EPSILON FLT_MANT_DIG
+ FLT_MAX FLT_MAX_10_EXP FLT_MAX_EXP
+ FLT_MIN FLT_MIN_10_EXP FLT_MIN_EXP
+ FLT_RADIX FLT_ROUNDS
+ LDBL_DIG LDBL_EPSILON LDBL_MANT_DIG
+ LDBL_MAX LDBL_MAX_10_EXP LDBL_MAX_EXP
+ LDBL_MIN LDBL_MIN_10_EXP LDBL_MIN_EXP)],
+
+ grp_h => [],
+
+ limits_h => [qw( ARG_MAX CHAR_BIT CHAR_MAX CHAR_MIN CHILD_MAX
+ INT_MAX INT_MIN LINK_MAX LONG_MAX LONG_MIN MAX_CANON
+ MAX_INPUT MB_LEN_MAX NAME_MAX NGROUPS_MAX OPEN_MAX
+ PATH_MAX PIPE_BUF SCHAR_MAX SCHAR_MIN SHRT_MAX SHRT_MIN
+ SSIZE_MAX STREAM_MAX TZNAME_MAX UCHAR_MAX UINT_MAX
+ ULONG_MAX USHRT_MAX _POSIX_ARG_MAX _POSIX_CHILD_MAX
+ _POSIX_LINK_MAX _POSIX_MAX_CANON _POSIX_MAX_INPUT
+ _POSIX_NAME_MAX _POSIX_NGROUPS_MAX _POSIX_OPEN_MAX
+ _POSIX_PATH_MAX _POSIX_PIPE_BUF _POSIX_SSIZE_MAX
+ _POSIX_STREAM_MAX _POSIX_TZNAME_MAX)],
+
+ locale_h => [qw(LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES
+ LC_MONETARY LC_NUMERIC LC_TIME NULL
+ localeconv setlocale)],
+
+ math_h => [qw(HUGE_VAL acos asin atan ceil cosh fabs floor fmod
+ frexp ldexp log10 modf pow sinh tan tanh)],
+
+ pwd_h => [],
+
+ setjmp_h => [qw(longjmp setjmp siglongjmp sigsetjmp)],
+
+ signal_h => [qw(SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK
+ SA_RESETHAND SA_RESTART SA_SIGINFO SIGABRT SIGALRM
+ SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL
+ SIGPIPE SIGQUIT SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN
+ SIGTTOU SIGUSR1 SIGUSR2 SIG_BLOCK SIG_DFL SIG_ERR
+ SIG_IGN SIG_SETMASK SIG_UNBLOCK raise sigaction signal
+ sigpending sigprocmask sigsuspend)],
+
+ stdarg_h => [],
+
+ stddef_h => [qw(NULL offsetof)],
+
+ stdio_h => [qw(BUFSIZ EOF FILENAME_MAX L_ctermid L_cuserid
+ L_tmpname NULL SEEK_CUR SEEK_END SEEK_SET
+ STREAM_MAX TMP_MAX stderr stdin stdout
+ clearerr fclose fdopen feof ferror fflush fgetc fgetpos
+ fgets fopen fprintf fputc fputs fread freopen
+ fscanf fseek fsetpos ftell fwrite getchar gets
+ perror putc putchar puts remove rewind
+ scanf setbuf setvbuf sscanf tmpfile tmpnam
+ ungetc vfprintf vprintf vsprintf)],
+
+ stdlib_h => [qw(EXIT_FAILURE EXIT_SUCCESS MB_CUR_MAX NULL RAND_MAX
+ abort atexit atof atoi atol bsearch calloc div
+ free getenv labs ldiv malloc mblen mbstowcs mbtowc
+ qsort realloc strtod strtol strtoul wcstombs wctomb)],
+
+ string_h => [qw(NULL memchr memcmp memcpy memmove memset strcat
+ strchr strcmp strcoll strcpy strcspn strerror strlen
+ strncat strncmp strncpy strpbrk strrchr strspn strstr
+ strtok strxfrm)],
+
+ sys_stat_h => [qw(S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU
+ S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISREG
+ S_ISUID S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR
+ fstat mkfifo)],
+
+ sys_times_h => [],
+
+ sys_types_h => [],
+
+ sys_utsname_h => [qw(uname)],
+
+ sys_wait_h => [qw(WEXITSTATUS WIFEXITED WIFSIGNALED WIFSTOPPED
+ WNOHANG WSTOPSIG WTERMSIG WUNTRACED)],
+
+ termios_h => [qw( B0 B110 B1200 B134 B150 B1800 B19200 B200 B2400
+ B300 B38400 B4800 B50 B600 B75 B9600 BRKINT CLOCAL
+ CREAD CS5 CS6 CS7 CS8 CSIZE CSTOPB ECHO ECHOE ECHOK
+ ECHONL HUPCL ICANON ICRNL IEXTEN IGNBRK IGNCR IGNPAR
+ INLCR INPCK ISIG ISTRIP IXOFF IXON NCCS NOFLSH OPOST
+ PARENB PARMRK PARODD TCIFLUSH TCIOFF TCIOFLUSH TCION
+ TCOFLUSH TCOOFF TCOON TCSADRAIN TCSAFLUSH TCSANOW
+ TOSTOP VEOF VEOL VERASE VINTR VKILL VMIN VQUIT VSTART
+ VSTOP VSUSP VTIME
+ cfgetispeed cfgetospeed cfsetispeed cfsetospeed tcdrain
+ tcflow tcflush tcgetattr tcsendbreak tcsetattr )],
+
+ time_h => [qw(CLK_TCK CLOCKS_PER_SEC NULL asctime clock ctime
+ difftime mktime strftime tzset tzname)],
+
+ unistd_h => [qw(F_OK NULL R_OK SEEK_CUR SEEK_END SEEK_SET
+ STDERR_FILENO STDIN_FILENO STDOUT_FILENO W_OK X_OK
+ _PC_CHOWN_RESTRICTED _PC_LINK_MAX _PC_MAX_CANON
+ _PC_MAX_INPUT _PC_NAME_MAX _PC_NO_TRUNC _PC_PATH_MAX
+ _PC_PIPE_BUF _PC_VDISABLE _POSIX_CHOWN_RESTRICTED
+ _POSIX_JOB_CONTROL _POSIX_NO_TRUNC _POSIX_SAVED_IDS
+ _POSIX_VDISABLE _POSIX_VERSION _SC_ARG_MAX
+ _SC_CHILD_MAX _SC_CLK_TCK _SC_JOB_CONTROL
+ _SC_NGROUPS_MAX _SC_OPEN_MAX _SC_PAGESIZE _SC_SAVED_IDS
+ _SC_STREAM_MAX _SC_TZNAME_MAX _SC_VERSION
+ _exit access ctermid cuserid
+ dup2 dup execl execle execlp execv execve execvp
+ fpathconf getcwd getegid geteuid getgid getgroups
+ getpid getuid isatty lseek pathconf pause setgid setpgid
+ setsid setuid sysconf tcgetpgrp tcsetpgrp ttyname)],
+
+ utime_h => [],
+
+);
+
+# Exporter::export_tags();
+for (values %EXPORT_TAGS) {
+ push @EXPORT, @$_;
+}
+
+@EXPORT_OK = qw(
+ abs
+ alarm
+ atan2
+ chdir
+ chmod
+ chown
+ close
+ closedir
+ cos
+ exit
+ exp
+ fcntl
+ fileno
+ fork
+ getc
+ getgrgid
+ getgrnam
+ getlogin
+ getpgrp
+ getppid
+ getpwnam
+ getpwuid
+ gmtime
+ isatty
+ kill
+ link
+ localtime
+ log
+ mkdir
+ nice
+ open
+ opendir
+ pipe
+ printf
+ rand
+ read
+ readdir
+ rename
+ rewinddir
+ rmdir
+ sin
+ sleep
+ sprintf
+ sqrt
+ srand
+ stat
+ system
+ time
+ times
+ umask
+ unlink
+ utime
+ wait
+ waitpid
+ write
+);
+
+require Exporter;
+}
diff --git a/Master/xemtex/perl/lib/SDBM_File.pm b/Master/xemtex/perl/lib/SDBM_File.pm
new file mode 100644
index 00000000000..ee82a54145d
--- /dev/null
+++ b/Master/xemtex/perl/lib/SDBM_File.pm
@@ -0,0 +1,116 @@
+package SDBM_File;
+
+use strict;
+use warnings;
+
+require Tie::Hash;
+use XSLoader ();
+
+our @ISA = qw(Tie::Hash);
+our $VERSION = "1.03" ;
+
+XSLoader::load 'SDBM_File', $VERSION;
+
+1;
+
+__END__
+
+=head1 NAME
+
+SDBM_File - Tied access to sdbm files
+
+=head1 SYNOPSIS
+
+ use Fcntl; # For O_RDWR, O_CREAT, etc.
+ use SDBM_File;
+
+ tie(%h, 'SDBM_File', 'filename', O_RDWR|O_CREAT, 0666)
+ or die "Couldn't tie SDBM file 'filename': $!; aborting";
+
+ # Now read and change the hash
+ $h{newkey} = newvalue;
+ print $h{oldkey};
+ ...
+
+ untie %h;
+
+=head1 DESCRIPTION
+
+C<SDBM_File> establishes a connection between a Perl hash variable and
+a file in SDBM_File format;. You can manipulate the data in the file
+just as if it were in a Perl hash, but when your program exits, the
+data will remain in the file, to be used the next time your program
+runs.
+
+Use C<SDBM_File> with the Perl built-in C<tie> function to establish
+the connection between the variable and the file. The arguments to
+C<tie> should be:
+
+=over 4
+
+=item 1.
+
+The hash variable you want to tie.
+
+=item 2.
+
+The string C<"SDBM_File">. (Ths tells Perl to use the C<SDBM_File>
+package to perform the functions of the hash.)
+
+=item 3.
+
+The name of the file you want to tie to the hash.
+
+=item 4.
+
+Flags. Use one of:
+
+=over 2
+
+=item C<O_RDONLY>
+
+Read-only access to the data in the file.
+
+=item C<O_WRONLY>
+
+Write-only access to the data in the file.
+
+=item C<O_RDWR>
+
+Both read and write access.
+
+=back
+
+If you want to create the file if it does not exist, add C<O_CREAT> to
+any of these, as in the example. If you omit C<O_CREAT> and the file
+does not already exist, the C<tie> call will fail.
+
+=item 5.
+
+The default permissions to use if a new file is created. The actual
+permissions will be modified by the user's umask, so you should
+probably use 0666 here. (See L<perlfunc/umask>.)
+
+=back
+
+=head1 DIAGNOSTICS
+
+On failure, the C<tie> call returns an undefined value and probably
+sets C<$!> to contain the reason the file could not be tied.
+
+=head2 C<sdbm store returned -1, errno 22, key "..." at ...>
+
+This warning is emmitted when you try to store a key or a value that
+is too long. It means that the change was not recorded in the
+database. See BUGS AND WARNINGS below.
+
+=head1 BUGS AND WARNINGS
+
+There are a number of limits on the size of the data that you can
+store in the SDBM file. The most important is that the length of a
+key, plus the length of its associated value, may not exceed 1008
+bytes.
+
+See L<perlfunc/tie>, L<perldbmfilter>, L<Fcntl>
+
+=cut
diff --git a/Master/xemtex/perl/lib/Scalar/Util.pm b/Master/xemtex/perl/lib/Scalar/Util.pm
new file mode 100644
index 00000000000..e518a4c445a
--- /dev/null
+++ b/Master/xemtex/perl/lib/Scalar/Util.pm
@@ -0,0 +1,170 @@
+# Scalar::Util.pm
+#
+# Copyright (c) 1997-2001 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package Scalar::Util;
+
+require Exporter;
+require List::Util; # List::Util loads the XS
+
+our @ISA = qw(Exporter);
+our @EXPORT_OK = qw(blessed dualvar reftype weaken isweak tainted readonly openhandle);
+our $VERSION = $List::Util::VERSION;
+
+sub openhandle ($) {
+ my $fh = shift;
+ my $rt = reftype($fh) || '';
+
+ return defined(fileno($fh)) ? $fh : undef
+ if $rt eq 'IO';
+
+ if (reftype(\$fh) eq 'GLOB') { # handle openhandle(*DATA)
+ $fh = \(my $tmp=$fh);
+ }
+ elsif ($rt ne 'GLOB') {
+ return undef;
+ }
+
+ (tied(*$fh) or defined(fileno($fh)))
+ ? $fh : undef;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Scalar::Util - A selection of general-utility scalar subroutines
+
+=head1 SYNOPSIS
+
+ use Scalar::Util qw(blessed dualvar isweak readonly reftype tainted weaken);
+
+=head1 DESCRIPTION
+
+C<Scalar::Util> contains a selection of subroutines that people have
+expressed would be nice to have in the perl core, but the usage would
+not really be high enough to warrant the use of a keyword, and the size
+so small such that being individual extensions would be wasteful.
+
+By default C<Scalar::Util> does not export any subroutines. The
+subroutines defined are
+
+=over 4
+
+=item blessed EXPR
+
+If EXPR evaluates to a blessed reference the name of the package
+that it is blessed into is returned. Otherwise C<undef> is returned.
+
+ $scalar = "foo";
+ $class = blessed $scalar; # undef
+
+ $ref = [];
+ $class = blessed $ref; # undef
+
+ $obj = bless [], "Foo";
+ $class = blessed $obj; # "Foo"
+
+=item dualvar NUM, STRING
+
+Returns a scalar that has the value NUM in a numeric context and the
+value STRING in a string context.
+
+ $foo = dualvar 10, "Hello";
+ $num = $foo + 2; # 12
+ $str = $foo . " world"; # Hello world
+
+=item isweak EXPR
+
+If EXPR is a scalar which is a weak reference the result is true.
+
+ $ref = \$foo;
+ $weak = isweak($ref); # false
+ weaken($ref);
+ $weak = isweak($ref); # true
+
+=item openhandle FH
+
+Returns FH if FH may be used as a filehandle and is open, or FH is a tied
+handle. Otherwise C<undef> is returned.
+
+ $fh = openhandle(*STDIN); # \*STDIN
+ $fh = openhandle(\*STDIN); # \*STDIN
+ $fh = openhandle(*NOTOPEN); # undef
+ $fh = openhandle("scalar"); # undef
+
+=item readonly SCALAR
+
+Returns true if SCALAR is readonly.
+
+ sub foo { readonly($_[0]) }
+
+ $readonly = foo($bar); # false
+ $readonly = foo(0); # true
+
+=item reftype EXPR
+
+If EXPR evaluates to a reference the type of the variable referenced
+is returned. Otherwise C<undef> is returned.
+
+ $type = reftype "string"; # undef
+ $type = reftype \$var; # SCALAR
+ $type = reftype []; # ARRAY
+
+ $obj = bless {}, "Foo";
+ $type = reftype $obj; # HASH
+
+=item tainted EXPR
+
+Return true if the result of EXPR is tainted
+
+ $taint = tainted("constant"); # false
+ $taint = tainted($ENV{PWD}); # true if running under -T
+
+=item weaken REF
+
+REF will be turned into a weak reference. This means that it will not
+hold a reference count on the object it references. Also when the reference
+count on that object reaches zero, REF will be set to undef.
+
+This is useful for keeping copies of references , but you don't want to
+prevent the object being DESTROY-ed at its usual time.
+
+ {
+ my $var;
+ $ref = \$var;
+ weaken($ref); # Make $ref a weak reference
+ }
+ # $ref is now undef
+
+=back
+
+=head1 KNOWN BUGS
+
+There is a bug in perl5.6.0 with UV's that are >= 1<<31. This will
+show up as tests 8 and 9 of dualvar.t failing
+
+=head1 COPYRIGHT
+
+Copyright (c) 1997-2001 Graham Barr <gbarr@pobox.com>. All rights reserved.
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+Except weaken and isweak which are
+
+Copyright (c) 1999 Tuomas J. Lukka <lukka@iki.fi>. All rights reserved.
+This program is free software; you can redistribute it and/or modify it
+under the same terms as perl itself.
+
+=head1 BLATANT PLUG
+
+The weaken and isweak subroutines in this module and the patch to the core Perl
+were written in connection with the APress book `Tuomas J. Lukka's Definitive
+Guide to Object-Oriented Programming in Perl', to avoid explaining why certain
+things would have to be done in cumbersome ways.
+
+=cut
diff --git a/Master/xemtex/perl/lib/SelectSaver.pm b/Master/xemtex/perl/lib/SelectSaver.pm
new file mode 100644
index 00000000000..08104f47d4c
--- /dev/null
+++ b/Master/xemtex/perl/lib/SelectSaver.pm
@@ -0,0 +1,54 @@
+package SelectSaver;
+
+our $VERSION = '1.00';
+
+=head1 NAME
+
+SelectSaver - save and restore selected file handle
+
+=head1 SYNOPSIS
+
+ use SelectSaver;
+
+ {
+ my $saver = new SelectSaver(FILEHANDLE);
+ # FILEHANDLE is selected
+ }
+ # previous handle is selected
+
+ {
+ my $saver = new SelectSaver;
+ # new handle may be selected, or not
+ }
+ # previous handle is selected
+
+=head1 DESCRIPTION
+
+A C<SelectSaver> object contains a reference to the file handle that
+was selected when it was created. If its C<new> method gets an extra
+parameter, then that parameter is selected; otherwise, the selected
+file handle remains unchanged.
+
+When a C<SelectSaver> is destroyed, it re-selects the file handle
+that was selected when it was created.
+
+=cut
+
+require 5.000;
+use Carp;
+use Symbol;
+
+sub new {
+ @_ >= 1 && @_ <= 2 or croak 'usage: new SelectSaver [FILEHANDLE]';
+ my $fh = select;
+ my $self = bless [$fh], $_[0];
+ select qualify($_[1], caller) if @_ > 1;
+ $self;
+}
+
+sub DESTROY {
+ my $this = $_[0];
+ select $$this[0];
+}
+
+1;
diff --git a/Master/xemtex/perl/lib/Symbol.pm b/Master/xemtex/perl/lib/Symbol.pm
new file mode 100644
index 00000000000..98fb6763fe6
--- /dev/null
+++ b/Master/xemtex/perl/lib/Symbol.pm
@@ -0,0 +1,162 @@
+package Symbol;
+
+=head1 NAME
+
+Symbol - manipulate Perl symbols and their names
+
+=head1 SYNOPSIS
+
+ use Symbol;
+
+ $sym = gensym;
+ open($sym, "filename");
+ $_ = <$sym>;
+ # etc.
+
+ ungensym $sym; # no effect
+
+ # replace *FOO{IO} handle but not $FOO, %FOO, etc.
+ *FOO = geniosym;
+
+ print qualify("x"), "\n"; # "Test::x"
+ print qualify("x", "FOO"), "\n" # "FOO::x"
+ print qualify("BAR::x"), "\n"; # "BAR::x"
+ print qualify("BAR::x", "FOO"), "\n"; # "BAR::x"
+ print qualify("STDOUT", "FOO"), "\n"; # "main::STDOUT" (global)
+ print qualify(\*x), "\n"; # returns \*x
+ print qualify(\*x, "FOO"), "\n"; # returns \*x
+
+ use strict refs;
+ print { qualify_to_ref $fh } "foo!\n";
+ $ref = qualify_to_ref $name, $pkg;
+
+ use Symbol qw(delete_package);
+ delete_package('Foo::Bar');
+ print "deleted\n" unless exists $Foo::{'Bar::'};
+
+
+=head1 DESCRIPTION
+
+C<Symbol::gensym> creates an anonymous glob and returns a reference
+to it. Such a glob reference can be used as a file or directory
+handle.
+
+For backward compatibility with older implementations that didn't
+support anonymous globs, C<Symbol::ungensym> is also provided.
+But it doesn't do anything.
+
+C<Symbol::geniosym> creates an anonymous IO handle. This can be
+assigned into an existing glob without affecting the non-IO portions
+of the glob.
+
+C<Symbol::qualify> turns unqualified symbol names into qualified
+variable names (e.g. "myvar" -E<gt> "MyPackage::myvar"). If it is given a
+second parameter, C<qualify> uses it as the default package;
+otherwise, it uses the package of its caller. Regardless, global
+variable names (e.g. "STDOUT", "ENV", "SIG") are always qualified with
+"main::".
+
+Qualification applies only to symbol names (strings). References are
+left unchanged under the assumption that they are glob references,
+which are qualified by their nature.
+
+C<Symbol::qualify_to_ref> is just like C<Symbol::qualify> except that it
+returns a glob ref rather than a symbol name, so you can use the result
+even if C<use strict 'refs'> is in effect.
+
+C<Symbol::delete_package> wipes out a whole package namespace. Note
+this routine is not exported by default--you may want to import it
+explicitly.
+
+=cut
+
+BEGIN { require 5.005; }
+
+require Exporter;
+@ISA = qw(Exporter);
+@EXPORT = qw(gensym ungensym qualify qualify_to_ref);
+@EXPORT_OK = qw(delete_package geniosym);
+
+$VERSION = 1.04;
+
+my $genpkg = "Symbol::";
+my $genseq = 0;
+
+my %global = map {$_ => 1} qw(ARGV ARGVOUT ENV INC SIG STDERR STDIN STDOUT);
+
+#
+# Note that we never _copy_ the glob; we just make a ref to it.
+# If we did copy it, then SVf_FAKE would be set on the copy, and
+# glob-specific behaviors (e.g. C<*$ref = \&func>) wouldn't work.
+#
+sub gensym () {
+ my $name = "GEN" . $genseq++;
+ my $ref = \*{$genpkg . $name};
+ delete $$genpkg{$name};
+ $ref;
+}
+
+sub geniosym () {
+ my $sym = gensym();
+ # force the IO slot to be filled
+ select(select $sym);
+ *$sym{IO};
+}
+
+sub ungensym ($) {}
+
+sub qualify ($;$) {
+ my ($name) = @_;
+ if (!ref($name) && index($name, '::') == -1 && index($name, "'") == -1) {
+ my $pkg;
+ # Global names: special character, "^xyz", or other.
+ if ($name =~ /^(([^a-z])|(\^[a-z_]+))\z/i || $global{$name}) {
+ # RGS 2001-11-05 : translate leading ^X to control-char
+ $name =~ s/^\^([a-z_])/'qq(\c'.$1.')'/eei;
+ $pkg = "main";
+ }
+ else {
+ $pkg = (@_ > 1) ? $_[1] : caller;
+ }
+ $name = $pkg . "::" . $name;
+ }
+ $name;
+}
+
+sub qualify_to_ref ($;$) {
+ return \*{ qualify $_[0], @_ > 1 ? $_[1] : caller };
+}
+
+#
+# of Safe.pm lineage
+#
+sub delete_package ($) {
+ my $pkg = shift;
+
+ # expand to full symbol table name if needed
+
+ unless ($pkg =~ /^main::.*::$/) {
+ $pkg = "main$pkg" if $pkg =~ /^::/;
+ $pkg = "main::$pkg" unless $pkg =~ /^main::/;
+ $pkg .= '::' unless $pkg =~ /::$/;
+ }
+
+ my($stem, $leaf) = $pkg =~ m/(.*::)(\w+::)$/;
+ my $stem_symtab = *{$stem}{HASH};
+ return unless defined $stem_symtab and exists $stem_symtab->{$leaf};
+
+
+ # free all the symbols in the package
+
+ my $leaf_symtab = *{$stem_symtab->{$leaf}}{HASH};
+ foreach my $name (keys %$leaf_symtab) {
+ undef *{$pkg . $name};
+ }
+
+ # delete the symbol table
+
+ %$leaf_symtab = ();
+ delete $stem_symtab->{$leaf};
+}
+
+1;
diff --git a/Master/xemtex/perl/lib/Term/Cap.pm b/Master/xemtex/perl/lib/Term/Cap.pm
new file mode 100644
index 00000000000..03d2573d853
--- /dev/null
+++ b/Master/xemtex/perl/lib/Term/Cap.pm
@@ -0,0 +1,651 @@
+package Term::Cap;
+
+use Carp;
+use strict;
+
+use vars qw($VERSION $VMS_TERMCAP);
+use vars qw($termpat $state $first $entry);
+
+$VERSION = '1.07';
+
+# Version undef: Thu Dec 14 20:02:42 CST 1995 by sanders@bsdi.com
+# Version 1.00: Thu Nov 30 23:34:29 EST 2000 by schwern@pobox.com
+# [PATCH] $VERSION crusade, strict, tests, etc... all over lib/
+# Version 1.01: Wed May 23 00:00:00 CST 2001 by d-lewart@uiuc.edu
+# Avoid warnings in Tgetent and Tputs
+# Version 1.02: Sat Nov 17 13:50:39 GMT 2001 by jns@gellyfish.com
+# Altered layout of the POD
+# Added Test::More to PREREQ_PM in Makefile.PL
+# Fixed no argument Tgetent()
+# Version 1.03: Wed Nov 28 10:09:38 GMT 2001
+# VMS Support from Charles Lane <lane@DUPHY4.Physics.Drexel.Edu>
+# Version 1.04: Thu Nov 29 16:22:03 GMT 2001
+# Fixed warnings in test
+# Version 1.05: Mon Dec 3 15:33:49 GMT 2001
+# Don't try to fall back on infocmp if it's not there. From chromatic.
+# Version 1.06: Thu Dec 6 18:43:22 GMT 2001
+# Preload the default VMS termcap from Charles Lane
+# Don't carp at setting OSPEED unless warnings are on.
+# Version 1.07: Wed Jan 2 21:35:09 GMT 2002
+# Sanity check on infocmp output from Norton Allen
+# Repaired INSTALLDIRS thanks to Michael Schwern
+
+# TODO:
+# support Berkeley DB termcaps
+# should probably be a .xs module
+# force $FH into callers package?
+# keep $FH in object at Tgetent time?
+
+=head1 NAME
+
+Term::Cap - Perl termcap interface
+
+=head1 SYNOPSIS
+
+ require Term::Cap;
+ $terminal = Tgetent Term::Cap { TERM => undef, OSPEED => $ospeed };
+ $terminal->Trequire(qw/ce ku kd/);
+ $terminal->Tgoto('cm', $col, $row, $FH);
+ $terminal->Tputs('dl', $count, $FH);
+ $terminal->Tpad($string, $count, $FH);
+
+=head1 DESCRIPTION
+
+These are low-level functions to extract and use capabilities from
+a terminal capability (termcap) database.
+
+More information on the terminal capabilities will be found in the
+termcap manpage on most Unix-like systems.
+
+=head2 METHODS
+
+=over 4
+
+The output strings for B<Tputs> are cached for counts of 1 for performance.
+B<Tgoto> and B<Tpad> do not cache. C<$self-E<gt>{_xx}> is the raw termcap
+data and C<$self-E<gt>{xx}> is the cached version.
+
+ print $terminal->Tpad($self->{_xx}, 1);
+
+B<Tgoto>, B<Tputs>, and B<Tpad> return the string and will also
+output the string to $FH if specified.
+
+
+=cut
+
+# Preload the default VMS termcap.
+# If a different termcap is required then the text of one can be supplied
+# in $Term::Cap::VMS_TERMCAP before Tgetent is called.
+
+if ( $^O eq 'VMS') {
+ chomp (my @entry = <DATA>);
+ $VMS_TERMCAP = join '', @entry;
+}
+
+# Returns a list of termcap files to check.
+
+sub termcap_path { ## private
+ my @termcap_path;
+ # $TERMCAP, if it's a filespec
+ push(@termcap_path, $ENV{TERMCAP})
+ if ((exists $ENV{TERMCAP}) &&
+ (($^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'dos')
+ ? $ENV{TERMCAP} =~ /^[a-z]:[\\\/]/is
+ : $ENV{TERMCAP} =~ /^\//s));
+ if ((exists $ENV{TERMPATH}) && ($ENV{TERMPATH})) {
+ # Add the users $TERMPATH
+ push(@termcap_path, split(/(:|\s+)/, $ENV{TERMPATH}))
+ }
+ else {
+ # Defaults
+ push(@termcap_path,
+ $ENV{'HOME'} . '/.termcap',
+ '/etc/termcap',
+ '/usr/share/misc/termcap',
+ );
+ }
+
+ # return the list of those termcaps that exist
+ return grep(-f, @termcap_path);
+}
+
+=item B<Tgetent>
+
+Returns a blessed object reference which the user can
+then use to send the control strings to the terminal using B<Tputs>
+and B<Tgoto>.
+
+The function extracts the entry of the specified terminal
+type I<TERM> (defaults to the environment variable I<TERM>) from the
+database.
+
+It will look in the environment for a I<TERMCAP> variable. If
+found, and the value does not begin with a slash, and the terminal
+type name is the same as the environment string I<TERM>, the
+I<TERMCAP> string is used instead of reading a termcap file. If
+it does begin with a slash, the string is used as a path name of
+the termcap file to search. If I<TERMCAP> does not begin with a
+slash and name is different from I<TERM>, B<Tgetent> searches the
+files F<$HOME/.termcap>, F</etc/termcap>, and F</usr/share/misc/termcap>,
+in that order, unless the environment variable I<TERMPATH> exists,
+in which case it specifies a list of file pathnames (separated by
+spaces or colons) to be searched B<instead>. Whenever multiple
+files are searched and a tc field occurs in the requested entry,
+the entry it names must be found in the same file or one of the
+succeeding files. If there is a C<:tc=...:> in the I<TERMCAP>
+environment variable string it will continue the search in the
+files as above.
+
+The extracted termcap entry is available in the object
+as C<$self-E<gt>{TERMCAP}>.
+
+It takes a hash reference as an argument with two optional keys:
+
+=over 2
+
+=item OSPEED
+
+The terminal output bit rate (often mistakenly called the baud rate)
+for this terminal - if not set a warning will be generated
+and it will be defaulted to 9600. I<OSPEED> can be be specified as
+either a POSIX termios/SYSV termio speeds (where 9600 equals 9600) or
+an old DSD-style speed ( where 13 equals 9600).
+
+
+=item TERM
+
+The terminal type whose termcap entry will be used - if not supplied it will
+default to $ENV{TERM}: if that is not set then B<Tgetent> will croak.
+
+=back
+
+It calls C<croak> on failure.
+
+=cut
+
+sub Tgetent { ## public -- static method
+ my $class = shift;
+ my ($self) = @_;
+
+ $self = {} unless defined $self;
+ bless $self, $class;
+
+ my($term,$cap,$search,$field,$max,$tmp_term,$TERMCAP);
+ local($termpat,$state,$first,$entry); # used inside eval
+ local $_;
+
+ # Compute PADDING factor from OSPEED (to be used by Tpad)
+ if (! $self->{OSPEED}) {
+ if ( $^W ) {
+ carp "OSPEED was not set, defaulting to 9600";
+ }
+ $self->{OSPEED} = 9600;
+ }
+ if ($self->{OSPEED} < 16) {
+ # delays for old style speeds
+ my @pad = (0,200,133.3,90.9,74.3,66.7,50,33.3,16.7,8.3,5.5,4.1,2,1,.5,.2);
+ $self->{PADDING} = $pad[$self->{OSPEED}];
+ }
+ else {
+ $self->{PADDING} = 10000 / $self->{OSPEED};
+ }
+
+ $self->{TERM} = ($self->{TERM} || $ENV{TERM} || croak "TERM not set");
+ $term = $self->{TERM}; # $term is the term type we are looking for
+
+ # $tmp_term is always the next term (possibly :tc=...:) we are looking for
+ $tmp_term = $self->{TERM};
+ # protect any pattern metacharacters in $tmp_term
+ $termpat = $tmp_term; $termpat =~ s/(\W)/\\$1/g;
+
+ my $foo = (exists $ENV{TERMCAP} ? $ENV{TERMCAP} : '');
+
+ # $entry is the extracted termcap entry
+ if (($foo !~ m:^/:s) && ($foo =~ m/(^|\|)${termpat}[:|]/s)) {
+ $entry = $foo;
+ }
+
+ my @termcap_path = termcap_path();
+
+ unless (@termcap_path || $entry)
+ {
+ # last resort--fake up a termcap from terminfo
+ local $ENV{TERM} = $term;
+
+ if ( $^O eq 'VMS' ) {
+ $entry = $VMS_TERMCAP;
+ }
+ else {
+ if ( grep { -x "$_/infocmp" } split /:/, $ENV{PATH} ) {
+ eval
+ {
+ my $tmp = `infocmp -C 2>/dev/null`;
+
+ if (( $tmp !~ m%^/%s ) && ( $tmp =~ /(^|\|)${termpat}[:|]/s)) {
+ $entry = $tmp;
+ }
+ };
+ }
+ }
+ }
+
+ croak "Can't find a valid termcap file" unless @termcap_path || $entry;
+
+ $state = 1; # 0 == finished
+ # 1 == next file
+ # 2 == search again
+
+ $first = 0; # first entry (keeps term name)
+
+ $max = 32; # max :tc=...:'s
+
+ if ($entry) {
+ # ok, we're starting with $TERMCAP
+ $first++; # we're the first entry
+ # do we need to continue?
+ if ($entry =~ s/:tc=([^:]+):/:/) {
+ $tmp_term = $1;
+ # protect any pattern metacharacters in $tmp_term
+ $termpat = $tmp_term; $termpat =~ s/(\W)/\\$1/g;
+ }
+ else {
+ $state = 0; # we're already finished
+ }
+ }
+
+ # This is eval'ed inside the while loop for each file
+ $search = q{
+ while (<TERMCAP>) {
+ next if /^\\t/ || /^#/;
+ if ($_ =~ m/(^|\\|)${termpat}[:|]/o) {
+ chomp;
+ s/^[^:]*:// if $first++;
+ $state = 0;
+ while ($_ =~ s/\\\\$//) {
+ defined(my $x = <TERMCAP>) or last;
+ $_ .= $x; chomp;
+ }
+ last;
+ }
+ }
+ defined $entry or $entry = '';
+ $entry .= $_ if $_;
+ };
+
+ while ($state != 0) {
+ if ($state == 1) {
+ # get the next TERMCAP
+ $TERMCAP = shift @termcap_path
+ || croak "failed termcap lookup on $tmp_term";
+ }
+ else {
+ # do the same file again
+ # prevent endless recursion
+ $max-- || croak "failed termcap loop at $tmp_term";
+ $state = 1; # ok, maybe do a new file next time
+ }
+
+ open(TERMCAP,"< $TERMCAP\0") || croak "open $TERMCAP: $!";
+ eval $search;
+ die $@ if $@;
+ close TERMCAP;
+
+ # If :tc=...: found then search this file again
+ $entry =~ s/:tc=([^:]+):/:/ && ($tmp_term = $1, $state = 2);
+ # protect any pattern metacharacters in $tmp_term
+ $termpat = $tmp_term; $termpat =~ s/(\W)/\\$1/g;
+ }
+
+ croak "Can't find $term" if $entry eq '';
+ $entry =~ s/:+\s*:+/:/g; # cleanup $entry
+ $entry =~ s/:+/:/g; # cleanup $entry
+ $self->{TERMCAP} = $entry; # save it
+ # print STDERR "DEBUG: $entry = ", $entry, "\n";
+
+ # Precompile $entry into the object
+ $entry =~ s/^[^:]*://;
+ foreach $field (split(/:[\s:\\]*/,$entry)) {
+ if (defined $field && $field =~ /^(\w\w)$/) {
+ $self->{'_' . $field} = 1 unless defined $self->{'_' . $1};
+ # print STDERR "DEBUG: flag $1\n";
+ }
+ elsif (defined $field && $field =~ /^(\w\w)\@/) {
+ $self->{'_' . $1} = "";
+ # print STDERR "DEBUG: unset $1\n";
+ }
+ elsif (defined $field && $field =~ /^(\w\w)#(.*)/) {
+ $self->{'_' . $1} = $2 unless defined $self->{'_' . $1};
+ # print STDERR "DEBUG: numeric $1 = $2\n";
+ }
+ elsif (defined $field && $field =~ /^(\w\w)=(.*)/) {
+ # print STDERR "DEBUG: string $1 = $2\n";
+ next if defined $self->{'_' . ($cap = $1)};
+ $_ = $2;
+ s/\\E/\033/g;
+ s/\\(\d\d\d)/pack('c',oct($1) & 0177)/eg;
+ s/\\n/\n/g;
+ s/\\r/\r/g;
+ s/\\t/\t/g;
+ s/\\b/\b/g;
+ s/\\f/\f/g;
+ s/\\\^/\377/g;
+ s/\^\?/\177/g;
+ s/\^(.)/pack('c',ord($1) & 31)/eg;
+ s/\\(.)/$1/g;
+ s/\377/^/g;
+ $self->{'_' . $cap} = $_;
+ }
+ # else { carp "junk in $term ignored: $field"; }
+ }
+ $self->{'_pc'} = "\0" unless defined $self->{'_pc'};
+ $self->{'_bc'} = "\b" unless defined $self->{'_bc'};
+ $self;
+}
+
+# $terminal->Tpad($string, $cnt, $FH);
+
+=item B<Tpad>
+
+Outputs a literal string with appropriate padding for the current terminal.
+
+It takes three arguments:
+
+=over 2
+
+=item B<$string>
+
+The literal string to be output. If it starts with a number and an optional
+'*' then the padding will be increased by an amount relative to this number,
+if the '*' is present then this amount will me multiplied by $cnt. This part
+of $string is removed before output/
+
+=item B<$cnt>
+
+Will be used to modify the padding applied to string as described above.
+
+=item B<$FH>
+
+An optional filehandle (or IO::Handle ) that output will be printed to.
+
+=back
+
+The padded $string is returned.
+
+=cut
+
+sub Tpad { ## public
+ my $self = shift;
+ my($string, $cnt, $FH) = @_;
+ my($decr, $ms);
+
+ if (defined $string && $string =~ /(^[\d.]+)(\*?)(.*)$/) {
+ $ms = $1;
+ $ms *= $cnt if $2;
+ $string = $3;
+ $decr = $self->{PADDING};
+ if ($decr > .1) {
+ $ms += $decr / 2;
+ $string .= $self->{'_pc'} x ($ms / $decr);
+ }
+ }
+ print $FH $string if $FH;
+ $string;
+}
+
+# $terminal->Tputs($cap, $cnt, $FH);
+
+=item B<Tputs>
+
+Output the string for the given capability padded as appropriate without
+any parameter substitution.
+
+It takes three arguments:
+
+=over 2
+
+=item B<$cap>
+
+The capability whose string is to be output.
+
+=item B<$cnt>
+
+A count passed to Tpad to modify the padding applied to the output string.
+If $cnt is zero or one then the resulting string will be cached.
+
+=item B<$FH>
+
+An optional filehandle (or IO::Handle ) that output will be printed to.
+
+=back
+
+The appropriate string for the capability will be returned.
+
+=cut
+
+sub Tputs { ## public
+ my $self = shift;
+ my($cap, $cnt, $FH) = @_;
+ my $string;
+
+ $cnt = 0 unless $cnt;
+
+ if ($cnt > 1) {
+ $string = Tpad($self, $self->{'_' . $cap}, $cnt);
+ } else {
+ # cache result because Tpad can be slow
+ unless (exists $self->{$cap}) {
+ $self->{$cap} = exists $self->{"_$cap"} ?
+ Tpad($self, $self->{"_$cap"}, 1) : undef;
+ }
+ $string = $self->{$cap};
+ }
+ print $FH $string if $FH;
+ $string;
+}
+
+# $terminal->Tgoto($cap, $col, $row, $FH);
+
+=item B<Tgoto>
+
+B<Tgoto> decodes a cursor addressing string with the given parameters.
+
+There are four arguments:
+
+=over 2
+
+=item B<$cap>
+
+The name of the capability to be output.
+
+=item B<$col>
+
+The first value to be substituted in the output string ( usually the column
+in a cursor addressing capability )
+
+=item B<$row>
+
+The second value to be substituted in the output string (usually the row
+in cursor addressing capabilities)
+
+=item B<$FH>
+
+An optional filehandle (or IO::Handle ) to which the output string will be
+printed.
+
+=back
+
+Substitutions are made with $col and $row in the output string with the
+following sprintf() line formats:
+
+ %% output `%'
+ %d output value as in printf %d
+ %2 output value as in printf %2d
+ %3 output value as in printf %3d
+ %. output value as in printf %c
+ %+x add x to value, then do %.
+
+ %>xy if value > x then add y, no output
+ %r reverse order of two parameters, no output
+ %i increment by one, no output
+ %B BCD (16*(value/10)) + (value%10), no output
+
+ %n exclusive-or all parameters with 0140 (Datamedia 2500)
+ %D Reverse coding (value - 2*(value%16)), no output (Delta Data)
+
+The output string will be returned.
+
+=cut
+
+sub Tgoto { ## public
+ my $self = shift;
+ my($cap, $code, $tmp, $FH) = @_;
+ my $string = $self->{'_' . $cap};
+ my $result = '';
+ my $after = '';
+ my $online = 0;
+ my @tmp = ($tmp,$code);
+ my $cnt = $code;
+
+ while ($string =~ /^([^%]*)%(.)(.*)/) {
+ $result .= $1;
+ $code = $2;
+ $string = $3;
+ if ($code eq 'd') {
+ $result .= sprintf("%d",shift(@tmp));
+ }
+ elsif ($code eq '.') {
+ $tmp = shift(@tmp);
+ if ($tmp == 0 || $tmp == 4 || $tmp == 10) {
+ if ($online) {
+ ++$tmp, $after .= $self->{'_up'} if $self->{'_up'};
+ }
+ else {
+ ++$tmp, $after .= $self->{'_bc'};
+ }
+ }
+ $result .= sprintf("%c",$tmp);
+ $online = !$online;
+ }
+ elsif ($code eq '+') {
+ $result .= sprintf("%c",shift(@tmp)+ord($string));
+ $string = substr($string,1,99);
+ $online = !$online;
+ }
+ elsif ($code eq 'r') {
+ ($code,$tmp) = @tmp;
+ @tmp = ($tmp,$code);
+ $online = !$online;
+ }
+ elsif ($code eq '>') {
+ ($code,$tmp,$string) = unpack("CCa99",$string);
+ if ($tmp[$[] > $code) {
+ $tmp[$[] += $tmp;
+ }
+ }
+ elsif ($code eq '2') {
+ $result .= sprintf("%02d",shift(@tmp));
+ $online = !$online;
+ }
+ elsif ($code eq '3') {
+ $result .= sprintf("%03d",shift(@tmp));
+ $online = !$online;
+ }
+ elsif ($code eq 'i') {
+ ($code,$tmp) = @tmp;
+ @tmp = ($code+1,$tmp+1);
+ }
+ else {
+ return "OOPS";
+ }
+ }
+ $string = Tpad($self, $result . $string . $after, $cnt);
+ print $FH $string if $FH;
+ $string;
+}
+
+# $terminal->Trequire(qw/ce ku kd/);
+
+=item B<Trequire>
+
+Takes a list of capabilities as an argument and will croak if one is not
+found.
+
+=cut
+
+sub Trequire { ## public
+ my $self = shift;
+ my($cap,@undefined);
+ foreach $cap (@_) {
+ push(@undefined, $cap)
+ unless defined $self->{'_' . $cap} && $self->{'_' . $cap};
+ }
+ croak "Terminal does not support: (@undefined)" if @undefined;
+}
+
+=back
+
+=head1 EXAMPLES
+
+ use Term::Cap;
+
+ # Get terminal output speed
+ require POSIX;
+ my $termios = new POSIX::Termios;
+ $termios->getattr;
+ my $ospeed = $termios->getospeed;
+
+ # Old-style ioctl code to get ospeed:
+ # require 'ioctl.pl';
+ # ioctl(TTY,$TIOCGETP,$sgtty);
+ # ($ispeed,$ospeed) = unpack('cc',$sgtty);
+
+ # allocate and initialize a terminal structure
+ $terminal = Tgetent Term::Cap { TERM => undef, OSPEED => $ospeed };
+
+ # require certain capabilities to be available
+ $terminal->Trequire(qw/ce ku kd/);
+
+ # Output Routines, if $FH is undefined these just return the string
+
+ # Tgoto does the % expansion stuff with the given args
+ $terminal->Tgoto('cm', $col, $row, $FH);
+
+ # Tputs doesn't do any % expansion.
+ $terminal->Tputs('dl', $count = 1, $FH);
+
+=head1 COPYRIGHT AND LICENSE
+
+Please see the README file in distribution.
+
+=head1 AUTHOR
+
+This module is part of the core Perl distribution and is also maintained
+for CPAN by Jonathan Stowe <jns@gellyfish.com>.
+
+=head1 SEE ALSO
+
+termcap(5)
+
+=cut
+
+# Below is a default entry for systems where there are terminals but no
+# termcap
+1;
+__DATA__
+vt220|vt200|DEC VT220 in vt100 emulation mode:
+am:mi:xn:xo:
+co#80:li#24:
+RA=\E[?7l:SA=\E[?7h:
+ac=kkllmmjjnnwwqquuttvvxx:ae=\E(B:al=\E[L:as=\E(0:
+bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:
+cr=^M:cs=\E[%i%d;%dr:dc=\E[P:dl=\E[M:do=\E[B:
+ei=\E[4l:ho=\E[H:im=\E[4h:
+is=\E[1;24r\E[24;1H:
+nd=\E[C:
+kd=\E[B::kl=\E[D:kr=\E[C:ku=\E[A:le=^H:
+mb=\E[5m:md=\E[1m:me=\E[m:mr=\E[7m:
+kb=\0177:
+r2=\E>\E[24;1H\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E=:rc=\E8:
+sc=\E7:se=\E[27m:sf=\ED:so=\E[7m:sr=\EM:ta=^I:
+ue=\E[24m:up=\E[A:us=\E[4m:ve=\E[?25h:vi=\E[?25l:
+
diff --git a/Master/xemtex/perl/lib/Text/ParseWords.pm b/Master/xemtex/perl/lib/Text/ParseWords.pm
new file mode 100644
index 00000000000..6949c459378
--- /dev/null
+++ b/Master/xemtex/perl/lib/Text/ParseWords.pm
@@ -0,0 +1,263 @@
+package Text::ParseWords;
+
+use vars qw($VERSION @ISA @EXPORT $PERL_SINGLE_QUOTE);
+$VERSION = "3.21";
+
+require 5.000;
+
+use Exporter;
+@ISA = qw(Exporter);
+@EXPORT = qw(shellwords quotewords nested_quotewords parse_line);
+@EXPORT_OK = qw(old_shellwords);
+
+
+sub shellwords {
+ local(@lines) = @_;
+ $lines[$#lines] =~ s/\s+$//;
+ return(quotewords('\s+', 0, @lines));
+}
+
+
+
+sub quotewords {
+ my($delim, $keep, @lines) = @_;
+ my($line, @words, @allwords);
+
+
+ foreach $line (@lines) {
+ @words = parse_line($delim, $keep, $line);
+ return() unless (@words || !length($line));
+ push(@allwords, @words);
+ }
+ return(@allwords);
+}
+
+
+
+sub nested_quotewords {
+ my($delim, $keep, @lines) = @_;
+ my($i, @allwords);
+
+ for ($i = 0; $i < @lines; $i++) {
+ @{$allwords[$i]} = parse_line($delim, $keep, $lines[$i]);
+ return() unless (@{$allwords[$i]} || !length($lines[$i]));
+ }
+ return(@allwords);
+}
+
+
+
+sub parse_line {
+ # We will be testing undef strings
+ no warnings;
+ use re 'taint'; # if it's tainted, leave it as such
+
+ my($delimiter, $keep, $line) = @_;
+ my($quote, $quoted, $unquoted, $delim, $word, @pieces);
+
+ while (length($line)) {
+
+ ($quote, $quoted, undef, $unquoted, $delim, undef) =
+ $line =~ m/^(["']) # a $quote
+ ((?:\\.|(?!\1)[^\\])*) # and $quoted text
+ \1 # followed by the same quote
+ ([\000-\377]*) # and the rest
+ | # --OR--
+ ^((?:\\.|[^\\"'])*?) # an $unquoted text
+ (\Z(?!\n)|(?-x:$delimiter)|(?!^)(?=["']))
+ # plus EOL, delimiter, or quote
+ ([\000-\377]*) # the rest
+ /x; # extended layout
+ return() unless( $quote || length($unquoted) || length($delim));
+
+ $line = $+;
+
+ if ($keep) {
+ $quoted = "$quote$quoted$quote";
+ }
+ else {
+ $unquoted =~ s/\\(.)/$1/g;
+ if (defined $quote) {
+ $quoted =~ s/\\(.)/$1/g if ($quote eq '"');
+ $quoted =~ s/\\([\\'])/$1/g if ( $PERL_SINGLE_QUOTE && $quote eq "'");
+ }
+ }
+ $word .= defined $quote ? $quoted : $unquoted;
+
+ if (length($delim)) {
+ push(@pieces, $word);
+ push(@pieces, $delim) if ($keep eq 'delimiters');
+ undef $word;
+ }
+ if (!length($line)) {
+ push(@pieces, $word);
+ }
+ }
+ return(@pieces);
+}
+
+
+
+sub old_shellwords {
+
+ # Usage:
+ # use ParseWords;
+ # @words = old_shellwords($line);
+ # or
+ # @words = old_shellwords(@lines);
+
+ local($_) = join('', @_);
+ my(@words,$snippet,$field);
+
+ s/^\s+//;
+ while ($_ ne '') {
+ $field = '';
+ for (;;) {
+ if (s/^"(([^"\\]|\\.)*)"//) {
+ ($snippet = $1) =~ s#\\(.)#$1#g;
+ }
+ elsif (/^"/) {
+ return();
+ }
+ elsif (s/^'(([^'\\]|\\.)*)'//) {
+ ($snippet = $1) =~ s#\\(.)#$1#g;
+ }
+ elsif (/^'/) {
+ return();
+ }
+ elsif (s/^\\(.)//) {
+ $snippet = $1;
+ }
+ elsif (s/^([^\s\\'"]+)//) {
+ $snippet = $1;
+ }
+ else {
+ s/^\s+//;
+ last;
+ }
+ $field .= $snippet;
+ }
+ push(@words, $field);
+ }
+ @words;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Text::ParseWords - parse text into an array of tokens or array of arrays
+
+=head1 SYNOPSIS
+
+ use Text::ParseWords;
+ @lists = &nested_quotewords($delim, $keep, @lines);
+ @words = &quotewords($delim, $keep, @lines);
+ @words = &shellwords(@lines);
+ @words = &parse_line($delim, $keep, $line);
+ @words = &old_shellwords(@lines); # DEPRECATED!
+
+=head1 DESCRIPTION
+
+The &nested_quotewords() and &quotewords() functions accept a delimiter
+(which can be a regular expression)
+and a list of lines and then breaks those lines up into a list of
+words ignoring delimiters that appear inside quotes. &quotewords()
+returns all of the tokens in a single long list, while &nested_quotewords()
+returns a list of token lists corresponding to the elements of @lines.
+&parse_line() does tokenizing on a single string. The &*quotewords()
+functions simply call &parse_lines(), so if you're only splitting
+one line you can call &parse_lines() directly and save a function
+call.
+
+The $keep argument is a boolean flag. If true, then the tokens are
+split on the specified delimiter, but all other characters (quotes,
+backslashes, etc.) are kept in the tokens. If $keep is false then the
+&*quotewords() functions remove all quotes and backslashes that are
+not themselves backslash-escaped or inside of single quotes (i.e.,
+&quotewords() tries to interpret these characters just like the Bourne
+shell). NB: these semantics are significantly different from the
+original version of this module shipped with Perl 5.000 through 5.004.
+As an additional feature, $keep may be the keyword "delimiters" which
+causes the functions to preserve the delimiters in each string as
+tokens in the token lists, in addition to preserving quote and
+backslash characters.
+
+&shellwords() is written as a special case of &quotewords(), and it
+does token parsing with whitespace as a delimiter-- similar to most
+Unix shells.
+
+=head1 EXAMPLES
+
+The sample program:
+
+ use Text::ParseWords;
+ @words = &quotewords('\s+', 0, q{this is "a test" of\ quotewords \"for you});
+ $i = 0;
+ foreach (@words) {
+ print "$i: <$_>\n";
+ $i++;
+ }
+
+produces:
+
+ 0: <this>
+ 1: <is>
+ 2: <a test>
+ 3: <of quotewords>
+ 4: <"for>
+ 5: <you>
+
+demonstrating:
+
+=over 4
+
+=item 0
+
+a simple word
+
+=item 1
+
+multiple spaces are skipped because of our $delim
+
+=item 2
+
+use of quotes to include a space in a word
+
+=item 3
+
+use of a backslash to include a space in a word
+
+=item 4
+
+use of a backslash to remove the special meaning of a double-quote
+
+=item 5
+
+another simple word (note the lack of effect of the
+backslashed double-quote)
+
+=back
+
+Replacing C<&quotewords('\s+', 0, q{this is...})>
+with C<&shellwords(q{this is...})>
+is a simpler way to accomplish the same thing.
+
+=head1 AUTHORS
+
+Maintainer is Hal Pomeranz <pomeranz@netcom.com>, 1994-1997 (Original
+author unknown). Much of the code for &parse_line() (including the
+primary regexp) from Joerk Behrends <jbehrends@multimediaproduzenten.de>.
+
+Examples section another documentation provided by John Heidemann
+<johnh@ISI.EDU>
+
+Bug reports, patches, and nagging provided by lots of folks-- thanks
+everybody! Special thanks to Michael Schwern <schwern@envirolink.org>
+for assuring me that a &nested_quotewords() would be useful, and to
+Jeff Friedl <jfriedl@yahoo-inc.com> for telling me not to worry about
+error-checking (sort of-- you had to be there).
+
+=cut
diff --git a/Master/xemtex/perl/lib/Text/Tabs.pm b/Master/xemtex/perl/lib/Text/Tabs.pm
new file mode 100644
index 00000000000..b26f8f40548
--- /dev/null
+++ b/Master/xemtex/perl/lib/Text/Tabs.pm
@@ -0,0 +1,97 @@
+
+package Text::Tabs;
+
+require Exporter;
+
+@ISA = (Exporter);
+@EXPORT = qw(expand unexpand $tabstop);
+
+use vars qw($VERSION $tabstop $debug);
+$VERSION = 98.112801;
+
+use strict;
+
+BEGIN {
+ $tabstop = 8;
+ $debug = 0;
+}
+
+sub expand
+{
+ my (@l) = @_;
+ for $_ (@l) {
+ 1 while s/(^|\n)([^\t\n]*)(\t+)/
+ $1. $2 . (" " x
+ ($tabstop * length($3)
+ - (length($2) % $tabstop)))
+ /sex;
+ }
+ return @l if wantarray;
+ return $l[0];
+}
+
+sub unexpand
+{
+ my (@l) = @_;
+ my @e;
+ my $x;
+ my $line;
+ my @lines;
+ my $lastbit;
+ for $x (@l) {
+ @lines = split("\n", $x, -1);
+ for $line (@lines) {
+ $line = expand($line);
+ @e = split(/(.{$tabstop})/,$line,-1);
+ $lastbit = pop(@e);
+ $lastbit = '' unless defined $lastbit;
+ $lastbit = "\t"
+ if $lastbit eq " "x$tabstop;
+ for $_ (@e) {
+ if ($debug) {
+ my $x = $_;
+ $x =~ s/\t/^I\t/gs;
+ print "sub on '$x'\n";
+ }
+ s/ +$/\t/;
+ }
+ $line = join('',@e, $lastbit);
+ }
+ $x = join("\n", @lines);
+ }
+ return @l if wantarray;
+ return $l[0];
+}
+
+1;
+__END__
+
+
+=head1 NAME
+
+Text::Tabs -- expand and unexpand tabs per the unix expand(1) and unexpand(1)
+
+=head1 SYNOPSIS
+
+ use Text::Tabs;
+
+ $tabstop = 4;
+ @lines_without_tabs = expand(@lines_with_tabs);
+ @lines_with_tabs = unexpand(@lines_without_tabs);
+
+=head1 DESCRIPTION
+
+Text::Tabs does about what the unix utilities expand(1) and unexpand(1)
+do. Given a line with tabs in it, expand will replace the tabs with
+the appropriate number of spaces. Given a line with or without tabs in
+it, unexpand will add tabs when it can save bytes by doing so. Invisible
+compression with plain ascii!
+
+=head1 BUGS
+
+expand doesn't handle newlines very quickly -- do not feed it an
+entire document in one string. Instead feed it an array of lines.
+
+=head1 AUTHOR
+
+David Muir Sharnoff <muir@idiom.com>
diff --git a/Master/xemtex/perl/lib/Text/Wrap.pm b/Master/xemtex/perl/lib/Text/Wrap.pm
new file mode 100644
index 00000000000..8dd1f6c2512
--- /dev/null
+++ b/Master/xemtex/perl/lib/Text/Wrap.pm
@@ -0,0 +1,211 @@
+package Text::Wrap;
+
+require Exporter;
+
+@ISA = qw(Exporter);
+@EXPORT = qw(wrap fill);
+@EXPORT_OK = qw($columns $break $huge);
+
+$VERSION = 2001.0929;
+
+use vars qw($VERSION $columns $debug $break $huge $unexpand $tabstop
+ $separator);
+use strict;
+
+BEGIN {
+ $columns = 76; # <= screen width
+ $debug = 0;
+ $break = '\s';
+ $huge = 'wrap'; # alternatively: 'die' or 'overflow'
+ $unexpand = 1;
+ $tabstop = 8;
+ $separator = "\n";
+}
+
+use Text::Tabs qw(expand unexpand);
+
+sub wrap
+{
+ my ($ip, $xp, @t) = @_;
+
+ local($Text::Tabs::tabstop) = $tabstop;
+ my $r = "";
+ my $tail = pop(@t);
+ my $t = expand(join("", (map { /\s+\z/ ? ( $_ ) : ($_, ' ') } @t), $tail));
+ my $lead = $ip;
+ my $ll = $columns - length(expand($ip)) - 1;
+ my $nll = $columns - length(expand($xp)) - 1;
+ my $nl = "";
+ my $remainder = "";
+
+ use re 'taint';
+
+ pos($t) = 0;
+ while ($t !~ /\G\s*\Z/gc) {
+ if ($t =~ /\G([^\n]{0,$ll})($break|\z)/xmgc) {
+ $r .= $unexpand
+ ? unexpand($nl . $lead . $1)
+ : $nl . $lead . $1;
+ $remainder = $2;
+ } elsif ($huge eq 'wrap' && $t =~ /\G([^\n]{$ll})/gc) {
+ $r .= $unexpand
+ ? unexpand($nl . $lead . $1)
+ : $nl . $lead . $1;
+ $remainder = $separator;
+ } elsif ($huge eq 'overflow' && $t =~ /\G([^\n]*?)($break|\z)/xmgc) {
+ $r .= $unexpand
+ ? unexpand($nl . $lead . $1)
+ : $nl . $lead . $1;
+ $remainder = $2;
+ } elsif ($huge eq 'die') {
+ die "couldn't wrap '$t'";
+ } else {
+ die "This shouldn't happen";
+ }
+
+ $lead = $xp;
+ $ll = $nll;
+ $nl = $separator;
+ }
+ $r .= $remainder;
+
+ print "-----------$r---------\n" if $debug;
+
+ print "Finish up with '$lead'\n" if $debug;
+
+ $r .= $lead . substr($t, pos($t), length($t)-pos($t))
+ if pos($t) ne length($t);
+
+ print "-----------$r---------\n" if $debug;;
+
+ return $r;
+}
+
+sub fill
+{
+ my ($ip, $xp, @raw) = @_;
+ my @para;
+ my $pp;
+
+ for $pp (split(/\n\s+/, join("\n",@raw))) {
+ $pp =~ s/\s+/ /g;
+ my $x = wrap($ip, $xp, $pp);
+ push(@para, $x);
+ }
+
+ # if paragraph_indent is the same as line_indent,
+ # separate paragraphs with blank lines
+
+ my $ps = ($ip eq $xp) ? "\n\n" : "\n";
+ return join ($ps, @para);
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Text::Wrap - line wrapping to form simple paragraphs
+
+=head1 SYNOPSIS
+
+B<Example 1>
+
+ use Text::Wrap
+
+ $initial_tab = "\t"; # Tab before first line
+ $subsequent_tab = ""; # All other lines flush left
+
+ print wrap($initial_tab, $subsequent_tab, @text);
+ print fill($initial_tab, $subsequent_tab, @text);
+
+ @lines = wrap($initial_tab, $subsequent_tab, @text);
+
+ @paragraphs = fill($initial_tab, $subsequent_tab, @text);
+
+B<Example 2>
+
+ use Text::Wrap qw(wrap $columns $huge);
+
+ $columns = 132; # Wrap at 132 characters
+ $huge = 'die';
+ $huge = 'wrap';
+ $huge = 'overflow';
+
+B<Example 3>
+
+ use Text::Wrap
+
+ $Text::Wrap::columns = 72;
+ print wrap('', '', @text);
+
+=head1 DESCRIPTION
+
+C<Text::Wrap::wrap()> is a very simple paragraph formatter. It formats a
+single paragraph at a time by breaking lines at word boundries.
+Indentation is controlled for the first line (C<$initial_tab>) and
+all subsquent lines (C<$subsequent_tab>) independently. Please note:
+C<$initial_tab> and C<$subsequent_tab> are the literal strings that will
+be used: it is unlikley you would want to pass in a number.
+
+Text::Wrap::fill() is a simple multi-paragraph formatter. It formats
+each paragraph separately and then joins them together when it's done. It
+will destory any whitespace in the original text. It breaks text into
+paragraphs by looking for whitespace after a newline. In other respects
+it acts like wrap().
+
+=head1 OVERRIDES
+
+C<Text::Wrap::wrap()> has a number of variables that control its behavior.
+Because other modules might be using C<Text::Wrap::wrap()> it is suggested
+that you leave these variables alone! If you can't do that, then
+use C<local($Text::Wrap::VARIABLE) = YOURVALUE> when you change the
+values so that the original value is restored. This C<local()> trick
+will not work if you import the variable into your own namespace.
+
+Lines are wrapped at C<$Text::Wrap::columns> columns. C<$Text::Wrap::columns>
+should be set to the full width of your output device. In fact,
+every resulting line will have length of no more than C<$columns - 1>.
+
+It is possible to control which characters terminate words by
+modifying C<$Text::Wrap::break>. Set this to a string such as
+C<'[\s:]'> (to break before spaces or colons) or a pre-compiled regexp
+such as C<qr/[\s']/> (to break before spaces or apostrophes). The
+default is simply C<'\s'>; that is, words are terminated by spaces.
+(This means, among other things, that trailing punctuation such as
+full stops or commas stay with the word they are "attached" to.)
+
+Beginner note: In example 2, above C<$columns> is imported into
+the local namespace, and set locally. In example 3,
+C<$Text::Wrap::columns> is set in its own namespace without importing it.
+
+C<Text::Wrap::wrap()> starts its work by expanding all the tabs in its
+input into spaces. The last thing it does it to turn spaces back
+into tabs. If you do not want tabs in your results, set
+C<$Text::Wrap::unexapand> to a false value. Likewise if you do not
+want to use 8-character tabstops, set C<$Text::Wrap::tabstop> to
+the number of characters you do want for your tabstops.
+
+If you want to separate your lines with something other than C<\n>
+then set C<$Text::Wrap::seporator> to your preference.
+
+When words that are longer than C<$columns> are encountered, they
+are broken up. C<wrap()> adds a C<"\n"> at column C<$columns>.
+This behavior can be overridden by setting C<$huge> to
+'die' or to 'overflow'. When set to 'die', large words will cause
+C<die()> to be called. When set to 'overflow', large words will be
+left intact.
+
+Historical notes: 'die' used to be the default value of
+C<$huge>. Now, 'wrap' is the default value.
+
+=head1 EXAMPLE
+
+ print wrap("\t","","This is a bit of text that forms
+ a normal book-style paragraph");
+
+=head1 AUTHOR
+
+David Muir Sharnoff <muir@idiom.com> with help from Tim Pierce and
+many many others.
+
diff --git a/Master/xemtex/perl/lib/Tie/Hash.pm b/Master/xemtex/perl/lib/Tie/Hash.pm
new file mode 100644
index 00000000000..282006984b9
--- /dev/null
+++ b/Master/xemtex/perl/lib/Tie/Hash.pm
@@ -0,0 +1,243 @@
+package Tie::Hash;
+
+our $VERSION = '1.00';
+
+=head1 NAME
+
+Tie::Hash, Tie::StdHash, Tie::ExtraHash - base class definitions for tied hashes
+
+=head1 SYNOPSIS
+
+ package NewHash;
+ require Tie::Hash;
+
+ @ISA = (Tie::Hash);
+
+ sub DELETE { ... } # Provides needed method
+ sub CLEAR { ... } # Overrides inherited method
+
+
+ package NewStdHash;
+ require Tie::Hash;
+
+ @ISA = (Tie::StdHash);
+
+ # All methods provided by default, define only those needing overrides
+ # Accessors access the storage in %{$_[0]};
+ # TIEHANDLE should return a reference to the actual storage
+ sub DELETE { ... }
+
+ package NewExtraHash;
+ require Tie::Hash;
+
+ @ISA = (Tie::ExtraHash);
+
+ # All methods provided by default, define only those needing overrides
+ # Accessors access the storage in %{$_[0][0]};
+ # TIEHANDLE should return an array reference with the first element being
+ # the reference to the actual storage
+ sub DELETE {
+ $_[0][1]->('del', $_[0][0], $_[1]); # Call the report writer
+ delete $_[0][0]->{$_[1]}; # $_[0]->SUPER::DELETE($_[1]) }
+
+
+ package main;
+
+ tie %new_hash, 'NewHash';
+ tie %new_std_hash, 'NewStdHash';
+ tie %new_extra_hash, 'NewExtraHash',
+ sub {warn "Doing \U$_[1]\E of $_[2].\n"};
+
+=head1 DESCRIPTION
+
+This module provides some skeletal methods for hash-tying classes. See
+L<perltie> for a list of the functions required in order to tie a hash
+to a package. The basic B<Tie::Hash> package provides a C<new> method, as well
+as methods C<TIEHASH>, C<EXISTS> and C<CLEAR>. The B<Tie::StdHash> and
+B<Tie::ExtraHash> packages
+provide most methods for hashes described in L<perltie> (the exceptions
+are C<UNTIE> and C<DESTROY>). They cause tied hashes to behave exactly like standard hashes,
+and allow for selective overwriting of methods. B<Tie::Hash> grandfathers the
+C<new> method: it is used if C<TIEHASH> is not defined
+in the case a class forgets to include a C<TIEHASH> method.
+
+For developers wishing to write their own tied hashes, the required methods
+are briefly defined below. See the L<perltie> section for more detailed
+descriptive, as well as example code:
+
+=over 4
+
+=item TIEHASH classname, LIST
+
+The method invoked by the command C<tie %hash, classname>. Associates a new
+hash instance with the specified class. C<LIST> would represent additional
+arguments (along the lines of L<AnyDBM_File> and compatriots) needed to
+complete the association.
+
+=item STORE this, key, value
+
+Store datum I<value> into I<key> for the tied hash I<this>.
+
+=item FETCH this, key
+
+Retrieve the datum in I<key> for the tied hash I<this>.
+
+=item FIRSTKEY this
+
+Return the first key in the hash.
+
+=item NEXTKEY this, lastkey
+
+Return the next key in the hash.
+
+=item EXISTS this, key
+
+Verify that I<key> exists with the tied hash I<this>.
+
+The B<Tie::Hash> implementation is a stub that simply croaks.
+
+=item DELETE this, key
+
+Delete the key I<key> from the tied hash I<this>.
+
+=item CLEAR this
+
+Clear all values from the tied hash I<this>.
+
+=back
+
+=head1 Inheriting from B<Tie::StdHash>
+
+The accessor methods assume that the actual storage for the data in the tied
+hash is in the hash referenced by C<tied(%tiedhash)>. Thus overwritten
+C<TIEHANDLE> method should return a hash reference, and the remaining methods
+should operate on the hash referenced by the first argument:
+
+ package ReportHash;
+ our @ISA = 'Tie::StdHash';
+
+ sub TIEHASH {
+ my $storage = bless {}, shift;
+ warn "New ReportHash created, stored in $storage.\n";
+ $storage
+ }
+ sub STORE {
+ warn "Storing data with key $_[1] at $_[0].\n";
+ $_[0]{$_[1]} = $_[2]
+ }
+
+
+=head1 Inheriting from B<Tie::ExtraHash>
+
+The accessor methods assume that the actual storage for the data in the tied
+hash is in the hash referenced by C<(tied(%tiedhash))[0]>. Thus overwritten
+C<TIEHANDLE> method should return an array reference with the first
+element being a hash reference, and the remaining methods should operate on the
+hash C<< %{ $_[0]->[0] } >>:
+
+ package ReportHash;
+ our @ISA = 'Tie::StdHash';
+
+ sub TIEHASH {
+ my $storage = bless {}, shift;
+ warn "New ReportHash created, stored in $storage.\n";
+ [$storage, @_]
+ }
+ sub STORE {
+ warn "Storing data with key $_[1] at $_[0].\n";
+ $_[0][0]{$_[1]} = $_[2]
+ }
+
+The default C<TIEHANDLE> method stores "extra" arguments to tie() starting
+from offset 1 in the array referenced by C<tied(%tiedhash)>; this is the
+same storage algorithm as in TIEHASH subroutine above. Hence, a typical
+package inheriting from B<Tie::ExtraHash> does not need to overwrite this
+method.
+
+=head1 C<UNTIE> and C<DESTROY>
+
+The methods C<UNTIE> and C<DESTROY> are not defined in B<Tie::Hash>,
+B<Tie::StdHash>, or B<Tie::ExtraHash>. Tied hashes do not require
+presense of these methods, but if defined, the methods will be called in
+proper time, see L<perltie>.
+
+If needed, these methods should be defined by the package inheriting from
+B<Tie::Hash>, B<Tie::StdHash>, or B<Tie::ExtraHash>.
+
+=head1 MORE INFORMATION
+
+The packages relating to various DBM-related implementations (F<DB_File>,
+F<NDBM_File>, etc.) show examples of general tied hashes, as does the
+L<Config> module. While these do not utilize B<Tie::Hash>, they serve as
+good working examples.
+
+=cut
+
+use Carp;
+use warnings::register;
+
+sub new {
+ my $pkg = shift;
+ $pkg->TIEHASH(@_);
+}
+
+# Grandfather "new"
+
+sub TIEHASH {
+ my $pkg = shift;
+ if (defined &{"${pkg}::new"}) {
+ warnings::warnif("WARNING: calling ${pkg}->new since ${pkg}->TIEHASH is missing");
+ $pkg->new(@_);
+ }
+ else {
+ croak "$pkg doesn't define a TIEHASH method";
+ }
+}
+
+sub EXISTS {
+ my $pkg = ref $_[0];
+ croak "$pkg doesn't define an EXISTS method";
+}
+
+sub CLEAR {
+ my $self = shift;
+ my $key = $self->FIRSTKEY(@_);
+ my @keys;
+
+ while (defined $key) {
+ push @keys, $key;
+ $key = $self->NEXTKEY(@_, $key);
+ }
+ foreach $key (@keys) {
+ $self->DELETE(@_, $key);
+ }
+}
+
+# The Tie::StdHash package implements standard perl hash behaviour.
+# It exists to act as a base class for classes which only wish to
+# alter some parts of their behaviour.
+
+package Tie::StdHash;
+# @ISA = qw(Tie::Hash); # would inherit new() only
+
+sub TIEHASH { bless {}, $_[0] }
+sub STORE { $_[0]->{$_[1]} = $_[2] }
+sub FETCH { $_[0]->{$_[1]} }
+sub FIRSTKEY { my $a = scalar keys %{$_[0]}; each %{$_[0]} }
+sub NEXTKEY { each %{$_[0]} }
+sub EXISTS { exists $_[0]->{$_[1]} }
+sub DELETE { delete $_[0]->{$_[1]} }
+sub CLEAR { %{$_[0]} = () }
+
+package Tie::ExtraHash;
+
+sub TIEHASH { my $p = shift; bless [{}, @_], $p }
+sub STORE { $_[0][0]{$_[1]} = $_[2] }
+sub FETCH { $_[0][0]{$_[1]} }
+sub FIRSTKEY { my $a = scalar keys %{$_[0][0]}; each %{$_[0][0]} }
+sub NEXTKEY { each %{$_[0][0]} }
+sub EXISTS { exists $_[0][0]->{$_[1]} }
+sub DELETE { delete $_[0][0]->{$_[1]} }
+sub CLEAR { %{$_[0][0]} = () }
+
+1;
diff --git a/Master/xemtex/perl/lib/Tie/Scalar.pm b/Master/xemtex/perl/lib/Tie/Scalar.pm
new file mode 100644
index 00000000000..c23c12187a8
--- /dev/null
+++ b/Master/xemtex/perl/lib/Tie/Scalar.pm
@@ -0,0 +1,140 @@
+package Tie::Scalar;
+
+our $VERSION = '1.00';
+
+=head1 NAME
+
+Tie::Scalar, Tie::StdScalar - base class definitions for tied scalars
+
+=head1 SYNOPSIS
+
+ package NewScalar;
+ require Tie::Scalar;
+
+ @ISA = (Tie::Scalar);
+
+ sub FETCH { ... } # Provide a needed method
+ sub TIESCALAR { ... } # Overrides inherited method
+
+
+ package NewStdScalar;
+ require Tie::Scalar;
+
+ @ISA = (Tie::StdScalar);
+
+ # All methods provided by default, so define only what needs be overridden
+ sub FETCH { ... }
+
+
+ package main;
+
+ tie $new_scalar, 'NewScalar';
+ tie $new_std_scalar, 'NewStdScalar';
+
+=head1 DESCRIPTION
+
+This module provides some skeletal methods for scalar-tying classes. See
+L<perltie> for a list of the functions required in tying a scalar to a
+package. The basic B<Tie::Scalar> package provides a C<new> method, as well
+as methods C<TIESCALAR>, C<FETCH> and C<STORE>. The B<Tie::StdScalar>
+package provides all the methods specified in L<perltie>. It inherits from
+B<Tie::Scalar> and causes scalars tied to it to behave exactly like the
+built-in scalars, allowing for selective overloading of methods. The C<new>
+method is provided as a means of grandfathering, for classes that forget to
+provide their own C<TIESCALAR> method.
+
+For developers wishing to write their own tied-scalar classes, the methods
+are summarized below. The L<perltie> section not only documents these, but
+has sample code as well:
+
+=over 4
+
+=item TIESCALAR classname, LIST
+
+The method invoked by the command C<tie $scalar, classname>. Associates a new
+scalar instance with the specified class. C<LIST> would represent additional
+arguments (along the lines of L<AnyDBM_File> and compatriots) needed to
+complete the association.
+
+=item FETCH this
+
+Retrieve the value of the tied scalar referenced by I<this>.
+
+=item STORE this, value
+
+Store data I<value> in the tied scalar referenced by I<this>.
+
+=item DESTROY this
+
+Free the storage associated with the tied scalar referenced by I<this>.
+This is rarely needed, as Perl manages its memory quite well. But the
+option exists, should a class wish to perform specific actions upon the
+destruction of an instance.
+
+=back
+
+=head1 MORE INFORMATION
+
+The L<perltie> section uses a good example of tying scalars by associating
+process IDs with priority.
+
+=cut
+
+use Carp;
+use warnings::register;
+
+sub new {
+ my $pkg = shift;
+ $pkg->TIESCALAR(@_);
+}
+
+# "Grandfather" the new, a la Tie::Hash
+
+sub TIESCALAR {
+ my $pkg = shift;
+ if ($pkg->can('new') and $pkg ne __PACKAGE__) {
+ warnings::warnif("WARNING: calling ${pkg}->new since ${pkg}->TIESCALAR is missing");
+ $pkg->new(@_);
+ }
+ else {
+ croak "$pkg doesn't define a TIESCALAR method";
+ }
+}
+
+sub FETCH {
+ my $pkg = ref $_[0];
+ croak "$pkg doesn't define a FETCH method";
+}
+
+sub STORE {
+ my $pkg = ref $_[0];
+ croak "$pkg doesn't define a STORE method";
+}
+
+#
+# The Tie::StdScalar package provides scalars that behave exactly like
+# Perl's built-in scalars. Good base to inherit from, if you're only going to
+# tweak a small bit.
+#
+package Tie::StdScalar;
+@ISA = (Tie::Scalar);
+
+sub TIESCALAR {
+ my $class = shift;
+ my $instance = shift || undef;
+ return bless \$instance => $class;
+}
+
+sub FETCH {
+ return ${$_[0]};
+}
+
+sub STORE {
+ ${$_[0]} = $_[1];
+}
+
+sub DESTROY {
+ undef ${$_[0]};
+}
+
+1;
diff --git a/Master/xemtex/perl/lib/Time/HiRes.pm b/Master/xemtex/perl/lib/Time/HiRes.pm
new file mode 100644
index 00000000000..63375320408
--- /dev/null
+++ b/Master/xemtex/perl/lib/Time/HiRes.pm
@@ -0,0 +1,357 @@
+package Time::HiRes;
+
+use strict;
+use vars qw($VERSION $XS_VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD);
+
+require Exporter;
+use XSLoader;
+
+@ISA = qw(Exporter);
+
+@EXPORT = qw( );
+@EXPORT_OK = qw (usleep sleep ualarm alarm gettimeofday time tv_interval
+ getitimer setitimer ITIMER_REAL ITIMER_VIRTUAL ITIMER_PROF);
+
+$VERSION = '1.20_00';
+$XS_VERSION = $VERSION;
+$VERSION = eval $VERSION;
+
+sub AUTOLOAD {
+ my $constname;
+ ($constname= $AUTOLOAD) =~ s/.*:://;
+ my $val = constant($constname, @_ ? $_[0] : 0);
+ if ($!) {
+ my ($pack,$file,$line) = caller;
+ die "Your vendor has not defined Time::HiRes macro $constname, used at $file line $line.\n";
+ }
+ {
+ no strict 'refs';
+ *$AUTOLOAD = sub { $val };
+ }
+ goto &$AUTOLOAD;
+}
+
+XSLoader::load 'Time::HiRes', $XS_VERSION;
+
+# Preloaded methods go here.
+
+sub tv_interval {
+ # probably could have been done in C
+ my ($a, $b) = @_;
+ $b = [gettimeofday()] unless defined($b);
+ (${$b}[0] - ${$a}[0]) + ((${$b}[1] - ${$a}[1]) / 1_000_000);
+}
+
+# Autoload methods go after =cut, and are processed by the autosplit program.
+
+1;
+__END__
+
+=head1 NAME
+
+Time::HiRes - High resolution alarm, sleep, gettimeofday, interval timers
+
+=head1 SYNOPSIS
+
+ use Time::HiRes qw( usleep ualarm gettimeofday tv_interval );
+
+ usleep ($microseconds);
+
+ ualarm ($microseconds);
+ ualarm ($microseconds, $interval_microseconds);
+
+ $t0 = [gettimeofday];
+ ($seconds, $microseconds) = gettimeofday;
+
+ $elapsed = tv_interval ( $t0, [$seconds, $microseconds]);
+ $elapsed = tv_interval ( $t0, [gettimeofday]);
+ $elapsed = tv_interval ( $t0 );
+
+ use Time::HiRes qw ( time alarm sleep );
+
+ $now_fractions = time;
+ sleep ($floating_seconds);
+ alarm ($floating_seconds);
+ alarm ($floating_seconds, $floating_interval);
+
+ use Time::HiRes qw( setitimer getitimer
+ ITIMER_REAL ITIMER_VIRTUAL ITIMER_PROF );
+
+ setitimer ($which, $floating_seconds, $floating_interval );
+ getitimer ($which);
+
+=head1 DESCRIPTION
+
+The C<Time::HiRes> module implements a Perl interface to the usleep,
+ualarm, gettimeofday, and setitimer/getitimer system calls. See the
+EXAMPLES section below and the test scripts for usage; see your system
+documentation for the description of the underlying usleep, ualarm,
+gettimeofday, and setitimer/getitimer calls.
+
+If your system lacks gettimeofday(2) or an emulation of it you don't
+get gettimeofday() or the one-arg form of tv_interval().
+If you don't have usleep(3) or select(2) you don't get usleep()
+or sleep(). If your system don't have ualarm(3) or setitimer(2) you
+don't get ualarm() or alarm(). If you try to import an unimplemented
+function in the C<use> statement it will fail at compile time.
+
+The following functions can be imported from this module.
+No functions are exported by default.
+
+=over 4
+
+=item gettimeofday ()
+
+In array context returns a 2 element array with the seconds and
+microseconds since the epoch. In scalar context returns floating
+seconds like Time::HiRes::time() (see below).
+
+=item usleep ( $useconds )
+
+Sleeps for the number of microseconds specified. Returns the number
+of microseconds actually slept. Can sleep for more than one second
+unlike the usleep system call. See also Time::HiRes::sleep() below.
+
+=item ualarm ( $useconds [, $interval_useconds ] )
+
+Issues a ualarm call; interval_useconds is optional and will be 0 if
+unspecified, resulting in alarm-like behaviour.
+
+=item tv_interval
+
+C<tv_interval ( $ref_to_gettimeofday [, $ref_to_later_gettimeofday] )>
+
+Returns the floating seconds between the two times, which should have
+been returned by gettimeofday(). If the second argument is omitted,
+then the current time is used.
+
+=item time ()
+
+Returns a floating seconds since the epoch. This function can be
+imported, resulting in a nice drop-in replacement for the C<time>
+provided with core Perl, see the EXAMPLES below.
+
+B<NOTE 1>: this higher resolution timer can return values either less or
+more than the core time(), depending on whether your platforms rounds
+the higher resolution timer values up, down, or to the nearest to get
+the core time(), but naturally the difference should be never more than
+half a second.
+
+B<NOTE 2>: Since Sunday, September 9th, 2001 at 01:46:40 AM GMT
+(when the time() seconds since epoch rolled over to 1_000_000_000),
+the default floating point format of Perl and the seconds since epoch
+have conspired to produce an apparent bug: if you print the value of
+Time::HiRes::time() you seem to be getting only five decimals, not six
+as promised (microseconds). Not to worry, the microseconds are there
+(assuming your platform supports such granularity). What is going on
+is that the default floating point format of Perl only outputs 15
+digits. In this case that means ten digits before the decimal
+separator and five after. To see the microseconds you can use either
+printf/sprintf with C<%.6f>, or the gettimeofday() function in list
+context, which will give you the seconds and microseconds as two
+separate values.
+
+=item sleep ( $floating_seconds )
+
+Sleeps for the specified amount of seconds. Returns the number of
+seconds actually slept (a floating point value). This function can be
+imported, resulting in a nice drop-in replacement for the C<sleep>
+provided with perl, see the EXAMPLES below.
+
+=item alarm ( $floating_seconds [, $interval_floating_seconds ] )
+
+The SIGALRM signal is sent after the specfified number of seconds.
+Implemented using ualarm(). The $interval_floating_seconds argument
+is optional and will be 0 if unspecified, resulting in alarm()-like
+behaviour. This function can be imported, resulting in a nice drop-in
+replacement for the C<alarm> provided with perl, see the EXAMPLES below.
+
+=item setitimer
+
+C<setitimer ( $which, $floating_seconds [, $interval_floating_seconds ] )>
+
+Start up an interval timer: after a certain time, a signal arrives,
+and more signals may keep arriving at certain intervals. To disable
+a timer, use time of zero. If interval is set to zero (or unspecified),
+the timer is disabled B<after> the next delivered signal.
+
+Use of interval timers may interfere with alarm(), sleep(), and usleep().
+In standard-speak the "interaction is unspecified", which means that
+I<anything> may happen: it may work, it may not.
+
+In scalar context, the remaining time in the timer is returned.
+
+In list context, both the remaining time and the interval are returned.
+
+There are three interval timers: the $which can be ITIMER_REAL,
+ITIMER_VIRTUAL, or ITIMER_PROF.
+
+ITIMER_REAL results in alarm()-like behavior. Time is counted in
+I<real time>, that is, wallclock time. SIGALRM is delivered when
+the timer expires.
+
+ITIMER_VIRTUAL counts time in (process) I<virtual time>, that is, only
+when the process is running. In multiprocessor/user/CPU systems this
+may be more or less than real or wallclock time. (This time is also
+known as the I<user time>.) SIGVTALRM is delivered when the timer expires.
+
+ITIMER_PROF counts time when either the process virtual time or when
+the operating system is running on behalf of the process (such as
+I/O). (This time is also known as the I<system time>.) (Collectively
+these times are also known as the I<CPU time>.) SIGPROF is delivered
+when the timer expires. SIGPROF can interrupt system calls.
+
+The semantics of interval timers for multithreaded programs are
+system-specific, and some systems may support additional interval
+timers. See your setitimer() documentation.
+
+=item getitimer ( $which )
+
+Return the remaining time in the interval timer specified by $which.
+
+In scalar context, the remaining time is returned.
+
+In list context, both the remaining time and the interval are returned.
+The interval is always what you put in using setitimer().
+
+=back
+
+=head1 EXAMPLES
+
+ use Time::HiRes qw(usleep ualarm gettimeofday tv_interval);
+
+ $microseconds = 750_000;
+ usleep $microseconds;
+
+ # signal alarm in 2.5s & every .1s thereafter
+ ualarm 2_500_000, 100_000;
+
+ # get seconds and microseconds since the epoch
+ ($s, $usec) = gettimeofday;
+
+ # measure elapsed time
+ # (could also do by subtracting 2 gettimeofday return values)
+ $t0 = [gettimeofday];
+ # do bunch of stuff here
+ $t1 = [gettimeofday];
+ # do more stuff here
+ $t0_t1 = tv_interval $t0, $t1;
+
+ $elapsed = tv_interval ($t0, [gettimeofday]);
+ $elapsed = tv_interval ($t0); # equivalent code
+
+ #
+ # replacements for time, alarm and sleep that know about
+ # floating seconds
+ #
+ use Time::HiRes;
+ $now_fractions = Time::HiRes::time;
+ Time::HiRes::sleep (2.5);
+ Time::HiRes::alarm (10.6666666);
+
+ use Time::HiRes qw ( time alarm sleep );
+ $now_fractions = time;
+ sleep (2.5);
+ alarm (10.6666666);
+
+ # Arm an interval timer to go off first at 10 seconds and
+ # after that every 2.5 seconds, in process virtual time
+
+ use Time::HiRes qw ( setitimer ITIMER_VIRTUAL time );
+
+ $SIG{VTLARM} = sub { print time, "\n" };
+ setitimer(ITIMER_VIRTUAL, 10, 2.5);
+
+=head1 C API
+
+In addition to the perl API described above, a C API is available for
+extension writers. The following C functions are available in the
+modglobal hash:
+
+ name C prototype
+ --------------- ----------------------
+ Time::NVtime double (*)()
+ Time::U2time void (*)(UV ret[2])
+
+Both functions return equivalent information (like C<gettimeofday>)
+but with different representations. The names C<NVtime> and C<U2time>
+were selected mainly because they are operating system independent.
+(C<gettimeofday> is Un*x-centric.)
+
+Here is an example of using NVtime from C:
+
+ double (*myNVtime)();
+ SV **svp = hv_fetch(PL_modglobal, "Time::NVtime", 12, 0);
+ if (!svp) croak("Time::HiRes is required");
+ if (!SvIOK(*svp)) croak("Time::NVtime isn't a function pointer");
+ myNVtime = INT2PTR(double(*)(), SvIV(*svp));
+ printf("The current time is: %f\n", (*myNVtime)());
+
+=head1 CAVEATS
+
+Notice that the core time() maybe rounding rather than truncating.
+What this means that the core time() may be giving time one second
+later than gettimeofday(), also known as Time::HiRes::time().
+
+=head1 AUTHORS
+
+D. Wegscheid <wegscd@whirlpool.com>
+R. Schertler <roderick@argon.org>
+J. Hietaniemi <jhi@iki.fi>
+G. Aas <gisle@aas.no>
+
+=head1 REVISION
+
+$Id: HiRes.pm,v 1.20 1999/03/16 02:26:13 wegscd Exp $
+
+$Log: HiRes.pm,v $
+Revision 1.20 1999/03/16 02:26:13 wegscd
+Add documentation for NVTime and U2Time.
+
+Revision 1.19 1998/09/30 02:34:42 wegscd
+No changes, bump version.
+
+Revision 1.18 1998/07/07 02:41:35 wegscd
+No changes, bump version.
+
+Revision 1.17 1998/07/02 01:45:13 wegscd
+Bump version to 1.17
+
+Revision 1.16 1997/11/13 02:06:36 wegscd
+version bump to accomodate HiRes.xs fix.
+
+Revision 1.15 1997/11/11 02:17:59 wegscd
+POD editing, courtesy of Gisle Aas.
+
+Revision 1.14 1997/11/06 03:14:35 wegscd
+Update version # for Makefile.PL and HiRes.xs changes.
+
+Revision 1.13 1997/11/05 05:36:25 wegscd
+change version # for Makefile.pl and HiRes.xs changes.
+
+Revision 1.12 1997/10/13 20:55:33 wegscd
+Force a new version for Makefile.PL changes.
+
+Revision 1.11 1997/09/05 19:59:33 wegscd
+New version to bump version for README and Makefile.PL fixes.
+Fix bad RCS log.
+
+Revision 1.10 1997/05/23 01:11:38 wegscd
+Conditional compilation; EXPORT_FAIL fixes.
+
+Revision 1.2 1996/12/30 13:28:40 wegscd
+Update documentation for what to do when missing ualarm() and friends.
+
+Revision 1.1 1996/10/17 20:53:31 wegscd
+Fix =head1 being next to __END__ so pod2man works
+
+Revision 1.0 1996/09/03 18:25:15 wegscd
+Initial revision
+
+=head1 COPYRIGHT
+
+Copyright (c) 1996-1997 Douglas E. Wegscheid.
+All rights reserved. This program is free software; you can
+redistribute it and/or modify it under the same terms as Perl itself.
+
+=cut
diff --git a/Master/xemtex/perl/lib/Time/Local.pm b/Master/xemtex/perl/lib/Time/Local.pm
new file mode 100644
index 00000000000..faef1d78694
--- /dev/null
+++ b/Master/xemtex/perl/lib/Time/Local.pm
@@ -0,0 +1,255 @@
+package Time::Local;
+use 5.006;
+require Exporter;
+use Carp;
+use Config;
+use strict;
+use integer;
+
+our $VERSION = '1.04';
+our @ISA = qw( Exporter );
+our @EXPORT = qw( timegm timelocal );
+our @EXPORT_OK = qw( timegm_nocheck timelocal_nocheck );
+
+my @MonthDays = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
+
+# Determine breakpoint for rolling century
+my $ThisYear = (localtime())[5];
+my $Breakpoint = ($ThisYear + 50) % 100;
+my $NextCentury = $ThisYear - $ThisYear % 100;
+ $NextCentury += 100 if $Breakpoint < 50;
+my $Century = $NextCentury - 100;
+my $SecOff = 0;
+
+my (%Options, %Cheat);
+
+my $MaxInt = ((1<<(8 * $Config{intsize} - 2))-1)*2 + 1;
+my $MaxDay = int(($MaxInt-43200)/86400)-1;
+
+# Determine the EPOC day for this machine
+my $Epoc = 0;
+if ($^O eq 'vos') {
+# work around posix-977 -- VOS doesn't handle dates in
+# the range 1970-1980.
+ $Epoc = _daygm((0, 0, 0, 1, 0, 70, 4, 0));
+}
+elsif ($^O eq 'MacOS') {
+ no integer;
+
+ $MaxDay *=2 if $^O eq 'MacOS'; # time_t unsigned ... quick hack?
+ # MacOS time() is seconds since 1 Jan 1904, localtime
+ # so we need to calculate an offset to apply later
+ $Epoc = 693901;
+ $SecOff = timelocal(localtime(0)) - timelocal(gmtime(0));
+ $Epoc += _daygm(gmtime(0));
+}
+else {
+ $Epoc = _daygm(gmtime(0));
+}
+
+%Cheat=(); # clear the cache as epoc has changed
+
+sub _daygm {
+ $_[3] + ($Cheat{pack("ss",@_[4,5])} ||= do {
+ my $month = ($_[4] + 10) % 12;
+ my $year = $_[5] + 1900 - $month/10;
+ 365*$year + $year/4 - $year/100 + $year/400 + ($month*306 + 5)/10 - $Epoc
+ });
+}
+
+
+sub _timegm {
+ my $sec = $SecOff + $_[0] + 60 * $_[1] + 3600 * $_[2];
+
+ no integer;
+
+ $sec + 86400 * &_daygm;
+}
+
+
+sub timegm {
+ my ($sec,$min,$hour,$mday,$month,$year) = @_;
+
+ if ($year >= 1000) {
+ $year -= 1900;
+ }
+ elsif ($year < 100 and $year >= 0) {
+ $year += ($year > $Breakpoint) ? $Century : $NextCentury;
+ }
+
+ unless ($Options{no_range_check}) {
+ if (abs($year) >= 0x7fff) {
+ $year += 1900;
+ croak "Cannot handle date ($sec, $min, $hour, $mday, $month, $year)";
+ }
+
+ croak "Month '$month' out of range 0..11" if $month > 11 or $month < 0;
+
+ my $md = $MonthDays[$month];
+ ++$md unless $month != 1 or $year % 4 or !($year % 400);
+
+ croak "Day '$mday' out of range 1..$md" if $mday > $md or $mday < 1;
+ croak "Hour '$hour' out of range 0..23" if $hour > 23 or $hour < 0;
+ croak "Minute '$min' out of range 0..59" if $min > 59 or $min < 0;
+ croak "Second '$sec' out of range 0..59" if $sec > 59 or $sec < 0;
+ }
+
+ my $days = _daygm(undef, undef, undef, $mday, $month, $year);
+
+ unless ($Options{no_range_check} or abs($days) < $MaxDay) {
+ $year += 1900;
+ croak "Cannot handle date ($sec, $min, $hour, $mday, $month, $year)";
+ }
+
+ $sec += $SecOff + 60*$min + 3600*$hour;
+
+ no integer;
+
+ $sec + 86400*$days;
+}
+
+
+sub timegm_nocheck {
+ local $Options{no_range_check} = 1;
+ &timegm;
+}
+
+
+sub timelocal {
+ no integer;
+ my $ref_t = &timegm;
+ my $loc_t = _timegm(localtime($ref_t));
+
+ # Is there a timezone offset from GMT or are we done
+ my $zone_off = $ref_t - $loc_t
+ or return $loc_t;
+
+ # Adjust for timezone
+ $loc_t = $ref_t + $zone_off;
+
+ # Are we close to a DST change or are we done
+ my $dst_off = $ref_t - _timegm(localtime($loc_t))
+ or return $loc_t;
+
+ # Adjust for DST change
+ $loc_t + $dst_off;
+}
+
+
+sub timelocal_nocheck {
+ local $Options{no_range_check} = 1;
+ &timelocal;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Time::Local - efficiently compute time from local and GMT time
+
+=head1 SYNOPSIS
+
+ $time = timelocal($sec,$min,$hour,$mday,$mon,$year);
+ $time = timegm($sec,$min,$hour,$mday,$mon,$year);
+
+=head1 DESCRIPTION
+
+These routines are the inverse of built-in perl functions localtime()
+and gmtime(). They accept a date as a six-element array, and return
+the corresponding time(2) value in seconds since the Epoch (Midnight,
+January 1, 1970). This value can be positive or negative.
+
+It is worth drawing particular attention to the expected ranges for
+the values provided. The value for the day of the month is the actual day
+(ie 1..31), while the month is the number of months since January (0..11).
+This is consistent with the values returned from localtime() and gmtime().
+
+The timelocal() and timegm() functions perform range checking on the
+input $sec, $min, $hour, $mday, and $mon values by default. If you'd
+rather they didn't, you can explicitly import the timelocal_nocheck()
+and timegm_nocheck() functions.
+
+ use Time::Local 'timelocal_nocheck';
+
+ {
+ # The 365th day of 1999
+ print scalar localtime timelocal_nocheck 0,0,0,365,0,99;
+
+ # The twenty thousandth day since 1970
+ print scalar localtime timelocal_nocheck 0,0,0,20000,0,70;
+
+ # And even the 10,000,000th second since 1999!
+ print scalar localtime timelocal_nocheck 10000000,0,0,1,0,99;
+ }
+
+Your mileage may vary when trying these with minutes and hours,
+and it doesn't work at all for months.
+
+Strictly speaking, the year should also be specified in a form consistent
+with localtime(), i.e. the offset from 1900.
+In order to make the interpretation of the year easier for humans,
+however, who are more accustomed to seeing years as two-digit or four-digit
+values, the following conventions are followed:
+
+=over 4
+
+=item *
+
+Years greater than 999 are interpreted as being the actual year,
+rather than the offset from 1900. Thus, 1963 would indicate the year
+Martin Luther King won the Nobel prize, not the year 2863.
+
+=item *
+
+Years in the range 100..999 are interpreted as offset from 1900,
+so that 112 indicates 2012. This rule also applies to years less than zero
+(but see note below regarding date range).
+
+=item *
+
+Years in the range 0..99 are interpreted as shorthand for years in the
+rolling "current century," defined as 50 years on either side of the current
+year. Thus, today, in 1999, 0 would refer to 2000, and 45 to 2045,
+but 55 would refer to 1955. Twenty years from now, 55 would instead refer
+to 2055. This is messy, but matches the way people currently think about
+two digit dates. Whenever possible, use an absolute four digit year instead.
+
+=back
+
+The scheme above allows interpretation of a wide range of dates, particularly
+if 4-digit years are used.
+
+Please note, however, that the range of dates that can be actually be handled
+depends on the size of an integer (time_t) on a given platform.
+Currently, this is 32 bits for most systems, yielding an approximate range
+from Dec 1901 to Jan 2038.
+
+Both timelocal() and timegm() croak if given dates outside the supported
+range.
+
+=head1 IMPLEMENTATION
+
+These routines are quite efficient and yet are always guaranteed to agree
+with localtime() and gmtime(). We manage this by caching the start times
+of any months we've seen before. If we know the start time of the month,
+we can always calculate any time within the month. The start times
+are calculated using a mathematical formula. Unlike other algorithms
+that do multiple calls to gmtime().
+
+timelocal() is implemented using the same cache. We just assume that we're
+translating a GMT time, and then fudge it when we're done for the timezone
+and daylight savings arguments. Note that the timezone is evaluated for
+each date because countries occasionally change their official timezones.
+Assuming that localtime() corrects for these changes, this routine will
+also be correct.
+
+=head1 BUGS
+
+The whole scheme for interpreting two-digit years can be considered a bug.
+
+The proclivity to croak() is probably a bug.
+
+=cut
+
diff --git a/Master/xemtex/perl/lib/UNIVERSAL.pm b/Master/xemtex/perl/lib/UNIVERSAL.pm
new file mode 100644
index 00000000000..92b4fcd352a
--- /dev/null
+++ b/Master/xemtex/perl/lib/UNIVERSAL.pm
@@ -0,0 +1,118 @@
+package UNIVERSAL;
+
+our $VERSION = '1.00';
+
+# UNIVERSAL should not contain any extra subs/methods beyond those
+# that it exists to define. The use of Exporter below is a historical
+# accident that can't be fixed without breaking code. Note that we
+# *don't* set @ISA here, don't want all classes/objects inheriting from
+# Exporter. It's bad enough that all classes have a import() method
+# whenever UNIVERSAL.pm is loaded.
+require Exporter;
+*import = \&Exporter::import;
+@EXPORT_OK = qw(isa can VERSION);
+
+1;
+__END__
+
+=head1 NAME
+
+UNIVERSAL - base class for ALL classes (blessed references)
+
+=head1 SYNOPSIS
+
+ $is_io = $fd->isa("IO::Handle");
+ $is_io = Class->isa("IO::Handle");
+
+ $sub = $obj->can("print");
+ $sub = Class->can("print");
+
+ use UNIVERSAL qw( isa can VERSION );
+ $yes = isa $ref, "HASH" ;
+ $sub = can $ref, "fandango" ;
+ $ver = VERSION $obj ;
+
+=head1 DESCRIPTION
+
+C<UNIVERSAL> is the base class which all bless references will inherit from,
+see L<perlobj>.
+
+C<UNIVERSAL> provides the following methods and functions:
+
+=over 4
+
+=item $obj->isa( TYPE ), CLASS->isa( TYPE ), isa( VAL, TYPE )
+
+ C<TYPE> is a package name
+ $obj is a blessed reference or a string containing a package name
+ C<CLASS> is a package name
+ C<VAL> is any of the above or an unblessed reference
+
+When used as an instance or class method (C<$obj->isa( TYPE )>), C<isa>
+returns I<true> if $obj is blessed into package C<TYPE> or inherits from
+package C<TYPE>.
+
+When used as a class method (C<CLASS->isa( TYPE )>; sometimes referred to as a
+static method), C<isa> returns I<true> if C<CLASS> inherits from (or is itself)
+the name of the package C<TYPE> or inherits from package C<TYPE>.
+
+When used as a function, like
+
+ use UNIVERSAL qw( isa ) ;
+ $yes = isa $h, "HASH";
+ $yes = isa "Foo", "Bar";
+
+or
+
+ require UNIVERSAL ;
+ $yes = UNIVERSAL::isa $a, "ARRAY";
+
+, C<isa> returns I<true> in the same cases as above and also if C<VAL> is an
+unblessed reference to a perl variable of type C<TYPE>, such as "HASH",
+"ARRAY", or "Regexp".
+
+=item $obj->can( METHOD ), CLASS->can( METHOD ), can( VAL, METHOD )
+
+C<can> checks if the object or class has a method called C<METHOD>. If it does
+then a reference to the sub is returned. If it does not then I<undef> is
+returned. This includes methods inherited or imported by C<$obj>, C<CLASS>, or
+C<VAL>.
+
+C<can> cannot know whether an object will be able to provide a method
+through AUTOLOAD, so a return value of I<undef> does not necessarily mean
+the object will not be able to handle the method call. To get around
+this some module authors use a forward declaration (see L<perlsub>)
+for methods they will handle via AUTOLOAD. For such 'dummy' subs, C<can>
+will still return a code reference, which, when called, will fall through
+to the AUTOLOAD. If no suitable AUTOLOAD is provided, calling the coderef
+will cause an error.
+
+C<can> can be called as a class (static) method, an object method, or a
+function.
+
+When used as a function, if C<VAL> is a blessed reference or package name which
+has a method called C<METHOD>, C<can> returns a reference to the subroutine.
+If C<VAL> is not a blessed reference, or if it does not have a method
+C<METHOD>, I<undef> is returned.
+
+=item VERSION ( [ REQUIRE ] )
+
+C<VERSION> will return the value of the variable C<$VERSION> in the
+package the object is blessed into. If C<REQUIRE> is given then
+it will do a comparison and die if the package version is not
+greater than or equal to C<REQUIRE>.
+
+C<VERSION> can be called as either a class (static) method, an object method or
+or a function.
+
+
+=back
+
+These subroutines should I<not> be imported via S<C<use UNIVERSAL qw(...)>>.
+If you want simple local access to them you can do
+
+ *isa = \&UNIVERSAL::isa;
+
+to import isa into your package.
+
+=cut
diff --git a/Master/xemtex/perl/lib/XSLoader.pm b/Master/xemtex/perl/lib/XSLoader.pm
new file mode 100644
index 00000000000..c5b3300a458
--- /dev/null
+++ b/Master/xemtex/perl/lib/XSLoader.pm
@@ -0,0 +1,138 @@
+# Generated from XSLoader.pm.PL (resolved %Config::Config value)
+
+package XSLoader;
+
+# And Gandalf said: 'Many folk like to know beforehand what is to
+# be set on the table; but those who have laboured to prepare the
+# feast like to keep their secret; for wonder makes the words of
+# praise louder.'
+
+# (Quote from Tolkien sugested by Anno Siegel.)
+#
+# See pod text at end of file for documentation.
+# See also ext/DynaLoader/README in source tree for other information.
+#
+# Tim.Bunce@ig.co.uk, August 1994
+
+$VERSION = "0.01"; # avoid typo warning
+
+# enable debug/trace messages from DynaLoader perl code
+# $dl_debug = $ENV{PERL_DL_DEBUG} || 0 unless defined $dl_debug;
+
+ my $dl_dlext = 'dll';
+
+package DynaLoader;
+
+# No prizes for guessing why we don't say 'bootstrap DynaLoader;' here.
+# NOTE: All dl_*.xs (including dl_none.xs) define a dl_error() XSUB
+boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) &&
+ !defined(&dl_error);
+package XSLoader;
+
+1; # End of main code
+
+# The bootstrap function cannot be autoloaded (without complications)
+# so we define it here:
+
+sub load {
+ package DynaLoader;
+
+ my($module) = $_[0];
+
+ # work with static linking too
+ my $b = "$module\::bootstrap";
+ goto &$b if defined &$b;
+
+ goto retry unless $module and defined &dl_load_file;
+
+ my @modparts = split(/::/,$module);
+ my $modfname = $modparts[-1];
+
+ my $modpname = join('/',@modparts);
+ my $modlibname = (caller())[1];
+ my $c = @modparts;
+ $modlibname =~ s,[\\/][^\\/]+$,, while $c--; # Q&D basename
+ my $file = "$modlibname/auto/$modpname/$modfname.$dl_dlext";
+
+# print STDERR "XSLoader::load for $module ($file)\n" if $dl_debug;
+
+ my $bs = $file;
+ $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library
+
+ goto retry if not -f $file or -s $bs;
+
+ my $bootname = "boot_$module";
+ $bootname =~ s/\W/_/g;
+ @dl_require_symbols = ($bootname);
+
+ my $boot_symbol_ref;
+
+ if ($^O eq 'darwin') {
+ if ($boot_symbol_ref = dl_find_symbol(0, $bootname)) {
+ goto boot; #extension library has already been loaded, e.g. darwin
+ }
+ }
+
+ # Many dynamic extension loading problems will appear to come from
+ # this section of code: XYZ failed at line 123 of DynaLoader.pm.
+ # Often these errors are actually occurring in the initialisation
+ # C code of the extension XS file. Perl reports the error as being
+ # in this perl code simply because this was the last perl code
+ # it executed.
+
+ my $libref = dl_load_file($file, 0) or do {
+ require Carp;
+ Carp::croak("Can't load '$file' for module $module: " . dl_error());
+ };
+ push(@dl_librefs,$libref); # record loaded object
+
+ my @unresolved = dl_undef_symbols();
+ if (@unresolved) {
+ require Carp;
+ Carp::carp("Undefined symbols present after loading $file: @unresolved\n");
+ }
+
+ $boot_symbol_ref = dl_find_symbol($libref, $bootname) or do {
+ require Carp;
+ Carp::croak("Can't find '$bootname' symbol in $file\n");
+ };
+
+ push(@dl_modules, $module); # record loaded module
+
+ boot:
+ my $xs = dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file);
+
+ # See comment block above
+ return &$xs(@_);
+
+ retry:
+ require DynaLoader;
+ goto &DynaLoader::bootstrap_inherit;
+}
+
+__END__
+
+=head1 NAME
+
+XSLoader - Dynamically load C libraries into Perl code
+
+=head1 SYNOPSIS
+
+ package YourPackage;
+ use XSLoader;
+
+ XSLoader::load 'YourPackage', @args;
+
+=head1 DESCRIPTION
+
+This module defines a standard I<simplified> interface to the dynamic
+linking mechanisms available on many platforms. Its primary purpose is
+to implement cheap automatic dynamic loading of Perl modules.
+
+For more complicated interface see L<DynaLoader>.
+
+=head1 AUTHOR
+
+Ilya Zakharevich: extraction from DynaLoader.
+
+=cut
diff --git a/Master/xemtex/perl/lib/attributes.pm b/Master/xemtex/perl/lib/attributes.pm
new file mode 100644
index 00000000000..2dacd02751e
--- /dev/null
+++ b/Master/xemtex/perl/lib/attributes.pm
@@ -0,0 +1,414 @@
+package attributes;
+
+our $VERSION = 0.05;
+
+@EXPORT_OK = qw(get reftype);
+@EXPORT = ();
+%EXPORT_TAGS = (ALL => [@EXPORT, @EXPORT_OK]);
+
+use strict;
+
+sub croak {
+ require Carp;
+ goto &Carp::croak;
+}
+
+sub carp {
+ require Carp;
+ goto &Carp::carp;
+}
+
+## forward declaration(s) rather than wrapping the bootstrap call in BEGIN{}
+#sub reftype ($) ;
+#sub _fetch_attrs ($) ;
+#sub _guess_stash ($) ;
+#sub _modify_attrs ;
+#sub _warn_reserved () ;
+#
+# The extra trips through newATTRSUB in the interpreter wipe out any savings
+# from avoiding the BEGIN block. Just do the bootstrap now.
+BEGIN { bootstrap attributes }
+
+sub import {
+ @_ > 2 && ref $_[2] or do {
+ require Exporter;
+ goto &Exporter::import;
+ };
+ my (undef,$home_stash,$svref,@attrs) = @_;
+
+ my $svtype = uc reftype($svref);
+ my $pkgmeth;
+ $pkgmeth = UNIVERSAL::can($home_stash, "MODIFY_${svtype}_ATTRIBUTES")
+ if defined $home_stash && $home_stash ne '';
+ my @badattrs;
+ if ($pkgmeth) {
+ my @pkgattrs = _modify_attrs($svref, @attrs);
+ @badattrs = $pkgmeth->($home_stash, $svref, @attrs);
+ if (!@badattrs && @pkgattrs) {
+ return unless _warn_reserved;
+ @pkgattrs = grep { m/\A[[:lower:]]+(?:\z|\()/ } @pkgattrs;
+ if (@pkgattrs) {
+ for my $attr (@pkgattrs) {
+ $attr =~ s/\(.+\z//s;
+ }
+ my $s = ((@pkgattrs == 1) ? '' : 's');
+ carp "$svtype package attribute$s " .
+ "may clash with future reserved word$s: " .
+ join(' : ' , @pkgattrs);
+ }
+ }
+ }
+ else {
+ @badattrs = _modify_attrs($svref, @attrs);
+ }
+ if (@badattrs) {
+ croak "Invalid $svtype attribute" .
+ (( @badattrs == 1 ) ? '' : 's') .
+ ": " .
+ join(' : ', @badattrs);
+ }
+}
+
+sub get ($) {
+ @_ == 1 && ref $_[0] or
+ croak 'Usage: '.__PACKAGE__.'::get $ref';
+ my $svref = shift;
+ my $svtype = uc reftype $svref;
+ my $stash = _guess_stash $svref;
+ $stash = caller unless defined $stash;
+ my $pkgmeth;
+ $pkgmeth = UNIVERSAL::can($stash, "FETCH_${svtype}_ATTRIBUTES")
+ if defined $stash && $stash ne '';
+ return $pkgmeth ?
+ (_fetch_attrs($svref), $pkgmeth->($stash, $svref)) :
+ (_fetch_attrs($svref))
+ ;
+}
+
+sub require_version { goto &UNIVERSAL::VERSION }
+
+1;
+__END__
+#The POD goes here
+
+=head1 NAME
+
+attributes - get/set subroutine or variable attributes
+
+=head1 SYNOPSIS
+
+ sub foo : method ;
+ my ($x,@y,%z) : Bent = 1;
+ my $s = sub : method { ... };
+
+ use attributes (); # optional, to get subroutine declarations
+ my @attrlist = attributes::get(\&foo);
+
+ use attributes 'get'; # import the attributes::get subroutine
+ my @attrlist = get \&foo;
+
+=head1 DESCRIPTION
+
+Subroutine declarations and definitions may optionally have attribute lists
+associated with them. (Variable C<my> declarations also may, but see the
+warning below.) Perl handles these declarations by passing some information
+about the call site and the thing being declared along with the attribute
+list to this module. In particular, the first example above is equivalent to
+the following:
+
+ use attributes __PACKAGE__, \&foo, 'method';
+
+The second example in the synopsis does something equivalent to this:
+
+ use attributes ();
+ my ($x,@y,%z);
+ attributes::->import(__PACKAGE__, \$x, 'Bent');
+ attributes::->import(__PACKAGE__, \@y, 'Bent');
+ attributes::->import(__PACKAGE__, \%z, 'Bent');
+ ($x,@y,%z) = 1;
+
+Yes, that's a lot of expansion.
+
+B<WARNING>: attribute declarations for variables are still evolving.
+The semantics and interfaces of such declarations could change in
+future versions. They are present for purposes of experimentation
+with what the semantics ought to be. Do not rely on the current
+implementation of this feature.
+
+There are only a few attributes currently handled by Perl itself (or
+directly by this module, depending on how you look at it.) However,
+package-specific attributes are allowed by an extension mechanism.
+(See L<"Package-specific Attribute Handling"> below.)
+
+The setting of subroutine attributes happens at compile time.
+Variable attributes in C<our> declarations are also applied at compile time.
+However, C<my> variables get their attributes applied at run-time.
+This means that you have to I<reach> the run-time component of the C<my>
+before those attributes will get applied. For example:
+
+ my $x : Bent = 42 if 0;
+
+will neither assign 42 to $x I<nor> will it apply the C<Bent> attribute
+to the variable.
+
+An attempt to set an unrecognized attribute is a fatal error. (The
+error is trappable, but it still stops the compilation within that
+C<eval>.) Setting an attribute with a name that's all lowercase
+letters that's not a built-in attribute (such as "foo") will result in
+a warning with B<-w> or C<use warnings 'reserved'>.
+
+=head2 Built-in Attributes
+
+The following are the built-in attributes for subroutines:
+
+=over 4
+
+=item locked
+
+Setting this attribute is only meaningful when the subroutine or
+method is to be called by multiple threads. When set on a method
+subroutine (i.e., one marked with the B<method> attribute below),
+Perl ensures that any invocation of it implicitly locks its first
+argument before execution. When set on a non-method subroutine,
+Perl ensures that a lock is taken on the subroutine itself before
+execution. The semantics of the lock are exactly those of one
+explicitly taken with the C<lock> operator immediately after the
+subroutine is entered.
+
+=item method
+
+Indicates that the referenced subroutine is a method.
+This has a meaning when taken together with the B<locked> attribute,
+as described there. It also means that a subroutine so marked
+will not trigger the "Ambiguous call resolved as CORE::%s" warning.
+
+=item lvalue
+
+Indicates that the referenced subroutine is a valid lvalue and can
+be assigned to. The subroutine must return a modifiable value such
+as a scalar variable, as described in L<perlsub>.
+
+=back
+
+For global variables there is C<unique> attribute: see L<perlfunc/our>.
+
+=head2 Available Subroutines
+
+The following subroutines are available for general use once this module
+has been loaded:
+
+=over 4
+
+=item get
+
+This routine expects a single parameter--a reference to a
+subroutine or variable. It returns a list of attributes, which may be
+empty. If passed invalid arguments, it uses die() (via L<Carp::croak|Carp>)
+to raise a fatal exception. If it can find an appropriate package name
+for a class method lookup, it will include the results from a
+C<FETCH_I<type>_ATTRIBUTES> call in its return list, as described in
+L<"Package-specific Attribute Handling"> below.
+Otherwise, only L<built-in attributes|"Built-in Attributes"> will be returned.
+
+=item reftype
+
+This routine expects a single parameter--a reference to a subroutine or
+variable. It returns the built-in type of the referenced variable,
+ignoring any package into which it might have been blessed.
+This can be useful for determining the I<type> value which forms part of
+the method names described in L<"Package-specific Attribute Handling"> below.
+
+=back
+
+Note that these routines are I<not> exported by default.
+
+=head2 Package-specific Attribute Handling
+
+B<WARNING>: the mechanisms described here are still experimental. Do not
+rely on the current implementation. In particular, there is no provision
+for applying package attributes to 'cloned' copies of subroutines used as
+closures. (See L<perlref/"Making References"> for information on closures.)
+Package-specific attribute handling may change incompatibly in a future
+release.
+
+When an attribute list is present in a declaration, a check is made to see
+whether an attribute 'modify' handler is present in the appropriate package
+(or its @ISA inheritance tree). Similarly, when C<attributes::get> is
+called on a valid reference, a check is made for an appropriate attribute
+'fetch' handler. See L<"EXAMPLES"> to see how the "appropriate package"
+determination works.
+
+The handler names are based on the underlying type of the variable being
+declared or of the reference passed. Because these attributes are
+associated with subroutine or variable declarations, this deliberately
+ignores any possibility of being blessed into some package. Thus, a
+subroutine declaration uses "CODE" as its I<type>, and even a blessed
+hash reference uses "HASH" as its I<type>.
+
+The class methods invoked for modifying and fetching are these:
+
+=over 4
+
+=item FETCH_I<type>_ATTRIBUTES
+
+This method receives a single argument, which is a reference to the
+variable or subroutine for which package-defined attributes are desired.
+The expected return value is a list of associated attributes.
+This list may be empty.
+
+=item MODIFY_I<type>_ATTRIBUTES
+
+This method is called with two fixed arguments, followed by the list of
+attributes from the relevant declaration. The two fixed arguments are
+the relevant package name and a reference to the declared subroutine or
+variable. The expected return value as a list of attributes which were
+not recognized by this handler. Note that this allows for a derived class
+to delegate a call to its base class, and then only examine the attributes
+which the base class didn't already handle for it.
+
+The call to this method is currently made I<during> the processing of the
+declaration. In particular, this means that a subroutine reference will
+probably be for an undefined subroutine, even if this declaration is
+actually part of the definition.
+
+=back
+
+Calling C<attributes::get()> from within the scope of a null package
+declaration C<package ;> for an unblessed variable reference will
+not provide any starting package name for the 'fetch' method lookup.
+Thus, this circumstance will not result in a method call for package-defined
+attributes. A named subroutine knows to which symbol table entry it belongs
+(or originally belonged), and it will use the corresponding package.
+An anonymous subroutine knows the package name into which it was compiled
+(unless it was also compiled with a null package declaration), and so it
+will use that package name.
+
+=head2 Syntax of Attribute Lists
+
+An attribute list is a sequence of attribute specifications, separated by
+whitespace or a colon (with optional whitespace).
+Each attribute specification is a simple
+name, optionally followed by a parenthesised parameter list.
+If such a parameter list is present, it is scanned past as for the rules
+for the C<q()> operator. (See L<perlop/"Quote and Quote-like Operators">.)
+The parameter list is passed as it was found, however, and not as per C<q()>.
+
+Some examples of syntactically valid attribute lists:
+
+ switch(10,foo(7,3)) : expensive
+ Ugly('\(") :Bad
+ _5x5
+ locked method
+
+Some examples of syntactically invalid attribute lists (with annotation):
+
+ switch(10,foo() # ()-string not balanced
+ Ugly('(') # ()-string not balanced
+ 5x5 # "5x5" not a valid identifier
+ Y2::north # "Y2::north" not a simple identifier
+ foo + bar # "+" neither a colon nor whitespace
+
+=head1 EXPORTS
+
+=head2 Default exports
+
+None.
+
+=head2 Available exports
+
+The routines C<get> and C<reftype> are exportable.
+
+=head2 Export tags defined
+
+The C<:ALL> tag will get all of the above exports.
+
+=head1 EXAMPLES
+
+Here are some samples of syntactically valid declarations, with annotation
+as to how they resolve internally into C<use attributes> invocations by
+perl. These examples are primarily useful to see how the "appropriate
+package" is found for the possible method lookups for package-defined
+attributes.
+
+=over 4
+
+=item 1.
+
+Code:
+
+ package Canine;
+ package Dog;
+ my Canine $spot : Watchful ;
+
+Effect:
+
+ use attributes ();
+ attributes::->import(Canine => \$spot, "Watchful");
+
+=item 2.
+
+Code:
+
+ package Felis;
+ my $cat : Nervous;
+
+Effect:
+
+ use attributes ();
+ attributes::->import(Felis => \$cat, "Nervous");
+
+=item 3.
+
+Code:
+
+ package X;
+ sub foo : locked ;
+
+Effect:
+
+ use attributes X => \&foo, "locked";
+
+=item 4.
+
+Code:
+
+ package X;
+ sub Y::x : locked { 1 }
+
+Effect:
+
+ use attributes Y => \&Y::x, "locked";
+
+=item 5.
+
+Code:
+
+ package X;
+ sub foo { 1 }
+
+ package Y;
+ BEGIN { *bar = \&X::foo; }
+
+ package Z;
+ sub Y::bar : locked ;
+
+Effect:
+
+ use attributes X => \&X::foo, "locked";
+
+=back
+
+This last example is purely for purposes of completeness. You should not
+be trying to mess with the attributes of something in a package that's
+not your own.
+
+=head1 SEE ALSO
+
+L<perlsub/"Private Variables via my()"> and
+L<perlsub/"Subroutine Attributes"> for details on the basic declarations;
+L<attrs> for the obsolescent form of subroutine attribute specification
+which this module replaces;
+L<perlfunc/use> for details on the normal invocation mechanism.
+
+=cut
+
diff --git a/Master/xemtex/perl/lib/auto/B/B.dll b/Master/xemtex/perl/lib/auto/B/B.dll
new file mode 100644
index 00000000000..78e25799a7e
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/B/B.dll
Binary files differ
diff --git a/Master/xemtex/perl/lib/auto/Cwd/Cwd.dll b/Master/xemtex/perl/lib/auto/Cwd/Cwd.dll
new file mode 100644
index 00000000000..e06e55e5288
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/Cwd/Cwd.dll
Binary files differ
diff --git a/Master/xemtex/perl/lib/auto/Data/Dumper/Dumper.dll b/Master/xemtex/perl/lib/auto/Data/Dumper/Dumper.dll
new file mode 100644
index 00000000000..f6bbfbc9e70
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/Data/Dumper/Dumper.dll
Binary files differ
diff --git a/Master/xemtex/perl/lib/auto/Digest/MD5/MD5.dll b/Master/xemtex/perl/lib/auto/Digest/MD5/MD5.dll
new file mode 100644
index 00000000000..4892ae02cec
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/Digest/MD5/MD5.dll
Binary files differ
diff --git a/Master/xemtex/perl/lib/auto/DynaLoader/autosplit.ix b/Master/xemtex/perl/lib/auto/DynaLoader/autosplit.ix
new file mode 100644
index 00000000000..d7605efa074
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/DynaLoader/autosplit.ix
@@ -0,0 +1,8 @@
+# Index created by AutoSplit for ../LIB\DynaLoader.pm
+# (file acts as timestamp)
+package DynaLoader;
+sub dl_findfile ;
+sub dl_expandspec ;
+sub dl_find_symbol_anywhere
+;
+1;
diff --git a/Master/xemtex/perl/lib/auto/DynaLoader/dl_expandspec.al b/Master/xemtex/perl/lib/auto/DynaLoader/dl_expandspec.al
new file mode 100644
index 00000000000..2943afff245
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/DynaLoader/dl_expandspec.al
@@ -0,0 +1,34 @@
+# NOTE: Derived from ../LIB\DynaLoader.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package DynaLoader;
+
+#line 373 "../LIB\DynaLoader.pm (autosplit into ..\lib\auto\DynaLoader\dl_expandspec.al)"
+sub dl_expandspec {
+ my($spec) = @_;
+ # Optional function invoked if DynaLoader.pm sets $do_expand.
+ # Most systems do not require or use this function.
+ # Some systems may implement it in the dl_*.xs file in which case
+ # this autoload version will not be called but is harmless.
+
+ # This function is designed to deal with systems which treat some
+ # 'filenames' in a special way. For example VMS 'Logical Names'
+ # (something like unix environment variables - but different).
+ # This function should recognise such names and expand them into
+ # full file paths.
+ # Must return undef if $spec is invalid or file does not exist.
+
+ my $file = $spec; # default output to input
+
+ if ($Is_VMS) { # dl_expandspec should be defined in dl_vms.xs
+ require Carp;
+ Carp::croak("dl_expandspec: should be defined in XS file!\n");
+ } else {
+ return undef unless -f $file;
+ }
+ print STDERR "dl_expandspec($spec) => $file\n" if $dl_debug;
+ $file;
+}
+
+# end of DynaLoader::dl_expandspec
+1;
diff --git a/Master/xemtex/perl/lib/auto/DynaLoader/dl_find_symbol_anywhere.al b/Master/xemtex/perl/lib/auto/DynaLoader/dl_find_symbol_anywhere.al
new file mode 100644
index 00000000000..b4a6ad15f09
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/DynaLoader/dl_find_symbol_anywhere.al
@@ -0,0 +1,19 @@
+# NOTE: Derived from ../LIB\DynaLoader.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package DynaLoader;
+
+#line 399 "../LIB\DynaLoader.pm (autosplit into ..\lib\auto\DynaLoader\dl_find_symbol_anywhere.al)"
+sub dl_find_symbol_anywhere
+{
+ my $sym = shift;
+ my $libref;
+ foreach $libref (@dl_librefs) {
+ my $symref = dl_find_symbol($libref,$sym);
+ return $symref if $symref;
+ }
+ return undef;
+}
+
+1;
+# end of DynaLoader::dl_find_symbol_anywhere
diff --git a/Master/xemtex/perl/lib/auto/DynaLoader/dl_findfile.al b/Master/xemtex/perl/lib/auto/DynaLoader/dl_findfile.al
new file mode 100644
index 00000000000..d91cf60d194
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/DynaLoader/dl_findfile.al
@@ -0,0 +1,115 @@
+# NOTE: Derived from ../LIB\DynaLoader.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package DynaLoader;
+
+#line 265 "../LIB\DynaLoader.pm (autosplit into ..\lib\auto\DynaLoader\dl_findfile.al)"
+sub dl_findfile {
+ # Read ext/DynaLoader/DynaLoader.doc for detailed information.
+ # This function does not automatically consider the architecture
+ # or the perl library auto directories.
+ my (@args) = @_;
+ my (@dirs, $dir); # which directories to search
+ my (@found); # full paths to real files we have found
+ my $dl_ext= 'dll'; # $Config::Config{'dlext'} suffix for perl extensions
+ my $dl_so = 'dll'; # $Config::Config{'so'} suffix for shared libraries
+
+ print STDERR "dl_findfile(@args)\n" if $dl_debug;
+
+ # accumulate directories but process files as they appear
+ arg: foreach(@args) {
+ # Special fast case: full filepath requires no search
+ if ($Is_VMS && m%[:>/\]]% && -f $_) {
+ push(@found,dl_expandspec(VMS::Filespec::vmsify($_)));
+ last arg unless wantarray;
+ next;
+ }
+ elsif ($Is_MacOS) {
+ if (m/:/ && -f $_) {
+ push(@found,$_);
+ last arg unless wantarray;
+ }
+ }
+ elsif (m:/: && -f $_ && !$do_expand) {
+ push(@found,$_);
+ last arg unless wantarray;
+ next;
+ }
+
+ # Deal with directories first:
+ # Using a -L prefix is the preferred option (faster and more robust)
+ if (m:^-L:) { s/^-L//; push(@dirs, $_); next; }
+
+ if ($Is_MacOS) {
+ # Otherwise we try to try to spot directories by a heuristic
+ # (this is a more complicated issue than it first appears)
+ if (m/:/ && -d $_) { push(@dirs, $_); next; }
+ # Only files should get this far...
+ my(@names, $name); # what filenames to look for
+ s/^-l//;
+ push(@names, $_);
+ foreach $dir (@dirs, @dl_library_path) {
+ next unless -d $dir;
+ $dir =~ s/^([^:]+)$/:$1/;
+ $dir =~ s/:$//;
+ foreach $name (@names) {
+ my($file) = "$dir:$name";
+ print STDERR " checking in $dir for $name\n" if $dl_debug;
+ if (-f $file) {
+ push(@found, $file);
+ next arg; # no need to look any further
+ }
+ }
+ }
+ next;
+ }
+
+ # Otherwise we try to try to spot directories by a heuristic
+ # (this is a more complicated issue than it first appears)
+ if (m:/: && -d $_) { push(@dirs, $_); next; }
+
+ # VMS: we may be using native VMS directory syntax instead of
+ # Unix emulation, so check this as well
+ if ($Is_VMS && /[:>\]]/ && -d $_) { push(@dirs, $_); next; }
+
+ # Only files should get this far...
+ my(@names, $name); # what filenames to look for
+ if (m:-l: ) { # convert -lname to appropriate library name
+ s/-l//;
+ push(@names,"lib$_.$dl_so");
+ push(@names,"lib$_.a");
+ } else { # Umm, a bare name. Try various alternatives:
+ # these should be ordered with the most likely first
+ push(@names,"$_.$dl_ext") unless m/\.$dl_ext$/o;
+ push(@names,"$_.$dl_so") unless m/\.$dl_so$/o;
+ push(@names,"lib$_.$dl_so") unless m:/:;
+ push(@names,"$_.a") if !m/\.a$/ and $dlsrc eq "dl_dld.xs";
+ push(@names, $_);
+ }
+ foreach $dir (@dirs, @dl_library_path) {
+ next unless -d $dir;
+ chop($dir = VMS::Filespec::unixpath($dir)) if $Is_VMS;
+ foreach $name (@names) {
+ my($file) = "$dir/$name";
+ print STDERR " checking in $dir for $name\n" if $dl_debug;
+ $file = ($do_expand) ? dl_expandspec($file) : (-f $file && $file);
+ #$file = _check_file($file);
+ if ($file) {
+ push(@found, $file);
+ next arg; # no need to look any further
+ }
+ }
+ }
+ }
+ if ($dl_debug) {
+ foreach(@dirs) {
+ print STDERR " dl_findfile ignored non-existent directory: $_\n" unless -d $_;
+ }
+ print STDERR "dl_findfile found: @found\n";
+ }
+ return $found[0] unless wantarray;
+ @found;
+}
+
+# end of DynaLoader::dl_findfile
+1;
diff --git a/Master/xemtex/perl/lib/auto/Fcntl/Fcntl.dll b/Master/xemtex/perl/lib/auto/Fcntl/Fcntl.dll
new file mode 100644
index 00000000000..5cea87d315c
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/Fcntl/Fcntl.dll
Binary files differ
diff --git a/Master/xemtex/perl/lib/auto/File/Glob/Glob.dll b/Master/xemtex/perl/lib/auto/File/Glob/Glob.dll
new file mode 100644
index 00000000000..0ba64866dd3
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/File/Glob/Glob.dll
Binary files differ
diff --git a/Master/xemtex/perl/lib/auto/IO/IO.dll b/Master/xemtex/perl/lib/auto/IO/IO.dll
new file mode 100644
index 00000000000..60d92c3a6c0
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/IO/IO.dll
Binary files differ
diff --git a/Master/xemtex/perl/lib/auto/List/Util/Util.dll b/Master/xemtex/perl/lib/auto/List/Util/Util.dll
new file mode 100644
index 00000000000..efb06c7f240
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/List/Util/Util.dll
Binary files differ
diff --git a/Master/xemtex/perl/lib/auto/POSIX/POSIX.dll b/Master/xemtex/perl/lib/auto/POSIX/POSIX.dll
new file mode 100644
index 00000000000..2e090c5e742
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/POSIX.dll
Binary files differ
diff --git a/Master/xemtex/perl/lib/auto/POSIX/abs.al b/Master/xemtex/perl/lib/auto/POSIX/abs.al
new file mode 100644
index 00000000000..298fd61df5c
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/abs.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 391 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\abs.al)"
+sub abs {
+ usage "abs(x)" if @_ != 1;
+ CORE::abs($_[0]);
+}
+
+# end of POSIX::abs
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/alarm.al b/Master/xemtex/perl/lib/auto/POSIX/alarm.al
new file mode 100644
index 00000000000..3be4c8dc908
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/alarm.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 608 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\alarm.al)"
+sub alarm {
+ usage "alarm(seconds)" if @_ != 1;
+ CORE::alarm($_[0]);
+}
+
+# end of POSIX::alarm
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/assert.al b/Master/xemtex/perl/lib/auto/POSIX/assert.al
new file mode 100644
index 00000000000..def2f62f767
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/assert.al
@@ -0,0 +1,15 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 77 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\assert.al)"
+sub assert {
+ usage "assert(expr)" if @_ != 1;
+ if (!$_[0]) {
+ croak "Assertion failed";
+ }
+}
+
+# end of POSIX::assert
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/atan2.al b/Master/xemtex/perl/lib/auto/POSIX/atan2.al
new file mode 100644
index 00000000000..30795e97c4b
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/atan2.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 142 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\atan2.al)"
+sub atan2 {
+ usage "atan2(x,y)" if @_ != 2;
+ CORE::atan2($_[0], $_[1]);
+}
+
+# end of POSIX::atan2
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/atexit.al b/Master/xemtex/perl/lib/auto/POSIX/atexit.al
new file mode 100644
index 00000000000..f8e4e9ef393
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/atexit.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 396 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\atexit.al)"
+sub atexit {
+ unimpl "atexit() is C-specific: use END {} instead";
+}
+
+# end of POSIX::atexit
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/atof.al b/Master/xemtex/perl/lib/auto/POSIX/atof.al
new file mode 100644
index 00000000000..731267c6b40
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/atof.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 400 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\atof.al)"
+sub atof {
+ unimpl "atof() is C-specific, stopped";
+}
+
+# end of POSIX::atof
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/atoi.al b/Master/xemtex/perl/lib/auto/POSIX/atoi.al
new file mode 100644
index 00000000000..a48dc6c29c3
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/atoi.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 404 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\atoi.al)"
+sub atoi {
+ unimpl "atoi() is C-specific, stopped";
+}
+
+# end of POSIX::atoi
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/atol.al b/Master/xemtex/perl/lib/auto/POSIX/atol.al
new file mode 100644
index 00000000000..ba2278ca041
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/atol.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 408 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\atol.al)"
+sub atol {
+ unimpl "atol() is C-specific, stopped";
+}
+
+# end of POSIX::atol
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/autosplit.ix b/Master/xemtex/perl/lib/auto/POSIX/autosplit.ix
new file mode 100644
index 00000000000..7f244a3fb86
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/autosplit.ix
@@ -0,0 +1,153 @@
+# Index created by AutoSplit for ..\..\lib\POSIX.pm
+# (file acts as timestamp)
+package POSIX;
+sub usage ;
+sub redef ;
+sub unimpl ;
+sub assert ;
+sub tolower ;
+sub toupper ;
+sub closedir ;
+sub opendir ;
+sub readdir ;
+sub rewinddir ;
+sub errno ;
+sub creat ;
+sub fcntl ;
+sub getgrgid ;
+sub getgrnam ;
+sub atan2 ;
+sub cos ;
+sub exp ;
+sub fabs ;
+sub log ;
+sub pow ;
+sub sin ;
+sub sqrt ;
+sub getpwnam ;
+sub getpwuid ;
+sub longjmp ;
+sub setjmp ;
+sub siglongjmp ;
+sub sigsetjmp ;
+sub kill ;
+sub raise ;
+sub offsetof ;
+sub clearerr ;
+sub fclose ;
+sub fdopen ;
+sub feof ;
+sub fgetc ;
+sub fgets ;
+sub fileno ;
+sub fopen ;
+sub fprintf ;
+sub fputc ;
+sub fputs ;
+sub fread ;
+sub freopen ;
+sub fscanf ;
+sub fseek ;
+sub ferror ;
+sub fflush ;
+sub fgetpos ;
+sub fsetpos ;
+sub ftell ;
+sub fwrite ;
+sub getc ;
+sub getchar ;
+sub gets ;
+sub perror ;
+sub printf ;
+sub putc ;
+sub putchar ;
+sub puts ;
+sub remove ;
+sub rename ;
+sub rewind ;
+sub scanf ;
+sub sprintf ;
+sub sscanf ;
+sub tmpfile ;
+sub ungetc ;
+sub vfprintf ;
+sub vprintf ;
+sub vsprintf ;
+sub abs ;
+sub atexit ;
+sub atof ;
+sub atoi ;
+sub atol ;
+sub bsearch ;
+sub calloc ;
+sub div ;
+sub exit ;
+sub free ;
+sub getenv ;
+sub labs ;
+sub ldiv ;
+sub malloc ;
+sub qsort ;
+sub rand ;
+sub realloc ;
+sub srand ;
+sub system ;
+sub memchr ;
+sub memcmp ;
+sub memcpy ;
+sub memmove ;
+sub memset ;
+sub strcat ;
+sub strchr ;
+sub strcmp ;
+sub strcpy ;
+sub strcspn ;
+sub strerror ;
+sub strlen ;
+sub strncat ;
+sub strncmp ;
+sub strncpy ;
+sub strpbrk ;
+sub strrchr ;
+sub strspn ;
+sub strstr ;
+sub strtok ;
+sub chmod ;
+sub fstat ;
+sub mkdir ;
+sub stat ;
+sub umask ;
+sub wait ;
+sub waitpid ;
+sub gmtime ;
+sub localtime ;
+sub time ;
+sub alarm ;
+sub chdir ;
+sub chown ;
+sub execl ;
+sub execle ;
+sub execlp ;
+sub execv ;
+sub execve ;
+sub execvp ;
+sub fork ;
+sub getegid ;
+sub geteuid ;
+sub getgid ;
+sub getgroups ;
+sub getlogin ;
+sub getpgrp ;
+sub getpid ;
+sub getppid ;
+sub getuid ;
+sub isatty ;
+sub link ;
+sub rmdir ;
+sub setbuf ;
+sub setvbuf ;
+sub sleep ;
+sub unlink ;
+sub utime ;
+sub load_imports ;
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/bsearch.al b/Master/xemtex/perl/lib/auto/POSIX/bsearch.al
new file mode 100644
index 00000000000..ae569040e00
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/bsearch.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 412 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\bsearch.al)"
+sub bsearch {
+ unimpl "bsearch() not supplied";
+}
+
+# end of POSIX::bsearch
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/calloc.al b/Master/xemtex/perl/lib/auto/POSIX/calloc.al
new file mode 100644
index 00000000000..8375767c30b
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/calloc.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 416 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\calloc.al)"
+sub calloc {
+ unimpl "calloc() is C-specific, stopped";
+}
+
+# end of POSIX::calloc
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/chdir.al b/Master/xemtex/perl/lib/auto/POSIX/chdir.al
new file mode 100644
index 00000000000..7ebaad5aa95
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/chdir.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 613 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\chdir.al)"
+sub chdir {
+ usage "chdir(directory)" if @_ != 1;
+ CORE::chdir($_[0]);
+}
+
+# end of POSIX::chdir
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/chmod.al b/Master/xemtex/perl/lib/auto/POSIX/chmod.al
new file mode 100644
index 00000000000..e57badcb3dd
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/chmod.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 554 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\chmod.al)"
+sub chmod {
+ usage "chmod(mode, filename)" if @_ != 2;
+ CORE::chmod($_[0], $_[1]);
+}
+
+# end of POSIX::chmod
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/chown.al b/Master/xemtex/perl/lib/auto/POSIX/chown.al
new file mode 100644
index 00000000000..cfc23f0b072
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/chown.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 618 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\chown.al)"
+sub chown {
+ usage "chown(filename, uid, gid)" if @_ != 3;
+ CORE::chown($_[0], $_[1], $_[2]);
+}
+
+# end of POSIX::chown
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/clearerr.al b/Master/xemtex/perl/lib/auto/POSIX/clearerr.al
new file mode 100644
index 00000000000..8c3b70743cb
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/clearerr.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 222 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\clearerr.al)"
+sub clearerr {
+ redef "IO::Handle::clearerr()";
+}
+
+# end of POSIX::clearerr
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/closedir.al b/Master/xemtex/perl/lib/auto/POSIX/closedir.al
new file mode 100644
index 00000000000..7ecdf46af31
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/closedir.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 94 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\closedir.al)"
+sub closedir {
+ usage "closedir(dirhandle)" if @_ != 1;
+ CORE::closedir($_[0]);
+}
+
+# end of POSIX::closedir
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/cos.al b/Master/xemtex/perl/lib/auto/POSIX/cos.al
new file mode 100644
index 00000000000..17a90b50286
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/cos.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 147 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\cos.al)"
+sub cos {
+ usage "cos(x)" if @_ != 1;
+ CORE::cos($_[0]);
+}
+
+# end of POSIX::cos
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/creat.al b/Master/xemtex/perl/lib/auto/POSIX/creat.al
new file mode 100644
index 00000000000..4645b72ab0e
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/creat.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 122 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\creat.al)"
+sub creat {
+ usage "creat(filename, mode)" if @_ != 2;
+ &open($_[0], &O_WRONLY | &O_CREAT | &O_TRUNC, $_[1]);
+}
+
+# end of POSIX::creat
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/div.al b/Master/xemtex/perl/lib/auto/POSIX/div.al
new file mode 100644
index 00000000000..272d1d23bbb
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/div.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 420 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\div.al)"
+sub div {
+ unimpl "div() is C-specific, stopped";
+}
+
+# end of POSIX::div
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/errno.al b/Master/xemtex/perl/lib/auto/POSIX/errno.al
new file mode 100644
index 00000000000..5195ab1efe1
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/errno.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 117 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\errno.al)"
+sub errno {
+ usage "errno()" if @_ != 0;
+ $! + 0;
+}
+
+# end of POSIX::errno
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/execl.al b/Master/xemtex/perl/lib/auto/POSIX/execl.al
new file mode 100644
index 00000000000..4f0e27566e8
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/execl.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 623 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\execl.al)"
+sub execl {
+ unimpl "execl() is C-specific, stopped";
+}
+
+# end of POSIX::execl
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/execle.al b/Master/xemtex/perl/lib/auto/POSIX/execle.al
new file mode 100644
index 00000000000..303af430e07
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/execle.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 627 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\execle.al)"
+sub execle {
+ unimpl "execle() is C-specific, stopped";
+}
+
+# end of POSIX::execle
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/execlp.al b/Master/xemtex/perl/lib/auto/POSIX/execlp.al
new file mode 100644
index 00000000000..772f718e44e
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/execlp.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 631 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\execlp.al)"
+sub execlp {
+ unimpl "execlp() is C-specific, stopped";
+}
+
+# end of POSIX::execlp
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/execv.al b/Master/xemtex/perl/lib/auto/POSIX/execv.al
new file mode 100644
index 00000000000..85b211db4ab
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/execv.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 635 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\execv.al)"
+sub execv {
+ unimpl "execv() is C-specific, stopped";
+}
+
+# end of POSIX::execv
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/execve.al b/Master/xemtex/perl/lib/auto/POSIX/execve.al
new file mode 100644
index 00000000000..919580cbed1
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/execve.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 639 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\execve.al)"
+sub execve {
+ unimpl "execve() is C-specific, stopped";
+}
+
+# end of POSIX::execve
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/execvp.al b/Master/xemtex/perl/lib/auto/POSIX/execvp.al
new file mode 100644
index 00000000000..f55f8495f8d
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/execvp.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 643 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\execvp.al)"
+sub execvp {
+ unimpl "execvp() is C-specific, stopped";
+}
+
+# end of POSIX::execvp
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/exit.al b/Master/xemtex/perl/lib/auto/POSIX/exit.al
new file mode 100644
index 00000000000..b03a880d66a
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/exit.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 424 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\exit.al)"
+sub exit {
+ usage "exit(status)" if @_ != 1;
+ CORE::exit($_[0]);
+}
+
+# end of POSIX::exit
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/exp.al b/Master/xemtex/perl/lib/auto/POSIX/exp.al
new file mode 100644
index 00000000000..d15d24f1128
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/exp.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 152 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\exp.al)"
+sub exp {
+ usage "exp(x)" if @_ != 1;
+ CORE::exp($_[0]);
+}
+
+# end of POSIX::exp
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fabs.al b/Master/xemtex/perl/lib/auto/POSIX/fabs.al
new file mode 100644
index 00000000000..2f5cbce7501
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fabs.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 157 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fabs.al)"
+sub fabs {
+ usage "fabs(x)" if @_ != 1;
+ CORE::abs($_[0]);
+}
+
+# end of POSIX::fabs
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fclose.al b/Master/xemtex/perl/lib/auto/POSIX/fclose.al
new file mode 100644
index 00000000000..1b4f7192da9
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fclose.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 226 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fclose.al)"
+sub fclose {
+ redef "IO::Handle::close()";
+}
+
+# end of POSIX::fclose
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fcntl.al b/Master/xemtex/perl/lib/auto/POSIX/fcntl.al
new file mode 100644
index 00000000000..0d8692e6cd7
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fcntl.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 127 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fcntl.al)"
+sub fcntl {
+ usage "fcntl(filehandle, cmd, arg)" if @_ != 3;
+ CORE::fcntl($_[0], $_[1], $_[2]);
+}
+
+# end of POSIX::fcntl
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fdopen.al b/Master/xemtex/perl/lib/auto/POSIX/fdopen.al
new file mode 100644
index 00000000000..cc4b68b4df0
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fdopen.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 230 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fdopen.al)"
+sub fdopen {
+ redef "IO::Handle::new_from_fd()";
+}
+
+# end of POSIX::fdopen
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/feof.al b/Master/xemtex/perl/lib/auto/POSIX/feof.al
new file mode 100644
index 00000000000..2aa0580f31e
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/feof.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 234 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\feof.al)"
+sub feof {
+ redef "IO::Handle::eof()";
+}
+
+# end of POSIX::feof
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/ferror.al b/Master/xemtex/perl/lib/auto/POSIX/ferror.al
new file mode 100644
index 00000000000..864c11609a6
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/ferror.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 282 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\ferror.al)"
+sub ferror {
+ redef "IO::Handle::error()";
+}
+
+# end of POSIX::ferror
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fflush.al b/Master/xemtex/perl/lib/auto/POSIX/fflush.al
new file mode 100644
index 00000000000..d4084b44569
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fflush.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 286 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fflush.al)"
+sub fflush {
+ redef "IO::Handle::flush()";
+}
+
+# end of POSIX::fflush
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fgetc.al b/Master/xemtex/perl/lib/auto/POSIX/fgetc.al
new file mode 100644
index 00000000000..55c6951da44
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fgetc.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 238 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fgetc.al)"
+sub fgetc {
+ redef "IO::Handle::getc()";
+}
+
+# end of POSIX::fgetc
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fgetpos.al b/Master/xemtex/perl/lib/auto/POSIX/fgetpos.al
new file mode 100644
index 00000000000..e354fdf5a4f
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fgetpos.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 290 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fgetpos.al)"
+sub fgetpos {
+ redef "IO::Seekable::getpos()";
+}
+
+# end of POSIX::fgetpos
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fgets.al b/Master/xemtex/perl/lib/auto/POSIX/fgets.al
new file mode 100644
index 00000000000..adb96ebfed6
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fgets.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 242 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fgets.al)"
+sub fgets {
+ redef "IO::Handle::gets()";
+}
+
+# end of POSIX::fgets
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fileno.al b/Master/xemtex/perl/lib/auto/POSIX/fileno.al
new file mode 100644
index 00000000000..2b9ef0d0f0b
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fileno.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 246 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fileno.al)"
+sub fileno {
+ redef "IO::Handle::fileno()";
+}
+
+# end of POSIX::fileno
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fopen.al b/Master/xemtex/perl/lib/auto/POSIX/fopen.al
new file mode 100644
index 00000000000..8a85034722b
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fopen.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 250 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fopen.al)"
+sub fopen {
+ redef "IO::File::open()";
+}
+
+# end of POSIX::fopen
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fork.al b/Master/xemtex/perl/lib/auto/POSIX/fork.al
new file mode 100644
index 00000000000..e7a7de97948
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fork.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 647 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fork.al)"
+sub fork {
+ usage "fork()" if @_ != 0;
+ CORE::fork;
+}
+
+# end of POSIX::fork
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fprintf.al b/Master/xemtex/perl/lib/auto/POSIX/fprintf.al
new file mode 100644
index 00000000000..bdcebf38760
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fprintf.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 254 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fprintf.al)"
+sub fprintf {
+ unimpl "fprintf() is C-specific--use printf instead";
+}
+
+# end of POSIX::fprintf
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fputc.al b/Master/xemtex/perl/lib/auto/POSIX/fputc.al
new file mode 100644
index 00000000000..9233e689600
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fputc.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 258 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fputc.al)"
+sub fputc {
+ unimpl "fputc() is C-specific--use print instead";
+}
+
+# end of POSIX::fputc
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fputs.al b/Master/xemtex/perl/lib/auto/POSIX/fputs.al
new file mode 100644
index 00000000000..885cf9e4bb3
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fputs.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 262 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fputs.al)"
+sub fputs {
+ unimpl "fputs() is C-specific--use print instead";
+}
+
+# end of POSIX::fputs
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fread.al b/Master/xemtex/perl/lib/auto/POSIX/fread.al
new file mode 100644
index 00000000000..ca411635f63
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fread.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 266 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fread.al)"
+sub fread {
+ unimpl "fread() is C-specific--use read instead";
+}
+
+# end of POSIX::fread
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/free.al b/Master/xemtex/perl/lib/auto/POSIX/free.al
new file mode 100644
index 00000000000..83ce0402725
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/free.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 429 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\free.al)"
+sub free {
+ unimpl "free() is C-specific, stopped";
+}
+
+# end of POSIX::free
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/freopen.al b/Master/xemtex/perl/lib/auto/POSIX/freopen.al
new file mode 100644
index 00000000000..cefb9db1dab
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/freopen.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 270 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\freopen.al)"
+sub freopen {
+ unimpl "freopen() is C-specific--use open instead";
+}
+
+# end of POSIX::freopen
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fscanf.al b/Master/xemtex/perl/lib/auto/POSIX/fscanf.al
new file mode 100644
index 00000000000..452877452c6
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fscanf.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 274 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fscanf.al)"
+sub fscanf {
+ unimpl "fscanf() is C-specific--use <> and regular expressions instead";
+}
+
+# end of POSIX::fscanf
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fseek.al b/Master/xemtex/perl/lib/auto/POSIX/fseek.al
new file mode 100644
index 00000000000..ffefc229066
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fseek.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 278 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fseek.al)"
+sub fseek {
+ redef "IO::Seekable::seek()";
+}
+
+# end of POSIX::fseek
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fsetpos.al b/Master/xemtex/perl/lib/auto/POSIX/fsetpos.al
new file mode 100644
index 00000000000..f43fc57c18a
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fsetpos.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 294 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fsetpos.al)"
+sub fsetpos {
+ redef "IO::Seekable::setpos()";
+}
+
+# end of POSIX::fsetpos
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fstat.al b/Master/xemtex/perl/lib/auto/POSIX/fstat.al
new file mode 100644
index 00000000000..cd05ea95007
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fstat.al
@@ -0,0 +1,17 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 559 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fstat.al)"
+sub fstat {
+ usage "fstat(fd)" if @_ != 1;
+ local *TMP;
+ CORE::open(TMP, "<&$_[0]"); # Gross.
+ my @l = CORE::stat(TMP);
+ CORE::close(TMP);
+ @l;
+}
+
+# end of POSIX::fstat
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/ftell.al b/Master/xemtex/perl/lib/auto/POSIX/ftell.al
new file mode 100644
index 00000000000..dd6c347c710
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/ftell.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 298 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\ftell.al)"
+sub ftell {
+ redef "IO::Seekable::tell()";
+}
+
+# end of POSIX::ftell
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/fwrite.al b/Master/xemtex/perl/lib/auto/POSIX/fwrite.al
new file mode 100644
index 00000000000..d51037b1d17
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/fwrite.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 302 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fwrite.al)"
+sub fwrite {
+ unimpl "fwrite() is C-specific--use print instead";
+}
+
+# end of POSIX::fwrite
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/getc.al b/Master/xemtex/perl/lib/auto/POSIX/getc.al
new file mode 100644
index 00000000000..318c4bd6b0f
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/getc.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 306 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getc.al)"
+sub getc {
+ usage "getc(handle)" if @_ != 1;
+ CORE::getc($_[0]);
+}
+
+# end of POSIX::getc
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/getchar.al b/Master/xemtex/perl/lib/auto/POSIX/getchar.al
new file mode 100644
index 00000000000..eb1344fa4cc
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/getchar.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 311 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getchar.al)"
+sub getchar {
+ usage "getchar()" if @_ != 0;
+ CORE::getc(STDIN);
+}
+
+# end of POSIX::getchar
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/getegid.al b/Master/xemtex/perl/lib/auto/POSIX/getegid.al
new file mode 100644
index 00000000000..6234a682aae
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/getegid.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 652 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getegid.al)"
+sub getegid {
+ usage "getegid()" if @_ != 0;
+ $) + 0;
+}
+
+# end of POSIX::getegid
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/getenv.al b/Master/xemtex/perl/lib/auto/POSIX/getenv.al
new file mode 100644
index 00000000000..7ca5395c458
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/getenv.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 433 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getenv.al)"
+sub getenv {
+ usage "getenv(name)" if @_ != 1;
+ $ENV{$_[0]};
+}
+
+# end of POSIX::getenv
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/geteuid.al b/Master/xemtex/perl/lib/auto/POSIX/geteuid.al
new file mode 100644
index 00000000000..829472d16ae
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/geteuid.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 657 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\geteuid.al)"
+sub geteuid {
+ usage "geteuid()" if @_ != 0;
+ $> + 0;
+}
+
+# end of POSIX::geteuid
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/getgid.al b/Master/xemtex/perl/lib/auto/POSIX/getgid.al
new file mode 100644
index 00000000000..b9f60fcea02
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/getgid.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 662 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getgid.al)"
+sub getgid {
+ usage "getgid()" if @_ != 0;
+ $( + 0;
+}
+
+# end of POSIX::getgid
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/getgrgid.al b/Master/xemtex/perl/lib/auto/POSIX/getgrgid.al
new file mode 100644
index 00000000000..be95e0badbb
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/getgrgid.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 132 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getgrgid.al)"
+sub getgrgid {
+ usage "getgrgid(gid)" if @_ != 1;
+ CORE::getgrgid($_[0]);
+}
+
+# end of POSIX::getgrgid
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/getgrnam.al b/Master/xemtex/perl/lib/auto/POSIX/getgrnam.al
new file mode 100644
index 00000000000..8cda0521600
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/getgrnam.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 137 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getgrnam.al)"
+sub getgrnam {
+ usage "getgrnam(name)" if @_ != 1;
+ CORE::getgrnam($_[0]);
+}
+
+# end of POSIX::getgrnam
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/getgroups.al b/Master/xemtex/perl/lib/auto/POSIX/getgroups.al
new file mode 100644
index 00000000000..e3a31459b38
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/getgroups.al
@@ -0,0 +1,14 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 667 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getgroups.al)"
+sub getgroups {
+ usage "getgroups()" if @_ != 0;
+ my %seen;
+ grep(!$seen{$_}++, split(' ', $) ));
+}
+
+# end of POSIX::getgroups
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/getlogin.al b/Master/xemtex/perl/lib/auto/POSIX/getlogin.al
new file mode 100644
index 00000000000..3b9259b5f95
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/getlogin.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 673 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getlogin.al)"
+sub getlogin {
+ usage "getlogin()" if @_ != 0;
+ CORE::getlogin();
+}
+
+# end of POSIX::getlogin
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/getpgrp.al b/Master/xemtex/perl/lib/auto/POSIX/getpgrp.al
new file mode 100644
index 00000000000..b4771bcd799
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/getpgrp.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 678 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getpgrp.al)"
+sub getpgrp {
+ usage "getpgrp()" if @_ != 0;
+ CORE::getpgrp;
+}
+
+# end of POSIX::getpgrp
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/getpid.al b/Master/xemtex/perl/lib/auto/POSIX/getpid.al
new file mode 100644
index 00000000000..b85b2304d38
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/getpid.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 683 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getpid.al)"
+sub getpid {
+ usage "getpid()" if @_ != 0;
+ $$;
+}
+
+# end of POSIX::getpid
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/getppid.al b/Master/xemtex/perl/lib/auto/POSIX/getppid.al
new file mode 100644
index 00000000000..66b4877dc31
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/getppid.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 688 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getppid.al)"
+sub getppid {
+ usage "getppid()" if @_ != 0;
+ CORE::getppid;
+}
+
+# end of POSIX::getppid
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/getpwnam.al b/Master/xemtex/perl/lib/auto/POSIX/getpwnam.al
new file mode 100644
index 00000000000..89538d13b37
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/getpwnam.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 182 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getpwnam.al)"
+sub getpwnam {
+ usage "getpwnam(name)" if @_ != 1;
+ CORE::getpwnam($_[0]);
+}
+
+# end of POSIX::getpwnam
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/getpwuid.al b/Master/xemtex/perl/lib/auto/POSIX/getpwuid.al
new file mode 100644
index 00000000000..27c8642d36b
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/getpwuid.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 187 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getpwuid.al)"
+sub getpwuid {
+ usage "getpwuid(uid)" if @_ != 1;
+ CORE::getpwuid($_[0]);
+}
+
+# end of POSIX::getpwuid
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/gets.al b/Master/xemtex/perl/lib/auto/POSIX/gets.al
new file mode 100644
index 00000000000..ba8caa9cc5e
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/gets.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 316 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\gets.al)"
+sub gets {
+ usage "gets()" if @_ != 0;
+ scalar <STDIN>;
+}
+
+# end of POSIX::gets
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/getuid.al b/Master/xemtex/perl/lib/auto/POSIX/getuid.al
new file mode 100644
index 00000000000..c3a7a1e993f
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/getuid.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 693 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getuid.al)"
+sub getuid {
+ usage "getuid()" if @_ != 0;
+ $<;
+}
+
+# end of POSIX::getuid
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/gmtime.al b/Master/xemtex/perl/lib/auto/POSIX/gmtime.al
new file mode 100644
index 00000000000..4f4b26f658a
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/gmtime.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 593 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\gmtime.al)"
+sub gmtime {
+ usage "gmtime(time)" if @_ != 1;
+ CORE::gmtime($_[0]);
+}
+
+# end of POSIX::gmtime
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/isatty.al b/Master/xemtex/perl/lib/auto/POSIX/isatty.al
new file mode 100644
index 00000000000..aff49f6fa73
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/isatty.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 698 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\isatty.al)"
+sub isatty {
+ usage "isatty(filehandle)" if @_ != 1;
+ -t $_[0];
+}
+
+# end of POSIX::isatty
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/kill.al b/Master/xemtex/perl/lib/auto/POSIX/kill.al
new file mode 100644
index 00000000000..ed4544cd1b8
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/kill.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 208 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\kill.al)"
+sub kill {
+ usage "kill(pid, sig)" if @_ != 2;
+ CORE::kill $_[1], $_[0];
+}
+
+# end of POSIX::kill
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/labs.al b/Master/xemtex/perl/lib/auto/POSIX/labs.al
new file mode 100644
index 00000000000..cb2aee982ec
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/labs.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 438 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\labs.al)"
+sub labs {
+ unimpl "labs() is C-specific, use abs instead";
+}
+
+# end of POSIX::labs
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/ldiv.al b/Master/xemtex/perl/lib/auto/POSIX/ldiv.al
new file mode 100644
index 00000000000..e30e8dddbb6
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/ldiv.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 442 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\ldiv.al)"
+sub ldiv {
+ unimpl "ldiv() is C-specific, use / and int instead";
+}
+
+# end of POSIX::ldiv
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/link.al b/Master/xemtex/perl/lib/auto/POSIX/link.al
new file mode 100644
index 00000000000..7f2cc18847f
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/link.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 703 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\link.al)"
+sub link {
+ usage "link(oldfilename, newfilename)" if @_ != 2;
+ CORE::link($_[0], $_[1]);
+}
+
+# end of POSIX::link
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/load_imports.al b/Master/xemtex/perl/lib/auto/POSIX/load_imports.al
new file mode 100644
index 00000000000..5659bce963d
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/load_imports.al
@@ -0,0 +1,224 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 736 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\load_imports.al)"
+sub load_imports {
+%EXPORT_TAGS = (
+
+ assert_h => [qw(assert NDEBUG)],
+
+ ctype_h => [qw(isalnum isalpha iscntrl isdigit isgraph islower
+ isprint ispunct isspace isupper isxdigit tolower toupper)],
+
+ dirent_h => [],
+
+ errno_h => [qw(E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT
+ EAGAIN EALREADY EBADF EBUSY ECHILD ECONNABORTED
+ ECONNREFUSED ECONNRESET EDEADLK EDESTADDRREQ EDOM EDQUOT
+ EEXIST EFAULT EFBIG EHOSTDOWN EHOSTUNREACH EINPROGRESS
+ EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK
+ EMSGSIZE ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH
+ ENFILE ENOBUFS ENODEV ENOENT ENOEXEC ENOLCK ENOMEM
+ ENOPROTOOPT ENOSPC ENOSYS ENOTBLK ENOTCONN ENOTDIR
+ ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOPNOTSUPP EPERM
+ EPFNOSUPPORT EPIPE EPROCLIM EPROTONOSUPPORT EPROTOTYPE
+ ERANGE EREMOTE ERESTART EROFS ESHUTDOWN ESOCKTNOSUPPORT
+ ESPIPE ESRCH ESTALE ETIMEDOUT ETOOMANYREFS ETXTBSY
+ EUSERS EWOULDBLOCK EXDEV errno)],
+
+ fcntl_h => [qw(FD_CLOEXEC F_DUPFD F_GETFD F_GETFL F_GETLK F_RDLCK
+ F_SETFD F_SETFL F_SETLK F_SETLKW F_UNLCK F_WRLCK
+ O_ACCMODE O_APPEND O_CREAT O_EXCL O_NOCTTY O_NONBLOCK
+ O_RDONLY O_RDWR O_TRUNC O_WRONLY
+ creat
+ SEEK_CUR SEEK_END SEEK_SET
+ S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU
+ S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISREG S_ISUID
+ S_IWGRP S_IWOTH S_IWUSR)],
+
+ float_h => [qw(DBL_DIG DBL_EPSILON DBL_MANT_DIG
+ DBL_MAX DBL_MAX_10_EXP DBL_MAX_EXP
+ DBL_MIN DBL_MIN_10_EXP DBL_MIN_EXP
+ FLT_DIG FLT_EPSILON FLT_MANT_DIG
+ FLT_MAX FLT_MAX_10_EXP FLT_MAX_EXP
+ FLT_MIN FLT_MIN_10_EXP FLT_MIN_EXP
+ FLT_RADIX FLT_ROUNDS
+ LDBL_DIG LDBL_EPSILON LDBL_MANT_DIG
+ LDBL_MAX LDBL_MAX_10_EXP LDBL_MAX_EXP
+ LDBL_MIN LDBL_MIN_10_EXP LDBL_MIN_EXP)],
+
+ grp_h => [],
+
+ limits_h => [qw( ARG_MAX CHAR_BIT CHAR_MAX CHAR_MIN CHILD_MAX
+ INT_MAX INT_MIN LINK_MAX LONG_MAX LONG_MIN MAX_CANON
+ MAX_INPUT MB_LEN_MAX NAME_MAX NGROUPS_MAX OPEN_MAX
+ PATH_MAX PIPE_BUF SCHAR_MAX SCHAR_MIN SHRT_MAX SHRT_MIN
+ SSIZE_MAX STREAM_MAX TZNAME_MAX UCHAR_MAX UINT_MAX
+ ULONG_MAX USHRT_MAX _POSIX_ARG_MAX _POSIX_CHILD_MAX
+ _POSIX_LINK_MAX _POSIX_MAX_CANON _POSIX_MAX_INPUT
+ _POSIX_NAME_MAX _POSIX_NGROUPS_MAX _POSIX_OPEN_MAX
+ _POSIX_PATH_MAX _POSIX_PIPE_BUF _POSIX_SSIZE_MAX
+ _POSIX_STREAM_MAX _POSIX_TZNAME_MAX)],
+
+ locale_h => [qw(LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES
+ LC_MONETARY LC_NUMERIC LC_TIME NULL
+ localeconv setlocale)],
+
+ math_h => [qw(HUGE_VAL acos asin atan ceil cosh fabs floor fmod
+ frexp ldexp log10 modf pow sinh tan tanh)],
+
+ pwd_h => [],
+
+ setjmp_h => [qw(longjmp setjmp siglongjmp sigsetjmp)],
+
+ signal_h => [qw(SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK
+ SA_RESETHAND SA_RESTART SA_SIGINFO SIGABRT SIGALRM
+ SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL
+ SIGPIPE SIGQUIT SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN
+ SIGTTOU SIGUSR1 SIGUSR2 SIG_BLOCK SIG_DFL SIG_ERR
+ SIG_IGN SIG_SETMASK SIG_UNBLOCK raise sigaction signal
+ sigpending sigprocmask sigsuspend)],
+
+ stdarg_h => [],
+
+ stddef_h => [qw(NULL offsetof)],
+
+ stdio_h => [qw(BUFSIZ EOF FILENAME_MAX L_ctermid L_cuserid
+ L_tmpname NULL SEEK_CUR SEEK_END SEEK_SET
+ STREAM_MAX TMP_MAX stderr stdin stdout
+ clearerr fclose fdopen feof ferror fflush fgetc fgetpos
+ fgets fopen fprintf fputc fputs fread freopen
+ fscanf fseek fsetpos ftell fwrite getchar gets
+ perror putc putchar puts remove rewind
+ scanf setbuf setvbuf sscanf tmpfile tmpnam
+ ungetc vfprintf vprintf vsprintf)],
+
+ stdlib_h => [qw(EXIT_FAILURE EXIT_SUCCESS MB_CUR_MAX NULL RAND_MAX
+ abort atexit atof atoi atol bsearch calloc div
+ free getenv labs ldiv malloc mblen mbstowcs mbtowc
+ qsort realloc strtod strtol strtoul wcstombs wctomb)],
+
+ string_h => [qw(NULL memchr memcmp memcpy memmove memset strcat
+ strchr strcmp strcoll strcpy strcspn strerror strlen
+ strncat strncmp strncpy strpbrk strrchr strspn strstr
+ strtok strxfrm)],
+
+ sys_stat_h => [qw(S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU
+ S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISREG
+ S_ISUID S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR
+ fstat mkfifo)],
+
+ sys_times_h => [],
+
+ sys_types_h => [],
+
+ sys_utsname_h => [qw(uname)],
+
+ sys_wait_h => [qw(WEXITSTATUS WIFEXITED WIFSIGNALED WIFSTOPPED
+ WNOHANG WSTOPSIG WTERMSIG WUNTRACED)],
+
+ termios_h => [qw( B0 B110 B1200 B134 B150 B1800 B19200 B200 B2400
+ B300 B38400 B4800 B50 B600 B75 B9600 BRKINT CLOCAL
+ CREAD CS5 CS6 CS7 CS8 CSIZE CSTOPB ECHO ECHOE ECHOK
+ ECHONL HUPCL ICANON ICRNL IEXTEN IGNBRK IGNCR IGNPAR
+ INLCR INPCK ISIG ISTRIP IXOFF IXON NCCS NOFLSH OPOST
+ PARENB PARMRK PARODD TCIFLUSH TCIOFF TCIOFLUSH TCION
+ TCOFLUSH TCOOFF TCOON TCSADRAIN TCSAFLUSH TCSANOW
+ TOSTOP VEOF VEOL VERASE VINTR VKILL VMIN VQUIT VSTART
+ VSTOP VSUSP VTIME
+ cfgetispeed cfgetospeed cfsetispeed cfsetospeed tcdrain
+ tcflow tcflush tcgetattr tcsendbreak tcsetattr )],
+
+ time_h => [qw(CLK_TCK CLOCKS_PER_SEC NULL asctime clock ctime
+ difftime mktime strftime tzset tzname)],
+
+ unistd_h => [qw(F_OK NULL R_OK SEEK_CUR SEEK_END SEEK_SET
+ STDERR_FILENO STDIN_FILENO STDOUT_FILENO W_OK X_OK
+ _PC_CHOWN_RESTRICTED _PC_LINK_MAX _PC_MAX_CANON
+ _PC_MAX_INPUT _PC_NAME_MAX _PC_NO_TRUNC _PC_PATH_MAX
+ _PC_PIPE_BUF _PC_VDISABLE _POSIX_CHOWN_RESTRICTED
+ _POSIX_JOB_CONTROL _POSIX_NO_TRUNC _POSIX_SAVED_IDS
+ _POSIX_VDISABLE _POSIX_VERSION _SC_ARG_MAX
+ _SC_CHILD_MAX _SC_CLK_TCK _SC_JOB_CONTROL
+ _SC_NGROUPS_MAX _SC_OPEN_MAX _SC_PAGESIZE _SC_SAVED_IDS
+ _SC_STREAM_MAX _SC_TZNAME_MAX _SC_VERSION
+ _exit access ctermid cuserid
+ dup2 dup execl execle execlp execv execve execvp
+ fpathconf getcwd getegid geteuid getgid getgroups
+ getpid getuid isatty lseek pathconf pause setgid setpgid
+ setsid setuid sysconf tcgetpgrp tcsetpgrp ttyname)],
+
+ utime_h => [],
+
+);
+
+# Exporter::export_tags();
+for (values %EXPORT_TAGS) {
+ push @EXPORT, @$_;
+}
+
+@EXPORT_OK = qw(
+ abs
+ alarm
+ atan2
+ chdir
+ chmod
+ chown
+ close
+ closedir
+ cos
+ exit
+ exp
+ fcntl
+ fileno
+ fork
+ getc
+ getgrgid
+ getgrnam
+ getlogin
+ getpgrp
+ getppid
+ getpwnam
+ getpwuid
+ gmtime
+ isatty
+ kill
+ link
+ localtime
+ log
+ mkdir
+ nice
+ open
+ opendir
+ pipe
+ printf
+ rand
+ read
+ readdir
+ rename
+ rewinddir
+ rmdir
+ sin
+ sleep
+ sprintf
+ sqrt
+ srand
+ stat
+ system
+ time
+ times
+ umask
+ unlink
+ utime
+ wait
+ waitpid
+ write
+);
+
+require Exporter;
+}
+
+1;
+# end of POSIX::load_imports
diff --git a/Master/xemtex/perl/lib/auto/POSIX/localtime.al b/Master/xemtex/perl/lib/auto/POSIX/localtime.al
new file mode 100644
index 00000000000..327eec0044c
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/localtime.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 598 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\localtime.al)"
+sub localtime {
+ usage "localtime(time)" if @_ != 1;
+ CORE::localtime($_[0]);
+}
+
+# end of POSIX::localtime
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/log.al b/Master/xemtex/perl/lib/auto/POSIX/log.al
new file mode 100644
index 00000000000..b04b0689863
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/log.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 162 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\log.al)"
+sub log {
+ usage "log(x)" if @_ != 1;
+ CORE::log($_[0]);
+}
+
+# end of POSIX::log
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/longjmp.al b/Master/xemtex/perl/lib/auto/POSIX/longjmp.al
new file mode 100644
index 00000000000..2edb512681b
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/longjmp.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 192 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\longjmp.al)"
+sub longjmp {
+ unimpl "longjmp() is C-specific: use die instead";
+}
+
+# end of POSIX::longjmp
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/malloc.al b/Master/xemtex/perl/lib/auto/POSIX/malloc.al
new file mode 100644
index 00000000000..c7afafcbb7a
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/malloc.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 446 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\malloc.al)"
+sub malloc {
+ unimpl "malloc() is C-specific, stopped";
+}
+
+# end of POSIX::malloc
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/memchr.al b/Master/xemtex/perl/lib/auto/POSIX/memchr.al
new file mode 100644
index 00000000000..8de2367abd2
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/memchr.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 471 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\memchr.al)"
+sub memchr {
+ unimpl "memchr() is C-specific, use index() instead";
+}
+
+# end of POSIX::memchr
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/memcmp.al b/Master/xemtex/perl/lib/auto/POSIX/memcmp.al
new file mode 100644
index 00000000000..91169494c1d
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/memcmp.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 475 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\memcmp.al)"
+sub memcmp {
+ unimpl "memcmp() is C-specific, use eq instead";
+}
+
+# end of POSIX::memcmp
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/memcpy.al b/Master/xemtex/perl/lib/auto/POSIX/memcpy.al
new file mode 100644
index 00000000000..39afe5ecfd9
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/memcpy.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 479 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\memcpy.al)"
+sub memcpy {
+ unimpl "memcpy() is C-specific, use = instead";
+}
+
+# end of POSIX::memcpy
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/memmove.al b/Master/xemtex/perl/lib/auto/POSIX/memmove.al
new file mode 100644
index 00000000000..14643d3610b
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/memmove.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 483 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\memmove.al)"
+sub memmove {
+ unimpl "memmove() is C-specific, use = instead";
+}
+
+# end of POSIX::memmove
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/memset.al b/Master/xemtex/perl/lib/auto/POSIX/memset.al
new file mode 100644
index 00000000000..ea5df704a5e
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/memset.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 487 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\memset.al)"
+sub memset {
+ unimpl "memset() is C-specific, use x instead";
+}
+
+# end of POSIX::memset
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/mkdir.al b/Master/xemtex/perl/lib/auto/POSIX/mkdir.al
new file mode 100644
index 00000000000..b3ce65784b5
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/mkdir.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 568 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\mkdir.al)"
+sub mkdir {
+ usage "mkdir(directoryname, mode)" if @_ != 2;
+ CORE::mkdir($_[0], $_[1]);
+}
+
+# end of POSIX::mkdir
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/offsetof.al b/Master/xemtex/perl/lib/auto/POSIX/offsetof.al
new file mode 100644
index 00000000000..dc4d5065c1d
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/offsetof.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 218 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\offsetof.al)"
+sub offsetof {
+ unimpl "offsetof() is C-specific, stopped";
+}
+
+# end of POSIX::offsetof
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/opendir.al b/Master/xemtex/perl/lib/auto/POSIX/opendir.al
new file mode 100644
index 00000000000..40aa101f3ca
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/opendir.al
@@ -0,0 +1,16 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 99 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\opendir.al)"
+sub opendir {
+ usage "opendir(directory)" if @_ != 1;
+ my $dirhandle;
+ CORE::opendir($dirhandle, $_[0])
+ ? $dirhandle
+ : undef;
+}
+
+# end of POSIX::opendir
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/perror.al b/Master/xemtex/perl/lib/auto/POSIX/perror.al
new file mode 100644
index 00000000000..2f65bc3a0cf
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/perror.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 321 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\perror.al)"
+sub perror {
+ print STDERR "@_: " if @_;
+ print STDERR $!,"\n";
+}
+
+# end of POSIX::perror
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/pow.al b/Master/xemtex/perl/lib/auto/POSIX/pow.al
new file mode 100644
index 00000000000..5f199d5fb29
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/pow.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 167 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\pow.al)"
+sub pow {
+ usage "pow(x,exponent)" if @_ != 2;
+ $_[0] ** $_[1];
+}
+
+# end of POSIX::pow
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/printf.al b/Master/xemtex/perl/lib/auto/POSIX/printf.al
new file mode 100644
index 00000000000..8c27863f9d9
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/printf.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 326 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\printf.al)"
+sub printf {
+ usage "printf(pattern, args...)" if @_ < 1;
+ CORE::printf STDOUT @_;
+}
+
+# end of POSIX::printf
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/putc.al b/Master/xemtex/perl/lib/auto/POSIX/putc.al
new file mode 100644
index 00000000000..773c795c192
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/putc.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 331 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\putc.al)"
+sub putc {
+ unimpl "putc() is C-specific--use print instead";
+}
+
+# end of POSIX::putc
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/putchar.al b/Master/xemtex/perl/lib/auto/POSIX/putchar.al
new file mode 100644
index 00000000000..b9ca943a724
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/putchar.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 335 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\putchar.al)"
+sub putchar {
+ unimpl "putchar() is C-specific--use print instead";
+}
+
+# end of POSIX::putchar
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/puts.al b/Master/xemtex/perl/lib/auto/POSIX/puts.al
new file mode 100644
index 00000000000..3b2dd7d90a6
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/puts.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 339 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\puts.al)"
+sub puts {
+ unimpl "puts() is C-specific--use print instead";
+}
+
+# end of POSIX::puts
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/qsort.al b/Master/xemtex/perl/lib/auto/POSIX/qsort.al
new file mode 100644
index 00000000000..eb9c6d3586a
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/qsort.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 450 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\qsort.al)"
+sub qsort {
+ unimpl "qsort() is C-specific, use sort instead";
+}
+
+# end of POSIX::qsort
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/raise.al b/Master/xemtex/perl/lib/auto/POSIX/raise.al
new file mode 100644
index 00000000000..1399c31f800
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/raise.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 213 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\raise.al)"
+sub raise {
+ usage "raise(sig)" if @_ != 1;
+ CORE::kill $_[0], $$; # Is this good enough?
+}
+
+# end of POSIX::raise
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/rand.al b/Master/xemtex/perl/lib/auto/POSIX/rand.al
new file mode 100644
index 00000000000..0a8b3982e3a
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/rand.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 454 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\rand.al)"
+sub rand {
+ unimpl "rand() is non-portable, use Perl's rand instead";
+}
+
+# end of POSIX::rand
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/readdir.al b/Master/xemtex/perl/lib/auto/POSIX/readdir.al
new file mode 100644
index 00000000000..3c2e72fd0a0
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/readdir.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 107 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\readdir.al)"
+sub readdir {
+ usage "readdir(dirhandle)" if @_ != 1;
+ CORE::readdir($_[0]);
+}
+
+# end of POSIX::readdir
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/realloc.al b/Master/xemtex/perl/lib/auto/POSIX/realloc.al
new file mode 100644
index 00000000000..28efa2ccec5
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/realloc.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 458 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\realloc.al)"
+sub realloc {
+ unimpl "realloc() is C-specific, stopped";
+}
+
+# end of POSIX::realloc
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/redef.al b/Master/xemtex/perl/lib/auto/POSIX/redef.al
new file mode 100644
index 00000000000..0265989b228
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/redef.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 66 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\redef.al)"
+sub redef {
+ my ($mess) = @_;
+ croak "Use method $mess instead";
+}
+
+# end of POSIX::redef
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/remove.al b/Master/xemtex/perl/lib/auto/POSIX/remove.al
new file mode 100644
index 00000000000..e07b2fc0bd3
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/remove.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 343 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\remove.al)"
+sub remove {
+ usage "remove(filename)" if @_ != 1;
+ CORE::unlink($_[0]);
+}
+
+# end of POSIX::remove
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/rename.al b/Master/xemtex/perl/lib/auto/POSIX/rename.al
new file mode 100644
index 00000000000..10e8447f8b8
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/rename.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 348 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\rename.al)"
+sub rename {
+ usage "rename(oldfilename, newfilename)" if @_ != 2;
+ CORE::rename($_[0], $_[1]);
+}
+
+# end of POSIX::rename
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/rewind.al b/Master/xemtex/perl/lib/auto/POSIX/rewind.al
new file mode 100644
index 00000000000..5d7bc6fc17c
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/rewind.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 353 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\rewind.al)"
+sub rewind {
+ usage "rewind(filehandle)" if @_ != 1;
+ CORE::seek($_[0],0,0);
+}
+
+# end of POSIX::rewind
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/rewinddir.al b/Master/xemtex/perl/lib/auto/POSIX/rewinddir.al
new file mode 100644
index 00000000000..04ba2209b07
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/rewinddir.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 112 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\rewinddir.al)"
+sub rewinddir {
+ usage "rewinddir(dirhandle)" if @_ != 1;
+ CORE::rewinddir($_[0]);
+}
+
+# end of POSIX::rewinddir
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/rmdir.al b/Master/xemtex/perl/lib/auto/POSIX/rmdir.al
new file mode 100644
index 00000000000..983a2262e9a
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/rmdir.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 708 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\rmdir.al)"
+sub rmdir {
+ usage "rmdir(directoryname)" if @_ != 1;
+ CORE::rmdir($_[0]);
+}
+
+# end of POSIX::rmdir
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/scanf.al b/Master/xemtex/perl/lib/auto/POSIX/scanf.al
new file mode 100644
index 00000000000..20774a6e869
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/scanf.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 358 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\scanf.al)"
+sub scanf {
+ unimpl "scanf() is C-specific--use <> and regular expressions instead";
+}
+
+# end of POSIX::scanf
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/setbuf.al b/Master/xemtex/perl/lib/auto/POSIX/setbuf.al
new file mode 100644
index 00000000000..3dee5e3eb99
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/setbuf.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 713 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\setbuf.al)"
+sub setbuf {
+ redef "IO::Handle::setbuf()";
+}
+
+# end of POSIX::setbuf
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/setjmp.al b/Master/xemtex/perl/lib/auto/POSIX/setjmp.al
new file mode 100644
index 00000000000..81cddb9ed62
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/setjmp.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 196 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\setjmp.al)"
+sub setjmp {
+ unimpl "setjmp() is C-specific: use eval {} instead";
+}
+
+# end of POSIX::setjmp
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/setvbuf.al b/Master/xemtex/perl/lib/auto/POSIX/setvbuf.al
new file mode 100644
index 00000000000..db1a791cb2c
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/setvbuf.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 717 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\setvbuf.al)"
+sub setvbuf {
+ redef "IO::Handle::setvbuf()";
+}
+
+# end of POSIX::setvbuf
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/siglongjmp.al b/Master/xemtex/perl/lib/auto/POSIX/siglongjmp.al
new file mode 100644
index 00000000000..bfbf9916c52
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/siglongjmp.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 200 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\siglongjmp.al)"
+sub siglongjmp {
+ unimpl "siglongjmp() is C-specific: use die instead";
+}
+
+# end of POSIX::siglongjmp
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/sigsetjmp.al b/Master/xemtex/perl/lib/auto/POSIX/sigsetjmp.al
new file mode 100644
index 00000000000..ef8ad5ec087
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/sigsetjmp.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 204 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\sigsetjmp.al)"
+sub sigsetjmp {
+ unimpl "sigsetjmp() is C-specific: use eval {} instead";
+}
+
+# end of POSIX::sigsetjmp
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/sin.al b/Master/xemtex/perl/lib/auto/POSIX/sin.al
new file mode 100644
index 00000000000..97501e7fc5d
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/sin.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 172 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\sin.al)"
+sub sin {
+ usage "sin(x)" if @_ != 1;
+ CORE::sin($_[0]);
+}
+
+# end of POSIX::sin
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/sleep.al b/Master/xemtex/perl/lib/auto/POSIX/sleep.al
new file mode 100644
index 00000000000..ed44ef67ceb
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/sleep.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 721 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\sleep.al)"
+sub sleep {
+ usage "sleep(seconds)" if @_ != 1;
+ $_[0] - CORE::sleep($_[0]);
+}
+
+# end of POSIX::sleep
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/sprintf.al b/Master/xemtex/perl/lib/auto/POSIX/sprintf.al
new file mode 100644
index 00000000000..dc02870b96a
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/sprintf.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 362 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\sprintf.al)"
+sub sprintf {
+ usage "sprintf(pattern,args)" if @_ == 0;
+ CORE::sprintf(shift,@_);
+}
+
+# end of POSIX::sprintf
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/sqrt.al b/Master/xemtex/perl/lib/auto/POSIX/sqrt.al
new file mode 100644
index 00000000000..def6780521d
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/sqrt.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 177 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\sqrt.al)"
+sub sqrt {
+ usage "sqrt(x)" if @_ != 1;
+ CORE::sqrt($_[0]);
+}
+
+# end of POSIX::sqrt
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/srand.al b/Master/xemtex/perl/lib/auto/POSIX/srand.al
new file mode 100644
index 00000000000..6f4a41042b3
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/srand.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 462 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\srand.al)"
+sub srand {
+ unimpl "srand()";
+}
+
+# end of POSIX::srand
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/sscanf.al b/Master/xemtex/perl/lib/auto/POSIX/sscanf.al
new file mode 100644
index 00000000000..fe5d61fe665
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/sscanf.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 367 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\sscanf.al)"
+sub sscanf {
+ unimpl "sscanf() is C-specific--use regular expressions instead";
+}
+
+# end of POSIX::sscanf
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/stat.al b/Master/xemtex/perl/lib/auto/POSIX/stat.al
new file mode 100644
index 00000000000..eb483e18f70
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/stat.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 573 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\stat.al)"
+sub stat {
+ usage "stat(filename)" if @_ != 1;
+ CORE::stat($_[0]);
+}
+
+# end of POSIX::stat
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/strcat.al b/Master/xemtex/perl/lib/auto/POSIX/strcat.al
new file mode 100644
index 00000000000..ed3e4fe582c
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/strcat.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 491 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strcat.al)"
+sub strcat {
+ unimpl "strcat() is C-specific, use .= instead";
+}
+
+# end of POSIX::strcat
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/strchr.al b/Master/xemtex/perl/lib/auto/POSIX/strchr.al
new file mode 100644
index 00000000000..7802d2dc57d
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/strchr.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 495 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strchr.al)"
+sub strchr {
+ unimpl "strchr() is C-specific, use index() instead";
+}
+
+# end of POSIX::strchr
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/strcmp.al b/Master/xemtex/perl/lib/auto/POSIX/strcmp.al
new file mode 100644
index 00000000000..07127207853
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/strcmp.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 499 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strcmp.al)"
+sub strcmp {
+ unimpl "strcmp() is C-specific, use eq instead";
+}
+
+# end of POSIX::strcmp
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/strcpy.al b/Master/xemtex/perl/lib/auto/POSIX/strcpy.al
new file mode 100644
index 00000000000..fc48c859e2e
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/strcpy.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 503 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strcpy.al)"
+sub strcpy {
+ unimpl "strcpy() is C-specific, use = instead";
+}
+
+# end of POSIX::strcpy
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/strcspn.al b/Master/xemtex/perl/lib/auto/POSIX/strcspn.al
new file mode 100644
index 00000000000..1347dc79fd3
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/strcspn.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 507 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strcspn.al)"
+sub strcspn {
+ unimpl "strcspn() is C-specific, use regular expressions instead";
+}
+
+# end of POSIX::strcspn
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/strerror.al b/Master/xemtex/perl/lib/auto/POSIX/strerror.al
new file mode 100644
index 00000000000..55dcb64350c
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/strerror.al
@@ -0,0 +1,14 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 511 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strerror.al)"
+sub strerror {
+ usage "strerror(errno)" if @_ != 1;
+ local $! = $_[0];
+ $! . "";
+}
+
+# end of POSIX::strerror
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/strlen.al b/Master/xemtex/perl/lib/auto/POSIX/strlen.al
new file mode 100644
index 00000000000..f417d1755aa
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/strlen.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 517 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strlen.al)"
+sub strlen {
+ unimpl "strlen() is C-specific, use length instead";
+}
+
+# end of POSIX::strlen
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/strncat.al b/Master/xemtex/perl/lib/auto/POSIX/strncat.al
new file mode 100644
index 00000000000..bb890c89858
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/strncat.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 521 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strncat.al)"
+sub strncat {
+ unimpl "strncat() is C-specific, use .= instead";
+}
+
+# end of POSIX::strncat
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/strncmp.al b/Master/xemtex/perl/lib/auto/POSIX/strncmp.al
new file mode 100644
index 00000000000..f8f0b2b5f84
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/strncmp.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 525 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strncmp.al)"
+sub strncmp {
+ unimpl "strncmp() is C-specific, use eq instead";
+}
+
+# end of POSIX::strncmp
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/strncpy.al b/Master/xemtex/perl/lib/auto/POSIX/strncpy.al
new file mode 100644
index 00000000000..a9680b90514
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/strncpy.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 529 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strncpy.al)"
+sub strncpy {
+ unimpl "strncpy() is C-specific, use = instead";
+}
+
+# end of POSIX::strncpy
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/strpbrk.al b/Master/xemtex/perl/lib/auto/POSIX/strpbrk.al
new file mode 100644
index 00000000000..18e7fa29bcf
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/strpbrk.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 533 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strpbrk.al)"
+sub strpbrk {
+ unimpl "strpbrk() is C-specific, stopped";
+}
+
+# end of POSIX::strpbrk
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/strrchr.al b/Master/xemtex/perl/lib/auto/POSIX/strrchr.al
new file mode 100644
index 00000000000..8a0ad300422
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/strrchr.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 537 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strrchr.al)"
+sub strrchr {
+ unimpl "strrchr() is C-specific, use rindex() instead";
+}
+
+# end of POSIX::strrchr
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/strspn.al b/Master/xemtex/perl/lib/auto/POSIX/strspn.al
new file mode 100644
index 00000000000..162341b05a3
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/strspn.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 541 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strspn.al)"
+sub strspn {
+ unimpl "strspn() is C-specific, stopped";
+}
+
+# end of POSIX::strspn
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/strstr.al b/Master/xemtex/perl/lib/auto/POSIX/strstr.al
new file mode 100644
index 00000000000..c99a491a780
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/strstr.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 545 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strstr.al)"
+sub strstr {
+ usage "strstr(big, little)" if @_ != 2;
+ CORE::index($_[0], $_[1]);
+}
+
+# end of POSIX::strstr
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/strtok.al b/Master/xemtex/perl/lib/auto/POSIX/strtok.al
new file mode 100644
index 00000000000..a574fde27ed
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/strtok.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 550 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strtok.al)"
+sub strtok {
+ unimpl "strtok() is C-specific, stopped";
+}
+
+# end of POSIX::strtok
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/system.al b/Master/xemtex/perl/lib/auto/POSIX/system.al
new file mode 100644
index 00000000000..976f439cc35
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/system.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 466 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\system.al)"
+sub system {
+ usage "system(command)" if @_ != 1;
+ CORE::system($_[0]);
+}
+
+# end of POSIX::system
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/time.al b/Master/xemtex/perl/lib/auto/POSIX/time.al
new file mode 100644
index 00000000000..3f90c0a999d
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/time.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 603 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\time.al)"
+sub time {
+ usage "time()" if @_ != 0;
+ CORE::time;
+}
+
+# end of POSIX::time
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/tmpfile.al b/Master/xemtex/perl/lib/auto/POSIX/tmpfile.al
new file mode 100644
index 00000000000..a64d2aff625
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/tmpfile.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 371 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\tmpfile.al)"
+sub tmpfile {
+ redef "IO::File::new_tmpfile()";
+}
+
+# end of POSIX::tmpfile
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/tolower.al b/Master/xemtex/perl/lib/auto/POSIX/tolower.al
new file mode 100644
index 00000000000..8ec7b584813
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/tolower.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 84 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\tolower.al)"
+sub tolower {
+ usage "tolower(string)" if @_ != 1;
+ lc($_[0]);
+}
+
+# end of POSIX::tolower
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/toupper.al b/Master/xemtex/perl/lib/auto/POSIX/toupper.al
new file mode 100644
index 00000000000..efc3c3ebeac
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/toupper.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 89 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\toupper.al)"
+sub toupper {
+ usage "toupper(string)" if @_ != 1;
+ uc($_[0]);
+}
+
+# end of POSIX::toupper
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/umask.al b/Master/xemtex/perl/lib/auto/POSIX/umask.al
new file mode 100644
index 00000000000..6812329253e
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/umask.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 578 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\umask.al)"
+sub umask {
+ usage "umask(mask)" if @_ != 1;
+ CORE::umask($_[0]);
+}
+
+# end of POSIX::umask
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/ungetc.al b/Master/xemtex/perl/lib/auto/POSIX/ungetc.al
new file mode 100644
index 00000000000..b384b46b9d2
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/ungetc.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 375 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\ungetc.al)"
+sub ungetc {
+ redef "IO::Handle::ungetc()";
+}
+
+# end of POSIX::ungetc
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/unimpl.al b/Master/xemtex/perl/lib/auto/POSIX/unimpl.al
new file mode 100644
index 00000000000..b700d3d95b4
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/unimpl.al
@@ -0,0 +1,14 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 71 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\unimpl.al)"
+sub unimpl {
+ my ($mess) = @_;
+ $mess =~ s/xxx//;
+ croak "Unimplemented: POSIX::$mess";
+}
+
+# end of POSIX::unimpl
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/unlink.al b/Master/xemtex/perl/lib/auto/POSIX/unlink.al
new file mode 100644
index 00000000000..f8a44b79620
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/unlink.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 726 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\unlink.al)"
+sub unlink {
+ usage "unlink(filename)" if @_ != 1;
+ CORE::unlink($_[0]);
+}
+
+# end of POSIX::unlink
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/usage.al b/Master/xemtex/perl/lib/auto/POSIX/usage.al
new file mode 100644
index 00000000000..e81f8619b5e
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/usage.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 61 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\usage.al)"
+sub usage {
+ my ($mess) = @_;
+ croak "Usage: POSIX::$mess";
+}
+
+# end of POSIX::usage
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/utime.al b/Master/xemtex/perl/lib/auto/POSIX/utime.al
new file mode 100644
index 00000000000..5ddf502f8cf
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/utime.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 731 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\utime.al)"
+sub utime {
+ usage "utime(filename, atime, mtime)" if @_ != 3;
+ CORE::utime($_[1], $_[2], $_[0]);
+}
+
+# end of POSIX::utime
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/vfprintf.al b/Master/xemtex/perl/lib/auto/POSIX/vfprintf.al
new file mode 100644
index 00000000000..561853cc60f
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/vfprintf.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 379 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\vfprintf.al)"
+sub vfprintf {
+ unimpl "vfprintf() is C-specific";
+}
+
+# end of POSIX::vfprintf
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/vprintf.al b/Master/xemtex/perl/lib/auto/POSIX/vprintf.al
new file mode 100644
index 00000000000..aa597c30eaa
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/vprintf.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 383 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\vprintf.al)"
+sub vprintf {
+ unimpl "vprintf() is C-specific";
+}
+
+# end of POSIX::vprintf
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/vsprintf.al b/Master/xemtex/perl/lib/auto/POSIX/vsprintf.al
new file mode 100644
index 00000000000..fcc93ff270b
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/vsprintf.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 387 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\vsprintf.al)"
+sub vsprintf {
+ unimpl "vsprintf() is C-specific";
+}
+
+# end of POSIX::vsprintf
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/wait.al b/Master/xemtex/perl/lib/auto/POSIX/wait.al
new file mode 100644
index 00000000000..bb11314a208
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/wait.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 583 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\wait.al)"
+sub wait {
+ usage "wait()" if @_ != 0;
+ CORE::wait();
+}
+
+# end of POSIX::wait
+1;
diff --git a/Master/xemtex/perl/lib/auto/POSIX/waitpid.al b/Master/xemtex/perl/lib/auto/POSIX/waitpid.al
new file mode 100644
index 00000000000..2b10e7908b1
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/POSIX/waitpid.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 588 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\waitpid.al)"
+sub waitpid {
+ usage "waitpid(pid, options)" if @_ != 2;
+ CORE::waitpid($_[0], $_[1]);
+}
+
+# end of POSIX::waitpid
+1;
diff --git a/Master/xemtex/perl/lib/auto/SDBM_File/SDBM_File.dll b/Master/xemtex/perl/lib/auto/SDBM_File/SDBM_File.dll
new file mode 100644
index 00000000000..1b5a3da0bb1
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/SDBM_File/SDBM_File.dll
Binary files differ
diff --git a/Master/xemtex/perl/lib/auto/Time/HiRes/HiRes.dll b/Master/xemtex/perl/lib/auto/Time/HiRes/HiRes.dll
new file mode 100644
index 00000000000..8e0ebb6ac3e
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/Time/HiRes/HiRes.dll
Binary files differ
diff --git a/Master/xemtex/perl/lib/auto/re/re.dll b/Master/xemtex/perl/lib/auto/re/re.dll
new file mode 100644
index 00000000000..6b83e6c3ba1
--- /dev/null
+++ b/Master/xemtex/perl/lib/auto/re/re.dll
Binary files differ
diff --git a/Master/xemtex/perl/lib/base.pm b/Master/xemtex/perl/lib/base.pm
new file mode 100644
index 00000000000..37f220f63a9
--- /dev/null
+++ b/Master/xemtex/perl/lib/base.pm
@@ -0,0 +1,94 @@
+=head1 NAME
+
+base - Establish IS-A relationship with base class at compile time
+
+=head1 SYNOPSIS
+
+ package Baz;
+ use base qw(Foo Bar);
+
+=head1 DESCRIPTION
+
+Roughly similar in effect to
+
+ BEGIN {
+ require Foo;
+ require Bar;
+ push @ISA, qw(Foo Bar);
+ }
+
+Will also initialize the %FIELDS hash if one of the base classes has
+it. Multiple inheritance of %FIELDS is not supported. The 'base'
+pragma will croak if multiple base classes have a %FIELDS hash. See
+L<fields> for a description of this feature.
+
+When strict 'vars' is in scope I<base> also let you assign to @ISA
+without having to declare @ISA with the 'vars' pragma first.
+
+If any of the base classes are not loaded yet, I<base> silently
+C<require>s them. Whether to C<require> a base class package is
+determined by the absence of a global $VERSION in the base package.
+If $VERSION is not detected even after loading it, <base> will
+define $VERSION in the base package, setting it to the string
+C<-1, set by base.pm>.
+
+=head1 HISTORY
+
+This module was introduced with Perl 5.004_04.
+
+=head1 SEE ALSO
+
+L<fields>
+
+=cut
+
+package base;
+
+use 5.006_001;
+our $VERSION = "1.03";
+
+sub import {
+ my $class = shift;
+ my $fields_base;
+ my $pkg = caller(0);
+
+ foreach my $base (@_) {
+ next if $pkg->isa($base);
+ my $vglob;
+ if ($vglob = ${"$base\::"}{VERSION} and *$vglob{SCALAR}) {
+ $$vglob = "-1, set by base.pm" unless defined $$vglob;
+ } else {
+ eval "require $base";
+ # Only ignore "Can't locate" errors from our eval require.
+ # Other fatal errors (syntax etc) must be reported.
+ die if $@ && $@ !~ /^Can't locate .*? at \(eval /;
+ unless (%{"$base\::"}) {
+ require Carp;
+ Carp::croak("Base class package \"$base\" is empty.\n",
+ "\t(Perhaps you need to 'use' the module ",
+ "which defines that package first.)");
+ }
+ ${"$base\::VERSION"} = "-1, set by base.pm" unless defined ${"$base\::VERSION"};
+ }
+ push @{"$pkg\::ISA"}, $base;
+
+ # A simple test like (defined %{"$base\::FIELDS"}) will
+ # sometimes produce typo warnings because it would create
+ # the hash if it was not present before.
+ my $fglob;
+ if ($fglob = ${"$base\::"}{"FIELDS"} and *$fglob{HASH}) {
+ if ($fields_base) {
+ require Carp;
+ Carp::croak("Can't multiply inherit %FIELDS");
+ } else {
+ $fields_base = $base;
+ }
+ }
+ }
+ if ($fields_base) {
+ require fields;
+ fields::inherit($pkg, $fields_base);
+ }
+}
+
+1;
diff --git a/Master/xemtex/perl/lib/bytes.pm b/Master/xemtex/perl/lib/bytes.pm
new file mode 100644
index 00000000000..cd82abc75b5
--- /dev/null
+++ b/Master/xemtex/perl/lib/bytes.pm
@@ -0,0 +1,68 @@
+package bytes;
+
+our $VERSION = '1.00';
+
+$bytes::hint_bits = 0x00000008;
+
+sub import {
+ $^H |= $bytes::hint_bits;
+}
+
+sub unimport {
+ $^H &= ~$bytes::hint_bits;
+}
+
+sub AUTOLOAD {
+ require "bytes_heavy.pl";
+ goto &$AUTOLOAD;
+}
+
+sub length ($);
+
+1;
+__END__
+
+=head1 NAME
+
+bytes - Perl pragma to force byte semantics rather than character semantics
+
+=head1 SYNOPSIS
+
+ use bytes;
+ no bytes;
+
+=head1 DESCRIPTION
+
+The C<use bytes> pragma disables character semantics for the rest of the
+lexical scope in which it appears. C<no bytes> can be used to reverse
+the effect of C<use bytes> within the current lexical scope.
+
+Perl normally assumes character semantics in the presence of character
+data (i.e. data that has come from a source that has been marked as
+being of a particular character encoding). When C<use bytes> is in
+effect, the encoding is temporarily ignored, and each string is treated
+as a series of bytes.
+
+As an example, when Perl sees C<$x = chr(400)>, it encodes the character
+in UTF-8 and stores it in $x. Then it is marked as character data, so,
+for instance, C<length $x> returns C<1>. However, in the scope of the
+C<bytes> pragma, $x is treated as a series of bytes - the bytes that make
+up the UTF8 encoding - and C<length $x> returns C<2>:
+
+ $x = chr(400);
+ print "Length is ", length $x, "\n"; # "Length is 1"
+ printf "Contents are %vd\n", $x; # "Contents are 400"
+ {
+ use bytes;
+ print "Length is ", length $x, "\n"; # "Length is 2"
+ printf "Contents are %vd\n", $x; # "Contents are 198.144"
+ }
+
+For more on the implications and differences between character
+semantics and byte semantics, see L<perlunicode>.
+
+=head1 SEE ALSO
+
+L<perlunicode>, L<utf8>
+
+=cut
diff --git a/Master/xemtex/perl/lib/bytes_heavy.pl b/Master/xemtex/perl/lib/bytes_heavy.pl
new file mode 100644
index 00000000000..47bdbf91b0d
--- /dev/null
+++ b/Master/xemtex/perl/lib/bytes_heavy.pl
@@ -0,0 +1,8 @@
+package bytes;
+
+sub length ($) {
+ BEGIN { bytes::import() }
+ return CORE::length($_[0]);
+}
+
+1;
diff --git a/Master/xemtex/perl/lib/constant.pm b/Master/xemtex/perl/lib/constant.pm
new file mode 100644
index 00000000000..93086d53985
--- /dev/null
+++ b/Master/xemtex/perl/lib/constant.pm
@@ -0,0 +1,345 @@
+package constant;
+
+use strict;
+use 5.006_00;
+use warnings::register;
+
+our($VERSION, %declared);
+$VERSION = '1.04';
+
+#=======================================================================
+
+# Some names are evil choices.
+my %keywords = map +($_, 1), qw{ BEGIN INIT CHECK END DESTROY AUTOLOAD };
+
+my %forced_into_main = map +($_, 1),
+ qw{ STDIN STDOUT STDERR ARGV ARGVOUT ENV INC SIG };
+
+my %forbidden = (%keywords, %forced_into_main);
+
+#=======================================================================
+# import() - import symbols into user's namespace
+#
+# What we actually do is define a function in the caller's namespace
+# which returns the value. The function we create will normally
+# be inlined as a constant, thereby avoiding further sub calling
+# overhead.
+#=======================================================================
+sub import {
+ my $class = shift;
+ return unless @_; # Ignore 'use constant;'
+ my %constants = ();
+ my $multiple = ref $_[0];
+
+ if ( $multiple ) {
+ if (ref $_[0] ne 'HASH') {
+ require Carp;
+ Carp::croak("Invalid reference type '".ref(shift)."' not 'HASH'");
+ }
+ %constants = %{+shift};
+ } else {
+ $constants{+shift} = undef;
+ }
+
+ foreach my $name ( keys %constants ) {
+ unless (defined $name) {
+ require Carp;
+ Carp::croak("Can't use undef as constant name");
+ }
+ my $pkg = caller;
+
+ # Normal constant name
+ if ($name =~ /^_?[^\W_0-9]\w*\z/ and !$forbidden{$name}) {
+ # Everything is okay
+
+ # Name forced into main, but we're not in main. Fatal.
+ } elsif ($forced_into_main{$name} and $pkg ne 'main') {
+ require Carp;
+ Carp::croak("Constant name '$name' is forced into main::");
+
+ # Starts with double underscore. Fatal.
+ } elsif ($name =~ /^__/) {
+ require Carp;
+ Carp::croak("Constant name '$name' begins with '__'");
+
+ # Maybe the name is tolerable
+ } elsif ($name =~ /^[A-Za-z_]\w*\z/) {
+ # Then we'll warn only if you've asked for warnings
+ if (warnings::enabled()) {
+ if ($keywords{$name}) {
+ warnings::warn("Constant name '$name' is a Perl keyword");
+ } elsif ($forced_into_main{$name}) {
+ warnings::warn("Constant name '$name' is " .
+ "forced into package main::");
+ } else {
+ # Catch-all - what did I miss? If you get this error,
+ # please let me know what your constant's name was.
+ # Write to <rootbeer@redcat.com>. Thanks!
+ warnings::warn("Constant name '$name' has unknown problems");
+ }
+ }
+
+ # Looks like a boolean
+ # use constant FRED == fred;
+ } elsif ($name =~ /^[01]?\z/) {
+ require Carp;
+ if (@_) {
+ Carp::croak("Constant name '$name' is invalid");
+ } else {
+ Carp::croak("Constant name looks like boolean value");
+ }
+
+ } else {
+ # Must have bad characters
+ require Carp;
+ Carp::croak("Constant name '$name' has invalid characters");
+ }
+
+ {
+ no strict 'refs';
+ my $full_name = "${pkg}::$name";
+ $declared{$full_name}++;
+ if ($multiple) {
+ my $scalar = $constants{$name};
+ *$full_name = sub () { $scalar };
+ } else {
+ if (@_ == 1) {
+ my $scalar = $_[0];
+ *$full_name = sub () { $scalar };
+ } elsif (@_) {
+ my @list = @_;
+ *$full_name = sub () { @list };
+ } else {
+ *$full_name = sub () { };
+ }
+ }
+ }
+ }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+constant - Perl pragma to declare constants
+
+=head1 SYNOPSIS
+
+ use constant PI => 4 * atan2(1, 1);
+ use constant DEBUG => 0;
+
+ print "Pi equals ", PI, "...\n" if DEBUG;
+
+ use constant {
+ SEC => 0,
+ MIN => 1,
+ HOUR => 2,
+ MDAY => 3,
+ MON => 4,
+ YEAR => 5,
+ WDAY => 6,
+ YDAY => 7,
+ ISDST => 8,
+ };
+
+ use constant WEEKDAYS => qw(
+ Sunday Monday Tuesday Wednesday Thursday Friday Saturday
+ );
+
+ print "Today is ", (WEEKDAYS)[ (localtime)[WDAY] ], ".\n";
+
+=head1 DESCRIPTION
+
+This will declare a symbol to be a constant with the given value.
+
+When you declare a constant such as C<PI> using the method shown
+above, each machine your script runs upon can have as many digits
+of accuracy as it can use. Also, your program will be easier to
+read, more likely to be maintained (and maintained correctly), and
+far less likely to send a space probe to the wrong planet because
+nobody noticed the one equation in which you wrote C<3.14195>.
+
+When a constant is used in an expression, perl replaces it with its
+value at compile time, and may then optimize the expression further.
+In particular, any code in an C<if (CONSTANT)> block will be optimized
+away if the constant is false.
+
+=head1 NOTES
+
+As with all C<use> directives, defining a constant happens at
+compile time. Thus, it's probably not correct to put a constant
+declaration inside of a conditional statement (like C<if ($foo)
+{ use constant ... }>).
+
+Constants defined using this module cannot be interpolated into
+strings like variables. However, concatenation works just fine:
+
+ print "Pi equals PI...\n"; # WRONG: does not expand "PI"
+ print "Pi equals ".PI."...\n"; # right
+
+Even though a reference may be declared as a constant, the reference may
+point to data which may be changed, as this code shows.
+
+ use constant ARRAY => [ 1,2,3,4 ];
+ print ARRAY->[1];
+ ARRAY->[1] = " be changed";
+ print ARRAY->[1];
+
+Dereferencing constant references incorrectly (such as using an array
+subscript on a constant hash reference, or vice versa) will be trapped at
+compile time.
+
+Constants belong to the package they are defined in. To refer to a
+constant defined in another package, specify the full package name, as
+in C<Some::Package::CONSTANT>. Constants may be exported by modules,
+and may also be called as either class or instance methods, that is,
+as C<< Some::Package->CONSTANT >> or as C<< $obj->CONSTANT >> where
+C<$obj> is an instance of C<Some::Package>. Subclasses may define
+their own constants to override those in their base class.
+
+The use of all caps for constant names is merely a convention,
+although it is recommended in order to make constants stand out
+and to help avoid collisions with other barewords, keywords, and
+subroutine names. Constant names must begin with a letter or
+underscore. Names beginning with a double underscore are reserved. Some
+poor choices for names will generate warnings, if warnings are enabled at
+compile time.
+
+=head2 List constants
+
+Constants may be lists of more (or less) than one value. A constant
+with no values evaluates to C<undef> in scalar context. Note that
+constants with more than one value do I<not> return their last value in
+scalar context as one might expect. They currently return the number
+of values, but B<this may change in the future>. Do not use constants
+with multiple values in scalar context.
+
+B<NOTE:> This implies that the expression defining the value of a
+constant is evaluated in list context. This may produce surprises:
+
+ use constant TIMESTAMP => localtime; # WRONG!
+ use constant TIMESTAMP => scalar localtime; # right
+
+The first line above defines C<TIMESTAMP> as a 9-element list, as
+returned by localtime() in list context. To set it to the string
+returned by localtime() in scalar context, an explicit C<scalar>
+keyword is required.
+
+List constants are lists, not arrays. To index or slice them, they
+must be placed in parentheses.
+
+ my @workdays = WEEKDAYS[1 .. 5]; # WRONG!
+ my @workdays = (WEEKDAYS)[1 .. 5]; # right
+
+=head2 Defining multiple constants at once
+
+Instead of writing multiple C<use constant> statements, you may define
+multiple constants in a single statement by giving, instead of the
+constant name, a reference to a hash where the keys are the names of
+the constants to be defined. Obviously, all constants defined using
+this method must have a single value.
+
+ use constant {
+ FOO => "A single value",
+ BAR => "This", "won't", "work!", # Error!
+ };
+
+This is a fundamental limitation of the way hashes are constructed in
+Perl. The error messages produced when this happens will often be
+quite cryptic -- in the worst case there may be none at all, and
+you'll only later find that something is broken.
+
+When defining multiple constants, you cannot use the values of other
+constants defined in the same declaration. This is because the
+calling package doesn't know about any constant within that group
+until I<after> the C<use> statement is finished.
+
+ use constant {
+ BITMASK => 0xAFBAEBA8,
+ NEGMASK => ~BITMASK, # Error!
+ };
+
+=head2 Magic constants
+
+Magical values and references can be made into constants at compile
+time, allowing for way cool stuff like this. (These error numbers
+aren't totally portable, alas.)
+
+ use constant E2BIG => ($! = 7);
+ print E2BIG, "\n"; # something like "Arg list too long"
+ print 0+E2BIG, "\n"; # "7"
+
+You can't produce a tied constant by giving a tied scalar as the
+value. References to tied variables, however, can be used as
+constants without any problems.
+
+=head1 TECHNICAL NOTES
+
+In the current implementation, scalar constants are actually
+inlinable subroutines. As of version 5.004 of Perl, the appropriate
+scalar constant is inserted directly in place of some subroutine
+calls, thereby saving the overhead of a subroutine call. See
+L<perlsub/"Constant Functions"> for details about how and when this
+happens.
+
+In the rare case in which you need to discover at run time whether a
+particular constant has been declared via this module, you may use
+this function to examine the hash C<%constant::declared>. If the given
+constant name does not include a package name, the current package is
+used.
+
+ sub declared ($) {
+ use constant 1.01; # don't omit this!
+ my $name = shift;
+ $name =~ s/^::/main::/;
+ my $pkg = caller;
+ my $full_name = $name =~ /::/ ? $name : "${pkg}::$name";
+ $constant::declared{$full_name};
+ }
+
+=head1 BUGS
+
+In the current version of Perl, list constants are not inlined
+and some symbols may be redefined without generating a warning.
+
+It is not possible to have a subroutine or a keyword with the same
+name as a constant in the same package. This is probably a Good Thing.
+
+A constant with a name in the list C<STDIN STDOUT STDERR ARGV ARGVOUT
+ENV INC SIG> is not allowed anywhere but in package C<main::>, for
+technical reasons.
+
+Unlike constants in some languages, these cannot be overridden
+on the command line or via environment variables.
+
+You can get into trouble if you use constants in a context which
+automatically quotes barewords (as is true for any subroutine call).
+For example, you can't say C<$hash{CONSTANT}> because C<CONSTANT> will
+be interpreted as a string. Use C<$hash{CONSTANT()}> or
+C<$hash{+CONSTANT}> to prevent the bareword quoting mechanism from
+kicking in. Similarly, since the C<< => >> operator quotes a bareword
+immediately to its left, you have to say C<< CONSTANT() => 'value' >>
+(or simply use a comma in place of the big arrow) instead of
+C<< CONSTANT => 'value' >>.
+
+=head1 AUTHOR
+
+Tom Phoenix, E<lt>F<rootbeer@redcat.com>E<gt>, with help from
+many other folks.
+
+Multiple constant declarations at once added by Casey West,
+E<lt>F<casey@geeknest.com>E<gt>.
+
+Documentation mostly rewritten by Ilmari Karonen,
+E<lt>F<perl@itz.pp.sci.fi>E<gt>.
+
+=head1 COPYRIGHT
+
+Copyright (C) 1997, 1999 Tom Phoenix
+
+This module is free software; you can redistribute it or modify it
+under the same terms as Perl itself.
+
+=cut
diff --git a/Master/xemtex/perl/lib/fields.pm b/Master/xemtex/perl/lib/fields.pm
new file mode 100644
index 00000000000..be2a7aedab4
--- /dev/null
+++ b/Master/xemtex/perl/lib/fields.pm
@@ -0,0 +1,285 @@
+package fields;
+
+=head1 NAME
+
+fields - compile-time class fields
+
+=head1 SYNOPSIS
+
+ {
+ package Foo;
+ use fields qw(foo bar _Foo_private);
+ sub new {
+ my Foo $self = shift;
+ unless (ref $self) {
+ $self = fields::new($self);
+ $self->{_Foo_private} = "this is Foo's secret";
+ }
+ $self->{foo} = 10;
+ $self->{bar} = 20;
+ return $self;
+ }
+ }
+
+ my Foo $var = Foo::->new;
+ $var->{foo} = 42;
+
+ # this will generate a compile-time error
+ $var->{zap} = 42;
+
+ # subclassing
+ {
+ package Bar;
+ use base 'Foo';
+ use fields qw(baz _Bar_private); # not shared with Foo
+ sub new {
+ my $class = shift;
+ my $self = fields::new($class);
+ $self->SUPER::new(); # init base fields
+ $self->{baz} = 10; # init own fields
+ $self->{_Bar_private} = "this is Bar's secret";
+ return $self;
+ }
+ }
+
+=head1 DESCRIPTION
+
+The C<fields> pragma enables compile-time verified class fields.
+
+NOTE: The current implementation keeps the declared fields in the %FIELDS
+hash of the calling package, but this may change in future versions.
+Do B<not> update the %FIELDS hash directly, because it must be created
+at compile-time for it to be fully useful, as is done by this pragma.
+
+If a typed lexical variable holding a reference is used to access a
+hash element and a package with the same name as the type has declared
+class fields using this pragma, then the operation is turned into an
+array access at compile time.
+
+The related C<base> pragma will combine fields from base classes and any
+fields declared using the C<fields> pragma. This enables field
+inheritance to work properly.
+
+Field names that start with an underscore character are made private to
+the class and are not visible to subclasses. Inherited fields can be
+overridden but will generate a warning if used together with the C<-w>
+switch.
+
+The effect of all this is that you can have objects with named fields
+which are as compact and as fast arrays to access. This only works
+as long as the objects are accessed through properly typed variables.
+If the objects are not typed, access is only checked at run time.
+
+The following functions are supported:
+
+=over 8
+
+=item new
+
+fields::new() creates and blesses a pseudo-hash comprised of the fields
+declared using the C<fields> pragma into the specified class.
+This makes it possible to write a constructor like this:
+
+ package Critter::Sounds;
+ use fields qw(cat dog bird);
+
+ sub new {
+ my Critter::Sounds $self = shift;
+ $self = fields::new($self) unless ref $self;
+ $self->{cat} = 'meow'; # scalar element
+ @$self{'dog','bird'} = ('bark','tweet'); # slice
+ return $self;
+ }
+
+=item phash
+
+fields::phash() can be used to create and initialize a plain (unblessed)
+pseudo-hash. This function should always be used instead of creating
+pseudo-hashes directly.
+
+If the first argument is a reference to an array, the pseudo-hash will
+be created with keys from that array. If a second argument is supplied,
+it must also be a reference to an array whose elements will be used as
+the values. If the second array contains less elements than the first,
+the trailing elements of the pseudo-hash will not be initialized.
+This makes it particularly useful for creating a pseudo-hash from
+subroutine arguments:
+
+ sub dogtag {
+ my $tag = fields::phash([qw(name rank ser_num)], [@_]);
+ }
+
+fields::phash() also accepts a list of key-value pairs that will
+be used to construct the pseudo hash. Examples:
+
+ my $tag = fields::phash(name => "Joe",
+ rank => "captain",
+ ser_num => 42);
+
+ my $pseudohash = fields::phash(%args);
+
+=back
+
+=head1 SEE ALSO
+
+L<base>,
+L<perlref/Pseudo-hashes: Using an array as a hash>
+
+=cut
+
+use 5.006_001;
+use strict;
+no strict 'refs';
+use warnings::register;
+our(%attr, $VERSION);
+
+$VERSION = "1.02";
+
+# some constants
+sub _PUBLIC () { 1 }
+sub _PRIVATE () { 2 }
+
+# The %attr hash holds the attributes of the currently assigned fields
+# per class. The hash is indexed by class names and the hash value is
+# an array reference. The first element in the array is the lowest field
+# number not belonging to a base class. The remaining elements' indices
+# are the field numbers. The values are integer bit masks, or undef
+# in the case of base class private fields (which occupy a slot but are
+# otherwise irrelevant to the class).
+
+sub import {
+ my $class = shift;
+ return unless @_;
+ my $package = caller(0);
+ # avoid possible typo warnings
+ %{"$package\::FIELDS"} = () unless %{"$package\::FIELDS"};
+ my $fields = \%{"$package\::FIELDS"};
+ my $fattr = ($attr{$package} ||= [1]);
+ my $next = @$fattr;
+
+ if ($next > $fattr->[0]
+ and ($fields->{$_[0]} || 0) >= $fattr->[0])
+ {
+ # There are already fields not belonging to base classes.
+ # Looks like a possible module reload...
+ $next = $fattr->[0];
+ }
+ foreach my $f (@_) {
+ my $fno = $fields->{$f};
+
+ # Allow the module to be reloaded so long as field positions
+ # have not changed.
+ if ($fno and $fno != $next) {
+ require Carp;
+ if ($fno < $fattr->[0]) {
+ warnings::warnif("Hides field '$f' in base class") ;
+ } else {
+ Carp::croak("Field name '$f' already in use");
+ }
+ }
+ $fields->{$f} = $next;
+ $fattr->[$next] = ($f =~ /^_/) ? _PRIVATE : _PUBLIC;
+ $next += 1;
+ }
+ if (@$fattr > $next) {
+ # Well, we gave them the benefit of the doubt by guessing the
+ # module was reloaded, but they appear to be declaring fields
+ # in more than one place. We can't be sure (without some extra
+ # bookkeeping) that the rest of the fields will be declared or
+ # have the same positions, so punt.
+ require Carp;
+ Carp::croak ("Reloaded module must declare all fields at once");
+ }
+}
+
+sub inherit { # called by base.pm when $base_fields is nonempty
+ my($derived, $base) = @_;
+ my $base_attr = $attr{$base};
+ my $derived_attr = $attr{$derived} ||= [];
+ # avoid possible typo warnings
+ %{"$base\::FIELDS"} = () unless %{"$base\::FIELDS"};
+ %{"$derived\::FIELDS"} = () unless %{"$derived\::FIELDS"};
+ my $base_fields = \%{"$base\::FIELDS"};
+ my $derived_fields = \%{"$derived\::FIELDS"};
+
+ $derived_attr->[0] = $base_attr ? scalar(@$base_attr) : 1;
+ while (my($k,$v) = each %$base_fields) {
+ my($fno);
+ if ($fno = $derived_fields->{$k} and $fno != $v) {
+ require Carp;
+ Carp::croak ("Inherited %FIELDS can't override existing %FIELDS");
+ }
+ if ($base_attr->[$v] & _PRIVATE) {
+ $derived_attr->[$v] = undef;
+ } else {
+ $derived_attr->[$v] = $base_attr->[$v];
+ $derived_fields->{$k} = $v;
+ }
+ }
+}
+
+sub _dump # sometimes useful for debugging
+{
+ for my $pkg (sort keys %attr) {
+ print "\n$pkg";
+ if (@{"$pkg\::ISA"}) {
+ print " (", join(", ", @{"$pkg\::ISA"}), ")";
+ }
+ print "\n";
+ my $fields = \%{"$pkg\::FIELDS"};
+ for my $f (sort {$fields->{$a} <=> $fields->{$b}} keys %$fields) {
+ my $no = $fields->{$f};
+ print " $no: $f";
+ my $fattr = $attr{$pkg}[$no];
+ if (defined $fattr) {
+ my @a;
+ push(@a, "public") if $fattr & _PUBLIC;
+ push(@a, "private") if $fattr & _PRIVATE;
+ push(@a, "inherited") if $no < $attr{$pkg}[0];
+ print "\t(", join(", ", @a), ")";
+ }
+ print "\n";
+ }
+ }
+}
+
+sub new {
+ my $class = shift;
+ $class = ref $class if ref $class;
+ return bless [\%{$class . "::FIELDS"}], $class;
+}
+
+sub phash {
+ my $h;
+ my $v;
+ if (@_) {
+ if (ref $_[0] eq 'ARRAY') {
+ my $a = shift;
+ @$h{@$a} = 1 .. @$a;
+ if (@_) {
+ $v = shift;
+ unless (! @_ and ref $v eq 'ARRAY') {
+ require Carp;
+ Carp::croak ("Expected at most two array refs\n");
+ }
+ }
+ }
+ else {
+ if (@_ % 2) {
+ require Carp;
+ Carp::croak ("Odd number of elements initializing pseudo-hash\n");
+ }
+ my $i = 0;
+ @$h{grep ++$i % 2, @_} = 1 .. @_ / 2;
+ $i = 0;
+ $v = [grep $i++ % 2, @_];
+ }
+ }
+ else {
+ $h = {};
+ $v = [];
+ }
+ [ $h, @$v ];
+}
+
+1;
diff --git a/Master/xemtex/perl/lib/integer.pm b/Master/xemtex/perl/lib/integer.pm
new file mode 100644
index 00000000000..caa1ea6951f
--- /dev/null
+++ b/Master/xemtex/perl/lib/integer.pm
@@ -0,0 +1,93 @@
+package integer;
+
+our $VERSION = '1.00';
+
+=head1 NAME
+
+integer - Perl pragma to use integer arithmetic instead of floating point
+
+=head1 SYNOPSIS
+
+ use integer;
+ $x = 10/3;
+ # $x is now 3, not 3.33333333333333333
+
+=head1 DESCRIPTION
+
+This tells the compiler to use integer operations from here to the end
+of the enclosing BLOCK. On many machines, this doesn't matter a great
+deal for most computations, but on those without floating point
+hardware, it can make a big difference in performance.
+
+Note that this only affects how most of the arithmetic and relational
+B<operators> handle their operands and results, and B<not> how all
+numbers everywhere are treated. Specifically, C<use integer;> has the
+effect that before computing the results of the arithmetic operators
+(+, -, *, /, %, +=, -=, *=, /=, %=, and unary minus), the comparison
+operators (<, <=, >, >=, ==, !=, <=>), and the bitwise operators (|, &,
+^, <<, >>, |=, &=, ^=, <<=, >>=), the operands have their fractional
+portions truncated (or floored), and the result will have its
+fractional portion truncated as well. In addition, the range of
+operands and results is restricted to that of familiar two's complement
+integers, i.e., -(2**31) .. (2**31-1) on 32-bit architectures, and
+-(2**63) .. (2**63-1) on 64-bit architectures. For example, this code
+
+ use integer;
+ $x = 5.8;
+ $y = 2.5;
+ $z = 2.7;
+ $a = 2**31 - 1; # Largest positive integer on 32-bit machines
+ $, = ", ";
+ print $x, -$x, $x + $y, $x - $y, $x / $y, $x * $y, $y == $z, $a, $a + 1;
+
+will print: 5.8, -5, 7, 3, 2, 10, 1, 2147483647, -2147483648
+
+Note that $x is still printed as having its true non-integer value of
+5.8 since it wasn't operated on. And note too the wrap-around from the
+largest positive integer to the largest negative one. Also, arguments
+passed to functions and the values returned by them are B<not> affected
+by C<use integer;>. E.g.,
+
+ srand(1.5);
+ $, = ", ";
+ print sin(.5), cos(.5), atan2(1,2), sqrt(2), rand(10);
+
+will give the same result with or without C<use integer;> The power
+operator C<**> is also not affected, so that 2 ** .5 is always the
+square root of 2. Now, it so happens that the pre- and post- increment
+and decrement operators, ++ and --, are not affected by C<use integer;>
+either. Some may rightly consider this to be a bug -- but at least it's
+a long-standing one.
+
+Finally, C<use integer;> also has an additional affect on the bitwise
+operators. Normally, the operands and results are treated as
+B<unsigned> integers, but with C<use integer;> the operands and results
+are B<signed>. This means, among other things, that ~0 is -1, and -2 &
+-5 is -6.
+
+Internally, native integer arithmetic (as provided by your C compiler)
+is used. This means that Perl's own semantics for arithmetic
+operations may not be preserved. One common source of trouble is the
+modulus of negative numbers, which Perl does one way, but your hardware
+may do another.
+
+ % perl -le 'print (4 % -3)'
+ -2
+ % perl -Minteger -le 'print (4 % -3)'
+ 1
+
+See L<perlmodlib/"Pragmatic Modules">, L<perlop/"Integer Arithmetic">
+
+=cut
+
+$integer::hint_bits = 0x1;
+
+sub import {
+ $^H |= $integer::hint_bits;
+}
+
+sub unimport {
+ $^H &= ~$integer::hint_bits;
+}
+
+1;
diff --git a/Master/xemtex/perl/lib/lib.pm b/Master/xemtex/perl/lib/lib.pm
new file mode 100644
index 00000000000..83b8d737cd7
--- /dev/null
+++ b/Master/xemtex/perl/lib/lib.pm
@@ -0,0 +1,205 @@
+package lib;
+
+# THIS FILE IS AUTOMATICALLY GENERATED FROM lib_pm.PL.
+# ANY CHANGES TO THIS FILE WILL BE OVERWRITTEN BY THE NEXT PERL BUILD.
+
+use Config;
+
+use strict;
+
+my $archname = $Config{archname};
+my $version = $Config{version};
+my @inc_version_list = reverse split / /, $Config{inc_version_list};
+
+
+our @ORIG_INC = @INC; # take a handy copy of 'original' value
+our $VERSION = '0.5564';
+my $Is_MacOS = $^O eq 'MacOS';
+my $Mac_FS;
+if ($Is_MacOS) {
+ require File::Spec;
+ $Mac_FS = eval { require Mac::FileSpec::Unixish };
+}
+
+sub import {
+ shift;
+
+ my %names;
+ foreach (reverse @_) {
+ if ($_ eq '') {
+ require Carp;
+ Carp::carp("Empty compile time value given to use lib");
+ }
+
+ local $_ = _nativize($_);
+
+ if (-e && ! -d _) {
+ require Carp;
+ Carp::carp("Parameter to use lib must be directory, not file");
+ }
+ unshift(@INC, $_);
+ # Add any previous version directories we found at configure time
+ foreach my $incver (@inc_version_list)
+ {
+ my $dir = $Is_MacOS
+ ? File::Spec->catdir( $_, $incver )
+ : "$_/$incver";
+ unshift(@INC, $dir) if -d $dir;
+ }
+ # Put a corresponding archlib directory in front of $_ if it
+ # looks like $_ has an archlib directory below it.
+ my($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir)
+ = _get_dirs($_);
+ unshift(@INC, $arch_dir) if -d $arch_auto_dir;
+ unshift(@INC, $version_dir) if -d $version_dir;
+ unshift(@INC, $version_arch_dir) if -d $version_arch_dir;
+ }
+
+ # remove trailing duplicates
+ @INC = grep { ++$names{$_} == 1 } @INC;
+ return;
+}
+
+
+sub unimport {
+ shift;
+
+ my %names;
+ foreach (@_) {
+ local $_ = _nativize($_);
+
+ my($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir)
+ = _get_dirs($_);
+ ++$names{$_};
+ ++$names{$arch_dir} if -d $arch_auto_dir;
+ ++$names{$version_dir} if -d $version_dir;
+ ++$names{$version_arch_dir} if -d $version_arch_dir;
+ }
+
+ # Remove ALL instances of each named directory.
+ @INC = grep { !exists $names{$_} } @INC;
+ return;
+}
+
+sub _get_dirs {
+ my($dir) = @_;
+ my($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir);
+
+ # we could use this for all platforms in the future, but leave it
+ # Mac-only for now, until there is more time for testing it.
+ if ($Is_MacOS) {
+ $arch_auto_dir = File::Spec->catdir( $_, $archname, 'auto' );
+ $arch_dir = File::Spec->catdir( $_, $archname, );
+ $version_dir = File::Spec->catdir( $_, $version );
+ $version_arch_dir = File::Spec->catdir( $_, $version, $archname );
+ } else {
+ $arch_auto_dir = "$_/$archname/auto";
+ $arch_dir = "$_/$archname";
+ $version_dir = "$_/$version";
+ $version_arch_dir = "$_/$version/$archname";
+ }
+ return($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir);
+}
+
+sub _nativize {
+ my($dir) = @_;
+
+ if ($Is_MacOS && $Mac_FS && ! -d $dir) {
+ $dir = Mac::FileSpec::Unixish::nativize($dir);
+ $dir .= ":" unless $dir =~ /:$/;
+ }
+
+ return $dir;
+}
+
+1;
+__END__
+
+=head1 NAME
+
+lib - manipulate @INC at compile time
+
+=head1 SYNOPSIS
+
+ use lib LIST;
+
+ no lib LIST;
+
+=head1 DESCRIPTION
+
+This is a small simple module which simplifies the manipulation of @INC
+at compile time.
+
+It is typically used to add extra directories to perl's search path so
+that later C<use> or C<require> statements will find modules which are
+not located on perl's default search path.
+
+=head2 Adding directories to @INC
+
+The parameters to C<use lib> are added to the start of the perl search
+path. Saying
+
+ use lib LIST;
+
+is I<almost> the same as saying
+
+ BEGIN { unshift(@INC, LIST) }
+
+For each directory in LIST (called $dir here) the lib module also
+checks to see if a directory called $dir/$archname/auto exists.
+If so the $dir/$archname directory is assumed to be a corresponding
+architecture specific directory and is added to @INC in front of $dir.
+
+To avoid memory leaks, all trailing duplicate entries in @INC are
+removed.
+
+=head2 Deleting directories from @INC
+
+You should normally only add directories to @INC. If you need to
+delete directories from @INC take care to only delete those which you
+added yourself or which you are certain are not needed by other modules
+in your script. Other modules may have added directories which they
+need for correct operation.
+
+The C<no lib> statement deletes all instances of each named directory
+from @INC.
+
+For each directory in LIST (called $dir here) the lib module also
+checks to see if a directory called $dir/$archname/auto exists.
+If so the $dir/$archname directory is assumed to be a corresponding
+architecture specific directory and is also deleted from @INC.
+
+=head2 Restoring original @INC
+
+When the lib module is first loaded it records the current value of @INC
+in an array C<@lib::ORIG_INC>. To restore @INC to that value you
+can say
+
+ @INC = @lib::ORIG_INC;
+
+=head1 CAVEATS
+
+In order to keep lib.pm small and simple, it only works with Unix
+filepaths. This doesn't mean it only works on Unix, but non-Unix
+users must first translate their file paths to Unix conventions.
+
+ # VMS users wanting to put [.stuff.moo] into
+ # their @INC would write
+ use lib 'stuff/moo';
+
+=head1 NOTES
+
+In the future, this module will likely use File::Spec for determining
+paths, as it does now for Mac OS (where Unix-style or Mac-style paths
+work, and Unix-style paths are converted properly to Mac-style paths
+before being added to @INC).
+
+=head1 SEE ALSO
+
+FindBin - optional module which deals with paths relative to the source file.
+
+=head1 AUTHOR
+
+Tim Bunce, 2nd June 1995.
+
+=cut
diff --git a/Master/xemtex/perl/lib/newgetopt.pl b/Master/xemtex/perl/lib/newgetopt.pl
new file mode 100644
index 00000000000..95eef220fe7
--- /dev/null
+++ b/Master/xemtex/perl/lib/newgetopt.pl
@@ -0,0 +1,75 @@
+# $Id: newgetopt.pl,v 1.18 2001-09-21 15:34:59+02 jv Exp $
+
+# This library is no longer being maintained, and is included for backward
+# compatibility with Perl 4 programs which may require it.
+# It is now just a wrapper around the Getopt::Long module.
+#
+# In particular, this should not be used as an example of modern Perl
+# programming techniques.
+#
+# Suggested alternative: Getopt::Long
+
+{ package newgetopt;
+
+ # Values for $order. See GNU getopt.c for details.
+ $REQUIRE_ORDER = 0;
+ $PERMUTE = 1;
+ $RETURN_IN_ORDER = 2;
+
+ # Handle POSIX compliancy.
+ if ( defined $ENV{"POSIXLY_CORRECT"} ) {
+ $autoabbrev = 0; # no automatic abbrev of options (???)
+ $getopt_compat = 0; # disallow '+' to start options
+ $option_start = "(--|-)";
+ $order = $REQUIRE_ORDER;
+ $bundling = 0;
+ $passthrough = 0;
+ }
+ else {
+ $autoabbrev = 1; # automatic abbrev of options
+ $getopt_compat = 1; # allow '+' to start options
+ $option_start = "(--|-|\\+)";
+ $order = $PERMUTE;
+ $bundling = 0;
+ $passthrough = 0;
+ }
+
+ # Other configurable settings.
+ $debug = 0; # for debugging
+ $ignorecase = 1; # ignore case when matching options
+ $argv_end = "--"; # don't change this!
+}
+
+use Getopt::Long;
+
+################ Subroutines ################
+
+sub NGetOpt {
+
+ $Getopt::Long::debug = $newgetopt::debug
+ if defined $newgetopt::debug;
+ $Getopt::Long::autoabbrev = $newgetopt::autoabbrev
+ if defined $newgetopt::autoabbrev;
+ $Getopt::Long::getopt_compat = $newgetopt::getopt_compat
+ if defined $newgetopt::getopt_compat;
+ $Getopt::Long::option_start = $newgetopt::option_start
+ if defined $newgetopt::option_start;
+ $Getopt::Long::order = $newgetopt::order
+ if defined $newgetopt::order;
+ $Getopt::Long::bundling = $newgetopt::bundling
+ if defined $newgetopt::bundling;
+ $Getopt::Long::ignorecase = $newgetopt::ignorecase
+ if defined $newgetopt::ignorecase;
+ $Getopt::Long::ignorecase = $newgetopt::ignorecase
+ if defined $newgetopt::ignorecase;
+ $Getopt::Long::passthrough = $newgetopt::passthrough
+ if defined $newgetopt::passthrough;
+
+ &GetOptions;
+}
+
+################ Package return ################
+
+1;
+
+################ End of newgetopt.pl ################
diff --git a/Master/xemtex/perl/lib/overload.pm b/Master/xemtex/perl/lib/overload.pm
new file mode 100644
index 00000000000..fb1a0d1236e
--- /dev/null
+++ b/Master/xemtex/perl/lib/overload.pm
@@ -0,0 +1,1432 @@
+package overload;
+
+our $VERSION = '1.00';
+
+$overload::hint_bits = 0x20000;
+
+sub nil {}
+
+sub OVERLOAD {
+ $package = shift;
+ my %arg = @_;
+ my ($sub, $fb);
+ $ {$package . "::OVERLOAD"}{dummy}++; # Register with magic by touching.
+ *{$package . "::()"} = \&nil; # Make it findable via fetchmethod.
+ for (keys %arg) {
+ if ($_ eq 'fallback') {
+ $fb = $arg{$_};
+ } else {
+ $sub = $arg{$_};
+ if (not ref $sub and $sub !~ /::/) {
+ $ {$package . "::(" . $_} = $sub;
+ $sub = \&nil;
+ }
+ #print STDERR "Setting `$ {'package'}::\cO$_' to \\&`$sub'.\n";
+ *{$package . "::(" . $_} = \&{ $sub };
+ }
+ }
+ ${$package . "::()"} = $fb; # Make it findable too (fallback only).
+}
+
+sub import {
+ $package = (caller())[0];
+ # *{$package . "::OVERLOAD"} = \&OVERLOAD;
+ shift;
+ $package->overload::OVERLOAD(@_);
+}
+
+sub unimport {
+ $package = (caller())[0];
+ ${$package . "::OVERLOAD"}{dummy}++; # Upgrade the table
+ shift;
+ for (@_) {
+ if ($_ eq 'fallback') {
+ undef $ {$package . "::()"};
+ } else {
+ delete $ {$package . "::"}{"(" . $_};
+ }
+ }
+}
+
+sub Overloaded {
+ my $package = shift;
+ $package = ref $package if ref $package;
+ $package->can('()');
+}
+
+sub ov_method {
+ my $globref = shift;
+ return undef unless $globref;
+ my $sub = \&{*$globref};
+ return $sub if $sub ne \&nil;
+ return shift->can($ {*$globref});
+}
+
+sub OverloadedStringify {
+ my $package = shift;
+ $package = ref $package if ref $package;
+ #$package->can('(""')
+ ov_method mycan($package, '(""'), $package
+ or ov_method mycan($package, '(0+'), $package
+ or ov_method mycan($package, '(bool'), $package
+ or ov_method mycan($package, '(nomethod'), $package;
+}
+
+sub Method {
+ my $package = shift;
+ $package = ref $package if ref $package;
+ #my $meth = $package->can('(' . shift);
+ ov_method mycan($package, '(' . shift), $package;
+ #return $meth if $meth ne \&nil;
+ #return $ {*{$meth}};
+}
+
+sub AddrRef {
+ my $package = ref $_[0];
+ return "$_[0]" unless $package;
+ bless $_[0], overload::Fake; # Non-overloaded package
+ my $str = "$_[0]";
+ bless $_[0], $package; # Back
+ $package . substr $str, index $str, '=';
+}
+
+sub StrVal {
+ (ref $_[0] && OverloadedStringify($_[0]) or ref($_[0]) eq 'Regexp') ?
+ (AddrRef(shift)) :
+ "$_[0]";
+}
+
+sub mycan { # Real can would leave stubs.
+ my ($package, $meth) = @_;
+ return \*{$package . "::$meth"} if defined &{$package . "::$meth"};
+ my $p;
+ foreach $p (@{$package . "::ISA"}) {
+ my $out = mycan($p, $meth);
+ return $out if $out;
+ }
+ return undef;
+}
+
+%constants = (
+ 'integer' => 0x1000,
+ 'float' => 0x2000,
+ 'binary' => 0x4000,
+ 'q' => 0x8000,
+ 'qr' => 0x10000,
+ );
+
+%ops = ( with_assign => "+ - * / % ** << >> x .",
+ assign => "+= -= *= /= %= **= <<= >>= x= .=",
+ num_comparison => "< <= > >= == !=",
+ '3way_comparison'=> "<=> cmp",
+ str_comparison => "lt le gt ge eq ne",
+ binary => "& | ^",
+ unary => "neg ! ~",
+ mutators => '++ --',
+ func => "atan2 cos sin exp abs log sqrt int",
+ conversion => 'bool "" 0+',
+ iterators => '<>',
+ dereferencing => '${} @{} %{} &{} *{}',
+ special => 'nomethod fallback =');
+
+use warnings::register;
+sub constant {
+ # Arguments: what, sub
+ while (@_) {
+ if (@_ == 1) {
+ warnings::warnif ("Odd number of arguments for overload::constant");
+ last;
+ }
+ elsif (!exists $constants {$_ [0]}) {
+ warnings::warnif ("`$_[0]' is not an overloadable type");
+ }
+ elsif (!ref $_ [1] || "$_[1]" !~ /CODE\(0x[\da-f]+\)$/) {
+ # Can't use C<ref $_[1] eq "CODE"> above as code references can be
+ # blessed, and C<ref> would return the package the ref is blessed into.
+ if (warnings::enabled) {
+ $_ [1] = "undef" unless defined $_ [1];
+ warnings::warn ("`$_[1]' is not a code reference");
+ }
+ }
+ else {
+ $^H{$_[0]} = $_[1];
+ $^H |= $constants{$_[0]} | $overload::hint_bits;
+ }
+ shift, shift;
+ }
+}
+
+sub remove_constant {
+ # Arguments: what, sub
+ while (@_) {
+ delete $^H{$_[0]};
+ $^H &= ~ $constants{$_[0]};
+ shift, shift;
+ }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+overload - Package for overloading perl operations
+
+=head1 SYNOPSIS
+
+ package SomeThing;
+
+ use overload
+ '+' => \&myadd,
+ '-' => \&mysub;
+ # etc
+ ...
+
+ package main;
+ $a = new SomeThing 57;
+ $b=5+$a;
+ ...
+ if (overload::Overloaded $b) {...}
+ ...
+ $strval = overload::StrVal $b;
+
+=head1 DESCRIPTION
+
+=head2 Declaration of overloaded functions
+
+The compilation directive
+
+ package Number;
+ use overload
+ "+" => \&add,
+ "*=" => "muas";
+
+declares function Number::add() for addition, and method muas() in
+the "class" C<Number> (or one of its base classes)
+for the assignment form C<*=> of multiplication.
+
+Arguments of this directive come in (key, value) pairs. Legal values
+are values legal inside a C<&{ ... }> call, so the name of a
+subroutine, a reference to a subroutine, or an anonymous subroutine
+will all work. Note that values specified as strings are
+interpreted as methods, not subroutines. Legal keys are listed below.
+
+The subroutine C<add> will be called to execute C<$a+$b> if $a
+is a reference to an object blessed into the package C<Number>, or if $a is
+not an object from a package with defined mathemagic addition, but $b is a
+reference to a C<Number>. It can also be called in other situations, like
+C<$a+=7>, or C<$a++>. See L<MAGIC AUTOGENERATION>. (Mathemagical
+methods refer to methods triggered by an overloaded mathematical
+operator.)
+
+Since overloading respects inheritance via the @ISA hierarchy, the
+above declaration would also trigger overloading of C<+> and C<*=> in
+all the packages which inherit from C<Number>.
+
+=head2 Calling Conventions for Binary Operations
+
+The functions specified in the C<use overload ...> directive are called
+with three (in one particular case with four, see L<Last Resort>)
+arguments. If the corresponding operation is binary, then the first
+two arguments are the two arguments of the operation. However, due to
+general object calling conventions, the first argument should always be
+an object in the package, so in the situation of C<7+$a>, the
+order of the arguments is interchanged. It probably does not matter
+when implementing the addition method, but whether the arguments
+are reversed is vital to the subtraction method. The method can
+query this information by examining the third argument, which can take
+three different values:
+
+=over 7
+
+=item FALSE
+
+the order of arguments is as in the current operation.
+
+=item TRUE
+
+the arguments are reversed.
+
+=item C<undef>
+
+the current operation is an assignment variant (as in
+C<$a+=7>), but the usual function is called instead. This additional
+information can be used to generate some optimizations. Compare
+L<Calling Conventions for Mutators>.
+
+=back
+
+=head2 Calling Conventions for Unary Operations
+
+Unary operation are considered binary operations with the second
+argument being C<undef>. Thus the functions that overloads C<{"++"}>
+is called with arguments C<($a,undef,'')> when $a++ is executed.
+
+=head2 Calling Conventions for Mutators
+
+Two types of mutators have different calling conventions:
+
+=over
+
+=item C<++> and C<-->
+
+The routines which implement these operators are expected to actually
+I<mutate> their arguments. So, assuming that $obj is a reference to a
+number,
+
+ sub incr { my $n = $ {$_[0]}; ++$n; $_[0] = bless \$n}
+
+is an appropriate implementation of overloaded C<++>. Note that
+
+ sub incr { ++$ {$_[0]} ; shift }
+
+is OK if used with preincrement and with postincrement. (In the case
+of postincrement a copying will be performed, see L<Copy Constructor>.)
+
+=item C<x=> and other assignment versions
+
+There is nothing special about these methods. They may change the
+value of their arguments, and may leave it as is. The result is going
+to be assigned to the value in the left-hand-side if different from
+this value.
+
+This allows for the same method to be used as overloaded C<+=> and
+C<+>. Note that this is I<allowed>, but not recommended, since by the
+semantic of L<"Fallback"> Perl will call the method for C<+> anyway,
+if C<+=> is not overloaded.
+
+=back
+
+B<Warning.> Due to the presence of assignment versions of operations,
+routines which may be called in assignment context may create
+self-referential structures. Currently Perl will not free self-referential
+structures until cycles are C<explicitly> broken. You may get problems
+when traversing your structures too.
+
+Say,
+
+ use overload '+' => sub { bless [ \$_[0], \$_[1] ] };
+
+is asking for trouble, since for code C<$obj += $foo> the subroutine
+is called as C<$obj = add($obj, $foo, undef)>, or C<$obj = [\$obj,
+\$foo]>. If using such a subroutine is an important optimization, one
+can overload C<+=> explicitly by a non-"optimized" version, or switch
+to non-optimized version if C<not defined $_[2]> (see
+L<Calling Conventions for Binary Operations>).
+
+Even if no I<explicit> assignment-variants of operators are present in
+the script, they may be generated by the optimizer. Say, C<",$obj,"> or
+C<',' . $obj . ','> may be both optimized to
+
+ my $tmp = ',' . $obj; $tmp .= ',';
+
+=head2 Overloadable Operations
+
+The following symbols can be specified in C<use overload> directive:
+
+=over 5
+
+=item * I<Arithmetic operations>
+
+ "+", "+=", "-", "-=", "*", "*=", "/", "/=", "%", "%=",
+ "**", "**=", "<<", "<<=", ">>", ">>=", "x", "x=", ".", ".=",
+
+For these operations a substituted non-assignment variant can be called if
+the assignment variant is not available. Methods for operations C<+>,
+C<->, C<+=>, and C<-=> can be called to automatically generate
+increment and decrement methods. The operation C<-> can be used to
+autogenerate missing methods for unary minus or C<abs>.
+
+See L<"MAGIC AUTOGENERATION">, L<"Calling Conventions for Mutators"> and
+L<"Calling Conventions for Binary Operations">) for details of these
+substitutions.
+
+=item * I<Comparison operations>
+
+ "<", "<=", ">", ">=", "==", "!=", "<=>",
+ "lt", "le", "gt", "ge", "eq", "ne", "cmp",
+
+If the corresponding "spaceship" variant is available, it can be
+used to substitute for the missing operation. During C<sort>ing
+arrays, C<cmp> is used to compare values subject to C<use overload>.
+
+=item * I<Bit operations>
+
+ "&", "^", "|", "neg", "!", "~",
+
+C<neg> stands for unary minus. If the method for C<neg> is not
+specified, it can be autogenerated using the method for
+subtraction. If the method for C<!> is not specified, it can be
+autogenerated using the methods for C<bool>, or C<"">, or C<0+>.
+
+=item * I<Increment and decrement>
+
+ "++", "--",
+
+If undefined, addition and subtraction methods can be
+used instead. These operations are called both in prefix and
+postfix form.
+
+=item * I<Transcendental functions>
+
+ "atan2", "cos", "sin", "exp", "abs", "log", "sqrt", "int"
+
+If C<abs> is unavailable, it can be autogenerated using methods
+for "E<lt>" or "E<lt>=E<gt>" combined with either unary minus or subtraction.
+
+Note that traditionally the Perl function L<int> rounds to 0, thus for
+floating-point-like types one should follow the same semantic. If
+C<int> is unavailable, it can be autogenerated using the overloading of
+C<0+>.
+
+=item * I<Boolean, string and numeric conversion>
+
+ 'bool', '""', '0+',
+
+If one or two of these operations are not overloaded, the remaining ones can
+be used instead. C<bool> is used in the flow control operators
+(like C<while>) and for the ternary C<?:> operation. These functions can
+return any arbitrary Perl value. If the corresponding operation for this value
+is overloaded too, that operation will be called again with this value.
+
+As a special case if the overload returns the object itself then it will
+be used directly. An overloaded conversion returning the object is
+probably a bug, because you're likely to get something that looks like
+C<YourPackage=HASH(0x8172b34)>.
+
+=item * I<Iteration>
+
+ "<>"
+
+If not overloaded, the argument will be converted to a filehandle or
+glob (which may require a stringification). The same overloading
+happens both for the I<read-filehandle> syntax C<E<lt>$varE<gt>> and
+I<globbing> syntax C<E<lt>${var}E<gt>>.
+
+B<BUGS> Even in list context, the iterator is currently called only
+once and with scalar context.
+
+=item * I<Dereferencing>
+
+ '${}', '@{}', '%{}', '&{}', '*{}'.
+
+If not overloaded, the argument will be dereferenced I<as is>, thus
+should be of correct type. These functions should return a reference
+of correct type, or another object with overloaded dereferencing.
+
+As a special case if the overload returns the object itself then it
+will be used directly (provided it is the correct type).
+
+The dereference operators must be specified explicitly they will not be passed to
+"nomethod".
+
+=item * I<Special>
+
+ "nomethod", "fallback", "=",
+
+see L<SPECIAL SYMBOLS FOR C<use overload>>.
+
+=back
+
+See L<"Fallback"> for an explanation of when a missing method can be
+autogenerated.
+
+A computer-readable form of the above table is available in the hash
+%overload::ops, with values being space-separated lists of names:
+
+ with_assign => '+ - * / % ** << >> x .',
+ assign => '+= -= *= /= %= **= <<= >>= x= .=',
+ num_comparison => '< <= > >= == !=',
+ '3way_comparison'=> '<=> cmp',
+ str_comparison => 'lt le gt ge eq ne',
+ binary => '& | ^',
+ unary => 'neg ! ~',
+ mutators => '++ --',
+ func => 'atan2 cos sin exp abs log sqrt',
+ conversion => 'bool "" 0+',
+ iterators => '<>',
+ dereferencing => '${} @{} %{} &{} *{}',
+ special => 'nomethod fallback ='
+
+=head2 Inheritance and overloading
+
+Inheritance interacts with overloading in two ways.
+
+=over
+
+=item Strings as values of C<use overload> directive
+
+If C<value> in
+
+ use overload key => value;
+
+is a string, it is interpreted as a method name.
+
+=item Overloading of an operation is inherited by derived classes
+
+Any class derived from an overloaded class is also overloaded. The
+set of overloaded methods is the union of overloaded methods of all
+the ancestors. If some method is overloaded in several ancestor, then
+which description will be used is decided by the usual inheritance
+rules:
+
+If C<A> inherits from C<B> and C<C> (in this order), C<B> overloads
+C<+> with C<\&D::plus_sub>, and C<C> overloads C<+> by C<"plus_meth">,
+then the subroutine C<D::plus_sub> will be called to implement
+operation C<+> for an object in package C<A>.
+
+=back
+
+Note that since the value of the C<fallback> key is not a subroutine,
+its inheritance is not governed by the above rules. In the current
+implementation, the value of C<fallback> in the first overloaded
+ancestor is used, but this is accidental and subject to change.
+
+=head1 SPECIAL SYMBOLS FOR C<use overload>
+
+Three keys are recognized by Perl that are not covered by the above
+description.
+
+=head2 Last Resort
+
+C<"nomethod"> should be followed by a reference to a function of four
+parameters. If defined, it is called when the overloading mechanism
+cannot find a method for some operation. The first three arguments of
+this function coincide with the arguments for the corresponding method if
+it were found, the fourth argument is the symbol
+corresponding to the missing method. If several methods are tried,
+the last one is used. Say, C<1-$a> can be equivalent to
+
+ &nomethodMethod($a,1,1,"-")
+
+if the pair C<"nomethod" =E<gt> "nomethodMethod"> was specified in the
+C<use overload> directive.
+
+The C<"nomethod"> mechanism is I<not> used for the dereference operators
+( ${} @{} %{} &{} *{} ).
+
+
+If some operation cannot be resolved, and there is no function
+assigned to C<"nomethod">, then an exception will be raised via die()--
+unless C<"fallback"> was specified as a key in C<use overload> directive.
+
+
+=head2 Fallback
+
+The key C<"fallback"> governs what to do if a method for a particular
+operation is not found. Three different cases are possible depending on
+the value of C<"fallback">:
+
+=over 16
+
+=item * C<undef>
+
+Perl tries to use a
+substituted method (see L<MAGIC AUTOGENERATION>). If this fails, it
+then tries to calls C<"nomethod"> value; if missing, an exception
+will be raised.
+
+=item * TRUE
+
+The same as for the C<undef> value, but no exception is raised. Instead,
+it silently reverts to what it would have done were there no C<use overload>
+present.
+
+=item * defined, but FALSE
+
+No autogeneration is tried. Perl tries to call
+C<"nomethod"> value, and if this is missing, raises an exception.
+
+=back
+
+B<Note.> C<"fallback"> inheritance via @ISA is not carved in stone
+yet, see L<"Inheritance and overloading">.
+
+=head2 Copy Constructor
+
+The value for C<"="> is a reference to a function with three
+arguments, i.e., it looks like the other values in C<use
+overload>. However, it does not overload the Perl assignment
+operator. This would go against Camel hair.
+
+This operation is called in the situations when a mutator is applied
+to a reference that shares its object with some other reference, such
+as
+
+ $a=$b;
+ ++$a;
+
+To make this change $a and not change $b, a copy of C<$$a> is made,
+and $a is assigned a reference to this new object. This operation is
+done during execution of the C<++$a>, and not during the assignment,
+(so before the increment C<$$a> coincides with C<$$b>). This is only
+done if C<++> is expressed via a method for C<'++'> or C<'+='> (or
+C<nomethod>). Note that if this operation is expressed via C<'+'>
+a nonmutator, i.e., as in
+
+ $a=$b;
+ $a=$a+1;
+
+then C<$a> does not reference a new copy of C<$$a>, since $$a does not
+appear as lvalue when the above code is executed.
+
+If the copy constructor is required during the execution of some mutator,
+but a method for C<'='> was not specified, it can be autogenerated as a
+string copy if the object is a plain scalar.
+
+=over 5
+
+=item B<Example>
+
+The actually executed code for
+
+ $a=$b;
+ Something else which does not modify $a or $b....
+ ++$a;
+
+may be
+
+ $a=$b;
+ Something else which does not modify $a or $b....
+ $a = $a->clone(undef,"");
+ $a->incr(undef,"");
+
+if $b was mathemagical, and C<'++'> was overloaded with C<\&incr>,
+C<'='> was overloaded with C<\&clone>.
+
+=back
+
+Same behaviour is triggered by C<$b = $a++>, which is consider a synonym for
+C<$b = $a; ++$a>.
+
+=head1 MAGIC AUTOGENERATION
+
+If a method for an operation is not found, and the value for C<"fallback"> is
+TRUE or undefined, Perl tries to autogenerate a substitute method for
+the missing operation based on the defined operations. Autogenerated method
+substitutions are possible for the following operations:
+
+=over 16
+
+=item I<Assignment forms of arithmetic operations>
+
+C<$a+=$b> can use the method for C<"+"> if the method for C<"+=">
+is not defined.
+
+=item I<Conversion operations>
+
+String, numeric, and boolean conversion are calculated in terms of one
+another if not all of them are defined.
+
+=item I<Increment and decrement>
+
+The C<++$a> operation can be expressed in terms of C<$a+=1> or C<$a+1>,
+and C<$a--> in terms of C<$a-=1> and C<$a-1>.
+
+=item C<abs($a)>
+
+can be expressed in terms of C<$aE<lt>0> and C<-$a> (or C<0-$a>).
+
+=item I<Unary minus>
+
+can be expressed in terms of subtraction.
+
+=item I<Negation>
+
+C<!> and C<not> can be expressed in terms of boolean conversion, or
+string or numerical conversion.
+
+=item I<Concatenation>
+
+can be expressed in terms of string conversion.
+
+=item I<Comparison operations>
+
+can be expressed in terms of its "spaceship" counterpart: either
+C<E<lt>=E<gt>> or C<cmp>:
+
+ <, >, <=, >=, ==, != in terms of <=>
+ lt, gt, le, ge, eq, ne in terms of cmp
+
+=item I<Iterator>
+
+ <> in terms of builtin operations
+
+=item I<Dereferencing>
+
+ ${} @{} %{} &{} *{} in terms of builtin operations
+
+=item I<Copy operator>
+
+can be expressed in terms of an assignment to the dereferenced value, if this
+value is a scalar and not a reference.
+
+=back
+
+=head1 Losing overloading
+
+The restriction for the comparison operation is that even if, for example,
+`C<cmp>' should return a blessed reference, the autogenerated `C<lt>'
+function will produce only a standard logical value based on the
+numerical value of the result of `C<cmp>'. In particular, a working
+numeric conversion is needed in this case (possibly expressed in terms of
+other conversions).
+
+Similarly, C<.=> and C<x=> operators lose their mathemagical properties
+if the string conversion substitution is applied.
+
+When you chop() a mathemagical object it is promoted to a string and its
+mathemagical properties are lost. The same can happen with other
+operations as well.
+
+=head1 Run-time Overloading
+
+Since all C<use> directives are executed at compile-time, the only way to
+change overloading during run-time is to
+
+ eval 'use overload "+" => \&addmethod';
+
+You can also use
+
+ eval 'no overload "+", "--", "<="';
+
+though the use of these constructs during run-time is questionable.
+
+=head1 Public functions
+
+Package C<overload.pm> provides the following public functions:
+
+=over 5
+
+=item overload::StrVal(arg)
+
+Gives string value of C<arg> as in absence of stringify overloading.
+
+=item overload::Overloaded(arg)
+
+Returns true if C<arg> is subject to overloading of some operations.
+
+=item overload::Method(obj,op)
+
+Returns C<undef> or a reference to the method that implements C<op>.
+
+=back
+
+=head1 Overloading constants
+
+For some application Perl parser mangles constants too much. It is possible
+to hook into this process via overload::constant() and overload::remove_constant()
+functions.
+
+These functions take a hash as an argument. The recognized keys of this hash
+are
+
+=over 8
+
+=item integer
+
+to overload integer constants,
+
+=item float
+
+to overload floating point constants,
+
+=item binary
+
+to overload octal and hexadecimal constants,
+
+=item q
+
+to overload C<q>-quoted strings, constant pieces of C<qq>- and C<qx>-quoted
+strings and here-documents,
+
+=item qr
+
+to overload constant pieces of regular expressions.
+
+=back
+
+The corresponding values are references to functions which take three arguments:
+the first one is the I<initial> string form of the constant, the second one
+is how Perl interprets this constant, the third one is how the constant is used.
+Note that the initial string form does not
+contain string delimiters, and has backslashes in backslash-delimiter
+combinations stripped (thus the value of delimiter is not relevant for
+processing of this string). The return value of this function is how this
+constant is going to be interpreted by Perl. The third argument is undefined
+unless for overloaded C<q>- and C<qr>- constants, it is C<q> in single-quote
+context (comes from strings, regular expressions, and single-quote HERE
+documents), it is C<tr> for arguments of C<tr>/C<y> operators,
+it is C<s> for right-hand side of C<s>-operator, and it is C<qq> otherwise.
+
+Since an expression C<"ab$cd,,"> is just a shortcut for C<'ab' . $cd . ',,'>,
+it is expected that overloaded constant strings are equipped with reasonable
+overloaded catenation operator, otherwise absurd results will result.
+Similarly, negative numbers are considered as negations of positive constants.
+
+Note that it is probably meaningless to call the functions overload::constant()
+and overload::remove_constant() from anywhere but import() and unimport() methods.
+From these methods they may be called as
+
+ sub import {
+ shift;
+ return unless @_;
+ die "unknown import: @_" unless @_ == 1 and $_[0] eq ':constant';
+ overload::constant integer => sub {Math::BigInt->new(shift)};
+ }
+
+B<BUGS> Currently overloaded-ness of constants does not propagate
+into C<eval '...'>.
+
+=head1 IMPLEMENTATION
+
+What follows is subject to change RSN.
+
+The table of methods for all operations is cached in magic for the
+symbol table hash for the package. The cache is invalidated during
+processing of C<use overload>, C<no overload>, new function
+definitions, and changes in @ISA. However, this invalidation remains
+unprocessed until the next C<bless>ing into the package. Hence if you
+want to change overloading structure dynamically, you'll need an
+additional (fake) C<bless>ing to update the table.
+
+(Every SVish thing has a magic queue, and magic is an entry in that
+queue. This is how a single variable may participate in multiple
+forms of magic simultaneously. For instance, environment variables
+regularly have two forms at once: their %ENV magic and their taint
+magic. However, the magic which implements overloading is applied to
+the stashes, which are rarely used directly, thus should not slow down
+Perl.)
+
+If an object belongs to a package using overload, it carries a special
+flag. Thus the only speed penalty during arithmetic operations without
+overloading is the checking of this flag.
+
+In fact, if C<use overload> is not present, there is almost no overhead
+for overloadable operations, so most programs should not suffer
+measurable performance penalties. A considerable effort was made to
+minimize the overhead when overload is used in some package, but the
+arguments in question do not belong to packages using overload. When
+in doubt, test your speed with C<use overload> and without it. So far
+there have been no reports of substantial speed degradation if Perl is
+compiled with optimization turned on.
+
+There is no size penalty for data if overload is not used. The only
+size penalty if overload is used in some package is that I<all> the
+packages acquire a magic during the next C<bless>ing into the
+package. This magic is three-words-long for packages without
+overloading, and carries the cache table if the package is overloaded.
+
+Copying (C<$a=$b>) is shallow; however, a one-level-deep copying is
+carried out before any operation that can imply an assignment to the
+object $a (or $b) refers to, like C<$a++>. You can override this
+behavior by defining your own copy constructor (see L<"Copy Constructor">).
+
+It is expected that arguments to methods that are not explicitly supposed
+to be changed are constant (but this is not enforced).
+
+=head1 Metaphor clash
+
+One may wonder why the semantic of overloaded C<=> is so counter intuitive.
+If it I<looks> counter intuitive to you, you are subject to a metaphor
+clash.
+
+Here is a Perl object metaphor:
+
+I< object is a reference to blessed data>
+
+and an arithmetic metaphor:
+
+I< object is a thing by itself>.
+
+The I<main> problem of overloading C<=> is the fact that these metaphors
+imply different actions on the assignment C<$a = $b> if $a and $b are
+objects. Perl-think implies that $a becomes a reference to whatever
+$b was referencing. Arithmetic-think implies that the value of "object"
+$a is changed to become the value of the object $b, preserving the fact
+that $a and $b are separate entities.
+
+The difference is not relevant in the absence of mutators. After
+a Perl-way assignment an operation which mutates the data referenced by $a
+would change the data referenced by $b too. Effectively, after
+C<$a = $b> values of $a and $b become I<indistinguishable>.
+
+On the other hand, anyone who has used algebraic notation knows the
+expressive power of the arithmetic metaphor. Overloading works hard
+to enable this metaphor while preserving the Perlian way as far as
+possible. Since it is not possible to freely mix two contradicting
+metaphors, overloading allows the arithmetic way to write things I<as
+far as all the mutators are called via overloaded access only>. The
+way it is done is described in L<Copy Constructor>.
+
+If some mutator methods are directly applied to the overloaded values,
+one may need to I<explicitly unlink> other values which references the
+same value:
+
+ $a = new Data 23;
+ ...
+ $b = $a; # $b is "linked" to $a
+ ...
+ $a = $a->clone; # Unlink $b from $a
+ $a->increment_by(4);
+
+Note that overloaded access makes this transparent:
+
+ $a = new Data 23;
+ $b = $a; # $b is "linked" to $a
+ $a += 4; # would unlink $b automagically
+
+However, it would not make
+
+ $a = new Data 23;
+ $a = 4; # Now $a is a plain 4, not 'Data'
+
+preserve "objectness" of $a. But Perl I<has> a way to make assignments
+to an object do whatever you want. It is just not the overload, but
+tie()ing interface (see L<perlfunc/tie>). Adding a FETCH() method
+which returns the object itself, and STORE() method which changes the
+value of the object, one can reproduce the arithmetic metaphor in its
+completeness, at least for variables which were tie()d from the start.
+
+(Note that a workaround for a bug may be needed, see L<"BUGS">.)
+
+=head1 Cookbook
+
+Please add examples to what follows!
+
+=head2 Two-face scalars
+
+Put this in F<two_face.pm> in your Perl library directory:
+
+ package two_face; # Scalars with separate string and
+ # numeric values.
+ sub new { my $p = shift; bless [@_], $p }
+ use overload '""' => \&str, '0+' => \&num, fallback => 1;
+ sub num {shift->[1]}
+ sub str {shift->[0]}
+
+Use it as follows:
+
+ require two_face;
+ my $seven = new two_face ("vii", 7);
+ printf "seven=$seven, seven=%d, eight=%d\n", $seven, $seven+1;
+ print "seven contains `i'\n" if $seven =~ /i/;
+
+(The second line creates a scalar which has both a string value, and a
+numeric value.) This prints:
+
+ seven=vii, seven=7, eight=8
+ seven contains `i'
+
+=head2 Two-face references
+
+Suppose you want to create an object which is accessible as both an
+array reference and a hash reference, similar to the
+L<pseudo-hash|perlref/"Pseudo-hashes: Using an array as a hash">
+builtin Perl type. Let's make it better than a pseudo-hash by
+allowing index 0 to be treated as a normal element.
+
+ package two_refs;
+ use overload '%{}' => \&gethash, '@{}' => sub { $ {shift()} };
+ sub new {
+ my $p = shift;
+ bless \ [@_], $p;
+ }
+ sub gethash {
+ my %h;
+ my $self = shift;
+ tie %h, ref $self, $self;
+ \%h;
+ }
+
+ sub TIEHASH { my $p = shift; bless \ shift, $p }
+ my %fields;
+ my $i = 0;
+ $fields{$_} = $i++ foreach qw{zero one two three};
+ sub STORE {
+ my $self = ${shift()};
+ my $key = $fields{shift()};
+ defined $key or die "Out of band access";
+ $$self->[$key] = shift;
+ }
+ sub FETCH {
+ my $self = ${shift()};
+ my $key = $fields{shift()};
+ defined $key or die "Out of band access";
+ $$self->[$key];
+ }
+
+Now one can access an object using both the array and hash syntax:
+
+ my $bar = new two_refs 3,4,5,6;
+ $bar->[2] = 11;
+ $bar->{two} == 11 or die 'bad hash fetch';
+
+Note several important features of this example. First of all, the
+I<actual> type of $bar is a scalar reference, and we do not overload
+the scalar dereference. Thus we can get the I<actual> non-overloaded
+contents of $bar by just using C<$$bar> (what we do in functions which
+overload dereference). Similarly, the object returned by the
+TIEHASH() method is a scalar reference.
+
+Second, we create a new tied hash each time the hash syntax is used.
+This allows us not to worry about a possibility of a reference loop,
+which would lead to a memory leak.
+
+Both these problems can be cured. Say, if we want to overload hash
+dereference on a reference to an object which is I<implemented> as a
+hash itself, the only problem one has to circumvent is how to access
+this I<actual> hash (as opposed to the I<virtual> hash exhibited by the
+overloaded dereference operator). Here is one possible fetching routine:
+
+ sub access_hash {
+ my ($self, $key) = (shift, shift);
+ my $class = ref $self;
+ bless $self, 'overload::dummy'; # Disable overloading of %{}
+ my $out = $self->{$key};
+ bless $self, $class; # Restore overloading
+ $out;
+ }
+
+To remove creation of the tied hash on each access, one may an extra
+level of indirection which allows a non-circular structure of references:
+
+ package two_refs1;
+ use overload '%{}' => sub { ${shift()}->[1] },
+ '@{}' => sub { ${shift()}->[0] };
+ sub new {
+ my $p = shift;
+ my $a = [@_];
+ my %h;
+ tie %h, $p, $a;
+ bless \ [$a, \%h], $p;
+ }
+ sub gethash {
+ my %h;
+ my $self = shift;
+ tie %h, ref $self, $self;
+ \%h;
+ }
+
+ sub TIEHASH { my $p = shift; bless \ shift, $p }
+ my %fields;
+ my $i = 0;
+ $fields{$_} = $i++ foreach qw{zero one two three};
+ sub STORE {
+ my $a = ${shift()};
+ my $key = $fields{shift()};
+ defined $key or die "Out of band access";
+ $a->[$key] = shift;
+ }
+ sub FETCH {
+ my $a = ${shift()};
+ my $key = $fields{shift()};
+ defined $key or die "Out of band access";
+ $a->[$key];
+ }
+
+Now if $baz is overloaded like this, then C<$baz> is a reference to a
+reference to the intermediate array, which keeps a reference to an
+actual array, and the access hash. The tie()ing object for the access
+hash is a reference to a reference to the actual array, so
+
+=over
+
+=item *
+
+There are no loops of references.
+
+=item *
+
+Both "objects" which are blessed into the class C<two_refs1> are
+references to a reference to an array, thus references to a I<scalar>.
+Thus the accessor expression C<$$foo-E<gt>[$ind]> involves no
+overloaded operations.
+
+=back
+
+=head2 Symbolic calculator
+
+Put this in F<symbolic.pm> in your Perl library directory:
+
+ package symbolic; # Primitive symbolic calculator
+ use overload nomethod => \&wrap;
+
+ sub new { shift; bless ['n', @_] }
+ sub wrap {
+ my ($obj, $other, $inv, $meth) = @_;
+ ($obj, $other) = ($other, $obj) if $inv;
+ bless [$meth, $obj, $other];
+ }
+
+This module is very unusual as overloaded modules go: it does not
+provide any usual overloaded operators, instead it provides the L<Last
+Resort> operator C<nomethod>. In this example the corresponding
+subroutine returns an object which encapsulates operations done over
+the objects: C<new symbolic 3> contains C<['n', 3]>, C<2 + new
+symbolic 3> contains C<['+', 2, ['n', 3]]>.
+
+Here is an example of the script which "calculates" the side of
+circumscribed octagon using the above package:
+
+ require symbolic;
+ my $iter = 1; # 2**($iter+2) = 8
+ my $side = new symbolic 1;
+ my $cnt = $iter;
+
+ while ($cnt--) {
+ $side = (sqrt(1 + $side**2) - 1)/$side;
+ }
+ print "OK\n";
+
+The value of $side is
+
+ ['/', ['-', ['sqrt', ['+', 1, ['**', ['n', 1], 2]],
+ undef], 1], ['n', 1]]
+
+Note that while we obtained this value using a nice little script,
+there is no simple way to I<use> this value. In fact this value may
+be inspected in debugger (see L<perldebug>), but ony if
+C<bareStringify> B<O>ption is set, and not via C<p> command.
+
+If one attempts to print this value, then the overloaded operator
+C<""> will be called, which will call C<nomethod> operator. The
+result of this operator will be stringified again, but this result is
+again of type C<symbolic>, which will lead to an infinite loop.
+
+Add a pretty-printer method to the module F<symbolic.pm>:
+
+ sub pretty {
+ my ($meth, $a, $b) = @{+shift};
+ $a = 'u' unless defined $a;
+ $b = 'u' unless defined $b;
+ $a = $a->pretty if ref $a;
+ $b = $b->pretty if ref $b;
+ "[$meth $a $b]";
+ }
+
+Now one can finish the script by
+
+ print "side = ", $side->pretty, "\n";
+
+The method C<pretty> is doing object-to-string conversion, so it
+is natural to overload the operator C<""> using this method. However,
+inside such a method it is not necessary to pretty-print the
+I<components> $a and $b of an object. In the above subroutine
+C<"[$meth $a $b]"> is a catenation of some strings and components $a
+and $b. If these components use overloading, the catenation operator
+will look for an overloaded operator C<.>; if not present, it will
+look for an overloaded operator C<"">. Thus it is enough to use
+
+ use overload nomethod => \&wrap, '""' => \&str;
+ sub str {
+ my ($meth, $a, $b) = @{+shift};
+ $a = 'u' unless defined $a;
+ $b = 'u' unless defined $b;
+ "[$meth $a $b]";
+ }
+
+Now one can change the last line of the script to
+
+ print "side = $side\n";
+
+which outputs
+
+ side = [/ [- [sqrt [+ 1 [** [n 1 u] 2]] u] 1] [n 1 u]]
+
+and one can inspect the value in debugger using all the possible
+methods.
+
+Something is still amiss: consider the loop variable $cnt of the
+script. It was a number, not an object. We cannot make this value of
+type C<symbolic>, since then the loop will not terminate.
+
+Indeed, to terminate the cycle, the $cnt should become false.
+However, the operator C<bool> for checking falsity is overloaded (this
+time via overloaded C<"">), and returns a long string, thus any object
+of type C<symbolic> is true. To overcome this, we need a way to
+compare an object to 0. In fact, it is easier to write a numeric
+conversion routine.
+
+Here is the text of F<symbolic.pm> with such a routine added (and
+slightly modified str()):
+
+ package symbolic; # Primitive symbolic calculator
+ use overload
+ nomethod => \&wrap, '""' => \&str, '0+' => \&num;
+
+ sub new { shift; bless ['n', @_] }
+ sub wrap {
+ my ($obj, $other, $inv, $meth) = @_;
+ ($obj, $other) = ($other, $obj) if $inv;
+ bless [$meth, $obj, $other];
+ }
+ sub str {
+ my ($meth, $a, $b) = @{+shift};
+ $a = 'u' unless defined $a;
+ if (defined $b) {
+ "[$meth $a $b]";
+ } else {
+ "[$meth $a]";
+ }
+ }
+ my %subr = ( n => sub {$_[0]},
+ sqrt => sub {sqrt $_[0]},
+ '-' => sub {shift() - shift()},
+ '+' => sub {shift() + shift()},
+ '/' => sub {shift() / shift()},
+ '*' => sub {shift() * shift()},
+ '**' => sub {shift() ** shift()},
+ );
+ sub num {
+ my ($meth, $a, $b) = @{+shift};
+ my $subr = $subr{$meth}
+ or die "Do not know how to ($meth) in symbolic";
+ $a = $a->num if ref $a eq __PACKAGE__;
+ $b = $b->num if ref $b eq __PACKAGE__;
+ $subr->($a,$b);
+ }
+
+All the work of numeric conversion is done in %subr and num(). Of
+course, %subr is not complete, it contains only operators used in the
+example below. Here is the extra-credit question: why do we need an
+explicit recursion in num()? (Answer is at the end of this section.)
+
+Use this module like this:
+
+ require symbolic;
+ my $iter = new symbolic 2; # 16-gon
+ my $side = new symbolic 1;
+ my $cnt = $iter;
+
+ while ($cnt) {
+ $cnt = $cnt - 1; # Mutator `--' not implemented
+ $side = (sqrt(1 + $side**2) - 1)/$side;
+ }
+ printf "%s=%f\n", $side, $side;
+ printf "pi=%f\n", $side*(2**($iter+2));
+
+It prints (without so many line breaks)
+
+ [/ [- [sqrt [+ 1 [** [/ [- [sqrt [+ 1 [** [n 1] 2]]] 1]
+ [n 1]] 2]]] 1]
+ [/ [- [sqrt [+ 1 [** [n 1] 2]]] 1] [n 1]]]=0.198912
+ pi=3.182598
+
+The above module is very primitive. It does not implement
+mutator methods (C<++>, C<-=> and so on), does not do deep copying
+(not required without mutators!), and implements only those arithmetic
+operations which are used in the example.
+
+To implement most arithmetic operations is easy; one should just use
+the tables of operations, and change the code which fills %subr to
+
+ my %subr = ( 'n' => sub {$_[0]} );
+ foreach my $op (split " ", $overload::ops{with_assign}) {
+ $subr{$op} = $subr{"$op="} = eval "sub {shift() $op shift()}";
+ }
+ my @bins = qw(binary 3way_comparison num_comparison str_comparison);
+ foreach my $op (split " ", "@overload::ops{ @bins }") {
+ $subr{$op} = eval "sub {shift() $op shift()}";
+ }
+ foreach my $op (split " ", "@overload::ops{qw(unary func)}") {
+ print "defining `$op'\n";
+ $subr{$op} = eval "sub {$op shift()}";
+ }
+
+Due to L<Calling Conventions for Mutators>, we do not need anything
+special to make C<+=> and friends work, except filling C<+=> entry of
+%subr, and defining a copy constructor (needed since Perl has no
+way to know that the implementation of C<'+='> does not mutate
+the argument, compare L<Copy Constructor>).
+
+To implement a copy constructor, add C<< '=' => \&cpy >> to C<use overload>
+line, and code (this code assumes that mutators change things one level
+deep only, so recursive copying is not needed):
+
+ sub cpy {
+ my $self = shift;
+ bless [@$self], ref $self;
+ }
+
+To make C<++> and C<--> work, we need to implement actual mutators,
+either directly, or in C<nomethod>. We continue to do things inside
+C<nomethod>, thus add
+
+ if ($meth eq '++' or $meth eq '--') {
+ @$obj = ($meth, (bless [@$obj]), 1); # Avoid circular reference
+ return $obj;
+ }
+
+after the first line of wrap(). This is not a most effective
+implementation, one may consider
+
+ sub inc { $_[0] = bless ['++', shift, 1]; }
+
+instead.
+
+As a final remark, note that one can fill %subr by
+
+ my %subr = ( 'n' => sub {$_[0]} );
+ foreach my $op (split " ", $overload::ops{with_assign}) {
+ $subr{$op} = $subr{"$op="} = eval "sub {shift() $op shift()}";
+ }
+ my @bins = qw(binary 3way_comparison num_comparison str_comparison);
+ foreach my $op (split " ", "@overload::ops{ @bins }") {
+ $subr{$op} = eval "sub {shift() $op shift()}";
+ }
+ foreach my $op (split " ", "@overload::ops{qw(unary func)}") {
+ $subr{$op} = eval "sub {$op shift()}";
+ }
+ $subr{'++'} = $subr{'+'};
+ $subr{'--'} = $subr{'-'};
+
+This finishes implementation of a primitive symbolic calculator in
+50 lines of Perl code. Since the numeric values of subexpressions
+are not cached, the calculator is very slow.
+
+Here is the answer for the exercise: In the case of str(), we need no
+explicit recursion since the overloaded C<.>-operator will fall back
+to an existing overloaded operator C<"">. Overloaded arithmetic
+operators I<do not> fall back to numeric conversion if C<fallback> is
+not explicitly requested. Thus without an explicit recursion num()
+would convert C<['+', $a, $b]> to C<$a + $b>, which would just rebuild
+the argument of num().
+
+If you wonder why defaults for conversion are different for str() and
+num(), note how easy it was to write the symbolic calculator. This
+simplicity is due to an appropriate choice of defaults. One extra
+note: due to the explicit recursion num() is more fragile than sym():
+we need to explicitly check for the type of $a and $b. If components
+$a and $b happen to be of some related type, this may lead to problems.
+
+=head2 I<Really> symbolic calculator
+
+One may wonder why we call the above calculator symbolic. The reason
+is that the actual calculation of the value of expression is postponed
+until the value is I<used>.
+
+To see it in action, add a method
+
+ sub STORE {
+ my $obj = shift;
+ $#$obj = 1;
+ @$obj->[0,1] = ('=', shift);
+ }
+
+to the package C<symbolic>. After this change one can do
+
+ my $a = new symbolic 3;
+ my $b = new symbolic 4;
+ my $c = sqrt($a**2 + $b**2);
+
+and the numeric value of $c becomes 5. However, after calling
+
+ $a->STORE(12); $b->STORE(5);
+
+the numeric value of $c becomes 13. There is no doubt now that the module
+symbolic provides a I<symbolic> calculator indeed.
+
+To hide the rough edges under the hood, provide a tie()d interface to the
+package C<symbolic> (compare with L<Metaphor clash>). Add methods
+
+ sub TIESCALAR { my $pack = shift; $pack->new(@_) }
+ sub FETCH { shift }
+ sub nop { } # Around a bug
+
+(the bug is described in L<"BUGS">). One can use this new interface as
+
+ tie $a, 'symbolic', 3;
+ tie $b, 'symbolic', 4;
+ $a->nop; $b->nop; # Around a bug
+
+ my $c = sqrt($a**2 + $b**2);
+
+Now numeric value of $c is 5. After C<$a = 12; $b = 5> the numeric value
+of $c becomes 13. To insulate the user of the module add a method
+
+ sub vars { my $p = shift; tie($_, $p), $_->nop foreach @_; }
+
+Now
+
+ my ($a, $b);
+ symbolic->vars($a, $b);
+ my $c = sqrt($a**2 + $b**2);
+
+ $a = 3; $b = 4;
+ printf "c5 %s=%f\n", $c, $c;
+
+ $a = 12; $b = 5;
+ printf "c13 %s=%f\n", $c, $c;
+
+shows that the numeric value of $c follows changes to the values of $a
+and $b.
+
+=head1 AUTHOR
+
+Ilya Zakharevich E<lt>F<ilya@math.mps.ohio-state.edu>E<gt>.
+
+=head1 DIAGNOSTICS
+
+When Perl is run with the B<-Do> switch or its equivalent, overloading
+induces diagnostic messages.
+
+Using the C<m> command of Perl debugger (see L<perldebug>) one can
+deduce which operations are overloaded (and which ancestor triggers
+this overloading). Say, if C<eq> is overloaded, then the method C<(eq>
+is shown by debugger. The method C<()> corresponds to the C<fallback>
+key (in fact a presence of this method shows that this package has
+overloading enabled, and it is what is used by the C<Overloaded>
+function of module C<overload>).
+
+The module might issue the following warnings:
+
+=over 4
+
+=item Odd number of arguments for overload::constant
+
+(W) The call to overload::constant contained an odd number of arguments.
+The arguments should come in pairs.
+
+=item `%s' is not an overloadable type
+
+(W) You tried to overload a constant type the overload package is unaware of.
+
+=item `%s' is not a code reference
+
+(W) The second (fourth, sixth, ...) argument of overload::constant needs
+to be a code reference. Either an anonymous subroutine, or a reference
+to a subroutine.
+
+=back
+
+=head1 BUGS
+
+Because it is used for overloading, the per-package hash %OVERLOAD now
+has a special meaning in Perl. The symbol table is filled with names
+looking like line-noise.
+
+For the purpose of inheritance every overloaded package behaves as if
+C<fallback> is present (possibly undefined). This may create
+interesting effects if some package is not overloaded, but inherits
+from two overloaded packages.
+
+Relation between overloading and tie()ing is broken. Overloading is
+triggered or not basing on the I<previous> class of tie()d value.
+
+This happens because the presence of overloading is checked too early,
+before any tie()d access is attempted. If the FETCH()ed class of the
+tie()d value does not change, a simple workaround is to access the value
+immediately after tie()ing, so that after this call the I<previous> class
+coincides with the current one.
+
+B<Needed:> a way to fix this without a speed penalty.
+
+Barewords are not covered by overloaded string constants.
+
+This document is confusing. There are grammos and misleading language
+used in places. It would seem a total rewrite is needed.
+
+=cut
+
diff --git a/Master/xemtex/perl/lib/re.pm b/Master/xemtex/perl/lib/re.pm
new file mode 100644
index 00000000000..95e25407607
--- /dev/null
+++ b/Master/xemtex/perl/lib/re.pm
@@ -0,0 +1,134 @@
+package re;
+
+our $VERSION = 0.03;
+
+=head1 NAME
+
+re - Perl pragma to alter regular expression behaviour
+
+=head1 SYNOPSIS
+
+ use re 'taint';
+ ($x) = ($^X =~ /^(.*)$/s); # $x is tainted here
+
+ $pat = '(?{ $foo = 1 })';
+ use re 'eval';
+ /foo${pat}bar/; # won't fail (when not under -T switch)
+
+ {
+ no re 'taint'; # the default
+ ($x) = ($^X =~ /^(.*)$/s); # $x is not tainted here
+
+ no re 'eval'; # the default
+ /foo${pat}bar/; # disallowed (with or without -T switch)
+ }
+
+ use re 'debug'; # NOT lexically scoped (as others are)
+ /^(.*)$/s; # output debugging info during
+ # compile and run time
+
+ use re 'debugcolor'; # same as 'debug', but with colored output
+ ...
+
+(We use $^X in these examples because it's tainted by default.)
+
+=head1 DESCRIPTION
+
+When C<use re 'taint'> is in effect, and a tainted string is the target
+of a regex, the regex memories (or values returned by the m// operator
+in list context) are tainted. This feature is useful when regex operations
+on tainted data aren't meant to extract safe substrings, but to perform
+other transformations.
+
+When C<use re 'eval'> is in effect, a regex is allowed to contain
+C<(?{ ... })> zero-width assertions even if regular expression contains
+variable interpolation. That is normally disallowed, since it is a
+potential security risk. Note that this pragma is ignored when the regular
+expression is obtained from tainted data, i.e. evaluation is always
+disallowed with tainted regular expresssions. See L<perlre/(?{ code })>.
+
+For the purpose of this pragma, interpolation of precompiled regular
+expressions (i.e., the result of C<qr//>) is I<not> considered variable
+interpolation. Thus:
+
+ /foo${pat}bar/
+
+I<is> allowed if $pat is a precompiled regular expression, even
+if $pat contains C<(?{ ... })> assertions.
+
+When C<use re 'debug'> is in effect, perl emits debugging messages when
+compiling and using regular expressions. The output is the same as that
+obtained by running a C<-DDEBUGGING>-enabled perl interpreter with the
+B<-Dr> switch. It may be quite voluminous depending on the complexity
+of the match. Using C<debugcolor> instead of C<debug> enables a
+form of output that can be used to get a colorful display on terminals
+that understand termcap color sequences. Set C<$ENV{PERL_RE_TC}> to a
+comma-separated list of C<termcap> properties to use for highlighting
+strings on/off, pre-point part on/off.
+See L<perldebug/"Debugging regular expressions"> for additional info.
+
+The directive C<use re 'debug'> is I<not lexically scoped>, as the
+other directives are. It has both compile-time and run-time effects.
+
+See L<perlmodlib/Pragmatic Modules>.
+
+=cut
+
+# N.B. File::Basename contains a literal for 'taint' as a fallback. If
+# taint is changed here, File::Basename must be updated as well.
+my %bitmask = (
+taint => 0x00100000,
+eval => 0x00200000,
+);
+
+sub setcolor {
+ eval { # Ignore errors
+ require Term::Cap;
+
+ my $terminal = Tgetent Term::Cap ({OSPEED => 9600}); # Avoid warning.
+ my $props = $ENV{PERL_RE_TC} || 'md,me,so,se,us,ue';
+ my @props = split /,/, $props;
+ my $colors = join "\t", map {$terminal->Tputs($_,1)} @props;
+
+ $colors =~ s/\0//g;
+ $ENV{PERL_RE_COLORS} = $colors;
+ };
+}
+
+sub bits {
+ my $on = shift;
+ my $bits = 0;
+ unless (@_) {
+ require Carp;
+ Carp::carp("Useless use of \"re\" pragma");
+ }
+ foreach my $s (@_){
+ if ($s eq 'debug' or $s eq 'debugcolor') {
+ setcolor() if $s eq 'debugcolor';
+ require XSLoader;
+ XSLoader::load('re');
+ install() if $on;
+ uninstall() unless $on;
+ next;
+ }
+ if (exists $bitmask{$s}) {
+ $bits |= $bitmask{$s};
+ } else {
+ require Carp;
+ Carp::carp("Unknown \"re\" subpragma '$s' (known ones are: @{[join(', ', map {qq('$_')} 'debug', 'debugcolor', sort keys %bitmask)]})");
+ }
+ }
+ $bits;
+}
+
+sub import {
+ shift;
+ $^H |= bits(1, @_);
+}
+
+sub unimport {
+ shift;
+ $^H &= ~ bits(0, @_);
+}
+
+1;
diff --git a/Master/xemtex/perl/lib/strict.pm b/Master/xemtex/perl/lib/strict.pm
new file mode 100644
index 00000000000..737cb18b1ad
--- /dev/null
+++ b/Master/xemtex/perl/lib/strict.pm
@@ -0,0 +1,117 @@
+package strict;
+
+=head1 NAME
+
+strict - Perl pragma to restrict unsafe constructs
+
+=head1 SYNOPSIS
+
+ use strict;
+
+ use strict "vars";
+ use strict "refs";
+ use strict "subs";
+
+ use strict;
+ no strict "vars";
+
+=head1 DESCRIPTION
+
+If no import list is supplied, all possible restrictions are assumed.
+(This is the safest mode to operate in, but is sometimes too strict for
+casual programming.) Currently, there are three possible things to be
+strict about: "subs", "vars", and "refs".
+
+=over 6
+
+=item C<strict refs>
+
+This generates a runtime error if you
+use symbolic references (see L<perlref>).
+
+ use strict 'refs';
+ $ref = \$foo;
+ print $$ref; # ok
+ $ref = "foo";
+ print $$ref; # runtime error; normally ok
+ $file = "STDOUT";
+ print $file "Hi!"; # error; note: no comma after $file
+
+There is one exception to this rule:
+
+ $bar = \&{'foo'};
+ &$bar;
+
+is allowed so that C<goto &$AUTOLOAD> would not break under stricture.
+
+
+=item C<strict vars>
+
+This generates a compile-time error if you access a variable that wasn't
+declared via "our" or C<use vars>,
+localized via C<my()>, or wasn't fully qualified. Because this is to avoid
+variable suicide problems and subtle dynamic scoping issues, a merely
+local() variable isn't good enough. See L<perlfunc/my> and
+L<perlfunc/local>.
+
+ use strict 'vars';
+ $X::foo = 1; # ok, fully qualified
+ my $foo = 10; # ok, my() var
+ local $foo = 9; # blows up
+
+ package Cinna;
+ our $bar; # Declares $bar in current package
+ $bar = 'HgS'; # ok, global declared via pragma
+
+The local() generated a compile-time error because you just touched a global
+name without fully qualifying it.
+
+Because of their special use by sort(), the variables $a and $b are
+exempted from this check.
+
+=item C<strict subs>
+
+This disables the poetry optimization, generating a compile-time error if
+you try to use a bareword identifier that's not a subroutine, unless it
+appears in curly braces or on the left hand side of the "=E<gt>" symbol.
+
+
+ use strict 'subs';
+ $SIG{PIPE} = Plumber; # blows up
+ $SIG{PIPE} = "Plumber"; # just fine: bareword in curlies always ok
+ $SIG{PIPE} = \&Plumber; # preferred form
+
+
+
+=back
+
+See L<perlmodlib/Pragmatic Modules>.
+
+
+=cut
+
+$strict::VERSION = "1.02";
+
+my %bitmask = (
+refs => 0x00000002,
+subs => 0x00000200,
+vars => 0x00000400
+);
+
+sub bits {
+ my $bits = 0;
+ foreach my $s (@_){ $bits |= $bitmask{$s} || 0; };
+ $bits;
+}
+
+sub import {
+ shift;
+ $^H |= bits(@_ ? @_ : qw(refs subs vars));
+}
+
+sub unimport {
+ shift;
+ $^H &= ~ bits(@_ ? @_ : qw(refs subs vars));
+}
+
+1;
diff --git a/Master/xemtex/perl/lib/subs.pm b/Master/xemtex/perl/lib/subs.pm
new file mode 100644
index 00000000000..e5a9aa8827d
--- /dev/null
+++ b/Master/xemtex/perl/lib/subs.pm
@@ -0,0 +1,40 @@
+package subs;
+
+our $VERSION = '1.00';
+
+=head1 NAME
+
+subs - Perl pragma to predeclare sub names
+
+=head1 SYNOPSIS
+
+ use subs qw(frob);
+ frob 3..10;
+
+=head1 DESCRIPTION
+
+This will predeclare all the subroutine whose names are
+in the list, allowing you to use them without parentheses
+even before they're declared.
+
+Unlike pragmas that affect the C<$^H> hints variable, the C<use vars> and
+C<use subs> declarations are not BLOCK-scoped. They are thus effective
+for the entire file in which they appear. You may not rescind such
+declarations with C<no vars> or C<no subs>.
+
+See L<perlmodlib/Pragmatic Modules> and L<strict/strict subs>.
+
+=cut
+
+require 5.000;
+
+sub import {
+ my $callpack = caller;
+ my $pack = shift;
+ my @imports = @_;
+ foreach $sym (@imports) {
+ *{"${callpack}::$sym"} = \&{"${callpack}::$sym"};
+ }
+};
+
+1;
diff --git a/Master/xemtex/perl/lib/unicore/ArabLink.pl b/Master/xemtex/perl/lib/unicore/ArabLink.pl
new file mode 100644
index 00000000000..f68a8af519a
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/ArabLink.pl
@@ -0,0 +1,49 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+return <<'END';
+0621 U
+0622 0625 R
+0626 D
+0627 R
+0628 D
+0629 R
+062A 062E D
+062F 0632 R
+0633 063A D
+0640 C
+0641 0647 D
+0648 R
+0649 064A D
+066E 066F D
+0671 0673 R
+0674 U
+0675 0677 R
+0678 0687 D
+0688 0699 R
+069A 06BF D
+06C0 R
+06C1 D
+06C2 06CB R
+06CC D
+06CD R
+06CE D
+06CF R
+06D0 06D1 D
+06D2 06D3 R
+06D5 R
+06FA 06FC D
+0710 R
+0712 0714 D
+0715 0719 R
+071A 071D D
+071E R
+071F 0727 D
+0728 R
+0729 D
+072A R
+072B D
+072C R
+200D C
+END
diff --git a/Master/xemtex/perl/lib/unicore/ArabLnkGrp.pl b/Master/xemtex/perl/lib/unicore/ArabLnkGrp.pl
new file mode 100644
index 00000000000..2e766d50a8f
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/ArabLnkGrp.pl
@@ -0,0 +1,98 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+return <<'END';
+0621 <no shaping>
+0622 0623 ALEF
+0624 WAW
+0625 ALEF
+0626 YEH
+0627 ALEF
+0628 BEH
+0629 TEH MARBUTA
+062A 062B BEH
+062C 062E HAH
+062F 0630 DAL
+0631 0632 REH
+0633 0634 SEEN
+0635 0636 SAD
+0637 0638 TAH
+0639 063A AIN
+0640 <no shaping>
+0641 FEH
+0642 QAF
+0643 KAF
+0644 LAM
+0645 MEEM
+0646 NOON
+0647 HEH
+0648 WAW
+0649 064A YEH
+066E BEH
+066F QAF
+0671 0673 ALEF
+0674 <no shaping>
+0675 ALEF
+0676 0677 WAW
+0678 YEH
+0679 0680 BEH
+0681 0687 HAH
+0688 0690 DAL
+0691 0699 REH
+069A 069C SEEN
+069D 069E SAD
+069F TAH
+06A0 AIN
+06A1 06A6 FEH
+06A7 06A8 QAF
+06A9 GAF
+06AA SWASH KAF
+06AB GAF
+06AC 06AE KAF
+06AF 06B4 GAF
+06B5 06B8 LAM
+06B9 06BD NOON
+06BE KNOTTED HEH
+06BF HAH
+06C0 TEH MARBUTA
+06C1 HEH GOAL
+06C2 06C3 HAMZA ON HEH GOAL
+06C4 06CB WAW
+06CC YEH
+06CD YEH WITH TAIL
+06CE YEH
+06CF WAW
+06D0 06D1 YEH
+06D2 06D3 YEH BARREE
+06D5 TEH MARBUTA
+06FA SEEN
+06FB SAD
+06FC AIN
+0710 ALAPH
+0712 BETH
+0713 0714 GAMAL
+0715 0716 DALATH RISH
+0717 HE
+0718 SYRIAC WAW
+0719 ZAIN
+071A HETH
+071B 071C TETH
+071D YUDH
+071E YUDH HE
+071F KAPH
+0720 LAMADH
+0721 MIM
+0722 NUN
+0723 SEMKATH
+0724 FINAL SEMKATH
+0725 E
+0726 PE
+0727 REVERSED PE
+0728 SADHE
+0729 QAPH
+072A DALATH RISH
+072B SHIN
+072C TAW
+200D <no shaping>
+END
diff --git a/Master/xemtex/perl/lib/unicore/Bidirectional.pl b/Master/xemtex/perl/lib/unicore/Bidirectional.pl
new file mode 100644
index 00000000000..0fd1fff9321
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/Bidirectional.pl
@@ -0,0 +1,692 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+return <<'END';
+0000 0008 BN
+0009 S
+000A B
+000B S
+000C WS
+000D B
+000E 001B BN
+001C 001E B
+001F S
+0020 WS
+0021 0022 ON
+0023 0025 ET
+0026 002A ON
+002B ET
+002C CS
+002D ET
+002E CS
+002F ES
+0030 0039 EN
+003A CS
+003B 0040 ON
+0041 005A L
+005B 0060 ON
+0061 007A L
+007B 007E ON
+007F 0084 BN
+0085 B
+0086 009F BN
+00A0 CS
+00A1 ON
+00A2 00A5 ET
+00A6 00A9 ON
+00AA L
+00AB 00AF ON
+00B0 00B1 ET
+00B2 00B3 EN
+00B4 ON
+00B5 L
+00B6 00B8 ON
+00B9 EN
+00BA L
+00BB 00BF ON
+00C0 00D6 L
+00D7 ON
+00D8 00F6 L
+00F7 ON
+00F8 0220 L
+0222 0233 L
+0250 02AD L
+02B0 02B8 L
+02B9 02BA ON
+02BB 02C1 L
+02C2 02CF ON
+02D0 02D1 L
+02D2 02DF ON
+02E0 02E4 L
+02E5 02ED ON
+02EE L
+0300 034F NSM
+0360 036F NSM
+0374 0375 ON
+037A L
+037E ON
+0384 0385 ON
+0386 L
+0387 ON
+0388 038A L
+038C L
+038E 03A1 L
+03A3 03CE L
+03D0 03F5 L
+03F6 ON
+0400 0482 L
+0483 0486 NSM
+0488 0489 NSM
+048A 04CE L
+04D0 04F5 L
+04F8 04F9 L
+0500 050F L
+0531 0556 L
+0559 055F L
+0561 0587 L
+0589 L
+058A ON
+0591 05A1 NSM
+05A3 05B9 NSM
+05BB 05BD NSM
+05BE R
+05BF NSM
+05C0 R
+05C1 05C2 NSM
+05C3 R
+05C4 NSM
+05D0 05EA R
+05F0 05F4 R
+060C CS
+061B AL
+061F AL
+0621 063A AL
+0640 064A AL
+064B 0655 NSM
+0660 0669 AN
+066A ET
+066B 066C AN
+066D 066F AL
+0670 NSM
+0671 06D5 AL
+06D6 06DC NSM
+06DD AL
+06DE 06E4 NSM
+06E5 06E6 AL
+06E7 06E8 NSM
+06E9 ON
+06EA 06ED NSM
+06F0 06F9 EN
+06FA 06FE AL
+0700 070D AL
+070F BN
+0710 AL
+0711 NSM
+0712 072C AL
+0730 074A NSM
+0780 07A5 AL
+07A6 07B0 NSM
+07B1 AL
+0901 0902 NSM
+0903 L
+0905 0939 L
+093C NSM
+093D 0940 L
+0941 0948 NSM
+0949 094C L
+094D NSM
+0950 L
+0951 0954 NSM
+0958 0961 L
+0962 0963 NSM
+0964 0970 L
+0981 NSM
+0982 0983 L
+0985 098C L
+098F 0990 L
+0993 09A8 L
+09AA 09B0 L
+09B2 L
+09B6 09B9 L
+09BC NSM
+09BE 09C0 L
+09C1 09C4 NSM
+09C7 09C8 L
+09CB 09CC L
+09CD NSM
+09D7 L
+09DC 09DD L
+09DF 09E1 L
+09E2 09E3 NSM
+09E6 09F1 L
+09F2 09F3 ET
+09F4 09FA L
+0A02 NSM
+0A05 0A0A L
+0A0F 0A10 L
+0A13 0A28 L
+0A2A 0A30 L
+0A32 0A33 L
+0A35 0A36 L
+0A38 0A39 L
+0A3C NSM
+0A3E 0A40 L
+0A41 0A42 NSM
+0A47 0A48 NSM
+0A4B 0A4D NSM
+0A59 0A5C L
+0A5E L
+0A66 0A6F L
+0A70 0A71 NSM
+0A72 0A74 L
+0A81 0A82 NSM
+0A83 L
+0A85 0A8B L
+0A8D L
+0A8F 0A91 L
+0A93 0AA8 L
+0AAA 0AB0 L
+0AB2 0AB3 L
+0AB5 0AB9 L
+0ABC NSM
+0ABD 0AC0 L
+0AC1 0AC5 NSM
+0AC7 0AC8 NSM
+0AC9 L
+0ACB 0ACC L
+0ACD NSM
+0AD0 L
+0AE0 L
+0AE6 0AEF L
+0B01 NSM
+0B02 0B03 L
+0B05 0B0C L
+0B0F 0B10 L
+0B13 0B28 L
+0B2A 0B30 L
+0B32 0B33 L
+0B36 0B39 L
+0B3C NSM
+0B3D 0B3E L
+0B3F NSM
+0B40 L
+0B41 0B43 NSM
+0B47 0B48 L
+0B4B 0B4C L
+0B4D NSM
+0B56 NSM
+0B57 L
+0B5C 0B5D L
+0B5F 0B61 L
+0B66 0B70 L
+0B82 NSM
+0B83 L
+0B85 0B8A L
+0B8E 0B90 L
+0B92 0B95 L
+0B99 0B9A L
+0B9C L
+0B9E 0B9F L
+0BA3 0BA4 L
+0BA8 0BAA L
+0BAE 0BB5 L
+0BB7 0BB9 L
+0BBE 0BBF L
+0BC0 NSM
+0BC1 0BC2 L
+0BC6 0BC8 L
+0BCA 0BCC L
+0BCD NSM
+0BD7 L
+0BE7 0BF2 L
+0C01 0C03 L
+0C05 0C0C L
+0C0E 0C10 L
+0C12 0C28 L
+0C2A 0C33 L
+0C35 0C39 L
+0C3E 0C40 NSM
+0C41 0C44 L
+0C46 0C48 NSM
+0C4A 0C4D NSM
+0C55 0C56 NSM
+0C60 0C61 L
+0C66 0C6F L
+0C82 0C83 L
+0C85 0C8C L
+0C8E 0C90 L
+0C92 0CA8 L
+0CAA 0CB3 L
+0CB5 0CB9 L
+0CBE L
+0CBF NSM
+0CC0 0CC4 L
+0CC6 NSM
+0CC7 0CC8 L
+0CCA 0CCB L
+0CCC 0CCD NSM
+0CD5 0CD6 L
+0CDE L
+0CE0 0CE1 L
+0CE6 0CEF L
+0D02 0D03 L
+0D05 0D0C L
+0D0E 0D10 L
+0D12 0D28 L
+0D2A 0D39 L
+0D3E 0D40 L
+0D41 0D43 NSM
+0D46 0D48 L
+0D4A 0D4C L
+0D4D NSM
+0D57 L
+0D60 0D61 L
+0D66 0D6F L
+0D82 0D83 L
+0D85 0D96 L
+0D9A 0DB1 L
+0DB3 0DBB L
+0DBD L
+0DC0 0DC6 L
+0DCA NSM
+0DCF 0DD1 L
+0DD2 0DD4 NSM
+0DD6 NSM
+0DD8 0DDF L
+0DF2 0DF4 L
+0E01 0E30 L
+0E31 NSM
+0E32 0E33 L
+0E34 0E3A NSM
+0E3F ET
+0E40 0E46 L
+0E47 0E4E NSM
+0E4F 0E5B L
+0E81 0E82 L
+0E84 L
+0E87 0E88 L
+0E8A L
+0E8D L
+0E94 0E97 L
+0E99 0E9F L
+0EA1 0EA3 L
+0EA5 L
+0EA7 L
+0EAA 0EAB L
+0EAD 0EB0 L
+0EB1 NSM
+0EB2 0EB3 L
+0EB4 0EB9 NSM
+0EBB 0EBC NSM
+0EBD L
+0EC0 0EC4 L
+0EC6 L
+0EC8 0ECD NSM
+0ED0 0ED9 L
+0EDC 0EDD L
+0F00 0F17 L
+0F18 0F19 NSM
+0F1A 0F34 L
+0F35 NSM
+0F36 L
+0F37 NSM
+0F38 L
+0F39 NSM
+0F3A 0F3D ON
+0F3E 0F47 L
+0F49 0F6A L
+0F71 0F7E NSM
+0F7F L
+0F80 0F84 NSM
+0F85 L
+0F86 0F87 NSM
+0F88 0F8B L
+0F90 0F97 NSM
+0F99 0FBC NSM
+0FBE 0FC5 L
+0FC6 NSM
+0FC7 0FCC L
+0FCF L
+1000 1021 L
+1023 1027 L
+1029 102A L
+102C L
+102D 1030 NSM
+1031 L
+1032 NSM
+1036 1037 NSM
+1038 L
+1039 NSM
+1040 1057 L
+1058 1059 NSM
+10A0 10C5 L
+10D0 10F8 L
+10FB L
+1100 1159 L
+115F 11A2 L
+11A8 11F9 L
+1200 1206 L
+1208 1246 L
+1248 L
+124A 124D L
+1250 1256 L
+1258 L
+125A 125D L
+1260 1286 L
+1288 L
+128A 128D L
+1290 12AE L
+12B0 L
+12B2 12B5 L
+12B8 12BE L
+12C0 L
+12C2 12C5 L
+12C8 12CE L
+12D0 12D6 L
+12D8 12EE L
+12F0 130E L
+1310 L
+1312 1315 L
+1318 131E L
+1320 1346 L
+1348 135A L
+1361 137C L
+13A0 13F4 L
+1401 1676 L
+1680 WS
+1681 169A L
+169B 169C ON
+16A0 16F0 L
+1700 170C L
+170E 1711 L
+1712 1714 NSM
+1720 1731 L
+1732 1734 NSM
+1735 1736 L
+1740 1751 L
+1752 1753 NSM
+1760 176C L
+176E 1770 L
+1772 1773 NSM
+1780 17B6 L
+17B7 17BD NSM
+17BE 17C5 L
+17C6 NSM
+17C7 17C8 L
+17C9 17D3 NSM
+17D4 17DA L
+17DB ET
+17DC L
+17E0 17E9 L
+1800 180A ON
+180B 180D NSM
+180E BN
+1810 1819 L
+1820 1877 L
+1880 18A8 L
+18A9 NSM
+1E00 1E9B L
+1EA0 1EF9 L
+1F00 1F15 L
+1F18 1F1D L
+1F20 1F45 L
+1F48 1F4D L
+1F50 1F57 L
+1F59 L
+1F5B L
+1F5D L
+1F5F 1F7D L
+1F80 1FB4 L
+1FB6 1FBC L
+1FBD ON
+1FBE L
+1FBF 1FC1 ON
+1FC2 1FC4 L
+1FC6 1FCC L
+1FCD 1FCF ON
+1FD0 1FD3 L
+1FD6 1FDB L
+1FDD 1FDF ON
+1FE0 1FEC L
+1FED 1FEF ON
+1FF2 1FF4 L
+1FF6 1FFC L
+1FFD 1FFE ON
+2000 200A WS
+200B 200D BN
+200E L
+200F R
+2010 2027 ON
+2028 WS
+2029 B
+202A LRE
+202B RLE
+202C PDF
+202D LRO
+202E RLO
+202F WS
+2030 2034 ET
+2035 2052 ON
+2057 ON
+205F WS
+2060 2063 BN
+206A 206F BN
+2070 EN
+2071 L
+2074 2079 EN
+207A 207B ET
+207C 207E ON
+207F L
+2080 2089 EN
+208A 208B ET
+208C 208E ON
+20A0 20B1 ET
+20D0 20EA NSM
+2100 2101 ON
+2102 L
+2103 2106 ON
+2107 L
+2108 2109 ON
+210A 2113 L
+2114 ON
+2115 L
+2116 2118 ON
+2119 211D L
+211E 2123 ON
+2124 L
+2125 ON
+2126 L
+2127 ON
+2128 L
+2129 ON
+212A 212D L
+212E ET
+212F 2131 L
+2132 ON
+2133 2139 L
+213A ON
+213D 213F L
+2140 2144 ON
+2145 2149 L
+214A 214B ON
+2153 215F ON
+2160 2183 L
+2190 2211 ON
+2212 2213 ET
+2214 2335 ON
+2336 237A L
+237B 2394 ON
+2395 L
+2396 23CE ON
+2400 2426 ON
+2440 244A ON
+2460 249B EN
+249C 24E9 L
+24EA EN
+24EB 24FE ON
+2500 2613 ON
+2616 2617 ON
+2619 267D ON
+2680 2689 ON
+2701 2704 ON
+2706 2709 ON
+270C 2727 ON
+2729 274B ON
+274D ON
+274F 2752 ON
+2756 ON
+2758 275E ON
+2761 2794 ON
+2798 27AF ON
+27B1 27BE ON
+27D0 27EB ON
+27F0 2AFF ON
+2E80 2E99 ON
+2E9B 2EF3 ON
+2F00 2FD5 ON
+2FF0 2FFB ON
+3000 WS
+3001 3004 ON
+3005 3007 L
+3008 3020 ON
+3021 3029 L
+302A 302F NSM
+3030 ON
+3031 3035 L
+3036 3037 ON
+3038 303C L
+303D 303F ON
+3041 3096 L
+3099 309A NSM
+309B 309C ON
+309D 309F L
+30A0 ON
+30A1 30FA L
+30FB ON
+30FC 30FF L
+3105 312C L
+3131 318E L
+3190 31B7 L
+31F0 321C L
+3220 3243 L
+3251 325F ON
+3260 327B L
+327F 32B0 L
+32B1 32BF ON
+32C0 32CB L
+32D0 32FE L
+3300 3376 L
+337B 33DD L
+33E0 33FE L
+A000 A48C L
+A490 A4C6 ON
+F900 FA2D L
+FA30 FA6A L
+FB00 FB06 L
+FB13 FB17 L
+FB1D R
+FB1E NSM
+FB1F FB28 R
+FB29 ET
+FB2A FB36 R
+FB38 FB3C R
+FB3E R
+FB40 FB41 R
+FB43 FB44 R
+FB46 FB4F R
+FB50 FBB1 AL
+FBD3 FD3D AL
+FD3E FD3F ON
+FD50 FD8F AL
+FD92 FDC7 AL
+FDF0 FDFC AL
+FE00 FE0F NSM
+FE20 FE23 NSM
+FE30 FE46 ON
+FE49 FE4F ON
+FE50 CS
+FE51 ON
+FE52 CS
+FE54 ON
+FE55 CS
+FE56 FE5E ON
+FE5F ET
+FE60 FE61 ON
+FE62 FE63 ET
+FE64 FE66 ON
+FE68 ON
+FE69 FE6A ET
+FE6B ON
+FE70 FE74 AL
+FE76 FEFC AL
+FEFF BN
+FF01 FF02 ON
+FF03 FF05 ET
+FF06 FF0A ON
+FF0B ET
+FF0C CS
+FF0D ET
+FF0E CS
+FF0F ES
+FF10 FF19 EN
+FF1A CS
+FF1B FF20 ON
+FF21 FF3A L
+FF3B FF40 ON
+FF41 FF5A L
+FF5B FF65 ON
+FF66 FFBE L
+FFC2 FFC7 L
+FFCA FFCF L
+FFD2 FFD7 L
+FFDA FFDC L
+FFE0 FFE1 ET
+FFE2 FFE4 ON
+FFE5 FFE6 ET
+FFE8 FFEE ON
+FFF9 FFFB BN
+FFFC FFFD ON
+10300 1031E L
+10320 10323 L
+10330 1034A L
+10400 10425 L
+10428 1044D L
+1D000 1D0F5 L
+1D100 1D126 L
+1D12A 1D166 L
+1D167 1D169 NSM
+1D16A 1D172 L
+1D173 1D17A BN
+1D17B 1D182 NSM
+1D183 1D184 L
+1D185 1D18B NSM
+1D18C 1D1A9 L
+1D1AA 1D1AD NSM
+1D1AE 1D1DD L
+1D400 1D454 L
+1D456 1D49C L
+1D49E 1D49F L
+1D4A2 L
+1D4A5 1D4A6 L
+1D4A9 1D4AC L
+1D4AE 1D4B9 L
+1D4BB L
+1D4BD 1D4C0 L
+1D4C2 1D4C3 L
+1D4C5 1D505 L
+1D507 1D50A L
+1D50D 1D514 L
+1D516 1D51C L
+1D51E 1D539 L
+1D53B 1D53E L
+1D540 1D544 L
+1D546 L
+1D54A 1D550 L
+1D552 1D6A3 L
+1D6A8 1D7C9 L
+1D7CE 1D7FF EN
+2F800 2FA1D L
+E0001 BN
+E0020 E007F BN
+END
diff --git a/Master/xemtex/perl/lib/unicore/Blocks.pl b/Master/xemtex/perl/lib/unicore/Blocks.pl
new file mode 100644
index 00000000000..07f2a325cab
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/Blocks.pl
@@ -0,0 +1,116 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+return <<'END';
+0000 007F Basic Latin
+0080 00FF Latin-1 Supplement
+0100 017F Latin Extended-A
+0180 024F Latin Extended-B
+0250 02AF IPA Extensions
+02B0 02FF Spacing Modifier Letters
+0300 036F Combining Diacritical Marks
+0370 03FF Greek and Coptic
+0400 04FF Cyrillic
+0500 052F Cyrillic Supplementary
+0530 058F Armenian
+0590 05FF Hebrew
+0600 06FF Arabic
+0700 074F Syriac
+0780 07BF Thaana
+0900 097F Devanagari
+0980 09FF Bengali
+0A00 0A7F Gurmukhi
+0A80 0AFF Gujarati
+0B00 0B7F Oriya
+0B80 0BFF Tamil
+0C00 0C7F Telugu
+0C80 0CFF Kannada
+0D00 0D7F Malayalam
+0D80 0DFF Sinhala
+0E00 0E7F Thai
+0E80 0EFF Lao
+0F00 0FFF Tibetan
+1000 109F Myanmar
+10A0 10FF Georgian
+1100 11FF Hangul Jamo
+1200 137F Ethiopic
+13A0 13FF Cherokee
+1400 167F Unified Canadian Aboriginal Syllabics
+1680 169F Ogham
+16A0 16FF Runic
+1700 171F Tagalog
+1720 173F Hanunoo
+1740 175F Buhid
+1760 177F Tagbanwa
+1780 17FF Khmer
+1800 18AF Mongolian
+1E00 1EFF Latin Extended Additional
+1F00 1FFF Greek Extended
+2000 206F General Punctuation
+2070 209F Superscripts and Subscripts
+20A0 20CF Currency Symbols
+20D0 20FF Combining Diacritical Marks for Symbols
+2100 214F Letterlike Symbols
+2150 218F Number Forms
+2190 21FF Arrows
+2200 22FF Mathematical Operators
+2300 23FF Miscellaneous Technical
+2400 243F Control Pictures
+2440 245F Optical Character Recognition
+2460 24FF Enclosed Alphanumerics
+2500 257F Box Drawing
+2580 259F Block Elements
+25A0 25FF Geometric Shapes
+2600 26FF Miscellaneous Symbols
+2700 27BF Dingbats
+27C0 27EF Miscellaneous Mathematical Symbols-A
+27F0 27FF Supplemental Arrows-A
+2800 28FF Braille Patterns
+2900 297F Supplemental Arrows-B
+2980 29FF Miscellaneous Mathematical Symbols-B
+2A00 2AFF Supplemental Mathematical Operators
+2E80 2EFF CJK Radicals Supplement
+2F00 2FDF Kangxi Radicals
+2FF0 2FFF Ideographic Description Characters
+3000 303F CJK Symbols and Punctuation
+3040 309F Hiragana
+30A0 30FF Katakana
+3100 312F Bopomofo
+3130 318F Hangul Compatibility Jamo
+3190 319F Kanbun
+31A0 31BF Bopomofo Extended
+31F0 31FF Katakana Phonetic Extensions
+3200 32FF Enclosed CJK Letters and Months
+3300 33FF CJK Compatibility
+3400 4DBF CJK Unified Ideographs Extension A
+4E00 9FFF CJK Unified Ideographs
+A000 A48F Yi Syllables
+A490 A4CF Yi Radicals
+AC00 D7AF Hangul Syllables
+D800 DB7F High Surrogates
+DB80 DBFF High Private Use Surrogates
+DC00 DFFF Low Surrogates
+E000 F8FF Private Use Area
+F900 FAFF CJK Compatibility Ideographs
+FB00 FB4F Alphabetic Presentation Forms
+FB50 FDFF Arabic Presentation Forms-A
+FE00 FE0F Variation Selectors
+FE20 FE2F Combining Half Marks
+FE30 FE4F CJK Compatibility Forms
+FE50 FE6F Small Form Variants
+FE70 FEFF Arabic Presentation Forms-B
+FF00 FFEF Halfwidth and Fullwidth Forms
+FFF0 FFFF Specials
+10300 1032F Old Italic
+10330 1034F Gothic
+10400 1044F Deseret
+1D000 1D0FF Byzantine Musical Symbols
+1D100 1D1FF Musical Symbols
+1D400 1D7FF Mathematical Alphanumeric Symbols
+20000 2A6DF CJK Unified Ideographs Extension B
+2F800 2FA1F CJK Compatibility Ideographs Supplement
+E0000 E007F Tags
+F0000 FFFFF Supplementary Private Use Area-A
+100000 10FFFF Supplementary Private Use Area-B
+END
diff --git a/Master/xemtex/perl/lib/unicore/Canonical.pl b/Master/xemtex/perl/lib/unicore/Canonical.pl
new file mode 100644
index 00000000000..947fd2b9d5c
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/Canonical.pl
@@ -0,0 +1,816 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+##
+## Data in this file used by ../utf8_heavy.pl
+##
+
+## Mapping from lc(canonical name) to filename in ./lib
+%utf8::Canonical = (
+ alphabetic => 'Alphabet',
+
+ # InAlphabeticPresentationForms
+ alphabeticpresentationforms => 'InAlphab',
+
+ arabic => 'Arabic',
+
+ # InArabicPresentationFormsA
+ arabicpresentationformsa => 'InArabi3',
+
+ # InArabicPresentationFormsB
+ arabicpresentationformsb => 'InArabi2',
+
+ armenian => 'Armenian',
+
+ # InArrows
+ arrows => 'InArrows',
+
+ # AsciiHexDigit
+ asciihexdigit => 'AsciiHex',
+
+ # InBasicLatin
+ basiclatin => 'InBasicL',
+
+ bengali => 'Bengali',
+
+ # BidiControl
+ bidicontrol => 'BidiCont',
+
+ # InBlockElements
+ blockelements => 'InBlockE',
+
+ bopomofo => 'Bopomofo',
+
+ # InBopomofoExtended
+ bopomofoextended => 'InBopom2',
+
+ # InBoxDrawing
+ boxdrawing => 'InBoxDra',
+
+ # InBraillePatterns
+ braillepatterns => 'InBraill',
+
+ buhid => 'Buhid',
+
+ # InByzantineMusicalSymbols
+ byzantinemusicalsymbols => 'InByzant',
+
+ # CanadianAboriginal
+ canadianaboriginal => 'Canadian',
+
+ cherokee => 'Cherokee',
+
+ # InCjkCompatibility
+ cjkcompatibility => 'InCjkCom',
+
+ # InCjkCompatibilityForms
+ cjkcompatibilityforms => 'InCjkCo2',
+
+ # InCjkCompatibilityIdeographs
+ cjkcompatibilityideographs => 'InCjkCo3',
+
+ # InCjkCompatibilityIdeographsSupplement
+ cjkcompatibilityideographssupplement => 'InCjkCo4',
+
+ # InCjkRadicalsSupplement
+ cjkradicalssupplement => 'InCjkRad',
+
+ # InCjkSymbolsAndPunctuation
+ cjksymbolsandpunctuation => 'InCjkSym',
+
+ # InCjkUnifiedIdeographs
+ cjkunifiedideographs => 'InCjkUni',
+
+ # InCjkUnifiedIdeographsExtensionA
+ cjkunifiedideographsextensiona => 'InCjkUn3',
+
+ # InCjkUnifiedIdeographsExtensionB
+ cjkunifiedideographsextensionb => 'InCjkUn2',
+
+ # ClosePunctuation
+ closepunctuation => 'Pe',
+
+ # InCombiningDiacriticalMarks
+ combiningdiacriticalmarks => 'InCombi2',
+
+ # InCombiningDiacriticalMarksForSymbols
+ combiningdiacriticalmarksforsymbols => 'InCombi3',
+
+ # InCombiningHalfMarks
+ combininghalfmarks => 'InCombin',
+
+ common => 'Common',
+
+ # ConnectorPunctuation
+ connectorpunctuation => 'Pc',
+
+ control => 'Cc',
+
+ # InControlPictures
+ controlpictures => 'InContro',
+
+ # CurrencySymbol
+ currencysymbol => 'Sc',
+
+ # InCurrencySymbols
+ currencysymbols => 'InCurren',
+
+ cyrillic => 'Cyrillic',
+
+ # InCyrillicSupplementary
+ cyrillicsupplementary => 'InCyril2',
+
+ dash => 'Dash',
+
+ # DashPunctuation
+ dashpunctuation => 'Pd',
+
+ # DecimalNumber
+ decimalnumber => 'Nd',
+
+ deprecated => 'Deprecat',
+ deseret => 'Deseret',
+ devanagari => 'Devanaga',
+ diacritic => 'Diacriti',
+
+ # InDingbats
+ dingbats => 'InDingba',
+
+ # InEnclosedAlphanumerics
+ enclosedalphanumerics => 'InEnclos',
+
+ # InEnclosedCjkLettersAndMonths
+ enclosedcjklettersandmonths => 'InEnclo2',
+
+ # EnclosingMark
+ enclosingmark => 'Me',
+
+ ethiopic => 'Ethiopic',
+ extender => 'Extender',
+
+ # FinalPunctuation
+ finalpunctuation => 'Pf',
+
+ format => 'Cf',
+
+ # InGeneralPunctuation
+ generalpunctuation => 'InGenera',
+
+ # InGeometricShapes
+ geometricshapes => 'InGeomet',
+
+ georgian => 'Georgian',
+ gothic => 'Gothic',
+
+ # GraphemeLink
+ graphemelink => 'Grapheme',
+
+ greek => 'Greek',
+
+ # InGreekAndCoptic
+ greekandcoptic => 'InGreekA',
+
+ # InGreekExtended
+ greekextended => 'InGreekE',
+
+ gujarati => 'Gujarati',
+ gurmukhi => 'Gurmukhi',
+
+ # InHalfwidthAndFullwidthForms
+ halfwidthandfullwidthforms => 'InHalfwi',
+
+ han => 'Han',
+ hangul => 'Hangul',
+
+ # InHangulCompatibilityJamo
+ hangulcompatibilityjamo => 'InHangu3',
+
+ # InHangulJamo
+ hanguljamo => 'InHangul',
+
+ # InHangulSyllables
+ hangulsyllables => 'InHangu2',
+
+ hanunoo => 'Hanunoo',
+ hebrew => 'Hebrew',
+
+ # HexDigit
+ hexdigit => 'HexDigit',
+
+ # InHighPrivateUseSurrogates
+ highprivateusesurrogates => 'InHighPr',
+
+ # InHighSurrogates
+ highsurrogates => 'InHighSu',
+
+ hiragana => 'Hiragana',
+ hyphen => 'Hyphen',
+
+ # IdContinue
+ idcontinue => 'IdContin',
+
+ ideographic => 'Ideograp',
+
+ # InIdeographicDescriptionCharacters
+ ideographicdescriptioncharacters => 'InIdeogr',
+
+ # IdsBinaryOperator
+ idsbinaryoperator => 'IdsBinar',
+
+ # IdStart
+ idstart => 'IdStart',
+
+ # IdsTrinaryOperator
+ idstrinaryoperator => 'IdsTrina',
+
+ # InAlphabeticPresentationForms
+ inalphabeticpresentationforms => 'InAlphab',
+
+ # InArabic
+ inarabic => 'InArabic',
+
+ # InArabicPresentationFormsA
+ inarabicpresentationformsa => 'InArabi3',
+
+ # InArabicPresentationFormsB
+ inarabicpresentationformsb => 'InArabi2',
+
+ # InArmenian
+ inarmenian => 'InArmeni',
+
+ # InArrows
+ inarrows => 'InArrows',
+
+ # InBasicLatin
+ inbasiclatin => 'InBasicL',
+
+ # InBengali
+ inbengali => 'InBengal',
+
+ # InBlockElements
+ inblockelements => 'InBlockE',
+
+ # InBopomofo
+ inbopomofo => 'InBopomo',
+
+ # InBopomofoExtended
+ inbopomofoextended => 'InBopom2',
+
+ # InBoxDrawing
+ inboxdrawing => 'InBoxDra',
+
+ # InBraillePatterns
+ inbraillepatterns => 'InBraill',
+
+ # InBuhid
+ inbuhid => 'InBuhid',
+
+ # InByzantineMusicalSymbols
+ inbyzantinemusicalsymbols => 'InByzant',
+
+ # InCherokee
+ incherokee => 'InCherok',
+
+ # InCjkCompatibility
+ incjkcompatibility => 'InCjkCom',
+
+ # InCjkCompatibilityForms
+ incjkcompatibilityforms => 'InCjkCo2',
+
+ # InCjkCompatibilityIdeographs
+ incjkcompatibilityideographs => 'InCjkCo3',
+
+ # InCjkCompatibilityIdeographsSupplement
+ incjkcompatibilityideographssupplement => 'InCjkCo4',
+
+ # InCjkRadicalsSupplement
+ incjkradicalssupplement => 'InCjkRad',
+
+ # InCjkSymbolsAndPunctuation
+ incjksymbolsandpunctuation => 'InCjkSym',
+
+ # InCjkUnifiedIdeographs
+ incjkunifiedideographs => 'InCjkUni',
+
+ # InCjkUnifiedIdeographsExtensionA
+ incjkunifiedideographsextensiona => 'InCjkUn3',
+
+ # InCjkUnifiedIdeographsExtensionB
+ incjkunifiedideographsextensionb => 'InCjkUn2',
+
+ # InCombiningDiacriticalMarks
+ incombiningdiacriticalmarks => 'InCombi2',
+
+ # InCombiningDiacriticalMarksForSymbols
+ incombiningdiacriticalmarksforsymbols => 'InCombi3',
+
+ # InCombiningHalfMarks
+ incombininghalfmarks => 'InCombin',
+
+ # InControlPictures
+ incontrolpictures => 'InContro',
+
+ # InCurrencySymbols
+ incurrencysymbols => 'InCurren',
+
+ # InCyrillic
+ incyrillic => 'InCyrill',
+
+ # InCyrillicSupplementary
+ incyrillicsupplementary => 'InCyril2',
+
+ # InDeseret
+ indeseret => 'InDesere',
+
+ # InDevanagari
+ indevanagari => 'InDevana',
+
+ # InDingbats
+ indingbats => 'InDingba',
+
+ # InEnclosedAlphanumerics
+ inenclosedalphanumerics => 'InEnclos',
+
+ # InEnclosedCjkLettersAndMonths
+ inenclosedcjklettersandmonths => 'InEnclo2',
+
+ # InEthiopic
+ inethiopic => 'InEthiop',
+
+ # InGeneralPunctuation
+ ingeneralpunctuation => 'InGenera',
+
+ # InGeometricShapes
+ ingeometricshapes => 'InGeomet',
+
+ # InGeorgian
+ ingeorgian => 'InGeorgi',
+
+ # InGothic
+ ingothic => 'InGothic',
+
+ # InGreekAndCoptic
+ ingreekandcoptic => 'InGreekA',
+
+ # InGreekExtended
+ ingreekextended => 'InGreekE',
+
+ # InGujarati
+ ingujarati => 'InGujara',
+
+ # InGurmukhi
+ ingurmukhi => 'InGurmuk',
+
+ # InHalfwidthAndFullwidthForms
+ inhalfwidthandfullwidthforms => 'InHalfwi',
+
+ # InHangulCompatibilityJamo
+ inhangulcompatibilityjamo => 'InHangu3',
+
+ # InHangulJamo
+ inhanguljamo => 'InHangul',
+
+ # InHangulSyllables
+ inhangulsyllables => 'InHangu2',
+
+ # InHanunoo
+ inhanunoo => 'InHanuno',
+
+ # InHebrew
+ inhebrew => 'InHebrew',
+
+ inherited => 'Inherite',
+
+ # InHighPrivateUseSurrogates
+ inhighprivateusesurrogates => 'InHighPr',
+
+ # InHighSurrogates
+ inhighsurrogates => 'InHighSu',
+
+ # InHiragana
+ inhiragana => 'InHiraga',
+
+ # InIdeographicDescriptionCharacters
+ inideographicdescriptioncharacters => 'InIdeogr',
+
+ # InIpaExtensions
+ inipaextensions => 'InIpaExt',
+
+ # InitialPunctuation
+ initialpunctuation => 'Pi',
+
+ # InKanbun
+ inkanbun => 'InKanbun',
+
+ # InKangxiRadicals
+ inkangxiradicals => 'InKangxi',
+
+ # InKannada
+ inkannada => 'InKannad',
+
+ # InKatakana
+ inkatakana => 'InKataka',
+
+ # InKatakanaPhoneticExtensions
+ inkatakanaphoneticextensions => 'InKatak2',
+
+ # InKhmer
+ inkhmer => 'InKhmer',
+
+ # InLao
+ inlao => 'InLao',
+
+ # InLatin1Supplement
+ inlatin1supplement => 'InLatin1',
+
+ # InLatinExtendedA
+ inlatinextendeda => 'InLatin2',
+
+ # InLatinExtendedAdditional
+ inlatinextendedadditional => 'InLatin3',
+
+ # InLatinExtendedB
+ inlatinextendedb => 'InLatinE',
+
+ # InLetterlikeSymbols
+ inletterlikesymbols => 'InLetter',
+
+ # InLowSurrogates
+ inlowsurrogates => 'InLowSur',
+
+ # InMalayalam
+ inmalayalam => 'InMalaya',
+
+ # InMathematicalAlphanumericSymbols
+ inmathematicalalphanumericsymbols => 'InMathe2',
+
+ # InMathematicalOperators
+ inmathematicaloperators => 'InMathem',
+
+ # InMiscellaneousMathematicalSymbolsA
+ inmiscellaneousmathematicalsymbolsa => 'InMisce3',
+
+ # InMiscellaneousMathematicalSymbolsB
+ inmiscellaneousmathematicalsymbolsb => 'InMisce4',
+
+ # InMiscellaneousSymbols
+ inmiscellaneoussymbols => 'InMiscel',
+
+ # InMiscellaneousTechnical
+ inmiscellaneoustechnical => 'InMisce2',
+
+ # InMongolian
+ inmongolian => 'InMongol',
+
+ # InMusicalSymbols
+ inmusicalsymbols => 'InMusica',
+
+ # InMyanmar
+ inmyanmar => 'InMyanma',
+
+ # InNumberForms
+ innumberforms => 'InNumber',
+
+ # InOgham
+ inogham => 'InOgham',
+
+ # InOldItalic
+ inolditalic => 'InOldIta',
+
+ # InOpticalCharacterRecognition
+ inopticalcharacterrecognition => 'InOptica',
+
+ # InOriya
+ inoriya => 'InOriya',
+
+ # InPrivateUseArea
+ inprivateusearea => 'InPrivat',
+
+ # InRunic
+ inrunic => 'InRunic',
+
+ # InSinhala
+ insinhala => 'InSinhal',
+
+ # InSmallFormVariants
+ insmallformvariants => 'InSmallF',
+
+ # InSpacingModifierLetters
+ inspacingmodifierletters => 'InSpacin',
+
+ # InSpecials
+ inspecials => 'InSpecia',
+
+ # InSuperscriptsAndSubscripts
+ insuperscriptsandsubscripts => 'InSupers',
+
+ # InSupplementalArrowsA
+ insupplementalarrowsa => 'InSuppl2',
+
+ # InSupplementalArrowsB
+ insupplementalarrowsb => 'InSupple',
+
+ # InSupplementalMathematicalOperators
+ insupplementalmathematicaloperators => 'InSuppl5',
+
+ # InSupplementaryPrivateUseAreaA
+ insupplementaryprivateuseareaa => 'InSuppl3',
+
+ # InSupplementaryPrivateUseAreaB
+ insupplementaryprivateuseareab => 'InSuppl4',
+
+ # InSyriac
+ insyriac => 'InSyriac',
+
+ # InTagalog
+ intagalog => 'InTagalo',
+
+ # InTagbanwa
+ intagbanwa => 'InTagban',
+
+ # InTags
+ intags => 'InTags',
+
+ # InTamil
+ intamil => 'InTamil',
+
+ # InTelugu
+ intelugu => 'InTelugu',
+
+ # InThaana
+ inthaana => 'InThaana',
+
+ # InThai
+ inthai => 'InThai',
+
+ # InTibetan
+ intibetan => 'InTibeta',
+
+ # InUnifiedCanadianAboriginalSyllabics
+ inunifiedcanadianaboriginalsyllabics => 'InUnifie',
+
+ # InVariationSelectors
+ invariationselectors => 'InVariat',
+
+ # InYiRadicals
+ inyiradicals => 'InYiRadi',
+
+ # InYiSyllables
+ inyisyllables => 'InYiSyll',
+
+ # InIpaExtensions
+ ipaextensions => 'InIpaExt',
+
+ # JoinControl
+ joincontrol => 'JoinCont',
+
+ # InKanbun
+ kanbun => 'InKanbun',
+
+ # InKangxiRadicals
+ kangxiradicals => 'InKangxi',
+
+ kannada => 'Kannada',
+ katakana => 'Katakana',
+
+ # InKatakanaPhoneticExtensions
+ katakanaphoneticextensions => 'InKatak2',
+
+ khmer => 'Khmer',
+ lao => 'Lao',
+ latin => 'Latin',
+
+ # InLatin1Supplement
+ latin1supplement => 'InLatin1',
+
+ # InLatinExtendedA
+ latinextendeda => 'InLatin2',
+
+ # InLatinExtendedAdditional
+ latinextendedadditional => 'InLatin3',
+
+ # InLatinExtendedB
+ latinextendedb => 'InLatinE',
+
+ letter => 'L',
+
+ # InLetterlikeSymbols
+ letterlikesymbols => 'InLetter',
+
+ # LetterNumber
+ letternumber => 'Nl',
+
+ # LineSeparator
+ lineseparator => 'Zl',
+
+ # LogicalOrderException
+ logicalorderexception => 'LogicalO',
+
+ lowercase => 'Lowercas',
+
+ # LowercaseLetter
+ lowercaseletter => 'Ll',
+
+ # InLowSurrogates
+ lowsurrogates => 'InLowSur',
+
+ malayalam => 'Malayala',
+ mark => 'M',
+ math => 'Math',
+
+ # InMathematicalAlphanumericSymbols
+ mathematicalalphanumericsymbols => 'InMathe2',
+
+ # InMathematicalOperators
+ mathematicaloperators => 'InMathem',
+
+ # MathSymbol
+ mathsymbol => 'Sm',
+
+ # InMiscellaneousMathematicalSymbolsA
+ miscellaneousmathematicalsymbolsa => 'InMisce3',
+
+ # InMiscellaneousMathematicalSymbolsB
+ miscellaneousmathematicalsymbolsb => 'InMisce4',
+
+ # InMiscellaneousSymbols
+ miscellaneoussymbols => 'InMiscel',
+
+ # InMiscellaneousTechnical
+ miscellaneoustechnical => 'InMisce2',
+
+ # ModifierLetter
+ modifierletter => 'Lm',
+
+ # ModifierSymbol
+ modifiersymbol => 'Sk',
+
+ mongolian => 'Mongolia',
+
+ # InMusicalSymbols
+ musicalsymbols => 'InMusica',
+
+ myanmar => 'Myanmar',
+
+ # NoncharacterCodePoint
+ noncharactercodepoint => 'Nonchara',
+
+ # NonSpacingMark
+ nonspacingmark => 'Mn',
+
+ number => 'N',
+
+ # InNumberForms
+ numberforms => 'InNumber',
+
+ ogham => 'Ogham',
+
+ # OldItalic
+ olditalic => 'OldItali',
+
+ # OpenPunctuation
+ openpunctuation => 'Ps',
+
+ # InOpticalCharacterRecognition
+ opticalcharacterrecognition => 'InOptica',
+
+ oriya => 'Oriya',
+ other => 'C',
+
+ # OtherAlphabetic
+ otheralphabetic => 'OtherAlp',
+
+ # OtherDefaultIgnorableCodePoint
+ otherdefaultignorablecodepoint => 'OtherDef',
+
+ # OtherGraphemeExtend
+ othergraphemeextend => 'OtherGra',
+
+ # OtherLetter
+ otherletter => 'Lo',
+
+ # OtherLowercase
+ otherlowercase => 'OtherLow',
+
+ # OtherMath
+ othermath => 'OtherMat',
+
+ # OtherNumber
+ othernumber => 'No',
+
+ # OtherPunctuation
+ otherpunctuation => 'Po',
+
+ # OtherSymbol
+ othersymbol => 'So',
+
+ # OtherUppercase
+ otheruppercase => 'OtherUpp',
+
+ # ParagraphSeparator
+ paragraphseparator => 'Zp',
+
+ # PrivateUse
+ privateuse => 'Co',
+
+ # InPrivateUseArea
+ privateusearea => 'InPrivat',
+
+ punctuation => 'P',
+
+ # QuotationMark
+ quotationmark => 'Quotatio',
+
+ radical => 'Radical',
+ runic => 'Runic',
+ separator => 'Z',
+ sinhala => 'Sinhala',
+
+ # InSmallFormVariants
+ smallformvariants => 'InSmallF',
+
+ # SoftDotted
+ softdotted => 'SoftDott',
+
+ # SpaceSeparator
+ spaceseparator => 'Zs',
+
+ # SpacingMark
+ spacingmark => 'Mc',
+
+ # InSpacingModifierLetters
+ spacingmodifierletters => 'InSpacin',
+
+ # InSpecials
+ specials => 'InSpecia',
+
+ # InSuperscriptsAndSubscripts
+ superscriptsandsubscripts => 'InSupers',
+
+ # InSupplementalArrowsA
+ supplementalarrowsa => 'InSuppl2',
+
+ # InSupplementalArrowsB
+ supplementalarrowsb => 'InSupple',
+
+ # InSupplementalMathematicalOperators
+ supplementalmathematicaloperators => 'InSuppl5',
+
+ # InSupplementaryPrivateUseAreaA
+ supplementaryprivateuseareaa => 'InSuppl3',
+
+ # InSupplementaryPrivateUseAreaB
+ supplementaryprivateuseareab => 'InSuppl4',
+
+ surrogate => 'Cs',
+ symbol => 'S',
+ syriac => 'Syriac',
+ tagalog => 'Tagalog',
+ tagbanwa => 'Tagbanwa',
+
+ # InTags
+ tags => 'InTags',
+
+ tamil => 'Tamil',
+ telugu => 'Telugu',
+
+ # TerminalPunctuation
+ terminalpunctuation => 'Terminal',
+
+ thaana => 'Thaana',
+ thai => 'Thai',
+ tibetan => 'Tibetan',
+
+ # TitlecaseLetter
+ titlecaseletter => 'Lt',
+
+ unassigned => 'Cn',
+
+ # InUnifiedCanadianAboriginalSyllabics
+ unifiedcanadianaboriginalsyllabics => 'InUnifie',
+
+ # UnifiedIdeograph
+ unifiedideograph => 'UnifiedI',
+
+ uppercase => 'Uppercas',
+
+ # UppercaseLetter
+ uppercaseletter => 'Lu',
+
+ # InVariationSelectors
+ variationselectors => 'InVariat',
+
+ # WhiteSpace
+ whitespace => 'WhiteSpa',
+
+ yi => 'Yi',
+
+ # InYiRadicals
+ yiradicals => 'InYiRadi',
+
+ # InYiSyllables
+ yisyllables => 'InYiSyll',
+
+);
+1
diff --git a/Master/xemtex/perl/lib/unicore/Category.pl b/Master/xemtex/perl/lib/unicore/Category.pl
new file mode 100644
index 00000000000..dba6ad9afc3
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/Category.pl
@@ -0,0 +1,1732 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+return <<'END';
+0000 001F Cc
+0020 Zs
+0021 0023 Po
+0024 Sc
+0025 0027 Po
+0028 Ps
+0029 Pe
+002A Po
+002B Sm
+002C Po
+002D Pd
+002E 002F Po
+0030 0039 Nd
+003A 003B Po
+003C 003E Sm
+003F 0040 Po
+0041 005A Lu
+005B Ps
+005C Po
+005D Pe
+005E Sk
+005F Pc
+0060 Sk
+0061 007A Ll
+007B Ps
+007C Sm
+007D Pe
+007E Sm
+007F 009F Cc
+00A0 Zs
+00A1 Po
+00A2 00A5 Sc
+00A6 00A7 So
+00A8 Sk
+00A9 So
+00AA Ll
+00AB Pi
+00AC Sm
+00AD Pd
+00AE So
+00AF Sk
+00B0 So
+00B1 Sm
+00B2 00B3 No
+00B4 Sk
+00B5 Ll
+00B6 So
+00B7 Po
+00B8 Sk
+00B9 No
+00BA Ll
+00BB Pf
+00BC 00BE No
+00BF Po
+00C0 00D6 Lu
+00D7 Sm
+00D8 00DE Lu
+00DF 00F6 Ll
+00F7 Sm
+00F8 00FF Ll
+0100 Lu
+0101 Ll
+0102 Lu
+0103 Ll
+0104 Lu
+0105 Ll
+0106 Lu
+0107 Ll
+0108 Lu
+0109 Ll
+010A Lu
+010B Ll
+010C Lu
+010D Ll
+010E Lu
+010F Ll
+0110 Lu
+0111 Ll
+0112 Lu
+0113 Ll
+0114 Lu
+0115 Ll
+0116 Lu
+0117 Ll
+0118 Lu
+0119 Ll
+011A Lu
+011B Ll
+011C Lu
+011D Ll
+011E Lu
+011F Ll
+0120 Lu
+0121 Ll
+0122 Lu
+0123 Ll
+0124 Lu
+0125 Ll
+0126 Lu
+0127 Ll
+0128 Lu
+0129 Ll
+012A Lu
+012B Ll
+012C Lu
+012D Ll
+012E Lu
+012F Ll
+0130 Lu
+0131 Ll
+0132 Lu
+0133 Ll
+0134 Lu
+0135 Ll
+0136 Lu
+0137 0138 Ll
+0139 Lu
+013A Ll
+013B Lu
+013C Ll
+013D Lu
+013E Ll
+013F Lu
+0140 Ll
+0141 Lu
+0142 Ll
+0143 Lu
+0144 Ll
+0145 Lu
+0146 Ll
+0147 Lu
+0148 0149 Ll
+014A Lu
+014B Ll
+014C Lu
+014D Ll
+014E Lu
+014F Ll
+0150 Lu
+0151 Ll
+0152 Lu
+0153 Ll
+0154 Lu
+0155 Ll
+0156 Lu
+0157 Ll
+0158 Lu
+0159 Ll
+015A Lu
+015B Ll
+015C Lu
+015D Ll
+015E Lu
+015F Ll
+0160 Lu
+0161 Ll
+0162 Lu
+0163 Ll
+0164 Lu
+0165 Ll
+0166 Lu
+0167 Ll
+0168 Lu
+0169 Ll
+016A Lu
+016B Ll
+016C Lu
+016D Ll
+016E Lu
+016F Ll
+0170 Lu
+0171 Ll
+0172 Lu
+0173 Ll
+0174 Lu
+0175 Ll
+0176 Lu
+0177 Ll
+0178 0179 Lu
+017A Ll
+017B Lu
+017C Ll
+017D Lu
+017E 0180 Ll
+0181 0182 Lu
+0183 Ll
+0184 Lu
+0185 Ll
+0186 0187 Lu
+0188 Ll
+0189 018B Lu
+018C 018D Ll
+018E 0191 Lu
+0192 Ll
+0193 0194 Lu
+0195 Ll
+0196 0198 Lu
+0199 019B Ll
+019C 019D Lu
+019E Ll
+019F 01A0 Lu
+01A1 Ll
+01A2 Lu
+01A3 Ll
+01A4 Lu
+01A5 Ll
+01A6 01A7 Lu
+01A8 Ll
+01A9 Lu
+01AA 01AB Ll
+01AC Lu
+01AD Ll
+01AE 01AF Lu
+01B0 Ll
+01B1 01B3 Lu
+01B4 Ll
+01B5 Lu
+01B6 Ll
+01B7 01B8 Lu
+01B9 01BA Ll
+01BB Lo
+01BC Lu
+01BD 01BF Ll
+01C0 01C3 Lo
+01C4 Lu
+01C5 Lt
+01C6 Ll
+01C7 Lu
+01C8 Lt
+01C9 Ll
+01CA Lu
+01CB Lt
+01CC Ll
+01CD Lu
+01CE Ll
+01CF Lu
+01D0 Ll
+01D1 Lu
+01D2 Ll
+01D3 Lu
+01D4 Ll
+01D5 Lu
+01D6 Ll
+01D7 Lu
+01D8 Ll
+01D9 Lu
+01DA Ll
+01DB Lu
+01DC 01DD Ll
+01DE Lu
+01DF Ll
+01E0 Lu
+01E1 Ll
+01E2 Lu
+01E3 Ll
+01E4 Lu
+01E5 Ll
+01E6 Lu
+01E7 Ll
+01E8 Lu
+01E9 Ll
+01EA Lu
+01EB Ll
+01EC Lu
+01ED Ll
+01EE Lu
+01EF 01F0 Ll
+01F1 Lu
+01F2 Lt
+01F3 Ll
+01F4 Lu
+01F5 Ll
+01F6 01F8 Lu
+01F9 Ll
+01FA Lu
+01FB Ll
+01FC Lu
+01FD Ll
+01FE Lu
+01FF Ll
+0200 Lu
+0201 Ll
+0202 Lu
+0203 Ll
+0204 Lu
+0205 Ll
+0206 Lu
+0207 Ll
+0208 Lu
+0209 Ll
+020A Lu
+020B Ll
+020C Lu
+020D Ll
+020E Lu
+020F Ll
+0210 Lu
+0211 Ll
+0212 Lu
+0213 Ll
+0214 Lu
+0215 Ll
+0216 Lu
+0217 Ll
+0218 Lu
+0219 Ll
+021A Lu
+021B Ll
+021C Lu
+021D Ll
+021E Lu
+021F Ll
+0220 Lu
+0222 Lu
+0223 Ll
+0224 Lu
+0225 Ll
+0226 Lu
+0227 Ll
+0228 Lu
+0229 Ll
+022A Lu
+022B Ll
+022C Lu
+022D Ll
+022E Lu
+022F Ll
+0230 Lu
+0231 Ll
+0232 Lu
+0233 Ll
+0250 02AD Ll
+02B0 02B8 Lm
+02B9 02BA Sk
+02BB 02C1 Lm
+02C2 02CF Sk
+02D0 02D1 Lm
+02D2 02DF Sk
+02E0 02E4 Lm
+02E5 02ED Sk
+02EE Lm
+0300 034F Mn
+0360 036F Mn
+0374 0375 Sk
+037A Lm
+037E Po
+0384 0385 Sk
+0386 Lu
+0387 Po
+0388 038A Lu
+038C Lu
+038E 038F Lu
+0390 Ll
+0391 03A1 Lu
+03A3 03AB Lu
+03AC 03CE Ll
+03D0 03D1 Ll
+03D2 03D4 Lu
+03D5 03D7 Ll
+03D8 Lu
+03D9 Ll
+03DA Lu
+03DB Ll
+03DC Lu
+03DD Ll
+03DE Lu
+03DF Ll
+03E0 Lu
+03E1 Ll
+03E2 Lu
+03E3 Ll
+03E4 Lu
+03E5 Ll
+03E6 Lu
+03E7 Ll
+03E8 Lu
+03E9 Ll
+03EA Lu
+03EB Ll
+03EC Lu
+03ED Ll
+03EE Lu
+03EF 03F3 Ll
+03F4 Lu
+03F5 Ll
+03F6 Sm
+0400 042F Lu
+0430 045F Ll
+0460 Lu
+0461 Ll
+0462 Lu
+0463 Ll
+0464 Lu
+0465 Ll
+0466 Lu
+0467 Ll
+0468 Lu
+0469 Ll
+046A Lu
+046B Ll
+046C Lu
+046D Ll
+046E Lu
+046F Ll
+0470 Lu
+0471 Ll
+0472 Lu
+0473 Ll
+0474 Lu
+0475 Ll
+0476 Lu
+0477 Ll
+0478 Lu
+0479 Ll
+047A Lu
+047B Ll
+047C Lu
+047D Ll
+047E Lu
+047F Ll
+0480 Lu
+0481 Ll
+0482 So
+0483 0486 Mn
+0488 0489 Me
+048A Lu
+048B Ll
+048C Lu
+048D Ll
+048E Lu
+048F Ll
+0490 Lu
+0491 Ll
+0492 Lu
+0493 Ll
+0494 Lu
+0495 Ll
+0496 Lu
+0497 Ll
+0498 Lu
+0499 Ll
+049A Lu
+049B Ll
+049C Lu
+049D Ll
+049E Lu
+049F Ll
+04A0 Lu
+04A1 Ll
+04A2 Lu
+04A3 Ll
+04A4 Lu
+04A5 Ll
+04A6 Lu
+04A7 Ll
+04A8 Lu
+04A9 Ll
+04AA Lu
+04AB Ll
+04AC Lu
+04AD Ll
+04AE Lu
+04AF Ll
+04B0 Lu
+04B1 Ll
+04B2 Lu
+04B3 Ll
+04B4 Lu
+04B5 Ll
+04B6 Lu
+04B7 Ll
+04B8 Lu
+04B9 Ll
+04BA Lu
+04BB Ll
+04BC Lu
+04BD Ll
+04BE Lu
+04BF Ll
+04C0 04C1 Lu
+04C2 Ll
+04C3 Lu
+04C4 Ll
+04C5 Lu
+04C6 Ll
+04C7 Lu
+04C8 Ll
+04C9 Lu
+04CA Ll
+04CB Lu
+04CC Ll
+04CD Lu
+04CE Ll
+04D0 Lu
+04D1 Ll
+04D2 Lu
+04D3 Ll
+04D4 Lu
+04D5 Ll
+04D6 Lu
+04D7 Ll
+04D8 Lu
+04D9 Ll
+04DA Lu
+04DB Ll
+04DC Lu
+04DD Ll
+04DE Lu
+04DF Ll
+04E0 Lu
+04E1 Ll
+04E2 Lu
+04E3 Ll
+04E4 Lu
+04E5 Ll
+04E6 Lu
+04E7 Ll
+04E8 Lu
+04E9 Ll
+04EA Lu
+04EB Ll
+04EC Lu
+04ED Ll
+04EE Lu
+04EF Ll
+04F0 Lu
+04F1 Ll
+04F2 Lu
+04F3 Ll
+04F4 Lu
+04F5 Ll
+04F8 Lu
+04F9 Ll
+0500 Lu
+0501 Ll
+0502 Lu
+0503 Ll
+0504 Lu
+0505 Ll
+0506 Lu
+0507 Ll
+0508 Lu
+0509 Ll
+050A Lu
+050B Ll
+050C Lu
+050D Ll
+050E Lu
+050F Ll
+0531 0556 Lu
+0559 Lm
+055A 055F Po
+0561 0587 Ll
+0589 Po
+058A Pd
+0591 05A1 Mn
+05A3 05B9 Mn
+05BB 05BD Mn
+05BE Po
+05BF Mn
+05C0 Po
+05C1 05C2 Mn
+05C3 Po
+05C4 Mn
+05D0 05EA Lo
+05F0 05F2 Lo
+05F3 05F4 Po
+060C Po
+061B Po
+061F Po
+0621 063A Lo
+0640 Lm
+0641 064A Lo
+064B 0655 Mn
+0660 0669 Nd
+066A 066D Po
+066E 066F Lo
+0670 Mn
+0671 06D3 Lo
+06D4 Po
+06D5 Lo
+06D6 06DC Mn
+06DD Cf
+06DE Me
+06DF 06E4 Mn
+06E5 06E6 Lm
+06E7 06E8 Mn
+06E9 So
+06EA 06ED Mn
+06F0 06F9 Nd
+06FA 06FC Lo
+06FD 06FE So
+0700 070D Po
+070F Cf
+0710 Lo
+0711 Mn
+0712 072C Lo
+0730 074A Mn
+0780 07A5 Lo
+07A6 07B0 Mn
+07B1 Lo
+0901 0902 Mn
+0903 Mc
+0905 0939 Lo
+093C Mn
+093D Lo
+093E 0940 Mc
+0941 0948 Mn
+0949 094C Mc
+094D Mn
+0950 Lo
+0951 0954 Mn
+0958 0961 Lo
+0962 0963 Mn
+0964 0965 Po
+0966 096F Nd
+0970 Po
+0981 Mn
+0982 0983 Mc
+0985 098C Lo
+098F 0990 Lo
+0993 09A8 Lo
+09AA 09B0 Lo
+09B2 Lo
+09B6 09B9 Lo
+09BC Mn
+09BE 09C0 Mc
+09C1 09C4 Mn
+09C7 09C8 Mc
+09CB 09CC Mc
+09CD Mn
+09D7 Mc
+09DC 09DD Lo
+09DF 09E1 Lo
+09E2 09E3 Mn
+09E6 09EF Nd
+09F0 09F1 Lo
+09F2 09F3 Sc
+09F4 09F9 No
+09FA So
+0A02 Mn
+0A05 0A0A Lo
+0A0F 0A10 Lo
+0A13 0A28 Lo
+0A2A 0A30 Lo
+0A32 0A33 Lo
+0A35 0A36 Lo
+0A38 0A39 Lo
+0A3C Mn
+0A3E 0A40 Mc
+0A41 0A42 Mn
+0A47 0A48 Mn
+0A4B 0A4D Mn
+0A59 0A5C Lo
+0A5E Lo
+0A66 0A6F Nd
+0A70 0A71 Mn
+0A72 0A74 Lo
+0A81 0A82 Mn
+0A83 Mc
+0A85 0A8B Lo
+0A8D Lo
+0A8F 0A91 Lo
+0A93 0AA8 Lo
+0AAA 0AB0 Lo
+0AB2 0AB3 Lo
+0AB5 0AB9 Lo
+0ABC Mn
+0ABD Lo
+0ABE 0AC0 Mc
+0AC1 0AC5 Mn
+0AC7 0AC8 Mn
+0AC9 Mc
+0ACB 0ACC Mc
+0ACD Mn
+0AD0 Lo
+0AE0 Lo
+0AE6 0AEF Nd
+0B01 Mn
+0B02 0B03 Mc
+0B05 0B0C Lo
+0B0F 0B10 Lo
+0B13 0B28 Lo
+0B2A 0B30 Lo
+0B32 0B33 Lo
+0B36 0B39 Lo
+0B3C Mn
+0B3D Lo
+0B3E Mc
+0B3F Mn
+0B40 Mc
+0B41 0B43 Mn
+0B47 0B48 Mc
+0B4B 0B4C Mc
+0B4D Mn
+0B56 Mn
+0B57 Mc
+0B5C 0B5D Lo
+0B5F 0B61 Lo
+0B66 0B6F Nd
+0B70 So
+0B82 Mn
+0B83 Lo
+0B85 0B8A Lo
+0B8E 0B90 Lo
+0B92 0B95 Lo
+0B99 0B9A Lo
+0B9C Lo
+0B9E 0B9F Lo
+0BA3 0BA4 Lo
+0BA8 0BAA Lo
+0BAE 0BB5 Lo
+0BB7 0BB9 Lo
+0BBE 0BBF Mc
+0BC0 Mn
+0BC1 0BC2 Mc
+0BC6 0BC8 Mc
+0BCA 0BCC Mc
+0BCD Mn
+0BD7 Mc
+0BE7 0BEF Nd
+0BF0 0BF2 No
+0C01 0C03 Mc
+0C05 0C0C Lo
+0C0E 0C10 Lo
+0C12 0C28 Lo
+0C2A 0C33 Lo
+0C35 0C39 Lo
+0C3E 0C40 Mn
+0C41 0C44 Mc
+0C46 0C48 Mn
+0C4A 0C4D Mn
+0C55 0C56 Mn
+0C60 0C61 Lo
+0C66 0C6F Nd
+0C82 0C83 Mc
+0C85 0C8C Lo
+0C8E 0C90 Lo
+0C92 0CA8 Lo
+0CAA 0CB3 Lo
+0CB5 0CB9 Lo
+0CBE Mc
+0CBF Mn
+0CC0 0CC4 Mc
+0CC6 Mn
+0CC7 0CC8 Mc
+0CCA 0CCB Mc
+0CCC 0CCD Mn
+0CD5 0CD6 Mc
+0CDE Lo
+0CE0 0CE1 Lo
+0CE6 0CEF Nd
+0D02 0D03 Mc
+0D05 0D0C Lo
+0D0E 0D10 Lo
+0D12 0D28 Lo
+0D2A 0D39 Lo
+0D3E 0D40 Mc
+0D41 0D43 Mn
+0D46 0D48 Mc
+0D4A 0D4C Mc
+0D4D Mn
+0D57 Mc
+0D60 0D61 Lo
+0D66 0D6F Nd
+0D82 0D83 Mc
+0D85 0D96 Lo
+0D9A 0DB1 Lo
+0DB3 0DBB Lo
+0DBD Lo
+0DC0 0DC6 Lo
+0DCA Mn
+0DCF 0DD1 Mc
+0DD2 0DD4 Mn
+0DD6 Mn
+0DD8 0DDF Mc
+0DF2 0DF3 Mc
+0DF4 Po
+0E01 0E30 Lo
+0E31 Mn
+0E32 0E33 Lo
+0E34 0E3A Mn
+0E3F Sc
+0E40 0E45 Lo
+0E46 Lm
+0E47 0E4E Mn
+0E4F Po
+0E50 0E59 Nd
+0E5A 0E5B Po
+0E81 0E82 Lo
+0E84 Lo
+0E87 0E88 Lo
+0E8A Lo
+0E8D Lo
+0E94 0E97 Lo
+0E99 0E9F Lo
+0EA1 0EA3 Lo
+0EA5 Lo
+0EA7 Lo
+0EAA 0EAB Lo
+0EAD 0EB0 Lo
+0EB1 Mn
+0EB2 0EB3 Lo
+0EB4 0EB9 Mn
+0EBB 0EBC Mn
+0EBD Lo
+0EC0 0EC4 Lo
+0EC6 Lm
+0EC8 0ECD Mn
+0ED0 0ED9 Nd
+0EDC 0EDD Lo
+0F00 Lo
+0F01 0F03 So
+0F04 0F12 Po
+0F13 0F17 So
+0F18 0F19 Mn
+0F1A 0F1F So
+0F20 0F29 Nd
+0F2A 0F33 No
+0F34 So
+0F35 Mn
+0F36 So
+0F37 Mn
+0F38 So
+0F39 Mn
+0F3A Ps
+0F3B Pe
+0F3C Ps
+0F3D Pe
+0F3E 0F3F Mc
+0F40 0F47 Lo
+0F49 0F6A Lo
+0F71 0F7E Mn
+0F7F Mc
+0F80 0F84 Mn
+0F85 Po
+0F86 0F87 Mn
+0F88 0F8B Lo
+0F90 0F97 Mn
+0F99 0FBC Mn
+0FBE 0FC5 So
+0FC6 Mn
+0FC7 0FCC So
+0FCF So
+1000 1021 Lo
+1023 1027 Lo
+1029 102A Lo
+102C Mc
+102D 1030 Mn
+1031 Mc
+1032 Mn
+1036 1037 Mn
+1038 Mc
+1039 Mn
+1040 1049 Nd
+104A 104F Po
+1050 1055 Lo
+1056 1057 Mc
+1058 1059 Mn
+10A0 10C5 Lu
+10D0 10F8 Lo
+10FB Po
+1100 1159 Lo
+115F 11A2 Lo
+11A8 11F9 Lo
+1200 1206 Lo
+1208 1246 Lo
+1248 Lo
+124A 124D Lo
+1250 1256 Lo
+1258 Lo
+125A 125D Lo
+1260 1286 Lo
+1288 Lo
+128A 128D Lo
+1290 12AE Lo
+12B0 Lo
+12B2 12B5 Lo
+12B8 12BE Lo
+12C0 Lo
+12C2 12C5 Lo
+12C8 12CE Lo
+12D0 12D6 Lo
+12D8 12EE Lo
+12F0 130E Lo
+1310 Lo
+1312 1315 Lo
+1318 131E Lo
+1320 1346 Lo
+1348 135A Lo
+1361 1368 Po
+1369 1371 Nd
+1372 137C No
+13A0 13F4 Lo
+1401 166C Lo
+166D 166E Po
+166F 1676 Lo
+1680 Zs
+1681 169A Lo
+169B Ps
+169C Pe
+16A0 16EA Lo
+16EB 16ED Po
+16EE 16F0 Nl
+1700 170C Lo
+170E 1711 Lo
+1712 1714 Mn
+1720 1731 Lo
+1732 1734 Mn
+1735 1736 Po
+1740 1751 Lo
+1752 1753 Mn
+1760 176C Lo
+176E 1770 Lo
+1772 1773 Mn
+1780 17B3 Lo
+17B4 17B6 Mc
+17B7 17BD Mn
+17BE 17C5 Mc
+17C6 Mn
+17C7 17C8 Mc
+17C9 17D3 Mn
+17D4 17D6 Po
+17D7 Lm
+17D8 17DA Po
+17DB Sc
+17DC Lo
+17E0 17E9 Nd
+1800 1805 Po
+1806 Pd
+1807 180A Po
+180B 180D Mn
+180E Cf
+1810 1819 Nd
+1820 1842 Lo
+1843 Lm
+1844 1877 Lo
+1880 18A8 Lo
+18A9 Mn
+1E00 Lu
+1E01 Ll
+1E02 Lu
+1E03 Ll
+1E04 Lu
+1E05 Ll
+1E06 Lu
+1E07 Ll
+1E08 Lu
+1E09 Ll
+1E0A Lu
+1E0B Ll
+1E0C Lu
+1E0D Ll
+1E0E Lu
+1E0F Ll
+1E10 Lu
+1E11 Ll
+1E12 Lu
+1E13 Ll
+1E14 Lu
+1E15 Ll
+1E16 Lu
+1E17 Ll
+1E18 Lu
+1E19 Ll
+1E1A Lu
+1E1B Ll
+1E1C Lu
+1E1D Ll
+1E1E Lu
+1E1F Ll
+1E20 Lu
+1E21 Ll
+1E22 Lu
+1E23 Ll
+1E24 Lu
+1E25 Ll
+1E26 Lu
+1E27 Ll
+1E28 Lu
+1E29 Ll
+1E2A Lu
+1E2B Ll
+1E2C Lu
+1E2D Ll
+1E2E Lu
+1E2F Ll
+1E30 Lu
+1E31 Ll
+1E32 Lu
+1E33 Ll
+1E34 Lu
+1E35 Ll
+1E36 Lu
+1E37 Ll
+1E38 Lu
+1E39 Ll
+1E3A Lu
+1E3B Ll
+1E3C Lu
+1E3D Ll
+1E3E Lu
+1E3F Ll
+1E40 Lu
+1E41 Ll
+1E42 Lu
+1E43 Ll
+1E44 Lu
+1E45 Ll
+1E46 Lu
+1E47 Ll
+1E48 Lu
+1E49 Ll
+1E4A Lu
+1E4B Ll
+1E4C Lu
+1E4D Ll
+1E4E Lu
+1E4F Ll
+1E50 Lu
+1E51 Ll
+1E52 Lu
+1E53 Ll
+1E54 Lu
+1E55 Ll
+1E56 Lu
+1E57 Ll
+1E58 Lu
+1E59 Ll
+1E5A Lu
+1E5B Ll
+1E5C Lu
+1E5D Ll
+1E5E Lu
+1E5F Ll
+1E60 Lu
+1E61 Ll
+1E62 Lu
+1E63 Ll
+1E64 Lu
+1E65 Ll
+1E66 Lu
+1E67 Ll
+1E68 Lu
+1E69 Ll
+1E6A Lu
+1E6B Ll
+1E6C Lu
+1E6D Ll
+1E6E Lu
+1E6F Ll
+1E70 Lu
+1E71 Ll
+1E72 Lu
+1E73 Ll
+1E74 Lu
+1E75 Ll
+1E76 Lu
+1E77 Ll
+1E78 Lu
+1E79 Ll
+1E7A Lu
+1E7B Ll
+1E7C Lu
+1E7D Ll
+1E7E Lu
+1E7F Ll
+1E80 Lu
+1E81 Ll
+1E82 Lu
+1E83 Ll
+1E84 Lu
+1E85 Ll
+1E86 Lu
+1E87 Ll
+1E88 Lu
+1E89 Ll
+1E8A Lu
+1E8B Ll
+1E8C Lu
+1E8D Ll
+1E8E Lu
+1E8F Ll
+1E90 Lu
+1E91 Ll
+1E92 Lu
+1E93 Ll
+1E94 Lu
+1E95 1E9B Ll
+1EA0 Lu
+1EA1 Ll
+1EA2 Lu
+1EA3 Ll
+1EA4 Lu
+1EA5 Ll
+1EA6 Lu
+1EA7 Ll
+1EA8 Lu
+1EA9 Ll
+1EAA Lu
+1EAB Ll
+1EAC Lu
+1EAD Ll
+1EAE Lu
+1EAF Ll
+1EB0 Lu
+1EB1 Ll
+1EB2 Lu
+1EB3 Ll
+1EB4 Lu
+1EB5 Ll
+1EB6 Lu
+1EB7 Ll
+1EB8 Lu
+1EB9 Ll
+1EBA Lu
+1EBB Ll
+1EBC Lu
+1EBD Ll
+1EBE Lu
+1EBF Ll
+1EC0 Lu
+1EC1 Ll
+1EC2 Lu
+1EC3 Ll
+1EC4 Lu
+1EC5 Ll
+1EC6 Lu
+1EC7 Ll
+1EC8 Lu
+1EC9 Ll
+1ECA Lu
+1ECB Ll
+1ECC Lu
+1ECD Ll
+1ECE Lu
+1ECF Ll
+1ED0 Lu
+1ED1 Ll
+1ED2 Lu
+1ED3 Ll
+1ED4 Lu
+1ED5 Ll
+1ED6 Lu
+1ED7 Ll
+1ED8 Lu
+1ED9 Ll
+1EDA Lu
+1EDB Ll
+1EDC Lu
+1EDD Ll
+1EDE Lu
+1EDF Ll
+1EE0 Lu
+1EE1 Ll
+1EE2 Lu
+1EE3 Ll
+1EE4 Lu
+1EE5 Ll
+1EE6 Lu
+1EE7 Ll
+1EE8 Lu
+1EE9 Ll
+1EEA Lu
+1EEB Ll
+1EEC Lu
+1EED Ll
+1EEE Lu
+1EEF Ll
+1EF0 Lu
+1EF1 Ll
+1EF2 Lu
+1EF3 Ll
+1EF4 Lu
+1EF5 Ll
+1EF6 Lu
+1EF7 Ll
+1EF8 Lu
+1EF9 Ll
+1F00 1F07 Ll
+1F08 1F0F Lu
+1F10 1F15 Ll
+1F18 1F1D Lu
+1F20 1F27 Ll
+1F28 1F2F Lu
+1F30 1F37 Ll
+1F38 1F3F Lu
+1F40 1F45 Ll
+1F48 1F4D Lu
+1F50 1F57 Ll
+1F59 Lu
+1F5B Lu
+1F5D Lu
+1F5F Lu
+1F60 1F67 Ll
+1F68 1F6F Lu
+1F70 1F7D Ll
+1F80 1F87 Ll
+1F88 1F8F Lt
+1F90 1F97 Ll
+1F98 1F9F Lt
+1FA0 1FA7 Ll
+1FA8 1FAF Lt
+1FB0 1FB4 Ll
+1FB6 1FB7 Ll
+1FB8 1FBB Lu
+1FBC Lt
+1FBD Sk
+1FBE Ll
+1FBF 1FC1 Sk
+1FC2 1FC4 Ll
+1FC6 1FC7 Ll
+1FC8 1FCB Lu
+1FCC Lt
+1FCD 1FCF Sk
+1FD0 1FD3 Ll
+1FD6 1FD7 Ll
+1FD8 1FDB Lu
+1FDD 1FDF Sk
+1FE0 1FE7 Ll
+1FE8 1FEC Lu
+1FED 1FEF Sk
+1FF2 1FF4 Ll
+1FF6 1FF7 Ll
+1FF8 1FFB Lu
+1FFC Lt
+1FFD 1FFE Sk
+2000 200B Zs
+200C 200F Cf
+2010 2015 Pd
+2016 2017 Po
+2018 Pi
+2019 Pf
+201A Ps
+201B 201C Pi
+201D Pf
+201E Ps
+201F Pi
+2020 2027 Po
+2028 Zl
+2029 Zp
+202A 202E Cf
+202F Zs
+2030 2038 Po
+2039 Pi
+203A Pf
+203B 203E Po
+203F 2040 Pc
+2041 2043 Po
+2044 Sm
+2045 Ps
+2046 Pe
+2047 2051 Po
+2052 Sm
+2057 Po
+205F Zs
+2060 2063 Cf
+206A 206F Cf
+2070 No
+2071 Ll
+2074 2079 No
+207A 207C Sm
+207D Ps
+207E Pe
+207F Ll
+2080 2089 No
+208A 208C Sm
+208D Ps
+208E Pe
+20A0 20B1 Sc
+20D0 20DC Mn
+20DD 20E0 Me
+20E1 Mn
+20E2 20E4 Me
+20E5 20EA Mn
+2100 2101 So
+2102 Lu
+2103 2106 So
+2107 Lu
+2108 2109 So
+210A Ll
+210B 210D Lu
+210E 210F Ll
+2110 2112 Lu
+2113 Ll
+2114 So
+2115 Lu
+2116 2118 So
+2119 211D Lu
+211E 2123 So
+2124 Lu
+2125 So
+2126 Lu
+2127 So
+2128 Lu
+2129 So
+212A 212D Lu
+212E So
+212F Ll
+2130 2131 Lu
+2132 So
+2133 Lu
+2134 Ll
+2135 2138 Lo
+2139 Ll
+213A So
+213D Ll
+213E 213F Lu
+2140 2144 Sm
+2145 Lu
+2146 2149 Ll
+214A So
+214B Sm
+2153 215F No
+2160 2183 Nl
+2190 2194 Sm
+2195 2199 So
+219A 219B Sm
+219C 219F So
+21A0 Sm
+21A1 21A2 So
+21A3 Sm
+21A4 21A5 So
+21A6 Sm
+21A7 21AD So
+21AE Sm
+21AF 21CD So
+21CE 21CF Sm
+21D0 21D1 So
+21D2 Sm
+21D3 So
+21D4 Sm
+21D5 21F3 So
+21F4 22FF Sm
+2300 2307 So
+2308 230B Sm
+230C 231F So
+2320 2321 Sm
+2322 2328 So
+2329 Ps
+232A Pe
+232B 237B So
+237C Sm
+237D 239A So
+239B 23B3 Sm
+23B4 Ps
+23B5 Pe
+23B6 Po
+23B7 23CE So
+2400 2426 So
+2440 244A So
+2460 249B No
+249C 24E9 So
+24EA 24FE No
+2500 25B6 So
+25B7 Sm
+25B8 25C0 So
+25C1 Sm
+25C2 25F7 So
+25F8 25FF Sm
+2600 2613 So
+2616 2617 So
+2619 266E So
+266F Sm
+2670 267D So
+2680 2689 So
+2701 2704 So
+2706 2709 So
+270C 2727 So
+2729 274B So
+274D So
+274F 2752 So
+2756 So
+2758 275E So
+2761 2767 So
+2768 Ps
+2769 Pe
+276A Ps
+276B Pe
+276C Ps
+276D Pe
+276E Ps
+276F Pe
+2770 Ps
+2771 Pe
+2772 Ps
+2773 Pe
+2774 Ps
+2775 Pe
+2776 2793 No
+2794 So
+2798 27AF So
+27B1 27BE So
+27D0 27E5 Sm
+27E6 Ps
+27E7 Pe
+27E8 Ps
+27E9 Pe
+27EA Ps
+27EB Pe
+27F0 27FF Sm
+2800 28FF So
+2900 2982 Sm
+2983 Ps
+2984 Pe
+2985 Ps
+2986 Pe
+2987 Ps
+2988 Pe
+2989 Ps
+298A Pe
+298B Ps
+298C Pe
+298D Ps
+298E Pe
+298F Ps
+2990 Pe
+2991 Ps
+2992 Pe
+2993 Ps
+2994 Pe
+2995 Ps
+2996 Pe
+2997 Ps
+2998 Pe
+2999 29D7 Sm
+29D8 Ps
+29D9 Pe
+29DA Ps
+29DB Pe
+29DC 29FB Sm
+29FC Ps
+29FD Pe
+29FE 2AFF Sm
+2E80 2E99 So
+2E9B 2EF3 So
+2F00 2FD5 So
+2FF0 2FFB So
+3000 Zs
+3001 3003 Po
+3004 So
+3005 Lm
+3006 Lo
+3007 Nl
+3008 Ps
+3009 Pe
+300A Ps
+300B Pe
+300C Ps
+300D Pe
+300E Ps
+300F Pe
+3010 Ps
+3011 Pe
+3012 3013 So
+3014 Ps
+3015 Pe
+3016 Ps
+3017 Pe
+3018 Ps
+3019 Pe
+301A Ps
+301B Pe
+301C Pd
+301D Ps
+301E 301F Pe
+3020 So
+3021 3029 Nl
+302A 302F Mn
+3030 Pd
+3031 3035 Lm
+3036 3037 So
+3038 303A Nl
+303B Lm
+303C Lo
+303D Po
+303E 303F So
+3041 3096 Lo
+3099 309A Mn
+309B 309C Sk
+309D 309E Lm
+309F Lo
+30A0 Pd
+30A1 30FA Lo
+30FB Pc
+30FC 30FE Lm
+30FF Lo
+3105 312C Lo
+3131 318E Lo
+3190 3191 So
+3192 3195 No
+3196 319F So
+31A0 31B7 Lo
+31F0 31FF Lo
+3200 321C So
+3220 3229 No
+322A 3243 So
+3251 325F No
+3260 327B So
+327F So
+3280 3289 No
+328A 32B0 So
+32B1 32BF No
+32C0 32CB So
+32D0 32FE So
+3300 3376 So
+337B 33DD So
+33E0 33FE So
+3400 4DB5 Lo
+4E00 9FA5 Lo
+A000 A48C Lo
+A490 A4C6 So
+AC00 D7A3 Lo
+D800 DFFF Cs
+E000 F8FF Co
+F900 FA2D Lo
+FA30 FA6A Lo
+FB00 FB06 Ll
+FB13 FB17 Ll
+FB1D Lo
+FB1E Mn
+FB1F FB28 Lo
+FB29 Sm
+FB2A FB36 Lo
+FB38 FB3C Lo
+FB3E Lo
+FB40 FB41 Lo
+FB43 FB44 Lo
+FB46 FBB1 Lo
+FBD3 FD3D Lo
+FD3E Ps
+FD3F Pe
+FD50 FD8F Lo
+FD92 FDC7 Lo
+FDF0 FDFB Lo
+FDFC Sc
+FE00 FE0F Mn
+FE20 FE23 Mn
+FE30 Po
+FE31 FE32 Pd
+FE33 FE34 Pc
+FE35 Ps
+FE36 Pe
+FE37 Ps
+FE38 Pe
+FE39 Ps
+FE3A Pe
+FE3B Ps
+FE3C Pe
+FE3D Ps
+FE3E Pe
+FE3F Ps
+FE40 Pe
+FE41 Ps
+FE42 Pe
+FE43 Ps
+FE44 Pe
+FE45 FE46 Po
+FE49 FE4C Po
+FE4D FE4F Pc
+FE50 FE52 Po
+FE54 FE57 Po
+FE58 Pd
+FE59 Ps
+FE5A Pe
+FE5B Ps
+FE5C Pe
+FE5D Ps
+FE5E Pe
+FE5F FE61 Po
+FE62 Sm
+FE63 Pd
+FE64 FE66 Sm
+FE68 Po
+FE69 Sc
+FE6A FE6B Po
+FE70 FE74 Lo
+FE76 FEFC Lo
+FEFF Cf
+FF01 FF03 Po
+FF04 Sc
+FF05 FF07 Po
+FF08 Ps
+FF09 Pe
+FF0A Po
+FF0B Sm
+FF0C Po
+FF0D Pd
+FF0E FF0F Po
+FF10 FF19 Nd
+FF1A FF1B Po
+FF1C FF1E Sm
+FF1F FF20 Po
+FF21 FF3A Lu
+FF3B Ps
+FF3C Po
+FF3D Pe
+FF3E Sk
+FF3F Pc
+FF40 Sk
+FF41 FF5A Ll
+FF5B Ps
+FF5C Sm
+FF5D Pe
+FF5E Sm
+FF5F Ps
+FF60 Pe
+FF61 Po
+FF62 Ps
+FF63 Pe
+FF64 Po
+FF65 Pc
+FF66 FF6F Lo
+FF70 Lm
+FF71 FF9D Lo
+FF9E FF9F Lm
+FFA0 FFBE Lo
+FFC2 FFC7 Lo
+FFCA FFCF Lo
+FFD2 FFD7 Lo
+FFDA FFDC Lo
+FFE0 FFE1 Sc
+FFE2 Sm
+FFE3 Sk
+FFE4 So
+FFE5 FFE6 Sc
+FFE8 So
+FFE9 FFEC Sm
+FFED FFEE So
+FFF9 FFFB Cf
+FFFC FFFD So
+10300 1031E Lo
+10320 10323 No
+10330 10349 Lo
+1034A Nl
+10400 10425 Lu
+10428 1044D Ll
+1D000 1D0F5 So
+1D100 1D126 So
+1D12A 1D164 So
+1D165 1D166 Mc
+1D167 1D169 Mn
+1D16A 1D16C So
+1D16D 1D172 Mc
+1D173 1D17A Cf
+1D17B 1D182 Mn
+1D183 1D184 So
+1D185 1D18B Mn
+1D18C 1D1A9 So
+1D1AA 1D1AD Mn
+1D1AE 1D1DD So
+1D400 1D419 Lu
+1D41A 1D433 Ll
+1D434 1D44D Lu
+1D44E 1D454 Ll
+1D456 1D467 Ll
+1D468 1D481 Lu
+1D482 1D49B Ll
+1D49C Lu
+1D49E 1D49F Lu
+1D4A2 Lu
+1D4A5 1D4A6 Lu
+1D4A9 1D4AC Lu
+1D4AE 1D4B5 Lu
+1D4B6 1D4B9 Ll
+1D4BB Ll
+1D4BD 1D4C0 Ll
+1D4C2 1D4C3 Ll
+1D4C5 1D4CF Ll
+1D4D0 1D4E9 Lu
+1D4EA 1D503 Ll
+1D504 1D505 Lu
+1D507 1D50A Lu
+1D50D 1D514 Lu
+1D516 1D51C Lu
+1D51E 1D537 Ll
+1D538 1D539 Lu
+1D53B 1D53E Lu
+1D540 1D544 Lu
+1D546 Lu
+1D54A 1D550 Lu
+1D552 1D56B Ll
+1D56C 1D585 Lu
+1D586 1D59F Ll
+1D5A0 1D5B9 Lu
+1D5BA 1D5D3 Ll
+1D5D4 1D5ED Lu
+1D5EE 1D607 Ll
+1D608 1D621 Lu
+1D622 1D63B Ll
+1D63C 1D655 Lu
+1D656 1D66F Ll
+1D670 1D689 Lu
+1D68A 1D6A3 Ll
+1D6A8 1D6C0 Lu
+1D6C1 Sm
+1D6C2 1D6DA Ll
+1D6DB Sm
+1D6DC 1D6E1 Ll
+1D6E2 1D6FA Lu
+1D6FB Sm
+1D6FC 1D714 Ll
+1D715 Sm
+1D716 1D71B Ll
+1D71C 1D734 Lu
+1D735 Sm
+1D736 1D74E Ll
+1D74F Sm
+1D750 1D755 Ll
+1D756 1D76E Lu
+1D76F Sm
+1D770 1D788 Ll
+1D789 Sm
+1D78A 1D78F Ll
+1D790 1D7A8 Lu
+1D7A9 Sm
+1D7AA 1D7C2 Ll
+1D7C3 Sm
+1D7C4 1D7C9 Ll
+1D7CE 1D7FF Nd
+20000 2A6D6 Lo
+2F800 2FA1D Lo
+E0001 Cf
+E0020 E007F Cf
+F0000 FFFFD Co
+100000 10FFFD Co
+END
diff --git a/Master/xemtex/perl/lib/unicore/CombiningClass.pl b/Master/xemtex/perl/lib/unicore/CombiningClass.pl
new file mode 100644
index 00000000000..2b97b553e4e
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/CombiningClass.pl
@@ -0,0 +1,169 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+return <<'END';
+0300 0314 230
+0315 232
+0316 0319 220
+031A 232
+031B 216
+031C 0320 220
+0321 0322 202
+0323 0326 220
+0327 0328 202
+0329 0333 220
+0334 0338 1
+0339 033C 220
+033D 0344 230
+0345 240
+0346 230
+0347 0349 220
+034A 034C 230
+034D 034E 220
+0360 0361 234
+0362 233
+0363 036F 230
+0483 0486 230
+0591 220
+0592 0595 230
+0596 220
+0597 0599 230
+059A 222
+059B 220
+059C 05A1 230
+05A3 05A7 220
+05A8 05A9 230
+05AA 220
+05AB 05AC 230
+05AD 222
+05AE 228
+05AF 230
+05B0 10
+05B1 11
+05B2 12
+05B3 13
+05B4 14
+05B5 15
+05B6 16
+05B7 17
+05B8 18
+05B9 19
+05BB 20
+05BC 21
+05BD 22
+05BF 23
+05C1 24
+05C2 25
+05C4 230
+064B 27
+064C 28
+064D 29
+064E 30
+064F 31
+0650 32
+0651 33
+0652 34
+0653 0654 230
+0655 220
+0670 35
+06D6 06DC 230
+06DF 06E2 230
+06E3 220
+06E4 230
+06E7 06E8 230
+06EA 220
+06EB 06EC 230
+06ED 220
+0711 36
+0730 230
+0731 220
+0732 0733 230
+0734 220
+0735 0736 230
+0737 0739 220
+073A 230
+073B 073C 220
+073D 230
+073E 220
+073F 0741 230
+0742 220
+0743 230
+0744 220
+0745 230
+0746 220
+0747 230
+0748 220
+0749 074A 230
+093C 7
+094D 9
+0951 230
+0952 220
+0953 0954 230
+09BC 7
+09CD 9
+0A3C 7
+0A4D 9
+0ABC 7
+0ACD 9
+0B3C 7
+0B4D 9
+0BCD 9
+0C4D 9
+0C55 84
+0C56 91
+0CCD 9
+0D4D 9
+0DCA 9
+0E38 0E39 103
+0E3A 9
+0E48 0E4B 107
+0EB8 0EB9 118
+0EC8 0ECB 122
+0F18 0F19 220
+0F35 220
+0F37 220
+0F39 216
+0F71 129
+0F72 130
+0F74 132
+0F7A 0F7D 130
+0F80 130
+0F82 0F83 230
+0F84 9
+0F86 0F87 230
+0FC6 220
+1037 7
+1039 9
+1714 9
+1734 9
+17D2 9
+18A9 228
+20D0 20D1 230
+20D2 20D3 1
+20D4 20D7 230
+20D8 20DA 1
+20DB 20DC 230
+20E1 230
+20E5 20E6 1
+20E7 230
+20E8 220
+20E9 230
+20EA 1
+302A 218
+302B 228
+302C 232
+302D 222
+302E 302F 224
+3099 309A 8
+FB1E 26
+FE20 FE23 230
+1D165 1D166 216
+1D167 1D169 1
+1D16D 226
+1D16E 1D172 216
+1D17B 1D182 220
+1D185 1D189 230
+1D18A 1D18B 220
+1D1AA 1D1AD 230
+END
diff --git a/Master/xemtex/perl/lib/unicore/Decomposition.pl b/Master/xemtex/perl/lib/unicore/Decomposition.pl
new file mode 100644
index 00000000000..739d8fc661b
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/Decomposition.pl
@@ -0,0 +1,5120 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+return <<'END';
+00A0 <noBreak> 0020
+00A8 <compat> 0020 0308
+00AA <super> 0061
+00AF <compat> 0020 0304
+00B2 <super> 0032
+00B3 <super> 0033
+00B4 <compat> 0020 0301
+00B5 <compat> 03BC
+00B8 <compat> 0020 0327
+00B9 <super> 0031
+00BA <super> 006F
+00BC <fraction> 0031 2044 0034
+00BD <fraction> 0031 2044 0032
+00BE <fraction> 0033 2044 0034
+00C0 0041 0300
+00C1 0041 0301
+00C2 0041 0302
+00C3 0041 0303
+00C4 0041 0308
+00C5 0041 030A
+00C7 0043 0327
+00C8 0045 0300
+00C9 0045 0301
+00CA 0045 0302
+00CB 0045 0308
+00CC 0049 0300
+00CD 0049 0301
+00CE 0049 0302
+00CF 0049 0308
+00D1 004E 0303
+00D2 004F 0300
+00D3 004F 0301
+00D4 004F 0302
+00D5 004F 0303
+00D6 004F 0308
+00D9 0055 0300
+00DA 0055 0301
+00DB 0055 0302
+00DC 0055 0308
+00DD 0059 0301
+00E0 0061 0300
+00E1 0061 0301
+00E2 0061 0302
+00E3 0061 0303
+00E4 0061 0308
+00E5 0061 030A
+00E7 0063 0327
+00E8 0065 0300
+00E9 0065 0301
+00EA 0065 0302
+00EB 0065 0308
+00EC 0069 0300
+00ED 0069 0301
+00EE 0069 0302
+00EF 0069 0308
+00F1 006E 0303
+00F2 006F 0300
+00F3 006F 0301
+00F4 006F 0302
+00F5 006F 0303
+00F6 006F 0308
+00F9 0075 0300
+00FA 0075 0301
+00FB 0075 0302
+00FC 0075 0308
+00FD 0079 0301
+00FF 0079 0308
+0100 0041 0304
+0101 0061 0304
+0102 0041 0306
+0103 0061 0306
+0104 0041 0328
+0105 0061 0328
+0106 0043 0301
+0107 0063 0301
+0108 0043 0302
+0109 0063 0302
+010A 0043 0307
+010B 0063 0307
+010C 0043 030C
+010D 0063 030C
+010E 0044 030C
+010F 0064 030C
+0112 0045 0304
+0113 0065 0304
+0114 0045 0306
+0115 0065 0306
+0116 0045 0307
+0117 0065 0307
+0118 0045 0328
+0119 0065 0328
+011A 0045 030C
+011B 0065 030C
+011C 0047 0302
+011D 0067 0302
+011E 0047 0306
+011F 0067 0306
+0120 0047 0307
+0121 0067 0307
+0122 0047 0327
+0123 0067 0327
+0124 0048 0302
+0125 0068 0302
+0128 0049 0303
+0129 0069 0303
+012A 0049 0304
+012B 0069 0304
+012C 0049 0306
+012D 0069 0306
+012E 0049 0328
+012F 0069 0328
+0130 0049 0307
+0132 <compat> 0049 004A
+0133 <compat> 0069 006A
+0134 004A 0302
+0135 006A 0302
+0136 004B 0327
+0137 006B 0327
+0139 004C 0301
+013A 006C 0301
+013B 004C 0327
+013C 006C 0327
+013D 004C 030C
+013E 006C 030C
+013F <compat> 004C 00B7
+0140 <compat> 006C 00B7
+0143 004E 0301
+0144 006E 0301
+0145 004E 0327
+0146 006E 0327
+0147 004E 030C
+0148 006E 030C
+0149 <compat> 02BC 006E
+014C 004F 0304
+014D 006F 0304
+014E 004F 0306
+014F 006F 0306
+0150 004F 030B
+0151 006F 030B
+0154 0052 0301
+0155 0072 0301
+0156 0052 0327
+0157 0072 0327
+0158 0052 030C
+0159 0072 030C
+015A 0053 0301
+015B 0073 0301
+015C 0053 0302
+015D 0073 0302
+015E 0053 0327
+015F 0073 0327
+0160 0053 030C
+0161 0073 030C
+0162 0054 0327
+0163 0074 0327
+0164 0054 030C
+0165 0074 030C
+0168 0055 0303
+0169 0075 0303
+016A 0055 0304
+016B 0075 0304
+016C 0055 0306
+016D 0075 0306
+016E 0055 030A
+016F 0075 030A
+0170 0055 030B
+0171 0075 030B
+0172 0055 0328
+0173 0075 0328
+0174 0057 0302
+0175 0077 0302
+0176 0059 0302
+0177 0079 0302
+0178 0059 0308
+0179 005A 0301
+017A 007A 0301
+017B 005A 0307
+017C 007A 0307
+017D 005A 030C
+017E 007A 030C
+017F <compat> 0073
+01A0 004F 031B
+01A1 006F 031B
+01AF 0055 031B
+01B0 0075 031B
+01C4 <compat> 0044 017D
+01C5 <compat> 0044 017E
+01C6 <compat> 0064 017E
+01C7 <compat> 004C 004A
+01C8 <compat> 004C 006A
+01C9 <compat> 006C 006A
+01CA <compat> 004E 004A
+01CB <compat> 004E 006A
+01CC <compat> 006E 006A
+01CD 0041 030C
+01CE 0061 030C
+01CF 0049 030C
+01D0 0069 030C
+01D1 004F 030C
+01D2 006F 030C
+01D3 0055 030C
+01D4 0075 030C
+01D5 00DC 0304
+01D6 00FC 0304
+01D7 00DC 0301
+01D8 00FC 0301
+01D9 00DC 030C
+01DA 00FC 030C
+01DB 00DC 0300
+01DC 00FC 0300
+01DE 00C4 0304
+01DF 00E4 0304
+01E0 0226 0304
+01E1 0227 0304
+01E2 00C6 0304
+01E3 00E6 0304
+01E6 0047 030C
+01E7 0067 030C
+01E8 004B 030C
+01E9 006B 030C
+01EA 004F 0328
+01EB 006F 0328
+01EC 01EA 0304
+01ED 01EB 0304
+01EE 01B7 030C
+01EF 0292 030C
+01F0 006A 030C
+01F1 <compat> 0044 005A
+01F2 <compat> 0044 007A
+01F3 <compat> 0064 007A
+01F4 0047 0301
+01F5 0067 0301
+01F8 004E 0300
+01F9 006E 0300
+01FA 00C5 0301
+01FB 00E5 0301
+01FC 00C6 0301
+01FD 00E6 0301
+01FE 00D8 0301
+01FF 00F8 0301
+0200 0041 030F
+0201 0061 030F
+0202 0041 0311
+0203 0061 0311
+0204 0045 030F
+0205 0065 030F
+0206 0045 0311
+0207 0065 0311
+0208 0049 030F
+0209 0069 030F
+020A 0049 0311
+020B 0069 0311
+020C 004F 030F
+020D 006F 030F
+020E 004F 0311
+020F 006F 0311
+0210 0052 030F
+0211 0072 030F
+0212 0052 0311
+0213 0072 0311
+0214 0055 030F
+0215 0075 030F
+0216 0055 0311
+0217 0075 0311
+0218 0053 0326
+0219 0073 0326
+021A 0054 0326
+021B 0074 0326
+021E 0048 030C
+021F 0068 030C
+0226 0041 0307
+0227 0061 0307
+0228 0045 0327
+0229 0065 0327
+022A 00D6 0304
+022B 00F6 0304
+022C 00D5 0304
+022D 00F5 0304
+022E 004F 0307
+022F 006F 0307
+0230 022E 0304
+0231 022F 0304
+0232 0059 0304
+0233 0079 0304
+02B0 <super> 0068
+02B1 <super> 0266
+02B2 <super> 006A
+02B3 <super> 0072
+02B4 <super> 0279
+02B5 <super> 027B
+02B6 <super> 0281
+02B7 <super> 0077
+02B8 <super> 0079
+02D8 <compat> 0020 0306
+02D9 <compat> 0020 0307
+02DA <compat> 0020 030A
+02DB <compat> 0020 0328
+02DC <compat> 0020 0303
+02DD <compat> 0020 030B
+02E0 <super> 0263
+02E1 <super> 006C
+02E2 <super> 0073
+02E3 <super> 0078
+02E4 <super> 0295
+0340 0300
+0341 0301
+0343 0313
+0344 0308 0301
+0374 02B9
+037A <compat> 0020 0345
+037E 003B
+0384 <compat> 0020 0301
+0385 00A8 0301
+0386 0391 0301
+0387 00B7
+0388 0395 0301
+0389 0397 0301
+038A 0399 0301
+038C 039F 0301
+038E 03A5 0301
+038F 03A9 0301
+0390 03CA 0301
+03AA 0399 0308
+03AB 03A5 0308
+03AC 03B1 0301
+03AD 03B5 0301
+03AE 03B7 0301
+03AF 03B9 0301
+03B0 03CB 0301
+03CA 03B9 0308
+03CB 03C5 0308
+03CC 03BF 0301
+03CD 03C5 0301
+03CE 03C9 0301
+03D0 <compat> 03B2
+03D1 <compat> 03B8
+03D2 <compat> 03A5
+03D3 03D2 0301
+03D4 03D2 0308
+03D5 <compat> 03C6
+03D6 <compat> 03C0
+03F0 <compat> 03BA
+03F1 <compat> 03C1
+03F2 <compat> 03C2
+03F4 <compat> 0398
+03F5 <compat> 03B5
+0400 0415 0300
+0401 0415 0308
+0403 0413 0301
+0407 0406 0308
+040C 041A 0301
+040D 0418 0300
+040E 0423 0306
+0419 0418 0306
+0439 0438 0306
+0450 0435 0300
+0451 0435 0308
+0453 0433 0301
+0457 0456 0308
+045C 043A 0301
+045D 0438 0300
+045E 0443 0306
+0476 0474 030F
+0477 0475 030F
+04C1 0416 0306
+04C2 0436 0306
+04D0 0410 0306
+04D1 0430 0306
+04D2 0410 0308
+04D3 0430 0308
+04D6 0415 0306
+04D7 0435 0306
+04DA 04D8 0308
+04DB 04D9 0308
+04DC 0416 0308
+04DD 0436 0308
+04DE 0417 0308
+04DF 0437 0308
+04E2 0418 0304
+04E3 0438 0304
+04E4 0418 0308
+04E5 0438 0308
+04E6 041E 0308
+04E7 043E 0308
+04EA 04E8 0308
+04EB 04E9 0308
+04EC 042D 0308
+04ED 044D 0308
+04EE 0423 0304
+04EF 0443 0304
+04F0 0423 0308
+04F1 0443 0308
+04F2 0423 030B
+04F3 0443 030B
+04F4 0427 0308
+04F5 0447 0308
+04F8 042B 0308
+04F9 044B 0308
+0587 <compat> 0565 0582
+0622 0627 0653
+0623 0627 0654
+0624 0648 0654
+0625 0627 0655
+0626 064A 0654
+0675 <compat> 0627 0674
+0676 <compat> 0648 0674
+0677 <compat> 06C7 0674
+0678 <compat> 064A 0674
+06C0 06D5 0654
+06C2 06C1 0654
+06D3 06D2 0654
+0929 0928 093C
+0931 0930 093C
+0934 0933 093C
+0958 0915 093C
+0959 0916 093C
+095A 0917 093C
+095B 091C 093C
+095C 0921 093C
+095D 0922 093C
+095E 092B 093C
+095F 092F 093C
+09CB 09C7 09BE
+09CC 09C7 09D7
+09DC 09A1 09BC
+09DD 09A2 09BC
+09DF 09AF 09BC
+0A33 0A32 0A3C
+0A36 0A38 0A3C
+0A59 0A16 0A3C
+0A5A 0A17 0A3C
+0A5B 0A1C 0A3C
+0A5E 0A2B 0A3C
+0B48 0B47 0B56
+0B4B 0B47 0B3E
+0B4C 0B47 0B57
+0B5C 0B21 0B3C
+0B5D 0B22 0B3C
+0B94 0B92 0BD7
+0BCA 0BC6 0BBE
+0BCB 0BC7 0BBE
+0BCC 0BC6 0BD7
+0C48 0C46 0C56
+0CC0 0CBF 0CD5
+0CC7 0CC6 0CD5
+0CC8 0CC6 0CD6
+0CCA 0CC6 0CC2
+0CCB 0CCA 0CD5
+0D4A 0D46 0D3E
+0D4B 0D47 0D3E
+0D4C 0D46 0D57
+0DDA 0DD9 0DCA
+0DDC 0DD9 0DCF
+0DDD 0DDC 0DCA
+0DDE 0DD9 0DDF
+0E33 <compat> 0E4D 0E32
+0EB3 <compat> 0ECD 0EB2
+0EDC <compat> 0EAB 0E99
+0EDD <compat> 0EAB 0EA1
+0F0C <noBreak> 0F0B
+0F43 0F42 0FB7
+0F4D 0F4C 0FB7
+0F52 0F51 0FB7
+0F57 0F56 0FB7
+0F5C 0F5B 0FB7
+0F69 0F40 0FB5
+0F73 0F71 0F72
+0F75 0F71 0F74
+0F76 0FB2 0F80
+0F77 <compat> 0FB2 0F81
+0F78 0FB3 0F80
+0F79 <compat> 0FB3 0F81
+0F81 0F71 0F80
+0F93 0F92 0FB7
+0F9D 0F9C 0FB7
+0FA2 0FA1 0FB7
+0FA7 0FA6 0FB7
+0FAC 0FAB 0FB7
+0FB9 0F90 0FB5
+1026 1025 102E
+1E00 0041 0325
+1E01 0061 0325
+1E02 0042 0307
+1E03 0062 0307
+1E04 0042 0323
+1E05 0062 0323
+1E06 0042 0331
+1E07 0062 0331
+1E08 00C7 0301
+1E09 00E7 0301
+1E0A 0044 0307
+1E0B 0064 0307
+1E0C 0044 0323
+1E0D 0064 0323
+1E0E 0044 0331
+1E0F 0064 0331
+1E10 0044 0327
+1E11 0064 0327
+1E12 0044 032D
+1E13 0064 032D
+1E14 0112 0300
+1E15 0113 0300
+1E16 0112 0301
+1E17 0113 0301
+1E18 0045 032D
+1E19 0065 032D
+1E1A 0045 0330
+1E1B 0065 0330
+1E1C 0228 0306
+1E1D 0229 0306
+1E1E 0046 0307
+1E1F 0066 0307
+1E20 0047 0304
+1E21 0067 0304
+1E22 0048 0307
+1E23 0068 0307
+1E24 0048 0323
+1E25 0068 0323
+1E26 0048 0308
+1E27 0068 0308
+1E28 0048 0327
+1E29 0068 0327
+1E2A 0048 032E
+1E2B 0068 032E
+1E2C 0049 0330
+1E2D 0069 0330
+1E2E 00CF 0301
+1E2F 00EF 0301
+1E30 004B 0301
+1E31 006B 0301
+1E32 004B 0323
+1E33 006B 0323
+1E34 004B 0331
+1E35 006B 0331
+1E36 004C 0323
+1E37 006C 0323
+1E38 1E36 0304
+1E39 1E37 0304
+1E3A 004C 0331
+1E3B 006C 0331
+1E3C 004C 032D
+1E3D 006C 032D
+1E3E 004D 0301
+1E3F 006D 0301
+1E40 004D 0307
+1E41 006D 0307
+1E42 004D 0323
+1E43 006D 0323
+1E44 004E 0307
+1E45 006E 0307
+1E46 004E 0323
+1E47 006E 0323
+1E48 004E 0331
+1E49 006E 0331
+1E4A 004E 032D
+1E4B 006E 032D
+1E4C 00D5 0301
+1E4D 00F5 0301
+1E4E 00D5 0308
+1E4F 00F5 0308
+1E50 014C 0300
+1E51 014D 0300
+1E52 014C 0301
+1E53 014D 0301
+1E54 0050 0301
+1E55 0070 0301
+1E56 0050 0307
+1E57 0070 0307
+1E58 0052 0307
+1E59 0072 0307
+1E5A 0052 0323
+1E5B 0072 0323
+1E5C 1E5A 0304
+1E5D 1E5B 0304
+1E5E 0052 0331
+1E5F 0072 0331
+1E60 0053 0307
+1E61 0073 0307
+1E62 0053 0323
+1E63 0073 0323
+1E64 015A 0307
+1E65 015B 0307
+1E66 0160 0307
+1E67 0161 0307
+1E68 1E62 0307
+1E69 1E63 0307
+1E6A 0054 0307
+1E6B 0074 0307
+1E6C 0054 0323
+1E6D 0074 0323
+1E6E 0054 0331
+1E6F 0074 0331
+1E70 0054 032D
+1E71 0074 032D
+1E72 0055 0324
+1E73 0075 0324
+1E74 0055 0330
+1E75 0075 0330
+1E76 0055 032D
+1E77 0075 032D
+1E78 0168 0301
+1E79 0169 0301
+1E7A 016A 0308
+1E7B 016B 0308
+1E7C 0056 0303
+1E7D 0076 0303
+1E7E 0056 0323
+1E7F 0076 0323
+1E80 0057 0300
+1E81 0077 0300
+1E82 0057 0301
+1E83 0077 0301
+1E84 0057 0308
+1E85 0077 0308
+1E86 0057 0307
+1E87 0077 0307
+1E88 0057 0323
+1E89 0077 0323
+1E8A 0058 0307
+1E8B 0078 0307
+1E8C 0058 0308
+1E8D 0078 0308
+1E8E 0059 0307
+1E8F 0079 0307
+1E90 005A 0302
+1E91 007A 0302
+1E92 005A 0323
+1E93 007A 0323
+1E94 005A 0331
+1E95 007A 0331
+1E96 0068 0331
+1E97 0074 0308
+1E98 0077 030A
+1E99 0079 030A
+1E9A <compat> 0061 02BE
+1E9B 017F 0307
+1EA0 0041 0323
+1EA1 0061 0323
+1EA2 0041 0309
+1EA3 0061 0309
+1EA4 00C2 0301
+1EA5 00E2 0301
+1EA6 00C2 0300
+1EA7 00E2 0300
+1EA8 00C2 0309
+1EA9 00E2 0309
+1EAA 00C2 0303
+1EAB 00E2 0303
+1EAC 1EA0 0302
+1EAD 1EA1 0302
+1EAE 0102 0301
+1EAF 0103 0301
+1EB0 0102 0300
+1EB1 0103 0300
+1EB2 0102 0309
+1EB3 0103 0309
+1EB4 0102 0303
+1EB5 0103 0303
+1EB6 1EA0 0306
+1EB7 1EA1 0306
+1EB8 0045 0323
+1EB9 0065 0323
+1EBA 0045 0309
+1EBB 0065 0309
+1EBC 0045 0303
+1EBD 0065 0303
+1EBE 00CA 0301
+1EBF 00EA 0301
+1EC0 00CA 0300
+1EC1 00EA 0300
+1EC2 00CA 0309
+1EC3 00EA 0309
+1EC4 00CA 0303
+1EC5 00EA 0303
+1EC6 1EB8 0302
+1EC7 1EB9 0302
+1EC8 0049 0309
+1EC9 0069 0309
+1ECA 0049 0323
+1ECB 0069 0323
+1ECC 004F 0323
+1ECD 006F 0323
+1ECE 004F 0309
+1ECF 006F 0309
+1ED0 00D4 0301
+1ED1 00F4 0301
+1ED2 00D4 0300
+1ED3 00F4 0300
+1ED4 00D4 0309
+1ED5 00F4 0309
+1ED6 00D4 0303
+1ED7 00F4 0303
+1ED8 1ECC 0302
+1ED9 1ECD 0302
+1EDA 01A0 0301
+1EDB 01A1 0301
+1EDC 01A0 0300
+1EDD 01A1 0300
+1EDE 01A0 0309
+1EDF 01A1 0309
+1EE0 01A0 0303
+1EE1 01A1 0303
+1EE2 01A0 0323
+1EE3 01A1 0323
+1EE4 0055 0323
+1EE5 0075 0323
+1EE6 0055 0309
+1EE7 0075 0309
+1EE8 01AF 0301
+1EE9 01B0 0301
+1EEA 01AF 0300
+1EEB 01B0 0300
+1EEC 01AF 0309
+1EED 01B0 0309
+1EEE 01AF 0303
+1EEF 01B0 0303
+1EF0 01AF 0323
+1EF1 01B0 0323
+1EF2 0059 0300
+1EF3 0079 0300
+1EF4 0059 0323
+1EF5 0079 0323
+1EF6 0059 0309
+1EF7 0079 0309
+1EF8 0059 0303
+1EF9 0079 0303
+1F00 03B1 0313
+1F01 03B1 0314
+1F02 1F00 0300
+1F03 1F01 0300
+1F04 1F00 0301
+1F05 1F01 0301
+1F06 1F00 0342
+1F07 1F01 0342
+1F08 0391 0313
+1F09 0391 0314
+1F0A 1F08 0300
+1F0B 1F09 0300
+1F0C 1F08 0301
+1F0D 1F09 0301
+1F0E 1F08 0342
+1F0F 1F09 0342
+1F10 03B5 0313
+1F11 03B5 0314
+1F12 1F10 0300
+1F13 1F11 0300
+1F14 1F10 0301
+1F15 1F11 0301
+1F18 0395 0313
+1F19 0395 0314
+1F1A 1F18 0300
+1F1B 1F19 0300
+1F1C 1F18 0301
+1F1D 1F19 0301
+1F20 03B7 0313
+1F21 03B7 0314
+1F22 1F20 0300
+1F23 1F21 0300
+1F24 1F20 0301
+1F25 1F21 0301
+1F26 1F20 0342
+1F27 1F21 0342
+1F28 0397 0313
+1F29 0397 0314
+1F2A 1F28 0300
+1F2B 1F29 0300
+1F2C 1F28 0301
+1F2D 1F29 0301
+1F2E 1F28 0342
+1F2F 1F29 0342
+1F30 03B9 0313
+1F31 03B9 0314
+1F32 1F30 0300
+1F33 1F31 0300
+1F34 1F30 0301
+1F35 1F31 0301
+1F36 1F30 0342
+1F37 1F31 0342
+1F38 0399 0313
+1F39 0399 0314
+1F3A 1F38 0300
+1F3B 1F39 0300
+1F3C 1F38 0301
+1F3D 1F39 0301
+1F3E 1F38 0342
+1F3F 1F39 0342
+1F40 03BF 0313
+1F41 03BF 0314
+1F42 1F40 0300
+1F43 1F41 0300
+1F44 1F40 0301
+1F45 1F41 0301
+1F48 039F 0313
+1F49 039F 0314
+1F4A 1F48 0300
+1F4B 1F49 0300
+1F4C 1F48 0301
+1F4D 1F49 0301
+1F50 03C5 0313
+1F51 03C5 0314
+1F52 1F50 0300
+1F53 1F51 0300
+1F54 1F50 0301
+1F55 1F51 0301
+1F56 1F50 0342
+1F57 1F51 0342
+1F59 03A5 0314
+1F5B 1F59 0300
+1F5D 1F59 0301
+1F5F 1F59 0342
+1F60 03C9 0313
+1F61 03C9 0314
+1F62 1F60 0300
+1F63 1F61 0300
+1F64 1F60 0301
+1F65 1F61 0301
+1F66 1F60 0342
+1F67 1F61 0342
+1F68 03A9 0313
+1F69 03A9 0314
+1F6A 1F68 0300
+1F6B 1F69 0300
+1F6C 1F68 0301
+1F6D 1F69 0301
+1F6E 1F68 0342
+1F6F 1F69 0342
+1F70 03B1 0300
+1F71 03AC
+1F72 03B5 0300
+1F73 03AD
+1F74 03B7 0300
+1F75 03AE
+1F76 03B9 0300
+1F77 03AF
+1F78 03BF 0300
+1F79 03CC
+1F7A 03C5 0300
+1F7B 03CD
+1F7C 03C9 0300
+1F7D 03CE
+1F80 1F00 0345
+1F81 1F01 0345
+1F82 1F02 0345
+1F83 1F03 0345
+1F84 1F04 0345
+1F85 1F05 0345
+1F86 1F06 0345
+1F87 1F07 0345
+1F88 1F08 0345
+1F89 1F09 0345
+1F8A 1F0A 0345
+1F8B 1F0B 0345
+1F8C 1F0C 0345
+1F8D 1F0D 0345
+1F8E 1F0E 0345
+1F8F 1F0F 0345
+1F90 1F20 0345
+1F91 1F21 0345
+1F92 1F22 0345
+1F93 1F23 0345
+1F94 1F24 0345
+1F95 1F25 0345
+1F96 1F26 0345
+1F97 1F27 0345
+1F98 1F28 0345
+1F99 1F29 0345
+1F9A 1F2A 0345
+1F9B 1F2B 0345
+1F9C 1F2C 0345
+1F9D 1F2D 0345
+1F9E 1F2E 0345
+1F9F 1F2F 0345
+1FA0 1F60 0345
+1FA1 1F61 0345
+1FA2 1F62 0345
+1FA3 1F63 0345
+1FA4 1F64 0345
+1FA5 1F65 0345
+1FA6 1F66 0345
+1FA7 1F67 0345
+1FA8 1F68 0345
+1FA9 1F69 0345
+1FAA 1F6A 0345
+1FAB 1F6B 0345
+1FAC 1F6C 0345
+1FAD 1F6D 0345
+1FAE 1F6E 0345
+1FAF 1F6F 0345
+1FB0 03B1 0306
+1FB1 03B1 0304
+1FB2 1F70 0345
+1FB3 03B1 0345
+1FB4 03AC 0345
+1FB6 03B1 0342
+1FB7 1FB6 0345
+1FB8 0391 0306
+1FB9 0391 0304
+1FBA 0391 0300
+1FBB 0386
+1FBC 0391 0345
+1FBD <compat> 0020 0313
+1FBE 03B9
+1FBF <compat> 0020 0313
+1FC0 <compat> 0020 0342
+1FC1 00A8 0342
+1FC2 1F74 0345
+1FC3 03B7 0345
+1FC4 03AE 0345
+1FC6 03B7 0342
+1FC7 1FC6 0345
+1FC8 0395 0300
+1FC9 0388
+1FCA 0397 0300
+1FCB 0389
+1FCC 0397 0345
+1FCD 1FBF 0300
+1FCE 1FBF 0301
+1FCF 1FBF 0342
+1FD0 03B9 0306
+1FD1 03B9 0304
+1FD2 03CA 0300
+1FD3 0390
+1FD6 03B9 0342
+1FD7 03CA 0342
+1FD8 0399 0306
+1FD9 0399 0304
+1FDA 0399 0300
+1FDB 038A
+1FDD 1FFE 0300
+1FDE 1FFE 0301
+1FDF 1FFE 0342
+1FE0 03C5 0306
+1FE1 03C5 0304
+1FE2 03CB 0300
+1FE3 03B0
+1FE4 03C1 0313
+1FE5 03C1 0314
+1FE6 03C5 0342
+1FE7 03CB 0342
+1FE8 03A5 0306
+1FE9 03A5 0304
+1FEA 03A5 0300
+1FEB 038E
+1FEC 03A1 0314
+1FED 00A8 0300
+1FEE 0385
+1FEF 0060
+1FF2 1F7C 0345
+1FF3 03C9 0345
+1FF4 03CE 0345
+1FF6 03C9 0342
+1FF7 1FF6 0345
+1FF8 039F 0300
+1FF9 038C
+1FFA 03A9 0300
+1FFB 038F
+1FFC 03A9 0345
+1FFD 00B4
+1FFE <compat> 0020 0314
+2000 2002
+2001 2003
+2002 2006 <compat> 0020
+2007 <noBreak> 0020
+2008 200A <compat> 0020
+2011 <noBreak> 2010
+2017 <compat> 0020 0333
+2024 <compat> 002E
+2025 <compat> 002E 002E
+2026 <compat> 002E 002E 002E
+202F <noBreak> 0020
+2033 <compat> 2032 2032
+2034 <compat> 2032 2032 2032
+2036 <compat> 2035 2035
+2037 <compat> 2035 2035 2035
+203C <compat> 0021 0021
+203E <compat> 0020 0305
+2047 <compat> 003F 003F
+2048 <compat> 003F 0021
+2049 <compat> 0021 003F
+2057 <compat> 2032 2032 2032 2032
+205F <compat> 0020
+2070 <super> 0030
+2071 <super> 0069
+2074 <super> 0034
+2075 <super> 0035
+2076 <super> 0036
+2077 <super> 0037
+2078 <super> 0038
+2079 <super> 0039
+207A <super> 002B
+207B <super> 2212
+207C <super> 003D
+207D <super> 0028
+207E <super> 0029
+207F <super> 006E
+2080 <sub> 0030
+2081 <sub> 0031
+2082 <sub> 0032
+2083 <sub> 0033
+2084 <sub> 0034
+2085 <sub> 0035
+2086 <sub> 0036
+2087 <sub> 0037
+2088 <sub> 0038
+2089 <sub> 0039
+208A <sub> 002B
+208B <sub> 2212
+208C <sub> 003D
+208D <sub> 0028
+208E <sub> 0029
+20A8 <compat> 0052 0073
+2100 <compat> 0061 002F 0063
+2101 <compat> 0061 002F 0073
+2102 <font> 0043
+2103 <compat> 00B0 0043
+2105 <compat> 0063 002F 006F
+2106 <compat> 0063 002F 0075
+2107 <compat> 0190
+2109 <compat> 00B0 0046
+210A <font> 0067
+210B 210D <font> 0048
+210E <font> 0068
+210F <font> 0127
+2110 2111 <font> 0049
+2112 <font> 004C
+2113 <font> 006C
+2115 <font> 004E
+2116 <compat> 004E 006F
+2119 <font> 0050
+211A <font> 0051
+211B 211D <font> 0052
+2120 <super> 0053 004D
+2121 <compat> 0054 0045 004C
+2122 <super> 0054 004D
+2124 <font> 005A
+2126 03A9
+2128 <font> 005A
+212A 004B
+212B 00C5
+212C <font> 0042
+212D <font> 0043
+212F <font> 0065
+2130 <font> 0045
+2131 <font> 0046
+2133 <font> 004D
+2134 <font> 006F
+2135 <compat> 05D0
+2136 <compat> 05D1
+2137 <compat> 05D2
+2138 <compat> 05D3
+2139 <font> 0069
+213D <font> 03B3
+213E <font> 0393
+213F <font> 03A0
+2140 <font> 2211
+2145 <font> 0044
+2146 <font> 0064
+2147 <font> 0065
+2148 <font> 0069
+2149 <font> 006A
+2153 <fraction> 0031 2044 0033
+2154 <fraction> 0032 2044 0033
+2155 <fraction> 0031 2044 0035
+2156 <fraction> 0032 2044 0035
+2157 <fraction> 0033 2044 0035
+2158 <fraction> 0034 2044 0035
+2159 <fraction> 0031 2044 0036
+215A <fraction> 0035 2044 0036
+215B <fraction> 0031 2044 0038
+215C <fraction> 0033 2044 0038
+215D <fraction> 0035 2044 0038
+215E <fraction> 0037 2044 0038
+215F <fraction> 0031 2044
+2160 <compat> 0049
+2161 <compat> 0049 0049
+2162 <compat> 0049 0049 0049
+2163 <compat> 0049 0056
+2164 <compat> 0056
+2165 <compat> 0056 0049
+2166 <compat> 0056 0049 0049
+2167 <compat> 0056 0049 0049 0049
+2168 <compat> 0049 0058
+2169 <compat> 0058
+216A <compat> 0058 0049
+216B <compat> 0058 0049 0049
+216C <compat> 004C
+216D <compat> 0043
+216E <compat> 0044
+216F <compat> 004D
+2170 <compat> 0069
+2171 <compat> 0069 0069
+2172 <compat> 0069 0069 0069
+2173 <compat> 0069 0076
+2174 <compat> 0076
+2175 <compat> 0076 0069
+2176 <compat> 0076 0069 0069
+2177 <compat> 0076 0069 0069 0069
+2178 <compat> 0069 0078
+2179 <compat> 0078
+217A <compat> 0078 0069
+217B <compat> 0078 0069 0069
+217C <compat> 006C
+217D <compat> 0063
+217E <compat> 0064
+217F <compat> 006D
+219A 2190 0338
+219B 2192 0338
+21AE 2194 0338
+21CD 21D0 0338
+21CE 21D4 0338
+21CF 21D2 0338
+2204 2203 0338
+2209 2208 0338
+220C 220B 0338
+2224 2223 0338
+2226 2225 0338
+222C <compat> 222B 222B
+222D <compat> 222B 222B 222B
+222F <compat> 222E 222E
+2230 <compat> 222E 222E 222E
+2241 223C 0338
+2244 2243 0338
+2247 2245 0338
+2249 2248 0338
+2260 003D 0338
+2262 2261 0338
+226D 224D 0338
+226E 003C 0338
+226F 003E 0338
+2270 2264 0338
+2271 2265 0338
+2274 2272 0338
+2275 2273 0338
+2278 2276 0338
+2279 2277 0338
+2280 227A 0338
+2281 227B 0338
+2284 2282 0338
+2285 2283 0338
+2288 2286 0338
+2289 2287 0338
+22AC 22A2 0338
+22AD 22A8 0338
+22AE 22A9 0338
+22AF 22AB 0338
+22E0 227C 0338
+22E1 227D 0338
+22E2 2291 0338
+22E3 2292 0338
+22EA 22B2 0338
+22EB 22B3 0338
+22EC 22B4 0338
+22ED 22B5 0338
+2329 3008
+232A 3009
+2460 <circle> 0031
+2461 <circle> 0032
+2462 <circle> 0033
+2463 <circle> 0034
+2464 <circle> 0035
+2465 <circle> 0036
+2466 <circle> 0037
+2467 <circle> 0038
+2468 <circle> 0039
+2469 <circle> 0031 0030
+246A <circle> 0031 0031
+246B <circle> 0031 0032
+246C <circle> 0031 0033
+246D <circle> 0031 0034
+246E <circle> 0031 0035
+246F <circle> 0031 0036
+2470 <circle> 0031 0037
+2471 <circle> 0031 0038
+2472 <circle> 0031 0039
+2473 <circle> 0032 0030
+2474 <compat> 0028 0031 0029
+2475 <compat> 0028 0032 0029
+2476 <compat> 0028 0033 0029
+2477 <compat> 0028 0034 0029
+2478 <compat> 0028 0035 0029
+2479 <compat> 0028 0036 0029
+247A <compat> 0028 0037 0029
+247B <compat> 0028 0038 0029
+247C <compat> 0028 0039 0029
+247D <compat> 0028 0031 0030 0029
+247E <compat> 0028 0031 0031 0029
+247F <compat> 0028 0031 0032 0029
+2480 <compat> 0028 0031 0033 0029
+2481 <compat> 0028 0031 0034 0029
+2482 <compat> 0028 0031 0035 0029
+2483 <compat> 0028 0031 0036 0029
+2484 <compat> 0028 0031 0037 0029
+2485 <compat> 0028 0031 0038 0029
+2486 <compat> 0028 0031 0039 0029
+2487 <compat> 0028 0032 0030 0029
+2488 <compat> 0031 002E
+2489 <compat> 0032 002E
+248A <compat> 0033 002E
+248B <compat> 0034 002E
+248C <compat> 0035 002E
+248D <compat> 0036 002E
+248E <compat> 0037 002E
+248F <compat> 0038 002E
+2490 <compat> 0039 002E
+2491 <compat> 0031 0030 002E
+2492 <compat> 0031 0031 002E
+2493 <compat> 0031 0032 002E
+2494 <compat> 0031 0033 002E
+2495 <compat> 0031 0034 002E
+2496 <compat> 0031 0035 002E
+2497 <compat> 0031 0036 002E
+2498 <compat> 0031 0037 002E
+2499 <compat> 0031 0038 002E
+249A <compat> 0031 0039 002E
+249B <compat> 0032 0030 002E
+249C <compat> 0028 0061 0029
+249D <compat> 0028 0062 0029
+249E <compat> 0028 0063 0029
+249F <compat> 0028 0064 0029
+24A0 <compat> 0028 0065 0029
+24A1 <compat> 0028 0066 0029
+24A2 <compat> 0028 0067 0029
+24A3 <compat> 0028 0068 0029
+24A4 <compat> 0028 0069 0029
+24A5 <compat> 0028 006A 0029
+24A6 <compat> 0028 006B 0029
+24A7 <compat> 0028 006C 0029
+24A8 <compat> 0028 006D 0029
+24A9 <compat> 0028 006E 0029
+24AA <compat> 0028 006F 0029
+24AB <compat> 0028 0070 0029
+24AC <compat> 0028 0071 0029
+24AD <compat> 0028 0072 0029
+24AE <compat> 0028 0073 0029
+24AF <compat> 0028 0074 0029
+24B0 <compat> 0028 0075 0029
+24B1 <compat> 0028 0076 0029
+24B2 <compat> 0028 0077 0029
+24B3 <compat> 0028 0078 0029
+24B4 <compat> 0028 0079 0029
+24B5 <compat> 0028 007A 0029
+24B6 <circle> 0041
+24B7 <circle> 0042
+24B8 <circle> 0043
+24B9 <circle> 0044
+24BA <circle> 0045
+24BB <circle> 0046
+24BC <circle> 0047
+24BD <circle> 0048
+24BE <circle> 0049
+24BF <circle> 004A
+24C0 <circle> 004B
+24C1 <circle> 004C
+24C2 <circle> 004D
+24C3 <circle> 004E
+24C4 <circle> 004F
+24C5 <circle> 0050
+24C6 <circle> 0051
+24C7 <circle> 0052
+24C8 <circle> 0053
+24C9 <circle> 0054
+24CA <circle> 0055
+24CB <circle> 0056
+24CC <circle> 0057
+24CD <circle> 0058
+24CE <circle> 0059
+24CF <circle> 005A
+24D0 <circle> 0061
+24D1 <circle> 0062
+24D2 <circle> 0063
+24D3 <circle> 0064
+24D4 <circle> 0065
+24D5 <circle> 0066
+24D6 <circle> 0067
+24D7 <circle> 0068
+24D8 <circle> 0069
+24D9 <circle> 006A
+24DA <circle> 006B
+24DB <circle> 006C
+24DC <circle> 006D
+24DD <circle> 006E
+24DE <circle> 006F
+24DF <circle> 0070
+24E0 <circle> 0071
+24E1 <circle> 0072
+24E2 <circle> 0073
+24E3 <circle> 0074
+24E4 <circle> 0075
+24E5 <circle> 0076
+24E6 <circle> 0077
+24E7 <circle> 0078
+24E8 <circle> 0079
+24E9 <circle> 007A
+24EA <circle> 0030
+2A0C <compat> 222B 222B 222B 222B
+2A74 <compat> 003A 003A 003D
+2A75 <compat> 003D 003D
+2A76 <compat> 003D 003D 003D
+2ADC 2ADD 0338
+2E9F <compat> 6BCD
+2EF3 <compat> 9F9F
+2F00 <compat> 4E00
+2F01 <compat> 4E28
+2F02 <compat> 4E36
+2F03 <compat> 4E3F
+2F04 <compat> 4E59
+2F05 <compat> 4E85
+2F06 <compat> 4E8C
+2F07 <compat> 4EA0
+2F08 <compat> 4EBA
+2F09 <compat> 513F
+2F0A <compat> 5165
+2F0B <compat> 516B
+2F0C <compat> 5182
+2F0D <compat> 5196
+2F0E <compat> 51AB
+2F0F <compat> 51E0
+2F10 <compat> 51F5
+2F11 <compat> 5200
+2F12 <compat> 529B
+2F13 <compat> 52F9
+2F14 <compat> 5315
+2F15 <compat> 531A
+2F16 <compat> 5338
+2F17 <compat> 5341
+2F18 <compat> 535C
+2F19 <compat> 5369
+2F1A <compat> 5382
+2F1B <compat> 53B6
+2F1C <compat> 53C8
+2F1D <compat> 53E3
+2F1E <compat> 56D7
+2F1F <compat> 571F
+2F20 <compat> 58EB
+2F21 <compat> 5902
+2F22 <compat> 590A
+2F23 <compat> 5915
+2F24 <compat> 5927
+2F25 <compat> 5973
+2F26 <compat> 5B50
+2F27 <compat> 5B80
+2F28 <compat> 5BF8
+2F29 <compat> 5C0F
+2F2A <compat> 5C22
+2F2B <compat> 5C38
+2F2C <compat> 5C6E
+2F2D <compat> 5C71
+2F2E <compat> 5DDB
+2F2F <compat> 5DE5
+2F30 <compat> 5DF1
+2F31 <compat> 5DFE
+2F32 <compat> 5E72
+2F33 <compat> 5E7A
+2F34 <compat> 5E7F
+2F35 <compat> 5EF4
+2F36 <compat> 5EFE
+2F37 <compat> 5F0B
+2F38 <compat> 5F13
+2F39 <compat> 5F50
+2F3A <compat> 5F61
+2F3B <compat> 5F73
+2F3C <compat> 5FC3
+2F3D <compat> 6208
+2F3E <compat> 6236
+2F3F <compat> 624B
+2F40 <compat> 652F
+2F41 <compat> 6534
+2F42 <compat> 6587
+2F43 <compat> 6597
+2F44 <compat> 65A4
+2F45 <compat> 65B9
+2F46 <compat> 65E0
+2F47 <compat> 65E5
+2F48 <compat> 66F0
+2F49 <compat> 6708
+2F4A <compat> 6728
+2F4B <compat> 6B20
+2F4C <compat> 6B62
+2F4D <compat> 6B79
+2F4E <compat> 6BB3
+2F4F <compat> 6BCB
+2F50 <compat> 6BD4
+2F51 <compat> 6BDB
+2F52 <compat> 6C0F
+2F53 <compat> 6C14
+2F54 <compat> 6C34
+2F55 <compat> 706B
+2F56 <compat> 722A
+2F57 <compat> 7236
+2F58 <compat> 723B
+2F59 <compat> 723F
+2F5A <compat> 7247
+2F5B <compat> 7259
+2F5C <compat> 725B
+2F5D <compat> 72AC
+2F5E <compat> 7384
+2F5F <compat> 7389
+2F60 <compat> 74DC
+2F61 <compat> 74E6
+2F62 <compat> 7518
+2F63 <compat> 751F
+2F64 <compat> 7528
+2F65 <compat> 7530
+2F66 <compat> 758B
+2F67 <compat> 7592
+2F68 <compat> 7676
+2F69 <compat> 767D
+2F6A <compat> 76AE
+2F6B <compat> 76BF
+2F6C <compat> 76EE
+2F6D <compat> 77DB
+2F6E <compat> 77E2
+2F6F <compat> 77F3
+2F70 <compat> 793A
+2F71 <compat> 79B8
+2F72 <compat> 79BE
+2F73 <compat> 7A74
+2F74 <compat> 7ACB
+2F75 <compat> 7AF9
+2F76 <compat> 7C73
+2F77 <compat> 7CF8
+2F78 <compat> 7F36
+2F79 <compat> 7F51
+2F7A <compat> 7F8A
+2F7B <compat> 7FBD
+2F7C <compat> 8001
+2F7D <compat> 800C
+2F7E <compat> 8012
+2F7F <compat> 8033
+2F80 <compat> 807F
+2F81 <compat> 8089
+2F82 <compat> 81E3
+2F83 <compat> 81EA
+2F84 <compat> 81F3
+2F85 <compat> 81FC
+2F86 <compat> 820C
+2F87 <compat> 821B
+2F88 <compat> 821F
+2F89 <compat> 826E
+2F8A <compat> 8272
+2F8B <compat> 8278
+2F8C <compat> 864D
+2F8D <compat> 866B
+2F8E <compat> 8840
+2F8F <compat> 884C
+2F90 <compat> 8863
+2F91 <compat> 897E
+2F92 <compat> 898B
+2F93 <compat> 89D2
+2F94 <compat> 8A00
+2F95 <compat> 8C37
+2F96 <compat> 8C46
+2F97 <compat> 8C55
+2F98 <compat> 8C78
+2F99 <compat> 8C9D
+2F9A <compat> 8D64
+2F9B <compat> 8D70
+2F9C <compat> 8DB3
+2F9D <compat> 8EAB
+2F9E <compat> 8ECA
+2F9F <compat> 8F9B
+2FA0 <compat> 8FB0
+2FA1 <compat> 8FB5
+2FA2 <compat> 9091
+2FA3 <compat> 9149
+2FA4 <compat> 91C6
+2FA5 <compat> 91CC
+2FA6 <compat> 91D1
+2FA7 <compat> 9577
+2FA8 <compat> 9580
+2FA9 <compat> 961C
+2FAA <compat> 96B6
+2FAB <compat> 96B9
+2FAC <compat> 96E8
+2FAD <compat> 9751
+2FAE <compat> 975E
+2FAF <compat> 9762
+2FB0 <compat> 9769
+2FB1 <compat> 97CB
+2FB2 <compat> 97ED
+2FB3 <compat> 97F3
+2FB4 <compat> 9801
+2FB5 <compat> 98A8
+2FB6 <compat> 98DB
+2FB7 <compat> 98DF
+2FB8 <compat> 9996
+2FB9 <compat> 9999
+2FBA <compat> 99AC
+2FBB <compat> 9AA8
+2FBC <compat> 9AD8
+2FBD <compat> 9ADF
+2FBE <compat> 9B25
+2FBF <compat> 9B2F
+2FC0 <compat> 9B32
+2FC1 <compat> 9B3C
+2FC2 <compat> 9B5A
+2FC3 <compat> 9CE5
+2FC4 <compat> 9E75
+2FC5 <compat> 9E7F
+2FC6 <compat> 9EA5
+2FC7 <compat> 9EBB
+2FC8 <compat> 9EC3
+2FC9 <compat> 9ECD
+2FCA <compat> 9ED1
+2FCB <compat> 9EF9
+2FCC <compat> 9EFD
+2FCD <compat> 9F0E
+2FCE <compat> 9F13
+2FCF <compat> 9F20
+2FD0 <compat> 9F3B
+2FD1 <compat> 9F4A
+2FD2 <compat> 9F52
+2FD3 <compat> 9F8D
+2FD4 <compat> 9F9C
+2FD5 <compat> 9FA0
+3000 <wide> 0020
+3036 <compat> 3012
+3038 <compat> 5341
+3039 <compat> 5344
+303A <compat> 5345
+304C 304B 3099
+304E 304D 3099
+3050 304F 3099
+3052 3051 3099
+3054 3053 3099
+3056 3055 3099
+3058 3057 3099
+305A 3059 3099
+305C 305B 3099
+305E 305D 3099
+3060 305F 3099
+3062 3061 3099
+3065 3064 3099
+3067 3066 3099
+3069 3068 3099
+3070 306F 3099
+3071 306F 309A
+3073 3072 3099
+3074 3072 309A
+3076 3075 3099
+3077 3075 309A
+3079 3078 3099
+307A 3078 309A
+307C 307B 3099
+307D 307B 309A
+3094 3046 3099
+309B <compat> 0020 3099
+309C <compat> 0020 309A
+309E 309D 3099
+309F <vertical> 3088 308A
+30AC 30AB 3099
+30AE 30AD 3099
+30B0 30AF 3099
+30B2 30B1 3099
+30B4 30B3 3099
+30B6 30B5 3099
+30B8 30B7 3099
+30BA 30B9 3099
+30BC 30BB 3099
+30BE 30BD 3099
+30C0 30BF 3099
+30C2 30C1 3099
+30C5 30C4 3099
+30C7 30C6 3099
+30C9 30C8 3099
+30D0 30CF 3099
+30D1 30CF 309A
+30D3 30D2 3099
+30D4 30D2 309A
+30D6 30D5 3099
+30D7 30D5 309A
+30D9 30D8 3099
+30DA 30D8 309A
+30DC 30DB 3099
+30DD 30DB 309A
+30F4 30A6 3099
+30F7 30EF 3099
+30F8 30F0 3099
+30F9 30F1 3099
+30FA 30F2 3099
+30FE 30FD 3099
+30FF <vertical> 30B3 30C8
+3131 <compat> 1100
+3132 <compat> 1101
+3133 <compat> 11AA
+3134 <compat> 1102
+3135 <compat> 11AC
+3136 <compat> 11AD
+3137 <compat> 1103
+3138 <compat> 1104
+3139 <compat> 1105
+313A <compat> 11B0
+313B <compat> 11B1
+313C <compat> 11B2
+313D <compat> 11B3
+313E <compat> 11B4
+313F <compat> 11B5
+3140 <compat> 111A
+3141 <compat> 1106
+3142 <compat> 1107
+3143 <compat> 1108
+3144 <compat> 1121
+3145 <compat> 1109
+3146 <compat> 110A
+3147 <compat> 110B
+3148 <compat> 110C
+3149 <compat> 110D
+314A <compat> 110E
+314B <compat> 110F
+314C <compat> 1110
+314D <compat> 1111
+314E <compat> 1112
+314F <compat> 1161
+3150 <compat> 1162
+3151 <compat> 1163
+3152 <compat> 1164
+3153 <compat> 1165
+3154 <compat> 1166
+3155 <compat> 1167
+3156 <compat> 1168
+3157 <compat> 1169
+3158 <compat> 116A
+3159 <compat> 116B
+315A <compat> 116C
+315B <compat> 116D
+315C <compat> 116E
+315D <compat> 116F
+315E <compat> 1170
+315F <compat> 1171
+3160 <compat> 1172
+3161 <compat> 1173
+3162 <compat> 1174
+3163 <compat> 1175
+3164 <compat> 1160
+3165 <compat> 1114
+3166 <compat> 1115
+3167 <compat> 11C7
+3168 <compat> 11C8
+3169 <compat> 11CC
+316A <compat> 11CE
+316B <compat> 11D3
+316C <compat> 11D7
+316D <compat> 11D9
+316E <compat> 111C
+316F <compat> 11DD
+3170 <compat> 11DF
+3171 <compat> 111D
+3172 <compat> 111E
+3173 <compat> 1120
+3174 <compat> 1122
+3175 <compat> 1123
+3176 <compat> 1127
+3177 <compat> 1129
+3178 <compat> 112B
+3179 <compat> 112C
+317A <compat> 112D
+317B <compat> 112E
+317C <compat> 112F
+317D <compat> 1132
+317E <compat> 1136
+317F <compat> 1140
+3180 <compat> 1147
+3181 <compat> 114C
+3182 <compat> 11F1
+3183 <compat> 11F2
+3184 <compat> 1157
+3185 <compat> 1158
+3186 <compat> 1159
+3187 <compat> 1184
+3188 <compat> 1185
+3189 <compat> 1188
+318A <compat> 1191
+318B <compat> 1192
+318C <compat> 1194
+318D <compat> 119E
+318E <compat> 11A1
+3192 <super> 4E00
+3193 <super> 4E8C
+3194 <super> 4E09
+3195 <super> 56DB
+3196 <super> 4E0A
+3197 <super> 4E2D
+3198 <super> 4E0B
+3199 <super> 7532
+319A <super> 4E59
+319B <super> 4E19
+319C <super> 4E01
+319D <super> 5929
+319E <super> 5730
+319F <super> 4EBA
+3200 <compat> 0028 1100 0029
+3201 <compat> 0028 1102 0029
+3202 <compat> 0028 1103 0029
+3203 <compat> 0028 1105 0029
+3204 <compat> 0028 1106 0029
+3205 <compat> 0028 1107 0029
+3206 <compat> 0028 1109 0029
+3207 <compat> 0028 110B 0029
+3208 <compat> 0028 110C 0029
+3209 <compat> 0028 110E 0029
+320A <compat> 0028 110F 0029
+320B <compat> 0028 1110 0029
+320C <compat> 0028 1111 0029
+320D <compat> 0028 1112 0029
+320E <compat> 0028 1100 1161 0029
+320F <compat> 0028 1102 1161 0029
+3210 <compat> 0028 1103 1161 0029
+3211 <compat> 0028 1105 1161 0029
+3212 <compat> 0028 1106 1161 0029
+3213 <compat> 0028 1107 1161 0029
+3214 <compat> 0028 1109 1161 0029
+3215 <compat> 0028 110B 1161 0029
+3216 <compat> 0028 110C 1161 0029
+3217 <compat> 0028 110E 1161 0029
+3218 <compat> 0028 110F 1161 0029
+3219 <compat> 0028 1110 1161 0029
+321A <compat> 0028 1111 1161 0029
+321B <compat> 0028 1112 1161 0029
+321C <compat> 0028 110C 116E 0029
+3220 <compat> 0028 4E00 0029
+3221 <compat> 0028 4E8C 0029
+3222 <compat> 0028 4E09 0029
+3223 <compat> 0028 56DB 0029
+3224 <compat> 0028 4E94 0029
+3225 <compat> 0028 516D 0029
+3226 <compat> 0028 4E03 0029
+3227 <compat> 0028 516B 0029
+3228 <compat> 0028 4E5D 0029
+3229 <compat> 0028 5341 0029
+322A <compat> 0028 6708 0029
+322B <compat> 0028 706B 0029
+322C <compat> 0028 6C34 0029
+322D <compat> 0028 6728 0029
+322E <compat> 0028 91D1 0029
+322F <compat> 0028 571F 0029
+3230 <compat> 0028 65E5 0029
+3231 <compat> 0028 682A 0029
+3232 <compat> 0028 6709 0029
+3233 <compat> 0028 793E 0029
+3234 <compat> 0028 540D 0029
+3235 <compat> 0028 7279 0029
+3236 <compat> 0028 8CA1 0029
+3237 <compat> 0028 795D 0029
+3238 <compat> 0028 52B4 0029
+3239 <compat> 0028 4EE3 0029
+323A <compat> 0028 547C 0029
+323B <compat> 0028 5B66 0029
+323C <compat> 0028 76E3 0029
+323D <compat> 0028 4F01 0029
+323E <compat> 0028 8CC7 0029
+323F <compat> 0028 5354 0029
+3240 <compat> 0028 796D 0029
+3241 <compat> 0028 4F11 0029
+3242 <compat> 0028 81EA 0029
+3243 <compat> 0028 81F3 0029
+3251 <circle> 0032 0031
+3252 <circle> 0032 0032
+3253 <circle> 0032 0033
+3254 <circle> 0032 0034
+3255 <circle> 0032 0035
+3256 <circle> 0032 0036
+3257 <circle> 0032 0037
+3258 <circle> 0032 0038
+3259 <circle> 0032 0039
+325A <circle> 0033 0030
+325B <circle> 0033 0031
+325C <circle> 0033 0032
+325D <circle> 0033 0033
+325E <circle> 0033 0034
+325F <circle> 0033 0035
+3260 <circle> 1100
+3261 <circle> 1102
+3262 <circle> 1103
+3263 <circle> 1105
+3264 <circle> 1106
+3265 <circle> 1107
+3266 <circle> 1109
+3267 <circle> 110B
+3268 <circle> 110C
+3269 <circle> 110E
+326A <circle> 110F
+326B <circle> 1110
+326C <circle> 1111
+326D <circle> 1112
+326E <circle> 1100 1161
+326F <circle> 1102 1161
+3270 <circle> 1103 1161
+3271 <circle> 1105 1161
+3272 <circle> 1106 1161
+3273 <circle> 1107 1161
+3274 <circle> 1109 1161
+3275 <circle> 110B 1161
+3276 <circle> 110C 1161
+3277 <circle> 110E 1161
+3278 <circle> 110F 1161
+3279 <circle> 1110 1161
+327A <circle> 1111 1161
+327B <circle> 1112 1161
+3280 <circle> 4E00
+3281 <circle> 4E8C
+3282 <circle> 4E09
+3283 <circle> 56DB
+3284 <circle> 4E94
+3285 <circle> 516D
+3286 <circle> 4E03
+3287 <circle> 516B
+3288 <circle> 4E5D
+3289 <circle> 5341
+328A <circle> 6708
+328B <circle> 706B
+328C <circle> 6C34
+328D <circle> 6728
+328E <circle> 91D1
+328F <circle> 571F
+3290 <circle> 65E5
+3291 <circle> 682A
+3292 <circle> 6709
+3293 <circle> 793E
+3294 <circle> 540D
+3295 <circle> 7279
+3296 <circle> 8CA1
+3297 <circle> 795D
+3298 <circle> 52B4
+3299 <circle> 79D8
+329A <circle> 7537
+329B <circle> 5973
+329C <circle> 9069
+329D <circle> 512A
+329E <circle> 5370
+329F <circle> 6CE8
+32A0 <circle> 9805
+32A1 <circle> 4F11
+32A2 <circle> 5199
+32A3 <circle> 6B63
+32A4 <circle> 4E0A
+32A5 <circle> 4E2D
+32A6 <circle> 4E0B
+32A7 <circle> 5DE6
+32A8 <circle> 53F3
+32A9 <circle> 533B
+32AA <circle> 5B97
+32AB <circle> 5B66
+32AC <circle> 76E3
+32AD <circle> 4F01
+32AE <circle> 8CC7
+32AF <circle> 5354
+32B0 <circle> 591C
+32B1 <circle> 0033 0036
+32B2 <circle> 0033 0037
+32B3 <circle> 0033 0038
+32B4 <circle> 0033 0039
+32B5 <circle> 0034 0030
+32B6 <circle> 0034 0031
+32B7 <circle> 0034 0032
+32B8 <circle> 0034 0033
+32B9 <circle> 0034 0034
+32BA <circle> 0034 0035
+32BB <circle> 0034 0036
+32BC <circle> 0034 0037
+32BD <circle> 0034 0038
+32BE <circle> 0034 0039
+32BF <circle> 0035 0030
+32C0 <compat> 0031 6708
+32C1 <compat> 0032 6708
+32C2 <compat> 0033 6708
+32C3 <compat> 0034 6708
+32C4 <compat> 0035 6708
+32C5 <compat> 0036 6708
+32C6 <compat> 0037 6708
+32C7 <compat> 0038 6708
+32C8 <compat> 0039 6708
+32C9 <compat> 0031 0030 6708
+32CA <compat> 0031 0031 6708
+32CB <compat> 0031 0032 6708
+32D0 <circle> 30A2
+32D1 <circle> 30A4
+32D2 <circle> 30A6
+32D3 <circle> 30A8
+32D4 <circle> 30AA
+32D5 <circle> 30AB
+32D6 <circle> 30AD
+32D7 <circle> 30AF
+32D8 <circle> 30B1
+32D9 <circle> 30B3
+32DA <circle> 30B5
+32DB <circle> 30B7
+32DC <circle> 30B9
+32DD <circle> 30BB
+32DE <circle> 30BD
+32DF <circle> 30BF
+32E0 <circle> 30C1
+32E1 <circle> 30C4
+32E2 <circle> 30C6
+32E3 <circle> 30C8
+32E4 <circle> 30CA
+32E5 <circle> 30CB
+32E6 <circle> 30CC
+32E7 <circle> 30CD
+32E8 <circle> 30CE
+32E9 <circle> 30CF
+32EA <circle> 30D2
+32EB <circle> 30D5
+32EC <circle> 30D8
+32ED <circle> 30DB
+32EE <circle> 30DE
+32EF <circle> 30DF
+32F0 <circle> 30E0
+32F1 <circle> 30E1
+32F2 <circle> 30E2
+32F3 <circle> 30E4
+32F4 <circle> 30E6
+32F5 <circle> 30E8
+32F6 <circle> 30E9
+32F7 <circle> 30EA
+32F8 <circle> 30EB
+32F9 <circle> 30EC
+32FA <circle> 30ED
+32FB <circle> 30EF
+32FC <circle> 30F0
+32FD <circle> 30F1
+32FE <circle> 30F2
+3300 <square> 30A2 30D1 30FC 30C8
+3301 <square> 30A2 30EB 30D5 30A1
+3302 <square> 30A2 30F3 30DA 30A2
+3303 <square> 30A2 30FC 30EB
+3304 <square> 30A4 30CB 30F3 30B0
+3305 <square> 30A4 30F3 30C1
+3306 <square> 30A6 30A9 30F3
+3307 <square> 30A8 30B9 30AF 30FC 30C9
+3308 <square> 30A8 30FC 30AB 30FC
+3309 <square> 30AA 30F3 30B9
+330A <square> 30AA 30FC 30E0
+330B <square> 30AB 30A4 30EA
+330C <square> 30AB 30E9 30C3 30C8
+330D <square> 30AB 30ED 30EA 30FC
+330E <square> 30AC 30ED 30F3
+330F <square> 30AC 30F3 30DE
+3310 <square> 30AE 30AC
+3311 <square> 30AE 30CB 30FC
+3312 <square> 30AD 30E5 30EA 30FC
+3313 <square> 30AE 30EB 30C0 30FC
+3314 <square> 30AD 30ED
+3315 <square> 30AD 30ED 30B0 30E9 30E0
+3316 <square> 30AD 30ED 30E1 30FC 30C8 30EB
+3317 <square> 30AD 30ED 30EF 30C3 30C8
+3318 <square> 30B0 30E9 30E0
+3319 <square> 30B0 30E9 30E0 30C8 30F3
+331A <square> 30AF 30EB 30BC 30A4 30ED
+331B <square> 30AF 30ED 30FC 30CD
+331C <square> 30B1 30FC 30B9
+331D <square> 30B3 30EB 30CA
+331E <square> 30B3 30FC 30DD
+331F <square> 30B5 30A4 30AF 30EB
+3320 <square> 30B5 30F3 30C1 30FC 30E0
+3321 <square> 30B7 30EA 30F3 30B0
+3322 <square> 30BB 30F3 30C1
+3323 <square> 30BB 30F3 30C8
+3324 <square> 30C0 30FC 30B9
+3325 <square> 30C7 30B7
+3326 <square> 30C9 30EB
+3327 <square> 30C8 30F3
+3328 <square> 30CA 30CE
+3329 <square> 30CE 30C3 30C8
+332A <square> 30CF 30A4 30C4
+332B <square> 30D1 30FC 30BB 30F3 30C8
+332C <square> 30D1 30FC 30C4
+332D <square> 30D0 30FC 30EC 30EB
+332E <square> 30D4 30A2 30B9 30C8 30EB
+332F <square> 30D4 30AF 30EB
+3330 <square> 30D4 30B3
+3331 <square> 30D3 30EB
+3332 <square> 30D5 30A1 30E9 30C3 30C9
+3333 <square> 30D5 30A3 30FC 30C8
+3334 <square> 30D6 30C3 30B7 30A7 30EB
+3335 <square> 30D5 30E9 30F3
+3336 <square> 30D8 30AF 30BF 30FC 30EB
+3337 <square> 30DA 30BD
+3338 <square> 30DA 30CB 30D2
+3339 <square> 30D8 30EB 30C4
+333A <square> 30DA 30F3 30B9
+333B <square> 30DA 30FC 30B8
+333C <square> 30D9 30FC 30BF
+333D <square> 30DD 30A4 30F3 30C8
+333E <square> 30DC 30EB 30C8
+333F <square> 30DB 30F3
+3340 <square> 30DD 30F3 30C9
+3341 <square> 30DB 30FC 30EB
+3342 <square> 30DB 30FC 30F3
+3343 <square> 30DE 30A4 30AF 30ED
+3344 <square> 30DE 30A4 30EB
+3345 <square> 30DE 30C3 30CF
+3346 <square> 30DE 30EB 30AF
+3347 <square> 30DE 30F3 30B7 30E7 30F3
+3348 <square> 30DF 30AF 30ED 30F3
+3349 <square> 30DF 30EA
+334A <square> 30DF 30EA 30D0 30FC 30EB
+334B <square> 30E1 30AC
+334C <square> 30E1 30AC 30C8 30F3
+334D <square> 30E1 30FC 30C8 30EB
+334E <square> 30E4 30FC 30C9
+334F <square> 30E4 30FC 30EB
+3350 <square> 30E6 30A2 30F3
+3351 <square> 30EA 30C3 30C8 30EB
+3352 <square> 30EA 30E9
+3353 <square> 30EB 30D4 30FC
+3354 <square> 30EB 30FC 30D6 30EB
+3355 <square> 30EC 30E0
+3356 <square> 30EC 30F3 30C8 30B2 30F3
+3357 <square> 30EF 30C3 30C8
+3358 <compat> 0030 70B9
+3359 <compat> 0031 70B9
+335A <compat> 0032 70B9
+335B <compat> 0033 70B9
+335C <compat> 0034 70B9
+335D <compat> 0035 70B9
+335E <compat> 0036 70B9
+335F <compat> 0037 70B9
+3360 <compat> 0038 70B9
+3361 <compat> 0039 70B9
+3362 <compat> 0031 0030 70B9
+3363 <compat> 0031 0031 70B9
+3364 <compat> 0031 0032 70B9
+3365 <compat> 0031 0033 70B9
+3366 <compat> 0031 0034 70B9
+3367 <compat> 0031 0035 70B9
+3368 <compat> 0031 0036 70B9
+3369 <compat> 0031 0037 70B9
+336A <compat> 0031 0038 70B9
+336B <compat> 0031 0039 70B9
+336C <compat> 0032 0030 70B9
+336D <compat> 0032 0031 70B9
+336E <compat> 0032 0032 70B9
+336F <compat> 0032 0033 70B9
+3370 <compat> 0032 0034 70B9
+3371 <square> 0068 0050 0061
+3372 <square> 0064 0061
+3373 <square> 0041 0055
+3374 <square> 0062 0061 0072
+3375 <square> 006F 0056
+3376 <square> 0070 0063
+337B <square> 5E73 6210
+337C <square> 662D 548C
+337D <square> 5927 6B63
+337E <square> 660E 6CBB
+337F <square> 682A 5F0F 4F1A 793E
+3380 <square> 0070 0041
+3381 <square> 006E 0041
+3382 <square> 03BC 0041
+3383 <square> 006D 0041
+3384 <square> 006B 0041
+3385 <square> 004B 0042
+3386 <square> 004D 0042
+3387 <square> 0047 0042
+3388 <square> 0063 0061 006C
+3389 <square> 006B 0063 0061 006C
+338A <square> 0070 0046
+338B <square> 006E 0046
+338C <square> 03BC 0046
+338D <square> 03BC 0067
+338E <square> 006D 0067
+338F <square> 006B 0067
+3390 <square> 0048 007A
+3391 <square> 006B 0048 007A
+3392 <square> 004D 0048 007A
+3393 <square> 0047 0048 007A
+3394 <square> 0054 0048 007A
+3395 <square> 03BC 2113
+3396 <square> 006D 2113
+3397 <square> 0064 2113
+3398 <square> 006B 2113
+3399 <square> 0066 006D
+339A <square> 006E 006D
+339B <square> 03BC 006D
+339C <square> 006D 006D
+339D <square> 0063 006D
+339E <square> 006B 006D
+339F <square> 006D 006D 00B2
+33A0 <square> 0063 006D 00B2
+33A1 <square> 006D 00B2
+33A2 <square> 006B 006D 00B2
+33A3 <square> 006D 006D 00B3
+33A4 <square> 0063 006D 00B3
+33A5 <square> 006D 00B3
+33A6 <square> 006B 006D 00B3
+33A7 <square> 006D 2215 0073
+33A8 <square> 006D 2215 0073 00B2
+33A9 <square> 0050 0061
+33AA <square> 006B 0050 0061
+33AB <square> 004D 0050 0061
+33AC <square> 0047 0050 0061
+33AD <square> 0072 0061 0064
+33AE <square> 0072 0061 0064 2215 0073
+33AF <square> 0072 0061 0064 2215 0073 00B2
+33B0 <square> 0070 0073
+33B1 <square> 006E 0073
+33B2 <square> 03BC 0073
+33B3 <square> 006D 0073
+33B4 <square> 0070 0056
+33B5 <square> 006E 0056
+33B6 <square> 03BC 0056
+33B7 <square> 006D 0056
+33B8 <square> 006B 0056
+33B9 <square> 004D 0056
+33BA <square> 0070 0057
+33BB <square> 006E 0057
+33BC <square> 03BC 0057
+33BD <square> 006D 0057
+33BE <square> 006B 0057
+33BF <square> 004D 0057
+33C0 <square> 006B 03A9
+33C1 <square> 004D 03A9
+33C2 <square> 0061 002E 006D 002E
+33C3 <square> 0042 0071
+33C4 <square> 0063 0063
+33C5 <square> 0063 0064
+33C6 <square> 0043 2215 006B 0067
+33C7 <square> 0043 006F 002E
+33C8 <square> 0064 0042
+33C9 <square> 0047 0079
+33CA <square> 0068 0061
+33CB <square> 0048 0050
+33CC <square> 0069 006E
+33CD <square> 004B 004B
+33CE <square> 004B 004D
+33CF <square> 006B 0074
+33D0 <square> 006C 006D
+33D1 <square> 006C 006E
+33D2 <square> 006C 006F 0067
+33D3 <square> 006C 0078
+33D4 <square> 006D 0062
+33D5 <square> 006D 0069 006C
+33D6 <square> 006D 006F 006C
+33D7 <square> 0050 0048
+33D8 <square> 0070 002E 006D 002E
+33D9 <square> 0050 0050 004D
+33DA <square> 0050 0052
+33DB <square> 0073 0072
+33DC <square> 0053 0076
+33DD <square> 0057 0062
+33E0 <compat> 0031 65E5
+33E1 <compat> 0032 65E5
+33E2 <compat> 0033 65E5
+33E3 <compat> 0034 65E5
+33E4 <compat> 0035 65E5
+33E5 <compat> 0036 65E5
+33E6 <compat> 0037 65E5
+33E7 <compat> 0038 65E5
+33E8 <compat> 0039 65E5
+33E9 <compat> 0031 0030 65E5
+33EA <compat> 0031 0031 65E5
+33EB <compat> 0031 0032 65E5
+33EC <compat> 0031 0033 65E5
+33ED <compat> 0031 0034 65E5
+33EE <compat> 0031 0035 65E5
+33EF <compat> 0031 0036 65E5
+33F0 <compat> 0031 0037 65E5
+33F1 <compat> 0031 0038 65E5
+33F2 <compat> 0031 0039 65E5
+33F3 <compat> 0032 0030 65E5
+33F4 <compat> 0032 0031 65E5
+33F5 <compat> 0032 0032 65E5
+33F6 <compat> 0032 0033 65E5
+33F7 <compat> 0032 0034 65E5
+33F8 <compat> 0032 0035 65E5
+33F9 <compat> 0032 0036 65E5
+33FA <compat> 0032 0037 65E5
+33FB <compat> 0032 0038 65E5
+33FC <compat> 0032 0039 65E5
+33FD <compat> 0033 0030 65E5
+33FE <compat> 0033 0031 65E5
+F900 8C48
+F901 66F4
+F902 8ECA
+F903 8CC8
+F904 6ED1
+F905 4E32
+F906 53E5
+F907 F908 9F9C
+F909 5951
+F90A 91D1
+F90B 5587
+F90C 5948
+F90D 61F6
+F90E 7669
+F90F 7F85
+F910 863F
+F911 87BA
+F912 88F8
+F913 908F
+F914 6A02
+F915 6D1B
+F916 70D9
+F917 73DE
+F918 843D
+F919 916A
+F91A 99F1
+F91B 4E82
+F91C 5375
+F91D 6B04
+F91E 721B
+F91F 862D
+F920 9E1E
+F921 5D50
+F922 6FEB
+F923 85CD
+F924 8964
+F925 62C9
+F926 81D8
+F927 881F
+F928 5ECA
+F929 6717
+F92A 6D6A
+F92B 72FC
+F92C 90CE
+F92D 4F86
+F92E 51B7
+F92F 52DE
+F930 64C4
+F931 6AD3
+F932 7210
+F933 76E7
+F934 8001
+F935 8606
+F936 865C
+F937 8DEF
+F938 9732
+F939 9B6F
+F93A 9DFA
+F93B 788C
+F93C 797F
+F93D 7DA0
+F93E 83C9
+F93F 9304
+F940 9E7F
+F941 8AD6
+F942 58DF
+F943 5F04
+F944 7C60
+F945 807E
+F946 7262
+F947 78CA
+F948 8CC2
+F949 96F7
+F94A 58D8
+F94B 5C62
+F94C 6A13
+F94D 6DDA
+F94E 6F0F
+F94F 7D2F
+F950 7E37
+F951 964B
+F952 52D2
+F953 808B
+F954 51DC
+F955 51CC
+F956 7A1C
+F957 7DBE
+F958 83F1
+F959 9675
+F95A 8B80
+F95B 62CF
+F95C 6A02
+F95D 8AFE
+F95E 4E39
+F95F 5BE7
+F960 6012
+F961 7387
+F962 7570
+F963 5317
+F964 78FB
+F965 4FBF
+F966 5FA9
+F967 4E0D
+F968 6CCC
+F969 6578
+F96A 7D22
+F96B 53C3
+F96C 585E
+F96D 7701
+F96E 8449
+F96F 8AAA
+F970 6BBA
+F971 8FB0
+F972 6C88
+F973 62FE
+F974 82E5
+F975 63A0
+F976 7565
+F977 4EAE
+F978 5169
+F979 51C9
+F97A 6881
+F97B 7CE7
+F97C 826F
+F97D 8AD2
+F97E 91CF
+F97F 52F5
+F980 5442
+F981 5973
+F982 5EEC
+F983 65C5
+F984 6FFE
+F985 792A
+F986 95AD
+F987 9A6A
+F988 9E97
+F989 9ECE
+F98A 529B
+F98B 66C6
+F98C 6B77
+F98D 8F62
+F98E 5E74
+F98F 6190
+F990 6200
+F991 649A
+F992 6F23
+F993 7149
+F994 7489
+F995 79CA
+F996 7DF4
+F997 806F
+F998 8F26
+F999 84EE
+F99A 9023
+F99B 934A
+F99C 5217
+F99D 52A3
+F99E 54BD
+F99F 70C8
+F9A0 88C2
+F9A1 8AAA
+F9A2 5EC9
+F9A3 5FF5
+F9A4 637B
+F9A5 6BAE
+F9A6 7C3E
+F9A7 7375
+F9A8 4EE4
+F9A9 56F9
+F9AA 5BE7
+F9AB 5DBA
+F9AC 601C
+F9AD 73B2
+F9AE 7469
+F9AF 7F9A
+F9B0 8046
+F9B1 9234
+F9B2 96F6
+F9B3 9748
+F9B4 9818
+F9B5 4F8B
+F9B6 79AE
+F9B7 91B4
+F9B8 96B8
+F9B9 60E1
+F9BA 4E86
+F9BB 50DA
+F9BC 5BEE
+F9BD 5C3F
+F9BE 6599
+F9BF 6A02
+F9C0 71CE
+F9C1 7642
+F9C2 84FC
+F9C3 907C
+F9C4 9F8D
+F9C5 6688
+F9C6 962E
+F9C7 5289
+F9C8 677B
+F9C9 67F3
+F9CA 6D41
+F9CB 6E9C
+F9CC 7409
+F9CD 7559
+F9CE 786B
+F9CF 7D10
+F9D0 985E
+F9D1 516D
+F9D2 622E
+F9D3 9678
+F9D4 502B
+F9D5 5D19
+F9D6 6DEA
+F9D7 8F2A
+F9D8 5F8B
+F9D9 6144
+F9DA 6817
+F9DB 7387
+F9DC 9686
+F9DD 5229
+F9DE 540F
+F9DF 5C65
+F9E0 6613
+F9E1 674E
+F9E2 68A8
+F9E3 6CE5
+F9E4 7406
+F9E5 75E2
+F9E6 7F79
+F9E7 88CF
+F9E8 88E1
+F9E9 91CC
+F9EA 96E2
+F9EB 533F
+F9EC 6EBA
+F9ED 541D
+F9EE 71D0
+F9EF 7498
+F9F0 85FA
+F9F1 96A3
+F9F2 9C57
+F9F3 9E9F
+F9F4 6797
+F9F5 6DCB
+F9F6 81E8
+F9F7 7ACB
+F9F8 7B20
+F9F9 7C92
+F9FA 72C0
+F9FB 7099
+F9FC 8B58
+F9FD 4EC0
+F9FE 8336
+F9FF 523A
+FA00 5207
+FA01 5EA6
+FA02 62D3
+FA03 7CD6
+FA04 5B85
+FA05 6D1E
+FA06 66B4
+FA07 8F3B
+FA08 884C
+FA09 964D
+FA0A 898B
+FA0B 5ED3
+FA0C 5140
+FA0D 55C0
+FA10 585A
+FA12 6674
+FA15 51DE
+FA16 732A
+FA17 76CA
+FA18 793C
+FA19 795E
+FA1A 7965
+FA1B 798F
+FA1C 9756
+FA1D 7CBE
+FA1E 7FBD
+FA20 8612
+FA22 8AF8
+FA25 9038
+FA26 90FD
+FA2A 98EF
+FA2B 98FC
+FA2C 9928
+FA2D 9DB4
+FA30 4FAE
+FA31 50E7
+FA32 514D
+FA33 52C9
+FA34 52E4
+FA35 5351
+FA36 559D
+FA37 5606
+FA38 5668
+FA39 5840
+FA3A 58A8
+FA3B 5C64
+FA3C 5C6E
+FA3D 6094
+FA3E 6168
+FA3F 618E
+FA40 61F2
+FA41 654F
+FA42 65E2
+FA43 6691
+FA44 6885
+FA45 6D77
+FA46 6E1A
+FA47 6F22
+FA48 716E
+FA49 722B
+FA4A 7422
+FA4B 7891
+FA4C 793E
+FA4D 7949
+FA4E 7948
+FA4F 7950
+FA50 7956
+FA51 795D
+FA52 798D
+FA53 798E
+FA54 7A40
+FA55 7A81
+FA56 7BC0
+FA57 7DF4
+FA58 7E09
+FA59 7E41
+FA5A 7F72
+FA5B 8005
+FA5C 81ED
+FA5D FA5E 8279
+FA5F 8457
+FA60 8910
+FA61 8996
+FA62 8B01
+FA63 8B39
+FA64 8CD3
+FA65 8D08
+FA66 8FB6
+FA67 9038
+FA68 96E3
+FA69 97FF
+FA6A 983B
+FB00 <compat> 0066 0066
+FB01 <compat> 0066 0069
+FB02 <compat> 0066 006C
+FB03 <compat> 0066 0066 0069
+FB04 <compat> 0066 0066 006C
+FB05 <compat> 017F 0074
+FB06 <compat> 0073 0074
+FB13 <compat> 0574 0576
+FB14 <compat> 0574 0565
+FB15 <compat> 0574 056B
+FB16 <compat> 057E 0576
+FB17 <compat> 0574 056D
+FB1D 05D9 05B4
+FB1F 05F2 05B7
+FB20 <font> 05E2
+FB21 <font> 05D0
+FB22 <font> 05D3
+FB23 <font> 05D4
+FB24 <font> 05DB
+FB25 <font> 05DC
+FB26 <font> 05DD
+FB27 <font> 05E8
+FB28 <font> 05EA
+FB29 <font> 002B
+FB2A 05E9 05C1
+FB2B 05E9 05C2
+FB2C FB49 05C1
+FB2D FB49 05C2
+FB2E 05D0 05B7
+FB2F 05D0 05B8
+FB30 05D0 05BC
+FB31 05D1 05BC
+FB32 05D2 05BC
+FB33 05D3 05BC
+FB34 05D4 05BC
+FB35 05D5 05BC
+FB36 05D6 05BC
+FB38 05D8 05BC
+FB39 05D9 05BC
+FB3A 05DA 05BC
+FB3B 05DB 05BC
+FB3C 05DC 05BC
+FB3E 05DE 05BC
+FB40 05E0 05BC
+FB41 05E1 05BC
+FB43 05E3 05BC
+FB44 05E4 05BC
+FB46 05E6 05BC
+FB47 05E7 05BC
+FB48 05E8 05BC
+FB49 05E9 05BC
+FB4A 05EA 05BC
+FB4B 05D5 05B9
+FB4C 05D1 05BF
+FB4D 05DB 05BF
+FB4E 05E4 05BF
+FB4F <compat> 05D0 05DC
+FB50 <isolated> 0671
+FB51 <final> 0671
+FB52 <isolated> 067B
+FB53 <final> 067B
+FB54 <initial> 067B
+FB55 <medial> 067B
+FB56 <isolated> 067E
+FB57 <final> 067E
+FB58 <initial> 067E
+FB59 <medial> 067E
+FB5A <isolated> 0680
+FB5B <final> 0680
+FB5C <initial> 0680
+FB5D <medial> 0680
+FB5E <isolated> 067A
+FB5F <final> 067A
+FB60 <initial> 067A
+FB61 <medial> 067A
+FB62 <isolated> 067F
+FB63 <final> 067F
+FB64 <initial> 067F
+FB65 <medial> 067F
+FB66 <isolated> 0679
+FB67 <final> 0679
+FB68 <initial> 0679
+FB69 <medial> 0679
+FB6A <isolated> 06A4
+FB6B <final> 06A4
+FB6C <initial> 06A4
+FB6D <medial> 06A4
+FB6E <isolated> 06A6
+FB6F <final> 06A6
+FB70 <initial> 06A6
+FB71 <medial> 06A6
+FB72 <isolated> 0684
+FB73 <final> 0684
+FB74 <initial> 0684
+FB75 <medial> 0684
+FB76 <isolated> 0683
+FB77 <final> 0683
+FB78 <initial> 0683
+FB79 <medial> 0683
+FB7A <isolated> 0686
+FB7B <final> 0686
+FB7C <initial> 0686
+FB7D <medial> 0686
+FB7E <isolated> 0687
+FB7F <final> 0687
+FB80 <initial> 0687
+FB81 <medial> 0687
+FB82 <isolated> 068D
+FB83 <final> 068D
+FB84 <isolated> 068C
+FB85 <final> 068C
+FB86 <isolated> 068E
+FB87 <final> 068E
+FB88 <isolated> 0688
+FB89 <final> 0688
+FB8A <isolated> 0698
+FB8B <final> 0698
+FB8C <isolated> 0691
+FB8D <final> 0691
+FB8E <isolated> 06A9
+FB8F <final> 06A9
+FB90 <initial> 06A9
+FB91 <medial> 06A9
+FB92 <isolated> 06AF
+FB93 <final> 06AF
+FB94 <initial> 06AF
+FB95 <medial> 06AF
+FB96 <isolated> 06B3
+FB97 <final> 06B3
+FB98 <initial> 06B3
+FB99 <medial> 06B3
+FB9A <isolated> 06B1
+FB9B <final> 06B1
+FB9C <initial> 06B1
+FB9D <medial> 06B1
+FB9E <isolated> 06BA
+FB9F <final> 06BA
+FBA0 <isolated> 06BB
+FBA1 <final> 06BB
+FBA2 <initial> 06BB
+FBA3 <medial> 06BB
+FBA4 <isolated> 06C0
+FBA5 <final> 06C0
+FBA6 <isolated> 06C1
+FBA7 <final> 06C1
+FBA8 <initial> 06C1
+FBA9 <medial> 06C1
+FBAA <isolated> 06BE
+FBAB <final> 06BE
+FBAC <initial> 06BE
+FBAD <medial> 06BE
+FBAE <isolated> 06D2
+FBAF <final> 06D2
+FBB0 <isolated> 06D3
+FBB1 <final> 06D3
+FBD3 <isolated> 06AD
+FBD4 <final> 06AD
+FBD5 <initial> 06AD
+FBD6 <medial> 06AD
+FBD7 <isolated> 06C7
+FBD8 <final> 06C7
+FBD9 <isolated> 06C6
+FBDA <final> 06C6
+FBDB <isolated> 06C8
+FBDC <final> 06C8
+FBDD <isolated> 0677
+FBDE <isolated> 06CB
+FBDF <final> 06CB
+FBE0 <isolated> 06C5
+FBE1 <final> 06C5
+FBE2 <isolated> 06C9
+FBE3 <final> 06C9
+FBE4 <isolated> 06D0
+FBE5 <final> 06D0
+FBE6 <initial> 06D0
+FBE7 <medial> 06D0
+FBE8 <initial> 0649
+FBE9 <medial> 0649
+FBEA <isolated> 0626 0627
+FBEB <final> 0626 0627
+FBEC <isolated> 0626 06D5
+FBED <final> 0626 06D5
+FBEE <isolated> 0626 0648
+FBEF <final> 0626 0648
+FBF0 <isolated> 0626 06C7
+FBF1 <final> 0626 06C7
+FBF2 <isolated> 0626 06C6
+FBF3 <final> 0626 06C6
+FBF4 <isolated> 0626 06C8
+FBF5 <final> 0626 06C8
+FBF6 <isolated> 0626 06D0
+FBF7 <final> 0626 06D0
+FBF8 <initial> 0626 06D0
+FBF9 <isolated> 0626 0649
+FBFA <final> 0626 0649
+FBFB <initial> 0626 0649
+FBFC <isolated> 06CC
+FBFD <final> 06CC
+FBFE <initial> 06CC
+FBFF <medial> 06CC
+FC00 <isolated> 0626 062C
+FC01 <isolated> 0626 062D
+FC02 <isolated> 0626 0645
+FC03 <isolated> 0626 0649
+FC04 <isolated> 0626 064A
+FC05 <isolated> 0628 062C
+FC06 <isolated> 0628 062D
+FC07 <isolated> 0628 062E
+FC08 <isolated> 0628 0645
+FC09 <isolated> 0628 0649
+FC0A <isolated> 0628 064A
+FC0B <isolated> 062A 062C
+FC0C <isolated> 062A 062D
+FC0D <isolated> 062A 062E
+FC0E <isolated> 062A 0645
+FC0F <isolated> 062A 0649
+FC10 <isolated> 062A 064A
+FC11 <isolated> 062B 062C
+FC12 <isolated> 062B 0645
+FC13 <isolated> 062B 0649
+FC14 <isolated> 062B 064A
+FC15 <isolated> 062C 062D
+FC16 <isolated> 062C 0645
+FC17 <isolated> 062D 062C
+FC18 <isolated> 062D 0645
+FC19 <isolated> 062E 062C
+FC1A <isolated> 062E 062D
+FC1B <isolated> 062E 0645
+FC1C <isolated> 0633 062C
+FC1D <isolated> 0633 062D
+FC1E <isolated> 0633 062E
+FC1F <isolated> 0633 0645
+FC20 <isolated> 0635 062D
+FC21 <isolated> 0635 0645
+FC22 <isolated> 0636 062C
+FC23 <isolated> 0636 062D
+FC24 <isolated> 0636 062E
+FC25 <isolated> 0636 0645
+FC26 <isolated> 0637 062D
+FC27 <isolated> 0637 0645
+FC28 <isolated> 0638 0645
+FC29 <isolated> 0639 062C
+FC2A <isolated> 0639 0645
+FC2B <isolated> 063A 062C
+FC2C <isolated> 063A 0645
+FC2D <isolated> 0641 062C
+FC2E <isolated> 0641 062D
+FC2F <isolated> 0641 062E
+FC30 <isolated> 0641 0645
+FC31 <isolated> 0641 0649
+FC32 <isolated> 0641 064A
+FC33 <isolated> 0642 062D
+FC34 <isolated> 0642 0645
+FC35 <isolated> 0642 0649
+FC36 <isolated> 0642 064A
+FC37 <isolated> 0643 0627
+FC38 <isolated> 0643 062C
+FC39 <isolated> 0643 062D
+FC3A <isolated> 0643 062E
+FC3B <isolated> 0643 0644
+FC3C <isolated> 0643 0645
+FC3D <isolated> 0643 0649
+FC3E <isolated> 0643 064A
+FC3F <isolated> 0644 062C
+FC40 <isolated> 0644 062D
+FC41 <isolated> 0644 062E
+FC42 <isolated> 0644 0645
+FC43 <isolated> 0644 0649
+FC44 <isolated> 0644 064A
+FC45 <isolated> 0645 062C
+FC46 <isolated> 0645 062D
+FC47 <isolated> 0645 062E
+FC48 <isolated> 0645 0645
+FC49 <isolated> 0645 0649
+FC4A <isolated> 0645 064A
+FC4B <isolated> 0646 062C
+FC4C <isolated> 0646 062D
+FC4D <isolated> 0646 062E
+FC4E <isolated> 0646 0645
+FC4F <isolated> 0646 0649
+FC50 <isolated> 0646 064A
+FC51 <isolated> 0647 062C
+FC52 <isolated> 0647 0645
+FC53 <isolated> 0647 0649
+FC54 <isolated> 0647 064A
+FC55 <isolated> 064A 062C
+FC56 <isolated> 064A 062D
+FC57 <isolated> 064A 062E
+FC58 <isolated> 064A 0645
+FC59 <isolated> 064A 0649
+FC5A <isolated> 064A 064A
+FC5B <isolated> 0630 0670
+FC5C <isolated> 0631 0670
+FC5D <isolated> 0649 0670
+FC5E <isolated> 0020 064C 0651
+FC5F <isolated> 0020 064D 0651
+FC60 <isolated> 0020 064E 0651
+FC61 <isolated> 0020 064F 0651
+FC62 <isolated> 0020 0650 0651
+FC63 <isolated> 0020 0651 0670
+FC64 <final> 0626 0631
+FC65 <final> 0626 0632
+FC66 <final> 0626 0645
+FC67 <final> 0626 0646
+FC68 <final> 0626 0649
+FC69 <final> 0626 064A
+FC6A <final> 0628 0631
+FC6B <final> 0628 0632
+FC6C <final> 0628 0645
+FC6D <final> 0628 0646
+FC6E <final> 0628 0649
+FC6F <final> 0628 064A
+FC70 <final> 062A 0631
+FC71 <final> 062A 0632
+FC72 <final> 062A 0645
+FC73 <final> 062A 0646
+FC74 <final> 062A 0649
+FC75 <final> 062A 064A
+FC76 <final> 062B 0631
+FC77 <final> 062B 0632
+FC78 <final> 062B 0645
+FC79 <final> 062B 0646
+FC7A <final> 062B 0649
+FC7B <final> 062B 064A
+FC7C <final> 0641 0649
+FC7D <final> 0641 064A
+FC7E <final> 0642 0649
+FC7F <final> 0642 064A
+FC80 <final> 0643 0627
+FC81 <final> 0643 0644
+FC82 <final> 0643 0645
+FC83 <final> 0643 0649
+FC84 <final> 0643 064A
+FC85 <final> 0644 0645
+FC86 <final> 0644 0649
+FC87 <final> 0644 064A
+FC88 <final> 0645 0627
+FC89 <final> 0645 0645
+FC8A <final> 0646 0631
+FC8B <final> 0646 0632
+FC8C <final> 0646 0645
+FC8D <final> 0646 0646
+FC8E <final> 0646 0649
+FC8F <final> 0646 064A
+FC90 <final> 0649 0670
+FC91 <final> 064A 0631
+FC92 <final> 064A 0632
+FC93 <final> 064A 0645
+FC94 <final> 064A 0646
+FC95 <final> 064A 0649
+FC96 <final> 064A 064A
+FC97 <initial> 0626 062C
+FC98 <initial> 0626 062D
+FC99 <initial> 0626 062E
+FC9A <initial> 0626 0645
+FC9B <initial> 0626 0647
+FC9C <initial> 0628 062C
+FC9D <initial> 0628 062D
+FC9E <initial> 0628 062E
+FC9F <initial> 0628 0645
+FCA0 <initial> 0628 0647
+FCA1 <initial> 062A 062C
+FCA2 <initial> 062A 062D
+FCA3 <initial> 062A 062E
+FCA4 <initial> 062A 0645
+FCA5 <initial> 062A 0647
+FCA6 <initial> 062B 0645
+FCA7 <initial> 062C 062D
+FCA8 <initial> 062C 0645
+FCA9 <initial> 062D 062C
+FCAA <initial> 062D 0645
+FCAB <initial> 062E 062C
+FCAC <initial> 062E 0645
+FCAD <initial> 0633 062C
+FCAE <initial> 0633 062D
+FCAF <initial> 0633 062E
+FCB0 <initial> 0633 0645
+FCB1 <initial> 0635 062D
+FCB2 <initial> 0635 062E
+FCB3 <initial> 0635 0645
+FCB4 <initial> 0636 062C
+FCB5 <initial> 0636 062D
+FCB6 <initial> 0636 062E
+FCB7 <initial> 0636 0645
+FCB8 <initial> 0637 062D
+FCB9 <initial> 0638 0645
+FCBA <initial> 0639 062C
+FCBB <initial> 0639 0645
+FCBC <initial> 063A 062C
+FCBD <initial> 063A 0645
+FCBE <initial> 0641 062C
+FCBF <initial> 0641 062D
+FCC0 <initial> 0641 062E
+FCC1 <initial> 0641 0645
+FCC2 <initial> 0642 062D
+FCC3 <initial> 0642 0645
+FCC4 <initial> 0643 062C
+FCC5 <initial> 0643 062D
+FCC6 <initial> 0643 062E
+FCC7 <initial> 0643 0644
+FCC8 <initial> 0643 0645
+FCC9 <initial> 0644 062C
+FCCA <initial> 0644 062D
+FCCB <initial> 0644 062E
+FCCC <initial> 0644 0645
+FCCD <initial> 0644 0647
+FCCE <initial> 0645 062C
+FCCF <initial> 0645 062D
+FCD0 <initial> 0645 062E
+FCD1 <initial> 0645 0645
+FCD2 <initial> 0646 062C
+FCD3 <initial> 0646 062D
+FCD4 <initial> 0646 062E
+FCD5 <initial> 0646 0645
+FCD6 <initial> 0646 0647
+FCD7 <initial> 0647 062C
+FCD8 <initial> 0647 0645
+FCD9 <initial> 0647 0670
+FCDA <initial> 064A 062C
+FCDB <initial> 064A 062D
+FCDC <initial> 064A 062E
+FCDD <initial> 064A 0645
+FCDE <initial> 064A 0647
+FCDF <medial> 0626 0645
+FCE0 <medial> 0626 0647
+FCE1 <medial> 0628 0645
+FCE2 <medial> 0628 0647
+FCE3 <medial> 062A 0645
+FCE4 <medial> 062A 0647
+FCE5 <medial> 062B 0645
+FCE6 <medial> 062B 0647
+FCE7 <medial> 0633 0645
+FCE8 <medial> 0633 0647
+FCE9 <medial> 0634 0645
+FCEA <medial> 0634 0647
+FCEB <medial> 0643 0644
+FCEC <medial> 0643 0645
+FCED <medial> 0644 0645
+FCEE <medial> 0646 0645
+FCEF <medial> 0646 0647
+FCF0 <medial> 064A 0645
+FCF1 <medial> 064A 0647
+FCF2 <medial> 0640 064E 0651
+FCF3 <medial> 0640 064F 0651
+FCF4 <medial> 0640 0650 0651
+FCF5 <isolated> 0637 0649
+FCF6 <isolated> 0637 064A
+FCF7 <isolated> 0639 0649
+FCF8 <isolated> 0639 064A
+FCF9 <isolated> 063A 0649
+FCFA <isolated> 063A 064A
+FCFB <isolated> 0633 0649
+FCFC <isolated> 0633 064A
+FCFD <isolated> 0634 0649
+FCFE <isolated> 0634 064A
+FCFF <isolated> 062D 0649
+FD00 <isolated> 062D 064A
+FD01 <isolated> 062C 0649
+FD02 <isolated> 062C 064A
+FD03 <isolated> 062E 0649
+FD04 <isolated> 062E 064A
+FD05 <isolated> 0635 0649
+FD06 <isolated> 0635 064A
+FD07 <isolated> 0636 0649
+FD08 <isolated> 0636 064A
+FD09 <isolated> 0634 062C
+FD0A <isolated> 0634 062D
+FD0B <isolated> 0634 062E
+FD0C <isolated> 0634 0645
+FD0D <isolated> 0634 0631
+FD0E <isolated> 0633 0631
+FD0F <isolated> 0635 0631
+FD10 <isolated> 0636 0631
+FD11 <final> 0637 0649
+FD12 <final> 0637 064A
+FD13 <final> 0639 0649
+FD14 <final> 0639 064A
+FD15 <final> 063A 0649
+FD16 <final> 063A 064A
+FD17 <final> 0633 0649
+FD18 <final> 0633 064A
+FD19 <final> 0634 0649
+FD1A <final> 0634 064A
+FD1B <final> 062D 0649
+FD1C <final> 062D 064A
+FD1D <final> 062C 0649
+FD1E <final> 062C 064A
+FD1F <final> 062E 0649
+FD20 <final> 062E 064A
+FD21 <final> 0635 0649
+FD22 <final> 0635 064A
+FD23 <final> 0636 0649
+FD24 <final> 0636 064A
+FD25 <final> 0634 062C
+FD26 <final> 0634 062D
+FD27 <final> 0634 062E
+FD28 <final> 0634 0645
+FD29 <final> 0634 0631
+FD2A <final> 0633 0631
+FD2B <final> 0635 0631
+FD2C <final> 0636 0631
+FD2D <initial> 0634 062C
+FD2E <initial> 0634 062D
+FD2F <initial> 0634 062E
+FD30 <initial> 0634 0645
+FD31 <initial> 0633 0647
+FD32 <initial> 0634 0647
+FD33 <initial> 0637 0645
+FD34 <medial> 0633 062C
+FD35 <medial> 0633 062D
+FD36 <medial> 0633 062E
+FD37 <medial> 0634 062C
+FD38 <medial> 0634 062D
+FD39 <medial> 0634 062E
+FD3A <medial> 0637 0645
+FD3B <medial> 0638 0645
+FD3C <final> 0627 064B
+FD3D <isolated> 0627 064B
+FD50 <initial> 062A 062C 0645
+FD51 <final> 062A 062D 062C
+FD52 <initial> 062A 062D 062C
+FD53 <initial> 062A 062D 0645
+FD54 <initial> 062A 062E 0645
+FD55 <initial> 062A 0645 062C
+FD56 <initial> 062A 0645 062D
+FD57 <initial> 062A 0645 062E
+FD58 <final> 062C 0645 062D
+FD59 <initial> 062C 0645 062D
+FD5A <final> 062D 0645 064A
+FD5B <final> 062D 0645 0649
+FD5C <initial> 0633 062D 062C
+FD5D <initial> 0633 062C 062D
+FD5E <final> 0633 062C 0649
+FD5F <final> 0633 0645 062D
+FD60 <initial> 0633 0645 062D
+FD61 <initial> 0633 0645 062C
+FD62 <final> 0633 0645 0645
+FD63 <initial> 0633 0645 0645
+FD64 <final> 0635 062D 062D
+FD65 <initial> 0635 062D 062D
+FD66 <final> 0635 0645 0645
+FD67 <final> 0634 062D 0645
+FD68 <initial> 0634 062D 0645
+FD69 <final> 0634 062C 064A
+FD6A <final> 0634 0645 062E
+FD6B <initial> 0634 0645 062E
+FD6C <final> 0634 0645 0645
+FD6D <initial> 0634 0645 0645
+FD6E <final> 0636 062D 0649
+FD6F <final> 0636 062E 0645
+FD70 <initial> 0636 062E 0645
+FD71 <final> 0637 0645 062D
+FD72 <initial> 0637 0645 062D
+FD73 <initial> 0637 0645 0645
+FD74 <final> 0637 0645 064A
+FD75 <final> 0639 062C 0645
+FD76 <final> 0639 0645 0645
+FD77 <initial> 0639 0645 0645
+FD78 <final> 0639 0645 0649
+FD79 <final> 063A 0645 0645
+FD7A <final> 063A 0645 064A
+FD7B <final> 063A 0645 0649
+FD7C <final> 0641 062E 0645
+FD7D <initial> 0641 062E 0645
+FD7E <final> 0642 0645 062D
+FD7F <final> 0642 0645 0645
+FD80 <final> 0644 062D 0645
+FD81 <final> 0644 062D 064A
+FD82 <final> 0644 062D 0649
+FD83 <initial> 0644 062C 062C
+FD84 <final> 0644 062C 062C
+FD85 <final> 0644 062E 0645
+FD86 <initial> 0644 062E 0645
+FD87 <final> 0644 0645 062D
+FD88 <initial> 0644 0645 062D
+FD89 <initial> 0645 062D 062C
+FD8A <initial> 0645 062D 0645
+FD8B <final> 0645 062D 064A
+FD8C <initial> 0645 062C 062D
+FD8D <initial> 0645 062C 0645
+FD8E <initial> 0645 062E 062C
+FD8F <initial> 0645 062E 0645
+FD92 <initial> 0645 062C 062E
+FD93 <initial> 0647 0645 062C
+FD94 <initial> 0647 0645 0645
+FD95 <initial> 0646 062D 0645
+FD96 <final> 0646 062D 0649
+FD97 <final> 0646 062C 0645
+FD98 <initial> 0646 062C 0645
+FD99 <final> 0646 062C 0649
+FD9A <final> 0646 0645 064A
+FD9B <final> 0646 0645 0649
+FD9C <final> 064A 0645 0645
+FD9D <initial> 064A 0645 0645
+FD9E <final> 0628 062E 064A
+FD9F <final> 062A 062C 064A
+FDA0 <final> 062A 062C 0649
+FDA1 <final> 062A 062E 064A
+FDA2 <final> 062A 062E 0649
+FDA3 <final> 062A 0645 064A
+FDA4 <final> 062A 0645 0649
+FDA5 <final> 062C 0645 064A
+FDA6 <final> 062C 062D 0649
+FDA7 <final> 062C 0645 0649
+FDA8 <final> 0633 062E 0649
+FDA9 <final> 0635 062D 064A
+FDAA <final> 0634 062D 064A
+FDAB <final> 0636 062D 064A
+FDAC <final> 0644 062C 064A
+FDAD <final> 0644 0645 064A
+FDAE <final> 064A 062D 064A
+FDAF <final> 064A 062C 064A
+FDB0 <final> 064A 0645 064A
+FDB1 <final> 0645 0645 064A
+FDB2 <final> 0642 0645 064A
+FDB3 <final> 0646 062D 064A
+FDB4 <initial> 0642 0645 062D
+FDB5 <initial> 0644 062D 0645
+FDB6 <final> 0639 0645 064A
+FDB7 <final> 0643 0645 064A
+FDB8 <initial> 0646 062C 062D
+FDB9 <final> 0645 062E 064A
+FDBA <initial> 0644 062C 0645
+FDBB <final> 0643 0645 0645
+FDBC <final> 0644 062C 0645
+FDBD <final> 0646 062C 062D
+FDBE <final> 062C 062D 064A
+FDBF <final> 062D 062C 064A
+FDC0 <final> 0645 062C 064A
+FDC1 <final> 0641 0645 064A
+FDC2 <final> 0628 062D 064A
+FDC3 <initial> 0643 0645 0645
+FDC4 <initial> 0639 062C 0645
+FDC5 <initial> 0635 0645 0645
+FDC6 <final> 0633 062E 064A
+FDC7 <final> 0646 062C 064A
+FDF0 <isolated> 0635 0644 06D2
+FDF1 <isolated> 0642 0644 06D2
+FDF2 <isolated> 0627 0644 0644 0647
+FDF3 <isolated> 0627 0643 0628 0631
+FDF4 <isolated> 0645 062D 0645 062F
+FDF5 <isolated> 0635 0644 0639 0645
+FDF6 <isolated> 0631 0633 0648 0644
+FDF7 <isolated> 0639 0644 064A 0647
+FDF8 <isolated> 0648 0633 0644 0645
+FDF9 <isolated> 0635 0644 0649
+FDFA <isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645
+FDFB <isolated> 062C 0644 0020 062C 0644 0627 0644 0647
+FDFC <isolated> 0631 06CC 0627 0644
+FE30 <vertical> 2025
+FE31 <vertical> 2014
+FE32 <vertical> 2013
+FE33 FE34 <vertical> 005F
+FE35 <vertical> 0028
+FE36 <vertical> 0029
+FE37 <vertical> 007B
+FE38 <vertical> 007D
+FE39 <vertical> 3014
+FE3A <vertical> 3015
+FE3B <vertical> 3010
+FE3C <vertical> 3011
+FE3D <vertical> 300A
+FE3E <vertical> 300B
+FE3F <vertical> 3008
+FE40 <vertical> 3009
+FE41 <vertical> 300C
+FE42 <vertical> 300D
+FE43 <vertical> 300E
+FE44 <vertical> 300F
+FE49 FE4C <compat> 203E
+FE4D FE4F <compat> 005F
+FE50 <small> 002C
+FE51 <small> 3001
+FE52 <small> 002E
+FE54 <small> 003B
+FE55 <small> 003A
+FE56 <small> 003F
+FE57 <small> 0021
+FE58 <small> 2014
+FE59 <small> 0028
+FE5A <small> 0029
+FE5B <small> 007B
+FE5C <small> 007D
+FE5D <small> 3014
+FE5E <small> 3015
+FE5F <small> 0023
+FE60 <small> 0026
+FE61 <small> 002A
+FE62 <small> 002B
+FE63 <small> 002D
+FE64 <small> 003C
+FE65 <small> 003E
+FE66 <small> 003D
+FE68 <small> 005C
+FE69 <small> 0024
+FE6A <small> 0025
+FE6B <small> 0040
+FE70 <isolated> 0020 064B
+FE71 <medial> 0640 064B
+FE72 <isolated> 0020 064C
+FE74 <isolated> 0020 064D
+FE76 <isolated> 0020 064E
+FE77 <medial> 0640 064E
+FE78 <isolated> 0020 064F
+FE79 <medial> 0640 064F
+FE7A <isolated> 0020 0650
+FE7B <medial> 0640 0650
+FE7C <isolated> 0020 0651
+FE7D <medial> 0640 0651
+FE7E <isolated> 0020 0652
+FE7F <medial> 0640 0652
+FE80 <isolated> 0621
+FE81 <isolated> 0622
+FE82 <final> 0622
+FE83 <isolated> 0623
+FE84 <final> 0623
+FE85 <isolated> 0624
+FE86 <final> 0624
+FE87 <isolated> 0625
+FE88 <final> 0625
+FE89 <isolated> 0626
+FE8A <final> 0626
+FE8B <initial> 0626
+FE8C <medial> 0626
+FE8D <isolated> 0627
+FE8E <final> 0627
+FE8F <isolated> 0628
+FE90 <final> 0628
+FE91 <initial> 0628
+FE92 <medial> 0628
+FE93 <isolated> 0629
+FE94 <final> 0629
+FE95 <isolated> 062A
+FE96 <final> 062A
+FE97 <initial> 062A
+FE98 <medial> 062A
+FE99 <isolated> 062B
+FE9A <final> 062B
+FE9B <initial> 062B
+FE9C <medial> 062B
+FE9D <isolated> 062C
+FE9E <final> 062C
+FE9F <initial> 062C
+FEA0 <medial> 062C
+FEA1 <isolated> 062D
+FEA2 <final> 062D
+FEA3 <initial> 062D
+FEA4 <medial> 062D
+FEA5 <isolated> 062E
+FEA6 <final> 062E
+FEA7 <initial> 062E
+FEA8 <medial> 062E
+FEA9 <isolated> 062F
+FEAA <final> 062F
+FEAB <isolated> 0630
+FEAC <final> 0630
+FEAD <isolated> 0631
+FEAE <final> 0631
+FEAF <isolated> 0632
+FEB0 <final> 0632
+FEB1 <isolated> 0633
+FEB2 <final> 0633
+FEB3 <initial> 0633
+FEB4 <medial> 0633
+FEB5 <isolated> 0634
+FEB6 <final> 0634
+FEB7 <initial> 0634
+FEB8 <medial> 0634
+FEB9 <isolated> 0635
+FEBA <final> 0635
+FEBB <initial> 0635
+FEBC <medial> 0635
+FEBD <isolated> 0636
+FEBE <final> 0636
+FEBF <initial> 0636
+FEC0 <medial> 0636
+FEC1 <isolated> 0637
+FEC2 <final> 0637
+FEC3 <initial> 0637
+FEC4 <medial> 0637
+FEC5 <isolated> 0638
+FEC6 <final> 0638
+FEC7 <initial> 0638
+FEC8 <medial> 0638
+FEC9 <isolated> 0639
+FECA <final> 0639
+FECB <initial> 0639
+FECC <medial> 0639
+FECD <isolated> 063A
+FECE <final> 063A
+FECF <initial> 063A
+FED0 <medial> 063A
+FED1 <isolated> 0641
+FED2 <final> 0641
+FED3 <initial> 0641
+FED4 <medial> 0641
+FED5 <isolated> 0642
+FED6 <final> 0642
+FED7 <initial> 0642
+FED8 <medial> 0642
+FED9 <isolated> 0643
+FEDA <final> 0643
+FEDB <initial> 0643
+FEDC <medial> 0643
+FEDD <isolated> 0644
+FEDE <final> 0644
+FEDF <initial> 0644
+FEE0 <medial> 0644
+FEE1 <isolated> 0645
+FEE2 <final> 0645
+FEE3 <initial> 0645
+FEE4 <medial> 0645
+FEE5 <isolated> 0646
+FEE6 <final> 0646
+FEE7 <initial> 0646
+FEE8 <medial> 0646
+FEE9 <isolated> 0647
+FEEA <final> 0647
+FEEB <initial> 0647
+FEEC <medial> 0647
+FEED <isolated> 0648
+FEEE <final> 0648
+FEEF <isolated> 0649
+FEF0 <final> 0649
+FEF1 <isolated> 064A
+FEF2 <final> 064A
+FEF3 <initial> 064A
+FEF4 <medial> 064A
+FEF5 <isolated> 0644 0622
+FEF6 <final> 0644 0622
+FEF7 <isolated> 0644 0623
+FEF8 <final> 0644 0623
+FEF9 <isolated> 0644 0625
+FEFA <final> 0644 0625
+FEFB <isolated> 0644 0627
+FEFC <final> 0644 0627
+FF01 <wide> 0021
+FF02 <wide> 0022
+FF03 <wide> 0023
+FF04 <wide> 0024
+FF05 <wide> 0025
+FF06 <wide> 0026
+FF07 <wide> 0027
+FF08 <wide> 0028
+FF09 <wide> 0029
+FF0A <wide> 002A
+FF0B <wide> 002B
+FF0C <wide> 002C
+FF0D <wide> 002D
+FF0E <wide> 002E
+FF0F <wide> 002F
+FF10 <wide> 0030
+FF11 <wide> 0031
+FF12 <wide> 0032
+FF13 <wide> 0033
+FF14 <wide> 0034
+FF15 <wide> 0035
+FF16 <wide> 0036
+FF17 <wide> 0037
+FF18 <wide> 0038
+FF19 <wide> 0039
+FF1A <wide> 003A
+FF1B <wide> 003B
+FF1C <wide> 003C
+FF1D <wide> 003D
+FF1E <wide> 003E
+FF1F <wide> 003F
+FF20 <wide> 0040
+FF21 <wide> 0041
+FF22 <wide> 0042
+FF23 <wide> 0043
+FF24 <wide> 0044
+FF25 <wide> 0045
+FF26 <wide> 0046
+FF27 <wide> 0047
+FF28 <wide> 0048
+FF29 <wide> 0049
+FF2A <wide> 004A
+FF2B <wide> 004B
+FF2C <wide> 004C
+FF2D <wide> 004D
+FF2E <wide> 004E
+FF2F <wide> 004F
+FF30 <wide> 0050
+FF31 <wide> 0051
+FF32 <wide> 0052
+FF33 <wide> 0053
+FF34 <wide> 0054
+FF35 <wide> 0055
+FF36 <wide> 0056
+FF37 <wide> 0057
+FF38 <wide> 0058
+FF39 <wide> 0059
+FF3A <wide> 005A
+FF3B <wide> 005B
+FF3C <wide> 005C
+FF3D <wide> 005D
+FF3E <wide> 005E
+FF3F <wide> 005F
+FF40 <wide> 0060
+FF41 <wide> 0061
+FF42 <wide> 0062
+FF43 <wide> 0063
+FF44 <wide> 0064
+FF45 <wide> 0065
+FF46 <wide> 0066
+FF47 <wide> 0067
+FF48 <wide> 0068
+FF49 <wide> 0069
+FF4A <wide> 006A
+FF4B <wide> 006B
+FF4C <wide> 006C
+FF4D <wide> 006D
+FF4E <wide> 006E
+FF4F <wide> 006F
+FF50 <wide> 0070
+FF51 <wide> 0071
+FF52 <wide> 0072
+FF53 <wide> 0073
+FF54 <wide> 0074
+FF55 <wide> 0075
+FF56 <wide> 0076
+FF57 <wide> 0077
+FF58 <wide> 0078
+FF59 <wide> 0079
+FF5A <wide> 007A
+FF5B <wide> 007B
+FF5C <wide> 007C
+FF5D <wide> 007D
+FF5E <wide> 007E
+FF5F <wide> 2985
+FF60 <wide> 2986
+FF61 <narrow> 3002
+FF62 <narrow> 300C
+FF63 <narrow> 300D
+FF64 <narrow> 3001
+FF65 <narrow> 30FB
+FF66 <narrow> 30F2
+FF67 <narrow> 30A1
+FF68 <narrow> 30A3
+FF69 <narrow> 30A5
+FF6A <narrow> 30A7
+FF6B <narrow> 30A9
+FF6C <narrow> 30E3
+FF6D <narrow> 30E5
+FF6E <narrow> 30E7
+FF6F <narrow> 30C3
+FF70 <narrow> 30FC
+FF71 <narrow> 30A2
+FF72 <narrow> 30A4
+FF73 <narrow> 30A6
+FF74 <narrow> 30A8
+FF75 <narrow> 30AA
+FF76 <narrow> 30AB
+FF77 <narrow> 30AD
+FF78 <narrow> 30AF
+FF79 <narrow> 30B1
+FF7A <narrow> 30B3
+FF7B <narrow> 30B5
+FF7C <narrow> 30B7
+FF7D <narrow> 30B9
+FF7E <narrow> 30BB
+FF7F <narrow> 30BD
+FF80 <narrow> 30BF
+FF81 <narrow> 30C1
+FF82 <narrow> 30C4
+FF83 <narrow> 30C6
+FF84 <narrow> 30C8
+FF85 <narrow> 30CA
+FF86 <narrow> 30CB
+FF87 <narrow> 30CC
+FF88 <narrow> 30CD
+FF89 <narrow> 30CE
+FF8A <narrow> 30CF
+FF8B <narrow> 30D2
+FF8C <narrow> 30D5
+FF8D <narrow> 30D8
+FF8E <narrow> 30DB
+FF8F <narrow> 30DE
+FF90 <narrow> 30DF
+FF91 <narrow> 30E0
+FF92 <narrow> 30E1
+FF93 <narrow> 30E2
+FF94 <narrow> 30E4
+FF95 <narrow> 30E6
+FF96 <narrow> 30E8
+FF97 <narrow> 30E9
+FF98 <narrow> 30EA
+FF99 <narrow> 30EB
+FF9A <narrow> 30EC
+FF9B <narrow> 30ED
+FF9C <narrow> 30EF
+FF9D <narrow> 30F3
+FF9E <narrow> 3099
+FF9F <narrow> 309A
+FFA0 <narrow> 3164
+FFA1 <narrow> 3131
+FFA2 <narrow> 3132
+FFA3 <narrow> 3133
+FFA4 <narrow> 3134
+FFA5 <narrow> 3135
+FFA6 <narrow> 3136
+FFA7 <narrow> 3137
+FFA8 <narrow> 3138
+FFA9 <narrow> 3139
+FFAA <narrow> 313A
+FFAB <narrow> 313B
+FFAC <narrow> 313C
+FFAD <narrow> 313D
+FFAE <narrow> 313E
+FFAF <narrow> 313F
+FFB0 <narrow> 3140
+FFB1 <narrow> 3141
+FFB2 <narrow> 3142
+FFB3 <narrow> 3143
+FFB4 <narrow> 3144
+FFB5 <narrow> 3145
+FFB6 <narrow> 3146
+FFB7 <narrow> 3147
+FFB8 <narrow> 3148
+FFB9 <narrow> 3149
+FFBA <narrow> 314A
+FFBB <narrow> 314B
+FFBC <narrow> 314C
+FFBD <narrow> 314D
+FFBE <narrow> 314E
+FFC2 <narrow> 314F
+FFC3 <narrow> 3150
+FFC4 <narrow> 3151
+FFC5 <narrow> 3152
+FFC6 <narrow> 3153
+FFC7 <narrow> 3154
+FFCA <narrow> 3155
+FFCB <narrow> 3156
+FFCC <narrow> 3157
+FFCD <narrow> 3158
+FFCE <narrow> 3159
+FFCF <narrow> 315A
+FFD2 <narrow> 315B
+FFD3 <narrow> 315C
+FFD4 <narrow> 315D
+FFD5 <narrow> 315E
+FFD6 <narrow> 315F
+FFD7 <narrow> 3160
+FFDA <narrow> 3161
+FFDB <narrow> 3162
+FFDC <narrow> 3163
+FFE0 <wide> 00A2
+FFE1 <wide> 00A3
+FFE2 <wide> 00AC
+FFE3 <wide> 00AF
+FFE4 <wide> 00A6
+FFE5 <wide> 00A5
+FFE6 <wide> 20A9
+FFE8 <narrow> 2502
+FFE9 <narrow> 2190
+FFEA <narrow> 2191
+FFEB <narrow> 2192
+FFEC <narrow> 2193
+FFED <narrow> 25A0
+FFEE <narrow> 25CB
+1D15E 1D157 1D165
+1D15F 1D158 1D165
+1D160 1D15F 1D16E
+1D161 1D15F 1D16F
+1D162 1D15F 1D170
+1D163 1D15F 1D171
+1D164 1D15F 1D172
+1D1BB 1D1B9 1D165
+1D1BC 1D1BA 1D165
+1D1BD 1D1BB 1D16E
+1D1BE 1D1BC 1D16E
+1D1BF 1D1BB 1D16F
+1D1C0 1D1BC 1D16F
+1D400 <font> 0041
+1D401 <font> 0042
+1D402 <font> 0043
+1D403 <font> 0044
+1D404 <font> 0045
+1D405 <font> 0046
+1D406 <font> 0047
+1D407 <font> 0048
+1D408 <font> 0049
+1D409 <font> 004A
+1D40A <font> 004B
+1D40B <font> 004C
+1D40C <font> 004D
+1D40D <font> 004E
+1D40E <font> 004F
+1D40F <font> 0050
+1D410 <font> 0051
+1D411 <font> 0052
+1D412 <font> 0053
+1D413 <font> 0054
+1D414 <font> 0055
+1D415 <font> 0056
+1D416 <font> 0057
+1D417 <font> 0058
+1D418 <font> 0059
+1D419 <font> 005A
+1D41A <font> 0061
+1D41B <font> 0062
+1D41C <font> 0063
+1D41D <font> 0064
+1D41E <font> 0065
+1D41F <font> 0066
+1D420 <font> 0067
+1D421 <font> 0068
+1D422 <font> 0069
+1D423 <font> 006A
+1D424 <font> 006B
+1D425 <font> 006C
+1D426 <font> 006D
+1D427 <font> 006E
+1D428 <font> 006F
+1D429 <font> 0070
+1D42A <font> 0071
+1D42B <font> 0072
+1D42C <font> 0073
+1D42D <font> 0074
+1D42E <font> 0075
+1D42F <font> 0076
+1D430 <font> 0077
+1D431 <font> 0078
+1D432 <font> 0079
+1D433 <font> 007A
+1D434 <font> 0041
+1D435 <font> 0042
+1D436 <font> 0043
+1D437 <font> 0044
+1D438 <font> 0045
+1D439 <font> 0046
+1D43A <font> 0047
+1D43B <font> 0048
+1D43C <font> 0049
+1D43D <font> 004A
+1D43E <font> 004B
+1D43F <font> 004C
+1D440 <font> 004D
+1D441 <font> 004E
+1D442 <font> 004F
+1D443 <font> 0050
+1D444 <font> 0051
+1D445 <font> 0052
+1D446 <font> 0053
+1D447 <font> 0054
+1D448 <font> 0055
+1D449 <font> 0056
+1D44A <font> 0057
+1D44B <font> 0058
+1D44C <font> 0059
+1D44D <font> 005A
+1D44E <font> 0061
+1D44F <font> 0062
+1D450 <font> 0063
+1D451 <font> 0064
+1D452 <font> 0065
+1D453 <font> 0066
+1D454 <font> 0067
+1D456 <font> 0069
+1D457 <font> 006A
+1D458 <font> 006B
+1D459 <font> 006C
+1D45A <font> 006D
+1D45B <font> 006E
+1D45C <font> 006F
+1D45D <font> 0070
+1D45E <font> 0071
+1D45F <font> 0072
+1D460 <font> 0073
+1D461 <font> 0074
+1D462 <font> 0075
+1D463 <font> 0076
+1D464 <font> 0077
+1D465 <font> 0078
+1D466 <font> 0079
+1D467 <font> 007A
+1D468 <font> 0041
+1D469 <font> 0042
+1D46A <font> 0043
+1D46B <font> 0044
+1D46C <font> 0045
+1D46D <font> 0046
+1D46E <font> 0047
+1D46F <font> 0048
+1D470 <font> 0049
+1D471 <font> 004A
+1D472 <font> 004B
+1D473 <font> 004C
+1D474 <font> 004D
+1D475 <font> 004E
+1D476 <font> 004F
+1D477 <font> 0050
+1D478 <font> 0051
+1D479 <font> 0052
+1D47A <font> 0053
+1D47B <font> 0054
+1D47C <font> 0055
+1D47D <font> 0056
+1D47E <font> 0057
+1D47F <font> 0058
+1D480 <font> 0059
+1D481 <font> 005A
+1D482 <font> 0061
+1D483 <font> 0062
+1D484 <font> 0063
+1D485 <font> 0064
+1D486 <font> 0065
+1D487 <font> 0066
+1D488 <font> 0067
+1D489 <font> 0068
+1D48A <font> 0069
+1D48B <font> 006A
+1D48C <font> 006B
+1D48D <font> 006C
+1D48E <font> 006D
+1D48F <font> 006E
+1D490 <font> 006F
+1D491 <font> 0070
+1D492 <font> 0071
+1D493 <font> 0072
+1D494 <font> 0073
+1D495 <font> 0074
+1D496 <font> 0075
+1D497 <font> 0076
+1D498 <font> 0077
+1D499 <font> 0078
+1D49A <font> 0079
+1D49B <font> 007A
+1D49C <font> 0041
+1D49E <font> 0043
+1D49F <font> 0044
+1D4A2 <font> 0047
+1D4A5 <font> 004A
+1D4A6 <font> 004B
+1D4A9 <font> 004E
+1D4AA <font> 004F
+1D4AB <font> 0050
+1D4AC <font> 0051
+1D4AE <font> 0053
+1D4AF <font> 0054
+1D4B0 <font> 0055
+1D4B1 <font> 0056
+1D4B2 <font> 0057
+1D4B3 <font> 0058
+1D4B4 <font> 0059
+1D4B5 <font> 005A
+1D4B6 <font> 0061
+1D4B7 <font> 0062
+1D4B8 <font> 0063
+1D4B9 <font> 0064
+1D4BB <font> 0066
+1D4BD <font> 0068
+1D4BE <font> 0069
+1D4BF <font> 006A
+1D4C0 <font> 006B
+1D4C2 <font> 006D
+1D4C3 <font> 006E
+1D4C5 <font> 0070
+1D4C6 <font> 0071
+1D4C7 <font> 0072
+1D4C8 <font> 0073
+1D4C9 <font> 0074
+1D4CA <font> 0075
+1D4CB <font> 0076
+1D4CC <font> 0077
+1D4CD <font> 0078
+1D4CE <font> 0079
+1D4CF <font> 007A
+1D4D0 <font> 0041
+1D4D1 <font> 0042
+1D4D2 <font> 0043
+1D4D3 <font> 0044
+1D4D4 <font> 0045
+1D4D5 <font> 0046
+1D4D6 <font> 0047
+1D4D7 <font> 0048
+1D4D8 <font> 0049
+1D4D9 <font> 004A
+1D4DA <font> 004B
+1D4DB <font> 004C
+1D4DC <font> 004D
+1D4DD <font> 004E
+1D4DE <font> 004F
+1D4DF <font> 0050
+1D4E0 <font> 0051
+1D4E1 <font> 0052
+1D4E2 <font> 0053
+1D4E3 <font> 0054
+1D4E4 <font> 0055
+1D4E5 <font> 0056
+1D4E6 <font> 0057
+1D4E7 <font> 0058
+1D4E8 <font> 0059
+1D4E9 <font> 005A
+1D4EA <font> 0061
+1D4EB <font> 0062
+1D4EC <font> 0063
+1D4ED <font> 0064
+1D4EE <font> 0065
+1D4EF <font> 0066
+1D4F0 <font> 0067
+1D4F1 <font> 0068
+1D4F2 <font> 0069
+1D4F3 <font> 006A
+1D4F4 <font> 006B
+1D4F5 <font> 006C
+1D4F6 <font> 006D
+1D4F7 <font> 006E
+1D4F8 <font> 006F
+1D4F9 <font> 0070
+1D4FA <font> 0071
+1D4FB <font> 0072
+1D4FC <font> 0073
+1D4FD <font> 0074
+1D4FE <font> 0075
+1D4FF <font> 0076
+1D500 <font> 0077
+1D501 <font> 0078
+1D502 <font> 0079
+1D503 <font> 007A
+1D504 <font> 0041
+1D505 <font> 0042
+1D507 <font> 0044
+1D508 <font> 0045
+1D509 <font> 0046
+1D50A <font> 0047
+1D50D <font> 004A
+1D50E <font> 004B
+1D50F <font> 004C
+1D510 <font> 004D
+1D511 <font> 004E
+1D512 <font> 004F
+1D513 <font> 0050
+1D514 <font> 0051
+1D516 <font> 0053
+1D517 <font> 0054
+1D518 <font> 0055
+1D519 <font> 0056
+1D51A <font> 0057
+1D51B <font> 0058
+1D51C <font> 0059
+1D51E <font> 0061
+1D51F <font> 0062
+1D520 <font> 0063
+1D521 <font> 0064
+1D522 <font> 0065
+1D523 <font> 0066
+1D524 <font> 0067
+1D525 <font> 0068
+1D526 <font> 0069
+1D527 <font> 006A
+1D528 <font> 006B
+1D529 <font> 006C
+1D52A <font> 006D
+1D52B <font> 006E
+1D52C <font> 006F
+1D52D <font> 0070
+1D52E <font> 0071
+1D52F <font> 0072
+1D530 <font> 0073
+1D531 <font> 0074
+1D532 <font> 0075
+1D533 <font> 0076
+1D534 <font> 0077
+1D535 <font> 0078
+1D536 <font> 0079
+1D537 <font> 007A
+1D538 <font> 0041
+1D539 <font> 0042
+1D53B <font> 0044
+1D53C <font> 0045
+1D53D <font> 0046
+1D53E <font> 0047
+1D540 <font> 0049
+1D541 <font> 004A
+1D542 <font> 004B
+1D543 <font> 004C
+1D544 <font> 004D
+1D546 <font> 004F
+1D54A <font> 0053
+1D54B <font> 0054
+1D54C <font> 0055
+1D54D <font> 0056
+1D54E <font> 0057
+1D54F <font> 0058
+1D550 <font> 0059
+1D552 <font> 0061
+1D553 <font> 0062
+1D554 <font> 0063
+1D555 <font> 0064
+1D556 <font> 0065
+1D557 <font> 0066
+1D558 <font> 0067
+1D559 <font> 0068
+1D55A <font> 0069
+1D55B <font> 006A
+1D55C <font> 006B
+1D55D <font> 006C
+1D55E <font> 006D
+1D55F <font> 006E
+1D560 <font> 006F
+1D561 <font> 0070
+1D562 <font> 0071
+1D563 <font> 0072
+1D564 <font> 0073
+1D565 <font> 0074
+1D566 <font> 0075
+1D567 <font> 0076
+1D568 <font> 0077
+1D569 <font> 0078
+1D56A <font> 0079
+1D56B <font> 007A
+1D56C <font> 0041
+1D56D <font> 0042
+1D56E <font> 0043
+1D56F <font> 0044
+1D570 <font> 0045
+1D571 <font> 0046
+1D572 <font> 0047
+1D573 <font> 0048
+1D574 <font> 0049
+1D575 <font> 004A
+1D576 <font> 004B
+1D577 <font> 004C
+1D578 <font> 004D
+1D579 <font> 004E
+1D57A <font> 004F
+1D57B <font> 0050
+1D57C <font> 0051
+1D57D <font> 0052
+1D57E <font> 0053
+1D57F <font> 0054
+1D580 <font> 0055
+1D581 <font> 0056
+1D582 <font> 0057
+1D583 <font> 0058
+1D584 <font> 0059
+1D585 <font> 005A
+1D586 <font> 0061
+1D587 <font> 0062
+1D588 <font> 0063
+1D589 <font> 0064
+1D58A <font> 0065
+1D58B <font> 0066
+1D58C <font> 0067
+1D58D <font> 0068
+1D58E <font> 0069
+1D58F <font> 006A
+1D590 <font> 006B
+1D591 <font> 006C
+1D592 <font> 006D
+1D593 <font> 006E
+1D594 <font> 006F
+1D595 <font> 0070
+1D596 <font> 0071
+1D597 <font> 0072
+1D598 <font> 0073
+1D599 <font> 0074
+1D59A <font> 0075
+1D59B <font> 0076
+1D59C <font> 0077
+1D59D <font> 0078
+1D59E <font> 0079
+1D59F <font> 007A
+1D5A0 <font> 0041
+1D5A1 <font> 0042
+1D5A2 <font> 0043
+1D5A3 <font> 0044
+1D5A4 <font> 0045
+1D5A5 <font> 0046
+1D5A6 <font> 0047
+1D5A7 <font> 0048
+1D5A8 <font> 0049
+1D5A9 <font> 004A
+1D5AA <font> 004B
+1D5AB <font> 004C
+1D5AC <font> 004D
+1D5AD <font> 004E
+1D5AE <font> 004F
+1D5AF <font> 0050
+1D5B0 <font> 0051
+1D5B1 <font> 0052
+1D5B2 <font> 0053
+1D5B3 <font> 0054
+1D5B4 <font> 0055
+1D5B5 <font> 0056
+1D5B6 <font> 0057
+1D5B7 <font> 0058
+1D5B8 <font> 0059
+1D5B9 <font> 005A
+1D5BA <font> 0061
+1D5BB <font> 0062
+1D5BC <font> 0063
+1D5BD <font> 0064
+1D5BE <font> 0065
+1D5BF <font> 0066
+1D5C0 <font> 0067
+1D5C1 <font> 0068
+1D5C2 <font> 0069
+1D5C3 <font> 006A
+1D5C4 <font> 006B
+1D5C5 <font> 006C
+1D5C6 <font> 006D
+1D5C7 <font> 006E
+1D5C8 <font> 006F
+1D5C9 <font> 0070
+1D5CA <font> 0071
+1D5CB <font> 0072
+1D5CC <font> 0073
+1D5CD <font> 0074
+1D5CE <font> 0075
+1D5CF <font> 0076
+1D5D0 <font> 0077
+1D5D1 <font> 0078
+1D5D2 <font> 0079
+1D5D3 <font> 007A
+1D5D4 <font> 0041
+1D5D5 <font> 0042
+1D5D6 <font> 0043
+1D5D7 <font> 0044
+1D5D8 <font> 0045
+1D5D9 <font> 0046
+1D5DA <font> 0047
+1D5DB <font> 0048
+1D5DC <font> 0049
+1D5DD <font> 004A
+1D5DE <font> 004B
+1D5DF <font> 004C
+1D5E0 <font> 004D
+1D5E1 <font> 004E
+1D5E2 <font> 004F
+1D5E3 <font> 0050
+1D5E4 <font> 0051
+1D5E5 <font> 0052
+1D5E6 <font> 0053
+1D5E7 <font> 0054
+1D5E8 <font> 0055
+1D5E9 <font> 0056
+1D5EA <font> 0057
+1D5EB <font> 0058
+1D5EC <font> 0059
+1D5ED <font> 005A
+1D5EE <font> 0061
+1D5EF <font> 0062
+1D5F0 <font> 0063
+1D5F1 <font> 0064
+1D5F2 <font> 0065
+1D5F3 <font> 0066
+1D5F4 <font> 0067
+1D5F5 <font> 0068
+1D5F6 <font> 0069
+1D5F7 <font> 006A
+1D5F8 <font> 006B
+1D5F9 <font> 006C
+1D5FA <font> 006D
+1D5FB <font> 006E
+1D5FC <font> 006F
+1D5FD <font> 0070
+1D5FE <font> 0071
+1D5FF <font> 0072
+1D600 <font> 0073
+1D601 <font> 0074
+1D602 <font> 0075
+1D603 <font> 0076
+1D604 <font> 0077
+1D605 <font> 0078
+1D606 <font> 0079
+1D607 <font> 007A
+1D608 <font> 0041
+1D609 <font> 0042
+1D60A <font> 0043
+1D60B <font> 0044
+1D60C <font> 0045
+1D60D <font> 0046
+1D60E <font> 0047
+1D60F <font> 0048
+1D610 <font> 0049
+1D611 <font> 004A
+1D612 <font> 004B
+1D613 <font> 004C
+1D614 <font> 004D
+1D615 <font> 004E
+1D616 <font> 004F
+1D617 <font> 0050
+1D618 <font> 0051
+1D619 <font> 0052
+1D61A <font> 0053
+1D61B <font> 0054
+1D61C <font> 0055
+1D61D <font> 0056
+1D61E <font> 0057
+1D61F <font> 0058
+1D620 <font> 0059
+1D621 <font> 005A
+1D622 <font> 0061
+1D623 <font> 0062
+1D624 <font> 0063
+1D625 <font> 0064
+1D626 <font> 0065
+1D627 <font> 0066
+1D628 <font> 0067
+1D629 <font> 0068
+1D62A <font> 0069
+1D62B <font> 006A
+1D62C <font> 006B
+1D62D <font> 006C
+1D62E <font> 006D
+1D62F <font> 006E
+1D630 <font> 006F
+1D631 <font> 0070
+1D632 <font> 0071
+1D633 <font> 0072
+1D634 <font> 0073
+1D635 <font> 0074
+1D636 <font> 0075
+1D637 <font> 0076
+1D638 <font> 0077
+1D639 <font> 0078
+1D63A <font> 0079
+1D63B <font> 007A
+1D63C <font> 0041
+1D63D <font> 0042
+1D63E <font> 0043
+1D63F <font> 0044
+1D640 <font> 0045
+1D641 <font> 0046
+1D642 <font> 0047
+1D643 <font> 0048
+1D644 <font> 0049
+1D645 <font> 004A
+1D646 <font> 004B
+1D647 <font> 004C
+1D648 <font> 004D
+1D649 <font> 004E
+1D64A <font> 004F
+1D64B <font> 0050
+1D64C <font> 0051
+1D64D <font> 0052
+1D64E <font> 0053
+1D64F <font> 0054
+1D650 <font> 0055
+1D651 <font> 0056
+1D652 <font> 0057
+1D653 <font> 0058
+1D654 <font> 0059
+1D655 <font> 005A
+1D656 <font> 0061
+1D657 <font> 0062
+1D658 <font> 0063
+1D659 <font> 0064
+1D65A <font> 0065
+1D65B <font> 0066
+1D65C <font> 0067
+1D65D <font> 0068
+1D65E <font> 0069
+1D65F <font> 006A
+1D660 <font> 006B
+1D661 <font> 006C
+1D662 <font> 006D
+1D663 <font> 006E
+1D664 <font> 006F
+1D665 <font> 0070
+1D666 <font> 0071
+1D667 <font> 0072
+1D668 <font> 0073
+1D669 <font> 0074
+1D66A <font> 0075
+1D66B <font> 0076
+1D66C <font> 0077
+1D66D <font> 0078
+1D66E <font> 0079
+1D66F <font> 007A
+1D670 <font> 0041
+1D671 <font> 0042
+1D672 <font> 0043
+1D673 <font> 0044
+1D674 <font> 0045
+1D675 <font> 0046
+1D676 <font> 0047
+1D677 <font> 0048
+1D678 <font> 0049
+1D679 <font> 004A
+1D67A <font> 004B
+1D67B <font> 004C
+1D67C <font> 004D
+1D67D <font> 004E
+1D67E <font> 004F
+1D67F <font> 0050
+1D680 <font> 0051
+1D681 <font> 0052
+1D682 <font> 0053
+1D683 <font> 0054
+1D684 <font> 0055
+1D685 <font> 0056
+1D686 <font> 0057
+1D687 <font> 0058
+1D688 <font> 0059
+1D689 <font> 005A
+1D68A <font> 0061
+1D68B <font> 0062
+1D68C <font> 0063
+1D68D <font> 0064
+1D68E <font> 0065
+1D68F <font> 0066
+1D690 <font> 0067
+1D691 <font> 0068
+1D692 <font> 0069
+1D693 <font> 006A
+1D694 <font> 006B
+1D695 <font> 006C
+1D696 <font> 006D
+1D697 <font> 006E
+1D698 <font> 006F
+1D699 <font> 0070
+1D69A <font> 0071
+1D69B <font> 0072
+1D69C <font> 0073
+1D69D <font> 0074
+1D69E <font> 0075
+1D69F <font> 0076
+1D6A0 <font> 0077
+1D6A1 <font> 0078
+1D6A2 <font> 0079
+1D6A3 <font> 007A
+1D6A8 <font> 0391
+1D6A9 <font> 0392
+1D6AA <font> 0393
+1D6AB <font> 0394
+1D6AC <font> 0395
+1D6AD <font> 0396
+1D6AE <font> 0397
+1D6AF <font> 0398
+1D6B0 <font> 0399
+1D6B1 <font> 039A
+1D6B2 <font> 039B
+1D6B3 <font> 039C
+1D6B4 <font> 039D
+1D6B5 <font> 039E
+1D6B6 <font> 039F
+1D6B7 <font> 03A0
+1D6B8 <font> 03A1
+1D6B9 <font> 03F4
+1D6BA <font> 03A3
+1D6BB <font> 03A4
+1D6BC <font> 03A5
+1D6BD <font> 03A6
+1D6BE <font> 03A7
+1D6BF <font> 03A8
+1D6C0 <font> 03A9
+1D6C1 <font> 2207
+1D6C2 <font> 03B1
+1D6C3 <font> 03B2
+1D6C4 <font> 03B3
+1D6C5 <font> 03B4
+1D6C6 <font> 03B5
+1D6C7 <font> 03B6
+1D6C8 <font> 03B7
+1D6C9 <font> 03B8
+1D6CA <font> 03B9
+1D6CB <font> 03BA
+1D6CC <font> 03BB
+1D6CD <font> 03BC
+1D6CE <font> 03BD
+1D6CF <font> 03BE
+1D6D0 <font> 03BF
+1D6D1 <font> 03C0
+1D6D2 <font> 03C1
+1D6D3 <font> 03C2
+1D6D4 <font> 03C3
+1D6D5 <font> 03C4
+1D6D6 <font> 03C5
+1D6D7 <font> 03C6
+1D6D8 <font> 03C7
+1D6D9 <font> 03C8
+1D6DA <font> 03C9
+1D6DB <font> 2202
+1D6DC <font> 03F5
+1D6DD <font> 03D1
+1D6DE <font> 03F0
+1D6DF <font> 03D5
+1D6E0 <font> 03F1
+1D6E1 <font> 03D6
+1D6E2 <font> 0391
+1D6E3 <font> 0392
+1D6E4 <font> 0393
+1D6E5 <font> 0394
+1D6E6 <font> 0395
+1D6E7 <font> 0396
+1D6E8 <font> 0397
+1D6E9 <font> 0398
+1D6EA <font> 0399
+1D6EB <font> 039A
+1D6EC <font> 039B
+1D6ED <font> 039C
+1D6EE <font> 039D
+1D6EF <font> 039E
+1D6F0 <font> 039F
+1D6F1 <font> 03A0
+1D6F2 <font> 03A1
+1D6F3 <font> 03F4
+1D6F4 <font> 03A3
+1D6F5 <font> 03A4
+1D6F6 <font> 03A5
+1D6F7 <font> 03A6
+1D6F8 <font> 03A7
+1D6F9 <font> 03A8
+1D6FA <font> 03A9
+1D6FB <font> 2207
+1D6FC <font> 03B1
+1D6FD <font> 03B2
+1D6FE <font> 03B3
+1D6FF <font> 03B4
+1D700 <font> 03B5
+1D701 <font> 03B6
+1D702 <font> 03B7
+1D703 <font> 03B8
+1D704 <font> 03B9
+1D705 <font> 03BA
+1D706 <font> 03BB
+1D707 <font> 03BC
+1D708 <font> 03BD
+1D709 <font> 03BE
+1D70A <font> 03BF
+1D70B <font> 03C0
+1D70C <font> 03C1
+1D70D <font> 03C2
+1D70E <font> 03C3
+1D70F <font> 03C4
+1D710 <font> 03C5
+1D711 <font> 03C6
+1D712 <font> 03C7
+1D713 <font> 03C8
+1D714 <font> 03C9
+1D715 <font> 2202
+1D716 <font> 03F5
+1D717 <font> 03D1
+1D718 <font> 03F0
+1D719 <font> 03D5
+1D71A <font> 03F1
+1D71B <font> 03D6
+1D71C <font> 0391
+1D71D <font> 0392
+1D71E <font> 0393
+1D71F <font> 0394
+1D720 <font> 0395
+1D721 <font> 0396
+1D722 <font> 0397
+1D723 <font> 0398
+1D724 <font> 0399
+1D725 <font> 039A
+1D726 <font> 039B
+1D727 <font> 039C
+1D728 <font> 039D
+1D729 <font> 039E
+1D72A <font> 039F
+1D72B <font> 03A0
+1D72C <font> 03A1
+1D72D <font> 03F4
+1D72E <font> 03A3
+1D72F <font> 03A4
+1D730 <font> 03A5
+1D731 <font> 03A6
+1D732 <font> 03A7
+1D733 <font> 03A8
+1D734 <font> 03A9
+1D735 <font> 2207
+1D736 <font> 03B1
+1D737 <font> 03B2
+1D738 <font> 03B3
+1D739 <font> 03B4
+1D73A <font> 03B5
+1D73B <font> 03B6
+1D73C <font> 03B7
+1D73D <font> 03B8
+1D73E <font> 03B9
+1D73F <font> 03BA
+1D740 <font> 03BB
+1D741 <font> 03BC
+1D742 <font> 03BD
+1D743 <font> 03BE
+1D744 <font> 03BF
+1D745 <font> 03C0
+1D746 <font> 03C1
+1D747 <font> 03C2
+1D748 <font> 03C3
+1D749 <font> 03C4
+1D74A <font> 03C5
+1D74B <font> 03C6
+1D74C <font> 03C7
+1D74D <font> 03C8
+1D74E <font> 03C9
+1D74F <font> 2202
+1D750 <font> 03F5
+1D751 <font> 03D1
+1D752 <font> 03F0
+1D753 <font> 03D5
+1D754 <font> 03F1
+1D755 <font> 03D6
+1D756 <font> 0391
+1D757 <font> 0392
+1D758 <font> 0393
+1D759 <font> 0394
+1D75A <font> 0395
+1D75B <font> 0396
+1D75C <font> 0397
+1D75D <font> 0398
+1D75E <font> 0399
+1D75F <font> 039A
+1D760 <font> 039B
+1D761 <font> 039C
+1D762 <font> 039D
+1D763 <font> 039E
+1D764 <font> 039F
+1D765 <font> 03A0
+1D766 <font> 03A1
+1D767 <font> 03F4
+1D768 <font> 03A3
+1D769 <font> 03A4
+1D76A <font> 03A5
+1D76B <font> 03A6
+1D76C <font> 03A7
+1D76D <font> 03A8
+1D76E <font> 03A9
+1D76F <font> 2207
+1D770 <font> 03B1
+1D771 <font> 03B2
+1D772 <font> 03B3
+1D773 <font> 03B4
+1D774 <font> 03B5
+1D775 <font> 03B6
+1D776 <font> 03B7
+1D777 <font> 03B8
+1D778 <font> 03B9
+1D779 <font> 03BA
+1D77A <font> 03BB
+1D77B <font> 03BC
+1D77C <font> 03BD
+1D77D <font> 03BE
+1D77E <font> 03BF
+1D77F <font> 03C0
+1D780 <font> 03C1
+1D781 <font> 03C2
+1D782 <font> 03C3
+1D783 <font> 03C4
+1D784 <font> 03C5
+1D785 <font> 03C6
+1D786 <font> 03C7
+1D787 <font> 03C8
+1D788 <font> 03C9
+1D789 <font> 2202
+1D78A <font> 03F5
+1D78B <font> 03D1
+1D78C <font> 03F0
+1D78D <font> 03D5
+1D78E <font> 03F1
+1D78F <font> 03D6
+1D790 <font> 0391
+1D791 <font> 0392
+1D792 <font> 0393
+1D793 <font> 0394
+1D794 <font> 0395
+1D795 <font> 0396
+1D796 <font> 0397
+1D797 <font> 0398
+1D798 <font> 0399
+1D799 <font> 039A
+1D79A <font> 039B
+1D79B <font> 039C
+1D79C <font> 039D
+1D79D <font> 039E
+1D79E <font> 039F
+1D79F <font> 03A0
+1D7A0 <font> 03A1
+1D7A1 <font> 03F4
+1D7A2 <font> 03A3
+1D7A3 <font> 03A4
+1D7A4 <font> 03A5
+1D7A5 <font> 03A6
+1D7A6 <font> 03A7
+1D7A7 <font> 03A8
+1D7A8 <font> 03A9
+1D7A9 <font> 2207
+1D7AA <font> 03B1
+1D7AB <font> 03B2
+1D7AC <font> 03B3
+1D7AD <font> 03B4
+1D7AE <font> 03B5
+1D7AF <font> 03B6
+1D7B0 <font> 03B7
+1D7B1 <font> 03B8
+1D7B2 <font> 03B9
+1D7B3 <font> 03BA
+1D7B4 <font> 03BB
+1D7B5 <font> 03BC
+1D7B6 <font> 03BD
+1D7B7 <font> 03BE
+1D7B8 <font> 03BF
+1D7B9 <font> 03C0
+1D7BA <font> 03C1
+1D7BB <font> 03C2
+1D7BC <font> 03C3
+1D7BD <font> 03C4
+1D7BE <font> 03C5
+1D7BF <font> 03C6
+1D7C0 <font> 03C7
+1D7C1 <font> 03C8
+1D7C2 <font> 03C9
+1D7C3 <font> 2202
+1D7C4 <font> 03F5
+1D7C5 <font> 03D1
+1D7C6 <font> 03F0
+1D7C7 <font> 03D5
+1D7C8 <font> 03F1
+1D7C9 <font> 03D6
+1D7CE <font> 0030
+1D7CF <font> 0031
+1D7D0 <font> 0032
+1D7D1 <font> 0033
+1D7D2 <font> 0034
+1D7D3 <font> 0035
+1D7D4 <font> 0036
+1D7D5 <font> 0037
+1D7D6 <font> 0038
+1D7D7 <font> 0039
+1D7D8 <font> 0030
+1D7D9 <font> 0031
+1D7DA <font> 0032
+1D7DB <font> 0033
+1D7DC <font> 0034
+1D7DD <font> 0035
+1D7DE <font> 0036
+1D7DF <font> 0037
+1D7E0 <font> 0038
+1D7E1 <font> 0039
+1D7E2 <font> 0030
+1D7E3 <font> 0031
+1D7E4 <font> 0032
+1D7E5 <font> 0033
+1D7E6 <font> 0034
+1D7E7 <font> 0035
+1D7E8 <font> 0036
+1D7E9 <font> 0037
+1D7EA <font> 0038
+1D7EB <font> 0039
+1D7EC <font> 0030
+1D7ED <font> 0031
+1D7EE <font> 0032
+1D7EF <font> 0033
+1D7F0 <font> 0034
+1D7F1 <font> 0035
+1D7F2 <font> 0036
+1D7F3 <font> 0037
+1D7F4 <font> 0038
+1D7F5 <font> 0039
+1D7F6 <font> 0030
+1D7F7 <font> 0031
+1D7F8 <font> 0032
+1D7F9 <font> 0033
+1D7FA <font> 0034
+1D7FB <font> 0035
+1D7FC <font> 0036
+1D7FD <font> 0037
+1D7FE <font> 0038
+1D7FF <font> 0039
+2F800 4E3D
+2F801 4E38
+2F802 4E41
+2F803 20122
+2F804 4F60
+2F805 4FAE
+2F806 4FBB
+2F807 5002
+2F808 507A
+2F809 5099
+2F80A 50E7
+2F80B 50CF
+2F80C 349E
+2F80D 2063A
+2F80E 514D
+2F80F 5154
+2F810 5164
+2F811 5177
+2F812 2051C
+2F813 34B9
+2F814 5167
+2F815 518D
+2F816 2054B
+2F817 5197
+2F818 51A4
+2F819 4ECC
+2F81A 51AC
+2F81B 51B5
+2F81C 291DF
+2F81D 51F5
+2F81E 5203
+2F81F 34DF
+2F820 523B
+2F821 5246
+2F822 5272
+2F823 5277
+2F824 3515
+2F825 52C7
+2F826 52C9
+2F827 52E4
+2F828 52FA
+2F829 5305
+2F82A 5306
+2F82B 5317
+2F82C 5349
+2F82D 5351
+2F82E 535A
+2F82F 5373
+2F830 537D
+2F831 2F833 537F
+2F834 20A2C
+2F835 7070
+2F836 53CA
+2F837 53DF
+2F838 20B63
+2F839 53EB
+2F83A 53F1
+2F83B 5406
+2F83C 549E
+2F83D 5438
+2F83E 5448
+2F83F 5468
+2F840 54A2
+2F841 54F6
+2F842 5510
+2F843 5553
+2F844 5563
+2F845 2F846 5584
+2F847 5599
+2F848 55AB
+2F849 55B3
+2F84A 55C2
+2F84B 5716
+2F84C 5606
+2F84D 5717
+2F84E 5651
+2F84F 5674
+2F850 5207
+2F851 58EE
+2F852 57CE
+2F853 57F4
+2F854 580D
+2F855 578B
+2F856 5832
+2F857 5831
+2F858 58AC
+2F859 214E4
+2F85A 58F2
+2F85B 58F7
+2F85C 5906
+2F85D 591A
+2F85E 5922
+2F85F 5962
+2F860 216A8
+2F861 216EA
+2F862 59EC
+2F863 5A1B
+2F864 5A27
+2F865 59D8
+2F866 5A66
+2F867 36EE
+2F868 2136A
+2F869 5B08
+2F86A 2F86B 5B3E
+2F86C 219C8
+2F86D 5BC3
+2F86E 5BD8
+2F86F 5BE7
+2F870 5BF3
+2F871 21B18
+2F872 5BFF
+2F873 5C06
+2F874 5F33
+2F875 5C22
+2F876 3781
+2F877 5C60
+2F878 5C6E
+2F879 5CC0
+2F87A 5C8D
+2F87B 21DE4
+2F87C 5D43
+2F87D 21DE6
+2F87E 5D6E
+2F87F 5D6B
+2F880 5D7C
+2F881 5DE1
+2F882 5DE2
+2F883 382F
+2F884 5DFD
+2F885 5E28
+2F886 5E3D
+2F887 5E69
+2F888 3862
+2F889 22183
+2F88A 387C
+2F88B 5EB0
+2F88C 5EB3
+2F88D 5EB6
+2F88E 5ECA
+2F88F 2A392
+2F890 5EFE
+2F891 2F892 22331
+2F893 8201
+2F894 2F895 5F22
+2F896 38C7
+2F897 232B8
+2F898 261DA
+2F899 5F62
+2F89A 5F6B
+2F89B 38E3
+2F89C 5F9A
+2F89D 5FCD
+2F89E 5FD7
+2F89F 5FF9
+2F8A0 6081
+2F8A1 393A
+2F8A2 391C
+2F8A3 6094
+2F8A4 226D4
+2F8A5 60C7
+2F8A6 6148
+2F8A7 614C
+2F8A8 614E
+2F8A9 614C
+2F8AA 617A
+2F8AB 618E
+2F8AC 61B2
+2F8AD 61A4
+2F8AE 61AF
+2F8AF 61DE
+2F8B0 61F2
+2F8B1 61F6
+2F8B2 6210
+2F8B3 621B
+2F8B4 625D
+2F8B5 62B1
+2F8B6 62D4
+2F8B7 6350
+2F8B8 22B0C
+2F8B9 633D
+2F8BA 62FC
+2F8BB 6368
+2F8BC 6383
+2F8BD 63E4
+2F8BE 22BF1
+2F8BF 6422
+2F8C0 63C5
+2F8C1 63A9
+2F8C2 3A2E
+2F8C3 6469
+2F8C4 647E
+2F8C5 649D
+2F8C6 6477
+2F8C7 3A6C
+2F8C8 654F
+2F8C9 656C
+2F8CA 2300A
+2F8CB 65E3
+2F8CC 66F8
+2F8CD 6649
+2F8CE 3B19
+2F8CF 6691
+2F8D0 3B08
+2F8D1 3AE4
+2F8D2 5192
+2F8D3 5195
+2F8D4 6700
+2F8D5 669C
+2F8D6 80AD
+2F8D7 43D9
+2F8D8 6717
+2F8D9 671B
+2F8DA 6721
+2F8DB 675E
+2F8DC 6753
+2F8DD 233C3
+2F8DE 3B49
+2F8DF 67FA
+2F8E0 6785
+2F8E1 6852
+2F8E2 6885
+2F8E3 2346D
+2F8E4 688E
+2F8E5 681F
+2F8E6 6914
+2F8E7 3B9D
+2F8E8 6942
+2F8E9 69A3
+2F8EA 69EA
+2F8EB 6AA8
+2F8EC 236A3
+2F8ED 6ADB
+2F8EE 3C18
+2F8EF 6B21
+2F8F0 238A7
+2F8F1 6B54
+2F8F2 3C4E
+2F8F3 6B72
+2F8F4 6B9F
+2F8F5 6BBA
+2F8F6 6BBB
+2F8F7 23A8D
+2F8F8 21D0B
+2F8F9 23AFA
+2F8FA 6C4E
+2F8FB 23CBC
+2F8FC 6CBF
+2F8FD 6CCD
+2F8FE 6C67
+2F8FF 6D16
+2F900 6D3E
+2F901 6D77
+2F902 6D41
+2F903 6D69
+2F904 6D78
+2F905 6D85
+2F906 23D1E
+2F907 6D34
+2F908 6E2F
+2F909 6E6E
+2F90A 3D33
+2F90B 6ECB
+2F90C 6EC7
+2F90D 23ED1
+2F90E 6DF9
+2F90F 6F6E
+2F910 23F5E
+2F911 23F8E
+2F912 6FC6
+2F913 7039
+2F914 701E
+2F915 701B
+2F916 3D96
+2F917 704A
+2F918 707D
+2F919 7077
+2F91A 70AD
+2F91B 20525
+2F91C 7145
+2F91D 24263
+2F91E 719C
+2F91F 43AB
+2F920 7228
+2F921 7235
+2F922 7250
+2F923 24608
+2F924 7280
+2F925 7295
+2F926 24735
+2F927 24814
+2F928 737A
+2F929 738B
+2F92A 3EAC
+2F92B 73A5
+2F92C 2F92D 3EB8
+2F92E 7447
+2F92F 745C
+2F930 7471
+2F931 7485
+2F932 74CA
+2F933 3F1B
+2F934 7524
+2F935 24C36
+2F936 753E
+2F937 24C92
+2F938 7570
+2F939 2219F
+2F93A 7610
+2F93B 24FA1
+2F93C 24FB8
+2F93D 25044
+2F93E 3FFC
+2F93F 4008
+2F940 76F4
+2F941 250F3
+2F942 250F2
+2F943 25119
+2F944 25133
+2F945 771E
+2F946 2F947 771F
+2F948 774A
+2F949 4039
+2F94A 778B
+2F94B 4046
+2F94C 4096
+2F94D 2541D
+2F94E 784E
+2F94F 788C
+2F950 78CC
+2F951 40E3
+2F952 25626
+2F953 7956
+2F954 2569A
+2F955 256C5
+2F956 798F
+2F957 79EB
+2F958 412F
+2F959 7A40
+2F95A 7A4A
+2F95B 7A4F
+2F95C 2597C
+2F95D 2F95E 25AA7
+2F95F 7AAE
+2F960 4202
+2F961 25BAB
+2F962 7BC6
+2F963 7BC9
+2F964 4227
+2F965 25C80
+2F966 7CD2
+2F967 42A0
+2F968 7CE8
+2F969 7CE3
+2F96A 7D00
+2F96B 25F86
+2F96C 7D63
+2F96D 4301
+2F96E 7DC7
+2F96F 7E02
+2F970 7E45
+2F971 4334
+2F972 26228
+2F973 26247
+2F974 4359
+2F975 262D9
+2F976 7F7A
+2F977 2633E
+2F978 7F95
+2F979 7FFA
+2F97A 8005
+2F97B 264DA
+2F97C 26523
+2F97D 8060
+2F97E 265A8
+2F97F 8070
+2F980 2335F
+2F981 43D5
+2F982 80B2
+2F983 8103
+2F984 440B
+2F985 813E
+2F986 5AB5
+2F987 267A7
+2F988 267B5
+2F989 23393
+2F98A 2339C
+2F98B 8201
+2F98C 8204
+2F98D 8F9E
+2F98E 446B
+2F98F 8291
+2F990 828B
+2F991 829D
+2F992 52B3
+2F993 82B1
+2F994 82B3
+2F995 82BD
+2F996 82E6
+2F997 26B3C
+2F998 82E5
+2F999 831D
+2F99A 8363
+2F99B 83AD
+2F99C 8323
+2F99D 83BD
+2F99E 83E7
+2F99F 8457
+2F9A0 8353
+2F9A1 83CA
+2F9A2 83CC
+2F9A3 83DC
+2F9A4 26C36
+2F9A5 26D6B
+2F9A6 26CD5
+2F9A7 452B
+2F9A8 84F1
+2F9A9 84F3
+2F9AA 8516
+2F9AB 273CA
+2F9AC 8564
+2F9AD 26F2C
+2F9AE 455D
+2F9AF 4561
+2F9B0 26FB1
+2F9B1 270D2
+2F9B2 456B
+2F9B3 8650
+2F9B4 865C
+2F9B5 8667
+2F9B6 8669
+2F9B7 86A9
+2F9B8 8688
+2F9B9 870E
+2F9BA 86E2
+2F9BB 8779
+2F9BC 8728
+2F9BD 876B
+2F9BE 8786
+2F9BF 4D57
+2F9C0 87E1
+2F9C1 8801
+2F9C2 45F9
+2F9C3 8860
+2F9C4 8863
+2F9C5 27667
+2F9C6 88D7
+2F9C7 88DE
+2F9C8 4635
+2F9C9 88FA
+2F9CA 34BB
+2F9CB 278AE
+2F9CC 27966
+2F9CD 46BE
+2F9CE 46C7
+2F9CF 8AA0
+2F9D0 8AED
+2F9D1 8B8A
+2F9D2 8C55
+2F9D3 27CA8
+2F9D4 8CAB
+2F9D5 8CC1
+2F9D6 8D1B
+2F9D7 8D77
+2F9D8 27F2F
+2F9D9 20804
+2F9DA 8DCB
+2F9DB 8DBC
+2F9DC 8DF0
+2F9DD 208DE
+2F9DE 8ED4
+2F9DF 8F38
+2F9E0 285D2
+2F9E1 285ED
+2F9E2 9094
+2F9E3 90F1
+2F9E4 9111
+2F9E5 2872E
+2F9E6 911B
+2F9E7 9238
+2F9E8 92D7
+2F9E9 92D8
+2F9EA 927C
+2F9EB 93F9
+2F9EC 9415
+2F9ED 28BFA
+2F9EE 958B
+2F9EF 4995
+2F9F0 95B7
+2F9F1 28D77
+2F9F2 49E6
+2F9F3 96C3
+2F9F4 5DB2
+2F9F5 9723
+2F9F6 29145
+2F9F7 2921A
+2F9F8 4A6E
+2F9F9 4A76
+2F9FA 97E0
+2F9FB 2940A
+2F9FC 4AB2
+2F9FD 29496
+2F9FE 2F9FF 980B
+2FA00 9829
+2FA01 295B6
+2FA02 98E2
+2FA03 4B33
+2FA04 9929
+2FA05 99A7
+2FA06 99C2
+2FA07 99FE
+2FA08 4BCE
+2FA09 29B30
+2FA0A 9B12
+2FA0B 9C40
+2FA0C 9CFD
+2FA0D 4CCE
+2FA0E 4CED
+2FA0F 9D67
+2FA10 2A0CE
+2FA11 4CF8
+2FA12 2A105
+2FA13 2A20E
+2FA14 2A291
+2FA15 9EBB
+2FA16 4D56
+2FA17 9EF9
+2FA18 9EFE
+2FA19 9F05
+2FA1A 9F0F
+2FA1B 9F16
+2FA1C 9F3B
+2FA1D 2A600
+END
diff --git a/Master/xemtex/perl/lib/unicore/Exact.pl b/Master/xemtex/perl/lib/unicore/Exact.pl
new file mode 100644
index 00000000000..61ba06a9e70
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/Exact.pl
@@ -0,0 +1,110 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+##
+## Data in this file used by ../utf8_heavy.pl
+##
+
+## Mapping from name to filename in ./lib
+%utf8::Exact = (
+ ASCII => 'ASCII',
+ All => 'Any',
+ Alnum => 'Alnum',
+ Alpha => 'Alpha',
+ Any => 'Any',
+ Assigned => 'Assigned',
+ BidiAL => 'BidiAL',
+ BidiAN => 'BidiAN',
+ BidiB => 'BidiB',
+ BidiBN => 'BidiBN',
+ BidiCS => 'BidiCS',
+ BidiEN => 'BidiEN',
+ BidiES => 'BidiES',
+ BidiET => 'BidiET',
+ BidiL => 'BidiL',
+ BidiLRE => 'BidiLRE',
+ BidiLRO => 'BidiLRO',
+ BidiNSM => 'BidiNSM',
+ BidiON => 'BidiON',
+ BidiPDF => 'BidiPDF',
+ BidiR => 'BidiR',
+ BidiRLE => 'BidiRLE',
+ BidiRLO => 'BidiRLO',
+ BidiS => 'BidiS',
+ BidiWS => 'BidiWS',
+ Blank => 'Blank',
+ C => 'C',
+ Canon => 'Canon',
+ Cc => 'Cc',
+ Cf => 'Cf',
+ Cn => 'Cn',
+ Cntrl => 'Cntrl',
+ Co => 'Co',
+ Compat => 'Compat',
+ Cs => 'Cs',
+ DCcircle => 'DCcircle',
+ DCcompat => 'DCcompat',
+ DCfinal => 'DCfinal',
+ DCfont => 'DCfont',
+ DCfraction => 'DCfracti',
+ DCinitial => 'DCinitia',
+ DCisolated => 'DCisolat',
+ DCmedial => 'DCmedial',
+ DCnarrow => 'DCnarrow',
+ DCnoBreak => 'DCnoBrea',
+ DCsmall => 'DCsmall',
+ DCsquare => 'DCsquare',
+ DCsub => 'DCsub',
+ DCsuper => 'DCsuper',
+ DCvertical => 'DCvertic',
+ DCwide => 'DCwide',
+ Digit => 'Digit',
+ Graph => 'Graph',
+ L => 'L',
+'L&' => 'L_',
+ Ll => 'Ll',
+ Lm => 'Lm',
+ Lo => 'Lo',
+ Lower => 'Lower',
+ Lt => 'Lt',
+ Lu => 'Lu',
+ M => 'M',
+ Mc => 'Mc',
+ Me => 'Me',
+ Mirrored => 'Mirrored',
+ Mn => 'Mn',
+ N => 'N',
+ Nd => 'Nd',
+ Nl => 'Nl',
+ No => 'No',
+ P => 'P',
+ Pc => 'Pc',
+ Pd => 'Pd',
+ Pe => 'Pe',
+ Pf => 'Pf',
+ Pi => 'Pi',
+ Po => 'Po',
+ Print => 'Print',
+ Ps => 'Ps',
+ Punct => 'Punct',
+ S => 'S',
+ Sc => 'Sc',
+ Sk => 'Sk',
+ Sm => 'Sm',
+ So => 'So',
+ Space => 'Space',
+ SpacePerl => 'SpacePer',
+ Title => 'Title',
+ Upper => 'Upper',
+ Word => 'Word',
+ XDigit => 'XDigit',
+ Z => 'Z',
+ Zl => 'Zl',
+ Zp => 'Zp',
+ Zs => 'Zs',
+ _CanonDCIJ => '_CanonDC',
+ _CaseIgnorable => '_CaseIgn',
+ _CombAbove => '_CombAbo',
+);
+1;
diff --git a/Master/xemtex/perl/lib/unicore/JamoShort.pl b/Master/xemtex/perl/lib/unicore/JamoShort.pl
new file mode 100644
index 00000000000..4ab02fd5449
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/JamoShort.pl
@@ -0,0 +1,73 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+return <<'END';
+1100 G
+1101 GG
+1102 N
+1103 D
+1104 DD
+1105 R
+1106 M
+1107 B
+1108 BB
+1109 S
+110A SS
+110B
+110C J
+110D JJ
+110E C
+110F K
+1110 T
+1111 P
+1112 H
+1161 A
+1162 AE
+1163 YA
+1164 YAE
+1165 EO
+1166 E
+1167 YEO
+1168 YE
+1169 O
+116A WA
+116B WAE
+116C OE
+116D YO
+116E U
+116F WEO
+1170 WE
+1171 WI
+1172 YU
+1173 EU
+1174 YI
+1175 I
+11A8 G
+11A9 GG
+11AA GS
+11AB N
+11AC NJ
+11AD NH
+11AE D
+11AF L
+11B0 LG
+11B1 LM
+11B2 LB
+11B3 LS
+11B4 LT
+11B5 LP
+11B6 LH
+11B7 M
+11B8 B
+11B9 BS
+11BA S
+11BB SS
+11BC NG
+11BD J
+11BE C
+11BF K
+11C0 T
+11C1 P
+11C2 H
+END
diff --git a/Master/xemtex/perl/lib/unicore/Lbrk.pl b/Master/xemtex/perl/lib/unicore/Lbrk.pl
new file mode 100644
index 00000000000..0a4eb153697
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/Lbrk.pl
@@ -0,0 +1,1073 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+return <<'END';
+0000 0008 CM
+0009 BA
+000A LF
+000B CM
+000C BK
+000D CR
+000E 001F CM
+0020 SP
+0021 EX
+0022 QU
+0023 AL
+0024 PR
+0025 PO
+0026 AL
+0027 QU
+0028 OP
+0029 CL
+002A AL
+002B PR
+002C IS
+002D HY
+002E IS
+002F SY
+0030 0039 NU
+003A 003B IS
+003C 003E AL
+003F EX
+0040 005A AL
+005B OP
+005C PR
+005D CL
+005E 007A AL
+007B OP
+007C BA
+007D CL
+007E AL
+007F 009F CM
+00A0 GL
+00A1 AI
+00A2 PO
+00A3 00A5 PR
+00A6 AL
+00A7 00A8 AI
+00A9 AL
+00AA AI
+00AB QU
+00AC AL
+00AD BA
+00AE 00AF AL
+00B0 PO
+00B1 PR
+00B2 00B3 AI
+00B4 BB
+00B5 AL
+00B6 00BA AI
+00BB QU
+00BC 00BF AI
+00C0 00C5 AL
+00C6 AI
+00C7 00CF AL
+00D0 AI
+00D1 00D6 AL
+00D7 00D8 AI
+00D9 00DD AL
+00DE 00E1 AI
+00E2 00E5 AL
+00E6 AI
+00E7 AL
+00E8 00EA AI
+00EB AL
+00EC 00ED AI
+00EE 00EF AL
+00F0 AI
+00F1 AL
+00F2 00F3 AI
+00F4 00F6 AL
+00F7 00FA AI
+00FB AL
+00FC AI
+00FD AL
+00FE AI
+00FF 0100 AL
+0101 AI
+0102 0110 AL
+0111 AI
+0112 AL
+0113 AI
+0114 011A AL
+011B AI
+011C 0125 AL
+0126 0127 AI
+0128 012A AL
+012B AI
+012C 0130 AL
+0131 0133 AI
+0134 0137 AL
+0138 AI
+0139 013E AL
+013F 0142 AI
+0143 AL
+0144 AI
+0145 0147 AL
+0148 014A AI
+014B 014C AL
+014D AI
+014E 0151 AL
+0152 0153 AI
+0154 0165 AL
+0166 0167 AI
+0168 016A AL
+016B AI
+016C 01CD AL
+01CE AI
+01CF AL
+01D0 AI
+01D1 AL
+01D2 AI
+01D3 AL
+01D4 AI
+01D5 AL
+01D6 AI
+01D7 AL
+01D8 AI
+01D9 AL
+01DA AI
+01DB AL
+01DC AI
+01DD 0220 AL
+0222 0233 AL
+0250 AL
+0251 AI
+0252 0260 AL
+0261 AI
+0262 02AD AL
+02B0 02C6 AL
+02C7 AI
+02C8 BB
+02C9 02CB AI
+02CC BB
+02CD AI
+02CE 02CF AL
+02D0 AI
+02D1 02D7 AL
+02D8 02DB AI
+02DC AL
+02DD AI
+02DE 02EE AL
+0300 034F CM
+0360 036F CM
+0374 0375 AL
+037A AL
+037E AL
+0384 038A AL
+038C AL
+038E 0390 AL
+0391 03A1 AI
+03A3 03A9 AI
+03AA 03B0 AL
+03B1 03C1 AI
+03C2 AL
+03C3 03C9 AI
+03CA 03CE AL
+03D0 03F6 AL
+0400 AL
+0401 AI
+0402 040F AL
+0410 044F AI
+0450 AL
+0451 AI
+0452 0482 AL
+0483 0486 CM
+0488 0489 CM
+048A 04CE AL
+04D0 04F5 AL
+04F8 04F9 AL
+0500 050F AL
+0531 0556 AL
+0559 055F AL
+0561 0587 AL
+0589 IS
+058A BA
+0591 05A1 CM
+05A3 05B9 CM
+05BB 05BD CM
+05BE AL
+05BF CM
+05C0 AL
+05C1 05C2 CM
+05C3 AL
+05C4 CM
+05D0 05EA AL
+05F0 05F4 AL
+060C AL
+061B AL
+061F AL
+0621 063A AL
+0640 064A AL
+064B 0655 CM
+0660 0669 NU
+066A 066F AL
+0670 CM
+0671 06D5 AL
+06D6 06E4 CM
+06E5 06E6 AL
+06E7 06E8 CM
+06E9 AL
+06EA 06ED CM
+06F0 06F9 NU
+06FA 06FE AL
+0700 070D AL
+070F CM
+0710 AL
+0711 CM
+0712 072C AL
+0730 074A CM
+0780 07A5 AL
+07A6 07B0 CM
+07B1 AL
+0901 0903 CM
+0905 0939 AL
+093C CM
+093D AL
+093E 094D CM
+0950 AL
+0951 0954 CM
+0958 0961 AL
+0962 0963 CM
+0964 0965 AL
+0966 096F NU
+0970 AL
+0981 0983 CM
+0985 098C AL
+098F 0990 AL
+0993 09A8 AL
+09AA 09B0 AL
+09B2 AL
+09B6 09B9 AL
+09BC CM
+09BE 09C4 CM
+09C7 09C8 CM
+09CB 09CD CM
+09D7 CM
+09DC 09DD AL
+09DF 09E1 AL
+09E2 09E3 CM
+09E6 09EF NU
+09F0 09F1 AL
+09F2 09F3 PR
+09F4 09FA AL
+0A02 CM
+0A05 0A0A AL
+0A0F 0A10 AL
+0A13 0A28 AL
+0A2A 0A30 AL
+0A32 0A33 AL
+0A35 0A36 AL
+0A38 0A39 AL
+0A3C CM
+0A3E 0A42 CM
+0A47 0A48 CM
+0A4B 0A4D CM
+0A59 0A5C AL
+0A5E AL
+0A66 0A6F NU
+0A70 0A71 CM
+0A72 0A74 AL
+0A81 0A83 CM
+0A85 0A8B AL
+0A8D AL
+0A8F 0A91 AL
+0A93 0AA8 AL
+0AAA 0AB0 AL
+0AB2 0AB3 AL
+0AB5 0AB9 AL
+0ABC CM
+0ABD AL
+0ABE 0AC5 CM
+0AC7 0AC9 CM
+0ACB 0ACD CM
+0AD0 AL
+0AE0 AL
+0AE6 0AEF NU
+0B01 0B03 CM
+0B05 0B0C AL
+0B0F 0B10 AL
+0B13 0B28 AL
+0B2A 0B30 AL
+0B32 0B33 AL
+0B36 0B39 AL
+0B3C CM
+0B3D AL
+0B3E 0B43 CM
+0B47 0B48 CM
+0B4B 0B4D CM
+0B56 0B57 CM
+0B5C 0B5D AL
+0B5F 0B61 AL
+0B66 0B6F NU
+0B70 AL
+0B82 CM
+0B83 AL
+0B85 0B8A AL
+0B8E 0B90 AL
+0B92 0B95 AL
+0B99 0B9A AL
+0B9C AL
+0B9E 0B9F AL
+0BA3 0BA4 AL
+0BA8 0BAA AL
+0BAE 0BB5 AL
+0BB7 0BB9 AL
+0BBE 0BC2 CM
+0BC6 0BC8 CM
+0BCA 0BCD CM
+0BD7 CM
+0BE7 0BEF NU
+0BF0 0BF2 AL
+0C01 0C03 CM
+0C05 0C0C AL
+0C0E 0C10 AL
+0C12 0C28 AL
+0C2A 0C33 AL
+0C35 0C39 AL
+0C3E 0C44 CM
+0C46 0C48 CM
+0C4A 0C4D CM
+0C55 0C56 CM
+0C60 0C61 AL
+0C66 0C6F NU
+0C82 0C83 CM
+0C85 0C8C AL
+0C8E 0C90 AL
+0C92 0CA8 AL
+0CAA 0CB3 AL
+0CB5 0CB9 AL
+0CBE 0CC4 CM
+0CC6 0CC8 CM
+0CCA 0CCD CM
+0CD5 0CD6 CM
+0CDE AL
+0CE0 0CE1 AL
+0CE6 0CEF NU
+0D02 0D03 CM
+0D05 0D0C AL
+0D0E 0D10 AL
+0D12 0D28 AL
+0D2A 0D39 AL
+0D3E 0D43 CM
+0D46 0D48 CM
+0D4A 0D4D CM
+0D57 CM
+0D60 0D61 AL
+0D66 0D6F NU
+0D82 0D83 CM
+0D85 0D96 AL
+0D9A 0DB1 AL
+0DB3 0DBB AL
+0DBD AL
+0DC0 0DC6 AL
+0DCA CM
+0DCF 0DD4 CM
+0DD6 CM
+0DD8 0DDF CM
+0DF2 0DF3 CM
+0DF4 AL
+0E01 0E30 SA
+0E31 CM
+0E32 0E33 SA
+0E34 0E3A CM
+0E3F PR
+0E40 0E46 SA
+0E47 0E4E CM
+0E4F AL
+0E50 0E59 NU
+0E5A 0E5B NS
+0E81 0E82 SA
+0E84 SA
+0E87 0E88 SA
+0E8A SA
+0E8D SA
+0E94 0E97 SA
+0E99 0E9F SA
+0EA1 0EA3 SA
+0EA5 SA
+0EA7 SA
+0EAA 0EAB SA
+0EAD 0EB0 SA
+0EB1 CM
+0EB2 0EB3 SA
+0EB4 0EB9 CM
+0EBB 0EBC CM
+0EBD SA
+0EC0 0EC4 SA
+0EC6 SA
+0EC8 0ECD CM
+0ED0 0ED9 NU
+0EDC 0EDD SA
+0F00 0F0A AL
+0F0B BA
+0F0C GL
+0F0D 0F17 AL
+0F18 0F19 CM
+0F1A 0F1F AL
+0F20 0F29 NU
+0F2A 0F34 AL
+0F35 CM
+0F36 AL
+0F37 CM
+0F38 AL
+0F39 CM
+0F3A OP
+0F3B CL
+0F3C OP
+0F3D CL
+0F3E 0F3F CM
+0F40 0F47 AL
+0F49 0F6A AL
+0F71 0F84 CM
+0F85 AL
+0F86 0F87 CM
+0F88 0F8B AL
+0F90 0F97 CM
+0F99 0FBC CM
+0FBE 0FC5 AL
+0FC6 CM
+0FC7 0FCC AL
+0FCF AL
+1000 1021 SA
+1023 1027 SA
+1029 102A SA
+102C 1032 CM
+1036 1039 CM
+1040 1049 NU
+104A 104F AL
+1050 1055 SA
+1056 1059 CM
+10A0 10C5 AL
+10D0 10F8 AL
+10FB AL
+1100 1159 ID
+115F ID
+1160 11A2 CM
+11A8 11F9 CM
+1200 1206 AL
+1208 1246 AL
+1248 AL
+124A 124D AL
+1250 1256 AL
+1258 AL
+125A 125D AL
+1260 1286 AL
+1288 AL
+128A 128D AL
+1290 12AE AL
+12B0 AL
+12B2 12B5 AL
+12B8 12BE AL
+12C0 AL
+12C2 12C5 AL
+12C8 12CE AL
+12D0 12D6 AL
+12D8 12EE AL
+12F0 130E AL
+1310 AL
+1312 1315 AL
+1318 131E AL
+1320 1346 AL
+1348 135A AL
+1361 BA
+1362 1368 AL
+1369 1371 NU
+1372 137C AL
+13A0 13F4 AL
+1401 1676 AL
+1680 BA
+1681 169A AL
+169B OP
+169C CL
+16A0 16F0 AL
+1700 170C AL
+170E 1711 AL
+1712 1714 CM
+1720 1731 AL
+1732 1734 CM
+1735 1736 AL
+1740 1751 AL
+1752 1753 CM
+1760 176C AL
+176E 1770 AL
+1772 1773 CM
+1780 17B3 SA
+17B4 17D3 CM
+17D4 NS
+17D5 BA
+17D6 17DA NS
+17DB PR
+17DC AL
+17E0 17E9 NU
+1800 1805 AL
+1806 BB
+1807 180A AL
+180B 180E CM
+1810 1819 NU
+1820 1877 AL
+1880 18A8 AL
+18A9 CM
+1E00 1E9B AL
+1EA0 1EF9 AL
+1F00 1F15 AL
+1F18 1F1D AL
+1F20 1F45 AL
+1F48 1F4D AL
+1F50 1F57 AL
+1F59 AL
+1F5B AL
+1F5D AL
+1F5F 1F7D AL
+1F80 1FB4 AL
+1FB6 1FC4 AL
+1FC6 1FD3 AL
+1FD6 1FDB AL
+1FDD 1FEF AL
+1FF2 1FF4 AL
+1FF6 1FFE AL
+2000 2006 BA
+2007 GL
+2008 200A BA
+200B ZW
+200C 200F CM
+2010 BA
+2011 GL
+2012 2013 BA
+2014 B2
+2015 2016 AI
+2017 AL
+2018 2019 QU
+201A OP
+201B 201D QU
+201E OP
+201F QU
+2020 2021 AI
+2022 2023 AL
+2024 2026 IN
+2027 BA
+2028 2029 BK
+202A 202E CM
+202F GL
+2030 2037 PO
+2038 AL
+2039 203A QU
+203B AI
+203C NS
+203D 2043 AL
+2044 NS
+2045 OP
+2046 CL
+2047 2052 AL
+2057 AL
+205F BA
+2060 GL
+2061 2063 AL
+206A 206F CM
+2070 2071 AL
+2074 AI
+2075 207C AL
+207D OP
+207E CL
+207F AI
+2080 AL
+2081 2084 AI
+2085 208C AL
+208D OP
+208E CL
+20A0 20A6 PR
+20A7 PO
+20A8 20B1 PR
+20D0 20EA CM
+2100 2102 AL
+2103 PO
+2104 AL
+2105 AI
+2106 2108 AL
+2109 PO
+210A 2112 AL
+2113 AI
+2114 2115 AL
+2116 PR
+2117 2120 AL
+2121 2122 AI
+2123 2125 AL
+2126 PO
+2127 212A AL
+212B AI
+212C 213A AL
+213D 213F AL
+2140 AI
+2141 214B AL
+2153 AL
+2154 2155 AI
+2156 215A AL
+215B AI
+215C 215D AL
+215E AI
+215F AL
+2160 216B AI
+216C 216F AL
+2170 2179 AI
+217A 2183 AL
+2190 2199 AI
+219A 21D1 AL
+21D2 AI
+21D3 AL
+21D4 AI
+21D5 21FF AL
+2200 AI
+2201 AL
+2202 2203 AI
+2204 2206 AL
+2207 2208 AI
+2209 220A AL
+220B AI
+220C 220E AL
+220F AI
+2210 AL
+2211 AI
+2212 2213 PR
+2214 AL
+2215 AI
+2216 2219 AL
+221A AI
+221B 221C AL
+221D 2220 AI
+2221 2222 AL
+2223 AI
+2224 AL
+2225 AI
+2226 AL
+2227 222C AI
+222D AL
+222E AI
+222F 2233 AL
+2234 2237 AI
+2238 223B AL
+223C 223D AI
+223E 2247 AL
+2248 AI
+2249 224B AL
+224C AI
+224D 2251 AL
+2252 AI
+2253 225F AL
+2260 2261 AI
+2262 2263 AL
+2264 2267 AI
+2268 2269 AL
+226A 226B AI
+226C 226D AL
+226E 226F AI
+2270 2281 AL
+2282 2283 AI
+2284 2285 AL
+2286 2287 AI
+2288 2294 AL
+2295 AI
+2296 2298 AL
+2299 AI
+229A 22A4 AL
+22A5 AI
+22A6 22BE AL
+22BF AI
+22C0 2311 AL
+2312 AI
+2313 2328 AL
+2329 OP
+232A CL
+232B 23B3 AL
+23B4 OP
+23B5 CL
+23B6 QU
+23B7 23CE AL
+2400 2426 AL
+2440 244A AL
+2460 24BF AI
+24C0 24CF AL
+24D0 24E9 AI
+24EA AL
+24EB 24FE AI
+2500 254B AI
+254C 254F AL
+2550 2574 AI
+2575 257F AL
+2580 258F AI
+2590 2591 AL
+2592 2595 AI
+2596 259F AL
+25A0 25A1 AI
+25A2 AL
+25A3 25A9 AI
+25AA 25B1 AL
+25B2 25B3 AI
+25B4 25B5 AL
+25B6 25B7 AI
+25B8 25BB AL
+25BC 25BD AI
+25BE 25BF AL
+25C0 25C1 AI
+25C2 25C5 AL
+25C6 25C8 AI
+25C9 25CA AL
+25CB AI
+25CC 25CD AL
+25CE 25D1 AI
+25D2 25E1 AL
+25E2 25E5 AI
+25E6 25EE AL
+25EF AI
+25F0 2604 AL
+2605 2606 AI
+2607 2608 AL
+2609 AI
+260A 260D AL
+260E 260F AI
+2610 2613 AL
+2616 2617 AI
+2619 261B AL
+261C AI
+261D AL
+261E AI
+261F 263F AL
+2640 AI
+2641 AL
+2642 AI
+2643 265F AL
+2660 2661 AI
+2662 AL
+2663 2665 AI
+2666 AL
+2667 266A AI
+266B AL
+266C 266D AI
+266E AL
+266F AI
+2670 267D AL
+2680 2689 AL
+2701 2704 AL
+2706 2709 AL
+270C 2727 AL
+2729 274B AL
+274D AL
+274F 2752 AL
+2756 AL
+2758 275A AL
+275B 275E QU
+2761 AL
+2762 2763 EX
+2764 2767 AL
+2768 OP
+2769 CL
+276A OP
+276B CL
+276C OP
+276D CL
+276E OP
+276F CL
+2770 OP
+2771 CL
+2772 OP
+2773 CL
+2774 OP
+2775 CL
+2776 2794 AL
+2798 27AF AL
+27B1 27BE AL
+27D0 27E5 AL
+27E6 OP
+27E7 CL
+27E8 OP
+27E9 CL
+27EA OP
+27EB CL
+27F0 2982 AL
+2983 OP
+2984 CL
+2985 OP
+2986 CL
+2987 OP
+2988 CL
+2989 OP
+298A CL
+298B OP
+298C CL
+298D OP
+298E CL
+298F OP
+2990 CL
+2991 OP
+2992 CL
+2993 OP
+2994 CL
+2995 OP
+2996 CL
+2997 OP
+2998 CL
+2999 29D7 AL
+29D8 OP
+29D9 CL
+29DA OP
+29DB CL
+29DC 29FB AL
+29FC OP
+29FD CL
+29FE 2AFF AL
+2E80 2E99 ID
+2E9B 2EF3 ID
+2F00 2FD5 ID
+2FF0 2FFB ID
+3000 ID
+3001 3002 CL
+3003 3004 ID
+3005 NS
+3006 3007 ID
+3008 OP
+3009 CL
+300A OP
+300B CL
+300C OP
+300D CL
+300E OP
+300F CL
+3010 OP
+3011 CL
+3012 3013 ID
+3014 OP
+3015 CL
+3016 OP
+3017 CL
+3018 OP
+3019 CL
+301A OP
+301B CL
+301C NS
+301D OP
+301E 301F CL
+3020 3029 ID
+302A 302F CM
+3030 303A ID
+303B 303C NS
+303D 303F ID
+3041 NS
+3042 ID
+3043 NS
+3044 ID
+3045 NS
+3046 ID
+3047 NS
+3048 ID
+3049 NS
+304A 3062 ID
+3063 NS
+3064 3082 ID
+3083 NS
+3084 ID
+3085 NS
+3086 ID
+3087 NS
+3088 308D ID
+308E NS
+308F 3094 ID
+3095 3096 NS
+3099 309A CM
+309B 309E NS
+309F ID
+30A0 30A1 NS
+30A2 ID
+30A3 NS
+30A4 ID
+30A5 NS
+30A6 ID
+30A7 NS
+30A8 ID
+30A9 NS
+30AA 30C2 ID
+30C3 NS
+30C4 30E2 ID
+30E3 NS
+30E4 ID
+30E5 NS
+30E6 ID
+30E7 NS
+30E8 30ED ID
+30EE NS
+30EF 30F4 ID
+30F5 30F6 NS
+30F7 30FA ID
+30FB NS
+30FC ID
+30FD NS
+30FE 30FF ID
+3105 312C ID
+3131 318E ID
+3190 31B7 ID
+31F0 31FF NS
+3200 321C ID
+3220 3243 ID
+3251 327B ID
+327F 32CB ID
+32D0 32FE ID
+3300 3376 ID
+337B 33DD ID
+33E0 33FE ID
+3400 4DB5 ID
+4E00 9FA5 ID
+A000 A48C ID
+A490 A4C6 ID
+AC00 D7A3 ID
+D800 DFFF SG
+E000 F8FF XX
+F900 FA2D ID
+FA30 FA6A ID
+FB00 FB06 AL
+FB13 FB17 AL
+FB1D AL
+FB1E CM
+FB1F FB36 AL
+FB38 FB3C AL
+FB3E AL
+FB40 FB41 AL
+FB43 FB44 AL
+FB46 FBB1 AL
+FBD3 FD3D AL
+FD3E OP
+FD3F CL
+FD50 FD8F AL
+FD92 FDC7 AL
+FDF0 FDFB AL
+FDFC PO
+FE00 FE0F CM
+FE20 FE23 CM
+FE30 FE34 ID
+FE35 OP
+FE36 CL
+FE37 OP
+FE38 CL
+FE39 OP
+FE3A CL
+FE3B OP
+FE3C CL
+FE3D OP
+FE3E CL
+FE3F OP
+FE40 CL
+FE41 OP
+FE42 CL
+FE43 OP
+FE44 CL
+FE45 FE46 ID
+FE49 FE4F ID
+FE50 CL
+FE51 ID
+FE52 CL
+FE54 FE55 NS
+FE56 FE57 EX
+FE58 ID
+FE59 OP
+FE5A CL
+FE5B OP
+FE5C CL
+FE5D OP
+FE5E CL
+FE5F FE66 ID
+FE68 ID
+FE69 PR
+FE6A PO
+FE6B ID
+FE70 FE74 AL
+FE76 FEFC AL
+FEFF GL
+FF01 EX
+FF02 FF03 ID
+FF04 PR
+FF05 PO
+FF06 FF07 ID
+FF08 OP
+FF09 CL
+FF0A FF0B ID
+FF0C CL
+FF0D ID
+FF0E CL
+FF0F FF19 ID
+FF1A FF1B NS
+FF1C FF1E ID
+FF1F EX
+FF20 FF3A ID
+FF3B OP
+FF3C ID
+FF3D CL
+FF3E FF5A ID
+FF5B OP
+FF5C ID
+FF5D CL
+FF5E ID
+FF5F OP
+FF60 FF61 CL
+FF62 OP
+FF63 FF64 CL
+FF65 NS
+FF66 AL
+FF67 FF70 NS
+FF71 FF9D AL
+FF9E FF9F NS
+FFA0 FFBE AL
+FFC2 FFC7 AL
+FFCA FFCF AL
+FFD2 FFD7 AL
+FFDA FFDC AL
+FFE0 PO
+FFE1 PR
+FFE2 FFE4 ID
+FFE5 FFE6 PR
+FFE8 FFEE AL
+FFF9 FFFB CM
+FFFC CB
+FFFD AI
+10300 1031E AL
+10320 10323 AL
+10330 1034A AL
+10400 10425 AL
+10428 1044D AL
+1D000 1D0F5 AL
+1D100 1D126 AL
+1D12A 1D164 AL
+1D165 1D169 CM
+1D16A 1D16C AL
+1D16D 1D182 CM
+1D183 1D184 AL
+1D185 1D18B CM
+1D18C 1D1A9 AL
+1D1AA 1D1AD CM
+1D1AE 1D1DD AL
+1D400 1D454 AL
+1D456 1D49C AL
+1D49E 1D49F AL
+1D4A2 AL
+1D4A5 1D4A6 AL
+1D4A9 1D4AC AL
+1D4AE 1D4B9 AL
+1D4BB AL
+1D4BD 1D4C0 AL
+1D4C2 1D4C3 AL
+1D4C5 1D505 AL
+1D507 1D50A AL
+1D50D 1D514 AL
+1D516 1D51C AL
+1D51E 1D539 AL
+1D53B 1D53E AL
+1D540 1D544 AL
+1D546 AL
+1D54A 1D550 AL
+1D552 1D6A3 AL
+1D6A8 1D7C9 AL
+1D7CE 1D7FF NU
+20000 2A6D6 ID
+2F800 2FA1D ID
+E0001 CM
+E0020 E007F CM
+F0000 FFFFD XX
+100000 10FFFD XX
+END
diff --git a/Master/xemtex/perl/lib/unicore/Name.pl b/Master/xemtex/perl/lib/unicore/Name.pl
new file mode 100644
index 00000000000..2dde9fdd3b1
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/Name.pl
@@ -0,0 +1,13869 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+return <<'END';
+0000 NULL
+0001 START OF HEADING
+0002 START OF TEXT
+0003 END OF TEXT
+0004 END OF TRANSMISSION
+0005 ENQUIRY
+0006 ACKNOWLEDGE
+0007 BELL
+0008 BACKSPACE
+0009 CHARACTER TABULATION
+000A LINE FEED (LF)
+000B LINE TABULATION
+000C FORM FEED (FF)
+000D CARRIAGE RETURN (CR)
+000E SHIFT OUT
+000F SHIFT IN
+0010 DATA LINK ESCAPE
+0011 DEVICE CONTROL ONE
+0012 DEVICE CONTROL TWO
+0013 DEVICE CONTROL THREE
+0014 DEVICE CONTROL FOUR
+0015 NEGATIVE ACKNOWLEDGE
+0016 SYNCHRONOUS IDLE
+0017 END OF TRANSMISSION BLOCK
+0018 CANCEL
+0019 END OF MEDIUM
+001A SUBSTITUTE
+001B ESCAPE
+001C INFORMATION SEPARATOR FOUR
+001D INFORMATION SEPARATOR THREE
+001E INFORMATION SEPARATOR TWO
+001F INFORMATION SEPARATOR ONE
+0020 SPACE
+0021 EXCLAMATION MARK
+0022 QUOTATION MARK
+0023 NUMBER SIGN
+0024 DOLLAR SIGN
+0025 PERCENT SIGN
+0026 AMPERSAND
+0027 APOSTROPHE
+0028 LEFT PARENTHESIS
+0029 RIGHT PARENTHESIS
+002A ASTERISK
+002B PLUS SIGN
+002C COMMA
+002D HYPHEN-MINUS
+002E FULL STOP
+002F SOLIDUS
+0030 DIGIT ZERO
+0031 DIGIT ONE
+0032 DIGIT TWO
+0033 DIGIT THREE
+0034 DIGIT FOUR
+0035 DIGIT FIVE
+0036 DIGIT SIX
+0037 DIGIT SEVEN
+0038 DIGIT EIGHT
+0039 DIGIT NINE
+003A COLON
+003B SEMICOLON
+003C LESS-THAN SIGN
+003D EQUALS SIGN
+003E GREATER-THAN SIGN
+003F QUESTION MARK
+0040 COMMERCIAL AT
+0041 LATIN CAPITAL LETTER A
+0042 LATIN CAPITAL LETTER B
+0043 LATIN CAPITAL LETTER C
+0044 LATIN CAPITAL LETTER D
+0045 LATIN CAPITAL LETTER E
+0046 LATIN CAPITAL LETTER F
+0047 LATIN CAPITAL LETTER G
+0048 LATIN CAPITAL LETTER H
+0049 LATIN CAPITAL LETTER I
+004A LATIN CAPITAL LETTER J
+004B LATIN CAPITAL LETTER K
+004C LATIN CAPITAL LETTER L
+004D LATIN CAPITAL LETTER M
+004E LATIN CAPITAL LETTER N
+004F LATIN CAPITAL LETTER O
+0050 LATIN CAPITAL LETTER P
+0051 LATIN CAPITAL LETTER Q
+0052 LATIN CAPITAL LETTER R
+0053 LATIN CAPITAL LETTER S
+0054 LATIN CAPITAL LETTER T
+0055 LATIN CAPITAL LETTER U
+0056 LATIN CAPITAL LETTER V
+0057 LATIN CAPITAL LETTER W
+0058 LATIN CAPITAL LETTER X
+0059 LATIN CAPITAL LETTER Y
+005A LATIN CAPITAL LETTER Z
+005B LEFT SQUARE BRACKET
+005C REVERSE SOLIDUS
+005D RIGHT SQUARE BRACKET
+005E CIRCUMFLEX ACCENT
+005F LOW LINE
+0060 GRAVE ACCENT
+0061 LATIN SMALL LETTER A
+0062 LATIN SMALL LETTER B
+0063 LATIN SMALL LETTER C
+0064 LATIN SMALL LETTER D
+0065 LATIN SMALL LETTER E
+0066 LATIN SMALL LETTER F
+0067 LATIN SMALL LETTER G
+0068 LATIN SMALL LETTER H
+0069 LATIN SMALL LETTER I
+006A LATIN SMALL LETTER J
+006B LATIN SMALL LETTER K
+006C LATIN SMALL LETTER L
+006D LATIN SMALL LETTER M
+006E LATIN SMALL LETTER N
+006F LATIN SMALL LETTER O
+0070 LATIN SMALL LETTER P
+0071 LATIN SMALL LETTER Q
+0072 LATIN SMALL LETTER R
+0073 LATIN SMALL LETTER S
+0074 LATIN SMALL LETTER T
+0075 LATIN SMALL LETTER U
+0076 LATIN SMALL LETTER V
+0077 LATIN SMALL LETTER W
+0078 LATIN SMALL LETTER X
+0079 LATIN SMALL LETTER Y
+007A LATIN SMALL LETTER Z
+007B LEFT CURLY BRACKET
+007C VERTICAL LINE
+007D RIGHT CURLY BRACKET
+007E TILDE
+007F DELETE
+0080 0081 <control>
+0082 BREAK PERMITTED HERE
+0083 NO BREAK HERE
+0084 <control>
+0085 NEXT LINE (NEL)
+0086 START OF SELECTED AREA
+0087 END OF SELECTED AREA
+0088 CHARACTER TABULATION SET
+0089 CHARACTER TABULATION WITH JUSTIFICATION
+008A LINE TABULATION SET
+008B PARTIAL LINE FORWARD
+008C PARTIAL LINE BACKWARD
+008D REVERSE LINE FEED
+008E SINGLE SHIFT TWO
+008F SINGLE SHIFT THREE
+0090 DEVICE CONTROL STRING
+0091 PRIVATE USE ONE
+0092 PRIVATE USE TWO
+0093 SET TRANSMIT STATE
+0094 CANCEL CHARACTER
+0095 MESSAGE WAITING
+0096 START OF GUARDED AREA
+0097 END OF GUARDED AREA
+0098 START OF STRING
+0099 <control>
+009A SINGLE CHARACTER INTRODUCER
+009B CONTROL SEQUENCE INTRODUCER
+009C STRING TERMINATOR
+009D OPERATING SYSTEM COMMAND
+009E PRIVACY MESSAGE
+009F APPLICATION PROGRAM COMMAND
+00A0 NO-BREAK SPACE
+00A1 INVERTED EXCLAMATION MARK
+00A2 CENT SIGN
+00A3 POUND SIGN
+00A4 CURRENCY SIGN
+00A5 YEN SIGN
+00A6 BROKEN BAR
+00A7 SECTION SIGN
+00A8 DIAERESIS
+00A9 COPYRIGHT SIGN
+00AA FEMININE ORDINAL INDICATOR
+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00AC NOT SIGN
+00AD SOFT HYPHEN
+00AE REGISTERED SIGN
+00AF MACRON
+00B0 DEGREE SIGN
+00B1 PLUS-MINUS SIGN
+00B2 SUPERSCRIPT TWO
+00B3 SUPERSCRIPT THREE
+00B4 ACUTE ACCENT
+00B5 MICRO SIGN
+00B6 PILCROW SIGN
+00B7 MIDDLE DOT
+00B8 CEDILLA
+00B9 SUPERSCRIPT ONE
+00BA MASCULINE ORDINAL INDICATOR
+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BC VULGAR FRACTION ONE QUARTER
+00BD VULGAR FRACTION ONE HALF
+00BE VULGAR FRACTION THREE QUARTERS
+00BF INVERTED QUESTION MARK
+00C0 LATIN CAPITAL LETTER A WITH GRAVE
+00C1 LATIN CAPITAL LETTER A WITH ACUTE
+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00C3 LATIN CAPITAL LETTER A WITH TILDE
+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS
+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE
+00C6 LATIN CAPITAL LETTER AE
+00C7 LATIN CAPITAL LETTER C WITH CEDILLA
+00C8 LATIN CAPITAL LETTER E WITH GRAVE
+00C9 LATIN CAPITAL LETTER E WITH ACUTE
+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00CB LATIN CAPITAL LETTER E WITH DIAERESIS
+00CC LATIN CAPITAL LETTER I WITH GRAVE
+00CD LATIN CAPITAL LETTER I WITH ACUTE
+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00CF LATIN CAPITAL LETTER I WITH DIAERESIS
+00D0 LATIN CAPITAL LETTER ETH
+00D1 LATIN CAPITAL LETTER N WITH TILDE
+00D2 LATIN CAPITAL LETTER O WITH GRAVE
+00D3 LATIN CAPITAL LETTER O WITH ACUTE
+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00D5 LATIN CAPITAL LETTER O WITH TILDE
+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS
+00D7 MULTIPLICATION SIGN
+00D8 LATIN CAPITAL LETTER O WITH STROKE
+00D9 LATIN CAPITAL LETTER U WITH GRAVE
+00DA LATIN CAPITAL LETTER U WITH ACUTE
+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00DC LATIN CAPITAL LETTER U WITH DIAERESIS
+00DD LATIN CAPITAL LETTER Y WITH ACUTE
+00DE LATIN CAPITAL LETTER THORN
+00DF LATIN SMALL LETTER SHARP S
+00E0 LATIN SMALL LETTER A WITH GRAVE
+00E1 LATIN SMALL LETTER A WITH ACUTE
+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX
+00E3 LATIN SMALL LETTER A WITH TILDE
+00E4 LATIN SMALL LETTER A WITH DIAERESIS
+00E5 LATIN SMALL LETTER A WITH RING ABOVE
+00E6 LATIN SMALL LETTER AE
+00E7 LATIN SMALL LETTER C WITH CEDILLA
+00E8 LATIN SMALL LETTER E WITH GRAVE
+00E9 LATIN SMALL LETTER E WITH ACUTE
+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX
+00EB LATIN SMALL LETTER E WITH DIAERESIS
+00EC LATIN SMALL LETTER I WITH GRAVE
+00ED LATIN SMALL LETTER I WITH ACUTE
+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX
+00EF LATIN SMALL LETTER I WITH DIAERESIS
+00F0 LATIN SMALL LETTER ETH
+00F1 LATIN SMALL LETTER N WITH TILDE
+00F2 LATIN SMALL LETTER O WITH GRAVE
+00F3 LATIN SMALL LETTER O WITH ACUTE
+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX
+00F5 LATIN SMALL LETTER O WITH TILDE
+00F6 LATIN SMALL LETTER O WITH DIAERESIS
+00F7 DIVISION SIGN
+00F8 LATIN SMALL LETTER O WITH STROKE
+00F9 LATIN SMALL LETTER U WITH GRAVE
+00FA LATIN SMALL LETTER U WITH ACUTE
+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX
+00FC LATIN SMALL LETTER U WITH DIAERESIS
+00FD LATIN SMALL LETTER Y WITH ACUTE
+00FE LATIN SMALL LETTER THORN
+00FF LATIN SMALL LETTER Y WITH DIAERESIS
+0100 LATIN CAPITAL LETTER A WITH MACRON
+0101 LATIN SMALL LETTER A WITH MACRON
+0102 LATIN CAPITAL LETTER A WITH BREVE
+0103 LATIN SMALL LETTER A WITH BREVE
+0104 LATIN CAPITAL LETTER A WITH OGONEK
+0105 LATIN SMALL LETTER A WITH OGONEK
+0106 LATIN CAPITAL LETTER C WITH ACUTE
+0107 LATIN SMALL LETTER C WITH ACUTE
+0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+0109 LATIN SMALL LETTER C WITH CIRCUMFLEX
+010A LATIN CAPITAL LETTER C WITH DOT ABOVE
+010B LATIN SMALL LETTER C WITH DOT ABOVE
+010C LATIN CAPITAL LETTER C WITH CARON
+010D LATIN SMALL LETTER C WITH CARON
+010E LATIN CAPITAL LETTER D WITH CARON
+010F LATIN SMALL LETTER D WITH CARON
+0110 LATIN CAPITAL LETTER D WITH STROKE
+0111 LATIN SMALL LETTER D WITH STROKE
+0112 LATIN CAPITAL LETTER E WITH MACRON
+0113 LATIN SMALL LETTER E WITH MACRON
+0114 LATIN CAPITAL LETTER E WITH BREVE
+0115 LATIN SMALL LETTER E WITH BREVE
+0116 LATIN CAPITAL LETTER E WITH DOT ABOVE
+0117 LATIN SMALL LETTER E WITH DOT ABOVE
+0118 LATIN CAPITAL LETTER E WITH OGONEK
+0119 LATIN SMALL LETTER E WITH OGONEK
+011A LATIN CAPITAL LETTER E WITH CARON
+011B LATIN SMALL LETTER E WITH CARON
+011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011D LATIN SMALL LETTER G WITH CIRCUMFLEX
+011E LATIN CAPITAL LETTER G WITH BREVE
+011F LATIN SMALL LETTER G WITH BREVE
+0120 LATIN CAPITAL LETTER G WITH DOT ABOVE
+0121 LATIN SMALL LETTER G WITH DOT ABOVE
+0122 LATIN CAPITAL LETTER G WITH CEDILLA
+0123 LATIN SMALL LETTER G WITH CEDILLA
+0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0125 LATIN SMALL LETTER H WITH CIRCUMFLEX
+0126 LATIN CAPITAL LETTER H WITH STROKE
+0127 LATIN SMALL LETTER H WITH STROKE
+0128 LATIN CAPITAL LETTER I WITH TILDE
+0129 LATIN SMALL LETTER I WITH TILDE
+012A LATIN CAPITAL LETTER I WITH MACRON
+012B LATIN SMALL LETTER I WITH MACRON
+012C LATIN CAPITAL LETTER I WITH BREVE
+012D LATIN SMALL LETTER I WITH BREVE
+012E LATIN CAPITAL LETTER I WITH OGONEK
+012F LATIN SMALL LETTER I WITH OGONEK
+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
+0131 LATIN SMALL LETTER DOTLESS I
+0132 LATIN CAPITAL LIGATURE IJ
+0133 LATIN SMALL LIGATURE IJ
+0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0135 LATIN SMALL LETTER J WITH CIRCUMFLEX
+0136 LATIN CAPITAL LETTER K WITH CEDILLA
+0137 LATIN SMALL LETTER K WITH CEDILLA
+0138 LATIN SMALL LETTER KRA
+0139 LATIN CAPITAL LETTER L WITH ACUTE
+013A LATIN SMALL LETTER L WITH ACUTE
+013B LATIN CAPITAL LETTER L WITH CEDILLA
+013C LATIN SMALL LETTER L WITH CEDILLA
+013D LATIN CAPITAL LETTER L WITH CARON
+013E LATIN SMALL LETTER L WITH CARON
+013F LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0140 LATIN SMALL LETTER L WITH MIDDLE DOT
+0141 LATIN CAPITAL LETTER L WITH STROKE
+0142 LATIN SMALL LETTER L WITH STROKE
+0143 LATIN CAPITAL LETTER N WITH ACUTE
+0144 LATIN SMALL LETTER N WITH ACUTE
+0145 LATIN CAPITAL LETTER N WITH CEDILLA
+0146 LATIN SMALL LETTER N WITH CEDILLA
+0147 LATIN CAPITAL LETTER N WITH CARON
+0148 LATIN SMALL LETTER N WITH CARON
+0149 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014A LATIN CAPITAL LETTER ENG
+014B LATIN SMALL LETTER ENG
+014C LATIN CAPITAL LETTER O WITH MACRON
+014D LATIN SMALL LETTER O WITH MACRON
+014E LATIN CAPITAL LETTER O WITH BREVE
+014F LATIN SMALL LETTER O WITH BREVE
+0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0152 LATIN CAPITAL LIGATURE OE
+0153 LATIN SMALL LIGATURE OE
+0154 LATIN CAPITAL LETTER R WITH ACUTE
+0155 LATIN SMALL LETTER R WITH ACUTE
+0156 LATIN CAPITAL LETTER R WITH CEDILLA
+0157 LATIN SMALL LETTER R WITH CEDILLA
+0158 LATIN CAPITAL LETTER R WITH CARON
+0159 LATIN SMALL LETTER R WITH CARON
+015A LATIN CAPITAL LETTER S WITH ACUTE
+015B LATIN SMALL LETTER S WITH ACUTE
+015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015D LATIN SMALL LETTER S WITH CIRCUMFLEX
+015E LATIN CAPITAL LETTER S WITH CEDILLA
+015F LATIN SMALL LETTER S WITH CEDILLA
+0160 LATIN CAPITAL LETTER S WITH CARON
+0161 LATIN SMALL LETTER S WITH CARON
+0162 LATIN CAPITAL LETTER T WITH CEDILLA
+0163 LATIN SMALL LETTER T WITH CEDILLA
+0164 LATIN CAPITAL LETTER T WITH CARON
+0165 LATIN SMALL LETTER T WITH CARON
+0166 LATIN CAPITAL LETTER T WITH STROKE
+0167 LATIN SMALL LETTER T WITH STROKE
+0168 LATIN CAPITAL LETTER U WITH TILDE
+0169 LATIN SMALL LETTER U WITH TILDE
+016A LATIN CAPITAL LETTER U WITH MACRON
+016B LATIN SMALL LETTER U WITH MACRON
+016C LATIN CAPITAL LETTER U WITH BREVE
+016D LATIN SMALL LETTER U WITH BREVE
+016E LATIN CAPITAL LETTER U WITH RING ABOVE
+016F LATIN SMALL LETTER U WITH RING ABOVE
+0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0172 LATIN CAPITAL LETTER U WITH OGONEK
+0173 LATIN SMALL LETTER U WITH OGONEK
+0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0175 LATIN SMALL LETTER W WITH CIRCUMFLEX
+0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX
+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS
+0179 LATIN CAPITAL LETTER Z WITH ACUTE
+017A LATIN SMALL LETTER Z WITH ACUTE
+017B LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017C LATIN SMALL LETTER Z WITH DOT ABOVE
+017D LATIN CAPITAL LETTER Z WITH CARON
+017E LATIN SMALL LETTER Z WITH CARON
+017F LATIN SMALL LETTER LONG S
+0180 LATIN SMALL LETTER B WITH STROKE
+0181 LATIN CAPITAL LETTER B WITH HOOK
+0182 LATIN CAPITAL LETTER B WITH TOPBAR
+0183 LATIN SMALL LETTER B WITH TOPBAR
+0184 LATIN CAPITAL LETTER TONE SIX
+0185 LATIN SMALL LETTER TONE SIX
+0186 LATIN CAPITAL LETTER OPEN O
+0187 LATIN CAPITAL LETTER C WITH HOOK
+0188 LATIN SMALL LETTER C WITH HOOK
+0189 LATIN CAPITAL LETTER AFRICAN D
+018A LATIN CAPITAL LETTER D WITH HOOK
+018B LATIN CAPITAL LETTER D WITH TOPBAR
+018C LATIN SMALL LETTER D WITH TOPBAR
+018D LATIN SMALL LETTER TURNED DELTA
+018E LATIN CAPITAL LETTER REVERSED E
+018F LATIN CAPITAL LETTER SCHWA
+0190 LATIN CAPITAL LETTER OPEN E
+0191 LATIN CAPITAL LETTER F WITH HOOK
+0192 LATIN SMALL LETTER F WITH HOOK
+0193 LATIN CAPITAL LETTER G WITH HOOK
+0194 LATIN CAPITAL LETTER GAMMA
+0195 LATIN SMALL LETTER HV
+0196 LATIN CAPITAL LETTER IOTA
+0197 LATIN CAPITAL LETTER I WITH STROKE
+0198 LATIN CAPITAL LETTER K WITH HOOK
+0199 LATIN SMALL LETTER K WITH HOOK
+019A LATIN SMALL LETTER L WITH BAR
+019B LATIN SMALL LETTER LAMBDA WITH STROKE
+019C LATIN CAPITAL LETTER TURNED M
+019D LATIN CAPITAL LETTER N WITH LEFT HOOK
+019E LATIN SMALL LETTER N WITH LONG RIGHT LEG
+019F LATIN CAPITAL LETTER O WITH MIDDLE TILDE
+01A0 LATIN CAPITAL LETTER O WITH HORN
+01A1 LATIN SMALL LETTER O WITH HORN
+01A2 LATIN CAPITAL LETTER OI
+01A3 LATIN SMALL LETTER OI
+01A4 LATIN CAPITAL LETTER P WITH HOOK
+01A5 LATIN SMALL LETTER P WITH HOOK
+01A6 LATIN LETTER YR
+01A7 LATIN CAPITAL LETTER TONE TWO
+01A8 LATIN SMALL LETTER TONE TWO
+01A9 LATIN CAPITAL LETTER ESH
+01AA LATIN LETTER REVERSED ESH LOOP
+01AB LATIN SMALL LETTER T WITH PALATAL HOOK
+01AC LATIN CAPITAL LETTER T WITH HOOK
+01AD LATIN SMALL LETTER T WITH HOOK
+01AE LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
+01AF LATIN CAPITAL LETTER U WITH HORN
+01B0 LATIN SMALL LETTER U WITH HORN
+01B1 LATIN CAPITAL LETTER UPSILON
+01B2 LATIN CAPITAL LETTER V WITH HOOK
+01B3 LATIN CAPITAL LETTER Y WITH HOOK
+01B4 LATIN SMALL LETTER Y WITH HOOK
+01B5 LATIN CAPITAL LETTER Z WITH STROKE
+01B6 LATIN SMALL LETTER Z WITH STROKE
+01B7 LATIN CAPITAL LETTER EZH
+01B8 LATIN CAPITAL LETTER EZH REVERSED
+01B9 LATIN SMALL LETTER EZH REVERSED
+01BA LATIN SMALL LETTER EZH WITH TAIL
+01BB LATIN LETTER TWO WITH STROKE
+01BC LATIN CAPITAL LETTER TONE FIVE
+01BD LATIN SMALL LETTER TONE FIVE
+01BE LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE
+01BF LATIN LETTER WYNN
+01C0 LATIN LETTER DENTAL CLICK
+01C1 LATIN LETTER LATERAL CLICK
+01C2 LATIN LETTER ALVEOLAR CLICK
+01C3 LATIN LETTER RETROFLEX CLICK
+01C4 LATIN CAPITAL LETTER DZ WITH CARON
+01C5 LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+01C6 LATIN SMALL LETTER DZ WITH CARON
+01C7 LATIN CAPITAL LETTER LJ
+01C8 LATIN CAPITAL LETTER L WITH SMALL LETTER J
+01C9 LATIN SMALL LETTER LJ
+01CA LATIN CAPITAL LETTER NJ
+01CB LATIN CAPITAL LETTER N WITH SMALL LETTER J
+01CC LATIN SMALL LETTER NJ
+01CD LATIN CAPITAL LETTER A WITH CARON
+01CE LATIN SMALL LETTER A WITH CARON
+01CF LATIN CAPITAL LETTER I WITH CARON
+01D0 LATIN SMALL LETTER I WITH CARON
+01D1 LATIN CAPITAL LETTER O WITH CARON
+01D2 LATIN SMALL LETTER O WITH CARON
+01D3 LATIN CAPITAL LETTER U WITH CARON
+01D4 LATIN SMALL LETTER U WITH CARON
+01D5 LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01D6 LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+01D7 LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D8 LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+01D9 LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01DA LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+01DB LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DC LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01DD LATIN SMALL LETTER TURNED E
+01DE LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01DF LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+01E0 LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01E1 LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+01E2 LATIN CAPITAL LETTER AE WITH MACRON
+01E3 LATIN SMALL LETTER AE WITH MACRON
+01E4 LATIN CAPITAL LETTER G WITH STROKE
+01E5 LATIN SMALL LETTER G WITH STROKE
+01E6 LATIN CAPITAL LETTER G WITH CARON
+01E7 LATIN SMALL LETTER G WITH CARON
+01E8 LATIN CAPITAL LETTER K WITH CARON
+01E9 LATIN SMALL LETTER K WITH CARON
+01EA LATIN CAPITAL LETTER O WITH OGONEK
+01EB LATIN SMALL LETTER O WITH OGONEK
+01EC LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01ED LATIN SMALL LETTER O WITH OGONEK AND MACRON
+01EE LATIN CAPITAL LETTER EZH WITH CARON
+01EF LATIN SMALL LETTER EZH WITH CARON
+01F0 LATIN SMALL LETTER J WITH CARON
+01F1 LATIN CAPITAL LETTER DZ
+01F2 LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+01F3 LATIN SMALL LETTER DZ
+01F4 LATIN CAPITAL LETTER G WITH ACUTE
+01F5 LATIN SMALL LETTER G WITH ACUTE
+01F6 LATIN CAPITAL LETTER HWAIR
+01F7 LATIN CAPITAL LETTER WYNN
+01F8 LATIN CAPITAL LETTER N WITH GRAVE
+01F9 LATIN SMALL LETTER N WITH GRAVE
+01FA LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01FB LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+01FC LATIN CAPITAL LETTER AE WITH ACUTE
+01FD LATIN SMALL LETTER AE WITH ACUTE
+01FE LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+01FF LATIN SMALL LETTER O WITH STROKE AND ACUTE
+0200 LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+0201 LATIN SMALL LETTER A WITH DOUBLE GRAVE
+0202 LATIN CAPITAL LETTER A WITH INVERTED BREVE
+0203 LATIN SMALL LETTER A WITH INVERTED BREVE
+0204 LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+0205 LATIN SMALL LETTER E WITH DOUBLE GRAVE
+0206 LATIN CAPITAL LETTER E WITH INVERTED BREVE
+0207 LATIN SMALL LETTER E WITH INVERTED BREVE
+0208 LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+0209 LATIN SMALL LETTER I WITH DOUBLE GRAVE
+020A LATIN CAPITAL LETTER I WITH INVERTED BREVE
+020B LATIN SMALL LETTER I WITH INVERTED BREVE
+020C LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+020D LATIN SMALL LETTER O WITH DOUBLE GRAVE
+020E LATIN CAPITAL LETTER O WITH INVERTED BREVE
+020F LATIN SMALL LETTER O WITH INVERTED BREVE
+0210 LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+0211 LATIN SMALL LETTER R WITH DOUBLE GRAVE
+0212 LATIN CAPITAL LETTER R WITH INVERTED BREVE
+0213 LATIN SMALL LETTER R WITH INVERTED BREVE
+0214 LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+0215 LATIN SMALL LETTER U WITH DOUBLE GRAVE
+0216 LATIN CAPITAL LETTER U WITH INVERTED BREVE
+0217 LATIN SMALL LETTER U WITH INVERTED BREVE
+0218 LATIN CAPITAL LETTER S WITH COMMA BELOW
+0219 LATIN SMALL LETTER S WITH COMMA BELOW
+021A LATIN CAPITAL LETTER T WITH COMMA BELOW
+021B LATIN SMALL LETTER T WITH COMMA BELOW
+021C LATIN CAPITAL LETTER YOGH
+021D LATIN SMALL LETTER YOGH
+021E LATIN CAPITAL LETTER H WITH CARON
+021F LATIN SMALL LETTER H WITH CARON
+0220 LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0222 LATIN CAPITAL LETTER OU
+0223 LATIN SMALL LETTER OU
+0224 LATIN CAPITAL LETTER Z WITH HOOK
+0225 LATIN SMALL LETTER Z WITH HOOK
+0226 LATIN CAPITAL LETTER A WITH DOT ABOVE
+0227 LATIN SMALL LETTER A WITH DOT ABOVE
+0228 LATIN CAPITAL LETTER E WITH CEDILLA
+0229 LATIN SMALL LETTER E WITH CEDILLA
+022A LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+022B LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+022C LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+022D LATIN SMALL LETTER O WITH TILDE AND MACRON
+022E LATIN CAPITAL LETTER O WITH DOT ABOVE
+022F LATIN SMALL LETTER O WITH DOT ABOVE
+0230 LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+0231 LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+0232 LATIN CAPITAL LETTER Y WITH MACRON
+0233 LATIN SMALL LETTER Y WITH MACRON
+0250 LATIN SMALL LETTER TURNED A
+0251 LATIN SMALL LETTER ALPHA
+0252 LATIN SMALL LETTER TURNED ALPHA
+0253 LATIN SMALL LETTER B WITH HOOK
+0254 LATIN SMALL LETTER OPEN O
+0255 LATIN SMALL LETTER C WITH CURL
+0256 LATIN SMALL LETTER D WITH TAIL
+0257 LATIN SMALL LETTER D WITH HOOK
+0258 LATIN SMALL LETTER REVERSED E
+0259 LATIN SMALL LETTER SCHWA
+025A LATIN SMALL LETTER SCHWA WITH HOOK
+025B LATIN SMALL LETTER OPEN E
+025C LATIN SMALL LETTER REVERSED OPEN E
+025D LATIN SMALL LETTER REVERSED OPEN E WITH HOOK
+025E LATIN SMALL LETTER CLOSED REVERSED OPEN E
+025F LATIN SMALL LETTER DOTLESS J WITH STROKE
+0260 LATIN SMALL LETTER G WITH HOOK
+0261 LATIN SMALL LETTER SCRIPT G
+0262 LATIN LETTER SMALL CAPITAL G
+0263 LATIN SMALL LETTER GAMMA
+0264 LATIN SMALL LETTER RAMS HORN
+0265 LATIN SMALL LETTER TURNED H
+0266 LATIN SMALL LETTER H WITH HOOK
+0267 LATIN SMALL LETTER HENG WITH HOOK
+0268 LATIN SMALL LETTER I WITH STROKE
+0269 LATIN SMALL LETTER IOTA
+026A LATIN LETTER SMALL CAPITAL I
+026B LATIN SMALL LETTER L WITH MIDDLE TILDE
+026C LATIN SMALL LETTER L WITH BELT
+026D LATIN SMALL LETTER L WITH RETROFLEX HOOK
+026E LATIN SMALL LETTER LEZH
+026F LATIN SMALL LETTER TURNED M
+0270 LATIN SMALL LETTER TURNED M WITH LONG LEG
+0271 LATIN SMALL LETTER M WITH HOOK
+0272 LATIN SMALL LETTER N WITH LEFT HOOK
+0273 LATIN SMALL LETTER N WITH RETROFLEX HOOK
+0274 LATIN LETTER SMALL CAPITAL N
+0275 LATIN SMALL LETTER BARRED O
+0276 LATIN LETTER SMALL CAPITAL OE
+0277 LATIN SMALL LETTER CLOSED OMEGA
+0278 LATIN SMALL LETTER PHI
+0279 LATIN SMALL LETTER TURNED R
+027A LATIN SMALL LETTER TURNED R WITH LONG LEG
+027B LATIN SMALL LETTER TURNED R WITH HOOK
+027C LATIN SMALL LETTER R WITH LONG LEG
+027D LATIN SMALL LETTER R WITH TAIL
+027E LATIN SMALL LETTER R WITH FISHHOOK
+027F LATIN SMALL LETTER REVERSED R WITH FISHHOOK
+0280 LATIN LETTER SMALL CAPITAL R
+0281 LATIN LETTER SMALL CAPITAL INVERTED R
+0282 LATIN SMALL LETTER S WITH HOOK
+0283 LATIN SMALL LETTER ESH
+0284 LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK
+0285 LATIN SMALL LETTER SQUAT REVERSED ESH
+0286 LATIN SMALL LETTER ESH WITH CURL
+0287 LATIN SMALL LETTER TURNED T
+0288 LATIN SMALL LETTER T WITH RETROFLEX HOOK
+0289 LATIN SMALL LETTER U BAR
+028A LATIN SMALL LETTER UPSILON
+028B LATIN SMALL LETTER V WITH HOOK
+028C LATIN SMALL LETTER TURNED V
+028D LATIN SMALL LETTER TURNED W
+028E LATIN SMALL LETTER TURNED Y
+028F LATIN LETTER SMALL CAPITAL Y
+0290 LATIN SMALL LETTER Z WITH RETROFLEX HOOK
+0291 LATIN SMALL LETTER Z WITH CURL
+0292 LATIN SMALL LETTER EZH
+0293 LATIN SMALL LETTER EZH WITH CURL
+0294 LATIN LETTER GLOTTAL STOP
+0295 LATIN LETTER PHARYNGEAL VOICED FRICATIVE
+0296 LATIN LETTER INVERTED GLOTTAL STOP
+0297 LATIN LETTER STRETCHED C
+0298 LATIN LETTER BILABIAL CLICK
+0299 LATIN LETTER SMALL CAPITAL B
+029A LATIN SMALL LETTER CLOSED OPEN E
+029B LATIN LETTER SMALL CAPITAL G WITH HOOK
+029C LATIN LETTER SMALL CAPITAL H
+029D LATIN SMALL LETTER J WITH CROSSED-TAIL
+029E LATIN SMALL LETTER TURNED K
+029F LATIN LETTER SMALL CAPITAL L
+02A0 LATIN SMALL LETTER Q WITH HOOK
+02A1 LATIN LETTER GLOTTAL STOP WITH STROKE
+02A2 LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE
+02A3 LATIN SMALL LETTER DZ DIGRAPH
+02A4 LATIN SMALL LETTER DEZH DIGRAPH
+02A5 LATIN SMALL LETTER DZ DIGRAPH WITH CURL
+02A6 LATIN SMALL LETTER TS DIGRAPH
+02A7 LATIN SMALL LETTER TESH DIGRAPH
+02A8 LATIN SMALL LETTER TC DIGRAPH WITH CURL
+02A9 LATIN SMALL LETTER FENG DIGRAPH
+02AA LATIN SMALL LETTER LS DIGRAPH
+02AB LATIN SMALL LETTER LZ DIGRAPH
+02AC LATIN LETTER BILABIAL PERCUSSIVE
+02AD LATIN LETTER BIDENTAL PERCUSSIVE
+02B0 MODIFIER LETTER SMALL H
+02B1 MODIFIER LETTER SMALL H WITH HOOK
+02B2 MODIFIER LETTER SMALL J
+02B3 MODIFIER LETTER SMALL R
+02B4 MODIFIER LETTER SMALL TURNED R
+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK
+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R
+02B7 MODIFIER LETTER SMALL W
+02B8 MODIFIER LETTER SMALL Y
+02B9 MODIFIER LETTER PRIME
+02BA MODIFIER LETTER DOUBLE PRIME
+02BB MODIFIER LETTER TURNED COMMA
+02BC MODIFIER LETTER APOSTROPHE
+02BD MODIFIER LETTER REVERSED COMMA
+02BE MODIFIER LETTER RIGHT HALF RING
+02BF MODIFIER LETTER LEFT HALF RING
+02C0 MODIFIER LETTER GLOTTAL STOP
+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP
+02C2 MODIFIER LETTER LEFT ARROWHEAD
+02C3 MODIFIER LETTER RIGHT ARROWHEAD
+02C4 MODIFIER LETTER UP ARROWHEAD
+02C5 MODIFIER LETTER DOWN ARROWHEAD
+02C6 MODIFIER LETTER CIRCUMFLEX ACCENT
+02C7 CARON
+02C8 MODIFIER LETTER VERTICAL LINE
+02C9 MODIFIER LETTER MACRON
+02CA MODIFIER LETTER ACUTE ACCENT
+02CB MODIFIER LETTER GRAVE ACCENT
+02CC MODIFIER LETTER LOW VERTICAL LINE
+02CD MODIFIER LETTER LOW MACRON
+02CE MODIFIER LETTER LOW GRAVE ACCENT
+02CF MODIFIER LETTER LOW ACUTE ACCENT
+02D0 MODIFIER LETTER TRIANGULAR COLON
+02D1 MODIFIER LETTER HALF TRIANGULAR COLON
+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING
+02D3 MODIFIER LETTER CENTRED LEFT HALF RING
+02D4 MODIFIER LETTER UP TACK
+02D5 MODIFIER LETTER DOWN TACK
+02D6 MODIFIER LETTER PLUS SIGN
+02D7 MODIFIER LETTER MINUS SIGN
+02D8 BREVE
+02D9 DOT ABOVE
+02DA RING ABOVE
+02DB OGONEK
+02DC SMALL TILDE
+02DD DOUBLE ACUTE ACCENT
+02DE MODIFIER LETTER RHOTIC HOOK
+02DF MODIFIER LETTER CROSS ACCENT
+02E0 MODIFIER LETTER SMALL GAMMA
+02E1 MODIFIER LETTER SMALL L
+02E2 MODIFIER LETTER SMALL S
+02E3 MODIFIER LETTER SMALL X
+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR
+02E6 MODIFIER LETTER HIGH TONE BAR
+02E7 MODIFIER LETTER MID TONE BAR
+02E8 MODIFIER LETTER LOW TONE BAR
+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR
+02EA MODIFIER LETTER YIN DEPARTING TONE MARK
+02EB MODIFIER LETTER YANG DEPARTING TONE MARK
+02EC MODIFIER LETTER VOICING
+02ED MODIFIER LETTER UNASPIRATED
+02EE MODIFIER LETTER DOUBLE APOSTROPHE
+0300 COMBINING GRAVE ACCENT
+0301 COMBINING ACUTE ACCENT
+0302 COMBINING CIRCUMFLEX ACCENT
+0303 COMBINING TILDE
+0304 COMBINING MACRON
+0305 COMBINING OVERLINE
+0306 COMBINING BREVE
+0307 COMBINING DOT ABOVE
+0308 COMBINING DIAERESIS
+0309 COMBINING HOOK ABOVE
+030A COMBINING RING ABOVE
+030B COMBINING DOUBLE ACUTE ACCENT
+030C COMBINING CARON
+030D COMBINING VERTICAL LINE ABOVE
+030E COMBINING DOUBLE VERTICAL LINE ABOVE
+030F COMBINING DOUBLE GRAVE ACCENT
+0310 COMBINING CANDRABINDU
+0311 COMBINING INVERTED BREVE
+0312 COMBINING TURNED COMMA ABOVE
+0313 COMBINING COMMA ABOVE
+0314 COMBINING REVERSED COMMA ABOVE
+0315 COMBINING COMMA ABOVE RIGHT
+0316 COMBINING GRAVE ACCENT BELOW
+0317 COMBINING ACUTE ACCENT BELOW
+0318 COMBINING LEFT TACK BELOW
+0319 COMBINING RIGHT TACK BELOW
+031A COMBINING LEFT ANGLE ABOVE
+031B COMBINING HORN
+031C COMBINING LEFT HALF RING BELOW
+031D COMBINING UP TACK BELOW
+031E COMBINING DOWN TACK BELOW
+031F COMBINING PLUS SIGN BELOW
+0320 COMBINING MINUS SIGN BELOW
+0321 COMBINING PALATALIZED HOOK BELOW
+0322 COMBINING RETROFLEX HOOK BELOW
+0323 COMBINING DOT BELOW
+0324 COMBINING DIAERESIS BELOW
+0325 COMBINING RING BELOW
+0326 COMBINING COMMA BELOW
+0327 COMBINING CEDILLA
+0328 COMBINING OGONEK
+0329 COMBINING VERTICAL LINE BELOW
+032A COMBINING BRIDGE BELOW
+032B COMBINING INVERTED DOUBLE ARCH BELOW
+032C COMBINING CARON BELOW
+032D COMBINING CIRCUMFLEX ACCENT BELOW
+032E COMBINING BREVE BELOW
+032F COMBINING INVERTED BREVE BELOW
+0330 COMBINING TILDE BELOW
+0331 COMBINING MACRON BELOW
+0332 COMBINING LOW LINE
+0333 COMBINING DOUBLE LOW LINE
+0334 COMBINING TILDE OVERLAY
+0335 COMBINING SHORT STROKE OVERLAY
+0336 COMBINING LONG STROKE OVERLAY
+0337 COMBINING SHORT SOLIDUS OVERLAY
+0338 COMBINING LONG SOLIDUS OVERLAY
+0339 COMBINING RIGHT HALF RING BELOW
+033A COMBINING INVERTED BRIDGE BELOW
+033B COMBINING SQUARE BELOW
+033C COMBINING SEAGULL BELOW
+033D COMBINING X ABOVE
+033E COMBINING VERTICAL TILDE
+033F COMBINING DOUBLE OVERLINE
+0340 COMBINING GRAVE TONE MARK
+0341 COMBINING ACUTE TONE MARK
+0342 COMBINING GREEK PERISPOMENI
+0343 COMBINING GREEK KORONIS
+0344 COMBINING GREEK DIALYTIKA TONOS
+0345 COMBINING GREEK YPOGEGRAMMENI
+0346 COMBINING BRIDGE ABOVE
+0347 COMBINING EQUALS SIGN BELOW
+0348 COMBINING DOUBLE VERTICAL LINE BELOW
+0349 COMBINING LEFT ANGLE BELOW
+034A COMBINING NOT TILDE ABOVE
+034B COMBINING HOMOTHETIC ABOVE
+034C COMBINING ALMOST EQUAL TO ABOVE
+034D COMBINING LEFT RIGHT ARROW BELOW
+034E COMBINING UPWARDS ARROW BELOW
+034F COMBINING GRAPHEME JOINER
+0360 COMBINING DOUBLE TILDE
+0361 COMBINING DOUBLE INVERTED BREVE
+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW
+0363 COMBINING LATIN SMALL LETTER A
+0364 COMBINING LATIN SMALL LETTER E
+0365 COMBINING LATIN SMALL LETTER I
+0366 COMBINING LATIN SMALL LETTER O
+0367 COMBINING LATIN SMALL LETTER U
+0368 COMBINING LATIN SMALL LETTER C
+0369 COMBINING LATIN SMALL LETTER D
+036A COMBINING LATIN SMALL LETTER H
+036B COMBINING LATIN SMALL LETTER M
+036C COMBINING LATIN SMALL LETTER R
+036D COMBINING LATIN SMALL LETTER T
+036E COMBINING LATIN SMALL LETTER V
+036F COMBINING LATIN SMALL LETTER X
+0374 GREEK NUMERAL SIGN
+0375 GREEK LOWER NUMERAL SIGN
+037A GREEK YPOGEGRAMMENI
+037E GREEK QUESTION MARK
+0384 GREEK TONOS
+0385 GREEK DIALYTIKA TONOS
+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS
+0387 GREEK ANO TELEIA
+0388 GREEK CAPITAL LETTER EPSILON WITH TONOS
+0389 GREEK CAPITAL LETTER ETA WITH TONOS
+038A GREEK CAPITAL LETTER IOTA WITH TONOS
+038C GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E GREEK CAPITAL LETTER UPSILON WITH TONOS
+038F GREEK CAPITAL LETTER OMEGA WITH TONOS
+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+0391 GREEK CAPITAL LETTER ALPHA
+0392 GREEK CAPITAL LETTER BETA
+0393 GREEK CAPITAL LETTER GAMMA
+0394 GREEK CAPITAL LETTER DELTA
+0395 GREEK CAPITAL LETTER EPSILON
+0396 GREEK CAPITAL LETTER ZETA
+0397 GREEK CAPITAL LETTER ETA
+0398 GREEK CAPITAL LETTER THETA
+0399 GREEK CAPITAL LETTER IOTA
+039A GREEK CAPITAL LETTER KAPPA
+039B GREEK CAPITAL LETTER LAMDA
+039C GREEK CAPITAL LETTER MU
+039D GREEK CAPITAL LETTER NU
+039E GREEK CAPITAL LETTER XI
+039F GREEK CAPITAL LETTER OMICRON
+03A0 GREEK CAPITAL LETTER PI
+03A1 GREEK CAPITAL LETTER RHO
+03A3 GREEK CAPITAL LETTER SIGMA
+03A4 GREEK CAPITAL LETTER TAU
+03A5 GREEK CAPITAL LETTER UPSILON
+03A6 GREEK CAPITAL LETTER PHI
+03A7 GREEK CAPITAL LETTER CHI
+03A8 GREEK CAPITAL LETTER PSI
+03A9 GREEK CAPITAL LETTER OMEGA
+03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+03AC GREEK SMALL LETTER ALPHA WITH TONOS
+03AD GREEK SMALL LETTER EPSILON WITH TONOS
+03AE GREEK SMALL LETTER ETA WITH TONOS
+03AF GREEK SMALL LETTER IOTA WITH TONOS
+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+03B1 GREEK SMALL LETTER ALPHA
+03B2 GREEK SMALL LETTER BETA
+03B3 GREEK SMALL LETTER GAMMA
+03B4 GREEK SMALL LETTER DELTA
+03B5 GREEK SMALL LETTER EPSILON
+03B6 GREEK SMALL LETTER ZETA
+03B7 GREEK SMALL LETTER ETA
+03B8 GREEK SMALL LETTER THETA
+03B9 GREEK SMALL LETTER IOTA
+03BA GREEK SMALL LETTER KAPPA
+03BB GREEK SMALL LETTER LAMDA
+03BC GREEK SMALL LETTER MU
+03BD GREEK SMALL LETTER NU
+03BE GREEK SMALL LETTER XI
+03BF GREEK SMALL LETTER OMICRON
+03C0 GREEK SMALL LETTER PI
+03C1 GREEK SMALL LETTER RHO
+03C2 GREEK SMALL LETTER FINAL SIGMA
+03C3 GREEK SMALL LETTER SIGMA
+03C4 GREEK SMALL LETTER TAU
+03C5 GREEK SMALL LETTER UPSILON
+03C6 GREEK SMALL LETTER PHI
+03C7 GREEK SMALL LETTER CHI
+03C8 GREEK SMALL LETTER PSI
+03C9 GREEK SMALL LETTER OMEGA
+03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA
+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+03CC GREEK SMALL LETTER OMICRON WITH TONOS
+03CD GREEK SMALL LETTER UPSILON WITH TONOS
+03CE GREEK SMALL LETTER OMEGA WITH TONOS
+03D0 GREEK BETA SYMBOL
+03D1 GREEK THETA SYMBOL
+03D2 GREEK UPSILON WITH HOOK SYMBOL
+03D3 GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
+03D4 GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+03D5 GREEK PHI SYMBOL
+03D6 GREEK PI SYMBOL
+03D7 GREEK KAI SYMBOL
+03D8 GREEK LETTER ARCHAIC KOPPA
+03D9 GREEK SMALL LETTER ARCHAIC KOPPA
+03DA GREEK LETTER STIGMA
+03DB GREEK SMALL LETTER STIGMA
+03DC GREEK LETTER DIGAMMA
+03DD GREEK SMALL LETTER DIGAMMA
+03DE GREEK LETTER KOPPA
+03DF GREEK SMALL LETTER KOPPA
+03E0 GREEK LETTER SAMPI
+03E1 GREEK SMALL LETTER SAMPI
+03E2 COPTIC CAPITAL LETTER SHEI
+03E3 COPTIC SMALL LETTER SHEI
+03E4 COPTIC CAPITAL LETTER FEI
+03E5 COPTIC SMALL LETTER FEI
+03E6 COPTIC CAPITAL LETTER KHEI
+03E7 COPTIC SMALL LETTER KHEI
+03E8 COPTIC CAPITAL LETTER HORI
+03E9 COPTIC SMALL LETTER HORI
+03EA COPTIC CAPITAL LETTER GANGIA
+03EB COPTIC SMALL LETTER GANGIA
+03EC COPTIC CAPITAL LETTER SHIMA
+03ED COPTIC SMALL LETTER SHIMA
+03EE COPTIC CAPITAL LETTER DEI
+03EF COPTIC SMALL LETTER DEI
+03F0 GREEK KAPPA SYMBOL
+03F1 GREEK RHO SYMBOL
+03F2 GREEK LUNATE SIGMA SYMBOL
+03F3 GREEK LETTER YOT
+03F4 GREEK CAPITAL THETA SYMBOL
+03F5 GREEK LUNATE EPSILON SYMBOL
+03F6 GREEK REVERSED LUNATE EPSILON SYMBOL
+0400 CYRILLIC CAPITAL LETTER IE WITH GRAVE
+0401 CYRILLIC CAPITAL LETTER IO
+0402 CYRILLIC CAPITAL LETTER DJE
+0403 CYRILLIC CAPITAL LETTER GJE
+0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0405 CYRILLIC CAPITAL LETTER DZE
+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0407 CYRILLIC CAPITAL LETTER YI
+0408 CYRILLIC CAPITAL LETTER JE
+0409 CYRILLIC CAPITAL LETTER LJE
+040A CYRILLIC CAPITAL LETTER NJE
+040B CYRILLIC CAPITAL LETTER TSHE
+040C CYRILLIC CAPITAL LETTER KJE
+040D CYRILLIC CAPITAL LETTER I WITH GRAVE
+040E CYRILLIC CAPITAL LETTER SHORT U
+040F CYRILLIC CAPITAL LETTER DZHE
+0410 CYRILLIC CAPITAL LETTER A
+0411 CYRILLIC CAPITAL LETTER BE
+0412 CYRILLIC CAPITAL LETTER VE
+0413 CYRILLIC CAPITAL LETTER GHE
+0414 CYRILLIC CAPITAL LETTER DE
+0415 CYRILLIC CAPITAL LETTER IE
+0416 CYRILLIC CAPITAL LETTER ZHE
+0417 CYRILLIC CAPITAL LETTER ZE
+0418 CYRILLIC CAPITAL LETTER I
+0419 CYRILLIC CAPITAL LETTER SHORT I
+041A CYRILLIC CAPITAL LETTER KA
+041B CYRILLIC CAPITAL LETTER EL
+041C CYRILLIC CAPITAL LETTER EM
+041D CYRILLIC CAPITAL LETTER EN
+041E CYRILLIC CAPITAL LETTER O
+041F CYRILLIC CAPITAL LETTER PE
+0420 CYRILLIC CAPITAL LETTER ER
+0421 CYRILLIC CAPITAL LETTER ES
+0422 CYRILLIC CAPITAL LETTER TE
+0423 CYRILLIC CAPITAL LETTER U
+0424 CYRILLIC CAPITAL LETTER EF
+0425 CYRILLIC CAPITAL LETTER HA
+0426 CYRILLIC CAPITAL LETTER TSE
+0427 CYRILLIC CAPITAL LETTER CHE
+0428 CYRILLIC CAPITAL LETTER SHA
+0429 CYRILLIC CAPITAL LETTER SHCHA
+042A CYRILLIC CAPITAL LETTER HARD SIGN
+042B CYRILLIC CAPITAL LETTER YERU
+042C CYRILLIC CAPITAL LETTER SOFT SIGN
+042D CYRILLIC CAPITAL LETTER E
+042E CYRILLIC CAPITAL LETTER YU
+042F CYRILLIC CAPITAL LETTER YA
+0430 CYRILLIC SMALL LETTER A
+0431 CYRILLIC SMALL LETTER BE
+0432 CYRILLIC SMALL LETTER VE
+0433 CYRILLIC SMALL LETTER GHE
+0434 CYRILLIC SMALL LETTER DE
+0435 CYRILLIC SMALL LETTER IE
+0436 CYRILLIC SMALL LETTER ZHE
+0437 CYRILLIC SMALL LETTER ZE
+0438 CYRILLIC SMALL LETTER I
+0439 CYRILLIC SMALL LETTER SHORT I
+043A CYRILLIC SMALL LETTER KA
+043B CYRILLIC SMALL LETTER EL
+043C CYRILLIC SMALL LETTER EM
+043D CYRILLIC SMALL LETTER EN
+043E CYRILLIC SMALL LETTER O
+043F CYRILLIC SMALL LETTER PE
+0440 CYRILLIC SMALL LETTER ER
+0441 CYRILLIC SMALL LETTER ES
+0442 CYRILLIC SMALL LETTER TE
+0443 CYRILLIC SMALL LETTER U
+0444 CYRILLIC SMALL LETTER EF
+0445 CYRILLIC SMALL LETTER HA
+0446 CYRILLIC SMALL LETTER TSE
+0447 CYRILLIC SMALL LETTER CHE
+0448 CYRILLIC SMALL LETTER SHA
+0449 CYRILLIC SMALL LETTER SHCHA
+044A CYRILLIC SMALL LETTER HARD SIGN
+044B CYRILLIC SMALL LETTER YERU
+044C CYRILLIC SMALL LETTER SOFT SIGN
+044D CYRILLIC SMALL LETTER E
+044E CYRILLIC SMALL LETTER YU
+044F CYRILLIC SMALL LETTER YA
+0450 CYRILLIC SMALL LETTER IE WITH GRAVE
+0451 CYRILLIC SMALL LETTER IO
+0452 CYRILLIC SMALL LETTER DJE
+0453 CYRILLIC SMALL LETTER GJE
+0454 CYRILLIC SMALL LETTER UKRAINIAN IE
+0455 CYRILLIC SMALL LETTER DZE
+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0457 CYRILLIC SMALL LETTER YI
+0458 CYRILLIC SMALL LETTER JE
+0459 CYRILLIC SMALL LETTER LJE
+045A CYRILLIC SMALL LETTER NJE
+045B CYRILLIC SMALL LETTER TSHE
+045C CYRILLIC SMALL LETTER KJE
+045D CYRILLIC SMALL LETTER I WITH GRAVE
+045E CYRILLIC SMALL LETTER SHORT U
+045F CYRILLIC SMALL LETTER DZHE
+0460 CYRILLIC CAPITAL LETTER OMEGA
+0461 CYRILLIC SMALL LETTER OMEGA
+0462 CYRILLIC CAPITAL LETTER YAT
+0463 CYRILLIC SMALL LETTER YAT
+0464 CYRILLIC CAPITAL LETTER IOTIFIED E
+0465 CYRILLIC SMALL LETTER IOTIFIED E
+0466 CYRILLIC CAPITAL LETTER LITTLE YUS
+0467 CYRILLIC SMALL LETTER LITTLE YUS
+0468 CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+0469 CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+046A CYRILLIC CAPITAL LETTER BIG YUS
+046B CYRILLIC SMALL LETTER BIG YUS
+046C CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+046D CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+046E CYRILLIC CAPITAL LETTER KSI
+046F CYRILLIC SMALL LETTER KSI
+0470 CYRILLIC CAPITAL LETTER PSI
+0471 CYRILLIC SMALL LETTER PSI
+0472 CYRILLIC CAPITAL LETTER FITA
+0473 CYRILLIC SMALL LETTER FITA
+0474 CYRILLIC CAPITAL LETTER IZHITSA
+0475 CYRILLIC SMALL LETTER IZHITSA
+0476 CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0477 CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0478 CYRILLIC CAPITAL LETTER UK
+0479 CYRILLIC SMALL LETTER UK
+047A CYRILLIC CAPITAL LETTER ROUND OMEGA
+047B CYRILLIC SMALL LETTER ROUND OMEGA
+047C CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+047D CYRILLIC SMALL LETTER OMEGA WITH TITLO
+047E CYRILLIC CAPITAL LETTER OT
+047F CYRILLIC SMALL LETTER OT
+0480 CYRILLIC CAPITAL LETTER KOPPA
+0481 CYRILLIC SMALL LETTER KOPPA
+0482 CYRILLIC THOUSANDS SIGN
+0483 COMBINING CYRILLIC TITLO
+0484 COMBINING CYRILLIC PALATALIZATION
+0485 COMBINING CYRILLIC DASIA PNEUMATA
+0486 COMBINING CYRILLIC PSILI PNEUMATA
+0488 COMBINING CYRILLIC HUNDRED THOUSANDS SIGN
+0489 COMBINING CYRILLIC MILLIONS SIGN
+048A CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+048B CYRILLIC SMALL LETTER SHORT I WITH TAIL
+048C CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+048D CYRILLIC SMALL LETTER SEMISOFT SIGN
+048E CYRILLIC CAPITAL LETTER ER WITH TICK
+048F CYRILLIC SMALL LETTER ER WITH TICK
+0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN
+0492 CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0493 CYRILLIC SMALL LETTER GHE WITH STROKE
+0494 CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+0495 CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+0496 CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+0497 CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+0498 CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+0499 CYRILLIC SMALL LETTER ZE WITH DESCENDER
+049A CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+049B CYRILLIC SMALL LETTER KA WITH DESCENDER
+049C CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+049D CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+049E CYRILLIC CAPITAL LETTER KA WITH STROKE
+049F CYRILLIC SMALL LETTER KA WITH STROKE
+04A0 CYRILLIC CAPITAL LETTER BASHKIR KA
+04A1 CYRILLIC SMALL LETTER BASHKIR KA
+04A2 CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A3 CYRILLIC SMALL LETTER EN WITH DESCENDER
+04A4 CYRILLIC CAPITAL LIGATURE EN GHE
+04A5 CYRILLIC SMALL LIGATURE EN GHE
+04A6 CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+04A7 CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+04A8 CYRILLIC CAPITAL LETTER ABKHASIAN HA
+04A9 CYRILLIC SMALL LETTER ABKHASIAN HA
+04AA CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AB CYRILLIC SMALL LETTER ES WITH DESCENDER
+04AC CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+04AD CYRILLIC SMALL LETTER TE WITH DESCENDER
+04AE CYRILLIC CAPITAL LETTER STRAIGHT U
+04AF CYRILLIC SMALL LETTER STRAIGHT U
+04B0 CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+04B1 CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+04B2 CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+04B3 CYRILLIC SMALL LETTER HA WITH DESCENDER
+04B4 CYRILLIC CAPITAL LIGATURE TE TSE
+04B5 CYRILLIC SMALL LIGATURE TE TSE
+04B6 CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+04B7 CYRILLIC SMALL LETTER CHE WITH DESCENDER
+04B8 CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+04B9 CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+04BA CYRILLIC CAPITAL LETTER SHHA
+04BB CYRILLIC SMALL LETTER SHHA
+04BC CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+04BD CYRILLIC SMALL LETTER ABKHASIAN CHE
+04BE CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+04BF CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+04C0 CYRILLIC LETTER PALOCHKA
+04C1 CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+04C2 CYRILLIC SMALL LETTER ZHE WITH BREVE
+04C3 CYRILLIC CAPITAL LETTER KA WITH HOOK
+04C4 CYRILLIC SMALL LETTER KA WITH HOOK
+04C5 CYRILLIC CAPITAL LETTER EL WITH TAIL
+04C6 CYRILLIC SMALL LETTER EL WITH TAIL
+04C7 CYRILLIC CAPITAL LETTER EN WITH HOOK
+04C8 CYRILLIC SMALL LETTER EN WITH HOOK
+04C9 CYRILLIC CAPITAL LETTER EN WITH TAIL
+04CA CYRILLIC SMALL LETTER EN WITH TAIL
+04CB CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+04CC CYRILLIC SMALL LETTER KHAKASSIAN CHE
+04CD CYRILLIC CAPITAL LETTER EM WITH TAIL
+04CE CYRILLIC SMALL LETTER EM WITH TAIL
+04D0 CYRILLIC CAPITAL LETTER A WITH BREVE
+04D1 CYRILLIC SMALL LETTER A WITH BREVE
+04D2 CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04D3 CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D4 CYRILLIC CAPITAL LIGATURE A IE
+04D5 CYRILLIC SMALL LIGATURE A IE
+04D6 CYRILLIC CAPITAL LETTER IE WITH BREVE
+04D7 CYRILLIC SMALL LETTER IE WITH BREVE
+04D8 CYRILLIC CAPITAL LETTER SCHWA
+04D9 CYRILLIC SMALL LETTER SCHWA
+04DA CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04DB CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+04DC CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DD CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+04DE CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04DF CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04E0 CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+04E1 CYRILLIC SMALL LETTER ABKHASIAN DZE
+04E2 CYRILLIC CAPITAL LETTER I WITH MACRON
+04E3 CYRILLIC SMALL LETTER I WITH MACRON
+04E4 CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+04E5 CYRILLIC SMALL LETTER I WITH DIAERESIS
+04E6 CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04E7 CYRILLIC SMALL LETTER O WITH DIAERESIS
+04E8 CYRILLIC CAPITAL LETTER BARRED O
+04E9 CYRILLIC SMALL LETTER BARRED O
+04EA CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+04EB CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+04EC CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+04ED CYRILLIC SMALL LETTER E WITH DIAERESIS
+04EE CYRILLIC CAPITAL LETTER U WITH MACRON
+04EF CYRILLIC SMALL LETTER U WITH MACRON
+04F0 CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F1 CYRILLIC SMALL LETTER U WITH DIAERESIS
+04F2 CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F3 CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+04F4 CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F5 CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F8 CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04F9 CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+0500 CYRILLIC CAPITAL LETTER KOMI DE
+0501 CYRILLIC SMALL LETTER KOMI DE
+0502 CYRILLIC CAPITAL LETTER KOMI DJE
+0503 CYRILLIC SMALL LETTER KOMI DJE
+0504 CYRILLIC CAPITAL LETTER KOMI ZJE
+0505 CYRILLIC SMALL LETTER KOMI ZJE
+0506 CYRILLIC CAPITAL LETTER KOMI DZJE
+0507 CYRILLIC SMALL LETTER KOMI DZJE
+0508 CYRILLIC CAPITAL LETTER KOMI LJE
+0509 CYRILLIC SMALL LETTER KOMI LJE
+050A CYRILLIC CAPITAL LETTER KOMI NJE
+050B CYRILLIC SMALL LETTER KOMI NJE
+050C CYRILLIC CAPITAL LETTER KOMI SJE
+050D CYRILLIC SMALL LETTER KOMI SJE
+050E CYRILLIC CAPITAL LETTER KOMI TJE
+050F CYRILLIC SMALL LETTER KOMI TJE
+0531 ARMENIAN CAPITAL LETTER AYB
+0532 ARMENIAN CAPITAL LETTER BEN
+0533 ARMENIAN CAPITAL LETTER GIM
+0534 ARMENIAN CAPITAL LETTER DA
+0535 ARMENIAN CAPITAL LETTER ECH
+0536 ARMENIAN CAPITAL LETTER ZA
+0537 ARMENIAN CAPITAL LETTER EH
+0538 ARMENIAN CAPITAL LETTER ET
+0539 ARMENIAN CAPITAL LETTER TO
+053A ARMENIAN CAPITAL LETTER ZHE
+053B ARMENIAN CAPITAL LETTER INI
+053C ARMENIAN CAPITAL LETTER LIWN
+053D ARMENIAN CAPITAL LETTER XEH
+053E ARMENIAN CAPITAL LETTER CA
+053F ARMENIAN CAPITAL LETTER KEN
+0540 ARMENIAN CAPITAL LETTER HO
+0541 ARMENIAN CAPITAL LETTER JA
+0542 ARMENIAN CAPITAL LETTER GHAD
+0543 ARMENIAN CAPITAL LETTER CHEH
+0544 ARMENIAN CAPITAL LETTER MEN
+0545 ARMENIAN CAPITAL LETTER YI
+0546 ARMENIAN CAPITAL LETTER NOW
+0547 ARMENIAN CAPITAL LETTER SHA
+0548 ARMENIAN CAPITAL LETTER VO
+0549 ARMENIAN CAPITAL LETTER CHA
+054A ARMENIAN CAPITAL LETTER PEH
+054B ARMENIAN CAPITAL LETTER JHEH
+054C ARMENIAN CAPITAL LETTER RA
+054D ARMENIAN CAPITAL LETTER SEH
+054E ARMENIAN CAPITAL LETTER VEW
+054F ARMENIAN CAPITAL LETTER TIWN
+0550 ARMENIAN CAPITAL LETTER REH
+0551 ARMENIAN CAPITAL LETTER CO
+0552 ARMENIAN CAPITAL LETTER YIWN
+0553 ARMENIAN CAPITAL LETTER PIWR
+0554 ARMENIAN CAPITAL LETTER KEH
+0555 ARMENIAN CAPITAL LETTER OH
+0556 ARMENIAN CAPITAL LETTER FEH
+0559 ARMENIAN MODIFIER LETTER LEFT HALF RING
+055A ARMENIAN APOSTROPHE
+055B ARMENIAN EMPHASIS MARK
+055C ARMENIAN EXCLAMATION MARK
+055D ARMENIAN COMMA
+055E ARMENIAN QUESTION MARK
+055F ARMENIAN ABBREVIATION MARK
+0561 ARMENIAN SMALL LETTER AYB
+0562 ARMENIAN SMALL LETTER BEN
+0563 ARMENIAN SMALL LETTER GIM
+0564 ARMENIAN SMALL LETTER DA
+0565 ARMENIAN SMALL LETTER ECH
+0566 ARMENIAN SMALL LETTER ZA
+0567 ARMENIAN SMALL LETTER EH
+0568 ARMENIAN SMALL LETTER ET
+0569 ARMENIAN SMALL LETTER TO
+056A ARMENIAN SMALL LETTER ZHE
+056B ARMENIAN SMALL LETTER INI
+056C ARMENIAN SMALL LETTER LIWN
+056D ARMENIAN SMALL LETTER XEH
+056E ARMENIAN SMALL LETTER CA
+056F ARMENIAN SMALL LETTER KEN
+0570 ARMENIAN SMALL LETTER HO
+0571 ARMENIAN SMALL LETTER JA
+0572 ARMENIAN SMALL LETTER GHAD
+0573 ARMENIAN SMALL LETTER CHEH
+0574 ARMENIAN SMALL LETTER MEN
+0575 ARMENIAN SMALL LETTER YI
+0576 ARMENIAN SMALL LETTER NOW
+0577 ARMENIAN SMALL LETTER SHA
+0578 ARMENIAN SMALL LETTER VO
+0579 ARMENIAN SMALL LETTER CHA
+057A ARMENIAN SMALL LETTER PEH
+057B ARMENIAN SMALL LETTER JHEH
+057C ARMENIAN SMALL LETTER RA
+057D ARMENIAN SMALL LETTER SEH
+057E ARMENIAN SMALL LETTER VEW
+057F ARMENIAN SMALL LETTER TIWN
+0580 ARMENIAN SMALL LETTER REH
+0581 ARMENIAN SMALL LETTER CO
+0582 ARMENIAN SMALL LETTER YIWN
+0583 ARMENIAN SMALL LETTER PIWR
+0584 ARMENIAN SMALL LETTER KEH
+0585 ARMENIAN SMALL LETTER OH
+0586 ARMENIAN SMALL LETTER FEH
+0587 ARMENIAN SMALL LIGATURE ECH YIWN
+0589 ARMENIAN FULL STOP
+058A ARMENIAN HYPHEN
+0591 HEBREW ACCENT ETNAHTA
+0592 HEBREW ACCENT SEGOL
+0593 HEBREW ACCENT SHALSHELET
+0594 HEBREW ACCENT ZAQEF QATAN
+0595 HEBREW ACCENT ZAQEF GADOL
+0596 HEBREW ACCENT TIPEHA
+0597 HEBREW ACCENT REVIA
+0598 HEBREW ACCENT ZARQA
+0599 HEBREW ACCENT PASHTA
+059A HEBREW ACCENT YETIV
+059B HEBREW ACCENT TEVIR
+059C HEBREW ACCENT GERESH
+059D HEBREW ACCENT GERESH MUQDAM
+059E HEBREW ACCENT GERSHAYIM
+059F HEBREW ACCENT QARNEY PARA
+05A0 HEBREW ACCENT TELISHA GEDOLA
+05A1 HEBREW ACCENT PAZER
+05A3 HEBREW ACCENT MUNAH
+05A4 HEBREW ACCENT MAHAPAKH
+05A5 HEBREW ACCENT MERKHA
+05A6 HEBREW ACCENT MERKHA KEFULA
+05A7 HEBREW ACCENT DARGA
+05A8 HEBREW ACCENT QADMA
+05A9 HEBREW ACCENT TELISHA QETANA
+05AA HEBREW ACCENT YERAH BEN YOMO
+05AB HEBREW ACCENT OLE
+05AC HEBREW ACCENT ILUY
+05AD HEBREW ACCENT DEHI
+05AE HEBREW ACCENT ZINOR
+05AF HEBREW MARK MASORA CIRCLE
+05B0 HEBREW POINT SHEVA
+05B1 HEBREW POINT HATAF SEGOL
+05B2 HEBREW POINT HATAF PATAH
+05B3 HEBREW POINT HATAF QAMATS
+05B4 HEBREW POINT HIRIQ
+05B5 HEBREW POINT TSERE
+05B6 HEBREW POINT SEGOL
+05B7 HEBREW POINT PATAH
+05B8 HEBREW POINT QAMATS
+05B9 HEBREW POINT HOLAM
+05BB HEBREW POINT QUBUTS
+05BC HEBREW POINT DAGESH OR MAPIQ
+05BD HEBREW POINT METEG
+05BE HEBREW PUNCTUATION MAQAF
+05BF HEBREW POINT RAFE
+05C0 HEBREW PUNCTUATION PASEQ
+05C1 HEBREW POINT SHIN DOT
+05C2 HEBREW POINT SIN DOT
+05C3 HEBREW PUNCTUATION SOF PASUQ
+05C4 HEBREW MARK UPPER DOT
+05D0 HEBREW LETTER ALEF
+05D1 HEBREW LETTER BET
+05D2 HEBREW LETTER GIMEL
+05D3 HEBREW LETTER DALET
+05D4 HEBREW LETTER HE
+05D5 HEBREW LETTER VAV
+05D6 HEBREW LETTER ZAYIN
+05D7 HEBREW LETTER HET
+05D8 HEBREW LETTER TET
+05D9 HEBREW LETTER YOD
+05DA HEBREW LETTER FINAL KAF
+05DB HEBREW LETTER KAF
+05DC HEBREW LETTER LAMED
+05DD HEBREW LETTER FINAL MEM
+05DE HEBREW LETTER MEM
+05DF HEBREW LETTER FINAL NUN
+05E0 HEBREW LETTER NUN
+05E1 HEBREW LETTER SAMEKH
+05E2 HEBREW LETTER AYIN
+05E3 HEBREW LETTER FINAL PE
+05E4 HEBREW LETTER PE
+05E5 HEBREW LETTER FINAL TSADI
+05E6 HEBREW LETTER TSADI
+05E7 HEBREW LETTER QOF
+05E8 HEBREW LETTER RESH
+05E9 HEBREW LETTER SHIN
+05EA HEBREW LETTER TAV
+05F0 HEBREW LIGATURE YIDDISH DOUBLE VAV
+05F1 HEBREW LIGATURE YIDDISH VAV YOD
+05F2 HEBREW LIGATURE YIDDISH DOUBLE YOD
+05F3 HEBREW PUNCTUATION GERESH
+05F4 HEBREW PUNCTUATION GERSHAYIM
+060C ARABIC COMMA
+061B ARABIC SEMICOLON
+061F ARABIC QUESTION MARK
+0621 ARABIC LETTER HAMZA
+0622 ARABIC LETTER ALEF WITH MADDA ABOVE
+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE
+0624 ARABIC LETTER WAW WITH HAMZA ABOVE
+0625 ARABIC LETTER ALEF WITH HAMZA BELOW
+0626 ARABIC LETTER YEH WITH HAMZA ABOVE
+0627 ARABIC LETTER ALEF
+0628 ARABIC LETTER BEH
+0629 ARABIC LETTER TEH MARBUTA
+062A ARABIC LETTER TEH
+062B ARABIC LETTER THEH
+062C ARABIC LETTER JEEM
+062D ARABIC LETTER HAH
+062E ARABIC LETTER KHAH
+062F ARABIC LETTER DAL
+0630 ARABIC LETTER THAL
+0631 ARABIC LETTER REH
+0632 ARABIC LETTER ZAIN
+0633 ARABIC LETTER SEEN
+0634 ARABIC LETTER SHEEN
+0635 ARABIC LETTER SAD
+0636 ARABIC LETTER DAD
+0637 ARABIC LETTER TAH
+0638 ARABIC LETTER ZAH
+0639 ARABIC LETTER AIN
+063A ARABIC LETTER GHAIN
+0640 ARABIC TATWEEL
+0641 ARABIC LETTER FEH
+0642 ARABIC LETTER QAF
+0643 ARABIC LETTER KAF
+0644 ARABIC LETTER LAM
+0645 ARABIC LETTER MEEM
+0646 ARABIC LETTER NOON
+0647 ARABIC LETTER HEH
+0648 ARABIC LETTER WAW
+0649 ARABIC LETTER ALEF MAKSURA
+064A ARABIC LETTER YEH
+064B ARABIC FATHATAN
+064C ARABIC DAMMATAN
+064D ARABIC KASRATAN
+064E ARABIC FATHA
+064F ARABIC DAMMA
+0650 ARABIC KASRA
+0651 ARABIC SHADDA
+0652 ARABIC SUKUN
+0653 ARABIC MADDAH ABOVE
+0654 ARABIC HAMZA ABOVE
+0655 ARABIC HAMZA BELOW
+0660 ARABIC-INDIC DIGIT ZERO
+0661 ARABIC-INDIC DIGIT ONE
+0662 ARABIC-INDIC DIGIT TWO
+0663 ARABIC-INDIC DIGIT THREE
+0664 ARABIC-INDIC DIGIT FOUR
+0665 ARABIC-INDIC DIGIT FIVE
+0666 ARABIC-INDIC DIGIT SIX
+0667 ARABIC-INDIC DIGIT SEVEN
+0668 ARABIC-INDIC DIGIT EIGHT
+0669 ARABIC-INDIC DIGIT NINE
+066A ARABIC PERCENT SIGN
+066B ARABIC DECIMAL SEPARATOR
+066C ARABIC THOUSANDS SEPARATOR
+066D ARABIC FIVE POINTED STAR
+066E ARABIC LETTER DOTLESS BEH
+066F ARABIC LETTER DOTLESS QAF
+0670 ARABIC LETTER SUPERSCRIPT ALEF
+0671 ARABIC LETTER ALEF WASLA
+0672 ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
+0673 ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
+0674 ARABIC LETTER HIGH HAMZA
+0675 ARABIC LETTER HIGH HAMZA ALEF
+0676 ARABIC LETTER HIGH HAMZA WAW
+0677 ARABIC LETTER U WITH HAMZA ABOVE
+0678 ARABIC LETTER HIGH HAMZA YEH
+0679 ARABIC LETTER TTEH
+067A ARABIC LETTER TTEHEH
+067B ARABIC LETTER BEEH
+067C ARABIC LETTER TEH WITH RING
+067D ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS
+067E ARABIC LETTER PEH
+067F ARABIC LETTER TEHEH
+0680 ARABIC LETTER BEHEH
+0681 ARABIC LETTER HAH WITH HAMZA ABOVE
+0682 ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE
+0683 ARABIC LETTER NYEH
+0684 ARABIC LETTER DYEH
+0685 ARABIC LETTER HAH WITH THREE DOTS ABOVE
+0686 ARABIC LETTER TCHEH
+0687 ARABIC LETTER TCHEHEH
+0688 ARABIC LETTER DDAL
+0689 ARABIC LETTER DAL WITH RING
+068A ARABIC LETTER DAL WITH DOT BELOW
+068B ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH
+068C ARABIC LETTER DAHAL
+068D ARABIC LETTER DDAHAL
+068E ARABIC LETTER DUL
+068F ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS
+0690 ARABIC LETTER DAL WITH FOUR DOTS ABOVE
+0691 ARABIC LETTER RREH
+0692 ARABIC LETTER REH WITH SMALL V
+0693 ARABIC LETTER REH WITH RING
+0694 ARABIC LETTER REH WITH DOT BELOW
+0695 ARABIC LETTER REH WITH SMALL V BELOW
+0696 ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE
+0697 ARABIC LETTER REH WITH TWO DOTS ABOVE
+0698 ARABIC LETTER JEH
+0699 ARABIC LETTER REH WITH FOUR DOTS ABOVE
+069A ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE
+069B ARABIC LETTER SEEN WITH THREE DOTS BELOW
+069C ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE
+069D ARABIC LETTER SAD WITH TWO DOTS BELOW
+069E ARABIC LETTER SAD WITH THREE DOTS ABOVE
+069F ARABIC LETTER TAH WITH THREE DOTS ABOVE
+06A0 ARABIC LETTER AIN WITH THREE DOTS ABOVE
+06A1 ARABIC LETTER DOTLESS FEH
+06A2 ARABIC LETTER FEH WITH DOT MOVED BELOW
+06A3 ARABIC LETTER FEH WITH DOT BELOW
+06A4 ARABIC LETTER VEH
+06A5 ARABIC LETTER FEH WITH THREE DOTS BELOW
+06A6 ARABIC LETTER PEHEH
+06A7 ARABIC LETTER QAF WITH DOT ABOVE
+06A8 ARABIC LETTER QAF WITH THREE DOTS ABOVE
+06A9 ARABIC LETTER KEHEH
+06AA ARABIC LETTER SWASH KAF
+06AB ARABIC LETTER KAF WITH RING
+06AC ARABIC LETTER KAF WITH DOT ABOVE
+06AD ARABIC LETTER NG
+06AE ARABIC LETTER KAF WITH THREE DOTS BELOW
+06AF ARABIC LETTER GAF
+06B0 ARABIC LETTER GAF WITH RING
+06B1 ARABIC LETTER NGOEH
+06B2 ARABIC LETTER GAF WITH TWO DOTS BELOW
+06B3 ARABIC LETTER GUEH
+06B4 ARABIC LETTER GAF WITH THREE DOTS ABOVE
+06B5 ARABIC LETTER LAM WITH SMALL V
+06B6 ARABIC LETTER LAM WITH DOT ABOVE
+06B7 ARABIC LETTER LAM WITH THREE DOTS ABOVE
+06B8 ARABIC LETTER LAM WITH THREE DOTS BELOW
+06B9 ARABIC LETTER NOON WITH DOT BELOW
+06BA ARABIC LETTER NOON GHUNNA
+06BB ARABIC LETTER RNOON
+06BC ARABIC LETTER NOON WITH RING
+06BD ARABIC LETTER NOON WITH THREE DOTS ABOVE
+06BE ARABIC LETTER HEH DOACHASHMEE
+06BF ARABIC LETTER TCHEH WITH DOT ABOVE
+06C0 ARABIC LETTER HEH WITH YEH ABOVE
+06C1 ARABIC LETTER HEH GOAL
+06C2 ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+06C3 ARABIC LETTER TEH MARBUTA GOAL
+06C4 ARABIC LETTER WAW WITH RING
+06C5 ARABIC LETTER KIRGHIZ OE
+06C6 ARABIC LETTER OE
+06C7 ARABIC LETTER U
+06C8 ARABIC LETTER YU
+06C9 ARABIC LETTER KIRGHIZ YU
+06CA ARABIC LETTER WAW WITH TWO DOTS ABOVE
+06CB ARABIC LETTER VE
+06CC ARABIC LETTER FARSI YEH
+06CD ARABIC LETTER YEH WITH TAIL
+06CE ARABIC LETTER YEH WITH SMALL V
+06CF ARABIC LETTER WAW WITH DOT ABOVE
+06D0 ARABIC LETTER E
+06D1 ARABIC LETTER YEH WITH THREE DOTS BELOW
+06D2 ARABIC LETTER YEH BARREE
+06D3 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D4 ARABIC FULL STOP
+06D5 ARABIC LETTER AE
+06D6 ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA
+06D7 ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA
+06D8 ARABIC SMALL HIGH MEEM INITIAL FORM
+06D9 ARABIC SMALL HIGH LAM ALEF
+06DA ARABIC SMALL HIGH JEEM
+06DB ARABIC SMALL HIGH THREE DOTS
+06DC ARABIC SMALL HIGH SEEN
+06DD ARABIC END OF AYAH
+06DE ARABIC START OF RUB EL HIZB
+06DF ARABIC SMALL HIGH ROUNDED ZERO
+06E0 ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO
+06E1 ARABIC SMALL HIGH DOTLESS HEAD OF KHAH
+06E2 ARABIC SMALL HIGH MEEM ISOLATED FORM
+06E3 ARABIC SMALL LOW SEEN
+06E4 ARABIC SMALL HIGH MADDA
+06E5 ARABIC SMALL WAW
+06E6 ARABIC SMALL YEH
+06E7 ARABIC SMALL HIGH YEH
+06E8 ARABIC SMALL HIGH NOON
+06E9 ARABIC PLACE OF SAJDAH
+06EA ARABIC EMPTY CENTRE LOW STOP
+06EB ARABIC EMPTY CENTRE HIGH STOP
+06EC ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE
+06ED ARABIC SMALL LOW MEEM
+06F0 EXTENDED ARABIC-INDIC DIGIT ZERO
+06F1 EXTENDED ARABIC-INDIC DIGIT ONE
+06F2 EXTENDED ARABIC-INDIC DIGIT TWO
+06F3 EXTENDED ARABIC-INDIC DIGIT THREE
+06F4 EXTENDED ARABIC-INDIC DIGIT FOUR
+06F5 EXTENDED ARABIC-INDIC DIGIT FIVE
+06F6 EXTENDED ARABIC-INDIC DIGIT SIX
+06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN
+06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT
+06F9 EXTENDED ARABIC-INDIC DIGIT NINE
+06FA ARABIC LETTER SHEEN WITH DOT BELOW
+06FB ARABIC LETTER DAD WITH DOT BELOW
+06FC ARABIC LETTER GHAIN WITH DOT BELOW
+06FD ARABIC SIGN SINDHI AMPERSAND
+06FE ARABIC SIGN SINDHI POSTPOSITION MEN
+0700 SYRIAC END OF PARAGRAPH
+0701 SYRIAC SUPRALINEAR FULL STOP
+0702 SYRIAC SUBLINEAR FULL STOP
+0703 SYRIAC SUPRALINEAR COLON
+0704 SYRIAC SUBLINEAR COLON
+0705 SYRIAC HORIZONTAL COLON
+0706 SYRIAC COLON SKEWED LEFT
+0707 SYRIAC COLON SKEWED RIGHT
+0708 SYRIAC SUPRALINEAR COLON SKEWED LEFT
+0709 SYRIAC SUBLINEAR COLON SKEWED RIGHT
+070A SYRIAC CONTRACTION
+070B SYRIAC HARKLEAN OBELUS
+070C SYRIAC HARKLEAN METOBELUS
+070D SYRIAC HARKLEAN ASTERISCUS
+070F SYRIAC ABBREVIATION MARK
+0710 SYRIAC LETTER ALAPH
+0711 SYRIAC LETTER SUPERSCRIPT ALAPH
+0712 SYRIAC LETTER BETH
+0713 SYRIAC LETTER GAMAL
+0714 SYRIAC LETTER GAMAL GARSHUNI
+0715 SYRIAC LETTER DALATH
+0716 SYRIAC LETTER DOTLESS DALATH RISH
+0717 SYRIAC LETTER HE
+0718 SYRIAC LETTER WAW
+0719 SYRIAC LETTER ZAIN
+071A SYRIAC LETTER HETH
+071B SYRIAC LETTER TETH
+071C SYRIAC LETTER TETH GARSHUNI
+071D SYRIAC LETTER YUDH
+071E SYRIAC LETTER YUDH HE
+071F SYRIAC LETTER KAPH
+0720 SYRIAC LETTER LAMADH
+0721 SYRIAC LETTER MIM
+0722 SYRIAC LETTER NUN
+0723 SYRIAC LETTER SEMKATH
+0724 SYRIAC LETTER FINAL SEMKATH
+0725 SYRIAC LETTER E
+0726 SYRIAC LETTER PE
+0727 SYRIAC LETTER REVERSED PE
+0728 SYRIAC LETTER SADHE
+0729 SYRIAC LETTER QAPH
+072A SYRIAC LETTER RISH
+072B SYRIAC LETTER SHIN
+072C SYRIAC LETTER TAW
+0730 SYRIAC PTHAHA ABOVE
+0731 SYRIAC PTHAHA BELOW
+0732 SYRIAC PTHAHA DOTTED
+0733 SYRIAC ZQAPHA ABOVE
+0734 SYRIAC ZQAPHA BELOW
+0735 SYRIAC ZQAPHA DOTTED
+0736 SYRIAC RBASA ABOVE
+0737 SYRIAC RBASA BELOW
+0738 SYRIAC DOTTED ZLAMA HORIZONTAL
+0739 SYRIAC DOTTED ZLAMA ANGULAR
+073A SYRIAC HBASA ABOVE
+073B SYRIAC HBASA BELOW
+073C SYRIAC HBASA-ESASA DOTTED
+073D SYRIAC ESASA ABOVE
+073E SYRIAC ESASA BELOW
+073F SYRIAC RWAHA
+0740 SYRIAC FEMININE DOT
+0741 SYRIAC QUSHSHAYA
+0742 SYRIAC RUKKAKHA
+0743 SYRIAC TWO VERTICAL DOTS ABOVE
+0744 SYRIAC TWO VERTICAL DOTS BELOW
+0745 SYRIAC THREE DOTS ABOVE
+0746 SYRIAC THREE DOTS BELOW
+0747 SYRIAC OBLIQUE LINE ABOVE
+0748 SYRIAC OBLIQUE LINE BELOW
+0749 SYRIAC MUSIC
+074A SYRIAC BARREKH
+0780 THAANA LETTER HAA
+0781 THAANA LETTER SHAVIYANI
+0782 THAANA LETTER NOONU
+0783 THAANA LETTER RAA
+0784 THAANA LETTER BAA
+0785 THAANA LETTER LHAVIYANI
+0786 THAANA LETTER KAAFU
+0787 THAANA LETTER ALIFU
+0788 THAANA LETTER VAAVU
+0789 THAANA LETTER MEEMU
+078A THAANA LETTER FAAFU
+078B THAANA LETTER DHAALU
+078C THAANA LETTER THAA
+078D THAANA LETTER LAAMU
+078E THAANA LETTER GAAFU
+078F THAANA LETTER GNAVIYANI
+0790 THAANA LETTER SEENU
+0791 THAANA LETTER DAVIYANI
+0792 THAANA LETTER ZAVIYANI
+0793 THAANA LETTER TAVIYANI
+0794 THAANA LETTER YAA
+0795 THAANA LETTER PAVIYANI
+0796 THAANA LETTER JAVIYANI
+0797 THAANA LETTER CHAVIYANI
+0798 THAANA LETTER TTAA
+0799 THAANA LETTER HHAA
+079A THAANA LETTER KHAA
+079B THAANA LETTER THAALU
+079C THAANA LETTER ZAA
+079D THAANA LETTER SHEENU
+079E THAANA LETTER SAADHU
+079F THAANA LETTER DAADHU
+07A0 THAANA LETTER TO
+07A1 THAANA LETTER ZO
+07A2 THAANA LETTER AINU
+07A3 THAANA LETTER GHAINU
+07A4 THAANA LETTER QAAFU
+07A5 THAANA LETTER WAAVU
+07A6 THAANA ABAFILI
+07A7 THAANA AABAAFILI
+07A8 THAANA IBIFILI
+07A9 THAANA EEBEEFILI
+07AA THAANA UBUFILI
+07AB THAANA OOBOOFILI
+07AC THAANA EBEFILI
+07AD THAANA EYBEYFILI
+07AE THAANA OBOFILI
+07AF THAANA OABOAFILI
+07B0 THAANA SUKUN
+07B1 THAANA LETTER NAA
+0901 DEVANAGARI SIGN CANDRABINDU
+0902 DEVANAGARI SIGN ANUSVARA
+0903 DEVANAGARI SIGN VISARGA
+0905 DEVANAGARI LETTER A
+0906 DEVANAGARI LETTER AA
+0907 DEVANAGARI LETTER I
+0908 DEVANAGARI LETTER II
+0909 DEVANAGARI LETTER U
+090A DEVANAGARI LETTER UU
+090B DEVANAGARI LETTER VOCALIC R
+090C DEVANAGARI LETTER VOCALIC L
+090D DEVANAGARI LETTER CANDRA E
+090E DEVANAGARI LETTER SHORT E
+090F DEVANAGARI LETTER E
+0910 DEVANAGARI LETTER AI
+0911 DEVANAGARI LETTER CANDRA O
+0912 DEVANAGARI LETTER SHORT O
+0913 DEVANAGARI LETTER O
+0914 DEVANAGARI LETTER AU
+0915 DEVANAGARI LETTER KA
+0916 DEVANAGARI LETTER KHA
+0917 DEVANAGARI LETTER GA
+0918 DEVANAGARI LETTER GHA
+0919 DEVANAGARI LETTER NGA
+091A DEVANAGARI LETTER CA
+091B DEVANAGARI LETTER CHA
+091C DEVANAGARI LETTER JA
+091D DEVANAGARI LETTER JHA
+091E DEVANAGARI LETTER NYA
+091F DEVANAGARI LETTER TTA
+0920 DEVANAGARI LETTER TTHA
+0921 DEVANAGARI LETTER DDA
+0922 DEVANAGARI LETTER DDHA
+0923 DEVANAGARI LETTER NNA
+0924 DEVANAGARI LETTER TA
+0925 DEVANAGARI LETTER THA
+0926 DEVANAGARI LETTER DA
+0927 DEVANAGARI LETTER DHA
+0928 DEVANAGARI LETTER NA
+0929 DEVANAGARI LETTER NNNA
+092A DEVANAGARI LETTER PA
+092B DEVANAGARI LETTER PHA
+092C DEVANAGARI LETTER BA
+092D DEVANAGARI LETTER BHA
+092E DEVANAGARI LETTER MA
+092F DEVANAGARI LETTER YA
+0930 DEVANAGARI LETTER RA
+0931 DEVANAGARI LETTER RRA
+0932 DEVANAGARI LETTER LA
+0933 DEVANAGARI LETTER LLA
+0934 DEVANAGARI LETTER LLLA
+0935 DEVANAGARI LETTER VA
+0936 DEVANAGARI LETTER SHA
+0937 DEVANAGARI LETTER SSA
+0938 DEVANAGARI LETTER SA
+0939 DEVANAGARI LETTER HA
+093C DEVANAGARI SIGN NUKTA
+093D DEVANAGARI SIGN AVAGRAHA
+093E DEVANAGARI VOWEL SIGN AA
+093F DEVANAGARI VOWEL SIGN I
+0940 DEVANAGARI VOWEL SIGN II
+0941 DEVANAGARI VOWEL SIGN U
+0942 DEVANAGARI VOWEL SIGN UU
+0943 DEVANAGARI VOWEL SIGN VOCALIC R
+0944 DEVANAGARI VOWEL SIGN VOCALIC RR
+0945 DEVANAGARI VOWEL SIGN CANDRA E
+0946 DEVANAGARI VOWEL SIGN SHORT E
+0947 DEVANAGARI VOWEL SIGN E
+0948 DEVANAGARI VOWEL SIGN AI
+0949 DEVANAGARI VOWEL SIGN CANDRA O
+094A DEVANAGARI VOWEL SIGN SHORT O
+094B DEVANAGARI VOWEL SIGN O
+094C DEVANAGARI VOWEL SIGN AU
+094D DEVANAGARI SIGN VIRAMA
+0950 DEVANAGARI OM
+0951 DEVANAGARI STRESS SIGN UDATTA
+0952 DEVANAGARI STRESS SIGN ANUDATTA
+0953 DEVANAGARI GRAVE ACCENT
+0954 DEVANAGARI ACUTE ACCENT
+0958 DEVANAGARI LETTER QA
+0959 DEVANAGARI LETTER KHHA
+095A DEVANAGARI LETTER GHHA
+095B DEVANAGARI LETTER ZA
+095C DEVANAGARI LETTER DDDHA
+095D DEVANAGARI LETTER RHA
+095E DEVANAGARI LETTER FA
+095F DEVANAGARI LETTER YYA
+0960 DEVANAGARI LETTER VOCALIC RR
+0961 DEVANAGARI LETTER VOCALIC LL
+0962 DEVANAGARI VOWEL SIGN VOCALIC L
+0963 DEVANAGARI VOWEL SIGN VOCALIC LL
+0964 DEVANAGARI DANDA
+0965 DEVANAGARI DOUBLE DANDA
+0966 DEVANAGARI DIGIT ZERO
+0967 DEVANAGARI DIGIT ONE
+0968 DEVANAGARI DIGIT TWO
+0969 DEVANAGARI DIGIT THREE
+096A DEVANAGARI DIGIT FOUR
+096B DEVANAGARI DIGIT FIVE
+096C DEVANAGARI DIGIT SIX
+096D DEVANAGARI DIGIT SEVEN
+096E DEVANAGARI DIGIT EIGHT
+096F DEVANAGARI DIGIT NINE
+0970 DEVANAGARI ABBREVIATION SIGN
+0981 BENGALI SIGN CANDRABINDU
+0982 BENGALI SIGN ANUSVARA
+0983 BENGALI SIGN VISARGA
+0985 BENGALI LETTER A
+0986 BENGALI LETTER AA
+0987 BENGALI LETTER I
+0988 BENGALI LETTER II
+0989 BENGALI LETTER U
+098A BENGALI LETTER UU
+098B BENGALI LETTER VOCALIC R
+098C BENGALI LETTER VOCALIC L
+098F BENGALI LETTER E
+0990 BENGALI LETTER AI
+0993 BENGALI LETTER O
+0994 BENGALI LETTER AU
+0995 BENGALI LETTER KA
+0996 BENGALI LETTER KHA
+0997 BENGALI LETTER GA
+0998 BENGALI LETTER GHA
+0999 BENGALI LETTER NGA
+099A BENGALI LETTER CA
+099B BENGALI LETTER CHA
+099C BENGALI LETTER JA
+099D BENGALI LETTER JHA
+099E BENGALI LETTER NYA
+099F BENGALI LETTER TTA
+09A0 BENGALI LETTER TTHA
+09A1 BENGALI LETTER DDA
+09A2 BENGALI LETTER DDHA
+09A3 BENGALI LETTER NNA
+09A4 BENGALI LETTER TA
+09A5 BENGALI LETTER THA
+09A6 BENGALI LETTER DA
+09A7 BENGALI LETTER DHA
+09A8 BENGALI LETTER NA
+09AA BENGALI LETTER PA
+09AB BENGALI LETTER PHA
+09AC BENGALI LETTER BA
+09AD BENGALI LETTER BHA
+09AE BENGALI LETTER MA
+09AF BENGALI LETTER YA
+09B0 BENGALI LETTER RA
+09B2 BENGALI LETTER LA
+09B6 BENGALI LETTER SHA
+09B7 BENGALI LETTER SSA
+09B8 BENGALI LETTER SA
+09B9 BENGALI LETTER HA
+09BC BENGALI SIGN NUKTA
+09BE BENGALI VOWEL SIGN AA
+09BF BENGALI VOWEL SIGN I
+09C0 BENGALI VOWEL SIGN II
+09C1 BENGALI VOWEL SIGN U
+09C2 BENGALI VOWEL SIGN UU
+09C3 BENGALI VOWEL SIGN VOCALIC R
+09C4 BENGALI VOWEL SIGN VOCALIC RR
+09C7 BENGALI VOWEL SIGN E
+09C8 BENGALI VOWEL SIGN AI
+09CB BENGALI VOWEL SIGN O
+09CC BENGALI VOWEL SIGN AU
+09CD BENGALI SIGN VIRAMA
+09D7 BENGALI AU LENGTH MARK
+09DC BENGALI LETTER RRA
+09DD BENGALI LETTER RHA
+09DF BENGALI LETTER YYA
+09E0 BENGALI LETTER VOCALIC RR
+09E1 BENGALI LETTER VOCALIC LL
+09E2 BENGALI VOWEL SIGN VOCALIC L
+09E3 BENGALI VOWEL SIGN VOCALIC LL
+09E6 BENGALI DIGIT ZERO
+09E7 BENGALI DIGIT ONE
+09E8 BENGALI DIGIT TWO
+09E9 BENGALI DIGIT THREE
+09EA BENGALI DIGIT FOUR
+09EB BENGALI DIGIT FIVE
+09EC BENGALI DIGIT SIX
+09ED BENGALI DIGIT SEVEN
+09EE BENGALI DIGIT EIGHT
+09EF BENGALI DIGIT NINE
+09F0 BENGALI LETTER RA WITH MIDDLE DIAGONAL
+09F1 BENGALI LETTER RA WITH LOWER DIAGONAL
+09F2 BENGALI RUPEE MARK
+09F3 BENGALI RUPEE SIGN
+09F4 BENGALI CURRENCY NUMERATOR ONE
+09F5 BENGALI CURRENCY NUMERATOR TWO
+09F6 BENGALI CURRENCY NUMERATOR THREE
+09F7 BENGALI CURRENCY NUMERATOR FOUR
+09F8 BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR
+09F9 BENGALI CURRENCY DENOMINATOR SIXTEEN
+09FA BENGALI ISSHAR
+0A02 GURMUKHI SIGN BINDI
+0A05 GURMUKHI LETTER A
+0A06 GURMUKHI LETTER AA
+0A07 GURMUKHI LETTER I
+0A08 GURMUKHI LETTER II
+0A09 GURMUKHI LETTER U
+0A0A GURMUKHI LETTER UU
+0A0F GURMUKHI LETTER EE
+0A10 GURMUKHI LETTER AI
+0A13 GURMUKHI LETTER OO
+0A14 GURMUKHI LETTER AU
+0A15 GURMUKHI LETTER KA
+0A16 GURMUKHI LETTER KHA
+0A17 GURMUKHI LETTER GA
+0A18 GURMUKHI LETTER GHA
+0A19 GURMUKHI LETTER NGA
+0A1A GURMUKHI LETTER CA
+0A1B GURMUKHI LETTER CHA
+0A1C GURMUKHI LETTER JA
+0A1D GURMUKHI LETTER JHA
+0A1E GURMUKHI LETTER NYA
+0A1F GURMUKHI LETTER TTA
+0A20 GURMUKHI LETTER TTHA
+0A21 GURMUKHI LETTER DDA
+0A22 GURMUKHI LETTER DDHA
+0A23 GURMUKHI LETTER NNA
+0A24 GURMUKHI LETTER TA
+0A25 GURMUKHI LETTER THA
+0A26 GURMUKHI LETTER DA
+0A27 GURMUKHI LETTER DHA
+0A28 GURMUKHI LETTER NA
+0A2A GURMUKHI LETTER PA
+0A2B GURMUKHI LETTER PHA
+0A2C GURMUKHI LETTER BA
+0A2D GURMUKHI LETTER BHA
+0A2E GURMUKHI LETTER MA
+0A2F GURMUKHI LETTER YA
+0A30 GURMUKHI LETTER RA
+0A32 GURMUKHI LETTER LA
+0A33 GURMUKHI LETTER LLA
+0A35 GURMUKHI LETTER VA
+0A36 GURMUKHI LETTER SHA
+0A38 GURMUKHI LETTER SA
+0A39 GURMUKHI LETTER HA
+0A3C GURMUKHI SIGN NUKTA
+0A3E GURMUKHI VOWEL SIGN AA
+0A3F GURMUKHI VOWEL SIGN I
+0A40 GURMUKHI VOWEL SIGN II
+0A41 GURMUKHI VOWEL SIGN U
+0A42 GURMUKHI VOWEL SIGN UU
+0A47 GURMUKHI VOWEL SIGN EE
+0A48 GURMUKHI VOWEL SIGN AI
+0A4B GURMUKHI VOWEL SIGN OO
+0A4C GURMUKHI VOWEL SIGN AU
+0A4D GURMUKHI SIGN VIRAMA
+0A59 GURMUKHI LETTER KHHA
+0A5A GURMUKHI LETTER GHHA
+0A5B GURMUKHI LETTER ZA
+0A5C GURMUKHI LETTER RRA
+0A5E GURMUKHI LETTER FA
+0A66 GURMUKHI DIGIT ZERO
+0A67 GURMUKHI DIGIT ONE
+0A68 GURMUKHI DIGIT TWO
+0A69 GURMUKHI DIGIT THREE
+0A6A GURMUKHI DIGIT FOUR
+0A6B GURMUKHI DIGIT FIVE
+0A6C GURMUKHI DIGIT SIX
+0A6D GURMUKHI DIGIT SEVEN
+0A6E GURMUKHI DIGIT EIGHT
+0A6F GURMUKHI DIGIT NINE
+0A70 GURMUKHI TIPPI
+0A71 GURMUKHI ADDAK
+0A72 GURMUKHI IRI
+0A73 GURMUKHI URA
+0A74 GURMUKHI EK ONKAR
+0A81 GUJARATI SIGN CANDRABINDU
+0A82 GUJARATI SIGN ANUSVARA
+0A83 GUJARATI SIGN VISARGA
+0A85 GUJARATI LETTER A
+0A86 GUJARATI LETTER AA
+0A87 GUJARATI LETTER I
+0A88 GUJARATI LETTER II
+0A89 GUJARATI LETTER U
+0A8A GUJARATI LETTER UU
+0A8B GUJARATI LETTER VOCALIC R
+0A8D GUJARATI VOWEL CANDRA E
+0A8F GUJARATI LETTER E
+0A90 GUJARATI LETTER AI
+0A91 GUJARATI VOWEL CANDRA O
+0A93 GUJARATI LETTER O
+0A94 GUJARATI LETTER AU
+0A95 GUJARATI LETTER KA
+0A96 GUJARATI LETTER KHA
+0A97 GUJARATI LETTER GA
+0A98 GUJARATI LETTER GHA
+0A99 GUJARATI LETTER NGA
+0A9A GUJARATI LETTER CA
+0A9B GUJARATI LETTER CHA
+0A9C GUJARATI LETTER JA
+0A9D GUJARATI LETTER JHA
+0A9E GUJARATI LETTER NYA
+0A9F GUJARATI LETTER TTA
+0AA0 GUJARATI LETTER TTHA
+0AA1 GUJARATI LETTER DDA
+0AA2 GUJARATI LETTER DDHA
+0AA3 GUJARATI LETTER NNA
+0AA4 GUJARATI LETTER TA
+0AA5 GUJARATI LETTER THA
+0AA6 GUJARATI LETTER DA
+0AA7 GUJARATI LETTER DHA
+0AA8 GUJARATI LETTER NA
+0AAA GUJARATI LETTER PA
+0AAB GUJARATI LETTER PHA
+0AAC GUJARATI LETTER BA
+0AAD GUJARATI LETTER BHA
+0AAE GUJARATI LETTER MA
+0AAF GUJARATI LETTER YA
+0AB0 GUJARATI LETTER RA
+0AB2 GUJARATI LETTER LA
+0AB3 GUJARATI LETTER LLA
+0AB5 GUJARATI LETTER VA
+0AB6 GUJARATI LETTER SHA
+0AB7 GUJARATI LETTER SSA
+0AB8 GUJARATI LETTER SA
+0AB9 GUJARATI LETTER HA
+0ABC GUJARATI SIGN NUKTA
+0ABD GUJARATI SIGN AVAGRAHA
+0ABE GUJARATI VOWEL SIGN AA
+0ABF GUJARATI VOWEL SIGN I
+0AC0 GUJARATI VOWEL SIGN II
+0AC1 GUJARATI VOWEL SIGN U
+0AC2 GUJARATI VOWEL SIGN UU
+0AC3 GUJARATI VOWEL SIGN VOCALIC R
+0AC4 GUJARATI VOWEL SIGN VOCALIC RR
+0AC5 GUJARATI VOWEL SIGN CANDRA E
+0AC7 GUJARATI VOWEL SIGN E
+0AC8 GUJARATI VOWEL SIGN AI
+0AC9 GUJARATI VOWEL SIGN CANDRA O
+0ACB GUJARATI VOWEL SIGN O
+0ACC GUJARATI VOWEL SIGN AU
+0ACD GUJARATI SIGN VIRAMA
+0AD0 GUJARATI OM
+0AE0 GUJARATI LETTER VOCALIC RR
+0AE6 GUJARATI DIGIT ZERO
+0AE7 GUJARATI DIGIT ONE
+0AE8 GUJARATI DIGIT TWO
+0AE9 GUJARATI DIGIT THREE
+0AEA GUJARATI DIGIT FOUR
+0AEB GUJARATI DIGIT FIVE
+0AEC GUJARATI DIGIT SIX
+0AED GUJARATI DIGIT SEVEN
+0AEE GUJARATI DIGIT EIGHT
+0AEF GUJARATI DIGIT NINE
+0B01 ORIYA SIGN CANDRABINDU
+0B02 ORIYA SIGN ANUSVARA
+0B03 ORIYA SIGN VISARGA
+0B05 ORIYA LETTER A
+0B06 ORIYA LETTER AA
+0B07 ORIYA LETTER I
+0B08 ORIYA LETTER II
+0B09 ORIYA LETTER U
+0B0A ORIYA LETTER UU
+0B0B ORIYA LETTER VOCALIC R
+0B0C ORIYA LETTER VOCALIC L
+0B0F ORIYA LETTER E
+0B10 ORIYA LETTER AI
+0B13 ORIYA LETTER O
+0B14 ORIYA LETTER AU
+0B15 ORIYA LETTER KA
+0B16 ORIYA LETTER KHA
+0B17 ORIYA LETTER GA
+0B18 ORIYA LETTER GHA
+0B19 ORIYA LETTER NGA
+0B1A ORIYA LETTER CA
+0B1B ORIYA LETTER CHA
+0B1C ORIYA LETTER JA
+0B1D ORIYA LETTER JHA
+0B1E ORIYA LETTER NYA
+0B1F ORIYA LETTER TTA
+0B20 ORIYA LETTER TTHA
+0B21 ORIYA LETTER DDA
+0B22 ORIYA LETTER DDHA
+0B23 ORIYA LETTER NNA
+0B24 ORIYA LETTER TA
+0B25 ORIYA LETTER THA
+0B26 ORIYA LETTER DA
+0B27 ORIYA LETTER DHA
+0B28 ORIYA LETTER NA
+0B2A ORIYA LETTER PA
+0B2B ORIYA LETTER PHA
+0B2C ORIYA LETTER BA
+0B2D ORIYA LETTER BHA
+0B2E ORIYA LETTER MA
+0B2F ORIYA LETTER YA
+0B30 ORIYA LETTER RA
+0B32 ORIYA LETTER LA
+0B33 ORIYA LETTER LLA
+0B36 ORIYA LETTER SHA
+0B37 ORIYA LETTER SSA
+0B38 ORIYA LETTER SA
+0B39 ORIYA LETTER HA
+0B3C ORIYA SIGN NUKTA
+0B3D ORIYA SIGN AVAGRAHA
+0B3E ORIYA VOWEL SIGN AA
+0B3F ORIYA VOWEL SIGN I
+0B40 ORIYA VOWEL SIGN II
+0B41 ORIYA VOWEL SIGN U
+0B42 ORIYA VOWEL SIGN UU
+0B43 ORIYA VOWEL SIGN VOCALIC R
+0B47 ORIYA VOWEL SIGN E
+0B48 ORIYA VOWEL SIGN AI
+0B4B ORIYA VOWEL SIGN O
+0B4C ORIYA VOWEL SIGN AU
+0B4D ORIYA SIGN VIRAMA
+0B56 ORIYA AI LENGTH MARK
+0B57 ORIYA AU LENGTH MARK
+0B5C ORIYA LETTER RRA
+0B5D ORIYA LETTER RHA
+0B5F ORIYA LETTER YYA
+0B60 ORIYA LETTER VOCALIC RR
+0B61 ORIYA LETTER VOCALIC LL
+0B66 ORIYA DIGIT ZERO
+0B67 ORIYA DIGIT ONE
+0B68 ORIYA DIGIT TWO
+0B69 ORIYA DIGIT THREE
+0B6A ORIYA DIGIT FOUR
+0B6B ORIYA DIGIT FIVE
+0B6C ORIYA DIGIT SIX
+0B6D ORIYA DIGIT SEVEN
+0B6E ORIYA DIGIT EIGHT
+0B6F ORIYA DIGIT NINE
+0B70 ORIYA ISSHAR
+0B82 TAMIL SIGN ANUSVARA
+0B83 TAMIL SIGN VISARGA
+0B85 TAMIL LETTER A
+0B86 TAMIL LETTER AA
+0B87 TAMIL LETTER I
+0B88 TAMIL LETTER II
+0B89 TAMIL LETTER U
+0B8A TAMIL LETTER UU
+0B8E TAMIL LETTER E
+0B8F TAMIL LETTER EE
+0B90 TAMIL LETTER AI
+0B92 TAMIL LETTER O
+0B93 TAMIL LETTER OO
+0B94 TAMIL LETTER AU
+0B95 TAMIL LETTER KA
+0B99 TAMIL LETTER NGA
+0B9A TAMIL LETTER CA
+0B9C TAMIL LETTER JA
+0B9E TAMIL LETTER NYA
+0B9F TAMIL LETTER TTA
+0BA3 TAMIL LETTER NNA
+0BA4 TAMIL LETTER TA
+0BA8 TAMIL LETTER NA
+0BA9 TAMIL LETTER NNNA
+0BAA TAMIL LETTER PA
+0BAE TAMIL LETTER MA
+0BAF TAMIL LETTER YA
+0BB0 TAMIL LETTER RA
+0BB1 TAMIL LETTER RRA
+0BB2 TAMIL LETTER LA
+0BB3 TAMIL LETTER LLA
+0BB4 TAMIL LETTER LLLA
+0BB5 TAMIL LETTER VA
+0BB7 TAMIL LETTER SSA
+0BB8 TAMIL LETTER SA
+0BB9 TAMIL LETTER HA
+0BBE TAMIL VOWEL SIGN AA
+0BBF TAMIL VOWEL SIGN I
+0BC0 TAMIL VOWEL SIGN II
+0BC1 TAMIL VOWEL SIGN U
+0BC2 TAMIL VOWEL SIGN UU
+0BC6 TAMIL VOWEL SIGN E
+0BC7 TAMIL VOWEL SIGN EE
+0BC8 TAMIL VOWEL SIGN AI
+0BCA TAMIL VOWEL SIGN O
+0BCB TAMIL VOWEL SIGN OO
+0BCC TAMIL VOWEL SIGN AU
+0BCD TAMIL SIGN VIRAMA
+0BD7 TAMIL AU LENGTH MARK
+0BE7 TAMIL DIGIT ONE
+0BE8 TAMIL DIGIT TWO
+0BE9 TAMIL DIGIT THREE
+0BEA TAMIL DIGIT FOUR
+0BEB TAMIL DIGIT FIVE
+0BEC TAMIL DIGIT SIX
+0BED TAMIL DIGIT SEVEN
+0BEE TAMIL DIGIT EIGHT
+0BEF TAMIL DIGIT NINE
+0BF0 TAMIL NUMBER TEN
+0BF1 TAMIL NUMBER ONE HUNDRED
+0BF2 TAMIL NUMBER ONE THOUSAND
+0C01 TELUGU SIGN CANDRABINDU
+0C02 TELUGU SIGN ANUSVARA
+0C03 TELUGU SIGN VISARGA
+0C05 TELUGU LETTER A
+0C06 TELUGU LETTER AA
+0C07 TELUGU LETTER I
+0C08 TELUGU LETTER II
+0C09 TELUGU LETTER U
+0C0A TELUGU LETTER UU
+0C0B TELUGU LETTER VOCALIC R
+0C0C TELUGU LETTER VOCALIC L
+0C0E TELUGU LETTER E
+0C0F TELUGU LETTER EE
+0C10 TELUGU LETTER AI
+0C12 TELUGU LETTER O
+0C13 TELUGU LETTER OO
+0C14 TELUGU LETTER AU
+0C15 TELUGU LETTER KA
+0C16 TELUGU LETTER KHA
+0C17 TELUGU LETTER GA
+0C18 TELUGU LETTER GHA
+0C19 TELUGU LETTER NGA
+0C1A TELUGU LETTER CA
+0C1B TELUGU LETTER CHA
+0C1C TELUGU LETTER JA
+0C1D TELUGU LETTER JHA
+0C1E TELUGU LETTER NYA
+0C1F TELUGU LETTER TTA
+0C20 TELUGU LETTER TTHA
+0C21 TELUGU LETTER DDA
+0C22 TELUGU LETTER DDHA
+0C23 TELUGU LETTER NNA
+0C24 TELUGU LETTER TA
+0C25 TELUGU LETTER THA
+0C26 TELUGU LETTER DA
+0C27 TELUGU LETTER DHA
+0C28 TELUGU LETTER NA
+0C2A TELUGU LETTER PA
+0C2B TELUGU LETTER PHA
+0C2C TELUGU LETTER BA
+0C2D TELUGU LETTER BHA
+0C2E TELUGU LETTER MA
+0C2F TELUGU LETTER YA
+0C30 TELUGU LETTER RA
+0C31 TELUGU LETTER RRA
+0C32 TELUGU LETTER LA
+0C33 TELUGU LETTER LLA
+0C35 TELUGU LETTER VA
+0C36 TELUGU LETTER SHA
+0C37 TELUGU LETTER SSA
+0C38 TELUGU LETTER SA
+0C39 TELUGU LETTER HA
+0C3E TELUGU VOWEL SIGN AA
+0C3F TELUGU VOWEL SIGN I
+0C40 TELUGU VOWEL SIGN II
+0C41 TELUGU VOWEL SIGN U
+0C42 TELUGU VOWEL SIGN UU
+0C43 TELUGU VOWEL SIGN VOCALIC R
+0C44 TELUGU VOWEL SIGN VOCALIC RR
+0C46 TELUGU VOWEL SIGN E
+0C47 TELUGU VOWEL SIGN EE
+0C48 TELUGU VOWEL SIGN AI
+0C4A TELUGU VOWEL SIGN O
+0C4B TELUGU VOWEL SIGN OO
+0C4C TELUGU VOWEL SIGN AU
+0C4D TELUGU SIGN VIRAMA
+0C55 TELUGU LENGTH MARK
+0C56 TELUGU AI LENGTH MARK
+0C60 TELUGU LETTER VOCALIC RR
+0C61 TELUGU LETTER VOCALIC LL
+0C66 TELUGU DIGIT ZERO
+0C67 TELUGU DIGIT ONE
+0C68 TELUGU DIGIT TWO
+0C69 TELUGU DIGIT THREE
+0C6A TELUGU DIGIT FOUR
+0C6B TELUGU DIGIT FIVE
+0C6C TELUGU DIGIT SIX
+0C6D TELUGU DIGIT SEVEN
+0C6E TELUGU DIGIT EIGHT
+0C6F TELUGU DIGIT NINE
+0C82 KANNADA SIGN ANUSVARA
+0C83 KANNADA SIGN VISARGA
+0C85 KANNADA LETTER A
+0C86 KANNADA LETTER AA
+0C87 KANNADA LETTER I
+0C88 KANNADA LETTER II
+0C89 KANNADA LETTER U
+0C8A KANNADA LETTER UU
+0C8B KANNADA LETTER VOCALIC R
+0C8C KANNADA LETTER VOCALIC L
+0C8E KANNADA LETTER E
+0C8F KANNADA LETTER EE
+0C90 KANNADA LETTER AI
+0C92 KANNADA LETTER O
+0C93 KANNADA LETTER OO
+0C94 KANNADA LETTER AU
+0C95 KANNADA LETTER KA
+0C96 KANNADA LETTER KHA
+0C97 KANNADA LETTER GA
+0C98 KANNADA LETTER GHA
+0C99 KANNADA LETTER NGA
+0C9A KANNADA LETTER CA
+0C9B KANNADA LETTER CHA
+0C9C KANNADA LETTER JA
+0C9D KANNADA LETTER JHA
+0C9E KANNADA LETTER NYA
+0C9F KANNADA LETTER TTA
+0CA0 KANNADA LETTER TTHA
+0CA1 KANNADA LETTER DDA
+0CA2 KANNADA LETTER DDHA
+0CA3 KANNADA LETTER NNA
+0CA4 KANNADA LETTER TA
+0CA5 KANNADA LETTER THA
+0CA6 KANNADA LETTER DA
+0CA7 KANNADA LETTER DHA
+0CA8 KANNADA LETTER NA
+0CAA KANNADA LETTER PA
+0CAB KANNADA LETTER PHA
+0CAC KANNADA LETTER BA
+0CAD KANNADA LETTER BHA
+0CAE KANNADA LETTER MA
+0CAF KANNADA LETTER YA
+0CB0 KANNADA LETTER RA
+0CB1 KANNADA LETTER RRA
+0CB2 KANNADA LETTER LA
+0CB3 KANNADA LETTER LLA
+0CB5 KANNADA LETTER VA
+0CB6 KANNADA LETTER SHA
+0CB7 KANNADA LETTER SSA
+0CB8 KANNADA LETTER SA
+0CB9 KANNADA LETTER HA
+0CBE KANNADA VOWEL SIGN AA
+0CBF KANNADA VOWEL SIGN I
+0CC0 KANNADA VOWEL SIGN II
+0CC1 KANNADA VOWEL SIGN U
+0CC2 KANNADA VOWEL SIGN UU
+0CC3 KANNADA VOWEL SIGN VOCALIC R
+0CC4 KANNADA VOWEL SIGN VOCALIC RR
+0CC6 KANNADA VOWEL SIGN E
+0CC7 KANNADA VOWEL SIGN EE
+0CC8 KANNADA VOWEL SIGN AI
+0CCA KANNADA VOWEL SIGN O
+0CCB KANNADA VOWEL SIGN OO
+0CCC KANNADA VOWEL SIGN AU
+0CCD KANNADA SIGN VIRAMA
+0CD5 KANNADA LENGTH MARK
+0CD6 KANNADA AI LENGTH MARK
+0CDE KANNADA LETTER FA
+0CE0 KANNADA LETTER VOCALIC RR
+0CE1 KANNADA LETTER VOCALIC LL
+0CE6 KANNADA DIGIT ZERO
+0CE7 KANNADA DIGIT ONE
+0CE8 KANNADA DIGIT TWO
+0CE9 KANNADA DIGIT THREE
+0CEA KANNADA DIGIT FOUR
+0CEB KANNADA DIGIT FIVE
+0CEC KANNADA DIGIT SIX
+0CED KANNADA DIGIT SEVEN
+0CEE KANNADA DIGIT EIGHT
+0CEF KANNADA DIGIT NINE
+0D02 MALAYALAM SIGN ANUSVARA
+0D03 MALAYALAM SIGN VISARGA
+0D05 MALAYALAM LETTER A
+0D06 MALAYALAM LETTER AA
+0D07 MALAYALAM LETTER I
+0D08 MALAYALAM LETTER II
+0D09 MALAYALAM LETTER U
+0D0A MALAYALAM LETTER UU
+0D0B MALAYALAM LETTER VOCALIC R
+0D0C MALAYALAM LETTER VOCALIC L
+0D0E MALAYALAM LETTER E
+0D0F MALAYALAM LETTER EE
+0D10 MALAYALAM LETTER AI
+0D12 MALAYALAM LETTER O
+0D13 MALAYALAM LETTER OO
+0D14 MALAYALAM LETTER AU
+0D15 MALAYALAM LETTER KA
+0D16 MALAYALAM LETTER KHA
+0D17 MALAYALAM LETTER GA
+0D18 MALAYALAM LETTER GHA
+0D19 MALAYALAM LETTER NGA
+0D1A MALAYALAM LETTER CA
+0D1B MALAYALAM LETTER CHA
+0D1C MALAYALAM LETTER JA
+0D1D MALAYALAM LETTER JHA
+0D1E MALAYALAM LETTER NYA
+0D1F MALAYALAM LETTER TTA
+0D20 MALAYALAM LETTER TTHA
+0D21 MALAYALAM LETTER DDA
+0D22 MALAYALAM LETTER DDHA
+0D23 MALAYALAM LETTER NNA
+0D24 MALAYALAM LETTER TA
+0D25 MALAYALAM LETTER THA
+0D26 MALAYALAM LETTER DA
+0D27 MALAYALAM LETTER DHA
+0D28 MALAYALAM LETTER NA
+0D2A MALAYALAM LETTER PA
+0D2B MALAYALAM LETTER PHA
+0D2C MALAYALAM LETTER BA
+0D2D MALAYALAM LETTER BHA
+0D2E MALAYALAM LETTER MA
+0D2F MALAYALAM LETTER YA
+0D30 MALAYALAM LETTER RA
+0D31 MALAYALAM LETTER RRA
+0D32 MALAYALAM LETTER LA
+0D33 MALAYALAM LETTER LLA
+0D34 MALAYALAM LETTER LLLA
+0D35 MALAYALAM LETTER VA
+0D36 MALAYALAM LETTER SHA
+0D37 MALAYALAM LETTER SSA
+0D38 MALAYALAM LETTER SA
+0D39 MALAYALAM LETTER HA
+0D3E MALAYALAM VOWEL SIGN AA
+0D3F MALAYALAM VOWEL SIGN I
+0D40 MALAYALAM VOWEL SIGN II
+0D41 MALAYALAM VOWEL SIGN U
+0D42 MALAYALAM VOWEL SIGN UU
+0D43 MALAYALAM VOWEL SIGN VOCALIC R
+0D46 MALAYALAM VOWEL SIGN E
+0D47 MALAYALAM VOWEL SIGN EE
+0D48 MALAYALAM VOWEL SIGN AI
+0D4A MALAYALAM VOWEL SIGN O
+0D4B MALAYALAM VOWEL SIGN OO
+0D4C MALAYALAM VOWEL SIGN AU
+0D4D MALAYALAM SIGN VIRAMA
+0D57 MALAYALAM AU LENGTH MARK
+0D60 MALAYALAM LETTER VOCALIC RR
+0D61 MALAYALAM LETTER VOCALIC LL
+0D66 MALAYALAM DIGIT ZERO
+0D67 MALAYALAM DIGIT ONE
+0D68 MALAYALAM DIGIT TWO
+0D69 MALAYALAM DIGIT THREE
+0D6A MALAYALAM DIGIT FOUR
+0D6B MALAYALAM DIGIT FIVE
+0D6C MALAYALAM DIGIT SIX
+0D6D MALAYALAM DIGIT SEVEN
+0D6E MALAYALAM DIGIT EIGHT
+0D6F MALAYALAM DIGIT NINE
+0D82 SINHALA SIGN ANUSVARAYA
+0D83 SINHALA SIGN VISARGAYA
+0D85 SINHALA LETTER AYANNA
+0D86 SINHALA LETTER AAYANNA
+0D87 SINHALA LETTER AEYANNA
+0D88 SINHALA LETTER AEEYANNA
+0D89 SINHALA LETTER IYANNA
+0D8A SINHALA LETTER IIYANNA
+0D8B SINHALA LETTER UYANNA
+0D8C SINHALA LETTER UUYANNA
+0D8D SINHALA LETTER IRUYANNA
+0D8E SINHALA LETTER IRUUYANNA
+0D8F SINHALA LETTER ILUYANNA
+0D90 SINHALA LETTER ILUUYANNA
+0D91 SINHALA LETTER EYANNA
+0D92 SINHALA LETTER EEYANNA
+0D93 SINHALA LETTER AIYANNA
+0D94 SINHALA LETTER OYANNA
+0D95 SINHALA LETTER OOYANNA
+0D96 SINHALA LETTER AUYANNA
+0D9A SINHALA LETTER ALPAPRAANA KAYANNA
+0D9B SINHALA LETTER MAHAAPRAANA KAYANNA
+0D9C SINHALA LETTER ALPAPRAANA GAYANNA
+0D9D SINHALA LETTER MAHAAPRAANA GAYANNA
+0D9E SINHALA LETTER KANTAJA NAASIKYAYA
+0D9F SINHALA LETTER SANYAKA GAYANNA
+0DA0 SINHALA LETTER ALPAPRAANA CAYANNA
+0DA1 SINHALA LETTER MAHAAPRAANA CAYANNA
+0DA2 SINHALA LETTER ALPAPRAANA JAYANNA
+0DA3 SINHALA LETTER MAHAAPRAANA JAYANNA
+0DA4 SINHALA LETTER TAALUJA NAASIKYAYA
+0DA5 SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
+0DA6 SINHALA LETTER SANYAKA JAYANNA
+0DA7 SINHALA LETTER ALPAPRAANA TTAYANNA
+0DA8 SINHALA LETTER MAHAAPRAANA TTAYANNA
+0DA9 SINHALA LETTER ALPAPRAANA DDAYANNA
+0DAA SINHALA LETTER MAHAAPRAANA DDAYANNA
+0DAB SINHALA LETTER MUURDHAJA NAYANNA
+0DAC SINHALA LETTER SANYAKA DDAYANNA
+0DAD SINHALA LETTER ALPAPRAANA TAYANNA
+0DAE SINHALA LETTER MAHAAPRAANA TAYANNA
+0DAF SINHALA LETTER ALPAPRAANA DAYANNA
+0DB0 SINHALA LETTER MAHAAPRAANA DAYANNA
+0DB1 SINHALA LETTER DANTAJA NAYANNA
+0DB3 SINHALA LETTER SANYAKA DAYANNA
+0DB4 SINHALA LETTER ALPAPRAANA PAYANNA
+0DB5 SINHALA LETTER MAHAAPRAANA PAYANNA
+0DB6 SINHALA LETTER ALPAPRAANA BAYANNA
+0DB7 SINHALA LETTER MAHAAPRAANA BAYANNA
+0DB8 SINHALA LETTER MAYANNA
+0DB9 SINHALA LETTER AMBA BAYANNA
+0DBA SINHALA LETTER YAYANNA
+0DBB SINHALA LETTER RAYANNA
+0DBD SINHALA LETTER DANTAJA LAYANNA
+0DC0 SINHALA LETTER VAYANNA
+0DC1 SINHALA LETTER TAALUJA SAYANNA
+0DC2 SINHALA LETTER MUURDHAJA SAYANNA
+0DC3 SINHALA LETTER DANTAJA SAYANNA
+0DC4 SINHALA LETTER HAYANNA
+0DC5 SINHALA LETTER MUURDHAJA LAYANNA
+0DC6 SINHALA LETTER FAYANNA
+0DCA SINHALA SIGN AL-LAKUNA
+0DCF SINHALA VOWEL SIGN AELA-PILLA
+0DD0 SINHALA VOWEL SIGN KETTI AEDA-PILLA
+0DD1 SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2 SINHALA VOWEL SIGN KETTI IS-PILLA
+0DD3 SINHALA VOWEL SIGN DIGA IS-PILLA
+0DD4 SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6 SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8 SINHALA VOWEL SIGN GAETTA-PILLA
+0DD9 SINHALA VOWEL SIGN KOMBUVA
+0DDA SINHALA VOWEL SIGN DIGA KOMBUVA
+0DDB SINHALA VOWEL SIGN KOMBU DEKA
+0DDC SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
+0DDD SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
+0DDE SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+0DDF SINHALA VOWEL SIGN GAYANUKITTA
+0DF2 SINHALA VOWEL SIGN DIGA GAETTA-PILLA
+0DF3 SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0DF4 SINHALA PUNCTUATION KUNDDALIYA
+0E01 THAI CHARACTER KO KAI
+0E02 THAI CHARACTER KHO KHAI
+0E03 THAI CHARACTER KHO KHUAT
+0E04 THAI CHARACTER KHO KHWAI
+0E05 THAI CHARACTER KHO KHON
+0E06 THAI CHARACTER KHO RAKHANG
+0E07 THAI CHARACTER NGO NGU
+0E08 THAI CHARACTER CHO CHAN
+0E09 THAI CHARACTER CHO CHING
+0E0A THAI CHARACTER CHO CHANG
+0E0B THAI CHARACTER SO SO
+0E0C THAI CHARACTER CHO CHOE
+0E0D THAI CHARACTER YO YING
+0E0E THAI CHARACTER DO CHADA
+0E0F THAI CHARACTER TO PATAK
+0E10 THAI CHARACTER THO THAN
+0E11 THAI CHARACTER THO NANGMONTHO
+0E12 THAI CHARACTER THO PHUTHAO
+0E13 THAI CHARACTER NO NEN
+0E14 THAI CHARACTER DO DEK
+0E15 THAI CHARACTER TO TAO
+0E16 THAI CHARACTER THO THUNG
+0E17 THAI CHARACTER THO THAHAN
+0E18 THAI CHARACTER THO THONG
+0E19 THAI CHARACTER NO NU
+0E1A THAI CHARACTER BO BAIMAI
+0E1B THAI CHARACTER PO PLA
+0E1C THAI CHARACTER PHO PHUNG
+0E1D THAI CHARACTER FO FA
+0E1E THAI CHARACTER PHO PHAN
+0E1F THAI CHARACTER FO FAN
+0E20 THAI CHARACTER PHO SAMPHAO
+0E21 THAI CHARACTER MO MA
+0E22 THAI CHARACTER YO YAK
+0E23 THAI CHARACTER RO RUA
+0E24 THAI CHARACTER RU
+0E25 THAI CHARACTER LO LING
+0E26 THAI CHARACTER LU
+0E27 THAI CHARACTER WO WAEN
+0E28 THAI CHARACTER SO SALA
+0E29 THAI CHARACTER SO RUSI
+0E2A THAI CHARACTER SO SUA
+0E2B THAI CHARACTER HO HIP
+0E2C THAI CHARACTER LO CHULA
+0E2D THAI CHARACTER O ANG
+0E2E THAI CHARACTER HO NOKHUK
+0E2F THAI CHARACTER PAIYANNOI
+0E30 THAI CHARACTER SARA A
+0E31 THAI CHARACTER MAI HAN-AKAT
+0E32 THAI CHARACTER SARA AA
+0E33 THAI CHARACTER SARA AM
+0E34 THAI CHARACTER SARA I
+0E35 THAI CHARACTER SARA II
+0E36 THAI CHARACTER SARA UE
+0E37 THAI CHARACTER SARA UEE
+0E38 THAI CHARACTER SARA U
+0E39 THAI CHARACTER SARA UU
+0E3A THAI CHARACTER PHINTHU
+0E3F THAI CURRENCY SYMBOL BAHT
+0E40 THAI CHARACTER SARA E
+0E41 THAI CHARACTER SARA AE
+0E42 THAI CHARACTER SARA O
+0E43 THAI CHARACTER SARA AI MAIMUAN
+0E44 THAI CHARACTER SARA AI MAIMALAI
+0E45 THAI CHARACTER LAKKHANGYAO
+0E46 THAI CHARACTER MAIYAMOK
+0E47 THAI CHARACTER MAITAIKHU
+0E48 THAI CHARACTER MAI EK
+0E49 THAI CHARACTER MAI THO
+0E4A THAI CHARACTER MAI TRI
+0E4B THAI CHARACTER MAI CHATTAWA
+0E4C THAI CHARACTER THANTHAKHAT
+0E4D THAI CHARACTER NIKHAHIT
+0E4E THAI CHARACTER YAMAKKAN
+0E4F THAI CHARACTER FONGMAN
+0E50 THAI DIGIT ZERO
+0E51 THAI DIGIT ONE
+0E52 THAI DIGIT TWO
+0E53 THAI DIGIT THREE
+0E54 THAI DIGIT FOUR
+0E55 THAI DIGIT FIVE
+0E56 THAI DIGIT SIX
+0E57 THAI DIGIT SEVEN
+0E58 THAI DIGIT EIGHT
+0E59 THAI DIGIT NINE
+0E5A THAI CHARACTER ANGKHANKHU
+0E5B THAI CHARACTER KHOMUT
+0E81 LAO LETTER KO
+0E82 LAO LETTER KHO SUNG
+0E84 LAO LETTER KHO TAM
+0E87 LAO LETTER NGO
+0E88 LAO LETTER CO
+0E8A LAO LETTER SO TAM
+0E8D LAO LETTER NYO
+0E94 LAO LETTER DO
+0E95 LAO LETTER TO
+0E96 LAO LETTER THO SUNG
+0E97 LAO LETTER THO TAM
+0E99 LAO LETTER NO
+0E9A LAO LETTER BO
+0E9B LAO LETTER PO
+0E9C LAO LETTER PHO SUNG
+0E9D LAO LETTER FO TAM
+0E9E LAO LETTER PHO TAM
+0E9F LAO LETTER FO SUNG
+0EA1 LAO LETTER MO
+0EA2 LAO LETTER YO
+0EA3 LAO LETTER LO LING
+0EA5 LAO LETTER LO LOOT
+0EA7 LAO LETTER WO
+0EAA LAO LETTER SO SUNG
+0EAB LAO LETTER HO SUNG
+0EAD LAO LETTER O
+0EAE LAO LETTER HO TAM
+0EAF LAO ELLIPSIS
+0EB0 LAO VOWEL SIGN A
+0EB1 LAO VOWEL SIGN MAI KAN
+0EB2 LAO VOWEL SIGN AA
+0EB3 LAO VOWEL SIGN AM
+0EB4 LAO VOWEL SIGN I
+0EB5 LAO VOWEL SIGN II
+0EB6 LAO VOWEL SIGN Y
+0EB7 LAO VOWEL SIGN YY
+0EB8 LAO VOWEL SIGN U
+0EB9 LAO VOWEL SIGN UU
+0EBB LAO VOWEL SIGN MAI KON
+0EBC LAO SEMIVOWEL SIGN LO
+0EBD LAO SEMIVOWEL SIGN NYO
+0EC0 LAO VOWEL SIGN E
+0EC1 LAO VOWEL SIGN EI
+0EC2 LAO VOWEL SIGN O
+0EC3 LAO VOWEL SIGN AY
+0EC4 LAO VOWEL SIGN AI
+0EC6 LAO KO LA
+0EC8 LAO TONE MAI EK
+0EC9 LAO TONE MAI THO
+0ECA LAO TONE MAI TI
+0ECB LAO TONE MAI CATAWA
+0ECC LAO CANCELLATION MARK
+0ECD LAO NIGGAHITA
+0ED0 LAO DIGIT ZERO
+0ED1 LAO DIGIT ONE
+0ED2 LAO DIGIT TWO
+0ED3 LAO DIGIT THREE
+0ED4 LAO DIGIT FOUR
+0ED5 LAO DIGIT FIVE
+0ED6 LAO DIGIT SIX
+0ED7 LAO DIGIT SEVEN
+0ED8 LAO DIGIT EIGHT
+0ED9 LAO DIGIT NINE
+0EDC LAO HO NO
+0EDD LAO HO MO
+0F00 TIBETAN SYLLABLE OM
+0F01 TIBETAN MARK GTER YIG MGO TRUNCATED A
+0F02 TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA
+0F03 TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
+0F04 TIBETAN MARK INITIAL YIG MGO MDUN MA
+0F05 TIBETAN MARK CLOSING YIG MGO SGAB MA
+0F06 TIBETAN MARK CARET YIG MGO PHUR SHAD MA
+0F07 TIBETAN MARK YIG MGO TSHEG SHAD MA
+0F08 TIBETAN MARK SBRUL SHAD
+0F09 TIBETAN MARK BSKUR YIG MGO
+0F0A TIBETAN MARK BKA- SHOG YIG MGO
+0F0B TIBETAN MARK INTERSYLLABIC TSHEG
+0F0C TIBETAN MARK DELIMITER TSHEG BSTAR
+0F0D TIBETAN MARK SHAD
+0F0E TIBETAN MARK NYIS SHAD
+0F0F TIBETAN MARK TSHEG SHAD
+0F10 TIBETAN MARK NYIS TSHEG SHAD
+0F11 TIBETAN MARK RIN CHEN SPUNGS SHAD
+0F12 TIBETAN MARK RGYA GRAM SHAD
+0F13 TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
+0F14 TIBETAN MARK GTER TSHEG
+0F15 TIBETAN LOGOTYPE SIGN CHAD RTAGS
+0F16 TIBETAN LOGOTYPE SIGN LHAG RTAGS
+0F17 TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+0F18 TIBETAN ASTROLOGICAL SIGN -KHYUD PA
+0F19 TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F1A TIBETAN SIGN RDEL DKAR GCIG
+0F1B TIBETAN SIGN RDEL DKAR GNYIS
+0F1C TIBETAN SIGN RDEL DKAR GSUM
+0F1D TIBETAN SIGN RDEL NAG GCIG
+0F1E TIBETAN SIGN RDEL NAG GNYIS
+0F1F TIBETAN SIGN RDEL DKAR RDEL NAG
+0F20 TIBETAN DIGIT ZERO
+0F21 TIBETAN DIGIT ONE
+0F22 TIBETAN DIGIT TWO
+0F23 TIBETAN DIGIT THREE
+0F24 TIBETAN DIGIT FOUR
+0F25 TIBETAN DIGIT FIVE
+0F26 TIBETAN DIGIT SIX
+0F27 TIBETAN DIGIT SEVEN
+0F28 TIBETAN DIGIT EIGHT
+0F29 TIBETAN DIGIT NINE
+0F2A TIBETAN DIGIT HALF ONE
+0F2B TIBETAN DIGIT HALF TWO
+0F2C TIBETAN DIGIT HALF THREE
+0F2D TIBETAN DIGIT HALF FOUR
+0F2E TIBETAN DIGIT HALF FIVE
+0F2F TIBETAN DIGIT HALF SIX
+0F30 TIBETAN DIGIT HALF SEVEN
+0F31 TIBETAN DIGIT HALF EIGHT
+0F32 TIBETAN DIGIT HALF NINE
+0F33 TIBETAN DIGIT HALF ZERO
+0F34 TIBETAN MARK BSDUS RTAGS
+0F35 TIBETAN MARK NGAS BZUNG NYI ZLA
+0F36 TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
+0F37 TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F38 TIBETAN MARK CHE MGO
+0F39 TIBETAN MARK TSA -PHRU
+0F3A TIBETAN MARK GUG RTAGS GYON
+0F3B TIBETAN MARK GUG RTAGS GYAS
+0F3C TIBETAN MARK ANG KHANG GYON
+0F3D TIBETAN MARK ANG KHANG GYAS
+0F3E TIBETAN SIGN YAR TSHES
+0F3F TIBETAN SIGN MAR TSHES
+0F40 TIBETAN LETTER KA
+0F41 TIBETAN LETTER KHA
+0F42 TIBETAN LETTER GA
+0F43 TIBETAN LETTER GHA
+0F44 TIBETAN LETTER NGA
+0F45 TIBETAN LETTER CA
+0F46 TIBETAN LETTER CHA
+0F47 TIBETAN LETTER JA
+0F49 TIBETAN LETTER NYA
+0F4A TIBETAN LETTER TTA
+0F4B TIBETAN LETTER TTHA
+0F4C TIBETAN LETTER DDA
+0F4D TIBETAN LETTER DDHA
+0F4E TIBETAN LETTER NNA
+0F4F TIBETAN LETTER TA
+0F50 TIBETAN LETTER THA
+0F51 TIBETAN LETTER DA
+0F52 TIBETAN LETTER DHA
+0F53 TIBETAN LETTER NA
+0F54 TIBETAN LETTER PA
+0F55 TIBETAN LETTER PHA
+0F56 TIBETAN LETTER BA
+0F57 TIBETAN LETTER BHA
+0F58 TIBETAN LETTER MA
+0F59 TIBETAN LETTER TSA
+0F5A TIBETAN LETTER TSHA
+0F5B TIBETAN LETTER DZA
+0F5C TIBETAN LETTER DZHA
+0F5D TIBETAN LETTER WA
+0F5E TIBETAN LETTER ZHA
+0F5F TIBETAN LETTER ZA
+0F60 TIBETAN LETTER -A
+0F61 TIBETAN LETTER YA
+0F62 TIBETAN LETTER RA
+0F63 TIBETAN LETTER LA
+0F64 TIBETAN LETTER SHA
+0F65 TIBETAN LETTER SSA
+0F66 TIBETAN LETTER SA
+0F67 TIBETAN LETTER HA
+0F68 TIBETAN LETTER A
+0F69 TIBETAN LETTER KSSA
+0F6A TIBETAN LETTER FIXED-FORM RA
+0F71 TIBETAN VOWEL SIGN AA
+0F72 TIBETAN VOWEL SIGN I
+0F73 TIBETAN VOWEL SIGN II
+0F74 TIBETAN VOWEL SIGN U
+0F75 TIBETAN VOWEL SIGN UU
+0F76 TIBETAN VOWEL SIGN VOCALIC R
+0F77 TIBETAN VOWEL SIGN VOCALIC RR
+0F78 TIBETAN VOWEL SIGN VOCALIC L
+0F79 TIBETAN VOWEL SIGN VOCALIC LL
+0F7A TIBETAN VOWEL SIGN E
+0F7B TIBETAN VOWEL SIGN EE
+0F7C TIBETAN VOWEL SIGN O
+0F7D TIBETAN VOWEL SIGN OO
+0F7E TIBETAN SIGN RJES SU NGA RO
+0F7F TIBETAN SIGN RNAM BCAD
+0F80 TIBETAN VOWEL SIGN REVERSED I
+0F81 TIBETAN VOWEL SIGN REVERSED II
+0F82 TIBETAN SIGN NYI ZLA NAA DA
+0F83 TIBETAN SIGN SNA LDAN
+0F84 TIBETAN MARK HALANTA
+0F85 TIBETAN MARK PALUTA
+0F86 TIBETAN SIGN LCI RTAGS
+0F87 TIBETAN SIGN YANG RTAGS
+0F88 TIBETAN SIGN LCE TSA CAN
+0F89 TIBETAN SIGN MCHU CAN
+0F8A TIBETAN SIGN GRU CAN RGYINGS
+0F8B TIBETAN SIGN GRU MED RGYINGS
+0F90 TIBETAN SUBJOINED LETTER KA
+0F91 TIBETAN SUBJOINED LETTER KHA
+0F92 TIBETAN SUBJOINED LETTER GA
+0F93 TIBETAN SUBJOINED LETTER GHA
+0F94 TIBETAN SUBJOINED LETTER NGA
+0F95 TIBETAN SUBJOINED LETTER CA
+0F96 TIBETAN SUBJOINED LETTER CHA
+0F97 TIBETAN SUBJOINED LETTER JA
+0F99 TIBETAN SUBJOINED LETTER NYA
+0F9A TIBETAN SUBJOINED LETTER TTA
+0F9B TIBETAN SUBJOINED LETTER TTHA
+0F9C TIBETAN SUBJOINED LETTER DDA
+0F9D TIBETAN SUBJOINED LETTER DDHA
+0F9E TIBETAN SUBJOINED LETTER NNA
+0F9F TIBETAN SUBJOINED LETTER TA
+0FA0 TIBETAN SUBJOINED LETTER THA
+0FA1 TIBETAN SUBJOINED LETTER DA
+0FA2 TIBETAN SUBJOINED LETTER DHA
+0FA3 TIBETAN SUBJOINED LETTER NA
+0FA4 TIBETAN SUBJOINED LETTER PA
+0FA5 TIBETAN SUBJOINED LETTER PHA
+0FA6 TIBETAN SUBJOINED LETTER BA
+0FA7 TIBETAN SUBJOINED LETTER BHA
+0FA8 TIBETAN SUBJOINED LETTER MA
+0FA9 TIBETAN SUBJOINED LETTER TSA
+0FAA TIBETAN SUBJOINED LETTER TSHA
+0FAB TIBETAN SUBJOINED LETTER DZA
+0FAC TIBETAN SUBJOINED LETTER DZHA
+0FAD TIBETAN SUBJOINED LETTER WA
+0FAE TIBETAN SUBJOINED LETTER ZHA
+0FAF TIBETAN SUBJOINED LETTER ZA
+0FB0 TIBETAN SUBJOINED LETTER -A
+0FB1 TIBETAN SUBJOINED LETTER YA
+0FB2 TIBETAN SUBJOINED LETTER RA
+0FB3 TIBETAN SUBJOINED LETTER LA
+0FB4 TIBETAN SUBJOINED LETTER SHA
+0FB5 TIBETAN SUBJOINED LETTER SSA
+0FB6 TIBETAN SUBJOINED LETTER SA
+0FB7 TIBETAN SUBJOINED LETTER HA
+0FB8 TIBETAN SUBJOINED LETTER A
+0FB9 TIBETAN SUBJOINED LETTER KSSA
+0FBA TIBETAN SUBJOINED LETTER FIXED-FORM WA
+0FBB TIBETAN SUBJOINED LETTER FIXED-FORM YA
+0FBC TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FBE TIBETAN KU RU KHA
+0FBF TIBETAN KU RU KHA BZHI MIG CAN
+0FC0 TIBETAN CANTILLATION SIGN HEAVY BEAT
+0FC1 TIBETAN CANTILLATION SIGN LIGHT BEAT
+0FC2 TIBETAN CANTILLATION SIGN CANG TE-U
+0FC3 TIBETAN CANTILLATION SIGN SBUB -CHAL
+0FC4 TIBETAN SYMBOL DRIL BU
+0FC5 TIBETAN SYMBOL RDO RJE
+0FC6 TIBETAN SYMBOL PADMA GDAN
+0FC7 TIBETAN SYMBOL RDO RJE RGYA GRAM
+0FC8 TIBETAN SYMBOL PHUR PA
+0FC9 TIBETAN SYMBOL NOR BU
+0FCA TIBETAN SYMBOL NOR BU NYIS -KHYIL
+0FCB TIBETAN SYMBOL NOR BU GSUM -KHYIL
+0FCC TIBETAN SYMBOL NOR BU BZHI -KHYIL
+0FCF TIBETAN SIGN RDEL NAG GSUM
+1000 MYANMAR LETTER KA
+1001 MYANMAR LETTER KHA
+1002 MYANMAR LETTER GA
+1003 MYANMAR LETTER GHA
+1004 MYANMAR LETTER NGA
+1005 MYANMAR LETTER CA
+1006 MYANMAR LETTER CHA
+1007 MYANMAR LETTER JA
+1008 MYANMAR LETTER JHA
+1009 MYANMAR LETTER NYA
+100A MYANMAR LETTER NNYA
+100B MYANMAR LETTER TTA
+100C MYANMAR LETTER TTHA
+100D MYANMAR LETTER DDA
+100E MYANMAR LETTER DDHA
+100F MYANMAR LETTER NNA
+1010 MYANMAR LETTER TA
+1011 MYANMAR LETTER THA
+1012 MYANMAR LETTER DA
+1013 MYANMAR LETTER DHA
+1014 MYANMAR LETTER NA
+1015 MYANMAR LETTER PA
+1016 MYANMAR LETTER PHA
+1017 MYANMAR LETTER BA
+1018 MYANMAR LETTER BHA
+1019 MYANMAR LETTER MA
+101A MYANMAR LETTER YA
+101B MYANMAR LETTER RA
+101C MYANMAR LETTER LA
+101D MYANMAR LETTER WA
+101E MYANMAR LETTER SA
+101F MYANMAR LETTER HA
+1020 MYANMAR LETTER LLA
+1021 MYANMAR LETTER A
+1023 MYANMAR LETTER I
+1024 MYANMAR LETTER II
+1025 MYANMAR LETTER U
+1026 MYANMAR LETTER UU
+1027 MYANMAR LETTER E
+1029 MYANMAR LETTER O
+102A MYANMAR LETTER AU
+102C MYANMAR VOWEL SIGN AA
+102D MYANMAR VOWEL SIGN I
+102E MYANMAR VOWEL SIGN II
+102F MYANMAR VOWEL SIGN U
+1030 MYANMAR VOWEL SIGN UU
+1031 MYANMAR VOWEL SIGN E
+1032 MYANMAR VOWEL SIGN AI
+1036 MYANMAR SIGN ANUSVARA
+1037 MYANMAR SIGN DOT BELOW
+1038 MYANMAR SIGN VISARGA
+1039 MYANMAR SIGN VIRAMA
+1040 MYANMAR DIGIT ZERO
+1041 MYANMAR DIGIT ONE
+1042 MYANMAR DIGIT TWO
+1043 MYANMAR DIGIT THREE
+1044 MYANMAR DIGIT FOUR
+1045 MYANMAR DIGIT FIVE
+1046 MYANMAR DIGIT SIX
+1047 MYANMAR DIGIT SEVEN
+1048 MYANMAR DIGIT EIGHT
+1049 MYANMAR DIGIT NINE
+104A MYANMAR SIGN LITTLE SECTION
+104B MYANMAR SIGN SECTION
+104C MYANMAR SYMBOL LOCATIVE
+104D MYANMAR SYMBOL COMPLETED
+104E MYANMAR SYMBOL AFOREMENTIONED
+104F MYANMAR SYMBOL GENITIVE
+1050 MYANMAR LETTER SHA
+1051 MYANMAR LETTER SSA
+1052 MYANMAR LETTER VOCALIC R
+1053 MYANMAR LETTER VOCALIC RR
+1054 MYANMAR LETTER VOCALIC L
+1055 MYANMAR LETTER VOCALIC LL
+1056 MYANMAR VOWEL SIGN VOCALIC R
+1057 MYANMAR VOWEL SIGN VOCALIC RR
+1058 MYANMAR VOWEL SIGN VOCALIC L
+1059 MYANMAR VOWEL SIGN VOCALIC LL
+10A0 GEORGIAN CAPITAL LETTER AN
+10A1 GEORGIAN CAPITAL LETTER BAN
+10A2 GEORGIAN CAPITAL LETTER GAN
+10A3 GEORGIAN CAPITAL LETTER DON
+10A4 GEORGIAN CAPITAL LETTER EN
+10A5 GEORGIAN CAPITAL LETTER VIN
+10A6 GEORGIAN CAPITAL LETTER ZEN
+10A7 GEORGIAN CAPITAL LETTER TAN
+10A8 GEORGIAN CAPITAL LETTER IN
+10A9 GEORGIAN CAPITAL LETTER KAN
+10AA GEORGIAN CAPITAL LETTER LAS
+10AB GEORGIAN CAPITAL LETTER MAN
+10AC GEORGIAN CAPITAL LETTER NAR
+10AD GEORGIAN CAPITAL LETTER ON
+10AE GEORGIAN CAPITAL LETTER PAR
+10AF GEORGIAN CAPITAL LETTER ZHAR
+10B0 GEORGIAN CAPITAL LETTER RAE
+10B1 GEORGIAN CAPITAL LETTER SAN
+10B2 GEORGIAN CAPITAL LETTER TAR
+10B3 GEORGIAN CAPITAL LETTER UN
+10B4 GEORGIAN CAPITAL LETTER PHAR
+10B5 GEORGIAN CAPITAL LETTER KHAR
+10B6 GEORGIAN CAPITAL LETTER GHAN
+10B7 GEORGIAN CAPITAL LETTER QAR
+10B8 GEORGIAN CAPITAL LETTER SHIN
+10B9 GEORGIAN CAPITAL LETTER CHIN
+10BA GEORGIAN CAPITAL LETTER CAN
+10BB GEORGIAN CAPITAL LETTER JIL
+10BC GEORGIAN CAPITAL LETTER CIL
+10BD GEORGIAN CAPITAL LETTER CHAR
+10BE GEORGIAN CAPITAL LETTER XAN
+10BF GEORGIAN CAPITAL LETTER JHAN
+10C0 GEORGIAN CAPITAL LETTER HAE
+10C1 GEORGIAN CAPITAL LETTER HE
+10C2 GEORGIAN CAPITAL LETTER HIE
+10C3 GEORGIAN CAPITAL LETTER WE
+10C4 GEORGIAN CAPITAL LETTER HAR
+10C5 GEORGIAN CAPITAL LETTER HOE
+10D0 GEORGIAN LETTER AN
+10D1 GEORGIAN LETTER BAN
+10D2 GEORGIAN LETTER GAN
+10D3 GEORGIAN LETTER DON
+10D4 GEORGIAN LETTER EN
+10D5 GEORGIAN LETTER VIN
+10D6 GEORGIAN LETTER ZEN
+10D7 GEORGIAN LETTER TAN
+10D8 GEORGIAN LETTER IN
+10D9 GEORGIAN LETTER KAN
+10DA GEORGIAN LETTER LAS
+10DB GEORGIAN LETTER MAN
+10DC GEORGIAN LETTER NAR
+10DD GEORGIAN LETTER ON
+10DE GEORGIAN LETTER PAR
+10DF GEORGIAN LETTER ZHAR
+10E0 GEORGIAN LETTER RAE
+10E1 GEORGIAN LETTER SAN
+10E2 GEORGIAN LETTER TAR
+10E3 GEORGIAN LETTER UN
+10E4 GEORGIAN LETTER PHAR
+10E5 GEORGIAN LETTER KHAR
+10E6 GEORGIAN LETTER GHAN
+10E7 GEORGIAN LETTER QAR
+10E8 GEORGIAN LETTER SHIN
+10E9 GEORGIAN LETTER CHIN
+10EA GEORGIAN LETTER CAN
+10EB GEORGIAN LETTER JIL
+10EC GEORGIAN LETTER CIL
+10ED GEORGIAN LETTER CHAR
+10EE GEORGIAN LETTER XAN
+10EF GEORGIAN LETTER JHAN
+10F0 GEORGIAN LETTER HAE
+10F1 GEORGIAN LETTER HE
+10F2 GEORGIAN LETTER HIE
+10F3 GEORGIAN LETTER WE
+10F4 GEORGIAN LETTER HAR
+10F5 GEORGIAN LETTER HOE
+10F6 GEORGIAN LETTER FI
+10F7 GEORGIAN LETTER YN
+10F8 GEORGIAN LETTER ELIFI
+10FB GEORGIAN PARAGRAPH SEPARATOR
+1100 HANGUL CHOSEONG KIYEOK
+1101 HANGUL CHOSEONG SSANGKIYEOK
+1102 HANGUL CHOSEONG NIEUN
+1103 HANGUL CHOSEONG TIKEUT
+1104 HANGUL CHOSEONG SSANGTIKEUT
+1105 HANGUL CHOSEONG RIEUL
+1106 HANGUL CHOSEONG MIEUM
+1107 HANGUL CHOSEONG PIEUP
+1108 HANGUL CHOSEONG SSANGPIEUP
+1109 HANGUL CHOSEONG SIOS
+110A HANGUL CHOSEONG SSANGSIOS
+110B HANGUL CHOSEONG IEUNG
+110C HANGUL CHOSEONG CIEUC
+110D HANGUL CHOSEONG SSANGCIEUC
+110E HANGUL CHOSEONG CHIEUCH
+110F HANGUL CHOSEONG KHIEUKH
+1110 HANGUL CHOSEONG THIEUTH
+1111 HANGUL CHOSEONG PHIEUPH
+1112 HANGUL CHOSEONG HIEUH
+1113 HANGUL CHOSEONG NIEUN-KIYEOK
+1114 HANGUL CHOSEONG SSANGNIEUN
+1115 HANGUL CHOSEONG NIEUN-TIKEUT
+1116 HANGUL CHOSEONG NIEUN-PIEUP
+1117 HANGUL CHOSEONG TIKEUT-KIYEOK
+1118 HANGUL CHOSEONG RIEUL-NIEUN
+1119 HANGUL CHOSEONG SSANGRIEUL
+111A HANGUL CHOSEONG RIEUL-HIEUH
+111B HANGUL CHOSEONG KAPYEOUNRIEUL
+111C HANGUL CHOSEONG MIEUM-PIEUP
+111D HANGUL CHOSEONG KAPYEOUNMIEUM
+111E HANGUL CHOSEONG PIEUP-KIYEOK
+111F HANGUL CHOSEONG PIEUP-NIEUN
+1120 HANGUL CHOSEONG PIEUP-TIKEUT
+1121 HANGUL CHOSEONG PIEUP-SIOS
+1122 HANGUL CHOSEONG PIEUP-SIOS-KIYEOK
+1123 HANGUL CHOSEONG PIEUP-SIOS-TIKEUT
+1124 HANGUL CHOSEONG PIEUP-SIOS-PIEUP
+1125 HANGUL CHOSEONG PIEUP-SSANGSIOS
+1126 HANGUL CHOSEONG PIEUP-SIOS-CIEUC
+1127 HANGUL CHOSEONG PIEUP-CIEUC
+1128 HANGUL CHOSEONG PIEUP-CHIEUCH
+1129 HANGUL CHOSEONG PIEUP-THIEUTH
+112A HANGUL CHOSEONG PIEUP-PHIEUPH
+112B HANGUL CHOSEONG KAPYEOUNPIEUP
+112C HANGUL CHOSEONG KAPYEOUNSSANGPIEUP
+112D HANGUL CHOSEONG SIOS-KIYEOK
+112E HANGUL CHOSEONG SIOS-NIEUN
+112F HANGUL CHOSEONG SIOS-TIKEUT
+1130 HANGUL CHOSEONG SIOS-RIEUL
+1131 HANGUL CHOSEONG SIOS-MIEUM
+1132 HANGUL CHOSEONG SIOS-PIEUP
+1133 HANGUL CHOSEONG SIOS-PIEUP-KIYEOK
+1134 HANGUL CHOSEONG SIOS-SSANGSIOS
+1135 HANGUL CHOSEONG SIOS-IEUNG
+1136 HANGUL CHOSEONG SIOS-CIEUC
+1137 HANGUL CHOSEONG SIOS-CHIEUCH
+1138 HANGUL CHOSEONG SIOS-KHIEUKH
+1139 HANGUL CHOSEONG SIOS-THIEUTH
+113A HANGUL CHOSEONG SIOS-PHIEUPH
+113B HANGUL CHOSEONG SIOS-HIEUH
+113C HANGUL CHOSEONG CHITUEUMSIOS
+113D HANGUL CHOSEONG CHITUEUMSSANGSIOS
+113E HANGUL CHOSEONG CEONGCHIEUMSIOS
+113F HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS
+1140 HANGUL CHOSEONG PANSIOS
+1141 HANGUL CHOSEONG IEUNG-KIYEOK
+1142 HANGUL CHOSEONG IEUNG-TIKEUT
+1143 HANGUL CHOSEONG IEUNG-MIEUM
+1144 HANGUL CHOSEONG IEUNG-PIEUP
+1145 HANGUL CHOSEONG IEUNG-SIOS
+1146 HANGUL CHOSEONG IEUNG-PANSIOS
+1147 HANGUL CHOSEONG SSANGIEUNG
+1148 HANGUL CHOSEONG IEUNG-CIEUC
+1149 HANGUL CHOSEONG IEUNG-CHIEUCH
+114A HANGUL CHOSEONG IEUNG-THIEUTH
+114B HANGUL CHOSEONG IEUNG-PHIEUPH
+114C HANGUL CHOSEONG YESIEUNG
+114D HANGUL CHOSEONG CIEUC-IEUNG
+114E HANGUL CHOSEONG CHITUEUMCIEUC
+114F HANGUL CHOSEONG CHITUEUMSSANGCIEUC
+1150 HANGUL CHOSEONG CEONGCHIEUMCIEUC
+1151 HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC
+1152 HANGUL CHOSEONG CHIEUCH-KHIEUKH
+1153 HANGUL CHOSEONG CHIEUCH-HIEUH
+1154 HANGUL CHOSEONG CHITUEUMCHIEUCH
+1155 HANGUL CHOSEONG CEONGCHIEUMCHIEUCH
+1156 HANGUL CHOSEONG PHIEUPH-PIEUP
+1157 HANGUL CHOSEONG KAPYEOUNPHIEUPH
+1158 HANGUL CHOSEONG SSANGHIEUH
+1159 HANGUL CHOSEONG YEORINHIEUH
+115F HANGUL CHOSEONG FILLER
+1160 HANGUL JUNGSEONG FILLER
+1161 HANGUL JUNGSEONG A
+1162 HANGUL JUNGSEONG AE
+1163 HANGUL JUNGSEONG YA
+1164 HANGUL JUNGSEONG YAE
+1165 HANGUL JUNGSEONG EO
+1166 HANGUL JUNGSEONG E
+1167 HANGUL JUNGSEONG YEO
+1168 HANGUL JUNGSEONG YE
+1169 HANGUL JUNGSEONG O
+116A HANGUL JUNGSEONG WA
+116B HANGUL JUNGSEONG WAE
+116C HANGUL JUNGSEONG OE
+116D HANGUL JUNGSEONG YO
+116E HANGUL JUNGSEONG U
+116F HANGUL JUNGSEONG WEO
+1170 HANGUL JUNGSEONG WE
+1171 HANGUL JUNGSEONG WI
+1172 HANGUL JUNGSEONG YU
+1173 HANGUL JUNGSEONG EU
+1174 HANGUL JUNGSEONG YI
+1175 HANGUL JUNGSEONG I
+1176 HANGUL JUNGSEONG A-O
+1177 HANGUL JUNGSEONG A-U
+1178 HANGUL JUNGSEONG YA-O
+1179 HANGUL JUNGSEONG YA-YO
+117A HANGUL JUNGSEONG EO-O
+117B HANGUL JUNGSEONG EO-U
+117C HANGUL JUNGSEONG EO-EU
+117D HANGUL JUNGSEONG YEO-O
+117E HANGUL JUNGSEONG YEO-U
+117F HANGUL JUNGSEONG O-EO
+1180 HANGUL JUNGSEONG O-E
+1181 HANGUL JUNGSEONG O-YE
+1182 HANGUL JUNGSEONG O-O
+1183 HANGUL JUNGSEONG O-U
+1184 HANGUL JUNGSEONG YO-YA
+1185 HANGUL JUNGSEONG YO-YAE
+1186 HANGUL JUNGSEONG YO-YEO
+1187 HANGUL JUNGSEONG YO-O
+1188 HANGUL JUNGSEONG YO-I
+1189 HANGUL JUNGSEONG U-A
+118A HANGUL JUNGSEONG U-AE
+118B HANGUL JUNGSEONG U-EO-EU
+118C HANGUL JUNGSEONG U-YE
+118D HANGUL JUNGSEONG U-U
+118E HANGUL JUNGSEONG YU-A
+118F HANGUL JUNGSEONG YU-EO
+1190 HANGUL JUNGSEONG YU-E
+1191 HANGUL JUNGSEONG YU-YEO
+1192 HANGUL JUNGSEONG YU-YE
+1193 HANGUL JUNGSEONG YU-U
+1194 HANGUL JUNGSEONG YU-I
+1195 HANGUL JUNGSEONG EU-U
+1196 HANGUL JUNGSEONG EU-EU
+1197 HANGUL JUNGSEONG YI-U
+1198 HANGUL JUNGSEONG I-A
+1199 HANGUL JUNGSEONG I-YA
+119A HANGUL JUNGSEONG I-O
+119B HANGUL JUNGSEONG I-U
+119C HANGUL JUNGSEONG I-EU
+119D HANGUL JUNGSEONG I-ARAEA
+119E HANGUL JUNGSEONG ARAEA
+119F HANGUL JUNGSEONG ARAEA-EO
+11A0 HANGUL JUNGSEONG ARAEA-U
+11A1 HANGUL JUNGSEONG ARAEA-I
+11A2 HANGUL JUNGSEONG SSANGARAEA
+11A8 HANGUL JONGSEONG KIYEOK
+11A9 HANGUL JONGSEONG SSANGKIYEOK
+11AA HANGUL JONGSEONG KIYEOK-SIOS
+11AB HANGUL JONGSEONG NIEUN
+11AC HANGUL JONGSEONG NIEUN-CIEUC
+11AD HANGUL JONGSEONG NIEUN-HIEUH
+11AE HANGUL JONGSEONG TIKEUT
+11AF HANGUL JONGSEONG RIEUL
+11B0 HANGUL JONGSEONG RIEUL-KIYEOK
+11B1 HANGUL JONGSEONG RIEUL-MIEUM
+11B2 HANGUL JONGSEONG RIEUL-PIEUP
+11B3 HANGUL JONGSEONG RIEUL-SIOS
+11B4 HANGUL JONGSEONG RIEUL-THIEUTH
+11B5 HANGUL JONGSEONG RIEUL-PHIEUPH
+11B6 HANGUL JONGSEONG RIEUL-HIEUH
+11B7 HANGUL JONGSEONG MIEUM
+11B8 HANGUL JONGSEONG PIEUP
+11B9 HANGUL JONGSEONG PIEUP-SIOS
+11BA HANGUL JONGSEONG SIOS
+11BB HANGUL JONGSEONG SSANGSIOS
+11BC HANGUL JONGSEONG IEUNG
+11BD HANGUL JONGSEONG CIEUC
+11BE HANGUL JONGSEONG CHIEUCH
+11BF HANGUL JONGSEONG KHIEUKH
+11C0 HANGUL JONGSEONG THIEUTH
+11C1 HANGUL JONGSEONG PHIEUPH
+11C2 HANGUL JONGSEONG HIEUH
+11C3 HANGUL JONGSEONG KIYEOK-RIEUL
+11C4 HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK
+11C5 HANGUL JONGSEONG NIEUN-KIYEOK
+11C6 HANGUL JONGSEONG NIEUN-TIKEUT
+11C7 HANGUL JONGSEONG NIEUN-SIOS
+11C8 HANGUL JONGSEONG NIEUN-PANSIOS
+11C9 HANGUL JONGSEONG NIEUN-THIEUTH
+11CA HANGUL JONGSEONG TIKEUT-KIYEOK
+11CB HANGUL JONGSEONG TIKEUT-RIEUL
+11CC HANGUL JONGSEONG RIEUL-KIYEOK-SIOS
+11CD HANGUL JONGSEONG RIEUL-NIEUN
+11CE HANGUL JONGSEONG RIEUL-TIKEUT
+11CF HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH
+11D0 HANGUL JONGSEONG SSANGRIEUL
+11D1 HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK
+11D2 HANGUL JONGSEONG RIEUL-MIEUM-SIOS
+11D3 HANGUL JONGSEONG RIEUL-PIEUP-SIOS
+11D4 HANGUL JONGSEONG RIEUL-PIEUP-HIEUH
+11D5 HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP
+11D6 HANGUL JONGSEONG RIEUL-SSANGSIOS
+11D7 HANGUL JONGSEONG RIEUL-PANSIOS
+11D8 HANGUL JONGSEONG RIEUL-KHIEUKH
+11D9 HANGUL JONGSEONG RIEUL-YEORINHIEUH
+11DA HANGUL JONGSEONG MIEUM-KIYEOK
+11DB HANGUL JONGSEONG MIEUM-RIEUL
+11DC HANGUL JONGSEONG MIEUM-PIEUP
+11DD HANGUL JONGSEONG MIEUM-SIOS
+11DE HANGUL JONGSEONG MIEUM-SSANGSIOS
+11DF HANGUL JONGSEONG MIEUM-PANSIOS
+11E0 HANGUL JONGSEONG MIEUM-CHIEUCH
+11E1 HANGUL JONGSEONG MIEUM-HIEUH
+11E2 HANGUL JONGSEONG KAPYEOUNMIEUM
+11E3 HANGUL JONGSEONG PIEUP-RIEUL
+11E4 HANGUL JONGSEONG PIEUP-PHIEUPH
+11E5 HANGUL JONGSEONG PIEUP-HIEUH
+11E6 HANGUL JONGSEONG KAPYEOUNPIEUP
+11E7 HANGUL JONGSEONG SIOS-KIYEOK
+11E8 HANGUL JONGSEONG SIOS-TIKEUT
+11E9 HANGUL JONGSEONG SIOS-RIEUL
+11EA HANGUL JONGSEONG SIOS-PIEUP
+11EB HANGUL JONGSEONG PANSIOS
+11EC HANGUL JONGSEONG IEUNG-KIYEOK
+11ED HANGUL JONGSEONG IEUNG-SSANGKIYEOK
+11EE HANGUL JONGSEONG SSANGIEUNG
+11EF HANGUL JONGSEONG IEUNG-KHIEUKH
+11F0 HANGUL JONGSEONG YESIEUNG
+11F1 HANGUL JONGSEONG YESIEUNG-SIOS
+11F2 HANGUL JONGSEONG YESIEUNG-PANSIOS
+11F3 HANGUL JONGSEONG PHIEUPH-PIEUP
+11F4 HANGUL JONGSEONG KAPYEOUNPHIEUPH
+11F5 HANGUL JONGSEONG HIEUH-NIEUN
+11F6 HANGUL JONGSEONG HIEUH-RIEUL
+11F7 HANGUL JONGSEONG HIEUH-MIEUM
+11F8 HANGUL JONGSEONG HIEUH-PIEUP
+11F9 HANGUL JONGSEONG YEORINHIEUH
+1200 ETHIOPIC SYLLABLE HA
+1201 ETHIOPIC SYLLABLE HU
+1202 ETHIOPIC SYLLABLE HI
+1203 ETHIOPIC SYLLABLE HAA
+1204 ETHIOPIC SYLLABLE HEE
+1205 ETHIOPIC SYLLABLE HE
+1206 ETHIOPIC SYLLABLE HO
+1208 ETHIOPIC SYLLABLE LA
+1209 ETHIOPIC SYLLABLE LU
+120A ETHIOPIC SYLLABLE LI
+120B ETHIOPIC SYLLABLE LAA
+120C ETHIOPIC SYLLABLE LEE
+120D ETHIOPIC SYLLABLE LE
+120E ETHIOPIC SYLLABLE LO
+120F ETHIOPIC SYLLABLE LWA
+1210 ETHIOPIC SYLLABLE HHA
+1211 ETHIOPIC SYLLABLE HHU
+1212 ETHIOPIC SYLLABLE HHI
+1213 ETHIOPIC SYLLABLE HHAA
+1214 ETHIOPIC SYLLABLE HHEE
+1215 ETHIOPIC SYLLABLE HHE
+1216 ETHIOPIC SYLLABLE HHO
+1217 ETHIOPIC SYLLABLE HHWA
+1218 ETHIOPIC SYLLABLE MA
+1219 ETHIOPIC SYLLABLE MU
+121A ETHIOPIC SYLLABLE MI
+121B ETHIOPIC SYLLABLE MAA
+121C ETHIOPIC SYLLABLE MEE
+121D ETHIOPIC SYLLABLE ME
+121E ETHIOPIC SYLLABLE MO
+121F ETHIOPIC SYLLABLE MWA
+1220 ETHIOPIC SYLLABLE SZA
+1221 ETHIOPIC SYLLABLE SZU
+1222 ETHIOPIC SYLLABLE SZI
+1223 ETHIOPIC SYLLABLE SZAA
+1224 ETHIOPIC SYLLABLE SZEE
+1225 ETHIOPIC SYLLABLE SZE
+1226 ETHIOPIC SYLLABLE SZO
+1227 ETHIOPIC SYLLABLE SZWA
+1228 ETHIOPIC SYLLABLE RA
+1229 ETHIOPIC SYLLABLE RU
+122A ETHIOPIC SYLLABLE RI
+122B ETHIOPIC SYLLABLE RAA
+122C ETHIOPIC SYLLABLE REE
+122D ETHIOPIC SYLLABLE RE
+122E ETHIOPIC SYLLABLE RO
+122F ETHIOPIC SYLLABLE RWA
+1230 ETHIOPIC SYLLABLE SA
+1231 ETHIOPIC SYLLABLE SU
+1232 ETHIOPIC SYLLABLE SI
+1233 ETHIOPIC SYLLABLE SAA
+1234 ETHIOPIC SYLLABLE SEE
+1235 ETHIOPIC SYLLABLE SE
+1236 ETHIOPIC SYLLABLE SO
+1237 ETHIOPIC SYLLABLE SWA
+1238 ETHIOPIC SYLLABLE SHA
+1239 ETHIOPIC SYLLABLE SHU
+123A ETHIOPIC SYLLABLE SHI
+123B ETHIOPIC SYLLABLE SHAA
+123C ETHIOPIC SYLLABLE SHEE
+123D ETHIOPIC SYLLABLE SHE
+123E ETHIOPIC SYLLABLE SHO
+123F ETHIOPIC SYLLABLE SHWA
+1240 ETHIOPIC SYLLABLE QA
+1241 ETHIOPIC SYLLABLE QU
+1242 ETHIOPIC SYLLABLE QI
+1243 ETHIOPIC SYLLABLE QAA
+1244 ETHIOPIC SYLLABLE QEE
+1245 ETHIOPIC SYLLABLE QE
+1246 ETHIOPIC SYLLABLE QO
+1248 ETHIOPIC SYLLABLE QWA
+124A ETHIOPIC SYLLABLE QWI
+124B ETHIOPIC SYLLABLE QWAA
+124C ETHIOPIC SYLLABLE QWEE
+124D ETHIOPIC SYLLABLE QWE
+1250 ETHIOPIC SYLLABLE QHA
+1251 ETHIOPIC SYLLABLE QHU
+1252 ETHIOPIC SYLLABLE QHI
+1253 ETHIOPIC SYLLABLE QHAA
+1254 ETHIOPIC SYLLABLE QHEE
+1255 ETHIOPIC SYLLABLE QHE
+1256 ETHIOPIC SYLLABLE QHO
+1258 ETHIOPIC SYLLABLE QHWA
+125A ETHIOPIC SYLLABLE QHWI
+125B ETHIOPIC SYLLABLE QHWAA
+125C ETHIOPIC SYLLABLE QHWEE
+125D ETHIOPIC SYLLABLE QHWE
+1260 ETHIOPIC SYLLABLE BA
+1261 ETHIOPIC SYLLABLE BU
+1262 ETHIOPIC SYLLABLE BI
+1263 ETHIOPIC SYLLABLE BAA
+1264 ETHIOPIC SYLLABLE BEE
+1265 ETHIOPIC SYLLABLE BE
+1266 ETHIOPIC SYLLABLE BO
+1267 ETHIOPIC SYLLABLE BWA
+1268 ETHIOPIC SYLLABLE VA
+1269 ETHIOPIC SYLLABLE VU
+126A ETHIOPIC SYLLABLE VI
+126B ETHIOPIC SYLLABLE VAA
+126C ETHIOPIC SYLLABLE VEE
+126D ETHIOPIC SYLLABLE VE
+126E ETHIOPIC SYLLABLE VO
+126F ETHIOPIC SYLLABLE VWA
+1270 ETHIOPIC SYLLABLE TA
+1271 ETHIOPIC SYLLABLE TU
+1272 ETHIOPIC SYLLABLE TI
+1273 ETHIOPIC SYLLABLE TAA
+1274 ETHIOPIC SYLLABLE TEE
+1275 ETHIOPIC SYLLABLE TE
+1276 ETHIOPIC SYLLABLE TO
+1277 ETHIOPIC SYLLABLE TWA
+1278 ETHIOPIC SYLLABLE CA
+1279 ETHIOPIC SYLLABLE CU
+127A ETHIOPIC SYLLABLE CI
+127B ETHIOPIC SYLLABLE CAA
+127C ETHIOPIC SYLLABLE CEE
+127D ETHIOPIC SYLLABLE CE
+127E ETHIOPIC SYLLABLE CO
+127F ETHIOPIC SYLLABLE CWA
+1280 ETHIOPIC SYLLABLE XA
+1281 ETHIOPIC SYLLABLE XU
+1282 ETHIOPIC SYLLABLE XI
+1283 ETHIOPIC SYLLABLE XAA
+1284 ETHIOPIC SYLLABLE XEE
+1285 ETHIOPIC SYLLABLE XE
+1286 ETHIOPIC SYLLABLE XO
+1288 ETHIOPIC SYLLABLE XWA
+128A ETHIOPIC SYLLABLE XWI
+128B ETHIOPIC SYLLABLE XWAA
+128C ETHIOPIC SYLLABLE XWEE
+128D ETHIOPIC SYLLABLE XWE
+1290 ETHIOPIC SYLLABLE NA
+1291 ETHIOPIC SYLLABLE NU
+1292 ETHIOPIC SYLLABLE NI
+1293 ETHIOPIC SYLLABLE NAA
+1294 ETHIOPIC SYLLABLE NEE
+1295 ETHIOPIC SYLLABLE NE
+1296 ETHIOPIC SYLLABLE NO
+1297 ETHIOPIC SYLLABLE NWA
+1298 ETHIOPIC SYLLABLE NYA
+1299 ETHIOPIC SYLLABLE NYU
+129A ETHIOPIC SYLLABLE NYI
+129B ETHIOPIC SYLLABLE NYAA
+129C ETHIOPIC SYLLABLE NYEE
+129D ETHIOPIC SYLLABLE NYE
+129E ETHIOPIC SYLLABLE NYO
+129F ETHIOPIC SYLLABLE NYWA
+12A0 ETHIOPIC SYLLABLE GLOTTAL A
+12A1 ETHIOPIC SYLLABLE GLOTTAL U
+12A2 ETHIOPIC SYLLABLE GLOTTAL I
+12A3 ETHIOPIC SYLLABLE GLOTTAL AA
+12A4 ETHIOPIC SYLLABLE GLOTTAL EE
+12A5 ETHIOPIC SYLLABLE GLOTTAL E
+12A6 ETHIOPIC SYLLABLE GLOTTAL O
+12A7 ETHIOPIC SYLLABLE GLOTTAL WA
+12A8 ETHIOPIC SYLLABLE KA
+12A9 ETHIOPIC SYLLABLE KU
+12AA ETHIOPIC SYLLABLE KI
+12AB ETHIOPIC SYLLABLE KAA
+12AC ETHIOPIC SYLLABLE KEE
+12AD ETHIOPIC SYLLABLE KE
+12AE ETHIOPIC SYLLABLE KO
+12B0 ETHIOPIC SYLLABLE KWA
+12B2 ETHIOPIC SYLLABLE KWI
+12B3 ETHIOPIC SYLLABLE KWAA
+12B4 ETHIOPIC SYLLABLE KWEE
+12B5 ETHIOPIC SYLLABLE KWE
+12B8 ETHIOPIC SYLLABLE KXA
+12B9 ETHIOPIC SYLLABLE KXU
+12BA ETHIOPIC SYLLABLE KXI
+12BB ETHIOPIC SYLLABLE KXAA
+12BC ETHIOPIC SYLLABLE KXEE
+12BD ETHIOPIC SYLLABLE KXE
+12BE ETHIOPIC SYLLABLE KXO
+12C0 ETHIOPIC SYLLABLE KXWA
+12C2 ETHIOPIC SYLLABLE KXWI
+12C3 ETHIOPIC SYLLABLE KXWAA
+12C4 ETHIOPIC SYLLABLE KXWEE
+12C5 ETHIOPIC SYLLABLE KXWE
+12C8 ETHIOPIC SYLLABLE WA
+12C9 ETHIOPIC SYLLABLE WU
+12CA ETHIOPIC SYLLABLE WI
+12CB ETHIOPIC SYLLABLE WAA
+12CC ETHIOPIC SYLLABLE WEE
+12CD ETHIOPIC SYLLABLE WE
+12CE ETHIOPIC SYLLABLE WO
+12D0 ETHIOPIC SYLLABLE PHARYNGEAL A
+12D1 ETHIOPIC SYLLABLE PHARYNGEAL U
+12D2 ETHIOPIC SYLLABLE PHARYNGEAL I
+12D3 ETHIOPIC SYLLABLE PHARYNGEAL AA
+12D4 ETHIOPIC SYLLABLE PHARYNGEAL EE
+12D5 ETHIOPIC SYLLABLE PHARYNGEAL E
+12D6 ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8 ETHIOPIC SYLLABLE ZA
+12D9 ETHIOPIC SYLLABLE ZU
+12DA ETHIOPIC SYLLABLE ZI
+12DB ETHIOPIC SYLLABLE ZAA
+12DC ETHIOPIC SYLLABLE ZEE
+12DD ETHIOPIC SYLLABLE ZE
+12DE ETHIOPIC SYLLABLE ZO
+12DF ETHIOPIC SYLLABLE ZWA
+12E0 ETHIOPIC SYLLABLE ZHA
+12E1 ETHIOPIC SYLLABLE ZHU
+12E2 ETHIOPIC SYLLABLE ZHI
+12E3 ETHIOPIC SYLLABLE ZHAA
+12E4 ETHIOPIC SYLLABLE ZHEE
+12E5 ETHIOPIC SYLLABLE ZHE
+12E6 ETHIOPIC SYLLABLE ZHO
+12E7 ETHIOPIC SYLLABLE ZHWA
+12E8 ETHIOPIC SYLLABLE YA
+12E9 ETHIOPIC SYLLABLE YU
+12EA ETHIOPIC SYLLABLE YI
+12EB ETHIOPIC SYLLABLE YAA
+12EC ETHIOPIC SYLLABLE YEE
+12ED ETHIOPIC SYLLABLE YE
+12EE ETHIOPIC SYLLABLE YO
+12F0 ETHIOPIC SYLLABLE DA
+12F1 ETHIOPIC SYLLABLE DU
+12F2 ETHIOPIC SYLLABLE DI
+12F3 ETHIOPIC SYLLABLE DAA
+12F4 ETHIOPIC SYLLABLE DEE
+12F5 ETHIOPIC SYLLABLE DE
+12F6 ETHIOPIC SYLLABLE DO
+12F7 ETHIOPIC SYLLABLE DWA
+12F8 ETHIOPIC SYLLABLE DDA
+12F9 ETHIOPIC SYLLABLE DDU
+12FA ETHIOPIC SYLLABLE DDI
+12FB ETHIOPIC SYLLABLE DDAA
+12FC ETHIOPIC SYLLABLE DDEE
+12FD ETHIOPIC SYLLABLE DDE
+12FE ETHIOPIC SYLLABLE DDO
+12FF ETHIOPIC SYLLABLE DDWA
+1300 ETHIOPIC SYLLABLE JA
+1301 ETHIOPIC SYLLABLE JU
+1302 ETHIOPIC SYLLABLE JI
+1303 ETHIOPIC SYLLABLE JAA
+1304 ETHIOPIC SYLLABLE JEE
+1305 ETHIOPIC SYLLABLE JE
+1306 ETHIOPIC SYLLABLE JO
+1307 ETHIOPIC SYLLABLE JWA
+1308 ETHIOPIC SYLLABLE GA
+1309 ETHIOPIC SYLLABLE GU
+130A ETHIOPIC SYLLABLE GI
+130B ETHIOPIC SYLLABLE GAA
+130C ETHIOPIC SYLLABLE GEE
+130D ETHIOPIC SYLLABLE GE
+130E ETHIOPIC SYLLABLE GO
+1310 ETHIOPIC SYLLABLE GWA
+1312 ETHIOPIC SYLLABLE GWI
+1313 ETHIOPIC SYLLABLE GWAA
+1314 ETHIOPIC SYLLABLE GWEE
+1315 ETHIOPIC SYLLABLE GWE
+1318 ETHIOPIC SYLLABLE GGA
+1319 ETHIOPIC SYLLABLE GGU
+131A ETHIOPIC SYLLABLE GGI
+131B ETHIOPIC SYLLABLE GGAA
+131C ETHIOPIC SYLLABLE GGEE
+131D ETHIOPIC SYLLABLE GGE
+131E ETHIOPIC SYLLABLE GGO
+1320 ETHIOPIC SYLLABLE THA
+1321 ETHIOPIC SYLLABLE THU
+1322 ETHIOPIC SYLLABLE THI
+1323 ETHIOPIC SYLLABLE THAA
+1324 ETHIOPIC SYLLABLE THEE
+1325 ETHIOPIC SYLLABLE THE
+1326 ETHIOPIC SYLLABLE THO
+1327 ETHIOPIC SYLLABLE THWA
+1328 ETHIOPIC SYLLABLE CHA
+1329 ETHIOPIC SYLLABLE CHU
+132A ETHIOPIC SYLLABLE CHI
+132B ETHIOPIC SYLLABLE CHAA
+132C ETHIOPIC SYLLABLE CHEE
+132D ETHIOPIC SYLLABLE CHE
+132E ETHIOPIC SYLLABLE CHO
+132F ETHIOPIC SYLLABLE CHWA
+1330 ETHIOPIC SYLLABLE PHA
+1331 ETHIOPIC SYLLABLE PHU
+1332 ETHIOPIC SYLLABLE PHI
+1333 ETHIOPIC SYLLABLE PHAA
+1334 ETHIOPIC SYLLABLE PHEE
+1335 ETHIOPIC SYLLABLE PHE
+1336 ETHIOPIC SYLLABLE PHO
+1337 ETHIOPIC SYLLABLE PHWA
+1338 ETHIOPIC SYLLABLE TSA
+1339 ETHIOPIC SYLLABLE TSU
+133A ETHIOPIC SYLLABLE TSI
+133B ETHIOPIC SYLLABLE TSAA
+133C ETHIOPIC SYLLABLE TSEE
+133D ETHIOPIC SYLLABLE TSE
+133E ETHIOPIC SYLLABLE TSO
+133F ETHIOPIC SYLLABLE TSWA
+1340 ETHIOPIC SYLLABLE TZA
+1341 ETHIOPIC SYLLABLE TZU
+1342 ETHIOPIC SYLLABLE TZI
+1343 ETHIOPIC SYLLABLE TZAA
+1344 ETHIOPIC SYLLABLE TZEE
+1345 ETHIOPIC SYLLABLE TZE
+1346 ETHIOPIC SYLLABLE TZO
+1348 ETHIOPIC SYLLABLE FA
+1349 ETHIOPIC SYLLABLE FU
+134A ETHIOPIC SYLLABLE FI
+134B ETHIOPIC SYLLABLE FAA
+134C ETHIOPIC SYLLABLE FEE
+134D ETHIOPIC SYLLABLE FE
+134E ETHIOPIC SYLLABLE FO
+134F ETHIOPIC SYLLABLE FWA
+1350 ETHIOPIC SYLLABLE PA
+1351 ETHIOPIC SYLLABLE PU
+1352 ETHIOPIC SYLLABLE PI
+1353 ETHIOPIC SYLLABLE PAA
+1354 ETHIOPIC SYLLABLE PEE
+1355 ETHIOPIC SYLLABLE PE
+1356 ETHIOPIC SYLLABLE PO
+1357 ETHIOPIC SYLLABLE PWA
+1358 ETHIOPIC SYLLABLE RYA
+1359 ETHIOPIC SYLLABLE MYA
+135A ETHIOPIC SYLLABLE FYA
+1361 ETHIOPIC WORDSPACE
+1362 ETHIOPIC FULL STOP
+1363 ETHIOPIC COMMA
+1364 ETHIOPIC SEMICOLON
+1365 ETHIOPIC COLON
+1366 ETHIOPIC PREFACE COLON
+1367 ETHIOPIC QUESTION MARK
+1368 ETHIOPIC PARAGRAPH SEPARATOR
+1369 ETHIOPIC DIGIT ONE
+136A ETHIOPIC DIGIT TWO
+136B ETHIOPIC DIGIT THREE
+136C ETHIOPIC DIGIT FOUR
+136D ETHIOPIC DIGIT FIVE
+136E ETHIOPIC DIGIT SIX
+136F ETHIOPIC DIGIT SEVEN
+1370 ETHIOPIC DIGIT EIGHT
+1371 ETHIOPIC DIGIT NINE
+1372 ETHIOPIC NUMBER TEN
+1373 ETHIOPIC NUMBER TWENTY
+1374 ETHIOPIC NUMBER THIRTY
+1375 ETHIOPIC NUMBER FORTY
+1376 ETHIOPIC NUMBER FIFTY
+1377 ETHIOPIC NUMBER SIXTY
+1378 ETHIOPIC NUMBER SEVENTY
+1379 ETHIOPIC NUMBER EIGHTY
+137A ETHIOPIC NUMBER NINETY
+137B ETHIOPIC NUMBER HUNDRED
+137C ETHIOPIC NUMBER TEN THOUSAND
+13A0 CHEROKEE LETTER A
+13A1 CHEROKEE LETTER E
+13A2 CHEROKEE LETTER I
+13A3 CHEROKEE LETTER O
+13A4 CHEROKEE LETTER U
+13A5 CHEROKEE LETTER V
+13A6 CHEROKEE LETTER GA
+13A7 CHEROKEE LETTER KA
+13A8 CHEROKEE LETTER GE
+13A9 CHEROKEE LETTER GI
+13AA CHEROKEE LETTER GO
+13AB CHEROKEE LETTER GU
+13AC CHEROKEE LETTER GV
+13AD CHEROKEE LETTER HA
+13AE CHEROKEE LETTER HE
+13AF CHEROKEE LETTER HI
+13B0 CHEROKEE LETTER HO
+13B1 CHEROKEE LETTER HU
+13B2 CHEROKEE LETTER HV
+13B3 CHEROKEE LETTER LA
+13B4 CHEROKEE LETTER LE
+13B5 CHEROKEE LETTER LI
+13B6 CHEROKEE LETTER LO
+13B7 CHEROKEE LETTER LU
+13B8 CHEROKEE LETTER LV
+13B9 CHEROKEE LETTER MA
+13BA CHEROKEE LETTER ME
+13BB CHEROKEE LETTER MI
+13BC CHEROKEE LETTER MO
+13BD CHEROKEE LETTER MU
+13BE CHEROKEE LETTER NA
+13BF CHEROKEE LETTER HNA
+13C0 CHEROKEE LETTER NAH
+13C1 CHEROKEE LETTER NE
+13C2 CHEROKEE LETTER NI
+13C3 CHEROKEE LETTER NO
+13C4 CHEROKEE LETTER NU
+13C5 CHEROKEE LETTER NV
+13C6 CHEROKEE LETTER QUA
+13C7 CHEROKEE LETTER QUE
+13C8 CHEROKEE LETTER QUI
+13C9 CHEROKEE LETTER QUO
+13CA CHEROKEE LETTER QUU
+13CB CHEROKEE LETTER QUV
+13CC CHEROKEE LETTER SA
+13CD CHEROKEE LETTER S
+13CE CHEROKEE LETTER SE
+13CF CHEROKEE LETTER SI
+13D0 CHEROKEE LETTER SO
+13D1 CHEROKEE LETTER SU
+13D2 CHEROKEE LETTER SV
+13D3 CHEROKEE LETTER DA
+13D4 CHEROKEE LETTER TA
+13D5 CHEROKEE LETTER DE
+13D6 CHEROKEE LETTER TE
+13D7 CHEROKEE LETTER DI
+13D8 CHEROKEE LETTER TI
+13D9 CHEROKEE LETTER DO
+13DA CHEROKEE LETTER DU
+13DB CHEROKEE LETTER DV
+13DC CHEROKEE LETTER DLA
+13DD CHEROKEE LETTER TLA
+13DE CHEROKEE LETTER TLE
+13DF CHEROKEE LETTER TLI
+13E0 CHEROKEE LETTER TLO
+13E1 CHEROKEE LETTER TLU
+13E2 CHEROKEE LETTER TLV
+13E3 CHEROKEE LETTER TSA
+13E4 CHEROKEE LETTER TSE
+13E5 CHEROKEE LETTER TSI
+13E6 CHEROKEE LETTER TSO
+13E7 CHEROKEE LETTER TSU
+13E8 CHEROKEE LETTER TSV
+13E9 CHEROKEE LETTER WA
+13EA CHEROKEE LETTER WE
+13EB CHEROKEE LETTER WI
+13EC CHEROKEE LETTER WO
+13ED CHEROKEE LETTER WU
+13EE CHEROKEE LETTER WV
+13EF CHEROKEE LETTER YA
+13F0 CHEROKEE LETTER YE
+13F1 CHEROKEE LETTER YI
+13F2 CHEROKEE LETTER YO
+13F3 CHEROKEE LETTER YU
+13F4 CHEROKEE LETTER YV
+1401 CANADIAN SYLLABICS E
+1402 CANADIAN SYLLABICS AAI
+1403 CANADIAN SYLLABICS I
+1404 CANADIAN SYLLABICS II
+1405 CANADIAN SYLLABICS O
+1406 CANADIAN SYLLABICS OO
+1407 CANADIAN SYLLABICS Y-CREE OO
+1408 CANADIAN SYLLABICS CARRIER EE
+1409 CANADIAN SYLLABICS CARRIER I
+140A CANADIAN SYLLABICS A
+140B CANADIAN SYLLABICS AA
+140C CANADIAN SYLLABICS WE
+140D CANADIAN SYLLABICS WEST-CREE WE
+140E CANADIAN SYLLABICS WI
+140F CANADIAN SYLLABICS WEST-CREE WI
+1410 CANADIAN SYLLABICS WII
+1411 CANADIAN SYLLABICS WEST-CREE WII
+1412 CANADIAN SYLLABICS WO
+1413 CANADIAN SYLLABICS WEST-CREE WO
+1414 CANADIAN SYLLABICS WOO
+1415 CANADIAN SYLLABICS WEST-CREE WOO
+1416 CANADIAN SYLLABICS NASKAPI WOO
+1417 CANADIAN SYLLABICS WA
+1418 CANADIAN SYLLABICS WEST-CREE WA
+1419 CANADIAN SYLLABICS WAA
+141A CANADIAN SYLLABICS WEST-CREE WAA
+141B CANADIAN SYLLABICS NASKAPI WAA
+141C CANADIAN SYLLABICS AI
+141D CANADIAN SYLLABICS Y-CREE W
+141E CANADIAN SYLLABICS GLOTTAL STOP
+141F CANADIAN SYLLABICS FINAL ACUTE
+1420 CANADIAN SYLLABICS FINAL GRAVE
+1421 CANADIAN SYLLABICS FINAL BOTTOM HALF RING
+1422 CANADIAN SYLLABICS FINAL TOP HALF RING
+1423 CANADIAN SYLLABICS FINAL RIGHT HALF RING
+1424 CANADIAN SYLLABICS FINAL RING
+1425 CANADIAN SYLLABICS FINAL DOUBLE ACUTE
+1426 CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES
+1427 CANADIAN SYLLABICS FINAL MIDDLE DOT
+1428 CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE
+1429 CANADIAN SYLLABICS FINAL PLUS
+142A CANADIAN SYLLABICS FINAL DOWN TACK
+142B CANADIAN SYLLABICS EN
+142C CANADIAN SYLLABICS IN
+142D CANADIAN SYLLABICS ON
+142E CANADIAN SYLLABICS AN
+142F CANADIAN SYLLABICS PE
+1430 CANADIAN SYLLABICS PAAI
+1431 CANADIAN SYLLABICS PI
+1432 CANADIAN SYLLABICS PII
+1433 CANADIAN SYLLABICS PO
+1434 CANADIAN SYLLABICS POO
+1435 CANADIAN SYLLABICS Y-CREE POO
+1436 CANADIAN SYLLABICS CARRIER HEE
+1437 CANADIAN SYLLABICS CARRIER HI
+1438 CANADIAN SYLLABICS PA
+1439 CANADIAN SYLLABICS PAA
+143A CANADIAN SYLLABICS PWE
+143B CANADIAN SYLLABICS WEST-CREE PWE
+143C CANADIAN SYLLABICS PWI
+143D CANADIAN SYLLABICS WEST-CREE PWI
+143E CANADIAN SYLLABICS PWII
+143F CANADIAN SYLLABICS WEST-CREE PWII
+1440 CANADIAN SYLLABICS PWO
+1441 CANADIAN SYLLABICS WEST-CREE PWO
+1442 CANADIAN SYLLABICS PWOO
+1443 CANADIAN SYLLABICS WEST-CREE PWOO
+1444 CANADIAN SYLLABICS PWA
+1445 CANADIAN SYLLABICS WEST-CREE PWA
+1446 CANADIAN SYLLABICS PWAA
+1447 CANADIAN SYLLABICS WEST-CREE PWAA
+1448 CANADIAN SYLLABICS Y-CREE PWAA
+1449 CANADIAN SYLLABICS P
+144A CANADIAN SYLLABICS WEST-CREE P
+144B CANADIAN SYLLABICS CARRIER H
+144C CANADIAN SYLLABICS TE
+144D CANADIAN SYLLABICS TAAI
+144E CANADIAN SYLLABICS TI
+144F CANADIAN SYLLABICS TII
+1450 CANADIAN SYLLABICS TO
+1451 CANADIAN SYLLABICS TOO
+1452 CANADIAN SYLLABICS Y-CREE TOO
+1453 CANADIAN SYLLABICS CARRIER DEE
+1454 CANADIAN SYLLABICS CARRIER DI
+1455 CANADIAN SYLLABICS TA
+1456 CANADIAN SYLLABICS TAA
+1457 CANADIAN SYLLABICS TWE
+1458 CANADIAN SYLLABICS WEST-CREE TWE
+1459 CANADIAN SYLLABICS TWI
+145A CANADIAN SYLLABICS WEST-CREE TWI
+145B CANADIAN SYLLABICS TWII
+145C CANADIAN SYLLABICS WEST-CREE TWII
+145D CANADIAN SYLLABICS TWO
+145E CANADIAN SYLLABICS WEST-CREE TWO
+145F CANADIAN SYLLABICS TWOO
+1460 CANADIAN SYLLABICS WEST-CREE TWOO
+1461 CANADIAN SYLLABICS TWA
+1462 CANADIAN SYLLABICS WEST-CREE TWA
+1463 CANADIAN SYLLABICS TWAA
+1464 CANADIAN SYLLABICS WEST-CREE TWAA
+1465 CANADIAN SYLLABICS NASKAPI TWAA
+1466 CANADIAN SYLLABICS T
+1467 CANADIAN SYLLABICS TTE
+1468 CANADIAN SYLLABICS TTI
+1469 CANADIAN SYLLABICS TTO
+146A CANADIAN SYLLABICS TTA
+146B CANADIAN SYLLABICS KE
+146C CANADIAN SYLLABICS KAAI
+146D CANADIAN SYLLABICS KI
+146E CANADIAN SYLLABICS KII
+146F CANADIAN SYLLABICS KO
+1470 CANADIAN SYLLABICS KOO
+1471 CANADIAN SYLLABICS Y-CREE KOO
+1472 CANADIAN SYLLABICS KA
+1473 CANADIAN SYLLABICS KAA
+1474 CANADIAN SYLLABICS KWE
+1475 CANADIAN SYLLABICS WEST-CREE KWE
+1476 CANADIAN SYLLABICS KWI
+1477 CANADIAN SYLLABICS WEST-CREE KWI
+1478 CANADIAN SYLLABICS KWII
+1479 CANADIAN SYLLABICS WEST-CREE KWII
+147A CANADIAN SYLLABICS KWO
+147B CANADIAN SYLLABICS WEST-CREE KWO
+147C CANADIAN SYLLABICS KWOO
+147D CANADIAN SYLLABICS WEST-CREE KWOO
+147E CANADIAN SYLLABICS KWA
+147F CANADIAN SYLLABICS WEST-CREE KWA
+1480 CANADIAN SYLLABICS KWAA
+1481 CANADIAN SYLLABICS WEST-CREE KWAA
+1482 CANADIAN SYLLABICS NASKAPI KWAA
+1483 CANADIAN SYLLABICS K
+1484 CANADIAN SYLLABICS KW
+1485 CANADIAN SYLLABICS SOUTH-SLAVEY KEH
+1486 CANADIAN SYLLABICS SOUTH-SLAVEY KIH
+1487 CANADIAN SYLLABICS SOUTH-SLAVEY KOH
+1488 CANADIAN SYLLABICS SOUTH-SLAVEY KAH
+1489 CANADIAN SYLLABICS CE
+148A CANADIAN SYLLABICS CAAI
+148B CANADIAN SYLLABICS CI
+148C CANADIAN SYLLABICS CII
+148D CANADIAN SYLLABICS CO
+148E CANADIAN SYLLABICS COO
+148F CANADIAN SYLLABICS Y-CREE COO
+1490 CANADIAN SYLLABICS CA
+1491 CANADIAN SYLLABICS CAA
+1492 CANADIAN SYLLABICS CWE
+1493 CANADIAN SYLLABICS WEST-CREE CWE
+1494 CANADIAN SYLLABICS CWI
+1495 CANADIAN SYLLABICS WEST-CREE CWI
+1496 CANADIAN SYLLABICS CWII
+1497 CANADIAN SYLLABICS WEST-CREE CWII
+1498 CANADIAN SYLLABICS CWO
+1499 CANADIAN SYLLABICS WEST-CREE CWO
+149A CANADIAN SYLLABICS CWOO
+149B CANADIAN SYLLABICS WEST-CREE CWOO
+149C CANADIAN SYLLABICS CWA
+149D CANADIAN SYLLABICS WEST-CREE CWA
+149E CANADIAN SYLLABICS CWAA
+149F CANADIAN SYLLABICS WEST-CREE CWAA
+14A0 CANADIAN SYLLABICS NASKAPI CWAA
+14A1 CANADIAN SYLLABICS C
+14A2 CANADIAN SYLLABICS SAYISI TH
+14A3 CANADIAN SYLLABICS ME
+14A4 CANADIAN SYLLABICS MAAI
+14A5 CANADIAN SYLLABICS MI
+14A6 CANADIAN SYLLABICS MII
+14A7 CANADIAN SYLLABICS MO
+14A8 CANADIAN SYLLABICS MOO
+14A9 CANADIAN SYLLABICS Y-CREE MOO
+14AA CANADIAN SYLLABICS MA
+14AB CANADIAN SYLLABICS MAA
+14AC CANADIAN SYLLABICS MWE
+14AD CANADIAN SYLLABICS WEST-CREE MWE
+14AE CANADIAN SYLLABICS MWI
+14AF CANADIAN SYLLABICS WEST-CREE MWI
+14B0 CANADIAN SYLLABICS MWII
+14B1 CANADIAN SYLLABICS WEST-CREE MWII
+14B2 CANADIAN SYLLABICS MWO
+14B3 CANADIAN SYLLABICS WEST-CREE MWO
+14B4 CANADIAN SYLLABICS MWOO
+14B5 CANADIAN SYLLABICS WEST-CREE MWOO
+14B6 CANADIAN SYLLABICS MWA
+14B7 CANADIAN SYLLABICS WEST-CREE MWA
+14B8 CANADIAN SYLLABICS MWAA
+14B9 CANADIAN SYLLABICS WEST-CREE MWAA
+14BA CANADIAN SYLLABICS NASKAPI MWAA
+14BB CANADIAN SYLLABICS M
+14BC CANADIAN SYLLABICS WEST-CREE M
+14BD CANADIAN SYLLABICS MH
+14BE CANADIAN SYLLABICS ATHAPASCAN M
+14BF CANADIAN SYLLABICS SAYISI M
+14C0 CANADIAN SYLLABICS NE
+14C1 CANADIAN SYLLABICS NAAI
+14C2 CANADIAN SYLLABICS NI
+14C3 CANADIAN SYLLABICS NII
+14C4 CANADIAN SYLLABICS NO
+14C5 CANADIAN SYLLABICS NOO
+14C6 CANADIAN SYLLABICS Y-CREE NOO
+14C7 CANADIAN SYLLABICS NA
+14C8 CANADIAN SYLLABICS NAA
+14C9 CANADIAN SYLLABICS NWE
+14CA CANADIAN SYLLABICS WEST-CREE NWE
+14CB CANADIAN SYLLABICS NWA
+14CC CANADIAN SYLLABICS WEST-CREE NWA
+14CD CANADIAN SYLLABICS NWAA
+14CE CANADIAN SYLLABICS WEST-CREE NWAA
+14CF CANADIAN SYLLABICS NASKAPI NWAA
+14D0 CANADIAN SYLLABICS N
+14D1 CANADIAN SYLLABICS CARRIER NG
+14D2 CANADIAN SYLLABICS NH
+14D3 CANADIAN SYLLABICS LE
+14D4 CANADIAN SYLLABICS LAAI
+14D5 CANADIAN SYLLABICS LI
+14D6 CANADIAN SYLLABICS LII
+14D7 CANADIAN SYLLABICS LO
+14D8 CANADIAN SYLLABICS LOO
+14D9 CANADIAN SYLLABICS Y-CREE LOO
+14DA CANADIAN SYLLABICS LA
+14DB CANADIAN SYLLABICS LAA
+14DC CANADIAN SYLLABICS LWE
+14DD CANADIAN SYLLABICS WEST-CREE LWE
+14DE CANADIAN SYLLABICS LWI
+14DF CANADIAN SYLLABICS WEST-CREE LWI
+14E0 CANADIAN SYLLABICS LWII
+14E1 CANADIAN SYLLABICS WEST-CREE LWII
+14E2 CANADIAN SYLLABICS LWO
+14E3 CANADIAN SYLLABICS WEST-CREE LWO
+14E4 CANADIAN SYLLABICS LWOO
+14E5 CANADIAN SYLLABICS WEST-CREE LWOO
+14E6 CANADIAN SYLLABICS LWA
+14E7 CANADIAN SYLLABICS WEST-CREE LWA
+14E8 CANADIAN SYLLABICS LWAA
+14E9 CANADIAN SYLLABICS WEST-CREE LWAA
+14EA CANADIAN SYLLABICS L
+14EB CANADIAN SYLLABICS WEST-CREE L
+14EC CANADIAN SYLLABICS MEDIAL L
+14ED CANADIAN SYLLABICS SE
+14EE CANADIAN SYLLABICS SAAI
+14EF CANADIAN SYLLABICS SI
+14F0 CANADIAN SYLLABICS SII
+14F1 CANADIAN SYLLABICS SO
+14F2 CANADIAN SYLLABICS SOO
+14F3 CANADIAN SYLLABICS Y-CREE SOO
+14F4 CANADIAN SYLLABICS SA
+14F5 CANADIAN SYLLABICS SAA
+14F6 CANADIAN SYLLABICS SWE
+14F7 CANADIAN SYLLABICS WEST-CREE SWE
+14F8 CANADIAN SYLLABICS SWI
+14F9 CANADIAN SYLLABICS WEST-CREE SWI
+14FA CANADIAN SYLLABICS SWII
+14FB CANADIAN SYLLABICS WEST-CREE SWII
+14FC CANADIAN SYLLABICS SWO
+14FD CANADIAN SYLLABICS WEST-CREE SWO
+14FE CANADIAN SYLLABICS SWOO
+14FF CANADIAN SYLLABICS WEST-CREE SWOO
+1500 CANADIAN SYLLABICS SWA
+1501 CANADIAN SYLLABICS WEST-CREE SWA
+1502 CANADIAN SYLLABICS SWAA
+1503 CANADIAN SYLLABICS WEST-CREE SWAA
+1504 CANADIAN SYLLABICS NASKAPI SWAA
+1505 CANADIAN SYLLABICS S
+1506 CANADIAN SYLLABICS ATHAPASCAN S
+1507 CANADIAN SYLLABICS SW
+1508 CANADIAN SYLLABICS BLACKFOOT S
+1509 CANADIAN SYLLABICS MOOSE-CREE SK
+150A CANADIAN SYLLABICS NASKAPI SKW
+150B CANADIAN SYLLABICS NASKAPI S-W
+150C CANADIAN SYLLABICS NASKAPI SPWA
+150D CANADIAN SYLLABICS NASKAPI STWA
+150E CANADIAN SYLLABICS NASKAPI SKWA
+150F CANADIAN SYLLABICS NASKAPI SCWA
+1510 CANADIAN SYLLABICS SHE
+1511 CANADIAN SYLLABICS SHI
+1512 CANADIAN SYLLABICS SHII
+1513 CANADIAN SYLLABICS SHO
+1514 CANADIAN SYLLABICS SHOO
+1515 CANADIAN SYLLABICS SHA
+1516 CANADIAN SYLLABICS SHAA
+1517 CANADIAN SYLLABICS SHWE
+1518 CANADIAN SYLLABICS WEST-CREE SHWE
+1519 CANADIAN SYLLABICS SHWI
+151A CANADIAN SYLLABICS WEST-CREE SHWI
+151B CANADIAN SYLLABICS SHWII
+151C CANADIAN SYLLABICS WEST-CREE SHWII
+151D CANADIAN SYLLABICS SHWO
+151E CANADIAN SYLLABICS WEST-CREE SHWO
+151F CANADIAN SYLLABICS SHWOO
+1520 CANADIAN SYLLABICS WEST-CREE SHWOO
+1521 CANADIAN SYLLABICS SHWA
+1522 CANADIAN SYLLABICS WEST-CREE SHWA
+1523 CANADIAN SYLLABICS SHWAA
+1524 CANADIAN SYLLABICS WEST-CREE SHWAA
+1525 CANADIAN SYLLABICS SH
+1526 CANADIAN SYLLABICS YE
+1527 CANADIAN SYLLABICS YAAI
+1528 CANADIAN SYLLABICS YI
+1529 CANADIAN SYLLABICS YII
+152A CANADIAN SYLLABICS YO
+152B CANADIAN SYLLABICS YOO
+152C CANADIAN SYLLABICS Y-CREE YOO
+152D CANADIAN SYLLABICS YA
+152E CANADIAN SYLLABICS YAA
+152F CANADIAN SYLLABICS YWE
+1530 CANADIAN SYLLABICS WEST-CREE YWE
+1531 CANADIAN SYLLABICS YWI
+1532 CANADIAN SYLLABICS WEST-CREE YWI
+1533 CANADIAN SYLLABICS YWII
+1534 CANADIAN SYLLABICS WEST-CREE YWII
+1535 CANADIAN SYLLABICS YWO
+1536 CANADIAN SYLLABICS WEST-CREE YWO
+1537 CANADIAN SYLLABICS YWOO
+1538 CANADIAN SYLLABICS WEST-CREE YWOO
+1539 CANADIAN SYLLABICS YWA
+153A CANADIAN SYLLABICS WEST-CREE YWA
+153B CANADIAN SYLLABICS YWAA
+153C CANADIAN SYLLABICS WEST-CREE YWAA
+153D CANADIAN SYLLABICS NASKAPI YWAA
+153E CANADIAN SYLLABICS Y
+153F CANADIAN SYLLABICS BIBLE-CREE Y
+1540 CANADIAN SYLLABICS WEST-CREE Y
+1541 CANADIAN SYLLABICS SAYISI YI
+1542 CANADIAN SYLLABICS RE
+1543 CANADIAN SYLLABICS R-CREE RE
+1544 CANADIAN SYLLABICS WEST-CREE LE
+1545 CANADIAN SYLLABICS RAAI
+1546 CANADIAN SYLLABICS RI
+1547 CANADIAN SYLLABICS RII
+1548 CANADIAN SYLLABICS RO
+1549 CANADIAN SYLLABICS ROO
+154A CANADIAN SYLLABICS WEST-CREE LO
+154B CANADIAN SYLLABICS RA
+154C CANADIAN SYLLABICS RAA
+154D CANADIAN SYLLABICS WEST-CREE LA
+154E CANADIAN SYLLABICS RWAA
+154F CANADIAN SYLLABICS WEST-CREE RWAA
+1550 CANADIAN SYLLABICS R
+1551 CANADIAN SYLLABICS WEST-CREE R
+1552 CANADIAN SYLLABICS MEDIAL R
+1553 CANADIAN SYLLABICS FE
+1554 CANADIAN SYLLABICS FAAI
+1555 CANADIAN SYLLABICS FI
+1556 CANADIAN SYLLABICS FII
+1557 CANADIAN SYLLABICS FO
+1558 CANADIAN SYLLABICS FOO
+1559 CANADIAN SYLLABICS FA
+155A CANADIAN SYLLABICS FAA
+155B CANADIAN SYLLABICS FWAA
+155C CANADIAN SYLLABICS WEST-CREE FWAA
+155D CANADIAN SYLLABICS F
+155E CANADIAN SYLLABICS THE
+155F CANADIAN SYLLABICS N-CREE THE
+1560 CANADIAN SYLLABICS THI
+1561 CANADIAN SYLLABICS N-CREE THI
+1562 CANADIAN SYLLABICS THII
+1563 CANADIAN SYLLABICS N-CREE THII
+1564 CANADIAN SYLLABICS THO
+1565 CANADIAN SYLLABICS THOO
+1566 CANADIAN SYLLABICS THA
+1567 CANADIAN SYLLABICS THAA
+1568 CANADIAN SYLLABICS THWAA
+1569 CANADIAN SYLLABICS WEST-CREE THWAA
+156A CANADIAN SYLLABICS TH
+156B CANADIAN SYLLABICS TTHE
+156C CANADIAN SYLLABICS TTHI
+156D CANADIAN SYLLABICS TTHO
+156E CANADIAN SYLLABICS TTHA
+156F CANADIAN SYLLABICS TTH
+1570 CANADIAN SYLLABICS TYE
+1571 CANADIAN SYLLABICS TYI
+1572 CANADIAN SYLLABICS TYO
+1573 CANADIAN SYLLABICS TYA
+1574 CANADIAN SYLLABICS NUNAVIK HE
+1575 CANADIAN SYLLABICS NUNAVIK HI
+1576 CANADIAN SYLLABICS NUNAVIK HII
+1577 CANADIAN SYLLABICS NUNAVIK HO
+1578 CANADIAN SYLLABICS NUNAVIK HOO
+1579 CANADIAN SYLLABICS NUNAVIK HA
+157A CANADIAN SYLLABICS NUNAVIK HAA
+157B CANADIAN SYLLABICS NUNAVIK H
+157C CANADIAN SYLLABICS NUNAVUT H
+157D CANADIAN SYLLABICS HK
+157E CANADIAN SYLLABICS QAAI
+157F CANADIAN SYLLABICS QI
+1580 CANADIAN SYLLABICS QII
+1581 CANADIAN SYLLABICS QO
+1582 CANADIAN SYLLABICS QOO
+1583 CANADIAN SYLLABICS QA
+1584 CANADIAN SYLLABICS QAA
+1585 CANADIAN SYLLABICS Q
+1586 CANADIAN SYLLABICS TLHE
+1587 CANADIAN SYLLABICS TLHI
+1588 CANADIAN SYLLABICS TLHO
+1589 CANADIAN SYLLABICS TLHA
+158A CANADIAN SYLLABICS WEST-CREE RE
+158B CANADIAN SYLLABICS WEST-CREE RI
+158C CANADIAN SYLLABICS WEST-CREE RO
+158D CANADIAN SYLLABICS WEST-CREE RA
+158E CANADIAN SYLLABICS NGAAI
+158F CANADIAN SYLLABICS NGI
+1590 CANADIAN SYLLABICS NGII
+1591 CANADIAN SYLLABICS NGO
+1592 CANADIAN SYLLABICS NGOO
+1593 CANADIAN SYLLABICS NGA
+1594 CANADIAN SYLLABICS NGAA
+1595 CANADIAN SYLLABICS NG
+1596 CANADIAN SYLLABICS NNG
+1597 CANADIAN SYLLABICS SAYISI SHE
+1598 CANADIAN SYLLABICS SAYISI SHI
+1599 CANADIAN SYLLABICS SAYISI SHO
+159A CANADIAN SYLLABICS SAYISI SHA
+159B CANADIAN SYLLABICS WOODS-CREE THE
+159C CANADIAN SYLLABICS WOODS-CREE THI
+159D CANADIAN SYLLABICS WOODS-CREE THO
+159E CANADIAN SYLLABICS WOODS-CREE THA
+159F CANADIAN SYLLABICS WOODS-CREE TH
+15A0 CANADIAN SYLLABICS LHI
+15A1 CANADIAN SYLLABICS LHII
+15A2 CANADIAN SYLLABICS LHO
+15A3 CANADIAN SYLLABICS LHOO
+15A4 CANADIAN SYLLABICS LHA
+15A5 CANADIAN SYLLABICS LHAA
+15A6 CANADIAN SYLLABICS LH
+15A7 CANADIAN SYLLABICS TH-CREE THE
+15A8 CANADIAN SYLLABICS TH-CREE THI
+15A9 CANADIAN SYLLABICS TH-CREE THII
+15AA CANADIAN SYLLABICS TH-CREE THO
+15AB CANADIAN SYLLABICS TH-CREE THOO
+15AC CANADIAN SYLLABICS TH-CREE THA
+15AD CANADIAN SYLLABICS TH-CREE THAA
+15AE CANADIAN SYLLABICS TH-CREE TH
+15AF CANADIAN SYLLABICS AIVILIK B
+15B0 CANADIAN SYLLABICS BLACKFOOT E
+15B1 CANADIAN SYLLABICS BLACKFOOT I
+15B2 CANADIAN SYLLABICS BLACKFOOT O
+15B3 CANADIAN SYLLABICS BLACKFOOT A
+15B4 CANADIAN SYLLABICS BLACKFOOT WE
+15B5 CANADIAN SYLLABICS BLACKFOOT WI
+15B6 CANADIAN SYLLABICS BLACKFOOT WO
+15B7 CANADIAN SYLLABICS BLACKFOOT WA
+15B8 CANADIAN SYLLABICS BLACKFOOT NE
+15B9 CANADIAN SYLLABICS BLACKFOOT NI
+15BA CANADIAN SYLLABICS BLACKFOOT NO
+15BB CANADIAN SYLLABICS BLACKFOOT NA
+15BC CANADIAN SYLLABICS BLACKFOOT KE
+15BD CANADIAN SYLLABICS BLACKFOOT KI
+15BE CANADIAN SYLLABICS BLACKFOOT KO
+15BF CANADIAN SYLLABICS BLACKFOOT KA
+15C0 CANADIAN SYLLABICS SAYISI HE
+15C1 CANADIAN SYLLABICS SAYISI HI
+15C2 CANADIAN SYLLABICS SAYISI HO
+15C3 CANADIAN SYLLABICS SAYISI HA
+15C4 CANADIAN SYLLABICS CARRIER GHU
+15C5 CANADIAN SYLLABICS CARRIER GHO
+15C6 CANADIAN SYLLABICS CARRIER GHE
+15C7 CANADIAN SYLLABICS CARRIER GHEE
+15C8 CANADIAN SYLLABICS CARRIER GHI
+15C9 CANADIAN SYLLABICS CARRIER GHA
+15CA CANADIAN SYLLABICS CARRIER RU
+15CB CANADIAN SYLLABICS CARRIER RO
+15CC CANADIAN SYLLABICS CARRIER RE
+15CD CANADIAN SYLLABICS CARRIER REE
+15CE CANADIAN SYLLABICS CARRIER RI
+15CF CANADIAN SYLLABICS CARRIER RA
+15D0 CANADIAN SYLLABICS CARRIER WU
+15D1 CANADIAN SYLLABICS CARRIER WO
+15D2 CANADIAN SYLLABICS CARRIER WE
+15D3 CANADIAN SYLLABICS CARRIER WEE
+15D4 CANADIAN SYLLABICS CARRIER WI
+15D5 CANADIAN SYLLABICS CARRIER WA
+15D6 CANADIAN SYLLABICS CARRIER HWU
+15D7 CANADIAN SYLLABICS CARRIER HWO
+15D8 CANADIAN SYLLABICS CARRIER HWE
+15D9 CANADIAN SYLLABICS CARRIER HWEE
+15DA CANADIAN SYLLABICS CARRIER HWI
+15DB CANADIAN SYLLABICS CARRIER HWA
+15DC CANADIAN SYLLABICS CARRIER THU
+15DD CANADIAN SYLLABICS CARRIER THO
+15DE CANADIAN SYLLABICS CARRIER THE
+15DF CANADIAN SYLLABICS CARRIER THEE
+15E0 CANADIAN SYLLABICS CARRIER THI
+15E1 CANADIAN SYLLABICS CARRIER THA
+15E2 CANADIAN SYLLABICS CARRIER TTU
+15E3 CANADIAN SYLLABICS CARRIER TTO
+15E4 CANADIAN SYLLABICS CARRIER TTE
+15E5 CANADIAN SYLLABICS CARRIER TTEE
+15E6 CANADIAN SYLLABICS CARRIER TTI
+15E7 CANADIAN SYLLABICS CARRIER TTA
+15E8 CANADIAN SYLLABICS CARRIER PU
+15E9 CANADIAN SYLLABICS CARRIER PO
+15EA CANADIAN SYLLABICS CARRIER PE
+15EB CANADIAN SYLLABICS CARRIER PEE
+15EC CANADIAN SYLLABICS CARRIER PI
+15ED CANADIAN SYLLABICS CARRIER PA
+15EE CANADIAN SYLLABICS CARRIER P
+15EF CANADIAN SYLLABICS CARRIER GU
+15F0 CANADIAN SYLLABICS CARRIER GO
+15F1 CANADIAN SYLLABICS CARRIER GE
+15F2 CANADIAN SYLLABICS CARRIER GEE
+15F3 CANADIAN SYLLABICS CARRIER GI
+15F4 CANADIAN SYLLABICS CARRIER GA
+15F5 CANADIAN SYLLABICS CARRIER KHU
+15F6 CANADIAN SYLLABICS CARRIER KHO
+15F7 CANADIAN SYLLABICS CARRIER KHE
+15F8 CANADIAN SYLLABICS CARRIER KHEE
+15F9 CANADIAN SYLLABICS CARRIER KHI
+15FA CANADIAN SYLLABICS CARRIER KHA
+15FB CANADIAN SYLLABICS CARRIER KKU
+15FC CANADIAN SYLLABICS CARRIER KKO
+15FD CANADIAN SYLLABICS CARRIER KKE
+15FE CANADIAN SYLLABICS CARRIER KKEE
+15FF CANADIAN SYLLABICS CARRIER KKI
+1600 CANADIAN SYLLABICS CARRIER KKA
+1601 CANADIAN SYLLABICS CARRIER KK
+1602 CANADIAN SYLLABICS CARRIER NU
+1603 CANADIAN SYLLABICS CARRIER NO
+1604 CANADIAN SYLLABICS CARRIER NE
+1605 CANADIAN SYLLABICS CARRIER NEE
+1606 CANADIAN SYLLABICS CARRIER NI
+1607 CANADIAN SYLLABICS CARRIER NA
+1608 CANADIAN SYLLABICS CARRIER MU
+1609 CANADIAN SYLLABICS CARRIER MO
+160A CANADIAN SYLLABICS CARRIER ME
+160B CANADIAN SYLLABICS CARRIER MEE
+160C CANADIAN SYLLABICS CARRIER MI
+160D CANADIAN SYLLABICS CARRIER MA
+160E CANADIAN SYLLABICS CARRIER YU
+160F CANADIAN SYLLABICS CARRIER YO
+1610 CANADIAN SYLLABICS CARRIER YE
+1611 CANADIAN SYLLABICS CARRIER YEE
+1612 CANADIAN SYLLABICS CARRIER YI
+1613 CANADIAN SYLLABICS CARRIER YA
+1614 CANADIAN SYLLABICS CARRIER JU
+1615 CANADIAN SYLLABICS SAYISI JU
+1616 CANADIAN SYLLABICS CARRIER JO
+1617 CANADIAN SYLLABICS CARRIER JE
+1618 CANADIAN SYLLABICS CARRIER JEE
+1619 CANADIAN SYLLABICS CARRIER JI
+161A CANADIAN SYLLABICS SAYISI JI
+161B CANADIAN SYLLABICS CARRIER JA
+161C CANADIAN SYLLABICS CARRIER JJU
+161D CANADIAN SYLLABICS CARRIER JJO
+161E CANADIAN SYLLABICS CARRIER JJE
+161F CANADIAN SYLLABICS CARRIER JJEE
+1620 CANADIAN SYLLABICS CARRIER JJI
+1621 CANADIAN SYLLABICS CARRIER JJA
+1622 CANADIAN SYLLABICS CARRIER LU
+1623 CANADIAN SYLLABICS CARRIER LO
+1624 CANADIAN SYLLABICS CARRIER LE
+1625 CANADIAN SYLLABICS CARRIER LEE
+1626 CANADIAN SYLLABICS CARRIER LI
+1627 CANADIAN SYLLABICS CARRIER LA
+1628 CANADIAN SYLLABICS CARRIER DLU
+1629 CANADIAN SYLLABICS CARRIER DLO
+162A CANADIAN SYLLABICS CARRIER DLE
+162B CANADIAN SYLLABICS CARRIER DLEE
+162C CANADIAN SYLLABICS CARRIER DLI
+162D CANADIAN SYLLABICS CARRIER DLA
+162E CANADIAN SYLLABICS CARRIER LHU
+162F CANADIAN SYLLABICS CARRIER LHO
+1630 CANADIAN SYLLABICS CARRIER LHE
+1631 CANADIAN SYLLABICS CARRIER LHEE
+1632 CANADIAN SYLLABICS CARRIER LHI
+1633 CANADIAN SYLLABICS CARRIER LHA
+1634 CANADIAN SYLLABICS CARRIER TLHU
+1635 CANADIAN SYLLABICS CARRIER TLHO
+1636 CANADIAN SYLLABICS CARRIER TLHE
+1637 CANADIAN SYLLABICS CARRIER TLHEE
+1638 CANADIAN SYLLABICS CARRIER TLHI
+1639 CANADIAN SYLLABICS CARRIER TLHA
+163A CANADIAN SYLLABICS CARRIER TLU
+163B CANADIAN SYLLABICS CARRIER TLO
+163C CANADIAN SYLLABICS CARRIER TLE
+163D CANADIAN SYLLABICS CARRIER TLEE
+163E CANADIAN SYLLABICS CARRIER TLI
+163F CANADIAN SYLLABICS CARRIER TLA
+1640 CANADIAN SYLLABICS CARRIER ZU
+1641 CANADIAN SYLLABICS CARRIER ZO
+1642 CANADIAN SYLLABICS CARRIER ZE
+1643 CANADIAN SYLLABICS CARRIER ZEE
+1644 CANADIAN SYLLABICS CARRIER ZI
+1645 CANADIAN SYLLABICS CARRIER ZA
+1646 CANADIAN SYLLABICS CARRIER Z
+1647 CANADIAN SYLLABICS CARRIER INITIAL Z
+1648 CANADIAN SYLLABICS CARRIER DZU
+1649 CANADIAN SYLLABICS CARRIER DZO
+164A CANADIAN SYLLABICS CARRIER DZE
+164B CANADIAN SYLLABICS CARRIER DZEE
+164C CANADIAN SYLLABICS CARRIER DZI
+164D CANADIAN SYLLABICS CARRIER DZA
+164E CANADIAN SYLLABICS CARRIER SU
+164F CANADIAN SYLLABICS CARRIER SO
+1650 CANADIAN SYLLABICS CARRIER SE
+1651 CANADIAN SYLLABICS CARRIER SEE
+1652 CANADIAN SYLLABICS CARRIER SI
+1653 CANADIAN SYLLABICS CARRIER SA
+1654 CANADIAN SYLLABICS CARRIER SHU
+1655 CANADIAN SYLLABICS CARRIER SHO
+1656 CANADIAN SYLLABICS CARRIER SHE
+1657 CANADIAN SYLLABICS CARRIER SHEE
+1658 CANADIAN SYLLABICS CARRIER SHI
+1659 CANADIAN SYLLABICS CARRIER SHA
+165A CANADIAN SYLLABICS CARRIER SH
+165B CANADIAN SYLLABICS CARRIER TSU
+165C CANADIAN SYLLABICS CARRIER TSO
+165D CANADIAN SYLLABICS CARRIER TSE
+165E CANADIAN SYLLABICS CARRIER TSEE
+165F CANADIAN SYLLABICS CARRIER TSI
+1660 CANADIAN SYLLABICS CARRIER TSA
+1661 CANADIAN SYLLABICS CARRIER CHU
+1662 CANADIAN SYLLABICS CARRIER CHO
+1663 CANADIAN SYLLABICS CARRIER CHE
+1664 CANADIAN SYLLABICS CARRIER CHEE
+1665 CANADIAN SYLLABICS CARRIER CHI
+1666 CANADIAN SYLLABICS CARRIER CHA
+1667 CANADIAN SYLLABICS CARRIER TTSU
+1668 CANADIAN SYLLABICS CARRIER TTSO
+1669 CANADIAN SYLLABICS CARRIER TTSE
+166A CANADIAN SYLLABICS CARRIER TTSEE
+166B CANADIAN SYLLABICS CARRIER TTSI
+166C CANADIAN SYLLABICS CARRIER TTSA
+166D CANADIAN SYLLABICS CHI SIGN
+166E CANADIAN SYLLABICS FULL STOP
+166F CANADIAN SYLLABICS QAI
+1670 CANADIAN SYLLABICS NGAI
+1671 CANADIAN SYLLABICS NNGI
+1672 CANADIAN SYLLABICS NNGII
+1673 CANADIAN SYLLABICS NNGO
+1674 CANADIAN SYLLABICS NNGOO
+1675 CANADIAN SYLLABICS NNGA
+1676 CANADIAN SYLLABICS NNGAA
+1680 OGHAM SPACE MARK
+1681 OGHAM LETTER BEITH
+1682 OGHAM LETTER LUIS
+1683 OGHAM LETTER FEARN
+1684 OGHAM LETTER SAIL
+1685 OGHAM LETTER NION
+1686 OGHAM LETTER UATH
+1687 OGHAM LETTER DAIR
+1688 OGHAM LETTER TINNE
+1689 OGHAM LETTER COLL
+168A OGHAM LETTER CEIRT
+168B OGHAM LETTER MUIN
+168C OGHAM LETTER GORT
+168D OGHAM LETTER NGEADAL
+168E OGHAM LETTER STRAIF
+168F OGHAM LETTER RUIS
+1690 OGHAM LETTER AILM
+1691 OGHAM LETTER ONN
+1692 OGHAM LETTER UR
+1693 OGHAM LETTER EADHADH
+1694 OGHAM LETTER IODHADH
+1695 OGHAM LETTER EABHADH
+1696 OGHAM LETTER OR
+1697 OGHAM LETTER UILLEANN
+1698 OGHAM LETTER IFIN
+1699 OGHAM LETTER EAMHANCHOLL
+169A OGHAM LETTER PEITH
+169B OGHAM FEATHER MARK
+169C OGHAM REVERSED FEATHER MARK
+16A0 RUNIC LETTER FEHU FEOH FE F
+16A1 RUNIC LETTER V
+16A2 RUNIC LETTER URUZ UR U
+16A3 RUNIC LETTER YR
+16A4 RUNIC LETTER Y
+16A5 RUNIC LETTER W
+16A6 RUNIC LETTER THURISAZ THURS THORN
+16A7 RUNIC LETTER ETH
+16A8 RUNIC LETTER ANSUZ A
+16A9 RUNIC LETTER OS O
+16AA RUNIC LETTER AC A
+16AB RUNIC LETTER AESC
+16AC RUNIC LETTER LONG-BRANCH-OSS O
+16AD RUNIC LETTER SHORT-TWIG-OSS O
+16AE RUNIC LETTER O
+16AF RUNIC LETTER OE
+16B0 RUNIC LETTER ON
+16B1 RUNIC LETTER RAIDO RAD REID R
+16B2 RUNIC LETTER KAUNA
+16B3 RUNIC LETTER CEN
+16B4 RUNIC LETTER KAUN K
+16B5 RUNIC LETTER G
+16B6 RUNIC LETTER ENG
+16B7 RUNIC LETTER GEBO GYFU G
+16B8 RUNIC LETTER GAR
+16B9 RUNIC LETTER WUNJO WYNN W
+16BA RUNIC LETTER HAGLAZ H
+16BB RUNIC LETTER HAEGL H
+16BC RUNIC LETTER LONG-BRANCH-HAGALL H
+16BD RUNIC LETTER SHORT-TWIG-HAGALL H
+16BE RUNIC LETTER NAUDIZ NYD NAUD N
+16BF RUNIC LETTER SHORT-TWIG-NAUD N
+16C0 RUNIC LETTER DOTTED-N
+16C1 RUNIC LETTER ISAZ IS ISS I
+16C2 RUNIC LETTER E
+16C3 RUNIC LETTER JERAN J
+16C4 RUNIC LETTER GER
+16C5 RUNIC LETTER LONG-BRANCH-AR AE
+16C6 RUNIC LETTER SHORT-TWIG-AR A
+16C7 RUNIC LETTER IWAZ EOH
+16C8 RUNIC LETTER PERTHO PEORTH P
+16C9 RUNIC LETTER ALGIZ EOLHX
+16CA RUNIC LETTER SOWILO S
+16CB RUNIC LETTER SIGEL LONG-BRANCH-SOL S
+16CC RUNIC LETTER SHORT-TWIG-SOL S
+16CD RUNIC LETTER C
+16CE RUNIC LETTER Z
+16CF RUNIC LETTER TIWAZ TIR TYR T
+16D0 RUNIC LETTER SHORT-TWIG-TYR T
+16D1 RUNIC LETTER D
+16D2 RUNIC LETTER BERKANAN BEORC BJARKAN B
+16D3 RUNIC LETTER SHORT-TWIG-BJARKAN B
+16D4 RUNIC LETTER DOTTED-P
+16D5 RUNIC LETTER OPEN-P
+16D6 RUNIC LETTER EHWAZ EH E
+16D7 RUNIC LETTER MANNAZ MAN M
+16D8 RUNIC LETTER LONG-BRANCH-MADR M
+16D9 RUNIC LETTER SHORT-TWIG-MADR M
+16DA RUNIC LETTER LAUKAZ LAGU LOGR L
+16DB RUNIC LETTER DOTTED-L
+16DC RUNIC LETTER INGWAZ
+16DD RUNIC LETTER ING
+16DE RUNIC LETTER DAGAZ DAEG D
+16DF RUNIC LETTER OTHALAN ETHEL O
+16E0 RUNIC LETTER EAR
+16E1 RUNIC LETTER IOR
+16E2 RUNIC LETTER CWEORTH
+16E3 RUNIC LETTER CALC
+16E4 RUNIC LETTER CEALC
+16E5 RUNIC LETTER STAN
+16E6 RUNIC LETTER LONG-BRANCH-YR
+16E7 RUNIC LETTER SHORT-TWIG-YR
+16E8 RUNIC LETTER ICELANDIC-YR
+16E9 RUNIC LETTER Q
+16EA RUNIC LETTER X
+16EB RUNIC SINGLE PUNCTUATION
+16EC RUNIC MULTIPLE PUNCTUATION
+16ED RUNIC CROSS PUNCTUATION
+16EE RUNIC ARLAUG SYMBOL
+16EF RUNIC TVIMADUR SYMBOL
+16F0 RUNIC BELGTHOR SYMBOL
+1700 TAGALOG LETTER A
+1701 TAGALOG LETTER I
+1702 TAGALOG LETTER U
+1703 TAGALOG LETTER KA
+1704 TAGALOG LETTER GA
+1705 TAGALOG LETTER NGA
+1706 TAGALOG LETTER TA
+1707 TAGALOG LETTER DA
+1708 TAGALOG LETTER NA
+1709 TAGALOG LETTER PA
+170A TAGALOG LETTER BA
+170B TAGALOG LETTER MA
+170C TAGALOG LETTER YA
+170E TAGALOG LETTER LA
+170F TAGALOG LETTER WA
+1710 TAGALOG LETTER SA
+1711 TAGALOG LETTER HA
+1712 TAGALOG VOWEL SIGN I
+1713 TAGALOG VOWEL SIGN U
+1714 TAGALOG SIGN VIRAMA
+1720 HANUNOO LETTER A
+1721 HANUNOO LETTER I
+1722 HANUNOO LETTER U
+1723 HANUNOO LETTER KA
+1724 HANUNOO LETTER GA
+1725 HANUNOO LETTER NGA
+1726 HANUNOO LETTER TA
+1727 HANUNOO LETTER DA
+1728 HANUNOO LETTER NA
+1729 HANUNOO LETTER PA
+172A HANUNOO LETTER BA
+172B HANUNOO LETTER MA
+172C HANUNOO LETTER YA
+172D HANUNOO LETTER RA
+172E HANUNOO LETTER LA
+172F HANUNOO LETTER WA
+1730 HANUNOO LETTER SA
+1731 HANUNOO LETTER HA
+1732 HANUNOO VOWEL SIGN I
+1733 HANUNOO VOWEL SIGN U
+1734 HANUNOO SIGN PAMUDPOD
+1735 PHILIPPINE SINGLE PUNCTUATION
+1736 PHILIPPINE DOUBLE PUNCTUATION
+1740 BUHID LETTER A
+1741 BUHID LETTER I
+1742 BUHID LETTER U
+1743 BUHID LETTER KA
+1744 BUHID LETTER GA
+1745 BUHID LETTER NGA
+1746 BUHID LETTER TA
+1747 BUHID LETTER DA
+1748 BUHID LETTER NA
+1749 BUHID LETTER PA
+174A BUHID LETTER BA
+174B BUHID LETTER MA
+174C BUHID LETTER YA
+174D BUHID LETTER RA
+174E BUHID LETTER LA
+174F BUHID LETTER WA
+1750 BUHID LETTER SA
+1751 BUHID LETTER HA
+1752 BUHID VOWEL SIGN I
+1753 BUHID VOWEL SIGN U
+1760 TAGBANWA LETTER A
+1761 TAGBANWA LETTER I
+1762 TAGBANWA LETTER U
+1763 TAGBANWA LETTER KA
+1764 TAGBANWA LETTER GA
+1765 TAGBANWA LETTER NGA
+1766 TAGBANWA LETTER TA
+1767 TAGBANWA LETTER DA
+1768 TAGBANWA LETTER NA
+1769 TAGBANWA LETTER PA
+176A TAGBANWA LETTER BA
+176B TAGBANWA LETTER MA
+176C TAGBANWA LETTER YA
+176E TAGBANWA LETTER LA
+176F TAGBANWA LETTER WA
+1770 TAGBANWA LETTER SA
+1772 TAGBANWA VOWEL SIGN I
+1773 TAGBANWA VOWEL SIGN U
+1780 KHMER LETTER KA
+1781 KHMER LETTER KHA
+1782 KHMER LETTER KO
+1783 KHMER LETTER KHO
+1784 KHMER LETTER NGO
+1785 KHMER LETTER CA
+1786 KHMER LETTER CHA
+1787 KHMER LETTER CO
+1788 KHMER LETTER CHO
+1789 KHMER LETTER NYO
+178A KHMER LETTER DA
+178B KHMER LETTER TTHA
+178C KHMER LETTER DO
+178D KHMER LETTER TTHO
+178E KHMER LETTER NNO
+178F KHMER LETTER TA
+1790 KHMER LETTER THA
+1791 KHMER LETTER TO
+1792 KHMER LETTER THO
+1793 KHMER LETTER NO
+1794 KHMER LETTER BA
+1795 KHMER LETTER PHA
+1796 KHMER LETTER PO
+1797 KHMER LETTER PHO
+1798 KHMER LETTER MO
+1799 KHMER LETTER YO
+179A KHMER LETTER RO
+179B KHMER LETTER LO
+179C KHMER LETTER VO
+179D KHMER LETTER SHA
+179E KHMER LETTER SSO
+179F KHMER LETTER SA
+17A0 KHMER LETTER HA
+17A1 KHMER LETTER LA
+17A2 KHMER LETTER QA
+17A3 KHMER INDEPENDENT VOWEL QAQ
+17A4 KHMER INDEPENDENT VOWEL QAA
+17A5 KHMER INDEPENDENT VOWEL QI
+17A6 KHMER INDEPENDENT VOWEL QII
+17A7 KHMER INDEPENDENT VOWEL QU
+17A8 KHMER INDEPENDENT VOWEL QUK
+17A9 KHMER INDEPENDENT VOWEL QUU
+17AA KHMER INDEPENDENT VOWEL QUUV
+17AB KHMER INDEPENDENT VOWEL RY
+17AC KHMER INDEPENDENT VOWEL RYY
+17AD KHMER INDEPENDENT VOWEL LY
+17AE KHMER INDEPENDENT VOWEL LYY
+17AF KHMER INDEPENDENT VOWEL QE
+17B0 KHMER INDEPENDENT VOWEL QAI
+17B1 KHMER INDEPENDENT VOWEL QOO TYPE ONE
+17B2 KHMER INDEPENDENT VOWEL QOO TYPE TWO
+17B3 KHMER INDEPENDENT VOWEL QAU
+17B4 KHMER VOWEL INHERENT AQ
+17B5 KHMER VOWEL INHERENT AA
+17B6 KHMER VOWEL SIGN AA
+17B7 KHMER VOWEL SIGN I
+17B8 KHMER VOWEL SIGN II
+17B9 KHMER VOWEL SIGN Y
+17BA KHMER VOWEL SIGN YY
+17BB KHMER VOWEL SIGN U
+17BC KHMER VOWEL SIGN UU
+17BD KHMER VOWEL SIGN UA
+17BE KHMER VOWEL SIGN OE
+17BF KHMER VOWEL SIGN YA
+17C0 KHMER VOWEL SIGN IE
+17C1 KHMER VOWEL SIGN E
+17C2 KHMER VOWEL SIGN AE
+17C3 KHMER VOWEL SIGN AI
+17C4 KHMER VOWEL SIGN OO
+17C5 KHMER VOWEL SIGN AU
+17C6 KHMER SIGN NIKAHIT
+17C7 KHMER SIGN REAHMUK
+17C8 KHMER SIGN YUUKALEAPINTU
+17C9 KHMER SIGN MUUSIKATOAN
+17CA KHMER SIGN TRIISAP
+17CB KHMER SIGN BANTOC
+17CC KHMER SIGN ROBAT
+17CD KHMER SIGN TOANDAKHIAT
+17CE KHMER SIGN KAKABAT
+17CF KHMER SIGN AHSDA
+17D0 KHMER SIGN SAMYOK SANNYA
+17D1 KHMER SIGN VIRIAM
+17D2 KHMER SIGN COENG
+17D3 KHMER SIGN BATHAMASAT
+17D4 KHMER SIGN KHAN
+17D5 KHMER SIGN BARIYOOSAN
+17D6 KHMER SIGN CAMNUC PII KUUH
+17D7 KHMER SIGN LEK TOO
+17D8 KHMER SIGN BEYYAL
+17D9 KHMER SIGN PHNAEK MUAN
+17DA KHMER SIGN KOOMUUT
+17DB KHMER CURRENCY SYMBOL RIEL
+17DC KHMER SIGN AVAKRAHASANYA
+17E0 KHMER DIGIT ZERO
+17E1 KHMER DIGIT ONE
+17E2 KHMER DIGIT TWO
+17E3 KHMER DIGIT THREE
+17E4 KHMER DIGIT FOUR
+17E5 KHMER DIGIT FIVE
+17E6 KHMER DIGIT SIX
+17E7 KHMER DIGIT SEVEN
+17E8 KHMER DIGIT EIGHT
+17E9 KHMER DIGIT NINE
+1800 MONGOLIAN BIRGA
+1801 MONGOLIAN ELLIPSIS
+1802 MONGOLIAN COMMA
+1803 MONGOLIAN FULL STOP
+1804 MONGOLIAN COLON
+1805 MONGOLIAN FOUR DOTS
+1806 MONGOLIAN TODO SOFT HYPHEN
+1807 MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER
+1808 MONGOLIAN MANCHU COMMA
+1809 MONGOLIAN MANCHU FULL STOP
+180A MONGOLIAN NIRUGU
+180B MONGOLIAN FREE VARIATION SELECTOR ONE
+180C MONGOLIAN FREE VARIATION SELECTOR TWO
+180D MONGOLIAN FREE VARIATION SELECTOR THREE
+180E MONGOLIAN VOWEL SEPARATOR
+1810 MONGOLIAN DIGIT ZERO
+1811 MONGOLIAN DIGIT ONE
+1812 MONGOLIAN DIGIT TWO
+1813 MONGOLIAN DIGIT THREE
+1814 MONGOLIAN DIGIT FOUR
+1815 MONGOLIAN DIGIT FIVE
+1816 MONGOLIAN DIGIT SIX
+1817 MONGOLIAN DIGIT SEVEN
+1818 MONGOLIAN DIGIT EIGHT
+1819 MONGOLIAN DIGIT NINE
+1820 MONGOLIAN LETTER A
+1821 MONGOLIAN LETTER E
+1822 MONGOLIAN LETTER I
+1823 MONGOLIAN LETTER O
+1824 MONGOLIAN LETTER U
+1825 MONGOLIAN LETTER OE
+1826 MONGOLIAN LETTER UE
+1827 MONGOLIAN LETTER EE
+1828 MONGOLIAN LETTER NA
+1829 MONGOLIAN LETTER ANG
+182A MONGOLIAN LETTER BA
+182B MONGOLIAN LETTER PA
+182C MONGOLIAN LETTER QA
+182D MONGOLIAN LETTER GA
+182E MONGOLIAN LETTER MA
+182F MONGOLIAN LETTER LA
+1830 MONGOLIAN LETTER SA
+1831 MONGOLIAN LETTER SHA
+1832 MONGOLIAN LETTER TA
+1833 MONGOLIAN LETTER DA
+1834 MONGOLIAN LETTER CHA
+1835 MONGOLIAN LETTER JA
+1836 MONGOLIAN LETTER YA
+1837 MONGOLIAN LETTER RA
+1838 MONGOLIAN LETTER WA
+1839 MONGOLIAN LETTER FA
+183A MONGOLIAN LETTER KA
+183B MONGOLIAN LETTER KHA
+183C MONGOLIAN LETTER TSA
+183D MONGOLIAN LETTER ZA
+183E MONGOLIAN LETTER HAA
+183F MONGOLIAN LETTER ZRA
+1840 MONGOLIAN LETTER LHA
+1841 MONGOLIAN LETTER ZHI
+1842 MONGOLIAN LETTER CHI
+1843 MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844 MONGOLIAN LETTER TODO E
+1845 MONGOLIAN LETTER TODO I
+1846 MONGOLIAN LETTER TODO O
+1847 MONGOLIAN LETTER TODO U
+1848 MONGOLIAN LETTER TODO OE
+1849 MONGOLIAN LETTER TODO UE
+184A MONGOLIAN LETTER TODO ANG
+184B MONGOLIAN LETTER TODO BA
+184C MONGOLIAN LETTER TODO PA
+184D MONGOLIAN LETTER TODO QA
+184E MONGOLIAN LETTER TODO GA
+184F MONGOLIAN LETTER TODO MA
+1850 MONGOLIAN LETTER TODO TA
+1851 MONGOLIAN LETTER TODO DA
+1852 MONGOLIAN LETTER TODO CHA
+1853 MONGOLIAN LETTER TODO JA
+1854 MONGOLIAN LETTER TODO TSA
+1855 MONGOLIAN LETTER TODO YA
+1856 MONGOLIAN LETTER TODO WA
+1857 MONGOLIAN LETTER TODO KA
+1858 MONGOLIAN LETTER TODO GAA
+1859 MONGOLIAN LETTER TODO HAA
+185A MONGOLIAN LETTER TODO JIA
+185B MONGOLIAN LETTER TODO NIA
+185C MONGOLIAN LETTER TODO DZA
+185D MONGOLIAN LETTER SIBE E
+185E MONGOLIAN LETTER SIBE I
+185F MONGOLIAN LETTER SIBE IY
+1860 MONGOLIAN LETTER SIBE UE
+1861 MONGOLIAN LETTER SIBE U
+1862 MONGOLIAN LETTER SIBE ANG
+1863 MONGOLIAN LETTER SIBE KA
+1864 MONGOLIAN LETTER SIBE GA
+1865 MONGOLIAN LETTER SIBE HA
+1866 MONGOLIAN LETTER SIBE PA
+1867 MONGOLIAN LETTER SIBE SHA
+1868 MONGOLIAN LETTER SIBE TA
+1869 MONGOLIAN LETTER SIBE DA
+186A MONGOLIAN LETTER SIBE JA
+186B MONGOLIAN LETTER SIBE FA
+186C MONGOLIAN LETTER SIBE GAA
+186D MONGOLIAN LETTER SIBE HAA
+186E MONGOLIAN LETTER SIBE TSA
+186F MONGOLIAN LETTER SIBE ZA
+1870 MONGOLIAN LETTER SIBE RAA
+1871 MONGOLIAN LETTER SIBE CHA
+1872 MONGOLIAN LETTER SIBE ZHA
+1873 MONGOLIAN LETTER MANCHU I
+1874 MONGOLIAN LETTER MANCHU KA
+1875 MONGOLIAN LETTER MANCHU RA
+1876 MONGOLIAN LETTER MANCHU FA
+1877 MONGOLIAN LETTER MANCHU ZHA
+1880 MONGOLIAN LETTER ALI GALI ANUSVARA ONE
+1881 MONGOLIAN LETTER ALI GALI VISARGA ONE
+1882 MONGOLIAN LETTER ALI GALI DAMARU
+1883 MONGOLIAN LETTER ALI GALI UBADAMA
+1884 MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1885 MONGOLIAN LETTER ALI GALI BALUDA
+1886 MONGOLIAN LETTER ALI GALI THREE BALUDA
+1887 MONGOLIAN LETTER ALI GALI A
+1888 MONGOLIAN LETTER ALI GALI I
+1889 MONGOLIAN LETTER ALI GALI KA
+188A MONGOLIAN LETTER ALI GALI NGA
+188B MONGOLIAN LETTER ALI GALI CA
+188C MONGOLIAN LETTER ALI GALI TTA
+188D MONGOLIAN LETTER ALI GALI TTHA
+188E MONGOLIAN LETTER ALI GALI DDA
+188F MONGOLIAN LETTER ALI GALI NNA
+1890 MONGOLIAN LETTER ALI GALI TA
+1891 MONGOLIAN LETTER ALI GALI DA
+1892 MONGOLIAN LETTER ALI GALI PA
+1893 MONGOLIAN LETTER ALI GALI PHA
+1894 MONGOLIAN LETTER ALI GALI SSA
+1895 MONGOLIAN LETTER ALI GALI ZHA
+1896 MONGOLIAN LETTER ALI GALI ZA
+1897 MONGOLIAN LETTER ALI GALI AH
+1898 MONGOLIAN LETTER TODO ALI GALI TA
+1899 MONGOLIAN LETTER TODO ALI GALI ZHA
+189A MONGOLIAN LETTER MANCHU ALI GALI GHA
+189B MONGOLIAN LETTER MANCHU ALI GALI NGA
+189C MONGOLIAN LETTER MANCHU ALI GALI CA
+189D MONGOLIAN LETTER MANCHU ALI GALI JHA
+189E MONGOLIAN LETTER MANCHU ALI GALI TTA
+189F MONGOLIAN LETTER MANCHU ALI GALI DDHA
+18A0 MONGOLIAN LETTER MANCHU ALI GALI TA
+18A1 MONGOLIAN LETTER MANCHU ALI GALI DHA
+18A2 MONGOLIAN LETTER MANCHU ALI GALI SSA
+18A3 MONGOLIAN LETTER MANCHU ALI GALI CYA
+18A4 MONGOLIAN LETTER MANCHU ALI GALI ZHA
+18A5 MONGOLIAN LETTER MANCHU ALI GALI ZA
+18A6 MONGOLIAN LETTER ALI GALI HALF U
+18A7 MONGOLIAN LETTER ALI GALI HALF YA
+18A8 MONGOLIAN LETTER MANCHU ALI GALI BHA
+18A9 MONGOLIAN LETTER ALI GALI DAGALGA
+1E00 LATIN CAPITAL LETTER A WITH RING BELOW
+1E01 LATIN SMALL LETTER A WITH RING BELOW
+1E02 LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E03 LATIN SMALL LETTER B WITH DOT ABOVE
+1E04 LATIN CAPITAL LETTER B WITH DOT BELOW
+1E05 LATIN SMALL LETTER B WITH DOT BELOW
+1E06 LATIN CAPITAL LETTER B WITH LINE BELOW
+1E07 LATIN SMALL LETTER B WITH LINE BELOW
+1E08 LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+1E09 LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+1E0A LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0B LATIN SMALL LETTER D WITH DOT ABOVE
+1E0C LATIN CAPITAL LETTER D WITH DOT BELOW
+1E0D LATIN SMALL LETTER D WITH DOT BELOW
+1E0E LATIN CAPITAL LETTER D WITH LINE BELOW
+1E0F LATIN SMALL LETTER D WITH LINE BELOW
+1E10 LATIN CAPITAL LETTER D WITH CEDILLA
+1E11 LATIN SMALL LETTER D WITH CEDILLA
+1E12 LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+1E13 LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+1E14 LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+1E15 LATIN SMALL LETTER E WITH MACRON AND GRAVE
+1E16 LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+1E17 LATIN SMALL LETTER E WITH MACRON AND ACUTE
+1E18 LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+1E19 LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+1E1A LATIN CAPITAL LETTER E WITH TILDE BELOW
+1E1B LATIN SMALL LETTER E WITH TILDE BELOW
+1E1C LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+1E1D LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+1E1E LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E1F LATIN SMALL LETTER F WITH DOT ABOVE
+1E20 LATIN CAPITAL LETTER G WITH MACRON
+1E21 LATIN SMALL LETTER G WITH MACRON
+1E22 LATIN CAPITAL LETTER H WITH DOT ABOVE
+1E23 LATIN SMALL LETTER H WITH DOT ABOVE
+1E24 LATIN CAPITAL LETTER H WITH DOT BELOW
+1E25 LATIN SMALL LETTER H WITH DOT BELOW
+1E26 LATIN CAPITAL LETTER H WITH DIAERESIS
+1E27 LATIN SMALL LETTER H WITH DIAERESIS
+1E28 LATIN CAPITAL LETTER H WITH CEDILLA
+1E29 LATIN SMALL LETTER H WITH CEDILLA
+1E2A LATIN CAPITAL LETTER H WITH BREVE BELOW
+1E2B LATIN SMALL LETTER H WITH BREVE BELOW
+1E2C LATIN CAPITAL LETTER I WITH TILDE BELOW
+1E2D LATIN SMALL LETTER I WITH TILDE BELOW
+1E2E LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+1E2F LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+1E30 LATIN CAPITAL LETTER K WITH ACUTE
+1E31 LATIN SMALL LETTER K WITH ACUTE
+1E32 LATIN CAPITAL LETTER K WITH DOT BELOW
+1E33 LATIN SMALL LETTER K WITH DOT BELOW
+1E34 LATIN CAPITAL LETTER K WITH LINE BELOW
+1E35 LATIN SMALL LETTER K WITH LINE BELOW
+1E36 LATIN CAPITAL LETTER L WITH DOT BELOW
+1E37 LATIN SMALL LETTER L WITH DOT BELOW
+1E38 LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+1E39 LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+1E3A LATIN CAPITAL LETTER L WITH LINE BELOW
+1E3B LATIN SMALL LETTER L WITH LINE BELOW
+1E3C LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+1E3D LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+1E3E LATIN CAPITAL LETTER M WITH ACUTE
+1E3F LATIN SMALL LETTER M WITH ACUTE
+1E40 LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E41 LATIN SMALL LETTER M WITH DOT ABOVE
+1E42 LATIN CAPITAL LETTER M WITH DOT BELOW
+1E43 LATIN SMALL LETTER M WITH DOT BELOW
+1E44 LATIN CAPITAL LETTER N WITH DOT ABOVE
+1E45 LATIN SMALL LETTER N WITH DOT ABOVE
+1E46 LATIN CAPITAL LETTER N WITH DOT BELOW
+1E47 LATIN SMALL LETTER N WITH DOT BELOW
+1E48 LATIN CAPITAL LETTER N WITH LINE BELOW
+1E49 LATIN SMALL LETTER N WITH LINE BELOW
+1E4A LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+1E4B LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+1E4C LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+1E4D LATIN SMALL LETTER O WITH TILDE AND ACUTE
+1E4E LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+1E4F LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+1E50 LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+1E51 LATIN SMALL LETTER O WITH MACRON AND GRAVE
+1E52 LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+1E53 LATIN SMALL LETTER O WITH MACRON AND ACUTE
+1E54 LATIN CAPITAL LETTER P WITH ACUTE
+1E55 LATIN SMALL LETTER P WITH ACUTE
+1E56 LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E57 LATIN SMALL LETTER P WITH DOT ABOVE
+1E58 LATIN CAPITAL LETTER R WITH DOT ABOVE
+1E59 LATIN SMALL LETTER R WITH DOT ABOVE
+1E5A LATIN CAPITAL LETTER R WITH DOT BELOW
+1E5B LATIN SMALL LETTER R WITH DOT BELOW
+1E5C LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+1E5D LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+1E5E LATIN CAPITAL LETTER R WITH LINE BELOW
+1E5F LATIN SMALL LETTER R WITH LINE BELOW
+1E60 LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E61 LATIN SMALL LETTER S WITH DOT ABOVE
+1E62 LATIN CAPITAL LETTER S WITH DOT BELOW
+1E63 LATIN SMALL LETTER S WITH DOT BELOW
+1E64 LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+1E65 LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+1E66 LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+1E67 LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+1E68 LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E69 LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6A LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6B LATIN SMALL LETTER T WITH DOT ABOVE
+1E6C LATIN CAPITAL LETTER T WITH DOT BELOW
+1E6D LATIN SMALL LETTER T WITH DOT BELOW
+1E6E LATIN CAPITAL LETTER T WITH LINE BELOW
+1E6F LATIN SMALL LETTER T WITH LINE BELOW
+1E70 LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+1E71 LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+1E72 LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+1E73 LATIN SMALL LETTER U WITH DIAERESIS BELOW
+1E74 LATIN CAPITAL LETTER U WITH TILDE BELOW
+1E75 LATIN SMALL LETTER U WITH TILDE BELOW
+1E76 LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+1E77 LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+1E78 LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+1E79 LATIN SMALL LETTER U WITH TILDE AND ACUTE
+1E7A LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+1E7B LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+1E7C LATIN CAPITAL LETTER V WITH TILDE
+1E7D LATIN SMALL LETTER V WITH TILDE
+1E7E LATIN CAPITAL LETTER V WITH DOT BELOW
+1E7F LATIN SMALL LETTER V WITH DOT BELOW
+1E80 LATIN CAPITAL LETTER W WITH GRAVE
+1E81 LATIN SMALL LETTER W WITH GRAVE
+1E82 LATIN CAPITAL LETTER W WITH ACUTE
+1E83 LATIN SMALL LETTER W WITH ACUTE
+1E84 LATIN CAPITAL LETTER W WITH DIAERESIS
+1E85 LATIN SMALL LETTER W WITH DIAERESIS
+1E86 LATIN CAPITAL LETTER W WITH DOT ABOVE
+1E87 LATIN SMALL LETTER W WITH DOT ABOVE
+1E88 LATIN CAPITAL LETTER W WITH DOT BELOW
+1E89 LATIN SMALL LETTER W WITH DOT BELOW
+1E8A LATIN CAPITAL LETTER X WITH DOT ABOVE
+1E8B LATIN SMALL LETTER X WITH DOT ABOVE
+1E8C LATIN CAPITAL LETTER X WITH DIAERESIS
+1E8D LATIN SMALL LETTER X WITH DIAERESIS
+1E8E LATIN CAPITAL LETTER Y WITH DOT ABOVE
+1E8F LATIN SMALL LETTER Y WITH DOT ABOVE
+1E90 LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+1E91 LATIN SMALL LETTER Z WITH CIRCUMFLEX
+1E92 LATIN CAPITAL LETTER Z WITH DOT BELOW
+1E93 LATIN SMALL LETTER Z WITH DOT BELOW
+1E94 LATIN CAPITAL LETTER Z WITH LINE BELOW
+1E95 LATIN SMALL LETTER Z WITH LINE BELOW
+1E96 LATIN SMALL LETTER H WITH LINE BELOW
+1E97 LATIN SMALL LETTER T WITH DIAERESIS
+1E98 LATIN SMALL LETTER W WITH RING ABOVE
+1E99 LATIN SMALL LETTER Y WITH RING ABOVE
+1E9A LATIN SMALL LETTER A WITH RIGHT HALF RING
+1E9B LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1EA0 LATIN CAPITAL LETTER A WITH DOT BELOW
+1EA1 LATIN SMALL LETTER A WITH DOT BELOW
+1EA2 LATIN CAPITAL LETTER A WITH HOOK ABOVE
+1EA3 LATIN SMALL LETTER A WITH HOOK ABOVE
+1EA4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA5 LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA6 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EA9 LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAA LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAB LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAC LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAD LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAE LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+1EAF LATIN SMALL LETTER A WITH BREVE AND ACUTE
+1EB0 LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+1EB1 LATIN SMALL LETTER A WITH BREVE AND GRAVE
+1EB2 LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+1EB3 LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+1EB4 LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+1EB5 LATIN SMALL LETTER A WITH BREVE AND TILDE
+1EB6 LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+1EB7 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+1EB8 LATIN CAPITAL LETTER E WITH DOT BELOW
+1EB9 LATIN SMALL LETTER E WITH DOT BELOW
+1EBA LATIN CAPITAL LETTER E WITH HOOK ABOVE
+1EBB LATIN SMALL LETTER E WITH HOOK ABOVE
+1EBC LATIN CAPITAL LETTER E WITH TILDE
+1EBD LATIN SMALL LETTER E WITH TILDE
+1EBE LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EBF LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC0 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC1 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC2 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC4 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC5 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC6 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC7 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC8 LATIN CAPITAL LETTER I WITH HOOK ABOVE
+1EC9 LATIN SMALL LETTER I WITH HOOK ABOVE
+1ECA LATIN CAPITAL LETTER I WITH DOT BELOW
+1ECB LATIN SMALL LETTER I WITH DOT BELOW
+1ECC LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECD LATIN SMALL LETTER O WITH DOT BELOW
+1ECE LATIN CAPITAL LETTER O WITH HOOK ABOVE
+1ECF LATIN SMALL LETTER O WITH HOOK ABOVE
+1ED0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED1 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED2 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED3 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED5 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED6 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED7 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED8 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1ED9 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDA LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+1EDB LATIN SMALL LETTER O WITH HORN AND ACUTE
+1EDC LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+1EDD LATIN SMALL LETTER O WITH HORN AND GRAVE
+1EDE LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+1EDF LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+1EE0 LATIN CAPITAL LETTER O WITH HORN AND TILDE
+1EE1 LATIN SMALL LETTER O WITH HORN AND TILDE
+1EE2 LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+1EE3 LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+1EE4 LATIN CAPITAL LETTER U WITH DOT BELOW
+1EE5 LATIN SMALL LETTER U WITH DOT BELOW
+1EE6 LATIN CAPITAL LETTER U WITH HOOK ABOVE
+1EE7 LATIN SMALL LETTER U WITH HOOK ABOVE
+1EE8 LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+1EE9 LATIN SMALL LETTER U WITH HORN AND ACUTE
+1EEA LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+1EEB LATIN SMALL LETTER U WITH HORN AND GRAVE
+1EEC LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+1EED LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+1EEE LATIN CAPITAL LETTER U WITH HORN AND TILDE
+1EEF LATIN SMALL LETTER U WITH HORN AND TILDE
+1EF0 LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+1EF1 LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+1EF2 LATIN CAPITAL LETTER Y WITH GRAVE
+1EF3 LATIN SMALL LETTER Y WITH GRAVE
+1EF4 LATIN CAPITAL LETTER Y WITH DOT BELOW
+1EF5 LATIN SMALL LETTER Y WITH DOT BELOW
+1EF6 LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+1EF7 LATIN SMALL LETTER Y WITH HOOK ABOVE
+1EF8 LATIN CAPITAL LETTER Y WITH TILDE
+1EF9 LATIN SMALL LETTER Y WITH TILDE
+1F00 GREEK SMALL LETTER ALPHA WITH PSILI
+1F01 GREEK SMALL LETTER ALPHA WITH DASIA
+1F02 GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+1F03 GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+1F04 GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+1F05 GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+1F06 GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+1F07 GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F08 GREEK CAPITAL LETTER ALPHA WITH PSILI
+1F09 GREEK CAPITAL LETTER ALPHA WITH DASIA
+1F0A GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+1F0B GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+1F0C GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+1F0D GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+1F0E GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+1F0F GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F10 GREEK SMALL LETTER EPSILON WITH PSILI
+1F11 GREEK SMALL LETTER EPSILON WITH DASIA
+1F12 GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+1F13 GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
+1F14 GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+1F15 GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18 GREEK CAPITAL LETTER EPSILON WITH PSILI
+1F19 GREEK CAPITAL LETTER EPSILON WITH DASIA
+1F1A GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+1F1B GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+1F1C GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+1F1D GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20 GREEK SMALL LETTER ETA WITH PSILI
+1F21 GREEK SMALL LETTER ETA WITH DASIA
+1F22 GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+1F23 GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+1F24 GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+1F25 GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+1F26 GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+1F27 GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+1F28 GREEK CAPITAL LETTER ETA WITH PSILI
+1F29 GREEK CAPITAL LETTER ETA WITH DASIA
+1F2A GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+1F2B GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+1F2C GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+1F2D GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+1F2E GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+1F2F GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+1F30 GREEK SMALL LETTER IOTA WITH PSILI
+1F31 GREEK SMALL LETTER IOTA WITH DASIA
+1F32 GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+1F33 GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+1F34 GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+1F35 GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+1F36 GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+1F37 GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F38 GREEK CAPITAL LETTER IOTA WITH PSILI
+1F39 GREEK CAPITAL LETTER IOTA WITH DASIA
+1F3A GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+1F3B GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+1F3C GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+1F3D GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+1F3E GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+1F3F GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F40 GREEK SMALL LETTER OMICRON WITH PSILI
+1F41 GREEK SMALL LETTER OMICRON WITH DASIA
+1F42 GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+1F43 GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
+1F44 GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+1F45 GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48 GREEK CAPITAL LETTER OMICRON WITH PSILI
+1F49 GREEK CAPITAL LETTER OMICRON WITH DASIA
+1F4A GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+1F4B GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+1F4C GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+1F4D GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50 GREEK SMALL LETTER UPSILON WITH PSILI
+1F51 GREEK SMALL LETTER UPSILON WITH DASIA
+1F52 GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+1F53 GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+1F54 GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+1F55 GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+1F56 GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+1F57 GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59 GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F60 GREEK SMALL LETTER OMEGA WITH PSILI
+1F61 GREEK SMALL LETTER OMEGA WITH DASIA
+1F62 GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+1F63 GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+1F64 GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+1F65 GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+1F66 GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+1F67 GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F68 GREEK CAPITAL LETTER OMEGA WITH PSILI
+1F69 GREEK CAPITAL LETTER OMEGA WITH DASIA
+1F6A GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+1F6B GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+1F6C GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+1F6D GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+1F6E GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+1F6F GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F70 GREEK SMALL LETTER ALPHA WITH VARIA
+1F71 GREEK SMALL LETTER ALPHA WITH OXIA
+1F72 GREEK SMALL LETTER EPSILON WITH VARIA
+1F73 GREEK SMALL LETTER EPSILON WITH OXIA
+1F74 GREEK SMALL LETTER ETA WITH VARIA
+1F75 GREEK SMALL LETTER ETA WITH OXIA
+1F76 GREEK SMALL LETTER IOTA WITH VARIA
+1F77 GREEK SMALL LETTER IOTA WITH OXIA
+1F78 GREEK SMALL LETTER OMICRON WITH VARIA
+1F79 GREEK SMALL LETTER OMICRON WITH OXIA
+1F7A GREEK SMALL LETTER UPSILON WITH VARIA
+1F7B GREEK SMALL LETTER UPSILON WITH OXIA
+1F7C GREEK SMALL LETTER OMEGA WITH VARIA
+1F7D GREEK SMALL LETTER OMEGA WITH OXIA
+1F80 GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+1F81 GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+1F82 GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F83 GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F84 GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F85 GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F86 GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F87 GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F88 GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F89 GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+1F8A GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F8B GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F8C GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F8D GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F8E GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F8F GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F90 GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+1F91 GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+1F92 GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F93 GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F94 GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F95 GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F96 GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F97 GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F98 GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F99 GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+1F9A GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F9B GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F9C GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F9D GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F9E GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F9F GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FA0 GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+1FA1 GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+1FA2 GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1FA3 GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1FA4 GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1FA5 GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1FA6 GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1FA7 GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FA8 GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1FA9 GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+1FAA GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1FAB GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1FAC GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1FAD GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1FAE GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FAF GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FB0 GREEK SMALL LETTER ALPHA WITH VRACHY
+1FB1 GREEK SMALL LETTER ALPHA WITH MACRON
+1FB2 GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+1FB3 GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+1FB4 GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6 GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+1FB7 GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FB8 GREEK CAPITAL LETTER ALPHA WITH VRACHY
+1FB9 GREEK CAPITAL LETTER ALPHA WITH MACRON
+1FBA GREEK CAPITAL LETTER ALPHA WITH VARIA
+1FBB GREEK CAPITAL LETTER ALPHA WITH OXIA
+1FBC GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBD GREEK KORONIS
+1FBE GREEK PROSGEGRAMMENI
+1FBF GREEK PSILI
+1FC0 GREEK PERISPOMENI
+1FC1 GREEK DIALYTIKA AND PERISPOMENI
+1FC2 GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+1FC3 GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+1FC4 GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6 GREEK SMALL LETTER ETA WITH PERISPOMENI
+1FC7 GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FC8 GREEK CAPITAL LETTER EPSILON WITH VARIA
+1FC9 GREEK CAPITAL LETTER EPSILON WITH OXIA
+1FCA GREEK CAPITAL LETTER ETA WITH VARIA
+1FCB GREEK CAPITAL LETTER ETA WITH OXIA
+1FCC GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD GREEK PSILI AND VARIA
+1FCE GREEK PSILI AND OXIA
+1FCF GREEK PSILI AND PERISPOMENI
+1FD0 GREEK SMALL LETTER IOTA WITH VRACHY
+1FD1 GREEK SMALL LETTER IOTA WITH MACRON
+1FD2 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+1FD3 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6 GREEK SMALL LETTER IOTA WITH PERISPOMENI
+1FD7 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FD8 GREEK CAPITAL LETTER IOTA WITH VRACHY
+1FD9 GREEK CAPITAL LETTER IOTA WITH MACRON
+1FDA GREEK CAPITAL LETTER IOTA WITH VARIA
+1FDB GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD GREEK DASIA AND VARIA
+1FDE GREEK DASIA AND OXIA
+1FDF GREEK DASIA AND PERISPOMENI
+1FE0 GREEK SMALL LETTER UPSILON WITH VRACHY
+1FE1 GREEK SMALL LETTER UPSILON WITH MACRON
+1FE2 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+1FE3 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FE4 GREEK SMALL LETTER RHO WITH PSILI
+1FE5 GREEK SMALL LETTER RHO WITH DASIA
+1FE6 GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+1FE7 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FE8 GREEK CAPITAL LETTER UPSILON WITH VRACHY
+1FE9 GREEK CAPITAL LETTER UPSILON WITH MACRON
+1FEA GREEK CAPITAL LETTER UPSILON WITH VARIA
+1FEB GREEK CAPITAL LETTER UPSILON WITH OXIA
+1FEC GREEK CAPITAL LETTER RHO WITH DASIA
+1FED GREEK DIALYTIKA AND VARIA
+1FEE GREEK DIALYTIKA AND OXIA
+1FEF GREEK VARIA
+1FF2 GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+1FF3 GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+1FF4 GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6 GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+1FF7 GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FF8 GREEK CAPITAL LETTER OMICRON WITH VARIA
+1FF9 GREEK CAPITAL LETTER OMICRON WITH OXIA
+1FFA GREEK CAPITAL LETTER OMEGA WITH VARIA
+1FFB GREEK CAPITAL LETTER OMEGA WITH OXIA
+1FFC GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFD GREEK OXIA
+1FFE GREEK DASIA
+2000 EN QUAD
+2001 EM QUAD
+2002 EN SPACE
+2003 EM SPACE
+2004 THREE-PER-EM SPACE
+2005 FOUR-PER-EM SPACE
+2006 SIX-PER-EM SPACE
+2007 FIGURE SPACE
+2008 PUNCTUATION SPACE
+2009 THIN SPACE
+200A HAIR SPACE
+200B ZERO WIDTH SPACE
+200C ZERO WIDTH NON-JOINER
+200D ZERO WIDTH JOINER
+200E LEFT-TO-RIGHT MARK
+200F RIGHT-TO-LEFT MARK
+2010 HYPHEN
+2011 NON-BREAKING HYPHEN
+2012 FIGURE DASH
+2013 EN DASH
+2014 EM DASH
+2015 HORIZONTAL BAR
+2016 DOUBLE VERTICAL LINE
+2017 DOUBLE LOW LINE
+2018 LEFT SINGLE QUOTATION MARK
+2019 RIGHT SINGLE QUOTATION MARK
+201A SINGLE LOW-9 QUOTATION MARK
+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK
+201C LEFT DOUBLE QUOTATION MARK
+201D RIGHT DOUBLE QUOTATION MARK
+201E DOUBLE LOW-9 QUOTATION MARK
+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2020 DAGGER
+2021 DOUBLE DAGGER
+2022 BULLET
+2023 TRIANGULAR BULLET
+2024 ONE DOT LEADER
+2025 TWO DOT LEADER
+2026 HORIZONTAL ELLIPSIS
+2027 HYPHENATION POINT
+2028 LINE SEPARATOR
+2029 PARAGRAPH SEPARATOR
+202A LEFT-TO-RIGHT EMBEDDING
+202B RIGHT-TO-LEFT EMBEDDING
+202C POP DIRECTIONAL FORMATTING
+202D LEFT-TO-RIGHT OVERRIDE
+202E RIGHT-TO-LEFT OVERRIDE
+202F NARROW NO-BREAK SPACE
+2030 PER MILLE SIGN
+2031 PER TEN THOUSAND SIGN
+2032 PRIME
+2033 DOUBLE PRIME
+2034 TRIPLE PRIME
+2035 REVERSED PRIME
+2036 REVERSED DOUBLE PRIME
+2037 REVERSED TRIPLE PRIME
+2038 CARET
+2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+203B REFERENCE MARK
+203C DOUBLE EXCLAMATION MARK
+203D INTERROBANG
+203E OVERLINE
+203F UNDERTIE
+2040 CHARACTER TIE
+2041 CARET INSERTION POINT
+2042 ASTERISM
+2043 HYPHEN BULLET
+2044 FRACTION SLASH
+2045 LEFT SQUARE BRACKET WITH QUILL
+2046 RIGHT SQUARE BRACKET WITH QUILL
+2047 DOUBLE QUESTION MARK
+2048 QUESTION EXCLAMATION MARK
+2049 EXCLAMATION QUESTION MARK
+204A TIRONIAN SIGN ET
+204B REVERSED PILCROW SIGN
+204C BLACK LEFTWARDS BULLET
+204D BLACK RIGHTWARDS BULLET
+204E LOW ASTERISK
+204F REVERSED SEMICOLON
+2050 CLOSE UP
+2051 TWO ASTERISKS ALIGNED VERTICALLY
+2052 COMMERCIAL MINUS SIGN
+2057 QUADRUPLE PRIME
+205F MEDIUM MATHEMATICAL SPACE
+2060 WORD JOINER
+2061 FUNCTION APPLICATION
+2062 INVISIBLE TIMES
+2063 INVISIBLE SEPARATOR
+206A INHIBIT SYMMETRIC SWAPPING
+206B ACTIVATE SYMMETRIC SWAPPING
+206C INHIBIT ARABIC FORM SHAPING
+206D ACTIVATE ARABIC FORM SHAPING
+206E NATIONAL DIGIT SHAPES
+206F NOMINAL DIGIT SHAPES
+2070 SUPERSCRIPT ZERO
+2071 SUPERSCRIPT LATIN SMALL LETTER I
+2074 SUPERSCRIPT FOUR
+2075 SUPERSCRIPT FIVE
+2076 SUPERSCRIPT SIX
+2077 SUPERSCRIPT SEVEN
+2078 SUPERSCRIPT EIGHT
+2079 SUPERSCRIPT NINE
+207A SUPERSCRIPT PLUS SIGN
+207B SUPERSCRIPT MINUS
+207C SUPERSCRIPT EQUALS SIGN
+207D SUPERSCRIPT LEFT PARENTHESIS
+207E SUPERSCRIPT RIGHT PARENTHESIS
+207F SUPERSCRIPT LATIN SMALL LETTER N
+2080 SUBSCRIPT ZERO
+2081 SUBSCRIPT ONE
+2082 SUBSCRIPT TWO
+2083 SUBSCRIPT THREE
+2084 SUBSCRIPT FOUR
+2085 SUBSCRIPT FIVE
+2086 SUBSCRIPT SIX
+2087 SUBSCRIPT SEVEN
+2088 SUBSCRIPT EIGHT
+2089 SUBSCRIPT NINE
+208A SUBSCRIPT PLUS SIGN
+208B SUBSCRIPT MINUS
+208C SUBSCRIPT EQUALS SIGN
+208D SUBSCRIPT LEFT PARENTHESIS
+208E SUBSCRIPT RIGHT PARENTHESIS
+20A0 EURO-CURRENCY SIGN
+20A1 COLON SIGN
+20A2 CRUZEIRO SIGN
+20A3 FRENCH FRANC SIGN
+20A4 LIRA SIGN
+20A5 MILL SIGN
+20A6 NAIRA SIGN
+20A7 PESETA SIGN
+20A8 RUPEE SIGN
+20A9 WON SIGN
+20AA NEW SHEQEL SIGN
+20AB DONG SIGN
+20AC EURO SIGN
+20AD KIP SIGN
+20AE TUGRIK SIGN
+20AF DRACHMA SIGN
+20B0 GERMAN PENNY SIGN
+20B1 PESO SIGN
+20D0 COMBINING LEFT HARPOON ABOVE
+20D1 COMBINING RIGHT HARPOON ABOVE
+20D2 COMBINING LONG VERTICAL LINE OVERLAY
+20D3 COMBINING SHORT VERTICAL LINE OVERLAY
+20D4 COMBINING ANTICLOCKWISE ARROW ABOVE
+20D5 COMBINING CLOCKWISE ARROW ABOVE
+20D6 COMBINING LEFT ARROW ABOVE
+20D7 COMBINING RIGHT ARROW ABOVE
+20D8 COMBINING RING OVERLAY
+20D9 COMBINING CLOCKWISE RING OVERLAY
+20DA COMBINING ANTICLOCKWISE RING OVERLAY
+20DB COMBINING THREE DOTS ABOVE
+20DC COMBINING FOUR DOTS ABOVE
+20DD COMBINING ENCLOSING CIRCLE
+20DE COMBINING ENCLOSING SQUARE
+20DF COMBINING ENCLOSING DIAMOND
+20E0 COMBINING ENCLOSING CIRCLE BACKSLASH
+20E1 COMBINING LEFT RIGHT ARROW ABOVE
+20E2 COMBINING ENCLOSING SCREEN
+20E3 COMBINING ENCLOSING KEYCAP
+20E4 COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+20E5 COMBINING REVERSE SOLIDUS OVERLAY
+20E6 COMBINING DOUBLE VERTICAL STROKE OVERLAY
+20E7 COMBINING ANNUITY SYMBOL
+20E8 COMBINING TRIPLE UNDERDOT
+20E9 COMBINING WIDE BRIDGE ABOVE
+20EA COMBINING LEFTWARDS ARROW OVERLAY
+2100 ACCOUNT OF
+2101 ADDRESSED TO THE SUBJECT
+2102 DOUBLE-STRUCK CAPITAL C
+2103 DEGREE CELSIUS
+2104 CENTRE LINE SYMBOL
+2105 CARE OF
+2106 CADA UNA
+2107 EULER CONSTANT
+2108 SCRUPLE
+2109 DEGREE FAHRENHEIT
+210A SCRIPT SMALL G
+210B SCRIPT CAPITAL H
+210C BLACK-LETTER CAPITAL H
+210D DOUBLE-STRUCK CAPITAL H
+210E PLANCK CONSTANT
+210F PLANCK CONSTANT OVER TWO PI
+2110 SCRIPT CAPITAL I
+2111 BLACK-LETTER CAPITAL I
+2112 SCRIPT CAPITAL L
+2113 SCRIPT SMALL L
+2114 L B BAR SYMBOL
+2115 DOUBLE-STRUCK CAPITAL N
+2116 NUMERO SIGN
+2117 SOUND RECORDING COPYRIGHT
+2118 SCRIPT CAPITAL P
+2119 DOUBLE-STRUCK CAPITAL P
+211A DOUBLE-STRUCK CAPITAL Q
+211B SCRIPT CAPITAL R
+211C BLACK-LETTER CAPITAL R
+211D DOUBLE-STRUCK CAPITAL R
+211E PRESCRIPTION TAKE
+211F RESPONSE
+2120 SERVICE MARK
+2121 TELEPHONE SIGN
+2122 TRADE MARK SIGN
+2123 VERSICLE
+2124 DOUBLE-STRUCK CAPITAL Z
+2125 OUNCE SIGN
+2126 OHM SIGN
+2127 INVERTED OHM SIGN
+2128 BLACK-LETTER CAPITAL Z
+2129 TURNED GREEK SMALL LETTER IOTA
+212A KELVIN SIGN
+212B ANGSTROM SIGN
+212C SCRIPT CAPITAL B
+212D BLACK-LETTER CAPITAL C
+212E ESTIMATED SYMBOL
+212F SCRIPT SMALL E
+2130 SCRIPT CAPITAL E
+2131 SCRIPT CAPITAL F
+2132 TURNED CAPITAL F
+2133 SCRIPT CAPITAL M
+2134 SCRIPT SMALL O
+2135 ALEF SYMBOL
+2136 BET SYMBOL
+2137 GIMEL SYMBOL
+2138 DALET SYMBOL
+2139 INFORMATION SOURCE
+213A ROTATED CAPITAL Q
+213D DOUBLE-STRUCK SMALL GAMMA
+213E DOUBLE-STRUCK CAPITAL GAMMA
+213F DOUBLE-STRUCK CAPITAL PI
+2140 DOUBLE-STRUCK N-ARY SUMMATION
+2141 TURNED SANS-SERIF CAPITAL G
+2142 TURNED SANS-SERIF CAPITAL L
+2143 REVERSED SANS-SERIF CAPITAL L
+2144 TURNED SANS-SERIF CAPITAL Y
+2145 DOUBLE-STRUCK ITALIC CAPITAL D
+2146 DOUBLE-STRUCK ITALIC SMALL D
+2147 DOUBLE-STRUCK ITALIC SMALL E
+2148 DOUBLE-STRUCK ITALIC SMALL I
+2149 DOUBLE-STRUCK ITALIC SMALL J
+214A PROPERTY LINE
+214B TURNED AMPERSAND
+2153 VULGAR FRACTION ONE THIRD
+2154 VULGAR FRACTION TWO THIRDS
+2155 VULGAR FRACTION ONE FIFTH
+2156 VULGAR FRACTION TWO FIFTHS
+2157 VULGAR FRACTION THREE FIFTHS
+2158 VULGAR FRACTION FOUR FIFTHS
+2159 VULGAR FRACTION ONE SIXTH
+215A VULGAR FRACTION FIVE SIXTHS
+215B VULGAR FRACTION ONE EIGHTH
+215C VULGAR FRACTION THREE EIGHTHS
+215D VULGAR FRACTION FIVE EIGHTHS
+215E VULGAR FRACTION SEVEN EIGHTHS
+215F FRACTION NUMERATOR ONE
+2160 ROMAN NUMERAL ONE
+2161 ROMAN NUMERAL TWO
+2162 ROMAN NUMERAL THREE
+2163 ROMAN NUMERAL FOUR
+2164 ROMAN NUMERAL FIVE
+2165 ROMAN NUMERAL SIX
+2166 ROMAN NUMERAL SEVEN
+2167 ROMAN NUMERAL EIGHT
+2168 ROMAN NUMERAL NINE
+2169 ROMAN NUMERAL TEN
+216A ROMAN NUMERAL ELEVEN
+216B ROMAN NUMERAL TWELVE
+216C ROMAN NUMERAL FIFTY
+216D ROMAN NUMERAL ONE HUNDRED
+216E ROMAN NUMERAL FIVE HUNDRED
+216F ROMAN NUMERAL ONE THOUSAND
+2170 SMALL ROMAN NUMERAL ONE
+2171 SMALL ROMAN NUMERAL TWO
+2172 SMALL ROMAN NUMERAL THREE
+2173 SMALL ROMAN NUMERAL FOUR
+2174 SMALL ROMAN NUMERAL FIVE
+2175 SMALL ROMAN NUMERAL SIX
+2176 SMALL ROMAN NUMERAL SEVEN
+2177 SMALL ROMAN NUMERAL EIGHT
+2178 SMALL ROMAN NUMERAL NINE
+2179 SMALL ROMAN NUMERAL TEN
+217A SMALL ROMAN NUMERAL ELEVEN
+217B SMALL ROMAN NUMERAL TWELVE
+217C SMALL ROMAN NUMERAL FIFTY
+217D SMALL ROMAN NUMERAL ONE HUNDRED
+217E SMALL ROMAN NUMERAL FIVE HUNDRED
+217F SMALL ROMAN NUMERAL ONE THOUSAND
+2180 ROMAN NUMERAL ONE THOUSAND C D
+2181 ROMAN NUMERAL FIVE THOUSAND
+2182 ROMAN NUMERAL TEN THOUSAND
+2183 ROMAN NUMERAL REVERSED ONE HUNDRED
+2190 LEFTWARDS ARROW
+2191 UPWARDS ARROW
+2192 RIGHTWARDS ARROW
+2193 DOWNWARDS ARROW
+2194 LEFT RIGHT ARROW
+2195 UP DOWN ARROW
+2196 NORTH WEST ARROW
+2197 NORTH EAST ARROW
+2198 SOUTH EAST ARROW
+2199 SOUTH WEST ARROW
+219A LEFTWARDS ARROW WITH STROKE
+219B RIGHTWARDS ARROW WITH STROKE
+219C LEFTWARDS WAVE ARROW
+219D RIGHTWARDS WAVE ARROW
+219E LEFTWARDS TWO HEADED ARROW
+219F UPWARDS TWO HEADED ARROW
+21A0 RIGHTWARDS TWO HEADED ARROW
+21A1 DOWNWARDS TWO HEADED ARROW
+21A2 LEFTWARDS ARROW WITH TAIL
+21A3 RIGHTWARDS ARROW WITH TAIL
+21A4 LEFTWARDS ARROW FROM BAR
+21A5 UPWARDS ARROW FROM BAR
+21A6 RIGHTWARDS ARROW FROM BAR
+21A7 DOWNWARDS ARROW FROM BAR
+21A8 UP DOWN ARROW WITH BASE
+21A9 LEFTWARDS ARROW WITH HOOK
+21AA RIGHTWARDS ARROW WITH HOOK
+21AB LEFTWARDS ARROW WITH LOOP
+21AC RIGHTWARDS ARROW WITH LOOP
+21AD LEFT RIGHT WAVE ARROW
+21AE LEFT RIGHT ARROW WITH STROKE
+21AF DOWNWARDS ZIGZAG ARROW
+21B0 UPWARDS ARROW WITH TIP LEFTWARDS
+21B1 UPWARDS ARROW WITH TIP RIGHTWARDS
+21B2 DOWNWARDS ARROW WITH TIP LEFTWARDS
+21B3 DOWNWARDS ARROW WITH TIP RIGHTWARDS
+21B4 RIGHTWARDS ARROW WITH CORNER DOWNWARDS
+21B5 DOWNWARDS ARROW WITH CORNER LEFTWARDS
+21B6 ANTICLOCKWISE TOP SEMICIRCLE ARROW
+21B7 CLOCKWISE TOP SEMICIRCLE ARROW
+21B8 NORTH WEST ARROW TO LONG BAR
+21B9 LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
+21BA ANTICLOCKWISE OPEN CIRCLE ARROW
+21BB CLOCKWISE OPEN CIRCLE ARROW
+21BC LEFTWARDS HARPOON WITH BARB UPWARDS
+21BD LEFTWARDS HARPOON WITH BARB DOWNWARDS
+21BE UPWARDS HARPOON WITH BARB RIGHTWARDS
+21BF UPWARDS HARPOON WITH BARB LEFTWARDS
+21C0 RIGHTWARDS HARPOON WITH BARB UPWARDS
+21C1 RIGHTWARDS HARPOON WITH BARB DOWNWARDS
+21C2 DOWNWARDS HARPOON WITH BARB RIGHTWARDS
+21C3 DOWNWARDS HARPOON WITH BARB LEFTWARDS
+21C4 RIGHTWARDS ARROW OVER LEFTWARDS ARROW
+21C5 UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
+21C6 LEFTWARDS ARROW OVER RIGHTWARDS ARROW
+21C7 LEFTWARDS PAIRED ARROWS
+21C8 UPWARDS PAIRED ARROWS
+21C9 RIGHTWARDS PAIRED ARROWS
+21CA DOWNWARDS PAIRED ARROWS
+21CB LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
+21CC RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
+21CD LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE LEFT RIGHT DOUBLE ARROW WITH STROKE
+21CF RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0 LEFTWARDS DOUBLE ARROW
+21D1 UPWARDS DOUBLE ARROW
+21D2 RIGHTWARDS DOUBLE ARROW
+21D3 DOWNWARDS DOUBLE ARROW
+21D4 LEFT RIGHT DOUBLE ARROW
+21D5 UP DOWN DOUBLE ARROW
+21D6 NORTH WEST DOUBLE ARROW
+21D7 NORTH EAST DOUBLE ARROW
+21D8 SOUTH EAST DOUBLE ARROW
+21D9 SOUTH WEST DOUBLE ARROW
+21DA LEFTWARDS TRIPLE ARROW
+21DB RIGHTWARDS TRIPLE ARROW
+21DC LEFTWARDS SQUIGGLE ARROW
+21DD RIGHTWARDS SQUIGGLE ARROW
+21DE UPWARDS ARROW WITH DOUBLE STROKE
+21DF DOWNWARDS ARROW WITH DOUBLE STROKE
+21E0 LEFTWARDS DASHED ARROW
+21E1 UPWARDS DASHED ARROW
+21E2 RIGHTWARDS DASHED ARROW
+21E3 DOWNWARDS DASHED ARROW
+21E4 LEFTWARDS ARROW TO BAR
+21E5 RIGHTWARDS ARROW TO BAR
+21E6 LEFTWARDS WHITE ARROW
+21E7 UPWARDS WHITE ARROW
+21E8 RIGHTWARDS WHITE ARROW
+21E9 DOWNWARDS WHITE ARROW
+21EA UPWARDS WHITE ARROW FROM BAR
+21EB UPWARDS WHITE ARROW ON PEDESTAL
+21EC UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR
+21ED UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR
+21EE UPWARDS WHITE DOUBLE ARROW
+21EF UPWARDS WHITE DOUBLE ARROW ON PEDESTAL
+21F0 RIGHTWARDS WHITE ARROW FROM WALL
+21F1 NORTH WEST ARROW TO CORNER
+21F2 SOUTH EAST ARROW TO CORNER
+21F3 UP DOWN WHITE ARROW
+21F4 RIGHT ARROW WITH SMALL CIRCLE
+21F5 DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW
+21F6 THREE RIGHTWARDS ARROWS
+21F7 LEFTWARDS ARROW WITH VERTICAL STROKE
+21F8 RIGHTWARDS ARROW WITH VERTICAL STROKE
+21F9 LEFT RIGHT ARROW WITH VERTICAL STROKE
+21FA LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+21FB RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+21FC LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE
+21FD LEFTWARDS OPEN-HEADED ARROW
+21FE RIGHTWARDS OPEN-HEADED ARROW
+21FF LEFT RIGHT OPEN-HEADED ARROW
+2200 FOR ALL
+2201 COMPLEMENT
+2202 PARTIAL DIFFERENTIAL
+2203 THERE EXISTS
+2204 THERE DOES NOT EXIST
+2205 EMPTY SET
+2206 INCREMENT
+2207 NABLA
+2208 ELEMENT OF
+2209 NOT AN ELEMENT OF
+220A SMALL ELEMENT OF
+220B CONTAINS AS MEMBER
+220C DOES NOT CONTAIN AS MEMBER
+220D SMALL CONTAINS AS MEMBER
+220E END OF PROOF
+220F N-ARY PRODUCT
+2210 N-ARY COPRODUCT
+2211 N-ARY SUMMATION
+2212 MINUS SIGN
+2213 MINUS-OR-PLUS SIGN
+2214 DOT PLUS
+2215 DIVISION SLASH
+2216 SET MINUS
+2217 ASTERISK OPERATOR
+2218 RING OPERATOR
+2219 BULLET OPERATOR
+221A SQUARE ROOT
+221B CUBE ROOT
+221C FOURTH ROOT
+221D PROPORTIONAL TO
+221E INFINITY
+221F RIGHT ANGLE
+2220 ANGLE
+2221 MEASURED ANGLE
+2222 SPHERICAL ANGLE
+2223 DIVIDES
+2224 DOES NOT DIVIDE
+2225 PARALLEL TO
+2226 NOT PARALLEL TO
+2227 LOGICAL AND
+2228 LOGICAL OR
+2229 INTERSECTION
+222A UNION
+222B INTEGRAL
+222C DOUBLE INTEGRAL
+222D TRIPLE INTEGRAL
+222E CONTOUR INTEGRAL
+222F SURFACE INTEGRAL
+2230 VOLUME INTEGRAL
+2231 CLOCKWISE INTEGRAL
+2232 CLOCKWISE CONTOUR INTEGRAL
+2233 ANTICLOCKWISE CONTOUR INTEGRAL
+2234 THEREFORE
+2235 BECAUSE
+2236 RATIO
+2237 PROPORTION
+2238 DOT MINUS
+2239 EXCESS
+223A GEOMETRIC PROPORTION
+223B HOMOTHETIC
+223C TILDE OPERATOR
+223D REVERSED TILDE
+223E INVERTED LAZY S
+223F SINE WAVE
+2240 WREATH PRODUCT
+2241 NOT TILDE
+2242 MINUS TILDE
+2243 ASYMPTOTICALLY EQUAL TO
+2244 NOT ASYMPTOTICALLY EQUAL TO
+2245 APPROXIMATELY EQUAL TO
+2246 APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
+2247 NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+2248 ALMOST EQUAL TO
+2249 NOT ALMOST EQUAL TO
+224A ALMOST EQUAL OR EQUAL TO
+224B TRIPLE TILDE
+224C ALL EQUAL TO
+224D EQUIVALENT TO
+224E GEOMETRICALLY EQUIVALENT TO
+224F DIFFERENCE BETWEEN
+2250 APPROACHES THE LIMIT
+2251 GEOMETRICALLY EQUAL TO
+2252 APPROXIMATELY EQUAL TO OR THE IMAGE OF
+2253 IMAGE OF OR APPROXIMATELY EQUAL TO
+2254 COLON EQUALS
+2255 EQUALS COLON
+2256 RING IN EQUAL TO
+2257 RING EQUAL TO
+2258 CORRESPONDS TO
+2259 ESTIMATES
+225A EQUIANGULAR TO
+225B STAR EQUALS
+225C DELTA EQUAL TO
+225D EQUAL TO BY DEFINITION
+225E MEASURED BY
+225F QUESTIONED EQUAL TO
+2260 NOT EQUAL TO
+2261 IDENTICAL TO
+2262 NOT IDENTICAL TO
+2263 STRICTLY EQUIVALENT TO
+2264 LESS-THAN OR EQUAL TO
+2265 GREATER-THAN OR EQUAL TO
+2266 LESS-THAN OVER EQUAL TO
+2267 GREATER-THAN OVER EQUAL TO
+2268 LESS-THAN BUT NOT EQUAL TO
+2269 GREATER-THAN BUT NOT EQUAL TO
+226A MUCH LESS-THAN
+226B MUCH GREATER-THAN
+226C BETWEEN
+226D NOT EQUIVALENT TO
+226E NOT LESS-THAN
+226F NOT GREATER-THAN
+2270 NEITHER LESS-THAN NOR EQUAL TO
+2271 NEITHER GREATER-THAN NOR EQUAL TO
+2272 LESS-THAN OR EQUIVALENT TO
+2273 GREATER-THAN OR EQUIVALENT TO
+2274 NEITHER LESS-THAN NOR EQUIVALENT TO
+2275 NEITHER GREATER-THAN NOR EQUIVALENT TO
+2276 LESS-THAN OR GREATER-THAN
+2277 GREATER-THAN OR LESS-THAN
+2278 NEITHER LESS-THAN NOR GREATER-THAN
+2279 NEITHER GREATER-THAN NOR LESS-THAN
+227A PRECEDES
+227B SUCCEEDS
+227C PRECEDES OR EQUAL TO
+227D SUCCEEDS OR EQUAL TO
+227E PRECEDES OR EQUIVALENT TO
+227F SUCCEEDS OR EQUIVALENT TO
+2280 DOES NOT PRECEDE
+2281 DOES NOT SUCCEED
+2282 SUBSET OF
+2283 SUPERSET OF
+2284 NOT A SUBSET OF
+2285 NOT A SUPERSET OF
+2286 SUBSET OF OR EQUAL TO
+2287 SUPERSET OF OR EQUAL TO
+2288 NEITHER A SUBSET OF NOR EQUAL TO
+2289 NEITHER A SUPERSET OF NOR EQUAL TO
+228A SUBSET OF WITH NOT EQUAL TO
+228B SUPERSET OF WITH NOT EQUAL TO
+228C MULTISET
+228D MULTISET MULTIPLICATION
+228E MULTISET UNION
+228F SQUARE IMAGE OF
+2290 SQUARE ORIGINAL OF
+2291 SQUARE IMAGE OF OR EQUAL TO
+2292 SQUARE ORIGINAL OF OR EQUAL TO
+2293 SQUARE CAP
+2294 SQUARE CUP
+2295 CIRCLED PLUS
+2296 CIRCLED MINUS
+2297 CIRCLED TIMES
+2298 CIRCLED DIVISION SLASH
+2299 CIRCLED DOT OPERATOR
+229A CIRCLED RING OPERATOR
+229B CIRCLED ASTERISK OPERATOR
+229C CIRCLED EQUALS
+229D CIRCLED DASH
+229E SQUARED PLUS
+229F SQUARED MINUS
+22A0 SQUARED TIMES
+22A1 SQUARED DOT OPERATOR
+22A2 RIGHT TACK
+22A3 LEFT TACK
+22A4 DOWN TACK
+22A5 UP TACK
+22A6 ASSERTION
+22A7 MODELS
+22A8 TRUE
+22A9 FORCES
+22AA TRIPLE VERTICAL BAR RIGHT TURNSTILE
+22AB DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22AC DOES NOT PROVE
+22AD NOT TRUE
+22AE DOES NOT FORCE
+22AF NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22B0 PRECEDES UNDER RELATION
+22B1 SUCCEEDS UNDER RELATION
+22B2 NORMAL SUBGROUP OF
+22B3 CONTAINS AS NORMAL SUBGROUP
+22B4 NORMAL SUBGROUP OF OR EQUAL TO
+22B5 CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
+22B6 ORIGINAL OF
+22B7 IMAGE OF
+22B8 MULTIMAP
+22B9 HERMITIAN CONJUGATE MATRIX
+22BA INTERCALATE
+22BB XOR
+22BC NAND
+22BD NOR
+22BE RIGHT ANGLE WITH ARC
+22BF RIGHT TRIANGLE
+22C0 N-ARY LOGICAL AND
+22C1 N-ARY LOGICAL OR
+22C2 N-ARY INTERSECTION
+22C3 N-ARY UNION
+22C4 DIAMOND OPERATOR
+22C5 DOT OPERATOR
+22C6 STAR OPERATOR
+22C7 DIVISION TIMES
+22C8 BOWTIE
+22C9 LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
+22CA RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
+22CB LEFT SEMIDIRECT PRODUCT
+22CC RIGHT SEMIDIRECT PRODUCT
+22CD REVERSED TILDE EQUALS
+22CE CURLY LOGICAL OR
+22CF CURLY LOGICAL AND
+22D0 DOUBLE SUBSET
+22D1 DOUBLE SUPERSET
+22D2 DOUBLE INTERSECTION
+22D3 DOUBLE UNION
+22D4 PITCHFORK
+22D5 EQUAL AND PARALLEL TO
+22D6 LESS-THAN WITH DOT
+22D7 GREATER-THAN WITH DOT
+22D8 VERY MUCH LESS-THAN
+22D9 VERY MUCH GREATER-THAN
+22DA LESS-THAN EQUAL TO OR GREATER-THAN
+22DB GREATER-THAN EQUAL TO OR LESS-THAN
+22DC EQUAL TO OR LESS-THAN
+22DD EQUAL TO OR GREATER-THAN
+22DE EQUAL TO OR PRECEDES
+22DF EQUAL TO OR SUCCEEDS
+22E0 DOES NOT PRECEDE OR EQUAL
+22E1 DOES NOT SUCCEED OR EQUAL
+22E2 NOT SQUARE IMAGE OF OR EQUAL TO
+22E3 NOT SQUARE ORIGINAL OF OR EQUAL TO
+22E4 SQUARE IMAGE OF OR NOT EQUAL TO
+22E5 SQUARE ORIGINAL OF OR NOT EQUAL TO
+22E6 LESS-THAN BUT NOT EQUIVALENT TO
+22E7 GREATER-THAN BUT NOT EQUIVALENT TO
+22E8 PRECEDES BUT NOT EQUIVALENT TO
+22E9 SUCCEEDS BUT NOT EQUIVALENT TO
+22EA NOT NORMAL SUBGROUP OF
+22EB DOES NOT CONTAIN AS NORMAL SUBGROUP
+22EC NOT NORMAL SUBGROUP OF OR EQUAL TO
+22ED DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
+22EE VERTICAL ELLIPSIS
+22EF MIDLINE HORIZONTAL ELLIPSIS
+22F0 UP RIGHT DIAGONAL ELLIPSIS
+22F1 DOWN RIGHT DIAGONAL ELLIPSIS
+22F2 ELEMENT OF WITH LONG HORIZONTAL STROKE
+22F3 ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22F4 SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22F5 ELEMENT OF WITH DOT ABOVE
+22F6 ELEMENT OF WITH OVERBAR
+22F7 SMALL ELEMENT OF WITH OVERBAR
+22F8 ELEMENT OF WITH UNDERBAR
+22F9 ELEMENT OF WITH TWO HORIZONTAL STROKES
+22FA CONTAINS WITH LONG HORIZONTAL STROKE
+22FB CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22FC SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22FD CONTAINS WITH OVERBAR
+22FE SMALL CONTAINS WITH OVERBAR
+22FF Z NOTATION BAG MEMBERSHIP
+2300 DIAMETER SIGN
+2301 ELECTRIC ARROW
+2302 HOUSE
+2303 UP ARROWHEAD
+2304 DOWN ARROWHEAD
+2305 PROJECTIVE
+2306 PERSPECTIVE
+2307 WAVY LINE
+2308 LEFT CEILING
+2309 RIGHT CEILING
+230A LEFT FLOOR
+230B RIGHT FLOOR
+230C BOTTOM RIGHT CROP
+230D BOTTOM LEFT CROP
+230E TOP RIGHT CROP
+230F TOP LEFT CROP
+2310 REVERSED NOT SIGN
+2311 SQUARE LOZENGE
+2312 ARC
+2313 SEGMENT
+2314 SECTOR
+2315 TELEPHONE RECORDER
+2316 POSITION INDICATOR
+2317 VIEWDATA SQUARE
+2318 PLACE OF INTEREST SIGN
+2319 TURNED NOT SIGN
+231A WATCH
+231B HOURGLASS
+231C TOP LEFT CORNER
+231D TOP RIGHT CORNER
+231E BOTTOM LEFT CORNER
+231F BOTTOM RIGHT CORNER
+2320 TOP HALF INTEGRAL
+2321 BOTTOM HALF INTEGRAL
+2322 FROWN
+2323 SMILE
+2324 UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS
+2325 OPTION KEY
+2326 ERASE TO THE RIGHT
+2327 X IN A RECTANGLE BOX
+2328 KEYBOARD
+2329 LEFT-POINTING ANGLE BRACKET
+232A RIGHT-POINTING ANGLE BRACKET
+232B ERASE TO THE LEFT
+232C BENZENE RING
+232D CYLINDRICITY
+232E ALL AROUND-PROFILE
+232F SYMMETRY
+2330 TOTAL RUNOUT
+2331 DIMENSION ORIGIN
+2332 CONICAL TAPER
+2333 SLOPE
+2334 COUNTERBORE
+2335 COUNTERSINK
+2336 APL FUNCTIONAL SYMBOL I-BEAM
+2337 APL FUNCTIONAL SYMBOL SQUISH QUAD
+2338 APL FUNCTIONAL SYMBOL QUAD EQUAL
+2339 APL FUNCTIONAL SYMBOL QUAD DIVIDE
+233A APL FUNCTIONAL SYMBOL QUAD DIAMOND
+233B APL FUNCTIONAL SYMBOL QUAD JOT
+233C APL FUNCTIONAL SYMBOL QUAD CIRCLE
+233D APL FUNCTIONAL SYMBOL CIRCLE STILE
+233E APL FUNCTIONAL SYMBOL CIRCLE JOT
+233F APL FUNCTIONAL SYMBOL SLASH BAR
+2340 APL FUNCTIONAL SYMBOL BACKSLASH BAR
+2341 APL FUNCTIONAL SYMBOL QUAD SLASH
+2342 APL FUNCTIONAL SYMBOL QUAD BACKSLASH
+2343 APL FUNCTIONAL SYMBOL QUAD LESS-THAN
+2344 APL FUNCTIONAL SYMBOL QUAD GREATER-THAN
+2345 APL FUNCTIONAL SYMBOL LEFTWARDS VANE
+2346 APL FUNCTIONAL SYMBOL RIGHTWARDS VANE
+2347 APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW
+2348 APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW
+2349 APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH
+234A APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR
+234B APL FUNCTIONAL SYMBOL DELTA STILE
+234C APL FUNCTIONAL SYMBOL QUAD DOWN CARET
+234D APL FUNCTIONAL SYMBOL QUAD DELTA
+234E APL FUNCTIONAL SYMBOL DOWN TACK JOT
+234F APL FUNCTIONAL SYMBOL UPWARDS VANE
+2350 APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW
+2351 APL FUNCTIONAL SYMBOL UP TACK OVERBAR
+2352 APL FUNCTIONAL SYMBOL DEL STILE
+2353 APL FUNCTIONAL SYMBOL QUAD UP CARET
+2354 APL FUNCTIONAL SYMBOL QUAD DEL
+2355 APL FUNCTIONAL SYMBOL UP TACK JOT
+2356 APL FUNCTIONAL SYMBOL DOWNWARDS VANE
+2357 APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW
+2358 APL FUNCTIONAL SYMBOL QUOTE UNDERBAR
+2359 APL FUNCTIONAL SYMBOL DELTA UNDERBAR
+235A APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR
+235B APL FUNCTIONAL SYMBOL JOT UNDERBAR
+235C APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR
+235D APL FUNCTIONAL SYMBOL UP SHOE JOT
+235E APL FUNCTIONAL SYMBOL QUOTE QUAD
+235F APL FUNCTIONAL SYMBOL CIRCLE STAR
+2360 APL FUNCTIONAL SYMBOL QUAD COLON
+2361 APL FUNCTIONAL SYMBOL UP TACK DIAERESIS
+2362 APL FUNCTIONAL SYMBOL DEL DIAERESIS
+2363 APL FUNCTIONAL SYMBOL STAR DIAERESIS
+2364 APL FUNCTIONAL SYMBOL JOT DIAERESIS
+2365 APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS
+2366 APL FUNCTIONAL SYMBOL DOWN SHOE STILE
+2367 APL FUNCTIONAL SYMBOL LEFT SHOE STILE
+2368 APL FUNCTIONAL SYMBOL TILDE DIAERESIS
+2369 APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS
+236A APL FUNCTIONAL SYMBOL COMMA BAR
+236B APL FUNCTIONAL SYMBOL DEL TILDE
+236C APL FUNCTIONAL SYMBOL ZILDE
+236D APL FUNCTIONAL SYMBOL STILE TILDE
+236E APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR
+236F APL FUNCTIONAL SYMBOL QUAD NOT EQUAL
+2370 APL FUNCTIONAL SYMBOL QUAD QUESTION
+2371 APL FUNCTIONAL SYMBOL DOWN CARET TILDE
+2372 APL FUNCTIONAL SYMBOL UP CARET TILDE
+2373 APL FUNCTIONAL SYMBOL IOTA
+2374 APL FUNCTIONAL SYMBOL RHO
+2375 APL FUNCTIONAL SYMBOL OMEGA
+2376 APL FUNCTIONAL SYMBOL ALPHA UNDERBAR
+2377 APL FUNCTIONAL SYMBOL EPSILON UNDERBAR
+2378 APL FUNCTIONAL SYMBOL IOTA UNDERBAR
+2379 APL FUNCTIONAL SYMBOL OMEGA UNDERBAR
+237A APL FUNCTIONAL SYMBOL ALPHA
+237B NOT CHECK MARK
+237C RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+237D SHOULDERED OPEN BOX
+237E BELL SYMBOL
+237F VERTICAL LINE WITH MIDDLE DOT
+2380 INSERTION SYMBOL
+2381 CONTINUOUS UNDERLINE SYMBOL
+2382 DISCONTINUOUS UNDERLINE SYMBOL
+2383 EMPHASIS SYMBOL
+2384 COMPOSITION SYMBOL
+2385 WHITE SQUARE WITH CENTRE VERTICAL LINE
+2386 ENTER SYMBOL
+2387 ALTERNATIVE KEY SYMBOL
+2388 HELM SYMBOL
+2389 CIRCLED HORIZONTAL BAR WITH NOTCH
+238A CIRCLED TRIANGLE DOWN
+238B BROKEN CIRCLE WITH NORTHWEST ARROW
+238C UNDO SYMBOL
+238D MONOSTABLE SYMBOL
+238E HYSTERESIS SYMBOL
+238F OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL
+2390 OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL
+2391 PASSIVE-PULL-DOWN-OUTPUT SYMBOL
+2392 PASSIVE-PULL-UP-OUTPUT SYMBOL
+2393 DIRECT CURRENT SYMBOL FORM TWO
+2394 SOFTWARE-FUNCTION SYMBOL
+2395 APL FUNCTIONAL SYMBOL QUAD
+2396 DECIMAL SEPARATOR KEY SYMBOL
+2397 PREVIOUS PAGE
+2398 NEXT PAGE
+2399 PRINT SCREEN SYMBOL
+239A CLEAR SCREEN SYMBOL
+239B LEFT PARENTHESIS UPPER HOOK
+239C LEFT PARENTHESIS EXTENSION
+239D LEFT PARENTHESIS LOWER HOOK
+239E RIGHT PARENTHESIS UPPER HOOK
+239F RIGHT PARENTHESIS EXTENSION
+23A0 RIGHT PARENTHESIS LOWER HOOK
+23A1 LEFT SQUARE BRACKET UPPER CORNER
+23A2 LEFT SQUARE BRACKET EXTENSION
+23A3 LEFT SQUARE BRACKET LOWER CORNER
+23A4 RIGHT SQUARE BRACKET UPPER CORNER
+23A5 RIGHT SQUARE BRACKET EXTENSION
+23A6 RIGHT SQUARE BRACKET LOWER CORNER
+23A7 LEFT CURLY BRACKET UPPER HOOK
+23A8 LEFT CURLY BRACKET MIDDLE PIECE
+23A9 LEFT CURLY BRACKET LOWER HOOK
+23AA CURLY BRACKET EXTENSION
+23AB RIGHT CURLY BRACKET UPPER HOOK
+23AC RIGHT CURLY BRACKET MIDDLE PIECE
+23AD RIGHT CURLY BRACKET LOWER HOOK
+23AE INTEGRAL EXTENSION
+23AF HORIZONTAL LINE EXTENSION
+23B0 UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION
+23B1 UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION
+23B2 SUMMATION TOP
+23B3 SUMMATION BOTTOM
+23B4 TOP SQUARE BRACKET
+23B5 BOTTOM SQUARE BRACKET
+23B6 BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET
+23B7 RADICAL SYMBOL BOTTOM
+23B8 LEFT VERTICAL BOX LINE
+23B9 RIGHT VERTICAL BOX LINE
+23BA HORIZONTAL SCAN LINE-1
+23BB HORIZONTAL SCAN LINE-3
+23BC HORIZONTAL SCAN LINE-7
+23BD HORIZONTAL SCAN LINE-9
+23BE DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT
+23BF DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT
+23C0 DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE
+23C1 DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE
+23C2 DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE
+23C3 DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE
+23C4 DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE
+23C5 DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE
+23C6 DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE
+23C7 DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE
+23C8 DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE
+23C9 DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL
+23CA DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL
+23CB DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT
+23CC DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT
+23CD SQUARE FOOT
+23CE RETURN SYMBOL
+2400 SYMBOL FOR NULL
+2401 SYMBOL FOR START OF HEADING
+2402 SYMBOL FOR START OF TEXT
+2403 SYMBOL FOR END OF TEXT
+2404 SYMBOL FOR END OF TRANSMISSION
+2405 SYMBOL FOR ENQUIRY
+2406 SYMBOL FOR ACKNOWLEDGE
+2407 SYMBOL FOR BELL
+2408 SYMBOL FOR BACKSPACE
+2409 SYMBOL FOR HORIZONTAL TABULATION
+240A SYMBOL FOR LINE FEED
+240B SYMBOL FOR VERTICAL TABULATION
+240C SYMBOL FOR FORM FEED
+240D SYMBOL FOR CARRIAGE RETURN
+240E SYMBOL FOR SHIFT OUT
+240F SYMBOL FOR SHIFT IN
+2410 SYMBOL FOR DATA LINK ESCAPE
+2411 SYMBOL FOR DEVICE CONTROL ONE
+2412 SYMBOL FOR DEVICE CONTROL TWO
+2413 SYMBOL FOR DEVICE CONTROL THREE
+2414 SYMBOL FOR DEVICE CONTROL FOUR
+2415 SYMBOL FOR NEGATIVE ACKNOWLEDGE
+2416 SYMBOL FOR SYNCHRONOUS IDLE
+2417 SYMBOL FOR END OF TRANSMISSION BLOCK
+2418 SYMBOL FOR CANCEL
+2419 SYMBOL FOR END OF MEDIUM
+241A SYMBOL FOR SUBSTITUTE
+241B SYMBOL FOR ESCAPE
+241C SYMBOL FOR FILE SEPARATOR
+241D SYMBOL FOR GROUP SEPARATOR
+241E SYMBOL FOR RECORD SEPARATOR
+241F SYMBOL FOR UNIT SEPARATOR
+2420 SYMBOL FOR SPACE
+2421 SYMBOL FOR DELETE
+2422 BLANK SYMBOL
+2423 OPEN BOX
+2424 SYMBOL FOR NEWLINE
+2425 SYMBOL FOR DELETE FORM TWO
+2426 SYMBOL FOR SUBSTITUTE FORM TWO
+2440 OCR HOOK
+2441 OCR CHAIR
+2442 OCR FORK
+2443 OCR INVERTED FORK
+2444 OCR BELT BUCKLE
+2445 OCR BOW TIE
+2446 OCR BRANCH BANK IDENTIFICATION
+2447 OCR AMOUNT OF CHECK
+2448 OCR DASH
+2449 OCR CUSTOMER ACCOUNT NUMBER
+244A OCR DOUBLE BACKSLASH
+2460 CIRCLED DIGIT ONE
+2461 CIRCLED DIGIT TWO
+2462 CIRCLED DIGIT THREE
+2463 CIRCLED DIGIT FOUR
+2464 CIRCLED DIGIT FIVE
+2465 CIRCLED DIGIT SIX
+2466 CIRCLED DIGIT SEVEN
+2467 CIRCLED DIGIT EIGHT
+2468 CIRCLED DIGIT NINE
+2469 CIRCLED NUMBER TEN
+246A CIRCLED NUMBER ELEVEN
+246B CIRCLED NUMBER TWELVE
+246C CIRCLED NUMBER THIRTEEN
+246D CIRCLED NUMBER FOURTEEN
+246E CIRCLED NUMBER FIFTEEN
+246F CIRCLED NUMBER SIXTEEN
+2470 CIRCLED NUMBER SEVENTEEN
+2471 CIRCLED NUMBER EIGHTEEN
+2472 CIRCLED NUMBER NINETEEN
+2473 CIRCLED NUMBER TWENTY
+2474 PARENTHESIZED DIGIT ONE
+2475 PARENTHESIZED DIGIT TWO
+2476 PARENTHESIZED DIGIT THREE
+2477 PARENTHESIZED DIGIT FOUR
+2478 PARENTHESIZED DIGIT FIVE
+2479 PARENTHESIZED DIGIT SIX
+247A PARENTHESIZED DIGIT SEVEN
+247B PARENTHESIZED DIGIT EIGHT
+247C PARENTHESIZED DIGIT NINE
+247D PARENTHESIZED NUMBER TEN
+247E PARENTHESIZED NUMBER ELEVEN
+247F PARENTHESIZED NUMBER TWELVE
+2480 PARENTHESIZED NUMBER THIRTEEN
+2481 PARENTHESIZED NUMBER FOURTEEN
+2482 PARENTHESIZED NUMBER FIFTEEN
+2483 PARENTHESIZED NUMBER SIXTEEN
+2484 PARENTHESIZED NUMBER SEVENTEEN
+2485 PARENTHESIZED NUMBER EIGHTEEN
+2486 PARENTHESIZED NUMBER NINETEEN
+2487 PARENTHESIZED NUMBER TWENTY
+2488 DIGIT ONE FULL STOP
+2489 DIGIT TWO FULL STOP
+248A DIGIT THREE FULL STOP
+248B DIGIT FOUR FULL STOP
+248C DIGIT FIVE FULL STOP
+248D DIGIT SIX FULL STOP
+248E DIGIT SEVEN FULL STOP
+248F DIGIT EIGHT FULL STOP
+2490 DIGIT NINE FULL STOP
+2491 NUMBER TEN FULL STOP
+2492 NUMBER ELEVEN FULL STOP
+2493 NUMBER TWELVE FULL STOP
+2494 NUMBER THIRTEEN FULL STOP
+2495 NUMBER FOURTEEN FULL STOP
+2496 NUMBER FIFTEEN FULL STOP
+2497 NUMBER SIXTEEN FULL STOP
+2498 NUMBER SEVENTEEN FULL STOP
+2499 NUMBER EIGHTEEN FULL STOP
+249A NUMBER NINETEEN FULL STOP
+249B NUMBER TWENTY FULL STOP
+249C PARENTHESIZED LATIN SMALL LETTER A
+249D PARENTHESIZED LATIN SMALL LETTER B
+249E PARENTHESIZED LATIN SMALL LETTER C
+249F PARENTHESIZED LATIN SMALL LETTER D
+24A0 PARENTHESIZED LATIN SMALL LETTER E
+24A1 PARENTHESIZED LATIN SMALL LETTER F
+24A2 PARENTHESIZED LATIN SMALL LETTER G
+24A3 PARENTHESIZED LATIN SMALL LETTER H
+24A4 PARENTHESIZED LATIN SMALL LETTER I
+24A5 PARENTHESIZED LATIN SMALL LETTER J
+24A6 PARENTHESIZED LATIN SMALL LETTER K
+24A7 PARENTHESIZED LATIN SMALL LETTER L
+24A8 PARENTHESIZED LATIN SMALL LETTER M
+24A9 PARENTHESIZED LATIN SMALL LETTER N
+24AA PARENTHESIZED LATIN SMALL LETTER O
+24AB PARENTHESIZED LATIN SMALL LETTER P
+24AC PARENTHESIZED LATIN SMALL LETTER Q
+24AD PARENTHESIZED LATIN SMALL LETTER R
+24AE PARENTHESIZED LATIN SMALL LETTER S
+24AF PARENTHESIZED LATIN SMALL LETTER T
+24B0 PARENTHESIZED LATIN SMALL LETTER U
+24B1 PARENTHESIZED LATIN SMALL LETTER V
+24B2 PARENTHESIZED LATIN SMALL LETTER W
+24B3 PARENTHESIZED LATIN SMALL LETTER X
+24B4 PARENTHESIZED LATIN SMALL LETTER Y
+24B5 PARENTHESIZED LATIN SMALL LETTER Z
+24B6 CIRCLED LATIN CAPITAL LETTER A
+24B7 CIRCLED LATIN CAPITAL LETTER B
+24B8 CIRCLED LATIN CAPITAL LETTER C
+24B9 CIRCLED LATIN CAPITAL LETTER D
+24BA CIRCLED LATIN CAPITAL LETTER E
+24BB CIRCLED LATIN CAPITAL LETTER F
+24BC CIRCLED LATIN CAPITAL LETTER G
+24BD CIRCLED LATIN CAPITAL LETTER H
+24BE CIRCLED LATIN CAPITAL LETTER I
+24BF CIRCLED LATIN CAPITAL LETTER J
+24C0 CIRCLED LATIN CAPITAL LETTER K
+24C1 CIRCLED LATIN CAPITAL LETTER L
+24C2 CIRCLED LATIN CAPITAL LETTER M
+24C3 CIRCLED LATIN CAPITAL LETTER N
+24C4 CIRCLED LATIN CAPITAL LETTER O
+24C5 CIRCLED LATIN CAPITAL LETTER P
+24C6 CIRCLED LATIN CAPITAL LETTER Q
+24C7 CIRCLED LATIN CAPITAL LETTER R
+24C8 CIRCLED LATIN CAPITAL LETTER S
+24C9 CIRCLED LATIN CAPITAL LETTER T
+24CA CIRCLED LATIN CAPITAL LETTER U
+24CB CIRCLED LATIN CAPITAL LETTER V
+24CC CIRCLED LATIN CAPITAL LETTER W
+24CD CIRCLED LATIN CAPITAL LETTER X
+24CE CIRCLED LATIN CAPITAL LETTER Y
+24CF CIRCLED LATIN CAPITAL LETTER Z
+24D0 CIRCLED LATIN SMALL LETTER A
+24D1 CIRCLED LATIN SMALL LETTER B
+24D2 CIRCLED LATIN SMALL LETTER C
+24D3 CIRCLED LATIN SMALL LETTER D
+24D4 CIRCLED LATIN SMALL LETTER E
+24D5 CIRCLED LATIN SMALL LETTER F
+24D6 CIRCLED LATIN SMALL LETTER G
+24D7 CIRCLED LATIN SMALL LETTER H
+24D8 CIRCLED LATIN SMALL LETTER I
+24D9 CIRCLED LATIN SMALL LETTER J
+24DA CIRCLED LATIN SMALL LETTER K
+24DB CIRCLED LATIN SMALL LETTER L
+24DC CIRCLED LATIN SMALL LETTER M
+24DD CIRCLED LATIN SMALL LETTER N
+24DE CIRCLED LATIN SMALL LETTER O
+24DF CIRCLED LATIN SMALL LETTER P
+24E0 CIRCLED LATIN SMALL LETTER Q
+24E1 CIRCLED LATIN SMALL LETTER R
+24E2 CIRCLED LATIN SMALL LETTER S
+24E3 CIRCLED LATIN SMALL LETTER T
+24E4 CIRCLED LATIN SMALL LETTER U
+24E5 CIRCLED LATIN SMALL LETTER V
+24E6 CIRCLED LATIN SMALL LETTER W
+24E7 CIRCLED LATIN SMALL LETTER X
+24E8 CIRCLED LATIN SMALL LETTER Y
+24E9 CIRCLED LATIN SMALL LETTER Z
+24EA CIRCLED DIGIT ZERO
+24EB NEGATIVE CIRCLED NUMBER ELEVEN
+24EC NEGATIVE CIRCLED NUMBER TWELVE
+24ED NEGATIVE CIRCLED NUMBER THIRTEEN
+24EE NEGATIVE CIRCLED NUMBER FOURTEEN
+24EF NEGATIVE CIRCLED NUMBER FIFTEEN
+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN
+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN
+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN
+24F3 NEGATIVE CIRCLED NUMBER NINETEEN
+24F4 NEGATIVE CIRCLED NUMBER TWENTY
+24F5 DOUBLE CIRCLED DIGIT ONE
+24F6 DOUBLE CIRCLED DIGIT TWO
+24F7 DOUBLE CIRCLED DIGIT THREE
+24F8 DOUBLE CIRCLED DIGIT FOUR
+24F9 DOUBLE CIRCLED DIGIT FIVE
+24FA DOUBLE CIRCLED DIGIT SIX
+24FB DOUBLE CIRCLED DIGIT SEVEN
+24FC DOUBLE CIRCLED DIGIT EIGHT
+24FD DOUBLE CIRCLED DIGIT NINE
+24FE DOUBLE CIRCLED NUMBER TEN
+2500 BOX DRAWINGS LIGHT HORIZONTAL
+2501 BOX DRAWINGS HEAVY HORIZONTAL
+2502 BOX DRAWINGS LIGHT VERTICAL
+2503 BOX DRAWINGS HEAVY VERTICAL
+2504 BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
+2505 BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
+2506 BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
+2507 BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
+2508 BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
+2509 BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
+250A BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
+250B BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
+250C BOX DRAWINGS LIGHT DOWN AND RIGHT
+250D BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
+250E BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
+250F BOX DRAWINGS HEAVY DOWN AND RIGHT
+2510 BOX DRAWINGS LIGHT DOWN AND LEFT
+2511 BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
+2512 BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
+2513 BOX DRAWINGS HEAVY DOWN AND LEFT
+2514 BOX DRAWINGS LIGHT UP AND RIGHT
+2515 BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
+2516 BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
+2517 BOX DRAWINGS HEAVY UP AND RIGHT
+2518 BOX DRAWINGS LIGHT UP AND LEFT
+2519 BOX DRAWINGS UP LIGHT AND LEFT HEAVY
+251A BOX DRAWINGS UP HEAVY AND LEFT LIGHT
+251B BOX DRAWINGS HEAVY UP AND LEFT
+251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+251D BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+251E BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
+251F BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
+2520 BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+2521 BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
+2522 BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
+2523 BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT
+2525 BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+2526 BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
+2527 BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
+2528 BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+2529 BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
+252A BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
+252B BOX DRAWINGS HEAVY VERTICAL AND LEFT
+252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+252D BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
+252E BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
+252F BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+2530 BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+2531 BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
+2532 BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
+2533 BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL
+2535 BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
+2536 BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
+2537 BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+2538 BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+2539 BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
+253A BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
+253B BOX DRAWINGS HEAVY UP AND HORIZONTAL
+253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+253D BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
+253E BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
+253F BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+2540 BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
+2541 BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
+2542 BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+2543 BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
+2544 BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
+2545 BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
+2546 BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
+2547 BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
+2548 BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
+2549 BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
+254A BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
+254B BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+254C BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL
+254D BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL
+254E BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL
+254F BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
+2550 BOX DRAWINGS DOUBLE HORIZONTAL
+2551 BOX DRAWINGS DOUBLE VERTICAL
+2552 BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+2553 BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+2554 BOX DRAWINGS DOUBLE DOWN AND RIGHT
+2555 BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+2556 BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+2557 BOX DRAWINGS DOUBLE DOWN AND LEFT
+2558 BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+2559 BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+255A BOX DRAWINGS DOUBLE UP AND RIGHT
+255B BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+255C BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+255D BOX DRAWINGS DOUBLE UP AND LEFT
+255E BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+255F BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+2560 BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+2561 BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+2562 BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+2563 BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+2564 BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+2565 BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+2566 BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+2567 BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+2568 BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+2569 BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+256A BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+256B BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+256C BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+256D BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
+256E BOX DRAWINGS LIGHT ARC DOWN AND LEFT
+256F BOX DRAWINGS LIGHT ARC UP AND LEFT
+2570 BOX DRAWINGS LIGHT ARC UP AND RIGHT
+2571 BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
+2572 BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
+2573 BOX DRAWINGS LIGHT DIAGONAL CROSS
+2574 BOX DRAWINGS LIGHT LEFT
+2575 BOX DRAWINGS LIGHT UP
+2576 BOX DRAWINGS LIGHT RIGHT
+2577 BOX DRAWINGS LIGHT DOWN
+2578 BOX DRAWINGS HEAVY LEFT
+2579 BOX DRAWINGS HEAVY UP
+257A BOX DRAWINGS HEAVY RIGHT
+257B BOX DRAWINGS HEAVY DOWN
+257C BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT
+257D BOX DRAWINGS LIGHT UP AND HEAVY DOWN
+257E BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT
+257F BOX DRAWINGS HEAVY UP AND LIGHT DOWN
+2580 UPPER HALF BLOCK
+2581 LOWER ONE EIGHTH BLOCK
+2582 LOWER ONE QUARTER BLOCK
+2583 LOWER THREE EIGHTHS BLOCK
+2584 LOWER HALF BLOCK
+2585 LOWER FIVE EIGHTHS BLOCK
+2586 LOWER THREE QUARTERS BLOCK
+2587 LOWER SEVEN EIGHTHS BLOCK
+2588 FULL BLOCK
+2589 LEFT SEVEN EIGHTHS BLOCK
+258A LEFT THREE QUARTERS BLOCK
+258B LEFT FIVE EIGHTHS BLOCK
+258C LEFT HALF BLOCK
+258D LEFT THREE EIGHTHS BLOCK
+258E LEFT ONE QUARTER BLOCK
+258F LEFT ONE EIGHTH BLOCK
+2590 RIGHT HALF BLOCK
+2591 LIGHT SHADE
+2592 MEDIUM SHADE
+2593 DARK SHADE
+2594 UPPER ONE EIGHTH BLOCK
+2595 RIGHT ONE EIGHTH BLOCK
+2596 QUADRANT LOWER LEFT
+2597 QUADRANT LOWER RIGHT
+2598 QUADRANT UPPER LEFT
+2599 QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT
+259A QUADRANT UPPER LEFT AND LOWER RIGHT
+259B QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT
+259C QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT
+259D QUADRANT UPPER RIGHT
+259E QUADRANT UPPER RIGHT AND LOWER LEFT
+259F QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
+25A0 BLACK SQUARE
+25A1 WHITE SQUARE
+25A2 WHITE SQUARE WITH ROUNDED CORNERS
+25A3 WHITE SQUARE CONTAINING BLACK SMALL SQUARE
+25A4 SQUARE WITH HORIZONTAL FILL
+25A5 SQUARE WITH VERTICAL FILL
+25A6 SQUARE WITH ORTHOGONAL CROSSHATCH FILL
+25A7 SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
+25A8 SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
+25A9 SQUARE WITH DIAGONAL CROSSHATCH FILL
+25AA BLACK SMALL SQUARE
+25AB WHITE SMALL SQUARE
+25AC BLACK RECTANGLE
+25AD WHITE RECTANGLE
+25AE BLACK VERTICAL RECTANGLE
+25AF WHITE VERTICAL RECTANGLE
+25B0 BLACK PARALLELOGRAM
+25B1 WHITE PARALLELOGRAM
+25B2 BLACK UP-POINTING TRIANGLE
+25B3 WHITE UP-POINTING TRIANGLE
+25B4 BLACK UP-POINTING SMALL TRIANGLE
+25B5 WHITE UP-POINTING SMALL TRIANGLE
+25B6 BLACK RIGHT-POINTING TRIANGLE
+25B7 WHITE RIGHT-POINTING TRIANGLE
+25B8 BLACK RIGHT-POINTING SMALL TRIANGLE
+25B9 WHITE RIGHT-POINTING SMALL TRIANGLE
+25BA BLACK RIGHT-POINTING POINTER
+25BB WHITE RIGHT-POINTING POINTER
+25BC BLACK DOWN-POINTING TRIANGLE
+25BD WHITE DOWN-POINTING TRIANGLE
+25BE BLACK DOWN-POINTING SMALL TRIANGLE
+25BF WHITE DOWN-POINTING SMALL TRIANGLE
+25C0 BLACK LEFT-POINTING TRIANGLE
+25C1 WHITE LEFT-POINTING TRIANGLE
+25C2 BLACK LEFT-POINTING SMALL TRIANGLE
+25C3 WHITE LEFT-POINTING SMALL TRIANGLE
+25C4 BLACK LEFT-POINTING POINTER
+25C5 WHITE LEFT-POINTING POINTER
+25C6 BLACK DIAMOND
+25C7 WHITE DIAMOND
+25C8 WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
+25C9 FISHEYE
+25CA LOZENGE
+25CB WHITE CIRCLE
+25CC DOTTED CIRCLE
+25CD CIRCLE WITH VERTICAL FILL
+25CE BULLSEYE
+25CF BLACK CIRCLE
+25D0 CIRCLE WITH LEFT HALF BLACK
+25D1 CIRCLE WITH RIGHT HALF BLACK
+25D2 CIRCLE WITH LOWER HALF BLACK
+25D3 CIRCLE WITH UPPER HALF BLACK
+25D4 CIRCLE WITH UPPER RIGHT QUADRANT BLACK
+25D5 CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK
+25D6 LEFT HALF BLACK CIRCLE
+25D7 RIGHT HALF BLACK CIRCLE
+25D8 INVERSE BULLET
+25D9 INVERSE WHITE CIRCLE
+25DA UPPER HALF INVERSE WHITE CIRCLE
+25DB LOWER HALF INVERSE WHITE CIRCLE
+25DC UPPER LEFT QUADRANT CIRCULAR ARC
+25DD UPPER RIGHT QUADRANT CIRCULAR ARC
+25DE LOWER RIGHT QUADRANT CIRCULAR ARC
+25DF LOWER LEFT QUADRANT CIRCULAR ARC
+25E0 UPPER HALF CIRCLE
+25E1 LOWER HALF CIRCLE
+25E2 BLACK LOWER RIGHT TRIANGLE
+25E3 BLACK LOWER LEFT TRIANGLE
+25E4 BLACK UPPER LEFT TRIANGLE
+25E5 BLACK UPPER RIGHT TRIANGLE
+25E6 WHITE BULLET
+25E7 SQUARE WITH LEFT HALF BLACK
+25E8 SQUARE WITH RIGHT HALF BLACK
+25E9 SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK
+25EA SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK
+25EB WHITE SQUARE WITH VERTICAL BISECTING LINE
+25EC WHITE UP-POINTING TRIANGLE WITH DOT
+25ED UP-POINTING TRIANGLE WITH LEFT HALF BLACK
+25EE UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
+25EF LARGE CIRCLE
+25F0 WHITE SQUARE WITH UPPER LEFT QUADRANT
+25F1 WHITE SQUARE WITH LOWER LEFT QUADRANT
+25F2 WHITE SQUARE WITH LOWER RIGHT QUADRANT
+25F3 WHITE SQUARE WITH UPPER RIGHT QUADRANT
+25F4 WHITE CIRCLE WITH UPPER LEFT QUADRANT
+25F5 WHITE CIRCLE WITH LOWER LEFT QUADRANT
+25F6 WHITE CIRCLE WITH LOWER RIGHT QUADRANT
+25F7 WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+25F8 UPPER LEFT TRIANGLE
+25F9 UPPER RIGHT TRIANGLE
+25FA LOWER LEFT TRIANGLE
+25FB WHITE MEDIUM SQUARE
+25FC BLACK MEDIUM SQUARE
+25FD WHITE MEDIUM SMALL SQUARE
+25FE BLACK MEDIUM SMALL SQUARE
+25FF LOWER RIGHT TRIANGLE
+2600 BLACK SUN WITH RAYS
+2601 CLOUD
+2602 UMBRELLA
+2603 SNOWMAN
+2604 COMET
+2605 BLACK STAR
+2606 WHITE STAR
+2607 LIGHTNING
+2608 THUNDERSTORM
+2609 SUN
+260A ASCENDING NODE
+260B DESCENDING NODE
+260C CONJUNCTION
+260D OPPOSITION
+260E BLACK TELEPHONE
+260F WHITE TELEPHONE
+2610 BALLOT BOX
+2611 BALLOT BOX WITH CHECK
+2612 BALLOT BOX WITH X
+2613 SALTIRE
+2616 WHITE SHOGI PIECE
+2617 BLACK SHOGI PIECE
+2619 REVERSED ROTATED FLORAL HEART BULLET
+261A BLACK LEFT POINTING INDEX
+261B BLACK RIGHT POINTING INDEX
+261C WHITE LEFT POINTING INDEX
+261D WHITE UP POINTING INDEX
+261E WHITE RIGHT POINTING INDEX
+261F WHITE DOWN POINTING INDEX
+2620 SKULL AND CROSSBONES
+2621 CAUTION SIGN
+2622 RADIOACTIVE SIGN
+2623 BIOHAZARD SIGN
+2624 CADUCEUS
+2625 ANKH
+2626 ORTHODOX CROSS
+2627 CHI RHO
+2628 CROSS OF LORRAINE
+2629 CROSS OF JERUSALEM
+262A STAR AND CRESCENT
+262B FARSI SYMBOL
+262C ADI SHAKTI
+262D HAMMER AND SICKLE
+262E PEACE SYMBOL
+262F YIN YANG
+2630 TRIGRAM FOR HEAVEN
+2631 TRIGRAM FOR LAKE
+2632 TRIGRAM FOR FIRE
+2633 TRIGRAM FOR THUNDER
+2634 TRIGRAM FOR WIND
+2635 TRIGRAM FOR WATER
+2636 TRIGRAM FOR MOUNTAIN
+2637 TRIGRAM FOR EARTH
+2638 WHEEL OF DHARMA
+2639 WHITE FROWNING FACE
+263A WHITE SMILING FACE
+263B BLACK SMILING FACE
+263C WHITE SUN WITH RAYS
+263D FIRST QUARTER MOON
+263E LAST QUARTER MOON
+263F MERCURY
+2640 FEMALE SIGN
+2641 EARTH
+2642 MALE SIGN
+2643 JUPITER
+2644 SATURN
+2645 URANUS
+2646 NEPTUNE
+2647 PLUTO
+2648 ARIES
+2649 TAURUS
+264A GEMINI
+264B CANCER
+264C LEO
+264D VIRGO
+264E LIBRA
+264F SCORPIUS
+2650 SAGITTARIUS
+2651 CAPRICORN
+2652 AQUARIUS
+2653 PISCES
+2654 WHITE CHESS KING
+2655 WHITE CHESS QUEEN
+2656 WHITE CHESS ROOK
+2657 WHITE CHESS BISHOP
+2658 WHITE CHESS KNIGHT
+2659 WHITE CHESS PAWN
+265A BLACK CHESS KING
+265B BLACK CHESS QUEEN
+265C BLACK CHESS ROOK
+265D BLACK CHESS BISHOP
+265E BLACK CHESS KNIGHT
+265F BLACK CHESS PAWN
+2660 BLACK SPADE SUIT
+2661 WHITE HEART SUIT
+2662 WHITE DIAMOND SUIT
+2663 BLACK CLUB SUIT
+2664 WHITE SPADE SUIT
+2665 BLACK HEART SUIT
+2666 BLACK DIAMOND SUIT
+2667 WHITE CLUB SUIT
+2668 HOT SPRINGS
+2669 QUARTER NOTE
+266A EIGHTH NOTE
+266B BEAMED EIGHTH NOTES
+266C BEAMED SIXTEENTH NOTES
+266D MUSIC FLAT SIGN
+266E MUSIC NATURAL SIGN
+266F MUSIC SHARP SIGN
+2670 WEST SYRIAC CROSS
+2671 EAST SYRIAC CROSS
+2672 UNIVERSAL RECYCLING SYMBOL
+2673 RECYCLING SYMBOL FOR TYPE-1 PLASTICS
+2674 RECYCLING SYMBOL FOR TYPE-2 PLASTICS
+2675 RECYCLING SYMBOL FOR TYPE-3 PLASTICS
+2676 RECYCLING SYMBOL FOR TYPE-4 PLASTICS
+2677 RECYCLING SYMBOL FOR TYPE-5 PLASTICS
+2678 RECYCLING SYMBOL FOR TYPE-6 PLASTICS
+2679 RECYCLING SYMBOL FOR TYPE-7 PLASTICS
+267A RECYCLING SYMBOL FOR GENERIC MATERIALS
+267B BLACK UNIVERSAL RECYCLING SYMBOL
+267C RECYCLED PAPER SYMBOL
+267D PARTIALLY-RECYCLED PAPER SYMBOL
+2680 DIE FACE-1
+2681 DIE FACE-2
+2682 DIE FACE-3
+2683 DIE FACE-4
+2684 DIE FACE-5
+2685 DIE FACE-6
+2686 WHITE CIRCLE WITH DOT RIGHT
+2687 WHITE CIRCLE WITH TWO DOTS
+2688 BLACK CIRCLE WITH WHITE DOT RIGHT
+2689 BLACK CIRCLE WITH TWO WHITE DOTS
+2701 UPPER BLADE SCISSORS
+2702 BLACK SCISSORS
+2703 LOWER BLADE SCISSORS
+2704 WHITE SCISSORS
+2706 TELEPHONE LOCATION SIGN
+2707 TAPE DRIVE
+2708 AIRPLANE
+2709 ENVELOPE
+270C VICTORY HAND
+270D WRITING HAND
+270E LOWER RIGHT PENCIL
+270F PENCIL
+2710 UPPER RIGHT PENCIL
+2711 WHITE NIB
+2712 BLACK NIB
+2713 CHECK MARK
+2714 HEAVY CHECK MARK
+2715 MULTIPLICATION X
+2716 HEAVY MULTIPLICATION X
+2717 BALLOT X
+2718 HEAVY BALLOT X
+2719 OUTLINED GREEK CROSS
+271A HEAVY GREEK CROSS
+271B OPEN CENTRE CROSS
+271C HEAVY OPEN CENTRE CROSS
+271D LATIN CROSS
+271E SHADOWED WHITE LATIN CROSS
+271F OUTLINED LATIN CROSS
+2720 MALTESE CROSS
+2721 STAR OF DAVID
+2722 FOUR TEARDROP-SPOKED ASTERISK
+2723 FOUR BALLOON-SPOKED ASTERISK
+2724 HEAVY FOUR BALLOON-SPOKED ASTERISK
+2725 FOUR CLUB-SPOKED ASTERISK
+2726 BLACK FOUR POINTED STAR
+2727 WHITE FOUR POINTED STAR
+2729 STRESS OUTLINED WHITE STAR
+272A CIRCLED WHITE STAR
+272B OPEN CENTRE BLACK STAR
+272C BLACK CENTRE WHITE STAR
+272D OUTLINED BLACK STAR
+272E HEAVY OUTLINED BLACK STAR
+272F PINWHEEL STAR
+2730 SHADOWED WHITE STAR
+2731 HEAVY ASTERISK
+2732 OPEN CENTRE ASTERISK
+2733 EIGHT SPOKED ASTERISK
+2734 EIGHT POINTED BLACK STAR
+2735 EIGHT POINTED PINWHEEL STAR
+2736 SIX POINTED BLACK STAR
+2737 EIGHT POINTED RECTILINEAR BLACK STAR
+2738 HEAVY EIGHT POINTED RECTILINEAR BLACK STAR
+2739 TWELVE POINTED BLACK STAR
+273A SIXTEEN POINTED ASTERISK
+273B TEARDROP-SPOKED ASTERISK
+273C OPEN CENTRE TEARDROP-SPOKED ASTERISK
+273D HEAVY TEARDROP-SPOKED ASTERISK
+273E SIX PETALLED BLACK AND WHITE FLORETTE
+273F BLACK FLORETTE
+2740 WHITE FLORETTE
+2741 EIGHT PETALLED OUTLINED BLACK FLORETTE
+2742 CIRCLED OPEN CENTRE EIGHT POINTED STAR
+2743 HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK
+2744 SNOWFLAKE
+2745 TIGHT TRIFOLIATE SNOWFLAKE
+2746 HEAVY CHEVRON SNOWFLAKE
+2747 SPARKLE
+2748 HEAVY SPARKLE
+2749 BALLOON-SPOKED ASTERISK
+274A EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274B HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274D SHADOWED WHITE CIRCLE
+274F LOWER RIGHT DROP-SHADOWED WHITE SQUARE
+2750 UPPER RIGHT DROP-SHADOWED WHITE SQUARE
+2751 LOWER RIGHT SHADOWED WHITE SQUARE
+2752 UPPER RIGHT SHADOWED WHITE SQUARE
+2756 BLACK DIAMOND MINUS WHITE X
+2758 LIGHT VERTICAL BAR
+2759 MEDIUM VERTICAL BAR
+275A HEAVY VERTICAL BAR
+275B HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT
+275C HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT
+275D HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
+275E HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
+2761 CURVED STEM PARAGRAPH SIGN ORNAMENT
+2762 HEAVY EXCLAMATION MARK ORNAMENT
+2763 HEAVY HEART EXCLAMATION MARK ORNAMENT
+2764 HEAVY BLACK HEART
+2765 ROTATED HEAVY BLACK HEART BULLET
+2766 FLORAL HEART
+2767 ROTATED FLORAL HEART BULLET
+2768 MEDIUM LEFT PARENTHESIS ORNAMENT
+2769 MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770 HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771 HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772 LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+2773 LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+2774 MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775 MEDIUM RIGHT CURLY BRACKET ORNAMENT
+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE
+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO
+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE
+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR
+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE
+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX
+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN
+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT
+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE
+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN
+2780 DINGBAT CIRCLED SANS-SERIF DIGIT ONE
+2781 DINGBAT CIRCLED SANS-SERIF DIGIT TWO
+2782 DINGBAT CIRCLED SANS-SERIF DIGIT THREE
+2783 DINGBAT CIRCLED SANS-SERIF DIGIT FOUR
+2784 DINGBAT CIRCLED SANS-SERIF DIGIT FIVE
+2785 DINGBAT CIRCLED SANS-SERIF DIGIT SIX
+2786 DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN
+2787 DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT
+2788 DINGBAT CIRCLED SANS-SERIF DIGIT NINE
+2789 DINGBAT CIRCLED SANS-SERIF NUMBER TEN
+278A DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE
+278B DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO
+278C DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE
+278D DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR
+278E DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE
+278F DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX
+2790 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN
+2791 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT
+2792 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE
+2793 DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+2794 HEAVY WIDE-HEADED RIGHTWARDS ARROW
+2798 HEAVY SOUTH EAST ARROW
+2799 HEAVY RIGHTWARDS ARROW
+279A HEAVY NORTH EAST ARROW
+279B DRAFTING POINT RIGHTWARDS ARROW
+279C HEAVY ROUND-TIPPED RIGHTWARDS ARROW
+279D TRIANGLE-HEADED RIGHTWARDS ARROW
+279E HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW
+279F DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
+27A0 HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
+27A1 BLACK RIGHTWARDS ARROW
+27A2 THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD
+27A3 THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD
+27A4 BLACK RIGHTWARDS ARROWHEAD
+27A5 HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
+27A6 HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
+27A7 SQUAT BLACK RIGHTWARDS ARROW
+27A8 HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW
+27A9 RIGHT-SHADED WHITE RIGHTWARDS ARROW
+27AA LEFT-SHADED WHITE RIGHTWARDS ARROW
+27AB BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW
+27AC FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW
+27AD HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27AE HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27AF NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B1 NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B2 CIRCLED HEAVY WHITE RIGHTWARDS ARROW
+27B3 WHITE-FEATHERED RIGHTWARDS ARROW
+27B4 BLACK-FEATHERED SOUTH EAST ARROW
+27B5 BLACK-FEATHERED RIGHTWARDS ARROW
+27B6 BLACK-FEATHERED NORTH EAST ARROW
+27B7 HEAVY BLACK-FEATHERED SOUTH EAST ARROW
+27B8 HEAVY BLACK-FEATHERED RIGHTWARDS ARROW
+27B9 HEAVY BLACK-FEATHERED NORTH EAST ARROW
+27BA TEARDROP-BARBED RIGHTWARDS ARROW
+27BB HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW
+27BC WEDGE-TAILED RIGHTWARDS ARROW
+27BD HEAVY WEDGE-TAILED RIGHTWARDS ARROW
+27BE OPEN-OUTLINED RIGHTWARDS ARROW
+27D0 WHITE DIAMOND WITH CENTRED DOT
+27D1 AND WITH DOT
+27D2 ELEMENT OF OPENING UPWARDS
+27D3 LOWER RIGHT CORNER WITH DOT
+27D4 UPPER LEFT CORNER WITH DOT
+27D5 LEFT OUTER JOIN
+27D6 RIGHT OUTER JOIN
+27D7 FULL OUTER JOIN
+27D8 LARGE UP TACK
+27D9 LARGE DOWN TACK
+27DA LEFT AND RIGHT DOUBLE TURNSTILE
+27DB LEFT AND RIGHT TACK
+27DC LEFT MULTIMAP
+27DD LONG RIGHT TACK
+27DE LONG LEFT TACK
+27DF UP TACK WITH CIRCLE ABOVE
+27E0 LOZENGE DIVIDED BY HORIZONTAL RULE
+27E1 WHITE CONCAVE-SIDED DIAMOND
+27E2 WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK
+27E3 WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK
+27E4 WHITE SQUARE WITH LEFTWARDS TICK
+27E5 WHITE SQUARE WITH RIGHTWARDS TICK
+27E6 MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7 MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8 MATHEMATICAL LEFT ANGLE BRACKET
+27E9 MATHEMATICAL RIGHT ANGLE BRACKET
+27EA MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27F0 UPWARDS QUADRUPLE ARROW
+27F1 DOWNWARDS QUADRUPLE ARROW
+27F2 ANTICLOCKWISE GAPPED CIRCLE ARROW
+27F3 CLOCKWISE GAPPED CIRCLE ARROW
+27F4 RIGHT ARROW WITH CIRCLED PLUS
+27F5 LONG LEFTWARDS ARROW
+27F6 LONG RIGHTWARDS ARROW
+27F7 LONG LEFT RIGHT ARROW
+27F8 LONG LEFTWARDS DOUBLE ARROW
+27F9 LONG RIGHTWARDS DOUBLE ARROW
+27FA LONG LEFT RIGHT DOUBLE ARROW
+27FB LONG LEFTWARDS ARROW FROM BAR
+27FC LONG RIGHTWARDS ARROW FROM BAR
+27FD LONG LEFTWARDS DOUBLE ARROW FROM BAR
+27FE LONG RIGHTWARDS DOUBLE ARROW FROM BAR
+27FF LONG RIGHTWARDS SQUIGGLE ARROW
+2800 BRAILLE PATTERN BLANK
+2801 BRAILLE PATTERN DOTS-1
+2802 BRAILLE PATTERN DOTS-2
+2803 BRAILLE PATTERN DOTS-12
+2804 BRAILLE PATTERN DOTS-3
+2805 BRAILLE PATTERN DOTS-13
+2806 BRAILLE PATTERN DOTS-23
+2807 BRAILLE PATTERN DOTS-123
+2808 BRAILLE PATTERN DOTS-4
+2809 BRAILLE PATTERN DOTS-14
+280A BRAILLE PATTERN DOTS-24
+280B BRAILLE PATTERN DOTS-124
+280C BRAILLE PATTERN DOTS-34
+280D BRAILLE PATTERN DOTS-134
+280E BRAILLE PATTERN DOTS-234
+280F BRAILLE PATTERN DOTS-1234
+2810 BRAILLE PATTERN DOTS-5
+2811 BRAILLE PATTERN DOTS-15
+2812 BRAILLE PATTERN DOTS-25
+2813 BRAILLE PATTERN DOTS-125
+2814 BRAILLE PATTERN DOTS-35
+2815 BRAILLE PATTERN DOTS-135
+2816 BRAILLE PATTERN DOTS-235
+2817 BRAILLE PATTERN DOTS-1235
+2818 BRAILLE PATTERN DOTS-45
+2819 BRAILLE PATTERN DOTS-145
+281A BRAILLE PATTERN DOTS-245
+281B BRAILLE PATTERN DOTS-1245
+281C BRAILLE PATTERN DOTS-345
+281D BRAILLE PATTERN DOTS-1345
+281E BRAILLE PATTERN DOTS-2345
+281F BRAILLE PATTERN DOTS-12345
+2820 BRAILLE PATTERN DOTS-6
+2821 BRAILLE PATTERN DOTS-16
+2822 BRAILLE PATTERN DOTS-26
+2823 BRAILLE PATTERN DOTS-126
+2824 BRAILLE PATTERN DOTS-36
+2825 BRAILLE PATTERN DOTS-136
+2826 BRAILLE PATTERN DOTS-236
+2827 BRAILLE PATTERN DOTS-1236
+2828 BRAILLE PATTERN DOTS-46
+2829 BRAILLE PATTERN DOTS-146
+282A BRAILLE PATTERN DOTS-246
+282B BRAILLE PATTERN DOTS-1246
+282C BRAILLE PATTERN DOTS-346
+282D BRAILLE PATTERN DOTS-1346
+282E BRAILLE PATTERN DOTS-2346
+282F BRAILLE PATTERN DOTS-12346
+2830 BRAILLE PATTERN DOTS-56
+2831 BRAILLE PATTERN DOTS-156
+2832 BRAILLE PATTERN DOTS-256
+2833 BRAILLE PATTERN DOTS-1256
+2834 BRAILLE PATTERN DOTS-356
+2835 BRAILLE PATTERN DOTS-1356
+2836 BRAILLE PATTERN DOTS-2356
+2837 BRAILLE PATTERN DOTS-12356
+2838 BRAILLE PATTERN DOTS-456
+2839 BRAILLE PATTERN DOTS-1456
+283A BRAILLE PATTERN DOTS-2456
+283B BRAILLE PATTERN DOTS-12456
+283C BRAILLE PATTERN DOTS-3456
+283D BRAILLE PATTERN DOTS-13456
+283E BRAILLE PATTERN DOTS-23456
+283F BRAILLE PATTERN DOTS-123456
+2840 BRAILLE PATTERN DOTS-7
+2841 BRAILLE PATTERN DOTS-17
+2842 BRAILLE PATTERN DOTS-27
+2843 BRAILLE PATTERN DOTS-127
+2844 BRAILLE PATTERN DOTS-37
+2845 BRAILLE PATTERN DOTS-137
+2846 BRAILLE PATTERN DOTS-237
+2847 BRAILLE PATTERN DOTS-1237
+2848 BRAILLE PATTERN DOTS-47
+2849 BRAILLE PATTERN DOTS-147
+284A BRAILLE PATTERN DOTS-247
+284B BRAILLE PATTERN DOTS-1247
+284C BRAILLE PATTERN DOTS-347
+284D BRAILLE PATTERN DOTS-1347
+284E BRAILLE PATTERN DOTS-2347
+284F BRAILLE PATTERN DOTS-12347
+2850 BRAILLE PATTERN DOTS-57
+2851 BRAILLE PATTERN DOTS-157
+2852 BRAILLE PATTERN DOTS-257
+2853 BRAILLE PATTERN DOTS-1257
+2854 BRAILLE PATTERN DOTS-357
+2855 BRAILLE PATTERN DOTS-1357
+2856 BRAILLE PATTERN DOTS-2357
+2857 BRAILLE PATTERN DOTS-12357
+2858 BRAILLE PATTERN DOTS-457
+2859 BRAILLE PATTERN DOTS-1457
+285A BRAILLE PATTERN DOTS-2457
+285B BRAILLE PATTERN DOTS-12457
+285C BRAILLE PATTERN DOTS-3457
+285D BRAILLE PATTERN DOTS-13457
+285E BRAILLE PATTERN DOTS-23457
+285F BRAILLE PATTERN DOTS-123457
+2860 BRAILLE PATTERN DOTS-67
+2861 BRAILLE PATTERN DOTS-167
+2862 BRAILLE PATTERN DOTS-267
+2863 BRAILLE PATTERN DOTS-1267
+2864 BRAILLE PATTERN DOTS-367
+2865 BRAILLE PATTERN DOTS-1367
+2866 BRAILLE PATTERN DOTS-2367
+2867 BRAILLE PATTERN DOTS-12367
+2868 BRAILLE PATTERN DOTS-467
+2869 BRAILLE PATTERN DOTS-1467
+286A BRAILLE PATTERN DOTS-2467
+286B BRAILLE PATTERN DOTS-12467
+286C BRAILLE PATTERN DOTS-3467
+286D BRAILLE PATTERN DOTS-13467
+286E BRAILLE PATTERN DOTS-23467
+286F BRAILLE PATTERN DOTS-123467
+2870 BRAILLE PATTERN DOTS-567
+2871 BRAILLE PATTERN DOTS-1567
+2872 BRAILLE PATTERN DOTS-2567
+2873 BRAILLE PATTERN DOTS-12567
+2874 BRAILLE PATTERN DOTS-3567
+2875 BRAILLE PATTERN DOTS-13567
+2876 BRAILLE PATTERN DOTS-23567
+2877 BRAILLE PATTERN DOTS-123567
+2878 BRAILLE PATTERN DOTS-4567
+2879 BRAILLE PATTERN DOTS-14567
+287A BRAILLE PATTERN DOTS-24567
+287B BRAILLE PATTERN DOTS-124567
+287C BRAILLE PATTERN DOTS-34567
+287D BRAILLE PATTERN DOTS-134567
+287E BRAILLE PATTERN DOTS-234567
+287F BRAILLE PATTERN DOTS-1234567
+2880 BRAILLE PATTERN DOTS-8
+2881 BRAILLE PATTERN DOTS-18
+2882 BRAILLE PATTERN DOTS-28
+2883 BRAILLE PATTERN DOTS-128
+2884 BRAILLE PATTERN DOTS-38
+2885 BRAILLE PATTERN DOTS-138
+2886 BRAILLE PATTERN DOTS-238
+2887 BRAILLE PATTERN DOTS-1238
+2888 BRAILLE PATTERN DOTS-48
+2889 BRAILLE PATTERN DOTS-148
+288A BRAILLE PATTERN DOTS-248
+288B BRAILLE PATTERN DOTS-1248
+288C BRAILLE PATTERN DOTS-348
+288D BRAILLE PATTERN DOTS-1348
+288E BRAILLE PATTERN DOTS-2348
+288F BRAILLE PATTERN DOTS-12348
+2890 BRAILLE PATTERN DOTS-58
+2891 BRAILLE PATTERN DOTS-158
+2892 BRAILLE PATTERN DOTS-258
+2893 BRAILLE PATTERN DOTS-1258
+2894 BRAILLE PATTERN DOTS-358
+2895 BRAILLE PATTERN DOTS-1358
+2896 BRAILLE PATTERN DOTS-2358
+2897 BRAILLE PATTERN DOTS-12358
+2898 BRAILLE PATTERN DOTS-458
+2899 BRAILLE PATTERN DOTS-1458
+289A BRAILLE PATTERN DOTS-2458
+289B BRAILLE PATTERN DOTS-12458
+289C BRAILLE PATTERN DOTS-3458
+289D BRAILLE PATTERN DOTS-13458
+289E BRAILLE PATTERN DOTS-23458
+289F BRAILLE PATTERN DOTS-123458
+28A0 BRAILLE PATTERN DOTS-68
+28A1 BRAILLE PATTERN DOTS-168
+28A2 BRAILLE PATTERN DOTS-268
+28A3 BRAILLE PATTERN DOTS-1268
+28A4 BRAILLE PATTERN DOTS-368
+28A5 BRAILLE PATTERN DOTS-1368
+28A6 BRAILLE PATTERN DOTS-2368
+28A7 BRAILLE PATTERN DOTS-12368
+28A8 BRAILLE PATTERN DOTS-468
+28A9 BRAILLE PATTERN DOTS-1468
+28AA BRAILLE PATTERN DOTS-2468
+28AB BRAILLE PATTERN DOTS-12468
+28AC BRAILLE PATTERN DOTS-3468
+28AD BRAILLE PATTERN DOTS-13468
+28AE BRAILLE PATTERN DOTS-23468
+28AF BRAILLE PATTERN DOTS-123468
+28B0 BRAILLE PATTERN DOTS-568
+28B1 BRAILLE PATTERN DOTS-1568
+28B2 BRAILLE PATTERN DOTS-2568
+28B3 BRAILLE PATTERN DOTS-12568
+28B4 BRAILLE PATTERN DOTS-3568
+28B5 BRAILLE PATTERN DOTS-13568
+28B6 BRAILLE PATTERN DOTS-23568
+28B7 BRAILLE PATTERN DOTS-123568
+28B8 BRAILLE PATTERN DOTS-4568
+28B9 BRAILLE PATTERN DOTS-14568
+28BA BRAILLE PATTERN DOTS-24568
+28BB BRAILLE PATTERN DOTS-124568
+28BC BRAILLE PATTERN DOTS-34568
+28BD BRAILLE PATTERN DOTS-134568
+28BE BRAILLE PATTERN DOTS-234568
+28BF BRAILLE PATTERN DOTS-1234568
+28C0 BRAILLE PATTERN DOTS-78
+28C1 BRAILLE PATTERN DOTS-178
+28C2 BRAILLE PATTERN DOTS-278
+28C3 BRAILLE PATTERN DOTS-1278
+28C4 BRAILLE PATTERN DOTS-378
+28C5 BRAILLE PATTERN DOTS-1378
+28C6 BRAILLE PATTERN DOTS-2378
+28C7 BRAILLE PATTERN DOTS-12378
+28C8 BRAILLE PATTERN DOTS-478
+28C9 BRAILLE PATTERN DOTS-1478
+28CA BRAILLE PATTERN DOTS-2478
+28CB BRAILLE PATTERN DOTS-12478
+28CC BRAILLE PATTERN DOTS-3478
+28CD BRAILLE PATTERN DOTS-13478
+28CE BRAILLE PATTERN DOTS-23478
+28CF BRAILLE PATTERN DOTS-123478
+28D0 BRAILLE PATTERN DOTS-578
+28D1 BRAILLE PATTERN DOTS-1578
+28D2 BRAILLE PATTERN DOTS-2578
+28D3 BRAILLE PATTERN DOTS-12578
+28D4 BRAILLE PATTERN DOTS-3578
+28D5 BRAILLE PATTERN DOTS-13578
+28D6 BRAILLE PATTERN DOTS-23578
+28D7 BRAILLE PATTERN DOTS-123578
+28D8 BRAILLE PATTERN DOTS-4578
+28D9 BRAILLE PATTERN DOTS-14578
+28DA BRAILLE PATTERN DOTS-24578
+28DB BRAILLE PATTERN DOTS-124578
+28DC BRAILLE PATTERN DOTS-34578
+28DD BRAILLE PATTERN DOTS-134578
+28DE BRAILLE PATTERN DOTS-234578
+28DF BRAILLE PATTERN DOTS-1234578
+28E0 BRAILLE PATTERN DOTS-678
+28E1 BRAILLE PATTERN DOTS-1678
+28E2 BRAILLE PATTERN DOTS-2678
+28E3 BRAILLE PATTERN DOTS-12678
+28E4 BRAILLE PATTERN DOTS-3678
+28E5 BRAILLE PATTERN DOTS-13678
+28E6 BRAILLE PATTERN DOTS-23678
+28E7 BRAILLE PATTERN DOTS-123678
+28E8 BRAILLE PATTERN DOTS-4678
+28E9 BRAILLE PATTERN DOTS-14678
+28EA BRAILLE PATTERN DOTS-24678
+28EB BRAILLE PATTERN DOTS-124678
+28EC BRAILLE PATTERN DOTS-34678
+28ED BRAILLE PATTERN DOTS-134678
+28EE BRAILLE PATTERN DOTS-234678
+28EF BRAILLE PATTERN DOTS-1234678
+28F0 BRAILLE PATTERN DOTS-5678
+28F1 BRAILLE PATTERN DOTS-15678
+28F2 BRAILLE PATTERN DOTS-25678
+28F3 BRAILLE PATTERN DOTS-125678
+28F4 BRAILLE PATTERN DOTS-35678
+28F5 BRAILLE PATTERN DOTS-135678
+28F6 BRAILLE PATTERN DOTS-235678
+28F7 BRAILLE PATTERN DOTS-1235678
+28F8 BRAILLE PATTERN DOTS-45678
+28F9 BRAILLE PATTERN DOTS-145678
+28FA BRAILLE PATTERN DOTS-245678
+28FB BRAILLE PATTERN DOTS-1245678
+28FC BRAILLE PATTERN DOTS-345678
+28FD BRAILLE PATTERN DOTS-1345678
+28FE BRAILLE PATTERN DOTS-2345678
+28FF BRAILLE PATTERN DOTS-12345678
+2900 RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE
+2901 RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE
+2902 LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+2903 RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+2904 LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE
+2905 RIGHTWARDS TWO-HEADED ARROW FROM BAR
+2906 LEFTWARDS DOUBLE ARROW FROM BAR
+2907 RIGHTWARDS DOUBLE ARROW FROM BAR
+2908 DOWNWARDS ARROW WITH HORIZONTAL STROKE
+2909 UPWARDS ARROW WITH HORIZONTAL STROKE
+290A UPWARDS TRIPLE ARROW
+290B DOWNWARDS TRIPLE ARROW
+290C LEFTWARDS DOUBLE DASH ARROW
+290D RIGHTWARDS DOUBLE DASH ARROW
+290E LEFTWARDS TRIPLE DASH ARROW
+290F RIGHTWARDS TRIPLE DASH ARROW
+2910 RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW
+2911 RIGHTWARDS ARROW WITH DOTTED STEM
+2912 UPWARDS ARROW TO BAR
+2913 DOWNWARDS ARROW TO BAR
+2914 RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE
+2915 RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+2916 RIGHTWARDS TWO-HEADED ARROW WITH TAIL
+2917 RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE
+2918 RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+2919 LEFTWARDS ARROW-TAIL
+291A RIGHTWARDS ARROW-TAIL
+291B LEFTWARDS DOUBLE ARROW-TAIL
+291C RIGHTWARDS DOUBLE ARROW-TAIL
+291D LEFTWARDS ARROW TO BLACK DIAMOND
+291E RIGHTWARDS ARROW TO BLACK DIAMOND
+291F LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND
+2920 RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND
+2921 NORTH WEST AND SOUTH EAST ARROW
+2922 NORTH EAST AND SOUTH WEST ARROW
+2923 NORTH WEST ARROW WITH HOOK
+2924 NORTH EAST ARROW WITH HOOK
+2925 SOUTH EAST ARROW WITH HOOK
+2926 SOUTH WEST ARROW WITH HOOK
+2927 NORTH WEST ARROW AND NORTH EAST ARROW
+2928 NORTH EAST ARROW AND SOUTH EAST ARROW
+2929 SOUTH EAST ARROW AND SOUTH WEST ARROW
+292A SOUTH WEST ARROW AND NORTH WEST ARROW
+292B RISING DIAGONAL CROSSING FALLING DIAGONAL
+292C FALLING DIAGONAL CROSSING RISING DIAGONAL
+292D SOUTH EAST ARROW CROSSING NORTH EAST ARROW
+292E NORTH EAST ARROW CROSSING SOUTH EAST ARROW
+292F FALLING DIAGONAL CROSSING NORTH EAST ARROW
+2930 RISING DIAGONAL CROSSING SOUTH EAST ARROW
+2931 NORTH EAST ARROW CROSSING NORTH WEST ARROW
+2932 NORTH WEST ARROW CROSSING NORTH EAST ARROW
+2933 WAVE ARROW POINTING DIRECTLY RIGHT
+2934 ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS
+2935 ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS
+2936 ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS
+2937 ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS
+2938 RIGHT-SIDE ARC CLOCKWISE ARROW
+2939 LEFT-SIDE ARC ANTICLOCKWISE ARROW
+293A TOP ARC ANTICLOCKWISE ARROW
+293B BOTTOM ARC ANTICLOCKWISE ARROW
+293C TOP ARC CLOCKWISE ARROW WITH MINUS
+293D TOP ARC ANTICLOCKWISE ARROW WITH PLUS
+293E LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW
+293F LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW
+2940 ANTICLOCKWISE CLOSED CIRCLE ARROW
+2941 CLOCKWISE CLOSED CIRCLE ARROW
+2942 RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW
+2943 LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW
+2944 SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW
+2945 RIGHTWARDS ARROW WITH PLUS BELOW
+2946 LEFTWARDS ARROW WITH PLUS BELOW
+2947 RIGHTWARDS ARROW THROUGH X
+2948 LEFT RIGHT ARROW THROUGH SMALL CIRCLE
+2949 UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE
+294A LEFT BARB UP RIGHT BARB DOWN HARPOON
+294B LEFT BARB DOWN RIGHT BARB UP HARPOON
+294C UP BARB RIGHT DOWN BARB LEFT HARPOON
+294D UP BARB LEFT DOWN BARB RIGHT HARPOON
+294E LEFT BARB UP RIGHT BARB UP HARPOON
+294F UP BARB RIGHT DOWN BARB RIGHT HARPOON
+2950 LEFT BARB DOWN RIGHT BARB DOWN HARPOON
+2951 UP BARB LEFT DOWN BARB LEFT HARPOON
+2952 LEFTWARDS HARPOON WITH BARB UP TO BAR
+2953 RIGHTWARDS HARPOON WITH BARB UP TO BAR
+2954 UPWARDS HARPOON WITH BARB RIGHT TO BAR
+2955 DOWNWARDS HARPOON WITH BARB RIGHT TO BAR
+2956 LEFTWARDS HARPOON WITH BARB DOWN TO BAR
+2957 RIGHTWARDS HARPOON WITH BARB DOWN TO BAR
+2958 UPWARDS HARPOON WITH BARB LEFT TO BAR
+2959 DOWNWARDS HARPOON WITH BARB LEFT TO BAR
+295A LEFTWARDS HARPOON WITH BARB UP FROM BAR
+295B RIGHTWARDS HARPOON WITH BARB UP FROM BAR
+295C UPWARDS HARPOON WITH BARB RIGHT FROM BAR
+295D DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR
+295E LEFTWARDS HARPOON WITH BARB DOWN FROM BAR
+295F RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR
+2960 UPWARDS HARPOON WITH BARB LEFT FROM BAR
+2961 DOWNWARDS HARPOON WITH BARB LEFT FROM BAR
+2962 LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+2963 UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+2964 RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+2965 DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+2966 LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP
+2967 LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+2968 RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP
+2969 RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+296A LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+296B LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+296C RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+296D RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+296E UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+296F DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+2970 RIGHT DOUBLE ARROW WITH ROUNDED HEAD
+2971 EQUALS SIGN ABOVE RIGHTWARDS ARROW
+2972 TILDE OPERATOR ABOVE RIGHTWARDS ARROW
+2973 LEFTWARDS ARROW ABOVE TILDE OPERATOR
+2974 RIGHTWARDS ARROW ABOVE TILDE OPERATOR
+2975 RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO
+2976 LESS-THAN ABOVE LEFTWARDS ARROW
+2977 LEFTWARDS ARROW THROUGH LESS-THAN
+2978 GREATER-THAN ABOVE RIGHTWARDS ARROW
+2979 SUBSET ABOVE RIGHTWARDS ARROW
+297A LEFTWARDS ARROW THROUGH SUBSET
+297B SUPERSET ABOVE LEFTWARDS ARROW
+297C LEFT FISH TAIL
+297D RIGHT FISH TAIL
+297E UP FISH TAIL
+297F DOWN FISH TAIL
+2980 TRIPLE VERTICAL BAR DELIMITER
+2981 Z NOTATION SPOT
+2982 Z NOTATION TYPE COLON
+2983 LEFT WHITE CURLY BRACKET
+2984 RIGHT WHITE CURLY BRACKET
+2985 LEFT WHITE PARENTHESIS
+2986 RIGHT WHITE PARENTHESIS
+2987 Z NOTATION LEFT IMAGE BRACKET
+2988 Z NOTATION RIGHT IMAGE BRACKET
+2989 Z NOTATION LEFT BINDING BRACKET
+298A Z NOTATION RIGHT BINDING BRACKET
+298B LEFT SQUARE BRACKET WITH UNDERBAR
+298C RIGHT SQUARE BRACKET WITH UNDERBAR
+298D LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990 RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991 LEFT ANGLE BRACKET WITH DOT
+2992 RIGHT ANGLE BRACKET WITH DOT
+2993 LEFT ARC LESS-THAN BRACKET
+2994 RIGHT ARC GREATER-THAN BRACKET
+2995 DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996 DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997 LEFT BLACK TORTOISE SHELL BRACKET
+2998 RIGHT BLACK TORTOISE SHELL BRACKET
+2999 DOTTED FENCE
+299A VERTICAL ZIGZAG LINE
+299B MEASURED ANGLE OPENING LEFT
+299C RIGHT ANGLE VARIANT WITH SQUARE
+299D MEASURED RIGHT ANGLE WITH DOT
+299E ANGLE WITH S INSIDE
+299F ACUTE ANGLE
+29A0 SPHERICAL ANGLE OPENING LEFT
+29A1 SPHERICAL ANGLE OPENING UP
+29A2 TURNED ANGLE
+29A3 REVERSED ANGLE
+29A4 ANGLE WITH UNDERBAR
+29A5 REVERSED ANGLE WITH UNDERBAR
+29A6 OBLIQUE ANGLE OPENING UP
+29A7 OBLIQUE ANGLE OPENING DOWN
+29A8 MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
+29A9 MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
+29AA MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
+29AB MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
+29AC MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
+29AD MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
+29AE MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
+29AF MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
+29B0 REVERSED EMPTY SET
+29B1 EMPTY SET WITH OVERBAR
+29B2 EMPTY SET WITH SMALL CIRCLE ABOVE
+29B3 EMPTY SET WITH RIGHT ARROW ABOVE
+29B4 EMPTY SET WITH LEFT ARROW ABOVE
+29B5 CIRCLE WITH HORIZONTAL BAR
+29B6 CIRCLED VERTICAL BAR
+29B7 CIRCLED PARALLEL
+29B8 CIRCLED REVERSE SOLIDUS
+29B9 CIRCLED PERPENDICULAR
+29BA CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR
+29BB CIRCLE WITH SUPERIMPOSED X
+29BC CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN
+29BD UP ARROW THROUGH CIRCLE
+29BE CIRCLED WHITE BULLET
+29BF CIRCLED BULLET
+29C0 CIRCLED LESS-THAN
+29C1 CIRCLED GREATER-THAN
+29C2 CIRCLE WITH SMALL CIRCLE TO THE RIGHT
+29C3 CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT
+29C4 SQUARED RISING DIAGONAL SLASH
+29C5 SQUARED FALLING DIAGONAL SLASH
+29C6 SQUARED ASTERISK
+29C7 SQUARED SMALL CIRCLE
+29C8 SQUARED SQUARE
+29C9 TWO JOINED SQUARES
+29CA TRIANGLE WITH DOT ABOVE
+29CB TRIANGLE WITH UNDERBAR
+29CC S IN TRIANGLE
+29CD TRIANGLE WITH SERIFS AT BOTTOM
+29CE RIGHT TRIANGLE ABOVE LEFT TRIANGLE
+29CF LEFT TRIANGLE BESIDE VERTICAL BAR
+29D0 VERTICAL BAR BESIDE RIGHT TRIANGLE
+29D1 BOWTIE WITH LEFT HALF BLACK
+29D2 BOWTIE WITH RIGHT HALF BLACK
+29D3 BLACK BOWTIE
+29D4 TIMES WITH LEFT HALF BLACK
+29D5 TIMES WITH RIGHT HALF BLACK
+29D6 WHITE HOURGLASS
+29D7 BLACK HOURGLASS
+29D8 LEFT WIGGLY FENCE
+29D9 RIGHT WIGGLY FENCE
+29DA LEFT DOUBLE WIGGLY FENCE
+29DB RIGHT DOUBLE WIGGLY FENCE
+29DC INCOMPLETE INFINITY
+29DD TIE OVER INFINITY
+29DE INFINITY NEGATED WITH VERTICAL BAR
+29DF DOUBLE-ENDED MULTIMAP
+29E0 SQUARE WITH CONTOURED OUTLINE
+29E1 INCREASES AS
+29E2 SHUFFLE PRODUCT
+29E3 EQUALS SIGN AND SLANTED PARALLEL
+29E4 EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE
+29E5 IDENTICAL TO AND SLANTED PARALLEL
+29E6 GLEICH STARK
+29E7 THERMODYNAMIC
+29E8 DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK
+29E9 DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK
+29EA BLACK DIAMOND WITH DOWN ARROW
+29EB BLACK LOZENGE
+29EC WHITE CIRCLE WITH DOWN ARROW
+29ED BLACK CIRCLE WITH DOWN ARROW
+29EE ERROR-BARRED WHITE SQUARE
+29EF ERROR-BARRED BLACK SQUARE
+29F0 ERROR-BARRED WHITE DIAMOND
+29F1 ERROR-BARRED BLACK DIAMOND
+29F2 ERROR-BARRED WHITE CIRCLE
+29F3 ERROR-BARRED BLACK CIRCLE
+29F4 RULE-DELAYED
+29F5 REVERSE SOLIDUS OPERATOR
+29F6 SOLIDUS WITH OVERBAR
+29F7 REVERSE SOLIDUS WITH HORIZONTAL STROKE
+29F8 BIG SOLIDUS
+29F9 BIG REVERSE SOLIDUS
+29FA DOUBLE PLUS
+29FB TRIPLE PLUS
+29FC LEFT-POINTING CURVED ANGLE BRACKET
+29FD RIGHT-POINTING CURVED ANGLE BRACKET
+29FE TINY
+29FF MINY
+2A00 N-ARY CIRCLED DOT OPERATOR
+2A01 N-ARY CIRCLED PLUS OPERATOR
+2A02 N-ARY CIRCLED TIMES OPERATOR
+2A03 N-ARY UNION OPERATOR WITH DOT
+2A04 N-ARY UNION OPERATOR WITH PLUS
+2A05 N-ARY SQUARE INTERSECTION OPERATOR
+2A06 N-ARY SQUARE UNION OPERATOR
+2A07 TWO LOGICAL AND OPERATOR
+2A08 TWO LOGICAL OR OPERATOR
+2A09 N-ARY TIMES OPERATOR
+2A0A MODULO TWO SUM
+2A0B SUMMATION WITH INTEGRAL
+2A0C QUADRUPLE INTEGRAL OPERATOR
+2A0D FINITE PART INTEGRAL
+2A0E INTEGRAL WITH DOUBLE STROKE
+2A0F INTEGRAL AVERAGE WITH SLASH
+2A10 CIRCULATION FUNCTION
+2A11 ANTICLOCKWISE INTEGRATION
+2A12 LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE
+2A13 LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE
+2A14 LINE INTEGRATION NOT INCLUDING THE POLE
+2A15 INTEGRAL AROUND A POINT OPERATOR
+2A16 QUATERNION INTEGRAL OPERATOR
+2A17 INTEGRAL WITH LEFTWARDS ARROW WITH HOOK
+2A18 INTEGRAL WITH TIMES SIGN
+2A19 INTEGRAL WITH INTERSECTION
+2A1A INTEGRAL WITH UNION
+2A1B INTEGRAL WITH OVERBAR
+2A1C INTEGRAL WITH UNDERBAR
+2A1D JOIN
+2A1E LARGE LEFT TRIANGLE OPERATOR
+2A1F Z NOTATION SCHEMA COMPOSITION
+2A20 Z NOTATION SCHEMA PIPING
+2A21 Z NOTATION SCHEMA PROJECTION
+2A22 PLUS SIGN WITH SMALL CIRCLE ABOVE
+2A23 PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE
+2A24 PLUS SIGN WITH TILDE ABOVE
+2A25 PLUS SIGN WITH DOT BELOW
+2A26 PLUS SIGN WITH TILDE BELOW
+2A27 PLUS SIGN WITH SUBSCRIPT TWO
+2A28 PLUS SIGN WITH BLACK TRIANGLE
+2A29 MINUS SIGN WITH COMMA ABOVE
+2A2A MINUS SIGN WITH DOT BELOW
+2A2B MINUS SIGN WITH FALLING DOTS
+2A2C MINUS SIGN WITH RISING DOTS
+2A2D PLUS SIGN IN LEFT HALF CIRCLE
+2A2E PLUS SIGN IN RIGHT HALF CIRCLE
+2A2F VECTOR OR CROSS PRODUCT
+2A30 MULTIPLICATION SIGN WITH DOT ABOVE
+2A31 MULTIPLICATION SIGN WITH UNDERBAR
+2A32 SEMIDIRECT PRODUCT WITH BOTTOM CLOSED
+2A33 SMASH PRODUCT
+2A34 MULTIPLICATION SIGN IN LEFT HALF CIRCLE
+2A35 MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
+2A36 CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT
+2A37 MULTIPLICATION SIGN IN DOUBLE CIRCLE
+2A38 CIRCLED DIVISION SIGN
+2A39 PLUS SIGN IN TRIANGLE
+2A3A MINUS SIGN IN TRIANGLE
+2A3B MULTIPLICATION SIGN IN TRIANGLE
+2A3C INTERIOR PRODUCT
+2A3D RIGHTHAND INTERIOR PRODUCT
+2A3E Z NOTATION RELATIONAL COMPOSITION
+2A3F AMALGAMATION OR COPRODUCT
+2A40 INTERSECTION WITH DOT
+2A41 UNION WITH MINUS SIGN
+2A42 UNION WITH OVERBAR
+2A43 INTERSECTION WITH OVERBAR
+2A44 INTERSECTION WITH LOGICAL AND
+2A45 UNION WITH LOGICAL OR
+2A46 UNION ABOVE INTERSECTION
+2A47 INTERSECTION ABOVE UNION
+2A48 UNION ABOVE BAR ABOVE INTERSECTION
+2A49 INTERSECTION ABOVE BAR ABOVE UNION
+2A4A UNION BESIDE AND JOINED WITH UNION
+2A4B INTERSECTION BESIDE AND JOINED WITH INTERSECTION
+2A4C CLOSED UNION WITH SERIFS
+2A4D CLOSED INTERSECTION WITH SERIFS
+2A4E DOUBLE SQUARE INTERSECTION
+2A4F DOUBLE SQUARE UNION
+2A50 CLOSED UNION WITH SERIFS AND SMASH PRODUCT
+2A51 LOGICAL AND WITH DOT ABOVE
+2A52 LOGICAL OR WITH DOT ABOVE
+2A53 DOUBLE LOGICAL AND
+2A54 DOUBLE LOGICAL OR
+2A55 TWO INTERSECTING LOGICAL AND
+2A56 TWO INTERSECTING LOGICAL OR
+2A57 SLOPING LARGE OR
+2A58 SLOPING LARGE AND
+2A59 LOGICAL OR OVERLAPPING LOGICAL AND
+2A5A LOGICAL AND WITH MIDDLE STEM
+2A5B LOGICAL OR WITH MIDDLE STEM
+2A5C LOGICAL AND WITH HORIZONTAL DASH
+2A5D LOGICAL OR WITH HORIZONTAL DASH
+2A5E LOGICAL AND WITH DOUBLE OVERBAR
+2A5F LOGICAL AND WITH UNDERBAR
+2A60 LOGICAL AND WITH DOUBLE UNDERBAR
+2A61 SMALL VEE WITH UNDERBAR
+2A62 LOGICAL OR WITH DOUBLE OVERBAR
+2A63 LOGICAL OR WITH DOUBLE UNDERBAR
+2A64 Z NOTATION DOMAIN ANTIRESTRICTION
+2A65 Z NOTATION RANGE ANTIRESTRICTION
+2A66 EQUALS SIGN WITH DOT BELOW
+2A67 IDENTICAL WITH DOT ABOVE
+2A68 TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE
+2A69 TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE
+2A6A TILDE OPERATOR WITH DOT ABOVE
+2A6B TILDE OPERATOR WITH RISING DOTS
+2A6C SIMILAR MINUS SIMILAR
+2A6D CONGRUENT WITH DOT ABOVE
+2A6E EQUALS WITH ASTERISK
+2A6F ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT
+2A70 APPROXIMATELY EQUAL OR EQUAL TO
+2A71 EQUALS SIGN ABOVE PLUS SIGN
+2A72 PLUS SIGN ABOVE EQUALS SIGN
+2A73 EQUALS SIGN ABOVE TILDE OPERATOR
+2A74 DOUBLE COLON EQUAL
+2A75 TWO CONSECUTIVE EQUALS SIGNS
+2A76 THREE CONSECUTIVE EQUALS SIGNS
+2A77 EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW
+2A78 EQUIVALENT WITH FOUR DOTS ABOVE
+2A79 LESS-THAN WITH CIRCLE INSIDE
+2A7A GREATER-THAN WITH CIRCLE INSIDE
+2A7B LESS-THAN WITH QUESTION MARK ABOVE
+2A7C GREATER-THAN WITH QUESTION MARK ABOVE
+2A7D LESS-THAN OR SLANTED EQUAL TO
+2A7E GREATER-THAN OR SLANTED EQUAL TO
+2A7F LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+2A80 GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+2A81 LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+2A82 GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+2A83 LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
+2A84 GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
+2A85 LESS-THAN OR APPROXIMATE
+2A86 GREATER-THAN OR APPROXIMATE
+2A87 LESS-THAN AND SINGLE-LINE NOT EQUAL TO
+2A88 GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
+2A89 LESS-THAN AND NOT APPROXIMATE
+2A8A GREATER-THAN AND NOT APPROXIMATE
+2A8B LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
+2A8C GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
+2A8D LESS-THAN ABOVE SIMILAR OR EQUAL
+2A8E GREATER-THAN ABOVE SIMILAR OR EQUAL
+2A8F LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
+2A90 GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
+2A91 LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
+2A92 GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
+2A93 LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
+2A94 GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL
+2A95 SLANTED EQUAL TO OR LESS-THAN
+2A96 SLANTED EQUAL TO OR GREATER-THAN
+2A97 SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE
+2A98 SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE
+2A99 DOUBLE-LINE EQUAL TO OR LESS-THAN
+2A9A DOUBLE-LINE EQUAL TO OR GREATER-THAN
+2A9B DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN
+2A9C DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN
+2A9D SIMILAR OR LESS-THAN
+2A9E SIMILAR OR GREATER-THAN
+2A9F SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
+2AA0 SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
+2AA1 DOUBLE NESTED LESS-THAN
+2AA2 DOUBLE NESTED GREATER-THAN
+2AA3 DOUBLE NESTED LESS-THAN WITH UNDERBAR
+2AA4 GREATER-THAN OVERLAPPING LESS-THAN
+2AA5 GREATER-THAN BESIDE LESS-THAN
+2AA6 LESS-THAN CLOSED BY CURVE
+2AA7 GREATER-THAN CLOSED BY CURVE
+2AA8 LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+2AA9 GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+2AAA SMALLER THAN
+2AAB LARGER THAN
+2AAC SMALLER THAN OR EQUAL TO
+2AAD LARGER THAN OR EQUAL TO
+2AAE EQUALS SIGN WITH BUMPY ABOVE
+2AAF PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
+2AB0 SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
+2AB1 PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO
+2AB2 SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
+2AB3 PRECEDES ABOVE EQUALS SIGN
+2AB4 SUCCEEDS ABOVE EQUALS SIGN
+2AB5 PRECEDES ABOVE NOT EQUAL TO
+2AB6 SUCCEEDS ABOVE NOT EQUAL TO
+2AB7 PRECEDES ABOVE ALMOST EQUAL TO
+2AB8 SUCCEEDS ABOVE ALMOST EQUAL TO
+2AB9 PRECEDES ABOVE NOT ALMOST EQUAL TO
+2ABA SUCCEEDS ABOVE NOT ALMOST EQUAL TO
+2ABB DOUBLE PRECEDES
+2ABC DOUBLE SUCCEEDS
+2ABD SUBSET WITH DOT
+2ABE SUPERSET WITH DOT
+2ABF SUBSET WITH PLUS SIGN BELOW
+2AC0 SUPERSET WITH PLUS SIGN BELOW
+2AC1 SUBSET WITH MULTIPLICATION SIGN BELOW
+2AC2 SUPERSET WITH MULTIPLICATION SIGN BELOW
+2AC3 SUBSET OF OR EQUAL TO WITH DOT ABOVE
+2AC4 SUPERSET OF OR EQUAL TO WITH DOT ABOVE
+2AC5 SUBSET OF ABOVE EQUALS SIGN
+2AC6 SUPERSET OF ABOVE EQUALS SIGN
+2AC7 SUBSET OF ABOVE TILDE OPERATOR
+2AC8 SUPERSET OF ABOVE TILDE OPERATOR
+2AC9 SUBSET OF ABOVE ALMOST EQUAL TO
+2ACA SUPERSET OF ABOVE ALMOST EQUAL TO
+2ACB SUBSET OF ABOVE NOT EQUAL TO
+2ACC SUPERSET OF ABOVE NOT EQUAL TO
+2ACD SQUARE LEFT OPEN BOX OPERATOR
+2ACE SQUARE RIGHT OPEN BOX OPERATOR
+2ACF CLOSED SUBSET
+2AD0 CLOSED SUPERSET
+2AD1 CLOSED SUBSET OR EQUAL TO
+2AD2 CLOSED SUPERSET OR EQUAL TO
+2AD3 SUBSET ABOVE SUPERSET
+2AD4 SUPERSET ABOVE SUBSET
+2AD5 SUBSET ABOVE SUBSET
+2AD6 SUPERSET ABOVE SUPERSET
+2AD7 SUPERSET BESIDE SUBSET
+2AD8 SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET
+2AD9 ELEMENT OF OPENING DOWNWARDS
+2ADA PITCHFORK WITH TEE TOP
+2ADB TRANSVERSAL INTERSECTION
+2ADC FORKING
+2ADD NONFORKING
+2ADE SHORT LEFT TACK
+2ADF SHORT DOWN TACK
+2AE0 SHORT UP TACK
+2AE1 PERPENDICULAR WITH S
+2AE2 VERTICAL BAR TRIPLE RIGHT TURNSTILE
+2AE3 DOUBLE VERTICAL BAR LEFT TURNSTILE
+2AE4 VERTICAL BAR DOUBLE LEFT TURNSTILE
+2AE5 DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE
+2AE6 LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL
+2AE7 SHORT DOWN TACK WITH OVERBAR
+2AE8 SHORT UP TACK WITH UNDERBAR
+2AE9 SHORT UP TACK ABOVE SHORT DOWN TACK
+2AEA DOUBLE DOWN TACK
+2AEB DOUBLE UP TACK
+2AEC DOUBLE STROKE NOT SIGN
+2AED REVERSED DOUBLE STROKE NOT SIGN
+2AEE DOES NOT DIVIDE WITH REVERSED NEGATION SLASH
+2AEF VERTICAL LINE WITH CIRCLE ABOVE
+2AF0 VERTICAL LINE WITH CIRCLE BELOW
+2AF1 DOWN TACK WITH CIRCLE BELOW
+2AF2 PARALLEL WITH HORIZONTAL STROKE
+2AF3 PARALLEL WITH TILDE OPERATOR
+2AF4 TRIPLE VERTICAL BAR BINARY RELATION
+2AF5 TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE
+2AF6 TRIPLE COLON OPERATOR
+2AF7 TRIPLE NESTED LESS-THAN
+2AF8 TRIPLE NESTED GREATER-THAN
+2AF9 DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO
+2AFA DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO
+2AFB TRIPLE SOLIDUS BINARY RELATION
+2AFC LARGE TRIPLE VERTICAL BAR OPERATOR
+2AFD DOUBLE SOLIDUS OPERATOR
+2AFE WHITE VERTICAL BAR
+2AFF N-ARY WHITE VERTICAL BAR
+2E80 CJK RADICAL REPEAT
+2E81 CJK RADICAL CLIFF
+2E82 CJK RADICAL SECOND ONE
+2E83 CJK RADICAL SECOND TWO
+2E84 CJK RADICAL SECOND THREE
+2E85 CJK RADICAL PERSON
+2E86 CJK RADICAL BOX
+2E87 CJK RADICAL TABLE
+2E88 CJK RADICAL KNIFE ONE
+2E89 CJK RADICAL KNIFE TWO
+2E8A CJK RADICAL DIVINATION
+2E8B CJK RADICAL SEAL
+2E8C CJK RADICAL SMALL ONE
+2E8D CJK RADICAL SMALL TWO
+2E8E CJK RADICAL LAME ONE
+2E8F CJK RADICAL LAME TWO
+2E90 CJK RADICAL LAME THREE
+2E91 CJK RADICAL LAME FOUR
+2E92 CJK RADICAL SNAKE
+2E93 CJK RADICAL THREAD
+2E94 CJK RADICAL SNOUT ONE
+2E95 CJK RADICAL SNOUT TWO
+2E96 CJK RADICAL HEART ONE
+2E97 CJK RADICAL HEART TWO
+2E98 CJK RADICAL HAND
+2E99 CJK RADICAL RAP
+2E9B CJK RADICAL CHOKE
+2E9C CJK RADICAL SUN
+2E9D CJK RADICAL MOON
+2E9E CJK RADICAL DEATH
+2E9F CJK RADICAL MOTHER
+2EA0 CJK RADICAL CIVILIAN
+2EA1 CJK RADICAL WATER ONE
+2EA2 CJK RADICAL WATER TWO
+2EA3 CJK RADICAL FIRE
+2EA4 CJK RADICAL PAW ONE
+2EA5 CJK RADICAL PAW TWO
+2EA6 CJK RADICAL SIMPLIFIED HALF TREE TRUNK
+2EA7 CJK RADICAL COW
+2EA8 CJK RADICAL DOG
+2EA9 CJK RADICAL JADE
+2EAA CJK RADICAL BOLT OF CLOTH
+2EAB CJK RADICAL EYE
+2EAC CJK RADICAL SPIRIT ONE
+2EAD CJK RADICAL SPIRIT TWO
+2EAE CJK RADICAL BAMBOO
+2EAF CJK RADICAL SILK
+2EB0 CJK RADICAL C-SIMPLIFIED SILK
+2EB1 CJK RADICAL NET ONE
+2EB2 CJK RADICAL NET TWO
+2EB3 CJK RADICAL NET THREE
+2EB4 CJK RADICAL NET FOUR
+2EB5 CJK RADICAL MESH
+2EB6 CJK RADICAL SHEEP
+2EB7 CJK RADICAL RAM
+2EB8 CJK RADICAL EWE
+2EB9 CJK RADICAL OLD
+2EBA CJK RADICAL BRUSH ONE
+2EBB CJK RADICAL BRUSH TWO
+2EBC CJK RADICAL MEAT
+2EBD CJK RADICAL MORTAR
+2EBE CJK RADICAL GRASS ONE
+2EBF CJK RADICAL GRASS TWO
+2EC0 CJK RADICAL GRASS THREE
+2EC1 CJK RADICAL TIGER
+2EC2 CJK RADICAL CLOTHES
+2EC3 CJK RADICAL WEST ONE
+2EC4 CJK RADICAL WEST TWO
+2EC5 CJK RADICAL C-SIMPLIFIED SEE
+2EC6 CJK RADICAL SIMPLIFIED HORN
+2EC7 CJK RADICAL HORN
+2EC8 CJK RADICAL C-SIMPLIFIED SPEECH
+2EC9 CJK RADICAL C-SIMPLIFIED SHELL
+2ECA CJK RADICAL FOOT
+2ECB CJK RADICAL C-SIMPLIFIED CART
+2ECC CJK RADICAL SIMPLIFIED WALK
+2ECD CJK RADICAL WALK ONE
+2ECE CJK RADICAL WALK TWO
+2ECF CJK RADICAL CITY
+2ED0 CJK RADICAL C-SIMPLIFIED GOLD
+2ED1 CJK RADICAL LONG ONE
+2ED2 CJK RADICAL LONG TWO
+2ED3 CJK RADICAL C-SIMPLIFIED LONG
+2ED4 CJK RADICAL C-SIMPLIFIED GATE
+2ED5 CJK RADICAL MOUND ONE
+2ED6 CJK RADICAL MOUND TWO
+2ED7 CJK RADICAL RAIN
+2ED8 CJK RADICAL BLUE
+2ED9 CJK RADICAL C-SIMPLIFIED TANNED LEATHER
+2EDA CJK RADICAL C-SIMPLIFIED LEAF
+2EDB CJK RADICAL C-SIMPLIFIED WIND
+2EDC CJK RADICAL C-SIMPLIFIED FLY
+2EDD CJK RADICAL EAT ONE
+2EDE CJK RADICAL EAT TWO
+2EDF CJK RADICAL EAT THREE
+2EE0 CJK RADICAL C-SIMPLIFIED EAT
+2EE1 CJK RADICAL HEAD
+2EE2 CJK RADICAL C-SIMPLIFIED HORSE
+2EE3 CJK RADICAL BONE
+2EE4 CJK RADICAL GHOST
+2EE5 CJK RADICAL C-SIMPLIFIED FISH
+2EE6 CJK RADICAL C-SIMPLIFIED BIRD
+2EE7 CJK RADICAL C-SIMPLIFIED SALT
+2EE8 CJK RADICAL SIMPLIFIED WHEAT
+2EE9 CJK RADICAL SIMPLIFIED YELLOW
+2EEA CJK RADICAL C-SIMPLIFIED FROG
+2EEB CJK RADICAL J-SIMPLIFIED EVEN
+2EEC CJK RADICAL C-SIMPLIFIED EVEN
+2EED CJK RADICAL J-SIMPLIFIED TOOTH
+2EEE CJK RADICAL C-SIMPLIFIED TOOTH
+2EEF CJK RADICAL J-SIMPLIFIED DRAGON
+2EF0 CJK RADICAL C-SIMPLIFIED DRAGON
+2EF1 CJK RADICAL TURTLE
+2EF2 CJK RADICAL J-SIMPLIFIED TURTLE
+2EF3 CJK RADICAL C-SIMPLIFIED TURTLE
+2F00 KANGXI RADICAL ONE
+2F01 KANGXI RADICAL LINE
+2F02 KANGXI RADICAL DOT
+2F03 KANGXI RADICAL SLASH
+2F04 KANGXI RADICAL SECOND
+2F05 KANGXI RADICAL HOOK
+2F06 KANGXI RADICAL TWO
+2F07 KANGXI RADICAL LID
+2F08 KANGXI RADICAL MAN
+2F09 KANGXI RADICAL LEGS
+2F0A KANGXI RADICAL ENTER
+2F0B KANGXI RADICAL EIGHT
+2F0C KANGXI RADICAL DOWN BOX
+2F0D KANGXI RADICAL COVER
+2F0E KANGXI RADICAL ICE
+2F0F KANGXI RADICAL TABLE
+2F10 KANGXI RADICAL OPEN BOX
+2F11 KANGXI RADICAL KNIFE
+2F12 KANGXI RADICAL POWER
+2F13 KANGXI RADICAL WRAP
+2F14 KANGXI RADICAL SPOON
+2F15 KANGXI RADICAL RIGHT OPEN BOX
+2F16 KANGXI RADICAL HIDING ENCLOSURE
+2F17 KANGXI RADICAL TEN
+2F18 KANGXI RADICAL DIVINATION
+2F19 KANGXI RADICAL SEAL
+2F1A KANGXI RADICAL CLIFF
+2F1B KANGXI RADICAL PRIVATE
+2F1C KANGXI RADICAL AGAIN
+2F1D KANGXI RADICAL MOUTH
+2F1E KANGXI RADICAL ENCLOSURE
+2F1F KANGXI RADICAL EARTH
+2F20 KANGXI RADICAL SCHOLAR
+2F21 KANGXI RADICAL GO
+2F22 KANGXI RADICAL GO SLOWLY
+2F23 KANGXI RADICAL EVENING
+2F24 KANGXI RADICAL BIG
+2F25 KANGXI RADICAL WOMAN
+2F26 KANGXI RADICAL CHILD
+2F27 KANGXI RADICAL ROOF
+2F28 KANGXI RADICAL INCH
+2F29 KANGXI RADICAL SMALL
+2F2A KANGXI RADICAL LAME
+2F2B KANGXI RADICAL CORPSE
+2F2C KANGXI RADICAL SPROUT
+2F2D KANGXI RADICAL MOUNTAIN
+2F2E KANGXI RADICAL RIVER
+2F2F KANGXI RADICAL WORK
+2F30 KANGXI RADICAL ONESELF
+2F31 KANGXI RADICAL TURBAN
+2F32 KANGXI RADICAL DRY
+2F33 KANGXI RADICAL SHORT THREAD
+2F34 KANGXI RADICAL DOTTED CLIFF
+2F35 KANGXI RADICAL LONG STRIDE
+2F36 KANGXI RADICAL TWO HANDS
+2F37 KANGXI RADICAL SHOOT
+2F38 KANGXI RADICAL BOW
+2F39 KANGXI RADICAL SNOUT
+2F3A KANGXI RADICAL BRISTLE
+2F3B KANGXI RADICAL STEP
+2F3C KANGXI RADICAL HEART
+2F3D KANGXI RADICAL HALBERD
+2F3E KANGXI RADICAL DOOR
+2F3F KANGXI RADICAL HAND
+2F40 KANGXI RADICAL BRANCH
+2F41 KANGXI RADICAL RAP
+2F42 KANGXI RADICAL SCRIPT
+2F43 KANGXI RADICAL DIPPER
+2F44 KANGXI RADICAL AXE
+2F45 KANGXI RADICAL SQUARE
+2F46 KANGXI RADICAL NOT
+2F47 KANGXI RADICAL SUN
+2F48 KANGXI RADICAL SAY
+2F49 KANGXI RADICAL MOON
+2F4A KANGXI RADICAL TREE
+2F4B KANGXI RADICAL LACK
+2F4C KANGXI RADICAL STOP
+2F4D KANGXI RADICAL DEATH
+2F4E KANGXI RADICAL WEAPON
+2F4F KANGXI RADICAL DO NOT
+2F50 KANGXI RADICAL COMPARE
+2F51 KANGXI RADICAL FUR
+2F52 KANGXI RADICAL CLAN
+2F53 KANGXI RADICAL STEAM
+2F54 KANGXI RADICAL WATER
+2F55 KANGXI RADICAL FIRE
+2F56 KANGXI RADICAL CLAW
+2F57 KANGXI RADICAL FATHER
+2F58 KANGXI RADICAL DOUBLE X
+2F59 KANGXI RADICAL HALF TREE TRUNK
+2F5A KANGXI RADICAL SLICE
+2F5B KANGXI RADICAL FANG
+2F5C KANGXI RADICAL COW
+2F5D KANGXI RADICAL DOG
+2F5E KANGXI RADICAL PROFOUND
+2F5F KANGXI RADICAL JADE
+2F60 KANGXI RADICAL MELON
+2F61 KANGXI RADICAL TILE
+2F62 KANGXI RADICAL SWEET
+2F63 KANGXI RADICAL LIFE
+2F64 KANGXI RADICAL USE
+2F65 KANGXI RADICAL FIELD
+2F66 KANGXI RADICAL BOLT OF CLOTH
+2F67 KANGXI RADICAL SICKNESS
+2F68 KANGXI RADICAL DOTTED TENT
+2F69 KANGXI RADICAL WHITE
+2F6A KANGXI RADICAL SKIN
+2F6B KANGXI RADICAL DISH
+2F6C KANGXI RADICAL EYE
+2F6D KANGXI RADICAL SPEAR
+2F6E KANGXI RADICAL ARROW
+2F6F KANGXI RADICAL STONE
+2F70 KANGXI RADICAL SPIRIT
+2F71 KANGXI RADICAL TRACK
+2F72 KANGXI RADICAL GRAIN
+2F73 KANGXI RADICAL CAVE
+2F74 KANGXI RADICAL STAND
+2F75 KANGXI RADICAL BAMBOO
+2F76 KANGXI RADICAL RICE
+2F77 KANGXI RADICAL SILK
+2F78 KANGXI RADICAL JAR
+2F79 KANGXI RADICAL NET
+2F7A KANGXI RADICAL SHEEP
+2F7B KANGXI RADICAL FEATHER
+2F7C KANGXI RADICAL OLD
+2F7D KANGXI RADICAL AND
+2F7E KANGXI RADICAL PLOW
+2F7F KANGXI RADICAL EAR
+2F80 KANGXI RADICAL BRUSH
+2F81 KANGXI RADICAL MEAT
+2F82 KANGXI RADICAL MINISTER
+2F83 KANGXI RADICAL SELF
+2F84 KANGXI RADICAL ARRIVE
+2F85 KANGXI RADICAL MORTAR
+2F86 KANGXI RADICAL TONGUE
+2F87 KANGXI RADICAL OPPOSE
+2F88 KANGXI RADICAL BOAT
+2F89 KANGXI RADICAL STOPPING
+2F8A KANGXI RADICAL COLOR
+2F8B KANGXI RADICAL GRASS
+2F8C KANGXI RADICAL TIGER
+2F8D KANGXI RADICAL INSECT
+2F8E KANGXI RADICAL BLOOD
+2F8F KANGXI RADICAL WALK ENCLOSURE
+2F90 KANGXI RADICAL CLOTHES
+2F91 KANGXI RADICAL WEST
+2F92 KANGXI RADICAL SEE
+2F93 KANGXI RADICAL HORN
+2F94 KANGXI RADICAL SPEECH
+2F95 KANGXI RADICAL VALLEY
+2F96 KANGXI RADICAL BEAN
+2F97 KANGXI RADICAL PIG
+2F98 KANGXI RADICAL BADGER
+2F99 KANGXI RADICAL SHELL
+2F9A KANGXI RADICAL RED
+2F9B KANGXI RADICAL RUN
+2F9C KANGXI RADICAL FOOT
+2F9D KANGXI RADICAL BODY
+2F9E KANGXI RADICAL CART
+2F9F KANGXI RADICAL BITTER
+2FA0 KANGXI RADICAL MORNING
+2FA1 KANGXI RADICAL WALK
+2FA2 KANGXI RADICAL CITY
+2FA3 KANGXI RADICAL WINE
+2FA4 KANGXI RADICAL DISTINGUISH
+2FA5 KANGXI RADICAL VILLAGE
+2FA6 KANGXI RADICAL GOLD
+2FA7 KANGXI RADICAL LONG
+2FA8 KANGXI RADICAL GATE
+2FA9 KANGXI RADICAL MOUND
+2FAA KANGXI RADICAL SLAVE
+2FAB KANGXI RADICAL SHORT TAILED BIRD
+2FAC KANGXI RADICAL RAIN
+2FAD KANGXI RADICAL BLUE
+2FAE KANGXI RADICAL WRONG
+2FAF KANGXI RADICAL FACE
+2FB0 KANGXI RADICAL LEATHER
+2FB1 KANGXI RADICAL TANNED LEATHER
+2FB2 KANGXI RADICAL LEEK
+2FB3 KANGXI RADICAL SOUND
+2FB4 KANGXI RADICAL LEAF
+2FB5 KANGXI RADICAL WIND
+2FB6 KANGXI RADICAL FLY
+2FB7 KANGXI RADICAL EAT
+2FB8 KANGXI RADICAL HEAD
+2FB9 KANGXI RADICAL FRAGRANT
+2FBA KANGXI RADICAL HORSE
+2FBB KANGXI RADICAL BONE
+2FBC KANGXI RADICAL TALL
+2FBD KANGXI RADICAL HAIR
+2FBE KANGXI RADICAL FIGHT
+2FBF KANGXI RADICAL SACRIFICIAL WINE
+2FC0 KANGXI RADICAL CAULDRON
+2FC1 KANGXI RADICAL GHOST
+2FC2 KANGXI RADICAL FISH
+2FC3 KANGXI RADICAL BIRD
+2FC4 KANGXI RADICAL SALT
+2FC5 KANGXI RADICAL DEER
+2FC6 KANGXI RADICAL WHEAT
+2FC7 KANGXI RADICAL HEMP
+2FC8 KANGXI RADICAL YELLOW
+2FC9 KANGXI RADICAL MILLET
+2FCA KANGXI RADICAL BLACK
+2FCB KANGXI RADICAL EMBROIDERY
+2FCC KANGXI RADICAL FROG
+2FCD KANGXI RADICAL TRIPOD
+2FCE KANGXI RADICAL DRUM
+2FCF KANGXI RADICAL RAT
+2FD0 KANGXI RADICAL NOSE
+2FD1 KANGXI RADICAL EVEN
+2FD2 KANGXI RADICAL TOOTH
+2FD3 KANGXI RADICAL DRAGON
+2FD4 KANGXI RADICAL TURTLE
+2FD5 KANGXI RADICAL FLUTE
+2FF0 IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT
+2FF1 IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW
+2FF2 IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT
+2FF3 IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW
+2FF4 IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND
+2FF5 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE
+2FF6 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW
+2FF7 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT
+2FF8 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT
+2FF9 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT
+2FFA IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT
+2FFB IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+3000 IDEOGRAPHIC SPACE
+3001 IDEOGRAPHIC COMMA
+3002 IDEOGRAPHIC FULL STOP
+3003 DITTO MARK
+3004 JAPANESE INDUSTRIAL STANDARD SYMBOL
+3005 IDEOGRAPHIC ITERATION MARK
+3006 IDEOGRAPHIC CLOSING MARK
+3007 IDEOGRAPHIC NUMBER ZERO
+3008 LEFT ANGLE BRACKET
+3009 RIGHT ANGLE BRACKET
+300A LEFT DOUBLE ANGLE BRACKET
+300B RIGHT DOUBLE ANGLE BRACKET
+300C LEFT CORNER BRACKET
+300D RIGHT CORNER BRACKET
+300E LEFT WHITE CORNER BRACKET
+300F RIGHT WHITE CORNER BRACKET
+3010 LEFT BLACK LENTICULAR BRACKET
+3011 RIGHT BLACK LENTICULAR BRACKET
+3012 POSTAL MARK
+3013 GETA MARK
+3014 LEFT TORTOISE SHELL BRACKET
+3015 RIGHT TORTOISE SHELL BRACKET
+3016 LEFT WHITE LENTICULAR BRACKET
+3017 RIGHT WHITE LENTICULAR BRACKET
+3018 LEFT WHITE TORTOISE SHELL BRACKET
+3019 RIGHT WHITE TORTOISE SHELL BRACKET
+301A LEFT WHITE SQUARE BRACKET
+301B RIGHT WHITE SQUARE BRACKET
+301C WAVE DASH
+301D REVERSED DOUBLE PRIME QUOTATION MARK
+301E DOUBLE PRIME QUOTATION MARK
+301F LOW DOUBLE PRIME QUOTATION MARK
+3020 POSTAL MARK FACE
+3021 HANGZHOU NUMERAL ONE
+3022 HANGZHOU NUMERAL TWO
+3023 HANGZHOU NUMERAL THREE
+3024 HANGZHOU NUMERAL FOUR
+3025 HANGZHOU NUMERAL FIVE
+3026 HANGZHOU NUMERAL SIX
+3027 HANGZHOU NUMERAL SEVEN
+3028 HANGZHOU NUMERAL EIGHT
+3029 HANGZHOU NUMERAL NINE
+302A IDEOGRAPHIC LEVEL TONE MARK
+302B IDEOGRAPHIC RISING TONE MARK
+302C IDEOGRAPHIC DEPARTING TONE MARK
+302D IDEOGRAPHIC ENTERING TONE MARK
+302E HANGUL SINGLE DOT TONE MARK
+302F HANGUL DOUBLE DOT TONE MARK
+3030 WAVY DASH
+3031 VERTICAL KANA REPEAT MARK
+3032 VERTICAL KANA REPEAT WITH VOICED SOUND MARK
+3033 VERTICAL KANA REPEAT MARK UPPER HALF
+3034 VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF
+3035 VERTICAL KANA REPEAT MARK LOWER HALF
+3036 CIRCLED POSTAL MARK
+3037 IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+3038 HANGZHOU NUMERAL TEN
+3039 HANGZHOU NUMERAL TWENTY
+303A HANGZHOU NUMERAL THIRTY
+303B VERTICAL IDEOGRAPHIC ITERATION MARK
+303C MASU MARK
+303D PART ALTERNATION MARK
+303E IDEOGRAPHIC VARIATION INDICATOR
+303F IDEOGRAPHIC HALF FILL SPACE
+3041 HIRAGANA LETTER SMALL A
+3042 HIRAGANA LETTER A
+3043 HIRAGANA LETTER SMALL I
+3044 HIRAGANA LETTER I
+3045 HIRAGANA LETTER SMALL U
+3046 HIRAGANA LETTER U
+3047 HIRAGANA LETTER SMALL E
+3048 HIRAGANA LETTER E
+3049 HIRAGANA LETTER SMALL O
+304A HIRAGANA LETTER O
+304B HIRAGANA LETTER KA
+304C HIRAGANA LETTER GA
+304D HIRAGANA LETTER KI
+304E HIRAGANA LETTER GI
+304F HIRAGANA LETTER KU
+3050 HIRAGANA LETTER GU
+3051 HIRAGANA LETTER KE
+3052 HIRAGANA LETTER GE
+3053 HIRAGANA LETTER KO
+3054 HIRAGANA LETTER GO
+3055 HIRAGANA LETTER SA
+3056 HIRAGANA LETTER ZA
+3057 HIRAGANA LETTER SI
+3058 HIRAGANA LETTER ZI
+3059 HIRAGANA LETTER SU
+305A HIRAGANA LETTER ZU
+305B HIRAGANA LETTER SE
+305C HIRAGANA LETTER ZE
+305D HIRAGANA LETTER SO
+305E HIRAGANA LETTER ZO
+305F HIRAGANA LETTER TA
+3060 HIRAGANA LETTER DA
+3061 HIRAGANA LETTER TI
+3062 HIRAGANA LETTER DI
+3063 HIRAGANA LETTER SMALL TU
+3064 HIRAGANA LETTER TU
+3065 HIRAGANA LETTER DU
+3066 HIRAGANA LETTER TE
+3067 HIRAGANA LETTER DE
+3068 HIRAGANA LETTER TO
+3069 HIRAGANA LETTER DO
+306A HIRAGANA LETTER NA
+306B HIRAGANA LETTER NI
+306C HIRAGANA LETTER NU
+306D HIRAGANA LETTER NE
+306E HIRAGANA LETTER NO
+306F HIRAGANA LETTER HA
+3070 HIRAGANA LETTER BA
+3071 HIRAGANA LETTER PA
+3072 HIRAGANA LETTER HI
+3073 HIRAGANA LETTER BI
+3074 HIRAGANA LETTER PI
+3075 HIRAGANA LETTER HU
+3076 HIRAGANA LETTER BU
+3077 HIRAGANA LETTER PU
+3078 HIRAGANA LETTER HE
+3079 HIRAGANA LETTER BE
+307A HIRAGANA LETTER PE
+307B HIRAGANA LETTER HO
+307C HIRAGANA LETTER BO
+307D HIRAGANA LETTER PO
+307E HIRAGANA LETTER MA
+307F HIRAGANA LETTER MI
+3080 HIRAGANA LETTER MU
+3081 HIRAGANA LETTER ME
+3082 HIRAGANA LETTER MO
+3083 HIRAGANA LETTER SMALL YA
+3084 HIRAGANA LETTER YA
+3085 HIRAGANA LETTER SMALL YU
+3086 HIRAGANA LETTER YU
+3087 HIRAGANA LETTER SMALL YO
+3088 HIRAGANA LETTER YO
+3089 HIRAGANA LETTER RA
+308A HIRAGANA LETTER RI
+308B HIRAGANA LETTER RU
+308C HIRAGANA LETTER RE
+308D HIRAGANA LETTER RO
+308E HIRAGANA LETTER SMALL WA
+308F HIRAGANA LETTER WA
+3090 HIRAGANA LETTER WI
+3091 HIRAGANA LETTER WE
+3092 HIRAGANA LETTER WO
+3093 HIRAGANA LETTER N
+3094 HIRAGANA LETTER VU
+3095 HIRAGANA LETTER SMALL KA
+3096 HIRAGANA LETTER SMALL KE
+3099 COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+309A COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309B KATAKANA-HIRAGANA VOICED SOUND MARK
+309C KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309D HIRAGANA ITERATION MARK
+309E HIRAGANA VOICED ITERATION MARK
+309F HIRAGANA DIGRAPH YORI
+30A0 KATAKANA-HIRAGANA DOUBLE HYPHEN
+30A1 KATAKANA LETTER SMALL A
+30A2 KATAKANA LETTER A
+30A3 KATAKANA LETTER SMALL I
+30A4 KATAKANA LETTER I
+30A5 KATAKANA LETTER SMALL U
+30A6 KATAKANA LETTER U
+30A7 KATAKANA LETTER SMALL E
+30A8 KATAKANA LETTER E
+30A9 KATAKANA LETTER SMALL O
+30AA KATAKANA LETTER O
+30AB KATAKANA LETTER KA
+30AC KATAKANA LETTER GA
+30AD KATAKANA LETTER KI
+30AE KATAKANA LETTER GI
+30AF KATAKANA LETTER KU
+30B0 KATAKANA LETTER GU
+30B1 KATAKANA LETTER KE
+30B2 KATAKANA LETTER GE
+30B3 KATAKANA LETTER KO
+30B4 KATAKANA LETTER GO
+30B5 KATAKANA LETTER SA
+30B6 KATAKANA LETTER ZA
+30B7 KATAKANA LETTER SI
+30B8 KATAKANA LETTER ZI
+30B9 KATAKANA LETTER SU
+30BA KATAKANA LETTER ZU
+30BB KATAKANA LETTER SE
+30BC KATAKANA LETTER ZE
+30BD KATAKANA LETTER SO
+30BE KATAKANA LETTER ZO
+30BF KATAKANA LETTER TA
+30C0 KATAKANA LETTER DA
+30C1 KATAKANA LETTER TI
+30C2 KATAKANA LETTER DI
+30C3 KATAKANA LETTER SMALL TU
+30C4 KATAKANA LETTER TU
+30C5 KATAKANA LETTER DU
+30C6 KATAKANA LETTER TE
+30C7 KATAKANA LETTER DE
+30C8 KATAKANA LETTER TO
+30C9 KATAKANA LETTER DO
+30CA KATAKANA LETTER NA
+30CB KATAKANA LETTER NI
+30CC KATAKANA LETTER NU
+30CD KATAKANA LETTER NE
+30CE KATAKANA LETTER NO
+30CF KATAKANA LETTER HA
+30D0 KATAKANA LETTER BA
+30D1 KATAKANA LETTER PA
+30D2 KATAKANA LETTER HI
+30D3 KATAKANA LETTER BI
+30D4 KATAKANA LETTER PI
+30D5 KATAKANA LETTER HU
+30D6 KATAKANA LETTER BU
+30D7 KATAKANA LETTER PU
+30D8 KATAKANA LETTER HE
+30D9 KATAKANA LETTER BE
+30DA KATAKANA LETTER PE
+30DB KATAKANA LETTER HO
+30DC KATAKANA LETTER BO
+30DD KATAKANA LETTER PO
+30DE KATAKANA LETTER MA
+30DF KATAKANA LETTER MI
+30E0 KATAKANA LETTER MU
+30E1 KATAKANA LETTER ME
+30E2 KATAKANA LETTER MO
+30E3 KATAKANA LETTER SMALL YA
+30E4 KATAKANA LETTER YA
+30E5 KATAKANA LETTER SMALL YU
+30E6 KATAKANA LETTER YU
+30E7 KATAKANA LETTER SMALL YO
+30E8 KATAKANA LETTER YO
+30E9 KATAKANA LETTER RA
+30EA KATAKANA LETTER RI
+30EB KATAKANA LETTER RU
+30EC KATAKANA LETTER RE
+30ED KATAKANA LETTER RO
+30EE KATAKANA LETTER SMALL WA
+30EF KATAKANA LETTER WA
+30F0 KATAKANA LETTER WI
+30F1 KATAKANA LETTER WE
+30F2 KATAKANA LETTER WO
+30F3 KATAKANA LETTER N
+30F4 KATAKANA LETTER VU
+30F5 KATAKANA LETTER SMALL KA
+30F6 KATAKANA LETTER SMALL KE
+30F7 KATAKANA LETTER VA
+30F8 KATAKANA LETTER VI
+30F9 KATAKANA LETTER VE
+30FA KATAKANA LETTER VO
+30FB KATAKANA MIDDLE DOT
+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK
+30FD KATAKANA ITERATION MARK
+30FE KATAKANA VOICED ITERATION MARK
+30FF KATAKANA DIGRAPH KOTO
+3105 BOPOMOFO LETTER B
+3106 BOPOMOFO LETTER P
+3107 BOPOMOFO LETTER M
+3108 BOPOMOFO LETTER F
+3109 BOPOMOFO LETTER D
+310A BOPOMOFO LETTER T
+310B BOPOMOFO LETTER N
+310C BOPOMOFO LETTER L
+310D BOPOMOFO LETTER G
+310E BOPOMOFO LETTER K
+310F BOPOMOFO LETTER H
+3110 BOPOMOFO LETTER J
+3111 BOPOMOFO LETTER Q
+3112 BOPOMOFO LETTER X
+3113 BOPOMOFO LETTER ZH
+3114 BOPOMOFO LETTER CH
+3115 BOPOMOFO LETTER SH
+3116 BOPOMOFO LETTER R
+3117 BOPOMOFO LETTER Z
+3118 BOPOMOFO LETTER C
+3119 BOPOMOFO LETTER S
+311A BOPOMOFO LETTER A
+311B BOPOMOFO LETTER O
+311C BOPOMOFO LETTER E
+311D BOPOMOFO LETTER EH
+311E BOPOMOFO LETTER AI
+311F BOPOMOFO LETTER EI
+3120 BOPOMOFO LETTER AU
+3121 BOPOMOFO LETTER OU
+3122 BOPOMOFO LETTER AN
+3123 BOPOMOFO LETTER EN
+3124 BOPOMOFO LETTER ANG
+3125 BOPOMOFO LETTER ENG
+3126 BOPOMOFO LETTER ER
+3127 BOPOMOFO LETTER I
+3128 BOPOMOFO LETTER U
+3129 BOPOMOFO LETTER IU
+312A BOPOMOFO LETTER V
+312B BOPOMOFO LETTER NG
+312C BOPOMOFO LETTER GN
+3131 HANGUL LETTER KIYEOK
+3132 HANGUL LETTER SSANGKIYEOK
+3133 HANGUL LETTER KIYEOK-SIOS
+3134 HANGUL LETTER NIEUN
+3135 HANGUL LETTER NIEUN-CIEUC
+3136 HANGUL LETTER NIEUN-HIEUH
+3137 HANGUL LETTER TIKEUT
+3138 HANGUL LETTER SSANGTIKEUT
+3139 HANGUL LETTER RIEUL
+313A HANGUL LETTER RIEUL-KIYEOK
+313B HANGUL LETTER RIEUL-MIEUM
+313C HANGUL LETTER RIEUL-PIEUP
+313D HANGUL LETTER RIEUL-SIOS
+313E HANGUL LETTER RIEUL-THIEUTH
+313F HANGUL LETTER RIEUL-PHIEUPH
+3140 HANGUL LETTER RIEUL-HIEUH
+3141 HANGUL LETTER MIEUM
+3142 HANGUL LETTER PIEUP
+3143 HANGUL LETTER SSANGPIEUP
+3144 HANGUL LETTER PIEUP-SIOS
+3145 HANGUL LETTER SIOS
+3146 HANGUL LETTER SSANGSIOS
+3147 HANGUL LETTER IEUNG
+3148 HANGUL LETTER CIEUC
+3149 HANGUL LETTER SSANGCIEUC
+314A HANGUL LETTER CHIEUCH
+314B HANGUL LETTER KHIEUKH
+314C HANGUL LETTER THIEUTH
+314D HANGUL LETTER PHIEUPH
+314E HANGUL LETTER HIEUH
+314F HANGUL LETTER A
+3150 HANGUL LETTER AE
+3151 HANGUL LETTER YA
+3152 HANGUL LETTER YAE
+3153 HANGUL LETTER EO
+3154 HANGUL LETTER E
+3155 HANGUL LETTER YEO
+3156 HANGUL LETTER YE
+3157 HANGUL LETTER O
+3158 HANGUL LETTER WA
+3159 HANGUL LETTER WAE
+315A HANGUL LETTER OE
+315B HANGUL LETTER YO
+315C HANGUL LETTER U
+315D HANGUL LETTER WEO
+315E HANGUL LETTER WE
+315F HANGUL LETTER WI
+3160 HANGUL LETTER YU
+3161 HANGUL LETTER EU
+3162 HANGUL LETTER YI
+3163 HANGUL LETTER I
+3164 HANGUL FILLER
+3165 HANGUL LETTER SSANGNIEUN
+3166 HANGUL LETTER NIEUN-TIKEUT
+3167 HANGUL LETTER NIEUN-SIOS
+3168 HANGUL LETTER NIEUN-PANSIOS
+3169 HANGUL LETTER RIEUL-KIYEOK-SIOS
+316A HANGUL LETTER RIEUL-TIKEUT
+316B HANGUL LETTER RIEUL-PIEUP-SIOS
+316C HANGUL LETTER RIEUL-PANSIOS
+316D HANGUL LETTER RIEUL-YEORINHIEUH
+316E HANGUL LETTER MIEUM-PIEUP
+316F HANGUL LETTER MIEUM-SIOS
+3170 HANGUL LETTER MIEUM-PANSIOS
+3171 HANGUL LETTER KAPYEOUNMIEUM
+3172 HANGUL LETTER PIEUP-KIYEOK
+3173 HANGUL LETTER PIEUP-TIKEUT
+3174 HANGUL LETTER PIEUP-SIOS-KIYEOK
+3175 HANGUL LETTER PIEUP-SIOS-TIKEUT
+3176 HANGUL LETTER PIEUP-CIEUC
+3177 HANGUL LETTER PIEUP-THIEUTH
+3178 HANGUL LETTER KAPYEOUNPIEUP
+3179 HANGUL LETTER KAPYEOUNSSANGPIEUP
+317A HANGUL LETTER SIOS-KIYEOK
+317B HANGUL LETTER SIOS-NIEUN
+317C HANGUL LETTER SIOS-TIKEUT
+317D HANGUL LETTER SIOS-PIEUP
+317E HANGUL LETTER SIOS-CIEUC
+317F HANGUL LETTER PANSIOS
+3180 HANGUL LETTER SSANGIEUNG
+3181 HANGUL LETTER YESIEUNG
+3182 HANGUL LETTER YESIEUNG-SIOS
+3183 HANGUL LETTER YESIEUNG-PANSIOS
+3184 HANGUL LETTER KAPYEOUNPHIEUPH
+3185 HANGUL LETTER SSANGHIEUH
+3186 HANGUL LETTER YEORINHIEUH
+3187 HANGUL LETTER YO-YA
+3188 HANGUL LETTER YO-YAE
+3189 HANGUL LETTER YO-I
+318A HANGUL LETTER YU-YEO
+318B HANGUL LETTER YU-YE
+318C HANGUL LETTER YU-I
+318D HANGUL LETTER ARAEA
+318E HANGUL LETTER ARAEAE
+3190 IDEOGRAPHIC ANNOTATION LINKING MARK
+3191 IDEOGRAPHIC ANNOTATION REVERSE MARK
+3192 IDEOGRAPHIC ANNOTATION ONE MARK
+3193 IDEOGRAPHIC ANNOTATION TWO MARK
+3194 IDEOGRAPHIC ANNOTATION THREE MARK
+3195 IDEOGRAPHIC ANNOTATION FOUR MARK
+3196 IDEOGRAPHIC ANNOTATION TOP MARK
+3197 IDEOGRAPHIC ANNOTATION MIDDLE MARK
+3198 IDEOGRAPHIC ANNOTATION BOTTOM MARK
+3199 IDEOGRAPHIC ANNOTATION FIRST MARK
+319A IDEOGRAPHIC ANNOTATION SECOND MARK
+319B IDEOGRAPHIC ANNOTATION THIRD MARK
+319C IDEOGRAPHIC ANNOTATION FOURTH MARK
+319D IDEOGRAPHIC ANNOTATION HEAVEN MARK
+319E IDEOGRAPHIC ANNOTATION EARTH MARK
+319F IDEOGRAPHIC ANNOTATION MAN MARK
+31A0 BOPOMOFO LETTER BU
+31A1 BOPOMOFO LETTER ZI
+31A2 BOPOMOFO LETTER JI
+31A3 BOPOMOFO LETTER GU
+31A4 BOPOMOFO LETTER EE
+31A5 BOPOMOFO LETTER ENN
+31A6 BOPOMOFO LETTER OO
+31A7 BOPOMOFO LETTER ONN
+31A8 BOPOMOFO LETTER IR
+31A9 BOPOMOFO LETTER ANN
+31AA BOPOMOFO LETTER INN
+31AB BOPOMOFO LETTER UNN
+31AC BOPOMOFO LETTER IM
+31AD BOPOMOFO LETTER NGG
+31AE BOPOMOFO LETTER AINN
+31AF BOPOMOFO LETTER AUNN
+31B0 BOPOMOFO LETTER AM
+31B1 BOPOMOFO LETTER OM
+31B2 BOPOMOFO LETTER ONG
+31B3 BOPOMOFO LETTER INNN
+31B4 BOPOMOFO FINAL LETTER P
+31B5 BOPOMOFO FINAL LETTER T
+31B6 BOPOMOFO FINAL LETTER K
+31B7 BOPOMOFO FINAL LETTER H
+31F0 KATAKANA LETTER SMALL KU
+31F1 KATAKANA LETTER SMALL SI
+31F2 KATAKANA LETTER SMALL SU
+31F3 KATAKANA LETTER SMALL TO
+31F4 KATAKANA LETTER SMALL NU
+31F5 KATAKANA LETTER SMALL HA
+31F6 KATAKANA LETTER SMALL HI
+31F7 KATAKANA LETTER SMALL HU
+31F8 KATAKANA LETTER SMALL HE
+31F9 KATAKANA LETTER SMALL HO
+31FA KATAKANA LETTER SMALL MU
+31FB KATAKANA LETTER SMALL RA
+31FC KATAKANA LETTER SMALL RI
+31FD KATAKANA LETTER SMALL RU
+31FE KATAKANA LETTER SMALL RE
+31FF KATAKANA LETTER SMALL RO
+3200 PARENTHESIZED HANGUL KIYEOK
+3201 PARENTHESIZED HANGUL NIEUN
+3202 PARENTHESIZED HANGUL TIKEUT
+3203 PARENTHESIZED HANGUL RIEUL
+3204 PARENTHESIZED HANGUL MIEUM
+3205 PARENTHESIZED HANGUL PIEUP
+3206 PARENTHESIZED HANGUL SIOS
+3207 PARENTHESIZED HANGUL IEUNG
+3208 PARENTHESIZED HANGUL CIEUC
+3209 PARENTHESIZED HANGUL CHIEUCH
+320A PARENTHESIZED HANGUL KHIEUKH
+320B PARENTHESIZED HANGUL THIEUTH
+320C PARENTHESIZED HANGUL PHIEUPH
+320D PARENTHESIZED HANGUL HIEUH
+320E PARENTHESIZED HANGUL KIYEOK A
+320F PARENTHESIZED HANGUL NIEUN A
+3210 PARENTHESIZED HANGUL TIKEUT A
+3211 PARENTHESIZED HANGUL RIEUL A
+3212 PARENTHESIZED HANGUL MIEUM A
+3213 PARENTHESIZED HANGUL PIEUP A
+3214 PARENTHESIZED HANGUL SIOS A
+3215 PARENTHESIZED HANGUL IEUNG A
+3216 PARENTHESIZED HANGUL CIEUC A
+3217 PARENTHESIZED HANGUL CHIEUCH A
+3218 PARENTHESIZED HANGUL KHIEUKH A
+3219 PARENTHESIZED HANGUL THIEUTH A
+321A PARENTHESIZED HANGUL PHIEUPH A
+321B PARENTHESIZED HANGUL HIEUH A
+321C PARENTHESIZED HANGUL CIEUC U
+3220 PARENTHESIZED IDEOGRAPH ONE
+3221 PARENTHESIZED IDEOGRAPH TWO
+3222 PARENTHESIZED IDEOGRAPH THREE
+3223 PARENTHESIZED IDEOGRAPH FOUR
+3224 PARENTHESIZED IDEOGRAPH FIVE
+3225 PARENTHESIZED IDEOGRAPH SIX
+3226 PARENTHESIZED IDEOGRAPH SEVEN
+3227 PARENTHESIZED IDEOGRAPH EIGHT
+3228 PARENTHESIZED IDEOGRAPH NINE
+3229 PARENTHESIZED IDEOGRAPH TEN
+322A PARENTHESIZED IDEOGRAPH MOON
+322B PARENTHESIZED IDEOGRAPH FIRE
+322C PARENTHESIZED IDEOGRAPH WATER
+322D PARENTHESIZED IDEOGRAPH WOOD
+322E PARENTHESIZED IDEOGRAPH METAL
+322F PARENTHESIZED IDEOGRAPH EARTH
+3230 PARENTHESIZED IDEOGRAPH SUN
+3231 PARENTHESIZED IDEOGRAPH STOCK
+3232 PARENTHESIZED IDEOGRAPH HAVE
+3233 PARENTHESIZED IDEOGRAPH SOCIETY
+3234 PARENTHESIZED IDEOGRAPH NAME
+3235 PARENTHESIZED IDEOGRAPH SPECIAL
+3236 PARENTHESIZED IDEOGRAPH FINANCIAL
+3237 PARENTHESIZED IDEOGRAPH CONGRATULATION
+3238 PARENTHESIZED IDEOGRAPH LABOR
+3239 PARENTHESIZED IDEOGRAPH REPRESENT
+323A PARENTHESIZED IDEOGRAPH CALL
+323B PARENTHESIZED IDEOGRAPH STUDY
+323C PARENTHESIZED IDEOGRAPH SUPERVISE
+323D PARENTHESIZED IDEOGRAPH ENTERPRISE
+323E PARENTHESIZED IDEOGRAPH RESOURCE
+323F PARENTHESIZED IDEOGRAPH ALLIANCE
+3240 PARENTHESIZED IDEOGRAPH FESTIVAL
+3241 PARENTHESIZED IDEOGRAPH REST
+3242 PARENTHESIZED IDEOGRAPH SELF
+3243 PARENTHESIZED IDEOGRAPH REACH
+3251 CIRCLED NUMBER TWENTY ONE
+3252 CIRCLED NUMBER TWENTY TWO
+3253 CIRCLED NUMBER TWENTY THREE
+3254 CIRCLED NUMBER TWENTY FOUR
+3255 CIRCLED NUMBER TWENTY FIVE
+3256 CIRCLED NUMBER TWENTY SIX
+3257 CIRCLED NUMBER TWENTY SEVEN
+3258 CIRCLED NUMBER TWENTY EIGHT
+3259 CIRCLED NUMBER TWENTY NINE
+325A CIRCLED NUMBER THIRTY
+325B CIRCLED NUMBER THIRTY ONE
+325C CIRCLED NUMBER THIRTY TWO
+325D CIRCLED NUMBER THIRTY THREE
+325E CIRCLED NUMBER THIRTY FOUR
+325F CIRCLED NUMBER THIRTY FIVE
+3260 CIRCLED HANGUL KIYEOK
+3261 CIRCLED HANGUL NIEUN
+3262 CIRCLED HANGUL TIKEUT
+3263 CIRCLED HANGUL RIEUL
+3264 CIRCLED HANGUL MIEUM
+3265 CIRCLED HANGUL PIEUP
+3266 CIRCLED HANGUL SIOS
+3267 CIRCLED HANGUL IEUNG
+3268 CIRCLED HANGUL CIEUC
+3269 CIRCLED HANGUL CHIEUCH
+326A CIRCLED HANGUL KHIEUKH
+326B CIRCLED HANGUL THIEUTH
+326C CIRCLED HANGUL PHIEUPH
+326D CIRCLED HANGUL HIEUH
+326E CIRCLED HANGUL KIYEOK A
+326F CIRCLED HANGUL NIEUN A
+3270 CIRCLED HANGUL TIKEUT A
+3271 CIRCLED HANGUL RIEUL A
+3272 CIRCLED HANGUL MIEUM A
+3273 CIRCLED HANGUL PIEUP A
+3274 CIRCLED HANGUL SIOS A
+3275 CIRCLED HANGUL IEUNG A
+3276 CIRCLED HANGUL CIEUC A
+3277 CIRCLED HANGUL CHIEUCH A
+3278 CIRCLED HANGUL KHIEUKH A
+3279 CIRCLED HANGUL THIEUTH A
+327A CIRCLED HANGUL PHIEUPH A
+327B CIRCLED HANGUL HIEUH A
+327F KOREAN STANDARD SYMBOL
+3280 CIRCLED IDEOGRAPH ONE
+3281 CIRCLED IDEOGRAPH TWO
+3282 CIRCLED IDEOGRAPH THREE
+3283 CIRCLED IDEOGRAPH FOUR
+3284 CIRCLED IDEOGRAPH FIVE
+3285 CIRCLED IDEOGRAPH SIX
+3286 CIRCLED IDEOGRAPH SEVEN
+3287 CIRCLED IDEOGRAPH EIGHT
+3288 CIRCLED IDEOGRAPH NINE
+3289 CIRCLED IDEOGRAPH TEN
+328A CIRCLED IDEOGRAPH MOON
+328B CIRCLED IDEOGRAPH FIRE
+328C CIRCLED IDEOGRAPH WATER
+328D CIRCLED IDEOGRAPH WOOD
+328E CIRCLED IDEOGRAPH METAL
+328F CIRCLED IDEOGRAPH EARTH
+3290 CIRCLED IDEOGRAPH SUN
+3291 CIRCLED IDEOGRAPH STOCK
+3292 CIRCLED IDEOGRAPH HAVE
+3293 CIRCLED IDEOGRAPH SOCIETY
+3294 CIRCLED IDEOGRAPH NAME
+3295 CIRCLED IDEOGRAPH SPECIAL
+3296 CIRCLED IDEOGRAPH FINANCIAL
+3297 CIRCLED IDEOGRAPH CONGRATULATION
+3298 CIRCLED IDEOGRAPH LABOR
+3299 CIRCLED IDEOGRAPH SECRET
+329A CIRCLED IDEOGRAPH MALE
+329B CIRCLED IDEOGRAPH FEMALE
+329C CIRCLED IDEOGRAPH SUITABLE
+329D CIRCLED IDEOGRAPH EXCELLENT
+329E CIRCLED IDEOGRAPH PRINT
+329F CIRCLED IDEOGRAPH ATTENTION
+32A0 CIRCLED IDEOGRAPH ITEM
+32A1 CIRCLED IDEOGRAPH REST
+32A2 CIRCLED IDEOGRAPH COPY
+32A3 CIRCLED IDEOGRAPH CORRECT
+32A4 CIRCLED IDEOGRAPH HIGH
+32A5 CIRCLED IDEOGRAPH CENTRE
+32A6 CIRCLED IDEOGRAPH LOW
+32A7 CIRCLED IDEOGRAPH LEFT
+32A8 CIRCLED IDEOGRAPH RIGHT
+32A9 CIRCLED IDEOGRAPH MEDICINE
+32AA CIRCLED IDEOGRAPH RELIGION
+32AB CIRCLED IDEOGRAPH STUDY
+32AC CIRCLED IDEOGRAPH SUPERVISE
+32AD CIRCLED IDEOGRAPH ENTERPRISE
+32AE CIRCLED IDEOGRAPH RESOURCE
+32AF CIRCLED IDEOGRAPH ALLIANCE
+32B0 CIRCLED IDEOGRAPH NIGHT
+32B1 CIRCLED NUMBER THIRTY SIX
+32B2 CIRCLED NUMBER THIRTY SEVEN
+32B3 CIRCLED NUMBER THIRTY EIGHT
+32B4 CIRCLED NUMBER THIRTY NINE
+32B5 CIRCLED NUMBER FORTY
+32B6 CIRCLED NUMBER FORTY ONE
+32B7 CIRCLED NUMBER FORTY TWO
+32B8 CIRCLED NUMBER FORTY THREE
+32B9 CIRCLED NUMBER FORTY FOUR
+32BA CIRCLED NUMBER FORTY FIVE
+32BB CIRCLED NUMBER FORTY SIX
+32BC CIRCLED NUMBER FORTY SEVEN
+32BD CIRCLED NUMBER FORTY EIGHT
+32BE CIRCLED NUMBER FORTY NINE
+32BF CIRCLED NUMBER FIFTY
+32C0 IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
+32C1 IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
+32C2 IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
+32C3 IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
+32C4 IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
+32C5 IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
+32C6 IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
+32C7 IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
+32C8 IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
+32C9 IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
+32CA IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
+32CB IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
+32D0 CIRCLED KATAKANA A
+32D1 CIRCLED KATAKANA I
+32D2 CIRCLED KATAKANA U
+32D3 CIRCLED KATAKANA E
+32D4 CIRCLED KATAKANA O
+32D5 CIRCLED KATAKANA KA
+32D6 CIRCLED KATAKANA KI
+32D7 CIRCLED KATAKANA KU
+32D8 CIRCLED KATAKANA KE
+32D9 CIRCLED KATAKANA KO
+32DA CIRCLED KATAKANA SA
+32DB CIRCLED KATAKANA SI
+32DC CIRCLED KATAKANA SU
+32DD CIRCLED KATAKANA SE
+32DE CIRCLED KATAKANA SO
+32DF CIRCLED KATAKANA TA
+32E0 CIRCLED KATAKANA TI
+32E1 CIRCLED KATAKANA TU
+32E2 CIRCLED KATAKANA TE
+32E3 CIRCLED KATAKANA TO
+32E4 CIRCLED KATAKANA NA
+32E5 CIRCLED KATAKANA NI
+32E6 CIRCLED KATAKANA NU
+32E7 CIRCLED KATAKANA NE
+32E8 CIRCLED KATAKANA NO
+32E9 CIRCLED KATAKANA HA
+32EA CIRCLED KATAKANA HI
+32EB CIRCLED KATAKANA HU
+32EC CIRCLED KATAKANA HE
+32ED CIRCLED KATAKANA HO
+32EE CIRCLED KATAKANA MA
+32EF CIRCLED KATAKANA MI
+32F0 CIRCLED KATAKANA MU
+32F1 CIRCLED KATAKANA ME
+32F2 CIRCLED KATAKANA MO
+32F3 CIRCLED KATAKANA YA
+32F4 CIRCLED KATAKANA YU
+32F5 CIRCLED KATAKANA YO
+32F6 CIRCLED KATAKANA RA
+32F7 CIRCLED KATAKANA RI
+32F8 CIRCLED KATAKANA RU
+32F9 CIRCLED KATAKANA RE
+32FA CIRCLED KATAKANA RO
+32FB CIRCLED KATAKANA WA
+32FC CIRCLED KATAKANA WI
+32FD CIRCLED KATAKANA WE
+32FE CIRCLED KATAKANA WO
+3300 SQUARE APAATO
+3301 SQUARE ARUHUA
+3302 SQUARE ANPEA
+3303 SQUARE AARU
+3304 SQUARE ININGU
+3305 SQUARE INTI
+3306 SQUARE UON
+3307 SQUARE ESUKUUDO
+3308 SQUARE EEKAA
+3309 SQUARE ONSU
+330A SQUARE OOMU
+330B SQUARE KAIRI
+330C SQUARE KARATTO
+330D SQUARE KARORII
+330E SQUARE GARON
+330F SQUARE GANMA
+3310 SQUARE GIGA
+3311 SQUARE GINII
+3312 SQUARE KYURII
+3313 SQUARE GIRUDAA
+3314 SQUARE KIRO
+3315 SQUARE KIROGURAMU
+3316 SQUARE KIROMEETORU
+3317 SQUARE KIROWATTO
+3318 SQUARE GURAMU
+3319 SQUARE GURAMUTON
+331A SQUARE KURUZEIRO
+331B SQUARE KUROONE
+331C SQUARE KEESU
+331D SQUARE KORUNA
+331E SQUARE KOOPO
+331F SQUARE SAIKURU
+3320 SQUARE SANTIIMU
+3321 SQUARE SIRINGU
+3322 SQUARE SENTI
+3323 SQUARE SENTO
+3324 SQUARE DAASU
+3325 SQUARE DESI
+3326 SQUARE DORU
+3327 SQUARE TON
+3328 SQUARE NANO
+3329 SQUARE NOTTO
+332A SQUARE HAITU
+332B SQUARE PAASENTO
+332C SQUARE PAATU
+332D SQUARE BAARERU
+332E SQUARE PIASUTORU
+332F SQUARE PIKURU
+3330 SQUARE PIKO
+3331 SQUARE BIRU
+3332 SQUARE HUARADDO
+3333 SQUARE HUIITO
+3334 SQUARE BUSSYERU
+3335 SQUARE HURAN
+3336 SQUARE HEKUTAARU
+3337 SQUARE PESO
+3338 SQUARE PENIHI
+3339 SQUARE HERUTU
+333A SQUARE PENSU
+333B SQUARE PEEZI
+333C SQUARE BEETA
+333D SQUARE POINTO
+333E SQUARE BORUTO
+333F SQUARE HON
+3340 SQUARE PONDO
+3341 SQUARE HOORU
+3342 SQUARE HOON
+3343 SQUARE MAIKURO
+3344 SQUARE MAIRU
+3345 SQUARE MAHHA
+3346 SQUARE MARUKU
+3347 SQUARE MANSYON
+3348 SQUARE MIKURON
+3349 SQUARE MIRI
+334A SQUARE MIRIBAARU
+334B SQUARE MEGA
+334C SQUARE MEGATON
+334D SQUARE MEETORU
+334E SQUARE YAADO
+334F SQUARE YAARU
+3350 SQUARE YUAN
+3351 SQUARE RITTORU
+3352 SQUARE RIRA
+3353 SQUARE RUPII
+3354 SQUARE RUUBURU
+3355 SQUARE REMU
+3356 SQUARE RENTOGEN
+3357 SQUARE WATTO
+3358 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
+3359 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
+335A IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
+335B IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
+335C IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
+335D IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
+335E IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
+335F IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
+3360 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
+3361 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
+3362 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
+3363 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
+3364 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
+3365 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
+3366 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
+3367 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
+3368 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
+3369 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
+336A IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
+336B IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
+336C IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
+336D IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
+336E IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
+336F IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
+3370 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
+3371 SQUARE HPA
+3372 SQUARE DA
+3373 SQUARE AU
+3374 SQUARE BAR
+3375 SQUARE OV
+3376 SQUARE PC
+337B SQUARE ERA NAME HEISEI
+337C SQUARE ERA NAME SYOUWA
+337D SQUARE ERA NAME TAISYOU
+337E SQUARE ERA NAME MEIZI
+337F SQUARE CORPORATION
+3380 SQUARE PA AMPS
+3381 SQUARE NA
+3382 SQUARE MU A
+3383 SQUARE MA
+3384 SQUARE KA
+3385 SQUARE KB
+3386 SQUARE MB
+3387 SQUARE GB
+3388 SQUARE CAL
+3389 SQUARE KCAL
+338A SQUARE PF
+338B SQUARE NF
+338C SQUARE MU F
+338D SQUARE MU G
+338E SQUARE MG
+338F SQUARE KG
+3390 SQUARE HZ
+3391 SQUARE KHZ
+3392 SQUARE MHZ
+3393 SQUARE GHZ
+3394 SQUARE THZ
+3395 SQUARE MU L
+3396 SQUARE ML
+3397 SQUARE DL
+3398 SQUARE KL
+3399 SQUARE FM
+339A SQUARE NM
+339B SQUARE MU M
+339C SQUARE MM
+339D SQUARE CM
+339E SQUARE KM
+339F SQUARE MM SQUARED
+33A0 SQUARE CM SQUARED
+33A1 SQUARE M SQUARED
+33A2 SQUARE KM SQUARED
+33A3 SQUARE MM CUBED
+33A4 SQUARE CM CUBED
+33A5 SQUARE M CUBED
+33A6 SQUARE KM CUBED
+33A7 SQUARE M OVER S
+33A8 SQUARE M OVER S SQUARED
+33A9 SQUARE PA
+33AA SQUARE KPA
+33AB SQUARE MPA
+33AC SQUARE GPA
+33AD SQUARE RAD
+33AE SQUARE RAD OVER S
+33AF SQUARE RAD OVER S SQUARED
+33B0 SQUARE PS
+33B1 SQUARE NS
+33B2 SQUARE MU S
+33B3 SQUARE MS
+33B4 SQUARE PV
+33B5 SQUARE NV
+33B6 SQUARE MU V
+33B7 SQUARE MV
+33B8 SQUARE KV
+33B9 SQUARE MV MEGA
+33BA SQUARE PW
+33BB SQUARE NW
+33BC SQUARE MU W
+33BD SQUARE MW
+33BE SQUARE KW
+33BF SQUARE MW MEGA
+33C0 SQUARE K OHM
+33C1 SQUARE M OHM
+33C2 SQUARE AM
+33C3 SQUARE BQ
+33C4 SQUARE CC
+33C5 SQUARE CD
+33C6 SQUARE C OVER KG
+33C7 SQUARE CO
+33C8 SQUARE DB
+33C9 SQUARE GY
+33CA SQUARE HA
+33CB SQUARE HP
+33CC SQUARE IN
+33CD SQUARE KK
+33CE SQUARE KM CAPITAL
+33CF SQUARE KT
+33D0 SQUARE LM
+33D1 SQUARE LN
+33D2 SQUARE LOG
+33D3 SQUARE LX
+33D4 SQUARE MB SMALL
+33D5 SQUARE MIL
+33D6 SQUARE MOL
+33D7 SQUARE PH
+33D8 SQUARE PM
+33D9 SQUARE PPM
+33DA SQUARE PR
+33DB SQUARE SR
+33DC SQUARE SV
+33DD SQUARE WB
+33E0 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
+33E1 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
+33E2 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
+33E3 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
+33E4 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
+33E5 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
+33E6 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
+33E7 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
+33E8 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
+33E9 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
+33EA IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
+33EB IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
+33EC IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
+33ED IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
+33EE IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
+33EF IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
+33F0 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
+33F1 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
+33F2 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
+33F3 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
+33F4 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
+33F5 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
+33F6 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
+33F7 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
+33F8 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
+33F9 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
+33FA IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
+33FB IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
+33FC IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
+33FD IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
+33FE IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
+3400 4DB5 CJK Ideograph Extension A
+4E00 9FA5 CJK Ideograph
+A000 YI SYLLABLE IT
+A001 YI SYLLABLE IX
+A002 YI SYLLABLE I
+A003 YI SYLLABLE IP
+A004 YI SYLLABLE IET
+A005 YI SYLLABLE IEX
+A006 YI SYLLABLE IE
+A007 YI SYLLABLE IEP
+A008 YI SYLLABLE AT
+A009 YI SYLLABLE AX
+A00A YI SYLLABLE A
+A00B YI SYLLABLE AP
+A00C YI SYLLABLE UOX
+A00D YI SYLLABLE UO
+A00E YI SYLLABLE UOP
+A00F YI SYLLABLE OT
+A010 YI SYLLABLE OX
+A011 YI SYLLABLE O
+A012 YI SYLLABLE OP
+A013 YI SYLLABLE EX
+A014 YI SYLLABLE E
+A015 YI SYLLABLE WU
+A016 YI SYLLABLE BIT
+A017 YI SYLLABLE BIX
+A018 YI SYLLABLE BI
+A019 YI SYLLABLE BIP
+A01A YI SYLLABLE BIET
+A01B YI SYLLABLE BIEX
+A01C YI SYLLABLE BIE
+A01D YI SYLLABLE BIEP
+A01E YI SYLLABLE BAT
+A01F YI SYLLABLE BAX
+A020 YI SYLLABLE BA
+A021 YI SYLLABLE BAP
+A022 YI SYLLABLE BUOX
+A023 YI SYLLABLE BUO
+A024 YI SYLLABLE BUOP
+A025 YI SYLLABLE BOT
+A026 YI SYLLABLE BOX
+A027 YI SYLLABLE BO
+A028 YI SYLLABLE BOP
+A029 YI SYLLABLE BEX
+A02A YI SYLLABLE BE
+A02B YI SYLLABLE BEP
+A02C YI SYLLABLE BUT
+A02D YI SYLLABLE BUX
+A02E YI SYLLABLE BU
+A02F YI SYLLABLE BUP
+A030 YI SYLLABLE BURX
+A031 YI SYLLABLE BUR
+A032 YI SYLLABLE BYT
+A033 YI SYLLABLE BYX
+A034 YI SYLLABLE BY
+A035 YI SYLLABLE BYP
+A036 YI SYLLABLE BYRX
+A037 YI SYLLABLE BYR
+A038 YI SYLLABLE PIT
+A039 YI SYLLABLE PIX
+A03A YI SYLLABLE PI
+A03B YI SYLLABLE PIP
+A03C YI SYLLABLE PIEX
+A03D YI SYLLABLE PIE
+A03E YI SYLLABLE PIEP
+A03F YI SYLLABLE PAT
+A040 YI SYLLABLE PAX
+A041 YI SYLLABLE PA
+A042 YI SYLLABLE PAP
+A043 YI SYLLABLE PUOX
+A044 YI SYLLABLE PUO
+A045 YI SYLLABLE PUOP
+A046 YI SYLLABLE POT
+A047 YI SYLLABLE POX
+A048 YI SYLLABLE PO
+A049 YI SYLLABLE POP
+A04A YI SYLLABLE PUT
+A04B YI SYLLABLE PUX
+A04C YI SYLLABLE PU
+A04D YI SYLLABLE PUP
+A04E YI SYLLABLE PURX
+A04F YI SYLLABLE PUR
+A050 YI SYLLABLE PYT
+A051 YI SYLLABLE PYX
+A052 YI SYLLABLE PY
+A053 YI SYLLABLE PYP
+A054 YI SYLLABLE PYRX
+A055 YI SYLLABLE PYR
+A056 YI SYLLABLE BBIT
+A057 YI SYLLABLE BBIX
+A058 YI SYLLABLE BBI
+A059 YI SYLLABLE BBIP
+A05A YI SYLLABLE BBIET
+A05B YI SYLLABLE BBIEX
+A05C YI SYLLABLE BBIE
+A05D YI SYLLABLE BBIEP
+A05E YI SYLLABLE BBAT
+A05F YI SYLLABLE BBAX
+A060 YI SYLLABLE BBA
+A061 YI SYLLABLE BBAP
+A062 YI SYLLABLE BBUOX
+A063 YI SYLLABLE BBUO
+A064 YI SYLLABLE BBUOP
+A065 YI SYLLABLE BBOT
+A066 YI SYLLABLE BBOX
+A067 YI SYLLABLE BBO
+A068 YI SYLLABLE BBOP
+A069 YI SYLLABLE BBEX
+A06A YI SYLLABLE BBE
+A06B YI SYLLABLE BBEP
+A06C YI SYLLABLE BBUT
+A06D YI SYLLABLE BBUX
+A06E YI SYLLABLE BBU
+A06F YI SYLLABLE BBUP
+A070 YI SYLLABLE BBURX
+A071 YI SYLLABLE BBUR
+A072 YI SYLLABLE BBYT
+A073 YI SYLLABLE BBYX
+A074 YI SYLLABLE BBY
+A075 YI SYLLABLE BBYP
+A076 YI SYLLABLE NBIT
+A077 YI SYLLABLE NBIX
+A078 YI SYLLABLE NBI
+A079 YI SYLLABLE NBIP
+A07A YI SYLLABLE NBIEX
+A07B YI SYLLABLE NBIE
+A07C YI SYLLABLE NBIEP
+A07D YI SYLLABLE NBAT
+A07E YI SYLLABLE NBAX
+A07F YI SYLLABLE NBA
+A080 YI SYLLABLE NBAP
+A081 YI SYLLABLE NBOT
+A082 YI SYLLABLE NBOX
+A083 YI SYLLABLE NBO
+A084 YI SYLLABLE NBOP
+A085 YI SYLLABLE NBUT
+A086 YI SYLLABLE NBUX
+A087 YI SYLLABLE NBU
+A088 YI SYLLABLE NBUP
+A089 YI SYLLABLE NBURX
+A08A YI SYLLABLE NBUR
+A08B YI SYLLABLE NBYT
+A08C YI SYLLABLE NBYX
+A08D YI SYLLABLE NBY
+A08E YI SYLLABLE NBYP
+A08F YI SYLLABLE NBYRX
+A090 YI SYLLABLE NBYR
+A091 YI SYLLABLE HMIT
+A092 YI SYLLABLE HMIX
+A093 YI SYLLABLE HMI
+A094 YI SYLLABLE HMIP
+A095 YI SYLLABLE HMIEX
+A096 YI SYLLABLE HMIE
+A097 YI SYLLABLE HMIEP
+A098 YI SYLLABLE HMAT
+A099 YI SYLLABLE HMAX
+A09A YI SYLLABLE HMA
+A09B YI SYLLABLE HMAP
+A09C YI SYLLABLE HMUOX
+A09D YI SYLLABLE HMUO
+A09E YI SYLLABLE HMUOP
+A09F YI SYLLABLE HMOT
+A0A0 YI SYLLABLE HMOX
+A0A1 YI SYLLABLE HMO
+A0A2 YI SYLLABLE HMOP
+A0A3 YI SYLLABLE HMUT
+A0A4 YI SYLLABLE HMUX
+A0A5 YI SYLLABLE HMU
+A0A6 YI SYLLABLE HMUP
+A0A7 YI SYLLABLE HMURX
+A0A8 YI SYLLABLE HMUR
+A0A9 YI SYLLABLE HMYX
+A0AA YI SYLLABLE HMY
+A0AB YI SYLLABLE HMYP
+A0AC YI SYLLABLE HMYRX
+A0AD YI SYLLABLE HMYR
+A0AE YI SYLLABLE MIT
+A0AF YI SYLLABLE MIX
+A0B0 YI SYLLABLE MI
+A0B1 YI SYLLABLE MIP
+A0B2 YI SYLLABLE MIEX
+A0B3 YI SYLLABLE MIE
+A0B4 YI SYLLABLE MIEP
+A0B5 YI SYLLABLE MAT
+A0B6 YI SYLLABLE MAX
+A0B7 YI SYLLABLE MA
+A0B8 YI SYLLABLE MAP
+A0B9 YI SYLLABLE MUOT
+A0BA YI SYLLABLE MUOX
+A0BB YI SYLLABLE MUO
+A0BC YI SYLLABLE MUOP
+A0BD YI SYLLABLE MOT
+A0BE YI SYLLABLE MOX
+A0BF YI SYLLABLE MO
+A0C0 YI SYLLABLE MOP
+A0C1 YI SYLLABLE MEX
+A0C2 YI SYLLABLE ME
+A0C3 YI SYLLABLE MUT
+A0C4 YI SYLLABLE MUX
+A0C5 YI SYLLABLE MU
+A0C6 YI SYLLABLE MUP
+A0C7 YI SYLLABLE MURX
+A0C8 YI SYLLABLE MUR
+A0C9 YI SYLLABLE MYT
+A0CA YI SYLLABLE MYX
+A0CB YI SYLLABLE MY
+A0CC YI SYLLABLE MYP
+A0CD YI SYLLABLE FIT
+A0CE YI SYLLABLE FIX
+A0CF YI SYLLABLE FI
+A0D0 YI SYLLABLE FIP
+A0D1 YI SYLLABLE FAT
+A0D2 YI SYLLABLE FAX
+A0D3 YI SYLLABLE FA
+A0D4 YI SYLLABLE FAP
+A0D5 YI SYLLABLE FOX
+A0D6 YI SYLLABLE FO
+A0D7 YI SYLLABLE FOP
+A0D8 YI SYLLABLE FUT
+A0D9 YI SYLLABLE FUX
+A0DA YI SYLLABLE FU
+A0DB YI SYLLABLE FUP
+A0DC YI SYLLABLE FURX
+A0DD YI SYLLABLE FUR
+A0DE YI SYLLABLE FYT
+A0DF YI SYLLABLE FYX
+A0E0 YI SYLLABLE FY
+A0E1 YI SYLLABLE FYP
+A0E2 YI SYLLABLE VIT
+A0E3 YI SYLLABLE VIX
+A0E4 YI SYLLABLE VI
+A0E5 YI SYLLABLE VIP
+A0E6 YI SYLLABLE VIET
+A0E7 YI SYLLABLE VIEX
+A0E8 YI SYLLABLE VIE
+A0E9 YI SYLLABLE VIEP
+A0EA YI SYLLABLE VAT
+A0EB YI SYLLABLE VAX
+A0EC YI SYLLABLE VA
+A0ED YI SYLLABLE VAP
+A0EE YI SYLLABLE VOT
+A0EF YI SYLLABLE VOX
+A0F0 YI SYLLABLE VO
+A0F1 YI SYLLABLE VOP
+A0F2 YI SYLLABLE VEX
+A0F3 YI SYLLABLE VEP
+A0F4 YI SYLLABLE VUT
+A0F5 YI SYLLABLE VUX
+A0F6 YI SYLLABLE VU
+A0F7 YI SYLLABLE VUP
+A0F8 YI SYLLABLE VURX
+A0F9 YI SYLLABLE VUR
+A0FA YI SYLLABLE VYT
+A0FB YI SYLLABLE VYX
+A0FC YI SYLLABLE VY
+A0FD YI SYLLABLE VYP
+A0FE YI SYLLABLE VYRX
+A0FF YI SYLLABLE VYR
+A100 YI SYLLABLE DIT
+A101 YI SYLLABLE DIX
+A102 YI SYLLABLE DI
+A103 YI SYLLABLE DIP
+A104 YI SYLLABLE DIEX
+A105 YI SYLLABLE DIE
+A106 YI SYLLABLE DIEP
+A107 YI SYLLABLE DAT
+A108 YI SYLLABLE DAX
+A109 YI SYLLABLE DA
+A10A YI SYLLABLE DAP
+A10B YI SYLLABLE DUOX
+A10C YI SYLLABLE DUO
+A10D YI SYLLABLE DOT
+A10E YI SYLLABLE DOX
+A10F YI SYLLABLE DO
+A110 YI SYLLABLE DOP
+A111 YI SYLLABLE DEX
+A112 YI SYLLABLE DE
+A113 YI SYLLABLE DEP
+A114 YI SYLLABLE DUT
+A115 YI SYLLABLE DUX
+A116 YI SYLLABLE DU
+A117 YI SYLLABLE DUP
+A118 YI SYLLABLE DURX
+A119 YI SYLLABLE DUR
+A11A YI SYLLABLE TIT
+A11B YI SYLLABLE TIX
+A11C YI SYLLABLE TI
+A11D YI SYLLABLE TIP
+A11E YI SYLLABLE TIEX
+A11F YI SYLLABLE TIE
+A120 YI SYLLABLE TIEP
+A121 YI SYLLABLE TAT
+A122 YI SYLLABLE TAX
+A123 YI SYLLABLE TA
+A124 YI SYLLABLE TAP
+A125 YI SYLLABLE TUOT
+A126 YI SYLLABLE TUOX
+A127 YI SYLLABLE TUO
+A128 YI SYLLABLE TUOP
+A129 YI SYLLABLE TOT
+A12A YI SYLLABLE TOX
+A12B YI SYLLABLE TO
+A12C YI SYLLABLE TOP
+A12D YI SYLLABLE TEX
+A12E YI SYLLABLE TE
+A12F YI SYLLABLE TEP
+A130 YI SYLLABLE TUT
+A131 YI SYLLABLE TUX
+A132 YI SYLLABLE TU
+A133 YI SYLLABLE TUP
+A134 YI SYLLABLE TURX
+A135 YI SYLLABLE TUR
+A136 YI SYLLABLE DDIT
+A137 YI SYLLABLE DDIX
+A138 YI SYLLABLE DDI
+A139 YI SYLLABLE DDIP
+A13A YI SYLLABLE DDIEX
+A13B YI SYLLABLE DDIE
+A13C YI SYLLABLE DDIEP
+A13D YI SYLLABLE DDAT
+A13E YI SYLLABLE DDAX
+A13F YI SYLLABLE DDA
+A140 YI SYLLABLE DDAP
+A141 YI SYLLABLE DDUOX
+A142 YI SYLLABLE DDUO
+A143 YI SYLLABLE DDUOP
+A144 YI SYLLABLE DDOT
+A145 YI SYLLABLE DDOX
+A146 YI SYLLABLE DDO
+A147 YI SYLLABLE DDOP
+A148 YI SYLLABLE DDEX
+A149 YI SYLLABLE DDE
+A14A YI SYLLABLE DDEP
+A14B YI SYLLABLE DDUT
+A14C YI SYLLABLE DDUX
+A14D YI SYLLABLE DDU
+A14E YI SYLLABLE DDUP
+A14F YI SYLLABLE DDURX
+A150 YI SYLLABLE DDUR
+A151 YI SYLLABLE NDIT
+A152 YI SYLLABLE NDIX
+A153 YI SYLLABLE NDI
+A154 YI SYLLABLE NDIP
+A155 YI SYLLABLE NDIEX
+A156 YI SYLLABLE NDIE
+A157 YI SYLLABLE NDAT
+A158 YI SYLLABLE NDAX
+A159 YI SYLLABLE NDA
+A15A YI SYLLABLE NDAP
+A15B YI SYLLABLE NDOT
+A15C YI SYLLABLE NDOX
+A15D YI SYLLABLE NDO
+A15E YI SYLLABLE NDOP
+A15F YI SYLLABLE NDEX
+A160 YI SYLLABLE NDE
+A161 YI SYLLABLE NDEP
+A162 YI SYLLABLE NDUT
+A163 YI SYLLABLE NDUX
+A164 YI SYLLABLE NDU
+A165 YI SYLLABLE NDUP
+A166 YI SYLLABLE NDURX
+A167 YI SYLLABLE NDUR
+A168 YI SYLLABLE HNIT
+A169 YI SYLLABLE HNIX
+A16A YI SYLLABLE HNI
+A16B YI SYLLABLE HNIP
+A16C YI SYLLABLE HNIET
+A16D YI SYLLABLE HNIEX
+A16E YI SYLLABLE HNIE
+A16F YI SYLLABLE HNIEP
+A170 YI SYLLABLE HNAT
+A171 YI SYLLABLE HNAX
+A172 YI SYLLABLE HNA
+A173 YI SYLLABLE HNAP
+A174 YI SYLLABLE HNUOX
+A175 YI SYLLABLE HNUO
+A176 YI SYLLABLE HNOT
+A177 YI SYLLABLE HNOX
+A178 YI SYLLABLE HNOP
+A179 YI SYLLABLE HNEX
+A17A YI SYLLABLE HNE
+A17B YI SYLLABLE HNEP
+A17C YI SYLLABLE HNUT
+A17D YI SYLLABLE NIT
+A17E YI SYLLABLE NIX
+A17F YI SYLLABLE NI
+A180 YI SYLLABLE NIP
+A181 YI SYLLABLE NIEX
+A182 YI SYLLABLE NIE
+A183 YI SYLLABLE NIEP
+A184 YI SYLLABLE NAX
+A185 YI SYLLABLE NA
+A186 YI SYLLABLE NAP
+A187 YI SYLLABLE NUOX
+A188 YI SYLLABLE NUO
+A189 YI SYLLABLE NUOP
+A18A YI SYLLABLE NOT
+A18B YI SYLLABLE NOX
+A18C YI SYLLABLE NO
+A18D YI SYLLABLE NOP
+A18E YI SYLLABLE NEX
+A18F YI SYLLABLE NE
+A190 YI SYLLABLE NEP
+A191 YI SYLLABLE NUT
+A192 YI SYLLABLE NUX
+A193 YI SYLLABLE NU
+A194 YI SYLLABLE NUP
+A195 YI SYLLABLE NURX
+A196 YI SYLLABLE NUR
+A197 YI SYLLABLE HLIT
+A198 YI SYLLABLE HLIX
+A199 YI SYLLABLE HLI
+A19A YI SYLLABLE HLIP
+A19B YI SYLLABLE HLIEX
+A19C YI SYLLABLE HLIE
+A19D YI SYLLABLE HLIEP
+A19E YI SYLLABLE HLAT
+A19F YI SYLLABLE HLAX
+A1A0 YI SYLLABLE HLA
+A1A1 YI SYLLABLE HLAP
+A1A2 YI SYLLABLE HLUOX
+A1A3 YI SYLLABLE HLUO
+A1A4 YI SYLLABLE HLUOP
+A1A5 YI SYLLABLE HLOX
+A1A6 YI SYLLABLE HLO
+A1A7 YI SYLLABLE HLOP
+A1A8 YI SYLLABLE HLEX
+A1A9 YI SYLLABLE HLE
+A1AA YI SYLLABLE HLEP
+A1AB YI SYLLABLE HLUT
+A1AC YI SYLLABLE HLUX
+A1AD YI SYLLABLE HLU
+A1AE YI SYLLABLE HLUP
+A1AF YI SYLLABLE HLURX
+A1B0 YI SYLLABLE HLUR
+A1B1 YI SYLLABLE HLYT
+A1B2 YI SYLLABLE HLYX
+A1B3 YI SYLLABLE HLY
+A1B4 YI SYLLABLE HLYP
+A1B5 YI SYLLABLE HLYRX
+A1B6 YI SYLLABLE HLYR
+A1B7 YI SYLLABLE LIT
+A1B8 YI SYLLABLE LIX
+A1B9 YI SYLLABLE LI
+A1BA YI SYLLABLE LIP
+A1BB YI SYLLABLE LIET
+A1BC YI SYLLABLE LIEX
+A1BD YI SYLLABLE LIE
+A1BE YI SYLLABLE LIEP
+A1BF YI SYLLABLE LAT
+A1C0 YI SYLLABLE LAX
+A1C1 YI SYLLABLE LA
+A1C2 YI SYLLABLE LAP
+A1C3 YI SYLLABLE LUOT
+A1C4 YI SYLLABLE LUOX
+A1C5 YI SYLLABLE LUO
+A1C6 YI SYLLABLE LUOP
+A1C7 YI SYLLABLE LOT
+A1C8 YI SYLLABLE LOX
+A1C9 YI SYLLABLE LO
+A1CA YI SYLLABLE LOP
+A1CB YI SYLLABLE LEX
+A1CC YI SYLLABLE LE
+A1CD YI SYLLABLE LEP
+A1CE YI SYLLABLE LUT
+A1CF YI SYLLABLE LUX
+A1D0 YI SYLLABLE LU
+A1D1 YI SYLLABLE LUP
+A1D2 YI SYLLABLE LURX
+A1D3 YI SYLLABLE LUR
+A1D4 YI SYLLABLE LYT
+A1D5 YI SYLLABLE LYX
+A1D6 YI SYLLABLE LY
+A1D7 YI SYLLABLE LYP
+A1D8 YI SYLLABLE LYRX
+A1D9 YI SYLLABLE LYR
+A1DA YI SYLLABLE GIT
+A1DB YI SYLLABLE GIX
+A1DC YI SYLLABLE GI
+A1DD YI SYLLABLE GIP
+A1DE YI SYLLABLE GIET
+A1DF YI SYLLABLE GIEX
+A1E0 YI SYLLABLE GIE
+A1E1 YI SYLLABLE GIEP
+A1E2 YI SYLLABLE GAT
+A1E3 YI SYLLABLE GAX
+A1E4 YI SYLLABLE GA
+A1E5 YI SYLLABLE GAP
+A1E6 YI SYLLABLE GUOT
+A1E7 YI SYLLABLE GUOX
+A1E8 YI SYLLABLE GUO
+A1E9 YI SYLLABLE GUOP
+A1EA YI SYLLABLE GOT
+A1EB YI SYLLABLE GOX
+A1EC YI SYLLABLE GO
+A1ED YI SYLLABLE GOP
+A1EE YI SYLLABLE GET
+A1EF YI SYLLABLE GEX
+A1F0 YI SYLLABLE GE
+A1F1 YI SYLLABLE GEP
+A1F2 YI SYLLABLE GUT
+A1F3 YI SYLLABLE GUX
+A1F4 YI SYLLABLE GU
+A1F5 YI SYLLABLE GUP
+A1F6 YI SYLLABLE GURX
+A1F7 YI SYLLABLE GUR
+A1F8 YI SYLLABLE KIT
+A1F9 YI SYLLABLE KIX
+A1FA YI SYLLABLE KI
+A1FB YI SYLLABLE KIP
+A1FC YI SYLLABLE KIEX
+A1FD YI SYLLABLE KIE
+A1FE YI SYLLABLE KIEP
+A1FF YI SYLLABLE KAT
+A200 YI SYLLABLE KAX
+A201 YI SYLLABLE KA
+A202 YI SYLLABLE KAP
+A203 YI SYLLABLE KUOX
+A204 YI SYLLABLE KUO
+A205 YI SYLLABLE KUOP
+A206 YI SYLLABLE KOT
+A207 YI SYLLABLE KOX
+A208 YI SYLLABLE KO
+A209 YI SYLLABLE KOP
+A20A YI SYLLABLE KET
+A20B YI SYLLABLE KEX
+A20C YI SYLLABLE KE
+A20D YI SYLLABLE KEP
+A20E YI SYLLABLE KUT
+A20F YI SYLLABLE KUX
+A210 YI SYLLABLE KU
+A211 YI SYLLABLE KUP
+A212 YI SYLLABLE KURX
+A213 YI SYLLABLE KUR
+A214 YI SYLLABLE GGIT
+A215 YI SYLLABLE GGIX
+A216 YI SYLLABLE GGI
+A217 YI SYLLABLE GGIEX
+A218 YI SYLLABLE GGIE
+A219 YI SYLLABLE GGIEP
+A21A YI SYLLABLE GGAT
+A21B YI SYLLABLE GGAX
+A21C YI SYLLABLE GGA
+A21D YI SYLLABLE GGAP
+A21E YI SYLLABLE GGUOT
+A21F YI SYLLABLE GGUOX
+A220 YI SYLLABLE GGUO
+A221 YI SYLLABLE GGUOP
+A222 YI SYLLABLE GGOT
+A223 YI SYLLABLE GGOX
+A224 YI SYLLABLE GGO
+A225 YI SYLLABLE GGOP
+A226 YI SYLLABLE GGET
+A227 YI SYLLABLE GGEX
+A228 YI SYLLABLE GGE
+A229 YI SYLLABLE GGEP
+A22A YI SYLLABLE GGUT
+A22B YI SYLLABLE GGUX
+A22C YI SYLLABLE GGU
+A22D YI SYLLABLE GGUP
+A22E YI SYLLABLE GGURX
+A22F YI SYLLABLE GGUR
+A230 YI SYLLABLE MGIEX
+A231 YI SYLLABLE MGIE
+A232 YI SYLLABLE MGAT
+A233 YI SYLLABLE MGAX
+A234 YI SYLLABLE MGA
+A235 YI SYLLABLE MGAP
+A236 YI SYLLABLE MGUOX
+A237 YI SYLLABLE MGUO
+A238 YI SYLLABLE MGUOP
+A239 YI SYLLABLE MGOT
+A23A YI SYLLABLE MGOX
+A23B YI SYLLABLE MGO
+A23C YI SYLLABLE MGOP
+A23D YI SYLLABLE MGEX
+A23E YI SYLLABLE MGE
+A23F YI SYLLABLE MGEP
+A240 YI SYLLABLE MGUT
+A241 YI SYLLABLE MGUX
+A242 YI SYLLABLE MGU
+A243 YI SYLLABLE MGUP
+A244 YI SYLLABLE MGURX
+A245 YI SYLLABLE MGUR
+A246 YI SYLLABLE HXIT
+A247 YI SYLLABLE HXIX
+A248 YI SYLLABLE HXI
+A249 YI SYLLABLE HXIP
+A24A YI SYLLABLE HXIET
+A24B YI SYLLABLE HXIEX
+A24C YI SYLLABLE HXIE
+A24D YI SYLLABLE HXIEP
+A24E YI SYLLABLE HXAT
+A24F YI SYLLABLE HXAX
+A250 YI SYLLABLE HXA
+A251 YI SYLLABLE HXAP
+A252 YI SYLLABLE HXUOT
+A253 YI SYLLABLE HXUOX
+A254 YI SYLLABLE HXUO
+A255 YI SYLLABLE HXUOP
+A256 YI SYLLABLE HXOT
+A257 YI SYLLABLE HXOX
+A258 YI SYLLABLE HXO
+A259 YI SYLLABLE HXOP
+A25A YI SYLLABLE HXEX
+A25B YI SYLLABLE HXE
+A25C YI SYLLABLE HXEP
+A25D YI SYLLABLE NGIEX
+A25E YI SYLLABLE NGIE
+A25F YI SYLLABLE NGIEP
+A260 YI SYLLABLE NGAT
+A261 YI SYLLABLE NGAX
+A262 YI SYLLABLE NGA
+A263 YI SYLLABLE NGAP
+A264 YI SYLLABLE NGUOT
+A265 YI SYLLABLE NGUOX
+A266 YI SYLLABLE NGUO
+A267 YI SYLLABLE NGOT
+A268 YI SYLLABLE NGOX
+A269 YI SYLLABLE NGO
+A26A YI SYLLABLE NGOP
+A26B YI SYLLABLE NGEX
+A26C YI SYLLABLE NGE
+A26D YI SYLLABLE NGEP
+A26E YI SYLLABLE HIT
+A26F YI SYLLABLE HIEX
+A270 YI SYLLABLE HIE
+A271 YI SYLLABLE HAT
+A272 YI SYLLABLE HAX
+A273 YI SYLLABLE HA
+A274 YI SYLLABLE HAP
+A275 YI SYLLABLE HUOT
+A276 YI SYLLABLE HUOX
+A277 YI SYLLABLE HUO
+A278 YI SYLLABLE HUOP
+A279 YI SYLLABLE HOT
+A27A YI SYLLABLE HOX
+A27B YI SYLLABLE HO
+A27C YI SYLLABLE HOP
+A27D YI SYLLABLE HEX
+A27E YI SYLLABLE HE
+A27F YI SYLLABLE HEP
+A280 YI SYLLABLE WAT
+A281 YI SYLLABLE WAX
+A282 YI SYLLABLE WA
+A283 YI SYLLABLE WAP
+A284 YI SYLLABLE WUOX
+A285 YI SYLLABLE WUO
+A286 YI SYLLABLE WUOP
+A287 YI SYLLABLE WOX
+A288 YI SYLLABLE WO
+A289 YI SYLLABLE WOP
+A28A YI SYLLABLE WEX
+A28B YI SYLLABLE WE
+A28C YI SYLLABLE WEP
+A28D YI SYLLABLE ZIT
+A28E YI SYLLABLE ZIX
+A28F YI SYLLABLE ZI
+A290 YI SYLLABLE ZIP
+A291 YI SYLLABLE ZIEX
+A292 YI SYLLABLE ZIE
+A293 YI SYLLABLE ZIEP
+A294 YI SYLLABLE ZAT
+A295 YI SYLLABLE ZAX
+A296 YI SYLLABLE ZA
+A297 YI SYLLABLE ZAP
+A298 YI SYLLABLE ZUOX
+A299 YI SYLLABLE ZUO
+A29A YI SYLLABLE ZUOP
+A29B YI SYLLABLE ZOT
+A29C YI SYLLABLE ZOX
+A29D YI SYLLABLE ZO
+A29E YI SYLLABLE ZOP
+A29F YI SYLLABLE ZEX
+A2A0 YI SYLLABLE ZE
+A2A1 YI SYLLABLE ZEP
+A2A2 YI SYLLABLE ZUT
+A2A3 YI SYLLABLE ZUX
+A2A4 YI SYLLABLE ZU
+A2A5 YI SYLLABLE ZUP
+A2A6 YI SYLLABLE ZURX
+A2A7 YI SYLLABLE ZUR
+A2A8 YI SYLLABLE ZYT
+A2A9 YI SYLLABLE ZYX
+A2AA YI SYLLABLE ZY
+A2AB YI SYLLABLE ZYP
+A2AC YI SYLLABLE ZYRX
+A2AD YI SYLLABLE ZYR
+A2AE YI SYLLABLE CIT
+A2AF YI SYLLABLE CIX
+A2B0 YI SYLLABLE CI
+A2B1 YI SYLLABLE CIP
+A2B2 YI SYLLABLE CIET
+A2B3 YI SYLLABLE CIEX
+A2B4 YI SYLLABLE CIE
+A2B5 YI SYLLABLE CIEP
+A2B6 YI SYLLABLE CAT
+A2B7 YI SYLLABLE CAX
+A2B8 YI SYLLABLE CA
+A2B9 YI SYLLABLE CAP
+A2BA YI SYLLABLE CUOX
+A2BB YI SYLLABLE CUO
+A2BC YI SYLLABLE CUOP
+A2BD YI SYLLABLE COT
+A2BE YI SYLLABLE COX
+A2BF YI SYLLABLE CO
+A2C0 YI SYLLABLE COP
+A2C1 YI SYLLABLE CEX
+A2C2 YI SYLLABLE CE
+A2C3 YI SYLLABLE CEP
+A2C4 YI SYLLABLE CUT
+A2C5 YI SYLLABLE CUX
+A2C6 YI SYLLABLE CU
+A2C7 YI SYLLABLE CUP
+A2C8 YI SYLLABLE CURX
+A2C9 YI SYLLABLE CUR
+A2CA YI SYLLABLE CYT
+A2CB YI SYLLABLE CYX
+A2CC YI SYLLABLE CY
+A2CD YI SYLLABLE CYP
+A2CE YI SYLLABLE CYRX
+A2CF YI SYLLABLE CYR
+A2D0 YI SYLLABLE ZZIT
+A2D1 YI SYLLABLE ZZIX
+A2D2 YI SYLLABLE ZZI
+A2D3 YI SYLLABLE ZZIP
+A2D4 YI SYLLABLE ZZIET
+A2D5 YI SYLLABLE ZZIEX
+A2D6 YI SYLLABLE ZZIE
+A2D7 YI SYLLABLE ZZIEP
+A2D8 YI SYLLABLE ZZAT
+A2D9 YI SYLLABLE ZZAX
+A2DA YI SYLLABLE ZZA
+A2DB YI SYLLABLE ZZAP
+A2DC YI SYLLABLE ZZOX
+A2DD YI SYLLABLE ZZO
+A2DE YI SYLLABLE ZZOP
+A2DF YI SYLLABLE ZZEX
+A2E0 YI SYLLABLE ZZE
+A2E1 YI SYLLABLE ZZEP
+A2E2 YI SYLLABLE ZZUX
+A2E3 YI SYLLABLE ZZU
+A2E4 YI SYLLABLE ZZUP
+A2E5 YI SYLLABLE ZZURX
+A2E6 YI SYLLABLE ZZUR
+A2E7 YI SYLLABLE ZZYT
+A2E8 YI SYLLABLE ZZYX
+A2E9 YI SYLLABLE ZZY
+A2EA YI SYLLABLE ZZYP
+A2EB YI SYLLABLE ZZYRX
+A2EC YI SYLLABLE ZZYR
+A2ED YI SYLLABLE NZIT
+A2EE YI SYLLABLE NZIX
+A2EF YI SYLLABLE NZI
+A2F0 YI SYLLABLE NZIP
+A2F1 YI SYLLABLE NZIEX
+A2F2 YI SYLLABLE NZIE
+A2F3 YI SYLLABLE NZIEP
+A2F4 YI SYLLABLE NZAT
+A2F5 YI SYLLABLE NZAX
+A2F6 YI SYLLABLE NZA
+A2F7 YI SYLLABLE NZAP
+A2F8 YI SYLLABLE NZUOX
+A2F9 YI SYLLABLE NZUO
+A2FA YI SYLLABLE NZOX
+A2FB YI SYLLABLE NZOP
+A2FC YI SYLLABLE NZEX
+A2FD YI SYLLABLE NZE
+A2FE YI SYLLABLE NZUX
+A2FF YI SYLLABLE NZU
+A300 YI SYLLABLE NZUP
+A301 YI SYLLABLE NZURX
+A302 YI SYLLABLE NZUR
+A303 YI SYLLABLE NZYT
+A304 YI SYLLABLE NZYX
+A305 YI SYLLABLE NZY
+A306 YI SYLLABLE NZYP
+A307 YI SYLLABLE NZYRX
+A308 YI SYLLABLE NZYR
+A309 YI SYLLABLE SIT
+A30A YI SYLLABLE SIX
+A30B YI SYLLABLE SI
+A30C YI SYLLABLE SIP
+A30D YI SYLLABLE SIEX
+A30E YI SYLLABLE SIE
+A30F YI SYLLABLE SIEP
+A310 YI SYLLABLE SAT
+A311 YI SYLLABLE SAX
+A312 YI SYLLABLE SA
+A313 YI SYLLABLE SAP
+A314 YI SYLLABLE SUOX
+A315 YI SYLLABLE SUO
+A316 YI SYLLABLE SUOP
+A317 YI SYLLABLE SOT
+A318 YI SYLLABLE SOX
+A319 YI SYLLABLE SO
+A31A YI SYLLABLE SOP
+A31B YI SYLLABLE SEX
+A31C YI SYLLABLE SE
+A31D YI SYLLABLE SEP
+A31E YI SYLLABLE SUT
+A31F YI SYLLABLE SUX
+A320 YI SYLLABLE SU
+A321 YI SYLLABLE SUP
+A322 YI SYLLABLE SURX
+A323 YI SYLLABLE SUR
+A324 YI SYLLABLE SYT
+A325 YI SYLLABLE SYX
+A326 YI SYLLABLE SY
+A327 YI SYLLABLE SYP
+A328 YI SYLLABLE SYRX
+A329 YI SYLLABLE SYR
+A32A YI SYLLABLE SSIT
+A32B YI SYLLABLE SSIX
+A32C YI SYLLABLE SSI
+A32D YI SYLLABLE SSIP
+A32E YI SYLLABLE SSIEX
+A32F YI SYLLABLE SSIE
+A330 YI SYLLABLE SSIEP
+A331 YI SYLLABLE SSAT
+A332 YI SYLLABLE SSAX
+A333 YI SYLLABLE SSA
+A334 YI SYLLABLE SSAP
+A335 YI SYLLABLE SSOT
+A336 YI SYLLABLE SSOX
+A337 YI SYLLABLE SSO
+A338 YI SYLLABLE SSOP
+A339 YI SYLLABLE SSEX
+A33A YI SYLLABLE SSE
+A33B YI SYLLABLE SSEP
+A33C YI SYLLABLE SSUT
+A33D YI SYLLABLE SSUX
+A33E YI SYLLABLE SSU
+A33F YI SYLLABLE SSUP
+A340 YI SYLLABLE SSYT
+A341 YI SYLLABLE SSYX
+A342 YI SYLLABLE SSY
+A343 YI SYLLABLE SSYP
+A344 YI SYLLABLE SSYRX
+A345 YI SYLLABLE SSYR
+A346 YI SYLLABLE ZHAT
+A347 YI SYLLABLE ZHAX
+A348 YI SYLLABLE ZHA
+A349 YI SYLLABLE ZHAP
+A34A YI SYLLABLE ZHUOX
+A34B YI SYLLABLE ZHUO
+A34C YI SYLLABLE ZHUOP
+A34D YI SYLLABLE ZHOT
+A34E YI SYLLABLE ZHOX
+A34F YI SYLLABLE ZHO
+A350 YI SYLLABLE ZHOP
+A351 YI SYLLABLE ZHET
+A352 YI SYLLABLE ZHEX
+A353 YI SYLLABLE ZHE
+A354 YI SYLLABLE ZHEP
+A355 YI SYLLABLE ZHUT
+A356 YI SYLLABLE ZHUX
+A357 YI SYLLABLE ZHU
+A358 YI SYLLABLE ZHUP
+A359 YI SYLLABLE ZHURX
+A35A YI SYLLABLE ZHUR
+A35B YI SYLLABLE ZHYT
+A35C YI SYLLABLE ZHYX
+A35D YI SYLLABLE ZHY
+A35E YI SYLLABLE ZHYP
+A35F YI SYLLABLE ZHYRX
+A360 YI SYLLABLE ZHYR
+A361 YI SYLLABLE CHAT
+A362 YI SYLLABLE CHAX
+A363 YI SYLLABLE CHA
+A364 YI SYLLABLE CHAP
+A365 YI SYLLABLE CHUOT
+A366 YI SYLLABLE CHUOX
+A367 YI SYLLABLE CHUO
+A368 YI SYLLABLE CHUOP
+A369 YI SYLLABLE CHOT
+A36A YI SYLLABLE CHOX
+A36B YI SYLLABLE CHO
+A36C YI SYLLABLE CHOP
+A36D YI SYLLABLE CHET
+A36E YI SYLLABLE CHEX
+A36F YI SYLLABLE CHE
+A370 YI SYLLABLE CHEP
+A371 YI SYLLABLE CHUX
+A372 YI SYLLABLE CHU
+A373 YI SYLLABLE CHUP
+A374 YI SYLLABLE CHURX
+A375 YI SYLLABLE CHUR
+A376 YI SYLLABLE CHYT
+A377 YI SYLLABLE CHYX
+A378 YI SYLLABLE CHY
+A379 YI SYLLABLE CHYP
+A37A YI SYLLABLE CHYRX
+A37B YI SYLLABLE CHYR
+A37C YI SYLLABLE RRAX
+A37D YI SYLLABLE RRA
+A37E YI SYLLABLE RRUOX
+A37F YI SYLLABLE RRUO
+A380 YI SYLLABLE RROT
+A381 YI SYLLABLE RROX
+A382 YI SYLLABLE RRO
+A383 YI SYLLABLE RROP
+A384 YI SYLLABLE RRET
+A385 YI SYLLABLE RREX
+A386 YI SYLLABLE RRE
+A387 YI SYLLABLE RREP
+A388 YI SYLLABLE RRUT
+A389 YI SYLLABLE RRUX
+A38A YI SYLLABLE RRU
+A38B YI SYLLABLE RRUP
+A38C YI SYLLABLE RRURX
+A38D YI SYLLABLE RRUR
+A38E YI SYLLABLE RRYT
+A38F YI SYLLABLE RRYX
+A390 YI SYLLABLE RRY
+A391 YI SYLLABLE RRYP
+A392 YI SYLLABLE RRYRX
+A393 YI SYLLABLE RRYR
+A394 YI SYLLABLE NRAT
+A395 YI SYLLABLE NRAX
+A396 YI SYLLABLE NRA
+A397 YI SYLLABLE NRAP
+A398 YI SYLLABLE NROX
+A399 YI SYLLABLE NRO
+A39A YI SYLLABLE NROP
+A39B YI SYLLABLE NRET
+A39C YI SYLLABLE NREX
+A39D YI SYLLABLE NRE
+A39E YI SYLLABLE NREP
+A39F YI SYLLABLE NRUT
+A3A0 YI SYLLABLE NRUX
+A3A1 YI SYLLABLE NRU
+A3A2 YI SYLLABLE NRUP
+A3A3 YI SYLLABLE NRURX
+A3A4 YI SYLLABLE NRUR
+A3A5 YI SYLLABLE NRYT
+A3A6 YI SYLLABLE NRYX
+A3A7 YI SYLLABLE NRY
+A3A8 YI SYLLABLE NRYP
+A3A9 YI SYLLABLE NRYRX
+A3AA YI SYLLABLE NRYR
+A3AB YI SYLLABLE SHAT
+A3AC YI SYLLABLE SHAX
+A3AD YI SYLLABLE SHA
+A3AE YI SYLLABLE SHAP
+A3AF YI SYLLABLE SHUOX
+A3B0 YI SYLLABLE SHUO
+A3B1 YI SYLLABLE SHUOP
+A3B2 YI SYLLABLE SHOT
+A3B3 YI SYLLABLE SHOX
+A3B4 YI SYLLABLE SHO
+A3B5 YI SYLLABLE SHOP
+A3B6 YI SYLLABLE SHET
+A3B7 YI SYLLABLE SHEX
+A3B8 YI SYLLABLE SHE
+A3B9 YI SYLLABLE SHEP
+A3BA YI SYLLABLE SHUT
+A3BB YI SYLLABLE SHUX
+A3BC YI SYLLABLE SHU
+A3BD YI SYLLABLE SHUP
+A3BE YI SYLLABLE SHURX
+A3BF YI SYLLABLE SHUR
+A3C0 YI SYLLABLE SHYT
+A3C1 YI SYLLABLE SHYX
+A3C2 YI SYLLABLE SHY
+A3C3 YI SYLLABLE SHYP
+A3C4 YI SYLLABLE SHYRX
+A3C5 YI SYLLABLE SHYR
+A3C6 YI SYLLABLE RAT
+A3C7 YI SYLLABLE RAX
+A3C8 YI SYLLABLE RA
+A3C9 YI SYLLABLE RAP
+A3CA YI SYLLABLE RUOX
+A3CB YI SYLLABLE RUO
+A3CC YI SYLLABLE RUOP
+A3CD YI SYLLABLE ROT
+A3CE YI SYLLABLE ROX
+A3CF YI SYLLABLE RO
+A3D0 YI SYLLABLE ROP
+A3D1 YI SYLLABLE REX
+A3D2 YI SYLLABLE RE
+A3D3 YI SYLLABLE REP
+A3D4 YI SYLLABLE RUT
+A3D5 YI SYLLABLE RUX
+A3D6 YI SYLLABLE RU
+A3D7 YI SYLLABLE RUP
+A3D8 YI SYLLABLE RURX
+A3D9 YI SYLLABLE RUR
+A3DA YI SYLLABLE RYT
+A3DB YI SYLLABLE RYX
+A3DC YI SYLLABLE RY
+A3DD YI SYLLABLE RYP
+A3DE YI SYLLABLE RYRX
+A3DF YI SYLLABLE RYR
+A3E0 YI SYLLABLE JIT
+A3E1 YI SYLLABLE JIX
+A3E2 YI SYLLABLE JI
+A3E3 YI SYLLABLE JIP
+A3E4 YI SYLLABLE JIET
+A3E5 YI SYLLABLE JIEX
+A3E6 YI SYLLABLE JIE
+A3E7 YI SYLLABLE JIEP
+A3E8 YI SYLLABLE JUOT
+A3E9 YI SYLLABLE JUOX
+A3EA YI SYLLABLE JUO
+A3EB YI SYLLABLE JUOP
+A3EC YI SYLLABLE JOT
+A3ED YI SYLLABLE JOX
+A3EE YI SYLLABLE JO
+A3EF YI SYLLABLE JOP
+A3F0 YI SYLLABLE JUT
+A3F1 YI SYLLABLE JUX
+A3F2 YI SYLLABLE JU
+A3F3 YI SYLLABLE JUP
+A3F4 YI SYLLABLE JURX
+A3F5 YI SYLLABLE JUR
+A3F6 YI SYLLABLE JYT
+A3F7 YI SYLLABLE JYX
+A3F8 YI SYLLABLE JY
+A3F9 YI SYLLABLE JYP
+A3FA YI SYLLABLE JYRX
+A3FB YI SYLLABLE JYR
+A3FC YI SYLLABLE QIT
+A3FD YI SYLLABLE QIX
+A3FE YI SYLLABLE QI
+A3FF YI SYLLABLE QIP
+A400 YI SYLLABLE QIET
+A401 YI SYLLABLE QIEX
+A402 YI SYLLABLE QIE
+A403 YI SYLLABLE QIEP
+A404 YI SYLLABLE QUOT
+A405 YI SYLLABLE QUOX
+A406 YI SYLLABLE QUO
+A407 YI SYLLABLE QUOP
+A408 YI SYLLABLE QOT
+A409 YI SYLLABLE QOX
+A40A YI SYLLABLE QO
+A40B YI SYLLABLE QOP
+A40C YI SYLLABLE QUT
+A40D YI SYLLABLE QUX
+A40E YI SYLLABLE QU
+A40F YI SYLLABLE QUP
+A410 YI SYLLABLE QURX
+A411 YI SYLLABLE QUR
+A412 YI SYLLABLE QYT
+A413 YI SYLLABLE QYX
+A414 YI SYLLABLE QY
+A415 YI SYLLABLE QYP
+A416 YI SYLLABLE QYRX
+A417 YI SYLLABLE QYR
+A418 YI SYLLABLE JJIT
+A419 YI SYLLABLE JJIX
+A41A YI SYLLABLE JJI
+A41B YI SYLLABLE JJIP
+A41C YI SYLLABLE JJIET
+A41D YI SYLLABLE JJIEX
+A41E YI SYLLABLE JJIE
+A41F YI SYLLABLE JJIEP
+A420 YI SYLLABLE JJUOX
+A421 YI SYLLABLE JJUO
+A422 YI SYLLABLE JJUOP
+A423 YI SYLLABLE JJOT
+A424 YI SYLLABLE JJOX
+A425 YI SYLLABLE JJO
+A426 YI SYLLABLE JJOP
+A427 YI SYLLABLE JJUT
+A428 YI SYLLABLE JJUX
+A429 YI SYLLABLE JJU
+A42A YI SYLLABLE JJUP
+A42B YI SYLLABLE JJURX
+A42C YI SYLLABLE JJUR
+A42D YI SYLLABLE JJYT
+A42E YI SYLLABLE JJYX
+A42F YI SYLLABLE JJY
+A430 YI SYLLABLE JJYP
+A431 YI SYLLABLE NJIT
+A432 YI SYLLABLE NJIX
+A433 YI SYLLABLE NJI
+A434 YI SYLLABLE NJIP
+A435 YI SYLLABLE NJIET
+A436 YI SYLLABLE NJIEX
+A437 YI SYLLABLE NJIE
+A438 YI SYLLABLE NJIEP
+A439 YI SYLLABLE NJUOX
+A43A YI SYLLABLE NJUO
+A43B YI SYLLABLE NJOT
+A43C YI SYLLABLE NJOX
+A43D YI SYLLABLE NJO
+A43E YI SYLLABLE NJOP
+A43F YI SYLLABLE NJUX
+A440 YI SYLLABLE NJU
+A441 YI SYLLABLE NJUP
+A442 YI SYLLABLE NJURX
+A443 YI SYLLABLE NJUR
+A444 YI SYLLABLE NJYT
+A445 YI SYLLABLE NJYX
+A446 YI SYLLABLE NJY
+A447 YI SYLLABLE NJYP
+A448 YI SYLLABLE NJYRX
+A449 YI SYLLABLE NJYR
+A44A YI SYLLABLE NYIT
+A44B YI SYLLABLE NYIX
+A44C YI SYLLABLE NYI
+A44D YI SYLLABLE NYIP
+A44E YI SYLLABLE NYIET
+A44F YI SYLLABLE NYIEX
+A450 YI SYLLABLE NYIE
+A451 YI SYLLABLE NYIEP
+A452 YI SYLLABLE NYUOX
+A453 YI SYLLABLE NYUO
+A454 YI SYLLABLE NYUOP
+A455 YI SYLLABLE NYOT
+A456 YI SYLLABLE NYOX
+A457 YI SYLLABLE NYO
+A458 YI SYLLABLE NYOP
+A459 YI SYLLABLE NYUT
+A45A YI SYLLABLE NYUX
+A45B YI SYLLABLE NYU
+A45C YI SYLLABLE NYUP
+A45D YI SYLLABLE XIT
+A45E YI SYLLABLE XIX
+A45F YI SYLLABLE XI
+A460 YI SYLLABLE XIP
+A461 YI SYLLABLE XIET
+A462 YI SYLLABLE XIEX
+A463 YI SYLLABLE XIE
+A464 YI SYLLABLE XIEP
+A465 YI SYLLABLE XUOX
+A466 YI SYLLABLE XUO
+A467 YI SYLLABLE XOT
+A468 YI SYLLABLE XOX
+A469 YI SYLLABLE XO
+A46A YI SYLLABLE XOP
+A46B YI SYLLABLE XYT
+A46C YI SYLLABLE XYX
+A46D YI SYLLABLE XY
+A46E YI SYLLABLE XYP
+A46F YI SYLLABLE XYRX
+A470 YI SYLLABLE XYR
+A471 YI SYLLABLE YIT
+A472 YI SYLLABLE YIX
+A473 YI SYLLABLE YI
+A474 YI SYLLABLE YIP
+A475 YI SYLLABLE YIET
+A476 YI SYLLABLE YIEX
+A477 YI SYLLABLE YIE
+A478 YI SYLLABLE YIEP
+A479 YI SYLLABLE YUOT
+A47A YI SYLLABLE YUOX
+A47B YI SYLLABLE YUO
+A47C YI SYLLABLE YUOP
+A47D YI SYLLABLE YOT
+A47E YI SYLLABLE YOX
+A47F YI SYLLABLE YO
+A480 YI SYLLABLE YOP
+A481 YI SYLLABLE YUT
+A482 YI SYLLABLE YUX
+A483 YI SYLLABLE YU
+A484 YI SYLLABLE YUP
+A485 YI SYLLABLE YURX
+A486 YI SYLLABLE YUR
+A487 YI SYLLABLE YYT
+A488 YI SYLLABLE YYX
+A489 YI SYLLABLE YY
+A48A YI SYLLABLE YYP
+A48B YI SYLLABLE YYRX
+A48C YI SYLLABLE YYR
+A490 YI RADICAL QOT
+A491 YI RADICAL LI
+A492 YI RADICAL KIT
+A493 YI RADICAL NYIP
+A494 YI RADICAL CYP
+A495 YI RADICAL SSI
+A496 YI RADICAL GGOP
+A497 YI RADICAL GEP
+A498 YI RADICAL MI
+A499 YI RADICAL HXIT
+A49A YI RADICAL LYR
+A49B YI RADICAL BBUT
+A49C YI RADICAL MOP
+A49D YI RADICAL YO
+A49E YI RADICAL PUT
+A49F YI RADICAL HXUO
+A4A0 YI RADICAL TAT
+A4A1 YI RADICAL GA
+A4A2 YI RADICAL ZUP
+A4A3 YI RADICAL CYT
+A4A4 YI RADICAL DDUR
+A4A5 YI RADICAL BUR
+A4A6 YI RADICAL GGUO
+A4A7 YI RADICAL NYOP
+A4A8 YI RADICAL TU
+A4A9 YI RADICAL OP
+A4AA YI RADICAL JJUT
+A4AB YI RADICAL ZOT
+A4AC YI RADICAL PYT
+A4AD YI RADICAL HMO
+A4AE YI RADICAL YIT
+A4AF YI RADICAL VUR
+A4B0 YI RADICAL SHY
+A4B1 YI RADICAL VEP
+A4B2 YI RADICAL ZA
+A4B3 YI RADICAL JO
+A4B4 YI RADICAL NZUP
+A4B5 YI RADICAL JJY
+A4B6 YI RADICAL GOT
+A4B7 YI RADICAL JJIE
+A4B8 YI RADICAL WO
+A4B9 YI RADICAL DU
+A4BA YI RADICAL SHUR
+A4BB YI RADICAL LIE
+A4BC YI RADICAL CY
+A4BD YI RADICAL CUOP
+A4BE YI RADICAL CIP
+A4BF YI RADICAL HXOP
+A4C0 YI RADICAL SHAT
+A4C1 YI RADICAL ZUR
+A4C2 YI RADICAL SHOP
+A4C3 YI RADICAL CHE
+A4C4 YI RADICAL ZZIET
+A4C5 YI RADICAL NBIE
+A4C6 YI RADICAL KE
+AC00 D7A3 Hangul Syllable
+D800 DB7F Non Private Use High Surrogate
+DB80 DBFF Private Use High Surrogate
+DC00 DFFF Low Surrogate
+E000 F8FF Private Use
+F900 CJK COMPATIBILITY IDEOGRAPH-F900
+F901 CJK COMPATIBILITY IDEOGRAPH-F901
+F902 CJK COMPATIBILITY IDEOGRAPH-F902
+F903 CJK COMPATIBILITY IDEOGRAPH-F903
+F904 CJK COMPATIBILITY IDEOGRAPH-F904
+F905 CJK COMPATIBILITY IDEOGRAPH-F905
+F906 CJK COMPATIBILITY IDEOGRAPH-F906
+F907 CJK COMPATIBILITY IDEOGRAPH-F907
+F908 CJK COMPATIBILITY IDEOGRAPH-F908
+F909 CJK COMPATIBILITY IDEOGRAPH-F909
+F90A CJK COMPATIBILITY IDEOGRAPH-F90A
+F90B CJK COMPATIBILITY IDEOGRAPH-F90B
+F90C CJK COMPATIBILITY IDEOGRAPH-F90C
+F90D CJK COMPATIBILITY IDEOGRAPH-F90D
+F90E CJK COMPATIBILITY IDEOGRAPH-F90E
+F90F CJK COMPATIBILITY IDEOGRAPH-F90F
+F910 CJK COMPATIBILITY IDEOGRAPH-F910
+F911 CJK COMPATIBILITY IDEOGRAPH-F911
+F912 CJK COMPATIBILITY IDEOGRAPH-F912
+F913 CJK COMPATIBILITY IDEOGRAPH-F913
+F914 CJK COMPATIBILITY IDEOGRAPH-F914
+F915 CJK COMPATIBILITY IDEOGRAPH-F915
+F916 CJK COMPATIBILITY IDEOGRAPH-F916
+F917 CJK COMPATIBILITY IDEOGRAPH-F917
+F918 CJK COMPATIBILITY IDEOGRAPH-F918
+F919 CJK COMPATIBILITY IDEOGRAPH-F919
+F91A CJK COMPATIBILITY IDEOGRAPH-F91A
+F91B CJK COMPATIBILITY IDEOGRAPH-F91B
+F91C CJK COMPATIBILITY IDEOGRAPH-F91C
+F91D CJK COMPATIBILITY IDEOGRAPH-F91D
+F91E CJK COMPATIBILITY IDEOGRAPH-F91E
+F91F CJK COMPATIBILITY IDEOGRAPH-F91F
+F920 CJK COMPATIBILITY IDEOGRAPH-F920
+F921 CJK COMPATIBILITY IDEOGRAPH-F921
+F922 CJK COMPATIBILITY IDEOGRAPH-F922
+F923 CJK COMPATIBILITY IDEOGRAPH-F923
+F924 CJK COMPATIBILITY IDEOGRAPH-F924
+F925 CJK COMPATIBILITY IDEOGRAPH-F925
+F926 CJK COMPATIBILITY IDEOGRAPH-F926
+F927 CJK COMPATIBILITY IDEOGRAPH-F927
+F928 CJK COMPATIBILITY IDEOGRAPH-F928
+F929 CJK COMPATIBILITY IDEOGRAPH-F929
+F92A CJK COMPATIBILITY IDEOGRAPH-F92A
+F92B CJK COMPATIBILITY IDEOGRAPH-F92B
+F92C CJK COMPATIBILITY IDEOGRAPH-F92C
+F92D CJK COMPATIBILITY IDEOGRAPH-F92D
+F92E CJK COMPATIBILITY IDEOGRAPH-F92E
+F92F CJK COMPATIBILITY IDEOGRAPH-F92F
+F930 CJK COMPATIBILITY IDEOGRAPH-F930
+F931 CJK COMPATIBILITY IDEOGRAPH-F931
+F932 CJK COMPATIBILITY IDEOGRAPH-F932
+F933 CJK COMPATIBILITY IDEOGRAPH-F933
+F934 CJK COMPATIBILITY IDEOGRAPH-F934
+F935 CJK COMPATIBILITY IDEOGRAPH-F935
+F936 CJK COMPATIBILITY IDEOGRAPH-F936
+F937 CJK COMPATIBILITY IDEOGRAPH-F937
+F938 CJK COMPATIBILITY IDEOGRAPH-F938
+F939 CJK COMPATIBILITY IDEOGRAPH-F939
+F93A CJK COMPATIBILITY IDEOGRAPH-F93A
+F93B CJK COMPATIBILITY IDEOGRAPH-F93B
+F93C CJK COMPATIBILITY IDEOGRAPH-F93C
+F93D CJK COMPATIBILITY IDEOGRAPH-F93D
+F93E CJK COMPATIBILITY IDEOGRAPH-F93E
+F93F CJK COMPATIBILITY IDEOGRAPH-F93F
+F940 CJK COMPATIBILITY IDEOGRAPH-F940
+F941 CJK COMPATIBILITY IDEOGRAPH-F941
+F942 CJK COMPATIBILITY IDEOGRAPH-F942
+F943 CJK COMPATIBILITY IDEOGRAPH-F943
+F944 CJK COMPATIBILITY IDEOGRAPH-F944
+F945 CJK COMPATIBILITY IDEOGRAPH-F945
+F946 CJK COMPATIBILITY IDEOGRAPH-F946
+F947 CJK COMPATIBILITY IDEOGRAPH-F947
+F948 CJK COMPATIBILITY IDEOGRAPH-F948
+F949 CJK COMPATIBILITY IDEOGRAPH-F949
+F94A CJK COMPATIBILITY IDEOGRAPH-F94A
+F94B CJK COMPATIBILITY IDEOGRAPH-F94B
+F94C CJK COMPATIBILITY IDEOGRAPH-F94C
+F94D CJK COMPATIBILITY IDEOGRAPH-F94D
+F94E CJK COMPATIBILITY IDEOGRAPH-F94E
+F94F CJK COMPATIBILITY IDEOGRAPH-F94F
+F950 CJK COMPATIBILITY IDEOGRAPH-F950
+F951 CJK COMPATIBILITY IDEOGRAPH-F951
+F952 CJK COMPATIBILITY IDEOGRAPH-F952
+F953 CJK COMPATIBILITY IDEOGRAPH-F953
+F954 CJK COMPATIBILITY IDEOGRAPH-F954
+F955 CJK COMPATIBILITY IDEOGRAPH-F955
+F956 CJK COMPATIBILITY IDEOGRAPH-F956
+F957 CJK COMPATIBILITY IDEOGRAPH-F957
+F958 CJK COMPATIBILITY IDEOGRAPH-F958
+F959 CJK COMPATIBILITY IDEOGRAPH-F959
+F95A CJK COMPATIBILITY IDEOGRAPH-F95A
+F95B CJK COMPATIBILITY IDEOGRAPH-F95B
+F95C CJK COMPATIBILITY IDEOGRAPH-F95C
+F95D CJK COMPATIBILITY IDEOGRAPH-F95D
+F95E CJK COMPATIBILITY IDEOGRAPH-F95E
+F95F CJK COMPATIBILITY IDEOGRAPH-F95F
+F960 CJK COMPATIBILITY IDEOGRAPH-F960
+F961 CJK COMPATIBILITY IDEOGRAPH-F961
+F962 CJK COMPATIBILITY IDEOGRAPH-F962
+F963 CJK COMPATIBILITY IDEOGRAPH-F963
+F964 CJK COMPATIBILITY IDEOGRAPH-F964
+F965 CJK COMPATIBILITY IDEOGRAPH-F965
+F966 CJK COMPATIBILITY IDEOGRAPH-F966
+F967 CJK COMPATIBILITY IDEOGRAPH-F967
+F968 CJK COMPATIBILITY IDEOGRAPH-F968
+F969 CJK COMPATIBILITY IDEOGRAPH-F969
+F96A CJK COMPATIBILITY IDEOGRAPH-F96A
+F96B CJK COMPATIBILITY IDEOGRAPH-F96B
+F96C CJK COMPATIBILITY IDEOGRAPH-F96C
+F96D CJK COMPATIBILITY IDEOGRAPH-F96D
+F96E CJK COMPATIBILITY IDEOGRAPH-F96E
+F96F CJK COMPATIBILITY IDEOGRAPH-F96F
+F970 CJK COMPATIBILITY IDEOGRAPH-F970
+F971 CJK COMPATIBILITY IDEOGRAPH-F971
+F972 CJK COMPATIBILITY IDEOGRAPH-F972
+F973 CJK COMPATIBILITY IDEOGRAPH-F973
+F974 CJK COMPATIBILITY IDEOGRAPH-F974
+F975 CJK COMPATIBILITY IDEOGRAPH-F975
+F976 CJK COMPATIBILITY IDEOGRAPH-F976
+F977 CJK COMPATIBILITY IDEOGRAPH-F977
+F978 CJK COMPATIBILITY IDEOGRAPH-F978
+F979 CJK COMPATIBILITY IDEOGRAPH-F979
+F97A CJK COMPATIBILITY IDEOGRAPH-F97A
+F97B CJK COMPATIBILITY IDEOGRAPH-F97B
+F97C CJK COMPATIBILITY IDEOGRAPH-F97C
+F97D CJK COMPATIBILITY IDEOGRAPH-F97D
+F97E CJK COMPATIBILITY IDEOGRAPH-F97E
+F97F CJK COMPATIBILITY IDEOGRAPH-F97F
+F980 CJK COMPATIBILITY IDEOGRAPH-F980
+F981 CJK COMPATIBILITY IDEOGRAPH-F981
+F982 CJK COMPATIBILITY IDEOGRAPH-F982
+F983 CJK COMPATIBILITY IDEOGRAPH-F983
+F984 CJK COMPATIBILITY IDEOGRAPH-F984
+F985 CJK COMPATIBILITY IDEOGRAPH-F985
+F986 CJK COMPATIBILITY IDEOGRAPH-F986
+F987 CJK COMPATIBILITY IDEOGRAPH-F987
+F988 CJK COMPATIBILITY IDEOGRAPH-F988
+F989 CJK COMPATIBILITY IDEOGRAPH-F989
+F98A CJK COMPATIBILITY IDEOGRAPH-F98A
+F98B CJK COMPATIBILITY IDEOGRAPH-F98B
+F98C CJK COMPATIBILITY IDEOGRAPH-F98C
+F98D CJK COMPATIBILITY IDEOGRAPH-F98D
+F98E CJK COMPATIBILITY IDEOGRAPH-F98E
+F98F CJK COMPATIBILITY IDEOGRAPH-F98F
+F990 CJK COMPATIBILITY IDEOGRAPH-F990
+F991 CJK COMPATIBILITY IDEOGRAPH-F991
+F992 CJK COMPATIBILITY IDEOGRAPH-F992
+F993 CJK COMPATIBILITY IDEOGRAPH-F993
+F994 CJK COMPATIBILITY IDEOGRAPH-F994
+F995 CJK COMPATIBILITY IDEOGRAPH-F995
+F996 CJK COMPATIBILITY IDEOGRAPH-F996
+F997 CJK COMPATIBILITY IDEOGRAPH-F997
+F998 CJK COMPATIBILITY IDEOGRAPH-F998
+F999 CJK COMPATIBILITY IDEOGRAPH-F999
+F99A CJK COMPATIBILITY IDEOGRAPH-F99A
+F99B CJK COMPATIBILITY IDEOGRAPH-F99B
+F99C CJK COMPATIBILITY IDEOGRAPH-F99C
+F99D CJK COMPATIBILITY IDEOGRAPH-F99D
+F99E CJK COMPATIBILITY IDEOGRAPH-F99E
+F99F CJK COMPATIBILITY IDEOGRAPH-F99F
+F9A0 CJK COMPATIBILITY IDEOGRAPH-F9A0
+F9A1 CJK COMPATIBILITY IDEOGRAPH-F9A1
+F9A2 CJK COMPATIBILITY IDEOGRAPH-F9A2
+F9A3 CJK COMPATIBILITY IDEOGRAPH-F9A3
+F9A4 CJK COMPATIBILITY IDEOGRAPH-F9A4
+F9A5 CJK COMPATIBILITY IDEOGRAPH-F9A5
+F9A6 CJK COMPATIBILITY IDEOGRAPH-F9A6
+F9A7 CJK COMPATIBILITY IDEOGRAPH-F9A7
+F9A8 CJK COMPATIBILITY IDEOGRAPH-F9A8
+F9A9 CJK COMPATIBILITY IDEOGRAPH-F9A9
+F9AA CJK COMPATIBILITY IDEOGRAPH-F9AA
+F9AB CJK COMPATIBILITY IDEOGRAPH-F9AB
+F9AC CJK COMPATIBILITY IDEOGRAPH-F9AC
+F9AD CJK COMPATIBILITY IDEOGRAPH-F9AD
+F9AE CJK COMPATIBILITY IDEOGRAPH-F9AE
+F9AF CJK COMPATIBILITY IDEOGRAPH-F9AF
+F9B0 CJK COMPATIBILITY IDEOGRAPH-F9B0
+F9B1 CJK COMPATIBILITY IDEOGRAPH-F9B1
+F9B2 CJK COMPATIBILITY IDEOGRAPH-F9B2
+F9B3 CJK COMPATIBILITY IDEOGRAPH-F9B3
+F9B4 CJK COMPATIBILITY IDEOGRAPH-F9B4
+F9B5 CJK COMPATIBILITY IDEOGRAPH-F9B5
+F9B6 CJK COMPATIBILITY IDEOGRAPH-F9B6
+F9B7 CJK COMPATIBILITY IDEOGRAPH-F9B7
+F9B8 CJK COMPATIBILITY IDEOGRAPH-F9B8
+F9B9 CJK COMPATIBILITY IDEOGRAPH-F9B9
+F9BA CJK COMPATIBILITY IDEOGRAPH-F9BA
+F9BB CJK COMPATIBILITY IDEOGRAPH-F9BB
+F9BC CJK COMPATIBILITY IDEOGRAPH-F9BC
+F9BD CJK COMPATIBILITY IDEOGRAPH-F9BD
+F9BE CJK COMPATIBILITY IDEOGRAPH-F9BE
+F9BF CJK COMPATIBILITY IDEOGRAPH-F9BF
+F9C0 CJK COMPATIBILITY IDEOGRAPH-F9C0
+F9C1 CJK COMPATIBILITY IDEOGRAPH-F9C1
+F9C2 CJK COMPATIBILITY IDEOGRAPH-F9C2
+F9C3 CJK COMPATIBILITY IDEOGRAPH-F9C3
+F9C4 CJK COMPATIBILITY IDEOGRAPH-F9C4
+F9C5 CJK COMPATIBILITY IDEOGRAPH-F9C5
+F9C6 CJK COMPATIBILITY IDEOGRAPH-F9C6
+F9C7 CJK COMPATIBILITY IDEOGRAPH-F9C7
+F9C8 CJK COMPATIBILITY IDEOGRAPH-F9C8
+F9C9 CJK COMPATIBILITY IDEOGRAPH-F9C9
+F9CA CJK COMPATIBILITY IDEOGRAPH-F9CA
+F9CB CJK COMPATIBILITY IDEOGRAPH-F9CB
+F9CC CJK COMPATIBILITY IDEOGRAPH-F9CC
+F9CD CJK COMPATIBILITY IDEOGRAPH-F9CD
+F9CE CJK COMPATIBILITY IDEOGRAPH-F9CE
+F9CF CJK COMPATIBILITY IDEOGRAPH-F9CF
+F9D0 CJK COMPATIBILITY IDEOGRAPH-F9D0
+F9D1 CJK COMPATIBILITY IDEOGRAPH-F9D1
+F9D2 CJK COMPATIBILITY IDEOGRAPH-F9D2
+F9D3 CJK COMPATIBILITY IDEOGRAPH-F9D3
+F9D4 CJK COMPATIBILITY IDEOGRAPH-F9D4
+F9D5 CJK COMPATIBILITY IDEOGRAPH-F9D5
+F9D6 CJK COMPATIBILITY IDEOGRAPH-F9D6
+F9D7 CJK COMPATIBILITY IDEOGRAPH-F9D7
+F9D8 CJK COMPATIBILITY IDEOGRAPH-F9D8
+F9D9 CJK COMPATIBILITY IDEOGRAPH-F9D9
+F9DA CJK COMPATIBILITY IDEOGRAPH-F9DA
+F9DB CJK COMPATIBILITY IDEOGRAPH-F9DB
+F9DC CJK COMPATIBILITY IDEOGRAPH-F9DC
+F9DD CJK COMPATIBILITY IDEOGRAPH-F9DD
+F9DE CJK COMPATIBILITY IDEOGRAPH-F9DE
+F9DF CJK COMPATIBILITY IDEOGRAPH-F9DF
+F9E0 CJK COMPATIBILITY IDEOGRAPH-F9E0
+F9E1 CJK COMPATIBILITY IDEOGRAPH-F9E1
+F9E2 CJK COMPATIBILITY IDEOGRAPH-F9E2
+F9E3 CJK COMPATIBILITY IDEOGRAPH-F9E3
+F9E4 CJK COMPATIBILITY IDEOGRAPH-F9E4
+F9E5 CJK COMPATIBILITY IDEOGRAPH-F9E5
+F9E6 CJK COMPATIBILITY IDEOGRAPH-F9E6
+F9E7 CJK COMPATIBILITY IDEOGRAPH-F9E7
+F9E8 CJK COMPATIBILITY IDEOGRAPH-F9E8
+F9E9 CJK COMPATIBILITY IDEOGRAPH-F9E9
+F9EA CJK COMPATIBILITY IDEOGRAPH-F9EA
+F9EB CJK COMPATIBILITY IDEOGRAPH-F9EB
+F9EC CJK COMPATIBILITY IDEOGRAPH-F9EC
+F9ED CJK COMPATIBILITY IDEOGRAPH-F9ED
+F9EE CJK COMPATIBILITY IDEOGRAPH-F9EE
+F9EF CJK COMPATIBILITY IDEOGRAPH-F9EF
+F9F0 CJK COMPATIBILITY IDEOGRAPH-F9F0
+F9F1 CJK COMPATIBILITY IDEOGRAPH-F9F1
+F9F2 CJK COMPATIBILITY IDEOGRAPH-F9F2
+F9F3 CJK COMPATIBILITY IDEOGRAPH-F9F3
+F9F4 CJK COMPATIBILITY IDEOGRAPH-F9F4
+F9F5 CJK COMPATIBILITY IDEOGRAPH-F9F5
+F9F6 CJK COMPATIBILITY IDEOGRAPH-F9F6
+F9F7 CJK COMPATIBILITY IDEOGRAPH-F9F7
+F9F8 CJK COMPATIBILITY IDEOGRAPH-F9F8
+F9F9 CJK COMPATIBILITY IDEOGRAPH-F9F9
+F9FA CJK COMPATIBILITY IDEOGRAPH-F9FA
+F9FB CJK COMPATIBILITY IDEOGRAPH-F9FB
+F9FC CJK COMPATIBILITY IDEOGRAPH-F9FC
+F9FD CJK COMPATIBILITY IDEOGRAPH-F9FD
+F9FE CJK COMPATIBILITY IDEOGRAPH-F9FE
+F9FF CJK COMPATIBILITY IDEOGRAPH-F9FF
+FA00 CJK COMPATIBILITY IDEOGRAPH-FA00
+FA01 CJK COMPATIBILITY IDEOGRAPH-FA01
+FA02 CJK COMPATIBILITY IDEOGRAPH-FA02
+FA03 CJK COMPATIBILITY IDEOGRAPH-FA03
+FA04 CJK COMPATIBILITY IDEOGRAPH-FA04
+FA05 CJK COMPATIBILITY IDEOGRAPH-FA05
+FA06 CJK COMPATIBILITY IDEOGRAPH-FA06
+FA07 CJK COMPATIBILITY IDEOGRAPH-FA07
+FA08 CJK COMPATIBILITY IDEOGRAPH-FA08
+FA09 CJK COMPATIBILITY IDEOGRAPH-FA09
+FA0A CJK COMPATIBILITY IDEOGRAPH-FA0A
+FA0B CJK COMPATIBILITY IDEOGRAPH-FA0B
+FA0C CJK COMPATIBILITY IDEOGRAPH-FA0C
+FA0D CJK COMPATIBILITY IDEOGRAPH-FA0D
+FA0E CJK COMPATIBILITY IDEOGRAPH-FA0E
+FA0F CJK COMPATIBILITY IDEOGRAPH-FA0F
+FA10 CJK COMPATIBILITY IDEOGRAPH-FA10
+FA11 CJK COMPATIBILITY IDEOGRAPH-FA11
+FA12 CJK COMPATIBILITY IDEOGRAPH-FA12
+FA13 CJK COMPATIBILITY IDEOGRAPH-FA13
+FA14 CJK COMPATIBILITY IDEOGRAPH-FA14
+FA15 CJK COMPATIBILITY IDEOGRAPH-FA15
+FA16 CJK COMPATIBILITY IDEOGRAPH-FA16
+FA17 CJK COMPATIBILITY IDEOGRAPH-FA17
+FA18 CJK COMPATIBILITY IDEOGRAPH-FA18
+FA19 CJK COMPATIBILITY IDEOGRAPH-FA19
+FA1A CJK COMPATIBILITY IDEOGRAPH-FA1A
+FA1B CJK COMPATIBILITY IDEOGRAPH-FA1B
+FA1C CJK COMPATIBILITY IDEOGRAPH-FA1C
+FA1D CJK COMPATIBILITY IDEOGRAPH-FA1D
+FA1E CJK COMPATIBILITY IDEOGRAPH-FA1E
+FA1F CJK COMPATIBILITY IDEOGRAPH-FA1F
+FA20 CJK COMPATIBILITY IDEOGRAPH-FA20
+FA21 CJK COMPATIBILITY IDEOGRAPH-FA21
+FA22 CJK COMPATIBILITY IDEOGRAPH-FA22
+FA23 CJK COMPATIBILITY IDEOGRAPH-FA23
+FA24 CJK COMPATIBILITY IDEOGRAPH-FA24
+FA25 CJK COMPATIBILITY IDEOGRAPH-FA25
+FA26 CJK COMPATIBILITY IDEOGRAPH-FA26
+FA27 CJK COMPATIBILITY IDEOGRAPH-FA27
+FA28 CJK COMPATIBILITY IDEOGRAPH-FA28
+FA29 CJK COMPATIBILITY IDEOGRAPH-FA29
+FA2A CJK COMPATIBILITY IDEOGRAPH-FA2A
+FA2B CJK COMPATIBILITY IDEOGRAPH-FA2B
+FA2C CJK COMPATIBILITY IDEOGRAPH-FA2C
+FA2D CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA30 CJK COMPATIBILITY IDEOGRAPH-FA30
+FA31 CJK COMPATIBILITY IDEOGRAPH-FA31
+FA32 CJK COMPATIBILITY IDEOGRAPH-FA32
+FA33 CJK COMPATIBILITY IDEOGRAPH-FA33
+FA34 CJK COMPATIBILITY IDEOGRAPH-FA34
+FA35 CJK COMPATIBILITY IDEOGRAPH-FA35
+FA36 CJK COMPATIBILITY IDEOGRAPH-FA36
+FA37 CJK COMPATIBILITY IDEOGRAPH-FA37
+FA38 CJK COMPATIBILITY IDEOGRAPH-FA38
+FA39 CJK COMPATIBILITY IDEOGRAPH-FA39
+FA3A CJK COMPATIBILITY IDEOGRAPH-FA3A
+FA3B CJK COMPATIBILITY IDEOGRAPH-FA3B
+FA3C CJK COMPATIBILITY IDEOGRAPH-FA3C
+FA3D CJK COMPATIBILITY IDEOGRAPH-FA3D
+FA3E CJK COMPATIBILITY IDEOGRAPH-FA3E
+FA3F CJK COMPATIBILITY IDEOGRAPH-FA3F
+FA40 CJK COMPATIBILITY IDEOGRAPH-FA40
+FA41 CJK COMPATIBILITY IDEOGRAPH-FA41
+FA42 CJK COMPATIBILITY IDEOGRAPH-FA42
+FA43 CJK COMPATIBILITY IDEOGRAPH-FA43
+FA44 CJK COMPATIBILITY IDEOGRAPH-FA44
+FA45 CJK COMPATIBILITY IDEOGRAPH-FA45
+FA46 CJK COMPATIBILITY IDEOGRAPH-FA46
+FA47 CJK COMPATIBILITY IDEOGRAPH-FA47
+FA48 CJK COMPATIBILITY IDEOGRAPH-FA48
+FA49 CJK COMPATIBILITY IDEOGRAPH-FA49
+FA4A CJK COMPATIBILITY IDEOGRAPH-FA4A
+FA4B CJK COMPATIBILITY IDEOGRAPH-FA4B
+FA4C CJK COMPATIBILITY IDEOGRAPH-FA4C
+FA4D CJK COMPATIBILITY IDEOGRAPH-FA4D
+FA4E CJK COMPATIBILITY IDEOGRAPH-FA4E
+FA4F CJK COMPATIBILITY IDEOGRAPH-FA4F
+FA50 CJK COMPATIBILITY IDEOGRAPH-FA50
+FA51 CJK COMPATIBILITY IDEOGRAPH-FA51
+FA52 CJK COMPATIBILITY IDEOGRAPH-FA52
+FA53 CJK COMPATIBILITY IDEOGRAPH-FA53
+FA54 CJK COMPATIBILITY IDEOGRAPH-FA54
+FA55 CJK COMPATIBILITY IDEOGRAPH-FA55
+FA56 CJK COMPATIBILITY IDEOGRAPH-FA56
+FA57 CJK COMPATIBILITY IDEOGRAPH-FA57
+FA58 CJK COMPATIBILITY IDEOGRAPH-FA58
+FA59 CJK COMPATIBILITY IDEOGRAPH-FA59
+FA5A CJK COMPATIBILITY IDEOGRAPH-FA5A
+FA5B CJK COMPATIBILITY IDEOGRAPH-FA5B
+FA5C CJK COMPATIBILITY IDEOGRAPH-FA5C
+FA5D CJK COMPATIBILITY IDEOGRAPH-FA5D
+FA5E CJK COMPATIBILITY IDEOGRAPH-FA5E
+FA5F CJK COMPATIBILITY IDEOGRAPH-FA5F
+FA60 CJK COMPATIBILITY IDEOGRAPH-FA60
+FA61 CJK COMPATIBILITY IDEOGRAPH-FA61
+FA62 CJK COMPATIBILITY IDEOGRAPH-FA62
+FA63 CJK COMPATIBILITY IDEOGRAPH-FA63
+FA64 CJK COMPATIBILITY IDEOGRAPH-FA64
+FA65 CJK COMPATIBILITY IDEOGRAPH-FA65
+FA66 CJK COMPATIBILITY IDEOGRAPH-FA66
+FA67 CJK COMPATIBILITY IDEOGRAPH-FA67
+FA68 CJK COMPATIBILITY IDEOGRAPH-FA68
+FA69 CJK COMPATIBILITY IDEOGRAPH-FA69
+FA6A CJK COMPATIBILITY IDEOGRAPH-FA6A
+FB00 LATIN SMALL LIGATURE FF
+FB01 LATIN SMALL LIGATURE FI
+FB02 LATIN SMALL LIGATURE FL
+FB03 LATIN SMALL LIGATURE FFI
+FB04 LATIN SMALL LIGATURE FFL
+FB05 LATIN SMALL LIGATURE LONG S T
+FB06 LATIN SMALL LIGATURE ST
+FB13 ARMENIAN SMALL LIGATURE MEN NOW
+FB14 ARMENIAN SMALL LIGATURE MEN ECH
+FB15 ARMENIAN SMALL LIGATURE MEN INI
+FB16 ARMENIAN SMALL LIGATURE VEW NOW
+FB17 ARMENIAN SMALL LIGATURE MEN XEH
+FB1D HEBREW LETTER YOD WITH HIRIQ
+FB1E HEBREW POINT JUDEO-SPANISH VARIKA
+FB1F HEBREW LIGATURE YIDDISH YOD YOD PATAH
+FB20 HEBREW LETTER ALTERNATIVE AYIN
+FB21 HEBREW LETTER WIDE ALEF
+FB22 HEBREW LETTER WIDE DALET
+FB23 HEBREW LETTER WIDE HE
+FB24 HEBREW LETTER WIDE KAF
+FB25 HEBREW LETTER WIDE LAMED
+FB26 HEBREW LETTER WIDE FINAL MEM
+FB27 HEBREW LETTER WIDE RESH
+FB28 HEBREW LETTER WIDE TAV
+FB29 HEBREW LETTER ALTERNATIVE PLUS SIGN
+FB2A HEBREW LETTER SHIN WITH SHIN DOT
+FB2B HEBREW LETTER SHIN WITH SIN DOT
+FB2C HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
+FB2D HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
+FB2E HEBREW LETTER ALEF WITH PATAH
+FB2F HEBREW LETTER ALEF WITH QAMATS
+FB30 HEBREW LETTER ALEF WITH MAPIQ
+FB31 HEBREW LETTER BET WITH DAGESH
+FB32 HEBREW LETTER GIMEL WITH DAGESH
+FB33 HEBREW LETTER DALET WITH DAGESH
+FB34 HEBREW LETTER HE WITH MAPIQ
+FB35 HEBREW LETTER VAV WITH DAGESH
+FB36 HEBREW LETTER ZAYIN WITH DAGESH
+FB38 HEBREW LETTER TET WITH DAGESH
+FB39 HEBREW LETTER YOD WITH DAGESH
+FB3A HEBREW LETTER FINAL KAF WITH DAGESH
+FB3B HEBREW LETTER KAF WITH DAGESH
+FB3C HEBREW LETTER LAMED WITH DAGESH
+FB3E HEBREW LETTER MEM WITH DAGESH
+FB40 HEBREW LETTER NUN WITH DAGESH
+FB41 HEBREW LETTER SAMEKH WITH DAGESH
+FB43 HEBREW LETTER FINAL PE WITH DAGESH
+FB44 HEBREW LETTER PE WITH DAGESH
+FB46 HEBREW LETTER TSADI WITH DAGESH
+FB47 HEBREW LETTER QOF WITH DAGESH
+FB48 HEBREW LETTER RESH WITH DAGESH
+FB49 HEBREW LETTER SHIN WITH DAGESH
+FB4A HEBREW LETTER TAV WITH DAGESH
+FB4B HEBREW LETTER VAV WITH HOLAM
+FB4C HEBREW LETTER BET WITH RAFE
+FB4D HEBREW LETTER KAF WITH RAFE
+FB4E HEBREW LETTER PE WITH RAFE
+FB4F HEBREW LIGATURE ALEF LAMED
+FB50 ARABIC LETTER ALEF WASLA ISOLATED FORM
+FB51 ARABIC LETTER ALEF WASLA FINAL FORM
+FB52 ARABIC LETTER BEEH ISOLATED FORM
+FB53 ARABIC LETTER BEEH FINAL FORM
+FB54 ARABIC LETTER BEEH INITIAL FORM
+FB55 ARABIC LETTER BEEH MEDIAL FORM
+FB56 ARABIC LETTER PEH ISOLATED FORM
+FB57 ARABIC LETTER PEH FINAL FORM
+FB58 ARABIC LETTER PEH INITIAL FORM
+FB59 ARABIC LETTER PEH MEDIAL FORM
+FB5A ARABIC LETTER BEHEH ISOLATED FORM
+FB5B ARABIC LETTER BEHEH FINAL FORM
+FB5C ARABIC LETTER BEHEH INITIAL FORM
+FB5D ARABIC LETTER BEHEH MEDIAL FORM
+FB5E ARABIC LETTER TTEHEH ISOLATED FORM
+FB5F ARABIC LETTER TTEHEH FINAL FORM
+FB60 ARABIC LETTER TTEHEH INITIAL FORM
+FB61 ARABIC LETTER TTEHEH MEDIAL FORM
+FB62 ARABIC LETTER TEHEH ISOLATED FORM
+FB63 ARABIC LETTER TEHEH FINAL FORM
+FB64 ARABIC LETTER TEHEH INITIAL FORM
+FB65 ARABIC LETTER TEHEH MEDIAL FORM
+FB66 ARABIC LETTER TTEH ISOLATED FORM
+FB67 ARABIC LETTER TTEH FINAL FORM
+FB68 ARABIC LETTER TTEH INITIAL FORM
+FB69 ARABIC LETTER TTEH MEDIAL FORM
+FB6A ARABIC LETTER VEH ISOLATED FORM
+FB6B ARABIC LETTER VEH FINAL FORM
+FB6C ARABIC LETTER VEH INITIAL FORM
+FB6D ARABIC LETTER VEH MEDIAL FORM
+FB6E ARABIC LETTER PEHEH ISOLATED FORM
+FB6F ARABIC LETTER PEHEH FINAL FORM
+FB70 ARABIC LETTER PEHEH INITIAL FORM
+FB71 ARABIC LETTER PEHEH MEDIAL FORM
+FB72 ARABIC LETTER DYEH ISOLATED FORM
+FB73 ARABIC LETTER DYEH FINAL FORM
+FB74 ARABIC LETTER DYEH INITIAL FORM
+FB75 ARABIC LETTER DYEH MEDIAL FORM
+FB76 ARABIC LETTER NYEH ISOLATED FORM
+FB77 ARABIC LETTER NYEH FINAL FORM
+FB78 ARABIC LETTER NYEH INITIAL FORM
+FB79 ARABIC LETTER NYEH MEDIAL FORM
+FB7A ARABIC LETTER TCHEH ISOLATED FORM
+FB7B ARABIC LETTER TCHEH FINAL FORM
+FB7C ARABIC LETTER TCHEH INITIAL FORM
+FB7D ARABIC LETTER TCHEH MEDIAL FORM
+FB7E ARABIC LETTER TCHEHEH ISOLATED FORM
+FB7F ARABIC LETTER TCHEHEH FINAL FORM
+FB80 ARABIC LETTER TCHEHEH INITIAL FORM
+FB81 ARABIC LETTER TCHEHEH MEDIAL FORM
+FB82 ARABIC LETTER DDAHAL ISOLATED FORM
+FB83 ARABIC LETTER DDAHAL FINAL FORM
+FB84 ARABIC LETTER DAHAL ISOLATED FORM
+FB85 ARABIC LETTER DAHAL FINAL FORM
+FB86 ARABIC LETTER DUL ISOLATED FORM
+FB87 ARABIC LETTER DUL FINAL FORM
+FB88 ARABIC LETTER DDAL ISOLATED FORM
+FB89 ARABIC LETTER DDAL FINAL FORM
+FB8A ARABIC LETTER JEH ISOLATED FORM
+FB8B ARABIC LETTER JEH FINAL FORM
+FB8C ARABIC LETTER RREH ISOLATED FORM
+FB8D ARABIC LETTER RREH FINAL FORM
+FB8E ARABIC LETTER KEHEH ISOLATED FORM
+FB8F ARABIC LETTER KEHEH FINAL FORM
+FB90 ARABIC LETTER KEHEH INITIAL FORM
+FB91 ARABIC LETTER KEHEH MEDIAL FORM
+FB92 ARABIC LETTER GAF ISOLATED FORM
+FB93 ARABIC LETTER GAF FINAL FORM
+FB94 ARABIC LETTER GAF INITIAL FORM
+FB95 ARABIC LETTER GAF MEDIAL FORM
+FB96 ARABIC LETTER GUEH ISOLATED FORM
+FB97 ARABIC LETTER GUEH FINAL FORM
+FB98 ARABIC LETTER GUEH INITIAL FORM
+FB99 ARABIC LETTER GUEH MEDIAL FORM
+FB9A ARABIC LETTER NGOEH ISOLATED FORM
+FB9B ARABIC LETTER NGOEH FINAL FORM
+FB9C ARABIC LETTER NGOEH INITIAL FORM
+FB9D ARABIC LETTER NGOEH MEDIAL FORM
+FB9E ARABIC LETTER NOON GHUNNA ISOLATED FORM
+FB9F ARABIC LETTER NOON GHUNNA FINAL FORM
+FBA0 ARABIC LETTER RNOON ISOLATED FORM
+FBA1 ARABIC LETTER RNOON FINAL FORM
+FBA2 ARABIC LETTER RNOON INITIAL FORM
+FBA3 ARABIC LETTER RNOON MEDIAL FORM
+FBA4 ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM
+FBA5 ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM
+FBA6 ARABIC LETTER HEH GOAL ISOLATED FORM
+FBA7 ARABIC LETTER HEH GOAL FINAL FORM
+FBA8 ARABIC LETTER HEH GOAL INITIAL FORM
+FBA9 ARABIC LETTER HEH GOAL MEDIAL FORM
+FBAA ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
+FBAB ARABIC LETTER HEH DOACHASHMEE FINAL FORM
+FBAC ARABIC LETTER HEH DOACHASHMEE INITIAL FORM
+FBAD ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM
+FBAE ARABIC LETTER YEH BARREE ISOLATED FORM
+FBAF ARABIC LETTER YEH BARREE FINAL FORM
+FBB0 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
+FBB1 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3 ARABIC LETTER NG ISOLATED FORM
+FBD4 ARABIC LETTER NG FINAL FORM
+FBD5 ARABIC LETTER NG INITIAL FORM
+FBD6 ARABIC LETTER NG MEDIAL FORM
+FBD7 ARABIC LETTER U ISOLATED FORM
+FBD8 ARABIC LETTER U FINAL FORM
+FBD9 ARABIC LETTER OE ISOLATED FORM
+FBDA ARABIC LETTER OE FINAL FORM
+FBDB ARABIC LETTER YU ISOLATED FORM
+FBDC ARABIC LETTER YU FINAL FORM
+FBDD ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM
+FBDE ARABIC LETTER VE ISOLATED FORM
+FBDF ARABIC LETTER VE FINAL FORM
+FBE0 ARABIC LETTER KIRGHIZ OE ISOLATED FORM
+FBE1 ARABIC LETTER KIRGHIZ OE FINAL FORM
+FBE2 ARABIC LETTER KIRGHIZ YU ISOLATED FORM
+FBE3 ARABIC LETTER KIRGHIZ YU FINAL FORM
+FBE4 ARABIC LETTER E ISOLATED FORM
+FBE5 ARABIC LETTER E FINAL FORM
+FBE6 ARABIC LETTER E INITIAL FORM
+FBE7 ARABIC LETTER E MEDIAL FORM
+FBE8 ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM
+FBE9 ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM
+FBEA ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM
+FBEB ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM
+FBEC ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM
+FBED ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM
+FBEE ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM
+FBEF ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM
+FBF0 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM
+FBF1 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM
+FBF2 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM
+FBF3 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM
+FBF4 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM
+FBF5 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM
+FBF6 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM
+FBF7 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM
+FBF8 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM
+FBF9 ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+FBFA ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+FBFB ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM
+FBFC ARABIC LETTER FARSI YEH ISOLATED FORM
+FBFD ARABIC LETTER FARSI YEH FINAL FORM
+FBFE ARABIC LETTER FARSI YEH INITIAL FORM
+FBFF ARABIC LETTER FARSI YEH MEDIAL FORM
+FC00 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM
+FC01 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM
+FC02 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM
+FC03 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+FC04 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM
+FC05 ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM
+FC06 ARABIC LIGATURE BEH WITH HAH ISOLATED FORM
+FC07 ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM
+FC08 ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM
+FC09 ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM
+FC0A ARABIC LIGATURE BEH WITH YEH ISOLATED FORM
+FC0B ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM
+FC0C ARABIC LIGATURE TEH WITH HAH ISOLATED FORM
+FC0D ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM
+FC0E ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM
+FC0F ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM
+FC10 ARABIC LIGATURE TEH WITH YEH ISOLATED FORM
+FC11 ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM
+FC12 ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM
+FC13 ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM
+FC14 ARABIC LIGATURE THEH WITH YEH ISOLATED FORM
+FC15 ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM
+FC16 ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM
+FC17 ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM
+FC18 ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM
+FC19 ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM
+FC1A ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM
+FC1B ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM
+FC1C ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM
+FC1D ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM
+FC1E ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM
+FC1F ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM
+FC20 ARABIC LIGATURE SAD WITH HAH ISOLATED FORM
+FC21 ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM
+FC22 ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM
+FC23 ARABIC LIGATURE DAD WITH HAH ISOLATED FORM
+FC24 ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM
+FC25 ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM
+FC26 ARABIC LIGATURE TAH WITH HAH ISOLATED FORM
+FC27 ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM
+FC28 ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM
+FC29 ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM
+FC2A ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM
+FC2B ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM
+FC2C ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM
+FC2D ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM
+FC2E ARABIC LIGATURE FEH WITH HAH ISOLATED FORM
+FC2F ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM
+FC30 ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM
+FC31 ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM
+FC32 ARABIC LIGATURE FEH WITH YEH ISOLATED FORM
+FC33 ARABIC LIGATURE QAF WITH HAH ISOLATED FORM
+FC34 ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM
+FC35 ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM
+FC36 ARABIC LIGATURE QAF WITH YEH ISOLATED FORM
+FC37 ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM
+FC38 ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM
+FC39 ARABIC LIGATURE KAF WITH HAH ISOLATED FORM
+FC3A ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM
+FC3B ARABIC LIGATURE KAF WITH LAM ISOLATED FORM
+FC3C ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM
+FC3D ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM
+FC3E ARABIC LIGATURE KAF WITH YEH ISOLATED FORM
+FC3F ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM
+FC40 ARABIC LIGATURE LAM WITH HAH ISOLATED FORM
+FC41 ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM
+FC42 ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM
+FC43 ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM
+FC44 ARABIC LIGATURE LAM WITH YEH ISOLATED FORM
+FC45 ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM
+FC46 ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM
+FC47 ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM
+FC48 ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM
+FC49 ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM
+FC4A ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM
+FC4B ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM
+FC4C ARABIC LIGATURE NOON WITH HAH ISOLATED FORM
+FC4D ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM
+FC4E ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM
+FC4F ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM
+FC50 ARABIC LIGATURE NOON WITH YEH ISOLATED FORM
+FC51 ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM
+FC52 ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM
+FC53 ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM
+FC54 ARABIC LIGATURE HEH WITH YEH ISOLATED FORM
+FC55 ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM
+FC56 ARABIC LIGATURE YEH WITH HAH ISOLATED FORM
+FC57 ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM
+FC58 ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM
+FC59 ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM
+FC5A ARABIC LIGATURE YEH WITH YEH ISOLATED FORM
+FC5B ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5C ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5D ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5E ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM
+FC5F ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM
+FC60 ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM
+FC61 ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM
+FC62 ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM
+FC63 ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC64 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM
+FC65 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM
+FC66 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM
+FC67 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM
+FC68 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+FC69 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM
+FC6A ARABIC LIGATURE BEH WITH REH FINAL FORM
+FC6B ARABIC LIGATURE BEH WITH ZAIN FINAL FORM
+FC6C ARABIC LIGATURE BEH WITH MEEM FINAL FORM
+FC6D ARABIC LIGATURE BEH WITH NOON FINAL FORM
+FC6E ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM
+FC6F ARABIC LIGATURE BEH WITH YEH FINAL FORM
+FC70 ARABIC LIGATURE TEH WITH REH FINAL FORM
+FC71 ARABIC LIGATURE TEH WITH ZAIN FINAL FORM
+FC72 ARABIC LIGATURE TEH WITH MEEM FINAL FORM
+FC73 ARABIC LIGATURE TEH WITH NOON FINAL FORM
+FC74 ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM
+FC75 ARABIC LIGATURE TEH WITH YEH FINAL FORM
+FC76 ARABIC LIGATURE THEH WITH REH FINAL FORM
+FC77 ARABIC LIGATURE THEH WITH ZAIN FINAL FORM
+FC78 ARABIC LIGATURE THEH WITH MEEM FINAL FORM
+FC79 ARABIC LIGATURE THEH WITH NOON FINAL FORM
+FC7A ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM
+FC7B ARABIC LIGATURE THEH WITH YEH FINAL FORM
+FC7C ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM
+FC7D ARABIC LIGATURE FEH WITH YEH FINAL FORM
+FC7E ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM
+FC7F ARABIC LIGATURE QAF WITH YEH FINAL FORM
+FC80 ARABIC LIGATURE KAF WITH ALEF FINAL FORM
+FC81 ARABIC LIGATURE KAF WITH LAM FINAL FORM
+FC82 ARABIC LIGATURE KAF WITH MEEM FINAL FORM
+FC83 ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM
+FC84 ARABIC LIGATURE KAF WITH YEH FINAL FORM
+FC85 ARABIC LIGATURE LAM WITH MEEM FINAL FORM
+FC86 ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM
+FC87 ARABIC LIGATURE LAM WITH YEH FINAL FORM
+FC88 ARABIC LIGATURE MEEM WITH ALEF FINAL FORM
+FC89 ARABIC LIGATURE MEEM WITH MEEM FINAL FORM
+FC8A ARABIC LIGATURE NOON WITH REH FINAL FORM
+FC8B ARABIC LIGATURE NOON WITH ZAIN FINAL FORM
+FC8C ARABIC LIGATURE NOON WITH MEEM FINAL FORM
+FC8D ARABIC LIGATURE NOON WITH NOON FINAL FORM
+FC8E ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM
+FC8F ARABIC LIGATURE NOON WITH YEH FINAL FORM
+FC90 ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM
+FC91 ARABIC LIGATURE YEH WITH REH FINAL FORM
+FC92 ARABIC LIGATURE YEH WITH ZAIN FINAL FORM
+FC93 ARABIC LIGATURE YEH WITH MEEM FINAL FORM
+FC94 ARABIC LIGATURE YEH WITH NOON FINAL FORM
+FC95 ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM
+FC96 ARABIC LIGATURE YEH WITH YEH FINAL FORM
+FC97 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM
+FC98 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM
+FC99 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM
+FC9A ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM
+FC9B ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM
+FC9C ARABIC LIGATURE BEH WITH JEEM INITIAL FORM
+FC9D ARABIC LIGATURE BEH WITH HAH INITIAL FORM
+FC9E ARABIC LIGATURE BEH WITH KHAH INITIAL FORM
+FC9F ARABIC LIGATURE BEH WITH MEEM INITIAL FORM
+FCA0 ARABIC LIGATURE BEH WITH HEH INITIAL FORM
+FCA1 ARABIC LIGATURE TEH WITH JEEM INITIAL FORM
+FCA2 ARABIC LIGATURE TEH WITH HAH INITIAL FORM
+FCA3 ARABIC LIGATURE TEH WITH KHAH INITIAL FORM
+FCA4 ARABIC LIGATURE TEH WITH MEEM INITIAL FORM
+FCA5 ARABIC LIGATURE TEH WITH HEH INITIAL FORM
+FCA6 ARABIC LIGATURE THEH WITH MEEM INITIAL FORM
+FCA7 ARABIC LIGATURE JEEM WITH HAH INITIAL FORM
+FCA8 ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM
+FCA9 ARABIC LIGATURE HAH WITH JEEM INITIAL FORM
+FCAA ARABIC LIGATURE HAH WITH MEEM INITIAL FORM
+FCAB ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM
+FCAC ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM
+FCAD ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM
+FCAE ARABIC LIGATURE SEEN WITH HAH INITIAL FORM
+FCAF ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM
+FCB0 ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM
+FCB1 ARABIC LIGATURE SAD WITH HAH INITIAL FORM
+FCB2 ARABIC LIGATURE SAD WITH KHAH INITIAL FORM
+FCB3 ARABIC LIGATURE SAD WITH MEEM INITIAL FORM
+FCB4 ARABIC LIGATURE DAD WITH JEEM INITIAL FORM
+FCB5 ARABIC LIGATURE DAD WITH HAH INITIAL FORM
+FCB6 ARABIC LIGATURE DAD WITH KHAH INITIAL FORM
+FCB7 ARABIC LIGATURE DAD WITH MEEM INITIAL FORM
+FCB8 ARABIC LIGATURE TAH WITH HAH INITIAL FORM
+FCB9 ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM
+FCBA ARABIC LIGATURE AIN WITH JEEM INITIAL FORM
+FCBB ARABIC LIGATURE AIN WITH MEEM INITIAL FORM
+FCBC ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM
+FCBD ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM
+FCBE ARABIC LIGATURE FEH WITH JEEM INITIAL FORM
+FCBF ARABIC LIGATURE FEH WITH HAH INITIAL FORM
+FCC0 ARABIC LIGATURE FEH WITH KHAH INITIAL FORM
+FCC1 ARABIC LIGATURE FEH WITH MEEM INITIAL FORM
+FCC2 ARABIC LIGATURE QAF WITH HAH INITIAL FORM
+FCC3 ARABIC LIGATURE QAF WITH MEEM INITIAL FORM
+FCC4 ARABIC LIGATURE KAF WITH JEEM INITIAL FORM
+FCC5 ARABIC LIGATURE KAF WITH HAH INITIAL FORM
+FCC6 ARABIC LIGATURE KAF WITH KHAH INITIAL FORM
+FCC7 ARABIC LIGATURE KAF WITH LAM INITIAL FORM
+FCC8 ARABIC LIGATURE KAF WITH MEEM INITIAL FORM
+FCC9 ARABIC LIGATURE LAM WITH JEEM INITIAL FORM
+FCCA ARABIC LIGATURE LAM WITH HAH INITIAL FORM
+FCCB ARABIC LIGATURE LAM WITH KHAH INITIAL FORM
+FCCC ARABIC LIGATURE LAM WITH MEEM INITIAL FORM
+FCCD ARABIC LIGATURE LAM WITH HEH INITIAL FORM
+FCCE ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM
+FCCF ARABIC LIGATURE MEEM WITH HAH INITIAL FORM
+FCD0 ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM
+FCD1 ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM
+FCD2 ARABIC LIGATURE NOON WITH JEEM INITIAL FORM
+FCD3 ARABIC LIGATURE NOON WITH HAH INITIAL FORM
+FCD4 ARABIC LIGATURE NOON WITH KHAH INITIAL FORM
+FCD5 ARABIC LIGATURE NOON WITH MEEM INITIAL FORM
+FCD6 ARABIC LIGATURE NOON WITH HEH INITIAL FORM
+FCD7 ARABIC LIGATURE HEH WITH JEEM INITIAL FORM
+FCD8 ARABIC LIGATURE HEH WITH MEEM INITIAL FORM
+FCD9 ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM
+FCDA ARABIC LIGATURE YEH WITH JEEM INITIAL FORM
+FCDB ARABIC LIGATURE YEH WITH HAH INITIAL FORM
+FCDC ARABIC LIGATURE YEH WITH KHAH INITIAL FORM
+FCDD ARABIC LIGATURE YEH WITH MEEM INITIAL FORM
+FCDE ARABIC LIGATURE YEH WITH HEH INITIAL FORM
+FCDF ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM
+FCE0 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM
+FCE1 ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM
+FCE2 ARABIC LIGATURE BEH WITH HEH MEDIAL FORM
+FCE3 ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM
+FCE4 ARABIC LIGATURE TEH WITH HEH MEDIAL FORM
+FCE5 ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM
+FCE6 ARABIC LIGATURE THEH WITH HEH MEDIAL FORM
+FCE7 ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM
+FCE8 ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM
+FCE9 ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM
+FCEA ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM
+FCEB ARABIC LIGATURE KAF WITH LAM MEDIAL FORM
+FCEC ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM
+FCED ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM
+FCEE ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM
+FCEF ARABIC LIGATURE NOON WITH HEH MEDIAL FORM
+FCF0 ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM
+FCF1 ARABIC LIGATURE YEH WITH HEH MEDIAL FORM
+FCF2 ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM
+FCF3 ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM
+FCF4 ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM
+FCF5 ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM
+FCF6 ARABIC LIGATURE TAH WITH YEH ISOLATED FORM
+FCF7 ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM
+FCF8 ARABIC LIGATURE AIN WITH YEH ISOLATED FORM
+FCF9 ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM
+FCFA ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM
+FCFB ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM
+FCFC ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM
+FCFD ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM
+FCFE ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM
+FCFF ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM
+FD00 ARABIC LIGATURE HAH WITH YEH ISOLATED FORM
+FD01 ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM
+FD02 ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM
+FD03 ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM
+FD04 ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM
+FD05 ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM
+FD06 ARABIC LIGATURE SAD WITH YEH ISOLATED FORM
+FD07 ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM
+FD08 ARABIC LIGATURE DAD WITH YEH ISOLATED FORM
+FD09 ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM
+FD0A ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM
+FD0B ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM
+FD0C ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM
+FD0D ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM
+FD0E ARABIC LIGATURE SEEN WITH REH ISOLATED FORM
+FD0F ARABIC LIGATURE SAD WITH REH ISOLATED FORM
+FD10 ARABIC LIGATURE DAD WITH REH ISOLATED FORM
+FD11 ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM
+FD12 ARABIC LIGATURE TAH WITH YEH FINAL FORM
+FD13 ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM
+FD14 ARABIC LIGATURE AIN WITH YEH FINAL FORM
+FD15 ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM
+FD16 ARABIC LIGATURE GHAIN WITH YEH FINAL FORM
+FD17 ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM
+FD18 ARABIC LIGATURE SEEN WITH YEH FINAL FORM
+FD19 ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM
+FD1A ARABIC LIGATURE SHEEN WITH YEH FINAL FORM
+FD1B ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM
+FD1C ARABIC LIGATURE HAH WITH YEH FINAL FORM
+FD1D ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM
+FD1E ARABIC LIGATURE JEEM WITH YEH FINAL FORM
+FD1F ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM
+FD20 ARABIC LIGATURE KHAH WITH YEH FINAL FORM
+FD21 ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM
+FD22 ARABIC LIGATURE SAD WITH YEH FINAL FORM
+FD23 ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM
+FD24 ARABIC LIGATURE DAD WITH YEH FINAL FORM
+FD25 ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM
+FD26 ARABIC LIGATURE SHEEN WITH HAH FINAL FORM
+FD27 ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM
+FD28 ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM
+FD29 ARABIC LIGATURE SHEEN WITH REH FINAL FORM
+FD2A ARABIC LIGATURE SEEN WITH REH FINAL FORM
+FD2B ARABIC LIGATURE SAD WITH REH FINAL FORM
+FD2C ARABIC LIGATURE DAD WITH REH FINAL FORM
+FD2D ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM
+FD2E ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM
+FD2F ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM
+FD30 ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM
+FD31 ARABIC LIGATURE SEEN WITH HEH INITIAL FORM
+FD32 ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM
+FD33 ARABIC LIGATURE TAH WITH MEEM INITIAL FORM
+FD34 ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM
+FD35 ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM
+FD36 ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM
+FD37 ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM
+FD38 ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM
+FD39 ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM
+FD3A ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM
+FD3B ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM
+FD3C ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM
+FD3D ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD3E ORNATE LEFT PARENTHESIS
+FD3F ORNATE RIGHT PARENTHESIS
+FD50 ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
+FD51 ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM
+FD52 ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM
+FD53 ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM
+FD54 ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM
+FD55 ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM
+FD56 ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM
+FD57 ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM
+FD58 ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM
+FD59 ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM
+FD5A ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM
+FD5B ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD5C ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM
+FD5D ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM
+FD5E ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FD5F ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM
+FD60 ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM
+FD61 ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM
+FD62 ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM
+FD63 ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM
+FD64 ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM
+FD65 ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM
+FD66 ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM
+FD67 ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM
+FD68 ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM
+FD69 ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM
+FD6A ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM
+FD6B ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM
+FD6C ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM
+FD6D ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM
+FD6E ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD6F ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM
+FD70 ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM
+FD71 ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM
+FD72 ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM
+FD73 ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM
+FD74 ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM
+FD75 ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM
+FD76 ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM
+FD77 ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM
+FD78 ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD79 ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM
+FD7A ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM
+FD7B ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD7C ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM
+FD7D ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM
+FD7E ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM
+FD7F ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM
+FD80 ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM
+FD81 ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM
+FD82 ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD83 ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM
+FD84 ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM
+FD85 ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM
+FD86 ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM
+FD87 ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM
+FD88 ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM
+FD89 ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM
+FD8A ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM
+FD8B ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM
+FD8C ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM
+FD8D ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM
+FD8E ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM
+FD8F ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92 ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
+FD93 ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM
+FD94 ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM
+FD95 ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM
+FD96 ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD97 ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM
+FD98 ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM
+FD99 ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FD9A ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM
+FD9B ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD9C ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM
+FD9D ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM
+FD9E ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM
+FD9F ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM
+FDA0 ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FDA1 ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM
+FDA2 ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM
+FDA3 ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM
+FDA4 ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FDA5 ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM
+FDA6 ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM
+FDA7 ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FDA8 ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM
+FDA9 ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM
+FDAA ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM
+FDAB ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM
+FDAC ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM
+FDAD ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM
+FDAE ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM
+FDAF ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM
+FDB0 ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM
+FDB1 ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM
+FDB2 ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM
+FDB3 ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM
+FDB4 ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM
+FDB5 ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM
+FDB6 ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM
+FDB7 ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM
+FDB8 ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM
+FDB9 ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM
+FDBA ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM
+FDBB ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM
+FDBC ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM
+FDBD ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM
+FDBE ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM
+FDBF ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM
+FDC0 ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM
+FDC1 ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM
+FDC2 ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM
+FDC3 ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM
+FDC4 ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM
+FDC5 ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM
+FDC6 ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM
+FDC7 ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0 ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
+FDF1 ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM
+FDF2 ARABIC LIGATURE ALLAH ISOLATED FORM
+FDF3 ARABIC LIGATURE AKBAR ISOLATED FORM
+FDF4 ARABIC LIGATURE MOHAMMAD ISOLATED FORM
+FDF5 ARABIC LIGATURE SALAM ISOLATED FORM
+FDF6 ARABIC LIGATURE RASOUL ISOLATED FORM
+FDF7 ARABIC LIGATURE ALAYHE ISOLATED FORM
+FDF8 ARABIC LIGATURE WASALLAM ISOLATED FORM
+FDF9 ARABIC LIGATURE SALLA ISOLATED FORM
+FDFA ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM
+FDFB ARABIC LIGATURE JALLAJALALOUHOU
+FDFC RIAL SIGN
+FE00 VARIATION SELECTOR-1
+FE01 VARIATION SELECTOR-2
+FE02 VARIATION SELECTOR-3
+FE03 VARIATION SELECTOR-4
+FE04 VARIATION SELECTOR-5
+FE05 VARIATION SELECTOR-6
+FE06 VARIATION SELECTOR-7
+FE07 VARIATION SELECTOR-8
+FE08 VARIATION SELECTOR-9
+FE09 VARIATION SELECTOR-10
+FE0A VARIATION SELECTOR-11
+FE0B VARIATION SELECTOR-12
+FE0C VARIATION SELECTOR-13
+FE0D VARIATION SELECTOR-14
+FE0E VARIATION SELECTOR-15
+FE0F VARIATION SELECTOR-16
+FE20 COMBINING LIGATURE LEFT HALF
+FE21 COMBINING LIGATURE RIGHT HALF
+FE22 COMBINING DOUBLE TILDE LEFT HALF
+FE23 COMBINING DOUBLE TILDE RIGHT HALF
+FE30 PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31 PRESENTATION FORM FOR VERTICAL EM DASH
+FE32 PRESENTATION FORM FOR VERTICAL EN DASH
+FE33 PRESENTATION FORM FOR VERTICAL LOW LINE
+FE34 PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35 PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36 PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37 PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38 PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39 PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40 PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41 PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42 PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43 PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44 PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE45 SESAME DOT
+FE46 WHITE SESAME DOT
+FE49 DASHED OVERLINE
+FE4A CENTRELINE OVERLINE
+FE4B WAVY OVERLINE
+FE4C DOUBLE WAVY OVERLINE
+FE4D DASHED LOW LINE
+FE4E CENTRELINE LOW LINE
+FE4F WAVY LOW LINE
+FE50 SMALL COMMA
+FE51 SMALL IDEOGRAPHIC COMMA
+FE52 SMALL FULL STOP
+FE54 SMALL SEMICOLON
+FE55 SMALL COLON
+FE56 SMALL QUESTION MARK
+FE57 SMALL EXCLAMATION MARK
+FE58 SMALL EM DASH
+FE59 SMALL LEFT PARENTHESIS
+FE5A SMALL RIGHT PARENTHESIS
+FE5B SMALL LEFT CURLY BRACKET
+FE5C SMALL RIGHT CURLY BRACKET
+FE5D SMALL LEFT TORTOISE SHELL BRACKET
+FE5E SMALL RIGHT TORTOISE SHELL BRACKET
+FE5F SMALL NUMBER SIGN
+FE60 SMALL AMPERSAND
+FE61 SMALL ASTERISK
+FE62 SMALL PLUS SIGN
+FE63 SMALL HYPHEN-MINUS
+FE64 SMALL LESS-THAN SIGN
+FE65 SMALL GREATER-THAN SIGN
+FE66 SMALL EQUALS SIGN
+FE68 SMALL REVERSE SOLIDUS
+FE69 SMALL DOLLAR SIGN
+FE6A SMALL PERCENT SIGN
+FE6B SMALL COMMERCIAL AT
+FE70 ARABIC FATHATAN ISOLATED FORM
+FE71 ARABIC TATWEEL WITH FATHATAN ABOVE
+FE72 ARABIC DAMMATAN ISOLATED FORM
+FE73 ARABIC TAIL FRAGMENT
+FE74 ARABIC KASRATAN ISOLATED FORM
+FE76 ARABIC FATHA ISOLATED FORM
+FE77 ARABIC FATHA MEDIAL FORM
+FE78 ARABIC DAMMA ISOLATED FORM
+FE79 ARABIC DAMMA MEDIAL FORM
+FE7A ARABIC KASRA ISOLATED FORM
+FE7B ARABIC KASRA MEDIAL FORM
+FE7C ARABIC SHADDA ISOLATED FORM
+FE7D ARABIC SHADDA MEDIAL FORM
+FE7E ARABIC SUKUN ISOLATED FORM
+FE7F ARABIC SUKUN MEDIAL FORM
+FE80 ARABIC LETTER HAMZA ISOLATED FORM
+FE81 ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
+FE82 ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
+FE83 ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
+FE84 ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
+FE85 ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
+FE86 ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM
+FE87 ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM
+FE88 ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM
+FE89 ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
+FE8A ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
+FE8B ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
+FE8C ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM
+FE8D ARABIC LETTER ALEF ISOLATED FORM
+FE8E ARABIC LETTER ALEF FINAL FORM
+FE8F ARABIC LETTER BEH ISOLATED FORM
+FE90 ARABIC LETTER BEH FINAL FORM
+FE91 ARABIC LETTER BEH INITIAL FORM
+FE92 ARABIC LETTER BEH MEDIAL FORM
+FE93 ARABIC LETTER TEH MARBUTA ISOLATED FORM
+FE94 ARABIC LETTER TEH MARBUTA FINAL FORM
+FE95 ARABIC LETTER TEH ISOLATED FORM
+FE96 ARABIC LETTER TEH FINAL FORM
+FE97 ARABIC LETTER TEH INITIAL FORM
+FE98 ARABIC LETTER TEH MEDIAL FORM
+FE99 ARABIC LETTER THEH ISOLATED FORM
+FE9A ARABIC LETTER THEH FINAL FORM
+FE9B ARABIC LETTER THEH INITIAL FORM
+FE9C ARABIC LETTER THEH MEDIAL FORM
+FE9D ARABIC LETTER JEEM ISOLATED FORM
+FE9E ARABIC LETTER JEEM FINAL FORM
+FE9F ARABIC LETTER JEEM INITIAL FORM
+FEA0 ARABIC LETTER JEEM MEDIAL FORM
+FEA1 ARABIC LETTER HAH ISOLATED FORM
+FEA2 ARABIC LETTER HAH FINAL FORM
+FEA3 ARABIC LETTER HAH INITIAL FORM
+FEA4 ARABIC LETTER HAH MEDIAL FORM
+FEA5 ARABIC LETTER KHAH ISOLATED FORM
+FEA6 ARABIC LETTER KHAH FINAL FORM
+FEA7 ARABIC LETTER KHAH INITIAL FORM
+FEA8 ARABIC LETTER KHAH MEDIAL FORM
+FEA9 ARABIC LETTER DAL ISOLATED FORM
+FEAA ARABIC LETTER DAL FINAL FORM
+FEAB ARABIC LETTER THAL ISOLATED FORM
+FEAC ARABIC LETTER THAL FINAL FORM
+FEAD ARABIC LETTER REH ISOLATED FORM
+FEAE ARABIC LETTER REH FINAL FORM
+FEAF ARABIC LETTER ZAIN ISOLATED FORM
+FEB0 ARABIC LETTER ZAIN FINAL FORM
+FEB1 ARABIC LETTER SEEN ISOLATED FORM
+FEB2 ARABIC LETTER SEEN FINAL FORM
+FEB3 ARABIC LETTER SEEN INITIAL FORM
+FEB4 ARABIC LETTER SEEN MEDIAL FORM
+FEB5 ARABIC LETTER SHEEN ISOLATED FORM
+FEB6 ARABIC LETTER SHEEN FINAL FORM
+FEB7 ARABIC LETTER SHEEN INITIAL FORM
+FEB8 ARABIC LETTER SHEEN MEDIAL FORM
+FEB9 ARABIC LETTER SAD ISOLATED FORM
+FEBA ARABIC LETTER SAD FINAL FORM
+FEBB ARABIC LETTER SAD INITIAL FORM
+FEBC ARABIC LETTER SAD MEDIAL FORM
+FEBD ARABIC LETTER DAD ISOLATED FORM
+FEBE ARABIC LETTER DAD FINAL FORM
+FEBF ARABIC LETTER DAD INITIAL FORM
+FEC0 ARABIC LETTER DAD MEDIAL FORM
+FEC1 ARABIC LETTER TAH ISOLATED FORM
+FEC2 ARABIC LETTER TAH FINAL FORM
+FEC3 ARABIC LETTER TAH INITIAL FORM
+FEC4 ARABIC LETTER TAH MEDIAL FORM
+FEC5 ARABIC LETTER ZAH ISOLATED FORM
+FEC6 ARABIC LETTER ZAH FINAL FORM
+FEC7 ARABIC LETTER ZAH INITIAL FORM
+FEC8 ARABIC LETTER ZAH MEDIAL FORM
+FEC9 ARABIC LETTER AIN ISOLATED FORM
+FECA ARABIC LETTER AIN FINAL FORM
+FECB ARABIC LETTER AIN INITIAL FORM
+FECC ARABIC LETTER AIN MEDIAL FORM
+FECD ARABIC LETTER GHAIN ISOLATED FORM
+FECE ARABIC LETTER GHAIN FINAL FORM
+FECF ARABIC LETTER GHAIN INITIAL FORM
+FED0 ARABIC LETTER GHAIN MEDIAL FORM
+FED1 ARABIC LETTER FEH ISOLATED FORM
+FED2 ARABIC LETTER FEH FINAL FORM
+FED3 ARABIC LETTER FEH INITIAL FORM
+FED4 ARABIC LETTER FEH MEDIAL FORM
+FED5 ARABIC LETTER QAF ISOLATED FORM
+FED6 ARABIC LETTER QAF FINAL FORM
+FED7 ARABIC LETTER QAF INITIAL FORM
+FED8 ARABIC LETTER QAF MEDIAL FORM
+FED9 ARABIC LETTER KAF ISOLATED FORM
+FEDA ARABIC LETTER KAF FINAL FORM
+FEDB ARABIC LETTER KAF INITIAL FORM
+FEDC ARABIC LETTER KAF MEDIAL FORM
+FEDD ARABIC LETTER LAM ISOLATED FORM
+FEDE ARABIC LETTER LAM FINAL FORM
+FEDF ARABIC LETTER LAM INITIAL FORM
+FEE0 ARABIC LETTER LAM MEDIAL FORM
+FEE1 ARABIC LETTER MEEM ISOLATED FORM
+FEE2 ARABIC LETTER MEEM FINAL FORM
+FEE3 ARABIC LETTER MEEM INITIAL FORM
+FEE4 ARABIC LETTER MEEM MEDIAL FORM
+FEE5 ARABIC LETTER NOON ISOLATED FORM
+FEE6 ARABIC LETTER NOON FINAL FORM
+FEE7 ARABIC LETTER NOON INITIAL FORM
+FEE8 ARABIC LETTER NOON MEDIAL FORM
+FEE9 ARABIC LETTER HEH ISOLATED FORM
+FEEA ARABIC LETTER HEH FINAL FORM
+FEEB ARABIC LETTER HEH INITIAL FORM
+FEEC ARABIC LETTER HEH MEDIAL FORM
+FEED ARABIC LETTER WAW ISOLATED FORM
+FEEE ARABIC LETTER WAW FINAL FORM
+FEEF ARABIC LETTER ALEF MAKSURA ISOLATED FORM
+FEF0 ARABIC LETTER ALEF MAKSURA FINAL FORM
+FEF1 ARABIC LETTER YEH ISOLATED FORM
+FEF2 ARABIC LETTER YEH FINAL FORM
+FEF3 ARABIC LETTER YEH INITIAL FORM
+FEF4 ARABIC LETTER YEH MEDIAL FORM
+FEF5 ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
+FEF6 ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
+FEF7 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
+FEF8 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
+FEF9 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
+FEFA ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
+FEFB ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
+FEFC ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FEFF ZERO WIDTH NO-BREAK SPACE
+FF01 FULLWIDTH EXCLAMATION MARK
+FF02 FULLWIDTH QUOTATION MARK
+FF03 FULLWIDTH NUMBER SIGN
+FF04 FULLWIDTH DOLLAR SIGN
+FF05 FULLWIDTH PERCENT SIGN
+FF06 FULLWIDTH AMPERSAND
+FF07 FULLWIDTH APOSTROPHE
+FF08 FULLWIDTH LEFT PARENTHESIS
+FF09 FULLWIDTH RIGHT PARENTHESIS
+FF0A FULLWIDTH ASTERISK
+FF0B FULLWIDTH PLUS SIGN
+FF0C FULLWIDTH COMMA
+FF0D FULLWIDTH HYPHEN-MINUS
+FF0E FULLWIDTH FULL STOP
+FF0F FULLWIDTH SOLIDUS
+FF10 FULLWIDTH DIGIT ZERO
+FF11 FULLWIDTH DIGIT ONE
+FF12 FULLWIDTH DIGIT TWO
+FF13 FULLWIDTH DIGIT THREE
+FF14 FULLWIDTH DIGIT FOUR
+FF15 FULLWIDTH DIGIT FIVE
+FF16 FULLWIDTH DIGIT SIX
+FF17 FULLWIDTH DIGIT SEVEN
+FF18 FULLWIDTH DIGIT EIGHT
+FF19 FULLWIDTH DIGIT NINE
+FF1A FULLWIDTH COLON
+FF1B FULLWIDTH SEMICOLON
+FF1C FULLWIDTH LESS-THAN SIGN
+FF1D FULLWIDTH EQUALS SIGN
+FF1E FULLWIDTH GREATER-THAN SIGN
+FF1F FULLWIDTH QUESTION MARK
+FF20 FULLWIDTH COMMERCIAL AT
+FF21 FULLWIDTH LATIN CAPITAL LETTER A
+FF22 FULLWIDTH LATIN CAPITAL LETTER B
+FF23 FULLWIDTH LATIN CAPITAL LETTER C
+FF24 FULLWIDTH LATIN CAPITAL LETTER D
+FF25 FULLWIDTH LATIN CAPITAL LETTER E
+FF26 FULLWIDTH LATIN CAPITAL LETTER F
+FF27 FULLWIDTH LATIN CAPITAL LETTER G
+FF28 FULLWIDTH LATIN CAPITAL LETTER H
+FF29 FULLWIDTH LATIN CAPITAL LETTER I
+FF2A FULLWIDTH LATIN CAPITAL LETTER J
+FF2B FULLWIDTH LATIN CAPITAL LETTER K
+FF2C FULLWIDTH LATIN CAPITAL LETTER L
+FF2D FULLWIDTH LATIN CAPITAL LETTER M
+FF2E FULLWIDTH LATIN CAPITAL LETTER N
+FF2F FULLWIDTH LATIN CAPITAL LETTER O
+FF30 FULLWIDTH LATIN CAPITAL LETTER P
+FF31 FULLWIDTH LATIN CAPITAL LETTER Q
+FF32 FULLWIDTH LATIN CAPITAL LETTER R
+FF33 FULLWIDTH LATIN CAPITAL LETTER S
+FF34 FULLWIDTH LATIN CAPITAL LETTER T
+FF35 FULLWIDTH LATIN CAPITAL LETTER U
+FF36 FULLWIDTH LATIN CAPITAL LETTER V
+FF37 FULLWIDTH LATIN CAPITAL LETTER W
+FF38 FULLWIDTH LATIN CAPITAL LETTER X
+FF39 FULLWIDTH LATIN CAPITAL LETTER Y
+FF3A FULLWIDTH LATIN CAPITAL LETTER Z
+FF3B FULLWIDTH LEFT SQUARE BRACKET
+FF3C FULLWIDTH REVERSE SOLIDUS
+FF3D FULLWIDTH RIGHT SQUARE BRACKET
+FF3E FULLWIDTH CIRCUMFLEX ACCENT
+FF3F FULLWIDTH LOW LINE
+FF40 FULLWIDTH GRAVE ACCENT
+FF41 FULLWIDTH LATIN SMALL LETTER A
+FF42 FULLWIDTH LATIN SMALL LETTER B
+FF43 FULLWIDTH LATIN SMALL LETTER C
+FF44 FULLWIDTH LATIN SMALL LETTER D
+FF45 FULLWIDTH LATIN SMALL LETTER E
+FF46 FULLWIDTH LATIN SMALL LETTER F
+FF47 FULLWIDTH LATIN SMALL LETTER G
+FF48 FULLWIDTH LATIN SMALL LETTER H
+FF49 FULLWIDTH LATIN SMALL LETTER I
+FF4A FULLWIDTH LATIN SMALL LETTER J
+FF4B FULLWIDTH LATIN SMALL LETTER K
+FF4C FULLWIDTH LATIN SMALL LETTER L
+FF4D FULLWIDTH LATIN SMALL LETTER M
+FF4E FULLWIDTH LATIN SMALL LETTER N
+FF4F FULLWIDTH LATIN SMALL LETTER O
+FF50 FULLWIDTH LATIN SMALL LETTER P
+FF51 FULLWIDTH LATIN SMALL LETTER Q
+FF52 FULLWIDTH LATIN SMALL LETTER R
+FF53 FULLWIDTH LATIN SMALL LETTER S
+FF54 FULLWIDTH LATIN SMALL LETTER T
+FF55 FULLWIDTH LATIN SMALL LETTER U
+FF56 FULLWIDTH LATIN SMALL LETTER V
+FF57 FULLWIDTH LATIN SMALL LETTER W
+FF58 FULLWIDTH LATIN SMALL LETTER X
+FF59 FULLWIDTH LATIN SMALL LETTER Y
+FF5A FULLWIDTH LATIN SMALL LETTER Z
+FF5B FULLWIDTH LEFT CURLY BRACKET
+FF5C FULLWIDTH VERTICAL LINE
+FF5D FULLWIDTH RIGHT CURLY BRACKET
+FF5E FULLWIDTH TILDE
+FF5F FULLWIDTH LEFT WHITE PARENTHESIS
+FF60 FULLWIDTH RIGHT WHITE PARENTHESIS
+FF61 HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62 HALFWIDTH LEFT CORNER BRACKET
+FF63 HALFWIDTH RIGHT CORNER BRACKET
+FF64 HALFWIDTH IDEOGRAPHIC COMMA
+FF65 HALFWIDTH KATAKANA MIDDLE DOT
+FF66 HALFWIDTH KATAKANA LETTER WO
+FF67 HALFWIDTH KATAKANA LETTER SMALL A
+FF68 HALFWIDTH KATAKANA LETTER SMALL I
+FF69 HALFWIDTH KATAKANA LETTER SMALL U
+FF6A HALFWIDTH KATAKANA LETTER SMALL E
+FF6B HALFWIDTH KATAKANA LETTER SMALL O
+FF6C HALFWIDTH KATAKANA LETTER SMALL YA
+FF6D HALFWIDTH KATAKANA LETTER SMALL YU
+FF6E HALFWIDTH KATAKANA LETTER SMALL YO
+FF6F HALFWIDTH KATAKANA LETTER SMALL TU
+FF70 HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71 HALFWIDTH KATAKANA LETTER A
+FF72 HALFWIDTH KATAKANA LETTER I
+FF73 HALFWIDTH KATAKANA LETTER U
+FF74 HALFWIDTH KATAKANA LETTER E
+FF75 HALFWIDTH KATAKANA LETTER O
+FF76 HALFWIDTH KATAKANA LETTER KA
+FF77 HALFWIDTH KATAKANA LETTER KI
+FF78 HALFWIDTH KATAKANA LETTER KU
+FF79 HALFWIDTH KATAKANA LETTER KE
+FF7A HALFWIDTH KATAKANA LETTER KO
+FF7B HALFWIDTH KATAKANA LETTER SA
+FF7C HALFWIDTH KATAKANA LETTER SI
+FF7D HALFWIDTH KATAKANA LETTER SU
+FF7E HALFWIDTH KATAKANA LETTER SE
+FF7F HALFWIDTH KATAKANA LETTER SO
+FF80 HALFWIDTH KATAKANA LETTER TA
+FF81 HALFWIDTH KATAKANA LETTER TI
+FF82 HALFWIDTH KATAKANA LETTER TU
+FF83 HALFWIDTH KATAKANA LETTER TE
+FF84 HALFWIDTH KATAKANA LETTER TO
+FF85 HALFWIDTH KATAKANA LETTER NA
+FF86 HALFWIDTH KATAKANA LETTER NI
+FF87 HALFWIDTH KATAKANA LETTER NU
+FF88 HALFWIDTH KATAKANA LETTER NE
+FF89 HALFWIDTH KATAKANA LETTER NO
+FF8A HALFWIDTH KATAKANA LETTER HA
+FF8B HALFWIDTH KATAKANA LETTER HI
+FF8C HALFWIDTH KATAKANA LETTER HU
+FF8D HALFWIDTH KATAKANA LETTER HE
+FF8E HALFWIDTH KATAKANA LETTER HO
+FF8F HALFWIDTH KATAKANA LETTER MA
+FF90 HALFWIDTH KATAKANA LETTER MI
+FF91 HALFWIDTH KATAKANA LETTER MU
+FF92 HALFWIDTH KATAKANA LETTER ME
+FF93 HALFWIDTH KATAKANA LETTER MO
+FF94 HALFWIDTH KATAKANA LETTER YA
+FF95 HALFWIDTH KATAKANA LETTER YU
+FF96 HALFWIDTH KATAKANA LETTER YO
+FF97 HALFWIDTH KATAKANA LETTER RA
+FF98 HALFWIDTH KATAKANA LETTER RI
+FF99 HALFWIDTH KATAKANA LETTER RU
+FF9A HALFWIDTH KATAKANA LETTER RE
+FF9B HALFWIDTH KATAKANA LETTER RO
+FF9C HALFWIDTH KATAKANA LETTER WA
+FF9D HALFWIDTH KATAKANA LETTER N
+FF9E HALFWIDTH KATAKANA VOICED SOUND MARK
+FF9F HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0 HALFWIDTH HANGUL FILLER
+FFA1 HALFWIDTH HANGUL LETTER KIYEOK
+FFA2 HALFWIDTH HANGUL LETTER SSANGKIYEOK
+FFA3 HALFWIDTH HANGUL LETTER KIYEOK-SIOS
+FFA4 HALFWIDTH HANGUL LETTER NIEUN
+FFA5 HALFWIDTH HANGUL LETTER NIEUN-CIEUC
+FFA6 HALFWIDTH HANGUL LETTER NIEUN-HIEUH
+FFA7 HALFWIDTH HANGUL LETTER TIKEUT
+FFA8 HALFWIDTH HANGUL LETTER SSANGTIKEUT
+FFA9 HALFWIDTH HANGUL LETTER RIEUL
+FFAA HALFWIDTH HANGUL LETTER RIEUL-KIYEOK
+FFAB HALFWIDTH HANGUL LETTER RIEUL-MIEUM
+FFAC HALFWIDTH HANGUL LETTER RIEUL-PIEUP
+FFAD HALFWIDTH HANGUL LETTER RIEUL-SIOS
+FFAE HALFWIDTH HANGUL LETTER RIEUL-THIEUTH
+FFAF HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH
+FFB0 HALFWIDTH HANGUL LETTER RIEUL-HIEUH
+FFB1 HALFWIDTH HANGUL LETTER MIEUM
+FFB2 HALFWIDTH HANGUL LETTER PIEUP
+FFB3 HALFWIDTH HANGUL LETTER SSANGPIEUP
+FFB4 HALFWIDTH HANGUL LETTER PIEUP-SIOS
+FFB5 HALFWIDTH HANGUL LETTER SIOS
+FFB6 HALFWIDTH HANGUL LETTER SSANGSIOS
+FFB7 HALFWIDTH HANGUL LETTER IEUNG
+FFB8 HALFWIDTH HANGUL LETTER CIEUC
+FFB9 HALFWIDTH HANGUL LETTER SSANGCIEUC
+FFBA HALFWIDTH HANGUL LETTER CHIEUCH
+FFBB HALFWIDTH HANGUL LETTER KHIEUKH
+FFBC HALFWIDTH HANGUL LETTER THIEUTH
+FFBD HALFWIDTH HANGUL LETTER PHIEUPH
+FFBE HALFWIDTH HANGUL LETTER HIEUH
+FFC2 HALFWIDTH HANGUL LETTER A
+FFC3 HALFWIDTH HANGUL LETTER AE
+FFC4 HALFWIDTH HANGUL LETTER YA
+FFC5 HALFWIDTH HANGUL LETTER YAE
+FFC6 HALFWIDTH HANGUL LETTER EO
+FFC7 HALFWIDTH HANGUL LETTER E
+FFCA HALFWIDTH HANGUL LETTER YEO
+FFCB HALFWIDTH HANGUL LETTER YE
+FFCC HALFWIDTH HANGUL LETTER O
+FFCD HALFWIDTH HANGUL LETTER WA
+FFCE HALFWIDTH HANGUL LETTER WAE
+FFCF HALFWIDTH HANGUL LETTER OE
+FFD2 HALFWIDTH HANGUL LETTER YO
+FFD3 HALFWIDTH HANGUL LETTER U
+FFD4 HALFWIDTH HANGUL LETTER WEO
+FFD5 HALFWIDTH HANGUL LETTER WE
+FFD6 HALFWIDTH HANGUL LETTER WI
+FFD7 HALFWIDTH HANGUL LETTER YU
+FFDA HALFWIDTH HANGUL LETTER EU
+FFDB HALFWIDTH HANGUL LETTER YI
+FFDC HALFWIDTH HANGUL LETTER I
+FFE0 FULLWIDTH CENT SIGN
+FFE1 FULLWIDTH POUND SIGN
+FFE2 FULLWIDTH NOT SIGN
+FFE3 FULLWIDTH MACRON
+FFE4 FULLWIDTH BROKEN BAR
+FFE5 FULLWIDTH YEN SIGN
+FFE6 FULLWIDTH WON SIGN
+FFE8 HALFWIDTH FORMS LIGHT VERTICAL
+FFE9 HALFWIDTH LEFTWARDS ARROW
+FFEA HALFWIDTH UPWARDS ARROW
+FFEB HALFWIDTH RIGHTWARDS ARROW
+FFEC HALFWIDTH DOWNWARDS ARROW
+FFED HALFWIDTH BLACK SQUARE
+FFEE HALFWIDTH WHITE CIRCLE
+FFF9 INTERLINEAR ANNOTATION ANCHOR
+FFFA INTERLINEAR ANNOTATION SEPARATOR
+FFFB INTERLINEAR ANNOTATION TERMINATOR
+FFFC OBJECT REPLACEMENT CHARACTER
+FFFD REPLACEMENT CHARACTER
+10300 OLD ITALIC LETTER A
+10301 OLD ITALIC LETTER BE
+10302 OLD ITALIC LETTER KE
+10303 OLD ITALIC LETTER DE
+10304 OLD ITALIC LETTER E
+10305 OLD ITALIC LETTER VE
+10306 OLD ITALIC LETTER ZE
+10307 OLD ITALIC LETTER HE
+10308 OLD ITALIC LETTER THE
+10309 OLD ITALIC LETTER I
+1030A OLD ITALIC LETTER KA
+1030B OLD ITALIC LETTER EL
+1030C OLD ITALIC LETTER EM
+1030D OLD ITALIC LETTER EN
+1030E OLD ITALIC LETTER ESH
+1030F OLD ITALIC LETTER O
+10310 OLD ITALIC LETTER PE
+10311 OLD ITALIC LETTER SHE
+10312 OLD ITALIC LETTER KU
+10313 OLD ITALIC LETTER ER
+10314 OLD ITALIC LETTER ES
+10315 OLD ITALIC LETTER TE
+10316 OLD ITALIC LETTER U
+10317 OLD ITALIC LETTER EKS
+10318 OLD ITALIC LETTER PHE
+10319 OLD ITALIC LETTER KHE
+1031A OLD ITALIC LETTER EF
+1031B OLD ITALIC LETTER ERS
+1031C OLD ITALIC LETTER CHE
+1031D OLD ITALIC LETTER II
+1031E OLD ITALIC LETTER UU
+10320 OLD ITALIC NUMERAL ONE
+10321 OLD ITALIC NUMERAL FIVE
+10322 OLD ITALIC NUMERAL TEN
+10323 OLD ITALIC NUMERAL FIFTY
+10330 GOTHIC LETTER AHSA
+10331 GOTHIC LETTER BAIRKAN
+10332 GOTHIC LETTER GIBA
+10333 GOTHIC LETTER DAGS
+10334 GOTHIC LETTER AIHVUS
+10335 GOTHIC LETTER QAIRTHRA
+10336 GOTHIC LETTER IUJA
+10337 GOTHIC LETTER HAGL
+10338 GOTHIC LETTER THIUTH
+10339 GOTHIC LETTER EIS
+1033A GOTHIC LETTER KUSMA
+1033B GOTHIC LETTER LAGUS
+1033C GOTHIC LETTER MANNA
+1033D GOTHIC LETTER NAUTHS
+1033E GOTHIC LETTER JER
+1033F GOTHIC LETTER URUS
+10340 GOTHIC LETTER PAIRTHRA
+10341 GOTHIC LETTER NINETY
+10342 GOTHIC LETTER RAIDA
+10343 GOTHIC LETTER SAUIL
+10344 GOTHIC LETTER TEIWS
+10345 GOTHIC LETTER WINJA
+10346 GOTHIC LETTER FAIHU
+10347 GOTHIC LETTER IGGWS
+10348 GOTHIC LETTER HWAIR
+10349 GOTHIC LETTER OTHAL
+1034A GOTHIC LETTER NINE HUNDRED
+10400 DESERET CAPITAL LETTER LONG I
+10401 DESERET CAPITAL LETTER LONG E
+10402 DESERET CAPITAL LETTER LONG A
+10403 DESERET CAPITAL LETTER LONG AH
+10404 DESERET CAPITAL LETTER LONG O
+10405 DESERET CAPITAL LETTER LONG OO
+10406 DESERET CAPITAL LETTER SHORT I
+10407 DESERET CAPITAL LETTER SHORT E
+10408 DESERET CAPITAL LETTER SHORT A
+10409 DESERET CAPITAL LETTER SHORT AH
+1040A DESERET CAPITAL LETTER SHORT O
+1040B DESERET CAPITAL LETTER SHORT OO
+1040C DESERET CAPITAL LETTER AY
+1040D DESERET CAPITAL LETTER OW
+1040E DESERET CAPITAL LETTER WU
+1040F DESERET CAPITAL LETTER YEE
+10410 DESERET CAPITAL LETTER H
+10411 DESERET CAPITAL LETTER PEE
+10412 DESERET CAPITAL LETTER BEE
+10413 DESERET CAPITAL LETTER TEE
+10414 DESERET CAPITAL LETTER DEE
+10415 DESERET CAPITAL LETTER CHEE
+10416 DESERET CAPITAL LETTER JEE
+10417 DESERET CAPITAL LETTER KAY
+10418 DESERET CAPITAL LETTER GAY
+10419 DESERET CAPITAL LETTER EF
+1041A DESERET CAPITAL LETTER VEE
+1041B DESERET CAPITAL LETTER ETH
+1041C DESERET CAPITAL LETTER THEE
+1041D DESERET CAPITAL LETTER ES
+1041E DESERET CAPITAL LETTER ZEE
+1041F DESERET CAPITAL LETTER ESH
+10420 DESERET CAPITAL LETTER ZHEE
+10421 DESERET CAPITAL LETTER ER
+10422 DESERET CAPITAL LETTER EL
+10423 DESERET CAPITAL LETTER EM
+10424 DESERET CAPITAL LETTER EN
+10425 DESERET CAPITAL LETTER ENG
+10428 DESERET SMALL LETTER LONG I
+10429 DESERET SMALL LETTER LONG E
+1042A DESERET SMALL LETTER LONG A
+1042B DESERET SMALL LETTER LONG AH
+1042C DESERET SMALL LETTER LONG O
+1042D DESERET SMALL LETTER LONG OO
+1042E DESERET SMALL LETTER SHORT I
+1042F DESERET SMALL LETTER SHORT E
+10430 DESERET SMALL LETTER SHORT A
+10431 DESERET SMALL LETTER SHORT AH
+10432 DESERET SMALL LETTER SHORT O
+10433 DESERET SMALL LETTER SHORT OO
+10434 DESERET SMALL LETTER AY
+10435 DESERET SMALL LETTER OW
+10436 DESERET SMALL LETTER WU
+10437 DESERET SMALL LETTER YEE
+10438 DESERET SMALL LETTER H
+10439 DESERET SMALL LETTER PEE
+1043A DESERET SMALL LETTER BEE
+1043B DESERET SMALL LETTER TEE
+1043C DESERET SMALL LETTER DEE
+1043D DESERET SMALL LETTER CHEE
+1043E DESERET SMALL LETTER JEE
+1043F DESERET SMALL LETTER KAY
+10440 DESERET SMALL LETTER GAY
+10441 DESERET SMALL LETTER EF
+10442 DESERET SMALL LETTER VEE
+10443 DESERET SMALL LETTER ETH
+10444 DESERET SMALL LETTER THEE
+10445 DESERET SMALL LETTER ES
+10446 DESERET SMALL LETTER ZEE
+10447 DESERET SMALL LETTER ESH
+10448 DESERET SMALL LETTER ZHEE
+10449 DESERET SMALL LETTER ER
+1044A DESERET SMALL LETTER EL
+1044B DESERET SMALL LETTER EM
+1044C DESERET SMALL LETTER EN
+1044D DESERET SMALL LETTER ENG
+1D000 BYZANTINE MUSICAL SYMBOL PSILI
+1D001 BYZANTINE MUSICAL SYMBOL DASEIA
+1D002 BYZANTINE MUSICAL SYMBOL PERISPOMENI
+1D003 BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON
+1D004 BYZANTINE MUSICAL SYMBOL OXEIA DIPLI
+1D005 BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON
+1D006 BYZANTINE MUSICAL SYMBOL VAREIA DIPLI
+1D007 BYZANTINE MUSICAL SYMBOL KATHISTI
+1D008 BYZANTINE MUSICAL SYMBOL SYRMATIKI
+1D009 BYZANTINE MUSICAL SYMBOL PARAKLITIKI
+1D00A BYZANTINE MUSICAL SYMBOL YPOKRISIS
+1D00B BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI
+1D00C BYZANTINE MUSICAL SYMBOL KREMASTI
+1D00D BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON
+1D00E BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON
+1D00F BYZANTINE MUSICAL SYMBOL TELEIA
+1D010 BYZANTINE MUSICAL SYMBOL KENTIMATA
+1D011 BYZANTINE MUSICAL SYMBOL APOSTROFOS
+1D012 BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI
+1D013 BYZANTINE MUSICAL SYMBOL SYNEVMA
+1D014 BYZANTINE MUSICAL SYMBOL THITA
+1D015 BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION
+1D016 BYZANTINE MUSICAL SYMBOL GORGON ARCHAION
+1D017 BYZANTINE MUSICAL SYMBOL PSILON
+1D018 BYZANTINE MUSICAL SYMBOL CHAMILON
+1D019 BYZANTINE MUSICAL SYMBOL VATHY
+1D01A BYZANTINE MUSICAL SYMBOL ISON ARCHAION
+1D01B BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION
+1D01C BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION
+1D01D BYZANTINE MUSICAL SYMBOL SAXIMATA
+1D01E BYZANTINE MUSICAL SYMBOL PARICHON
+1D01F BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA
+1D020 BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION
+1D021 BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION
+1D022 BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION
+1D023 BYZANTINE MUSICAL SYMBOL APOTHEMA
+1D024 BYZANTINE MUSICAL SYMBOL KLASMA
+1D025 BYZANTINE MUSICAL SYMBOL REVMA
+1D026 BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION
+1D027 BYZANTINE MUSICAL SYMBOL TINAGMA
+1D028 BYZANTINE MUSICAL SYMBOL ANATRICHISMA
+1D029 BYZANTINE MUSICAL SYMBOL SEISMA
+1D02A BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION
+1D02B BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU
+1D02C BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION
+1D02D BYZANTINE MUSICAL SYMBOL THEMA
+1D02E BYZANTINE MUSICAL SYMBOL LEMOI
+1D02F BYZANTINE MUSICAL SYMBOL DYO
+1D030 BYZANTINE MUSICAL SYMBOL TRIA
+1D031 BYZANTINE MUSICAL SYMBOL TESSERA
+1D032 BYZANTINE MUSICAL SYMBOL KRATIMATA
+1D033 BYZANTINE MUSICAL SYMBOL APESO EXO NEO
+1D034 BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION
+1D035 BYZANTINE MUSICAL SYMBOL IMIFTHORA
+1D036 BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION
+1D037 BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON
+1D038 BYZANTINE MUSICAL SYMBOL PELASTON
+1D039 BYZANTINE MUSICAL SYMBOL PSIFISTON
+1D03A BYZANTINE MUSICAL SYMBOL KONTEVMA
+1D03B BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION
+1D03C BYZANTINE MUSICAL SYMBOL RAPISMA
+1D03D BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION
+1D03E BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION
+1D03F BYZANTINE MUSICAL SYMBOL ICHADIN
+1D040 BYZANTINE MUSICAL SYMBOL NANA
+1D041 BYZANTINE MUSICAL SYMBOL PETASMA
+1D042 BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO
+1D043 BYZANTINE MUSICAL SYMBOL TROMIKON ALLO
+1D044 BYZANTINE MUSICAL SYMBOL STRAGGISMATA
+1D045 BYZANTINE MUSICAL SYMBOL GRONTHISMATA
+1D046 BYZANTINE MUSICAL SYMBOL ISON NEO
+1D047 BYZANTINE MUSICAL SYMBOL OLIGON NEO
+1D048 BYZANTINE MUSICAL SYMBOL OXEIA NEO
+1D049 BYZANTINE MUSICAL SYMBOL PETASTI
+1D04A BYZANTINE MUSICAL SYMBOL KOUFISMA
+1D04B BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA
+1D04C BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA
+1D04D BYZANTINE MUSICAL SYMBOL PELASTON NEO
+1D04E BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO
+1D04F BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO
+1D050 BYZANTINE MUSICAL SYMBOL YPSILI
+1D051 BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO
+1D052 BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO
+1D053 BYZANTINE MUSICAL SYMBOL YPORROI
+1D054 BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON
+1D055 BYZANTINE MUSICAL SYMBOL ELAFRON
+1D056 BYZANTINE MUSICAL SYMBOL CHAMILI
+1D057 BYZANTINE MUSICAL SYMBOL MIKRON ISON
+1D058 BYZANTINE MUSICAL SYMBOL VAREIA NEO
+1D059 BYZANTINE MUSICAL SYMBOL PIASMA NEO
+1D05A BYZANTINE MUSICAL SYMBOL PSIFISTON NEO
+1D05B BYZANTINE MUSICAL SYMBOL OMALON
+1D05C BYZANTINE MUSICAL SYMBOL ANTIKENOMA
+1D05D BYZANTINE MUSICAL SYMBOL LYGISMA
+1D05E BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO
+1D05F BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO
+1D060 BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA
+1D061 BYZANTINE MUSICAL SYMBOL KYLISMA
+1D062 BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA
+1D063 BYZANTINE MUSICAL SYMBOL TROMIKON NEO
+1D064 BYZANTINE MUSICAL SYMBOL EKSTREPTON
+1D065 BYZANTINE MUSICAL SYMBOL SYNAGMA NEO
+1D066 BYZANTINE MUSICAL SYMBOL SYRMA
+1D067 BYZANTINE MUSICAL SYMBOL CHOREVMA NEO
+1D068 BYZANTINE MUSICAL SYMBOL EPEGERMA
+1D069 BYZANTINE MUSICAL SYMBOL SEISMA NEO
+1D06A BYZANTINE MUSICAL SYMBOL XIRON KLASMA
+1D06B BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON
+1D06C BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA
+1D06D BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA
+1D06E BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA
+1D06F BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA
+1D070 BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA
+1D071 BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA
+1D072 BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON
+1D073 BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON
+1D074 BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON
+1D075 BYZANTINE MUSICAL SYMBOL OYRANISMA NEO
+1D076 BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO
+1D077 BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO
+1D078 BYZANTINE MUSICAL SYMBOL THEMA APLOUN
+1D079 BYZANTINE MUSICAL SYMBOL THES KAI APOTHES
+1D07A BYZANTINE MUSICAL SYMBOL KATAVASMA
+1D07B BYZANTINE MUSICAL SYMBOL ENDOFONON
+1D07C BYZANTINE MUSICAL SYMBOL YFEN KATO
+1D07D BYZANTINE MUSICAL SYMBOL YFEN ANO
+1D07E BYZANTINE MUSICAL SYMBOL STAVROS
+1D07F BYZANTINE MUSICAL SYMBOL KLASMA ANO
+1D080 BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION
+1D081 BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION
+1D082 BYZANTINE MUSICAL SYMBOL KRATIMA ALLO
+1D083 BYZANTINE MUSICAL SYMBOL KRATIMA NEO
+1D084 BYZANTINE MUSICAL SYMBOL APODERMA NEO
+1D085 BYZANTINE MUSICAL SYMBOL APLI
+1D086 BYZANTINE MUSICAL SYMBOL DIPLI
+1D087 BYZANTINE MUSICAL SYMBOL TRIPLI
+1D088 BYZANTINE MUSICAL SYMBOL TETRAPLI
+1D089 BYZANTINE MUSICAL SYMBOL KORONIS
+1D08A BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU
+1D08B BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON
+1D08C BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON
+1D08D BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON
+1D08E BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU
+1D08F BYZANTINE MUSICAL SYMBOL GORGON NEO ANO
+1D090 BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA
+1D091 BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA
+1D092 BYZANTINE MUSICAL SYMBOL DIGORGON
+1D093 BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO
+1D094 BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO
+1D095 BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA
+1D096 BYZANTINE MUSICAL SYMBOL TRIGORGON
+1D097 BYZANTINE MUSICAL SYMBOL ARGON
+1D098 BYZANTINE MUSICAL SYMBOL IMIDIARGON
+1D099 BYZANTINE MUSICAL SYMBOL DIARGON
+1D09A BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI
+1D09B BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI
+1D09C BYZANTINE MUSICAL SYMBOL AGOGI ARGI
+1D09D BYZANTINE MUSICAL SYMBOL AGOGI METRIA
+1D09E BYZANTINE MUSICAL SYMBOL AGOGI MESI
+1D09F BYZANTINE MUSICAL SYMBOL AGOGI GORGI
+1D0A0 BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI
+1D0A1 BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI
+1D0A2 BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS
+1D0A3 BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS
+1D0A4 BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS
+1D0A5 BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS
+1D0A6 BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS
+1D0A7 BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS
+1D0A8 BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS
+1D0A9 BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS
+1D0AA BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS
+1D0AB BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS
+1D0AC BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS
+1D0AD BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS
+1D0AE BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS
+1D0AF BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS
+1D0B0 BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS
+1D0B1 BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS
+1D0B2 BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS
+1D0B3 BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS
+1D0B4 BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN
+1D0B5 BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN
+1D0B6 BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU
+1D0B7 BYZANTINE MUSICAL SYMBOL IMIFONON
+1D0B8 BYZANTINE MUSICAL SYMBOL IMIFTHORON
+1D0B9 BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU
+1D0BA BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA
+1D0BB BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA
+1D0BC BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS
+1D0BD BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI
+1D0BE BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI
+1D0BF BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE
+1D0C0 BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO
+1D0C1 BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO
+1D0C2 BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO
+1D0C3 BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS
+1D0C4 BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS
+1D0C5 BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS
+1D0C6 BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI
+1D0C7 BYZANTINE MUSICAL SYMBOL FTHORA NENANO
+1D0C8 BYZANTINE MUSICAL SYMBOL CHROA ZYGOS
+1D0C9 BYZANTINE MUSICAL SYMBOL CHROA KLITON
+1D0CA BYZANTINE MUSICAL SYMBOL CHROA SPATHI
+1D0CB BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION
+1D0CC BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA
+1D0CD BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION
+1D0CE BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION
+1D0CF BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION
+1D0D0 BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA
+1D0D1 BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA
+1D0D2 BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA
+1D0D3 BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA
+1D0D4 BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA
+1D0D5 BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA
+1D0D6 BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA
+1D0D7 BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA
+1D0D8 BYZANTINE MUSICAL SYMBOL GENIKI DIESIS
+1D0D9 BYZANTINE MUSICAL SYMBOL GENIKI YFESIS
+1D0DA BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI
+1D0DB BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI
+1D0DC BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI
+1D0DD BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS
+1D0DE BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS
+1D0DF BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU
+1D0E0 BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU
+1D0E1 BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU
+1D0E2 BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS
+1D0E3 BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU
+1D0E4 BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU
+1D0E5 BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU
+1D0E6 BYZANTINE MUSICAL SYMBOL DIGRAMMA GG
+1D0E7 BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU
+1D0E8 BYZANTINE MUSICAL SYMBOL STIGMA
+1D0E9 BYZANTINE MUSICAL SYMBOL ARKTIKO PA
+1D0EA BYZANTINE MUSICAL SYMBOL ARKTIKO VOU
+1D0EB BYZANTINE MUSICAL SYMBOL ARKTIKO GA
+1D0EC BYZANTINE MUSICAL SYMBOL ARKTIKO DI
+1D0ED BYZANTINE MUSICAL SYMBOL ARKTIKO KE
+1D0EE BYZANTINE MUSICAL SYMBOL ARKTIKO ZO
+1D0EF BYZANTINE MUSICAL SYMBOL ARKTIKO NI
+1D0F0 BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO
+1D0F1 BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO
+1D0F2 BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO
+1D0F3 BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO
+1D0F4 BYZANTINE MUSICAL SYMBOL KLASMA KATO
+1D0F5 BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
+1D100 MUSICAL SYMBOL SINGLE BARLINE
+1D101 MUSICAL SYMBOL DOUBLE BARLINE
+1D102 MUSICAL SYMBOL FINAL BARLINE
+1D103 MUSICAL SYMBOL REVERSE FINAL BARLINE
+1D104 MUSICAL SYMBOL DASHED BARLINE
+1D105 MUSICAL SYMBOL SHORT BARLINE
+1D106 MUSICAL SYMBOL LEFT REPEAT SIGN
+1D107 MUSICAL SYMBOL RIGHT REPEAT SIGN
+1D108 MUSICAL SYMBOL REPEAT DOTS
+1D109 MUSICAL SYMBOL DAL SEGNO
+1D10A MUSICAL SYMBOL DA CAPO
+1D10B MUSICAL SYMBOL SEGNO
+1D10C MUSICAL SYMBOL CODA
+1D10D MUSICAL SYMBOL REPEATED FIGURE-1
+1D10E MUSICAL SYMBOL REPEATED FIGURE-2
+1D10F MUSICAL SYMBOL REPEATED FIGURE-3
+1D110 MUSICAL SYMBOL FERMATA
+1D111 MUSICAL SYMBOL FERMATA BELOW
+1D112 MUSICAL SYMBOL BREATH MARK
+1D113 MUSICAL SYMBOL CAESURA
+1D114 MUSICAL SYMBOL BRACE
+1D115 MUSICAL SYMBOL BRACKET
+1D116 MUSICAL SYMBOL ONE-LINE STAFF
+1D117 MUSICAL SYMBOL TWO-LINE STAFF
+1D118 MUSICAL SYMBOL THREE-LINE STAFF
+1D119 MUSICAL SYMBOL FOUR-LINE STAFF
+1D11A MUSICAL SYMBOL FIVE-LINE STAFF
+1D11B MUSICAL SYMBOL SIX-LINE STAFF
+1D11C MUSICAL SYMBOL SIX-STRING FRETBOARD
+1D11D MUSICAL SYMBOL FOUR-STRING FRETBOARD
+1D11E MUSICAL SYMBOL G CLEF
+1D11F MUSICAL SYMBOL G CLEF OTTAVA ALTA
+1D120 MUSICAL SYMBOL G CLEF OTTAVA BASSA
+1D121 MUSICAL SYMBOL C CLEF
+1D122 MUSICAL SYMBOL F CLEF
+1D123 MUSICAL SYMBOL F CLEF OTTAVA ALTA
+1D124 MUSICAL SYMBOL F CLEF OTTAVA BASSA
+1D125 MUSICAL SYMBOL DRUM CLEF-1
+1D126 MUSICAL SYMBOL DRUM CLEF-2
+1D12A MUSICAL SYMBOL DOUBLE SHARP
+1D12B MUSICAL SYMBOL DOUBLE FLAT
+1D12C MUSICAL SYMBOL FLAT UP
+1D12D MUSICAL SYMBOL FLAT DOWN
+1D12E MUSICAL SYMBOL NATURAL UP
+1D12F MUSICAL SYMBOL NATURAL DOWN
+1D130 MUSICAL SYMBOL SHARP UP
+1D131 MUSICAL SYMBOL SHARP DOWN
+1D132 MUSICAL SYMBOL QUARTER TONE SHARP
+1D133 MUSICAL SYMBOL QUARTER TONE FLAT
+1D134 MUSICAL SYMBOL COMMON TIME
+1D135 MUSICAL SYMBOL CUT TIME
+1D136 MUSICAL SYMBOL OTTAVA ALTA
+1D137 MUSICAL SYMBOL OTTAVA BASSA
+1D138 MUSICAL SYMBOL QUINDICESIMA ALTA
+1D139 MUSICAL SYMBOL QUINDICESIMA BASSA
+1D13A MUSICAL SYMBOL MULTI REST
+1D13B MUSICAL SYMBOL WHOLE REST
+1D13C MUSICAL SYMBOL HALF REST
+1D13D MUSICAL SYMBOL QUARTER REST
+1D13E MUSICAL SYMBOL EIGHTH REST
+1D13F MUSICAL SYMBOL SIXTEENTH REST
+1D140 MUSICAL SYMBOL THIRTY-SECOND REST
+1D141 MUSICAL SYMBOL SIXTY-FOURTH REST
+1D142 MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST
+1D143 MUSICAL SYMBOL X NOTEHEAD
+1D144 MUSICAL SYMBOL PLUS NOTEHEAD
+1D145 MUSICAL SYMBOL CIRCLE X NOTEHEAD
+1D146 MUSICAL SYMBOL SQUARE NOTEHEAD WHITE
+1D147 MUSICAL SYMBOL SQUARE NOTEHEAD BLACK
+1D148 MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE
+1D149 MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK
+1D14A MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE
+1D14B MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK
+1D14C MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE
+1D14D MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK
+1D14E MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE
+1D14F MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK
+1D150 MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE
+1D151 MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK
+1D152 MUSICAL SYMBOL MOON NOTEHEAD WHITE
+1D153 MUSICAL SYMBOL MOON NOTEHEAD BLACK
+1D154 MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE
+1D155 MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK
+1D156 MUSICAL SYMBOL PARENTHESIS NOTEHEAD
+1D157 MUSICAL SYMBOL VOID NOTEHEAD
+1D158 MUSICAL SYMBOL NOTEHEAD BLACK
+1D159 MUSICAL SYMBOL NULL NOTEHEAD
+1D15A MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE
+1D15B MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK
+1D15C MUSICAL SYMBOL BREVE
+1D15D MUSICAL SYMBOL WHOLE NOTE
+1D15E MUSICAL SYMBOL HALF NOTE
+1D15F MUSICAL SYMBOL QUARTER NOTE
+1D160 MUSICAL SYMBOL EIGHTH NOTE
+1D161 MUSICAL SYMBOL SIXTEENTH NOTE
+1D162 MUSICAL SYMBOL THIRTY-SECOND NOTE
+1D163 MUSICAL SYMBOL SIXTY-FOURTH NOTE
+1D164 MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D165 MUSICAL SYMBOL COMBINING STEM
+1D166 MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+1D167 MUSICAL SYMBOL COMBINING TREMOLO-1
+1D168 MUSICAL SYMBOL COMBINING TREMOLO-2
+1D169 MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16A MUSICAL SYMBOL FINGERED TREMOLO-1
+1D16B MUSICAL SYMBOL FINGERED TREMOLO-2
+1D16C MUSICAL SYMBOL FINGERED TREMOLO-3
+1D16D MUSICAL SYMBOL COMBINING AUGMENTATION DOT
+1D16E MUSICAL SYMBOL COMBINING FLAG-1
+1D16F MUSICAL SYMBOL COMBINING FLAG-2
+1D170 MUSICAL SYMBOL COMBINING FLAG-3
+1D171 MUSICAL SYMBOL COMBINING FLAG-4
+1D172 MUSICAL SYMBOL COMBINING FLAG-5
+1D173 MUSICAL SYMBOL BEGIN BEAM
+1D174 MUSICAL SYMBOL END BEAM
+1D175 MUSICAL SYMBOL BEGIN TIE
+1D176 MUSICAL SYMBOL END TIE
+1D177 MUSICAL SYMBOL BEGIN SLUR
+1D178 MUSICAL SYMBOL END SLUR
+1D179 MUSICAL SYMBOL BEGIN PHRASE
+1D17A MUSICAL SYMBOL END PHRASE
+1D17B MUSICAL SYMBOL COMBINING ACCENT
+1D17C MUSICAL SYMBOL COMBINING STACCATO
+1D17D MUSICAL SYMBOL COMBINING TENUTO
+1D17E MUSICAL SYMBOL COMBINING STACCATISSIMO
+1D17F MUSICAL SYMBOL COMBINING MARCATO
+1D180 MUSICAL SYMBOL COMBINING MARCATO-STACCATO
+1D181 MUSICAL SYMBOL COMBINING ACCENT-STACCATO
+1D182 MUSICAL SYMBOL COMBINING LOURE
+1D183 MUSICAL SYMBOL ARPEGGIATO UP
+1D184 MUSICAL SYMBOL ARPEGGIATO DOWN
+1D185 MUSICAL SYMBOL COMBINING DOIT
+1D186 MUSICAL SYMBOL COMBINING RIP
+1D187 MUSICAL SYMBOL COMBINING FLIP
+1D188 MUSICAL SYMBOL COMBINING SMEAR
+1D189 MUSICAL SYMBOL COMBINING BEND
+1D18A MUSICAL SYMBOL COMBINING DOUBLE TONGUE
+1D18B MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D18C MUSICAL SYMBOL RINFORZANDO
+1D18D MUSICAL SYMBOL SUBITO
+1D18E MUSICAL SYMBOL Z
+1D18F MUSICAL SYMBOL PIANO
+1D190 MUSICAL SYMBOL MEZZO
+1D191 MUSICAL SYMBOL FORTE
+1D192 MUSICAL SYMBOL CRESCENDO
+1D193 MUSICAL SYMBOL DECRESCENDO
+1D194 MUSICAL SYMBOL GRACE NOTE SLASH
+1D195 MUSICAL SYMBOL GRACE NOTE NO SLASH
+1D196 MUSICAL SYMBOL TR
+1D197 MUSICAL SYMBOL TURN
+1D198 MUSICAL SYMBOL INVERTED TURN
+1D199 MUSICAL SYMBOL TURN SLASH
+1D19A MUSICAL SYMBOL TURN UP
+1D19B MUSICAL SYMBOL ORNAMENT STROKE-1
+1D19C MUSICAL SYMBOL ORNAMENT STROKE-2
+1D19D MUSICAL SYMBOL ORNAMENT STROKE-3
+1D19E MUSICAL SYMBOL ORNAMENT STROKE-4
+1D19F MUSICAL SYMBOL ORNAMENT STROKE-5
+1D1A0 MUSICAL SYMBOL ORNAMENT STROKE-6
+1D1A1 MUSICAL SYMBOL ORNAMENT STROKE-7
+1D1A2 MUSICAL SYMBOL ORNAMENT STROKE-8
+1D1A3 MUSICAL SYMBOL ORNAMENT STROKE-9
+1D1A4 MUSICAL SYMBOL ORNAMENT STROKE-10
+1D1A5 MUSICAL SYMBOL ORNAMENT STROKE-11
+1D1A6 MUSICAL SYMBOL HAUPTSTIMME
+1D1A7 MUSICAL SYMBOL NEBENSTIMME
+1D1A8 MUSICAL SYMBOL END OF STIMME
+1D1A9 MUSICAL SYMBOL DEGREE SLASH
+1D1AA MUSICAL SYMBOL COMBINING DOWN BOW
+1D1AB MUSICAL SYMBOL COMBINING UP BOW
+1D1AC MUSICAL SYMBOL COMBINING HARMONIC
+1D1AD MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+1D1AE MUSICAL SYMBOL PEDAL MARK
+1D1AF MUSICAL SYMBOL PEDAL UP MARK
+1D1B0 MUSICAL SYMBOL HALF PEDAL MARK
+1D1B1 MUSICAL SYMBOL GLISSANDO UP
+1D1B2 MUSICAL SYMBOL GLISSANDO DOWN
+1D1B3 MUSICAL SYMBOL WITH FINGERNAILS
+1D1B4 MUSICAL SYMBOL DAMP
+1D1B5 MUSICAL SYMBOL DAMP ALL
+1D1B6 MUSICAL SYMBOL MAXIMA
+1D1B7 MUSICAL SYMBOL LONGA
+1D1B8 MUSICAL SYMBOL BREVIS
+1D1B9 MUSICAL SYMBOL SEMIBREVIS WHITE
+1D1BA MUSICAL SYMBOL SEMIBREVIS BLACK
+1D1BB MUSICAL SYMBOL MINIMA
+1D1BC MUSICAL SYMBOL MINIMA BLACK
+1D1BD MUSICAL SYMBOL SEMIMINIMA WHITE
+1D1BE MUSICAL SYMBOL SEMIMINIMA BLACK
+1D1BF MUSICAL SYMBOL FUSA WHITE
+1D1C0 MUSICAL SYMBOL FUSA BLACK
+1D1C1 MUSICAL SYMBOL LONGA PERFECTA REST
+1D1C2 MUSICAL SYMBOL LONGA IMPERFECTA REST
+1D1C3 MUSICAL SYMBOL BREVIS REST
+1D1C4 MUSICAL SYMBOL SEMIBREVIS REST
+1D1C5 MUSICAL SYMBOL MINIMA REST
+1D1C6 MUSICAL SYMBOL SEMIMINIMA REST
+1D1C7 MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA
+1D1C8 MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA
+1D1C9 MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1
+1D1CA MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA
+1D1CB MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA
+1D1CC MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1
+1D1CD MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2
+1D1CE MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3
+1D1CF MUSICAL SYMBOL CROIX
+1D1D0 MUSICAL SYMBOL GREGORIAN C CLEF
+1D1D1 MUSICAL SYMBOL GREGORIAN F CLEF
+1D1D2 MUSICAL SYMBOL SQUARE B
+1D1D3 MUSICAL SYMBOL VIRGA
+1D1D4 MUSICAL SYMBOL PODATUS
+1D1D5 MUSICAL SYMBOL CLIVIS
+1D1D6 MUSICAL SYMBOL SCANDICUS
+1D1D7 MUSICAL SYMBOL CLIMACUS
+1D1D8 MUSICAL SYMBOL TORCULUS
+1D1D9 MUSICAL SYMBOL PORRECTUS
+1D1DA MUSICAL SYMBOL PORRECTUS FLEXUS
+1D1DB MUSICAL SYMBOL SCANDICUS FLEXUS
+1D1DC MUSICAL SYMBOL TORCULUS RESUPINUS
+1D1DD MUSICAL SYMBOL PES SUBPUNCTIS
+1D400 MATHEMATICAL BOLD CAPITAL A
+1D401 MATHEMATICAL BOLD CAPITAL B
+1D402 MATHEMATICAL BOLD CAPITAL C
+1D403 MATHEMATICAL BOLD CAPITAL D
+1D404 MATHEMATICAL BOLD CAPITAL E
+1D405 MATHEMATICAL BOLD CAPITAL F
+1D406 MATHEMATICAL BOLD CAPITAL G
+1D407 MATHEMATICAL BOLD CAPITAL H
+1D408 MATHEMATICAL BOLD CAPITAL I
+1D409 MATHEMATICAL BOLD CAPITAL J
+1D40A MATHEMATICAL BOLD CAPITAL K
+1D40B MATHEMATICAL BOLD CAPITAL L
+1D40C MATHEMATICAL BOLD CAPITAL M
+1D40D MATHEMATICAL BOLD CAPITAL N
+1D40E MATHEMATICAL BOLD CAPITAL O
+1D40F MATHEMATICAL BOLD CAPITAL P
+1D410 MATHEMATICAL BOLD CAPITAL Q
+1D411 MATHEMATICAL BOLD CAPITAL R
+1D412 MATHEMATICAL BOLD CAPITAL S
+1D413 MATHEMATICAL BOLD CAPITAL T
+1D414 MATHEMATICAL BOLD CAPITAL U
+1D415 MATHEMATICAL BOLD CAPITAL V
+1D416 MATHEMATICAL BOLD CAPITAL W
+1D417 MATHEMATICAL BOLD CAPITAL X
+1D418 MATHEMATICAL BOLD CAPITAL Y
+1D419 MATHEMATICAL BOLD CAPITAL Z
+1D41A MATHEMATICAL BOLD SMALL A
+1D41B MATHEMATICAL BOLD SMALL B
+1D41C MATHEMATICAL BOLD SMALL C
+1D41D MATHEMATICAL BOLD SMALL D
+1D41E MATHEMATICAL BOLD SMALL E
+1D41F MATHEMATICAL BOLD SMALL F
+1D420 MATHEMATICAL BOLD SMALL G
+1D421 MATHEMATICAL BOLD SMALL H
+1D422 MATHEMATICAL BOLD SMALL I
+1D423 MATHEMATICAL BOLD SMALL J
+1D424 MATHEMATICAL BOLD SMALL K
+1D425 MATHEMATICAL BOLD SMALL L
+1D426 MATHEMATICAL BOLD SMALL M
+1D427 MATHEMATICAL BOLD SMALL N
+1D428 MATHEMATICAL BOLD SMALL O
+1D429 MATHEMATICAL BOLD SMALL P
+1D42A MATHEMATICAL BOLD SMALL Q
+1D42B MATHEMATICAL BOLD SMALL R
+1D42C MATHEMATICAL BOLD SMALL S
+1D42D MATHEMATICAL BOLD SMALL T
+1D42E MATHEMATICAL BOLD SMALL U
+1D42F MATHEMATICAL BOLD SMALL V
+1D430 MATHEMATICAL BOLD SMALL W
+1D431 MATHEMATICAL BOLD SMALL X
+1D432 MATHEMATICAL BOLD SMALL Y
+1D433 MATHEMATICAL BOLD SMALL Z
+1D434 MATHEMATICAL ITALIC CAPITAL A
+1D435 MATHEMATICAL ITALIC CAPITAL B
+1D436 MATHEMATICAL ITALIC CAPITAL C
+1D437 MATHEMATICAL ITALIC CAPITAL D
+1D438 MATHEMATICAL ITALIC CAPITAL E
+1D439 MATHEMATICAL ITALIC CAPITAL F
+1D43A MATHEMATICAL ITALIC CAPITAL G
+1D43B MATHEMATICAL ITALIC CAPITAL H
+1D43C MATHEMATICAL ITALIC CAPITAL I
+1D43D MATHEMATICAL ITALIC CAPITAL J
+1D43E MATHEMATICAL ITALIC CAPITAL K
+1D43F MATHEMATICAL ITALIC CAPITAL L
+1D440 MATHEMATICAL ITALIC CAPITAL M
+1D441 MATHEMATICAL ITALIC CAPITAL N
+1D442 MATHEMATICAL ITALIC CAPITAL O
+1D443 MATHEMATICAL ITALIC CAPITAL P
+1D444 MATHEMATICAL ITALIC CAPITAL Q
+1D445 MATHEMATICAL ITALIC CAPITAL R
+1D446 MATHEMATICAL ITALIC CAPITAL S
+1D447 MATHEMATICAL ITALIC CAPITAL T
+1D448 MATHEMATICAL ITALIC CAPITAL U
+1D449 MATHEMATICAL ITALIC CAPITAL V
+1D44A MATHEMATICAL ITALIC CAPITAL W
+1D44B MATHEMATICAL ITALIC CAPITAL X
+1D44C MATHEMATICAL ITALIC CAPITAL Y
+1D44D MATHEMATICAL ITALIC CAPITAL Z
+1D44E MATHEMATICAL ITALIC SMALL A
+1D44F MATHEMATICAL ITALIC SMALL B
+1D450 MATHEMATICAL ITALIC SMALL C
+1D451 MATHEMATICAL ITALIC SMALL D
+1D452 MATHEMATICAL ITALIC SMALL E
+1D453 MATHEMATICAL ITALIC SMALL F
+1D454 MATHEMATICAL ITALIC SMALL G
+1D456 MATHEMATICAL ITALIC SMALL I
+1D457 MATHEMATICAL ITALIC SMALL J
+1D458 MATHEMATICAL ITALIC SMALL K
+1D459 MATHEMATICAL ITALIC SMALL L
+1D45A MATHEMATICAL ITALIC SMALL M
+1D45B MATHEMATICAL ITALIC SMALL N
+1D45C MATHEMATICAL ITALIC SMALL O
+1D45D MATHEMATICAL ITALIC SMALL P
+1D45E MATHEMATICAL ITALIC SMALL Q
+1D45F MATHEMATICAL ITALIC SMALL R
+1D460 MATHEMATICAL ITALIC SMALL S
+1D461 MATHEMATICAL ITALIC SMALL T
+1D462 MATHEMATICAL ITALIC SMALL U
+1D463 MATHEMATICAL ITALIC SMALL V
+1D464 MATHEMATICAL ITALIC SMALL W
+1D465 MATHEMATICAL ITALIC SMALL X
+1D466 MATHEMATICAL ITALIC SMALL Y
+1D467 MATHEMATICAL ITALIC SMALL Z
+1D468 MATHEMATICAL BOLD ITALIC CAPITAL A
+1D469 MATHEMATICAL BOLD ITALIC CAPITAL B
+1D46A MATHEMATICAL BOLD ITALIC CAPITAL C
+1D46B MATHEMATICAL BOLD ITALIC CAPITAL D
+1D46C MATHEMATICAL BOLD ITALIC CAPITAL E
+1D46D MATHEMATICAL BOLD ITALIC CAPITAL F
+1D46E MATHEMATICAL BOLD ITALIC CAPITAL G
+1D46F MATHEMATICAL BOLD ITALIC CAPITAL H
+1D470 MATHEMATICAL BOLD ITALIC CAPITAL I
+1D471 MATHEMATICAL BOLD ITALIC CAPITAL J
+1D472 MATHEMATICAL BOLD ITALIC CAPITAL K
+1D473 MATHEMATICAL BOLD ITALIC CAPITAL L
+1D474 MATHEMATICAL BOLD ITALIC CAPITAL M
+1D475 MATHEMATICAL BOLD ITALIC CAPITAL N
+1D476 MATHEMATICAL BOLD ITALIC CAPITAL O
+1D477 MATHEMATICAL BOLD ITALIC CAPITAL P
+1D478 MATHEMATICAL BOLD ITALIC CAPITAL Q
+1D479 MATHEMATICAL BOLD ITALIC CAPITAL R
+1D47A MATHEMATICAL BOLD ITALIC CAPITAL S
+1D47B MATHEMATICAL BOLD ITALIC CAPITAL T
+1D47C MATHEMATICAL BOLD ITALIC CAPITAL U
+1D47D MATHEMATICAL BOLD ITALIC CAPITAL V
+1D47E MATHEMATICAL BOLD ITALIC CAPITAL W
+1D47F MATHEMATICAL BOLD ITALIC CAPITAL X
+1D480 MATHEMATICAL BOLD ITALIC CAPITAL Y
+1D481 MATHEMATICAL BOLD ITALIC CAPITAL Z
+1D482 MATHEMATICAL BOLD ITALIC SMALL A
+1D483 MATHEMATICAL BOLD ITALIC SMALL B
+1D484 MATHEMATICAL BOLD ITALIC SMALL C
+1D485 MATHEMATICAL BOLD ITALIC SMALL D
+1D486 MATHEMATICAL BOLD ITALIC SMALL E
+1D487 MATHEMATICAL BOLD ITALIC SMALL F
+1D488 MATHEMATICAL BOLD ITALIC SMALL G
+1D489 MATHEMATICAL BOLD ITALIC SMALL H
+1D48A MATHEMATICAL BOLD ITALIC SMALL I
+1D48B MATHEMATICAL BOLD ITALIC SMALL J
+1D48C MATHEMATICAL BOLD ITALIC SMALL K
+1D48D MATHEMATICAL BOLD ITALIC SMALL L
+1D48E MATHEMATICAL BOLD ITALIC SMALL M
+1D48F MATHEMATICAL BOLD ITALIC SMALL N
+1D490 MATHEMATICAL BOLD ITALIC SMALL O
+1D491 MATHEMATICAL BOLD ITALIC SMALL P
+1D492 MATHEMATICAL BOLD ITALIC SMALL Q
+1D493 MATHEMATICAL BOLD ITALIC SMALL R
+1D494 MATHEMATICAL BOLD ITALIC SMALL S
+1D495 MATHEMATICAL BOLD ITALIC SMALL T
+1D496 MATHEMATICAL BOLD ITALIC SMALL U
+1D497 MATHEMATICAL BOLD ITALIC SMALL V
+1D498 MATHEMATICAL BOLD ITALIC SMALL W
+1D499 MATHEMATICAL BOLD ITALIC SMALL X
+1D49A MATHEMATICAL BOLD ITALIC SMALL Y
+1D49B MATHEMATICAL BOLD ITALIC SMALL Z
+1D49C MATHEMATICAL SCRIPT CAPITAL A
+1D49E MATHEMATICAL SCRIPT CAPITAL C
+1D49F MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 MATHEMATICAL SCRIPT CAPITAL G
+1D4A5 MATHEMATICAL SCRIPT CAPITAL J
+1D4A6 MATHEMATICAL SCRIPT CAPITAL K
+1D4A9 MATHEMATICAL SCRIPT CAPITAL N
+1D4AA MATHEMATICAL SCRIPT CAPITAL O
+1D4AB MATHEMATICAL SCRIPT CAPITAL P
+1D4AC MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE MATHEMATICAL SCRIPT CAPITAL S
+1D4AF MATHEMATICAL SCRIPT CAPITAL T
+1D4B0 MATHEMATICAL SCRIPT CAPITAL U
+1D4B1 MATHEMATICAL SCRIPT CAPITAL V
+1D4B2 MATHEMATICAL SCRIPT CAPITAL W
+1D4B3 MATHEMATICAL SCRIPT CAPITAL X
+1D4B4 MATHEMATICAL SCRIPT CAPITAL Y
+1D4B5 MATHEMATICAL SCRIPT CAPITAL Z
+1D4B6 MATHEMATICAL SCRIPT SMALL A
+1D4B7 MATHEMATICAL SCRIPT SMALL B
+1D4B8 MATHEMATICAL SCRIPT SMALL C
+1D4B9 MATHEMATICAL SCRIPT SMALL D
+1D4BB MATHEMATICAL SCRIPT SMALL F
+1D4BD MATHEMATICAL SCRIPT SMALL H
+1D4BE MATHEMATICAL SCRIPT SMALL I
+1D4BF MATHEMATICAL SCRIPT SMALL J
+1D4C0 MATHEMATICAL SCRIPT SMALL K
+1D4C2 MATHEMATICAL SCRIPT SMALL M
+1D4C3 MATHEMATICAL SCRIPT SMALL N
+1D4C5 MATHEMATICAL SCRIPT SMALL P
+1D4C6 MATHEMATICAL SCRIPT SMALL Q
+1D4C7 MATHEMATICAL SCRIPT SMALL R
+1D4C8 MATHEMATICAL SCRIPT SMALL S
+1D4C9 MATHEMATICAL SCRIPT SMALL T
+1D4CA MATHEMATICAL SCRIPT SMALL U
+1D4CB MATHEMATICAL SCRIPT SMALL V
+1D4CC MATHEMATICAL SCRIPT SMALL W
+1D4CD MATHEMATICAL SCRIPT SMALL X
+1D4CE MATHEMATICAL SCRIPT SMALL Y
+1D4CF MATHEMATICAL SCRIPT SMALL Z
+1D4D0 MATHEMATICAL BOLD SCRIPT CAPITAL A
+1D4D1 MATHEMATICAL BOLD SCRIPT CAPITAL B
+1D4D2 MATHEMATICAL BOLD SCRIPT CAPITAL C
+1D4D3 MATHEMATICAL BOLD SCRIPT CAPITAL D
+1D4D4 MATHEMATICAL BOLD SCRIPT CAPITAL E
+1D4D5 MATHEMATICAL BOLD SCRIPT CAPITAL F
+1D4D6 MATHEMATICAL BOLD SCRIPT CAPITAL G
+1D4D7 MATHEMATICAL BOLD SCRIPT CAPITAL H
+1D4D8 MATHEMATICAL BOLD SCRIPT CAPITAL I
+1D4D9 MATHEMATICAL BOLD SCRIPT CAPITAL J
+1D4DA MATHEMATICAL BOLD SCRIPT CAPITAL K
+1D4DB MATHEMATICAL BOLD SCRIPT CAPITAL L
+1D4DC MATHEMATICAL BOLD SCRIPT CAPITAL M
+1D4DD MATHEMATICAL BOLD SCRIPT CAPITAL N
+1D4DE MATHEMATICAL BOLD SCRIPT CAPITAL O
+1D4DF MATHEMATICAL BOLD SCRIPT CAPITAL P
+1D4E0 MATHEMATICAL BOLD SCRIPT CAPITAL Q
+1D4E1 MATHEMATICAL BOLD SCRIPT CAPITAL R
+1D4E2 MATHEMATICAL BOLD SCRIPT CAPITAL S
+1D4E3 MATHEMATICAL BOLD SCRIPT CAPITAL T
+1D4E4 MATHEMATICAL BOLD SCRIPT CAPITAL U
+1D4E5 MATHEMATICAL BOLD SCRIPT CAPITAL V
+1D4E6 MATHEMATICAL BOLD SCRIPT CAPITAL W
+1D4E7 MATHEMATICAL BOLD SCRIPT CAPITAL X
+1D4E8 MATHEMATICAL BOLD SCRIPT CAPITAL Y
+1D4E9 MATHEMATICAL BOLD SCRIPT CAPITAL Z
+1D4EA MATHEMATICAL BOLD SCRIPT SMALL A
+1D4EB MATHEMATICAL BOLD SCRIPT SMALL B
+1D4EC MATHEMATICAL BOLD SCRIPT SMALL C
+1D4ED MATHEMATICAL BOLD SCRIPT SMALL D
+1D4EE MATHEMATICAL BOLD SCRIPT SMALL E
+1D4EF MATHEMATICAL BOLD SCRIPT SMALL F
+1D4F0 MATHEMATICAL BOLD SCRIPT SMALL G
+1D4F1 MATHEMATICAL BOLD SCRIPT SMALL H
+1D4F2 MATHEMATICAL BOLD SCRIPT SMALL I
+1D4F3 MATHEMATICAL BOLD SCRIPT SMALL J
+1D4F4 MATHEMATICAL BOLD SCRIPT SMALL K
+1D4F5 MATHEMATICAL BOLD SCRIPT SMALL L
+1D4F6 MATHEMATICAL BOLD SCRIPT SMALL M
+1D4F7 MATHEMATICAL BOLD SCRIPT SMALL N
+1D4F8 MATHEMATICAL BOLD SCRIPT SMALL O
+1D4F9 MATHEMATICAL BOLD SCRIPT SMALL P
+1D4FA MATHEMATICAL BOLD SCRIPT SMALL Q
+1D4FB MATHEMATICAL BOLD SCRIPT SMALL R
+1D4FC MATHEMATICAL BOLD SCRIPT SMALL S
+1D4FD MATHEMATICAL BOLD SCRIPT SMALL T
+1D4FE MATHEMATICAL BOLD SCRIPT SMALL U
+1D4FF MATHEMATICAL BOLD SCRIPT SMALL V
+1D500 MATHEMATICAL BOLD SCRIPT SMALL W
+1D501 MATHEMATICAL BOLD SCRIPT SMALL X
+1D502 MATHEMATICAL BOLD SCRIPT SMALL Y
+1D503 MATHEMATICAL BOLD SCRIPT SMALL Z
+1D504 MATHEMATICAL FRAKTUR CAPITAL A
+1D505 MATHEMATICAL FRAKTUR CAPITAL B
+1D507 MATHEMATICAL FRAKTUR CAPITAL D
+1D508 MATHEMATICAL FRAKTUR CAPITAL E
+1D509 MATHEMATICAL FRAKTUR CAPITAL F
+1D50A MATHEMATICAL FRAKTUR CAPITAL G
+1D50D MATHEMATICAL FRAKTUR CAPITAL J
+1D50E MATHEMATICAL FRAKTUR CAPITAL K
+1D50F MATHEMATICAL FRAKTUR CAPITAL L
+1D510 MATHEMATICAL FRAKTUR CAPITAL M
+1D511 MATHEMATICAL FRAKTUR CAPITAL N
+1D512 MATHEMATICAL FRAKTUR CAPITAL O
+1D513 MATHEMATICAL FRAKTUR CAPITAL P
+1D514 MATHEMATICAL FRAKTUR CAPITAL Q
+1D516 MATHEMATICAL FRAKTUR CAPITAL S
+1D517 MATHEMATICAL FRAKTUR CAPITAL T
+1D518 MATHEMATICAL FRAKTUR CAPITAL U
+1D519 MATHEMATICAL FRAKTUR CAPITAL V
+1D51A MATHEMATICAL FRAKTUR CAPITAL W
+1D51B MATHEMATICAL FRAKTUR CAPITAL X
+1D51C MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E MATHEMATICAL FRAKTUR SMALL A
+1D51F MATHEMATICAL FRAKTUR SMALL B
+1D520 MATHEMATICAL FRAKTUR SMALL C
+1D521 MATHEMATICAL FRAKTUR SMALL D
+1D522 MATHEMATICAL FRAKTUR SMALL E
+1D523 MATHEMATICAL FRAKTUR SMALL F
+1D524 MATHEMATICAL FRAKTUR SMALL G
+1D525 MATHEMATICAL FRAKTUR SMALL H
+1D526 MATHEMATICAL FRAKTUR SMALL I
+1D527 MATHEMATICAL FRAKTUR SMALL J
+1D528 MATHEMATICAL FRAKTUR SMALL K
+1D529 MATHEMATICAL FRAKTUR SMALL L
+1D52A MATHEMATICAL FRAKTUR SMALL M
+1D52B MATHEMATICAL FRAKTUR SMALL N
+1D52C MATHEMATICAL FRAKTUR SMALL O
+1D52D MATHEMATICAL FRAKTUR SMALL P
+1D52E MATHEMATICAL FRAKTUR SMALL Q
+1D52F MATHEMATICAL FRAKTUR SMALL R
+1D530 MATHEMATICAL FRAKTUR SMALL S
+1D531 MATHEMATICAL FRAKTUR SMALL T
+1D532 MATHEMATICAL FRAKTUR SMALL U
+1D533 MATHEMATICAL FRAKTUR SMALL V
+1D534 MATHEMATICAL FRAKTUR SMALL W
+1D535 MATHEMATICAL FRAKTUR SMALL X
+1D536 MATHEMATICAL FRAKTUR SMALL Y
+1D537 MATHEMATICAL FRAKTUR SMALL Z
+1D538 MATHEMATICAL DOUBLE-STRUCK CAPITAL A
+1D539 MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B MATHEMATICAL DOUBLE-STRUCK CAPITAL D
+1D53C MATHEMATICAL DOUBLE-STRUCK CAPITAL E
+1D53D MATHEMATICAL DOUBLE-STRUCK CAPITAL F
+1D53E MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540 MATHEMATICAL DOUBLE-STRUCK CAPITAL I
+1D541 MATHEMATICAL DOUBLE-STRUCK CAPITAL J
+1D542 MATHEMATICAL DOUBLE-STRUCK CAPITAL K
+1D543 MATHEMATICAL DOUBLE-STRUCK CAPITAL L
+1D544 MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A MATHEMATICAL DOUBLE-STRUCK CAPITAL S
+1D54B MATHEMATICAL DOUBLE-STRUCK CAPITAL T
+1D54C MATHEMATICAL DOUBLE-STRUCK CAPITAL U
+1D54D MATHEMATICAL DOUBLE-STRUCK CAPITAL V
+1D54E MATHEMATICAL DOUBLE-STRUCK CAPITAL W
+1D54F MATHEMATICAL DOUBLE-STRUCK CAPITAL X
+1D550 MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552 MATHEMATICAL DOUBLE-STRUCK SMALL A
+1D553 MATHEMATICAL DOUBLE-STRUCK SMALL B
+1D554 MATHEMATICAL DOUBLE-STRUCK SMALL C
+1D555 MATHEMATICAL DOUBLE-STRUCK SMALL D
+1D556 MATHEMATICAL DOUBLE-STRUCK SMALL E
+1D557 MATHEMATICAL DOUBLE-STRUCK SMALL F
+1D558 MATHEMATICAL DOUBLE-STRUCK SMALL G
+1D559 MATHEMATICAL DOUBLE-STRUCK SMALL H
+1D55A MATHEMATICAL DOUBLE-STRUCK SMALL I
+1D55B MATHEMATICAL DOUBLE-STRUCK SMALL J
+1D55C MATHEMATICAL DOUBLE-STRUCK SMALL K
+1D55D MATHEMATICAL DOUBLE-STRUCK SMALL L
+1D55E MATHEMATICAL DOUBLE-STRUCK SMALL M
+1D55F MATHEMATICAL DOUBLE-STRUCK SMALL N
+1D560 MATHEMATICAL DOUBLE-STRUCK SMALL O
+1D561 MATHEMATICAL DOUBLE-STRUCK SMALL P
+1D562 MATHEMATICAL DOUBLE-STRUCK SMALL Q
+1D563 MATHEMATICAL DOUBLE-STRUCK SMALL R
+1D564 MATHEMATICAL DOUBLE-STRUCK SMALL S
+1D565 MATHEMATICAL DOUBLE-STRUCK SMALL T
+1D566 MATHEMATICAL DOUBLE-STRUCK SMALL U
+1D567 MATHEMATICAL DOUBLE-STRUCK SMALL V
+1D568 MATHEMATICAL DOUBLE-STRUCK SMALL W
+1D569 MATHEMATICAL DOUBLE-STRUCK SMALL X
+1D56A MATHEMATICAL DOUBLE-STRUCK SMALL Y
+1D56B MATHEMATICAL DOUBLE-STRUCK SMALL Z
+1D56C MATHEMATICAL BOLD FRAKTUR CAPITAL A
+1D56D MATHEMATICAL BOLD FRAKTUR CAPITAL B
+1D56E MATHEMATICAL BOLD FRAKTUR CAPITAL C
+1D56F MATHEMATICAL BOLD FRAKTUR CAPITAL D
+1D570 MATHEMATICAL BOLD FRAKTUR CAPITAL E
+1D571 MATHEMATICAL BOLD FRAKTUR CAPITAL F
+1D572 MATHEMATICAL BOLD FRAKTUR CAPITAL G
+1D573 MATHEMATICAL BOLD FRAKTUR CAPITAL H
+1D574 MATHEMATICAL BOLD FRAKTUR CAPITAL I
+1D575 MATHEMATICAL BOLD FRAKTUR CAPITAL J
+1D576 MATHEMATICAL BOLD FRAKTUR CAPITAL K
+1D577 MATHEMATICAL BOLD FRAKTUR CAPITAL L
+1D578 MATHEMATICAL BOLD FRAKTUR CAPITAL M
+1D579 MATHEMATICAL BOLD FRAKTUR CAPITAL N
+1D57A MATHEMATICAL BOLD FRAKTUR CAPITAL O
+1D57B MATHEMATICAL BOLD FRAKTUR CAPITAL P
+1D57C MATHEMATICAL BOLD FRAKTUR CAPITAL Q
+1D57D MATHEMATICAL BOLD FRAKTUR CAPITAL R
+1D57E MATHEMATICAL BOLD FRAKTUR CAPITAL S
+1D57F MATHEMATICAL BOLD FRAKTUR CAPITAL T
+1D580 MATHEMATICAL BOLD FRAKTUR CAPITAL U
+1D581 MATHEMATICAL BOLD FRAKTUR CAPITAL V
+1D582 MATHEMATICAL BOLD FRAKTUR CAPITAL W
+1D583 MATHEMATICAL BOLD FRAKTUR CAPITAL X
+1D584 MATHEMATICAL BOLD FRAKTUR CAPITAL Y
+1D585 MATHEMATICAL BOLD FRAKTUR CAPITAL Z
+1D586 MATHEMATICAL BOLD FRAKTUR SMALL A
+1D587 MATHEMATICAL BOLD FRAKTUR SMALL B
+1D588 MATHEMATICAL BOLD FRAKTUR SMALL C
+1D589 MATHEMATICAL BOLD FRAKTUR SMALL D
+1D58A MATHEMATICAL BOLD FRAKTUR SMALL E
+1D58B MATHEMATICAL BOLD FRAKTUR SMALL F
+1D58C MATHEMATICAL BOLD FRAKTUR SMALL G
+1D58D MATHEMATICAL BOLD FRAKTUR SMALL H
+1D58E MATHEMATICAL BOLD FRAKTUR SMALL I
+1D58F MATHEMATICAL BOLD FRAKTUR SMALL J
+1D590 MATHEMATICAL BOLD FRAKTUR SMALL K
+1D591 MATHEMATICAL BOLD FRAKTUR SMALL L
+1D592 MATHEMATICAL BOLD FRAKTUR SMALL M
+1D593 MATHEMATICAL BOLD FRAKTUR SMALL N
+1D594 MATHEMATICAL BOLD FRAKTUR SMALL O
+1D595 MATHEMATICAL BOLD FRAKTUR SMALL P
+1D596 MATHEMATICAL BOLD FRAKTUR SMALL Q
+1D597 MATHEMATICAL BOLD FRAKTUR SMALL R
+1D598 MATHEMATICAL BOLD FRAKTUR SMALL S
+1D599 MATHEMATICAL BOLD FRAKTUR SMALL T
+1D59A MATHEMATICAL BOLD FRAKTUR SMALL U
+1D59B MATHEMATICAL BOLD FRAKTUR SMALL V
+1D59C MATHEMATICAL BOLD FRAKTUR SMALL W
+1D59D MATHEMATICAL BOLD FRAKTUR SMALL X
+1D59E MATHEMATICAL BOLD FRAKTUR SMALL Y
+1D59F MATHEMATICAL BOLD FRAKTUR SMALL Z
+1D5A0 MATHEMATICAL SANS-SERIF CAPITAL A
+1D5A1 MATHEMATICAL SANS-SERIF CAPITAL B
+1D5A2 MATHEMATICAL SANS-SERIF CAPITAL C
+1D5A3 MATHEMATICAL SANS-SERIF CAPITAL D
+1D5A4 MATHEMATICAL SANS-SERIF CAPITAL E
+1D5A5 MATHEMATICAL SANS-SERIF CAPITAL F
+1D5A6 MATHEMATICAL SANS-SERIF CAPITAL G
+1D5A7 MATHEMATICAL SANS-SERIF CAPITAL H
+1D5A8 MATHEMATICAL SANS-SERIF CAPITAL I
+1D5A9 MATHEMATICAL SANS-SERIF CAPITAL J
+1D5AA MATHEMATICAL SANS-SERIF CAPITAL K
+1D5AB MATHEMATICAL SANS-SERIF CAPITAL L
+1D5AC MATHEMATICAL SANS-SERIF CAPITAL M
+1D5AD MATHEMATICAL SANS-SERIF CAPITAL N
+1D5AE MATHEMATICAL SANS-SERIF CAPITAL O
+1D5AF MATHEMATICAL SANS-SERIF CAPITAL P
+1D5B0 MATHEMATICAL SANS-SERIF CAPITAL Q
+1D5B1 MATHEMATICAL SANS-SERIF CAPITAL R
+1D5B2 MATHEMATICAL SANS-SERIF CAPITAL S
+1D5B3 MATHEMATICAL SANS-SERIF CAPITAL T
+1D5B4 MATHEMATICAL SANS-SERIF CAPITAL U
+1D5B5 MATHEMATICAL SANS-SERIF CAPITAL V
+1D5B6 MATHEMATICAL SANS-SERIF CAPITAL W
+1D5B7 MATHEMATICAL SANS-SERIF CAPITAL X
+1D5B8 MATHEMATICAL SANS-SERIF CAPITAL Y
+1D5B9 MATHEMATICAL SANS-SERIF CAPITAL Z
+1D5BA MATHEMATICAL SANS-SERIF SMALL A
+1D5BB MATHEMATICAL SANS-SERIF SMALL B
+1D5BC MATHEMATICAL SANS-SERIF SMALL C
+1D5BD MATHEMATICAL SANS-SERIF SMALL D
+1D5BE MATHEMATICAL SANS-SERIF SMALL E
+1D5BF MATHEMATICAL SANS-SERIF SMALL F
+1D5C0 MATHEMATICAL SANS-SERIF SMALL G
+1D5C1 MATHEMATICAL SANS-SERIF SMALL H
+1D5C2 MATHEMATICAL SANS-SERIF SMALL I
+1D5C3 MATHEMATICAL SANS-SERIF SMALL J
+1D5C4 MATHEMATICAL SANS-SERIF SMALL K
+1D5C5 MATHEMATICAL SANS-SERIF SMALL L
+1D5C6 MATHEMATICAL SANS-SERIF SMALL M
+1D5C7 MATHEMATICAL SANS-SERIF SMALL N
+1D5C8 MATHEMATICAL SANS-SERIF SMALL O
+1D5C9 MATHEMATICAL SANS-SERIF SMALL P
+1D5CA MATHEMATICAL SANS-SERIF SMALL Q
+1D5CB MATHEMATICAL SANS-SERIF SMALL R
+1D5CC MATHEMATICAL SANS-SERIF SMALL S
+1D5CD MATHEMATICAL SANS-SERIF SMALL T
+1D5CE MATHEMATICAL SANS-SERIF SMALL U
+1D5CF MATHEMATICAL SANS-SERIF SMALL V
+1D5D0 MATHEMATICAL SANS-SERIF SMALL W
+1D5D1 MATHEMATICAL SANS-SERIF SMALL X
+1D5D2 MATHEMATICAL SANS-SERIF SMALL Y
+1D5D3 MATHEMATICAL SANS-SERIF SMALL Z
+1D5D4 MATHEMATICAL SANS-SERIF BOLD CAPITAL A
+1D5D5 MATHEMATICAL SANS-SERIF BOLD CAPITAL B
+1D5D6 MATHEMATICAL SANS-SERIF BOLD CAPITAL C
+1D5D7 MATHEMATICAL SANS-SERIF BOLD CAPITAL D
+1D5D8 MATHEMATICAL SANS-SERIF BOLD CAPITAL E
+1D5D9 MATHEMATICAL SANS-SERIF BOLD CAPITAL F
+1D5DA MATHEMATICAL SANS-SERIF BOLD CAPITAL G
+1D5DB MATHEMATICAL SANS-SERIF BOLD CAPITAL H
+1D5DC MATHEMATICAL SANS-SERIF BOLD CAPITAL I
+1D5DD MATHEMATICAL SANS-SERIF BOLD CAPITAL J
+1D5DE MATHEMATICAL SANS-SERIF BOLD CAPITAL K
+1D5DF MATHEMATICAL SANS-SERIF BOLD CAPITAL L
+1D5E0 MATHEMATICAL SANS-SERIF BOLD CAPITAL M
+1D5E1 MATHEMATICAL SANS-SERIF BOLD CAPITAL N
+1D5E2 MATHEMATICAL SANS-SERIF BOLD CAPITAL O
+1D5E3 MATHEMATICAL SANS-SERIF BOLD CAPITAL P
+1D5E4 MATHEMATICAL SANS-SERIF BOLD CAPITAL Q
+1D5E5 MATHEMATICAL SANS-SERIF BOLD CAPITAL R
+1D5E6 MATHEMATICAL SANS-SERIF BOLD CAPITAL S
+1D5E7 MATHEMATICAL SANS-SERIF BOLD CAPITAL T
+1D5E8 MATHEMATICAL SANS-SERIF BOLD CAPITAL U
+1D5E9 MATHEMATICAL SANS-SERIF BOLD CAPITAL V
+1D5EA MATHEMATICAL SANS-SERIF BOLD CAPITAL W
+1D5EB MATHEMATICAL SANS-SERIF BOLD CAPITAL X
+1D5EC MATHEMATICAL SANS-SERIF BOLD CAPITAL Y
+1D5ED MATHEMATICAL SANS-SERIF BOLD CAPITAL Z
+1D5EE MATHEMATICAL SANS-SERIF BOLD SMALL A
+1D5EF MATHEMATICAL SANS-SERIF BOLD SMALL B
+1D5F0 MATHEMATICAL SANS-SERIF BOLD SMALL C
+1D5F1 MATHEMATICAL SANS-SERIF BOLD SMALL D
+1D5F2 MATHEMATICAL SANS-SERIF BOLD SMALL E
+1D5F3 MATHEMATICAL SANS-SERIF BOLD SMALL F
+1D5F4 MATHEMATICAL SANS-SERIF BOLD SMALL G
+1D5F5 MATHEMATICAL SANS-SERIF BOLD SMALL H
+1D5F6 MATHEMATICAL SANS-SERIF BOLD SMALL I
+1D5F7 MATHEMATICAL SANS-SERIF BOLD SMALL J
+1D5F8 MATHEMATICAL SANS-SERIF BOLD SMALL K
+1D5F9 MATHEMATICAL SANS-SERIF BOLD SMALL L
+1D5FA MATHEMATICAL SANS-SERIF BOLD SMALL M
+1D5FB MATHEMATICAL SANS-SERIF BOLD SMALL N
+1D5FC MATHEMATICAL SANS-SERIF BOLD SMALL O
+1D5FD MATHEMATICAL SANS-SERIF BOLD SMALL P
+1D5FE MATHEMATICAL SANS-SERIF BOLD SMALL Q
+1D5FF MATHEMATICAL SANS-SERIF BOLD SMALL R
+1D600 MATHEMATICAL SANS-SERIF BOLD SMALL S
+1D601 MATHEMATICAL SANS-SERIF BOLD SMALL T
+1D602 MATHEMATICAL SANS-SERIF BOLD SMALL U
+1D603 MATHEMATICAL SANS-SERIF BOLD SMALL V
+1D604 MATHEMATICAL SANS-SERIF BOLD SMALL W
+1D605 MATHEMATICAL SANS-SERIF BOLD SMALL X
+1D606 MATHEMATICAL SANS-SERIF BOLD SMALL Y
+1D607 MATHEMATICAL SANS-SERIF BOLD SMALL Z
+1D608 MATHEMATICAL SANS-SERIF ITALIC CAPITAL A
+1D609 MATHEMATICAL SANS-SERIF ITALIC CAPITAL B
+1D60A MATHEMATICAL SANS-SERIF ITALIC CAPITAL C
+1D60B MATHEMATICAL SANS-SERIF ITALIC CAPITAL D
+1D60C MATHEMATICAL SANS-SERIF ITALIC CAPITAL E
+1D60D MATHEMATICAL SANS-SERIF ITALIC CAPITAL F
+1D60E MATHEMATICAL SANS-SERIF ITALIC CAPITAL G
+1D60F MATHEMATICAL SANS-SERIF ITALIC CAPITAL H
+1D610 MATHEMATICAL SANS-SERIF ITALIC CAPITAL I
+1D611 MATHEMATICAL SANS-SERIF ITALIC CAPITAL J
+1D612 MATHEMATICAL SANS-SERIF ITALIC CAPITAL K
+1D613 MATHEMATICAL SANS-SERIF ITALIC CAPITAL L
+1D614 MATHEMATICAL SANS-SERIF ITALIC CAPITAL M
+1D615 MATHEMATICAL SANS-SERIF ITALIC CAPITAL N
+1D616 MATHEMATICAL SANS-SERIF ITALIC CAPITAL O
+1D617 MATHEMATICAL SANS-SERIF ITALIC CAPITAL P
+1D618 MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q
+1D619 MATHEMATICAL SANS-SERIF ITALIC CAPITAL R
+1D61A MATHEMATICAL SANS-SERIF ITALIC CAPITAL S
+1D61B MATHEMATICAL SANS-SERIF ITALIC CAPITAL T
+1D61C MATHEMATICAL SANS-SERIF ITALIC CAPITAL U
+1D61D MATHEMATICAL SANS-SERIF ITALIC CAPITAL V
+1D61E MATHEMATICAL SANS-SERIF ITALIC CAPITAL W
+1D61F MATHEMATICAL SANS-SERIF ITALIC CAPITAL X
+1D620 MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y
+1D621 MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z
+1D622 MATHEMATICAL SANS-SERIF ITALIC SMALL A
+1D623 MATHEMATICAL SANS-SERIF ITALIC SMALL B
+1D624 MATHEMATICAL SANS-SERIF ITALIC SMALL C
+1D625 MATHEMATICAL SANS-SERIF ITALIC SMALL D
+1D626 MATHEMATICAL SANS-SERIF ITALIC SMALL E
+1D627 MATHEMATICAL SANS-SERIF ITALIC SMALL F
+1D628 MATHEMATICAL SANS-SERIF ITALIC SMALL G
+1D629 MATHEMATICAL SANS-SERIF ITALIC SMALL H
+1D62A MATHEMATICAL SANS-SERIF ITALIC SMALL I
+1D62B MATHEMATICAL SANS-SERIF ITALIC SMALL J
+1D62C MATHEMATICAL SANS-SERIF ITALIC SMALL K
+1D62D MATHEMATICAL SANS-SERIF ITALIC SMALL L
+1D62E MATHEMATICAL SANS-SERIF ITALIC SMALL M
+1D62F MATHEMATICAL SANS-SERIF ITALIC SMALL N
+1D630 MATHEMATICAL SANS-SERIF ITALIC SMALL O
+1D631 MATHEMATICAL SANS-SERIF ITALIC SMALL P
+1D632 MATHEMATICAL SANS-SERIF ITALIC SMALL Q
+1D633 MATHEMATICAL SANS-SERIF ITALIC SMALL R
+1D634 MATHEMATICAL SANS-SERIF ITALIC SMALL S
+1D635 MATHEMATICAL SANS-SERIF ITALIC SMALL T
+1D636 MATHEMATICAL SANS-SERIF ITALIC SMALL U
+1D637 MATHEMATICAL SANS-SERIF ITALIC SMALL V
+1D638 MATHEMATICAL SANS-SERIF ITALIC SMALL W
+1D639 MATHEMATICAL SANS-SERIF ITALIC SMALL X
+1D63A MATHEMATICAL SANS-SERIF ITALIC SMALL Y
+1D63B MATHEMATICAL SANS-SERIF ITALIC SMALL Z
+1D63C MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A
+1D63D MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B
+1D63E MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C
+1D63F MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D
+1D640 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E
+1D641 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F
+1D642 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G
+1D643 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H
+1D644 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I
+1D645 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J
+1D646 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K
+1D647 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L
+1D648 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M
+1D649 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N
+1D64A MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O
+1D64B MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P
+1D64C MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q
+1D64D MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R
+1D64E MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S
+1D64F MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T
+1D650 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U
+1D651 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V
+1D652 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W
+1D653 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X
+1D654 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y
+1D655 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z
+1D656 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A
+1D657 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B
+1D658 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C
+1D659 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D
+1D65A MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E
+1D65B MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F
+1D65C MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G
+1D65D MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H
+1D65E MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I
+1D65F MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J
+1D660 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K
+1D661 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L
+1D662 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M
+1D663 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N
+1D664 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O
+1D665 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P
+1D666 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q
+1D667 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R
+1D668 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S
+1D669 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T
+1D66A MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U
+1D66B MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V
+1D66C MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W
+1D66D MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X
+1D66E MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y
+1D66F MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z
+1D670 MATHEMATICAL MONOSPACE CAPITAL A
+1D671 MATHEMATICAL MONOSPACE CAPITAL B
+1D672 MATHEMATICAL MONOSPACE CAPITAL C
+1D673 MATHEMATICAL MONOSPACE CAPITAL D
+1D674 MATHEMATICAL MONOSPACE CAPITAL E
+1D675 MATHEMATICAL MONOSPACE CAPITAL F
+1D676 MATHEMATICAL MONOSPACE CAPITAL G
+1D677 MATHEMATICAL MONOSPACE CAPITAL H
+1D678 MATHEMATICAL MONOSPACE CAPITAL I
+1D679 MATHEMATICAL MONOSPACE CAPITAL J
+1D67A MATHEMATICAL MONOSPACE CAPITAL K
+1D67B MATHEMATICAL MONOSPACE CAPITAL L
+1D67C MATHEMATICAL MONOSPACE CAPITAL M
+1D67D MATHEMATICAL MONOSPACE CAPITAL N
+1D67E MATHEMATICAL MONOSPACE CAPITAL O
+1D67F MATHEMATICAL MONOSPACE CAPITAL P
+1D680 MATHEMATICAL MONOSPACE CAPITAL Q
+1D681 MATHEMATICAL MONOSPACE CAPITAL R
+1D682 MATHEMATICAL MONOSPACE CAPITAL S
+1D683 MATHEMATICAL MONOSPACE CAPITAL T
+1D684 MATHEMATICAL MONOSPACE CAPITAL U
+1D685 MATHEMATICAL MONOSPACE CAPITAL V
+1D686 MATHEMATICAL MONOSPACE CAPITAL W
+1D687 MATHEMATICAL MONOSPACE CAPITAL X
+1D688 MATHEMATICAL MONOSPACE CAPITAL Y
+1D689 MATHEMATICAL MONOSPACE CAPITAL Z
+1D68A MATHEMATICAL MONOSPACE SMALL A
+1D68B MATHEMATICAL MONOSPACE SMALL B
+1D68C MATHEMATICAL MONOSPACE SMALL C
+1D68D MATHEMATICAL MONOSPACE SMALL D
+1D68E MATHEMATICAL MONOSPACE SMALL E
+1D68F MATHEMATICAL MONOSPACE SMALL F
+1D690 MATHEMATICAL MONOSPACE SMALL G
+1D691 MATHEMATICAL MONOSPACE SMALL H
+1D692 MATHEMATICAL MONOSPACE SMALL I
+1D693 MATHEMATICAL MONOSPACE SMALL J
+1D694 MATHEMATICAL MONOSPACE SMALL K
+1D695 MATHEMATICAL MONOSPACE SMALL L
+1D696 MATHEMATICAL MONOSPACE SMALL M
+1D697 MATHEMATICAL MONOSPACE SMALL N
+1D698 MATHEMATICAL MONOSPACE SMALL O
+1D699 MATHEMATICAL MONOSPACE SMALL P
+1D69A MATHEMATICAL MONOSPACE SMALL Q
+1D69B MATHEMATICAL MONOSPACE SMALL R
+1D69C MATHEMATICAL MONOSPACE SMALL S
+1D69D MATHEMATICAL MONOSPACE SMALL T
+1D69E MATHEMATICAL MONOSPACE SMALL U
+1D69F MATHEMATICAL MONOSPACE SMALL V
+1D6A0 MATHEMATICAL MONOSPACE SMALL W
+1D6A1 MATHEMATICAL MONOSPACE SMALL X
+1D6A2 MATHEMATICAL MONOSPACE SMALL Y
+1D6A3 MATHEMATICAL MONOSPACE SMALL Z
+1D6A8 MATHEMATICAL BOLD CAPITAL ALPHA
+1D6A9 MATHEMATICAL BOLD CAPITAL BETA
+1D6AA MATHEMATICAL BOLD CAPITAL GAMMA
+1D6AB MATHEMATICAL BOLD CAPITAL DELTA
+1D6AC MATHEMATICAL BOLD CAPITAL EPSILON
+1D6AD MATHEMATICAL BOLD CAPITAL ZETA
+1D6AE MATHEMATICAL BOLD CAPITAL ETA
+1D6AF MATHEMATICAL BOLD CAPITAL THETA
+1D6B0 MATHEMATICAL BOLD CAPITAL IOTA
+1D6B1 MATHEMATICAL BOLD CAPITAL KAPPA
+1D6B2 MATHEMATICAL BOLD CAPITAL LAMDA
+1D6B3 MATHEMATICAL BOLD CAPITAL MU
+1D6B4 MATHEMATICAL BOLD CAPITAL NU
+1D6B5 MATHEMATICAL BOLD CAPITAL XI
+1D6B6 MATHEMATICAL BOLD CAPITAL OMICRON
+1D6B7 MATHEMATICAL BOLD CAPITAL PI
+1D6B8 MATHEMATICAL BOLD CAPITAL RHO
+1D6B9 MATHEMATICAL BOLD CAPITAL THETA SYMBOL
+1D6BA MATHEMATICAL BOLD CAPITAL SIGMA
+1D6BB MATHEMATICAL BOLD CAPITAL TAU
+1D6BC MATHEMATICAL BOLD CAPITAL UPSILON
+1D6BD MATHEMATICAL BOLD CAPITAL PHI
+1D6BE MATHEMATICAL BOLD CAPITAL CHI
+1D6BF MATHEMATICAL BOLD CAPITAL PSI
+1D6C0 MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1 MATHEMATICAL BOLD NABLA
+1D6C2 MATHEMATICAL BOLD SMALL ALPHA
+1D6C3 MATHEMATICAL BOLD SMALL BETA
+1D6C4 MATHEMATICAL BOLD SMALL GAMMA
+1D6C5 MATHEMATICAL BOLD SMALL DELTA
+1D6C6 MATHEMATICAL BOLD SMALL EPSILON
+1D6C7 MATHEMATICAL BOLD SMALL ZETA
+1D6C8 MATHEMATICAL BOLD SMALL ETA
+1D6C9 MATHEMATICAL BOLD SMALL THETA
+1D6CA MATHEMATICAL BOLD SMALL IOTA
+1D6CB MATHEMATICAL BOLD SMALL KAPPA
+1D6CC MATHEMATICAL BOLD SMALL LAMDA
+1D6CD MATHEMATICAL BOLD SMALL MU
+1D6CE MATHEMATICAL BOLD SMALL NU
+1D6CF MATHEMATICAL BOLD SMALL XI
+1D6D0 MATHEMATICAL BOLD SMALL OMICRON
+1D6D1 MATHEMATICAL BOLD SMALL PI
+1D6D2 MATHEMATICAL BOLD SMALL RHO
+1D6D3 MATHEMATICAL BOLD SMALL FINAL SIGMA
+1D6D4 MATHEMATICAL BOLD SMALL SIGMA
+1D6D5 MATHEMATICAL BOLD SMALL TAU
+1D6D6 MATHEMATICAL BOLD SMALL UPSILON
+1D6D7 MATHEMATICAL BOLD SMALL PHI
+1D6D8 MATHEMATICAL BOLD SMALL CHI
+1D6D9 MATHEMATICAL BOLD SMALL PSI
+1D6DA MATHEMATICAL BOLD SMALL OMEGA
+1D6DB MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC MATHEMATICAL BOLD EPSILON SYMBOL
+1D6DD MATHEMATICAL BOLD THETA SYMBOL
+1D6DE MATHEMATICAL BOLD KAPPA SYMBOL
+1D6DF MATHEMATICAL BOLD PHI SYMBOL
+1D6E0 MATHEMATICAL BOLD RHO SYMBOL
+1D6E1 MATHEMATICAL BOLD PI SYMBOL
+1D6E2 MATHEMATICAL ITALIC CAPITAL ALPHA
+1D6E3 MATHEMATICAL ITALIC CAPITAL BETA
+1D6E4 MATHEMATICAL ITALIC CAPITAL GAMMA
+1D6E5 MATHEMATICAL ITALIC CAPITAL DELTA
+1D6E6 MATHEMATICAL ITALIC CAPITAL EPSILON
+1D6E7 MATHEMATICAL ITALIC CAPITAL ZETA
+1D6E8 MATHEMATICAL ITALIC CAPITAL ETA
+1D6E9 MATHEMATICAL ITALIC CAPITAL THETA
+1D6EA MATHEMATICAL ITALIC CAPITAL IOTA
+1D6EB MATHEMATICAL ITALIC CAPITAL KAPPA
+1D6EC MATHEMATICAL ITALIC CAPITAL LAMDA
+1D6ED MATHEMATICAL ITALIC CAPITAL MU
+1D6EE MATHEMATICAL ITALIC CAPITAL NU
+1D6EF MATHEMATICAL ITALIC CAPITAL XI
+1D6F0 MATHEMATICAL ITALIC CAPITAL OMICRON
+1D6F1 MATHEMATICAL ITALIC CAPITAL PI
+1D6F2 MATHEMATICAL ITALIC CAPITAL RHO
+1D6F3 MATHEMATICAL ITALIC CAPITAL THETA SYMBOL
+1D6F4 MATHEMATICAL ITALIC CAPITAL SIGMA
+1D6F5 MATHEMATICAL ITALIC CAPITAL TAU
+1D6F6 MATHEMATICAL ITALIC CAPITAL UPSILON
+1D6F7 MATHEMATICAL ITALIC CAPITAL PHI
+1D6F8 MATHEMATICAL ITALIC CAPITAL CHI
+1D6F9 MATHEMATICAL ITALIC CAPITAL PSI
+1D6FA MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB MATHEMATICAL ITALIC NABLA
+1D6FC MATHEMATICAL ITALIC SMALL ALPHA
+1D6FD MATHEMATICAL ITALIC SMALL BETA
+1D6FE MATHEMATICAL ITALIC SMALL GAMMA
+1D6FF MATHEMATICAL ITALIC SMALL DELTA
+1D700 MATHEMATICAL ITALIC SMALL EPSILON
+1D701 MATHEMATICAL ITALIC SMALL ZETA
+1D702 MATHEMATICAL ITALIC SMALL ETA
+1D703 MATHEMATICAL ITALIC SMALL THETA
+1D704 MATHEMATICAL ITALIC SMALL IOTA
+1D705 MATHEMATICAL ITALIC SMALL KAPPA
+1D706 MATHEMATICAL ITALIC SMALL LAMDA
+1D707 MATHEMATICAL ITALIC SMALL MU
+1D708 MATHEMATICAL ITALIC SMALL NU
+1D709 MATHEMATICAL ITALIC SMALL XI
+1D70A MATHEMATICAL ITALIC SMALL OMICRON
+1D70B MATHEMATICAL ITALIC SMALL PI
+1D70C MATHEMATICAL ITALIC SMALL RHO
+1D70D MATHEMATICAL ITALIC SMALL FINAL SIGMA
+1D70E MATHEMATICAL ITALIC SMALL SIGMA
+1D70F MATHEMATICAL ITALIC SMALL TAU
+1D710 MATHEMATICAL ITALIC SMALL UPSILON
+1D711 MATHEMATICAL ITALIC SMALL PHI
+1D712 MATHEMATICAL ITALIC SMALL CHI
+1D713 MATHEMATICAL ITALIC SMALL PSI
+1D714 MATHEMATICAL ITALIC SMALL OMEGA
+1D715 MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716 MATHEMATICAL ITALIC EPSILON SYMBOL
+1D717 MATHEMATICAL ITALIC THETA SYMBOL
+1D718 MATHEMATICAL ITALIC KAPPA SYMBOL
+1D719 MATHEMATICAL ITALIC PHI SYMBOL
+1D71A MATHEMATICAL ITALIC RHO SYMBOL
+1D71B MATHEMATICAL ITALIC PI SYMBOL
+1D71C MATHEMATICAL BOLD ITALIC CAPITAL ALPHA
+1D71D MATHEMATICAL BOLD ITALIC CAPITAL BETA
+1D71E MATHEMATICAL BOLD ITALIC CAPITAL GAMMA
+1D71F MATHEMATICAL BOLD ITALIC CAPITAL DELTA
+1D720 MATHEMATICAL BOLD ITALIC CAPITAL EPSILON
+1D721 MATHEMATICAL BOLD ITALIC CAPITAL ZETA
+1D722 MATHEMATICAL BOLD ITALIC CAPITAL ETA
+1D723 MATHEMATICAL BOLD ITALIC CAPITAL THETA
+1D724 MATHEMATICAL BOLD ITALIC CAPITAL IOTA
+1D725 MATHEMATICAL BOLD ITALIC CAPITAL KAPPA
+1D726 MATHEMATICAL BOLD ITALIC CAPITAL LAMDA
+1D727 MATHEMATICAL BOLD ITALIC CAPITAL MU
+1D728 MATHEMATICAL BOLD ITALIC CAPITAL NU
+1D729 MATHEMATICAL BOLD ITALIC CAPITAL XI
+1D72A MATHEMATICAL BOLD ITALIC CAPITAL OMICRON
+1D72B MATHEMATICAL BOLD ITALIC CAPITAL PI
+1D72C MATHEMATICAL BOLD ITALIC CAPITAL RHO
+1D72D MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL
+1D72E MATHEMATICAL BOLD ITALIC CAPITAL SIGMA
+1D72F MATHEMATICAL BOLD ITALIC CAPITAL TAU
+1D730 MATHEMATICAL BOLD ITALIC CAPITAL UPSILON
+1D731 MATHEMATICAL BOLD ITALIC CAPITAL PHI
+1D732 MATHEMATICAL BOLD ITALIC CAPITAL CHI
+1D733 MATHEMATICAL BOLD ITALIC CAPITAL PSI
+1D734 MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735 MATHEMATICAL BOLD ITALIC NABLA
+1D736 MATHEMATICAL BOLD ITALIC SMALL ALPHA
+1D737 MATHEMATICAL BOLD ITALIC SMALL BETA
+1D738 MATHEMATICAL BOLD ITALIC SMALL GAMMA
+1D739 MATHEMATICAL BOLD ITALIC SMALL DELTA
+1D73A MATHEMATICAL BOLD ITALIC SMALL EPSILON
+1D73B MATHEMATICAL BOLD ITALIC SMALL ZETA
+1D73C MATHEMATICAL BOLD ITALIC SMALL ETA
+1D73D MATHEMATICAL BOLD ITALIC SMALL THETA
+1D73E MATHEMATICAL BOLD ITALIC SMALL IOTA
+1D73F MATHEMATICAL BOLD ITALIC SMALL KAPPA
+1D740 MATHEMATICAL BOLD ITALIC SMALL LAMDA
+1D741 MATHEMATICAL BOLD ITALIC SMALL MU
+1D742 MATHEMATICAL BOLD ITALIC SMALL NU
+1D743 MATHEMATICAL BOLD ITALIC SMALL XI
+1D744 MATHEMATICAL BOLD ITALIC SMALL OMICRON
+1D745 MATHEMATICAL BOLD ITALIC SMALL PI
+1D746 MATHEMATICAL BOLD ITALIC SMALL RHO
+1D747 MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA
+1D748 MATHEMATICAL BOLD ITALIC SMALL SIGMA
+1D749 MATHEMATICAL BOLD ITALIC SMALL TAU
+1D74A MATHEMATICAL BOLD ITALIC SMALL UPSILON
+1D74B MATHEMATICAL BOLD ITALIC SMALL PHI
+1D74C MATHEMATICAL BOLD ITALIC SMALL CHI
+1D74D MATHEMATICAL BOLD ITALIC SMALL PSI
+1D74E MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750 MATHEMATICAL BOLD ITALIC EPSILON SYMBOL
+1D751 MATHEMATICAL BOLD ITALIC THETA SYMBOL
+1D752 MATHEMATICAL BOLD ITALIC KAPPA SYMBOL
+1D753 MATHEMATICAL BOLD ITALIC PHI SYMBOL
+1D754 MATHEMATICAL BOLD ITALIC RHO SYMBOL
+1D755 MATHEMATICAL BOLD ITALIC PI SYMBOL
+1D756 MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA
+1D757 MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA
+1D758 MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA
+1D759 MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA
+1D75A MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON
+1D75B MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA
+1D75C MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA
+1D75D MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA
+1D75E MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA
+1D75F MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA
+1D760 MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA
+1D761 MATHEMATICAL SANS-SERIF BOLD CAPITAL MU
+1D762 MATHEMATICAL SANS-SERIF BOLD CAPITAL NU
+1D763 MATHEMATICAL SANS-SERIF BOLD CAPITAL XI
+1D764 MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON
+1D765 MATHEMATICAL SANS-SERIF BOLD CAPITAL PI
+1D766 MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO
+1D767 MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL
+1D768 MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA
+1D769 MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU
+1D76A MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON
+1D76B MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI
+1D76C MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI
+1D76D MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI
+1D76E MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770 MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA
+1D771 MATHEMATICAL SANS-SERIF BOLD SMALL BETA
+1D772 MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA
+1D773 MATHEMATICAL SANS-SERIF BOLD SMALL DELTA
+1D774 MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON
+1D775 MATHEMATICAL SANS-SERIF BOLD SMALL ZETA
+1D776 MATHEMATICAL SANS-SERIF BOLD SMALL ETA
+1D777 MATHEMATICAL SANS-SERIF BOLD SMALL THETA
+1D778 MATHEMATICAL SANS-SERIF BOLD SMALL IOTA
+1D779 MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA
+1D77A MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA
+1D77B MATHEMATICAL SANS-SERIF BOLD SMALL MU
+1D77C MATHEMATICAL SANS-SERIF BOLD SMALL NU
+1D77D MATHEMATICAL SANS-SERIF BOLD SMALL XI
+1D77E MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON
+1D77F MATHEMATICAL SANS-SERIF BOLD SMALL PI
+1D780 MATHEMATICAL SANS-SERIF BOLD SMALL RHO
+1D781 MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA
+1D782 MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA
+1D783 MATHEMATICAL SANS-SERIF BOLD SMALL TAU
+1D784 MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON
+1D785 MATHEMATICAL SANS-SERIF BOLD SMALL PHI
+1D786 MATHEMATICAL SANS-SERIF BOLD SMALL CHI
+1D787 MATHEMATICAL SANS-SERIF BOLD SMALL PSI
+1D788 MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789 MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL
+1D78B MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL
+1D78C MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL
+1D78D MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL
+1D78E MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL
+1D78F MATHEMATICAL SANS-SERIF BOLD PI SYMBOL
+1D790 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA
+1D791 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA
+1D792 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA
+1D793 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA
+1D794 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON
+1D795 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA
+1D796 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA
+1D797 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA
+1D798 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA
+1D799 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA
+1D79A MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA
+1D79B MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU
+1D79C MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU
+1D79D MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI
+1D79E MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON
+1D79F MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI
+1D7A0 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO
+1D7A1 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL
+1D7A2 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA
+1D7A3 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU
+1D7A4 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON
+1D7A5 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI
+1D7A6 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI
+1D7A7 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI
+1D7A8 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9 MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA
+1D7AB MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA
+1D7AC MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA
+1D7AD MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA
+1D7AE MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON
+1D7AF MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA
+1D7B0 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA
+1D7B1 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA
+1D7B2 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA
+1D7B3 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA
+1D7B4 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA
+1D7B5 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU
+1D7B6 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU
+1D7B7 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI
+1D7B8 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON
+1D7B9 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI
+1D7BA MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO
+1D7BB MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA
+1D7BC MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA
+1D7BD MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU
+1D7BE MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON
+1D7BF MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI
+1D7C0 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI
+1D7C1 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI
+1D7C2 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3 MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4 MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL
+1D7C5 MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL
+1D7C6 MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL
+1D7C7 MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL
+1D7C8 MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL
+1D7C9 MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+1D7CE MATHEMATICAL BOLD DIGIT ZERO
+1D7CF MATHEMATICAL BOLD DIGIT ONE
+1D7D0 MATHEMATICAL BOLD DIGIT TWO
+1D7D1 MATHEMATICAL BOLD DIGIT THREE
+1D7D2 MATHEMATICAL BOLD DIGIT FOUR
+1D7D3 MATHEMATICAL BOLD DIGIT FIVE
+1D7D4 MATHEMATICAL BOLD DIGIT SIX
+1D7D5 MATHEMATICAL BOLD DIGIT SEVEN
+1D7D6 MATHEMATICAL BOLD DIGIT EIGHT
+1D7D7 MATHEMATICAL BOLD DIGIT NINE
+1D7D8 MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO
+1D7D9 MATHEMATICAL DOUBLE-STRUCK DIGIT ONE
+1D7DA MATHEMATICAL DOUBLE-STRUCK DIGIT TWO
+1D7DB MATHEMATICAL DOUBLE-STRUCK DIGIT THREE
+1D7DC MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR
+1D7DD MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE
+1D7DE MATHEMATICAL DOUBLE-STRUCK DIGIT SIX
+1D7DF MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN
+1D7E0 MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT
+1D7E1 MATHEMATICAL DOUBLE-STRUCK DIGIT NINE
+1D7E2 MATHEMATICAL SANS-SERIF DIGIT ZERO
+1D7E3 MATHEMATICAL SANS-SERIF DIGIT ONE
+1D7E4 MATHEMATICAL SANS-SERIF DIGIT TWO
+1D7E5 MATHEMATICAL SANS-SERIF DIGIT THREE
+1D7E6 MATHEMATICAL SANS-SERIF DIGIT FOUR
+1D7E7 MATHEMATICAL SANS-SERIF DIGIT FIVE
+1D7E8 MATHEMATICAL SANS-SERIF DIGIT SIX
+1D7E9 MATHEMATICAL SANS-SERIF DIGIT SEVEN
+1D7EA MATHEMATICAL SANS-SERIF DIGIT EIGHT
+1D7EB MATHEMATICAL SANS-SERIF DIGIT NINE
+1D7EC MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO
+1D7ED MATHEMATICAL SANS-SERIF BOLD DIGIT ONE
+1D7EE MATHEMATICAL SANS-SERIF BOLD DIGIT TWO
+1D7EF MATHEMATICAL SANS-SERIF BOLD DIGIT THREE
+1D7F0 MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR
+1D7F1 MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE
+1D7F2 MATHEMATICAL SANS-SERIF BOLD DIGIT SIX
+1D7F3 MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN
+1D7F4 MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT
+1D7F5 MATHEMATICAL SANS-SERIF BOLD DIGIT NINE
+1D7F6 MATHEMATICAL MONOSPACE DIGIT ZERO
+1D7F7 MATHEMATICAL MONOSPACE DIGIT ONE
+1D7F8 MATHEMATICAL MONOSPACE DIGIT TWO
+1D7F9 MATHEMATICAL MONOSPACE DIGIT THREE
+1D7FA MATHEMATICAL MONOSPACE DIGIT FOUR
+1D7FB MATHEMATICAL MONOSPACE DIGIT FIVE
+1D7FC MATHEMATICAL MONOSPACE DIGIT SIX
+1D7FD MATHEMATICAL MONOSPACE DIGIT SEVEN
+1D7FE MATHEMATICAL MONOSPACE DIGIT EIGHT
+1D7FF MATHEMATICAL MONOSPACE DIGIT NINE
+20000 2A6D6 CJK Ideograph Extension B
+2F800 CJK COMPATIBILITY IDEOGRAPH-2F800
+2F801 CJK COMPATIBILITY IDEOGRAPH-2F801
+2F802 CJK COMPATIBILITY IDEOGRAPH-2F802
+2F803 CJK COMPATIBILITY IDEOGRAPH-2F803
+2F804 CJK COMPATIBILITY IDEOGRAPH-2F804
+2F805 CJK COMPATIBILITY IDEOGRAPH-2F805
+2F806 CJK COMPATIBILITY IDEOGRAPH-2F806
+2F807 CJK COMPATIBILITY IDEOGRAPH-2F807
+2F808 CJK COMPATIBILITY IDEOGRAPH-2F808
+2F809 CJK COMPATIBILITY IDEOGRAPH-2F809
+2F80A CJK COMPATIBILITY IDEOGRAPH-2F80A
+2F80B CJK COMPATIBILITY IDEOGRAPH-2F80B
+2F80C CJK COMPATIBILITY IDEOGRAPH-2F80C
+2F80D CJK COMPATIBILITY IDEOGRAPH-2F80D
+2F80E CJK COMPATIBILITY IDEOGRAPH-2F80E
+2F80F CJK COMPATIBILITY IDEOGRAPH-2F80F
+2F810 CJK COMPATIBILITY IDEOGRAPH-2F810
+2F811 CJK COMPATIBILITY IDEOGRAPH-2F811
+2F812 CJK COMPATIBILITY IDEOGRAPH-2F812
+2F813 CJK COMPATIBILITY IDEOGRAPH-2F813
+2F814 CJK COMPATIBILITY IDEOGRAPH-2F814
+2F815 CJK COMPATIBILITY IDEOGRAPH-2F815
+2F816 CJK COMPATIBILITY IDEOGRAPH-2F816
+2F817 CJK COMPATIBILITY IDEOGRAPH-2F817
+2F818 CJK COMPATIBILITY IDEOGRAPH-2F818
+2F819 CJK COMPATIBILITY IDEOGRAPH-2F819
+2F81A CJK COMPATIBILITY IDEOGRAPH-2F81A
+2F81B CJK COMPATIBILITY IDEOGRAPH-2F81B
+2F81C CJK COMPATIBILITY IDEOGRAPH-2F81C
+2F81D CJK COMPATIBILITY IDEOGRAPH-2F81D
+2F81E CJK COMPATIBILITY IDEOGRAPH-2F81E
+2F81F CJK COMPATIBILITY IDEOGRAPH-2F81F
+2F820 CJK COMPATIBILITY IDEOGRAPH-2F820
+2F821 CJK COMPATIBILITY IDEOGRAPH-2F821
+2F822 CJK COMPATIBILITY IDEOGRAPH-2F822
+2F823 CJK COMPATIBILITY IDEOGRAPH-2F823
+2F824 CJK COMPATIBILITY IDEOGRAPH-2F824
+2F825 CJK COMPATIBILITY IDEOGRAPH-2F825
+2F826 CJK COMPATIBILITY IDEOGRAPH-2F826
+2F827 CJK COMPATIBILITY IDEOGRAPH-2F827
+2F828 CJK COMPATIBILITY IDEOGRAPH-2F828
+2F829 CJK COMPATIBILITY IDEOGRAPH-2F829
+2F82A CJK COMPATIBILITY IDEOGRAPH-2F82A
+2F82B CJK COMPATIBILITY IDEOGRAPH-2F82B
+2F82C CJK COMPATIBILITY IDEOGRAPH-2F82C
+2F82D CJK COMPATIBILITY IDEOGRAPH-2F82D
+2F82E CJK COMPATIBILITY IDEOGRAPH-2F82E
+2F82F CJK COMPATIBILITY IDEOGRAPH-2F82F
+2F830 CJK COMPATIBILITY IDEOGRAPH-2F830
+2F831 CJK COMPATIBILITY IDEOGRAPH-2F831
+2F832 CJK COMPATIBILITY IDEOGRAPH-2F832
+2F833 CJK COMPATIBILITY IDEOGRAPH-2F833
+2F834 CJK COMPATIBILITY IDEOGRAPH-2F834
+2F835 CJK COMPATIBILITY IDEOGRAPH-2F835
+2F836 CJK COMPATIBILITY IDEOGRAPH-2F836
+2F837 CJK COMPATIBILITY IDEOGRAPH-2F837
+2F838 CJK COMPATIBILITY IDEOGRAPH-2F838
+2F839 CJK COMPATIBILITY IDEOGRAPH-2F839
+2F83A CJK COMPATIBILITY IDEOGRAPH-2F83A
+2F83B CJK COMPATIBILITY IDEOGRAPH-2F83B
+2F83C CJK COMPATIBILITY IDEOGRAPH-2F83C
+2F83D CJK COMPATIBILITY IDEOGRAPH-2F83D
+2F83E CJK COMPATIBILITY IDEOGRAPH-2F83E
+2F83F CJK COMPATIBILITY IDEOGRAPH-2F83F
+2F840 CJK COMPATIBILITY IDEOGRAPH-2F840
+2F841 CJK COMPATIBILITY IDEOGRAPH-2F841
+2F842 CJK COMPATIBILITY IDEOGRAPH-2F842
+2F843 CJK COMPATIBILITY IDEOGRAPH-2F843
+2F844 CJK COMPATIBILITY IDEOGRAPH-2F844
+2F845 CJK COMPATIBILITY IDEOGRAPH-2F845
+2F846 CJK COMPATIBILITY IDEOGRAPH-2F846
+2F847 CJK COMPATIBILITY IDEOGRAPH-2F847
+2F848 CJK COMPATIBILITY IDEOGRAPH-2F848
+2F849 CJK COMPATIBILITY IDEOGRAPH-2F849
+2F84A CJK COMPATIBILITY IDEOGRAPH-2F84A
+2F84B CJK COMPATIBILITY IDEOGRAPH-2F84B
+2F84C CJK COMPATIBILITY IDEOGRAPH-2F84C
+2F84D CJK COMPATIBILITY IDEOGRAPH-2F84D
+2F84E CJK COMPATIBILITY IDEOGRAPH-2F84E
+2F84F CJK COMPATIBILITY IDEOGRAPH-2F84F
+2F850 CJK COMPATIBILITY IDEOGRAPH-2F850
+2F851 CJK COMPATIBILITY IDEOGRAPH-2F851
+2F852 CJK COMPATIBILITY IDEOGRAPH-2F852
+2F853 CJK COMPATIBILITY IDEOGRAPH-2F853
+2F854 CJK COMPATIBILITY IDEOGRAPH-2F854
+2F855 CJK COMPATIBILITY IDEOGRAPH-2F855
+2F856 CJK COMPATIBILITY IDEOGRAPH-2F856
+2F857 CJK COMPATIBILITY IDEOGRAPH-2F857
+2F858 CJK COMPATIBILITY IDEOGRAPH-2F858
+2F859 CJK COMPATIBILITY IDEOGRAPH-2F859
+2F85A CJK COMPATIBILITY IDEOGRAPH-2F85A
+2F85B CJK COMPATIBILITY IDEOGRAPH-2F85B
+2F85C CJK COMPATIBILITY IDEOGRAPH-2F85C
+2F85D CJK COMPATIBILITY IDEOGRAPH-2F85D
+2F85E CJK COMPATIBILITY IDEOGRAPH-2F85E
+2F85F CJK COMPATIBILITY IDEOGRAPH-2F85F
+2F860 CJK COMPATIBILITY IDEOGRAPH-2F860
+2F861 CJK COMPATIBILITY IDEOGRAPH-2F861
+2F862 CJK COMPATIBILITY IDEOGRAPH-2F862
+2F863 CJK COMPATIBILITY IDEOGRAPH-2F863
+2F864 CJK COMPATIBILITY IDEOGRAPH-2F864
+2F865 CJK COMPATIBILITY IDEOGRAPH-2F865
+2F866 CJK COMPATIBILITY IDEOGRAPH-2F866
+2F867 CJK COMPATIBILITY IDEOGRAPH-2F867
+2F868 CJK COMPATIBILITY IDEOGRAPH-2F868
+2F869 CJK COMPATIBILITY IDEOGRAPH-2F869
+2F86A CJK COMPATIBILITY IDEOGRAPH-2F86A
+2F86B CJK COMPATIBILITY IDEOGRAPH-2F86B
+2F86C CJK COMPATIBILITY IDEOGRAPH-2F86C
+2F86D CJK COMPATIBILITY IDEOGRAPH-2F86D
+2F86E CJK COMPATIBILITY IDEOGRAPH-2F86E
+2F86F CJK COMPATIBILITY IDEOGRAPH-2F86F
+2F870 CJK COMPATIBILITY IDEOGRAPH-2F870
+2F871 CJK COMPATIBILITY IDEOGRAPH-2F871
+2F872 CJK COMPATIBILITY IDEOGRAPH-2F872
+2F873 CJK COMPATIBILITY IDEOGRAPH-2F873
+2F874 CJK COMPATIBILITY IDEOGRAPH-2F874
+2F875 CJK COMPATIBILITY IDEOGRAPH-2F875
+2F876 CJK COMPATIBILITY IDEOGRAPH-2F876
+2F877 CJK COMPATIBILITY IDEOGRAPH-2F877
+2F878 CJK COMPATIBILITY IDEOGRAPH-2F878
+2F879 CJK COMPATIBILITY IDEOGRAPH-2F879
+2F87A CJK COMPATIBILITY IDEOGRAPH-2F87A
+2F87B CJK COMPATIBILITY IDEOGRAPH-2F87B
+2F87C CJK COMPATIBILITY IDEOGRAPH-2F87C
+2F87D CJK COMPATIBILITY IDEOGRAPH-2F87D
+2F87E CJK COMPATIBILITY IDEOGRAPH-2F87E
+2F87F CJK COMPATIBILITY IDEOGRAPH-2F87F
+2F880 CJK COMPATIBILITY IDEOGRAPH-2F880
+2F881 CJK COMPATIBILITY IDEOGRAPH-2F881
+2F882 CJK COMPATIBILITY IDEOGRAPH-2F882
+2F883 CJK COMPATIBILITY IDEOGRAPH-2F883
+2F884 CJK COMPATIBILITY IDEOGRAPH-2F884
+2F885 CJK COMPATIBILITY IDEOGRAPH-2F885
+2F886 CJK COMPATIBILITY IDEOGRAPH-2F886
+2F887 CJK COMPATIBILITY IDEOGRAPH-2F887
+2F888 CJK COMPATIBILITY IDEOGRAPH-2F888
+2F889 CJK COMPATIBILITY IDEOGRAPH-2F889
+2F88A CJK COMPATIBILITY IDEOGRAPH-2F88A
+2F88B CJK COMPATIBILITY IDEOGRAPH-2F88B
+2F88C CJK COMPATIBILITY IDEOGRAPH-2F88C
+2F88D CJK COMPATIBILITY IDEOGRAPH-2F88D
+2F88E CJK COMPATIBILITY IDEOGRAPH-2F88E
+2F88F CJK COMPATIBILITY IDEOGRAPH-2F88F
+2F890 CJK COMPATIBILITY IDEOGRAPH-2F890
+2F891 CJK COMPATIBILITY IDEOGRAPH-2F891
+2F892 CJK COMPATIBILITY IDEOGRAPH-2F892
+2F893 CJK COMPATIBILITY IDEOGRAPH-2F893
+2F894 CJK COMPATIBILITY IDEOGRAPH-2F894
+2F895 CJK COMPATIBILITY IDEOGRAPH-2F895
+2F896 CJK COMPATIBILITY IDEOGRAPH-2F896
+2F897 CJK COMPATIBILITY IDEOGRAPH-2F897
+2F898 CJK COMPATIBILITY IDEOGRAPH-2F898
+2F899 CJK COMPATIBILITY IDEOGRAPH-2F899
+2F89A CJK COMPATIBILITY IDEOGRAPH-2F89A
+2F89B CJK COMPATIBILITY IDEOGRAPH-2F89B
+2F89C CJK COMPATIBILITY IDEOGRAPH-2F89C
+2F89D CJK COMPATIBILITY IDEOGRAPH-2F89D
+2F89E CJK COMPATIBILITY IDEOGRAPH-2F89E
+2F89F CJK COMPATIBILITY IDEOGRAPH-2F89F
+2F8A0 CJK COMPATIBILITY IDEOGRAPH-2F8A0
+2F8A1 CJK COMPATIBILITY IDEOGRAPH-2F8A1
+2F8A2 CJK COMPATIBILITY IDEOGRAPH-2F8A2
+2F8A3 CJK COMPATIBILITY IDEOGRAPH-2F8A3
+2F8A4 CJK COMPATIBILITY IDEOGRAPH-2F8A4
+2F8A5 CJK COMPATIBILITY IDEOGRAPH-2F8A5
+2F8A6 CJK COMPATIBILITY IDEOGRAPH-2F8A6
+2F8A7 CJK COMPATIBILITY IDEOGRAPH-2F8A7
+2F8A8 CJK COMPATIBILITY IDEOGRAPH-2F8A8
+2F8A9 CJK COMPATIBILITY IDEOGRAPH-2F8A9
+2F8AA CJK COMPATIBILITY IDEOGRAPH-2F8AA
+2F8AB CJK COMPATIBILITY IDEOGRAPH-2F8AB
+2F8AC CJK COMPATIBILITY IDEOGRAPH-2F8AC
+2F8AD CJK COMPATIBILITY IDEOGRAPH-2F8AD
+2F8AE CJK COMPATIBILITY IDEOGRAPH-2F8AE
+2F8AF CJK COMPATIBILITY IDEOGRAPH-2F8AF
+2F8B0 CJK COMPATIBILITY IDEOGRAPH-2F8B0
+2F8B1 CJK COMPATIBILITY IDEOGRAPH-2F8B1
+2F8B2 CJK COMPATIBILITY IDEOGRAPH-2F8B2
+2F8B3 CJK COMPATIBILITY IDEOGRAPH-2F8B3
+2F8B4 CJK COMPATIBILITY IDEOGRAPH-2F8B4
+2F8B5 CJK COMPATIBILITY IDEOGRAPH-2F8B5
+2F8B6 CJK COMPATIBILITY IDEOGRAPH-2F8B6
+2F8B7 CJK COMPATIBILITY IDEOGRAPH-2F8B7
+2F8B8 CJK COMPATIBILITY IDEOGRAPH-2F8B8
+2F8B9 CJK COMPATIBILITY IDEOGRAPH-2F8B9
+2F8BA CJK COMPATIBILITY IDEOGRAPH-2F8BA
+2F8BB CJK COMPATIBILITY IDEOGRAPH-2F8BB
+2F8BC CJK COMPATIBILITY IDEOGRAPH-2F8BC
+2F8BD CJK COMPATIBILITY IDEOGRAPH-2F8BD
+2F8BE CJK COMPATIBILITY IDEOGRAPH-2F8BE
+2F8BF CJK COMPATIBILITY IDEOGRAPH-2F8BF
+2F8C0 CJK COMPATIBILITY IDEOGRAPH-2F8C0
+2F8C1 CJK COMPATIBILITY IDEOGRAPH-2F8C1
+2F8C2 CJK COMPATIBILITY IDEOGRAPH-2F8C2
+2F8C3 CJK COMPATIBILITY IDEOGRAPH-2F8C3
+2F8C4 CJK COMPATIBILITY IDEOGRAPH-2F8C4
+2F8C5 CJK COMPATIBILITY IDEOGRAPH-2F8C5
+2F8C6 CJK COMPATIBILITY IDEOGRAPH-2F8C6
+2F8C7 CJK COMPATIBILITY IDEOGRAPH-2F8C7
+2F8C8 CJK COMPATIBILITY IDEOGRAPH-2F8C8
+2F8C9 CJK COMPATIBILITY IDEOGRAPH-2F8C9
+2F8CA CJK COMPATIBILITY IDEOGRAPH-2F8CA
+2F8CB CJK COMPATIBILITY IDEOGRAPH-2F8CB
+2F8CC CJK COMPATIBILITY IDEOGRAPH-2F8CC
+2F8CD CJK COMPATIBILITY IDEOGRAPH-2F8CD
+2F8CE CJK COMPATIBILITY IDEOGRAPH-2F8CE
+2F8CF CJK COMPATIBILITY IDEOGRAPH-2F8CF
+2F8D0 CJK COMPATIBILITY IDEOGRAPH-2F8D0
+2F8D1 CJK COMPATIBILITY IDEOGRAPH-2F8D1
+2F8D2 CJK COMPATIBILITY IDEOGRAPH-2F8D2
+2F8D3 CJK COMPATIBILITY IDEOGRAPH-2F8D3
+2F8D4 CJK COMPATIBILITY IDEOGRAPH-2F8D4
+2F8D5 CJK COMPATIBILITY IDEOGRAPH-2F8D5
+2F8D6 CJK COMPATIBILITY IDEOGRAPH-2F8D6
+2F8D7 CJK COMPATIBILITY IDEOGRAPH-2F8D7
+2F8D8 CJK COMPATIBILITY IDEOGRAPH-2F8D8
+2F8D9 CJK COMPATIBILITY IDEOGRAPH-2F8D9
+2F8DA CJK COMPATIBILITY IDEOGRAPH-2F8DA
+2F8DB CJK COMPATIBILITY IDEOGRAPH-2F8DB
+2F8DC CJK COMPATIBILITY IDEOGRAPH-2F8DC
+2F8DD CJK COMPATIBILITY IDEOGRAPH-2F8DD
+2F8DE CJK COMPATIBILITY IDEOGRAPH-2F8DE
+2F8DF CJK COMPATIBILITY IDEOGRAPH-2F8DF
+2F8E0 CJK COMPATIBILITY IDEOGRAPH-2F8E0
+2F8E1 CJK COMPATIBILITY IDEOGRAPH-2F8E1
+2F8E2 CJK COMPATIBILITY IDEOGRAPH-2F8E2
+2F8E3 CJK COMPATIBILITY IDEOGRAPH-2F8E3
+2F8E4 CJK COMPATIBILITY IDEOGRAPH-2F8E4
+2F8E5 CJK COMPATIBILITY IDEOGRAPH-2F8E5
+2F8E6 CJK COMPATIBILITY IDEOGRAPH-2F8E6
+2F8E7 CJK COMPATIBILITY IDEOGRAPH-2F8E7
+2F8E8 CJK COMPATIBILITY IDEOGRAPH-2F8E8
+2F8E9 CJK COMPATIBILITY IDEOGRAPH-2F8E9
+2F8EA CJK COMPATIBILITY IDEOGRAPH-2F8EA
+2F8EB CJK COMPATIBILITY IDEOGRAPH-2F8EB
+2F8EC CJK COMPATIBILITY IDEOGRAPH-2F8EC
+2F8ED CJK COMPATIBILITY IDEOGRAPH-2F8ED
+2F8EE CJK COMPATIBILITY IDEOGRAPH-2F8EE
+2F8EF CJK COMPATIBILITY IDEOGRAPH-2F8EF
+2F8F0 CJK COMPATIBILITY IDEOGRAPH-2F8F0
+2F8F1 CJK COMPATIBILITY IDEOGRAPH-2F8F1
+2F8F2 CJK COMPATIBILITY IDEOGRAPH-2F8F2
+2F8F3 CJK COMPATIBILITY IDEOGRAPH-2F8F3
+2F8F4 CJK COMPATIBILITY IDEOGRAPH-2F8F4
+2F8F5 CJK COMPATIBILITY IDEOGRAPH-2F8F5
+2F8F6 CJK COMPATIBILITY IDEOGRAPH-2F8F6
+2F8F7 CJK COMPATIBILITY IDEOGRAPH-2F8F7
+2F8F8 CJK COMPATIBILITY IDEOGRAPH-2F8F8
+2F8F9 CJK COMPATIBILITY IDEOGRAPH-2F8F9
+2F8FA CJK COMPATIBILITY IDEOGRAPH-2F8FA
+2F8FB CJK COMPATIBILITY IDEOGRAPH-2F8FB
+2F8FC CJK COMPATIBILITY IDEOGRAPH-2F8FC
+2F8FD CJK COMPATIBILITY IDEOGRAPH-2F8FD
+2F8FE CJK COMPATIBILITY IDEOGRAPH-2F8FE
+2F8FF CJK COMPATIBILITY IDEOGRAPH-2F8FF
+2F900 CJK COMPATIBILITY IDEOGRAPH-2F900
+2F901 CJK COMPATIBILITY IDEOGRAPH-2F901
+2F902 CJK COMPATIBILITY IDEOGRAPH-2F902
+2F903 CJK COMPATIBILITY IDEOGRAPH-2F903
+2F904 CJK COMPATIBILITY IDEOGRAPH-2F904
+2F905 CJK COMPATIBILITY IDEOGRAPH-2F905
+2F906 CJK COMPATIBILITY IDEOGRAPH-2F906
+2F907 CJK COMPATIBILITY IDEOGRAPH-2F907
+2F908 CJK COMPATIBILITY IDEOGRAPH-2F908
+2F909 CJK COMPATIBILITY IDEOGRAPH-2F909
+2F90A CJK COMPATIBILITY IDEOGRAPH-2F90A
+2F90B CJK COMPATIBILITY IDEOGRAPH-2F90B
+2F90C CJK COMPATIBILITY IDEOGRAPH-2F90C
+2F90D CJK COMPATIBILITY IDEOGRAPH-2F90D
+2F90E CJK COMPATIBILITY IDEOGRAPH-2F90E
+2F90F CJK COMPATIBILITY IDEOGRAPH-2F90F
+2F910 CJK COMPATIBILITY IDEOGRAPH-2F910
+2F911 CJK COMPATIBILITY IDEOGRAPH-2F911
+2F912 CJK COMPATIBILITY IDEOGRAPH-2F912
+2F913 CJK COMPATIBILITY IDEOGRAPH-2F913
+2F914 CJK COMPATIBILITY IDEOGRAPH-2F914
+2F915 CJK COMPATIBILITY IDEOGRAPH-2F915
+2F916 CJK COMPATIBILITY IDEOGRAPH-2F916
+2F917 CJK COMPATIBILITY IDEOGRAPH-2F917
+2F918 CJK COMPATIBILITY IDEOGRAPH-2F918
+2F919 CJK COMPATIBILITY IDEOGRAPH-2F919
+2F91A CJK COMPATIBILITY IDEOGRAPH-2F91A
+2F91B CJK COMPATIBILITY IDEOGRAPH-2F91B
+2F91C CJK COMPATIBILITY IDEOGRAPH-2F91C
+2F91D CJK COMPATIBILITY IDEOGRAPH-2F91D
+2F91E CJK COMPATIBILITY IDEOGRAPH-2F91E
+2F91F CJK COMPATIBILITY IDEOGRAPH-2F91F
+2F920 CJK COMPATIBILITY IDEOGRAPH-2F920
+2F921 CJK COMPATIBILITY IDEOGRAPH-2F921
+2F922 CJK COMPATIBILITY IDEOGRAPH-2F922
+2F923 CJK COMPATIBILITY IDEOGRAPH-2F923
+2F924 CJK COMPATIBILITY IDEOGRAPH-2F924
+2F925 CJK COMPATIBILITY IDEOGRAPH-2F925
+2F926 CJK COMPATIBILITY IDEOGRAPH-2F926
+2F927 CJK COMPATIBILITY IDEOGRAPH-2F927
+2F928 CJK COMPATIBILITY IDEOGRAPH-2F928
+2F929 CJK COMPATIBILITY IDEOGRAPH-2F929
+2F92A CJK COMPATIBILITY IDEOGRAPH-2F92A
+2F92B CJK COMPATIBILITY IDEOGRAPH-2F92B
+2F92C CJK COMPATIBILITY IDEOGRAPH-2F92C
+2F92D CJK COMPATIBILITY IDEOGRAPH-2F92D
+2F92E CJK COMPATIBILITY IDEOGRAPH-2F92E
+2F92F CJK COMPATIBILITY IDEOGRAPH-2F92F
+2F930 CJK COMPATIBILITY IDEOGRAPH-2F930
+2F931 CJK COMPATIBILITY IDEOGRAPH-2F931
+2F932 CJK COMPATIBILITY IDEOGRAPH-2F932
+2F933 CJK COMPATIBILITY IDEOGRAPH-2F933
+2F934 CJK COMPATIBILITY IDEOGRAPH-2F934
+2F935 CJK COMPATIBILITY IDEOGRAPH-2F935
+2F936 CJK COMPATIBILITY IDEOGRAPH-2F936
+2F937 CJK COMPATIBILITY IDEOGRAPH-2F937
+2F938 CJK COMPATIBILITY IDEOGRAPH-2F938
+2F939 CJK COMPATIBILITY IDEOGRAPH-2F939
+2F93A CJK COMPATIBILITY IDEOGRAPH-2F93A
+2F93B CJK COMPATIBILITY IDEOGRAPH-2F93B
+2F93C CJK COMPATIBILITY IDEOGRAPH-2F93C
+2F93D CJK COMPATIBILITY IDEOGRAPH-2F93D
+2F93E CJK COMPATIBILITY IDEOGRAPH-2F93E
+2F93F CJK COMPATIBILITY IDEOGRAPH-2F93F
+2F940 CJK COMPATIBILITY IDEOGRAPH-2F940
+2F941 CJK COMPATIBILITY IDEOGRAPH-2F941
+2F942 CJK COMPATIBILITY IDEOGRAPH-2F942
+2F943 CJK COMPATIBILITY IDEOGRAPH-2F943
+2F944 CJK COMPATIBILITY IDEOGRAPH-2F944
+2F945 CJK COMPATIBILITY IDEOGRAPH-2F945
+2F946 CJK COMPATIBILITY IDEOGRAPH-2F946
+2F947 CJK COMPATIBILITY IDEOGRAPH-2F947
+2F948 CJK COMPATIBILITY IDEOGRAPH-2F948
+2F949 CJK COMPATIBILITY IDEOGRAPH-2F949
+2F94A CJK COMPATIBILITY IDEOGRAPH-2F94A
+2F94B CJK COMPATIBILITY IDEOGRAPH-2F94B
+2F94C CJK COMPATIBILITY IDEOGRAPH-2F94C
+2F94D CJK COMPATIBILITY IDEOGRAPH-2F94D
+2F94E CJK COMPATIBILITY IDEOGRAPH-2F94E
+2F94F CJK COMPATIBILITY IDEOGRAPH-2F94F
+2F950 CJK COMPATIBILITY IDEOGRAPH-2F950
+2F951 CJK COMPATIBILITY IDEOGRAPH-2F951
+2F952 CJK COMPATIBILITY IDEOGRAPH-2F952
+2F953 CJK COMPATIBILITY IDEOGRAPH-2F953
+2F954 CJK COMPATIBILITY IDEOGRAPH-2F954
+2F955 CJK COMPATIBILITY IDEOGRAPH-2F955
+2F956 CJK COMPATIBILITY IDEOGRAPH-2F956
+2F957 CJK COMPATIBILITY IDEOGRAPH-2F957
+2F958 CJK COMPATIBILITY IDEOGRAPH-2F958
+2F959 CJK COMPATIBILITY IDEOGRAPH-2F959
+2F95A CJK COMPATIBILITY IDEOGRAPH-2F95A
+2F95B CJK COMPATIBILITY IDEOGRAPH-2F95B
+2F95C CJK COMPATIBILITY IDEOGRAPH-2F95C
+2F95D CJK COMPATIBILITY IDEOGRAPH-2F95D
+2F95E CJK COMPATIBILITY IDEOGRAPH-2F95E
+2F95F CJK COMPATIBILITY IDEOGRAPH-2F95F
+2F960 CJK COMPATIBILITY IDEOGRAPH-2F960
+2F961 CJK COMPATIBILITY IDEOGRAPH-2F961
+2F962 CJK COMPATIBILITY IDEOGRAPH-2F962
+2F963 CJK COMPATIBILITY IDEOGRAPH-2F963
+2F964 CJK COMPATIBILITY IDEOGRAPH-2F964
+2F965 CJK COMPATIBILITY IDEOGRAPH-2F965
+2F966 CJK COMPATIBILITY IDEOGRAPH-2F966
+2F967 CJK COMPATIBILITY IDEOGRAPH-2F967
+2F968 CJK COMPATIBILITY IDEOGRAPH-2F968
+2F969 CJK COMPATIBILITY IDEOGRAPH-2F969
+2F96A CJK COMPATIBILITY IDEOGRAPH-2F96A
+2F96B CJK COMPATIBILITY IDEOGRAPH-2F96B
+2F96C CJK COMPATIBILITY IDEOGRAPH-2F96C
+2F96D CJK COMPATIBILITY IDEOGRAPH-2F96D
+2F96E CJK COMPATIBILITY IDEOGRAPH-2F96E
+2F96F CJK COMPATIBILITY IDEOGRAPH-2F96F
+2F970 CJK COMPATIBILITY IDEOGRAPH-2F970
+2F971 CJK COMPATIBILITY IDEOGRAPH-2F971
+2F972 CJK COMPATIBILITY IDEOGRAPH-2F972
+2F973 CJK COMPATIBILITY IDEOGRAPH-2F973
+2F974 CJK COMPATIBILITY IDEOGRAPH-2F974
+2F975 CJK COMPATIBILITY IDEOGRAPH-2F975
+2F976 CJK COMPATIBILITY IDEOGRAPH-2F976
+2F977 CJK COMPATIBILITY IDEOGRAPH-2F977
+2F978 CJK COMPATIBILITY IDEOGRAPH-2F978
+2F979 CJK COMPATIBILITY IDEOGRAPH-2F979
+2F97A CJK COMPATIBILITY IDEOGRAPH-2F97A
+2F97B CJK COMPATIBILITY IDEOGRAPH-2F97B
+2F97C CJK COMPATIBILITY IDEOGRAPH-2F97C
+2F97D CJK COMPATIBILITY IDEOGRAPH-2F97D
+2F97E CJK COMPATIBILITY IDEOGRAPH-2F97E
+2F97F CJK COMPATIBILITY IDEOGRAPH-2F97F
+2F980 CJK COMPATIBILITY IDEOGRAPH-2F980
+2F981 CJK COMPATIBILITY IDEOGRAPH-2F981
+2F982 CJK COMPATIBILITY IDEOGRAPH-2F982
+2F983 CJK COMPATIBILITY IDEOGRAPH-2F983
+2F984 CJK COMPATIBILITY IDEOGRAPH-2F984
+2F985 CJK COMPATIBILITY IDEOGRAPH-2F985
+2F986 CJK COMPATIBILITY IDEOGRAPH-2F986
+2F987 CJK COMPATIBILITY IDEOGRAPH-2F987
+2F988 CJK COMPATIBILITY IDEOGRAPH-2F988
+2F989 CJK COMPATIBILITY IDEOGRAPH-2F989
+2F98A CJK COMPATIBILITY IDEOGRAPH-2F98A
+2F98B CJK COMPATIBILITY IDEOGRAPH-2F98B
+2F98C CJK COMPATIBILITY IDEOGRAPH-2F98C
+2F98D CJK COMPATIBILITY IDEOGRAPH-2F98D
+2F98E CJK COMPATIBILITY IDEOGRAPH-2F98E
+2F98F CJK COMPATIBILITY IDEOGRAPH-2F98F
+2F990 CJK COMPATIBILITY IDEOGRAPH-2F990
+2F991 CJK COMPATIBILITY IDEOGRAPH-2F991
+2F992 CJK COMPATIBILITY IDEOGRAPH-2F992
+2F993 CJK COMPATIBILITY IDEOGRAPH-2F993
+2F994 CJK COMPATIBILITY IDEOGRAPH-2F994
+2F995 CJK COMPATIBILITY IDEOGRAPH-2F995
+2F996 CJK COMPATIBILITY IDEOGRAPH-2F996
+2F997 CJK COMPATIBILITY IDEOGRAPH-2F997
+2F998 CJK COMPATIBILITY IDEOGRAPH-2F998
+2F999 CJK COMPATIBILITY IDEOGRAPH-2F999
+2F99A CJK COMPATIBILITY IDEOGRAPH-2F99A
+2F99B CJK COMPATIBILITY IDEOGRAPH-2F99B
+2F99C CJK COMPATIBILITY IDEOGRAPH-2F99C
+2F99D CJK COMPATIBILITY IDEOGRAPH-2F99D
+2F99E CJK COMPATIBILITY IDEOGRAPH-2F99E
+2F99F CJK COMPATIBILITY IDEOGRAPH-2F99F
+2F9A0 CJK COMPATIBILITY IDEOGRAPH-2F9A0
+2F9A1 CJK COMPATIBILITY IDEOGRAPH-2F9A1
+2F9A2 CJK COMPATIBILITY IDEOGRAPH-2F9A2
+2F9A3 CJK COMPATIBILITY IDEOGRAPH-2F9A3
+2F9A4 CJK COMPATIBILITY IDEOGRAPH-2F9A4
+2F9A5 CJK COMPATIBILITY IDEOGRAPH-2F9A5
+2F9A6 CJK COMPATIBILITY IDEOGRAPH-2F9A6
+2F9A7 CJK COMPATIBILITY IDEOGRAPH-2F9A7
+2F9A8 CJK COMPATIBILITY IDEOGRAPH-2F9A8
+2F9A9 CJK COMPATIBILITY IDEOGRAPH-2F9A9
+2F9AA CJK COMPATIBILITY IDEOGRAPH-2F9AA
+2F9AB CJK COMPATIBILITY IDEOGRAPH-2F9AB
+2F9AC CJK COMPATIBILITY IDEOGRAPH-2F9AC
+2F9AD CJK COMPATIBILITY IDEOGRAPH-2F9AD
+2F9AE CJK COMPATIBILITY IDEOGRAPH-2F9AE
+2F9AF CJK COMPATIBILITY IDEOGRAPH-2F9AF
+2F9B0 CJK COMPATIBILITY IDEOGRAPH-2F9B0
+2F9B1 CJK COMPATIBILITY IDEOGRAPH-2F9B1
+2F9B2 CJK COMPATIBILITY IDEOGRAPH-2F9B2
+2F9B3 CJK COMPATIBILITY IDEOGRAPH-2F9B3
+2F9B4 CJK COMPATIBILITY IDEOGRAPH-2F9B4
+2F9B5 CJK COMPATIBILITY IDEOGRAPH-2F9B5
+2F9B6 CJK COMPATIBILITY IDEOGRAPH-2F9B6
+2F9B7 CJK COMPATIBILITY IDEOGRAPH-2F9B7
+2F9B8 CJK COMPATIBILITY IDEOGRAPH-2F9B8
+2F9B9 CJK COMPATIBILITY IDEOGRAPH-2F9B9
+2F9BA CJK COMPATIBILITY IDEOGRAPH-2F9BA
+2F9BB CJK COMPATIBILITY IDEOGRAPH-2F9BB
+2F9BC CJK COMPATIBILITY IDEOGRAPH-2F9BC
+2F9BD CJK COMPATIBILITY IDEOGRAPH-2F9BD
+2F9BE CJK COMPATIBILITY IDEOGRAPH-2F9BE
+2F9BF CJK COMPATIBILITY IDEOGRAPH-2F9BF
+2F9C0 CJK COMPATIBILITY IDEOGRAPH-2F9C0
+2F9C1 CJK COMPATIBILITY IDEOGRAPH-2F9C1
+2F9C2 CJK COMPATIBILITY IDEOGRAPH-2F9C2
+2F9C3 CJK COMPATIBILITY IDEOGRAPH-2F9C3
+2F9C4 CJK COMPATIBILITY IDEOGRAPH-2F9C4
+2F9C5 CJK COMPATIBILITY IDEOGRAPH-2F9C5
+2F9C6 CJK COMPATIBILITY IDEOGRAPH-2F9C6
+2F9C7 CJK COMPATIBILITY IDEOGRAPH-2F9C7
+2F9C8 CJK COMPATIBILITY IDEOGRAPH-2F9C8
+2F9C9 CJK COMPATIBILITY IDEOGRAPH-2F9C9
+2F9CA CJK COMPATIBILITY IDEOGRAPH-2F9CA
+2F9CB CJK COMPATIBILITY IDEOGRAPH-2F9CB
+2F9CC CJK COMPATIBILITY IDEOGRAPH-2F9CC
+2F9CD CJK COMPATIBILITY IDEOGRAPH-2F9CD
+2F9CE CJK COMPATIBILITY IDEOGRAPH-2F9CE
+2F9CF CJK COMPATIBILITY IDEOGRAPH-2F9CF
+2F9D0 CJK COMPATIBILITY IDEOGRAPH-2F9D0
+2F9D1 CJK COMPATIBILITY IDEOGRAPH-2F9D1
+2F9D2 CJK COMPATIBILITY IDEOGRAPH-2F9D2
+2F9D3 CJK COMPATIBILITY IDEOGRAPH-2F9D3
+2F9D4 CJK COMPATIBILITY IDEOGRAPH-2F9D4
+2F9D5 CJK COMPATIBILITY IDEOGRAPH-2F9D5
+2F9D6 CJK COMPATIBILITY IDEOGRAPH-2F9D6
+2F9D7 CJK COMPATIBILITY IDEOGRAPH-2F9D7
+2F9D8 CJK COMPATIBILITY IDEOGRAPH-2F9D8
+2F9D9 CJK COMPATIBILITY IDEOGRAPH-2F9D9
+2F9DA CJK COMPATIBILITY IDEOGRAPH-2F9DA
+2F9DB CJK COMPATIBILITY IDEOGRAPH-2F9DB
+2F9DC CJK COMPATIBILITY IDEOGRAPH-2F9DC
+2F9DD CJK COMPATIBILITY IDEOGRAPH-2F9DD
+2F9DE CJK COMPATIBILITY IDEOGRAPH-2F9DE
+2F9DF CJK COMPATIBILITY IDEOGRAPH-2F9DF
+2F9E0 CJK COMPATIBILITY IDEOGRAPH-2F9E0
+2F9E1 CJK COMPATIBILITY IDEOGRAPH-2F9E1
+2F9E2 CJK COMPATIBILITY IDEOGRAPH-2F9E2
+2F9E3 CJK COMPATIBILITY IDEOGRAPH-2F9E3
+2F9E4 CJK COMPATIBILITY IDEOGRAPH-2F9E4
+2F9E5 CJK COMPATIBILITY IDEOGRAPH-2F9E5
+2F9E6 CJK COMPATIBILITY IDEOGRAPH-2F9E6
+2F9E7 CJK COMPATIBILITY IDEOGRAPH-2F9E7
+2F9E8 CJK COMPATIBILITY IDEOGRAPH-2F9E8
+2F9E9 CJK COMPATIBILITY IDEOGRAPH-2F9E9
+2F9EA CJK COMPATIBILITY IDEOGRAPH-2F9EA
+2F9EB CJK COMPATIBILITY IDEOGRAPH-2F9EB
+2F9EC CJK COMPATIBILITY IDEOGRAPH-2F9EC
+2F9ED CJK COMPATIBILITY IDEOGRAPH-2F9ED
+2F9EE CJK COMPATIBILITY IDEOGRAPH-2F9EE
+2F9EF CJK COMPATIBILITY IDEOGRAPH-2F9EF
+2F9F0 CJK COMPATIBILITY IDEOGRAPH-2F9F0
+2F9F1 CJK COMPATIBILITY IDEOGRAPH-2F9F1
+2F9F2 CJK COMPATIBILITY IDEOGRAPH-2F9F2
+2F9F3 CJK COMPATIBILITY IDEOGRAPH-2F9F3
+2F9F4 CJK COMPATIBILITY IDEOGRAPH-2F9F4
+2F9F5 CJK COMPATIBILITY IDEOGRAPH-2F9F5
+2F9F6 CJK COMPATIBILITY IDEOGRAPH-2F9F6
+2F9F7 CJK COMPATIBILITY IDEOGRAPH-2F9F7
+2F9F8 CJK COMPATIBILITY IDEOGRAPH-2F9F8
+2F9F9 CJK COMPATIBILITY IDEOGRAPH-2F9F9
+2F9FA CJK COMPATIBILITY IDEOGRAPH-2F9FA
+2F9FB CJK COMPATIBILITY IDEOGRAPH-2F9FB
+2F9FC CJK COMPATIBILITY IDEOGRAPH-2F9FC
+2F9FD CJK COMPATIBILITY IDEOGRAPH-2F9FD
+2F9FE CJK COMPATIBILITY IDEOGRAPH-2F9FE
+2F9FF CJK COMPATIBILITY IDEOGRAPH-2F9FF
+2FA00 CJK COMPATIBILITY IDEOGRAPH-2FA00
+2FA01 CJK COMPATIBILITY IDEOGRAPH-2FA01
+2FA02 CJK COMPATIBILITY IDEOGRAPH-2FA02
+2FA03 CJK COMPATIBILITY IDEOGRAPH-2FA03
+2FA04 CJK COMPATIBILITY IDEOGRAPH-2FA04
+2FA05 CJK COMPATIBILITY IDEOGRAPH-2FA05
+2FA06 CJK COMPATIBILITY IDEOGRAPH-2FA06
+2FA07 CJK COMPATIBILITY IDEOGRAPH-2FA07
+2FA08 CJK COMPATIBILITY IDEOGRAPH-2FA08
+2FA09 CJK COMPATIBILITY IDEOGRAPH-2FA09
+2FA0A CJK COMPATIBILITY IDEOGRAPH-2FA0A
+2FA0B CJK COMPATIBILITY IDEOGRAPH-2FA0B
+2FA0C CJK COMPATIBILITY IDEOGRAPH-2FA0C
+2FA0D CJK COMPATIBILITY IDEOGRAPH-2FA0D
+2FA0E CJK COMPATIBILITY IDEOGRAPH-2FA0E
+2FA0F CJK COMPATIBILITY IDEOGRAPH-2FA0F
+2FA10 CJK COMPATIBILITY IDEOGRAPH-2FA10
+2FA11 CJK COMPATIBILITY IDEOGRAPH-2FA11
+2FA12 CJK COMPATIBILITY IDEOGRAPH-2FA12
+2FA13 CJK COMPATIBILITY IDEOGRAPH-2FA13
+2FA14 CJK COMPATIBILITY IDEOGRAPH-2FA14
+2FA15 CJK COMPATIBILITY IDEOGRAPH-2FA15
+2FA16 CJK COMPATIBILITY IDEOGRAPH-2FA16
+2FA17 CJK COMPATIBILITY IDEOGRAPH-2FA17
+2FA18 CJK COMPATIBILITY IDEOGRAPH-2FA18
+2FA19 CJK COMPATIBILITY IDEOGRAPH-2FA19
+2FA1A CJK COMPATIBILITY IDEOGRAPH-2FA1A
+2FA1B CJK COMPATIBILITY IDEOGRAPH-2FA1B
+2FA1C CJK COMPATIBILITY IDEOGRAPH-2FA1C
+2FA1D CJK COMPATIBILITY IDEOGRAPH-2FA1D
+E0001 LANGUAGE TAG
+E0020 TAG SPACE
+E0021 TAG EXCLAMATION MARK
+E0022 TAG QUOTATION MARK
+E0023 TAG NUMBER SIGN
+E0024 TAG DOLLAR SIGN
+E0025 TAG PERCENT SIGN
+E0026 TAG AMPERSAND
+E0027 TAG APOSTROPHE
+E0028 TAG LEFT PARENTHESIS
+E0029 TAG RIGHT PARENTHESIS
+E002A TAG ASTERISK
+E002B TAG PLUS SIGN
+E002C TAG COMMA
+E002D TAG HYPHEN-MINUS
+E002E TAG FULL STOP
+E002F TAG SOLIDUS
+E0030 TAG DIGIT ZERO
+E0031 TAG DIGIT ONE
+E0032 TAG DIGIT TWO
+E0033 TAG DIGIT THREE
+E0034 TAG DIGIT FOUR
+E0035 TAG DIGIT FIVE
+E0036 TAG DIGIT SIX
+E0037 TAG DIGIT SEVEN
+E0038 TAG DIGIT EIGHT
+E0039 TAG DIGIT NINE
+E003A TAG COLON
+E003B TAG SEMICOLON
+E003C TAG LESS-THAN SIGN
+E003D TAG EQUALS SIGN
+E003E TAG GREATER-THAN SIGN
+E003F TAG QUESTION MARK
+E0040 TAG COMMERCIAL AT
+E0041 TAG LATIN CAPITAL LETTER A
+E0042 TAG LATIN CAPITAL LETTER B
+E0043 TAG LATIN CAPITAL LETTER C
+E0044 TAG LATIN CAPITAL LETTER D
+E0045 TAG LATIN CAPITAL LETTER E
+E0046 TAG LATIN CAPITAL LETTER F
+E0047 TAG LATIN CAPITAL LETTER G
+E0048 TAG LATIN CAPITAL LETTER H
+E0049 TAG LATIN CAPITAL LETTER I
+E004A TAG LATIN CAPITAL LETTER J
+E004B TAG LATIN CAPITAL LETTER K
+E004C TAG LATIN CAPITAL LETTER L
+E004D TAG LATIN CAPITAL LETTER M
+E004E TAG LATIN CAPITAL LETTER N
+E004F TAG LATIN CAPITAL LETTER O
+E0050 TAG LATIN CAPITAL LETTER P
+E0051 TAG LATIN CAPITAL LETTER Q
+E0052 TAG LATIN CAPITAL LETTER R
+E0053 TAG LATIN CAPITAL LETTER S
+E0054 TAG LATIN CAPITAL LETTER T
+E0055 TAG LATIN CAPITAL LETTER U
+E0056 TAG LATIN CAPITAL LETTER V
+E0057 TAG LATIN CAPITAL LETTER W
+E0058 TAG LATIN CAPITAL LETTER X
+E0059 TAG LATIN CAPITAL LETTER Y
+E005A TAG LATIN CAPITAL LETTER Z
+E005B TAG LEFT SQUARE BRACKET
+E005C TAG REVERSE SOLIDUS
+E005D TAG RIGHT SQUARE BRACKET
+E005E TAG CIRCUMFLEX ACCENT
+E005F TAG LOW LINE
+E0060 TAG GRAVE ACCENT
+E0061 TAG LATIN SMALL LETTER A
+E0062 TAG LATIN SMALL LETTER B
+E0063 TAG LATIN SMALL LETTER C
+E0064 TAG LATIN SMALL LETTER D
+E0065 TAG LATIN SMALL LETTER E
+E0066 TAG LATIN SMALL LETTER F
+E0067 TAG LATIN SMALL LETTER G
+E0068 TAG LATIN SMALL LETTER H
+E0069 TAG LATIN SMALL LETTER I
+E006A TAG LATIN SMALL LETTER J
+E006B TAG LATIN SMALL LETTER K
+E006C TAG LATIN SMALL LETTER L
+E006D TAG LATIN SMALL LETTER M
+E006E TAG LATIN SMALL LETTER N
+E006F TAG LATIN SMALL LETTER O
+E0070 TAG LATIN SMALL LETTER P
+E0071 TAG LATIN SMALL LETTER Q
+E0072 TAG LATIN SMALL LETTER R
+E0073 TAG LATIN SMALL LETTER S
+E0074 TAG LATIN SMALL LETTER T
+E0075 TAG LATIN SMALL LETTER U
+E0076 TAG LATIN SMALL LETTER V
+E0077 TAG LATIN SMALL LETTER W
+E0078 TAG LATIN SMALL LETTER X
+E0079 TAG LATIN SMALL LETTER Y
+E007A TAG LATIN SMALL LETTER Z
+E007B TAG LEFT CURLY BRACKET
+E007C TAG VERTICAL LINE
+E007D TAG RIGHT CURLY BRACKET
+E007E TAG TILDE
+E007F CANCEL TAG
+F0000 FFFFD Plane 15 Private Use
+100000 10FFFD Plane 16 Private Use
+END
diff --git a/Master/xemtex/perl/lib/unicore/Number.pl b/Master/xemtex/perl/lib/unicore/Number.pl
new file mode 100644
index 00000000000..9bc4fd4663d
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/Number.pl
@@ -0,0 +1,537 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+return <<'END';
+0030 0
+0031 1
+0032 2
+0033 3
+0034 4
+0035 5
+0036 6
+0037 7
+0038 8
+0039 9
+00B2 2
+00B3 3
+00B9 1
+00BC 1/4
+00BD 1/2
+00BE 3/4
+0660 0
+0661 1
+0662 2
+0663 3
+0664 4
+0665 5
+0666 6
+0667 7
+0668 8
+0669 9
+06F0 0
+06F1 1
+06F2 2
+06F3 3
+06F4 4
+06F5 5
+06F6 6
+06F7 7
+06F8 8
+06F9 9
+0966 0
+0967 1
+0968 2
+0969 3
+096A 4
+096B 5
+096C 6
+096D 7
+096E 8
+096F 9
+09E6 0
+09E7 1
+09E8 2
+09E9 3
+09EA 4
+09EB 5
+09EC 6
+09ED 7
+09EE 8
+09EF 9
+09F4 1
+09F5 2
+09F6 3
+09F7 4
+09F9 16
+0A66 0
+0A67 1
+0A68 2
+0A69 3
+0A6A 4
+0A6B 5
+0A6C 6
+0A6D 7
+0A6E 8
+0A6F 9
+0AE6 0
+0AE7 1
+0AE8 2
+0AE9 3
+0AEA 4
+0AEB 5
+0AEC 6
+0AED 7
+0AEE 8
+0AEF 9
+0B66 0
+0B67 1
+0B68 2
+0B69 3
+0B6A 4
+0B6B 5
+0B6C 6
+0B6D 7
+0B6E 8
+0B6F 9
+0BE7 1
+0BE8 2
+0BE9 3
+0BEA 4
+0BEB 5
+0BEC 6
+0BED 7
+0BEE 8
+0BEF 9
+0BF0 10
+0BF1 100
+0BF2 1000
+0C66 0
+0C67 1
+0C68 2
+0C69 3
+0C6A 4
+0C6B 5
+0C6C 6
+0C6D 7
+0C6E 8
+0C6F 9
+0CE6 0
+0CE7 1
+0CE8 2
+0CE9 3
+0CEA 4
+0CEB 5
+0CEC 6
+0CED 7
+0CEE 8
+0CEF 9
+0D66 0
+0D67 1
+0D68 2
+0D69 3
+0D6A 4
+0D6B 5
+0D6C 6
+0D6D 7
+0D6E 8
+0D6F 9
+0E50 0
+0E51 1
+0E52 2
+0E53 3
+0E54 4
+0E55 5
+0E56 6
+0E57 7
+0E58 8
+0E59 9
+0ED0 0
+0ED1 1
+0ED2 2
+0ED3 3
+0ED4 4
+0ED5 5
+0ED6 6
+0ED7 7
+0ED8 8
+0ED9 9
+0F20 0
+0F21 1
+0F22 2
+0F23 3
+0F24 4
+0F25 5
+0F26 6
+0F27 7
+0F28 8
+0F29 9
+0F2A 1/2
+0F2B 3/2
+0F2C 5/2
+0F2D 7/2
+0F2E 9/2
+0F2F 11/2
+0F30 13/2
+0F31 15/2
+0F32 17/2
+0F33 -1/2
+1040 0
+1041 1
+1042 2
+1043 3
+1044 4
+1045 5
+1046 6
+1047 7
+1048 8
+1049 9
+1369 1
+136A 2
+136B 3
+136C 4
+136D 5
+136E 6
+136F 7
+1370 8
+1371 9
+1372 10
+1373 20
+1374 30
+1375 40
+1376 50
+1377 60
+1378 70
+1379 80
+137A 90
+137B 100
+137C 10000
+16EE 17
+16EF 18
+16F0 19
+17E0 0
+17E1 1
+17E2 2
+17E3 3
+17E4 4
+17E5 5
+17E6 6
+17E7 7
+17E8 8
+17E9 9
+1810 0
+1811 1
+1812 2
+1813 3
+1814 4
+1815 5
+1816 6
+1817 7
+1818 8
+1819 9
+2070 0
+2074 4
+2075 5
+2076 6
+2077 7
+2078 8
+2079 9
+2080 0
+2081 1
+2082 2
+2083 3
+2084 4
+2085 5
+2086 6
+2087 7
+2088 8
+2089 9
+2153 1/3
+2154 2/3
+2155 1/5
+2156 2/5
+2157 3/5
+2158 4/5
+2159 1/6
+215A 5/6
+215B 1/8
+215C 3/8
+215D 5/8
+215E 7/8
+215F 2160 1
+2161 2
+2162 3
+2163 4
+2164 5
+2165 6
+2166 7
+2167 8
+2168 9
+2169 10
+216A 11
+216B 12
+216C 50
+216D 100
+216E 500
+216F 1000
+2170 1
+2171 2
+2172 3
+2173 4
+2174 5
+2175 6
+2176 7
+2177 8
+2178 9
+2179 10
+217A 11
+217B 12
+217C 50
+217D 100
+217E 500
+217F 2180 1000
+2181 5000
+2182 10000
+2460 1
+2461 2
+2462 3
+2463 4
+2464 5
+2465 6
+2466 7
+2467 8
+2468 9
+2469 10
+246A 11
+246B 12
+246C 13
+246D 14
+246E 15
+246F 16
+2470 17
+2471 18
+2472 19
+2473 20
+2474 1
+2475 2
+2476 3
+2477 4
+2478 5
+2479 6
+247A 7
+247B 8
+247C 9
+247D 10
+247E 11
+247F 12
+2480 13
+2481 14
+2482 15
+2483 16
+2484 17
+2485 18
+2486 19
+2487 20
+2488 1
+2489 2
+248A 3
+248B 4
+248C 5
+248D 6
+248E 7
+248F 8
+2490 9
+2491 10
+2492 11
+2493 12
+2494 13
+2495 14
+2496 15
+2497 16
+2498 17
+2499 18
+249A 19
+249B 20
+24EA 0
+24EB 11
+24EC 12
+24ED 13
+24EE 14
+24EF 15
+24F0 16
+24F1 17
+24F2 18
+24F3 19
+24F4 20
+24F5 1
+24F6 2
+24F7 3
+24F8 4
+24F9 5
+24FA 6
+24FB 7
+24FC 8
+24FD 9
+24FE 10
+2776 1
+2777 2
+2778 3
+2779 4
+277A 5
+277B 6
+277C 7
+277D 8
+277E 9
+277F 10
+2780 1
+2781 2
+2782 3
+2783 4
+2784 5
+2785 6
+2786 7
+2787 8
+2788 9
+2789 10
+278A 1
+278B 2
+278C 3
+278D 4
+278E 5
+278F 6
+2790 7
+2791 8
+2792 9
+2793 10
+3007 0
+3021 1
+3022 2
+3023 3
+3024 4
+3025 5
+3026 6
+3027 7
+3028 8
+3029 9
+3038 10
+3039 20
+303A 30
+3192 1
+3193 2
+3194 3
+3195 4
+3220 1
+3221 2
+3222 3
+3223 4
+3224 5
+3225 6
+3226 7
+3227 8
+3228 9
+3229 10
+3251 21
+3252 22
+3253 23
+3254 24
+3255 25
+3256 26
+3257 27
+3258 28
+3259 29
+325A 30
+325B 31
+325C 32
+325D 33
+325E 34
+325F 35
+3280 1
+3281 2
+3282 3
+3283 4
+3284 5
+3285 6
+3286 7
+3287 8
+3288 9
+3289 10
+32B1 36
+32B2 37
+32B3 38
+32B4 39
+32B5 40
+32B6 41
+32B7 42
+32B8 43
+32B9 44
+32BA 45
+32BB 46
+32BC 47
+32BD 48
+32BE 49
+32BF 50
+FF10 0
+FF11 1
+FF12 2
+FF13 3
+FF14 4
+FF15 5
+FF16 6
+FF17 7
+FF18 8
+FF19 9
+10320 1
+10321 5
+10322 10
+10323 50
+1D7CE 0
+1D7CF 1
+1D7D0 2
+1D7D1 3
+1D7D2 4
+1D7D3 5
+1D7D4 6
+1D7D5 7
+1D7D6 8
+1D7D7 9
+1D7D8 0
+1D7D9 1
+1D7DA 2
+1D7DB 3
+1D7DC 4
+1D7DD 5
+1D7DE 6
+1D7DF 7
+1D7E0 8
+1D7E1 9
+1D7E2 0
+1D7E3 1
+1D7E4 2
+1D7E5 3
+1D7E6 4
+1D7E7 5
+1D7E8 6
+1D7E9 7
+1D7EA 8
+1D7EB 9
+1D7EC 0
+1D7ED 1
+1D7EE 2
+1D7EF 3
+1D7F0 4
+1D7F1 5
+1D7F2 6
+1D7F3 7
+1D7F4 8
+1D7F5 9
+1D7F6 0
+1D7F7 1
+1D7F8 2
+1D7F9 3
+1D7FA 4
+1D7FB 5
+1D7FC 6
+1D7FD 7
+1D7FE 8
+1D7FF 9
+END
diff --git a/Master/xemtex/perl/lib/unicore/Scripts.pl b/Master/xemtex/perl/lib/unicore/Scripts.pl
new file mode 100644
index 00000000000..4c99f029cc3
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/Scripts.pl
@@ -0,0 +1,371 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+return <<'END';
+0041 005A LATIN
+0061 007A LATIN
+00AA LATIN
+00B5 GREEK
+00BA LATIN
+00C0 00D6 LATIN
+00D8 00F6 LATIN
+00F8 0220 LATIN
+0222 0233 LATIN
+0250 02AD LATIN
+02B0 02B8 LATIN
+02E0 02E4 LATIN
+0300 034F INHERITED
+0360 036F INHERITED
+037A GREEK
+0386 GREEK
+0388 038A GREEK
+038C GREEK
+038E 03A1 GREEK
+03A3 03CE GREEK
+03D0 03F5 GREEK
+0400 0481 CYRILLIC
+0483 0486 CYRILLIC
+0488 0489 INHERITED
+048A 04CE CYRILLIC
+04D0 04F5 CYRILLIC
+04F8 04F9 CYRILLIC
+0500 050F CYRILLIC
+0531 0556 ARMENIAN
+0559 ARMENIAN
+0561 0587 ARMENIAN
+0591 05A1 INHERITED
+05A3 05B9 INHERITED
+05BB 05BD INHERITED
+05BF INHERITED
+05C1 05C2 INHERITED
+05C4 INHERITED
+05D0 05EA HEBREW
+05F0 05F2 HEBREW
+0621 063A ARABIC
+0641 064A ARABIC
+064B 0655 INHERITED
+066E 066F ARABIC
+0670 INHERITED
+0671 06D3 ARABIC
+06D5 ARABIC
+06D6 06E4 INHERITED
+06E5 06E6 ARABIC
+06E7 06E8 INHERITED
+06EA 06ED INHERITED
+06FA 06FC ARABIC
+0710 072C SYRIAC
+0730 074A SYRIAC
+0780 07B1 THAANA
+0901 0903 DEVANAGARI
+0905 0939 DEVANAGARI
+093C 094D DEVANAGARI
+0950 0954 DEVANAGARI
+0958 0963 DEVANAGARI
+0966 096F DEVANAGARI
+0981 0983 BENGALI
+0985 098C BENGALI
+098F 0990 BENGALI
+0993 09A8 BENGALI
+09AA 09B0 BENGALI
+09B2 BENGALI
+09B6 09B9 BENGALI
+09BC BENGALI
+09BE 09C4 BENGALI
+09C7 09C8 BENGALI
+09CB 09CD BENGALI
+09D7 BENGALI
+09DC 09DD BENGALI
+09DF 09E3 BENGALI
+09E6 09F1 BENGALI
+0A02 GURMUKHI
+0A05 0A0A GURMUKHI
+0A0F 0A10 GURMUKHI
+0A13 0A28 GURMUKHI
+0A2A 0A30 GURMUKHI
+0A32 0A33 GURMUKHI
+0A35 0A36 GURMUKHI
+0A38 0A39 GURMUKHI
+0A3C GURMUKHI
+0A3E 0A42 GURMUKHI
+0A47 0A48 GURMUKHI
+0A4B 0A4D GURMUKHI
+0A59 0A5C GURMUKHI
+0A5E GURMUKHI
+0A66 0A74 GURMUKHI
+0A81 0A83 GUJARATI
+0A85 0A8B GUJARATI
+0A8D GUJARATI
+0A8F 0A91 GUJARATI
+0A93 0AA8 GUJARATI
+0AAA 0AB0 GUJARATI
+0AB2 0AB3 GUJARATI
+0AB5 0AB9 GUJARATI
+0ABC 0AC5 GUJARATI
+0AC7 0AC9 GUJARATI
+0ACB 0ACD GUJARATI
+0AD0 GUJARATI
+0AE0 GUJARATI
+0AE6 0AEF GUJARATI
+0B01 0B03 ORIYA
+0B05 0B0C ORIYA
+0B0F 0B10 ORIYA
+0B13 0B28 ORIYA
+0B2A 0B30 ORIYA
+0B32 0B33 ORIYA
+0B36 0B39 ORIYA
+0B3C 0B43 ORIYA
+0B47 0B48 ORIYA
+0B4B 0B4D ORIYA
+0B56 0B57 ORIYA
+0B5C 0B5D ORIYA
+0B5F 0B61 ORIYA
+0B66 0B6F ORIYA
+0B82 0B83 TAMIL
+0B85 0B8A TAMIL
+0B8E 0B90 TAMIL
+0B92 0B95 TAMIL
+0B99 0B9A TAMIL
+0B9C TAMIL
+0B9E 0B9F TAMIL
+0BA3 0BA4 TAMIL
+0BA8 0BAA TAMIL
+0BAE 0BB5 TAMIL
+0BB7 0BB9 TAMIL
+0BBE 0BC2 TAMIL
+0BC6 0BC8 TAMIL
+0BCA 0BCD TAMIL
+0BD7 TAMIL
+0BE7 0BF2 TAMIL
+0C01 0C03 TELUGU
+0C05 0C0C TELUGU
+0C0E 0C10 TELUGU
+0C12 0C28 TELUGU
+0C2A 0C33 TELUGU
+0C35 0C39 TELUGU
+0C3E 0C44 TELUGU
+0C46 0C48 TELUGU
+0C4A 0C4D TELUGU
+0C55 0C56 TELUGU
+0C60 0C61 TELUGU
+0C66 0C6F TELUGU
+0C82 0C83 KANNADA
+0C85 0C8C KANNADA
+0C8E 0C90 KANNADA
+0C92 0CA8 KANNADA
+0CAA 0CB3 KANNADA
+0CB5 0CB9 KANNADA
+0CBE 0CC4 KANNADA
+0CC6 0CC8 KANNADA
+0CCA 0CCD KANNADA
+0CD5 0CD6 KANNADA
+0CDE KANNADA
+0CE0 0CE1 KANNADA
+0CE6 0CEF KANNADA
+0D02 0D03 MALAYALAM
+0D05 0D0C MALAYALAM
+0D0E 0D10 MALAYALAM
+0D12 0D28 MALAYALAM
+0D2A 0D39 MALAYALAM
+0D3E 0D43 MALAYALAM
+0D46 0D48 MALAYALAM
+0D4A 0D4D MALAYALAM
+0D57 MALAYALAM
+0D60 0D61 MALAYALAM
+0D66 0D6F MALAYALAM
+0D82 0D83 SINHALA
+0D85 0D96 SINHALA
+0D9A 0DB1 SINHALA
+0DB3 0DBB SINHALA
+0DBD SINHALA
+0DC0 0DC6 SINHALA
+0DCA SINHALA
+0DCF 0DD4 SINHALA
+0DD6 SINHALA
+0DD8 0DDF SINHALA
+0DF2 0DF3 SINHALA
+0E01 0E3A THAI
+0E40 0E4E THAI
+0E50 0E59 THAI
+0E81 0E82 LAO
+0E84 LAO
+0E87 0E88 LAO
+0E8A LAO
+0E8D LAO
+0E94 0E97 LAO
+0E99 0E9F LAO
+0EA1 0EA3 LAO
+0EA5 LAO
+0EA7 LAO
+0EAA 0EAB LAO
+0EAD 0EB9 LAO
+0EBB 0EBD LAO
+0EC0 0EC4 LAO
+0EC6 LAO
+0EC8 0ECD LAO
+0ED0 0ED9 LAO
+0EDC 0EDD LAO
+0F00 TIBETAN
+0F18 0F19 TIBETAN
+0F20 0F33 TIBETAN
+0F35 TIBETAN
+0F37 TIBETAN
+0F39 TIBETAN
+0F40 0F47 TIBETAN
+0F49 0F6A TIBETAN
+0F71 0F84 TIBETAN
+0F86 0F8B TIBETAN
+0F90 0F97 TIBETAN
+0F99 0FBC TIBETAN
+0FC6 TIBETAN
+1000 1021 MYANMAR
+1023 1027 MYANMAR
+1029 102A MYANMAR
+102C 1032 MYANMAR
+1036 1039 MYANMAR
+1040 1049 MYANMAR
+1050 1059 MYANMAR
+10A0 10C5 GEORGIAN
+10D0 10F8 GEORGIAN
+1100 1159 HANGUL
+115F 11A2 HANGUL
+11A8 11F9 HANGUL
+1200 1206 ETHIOPIC
+1208 1246 ETHIOPIC
+1248 ETHIOPIC
+124A 124D ETHIOPIC
+1250 1256 ETHIOPIC
+1258 ETHIOPIC
+125A 125D ETHIOPIC
+1260 1286 ETHIOPIC
+1288 ETHIOPIC
+128A 128D ETHIOPIC
+1290 12AE ETHIOPIC
+12B0 ETHIOPIC
+12B2 12B5 ETHIOPIC
+12B8 12BE ETHIOPIC
+12C0 ETHIOPIC
+12C2 12C5 ETHIOPIC
+12C8 12CE ETHIOPIC
+12D0 12D6 ETHIOPIC
+12D8 12EE ETHIOPIC
+12F0 130E ETHIOPIC
+1310 ETHIOPIC
+1312 1315 ETHIOPIC
+1318 131E ETHIOPIC
+1320 1346 ETHIOPIC
+1348 135A ETHIOPIC
+1369 137C ETHIOPIC
+13A0 13F4 CHEROKEE
+1401 166C CANADIAN_ABORIGINAL
+166F 1676 CANADIAN_ABORIGINAL
+1681 169A OGHAM
+16A0 16EA RUNIC
+16EE 16F0 RUNIC
+1700 170C TAGALOG
+170E 1714 TAGALOG
+1720 1734 HANUNOO
+1740 1753 BUHID
+1760 176C TAGBANWA
+176E 1770 TAGBANWA
+1772 1773 TAGBANWA
+1780 17D3 KHMER
+17E0 17E9 KHMER
+180B 180D INHERITED
+1810 1819 MONGOLIAN
+1820 1877 MONGOLIAN
+1880 18A9 MONGOLIAN
+1E00 1E9B LATIN
+1EA0 1EF9 LATIN
+1F00 1F15 GREEK
+1F18 1F1D GREEK
+1F20 1F45 GREEK
+1F48 1F4D GREEK
+1F50 1F57 GREEK
+1F59 GREEK
+1F5B GREEK
+1F5D GREEK
+1F5F 1F7D GREEK
+1F80 1FB4 GREEK
+1FB6 1FBC GREEK
+1FBE GREEK
+1FC2 1FC4 GREEK
+1FC6 1FCC GREEK
+1FD0 1FD3 GREEK
+1FD6 1FDB GREEK
+1FE0 1FEC GREEK
+1FF2 1FF4 GREEK
+1FF6 1FFC GREEK
+2071 LATIN
+207F LATIN
+20D0 20EA INHERITED
+2126 GREEK
+212A 212B LATIN
+2E80 2E99 HAN
+2E9B 2EF3 HAN
+2F00 2FD5 HAN
+3005 HAN
+3007 HAN
+3021 3029 HAN
+302A 302F INHERITED
+3038 303B HAN
+3041 3096 HIRAGANA
+3099 309A INHERITED
+309D 309F HIRAGANA
+30A1 30FA KATAKANA
+30FD 30FF KATAKANA
+3105 312C BOPOMOFO
+3131 318E HANGUL
+31A0 31B7 BOPOMOFO
+31F0 31FF KATAKANA
+3400 4DB5 HAN
+4E00 9FA5 HAN
+A000 A48C YI
+A490 A4A1 YI
+A4A4 A4B3 YI
+A4B5 A4C0 YI
+A4C2 A4C4 YI
+A4C6 YI
+AC00 D7A3 HANGUL
+F900 FA2D HAN
+FA30 FA6A HAN
+FB00 FB06 LATIN
+FB13 FB17 ARMENIAN
+FB1D HEBREW
+FB1E INHERITED
+FB1F FB28 HEBREW
+FB2A FB36 HEBREW
+FB38 FB3C HEBREW
+FB3E HEBREW
+FB40 FB41 HEBREW
+FB43 FB44 HEBREW
+FB46 FB4F HEBREW
+FB50 FBB1 ARABIC
+FBD3 FD3D ARABIC
+FD50 FD8F ARABIC
+FD92 FDC7 ARABIC
+FDF0 FDFB ARABIC
+FE00 FE0F INHERITED
+FE20 FE23 INHERITED
+FE70 FE74 ARABIC
+FE76 FEFC ARABIC
+FF21 FF3A LATIN
+FF41 FF5A LATIN
+FF66 FF6F KATAKANA
+FF71 FF9D KATAKANA
+FFA0 FFBE HANGUL
+FFC2 FFC7 HANGUL
+FFCA FFCF HANGUL
+FFD2 FFD7 HANGUL
+FFDA FFDC HANGUL
+10300 1031E OLD_ITALIC
+10330 1034A GOTHIC
+10400 10425 DESERET
+10428 1044D DESERET
+1D167 1D169 INHERITED
+1D17B 1D182 INHERITED
+1D185 1D18B INHERITED
+1D1AA 1D1AD INHERITED
+20000 2A6D6 HAN
+2F800 2FA1D HAN
+END
diff --git a/Master/xemtex/perl/lib/unicore/To/Digit.pl b/Master/xemtex/perl/lib/unicore/To/Digit.pl
new file mode 100644
index 00000000000..e5c0ff429ea
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/To/Digit.pl
@@ -0,0 +1,274 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+return <<'END';
+0030 0
+0031 1
+0032 2
+0033 3
+0034 4
+0035 5
+0036 6
+0037 7
+0038 8
+0039 9
+00B2 2
+00B3 3
+00B9 1
+0660 0
+0661 1
+0662 2
+0663 3
+0664 4
+0665 5
+0666 6
+0667 7
+0668 8
+0669 9
+06F0 0
+06F1 1
+06F2 2
+06F3 3
+06F4 4
+06F5 5
+06F6 6
+06F7 7
+06F8 8
+06F9 9
+0966 0
+0967 1
+0968 2
+0969 3
+096A 4
+096B 5
+096C 6
+096D 7
+096E 8
+096F 9
+09E6 0
+09E7 1
+09E8 2
+09E9 3
+09EA 4
+09EB 5
+09EC 6
+09ED 7
+09EE 8
+09EF 9
+0A66 0
+0A67 1
+0A68 2
+0A69 3
+0A6A 4
+0A6B 5
+0A6C 6
+0A6D 7
+0A6E 8
+0A6F 9
+0AE6 0
+0AE7 1
+0AE8 2
+0AE9 3
+0AEA 4
+0AEB 5
+0AEC 6
+0AED 7
+0AEE 8
+0AEF 9
+0B66 0
+0B67 1
+0B68 2
+0B69 3
+0B6A 4
+0B6B 5
+0B6C 6
+0B6D 7
+0B6E 8
+0B6F 9
+0BE7 1
+0BE8 2
+0BE9 3
+0BEA 4
+0BEB 5
+0BEC 6
+0BED 7
+0BEE 8
+0BEF 9
+0C66 0
+0C67 1
+0C68 2
+0C69 3
+0C6A 4
+0C6B 5
+0C6C 6
+0C6D 7
+0C6E 8
+0C6F 9
+0CE6 0
+0CE7 1
+0CE8 2
+0CE9 3
+0CEA 4
+0CEB 5
+0CEC 6
+0CED 7
+0CEE 8
+0CEF 9
+0D66 0
+0D67 1
+0D68 2
+0D69 3
+0D6A 4
+0D6B 5
+0D6C 6
+0D6D 7
+0D6E 8
+0D6F 9
+0E50 0
+0E51 1
+0E52 2
+0E53 3
+0E54 4
+0E55 5
+0E56 6
+0E57 7
+0E58 8
+0E59 9
+0ED0 0
+0ED1 1
+0ED2 2
+0ED3 3
+0ED4 4
+0ED5 5
+0ED6 6
+0ED7 7
+0ED8 8
+0ED9 9
+0F20 0
+0F21 1
+0F22 2
+0F23 3
+0F24 4
+0F25 5
+0F26 6
+0F27 7
+0F28 8
+0F29 9
+1040 0
+1041 1
+1042 2
+1043 3
+1044 4
+1045 5
+1046 6
+1047 7
+1048 8
+1049 9
+1369 1
+136A 2
+136B 3
+136C 4
+136D 5
+136E 6
+136F 7
+1370 8
+1371 9
+17E0 0
+17E1 1
+17E2 2
+17E3 3
+17E4 4
+17E5 5
+17E6 6
+17E7 7
+17E8 8
+17E9 9
+1810 0
+1811 1
+1812 2
+1813 3
+1814 4
+1815 5
+1816 6
+1817 7
+1818 8
+1819 9
+2070 0
+2074 4
+2075 5
+2076 6
+2077 7
+2078 8
+2079 9
+2080 0
+2081 1
+2082 2
+2083 3
+2084 4
+2085 5
+2086 6
+2087 7
+2088 8
+2089 9
+FF10 0
+FF11 1
+FF12 2
+FF13 3
+FF14 4
+FF15 5
+FF16 6
+FF17 7
+FF18 8
+FF19 9
+1D7CE 0
+1D7CF 1
+1D7D0 2
+1D7D1 3
+1D7D2 4
+1D7D3 5
+1D7D4 6
+1D7D5 7
+1D7D6 8
+1D7D7 9
+1D7D8 0
+1D7D9 1
+1D7DA 2
+1D7DB 3
+1D7DC 4
+1D7DD 5
+1D7DE 6
+1D7DF 7
+1D7E0 8
+1D7E1 9
+1D7E2 0
+1D7E3 1
+1D7E4 2
+1D7E5 3
+1D7E6 4
+1D7E7 5
+1D7E8 6
+1D7E9 7
+1D7EA 8
+1D7EB 9
+1D7EC 0
+1D7ED 1
+1D7EE 2
+1D7EF 3
+1D7F0 4
+1D7F1 5
+1D7F2 6
+1D7F3 7
+1D7F4 8
+1D7F5 9
+1D7F6 0
+1D7F7 1
+1D7F8 2
+1D7F9 3
+1D7FA 4
+1D7FB 5
+1D7FC 6
+1D7FD 7
+1D7FE 8
+1D7FF 9
+END
diff --git a/Master/xemtex/perl/lib/unicore/To/Fold.pl b/Master/xemtex/perl/lib/unicore/To/Fold.pl
new file mode 100644
index 00000000000..2a355ad6a39
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/To/Fold.pl
@@ -0,0 +1,849 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+
+%utf8::ToSpecFold =
+(
+'00DF' => "\x{0073}\x{0073}",
+'0130' => "\x{0069}\x{0307}",
+'0149' => "\x{02BC}\x{006E}",
+'01F0' => "\x{006A}\x{030C}",
+'0390' => "\x{03B9}\x{0308}\x{0301}",
+'03B0' => "\x{03C5}\x{0308}\x{0301}",
+'0587' => "\x{0565}\x{0582}",
+'1E96' => "\x{0068}\x{0331}",
+'1E97' => "\x{0074}\x{0308}",
+'1E98' => "\x{0077}\x{030A}",
+'1E99' => "\x{0079}\x{030A}",
+'1E9A' => "\x{0061}\x{02BE}",
+'1F50' => "\x{03C5}\x{0313}",
+'1F52' => "\x{03C5}\x{0313}\x{0300}",
+'1F54' => "\x{03C5}\x{0313}\x{0301}",
+'1F56' => "\x{03C5}\x{0313}\x{0342}",
+'1F80' => "\x{1F00}\x{03B9}",
+'1F81' => "\x{1F01}\x{03B9}",
+'1F82' => "\x{1F02}\x{03B9}",
+'1F83' => "\x{1F03}\x{03B9}",
+'1F84' => "\x{1F04}\x{03B9}",
+'1F85' => "\x{1F05}\x{03B9}",
+'1F86' => "\x{1F06}\x{03B9}",
+'1F87' => "\x{1F07}\x{03B9}",
+'1F88' => "\x{1F00}\x{03B9}",
+'1F89' => "\x{1F01}\x{03B9}",
+'1F8A' => "\x{1F02}\x{03B9}",
+'1F8B' => "\x{1F03}\x{03B9}",
+'1F8C' => "\x{1F04}\x{03B9}",
+'1F8D' => "\x{1F05}\x{03B9}",
+'1F8E' => "\x{1F06}\x{03B9}",
+'1F8F' => "\x{1F07}\x{03B9}",
+'1F90' => "\x{1F20}\x{03B9}",
+'1F91' => "\x{1F21}\x{03B9}",
+'1F92' => "\x{1F22}\x{03B9}",
+'1F93' => "\x{1F23}\x{03B9}",
+'1F94' => "\x{1F24}\x{03B9}",
+'1F95' => "\x{1F25}\x{03B9}",
+'1F96' => "\x{1F26}\x{03B9}",
+'1F97' => "\x{1F27}\x{03B9}",
+'1F98' => "\x{1F20}\x{03B9}",
+'1F99' => "\x{1F21}\x{03B9}",
+'1F9A' => "\x{1F22}\x{03B9}",
+'1F9B' => "\x{1F23}\x{03B9}",
+'1F9C' => "\x{1F24}\x{03B9}",
+'1F9D' => "\x{1F25}\x{03B9}",
+'1F9E' => "\x{1F26}\x{03B9}",
+'1F9F' => "\x{1F27}\x{03B9}",
+'1FA0' => "\x{1F60}\x{03B9}",
+'1FA1' => "\x{1F61}\x{03B9}",
+'1FA2' => "\x{1F62}\x{03B9}",
+'1FA3' => "\x{1F63}\x{03B9}",
+'1FA4' => "\x{1F64}\x{03B9}",
+'1FA5' => "\x{1F65}\x{03B9}",
+'1FA6' => "\x{1F66}\x{03B9}",
+'1FA7' => "\x{1F67}\x{03B9}",
+'1FA8' => "\x{1F60}\x{03B9}",
+'1FA9' => "\x{1F61}\x{03B9}",
+'1FAA' => "\x{1F62}\x{03B9}",
+'1FAB' => "\x{1F63}\x{03B9}",
+'1FAC' => "\x{1F64}\x{03B9}",
+'1FAD' => "\x{1F65}\x{03B9}",
+'1FAE' => "\x{1F66}\x{03B9}",
+'1FAF' => "\x{1F67}\x{03B9}",
+'1FB2' => "\x{1F70}\x{03B9}",
+'1FB3' => "\x{03B1}\x{03B9}",
+'1FB4' => "\x{03AC}\x{03B9}",
+'1FB6' => "\x{03B1}\x{0342}",
+'1FB7' => "\x{03B1}\x{0342}\x{03B9}",
+'1FBC' => "\x{03B1}\x{03B9}",
+'1FC2' => "\x{1F74}\x{03B9}",
+'1FC3' => "\x{03B7}\x{03B9}",
+'1FC4' => "\x{03AE}\x{03B9}",
+'1FC6' => "\x{03B7}\x{0342}",
+'1FC7' => "\x{03B7}\x{0342}\x{03B9}",
+'1FCC' => "\x{03B7}\x{03B9}",
+'1FD2' => "\x{03B9}\x{0308}\x{0300}",
+'1FD3' => "\x{03B9}\x{0308}\x{0301}",
+'1FD6' => "\x{03B9}\x{0342}",
+'1FD7' => "\x{03B9}\x{0308}\x{0342}",
+'1FE2' => "\x{03C5}\x{0308}\x{0300}",
+'1FE3' => "\x{03C5}\x{0308}\x{0301}",
+'1FE4' => "\x{03C1}\x{0313}",
+'1FE6' => "\x{03C5}\x{0342}",
+'1FE7' => "\x{03C5}\x{0308}\x{0342}",
+'1FF2' => "\x{1F7C}\x{03B9}",
+'1FF3' => "\x{03C9}\x{03B9}",
+'1FF4' => "\x{03CE}\x{03B9}",
+'1FF6' => "\x{03C9}\x{0342}",
+'1FF7' => "\x{03C9}\x{0342}\x{03B9}",
+'1FFC' => "\x{03C9}\x{03B9}",
+'FB00' => "\x{0066}\x{0066}",
+'FB01' => "\x{0066}\x{0069}",
+'FB02' => "\x{0066}\x{006C}",
+'FB03' => "\x{0066}\x{0066}\x{0069}",
+'FB04' => "\x{0066}\x{0066}\x{006C}",
+'FB05' => "\x{0073}\x{0074}",
+'FB06' => "\x{0073}\x{0074}",
+'FB13' => "\x{0574}\x{0576}",
+'FB14' => "\x{0574}\x{0565}",
+'FB15' => "\x{0574}\x{056B}",
+'FB16' => "\x{057E}\x{0576}",
+'FB17' => "\x{0574}\x{056D}",
+);
+
+return <<'END';
+0041 0061
+0042 0062
+0043 0063
+0044 0064
+0045 0065
+0046 0066
+0047 0067
+0048 0068
+0049 0069
+004A 006A
+004B 006B
+004C 006C
+004D 006D
+004E 006E
+004F 006F
+0050 0070
+0051 0071
+0052 0072
+0053 0073
+0054 0074
+0055 0075
+0056 0076
+0057 0077
+0058 0078
+0059 0079
+005A 007A
+00B5 03BC
+00C0 00E0
+00C1 00E1
+00C2 00E2
+00C3 00E3
+00C4 00E4
+00C5 00E5
+00C6 00E6
+00C7 00E7
+00C8 00E8
+00C9 00E9
+00CA 00EA
+00CB 00EB
+00CC 00EC
+00CD 00ED
+00CE 00EE
+00CF 00EF
+00D0 00F0
+00D1 00F1
+00D2 00F2
+00D3 00F3
+00D4 00F4
+00D5 00F5
+00D6 00F6
+00D8 00F8
+00D9 00F9
+00DA 00FA
+00DB 00FB
+00DC 00FC
+00DD 00FD
+00DE 00FE
+0100 0101
+0102 0103
+0104 0105
+0106 0107
+0108 0109
+010A 010B
+010C 010D
+010E 010F
+0110 0111
+0112 0113
+0114 0115
+0116 0117
+0118 0119
+011A 011B
+011C 011D
+011E 011F
+0120 0121
+0122 0123
+0124 0125
+0126 0127
+0128 0129
+012A 012B
+012C 012D
+012E 012F
+0132 0133
+0134 0135
+0136 0137
+0139 013A
+013B 013C
+013D 013E
+013F 0140
+0141 0142
+0143 0144
+0145 0146
+0147 0148
+014A 014B
+014C 014D
+014E 014F
+0150 0151
+0152 0153
+0154 0155
+0156 0157
+0158 0159
+015A 015B
+015C 015D
+015E 015F
+0160 0161
+0162 0163
+0164 0165
+0166 0167
+0168 0169
+016A 016B
+016C 016D
+016E 016F
+0170 0171
+0172 0173
+0174 0175
+0176 0177
+0178 00FF
+0179 017A
+017B 017C
+017D 017E
+017F 0073
+0181 0253
+0182 0183
+0184 0185
+0186 0254
+0187 0188
+0189 0256
+018A 0257
+018B 018C
+018E 01DD
+018F 0259
+0190 025B
+0191 0192
+0193 0260
+0194 0263
+0196 0269
+0197 0268
+0198 0199
+019C 026F
+019D 0272
+019F 0275
+01A0 01A1
+01A2 01A3
+01A4 01A5
+01A6 0280
+01A7 01A8
+01A9 0283
+01AC 01AD
+01AE 0288
+01AF 01B0
+01B1 028A
+01B2 028B
+01B3 01B4
+01B5 01B6
+01B7 0292
+01B8 01B9
+01BC 01BD
+01C4 01C6
+01C5 01C6
+01C7 01C9
+01C8 01C9
+01CA 01CC
+01CB 01CC
+01CD 01CE
+01CF 01D0
+01D1 01D2
+01D3 01D4
+01D5 01D6
+01D7 01D8
+01D9 01DA
+01DB 01DC
+01DE 01DF
+01E0 01E1
+01E2 01E3
+01E4 01E5
+01E6 01E7
+01E8 01E9
+01EA 01EB
+01EC 01ED
+01EE 01EF
+01F1 01F3
+01F2 01F3
+01F4 01F5
+01F6 0195
+01F7 01BF
+01F8 01F9
+01FA 01FB
+01FC 01FD
+01FE 01FF
+0200 0201
+0202 0203
+0204 0205
+0206 0207
+0208 0209
+020A 020B
+020C 020D
+020E 020F
+0210 0211
+0212 0213
+0214 0215
+0216 0217
+0218 0219
+021A 021B
+021C 021D
+021E 021F
+0220 019E
+0222 0223
+0224 0225
+0226 0227
+0228 0229
+022A 022B
+022C 022D
+022E 022F
+0230 0231
+0232 0233
+0345 03B9
+0386 03AC
+0388 03AD
+0389 03AE
+038A 03AF
+038C 03CC
+038E 03CD
+038F 03CE
+0391 03B1
+0392 03B2
+0393 03B3
+0394 03B4
+0395 03B5
+0396 03B6
+0397 03B7
+0398 03B8
+0399 03B9
+039A 03BA
+039B 03BB
+039C 03BC
+039D 03BD
+039E 03BE
+039F 03BF
+03A0 03C0
+03A1 03C1
+03A3 03C3
+03A4 03C4
+03A5 03C5
+03A6 03C6
+03A7 03C7
+03A8 03C8
+03A9 03C9
+03AA 03CA
+03AB 03CB
+03C2 03C3
+03D0 03B2
+03D1 03B8
+03D5 03C6
+03D6 03C0
+03D8 03D9
+03DA 03DB
+03DC 03DD
+03DE 03DF
+03E0 03E1
+03E2 03E3
+03E4 03E5
+03E6 03E7
+03E8 03E9
+03EA 03EB
+03EC 03ED
+03EE 03EF
+03F0 03BA
+03F1 03C1
+03F2 03C3
+03F4 03B8
+03F5 03B5
+0400 0450
+0401 0451
+0402 0452
+0403 0453
+0404 0454
+0405 0455
+0406 0456
+0407 0457
+0408 0458
+0409 0459
+040A 045A
+040B 045B
+040C 045C
+040D 045D
+040E 045E
+040F 045F
+0410 0430
+0411 0431
+0412 0432
+0413 0433
+0414 0434
+0415 0435
+0416 0436
+0417 0437
+0418 0438
+0419 0439
+041A 043A
+041B 043B
+041C 043C
+041D 043D
+041E 043E
+041F 043F
+0420 0440
+0421 0441
+0422 0442
+0423 0443
+0424 0444
+0425 0445
+0426 0446
+0427 0447
+0428 0448
+0429 0449
+042A 044A
+042B 044B
+042C 044C
+042D 044D
+042E 044E
+042F 044F
+0460 0461
+0462 0463
+0464 0465
+0466 0467
+0468 0469
+046A 046B
+046C 046D
+046E 046F
+0470 0471
+0472 0473
+0474 0475
+0476 0477
+0478 0479
+047A 047B
+047C 047D
+047E 047F
+0480 0481
+048A 048B
+048C 048D
+048E 048F
+0490 0491
+0492 0493
+0494 0495
+0496 0497
+0498 0499
+049A 049B
+049C 049D
+049E 049F
+04A0 04A1
+04A2 04A3
+04A4 04A5
+04A6 04A7
+04A8 04A9
+04AA 04AB
+04AC 04AD
+04AE 04AF
+04B0 04B1
+04B2 04B3
+04B4 04B5
+04B6 04B7
+04B8 04B9
+04BA 04BB
+04BC 04BD
+04BE 04BF
+04C1 04C2
+04C3 04C4
+04C5 04C6
+04C7 04C8
+04C9 04CA
+04CB 04CC
+04CD 04CE
+04D0 04D1
+04D2 04D3
+04D4 04D5
+04D6 04D7
+04D8 04D9
+04DA 04DB
+04DC 04DD
+04DE 04DF
+04E0 04E1
+04E2 04E3
+04E4 04E5
+04E6 04E7
+04E8 04E9
+04EA 04EB
+04EC 04ED
+04EE 04EF
+04F0 04F1
+04F2 04F3
+04F4 04F5
+04F8 04F9
+0500 0501
+0502 0503
+0504 0505
+0506 0507
+0508 0509
+050A 050B
+050C 050D
+050E 050F
+0531 0561
+0532 0562
+0533 0563
+0534 0564
+0535 0565
+0536 0566
+0537 0567
+0538 0568
+0539 0569
+053A 056A
+053B 056B
+053C 056C
+053D 056D
+053E 056E
+053F 056F
+0540 0570
+0541 0571
+0542 0572
+0543 0573
+0544 0574
+0545 0575
+0546 0576
+0547 0577
+0548 0578
+0549 0579
+054A 057A
+054B 057B
+054C 057C
+054D 057D
+054E 057E
+054F 057F
+0550 0580
+0551 0581
+0552 0582
+0553 0583
+0554 0584
+0555 0585
+0556 0586
+1E00 1E01
+1E02 1E03
+1E04 1E05
+1E06 1E07
+1E08 1E09
+1E0A 1E0B
+1E0C 1E0D
+1E0E 1E0F
+1E10 1E11
+1E12 1E13
+1E14 1E15
+1E16 1E17
+1E18 1E19
+1E1A 1E1B
+1E1C 1E1D
+1E1E 1E1F
+1E20 1E21
+1E22 1E23
+1E24 1E25
+1E26 1E27
+1E28 1E29
+1E2A 1E2B
+1E2C 1E2D
+1E2E 1E2F
+1E30 1E31
+1E32 1E33
+1E34 1E35
+1E36 1E37
+1E38 1E39
+1E3A 1E3B
+1E3C 1E3D
+1E3E 1E3F
+1E40 1E41
+1E42 1E43
+1E44 1E45
+1E46 1E47
+1E48 1E49
+1E4A 1E4B
+1E4C 1E4D
+1E4E 1E4F
+1E50 1E51
+1E52 1E53
+1E54 1E55
+1E56 1E57
+1E58 1E59
+1E5A 1E5B
+1E5C 1E5D
+1E5E 1E5F
+1E60 1E61
+1E62 1E63
+1E64 1E65
+1E66 1E67
+1E68 1E69
+1E6A 1E6B
+1E6C 1E6D
+1E6E 1E6F
+1E70 1E71
+1E72 1E73
+1E74 1E75
+1E76 1E77
+1E78 1E79
+1E7A 1E7B
+1E7C 1E7D
+1E7E 1E7F
+1E80 1E81
+1E82 1E83
+1E84 1E85
+1E86 1E87
+1E88 1E89
+1E8A 1E8B
+1E8C 1E8D
+1E8E 1E8F
+1E90 1E91
+1E92 1E93
+1E94 1E95
+1E9B 1E61
+1EA0 1EA1
+1EA2 1EA3
+1EA4 1EA5
+1EA6 1EA7
+1EA8 1EA9
+1EAA 1EAB
+1EAC 1EAD
+1EAE 1EAF
+1EB0 1EB1
+1EB2 1EB3
+1EB4 1EB5
+1EB6 1EB7
+1EB8 1EB9
+1EBA 1EBB
+1EBC 1EBD
+1EBE 1EBF
+1EC0 1EC1
+1EC2 1EC3
+1EC4 1EC5
+1EC6 1EC7
+1EC8 1EC9
+1ECA 1ECB
+1ECC 1ECD
+1ECE 1ECF
+1ED0 1ED1
+1ED2 1ED3
+1ED4 1ED5
+1ED6 1ED7
+1ED8 1ED9
+1EDA 1EDB
+1EDC 1EDD
+1EDE 1EDF
+1EE0 1EE1
+1EE2 1EE3
+1EE4 1EE5
+1EE6 1EE7
+1EE8 1EE9
+1EEA 1EEB
+1EEC 1EED
+1EEE 1EEF
+1EF0 1EF1
+1EF2 1EF3
+1EF4 1EF5
+1EF6 1EF7
+1EF8 1EF9
+1F08 1F00
+1F09 1F01
+1F0A 1F02
+1F0B 1F03
+1F0C 1F04
+1F0D 1F05
+1F0E 1F06
+1F0F 1F07
+1F18 1F10
+1F19 1F11
+1F1A 1F12
+1F1B 1F13
+1F1C 1F14
+1F1D 1F15
+1F28 1F20
+1F29 1F21
+1F2A 1F22
+1F2B 1F23
+1F2C 1F24
+1F2D 1F25
+1F2E 1F26
+1F2F 1F27
+1F38 1F30
+1F39 1F31
+1F3A 1F32
+1F3B 1F33
+1F3C 1F34
+1F3D 1F35
+1F3E 1F36
+1F3F 1F37
+1F48 1F40
+1F49 1F41
+1F4A 1F42
+1F4B 1F43
+1F4C 1F44
+1F4D 1F45
+1F59 1F51
+1F5B 1F53
+1F5D 1F55
+1F5F 1F57
+1F68 1F60
+1F69 1F61
+1F6A 1F62
+1F6B 1F63
+1F6C 1F64
+1F6D 1F65
+1F6E 1F66
+1F6F 1F67
+1FB8 1FB0
+1FB9 1FB1
+1FBA 1F70
+1FBB 1F71
+1FBE 03B9
+1FC8 1F72
+1FC9 1F73
+1FCA 1F74
+1FCB 1F75
+1FD8 1FD0
+1FD9 1FD1
+1FDA 1F76
+1FDB 1F77
+1FE8 1FE0
+1FE9 1FE1
+1FEA 1F7A
+1FEB 1F7B
+1FEC 1FE5
+1FF8 1F78
+1FF9 1F79
+1FFA 1F7C
+1FFB 1F7D
+2126 03C9
+212A 006B
+212B 00E5
+2160 2170
+2161 2171
+2162 2172
+2163 2173
+2164 2174
+2165 2175
+2166 2176
+2167 2177
+2168 2178
+2169 2179
+216A 217A
+216B 217B
+216C 217C
+216D 217D
+216E 217E
+216F 217F
+24B6 24D0
+24B7 24D1
+24B8 24D2
+24B9 24D3
+24BA 24D4
+24BB 24D5
+24BC 24D6
+24BD 24D7
+24BE 24D8
+24BF 24D9
+24C0 24DA
+24C1 24DB
+24C2 24DC
+24C3 24DD
+24C4 24DE
+24C5 24DF
+24C6 24E0
+24C7 24E1
+24C8 24E2
+24C9 24E3
+24CA 24E4
+24CB 24E5
+24CC 24E6
+24CD 24E7
+24CE 24E8
+24CF 24E9
+FF21 FF41
+FF22 FF42
+FF23 FF43
+FF24 FF44
+FF25 FF45
+FF26 FF46
+FF27 FF47
+FF28 FF48
+FF29 FF49
+FF2A FF4A
+FF2B FF4B
+FF2C FF4C
+FF2D FF4D
+FF2E FF4E
+FF2F FF4F
+FF30 FF50
+FF31 FF51
+FF32 FF52
+FF33 FF53
+FF34 FF54
+FF35 FF55
+FF36 FF56
+FF37 FF57
+FF38 FF58
+FF39 FF59
+FF3A FF5A
+10400 10428
+10401 10429
+10402 1042A
+10403 1042B
+10404 1042C
+10405 1042D
+10406 1042E
+10407 1042F
+10408 10430
+10409 10431
+1040A 10432
+1040B 10433
+1040C 10434
+1040D 10435
+1040E 10436
+1040F 10437
+10410 10438
+10411 10439
+10412 1043A
+10413 1043B
+10414 1043C
+10415 1043D
+10416 1043E
+10417 1043F
+10418 10440
+10419 10441
+1041A 10442
+1041B 10443
+1041C 10444
+1041D 10445
+1041E 10446
+1041F 10447
+10420 10448
+10421 10449
+10422 1044A
+10423 1044B
+10424 1044C
+10425 1044D
+END
diff --git a/Master/xemtex/perl/lib/unicore/To/Lower.pl b/Master/xemtex/perl/lib/unicore/To/Lower.pl
new file mode 100644
index 00000000000..cbb27214882
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/To/Lower.pl
@@ -0,0 +1,760 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+
+%utf8::ToSpecLower =
+(
+'0130' => "\x{0069}\x{0307}",
+'1F88' => "\x{1F80}",
+'1F89' => "\x{1F81}",
+'1F8A' => "\x{1F82}",
+'1F8B' => "\x{1F83}",
+'1F8C' => "\x{1F84}",
+'1F8D' => "\x{1F85}",
+'1F8E' => "\x{1F86}",
+'1F8F' => "\x{1F87}",
+'1F98' => "\x{1F90}",
+'1F99' => "\x{1F91}",
+'1F9A' => "\x{1F92}",
+'1F9B' => "\x{1F93}",
+'1F9C' => "\x{1F94}",
+'1F9D' => "\x{1F95}",
+'1F9E' => "\x{1F96}",
+'1F9F' => "\x{1F97}",
+'1FA8' => "\x{1FA0}",
+'1FA9' => "\x{1FA1}",
+'1FAA' => "\x{1FA2}",
+'1FAB' => "\x{1FA3}",
+'1FAC' => "\x{1FA4}",
+'1FAD' => "\x{1FA5}",
+'1FAE' => "\x{1FA6}",
+'1FAF' => "\x{1FA7}",
+'1FBC' => "\x{1FB3}",
+'1FCC' => "\x{1FC3}",
+'1FFC' => "\x{1FF3}",
+);
+
+return <<'END';
+0041 0061
+0042 0062
+0043 0063
+0044 0064
+0045 0065
+0046 0066
+0047 0067
+0048 0068
+0049 0069
+004A 006A
+004B 006B
+004C 006C
+004D 006D
+004E 006E
+004F 006F
+0050 0070
+0051 0071
+0052 0072
+0053 0073
+0054 0074
+0055 0075
+0056 0076
+0057 0077
+0058 0078
+0059 0079
+005A 007A
+00C0 00E0
+00C1 00E1
+00C2 00E2
+00C3 00E3
+00C4 00E4
+00C5 00E5
+00C6 00E6
+00C7 00E7
+00C8 00E8
+00C9 00E9
+00CA 00EA
+00CB 00EB
+00CC 00EC
+00CD 00ED
+00CE 00EE
+00CF 00EF
+00D0 00F0
+00D1 00F1
+00D2 00F2
+00D3 00F3
+00D4 00F4
+00D5 00F5
+00D6 00F6
+00D8 00F8
+00D9 00F9
+00DA 00FA
+00DB 00FB
+00DC 00FC
+00DD 00FD
+00DE 00FE
+0100 0101
+0102 0103
+0104 0105
+0106 0107
+0108 0109
+010A 010B
+010C 010D
+010E 010F
+0110 0111
+0112 0113
+0114 0115
+0116 0117
+0118 0119
+011A 011B
+011C 011D
+011E 011F
+0120 0121
+0122 0123
+0124 0125
+0126 0127
+0128 0129
+012A 012B
+012C 012D
+012E 012F
+0132 0133
+0134 0135
+0136 0137
+0139 013A
+013B 013C
+013D 013E
+013F 0140
+0141 0142
+0143 0144
+0145 0146
+0147 0148
+014A 014B
+014C 014D
+014E 014F
+0150 0151
+0152 0153
+0154 0155
+0156 0157
+0158 0159
+015A 015B
+015C 015D
+015E 015F
+0160 0161
+0162 0163
+0164 0165
+0166 0167
+0168 0169
+016A 016B
+016C 016D
+016E 016F
+0170 0171
+0172 0173
+0174 0175
+0176 0177
+0178 00FF
+0179 017A
+017B 017C
+017D 017E
+0181 0253
+0182 0183
+0184 0185
+0186 0254
+0187 0188
+0189 0256
+018A 0257
+018B 018C
+018E 01DD
+018F 0259
+0190 025B
+0191 0192
+0193 0260
+0194 0263
+0196 0269
+0197 0268
+0198 0199
+019C 026F
+019D 0272
+019F 0275
+01A0 01A1
+01A2 01A3
+01A4 01A5
+01A6 0280
+01A7 01A8
+01A9 0283
+01AC 01AD
+01AE 0288
+01AF 01B0
+01B1 028A
+01B2 028B
+01B3 01B4
+01B5 01B6
+01B7 0292
+01B8 01B9
+01BC 01BD
+01C4 01C6
+01C5 01C6
+01C7 01C9
+01C8 01C9
+01CA 01CC
+01CB 01CC
+01CD 01CE
+01CF 01D0
+01D1 01D2
+01D3 01D4
+01D5 01D6
+01D7 01D8
+01D9 01DA
+01DB 01DC
+01DE 01DF
+01E0 01E1
+01E2 01E3
+01E4 01E5
+01E6 01E7
+01E8 01E9
+01EA 01EB
+01EC 01ED
+01EE 01EF
+01F1 01F3
+01F2 01F3
+01F4 01F5
+01F6 0195
+01F7 01BF
+01F8 01F9
+01FA 01FB
+01FC 01FD
+01FE 01FF
+0200 0201
+0202 0203
+0204 0205
+0206 0207
+0208 0209
+020A 020B
+020C 020D
+020E 020F
+0210 0211
+0212 0213
+0214 0215
+0216 0217
+0218 0219
+021A 021B
+021C 021D
+021E 021F
+0220 019E
+0222 0223
+0224 0225
+0226 0227
+0228 0229
+022A 022B
+022C 022D
+022E 022F
+0230 0231
+0232 0233
+0386 03AC
+0388 03AD
+0389 03AE
+038A 03AF
+038C 03CC
+038E 03CD
+038F 03CE
+0391 03B1
+0392 03B2
+0393 03B3
+0394 03B4
+0395 03B5
+0396 03B6
+0397 03B7
+0398 03B8
+0399 03B9
+039A 03BA
+039B 03BB
+039C 03BC
+039D 03BD
+039E 03BE
+039F 03BF
+03A0 03C0
+03A1 03C1
+03A3 03C3
+03A4 03C4
+03A5 03C5
+03A6 03C6
+03A7 03C7
+03A8 03C8
+03A9 03C9
+03AA 03CA
+03AB 03CB
+03D8 03D9
+03DA 03DB
+03DC 03DD
+03DE 03DF
+03E0 03E1
+03E2 03E3
+03E4 03E5
+03E6 03E7
+03E8 03E9
+03EA 03EB
+03EC 03ED
+03EE 03EF
+03F4 03B8
+0400 0450
+0401 0451
+0402 0452
+0403 0453
+0404 0454
+0405 0455
+0406 0456
+0407 0457
+0408 0458
+0409 0459
+040A 045A
+040B 045B
+040C 045C
+040D 045D
+040E 045E
+040F 045F
+0410 0430
+0411 0431
+0412 0432
+0413 0433
+0414 0434
+0415 0435
+0416 0436
+0417 0437
+0418 0438
+0419 0439
+041A 043A
+041B 043B
+041C 043C
+041D 043D
+041E 043E
+041F 043F
+0420 0440
+0421 0441
+0422 0442
+0423 0443
+0424 0444
+0425 0445
+0426 0446
+0427 0447
+0428 0448
+0429 0449
+042A 044A
+042B 044B
+042C 044C
+042D 044D
+042E 044E
+042F 044F
+0460 0461
+0462 0463
+0464 0465
+0466 0467
+0468 0469
+046A 046B
+046C 046D
+046E 046F
+0470 0471
+0472 0473
+0474 0475
+0476 0477
+0478 0479
+047A 047B
+047C 047D
+047E 047F
+0480 0481
+048A 048B
+048C 048D
+048E 048F
+0490 0491
+0492 0493
+0494 0495
+0496 0497
+0498 0499
+049A 049B
+049C 049D
+049E 049F
+04A0 04A1
+04A2 04A3
+04A4 04A5
+04A6 04A7
+04A8 04A9
+04AA 04AB
+04AC 04AD
+04AE 04AF
+04B0 04B1
+04B2 04B3
+04B4 04B5
+04B6 04B7
+04B8 04B9
+04BA 04BB
+04BC 04BD
+04BE 04BF
+04C1 04C2
+04C3 04C4
+04C5 04C6
+04C7 04C8
+04C9 04CA
+04CB 04CC
+04CD 04CE
+04D0 04D1
+04D2 04D3
+04D4 04D5
+04D6 04D7
+04D8 04D9
+04DA 04DB
+04DC 04DD
+04DE 04DF
+04E0 04E1
+04E2 04E3
+04E4 04E5
+04E6 04E7
+04E8 04E9
+04EA 04EB
+04EC 04ED
+04EE 04EF
+04F0 04F1
+04F2 04F3
+04F4 04F5
+04F8 04F9
+0500 0501
+0502 0503
+0504 0505
+0506 0507
+0508 0509
+050A 050B
+050C 050D
+050E 050F
+0531 0561
+0532 0562
+0533 0563
+0534 0564
+0535 0565
+0536 0566
+0537 0567
+0538 0568
+0539 0569
+053A 056A
+053B 056B
+053C 056C
+053D 056D
+053E 056E
+053F 056F
+0540 0570
+0541 0571
+0542 0572
+0543 0573
+0544 0574
+0545 0575
+0546 0576
+0547 0577
+0548 0578
+0549 0579
+054A 057A
+054B 057B
+054C 057C
+054D 057D
+054E 057E
+054F 057F
+0550 0580
+0551 0581
+0552 0582
+0553 0583
+0554 0584
+0555 0585
+0556 0586
+1E00 1E01
+1E02 1E03
+1E04 1E05
+1E06 1E07
+1E08 1E09
+1E0A 1E0B
+1E0C 1E0D
+1E0E 1E0F
+1E10 1E11
+1E12 1E13
+1E14 1E15
+1E16 1E17
+1E18 1E19
+1E1A 1E1B
+1E1C 1E1D
+1E1E 1E1F
+1E20 1E21
+1E22 1E23
+1E24 1E25
+1E26 1E27
+1E28 1E29
+1E2A 1E2B
+1E2C 1E2D
+1E2E 1E2F
+1E30 1E31
+1E32 1E33
+1E34 1E35
+1E36 1E37
+1E38 1E39
+1E3A 1E3B
+1E3C 1E3D
+1E3E 1E3F
+1E40 1E41
+1E42 1E43
+1E44 1E45
+1E46 1E47
+1E48 1E49
+1E4A 1E4B
+1E4C 1E4D
+1E4E 1E4F
+1E50 1E51
+1E52 1E53
+1E54 1E55
+1E56 1E57
+1E58 1E59
+1E5A 1E5B
+1E5C 1E5D
+1E5E 1E5F
+1E60 1E61
+1E62 1E63
+1E64 1E65
+1E66 1E67
+1E68 1E69
+1E6A 1E6B
+1E6C 1E6D
+1E6E 1E6F
+1E70 1E71
+1E72 1E73
+1E74 1E75
+1E76 1E77
+1E78 1E79
+1E7A 1E7B
+1E7C 1E7D
+1E7E 1E7F
+1E80 1E81
+1E82 1E83
+1E84 1E85
+1E86 1E87
+1E88 1E89
+1E8A 1E8B
+1E8C 1E8D
+1E8E 1E8F
+1E90 1E91
+1E92 1E93
+1E94 1E95
+1EA0 1EA1
+1EA2 1EA3
+1EA4 1EA5
+1EA6 1EA7
+1EA8 1EA9
+1EAA 1EAB
+1EAC 1EAD
+1EAE 1EAF
+1EB0 1EB1
+1EB2 1EB3
+1EB4 1EB5
+1EB6 1EB7
+1EB8 1EB9
+1EBA 1EBB
+1EBC 1EBD
+1EBE 1EBF
+1EC0 1EC1
+1EC2 1EC3
+1EC4 1EC5
+1EC6 1EC7
+1EC8 1EC9
+1ECA 1ECB
+1ECC 1ECD
+1ECE 1ECF
+1ED0 1ED1
+1ED2 1ED3
+1ED4 1ED5
+1ED6 1ED7
+1ED8 1ED9
+1EDA 1EDB
+1EDC 1EDD
+1EDE 1EDF
+1EE0 1EE1
+1EE2 1EE3
+1EE4 1EE5
+1EE6 1EE7
+1EE8 1EE9
+1EEA 1EEB
+1EEC 1EED
+1EEE 1EEF
+1EF0 1EF1
+1EF2 1EF3
+1EF4 1EF5
+1EF6 1EF7
+1EF8 1EF9
+1F08 1F00
+1F09 1F01
+1F0A 1F02
+1F0B 1F03
+1F0C 1F04
+1F0D 1F05
+1F0E 1F06
+1F0F 1F07
+1F18 1F10
+1F19 1F11
+1F1A 1F12
+1F1B 1F13
+1F1C 1F14
+1F1D 1F15
+1F28 1F20
+1F29 1F21
+1F2A 1F22
+1F2B 1F23
+1F2C 1F24
+1F2D 1F25
+1F2E 1F26
+1F2F 1F27
+1F38 1F30
+1F39 1F31
+1F3A 1F32
+1F3B 1F33
+1F3C 1F34
+1F3D 1F35
+1F3E 1F36
+1F3F 1F37
+1F48 1F40
+1F49 1F41
+1F4A 1F42
+1F4B 1F43
+1F4C 1F44
+1F4D 1F45
+1F59 1F51
+1F5B 1F53
+1F5D 1F55
+1F5F 1F57
+1F68 1F60
+1F69 1F61
+1F6A 1F62
+1F6B 1F63
+1F6C 1F64
+1F6D 1F65
+1F6E 1F66
+1F6F 1F67
+1FB8 1FB0
+1FB9 1FB1
+1FBA 1F70
+1FBB 1F71
+1FC8 1F72
+1FC9 1F73
+1FCA 1F74
+1FCB 1F75
+1FD8 1FD0
+1FD9 1FD1
+1FDA 1F76
+1FDB 1F77
+1FE8 1FE0
+1FE9 1FE1
+1FEA 1F7A
+1FEB 1F7B
+1FEC 1FE5
+1FF8 1F78
+1FF9 1F79
+1FFA 1F7C
+1FFB 1F7D
+2126 03C9
+212A 006B
+212B 00E5
+2160 2170
+2161 2171
+2162 2172
+2163 2173
+2164 2174
+2165 2175
+2166 2176
+2167 2177
+2168 2178
+2169 2179
+216A 217A
+216B 217B
+216C 217C
+216D 217D
+216E 217E
+216F 217F
+24B6 24D0
+24B7 24D1
+24B8 24D2
+24B9 24D3
+24BA 24D4
+24BB 24D5
+24BC 24D6
+24BD 24D7
+24BE 24D8
+24BF 24D9
+24C0 24DA
+24C1 24DB
+24C2 24DC
+24C3 24DD
+24C4 24DE
+24C5 24DF
+24C6 24E0
+24C7 24E1
+24C8 24E2
+24C9 24E3
+24CA 24E4
+24CB 24E5
+24CC 24E6
+24CD 24E7
+24CE 24E8
+24CF 24E9
+FF21 FF41
+FF22 FF42
+FF23 FF43
+FF24 FF44
+FF25 FF45
+FF26 FF46
+FF27 FF47
+FF28 FF48
+FF29 FF49
+FF2A FF4A
+FF2B FF4B
+FF2C FF4C
+FF2D FF4D
+FF2E FF4E
+FF2F FF4F
+FF30 FF50
+FF31 FF51
+FF32 FF52
+FF33 FF53
+FF34 FF54
+FF35 FF55
+FF36 FF56
+FF37 FF57
+FF38 FF58
+FF39 FF59
+FF3A FF5A
+10400 10428
+10401 10429
+10402 1042A
+10403 1042B
+10404 1042C
+10405 1042D
+10406 1042E
+10407 1042F
+10408 10430
+10409 10431
+1040A 10432
+1040B 10433
+1040C 10434
+1040D 10435
+1040E 10436
+1040F 10437
+10410 10438
+10411 10439
+10412 1043A
+10413 1043B
+10414 1043C
+10415 1043D
+10416 1043E
+10417 1043F
+10418 10440
+10419 10441
+1041A 10442
+1041B 10443
+1041C 10444
+1041D 10445
+1041E 10446
+1041F 10447
+10420 10448
+10421 10449
+10422 1044A
+10423 1044B
+10424 1044C
+10425 1044D
+END
diff --git a/Master/xemtex/perl/lib/unicore/To/Title.pl b/Master/xemtex/perl/lib/unicore/To/Title.pl
new file mode 100644
index 00000000000..1cd9dc540f3
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/To/Title.pl
@@ -0,0 +1,818 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+
+%utf8::ToSpecTitle =
+(
+'00DF' => "\x{0053}\x{0073}",
+'0149' => "\x{02BC}\x{004E}",
+'01F0' => "\x{004A}\x{030C}",
+'0390' => "\x{0399}\x{0308}\x{0301}",
+'03B0' => "\x{03A5}\x{0308}\x{0301}",
+'0587' => "\x{0535}\x{0582}",
+'1E96' => "\x{0048}\x{0331}",
+'1E97' => "\x{0054}\x{0308}",
+'1E98' => "\x{0057}\x{030A}",
+'1E99' => "\x{0059}\x{030A}",
+'1E9A' => "\x{0041}\x{02BE}",
+'1F50' => "\x{03A5}\x{0313}",
+'1F52' => "\x{03A5}\x{0313}\x{0300}",
+'1F54' => "\x{03A5}\x{0313}\x{0301}",
+'1F56' => "\x{03A5}\x{0313}\x{0342}",
+'1F80' => "\x{1F88}",
+'1F81' => "\x{1F89}",
+'1F82' => "\x{1F8A}",
+'1F83' => "\x{1F8B}",
+'1F84' => "\x{1F8C}",
+'1F85' => "\x{1F8D}",
+'1F86' => "\x{1F8E}",
+'1F87' => "\x{1F8F}",
+'1F90' => "\x{1F98}",
+'1F91' => "\x{1F99}",
+'1F92' => "\x{1F9A}",
+'1F93' => "\x{1F9B}",
+'1F94' => "\x{1F9C}",
+'1F95' => "\x{1F9D}",
+'1F96' => "\x{1F9E}",
+'1F97' => "\x{1F9F}",
+'1FA0' => "\x{1FA8}",
+'1FA1' => "\x{1FA9}",
+'1FA2' => "\x{1FAA}",
+'1FA3' => "\x{1FAB}",
+'1FA4' => "\x{1FAC}",
+'1FA5' => "\x{1FAD}",
+'1FA6' => "\x{1FAE}",
+'1FA7' => "\x{1FAF}",
+'1FB2' => "\x{1FBA}\x{0345}",
+'1FB3' => "\x{1FBC}",
+'1FB4' => "\x{0386}\x{0345}",
+'1FB6' => "\x{0391}\x{0342}",
+'1FB7' => "\x{0391}\x{0342}\x{0345}",
+'1FC2' => "\x{1FCA}\x{0345}",
+'1FC3' => "\x{1FCC}",
+'1FC4' => "\x{0389}\x{0345}",
+'1FC6' => "\x{0397}\x{0342}",
+'1FC7' => "\x{0397}\x{0342}\x{0345}",
+'1FD2' => "\x{0399}\x{0308}\x{0300}",
+'1FD3' => "\x{0399}\x{0308}\x{0301}",
+'1FD6' => "\x{0399}\x{0342}",
+'1FD7' => "\x{0399}\x{0308}\x{0342}",
+'1FE2' => "\x{03A5}\x{0308}\x{0300}",
+'1FE3' => "\x{03A5}\x{0308}\x{0301}",
+'1FE4' => "\x{03A1}\x{0313}",
+'1FE6' => "\x{03A5}\x{0342}",
+'1FE7' => "\x{03A5}\x{0308}\x{0342}",
+'1FF2' => "\x{1FFA}\x{0345}",
+'1FF3' => "\x{1FFC}",
+'1FF4' => "\x{038F}\x{0345}",
+'1FF6' => "\x{03A9}\x{0342}",
+'1FF7' => "\x{03A9}\x{0342}\x{0345}",
+'FB00' => "\x{0046}\x{0066}",
+'FB01' => "\x{0046}\x{0069}",
+'FB02' => "\x{0046}\x{006C}",
+'FB03' => "\x{0046}\x{0066}\x{0069}",
+'FB04' => "\x{0046}\x{0066}\x{006C}",
+'FB05' => "\x{0053}\x{0074}",
+'FB06' => "\x{0053}\x{0074}",
+'FB13' => "\x{0544}\x{0576}",
+'FB14' => "\x{0544}\x{0565}",
+'FB15' => "\x{0544}\x{056B}",
+'FB16' => "\x{054E}\x{0576}",
+'FB17' => "\x{0544}\x{056D}",
+);
+
+return <<'END';
+0061 0041
+0062 0042
+0063 0043
+0064 0044
+0065 0045
+0066 0046
+0067 0047
+0068 0048
+0069 0049
+006A 004A
+006B 004B
+006C 004C
+006D 004D
+006E 004E
+006F 004F
+0070 0050
+0071 0051
+0072 0052
+0073 0053
+0074 0054
+0075 0055
+0076 0056
+0077 0057
+0078 0058
+0079 0059
+007A 005A
+00B5 039C
+00E0 00C0
+00E1 00C1
+00E2 00C2
+00E3 00C3
+00E4 00C4
+00E5 00C5
+00E6 00C6
+00E7 00C7
+00E8 00C8
+00E9 00C9
+00EA 00CA
+00EB 00CB
+00EC 00CC
+00ED 00CD
+00EE 00CE
+00EF 00CF
+00F0 00D0
+00F1 00D1
+00F2 00D2
+00F3 00D3
+00F4 00D4
+00F5 00D5
+00F6 00D6
+00F8 00D8
+00F9 00D9
+00FA 00DA
+00FB 00DB
+00FC 00DC
+00FD 00DD
+00FE 00DE
+00FF 0178
+0101 0100
+0103 0102
+0105 0104
+0107 0106
+0109 0108
+010B 010A
+010D 010C
+010F 010E
+0111 0110
+0113 0112
+0115 0114
+0117 0116
+0119 0118
+011B 011A
+011D 011C
+011F 011E
+0121 0120
+0123 0122
+0125 0124
+0127 0126
+0129 0128
+012B 012A
+012D 012C
+012F 012E
+0131 0049
+0133 0132
+0135 0134
+0137 0136
+013A 0139
+013C 013B
+013E 013D
+0140 013F
+0142 0141
+0144 0143
+0146 0145
+0148 0147
+014B 014A
+014D 014C
+014F 014E
+0151 0150
+0153 0152
+0155 0154
+0157 0156
+0159 0158
+015B 015A
+015D 015C
+015F 015E
+0161 0160
+0163 0162
+0165 0164
+0167 0166
+0169 0168
+016B 016A
+016D 016C
+016F 016E
+0171 0170
+0173 0172
+0175 0174
+0177 0176
+017A 0179
+017C 017B
+017E 017D
+017F 0053
+0183 0182
+0185 0184
+0188 0187
+018C 018B
+0192 0191
+0195 01F6
+0199 0198
+019E 0220
+01A1 01A0
+01A3 01A2
+01A5 01A4
+01A8 01A7
+01AD 01AC
+01B0 01AF
+01B4 01B3
+01B6 01B5
+01B9 01B8
+01BD 01BC
+01BF 01F7
+01C4 01C5
+01C6 01C5
+01C7 01C8
+01C9 01C8
+01CA 01CB
+01CC 01CB
+01CE 01CD
+01D0 01CF
+01D2 01D1
+01D4 01D3
+01D6 01D5
+01D8 01D7
+01DA 01D9
+01DC 01DB
+01DD 018E
+01DF 01DE
+01E1 01E0
+01E3 01E2
+01E5 01E4
+01E7 01E6
+01E9 01E8
+01EB 01EA
+01ED 01EC
+01EF 01EE
+01F1 01F2
+01F3 01F2
+01F5 01F4
+01F9 01F8
+01FB 01FA
+01FD 01FC
+01FF 01FE
+0201 0200
+0203 0202
+0205 0204
+0207 0206
+0209 0208
+020B 020A
+020D 020C
+020F 020E
+0211 0210
+0213 0212
+0215 0214
+0217 0216
+0219 0218
+021B 021A
+021D 021C
+021F 021E
+0223 0222
+0225 0224
+0227 0226
+0229 0228
+022B 022A
+022D 022C
+022F 022E
+0231 0230
+0233 0232
+0253 0181
+0254 0186
+0256 0189
+0257 018A
+0259 018F
+025B 0190
+0260 0193
+0263 0194
+0268 0197
+0269 0196
+026F 019C
+0272 019D
+0275 019F
+0280 01A6
+0283 01A9
+0288 01AE
+028A 01B1
+028B 01B2
+0292 01B7
+0345 0399
+03AC 0386
+03AD 0388
+03AE 0389
+03AF 038A
+03B1 0391
+03B2 0392
+03B3 0393
+03B4 0394
+03B5 0395
+03B6 0396
+03B7 0397
+03B8 0398
+03B9 0399
+03BA 039A
+03BB 039B
+03BC 039C
+03BD 039D
+03BE 039E
+03BF 039F
+03C0 03A0
+03C1 03A1
+03C2 03A3
+03C3 03A3
+03C4 03A4
+03C5 03A5
+03C6 03A6
+03C7 03A7
+03C8 03A8
+03C9 03A9
+03CA 03AA
+03CB 03AB
+03CC 038C
+03CD 038E
+03CE 038F
+03D0 0392
+03D1 0398
+03D5 03A6
+03D6 03A0
+03D9 03D8
+03DB 03DA
+03DD 03DC
+03DF 03DE
+03E1 03E0
+03E3 03E2
+03E5 03E4
+03E7 03E6
+03E9 03E8
+03EB 03EA
+03ED 03EC
+03EF 03EE
+03F0 039A
+03F1 03A1
+03F2 03A3
+03F5 0395
+0430 0410
+0431 0411
+0432 0412
+0433 0413
+0434 0414
+0435 0415
+0436 0416
+0437 0417
+0438 0418
+0439 0419
+043A 041A
+043B 041B
+043C 041C
+043D 041D
+043E 041E
+043F 041F
+0440 0420
+0441 0421
+0442 0422
+0443 0423
+0444 0424
+0445 0425
+0446 0426
+0447 0427
+0448 0428
+0449 0429
+044A 042A
+044B 042B
+044C 042C
+044D 042D
+044E 042E
+044F 042F
+0450 0400
+0451 0401
+0452 0402
+0453 0403
+0454 0404
+0455 0405
+0456 0406
+0457 0407
+0458 0408
+0459 0409
+045A 040A
+045B 040B
+045C 040C
+045D 040D
+045E 040E
+045F 040F
+0461 0460
+0463 0462
+0465 0464
+0467 0466
+0469 0468
+046B 046A
+046D 046C
+046F 046E
+0471 0470
+0473 0472
+0475 0474
+0477 0476
+0479 0478
+047B 047A
+047D 047C
+047F 047E
+0481 0480
+048B 048A
+048D 048C
+048F 048E
+0491 0490
+0493 0492
+0495 0494
+0497 0496
+0499 0498
+049B 049A
+049D 049C
+049F 049E
+04A1 04A0
+04A3 04A2
+04A5 04A4
+04A7 04A6
+04A9 04A8
+04AB 04AA
+04AD 04AC
+04AF 04AE
+04B1 04B0
+04B3 04B2
+04B5 04B4
+04B7 04B6
+04B9 04B8
+04BB 04BA
+04BD 04BC
+04BF 04BE
+04C2 04C1
+04C4 04C3
+04C6 04C5
+04C8 04C7
+04CA 04C9
+04CC 04CB
+04CE 04CD
+04D1 04D0
+04D3 04D2
+04D5 04D4
+04D7 04D6
+04D9 04D8
+04DB 04DA
+04DD 04DC
+04DF 04DE
+04E1 04E0
+04E3 04E2
+04E5 04E4
+04E7 04E6
+04E9 04E8
+04EB 04EA
+04ED 04EC
+04EF 04EE
+04F1 04F0
+04F3 04F2
+04F5 04F4
+04F9 04F8
+0501 0500
+0503 0502
+0505 0504
+0507 0506
+0509 0508
+050B 050A
+050D 050C
+050F 050E
+0561 0531
+0562 0532
+0563 0533
+0564 0534
+0565 0535
+0566 0536
+0567 0537
+0568 0538
+0569 0539
+056A 053A
+056B 053B
+056C 053C
+056D 053D
+056E 053E
+056F 053F
+0570 0540
+0571 0541
+0572 0542
+0573 0543
+0574 0544
+0575 0545
+0576 0546
+0577 0547
+0578 0548
+0579 0549
+057A 054A
+057B 054B
+057C 054C
+057D 054D
+057E 054E
+057F 054F
+0580 0550
+0581 0551
+0582 0552
+0583 0553
+0584 0554
+0585 0555
+0586 0556
+1E01 1E00
+1E03 1E02
+1E05 1E04
+1E07 1E06
+1E09 1E08
+1E0B 1E0A
+1E0D 1E0C
+1E0F 1E0E
+1E11 1E10
+1E13 1E12
+1E15 1E14
+1E17 1E16
+1E19 1E18
+1E1B 1E1A
+1E1D 1E1C
+1E1F 1E1E
+1E21 1E20
+1E23 1E22
+1E25 1E24
+1E27 1E26
+1E29 1E28
+1E2B 1E2A
+1E2D 1E2C
+1E2F 1E2E
+1E31 1E30
+1E33 1E32
+1E35 1E34
+1E37 1E36
+1E39 1E38
+1E3B 1E3A
+1E3D 1E3C
+1E3F 1E3E
+1E41 1E40
+1E43 1E42
+1E45 1E44
+1E47 1E46
+1E49 1E48
+1E4B 1E4A
+1E4D 1E4C
+1E4F 1E4E
+1E51 1E50
+1E53 1E52
+1E55 1E54
+1E57 1E56
+1E59 1E58
+1E5B 1E5A
+1E5D 1E5C
+1E5F 1E5E
+1E61 1E60
+1E63 1E62
+1E65 1E64
+1E67 1E66
+1E69 1E68
+1E6B 1E6A
+1E6D 1E6C
+1E6F 1E6E
+1E71 1E70
+1E73 1E72
+1E75 1E74
+1E77 1E76
+1E79 1E78
+1E7B 1E7A
+1E7D 1E7C
+1E7F 1E7E
+1E81 1E80
+1E83 1E82
+1E85 1E84
+1E87 1E86
+1E89 1E88
+1E8B 1E8A
+1E8D 1E8C
+1E8F 1E8E
+1E91 1E90
+1E93 1E92
+1E95 1E94
+1E9B 1E60
+1EA1 1EA0
+1EA3 1EA2
+1EA5 1EA4
+1EA7 1EA6
+1EA9 1EA8
+1EAB 1EAA
+1EAD 1EAC
+1EAF 1EAE
+1EB1 1EB0
+1EB3 1EB2
+1EB5 1EB4
+1EB7 1EB6
+1EB9 1EB8
+1EBB 1EBA
+1EBD 1EBC
+1EBF 1EBE
+1EC1 1EC0
+1EC3 1EC2
+1EC5 1EC4
+1EC7 1EC6
+1EC9 1EC8
+1ECB 1ECA
+1ECD 1ECC
+1ECF 1ECE
+1ED1 1ED0
+1ED3 1ED2
+1ED5 1ED4
+1ED7 1ED6
+1ED9 1ED8
+1EDB 1EDA
+1EDD 1EDC
+1EDF 1EDE
+1EE1 1EE0
+1EE3 1EE2
+1EE5 1EE4
+1EE7 1EE6
+1EE9 1EE8
+1EEB 1EEA
+1EED 1EEC
+1EEF 1EEE
+1EF1 1EF0
+1EF3 1EF2
+1EF5 1EF4
+1EF7 1EF6
+1EF9 1EF8
+1F00 1F08
+1F01 1F09
+1F02 1F0A
+1F03 1F0B
+1F04 1F0C
+1F05 1F0D
+1F06 1F0E
+1F07 1F0F
+1F10 1F18
+1F11 1F19
+1F12 1F1A
+1F13 1F1B
+1F14 1F1C
+1F15 1F1D
+1F20 1F28
+1F21 1F29
+1F22 1F2A
+1F23 1F2B
+1F24 1F2C
+1F25 1F2D
+1F26 1F2E
+1F27 1F2F
+1F30 1F38
+1F31 1F39
+1F32 1F3A
+1F33 1F3B
+1F34 1F3C
+1F35 1F3D
+1F36 1F3E
+1F37 1F3F
+1F40 1F48
+1F41 1F49
+1F42 1F4A
+1F43 1F4B
+1F44 1F4C
+1F45 1F4D
+1F51 1F59
+1F53 1F5B
+1F55 1F5D
+1F57 1F5F
+1F60 1F68
+1F61 1F69
+1F62 1F6A
+1F63 1F6B
+1F64 1F6C
+1F65 1F6D
+1F66 1F6E
+1F67 1F6F
+1F70 1FBA
+1F71 1FBB
+1F72 1FC8
+1F73 1FC9
+1F74 1FCA
+1F75 1FCB
+1F76 1FDA
+1F77 1FDB
+1F78 1FF8
+1F79 1FF9
+1F7A 1FEA
+1F7B 1FEB
+1F7C 1FFA
+1F7D 1FFB
+1FB0 1FB8
+1FB1 1FB9
+1FBE 0399
+1FD0 1FD8
+1FD1 1FD9
+1FE0 1FE8
+1FE1 1FE9
+1FE5 1FEC
+2170 2160
+2171 2161
+2172 2162
+2173 2163
+2174 2164
+2175 2165
+2176 2166
+2177 2167
+2178 2168
+2179 2169
+217A 216A
+217B 216B
+217C 216C
+217D 216D
+217E 216E
+217F 216F
+24D0 24B6
+24D1 24B7
+24D2 24B8
+24D3 24B9
+24D4 24BA
+24D5 24BB
+24D6 24BC
+24D7 24BD
+24D8 24BE
+24D9 24BF
+24DA 24C0
+24DB 24C1
+24DC 24C2
+24DD 24C3
+24DE 24C4
+24DF 24C5
+24E0 24C6
+24E1 24C7
+24E2 24C8
+24E3 24C9
+24E4 24CA
+24E5 24CB
+24E6 24CC
+24E7 24CD
+24E8 24CE
+24E9 24CF
+FF41 FF21
+FF42 FF22
+FF43 FF23
+FF44 FF24
+FF45 FF25
+FF46 FF26
+FF47 FF27
+FF48 FF28
+FF49 FF29
+FF4A FF2A
+FF4B FF2B
+FF4C FF2C
+FF4D FF2D
+FF4E FF2E
+FF4F FF2F
+FF50 FF30
+FF51 FF31
+FF52 FF32
+FF53 FF33
+FF54 FF34
+FF55 FF35
+FF56 FF36
+FF57 FF37
+FF58 FF38
+FF59 FF39
+FF5A FF3A
+10428 10400
+10429 10401
+1042A 10402
+1042B 10403
+1042C 10404
+1042D 10405
+1042E 10406
+1042F 10407
+10430 10408
+10431 10409
+10432 1040A
+10433 1040B
+10434 1040C
+10435 1040D
+10436 1040E
+10437 1040F
+10438 10410
+10439 10411
+1043A 10412
+1043B 10413
+1043C 10414
+1043D 10415
+1043E 10416
+1043F 10417
+10440 10418
+10441 10419
+10442 1041A
+10443 1041B
+10444 1041C
+10445 1041D
+10446 1041E
+10447 1041F
+10448 10420
+10449 10421
+1044A 10422
+1044B 10423
+1044C 10424
+1044D 10425
+END
diff --git a/Master/xemtex/perl/lib/unicore/To/Upper.pl b/Master/xemtex/perl/lib/unicore/To/Upper.pl
new file mode 100644
index 00000000000..0d1596f72d6
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/To/Upper.pl
@@ -0,0 +1,845 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+
+%utf8::ToSpecUpper =
+(
+'00DF' => "\x{0053}\x{0053}",
+'0149' => "\x{02BC}\x{004E}",
+'01F0' => "\x{004A}\x{030C}",
+'0390' => "\x{0399}\x{0308}\x{0301}",
+'03B0' => "\x{03A5}\x{0308}\x{0301}",
+'0587' => "\x{0535}\x{0552}",
+'1E96' => "\x{0048}\x{0331}",
+'1E97' => "\x{0054}\x{0308}",
+'1E98' => "\x{0057}\x{030A}",
+'1E99' => "\x{0059}\x{030A}",
+'1E9A' => "\x{0041}\x{02BE}",
+'1F50' => "\x{03A5}\x{0313}",
+'1F52' => "\x{03A5}\x{0313}\x{0300}",
+'1F54' => "\x{03A5}\x{0313}\x{0301}",
+'1F56' => "\x{03A5}\x{0313}\x{0342}",
+'1F80' => "\x{1F08}\x{0399}",
+'1F81' => "\x{1F09}\x{0399}",
+'1F82' => "\x{1F0A}\x{0399}",
+'1F83' => "\x{1F0B}\x{0399}",
+'1F84' => "\x{1F0C}\x{0399}",
+'1F85' => "\x{1F0D}\x{0399}",
+'1F86' => "\x{1F0E}\x{0399}",
+'1F87' => "\x{1F0F}\x{0399}",
+'1F88' => "\x{1F08}\x{0399}",
+'1F89' => "\x{1F09}\x{0399}",
+'1F8A' => "\x{1F0A}\x{0399}",
+'1F8B' => "\x{1F0B}\x{0399}",
+'1F8C' => "\x{1F0C}\x{0399}",
+'1F8D' => "\x{1F0D}\x{0399}",
+'1F8E' => "\x{1F0E}\x{0399}",
+'1F8F' => "\x{1F0F}\x{0399}",
+'1F90' => "\x{1F28}\x{0399}",
+'1F91' => "\x{1F29}\x{0399}",
+'1F92' => "\x{1F2A}\x{0399}",
+'1F93' => "\x{1F2B}\x{0399}",
+'1F94' => "\x{1F2C}\x{0399}",
+'1F95' => "\x{1F2D}\x{0399}",
+'1F96' => "\x{1F2E}\x{0399}",
+'1F97' => "\x{1F2F}\x{0399}",
+'1F98' => "\x{1F28}\x{0399}",
+'1F99' => "\x{1F29}\x{0399}",
+'1F9A' => "\x{1F2A}\x{0399}",
+'1F9B' => "\x{1F2B}\x{0399}",
+'1F9C' => "\x{1F2C}\x{0399}",
+'1F9D' => "\x{1F2D}\x{0399}",
+'1F9E' => "\x{1F2E}\x{0399}",
+'1F9F' => "\x{1F2F}\x{0399}",
+'1FA0' => "\x{1F68}\x{0399}",
+'1FA1' => "\x{1F69}\x{0399}",
+'1FA2' => "\x{1F6A}\x{0399}",
+'1FA3' => "\x{1F6B}\x{0399}",
+'1FA4' => "\x{1F6C}\x{0399}",
+'1FA5' => "\x{1F6D}\x{0399}",
+'1FA6' => "\x{1F6E}\x{0399}",
+'1FA7' => "\x{1F6F}\x{0399}",
+'1FA8' => "\x{1F68}\x{0399}",
+'1FA9' => "\x{1F69}\x{0399}",
+'1FAA' => "\x{1F6A}\x{0399}",
+'1FAB' => "\x{1F6B}\x{0399}",
+'1FAC' => "\x{1F6C}\x{0399}",
+'1FAD' => "\x{1F6D}\x{0399}",
+'1FAE' => "\x{1F6E}\x{0399}",
+'1FAF' => "\x{1F6F}\x{0399}",
+'1FB2' => "\x{1FBA}\x{0399}",
+'1FB3' => "\x{0391}\x{0399}",
+'1FB4' => "\x{0386}\x{0399}",
+'1FB6' => "\x{0391}\x{0342}",
+'1FB7' => "\x{0391}\x{0342}\x{0399}",
+'1FBC' => "\x{0391}\x{0399}",
+'1FC2' => "\x{1FCA}\x{0399}",
+'1FC3' => "\x{0397}\x{0399}",
+'1FC4' => "\x{0389}\x{0399}",
+'1FC6' => "\x{0397}\x{0342}",
+'1FC7' => "\x{0397}\x{0342}\x{0399}",
+'1FCC' => "\x{0397}\x{0399}",
+'1FD2' => "\x{0399}\x{0308}\x{0300}",
+'1FD3' => "\x{0399}\x{0308}\x{0301}",
+'1FD6' => "\x{0399}\x{0342}",
+'1FD7' => "\x{0399}\x{0308}\x{0342}",
+'1FE2' => "\x{03A5}\x{0308}\x{0300}",
+'1FE3' => "\x{03A5}\x{0308}\x{0301}",
+'1FE4' => "\x{03A1}\x{0313}",
+'1FE6' => "\x{03A5}\x{0342}",
+'1FE7' => "\x{03A5}\x{0308}\x{0342}",
+'1FF2' => "\x{1FFA}\x{0399}",
+'1FF3' => "\x{03A9}\x{0399}",
+'1FF4' => "\x{038F}\x{0399}",
+'1FF6' => "\x{03A9}\x{0342}",
+'1FF7' => "\x{03A9}\x{0342}\x{0399}",
+'1FFC' => "\x{03A9}\x{0399}",
+'FB00' => "\x{0046}\x{0046}",
+'FB01' => "\x{0046}\x{0049}",
+'FB02' => "\x{0046}\x{004C}",
+'FB03' => "\x{0046}\x{0046}\x{0049}",
+'FB04' => "\x{0046}\x{0046}\x{004C}",
+'FB05' => "\x{0053}\x{0054}",
+'FB06' => "\x{0053}\x{0054}",
+'FB13' => "\x{0544}\x{0546}",
+'FB14' => "\x{0544}\x{0535}",
+'FB15' => "\x{0544}\x{053B}",
+'FB16' => "\x{054E}\x{0546}",
+'FB17' => "\x{0544}\x{053D}",
+);
+
+return <<'END';
+0061 0041
+0062 0042
+0063 0043
+0064 0044
+0065 0045
+0066 0046
+0067 0047
+0068 0048
+0069 0049
+006A 004A
+006B 004B
+006C 004C
+006D 004D
+006E 004E
+006F 004F
+0070 0050
+0071 0051
+0072 0052
+0073 0053
+0074 0054
+0075 0055
+0076 0056
+0077 0057
+0078 0058
+0079 0059
+007A 005A
+00B5 039C
+00E0 00C0
+00E1 00C1
+00E2 00C2
+00E3 00C3
+00E4 00C4
+00E5 00C5
+00E6 00C6
+00E7 00C7
+00E8 00C8
+00E9 00C9
+00EA 00CA
+00EB 00CB
+00EC 00CC
+00ED 00CD
+00EE 00CE
+00EF 00CF
+00F0 00D0
+00F1 00D1
+00F2 00D2
+00F3 00D3
+00F4 00D4
+00F5 00D5
+00F6 00D6
+00F8 00D8
+00F9 00D9
+00FA 00DA
+00FB 00DB
+00FC 00DC
+00FD 00DD
+00FE 00DE
+00FF 0178
+0101 0100
+0103 0102
+0105 0104
+0107 0106
+0109 0108
+010B 010A
+010D 010C
+010F 010E
+0111 0110
+0113 0112
+0115 0114
+0117 0116
+0119 0118
+011B 011A
+011D 011C
+011F 011E
+0121 0120
+0123 0122
+0125 0124
+0127 0126
+0129 0128
+012B 012A
+012D 012C
+012F 012E
+0131 0049
+0133 0132
+0135 0134
+0137 0136
+013A 0139
+013C 013B
+013E 013D
+0140 013F
+0142 0141
+0144 0143
+0146 0145
+0148 0147
+014B 014A
+014D 014C
+014F 014E
+0151 0150
+0153 0152
+0155 0154
+0157 0156
+0159 0158
+015B 015A
+015D 015C
+015F 015E
+0161 0160
+0163 0162
+0165 0164
+0167 0166
+0169 0168
+016B 016A
+016D 016C
+016F 016E
+0171 0170
+0173 0172
+0175 0174
+0177 0176
+017A 0179
+017C 017B
+017E 017D
+017F 0053
+0183 0182
+0185 0184
+0188 0187
+018C 018B
+0192 0191
+0195 01F6
+0199 0198
+019E 0220
+01A1 01A0
+01A3 01A2
+01A5 01A4
+01A8 01A7
+01AD 01AC
+01B0 01AF
+01B4 01B3
+01B6 01B5
+01B9 01B8
+01BD 01BC
+01BF 01F7
+01C5 01C4
+01C6 01C4
+01C8 01C7
+01C9 01C7
+01CB 01CA
+01CC 01CA
+01CE 01CD
+01D0 01CF
+01D2 01D1
+01D4 01D3
+01D6 01D5
+01D8 01D7
+01DA 01D9
+01DC 01DB
+01DD 018E
+01DF 01DE
+01E1 01E0
+01E3 01E2
+01E5 01E4
+01E7 01E6
+01E9 01E8
+01EB 01EA
+01ED 01EC
+01EF 01EE
+01F2 01F1
+01F3 01F1
+01F5 01F4
+01F9 01F8
+01FB 01FA
+01FD 01FC
+01FF 01FE
+0201 0200
+0203 0202
+0205 0204
+0207 0206
+0209 0208
+020B 020A
+020D 020C
+020F 020E
+0211 0210
+0213 0212
+0215 0214
+0217 0216
+0219 0218
+021B 021A
+021D 021C
+021F 021E
+0223 0222
+0225 0224
+0227 0226
+0229 0228
+022B 022A
+022D 022C
+022F 022E
+0231 0230
+0233 0232
+0253 0181
+0254 0186
+0256 0189
+0257 018A
+0259 018F
+025B 0190
+0260 0193
+0263 0194
+0268 0197
+0269 0196
+026F 019C
+0272 019D
+0275 019F
+0280 01A6
+0283 01A9
+0288 01AE
+028A 01B1
+028B 01B2
+0292 01B7
+0345 0399
+03AC 0386
+03AD 0388
+03AE 0389
+03AF 038A
+03B1 0391
+03B2 0392
+03B3 0393
+03B4 0394
+03B5 0395
+03B6 0396
+03B7 0397
+03B8 0398
+03B9 0399
+03BA 039A
+03BB 039B
+03BC 039C
+03BD 039D
+03BE 039E
+03BF 039F
+03C0 03A0
+03C1 03A1
+03C2 03A3
+03C3 03A3
+03C4 03A4
+03C5 03A5
+03C6 03A6
+03C7 03A7
+03C8 03A8
+03C9 03A9
+03CA 03AA
+03CB 03AB
+03CC 038C
+03CD 038E
+03CE 038F
+03D0 0392
+03D1 0398
+03D5 03A6
+03D6 03A0
+03D9 03D8
+03DB 03DA
+03DD 03DC
+03DF 03DE
+03E1 03E0
+03E3 03E2
+03E5 03E4
+03E7 03E6
+03E9 03E8
+03EB 03EA
+03ED 03EC
+03EF 03EE
+03F0 039A
+03F1 03A1
+03F2 03A3
+03F5 0395
+0430 0410
+0431 0411
+0432 0412
+0433 0413
+0434 0414
+0435 0415
+0436 0416
+0437 0417
+0438 0418
+0439 0419
+043A 041A
+043B 041B
+043C 041C
+043D 041D
+043E 041E
+043F 041F
+0440 0420
+0441 0421
+0442 0422
+0443 0423
+0444 0424
+0445 0425
+0446 0426
+0447 0427
+0448 0428
+0449 0429
+044A 042A
+044B 042B
+044C 042C
+044D 042D
+044E 042E
+044F 042F
+0450 0400
+0451 0401
+0452 0402
+0453 0403
+0454 0404
+0455 0405
+0456 0406
+0457 0407
+0458 0408
+0459 0409
+045A 040A
+045B 040B
+045C 040C
+045D 040D
+045E 040E
+045F 040F
+0461 0460
+0463 0462
+0465 0464
+0467 0466
+0469 0468
+046B 046A
+046D 046C
+046F 046E
+0471 0470
+0473 0472
+0475 0474
+0477 0476
+0479 0478
+047B 047A
+047D 047C
+047F 047E
+0481 0480
+048B 048A
+048D 048C
+048F 048E
+0491 0490
+0493 0492
+0495 0494
+0497 0496
+0499 0498
+049B 049A
+049D 049C
+049F 049E
+04A1 04A0
+04A3 04A2
+04A5 04A4
+04A7 04A6
+04A9 04A8
+04AB 04AA
+04AD 04AC
+04AF 04AE
+04B1 04B0
+04B3 04B2
+04B5 04B4
+04B7 04B6
+04B9 04B8
+04BB 04BA
+04BD 04BC
+04BF 04BE
+04C2 04C1
+04C4 04C3
+04C6 04C5
+04C8 04C7
+04CA 04C9
+04CC 04CB
+04CE 04CD
+04D1 04D0
+04D3 04D2
+04D5 04D4
+04D7 04D6
+04D9 04D8
+04DB 04DA
+04DD 04DC
+04DF 04DE
+04E1 04E0
+04E3 04E2
+04E5 04E4
+04E7 04E6
+04E9 04E8
+04EB 04EA
+04ED 04EC
+04EF 04EE
+04F1 04F0
+04F3 04F2
+04F5 04F4
+04F9 04F8
+0501 0500
+0503 0502
+0505 0504
+0507 0506
+0509 0508
+050B 050A
+050D 050C
+050F 050E
+0561 0531
+0562 0532
+0563 0533
+0564 0534
+0565 0535
+0566 0536
+0567 0537
+0568 0538
+0569 0539
+056A 053A
+056B 053B
+056C 053C
+056D 053D
+056E 053E
+056F 053F
+0570 0540
+0571 0541
+0572 0542
+0573 0543
+0574 0544
+0575 0545
+0576 0546
+0577 0547
+0578 0548
+0579 0549
+057A 054A
+057B 054B
+057C 054C
+057D 054D
+057E 054E
+057F 054F
+0580 0550
+0581 0551
+0582 0552
+0583 0553
+0584 0554
+0585 0555
+0586 0556
+1E01 1E00
+1E03 1E02
+1E05 1E04
+1E07 1E06
+1E09 1E08
+1E0B 1E0A
+1E0D 1E0C
+1E0F 1E0E
+1E11 1E10
+1E13 1E12
+1E15 1E14
+1E17 1E16
+1E19 1E18
+1E1B 1E1A
+1E1D 1E1C
+1E1F 1E1E
+1E21 1E20
+1E23 1E22
+1E25 1E24
+1E27 1E26
+1E29 1E28
+1E2B 1E2A
+1E2D 1E2C
+1E2F 1E2E
+1E31 1E30
+1E33 1E32
+1E35 1E34
+1E37 1E36
+1E39 1E38
+1E3B 1E3A
+1E3D 1E3C
+1E3F 1E3E
+1E41 1E40
+1E43 1E42
+1E45 1E44
+1E47 1E46
+1E49 1E48
+1E4B 1E4A
+1E4D 1E4C
+1E4F 1E4E
+1E51 1E50
+1E53 1E52
+1E55 1E54
+1E57 1E56
+1E59 1E58
+1E5B 1E5A
+1E5D 1E5C
+1E5F 1E5E
+1E61 1E60
+1E63 1E62
+1E65 1E64
+1E67 1E66
+1E69 1E68
+1E6B 1E6A
+1E6D 1E6C
+1E6F 1E6E
+1E71 1E70
+1E73 1E72
+1E75 1E74
+1E77 1E76
+1E79 1E78
+1E7B 1E7A
+1E7D 1E7C
+1E7F 1E7E
+1E81 1E80
+1E83 1E82
+1E85 1E84
+1E87 1E86
+1E89 1E88
+1E8B 1E8A
+1E8D 1E8C
+1E8F 1E8E
+1E91 1E90
+1E93 1E92
+1E95 1E94
+1E9B 1E60
+1EA1 1EA0
+1EA3 1EA2
+1EA5 1EA4
+1EA7 1EA6
+1EA9 1EA8
+1EAB 1EAA
+1EAD 1EAC
+1EAF 1EAE
+1EB1 1EB0
+1EB3 1EB2
+1EB5 1EB4
+1EB7 1EB6
+1EB9 1EB8
+1EBB 1EBA
+1EBD 1EBC
+1EBF 1EBE
+1EC1 1EC0
+1EC3 1EC2
+1EC5 1EC4
+1EC7 1EC6
+1EC9 1EC8
+1ECB 1ECA
+1ECD 1ECC
+1ECF 1ECE
+1ED1 1ED0
+1ED3 1ED2
+1ED5 1ED4
+1ED7 1ED6
+1ED9 1ED8
+1EDB 1EDA
+1EDD 1EDC
+1EDF 1EDE
+1EE1 1EE0
+1EE3 1EE2
+1EE5 1EE4
+1EE7 1EE6
+1EE9 1EE8
+1EEB 1EEA
+1EED 1EEC
+1EEF 1EEE
+1EF1 1EF0
+1EF3 1EF2
+1EF5 1EF4
+1EF7 1EF6
+1EF9 1EF8
+1F00 1F08
+1F01 1F09
+1F02 1F0A
+1F03 1F0B
+1F04 1F0C
+1F05 1F0D
+1F06 1F0E
+1F07 1F0F
+1F10 1F18
+1F11 1F19
+1F12 1F1A
+1F13 1F1B
+1F14 1F1C
+1F15 1F1D
+1F20 1F28
+1F21 1F29
+1F22 1F2A
+1F23 1F2B
+1F24 1F2C
+1F25 1F2D
+1F26 1F2E
+1F27 1F2F
+1F30 1F38
+1F31 1F39
+1F32 1F3A
+1F33 1F3B
+1F34 1F3C
+1F35 1F3D
+1F36 1F3E
+1F37 1F3F
+1F40 1F48
+1F41 1F49
+1F42 1F4A
+1F43 1F4B
+1F44 1F4C
+1F45 1F4D
+1F51 1F59
+1F53 1F5B
+1F55 1F5D
+1F57 1F5F
+1F60 1F68
+1F61 1F69
+1F62 1F6A
+1F63 1F6B
+1F64 1F6C
+1F65 1F6D
+1F66 1F6E
+1F67 1F6F
+1F70 1FBA
+1F71 1FBB
+1F72 1FC8
+1F73 1FC9
+1F74 1FCA
+1F75 1FCB
+1F76 1FDA
+1F77 1FDB
+1F78 1FF8
+1F79 1FF9
+1F7A 1FEA
+1F7B 1FEB
+1F7C 1FFA
+1F7D 1FFB
+1FB0 1FB8
+1FB1 1FB9
+1FBE 0399
+1FD0 1FD8
+1FD1 1FD9
+1FE0 1FE8
+1FE1 1FE9
+1FE5 1FEC
+2170 2160
+2171 2161
+2172 2162
+2173 2163
+2174 2164
+2175 2165
+2176 2166
+2177 2167
+2178 2168
+2179 2169
+217A 216A
+217B 216B
+217C 216C
+217D 216D
+217E 216E
+217F 216F
+24D0 24B6
+24D1 24B7
+24D2 24B8
+24D3 24B9
+24D4 24BA
+24D5 24BB
+24D6 24BC
+24D7 24BD
+24D8 24BE
+24D9 24BF
+24DA 24C0
+24DB 24C1
+24DC 24C2
+24DD 24C3
+24DE 24C4
+24DF 24C5
+24E0 24C6
+24E1 24C7
+24E2 24C8
+24E3 24C9
+24E4 24CA
+24E5 24CB
+24E6 24CC
+24E7 24CD
+24E8 24CE
+24E9 24CF
+FF41 FF21
+FF42 FF22
+FF43 FF23
+FF44 FF24
+FF45 FF25
+FF46 FF26
+FF47 FF27
+FF48 FF28
+FF49 FF29
+FF4A FF2A
+FF4B FF2B
+FF4C FF2C
+FF4D FF2D
+FF4E FF2E
+FF4F FF2F
+FF50 FF30
+FF51 FF31
+FF52 FF32
+FF53 FF33
+FF54 FF34
+FF55 FF35
+FF56 FF36
+FF57 FF37
+FF58 FF38
+FF59 FF39
+FF5A FF3A
+10428 10400
+10429 10401
+1042A 10402
+1042B 10403
+1042C 10404
+1042D 10405
+1042E 10406
+1042F 10407
+10430 10408
+10431 10409
+10432 1040A
+10433 1040B
+10434 1040C
+10435 1040D
+10436 1040E
+10437 1040F
+10438 10410
+10439 10411
+1043A 10412
+1043B 10413
+1043C 10414
+1043D 10415
+1043E 10416
+1043F 10417
+10440 10418
+10441 10419
+10442 1041A
+10443 1041B
+10444 1041C
+10445 1041D
+10446 1041E
+10447 1041F
+10448 10420
+10449 10421
+1044A 10422
+1044B 10423
+1044C 10424
+1044D 10425
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/ASCII.pl b/Master/xemtex/perl/lib/unicore/lib/ASCII.pl
new file mode 100644
index 00000000000..42aa565bc1f
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/ASCII.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{ASCII}
+#
+# Meaning: [[:ASCII:]]
+#
+return <<'END';
+0000 007F
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Alnum.pl b/Master/xemtex/perl/lib/unicore/lib/Alnum.pl
new file mode 100644
index 00000000000..0ec13c55c44
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Alnum.pl
@@ -0,0 +1,423 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Alnum}
+#
+# Meaning: [[:Alnum:]]
+#
+return <<'END';
+0030 0039
+0041 005A
+0061 007A
+00AA
+00B2 00B3
+00B5
+00B9 00BA
+00BC 00BE
+00C0 00D6
+00D8 00F6
+00F8 0220
+0222 0233
+0250 02AD
+02B0 02B8
+02BB 02C1
+02D0 02D1
+02E0 02E4
+02EE
+0300 034F
+0360 036F
+037A
+0386
+0388 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F5
+0400 0481
+0483 0486
+0488 04CE
+04D0 04F5
+04F8 04F9
+0500 050F
+0531 0556
+0559
+0561 0587
+0591 05A1
+05A3 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4
+05D0 05EA
+05F0 05F2
+0621 063A
+0640 0655
+0660 0669
+066E 06D3
+06D5 06DC
+06DE 06E8
+06EA 06ED
+06F0 06FC
+0710 072C
+0730 074A
+0780 07B1
+0901 0903
+0905 0939
+093C 094D
+0950 0954
+0958 0963
+0966 096F
+0981 0983
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BC
+09BE 09C4
+09C7 09C8
+09CB 09CD
+09D7
+09DC 09DD
+09DF 09E3
+09E6 09F1
+09F4 09F9
+0A02
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3C
+0A3E 0A42
+0A47 0A48
+0A4B 0A4D
+0A59 0A5C
+0A5E
+0A66 0A74
+0A81 0A83
+0A85 0A8B
+0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABC 0AC5
+0AC7 0AC9
+0ACB 0ACD
+0AD0
+0AE0
+0AE6 0AEF
+0B01 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B36 0B39
+0B3C 0B43
+0B47 0B48
+0B4B 0B4D
+0B56 0B57
+0B5C 0B5D
+0B5F 0B61
+0B66 0B6F
+0B82 0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB5
+0BB7 0BB9
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCD
+0BD7
+0BE7 0BF2
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C3E 0C44
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0C60 0C61
+0C66 0C6F
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBE 0CC4
+0CC6 0CC8
+0CCA 0CCD
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0CE6 0CEF
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D43
+0D46 0D48
+0D4A 0D4D
+0D57
+0D60 0D61
+0D66 0D6F
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCA
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF3
+0E01 0E3A
+0E40 0E4E
+0E50 0E59
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB9
+0EBB 0EBD
+0EC0 0EC4
+0EC6
+0EC8 0ECD
+0ED0 0ED9
+0EDC 0EDD
+0F00
+0F18 0F19
+0F20 0F33
+0F35
+0F37
+0F39
+0F3E 0F47
+0F49 0F6A
+0F71 0F84
+0F86 0F8B
+0F90 0F97
+0F99 0FBC
+0FC6
+1000 1021
+1023 1027
+1029 102A
+102C 1032
+1036 1039
+1040 1049
+1050 1059
+10A0 10C5
+10D0 10F8
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1206
+1208 1246
+1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1286
+1288
+128A 128D
+1290 12AE
+12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12CE
+12D0 12D6
+12D8 12EE
+12F0 130E
+1310
+1312 1315
+1318 131E
+1320 1346
+1348 135A
+1369 137C
+13A0 13F4
+1401 166C
+166F 1676
+1681 169A
+16A0 16EA
+16EE 16F0
+1700 170C
+170E 1714
+1720 1734
+1740 1753
+1760 176C
+176E 1770
+1772 1773
+1780 17D3
+17D7
+17DC
+17E0 17E9
+180B 180D
+1810 1819
+1820 1877
+1880 18A9
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC2 1FC4
+1FC6 1FCC
+1FD0 1FD3
+1FD6 1FDB
+1FE0 1FEC
+1FF2 1FF4
+1FF6 1FFC
+2070 2071
+2074 2079
+207F 2089
+20D0 20EA
+2102
+2107
+210A 2113
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+212F 2131
+2133 2139
+213D 213F
+2145 2149
+2153 2183
+2460 249B
+24EA 24FE
+2776 2793
+3005 3007
+3021 302F
+3031 3035
+3038 303C
+3041 3096
+3099 309A
+309D 309F
+30A1 30FA
+30FC 30FF
+3105 312C
+3131 318E
+3192 3195
+31A0 31B7
+31F0 31FF
+3220 3229
+3251 325F
+3280 3289
+32B1 32BF
+3400 4DB5
+4E00 9FA5
+A000 A48C
+AC00 D7A3
+F900 FA2D
+FA30 FA6A
+FB00 FB06
+FB13 FB17
+FB1D FB28
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFB
+FE00 FE0F
+FE20 FE23
+FE70 FE74
+FE76 FEFC
+FF10 FF19
+FF21 FF3A
+FF41 FF5A
+FF66 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+10300 1031E
+10320 10323
+10330 1034A
+10400 10425
+10428 1044D
+1D165 1D169
+1D16D 1D172
+1D17B 1D182
+1D185 1D18B
+1D1AA 1D1AD
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C0
+1D4C2 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A3
+1D6A8 1D6C0
+1D6C2 1D6DA
+1D6DC 1D6FA
+1D6FC 1D714
+1D716 1D734
+1D736 1D74E
+1D750 1D76E
+1D770 1D788
+1D78A 1D7A8
+1D7AA 1D7C2
+1D7C4 1D7C9
+1D7CE 1D7FF
+20000 2A6D6
+2F800 2FA1D
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Alpha.pl b/Master/xemtex/perl/lib/unicore/lib/Alpha.pl
new file mode 100644
index 00000000000..35b0e3280be
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Alpha.pl
@@ -0,0 +1,390 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Alpha}
+#
+# Meaning: [[:Alpha:]]
+#
+return <<'END';
+0041 005A
+0061 007A
+00AA
+00B5
+00BA
+00C0 00D6
+00D8 00F6
+00F8 0220
+0222 0233
+0250 02AD
+02B0 02B8
+02BB 02C1
+02D0 02D1
+02E0 02E4
+02EE
+0300 034F
+0360 036F
+037A
+0386
+0388 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F5
+0400 0481
+0483 0486
+0488 04CE
+04D0 04F5
+04F8 04F9
+0500 050F
+0531 0556
+0559
+0561 0587
+0591 05A1
+05A3 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4
+05D0 05EA
+05F0 05F2
+0621 063A
+0640 0655
+066E 06D3
+06D5 06DC
+06DE 06E8
+06EA 06ED
+06FA 06FC
+0710 072C
+0730 074A
+0780 07B1
+0901 0903
+0905 0939
+093C 094D
+0950 0954
+0958 0963
+0981 0983
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BC
+09BE 09C4
+09C7 09C8
+09CB 09CD
+09D7
+09DC 09DD
+09DF 09E3
+09F0 09F1
+0A02
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3C
+0A3E 0A42
+0A47 0A48
+0A4B 0A4D
+0A59 0A5C
+0A5E
+0A70 0A74
+0A81 0A83
+0A85 0A8B
+0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABC 0AC5
+0AC7 0AC9
+0ACB 0ACD
+0AD0
+0AE0
+0B01 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B36 0B39
+0B3C 0B43
+0B47 0B48
+0B4B 0B4D
+0B56 0B57
+0B5C 0B5D
+0B5F 0B61
+0B82 0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB5
+0BB7 0BB9
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCD
+0BD7
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C3E 0C44
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0C60 0C61
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBE 0CC4
+0CC6 0CC8
+0CCA 0CCD
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D43
+0D46 0D48
+0D4A 0D4D
+0D57
+0D60 0D61
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCA
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF3
+0E01 0E3A
+0E40 0E4E
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB9
+0EBB 0EBD
+0EC0 0EC4
+0EC6
+0EC8 0ECD
+0EDC 0EDD
+0F00
+0F18 0F19
+0F35
+0F37
+0F39
+0F3E 0F47
+0F49 0F6A
+0F71 0F84
+0F86 0F8B
+0F90 0F97
+0F99 0FBC
+0FC6
+1000 1021
+1023 1027
+1029 102A
+102C 1032
+1036 1039
+1050 1059
+10A0 10C5
+10D0 10F8
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1206
+1208 1246
+1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1286
+1288
+128A 128D
+1290 12AE
+12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12CE
+12D0 12D6
+12D8 12EE
+12F0 130E
+1310
+1312 1315
+1318 131E
+1320 1346
+1348 135A
+13A0 13F4
+1401 166C
+166F 1676
+1681 169A
+16A0 16EA
+1700 170C
+170E 1714
+1720 1734
+1740 1753
+1760 176C
+176E 1770
+1772 1773
+1780 17D3
+17D7
+17DC
+180B 180D
+1820 1877
+1880 18A9
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC2 1FC4
+1FC6 1FCC
+1FD0 1FD3
+1FD6 1FDB
+1FE0 1FEC
+1FF2 1FF4
+1FF6 1FFC
+2071
+207F
+20D0 20EA
+2102
+2107
+210A 2113
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+212F 2131
+2133 2139
+213D 213F
+2145 2149
+3005 3006
+302A 302F
+3031 3035
+303B 303C
+3041 3096
+3099 309A
+309D 309F
+30A1 30FA
+30FC 30FF
+3105 312C
+3131 318E
+31A0 31B7
+31F0 31FF
+3400 4DB5
+4E00 9FA5
+A000 A48C
+AC00 D7A3
+F900 FA2D
+FA30 FA6A
+FB00 FB06
+FB13 FB17
+FB1D FB28
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFB
+FE00 FE0F
+FE20 FE23
+FE70 FE74
+FE76 FEFC
+FF21 FF3A
+FF41 FF5A
+FF66 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+10300 1031E
+10330 10349
+10400 10425
+10428 1044D
+1D165 1D169
+1D16D 1D172
+1D17B 1D182
+1D185 1D18B
+1D1AA 1D1AD
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C0
+1D4C2 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A3
+1D6A8 1D6C0
+1D6C2 1D6DA
+1D6DC 1D6FA
+1D6FC 1D714
+1D716 1D734
+1D736 1D74E
+1D750 1D76E
+1D770 1D788
+1D78A 1D7A8
+1D7AA 1D7C2
+1D7C4 1D7C9
+20000 2A6D6
+2F800 2FA1D
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Alphabet.pl b/Master/xemtex/perl/lib/unicore/lib/Alphabet.pl
new file mode 100644
index 00000000000..a909a31f000
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Alphabet.pl
@@ -0,0 +1,372 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Alphabetic} (and fuzzy permutations)
+#
+# Meaning: [\p{L}\p{OtherAlphabetic}]
+#
+return <<'END';
+0041 005A
+0061 007A
+00AA
+00B5
+00BA
+00C0 00D6
+00D8 00F6
+00F8 0220
+0222 0233
+0250 02AD
+02B0 02B8
+02BB 02C1
+02D0 02D1
+02E0 02E4
+02EE
+0345
+037A
+0386
+0388 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F5
+0400 0481
+048A 04CE
+04D0 04F5
+04F8 04F9
+0500 050F
+0531 0556
+0559
+0561 0587
+05B0 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4
+05D0 05EA
+05F0 05F2
+0621 063A
+0640 0655
+066E 06D3
+06D5 06DC
+06E1 06E8
+06ED
+06FA 06FC
+0710 072C
+0730 073F
+0780 07B1
+0901 0903
+0905 0939
+093D 094C
+0950
+0958 0963
+0981 0983
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BE 09C4
+09C7 09C8
+09CB 09CC
+09D7
+09DC 09DD
+09DF 09E3
+09F0 09F1
+0A02
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3E 0A42
+0A47 0A48
+0A4B 0A4C
+0A59 0A5C
+0A5E
+0A70 0A74
+0A81 0A83
+0A85 0A8B
+0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABD 0AC5
+0AC7 0AC9
+0ACB 0ACC
+0AD0
+0AE0
+0B01 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B36 0B39
+0B3D 0B43
+0B47 0B48
+0B4B 0B4C
+0B56 0B57
+0B5C 0B5D
+0B5F 0B61
+0B82 0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB5
+0BB7 0BB9
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCC
+0BD7
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C3E 0C44
+0C46 0C48
+0C4A 0C4C
+0C55 0C56
+0C60 0C61
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBE 0CC4
+0CC6 0CC8
+0CCA 0CCC
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D43
+0D46 0D48
+0D4A 0D4C
+0D57
+0D60 0D61
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF3
+0E01 0E3A
+0E40 0E46
+0E4D
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB9
+0EBB 0EBD
+0EC0 0EC4
+0EC6
+0ECD
+0EDC 0EDD
+0F00
+0F40 0F47
+0F49 0F6A
+0F71 0F81
+0F88 0F8B
+0F90 0F97
+0F99 0FBC
+1000 1021
+1023 1027
+1029 102A
+102C 1032
+1036
+1038
+1050 1059
+10A0 10C5
+10D0 10F8
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1206
+1208 1246
+1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1286
+1288
+128A 128D
+1290 12AE
+12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12CE
+12D0 12D6
+12D8 12EE
+12F0 130E
+1310
+1312 1315
+1318 131E
+1320 1346
+1348 135A
+13A0 13F4
+1401 166C
+166F 1676
+1681 169A
+16A0 16EA
+16EE 16F0
+1700 170C
+170E 1713
+1720 1733
+1740 1753
+1760 176C
+176E 1770
+1772 1773
+1780 17C8
+17D7
+17DC
+1820 1877
+1880 18A9
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC2 1FC4
+1FC6 1FCC
+1FD0 1FD3
+1FD6 1FDB
+1FE0 1FEC
+1FF2 1FF4
+1FF6 1FFC
+2071
+207F
+2102
+2107
+210A 2113
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+212F 2131
+2133 2139
+213D 213F
+2145 2149
+2160 2183
+3005 3006
+3031 3035
+303B 303C
+3041 3096
+309D 309F
+30A1 30FA
+30FC 30FF
+3105 312C
+3131 318E
+31A0 31B7
+31F0 31FF
+3400 4DB5
+4E00 9FA5
+A000 A48C
+AC00 D7A3
+F900 FA2D
+FA30 FA6A
+FB00 FB06
+FB13 FB17
+FB1D FB28
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFB
+FE70 FE74
+FE76 FEFC
+FF21 FF3A
+FF41 FF5A
+FF66 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+10300 1031E
+10330 1034A
+10400 10425
+10428 1044D
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C0
+1D4C2 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A3
+1D6A8 1D6C0
+1D6C2 1D6DA
+1D6DC 1D6FA
+1D6FC 1D714
+1D716 1D734
+1D736 1D74E
+1D750 1D76E
+1D770 1D788
+1D78A 1D7A8
+1D7AA 1D7C2
+1D7C4 1D7C9
+20000 2A6D6
+2F800 2FA1D
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Any.pl b/Master/xemtex/perl/lib/unicore/lib/Any.pl
new file mode 100644
index 00000000000..b30cb2fb7f2
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Any.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Any}
+# \p{Any}
+#
+# Meaning: [\x{0000}-\x{10FFFF}]
+#
+return <<'END';
+0000 10FFFF
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Arabic.pl b/Master/xemtex/perl/lib/unicore/lib/Arabic.pl
new file mode 100644
index 00000000000..ac5df6e8900
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Arabic.pl
@@ -0,0 +1,26 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Arabic} (and fuzzy permutations)
+#
+# Meaning: Script 'ARABIC'
+#
+return <<'END';
+0621 063A ARABIC
+0641 064A ARABIC
+066E 066F ARABIC
+0671 06D3 ARABIC
+06D5 ARABIC
+06E5 06E6 ARABIC
+06FA 06FC ARABIC
+FB50 FBB1 ARABIC
+FBD3 FD3D ARABIC
+FD50 FD8F ARABIC
+FD92 FDC7 ARABIC
+FDF0 FDFB ARABIC
+FE70 FE74 ARABIC
+FE76 FEFC ARABIC
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Armenian.pl b/Master/xemtex/perl/lib/unicore/lib/Armenian.pl
new file mode 100644
index 00000000000..6652079be3a
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Armenian.pl
@@ -0,0 +1,16 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Armenian} (and fuzzy permutations)
+#
+# Meaning: Script 'ARMENIAN'
+#
+return <<'END';
+0531 0556 ARMENIAN
+0559 ARMENIAN
+0561 0587 ARMENIAN
+FB13 FB17 ARMENIAN
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/AsciiHex.pl b/Master/xemtex/perl/lib/unicore/lib/AsciiHex.pl
new file mode 100644
index 00000000000..24c43ee3771
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/AsciiHex.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{AsciiHexDigit} (and fuzzy permutations)
+#
+# Meaning: Extended property 'ASCII_Hex_Digit'
+#
+return <<'END';
+0030 0039 ASCII_Hex_Digit
+0041 0046 ASCII_Hex_Digit
+0061 0066 ASCII_Hex_Digit
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Assigned.pl b/Master/xemtex/perl/lib/unicore/lib/Assigned.pl
new file mode 100644
index 00000000000..5bd9faffbd3
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Assigned.pl
@@ -0,0 +1,398 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Assigned}
+#
+# Meaning: All assigned code points
+#
+return <<'END';
+0000 0220
+0222 0233
+0250 02AD
+02B0 02EE
+0300 034F
+0360 036F
+0374 0375
+037A
+037E
+0384 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F6
+0400 0486
+0488 04CE
+04D0 04F5
+04F8 04F9
+0500 050F
+0531 0556
+0559 055F
+0561 0587
+0589 058A
+0591 05A1
+05A3 05B9
+05BB 05C4
+05D0 05EA
+05F0 05F4
+060C
+061B
+061F
+0621 063A
+0640 0655
+0660 06ED
+06F0 06FE
+0700 070D
+070F 072C
+0730 074A
+0780 07B1
+0901 0903
+0905 0939
+093C 094D
+0950 0954
+0958 0970
+0981 0983
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BC
+09BE 09C4
+09C7 09C8
+09CB 09CD
+09D7
+09DC 09DD
+09DF 09E3
+09E6 09FA
+0A02
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3C
+0A3E 0A42
+0A47 0A48
+0A4B 0A4D
+0A59 0A5C
+0A5E
+0A66 0A74
+0A81 0A83
+0A85 0A8B
+0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABC 0AC5
+0AC7 0AC9
+0ACB 0ACD
+0AD0
+0AE0
+0AE6 0AEF
+0B01 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B36 0B39
+0B3C 0B43
+0B47 0B48
+0B4B 0B4D
+0B56 0B57
+0B5C 0B5D
+0B5F 0B61
+0B66 0B70
+0B82 0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB5
+0BB7 0BB9
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCD
+0BD7
+0BE7 0BF2
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C3E 0C44
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0C60 0C61
+0C66 0C6F
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBE 0CC4
+0CC6 0CC8
+0CCA 0CCD
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0CE6 0CEF
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D43
+0D46 0D48
+0D4A 0D4D
+0D57
+0D60 0D61
+0D66 0D6F
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCA
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF4
+0E01 0E3A
+0E3F 0E5B
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB9
+0EBB 0EBD
+0EC0 0EC4
+0EC6
+0EC8 0ECD
+0ED0 0ED9
+0EDC 0EDD
+0F00 0F47
+0F49 0F6A
+0F71 0F8B
+0F90 0F97
+0F99 0FBC
+0FBE 0FCC
+0FCF
+1000 1021
+1023 1027
+1029 102A
+102C 1032
+1036 1039
+1040 1059
+10A0 10C5
+10D0 10F8
+10FB
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1206
+1208 1246
+1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1286
+1288
+128A 128D
+1290 12AE
+12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12CE
+12D0 12D6
+12D8 12EE
+12F0 130E
+1310
+1312 1315
+1318 131E
+1320 1346
+1348 135A
+1361 137C
+13A0 13F4
+1401 1676
+1680 169C
+16A0 16F0
+1700 170C
+170E 1714
+1720 1736
+1740 1753
+1760 176C
+176E 1770
+1772 1773
+1780 17DC
+17E0 17E9
+1800 180E
+1810 1819
+1820 1877
+1880 18A9
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FC4
+1FC6 1FD3
+1FD6 1FDB
+1FDD 1FEF
+1FF2 1FF4
+1FF6 1FFE
+2000 2052
+2057
+205F 2063
+206A 2071
+2074 208E
+20A0 20B1
+20D0 20EA
+2100 213A
+213D 214B
+2153 2183
+2190 23CE
+2400 2426
+2440 244A
+2460 24FE
+2500 2613
+2616 2617
+2619 267D
+2680 2689
+2701 2704
+2706 2709
+270C 2727
+2729 274B
+274D
+274F 2752
+2756
+2758 275E
+2761 2794
+2798 27AF
+27B1 27BE
+27D0 27EB
+27F0 2AFF
+2E80 2E99
+2E9B 2EF3
+2F00 2FD5
+2FF0 2FFB
+3000 303F
+3041 3096
+3099 30FF
+3105 312C
+3131 318E
+3190 31B7
+31F0 321C
+3220 3243
+3251 327B
+327F 32CB
+32D0 32FE
+3300 3376
+337B 33DD
+33E0 33FE
+3400 4DB5
+4E00 9FA5
+A000 A48C
+A490 A4C6
+AC00 D7A3
+D800 FA2D
+FA30 FA6A
+FB00 FB06
+FB13 FB17
+FB1D FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3F
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFC
+FE00 FE0F
+FE20 FE23
+FE30 FE46
+FE49 FE52
+FE54 FE66
+FE68 FE6B
+FE70 FE74
+FE76 FEFC
+FEFF
+FF01 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+FFE0 FFE6
+FFE8 FFEE
+FFF9 FFFD
+10300 1031E
+10320 10323
+10330 1034A
+10400 10425
+10428 1044D
+1D000 1D0F5
+1D100 1D126
+1D12A 1D1DD
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C0
+1D4C2 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A3
+1D6A8 1D7C9
+1D7CE 1D7FF
+20000 2A6D6
+2F800 2FA1D
+E0001
+E0020 E007F
+F0000 FFFFD
+100000 10FFFD
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Bengali.pl b/Master/xemtex/perl/lib/unicore/lib/Bengali.pl
new file mode 100644
index 00000000000..5d2b9db5849
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Bengali.pl
@@ -0,0 +1,27 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Bengali} (and fuzzy permutations)
+#
+# Meaning: Script 'BENGALI'
+#
+return <<'END';
+0981 0983 BENGALI
+0985 098C BENGALI
+098F 0990 BENGALI
+0993 09A8 BENGALI
+09AA 09B0 BENGALI
+09B2 BENGALI
+09B6 09B9 BENGALI
+09BC BENGALI
+09BE 09C4 BENGALI
+09C7 09C8 BENGALI
+09CB 09CD BENGALI
+09D7 BENGALI
+09DC 09DD BENGALI
+09DF 09E3 BENGALI
+09E6 09F1 BENGALI
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiAL.pl b/Master/xemtex/perl/lib/unicore/lib/BidiAL.pl
new file mode 100644
index 00000000000..4149869f8bb
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiAL.pl
@@ -0,0 +1,33 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiAL}
+#
+# Meaning: Bi-directional category 'AL'
+#
+return <<'END';
+061B
+061F
+0621 063A
+0640 064A
+066D 066F
+0671 06D5
+06DD
+06E5 06E6
+06FA 06FE
+0700 070D
+0710
+0712 072C
+0780 07A5
+07B1
+FB50 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFC
+FE70 FE74
+FE76 FEFC
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiAN.pl b/Master/xemtex/perl/lib/unicore/lib/BidiAN.pl
new file mode 100644
index 00000000000..c5defcb1fb8
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiAN.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiAN}
+#
+# Meaning: Bi-directional category 'AN'
+#
+return <<'END';
+0660 0669
+066B 066C
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiB.pl b/Master/xemtex/perl/lib/unicore/lib/BidiB.pl
new file mode 100644
index 00000000000..85572fec078
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiB.pl
@@ -0,0 +1,17 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiB}
+#
+# Meaning: Bi-directional category 'B'
+#
+return <<'END';
+000A
+000D
+001C 001E
+0085
+2029
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiBN.pl b/Master/xemtex/perl/lib/unicore/lib/BidiBN.pl
new file mode 100644
index 00000000000..b810db1e76c
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiBN.pl
@@ -0,0 +1,26 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiBN}
+#
+# Meaning: Bi-directional category 'BN'
+#
+return <<'END';
+0000 0008
+000E 001B
+007F 0084
+0086 009F
+070F
+180E
+200B 200D
+2060 2063
+206A 206F
+FEFF
+FFF9 FFFB
+1D173 1D17A
+E0001
+E0020 E007F
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiCS.pl b/Master/xemtex/perl/lib/unicore/lib/BidiCS.pl
new file mode 100644
index 00000000000..7f17238b931
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiCS.pl
@@ -0,0 +1,23 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiCS}
+#
+# Meaning: Bi-directional category 'CS'
+#
+return <<'END';
+002C
+002E
+003A
+00A0
+060C
+FE50
+FE52
+FE55
+FF0C
+FF0E
+FF1A
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiCont.pl b/Master/xemtex/perl/lib/unicore/lib/BidiCont.pl
new file mode 100644
index 00000000000..070ad87ba82
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiCont.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiControl} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Bidi_Control'
+#
+return <<'END';
+200E 200F Bidi_Control
+202A 202E Bidi_Control
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiEN.pl b/Master/xemtex/perl/lib/unicore/lib/BidiEN.pl
new file mode 100644
index 00000000000..24a291f864b
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiEN.pl
@@ -0,0 +1,23 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiEN}
+#
+# Meaning: Bi-directional category 'EN'
+#
+return <<'END';
+0030 0039
+00B2 00B3
+00B9
+06F0 06F9
+2070
+2074 2079
+2080 2089
+2460 249B
+24EA
+FF10 FF19
+1D7CE 1D7FF
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiES.pl b/Master/xemtex/perl/lib/unicore/lib/BidiES.pl
new file mode 100644
index 00000000000..9810f8118df
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiES.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiES}
+#
+# Meaning: Bi-directional category 'ES'
+#
+return <<'END';
+002F
+FF0F
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiET.pl b/Master/xemtex/perl/lib/unicore/lib/BidiET.pl
new file mode 100644
index 00000000000..234cf5ff590
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiET.pl
@@ -0,0 +1,36 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiET}
+#
+# Meaning: Bi-directional category 'ET'
+#
+return <<'END';
+0023 0025
+002B
+002D
+00A2 00A5
+00B0 00B1
+066A
+09F2 09F3
+0E3F
+17DB
+2030 2034
+207A 207B
+208A 208B
+20A0 20B1
+212E
+2212 2213
+FB29
+FE5F
+FE62 FE63
+FE69 FE6A
+FF03 FF05
+FF0B
+FF0D
+FFE0 FFE1
+FFE5 FFE6
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiL.pl b/Master/xemtex/perl/lib/unicore/lib/BidiL.pl
new file mode 100644
index 00000000000..f4033f28e46
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiL.pl
@@ -0,0 +1,366 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiL}
+#
+# Meaning: Bi-directional category 'L'
+#
+return <<'END';
+0041 005A
+0061 007A
+00AA
+00B5
+00BA
+00C0 00D6
+00D8 00F6
+00F8 0220
+0222 0233
+0250 02AD
+02B0 02B8
+02BB 02C1
+02D0 02D1
+02E0 02E4
+02EE
+037A
+0386
+0388 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F5
+0400 0482
+048A 04CE
+04D0 04F5
+04F8 04F9
+0500 050F
+0531 0556
+0559 055F
+0561 0587
+0589
+0903
+0905 0939
+093D 0940
+0949 094C
+0950
+0958 0961
+0964 0970
+0982 0983
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BE 09C0
+09C7 09C8
+09CB 09CC
+09D7
+09DC 09DD
+09DF 09E1
+09E6 09F1
+09F4 09FA
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3E 0A40
+0A59 0A5C
+0A5E
+0A66 0A6F
+0A72 0A74
+0A83
+0A85 0A8B
+0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABD 0AC0
+0AC9
+0ACB 0ACC
+0AD0
+0AE0
+0AE6 0AEF
+0B02 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B36 0B39
+0B3D 0B3E
+0B40
+0B47 0B48
+0B4B 0B4C
+0B57
+0B5C 0B5D
+0B5F 0B61
+0B66 0B70
+0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB5
+0BB7 0BB9
+0BBE 0BBF
+0BC1 0BC2
+0BC6 0BC8
+0BCA 0BCC
+0BD7
+0BE7 0BF2
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C41 0C44
+0C60 0C61
+0C66 0C6F
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBE
+0CC0 0CC4
+0CC7 0CC8
+0CCA 0CCB
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0CE6 0CEF
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D40
+0D46 0D48
+0D4A 0D4C
+0D57
+0D60 0D61
+0D66 0D6F
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCF 0DD1
+0DD8 0DDF
+0DF2 0DF4
+0E01 0E30
+0E32 0E33
+0E40 0E46
+0E4F 0E5B
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB0
+0EB2 0EB3
+0EBD
+0EC0 0EC4
+0EC6
+0ED0 0ED9
+0EDC 0EDD
+0F00 0F17
+0F1A 0F34
+0F36
+0F38
+0F3E 0F47
+0F49 0F6A
+0F7F
+0F85
+0F88 0F8B
+0FBE 0FC5
+0FC7 0FCC
+0FCF
+1000 1021
+1023 1027
+1029 102A
+102C
+1031
+1038
+1040 1057
+10A0 10C5
+10D0 10F8
+10FB
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1206
+1208 1246
+1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1286
+1288
+128A 128D
+1290 12AE
+12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12CE
+12D0 12D6
+12D8 12EE
+12F0 130E
+1310
+1312 1315
+1318 131E
+1320 1346
+1348 135A
+1361 137C
+13A0 13F4
+1401 1676
+1681 169A
+16A0 16F0
+1700 170C
+170E 1711
+1720 1731
+1735 1736
+1740 1751
+1760 176C
+176E 1770
+1780 17B6
+17BE 17C5
+17C7 17C8
+17D4 17DA
+17DC
+17E0 17E9
+1810 1819
+1820 1877
+1880 18A8
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC2 1FC4
+1FC6 1FCC
+1FD0 1FD3
+1FD6 1FDB
+1FE0 1FEC
+1FF2 1FF4
+1FF6 1FFC
+200E
+2071
+207F
+2102
+2107
+210A 2113
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+212F 2131
+2133 2139
+213D 213F
+2145 2149
+2160 2183
+2336 237A
+2395
+249C 24E9
+3005 3007
+3021 3029
+3031 3035
+3038 303C
+3041 3096
+309D 309F
+30A1 30FA
+30FC 30FF
+3105 312C
+3131 318E
+3190 31B7
+31F0 321C
+3220 3243
+3260 327B
+327F 32B0
+32C0 32CB
+32D0 32FE
+3300 3376
+337B 33DD
+33E0 33FE
+A000 A48C
+F900 FA2D
+FA30 FA6A
+FB00 FB06
+FB13 FB17
+FF21 FF3A
+FF41 FF5A
+FF66 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+10300 1031E
+10320 10323
+10330 1034A
+10400 10425
+10428 1044D
+1D000 1D0F5
+1D100 1D126
+1D12A 1D166
+1D16A 1D172
+1D183 1D184
+1D18C 1D1A9
+1D1AE 1D1DD
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C0
+1D4C2 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A3
+1D6A8 1D7C9
+2F800 2FA1D
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiLRE.pl b/Master/xemtex/perl/lib/unicore/lib/BidiLRE.pl
new file mode 100644
index 00000000000..5070363fc5c
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiLRE.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiLRE}
+#
+# Meaning: Bi-directional category 'LRE'
+#
+return <<'END';
+202A
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiLRO.pl b/Master/xemtex/perl/lib/unicore/lib/BidiLRO.pl
new file mode 100644
index 00000000000..52ea9600f38
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiLRO.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiLRO}
+#
+# Meaning: Bi-directional category 'LRO'
+#
+return <<'END';
+202D
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiNSM.pl b/Master/xemtex/perl/lib/unicore/lib/BidiNSM.pl
new file mode 100644
index 00000000000..7e2f4b10820
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiNSM.pl
@@ -0,0 +1,115 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiNSM}
+#
+# Meaning: Bi-directional category 'NSM'
+#
+return <<'END';
+0300 034F
+0360 036F
+0483 0486
+0488 0489
+0591 05A1
+05A3 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4
+064B 0655
+0670
+06D6 06DC
+06DE 06E4
+06E7 06E8
+06EA 06ED
+0711
+0730 074A
+07A6 07B0
+0901 0902
+093C
+0941 0948
+094D
+0951 0954
+0962 0963
+0981
+09BC
+09C1 09C4
+09CD
+09E2 09E3
+0A02
+0A3C
+0A41 0A42
+0A47 0A48
+0A4B 0A4D
+0A70 0A71
+0A81 0A82
+0ABC
+0AC1 0AC5
+0AC7 0AC8
+0ACD
+0B01
+0B3C
+0B3F
+0B41 0B43
+0B4D
+0B56
+0B82
+0BC0
+0BCD
+0C3E 0C40
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0CBF
+0CC6
+0CCC 0CCD
+0D41 0D43
+0D4D
+0DCA
+0DD2 0DD4
+0DD6
+0E31
+0E34 0E3A
+0E47 0E4E
+0EB1
+0EB4 0EB9
+0EBB 0EBC
+0EC8 0ECD
+0F18 0F19
+0F35
+0F37
+0F39
+0F71 0F7E
+0F80 0F84
+0F86 0F87
+0F90 0F97
+0F99 0FBC
+0FC6
+102D 1030
+1032
+1036 1037
+1039
+1058 1059
+1712 1714
+1732 1734
+1752 1753
+1772 1773
+17B7 17BD
+17C6
+17C9 17D3
+180B 180D
+18A9
+20D0 20EA
+302A 302F
+3099 309A
+FB1E
+FE00 FE0F
+FE20 FE23
+1D167 1D169
+1D17B 1D182
+1D185 1D18B
+1D1AA 1D1AD
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiON.pl b/Master/xemtex/perl/lib/unicore/lib/BidiON.pl
new file mode 100644
index 00000000000..7fe891ebad3
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiON.pl
@@ -0,0 +1,121 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiON}
+#
+# Meaning: Bi-directional category 'ON'
+#
+return <<'END';
+0021 0022
+0026 002A
+003B 0040
+005B 0060
+007B 007E
+00A1
+00A6 00A9
+00AB 00AF
+00B4
+00B6 00B8
+00BB 00BF
+00D7
+00F7
+02B9 02BA
+02C2 02CF
+02D2 02DF
+02E5 02ED
+0374 0375
+037E
+0384 0385
+0387
+03F6
+058A
+06E9
+0F3A 0F3D
+169B 169C
+1800 180A
+1FBD
+1FBF 1FC1
+1FCD 1FCF
+1FDD 1FDF
+1FED 1FEF
+1FFD 1FFE
+2010 2027
+2035 2052
+2057
+207C 207E
+208C 208E
+2100 2101
+2103 2106
+2108 2109
+2114
+2116 2118
+211E 2123
+2125
+2127
+2129
+2132
+213A
+2140 2144
+214A 214B
+2153 215F
+2190 2211
+2214 2335
+237B 2394
+2396 23CE
+2400 2426
+2440 244A
+24EB 24FE
+2500 2613
+2616 2617
+2619 267D
+2680 2689
+2701 2704
+2706 2709
+270C 2727
+2729 274B
+274D
+274F 2752
+2756
+2758 275E
+2761 2794
+2798 27AF
+27B1 27BE
+27D0 27EB
+27F0 2AFF
+2E80 2E99
+2E9B 2EF3
+2F00 2FD5
+2FF0 2FFB
+3001 3004
+3008 3020
+3030
+3036 3037
+303D 303F
+309B 309C
+30A0
+30FB
+3251 325F
+32B1 32BF
+A490 A4C6
+FD3E FD3F
+FE30 FE46
+FE49 FE4F
+FE51
+FE54
+FE56 FE5E
+FE60 FE61
+FE64 FE66
+FE68
+FE6B
+FF01 FF02
+FF06 FF0A
+FF1B FF20
+FF3B FF40
+FF5B FF65
+FFE2 FFE4
+FFE8 FFEE
+FFFC FFFD
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiPDF.pl b/Master/xemtex/perl/lib/unicore/lib/BidiPDF.pl
new file mode 100644
index 00000000000..ef251bd04ce
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiPDF.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiPDF}
+#
+# Meaning: Bi-directional category 'PDF'
+#
+return <<'END';
+202C
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiR.pl b/Master/xemtex/perl/lib/unicore/lib/BidiR.pl
new file mode 100644
index 00000000000..4d62027f26b
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiR.pl
@@ -0,0 +1,26 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiR}
+#
+# Meaning: Bi-directional category 'R'
+#
+return <<'END';
+05BE
+05C0
+05C3
+05D0 05EA
+05F0 05F4
+200F
+FB1D
+FB1F FB28
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FB4F
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiRLE.pl b/Master/xemtex/perl/lib/unicore/lib/BidiRLE.pl
new file mode 100644
index 00000000000..dd2162396cc
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiRLE.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiRLE}
+#
+# Meaning: Bi-directional category 'RLE'
+#
+return <<'END';
+202B
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiRLO.pl b/Master/xemtex/perl/lib/unicore/lib/BidiRLO.pl
new file mode 100644
index 00000000000..244385588b6
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiRLO.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiRLO}
+#
+# Meaning: Bi-directional category 'RLO'
+#
+return <<'END';
+202E
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiS.pl b/Master/xemtex/perl/lib/unicore/lib/BidiS.pl
new file mode 100644
index 00000000000..27207fa5197
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiS.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiS}
+#
+# Meaning: Bi-directional category 'S'
+#
+return <<'END';
+0009
+000B
+001F
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/BidiWS.pl b/Master/xemtex/perl/lib/unicore/lib/BidiWS.pl
new file mode 100644
index 00000000000..11896597aea
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/BidiWS.pl
@@ -0,0 +1,20 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiWS}
+#
+# Meaning: Bi-directional category 'WS'
+#
+return <<'END';
+000C
+0020
+1680
+2000 200A
+2028
+202F
+205F
+3000
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Blank.pl b/Master/xemtex/perl/lib/unicore/lib/Blank.pl
new file mode 100644
index 00000000000..96498cb22fe
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Blank.pl
@@ -0,0 +1,20 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Blank}
+#
+# Meaning: [[:Blank:]]
+#
+return <<'END';
+0009
+0020
+00A0
+1680
+2000 200B
+202F
+205F
+3000
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Bopomofo.pl b/Master/xemtex/perl/lib/unicore/lib/Bopomofo.pl
new file mode 100644
index 00000000000..525797c8b8d
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Bopomofo.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Bopomofo} (and fuzzy permutations)
+#
+# Meaning: Script 'BOPOMOFO'
+#
+return <<'END';
+3105 312C BOPOMOFO
+31A0 31B7 BOPOMOFO
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Buhid.pl b/Master/xemtex/perl/lib/unicore/lib/Buhid.pl
new file mode 100644
index 00000000000..c1ad8f86d2d
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Buhid.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Buhid} (and fuzzy permutations)
+#
+# Meaning: Script 'BUHID'
+#
+return <<'END';
+1740 1753 BUHID
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/C.pl b/Master/xemtex/perl/lib/unicore/lib/C.pl
new file mode 100644
index 00000000000..bbe5b39e482
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/C.pl
@@ -0,0 +1,400 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{C}
+# \p{C} (and fuzzy permutations)
+#
+# Meaning: Major Category 'C'
+#
+return <<'END';
+0000 001F
+007F 009F
+0221
+0234 024F
+02AE 02AF
+02EF 02FF
+0350 035F
+0370 0373
+0376 0379
+037B 037D
+037F 0383
+038B
+038D
+03A2
+03CF
+03F7 03FF
+0487
+04CF
+04F6 04F7
+04FA 04FF
+0510 0530
+0557 0558
+0560
+0588
+058B 0590
+05A2
+05BA
+05C5 05CF
+05EB 05EF
+05F5 060B
+060D 061A
+061C 061E
+0620
+063B 063F
+0656 065F
+06DD
+06EE 06EF
+06FF
+070E 070F
+072D 072F
+074B 077F
+07B2 0900
+0904
+093A 093B
+094E 094F
+0955 0957
+0971 0980
+0984
+098D 098E
+0991 0992
+09A9
+09B1
+09B3 09B5
+09BA 09BB
+09BD
+09C5 09C6
+09C9 09CA
+09CE 09D6
+09D8 09DB
+09DE
+09E4 09E5
+09FB 0A01
+0A03 0A04
+0A0B 0A0E
+0A11 0A12
+0A29
+0A31
+0A34
+0A37
+0A3A 0A3B
+0A3D
+0A43 0A46
+0A49 0A4A
+0A4E 0A58
+0A5D
+0A5F 0A65
+0A75 0A80
+0A84
+0A8C
+0A8E
+0A92
+0AA9
+0AB1
+0AB4
+0ABA 0ABB
+0AC6
+0ACA
+0ACE 0ACF
+0AD1 0ADF
+0AE1 0AE5
+0AF0 0B00
+0B04
+0B0D 0B0E
+0B11 0B12
+0B29
+0B31
+0B34 0B35
+0B3A 0B3B
+0B44 0B46
+0B49 0B4A
+0B4E 0B55
+0B58 0B5B
+0B5E
+0B62 0B65
+0B71 0B81
+0B84
+0B8B 0B8D
+0B91
+0B96 0B98
+0B9B
+0B9D
+0BA0 0BA2
+0BA5 0BA7
+0BAB 0BAD
+0BB6
+0BBA 0BBD
+0BC3 0BC5
+0BC9
+0BCE 0BD6
+0BD8 0BE6
+0BF3 0C00
+0C04
+0C0D
+0C11
+0C29
+0C34
+0C3A 0C3D
+0C45
+0C49
+0C4E 0C54
+0C57 0C5F
+0C62 0C65
+0C70 0C81
+0C84
+0C8D
+0C91
+0CA9
+0CB4
+0CBA 0CBD
+0CC5
+0CC9
+0CCE 0CD4
+0CD7 0CDD
+0CDF
+0CE2 0CE5
+0CF0 0D01
+0D04
+0D0D
+0D11
+0D29
+0D3A 0D3D
+0D44 0D45
+0D49
+0D4E 0D56
+0D58 0D5F
+0D62 0D65
+0D70 0D81
+0D84
+0D97 0D99
+0DB2
+0DBC
+0DBE 0DBF
+0DC7 0DC9
+0DCB 0DCE
+0DD5
+0DD7
+0DE0 0DF1
+0DF5 0E00
+0E3B 0E3E
+0E5C 0E80
+0E83
+0E85 0E86
+0E89
+0E8B 0E8C
+0E8E 0E93
+0E98
+0EA0
+0EA4
+0EA6
+0EA8 0EA9
+0EAC
+0EBA
+0EBE 0EBF
+0EC5
+0EC7
+0ECE 0ECF
+0EDA 0EDB
+0EDE 0EFF
+0F48
+0F6B 0F70
+0F8C 0F8F
+0F98
+0FBD
+0FCD 0FCE
+0FD0 0FFF
+1022
+1028
+102B
+1033 1035
+103A 103F
+105A 109F
+10C6 10CF
+10F9 10FA
+10FC 10FF
+115A 115E
+11A3 11A7
+11FA 11FF
+1207
+1247
+1249
+124E 124F
+1257
+1259
+125E 125F
+1287
+1289
+128E 128F
+12AF
+12B1
+12B6 12B7
+12BF
+12C1
+12C6 12C7
+12CF
+12D7
+12EF
+130F
+1311
+1316 1317
+131F
+1347
+135B 1360
+137D 139F
+13F5 1400
+1677 167F
+169D 169F
+16F1 16FF
+170D
+1715 171F
+1737 173F
+1754 175F
+176D
+1771
+1774 177F
+17DD 17DF
+17EA 17FF
+180E 180F
+181A 181F
+1878 187F
+18AA 1DFF
+1E9C 1E9F
+1EFA 1EFF
+1F16 1F17
+1F1E 1F1F
+1F46 1F47
+1F4E 1F4F
+1F58
+1F5A
+1F5C
+1F5E
+1F7E 1F7F
+1FB5
+1FC5
+1FD4 1FD5
+1FDC
+1FF0 1FF1
+1FF5
+1FFF
+200C 200F
+202A 202E
+2053 2056
+2058 205E
+2060 206F
+2072 2073
+208F 209F
+20B2 20CF
+20EB 20FF
+213B 213C
+214C 2152
+2184 218F
+23CF 23FF
+2427 243F
+244B 245F
+24FF
+2614 2615
+2618
+267E 267F
+268A 2700
+2705
+270A 270B
+2728
+274C
+274E
+2753 2755
+2757
+275F 2760
+2795 2797
+27B0
+27BF 27CF
+27EC 27EF
+2B00 2E7F
+2E9A
+2EF4 2EFF
+2FD6 2FEF
+2FFC 2FFF
+3040
+3097 3098
+3100 3104
+312D 3130
+318F
+31B8 31EF
+321D 321F
+3244 3250
+327C 327E
+32CC 32CF
+32FF
+3377 337A
+33DE 33DF
+33FF
+4DB6 4DFF
+9FA6 9FFF
+A48D A48F
+A4C7 ABFF
+D7A4 F8FF
+FA2E FA2F
+FA6B FAFF
+FB07 FB12
+FB18 FB1C
+FB37
+FB3D
+FB3F
+FB42
+FB45
+FBB2 FBD2
+FD40 FD4F
+FD90 FD91
+FDC8 FDEF
+FDFD FDFF
+FE10 FE1F
+FE24 FE2F
+FE47 FE48
+FE53
+FE67
+FE6C FE6F
+FE75
+FEFD FF00
+FFBF FFC1
+FFC8 FFC9
+FFD0 FFD1
+FFD8 FFD9
+FFDD FFDF
+FFE7
+FFEF FFFB
+FFFE 102FF
+1031F
+10324 1032F
+1034B 103FF
+10426 10427
+1044E 1CFFF
+1D0F6 1D0FF
+1D127 1D129
+1D173 1D17A
+1D1DE 1D3FF
+1D455
+1D49D
+1D4A0 1D4A1
+1D4A3 1D4A4
+1D4A7 1D4A8
+1D4AD
+1D4BA
+1D4BC
+1D4C1
+1D4C4
+1D506
+1D50B 1D50C
+1D515
+1D51D
+1D53A
+1D53F
+1D545
+1D547 1D549
+1D551
+1D6A4 1D6A7
+1D7CA 1D7CD
+1D800 1FFFF
+2A6D7 2F7FF
+2FA1E 10FFFF
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Canadian.pl b/Master/xemtex/perl/lib/unicore/lib/Canadian.pl
new file mode 100644
index 00000000000..e4942b1d441
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Canadian.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{CanadianAboriginal} (and fuzzy permutations)
+#
+# Meaning: Script 'CANADIAN_ABORIGINAL'
+#
+return <<'END';
+1401 166C CANADIAN_ABORIGINAL
+166F 1676 CANADIAN_ABORIGINAL
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Canon.pl b/Master/xemtex/perl/lib/unicore/lib/Canon.pl
new file mode 100644
index 00000000000..4d30c4b3439
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Canon.pl
@@ -0,0 +1,224 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Canon}
+#
+# Meaning: Decomposes to multiple characters
+#
+return <<'END';
+00C0 00C5
+00C7 00CF
+00D1 00D6
+00D9 00DD
+00E0 00E5
+00E7 00EF
+00F1 00F6
+00F9 00FD
+00FF 010F
+0112 0125
+0128 0130
+0134 0137
+0139 013E
+0143 0148
+014C 0151
+0154 0165
+0168 017E
+01A0 01A1
+01AF 01B0
+01CD 01DC
+01DE 01E3
+01E6 01F0
+01F4 01F5
+01F8 021B
+021E 021F
+0226 0233
+0340 0341
+0343 0344
+0374
+037E
+0385 038A
+038C
+038E 0390
+03AA 03B0
+03CA 03CE
+03D3 03D4
+0400 0401
+0403
+0407
+040C 040E
+0419
+0439
+0450 0451
+0453
+0457
+045C 045E
+0476 0477
+04C1 04C2
+04D0 04D3
+04D6 04D7
+04DA 04DF
+04E2 04E7
+04EA 04F5
+04F8 04F9
+0622 0626
+06C0
+06C2
+06D3
+0929
+0931
+0934
+0958 095F
+09CB 09CC
+09DC 09DD
+09DF
+0A33
+0A36
+0A59 0A5B
+0A5E
+0B48
+0B4B 0B4C
+0B5C 0B5D
+0B94
+0BCA 0BCC
+0C48
+0CC0
+0CC7 0CC8
+0CCA 0CCB
+0D4A 0D4C
+0DDA
+0DDC 0DDE
+0F43
+0F4D
+0F52
+0F57
+0F5C
+0F69
+0F73
+0F75 0F76
+0F78
+0F81
+0F93
+0F9D
+0FA2
+0FA7
+0FAC
+0FB9
+1026
+1E00 1E99
+1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC1 1FC4
+1FC6 1FD3
+1FD6 1FDB
+1FDD 1FEF
+1FF2 1FF4
+1FF6 1FFD
+2000 2001
+2126
+212A 212B
+219A 219B
+21AE
+21CD 21CF
+2204
+2209
+220C
+2224
+2226
+2241
+2244
+2247
+2249
+2260
+2262
+226D 2271
+2274 2275
+2278 2279
+2280 2281
+2284 2285
+2288 2289
+22AC 22AF
+22E0 22E3
+22EA 22ED
+2329 232A
+2ADC
+304C
+304E
+3050
+3052
+3054
+3056
+3058
+305A
+305C
+305E
+3060
+3062
+3065
+3067
+3069
+3070 3071
+3073 3074
+3076 3077
+3079 307A
+307C 307D
+3094
+309E
+30AC
+30AE
+30B0
+30B2
+30B4
+30B6
+30B8
+30BA
+30BC
+30BE
+30C0
+30C2
+30C5
+30C7
+30C9
+30D0 30D1
+30D3 30D4
+30D6 30D7
+30D9 30DA
+30DC 30DD
+30F4
+30F7 30FA
+30FE
+F900 FA0D
+FA10
+FA12
+FA15 FA1E
+FA20
+FA22
+FA25 FA26
+FA2A FA2D
+FA30 FA6A
+FB1D
+FB1F
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FB4E
+1D15E 1D164
+1D1BB 1D1C0
+2F800 2FA1D
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Cc.pl b/Master/xemtex/perl/lib/unicore/lib/Cc.pl
new file mode 100644
index 00000000000..34faf2eca8f
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Cc.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Cc}
+# \p{Cc} (and fuzzy permutations)
+#
+# Meaning: General Category 'Cc'
+#
+return <<'END';
+0000 001F
+007F 009F
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Cf.pl b/Master/xemtex/perl/lib/unicore/lib/Cf.pl
new file mode 100644
index 00000000000..9012824ee45
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Cf.pl
@@ -0,0 +1,25 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Cf}
+# \p{Cf} (and fuzzy permutations)
+#
+# Meaning: General Category 'Cf'
+#
+return <<'END';
+06DD
+070F
+180E
+200C 200F
+202A 202E
+2060 2063
+206A 206F
+FEFF
+FFF9 FFFB
+1D173 1D17A
+E0001
+E0020 E007F
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Cherokee.pl b/Master/xemtex/perl/lib/unicore/lib/Cherokee.pl
new file mode 100644
index 00000000000..4844ef48799
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Cherokee.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Cherokee} (and fuzzy permutations)
+#
+# Meaning: Script 'CHEROKEE'
+#
+return <<'END';
+13A0 13F4 CHEROKEE
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Cn.pl b/Master/xemtex/perl/lib/unicore/lib/Cn.pl
new file mode 100644
index 00000000000..c080d192302
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Cn.pl
@@ -0,0 +1,399 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Cn}
+# \p{Cn} (and fuzzy permutations)
+#
+# Meaning: General Category 'Cn' [not functional in Perl]
+#
+return <<'END';
+0221
+0234 024F
+02AE 02AF
+02EF 02FF
+0350 035F
+0370 0373
+0376 0379
+037B 037D
+037F 0383
+038B
+038D
+03A2
+03CF
+03F7 03FF
+0487
+04CF
+04F6 04F7
+04FA 04FF
+0510 0530
+0557 0558
+0560
+0588
+058B 0590
+05A2
+05BA
+05C5 05CF
+05EB 05EF
+05F5 060B
+060D 061A
+061C 061E
+0620
+063B 063F
+0656 065F
+06EE 06EF
+06FF
+070E
+072D 072F
+074B 077F
+07B2 0900
+0904
+093A 093B
+094E 094F
+0955 0957
+0971 0980
+0984
+098D 098E
+0991 0992
+09A9
+09B1
+09B3 09B5
+09BA 09BB
+09BD
+09C5 09C6
+09C9 09CA
+09CE 09D6
+09D8 09DB
+09DE
+09E4 09E5
+09FB 0A01
+0A03 0A04
+0A0B 0A0E
+0A11 0A12
+0A29
+0A31
+0A34
+0A37
+0A3A 0A3B
+0A3D
+0A43 0A46
+0A49 0A4A
+0A4E 0A58
+0A5D
+0A5F 0A65
+0A75 0A80
+0A84
+0A8C
+0A8E
+0A92
+0AA9
+0AB1
+0AB4
+0ABA 0ABB
+0AC6
+0ACA
+0ACE 0ACF
+0AD1 0ADF
+0AE1 0AE5
+0AF0 0B00
+0B04
+0B0D 0B0E
+0B11 0B12
+0B29
+0B31
+0B34 0B35
+0B3A 0B3B
+0B44 0B46
+0B49 0B4A
+0B4E 0B55
+0B58 0B5B
+0B5E
+0B62 0B65
+0B71 0B81
+0B84
+0B8B 0B8D
+0B91
+0B96 0B98
+0B9B
+0B9D
+0BA0 0BA2
+0BA5 0BA7
+0BAB 0BAD
+0BB6
+0BBA 0BBD
+0BC3 0BC5
+0BC9
+0BCE 0BD6
+0BD8 0BE6
+0BF3 0C00
+0C04
+0C0D
+0C11
+0C29
+0C34
+0C3A 0C3D
+0C45
+0C49
+0C4E 0C54
+0C57 0C5F
+0C62 0C65
+0C70 0C81
+0C84
+0C8D
+0C91
+0CA9
+0CB4
+0CBA 0CBD
+0CC5
+0CC9
+0CCE 0CD4
+0CD7 0CDD
+0CDF
+0CE2 0CE5
+0CF0 0D01
+0D04
+0D0D
+0D11
+0D29
+0D3A 0D3D
+0D44 0D45
+0D49
+0D4E 0D56
+0D58 0D5F
+0D62 0D65
+0D70 0D81
+0D84
+0D97 0D99
+0DB2
+0DBC
+0DBE 0DBF
+0DC7 0DC9
+0DCB 0DCE
+0DD5
+0DD7
+0DE0 0DF1
+0DF5 0E00
+0E3B 0E3E
+0E5C 0E80
+0E83
+0E85 0E86
+0E89
+0E8B 0E8C
+0E8E 0E93
+0E98
+0EA0
+0EA4
+0EA6
+0EA8 0EA9
+0EAC
+0EBA
+0EBE 0EBF
+0EC5
+0EC7
+0ECE 0ECF
+0EDA 0EDB
+0EDE 0EFF
+0F48
+0F6B 0F70
+0F8C 0F8F
+0F98
+0FBD
+0FCD 0FCE
+0FD0 0FFF
+1022
+1028
+102B
+1033 1035
+103A 103F
+105A 109F
+10C6 10CF
+10F9 10FA
+10FC 10FF
+115A 115E
+11A3 11A7
+11FA 11FF
+1207
+1247
+1249
+124E 124F
+1257
+1259
+125E 125F
+1287
+1289
+128E 128F
+12AF
+12B1
+12B6 12B7
+12BF
+12C1
+12C6 12C7
+12CF
+12D7
+12EF
+130F
+1311
+1316 1317
+131F
+1347
+135B 1360
+137D 139F
+13F5 1400
+1677 167F
+169D 169F
+16F1 16FF
+170D
+1715 171F
+1737 173F
+1754 175F
+176D
+1771
+1774 177F
+17DD 17DF
+17EA 17FF
+180F
+181A 181F
+1878 187F
+18AA 1DFF
+1E9C 1E9F
+1EFA 1EFF
+1F16 1F17
+1F1E 1F1F
+1F46 1F47
+1F4E 1F4F
+1F58
+1F5A
+1F5C
+1F5E
+1F7E 1F7F
+1FB5
+1FC5
+1FD4 1FD5
+1FDC
+1FF0 1FF1
+1FF5
+1FFF
+2053 2056
+2058 205E
+2064 2069
+2072 2073
+208F 209F
+20B2 20CF
+20EB 20FF
+213B 213C
+214C 2152
+2184 218F
+23CF 23FF
+2427 243F
+244B 245F
+24FF
+2614 2615
+2618
+267E 267F
+268A 2700
+2705
+270A 270B
+2728
+274C
+274E
+2753 2755
+2757
+275F 2760
+2795 2797
+27B0
+27BF 27CF
+27EC 27EF
+2B00 2E7F
+2E9A
+2EF4 2EFF
+2FD6 2FEF
+2FFC 2FFF
+3040
+3097 3098
+3100 3104
+312D 3130
+318F
+31B8 31EF
+321D 321F
+3244 3250
+327C 327E
+32CC 32CF
+32FF
+3377 337A
+33DE 33DF
+33FF
+4DB6 4DFF
+9FA6 9FFF
+A48D A48F
+A4C7 ABFF
+D7A4 D7FF
+FA2E FA2F
+FA6B FAFF
+FB07 FB12
+FB18 FB1C
+FB37
+FB3D
+FB3F
+FB42
+FB45
+FBB2 FBD2
+FD40 FD4F
+FD90 FD91
+FDC8 FDEF
+FDFD FDFF
+FE10 FE1F
+FE24 FE2F
+FE47 FE48
+FE53
+FE67
+FE6C FE6F
+FE75
+FEFD FEFE
+FF00
+FFBF FFC1
+FFC8 FFC9
+FFD0 FFD1
+FFD8 FFD9
+FFDD FFDF
+FFE7
+FFEF FFF8
+FFFE 102FF
+1031F
+10324 1032F
+1034B 103FF
+10426 10427
+1044E 1CFFF
+1D0F6 1D0FF
+1D127 1D129
+1D1DE 1D3FF
+1D455
+1D49D
+1D4A0 1D4A1
+1D4A3 1D4A4
+1D4A7 1D4A8
+1D4AD
+1D4BA
+1D4BC
+1D4C1
+1D4C4
+1D506
+1D50B 1D50C
+1D515
+1D51D
+1D53A
+1D53F
+1D545
+1D547 1D549
+1D551
+1D6A4 1D6A7
+1D7CA 1D7CD
+1D800 1FFFF
+2A6D7 2F7FF
+2FA1E E0000
+E0002 E001F
+E0080 EFFFF
+FFFFE FFFFF
+10FFFE 10FFFF
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Cntrl.pl b/Master/xemtex/perl/lib/unicore/lib/Cntrl.pl
new file mode 100644
index 00000000000..b794776699b
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Cntrl.pl
@@ -0,0 +1,29 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Cntrl}
+#
+# Meaning: [[:Cntrl:]]
+#
+return <<'END';
+0000 001F
+007F 009F
+06DD
+070F
+180E
+200C 200F
+202A 202E
+2060 2063
+206A 206F
+D800 F8FF
+FEFF
+FFF9 FFFB
+1D173 1D17A
+E0001
+E0020 E007F
+F0000 FFFFD
+100000 10FFFD
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Co.pl b/Master/xemtex/perl/lib/unicore/lib/Co.pl
new file mode 100644
index 00000000000..1f1ad215689
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Co.pl
@@ -0,0 +1,16 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Co}
+# \p{Co} (and fuzzy permutations)
+#
+# Meaning: General Category 'Co'
+#
+return <<'END';
+E000 F8FF
+F0000 FFFFD
+100000 10FFFD
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Common.pl b/Master/xemtex/perl/lib/unicore/lib/Common.pl
new file mode 100644
index 00000000000..677d38e8bf2
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Common.pl
@@ -0,0 +1,367 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Common} (and fuzzy permutations)
+#
+# Meaning: Pseudo-Script of codepoints not in other Unicode scripts
+#
+return <<'END';
+0000 0040
+005B 0060
+007B 00A9
+00AB 00B4
+00B6 00B9
+00BB 00BF
+00D7
+00F7
+0221
+0234 024F
+02AE 02AF
+02B9 02DF
+02E5 02FF
+0350 035F
+0370 0379
+037B 0385
+0387
+038B
+038D
+03A2
+03CF
+03F6 03FF
+0482
+0487
+04CF
+04F6 04F7
+04FA 04FF
+0510 0530
+0557 0558
+055A 0560
+0588 0590
+05A2
+05BA
+05BE
+05C0
+05C3
+05C5 05CF
+05EB 05EF
+05F3 0620
+063B 0640
+0656 066D
+06D4
+06E9
+06EE 06F9
+06FD 070F
+072D 072F
+074B 077F
+07B2 0900
+0904
+093A 093B
+094E 094F
+0955 0957
+0964 0965
+0970 0980
+0984
+098D 098E
+0991 0992
+09A9
+09B1
+09B3 09B5
+09BA 09BB
+09BD
+09C5 09C6
+09C9 09CA
+09CE 09D6
+09D8 09DB
+09DE
+09E4 09E5
+09F2 0A01
+0A03 0A04
+0A0B 0A0E
+0A11 0A12
+0A29
+0A31
+0A34
+0A37
+0A3A 0A3B
+0A3D
+0A43 0A46
+0A49 0A4A
+0A4E 0A58
+0A5D
+0A5F 0A65
+0A75 0A80
+0A84
+0A8C
+0A8E
+0A92
+0AA9
+0AB1
+0AB4
+0ABA 0ABB
+0AC6
+0ACA
+0ACE 0ACF
+0AD1 0ADF
+0AE1 0AE5
+0AF0 0B00
+0B04
+0B0D 0B0E
+0B11 0B12
+0B29
+0B31
+0B34 0B35
+0B3A 0B3B
+0B44 0B46
+0B49 0B4A
+0B4E 0B55
+0B58 0B5B
+0B5E
+0B62 0B65
+0B70 0B81
+0B84
+0B8B 0B8D
+0B91
+0B96 0B98
+0B9B
+0B9D
+0BA0 0BA2
+0BA5 0BA7
+0BAB 0BAD
+0BB6
+0BBA 0BBD
+0BC3 0BC5
+0BC9
+0BCE 0BD6
+0BD8 0BE6
+0BF3 0C00
+0C04
+0C0D
+0C11
+0C29
+0C34
+0C3A 0C3D
+0C45
+0C49
+0C4E 0C54
+0C57 0C5F
+0C62 0C65
+0C70 0C81
+0C84
+0C8D
+0C91
+0CA9
+0CB4
+0CBA 0CBD
+0CC5
+0CC9
+0CCE 0CD4
+0CD7 0CDD
+0CDF
+0CE2 0CE5
+0CF0 0D01
+0D04
+0D0D
+0D11
+0D29
+0D3A 0D3D
+0D44 0D45
+0D49
+0D4E 0D56
+0D58 0D5F
+0D62 0D65
+0D70 0D81
+0D84
+0D97 0D99
+0DB2
+0DBC
+0DBE 0DBF
+0DC7 0DC9
+0DCB 0DCE
+0DD5
+0DD7
+0DE0 0DF1
+0DF4 0E00
+0E3B 0E3F
+0E4F
+0E5A 0E80
+0E83
+0E85 0E86
+0E89
+0E8B 0E8C
+0E8E 0E93
+0E98
+0EA0
+0EA4
+0EA6
+0EA8 0EA9
+0EAC
+0EBA
+0EBE 0EBF
+0EC5
+0EC7
+0ECE 0ECF
+0EDA 0EDB
+0EDE 0EFF
+0F01 0F17
+0F1A 0F1F
+0F34
+0F36
+0F38
+0F3A 0F3F
+0F48
+0F6B 0F70
+0F85
+0F8C 0F8F
+0F98
+0FBD 0FC5
+0FC7 0FFF
+1022
+1028
+102B
+1033 1035
+103A 103F
+104A 104F
+105A 109F
+10C6 10CF
+10F9 10FF
+115A 115E
+11A3 11A7
+11FA 11FF
+1207
+1247
+1249
+124E 124F
+1257
+1259
+125E 125F
+1287
+1289
+128E 128F
+12AF
+12B1
+12B6 12B7
+12BF
+12C1
+12C6 12C7
+12CF
+12D7
+12EF
+130F
+1311
+1316 1317
+131F
+1347
+135B 1368
+137D 139F
+13F5 1400
+166D 166E
+1677 1680
+169B 169F
+16EB 16ED
+16F1 16FF
+170D
+1715 171F
+1735 173F
+1754 175F
+176D
+1771
+1774 177F
+17D4 17DF
+17EA 180A
+180E 180F
+181A 181F
+1878 187F
+18AA 1DFF
+1E9C 1E9F
+1EFA 1EFF
+1F16 1F17
+1F1E 1F1F
+1F46 1F47
+1F4E 1F4F
+1F58
+1F5A
+1F5C
+1F5E
+1F7E 1F7F
+1FB5
+1FBD
+1FBF 1FC1
+1FC5
+1FCD 1FCF
+1FD4 1FD5
+1FDC 1FDF
+1FED 1FF1
+1FF5
+1FFD 2070
+2072 207E
+2080 20CF
+20EB 2125
+2127 2129
+212C 2E7F
+2E9A
+2EF4 2EFF
+2FD6 3004
+3006
+3008 3020
+3030 3037
+303C 3040
+3097 3098
+309B 309C
+30A0
+30FB 30FC
+3100 3104
+312D 3130
+318F 319F
+31B8 31EF
+3200 33FF
+4DB6 4DFF
+9FA6 9FFF
+A48D A48F
+A4A2 A4A3
+A4B4
+A4C1
+A4C5
+A4C7 ABFF
+D7A4 F8FF
+FA2E FA2F
+FA6B FAFF
+FB07 FB12
+FB18 FB1C
+FB29
+FB37
+FB3D
+FB3F
+FB42
+FB45
+FBB2 FBD2
+FD3E FD4F
+FD90 FD91
+FDC8 FDEF
+FDFC FDFF
+FE10 FE1F
+FE24 FE6F
+FE75
+FEFD FF20
+FF3B FF40
+FF5B FF65
+FF70
+FF9E FF9F
+FFBF FFC1
+FFC8 FFC9
+FFD0 FFD1
+FFD8 FFD9
+FFDD 102FF
+1031F 1032F
+1034B 103FF
+10426 10427
+1044E 1D166
+1D16A 1D17A
+1D183 1D184
+1D18C 1D1A9
+1D1AE 1FFFF
+2A6D7 2F7FF
+2FA1E 10FFFF
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Compat.pl b/Master/xemtex/perl/lib/unicore/lib/Compat.pl
new file mode 100644
index 00000000000..12806f13605
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Compat.pl
@@ -0,0 +1,143 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Compat}
+#
+# Meaning: Compatible with a more-basic character
+#
+return <<'END';
+00A0
+00A8
+00AA
+00AF
+00B2 00B5
+00B8 00BA
+00BC 00BE
+0132 0133
+013F 0140
+0149
+017F
+01C4 01CC
+01F1 01F3
+02B0 02B8
+02D8 02DD
+02E0 02E4
+037A
+0384
+03D0 03D2
+03D5 03D6
+03F0 03F2
+03F4 03F5
+0587
+0675 0678
+0E33
+0EB3
+0EDC 0EDD
+0F0C
+0F77
+0F79
+1E9A
+1FBD
+1FBF 1FC0
+1FFE
+2002 200A
+2011
+2017
+2024 2026
+202F
+2033 2034
+2036 2037
+203C
+203E
+2047 2049
+2057
+205F
+2070 2071
+2074 208E
+20A8
+2100 2103
+2105 2107
+2109 2113
+2115 2116
+2119 211D
+2120 2122
+2124
+2128
+212C 212D
+212F 2131
+2133 2139
+213D 2140
+2145 2149
+2153 217F
+222C 222D
+222F 2230
+2460 24EA
+2A0C
+2A74 2A76
+2E9F
+2EF3
+2F00 2FD5
+3000
+3036
+3038 303A
+309B 309C
+309F
+30FF
+3131 318E
+3192 319F
+3200 321C
+3220 3243
+3251 327B
+3280 32CB
+32D0 32FE
+3300 3376
+337B 33DD
+33E0 33FE
+FB00 FB06
+FB13 FB17
+FB20 FB29
+FB4F FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFC
+FE30 FE44
+FE49 FE52
+FE54 FE66
+FE68 FE6B
+FE70 FE72
+FE74
+FE76 FEFC
+FF01 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+FFE0 FFE6
+FFE8 FFEE
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C0
+1D4C2 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A3
+1D6A8 1D7C9
+1D7CE 1D7FF
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Cs.pl b/Master/xemtex/perl/lib/unicore/lib/Cs.pl
new file mode 100644
index 00000000000..4624d9da766
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Cs.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Cs}
+# \p{Cs} (and fuzzy permutations)
+#
+# Meaning: General Category 'Cs'
+#
+return <<'END';
+D800 DFFF
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Cyrillic.pl b/Master/xemtex/perl/lib/unicore/lib/Cyrillic.pl
new file mode 100644
index 00000000000..690e2f7a9ef
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Cyrillic.pl
@@ -0,0 +1,18 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Cyrillic} (and fuzzy permutations)
+#
+# Meaning: Script 'CYRILLIC'
+#
+return <<'END';
+0400 0481 CYRILLIC
+0483 0486 CYRILLIC
+048A 04CE CYRILLIC
+04D0 04F5 CYRILLIC
+04F8 04F9 CYRILLIC
+0500 050F CYRILLIC
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/DCcircle.pl b/Master/xemtex/perl/lib/unicore/lib/DCcircle.pl
new file mode 100644
index 00000000000..b873609a4de
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/DCcircle.pl
@@ -0,0 +1,17 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{DCcircle}
+#
+# Meaning: Compatible with 'circle'
+#
+return <<'END';
+2460 2473
+24B6 24EA
+3251 327B
+3280 32BF
+32D0 32FE
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/DCcompat.pl b/Master/xemtex/perl/lib/unicore/lib/DCcompat.pl
new file mode 100644
index 00000000000..a35aaa9da3c
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/DCcompat.pl
@@ -0,0 +1,81 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{DCcompat}
+#
+# Meaning: Compatible with 'compat'
+#
+return <<'END';
+00A8
+00AF
+00B4 00B5
+00B8
+0132 0133
+013F 0140
+0149
+017F
+01C4 01CC
+01F1 01F3
+02D8 02DD
+037A
+0384
+03D0 03D2
+03D5 03D6
+03F0 03F2
+03F4 03F5
+0587
+0675 0678
+0E33
+0EB3
+0EDC 0EDD
+0F77
+0F79
+1E9A
+1FBD
+1FBF 1FC0
+1FFE
+2002 2006
+2008 200A
+2017
+2024 2026
+2033 2034
+2036 2037
+203C
+203E
+2047 2049
+2057
+205F
+20A8
+2100 2101
+2103
+2105 2107
+2109
+2116
+2121
+2135 2138
+2160 217F
+222C 222D
+222F 2230
+2474 24B5
+2A0C
+2A74 2A76
+2E9F
+2EF3
+2F00 2FD5
+3036
+3038 303A
+309B 309C
+3131 318E
+3200 321C
+3220 3243
+32C0 32CB
+3358 3370
+33E0 33FE
+FB00 FB06
+FB13 FB17
+FB4F
+FE49 FE4F
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/DCfinal.pl b/Master/xemtex/perl/lib/unicore/lib/DCfinal.pl
new file mode 100644
index 00000000000..d5fa53efe45
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/DCfinal.pl
@@ -0,0 +1,125 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{DCfinal}
+#
+# Meaning: Compatible with 'final'
+#
+return <<'END';
+FB51
+FB53
+FB57
+FB5B
+FB5F
+FB63
+FB67
+FB6B
+FB6F
+FB73
+FB77
+FB7B
+FB7F
+FB83
+FB85
+FB87
+FB89
+FB8B
+FB8D
+FB8F
+FB93
+FB97
+FB9B
+FB9F
+FBA1
+FBA5
+FBA7
+FBAB
+FBAF
+FBB1
+FBD4
+FBD8
+FBDA
+FBDC
+FBDF
+FBE1
+FBE3
+FBE5
+FBEB
+FBED
+FBEF
+FBF1
+FBF3
+FBF5
+FBF7
+FBFA
+FBFD
+FC64 FC96
+FD11 FD2C
+FD3C
+FD51
+FD58
+FD5A FD5B
+FD5E FD5F
+FD62
+FD64
+FD66 FD67
+FD69 FD6A
+FD6C
+FD6E FD6F
+FD71
+FD74 FD76
+FD78 FD7C
+FD7E FD82
+FD84 FD85
+FD87
+FD8B
+FD96 FD97
+FD99 FD9C
+FD9E FDB3
+FDB6 FDB7
+FDB9
+FDBB FDC2
+FDC6 FDC7
+FE82
+FE84
+FE86
+FE88
+FE8A
+FE8E
+FE90
+FE94
+FE96
+FE9A
+FE9E
+FEA2
+FEA6
+FEAA
+FEAC
+FEAE
+FEB0
+FEB2
+FEB6
+FEBA
+FEBE
+FEC2
+FEC6
+FECA
+FECE
+FED2
+FED6
+FEDA
+FEDE
+FEE2
+FEE6
+FEEA
+FEEE
+FEF0
+FEF2
+FEF6
+FEF8
+FEFA
+FEFC
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/DCfont.pl b/Master/xemtex/perl/lib/unicore/lib/DCfont.pl
new file mode 100644
index 00000000000..30b94d1aeb5
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/DCfont.pl
@@ -0,0 +1,47 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{DCfont}
+#
+# Meaning: Compatible with 'font'
+#
+return <<'END';
+2102
+210A 2113
+2115
+2119 211D
+2124
+2128
+212C 212D
+212F 2131
+2133 2134
+2139
+213D 2140
+2145 2149
+FB20 FB29
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C0
+1D4C2 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A3
+1D6A8 1D7C9
+1D7CE 1D7FF
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/DCfracti.pl b/Master/xemtex/perl/lib/unicore/lib/DCfracti.pl
new file mode 100644
index 00000000000..87b4247f476
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/DCfracti.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{DCfraction}
+#
+# Meaning: Compatible with 'fraction'
+#
+return <<'END';
+00BC 00BE
+2153 215F
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/DCinitia.pl b/Master/xemtex/perl/lib/unicore/lib/DCinitia.pl
new file mode 100644
index 00000000000..b903eceef61
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/DCinitia.pl
@@ -0,0 +1,87 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{DCinitial}
+#
+# Meaning: Compatible with 'initial'
+#
+return <<'END';
+FB54
+FB58
+FB5C
+FB60
+FB64
+FB68
+FB6C
+FB70
+FB74
+FB78
+FB7C
+FB80
+FB90
+FB94
+FB98
+FB9C
+FBA2
+FBA8
+FBAC
+FBD5
+FBE6
+FBE8
+FBF8
+FBFB
+FBFE
+FC97 FCDE
+FD2D FD33
+FD50
+FD52 FD57
+FD59
+FD5C FD5D
+FD60 FD61
+FD63
+FD65
+FD68
+FD6B
+FD6D
+FD70
+FD72 FD73
+FD77
+FD7D
+FD83
+FD86
+FD88 FD8A
+FD8C FD8F
+FD92 FD95
+FD98
+FD9D
+FDB4 FDB5
+FDB8
+FDBA
+FDC3 FDC5
+FE8B
+FE91
+FE97
+FE9B
+FE9F
+FEA3
+FEA7
+FEB3
+FEB7
+FEBB
+FEBF
+FEC3
+FEC7
+FECB
+FECF
+FED3
+FED7
+FEDB
+FEDF
+FEE3
+FEE7
+FEEB
+FEF3
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/DCisolat.pl b/Master/xemtex/perl/lib/unicore/lib/DCisolat.pl
new file mode 100644
index 00000000000..d973ea495e2
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/DCisolat.pl
@@ -0,0 +1,110 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{DCisolated}
+#
+# Meaning: Compatible with 'isolated'
+#
+return <<'END';
+FB50
+FB52
+FB56
+FB5A
+FB5E
+FB62
+FB66
+FB6A
+FB6E
+FB72
+FB76
+FB7A
+FB7E
+FB82
+FB84
+FB86
+FB88
+FB8A
+FB8C
+FB8E
+FB92
+FB96
+FB9A
+FB9E
+FBA0
+FBA4
+FBA6
+FBAA
+FBAE
+FBB0
+FBD3
+FBD7
+FBD9
+FBDB
+FBDD FBDE
+FBE0
+FBE2
+FBE4
+FBEA
+FBEC
+FBEE
+FBF0
+FBF2
+FBF4
+FBF6
+FBF9
+FBFC
+FC00 FC63
+FCF5 FD10
+FD3D
+FDF0 FDFC
+FE70
+FE72
+FE74
+FE76
+FE78
+FE7A
+FE7C
+FE7E
+FE80 FE81
+FE83
+FE85
+FE87
+FE89
+FE8D
+FE8F
+FE93
+FE95
+FE99
+FE9D
+FEA1
+FEA5
+FEA9
+FEAB
+FEAD
+FEAF
+FEB1
+FEB5
+FEB9
+FEBD
+FEC1
+FEC5
+FEC9
+FECD
+FED1
+FED5
+FED9
+FEDD
+FEE1
+FEE5
+FEE9
+FEED
+FEEF
+FEF1
+FEF5
+FEF7
+FEF9
+FEFB
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/DCmedial.pl b/Master/xemtex/perl/lib/unicore/lib/DCmedial.pl
new file mode 100644
index 00000000000..8d15d90321d
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/DCmedial.pl
@@ -0,0 +1,66 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{DCmedial}
+#
+# Meaning: Compatible with 'medial'
+#
+return <<'END';
+FB55
+FB59
+FB5D
+FB61
+FB65
+FB69
+FB6D
+FB71
+FB75
+FB79
+FB7D
+FB81
+FB91
+FB95
+FB99
+FB9D
+FBA3
+FBA9
+FBAD
+FBD6
+FBE7
+FBE9
+FBFF
+FCDF FCF4
+FD34 FD3B
+FE71
+FE77
+FE79
+FE7B
+FE7D
+FE7F
+FE8C
+FE92
+FE98
+FE9C
+FEA0
+FEA4
+FEA8
+FEB4
+FEB8
+FEBC
+FEC0
+FEC4
+FEC8
+FECC
+FED0
+FED4
+FED8
+FEDC
+FEE0
+FEE4
+FEE8
+FEEC
+FEF4
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/DCnarrow.pl b/Master/xemtex/perl/lib/unicore/lib/DCnarrow.pl
new file mode 100644
index 00000000000..33eca3ce359
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/DCnarrow.pl
@@ -0,0 +1,18 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{DCnarrow}
+#
+# Meaning: Compatible with 'narrow'
+#
+return <<'END';
+FF61 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+FFE8 FFEE
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/DCnoBrea.pl b/Master/xemtex/perl/lib/unicore/lib/DCnoBrea.pl
new file mode 100644
index 00000000000..8cbaecd257a
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/DCnoBrea.pl
@@ -0,0 +1,17 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{DCnoBreak}
+#
+# Meaning: Compatible with 'noBreak'
+#
+return <<'END';
+00A0
+0F0C
+2007
+2011
+202F
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/DCsmall.pl b/Master/xemtex/perl/lib/unicore/lib/DCsmall.pl
new file mode 100644
index 00000000000..6606d7567fd
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/DCsmall.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{DCsmall}
+#
+# Meaning: Compatible with 'small'
+#
+return <<'END';
+FE50 FE52
+FE54 FE66
+FE68 FE6B
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/DCsquare.pl b/Master/xemtex/perl/lib/unicore/lib/DCsquare.pl
new file mode 100644
index 00000000000..28d4f64d7b6
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/DCsquare.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{DCsquare}
+#
+# Meaning: Compatible with 'square'
+#
+return <<'END';
+3300 3357
+3371 3376
+337B 33DD
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/DCsub.pl b/Master/xemtex/perl/lib/unicore/lib/DCsub.pl
new file mode 100644
index 00000000000..df3daf6bb0a
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/DCsub.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{DCsub}
+#
+# Meaning: Compatible with 'sub'
+#
+return <<'END';
+2080 208E
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/DCsuper.pl b/Master/xemtex/perl/lib/unicore/lib/DCsuper.pl
new file mode 100644
index 00000000000..a11ac2dcb96
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/DCsuper.pl
@@ -0,0 +1,22 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{DCsuper}
+#
+# Meaning: Compatible with 'super'
+#
+return <<'END';
+00AA
+00B2 00B3
+00B9 00BA
+02B0 02B8
+02E0 02E4
+2070 2071
+2074 207F
+2120
+2122
+3192 319F
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/DCvertic.pl b/Master/xemtex/perl/lib/unicore/lib/DCvertic.pl
new file mode 100644
index 00000000000..d7928e562f3
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/DCvertic.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{DCvertical}
+#
+# Meaning: Compatible with 'vertical'
+#
+return <<'END';
+309F
+30FF
+FE30 FE44
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/DCwide.pl b/Master/xemtex/perl/lib/unicore/lib/DCwide.pl
new file mode 100644
index 00000000000..664c498d281
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/DCwide.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{DCwide}
+#
+# Meaning: Compatible with 'wide'
+#
+return <<'END';
+3000
+FF01 FF60
+FFE0 FFE6
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Dash.pl b/Master/xemtex/perl/lib/unicore/lib/Dash.pl
new file mode 100644
index 00000000000..3d4dd59b7b0
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Dash.pl
@@ -0,0 +1,26 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Dash} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Dash'
+#
+return <<'END';
+002D Dash
+00AD Dash
+058A Dash
+1806 Dash
+2010 2015 Dash
+207B Dash
+208B Dash
+2212 Dash
+301C Dash
+3030 Dash
+FE31 FE32 Dash
+FE58 Dash
+FE63 Dash
+FF0D Dash
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Deprecat.pl b/Master/xemtex/perl/lib/unicore/lib/Deprecat.pl
new file mode 100644
index 00000000000..1866c6c2da6
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Deprecat.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Deprecated} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Deprecated'
+#
+return <<'END';
+0340 0341 Deprecated
+206A 206F Deprecated
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Deseret.pl b/Master/xemtex/perl/lib/unicore/lib/Deseret.pl
new file mode 100644
index 00000000000..20431e628f8
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Deseret.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Deseret} (and fuzzy permutations)
+#
+# Meaning: Script 'DESERET'
+#
+return <<'END';
+10400 10425 DESERET
+10428 1044D DESERET
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Devanaga.pl b/Master/xemtex/perl/lib/unicore/lib/Devanaga.pl
new file mode 100644
index 00000000000..d35fc083127
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Devanaga.pl
@@ -0,0 +1,18 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Devanagari} (and fuzzy permutations)
+#
+# Meaning: Script 'DEVANAGARI'
+#
+return <<'END';
+0901 0903 DEVANAGARI
+0905 0939 DEVANAGARI
+093C 094D DEVANAGARI
+0950 0954 DEVANAGARI
+0958 0963 DEVANAGARI
+0966 096F DEVANAGARI
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Diacriti.pl b/Master/xemtex/perl/lib/unicore/lib/Diacriti.pl
new file mode 100644
index 00000000000..e22111672b7
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Diacriti.pl
@@ -0,0 +1,89 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Diacritic} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Diacritic'
+#
+return <<'END';
+005E Diacritic
+0060 Diacritic
+00A8 Diacritic
+00AF Diacritic
+00B4 Diacritic
+00B7 00B8 Diacritic
+02B0 02EE Diacritic
+0300 034E Diacritic
+0360 0362 Diacritic
+0374 0375 Diacritic
+037A Diacritic
+0384 0385 Diacritic
+0483 0486 Diacritic
+0559 Diacritic
+0591 05A1 Diacritic
+05A3 05B9 Diacritic
+05BB 05BD Diacritic
+05BF Diacritic
+05C1 05C2 Diacritic
+05C4 Diacritic
+064B 0652 Diacritic
+06DF 06E0 Diacritic
+06E5 06E6 Diacritic
+06EA 06EC Diacritic
+0730 074A Diacritic
+07A6 07B0 Diacritic
+093C Diacritic
+094D Diacritic
+0951 0954 Diacritic
+09BC Diacritic
+09CD Diacritic
+0A3C Diacritic
+0A4D Diacritic
+0ABC Diacritic
+0ACD Diacritic
+0B3C Diacritic
+0B4D Diacritic
+0BCD Diacritic
+0C4D Diacritic
+0CCD Diacritic
+0D4D Diacritic
+0DCA Diacritic
+0E47 0E4C Diacritic
+0E4E Diacritic
+0EC8 0ECC Diacritic
+0F18 0F19 Diacritic
+0F35 Diacritic
+0F37 Diacritic
+0F39 Diacritic
+0F3E 0F3F Diacritic
+0F82 0F84 Diacritic
+0F86 0F87 Diacritic
+0FC6 Diacritic
+1037 Diacritic
+1039 Diacritic
+17C9 17D3 Diacritic
+1FBD Diacritic
+1FBF 1FC1 Diacritic
+1FCD 1FCF Diacritic
+1FDD 1FDF Diacritic
+1FED 1FEF Diacritic
+1FFD 1FFE Diacritic
+302A 302F Diacritic
+3099 309C Diacritic
+30FC Diacritic
+FB1E Diacritic
+FE20 FE23 Diacritic
+FF3E Diacritic
+FF40 Diacritic
+FF70 Diacritic
+FF9E FF9F Diacritic
+FFE3 Diacritic
+1D167 1D169 Diacritic
+1D16D 1D172 Diacritic
+1D17B 1D182 Diacritic
+1D185 1D18B Diacritic
+1D1AA 1D1AD Diacritic
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Digit.pl b/Master/xemtex/perl/lib/unicore/lib/Digit.pl
new file mode 100644
index 00000000000..3a8c507ae73
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Digit.pl
@@ -0,0 +1,33 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Digit}
+#
+# Meaning: [[:Digit:]]
+#
+return <<'END';
+0030 0039
+0660 0669
+06F0 06F9
+0966 096F
+09E6 09EF
+0A66 0A6F
+0AE6 0AEF
+0B66 0B6F
+0BE7 0BEF
+0C66 0C6F
+0CE6 0CEF
+0D66 0D6F
+0E50 0E59
+0ED0 0ED9
+0F20 0F29
+1040 1049
+1369 1371
+17E0 17E9
+1810 1819
+FF10 FF19
+1D7CE 1D7FF
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Ethiopic.pl b/Master/xemtex/perl/lib/unicore/lib/Ethiopic.pl
new file mode 100644
index 00000000000..433d7d8e040
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Ethiopic.pl
@@ -0,0 +1,38 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Ethiopic} (and fuzzy permutations)
+#
+# Meaning: Script 'ETHIOPIC'
+#
+return <<'END';
+1200 1206 ETHIOPIC
+1208 1246 ETHIOPIC
+1248 ETHIOPIC
+124A 124D ETHIOPIC
+1250 1256 ETHIOPIC
+1258 ETHIOPIC
+125A 125D ETHIOPIC
+1260 1286 ETHIOPIC
+1288 ETHIOPIC
+128A 128D ETHIOPIC
+1290 12AE ETHIOPIC
+12B0 ETHIOPIC
+12B2 12B5 ETHIOPIC
+12B8 12BE ETHIOPIC
+12C0 ETHIOPIC
+12C2 12C5 ETHIOPIC
+12C8 12CE ETHIOPIC
+12D0 12D6 ETHIOPIC
+12D8 12EE ETHIOPIC
+12F0 130E ETHIOPIC
+1310 ETHIOPIC
+1312 1315 ETHIOPIC
+1318 131E ETHIOPIC
+1320 1346 ETHIOPIC
+1348 135A ETHIOPIC
+1369 137C ETHIOPIC
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Extender.pl b/Master/xemtex/perl/lib/unicore/lib/Extender.pl
new file mode 100644
index 00000000000..dd0dab84ba9
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Extender.pl
@@ -0,0 +1,23 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Extender} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Extender'
+#
+return <<'END';
+00B7 Extender
+02D0 02D1 Extender
+0640 Extender
+0E46 Extender
+0EC6 Extender
+1843 Extender
+3005 Extender
+3031 3035 Extender
+309D 309E Extender
+30FC 30FE Extender
+FF70 Extender
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Georgian.pl b/Master/xemtex/perl/lib/unicore/lib/Georgian.pl
new file mode 100644
index 00000000000..cd56aaa56d0
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Georgian.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Georgian} (and fuzzy permutations)
+#
+# Meaning: Script 'GEORGIAN'
+#
+return <<'END';
+10A0 10C5 GEORGIAN
+10D0 10F8 GEORGIAN
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Gothic.pl b/Master/xemtex/perl/lib/unicore/lib/Gothic.pl
new file mode 100644
index 00000000000..321d7234fc6
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Gothic.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Gothic} (and fuzzy permutations)
+#
+# Meaning: Script 'GOTHIC'
+#
+return <<'END';
+10330 1034A GOTHIC
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Graph.pl b/Master/xemtex/perl/lib/unicore/lib/Graph.pl
new file mode 100644
index 00000000000..e3e98b518dc
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Graph.pl
@@ -0,0 +1,398 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Graph}
+#
+# Meaning: [[:Graph:]]
+#
+return <<'END';
+0021 007E
+00A1 0220
+0222 0233
+0250 02AD
+02B0 02EE
+0300 034F
+0360 036F
+0374 0375
+037A
+037E
+0384 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F6
+0400 0486
+0488 04CE
+04D0 04F5
+04F8 04F9
+0500 050F
+0531 0556
+0559 055F
+0561 0587
+0589 058A
+0591 05A1
+05A3 05B9
+05BB 05C4
+05D0 05EA
+05F0 05F4
+060C
+061B
+061F
+0621 063A
+0640 0655
+0660 06DC
+06DE 06ED
+06F0 06FE
+0700 070D
+0710 072C
+0730 074A
+0780 07B1
+0901 0903
+0905 0939
+093C 094D
+0950 0954
+0958 0970
+0981 0983
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BC
+09BE 09C4
+09C7 09C8
+09CB 09CD
+09D7
+09DC 09DD
+09DF 09E3
+09E6 09FA
+0A02
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3C
+0A3E 0A42
+0A47 0A48
+0A4B 0A4D
+0A59 0A5C
+0A5E
+0A66 0A74
+0A81 0A83
+0A85 0A8B
+0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABC 0AC5
+0AC7 0AC9
+0ACB 0ACD
+0AD0
+0AE0
+0AE6 0AEF
+0B01 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B36 0B39
+0B3C 0B43
+0B47 0B48
+0B4B 0B4D
+0B56 0B57
+0B5C 0B5D
+0B5F 0B61
+0B66 0B70
+0B82 0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB5
+0BB7 0BB9
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCD
+0BD7
+0BE7 0BF2
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C3E 0C44
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0C60 0C61
+0C66 0C6F
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBE 0CC4
+0CC6 0CC8
+0CCA 0CCD
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0CE6 0CEF
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D43
+0D46 0D48
+0D4A 0D4D
+0D57
+0D60 0D61
+0D66 0D6F
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCA
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF4
+0E01 0E3A
+0E3F 0E5B
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB9
+0EBB 0EBD
+0EC0 0EC4
+0EC6
+0EC8 0ECD
+0ED0 0ED9
+0EDC 0EDD
+0F00 0F47
+0F49 0F6A
+0F71 0F8B
+0F90 0F97
+0F99 0FBC
+0FBE 0FCC
+0FCF
+1000 1021
+1023 1027
+1029 102A
+102C 1032
+1036 1039
+1040 1059
+10A0 10C5
+10D0 10F8
+10FB
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1206
+1208 1246
+1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1286
+1288
+128A 128D
+1290 12AE
+12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12CE
+12D0 12D6
+12D8 12EE
+12F0 130E
+1310
+1312 1315
+1318 131E
+1320 1346
+1348 135A
+1361 137C
+13A0 13F4
+1401 1676
+1681 169C
+16A0 16F0
+1700 170C
+170E 1714
+1720 1736
+1740 1753
+1760 176C
+176E 1770
+1772 1773
+1780 17DC
+17E0 17E9
+1800 180D
+1810 1819
+1820 1877
+1880 18A9
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FC4
+1FC6 1FD3
+1FD6 1FDB
+1FDD 1FEF
+1FF2 1FF4
+1FF6 1FFE
+2010 2027
+2030 2052
+2057
+2070 2071
+2074 208E
+20A0 20B1
+20D0 20EA
+2100 213A
+213D 214B
+2153 2183
+2190 23CE
+2400 2426
+2440 244A
+2460 24FE
+2500 2613
+2616 2617
+2619 267D
+2680 2689
+2701 2704
+2706 2709
+270C 2727
+2729 274B
+274D
+274F 2752
+2756
+2758 275E
+2761 2794
+2798 27AF
+27B1 27BE
+27D0 27EB
+27F0 2AFF
+2E80 2E99
+2E9B 2EF3
+2F00 2FD5
+2FF0 2FFB
+3001 303F
+3041 3096
+3099 30FF
+3105 312C
+3131 318E
+3190 31B7
+31F0 321C
+3220 3243
+3251 327B
+327F 32CB
+32D0 32FE
+3300 3376
+337B 33DD
+33E0 33FE
+3400 4DB5
+4E00 9FA5
+A000 A48C
+A490 A4C6
+AC00 D7A3
+E000 FA2D
+FA30 FA6A
+FB00 FB06
+FB13 FB17
+FB1D FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3F
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFC
+FE00 FE0F
+FE20 FE23
+FE30 FE46
+FE49 FE52
+FE54 FE66
+FE68 FE6B
+FE70 FE74
+FE76 FEFC
+FF01 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+FFE0 FFE6
+FFE8 FFEE
+FFFC FFFD
+10300 1031E
+10320 10323
+10330 1034A
+10400 10425
+10428 1044D
+1D000 1D0F5
+1D100 1D126
+1D12A 1D172
+1D17B 1D1DD
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C0
+1D4C2 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A3
+1D6A8 1D7C9
+1D7CE 1D7FF
+20000 2A6D6
+2F800 2FA1D
+F0000 FFFFD
+100000 10FFFD
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Grapheme.pl b/Master/xemtex/perl/lib/unicore/lib/Grapheme.pl
new file mode 100644
index 00000000000..dc2183abb46
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Grapheme.pl
@@ -0,0 +1,25 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{GraphemeLink} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Grapheme_Link'
+#
+return <<'END';
+094D Grapheme_Link
+09CD Grapheme_Link
+0A4D Grapheme_Link
+0ACD Grapheme_Link
+0B4D Grapheme_Link
+0BCD Grapheme_Link
+0C4D Grapheme_Link
+0CCD Grapheme_Link
+0D4D Grapheme_Link
+0DCA Grapheme_Link
+0E3A Grapheme_Link
+1039 Grapheme_Link
+17D2 Grapheme_Link
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Greek.pl b/Master/xemtex/perl/lib/unicore/lib/Greek.pl
new file mode 100644
index 00000000000..76ad2ad6f76
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Greek.pl
@@ -0,0 +1,40 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Greek} (and fuzzy permutations)
+#
+# Meaning: Script 'GREEK'
+#
+return <<'END';
+00B5 GREEK
+037A GREEK
+0386 GREEK
+0388 038A GREEK
+038C GREEK
+038E 03A1 GREEK
+03A3 03CE GREEK
+03D0 03F5 GREEK
+1F00 1F15 GREEK
+1F18 1F1D GREEK
+1F20 1F45 GREEK
+1F48 1F4D GREEK
+1F50 1F57 GREEK
+1F59 GREEK
+1F5B GREEK
+1F5D GREEK
+1F5F 1F7D GREEK
+1F80 1FB4 GREEK
+1FB6 1FBC GREEK
+1FBE GREEK
+1FC2 1FC4 GREEK
+1FC6 1FCC GREEK
+1FD0 1FD3 GREEK
+1FD6 1FDB GREEK
+1FE0 1FEC GREEK
+1FF2 1FF4 GREEK
+1FF6 1FFC GREEK
+2126 GREEK
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Gujarati.pl b/Master/xemtex/perl/lib/unicore/lib/Gujarati.pl
new file mode 100644
index 00000000000..aba2f31753b
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Gujarati.pl
@@ -0,0 +1,26 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Gujarati} (and fuzzy permutations)
+#
+# Meaning: Script 'GUJARATI'
+#
+return <<'END';
+0A81 0A83 GUJARATI
+0A85 0A8B GUJARATI
+0A8D GUJARATI
+0A8F 0A91 GUJARATI
+0A93 0AA8 GUJARATI
+0AAA 0AB0 GUJARATI
+0AB2 0AB3 GUJARATI
+0AB5 0AB9 GUJARATI
+0ABC 0AC5 GUJARATI
+0AC7 0AC9 GUJARATI
+0ACB 0ACD GUJARATI
+0AD0 GUJARATI
+0AE0 GUJARATI
+0AE6 0AEF GUJARATI
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Gurmukhi.pl b/Master/xemtex/perl/lib/unicore/lib/Gurmukhi.pl
new file mode 100644
index 00000000000..a56e9ae7218
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Gurmukhi.pl
@@ -0,0 +1,27 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Gurmukhi} (and fuzzy permutations)
+#
+# Meaning: Script 'GURMUKHI'
+#
+return <<'END';
+0A02 GURMUKHI
+0A05 0A0A GURMUKHI
+0A0F 0A10 GURMUKHI
+0A13 0A28 GURMUKHI
+0A2A 0A30 GURMUKHI
+0A32 0A33 GURMUKHI
+0A35 0A36 GURMUKHI
+0A38 0A39 GURMUKHI
+0A3C GURMUKHI
+0A3E 0A42 GURMUKHI
+0A47 0A48 GURMUKHI
+0A4B 0A4D GURMUKHI
+0A59 0A5C GURMUKHI
+0A5E GURMUKHI
+0A66 0A74 GURMUKHI
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Han.pl b/Master/xemtex/perl/lib/unicore/lib/Han.pl
new file mode 100644
index 00000000000..903bbf2dfd2
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Han.pl
@@ -0,0 +1,25 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Han} (and fuzzy permutations)
+#
+# Meaning: Script 'HAN'
+#
+return <<'END';
+2E80 2E99 HAN
+2E9B 2EF3 HAN
+2F00 2FD5 HAN
+3005 HAN
+3007 HAN
+3021 3029 HAN
+3038 303B HAN
+3400 4DB5 HAN
+4E00 9FA5 HAN
+F900 FA2D HAN
+FA30 FA6A HAN
+20000 2A6D6 HAN
+2F800 2FA1D HAN
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Hangul.pl b/Master/xemtex/perl/lib/unicore/lib/Hangul.pl
new file mode 100644
index 00000000000..afa24a06015
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Hangul.pl
@@ -0,0 +1,22 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Hangul} (and fuzzy permutations)
+#
+# Meaning: Script 'HANGUL'
+#
+return <<'END';
+1100 1159 HANGUL
+115F 11A2 HANGUL
+11A8 11F9 HANGUL
+3131 318E HANGUL
+AC00 D7A3 HANGUL
+FFA0 FFBE HANGUL
+FFC2 FFC7 HANGUL
+FFCA FFCF HANGUL
+FFD2 FFD7 HANGUL
+FFDA FFDC HANGUL
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Hanunoo.pl b/Master/xemtex/perl/lib/unicore/lib/Hanunoo.pl
new file mode 100644
index 00000000000..077cc076c7f
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Hanunoo.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Hanunoo} (and fuzzy permutations)
+#
+# Meaning: Script 'HANUNOO'
+#
+return <<'END';
+1720 1734 HANUNOO
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Hebrew.pl b/Master/xemtex/perl/lib/unicore/lib/Hebrew.pl
new file mode 100644
index 00000000000..4ec1444cb6b
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Hebrew.pl
@@ -0,0 +1,22 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Hebrew} (and fuzzy permutations)
+#
+# Meaning: Script 'HEBREW'
+#
+return <<'END';
+05D0 05EA HEBREW
+05F0 05F2 HEBREW
+FB1D HEBREW
+FB1F FB28 HEBREW
+FB2A FB36 HEBREW
+FB38 FB3C HEBREW
+FB3E HEBREW
+FB40 FB41 HEBREW
+FB43 FB44 HEBREW
+FB46 FB4F HEBREW
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/HexDigit.pl b/Master/xemtex/perl/lib/unicore/lib/HexDigit.pl
new file mode 100644
index 00000000000..9bb0755a641
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/HexDigit.pl
@@ -0,0 +1,18 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{HexDigit} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Hex_Digit'
+#
+return <<'END';
+0030 0039 Hex_Digit
+0041 0046 Hex_Digit
+0061 0066 Hex_Digit
+FF10 FF19 Hex_Digit
+FF21 FF26 Hex_Digit
+FF41 FF46 Hex_Digit
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Hiragana.pl b/Master/xemtex/perl/lib/unicore/lib/Hiragana.pl
new file mode 100644
index 00000000000..dddb82d74d8
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Hiragana.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Hiragana} (and fuzzy permutations)
+#
+# Meaning: Script 'HIRAGANA'
+#
+return <<'END';
+3041 3096 HIRAGANA
+309D 309F HIRAGANA
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Hyphen.pl b/Master/xemtex/perl/lib/unicore/lib/Hyphen.pl
new file mode 100644
index 00000000000..b1ca8d6c9a2
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Hyphen.pl
@@ -0,0 +1,21 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Hyphen} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Hyphen'
+#
+return <<'END';
+002D Hyphen
+00AD Hyphen
+058A Hyphen
+1806 Hyphen
+2010 2011 Hyphen
+30FB Hyphen
+FE63 Hyphen
+FF0D Hyphen
+FF65 Hyphen
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/IdContin.pl b/Master/xemtex/perl/lib/unicore/lib/IdContin.pl
new file mode 100644
index 00000000000..7de06495905
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/IdContin.pl
@@ -0,0 +1,416 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{IdContinue} (and fuzzy permutations)
+#
+# Meaning: [\p{ID_Start}\p{Mn}\p{Mc}\p{Nd}\p{Pc}]
+#
+return <<'END';
+0030 0039
+0041 005A
+005F
+0061 007A
+00AA
+00B5
+00BA
+00C0 00D6
+00D8 00F6
+00F8 0220
+0222 0233
+0250 02AD
+02B0 02B8
+02BB 02C1
+02D0 02D1
+02E0 02E4
+02EE
+0300 034F
+0360 036F
+037A
+0386
+0388 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F5
+0400 0481
+0483 0486
+048A 04CE
+04D0 04F5
+04F8 04F9
+0500 050F
+0531 0556
+0559
+0561 0587
+0591 05A1
+05A3 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4
+05D0 05EA
+05F0 05F2
+0621 063A
+0640 0655
+0660 0669
+066E 06D3
+06D5 06DC
+06DF 06E8
+06EA 06ED
+06F0 06FC
+0710 072C
+0730 074A
+0780 07B1
+0901 0903
+0905 0939
+093C 094D
+0950 0954
+0958 0963
+0966 096F
+0981 0983
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BC
+09BE 09C4
+09C7 09C8
+09CB 09CD
+09D7
+09DC 09DD
+09DF 09E3
+09E6 09F1
+0A02
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3C
+0A3E 0A42
+0A47 0A48
+0A4B 0A4D
+0A59 0A5C
+0A5E
+0A66 0A74
+0A81 0A83
+0A85 0A8B
+0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABC 0AC5
+0AC7 0AC9
+0ACB 0ACD
+0AD0
+0AE0
+0AE6 0AEF
+0B01 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B36 0B39
+0B3C 0B43
+0B47 0B48
+0B4B 0B4D
+0B56 0B57
+0B5C 0B5D
+0B5F 0B61
+0B66 0B6F
+0B82 0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB5
+0BB7 0BB9
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCD
+0BD7
+0BE7 0BEF
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C3E 0C44
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0C60 0C61
+0C66 0C6F
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBE 0CC4
+0CC6 0CC8
+0CCA 0CCD
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0CE6 0CEF
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D43
+0D46 0D48
+0D4A 0D4D
+0D57
+0D60 0D61
+0D66 0D6F
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCA
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF3
+0E01 0E3A
+0E40 0E4E
+0E50 0E59
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB9
+0EBB 0EBD
+0EC0 0EC4
+0EC6
+0EC8 0ECD
+0ED0 0ED9
+0EDC 0EDD
+0F00
+0F18 0F19
+0F20 0F29
+0F35
+0F37
+0F39
+0F3E 0F47
+0F49 0F6A
+0F71 0F84
+0F86 0F8B
+0F90 0F97
+0F99 0FBC
+0FC6
+1000 1021
+1023 1027
+1029 102A
+102C 1032
+1036 1039
+1040 1049
+1050 1059
+10A0 10C5
+10D0 10F8
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1206
+1208 1246
+1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1286
+1288
+128A 128D
+1290 12AE
+12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12CE
+12D0 12D6
+12D8 12EE
+12F0 130E
+1310
+1312 1315
+1318 131E
+1320 1346
+1348 135A
+1369 1371
+13A0 13F4
+1401 166C
+166F 1676
+1681 169A
+16A0 16EA
+16EE 16F0
+1700 170C
+170E 1714
+1720 1734
+1740 1753
+1760 176C
+176E 1770
+1772 1773
+1780 17D3
+17D7
+17DC
+17E0 17E9
+180B 180D
+1810 1819
+1820 1877
+1880 18A9
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC2 1FC4
+1FC6 1FCC
+1FD0 1FD3
+1FD6 1FDB
+1FE0 1FEC
+1FF2 1FF4
+1FF6 1FFC
+203F 2040
+2071
+207F
+20D0 20DC
+20E1
+20E5 20EA
+2102
+2107
+210A 2113
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+212F 2131
+2133 2139
+213D 213F
+2145 2149
+2160 2183
+3005 3007
+3021 302F
+3031 3035
+3038 303C
+3041 3096
+3099 309A
+309D 309F
+30A1 30FF
+3105 312C
+3131 318E
+31A0 31B7
+31F0 31FF
+3400 4DB5
+4E00 9FA5
+A000 A48C
+AC00 D7A3
+F900 FA2D
+FA30 FA6A
+FB00 FB06
+FB13 FB17
+FB1D FB28
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFB
+FE00 FE0F
+FE20 FE23
+FE33 FE34
+FE4D FE4F
+FE70 FE74
+FE76 FEFC
+FF10 FF19
+FF21 FF3A
+FF3F
+FF41 FF5A
+FF65 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+10300 1031E
+10330 1034A
+10400 10425
+10428 1044D
+1D165 1D169
+1D16D 1D172
+1D17B 1D182
+1D185 1D18B
+1D1AA 1D1AD
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C0
+1D4C2 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A3
+1D6A8 1D6C0
+1D6C2 1D6DA
+1D6DC 1D6FA
+1D6FC 1D714
+1D716 1D734
+1D736 1D74E
+1D750 1D76E
+1D770 1D788
+1D78A 1D7A8
+1D7AA 1D7C2
+1D7C4 1D7C9
+1D7CE 1D7FF
+20000 2A6D6
+2F800 2FA1D
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/IdStart.pl b/Master/xemtex/perl/lib/unicore/lib/IdStart.pl
new file mode 100644
index 00000000000..0772a752dd6
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/IdStart.pl
@@ -0,0 +1,321 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{IdStart} (and fuzzy permutations)
+#
+# Meaning: [\p{Ll}\p{Lu}\p{Lt}\p{Lm}\p{Lo}\p{Nl}]
+#
+return <<'END';
+0041 005A
+0061 007A
+00AA
+00B5
+00BA
+00C0 00D6
+00D8 00F6
+00F8 0220
+0222 0233
+0250 02AD
+02B0 02B8
+02BB 02C1
+02D0 02D1
+02E0 02E4
+02EE
+037A
+0386
+0388 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F5
+0400 0481
+048A 04CE
+04D0 04F5
+04F8 04F9
+0500 050F
+0531 0556
+0559
+0561 0587
+05D0 05EA
+05F0 05F2
+0621 063A
+0640 064A
+066E 066F
+0671 06D3
+06D5
+06E5 06E6
+06FA 06FC
+0710
+0712 072C
+0780 07A5
+07B1
+0905 0939
+093D
+0950
+0958 0961
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09DC 09DD
+09DF 09E1
+09F0 09F1
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A59 0A5C
+0A5E
+0A72 0A74
+0A85 0A8B
+0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABD
+0AD0
+0AE0
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B36 0B39
+0B3D
+0B5C 0B5D
+0B5F 0B61
+0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB5
+0BB7 0BB9
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C60 0C61
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CDE
+0CE0 0CE1
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D60 0D61
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0E01 0E30
+0E32 0E33
+0E40 0E46
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB0
+0EB2 0EB3
+0EBD
+0EC0 0EC4
+0EC6
+0EDC 0EDD
+0F00
+0F40 0F47
+0F49 0F6A
+0F88 0F8B
+1000 1021
+1023 1027
+1029 102A
+1050 1055
+10A0 10C5
+10D0 10F8
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1206
+1208 1246
+1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1286
+1288
+128A 128D
+1290 12AE
+12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12CE
+12D0 12D6
+12D8 12EE
+12F0 130E
+1310
+1312 1315
+1318 131E
+1320 1346
+1348 135A
+13A0 13F4
+1401 166C
+166F 1676
+1681 169A
+16A0 16EA
+16EE 16F0
+1700 170C
+170E 1711
+1720 1731
+1740 1751
+1760 176C
+176E 1770
+1780 17B3
+17D7
+17DC
+1820 1877
+1880 18A8
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC2 1FC4
+1FC6 1FCC
+1FD0 1FD3
+1FD6 1FDB
+1FE0 1FEC
+1FF2 1FF4
+1FF6 1FFC
+2071
+207F
+2102
+2107
+210A 2113
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+212F 2131
+2133 2139
+213D 213F
+2145 2149
+2160 2183
+3005 3007
+3021 3029
+3031 3035
+3038 303C
+3041 3096
+309D 309F
+30A1 30FA
+30FC 30FF
+3105 312C
+3131 318E
+31A0 31B7
+31F0 31FF
+3400 4DB5
+4E00 9FA5
+A000 A48C
+AC00 D7A3
+F900 FA2D
+FA30 FA6A
+FB00 FB06
+FB13 FB17
+FB1D
+FB1F FB28
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFB
+FE70 FE74
+FE76 FEFC
+FF21 FF3A
+FF41 FF5A
+FF66 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+10300 1031E
+10330 1034A
+10400 10425
+10428 1044D
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C0
+1D4C2 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A3
+1D6A8 1D6C0
+1D6C2 1D6DA
+1D6DC 1D6FA
+1D6FC 1D714
+1D716 1D734
+1D736 1D74E
+1D750 1D76E
+1D770 1D788
+1D78A 1D7A8
+1D7AA 1D7C2
+1D7C4 1D7C9
+20000 2A6D6
+2F800 2FA1D
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Ideograp.pl b/Master/xemtex/perl/lib/unicore/lib/Ideograp.pl
new file mode 100644
index 00000000000..476d5cd700e
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Ideograp.pl
@@ -0,0 +1,20 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Ideographic} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Ideographic'
+#
+return <<'END';
+3006 3007 Ideographic
+3021 3029 Ideographic
+3038 303A Ideographic
+3400 4DB5 Ideographic
+4E00 9FA5 Ideographic
+F900 FA2D Ideographic
+20000 2A6D6 Ideographic
+2F800 2FA1D Ideographic
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/IdsBinar.pl b/Master/xemtex/perl/lib/unicore/lib/IdsBinar.pl
new file mode 100644
index 00000000000..d138d0a8d8c
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/IdsBinar.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{IdsBinaryOperator} (and fuzzy permutations)
+#
+# Meaning: Extended property 'IDS_Binary_Operator'
+#
+return <<'END';
+2FF0 2FF1 IDS_Binary_Operator
+2FF4 2FFB IDS_Binary_Operator
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/IdsTrina.pl b/Master/xemtex/perl/lib/unicore/lib/IdsTrina.pl
new file mode 100644
index 00000000000..587606bad40
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/IdsTrina.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{IdsTrinaryOperator} (and fuzzy permutations)
+#
+# Meaning: Extended property 'IDS_Trinary_Operator'
+#
+return <<'END';
+2FF2 2FF3 IDS_Trinary_Operator
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InAlphab.pl b/Master/xemtex/perl/lib/unicore/lib/InAlphab.pl
new file mode 100644
index 00000000000..2ecd85da4bb
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InAlphab.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InAlphabeticPresentationForms} (and fuzzy permutations)
+#
+# Meaning: Block 'Alphabetic Presentation Forms'
+#
+return <<'END';
+FB00 FB4F Alphabetic Presentation Forms
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InArabi2.pl b/Master/xemtex/perl/lib/unicore/lib/InArabi2.pl
new file mode 100644
index 00000000000..77e704b3dfe
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InArabi2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InArabicPresentationFormsB} (and fuzzy permutations)
+#
+# Meaning: Block 'Arabic Presentation Forms-B'
+#
+return <<'END';
+FE70 FEFF Arabic Presentation Forms-B
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InArabi3.pl b/Master/xemtex/perl/lib/unicore/lib/InArabi3.pl
new file mode 100644
index 00000000000..8ab3bb04a74
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InArabi3.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InArabicPresentationFormsA} (and fuzzy permutations)
+#
+# Meaning: Block 'Arabic Presentation Forms-A'
+#
+return <<'END';
+FB50 FDFF Arabic Presentation Forms-A
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InArabic.pl b/Master/xemtex/perl/lib/unicore/lib/InArabic.pl
new file mode 100644
index 00000000000..ac250e86259
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InArabic.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InArabic} (and fuzzy permutations)
+#
+# Meaning: Block 'Arabic'
+#
+return <<'END';
+0600 06FF Arabic
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InArmeni.pl b/Master/xemtex/perl/lib/unicore/lib/InArmeni.pl
new file mode 100644
index 00000000000..62a07777423
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InArmeni.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InArmenian} (and fuzzy permutations)
+#
+# Meaning: Block 'Armenian'
+#
+return <<'END';
+0530 058F Armenian
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InArrows.pl b/Master/xemtex/perl/lib/unicore/lib/InArrows.pl
new file mode 100644
index 00000000000..15f4c0bacef
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InArrows.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InArrows} (and fuzzy permutations)
+#
+# Meaning: Block 'Arrows'
+#
+return <<'END';
+2190 21FF Arrows
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InBasicL.pl b/Master/xemtex/perl/lib/unicore/lib/InBasicL.pl
new file mode 100644
index 00000000000..b15a479ffe2
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InBasicL.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InBasicLatin} (and fuzzy permutations)
+#
+# Meaning: Block 'Basic Latin'
+#
+return <<'END';
+0000 007F Basic Latin
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InBengal.pl b/Master/xemtex/perl/lib/unicore/lib/InBengal.pl
new file mode 100644
index 00000000000..c20bf6cda0a
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InBengal.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InBengali} (and fuzzy permutations)
+#
+# Meaning: Block 'Bengali'
+#
+return <<'END';
+0980 09FF Bengali
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InBlockE.pl b/Master/xemtex/perl/lib/unicore/lib/InBlockE.pl
new file mode 100644
index 00000000000..b301e9d358a
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InBlockE.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InBlockElements} (and fuzzy permutations)
+#
+# Meaning: Block 'Block Elements'
+#
+return <<'END';
+2580 259F Block Elements
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InBopom2.pl b/Master/xemtex/perl/lib/unicore/lib/InBopom2.pl
new file mode 100644
index 00000000000..8320eb520d3
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InBopom2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InBopomofoExtended} (and fuzzy permutations)
+#
+# Meaning: Block 'Bopomofo Extended'
+#
+return <<'END';
+31A0 31BF Bopomofo Extended
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InBopomo.pl b/Master/xemtex/perl/lib/unicore/lib/InBopomo.pl
new file mode 100644
index 00000000000..43edd7cc649
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InBopomo.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InBopomofo} (and fuzzy permutations)
+#
+# Meaning: Block 'Bopomofo'
+#
+return <<'END';
+3100 312F Bopomofo
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InBoxDra.pl b/Master/xemtex/perl/lib/unicore/lib/InBoxDra.pl
new file mode 100644
index 00000000000..4f3698f06bf
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InBoxDra.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InBoxDrawing} (and fuzzy permutations)
+#
+# Meaning: Block 'Box Drawing'
+#
+return <<'END';
+2500 257F Box Drawing
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InBraill.pl b/Master/xemtex/perl/lib/unicore/lib/InBraill.pl
new file mode 100644
index 00000000000..b03465e91be
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InBraill.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InBraillePatterns} (and fuzzy permutations)
+#
+# Meaning: Block 'Braille Patterns'
+#
+return <<'END';
+2800 28FF Braille Patterns
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InBuhid.pl b/Master/xemtex/perl/lib/unicore/lib/InBuhid.pl
new file mode 100644
index 00000000000..f58c9c2df10
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InBuhid.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InBuhid} (and fuzzy permutations)
+#
+# Meaning: Block 'Buhid'
+#
+return <<'END';
+1740 175F Buhid
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InByzant.pl b/Master/xemtex/perl/lib/unicore/lib/InByzant.pl
new file mode 100644
index 00000000000..a706086ceb1
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InByzant.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InByzantineMusicalSymbols} (and fuzzy permutations)
+#
+# Meaning: Block 'Byzantine Musical Symbols'
+#
+return <<'END';
+1D000 1D0FF Byzantine Musical Symbols
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InCherok.pl b/Master/xemtex/perl/lib/unicore/lib/InCherok.pl
new file mode 100644
index 00000000000..089e3f684d6
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InCherok.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCherokee} (and fuzzy permutations)
+#
+# Meaning: Block 'Cherokee'
+#
+return <<'END';
+13A0 13FF Cherokee
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InCjkCo2.pl b/Master/xemtex/perl/lib/unicore/lib/InCjkCo2.pl
new file mode 100644
index 00000000000..bf9af659c86
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InCjkCo2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCjkCompatibilityForms} (and fuzzy permutations)
+#
+# Meaning: Block 'CJK Compatibility Forms'
+#
+return <<'END';
+FE30 FE4F CJK Compatibility Forms
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InCjkCo3.pl b/Master/xemtex/perl/lib/unicore/lib/InCjkCo3.pl
new file mode 100644
index 00000000000..678c493885e
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InCjkCo3.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCjkCompatibilityIdeographs} (and fuzzy permutations)
+#
+# Meaning: Block 'CJK Compatibility Ideographs'
+#
+return <<'END';
+F900 FAFF CJK Compatibility Ideographs
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InCjkCo4.pl b/Master/xemtex/perl/lib/unicore/lib/InCjkCo4.pl
new file mode 100644
index 00000000000..05bde2e48d5
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InCjkCo4.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCjkCompatibilityIdeographsSupplement} (and fuzzy permutations)
+#
+# Meaning: Block 'CJK Compatibility Ideographs Supplement'
+#
+return <<'END';
+2F800 2FA1F CJK Compatibility Ideographs Supplement
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InCjkCom.pl b/Master/xemtex/perl/lib/unicore/lib/InCjkCom.pl
new file mode 100644
index 00000000000..76f7396a299
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InCjkCom.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCjkCompatibility} (and fuzzy permutations)
+#
+# Meaning: Block 'CJK Compatibility'
+#
+return <<'END';
+3300 33FF CJK Compatibility
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InCjkRad.pl b/Master/xemtex/perl/lib/unicore/lib/InCjkRad.pl
new file mode 100644
index 00000000000..46e7463cbff
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InCjkRad.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCjkRadicalsSupplement} (and fuzzy permutations)
+#
+# Meaning: Block 'CJK Radicals Supplement'
+#
+return <<'END';
+2E80 2EFF CJK Radicals Supplement
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InCjkSym.pl b/Master/xemtex/perl/lib/unicore/lib/InCjkSym.pl
new file mode 100644
index 00000000000..293608f8fbf
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InCjkSym.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCjkSymbolsAndPunctuation} (and fuzzy permutations)
+#
+# Meaning: Block 'CJK Symbols and Punctuation'
+#
+return <<'END';
+3000 303F CJK Symbols and Punctuation
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InCjkUn2.pl b/Master/xemtex/perl/lib/unicore/lib/InCjkUn2.pl
new file mode 100644
index 00000000000..2f8ce719449
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InCjkUn2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCjkUnifiedIdeographsExtensionB} (and fuzzy permutations)
+#
+# Meaning: Block 'CJK Unified Ideographs Extension B'
+#
+return <<'END';
+20000 2A6DF CJK Unified Ideographs Extension B
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InCjkUn3.pl b/Master/xemtex/perl/lib/unicore/lib/InCjkUn3.pl
new file mode 100644
index 00000000000..3967c210621
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InCjkUn3.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCjkUnifiedIdeographsExtensionA} (and fuzzy permutations)
+#
+# Meaning: Block 'CJK Unified Ideographs Extension A'
+#
+return <<'END';
+3400 4DBF CJK Unified Ideographs Extension A
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InCjkUni.pl b/Master/xemtex/perl/lib/unicore/lib/InCjkUni.pl
new file mode 100644
index 00000000000..62c36bf37cc
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InCjkUni.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCjkUnifiedIdeographs} (and fuzzy permutations)
+#
+# Meaning: Block 'CJK Unified Ideographs'
+#
+return <<'END';
+4E00 9FFF CJK Unified Ideographs
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InCombi2.pl b/Master/xemtex/perl/lib/unicore/lib/InCombi2.pl
new file mode 100644
index 00000000000..f4169cfe7fc
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InCombi2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCombiningDiacriticalMarks} (and fuzzy permutations)
+#
+# Meaning: Block 'Combining Diacritical Marks'
+#
+return <<'END';
+0300 036F Combining Diacritical Marks
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InCombi3.pl b/Master/xemtex/perl/lib/unicore/lib/InCombi3.pl
new file mode 100644
index 00000000000..7dde2138522
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InCombi3.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCombiningDiacriticalMarksForSymbols} (and fuzzy permutations)
+#
+# Meaning: Block 'Combining Diacritical Marks for Symbols'
+#
+return <<'END';
+20D0 20FF Combining Diacritical Marks for Symbols
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InCombin.pl b/Master/xemtex/perl/lib/unicore/lib/InCombin.pl
new file mode 100644
index 00000000000..5e2670da706
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InCombin.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCombiningHalfMarks} (and fuzzy permutations)
+#
+# Meaning: Block 'Combining Half Marks'
+#
+return <<'END';
+FE20 FE2F Combining Half Marks
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InContro.pl b/Master/xemtex/perl/lib/unicore/lib/InContro.pl
new file mode 100644
index 00000000000..5460b22a1ee
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InContro.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InControlPictures} (and fuzzy permutations)
+#
+# Meaning: Block 'Control Pictures'
+#
+return <<'END';
+2400 243F Control Pictures
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InCurren.pl b/Master/xemtex/perl/lib/unicore/lib/InCurren.pl
new file mode 100644
index 00000000000..44182705cd9
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InCurren.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCurrencySymbols} (and fuzzy permutations)
+#
+# Meaning: Block 'Currency Symbols'
+#
+return <<'END';
+20A0 20CF Currency Symbols
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InCyril2.pl b/Master/xemtex/perl/lib/unicore/lib/InCyril2.pl
new file mode 100644
index 00000000000..41f8f20712d
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InCyril2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCyrillicSupplementary} (and fuzzy permutations)
+#
+# Meaning: Block 'Cyrillic Supplementary'
+#
+return <<'END';
+0500 052F Cyrillic Supplementary
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InCyrill.pl b/Master/xemtex/perl/lib/unicore/lib/InCyrill.pl
new file mode 100644
index 00000000000..9d6f53a96eb
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InCyrill.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCyrillic} (and fuzzy permutations)
+#
+# Meaning: Block 'Cyrillic'
+#
+return <<'END';
+0400 04FF Cyrillic
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InDesere.pl b/Master/xemtex/perl/lib/unicore/lib/InDesere.pl
new file mode 100644
index 00000000000..5e8b99f164f
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InDesere.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InDeseret} (and fuzzy permutations)
+#
+# Meaning: Block 'Deseret'
+#
+return <<'END';
+10400 1044F Deseret
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InDevana.pl b/Master/xemtex/perl/lib/unicore/lib/InDevana.pl
new file mode 100644
index 00000000000..eaaa7126905
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InDevana.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InDevanagari} (and fuzzy permutations)
+#
+# Meaning: Block 'Devanagari'
+#
+return <<'END';
+0900 097F Devanagari
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InDingba.pl b/Master/xemtex/perl/lib/unicore/lib/InDingba.pl
new file mode 100644
index 00000000000..72eef3587a7
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InDingba.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InDingbats} (and fuzzy permutations)
+#
+# Meaning: Block 'Dingbats'
+#
+return <<'END';
+2700 27BF Dingbats
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InEnclo2.pl b/Master/xemtex/perl/lib/unicore/lib/InEnclo2.pl
new file mode 100644
index 00000000000..aadcbdb7d32
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InEnclo2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InEnclosedCjkLettersAndMonths} (and fuzzy permutations)
+#
+# Meaning: Block 'Enclosed CJK Letters and Months'
+#
+return <<'END';
+3200 32FF Enclosed CJK Letters and Months
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InEnclos.pl b/Master/xemtex/perl/lib/unicore/lib/InEnclos.pl
new file mode 100644
index 00000000000..82c20de16f8
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InEnclos.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InEnclosedAlphanumerics} (and fuzzy permutations)
+#
+# Meaning: Block 'Enclosed Alphanumerics'
+#
+return <<'END';
+2460 24FF Enclosed Alphanumerics
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InEthiop.pl b/Master/xemtex/perl/lib/unicore/lib/InEthiop.pl
new file mode 100644
index 00000000000..fcb2053e44f
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InEthiop.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InEthiopic} (and fuzzy permutations)
+#
+# Meaning: Block 'Ethiopic'
+#
+return <<'END';
+1200 137F Ethiopic
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InGenera.pl b/Master/xemtex/perl/lib/unicore/lib/InGenera.pl
new file mode 100644
index 00000000000..2fd27a7b771
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InGenera.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InGeneralPunctuation} (and fuzzy permutations)
+#
+# Meaning: Block 'General Punctuation'
+#
+return <<'END';
+2000 206F General Punctuation
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InGeomet.pl b/Master/xemtex/perl/lib/unicore/lib/InGeomet.pl
new file mode 100644
index 00000000000..817dabc2b22
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InGeomet.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InGeometricShapes} (and fuzzy permutations)
+#
+# Meaning: Block 'Geometric Shapes'
+#
+return <<'END';
+25A0 25FF Geometric Shapes
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InGeorgi.pl b/Master/xemtex/perl/lib/unicore/lib/InGeorgi.pl
new file mode 100644
index 00000000000..7e965445909
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InGeorgi.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InGeorgian} (and fuzzy permutations)
+#
+# Meaning: Block 'Georgian'
+#
+return <<'END';
+10A0 10FF Georgian
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InGothic.pl b/Master/xemtex/perl/lib/unicore/lib/InGothic.pl
new file mode 100644
index 00000000000..552cba4f000
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InGothic.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InGothic} (and fuzzy permutations)
+#
+# Meaning: Block 'Gothic'
+#
+return <<'END';
+10330 1034F Gothic
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InGreek.pl b/Master/xemtex/perl/lib/unicore/lib/InGreek.pl
new file mode 100644
index 00000000000..e932705c4ed
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InGreek.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InGreek} (and fuzzy permutations)
+#
+# Meaning: Block 'Greek'
+#
+return <<'END';
+0370 03FF Greek
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InGreekA.pl b/Master/xemtex/perl/lib/unicore/lib/InGreekA.pl
new file mode 100644
index 00000000000..d09fd3daf2e
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InGreekA.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InGreekAndCoptic} (and fuzzy permutations)
+#
+# Meaning: Block 'Greek and Coptic'
+#
+return <<'END';
+0370 03FF Greek and Coptic
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InGreekE.pl b/Master/xemtex/perl/lib/unicore/lib/InGreekE.pl
new file mode 100644
index 00000000000..06965f969d0
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InGreekE.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InGreekExtended} (and fuzzy permutations)
+#
+# Meaning: Block 'Greek Extended'
+#
+return <<'END';
+1F00 1FFF Greek Extended
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InGujara.pl b/Master/xemtex/perl/lib/unicore/lib/InGujara.pl
new file mode 100644
index 00000000000..f0a8e4a6a29
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InGujara.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InGujarati} (and fuzzy permutations)
+#
+# Meaning: Block 'Gujarati'
+#
+return <<'END';
+0A80 0AFF Gujarati
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InGurmuk.pl b/Master/xemtex/perl/lib/unicore/lib/InGurmuk.pl
new file mode 100644
index 00000000000..7023d05cfb7
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InGurmuk.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InGurmukhi} (and fuzzy permutations)
+#
+# Meaning: Block 'Gurmukhi'
+#
+return <<'END';
+0A00 0A7F Gurmukhi
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InHalfwi.pl b/Master/xemtex/perl/lib/unicore/lib/InHalfwi.pl
new file mode 100644
index 00000000000..d543110b84f
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InHalfwi.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InHalfwidthAndFullwidthForms} (and fuzzy permutations)
+#
+# Meaning: Block 'Halfwidth and Fullwidth Forms'
+#
+return <<'END';
+FF00 FFEF Halfwidth and Fullwidth Forms
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InHangu2.pl b/Master/xemtex/perl/lib/unicore/lib/InHangu2.pl
new file mode 100644
index 00000000000..e09ff114a18
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InHangu2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InHangulSyllables} (and fuzzy permutations)
+#
+# Meaning: Block 'Hangul Syllables'
+#
+return <<'END';
+AC00 D7AF Hangul Syllables
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InHangu3.pl b/Master/xemtex/perl/lib/unicore/lib/InHangu3.pl
new file mode 100644
index 00000000000..e256ea5dc95
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InHangu3.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InHangulCompatibilityJamo} (and fuzzy permutations)
+#
+# Meaning: Block 'Hangul Compatibility Jamo'
+#
+return <<'END';
+3130 318F Hangul Compatibility Jamo
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InHangul.pl b/Master/xemtex/perl/lib/unicore/lib/InHangul.pl
new file mode 100644
index 00000000000..d0ef32e871d
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InHangul.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InHangulJamo} (and fuzzy permutations)
+#
+# Meaning: Block 'Hangul Jamo'
+#
+return <<'END';
+1100 11FF Hangul Jamo
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InHanuno.pl b/Master/xemtex/perl/lib/unicore/lib/InHanuno.pl
new file mode 100644
index 00000000000..5ea90288d75
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InHanuno.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InHanunoo} (and fuzzy permutations)
+#
+# Meaning: Block 'Hanunoo'
+#
+return <<'END';
+1720 173F Hanunoo
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InHebrew.pl b/Master/xemtex/perl/lib/unicore/lib/InHebrew.pl
new file mode 100644
index 00000000000..14459f46876
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InHebrew.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InHebrew} (and fuzzy permutations)
+#
+# Meaning: Block 'Hebrew'
+#
+return <<'END';
+0590 05FF Hebrew
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InHighPr.pl b/Master/xemtex/perl/lib/unicore/lib/InHighPr.pl
new file mode 100644
index 00000000000..fd92248fa5f
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InHighPr.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InHighPrivateUseSurrogates} (and fuzzy permutations)
+#
+# Meaning: Block 'High Private Use Surrogates'
+#
+return <<'END';
+DB80 DBFF High Private Use Surrogates
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InHighSu.pl b/Master/xemtex/perl/lib/unicore/lib/InHighSu.pl
new file mode 100644
index 00000000000..eec73b3cb35
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InHighSu.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InHighSurrogates} (and fuzzy permutations)
+#
+# Meaning: Block 'High Surrogates'
+#
+return <<'END';
+D800 DB7F High Surrogates
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InHiraga.pl b/Master/xemtex/perl/lib/unicore/lib/InHiraga.pl
new file mode 100644
index 00000000000..2db67da347f
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InHiraga.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InHiragana} (and fuzzy permutations)
+#
+# Meaning: Block 'Hiragana'
+#
+return <<'END';
+3040 309F Hiragana
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InIdeogr.pl b/Master/xemtex/perl/lib/unicore/lib/InIdeogr.pl
new file mode 100644
index 00000000000..95f6229928e
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InIdeogr.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InIdeographicDescriptionCharacters} (and fuzzy permutations)
+#
+# Meaning: Block 'Ideographic Description Characters'
+#
+return <<'END';
+2FF0 2FFF Ideographic Description Characters
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InIpaExt.pl b/Master/xemtex/perl/lib/unicore/lib/InIpaExt.pl
new file mode 100644
index 00000000000..3280cb6ccf8
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InIpaExt.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InIpaExtensions} (and fuzzy permutations)
+#
+# Meaning: Block 'IPA Extensions'
+#
+return <<'END';
+0250 02AF IPA Extensions
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InKanbun.pl b/Master/xemtex/perl/lib/unicore/lib/InKanbun.pl
new file mode 100644
index 00000000000..5dddfb381f9
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InKanbun.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InKanbun} (and fuzzy permutations)
+#
+# Meaning: Block 'Kanbun'
+#
+return <<'END';
+3190 319F Kanbun
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InKangxi.pl b/Master/xemtex/perl/lib/unicore/lib/InKangxi.pl
new file mode 100644
index 00000000000..49f334c2284
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InKangxi.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InKangxiRadicals} (and fuzzy permutations)
+#
+# Meaning: Block 'Kangxi Radicals'
+#
+return <<'END';
+2F00 2FDF Kangxi Radicals
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InKannad.pl b/Master/xemtex/perl/lib/unicore/lib/InKannad.pl
new file mode 100644
index 00000000000..418011cb128
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InKannad.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InKannada} (and fuzzy permutations)
+#
+# Meaning: Block 'Kannada'
+#
+return <<'END';
+0C80 0CFF Kannada
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InKatak2.pl b/Master/xemtex/perl/lib/unicore/lib/InKatak2.pl
new file mode 100644
index 00000000000..6ed8a84b8eb
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InKatak2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InKatakanaPhoneticExtensions} (and fuzzy permutations)
+#
+# Meaning: Block 'Katakana Phonetic Extensions'
+#
+return <<'END';
+31F0 31FF Katakana Phonetic Extensions
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InKataka.pl b/Master/xemtex/perl/lib/unicore/lib/InKataka.pl
new file mode 100644
index 00000000000..5ef3ce010f8
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InKataka.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InKatakana} (and fuzzy permutations)
+#
+# Meaning: Block 'Katakana'
+#
+return <<'END';
+30A0 30FF Katakana
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InKhmer.pl b/Master/xemtex/perl/lib/unicore/lib/InKhmer.pl
new file mode 100644
index 00000000000..8c2efea0429
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InKhmer.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InKhmer} (and fuzzy permutations)
+#
+# Meaning: Block 'Khmer'
+#
+return <<'END';
+1780 17FF Khmer
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InLao.pl b/Master/xemtex/perl/lib/unicore/lib/InLao.pl
new file mode 100644
index 00000000000..eb96edca009
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InLao.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InLao} (and fuzzy permutations)
+#
+# Meaning: Block 'Lao'
+#
+return <<'END';
+0E80 0EFF Lao
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InLatin1.pl b/Master/xemtex/perl/lib/unicore/lib/InLatin1.pl
new file mode 100644
index 00000000000..52e4c71db85
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InLatin1.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InLatin1Supplement} (and fuzzy permutations)
+#
+# Meaning: Block 'Latin-1 Supplement'
+#
+return <<'END';
+0080 00FF Latin-1 Supplement
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InLatin2.pl b/Master/xemtex/perl/lib/unicore/lib/InLatin2.pl
new file mode 100644
index 00000000000..a5f0d22f95c
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InLatin2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InLatinExtendedA} (and fuzzy permutations)
+#
+# Meaning: Block 'Latin Extended-A'
+#
+return <<'END';
+0100 017F Latin Extended-A
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InLatin3.pl b/Master/xemtex/perl/lib/unicore/lib/InLatin3.pl
new file mode 100644
index 00000000000..8a53dc7f5f1
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InLatin3.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InLatinExtendedAdditional} (and fuzzy permutations)
+#
+# Meaning: Block 'Latin Extended Additional'
+#
+return <<'END';
+1E00 1EFF Latin Extended Additional
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InLatinE.pl b/Master/xemtex/perl/lib/unicore/lib/InLatinE.pl
new file mode 100644
index 00000000000..3a81b6e3382
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InLatinE.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InLatinExtendedB} (and fuzzy permutations)
+#
+# Meaning: Block 'Latin Extended-B'
+#
+return <<'END';
+0180 024F Latin Extended-B
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InLetter.pl b/Master/xemtex/perl/lib/unicore/lib/InLetter.pl
new file mode 100644
index 00000000000..d452812a3c5
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InLetter.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InLetterlikeSymbols} (and fuzzy permutations)
+#
+# Meaning: Block 'Letterlike Symbols'
+#
+return <<'END';
+2100 214F Letterlike Symbols
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InLowSur.pl b/Master/xemtex/perl/lib/unicore/lib/InLowSur.pl
new file mode 100644
index 00000000000..5be81e511e0
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InLowSur.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InLowSurrogates} (and fuzzy permutations)
+#
+# Meaning: Block 'Low Surrogates'
+#
+return <<'END';
+DC00 DFFF Low Surrogates
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InMalaya.pl b/Master/xemtex/perl/lib/unicore/lib/InMalaya.pl
new file mode 100644
index 00000000000..ee91b9a2ead
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InMalaya.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMalayalam} (and fuzzy permutations)
+#
+# Meaning: Block 'Malayalam'
+#
+return <<'END';
+0D00 0D7F Malayalam
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InMathe2.pl b/Master/xemtex/perl/lib/unicore/lib/InMathe2.pl
new file mode 100644
index 00000000000..aba54a670fd
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InMathe2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMathematicalAlphanumericSymbols} (and fuzzy permutations)
+#
+# Meaning: Block 'Mathematical Alphanumeric Symbols'
+#
+return <<'END';
+1D400 1D7FF Mathematical Alphanumeric Symbols
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InMathem.pl b/Master/xemtex/perl/lib/unicore/lib/InMathem.pl
new file mode 100644
index 00000000000..d037fec9547
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InMathem.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMathematicalOperators} (and fuzzy permutations)
+#
+# Meaning: Block 'Mathematical Operators'
+#
+return <<'END';
+2200 22FF Mathematical Operators
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InMisce2.pl b/Master/xemtex/perl/lib/unicore/lib/InMisce2.pl
new file mode 100644
index 00000000000..fb9217a2bfd
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InMisce2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMiscellaneousTechnical} (and fuzzy permutations)
+#
+# Meaning: Block 'Miscellaneous Technical'
+#
+return <<'END';
+2300 23FF Miscellaneous Technical
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InMisce3.pl b/Master/xemtex/perl/lib/unicore/lib/InMisce3.pl
new file mode 100644
index 00000000000..a273df5c133
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InMisce3.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMiscellaneousMathematicalSymbolsA} (and fuzzy permutations)
+#
+# Meaning: Block 'Miscellaneous Mathematical Symbols-A'
+#
+return <<'END';
+27C0 27EF Miscellaneous Mathematical Symbols-A
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InMisce4.pl b/Master/xemtex/perl/lib/unicore/lib/InMisce4.pl
new file mode 100644
index 00000000000..1c8e240fca7
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InMisce4.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMiscellaneousMathematicalSymbolsB} (and fuzzy permutations)
+#
+# Meaning: Block 'Miscellaneous Mathematical Symbols-B'
+#
+return <<'END';
+2980 29FF Miscellaneous Mathematical Symbols-B
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InMiscel.pl b/Master/xemtex/perl/lib/unicore/lib/InMiscel.pl
new file mode 100644
index 00000000000..f1668ea83c4
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InMiscel.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMiscellaneousSymbols} (and fuzzy permutations)
+#
+# Meaning: Block 'Miscellaneous Symbols'
+#
+return <<'END';
+2600 26FF Miscellaneous Symbols
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InMongol.pl b/Master/xemtex/perl/lib/unicore/lib/InMongol.pl
new file mode 100644
index 00000000000..e1771ec83c7
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InMongol.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMongolian} (and fuzzy permutations)
+#
+# Meaning: Block 'Mongolian'
+#
+return <<'END';
+1800 18AF Mongolian
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InMusica.pl b/Master/xemtex/perl/lib/unicore/lib/InMusica.pl
new file mode 100644
index 00000000000..74419bc98c8
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InMusica.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMusicalSymbols} (and fuzzy permutations)
+#
+# Meaning: Block 'Musical Symbols'
+#
+return <<'END';
+1D100 1D1FF Musical Symbols
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InMyanma.pl b/Master/xemtex/perl/lib/unicore/lib/InMyanma.pl
new file mode 100644
index 00000000000..e00a9f29422
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InMyanma.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMyanmar} (and fuzzy permutations)
+#
+# Meaning: Block 'Myanmar'
+#
+return <<'END';
+1000 109F Myanmar
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InNumber.pl b/Master/xemtex/perl/lib/unicore/lib/InNumber.pl
new file mode 100644
index 00000000000..e1f219e98fa
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InNumber.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InNumberForms} (and fuzzy permutations)
+#
+# Meaning: Block 'Number Forms'
+#
+return <<'END';
+2150 218F Number Forms
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InOgham.pl b/Master/xemtex/perl/lib/unicore/lib/InOgham.pl
new file mode 100644
index 00000000000..6336e02a379
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InOgham.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InOgham} (and fuzzy permutations)
+#
+# Meaning: Block 'Ogham'
+#
+return <<'END';
+1680 169F Ogham
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InOldIta.pl b/Master/xemtex/perl/lib/unicore/lib/InOldIta.pl
new file mode 100644
index 00000000000..71b2acce1b6
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InOldIta.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InOldItalic} (and fuzzy permutations)
+#
+# Meaning: Block 'Old Italic'
+#
+return <<'END';
+10300 1032F Old Italic
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InOptica.pl b/Master/xemtex/perl/lib/unicore/lib/InOptica.pl
new file mode 100644
index 00000000000..bc3f3eefe53
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InOptica.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InOpticalCharacterRecognition} (and fuzzy permutations)
+#
+# Meaning: Block 'Optical Character Recognition'
+#
+return <<'END';
+2440 245F Optical Character Recognition
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InOriya.pl b/Master/xemtex/perl/lib/unicore/lib/InOriya.pl
new file mode 100644
index 00000000000..a8bc8aaa3f0
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InOriya.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InOriya} (and fuzzy permutations)
+#
+# Meaning: Block 'Oriya'
+#
+return <<'END';
+0B00 0B7F Oriya
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InPrivat.pl b/Master/xemtex/perl/lib/unicore/lib/InPrivat.pl
new file mode 100644
index 00000000000..a2b0d6bd4b7
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InPrivat.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InPrivateUseArea} (and fuzzy permutations)
+#
+# Meaning: Block 'Private Use Area'
+#
+return <<'END';
+E000 F8FF Private Use Area
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InRunic.pl b/Master/xemtex/perl/lib/unicore/lib/InRunic.pl
new file mode 100644
index 00000000000..b99e1fa44de
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InRunic.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InRunic} (and fuzzy permutations)
+#
+# Meaning: Block 'Runic'
+#
+return <<'END';
+16A0 16FF Runic
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InSinhal.pl b/Master/xemtex/perl/lib/unicore/lib/InSinhal.pl
new file mode 100644
index 00000000000..b08f3885193
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InSinhal.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSinhala} (and fuzzy permutations)
+#
+# Meaning: Block 'Sinhala'
+#
+return <<'END';
+0D80 0DFF Sinhala
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InSmallF.pl b/Master/xemtex/perl/lib/unicore/lib/InSmallF.pl
new file mode 100644
index 00000000000..7938a44c8db
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InSmallF.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSmallFormVariants} (and fuzzy permutations)
+#
+# Meaning: Block 'Small Form Variants'
+#
+return <<'END';
+FE50 FE6F Small Form Variants
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InSpacin.pl b/Master/xemtex/perl/lib/unicore/lib/InSpacin.pl
new file mode 100644
index 00000000000..9a382598f4a
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InSpacin.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSpacingModifierLetters} (and fuzzy permutations)
+#
+# Meaning: Block 'Spacing Modifier Letters'
+#
+return <<'END';
+02B0 02FF Spacing Modifier Letters
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InSpecia.pl b/Master/xemtex/perl/lib/unicore/lib/InSpecia.pl
new file mode 100644
index 00000000000..7d7651a6e70
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InSpecia.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSpecials} (and fuzzy permutations)
+#
+# Meaning: Block 'Specials'
+#
+return <<'END';
+FFF0 FFFF Specials
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InSupers.pl b/Master/xemtex/perl/lib/unicore/lib/InSupers.pl
new file mode 100644
index 00000000000..493f8170584
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InSupers.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSuperscriptsAndSubscripts} (and fuzzy permutations)
+#
+# Meaning: Block 'Superscripts and Subscripts'
+#
+return <<'END';
+2070 209F Superscripts and Subscripts
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InSuppl2.pl b/Master/xemtex/perl/lib/unicore/lib/InSuppl2.pl
new file mode 100644
index 00000000000..6e9fb082d96
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InSuppl2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSupplementalArrowsA} (and fuzzy permutations)
+#
+# Meaning: Block 'Supplemental Arrows-A'
+#
+return <<'END';
+27F0 27FF Supplemental Arrows-A
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InSuppl3.pl b/Master/xemtex/perl/lib/unicore/lib/InSuppl3.pl
new file mode 100644
index 00000000000..e4dc4791f9f
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InSuppl3.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSupplementaryPrivateUseAreaA} (and fuzzy permutations)
+#
+# Meaning: Block 'Supplementary Private Use Area-A'
+#
+return <<'END';
+F0000 FFFFF Supplementary Private Use Area-A
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InSuppl4.pl b/Master/xemtex/perl/lib/unicore/lib/InSuppl4.pl
new file mode 100644
index 00000000000..5a080021c18
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InSuppl4.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSupplementaryPrivateUseAreaB} (and fuzzy permutations)
+#
+# Meaning: Block 'Supplementary Private Use Area-B'
+#
+return <<'END';
+100000 10FFFF Supplementary Private Use Area-B
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InSuppl5.pl b/Master/xemtex/perl/lib/unicore/lib/InSuppl5.pl
new file mode 100644
index 00000000000..89c08807612
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InSuppl5.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSupplementalMathematicalOperators} (and fuzzy permutations)
+#
+# Meaning: Block 'Supplemental Mathematical Operators'
+#
+return <<'END';
+2A00 2AFF Supplemental Mathematical Operators
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InSupple.pl b/Master/xemtex/perl/lib/unicore/lib/InSupple.pl
new file mode 100644
index 00000000000..3fe71f2bd05
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InSupple.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSupplementalArrowsB} (and fuzzy permutations)
+#
+# Meaning: Block 'Supplemental Arrows-B'
+#
+return <<'END';
+2900 297F Supplemental Arrows-B
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InSyriac.pl b/Master/xemtex/perl/lib/unicore/lib/InSyriac.pl
new file mode 100644
index 00000000000..74f197037bd
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InSyriac.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSyriac} (and fuzzy permutations)
+#
+# Meaning: Block 'Syriac'
+#
+return <<'END';
+0700 074F Syriac
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InTagalo.pl b/Master/xemtex/perl/lib/unicore/lib/InTagalo.pl
new file mode 100644
index 00000000000..55c8ca466b2
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InTagalo.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InTagalog} (and fuzzy permutations)
+#
+# Meaning: Block 'Tagalog'
+#
+return <<'END';
+1700 171F Tagalog
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InTagban.pl b/Master/xemtex/perl/lib/unicore/lib/InTagban.pl
new file mode 100644
index 00000000000..9863a2e3c3f
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InTagban.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InTagbanwa} (and fuzzy permutations)
+#
+# Meaning: Block 'Tagbanwa'
+#
+return <<'END';
+1760 177F Tagbanwa
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InTags.pl b/Master/xemtex/perl/lib/unicore/lib/InTags.pl
new file mode 100644
index 00000000000..4a6600e29c3
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InTags.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InTags} (and fuzzy permutations)
+#
+# Meaning: Block 'Tags'
+#
+return <<'END';
+E0000 E007F Tags
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InTamil.pl b/Master/xemtex/perl/lib/unicore/lib/InTamil.pl
new file mode 100644
index 00000000000..20036caa54d
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InTamil.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InTamil} (and fuzzy permutations)
+#
+# Meaning: Block 'Tamil'
+#
+return <<'END';
+0B80 0BFF Tamil
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InTelugu.pl b/Master/xemtex/perl/lib/unicore/lib/InTelugu.pl
new file mode 100644
index 00000000000..1027f933339
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InTelugu.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InTelugu} (and fuzzy permutations)
+#
+# Meaning: Block 'Telugu'
+#
+return <<'END';
+0C00 0C7F Telugu
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InThaana.pl b/Master/xemtex/perl/lib/unicore/lib/InThaana.pl
new file mode 100644
index 00000000000..740d71bd28e
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InThaana.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InThaana} (and fuzzy permutations)
+#
+# Meaning: Block 'Thaana'
+#
+return <<'END';
+0780 07BF Thaana
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InThai.pl b/Master/xemtex/perl/lib/unicore/lib/InThai.pl
new file mode 100644
index 00000000000..db6a14581df
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InThai.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InThai} (and fuzzy permutations)
+#
+# Meaning: Block 'Thai'
+#
+return <<'END';
+0E00 0E7F Thai
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InTibeta.pl b/Master/xemtex/perl/lib/unicore/lib/InTibeta.pl
new file mode 100644
index 00000000000..8fbe185461c
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InTibeta.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InTibetan} (and fuzzy permutations)
+#
+# Meaning: Block 'Tibetan'
+#
+return <<'END';
+0F00 0FFF Tibetan
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InUnifie.pl b/Master/xemtex/perl/lib/unicore/lib/InUnifie.pl
new file mode 100644
index 00000000000..50d46f18aa6
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InUnifie.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InUnifiedCanadianAboriginalSyllabics} (and fuzzy permutations)
+#
+# Meaning: Block 'Unified Canadian Aboriginal Syllabics'
+#
+return <<'END';
+1400 167F Unified Canadian Aboriginal Syllabics
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InVariat.pl b/Master/xemtex/perl/lib/unicore/lib/InVariat.pl
new file mode 100644
index 00000000000..1aa8c298b8c
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InVariat.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InVariationSelectors} (and fuzzy permutations)
+#
+# Meaning: Block 'Variation Selectors'
+#
+return <<'END';
+FE00 FE0F Variation Selectors
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InYiRadi.pl b/Master/xemtex/perl/lib/unicore/lib/InYiRadi.pl
new file mode 100644
index 00000000000..7b4265f725a
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InYiRadi.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InYiRadicals} (and fuzzy permutations)
+#
+# Meaning: Block 'Yi Radicals'
+#
+return <<'END';
+A490 A4CF Yi Radicals
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/InYiSyll.pl b/Master/xemtex/perl/lib/unicore/lib/InYiSyll.pl
new file mode 100644
index 00000000000..c33de835d36
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/InYiSyll.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InYiSyllables} (and fuzzy permutations)
+#
+# Meaning: Block 'Yi Syllables'
+#
+return <<'END';
+A000 A48F Yi Syllables
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Inherite.pl b/Master/xemtex/perl/lib/unicore/lib/Inherite.pl
new file mode 100644
index 00000000000..49d811268eb
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Inherite.pl
@@ -0,0 +1,37 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Inherited} (and fuzzy permutations)
+#
+# Meaning: Script 'INHERITED'
+#
+return <<'END';
+0300 034F INHERITED
+0360 036F INHERITED
+0488 0489 INHERITED
+0591 05A1 INHERITED
+05A3 05B9 INHERITED
+05BB 05BD INHERITED
+05BF INHERITED
+05C1 05C2 INHERITED
+05C4 INHERITED
+064B 0655 INHERITED
+0670 INHERITED
+06D6 06E4 INHERITED
+06E7 06E8 INHERITED
+06EA 06ED INHERITED
+180B 180D INHERITED
+20D0 20EA INHERITED
+302A 302F INHERITED
+3099 309A INHERITED
+FB1E INHERITED
+FE00 FE0F INHERITED
+FE20 FE23 INHERITED
+1D167 1D169 INHERITED
+1D17B 1D182 INHERITED
+1D185 1D18B INHERITED
+1D1AA 1D1AD INHERITED
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/JoinCont.pl b/Master/xemtex/perl/lib/unicore/lib/JoinCont.pl
new file mode 100644
index 00000000000..be25b1afef6
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/JoinCont.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{JoinControl} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Join_Control'
+#
+return <<'END';
+200C 200D Join_Control
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Kannada.pl b/Master/xemtex/perl/lib/unicore/lib/Kannada.pl
new file mode 100644
index 00000000000..7c9a8580180
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Kannada.pl
@@ -0,0 +1,25 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Kannada} (and fuzzy permutations)
+#
+# Meaning: Script 'KANNADA'
+#
+return <<'END';
+0C82 0C83 KANNADA
+0C85 0C8C KANNADA
+0C8E 0C90 KANNADA
+0C92 0CA8 KANNADA
+0CAA 0CB3 KANNADA
+0CB5 0CB9 KANNADA
+0CBE 0CC4 KANNADA
+0CC6 0CC8 KANNADA
+0CCA 0CCD KANNADA
+0CD5 0CD6 KANNADA
+0CDE KANNADA
+0CE0 0CE1 KANNADA
+0CE6 0CEF KANNADA
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Katakana.pl b/Master/xemtex/perl/lib/unicore/lib/Katakana.pl
new file mode 100644
index 00000000000..b6503508832
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Katakana.pl
@@ -0,0 +1,17 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Katakana} (and fuzzy permutations)
+#
+# Meaning: Script 'KATAKANA'
+#
+return <<'END';
+30A1 30FA KATAKANA
+30FD 30FF KATAKANA
+31F0 31FF KATAKANA
+FF66 FF6F KATAKANA
+FF71 FF9D KATAKANA
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Khmer.pl b/Master/xemtex/perl/lib/unicore/lib/Khmer.pl
new file mode 100644
index 00000000000..1e69e0039d0
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Khmer.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Khmer} (and fuzzy permutations)
+#
+# Meaning: Script 'KHMER'
+#
+return <<'END';
+1780 17D3 KHMER
+17E0 17E9 KHMER
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/L.pl b/Master/xemtex/perl/lib/unicore/lib/L.pl
new file mode 100644
index 00000000000..5b17fe75891
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/L.pl
@@ -0,0 +1,319 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{L}
+# \p{L} (and fuzzy permutations)
+#
+# Meaning: Major Category 'L'
+#
+return <<'END';
+0041 005A
+0061 007A
+00AA
+00B5
+00BA
+00C0 00D6
+00D8 00F6
+00F8 0220
+0222 0233
+0250 02AD
+02B0 02B8
+02BB 02C1
+02D0 02D1
+02E0 02E4
+02EE
+037A
+0386
+0388 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F5
+0400 0481
+048A 04CE
+04D0 04F5
+04F8 04F9
+0500 050F
+0531 0556
+0559
+0561 0587
+05D0 05EA
+05F0 05F2
+0621 063A
+0640 064A
+066E 066F
+0671 06D3
+06D5
+06E5 06E6
+06FA 06FC
+0710
+0712 072C
+0780 07A5
+07B1
+0905 0939
+093D
+0950
+0958 0961
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09DC 09DD
+09DF 09E1
+09F0 09F1
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A59 0A5C
+0A5E
+0A72 0A74
+0A85 0A8B
+0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABD
+0AD0
+0AE0
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B36 0B39
+0B3D
+0B5C 0B5D
+0B5F 0B61
+0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB5
+0BB7 0BB9
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C60 0C61
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CDE
+0CE0 0CE1
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D60 0D61
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0E01 0E30
+0E32 0E33
+0E40 0E46
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB0
+0EB2 0EB3
+0EBD
+0EC0 0EC4
+0EC6
+0EDC 0EDD
+0F00
+0F40 0F47
+0F49 0F6A
+0F88 0F8B
+1000 1021
+1023 1027
+1029 102A
+1050 1055
+10A0 10C5
+10D0 10F8
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1206
+1208 1246
+1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1286
+1288
+128A 128D
+1290 12AE
+12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12CE
+12D0 12D6
+12D8 12EE
+12F0 130E
+1310
+1312 1315
+1318 131E
+1320 1346
+1348 135A
+13A0 13F4
+1401 166C
+166F 1676
+1681 169A
+16A0 16EA
+1700 170C
+170E 1711
+1720 1731
+1740 1751
+1760 176C
+176E 1770
+1780 17B3
+17D7
+17DC
+1820 1877
+1880 18A8
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC2 1FC4
+1FC6 1FCC
+1FD0 1FD3
+1FD6 1FDB
+1FE0 1FEC
+1FF2 1FF4
+1FF6 1FFC
+2071
+207F
+2102
+2107
+210A 2113
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+212F 2131
+2133 2139
+213D 213F
+2145 2149
+3005 3006
+3031 3035
+303B 303C
+3041 3096
+309D 309F
+30A1 30FA
+30FC 30FF
+3105 312C
+3131 318E
+31A0 31B7
+31F0 31FF
+3400 4DB5
+4E00 9FA5
+A000 A48C
+AC00 D7A3
+F900 FA2D
+FA30 FA6A
+FB00 FB06
+FB13 FB17
+FB1D
+FB1F FB28
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFB
+FE70 FE74
+FE76 FEFC
+FF21 FF3A
+FF41 FF5A
+FF66 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+10300 1031E
+10330 10349
+10400 10425
+10428 1044D
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C0
+1D4C2 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A3
+1D6A8 1D6C0
+1D6C2 1D6DA
+1D6DC 1D6FA
+1D6FC 1D714
+1D716 1D734
+1D736 1D74E
+1D750 1D76E
+1D770 1D788
+1D78A 1D7A8
+1D7AA 1D7C2
+1D7C4 1D7C9
+20000 2A6D6
+2F800 2FA1D
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/L_.pl b/Master/xemtex/perl/lib/unicore/lib/L_.pl
new file mode 100644
index 00000000000..44afbeb5922
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/L_.pl
@@ -0,0 +1,112 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{L&}
+#
+# Meaning: [\p{Ll}\p{Lu}\p{Lt}]
+#
+return <<'END';
+0041 005A
+0061 007A
+00AA
+00B5
+00BA
+00C0 00D6
+00D8 00F6
+00F8 01BA
+01BC 01BF
+01C4 0220
+0222 0233
+0250 02AD
+0386
+0388 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F5
+0400 0481
+048A 04CE
+04D0 04F5
+04F8 04F9
+0500 050F
+0531 0556
+0561 0587
+10A0 10C5
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC2 1FC4
+1FC6 1FCC
+1FD0 1FD3
+1FD6 1FDB
+1FE0 1FEC
+1FF2 1FF4
+1FF6 1FFC
+2071
+207F
+2102
+2107
+210A 2113
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+212F 2131
+2133 2134
+2139
+213D 213F
+2145 2149
+FB00 FB06
+FB13 FB17
+FF21 FF3A
+FF41 FF5A
+10400 10425
+10428 1044D
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C0
+1D4C2 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A3
+1D6A8 1D6C0
+1D6C2 1D6DA
+1D6DC 1D6FA
+1D6FC 1D714
+1D716 1D734
+1D736 1D74E
+1D750 1D76E
+1D770 1D788
+1D78A 1D7A8
+1D7AA 1D7C2
+1D7C4 1D7C9
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Lao.pl b/Master/xemtex/perl/lib/unicore/lib/Lao.pl
new file mode 100644
index 00000000000..83bc60c59b3
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Lao.pl
@@ -0,0 +1,30 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Lao} (and fuzzy permutations)
+#
+# Meaning: Script 'LAO'
+#
+return <<'END';
+0E81 0E82 LAO
+0E84 LAO
+0E87 0E88 LAO
+0E8A LAO
+0E8D LAO
+0E94 0E97 LAO
+0E99 0E9F LAO
+0EA1 0EA3 LAO
+0EA5 LAO
+0EA7 LAO
+0EAA 0EAB LAO
+0EAD 0EB9 LAO
+0EBB 0EBD LAO
+0EC0 0EC4 LAO
+0EC6 LAO
+0EC8 0ECD LAO
+0ED0 0ED9 LAO
+0EDC 0EDD LAO
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Latin.pl b/Master/xemtex/perl/lib/unicore/lib/Latin.pl
new file mode 100644
index 00000000000..2b27d1c2233
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Latin.pl
@@ -0,0 +1,31 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Latin} (and fuzzy permutations)
+#
+# Meaning: Script 'LATIN'
+#
+return <<'END';
+0041 005A LATIN
+0061 007A LATIN
+00AA LATIN
+00BA LATIN
+00C0 00D6 LATIN
+00D8 00F6 LATIN
+00F8 0220 LATIN
+0222 0233 LATIN
+0250 02AD LATIN
+02B0 02B8 LATIN
+02E0 02E4 LATIN
+1E00 1E9B LATIN
+1EA0 1EF9 LATIN
+2071 LATIN
+207F LATIN
+212A 212B LATIN
+FB00 FB06 LATIN
+FF21 FF3A LATIN
+FF41 FF5A LATIN
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Ll.pl b/Master/xemtex/perl/lib/unicore/lib/Ll.pl
new file mode 100644
index 00000000000..8655dfea53f
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Ll.pl
@@ -0,0 +1,433 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Ll}
+# \p{Ll} (and fuzzy permutations)
+#
+# Meaning: General Category 'Ll'
+#
+return <<'END';
+0061 007A
+00AA
+00B5
+00BA
+00DF 00F6
+00F8 00FF
+0101
+0103
+0105
+0107
+0109
+010B
+010D
+010F
+0111
+0113
+0115
+0117
+0119
+011B
+011D
+011F
+0121
+0123
+0125
+0127
+0129
+012B
+012D
+012F
+0131
+0133
+0135
+0137 0138
+013A
+013C
+013E
+0140
+0142
+0144
+0146
+0148 0149
+014B
+014D
+014F
+0151
+0153
+0155
+0157
+0159
+015B
+015D
+015F
+0161
+0163
+0165
+0167
+0169
+016B
+016D
+016F
+0171
+0173
+0175
+0177
+017A
+017C
+017E 0180
+0183
+0185
+0188
+018C 018D
+0192
+0195
+0199 019B
+019E
+01A1
+01A3
+01A5
+01A8
+01AA 01AB
+01AD
+01B0
+01B4
+01B6
+01B9 01BA
+01BD 01BF
+01C6
+01C9
+01CC
+01CE
+01D0
+01D2
+01D4
+01D6
+01D8
+01DA
+01DC 01DD
+01DF
+01E1
+01E3
+01E5
+01E7
+01E9
+01EB
+01ED
+01EF 01F0
+01F3
+01F5
+01F9
+01FB
+01FD
+01FF
+0201
+0203
+0205
+0207
+0209
+020B
+020D
+020F
+0211
+0213
+0215
+0217
+0219
+021B
+021D
+021F
+0223
+0225
+0227
+0229
+022B
+022D
+022F
+0231
+0233
+0250 02AD
+0390
+03AC 03CE
+03D0 03D1
+03D5 03D7
+03D9
+03DB
+03DD
+03DF
+03E1
+03E3
+03E5
+03E7
+03E9
+03EB
+03ED
+03EF 03F3
+03F5
+0430 045F
+0461
+0463
+0465
+0467
+0469
+046B
+046D
+046F
+0471
+0473
+0475
+0477
+0479
+047B
+047D
+047F
+0481
+048B
+048D
+048F
+0491
+0493
+0495
+0497
+0499
+049B
+049D
+049F
+04A1
+04A3
+04A5
+04A7
+04A9
+04AB
+04AD
+04AF
+04B1
+04B3
+04B5
+04B7
+04B9
+04BB
+04BD
+04BF
+04C2
+04C4
+04C6
+04C8
+04CA
+04CC
+04CE
+04D1
+04D3
+04D5
+04D7
+04D9
+04DB
+04DD
+04DF
+04E1
+04E3
+04E5
+04E7
+04E9
+04EB
+04ED
+04EF
+04F1
+04F3
+04F5
+04F9
+0501
+0503
+0505
+0507
+0509
+050B
+050D
+050F
+0561 0587
+1E01
+1E03
+1E05
+1E07
+1E09
+1E0B
+1E0D
+1E0F
+1E11
+1E13
+1E15
+1E17
+1E19
+1E1B
+1E1D
+1E1F
+1E21
+1E23
+1E25
+1E27
+1E29
+1E2B
+1E2D
+1E2F
+1E31
+1E33
+1E35
+1E37
+1E39
+1E3B
+1E3D
+1E3F
+1E41
+1E43
+1E45
+1E47
+1E49
+1E4B
+1E4D
+1E4F
+1E51
+1E53
+1E55
+1E57
+1E59
+1E5B
+1E5D
+1E5F
+1E61
+1E63
+1E65
+1E67
+1E69
+1E6B
+1E6D
+1E6F
+1E71
+1E73
+1E75
+1E77
+1E79
+1E7B
+1E7D
+1E7F
+1E81
+1E83
+1E85
+1E87
+1E89
+1E8B
+1E8D
+1E8F
+1E91
+1E93
+1E95 1E9B
+1EA1
+1EA3
+1EA5
+1EA7
+1EA9
+1EAB
+1EAD
+1EAF
+1EB1
+1EB3
+1EB5
+1EB7
+1EB9
+1EBB
+1EBD
+1EBF
+1EC1
+1EC3
+1EC5
+1EC7
+1EC9
+1ECB
+1ECD
+1ECF
+1ED1
+1ED3
+1ED5
+1ED7
+1ED9
+1EDB
+1EDD
+1EDF
+1EE1
+1EE3
+1EE5
+1EE7
+1EE9
+1EEB
+1EED
+1EEF
+1EF1
+1EF3
+1EF5
+1EF7
+1EF9
+1F00 1F07
+1F10 1F15
+1F20 1F27
+1F30 1F37
+1F40 1F45
+1F50 1F57
+1F60 1F67
+1F70 1F7D
+1F80 1F87
+1F90 1F97
+1FA0 1FA7
+1FB0 1FB4
+1FB6 1FB7
+1FBE
+1FC2 1FC4
+1FC6 1FC7
+1FD0 1FD3
+1FD6 1FD7
+1FE0 1FE7
+1FF2 1FF4
+1FF6 1FF7
+2071
+207F
+210A
+210E 210F
+2113
+212F
+2134
+2139
+213D
+2146 2149
+FB00 FB06
+FB13 FB17
+FF41 FF5A
+10428 1044D
+1D41A 1D433
+1D44E 1D454
+1D456 1D467
+1D482 1D49B
+1D4B6 1D4B9
+1D4BB
+1D4BD 1D4C0
+1D4C2 1D4C3
+1D4C5 1D4CF
+1D4EA 1D503
+1D51E 1D537
+1D552 1D56B
+1D586 1D59F
+1D5BA 1D5D3
+1D5EE 1D607
+1D622 1D63B
+1D656 1D66F
+1D68A 1D6A3
+1D6C2 1D6DA
+1D6DC 1D6E1
+1D6FC 1D714
+1D716 1D71B
+1D736 1D74E
+1D750 1D755
+1D770 1D788
+1D78A 1D78F
+1D7AA 1D7C2
+1D7C4 1D7C9
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Lm.pl b/Master/xemtex/perl/lib/unicore/lib/Lm.pl
new file mode 100644
index 00000000000..808193f0342
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Lm.pl
@@ -0,0 +1,33 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Lm}
+# \p{Lm} (and fuzzy permutations)
+#
+# Meaning: General Category 'Lm'
+#
+return <<'END';
+02B0 02B8
+02BB 02C1
+02D0 02D1
+02E0 02E4
+02EE
+037A
+0559
+0640
+06E5 06E6
+0E46
+0EC6
+17D7
+1843
+3005
+3031 3035
+303B
+309D 309E
+30FC 30FE
+FF70
+FF9E FF9F
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Lo.pl b/Master/xemtex/perl/lib/unicore/lib/Lo.pl
new file mode 100644
index 00000000000..d5f161a0fa6
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Lo.pl
@@ -0,0 +1,217 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Lo}
+# \p{Lo} (and fuzzy permutations)
+#
+# Meaning: General Category 'Lo'
+#
+return <<'END';
+01BB
+01C0 01C3
+05D0 05EA
+05F0 05F2
+0621 063A
+0641 064A
+066E 066F
+0671 06D3
+06D5
+06FA 06FC
+0710
+0712 072C
+0780 07A5
+07B1
+0905 0939
+093D
+0950
+0958 0961
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09DC 09DD
+09DF 09E1
+09F0 09F1
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A59 0A5C
+0A5E
+0A72 0A74
+0A85 0A8B
+0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABD
+0AD0
+0AE0
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B36 0B39
+0B3D
+0B5C 0B5D
+0B5F 0B61
+0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB5
+0BB7 0BB9
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C60 0C61
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CDE
+0CE0 0CE1
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D60 0D61
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0E01 0E30
+0E32 0E33
+0E40 0E45
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB0
+0EB2 0EB3
+0EBD
+0EC0 0EC4
+0EDC 0EDD
+0F00
+0F40 0F47
+0F49 0F6A
+0F88 0F8B
+1000 1021
+1023 1027
+1029 102A
+1050 1055
+10D0 10F8
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1206
+1208 1246
+1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1286
+1288
+128A 128D
+1290 12AE
+12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12CE
+12D0 12D6
+12D8 12EE
+12F0 130E
+1310
+1312 1315
+1318 131E
+1320 1346
+1348 135A
+13A0 13F4
+1401 166C
+166F 1676
+1681 169A
+16A0 16EA
+1700 170C
+170E 1711
+1720 1731
+1740 1751
+1760 176C
+176E 1770
+1780 17B3
+17DC
+1820 1842
+1844 1877
+1880 18A8
+2135 2138
+3006
+303C
+3041 3096
+309F
+30A1 30FA
+30FF
+3105 312C
+3131 318E
+31A0 31B7
+31F0 31FF
+3400 4DB5
+4E00 9FA5
+A000 A48C
+AC00 D7A3
+F900 FA2D
+FA30 FA6A
+FB1D
+FB1F FB28
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFB
+FE70 FE74
+FE76 FEFC
+FF66 FF6F
+FF71 FF9D
+FFA0 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+10300 1031E
+10330 10349
+20000 2A6D6
+2F800 2FA1D
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/LogicalO.pl b/Master/xemtex/perl/lib/unicore/lib/LogicalO.pl
new file mode 100644
index 00000000000..ae5ad73f603
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/LogicalO.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{LogicalOrderException} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Logical_Order_Exception'
+#
+return <<'END';
+0E40 0E44 Logical_Order_Exception
+0EC0 0EC4 Logical_Order_Exception
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Lower.pl b/Master/xemtex/perl/lib/unicore/lib/Lower.pl
new file mode 100644
index 00000000000..b9e16389f7c
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Lower.pl
@@ -0,0 +1,432 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Lower}
+#
+# Meaning: [[:Lower:]]
+#
+return <<'END';
+0061 007A
+00AA
+00B5
+00BA
+00DF 00F6
+00F8 00FF
+0101
+0103
+0105
+0107
+0109
+010B
+010D
+010F
+0111
+0113
+0115
+0117
+0119
+011B
+011D
+011F
+0121
+0123
+0125
+0127
+0129
+012B
+012D
+012F
+0131
+0133
+0135
+0137 0138
+013A
+013C
+013E
+0140
+0142
+0144
+0146
+0148 0149
+014B
+014D
+014F
+0151
+0153
+0155
+0157
+0159
+015B
+015D
+015F
+0161
+0163
+0165
+0167
+0169
+016B
+016D
+016F
+0171
+0173
+0175
+0177
+017A
+017C
+017E 0180
+0183
+0185
+0188
+018C 018D
+0192
+0195
+0199 019B
+019E
+01A1
+01A3
+01A5
+01A8
+01AA 01AB
+01AD
+01B0
+01B4
+01B6
+01B9 01BA
+01BD 01BF
+01C6
+01C9
+01CC
+01CE
+01D0
+01D2
+01D4
+01D6
+01D8
+01DA
+01DC 01DD
+01DF
+01E1
+01E3
+01E5
+01E7
+01E9
+01EB
+01ED
+01EF 01F0
+01F3
+01F5
+01F9
+01FB
+01FD
+01FF
+0201
+0203
+0205
+0207
+0209
+020B
+020D
+020F
+0211
+0213
+0215
+0217
+0219
+021B
+021D
+021F
+0223
+0225
+0227
+0229
+022B
+022D
+022F
+0231
+0233
+0250 02AD
+0390
+03AC 03CE
+03D0 03D1
+03D5 03D7
+03D9
+03DB
+03DD
+03DF
+03E1
+03E3
+03E5
+03E7
+03E9
+03EB
+03ED
+03EF 03F3
+03F5
+0430 045F
+0461
+0463
+0465
+0467
+0469
+046B
+046D
+046F
+0471
+0473
+0475
+0477
+0479
+047B
+047D
+047F
+0481
+048B
+048D
+048F
+0491
+0493
+0495
+0497
+0499
+049B
+049D
+049F
+04A1
+04A3
+04A5
+04A7
+04A9
+04AB
+04AD
+04AF
+04B1
+04B3
+04B5
+04B7
+04B9
+04BB
+04BD
+04BF
+04C2
+04C4
+04C6
+04C8
+04CA
+04CC
+04CE
+04D1
+04D3
+04D5
+04D7
+04D9
+04DB
+04DD
+04DF
+04E1
+04E3
+04E5
+04E7
+04E9
+04EB
+04ED
+04EF
+04F1
+04F3
+04F5
+04F9
+0501
+0503
+0505
+0507
+0509
+050B
+050D
+050F
+0561 0587
+1E01
+1E03
+1E05
+1E07
+1E09
+1E0B
+1E0D
+1E0F
+1E11
+1E13
+1E15
+1E17
+1E19
+1E1B
+1E1D
+1E1F
+1E21
+1E23
+1E25
+1E27
+1E29
+1E2B
+1E2D
+1E2F
+1E31
+1E33
+1E35
+1E37
+1E39
+1E3B
+1E3D
+1E3F
+1E41
+1E43
+1E45
+1E47
+1E49
+1E4B
+1E4D
+1E4F
+1E51
+1E53
+1E55
+1E57
+1E59
+1E5B
+1E5D
+1E5F
+1E61
+1E63
+1E65
+1E67
+1E69
+1E6B
+1E6D
+1E6F
+1E71
+1E73
+1E75
+1E77
+1E79
+1E7B
+1E7D
+1E7F
+1E81
+1E83
+1E85
+1E87
+1E89
+1E8B
+1E8D
+1E8F
+1E91
+1E93
+1E95 1E9B
+1EA1
+1EA3
+1EA5
+1EA7
+1EA9
+1EAB
+1EAD
+1EAF
+1EB1
+1EB3
+1EB5
+1EB7
+1EB9
+1EBB
+1EBD
+1EBF
+1EC1
+1EC3
+1EC5
+1EC7
+1EC9
+1ECB
+1ECD
+1ECF
+1ED1
+1ED3
+1ED5
+1ED7
+1ED9
+1EDB
+1EDD
+1EDF
+1EE1
+1EE3
+1EE5
+1EE7
+1EE9
+1EEB
+1EED
+1EEF
+1EF1
+1EF3
+1EF5
+1EF7
+1EF9
+1F00 1F07
+1F10 1F15
+1F20 1F27
+1F30 1F37
+1F40 1F45
+1F50 1F57
+1F60 1F67
+1F70 1F7D
+1F80 1F87
+1F90 1F97
+1FA0 1FA7
+1FB0 1FB4
+1FB6 1FB7
+1FBE
+1FC2 1FC4
+1FC6 1FC7
+1FD0 1FD3
+1FD6 1FD7
+1FE0 1FE7
+1FF2 1FF4
+1FF6 1FF7
+2071
+207F
+210A
+210E 210F
+2113
+212F
+2134
+2139
+213D
+2146 2149
+FB00 FB06
+FB13 FB17
+FF41 FF5A
+10428 1044D
+1D41A 1D433
+1D44E 1D454
+1D456 1D467
+1D482 1D49B
+1D4B6 1D4B9
+1D4BB
+1D4BD 1D4C0
+1D4C2 1D4C3
+1D4C5 1D4CF
+1D4EA 1D503
+1D51E 1D537
+1D552 1D56B
+1D586 1D59F
+1D5BA 1D5D3
+1D5EE 1D607
+1D622 1D63B
+1D656 1D66F
+1D68A 1D6A3
+1D6C2 1D6DA
+1D6DC 1D6E1
+1D6FC 1D714
+1D716 1D71B
+1D736 1D74E
+1D750 1D755
+1D770 1D788
+1D78A 1D78F
+1D7AA 1D7C2
+1D7C4 1D7C9
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Lowercas.pl b/Master/xemtex/perl/lib/unicore/lib/Lowercas.pl
new file mode 100644
index 00000000000..07832e47ee7
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Lowercas.pl
@@ -0,0 +1,439 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Lowercase} (and fuzzy permutations)
+#
+# Meaning: [\p{Ll}\p{OtherLowercase}]
+#
+return <<'END';
+0061 007A
+00AA
+00B5
+00BA
+00DF 00F6
+00F8 00FF
+0101
+0103
+0105
+0107
+0109
+010B
+010D
+010F
+0111
+0113
+0115
+0117
+0119
+011B
+011D
+011F
+0121
+0123
+0125
+0127
+0129
+012B
+012D
+012F
+0131
+0133
+0135
+0137 0138
+013A
+013C
+013E
+0140
+0142
+0144
+0146
+0148 0149
+014B
+014D
+014F
+0151
+0153
+0155
+0157
+0159
+015B
+015D
+015F
+0161
+0163
+0165
+0167
+0169
+016B
+016D
+016F
+0171
+0173
+0175
+0177
+017A
+017C
+017E 0180
+0183
+0185
+0188
+018C 018D
+0192
+0195
+0199 019B
+019E
+01A1
+01A3
+01A5
+01A8
+01AA 01AB
+01AD
+01B0
+01B4
+01B6
+01B9 01BA
+01BD 01BF
+01C6
+01C9
+01CC
+01CE
+01D0
+01D2
+01D4
+01D6
+01D8
+01DA
+01DC 01DD
+01DF
+01E1
+01E3
+01E5
+01E7
+01E9
+01EB
+01ED
+01EF 01F0
+01F3
+01F5
+01F9
+01FB
+01FD
+01FF
+0201
+0203
+0205
+0207
+0209
+020B
+020D
+020F
+0211
+0213
+0215
+0217
+0219
+021B
+021D
+021F
+0223
+0225
+0227
+0229
+022B
+022D
+022F
+0231
+0233
+0250 02AD
+02B0 02B8
+02C0 02C1
+02E0 02E4
+0345
+037A
+0390
+03AC 03CE
+03D0 03D1
+03D5 03D7
+03D9
+03DB
+03DD
+03DF
+03E1
+03E3
+03E5
+03E7
+03E9
+03EB
+03ED
+03EF 03F3
+03F5
+0430 045F
+0461
+0463
+0465
+0467
+0469
+046B
+046D
+046F
+0471
+0473
+0475
+0477
+0479
+047B
+047D
+047F
+0481
+048B
+048D
+048F
+0491
+0493
+0495
+0497
+0499
+049B
+049D
+049F
+04A1
+04A3
+04A5
+04A7
+04A9
+04AB
+04AD
+04AF
+04B1
+04B3
+04B5
+04B7
+04B9
+04BB
+04BD
+04BF
+04C2
+04C4
+04C6
+04C8
+04CA
+04CC
+04CE
+04D1
+04D3
+04D5
+04D7
+04D9
+04DB
+04DD
+04DF
+04E1
+04E3
+04E5
+04E7
+04E9
+04EB
+04ED
+04EF
+04F1
+04F3
+04F5
+04F9
+0501
+0503
+0505
+0507
+0509
+050B
+050D
+050F
+0561 0587
+1E01
+1E03
+1E05
+1E07
+1E09
+1E0B
+1E0D
+1E0F
+1E11
+1E13
+1E15
+1E17
+1E19
+1E1B
+1E1D
+1E1F
+1E21
+1E23
+1E25
+1E27
+1E29
+1E2B
+1E2D
+1E2F
+1E31
+1E33
+1E35
+1E37
+1E39
+1E3B
+1E3D
+1E3F
+1E41
+1E43
+1E45
+1E47
+1E49
+1E4B
+1E4D
+1E4F
+1E51
+1E53
+1E55
+1E57
+1E59
+1E5B
+1E5D
+1E5F
+1E61
+1E63
+1E65
+1E67
+1E69
+1E6B
+1E6D
+1E6F
+1E71
+1E73
+1E75
+1E77
+1E79
+1E7B
+1E7D
+1E7F
+1E81
+1E83
+1E85
+1E87
+1E89
+1E8B
+1E8D
+1E8F
+1E91
+1E93
+1E95 1E9B
+1EA1
+1EA3
+1EA5
+1EA7
+1EA9
+1EAB
+1EAD
+1EAF
+1EB1
+1EB3
+1EB5
+1EB7
+1EB9
+1EBB
+1EBD
+1EBF
+1EC1
+1EC3
+1EC5
+1EC7
+1EC9
+1ECB
+1ECD
+1ECF
+1ED1
+1ED3
+1ED5
+1ED7
+1ED9
+1EDB
+1EDD
+1EDF
+1EE1
+1EE3
+1EE5
+1EE7
+1EE9
+1EEB
+1EED
+1EEF
+1EF1
+1EF3
+1EF5
+1EF7
+1EF9
+1F00 1F07
+1F10 1F15
+1F20 1F27
+1F30 1F37
+1F40 1F45
+1F50 1F57
+1F60 1F67
+1F70 1F7D
+1F80 1F87
+1F90 1F97
+1FA0 1FA7
+1FB0 1FB4
+1FB6 1FB7
+1FBE
+1FC2 1FC4
+1FC6 1FC7
+1FD0 1FD3
+1FD6 1FD7
+1FE0 1FE7
+1FF2 1FF4
+1FF6 1FF7
+2071
+207F
+210A
+210E 210F
+2113
+212F
+2134
+2139
+213D
+2146 2149
+2170 217F
+24D0 24E9
+FB00 FB06
+FB13 FB17
+FF41 FF5A
+10428 1044D
+1D41A 1D433
+1D44E 1D454
+1D456 1D467
+1D482 1D49B
+1D4B6 1D4B9
+1D4BB
+1D4BD 1D4C0
+1D4C2 1D4C3
+1D4C5 1D4CF
+1D4EA 1D503
+1D51E 1D537
+1D552 1D56B
+1D586 1D59F
+1D5BA 1D5D3
+1D5EE 1D607
+1D622 1D63B
+1D656 1D66F
+1D68A 1D6A3
+1D6C2 1D6DA
+1D6DC 1D6E1
+1D6FC 1D714
+1D716 1D71B
+1D736 1D74E
+1D750 1D755
+1D770 1D788
+1D78A 1D78F
+1D7AA 1D7C2
+1D7C4 1D7C9
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Lt.pl b/Master/xemtex/perl/lib/unicore/lib/Lt.pl
new file mode 100644
index 00000000000..40f761a9c69
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Lt.pl
@@ -0,0 +1,23 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Lt}
+# \p{Lt} (and fuzzy permutations)
+#
+# Meaning: General Category 'Lt'
+#
+return <<'END';
+01C5
+01C8
+01CB
+01F2
+1F88 1F8F
+1F98 1F9F
+1FA8 1FAF
+1FBC
+1FCC
+1FFC
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Lu.pl b/Master/xemtex/perl/lib/unicore/lib/Lu.pl
new file mode 100644
index 00000000000..1414b40d2f7
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Lu.pl
@@ -0,0 +1,432 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Lu}
+# \p{Lu} (and fuzzy permutations)
+#
+# Meaning: General Category 'Lu'
+#
+return <<'END';
+0041 005A
+00C0 00D6
+00D8 00DE
+0100
+0102
+0104
+0106
+0108
+010A
+010C
+010E
+0110
+0112
+0114
+0116
+0118
+011A
+011C
+011E
+0120
+0122
+0124
+0126
+0128
+012A
+012C
+012E
+0130
+0132
+0134
+0136
+0139
+013B
+013D
+013F
+0141
+0143
+0145
+0147
+014A
+014C
+014E
+0150
+0152
+0154
+0156
+0158
+015A
+015C
+015E
+0160
+0162
+0164
+0166
+0168
+016A
+016C
+016E
+0170
+0172
+0174
+0176
+0178 0179
+017B
+017D
+0181 0182
+0184
+0186 0187
+0189 018B
+018E 0191
+0193 0194
+0196 0198
+019C 019D
+019F 01A0
+01A2
+01A4
+01A6 01A7
+01A9
+01AC
+01AE 01AF
+01B1 01B3
+01B5
+01B7 01B8
+01BC
+01C4
+01C7
+01CA
+01CD
+01CF
+01D1
+01D3
+01D5
+01D7
+01D9
+01DB
+01DE
+01E0
+01E2
+01E4
+01E6
+01E8
+01EA
+01EC
+01EE
+01F1
+01F4
+01F6 01F8
+01FA
+01FC
+01FE
+0200
+0202
+0204
+0206
+0208
+020A
+020C
+020E
+0210
+0212
+0214
+0216
+0218
+021A
+021C
+021E
+0220
+0222
+0224
+0226
+0228
+022A
+022C
+022E
+0230
+0232
+0386
+0388 038A
+038C
+038E 038F
+0391 03A1
+03A3 03AB
+03D2 03D4
+03D8
+03DA
+03DC
+03DE
+03E0
+03E2
+03E4
+03E6
+03E8
+03EA
+03EC
+03EE
+03F4
+0400 042F
+0460
+0462
+0464
+0466
+0468
+046A
+046C
+046E
+0470
+0472
+0474
+0476
+0478
+047A
+047C
+047E
+0480
+048A
+048C
+048E
+0490
+0492
+0494
+0496
+0498
+049A
+049C
+049E
+04A0
+04A2
+04A4
+04A6
+04A8
+04AA
+04AC
+04AE
+04B0
+04B2
+04B4
+04B6
+04B8
+04BA
+04BC
+04BE
+04C0 04C1
+04C3
+04C5
+04C7
+04C9
+04CB
+04CD
+04D0
+04D2
+04D4
+04D6
+04D8
+04DA
+04DC
+04DE
+04E0
+04E2
+04E4
+04E6
+04E8
+04EA
+04EC
+04EE
+04F0
+04F2
+04F4
+04F8
+0500
+0502
+0504
+0506
+0508
+050A
+050C
+050E
+0531 0556
+10A0 10C5
+1E00
+1E02
+1E04
+1E06
+1E08
+1E0A
+1E0C
+1E0E
+1E10
+1E12
+1E14
+1E16
+1E18
+1E1A
+1E1C
+1E1E
+1E20
+1E22
+1E24
+1E26
+1E28
+1E2A
+1E2C
+1E2E
+1E30
+1E32
+1E34
+1E36
+1E38
+1E3A
+1E3C
+1E3E
+1E40
+1E42
+1E44
+1E46
+1E48
+1E4A
+1E4C
+1E4E
+1E50
+1E52
+1E54
+1E56
+1E58
+1E5A
+1E5C
+1E5E
+1E60
+1E62
+1E64
+1E66
+1E68
+1E6A
+1E6C
+1E6E
+1E70
+1E72
+1E74
+1E76
+1E78
+1E7A
+1E7C
+1E7E
+1E80
+1E82
+1E84
+1E86
+1E88
+1E8A
+1E8C
+1E8E
+1E90
+1E92
+1E94
+1EA0
+1EA2
+1EA4
+1EA6
+1EA8
+1EAA
+1EAC
+1EAE
+1EB0
+1EB2
+1EB4
+1EB6
+1EB8
+1EBA
+1EBC
+1EBE
+1EC0
+1EC2
+1EC4
+1EC6
+1EC8
+1ECA
+1ECC
+1ECE
+1ED0
+1ED2
+1ED4
+1ED6
+1ED8
+1EDA
+1EDC
+1EDE
+1EE0
+1EE2
+1EE4
+1EE6
+1EE8
+1EEA
+1EEC
+1EEE
+1EF0
+1EF2
+1EF4
+1EF6
+1EF8
+1F08 1F0F
+1F18 1F1D
+1F28 1F2F
+1F38 1F3F
+1F48 1F4D
+1F59
+1F5B
+1F5D
+1F5F
+1F68 1F6F
+1FB8 1FBB
+1FC8 1FCB
+1FD8 1FDB
+1FE8 1FEC
+1FF8 1FFB
+2102
+2107
+210B 210D
+2110 2112
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+2130 2131
+2133
+213E 213F
+2145
+FF21 FF3A
+10400 10425
+1D400 1D419
+1D434 1D44D
+1D468 1D481
+1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B5
+1D4D0 1D4E9
+1D504 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D538 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D56C 1D585
+1D5A0 1D5B9
+1D5D4 1D5ED
+1D608 1D621
+1D63C 1D655
+1D670 1D689
+1D6A8 1D6C0
+1D6E2 1D6FA
+1D71C 1D734
+1D756 1D76E
+1D790 1D7A8
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/M.pl b/Master/xemtex/perl/lib/unicore/lib/M.pl
new file mode 100644
index 00000000000..cd78b82348e
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/M.pl
@@ -0,0 +1,125 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{M}
+# \p{M} (and fuzzy permutations)
+#
+# Meaning: Major Category 'M'
+#
+return <<'END';
+0300 034F
+0360 036F
+0483 0486
+0488 0489
+0591 05A1
+05A3 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4
+064B 0655
+0670
+06D6 06DC
+06DE 06E4
+06E7 06E8
+06EA 06ED
+0711
+0730 074A
+07A6 07B0
+0901 0903
+093C
+093E 094D
+0951 0954
+0962 0963
+0981 0983
+09BC
+09BE 09C4
+09C7 09C8
+09CB 09CD
+09D7
+09E2 09E3
+0A02
+0A3C
+0A3E 0A42
+0A47 0A48
+0A4B 0A4D
+0A70 0A71
+0A81 0A83
+0ABC
+0ABE 0AC5
+0AC7 0AC9
+0ACB 0ACD
+0B01 0B03
+0B3C
+0B3E 0B43
+0B47 0B48
+0B4B 0B4D
+0B56 0B57
+0B82
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCD
+0BD7
+0C01 0C03
+0C3E 0C44
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0C82 0C83
+0CBE 0CC4
+0CC6 0CC8
+0CCA 0CCD
+0CD5 0CD6
+0D02 0D03
+0D3E 0D43
+0D46 0D48
+0D4A 0D4D
+0D57
+0D82 0D83
+0DCA
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF3
+0E31
+0E34 0E3A
+0E47 0E4E
+0EB1
+0EB4 0EB9
+0EBB 0EBC
+0EC8 0ECD
+0F18 0F19
+0F35
+0F37
+0F39
+0F3E 0F3F
+0F71 0F84
+0F86 0F87
+0F90 0F97
+0F99 0FBC
+0FC6
+102C 1032
+1036 1039
+1056 1059
+1712 1714
+1732 1734
+1752 1753
+1772 1773
+17B4 17D3
+180B 180D
+18A9
+20D0 20EA
+302A 302F
+3099 309A
+FB1E
+FE00 FE0F
+FE20 FE23
+1D165 1D169
+1D16D 1D172
+1D17B 1D182
+1D185 1D18B
+1D1AA 1D1AD
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Malayala.pl b/Master/xemtex/perl/lib/unicore/lib/Malayala.pl
new file mode 100644
index 00000000000..eb1c7365e14
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Malayala.pl
@@ -0,0 +1,23 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Malayalam} (and fuzzy permutations)
+#
+# Meaning: Script 'MALAYALAM'
+#
+return <<'END';
+0D02 0D03 MALAYALAM
+0D05 0D0C MALAYALAM
+0D0E 0D10 MALAYALAM
+0D12 0D28 MALAYALAM
+0D2A 0D39 MALAYALAM
+0D3E 0D43 MALAYALAM
+0D46 0D48 MALAYALAM
+0D4A 0D4D MALAYALAM
+0D57 MALAYALAM
+0D60 0D61 MALAYALAM
+0D66 0D6F MALAYALAM
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Math.pl b/Master/xemtex/perl/lib/unicore/lib/Math.pl
new file mode 100644
index 00000000000..a233c79f8fe
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Math.pl
@@ -0,0 +1,101 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Math} (and fuzzy permutations)
+#
+# Meaning: [\p{Sm}\p{OtherMath}]
+#
+return <<'END';
+0028 002B
+002D
+002F
+003C 003E
+005B 005E
+007B 007E
+00AC
+00B1
+00D7
+00F7
+03F6
+2016
+2032 2034
+2044
+2052
+207A 207E
+208A 208E
+20D0 20DC
+20E1
+2102
+210A 2113
+2115
+2119 211D
+2124
+2128
+212C 212D
+212F 2131
+2133 2138
+2140 2144
+214B
+2190 2194
+219A 219B
+21A0
+21A3
+21A6
+21AE
+21CE 21CF
+21D2
+21D4
+21F4 22FF
+2308 230B
+2320 2321
+237C
+239B 23B3
+25B7
+25C1
+25F8 25FF
+266F
+27D0 27E5
+27F0 27FF
+2900 2982
+2999 29D7
+29DC 29FB
+29FE 2AFF
+FB29
+FE35 FE38
+FE59 FE5C
+FE61 FE66
+FE68
+FF08 FF0B
+FF0D
+FF0F
+FF1C FF1E
+FF3B FF3E
+FF5B FF5E
+FFE2
+FFE9 FFEC
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C0
+1D4C2 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A3
+1D6A8 1D7C9
+1D7CE 1D7FF
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Mc.pl b/Master/xemtex/perl/lib/unicore/lib/Mc.pl
new file mode 100644
index 00000000000..cb4833a16e9
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Mc.pl
@@ -0,0 +1,65 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Mc}
+# \p{Mc} (and fuzzy permutations)
+#
+# Meaning: General Category 'Mc'
+#
+return <<'END';
+0903
+093E 0940
+0949 094C
+0982 0983
+09BE 09C0
+09C7 09C8
+09CB 09CC
+09D7
+0A3E 0A40
+0A83
+0ABE 0AC0
+0AC9
+0ACB 0ACC
+0B02 0B03
+0B3E
+0B40
+0B47 0B48
+0B4B 0B4C
+0B57
+0BBE 0BBF
+0BC1 0BC2
+0BC6 0BC8
+0BCA 0BCC
+0BD7
+0C01 0C03
+0C41 0C44
+0C82 0C83
+0CBE
+0CC0 0CC4
+0CC7 0CC8
+0CCA 0CCB
+0CD5 0CD6
+0D02 0D03
+0D3E 0D40
+0D46 0D48
+0D4A 0D4C
+0D57
+0D82 0D83
+0DCF 0DD1
+0DD8 0DDF
+0DF2 0DF3
+0F3E 0F3F
+0F7F
+102C
+1031
+1038
+1056 1057
+17B4 17B6
+17BE 17C5
+17C7 17C8
+1D165 1D166
+1D16D 1D172
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Me.pl b/Master/xemtex/perl/lib/unicore/lib/Me.pl
new file mode 100644
index 00000000000..e8dc9d974e0
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Me.pl
@@ -0,0 +1,17 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Me}
+# \p{Me} (and fuzzy permutations)
+#
+# Meaning: General Category 'Me'
+#
+return <<'END';
+0488 0489
+06DE
+20DD 20E0
+20E2 20E4
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Mirrored.pl b/Master/xemtex/perl/lib/unicore/lib/Mirrored.pl
new file mode 100644
index 00000000000..f7512515add
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Mirrored.pl
@@ -0,0 +1,105 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Mirrored}
+#
+# Meaning: Mirrored in bidirectional text
+#
+return <<'END';
+0028 0029
+003C
+003E
+005B
+005D
+007B
+007D
+00AB
+00BB
+2039 203A
+2045 2046
+207D 207E
+208D 208E
+2140
+2201 2204
+2208 220D
+2211
+2215 2216
+221A 221D
+221F 2222
+2224
+2226
+222B 2233
+2239
+223B 224C
+2252 2255
+225F 2260
+2262
+2264 226B
+226E 228C
+228F 2292
+2298
+22A2 22A3
+22A6 22B8
+22BE 22BF
+22C9 22CD
+22D0 22D1
+22D6 22ED
+22F0 22FF
+2308 230B
+2320 2321
+2329 232A
+2768 2775
+27D3 27D6
+27DC 27DE
+27E2 27EB
+2983 2998
+299B 29AF
+29B8
+29C0 29C5
+29C9
+29CE 29D2
+29D4 29D5
+29D8 29DC
+29E1
+29E3 29E5
+29E8 29E9
+29F4 29F9
+29FC 29FD
+2A0A 2A1C
+2A1E 2A21
+2A24
+2A26
+2A29
+2A2B 2A2E
+2A34 2A35
+2A3C 2A3E
+2A57 2A58
+2A64 2A65
+2A6A 2A6D
+2A6F 2A70
+2A73 2A74
+2A79 2AA3
+2AA6 2AAD
+2AAF 2AD6
+2ADC
+2ADE
+2AE2 2AE6
+2AEC 2AEE
+2AF3
+2AF7 2AFB
+2AFD
+3008 3011
+3014 301B
+FF08 FF09
+FF1C
+FF1E
+FF3B
+FF3D
+FF5B
+FF5D
+FF5F FF60
+FF62 FF63
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Mn.pl b/Master/xemtex/perl/lib/unicore/lib/Mn.pl
new file mode 100644
index 00000000000..481f1ed4915
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Mn.pl
@@ -0,0 +1,117 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Mn}
+# \p{Mn} (and fuzzy permutations)
+#
+# Meaning: General Category 'Mn'
+#
+return <<'END';
+0300 034F
+0360 036F
+0483 0486
+0591 05A1
+05A3 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4
+064B 0655
+0670
+06D6 06DC
+06DF 06E4
+06E7 06E8
+06EA 06ED
+0711
+0730 074A
+07A6 07B0
+0901 0902
+093C
+0941 0948
+094D
+0951 0954
+0962 0963
+0981
+09BC
+09C1 09C4
+09CD
+09E2 09E3
+0A02
+0A3C
+0A41 0A42
+0A47 0A48
+0A4B 0A4D
+0A70 0A71
+0A81 0A82
+0ABC
+0AC1 0AC5
+0AC7 0AC8
+0ACD
+0B01
+0B3C
+0B3F
+0B41 0B43
+0B4D
+0B56
+0B82
+0BC0
+0BCD
+0C3E 0C40
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0CBF
+0CC6
+0CCC 0CCD
+0D41 0D43
+0D4D
+0DCA
+0DD2 0DD4
+0DD6
+0E31
+0E34 0E3A
+0E47 0E4E
+0EB1
+0EB4 0EB9
+0EBB 0EBC
+0EC8 0ECD
+0F18 0F19
+0F35
+0F37
+0F39
+0F71 0F7E
+0F80 0F84
+0F86 0F87
+0F90 0F97
+0F99 0FBC
+0FC6
+102D 1030
+1032
+1036 1037
+1039
+1058 1059
+1712 1714
+1732 1734
+1752 1753
+1772 1773
+17B7 17BD
+17C6
+17C9 17D3
+180B 180D
+18A9
+20D0 20DC
+20E1
+20E5 20EA
+302A 302F
+3099 309A
+FB1E
+FE00 FE0F
+FE20 FE23
+1D167 1D169
+1D17B 1D182
+1D185 1D18B
+1D1AA 1D1AD
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Mongolia.pl b/Master/xemtex/perl/lib/unicore/lib/Mongolia.pl
new file mode 100644
index 00000000000..5cdc083e149
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Mongolia.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Mongolian} (and fuzzy permutations)
+#
+# Meaning: Script 'MONGOLIAN'
+#
+return <<'END';
+1810 1819 MONGOLIAN
+1820 1877 MONGOLIAN
+1880 18A9 MONGOLIAN
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Myanmar.pl b/Master/xemtex/perl/lib/unicore/lib/Myanmar.pl
new file mode 100644
index 00000000000..49385bbe0a2
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Myanmar.pl
@@ -0,0 +1,19 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Myanmar} (and fuzzy permutations)
+#
+# Meaning: Script 'MYANMAR'
+#
+return <<'END';
+1000 1021 MYANMAR
+1023 1027 MYANMAR
+1029 102A MYANMAR
+102C 1032 MYANMAR
+1036 1039 MYANMAR
+1040 1049 MYANMAR
+1050 1059 MYANMAR
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/N.pl b/Master/xemtex/perl/lib/unicore/lib/N.pl
new file mode 100644
index 00000000000..612b79f1f3d
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/N.pl
@@ -0,0 +1,56 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{N}
+# \p{N} (and fuzzy permutations)
+#
+# Meaning: Major Category 'N'
+#
+return <<'END';
+0030 0039
+00B2 00B3
+00B9
+00BC 00BE
+0660 0669
+06F0 06F9
+0966 096F
+09E6 09EF
+09F4 09F9
+0A66 0A6F
+0AE6 0AEF
+0B66 0B6F
+0BE7 0BF2
+0C66 0C6F
+0CE6 0CEF
+0D66 0D6F
+0E50 0E59
+0ED0 0ED9
+0F20 0F33
+1040 1049
+1369 137C
+16EE 16F0
+17E0 17E9
+1810 1819
+2070
+2074 2079
+2080 2089
+2153 2183
+2460 249B
+24EA 24FE
+2776 2793
+3007
+3021 3029
+3038 303A
+3192 3195
+3220 3229
+3251 325F
+3280 3289
+32B1 32BF
+FF10 FF19
+10320 10323
+1034A
+1D7CE 1D7FF
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Nd.pl b/Master/xemtex/perl/lib/unicore/lib/Nd.pl
new file mode 100644
index 00000000000..30cd8445dd1
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Nd.pl
@@ -0,0 +1,34 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Nd}
+# \p{Nd} (and fuzzy permutations)
+#
+# Meaning: General Category 'Nd'
+#
+return <<'END';
+0030 0039
+0660 0669
+06F0 06F9
+0966 096F
+09E6 09EF
+0A66 0A6F
+0AE6 0AEF
+0B66 0B6F
+0BE7 0BEF
+0C66 0C6F
+0CE6 0CEF
+0D66 0D6F
+0E50 0E59
+0ED0 0ED9
+0F20 0F29
+1040 1049
+1369 1371
+17E0 17E9
+1810 1819
+FF10 FF19
+1D7CE 1D7FF
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Nl.pl b/Master/xemtex/perl/lib/unicore/lib/Nl.pl
new file mode 100644
index 00000000000..14279d3030d
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Nl.pl
@@ -0,0 +1,19 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Nl}
+# \p{Nl} (and fuzzy permutations)
+#
+# Meaning: General Category 'Nl'
+#
+return <<'END';
+16EE 16F0
+2160 2183
+3007
+3021 3029
+3038 303A
+1034A
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/No.pl b/Master/xemtex/perl/lib/unicore/lib/No.pl
new file mode 100644
index 00000000000..ede689d6a46
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/No.pl
@@ -0,0 +1,33 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{No}
+# \p{No} (and fuzzy permutations)
+#
+# Meaning: General Category 'No'
+#
+return <<'END';
+00B2 00B3
+00B9
+00BC 00BE
+09F4 09F9
+0BF0 0BF2
+0F2A 0F33
+1372 137C
+2070
+2074 2079
+2080 2089
+2153 215F
+2460 249B
+24EA 24FE
+2776 2793
+3192 3195
+3220 3229
+3251 325F
+3280 3289
+32B1 32BF
+10320 10323
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Nonchara.pl b/Master/xemtex/perl/lib/unicore/lib/Nonchara.pl
new file mode 100644
index 00000000000..adf874015e3
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Nonchara.pl
@@ -0,0 +1,30 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{NoncharacterCodePoint} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Noncharacter_Code_Point'
+#
+return <<'END';
+FDD0 FDEF Noncharacter_Code_Point
+FFFE FFFF Noncharacter_Code_Point
+1FFFE 1FFFF Noncharacter_Code_Point
+2FFFE 2FFFF Noncharacter_Code_Point
+3FFFE 3FFFF Noncharacter_Code_Point
+4FFFE 4FFFF Noncharacter_Code_Point
+5FFFE 5FFFF Noncharacter_Code_Point
+6FFFE 6FFFF Noncharacter_Code_Point
+7FFFE 7FFFF Noncharacter_Code_Point
+8FFFE 8FFFF Noncharacter_Code_Point
+9FFFE 9FFFF Noncharacter_Code_Point
+AFFFE AFFFF Noncharacter_Code_Point
+BFFFE BFFFF Noncharacter_Code_Point
+CFFFE CFFFF Noncharacter_Code_Point
+DFFFE DFFFF Noncharacter_Code_Point
+EFFFE EFFFF Noncharacter_Code_Point
+FFFFE FFFFF Noncharacter_Code_Point
+10FFFE 10FFFF Noncharacter_Code_Point
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Ogham.pl b/Master/xemtex/perl/lib/unicore/lib/Ogham.pl
new file mode 100644
index 00000000000..6b9538485b6
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Ogham.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Ogham} (and fuzzy permutations)
+#
+# Meaning: Script 'OGHAM'
+#
+return <<'END';
+1681 169A OGHAM
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/OldItali.pl b/Master/xemtex/perl/lib/unicore/lib/OldItali.pl
new file mode 100644
index 00000000000..7fe3725c0e6
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/OldItali.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{OldItalic} (and fuzzy permutations)
+#
+# Meaning: Script 'OLD_ITALIC'
+#
+return <<'END';
+10300 1031E OLD_ITALIC
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Oriya.pl b/Master/xemtex/perl/lib/unicore/lib/Oriya.pl
new file mode 100644
index 00000000000..2b599d6c08a
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Oriya.pl
@@ -0,0 +1,26 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Oriya} (and fuzzy permutations)
+#
+# Meaning: Script 'ORIYA'
+#
+return <<'END';
+0B01 0B03 ORIYA
+0B05 0B0C ORIYA
+0B0F 0B10 ORIYA
+0B13 0B28 ORIYA
+0B2A 0B30 ORIYA
+0B32 0B33 ORIYA
+0B36 0B39 ORIYA
+0B3C 0B43 ORIYA
+0B47 0B48 ORIYA
+0B4B 0B4D ORIYA
+0B56 0B57 ORIYA
+0B5C 0B5D ORIYA
+0B5F 0B61 ORIYA
+0B66 0B6F ORIYA
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/OtherAlp.pl b/Master/xemtex/perl/lib/unicore/lib/OtherAlp.pl
new file mode 100644
index 00000000000..97eda4888e5
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/OtherAlp.pl
@@ -0,0 +1,99 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{OtherAlphabetic} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Other_Alphabetic'
+#
+return <<'END';
+0345 Other_Alphabetic
+05B0 05B9 Other_Alphabetic
+05BB 05BD Other_Alphabetic
+05BF Other_Alphabetic
+05C1 05C2 Other_Alphabetic
+05C4 Other_Alphabetic
+064B 0655 Other_Alphabetic
+0670 Other_Alphabetic
+06D6 06DC Other_Alphabetic
+06E1 06E4 Other_Alphabetic
+06E7 06E8 Other_Alphabetic
+06ED Other_Alphabetic
+0711 Other_Alphabetic
+0730 073F Other_Alphabetic
+07A6 07B0 Other_Alphabetic
+0901 0903 Other_Alphabetic
+093E 094C Other_Alphabetic
+0962 0963 Other_Alphabetic
+0981 0983 Other_Alphabetic
+09BE 09C4 Other_Alphabetic
+09C7 09C8 Other_Alphabetic
+09CB 09CC Other_Alphabetic
+09D7 Other_Alphabetic
+09E2 09E3 Other_Alphabetic
+0A02 Other_Alphabetic
+0A3E 0A42 Other_Alphabetic
+0A47 0A48 Other_Alphabetic
+0A4B 0A4C Other_Alphabetic
+0A70 0A71 Other_Alphabetic
+0A81 0A83 Other_Alphabetic
+0ABE 0AC5 Other_Alphabetic
+0AC7 0AC9 Other_Alphabetic
+0ACB 0ACC Other_Alphabetic
+0B01 0B03 Other_Alphabetic
+0B3E 0B43 Other_Alphabetic
+0B47 0B48 Other_Alphabetic
+0B4B 0B4C Other_Alphabetic
+0B56 0B57 Other_Alphabetic
+0B82 Other_Alphabetic
+0BBE 0BC2 Other_Alphabetic
+0BC6 0BC8 Other_Alphabetic
+0BCA 0BCC Other_Alphabetic
+0BD7 Other_Alphabetic
+0C01 0C03 Other_Alphabetic
+0C3E 0C44 Other_Alphabetic
+0C46 0C48 Other_Alphabetic
+0C4A 0C4C Other_Alphabetic
+0C55 0C56 Other_Alphabetic
+0C82 0C83 Other_Alphabetic
+0CBE 0CC4 Other_Alphabetic
+0CC6 0CC8 Other_Alphabetic
+0CCA 0CCC Other_Alphabetic
+0CD5 0CD6 Other_Alphabetic
+0D02 0D03 Other_Alphabetic
+0D3E 0D43 Other_Alphabetic
+0D46 0D48 Other_Alphabetic
+0D4A 0D4C Other_Alphabetic
+0D57 Other_Alphabetic
+0D82 0D83 Other_Alphabetic
+0DCF 0DD4 Other_Alphabetic
+0DD6 Other_Alphabetic
+0DD8 0DDF Other_Alphabetic
+0DF2 0DF3 Other_Alphabetic
+0E31 Other_Alphabetic
+0E34 0E3A Other_Alphabetic
+0E4D Other_Alphabetic
+0EB1 Other_Alphabetic
+0EB4 0EB9 Other_Alphabetic
+0EBB 0EBC Other_Alphabetic
+0ECD Other_Alphabetic
+0F71 0F81 Other_Alphabetic
+0F90 0F97 Other_Alphabetic
+0F99 0FBC Other_Alphabetic
+102C 1032 Other_Alphabetic
+1036 Other_Alphabetic
+1038 Other_Alphabetic
+1056 1059 Other_Alphabetic
+16EE 16F0 Other_Alphabetic
+1712 1713 Other_Alphabetic
+1732 1733 Other_Alphabetic
+1752 1753 Other_Alphabetic
+1772 1773 Other_Alphabetic
+17B4 17C8 Other_Alphabetic
+18A9 Other_Alphabetic
+2160 2183 Other_Alphabetic
+FB1E Other_Alphabetic
+1034A Other_Alphabetic
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/OtherDef.pl b/Master/xemtex/perl/lib/unicore/lib/OtherDef.pl
new file mode 100644
index 00000000000..6bdd19449aa
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/OtherDef.pl
@@ -0,0 +1,17 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{OtherDefaultIgnorableCodePoint} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Other_Default_Ignorable_Code_Point'
+#
+return <<'END';
+180B 180D Other_Default_Ignorable_Code_Point
+2060 206F Other_Default_Ignorable_Code_Point
+FE00 FE0F Other_Default_Ignorable_Code_Point
+FFF0 FFFB Other_Default_Ignorable_Code_Point
+E0000 E0FFF Other_Default_Ignorable_Code_Point
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/OtherGra.pl b/Master/xemtex/perl/lib/unicore/lib/OtherGra.pl
new file mode 100644
index 00000000000..7a927cdb456
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/OtherGra.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{OtherGraphemeExtend} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Other_Grapheme_Extend'
+#
+return <<'END';
+FF9E FF9F Other_Grapheme_Extend
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/OtherLow.pl b/Master/xemtex/perl/lib/unicore/lib/OtherLow.pl
new file mode 100644
index 00000000000..ae844c9d62c
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/OtherLow.pl
@@ -0,0 +1,19 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{OtherLowercase} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Other_Lowercase'
+#
+return <<'END';
+02B0 02B8 Other_Lowercase
+02C0 02C1 Other_Lowercase
+02E0 02E4 Other_Lowercase
+0345 Other_Lowercase
+037A Other_Lowercase
+2170 217F Other_Lowercase
+24D0 24E9 Other_Lowercase
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/OtherMat.pl b/Master/xemtex/perl/lib/unicore/lib/OtherMat.pl
new file mode 100644
index 00000000000..1f9ad904090
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/OtherMat.pl
@@ -0,0 +1,76 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{OtherMath} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Other_Math'
+#
+return <<'END';
+0028 002A Other_Math
+002D Other_Math
+002F Other_Math
+005B 005E Other_Math
+007B Other_Math
+007D Other_Math
+2016 Other_Math
+2032 2034 Other_Math
+207D 207E Other_Math
+208D 208E Other_Math
+20D0 20DC Other_Math
+20E1 Other_Math
+2102 Other_Math
+210A 2113 Other_Math
+2115 Other_Math
+2119 211D Other_Math
+2124 Other_Math
+2128 Other_Math
+212C 212D Other_Math
+212F 2131 Other_Math
+2133 2138 Other_Math
+FE35 FE38 Other_Math
+FE59 FE5C Other_Math
+FE61 Other_Math
+FE63 Other_Math
+FE68 Other_Math
+FF08 FF0A Other_Math
+FF0D Other_Math
+FF0F Other_Math
+FF3B FF3E Other_Math
+FF5B Other_Math
+FF5D Other_Math
+1D400 1D454 Other_Math
+1D456 1D49C Other_Math
+1D49E 1D49F Other_Math
+1D4A2 Other_Math
+1D4A5 1D4A6 Other_Math
+1D4A9 1D4AC Other_Math
+1D4AE 1D4B9 Other_Math
+1D4BB Other_Math
+1D4BD 1D4C0 Other_Math
+1D4C2 1D4C3 Other_Math
+1D4C5 1D505 Other_Math
+1D507 1D50A Other_Math
+1D50D 1D514 Other_Math
+1D516 1D51C Other_Math
+1D51E 1D539 Other_Math
+1D53B 1D53E Other_Math
+1D540 1D544 Other_Math
+1D546 Other_Math
+1D54A 1D550 Other_Math
+1D552 1D6A3 Other_Math
+1D6A8 1D6C0 Other_Math
+1D6C2 1D6DA Other_Math
+1D6DC 1D6FA Other_Math
+1D6FC 1D714 Other_Math
+1D716 1D734 Other_Math
+1D736 1D74E Other_Math
+1D750 1D76E Other_Math
+1D770 1D788 Other_Math
+1D78A 1D7A8 Other_Math
+1D7AA 1D7C2 Other_Math
+1D7C4 1D7C9 Other_Math
+1D7CE 1D7FF Other_Math
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/OtherUpp.pl b/Master/xemtex/perl/lib/unicore/lib/OtherUpp.pl
new file mode 100644
index 00000000000..4ba30489926
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/OtherUpp.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{OtherUppercase} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Other_Uppercase'
+#
+return <<'END';
+2160 216F Other_Uppercase
+24B6 24CF Other_Uppercase
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/P.pl b/Master/xemtex/perl/lib/unicore/lib/P.pl
new file mode 100644
index 00000000000..1302e8d8f9a
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/P.pl
@@ -0,0 +1,97 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{P}
+# \p{P} (and fuzzy permutations)
+#
+# Meaning: Major Category 'P'
+#
+return <<'END';
+0021 0023
+0025 002A
+002C 002F
+003A 003B
+003F 0040
+005B 005D
+005F
+007B
+007D
+00A1
+00AB
+00AD
+00B7
+00BB
+00BF
+037E
+0387
+055A 055F
+0589 058A
+05BE
+05C0
+05C3
+05F3 05F4
+060C
+061B
+061F
+066A 066D
+06D4
+0700 070D
+0964 0965
+0970
+0DF4
+0E4F
+0E5A 0E5B
+0F04 0F12
+0F3A 0F3D
+0F85
+104A 104F
+10FB
+1361 1368
+166D 166E
+169B 169C
+16EB 16ED
+1735 1736
+17D4 17D6
+17D8 17DA
+1800 180A
+2010 2027
+2030 2043
+2045 2051
+2057
+207D 207E
+208D 208E
+2329 232A
+23B4 23B6
+2768 2775
+27E6 27EB
+2983 2998
+29D8 29DB
+29FC 29FD
+3001 3003
+3008 3011
+3014 301F
+3030
+303D
+30A0
+30FB
+FD3E FD3F
+FE30 FE46
+FE49 FE52
+FE54 FE61
+FE63
+FE68
+FE6A FE6B
+FF01 FF03
+FF05 FF0A
+FF0C FF0F
+FF1A FF1B
+FF1F FF20
+FF3B FF3D
+FF3F
+FF5B
+FF5D
+FF5F FF65
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Pc.pl b/Master/xemtex/perl/lib/unicore/lib/Pc.pl
new file mode 100644
index 00000000000..2f087426846
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Pc.pl
@@ -0,0 +1,20 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Pc}
+# \p{Pc} (and fuzzy permutations)
+#
+# Meaning: General Category 'Pc'
+#
+return <<'END';
+005F
+203F 2040
+30FB
+FE33 FE34
+FE4D FE4F
+FF3F
+FF65
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Pd.pl b/Master/xemtex/perl/lib/unicore/lib/Pd.pl
new file mode 100644
index 00000000000..e32f88fe509
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Pd.pl
@@ -0,0 +1,25 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Pd}
+# \p{Pd} (and fuzzy permutations)
+#
+# Meaning: General Category 'Pd'
+#
+return <<'END';
+002D
+00AD
+058A
+1806
+2010 2015
+301C
+3030
+30A0
+FE31 FE32
+FE58
+FE63
+FF0D
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Pe.pl b/Master/xemtex/perl/lib/unicore/lib/Pe.pl
new file mode 100644
index 00000000000..5c7e3c8dbe9
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Pe.pl
@@ -0,0 +1,75 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Pe}
+# \p{Pe} (and fuzzy permutations)
+#
+# Meaning: General Category 'Pe'
+#
+return <<'END';
+0029
+005D
+007D
+0F3B
+0F3D
+169C
+2046
+207E
+208E
+232A
+23B5
+2769
+276B
+276D
+276F
+2771
+2773
+2775
+27E7
+27E9
+27EB
+2984
+2986
+2988
+298A
+298C
+298E
+2990
+2992
+2994
+2996
+2998
+29D9
+29DB
+29FD
+3009
+300B
+300D
+300F
+3011
+3015
+3017
+3019
+301B
+301E 301F
+FD3F
+FE36
+FE38
+FE3A
+FE3C
+FE3E
+FE40
+FE42
+FE44
+FE5A
+FE5C
+FE5E
+FF09
+FF3D
+FF5D
+FF60
+FF63
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Pf.pl b/Master/xemtex/perl/lib/unicore/lib/Pf.pl
new file mode 100644
index 00000000000..8e363d2a970
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Pf.pl
@@ -0,0 +1,17 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Pf}
+# \p{Pf} (and fuzzy permutations)
+#
+# Meaning: General Category 'Pf'
+#
+return <<'END';
+00BB
+2019
+201D
+203A
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Pi.pl b/Master/xemtex/perl/lib/unicore/lib/Pi.pl
new file mode 100644
index 00000000000..c78bde1b9cb
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Pi.pl
@@ -0,0 +1,18 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Pi}
+# \p{Pi} (and fuzzy permutations)
+#
+# Meaning: General Category 'Pi'
+#
+return <<'END';
+00AB
+2018
+201B 201C
+201F
+2039
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Po.pl b/Master/xemtex/perl/lib/unicore/lib/Po.pl
new file mode 100644
index 00000000000..963ce32a156
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Po.pl
@@ -0,0 +1,83 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Po}
+# \p{Po} (and fuzzy permutations)
+#
+# Meaning: General Category 'Po'
+#
+return <<'END';
+0021 0023
+0025 0027
+002A
+002C
+002E 002F
+003A 003B
+003F 0040
+005C
+00A1
+00B7
+00BF
+037E
+0387
+055A 055F
+0589
+05BE
+05C0
+05C3
+05F3 05F4
+060C
+061B
+061F
+066A 066D
+06D4
+0700 070D
+0964 0965
+0970
+0DF4
+0E4F
+0E5A 0E5B
+0F04 0F12
+0F85
+104A 104F
+10FB
+1361 1368
+166D 166E
+16EB 16ED
+1735 1736
+17D4 17D6
+17D8 17DA
+1800 1805
+1807 180A
+2016 2017
+2020 2027
+2030 2038
+203B 203E
+2041 2043
+2047 2051
+2057
+23B6
+3001 3003
+303D
+FE30
+FE45 FE46
+FE49 FE4C
+FE50 FE52
+FE54 FE57
+FE5F FE61
+FE68
+FE6A FE6B
+FF01 FF03
+FF05 FF07
+FF0A
+FF0C
+FF0E FF0F
+FF1A FF1B
+FF1F FF20
+FF3C
+FF61
+FF64
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Print.pl b/Master/xemtex/perl/lib/unicore/lib/Print.pl
new file mode 100644
index 00000000000..01ac6f10d41
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Print.pl
@@ -0,0 +1,400 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Print}
+#
+# Meaning: [[:Print:]]
+#
+return <<'END';
+0020 007E
+00A0 0220
+0222 0233
+0250 02AD
+02B0 02EE
+0300 034F
+0360 036F
+0374 0375
+037A
+037E
+0384 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F6
+0400 0486
+0488 04CE
+04D0 04F5
+04F8 04F9
+0500 050F
+0531 0556
+0559 055F
+0561 0587
+0589 058A
+0591 05A1
+05A3 05B9
+05BB 05C4
+05D0 05EA
+05F0 05F4
+060C
+061B
+061F
+0621 063A
+0640 0655
+0660 06DC
+06DE 06ED
+06F0 06FE
+0700 070D
+0710 072C
+0730 074A
+0780 07B1
+0901 0903
+0905 0939
+093C 094D
+0950 0954
+0958 0970
+0981 0983
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BC
+09BE 09C4
+09C7 09C8
+09CB 09CD
+09D7
+09DC 09DD
+09DF 09E3
+09E6 09FA
+0A02
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3C
+0A3E 0A42
+0A47 0A48
+0A4B 0A4D
+0A59 0A5C
+0A5E
+0A66 0A74
+0A81 0A83
+0A85 0A8B
+0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABC 0AC5
+0AC7 0AC9
+0ACB 0ACD
+0AD0
+0AE0
+0AE6 0AEF
+0B01 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B36 0B39
+0B3C 0B43
+0B47 0B48
+0B4B 0B4D
+0B56 0B57
+0B5C 0B5D
+0B5F 0B61
+0B66 0B70
+0B82 0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB5
+0BB7 0BB9
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCD
+0BD7
+0BE7 0BF2
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C3E 0C44
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0C60 0C61
+0C66 0C6F
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBE 0CC4
+0CC6 0CC8
+0CCA 0CCD
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0CE6 0CEF
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D43
+0D46 0D48
+0D4A 0D4D
+0D57
+0D60 0D61
+0D66 0D6F
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCA
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF4
+0E01 0E3A
+0E3F 0E5B
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB9
+0EBB 0EBD
+0EC0 0EC4
+0EC6
+0EC8 0ECD
+0ED0 0ED9
+0EDC 0EDD
+0F00 0F47
+0F49 0F6A
+0F71 0F8B
+0F90 0F97
+0F99 0FBC
+0FBE 0FCC
+0FCF
+1000 1021
+1023 1027
+1029 102A
+102C 1032
+1036 1039
+1040 1059
+10A0 10C5
+10D0 10F8
+10FB
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1206
+1208 1246
+1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1286
+1288
+128A 128D
+1290 12AE
+12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12CE
+12D0 12D6
+12D8 12EE
+12F0 130E
+1310
+1312 1315
+1318 131E
+1320 1346
+1348 135A
+1361 137C
+13A0 13F4
+1401 1676
+1680 169C
+16A0 16F0
+1700 170C
+170E 1714
+1720 1736
+1740 1753
+1760 176C
+176E 1770
+1772 1773
+1780 17DC
+17E0 17E9
+1800 180D
+1810 1819
+1820 1877
+1880 18A9
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FC4
+1FC6 1FD3
+1FD6 1FDB
+1FDD 1FEF
+1FF2 1FF4
+1FF6 1FFE
+2000 200B
+2010 2027
+202F 2052
+2057
+205F
+2070 2071
+2074 208E
+20A0 20B1
+20D0 20EA
+2100 213A
+213D 214B
+2153 2183
+2190 23CE
+2400 2426
+2440 244A
+2460 24FE
+2500 2613
+2616 2617
+2619 267D
+2680 2689
+2701 2704
+2706 2709
+270C 2727
+2729 274B
+274D
+274F 2752
+2756
+2758 275E
+2761 2794
+2798 27AF
+27B1 27BE
+27D0 27EB
+27F0 2AFF
+2E80 2E99
+2E9B 2EF3
+2F00 2FD5
+2FF0 2FFB
+3000 303F
+3041 3096
+3099 30FF
+3105 312C
+3131 318E
+3190 31B7
+31F0 321C
+3220 3243
+3251 327B
+327F 32CB
+32D0 32FE
+3300 3376
+337B 33DD
+33E0 33FE
+3400 4DB5
+4E00 9FA5
+A000 A48C
+A490 A4C6
+AC00 D7A3
+E000 FA2D
+FA30 FA6A
+FB00 FB06
+FB13 FB17
+FB1D FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3F
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFC
+FE00 FE0F
+FE20 FE23
+FE30 FE46
+FE49 FE52
+FE54 FE66
+FE68 FE6B
+FE70 FE74
+FE76 FEFC
+FF01 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+FFE0 FFE6
+FFE8 FFEE
+FFFC FFFD
+10300 1031E
+10320 10323
+10330 1034A
+10400 10425
+10428 1044D
+1D000 1D0F5
+1D100 1D126
+1D12A 1D172
+1D17B 1D1DD
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C0
+1D4C2 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A3
+1D6A8 1D7C9
+1D7CE 1D7FF
+20000 2A6D6
+2F800 2FA1D
+F0000 FFFFD
+100000 10FFFD
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Ps.pl b/Master/xemtex/perl/lib/unicore/lib/Ps.pl
new file mode 100644
index 00000000000..0c0dd89a210
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Ps.pl
@@ -0,0 +1,77 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Ps}
+# \p{Ps} (and fuzzy permutations)
+#
+# Meaning: General Category 'Ps'
+#
+return <<'END';
+0028
+005B
+007B
+0F3A
+0F3C
+169B
+201A
+201E
+2045
+207D
+208D
+2329
+23B4
+2768
+276A
+276C
+276E
+2770
+2772
+2774
+27E6
+27E8
+27EA
+2983
+2985
+2987
+2989
+298B
+298D
+298F
+2991
+2993
+2995
+2997
+29D8
+29DA
+29FC
+3008
+300A
+300C
+300E
+3010
+3014
+3016
+3018
+301A
+301D
+FD3E
+FE35
+FE37
+FE39
+FE3B
+FE3D
+FE3F
+FE41
+FE43
+FE59
+FE5B
+FE5D
+FF08
+FF3B
+FF5B
+FF5F
+FF62
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Punct.pl b/Master/xemtex/perl/lib/unicore/lib/Punct.pl
new file mode 100644
index 00000000000..ca68b6ab499
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Punct.pl
@@ -0,0 +1,96 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Punct}
+#
+# Meaning: [[:Punct:]]
+#
+return <<'END';
+0021 0023
+0025 002A
+002C 002F
+003A 003B
+003F 0040
+005B 005D
+005F
+007B
+007D
+00A1
+00AB
+00AD
+00B7
+00BB
+00BF
+037E
+0387
+055A 055F
+0589 058A
+05BE
+05C0
+05C3
+05F3 05F4
+060C
+061B
+061F
+066A 066D
+06D4
+0700 070D
+0964 0965
+0970
+0DF4
+0E4F
+0E5A 0E5B
+0F04 0F12
+0F3A 0F3D
+0F85
+104A 104F
+10FB
+1361 1368
+166D 166E
+169B 169C
+16EB 16ED
+1735 1736
+17D4 17D6
+17D8 17DA
+1800 180A
+2010 2027
+2030 2043
+2045 2051
+2057
+207D 207E
+208D 208E
+2329 232A
+23B4 23B6
+2768 2775
+27E6 27EB
+2983 2998
+29D8 29DB
+29FC 29FD
+3001 3003
+3008 3011
+3014 301F
+3030
+303D
+30A0
+30FB
+FD3E FD3F
+FE30 FE46
+FE49 FE52
+FE54 FE61
+FE63
+FE68
+FE6A FE6B
+FF01 FF03
+FF05 FF0A
+FF0C FF0F
+FF1A FF1B
+FF1F FF20
+FF3B FF3D
+FF3F
+FF5B
+FF5D
+FF5F FF65
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Quotatio.pl b/Master/xemtex/perl/lib/unicore/lib/Quotatio.pl
new file mode 100644
index 00000000000..802e85a1f52
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Quotatio.pl
@@ -0,0 +1,24 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{QuotationMark} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Quotation_Mark'
+#
+return <<'END';
+0022 Quotation_Mark
+0027 Quotation_Mark
+00AB Quotation_Mark
+00BB Quotation_Mark
+2018 201F Quotation_Mark
+2039 203A Quotation_Mark
+300C 300F Quotation_Mark
+301D 301F Quotation_Mark
+FE41 FE44 Quotation_Mark
+FF02 Quotation_Mark
+FF07 Quotation_Mark
+FF62 FF63 Quotation_Mark
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Radical.pl b/Master/xemtex/perl/lib/unicore/lib/Radical.pl
new file mode 100644
index 00000000000..2b87cfe7929
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Radical.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Radical} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Radical'
+#
+return <<'END';
+2E80 2E99 Radical
+2E9B 2EF3 Radical
+2F00 2FD5 Radical
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Runic.pl b/Master/xemtex/perl/lib/unicore/lib/Runic.pl
new file mode 100644
index 00000000000..01eef2b0964
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Runic.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Runic} (and fuzzy permutations)
+#
+# Meaning: Script 'RUNIC'
+#
+return <<'END';
+16A0 16EA RUNIC
+16EE 16F0 RUNIC
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/S.pl b/Master/xemtex/perl/lib/unicore/lib/S.pl
new file mode 100644
index 00000000000..a1ceed0442b
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/S.pl
@@ -0,0 +1,159 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{S}
+# \p{S} (and fuzzy permutations)
+#
+# Meaning: Major Category 'S'
+#
+return <<'END';
+0024
+002B
+003C 003E
+005E
+0060
+007C
+007E
+00A2 00A9
+00AC
+00AE 00B1
+00B4
+00B6
+00B8
+00D7
+00F7
+02B9 02BA
+02C2 02CF
+02D2 02DF
+02E5 02ED
+0374 0375
+0384 0385
+03F6
+0482
+06E9
+06FD 06FE
+09F2 09F3
+09FA
+0B70
+0E3F
+0F01 0F03
+0F13 0F17
+0F1A 0F1F
+0F34
+0F36
+0F38
+0FBE 0FC5
+0FC7 0FCC
+0FCF
+17DB
+1FBD
+1FBF 1FC1
+1FCD 1FCF
+1FDD 1FDF
+1FED 1FEF
+1FFD 1FFE
+2044
+2052
+207A 207C
+208A 208C
+20A0 20B1
+2100 2101
+2103 2106
+2108 2109
+2114
+2116 2118
+211E 2123
+2125
+2127
+2129
+212E
+2132
+213A
+2140 2144
+214A 214B
+2190 2328
+232B 23B3
+23B7 23CE
+2400 2426
+2440 244A
+249C 24E9
+2500 2613
+2616 2617
+2619 267D
+2680 2689
+2701 2704
+2706 2709
+270C 2727
+2729 274B
+274D
+274F 2752
+2756
+2758 275E
+2761 2767
+2794
+2798 27AF
+27B1 27BE
+27D0 27E5
+27F0 2982
+2999 29D7
+29DC 29FB
+29FE 2AFF
+2E80 2E99
+2E9B 2EF3
+2F00 2FD5
+2FF0 2FFB
+3004
+3012 3013
+3020
+3036 3037
+303E 303F
+309B 309C
+3190 3191
+3196 319F
+3200 321C
+322A 3243
+3260 327B
+327F
+328A 32B0
+32C0 32CB
+32D0 32FE
+3300 3376
+337B 33DD
+33E0 33FE
+A490 A4C6
+FB29
+FDFC
+FE62
+FE64 FE66
+FE69
+FF04
+FF0B
+FF1C FF1E
+FF3E
+FF40
+FF5C
+FF5E
+FFE0 FFE6
+FFE8 FFEE
+FFFC FFFD
+1D000 1D0F5
+1D100 1D126
+1D12A 1D164
+1D16A 1D16C
+1D183 1D184
+1D18C 1D1A9
+1D1AE 1D1DD
+1D6C1
+1D6DB
+1D6FB
+1D715
+1D735
+1D74F
+1D76F
+1D789
+1D7A9
+1D7C3
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Sc.pl b/Master/xemtex/perl/lib/unicore/lib/Sc.pl
new file mode 100644
index 00000000000..80d79b5d2f8
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Sc.pl
@@ -0,0 +1,24 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Sc}
+# \p{Sc} (and fuzzy permutations)
+#
+# Meaning: General Category 'Sc'
+#
+return <<'END';
+0024
+00A2 00A5
+09F2 09F3
+0E3F
+17DB
+20A0 20B1
+FDFC
+FE69
+FF04
+FFE0 FFE1
+FFE5 FFE6
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Sinhala.pl b/Master/xemtex/perl/lib/unicore/lib/Sinhala.pl
new file mode 100644
index 00000000000..3288efe1fe7
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Sinhala.pl
@@ -0,0 +1,23 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Sinhala} (and fuzzy permutations)
+#
+# Meaning: Script 'SINHALA'
+#
+return <<'END';
+0D82 0D83 SINHALA
+0D85 0D96 SINHALA
+0D9A 0DB1 SINHALA
+0DB3 0DBB SINHALA
+0DBD SINHALA
+0DC0 0DC6 SINHALA
+0DCA SINHALA
+0DCF 0DD4 SINHALA
+0DD6 SINHALA
+0DD8 0DDF SINHALA
+0DF2 0DF3 SINHALA
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Sk.pl b/Master/xemtex/perl/lib/unicore/lib/Sk.pl
new file mode 100644
index 00000000000..19ff8b02686
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Sk.pl
@@ -0,0 +1,35 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Sk}
+# \p{Sk} (and fuzzy permutations)
+#
+# Meaning: General Category 'Sk'
+#
+return <<'END';
+005E
+0060
+00A8
+00AF
+00B4
+00B8
+02B9 02BA
+02C2 02CF
+02D2 02DF
+02E5 02ED
+0374 0375
+0384 0385
+1FBD
+1FBF 1FC1
+1FCD 1FCF
+1FDD 1FDF
+1FED 1FEF
+1FFD 1FFE
+309B 309C
+FF3E
+FF40
+FFE3
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Sm.pl b/Master/xemtex/perl/lib/unicore/lib/Sm.pl
new file mode 100644
index 00000000000..8e55e4efe66
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Sm.pl
@@ -0,0 +1,71 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Sm}
+# \p{Sm} (and fuzzy permutations)
+#
+# Meaning: General Category 'Sm'
+#
+return <<'END';
+002B
+003C 003E
+007C
+007E
+00AC
+00B1
+00D7
+00F7
+03F6
+2044
+2052
+207A 207C
+208A 208C
+2140 2144
+214B
+2190 2194
+219A 219B
+21A0
+21A3
+21A6
+21AE
+21CE 21CF
+21D2
+21D4
+21F4 22FF
+2308 230B
+2320 2321
+237C
+239B 23B3
+25B7
+25C1
+25F8 25FF
+266F
+27D0 27E5
+27F0 27FF
+2900 2982
+2999 29D7
+29DC 29FB
+29FE 2AFF
+FB29
+FE62
+FE64 FE66
+FF0B
+FF1C FF1E
+FF5C
+FF5E
+FFE2
+FFE9 FFEC
+1D6C1
+1D6DB
+1D6FB
+1D715
+1D735
+1D74F
+1D76F
+1D789
+1D7A9
+1D7C3
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/So.pl b/Master/xemtex/perl/lib/unicore/lib/So.pl
new file mode 100644
index 00000000000..1ef7acc99cf
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/So.pl
@@ -0,0 +1,117 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{So}
+# \p{So} (and fuzzy permutations)
+#
+# Meaning: General Category 'So'
+#
+return <<'END';
+00A6 00A7
+00A9
+00AE
+00B0
+00B6
+0482
+06E9
+06FD 06FE
+09FA
+0B70
+0F01 0F03
+0F13 0F17
+0F1A 0F1F
+0F34
+0F36
+0F38
+0FBE 0FC5
+0FC7 0FCC
+0FCF
+2100 2101
+2103 2106
+2108 2109
+2114
+2116 2118
+211E 2123
+2125
+2127
+2129
+212E
+2132
+213A
+214A
+2195 2199
+219C 219F
+21A1 21A2
+21A4 21A5
+21A7 21AD
+21AF 21CD
+21D0 21D1
+21D3
+21D5 21F3
+2300 2307
+230C 231F
+2322 2328
+232B 237B
+237D 239A
+23B7 23CE
+2400 2426
+2440 244A
+249C 24E9
+2500 25B6
+25B8 25C0
+25C2 25F7
+2600 2613
+2616 2617
+2619 266E
+2670 267D
+2680 2689
+2701 2704
+2706 2709
+270C 2727
+2729 274B
+274D
+274F 2752
+2756
+2758 275E
+2761 2767
+2794
+2798 27AF
+27B1 27BE
+2800 28FF
+2E80 2E99
+2E9B 2EF3
+2F00 2FD5
+2FF0 2FFB
+3004
+3012 3013
+3020
+3036 3037
+303E 303F
+3190 3191
+3196 319F
+3200 321C
+322A 3243
+3260 327B
+327F
+328A 32B0
+32C0 32CB
+32D0 32FE
+3300 3376
+337B 33DD
+33E0 33FE
+A490 A4C6
+FFE4
+FFE8
+FFED FFEE
+FFFC FFFD
+1D000 1D0F5
+1D100 1D126
+1D12A 1D164
+1D16A 1D16C
+1D183 1D184
+1D18C 1D1A9
+1D1AE 1D1DD
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/SoftDott.pl b/Master/xemtex/perl/lib/unicore/lib/SoftDott.pl
new file mode 100644
index 00000000000..b36e6756572
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/SoftDott.pl
@@ -0,0 +1,19 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{SoftDotted} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Soft_Dotted'
+#
+return <<'END';
+0069 006A Soft_Dotted
+012F Soft_Dotted
+0268 Soft_Dotted
+0456 Soft_Dotted
+0458 Soft_Dotted
+1E2D Soft_Dotted
+1ECB Soft_Dotted
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Space.pl b/Master/xemtex/perl/lib/unicore/lib/Space.pl
new file mode 100644
index 00000000000..868c88c5449
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Space.pl
@@ -0,0 +1,21 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Space}
+#
+# Meaning: [[:Space:]]
+#
+return <<'END';
+0009 000D
+0020
+00A0
+1680
+2000 200B
+2028 2029
+202F
+205F
+3000
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/SpacePer.pl b/Master/xemtex/perl/lib/unicore/lib/SpacePer.pl
new file mode 100644
index 00000000000..bf1cdcbbc15
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/SpacePer.pl
@@ -0,0 +1,23 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{SpacePerl}
+#
+# Meaning: \s
+#
+return <<'END';
+0009 000A
+000C 000D
+0020
+0085
+00A0
+1680
+2000 200B
+2028 2029
+202F
+205F
+3000
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Syriac.pl b/Master/xemtex/perl/lib/unicore/lib/Syriac.pl
new file mode 100644
index 00000000000..d78a76db792
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Syriac.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Syriac} (and fuzzy permutations)
+#
+# Meaning: Script 'SYRIAC'
+#
+return <<'END';
+0710 072C SYRIAC
+0730 074A SYRIAC
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Tagalog.pl b/Master/xemtex/perl/lib/unicore/lib/Tagalog.pl
new file mode 100644
index 00000000000..78ab346469a
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Tagalog.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Tagalog} (and fuzzy permutations)
+#
+# Meaning: Script 'TAGALOG'
+#
+return <<'END';
+1700 170C TAGALOG
+170E 1714 TAGALOG
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Tagbanwa.pl b/Master/xemtex/perl/lib/unicore/lib/Tagbanwa.pl
new file mode 100644
index 00000000000..a7ecbf2af6e
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Tagbanwa.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Tagbanwa} (and fuzzy permutations)
+#
+# Meaning: Script 'TAGBANWA'
+#
+return <<'END';
+1760 176C TAGBANWA
+176E 1770 TAGBANWA
+1772 1773 TAGBANWA
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Tamil.pl b/Master/xemtex/perl/lib/unicore/lib/Tamil.pl
new file mode 100644
index 00000000000..b9777a33d5e
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Tamil.pl
@@ -0,0 +1,28 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Tamil} (and fuzzy permutations)
+#
+# Meaning: Script 'TAMIL'
+#
+return <<'END';
+0B82 0B83 TAMIL
+0B85 0B8A TAMIL
+0B8E 0B90 TAMIL
+0B92 0B95 TAMIL
+0B99 0B9A TAMIL
+0B9C TAMIL
+0B9E 0B9F TAMIL
+0BA3 0BA4 TAMIL
+0BA8 0BAA TAMIL
+0BAE 0BB5 TAMIL
+0BB7 0BB9 TAMIL
+0BBE 0BC2 TAMIL
+0BC6 0BC8 TAMIL
+0BCA 0BCD TAMIL
+0BD7 TAMIL
+0BE7 0BF2 TAMIL
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Telugu.pl b/Master/xemtex/perl/lib/unicore/lib/Telugu.pl
new file mode 100644
index 00000000000..1c161eb9e57
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Telugu.pl
@@ -0,0 +1,24 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Telugu} (and fuzzy permutations)
+#
+# Meaning: Script 'TELUGU'
+#
+return <<'END';
+0C01 0C03 TELUGU
+0C05 0C0C TELUGU
+0C0E 0C10 TELUGU
+0C12 0C28 TELUGU
+0C2A 0C33 TELUGU
+0C35 0C39 TELUGU
+0C3E 0C44 TELUGU
+0C46 0C48 TELUGU
+0C4A 0C4D TELUGU
+0C55 0C56 TELUGU
+0C60 0C61 TELUGU
+0C66 0C6F TELUGU
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Terminal.pl b/Master/xemtex/perl/lib/unicore/lib/Terminal.pl
new file mode 100644
index 00000000000..d7606867ce8
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Terminal.pl
@@ -0,0 +1,48 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{TerminalPunctuation} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Terminal_Punctuation'
+#
+return <<'END';
+0021 Terminal_Punctuation
+002C Terminal_Punctuation
+002E Terminal_Punctuation
+003A 003B Terminal_Punctuation
+003F Terminal_Punctuation
+037E Terminal_Punctuation
+0387 Terminal_Punctuation
+0589 Terminal_Punctuation
+060C Terminal_Punctuation
+061B Terminal_Punctuation
+061F Terminal_Punctuation
+06D4 Terminal_Punctuation
+0700 070A Terminal_Punctuation
+070C Terminal_Punctuation
+0964 0965 Terminal_Punctuation
+0E5A 0E5B Terminal_Punctuation
+104A 104B Terminal_Punctuation
+1361 1368 Terminal_Punctuation
+166D 166E Terminal_Punctuation
+16EB 16ED Terminal_Punctuation
+17D4 17D6 Terminal_Punctuation
+17DA Terminal_Punctuation
+1802 1805 Terminal_Punctuation
+1808 1809 Terminal_Punctuation
+203C 203D Terminal_Punctuation
+2048 2049 Terminal_Punctuation
+3001 3002 Terminal_Punctuation
+FE50 FE52 Terminal_Punctuation
+FE54 FE57 Terminal_Punctuation
+FF01 Terminal_Punctuation
+FF0C Terminal_Punctuation
+FF0E Terminal_Punctuation
+FF1A FF1B Terminal_Punctuation
+FF1F Terminal_Punctuation
+FF61 Terminal_Punctuation
+FF64 Terminal_Punctuation
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Thaana.pl b/Master/xemtex/perl/lib/unicore/lib/Thaana.pl
new file mode 100644
index 00000000000..9c2be21b40f
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Thaana.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Thaana} (and fuzzy permutations)
+#
+# Meaning: Script 'THAANA'
+#
+return <<'END';
+0780 07B1 THAANA
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Thai.pl b/Master/xemtex/perl/lib/unicore/lib/Thai.pl
new file mode 100644
index 00000000000..b09ced7a7ac
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Thai.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Thai} (and fuzzy permutations)
+#
+# Meaning: Script 'THAI'
+#
+return <<'END';
+0E01 0E3A THAI
+0E40 0E4E THAI
+0E50 0E59 THAI
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Tibetan.pl b/Master/xemtex/perl/lib/unicore/lib/Tibetan.pl
new file mode 100644
index 00000000000..cdf7d5b2015
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Tibetan.pl
@@ -0,0 +1,25 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Tibetan} (and fuzzy permutations)
+#
+# Meaning: Script 'TIBETAN'
+#
+return <<'END';
+0F00 TIBETAN
+0F18 0F19 TIBETAN
+0F20 0F33 TIBETAN
+0F35 TIBETAN
+0F37 TIBETAN
+0F39 TIBETAN
+0F40 0F47 TIBETAN
+0F49 0F6A TIBETAN
+0F71 0F84 TIBETAN
+0F86 0F8B TIBETAN
+0F90 0F97 TIBETAN
+0F99 0FBC TIBETAN
+0FC6 TIBETAN
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Title.pl b/Master/xemtex/perl/lib/unicore/lib/Title.pl
new file mode 100644
index 00000000000..a1d03207447
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Title.pl
@@ -0,0 +1,22 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Title}
+#
+# Meaning: [[:Title:]]
+#
+return <<'END';
+01C5
+01C8
+01CB
+01F2
+1F88 1F8F
+1F98 1F9F
+1FA8 1FAF
+1FBC
+1FCC
+1FFC
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/UnifiedI.pl b/Master/xemtex/perl/lib/unicore/lib/UnifiedI.pl
new file mode 100644
index 00000000000..5e4019a7069
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/UnifiedI.pl
@@ -0,0 +1,22 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{UnifiedIdeograph} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Unified_Ideograph'
+#
+return <<'END';
+3400 4DB5 Unified_Ideograph
+4E00 9FA5 Unified_Ideograph
+FA0E FA0F Unified_Ideograph
+FA11 Unified_Ideograph
+FA13 FA14 Unified_Ideograph
+FA1F Unified_Ideograph
+FA21 Unified_Ideograph
+FA23 FA24 Unified_Ideograph
+FA27 FA29 Unified_Ideograph
+20000 2A6D6 Unified_Ideograph
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Upper.pl b/Master/xemtex/perl/lib/unicore/lib/Upper.pl
new file mode 100644
index 00000000000..d3350db9b94
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Upper.pl
@@ -0,0 +1,431 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Upper}
+#
+# Meaning: [[:Upper:]]
+#
+return <<'END';
+0041 005A
+00C0 00D6
+00D8 00DE
+0100
+0102
+0104
+0106
+0108
+010A
+010C
+010E
+0110
+0112
+0114
+0116
+0118
+011A
+011C
+011E
+0120
+0122
+0124
+0126
+0128
+012A
+012C
+012E
+0130
+0132
+0134
+0136
+0139
+013B
+013D
+013F
+0141
+0143
+0145
+0147
+014A
+014C
+014E
+0150
+0152
+0154
+0156
+0158
+015A
+015C
+015E
+0160
+0162
+0164
+0166
+0168
+016A
+016C
+016E
+0170
+0172
+0174
+0176
+0178 0179
+017B
+017D
+0181 0182
+0184
+0186 0187
+0189 018B
+018E 0191
+0193 0194
+0196 0198
+019C 019D
+019F 01A0
+01A2
+01A4
+01A6 01A7
+01A9
+01AC
+01AE 01AF
+01B1 01B3
+01B5
+01B7 01B8
+01BC
+01C4
+01C7
+01CA
+01CD
+01CF
+01D1
+01D3
+01D5
+01D7
+01D9
+01DB
+01DE
+01E0
+01E2
+01E4
+01E6
+01E8
+01EA
+01EC
+01EE
+01F1
+01F4
+01F6 01F8
+01FA
+01FC
+01FE
+0200
+0202
+0204
+0206
+0208
+020A
+020C
+020E
+0210
+0212
+0214
+0216
+0218
+021A
+021C
+021E
+0220
+0222
+0224
+0226
+0228
+022A
+022C
+022E
+0230
+0232
+0386
+0388 038A
+038C
+038E 038F
+0391 03A1
+03A3 03AB
+03D2 03D4
+03D8
+03DA
+03DC
+03DE
+03E0
+03E2
+03E4
+03E6
+03E8
+03EA
+03EC
+03EE
+03F4
+0400 042F
+0460
+0462
+0464
+0466
+0468
+046A
+046C
+046E
+0470
+0472
+0474
+0476
+0478
+047A
+047C
+047E
+0480
+048A
+048C
+048E
+0490
+0492
+0494
+0496
+0498
+049A
+049C
+049E
+04A0
+04A2
+04A4
+04A6
+04A8
+04AA
+04AC
+04AE
+04B0
+04B2
+04B4
+04B6
+04B8
+04BA
+04BC
+04BE
+04C0 04C1
+04C3
+04C5
+04C7
+04C9
+04CB
+04CD
+04D0
+04D2
+04D4
+04D6
+04D8
+04DA
+04DC
+04DE
+04E0
+04E2
+04E4
+04E6
+04E8
+04EA
+04EC
+04EE
+04F0
+04F2
+04F4
+04F8
+0500
+0502
+0504
+0506
+0508
+050A
+050C
+050E
+0531 0556
+10A0 10C5
+1E00
+1E02
+1E04
+1E06
+1E08
+1E0A
+1E0C
+1E0E
+1E10
+1E12
+1E14
+1E16
+1E18
+1E1A
+1E1C
+1E1E
+1E20
+1E22
+1E24
+1E26
+1E28
+1E2A
+1E2C
+1E2E
+1E30
+1E32
+1E34
+1E36
+1E38
+1E3A
+1E3C
+1E3E
+1E40
+1E42
+1E44
+1E46
+1E48
+1E4A
+1E4C
+1E4E
+1E50
+1E52
+1E54
+1E56
+1E58
+1E5A
+1E5C
+1E5E
+1E60
+1E62
+1E64
+1E66
+1E68
+1E6A
+1E6C
+1E6E
+1E70
+1E72
+1E74
+1E76
+1E78
+1E7A
+1E7C
+1E7E
+1E80
+1E82
+1E84
+1E86
+1E88
+1E8A
+1E8C
+1E8E
+1E90
+1E92
+1E94
+1EA0
+1EA2
+1EA4
+1EA6
+1EA8
+1EAA
+1EAC
+1EAE
+1EB0
+1EB2
+1EB4
+1EB6
+1EB8
+1EBA
+1EBC
+1EBE
+1EC0
+1EC2
+1EC4
+1EC6
+1EC8
+1ECA
+1ECC
+1ECE
+1ED0
+1ED2
+1ED4
+1ED6
+1ED8
+1EDA
+1EDC
+1EDE
+1EE0
+1EE2
+1EE4
+1EE6
+1EE8
+1EEA
+1EEC
+1EEE
+1EF0
+1EF2
+1EF4
+1EF6
+1EF8
+1F08 1F0F
+1F18 1F1D
+1F28 1F2F
+1F38 1F3F
+1F48 1F4D
+1F59
+1F5B
+1F5D
+1F5F
+1F68 1F6F
+1FB8 1FBB
+1FC8 1FCB
+1FD8 1FDB
+1FE8 1FEC
+1FF8 1FFB
+2102
+2107
+210B 210D
+2110 2112
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+2130 2131
+2133
+213E 213F
+2145
+FF21 FF3A
+10400 10425
+1D400 1D419
+1D434 1D44D
+1D468 1D481
+1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B5
+1D4D0 1D4E9
+1D504 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D538 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D56C 1D585
+1D5A0 1D5B9
+1D5D4 1D5ED
+1D608 1D621
+1D63C 1D655
+1D670 1D689
+1D6A8 1D6C0
+1D6E2 1D6FA
+1D71C 1D734
+1D756 1D76E
+1D790 1D7A8
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Uppercas.pl b/Master/xemtex/perl/lib/unicore/lib/Uppercas.pl
new file mode 100644
index 00000000000..7f39ab9ee39
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Uppercas.pl
@@ -0,0 +1,433 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Uppercase} (and fuzzy permutations)
+#
+# Meaning: [\p{Lu}\p{Other_Uppercase}]
+#
+return <<'END';
+0041 005A
+00C0 00D6
+00D8 00DE
+0100
+0102
+0104
+0106
+0108
+010A
+010C
+010E
+0110
+0112
+0114
+0116
+0118
+011A
+011C
+011E
+0120
+0122
+0124
+0126
+0128
+012A
+012C
+012E
+0130
+0132
+0134
+0136
+0139
+013B
+013D
+013F
+0141
+0143
+0145
+0147
+014A
+014C
+014E
+0150
+0152
+0154
+0156
+0158
+015A
+015C
+015E
+0160
+0162
+0164
+0166
+0168
+016A
+016C
+016E
+0170
+0172
+0174
+0176
+0178 0179
+017B
+017D
+0181 0182
+0184
+0186 0187
+0189 018B
+018E 0191
+0193 0194
+0196 0198
+019C 019D
+019F 01A0
+01A2
+01A4
+01A6 01A7
+01A9
+01AC
+01AE 01AF
+01B1 01B3
+01B5
+01B7 01B8
+01BC
+01C4
+01C7
+01CA
+01CD
+01CF
+01D1
+01D3
+01D5
+01D7
+01D9
+01DB
+01DE
+01E0
+01E2
+01E4
+01E6
+01E8
+01EA
+01EC
+01EE
+01F1
+01F4
+01F6 01F8
+01FA
+01FC
+01FE
+0200
+0202
+0204
+0206
+0208
+020A
+020C
+020E
+0210
+0212
+0214
+0216
+0218
+021A
+021C
+021E
+0220
+0222
+0224
+0226
+0228
+022A
+022C
+022E
+0230
+0232
+0386
+0388 038A
+038C
+038E 038F
+0391 03A1
+03A3 03AB
+03D2 03D4
+03D8
+03DA
+03DC
+03DE
+03E0
+03E2
+03E4
+03E6
+03E8
+03EA
+03EC
+03EE
+03F4
+0400 042F
+0460
+0462
+0464
+0466
+0468
+046A
+046C
+046E
+0470
+0472
+0474
+0476
+0478
+047A
+047C
+047E
+0480
+048A
+048C
+048E
+0490
+0492
+0494
+0496
+0498
+049A
+049C
+049E
+04A0
+04A2
+04A4
+04A6
+04A8
+04AA
+04AC
+04AE
+04B0
+04B2
+04B4
+04B6
+04B8
+04BA
+04BC
+04BE
+04C0 04C1
+04C3
+04C5
+04C7
+04C9
+04CB
+04CD
+04D0
+04D2
+04D4
+04D6
+04D8
+04DA
+04DC
+04DE
+04E0
+04E2
+04E4
+04E6
+04E8
+04EA
+04EC
+04EE
+04F0
+04F2
+04F4
+04F8
+0500
+0502
+0504
+0506
+0508
+050A
+050C
+050E
+0531 0556
+10A0 10C5
+1E00
+1E02
+1E04
+1E06
+1E08
+1E0A
+1E0C
+1E0E
+1E10
+1E12
+1E14
+1E16
+1E18
+1E1A
+1E1C
+1E1E
+1E20
+1E22
+1E24
+1E26
+1E28
+1E2A
+1E2C
+1E2E
+1E30
+1E32
+1E34
+1E36
+1E38
+1E3A
+1E3C
+1E3E
+1E40
+1E42
+1E44
+1E46
+1E48
+1E4A
+1E4C
+1E4E
+1E50
+1E52
+1E54
+1E56
+1E58
+1E5A
+1E5C
+1E5E
+1E60
+1E62
+1E64
+1E66
+1E68
+1E6A
+1E6C
+1E6E
+1E70
+1E72
+1E74
+1E76
+1E78
+1E7A
+1E7C
+1E7E
+1E80
+1E82
+1E84
+1E86
+1E88
+1E8A
+1E8C
+1E8E
+1E90
+1E92
+1E94
+1EA0
+1EA2
+1EA4
+1EA6
+1EA8
+1EAA
+1EAC
+1EAE
+1EB0
+1EB2
+1EB4
+1EB6
+1EB8
+1EBA
+1EBC
+1EBE
+1EC0
+1EC2
+1EC4
+1EC6
+1EC8
+1ECA
+1ECC
+1ECE
+1ED0
+1ED2
+1ED4
+1ED6
+1ED8
+1EDA
+1EDC
+1EDE
+1EE0
+1EE2
+1EE4
+1EE6
+1EE8
+1EEA
+1EEC
+1EEE
+1EF0
+1EF2
+1EF4
+1EF6
+1EF8
+1F08 1F0F
+1F18 1F1D
+1F28 1F2F
+1F38 1F3F
+1F48 1F4D
+1F59
+1F5B
+1F5D
+1F5F
+1F68 1F6F
+1FB8 1FBB
+1FC8 1FCB
+1FD8 1FDB
+1FE8 1FEC
+1FF8 1FFB
+2102
+2107
+210B 210D
+2110 2112
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+2130 2131
+2133
+213E 213F
+2145
+2160 216F
+24B6 24CF
+FF21 FF3A
+10400 10425
+1D400 1D419
+1D434 1D44D
+1D468 1D481
+1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B5
+1D4D0 1D4E9
+1D504 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D538 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D56C 1D585
+1D5A0 1D5B9
+1D5D4 1D5ED
+1D608 1D621
+1D63C 1D655
+1D670 1D689
+1D6A8 1D6C0
+1D6E2 1D6FA
+1D71C 1D734
+1D756 1D76E
+1D790 1D7A8
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/WhiteSpa.pl b/Master/xemtex/perl/lib/unicore/lib/WhiteSpa.pl
new file mode 100644
index 00000000000..8f05124ec30
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/WhiteSpa.pl
@@ -0,0 +1,21 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{WhiteSpace} (and fuzzy permutations)
+#
+# Meaning: Extended property 'White_Space'
+#
+return <<'END';
+0009 000D White_Space
+0020 White_Space
+0085 White_Space
+00A0 White_Space
+1680 White_Space
+2000 200A White_Space
+2028 2029 White_Space
+202F White_Space
+3000 White_Space
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Word.pl b/Master/xemtex/perl/lib/unicore/lib/Word.pl
new file mode 100644
index 00000000000..fcd8aa0f805
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Word.pl
@@ -0,0 +1,424 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Word}
+#
+# Meaning: [[:Word:]]
+#
+return <<'END';
+0030 0039
+0041 005A
+005F
+0061 007A
+00AA
+00B2 00B3
+00B5
+00B9 00BA
+00BC 00BE
+00C0 00D6
+00D8 00F6
+00F8 0220
+0222 0233
+0250 02AD
+02B0 02B8
+02BB 02C1
+02D0 02D1
+02E0 02E4
+02EE
+0300 034F
+0360 036F
+037A
+0386
+0388 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F5
+0400 0481
+0483 0486
+0488 04CE
+04D0 04F5
+04F8 04F9
+0500 050F
+0531 0556
+0559
+0561 0587
+0591 05A1
+05A3 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4
+05D0 05EA
+05F0 05F2
+0621 063A
+0640 0655
+0660 0669
+066E 06D3
+06D5 06DC
+06DE 06E8
+06EA 06ED
+06F0 06FC
+0710 072C
+0730 074A
+0780 07B1
+0901 0903
+0905 0939
+093C 094D
+0950 0954
+0958 0963
+0966 096F
+0981 0983
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BC
+09BE 09C4
+09C7 09C8
+09CB 09CD
+09D7
+09DC 09DD
+09DF 09E3
+09E6 09F1
+09F4 09F9
+0A02
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3C
+0A3E 0A42
+0A47 0A48
+0A4B 0A4D
+0A59 0A5C
+0A5E
+0A66 0A74
+0A81 0A83
+0A85 0A8B
+0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABC 0AC5
+0AC7 0AC9
+0ACB 0ACD
+0AD0
+0AE0
+0AE6 0AEF
+0B01 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B36 0B39
+0B3C 0B43
+0B47 0B48
+0B4B 0B4D
+0B56 0B57
+0B5C 0B5D
+0B5F 0B61
+0B66 0B6F
+0B82 0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB5
+0BB7 0BB9
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCD
+0BD7
+0BE7 0BF2
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C3E 0C44
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0C60 0C61
+0C66 0C6F
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBE 0CC4
+0CC6 0CC8
+0CCA 0CCD
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0CE6 0CEF
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D43
+0D46 0D48
+0D4A 0D4D
+0D57
+0D60 0D61
+0D66 0D6F
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCA
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF3
+0E01 0E3A
+0E40 0E4E
+0E50 0E59
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB9
+0EBB 0EBD
+0EC0 0EC4
+0EC6
+0EC8 0ECD
+0ED0 0ED9
+0EDC 0EDD
+0F00
+0F18 0F19
+0F20 0F33
+0F35
+0F37
+0F39
+0F3E 0F47
+0F49 0F6A
+0F71 0F84
+0F86 0F8B
+0F90 0F97
+0F99 0FBC
+0FC6
+1000 1021
+1023 1027
+1029 102A
+102C 1032
+1036 1039
+1040 1049
+1050 1059
+10A0 10C5
+10D0 10F8
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1206
+1208 1246
+1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1286
+1288
+128A 128D
+1290 12AE
+12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12CE
+12D0 12D6
+12D8 12EE
+12F0 130E
+1310
+1312 1315
+1318 131E
+1320 1346
+1348 135A
+1369 137C
+13A0 13F4
+1401 166C
+166F 1676
+1681 169A
+16A0 16EA
+16EE 16F0
+1700 170C
+170E 1714
+1720 1734
+1740 1753
+1760 176C
+176E 1770
+1772 1773
+1780 17D3
+17D7
+17DC
+17E0 17E9
+180B 180D
+1810 1819
+1820 1877
+1880 18A9
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC2 1FC4
+1FC6 1FCC
+1FD0 1FD3
+1FD6 1FDB
+1FE0 1FEC
+1FF2 1FF4
+1FF6 1FFC
+2070 2071
+2074 2079
+207F 2089
+20D0 20EA
+2102
+2107
+210A 2113
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+212F 2131
+2133 2139
+213D 213F
+2145 2149
+2153 2183
+2460 249B
+24EA 24FE
+2776 2793
+3005 3007
+3021 302F
+3031 3035
+3038 303C
+3041 3096
+3099 309A
+309D 309F
+30A1 30FA
+30FC 30FF
+3105 312C
+3131 318E
+3192 3195
+31A0 31B7
+31F0 31FF
+3220 3229
+3251 325F
+3280 3289
+32B1 32BF
+3400 4DB5
+4E00 9FA5
+A000 A48C
+AC00 D7A3
+F900 FA2D
+FA30 FA6A
+FB00 FB06
+FB13 FB17
+FB1D FB28
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFB
+FE00 FE0F
+FE20 FE23
+FE70 FE74
+FE76 FEFC
+FF10 FF19
+FF21 FF3A
+FF41 FF5A
+FF66 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+10300 1031E
+10320 10323
+10330 1034A
+10400 10425
+10428 1044D
+1D165 1D169
+1D16D 1D172
+1D17B 1D182
+1D185 1D18B
+1D1AA 1D1AD
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C0
+1D4C2 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A3
+1D6A8 1D6C0
+1D6C2 1D6DA
+1D6DC 1D6FA
+1D6FC 1D714
+1D716 1D734
+1D736 1D74E
+1D750 1D76E
+1D770 1D788
+1D78A 1D7A8
+1D7AA 1D7C2
+1D7C4 1D7C9
+1D7CE 1D7FF
+20000 2A6D6
+2F800 2FA1D
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/XDigit.pl b/Master/xemtex/perl/lib/unicore/lib/XDigit.pl
new file mode 100644
index 00000000000..6fe95d5c1ed
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/XDigit.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{XDigit}
+#
+# Meaning: [[:XDigit:]]
+#
+return <<'END';
+0030 0039
+0041 0046
+0061 0066
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Yi.pl b/Master/xemtex/perl/lib/unicore/lib/Yi.pl
new file mode 100644
index 00000000000..eb7131e801a
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Yi.pl
@@ -0,0 +1,18 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Yi} (and fuzzy permutations)
+#
+# Meaning: Script 'YI'
+#
+return <<'END';
+A000 A48C YI
+A490 A4A1 YI
+A4A4 A4B3 YI
+A4B5 A4C0 YI
+A4C2 A4C4 YI
+A4C6 YI
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Z.pl b/Master/xemtex/perl/lib/unicore/lib/Z.pl
new file mode 100644
index 00000000000..751327e6922
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Z.pl
@@ -0,0 +1,21 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Z}
+# \p{Z} (and fuzzy permutations)
+#
+# Meaning: Major Category 'Z'
+#
+return <<'END';
+0020
+00A0
+1680
+2000 200B
+2028 2029
+202F
+205F
+3000
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Zl.pl b/Master/xemtex/perl/lib/unicore/lib/Zl.pl
new file mode 100644
index 00000000000..db5580deb4f
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Zl.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Zl}
+# \p{Zl} (and fuzzy permutations)
+#
+# Meaning: General Category 'Zl'
+#
+return <<'END';
+2028
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Zp.pl b/Master/xemtex/perl/lib/unicore/lib/Zp.pl
new file mode 100644
index 00000000000..f7a4eb62a3b
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Zp.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Zp}
+# \p{Zp} (and fuzzy permutations)
+#
+# Meaning: General Category 'Zp'
+#
+return <<'END';
+2029
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/Zs.pl b/Master/xemtex/perl/lib/unicore/lib/Zs.pl
new file mode 100644
index 00000000000..1c1b467a570
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/Zs.pl
@@ -0,0 +1,20 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Zs}
+# \p{Zs} (and fuzzy permutations)
+#
+# Meaning: General Category 'Zs'
+#
+return <<'END';
+0020
+00A0
+1680
+2000 200B
+202F
+205F
+3000
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/_CanonDC.pl b/Master/xemtex/perl/lib/unicore/lib/_CanonDC.pl
new file mode 100644
index 00000000000..3d627e7ed21
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/_CanonDC.pl
@@ -0,0 +1,16 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{_CanonDCIJ}
+#
+# Meaning: (for internal casefolding use)
+#
+return <<'END';
+0069 006A
+012F
+1E2D
+1ECB
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/_CaseIgn.pl b/Master/xemtex/perl/lib/unicore/lib/_CaseIgn.pl
new file mode 100644
index 00000000000..dafa4a668f1
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/_CaseIgn.pl
@@ -0,0 +1,118 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{_CaseIgnorable}
+#
+# Meaning: (for internal casefolding use)
+#
+return <<'END';
+00AD
+0300 034F
+0360 036F
+0483 0486
+0591 05A1
+05A3 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4
+064B 0655
+0670
+06D6 06DC
+06DF 06E4
+06E7 06E8
+06EA 06ED
+0711
+0730 074A
+07A6 07B0
+0901 0902
+093C
+0941 0948
+094D
+0951 0954
+0962 0963
+0981
+09BC
+09C1 09C4
+09CD
+09E2 09E3
+0A02
+0A3C
+0A41 0A42
+0A47 0A48
+0A4B 0A4D
+0A70 0A71
+0A81 0A82
+0ABC
+0AC1 0AC5
+0AC7 0AC8
+0ACD
+0B01
+0B3C
+0B3F
+0B41 0B43
+0B4D
+0B56
+0B82
+0BC0
+0BCD
+0C3E 0C40
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0CBF
+0CC6
+0CCC 0CCD
+0D41 0D43
+0D4D
+0DCA
+0DD2 0DD4
+0DD6
+0E31
+0E34 0E3A
+0E47 0E4E
+0EB1
+0EB4 0EB9
+0EBB 0EBC
+0EC8 0ECD
+0F18 0F19
+0F35
+0F37
+0F39
+0F71 0F7E
+0F80 0F84
+0F86 0F87
+0F90 0F97
+0F99 0FBC
+0FC6
+102D 1030
+1032
+1036 1037
+1039
+1058 1059
+1712 1714
+1732 1734
+1752 1753
+1772 1773
+17B7 17BD
+17C6
+17C9 17D3
+180B 180D
+18A9
+2010
+20D0 20DC
+20E1
+20E5 20EA
+302A 302F
+3099 309A
+FB1E
+FE00 FE0F
+FE20 FE23
+1D167 1D169
+1D17B 1D182
+1D185 1D18B
+1D1AA 1D1AD
+END
diff --git a/Master/xemtex/perl/lib/unicore/lib/_CombAbo.pl b/Master/xemtex/perl/lib/unicore/lib/_CombAbo.pl
new file mode 100644
index 00000000000..de2c8e46ab7
--- /dev/null
+++ b/Master/xemtex/perl/lib/unicore/lib/_CombAbo.pl
@@ -0,0 +1,54 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by ./mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{_CombAbove}
+#
+# Meaning: (for internal casefolding use)
+#
+return <<'END';
+0300 0314
+033D 0344
+0346
+034A 034C
+0363 036F
+0483 0486
+0592 0595
+0597 0599
+059C 05A1
+05A8 05A9
+05AB 05AC
+05AF
+05C4
+0653 0654
+06D6 06DC
+06DF 06E2
+06E4
+06E7 06E8
+06EB 06EC
+0730
+0732 0733
+0735 0736
+073A
+073D
+073F 0741
+0743
+0745
+0747
+0749 074A
+0951
+0953 0954
+0F82 0F83
+0F86 0F87
+20D0 20D1
+20D4 20D7
+20DB 20DC
+20E1
+20E7
+20E9
+FE20 FE23
+1D185 1D189
+1D1AA 1D1AD
+END
diff --git a/Master/xemtex/perl/lib/utf8.pm b/Master/xemtex/perl/lib/utf8.pm
new file mode 100644
index 00000000000..5a37aecba87
--- /dev/null
+++ b/Master/xemtex/perl/lib/utf8.pm
@@ -0,0 +1,152 @@
+package utf8;
+
+$utf8::hint_bits = 0x00800000;
+
+our $VERSION = '1.00';
+
+sub import {
+ $^H |= $utf8::hint_bits;
+ $enc{caller()} = $_[1] if $_[1];
+}
+
+sub unimport {
+ $^H &= ~$utf8::hint_bits;
+}
+
+sub AUTOLOAD {
+ require "utf8_heavy.pl";
+ goto &$AUTOLOAD if defined &$AUTOLOAD;
+ Carp::croak("Undefined subroutine $AUTOLOAD called");
+}
+
+1;
+__END__
+
+=head1 NAME
+
+utf8 - Perl pragma to enable/disable UTF-8 (or UTF-EBCDIC) in source code
+
+=head1 SYNOPSIS
+
+ use utf8;
+ no utf8;
+
+=head1 DESCRIPTION
+
+The C<use utf8> pragma tells the Perl parser to allow UTF-8 in the
+program text in the current lexical scope (allow UTF-EBCDIC on EBCDIC based
+platforms). The C<no utf8> pragma tells Perl to switch back to treating
+the source text as literal bytes in the current lexical scope.
+
+This pragma is primarily a compatibility device. Perl versions
+earlier than 5.6 allowed arbitrary bytes in source code, whereas
+in future we would like to standardize on the UTF-8 encoding for
+source text. Until UTF-8 becomes the default format for source
+text, this pragma should be used to recognize UTF-8 in the source.
+When UTF-8 becomes the standard source format, this pragma will
+effectively become a no-op. For convenience in what follows the
+term I<UTF-X> is used to refer to UTF-8 on ASCII and ISO Latin based
+platforms and UTF-EBCDIC on EBCDIC based platforms.
+
+Enabling the C<utf8> pragma has the following effect:
+
+=over 4
+
+=item *
+
+Bytes in the source text that have their high-bit set will be treated
+as being part of a literal UTF-8 character. This includes most
+literals such as identifier names, string constants, and constant
+regular expression patterns.
+
+On EBCDIC platforms characters in the Latin 1 character set are
+treated as being part of a literal UTF-EBCDIC character.
+
+=back
+
+Note that if you have bytes with the eighth bit on in your script
+(for example embedded Latin-1 in your string literals), C<use utf8>
+will be unhappy since the bytes are most probably not well-formed
+UTF-8. If you want to have such bytes and use utf8, you can disable
+utf8 until the end the block (or file, if at top level) by C<no utf8;>.
+
+=head2 Utility functions
+
+The following functions are defined in the C<utf8::> package by the perl core.
+
+=over 4
+
+=item * $num_octets = utf8::upgrade($string);
+
+Converts (in-place) internal representation of string to Perl's internal
+I<UTF-X> form. Returns the number of octets necessary to represent
+the string as I<UTF-X>. Can be used to make sure that the
+UTF-8 flag is on, so that C<\w> or C<lc()> work as expected on strings
+containing characters in the range 0x80-0xFF. Note that this should
+not be used to convert
+a legacy byte encoding to Unicode: use Encode for that. Affected
+by the encoding pragma.
+
+=item * utf8::downgrade($string[, FAIL_OK])
+
+Converts (in-place) internal representation of string to be un-encoded
+bytes. Returns true on success. On failure dies or, if the value of
+FAIL_OK is true, returns false. Can be used to make sure that the
+UTF-8 flag is off, e.g. when you want to make sure that the substr()
+or length() function works with the usually faster byte algorithm.
+Note that this should not be used to convert Unicode back to a legacy
+byte encoding: use Encode for that. B<Not> affected by the encoding
+pragma.
+
+=item * utf8::encode($string)
+
+Converts (in-place) I<$string> from logical characters to octet
+sequence representing it in Perl's I<UTF-X> encoding. Same as
+Encode::encode_utf8(). Note that this should not be used to convert
+a legacy byte encoding to Unicode: use Encode for that.
+
+=item * $flag = utf8::decode($string)
+
+Attempts to convert I<$string> in-place from Perl's I<UTF-X> encoding
+into logical characters. Same as Encode::decode_utf8(). Note that this
+should not be used to convert Unicode back to a legacy byte encoding:
+use Encode for that.
+
+=item * $flag = utf8::valid(STRING)
+
+[INTERNAL] Test whether STRING is in a consistent state. Will return
+true if string is held as bytes, or is well-formed UTF-8 and has the
+UTF-8 flag on. Main reason for this routine is to allow Perl's
+testsuite to check that operations have left strings in a consistent
+state.
+
+=back
+
+C<utf8::encode> is like C<utf8::upgrade>, but the UTF8 flag is
+cleared. See L<perlunicode> for more on the UTF8 flag and the C API
+functions C<sv_utf8_upgrade>, C<sv_utf8_downgrade>, C<sv_utf8_encode>,
+and C<sv_utf8_decode>, which are wrapped by the Perl functions
+C<utf8::upgrade>, C<utf8::downgrade>, C<utf8::encode> and
+C<utf8::decode>. Note that in the Perl 5.8.0 implementation the
+functions utf8::valid, utf8::encode, utf8::decode, utf8::upgrade,
+and utf8::downgrade are always available, without a C<require utf8>
+statement-- this may change in future releases.
+
+=head1 BUGS
+
+One can have Unicode in identifier names, but not in package/class or
+subroutine names. While some limited functionality towards this does
+exist as of Perl 5.8.0, that is more accidental than designed; use of
+Unicode for the said purposes is unsupported.
+
+One reason of this unfinishedness is its (currently) inherent
+unportability: since both package names and subroutine names may need
+to be mapped to file and directory names, the Unicode capability of
+the filesystem becomes important-- and there unfortunately aren't
+portable answers.
+
+=head1 SEE ALSO
+
+L<perlunicode>, L<bytes>
+
+=cut
diff --git a/Master/xemtex/perl/lib/utf8_heavy.pl b/Master/xemtex/perl/lib/utf8_heavy.pl
new file mode 100644
index 00000000000..1839d2144f1
--- /dev/null
+++ b/Master/xemtex/perl/lib/utf8_heavy.pl
@@ -0,0 +1,344 @@
+package utf8;
+use strict;
+use warnings;
+
+sub DEBUG () { 0 }
+
+sub DESTROY {}
+
+my %Cache;
+
+sub croak { require Carp; Carp::croak(@_) }
+
+##
+## "SWASH" == "SWATCH HASH". A "swatch" is a swatch of the Unicode landscape
+##
+
+sub SWASHNEW {
+ my ($class, $type, $list, $minbits, $none) = @_;
+ local $^D = 0 if $^D;
+
+ print STDERR "SWASHNEW @_\n" if DEBUG;
+
+ ##
+ ## Get the list of codepoints for the type.
+ ## Called from utf8.c
+ ##
+ ## Given a $type, our goal is to fill $list with the set of codepoint
+ ## ranges.
+ ##
+ ## To make the parsing of $type clear, this code takes the a rather
+ ## unorthadox approach of last'ing out of the block once we have the
+ ## info we need. Were this to be a subroutine, the 'last' would just
+ ## be a 'return'.
+ ##
+ my $file; ## file to load data from, and also part of the %Cache key.
+ my $ListSorted = 0;
+
+ if ($type)
+ {
+ $type =~ s/^\s+//;
+ $type =~ s/\s+$//;
+
+ print "type = $type\n" if DEBUG;
+
+ GETFILE:
+ {
+ ##
+ ## 'Is' is always optional, so if it's there, remove it.
+ ## Same with 'Category=' and 'Script='.
+ ##
+ ## 'Block=' is replaced by 'In'.
+ ##
+ $type =~ s/^Is(?:\s+|[-_])?//i
+ or
+ $type =~ s/^Category\s*=\s*//i
+ or
+ $type =~ s/^Script\s*=\s*//i
+ or
+ $type =~ s/^Block\s*=\s*/In/i;
+
+ ##
+ ## See if it's in the direct mapping table.
+ ##
+ require "unicore/Exact.pl";
+ if (my $base = $utf8::Exact{$type}) {
+ $file = "unicore/lib/$base.pl";
+ last GETFILE;
+ }
+
+ ##
+ ## If not there exactly, try the canonical form. The canonical
+ ## form is lowercased, with any separators (\s+|[-_]) removed.
+ ##
+ my $canonical = lc $type;
+ $canonical =~ s/(?<=[a-z\d])(?:\s+|[-_])(?=[a-z\d])//g;
+ print "canonical = $canonical\n" if DEBUG;
+
+ require "unicore/Canonical.pl";
+ if (my $base = $utf8::Canonical{$canonical}) {
+ $file = "unicore/lib/$base.pl";
+ last GETFILE;
+ }
+
+ ##
+ ## It could be a user-defined property.
+ ##
+
+ if ($type =~ /^I[ns](\w+)$/) {
+ my @caller = caller(1);
+
+ if (defined $caller[0]) {
+ my $prop = $caller[0] . "::" . $type;
+
+ if (exists &{$prop}) {
+ no strict 'refs';
+
+ $list = &{$prop};
+ last GETFILE;
+ }
+ }
+ }
+
+ ##
+ ## Last attempt -- see if it's a "To" name (e.g. "ToLower")
+ ##
+ if ($type =~ /^To([A-Z][A-Za-z]+)$/)
+ {
+ $file = "unicore/To/$1.pl";
+ ## would like to test to see if $file actually exists....
+ last GETFILE;
+ }
+
+ ##
+ ## If we reach this line, it's because we couldn't figure
+ ## out what to do with $type. Ouch.
+ ##
+
+ return $type;
+ }
+
+ if (defined $file) {
+ print "found it (file='$file')\n" if DEBUG;
+
+ ##
+ ## If we reach here, it was due to a 'last GETFILE' above
+ ## (exception: user-defined properties), so we
+ ## have a filename, so now we load it if we haven't already.
+ ## If we have, return the cached results. The cache key is the
+ ## file to load.
+ ##
+ if ($Cache{$file} and ref($Cache{$file}) eq $class)
+ {
+ print "Returning cached '$file' for \\p{$type}\n" if DEBUG;
+ return $Cache{$class, $file};
+ }
+
+ $list = do $file;
+ }
+
+ $ListSorted = 1; ## we know that these lists are sorted
+ }
+
+ my $extras;
+ my $bits;
+
+ my $ORIG = $list;
+ if ($list) {
+ my @tmp = split(/^/m, $list);
+ my %seen;
+ no warnings;
+ $extras = join '', grep /^[^0-9a-fA-F]/, @tmp;
+ $list = join '',
+ sort { hex $a <=> hex $b }
+ grep {/^([0-9a-fA-F]+)/ and not $seen{$1}++} @tmp; # XXX doesn't do ranges right
+ }
+
+ if ($none) {
+ my $hextra = sprintf "%04x", $none + 1;
+ $list =~ s/\tXXXX$/\t$hextra/mg;
+ }
+
+ if ($minbits < 32) {
+ my $top = 0;
+ while ($list =~ /^([0-9a-fA-F]+)(?:\t([0-9a-fA-F]+)?)(?:\t([0-9a-fA-F]+))?/mg) {
+ my $min = hex $1;
+ my $max = hex(defined $2 ? $2 : $1);
+ my $val = hex(defined $3 ? $3 : "");
+ $val += $max - $min if defined $3;
+ $top = $val if $val > $top;
+ }
+ $bits =
+ $top > 0xffff ? 32 :
+ $top > 0xff ? 16 :
+ $top > 1 ? 8 : 1
+ }
+ $bits = $minbits if $bits < $minbits;
+
+ my @extras;
+ for my $x ($extras) {
+ pos $x = 0;
+ while ($x =~ /^([^0-9a-fA-F\n])(.*)/mg) {
+ my $char = $1;
+ my $name = $2;
+ print STDERR "$1 => $2\n" if DEBUG;
+ if ($char =~ /[-+!]/) {
+ my ($c,$t) = split(/::/, $name, 2); # bogus use of ::, really
+ my $subobj;
+ if ($c eq 'utf8') {
+ $subobj = $c->SWASHNEW($t, "", 0, 0, 0);
+ }
+ elsif ($c =~ /^([0-9a-fA-F]+)/) {
+ $subobj = utf8->SWASHNEW("", $c, 0, 0, 0);
+ }
+ return $subobj unless ref $subobj;
+ push @extras, $name => $subobj;
+ $bits = $subobj->{BITS} if $bits < $subobj->{BITS};
+ }
+ }
+ }
+
+ print STDERR "CLASS = $class, TYPE => $type, BITS => $bits, NONE => $none\nEXTRAS =>\n$extras\nLIST =>\n$list\n" if DEBUG;
+
+ my $SWASH = bless {
+ TYPE => $type,
+ BITS => $bits,
+ EXTRAS => $extras,
+ LIST => $list,
+ NONE => $none,
+ @extras,
+ } => $class;
+
+ if ($file) {
+ $Cache{$class, $file} = $SWASH;
+ }
+
+ return $SWASH;
+}
+
+# NOTE: utf8.c:swash_init() assumes entries are never modified once generated.
+
+sub SWASHGET {
+ # See utf8.c:Perl_swash_fetch for problems with this interface.
+ my ($self, $start, $len) = @_;
+ local $^D = 0 if $^D;
+ my $type = $self->{TYPE};
+ my $bits = $self->{BITS};
+ my $none = $self->{NONE};
+ print STDERR "SWASHGET @_ [$type/$bits/$none]\n" if DEBUG;
+ my $end = $start + $len;
+ my $swatch = "";
+ my $key;
+ vec($swatch, $len - 1, $bits) = 0; # Extend to correct length.
+ if ($none) {
+ for $key (0 .. $len - 1) { vec($swatch, $key, $bits) = $none }
+ }
+
+ for ($self->{LIST}) {
+ pos $_ = 0;
+ if ($bits > 1) {
+ LINE:
+ while (/^([0-9a-fA-F]+)(?:\t([0-9a-fA-F]+)?)(?:\t([0-9a-fA-F]+))?/mg) {
+ my $min = hex $1;
+ my $max = (defined $2 ? hex $2 : $min);
+ my $val = hex $3;
+ next if $max < $start;
+ print "$min $max $val\n" if DEBUG;
+ if ($none) {
+ if ($min < $start) {
+ $val += $start - $min if $val < $none;
+ $min = $start;
+ }
+ for ($key = $min; $key <= $max; $key++) {
+ last LINE if $key >= $end;
+ print STDERR "$key => $val\n" if DEBUG;
+ vec($swatch, $key - $start, $bits) = $val;
+ ++$val if $val < $none;
+ }
+ }
+ else {
+ if ($min < $start) {
+ $val += $start - $min;
+ $min = $start;
+ }
+ for ($key = $min; $key <= $max; $key++, $val++) {
+ last LINE if $key >= $end;
+ print STDERR "$key => $val\n" if DEBUG;
+ vec($swatch, $key - $start, $bits) = $val;
+ }
+ }
+ }
+ }
+ else {
+ LINE:
+ while (/^([0-9a-fA-F]+)(?:[ \t]+([0-9a-fA-F]+))?/mg) {
+ my $min = hex $1;
+ my $max = (defined $2 ? hex $2 : $min);
+ next if $max < $start;
+ if ($min < $start) {
+ $min = $start;
+ }
+ for ($key = $min; $key <= $max; $key++) {
+ last LINE if $key >= $end;
+ print STDERR "$key => 1\n" if DEBUG;
+ vec($swatch, $key - $start, 1) = 1;
+ }
+ }
+ }
+ }
+ for my $x ($self->{EXTRAS}) {
+ pos $x = 0;
+ while ($x =~ /^([-+!])(.*)/mg) {
+ my $char = $1;
+ my $name = $2;
+ print STDERR "INDIRECT $1 $2\n" if DEBUG;
+ my $otherbits = $self->{$name}->{BITS};
+ croak("SWASHGET size mismatch") if $bits < $otherbits;
+ my $other = $self->{$name}->SWASHGET($start, $len);
+ if ($char eq '+') {
+ if ($bits == 1 and $otherbits == 1) {
+ $swatch |= $other;
+ }
+ else {
+ for ($key = 0; $key < $len; $key++) {
+ vec($swatch, $key, $bits) = vec($other, $key, $otherbits);
+ }
+ }
+ }
+ elsif ($char eq '!') {
+ if ($bits == 1 and $otherbits == 1) {
+ $swatch |= ~$other;
+ }
+ else {
+ for ($key = 0; $key < $len; $key++) {
+ if (!vec($other, $key, $otherbits)) {
+ vec($swatch, $key, $bits) = 1;
+ }
+ }
+ }
+ }
+ elsif ($char eq '-') {
+ if ($bits == 1 and $otherbits == 1) {
+ $swatch &= ~$other;
+ }
+ else {
+ for ($key = 0; $key < $len; $key++) {
+ if (vec($other, $key, $otherbits)) {
+ vec($swatch, $key, $bits) = 0;
+ }
+ }
+ }
+ }
+ }
+ }
+ if (DEBUG) {
+ print STDERR "CELLS ";
+ for ($key = 0; $key < $len; $key++) {
+ print STDERR vec($swatch, $key, $bits), " ";
+ }
+ print STDERR "\n";
+ }
+ $swatch;
+}
+
+1;
diff --git a/Master/xemtex/perl/lib/vars.pm b/Master/xemtex/perl/lib/vars.pm
new file mode 100644
index 00000000000..a0151b84030
--- /dev/null
+++ b/Master/xemtex/perl/lib/vars.pm
@@ -0,0 +1,82 @@
+package vars;
+
+use 5.006;
+
+our $VERSION = '1.01';
+
+use warnings::register;
+use strict qw(vars subs);
+
+sub import {
+ my $callpack = caller;
+ my ($pack, @imports) = @_;
+ my ($sym, $ch);
+ foreach (@imports) {
+ if (($ch, $sym) = /^([\$\@\%\*\&])(.+)/) {
+ if ($sym =~ /\W/) {
+ # time for a more-detailed check-up
+ if ($sym =~ /^\w+[[{].*[]}]$/) {
+ require Carp;
+ Carp::croak("Can't declare individual elements of hash or array");
+ } elsif (warnings::enabled() and length($sym) == 1 and $sym !~ tr/a-zA-Z//) {
+ warnings::warn("No need to declare built-in vars");
+ } elsif (($^H &= strict::bits('vars'))) {
+ require Carp;
+ Carp::croak("'$_' is not a valid variable name under strict vars");
+ }
+ }
+ $sym = "${callpack}::$sym" unless $sym =~ /::/;
+ *$sym =
+ ( $ch eq "\$" ? \$$sym
+ : $ch eq "\@" ? \@$sym
+ : $ch eq "\%" ? \%$sym
+ : $ch eq "\*" ? \*$sym
+ : $ch eq "\&" ? \&$sym
+ : do {
+ require Carp;
+ Carp::croak("'$_' is not a valid variable name");
+ });
+ } else {
+ require Carp;
+ Carp::croak("'$_' is not a valid variable name");
+ }
+ }
+};
+
+1;
+__END__
+
+=head1 NAME
+
+vars - Perl pragma to predeclare global variable names (obsolete)
+
+=head1 SYNOPSIS
+
+ use vars qw($frob @mung %seen);
+
+=head1 DESCRIPTION
+
+NOTE: For variables in the current package, the functionality provided
+by this pragma has been superseded by C<our> declarations, available
+in Perl v5.6.0 or later. See L<perlfunc/our>.
+
+This will predeclare all the variables whose names are
+in the list, allowing you to use them under "use strict", and
+disabling any typo warnings.
+
+Unlike pragmas that affect the C<$^H> hints variable, the C<use vars> and
+C<use subs> declarations are not BLOCK-scoped. They are thus effective
+for the entire file in which they appear. You may not rescind such
+declarations with C<no vars> or C<no subs>.
+
+Packages such as the B<AutoLoader> and B<SelfLoader> that delay
+loading of subroutines within packages can create problems with
+package lexicals defined using C<my()>. While the B<vars> pragma
+cannot duplicate the effect of package lexicals (total transparency
+outside of the package), it can act as an acceptable substitute by
+pre-declaring global symbols, ensuring their availability to the
+later-loaded routines.
+
+See L<perlmodlib/Pragmatic Modules>.
+
+=cut
diff --git a/Master/xemtex/perl/lib/warnings.pm b/Master/xemtex/perl/lib/warnings.pm
new file mode 100644
index 00000000000..8aa77482b20
--- /dev/null
+++ b/Master/xemtex/perl/lib/warnings.pm
@@ -0,0 +1,489 @@
+
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file was created by warnings.pl
+# Any changes made here will be lost.
+#
+
+package warnings;
+
+our $VERSION = '1.00';
+
+=head1 NAME
+
+warnings - Perl pragma to control optional warnings
+
+=head1 SYNOPSIS
+
+ use warnings;
+ no warnings;
+
+ use warnings "all";
+ no warnings "all";
+
+ use warnings::register;
+ if (warnings::enabled()) {
+ warnings::warn("some warning");
+ }
+
+ if (warnings::enabled("void")) {
+ warnings::warn("void", "some warning");
+ }
+
+ if (warnings::enabled($object)) {
+ warnings::warn($object, "some warning");
+ }
+
+ warnings::warnif("some warning");
+ warnings::warnif("void", "some warning");
+ warnings::warnif($object, "some warning");
+
+=head1 DESCRIPTION
+
+If no import list is supplied, all possible warnings are either enabled
+or disabled.
+
+A number of functions are provided to assist module authors.
+
+=over 4
+
+=item use warnings::register
+
+Creates a new warnings category with the same name as the package where
+the call to the pragma is used.
+
+=item warnings::enabled()
+
+Use the warnings category with the same name as the current package.
+
+Return TRUE if that warnings category is enabled in the calling module.
+Otherwise returns FALSE.
+
+=item warnings::enabled($category)
+
+Return TRUE if the warnings category, C<$category>, is enabled in the
+calling module.
+Otherwise returns FALSE.
+
+=item warnings::enabled($object)
+
+Use the name of the class for the object reference, C<$object>, as the
+warnings category.
+
+Return TRUE if that warnings category is enabled in the first scope
+where the object is used.
+Otherwise returns FALSE.
+
+=item warnings::warn($message)
+
+Print C<$message> to STDERR.
+
+Use the warnings category with the same name as the current package.
+
+If that warnings category has been set to "FATAL" in the calling module
+then die. Otherwise return.
+
+=item warnings::warn($category, $message)
+
+Print C<$message> to STDERR.
+
+If the warnings category, C<$category>, has been set to "FATAL" in the
+calling module then die. Otherwise return.
+
+=item warnings::warn($object, $message)
+
+Print C<$message> to STDERR.
+
+Use the name of the class for the object reference, C<$object>, as the
+warnings category.
+
+If that warnings category has been set to "FATAL" in the scope where C<$object>
+is first used then die. Otherwise return.
+
+
+=item warnings::warnif($message)
+
+Equivalent to:
+
+ if (warnings::enabled())
+ { warnings::warn($message) }
+
+=item warnings::warnif($category, $message)
+
+Equivalent to:
+
+ if (warnings::enabled($category))
+ { warnings::warn($category, $message) }
+
+=item warnings::warnif($object, $message)
+
+Equivalent to:
+
+ if (warnings::enabled($object))
+ { warnings::warn($object, $message) }
+
+=back
+
+See L<perlmodlib/Pragmatic Modules> and L<perllexwarn>.
+
+=cut
+
+use Carp ;
+
+%Offsets = (
+
+ # Warnings Categories added in Perl 5.008
+
+ 'all' => 0,
+ 'closure' => 2,
+ 'deprecated' => 4,
+ 'exiting' => 6,
+ 'glob' => 8,
+ 'io' => 10,
+ 'closed' => 12,
+ 'exec' => 14,
+ 'layer' => 16,
+ 'newline' => 18,
+ 'pipe' => 20,
+ 'unopened' => 22,
+ 'misc' => 24,
+ 'numeric' => 26,
+ 'once' => 28,
+ 'overflow' => 30,
+ 'pack' => 32,
+ 'portable' => 34,
+ 'recursion' => 36,
+ 'redefine' => 38,
+ 'regexp' => 40,
+ 'severe' => 42,
+ 'debugging' => 44,
+ 'inplace' => 46,
+ 'internal' => 48,
+ 'malloc' => 50,
+ 'signal' => 52,
+ 'substr' => 54,
+ 'syntax' => 56,
+ 'ambiguous' => 58,
+ 'bareword' => 60,
+ 'digit' => 62,
+ 'parenthesis' => 64,
+ 'precedence' => 66,
+ 'printf' => 68,
+ 'prototype' => 70,
+ 'qw' => 72,
+ 'reserved' => 74,
+ 'semicolon' => 76,
+ 'taint' => 78,
+ 'threads' => 80,
+ 'uninitialized' => 82,
+ 'unpack' => 84,
+ 'untie' => 86,
+ 'utf8' => 88,
+ 'void' => 90,
+ 'y2k' => 92,
+ );
+
+%Bits = (
+ 'all' => "\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x15", # [0..46]
+ 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00", # [29]
+ 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00", # [30]
+ 'closed' => "\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6]
+ 'closure' => "\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1]
+ 'debugging' => "\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00", # [22]
+ 'deprecated' => "\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2]
+ 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00", # [31]
+ 'exec' => "\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
+ 'exiting' => "\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
+ 'glob' => "\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4]
+ 'inplace' => "\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00", # [23]
+ 'internal' => "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00", # [24]
+ 'io' => "\x00\x54\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [5..11]
+ 'layer' => "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8]
+ 'malloc' => "\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00", # [25]
+ 'misc' => "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00", # [12]
+ 'newline' => "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9]
+ 'numeric' => "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00", # [13]
+ 'once' => "\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00", # [14]
+ 'overflow' => "\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00", # [15]
+ 'pack' => "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00", # [16]
+ 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00", # [32]
+ 'pipe' => "\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10]
+ 'portable' => "\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00", # [17]
+ 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00", # [33]
+ 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00", # [34]
+ 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00", # [35]
+ 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00", # [36]
+ 'recursion' => "\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00", # [18]
+ 'redefine' => "\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00", # [19]
+ 'regexp' => "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00", # [20]
+ 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00", # [37]
+ 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00", # [38]
+ 'severe' => "\x00\x00\x00\x00\x00\x54\x05\x00\x00\x00\x00\x00", # [21..25]
+ 'signal' => "\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00", # [26]
+ 'substr' => "\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00", # [27]
+ 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\x55\x55\x15\x00\x00", # [28..38]
+ 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00", # [39]
+ 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00", # [40]
+ 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00", # [41]
+ 'unopened' => "\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11]
+ 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00", # [42]
+ 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00", # [43]
+ 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", # [44]
+ 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04", # [45]
+ 'y2k' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10", # [46]
+ );
+
+%DeadBits = (
+ 'all' => "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x2a", # [0..46]
+ 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00", # [29]
+ 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00", # [30]
+ 'closed' => "\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6]
+ 'closure' => "\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1]
+ 'debugging' => "\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00", # [22]
+ 'deprecated' => "\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2]
+ 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00", # [31]
+ 'exec' => "\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
+ 'exiting' => "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
+ 'glob' => "\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4]
+ 'inplace' => "\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00", # [23]
+ 'internal' => "\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00", # [24]
+ 'io' => "\x00\xa8\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [5..11]
+ 'layer' => "\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8]
+ 'malloc' => "\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00", # [25]
+ 'misc' => "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00", # [12]
+ 'newline' => "\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9]
+ 'numeric' => "\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00", # [13]
+ 'once' => "\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00", # [14]
+ 'overflow' => "\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00", # [15]
+ 'pack' => "\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00", # [16]
+ 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00", # [32]
+ 'pipe' => "\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10]
+ 'portable' => "\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00", # [17]
+ 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00", # [33]
+ 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00", # [34]
+ 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00", # [35]
+ 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00", # [36]
+ 'recursion' => "\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00", # [18]
+ 'redefine' => "\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00", # [19]
+ 'regexp' => "\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00", # [20]
+ 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00", # [37]
+ 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00", # [38]
+ 'severe' => "\x00\x00\x00\x00\x00\xa8\x0a\x00\x00\x00\x00\x00", # [21..25]
+ 'signal' => "\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00", # [26]
+ 'substr' => "\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00", # [27]
+ 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\x2a\x00\x00", # [28..38]
+ 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00", # [39]
+ 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00", # [40]
+ 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00", # [41]
+ 'unopened' => "\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11]
+ 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00", # [42]
+ 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00", # [43]
+ 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", # [44]
+ 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08", # [45]
+ 'y2k' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20", # [46]
+ );
+
+$NONE = "\0\0\0\0\0\0\0\0\0\0\0\0";
+$LAST_BIT = 94 ;
+$BYTES = 12 ;
+
+$All = "" ; vec($All, $Offsets{'all'}, 2) = 3 ;
+
+sub Croaker
+{
+ delete $Carp::CarpInternal{'warnings'};
+ croak @_ ;
+}
+
+sub bits
+{
+ # called from B::Deparse.pm
+
+ push @_, 'all' unless @_;
+
+ my $mask;
+ my $catmask ;
+ my $fatal = 0 ;
+ my $no_fatal = 0 ;
+
+ foreach my $word ( @_ ) {
+ if ($word eq 'FATAL') {
+ $fatal = 1;
+ $no_fatal = 0;
+ }
+ elsif ($word eq 'NONFATAL') {
+ $fatal = 0;
+ $no_fatal = 1;
+ }
+ elsif ($catmask = $Bits{$word}) {
+ $mask |= $catmask ;
+ $mask |= $DeadBits{$word} if $fatal ;
+ $mask &= ~($DeadBits{$word}|$All) if $no_fatal ;
+ }
+ else
+ { Croaker("Unknown warnings category '$word'")}
+ }
+
+ return $mask ;
+}
+
+sub import
+{
+ shift;
+
+ my $catmask ;
+ my $fatal = 0 ;
+ my $no_fatal = 0 ;
+
+ my $mask = ${^WARNING_BITS} ;
+
+ if (vec($mask, $Offsets{'all'}, 1)) {
+ $mask |= $Bits{'all'} ;
+ $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
+ }
+
+ push @_, 'all' unless @_;
+
+ foreach my $word ( @_ ) {
+ if ($word eq 'FATAL') {
+ $fatal = 1;
+ $no_fatal = 0;
+ }
+ elsif ($word eq 'NONFATAL') {
+ $fatal = 0;
+ $no_fatal = 1;
+ }
+ elsif ($catmask = $Bits{$word}) {
+ $mask |= $catmask ;
+ $mask |= $DeadBits{$word} if $fatal ;
+ $mask &= ~($DeadBits{$word}|$All) if $no_fatal ;
+ }
+ else
+ { Croaker("Unknown warnings category '$word'")}
+ }
+
+ ${^WARNING_BITS} = $mask ;
+}
+
+sub unimport
+{
+ shift;
+
+ my $catmask ;
+ my $mask = ${^WARNING_BITS} ;
+
+ if (vec($mask, $Offsets{'all'}, 1)) {
+ $mask |= $Bits{'all'} ;
+ $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
+ }
+
+ push @_, 'all' unless @_;
+
+ foreach my $word ( @_ ) {
+ if ($word eq 'FATAL') {
+ next;
+ }
+ elsif ($catmask = $Bits{$word}) {
+ $mask &= ~($catmask | $DeadBits{$word} | $All);
+ }
+ else
+ { Croaker("Unknown warnings category '$word'")}
+ }
+
+ ${^WARNING_BITS} = $mask ;
+}
+
+sub __chk
+{
+ my $category ;
+ my $offset ;
+ my $isobj = 0 ;
+
+ if (@_) {
+ # check the category supplied.
+ $category = shift ;
+ if (ref $category) {
+ Croaker ("not an object")
+ if $category !~ /^([^=]+)=/ ;
+ $category = $1 ;
+ $isobj = 1 ;
+ }
+ $offset = $Offsets{$category};
+ Croaker("Unknown warnings category '$category'")
+ unless defined $offset;
+ }
+ else {
+ $category = (caller(1))[0] ;
+ $offset = $Offsets{$category};
+ Croaker("package '$category' not registered for warnings")
+ unless defined $offset ;
+ }
+
+ my $this_pkg = (caller(1))[0] ;
+ my $i = 2 ;
+ my $pkg ;
+
+ if ($isobj) {
+ while (do { { package DB; $pkg = (caller($i++))[0] } } ) {
+ last unless @DB::args && $DB::args[0] =~ /^$category=/ ;
+ }
+ $i -= 2 ;
+ }
+ else {
+ for ($i = 2 ; $pkg = (caller($i))[0] ; ++ $i) {
+ last if $pkg ne $this_pkg ;
+ }
+ $i = 2
+ if !$pkg || $pkg eq $this_pkg ;
+ }
+
+ my $callers_bitmask = (caller($i))[9] ;
+ return ($callers_bitmask, $offset, $i) ;
+}
+
+sub enabled
+{
+ Croaker("Usage: warnings::enabled([category])")
+ unless @_ == 1 || @_ == 0 ;
+
+ my ($callers_bitmask, $offset, $i) = __chk(@_) ;
+
+ return 0 unless defined $callers_bitmask ;
+ return vec($callers_bitmask, $offset, 1) ||
+ vec($callers_bitmask, $Offsets{'all'}, 1) ;
+}
+
+
+sub warn
+{
+ Croaker("Usage: warnings::warn([category,] 'message')")
+ unless @_ == 2 || @_ == 1 ;
+
+ my $message = pop ;
+ my ($callers_bitmask, $offset, $i) = __chk(@_) ;
+ croak($message)
+ if vec($callers_bitmask, $offset+1, 1) ||
+ vec($callers_bitmask, $Offsets{'all'}+1, 1) ;
+ carp($message) ;
+}
+
+sub warnif
+{
+ Croaker("Usage: warnings::warnif([category,] 'message')")
+ unless @_ == 2 || @_ == 1 ;
+
+ my $message = pop ;
+ my ($callers_bitmask, $offset, $i) = __chk(@_) ;
+
+ return
+ unless defined $callers_bitmask &&
+ (vec($callers_bitmask, $offset, 1) ||
+ vec($callers_bitmask, $Offsets{'all'}, 1)) ;
+
+ croak($message)
+ if vec($callers_bitmask, $offset+1, 1) ||
+ vec($callers_bitmask, $Offsets{'all'}+1, 1) ;
+
+ carp($message) ;
+}
+
+1;
diff --git a/Master/xemtex/perl/lib/warnings/register.pm b/Master/xemtex/perl/lib/warnings/register.pm
new file mode 100644
index 00000000000..c5dc1999a03
--- /dev/null
+++ b/Master/xemtex/perl/lib/warnings/register.pm
@@ -0,0 +1,51 @@
+package warnings::register ;
+
+our $VERSION = '1.00';
+
+=pod
+
+=head1 NAME
+
+warnings::register - warnings import function
+
+=head1 SYNOPSIS
+
+ use warnings::register ;
+
+=head1 DESCRIPTION
+
+Create a warnings category with the same name as the current package.
+
+See L<perlmodlib/Pragmatic Modules> and L<perllexwarn>.
+
+
+=cut
+
+require warnings ;
+
+sub mkMask
+{
+ my ($bit) = @_ ;
+ my $mask = "" ;
+
+ vec($mask, $bit, 1) = 1 ;
+ return $mask ;
+}
+
+sub import
+{
+ shift ;
+ my $package = (caller(0))[0] ;
+ if (! defined $warnings::Bits{$package}) {
+ $warnings::Bits{$package} = mkMask($warnings::LAST_BIT) ;
+ vec($warnings::Bits{'all'}, $warnings::LAST_BIT, 1) = 1 ;
+ $warnings::Offsets{$package} = $warnings::LAST_BIT ++ ;
+ foreach my $k (keys %warnings::Bits) {
+ vec($warnings::Bits{$k}, $warnings::LAST_BIT, 1) = 0 ;
+ }
+ $warnings::DeadBits{$package} = mkMask($warnings::LAST_BIT);
+ vec($warnings::DeadBits{'all'}, $warnings::LAST_BIT++, 1) = 1 ;
+ }
+}
+
+1 ;
diff --git a/Master/xemtex/perl/site/lib/Tk.pm b/Master/xemtex/perl/site/lib/Tk.pm
new file mode 100644
index 00000000000..db05463d66d
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk.pm
@@ -0,0 +1,696 @@
+#
+# Copyright (c) 1992-1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+# Copyright (c) 1995-1999 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+
+# modify it under the same terms as Perl itself, subject
+# to additional disclaimer in Tk/license.terms due to partial
+# derivation from Tk8.0 sources.
+#
+package Tk;
+require 5.00404;
+use Tk::Event ();
+use AutoLoader qw(AUTOLOAD);
+use DynaLoader;
+use base qw(Exporter DynaLoader);
+
+*fileevent = \&Tk::Event::IO::fileevent;
+
+BEGIN {
+ if($^O eq 'cygwin')
+ {
+ require Tk::Config;
+ $Tk::platform = $Tk::Config::win_arch;
+ $Tk::platform = 'unix' if $Tk::platform eq 'x';
+ }
+ else
+ {
+ $Tk::platform = ($^O eq 'MSWin32') ? $^O : 'unix';
+ }
+};
+
+$Tk::tearoff = 1 if ($Tk::platform eq 'unix');
+
+@EXPORT = qw(Exists Ev exit MainLoop DoOneEvent tkinit);
+@EXPORT_OK = qw(NoOp after *widget *event lsearch catch $XS_VERSION
+ DONT_WAIT WINDOW_EVENTS FILE_EVENTS TIMER_EVENTS
+ IDLE_EVENTS ALL_EVENTS
+ NORMAL_BG ACTIVE_BG SELECT_BG
+ SELECT_FG TROUGH INDICATOR DISABLED BLACK WHITE);
+%EXPORT_TAGS = (eventtypes => [qw(DONT_WAIT WINDOW_EVENTS FILE_EVENTS
+ TIMER_EVENTS IDLE_EVENTS ALL_EVENTS)],
+ variables => [qw(*widget *event)],
+ colors => [qw(NORMAL_BG ACTIVE_BG SELECT_BG SELECT_FG
+ TROUGH INDICATOR DISABLED BLACK WHITE)],
+ );
+
+use strict;
+
+use Carp;
+
+# $tk_version and $tk_patchLevel are reset by pTk when a mainwindow
+# is created, $VERSION is checked by bootstrap
+$Tk::version = '8.0';
+$Tk::patchLevel = '8.0';
+$Tk::VERSION = '800.024';
+$Tk::XS_VERSION = $Tk::VERSION;
+$Tk::strictMotif = 0;
+
+{($Tk::library) = __FILE__ =~ /^(.*)\.pm$/;}
+$Tk::library = Tk->findINC('.') unless (defined($Tk::library) && -d $Tk::library);
+
+$Tk::widget = undef;
+$Tk::event = undef;
+
+use vars qw($inMainLoop);
+
+bootstrap Tk;
+
+my $boot_time = timeofday();
+
+# This is a workround for Solaris X11 locale handling
+Preload(DynaLoader::dl_findfile('-L/usr/openwin/lib','-lX11'))
+ if (NeedPreload() && -d '/usr/openwin/lib');
+
+use Tk::Submethods ('option' => [qw(add get clear readfile)],
+ 'clipboard' => [qw(clear append)]
+ );
+
+sub _backTrace
+{
+ my $w = shift;
+ my $i = 1;
+ my ($pack,$file,$line,$sub) = caller($i++);
+ while (1)
+ {
+ my $loc = "at $file line $line";
+ ($pack,$file,$line,$sub) = caller($i++);
+ last unless defined($sub);
+ return 1 if $sub eq '(eval)';
+ $w->AddErrorInfo("$sub $loc");
+ }
+ return 0;
+}
+
+sub BackTrace
+{
+ my $w = shift;
+ return unless (@_ || $@);
+ my $mess = (@_) ? shift : "$@";
+ die "$mess\n" if $w->_backTrace;
+ # if we get here we are not in an eval so report now
+ $w->Fail($mess);
+ $w->idletasks;
+ die "$mess\n";
+}
+
+#
+# This is a $SIG{__DIE__} handler which does not change the $@
+# string in the way 'croak' does, but rather add to Tk's ErrorInfo.
+# It stops at 1st enclosing eval on assumption that the eval
+# is part of Tk call process and will add its own context to ErrorInfo
+# and then pass on the error.
+#
+sub __DIE__
+{
+ my $mess = shift;
+ my $w = $Tk::widget;
+ # Note that if a __DIE__ handler returns it re-dies up the chain.
+ return unless defined $w;
+ return if $w->_backTrace;
+ # Not in an eval - should not happen
+}
+
+sub XEvent::xy { shift->Info('xy') }
+
+sub XEvent::AUTOLOAD
+{
+ my ($meth) = $XEvent::AUTOLOAD =~ /(\w)$/;
+ no strict 'refs';
+ *{$XEvent::AUTOLOAD} = sub { shift->Info($meth) };
+ goto &$XEvent::AUTOLOAD;
+}
+
+sub NoOp { }
+
+sub Ev
+{
+ my @args = @_;
+ my $obj;
+ if (@args == 1)
+ {
+ my $arg = pop(@args);
+ $obj = (ref $arg) ? $arg : \$arg;
+ }
+ else
+ {
+ $obj = \@args;
+ }
+ return bless $obj,'Tk::Ev';
+}
+
+sub InitClass
+{
+ my ($package,$parent) = @_;
+ croak "Unexpected type of parent $parent" unless(ref $parent);
+ croak "$parent is not a widget" unless($parent->IsWidget);
+ my $mw = $parent->MainWindow;
+ my $hash = $mw->TkHash('_ClassInit_');
+ unless (exists $hash->{$package})
+ {
+ $package->Install($mw);
+ $hash->{$package} = $package->ClassInit($mw);
+ }
+}
+
+require Tk::Widget;
+require Tk::Image;
+require Tk::MainWindow;
+
+sub Exists
+{my $w = shift;
+ return defined($w) && ref($w) && $w->IsWidget && $w->exists;
+}
+
+sub Time_So_Far
+{
+ return timeofday() - $boot_time;
+}
+
+# Selection* are not autoloaded as names are too long.
+
+sub SelectionOwn
+{my $widget = shift;
+ selection('own',(@_,$widget));
+}
+
+sub SelectionOwner
+{
+ selection('own','-displayof',@_);
+}
+
+sub SelectionClear
+{
+ selection('clear','-displayof',@_);
+}
+
+sub SelectionExists
+{
+ selection('exists','-displayof',@_);
+}
+
+sub SelectionHandle
+{my $widget = shift;
+ my $command = pop;
+ selection('handle',@_,$widget,$command);
+}
+
+sub SplitString
+{
+ local $_ = shift;
+ my (@arr, $tmp);
+ while (/\{([^{}]*)\}|((?:[^\s\\]|\\.)+)/gs) {
+ if (defined $1) { push @arr, $1 }
+ else { $tmp = $2 ; $tmp =~ s/\\([\s\\])/$1/g; push @arr, $tmp }
+ }
+ # carp '('.join(',',@arr).")";
+ return @arr;
+}
+
+sub Methods
+{
+ my ($package) = caller;
+ no strict 'refs';
+ foreach my $meth (@_)
+ {
+ my $name = $meth;
+ *{$package."::$meth"} = sub { shift->WidgetMethod($name,@_) };
+ }
+}
+
+
+sub MessageBox {
+ my ($kind,%args) = @_;
+ require Tk::Dialog;
+ my $parent = delete $args{'-parent'};
+ my $args = \%args;
+
+ $args->{-bitmap} = delete $args->{-icon} if defined $args->{-icon};
+ $args->{-text} = delete $args->{-message} if defined $args->{-message};
+ $args->{-type} = 'OK' unless defined $args->{-type};
+
+ my $type;
+ if (defined($type = delete $args->{-type})) {
+ delete $args->{-type};
+ my @buttons = grep($_,map(ucfirst($_),
+ split(/(abort|retry|ignore|yes|no|cancel|ok)/,
+ lc($type))));
+ $args->{-buttons} = [@buttons];
+ $args->{-default_button} = delete $args->{-default} if
+ defined $args->{-default};
+ if (not defined $args->{-default_button} and scalar(@buttons) == 1) {
+ $args->{-default_button} = $buttons[0];
+ }
+ my $md = $parent->Dialog(%$args);
+ my $an = $md->Show;
+ $md->destroy;
+ return $an;
+ }
+} # end messageBox
+
+sub messageBox
+{
+ my ($widget,%args) = @_;
+ $args{'-type'} = (exists $args{'-type'}) ? lc($args{'-type'}) : 'ok';
+ tk_messageBox(-parent => $widget, %args);
+}
+
+sub getOpenFile
+{
+ tk_getOpenFile(-parent => shift,@_);
+}
+
+sub getSaveFile
+{
+ tk_getSaveFile(-parent => shift,@_);
+}
+
+sub chooseColor
+{
+ tk_chooseColor(-parent => shift,@_);
+}
+
+sub DialogWrapper
+{
+ my ($method,$kind,%args) = @_;
+ my $created = 0;
+ my $w = delete $args{'-parent'};
+ if (defined $w)
+ {
+ $args{'-popover'} = $w;
+ }
+ else
+ {
+ $w = MainWindow->new;
+ $w->withdraw;
+ $created = 1;
+ }
+ my $mw = $w->MainWindow;
+ my $fs = $mw->{$kind};
+ unless (defined $fs)
+ {
+ $mw->{$kind} = $fs = $mw->$method(%args);
+ }
+ else
+ {
+ $fs->configure(%args);
+ }
+ my $val = $fs->Show;
+ $w->destroy if $created;
+ return $val;
+}
+
+sub ColorDialog
+{
+ require Tk::ColorEditor;
+ DialogWrapper('ColorDialog',@_);
+}
+
+sub FDialog
+{
+ require Tk::FBox;
+ my $cmd = shift;
+ if ($cmd =~ /Save/)
+ {
+ push @_, -type => 'save';
+ }
+ DialogWrapper('FBox', $cmd, @_);
+}
+
+*MotifFDialog = \&FDialog;
+
+sub MainLoop
+{
+ unless ($inMainLoop)
+ {
+ local $inMainLoop = 1;
+ while (Tk::MainWindow->Count)
+ {
+ DoOneEvent(0);
+ }
+ }
+}
+
+sub tkinit { return MainWindow->new(@_) }
+
+# a wrapper on eval which turns off user $SIG{__DIE__}
+sub catch (&)
+{
+ my $sub = shift;
+ eval {local $SIG{'__DIE__'}; &$sub };
+}
+
+my $Home;
+
+sub TranslateFileName
+{
+ local $_ = shift;
+ unless (defined $Home)
+ {
+ $Home = $ENV{'HOME'} || ($ENV{'HOMEDRIVE'}.$ENV{'HOMEPATH'});
+ $Home =~ s#\\#/#g;
+ $Home .= '/' unless $Home =~ m#/$#;
+ }
+ s#~/#$Home#g;
+ # warn $_;
+ return $_;
+}
+
+sub findINC
+{
+ my $file = join('/',@_);
+ my $dir;
+ $file =~ s,::,/,g;
+ foreach $dir (@INC)
+ {
+ my $path;
+ return $path if (-e ($path = "$dir/$file"));
+ }
+ return undef;
+}
+
+sub idletasks
+{
+ shift->update('idletasks');
+}
+
+
+1;
+
+__END__
+
+sub Error
+{my $w = shift;
+ my $error = shift;
+ if (Exists($w))
+ {
+ my $grab = $w->grab('current');
+ $grab->Unbusy if (defined $grab);
+ }
+ chomp($error);
+ warn "Tk::Error: $error\n " . join("\n ",@_)."\n";
+}
+
+sub CancelRepeat
+{
+ my $w = shift->MainWindow;
+ my $id = delete $w->{_afterId_};
+ $w->after('cancel',$id) if (defined $id);
+}
+
+sub RepeatId
+{
+ my ($w,$id) = @_;
+ $w = $w->MainWindow;
+ $w->CancelRepeat;
+ $w->{_afterId_} = $id;
+}
+
+
+
+#----------------------------------------------------------------------------
+# focus.tcl --
+#
+# This file defines several procedures for managing the input
+# focus.
+#
+# @(#) focus.tcl 1.6 94/12/19 17:06:46
+#
+# Copyright (c) 1994 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+sub FocusChildren { shift->children }
+
+#
+# focusNext --
+# This procedure is invoked to move the input focus to the next window
+# after a given one. "Next" is defined in terms of the window
+# stacking order, with all the windows underneath a given top-level
+# (no matter how deeply nested in the hierarchy) considered except
+# for frames and toplevels.
+#
+# Arguments:
+# w - Name of a window: the procedure will set the focus
+# to the next window after this one in the traversal
+# order.
+sub focusNext
+{
+ my $w = shift;
+ my $cur = $w;
+ while (1)
+ {
+ # Descend to just before the first child of the current widget.
+ my $parent = $cur;
+ my @children = $cur->FocusChildren();
+ my $i = -1;
+ # Look for the next sibling that isn't a top-level.
+ while (1)
+ {
+ $i += 1;
+ if ($i < @children)
+ {
+ $cur = $children[$i];
+ next if ($cur->toplevel == $cur);
+ last
+ }
+ # No more siblings, so go to the current widget's parent.
+ # If it's a top-level, break out of the loop, otherwise
+ # look for its next sibling.
+ $cur = $parent;
+ last if ($cur->toplevel() == $cur);
+ $parent = $parent->parent();
+ @children = $parent->FocusChildren();
+ $i = lsearch(\@children,$cur);
+ }
+ if ($cur == $w || $cur->FocusOK)
+ {
+ $cur->tabFocus;
+ return;
+ }
+ }
+}
+# focusPrev --
+# This procedure is invoked to move the input focus to the previous
+# window before a given one. "Previous" is defined in terms of the
+# window stacking order, with all the windows underneath a given
+# top-level (no matter how deeply nested in the hierarchy) considered.
+#
+# Arguments:
+# w - Name of a window: the procedure will set the focus
+# to the previous window before this one in the traversal
+# order.
+sub focusPrev
+{
+ my $w = shift;
+ my $cur = $w;
+ my @children;
+ my $i;
+ my $parent;
+ while (1)
+ {
+ # Collect information about the current window's position
+ # among its siblings. Also, if the window is a top-level,
+ # then reposition to just after the last child of the window.
+ if ($cur->toplevel() == $cur)
+ {
+ $parent = $cur;
+ @children = $cur->FocusChildren();
+ $i = @children;
+ }
+ else
+ {
+ $parent = $cur->parent();
+ @children = $parent->FocusChildren();
+ $i = lsearch(\@children,$cur);
+ }
+ # Go to the previous sibling, then descend to its last descendant
+ # (highest in stacking order. While doing this, ignore top-levels
+ # and their descendants. When we run out of descendants, go up
+ # one level to the parent.
+ while ($i > 0)
+ {
+ $i--;
+ $cur = $children[$i];
+ next if ($cur->toplevel() == $cur);
+ $parent = $cur;
+ @children = $parent->FocusChildren();
+ $i = @children;
+ }
+ $cur = $parent;
+ if ($cur == $w || $cur->FocusOK)
+ {
+ $cur->tabFocus;
+ return;
+ }
+ }
+
+}
+
+sub FocusOK
+{
+ my $w = shift;
+ my $value;
+ catch { $value = $w->cget('-takefocus') };
+ if (!$@ && defined($value))
+ {
+ return 0 if ($value eq '0');
+ return $w->viewable if ($value eq '1');
+ $value = $w->$value();
+ return $value if (defined $value);
+ }
+ if (!$w->viewable)
+ {
+ return 0;
+ }
+ catch { $value = $w->cget('-state') } ;
+ if (!$@ && defined($value) && $value eq 'disabled')
+ {
+ return 0;
+ }
+ $value = grep(/Key|Focus/,$w->Tk::bind(),$w->Tk::bind(ref($w)));
+ return $value;
+}
+
+
+# focusFollowsMouse
+#
+# If this procedure is invoked, Tk will enter "focus-follows-mouse"
+# mode, where the focus is always on whatever window contains the
+# mouse. If this procedure isn't invoked, then the user typically
+# has to click on a window to give it the focus.
+#
+# Arguments:
+# None.
+
+sub EnterFocus
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ my $d = $Ev->d;
+ $w->Tk::focus() if ($d eq 'NotifyAncestor' || $d eq 'NotifyNonlinear' || $d eq 'NotifyInferior');
+}
+
+sub tabFocus
+{
+ shift->Tk::focus;
+}
+
+sub focusFollowsMouse
+{
+ my $widget = shift;
+ $widget->bind('all','<Enter>','EnterFocus');
+}
+
+# tkTraverseToMenu --
+# This procedure implements keyboard traversal of menus. Given an
+# ASCII character "char", it looks for a menubutton with that character
+# underlined. If one is found, it posts the menubutton's menu
+#
+# Arguments:
+# w - Window in which the key was typed (selects
+# a toplevel window).
+# char - Character that selects a menu. The case
+# is ignored. If an empty string, nothing
+# happens.
+sub TraverseToMenu
+{
+ my $w = shift;
+ my $char = shift;
+ return unless(defined $char && $char ne '');
+ $w = $w->toplevel->FindMenu($char);
+}
+# tkFirstMenu --
+# This procedure traverses to the first menubutton in the toplevel
+# for a given window, and posts that menubutton's menu.
+#
+# Arguments:
+# w - Name of a window. Selects which toplevel
+# to search for menubuttons.
+sub FirstMenu
+{
+ my $w = shift;
+ $w = $w->toplevel->FindMenu('');
+}
+
+# These wrappers don't use method syntax so need to live
+# in same package as raw Tk routines are newXS'ed into.
+
+sub Selection
+{my $widget = shift;
+ my $cmd = shift;
+ croak 'Use SelectionOwn/SelectionOwner' if ($cmd eq 'own');
+ croak "Use Selection\u$cmd()";
+}
+
+# If we have sub Clipboard in Tk then use base qw(Tk::Clipboard ....)
+# calls it when it does its eval "require $base"
+#sub Clipboard
+#{my $w = shift;
+# my $cmd = shift;
+# croak "Use clipboard\u$cmd()";
+#}
+
+sub Receive
+{
+ my $w = shift;
+ warn 'Receive(' . join(',',@_) .')';
+ die 'Tk rejects send(' . join(',',@_) .")\n";
+}
+
+sub break
+{
+ die "_TK_BREAK_\n";
+}
+
+sub updateWidgets
+{
+ my ($w) = @_;
+ while ($w->DoOneEvent(DONT_WAIT|IDLE_EVENTS|WINDOW_EVENTS))
+ {
+ }
+ $w;
+}
+
+sub ImageNames
+{
+ image('names');
+}
+
+sub ImageTypes
+{
+ image('types');
+}
+
+sub interps
+{
+ my $w = shift;
+ return $w->winfo('interps','-displayof');
+}
+
+sub lsearch
+{my $ar = shift;
+ my $x = shift;
+ my $i;
+ for ($i = 0; $i < scalar @$ar; $i++)
+ {
+ return $i if ($$ar[$i] eq $x);
+ }
+ return -1;
+}
+
+
+
+
diff --git a/Master/xemtex/perl/site/lib/Tk/Adjuster.pm b/Master/xemtex/perl/site/lib/Tk/Adjuster.pm
new file mode 100644
index 00000000000..0fd5b4f765a
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Adjuster.pm
@@ -0,0 +1,435 @@
+package Tk::Adjuster;
+
+use vars qw($VERSION);
+$VERSION = '3.025'; # $Id: //depot/Tk8/Tk/Adjuster.pm#25 $
+
+use base qw(Tk::Frame);
+
+# We cannot do this :
+
+# Construct Tk::Widget 'packAdjust';
+
+# because if managed object is Derived (e.g. a Scrolled) then our 'new'
+# will be delegated and hierachy gets turned inside-out
+# So packAdjust is autoloaded in Widget.pm
+
+
+Construct Tk::Widget qw(Adjuster);
+
+{package Tk::Adjuster::Item;
+
+use strict;
+use base qw(Tk::Frame);
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->bind($class,'<1>',['BDown', 1]);
+ $mw->bind($class,'<Shift-1>',['BDown', 0]);
+ $mw->bind($class,'<B1-Motion>',['Motion',1]);
+ $mw->bind($class,'<Shift-B1-Motion>',['Motion',0]);
+ $mw->bind($class,'<ButtonRelease-1>',['Motion',0]);
+ return $class;
+}
+
+sub BDown
+{
+ my($w, $delay_mask) = @_;
+ $w->{'start_x'} = $w->XEvent->x;
+ $w->{'start_y'} = $w->XEvent->y;
+ my $adj = $w->Parent;
+ delete $adj->{'lin_info'};
+ my $delay = $delay_mask && $adj->cget('-delay');
+ if ($delay)
+ {
+ $adj->vert ? $adj->delta_width_bar(0) : $adj->delta_height_bar(0);
+ }
+}
+
+sub Motion
+{
+ my($w, $delay_mask) = @_;
+ my $ev = $w->XEvent;
+ my $adj = $w->Parent;
+
+ my $delay = $delay_mask && $adj->cget('-delay');
+ if ($adj->vert)
+ {
+ my $dx = $ev->x - $w->{'start_x'};
+ $delay ? $adj->delta_width_bar($dx) : $adj->delta_width($dx);
+ }
+ else
+ {
+ my $dy = $ev->y - $w->{'start_y'};
+ $delay ? $adj->delta_height_bar($dy) : $adj->delta_height($dy);
+ }
+}
+
+}
+
+
+
+sub packAfter
+{
+ my ($w,$s,%args) = @_;
+ my $side = $args{'-side'} ? $args{'-side'} : 'top';
+ $w->configure(-side => $side, -widget => $s);
+ $w->packed($s, %args);
+}
+
+sub packForget
+{
+ my ($w,$forget_slave) = @_;
+ $w->Tk::Widget::packForget;
+ $w->slave->packForget if $forget_slave;
+}
+
+# Called by Tk::Widget::packAdjust. It was here before packAfter was added
+sub packed
+{
+ my ($w,$s,%args) = @_;
+ delete $args{'-before'};
+ $args{'-expand'} = 0;
+ $args{'-after'} = $s;
+ $args{'-fill'} = (($w->vert) ? 'y' : 'x');
+ $w->pack(%args);
+}
+
+sub gridded
+{
+ my ($w,$s,%args) = @_;
+ # delete $args{'-before'};
+ # $args{'-expand'} = 0;
+ # $args{'-after'} = $s;
+ # $args{'-fill'} = (($w->vert) ? 'y' : 'x');
+ $w->grid(%args);
+}
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->bind($class,'<Configure>','SizeChange');
+ $mw->bind($class,'<Unmap>','Restore');
+ $mw->bind($class,'<Map>','Mapped');
+ return $class;
+}
+
+sub SizeChange
+{
+ my $w = shift;
+ # reqwidth/height of Adjuster is stored here. If it is partially pushed out
+ # of the window, then $w->width/height returns that of the visible part.
+ if ($w->vert)
+ {
+ my $sx = ($w->Width - $w->{'sep'}->Width)/2;
+ $w->{'but'}->place('-x' => 0, '-y' => $w->Height-18);
+ $w->{'sep'}->place('-x' => $sx, '-y' => 0, -relheight => 1);
+ $w->configure(-width => $w->{'but'}->ReqWidth);
+ $w->{'reqwidth'} = $w->reqwidth;
+ }
+ else
+ {
+ my $sy = ($w->Height - $w->{'sep'}->Height)/2;
+ $w->{'but'}->place('-x' => $w->Width-18, '-y' => 0);
+ $w->{'sep'}->place('-x' => 0, '-y' => $sy, -relwidth => 1);
+ $w->configure(-height => $w->{'but'}->ReqHeight);
+ $w->{'reqheight'} = $w->reqheight;
+ }
+ # Turn off geometry propagation in the slave. Do only if necessary, as this
+ # causes repacking.
+ my $s = $w->slave;
+ $s->packPropagate('0') if $s->packSlaves && $s->packPropagate();
+ $s->gridPropagate('0') if $s->gridSlaves && $s->gridPropagate();
+}
+
+sub Mapped
+{
+ my $w = shift;
+ $w->idletasks;
+ my $m = $w->manager;
+ if ($m =~ /^(?:pack|grid)$/)
+ {
+ my %info = $w->$m('info');
+ my $master = $info{'-in'};
+ $master->$m('propagate',0);
+ $w->{'master'} = $master;
+ }
+ $w->slave_expand_off;
+}
+
+sub Populate
+{
+ my ($w,$args) = @_;
+ $w->SUPER::Populate($args);
+ $w->{'sep'} = Tk::Adjuster::Item->new($w,-bd => 1, -relief => 'sunken');
+ $w->{'but'} = Tk::Adjuster::Item->new($w,-bd => 1, -width => 8, -height => 8, -relief => 'raised');
+
+ # Need to explicitly set frame width to 0 for Win32
+ my $l = $w->{'lin'} = $w->toplevel->Frame(-bd => 0);
+
+ my $cs = $w->ConfigSpecs(-widget => ['PASSIVE','widget','Widget',$w->Parent],
+ -side => ['METHOD','side','Side','top'],
+ -delay => ['PASSIVE','delay','Delay', 1],
+ -background => [['SELF',$w->{'sep'},$w->{'but'}],'background','Background',undef],
+ -foreground => [Tk::Configure->new($w->{'lin'},'-background'),'foreground','Foreground','black'],
+ -restore => ['PASSIVE','restore', 'Restore', 1],
+ );
+ $w->_OnDestroy(qw(sep but lin master));
+}
+
+sub side
+{
+ my ($w,$val) = @_;
+ if (@_ > 1)
+ {
+ $w->{'side'} = $val;
+ my $cursor;
+ if ($w->vert)
+ {
+ $cursor = 'sb_h_double_arrow';
+ $w->{'sep'}->configure(-width => 2, -height => 10000);
+ }
+ else
+ {
+ $cursor = 'sb_v_double_arrow';
+ $w->{'sep'}->configure(-height => 2, -width => 10000);
+ }
+ my $x;
+ foreach $x ($w->{'sep'},$w->{'but'})
+ {
+ $x->configure(-cursor => $cursor);
+ }
+ }
+ return $w->{'side'};
+}
+
+sub slave
+{
+ my $w = shift;
+ my $s = $w->cget('-widget');
+ return $s;
+}
+
+sub vert
+{
+ my $w = shift;
+ my $side = $w->cget('-side');
+ return 1 if $side eq 'left';
+ return -1 if $side eq 'right';
+ return 0;
+}
+
+# If the Adjuster gets unmapped, it attempts to restore itself. If its
+# slave is mapped, then it reduces the size of the slave so that there is
+# then room in the master for the Adjuster widget.
+sub Restore
+{
+ my $w = shift;
+ return if ! $w->toplevel->IsMapped ||
+ ! $w->slave->IsMapped ||
+ ! $w->cget('-restore');
+ $w->vert ? $w->delta_width(0) : $w->delta_height(0);
+}
+
+sub delta_width_bar
+{
+ my ($w,$dx) = @_;
+ my $l = $w->{'lin'};
+ my $r = $w->{'sep'};
+ my $t = $w->toplevel;
+ my $m = $w->{'master'};
+ my $s = $w->slave;
+ my ($min_rootx, $max_rootx, $t_border);
+ if (! $w->{'lin_info'})
+ {
+ my $m_border = $m->cget('-bd') + $m->cget('-highlightthickness');
+ $t_border = $t->cget('-bd') + $t->cget('-highlightthickness');
+ if ($w->cget('-side') eq 'right')
+ {
+ $min_rootx = $m->rootx + $m_border;
+ $max_rootx = $s->rootx + $s->width - 1;
+ }
+ else
+ {
+ $min_rootx = $s->rootx;
+ $max_rootx = $m->rootx + $m->width - $m_border - 1;
+ }
+ $w->{'lin_info'} = [$min_rootx, $max_rootx, $t_border];
+ }
+ else
+ {
+ ($min_rootx, $max_rootx, $t_border) = @{$w->{'lin_info'}};
+ }
+ $l->configure(-width => 1, -height => $w->height) unless $l->IsMapped;
+
+ my $new_rootx = $w->rootx + $w->{'reqwidth'}/2 + $dx;
+ $new_rootx = $min_rootx if $new_rootx < $min_rootx;
+ $new_rootx = $max_rootx if $new_rootx > $max_rootx;
+ my $placex = $new_rootx - $t->rootx - $t_border;
+ my $placey = $w->rooty - $t->rooty - $t_border;
+ $l->place(-in => $t, -anchor => 'n', '-x' => $placex, '-y' => $placey);
+ my $this = $w->containing($new_rootx, $w->rooty + 1);
+ $l->raise($this) if $this && $this ne $t;
+}
+
+sub delta_width
+{
+ my ($w,$dx) = @_;
+ my $l = $w->{'lin'};
+ $l->placeForget;
+ my $s = $w->slave;
+ if ($s)
+ {
+ my $m = $w->{'master'};
+ my $m_border = $m->cget('-bd') + $m->cget('-highlightthickness');
+ my $w_width = $w->{'reqwidth'};
+ my $m_width = $m->width;
+ my $s_width = $s->width;
+ my $max_width = $m_width - $w_width;
+ my $max_s_width;
+ if ($w->cget('-side') eq 'right')
+ {
+ $dx = -$dx;
+ $max_s_width = $max_width -
+ ($m->rootx + $m_width - ($s->rootx+$s_width)) - $m_border;
+ }
+ else
+ {
+ $max_s_width = $max_width - ($s->rootx - $m->rootx) - $m_border;
+ }
+ my $new_width = $s_width+$dx;
+ $new_width = $max_s_width if $new_width > $max_s_width;
+ $new_width = 0 if $new_width < 0;
+ $s->GeometryRequest($new_width, $s->height);
+ }
+}
+
+sub delta_height_bar
+{
+ my ($w,$dy) = @_;
+ my $l = $w->{'lin'};
+ my $r = $w->{'sep'};
+ my $t = $w->toplevel;
+ my $m = $w->{'master'};
+ my $s = $w->slave;
+ my ($min_rooty, $max_rooty, $t_border);
+ if (! $w->{'lin_info'})
+ {
+ my $m_border = $m->cget('-bd') + $m->cget('-highlightthickness');
+ $t_border = $t->cget('-bd') + $t->cget('-highlightthickness');
+ if ($w->cget('-side') eq 'bottom')
+ {
+ $min_rooty = $m->rooty + $m_border;
+ $max_rooty = $s->rooty + $s->height - 1;
+ }
+ else
+ {
+ $min_rooty = $s->rooty;
+ $max_rooty = $m->rooty + $m->height - $m_border - 1;
+ }
+ $w->{'lin_info'} = [$min_rooty, $max_rooty, $t_border];
+ }
+ else
+ {
+ ($min_rooty, $max_rooty, $t_border) = @{$w->{'lin_info'}};
+ }
+ $l->configure(-height => 1, -width => $w->width) unless $l->IsMapped;
+
+ my $new_rooty = $w->rooty + $w->{'reqheight'}/2 + $dy;
+ $new_rooty = $min_rooty if $new_rooty < $min_rooty;
+ $new_rooty = $max_rooty if $new_rooty > $max_rooty;
+ my $placey = $new_rooty - $t->rooty - $t_border;
+ my $placex = $w->rootx - $t->rootx - $t_border;
+ $l->place(-in => $t, -anchor => 'w', '-x' => $placex, '-y' => $placey);
+ my $this = $w->containing($w->rootx + 1, $new_rooty);
+ $l->raise($this) if $this && $this ne $t;
+}
+
+sub delta_height
+{
+ my ($w,$dy) = @_;
+ my $l = $w->{'lin'};
+ $l->placeForget;
+ my $s = $w->slave;
+ if ($s)
+ {
+ my $m = $w->{'master'};
+ my $m_border = $m->cget('-bd') + $m->cget('-highlightthickness');
+ my $w_height = $w->{'reqheight'};
+ my $m_height = $m->height;
+ my $s_height = $s->height;
+ my $max_height = $m_height - $w_height;
+ my $max_s_height;
+ if ($w->cget('-side') eq 'bottom')
+ {
+ $dy = -$dy;
+ $max_s_height = $max_height -
+ ($m->rooty + $m_height - ($s->rooty+$s_height)) - $m_border;
+ }
+ else
+ {
+ $max_s_height = $max_height - ($s->rooty - $m->rooty) - $m_border;
+ }
+ my $new_height = $s_height+$dy;
+
+ $new_height = $max_s_height if $new_height > $max_s_height;
+ $new_height = 0 if $new_height < 0;
+ $s->GeometryRequest($s->width, $new_height);
+ }
+}
+
+# Turn off expansion in the slave.
+# This is done only if necessary, as calls to pack/gridConfigure cause
+# repacking.
+# Before call to pack/gridConfigure, the reqwidth/reqheight is set to the
+# current width/height. This is because the geometry managers use
+# the requested values, not the actual, to calculate the new geometry.
+sub slave_expand_off
+{
+ my $w = shift;
+ my $s = $w->slave;
+ return if ! $s;
+
+ my $manager = $s->manager;
+ if ($manager eq 'pack')
+ {
+ my %info = $s->packInfo;
+ my $expand = $info{'-expand'};
+ if ($expand)
+ {
+ $s->GeometryRequest($s->width, $s->height);
+ $s->packConfigure(-expand => 0);
+ }
+ }
+ elsif ($manager eq 'grid')
+ {
+ my %info = $s->gridInfo;
+ my $master = $info{'-in'};
+ if ($w->vert)
+ {
+ my $col = $info{'-column'};
+ my $expand = $master->gridColumnconfigure($col, '-weight');
+ if ($expand)
+ {
+ $s->GeometryRequest($s->width, $s->height);
+ $master->gridColumnconfigure($col, -weight => 0);
+ }
+ }
+ else
+ {
+ my $row = $info{'-row'};
+ my $expand = $master->gridRowconfigure($row, '-weight');
+ if ($expand)
+ {
+ $s->GeometryRequest($s->width, $s->height);
+ $master->gridRowconfigure($row, -weight => 0);
+ }
+ }
+ }
+}
+
+1;
+
+__END__
+
+=cut #' emacs hilighting...
diff --git a/Master/xemtex/perl/site/lib/Tk/After.pm b/Master/xemtex/perl/site/lib/Tk/After.pm
new file mode 100644
index 00000000000..e5eac8b20a8
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/After.pm
@@ -0,0 +1,88 @@
+# Copyright (c) 1995-1999 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::After;
+use Carp;
+
+use vars qw($VERSION);
+$VERSION = '3.015'; # $Id: //depot/Tk8/Tk/After.pm#15 $
+
+sub _cancelAll
+{
+ my $w = shift;
+ my $h = delete $w->{_After_};
+ foreach my $obj (values %$h)
+ {
+ # carp "Auto cancel ".$obj->[1]." for ".$obj->[0]->PathName;
+ $obj->cancel;
+ }
+}
+
+sub submit
+{
+ my $obj = shift;
+ my $w = $obj->[0];
+ my $id = $obj->[1];
+ my $t = $obj->[2];
+ my $method = $obj->[3];
+ delete($w->{_After_}{$id}) if (defined $id);
+ $id = $w->Tk::after($t,[$method => $obj]);
+ unless (exists $w->{_After_})
+ {
+ $w->{_After_} = {};
+ $w->OnDestroy([\&_cancelAll, $w]);
+ }
+ $w->{_After_}{$id} = $obj;
+ $obj->[1] = $id;
+ return $obj;
+}
+
+sub DESTROY
+{
+ my $obj = shift;
+ @{$obj} = ();
+}
+
+sub new
+{
+ my ($class,$w,$t,$method,@cb) = @_;
+ my $cb = (@cb == 1) ? shift(@cb) : [@cb];
+ my $obj = bless [$w,undef,$t,$method,Tk::Callback->new($cb)],$class;
+ return $obj->submit;
+}
+
+sub cancel
+{
+ my $obj = shift;
+ my $id = $obj->[1];
+ my $w = $obj->[0];
+ if ($id)
+ {
+ $w->Tk::after('cancel'=> $id);
+ delete $w->{_After_}{$id} if exists $w->{_After_};
+ $obj->[1] = undef;
+ }
+ return $obj;
+}
+
+sub repeat
+{
+ my $obj = shift;
+ $obj->submit;
+ local $Tk::widget = $obj->[0];
+ $obj->[4]->Call;
+}
+
+sub once
+{
+ my $obj = shift;
+ my $w = $obj->[0];
+ my $id = $obj->[1];
+ delete $w->{_After_}{$id};
+ local $Tk::widget = $w;
+ $obj->[4]->Call;
+}
+
+1;
+__END__
+
diff --git a/Master/xemtex/perl/site/lib/Tk/Bitmap.pm b/Master/xemtex/perl/site/lib/Tk/Bitmap.pm
new file mode 100644
index 00000000000..da563ffa6cb
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Bitmap.pm
@@ -0,0 +1,18 @@
+package Tk::Bitmap;
+require Tk;
+import Tk qw($XS_VERSION);
+require Tk::Image;
+
+use vars qw($VERSION);
+$VERSION = '3.010'; # $Id: //depot/Tk8/Bitmap/Bitmap.pm#10 $
+
+use base qw(Tk::Image);
+
+Construct Tk::Image 'Bitmap';
+
+bootstrap Tk::Bitmap;
+
+sub Tk_image { 'bitmap' }
+
+1;
+__END__
diff --git a/Master/xemtex/perl/site/lib/Tk/Button.pm b/Master/xemtex/perl/site/lib/Tk/Button.pm
new file mode 100644
index 00000000000..b0983ead7c3
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Button.pm
@@ -0,0 +1,148 @@
+package Tk::Button;
+# Conversion from Tk4.0 button.tcl competed.
+#
+# Copyright (c) 1992-1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+# Copyright (c) 1995-1999 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+
+use vars qw($VERSION);
+$VERSION = '3.014'; # $Id: //depot/Tk8/Tk/Button.pm#14 $
+
+# modify it under the same terms as Perl itself, subject
+# to additional disclaimer in license.terms due to partial
+# derivation from Tk4.0 sources.
+
+use strict;
+
+require Tk::Widget;
+use base qw(Tk::Widget);
+
+use vars qw($buttonWindow $relief);
+
+Tk::Methods('deselect','flash','invoke','select','toggle');
+
+sub Tk_cmd { \&Tk::button }
+
+Construct Tk::Widget 'Button';
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->bind($class,'<Enter>', 'Enter');
+ $mw->bind($class,'<Leave>', 'Leave');
+ $mw->bind($class,'<1>', 'butDown');
+ $mw->bind($class,'<ButtonRelease-1>', 'butUp');
+ $mw->bind($class,'<space>', 'Invoke');
+ $mw->bind($class,'<Return>', 'Invoke');
+ return $class;
+}
+
+# tkButtonEnter --
+# The procedure below is invoked when the mouse pointer enters a
+# button widget. It records the button we're in and changes the
+# state of the button to active unless the button is disabled.
+#
+# Arguments:
+# w - The name of the widget.
+
+sub Enter
+{
+ my $w = shift;
+ my $E = shift;
+ if ($w->cget('-state') ne 'disabled')
+ {
+ $w->configure('-state' => 'active');
+ $w->configure('-state' => 'active', '-relief' => 'sunken') if (defined($buttonWindow) && $w == $buttonWindow)
+ }
+ $Tk::window = $w;
+}
+
+# tkButtonLeave --
+# The procedure below is invoked when the mouse pointer leaves a
+# button widget. It changes the state of the button back to
+# inactive. If we're leaving the button window with a mouse button
+# pressed (tkPriv(buttonWindow) == $w), restore the relief of the
+# button too.
+#
+# Arguments:
+# w - The name of the widget.
+sub Leave
+{
+ my $w = shift;
+ $w->configure('-state'=>'normal') if ($w->cget('-state') ne 'disabled');
+ $w->configure('-relief' => $relief) if (defined($buttonWindow) && $w == $buttonWindow);
+ undef $Tk::window;
+}
+
+# tkButtonDown --
+# The procedure below is invoked when the mouse button is pressed in
+# a button widget. It records the fact that the mouse is in the button,
+# saves the button's relief so it can be restored later, and changes
+# the relief to sunken.
+#
+# Arguments:
+# w - The name of the widget.
+sub butDown
+{
+ my $w = shift;
+ $relief = $w->cget('-relief');
+ if ($w->cget('-state') ne 'disabled')
+ {
+ $buttonWindow = $w;
+ $w->configure('-relief' => 'sunken')
+ }
+}
+
+# tkButtonUp --
+# The procedure below is invoked when the mouse button is released
+# in a button widget. It restores the button's relief and invokes
+# the command as long as the mouse hasn't left the button.
+#
+# Arguments:
+# w - The name of the widget.
+sub butUp
+{
+ my $w = shift;
+ if (defined($buttonWindow) && $buttonWindow == $w)
+ {
+ undef $buttonWindow;
+ $w->configure('-relief' => $relief);
+ if ($w->IS($Tk::window) && $w->cget('-state') ne 'disabled')
+ {
+ $w->invoke;
+ }
+ }
+}
+
+# tkButtonInvoke --
+# The procedure below is called when a button is invoked through
+# the keyboard. It simulate a press of the button via the mouse.
+#
+# Arguments:
+# w - The name of the widget.
+sub Invoke
+{
+ my $w = shift;
+ if ($w->cget('-state') ne 'disabled')
+ {
+ my $oldRelief = $w->cget('-relief');
+ my $oldState = $w->cget('-state');
+ $w->configure('-state' => 'active', '-relief' => 'sunken');
+ $w->idletasks;
+ $w->after(100);
+ $w->configure('-state' => $oldState, '-relief' => $oldRelief);
+ $w->invoke;
+ }
+}
+
+
+
+1;
+
+__END__
+
+
+
+
+
diff --git a/Master/xemtex/perl/site/lib/Tk/Camel.xpm b/Master/xemtex/perl/site/lib/Tk/Camel.xpm
new file mode 100644
index 00000000000..ba33c0149ec
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Camel.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *Camel[] = {
+/* width height num_colors chars_per_pixel */
+" 32 32 2 1",
+/* colors */
+". c #ffffff",
+"# c #7f7f00",
+/* pixels */
+"................................",
+"................................",
+"...................###..........",
+".......####......######.........",
+"....####.##.....########........",
+"....########....#########.......",
+"......######..###########.......",
+"......#####..#############......",
+".....######.##############......",
+".....######.###############.....",
+".....######################.....",
+".....#######################....",
+".....#######################....",
+"......#######################...",
+".......####################.#...",
+"........###################.#...",
+"........###############.###.#...",
+"............#######.###.###.#...",
+"............###.###.##...##.....",
+"............###.###..#...##.....",
+"............##.####..#....#.....",
+"............##.###...#....#.....",
+"............##.##...#.....#.....",
+"............#...#...#.....#.....",
+"............#....#..#.....#.....",
+"............#.....#.#.....#.....",
+"............#.....###.....#.....",
+"...........##....##.#....#......",
+"...........#..............#.....",
+".........###.............#......"
+"................................",
+"................................",
+};
diff --git a/Master/xemtex/perl/site/lib/Tk/Canvas.pm b/Master/xemtex/perl/site/lib/Tk/Canvas.pm
new file mode 100644
index 00000000000..e1ce78b6a93
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Canvas.pm
@@ -0,0 +1,60 @@
+package Tk::Canvas;
+use vars qw($VERSION);
+$VERSION = '3.018'; # $Id: //depot/Tk8/Canvas/Canvas.pm#18 $
+
+use Tk qw($XS_VERSION);
+
+use base qw(Tk::Widget);
+Construct Tk::Widget 'Canvas';
+
+bootstrap Tk::Canvas;
+
+sub Tk_cmd { \&Tk::canvas }
+
+Tk::Methods('addtag','bbox','bind','canvasx','canvasy','coords','create',
+ 'dchars','delete','dtag','find','focus','gettags','icursor',
+ 'index','insert','itemcget','itemconfigure','lower','move',
+ 'postscript','raise','scale','scan','select','type','xview','yview');
+
+use Tk::Submethods ( 'create' => [qw(arc bitmap grid group image line oval
+ polygon rectangle text window)],
+ 'scan' => [qw(mark dragto)],
+ 'select' => [qw(from clear item to)],
+ 'xview' => [qw(moveto scroll)],
+ 'yview' => [qw(moveto scroll)],
+ );
+
+*CanvasBind = \&Tk::bind;
+*CanvasFocus = \&Tk::focus;
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->XYscrollBind($class);
+ return $class;
+}
+
+sub BalloonInfo
+{
+ my ($canvas,$balloon,$X,$Y,@opt) = @_;
+ my @tags = ($canvas->find('withtag', 'current'),$canvas->gettags('current'));
+ foreach my $opt (@opt)
+ {
+ my $info = $balloon->GetOption($opt,$canvas);
+ if ($opt =~ /^-(statusmsg|balloonmsg)$/ && UNIVERSAL::isa($info,'HASH'))
+ {
+ $balloon->Subclient($tags[0]);
+ foreach my $tag (@tags)
+ {
+ return $info->{$tag} if exists $info->{$tag};
+ }
+ return '';
+ }
+ return $info;
+ }
+}
+
+
+
+1;
+
diff --git a/Master/xemtex/perl/site/lib/Tk/Checkbutton.pm b/Master/xemtex/perl/site/lib/Tk/Checkbutton.pm
new file mode 100644
index 00000000000..e5c43f15f24
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Checkbutton.pm
@@ -0,0 +1,42 @@
+package Tk::Checkbutton;
+# Conversion from Tk4.0 button.tcl competed.
+# Copyright (c) 1992-1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+# Copyright (c) 1995-1999 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+
+
+use vars qw($VERSION);
+$VERSION = '3.011'; # $Id: //depot/Tk8/Tk/Checkbutton.pm#11 $
+
+# modify it under the same terms as Perl itself, subject
+# to additional disclaimer in license.terms due to partial
+# derivation from Tk4.0 sources.
+
+require Tk::Widget;
+require Tk::Button;
+
+use base qw(Tk::Button);
+
+Construct Tk::Widget 'Checkbutton';
+
+sub Tk_cmd { \&Tk::checkbutton }
+
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->bind($class,'<Enter>', 'Enter');
+ $mw->bind($class,'<Leave>', 'Leave');
+ $mw->bind($class,'<1>', 'Invoke');
+ $mw->bind($class,'<space>', 'Invoke');
+ return $class;
+}
+
+sub Invoke
+{
+ my $w = shift;
+ $w->invoke() unless($w->cget('-state') eq 'disabled');
+}
+
+1;
diff --git a/Master/xemtex/perl/site/lib/Tk/Clipboard.pm b/Master/xemtex/perl/site/lib/Tk/Clipboard.pm
new file mode 100644
index 00000000000..6990b371f58
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Clipboard.pm
@@ -0,0 +1,110 @@
+# Copyright (c) 1995-1999 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Clipboard;
+use strict;
+
+use vars qw($VERSION);
+$VERSION = '3.016'; # $Id: //depot/Tk8/Tk/Clipboard.pm#16 $
+
+use AutoLoader qw(AUTOLOAD);
+use Tk qw(catch);
+
+sub clipEvents
+{
+ return qw[Copy Cut Paste];
+}
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ foreach my $op ($class->clipEvents)
+ {
+ $mw->Tk::bind($class,"<<$op>>","clipboard$op");
+ }
+ return $class;
+}
+
+sub clipboardSet
+{
+ my $w = shift;
+ $w->clipboardClear;
+ $w->clipboardAppend(@_);
+}
+
+sub clipboardCopy
+{
+ my $w = shift;
+ my $val = $w->getSelected;
+ if (defined $val)
+ {
+ $w->clipboardSet('--',$val);
+ }
+ return $val;
+}
+
+sub clipboardCut
+{
+ my $w = shift;
+ my $val = $w->clipboardCopy;
+ if (defined $val)
+ {
+ $w->deleteSelected;
+ }
+ return $val;
+}
+
+sub clipboardGet
+{
+ my $w = shift;
+ $w->SelectionGet('-selection','CLIPBOARD',@_);
+}
+
+sub clipboardPaste
+{
+ my $w = shift;
+ local $@;
+ catch { $w->insert('insert',$w->clipboardGet)};
+}
+
+sub clipboardOperations
+{
+ my @class = ();
+ my $mw = shift;
+ if (ref $mw)
+ {
+ $mw = $mw->DelegateFor('bind');
+ }
+ else
+ {
+ push(@class,$mw);
+ $mw = shift;
+ }
+ while (@_)
+ {
+ my $op = shift;
+ $mw->Tk::bind(@class,"<<$op>>","clipboard$op");
+ }
+}
+
+# These methods work for Entry and Text
+# and can be overridden where they don't work
+
+sub deleteSelected
+{
+ my $w = shift;
+ catch { $w->delete('sel.first','sel.last') };
+}
+
+
+1;
+__END__
+
+sub getSelected
+{
+ my $w = shift;
+ my $val = Tk::catch { $w->get('sel.first','sel.last') };
+ return $val;
+}
+
+
diff --git a/Master/xemtex/perl/site/lib/Tk/CmdLine.pm b/Master/xemtex/perl/site/lib/Tk/CmdLine.pm
new file mode 100644
index 00000000000..09d4da9c41d
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/CmdLine.pm
@@ -0,0 +1,954 @@
+package Tk::CmdLine; # -*-Perl-*-
+
+#/----------------------------------------------------------------------------//
+#/ Module: Tk/CmdLine.pm
+#/
+#/ Purpose:
+#/
+#/ Process standard X11 command line options and set initial resources.
+#/
+#/ Author: ???? Date: ????
+#/
+#/ History: SEE POD
+#/----------------------------------------------------------------------------//
+
+use vars qw($VERSION);
+$VERSION = '3.030'; # $Id: //depot/Tk8/Tk/CmdLine.pm#30 $
+
+use 5.004;
+
+use strict;
+
+use Config;
+
+my $OBJECT = undef; # define the current object
+
+#/----------------------------------------------------------------------------//
+#/ Constructor
+#/ Returns the object reference.
+#/----------------------------------------------------------------------------//
+
+sub new # Tk::CmdLine::new()
+{
+ my $this = shift(@_);
+ my $class = ref($this) || $this;
+
+ my $name = 'pTk';
+ $name = $1 if (($0 =~ m/(?:^|[\/\\])([\w-]+)(?:\.\w+)?$/) && ($1 ne '-e'));
+
+ my $self = {
+ name => $name,
+ config => { -name => $name },
+ options => {},
+ methods => {},
+ command => [],
+ synchronous => 0,
+ iconic => 0,
+ motif => ($Tk::strictMotif || 0),
+ resources => {} };
+
+ return bless($self, $class);
+}
+
+#/----------------------------------------------------------------------------//
+#/ Process the arguments in a given array or in @ARGV.
+#/ Returns the object reference.
+#/----------------------------------------------------------------------------//
+
+sub Argument_ # Tk::CmdLine::Argument_($flag) # private method
+{
+ my $self = shift(@_);
+ my $flag = shift(@_);
+ unless ($self->{offset} < @{$self->{argv}})
+ {
+ die 'Usage: ', $self->{name}, ' ... ', $flag, " <argument> ...\n";
+ }
+ return splice(@{$self->{argv}}, $self->{offset}, 1);
+}
+
+sub Config_ # Tk::CmdLine::Config_($flag, $name) # private method
+{
+ my $self = shift(@_);
+ my ($flag, $name) = @_;
+ my $val = $self->Argument_($flag);
+ push(@{$self->{command}}, $flag, $val);
+ $self->{config}->{"-$name"} = $val;
+}
+
+sub Flag_ # Tk::CmdLine::Flag_($flag, $name) # private method
+{
+ my $self = shift(@_);
+ my ($flag, $name) = @_;
+ push(@{$self->{command}}, $flag);
+ $self->{$name} = 1;
+}
+
+sub Option_ # Tk::CmdLine::Option_($flag, $name) # private method
+{
+ my $self = shift(@_);
+ my ($flag, $name) = @_;
+ my $val = $self->Argument_($flag);
+ push(@{$self->{command}}, $flag, $val);
+ $self->{options}->{"*$name"} = $val;
+}
+
+sub Method_ # Tk::CmdLine::Method_($flag, $name) # private method
+{
+ my $self = shift(@_);
+ my ($flag, $name) = @_;
+ my $val = $self->Argument_($flag);
+ push(@{$self->{command}}, $flag, $val);
+ $self->{methods}->{$name} = $val;
+}
+
+sub Resource_ # Tk::CmdLine::Resource_($flag, $name) # private method
+{
+ my $self = shift(@_);
+ my ($flag, $name) = @_;
+ my $val = $self->Argument_($flag);
+ if ($val =~ /^([^!:\s]+)*\s*:\s*(.*)$/)
+ {
+ push(@{$self->{command}}, $flag, $val);
+ $self->{options}->{$1} = $2;
+ }
+}
+
+my %Method = (
+ background => 'Option_',
+ bg => 'background', # alias
+ class => 'Config_',
+ display => 'screen', # alias
+ fg => 'foreground', # alias
+ fn => 'font', # alias
+ font => 'Option_',
+ foreground => 'Option_',
+ geometry => 'Method_',
+ iconic => 'Flag_',
+ iconposition => 'Method_',
+ motif => 'Flag_',
+ name => 'Config_',
+ screen => 'Config_',
+ synchronous => 'Flag_',
+ title => 'Config_',
+ xrm => 'Resource_'
+);
+
+sub SetArguments # Tk::CmdLine::SetArguments([@argument])
+{
+ my $self = (@_ # define the object as necessary
+ ? ((ref($_[0]) eq __PACKAGE__)
+ ? shift(@_)
+ : (($_[0] eq __PACKAGE__) ? shift(@_) : 1) && ($OBJECT ||= __PACKAGE__->new()))
+ : ($OBJECT ||= __PACKAGE__->new()));
+ $OBJECT = $self; # update the current object
+ $self->{argv} = (@_ ? [ @_ ] : \@ARGV);
+ $self->{offset} = 0; # its existence will denote that this method has been called
+
+ my @option = ();
+
+ while ($self->{offset} < @{$self->{argv}})
+ {
+ last if ($self->{argv}->[$self->{offset}] eq '--');
+ unless (
+ (($self->{argv}->[$self->{offset}] =~ /^-{1,2}(\w+)$/) && (@option = $1)) ||
+ (($self->{argv}->[$self->{offset}] =~ /^--(\w+)=(.*)$/) && (@option = ($1, $2))))
+ {
+ ++$self->{offset};
+ next;
+ }
+
+ next if (!exists($Method{$option[0]}) && ++$self->{offset});
+
+ $option[0] = $Method{$option[0]} if exists($Method{$Method{$option[0]}});
+
+ my $method = $Method{$option[0]};
+
+ if (@option > 1) # replace --<option>=<value> with <value>
+ {
+ $self->{argv}->[$self->{offset}] = $option[1];
+ }
+ else # remove the argument
+ {
+ splice(@{$self->{argv}}, $self->{offset}, 1);
+ }
+
+ $self->$method(('-' . $option[0]), $option[0]);
+ }
+
+ $self->{config}->{-class} ||= ucfirst($self->{config}->{-name});
+
+ delete($self->{argv}); # no longer needed
+
+ return $self;
+}
+
+use vars qw(&process); *process = \&SetArguments; # alias to keep old code happy
+
+#/----------------------------------------------------------------------------//
+#/ Get a list of the arguments that have been processed by SetArguments().
+#/ Returns an array.
+#/----------------------------------------------------------------------------//
+
+sub GetArguments # Tk::CmdLine::GetArguments()
+{
+ my $self = (@_ # define the object as necessary
+ ? ((ref($_[0]) eq __PACKAGE__)
+ ? shift(@_)
+ : (($_[0] eq __PACKAGE__) ? shift(@_) : 1) && ($OBJECT ||= __PACKAGE__->new()))
+ : ($OBJECT ||= __PACKAGE__->new()));
+ $OBJECT = $self; # update the current object
+
+ $self->SetArguments() unless exists($self->{offset}); # set arguments if not yet done
+
+ return @{$self->{command}};
+}
+
+#/----------------------------------------------------------------------------//
+#/ Get the value of a configuration option (default: -class).
+#/ Returns the option value.
+#/----------------------------------------------------------------------------//
+
+sub cget # Tk::CmdLine::cget([$option])
+{
+ my $self = (@_ # define the object as necessary
+ ? ((ref($_[0]) eq __PACKAGE__)
+ ? shift(@_)
+ : (($_[0] eq __PACKAGE__) ? shift(@_) : 1) && ($OBJECT ||= __PACKAGE__->new()))
+ : ($OBJECT ||= __PACKAGE__->new()));
+ $OBJECT = $self; # update the current object
+ my $option = shift(@_) || '-class';
+
+ $self->SetArguments() unless exists($self->{offset}); # set arguments if not yet done
+
+ return (exists($self->{config}->{$option}) ? $self->{config}->{$option} : undef);
+}
+
+#/----------------------------------------------------------------------------//
+
+sub CreateArgs # Tk::CmdLine::CreateArgs()
+{
+ my $self = (@_ # define the object as necessary
+ ? ((ref($_[0]) eq __PACKAGE__)
+ ? shift(@_)
+ : (($_[0] eq __PACKAGE__) ? shift(@_) : 1) && ($OBJECT ||= __PACKAGE__->new()))
+ : ($OBJECT ||= __PACKAGE__->new()));
+ $OBJECT = $self; # update the current object
+
+ $self->SetArguments() unless exists($self->{offset}); # set arguments if not yet done
+
+ return $self->{config};
+}
+
+#/----------------------------------------------------------------------------//
+
+sub Tk::MainWindow::apply_command_line
+{
+ my $mw = shift(@_);
+
+ my $self = ($OBJECT ||= __PACKAGE__->new());
+
+ $self->SetArguments() unless exists($self->{offset}); # set arguments if not yet done
+
+ foreach my $priority (keys(%{$self->{resources}}))
+ {
+ foreach my $resource (@{$self->{resources}->{$priority}})
+ {
+ $mw->optionAdd(@{$resource}, $priority);
+ }
+ }
+
+ foreach my $key (keys(%{$self->{options}}))
+ {
+ $mw->optionAdd($key => $self->{options}->{$key}, 'interactive');
+ }
+
+ foreach my $key (keys(%{$self->{methods}}))
+ {
+ $mw->$key($self->{methods}->{$key});
+ }
+
+ if ($self->{methods}->{geometry})
+ {
+ if ($self->{methods}->{geometry} =~ /[+-]\d+[+-]\d+/)
+ {
+ $mw->positionfrom('user');
+ }
+ if ($self->{methods}->{geometry} =~ /\d+x\d+/)
+ {
+ $mw->sizefrom('user');
+ }
+ delete $self->{methods}->{geometry}; # XXX needed?
+ }
+
+ $mw->Synchronize() if $self->{synchronous};
+
+ if ($self->{iconic})
+ {
+ $mw->iconify();
+ $self->{iconic} = 0;
+ }
+
+ $Tk::strictMotif = ($self->{motif} || 0);
+
+ # Both these are needed to reliably save state
+ # but 'hostname' is tricky to do portably.
+ # $mw->client(hostname());
+ $mw->protocol('WM_SAVE_YOURSELF' => ['WMSaveYourself',$mw]);
+ $mw->command([ $self->{name}, @{$self->{command}} ]);
+}
+
+#/----------------------------------------------------------------------------//
+#/ Set the initial resources.
+#/ Returns the object reference.
+#/----------------------------------------------------------------------------//
+
+sub SetResources # Tk::CmdLine::SetResources((\@resource | $resource) [, $priority])
+{
+ my $self = (@_ # define the object as necessary
+ ? ((ref($_[0]) eq __PACKAGE__)
+ ? shift(@_)
+ : (($_[0] eq __PACKAGE__) ? shift(@_) : 1) && ($OBJECT ||= __PACKAGE__->new()))
+ : ($OBJECT ||= __PACKAGE__->new()));
+ $OBJECT = $self; # update the current object
+
+ $self->SetArguments() unless exists($self->{offset}); # set arguments if not yet done
+ return $self unless @_;
+
+ my $data = shift(@_);
+ my $priority = shift(@_) || 'userDefault';
+
+ $self->{resources}->{$priority} = [] unless exists($self->{resources}->{$priority});
+
+ foreach my $resource ((ref($data) eq 'ARRAY') ? @{$data} : $data)
+ {
+ if (ref($resource) eq 'ARRAY') # resources in [ <pattern>, <value> ] format
+ {
+ push(@{$self->{resources}->{$priority}}, [ @{$resource} ])
+ if (@{$resource} == 2);
+ }
+ else # resources in resource file format
+ {
+ push(@{$self->{resources}->{$priority}}, [ $1, $2 ])
+ if ($resource =~ /^([^!:\s]+)*\s*:\s*(.*)$/);
+ }
+ }
+
+ return $self;
+}
+
+#/----------------------------------------------------------------------------//
+#/ Load initial resources from one or more files (default: $XFILESEARCHPATH with
+#/ priority 'startupFile' and $XUSERFILESEARCHPATH with priority 'userDefault').
+#/ Returns the object reference.
+#/----------------------------------------------------------------------------//
+
+sub LoadResources # Tk::CmdLine::LoadResources([%options])
+{
+ my $self = (@_ # define the object as necessary
+ ? ((ref($_[0]) eq __PACKAGE__)
+ ? shift(@_)
+ : (($_[0] eq __PACKAGE__) ? shift(@_) : 1) && ($OBJECT ||= __PACKAGE__->new()))
+ : ($OBJECT ||= __PACKAGE__->new()));
+ $OBJECT = $self; # update the current object
+
+ $self->SetArguments() unless exists($self->{offset}); # set arguments if not yet done
+
+ my %options = @_;
+
+ my @file = ();
+ my $echo = (exists($options{-echo})
+ ? (defined($options{-echo}) ? $options{-echo} : \*STDOUT) : undef);
+
+ unless (%options && (exists($options{-file}) || exists($options{-symbol})))
+ {
+ @file = (
+ { -symbol => 'XFILESEARCHPATH', -priority => 'startupFile' },
+ { -symbol => 'XUSERFILESEARCHPATH', -priority => 'userDefault' } );
+ }
+ else
+ {
+ @file = { %options };
+ }
+
+ my $delimiter = (($^O eq 'MSWin32') ? ';' : ':');
+
+ foreach my $file (@file)
+ {
+ my $fileSpec = $file->{-spec} = undef;
+ if (exists($file->{-symbol}))
+ {
+ my $xpath = undef;
+ if ($file->{-symbol} eq 'XUSERFILESEARCHPATH')
+ {
+ $file->{-priority} ||= 'userDefault';
+ foreach my $symbol (qw(XUSERFILESEARCHPATH XAPPLRESDIR HOME))
+ {
+ last if (exists($ENV{$symbol}) && ($xpath = $ENV{$symbol}));
+ }
+ next unless defined($xpath);
+ }
+ else
+ {
+ $file->{-priority} ||= (($file->{-symbol} eq 'XFILESEARCHPATH')
+ ? 'startupFile' : 'userDefault');
+ next unless (
+ exists($ENV{$file->{-symbol}}) && ($xpath = $ENV{$file->{-symbol}}));
+ }
+
+ unless (exists($self->{translation}))
+ {
+ $self->{translation} = {
+ '%l' => '', # ignored
+ '%C' => '', # ignored
+ '%S' => '', # ignored
+ '%L' => ($ENV{LANG} || 'C'), # language
+ '%T' => 'app-defaults', # type
+ '%N' => $self->{config}->{-class} # filename
+ };
+ }
+
+ my @postfix = map({ $_ . '/' . $self->{config}->{-class} }
+ ('/' . $self->{translation}->{'%L'}), '');
+
+ ITEM: foreach $fileSpec (split($Config{path_sep}, $xpath))
+ {
+ if ($fileSpec =~ s/(%[A-Za-z])/$self->{translation}->{$1}/g) # File Pattern
+ {
+ if (defined($echo) && ($file->{-symbol} ne 'XFILESEARCHPATH'))
+ {
+ print $echo 'Checking ', $fileSpec, "\n";
+ }
+ next unless ((-f $fileSpec) && (-r _) && (-s _));
+ $file->{-spec} = $fileSpec;
+ last;
+ }
+ else # Directory - Check for <Directory>/$LANG/<Class>, <Directory>/<CLASS>
+ {
+ foreach my $postfix (@postfix)
+ {
+ my $fileSpec2 = $fileSpec . $postfix;
+ if (defined($echo) && ($file->{-symbol} ne 'XFILESEARCHPATH'))
+ {
+ print $echo 'Checking ', $fileSpec2, "\n";
+ }
+ next unless ((-f $fileSpec2) && (-r _) && (-s _));
+ $file->{-spec} = $fileSpec2;
+ last ITEM;
+ }
+ }
+ }
+ }
+ elsif (exists($file->{-file}) && ($fileSpec = $file->{-file}))
+ {
+ print $echo 'Checking ', $fileSpec, "\n" if defined($echo);
+ next unless ((-f $fileSpec) && (-r _) && (-s _));
+ $file->{-spec} = $fileSpec;
+ }
+ }
+
+ foreach my $file (@file)
+ {
+ next unless defined($file->{-spec});
+ local *SPEC;
+ next unless open(SPEC,$file->{-spec});
+ print $echo ' Loading ', $file->{-spec}, "\n" if defined($echo);
+
+ my $resource = undef;
+ my @resource = ();
+ my $continuation = 0;
+
+ while (defined(my $line = <SPEC>))
+ {
+ chomp($line);
+ next if ($line =~ /^\s*$/); # skip blank lines
+ next if ($line =~ /^\s*!/); # skip comments
+ $continuation = ($line =~ s/\s*\\$/ /); # search for trailing backslash
+ unless (defined($resource)) # it is the first line
+ {
+ $resource = $line;
+ }
+ else # it is a continuation line
+ {
+ $line =~ s/^\s*//; # remove leading whitespace
+ $resource .= $line;
+ }
+ next if $continuation;
+ push(@resource, [ $1, $2 ]) if ($resource =~ /^([^:\s]+)*\s*:\s*(.*)$/);
+ $resource = undef;
+ }
+
+ close(SPEC);
+
+ if (defined($resource)) # special case - EOF after line with trailing backslash
+ {
+ push(@resource, [ $1, $2 ]) if ($resource =~ /^([^:\s]+)*\s*:\s*(.*)$/);
+ }
+
+ $self->SetResources(\@resource, $file->{-priority}) if @resource;
+ }
+
+ return $self;
+}
+
+#/----------------------------------------------------------------------------//
+
+1;
+
+__END__
+
+=cut
+
+=head1 NAME
+
+Tk::CmdLine - Process standard X11 command line options and set initial resources
+
+=for pm Tk/CmdLine.pm
+
+=for category Creating and Configuring Widgets
+
+=head1 SYNOPSIS
+
+ Tk::CmdLine::SetArguments([@argument]);
+
+ my $value = Tk::CmdLine::cget([$option]);
+
+ Tk::CmdLine::SetResources((\@resource | $resource) [, $priority]);
+
+ Tk::CmdLine::LoadResources(
+ [ -symbol => $symbol ]
+ [ -file => $fileSpec ]
+ [ -priority => $priority ]
+ [ -echo => $fileHandle ] );
+
+=head1 DESCRIPTION
+
+Process standard X11 command line options and set initial resources.
+
+The X11R5 man page for X11 says: "Most X programs attempt to use the same names
+for command line options and arguments. All applications written with the
+X Toolkit Intrinsics automatically accept the following options: ...".
+This module processes these command line options for perl/Tk applications
+using the C<SetArguments>() function.
+
+This module can optionally be used to load initial resources explicitly via
+function C<SetResources>(), or from specified files (default: the standard X11
+application-specific resource files) via function C<LoadResources>().
+
+=head2 Command Line Options
+
+=over 4
+
+=item B<-background> I<Color> | B<-bg> I<Color>
+
+Specifies the color to be used for the window background.
+
+=item B<-class> I<Class>
+
+Specifies the class under which resources for the application should be found.
+This option is useful in shell aliases to distinguish between invocations
+of an application, without resorting to creating links to alter the executable
+file name.
+
+=item B<-display> I<Display> | B<-screen> I<Display>
+
+Specifies the name of the X server to be used.
+
+=item B<-font> I<Font> | B<-fn> I<Font>
+
+Specifies the font to be used for displaying text.
+
+=item B<-foreground> I<Color> | B<-fg> I<Color>
+
+Specifies the color to be used for text or graphics.
+
+=item B<-geometry> I<Geometry>
+
+Specifies the initial size and location of the I<first>
+L<MainWindow|Tk::MainWindow>.
+
+=item B<-iconic>
+
+Indicates that the user would prefer that the application's windows initially
+not be visible as if the windows had been immediately iconified by the user.
+Window managers may choose not to honor the application's request.
+
+=item B<-motif>
+
+Specifies that the application should adhere as closely as possible to Motif
+look-and-feel standards. For example, active elements such as buttons and
+scrollbar sliders will not change color when the pointer passes over them.
+
+=item B<-name> I<Name>
+
+Specifies the name under which resources for the application should be found.
+This option is useful in shell aliases to distinguish between invocations
+of an application, without resorting to creating links to alter the executable
+file name.
+
+=item B<-synchronous>
+
+Indicates that requests to the X server should be sent synchronously, instead of
+asynchronously. Since Xlib normally buffers requests to the server, errors do
+do not necessarily get reported immediately after they occur. This option turns
+off the buffering so that the application can be debugged. It should never
+be used with a working program.
+
+=item B<-title> I<TitleString>
+
+This option specifies the title to be used for this window. This information is
+sometimes used by a window manager to provide some sort of header identifying
+the window.
+
+=item B<-xrm> I<ResourceString>
+
+Specifies a resource pattern and value to override any defaults. It is also
+very useful for setting resources that do not have explicit command line
+arguments.
+
+The I<ResourceString> is of the form E<lt>I<pattern>E<gt>:E<lt>I<value>E<gt>,
+that is (the first) ':' is used to determine which part is pattern and which
+part is value. The (E<lt>I<pattern>E<gt>, E<lt>I<value>E<gt>) pair is entered
+into the options database with B<optionAdd> (for each
+L<MainWindow|Tk::MainWindow> configured), with I<interactive> priority.
+
+=back
+
+=head2 Initial Resources
+
+There are several mechanism for initializing the resource database to be used
+by an X11 application. Resources may be defined in a $C<HOME>/.Xdefaults file,
+a system application defaults file (e.g.
+/usr/lib/X11/app-defaults/E<lt>B<CLASS>E<gt>),
+or a user application defaults file (e.g. $C<HOME>/E<lt>B<CLASS>E<gt>).
+The Tk::CmdLine functionality for setting initial resources concerns itself
+with the latter two.
+
+Resource files contain data lines of the form
+E<lt>I<pattern>E<gt>:E<lt>I<value>E<gt>.
+They may also contain blank lines and comment lines (denoted
+by a ! character as the first non-blank character). Refer to L<option|Tk::option>
+for a description of E<lt>I<pattern>E<gt>:E<lt>I<value>E<gt>.
+
+=over 4
+
+=item System Application Defaults Files
+
+System application defaults files may be specified via environment variable
+$C<XFILESEARCHPATH> which, if set, contains a list of file patterns
+(joined using the OS-dependent path delimiter, e.g. colon on B<UNIX>).
+
+=item User Application Defaults Files
+
+User application defaults files may be specified via environment variables
+$C<XUSERFILESEARCHPATH>, $C<XAPPLRESDIR> or $C<HOME>.
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item B<SetArguments> - Tk::CmdLine::SetArguments([@argument])
+
+Extract the X11 options contained in a specified array (@ARGV by default).
+
+ Tk::CmdLine::SetArguments([@argument])
+
+The X11 options may be specified using a single dash I<-> as per the X11
+convention, or using two dashes I<--> as per the POSIX standard (e.g.
+B<-geometry> I<100x100>, B<-geometry> I<100x100> or B<-geometry=>I<100x100>).
+The options may be interspersed with other options or arguments.
+A I<--> by itself terminates option processing.
+
+By default, command line options are extracted from @ARGV the first time
+a MainWindow is created. The Tk::MainWindow constructor indirectly invokes
+C<SetArguments>() to do this.
+
+=item B<GetArguments> - Tk::CmdLine::GetArguments()
+
+Get a list of the X11 options that have been processed by C<SetArguments>().
+(C<GetArguments>() first invokes C<SetArguments>() if it has not already been invoked.)
+
+=item B<cget> - Tk::CmdLine::cget([$option])
+
+Get the value of a configuration option specified via C<SetArguments>().
+(C<cget>() first invokes C<SetArguments>() if it has not already been invoked.)
+
+ Tk::CmdLine::cget([$option])
+
+The valid options are: B<-class>, B<-name>, B<-screen> and B<-title>.
+If no option is specified, B<-class> is implied.
+
+A typical use of C<cget>() might be to obtain the application class in order
+to define the name of a resource file to be loaded in via C<LoadResources>().
+
+ my $class = Tk::CmdLine::cget(); # process command line and return class
+
+=item B<SetResources> - Tk::CmdLine::SetResources((\@resource | $resource) [, $priority])
+
+Set the initial resources.
+
+ Tk::CmdLine::SetResources((\@resource | $resource) [, $priority])
+
+A single resource may be specified using a string of the form
+'E<lt>I<pattern>E<gt>:E<lt>I<value>E<gt>'. Multiple resources may be specified
+by passing an array reference whose elements are either strings of the above
+form, and/or anonymous arrays of the form [ E<lt>I<pattern>E<gt>,
+E<lt>I<value>E<gt> ]. The optional second argument specifies the priority,
+as defined in L<option|Tk::option>, to be associated with the resources
+(default: I<userDefault>).
+
+Note that C<SetResources>() first invokes C<SetArguments>() if it has not already
+been invoked.
+
+=item B<LoadResources> - Tk::CmdLine::LoadResources([%options])
+
+Load initial resources from one or more files.
+
+ Tk::CmdLine::LoadResources(
+ [ -symbol => $symbol ]
+ [ -file => $fileSpec ]
+ [ -priority => $priority ]
+ [ -echo => $fileHandle ] );
+
+[ B<-symbol> =E<gt> $symbol ] specifies the name of an environment variable
+that, if set, defines a list of one or more directories and/or file patterns
+(joined using the OS-dependent path delimiter, e.g. colon on B<UNIX>).
+$C<XUSERFILESEARCHPATH> is a special case.
+If $C<XUSERFILESEARCHPATH> is not set, $C<XAPPLRESDIR> is checked instead.
+If $C<XAPPLRESDIR> is not set, $C<HOME> is checked instead.
+
+An item is identified as a file pattern if it contains one or more /%[A-Za-z]/
+patterns. Only patterns B<%L>, B<%T> and B<%N> are currently recognized. All
+others are replaced with the null string. Pattern B<%L> is translated into
+$C<LANG>. Pattern B<%T> is translated into I<app-defaults>. Pattern B<%N> is
+translated into the application class name.
+
+Each file pattern, after substitutions are applied, is assumed to define a
+FileSpec to be examined.
+
+When a directory is specified, FileSpecs
+E<lt>B<DIRECTORY>E<gt>/E<lt>B<LANG>E<gt>/E<lt>B<CLASS>E<gt>
+and E<lt>B<DIRECTORY>E<gt>/E<lt>B<CLASS>E<gt> are defined, in that order.
+
+[ B<-file> =E<gt> $fileSpec ] specifies a resource file to be loaded in.
+The file is silently skipped if if does not exist, or if it is not readable.
+
+[ B<-priority> =E<gt> $priority ] specifies the priority, as defined in
+L<option|Tk::option>, to be associated with the resources
+(default: I<userDefault>).
+
+[ B<-echo> =E<gt> $fileHandle ] may be used to specify that a line should be
+printed to the corresponding FileHandle (default: \*STDOUT) everytime a file
+is examined / loaded.
+
+If no B<-symbol> or B<-file> options are specified, C<LoadResources>()
+processes symbol $C<XFILESEARCHPATH> with priority I<startupFile> and
+$C<XUSERFILESEARCHPATH> with priority I<userDefault>.
+(Note that $C<XFILESEARCHPATH> and $C<XUSERFILESEARCHPATH> are supposed to
+contain only patterns. $C<XAPPLRESDIR> and $C<HOME> are supposed to be a single
+directory. C<LoadResources>() does not check/care whether this is the case.)
+
+For each set of FileSpecs, C<LoadResources>() examines each FileSpec to
+determine if the file exists and is readable. The first file that meets this
+criteria is read in and C<SetResources>() is invoked.
+
+Note that C<LoadResources>() first invokes C<SetArguments>() if it has not already
+been invoked.
+
+=back
+
+=head1 NOTES
+
+This module is an object-oriented module whose methods can be invoked as object
+methods, class methods or regular functions. This is accomplished via an
+internally-maintained object reference which is created as necessary, and which
+always points to the last object used. C<SetArguments>(), C<SetResources>() and
+C<LoadResources>() return the object reference.
+
+=head1 EXAMPLES
+
+=over
+
+=item 1
+
+@ARGV is processed by Tk::CmdLine at MainWindow creation.
+
+ use Tk;
+
+ # <Process @ARGV - ignoring all X11-specific options>
+
+ my $mw = MainWindow->new();
+
+ MainLoop();
+
+=item 2
+
+@ARGV is processed by Tk::CmdLine before MainWindow creation.
+An @ARGV of (--geometry=100x100 -opt1 a b c -bg red)
+is equal to (-opt1 a b c) after C<SetArguments>() is invoked.
+
+ use Tk;
+
+ Tk::CmdLine::SetArguments(); # Tk::CmdLine->SetArguments() works too
+
+ # <Process @ARGV - not worrying about X11-specific options>
+
+ my $mw = MainWindow->new();
+
+ MainLoop();
+
+=item 3
+
+Just like 2) except that default arguments are loaded first.
+
+ use Tk;
+
+ Tk::CmdLine::SetArguments(qw(-name test -iconic));
+ Tk::CmdLine::SetArguments();
+
+ # <Process @ARGV - not worrying about X11-specific options>
+
+ my $mw = MainWindow->new();
+
+ MainLoop();
+
+=item 4
+
+@ARGV is processed by Tk::CmdLine before MainWindow creation.
+Standard resource files are loaded in before MainWindow creation.
+
+ use Tk;
+
+ Tk::CmdLine::SetArguments();
+
+ # <Process @ARGV - not worrying about X11-specific options>
+
+ Tk::CmdLine::LoadResources();
+
+ my $mw = MainWindow->new();
+
+ MainLoop();
+
+=item 5
+
+@ARGV is processed by Tk::CmdLine before MainWindow creation.
+Standard resource files are loaded in before MainWindow creation
+using non-default priorities.
+
+ use Tk;
+
+ Tk::CmdLine::SetArguments();
+
+ # <Process @ARGV - not worrying about X11-specific options>
+
+ Tk::CmdLine::LoadResources(-echo => \*STDOUT,
+ -priority => 65, -symbol => 'XFILESEARCHPATH' );
+ Tk::CmdLine::LoadResources(-echo => \*STDOUT,
+ -priority => 75, -symbol => 'XUSERFILESEARCHPATH' );
+
+ my $mw = MainWindow->new();
+
+ MainLoop();
+
+=item 6
+
+@ARGV is processed by Tk::CmdLine before MainWindow creation.
+Standard resource files are loaded in before MainWindow creation.
+Individual resources are also loaded in before MainWindow creation.
+
+ use Tk;
+
+ Tk::CmdLine::SetArguments();
+
+ # <Process @ARGV - not worrying about X11-specific options>
+
+ Tk::CmdLine::LoadResources();
+
+ Tk::CmdLine::SetResources( # set a single resource
+ '*Button*background: red',
+ 'widgetDefault' );
+
+ Tk::CmdLine::SetResources( # set multiple resources
+ [ '*Button*background: red', '*Button*foreground: blue' ],
+ 'widgetDefault' );
+
+ my $mw = MainWindow->new();
+
+ MainLoop();
+
+=back
+
+=head1 ENVIRONMENT
+
+=over 4
+
+=item B<HOME> (optional)
+
+Home directory which may contain user application defaults files as
+$C<HOME>/$C<LANG>/E<lt>B<CLASS>E<gt> or $C<HOME>/E<lt>B<CLASS>E<gt>.
+
+=item B<LANG> (optional)
+
+The current language (default: I<C>).
+
+=item B<XFILESEARCHPATH> (optional)
+
+List of FileSpec patterns
+(joined using the OS-dependent path delimiter, e.g. colon on B<UNIX>)
+used in defining system application defaults files.
+
+=item B<XUSERFILESEARCHPATH> (optional)
+
+List of FileSpec patterns
+(joined using the OS-dependent path delimiter, e.g. colon on B<UNIX>)
+used in defining user application defaults files.
+
+=item B<XAPPLRESDIR> (optional)
+
+Directory containing user application defaults files as
+$C<XAPPLRESDIR>/$C<LANG>/E<lt>B<CLASS>E<gt> or
+$C<XAPPLRESDIR>/E<lt>B<CLASS>E<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+L<MainWindow|Tk::MainWindow>
+L<option|Tk::option>
+
+=head1 HISTORY
+
+=over 4
+
+=item *
+
+1999.03.04 Ben Pavon E<lt>ben.pavon@hsc.hac.comE<gt>
+
+Rewritten as an object-oriented module.
+
+Allow one to process command line options in a specified array (@ARGV by default).
+Eliminate restrictions on the format and location of the options within the array
+(previously the X11 options could not be specified in POSIX format and had to be
+at the beginning of the array).
+
+Added the C<SetResources>() and C<LoadResources>() functions to allow the definition
+of resources prior to MainWindow creation.
+
+=item *
+
+2000.08.31 Ben Pavon E<lt>ben.pavon@hsc.hac.comE<gt>
+
+Added the C<GetArguments>() method which returns the list of arguments that
+have been processed by C<SetArguments>().
+
+Modified C<LoadResources>() to split the symbols using the OS-dependent
+path delimiter defined in the B<Config> module.
+
+Modified C<LoadResources>() to eliminate a warning message when processing
+patterns B<%l>, B<%C>, B<%S>.
+
+=back
+
+=cut
+
diff --git a/Master/xemtex/perl/site/lib/Tk/ColorEdit.xpm b/Master/xemtex/perl/site/lib/Tk/ColorEdit.xpm
new file mode 100644
index 00000000000..ef3474cd869
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/ColorEdit.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char * ColorEditor_xpm[] = {
+"48 48 6 1",
+" c #0000FFFF0000",
+". c #FFFFFFFF0000",
+"X c #FFFF00000000",
+"o c #000000000000",
+"O c #0000FFFFFFFF",
+"+ c #00000000FFFF",
+" . . ......X..XXXXXXXXXXXXXXXX",
+" . .X.X. X...XX.XXXXXXXXXXX",
+" . . . ... ...XXXXXXXXXXXXXX",
+" . . .. .....XX.XXXXXXXXXXXX",
+" . .X.X...XXX..XXXXXXXXXXXX",
+" .. . ....X...X.XXXXXXXXX",
+" .. ..X.. . ..X..XXXXXXXX",
+" .... ..X.X..X.XXXXXXX",
+" ... .X. X...X...XX.XXX",
+" . .. ... XX...XXXX..XXXX",
+" ooo o ooo. . .. .X...X..X.XXXXX",
+" oo oo oo. . . . .......X.X.XX",
+" oo o oo . . .. ........XX.XXXX",
+" oo ooo oo ooo Xooo.oo..... X XX.X",
+" oo o oo oo o oo ooo o.. . X...X X",
+" oo oo oo oo oo oo .oo . X.X.....XX ",
+"O oo o oo oo oo oo oo oo. ... X..... .",
+"O O oo oo oo o oo ooo o. oo . ... .X..X",
+"O OOOooooO ooo ooo ooo oo ... ....... X ",
+" O OOO . . .. ... ..",
+"OOO OOOO OO O . .... . . .. .",
+" + O O O O .. .. . .",
+" O OOO OO . .. .... ",
+"OOOOO O OO . .. . ... ",
+"+OOOO OOOO OO O ... .. ..",
+" O+OO OO O . ",
+"OOOOOOOOoooooooOOOO ooo oo .... ",
+"OO++ OOO ooO OoOO oo oo oo .. ",
+"+OOOOOOOOooOOOo O O oo oo .",
+"++OOO +oo+oOO O oo oo ooo ooooo ooo ooo oo. ",
+"+OO O OOoooooO O o ooo oo oo o oo ooo o ",
+"++++ O OooOOoO Ooo Ooo oo oo oo oo oo ",
+"+++OOOO ooOOOoOOooOOooO oo oo oo oo oo ",
+"++++++ Ooo OOoOOooOooo ooo ooo o oo o oo ",
+"+++O+++oooooooOOOooOoooOooo ooo Oooo oo ",
+"++++++++O++OOOO O OOOOOOO ",
+"++O++++O+O+OOOOOOO O O OOOOOO O ",
+"+++O+++OOO+OO OOOO O OO O O O ",
+"++++++++O++O OO OO OO OOO OO O O ",
+"+++++++++++++ OOOOOO OOOO OO OO ",
+"+++++++++++++O+ +O OOOO OOO OOO OOO ",
+"++++++++++++++ OOOOO O OOOOOOOOOO ",
+"+++++++++++++ ++ OO +O OOOOO O O O ",
+"+++++++++++++++O+++O+O+O OOOOOOOOOO O ",
+"+++++++++++++O++++O++ O OOO O OOO OO ",
+"++++++++++++++++O+++O+O+OOOO OOOO O OO ",
+"+++++++++++++++++++O+++ +++O OOOOOO OO O ",
+"++++++++++++++++++++++ +++ O OOOOOOOOO "};
+
diff --git a/Master/xemtex/perl/site/lib/Tk/ColorEditor.pm b/Master/xemtex/perl/site/lib/Tk/ColorEditor.pm
new file mode 100644
index 00000000000..be4c373194a
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/ColorEditor.pm
@@ -0,0 +1,759 @@
+package Tk::ColorSelect;
+use strict;
+
+use vars qw($VERSION);
+$VERSION = '3.032'; # $Id: //depot/Tk8/Tk/ColorEditor.pm#32 $
+
+use Tk qw(Ev);
+
+require Tk::Frame;
+
+use base qw(Tk::Frame);
+Construct Tk::Widget 'ColorSelect';
+
+sub Populate
+{
+ my ($middle,$args) = @_;
+ my($i, @a);
+ require Tk::Config;
+ my(@xlibpath) = map { s/^-L//; "$_/X11/rgb.txt" }
+ split /\s+/, $Tk::Config::xlib;
+ foreach $i (@xlibpath,
+ '/usr/local/lib/X11/rgb.txt', '/usr/lib/X11/rgb.txt',
+ '/usr/X11R6/lib/X11/rgb.txt',
+ '/usr/local/X11R5/lib/X11/rgb.txt', '/X11/R5/lib/X11/rgb.txt',
+ '/X11/R4/lib/rgb/rgb.txt', '/usr/openwin/lib/X11/rgb.txt') {
+ local *FOO;
+ next if ! open FOO, $i;
+ my $middle_left = $middle->Frame;
+ $middle_left->pack(
+ -side => 'left',
+ -padx => '0.25c',
+ -pady => '0.25c',
+ );
+ my $names = $middle->Listbox(
+ -width => 20,
+ -height => 12,
+ -relief => 'sunken',
+ -borderwidth => 2,
+ -exportselection => 0,
+ );
+
+ $names->bind('<Double-1>' => [$middle,'color',Ev(['getSelected'])]);
+
+ my $scroll = $middle->Scrollbar(
+ -orient => 'vertical',
+ -command => ['yview', $names],
+ -relief => 'sunken',
+ -borderwidth => 2,
+ );
+ $names->configure(-yscrollcommand => ['set',$scroll]);
+ $names->pack(-in => $middle_left, -side => 'left');
+ $scroll->pack(-in => $middle_left, -side => 'right', -fill => 'y');
+
+ while(<FOO>) {
+ chomp;
+ next if /^!/;
+ my @a = split;
+ my $color = join(' ', @a[3 .. $#a]);
+ my $hex;
+ eval { $hex = $middle->Hex($color); };
+ if ($@) {
+ #print STDERR "unknown color: '$color'\n";
+ if ($@ =~ /unknown color name "/) {
+ next;
+ } else {
+ chomp $@;
+ die $@;
+ }
+ }
+ if (!exists($Tk::ColorEditor::names{$hex}) ||
+ length($Tk::ColorEditor::names{$hex}) > length($color)) {
+ $Tk::ColorEditor::names{$hex} = $color;
+ $names->insert('end', $color);
+ }
+ }
+ close FOO;
+ last;
+ }
+
+ # Create the three scales for editing the color, and the entry for typing
+ # in a color value.
+
+ my $middle_middle = $middle->Frame;
+ $middle_middle->pack(-side => 'left', -expand => 1, -fill => 'y');
+ my $mcm1 = $middle_middle->Optionmenu(-variable => \$middle->{'color_space'},
+ -command => [ $middle, 'color_space'],
+ -relief => 'raised',
+ -options => [ ['HSB color space' => 'hsb'],
+ ['RGB color space' => 'rgb'],
+ ['CMY color space' => 'cmy']]);
+ $mcm1->pack(-side => 'top', -fill => 'x');
+
+ my(@middle_middle, @label, @scale);
+ $middle_middle[0] = $middle_middle->Frame;
+ $middle_middle[1] = $middle_middle->Frame;
+ $middle_middle[2] = $middle_middle->Frame;
+ $middle_middle[3] = $middle_middle->Frame;
+ $middle_middle[0]->pack(-side => 'top', -expand => 1);
+ $middle_middle[1]->pack(-side => 'top', -expand => 1);
+ $middle_middle[2]->pack(-side => 'top', -expand => 1);
+ $middle_middle[3]->pack(-side => 'top', -expand => 1, -fill => 'x');
+ $middle->{'Labels'} = ['zero','one','two'];
+ foreach $i (0..2) {
+ $label[$i] = $middle->Label(-textvariable => \$middle->{'Labels'}[$i]);
+ $scale[$i] = $middle->Scale(
+ -from => 0,
+ -to => 1000,
+ '-length' => '6c',
+ -orient => 'horizontal',
+ -command => [\&scale_changed, $middle],
+ );
+ $scale[$i]->pack(
+ -in => $middle_middle[$i],
+ -side => 'top',
+ -anchor => 'w',
+ );
+ $label[$i]->pack(
+ -in => $middle_middle[$i],
+ -side => 'top',
+ -anchor => 'w',
+ );
+ }
+ my $nameLabel = $middle->Label(-text => 'Name:');
+ $middle->{'Entry'} = '';
+ my $name = $middle->Entry(
+ -relief => 'sunken',
+ -borderwidth => 2,
+ -textvariable => \$middle->{'Entry'},
+ -width => 10,
+# For some reason giving this font causes problems at end of t/create.t
+# -font => '-*-Courier-Medium-R-Normal--*-120-*-*-*-*-*-*'
+ );
+
+ $nameLabel->pack(-in => $middle_middle[3], -side => 'left');
+ $name->pack(
+ -in => $middle_middle[3],
+ -side => 'right',
+ -expand => 1,
+ -fill => 'x',
+ );
+ $name->bind('<Return>' => [ $middle, 'color', Ev(['get'])]);
+
+ # Create the color display swatch on the right side of the window.
+
+ my $middle_right = $middle->Frame;
+ $middle_right->pack(
+ -side => 'left',
+ -pady => '.25c',
+ -padx => '.25c',
+ -anchor => 's',
+ );
+ my $swatch = $middle->Canvas(
+ -width => '2.5c',
+ -height => '5c',
+ );
+ my $swatch_item = $swatch->create('oval', '.5c', '.3c', '2.26c', '4.76c');
+
+ my $value = $middle->Label(
+ -textvariable => \$middle->{'color'},
+ -width => 13,
+ -font => '-*-Courier-Medium-R-Normal--*-120-*-*-*-*-*-*'
+ );
+
+ $swatch->pack(
+ -in => $middle_right,
+ -side => 'top',
+ -expand => 1,
+ -fill => 'both',
+ );
+ $value->pack(-in => $middle_right, -side => 'bottom', -pady => '.25c');
+
+ $middle->ConfigSpecs(
+ '-color_space' => ['METHOD', undef, undef, 'hsb'],
+ '-initialcolor' => '-color',
+ '-color' => ['METHOD', 'background', 'Background',
+ $middle->cget('-background')]
+ );
+
+ $middle->{'swatch'} = $swatch;
+ $middle->{'swatch_item'} = $swatch_item;
+ $middle->{'scale'} = [@scale];
+ $middle->{'red'} = 0;
+ $middle->{'blue'} = 0;
+ $middle->{'green'} = 0;
+
+}
+
+sub Hex
+{
+ my $w = shift;
+ my @rgb = (@_ == 3) ? @_ : $w->rgb(@_);
+ sprintf('#%04x%04x%04x',@rgb)
+}
+
+sub color_space {
+
+ my($objref, $space) = @_;
+
+ if (@_ > 1)
+ {
+ my %Labels = ( 'rgb' => [qw(Red Green Blue)],
+ 'cmy' => [qw(Cyan Magenta Yellow)],
+ 'hsb' => [qw(Hue Saturation Brightness)] );
+
+ # The procedure below is invoked when a new color space is selected. It
+ # changes the labels on the scales and re-loads the scales with the
+ # appropriate values for the current color in the new color space
+
+ $space = 'hsb' unless (exists $Labels{$space});
+ my $i;
+ for $i (0..2)
+ {
+ $objref->{'Labels'}[$i] = $Labels{$space}->[$i];
+ }
+ $objref->{'color_space'} = $space;
+ $objref->afterIdle(['set_scales',$objref]) unless ($objref->{'pending'}++);
+ }
+ return $objref->{'color_space'};
+} # color_space
+
+sub hsvToRgb {
+
+ # The procedure below converts an HSB value to RGB. It takes hue,
+ # saturation, and value components (floating-point, 0-1.0) as arguments,
+ # and returns a list containing RGB components (integers, 0-65535) as
+ # result. The code here is a copy of the code on page 616 of
+ # "Fundamentals of Interactive Computer Graphics" by Foley and Van Dam.
+
+ my($hue, $sat, $value) = @_;
+ my($v, $i, $f, $p, $q, $t);
+
+ $v = int(65535 * $value);
+ return ($v, $v, $v) if $sat == 0;
+ $hue *= 6;
+ $hue = 0 if $hue >= 6;
+ $i = int($hue);
+ $f = $hue - $i;
+ $p = int(65535 * $value * (1 - $sat));
+ $q = int(65535 * $value * (1 - ($sat * $f)));
+ $t = int(65535 * $value * (1 - ($sat * (1 - $f))));
+ return ($v, $t, $p) if $i == 0;
+ return ($q, $v, $p) if $i == 1;
+ return ($p, $v, $t) if $i == 2;
+ return ($p, $q, $v) if $i == 3;
+ return ($t, $p, $v) if $i == 4;
+ return ($v, $p, $q) if $i == 5;
+
+} # end hsvToRgb
+
+sub color
+{
+ my ($objref,$name) = @_;
+ if (@_ > 1 && defined($name) && length($name))
+ {
+ if ($name eq 'cancel') {
+ $objref->{color} = undef;
+ return;
+ }
+ my ($format, $shift);
+ my ($red, $green, $blue);
+
+ if ($name !~ /^#/)
+ {
+ ($red, $green, $blue) = $objref->{'swatch'}->rgb($name);
+ }
+ else
+ {
+ my $len = length $name;
+ if($len == 4) { $format = '#(.)(.)(.)'; $shift = 12; }
+ elsif($len == 7) { $format = '#(..)(..)(..)'; $shift = 8; }
+ elsif($len == 10) { $format = '#(...)(...)(...)'; $shift = 4; }
+ elsif($len == 13) { $format = '#(....)(....)(....)'; $shift = 0; }
+ else {
+ $objref->BackTrace(
+ "ColorEditor error: syntax error in color name \"$name\"");
+ return;
+ }
+ ($red,$green,$blue) = $name =~ /$format/;
+ # Looks like a call for 'pack' or similar rather than eval
+ eval "\$red = 0x$red; \$green = 0x$green; \$blue = 0x$blue;";
+ $red = $red << $shift;
+ $green = $green << $shift;
+ $blue = $blue << $shift;
+ }
+ $objref->{'red'} = $red;
+ $objref->{'blue'} = $blue;
+ $objref->{'green'} = $green;
+ my $hex = sprintf('#%04x%04x%04x', $red, $green, $blue);
+ $objref->{'color'} = $hex;
+ $objref->{'Entry'} = $name;
+ $objref->afterIdle(['set_scales',$objref]) unless ($objref->{'pending'}++);
+ $objref->{'swatch'}->itemconfigure($objref->{'swatch_item'},
+ -fill => $objref->{'color'});
+ }
+ return $objref->{'color'};
+}
+
+sub rgbToHsv {
+
+ # The procedure below converts an RGB value to HSB. It takes red, green,
+ # and blue components (0-65535) as arguments, and returns a list
+ # containing HSB components (floating-point, 0-1) as result. The code
+ # here is a copy of the code on page 615 of "Fundamentals of Interactive
+ # Computer Graphics" by Foley and Van Dam.
+
+ my($red, $green, $blue) = @_;
+ my($max, $min, $sat, $range, $hue, $rc, $gc, $bc);
+
+ $max = ($red > $green) ? (($blue > $red) ? $blue : $red) :
+ (($blue > $green) ? $blue : $green);
+ $min = ($red < $green) ? (($blue < $red) ? $blue : $red) :
+ (($blue < $green) ? $blue : $green);
+ $range = $max - $min;
+ if ($max == 0) {
+ $sat = 0;
+ } else {
+ $sat = $range / $max;
+ }
+ if ($sat == 0) {
+ $hue = 0;
+ } else {
+ $rc = ($max - $red) / $range;
+ $gc = ($max - $green) / $range;
+ $bc = ($max - $blue) / $range;
+ $hue = ($max == $red)?(0.166667*($bc - $gc)):
+ (($max == $green)?(0.166667*(2 + $rc - $bc)):
+ (0.166667*(4 + $gc - $rc)));
+ }
+ return ($hue, $sat, $max/65535);
+
+} # end rgbToHsv
+
+sub scale_changed {
+
+ # The procedure below is invoked when one of the scales is adjusted. It
+ # propagates color information from the current scale readings to
+ # everywhere else that it is used.
+
+ my($objref) = @_;
+
+ return if $objref->{'updating'};
+ my ($red, $green, $blue);
+
+ if($objref->{'color_space'} eq 'rgb') {
+ $red = int($objref->{'scale'}->[0]->get * 65.535 + 0.5);
+ $green = int($objref->{'scale'}->[1]->get * 65.535 + 0.5);
+ $blue = int($objref->{'scale'}->[2]->get * 65.535 + 0.5);
+ } elsif($objref->{'color_space'} eq 'cmy') {
+ $red = int(65535 - $objref->{'scale'}->[0]->get * 65.535 + 0.5);
+ $green = int(65535 - $objref->{'scale'}->[1]->get * 65.535 + 0.5);
+ $blue = int(65535 - $objref->{'scale'}->[2]->get * 65.535 + 0.5);
+ } else {
+ ($red, $green, $blue) = hsvToRgb($objref->{'scale'}->[0]->get/1000.0,
+ $objref->{'scale'}->[1]->get/1000.0,
+ $objref->{'scale'}->[2]->get/1000.0);
+ }
+ $objref->{'red'} = $red;
+ $objref->{'blue'} = $blue;
+ $objref->{'green'} = $green;
+ $objref->color(sprintf('#%04x%04x%04x', $red, $green, $blue));
+ $objref->idletasks;
+
+} # end scale_changed
+
+sub set_scales {
+
+ my($objref) = @_;
+ $objref->{'pending'} = 0;
+ $objref->{'updating'} = 1;
+
+ # The procedure below is invoked to update the scales from the current red,
+ # green, and blue intensities. It's invoked after a change in the color
+ # space and after a named color value has been loaded.
+
+ my($red, $blue, $green) = ($objref->{'red'}, $objref->{'blue'},
+ $objref->{'green'});
+
+ if($objref->{'color_space'} eq 'rgb') {
+ $objref->{'scale'}->[0]->set(int($red / 65.535 + 0.5));
+ $objref->{'scale'}->[1]->set(int($green / 65.535 + 0.5));
+ $objref->{'scale'}->[2]->set(int($blue / 65.535 + 0.5));
+ } elsif($objref->{'color_space'} eq 'cmy') {
+ $objref->{'scale'}->[0]->set(int((65535 - $red) / 65.535 + 0.5));
+ $objref->{'scale'}->[1]->set(int((65535 - $green) / 65.535 + 0.5));
+ $objref->{'scale'}->[2]->set(int((65535 - $blue) / 65.535 + 0.5));
+ } else {
+ my ($s1, $s2, $s3) = rgbToHsv($red, $green, $blue);
+ $objref->{'scale'}->[0]->set(int($s1 * 1000.0 + 0.5));
+ $objref->{'scale'}->[1]->set(int($s2 * 1000.0 + 0.5));
+ $objref->{'scale'}->[2]->set(int($s3 * 1000.0 + 0.5));
+ }
+ $objref->{'updating'} = 0;
+
+} # end set_scales
+
+package Tk::ColorDialog;
+require Tk::Toplevel;
+use base qw(Tk::Toplevel);
+
+Construct Tk::Widget 'ColorDialog';
+
+sub Accept
+{
+ my $cw = shift;
+ $cw->withdraw;
+ $cw->{'done'} = 1;
+}
+
+sub Cancel
+{
+ my $cw = shift;
+# $cw->configure(-color => undef);
+ $cw->configure(-color => 'cancel');
+ $cw->Accept;
+}
+
+sub Populate
+{
+ my ($cw,$args) = @_;
+ $cw->SUPER::Populate($args);
+ $cw->protocol('WM_DELETE_WINDOW' => [ 'Cancel' => $cw ]);
+ $cw->transient($cw->Parent->toplevel);
+ $cw->withdraw;
+ my $sel = $cw->ColorSelect;
+ my $accept = $cw->Button(-text => 'Accept', -command => ['Accept', $cw]);
+ my $cancel = $cw->Button(-text => 'Cancel', -command => ['Cancel', $cw]);
+ Tk::grid($sel);
+ Tk::grid($accept,$cancel);
+ $cw->ConfigSpecs(DEFAULT => [$sel]);
+}
+
+sub Show
+{
+ my $cw = shift;
+ $cw->configure(@_) if @_;
+ $cw->Popup();
+ $cw->waitVariable(\$cw->{'done'});
+ $cw->withdraw;
+ return $cw->cget('-color');
+}
+
+package Tk::ColorEditor;
+
+use vars qw($VERSION $SET_PALETTE);
+$VERSION = '3.032'; # $Id: //depot/Tk8/Tk/ColorEditor.pm#32 $
+
+use Tk qw(lsearch Ev);
+use Tk::Toplevel;
+use base qw(Tk::Toplevel);
+use Tk::widgets qw(Pixmap);
+Construct Tk::Widget 'ColorEditor';
+
+%Tk::ColorEditor::names = ();
+
+
+use Tk::Dialog;
+use Tk::Pretty;
+
+BEGIN { $SET_PALETTE = 'Set Palette' };
+
+use subs qw(color_space hsvToRgb rgbToHsv);
+
+# ColorEditor public methods.
+
+sub add_menu_item
+{
+ my $objref = shift;
+ my $value;
+ foreach $value (@_)
+ {
+ if ($value eq 'SEP')
+ {
+ $objref->{'mcm2'}->separator;
+ }
+ else
+ {
+ $objref->{'mcm2'}->command( -label => $value,
+ -command => [ 'configure', $objref, '-highlight' => $value ] );
+ push @{$objref->{'highlight_list'}}, $value;
+ }
+ }
+}
+
+sub set_title
+{
+ my ($w) = @_;
+ my $t = $w->{Configure}{'-title'} || '' ;
+ my $h = $w->{Configure}{'-highlight'} || '';
+ $w->SUPER::title("$t $h Color Editor");
+}
+
+sub highlight
+{
+ my ($w,$h) = @_;
+ if (@_ > 1)
+ {
+ $w->{'update'}->configure( -text => "Apply $h Color" );
+ my $state = ($h eq 'background') ? 'normal' : 'disabled';
+ $w->{'palette'}->entryconfigure( $SET_PALETTE, -state => $state);
+ $w->{'highlight'} = $h;
+ $w->configure(-color => $w->Palette->{$h});
+ $w->set_title;
+ }
+ return $w->{'highlight'};
+}
+
+sub title
+{
+ my ($w,$val) = @_;
+ $w->set_title if (@_ > 1);
+ return $w->{Configure}{'-title'};
+}
+
+sub delete_menu_item
+{
+ my $objref = shift;
+ my $value;
+ foreach $value (@_)
+ {
+ $objref->{'mcm2'}->delete($value);
+ my $list_ord = $value =~ /\d+/ ? $value : lsearch($objref->{'highlight_list'}, $value);
+ splice(@{$objref->{'highlight_list'}}, $list_ord, 1) if $list_ord != -1;
+ }
+}
+
+sub delete_widgets {
+
+ # Remove widgets from consideration by the color configurator.
+ # $widgets_ref points to widgets previously added via `configure'.
+
+ my($objref, $widgets_ref) = @_;
+
+ my($i, $found, $r1, $r2, @wl) = (0, 0, 0, 0, @{$objref->cget(-widgets)});
+ foreach $r1 (@{$widgets_ref}) {
+ $i = -1;
+ $found = 0;
+ foreach $r2 (@wl) {
+ $i++;
+ next if $r1 != $r2;
+ $found = 1;
+ last;
+ }
+ splice(@wl, $i, 1) if $found;
+ }
+ $objref->configure(-widgets => [@wl]);
+
+} # end delete_widgets
+
+sub ApplyDefault
+{
+ my($objref) = @_;
+ my $cb = $objref->cget('-command');
+ my $h;
+ foreach $h (@{$objref->{'highlight_list'}})
+ {
+ next if $h =~ /TEAR_SEP|SEP/;
+ $cb->Call($h);
+ die unless (defined $cb);
+ }
+}
+
+sub Populate
+{
+
+ # ColorEditor constructor.
+
+ my($cw, $args) = @_;
+
+ $cw->SUPER::Populate($args);
+ $cw->withdraw;
+
+ my $color_space = 'hsb'; # rgb, cmy, hsb
+ my(@highlight_list) = qw(
+ TEAR_SEP
+ foreground background SEP
+ activeForeground activeBackground SEP
+ highlightColor highlightBackground SEP
+ selectForeground selectBackground SEP
+ disabledForeground insertBackground selectColor troughColor
+ );
+
+ # Create the Usage Dialog;
+
+ my $usage = $cw->Dialog( '-title' => 'ColorEditor Usage',
+ -justify => 'left',
+ -wraplength => '6i',
+ -text => "The Colors menu allows you to:\n\nSelect a color attribute such as \"background\" that you wish to colorize. Click on \"Apply\" to update that single color attribute.\n\nSelect one of three color spaces. All color spaces display a color value as a hexadecimal number under the oval color swatch that can be directly supplied on widget commands.\n\nApply Tk's default color scheme to the application. Useful if you've made a mess of things and want to start over!\n\nChange the application's color palette. Make sure \"background\" is selected as the color attribute, find a pleasing background color to apply to all current and future application widgets, then select \"Set Palette\".",
+ );
+
+ # Create the menu bar at the top of the window for the File, Colors
+ # and Help menubuttons.
+
+ my $m0 = $cw->Frame(-relief => 'raised', -borderwidth => 2);
+ $m0->pack(-side => 'top', -fill => 'x');
+ my $mf = $m0->Menubutton(
+ -text => 'File',
+ -underline => 0,
+ -bd => 1,
+ -relief => 'raised',
+ );
+ $mf->pack(-side => 'left');
+ my $close_command = [sub {shift->withdraw}, $cw];
+ $mf->command(
+ -label => 'Close',
+ -underline => 0,
+ -command => $close_command,
+ -accelerator => 'Ctrl-w',
+ );
+ $cw->bind('<Control-Key-w>' => $close_command);
+ $cw->protocol(WM_DELETE_WINDOW => $close_command);
+
+ my $mc = $m0->Menubutton(
+ -text => 'Colors',
+ -underline => 0,
+ -bd => 1,
+ -relief => 'raised',
+ );
+ $mc->pack(-side => 'left');
+ my $color_attributes = 'Color Attributes';
+ $mc->cascade(-label => $color_attributes, -underline => 6);
+ $mc->separator;
+
+ $mc->command(
+ -label => 'Apply Default Colors',
+ -underline => 6,
+ -command => ['ApplyDefault',$cw]
+ );
+ $mc->separator;
+ $mc->command(
+ -label => $SET_PALETTE,
+ -underline => 0,
+ -command => sub { $cw->setPalette($cw->cget('-color'))}
+ );
+
+ my $m1 = $mc->cget(-menu);
+
+ my $mcm2 = $m1->Menu;
+ $m1->entryconfigure($color_attributes, -menu => $mcm2);
+ my $mh = $m0->Menubutton(
+ -text => 'Help',
+ -underline => 0,
+ -bd => 1,
+ -relief => 'raised',
+ );
+ $mh->pack(-side => 'right');
+ $mh->command(
+ -label => 'Usage',
+ -underline => 0,
+ -command => [sub {shift->Show}, $usage],
+ );
+
+ # Create the Apply button.
+
+ my $bot = $cw->Frame(-relief => 'raised', -bd => 2);
+ $bot->pack(-side => 'bottom', -fill =>'x');
+ my $update = $bot->Button(
+ -command => [
+ sub {
+ my ($objref) = @_;
+ $objref->Callback(-command => ($objref->{'highlight'}, $objref->cget('-color')));
+ }, $cw,
+ ],
+ );
+ $update->pack(-pady => 1, -padx => '0.25c');
+
+ # Create the listbox that holds all of the color names in rgb.txt, if an
+ # rgb.txt file can be found.
+
+ my $middle = $cw->ColorSelect(-relief => 'raised', -borderwidth => 2);
+ $middle->pack(-side => 'top', -fill => 'both');
+ # Create the status window.
+
+ my $status = $cw->Toplevel;
+ $status->withdraw;
+ $status->geometry('+0+0');
+ my $status_l = $status->Label(-width => 50, -anchor => 'w');
+ $status_l->pack(-side => 'top');
+
+ $cw->{'highlight_list'} = [@highlight_list];
+ $cw->{'mcm2'} = $mcm2;
+
+ foreach (@highlight_list)
+ {
+ next if /^TEAR_SEP$/;
+ $cw->add_menu_item($_);
+ }
+
+ $cw->{'updating'} = 0;
+ $cw->{'pending'} = 0;
+ $cw->{'Status'} = $status;
+ $cw->{'Status_l'} = $status_l;
+ $cw->{'update'} = $update;
+ $cw->{'gwt_depth'} = 0;
+ $cw->{'palette'} = $mc;
+
+ my $pixmap = $cw->Pixmap('-file' => Tk->findINC('ColorEdit.xpm'));
+ $cw->Icon(-image => $pixmap);
+
+ $cw->ConfigSpecs(
+ DEFAULT => [$middle],
+ -widgets => ['PASSIVE', undef, undef,
+ [$cw->parent->Descendants]],
+ -display_status => ['PASSIVE', undef, undef, 0],
+ '-title' => ['METHOD', undef, undef, ''],
+ -command => ['CALLBACK', undef, undef, ['set_colors',$cw]],
+ '-highlight' => ['METHOD', undef, undef, 'background'],
+ -cursor => ['DESCENDANTS', 'cursor', 'Cursor', 'left_ptr'],
+ );
+
+} # end Populate, ColorEditor constructor
+
+sub Show {
+
+ my($objref) = @_;
+
+ $objref->deiconify;
+
+} # end show
+
+# ColorEditor default configurator procedure - can be redefined by the
+# application.
+
+sub set_colors {
+
+ # Configure all the widgets in $widgets for attribute $type and color
+ # $color. If $color is undef then reset all colors
+ # to the Tk defaults.
+
+ my($objref, $type, $color) = @_;
+ my $display = $objref->cget('-display_status');
+
+ $objref->{'Status'}->title("Configure $type");
+ $objref->{'Status'}->deiconify if $display;
+ my $widget;
+ my $reset = !defined($color);
+
+ foreach $widget (@{$objref->cget('-widgets')}) {
+ if ($display) {
+ $objref->{'Status_l'}->configure(
+ -text => 'WIDGET: ' . $widget->PathName
+ );
+ $objref->update;
+ }
+ eval {local $SIG{'__DIE__'}; $color = ($widget->configure("-\L${type}"))[3]} if $reset;
+ eval {local $SIG{'__DIE__'}; $widget->configure("-\L${type}" => $color)};
+ }
+
+ $objref->{'Status'}->withdraw if $display;
+
+} # end set_colors
+
+# ColorEditor private methods.
+
+1;
+
+__END__
+
+=cut
+
diff --git a/Master/xemtex/perl/site/lib/Tk/Config.pm b/Master/xemtex/perl/site/lib/Tk/Config.pm
new file mode 100644
index 00000000000..7c89d1aadb2
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Config.pm
@@ -0,0 +1,12 @@
+package Tk::Config;
+require Exporter;
+use base qw(Exporter);
+$VERSION = '800.024';
+$inc = '-I$(TKDIR)/pTk/mTk/xlib';
+$define = '';
+$xlib = '';
+$xinc = '';
+$gccopt = '';
+$win_arch = 'MSWin32';
+@EXPORT = qw($VERSION $inc $define $xlib $xinc $gccopt $win_arch);
+1;
diff --git a/Master/xemtex/perl/site/lib/Tk/Configure.pm b/Master/xemtex/perl/site/lib/Tk/Configure.pm
new file mode 100644
index 00000000000..5fc6e68ade6
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Configure.pm
@@ -0,0 +1,69 @@
+package Tk::Configure;
+use vars qw($VERSION);
+$VERSION = '3.010'; # $Id: //depot/Tk8/Tk/Configure.pm#10 $
+
+use Carp;
+use Tk::Pretty;
+
+
+# Class that handles cget/configure for options that
+# need translating from public form
+# e.g. $cw->configure(-label => 'fred')
+# into $cw->subwiget('label')->configure(-text => 'fred')
+# Should probably do something clever with regexp's here
+
+
+sub new
+{
+ my ($class,@args) = @_;
+ unshift(@args,'configure','cget') if (@args < 3);
+ return bless \@args,$class;
+}
+
+sub cget
+{
+ croak('Wrong number of args to cget') unless (@_ == 2);
+ my ($alias,$key) = @_;
+ my ($set,$get,$widget,@args) = @$alias;
+ $widget->$get(@args);
+}
+
+sub configure
+{
+ my $alias = shift;
+ shift if (@_);
+ my ($set,$get,$widget,@args) = @$alias;
+ if (wantarray)
+ {
+ my @results;
+ eval { @results = $widget->$set(@args,@_) };
+ croak($@) if $@;
+ return @results;
+ }
+ else
+ {
+ my $results;
+ eval { $results = $widget->$set(@args,@_) };
+ croak($@) if $@;
+ return $results;
+ }
+}
+
+*TIESCALAR = \&new;
+*TIEHASH = \&new;
+
+sub FETCH
+{
+ my $alias = shift;
+ my ($set,$get,$widget,@args) = @$alias;
+ return $widget->$get(@args,@_);
+}
+
+sub STORE
+{
+ my $alias = shift;
+ my ($set,$get,$widget,@args) = @$alias;
+ $widget->$set(@args,@_);
+}
+
+1;
diff --git a/Master/xemtex/perl/site/lib/Tk/Derived.pm b/Master/xemtex/perl/site/lib/Tk/Derived.pm
new file mode 100644
index 00000000000..89310d4d77a
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Derived.pm
@@ -0,0 +1,510 @@
+# Copyright (c) 1995-1999 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Derived;
+require Tk::Widget;
+require Tk::Configure;
+use strict;
+use Carp;
+
+use vars qw($VERSION);
+$VERSION = '3.046'; # $Id: //depot/Tk8/Tk/Derived.pm#46 $
+
+$Tk::Derived::Debug = 0;
+
+my $ENHANCED_CONFIGSPECS = 0; # disable for now
+
+use Tk qw(NORMAL_BG BLACK);
+
+sub Subwidget
+{
+ my $cw = shift;
+ my @result = ();
+ if (exists $cw->{SubWidget})
+ {
+ if (@_)
+ {
+ foreach my $name (@_)
+ {
+ push(@result,$cw->{SubWidget}{$name}) if (exists $cw->{SubWidget}{$name});
+ }
+ }
+ else
+ {
+ @result = values %{$cw->{SubWidget}};
+ }
+ }
+ return (wantarray) ? @result : $result[0];
+}
+
+sub _makelist
+{
+ my $widget = shift;
+ my (@specs) = (ref $widget && ref $widget eq 'ARRAY') ? (@$widget) : ($widget);
+ return @specs;
+}
+
+sub Subconfigure
+{
+ # This finds the widget or widgets to to which to apply a particular
+ # configure option
+ my ($cw,$opt) = @_;
+ my $config = $cw->ConfigSpecs;
+ my $widget;
+ my @subwidget = ();
+ my @arg = ();
+ if (defined $opt)
+ {
+ $widget = $config->{$opt};
+ unless (defined $widget)
+ {
+ $widget = ($opt =~ /^-(.*)$/) ? $config->{$1} : $config->{-$opt};
+ }
+ # Handle alias entries
+ if (defined($widget) && !ref($widget))
+ {
+ $opt = $widget;
+ $widget = $config->{$widget};
+ }
+ push(@arg,$opt) unless ($opt eq 'DEFAULT');
+ }
+ $widget = $config->{DEFAULT} unless (defined $widget);
+ if (defined $widget)
+ {
+ $cw->BackTrace("Invalid ConfigSpecs $widget") unless (ref($widget) && (ref $widget eq 'ARRAY'));
+ $widget = $widget->[0];
+ }
+ else
+ {
+ $widget = 'SELF';
+ }
+ foreach $widget (_makelist($widget))
+ {
+ $widget = 'SELF' if (ref($widget) && $widget == $cw);
+ if (ref $widget)
+ {
+ my $ref = ref $widget;
+ if ($ref eq 'ARRAY')
+ {
+ $widget = Tk::Configure->new(@$widget);
+ push(@subwidget,$widget)
+ }
+ elsif ($ref eq 'HASH')
+ {
+ foreach my $key (%$widget)
+ {
+ foreach my $sw (_makelist($widget->{$key}))
+ {
+ push(@subwidget,Tk::Configure->new($sw,$key));
+ }
+ }
+ }
+ else
+ {
+ push(@subwidget,$widget)
+ }
+ }
+ elsif ($widget eq 'ADVERTISED')
+ {
+ push(@subwidget,$cw->Subwidget)
+ }
+ elsif ($widget eq 'DESCENDANTS')
+ {
+ push(@subwidget,$cw->Descendants)
+ }
+ elsif ($widget eq 'CHILDREN')
+ {
+ push(@subwidget,$cw->children)
+ }
+ elsif ($widget eq 'METHOD')
+ {
+ my ($method) = ($opt =~ /^-?(.*)$/);
+ push(@subwidget,Tk::Configure->new($method,$method,$cw))
+ }
+ elsif ($widget eq 'SETMETHOD')
+ {
+ my ($method) = ($opt =~ /^-?(.*)$/);
+ push(@subwidget,Tk::Configure->new($method,'_cget',$cw,@arg))
+ }
+ elsif ($widget eq 'SELF')
+ {
+ push(@subwidget,Tk::Configure->new('Tk::configure', 'Tk::cget', $cw,@arg))
+ }
+ elsif ($widget eq 'PASSIVE')
+ {
+ push(@subwidget,Tk::Configure->new('_configure','_cget',$cw,@arg))
+ }
+ elsif ($widget eq 'CALLBACK')
+ {
+ push(@subwidget,Tk::Configure->new('_callback','_cget',$cw,@arg))
+ }
+ else
+ {
+ push(@subwidget,$cw->Subwidget($widget));
+ }
+ }
+ $cw->BackTrace("No delegate subwidget '$widget' for $opt") unless (@subwidget);
+ return (wantarray) ? @subwidget : $subwidget[0];
+}
+
+sub _cget
+{
+ my ($cw,$opt) = @_;
+ $cw->BackTrace('Wrong number of args to cget') unless (@_ == 2);
+ return $cw->{Configure}{$opt}
+}
+
+sub _configure
+{
+ my ($cw,$opt,$val) = @_;
+ $cw->BackTrace('Wrong number of args to configure') unless (@_ == 3);
+ $cw->{Configure}{$opt} = $val;
+}
+
+sub _callback
+{
+ my ($cw,$opt,$val) = @_;
+ $cw->BackTrace('Wrong number of args to configure') unless (@_ == 3);
+ $val = Tk::Callback->new($val) if defined($val) && ref($val);
+ $cw->{Configure}{$opt} = $val;
+}
+
+sub cget
+{my ($cw,$opt) = @_;
+ my @result;
+ local $SIG{'__DIE__'};
+ foreach my $sw ($cw->Subconfigure($opt))
+ {
+ if (wantarray)
+ {
+ eval { @result = $sw->cget($opt) };
+ }
+ else
+ {
+ eval { $result[0] = $sw->cget($opt) };
+ }
+ last unless $@;
+ }
+ return wantarray ? @result : $result[0];
+}
+
+sub Configured
+{
+ # Called whenever a derived widget is re-configured
+ my ($cw,$args,$changed) = @_;
+ if (@_ > 1)
+ {
+ $cw->afterIdle(['ConfigChanged',$cw,$changed]) if (%$changed);
+ }
+ return exists $cw->{'Configure'};
+}
+
+sub configure
+{
+ # The default composite widget configuration method uses hash stored
+ # in the widget's hash to map configuration options
+ # onto subwidgets.
+ #
+ my @results = ();
+ my $cw = shift;
+ if (@_ <= 1)
+ {
+ # Enquiry cases
+ my $spec = $cw->ConfigSpecs;
+ if (@_)
+ {
+ # Return info on the nominated option
+ my $opt = $_[0];
+ my $info = $spec->{$opt};
+ unless (defined $info)
+ {
+ $info = ($opt =~ /^-(.*)$/) ? $spec->{$1} : $spec->{-$opt};
+ }
+ if (defined $info)
+ {
+ if (ref $info)
+ {
+ # If the default slot is undef then ask subwidgets in turn
+ # for their default value until one accepts it.
+ if ($ENHANCED_CONFIGSPECS && !defined($info->[3]))
+ {local $SIG{'__DIE__'};
+ my @def;
+ foreach my $sw ($cw->Subconfigure($opt))
+ {
+ eval { @def = $sw->configure($opt) };
+ last unless $@;
+ }
+ $info->[3] = $def[3];
+ $info->[1] = $def[1] unless defined $info->[1];
+ $info->[2] = $def[2] unless defined $info->[2];
+ }
+ push(@results,$opt,$info->[1],$info->[2],$info->[3],$cw->cget($opt));
+ }
+ else
+ {
+ # Real (core) Tk widgets return db name rather than option name
+ # for aliases so recurse to get that ...
+ my @real = $cw->configure($info);
+ push(@results,$opt,$real[1]);
+ }
+ }
+ else
+ {
+ push(@results,$cw->Subconfigure($opt)->configure($opt));
+ }
+ }
+ else
+ {
+ my $opt;
+ my %results;
+ if (exists $spec->{'DEFAULT'})
+ {
+ foreach $opt ($cw->Subconfigure('DEFAULT')->configure)
+ {
+ $results{$opt->[0]} = $opt;
+ }
+ }
+ foreach $opt (keys %$spec)
+ {
+ $results{$opt} = [$cw->configure($opt)] if ($opt ne 'DEFAULT');
+ }
+ foreach $opt (sort keys %results)
+ {
+ push(@results,$results{$opt});
+ }
+ }
+ }
+ else
+ {
+ my (%args) = @_;
+ my %changed = ();
+ my ($opt,$val);
+ my $config = $cw->TkHash('Configure');
+
+ while (($opt,$val) = each %args)
+ {
+ my $var = \$config->{$opt};
+ my $old = $$var;
+ $$var = $val;
+ my $accepted = 0;
+ my $error = "No widget handles $opt";
+ foreach my $subwidget ($cw->Subconfigure($opt))
+ {
+ next unless (defined $subwidget);
+ eval {local $SIG{'__DIE__'}; $subwidget->configure($opt => $val) };
+ if ($@)
+ {
+ my $val2 = (defined $val) ? $val : 'undef';
+ $error = "Can't set $opt to `$val2' for $cw: " . $@;
+ undef $@;
+ }
+ else
+ {
+ $accepted = 1;
+ }
+ }
+ $cw->BackTrace($error) unless ($accepted);
+ $val = $$var;
+ $changed{$opt} = $val if (!defined $old || !defined $val || "$old" ne "$val");
+ }
+ $cw->Configured(\%args,\%changed);
+ }
+ return (wantarray) ? @results : \@results;
+}
+
+sub ConfigDefault
+{
+ my ($cw,$args) = @_;
+
+ $cw->BackTrace('Bad args') unless (defined $args && ref $args eq 'HASH');
+
+ my $specs = $cw->ConfigSpecs;
+ # Should we enforce a Delagates(DEFAULT => ) as well ?
+ $specs->{'DEFAULT'} = ['SELF'] unless (exists $specs->{'DEFAULT'});
+
+ #
+ # This is a pain with Text or Entry as core widget, they don't
+ # inherit SELF's cursor. So comment it out for Tk402.001
+ #
+ # $specs->{'-cursor'} = ['SELF',undef,undef,undef] unless (exists $specs->{'-cursor'});
+
+ # Now some hacks that cause colours to propogate down a composite widget
+ # tree - really needs more thought, other options adding such as active
+ # colours too and maybe fonts
+
+ my $child = ($cw->children)[0]; # 1st child window (if any)
+
+ unless (exists($specs->{'-background'}))
+ {
+ my (@bg) = ('SELF');
+ push(@bg,'CHILDREN') if $child;
+ $specs->{'-background'} = [\@bg,'background','Background',NORMAL_BG];
+ }
+ unless (exists($specs->{'-foreground'}))
+ {
+ my (@fg) = ('PASSIVE');
+ unshift(@fg,'CHILDREN') if $child;
+ $specs->{'-foreground'} = [\@fg,'foreground','Foreground',BLACK];
+ }
+ $cw->ConfigAlias(-fg => '-foreground', -bg => '-background');
+
+ # Pre-scan args for aliases - this avoids defaulting
+ # options specified via alias
+ foreach my $opt (keys %$args)
+ {
+ my $info = $specs->{$opt};
+ if (defined($info) && !ref($info))
+ {
+ $args->{$info} = delete $args->{$opt};
+ }
+ }
+
+ # Now walk %$specs supplying defaults for all the options
+ # which have a defined default value, potentially looking up .Xdefaults database
+ # options for the name/class of the 'frame'
+
+ foreach my $opt (keys %$specs)
+ {
+ if ($opt ne 'DEFAULT')
+ {
+ unless (exists $args->{$opt})
+ {
+ my $info = $specs->{$opt};
+ if (ref $info)
+ {
+ # Not an alias
+ if ($ENHANCED_CONFIGSPECS && !defined $info->[3])
+ {
+ # configure inquire to fill in default slot from subwidget
+ $cw->configure($opt);
+ }
+ if (defined $info->[3])
+ {
+ if (defined $info->[1] && defined $info->[2])
+ {
+ # Should we do this on the Subconfigure widget instead?
+ # to match *Entry.Background
+ my $db = $cw->optionGet($info->[1],$info->[2]);
+ $info->[3] = $db if (defined $db);
+ }
+ $args->{$opt} = $info->[3];
+ }
+ }
+ }
+ }
+ }
+}
+
+sub ConfigSpecs
+{
+ my $cw = shift;
+ my $specs = $cw->TkHash('ConfigSpecs');
+ while (@_)
+ {
+ my $key = shift;
+ my $val = shift;
+ $specs->{$key} = $val;
+ }
+ return $specs;
+}
+
+sub _alias
+{
+ my ($specs,$opt,$main) = @_;
+ if (exists($specs->{$opt}))
+ {
+ unless (exists $specs->{$main})
+ {
+ my $targ = $specs->{$opt};
+ if (ref($targ))
+ {
+ # opt is a real option
+ $specs->{$main} = $opt
+ }
+ else
+ {
+ # opt is itself an alias
+ # make main point to same place
+ $specs->{$main} = $targ unless $targ eq $main;
+ }
+ }
+ return 1;
+ }
+ return 0;
+}
+
+sub ConfigAlias
+{
+ my $cw = shift;
+ my $specs = $cw->ConfigSpecs;
+ while (@_ >= 2)
+ {
+ my $opt = shift;
+ my $main = shift;
+ unless (_alias($specs,$opt,$main) || _alias($specs,$main,$opt))
+ {
+ $cw->BackTrace("Neither $opt nor $main exist");
+ }
+ }
+ $cw->BackTrace('Odd number of args to ConfigAlias') if (@_);
+}
+
+sub Delegate
+{
+ my ($cw,$method,@args) = @_;
+ my $widget = $cw->DelegateFor($method);
+ if ($widget == $cw)
+ {
+ $method = "Tk::Widget::$method"
+ }
+ my @result;
+ if (wantarray)
+ {
+ @result = $widget->$method(@args);
+ }
+ else
+ {
+ $result[0] = $widget->$method(@args);
+ }
+ return (wantarray) ? @result : $result[0];
+}
+
+sub InitObject
+{
+ my ($cw,$args) = @_;
+ $cw->Populate($args);
+ $cw->ConfigDefault($args);
+}
+
+sub ConfigChanged
+{
+ my ($cw,$args) = @_;
+}
+
+sub Advertise
+{
+ my ($cw,$name,$widget) = @_;
+ confess 'No name' unless (defined $name);
+ croak 'No widget' unless (defined $widget);
+ my $hash = $cw->TkHash('SubWidget');
+ $hash->{$name} = $widget; # advertise it
+ return $widget;
+}
+
+sub Component
+{
+ my ($cw,$kind,$name,%args) = @_;
+ $args{'Name'} = "\l$name" if (defined $name && !exists $args{'Name'});
+ # my $pack = delete $args{'-pack'};
+ my $delegate = delete $args{'-delegate'};
+ my $w = $cw->$kind(%args); # Create it
+ # $w->pack(@$pack) if (defined $pack);
+ $cw->Advertise($name,$w) if (defined $name);
+ $cw->Delegates(map(($_ => $w),@$delegate)) if (defined $delegate);
+ return $w; # and return it
+}
+
+1;
+__END__
+
+
diff --git a/Master/xemtex/perl/site/lib/Tk/Dialog.pm b/Master/xemtex/perl/site/lib/Tk/Dialog.pm
new file mode 100644
index 00000000000..e277e35af7b
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Dialog.pm
@@ -0,0 +1,70 @@
+package Tk::Dialog;
+
+use vars qw($VERSION);
+$VERSION = '3.031'; # $Id: //depot/Tk8/Tk/Dialog.pm#31 $
+
+# Dialog - a translation of `tk_dialog' from Tcl/Tk to TkPerl (based on
+# John Stoffel's idea).
+#
+# Stephen O. Lidie, Lehigh University Computing Center. 94/12/27
+# lusol@Lehigh.EDU
+
+# Documentation after __END__
+
+use Carp;
+use strict;
+use base qw(Tk::DialogBox);
+
+Construct Tk::Widget 'Dialog';
+
+sub Populate
+{
+
+ # Dialog object constructor. Uses `new' method from base class
+ # to create object container then creates the dialog toplevel.
+
+ my($cw, $args) = @_;
+
+ $cw->SUPER::Populate($args);
+
+ my ($w_bitmap,$w_but,$pad1,$pad2);
+
+ # Create the Toplevel window and divide it into top and bottom parts.
+
+ my (@pl) = (-side => 'top', -fill => 'both');
+
+ ($pad1, $pad2) =
+ ([-padx => '3m', -pady => '3m'], [-padx => '3m', -pady => '2m']);
+
+
+ $cw->iconname('Dialog');
+
+ my $w_top = $cw->Subwidget('top');
+
+ # Fill the top part with the bitmap and message.
+
+ @pl = (-side => 'left');
+
+ $w_bitmap = $w_top->Label(Name => 'bitmap');
+ $w_bitmap->pack(@pl, @$pad1);
+
+ my $w_msg = $w_top->Label( -wraplength => '3i', -justify => 'left' );
+
+ $w_msg->pack(-side => 'right', -expand => 1, -fill => 'both', @$pad1);
+
+ $cw->Advertise(message => $w_msg);
+ $cw->Advertise(bitmap => $w_bitmap );
+
+ $cw->ConfigSpecs( -image => ['bitmap',undef,undef,undef],
+ -bitmap => ['bitmap',undef,undef,undef],
+ -font => ['message','font','Font', '-*-Times-Medium-R-Normal--*-180-*-*-*-*-*-*'],
+ DEFAULT => ['message',undef,undef,undef]
+ );
+}
+
+1;
+
+__END__
+
+=cut
+
diff --git a/Master/xemtex/perl/site/lib/Tk/DialogBox.pm b/Master/xemtex/perl/site/lib/Tk/DialogBox.pm
new file mode 100644
index 00000000000..33b4b85ed85
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/DialogBox.pm
@@ -0,0 +1,115 @@
+#
+# DialogBox is similar to Dialog except that it allows any widget
+# in the top frame. Widgets can be added with the add method. Currently
+# there exists no way of deleting a widget once it has been added.
+
+package Tk::DialogBox;
+
+use strict;
+use Carp;
+
+use vars qw($VERSION);
+$VERSION = '3.032'; # $Id: //depot/Tk8/Tixish/DialogBox.pm#32 $
+
+use base qw(Tk::Toplevel);
+
+Tk::Widget->Construct('DialogBox');
+
+sub Populate {
+ my ($cw, $args) = @_;
+
+ $cw->SUPER::Populate($args);
+ my $buttons = delete $args->{'-buttons'};
+ $buttons = ['OK'] unless defined $buttons;
+ my $default_button = delete $args->{'-default_button'};
+ $default_button = $buttons->[0] unless defined $default_button;
+
+ $cw->{'selected_button'} = '';
+ $cw->transient($cw->Parent->toplevel);
+ $cw->withdraw;
+ $cw->protocol('WM_DELETE_WINDOW' => sub {});
+
+ # create the two frames
+ my $top = $cw->Component('Frame', 'top');
+ $top->configure(-relief => 'raised', -bd => 1) unless $Tk::platform eq 'MSWin32';
+ my $bot = $cw->Component('Frame', 'bottom');
+ $bot->configure(-relief => 'raised', -bd => 1) unless $Tk::platform eq 'MSWin32';
+ $bot->pack(qw/-side bottom -fill both -ipady 3 -ipadx 3/);
+ $top->pack(qw/-side top -fill both -ipady 3 -ipadx 3 -expand 1/);
+
+ # create a row of buttons in the bottom.
+ my $bl; # foreach my $var: perl > 5.003_08
+ foreach $bl (@$buttons)
+ {
+ my $b = $bot->Button(-text => $bl, -command => sub { $cw->{'selected_button'} = "$bl" } );
+ $cw->Advertise("B_$bl" => $b);
+ if ($Tk::platform eq 'MSWin32')
+ {
+ $b->configure(-width => 10, -pady => 0);
+ }
+ if ($bl eq $default_button) {
+ if ($Tk::platform eq 'MSWin32') {
+ $b->pack(-side => 'left', -expand => 1, -padx => 1, -pady => 1);
+ } else {
+ my $db = $bot->Frame(-relief => 'sunken', -bd => 1);
+ $b->raise($db);
+ $b->pack(-in => $db, -padx => '2', -pady => '2');
+ $db->pack(-side => 'left', -expand => 1, -padx => 1, -pady => 1);
+ }
+ $cw->bind('<Return>' => [ $b, 'Invoke']);
+ $cw->{'default_button'} = $b;
+ } else {
+ $b->pack(-side => 'left', -expand => 1, -padx => 1, -pady => 1);
+ }
+ }
+ $cw->ConfigSpecs(-command => ['CALLBACK', undef, undef, undef ],
+ -foreground => ['DESCENDANTS', 'foreground','Foreground', 'black'],
+ -background => ['DESCENDANTS', 'background','Background', undef],
+ );
+ $cw->Delegates('Construct',$top);
+}
+
+sub add {
+ my ($cw, $wnam, @args) = @_;
+ my $w = $cw->Subwidget('top')->$wnam(@args);
+ $cw->Advertise("\L$wnam" => $w);
+ return $w;
+}
+
+sub Wait
+{
+ my $cw = shift;
+ $cw->waitVariable(\$cw->{'selected_button'});
+ $cw->grabRelease;
+ $cw->withdraw;
+ $cw->Callback(-command => $cw->{'selected_button'});
+}
+
+sub Show {
+ my ($cw, $grab) = @_;
+ croak 'DialogBox: "Show" method requires at least 1 argument'
+ if scalar @_ < 1;
+ my $old_focus = $cw->focusSave;
+ my $old_grab = $cw->grabSave;
+
+ $cw->Popup();
+
+ Tk::catch {
+ if (defined $grab && length $grab && ($grab =~ /global/)) {
+ $cw->grabGlobal;
+ } else {
+ $cw->grab;
+ }
+ };
+ if (defined $cw->{'default_button'}) {
+ $cw->{'default_button'}->focus;
+ } else {
+ $cw->focus;
+ }
+ $cw->Wait;
+ &$old_focus;
+ &$old_grab;
+ return $cw->{'selected_button'};
+}
+
+1;
diff --git a/Master/xemtex/perl/site/lib/Tk/Entry.pm b/Master/xemtex/perl/site/lib/Tk/Entry.pm
new file mode 100644
index 00000000000..2696b496497
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Entry.pm
@@ -0,0 +1,517 @@
+package Tk::Entry;
+
+# Converted from entry.tcl --
+#
+# This file defines the default bindings for Tk entry widgets.
+#
+# @(#) entry.tcl 1.22 94/12/17 16:05:14
+#
+# Copyright (c) 1992-1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+# Copyright (c) 1995-1999 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+
+use vars qw($VERSION);
+$VERSION = '3.037'; # $Id: //depot/Tk8/Entry/Entry.pm#37 $
+
+# modify it under the same terms as Perl itself, subject
+# to additional disclaimer in license.terms due to partial
+# derivation from Tk4.0 sources.
+
+use Tk::Widget ();
+use Tk::Clipboard ();
+use base qw(Tk::Clipboard Tk::Widget);
+
+import Tk qw(Ev $XS_VERSION);
+
+Construct Tk::Widget 'Entry';
+
+bootstrap Tk::Entry;
+
+sub Tk_cmd { \&Tk::entry }
+
+Tk::Methods('bbox','delete','get','icursor','index','insert','scan',
+ 'selection','xview');
+
+use Tk::Submethods ( 'selection' => [qw(clear range adjust present to from)],
+ 'xview' => [qw(moveto scroll)],
+ );
+
+sub wordstart
+{my ($w,$pos) = @_;
+ my $string = $w->get;
+ $pos = $w->index('insert')-1 unless(defined $pos);
+ $string = substr($string,0,$pos);
+ $string =~ s/\S*$//;
+ length $string;
+}
+
+sub wordend
+{my ($w,$pos) = @_;
+ my $string = $w->get;
+ my $anc = length $string;
+ $pos = $w->index('insert') unless(defined $pos);
+ $string = substr($string,$pos);
+ $string =~ s/^(?:((?=\s)\s*|(?=\S)\S*))//x;
+ $anc - length($string);
+}
+
+sub deltainsert
+{
+ my ($w,$d) = @_;
+ return $w->index('insert')+$d;
+}
+
+#
+# Bind --
+# This procedure is invoked the first time the mouse enters an
+# entry widget or an entry widget receives the input focus. It creates
+# all of the class bindings for entries.
+#
+# Arguments:
+# event - Indicates which event caused the procedure to be invoked
+# (Enter or FocusIn). It is used so that we can carry out
+# the functions of that event in addition to setting up
+# bindings.
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+
+ $class->SUPER::ClassInit($mw);
+
+ # Standard Motif bindings:
+ $mw->bind($class,'<Escape>','selectionClear');
+
+ $mw->bind($class,'<1>',['Button1',Ev('x')]);
+
+ $mw->bind($class,'<B1-Motion>',['MouseSelect',Ev('x')]);
+
+ $mw->bind($class,'<Double-1>',['MouseSelect',Ev('x'),'word','sel.first']);
+ $mw->bind($class,'<Double-Shift-1>',['MouseSelect',Ev('x'),'word']);
+ $mw->bind($class,'<Triple-1>',['MouseSelect',Ev('x'),'line',0]);
+ $mw->bind($class,'<Triple-Shift-1>',['MouseSelect',Ev('x'),'line']);
+
+ $mw->bind($class,'<Shift-1>','Shift_1');
+
+
+ $mw->bind($class,'<B1-Leave>',['AutoScan',Ev('x')]);
+ $mw->bind($class,'<B1-Enter>','CancelRepeat');
+ $mw->bind($class,'<ButtonRelease-1>','CancelRepeat');
+ $mw->bind($class,'<Control-1>','Control_1');
+ $mw->bind($class,'<Left>', ['SetCursor',Ev('deltainsert',-1)]);
+ $mw->bind($class,'<Right>',['SetCursor',Ev('deltainsert',1)]);
+ $mw->bind($class,'<Shift-Left>',['KeySelect',Ev('deltainsert',-1)]);
+ $mw->bind($class,'<Shift-Right>',['KeySelect',Ev('deltainsert',1)]);
+ $mw->bind($class,'<Control-Left>',['SetCursor',Ev(['wordstart'])]);
+ $mw->bind($class,'<Control-Right>',['SetCursor',Ev(['wordend'])]);
+ $mw->bind($class,'<Shift-Control-Left>',['KeySelect',Ev(['wordstart'])]);
+ $mw->bind($class,'<Shift-Control-Right>',['KeySelect',Ev(['wordend'])]);
+ $mw->bind($class,'<Home>',['SetCursor',0]);
+ $mw->bind($class,'<Shift-Home>',['KeySelect',0]);
+ $mw->bind($class,'<End>',['SetCursor','end']);
+ $mw->bind($class,'<Shift-End>',['KeySelect','end']);
+ $mw->bind($class,'<Delete>','Delete');
+
+ $mw->bind($class,'<BackSpace>','Backspace');
+
+ $mw->bind($class,'<Control-space>',['selectionFrom','insert']);
+ $mw->bind($class,'<Select>',['selectionFrom','insert']);
+ $mw->bind($class,'<Control-Shift-space>',['selectionAdjust','insert']);
+ $mw->bind($class,'<Shift-Select>',['selectionAdjust','insert']);
+
+ $mw->bind($class,'<Control-slash>',['selectionRange',0,'end']);
+ $mw->bind($class,'<Control-backslash>','selectionClear');
+
+ # $class->clipboardOperations($mw,qw[Copy Cut Paste]);
+
+ $mw->bind($class,'<KeyPress>', ['Insert',Ev('A')]);
+
+ # Ignore all Alt, Meta, and Control keypresses unless explicitly bound.
+ # Otherwise, if a widget binding for one of these is defined, the
+ # <KeyPress> class binding will also fire and insert the character,
+ # which is wrong. Ditto for Return, and Tab.
+
+ $mw->bind($class,'<Alt-KeyPress>' ,'NoOp');
+ $mw->bind($class,'<Meta-KeyPress>' ,'NoOp');
+ $mw->bind($class,'<Control-KeyPress>' ,'NoOp');
+ $mw->bind($class,'<Return>' ,'NoOp');
+ $mw->bind($class,'<KP_Enter>' ,'NoOp');
+ $mw->bind($class,'<Tab>' ,'NoOp');
+
+ $mw->bind($class,'<Insert>','InsertSelection');
+ if (!$Tk::strictMotif)
+ {
+ # Additional emacs-like bindings:
+ $mw->bind($class,'<Control-a>',['SetCursor',0]);
+ $mw->bind($class,'<Control-b>',['SetCursor',Ev('deltainsert',-1)]);
+ $mw->bind($class,'<Control-d>',['delete','insert']);
+ $mw->bind($class,'<Control-e>',['SetCursor','end']);
+ $mw->bind($class,'<Control-f>',['SetCursor',Ev('deltainsert',1)]);
+ $mw->bind($class,'<Control-h>','Backspace');
+ $mw->bind($class,'<Control-k>',['delete','insert','end']);
+
+ $mw->bind($class,'<Control-t>','Transpose');
+
+ $mw->bind($class,'<Meta-b>',['SetCursor',Ev(['wordstart'])]);
+ $mw->bind($class,'<Meta-d>',['delete','insert',Ev(['wordend'])]);
+ $mw->bind($class,'<Meta-f>',['SetCursor',Ev(['wordend'])]);
+ $mw->bind($class,'<Meta-BackSpace>',['delete',Ev(['wordstart']),'insert']);
+
+ # A few additional bindings from John Ousterhout.
+ $mw->bind($class,'<Control-w>',['delete',Ev(['wordstart']),'insert']);
+ $mw->bind($class,'<2>','Button_2');
+ $mw->bind($class,'<B2-Motion>','B2_Motion');
+ $mw->bind($class,'<ButtonRelease-2>','ButtonRelease_2');
+ }
+ return $class;
+}
+
+sub Shift_1
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $Tk::selectMode = 'char';
+ $w->selectionAdjust('@' . $Ev->x)
+}
+
+
+sub Control_1
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->icursor('@' . $Ev->x)
+}
+
+
+sub Delete
+{
+ my $w = shift;
+ if ($w->selectionPresent)
+ {
+ $w->deleteSelected
+ }
+ else
+ {
+ $w->delete('insert')
+ }
+}
+
+
+sub InsertSelection
+{
+ my $w = shift;
+ eval {local $SIG{__DIE__}; $w->Insert($w->SelectionGet)}
+}
+
+
+sub Button_2
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->scan('mark',$Ev->x);
+ $Tk::x = $Ev->x;
+ $Tk::y = $Ev->y;
+ $Tk::mouseMoved = 0
+}
+
+
+sub B2_Motion
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ if (abs(($Ev->x-$Tk::x)) > 2)
+ {
+ $Tk::mouseMoved = 1
+ }
+ $w->scan('dragto',$Ev->x)
+}
+
+
+sub ButtonRelease_2
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ if (!$Tk::mouseMoved)
+ {
+ eval
+ {local $SIG{__DIE__};
+ $w->insert('insert',$w->SelectionGet);
+ $w->SeeInsert;
+ }
+ }
+}
+
+# Button1 --
+# This procedure is invoked to handle button-1 presses in entry
+# widgets. It moves the insertion cursor, sets the selection anchor,
+# and claims the input focus.
+#
+# Arguments:
+# w - The entry window in which the button was pressed.
+# x - The x-coordinate of the button press.
+sub Button1
+{
+ my $w = shift;
+ my $x = shift;
+ $Tk::selectMode = 'char';
+ $Tk::mouseMoved = 0;
+ $Tk::pressX = $x;
+ $w->icursor('@' . $x);
+ $w->selectionFrom('@' . $x);
+ $w->selectionClear;
+ if ($w->cget('-state') eq 'normal')
+ {
+ $w->focus()
+ }
+}
+# MouseSelect --
+# This procedure is invoked when dragging out a selection with
+# the mouse. Depending on the selection mode (character, word,
+# line) it selects in different-sized units. This procedure
+# ignores mouse motions initially until the mouse has moved from
+# one character to another or until there have been multiple clicks.
+#
+# Arguments:
+# w - The entry window in which the button was pressed.
+# x - The x-coordinate of the mouse.
+sub MouseSelect
+{
+ my $w = shift;
+ my $x = shift;
+ $Tk::selectMode = shift if (@_);
+ my $cur = $w->index('@' . $x);
+ return unless defined $cur;
+ my $anchor = $w->index('anchor');
+ return unless defined $anchor;
+ if (($cur != $anchor) || (abs($Tk::pressX - $x) >= 3))
+ {
+ $Tk::mouseMoved = 1
+ }
+ my $mode = $Tk::selectMode;
+ return unless $mode;
+ if ($mode eq 'char')
+ {
+ if ($Tk::mouseMoved)
+ {
+ if ($cur < $anchor)
+ {
+ $w->selectionTo($cur)
+ }
+ else
+ {
+ $w->selectionTo($cur+1)
+ }
+ }
+ }
+ elsif ($mode eq 'word')
+ {
+ if ($cur < $w->index('anchor'))
+ {
+ $w->selectionRange($w->wordstart($cur),$w->wordend($anchor-1))
+ }
+ else
+ {
+ $w->selectionRange($w->wordstart($anchor),$w->wordend($cur))
+ }
+ }
+ elsif ($mode eq 'line')
+ {
+ $w->selectionRange(0,'end')
+ }
+ if (@_)
+ {
+ my $ipos = shift;
+ eval {local $SIG{__DIE__}; $w->icursor($ipos) };
+ }
+ $w->idletasks;
+}
+# AutoScan --
+# This procedure is invoked when the mouse leaves an entry window
+# with button 1 down. It scrolls the window left or right,
+# depending on where the mouse is, and reschedules itself as an
+# 'after' command so that the window continues to scroll until the
+# mouse moves back into the window or the mouse button is released.
+#
+# Arguments:
+# w - The entry window.
+# x - The x-coordinate of the mouse when it left the window.
+sub AutoScan
+{
+ my $w = shift;
+ my $x = shift;
+ if ($x >= $w->width)
+ {
+ $w->xview('scroll',2,'units')
+ }
+ elsif ($x < 0)
+ {
+ $w->xview('scroll',-2,'units')
+ }
+ else
+ {
+ return;
+ }
+ $w->MouseSelect($x);
+ $w->RepeatId($w->after(50,['AutoScan',$w,$x]))
+}
+# KeySelect
+# This procedure is invoked when stroking out selections using the
+# keyboard. It moves the cursor to a new position, then extends
+# the selection to that position.
+#
+# Arguments:
+# w - The entry window.
+# new - A new position for the insertion cursor (the cursor hasn't
+# actually been moved to this position yet).
+sub KeySelect
+{
+ my $w = shift;
+ my $new = shift;
+ if (!$w->selectionPresent)
+ {
+ $w->selectionFrom('insert');
+ $w->selectionTo($new)
+ }
+ else
+ {
+ $w->selectionAdjust($new)
+ }
+ $w->icursor($new);
+ $w->SeeInsert;
+}
+# Insert --
+# Insert a string into an entry at the point of the insertion cursor.
+# If there is a selection in the entry, and it covers the point of the
+# insertion cursor, then delete the selection before inserting.
+#
+# Arguments:
+# w - The entry window in which to insert the string
+# s - The string to insert (usually just a single character)
+sub Insert
+{
+ my $w = shift;
+ my $s = shift;
+ return unless (defined $s && $s ne '');
+ eval
+ {local $SIG{__DIE__};
+ my $insert = $w->index('insert');
+ if ($w->index('sel.first') <= $insert && $w->index('sel.last') >= $insert)
+ {
+ $w->deleteSelected
+ }
+ };
+ $w->insert('insert',$s);
+ $w->SeeInsert
+}
+# Backspace --
+# Backspace over the character just before the insertion cursor.
+#
+# Arguments:
+# w - The entry window in which to backspace.
+sub Backspace
+{
+ my $w = shift;
+ if ($w->selectionPresent)
+ {
+ $w->deleteSelected
+ }
+ else
+ {
+ my $x = $w->index('insert')-1;
+ $w->delete($x) if ($x >= 0);
+ }
+}
+# SeeInsert
+# Make sure that the insertion cursor is visible in the entry window.
+# If not, adjust the view so that it is.
+#
+# Arguments:
+# w - The entry window.
+sub SeeInsert
+{
+ my $w = shift;
+ my $c = $w->index('insert');
+#
+# Probably a bug in your version of tcl/tk (I've not this problem
+# when I test Entry in the widget demo for tcl/tk)
+# index('\@0') give always 0. Consequence :
+# if you make <Control-E> or <Control-F> view is adapted
+# but with <Control-A> or <Control-B> view is not adapted
+#
+ my $left = $w->index('@0');
+ if ($left > $c)
+ {
+ $w->xview($c);
+ return;
+ }
+ my $x = $w->width;
+ while ($w->index('@' . $x) <= $c && $left < $c)
+ {
+ $left += 1;
+ $w->xview($left)
+ }
+}
+# SetCursor
+# Move the insertion cursor to a given position in an entry. Also
+# clears the selection, if there is one in the entry, and makes sure
+# that the insertion cursor is visible.
+#
+# Arguments:
+# w - The entry window.
+# pos - The desired new position for the cursor in the window.
+sub SetCursor
+{
+ my $w = shift;
+ my $pos = shift;
+ $w->icursor($pos);
+ $w->selectionClear;
+ $w->SeeInsert;
+}
+# Transpose
+# This procedure implements the 'transpose' function for entry widgets.
+# It tranposes the characters on either side of the insertion cursor,
+# unless the cursor is at the end of the line. In this case it
+# transposes the two characters to the left of the cursor. In either
+# case, the cursor ends up to the right of the transposed characters.
+#
+# Arguments:
+# w - The entry window.
+sub Transpose
+{
+ my $w = shift;
+ my $i = $w->index('insert');
+ $i++ if ($i < $w->index('end'));
+ my $first = $i-2;
+ return if ($first < 0);
+ my $str = $w->get;
+ my $new = substr($str,$i-1,1) . substr($str,$first,1);
+ $w->delete($first,$i);
+ $w->insert('insert',$new);
+ $w->SeeInsert;
+}
+
+sub tabFocus
+{
+ my $w = shift;
+ $w->selectionRange(0,'end');
+ $w->icursor('end');
+ $w->SUPER::tabFocus;
+}
+
+sub getSelected
+{
+ my $w = shift;
+ return undef unless $w->selectionPresent;
+ my $str = $w->get;
+ my $show = $w->cget('-show');
+ $str = $show x length($str) if (defined $show);
+ my $s = $w->index('sel.first');
+ my $e = $w->index('sel.last');
+ return substr($str,$s,$e+1-$s);
+}
+
+1;
+
+__END__
+
+
diff --git a/Master/xemtex/perl/site/lib/Tk/Event.pm b/Master/xemtex/perl/site/lib/Tk/Event.pm
new file mode 100644
index 00000000000..b162e475d4a
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Event.pm
@@ -0,0 +1,13 @@
+package Tk::Event;
+use vars qw($VERSION $XS_VERSION @EXPORT_OK);
+END { CleanupGlue() }
+$VERSION = '3.026'; # $Id: //depot/Tk8/Event/Event.pm#26 $
+$XS_VERSION = '800.024';
+require DynaLoader;
+use base qw(Exporter DynaLoader);
+@EXPORT_OK = qw($XS_VERSION DONT_WAIT WINDOW_EVENTS FILE_EVENTS
+ TIMER_EVENTS IDLE_EVENTS ALL_EVENTS);
+bootstrap Tk::Event;
+require Tk::Event::IO;
+1;
+__END__
diff --git a/Master/xemtex/perl/site/lib/Tk/Event/IO.pm b/Master/xemtex/perl/site/lib/Tk/Event/IO.pm
new file mode 100644
index 00000000000..a28ae54147a
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Event/IO.pm
@@ -0,0 +1,122 @@
+package Tk::Event::IO;
+
+use vars qw($VERSION @EXPORT_OK);
+$VERSION = '3.036'; # $Id: //depot/Tk8/Event/Event/IO.pm#12 $ +24
+
+use base qw(Exporter);
+use Symbol ();
+
+@EXPORT_OK = qw(READABLE WRITABLE);
+
+sub PrintArgs
+{
+ my $func = (caller(1))[3];
+ print "$func(",join(',',@_),")\n";
+}
+
+sub PRINT
+{
+ my $obj = shift;
+ $obj->wait(WRITABLE);
+ my $h = $obj->handle;
+ return print $h @_;
+}
+
+sub PRINTF
+{
+ my $obj = shift;
+ $obj->wait(WRITABLE);
+ my $h = $obj->handle;
+ return printf $h @_;
+}
+
+sub WRITE
+{
+ my $obj = $_[0];
+ $obj->wait(WRITABLE);
+ return syswrite($obj->handle,$_[1],$_[2]);
+}
+
+my $depth = 0;
+sub READLINE
+{
+ my $obj = shift;
+ $obj->wait(READABLE);
+ my $h = $obj->handle;
+ my $w = <$h>;
+ return $w;
+}
+
+sub READ
+{
+ my $obj = $_[0];
+ $obj->wait(READABLE);
+ my $h = $obj->handle;
+ return sysread($h,$_[1],$_[2],defined $_[3] ? $_[3] : 0);
+}
+
+sub GETC
+{
+ my $obj = $_[0];
+ $obj->wait(READABLE);
+ my $h = $obj->handle;
+ return getc($h);
+}
+
+sub CLOSE
+{
+ my $obj = shift;
+ $obj->unwatch;
+ my $h = $obj->handle;
+ return close($h);
+}
+
+sub EOF
+{
+ my $obj = shift;
+ my $h = $obj->handle;
+ return eof($h);
+}
+
+sub FILENO
+{
+ my $obj = shift;
+ my $h = $obj->handle;
+ return fileno($h);
+}
+
+sub imode
+{
+ my $mode = shift;
+ my $imode = ${{'readable' => READABLE(),
+ 'writable' => WRITABLE()}}{$mode};
+ croak("Invalid handler type '$mode'") unless (defined $imode);
+ return $imode;
+}
+
+sub fileevent
+{
+ my ($widget,$file,$mode,$cb) = @_;
+ my $imode = imode($mode);
+ unless (ref $file)
+ {
+ no strict 'refs';
+ $file = Symbol::qualify($file,(caller)[0]);
+ $file = \*{$file};
+ }
+ my $obj = tied(*$file);
+ $obj = tie *$file,'Tk::Event::IO', $file unless $obj && $obj->isa('Tk::Event::IO');
+ if (@_ == 3)
+ {
+ return $obj->handler($imode);
+ }
+ else
+ {
+ my $h = $obj->handler($imode,$cb);
+ undef $obj;
+ untie *$file unless $h;
+ }
+}
+
+1;
+__END__
diff --git a/Master/xemtex/perl/site/lib/Tk/FBox.pm b/Master/xemtex/perl/site/lib/Tk/FBox.pm
new file mode 100644
index 00000000000..bcc6ef1bf21
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/FBox.pm
@@ -0,0 +1,891 @@
+# -*- perl -*-
+#
+# tkfbox.tcl --
+#
+# Implements the "TK" standard file selection dialog box. This
+# dialog box is used on the Unix platforms whenever the tk_strictMotif
+# flag is not set.
+#
+# The "TK" standard file selection dialog box is similar to the
+# file selection dialog box on Win95(TM). The user can navigate
+# the directories by clicking on the folder icons or by
+# selecting the "Directory" option menu. The user can select
+# files by clicking on the file icons or by entering a filename
+# in the "Filename:" entry.
+#
+# Copyright (c) 1994-1996 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# Translated to perk/Tk by Slaven Rezic <eserte@cs.tu-berlin.de>.
+#
+
+#----------------------------------------------------------------------
+#
+# F I L E D I A L O G
+#
+#----------------------------------------------------------------------
+# tkFDialog --
+#
+# Implements the TK file selection dialog. This dialog is used when
+# the tk_strictMotif flag is set to false. This procedure shouldn't
+# be called directly. Call tk_getOpenFile or tk_getSaveFile instead.
+#
+
+package Tk::FBox;
+require Tk::Toplevel;
+
+use strict;
+use vars qw($VERSION $updirImage $folderImage $fileImage);
+
+$VERSION = '3.020'; # $Id: //depot/Tk8/Tk/FBox.pm#20 $
+
+use base qw(Tk::Toplevel);
+
+Construct Tk::Widget 'FBox';
+
+my $selectFilePath;
+my $selectFile;
+my $selectPath;
+
+sub import {
+ if (defined $_[1] and $_[1] eq 'as_default') {
+ local $^W = 0;
+ package Tk;
+ *FDialog = \&Tk::FBox::FDialog;
+ *MotifFDialog = \&Tk::FBox::FDialog;
+ }
+}
+
+sub Populate {
+ my($w, $args) = @_;
+
+ require Tk::IconList;
+ require File::Basename;
+ require Cwd;
+
+ $w->SUPER::Populate($args);
+
+ # f1: the frame with the directory option menu
+ my $f1 = $w->Frame;
+ my $lab = $f1->Label(-text => 'Directory:', -underline => 0);
+ $w->{'dirMenu'} = my $dirMenu =
+ $f1->Optionmenu(-variable => \$w->{'selectPath'},
+ -textvariable => \$w->{'selectPath'},
+ -command => ['SetPath', $w]);
+ my $upBtn = $f1->Button;
+ if (!defined $updirImage) {
+ $updirImage = $w->Bitmap(-data => "#define updir_width 28\n" .
+ "#define updir_height 16\n" .
+ <<EOF);
+static char updir_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x40, 0x20, 0x00, 0x00,
+ 0x20, 0x40, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x01, 0x10, 0x00, 0x00, 0x01,
+ 0x10, 0x02, 0x00, 0x01, 0x10, 0x07, 0x00, 0x01, 0x90, 0x0f, 0x00, 0x01,
+ 0x10, 0x02, 0x00, 0x01, 0x10, 0x02, 0x00, 0x01, 0x10, 0x02, 0x00, 0x01,
+ 0x10, 0xfe, 0x07, 0x01, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x01,
+ 0xf0, 0xff, 0xff, 0x01};
+EOF
+ }
+ $upBtn->configure(-image => $updirImage);
+ $dirMenu->configure(-takefocus => 1, -highlightthickness => 2);
+ $upBtn->pack(-side => 'right', -padx => 4, -fill => 'both');
+ $lab->pack(-side => 'left', -padx => 4, -fill => 'both');
+ $dirMenu->pack(-expand => 'yes', -fill => 'both', -padx => 4);
+
+ $w->{'icons'} = my $icons =
+ $w->IconList(-browsecmd => ['ListBrowse', $w],
+ -command => ['ListInvoke', $w],
+ );
+
+ # f2: the frame with the OK button and the "file name" field
+ my $f2 = $w->Frame(-bd => 0);
+ my $f2_lab = $f2->Label(-text => 'File name:', -anchor => 'e',
+ -width => 14, -underline => 5, -pady => 0);
+ $w->{'ent'} = my $ent = $f2->Entry;
+
+ # The font to use for the icons. The default Canvas font on Unix
+ # is just deviant.
+# $w->{'icons'}{'font'} = $ent->cget(-font);
+ $w->{'icons'}->configure(-font => $ent->cget(-font));
+
+ # f3: the frame with the cancel button and the file types field
+ my $f3 = $w->Frame(-bd => 0);
+
+ # The "File of types:" label needs to be grayed-out when
+ # -filetypes are not specified. The label widget does not support
+ # grayed-out text on monochrome displays. Therefore, we have to
+ # use a button widget to emulate a label widget (by setting its
+ # bindtags)
+ $w->{'typeMenuLab'} = my $typeMenuLab = $f3->Button
+ (-text => 'Files of type:',
+ -anchor => 'e',
+ -width => 14,
+ -underline => 9,
+ -bd => $f2_lab->cget(-bd),
+ -highlightthickness => $f2_lab->cget(-highlightthickness),
+ -relief => $f2_lab->cget(-relief),
+ -padx => $f2_lab->cget(-padx),
+ -pady => $f2_lab->cget(-pady),
+ );
+ $typeMenuLab->bindtags([$typeMenuLab, 'Label',
+ $typeMenuLab->toplevel, 'all']);
+ $w->{'typeMenuBtn'} = my $typeMenuBtn =
+ $f3->Menubutton(-indicatoron => 1, -tearoff => 0);
+ $typeMenuBtn->configure(-takefocus => 1,
+ -highlightthickness => 2,
+ -relief => 'raised',
+ -bd => 2,
+ -anchor => 'w',
+ );
+
+ # the okBtn is created after the typeMenu so that the keyboard traversal
+ # is in the right order
+ $w->{'okBtn'} = my $okBtn = $f2->Button
+ (-text => 'OK',
+ -underline => 0,
+ -width => 6,
+ -default => 'active',
+ -pady => 3,
+ );
+ my $cancelBtn = $f3->Button
+ (-text => 'Cancel',
+ -underline => 0,
+ -width => 6,
+ -default => 'normal',
+ -pady => 3,
+ );
+
+ # pack the widgets in f2 and f3
+ $okBtn->pack(-side => 'right', -padx => 4, -anchor => 'e');
+ $f2_lab->pack(-side => 'left', -padx => 4);
+ $ent->pack(-expand => 'yes', -fill => 'x', -padx => 2, -pady => 0);
+ $cancelBtn->pack(-side => 'right', -padx => 4, -anchor => 'w');
+ $typeMenuLab->pack(-side => 'left', -padx => 4);
+ $typeMenuBtn->pack(-expand => 'yes', -fill => 'x', -side => 'right');
+
+ # Pack all the frames together. We are done with widget construction.
+ $f1->pack(-side => 'top', -fill => 'x', -pady => 4);
+ $f3->pack(-side => 'bottom', -fill => 'x');
+ $f2->pack(-side => 'bottom', -fill => 'x');
+ $icons->pack(-expand => 'yes', -fill => 'both', -padx => 4, -pady => 1);
+
+ # Set up the event handlers
+ $ent->bind('<Return>',[$w,'ActivateEnt']);
+ $upBtn->configure(-command => ['UpDirCmd', $w]);
+ $okBtn->configure(-command => ['OkCmd', $w]);
+ $cancelBtn->configure(-command, ['CancelCmd', $w]);
+
+ $w->bind('<Alt-d>',[$dirMenu,'focus']);
+ $w->bind('<Alt-t>',sub {
+ if ($typeMenuBtn->cget(-state) eq 'normal') {
+ $typeMenuBtn->focus;
+ } });
+ $w->bind('<Alt-n>',[$ent,'focus']);
+ $w->bind('<KeyPress-Escape>',[$cancelBtn,'invoke']);
+ $w->bind('<Alt-c>',[$cancelBtn,'invoke']);
+ $w->bind('<Alt-o>',['InvokeBtn','Open']);
+ $w->bind('<Alt-s>',['InvokeBtn','Save']);
+ $w->protocol('WM_DELETE_WINDOW', ['CancelCmd', $w]);
+ $w->OnDestroy(['CancelCmd', $w]);
+
+ # Build the focus group for all the entries
+ $w->FG_Create;
+ $w->FG_BindIn($ent, ['EntFocusIn', $w]);
+ $w->FG_BindOut($ent, ['EntFocusOut', $w]);
+
+ $w->SetPath(_cwd());
+
+ $w->ConfigSpecs(-defaultextension => ['PASSIVE', undef, undef, undef],
+ -filetypes => ['PASSIVE', undef, undef, undef],
+ -initialdir => ['PASSIVE', undef, undef, undef],
+ -initialfile => ['PASSIVE', undef, undef, undef],
+ -title => ['PASSIVE', undef, undef, undef],
+ -type => ['PASSIVE', undef, undef, 'open'],
+ -filter => ['PASSIVE', undef, undef, '*'],
+ -force => ['PASSIVE', undef, undef, 0],
+ 'DEFAULT' => [$icons],
+ );
+ # So-far-failed attempt to break reference loops ...
+ $w->_OnDestroy(qw(dirMenu icons typeMenuLab typeMenuBtn okBtn ent updateId));
+ $w;
+}
+
+
+sub Show {
+ my $w = shift;
+
+ $w->configure(@_);
+
+ $w->transient($w->Parent);
+
+ # set the default directory and selection according to the -initial
+ # settings
+ {
+ my $initialdir = $w->cget(-initialdir);
+ if (defined $initialdir) {
+ if (-d $initialdir) {
+ $w->{'selectPath'} = $initialdir;
+ } else {
+ $w->Error("\"$initialdir\" is not a valid directory");
+ }
+ }
+ $w->{'selectFile'} = $w->cget(-initialfile);
+ }
+
+ # Initialize the file types menu
+ my $typeMenuBtn = $w->{'typeMenuBtn'};
+ my $typeMenuLab = $w->{'typeMenuLab'};
+ if (defined $w->cget('-filetypes')) {
+ my(@filetypes) = GetFileTypes($w->cget('-filetypes'));
+ my $typeMenu = $typeMenuBtn->cget(-menu);
+ $typeMenu->delete(0, 'end');
+ foreach my $ft (@filetypes) {
+ my $title = $ft->[0];
+ my $filter = join(' ', @{ $ft->[1] });
+ $typeMenuBtn->command
+ (-label => $title,
+ -command => ['SetFilter', $w, $title, $filter],
+ );
+ }
+ $w->SetFilter($filetypes[0]->[0], join(' ', @{ $filetypes[0]->[1] }));
+ $typeMenuBtn->configure(-state => 'normal');
+ $typeMenuLab->configure(-state => 'normal');
+ } else {
+ $w->configure(-filter => '*');
+ $typeMenuBtn->configure(-state => 'disabled',
+ -takefocus => 0);
+ $typeMenuLab->configure(-state => 'disabled');
+ }
+ $w->UpdateWhenIdle;
+
+ # Withdraw the window, then update all the geometry information
+ # so we know how big it wants to be, then center the window in the
+ # display and de-iconify it.
+ $w->withdraw;
+ $w->idletasks;
+ my $x = int($w->screenwidth / 2 - $w->reqwidth / 2 - $w->parent->vrootx);
+ my $y = int($w->screenheight / 2 - $w->reqheight / 2 - $w->parent->vrooty);
+ $w->geometry("+$x+$y");
+
+ {
+ my $title = $w->cget(-title);
+ if (!defined $title) {
+ $title = ($w->cget(-type) eq 'open' ? 'Open' : 'Save As');
+ }
+ $w->title($title);
+ }
+
+ $w->deiconify;
+ # Set a grab and claim the focus too.
+ my $oldFocus = $w->focusCurrent;
+ my $oldGrab = $w->grabCurrent;
+ my $grabStatus = $oldGrab->grabStatus if ($oldGrab);
+ $w->grab;
+ my $ent = $w->{'ent'};
+ $ent->focus;
+ $ent->delete(0, 'end');
+ $ent->insert(0, $w->{'selectFile'});
+ $ent->selectionFrom(0);
+ $ent->selectionTo('end');
+ $ent->icursor('end');
+
+ # 8. Wait for the user to respond, then restore the focus and
+ # return the index of the selected button. Restore the focus
+ # before deleting the window, since otherwise the window manager
+ # may take the focus away so we can't redirect it. Finally,
+ # restore any grab that was in effect.
+ $w->waitVariable(\$selectFilePath);
+ eval {
+ $oldFocus->focus if $oldFocus;
+ };
+ if (Tk::Exists($w)) { # widget still exists
+ $w->grabRelease;
+ $w->withdraw;
+ }
+ if ($oldGrab) {
+ if ($grabStatus eq 'global') {
+ $oldGrab->grabGlobal;
+ } else {
+ $oldGrab->grab;
+ }
+ }
+ return $selectFilePath;
+}
+
+# tkFDialog_UpdateWhenIdle --
+#
+# Creates an idle event handler which updates the dialog in idle
+# time. This is important because loading the directory may take a long
+# time and we don't want to load the same directory for multiple times
+# due to multiple concurrent events.
+#
+sub UpdateWhenIdle {
+ my $w = shift;
+ if (exists $w->{'updateId'}) {
+ return;
+ } else {
+ $w->{'updateId'} = $w->after('idle', [$w, 'Update']);
+ }
+}
+
+# tkFDialog_Update --
+#
+# Loads the files and directories into the IconList widget. Also
+# sets up the directory option menu for quick access to parent
+# directories.
+#
+sub Update {
+ my $w = shift;
+ my $dataName = $w->name;
+
+ # This proc may be called within an idle handler. Make sure that the
+ # window has not been destroyed before this proc is called
+ if (!Tk::Exists($w) || $w->class ne 'FBox') {
+ return;
+ } else {
+ delete $w->{'updateId'};
+ }
+ unless (defined $folderImage) {
+ require Tk::Pixmap;
+ $folderImage = $w->Pixmap(-file => Tk->findINC('folder.xpm'));
+ $fileImage = $w->Pixmap(-file => Tk->findINC('file.xpm'));
+ }
+ my $folder = $folderImage;
+ my $file = $fileImage;
+ my $appPWD = _cwd();
+ if (!ext_chdir($w->{'selectPath'})) {
+ # We cannot change directory to $data(selectPath). $data(selectPath)
+ # should have been checked before tkFDialog_Update is called, so
+ # we normally won't come to here. Anyways, give an error and abort
+ # action.
+ $w->messageBox(-type => 'OK',
+ -message => 'Cannot change to the directory "' .
+ $w->{'selectPath'} . "\".\nPermission denied.",
+ -icon => 'warning',
+ );
+ ext_chdir($appPWD);
+ return;
+ }
+
+ # Turn on the busy cursor. BUG?? We haven't disabled X events, though,
+ # so the user may still click and cause havoc ...
+ my $ent = $w->{'ent'};
+ my $entCursor = $ent->cget(-cursor);
+ my $dlgCursor = $w->cget(-cursor);
+ $ent->configure(-cursor => 'watch');
+ $w->configure(-cursor => 'watch');
+ $w->idletasks;
+ my $icons = $w->{'icons'};
+ $icons->DeleteAll;
+
+ # Make the dir & file list
+ my $flt = join('|', split(' ', $w->cget(-filter)) );
+ $flt =~ s!([\.\+])!\\$1!g;
+ $flt =~ s!\*!.*!g;
+ local *FDIR;
+ if( opendir( FDIR, _cwd() )) {
+ my @files;
+ foreach my $f (sort { lc($a) cmp lc($b) } readdir FDIR) {
+ next if $f eq '.' or $f eq '..';
+ if (-d $f) { $icons->Add($folder, $f); }
+ elsif( $f =~ m!$flt$! ) { push( @files, $f ); }
+ }
+ closedir( FDIR );
+ foreach my $f ( @files ) { $icons->Add($file, $f); }
+ }
+
+ $icons->Arrange;
+
+ # Update the Directory: option menu
+ my @list;
+ my $dir = '';
+ foreach my $subdir (TclFileSplit($w->{'selectPath'})) {
+ $dir = TclFileJoin($dir, $subdir);
+ push @list, $dir;
+ }
+ my $dirMenu = $w->{'dirMenu'};
+ $dirMenu->configure(-options => \@list);
+
+ # Restore the PWD to the application's PWD
+ ext_chdir($appPWD);
+
+ # Restore the Save label
+ if ($w->cget(-type) eq 'save') {
+ $w->{'okBtn'}->configure(-text => 'Save');
+ }
+
+ # turn off the busy cursor.
+ $ent->configure(-cursor => $entCursor);
+ $w->configure(-cursor => $dlgCursor);
+}
+
+# tkFDialog_SetPathSilently --
+#
+# Sets data(selectPath) without invoking the trace procedure
+#
+sub SetPathSilently {
+ my($w, $path) = @_;
+
+ $w->{'selectPath'} = $path;
+}
+
+# This proc gets called whenever data(selectPath) is set
+#
+sub SetPath {
+ my $w = shift;
+ $w->{'selectPath'} = $_[0] if @_;
+ $w->UpdateWhenIdle;
+}
+
+# This proc gets called whenever data(filter) is set
+#
+sub SetFilter {
+ my($w, $title, $filter) = @_;
+ $w->configure(-filter => $filter);
+ $w->{'typeMenuBtn'}->configure(-text => $title,
+ -indicatoron => 1);
+ $w->{'icons'}->Subwidget('sbar')->set(0.0, 0.0);
+ $w->UpdateWhenIdle;
+}
+
+# tkFDialogResolveFile --
+#
+# Interpret the user's text input in a file selection dialog.
+# Performs:
+#
+# (1) ~ substitution
+# (2) resolve all instances of . and ..
+# (3) check for non-existent files/directories
+# (4) check for chdir permissions
+#
+# Arguments:
+# context: the current directory you are in
+# text: the text entered by the user
+# defaultext: the default extension to add to files with no extension
+#
+# Return value:
+# [list $flag $directory $file]
+#
+# flag = OK : valid input
+# = PATTERN : valid directory/pattern
+# = PATH : the directory does not exist
+# = FILE : the directory exists but the file doesn't
+# exist
+# = CHDIR : Cannot change to the directory
+# = ERROR : Invalid entry
+#
+# directory : valid only if flag = OK or PATTERN or FILE
+# file : valid only if flag = OK or PATTERN
+#
+# directory may not be the same as context, because text may contain
+# a subdirectory name
+#
+sub ResolveFile {
+ my($context, $text, $defaultext) = @_;
+ my $appPWD = _cwd();
+ my $path = JoinFile($context, $text);
+ $path = "$path$defaultext" if ($path !~ /\..+$/) and defined $defaultext;
+ # Cannot just test for existance here as non-existing files are
+ # not an error for getSaveFile type dialogs.
+ # return ('ERROR', $path, "") if (!-e $path);
+ my($directory, $file, $flag);
+ if (-e $path) {
+ if (-d $path) {
+ if (!ext_chdir($path)) {
+ return ('CHDIR', $path, '');
+ }
+ $directory = _cwd();
+ $file = '';
+ $flag = 'OK';
+ ext_chdir($appPWD);
+ } else {
+ my $dirname = File::Basename::dirname($path);
+ if (!ext_chdir($dirname)) {
+ return ('CHDIR', $dirname, '');
+ }
+ $directory = _cwd();
+ $file = File::Basename::basename($path);
+ $flag = 'OK';
+ ext_chdir($appPWD);
+ }
+ } else {
+ my $dirname = File::Basename::dirname($path);
+ if (-e $dirname) {
+ if (!ext_chdir($dirname)) {
+ return ('CHDIR', $dirname, '');
+ }
+ $directory = _cwd();
+ $file = File::Basename::basename($path);
+ if ($file =~ /[*?]/) {
+ $flag = 'PATTERN';
+ } else {
+ $flag = 'FILE';
+ }
+ ext_chdir($appPWD);
+ } else {
+ $directory = $dirname;
+ $file = File::Basename::basename($path);
+ $flag = 'PATH';
+ }
+ }
+ return ($flag,$directory,$file);
+}
+
+# Gets called when the entry box gets keyboard focus. We clear the selection
+# from the icon list . This way the user can be certain that the input in the
+# entry box is the selection.
+#
+sub EntFocusIn {
+ my $w = shift;
+ my $ent = $w->{'ent'};
+ if ($ent->get ne '') {
+ $ent->selectionFrom(0);
+ $ent->selectionTo('end');
+ $ent->icursor('end');
+ } else {
+ $ent->selectionClear;
+ }
+ $w->{'icons'}->Unselect;
+ my $okBtn = $w->{'okBtn'};
+ if ($w->cget(-type) eq 'open') {
+ $okBtn->configure(-text => 'Open');
+ } else {
+ $okBtn->configure(-text => 'Save');
+ }
+}
+
+sub EntFocusOut {
+ my $w = shift;
+ $w->{'ent'}->selectionClear;
+}
+
+# Gets called when user presses Return in the "File name" entry.
+#
+sub ActivateEnt {
+ my $w = shift;
+ my $ent = $w->{'ent'};
+ my $text = $ent->get;
+ $text =~ s/^\s+//;
+ $text =~ s/\s+$//;
+ my($flag, $path, $file) = ResolveFile($w->{'selectPath'}, $text,
+ $w->cget(-defaultextension));
+ if ($flag eq 'OK') {
+ if ($file eq '') {
+ # user has entered an existing (sub)directory
+ $w->SetPath($path);
+ $ent->delete(0, 'end');
+ } else {
+ $w->SetPathSilently($path);
+ $w->{'selectFile'} = $file;
+ $w->Done;
+ }
+ } elsif ($flag eq 'PATTERN') {
+ $w->SetPath($path);
+ $w->configure(-filter => $file);
+ } elsif ($flag eq 'FILE') {
+ if ($w->cget(-type) eq 'open') {
+ $w->messageBox(-icon => 'warning',
+ -type => 'OK',
+ -message => 'File "' . TclFileJoin($path, $file)
+ . '" does not exist.');
+ $ent->selection('from', 0);
+ $ent->selection('to', 'end');
+ $ent->icursor('end');
+ } else {
+ $w->SetPathSilently($path);
+ $w->{'selectFile'} = $file;
+ $w->Done;
+ }
+ } elsif ($flag eq 'PATH') {
+ $w->messageBox(-icon => 'warning',
+ -type => 'OK',
+ -message => "Directory \'$path\' does not exist.");
+ $ent->selection('from', 0);
+ $ent->selection('to', 'end');
+ $ent->icursor('end');
+ } elsif ($flag eq 'CHDIR') {
+ $w->messageBox(-type => 'OK',
+ -message => "Cannot change to the directory \"$path\".\nPermission denied.",
+ -icon => 'warning');
+ $ent->selection('from', 0);
+ $ent->selection('to', 'end');
+ $ent->icursor('end');
+ } elsif ($flag eq 'ERROR') {
+ $w->messageBox(-type => 'OK',
+ -message => "Invalid file name \"$path\".",
+ -icon => 'warning');
+ $ent->selection('from', 0);
+ $ent->selection('to', 'end');
+ $ent->icursor('end');
+ }
+}
+
+# Gets called when user presses the Alt-s or Alt-o keys.
+#
+sub InvokeBtn {
+ my($w, $key) = @_;
+ my $okBtn = $w->{'okBtn'};
+ $okBtn->invoke if ($okBtn->cget(-text) eq $key);
+}
+
+# Gets called when user presses the "parent directory" button
+#
+sub UpDirCmd {
+ my $w = shift;
+ $w->SetPath(File::Basename::dirname($w->{'selectPath'}))
+ unless ($w->{'selectPath'} eq '/');
+}
+
+# Join a file name to a path name. The "file join" command will break
+# if the filename begins with ~
+sub JoinFile {
+ my($path, $file) = @_;
+ if ($file =~ /^~/ && -e "$path/$file") {
+ TclFileJoin($path, "./$file");
+ } else {
+ TclFileJoin($path, $file);
+ }
+}
+
+# XXX replace with File::Spec when perl/Tk depends on 5.005
+sub TclFileJoin {
+ my $path = '';
+ foreach (@_) {
+ if (m|^/|) {
+ $path = $_;
+ }
+ elsif (m|^[a-z]:/|i) { # DOS-ish
+ $path = $_;
+ } elsif ($_ eq '~') {
+ $path = _get_homedir();
+ } elsif (m|^~/(.*)|) {
+ $path = _get_homedir() . "/" . $1;
+ } elsif (m|^~([^/]+)(.*)|) {
+ my($user, $p) = ($1, $2);
+ my $dir = _get_homedir($user);
+ if (!defined $dir) {
+ $path = "~$user$p";
+ } else {
+ $path = $dir . $p;
+ }
+ } elsif ($path eq '/' or $path eq '') {
+ $path .= $_;
+ } else {
+ $path .= "/$_";
+ }
+ }
+ $path;
+}
+
+sub TclFileSplit {
+ my $path = shift;
+ my @comp;
+ $path =~ s|/+|/|g; # strip multiple slashes
+ if ($path =~ m|^/|) {
+ push @comp, '/';
+ $path = substr($path, 1);
+ }
+ push @comp, split /\//, $path;
+ @comp;
+}
+
+# Gets called when user presses the "OK" button
+#
+sub OkCmd {
+ my $w = shift;
+ my $text = $w->{'icons'}->Get;
+ if (defined $text and $text ne '') {
+ my $file = JoinFile($w->{'selectPath'}, $text);
+ if (-d $file) {
+ $w->ListInvoke($text);
+ return;
+ }
+ }
+ $w->ActivateEnt;
+}
+
+# Gets called when user presses the "Cancel" button
+#
+sub CancelCmd {
+ undef $selectFilePath;
+}
+
+# Gets called when user browses the IconList widget (dragging mouse, arrow
+# keys, etc)
+#
+sub ListBrowse {
+ my($w, $text) = @_;
+ return if ($text eq '');
+ my $file = JoinFile($w->{'selectPath'}, $text);
+ my $ent = $w->{'ent'};
+ my $okBtn = $w->{'okBtn'};
+ unless (-d $file) {
+ $ent->delete(0, 'end');
+ $ent->insert(0, $text);
+ if ($w->cget(-type) eq 'open') {
+ $okBtn->configure(-text => 'Open');
+ } else {
+ $okBtn->configure(-text => 'Save');
+ }
+ } else {
+ $okBtn->configure(-text => 'Open');
+ }
+}
+
+# Gets called when user invokes the IconList widget (double-click,
+# Return key, etc)
+#
+sub ListInvoke {
+ my($w, $text) = @_;
+ return if ($text eq '');
+ my $file = JoinFile($w->{'selectPath'}, $text);
+ if (-d $file) {
+ my $appPWD = _cwd();
+ if (!ext_chdir($file)) {
+ $w->messageBox(-type => 'OK',
+ -message => "Cannot change to the directory \"$file\".\nPermission denied.",
+ -icon => 'warning');
+ } else {
+ ext_chdir($appPWD);
+ $w->SetPath($file);
+ }
+ } else {
+ $w->{'selectFile'} = $file;
+ $w->Done;
+ }
+}
+
+# tkFDialog_Done --
+#
+# Gets called when user has input a valid filename. Pops up a
+# dialog box to confirm selection when necessary. Sets the
+# tkPriv(selectFilePath) variable, which will break the "tkwait"
+# loop in tkFDialog and return the selected filename to the
+# script that calls tk_getOpenFile or tk_getSaveFile
+#
+sub Done {
+ my $w = shift;
+ my $_selectFilePath = (@_) ? shift : '';
+ if ($_selectFilePath eq '') {
+ $_selectFilePath = JoinFile($w->{'selectPath'}, $w->{'selectFile'});
+ if (-e $_selectFilePath and
+ $w->cget(-type) eq 'save' and
+ !$w->cget(-force)) {
+ my $reply = $w->messageBox
+ (-icon => 'warning',
+ -type => 'YesNo',
+ -message => "File \"$_selectFilePath\" already exists.\nDo you want to overwrite it?");
+ return unless (lc($reply) eq 'yes');
+ }
+ }
+ $selectFilePath = ($_selectFilePath ne '' ? $_selectFilePath : undef);
+}
+
+sub FDialog {
+ my $cmd = shift;
+ if ($cmd =~ /Save/) {
+ push @_, -type => 'save';
+ }
+ Tk::DialogWrapper('FBox', $cmd, @_);
+}
+
+# tkFDGetFileTypes --
+#
+# Process the string given by the -filetypes option of the file
+# dialogs. Similar to the C function TkGetFileFilters() on the Mac
+# and Windows platform.
+#
+sub GetFileTypes {
+ my $in = shift;
+ my %fileTypes;
+ foreach my $t (@$in) {
+ if (@$t < 2 || @$t > 3) {
+ require Carp;
+ Carp::croak("bad file type \"$t\", should be \"typeName [extension ?extensions ...?] ?[macType ?macTypes ...?]?\"");
+ }
+ push @{ $fileTypes{$t->[0]} }, (ref $t->[1] eq 'ARRAY'
+ ? @{ $t->[1] }
+ : $t->[1]);
+ }
+
+ my @types;
+ my %hasDoneType;
+ my %hasGotExt;
+ foreach my $t (@$in) {
+ my $label = $t->[0];
+ my @exts;
+
+ next if (exists $hasDoneType{$label});
+
+ my $name = "$label (";
+ my $sep = '';
+ foreach my $ext (@{ $fileTypes{$label} }) {
+ next if ($ext eq '');
+ $ext =~ s/^\./*./;
+ if (!exists $hasGotExt{$label}->{$ext}) {
+ $name .= "$sep$ext";
+ push @exts, $ext;
+ $hasGotExt{$label}->{$ext}++;
+ }
+ $sep = ',';
+ }
+ $name .= ')';
+ push @types, [$name, \@exts];
+
+ $hasDoneType{$label}++;
+ }
+
+ return @types;
+}
+
+# ext_chdir --
+#
+# Change directory with tilde substitution
+#
+sub ext_chdir {
+ my $dir = shift;
+ if ($dir eq '~') {
+ chdir _get_homedir();
+ } elsif ($dir =~ m|^~/(.*)|) {
+ chdir _get_homedir() . "/" . $1;
+ } elsif ($dir =~ m|^~([^/]+(.*))|) {
+ chdir _get_homedir($1) . $2;
+ } else {
+ chdir $dir;
+ }
+}
+
+# _get_homedir --
+#
+# Get home directory of the current user
+#
+sub _get_homedir {
+ my($user) = @_;
+ if (!defined $user) {
+ eval {
+ local $SIG{__DIE__};
+ (getpwuid($<))[7];
+ } || $ENV{HOME} || undef; # chdir undef changes to home directory, too
+ } else {
+ eval {
+ local $SIG{__DIE__};
+ (getpwnam($user))[7];
+ };
+ }
+}
+
+sub _cwd {
+ #Cwd::cwd();
+ Cwd::fastcwd(); # this is taint-safe
+}
+
+sub _untaint {
+ my $s = shift;
+ $s =~ /^(.*)$/;
+ $1;
+}
+
+1;
+
diff --git a/Master/xemtex/perl/site/lib/Tk/Frame.pm b/Master/xemtex/perl/site/lib/Tk/Frame.pm
new file mode 100644
index 00000000000..b80937b8189
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Frame.pm
@@ -0,0 +1,373 @@
+# Copyright (c) 1995-1999 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Frame;
+require Tk::Widget;
+require Tk::Derived;
+use AutoLoader;
+use strict qw(vars);
+use Carp;
+
+use base qw(Tk::Derived Tk::Widget);
+
+Construct Tk::Widget 'Frame';
+
+
+use vars qw($VERSION);
+$VERSION = '3.031'; # $Id: //depot/Tk8/Tk/Frame.pm#31 $
+
+sub Tk_cmd { \&Tk::frame }
+
+sub CreateOptions
+{
+ return (shift->SUPER::CreateOptions,'-colormap','-visual','-container')
+}
+
+sub Default
+{
+ my ($cw,$name,$widget) = @_;
+ confess 'No name' unless (defined $name);
+ croak 'No widget' unless (defined $widget);
+ $cw->Delegates(DEFAULT => $widget);
+ $cw->ConfigSpecs(DEFAULT => [$widget]);
+ $widget->pack('-expand' => 1, -fill => 'both') unless ($widget->manager); # Suspect
+ $cw->Advertise($name,$widget);
+}
+
+sub ConfigDelegate
+{
+ my ($cw,$name,@skip) = @_;
+ my $sw = $cw->Subwidget($name);
+ my $sc;
+ my %skip = ();
+ foreach $sc (@skip)
+ {
+ $skip{$sc} = 1;
+ }
+ foreach $sc ($sw->configure)
+ {
+ my (@info) = @$sc;
+ next if (@info == 2);
+ my $option = $info[0];
+ unless ($skip{$option})
+ {
+ $option =~ s/^-(.*)/-$name\u$1/;
+ $info[0] = Tk::Configure->new($sw,$info[0]);
+ pop(@info);
+ $cw->ConfigSpecs($option => \@info);
+ }
+ }
+}
+
+sub bind
+{my ($cw,@args) = @_;
+ $cw->Delegate('bind',@args);
+}
+
+sub menu
+{my ($cw,@args) = @_;
+ $cw->Delegate('menu',@args);
+}
+
+sub focus
+{my ($cw,@args) = @_;
+ $cw->Delegate('focus',@args);
+}
+
+#sub bindtags
+#{my ($cw,@args) = @_;
+# $cw->Delegate('bindtags',@args);
+#}
+
+sub selection
+{my ($cw,@args) = @_;
+ $cw->Delegate('selection',@args);
+}
+
+sub Populate
+{
+ my ($cw,$args) = @_;
+ $cw->ConfigSpecs('-labelPack' => [ 'METHOD', undef, undef, undef]);
+ $cw->ConfigSpecs('-labelVariable' => [ 'METHOD', undef, undef, undef]);
+ $cw->ConfigSpecs('-label' => [ 'METHOD', undef, undef, undef]);
+ $cw->labelPack([]) if grep /^-label\w+/, keys %$args;
+}
+
+sub Menubar
+{
+ my $frame = shift;
+ my $menu = $frame->cget('-menu');
+ if (defined $menu)
+ {
+ $menu->configure(@_) if @_;
+ }
+ else
+ {
+ $menu = $frame->Menu(-type => 'menubar',@_);
+ $frame->configure('-menu' => $menu);
+ }
+ $frame->Advertise('menubar' => $menu);
+ return $menu;
+}
+
+1;
+
+__END__
+
+sub labelPack
+{
+ my ($cw,$val) = @_;
+ my $w = $cw->Subwidget('label');
+ my @result = ();
+ if (@_ > 1)
+ {
+ if (defined($w) && !defined($val))
+ {
+ $w->packForget;
+ }
+ elsif (defined($val) && !defined ($w))
+ {
+ require Tk::Label;
+ $w = Tk::Label->new($cw,-textvariable => $cw->labelVariable);
+ $cw->Advertise('label' => $w);
+ $cw->ConfigDelegate('label',qw(-text -textvariable));
+ }
+ if (defined($val) && defined($w))
+ {
+ my %pack = @$val;
+ unless (exists $pack{-side})
+ {
+ $pack{-side} = 'top' unless (exists $pack{-side});
+ }
+ unless (exists $pack{-fill})
+ {
+ $pack{-fill} = 'x' if ($pack{-side} =~ /(top|bottom)/);
+ $pack{-fill} = 'y' if ($pack{-side} =~ /(left|right)/);
+ }
+ unless (exists($pack{'-before'}) || exists($pack{'-after'}))
+ {
+ my $before = ($cw->packSlaves)[0];
+ $pack{'-before'} = $before if (defined $before);
+ }
+ $w->pack(%pack);
+ }
+ }
+ @result = $w->packInfo if (defined $w);
+ return (wantarray) ? @result : \@result;
+}
+
+sub labelVariable
+{
+ my ($cw,$val) = @_;
+ my $var = \$cw->{Configure}{'-labelVariable'};
+ if (@_ > 1 && defined $val)
+ {
+ $$var = $val;
+ $$val = '' unless (defined $$val);
+ my $w = $cw->Subwidget('label');
+ unless (defined $w)
+ {
+ $cw->labelPack([]);
+ $w = $cw->Subwidget('label');
+ }
+ $w->configure(-textvariable => $val);
+ }
+ return $$var;
+}
+
+sub label
+{
+ my ($cw,$val) = @_;
+ my $var = $cw->cget('-labelVariable');
+ if (@_ > 1 && defined $val)
+ {
+ if (!defined $var)
+ {
+ $var = \$cw->{Configure}{'-label'};
+ $cw->labelVariable($var);
+ }
+ $$var = $val;
+ }
+ return (defined $var) ? $$var : undef;;
+}
+
+sub queuePack
+{
+ my ($cw) = @_;
+ unless ($cw->{'pack_pending'})
+ {
+ $cw->{'pack_pending'} = 1;
+ $cw->afterIdle([$cw,'packscrollbars']);
+ }
+}
+
+sub sbset
+{
+ my ($cw,$sb,$ref,@args) = @_;
+ $sb->set(@args);
+ $cw->queuePack if (@args == 2 && $sb->Needed != $$ref);
+}
+
+sub freeze_on_map
+{
+ my ($w) = @_;
+ unless ($w->Tk::bind('Freeze','<Map>'))
+ {
+ $w->Tk::bind('Freeze','<Map>',['packPropagate' => 0])
+ }
+ $w->AddBindTag('Freeze');
+}
+
+sub AddScrollbars
+{
+ require Tk::Scrollbar;
+ my ($cw,$w) = @_;
+ my $def = '';
+ my ($x,$y) = ('','');
+ my $s = 0;
+ my $c;
+ $cw->freeze_on_map;
+ foreach $c ($w->configure)
+ {
+ my $opt = $c->[0];
+ if ($opt eq '-yscrollcommand')
+ {
+ my $slice = Tk::Frame->new($cw,Name => 'ysbslice');
+ my $ysb = Tk::Scrollbar->new($slice,-orient => 'vertical', -command => [ 'yview', $w ]);
+ my $size = $ysb->cget('-width');
+ my $corner = Tk::Frame->new($slice,Name=>'corner','-relief' => 'raised',
+ '-width' => $size, '-height' => $size);
+ $ysb->pack(-side => 'left', -fill => 'y');
+ $cw->Advertise('yscrollbar' => $ysb);
+ $cw->Advertise('corner' => $corner);
+ $cw->Advertise('ysbslice' => $slice);
+ $corner->{'before'} = $ysb->PathName;
+ $slice->{'before'} = $w->PathName;
+ $y = 'w';
+ $s = 1;
+ }
+ elsif ($opt eq '-xscrollcommand')
+ {
+ my $xsb = Tk::Scrollbar->new($cw,-orient => 'horizontal', -command => [ 'xview', $w ]);
+ $cw->Advertise('xscrollbar' => $xsb);
+ $xsb->{'before'} = $w->PathName;
+ $x = 's';
+ $s = 1;
+ }
+ }
+ if ($s)
+ {
+ $cw->Advertise('scrolled' => $w);
+ $cw->ConfigSpecs('-scrollbars' => ['METHOD','scrollbars','Scrollbars',$x.$y]);
+ }
+}
+
+sub packscrollbars
+{
+ my ($cw) = @_;
+ my $opt = $cw->cget('-scrollbars');
+ my $slice = $cw->Subwidget('ysbslice');
+ my $xsb = $cw->Subwidget('xscrollbar');
+ my $corner = $cw->Subwidget('corner');
+ my $w = $cw->Subwidget('scrolled');
+ my $xside = (($opt =~ /n/) ? 'top' : 'bottom');
+ my $havex = 0;
+ my $havey = 0;
+ $opt =~ s/r//;
+ $cw->{'pack_pending'} = 0;
+ if (defined $slice)
+ {
+ my $reqy;
+ my $ysb = $cw->Subwidget('yscrollbar');
+ if ($opt =~ /(o)?[we]/ && (($reqy = !defined($1)) || $ysb->Needed))
+ {
+ my $yside = (($opt =~ /w/) ? 'left' : 'right');
+ $slice->pack(-side => $yside, -fill => 'y',-before => $slice->{'before'});
+ $havey = 1;
+ if ($reqy)
+ {
+ $w->configure(-yscrollcommand => ['set', $ysb]);
+ }
+ else
+ {
+ $w->configure(-yscrollcommand => ['sbset', $cw, $ysb, \$cw->{'packysb'}]);
+ }
+ }
+ else
+ {
+ $w->configure(-yscrollcommand => undef) unless $opt =~ s/[we]//;
+ $slice->packForget;
+ }
+ $cw->{'packysb'} = $havey;
+ }
+ if (defined $xsb)
+ {
+ my $reqx;
+ if ($opt =~ /(o)?[ns]/ && (($reqx = !defined($1)) || $xsb->Needed))
+ {
+ $xsb->pack(-side => $xside, -fill => 'x',-before => $xsb->{'before'});
+ $havex = 1;
+ if ($reqx)
+ {
+ $w->configure(-xscrollcommand => ['set', $xsb]);
+ }
+ else
+ {
+ $w->configure(-xscrollcommand => ['sbset', $cw, $xsb, \$cw->{'packxsb'}]);
+ }
+ }
+ else
+ {
+ $w->configure(-xscrollcommand => undef) unless $opt =~ s/[ns]//;
+ $xsb->packForget;
+ }
+ $cw->{'packxsb'} = $havex;
+ }
+ if (defined $corner)
+ {
+ if ($havex && $havey && defined $corner->{'before'})
+ {
+ my $anchor = $opt;
+ $anchor =~ s/o//g;
+ $corner->configure(-height => $xsb->ReqHeight);
+ $corner->pack(-before => $corner->{'before'}, -side => $xside,
+ -anchor => $anchor, -fill => 'x');
+ }
+ else
+ {
+ $corner->packForget;
+ }
+ }
+}
+
+sub scrollbars
+{
+ my ($cw,$opt) = @_;
+ my $var = \$cw->{'-scrollbars'};
+ if (@_ > 1)
+ {
+ my $old = $$var;
+ if (!defined $old || $old ne $opt)
+ {
+ $$var = $opt;
+ $cw->queuePack;
+ }
+ }
+ return $$var;
+}
+
+sub FindMenu
+{
+ my ($w,$char) = @_;
+ my $child;
+ my $match;
+ foreach $child ($w->children)
+ {
+ next unless (ref $child);
+ $match = $child->FindMenu($char);
+ return $match if (defined $match);
+ }
+ return undef;
+}
+
+
diff --git a/Master/xemtex/perl/site/lib/Tk/IconList.pm b/Master/xemtex/perl/site/lib/Tk/IconList.pm
new file mode 100644
index 00000000000..1c83e740887
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/IconList.pm
@@ -0,0 +1,536 @@
+# -*- perl -*-
+#
+# tkfbox.tcl --
+#
+# Implements the "TK" standard file selection dialog box. This
+# dialog box is used on the Unix platforms whenever the tk_strictMotif
+# flag is not set.
+#
+# The "TK" standard file selection dialog box is similar to the
+# file selection dialog box on Win95(TM). The user can navigate
+# the directories by clicking on the folder icons or by
+# selectinf the "Directory" option menu. The user can select
+# files by clicking on the file icons or by entering a filename
+# in the "Filename:" entry.
+#
+# Copyright (c) 1994-1996 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# Translated to perk/Tk by Slaven Rezic <eserte@cs.tu-berlin.de>.
+#
+
+#----------------------------------------------------------------------
+#
+# I C O N L I S T
+#
+# This is a pseudo-widget that implements the icon list inside the
+# tkFDialog dialog box.
+#
+#----------------------------------------------------------------------
+# tkIconList --
+#
+# Creates an IconList widget.
+#
+
+package Tk::IconList;
+require Tk::Frame;
+use strict;
+
+use vars qw($VERSION);
+$VERSION = '3.005'; # $Id: //depot/Tk8/Tk/IconList.pm#5 $
+
+use base 'Tk::Frame';
+
+Construct Tk::Widget 'IconList';
+
+# tkIconList_Create --
+#
+# Creates an IconList widget by assembling a canvas widget and a
+# scrollbar widget. Sets all the bindings necessary for the IconList's
+# operations.
+#
+sub Populate {
+ my($w, $args) = @_;
+ $w->SUPER::Populate($args);
+
+ my $sbar = $w->Component('Scrollbar' => 'sbar',
+ -orient => 'horizontal',
+ -highlightthickness => 0,
+ -takefocus => 0,
+ );
+ my $canvas = $w->Component('Canvas' => 'canvas',
+ -bd => 2,
+ -relief => 'sunken',
+ -width => 400,
+ -height => 120,
+ -takefocus => 1,
+ );
+ $sbar->pack(-side => 'bottom', -fill => 'x', -padx => 2);
+ $canvas->pack(-expand => 'yes', -fill => 'both');
+ $sbar->configure(-command => ['xview', $canvas]);
+ $canvas->configure(-xscrollcommand => ['set', $sbar]);
+
+ # Initializes the max icon/text width and height and other variables
+ $w->{'maxIW'} = 1;
+ $w->{'maxIH'} = 1;
+ $w->{'maxTW'} = 1;
+ $w->{'maxTH'} = 1;
+ $w->{'numItems'} = 0;
+ delete $w->{'curItem'};
+ $w->{'noScroll'} = 1;
+
+ # Creates the event bindings.
+ $canvas->Tk::bind('<Configure>', sub { $w->Arrange } );
+ $canvas->Tk::bind('<1>',
+ sub {
+ my $c = shift;
+ my $Ev = $c->XEvent;
+ $w->Btn1($Ev->x, $Ev->y);
+ }
+ );
+ $canvas->Tk::bind('<B1-Motion>',
+ sub {
+ my $c = shift;
+ my $Ev = $c->XEvent;
+ $w->Motion1($Ev->x, $Ev->y);
+ }
+ );
+ $canvas->Tk::bind('<Double-ButtonRelease-1>',
+ sub {
+ my $c = shift;
+ my $Ev = $c->XEvent;
+ $w->Double1($Ev->x,$Ev->y);
+ }
+ );
+ $canvas->Tk::bind('<ButtonRelease-1>', sub { $w->CancelRepeat });
+ $canvas->Tk::bind('<B1-Leave>',
+ sub {
+ my $c = shift;
+ my $Ev = $c->XEvent;
+ $w->Leave1($Ev->x, $Ev->y);
+ }
+ );
+ $canvas->Tk::bind('<B1-Enter>', sub { $w->CancelRepeat });
+ $canvas->Tk::bind('<Up>', sub { $w->UpDown(-1) });
+ $canvas->Tk::bind('<Down>', sub { $w->UpDown(1) });
+ $canvas->Tk::bind('<Left>', sub { $w->LeftRight(-1) });
+ $canvas->Tk::bind('<Right>', sub { $w->LeftRight(1) });
+ $canvas->Tk::bind('<Return>', sub { $w->ReturnKey });
+ $canvas->Tk::bind('<KeyPress>',
+ sub {
+ my $c = shift;
+ my $Ev = $c->XEvent;
+ $w->KeyPress($Ev->A);
+ }
+ );
+ $canvas->Tk::bind('<Control-KeyPress>', 'NoOp');
+ $canvas->Tk::bind('<Alt-KeyPress>', 'NoOp');
+ $canvas->Tk::bind('<FocusIn>', sub { $w->FocusIn });
+
+ $w->ConfigSpecs(-browsecmd =>
+ ['CALLBACK', 'browseCommand', 'BrowseCommand', undef],
+ -command =>
+ ['CALLBACK', 'command', 'Command', undef],
+ -font =>
+ ['PASSIVE', 'font', 'Font', undef],
+ -foreground =>
+ ['PASSIVE', 'foreground', 'Foreground', undef],
+ -fg => '-foreground',
+ );
+
+ $w;
+}
+
+# tkIconList_AutoScan --
+#
+# This procedure is invoked when the mouse leaves an entry window
+# with button 1 down. It scrolls the window up, down, left, or
+# right, depending on where the mouse left the window, and reschedules
+# itself as an "after" command so that the window continues to scroll until
+# the mouse moves back into the window or the mouse button is released.
+#
+# Arguments:
+# w - The IconList window.
+#
+sub AutoScan {
+ my $w = shift;
+ return unless ($w->exists);
+ return if ($w->{'noScroll'});
+ my($x, $y);
+ $x = $Tk::x;
+ $y = $Tk::y;
+ my $canvas = $w->Subwidget('canvas');
+ if ($x >= $canvas->width) {
+ $canvas->xview('scroll', 1, 'units');
+ } elsif ($x < 0) {
+ $canvas->xview('scroll', -1, 'units');
+ } elsif ($y >= $canvas->height) {
+ # do nothing
+ } elsif ($y < 0) {
+ # do nothing
+ } else {
+ return;
+ }
+ $w->Motion1($x, $y);
+ $w->RepeatId($w->after(50, ['AutoScan', $w]));
+}
+
+# Deletes all the items inside the canvas subwidget and reset the IconList's
+# state.
+#
+sub DeleteAll {
+ my $w = shift;
+ my $canvas = $w->Subwidget('canvas');
+ $canvas->delete('all');
+ delete $w->{'selected'};
+ delete $w->{'rect'};
+ delete $w->{'list'};
+ delete $w->{'itemList'};
+ $w->{'maxIW'} = 1;
+ $w->{'maxIH'} = 1;
+ $w->{'maxTW'} = 1;
+ $w->{'maxTH'} = 1;
+ $w->{'numItems'} = 0;
+ delete $w->{'curItem'};
+ $w->{'noScroll'} = 1;
+ $w->Subwidget('sbar')->set(0.0, 1.0);
+ $canvas->xview('moveto', 0);
+}
+
+# Adds an icon into the IconList with the designated image and text
+#
+sub Add {
+ my($w, $image, $text) = @_;
+ my $canvas = $w->Subwidget('canvas');
+ my $iTag = $canvas->createImage(0, 0, -image => $image, -anchor => 'nw');
+ my $font = $w->cget(-font);
+ my $fg = $w->cget(-foreground);
+ my $tTag = $canvas->createText(0, 0, -text => $text, -anchor => 'nw',
+ (defined $fg ? (-fill => $fg) : ()),
+ (defined $font ? (-font => $font) : ()),
+ );
+ my $rTag = $canvas->createRectangle(0, 0, 0, 0,
+ -fill => undef,
+ -outline => undef);
+ my(@b) = $canvas->bbox($iTag);
+ my $iW = $b[2] - $b[0];
+ my $iH = $b[3] - $b[1];
+ $w->{'maxIW'} = $iW if ($w->{'maxIW'} < $iW);
+ $w->{'maxIH'} = $iH if ($w->{'maxIH'} < $iH);
+ @b = $canvas->bbox($tTag);
+ my $tW = $b[2] - $b[0];
+ my $tH = $b[3] - $b[1];
+ $w->{'maxTW'} = $tW if ($w->{'maxTW'} < $tW);
+ $w->{'maxTH'} = $tH if ($w->{'maxTH'} < $tH);
+ push @{ $w->{'list'} }, [$iTag, $tTag, $rTag, $iW, $iH, $tW, $tH,
+ $w->{'numItems'}];
+ $w->{'itemList'}{$rTag} = [$iTag, $tTag, $text, $w->{'numItems'}];
+ $w->{'textList'}{$w->{'numItems'}} = lc($text);
+ ++$w->{'numItems'};
+}
+
+# Places the icons in a column-major arrangement.
+#
+sub Arrange {
+ my $w = shift;
+ my $canvas = $w->Subwidget('canvas');
+ my $sbar = $w->Subwidget('sbar');
+ unless (exists $w->{'list'}) {
+ if (defined $canvas && Tk::Exists($canvas)) {
+ $w->{'noScroll'} = 1;
+ $sbar->configure(-command => sub { });
+ }
+ return;
+ }
+
+ my $W = $canvas->width;
+ my $H = $canvas->height;
+ my $pad = $canvas->cget(-highlightthickness) + $canvas->cget(-bd);
+ $pad = 2 if ($pad < 2);
+ $W -= $pad*2;
+ $H -= $pad*2;
+ my $dx = $w->{'maxIW'} + $w->{'maxTW'} + 8;
+ my $dy;
+ if ($w->{'maxTH'} > $w->{'maxIH'}) {
+ $dy = $w->{'maxTH'};
+ } else {
+ $dy = $w->{'maxIH'};
+ }
+ $dy += 2;
+ my $shift = $w->{'maxIW'} + 4;
+ my $x = $pad * 2;
+ my $y = $pad;
+ my $usedColumn = 0;
+ foreach my $sublist (@{ $w->{'list'} }) {
+ $usedColumn = 1;
+ my($iTag, $tTag, $rTag, $iW, $iH, $tW, $tH) = @$sublist;
+ my $i_dy = ($dy - $iH) / 2;
+ my $t_dy = ($dy - $tH) / 2;
+ $canvas->coords($iTag, $x, $y + $i_dy);
+ $canvas->coords($tTag, $x + $shift, $y + $t_dy);
+ $canvas->coords($tTag, $x + $shift, $y + $t_dy);
+ $canvas->coords($rTag, $x, $y, $x + $dx, $y + $dy);
+ $y += $dy;
+ if ($y + $dy > $H) {
+ $y = $pad;
+ $x += $dx;
+ $usedColumn = 0;
+ }
+ }
+ my $sW;
+ if ($usedColumn) {
+ $sW = $x + $dx;
+ } else {
+ $sW = $x;
+ }
+ if ($sW < $W) {
+ $canvas->configure(-scrollregion => [$pad, $pad, $sW, $H]);
+ $sbar->configure(-command => sub { });
+ $canvas->xview(moveto => 0);
+ $w->{'noScroll'} = 1;
+ } else {
+ $canvas->configure(-scrollregion => [$pad, $pad, $sW, $H]);
+ $sbar->configure(-command => ['xview', $canvas]);
+ $w->{'noScroll'} = 0;
+ }
+ $w->{'itemsPerColumn'} = ($H - $pad) / $dy;
+ $w->{'itemsPerColumn'} = 1 if ($w->{'itemsPerColumn'} < 1);
+ $w->Select($w->{'list'}[$w->{'curItem'}][2], 0)
+ if (exists $w->{'curItem'});
+}
+
+# Gets called when the user invokes the IconList (usually by double-clicking
+# or pressing the Return key).
+#
+sub Invoke {
+ my $w = shift;
+ $w->Callback(-command => $w->{'selected'}) if (exists $w->{'selected'});
+}
+
+# tkIconList_See --
+#
+# If the item is not (completely) visible, scroll the canvas so that
+# it becomes visible.
+sub See {
+ my($w, $rTag) = @_;
+ return if ($w->{'noScroll'});
+ return unless (exists $w->{'itemList'}{$rTag});
+ my $canvas = $w->Subwidget('canvas');
+ my(@sRegion) = @{ $canvas->cget('-scrollregion') };
+ return unless (@sRegion);
+ my(@bbox) = $canvas->bbox($rTag);
+ my $pad = $canvas->cget(-highlightthickness) + $canvas->cget(-bd);
+ my $x1 = $bbox[0];
+ my $x2 = $bbox[2];
+ $x1 -= $pad * 2;
+ $x2 -= $pad;
+ my $cW = $canvas->width - $pad * 2;
+ my $scrollW = $sRegion[2] - $sRegion[0] + 1;
+ my $dispX = int(($canvas->xview)[0] * $scrollW);
+ my $oldDispX = $dispX;
+ # check if out of the right edge
+ $dispX = $x2 - $cW if ($x2 - $dispX >= $cW);
+ # check if out of the left edge
+ $dispX = $x1 if ($x1 - $dispX < 0);
+ if ($oldDispX != $dispX) {
+ my $fraction = $dispX / $scrollW;
+ $canvas->xview('moveto', $fraction);
+ }
+}
+
+sub SelectAtXY {
+ my($w, $x, $y) = @_;
+ my $canvas = $w->Subwidget('canvas');
+ $w->Select($canvas->find('closest',
+ $canvas->canvasx($x),
+ $canvas->canvasy($y)));
+}
+
+sub Select {
+ my $w = shift;
+ my $rTag = shift;
+ my $callBrowse = (@_ ? shift : 1);
+ return unless (exists $w->{'itemList'}{$rTag});
+ my($iTag, $tTag, $text, $serial) = @{ $w->{'itemList'}{$rTag} };
+ my $canvas = $w->Subwidget('canvas');
+ $w->{'rect'} = $canvas->createRectangle(0, 0, 0, 0, -fill => '#a0a0ff',
+ -outline => '#a0a0ff')
+ unless (exists $w->{'rect'});
+ $canvas->lower($w->{'rect'});
+ my(@bbox) = $canvas->bbox($tTag);
+ $canvas->coords($w->{'rect'}, @bbox);
+ $w->{'curItem'} = $serial;
+ $w->{'selected'} = $text;
+ if ($callBrowse) {
+ $w->Callback(-browsecmd => $text);
+ }
+}
+
+sub Unselect {
+ my $w = shift;
+ my $canvas = $w->Subwidget('canvas');
+ if (exists $w->{'rect'}) {
+ $canvas->delete($w->{'rect'});
+ delete $w->{'rect'};
+ }
+ delete $w->{'selected'} if (exists $w->{'selected'});
+ delete $w->{'curItem'};
+}
+
+# Returns the selected item
+#
+sub Get {
+ my $w = shift;
+ if (exists $w->{'selected'}) {
+ $w->{'selected'};
+ } else {
+ undef;
+ }
+}
+
+sub Btn1 {
+ my($w, $x, $y) = @_;
+ $w->Subwidget('canvas')->focus;
+ $w->SelectAtXY($x, $y);
+}
+
+# Gets called on button-1 motions
+#
+sub Motion1 {
+ my($w, $x, $y) = @_;
+ $Tk::x = $x;
+ $Tk::y = $y;
+ $w->SelectAtXY($x, $y);
+}
+
+sub Double1 {
+ my($w, $x, $y) = @_;
+ $w->Invoke if (exists $w->{'curItem'});
+}
+
+sub ReturnKey {
+ my $w = shift;
+ $w->Invoke;
+}
+
+sub Leave1 {
+ my($w, $x, $y) = @_;
+ $Tk::x = $x;
+ $Tk::y = $y;
+ $w->AutoScan;
+}
+
+sub FocusIn {
+ my $w = shift;
+ return unless (exists $w->{'list'});
+ unless (exists $w->{'curItem'}) {
+ my $rTag = $w->{'list'}[0][2];
+ $w->Select($rTag);
+ }
+}
+
+# tkIconList_UpDown --
+#
+# Moves the active element up or down by one element
+#
+# Arguments:
+# w - The IconList widget.
+# amount - +1 to move down one item, -1 to move back one item.
+#
+sub UpDown {
+ my($w, $amount) = @_;
+ my $rTag;
+ return unless (exists $w->{'list'});
+ unless (exists $w->{'curItem'}) {
+ $rTag = $w->{'list'}[0][2];
+ } else {
+ my $oldRTag = $w->{'list'}[$w->{'curItem'}][2];
+ $rTag = $w->{'list'}[($w->{'curItem'} + $amount)][2];
+ $rTag = $oldRTag unless defined $rTag;
+ }
+ if (defined $rTag) {
+ $w->Select($rTag);
+ $w->See($rTag);
+ }
+}
+
+# tkIconList_LeftRight --
+#
+# Moves the active element left or right by one column
+#
+# Arguments:
+# w - The IconList widget.
+# amount - +1 to move right one column, -1 to move left one column.
+#
+sub LeftRight {
+ my($w, $amount) = @_;
+ my $rTag;
+ return unless (exists $w->{'list'});
+ unless (exists $w->{'curItem'}) {
+ $rTag = $w->{'list'}[0][2];
+ } else {
+ my $oldRTag = $w->{'list'}[$w->{'curItem'}][2];
+ my $newItem = $w->{'curItem'} + $amount * $w->{'itemsPerColumn'};
+ $rTag = $w->{'list'}[$newItem][2];
+ $rTag = $oldRTag unless (defined $rTag);
+ }
+ if (defined $rTag) {
+ $w->Select($rTag);
+ $w->See($rTag);
+ }
+}
+
+#----------------------------------------------------------------------
+# Accelerator key bindings
+#----------------------------------------------------------------------
+# tkIconList_KeyPress --
+#
+# Gets called when user enters an arbitrary key in the listbox.
+#
+sub KeyPress {
+ my($w, $key) = @_;
+ $w->{'_ILAccel'} .= $key;
+ $w->Goto($w->{'_ILAccel'});
+ eval {
+ $w->afterCancel($w->{'_ILAccel_afterid'});
+ };
+ $w->{'_ILAccel_afterid'} = $w->after(500, ['Reset', $w]);
+}
+
+sub Goto {
+ my($w, $text) = @_;
+ return unless (exists $w->{'list'});
+ return if (not defined $text or $text eq '');
+ my $start = (!exists $w->{'curItem'} ? 0 : $w->{'curItem'});
+ $text = lc($text);
+ my $theIndex = -1;
+ my $less = 0;
+ my $len = length($text);
+ my $i = $start;
+ # Search forward until we find a filename whose prefix is an exact match
+ # with $text
+ while (1) {
+ my $sub = substr($w->{'textList'}{$i}, 0, $len);
+ if ($text eq $sub) {
+ $theIndex = $i;
+ last;
+ }
+ ++$i;
+ $i = 0 if ($i == $w->{'numItems'});
+ last if ($i == $start);
+ }
+ if ($theIndex > -1) {
+ my $rTag = $w->{'list'}[$theIndex][2];
+ $w->Select($rTag, 0);
+ $w->See($rTag);
+ }
+}
+
+sub Reset {
+ my $w = shift;
+ undef $w->{'_ILAccel'};
+}
+
+1;
diff --git a/Master/xemtex/perl/site/lib/Tk/Image.pm b/Master/xemtex/perl/site/lib/Tk/Image.pm
new file mode 100644
index 00000000000..f6d6634c05b
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Image.pm
@@ -0,0 +1,73 @@
+# Copyright (c) 1995-1999 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Image;
+
+# This module does for images what Tk::Widget does for widgets:
+# provides a base class for them to inherit from.
+require DynaLoader;
+
+use base qw(DynaLoader Tk); # but are they ?
+
+use vars qw($VERSION);
+$VERSION = '3.014'; # $Id: //depot/Tk8/Tk/Image.pm#14 $
+
+sub new
+{
+ my $package = shift;
+ my $widget = shift;
+ $package->InitClass($widget);
+ my $leaf = $package->Tk_image;
+ my $obj = $widget->Tk::image('create',$leaf,@_);
+ return bless $obj,$package;
+}
+
+sub Install
+{
+ # Dynamically loaded image types can install standard images here
+ my ($class,$mw) = @_;
+}
+
+sub ClassInit
+{
+ # Carry out class bindings (or whatever)
+ my ($package,$mw) = @_;
+ return $package;
+}
+
+require Tk::Submethods;
+
+Direct Tk::Submethods ('image' => [qw(delete width height type)]);
+
+sub Tk::Widget::imageNames
+{
+ my $w = shift;
+ $w->image('names',@_);
+}
+
+sub Tk::Widget::imageTypes
+{
+ my $w = shift;
+ map("\u$_",$w->image('types',@_));
+}
+
+sub Construct
+{
+ my ($base,$name) = @_;
+ my $class = (caller(0))[0];
+
+ # Hack for broken ->isa in perl5.6.0
+ delete ${"$class\::"}{'::ISA::CACHE::'} if $] == 5.006;
+
+ *{"Tk::Widget::$name"} = sub { $class->new(@_) };
+}
+
+# This is here to prevent AUTOLOAD trying to find it.
+sub DESTROY
+{
+ my $i = shift;
+ # maybe do image delete ???
+}
+
+
+1;
diff --git a/Master/xemtex/perl/site/lib/Tk/Label.pm b/Master/xemtex/perl/site/lib/Tk/Label.pm
new file mode 100644
index 00000000000..e320e193846
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Label.pm
@@ -0,0 +1,21 @@
+# Copyright (c) 1995-1999 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package Tk::Label;
+require Tk;
+
+
+use vars qw($VERSION);
+$VERSION = '3.011'; # $Id: //depot/Tk8/Tk/Label.pm#11 $
+
+use base qw(Tk::Widget);
+
+Construct Tk::Widget 'Label';
+
+sub Tk_cmd { \&Tk::label }
+
+1;
+
+
+
diff --git a/Master/xemtex/perl/site/lib/Tk/Listbox.pm b/Master/xemtex/perl/site/lib/Tk/Listbox.pm
new file mode 100644
index 00000000000..0dd86c1ef2e
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Listbox.pm
@@ -0,0 +1,856 @@
+# Converted from listbox.tcl --
+#
+# This file defines the default bindings for Tk listbox widgets.
+#
+# @(#) listbox.tcl 1.7 94/12/17 16:05:18
+#
+# Copyright (c) 1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+# Modifications from standard Listbox.pm
+# --------------------------------------
+# 27-JAN-2001 Alasdair Allan
+# Modified for local use by adding tied scalar and arrays
+# Implemented TIESCALAR, TIEARRAY, FETCH, FETCHSIZE, STORE, CLEAR & EXTEND
+# 31-JAN-2001 Alasdair Allan
+# Made changes suggested by Tim Jenness
+# 03-FEB-2001 Alasdair Allan
+# Modified STORE for tied scalars to clear and select elements
+# 06-FEB-2001 Alasdair Allan
+# Added POD documentation for tied listbox
+# 13-FEB-2001 Alasdair Allan
+# Implemented EXISTS, DELETE, PUSH, POP, SHIFT & UNSHIFT for tied arrays
+# 14-FEB-2001 Alasdair Allan
+# Implemented SPLICE for tied arrays, all tied functionality in place
+# 16-FEB-2001 Alasdair Allan
+# Tweak to STORE interface for tied scalars
+# 23-FEB-2001 Alasdair Allan
+# Added flag to FETCH for tied scalars, modified to return hashes
+# 24-FEB-2001 Alasdair Allan
+# Updated Pod documentation
+#
+
+package Tk::Listbox;
+
+use vars qw($VERSION);
+$VERSION = '3.033'; # $Id: //depot/Tk8/Listbox/Listbox.pm#33 $
+
+use Tk qw(Ev $XS_VERSION);
+use Tk::Clipboard ();
+use AutoLoader;
+
+use base qw(Tk::Clipboard Tk::Widget);
+
+Construct Tk::Widget 'Listbox';
+
+bootstrap Tk::Listbox;
+
+sub Tk_cmd { \&Tk::listbox }
+
+Tk::Methods('activate','bbox','curselection','delete','get','index',
+ 'insert','nearest','scan','see','selection','size',
+ 'xview','yview');
+
+use Tk::Submethods ( 'selection' => [qw(anchor clear includes set)],
+ 'scan' => [qw(mark dragto)],
+ 'xview' => [qw(moveto scroll)],
+ 'yview' => [qw(moveto scroll)],
+ );
+
+*Getselected = \&getSelected;
+
+sub clipEvents
+{
+ return qw[Copy];
+}
+
+sub BalloonInfo
+{
+ my ($listbox,$balloon,$X,$Y,@opt) = @_;
+ my $e = $listbox->XEvent;
+ my $index = $listbox->index('@' . $e->x . ',' . $e->y);
+ foreach my $opt (@opt)
+ {
+ my $info = $balloon->GetOption($opt,$listbox);
+ if ($opt =~ /^-(statusmsg|balloonmsg)$/ && UNIVERSAL::isa($info,'ARRAY'))
+ {
+ $balloon->Subclient($index);
+ if (defined $info->[$index])
+ {
+ return $info->[$index];
+ }
+ return '';
+ }
+ return $info;
+ }
+}
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $class->SUPER::ClassInit($mw);
+ # Standard Motif bindings:
+ $mw->bind($class,'<1>',['BeginSelect',Ev('index',Ev('@'))]);
+ $mw->bind($class,'<B1-Motion>',['Motion',Ev('index',Ev('@'))]);
+ $mw->bind($class,'<ButtonRelease-1>','ButtonRelease_1');
+ ;
+ $mw->bind($class,'<Shift-1>',['BeginExtend',Ev('index',Ev('@'))]);
+ $mw->bind($class,'<Control-1>',['BeginToggle',Ev('index',Ev('@'))]);
+
+ $mw->bind($class,'<B1-Leave>',['AutoScan',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<B1-Enter>','CancelRepeat');
+ $mw->bind($class,'<Up>',['UpDown',-1]);
+ $mw->bind($class,'<Shift-Up>',['ExtendUpDown',-1]);
+ $mw->bind($class,'<Down>',['UpDown',1]);
+ $mw->bind($class,'<Shift-Down>',['ExtendUpDown',1]);
+
+ $mw->XscrollBind($class);
+ $mw->PriorNextBind($class);
+
+ $mw->bind($class,'<Control-Home>','Cntrl_Home');
+ ;
+ $mw->bind($class,'<Shift-Control-Home>',['DataExtend',0]);
+ $mw->bind($class,'<Control-End>','Cntrl_End');
+ ;
+ $mw->bind($class,'<Shift-Control-End>',['DataExtend','end']);
+ # $class->clipboardOperations($mw,'Copy');
+ $mw->bind($class,'<space>',['BeginSelect',Ev('index','active')]);
+ $mw->bind($class,'<Select>',['BeginSelect',Ev('index','active')]);
+ $mw->bind($class,'<Control-Shift-space>',['BeginExtend',Ev('index','active')]);
+ $mw->bind($class,'<Shift-Select>',['BeginExtend',Ev('index','active')]);
+ $mw->bind($class,'<Escape>','Cancel');
+ $mw->bind($class,'<Control-slash>','SelectAll');
+ $mw->bind($class,'<Control-backslash>','Cntrl_backslash');
+ ;
+ # Additional Tk bindings that aren't part of the Motif look and feel:
+ $mw->bind($class,'<2>',['scan','mark',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<B2-Motion>',['scan','dragto',Ev('x'),Ev('y')]);
+ return $class;
+}
+
+
+
+sub TIEARRAY {
+ my ( $class, $obj, %options ) = @_;
+ return bless {
+ OBJECT => \$obj,
+ OPTION => \%options }, $class;
+}
+
+
+
+sub TIESCALAR {
+ my ( $class, $obj, %options ) = @_;
+ return bless {
+ OBJECT => \$obj,
+ OPTION => \%options }, $class;
+}
+
+# FETCH
+# -----
+# Return either the full contents or only the selected items in the
+# box depending on whether we tied it to an array or scalar respectively
+sub FETCH {
+ my $class = shift;
+
+ my $self = ${$class->{OBJECT}};
+ my %options = %{$class->{OPTION}} if defined $class->{OPTION};;
+
+ # Define the return variable
+ my $result;
+
+ # Check whether we are have a tied array or scalar quantity
+ if ( @_ ) {
+ my $i = shift;
+ # The Tk:: Listbox has been tied to an array, we are returning
+ # an array list of the current items in the Listbox
+ $result = $self->get($i);
+ } else {
+ # The Tk::Listbox has been tied to a scalar, we are returning a
+ # reference to an array or hash containing the currently selected items
+ my ( @array, %hash );
+
+ if ( defined $options{ReturnType} ) {
+
+ # THREE-WAY SWITCH
+ if ( $options{ReturnType} eq "index" ) {
+ $result = [$self->curselection];
+ } elsif ( $options{ReturnType} eq "element" ) {
+ foreach my $selection ( $self->curselection ) {
+ push(@array,$self->get($selection)); }
+ $result = \@array;
+ } elsif ( $options{ReturnType} eq "both" ) {
+ foreach my $selection ( $self->curselection ) {
+ %hash = ( %hash, $selection => $self->get($selection)); }
+ $result = \%hash;
+ }
+ } else {
+ # return elements (default)
+ foreach my $selection ( $self->curselection ) {
+ push(@array,$self->get($selection)); }
+ $result = \@array;
+ }
+ }
+ return $result;
+}
+
+# FETCHSIZE
+# ---------
+# Return the number of elements in the Listbox when tied to an array
+sub FETCHSIZE {
+ my $class = shift;
+ return ${$class->{OBJECT}}->size();
+}
+
+# STORE
+# -----
+# If tied to an array we will modify the Listbox contents, while if tied
+# to a scalar we will select and clear elements.
+sub STORE {
+
+ if ( scalar(@_) == 2 ) {
+ # we have a tied scalar
+ my ( $class, $selected ) = @_;
+ my $self = ${$class->{OBJECT}};
+ my %options = %{$class->{OPTION}} if defined $class->{OPTION};;
+
+ # clear currently selected elements
+ $self->selectionClear(0,'end');
+
+ # set selected elements
+ if ( defined $options{ReturnType} ) {
+
+ # THREE-WAY SWITCH
+ if ( $options{ReturnType} eq "index" ) {
+ for ( my $i=0; $i < scalar(@$selected) ; $i++ ) {
+ for ( my $j=0; $j < $self->size() ; $j++ ) {
+ if( $j == $$selected[$i] ) {
+ $self->selectionSet($j); last; }
+ }
+ }
+ } elsif ( $options{ReturnType} eq "element" ) {
+ for ( my $k=0; $k < scalar(@$selected) ; $k++ ) {
+ for ( my $l=0; $l < $self->size() ; $l++ ) {
+ if( $self->get($l) eq $$selected[$k] ) {
+ $self->selectionSet($l); last; }
+ }
+ }
+ } elsif ( $options{ReturnType} eq "both" ) {
+ foreach my $key ( keys %$selected ) {
+ $self->selectionSet($key)
+ if $$selected{$key} eq $self->get($key);
+ }
+ }
+ } else {
+ # return elements (default)
+ for ( my $k=0; $k < scalar(@$selected) ; $k++ ) {
+ for ( my $l=0; $l < $self->size() ; $l++ ) {
+ if( $self->get($l) eq $$selected[$k] ) {
+ $self->selectionSet($l); last; }
+ }
+ }
+ }
+
+ } else {
+ # we have a tied array
+ my ( $class, $index, $value ) = @_;
+ my $self = ${$class->{OBJECT}};
+
+ # check size of current contents list
+ my $sizeof = $self->size();
+
+ if ( $index <= $sizeof ) {
+ # Change a current listbox entry
+ $self->delete($index);
+ $self->insert($index, $value);
+ } else {
+ # Add a new value
+ if ( defined $index ) {
+ $self->insert($index, $value);
+ } else {
+ $self->insert("end", $value);
+ }
+ }
+ }
+}
+
+# CLEAR
+# -----
+# Empty the Listbox of contents if tied to an array
+sub CLEAR {
+ my $class = shift;
+ ${$class->{OBJECT}}->delete(0, 'end');
+}
+
+# EXTEND
+# ------
+# Do nothing and be happy about it
+sub EXTEND { }
+
+# PUSH
+# ----
+# Append elements onto the Listbox contents
+sub PUSH {
+ my ( $class, @list ) = @_;
+ ${$class->{OBJECT}}->insert('end', @list);
+}
+
+# POP
+# ---
+# Remove last element of the array and return it
+sub POP {
+ my $class = shift;
+
+ my $value = ${$class->{OBJECT}}->get('end');
+ ${$class->{OBJECT}}->delete('end');
+ return $value;
+}
+
+# SHIFT
+# -----
+# Removes the first element and returns it
+sub SHIFT {
+ my $class = shift;
+
+ my $value = ${$class->{OBJECT}}->get(0);
+ ${$class->{OBJECT}}->delete(0);
+ return $value
+}
+
+# UNSHIFT
+# -------
+# Insert elements at the beginning of the Listbox
+sub UNSHIFT {
+ my ( $class, @list ) = @_;
+ ${$class->{OBJECT}}->insert(0, @list);
+}
+
+# DELETE
+# ------
+# Delete element at specified index
+sub DELETE {
+ my ( $class, @list ) = @_;
+
+ my $value = ${$class->{OBJECT}}->get(@list);
+ ${$class->{OBJECT}}->delete(@list);
+ return $value;
+}
+
+# EXISTS
+# ------
+# Returns true if the index exist, and undef if not
+sub EXISTS {
+ my ( $class, $index ) = @_;
+ return undef unless ${$class->{OBJECT}}->get($index);
+}
+
+# SPLICE
+# ------
+# Performs equivalent of splice on the listbox contents
+sub SPLICE {
+ my $class = shift;
+
+ my $self = ${$class->{OBJECT}};
+
+ # check for arguments
+ my @elements;
+ if ( scalar(@_) == 0 ) {
+ # none
+ @elements = $self->get(0,'end');
+ $self->delete(0,'end');
+ return wantarray ? @elements : $elements[scalar(@elements)-1];;
+
+ } elsif ( scalar(@_) == 1 ) {
+ # $offset
+ my ( $offset ) = @_;
+ if ( $offset < 0 ) {
+ my $start = $self->size() + $offset;
+ if ( $start > 0 ) {
+ @elements = $self->get($start,'end');
+ $self->delete($start,'end');
+ return wantarray ? @elements : $elements[scalar(@elements)-1];
+ } else {
+ return undef;
+ }
+ } else {
+ @elements = $self->get($offset,'end');
+ $self->delete($offset,'end');
+ return wantarray ? @elements : $elements[scalar(@elements)-1];
+ }
+
+ } elsif ( scalar(@_) == 2 ) {
+ # $offset and $length
+ my ( $offset, $length ) = @_;
+ if ( $offset < 0 ) {
+ my $start = $self->size() + $offset;
+ my $end = $self->size() + $offset + $length - 1;
+ if ( $start > 0 ) {
+ @elements = $self->get($start,$end);
+ $self->delete($start,$end);
+ return wantarray ? @elements : $elements[scalar(@elements)-1];
+ } else {
+ return undef;
+ }
+ } else {
+ @elements = $self->get($offset,$offset+$length-1);
+ $self->delete($offset,$offset+$length-1);
+ return wantarray ? @elements : $elements[scalar(@elements)-1];
+ }
+
+ } else {
+ # $offset, $length and @list
+ my ( $offset, $length, @list ) = @_;
+ if ( $offset < 0 ) {
+ my $start = $self->size() + $offset;
+ my $end = $self->size() + $offset + $length - 1;
+ if ( $start > 0 ) {
+ @elements = $self->get($start,$end);
+ $self->delete($start,$end);
+ $self->insert($start,@list);
+ return wantarray ? @elements : $elements[scalar(@elements)-1];
+ } else {
+ return undef;
+ }
+ } else {
+ @elements = $self->get($offset,$offset+$length-1);
+ $self->delete($offset,$offset+$length-1);
+ $self->insert($offset,@list);
+ return wantarray ? @elements : $elements[scalar(@elements)-1];
+ }
+ }
+}
+
+# ----
+
+1;
+__END__
+
+#
+# Bind --
+# This procedure is invoked the first time the mouse enters a listbox
+# widget or a listbox widget receives the input focus. It creates
+# all of the class bindings for listboxes.
+#
+# Arguments:
+# event - Indicates which event caused the procedure to be invoked
+# (Enter or FocusIn). It is used so that we can carry out
+# the functions of that event in addition to setting up
+# bindings.
+
+sub xyIndex
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ return $w->index($Ev->xy);
+}
+
+sub ButtonRelease_1
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->CancelRepeat;
+ $w->activate($Ev->xy);
+}
+
+
+sub Cntrl_Home
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->activate(0);
+ $w->see(0);
+ $w->selectionClear(0,'end');
+ $w->selectionSet(0)
+}
+
+
+sub Cntrl_End
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->activate('end');
+ $w->see('end');
+ $w->selectionClear(0,'end');
+ $w->selectionSet('end')
+}
+
+
+sub Cntrl_backslash
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ if ($w->cget('-selectmode') ne 'browse')
+ {
+ $w->selectionClear(0,'end');
+ }
+}
+
+# BeginSelect --
+#
+# This procedure is typically invoked on button-1 presses. It begins
+# the process of making a selection in the listbox. Its exact behavior
+# depends on the selection mode currently in effect for the listbox;
+# see the Motif documentation for details.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element for the selection operation (typically the
+# one under the pointer). Must be in numerical form.
+sub BeginSelect
+{
+ my $w = shift;
+ my $el = shift;
+ if ($w->cget('-selectmode') eq 'multiple')
+ {
+ if ($w->selectionIncludes($el))
+ {
+ $w->selectionClear($el)
+ }
+ else
+ {
+ $w->selectionSet($el)
+ }
+ }
+ else
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet($el);
+ $w->selectionAnchor($el);
+ @Selection = ();
+ $Prev = $el
+ }
+ $w->focus if ($w->cget('-takefocus'));
+}
+# Motion --
+#
+# This procedure is called to process mouse motion events while
+# button 1 is down. It may move or extend the selection, depending
+# on the listbox's selection mode.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element under the pointer (must be a number).
+sub Motion
+{
+ my $w = shift;
+ my $el = shift;
+ if (defined($Prev) && $el == $Prev)
+ {
+ return;
+ }
+ $anchor = $w->index('anchor');
+ my $mode = $w->cget('-selectmode');
+ if ($mode eq 'browse')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet($el);
+ $Prev = $el;
+ }
+ elsif ($mode eq 'extended')
+ {
+ $i = $Prev;
+ if ($w->selectionIncludes('anchor'))
+ {
+ $w->selectionClear($i,$el);
+ $w->selectionSet('anchor',$el)
+ }
+ else
+ {
+ $w->selectionClear($i,$el);
+ $w->selectionClear('anchor',$el)
+ }
+ while ($i < $el && $i < $anchor)
+ {
+ if (Tk::lsearch(\@Selection,$i) >= 0)
+ {
+ $w->selectionSet($i)
+ }
+ $i += 1
+ }
+ while ($i > $el && $i > $anchor)
+ {
+ if (Tk::lsearch(\@Selection,$i) >= 0)
+ {
+ $w->selectionSet($i)
+ }
+ $i += -1
+ }
+ $Prev = $el
+ }
+}
+# BeginExtend --
+#
+# This procedure is typically invoked on shift-button-1 presses. It
+# begins the process of extending a selection in the listbox. Its
+# exact behavior depends on the selection mode currently in effect
+# for the listbox; see the Motif documentation for details.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element for the selection operation (typically the
+# one under the pointer). Must be in numerical form.
+sub BeginExtend
+{
+ my $w = shift;
+ my $el = shift;
+ if ($w->cget('-selectmode') eq 'extended' && $w->selectionIncludes('anchor'))
+ {
+ $w->Motion($el)
+ }
+}
+# BeginToggle --
+#
+# This procedure is typically invoked on control-button-1 presses. It
+# begins the process of toggling a selection in the listbox. Its
+# exact behavior depends on the selection mode currently in effect
+# for the listbox; see the Motif documentation for details.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element for the selection operation (typically the
+# one under the pointer). Must be in numerical form.
+sub BeginToggle
+{
+ my $w = shift;
+ my $el = shift;
+ if ($w->cget('-selectmode') eq 'extended')
+ {
+ @Selection = $w->curselection();
+ $Prev = $el;
+ $w->selectionAnchor($el);
+ if ($w->selectionIncludes($el))
+ {
+ $w->selectionClear($el)
+ }
+ else
+ {
+ $w->selectionSet($el)
+ }
+ }
+}
+# AutoScan --
+# This procedure is invoked when the mouse leaves an entry window
+# with button 1 down. It scrolls the window up, down, left, or
+# right, depending on where the mouse left the window, and reschedules
+# itself as an "after" command so that the window continues to scroll until
+# the mouse moves back into the window or the mouse button is released.
+#
+# Arguments:
+# w - The entry window.
+# x - The x-coordinate of the mouse when it left the window.
+# y - The y-coordinate of the mouse when it left the window.
+sub AutoScan
+{
+ my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ if ($y >= $w->height)
+ {
+ $w->yview('scroll',1,'units')
+ }
+ elsif ($y < 0)
+ {
+ $w->yview('scroll',-1,'units')
+ }
+ elsif ($x >= $w->width)
+ {
+ $w->xview('scroll',2,'units')
+ }
+ elsif ($x < 0)
+ {
+ $w->xview('scroll',-2,'units')
+ }
+ else
+ {
+ return;
+ }
+ $w->Motion($w->index("@" . $x . ',' . $y));
+ $w->RepeatId($w->after(50,'AutoScan',$w,$x,$y));
+}
+# UpDown --
+#
+# Moves the location cursor (active element) up or down by one element,
+# and changes the selection if we're in browse or extended selection
+# mode.
+#
+# Arguments:
+# w - The listbox widget.
+# amount - +1 to move down one item, -1 to move back one item.
+sub UpDown
+{
+ my $w = shift;
+ my $amount = shift;
+ $w->activate($w->index('active')+$amount);
+ $w->see('active');
+ $LNet__0 = $w->cget('-selectmode');
+ if ($LNet__0 eq 'browse')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet('active')
+ }
+ elsif ($LNet__0 eq 'extended')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet('active');
+ $w->selectionAnchor('active');
+ $Prev = $w->index('active');
+ @Selection = ();
+ }
+}
+# ExtendUpDown --
+#
+# Does nothing unless we're in extended selection mode; in this
+# case it moves the location cursor (active element) up or down by
+# one element, and extends the selection to that point.
+#
+# Arguments:
+# w - The listbox widget.
+# amount - +1 to move down one item, -1 to move back one item.
+sub ExtendUpDown
+{
+ my $w = shift;
+ my $amount = shift;
+ if ($w->cget('-selectmode') ne 'extended')
+ {
+ return;
+ }
+ $w->activate($w->index('active')+$amount);
+ $w->see('active');
+ $w->Motion($w->index('active'))
+}
+# DataExtend
+#
+# This procedure is called for key-presses such as Shift-KEndData.
+# If the selection mode isn't multiple or extend then it does nothing.
+# Otherwise it moves the active element to el and, if we're in
+# extended mode, extends the selection to that point.
+#
+# Arguments:
+# w - The listbox widget.
+# el - An integer element number.
+sub DataExtend
+{
+ my $w = shift;
+ my $el = shift;
+ $mode = $w->cget('-selectmode');
+ if ($mode eq 'extended')
+ {
+ $w->activate($el);
+ $w->see($el);
+ if ($w->selectionIncludes('anchor'))
+ {
+ $w->Motion($el)
+ }
+ }
+ elsif ($mode eq 'multiple')
+ {
+ $w->activate($el);
+ $w->see($el)
+ }
+}
+# Cancel
+#
+# This procedure is invoked to cancel an extended selection in
+# progress. If there is an extended selection in progress, it
+# restores all of the items between the active one and the anchor
+# to their previous selection state.
+#
+# Arguments:
+# w - The listbox widget.
+sub Cancel
+{
+ my $w = shift;
+ if ($w->cget('-selectmode') ne 'extended' || !defined $Prev)
+ {
+ return;
+ }
+ $first = $w->index('anchor');
+ $last = $Prev;
+ if ($first > $last)
+ {
+ $tmp = $first;
+ $first = $last;
+ $last = $tmp
+ }
+ $w->selectionClear($first,$last);
+ while ($first <= $last)
+ {
+ if (Tk::lsearch(\@Selection,$first) >= 0)
+ {
+ $w->selectionSet($first)
+ }
+ $first += 1
+ }
+}
+# SelectAll
+#
+# This procedure is invoked to handle the "select all" operation.
+# For single and browse mode, it just selects the active element.
+# Otherwise it selects everything in the widget.
+#
+# Arguments:
+# w - The listbox widget.
+sub SelectAll
+{
+ my $w = shift;
+ my $mode = $w->cget('-selectmode');
+ if ($mode eq 'single' || $mode eq 'browse')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet('active')
+ }
+ else
+ {
+ $w->selectionSet(0,'end')
+ }
+}
+
+sub SetList
+{
+ my $w = shift;
+ $w->delete(0,'end');
+ $w->insert('end',@_);
+}
+
+sub deleteSelected
+{
+ my $w = shift;
+ my $i;
+ foreach $i (reverse $w->curselection)
+ {
+ $w->delete($i);
+ }
+}
+
+sub clipboardPaste
+{
+ my $w = shift;
+ my $index = $w->index('active') || $w->index($w->XEvent->xy);
+ my $str;
+ eval {local $SIG{__DIE__}; $str = $w->clipboardGet };
+ return if $@;
+ foreach (split("\n",$str))
+ {
+ $w->insert($index++,$_);
+ }
+}
+
+sub getSelected
+{
+ my ($w) = @_;
+ my $i;
+ my (@result) = ();
+ foreach $i ($w->curselection)
+ {
+ push(@result,$w->get($i));
+ }
+ return (wantarray) ? @result : $result[0];
+}
+
+
+
+1;
+__END__
diff --git a/Master/xemtex/perl/site/lib/Tk/MainWindow.pm b/Master/xemtex/perl/site/lib/Tk/MainWindow.pm
new file mode 100644
index 00000000000..2be63f90358
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/MainWindow.pm
@@ -0,0 +1,188 @@
+# Copyright (c) 1995-1999 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::MainWindow;
+use base qw(Tk::Toplevel);
+BEGIN { @MainWindow::ISA = 'Tk::MainWindow' }
+
+use strict;
+
+use vars qw($VERSION);
+$VERSION = '3.047'; # $Id: //depot/Tk8/Tk/MainWindow.pm#47 $
+
+use Tk::CmdLine;
+use Tk qw(catch);
+require Tk::Toplevel;
+
+use Carp;
+
+$| = 1;
+
+my $pid = $$;
+
+my %Windows = ();
+
+sub CreateArgs
+{
+ my ($class,$args) = @_;
+ my $cmd = Tk::CmdLine->CreateArgs();
+ my $key;
+ foreach $key (keys %$cmd)
+ {
+ $args->{$key} = $cmd->{$key} unless exists $args->{$key};
+ }
+ my %result = $class->SUPER::CreateArgs(undef,$args);
+ my $name = delete($args->{'-name'});
+ unless (Tk::tainting)
+ {
+ $ENV{'DISPLAY'} = ':0' unless (exists $ENV{'DISPLAY'});
+ $result{'-screen'} = $ENV{'DISPLAY'} unless exists $result{'-screen'};
+ }
+ return (-name => "\l$name",%result);
+}
+
+sub new
+{
+ my $package = shift;
+ if (@_ > 0 && $_[0] =~ /:\d+(\.\d+)?$/)
+ {
+ carp "Usage $package->new(-screen => '$_[0]' ...)" if $^W;
+ unshift(@_,'-screen');
+ }
+ croak('Odd number of args'."$package->new(" . join(',',@_) .')') if @_ % 2;
+ my %args = @_;
+
+ my $top = eval { bless Create($package->CreateArgs(\%args)), $package };
+ croak($@ . "$package->new(" . join(',',@_) .')') if ($@);
+ $top->apply_command_line;
+ $top->InitBindings;
+ $top->SetBindtags;
+ $top->InitObject(\%args);
+ eval { $top->configure(%args) };
+ croak "$@" if ($@);
+ if (($top->positionfrom||'') ne 'user' and ($top->sizefrom||'') ne 'user') {
+ my $geometry = $top->optionGet(qw(geometry Geometry));
+ if ($geometry) {
+ $top->geometry($geometry);
+ }
+ }
+ $Windows{$top} = $top;
+ return $top;
+}
+
+sub _Destroyed
+{
+ my $top = shift;
+ $top->SUPER::_Destroyed;
+ delete $Windows{$top};
+}
+
+sub InitBindings
+{
+ my $mw = shift;
+ $mw->bind('all','<Tab>','focusNext');
+ $mw->eventAdd(qw[<<LeftTab>> <Shift-Tab>]);
+ catch { $mw->eventAdd(qw[<<LeftTab>> <ISO_Left_Tab>]) };
+ $mw->bind('all','<<LeftTab>>','focusPrev');
+ if ($Tk::platform eq 'unix')
+ {
+ $mw->eventAdd(qw[<<Cut>> <Control-Key-x> <Key-F20> <Meta-Key-w>]);
+ $mw->eventAdd(qw[<<Copy>> <Control-Key-c> <Key-F16> <Control-Key-w>]);
+ $mw->eventAdd(qw[<<Paste>> <Control-Key-v> <Key-F18> <Control-Key-y>]);
+ $mw->eventAdd(qw[<<Undo>> <Control-Key-z> <Key-Undo> <Key-F14>
+ <Control-Key-underscore>]);
+ $mw->eventAdd(qw[<<Redo>> <Control-Key-y> <Shift-Key-Undo> <Key-F12> <Shift-Key-F14>]);
+ }
+ else
+ {
+ $mw->eventAdd(qw[<<Cut>> <Control-Key-x> <Shift-Key-Delete>]);
+ $mw->eventAdd(qw[<<Copy>> <Control-Key-c> <Control-Key-Insert>]);
+ $mw->eventAdd(qw[<<Paste>> <Control-Key-v> <Shift-Key-Insert>]);
+ $mw->eventAdd(qw[<<Undo>> <Control-Key-z>]);
+ $mw->eventAdd(qw[<<Redo>> <Control-Key-y>]);
+ }
+
+ # FIXME - Should these move to Menubutton ?
+ my $c = ($Tk::platform eq 'unix') ? 'all' : 'Tk::Menubutton';
+ $mw->bind($c,'<Alt-KeyPress>',['TraverseToMenu',Tk::Ev('K')]);
+ $mw->bind($c,'<F10>','FirstMenu');
+}
+
+sub Existing
+{
+ my @Windows;
+ foreach my $name (keys %Windows)
+ {
+ my $obj = $Windows{$name};
+ if (Tk::Exists($obj))
+ {
+ push(@Windows,$obj);
+ }
+ else
+ {
+ delete $Windows{$name};
+ }
+ }
+ return @Windows;
+}
+
+END
+{
+ if ($pid == $$)
+ {
+ foreach my $top (values %Windows)
+ {
+ if ($top->IsWidget)
+ {
+ # Tk data structuctures are still in place
+ # this can occur if non-callback perl code did a 'die'.
+ # It will also handle some cases of non-Tk 'exit' being called
+ # Destroy this mainwindow and hence is descendants ...
+ $top->destroy;
+ }
+ }
+ }
+}
+
+sub CmdLine { return shift->command }
+
+sub WMSaveYourself
+{
+ my $mw = shift;
+ my @args = @{$mw->command};
+ warn 'preWMSaveYourself:'.join(' ',@args)."\n";
+ @args = ($0) unless (@args);
+ my $i = 1;
+ while ($i < @args)
+ {
+ if ($args[$i] eq '-iconic')
+ {
+ splice(@args,$i,1);
+ }
+ elsif ($args[$i] =~ /^-(geometry|iconposition)$/)
+ {
+ splice(@args,$i,2);
+ }
+ }
+
+ my @ip = $mw->wm('iconposition');
+ print 'ip ',join(',',@ip),"\n";
+ my $icon = $mw->iconwindow;
+ if (defined($icon))
+ {
+ @ip = $icon->geometry =~ /\d+x\d+([+-]\d+)([+-]\d+)/;
+ }
+ splice(@args,1,0,'-iconposition' => join(',',@ip)) if (@ip == 2);
+
+ splice(@args,1,0,'-iconic') if ($mw->state() eq 'iconic');
+
+ splice(@args,1,0,'-geometry' => $mw->geometry);
+ warn 'postWMSaveYourself:'.join(' ',@args)."\n";
+ $mw->command([@args]);
+}
+
+1;
+
+__END__
+
+=cut
diff --git a/Master/xemtex/perl/site/lib/Tk/Menu.pm b/Master/xemtex/perl/site/lib/Tk/Menu.pm
new file mode 100644
index 00000000000..409467e0e24
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Menu.pm
@@ -0,0 +1,1130 @@
+# Converted from menu.tcl --
+#
+# This file defines the default bindings for Tk menus and menubuttons.
+# It also implements keyboard traversal of menus and implements a few
+# other utility procedures related to menus.
+#
+# @(#) menu.tcl 1.34 94/12/19 17:09:09
+#
+# Copyright (c) 1992-1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+package Tk::Menu;
+require Tk;
+require Tk::Widget;
+require Tk::Wm;
+require Tk::Derived;
+require Tk::Menu::Item;
+
+
+use vars qw($VERSION);
+$VERSION = '3.045'; # $Id: //depot/Tk8/Tk/Menu.pm#45 $
+
+use strict;
+
+use base qw(Tk::Wm Tk::Derived Tk::Widget);
+
+Construct Tk::Widget 'Menu';
+
+sub Tk_cmd { \&Tk::_menu }
+
+Tk::Methods('activate','add','clone','delete','entrycget','entryconfigure',
+ 'index','insert','invoke','post','postcascade','type',
+ 'unpost','yposition');
+
+import Tk qw(Ev);
+
+sub CreateArgs
+{
+ my ($package,$parent,$args) = @_;
+ # Remove from hash %$args any configure-like
+ # options which only apply at create time (e.g. -class for Frame)
+ # return these as a list of -key => value pairs
+ my @result = ();
+ my $opt;
+ foreach $opt (qw(-type -screen -visual -colormap))
+ {
+ my $val = delete $args->{$opt};
+ push(@result, $opt => $val) if (defined $val);
+ }
+ return @result;
+}
+
+sub InitObject
+{
+ my ($menu,$args) = @_;
+ my $menuitems = delete $args->{-menuitems};
+ $menu->SUPER::InitObject($args);
+ if (defined $menuitems)
+ {
+ # If any other args do configure now
+ if (%$args)
+ {
+ $menu->configure(%$args);
+ %$args = ();
+ }
+ $menu->AddItems(@$menuitems)
+ }
+}
+
+sub AddItems
+{
+ my $menu = shift;
+ ITEM:
+ while (@_)
+ {
+ my $item = shift;
+ if (!ref($item))
+ {
+ $menu->separator; # A separator
+ }
+ else
+ {
+ my ($kind,$name,%minfo) = ( @$item );
+ my $invoke = delete $minfo{'-invoke'};
+ if (defined $name)
+ {
+ $minfo{-label} = $name unless defined($minfo{-label});
+ $menu->$kind(%minfo);
+ }
+ else
+ {
+ $menu->BackTrace("Don't recognize " . join(' ',@$item));
+ }
+ } # A non-separator
+ }
+}
+
+#
+#-------------------------------------------------------------------------
+# Elements of tkPriv that are used in this file:
+#
+# cursor - Saves the -cursor option for the posted menubutton.
+# focus - Saves the focus during a menu selection operation.
+# Focus gets restored here when the menu is unposted.
+# inMenubutton - The name of the menubutton widget containing
+# the mouse, or an empty string if the mouse is
+# not over any menubutton.
+# popup - If a menu has been popped up via tk_popup, this
+# gives the name of the menu. Otherwise this
+# value is empty.
+# postedMb - Name of the menubutton whose menu is currently
+# posted, or an empty string if nothing is posted
+# A grab is set on this widget.
+# relief - Used to save the original relief of the current
+# menubutton.
+# window - When the mouse is over a menu, this holds the
+# name of the menu; it's cleared when the mouse
+# leaves the menu.
+#-------------------------------------------------------------------------
+#-------------------------------------------------------------------------
+# Overall note:
+# This file is tricky because there are four different ways that menus
+# can be used:
+#
+# 1. As a pulldown from a menubutton. This is the most common usage.
+# In this style, the variable tkPriv(postedMb) identifies the posted
+# menubutton.
+# 2. As a torn-off menu copied from some other menu. In this style
+# tkPriv(postedMb) is empty, and the top-level menu is no
+# override-redirect.
+# 3. As an option menu, triggered from an option menubutton. In thi
+# style tkPriv(postedMb) identifies the posted menubutton.
+# 4. As a popup menu. In this style tkPriv(postedMb) is empty and
+# the top-level menu is override-redirect.
+#
+# The various binding procedures use the state described above to
+# distinguish the various cases and take different actions in each
+# case.
+#-------------------------------------------------------------------------
+# Bind --
+# This procedure is invoked the first time the mouse enters a menubutton
+# widget or a menubutton widget receives the input focus. It creates
+# all of the class bindings for both menubuttons and menus.
+#
+# Arguments:
+# w - The widget that was just entered or just received
+# the input focus.
+# event - Indicates which event caused the procedure to be invoked
+# (Enter or FocusIn). It is used so that we can carry out
+# the functions of that event in addition to setting up
+# bindings.
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ # Must set focus when mouse enters a menu, in order to allow
+ # mixed-mode processing using both the mouse and the keyboard.
+ $mw->bind($class,'<FocusIn>', 'NoOp');
+ $mw->bind($class,'<Enter>', 'Enter');
+ $mw->bind($class,'<Leave>', ['Leave',Ev('X'),Ev('Y'),Ev('s')]);
+ $mw->bind($class,'<Motion>', ['Motion',Ev('x'),Ev('y'),Ev('s')]);
+ $mw->bind($class,'<ButtonPress>','ButtonDown');
+ $mw->bind($class,'<ButtonRelease>',['Invoke',1]);
+ $mw->bind($class,'<space>',['Invoke',0]);
+ $mw->bind($class,'<Return>',['Invoke',0]);
+ $mw->bind($class,'<Escape>','Escape');
+ $mw->bind($class,'<Left>','LeftArrow');
+ $mw->bind($class,'<Right>','RightArrow');
+ $mw->bind($class,'<Up>','UpArrow');
+ $mw->bind($class,'<Down>','DownArrow');
+ $mw->bind($class,'<KeyPress>', ['TraverseWithinMenu',Ev('K')]);
+ $mw->bind($class,'<Alt-KeyPress>', ['TraverseWithinMenu',Ev('K')]);
+ return $class;
+}
+
+sub UpArrow
+{
+ my $menu = shift;
+ if ($menu->cget('-type') eq 'menubar')
+ {
+ $menu->NextMenu('left');
+ }
+ else
+ {
+ $menu->NextEntry(-1);
+ }
+}
+
+sub DownArrow
+{
+ my $menu = shift;
+ if ($menu->cget('-type') eq 'menubar')
+ {
+ $menu->NextMenu('right');
+ }
+ else
+ {
+ $menu->NextEntry(1);
+ }
+}
+
+sub LeftArrow
+{
+ my $menu = shift;
+ if ($menu->cget('-type') eq 'menubar')
+ {
+ $menu->NextEntry(-1);
+ }
+ else
+ {
+ $menu->NextMenu('left');
+ }
+}
+
+sub RightArrow
+{
+ my $menu = shift;
+ if ($menu->cget('-type') eq 'menubar')
+ {
+ $menu->NextEntry(1);
+ }
+ else
+ {
+ $menu->NextMenu('right');
+ }
+}
+
+
+
+# Unpost --
+# This procedure unposts a given menu, plus all of its ancestors up
+# to (and including) a menubutton, if any. It also restores various
+# values to what they were before the menu was posted, and releases
+# a grab if there's a menubutton involved. Special notes:
+# 1. It's important to unpost all menus before releasing the grab, so
+# that any Enter-Leave events (e.g. from menu back to main
+# application) have mode NotifyGrab.
+# 2. Be sure to enclose various groups of commands in "catch" so that
+# the procedure will complete even if the menubutton or the menu
+# or the grab window has been deleted.
+#
+# Arguments:
+# menu - Name of a menu to unpost. Ignored if there
+# is a posted menubutton.
+sub Unpost
+{
+ my $menu = shift;
+ my $mb = $Tk::postedMb;
+
+ # Restore focus right away (otherwise X will take focus away when
+ # the menu is unmapped and under some window managers (e.g. olvwm)
+ # we'll lose the focus completely).
+
+ eval {local $SIG{__DIE__}; $Tk::focus->focus() } if (defined $Tk::focus);
+ undef $Tk::focus;
+
+ # Unpost menu(s) and restore some stuff that's dependent on
+ # what was posted.
+ eval {local $SIG{__DIE__};
+ if (defined $mb)
+ {
+ $menu = $mb->cget('-menu');
+ $menu->unpost();
+ $Tk::postedMb = undef;
+ $mb->configure('-cursor',$Tk::cursor);
+ $mb->configure('-relief',$Tk::relief)
+ }
+ elsif (defined $Tk::popup)
+ {
+ $Tk::popup->unpost();
+ my $grab = $Tk::popup->grabCurrent;
+ $grab->grabRelease if (defined $grab);
+
+ undef $Tk::popup;
+ }
+ elsif (defined $menu && ref $menu &&
+ $menu->cget('-type') ne 'menubar' &&
+ $menu->cget('-type') ne 'tearoff'
+ )
+ {
+ # We're in a cascaded sub-menu from a torn-off menu or popup.
+ # Unpost all the menus up to the toplevel one (but not
+ # including the top-level torn-off one) and deactivate the
+ # top-level torn off menu if there is one.
+ while (1)
+ {
+ my $parent = $menu->parent;
+ last if (!$parent->IsMenu || !$parent->ismapped);
+ $parent->postcascade('none');
+ $parent->GenerateMenuSelect;
+ $parent->activate('none');
+ my $type = $parent->cget('-type');
+ last if ($type eq 'menubar' || $type eq 'tearoff');
+ $menu = $parent
+ }
+ $menu->unpost() if ($menu->cget('-type') ne 'menubar');
+ }
+ };
+ warn "$@" if ($@);
+ if ($Tk::tearoff || $Tk::menubar)
+ {
+ # Release grab, if any.
+ if (defined $menu && ref $menu)
+ {
+ my $grab = $menu->grabCurrent;
+ $grab->grabRelease if (defined $grab);
+ }
+ RestoreOldGrab();
+ if ($Tk::menubar)
+ {
+ $Tk::menubar->configure(-cursor => $Tk::cursor);
+ undef $Tk::menubar;
+ }
+ if ($Tk::platform ne 'unix')
+ {
+ undef $Tk::tearoff;
+ }
+ }
+}
+
+sub RestoreOldGrab
+{
+ if (defined $Tk::oldGrab)
+ {
+ eval
+ {
+ local $SIG{__DIE__};
+ if ($Tk::grabStatus eq 'global')
+ {
+ $Tk::oldGrab->grabGlobal;
+ }
+ else
+ {
+ $Tk::oldGrab->grab;
+ }
+ };
+ undef $Tk::oldGrab;
+ }
+}
+
+sub typeIS
+{my $w = shift;
+ my $type = $w->type(shift);
+ return defined $type && $type eq shift;
+}
+
+# Motion --
+# This procedure is called to handle mouse motion events for menus.
+# It does two things. First, it resets the active element in the
+# menu, if the mouse is over the menu. Second, if a mouse button
+# is down, it posts and unposts cascade entries to match the mouse
+# position.
+#
+# Arguments:
+# menu - The menu window.
+# y - The y position of the mouse.
+# state - Modifier state (tells whether buttons are down).
+sub Motion
+{
+ my $menu = shift;
+ my $x = shift;
+ my $y = shift;
+ my $state = shift;
+ my $t = $menu->cget('-type');
+
+ if ($menu->IS($Tk::window))
+ {
+ if ($menu->cget('-type') eq 'menubar')
+ {
+# if (defined($Tk::focus) && $Tk::focus != $menu)
+ {
+ $menu->activate("\@$x,$y");
+ $menu->GenerateMenuSelect;
+ }
+ }
+ else
+ {
+ $menu->activate("\@$x,$y");
+ $menu->GenerateMenuSelect;
+ }
+ }
+ if (($state & 0x1f00) != 0)
+ {
+ $menu->postcascade('active')
+ }
+}
+# ButtonDown --
+# Handles button presses in menus. There are a couple of tricky things
+# here:
+# 1. Change the posted cascade entry (if any) to match the mouse position.
+# 2. If there is a posted menubutton, must grab to the menubutton so
+# that it can track mouse motions over other menubuttons and change
+# the posted menu.
+# 3. If there's no posted menubutton (e.g. because we're a torn-off menu
+# or one of its descendants) must grab to the top-level menu so that
+# we can track mouse motions across the entire menu hierarchy.
+
+#
+# Arguments:
+# menu - The menu window.
+sub ButtonDown
+{
+ my $menu = shift;
+ $menu->postcascade('active');
+ if (defined $Tk::postedMb)
+ {
+ $Tk::postedMb->grabGlobal
+ }
+ else
+ {
+ while ($menu->cget('-type') eq 'normal'
+ && $menu->parent->IsMenu
+ && $menu->parent->ismapped
+ )
+ {
+ $menu = $menu->parent;
+ }
+
+ if (!defined $Tk::menuBar)
+ {
+ $Tk::menuBar = $menu;
+ $Tk::cursor = $menu->cget('-cursor');
+ $menu->configure(-cursor => 'arrow');
+ }
+
+ # Don't update grab information if the grab window isn't changing.
+ # Otherwise, we'll get an error when we unpost the menus and
+ # restore the grab, since the old grab window will not be viewable
+ # anymore.
+
+ $menu->SaveGrabInfo unless ($menu->IS($menu->grabCurrent));
+
+ # Must re-grab even if the grab window hasn't changed, in order
+ # to release the implicit grab from the button press.
+
+ $menu->grabGlobal if ($Tk::platform eq 'unix');
+ }
+}
+
+sub Enter
+{
+ my $w = shift;
+ my $ev = $w->XEvent;
+ $Tk::window = $w;
+ if ($w->cget('-type') eq 'tearoff')
+ {
+ if ($ev->m ne 'NotifyUngrab')
+ {
+ $w->SetFocus if ($Tk::platform eq 'unix');
+ }
+ }
+ $w->Motion($ev->x, $ev->y, $ev->s);
+}
+
+# Leave --
+# This procedure is invoked to handle Leave events for a menu. It
+# deactivates everything unless the active element is a cascade element
+# and the mouse is now over the submenu.
+#
+# Arguments:
+# menu - The menu window.
+# rootx, rooty - Root coordinates of mouse.
+# state - Modifier state.
+sub Leave
+{
+ my $menu = shift;
+ my $rootx = shift;
+ my $rooty = shift;
+ my $state = shift;
+ undef $Tk::window;
+ return if ($menu->index('active') eq 'none');
+ if ($menu->typeIS('active','cascade'))
+ {
+ my $c = $menu->Containing($rootx,$rooty);
+ return if (defined $c && $menu->entrycget('active','-menu')->IS($c));
+ }
+ $menu->activate('none');
+ $menu->GenerateMenuSelect;
+}
+
+# Invoke --
+# This procedure is invoked when button 1 is released over a menu.
+# It invokes the appropriate menu action and unposts the menu if
+# it came from a menubutton.
+#
+# Arguments:
+# w - Name of the menu widget.
+sub Invoke
+{
+ my $w = shift;
+ my $release = shift;
+
+ if ($release && !defined($Tk::window))
+ {
+ # Mouse was pressed over a menu without a menu button, then
+ # dragged off the menu (possibly with a cascade posted) and
+ # released. Unpost everything and quit.
+
+ $w->postcascade('none');
+ $w->activate('none');
+ $w->eventGenerate('<<MenuSelect>>');
+ $w->Unpost;
+ return;
+ }
+
+ my $type = $w->type('active');
+ if ($w->typeIS('active','cascade'))
+ {
+ $w->postcascade('active');
+ my $menu = $w->entrycget('active','-menu');
+ $menu->FirstEntry() if (defined $menu);
+ }
+ elsif ($w->typeIS('active','tearoff'))
+ {
+ $w->Unpost();
+ $w->tearOffMenu();
+ }
+ elsif ($w->typeIS('active','menubar'))
+ {
+ $w->postcascade('none');
+ $w->activate('none');
+ $w->eventGenerate('<<MenuSelect>>');
+ $w->Unpost;
+ }
+ else
+ {
+ $w->Unpost();
+ $w->invoke('active')
+ }
+}
+# Escape --
+# This procedure is invoked for the Cancel (or Escape) key. It unposts
+# the given menu and, if it is the top-level menu for a menu button,
+# unposts the menu button as well.
+#
+# Arguments:
+# menu - Name of the menu window.
+sub Escape
+{
+ my $menu = shift;
+ my $parent = $menu->parent;
+ if (!$parent->IsMenu)
+ {
+ $menu->Unpost()
+ }
+ elsif ($parent->cget('-type') eq 'menubar')
+ {
+ $menu->Unpost;
+ RestoreOldGrab();
+ }
+ else
+ {
+ $menu->NextMenu(-1)
+ }
+}
+# LeftRight --
+# This procedure is invoked to handle "left" and "right" traversal
+# motions in menus. It traverses to the next menu in a menu bar,
+# or into or out of a cascaded menu.
+#
+# Arguments:
+# menu - The menu that received the keyboard
+# event.
+# direction - Direction in which to move: "left" or "right"
+sub NextMenu
+{
+ my $menu = shift;
+ my $direction = shift;
+ # First handle traversals into and out of cascaded menus.
+ my $count;
+ if ($direction eq 'right')
+ {
+ $count = 1;
+ if ($menu->typeIS('active','cascade'))
+ {
+ $menu->postcascade('active');
+ my $m2 = $menu->entrycget('active','-menu');
+ $m2->FirstEntry if (defined $m2);
+ return;
+ }
+ else
+ {
+ my $parent = $menu->parent;
+ while ($parent->PathName ne '.')
+ {
+ if ($parent->IsMenu && $parent->cget('-type') eq 'menubar')
+ {
+ $parent->SetFocus;
+ $parent->NextEntry(1);
+ return;
+ }
+ $parent = $parent->parent;
+ }
+ }
+ }
+ else
+ {
+ $count = -1;
+ my $m2 = $menu->parent;
+ if ($m2->IsMenu)
+ {
+ if ($m2->cget('-type') ne 'menubar')
+ {
+ $menu->activate('none');
+ $menu->GenerateMenuSelect;
+ $m2->SetFocus;
+ # This code unposts any posted submenu in the parent.
+ my $tmp = $m2->index('active');
+ $m2->activate('none');
+ $m2->activate($tmp);
+ return;
+ }
+ }
+ }
+ # Can't traverse into or out of a cascaded menu. Go to the next
+ # or previous menubutton, if that makes sense.
+
+ my $m2 = $menu->parent;
+ if ($m2->IsMenu)
+ {
+ if ($m2->cget('-type') eq 'menubar')
+ {
+ $m2->SetFocus;
+ $m2->NextEntry(-1);
+ return;
+ }
+ }
+
+ my $w = $Tk::postedMb;
+ return unless defined $w;
+ my @buttons = $w->parent->children;
+ my $length = @buttons;
+ my $i = Tk::lsearch(\@buttons,$w)+$count;
+ my $mb;
+ while (1)
+ {
+ while ($i < 0)
+ {
+ $i += $length
+ }
+ while ($i >= $length)
+ {
+ $i += -$length
+ }
+ $mb = $buttons[$i];
+ last if ($mb->IsMenubutton && $mb->cget('-state') ne 'disabled'
+ && defined($mb->cget('-menu'))
+ && $mb->cget('-menu')->index('last') ne 'none'
+ );
+ return if ($mb == $w);
+ $i += $count
+ }
+ $mb->PostFirst();
+}
+# NextEntry --
+# Activate the next higher or lower entry in the posted menu,
+# wrapping around at the ends. Disabled entries are skipped.
+#
+# Arguments:
+# menu - Menu window that received the keystroke.
+# count - 1 means go to the next lower entry,
+# -1 means go to the next higher entry.
+sub NextEntry
+{
+ my $menu = shift;
+ my $count = shift;
+ if ($menu->index('last') eq 'none')
+ {
+ return;
+ }
+ my $length = $menu->index('last')+1;
+ my $quitAfter = $length;
+ my $active = $menu->index('active');
+ my $i = ($active eq 'none') ? 0 : $active+$count;
+ while (1)
+ {
+ return if ($quitAfter <= 0);
+ while ($i < 0)
+ {
+ $i += $length
+ }
+ while ($i >= $length)
+ {
+ $i += -$length
+ }
+ my $state = eval {local $SIG{__DIE__}; $menu->entrycget($i,'-state') };
+ last if (defined($state) && $state ne 'disabled');
+ return if ($i == $active);
+ $i += $count;
+ $quitAfter -= 1;
+ }
+ $menu->activate($i);
+ $menu->GenerateMenuSelect;
+ if ($menu->type($i) eq 'cascade')
+ {
+ my $cascade = $menu->entrycget($i, '-menu');
+ $menu->postcascade($i);
+ $cascade->FirstEntry if (defined $cascade);
+ }
+}
+
+
+# tkTraverseWithinMenu
+# This procedure implements keyboard traversal within a menu. It
+# searches for an entry in the menu that has "char" underlined. If
+# such an entry is found, it is invoked and the menu is unposted.
+#
+# Arguments:
+# w - The name of the menu widget.
+# char - The character to look for; case is
+# ignored. If the string is empty then
+# nothing happens.
+sub TraverseWithinMenu
+{
+ my $w = shift;
+ my $char = shift;
+ return unless (defined $char);
+ $char = "\L$char";
+ my $last = $w->index('last');
+ return if ($last eq 'none');
+ for (my $i = 0;$i <= $last;$i += 1)
+ {
+ my $label = eval {local $SIG{__DIE__}; $w->entrycget($i,'-label') };
+ next unless defined($label);
+ my $ul = $w->entrycget($i,'-underline');
+ if (defined $ul && $ul >= 0)
+ {
+ $label = substr("\L$label",$ul,1);
+ if (defined($label) && $label eq $char)
+ {
+ if ($w->type($i) eq 'cascade')
+ {
+ $w->postcascade($i);
+ $w->activate($i);
+ my $m2 = $w->entrycget($i,'-menu');
+ $m2->FirstEntry if (defined $m2);
+ }
+ else
+ {
+ $w->Unpost();
+ $w->invoke($i);
+ }
+ return;
+ }
+ }
+ }
+}
+
+sub FindMenu
+{
+ my ($menu,$char) = @_;
+ if ($menu->cget('-type') eq 'menubar')
+ {
+ if (!defined($char) || $char eq '')
+ {
+ $menu->FirstEntry;
+ }
+ else
+ {
+ $menu->TraverseWithinMenu($char);
+ }
+ return $menu;
+ }
+ return undef;
+}
+
+
+# FirstEntry --
+# Given a menu, this procedure finds the first entry that isn't
+# disabled or a tear-off or separator, and activates that entry.
+# However, if there is already an active entry in the menu (e.g.,
+# because of a previous call to tkPostOverPoint) then the active
+# entry isn't changed. This procedure also sets the input focus
+# to the menu.
+#
+# Arguments:
+# menu - Name of the menu window (possibly empty).
+sub FirstEntry
+{
+ my $menu = shift;
+ return if (!defined($menu) || $menu eq '' || !ref($menu));
+ $menu->SetFocus;
+ return if ($menu->index('active') ne 'none');
+ my $last = $menu->index('last');
+ return if ($last eq 'none');
+ for (my $i = 0;$i <= $last;$i += 1)
+ {
+ my $state = eval {local $SIG{__DIE__}; $menu->entrycget($i,'-state') };
+ if (defined $state && $state ne 'disabled' && !$menu->typeIS($i,'tearoff'))
+ {
+ $menu->activate($i);
+ $menu->GenerateMenuSelect;
+ if ($menu->type($i) eq 'cascade')
+ {
+ my $cascade = $menu->entrycget($i,'-menu');
+ if (defined $cascade)
+ {
+ $menu->postcascade($i);
+ $cascade->FirstEntry;
+ }
+ }
+ return;
+ }
+ }
+}
+
+# FindName --
+# Given a menu and a text string, return the index of the menu entry
+# that displays the string as its label. If there is no such entry,
+# return an empty string. This procedure is tricky because some names
+# like "active" have a special meaning in menu commands, so we can't
+# always use the "index" widget command.
+#
+# Arguments:
+# menu - Name of the menu widget.
+# s - String to look for.
+sub FindName
+{
+ my $menu = shift;
+ my $s = shift;
+ my $i = undef;
+ if ($s !~ /^active$|^last$|^none$|^[0-9]|^@/)
+ {
+ $i = eval {local $SIG{__DIE__}; $menu->index($s) };
+ return $i;
+ }
+ my $last = $menu->index('last');
+ return if ($last eq 'none');
+ for ($i = 0;$i <= $last;$i += 1)
+ {
+ my $label = eval {local $SIG{__DIE__}; $menu->entrycget($i,'-label') };
+ return $i if (defined $label && $label eq $s);
+ }
+ return undef;
+}
+# PostOverPoint --
+# This procedure posts a given menu such that a given entry in the
+# menu is centered over a given point in the root window. It also
+# activates the given entry.
+#
+# Arguments:
+# menu - Menu to post.
+# x, y - Root coordinates of point.
+# entry - Index of entry within menu to center over (x,y).
+# If omitted or specified as {}, then the menu's
+# upper-left corner goes at (x,y).
+sub PostOverPoint
+{
+ my $menu = shift;
+ my $x = shift;
+ my $y = shift;
+ my $entry = shift;
+ if (defined $entry)
+ {
+ if ($entry == $menu->index('last'))
+ {
+ $y -= ($menu->yposition($entry)+$menu->height)/2;
+ }
+ else
+ {
+ $y -= ($menu->yposition($entry)+$menu->yposition($entry+1))/2;
+ }
+ $x -= $menu->reqwidth/2;
+ }
+ $menu->post($x,$y);
+ if (defined($entry) && $menu->entrycget($entry,'-state') ne 'disabled')
+ {
+ $menu->activate($entry);
+ $menu->GenerateMenuSelect;
+ }
+}
+# tk_popup --
+# This procedure pops up a menu and sets things up for traversing
+# the menu and its submenus.
+#
+# Arguments:
+# menu - Name of the menu to be popped up.
+# x, y - Root coordinates at which to pop up the
+# menu.
+# entry - Index of a menu entry to center over (x,y).
+# If omitted or specified as {}, then menu's
+# upper-left corner goes at (x,y).
+sub Post
+{
+ my $menu = shift;
+ return unless (defined $menu);
+ my $x = shift;
+ my $y = shift;
+ my $entry = shift;
+ Unpost(undef) if (defined($Tk::popup) || defined($Tk::postedMb));
+ $menu->PostOverPoint($x,$y,$entry);
+ $menu->grabGlobal;
+ $Tk::popup = $menu;
+ $Tk::focus = $menu->focusCurrent;
+ $menu->focus();
+}
+
+sub SetFocus
+{
+ my $menu = shift;
+ $Tk::focus = $menu->focusCurrent if (!defined($Tk::focus));
+ $menu->focus;
+}
+
+sub GenerateMenuSelect
+{
+ my $menu = shift;
+ $Tk::activeMenu = $menu;
+ $Tk::activeItem = $menu->index('active');
+ $menu->eventGenerate('<<MenuSelect>>'); # FIXME
+}
+
+# Converted from tearoff.tcl --
+#
+# This file contains procedures that implement tear-off menus.
+#
+# @(#) tearoff.tcl 1.3 94/12/17 16:05:25
+#
+# Copyright (c) 1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# tkTearoffMenu --
+# Given the name of a menu, this procedure creates a torn-off menu
+# that is identical to the given menu (including nested submenus).
+# The new torn-off menu exists as a toplevel window managed by the
+# window manager. The return value is the name of the new menu.
+#
+# Arguments:
+# w - The menu to be torn-off (duplicated).
+sub tearOffMenu
+{
+ my $w = shift;
+ my $x = (@_) ? shift : 0;
+ my $y = (@_) ? shift : 0;
+
+ $x = $w->rootx if $x == 0;
+ $y = $w->rooty if $y == 0;
+
+ # Find a unique name to use for the torn-off menu. Find the first
+ # ancestor of w that is a toplevel but not a menu, and use this as
+ # the parent of the new menu. This guarantees that the torn off
+ # menu will be on the same screen as the original menu. By making
+ # it a child of the ancestor, rather than a child of the menu, it
+ # can continue to live even if the menu is deleted; it will go
+ # away when the toplevel goes away.
+
+ my $parent = $w->parent;
+ while ($parent->toplevel != $parent || $parent->IsMenu)
+ {
+ $parent = $parent->parent;
+ }
+ my $menu = $w->clone($parent,'tearoff');
+
+ # Pick a title for the new menu by looking at the parent of the
+ # original: if the parent is a menu, then use the text of the active
+ # entry. If it's a menubutton then use its text.
+ my $title = $menu->cget('-title');
+ unless (defined $title && length($title))
+ {
+ $parent = $w->parent;
+ if ($parent->IsMenubutton)
+ {
+ $title = $parent->cget('-text');
+ }
+ elsif ($parent->IsMenu)
+ {
+ $title = $parent->entrycget('active','-label');
+ }
+ }
+ $menu->title($title) if (defined $title && length($title));
+ $menu->post($x,$y);
+ # Set tkPriv(focus) on entry: otherwise the focus will get lost
+ # after keyboard invocation of a sub-menu (it will stay on the
+ # submenu).
+ $menu->bind('<Enter>','EnterFocus');
+ $menu->Callback('-tearoffcommand');
+ return $menu;
+}
+
+# tkMenuDup --
+# Given a menu (hierarchy), create a duplicate menu (hierarchy)
+# in a given window.
+#
+# Arguments:
+# src - Source window. Must be a menu. It and its
+# menu descendants will be duplicated at dst.
+# dst - Name to use for topmost menu in duplicate
+# hierarchy.
+sub MenuDup
+{
+ my $src = shift;
+ my $parent = shift;
+ my $type = (@_) ? shift : 'normal';
+ my %args = (-type => $type) ;
+ foreach my $option ($src->configure())
+ {
+ next if (@$option == 2);
+ $args{$$option[0]} = $$option[4] unless exists $args{$$option[0]};
+ }
+ my $dst = ref($src)->new($parent,%args);
+ if ($type eq 'tearoff')
+ {
+ $dst->transient($parent->MainWindow);
+ }
+ my $last = $src->index('last');
+ if ($last ne 'none')
+ {
+ for (my $i = $src->cget('-tearoff'); $i <= $last; $i++)
+ {
+ my $type = $src->type($i);
+ if (defined $type)
+ {
+ my @args = ();
+ foreach my $option ($src->entryconfigure($i))
+ {
+ next if (@$option == 2);
+ push(@args,$$option[0],$$option[4]) if (defined $$option[4]);
+ }
+ $dst->add($type,@args);
+ }
+ }
+ }
+ # Duplicate the binding tags and bindings from the source menu.
+ my @bindtags = $src->bindtags;
+ my $path = $src->PathName;
+ foreach (@bindtags)
+ {
+ $_ = $dst if ($_ eq $path);
+ }
+ $dst->bindtags([@bindtags]);
+ foreach my $event ($src->bind)
+ {
+ my $cb = $src->bind($event);
+ $dst->bind($event,$cb->Substitute($src,$dst));
+ }
+ return $dst;
+}
+
+
+
+# Some convenience methods
+
+sub separator { require Tk::Menu::Item; shift->Separator(@_); }
+sub cascade { require Tk::Menu::Item; shift->Cascade(@_); }
+sub checkbutton { require Tk::Menu::Item; shift->Checkbutton(@_); }
+sub radiobutton { require Tk::Menu::Item; shift->Radiobutton(@_); }
+
+sub command
+{
+ my ($menu,%args) = @_;
+ require Tk::Menu::Item;
+ if (exists $args{-button})
+ {
+ # Backward compatible stuff from 'Menubar'
+ my $button = delete $args{-button};
+ $button = ['Misc', -underline => 0 ] unless (defined $button);
+ my @bargs = ();
+ ($button,@bargs) = @$button if (ref($button) && ref $button eq 'ARRAY');
+ $menu = $menu->Menubutton(-label => $button, @bargs);
+ }
+ $menu->Command(%args);
+}
+
+sub Menubutton
+{
+ my ($menu,%args) = @_;
+ my $name = delete($args{'-text'}) || $args{'-label'};;
+ $args{'-label'} = $name if (defined $name);
+ my $items = delete $args{'-menuitems'};
+ foreach my $opt (qw(-pack -after -before -side -padx -ipadx -pady -ipady -fill))
+ {
+ delete $args{$opt};
+ }
+ if (defined($name) && !defined($args{-underline}))
+ {
+ my $underline = ($name =~ s/^(.*)~/$1/) ? length($1): undef;
+ if (defined($underline) && ($underline >= 0))
+ {
+ $args{-underline} = $underline;
+ $args{-label} = $name;
+ }
+ }
+ my $hash = $menu->TkHash('MenuButtons');
+ my $mb = $hash->{$name};
+ if (defined $mb)
+ {
+ delete $args{'-tearoff'}; # too late!
+ $mb->configure(%args) if %args;
+ }
+ else
+ {
+ $mb = $menu->cascade(%args);
+ $hash->{$name} = $mb;
+ }
+ $mb->menu->AddItems(@$items) if defined($items) && @$items;
+ return $mb;
+}
+
+sub BalloonInfo
+{
+ my ($menu,$balloon,$X,$Y,@opt) = @_;
+ my $i = $menu->index('active');
+ if ($i eq 'none')
+ {
+ my $y = $Y - $menu->rooty;
+ $i = $menu->index("\@$y");
+ }
+ foreach my $opt (@opt)
+ {
+ my $info = $balloon->GetOption($opt,$menu);
+ if ($opt =~ /^-(statusmsg|balloonmsg)$/ && UNIVERSAL::isa($info,'ARRAY'))
+ {
+ $balloon->Subclient($i);
+ return '' if $i eq 'none';
+ return ${$info}[$i] || '';
+ }
+ return $info;
+ }
+}
+
+1;
+
+__END__
+
+
diff --git a/Master/xemtex/perl/site/lib/Tk/Menu/Item.pm b/Master/xemtex/perl/site/lib/Tk/Menu/Item.pm
new file mode 100644
index 00000000000..ab341ebaf84
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Menu/Item.pm
@@ -0,0 +1,180 @@
+package Tk::Menu::Item;
+
+require Tk::Menu;
+
+use Carp;
+use strict;
+
+use vars qw($VERSION);
+$VERSION = '3.027'; # $Id: //depot/Tk8/Tk/Menu/Item.pm#27 $
+
+sub PreInit
+{
+ # Dummy (virtual) method
+ my ($class,$menu,$minfo) = @_;
+}
+
+sub new
+{
+ my ($class,$menu,%minfo) = @_;
+ my $kind = $class->kind;
+ my $name = $minfo{'-label'};
+ if (defined $kind)
+ {
+ my $invoke = delete $minfo{'-invoke'};
+ if (defined $name)
+ {
+ # Use ~ in name/label to set -underline
+ if (defined($minfo{-label}) && !defined($minfo{-underline}))
+ {
+ my $cleanlabel = $minfo{-label};
+ my $underline = ($cleanlabel =~ s/^(.*)~/$1/) ? length($1): undef;
+ if (defined($underline) && ($underline >= 0))
+ {
+ $minfo{-underline} = $underline;
+ $name = $cleanlabel if ($minfo{-label} eq $name);
+ $minfo{-label} = $cleanlabel;
+ }
+ }
+ }
+ else
+ {
+ $name = $minfo{'-bitmap'} || $minfo{'-image'};
+ croak('No -label') unless defined($name);
+ $minfo{'-label'} = $name;
+ }
+ $class->PreInit($menu,\%minfo);
+ $menu->add($kind,%minfo);
+ $menu->invoke('last') if ($invoke);
+ }
+ else
+ {
+ $menu->add('separator');
+ }
+ return bless [$menu,$name],$class;
+}
+
+sub configure
+{
+ my $obj = shift;
+ my ($menu,$name) = @$obj;
+ my %args = @_;
+ $obj->[1] = $args{'-label'} if exists $args{'-label'};
+ $menu->entryconfigure($name,@_);
+}
+
+sub cget
+{
+ my $obj = shift;
+ my ($menu,$name) = @$obj;
+ $menu->entrycget($name,@_);
+}
+
+sub parentMenu
+{
+ my $obj = shift;
+ return $obj->[0];
+}
+
+# Default "kind" is a command
+sub kind { return 'command' }
+
+# Now the derived packages
+
+package Tk::Menu::Separator;
+use base qw(Tk::Menu::Item);
+Construct Tk::Menu 'Separator';
+sub kind { return undef }
+
+package Tk::Menu::Button;
+use base qw(Tk::Menu::Item);
+Construct Tk::Menu 'Button';
+Construct Tk::Menu 'Command';
+
+#package Tk::Menu::Command;
+#use base qw(Tk::Menu::Button);
+#Construct Tk::Menu 'Command';
+
+package Tk::Menu::Cascade;
+use base qw(Tk::Menu::Item);
+Construct Tk::Menu 'Cascade';
+sub kind { return 'cascade' }
+use Carp;
+
+sub PreInit
+{
+ my ($class,$menu,$minfo) = @_;
+ my $tearoff = delete $minfo->{-tearoff};
+ my $items = delete $minfo->{-menuitems};
+ my $widgetvar = delete $minfo->{-menuvar};
+ my $command = delete $minfo->{-postcommand};
+ my $name = delete $minfo->{'Name'};
+ $name = $minfo->{'-label'} unless defined $name;
+ my @args = ();
+ push(@args, '-tearoff' => $tearoff) if (defined $tearoff);
+ push(@args, '-menuitems' => $items) if (defined $items);
+ push(@args, '-postcommand' => $command) if (defined $command);
+ my $submenu = $minfo->{'-menu'};
+ unless (defined $submenu)
+ {
+ $minfo->{'-menu'} = $submenu = $menu->Menu(Name => $name, @args);
+ }
+ $$widgetvar = $submenu if (defined($widgetvar) && ref($widgetvar));
+}
+
+sub menu
+{
+ my ($self,%args) = @_;
+ my $w = $self->parentMenu;
+ my $menu = $self->cget('-menu');
+ if (!defined $menu)
+ {
+ require Tk::Menu;
+ $w->ColorOptions(\%args);
+ my $name = $self->cget('-label');
+ warn "Had to (re-)reate menu for $name";
+ $menu = $w->Menu(Name => $name, %args);
+ $self->configure('-menu'=>$menu);
+ }
+ else
+ {
+ $menu->configure(%args) if %args;
+ }
+ return $menu;
+}
+
+# Some convenience methods
+
+sub separator { shift->menu->Separator(@_); }
+sub command { shift->menu->Command(@_); }
+sub cascade { shift->menu->Cascade(@_); }
+sub checkbutton { shift->menu->Checkbutton(@_); }
+sub radiobutton { shift->menu->Radiobutton(@_); }
+
+sub pack
+{
+ my $w = shift;
+ if ($^W)
+ {
+ require Carp;
+ Carp::carp("Cannot 'pack' $w - done automatically")
+ }
+}
+
+package Tk::Menu::Checkbutton;
+use base qw(Tk::Menu::Item);
+Construct Tk::Menu 'Checkbutton';
+sub kind { return 'checkbutton' }
+
+package Tk::Menu::Radiobutton;
+use base qw(Tk::Menu::Item);
+Construct Tk::Menu 'Radiobutton';
+sub kind { return 'radiobutton' }
+
+package Tk::Menu::Item;
+
+1;
+__END__
+
+=cut
+
diff --git a/Master/xemtex/perl/site/lib/Tk/Menubutton.pm b/Master/xemtex/perl/site/lib/Tk/Menubutton.pm
new file mode 100644
index 00000000000..ef9237900b2
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Menubutton.pm
@@ -0,0 +1,398 @@
+# Converted from menu.tcl --
+#
+# This file defines the default bindings for Tk menus and menubuttons.
+# It also implements keyboard traversal of menus and implements a few
+# other utility procedures related to menus.
+#
+# @(#) menu.tcl 1.34 94/12/19 17:09:09
+#
+# Copyright (c) 1992-1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+
+package Tk::Menubutton;
+require Tk;
+
+use vars qw($VERSION);
+$VERSION = '3.025'; # $Id: //depot/Tk8/Menubutton/Menubutton.pm#25 $
+
+use base qw(Tk::Widget);
+
+Construct Tk::Widget 'Menubutton';
+
+import Tk qw(&Ev $XS_VERSION);
+
+bootstrap Tk::Menubutton;
+
+sub Tk_cmd { \&Tk::menubutton }
+
+sub InitObject
+{
+ my ($mb,$args) = @_;
+ my $menuitems = delete $args->{-menuitems};
+ my $tearoff = delete $args->{-tearoff};
+ $mb->SUPER::InitObject($args);
+ if ((defined($menuitems) || defined($tearoff)) && %$args)
+ {
+ $mb->configure(%$args);
+ %$args = ();
+ }
+ $mb->menu(-tearoff => $tearoff) if (defined $tearoff);
+ $mb->AddItems(@$menuitems) if (defined $menuitems)
+}
+
+
+#
+#-------------------------------------------------------------------------
+# Elements of tkPriv that are used in this file:
+#
+# cursor - Saves the -cursor option for the posted menubutton.
+# focus - Saves the focus during a menu selection operation.
+# Focus gets restored here when the menu is unposted.
+# inMenubutton - The name of the menubutton widget containing
+# the mouse, or an empty string if the mouse is
+# not over any menubutton.
+# popup - If a menu has been popped up via tk_popup, this
+# gives the name of the menu. Otherwise this
+# value is empty.
+# postedMb - Name of the menubutton whose menu is currently
+# posted, or an empty string if nothing is posted
+# A grab is set on this widget.
+# relief - Used to save the original relief of the current
+# menubutton.
+# window - When the mouse is over a menu, this holds the
+# name of the menu; it's cleared when the mouse
+# leaves the menu.
+#-------------------------------------------------------------------------
+#-------------------------------------------------------------------------
+# Overall note:
+# This file is tricky because there are four different ways that menus
+# can be used:
+#
+# 1. As a pulldown from a menubutton. This is the most common usage.
+# In this style, the variable tkPriv(postedMb) identifies the posted
+# menubutton.
+# 2. As a torn-off menu copied from some other menu. In this style
+# tkPriv(postedMb) is empty, and the top-level menu is no
+# override-redirect.
+# 3. As an option menu, triggered from an option menubutton. In thi
+# style tkPriv(postedMb) identifies the posted menubutton.
+# 4. As a popup menu. In this style tkPriv(postedMb) is empty and
+# the top-level menu is override-redirect.
+#
+# The various binding procedures use the state described above to
+# distinguish the various cases and take different actions in each
+# case.
+#-------------------------------------------------------------------------
+# Menu::Bind --
+# This procedure is invoked the first time the mouse enters a menubutton
+# widget or a menubutton widget receives the input focus. It creates
+# all of the class bindings for both menubuttons and menus.
+#
+# Arguments:
+# w - The widget that was just entered or just received
+# the input focus.
+# event - Indicates which event caused the procedure to be invoked
+# (Enter or FocusIn). It is used so that we can carry out
+# the functions of that event in addition to setting up
+# bindings.
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->bind($class,'<FocusIn>','NoOp');
+ $mw->bind($class,'<Enter>','Enter');
+ $mw->bind($class,'<Leave>','Leave');
+ $mw->bind($class,'<1>','ButtonDown');
+ $mw->bind($class,'<Motion>',['Motion','up',Ev('X'),Ev('Y')]);
+ $mw->bind($class,'<B1-Motion>',['Motion','down',Ev('X'),Ev('Y')]);
+ $mw->bind($class,'<ButtonRelease-1>','ButtonUp');
+ $mw->bind($class,'<space>','PostFirst');
+ $mw->bind($class,'<Return>','PostFirst');
+ return $class;
+}
+
+sub ButtonDown
+{my $w = shift;
+ my $Ev = $w->XEvent;
+ $Tk::inMenubutton->Post($Ev->X,$Ev->Y) if (defined $Tk::inMenubutton);
+}
+
+sub PostFirst
+{
+ my $w = shift;
+ my $menu = $w->cget('-menu');
+ $w->Post();
+ $menu->FirstEntry() if (defined $menu);
+}
+
+
+# Enter --
+# This procedure is invoked when the mouse enters a menubutton
+# widget. It activates the widget unless it is disabled. Note:
+# this procedure is only invoked when mouse button 1 is *not* down.
+# The procedure B1Enter is invoked if the button is down.
+#
+# Arguments:
+# w - The name of the widget.
+sub Enter
+{
+ my $w = shift;
+ $Tk::inMenubutton->Leave if (defined $Tk::inMenubutton);
+ $Tk::inMenubutton = $w;
+ if ($w->cget('-state') ne 'disabled')
+ {
+ $w->configure('-state','active')
+ }
+}
+
+sub Leave
+{
+ my $w = shift;
+ $Tk::inMenubutton = undef;
+ return unless Tk::Exists($w);
+ if ($w->cget('-state') eq 'active')
+ {
+ $w->configure('-state','normal')
+ }
+}
+# Post --
+# Given a menubutton, this procedure does all the work of posting
+# its associated menu and unposting any other menu that is currently
+# posted.
+#
+# Arguments:
+# w - The name of the menubutton widget whose menu
+# is to be posted.
+# x, y - Root coordinates of cursor, used for positioning
+# option menus. If not specified, then the center
+# of the menubutton is used for an option menu.
+sub Post
+{
+ my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ return if ($w->cget('-state') eq 'disabled');
+ return if (defined $Tk::postedMb && $w == $Tk::postedMb);
+ my $menu = $w->cget('-menu');
+ return unless (defined($menu) && $menu->index('last') ne 'none');
+
+ my $tearoff = $Tk::platform eq 'unix' || $menu->cget('-type') eq 'tearoff';
+
+ my $wpath = $w->PathName;
+ my $mpath = $menu->PathName;
+ unless (index($mpath,"$wpath.") == 0)
+ {
+ die "Cannot post $mpath : not a descendant of $wpath";
+ }
+
+ my $cur = $Tk::postedMb;
+ if (defined $cur)
+ {
+ Tk::Menu->Unpost(undef); # fixme
+ }
+ $Tk::cursor = $w->cget('-cursor');
+ $Tk::relief = $w->cget('-relief');
+ $w->configure('-cursor','arrow');
+ $w->configure('-relief','raised');
+ $Tk::postedMb = $w;
+ $Tk::focus = $w->focusCurrent;
+ $menu->activate('none');
+ $menu->GenerateMenuSelect;
+ # If this looks like an option menubutton then post the menu so
+ # that the current entry is on top of the mouse. Otherwise post
+ # the menu just below the menubutton, as for a pull-down.
+
+ eval
+ {local $SIG{'__DIE__'};
+ my $dir = $w->cget('-direction');
+ if ($dir eq 'above')
+ {
+ $menu->post($w->rootx, $w->rooty - $menu->ReqHeight);
+ }
+ elsif ($dir eq 'below')
+ {
+ $menu->post($w->rootx, $w->rooty + $w->Height);
+ }
+ elsif ($dir eq 'left')
+ {
+ my $x = $w->rootx - $menu->ReqWidth;
+ my $y = int((2*$w->rooty + $w->Height) / 2);
+ if ($w->cget('-indicatoron') == 1 && defined($w->cget('-textvariable')))
+ {
+ $menu->PostOverPoint($x,$y,$menu->FindName($w->cget('-text')))
+ }
+ else
+ {
+ $menu->post($x,$y);
+ }
+ }
+ elsif ($dir eq 'right')
+ {
+ my $x = $w->rootx + $w->Width;
+ my $y = int((2*$w->rooty + $w->Height) / 2);
+ if ($w->cget('-indicatoron') == 1 && defined($w->cget('-textvariable')))
+ {
+ $menu->PostOverPoint($x,$y,$menu->FindName($w->cget('-text')))
+ }
+ else
+ {
+ $menu->post($x,$y);
+ }
+ }
+ else
+ {
+ if ($w->cget('-indicatoron') == 1 && defined($w->cget('-textvariable')))
+ {
+ if (!defined($y))
+ {
+ $x = $w->rootx+$w->width/2;
+ $y = $w->rooty+$w->height/2
+ }
+ $menu->PostOverPoint($x,$y,$menu->FindName($w->cget('-text')))
+ }
+ else
+ {
+ $menu->post($w->rootx,$w->rooty+$w->height);
+ }
+ }
+ };
+ if ($@)
+ {
+ Tk::Menu->Unpost;
+ die $@
+ }
+
+ $Tk::tearoff = $tearoff;
+ if ($tearoff)
+ {
+ $menu->focus;
+ $w->SaveGrabInfo;
+ $w->grabGlobal;
+ }
+}
+# Motion --
+# This procedure handles mouse motion events inside menubuttons, and
+# also outside menubuttons when a menubutton has a grab (e.g. when a
+# menu selection operation is in progress).
+#
+# Arguments:
+# w - The name of the menubutton widget.
+# upDown - "down" means button 1 is pressed, "up" means
+# it isn't.
+# rootx, rooty - Coordinates of mouse, in (virtual?) root window.
+sub Motion
+{
+ my $w = shift;
+ my $upDown = shift;
+ my $rootx = shift;
+ my $rooty = shift;
+ return if (defined($Tk::inMenubutton) && $Tk::inMenubutton == $w);
+ my $new = $w->Containing($rootx,$rooty);
+ if (defined($Tk::inMenubutton))
+ {
+ if (!defined($new) || ($new != $Tk::inMenubutton && $w->toplevel != $new->toplevel))
+ {
+ $Tk::inMenubutton->Leave();
+ }
+ }
+ if (defined($new) && $new->IsMenubutton && $new->cget('-indicatoron') == 0 &&
+ $w->cget('-indicatoron') == 0)
+ {
+ if ($upDown eq 'down')
+ {
+ $new->Post($rootx,$rooty);
+ }
+ else
+ {
+ $new->Enter();
+ }
+ }
+}
+# ButtonUp --
+# This procedure is invoked to handle button 1 releases for menubuttons.
+# If the release happens inside the menubutton then leave its menu
+# posted with element 0 activated. Otherwise, unpost the menu.
+#
+# Arguments:
+# w - The name of the menubutton widget.
+
+sub ButtonUp {
+ my $w = shift;
+
+ my $tearoff = $Tk::platform eq 'unix' || (defined($w->cget('-menu')) &&
+ $w->cget('-menu')->cget('-type') eq 'tearoff');
+ if ($tearoff && (defined($Tk::postedMb) && $Tk::postedMb == $w)
+ && (defined($Tk::inMenubutton) && $Tk::inMenubutton == $w)) {
+ $Tk::postedMb->cget(-menu)->FirstEntry();
+ } else {
+ Tk::Menu->Unpost(undef);
+ }
+} # end ButtonUp
+
+# Some convenience methods
+
+sub menu
+{
+ my ($w,%args) = @_;
+ my $menu = $w->cget('-menu');
+ if (!defined $menu)
+ {
+ require Tk::Menu;
+ $w->ColorOptions(\%args) if ($Tk::platform eq 'unix');
+ $menu = $w->Menu(%args);
+ $w->configure('-menu'=>$menu);
+ }
+ else
+ {
+ $menu->configure(%args);
+ }
+ return $menu;
+}
+
+sub separator { require Tk::Menu::Item; shift->menu->Separator(@_); }
+sub command { require Tk::Menu::Item; shift->menu->Command(@_); }
+sub cascade { require Tk::Menu::Item; shift->menu->Cascade(@_); }
+sub checkbutton { require Tk::Menu::Item; shift->menu->Checkbutton(@_); }
+sub radiobutton { require Tk::Menu::Item; shift->menu->Radiobutton(@_); }
+
+sub AddItems
+{
+ shift->menu->AddItems(@_);
+}
+
+sub entryconfigure
+{
+ shift->menu->entryconfigure(@_);
+}
+
+sub entrycget
+{
+ shift->menu->entrycget(@_);
+}
+
+sub FindMenu
+{
+ my $child = shift;
+ my $char = shift;
+ my $ul = $child->cget('-underline');
+ if (defined $ul && $ul >= 0 && $child->cget('-state') ne 'disabled')
+ {
+ my $char2 = $child->cget('-text');
+ $char2 = substr("\L$char2",$ul,1) if (defined $char2);
+ if (!defined($char) || $char eq '' || (defined($char2) && "\l$char" eq $char2))
+ {
+ $child->PostFirst;
+ return $child;
+ }
+ }
+ return undef;
+}
+
+1;
+
+__END__
+
+
diff --git a/Master/xemtex/perl/site/lib/Tk/Optionmenu.pm b/Master/xemtex/perl/site/lib/Tk/Optionmenu.pm
new file mode 100644
index 00000000000..ca3f5dba22a
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Optionmenu.pm
@@ -0,0 +1,110 @@
+# Copyright (c) 1995-1999 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Optionmenu;
+require Tk::Menubutton;
+require Tk::Menu;
+
+use vars qw($VERSION);
+$VERSION = '3.025'; # $Id: //depot/Tk8/Tk/Optionmenu.pm#25 $
+
+use base qw(Tk::Derived Tk::Menubutton);
+
+use strict;
+
+Construct Tk::Widget 'Optionmenu';
+
+sub Populate
+{
+ my ($w,$args) = @_;
+ $w->SUPER::Populate($args);
+ $args->{-indicatoron} = 1;
+ my $var = delete $args->{-textvariable};
+ unless (defined $var)
+ {
+ my $gen = undef;
+ $var = \$gen;
+ }
+ my $menu = $w->menu(-tearoff => 0);
+ $w->configure(-textvariable => $var);
+
+ # Should we allow -menubackground etc. as in -label* of Frame ?
+
+ $w->ConfigSpecs(-command => ['CALLBACK',undef,undef,undef],
+ -options => ['METHOD', undef, undef, undef],
+ -variable=> ['PASSIVE', undef, undef, undef],
+ -font => [['SELF',$menu], undef, undef, undef],
+
+ -takefocus => [ qw/SELF takefocus Takefocus 1/ ],
+ -highlightthickness => [ qw/SELF highlightThickness HighlightThickness 1/ ],
+ -relief => [ qw/SELF relief Relief raised/ ],
+
+ );
+
+ # configure -variable and -command now so that when -options
+ # is set by main-line configure they are there to be set/called.
+ $w->configure(-variable => $var) if ($var = delete $args->{-variable});
+ $w->configure(-command => $var) if ($var = delete $args->{-command});
+}
+
+sub setOption
+{
+ my ($w, $label, $val) = @_;
+ $val = $label if @_ == 2;
+ my $var = $w->cget(-textvariable);
+ $$var = $label;
+ $var = $w->cget(-variable);
+ $$var = $val if $var;
+ $w->Callback(-command => $val);
+}
+
+sub addOptions
+{
+ my $w = shift;
+ my $menu = $w->menu;
+ my $var = $w->cget(-textvariable);
+ my $old = $$var;
+ my $width = $w->cget('-width');
+ my %hash;
+ my $first;
+ while (@_)
+ {
+ my $val = shift;
+ my $label = $val;
+ if (ref $val)
+ {
+ ($label, $val) = @$val;
+ }
+ my $len = length($label);
+ $width = $len if (!defined($width) || $len > $width);
+ $menu->command(-label => $label, -command => [ $w , 'setOption', $label, $val ]);
+ $hash{$label} = $val;
+ $first = $label unless defined $first;
+ }
+ if (!defined($old) || !exists($hash{$old}))
+ {
+ $w->setOption($first, $hash{$first}) if defined $first;
+ }
+ $w->configure('-width' => $width);
+}
+
+sub options
+{
+ my ($w,$opts) = @_;
+ if (@_ > 1)
+ {
+ $w->menu->delete(0,'end');
+ $w->addOptions(@$opts);
+ }
+ else
+ {
+ return $w->_cget('-options');
+ }
+}
+
+1;
+
+__END__
+
+=cut
+
diff --git a/Master/xemtex/perl/site/lib/Tk/Pixmap.pm b/Master/xemtex/perl/site/lib/Tk/Pixmap.pm
new file mode 100644
index 00000000000..081b17f7892
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Pixmap.pm
@@ -0,0 +1,19 @@
+package Tk::Pixmap;
+
+use vars qw($VERSION);
+$VERSION = '3.011'; # $Id: //depot/Tk8/TixPixmap/Pixmap.pm#11 $
+
+use Tk qw($XS_VERSION);
+
+use Tk::Image ();
+
+use base qw(Tk::Image);
+
+Construct Tk::Image 'Pixmap';
+
+bootstrap Tk::Pixmap;
+
+sub Tk_image { 'pixmap' }
+
+1;
+
diff --git a/Master/xemtex/perl/site/lib/Tk/Pretty.pm b/Master/xemtex/perl/site/lib/Tk/Pretty.pm
new file mode 100644
index 00000000000..409f1e1b320
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Pretty.pm
@@ -0,0 +1,93 @@
+# Copyright (c) 1995-1999 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Pretty;
+require Exporter;
+
+use vars qw($VERSION @EXPORT);
+$VERSION = '3.013'; # $Id: //depot/Tk8/Tk/Pretty.pm#13 $
+
+use base qw(Exporter);
+
+@EXPORT = qw(Pretty PrintArgs);
+
+sub pretty_list
+{
+ join(',',map(&Pretty($_),@_));
+}
+
+sub Pretty
+{
+ return pretty_list(@_) if (@_ > 1);
+ my $obj = shift;
+ return 'undef' unless defined($obj);
+ my $type = "$obj";
+ return $type if ($type =~ /=HASH/ && exists($obj->{"_Tcl_CmdInfo_\0"}));
+ my $result = '';
+ if (ref $obj)
+ {
+ my $class;
+ if ($type =~ /^([^=]+)=(.*)$/)
+ {
+ $class = $1;
+ $type = $2;
+ $result .= 'bless(';
+ }
+ if ($type =~ /^ARRAY/)
+ {
+ $result .= '[';
+ $result .= pretty_list(@$obj);
+ $result .= ']';
+ }
+ elsif ($type =~ /^HASH/)
+ {
+ $result .= '{';
+ if (%$obj)
+ {
+ my ($key, $value);
+ while (($key,$value) = each %$obj)
+ {
+ $result .= $key . '=>' . Pretty($value) . ',';
+ }
+ chop($result);
+ }
+ $result .= '}';
+ }
+ elsif ($type =~ /^REF/)
+ {
+ $result .= "\\" . Pretty($$obj);
+ }
+ elsif ($type =~ /^SCALAR/)
+ {
+ $result .= Pretty($$obj);
+ }
+ else
+ {
+ $result .= $type;
+ }
+ $result .= ",$class)" if (defined $class);
+ }
+ else
+ {
+ if ($obj =~ /^-?[0-9]+(.[0-9]*(e[+-][0-9]+)?)?$/ ||
+ $obj =~ /^[A-Z_][A-Za-z_0-9]*$/ ||
+ $obj =~ /^[a-z_][A-Za-z_0-9]*[A-Z_][A-Za-z_0-9]*$/
+ )
+ {
+ $result .= $obj;
+ }
+ else
+ {
+ $result .= "'" . $obj . "'";
+ }
+ }
+ return $result;
+}
+
+sub PrintArgs
+{
+ my $name = (caller(1))[3];
+ print "$name(",Pretty(@_),")\n";
+}
+
+1;
diff --git a/Master/xemtex/perl/site/lib/Tk/ROText.pm b/Master/xemtex/perl/site/lib/Tk/ROText.pm
new file mode 100644
index 00000000000..96fa1e070d3
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/ROText.pm
@@ -0,0 +1,36 @@
+# Copyright (c) 1995-1999 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::ROText;
+
+use vars qw($VERSION);
+$VERSION = '3.024'; # $Id: //depot/Tk8/Tk/ROText.pm#24 $
+
+use Tk::Text;
+use base qw(Tk::Text);
+
+Construct Tk::Widget 'ROText';
+
+sub clipEvents
+{
+ return qw[Copy];
+}
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ my $val = $class->bindRdOnly($mw);
+ my $cb = $mw->bind($class,'<Next>');
+ $mw->bind($class,'<space>',$cb) if (defined $cb);
+ $cb = $mw->bind($class,'<Prior>');
+ $mw->bind($class,'<BackSpace>',$cb) if (defined $cb);
+ $class->clipboardOperations($mw,'Copy');
+ return $val;
+}
+
+sub Tk::Widget::ScrlROText { shift->Scrolled('ROText' => @_) }
+
+1;
+
+__END__
+
diff --git a/Master/xemtex/perl/site/lib/Tk/Radiobutton.pm b/Master/xemtex/perl/site/lib/Tk/Radiobutton.pm
new file mode 100644
index 00000000000..a706de6675e
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Radiobutton.pm
@@ -0,0 +1,45 @@
+# Conversion from Tk4.0 button.tcl competed.
+# Copyright (c) 1992-1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+# Copyright (c) 1995-1999 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+
+package Tk::Radiobutton;
+
+use vars qw($VERSION);
+$VERSION = '3.013'; # $Id: //depot/Tk8/Tk/Radiobutton.pm#13 $
+
+# modify it under the same terms as Perl itself, subject
+# to additional disclaimer in license.terms due to partial
+# derivation from Tk4.0 sources.
+
+require Tk::Button;
+
+
+use base qw(Tk::Button);
+Construct Tk::Widget 'Radiobutton';
+
+sub Tk_cmd { \&Tk::radiobutton }
+
+sub CreateOptions
+{
+ return (shift->SUPER::CreateOptions,'-variable');
+}
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->bind($class,'<Enter>', 'Enter');
+ $mw->bind($class,'<Leave>', 'Leave');
+ $mw->bind($class,'<1>', 'Invoke');
+ $mw->bind($class,'<space>', 'Invoke');
+ return $class;
+}
+
+sub Invoke
+{
+ my $w = shift;
+ $w->invoke() unless($w->cget('-state') eq 'disabled');
+}
+
+1;
diff --git a/Master/xemtex/perl/site/lib/Tk/Scale.pm b/Master/xemtex/perl/site/lib/Tk/Scale.pm
new file mode 100644
index 00000000000..f31a68d9cb0
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Scale.pm
@@ -0,0 +1,278 @@
+# Converted from scale.tcl --
+#
+# This file defines the default bindings for Tk scale widgets.
+#
+# @(#) scale.tcl 1.3 94/12/17 16:05:23
+#
+# Copyright (c) 1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+package Tk::Scale;
+
+use vars qw($VERSION);
+$VERSION = '3.012'; # $Id: //depot/Tk8/Scale/Scale.pm#12 $
+
+use Tk qw($XS_VERSION);
+use AutoLoader;
+
+use base qw(Tk::Widget);
+
+Construct Tk::Widget 'Scale';
+
+bootstrap Tk::Scale;
+
+sub Tk_cmd { \&Tk::scale }
+
+Tk::Methods('coords','get','identify','set');
+
+
+import Tk qw(Ev);
+
+#
+# Bind --
+# This procedure below invoked the first time the mouse enters a
+# scale widget or a scale widget receives the input focus. It creates
+# all of the class bindings for scales.
+#
+# Arguments:
+# event - Indicates which event caused the procedure to be invoked
+# (Enter or FocusIn). It is used so that we can carry out
+# the functions of that event in addition to setting up
+# bindings.
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+
+ $mw->bind($class,'<Enter>',['Enter',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<Motion>',['Activate',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<Leave>','Leave');
+
+ $mw->bind($class,'<1>',['ButtonDown',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<B1-Motion>',['Drag',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<B1-Leave>','NoOp');
+ $mw->bind($class,'<B1-Enter>','NoOp');
+ $mw->bind($class,'<ButtonRelease-1>',['ButtonUp',Ev('x'),Ev('y')]);
+
+ $mw->bind($class,'<2>',['ButtonDown',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<B2-Motion>',['Drag',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<B2-Leave>','NoOp');
+ $mw->bind($class,'<B2-Enter>','NoOp');
+ $mw->bind($class,'<ButtonRelease-2>',['ButtonUp',Ev('x'),Ev('y')]);
+
+ $mw->bind($class,'<Control-1>',['ControlPress',Ev('x'),Ev('y')]);
+
+ $mw->bind($class,'<Up>',['Increment','up','little','noRepeat']);
+ $mw->bind($class,'<Down>',['Increment','down','little','noRepeat']);
+ $mw->bind($class,'<Left>',['Increment','up','little','noRepeat']);
+ $mw->bind($class,'<Right>',['Increment','down','little','noRepeat']);
+
+ $mw->bind($class,'<Control-Up>',['Increment','up','big','noRepeat']);
+ $mw->bind($class,'<Control-Down>',['Increment','down','big','noRepeat']);
+ $mw->bind($class,'<Control-Left>',['Increment','up','big','noRepeat']);
+ $mw->bind($class,'<Control-Right>',['Increment','down','big','noRepeat']);
+
+ $mw->bind($class,'<Home>',['set',Ev('cget','-from')]);
+ $mw->bind($class,'<End>',['set',Ev('cget','-to')]);
+ return $class;
+}
+
+1;
+
+__END__
+
+# Activate --
+# This procedure is invoked to check a given x-y position in the
+# scale and activate the slider if the x-y position falls within
+# the slider.
+#
+# Arguments:
+# w - The scale widget.
+# x, y - Mouse coordinates.
+sub Activate
+{
+ my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ return if ($w->cget('-state') eq 'disabled');
+ my $ident = $w->identify($x,$y);
+ if (defined($ident) && $ident eq 'slider')
+ {
+ $w->configure(-state => 'active')
+ }
+ else
+ {
+ $w->configure(-state => 'normal')
+ }
+}
+
+sub Leave
+{
+ my ($w) = @_;
+ $w->configure('-activebackground',$w->{'activeBg'}) if ($Tk::strictMotif);
+ $w->configure('-state','normal') if ($w->cget('-state') eq 'active');
+}
+
+sub Enter
+{
+ my ($w,$x,$y) = @_;
+ if ($Tk::strictMotif)
+ {
+ $w->{'activeBg'} = $w->cget('-activebackground');
+ $w->configure('-activebackground',$w->cget('-background'));
+ }
+ $w->Activate($x,$y);
+}
+
+sub ButtonUp
+{
+ my ($w,$x,$y) = @_;
+ $w->CancelRepeat();
+ $w->EndDrag();
+ $w->Activate($x,$y)
+}
+
+
+# ButtonDown --
+# This procedure is invoked when a button is pressed in a scale. It
+# takes different actions depending on where the button was pressed.
+#
+# Arguments:
+# w - The scale widget.
+# x, y - Mouse coordinates of button press.
+sub ButtonDown
+{
+ my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ $Tk::dragging = 0;
+ $el = $w->identify($x,$y);
+ return unless ($el);
+ if ($el eq 'trough1')
+ {
+ $w->Increment('up','little','initial')
+ }
+ elsif ($el eq 'trough2')
+ {
+ $w->Increment('down','little','initial')
+ }
+ elsif ($el eq 'slider')
+ {
+ $Tk::dragging = 1;
+ my @coords = $w->coords();
+ $Tk::deltaX = $x-$coords[0];
+ $Tk::deltaY = $y-$coords[1];
+ }
+}
+# Drag --
+# This procedure is called when the mouse is dragged with
+# mouse button 1 down. If the drag started inside the slider
+# (i.e. the scale is active) then the scale's value is adjusted
+# to reflect the mouse's position.
+#
+# Arguments:
+# w - The scale widget.
+# x, y - Mouse coordinates.
+sub Drag
+{
+ my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ if (!$Tk::dragging)
+ {
+ return;
+ }
+ $w->set($w->get($x-$Tk::deltaX,$y-$Tk::deltaY))
+}
+# EndDrag --
+# This procedure is called to end an interactive drag of the
+# slider. It just marks the drag as over.
+# Arguments:
+# w - The scale widget.
+sub EndDrag
+{
+ my $w = shift;
+ if (!$Tk::dragging)
+ {
+ return;
+ }
+ $Tk::dragging = 0;
+}
+# Increment --
+# This procedure is invoked to increment the value of a scale and
+# to set up auto-repeating of the action if that is desired. The
+# way the value is incremented depends on the "dir" and "big"
+# arguments.
+#
+# Arguments:
+# w - The scale widget.
+# dir - "up" means move value towards -from, "down" means
+# move towards -to.
+# big - Size of increments: "big" or "little".
+# repeat - Whether and how to auto-repeat the action: "noRepeat"
+# means don't auto-repeat, "initial" means this is the
+# first action in an auto-repeat sequence, and "again"
+# means this is the second repetition or later.
+sub Increment
+{
+ my $w = shift;
+ my $dir = shift;
+ my $big = shift;
+ my $repeat = shift;
+ my $inc;
+ if ($big eq 'big')
+ {
+ $inc = $w->cget('-bigincrement');
+ if ($inc == 0)
+ {
+ $inc = abs(($w->cget('-to')-$w->cget('-from')))/10.0
+ }
+ if ($inc < $w->cget('-resolution'))
+ {
+ $inc = $w->cget('-resolution')
+ }
+ }
+ else
+ {
+ $inc = $w->cget('-resolution')
+ }
+ if (($w->cget('-from') > $w->cget('-to')) ^ ($dir eq 'up'))
+ {
+ $inc = -$inc
+ }
+ $w->set($w->get()+$inc);
+ if ($repeat eq 'again')
+ {
+ $w->RepeatId($w->after($w->cget('-repeatinterval'),'Increment',$w,$dir,$big,'again'));
+ }
+ elsif ($repeat eq 'initial')
+ {
+ $w->RepeatId($w->after($w->cget('-repeatdelay'),'Increment',$w,$dir,$big,'again'));
+ }
+}
+# ControlPress --
+# This procedure handles button presses that are made with the Control
+# key down. Depending on the mouse position, it adjusts the scale
+# value to one end of the range or the other.
+#
+# Arguments:
+# w - The scale widget.
+# x, y - Mouse coordinates where the button was pressed.
+sub ControlPress
+{
+ my ($w,$x,$y) = @_;
+ my $el = $w->identify($x,$y);
+ return unless ($el);
+ if ($el eq 'trough1')
+ {
+ $w->set($w->cget('-from'))
+ }
+ elsif ($el eq 'trough2')
+ {
+ $w->set($w->cget('-to'))
+ }
+}
+
+
diff --git a/Master/xemtex/perl/site/lib/Tk/Scrollbar.pm b/Master/xemtex/perl/site/lib/Tk/Scrollbar.pm
new file mode 100644
index 00000000000..a828682514f
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Scrollbar.pm
@@ -0,0 +1,414 @@
+# Conversion from Tk4.0 scrollbar.tcl competed.
+package Tk::Scrollbar;
+require Tk;
+import Tk qw($XS_VERSION);
+use AutoLoader;
+
+use vars qw($VERSION);
+$VERSION = '3.014'; # $Id: //depot/Tk8/Scrollbar/Scrollbar.pm#14 $
+
+use base qw(Tk::Widget);
+
+Construct Tk::Widget 'Scrollbar';
+
+bootstrap Tk::Scrollbar;
+
+sub Tk_cmd { \&Tk::scrollbar }
+
+Tk::Methods('activate','delta','fraction','get','identify','set');
+
+sub Needed
+{
+ my ($sb) = @_;
+ my @val = $sb->get;
+ return 1 unless (@val == 2);
+ return 1 if $val[0] != 0.0;
+ return 1 if $val[1] != 1.0;
+ return 0;
+}
+
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->bind($class, '<Enter>', 'Enter');
+ $mw->bind($class, '<Motion>', 'Motion');
+ $mw->bind($class, '<Leave>', 'Leave');
+
+ $mw->bind($class, '<1>', 'ButtonDown');
+ $mw->bind($class, '<B1-Motion>', 'Drag');
+ $mw->bind($class, '<ButtonRelease-1>', 'ButtonUp');
+ $mw->bind($class, '<B1-Leave>', 'NoOp'); # prevent generic <Leave>
+ $mw->bind($class, '<B1-Enter>', 'NoOp'); # prevent generic <Enter>
+ $mw->bind($class, '<Control-1>', 'ScrlTopBottom');
+
+ $mw->bind($class, '<2>', 'ButtonDown');
+ $mw->bind($class, '<B2-Motion>', 'Drag');
+ $mw->bind($class, '<ButtonRelease-2>', 'ButtonUp');
+ $mw->bind($class, '<B2-Leave>', 'NoOp'); # prevent generic <Leave>
+ $mw->bind($class, '<B2-Enter>', 'NoOp'); # prevent generic <Enter>
+ $mw->bind($class, '<Control-2>', 'ScrlTopBottom');
+
+ $mw->bind($class, '<Up>', ['ScrlByUnits','v',-1]);
+ $mw->bind($class, '<Down>', ['ScrlByUnits','v', 1]);
+ $mw->bind($class, '<Control-Up>', ['ScrlByPages','v',-1]);
+ $mw->bind($class, '<Control-Down>', ['ScrlByPages','v', 1]);
+
+ $mw->bind($class, '<Left>', ['ScrlByUnits','h',-1]);
+ $mw->bind($class, '<Right>', ['ScrlByUnits','h', 1]);
+ $mw->bind($class, '<Control-Left>', ['ScrlByPages','h',-1]);
+ $mw->bind($class, '<Control-Right>', ['ScrlByPages','h', 1]);
+
+ $mw->bind($class, '<Prior>', ['ScrlByPages','hv',-1]);
+ $mw->bind($class, '<Next>', ['ScrlByPages','hv', 1]);
+
+ $mw->bind($class, '<Home>', ['ScrlToPos', 0]);
+ $mw->bind($class, '<End>', ['ScrlToPos', 1]);
+
+ return $class;
+
+}
+
+1;
+
+__END__
+
+sub Enter
+{
+ my $w = shift;
+ my $e = $w->XEvent;
+ if ($Tk::strictMotif)
+ {
+ my $bg = $w->cget('-background');
+ $activeBg = $w->cget('-activebackground');
+ $w->configure('-activebackground' => $bg);
+ }
+ $w->activate($w->identify($e->x,$e->y));
+}
+
+sub Leave
+{
+ my $w = shift;
+ if ($Tk::strictMotif)
+ {
+ $w->configure('-activebackground' => $activeBg) if (defined $activeBg) ;
+ }
+ $w->activate('');
+}
+
+sub Motion
+{
+ my $w = shift;
+ my $e = $w->XEvent;
+ $w->activate($w->identify($e->x,$e->y));
+}
+
+# tkScrollButtonDown --
+# This procedure is invoked when a button is pressed in a scrollbar.
+# It changes the way the scrollbar is displayed and takes actions
+# depending on where the mouse is.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - Mouse coordinates.
+
+sub ButtonDown
+{my $w = shift;
+ my $e = $w->XEvent;
+ my $element = $w->identify($e->x,$e->y);
+ $w->configure('-activerelief' => 'sunken');
+ if ($e->b == 1 and
+ (defined($element) && $element eq 'slider'))
+ {
+ $w->StartDrag($e->x,$e->y);
+ }
+ elsif ($e->b == 2 and
+ (defined($element) && $element =~ /^(trough[12]|slider)$/o))
+ {
+ my $pos = $w->fraction($e->x, $e->y);
+ my($head, $tail) = $w->get;
+ my $len = $tail - $head;
+
+ $head = $pos - $len/2;
+ $tail = $pos + $len/2;
+ if ($head < 0) {
+ $head = 0;
+ $tail = $len;
+ }
+ elsif ($tail > 1) {
+ $head = 1 - $len;
+ $tail = 1;
+ }
+ $w->ScrlToPos($head);
+ $w->set($head, $tail);
+
+ $w->StartDrag($e->x,$e->y);
+ }
+ else
+ {
+ $w->Select($element,'initial');
+ }
+}
+
+# tkScrollButtonUp --
+# This procedure is invoked when a button is released in a scrollbar.
+# It cancels scans and auto-repeats that were in progress, and restores
+# the way the active element is displayed.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - Mouse coordinates.
+
+sub ButtonUp
+{my $w = shift;
+ my $e = $w->XEvent;
+ $w->CancelRepeat;
+ $w->configure('-activerelief' => 'raised');
+ $w->EndDrag($e->x,$e->y);
+ $w->activate($w->identify($e->x,$e->y));
+}
+
+# tkScrollSelect --
+# This procedure is invoked when button 1 is pressed over the scrollbar.
+# It invokes one of several scrolling actions depending on where in
+# the scrollbar the button was pressed.
+#
+# Arguments:
+# w - The scrollbar widget.
+# element - The element of the scrollbar that was selected, such
+# as "arrow1" or "trough2". Shouldn't be "slider".
+# repeat - Whether and how to auto-repeat the action: "noRepeat"
+# means don't auto-repeat, "initial" means this is the
+# first action in an auto-repeat sequence, and "again"
+# means this is the second repetition or later.
+
+sub Select
+{
+ my $w = shift;
+ my $element = shift;
+ my $repeat = shift;
+ return unless defined ($element);
+ if ($element eq 'arrow1')
+ {
+ $w->ScrlByUnits('hv',-1);
+ }
+ elsif ($element eq 'trough1')
+ {
+ $w->ScrlByPages('hv',-1);
+ }
+ elsif ($element eq 'trough2')
+ {
+ $w->ScrlByPages('hv', 1);
+ }
+ elsif ($element eq 'arrow2')
+ {
+ $w->ScrlByUnits('hv', 1);
+ }
+ else
+ {
+ return;
+ }
+
+ if ($repeat eq 'again')
+ {
+ $w->RepeatId($w->after($w->cget('-repeatinterval'),['Select',$w,$element,'again']));
+ }
+ elsif ($repeat eq 'initial')
+ {
+ $w->RepeatId($w->after($w->cget('-repeatdelay'),['Select',$w,$element,'again']));
+ }
+}
+
+# tkScrollStartDrag --
+# This procedure is called to initiate a drag of the slider. It just
+# remembers the starting position of the slider.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - The mouse position at the start of the drag operation.
+
+sub StartDrag
+{my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ return unless (defined ($w->cget('-command')));
+ $initMouse = $w->fraction($x,$y);
+ @initValues = $w->get();
+ if (@initValues == 2)
+ {
+ $initPos = $initValues[0];
+ }
+ else
+ {
+ $initPos = $initValues[2] / $initValues[0];
+ }
+}
+
+# tkScrollDrag --
+# This procedure is called for each mouse motion even when the slider
+# is being dragged. It notifies the associated widget if we're not
+# jump scrolling, and it just updates the scrollbar if we are jump
+# scrolling.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - The current mouse position.
+
+sub Drag
+{my $w = shift;
+ my $e = $w->XEvent;
+ return unless (defined $initMouse);
+ my $f = $w->fraction($e->x,$e->y);
+ my $delta = $f - $initMouse;
+ if ($w->cget('-jump'))
+ {
+ if (@initValues == 2)
+ {
+ $w->set($initValues[0]+$delta,$initValues[1]+$delta);
+ }
+ else
+ {
+ $delta = int($delta * $initValues[0]);
+ $initValues[2] += $delta;
+ $initValues[3] += $delta;
+ $w->set(@initValues);
+ }
+ }
+ else
+ {
+ $w->ScrlToPos($initPos+$delta);
+ }
+}
+
+# tkScrollEndDrag --
+# This procedure is called to end an interactive drag of the slider.
+# It scrolls the window if we're in jump mode, otherwise it does nothing.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - The mouse position at the end of the drag operation.
+
+sub EndDrag
+{
+ my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ return unless defined($initMouse);
+ if ($w->cget('-jump'))
+ {
+ $w->ScrlToPos($initPos + $w->fraction($x,$y) - $initMouse);
+ }
+ undef $initMouse;
+}
+
+# tkScrlByUnits --
+# This procedure tells the scrollbar's associated widget to scroll up
+# or down by a given number of units. It notifies the associated widget
+# in different ways for old and new command syntaxes.
+#
+# Arguments:
+# w - The scrollbar widget.
+# orient - Which kinds of scrollbars this applies to: "h" for
+# horizontal, "v" for vertical, "hv" for both.
+# amount - How many units to scroll: typically 1 or -1.
+
+sub ScrlByUnits
+{my $w = shift;
+ my $orient = shift;
+ my $amount = shift;
+ my $cmd = $w->cget('-command');
+ return unless (defined $cmd);
+ return if (index($orient,substr($w->cget('-orient'),0,1)) < 0);
+ my @info = $w->get;
+ if (@info == 2)
+ {
+ $cmd->Call('scroll',$amount,'units');
+ }
+ else
+ {
+ $cmd->Call($info[2]+$amount);
+ }
+}
+
+# tkScrlByPages --
+# This procedure tells the scrollbar's associated widget to scroll up
+# or down by a given number of screenfuls. It notifies the associated
+# widget in different ways for old and new command syntaxes.
+#
+# Arguments:
+# w - The scrollbar widget.
+# orient - Which kinds of scrollbars this applies to: "h" for
+# horizontal, "v" for vertical, "hv" for both.
+# amount - How many screens to scroll: typically 1 or -1.
+
+sub ScrlByPages
+{
+ my $w = shift;
+ my $orient = shift;
+ my $amount = shift;
+ my $cmd = $w->cget('-command');
+ return unless (defined $cmd);
+ return if (index($orient,substr($w->cget('-orient'),0,1)) < 0);
+ my @info = $w->get;
+ if (@info == 2)
+ {
+ $cmd->Call('scroll',$amount,'pages');
+ }
+ else
+ {
+ $cmd->Call($info[2]+$amount*($info[1]-1));
+ }
+}
+
+# tkScrlToPos --
+# This procedure tells the scrollbar's associated widget to scroll to
+# a particular location, given by a fraction between 0 and 1. It notifies
+# the associated widget in different ways for old and new command syntaxes.
+#
+# Arguments:
+# w - The scrollbar widget.
+# pos - A fraction between 0 and 1 indicating a desired position
+# in the document.
+
+sub ScrlToPos
+{
+ my $w = shift;
+ my $pos = shift;
+ my $cmd = $w->cget('-command');
+ return unless (defined $cmd);
+ my @info = $w->get;
+ if (@info == 2)
+ {
+ $cmd->Call('moveto',$pos);
+ }
+ else
+ {
+ $cmd->Call(int($info[0]*$pos));
+ }
+}
+
+# tkScrlTopBottom
+# Scroll to the top or bottom of the document, depending on the mouse
+# position.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - Mouse coordinates within the widget.
+
+sub ScrlTopBottom
+{
+ my $w = shift;
+ my $e = $w->XEvent;
+ my $element = $w->identify($e->x,$e->y);
+ return unless ($element);
+ if ($element =~ /1$/)
+ {
+ $w->ScrlToPos(0);
+ }
+ elsif ($element =~ /2$/)
+ {
+ $w->ScrlToPos(1);
+ }
+}
+
+
diff --git a/Master/xemtex/perl/site/lib/Tk/Submethods.pm b/Master/xemtex/perl/site/lib/Tk/Submethods.pm
new file mode 100644
index 00000000000..3c3abcea379
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Submethods.pm
@@ -0,0 +1,46 @@
+package Tk::Submethods;
+
+use vars qw($VERSION);
+$VERSION = '3.014'; # $Id: //depot/Tk8/Tk/Submethods.pm#14 $
+
+sub import
+{
+ my $class = shift;
+ no strict 'refs';
+ my $package = caller(0);
+ while (@_)
+ {
+ my $fn = shift;
+ my $sm = shift;
+ foreach my $sub (@{$sm})
+ {
+ my ($suffix) = $sub =~ /(\w+)$/;
+ my $pfn = $package.'::'.$fn;
+ *{$pfn."\u$suffix"} = sub { shift->$pfn($sub,@_) };
+ }
+ }
+}
+
+sub Direct
+{
+ my $class = shift;
+ no strict 'refs';
+ my $package = caller(0);
+ while (@_)
+ {
+ my $fn = shift;
+ my $sm = shift;
+ my $sub;
+ foreach $sub (@{$sm})
+ {
+ # eval "sub ${package}::${sub} { shift->$fn('$sub',\@_) }";
+ *{$package.'::'.$sub} = sub { shift->$fn($sub,@_) };
+ }
+ }
+}
+
+1;
+
+__END__
+
+=cut
diff --git a/Master/xemtex/perl/site/lib/Tk/Text.pm b/Master/xemtex/perl/site/lib/Tk/Text.pm
new file mode 100644
index 00000000000..c4b4f162f77
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Text.pm
@@ -0,0 +1,1600 @@
+# text.tcl --
+#
+# This file defines the default bindings for Tk text widgets.
+#
+# @(#) text.tcl 1.18 94/12/17 16:05:26
+#
+# Copyright (c) 1992-1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+# perl/Tk version:
+# Copyright (c) 1995-1999 Nick Ing-Simmons
+# Copyright (c) 1999 Greg London
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+package Tk::Text;
+use AutoLoader;
+use Carp;
+use strict;
+
+use Text::Tabs;
+
+use vars qw($VERSION);
+$VERSION = '3.044'; # $Id: //depot/Tk8/Text/Text.pm#44 $
+
+use Tk qw(Ev $XS_VERSION);
+use base qw(Tk::Clipboard Tk::Widget);
+
+Construct Tk::Widget 'Text';
+
+bootstrap Tk::Text;
+
+sub Tk_cmd { \&Tk::text }
+
+sub Tk::Widget::ScrlText { shift->Scrolled('Text' => @_) }
+
+Tk::Methods('bbox','compare','debug','delete','dlineinfo','dump',
+ 'get','image','index','insert','mark','scan','search',
+ 'see','tag','window','xview','yview');
+
+use Tk::Submethods ( 'mark' => [qw(gravity names next previous set unset)],
+ 'scan' => [qw(mark dragto)],
+ 'tag' => [qw(add bind cget configure delete lower
+ names nextrange prevrange raise ranges remove)],
+ 'window' => [qw(cget configure create names)],
+ 'image' => [qw(cget configure create names)],
+ 'xview' => [qw(moveto scroll)],
+ 'yview' => [qw(moveto scroll)],
+ );
+
+sub Tag;
+sub Tags;
+
+sub bindRdOnly
+{
+
+ my ($class,$mw) = @_;
+
+ # Standard Motif bindings:
+ $mw->bind($class,'<Meta-B1-Motion>','NoOp');
+ $mw->bind($class,'<Meta-1>','NoOp');
+ $mw->bind($class,'<Alt-KeyPress>','NoOp');
+ $mw->bind($class,'<Escape>','unselectAll');
+
+ $mw->bind($class,'<1>',['Button1',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<B1-Motion>','B1_Motion' ) ;
+ $mw->bind($class,'<B1-Leave>','B1_Leave' ) ;
+ $mw->bind($class,'<B1-Enter>','CancelRepeat');
+ $mw->bind($class,'<ButtonRelease-1>','CancelRepeat');
+ $mw->bind($class,'<Control-1>',['markSet','insert',Ev('@')]);
+
+ $mw->bind($class,'<Double-1>','selectWord' ) ;
+ $mw->bind($class,'<Triple-1>','selectLine' ) ;
+ $mw->bind($class,'<Shift-1>','adjustSelect' ) ;
+ $mw->bind($class,'<Double-Shift-1>',['SelectTo',Ev('@'),'word']);
+ $mw->bind($class,'<Triple-Shift-1>',['SelectTo',Ev('@'),'line']);
+
+ $mw->bind($class,'<Left>',['SetCursor',Ev('index','insert-1c')]);
+ $mw->bind($class,'<Shift-Left>',['KeySelect',Ev('index','insert-1c')]);
+ $mw->bind($class,'<Control-Left>',['SetCursor',Ev('index','insert-1c wordstart')]);
+ $mw->bind($class,'<Shift-Control-Left>',['KeySelect',Ev('index','insert-1c wordstart')]);
+
+ $mw->bind($class,'<Right>',['SetCursor',Ev('index','insert+1c')]);
+ $mw->bind($class,'<Shift-Right>',['KeySelect',Ev('index','insert+1c')]);
+ $mw->bind($class,'<Control-Right>',['SetCursor',Ev('index','insert+1c wordend')]);
+ $mw->bind($class,'<Shift-Control-Right>',['KeySelect',Ev('index','insert wordend')]);
+
+ $mw->bind($class,'<Up>',['SetCursor',Ev('UpDownLine',-1)]);
+ $mw->bind($class,'<Shift-Up>',['KeySelect',Ev('UpDownLine',-1)]);
+ $mw->bind($class,'<Control-Up>',['SetCursor',Ev('PrevPara','insert')]);
+ $mw->bind($class,'<Shift-Control-Up>',['KeySelect',Ev('PrevPara','insert')]);
+
+ $mw->bind($class,'<Down>',['SetCursor',Ev('UpDownLine',1)]);
+ $mw->bind($class,'<Shift-Down>',['KeySelect',Ev('UpDownLine',1)]);
+ $mw->bind($class,'<Control-Down>',['SetCursor',Ev('NextPara','insert')]);
+ $mw->bind($class,'<Shift-Control-Down>',['KeySelect',Ev('NextPara','insert')]);
+
+ $mw->bind($class,'<Home>',['SetCursor','insert linestart']);
+ $mw->bind($class,'<Shift-Home>',['KeySelect','insert linestart']);
+ $mw->bind($class,'<Control-Home>',['SetCursor','1.0']);
+ $mw->bind($class,'<Control-Shift-Home>',['KeySelect','1.0']);
+
+ $mw->bind($class,'<End>',['SetCursor','insert lineend']);
+ $mw->bind($class,'<Shift-End>',['KeySelect','insert lineend']);
+ $mw->bind($class,'<Control-End>',['SetCursor','end-1char']);
+ $mw->bind($class,'<Control-Shift-End>',['KeySelect','end-1char']);
+
+ $mw->bind($class,'<Prior>',['SetCursor',Ev('ScrollPages',-1)]);
+ $mw->bind($class,'<Shift-Prior>',['KeySelect',Ev('ScrollPages',-1)]);
+ $mw->bind($class,'<Control-Prior>',['xview','scroll',-1,'page']);
+
+ $mw->bind($class,'<Next>',['SetCursor',Ev('ScrollPages',1)]);
+ $mw->bind($class,'<Shift-Next>',['KeySelect',Ev('ScrollPages',1)]);
+ $mw->bind($class,'<Control-Next>',['xview','scroll',1,'page']);
+
+ $mw->bind($class,'<Shift-Tab>', 'NoOp'); # Needed only to keep <Tab> binding from triggering; does not have to actually do anything.
+ $mw->bind($class,'<Control-Tab>','focusNext');
+ $mw->bind($class,'<Control-Shift-Tab>','focusPrev');
+
+ $mw->bind($class,'<Control-space>',['markSet','anchor','insert']);
+ $mw->bind($class,'<Select>',['markSet','anchor','insert']);
+ $mw->bind($class,'<Control-Shift-space>',['SelectTo','insert','char']);
+ $mw->bind($class,'<Shift-Select>',['SelectTo','insert','char']);
+ $mw->bind($class,'<Control-slash>','selectAll');
+ $mw->bind($class,'<Control-backslash>','unselectAll');
+
+ if (!$Tk::strictMotif)
+ {
+ $mw->bind($class,'<Control-a>', ['SetCursor','insert linestart']);
+ $mw->bind($class,'<Control-b>', ['SetCursor','insert-1c']);
+ $mw->bind($class,'<Control-e>', ['SetCursor','insert lineend']);
+ $mw->bind($class,'<Control-f>', ['SetCursor','insert+1c']);
+ $mw->bind($class,'<Meta-b>', ['SetCursor','insert-1c wordstart']);
+ $mw->bind($class,'<Meta-f>', ['SetCursor','insert wordend']);
+ $mw->bind($class,'<Meta-less>', ['SetCursor','1.0']);
+ $mw->bind($class,'<Meta-greater>', ['SetCursor','end-1c']);
+
+ $mw->bind($class,'<Control-n>', ['SetCursor',Ev('UpDownLine',1)]);
+ $mw->bind($class,'<Control-p>', ['SetCursor',Ev('UpDownLine',-1)]);
+
+ $mw->bind($class,'<2>',['Button2',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<B2-Motion>',['Motion2',Ev('x'),Ev('y')]);
+ }
+ $mw->bind($class,'<Destroy>','Destroy');
+ $mw->bind($class, '<3>', ['PostPopupMenu', Ev('X'), Ev('Y')] );
+
+ return $class;
+}
+
+sub selectAll
+{
+ my ($w) = @_;
+ $w->tagAdd('sel','1.0','end');
+}
+
+sub unselectAll
+{
+ my ($w) = @_;
+ $w->tagRemove('sel','1.0','end');
+}
+
+sub adjustSelect
+{
+ my ($w) = @_;
+ my $Ev = $w->XEvent;
+ $w->ResetAnchor($Ev->xy);
+ $w->SelectTo($Ev->xy,'char')
+}
+
+sub selectLine
+{
+ my ($w) = @_;
+ my $Ev = $w->XEvent;
+ $w->SelectTo($Ev->xy,'line');
+ Tk::catch { $w->markSet('insert','sel.first') };
+}
+
+sub selectWord
+{
+ my ($w) = @_;
+ my $Ev = $w->XEvent;
+ $w->SelectTo($Ev->xy,'word');
+ Tk::catch { $w->markSet('insert','sel.first') }
+}
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $class->SUPER::ClassInit($mw);
+
+ $class->bindRdOnly($mw);
+
+ $mw->bind($class,'<Tab>', 'insertTab');
+ $mw->bind($class,'<Control-i>', ['Insert',"\t"]);
+ $mw->bind($class,'<Return>', ['Insert',"\n"]);
+ $mw->bind($class,'<Delete>','Delete');
+ $mw->bind($class,'<BackSpace>','Backspace');
+ $mw->bind($class,'<Insert>', \&ToggleInsertMode ) ;
+ $mw->bind($class,'<KeyPress>',['InsertKeypress',Ev('A')]);
+
+ $mw->bind($class,'<F1>', 'clipboardColumnCopy');
+ $mw->bind($class,'<F2>', 'clipboardColumnCut');
+ $mw->bind($class,'<F3>', 'clipboardColumnPaste');
+
+ # Additional emacs-like bindings:
+
+ if (!$Tk::strictMotif)
+ {
+ $mw->bind($class,'<Control-d>',['delete','insert']);
+ $mw->bind($class,'<Control-k>','deleteToEndofLine') ;
+ $mw->bind($class,'<Control-o>','openLine');
+ $mw->bind($class,'<Control-t>','Transpose');
+ $mw->bind($class,'<Meta-d>',['delete','insert','insert wordend']);
+ $mw->bind($class,'<Meta-BackSpace>',['delete','insert-1c wordstart','insert']);
+
+ # A few additional bindings of my own.
+ $mw->bind($class,'<Control-h>','deleteBefore');
+ $mw->bind($class,'<ButtonRelease-2>','ButtonRelease2');
+ }
+ $Tk::prevPos = undef;
+ return $class;
+}
+
+sub insertTab
+{
+ my ($w) = @_;
+ $w->Insert("\t");
+ $w->focus;
+ $w->break
+}
+
+sub deleteToEndofLine
+{
+ my ($w) = @_;
+ if ($w->compare('insert','==','insert lineend'))
+ {
+ $w->delete('insert')
+ }
+ else
+ {
+ $w->delete('insert','insert lineend')
+ }
+}
+
+sub openLine
+{
+ my ($w) = @_;
+ $w->insert('insert',"\n");
+ $w->markSet('insert','insert-1c')
+}
+
+sub Button2
+{
+ my ($w,$x,$y) = @_;
+ $w->scan('mark',$x,$y);
+ $Tk::x = $x;
+ $Tk::y = $y;
+ $Tk::mouseMoved = 0;
+}
+
+sub Motion2
+{
+ my ($w,$x,$y) = @_;
+ $Tk::mouseMoved = 1 if ($x != $Tk::x || $y != $Tk::y);
+ $w->scan('dragto',$x,$y) if ($Tk::mouseMoved);
+}
+
+sub ButtonRelease2
+{
+ my ($w) = @_;
+ my $Ev = $w->XEvent;
+ if (!$Tk::mouseMoved)
+ {
+ Tk::catch { $w->insert($Ev->xy,$w->SelectionGet) }
+ }
+}
+
+sub InsertSelection
+{
+ my ($w) = @_;
+ Tk::catch { $w->Insert($w->SelectionGet) }
+}
+
+sub Backspace
+{
+ my ($w) = @_;
+ my $sel = Tk::catch { $w->tag('nextrange','sel','1.0','end') };
+ if (defined $sel)
+ {
+ $w->delete('sel.first','sel.last');
+ return;
+ }
+ $w->deleteBefore;
+}
+
+sub deleteBefore
+{
+ my ($w) = @_;
+ if ($w->compare('insert','!=','1.0'))
+ {
+ $w->delete('insert-1c');
+ $w->see('insert')
+ }
+}
+
+sub Delete
+{
+ my ($w) = @_;
+ my $sel = Tk::catch { $w->tag('nextrange','sel','1.0','end') };
+ if (defined $sel)
+ {
+ $w->delete('sel.first','sel.last')
+ }
+ else
+ {
+ $w->delete('insert');
+ $w->see('insert')
+ }
+}
+
+# Button1 --
+# This procedure is invoked to handle button-1 presses in text
+# widgets. It moves the insertion cursor, sets the selection anchor,
+# and claims the input focus.
+#
+# Arguments:
+# w - The text window in which the button was pressed.
+# x - The x-coordinate of the button press.
+# y - The x-coordinate of the button press.
+sub Button1
+{
+ my ($w,$x,$y) = @_;
+ $Tk::selectMode = 'char';
+ $Tk::mouseMoved = 0;
+ $w->SetCursor('@'.$x.','.$y);
+ $w->markSet('anchor','insert');
+ $w->focus() if ($w->cget('-state') eq 'normal');
+}
+
+sub B1_Motion
+{
+ my ($w) = @_;
+ return unless defined $Tk::mouseMoved;
+ my $Ev = $w->XEvent;
+ $Tk::x = $Ev->x;
+ $Tk::y = $Ev->y;
+ $w->SelectTo($Ev->xy)
+}
+
+sub B1_Leave
+{
+ my ($w) = @_;
+ my $Ev = $w->XEvent;
+ $Tk::x = $Ev->x;
+ $Tk::y = $Ev->y;
+ $w->AutoScan;
+}
+
+# SelectTo --
+# This procedure is invoked to extend the selection, typically when
+# dragging it with the mouse. Depending on the selection mode (character,
+# word, line) it selects in different-sized units. This procedure
+# ignores mouse motions initially until the mouse has moved from
+# one character to another or until there have been multiple clicks.
+#
+# Arguments:
+# w - The text window in which the button was pressed.
+# index - Index of character at which the mouse button was pressed.
+sub SelectTo
+{
+ my ($w, $index, $mode)= @_;
+ $Tk::selectMode = $mode if defined ($mode);
+ my $cur = $w->index($index);
+ my $anchor = Tk::catch { $w->index('anchor') };
+ if (!defined $anchor)
+ {
+ $w->markSet('anchor',$anchor = $cur);
+ $Tk::mouseMoved = 0;
+ }
+ elsif ($w->compare($cur,'!=',$anchor))
+ {
+ $Tk::mouseMoved = 1;
+ }
+ $Tk::selectMode = 'char' unless (defined $Tk::selectMode);
+ $mode = $Tk::selectMode;
+ my ($first,$last);
+ if ($mode eq 'char')
+ {
+ if ($w->compare($cur,'<','anchor'))
+ {
+ $first = $cur;
+ $last = 'anchor';
+ }
+ else
+ {
+ $first = 'anchor';
+ $last = $cur
+ }
+ }
+ elsif ($mode eq 'word')
+ {
+ if ($w->compare($cur,'<','anchor'))
+ {
+ $first = $w->index("$cur wordstart");
+ $last = $w->index('anchor - 1c wordend')
+ }
+ else
+ {
+ $first = $w->index('anchor wordstart');
+ $last = $w->index("$cur wordend")
+ }
+ }
+ elsif ($mode eq 'line')
+ {
+ if ($w->compare($cur,'<','anchor'))
+ {
+ $first = $w->index("$cur linestart");
+ $last = $w->index('anchor - 1c lineend + 1c')
+ }
+ else
+ {
+ $first = $w->index('anchor linestart');
+ $last = $w->index("$cur lineend + 1c")
+ }
+ }
+ if ($Tk::mouseMoved || $Tk::selectMode ne 'char')
+ {
+ $w->tagRemove('sel','1.0',$first);
+ $w->tagAdd('sel',$first,$last);
+ $w->tagRemove('sel',$last,'end');
+ $w->idletasks;
+ }
+}
+# AutoScan --
+# This procedure is invoked when the mouse leaves a text window
+# with button 1 down. It scrolls the window up, down, left, or right,
+# depending on where the mouse is (this information was saved in
+# tkPriv(x) and tkPriv(y)), and reschedules itself as an 'after'
+# command so that the window continues to scroll until the mouse
+# moves back into the window or the mouse button is released.
+#
+# Arguments:
+# w - The text window.
+sub AutoScan
+{
+ my ($w) = @_;
+ if ($Tk::y >= $w->height)
+ {
+ $w->yview('scroll',2,'units')
+ }
+ elsif ($Tk::y < 0)
+ {
+ $w->yview('scroll',-2,'units')
+ }
+ elsif ($Tk::x >= $w->width)
+ {
+ $w->xview('scroll',2,'units')
+ }
+ elsif ($Tk::x < 0)
+ {
+ $w->xview('scroll',-2,'units')
+ }
+ else
+ {
+ return;
+ }
+ $w->SelectTo('@' . $Tk::x . ','. $Tk::y);
+ $w->RepeatId($w->after(50,['AutoScan',$w]));
+}
+# SetCursor
+# Move the insertion cursor to a given position in a text. Also
+# clears the selection, if there is one in the text, and makes sure
+# that the insertion cursor is visible.
+#
+# Arguments:
+# w - The text window.
+# pos - The desired new position for the cursor in the window.
+sub SetCursor
+{
+ my ($w,$pos) = @_;
+ $pos = 'end - 1 chars' if $w->compare($pos,'==','end');
+ $w->markSet('insert',$pos);
+ $w->unselectAll;
+ $w->see('insert')
+}
+# KeySelect
+# This procedure is invoked when stroking out selections using the
+# keyboard. It moves the cursor to a new position, then extends
+# the selection to that position.
+#
+# Arguments:
+# w - The text window.
+# new - A new position for the insertion cursor (the cursor has not
+# actually been moved to this position yet).
+sub KeySelect
+{
+ my ($w,$new) = @_;
+ my ($first,$last);
+ if (!defined $w->tag('ranges','sel'))
+ {
+ # No selection yet
+ $w->markSet('anchor','insert');
+ if ($w->compare($new,'<','insert'))
+ {
+ $w->tagAdd('sel',$new,'insert')
+ }
+ else
+ {
+ $w->tagAdd('sel','insert',$new)
+ }
+ }
+ else
+ {
+ # Selection exists
+ if ($w->compare($new,'<','anchor'))
+ {
+ $first = $new;
+ $last = 'anchor'
+ }
+ else
+ {
+ $first = 'anchor';
+ $last = $new
+ }
+ $w->tagRemove('sel','1.0',$first);
+ $w->tagAdd('sel',$first,$last);
+ $w->tagRemove('sel',$last,'end')
+ }
+ $w->markSet('insert',$new);
+ $w->see('insert');
+ $w->idletasks;
+}
+# ResetAnchor --
+# Set the selection anchor to whichever end is farthest from the
+# index argument. One special trick: if the selection has two or
+# fewer characters, just leave the anchor where it is. In this
+# case it does not matter which point gets chosen for the anchor,
+# and for the things like Shift-Left and Shift-Right this produces
+# better behavior when the cursor moves back and forth across the
+# anchor.
+#
+# Arguments:
+# w - The text widget.
+# index - Position at which mouse button was pressed, which determines
+# which end of selection should be used as anchor point.
+sub ResetAnchor
+{
+ my ($w,$index) = @_;
+ if (!defined $w->tag('ranges','sel'))
+ {
+ $w->markSet('anchor',$index);
+ return;
+ }
+ my $a = $w->index($index);
+ my $b = $w->index('sel.first');
+ my $c = $w->index('sel.last');
+ if ($w->compare($a,'<',$b))
+ {
+ $w->markSet('anchor','sel.last');
+ return;
+ }
+ if ($w->compare($a,'>',$c))
+ {
+ $w->markSet('anchor','sel.first');
+ return;
+ }
+ my ($lineA,$chA) = split(/\./,$a);
+ my ($lineB,$chB) = split(/\./,$b);
+ my ($lineC,$chC) = split(/\./,$c);
+ if ($lineB < $lineC+2)
+ {
+ my $total = length($w->get($b,$c));
+ if ($total <= 2)
+ {
+ return;
+ }
+ if (length($w->get($b,$a)) < $total/2)
+ {
+ $w->markSet('anchor','sel.last')
+ }
+ else
+ {
+ $w->markSet('anchor','sel.first')
+ }
+ return;
+ }
+ if ($lineA-$lineB < $lineC-$lineA)
+ {
+ $w->markSet('anchor','sel.last')
+ }
+ else
+ {
+ $w->markSet('anchor','sel.first')
+ }
+}
+
+########################################################################
+sub markExists
+{
+ my ($w, $markname)=@_;
+ my $mark_exists=0;
+ my @markNames_list = $w->markNames;
+ foreach my $mark (@markNames_list)
+ { if ($markname eq $mark) {$mark_exists=1;last;} }
+ return $mark_exists;
+}
+
+########################################################################
+sub OverstrikeMode
+{
+ my ($w,$mode) = @_;
+
+ $w->{'OVERSTRIKE_MODE'} =0 unless exists($w->{'OVERSTRIKE_MODE'});
+
+ $w->{'OVERSTRIKE_MODE'}=$mode if (@_ > 1);
+
+ return $w->{'OVERSTRIKE_MODE'};
+}
+
+########################################################################
+# pressed the <Insert> key, just above 'Del' key.
+# this toggles between insert mode and overstrike mode.
+sub ToggleInsertMode
+{
+ my ($w)=@_;
+ $w->OverstrikeMode(!$w->OverstrikeMode);
+}
+
+########################################################################
+sub InsertKeypress
+{
+ my ($w,$char)=@_;
+ if ($w->OverstrikeMode)
+ {
+ my $current=$w->get('insert');
+ $w->delete('insert') unless($current eq "\n");
+ }
+ $w->Insert($char);
+}
+
+########################################################################
+sub GotoLineNumber
+{
+ my ($w,$line_number) = @_;
+ $line_number=~ s/^\s+|\s+$//g;
+ return if $line_number =~ m/\D/;
+ my ($last_line,$junk) = split(/\./, $w->index('end'));
+ if ($line_number > $last_line) {$line_number = $last_line; }
+ $w->{'LAST_GOTO_LINE'} = $line_number;
+ $w->markSet('insert', $line_number.'.0');
+ $w->see('insert');
+}
+
+########################################################################
+sub GotoLineNumberPopUp
+{
+ my ($w)=@_;
+ my $popup = $w->{'GOTO_LINE_NUMBER_POPUP'};
+
+ unless (defined($w->{'LAST_GOTO_LINE'}))
+ {
+ my ($line,$col) = split(/\./, $w->index('insert'));
+ $w->{'LAST_GOTO_LINE'} = $line;
+ }
+
+ ## if anything is selected when bring up the pop-up, put it in entry window.
+ my $selected;
+ eval { $selected = $w->SelectionGet(-selection => "PRIMARY"); };
+ unless ($@)
+ {
+ if (defined($selected) and length($selected))
+ {
+ unless ($selected =~ /\D/)
+ {
+ $w->{'LAST_GOTO_LINE'} = $selected;
+ }
+ }
+ }
+ unless (defined($popup))
+ {
+ require Tk::DialogBox;
+ $popup = $w->DialogBox(-buttons => [qw[Ok Cancel]],-title => "Goto Line Number", -popover => $w,
+ -command => sub { $w->GotoLineNumber($w->{'LAST_GOTO_LINE'}) if $_[0] eq 'Ok'});
+ $w->{'GOTO_LINE_NUMBER_POPUP'}=$popup;
+ $popup->resizable('no','no');
+ my $frame = $popup->Frame->pack(-fill => 'x');
+ $frame->Label(text=>'Enter line number: ')->pack(-side => 'left');
+ my $entry = $frame->Entry(-background=>'white',width=>25,
+ -textvariable => \$w->{'LAST_GOTO_LINE'})->pack(-side =>'left',-fill => 'x');
+ $popup->Advertise(entry => $entry);
+ }
+ $popup->Popup;
+ $popup->Subwidget('entry')->focus;
+ $popup->Wait;
+}
+
+########################################################################
+
+sub getSelected
+{
+ shift->GetTextTaggedWith('sel');
+}
+
+sub deleteSelected
+{
+ shift->DeleteTextTaggedWith('sel');
+}
+
+sub GetTextTaggedWith
+{
+ my ($w,$tag) = @_;
+
+ my @ranges = $w->tagRanges($tag);
+ my $range_total = @ranges;
+ my $return_text='';
+
+ # if nothing selected, then ignore
+ if ($range_total == 0) {return $return_text;}
+
+ # for every range-pair, get selected text
+ while(@ranges)
+ {
+ my $first = shift(@ranges);
+ my $last = shift(@ranges);
+ my $text = $w->get($first , $last);
+ if(defined($text))
+ {$return_text = $return_text . $text;}
+ # if there is more tagged text, separate with an end of line character
+ if(@ranges)
+ {$return_text = $return_text . "\n";}
+ }
+ return $return_text;
+}
+
+########################################################################
+sub DeleteTextTaggedWith
+{
+ my ($w,$tag) = @_;
+ my @ranges = $w->tagRanges($tag);
+ my $range_total = @ranges;
+
+ # if nothing tagged with that tag, then ignore
+ if ($range_total == 0) {return;}
+
+ # insert marks where selections are located
+ # marks will move with text even as text is inserted and deleted
+ # in a previous selection.
+ for (my $i=0; $i<$range_total; $i++)
+ { $w->markSet('mark_tag_'.$i => $ranges[$i]); }
+
+ # for every selected mark pair, insert new text and delete old text
+ for (my $i=0; $i<$range_total; $i=$i+2)
+ {
+ my $first = $w->index('mark_tag_'.$i);
+ my $last = $w->index('mark_tag_'.($i+1));
+
+ my $text = $w->delete($first , $last);
+ }
+
+ # delete the marks
+ for (my $i=0; $i<$range_total; $i++)
+ { $w->markUnset('mark_tag_'.$i); }
+}
+
+
+########################################################################
+sub FindAll
+{
+ my ($w,$mode, $case, $pattern ) = @_;
+ ### 'sel' tags accumulate, need to remove any previous existing
+ $w->unselectAll;
+
+ my $match_length=0;
+ my $start_index;
+ my $end_index = '1.0';
+
+ while(defined($end_index))
+ {
+ if ($case eq '-nocase')
+ {
+ $start_index = $w->search(
+ $mode,
+ $case,
+ -count => \$match_length,
+ "--",
+ $pattern ,
+ $end_index,
+ 'end');
+ }
+ else
+ {
+ $start_index = $w->search(
+ $mode,
+ -count => \$match_length,
+ "--",
+ $pattern ,
+ $end_index,
+ 'end');
+ }
+
+ unless(defined($start_index) && $start_index) {last;}
+
+ my ($line,$col) = split(/\./, $start_index);
+ $col = $col + $match_length;
+ $end_index = $line.'.'.$col;
+ $w->tagAdd('sel', $start_index, $end_index);
+ }
+}
+
+########################################################################
+# get current selected text and search for the next occurrence
+sub FindSelectionNext
+{
+ my ($w) = @_;
+ my $selected;
+ eval {$selected = $w->SelectionGet(-selection => "PRIMARY"); };
+ return if($@);
+ return unless (defined($selected) and length($selected));
+
+ $w->FindNext('-forward', '-exact', '-case', $selected);
+}
+
+########################################################################
+# get current selected text and search for the previous occurrence
+sub FindSelectionPrevious
+{
+ my ($w) = @_;
+ my $selected;
+ eval {$selected = $w->SelectionGet(-selection => "PRIMARY"); };
+ return if($@);
+ return unless (defined($selected) and length($selected));
+
+ $w->FindNext('-backward', '-exact', '-case', $selected);
+}
+
+
+
+########################################################################
+sub FindNext
+{
+ my ($w,$direction, $mode, $case, $pattern ) = @_;
+
+ ## if searching forward, start search at end of selected block
+ ## if backward, start search from start of selected block.
+ ## dont want search to find currently selected text.
+ ## tag 'sel' may not be defined, use eval loop to trap error
+ eval {
+ if ($direction eq '-forward')
+ {
+ $w->markSet('insert', 'sel.last');
+ $w->markSet('current', 'sel.last');
+ }
+ else
+ {
+ $w->markSet('insert', 'sel.first');
+ $w->markSet('current', 'sel.first');
+ }
+ };
+
+ my $saved_index=$w->index('insert');
+
+ # remove any previous existing tags
+ $w->unselectAll;
+
+ my $match_length=0;
+ my $start_index;
+
+ if ($case eq '-nocase')
+ {
+ $start_index = $w->search(
+ $direction,
+ $mode,
+ $case,
+ -count => \$match_length,
+ "--",
+ $pattern ,
+ 'insert');
+ }
+ else
+ {
+ $start_index = $w->search(
+ $direction,
+ $mode,
+ -count => \$match_length,
+ "--",
+ $pattern ,
+ 'insert');
+ }
+
+ unless(defined($start_index)) { return 0; }
+ if(length($start_index) == 0) { return 0; }
+
+ my ($line,$col) = split(/\./, $start_index);
+ $col = $col + $match_length;
+ my $end_index = $line.'.'.$col;
+ $w->tagAdd('sel', $start_index, $end_index);
+
+ $w->see($start_index);
+
+ if ($direction eq '-forward')
+ {
+ $w->markSet('insert', $end_index);
+ $w->markSet('current', $end_index);
+ }
+ else
+ {
+ $w->markSet('insert', $start_index);
+ $w->markSet('current', $start_index);
+ }
+
+ my $compared_index = $w->index('insert');
+
+ my $ret_val;
+ if ($compared_index eq $saved_index)
+ {$ret_val=0;}
+ else
+ {$ret_val=1;}
+ return $ret_val;
+}
+
+########################################################################
+sub FindAndReplaceAll
+{
+ my ($w,$mode, $case, $find, $replace ) = @_;
+ $w->markSet('insert', '1.0');
+ $w->unselectAll;
+ while($w->FindNext('-forward', $mode, $case, $find))
+ {
+ $w->ReplaceSelectionsWith($replace);
+ }
+}
+
+########################################################################
+sub ReplaceSelectionsWith
+{
+ my ($w,$new_text ) = @_;
+
+ my @ranges = $w->tagRanges('sel');
+ my $range_total = @ranges;
+
+ # if nothing selected, then ignore
+ if ($range_total == 0) {return};
+
+ # insert marks where selections are located
+ # marks will move with text even as text is inserted and deleted
+ # in a previous selection.
+ for (my $i=0; $i<$range_total; $i++)
+ {$w->markSet('mark_sel_'.$i => $ranges[$i]); }
+
+ # for every selected mark pair, insert new text and delete old text
+ my ($first, $last);
+ for (my $i=0; $i<$range_total; $i=$i+2)
+ {
+ $first = $w->index('mark_sel_'.$i);
+ $last = $w->index('mark_sel_'.($i+1));
+
+ ##########################################################################
+ # eventually, want to be able to get selected text,
+ # support regular expression matching, determine replace_text
+ # $replace_text = $selected_text=~m/$new_text/ (or whatever would work)
+ # will have to pass in mode and case flags.
+ # this would allow a regular expression search and replace to be performed
+ # example, look for "line (\d+):" and replace with "$1 >" or similar
+ ##########################################################################
+
+ $w->insert($last, $new_text);
+ $w->delete($first, $last);
+
+ }
+ ############################################################
+ # set the insert cursor to the end of the last insertion mark
+ $w->markSet('insert',$w->index('mark_sel_'.($range_total-1)));
+
+ # delete the marks
+ for (my $i=0; $i<$range_total; $i++)
+ { $w->markUnset('mark_sel_'.$i); }
+}
+########################################################################
+sub FindAndReplacePopUp
+{
+ my ($w)=@_;
+ $w->findandreplacepopup(0);
+}
+
+########################################################################
+sub FindPopUp
+{
+ my ($w)=@_;
+ $w->findandreplacepopup(1);
+}
+
+########################################################################
+
+sub findandreplacepopup
+{
+ my ($w,$find_only)=@_;
+
+ my $pop = $w->Toplevel;
+ if ($find_only)
+ { $pop->title("Find"); }
+ else
+ { $pop->title("Find and/or Replace"); }
+ my $frame = $pop->Frame->pack(-anchor=>'nw');
+
+ $frame->Label(text=>"Direction:")
+ ->grid(-row=> 1, -column=>1, -padx=> 20, -sticky => 'nw');
+ my $direction = '-forward';
+ $frame->Radiobutton(
+ variable => \$direction,
+ text => '-forward',value => '-forward' )
+ ->grid(-row=> 2, -column=>1, -padx=> 20, -sticky => 'nw');
+ $frame->Radiobutton(
+ variable => \$direction,
+ text => '-backward',value => '-backward' )
+ ->grid(-row=> 3, -column=>1, -padx=> 20, -sticky => 'nw');
+
+ $frame->Label(text=>"Mode:")
+ ->grid(-row=> 1, -column=>2, -padx=> 20, -sticky => 'nw');
+ my $mode = '-exact';
+ $frame->Radiobutton(
+ variable => \$mode, text => '-exact',value => '-exact' )
+ ->grid(-row=> 2, -column=>2, -padx=> 20, -sticky => 'nw');
+ $frame->Radiobutton(
+ variable => \$mode, text => '-regexp',value => '-regexp' )
+ ->grid(-row=> 3, -column=>2, -padx=> 20, -sticky => 'nw');
+
+ $frame->Label(text=>"Case:")
+ ->grid(-row=> 1, -column=>3, -padx=> 20, -sticky => 'nw');
+ my $case = '-case';
+ $frame->Radiobutton(
+ variable => \$case, text => '-case',value => '-case' )
+ ->grid(-row=> 2, -column=>3, -padx=> 20, -sticky => 'nw');
+ $frame->Radiobutton(
+ variable => \$case, text => '-nocase',value => '-nocase' )
+ ->grid(-row=> 3, -column=>3, -padx=> 20, -sticky => 'nw');
+
+ ######################################################
+ my $find_entry = $pop->Entry(width=>25);
+
+ my $button_find = $pop->Button(text=>'Find',
+ command => sub {$w->FindNext ($direction,$mode,$case,$find_entry->get()),} )
+ -> pack(-anchor=>'nw');
+
+ $find_entry -> pack(-anchor=>'nw', '-expand' => 'yes' , -fill => 'x'); # autosizing
+
+ ###### if any $w text is selected, put it in the find entry
+ ###### could be more than one text block selected, get first selection
+ my @ranges = $w->tagRanges('sel');
+ if (@ranges)
+ {
+ my $first = shift(@ranges);
+ my $last = shift(@ranges);
+
+ # limit to one line
+ my ($first_line, $first_col) = split(/\./,$first);
+ my ($last_line, $last_col) = split(/\./,$last);
+ unless($first_line == $last_line)
+ {$last = $first. ' lineend';}
+
+ $find_entry->insert('insert', $w->get($first , $last));
+ }
+ else
+ {
+ my $selected;
+ eval {$selected=$w->SelectionGet(-selection => "PRIMARY"); };
+ if($@) {}
+ elsif (defined($selected))
+ {$find_entry->insert('insert', $selected);}
+ }
+
+ my ($replace_entry,$button_replace,$button_replace_all);
+ unless ($find_only)
+ {
+ ######################################################
+ $replace_entry = $pop->Entry(width=>25);
+ ######################################################
+ $button_replace = $pop->Button(text=>'Replace',
+ command => sub {$w->ReplaceSelectionsWith($replace_entry->get());} )
+ -> pack(-anchor=>'nw');
+
+ $replace_entry -> pack(-anchor=>'nw', '-expand' => 'yes' , -fill => 'x');
+ }
+
+ ######################################################
+ $pop->Label(text=>" ")->pack();
+ ######################################################
+ unless ($find_only)
+ {
+ $button_replace_all = $pop->Button(text=>'Replace All',
+ command => sub {$w->FindAndReplaceAll
+ ($mode,$case,$find_entry->get(),$replace_entry->get());} )
+ ->pack(-side => 'left');
+ }
+
+ my $button_find_all = $pop->Button(text=>'Find All',
+ command => sub {$w->FindAll($mode,$case,$find_entry->get());} )
+ ->pack(-side => 'left');
+
+ my $button_cancel = $pop->Button(text=>'Cancel',
+ command => sub {$pop->destroy()} )
+ ->pack(-side => 'left');
+
+ $pop->resizable('yes','no');
+ return $pop;
+}
+
+# paste clipboard into current location
+sub clipboardPaste
+{
+ my ($w) = @_;
+ local $@;
+ Tk::catch { $w->Insert($w->clipboardGet) };
+}
+
+########################################################################
+# Insert --
+# Insert a string into a text at the point of the insertion cursor.
+# If there is a selection in the text, and it covers the point of the
+# insertion cursor, then delete the selection before inserting.
+#
+# Arguments:
+# w - The text window in which to insert the string
+# string - The string to insert (usually just a single character)
+sub Insert
+{
+ my ($w,$string) = @_;
+ return unless (defined $string && $string ne '');
+ #figure out if cursor is inside a selection
+ my @ranges = $w->tagRanges('sel');
+ if (@ranges)
+ {
+ while (@ranges)
+ {
+ my ($first,$last) = splice(@ranges,0,2);
+ if ($w->compare($first,'<=','insert') && $w->compare($last,'>=','insert'))
+ {
+ $w->ReplaceSelectionsWith($string);
+ return;
+ }
+ }
+ }
+ # paste it at the current cursor location
+ $w->insert('insert',$string);
+ $w->see('insert');
+}
+
+# UpDownLine --
+# Returns the index of the character one line above or below the
+# insertion cursor. There are two tricky things here. First,
+# we want to maintain the original column across repeated operations,
+# even though some lines that will get passed through do not have
+# enough characters to cover the original column. Second, do not
+# try to scroll past the beginning or end of the text.
+#
+# Arguments:
+# w - The text window in which the cursor is to move.
+# n - The number of lines to move: -1 for up one line,
+# +1 for down one line.
+sub UpDownLine_old
+{
+ my ($w,$n) = @_;
+ my $i = $w->index('insert');
+ my ($line,$char) = split(/\./,$i);
+ if (!defined($Tk::prevPos) || $Tk::prevPos ne $i)
+ {
+ $Tk::char = $char
+ }
+ my $new = $w->index($line+$n . '.' . $Tk::char);
+ if ($w->compare($new,'==','end') || $w->compare($new,'==','insert linestart'))
+ {
+ $new = $i
+ }
+ $Tk::prevPos = $new;
+ return $new;
+}
+
+sub UpDownLine
+{
+ my ($w,$n) = @_;
+ my $i = $w->index('insert');
+ my ($line,$char) = split(/\./,$i);
+ my $string = $w->get($line.'.0', $i);
+
+ $string = expand($string);
+ $char=length($string);
+ $line += $n;
+
+ $string = $w->get($line.'.0', $line.'.0 lineend');
+ $string = expand($string);
+ $string = substr($string, 0, $char);
+
+ $string = unexpand($string);
+ $char = length($string);
+
+ my $new = $w->index($line . '.' . $char);
+ if ($w->compare($new,'==','end') || $w->compare($new,'==','insert linestart'))
+ {
+ $new = $i
+ }
+ $Tk::prevPos = $new;
+ $Tk::char = $char;
+ return $new;
+}
+
+
+# PrevPara --
+# Returns the index of the beginning of the paragraph just before a given
+# position in the text (the beginning of a paragraph is the first non-blank
+# character after a blank line).
+#
+# Arguments:
+# w - The text window in which the cursor is to move.
+# pos - Position at which to start search.
+sub PrevPara
+{
+ my ($w,$pos) = @_;
+ $pos = $w->index("$pos linestart");
+ while (1)
+ {
+ if ($w->get("$pos - 1 line") eq "\n" && $w->get($pos) ne "\n" || $pos eq '1.0' )
+ {
+ my $string = $w->get($pos,"$pos lineend");
+ if ($string =~ /^(\s)+/)
+ {
+ my $off = length($1);
+ $pos = $w->index("$pos + $off chars")
+ }
+ if ($w->compare($pos,'!=','insert') || $pos eq '1.0')
+ {
+ return $pos;
+ }
+ }
+ $pos = $w->index("$pos - 1 line")
+ }
+}
+# NextPara --
+# Returns the index of the beginning of the paragraph just after a given
+# position in the text (the beginning of a paragraph is the first non-blank
+# character after a blank line).
+#
+# Arguments:
+# w - The text window in which the cursor is to move.
+# start - Position at which to start search.
+sub NextPara
+{
+ my ($w,$start) = @_;
+ my $pos = $w->index("$start linestart + 1 line");
+ while ($w->get($pos) ne "\n")
+ {
+ if ($w->compare($pos,'==','end'))
+ {
+ return $w->index('end - 1c');
+ }
+ $pos = $w->index("$pos + 1 line")
+ }
+ while ($w->get($pos) eq "\n" )
+ {
+ $pos = $w->index("$pos + 1 line");
+ if ($w->compare($pos,'==','end'))
+ {
+ return $w->index('end - 1c');
+ }
+ }
+ my $string = $w->get($pos,"$pos lineend");
+ if ($string =~ /^(\s+)/)
+ {
+ my $off = length($1);
+ return $w->index("$pos + $off chars");
+ }
+ return $pos;
+}
+# ScrollPages --
+# This is a utility procedure used in bindings for moving up and down
+# pages and possibly extending the selection along the way. It scrolls
+# the view in the widget by the number of pages, and it returns the
+# index of the character that is at the same position in the new view
+# as the insertion cursor used to be in the old view.
+#
+# Arguments:
+# w - The text window in which the cursor is to move.
+# count - Number of pages forward to scroll; may be negative
+# to scroll backwards.
+sub ScrollPages
+{
+ my ($w,$count) = @_;
+ my @bbox = $w->bbox('insert');
+ $w->yview('scroll',$count,'pages');
+ if (!@bbox)
+ {
+ return $w->index('@' . int($w->height/2) . ',' . 0);
+ }
+ my $x = int($bbox[0]+$bbox[2]/2);
+ my $y = int($bbox[1]+$bbox[3]/2);
+ return $w->index('@' . $x . ',' . $y);
+}
+
+sub Contents
+{
+ my $w = shift;
+ if (@_)
+ {
+ $w->delete('1.0','end');
+ $w->insert('end',shift) while (@_);
+ }
+ else
+ {
+ return $w->get('1.0','end');
+ }
+}
+
+sub Destroy
+{
+ my ($w) = @_;
+ delete $w->{_Tags_};
+}
+
+sub Transpose
+{
+ my ($w) = @_;
+ my $pos = 'insert';
+ $pos = $w->index("$pos + 1 char") if ($w->compare($pos,'!=',"$pos lineend"));
+ return if ($w->compare("$pos - 1 char",'==','1.0'));
+ my $new = $w->get("$pos - 1 char").$w->get("$pos - 2 char");
+ $w->delete("$pos - 2 char",$pos);
+ $w->insert('insert',$new);
+ $w->see('insert');
+}
+
+sub Tag
+{
+ my $w = shift;
+ my $name = shift;
+ Carp::confess('No args') unless (ref $w and defined $name);
+ $w->{_Tags_} = {} unless (exists $w->{_Tags_});
+ unless (exists $w->{_Tags_}{$name})
+ {
+ require Tk::Text::Tag;
+ $w->{_Tags_}{$name} = 'Tk::Text::Tag'->new($w,$name);
+ }
+ $w->{_Tags_}{$name}->configure(@_) if (@_);
+ return $w->{_Tags_}{$name};
+}
+
+sub Tags
+{
+ my ($w,$name) = @_;
+ my @result = ();
+ foreach $name ($w->tagNames(@_))
+ {
+ push(@result,$w->Tag($name));
+ }
+ return @result;
+}
+
+sub TIEHANDLE
+{
+ my ($class,$obj) = @_;
+ return $obj;
+}
+
+sub PRINT
+{
+ my $w = shift;
+ # Find out whether 'end' is displayed at the moment
+ # Retrieve the position of the bottom of the window as
+ # a fraction of the entire contents of the Text widget
+ my $yview = ($w->yview)[1];
+
+ # If $yview is 1.0 this means that 'end' is visible in the window
+ my $update = 0;
+ $update = 1 if $yview == 1.0;
+
+ # Loop over all input strings
+ while (@_)
+ {
+ $w->insert('end',shift);
+ }
+ # Move the window to see the end of the text if required
+ $w->see('end') if $update;
+}
+
+sub PRINTF
+{
+ my $w = shift;
+ $w->PRINT(sprintf(shift,@_));
+}
+
+sub WhatLineNumberPopUp
+{
+ my ($w)=@_;
+ my ($line,$col) = split(/\./,$w->index('insert'));
+ $w->messageBox(-type => 'Ok', -title => "What Line Number",
+ -message => "The cursor is on line $line (column is $col)");
+}
+
+sub MenuLabels
+{
+ return qw[~File ~Edit ~Search ~View];
+}
+
+sub SearchMenuItems
+{
+ my ($w) = @_;
+ return [
+ ['command'=>'~Find', -command => [$w => 'FindPopUp']],
+ ['command'=>'Find ~Next', -command => [$w => 'FindSelectionNext']],
+ ['command'=>'Find ~Previous', -command => [$w => 'FindSelectionPrevious']],
+ ['command'=>'~Replace', -command => [$w => 'FindAndReplacePopUp']]
+ ];
+}
+
+sub EditMenuItems
+{
+ my ($w) = @_;
+ my @items = ();
+ foreach my $op ($w->clipEvents)
+ {
+ push(@items,['command' => "~$op", -command => [ $w => "clipboard$op"]]);
+ }
+ push(@items,
+ '-',
+ ['command'=>'Select All', -command => [$w => 'selectAll']],
+ ['command'=>'Unselect All', -command => [$w => 'unselectAll']],
+ );
+ return \@items;
+}
+
+sub ViewMenuItems
+{
+ my ($w) = @_;
+ my $v;
+ tie $v,'Tk::Configure',$w,'-wrap';
+ return [
+ ['command'=>'Goto ~Line...', -command => [$w => 'GotoLineNumberPopUp']],
+ ['command'=>'~Which Line?', -command => [$w => 'WhatLineNumberPopUp']],
+ ['cascade'=> 'Wrap', -tearoff => 0, -menuitems => [
+ [radiobutton => 'Word', -variable => \$v, -value => 'word'],
+ [radiobutton => 'Character', -variable => \$v, -value => 'char'],
+ [radiobutton => 'None', -variable => \$v, -value => 'none'],
+ ]],
+ ];
+}
+
+########################################################################
+sub clipboardColumnCopy
+{
+ my ($w) = @_;
+ $w->Column_Copy_or_Cut(0);
+}
+
+sub clipboardColumnCut
+{
+ my ($w) = @_;
+ $w->Column_Copy_or_Cut(1);
+}
+
+########################################################################
+sub Column_Copy_or_Cut
+{
+ my ($w, $cut) = @_;
+ my @ranges = $w->tagRanges('sel');
+ my $range_total = @ranges;
+ # this only makes sense if there is one selected block
+ unless ($range_total==2)
+ {
+ $w->bell;
+ return;
+ }
+
+ my $selection_start_index = shift(@ranges);
+ my $selection_end_index = shift(@ranges);
+
+ my ($start_line, $start_column) = split(/\./, $selection_start_index);
+ my ($end_line, $end_column) = split(/\./, $selection_end_index);
+
+ # correct indices for tabs
+ my $string;
+ $string = $w->get($start_line.'.0', $start_line.'.0 lineend');
+ $string = substr($string, 0, $start_column);
+ $string = expand($string);
+ my $tab_start_column = length($string);
+
+ $string = $w->get($end_line.'.0', $end_line.'.0 lineend');
+ $string = substr($string, 0, $end_column);
+ $string = expand($string);
+ my $tab_end_column = length($string);
+
+ my $length = $tab_end_column - $tab_start_column;
+
+ $selection_start_index = $start_line . '.' . $tab_start_column;
+ $selection_end_index = $end_line . '.' . $tab_end_column;
+
+ # clear the clipboard
+ $w->clipboardClear;
+ my ($clipstring, $startstring, $endstring);
+ my $padded_string = ' 'x$tab_end_column;
+ for(my $line = $start_line; $line <= $end_line; $line++)
+ {
+ $string = $w->get($line.'.0', $line.'.0 lineend');
+ $string = expand($string) . $padded_string;
+ $clipstring = substr($string, $tab_start_column, $length);
+ #$clipstring = unexpand($clipstring);
+ $w->clipboardAppend($clipstring."\n");
+
+ if ($cut)
+ {
+ $startstring = substr($string, 0, $tab_start_column);
+ $startstring = unexpand($startstring);
+ $start_column = length($startstring);
+
+ $endstring = substr($string, 0, $tab_end_column );
+ $endstring = unexpand($endstring);
+ $end_column = length($endstring);
+
+ $w->delete($line.'.'.$start_column, $line.'.'.$end_column);
+ }
+ }
+}
+
+########################################################################
+
+sub clipboardColumnPaste
+{
+ my ($w) = @_;
+ my @ranges = $w->tagRanges('sel');
+ my $range_total = @ranges;
+ if ($range_total)
+ {
+ warn " there cannot be any selections during clipboardColumnPaste. \n";
+ $w->bell;
+ return;
+ }
+
+ my $clipboard_text;
+ eval
+ {
+ $clipboard_text = $w->SelectionGet(-selection => "CLIPBOARD");
+ };
+
+ return unless (defined($clipboard_text));
+ return unless (length($clipboard_text));
+ my $string;
+
+ my $current_index = $w->index('insert');
+ my ($current_line, $current_column) = split(/\./,$current_index);
+ $string = $w->get($current_line.'.0', $current_line.'.'.$current_column);
+ $string = expand($string);
+ $current_column = length($string);
+
+ my @clipboard_lines = split(/\n/,$clipboard_text);
+ my $length;
+ my $end_index;
+ my ($delete_start_column, $delete_end_column, $insert_column_index);
+ foreach my $line (@clipboard_lines)
+ {
+ if ($w->OverstrikeMode)
+ {
+ #figure out start and end indexes to delete, compensating for tabs.
+ $string = $w->get($current_line.'.0', $current_line.'.0 lineend');
+ $string = expand($string);
+ $string = substr($string, 0, $current_column);
+ $string = unexpand($string);
+ $delete_start_column = length($string);
+
+ $string = $w->get($current_line.'.0', $current_line.'.0 lineend');
+ $string = expand($string);
+ $string = substr($string, 0, $current_column + length($line));
+ chomp($string); # dont delete a "\n" on end of line.
+ $string = unexpand($string);
+ $delete_end_column = length($string);
+
+
+
+ $w->delete(
+ $current_line.'.'.$delete_start_column ,
+ $current_line.'.'.$delete_end_column
+ );
+ }
+
+ $string = $w->get($current_line.'.0', $current_line.'.0 lineend');
+ $string = expand($string);
+ $string = substr($string, 0, $current_column);
+ $string = unexpand($string);
+ $insert_column_index = length($string);
+
+ $w->insert($current_line.'.'.$insert_column_index, unexpand($line));
+ $current_line++;
+ }
+
+}
+
+# Backward compatibility
+sub GetMenu
+{
+ carp((caller(0))[3]." is deprecated") if $^W;
+ shift->menu
+}
+
+1;
+__END__
+
diff --git a/Master/xemtex/perl/site/lib/Tk/Text/Tag.pm b/Master/xemtex/perl/site/lib/Tk/Text/Tag.pm
new file mode 100644
index 00000000000..7cddf48fd25
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Text/Tag.pm
@@ -0,0 +1,46 @@
+package Tk::Text::Tag;
+require Tk::Text;
+
+use overload '""' => \&name;
+
+
+use vars qw($VERSION);
+$VERSION = '3.007'; # $Id: //depot/Tk8/Text/Text/Tag.pm#7 $
+
+sub _apply
+{
+ my $self = shift;
+ my $meth = shift;
+ $self->widget->tag($meth => $self->name,@_);
+}
+
+sub name
+{
+ return shift->[0];
+}
+
+sub widget
+{
+ return shift->[1];
+}
+
+BEGIN
+{
+ my $meth;
+ foreach $meth (qw(cget configure bind add))
+ {
+ *{$meth} = sub { shift->_apply($meth,@_) }
+ }
+}
+
+sub new
+{
+ my $class = shift;
+ my $widget = shift;
+ my $name = shift;
+ my $obj = bless [$name,$widget],$class;
+ $obj->configure(@_) if (@_);
+ return $obj;
+}
+
+1;
diff --git a/Master/xemtex/perl/site/lib/Tk/Tk.xbm b/Master/xemtex/perl/site/lib/Tk/Tk.xbm
new file mode 100644
index 00000000000..136d4793037
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Tk.xbm
@@ -0,0 +1,44 @@
+#define Tk.xbm_width 61
+#define Tk.xbm_height 61
+static unsigned char Tk.xbm_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0xf8, 0x0e, 0x00, 0x00,
+ 0x00, 0xe0, 0x1e, 0x00, 0xbe, 0x3e, 0x00, 0x00, 0x00, 0xfb, 0x1e, 0x00,
+ 0xfe, 0x7f, 0x00, 0x00, 0x80, 0xdf, 0x0f, 0x00, 0xff, 0xbf, 0x00, 0x00,
+ 0x80, 0xe0, 0x3d, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0x47, 0x7f, 0x80,
+ 0xff, 0xfd, 0x01, 0x00, 0x00, 0x7f, 0x3e, 0xc0, 0xff, 0xf1, 0x01, 0x00,
+ 0x00, 0x30, 0x7f, 0xf0, 0xfe, 0xb3, 0x03, 0x00, 0x00, 0xf8, 0x3e, 0x7c,
+ 0xff, 0xcf, 0x07, 0x00, 0x00, 0x78, 0x37, 0xfc, 0x7b, 0xc3, 0x07, 0x00,
+ 0x00, 0xfc, 0x3d, 0xfe, 0x3c, 0x25, 0x0e, 0x00, 0x00, 0xfc, 0x3e, 0x5f,
+ 0x18, 0x41, 0x0b, 0x00, 0x00, 0x5c, 0x3f, 0x5f, 0xf0, 0x59, 0x1b, 0x00,
+ 0x00, 0xdc, 0x9f, 0x3f, 0xe8, 0xbe, 0x17, 0x00, 0x00, 0xbc, 0x9f, 0x2f,
+ 0xa8, 0x5b, 0x15, 0x00, 0x00, 0xdc, 0xdf, 0x25, 0x48, 0x7a, 0x34, 0x00,
+ 0x00, 0x7c, 0xce, 0x1f, 0x20, 0x2c, 0x36, 0x00, 0x00, 0x7c, 0xa7, 0x1f,
+ 0xcc, 0x09, 0xf0, 0x00, 0x00, 0xfc, 0xae, 0x1f, 0x49, 0x05, 0xf6, 0x00,
+ 0x00, 0xfc, 0xac, 0x3f, 0xf8, 0x11, 0xf6, 0x00, 0x00, 0xf8, 0x8d, 0x3f,
+ 0x8e, 0x0e, 0xd6, 0x01, 0x00, 0xf8, 0x9c, 0x7e, 0xd7, 0x5b, 0xff, 0x03,
+ 0x00, 0x70, 0x83, 0x5f, 0xcf, 0xfd, 0xbf, 0x01, 0x00, 0xe0, 0xc3, 0x3b,
+ 0xc7, 0xff, 0x3f, 0x03, 0x00, 0xe0, 0xcf, 0xbf, 0xe3, 0xff, 0x97, 0x03,
+ 0x00, 0x80, 0xfb, 0x7f, 0xfb, 0xff, 0x17, 0x01, 0x00, 0x80, 0xef, 0xff,
+ 0xb3, 0x6f, 0x17, 0x03, 0x00, 0x00, 0xff, 0xff, 0xdf, 0x3f, 0x17, 0x03,
+ 0x00, 0x00, 0x88, 0xff, 0xbf, 0x3f, 0x1b, 0x03, 0x00, 0x00, 0x00, 0x7b,
+ 0x3d, 0x1f, 0x9f, 0x01, 0x00, 0x00, 0x80, 0x1f, 0x7f, 0x1f, 0x9e, 0x00,
+ 0x00, 0x00, 0x80, 0x1f, 0x3f, 0x0f, 0x1e, 0x00, 0x00, 0x00, 0x80, 0x1f,
+ 0x1f, 0x0f, 0x1e, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x1f, 0x0e, 0x1e, 0x00,
+ 0x00, 0xfe, 0x81, 0x8f, 0x1f, 0x0f, 0x1c, 0x00, 0x00, 0x98, 0x81, 0xc7,
+ 0x1f, 0x0e, 0x18, 0x00, 0x00, 0x98, 0x01, 0xc7, 0x0f, 0x0a, 0x18, 0x00,
+ 0xfc, 0x98, 0x99, 0xc7, 0x07, 0x0e, 0x18, 0x00, 0x8c, 0x99, 0x8d, 0xc7,
+ 0x02, 0x0e, 0x18, 0x00, 0x8c, 0x99, 0x07, 0xc3, 0x03, 0x03, 0x18, 0x00,
+ 0x8c, 0x99, 0x07, 0xc7, 0x01, 0x03, 0x28, 0x00, 0x8c, 0x99, 0x0d, 0x03,
+ 0x03, 0x01, 0x08, 0x00, 0xfc, 0x98, 0x19, 0x03, 0x86, 0x01, 0x18, 0x00,
+ 0x0c, 0x00, 0x00, 0x03, 0xc4, 0x01, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x03,
+ 0x88, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x03, 0x90, 0x00, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x30, 0x00, 0x08, 0x00, 0x00, 0x00, 0x80, 0x01,
+ 0xf0, 0x01, 0x08, 0x00, 0x00, 0x00, 0x80, 0x01, 0xf8, 0x01, 0x18, 0x00,
+ 0x00, 0x00, 0xc0, 0x01, 0x9e, 0x03, 0x04, 0x00, 0x00, 0x00, 0xc0, 0x01,
+ 0xb3, 0x01, 0x04, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x01, 0x18, 0x00,
+ 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xdc, 0x00,
+ 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/Master/xemtex/perl/site/lib/Tk/Tk.xpm b/Master/xemtex/perl/site/lib/Tk/Tk.xpm
new file mode 100644
index 00000000000..7880a637f39
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Tk.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *Tk[] = {
+/* width height num_colors chars_per_pixel */
+" 32 32 2 1",
+/* colors */
+"# c #008080",
+"a c #ff0000",
+/* pixels */
+"################################",
+"################################",
+"################################",
+"################################",
+"################################",
+"################################",
+"##########aaaaaaaa##############",
+"#######aaaaaaaaaaaa#######aa####",
+"#####aaaaaaaaaaaaaa######aaa####",
+"####aaaaaaaaaaaaaaaa####aaaa####",
+"####aaaaaaa######aa####aaaa#####",
+"###aaaa#########aaa###aaaa######",
+"###aaaa#########aa###aaaa#######",
+"######aa#######aa####aaa########",
+"##############aaa###aaaa########",
+"#############aaa###aaaa##aaa####",
+"#############aa####aaa#aaaaa####",
+"############aaa###aaa#aaaaaa####",
+"###########aaa####aa#aa#aaa#####",
+"###########aaa###aa#aa#aaa######",
+"##########aaa####aaaaaaaa#aa####",
+"##########aaa####aaaaaaa##aa####",
+"#########aaaa####aaaaaaaaaa#####",
+"#########aaa#####aa##aaaaa######",
+"#########aaa##########aa########",
+"################################",
+"################################",
+"################################",
+"################################",
+"################################",
+"################################",
+"################################"
+};
diff --git a/Master/xemtex/perl/site/lib/Tk/Toplevel.pm b/Master/xemtex/perl/site/lib/Tk/Toplevel.pm
new file mode 100644
index 00000000000..1d7533f8377
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Toplevel.pm
@@ -0,0 +1,211 @@
+# Copyright (c) 1995-1999 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Toplevel;
+use AutoLoader;
+
+use vars qw($VERSION);
+$VERSION = '3.028'; # $Id: //depot/Tk8/Tk/Toplevel.pm#28 $
+
+use base qw(Tk::Wm Tk::Frame);
+
+Construct Tk::Widget 'Toplevel';
+
+sub Tk_cmd { \&Tk::toplevel }
+
+sub CreateOptions
+{
+ return (shift->SUPER::CreateOptions,'-screen','-use')
+}
+
+sub Populate
+{
+ my ($cw,$arg) = @_;
+ $cw->SUPER::Populate($arg);
+ $cw->ConfigSpecs('-title',['METHOD',undef,undef,$cw->class]);
+}
+
+sub Icon
+{
+ my ($top,%args) = @_;
+ my $icon = $top->iconwindow;
+ my $state = $top->state;
+ if ($state ne 'withdrawn')
+ {
+ $top->withdraw;
+ $top->update; # Let attributes propogate
+ }
+ unless (defined $icon)
+ {
+ $icon = Tk::Toplevel->new($top,'-borderwidth' => 0,'-class'=>'Icon');
+ $icon->withdraw;
+ # Fake Populate
+ my $lab = $icon->Component('Label' => 'icon');
+ $lab->pack('-expand'=>1,'-fill' => 'both');
+ $icon->ConfigSpecs(DEFAULT => ['DESCENDANTS']);
+ # Now do tail of InitObject
+ $icon->ConfigDefault(\%args);
+ # And configure that new would have done
+ $top->iconwindow($icon);
+ $top->update;
+ $lab->DisableButtonEvents;
+ $lab->update;
+ }
+ $top->iconimage($args{'-image'}) if (exists $args{'-image'});
+ $icon->configure(%args);
+ $icon->idletasks; # Let size request propogate
+ $icon->geometry($icon->ReqWidth . 'x' . $icon->ReqHeight);
+ $icon->update; # Let attributes propogate
+ $top->deiconify if ($state eq 'normal');
+ $top->iconify if ($state eq 'iconic');
+}
+
+sub menu
+{
+ my $w = shift;
+ my $menu;
+ $menu = $w->cget('-menu');
+ unless (defined $menu)
+ {
+ $w->configure(-menu => ($menu = $w->SUPER::menu))
+ }
+ $menu->configure(@_) if @_;
+ return $menu;
+}
+
+
+1;
+__END__
+
+#----------------------------------------------------------------------
+#
+# Focus Group
+#
+# Focus groups are used to handle the user's focusing actions inside a
+# toplevel.
+#
+# One example of using focus groups is: when the user focuses on an
+# entry, the text in the entry is highlighted and the cursor is put to
+# the end of the text. When the user changes focus to another widget,
+# the text in the previously focused entry is validated.
+#
+
+#----------------------------------------------------------------------
+# tkFocusGroup_Create --
+#
+# Create a focus group. All the widgets in a focus group must be
+# within the same focus toplevel. Each toplevel can have only
+# one focus group, which is identified by the name of the
+# toplevel widget.
+#
+sub FG_Create {
+ my $t = shift;
+ unless (exists $t->{'_fg'}) {
+ $t->{'_fg'} = 1;
+ $t->bind('<FocusIn>', sub {
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $t->FG_In($w, $Ev->d);
+ }
+ );
+ $t->bind('<FocusOut>', sub {
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $t->FG_Out($w, $Ev->d);
+ }
+ );
+ $t->bind('<Destroy>', sub {
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $t->FG_Destroy($w);
+ }
+ );
+ # <Destroy> is not sufficient to break loops if never mapped.
+ $t->OnDestroy([$t,'FG_Destroy']);
+ }
+}
+
+# tkFocusGroup_BindIn --
+#
+# Add a widget into the "FocusIn" list of the focus group. The $cmd will be
+# called when the widget is focused on by the user.
+#
+sub FG_BindIn {
+ my($t, $w, $cmd) = @_;
+ $t->Error("focus group \"$t\" doesn't exist") unless (exists $t->{'_fg'});
+ $t->{'_FocusIn'}{$w} = Tk::Callback->new($cmd);
+}
+
+# tkFocusGroup_BindOut --
+#
+# Add a widget into the "FocusOut" list of the focus group. The
+# $cmd will be called when the widget loses the focus (User
+# types Tab or click on another widget).
+#
+sub FG_BindOut {
+ my($t, $w, $cmd) = @_;
+ $t->Error("focus group \"$t\" doesn't exist") unless (exists $t->{'_fg'});
+ $t->{'_FocusOut'}{$w} = Tk::Callback->new($cmd);
+}
+
+# tkFocusGroup_Destroy --
+#
+# Cleans up when members of the focus group is deleted, or when the
+# toplevel itself gets deleted.
+#
+sub FG_Destroy {
+ my($t, $w) = @_;
+ if (!defined($w) || $t == $w) {
+ delete $t->{'_fg'};
+ delete $t->{'_focus'};
+ delete $t->{'_FocusOut'};
+ delete $t->{'_FocusIn'};
+ } else {
+ if (exists $t->{'_focus'}) {
+ delete $t->{'_focus'} if ($t->{'_focus'} == $w);
+ }
+ delete $t->{'_FocusIn'}{$w};
+ delete $t->{'_FocusOut'}{$w};
+ }
+}
+
+# tkFocusGroup_In --
+#
+# Handles the <FocusIn> event. Calls the FocusIn command for the newly
+# focused widget in the focus group.
+#
+sub FG_In {
+ my($t, $w, $detail) = @_;
+ if (defined $t->{'_focus'} and $t->{'_focus'} eq $w) {
+ # This is already in focus
+ return;
+ } else {
+ $t->{'_focus'} = $w;
+ $t->{'_FocusIn'}{$w}->Call if exists $t->{'_FocusIn'}{$w};
+ }
+}
+
+# tkFocusGroup_Out --
+#
+# Handles the <FocusOut> event. Checks if this is really a lose
+# focus event, not one generated by the mouse moving out of the
+# toplevel window. Calls the FocusOut command for the widget
+# who loses its focus.
+#
+sub FG_Out {
+ my($t, $w, $detail) = @_;
+ if ($detail ne 'NotifyNonlinear' and $detail ne 'NotifyNonlinearVirtual') {
+ # This is caused by mouse moving out of the window
+ return;
+ }
+ unless (exists $t->{'_FocusOut'}{$w}) {
+ return;
+ } else {
+ $t->{'_FocusOut'}{$w}->Call;
+ delete $t->{'_focus'};
+ }
+}
+
+1;
+
+__END__
diff --git a/Master/xemtex/perl/site/lib/Tk/Widget.pm b/Master/xemtex/perl/site/lib/Tk/Widget.pm
new file mode 100644
index 00000000000..811d9e5e28b
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Widget.pm
@@ -0,0 +1,1298 @@
+# Copyright (c) 1995-1999 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Widget;
+use vars qw($VERSION @DefaultMenuLabels);
+$VERSION = '3.080'; # $Id: //depot/Tk8/Tk/Widget.pm#80 $
+
+require Tk;
+use AutoLoader;
+use strict;
+use Carp;
+use base qw(DynaLoader Tk);
+
+# stubs for 'autoloaded' widget classes
+
+sub Button;
+sub Canvas;
+sub Checkbutton;
+sub Entry;
+sub Frame;
+sub Label;
+sub Listbox;
+sub Menu;
+sub Menubutton;
+sub Message;
+sub Scale;
+sub Scrollbar;
+sub Radiobutton;
+sub Text;
+sub Toplevel;
+
+sub Pixmap;
+sub Bitmap;
+sub Photo;
+
+sub ScrlListbox;
+sub Optionmenu;
+
+sub import
+{
+ my $package = shift;
+ carp 'use Tk::Widget () to pre-load widgets is deprecated' if (@_);
+ my $need;
+ foreach $need (@_)
+ {
+ unless (defined &{$need})
+ {
+ require "Tk/${need}.pm";
+ }
+ croak "Cannot locate $need" unless (defined &{$need});
+ }
+}
+
+@DefaultMenuLabels = qw[~File ~Help];
+
+# Some tidy-ness functions for winfo stuff
+
+sub True { 1 }
+sub False { 0 }
+
+use Tk::Submethods( 'grab' => [qw(current status release -global)],
+ 'focus' => [qw(-force -lastfor)],
+ 'pack' => [qw(configure forget info propagate slaves)],
+ 'grid' => [qw(bbox columnconfigure configure forget info location propagate rowconfigure size slaves)],
+ 'form' => [qw(check configure forget grid info slaves)],
+ 'event' => [qw(add delete generate info)],
+ 'place' => [qw(configure forget info slaves)],
+ 'wm' => [qw(capture release)],
+ 'font' => [qw(actual configure create delete families measure metrics names)]
+ );
+
+BEGIN {
+ # FIXME - these don't work in the compiler
+ *IsMenu = \&False;
+ *IsMenubutton = \&False;
+ *configure_self = \&Tk::configure;
+ *cget_self = \&Tk::cget;
+}
+
+
+
+Direct Tk::Submethods (
+ 'winfo' => [qw(cells class colormapfull depth exists
+ geometry height id ismapped manager name parent reqheight
+ reqwidth rootx rooty screen screencells screendepth screenheight
+ screenmmheight screenmmwidth screenvisual screenwidth visual
+ visualsavailable vrootheight viewable vrootwidth vrootx vrooty
+ width x y toplevel children pixels pointerx pointery pointerxy
+ server fpixels rgb )],
+ 'tk' => [qw(appname scaling)]);
+
+
+sub DESTROY
+{
+ my $w = shift;
+ $w->destroy if ($w->IsWidget);
+}
+
+sub Install
+{
+ # Dynamically loaded widgets add their core commands
+ # to the Tk base class here
+ my ($package,$mw) = @_;
+}
+
+sub ClassInit
+{
+ # Carry out class bindings (or whatever)
+ my ($package,$mw) = @_;
+ return $package;
+}
+
+sub CreateOptions
+{
+ return ();
+}
+
+sub CreateArgs
+{
+ my ($package,$parent,$args) = @_;
+ # Remove from hash %$args any configure-like
+ # options which only apply at create time (e.g. -colormap for Frame),
+ # or which may as well be applied right away
+ # return these as a list of -key => value pairs
+ # Augment same hash with default values for missing mandatory options,
+ # allthough this can be done later in InitObject.
+
+ # Honour -class => if present, we have hacked Tk_ConfigureWidget to
+ # allow -class to be passed to any widget.
+ my @result = ();
+ my $class = delete $args->{'-class'};
+ ($class) = $package =~ /([A-Z][A-Z0-9_]*)$/i unless (defined $class);
+ push(@result, '-class' => "\u$class") if (defined $class);
+ foreach my $opt ($package->CreateOptions)
+ {
+ push(@result, $opt => delete $args->{$opt}) if exists $args->{$opt};
+ }
+ return @result;
+}
+
+sub InitObject
+{
+ my ($obj,$args) = @_;
+ # per object initialization, for example populating
+ # with sub-widgets, adding a few object bindings to augment
+ # inherited class bindings, changing binding tags.
+ # Also another chance to mess with %$args before configure...
+}
+
+sub SetBindtags
+{
+ my ($obj) = @_;
+ $obj->bindtags([ref($obj),$obj,$obj->toplevel,'all']);
+}
+
+sub new
+{
+ local $SIG{'__DIE__'} = \&Carp::croak;
+ my $package = shift;
+ my $parent = shift;
+ $package->InitClass($parent);
+ $parent->BackTrace("Odd number of args to $package->new(...)") unless ((@_ % 2) == 0);
+ my %args = @_;
+ my @args = $package->CreateArgs($parent,\%args);
+ my $cmd = $package->Tk_cmd;
+ my $pname = $parent->PathName;
+ $pname = '' if ($pname eq '.');
+ my $leaf = delete $args{'Name'};
+ if (defined $leaf)
+ {
+ $leaf =~ s/[^a-z0-9_]+/_/ig;
+ $leaf = lcfirst($leaf);
+ }
+ else
+ {
+ ($leaf) = "\L$package" =~ /([a-z][a-z0-9_]*)$/;
+ }
+ my $lname = $pname . '.' . $leaf;
+ # create a hash indexed by leaf name to speed up
+ # creation of a lot of sub-widgets of the same type
+ # e.g. entries in Table
+ my $nhash = $parent->TkHash('_names_');
+ $nhash->{$leaf} = 0 unless (exists $nhash->{$leaf});
+ while (defined ($parent->Widget($lname)))
+ {
+ $lname = $pname . '.' . $leaf . ++$nhash->{$leaf};
+ }
+ my $obj = eval { &$cmd($parent, $lname, @args) };
+ confess $@ if $@;
+ bless $obj,$package;
+ $obj->SetBindtags;
+ my $notice = $parent->can('NoticeChild');
+ $parent->$notice($obj,\%args) if $notice;
+ $obj->InitObject(\%args);
+# ASkludge(\%args,1);
+ $obj->configure(%args) if (%args);
+# ASkludge(\%args,0);
+ return $obj;
+}
+
+sub DelegateFor
+{
+ my ($w,$method) = @_;
+ while(exists $w->{'Delegates'})
+ {
+ my $delegate = $w->{'Delegates'};
+ my $widget = $delegate->{$method};
+ $widget = $delegate->{DEFAULT} unless (defined $widget);
+ $widget = $w->Subwidget($widget) if (defined $widget && !ref $widget);
+ last unless (defined $widget);
+ last if $widget == $w;
+ $w = $widget;
+ }
+ return $w;
+}
+
+sub Delegates
+{
+ my $cw = shift;
+ my $specs = $cw->TkHash('Delegates');
+ while (@_)
+ {
+ my $key = shift;
+ my $val = shift;
+ $specs->{$key} = $val;
+ }
+ return $specs;
+}
+
+sub Construct
+{
+ my ($base,$name) = @_;
+ my $class = (caller(0))[0];
+ no strict 'refs';
+
+ # Hack for broken ->isa in perl5.6.0
+ delete ${"$class\::"}{'::ISA::CACHE::'} if $] == 5.006;
+
+ # Pre ->isa scheme
+ *{$base.'::Is'.$name} = \&False;
+ *{$class.'::Is'.$name} = \&True;
+
+ # DelegateFor trickyness is to allow Frames and other derived things
+ # to force creation in a delegate e.g. a ScrlText with embeded windows
+ # need those windows to be children of the Text to get clipping right
+ # and not of the Frame which contains the Text and the scrollbars.
+ *{$base.'::'."$name"} = sub { $class->new(shift->DelegateFor('Construct'),@_) };
+}
+
+sub IS
+{
+ return (defined $_[1]) && $_[0] == $_[1];
+}
+
+sub _AutoloadTkWidget
+{
+ my ($self,$method) = @_;
+ my $what = "Tk::Widget::$method";
+ unless (defined &$what)
+ {
+ require "Tk/$method.pm";
+ }
+ return $what;
+}
+
+require UNIVERSAL;
+
+sub AUTOLOAD
+{
+ # Take a copy into a 'my' variable so we can recurse
+ my $what = $Tk::Widget::AUTOLOAD;
+ my $save = $@;
+ my $name;
+ # warn "AUTOLOAD $what ".(ref($_[0]) || $_[0])."\n";
+ # Braces used to preserve $1 et al.
+ {
+ my ($pkg,$func) = $what =~ /(.*)::([^:]+)$/;
+ confess("Attempt to load '$what'") unless defined($pkg) && $func =~ /^[\w:]+$/;
+ $pkg =~ s#::#/#g;
+ if (defined($name=$INC{"$pkg.pm"}))
+ {
+ $name =~ s#^(.*)$pkg\.pm$#$1auto/$pkg/$func.al#;
+ }
+ else
+ {
+ $name = "auto/$what.al";
+ $name =~ s#::#/#g;
+ }
+ }
+ # This may fail, catch error and prevent user's __DIE__ handler
+ # from triggering as well...
+ eval {local $SIG{'__DIE__'}; require $name};
+ if ($@)
+ {
+ croak $@ unless ($@ =~ /Can't locate\s+(?:file\s+)?'?\Q$name\E'?/);
+ my($package,$method) = ($what =~ /^(.*)::([^:]*)$/);
+ if (ref $_[0] && !$_[0]->can($method)
+ && $_[0]->can('Delegate')
+ && $method !~ /^(ConfigSpecs|Delegates)/ )
+ {
+ my $delegate = $_[0]->Delegates;
+ if (%$delegate || tied %$delegate)
+ {
+ my $widget = $delegate->{$method};
+ $widget = $delegate->{DEFAULT} unless (defined $widget);
+ if (defined $widget)
+ {
+ my $subwidget = (ref $widget) ? $widget : $_[0]->Subwidget($widget);
+ if (defined $subwidget)
+ {
+ no strict 'refs';
+ # print "AUTOLOAD: $what\n";
+ *{$what} = sub { shift->Delegate($method,@_) };
+ }
+ else
+ {
+ croak "No delegate subwidget '$widget' for $what";
+ }
+ }
+ }
+ }
+ if (!defined(&$what) && $method =~ /^[A-Z]\w+$/)
+ {
+ # Use ->can as ->isa is broken in perl5.6.0
+ my $sub = UNIVERSAL::can($_[0],'_AutoloadTkWidget');
+ if ($sub)
+ {
+ carp "Assuming 'require Tk::$method;'" unless $_[0]->can($method);
+ $what = $_[0]->$sub($method)
+ }
+ }
+ }
+ $@ = $save;
+ $DB::sub = $what; # Tell debugger what is going on...
+ unless (defined &$what)
+ {
+ no strict 'refs';
+ *{$what} = sub { croak("Failed to AUTOLOAD '$what'") };
+ }
+ goto &$what;
+}
+
+sub _Destroyed
+{
+ my $w = shift;
+ my $a = delete $w->{'_Destroy_'};
+ if (ref($a))
+ {
+ while (@$a)
+ {
+ my $ent = pop(@$a);
+ if (ref $ent)
+ {
+ eval {local $SIG{'__DIE__'}; $ent->Call };
+ }
+ else
+ {
+ delete $w->{$ent};
+ }
+ }
+ }
+}
+
+sub _OnDestroy
+{
+ my $w = shift;
+ $w->{'_Destroy_'} = [] unless (exists $w->{'_Destroy_'});
+ push(@{$w->{'_Destroy_'}},@_);
+}
+
+sub OnDestroy
+{
+ my $w = shift;
+ $w->_OnDestroy(Tk::Callback->new(@_));
+}
+
+sub TkHash
+{
+ my ($w,$key) = @_;
+ return $w->{$key} if exists $w->{$key};
+ my $hash = $w->{$key} = {};
+ $w->_OnDestroy($key);
+ return $hash;
+}
+
+sub privateData
+{
+ my $w = shift;
+ my $p = shift || caller;
+ $w->{$p} ||= {};
+}
+
+my @image_types;
+my %image_method;
+
+sub ImageMethod
+{
+ shift if (@_ & 1);
+ while (@_)
+ {
+ my ($name,$method) = splice(@_,0,2);
+ push(@image_types,$name);
+ $image_method{$name} = $method;
+ }
+}
+
+sub Getimage
+{
+ my ($w, $name) = @_;
+ my $mw = $w->MainWindow;
+ croak "Usage \$widget->Getimage('name')" unless defined($name);
+ my $images = ($mw->{'__Images__'} ||= {});
+
+ return $images->{$name} if $images->{$name};
+
+ ImageMethod(xpm => 'Pixmap',
+ gif => 'Photo',
+ ppm => 'Photo',
+ xbm => 'Bitmap' ) unless @image_types;
+
+ foreach my $type (@image_types)
+ {
+ my $method = $image_method{$type};
+ my $file = Tk->findINC( "$name.$type" );
+ next unless( $file && $method );
+ my $sub = $w->can($method);
+ unless (defined &$sub)
+ {
+ require Tk::widgets;
+ Tk::widgets->import($method);
+ }
+ $images->{$name} = $w->$method( -file => $file );
+ return $images->{$name};
+ }
+
+ # Try built-in bitmaps
+ $images->{$name} = $w->Pixmap( -id => $name );
+ return $images->{$name};
+}
+
+sub SaveGrabInfo
+{
+ my $w = shift;
+ $Tk::oldGrab = $w->grabCurrent;
+ if (defined $Tk::oldGrab)
+ {
+ $Tk::grabStatus = $Tk::oldGrab->grabStatus;
+ }
+}
+
+sub grabSave
+{
+ my ($w) = @_;
+ my $grab = $w->grabCurrent;
+ return sub {} if (!defined $grab);
+ my $method = ($grab->grabStatus eq 'global') ? 'grabGlobal' : 'grab';
+ return sub { eval {local $SIG{'__DIE__'}; $grab->$method() } };
+}
+
+sub focusCurrent
+{
+ my ($w) = @_;
+ $w->Tk::focus('-displayof');
+}
+
+sub focusSave
+{
+ my ($w) = @_;
+ my $focus = $w->focusCurrent;
+ return sub {} if (!defined $focus);
+ return sub { eval {local $SIG{'__DIE__'}; $focus->focus } };
+}
+
+# This is supposed to replicate Tk::after behaviour,
+# but does auto-cancel when widget is deleted.
+require Tk::After;
+
+sub afterIdle
+{
+ my $w = shift;
+ return Tk::After->new($w,'idle','once',@_);
+}
+
+sub afterCancel
+{
+ my ($w,$what) = @_;
+ if (defined $what)
+ {
+ return $what->cancel if ref($what);
+ carp "dubious cancel of $what" if 0 && $^W;
+ $w->Tk::after('cancel' => $what);
+ }
+}
+
+sub after
+{
+ my $w = shift;
+ my $t = shift;
+ if (@_)
+ {
+ if ($t ne 'cancel')
+ {
+ require Tk::After;
+ return Tk::After->new($w,$t,'once',@_)
+ }
+ while (@_)
+ {
+ my $what = shift;
+ $w->afterCancel($what);
+ }
+ }
+ else
+ {
+ $w->Tk::after($t);
+ }
+}
+
+sub repeat
+{
+ require Tk::After;
+ my $w = shift;
+ my $t = shift;
+ return Tk::After->new($w,$t,'repeat',@_);
+}
+
+sub FindMenu
+{
+ # default FindMenu is that there is no menu.
+ return undef;
+}
+
+sub XEvent { shift->{'_XEvent_'} }
+
+sub propertyRoot
+{
+ my $w = shift;
+ return $w->property(@_,'root');
+}
+
+# atom, atomname, containing, interps, pathname
+# don't work this way - there is no window arg
+# So we pretend there was an call the C versions from Tk.xs
+
+sub atom { shift->InternAtom(@_) }
+sub atomname { shift->GetAtomName(@_) }
+sub containing { shift->Containing(@_) }
+
+# interps not done yet
+# pathname not done yet
+
+# walk and descendants adapted from Stephen's composite
+# versions as they only use core features they can go here.
+# hierachy is reversed in that descendants calls walk rather
+# than vice versa as this avoids building a list.
+# Walk should possibly be enhanced so allow early termination
+# like '-prune' of find.
+
+sub Walk
+{
+ # Traverse a widget hierarchy while executing a subroutine.
+ my($cw, $proc, @args) = @_;
+ my $subwidget;
+ foreach $subwidget ($cw->children)
+ {
+ $subwidget->Walk($proc,@args);
+ &$proc($subwidget, @args);
+ }
+} # end walk
+
+sub Descendants
+{
+ # Return a list of widgets derived from a parent widget and all its
+ # descendants of a particular class.
+ # If class is not passed returns the entire widget hierarchy.
+
+ my($widget, $class) = @_;
+ my(@widget_tree) = ();
+
+ $widget->Walk(
+ sub { my ($widget,$list,$class) = @_;
+ push(@$list, $widget) if (!defined($class) or $class eq $widget->class);
+ },
+ \@widget_tree, $class
+ );
+ return @widget_tree;
+}
+
+sub Palette
+{
+ my $w = shift->MainWindow;
+ unless (exists $w->{_Palette_})
+ {
+ my %Palette = ();
+ my $c = $w->Checkbutton();
+ my $e = $w->Entry();
+ my $s = $w->Scrollbar();
+ $Palette{'activeBackground'} = ($c->configure('-activebackground'))[3] ;
+ $Palette{'activeForeground'} = ($c->configure('-activeforeground'))[3];
+ $Palette{'background'} = ($c->configure('-background'))[3];
+ $Palette{'disabledForeground'} = ($c->configure('-disabledforeground'))[3];
+ $Palette{'foreground'} = ($c->configure('-foreground'))[3];
+ $Palette{'highlightBackground'} = ($c->configure('-highlightbackground'))[3];
+ $Palette{'highlightColor'} = ($c->configure('-highlightcolor'))[3];
+ $Palette{'insertBackground'} = ($e->configure('-insertbackground'))[3];
+ $Palette{'selectColor'} = ($c->configure('-selectcolor'))[3];
+ $Palette{'selectBackground'} = ($e->configure('-selectbackground'))[3];
+ $Palette{'selectForeground'} = ($e->configure('-selectforeground'))[3];
+ $Palette{'troughColor'} = ($s->configure('-troughcolor'))[3];
+ $c->destroy;
+ $e->destroy;
+ $s->destroy;
+ $w->{_Palette_} = \%Palette;
+ }
+ return $w->{_Palette_};
+}
+
+# tk_setPalette --
+# Changes the default color scheme for a Tk application by setting
+# default colors in the option database and by modifying all of the
+# color options for existing widgets that have the default value.
+#
+# Arguments:
+# The arguments consist of either a single color name, which
+# will be used as the new background color (all other colors will
+# be computed from this) or an even number of values consisting of
+# option names and values. The name for an option is the one used
+# for the option database, such as activeForeground, not -activeforeground.
+sub setPalette
+{
+ my $w = shift->MainWindow;
+ my %new = (@_ == 1) ? (background => $_[0]) : @_;
+ my $priority = delete($new{'priority'}) || 'widgetDefault';
+
+ # Create an array that has the complete new palette. If some colors
+ # aren't specified, compute them from other colors that are specified.
+
+ die 'must specify a background color' if (!exists $new{background});
+ $new{'foreground'} = 'black' unless (exists $new{foreground});
+ my @bg = $w->rgb($new{'background'});
+ my @fg = $w->rgb($new{'foreground'});
+ my $darkerBg = sprintf('#%02x%02x%02x',9*$bg[0]/2560,9*$bg[1]/2560,9*$bg[2]/2560);
+ foreach my $i ('activeForeground','insertBackground','selectForeground','highlightColor')
+ {
+ $new{$i} = $new{'foreground'} unless (exists $new{$i});
+ }
+ unless (exists $new{'disabledForeground'})
+ {
+ $new{'disabledForeground'} = sprintf('#%02x%02x%02x',(3*$bg[0]+$fg[0])/1024,(3*$bg[1]+$fg[1])/1024,(3*$bg[2]+$fg[2])/1024);
+ }
+ $new{'highlightBackground'} = $new{'background'} unless (exists $new{'highlightBackground'});
+
+ unless (exists $new{'activeBackground'})
+ {
+ my @light;
+ # Pick a default active background that is lighter than the
+ # normal background. To do this, round each color component
+ # up by 15% or 1/3 of the way to full white, whichever is
+ # greater.
+ foreach my $i (0, 1, 2)
+ {
+ $light[$i] = $bg[$i]/256;
+ my $inc1 = $light[$i]*15/100;
+ my $inc2 = (255-$light[$i])/3;
+ if ($inc1 > $inc2)
+ {
+ $light[$i] += $inc1
+ }
+ else
+ {
+ $light[$i] += $inc2
+ }
+ $light[$i] = 255 if ($light[$i] > 255);
+ }
+ $new{'activeBackground'} = sprintf('#%02x%02x%02x',@light);
+ }
+ $new{'selectBackground'} = $darkerBg unless (exists $new{'selectBackground'});
+ $new{'troughColor'} = $darkerBg unless (exists $new{'troughColor'});
+ $new{'selectColor'} = '#b03060' unless (exists $new{'selectColor'});
+
+ # Before doing this, make sure that the Tk::Palette variable holds
+ # the default values of all options, so that tkRecolorTree can
+ # be sure to only change options that have their default values.
+ # If the variable exists, then it is already correct (it was created
+ # the last time this procedure was invoked). If the variable
+ # doesn't exist, fill it in using the defaults from a few widgets.
+ my $Palette = $w->Palette;
+
+ # Walk the widget hierarchy, recoloring all existing windows.
+ $w->RecolorTree(\%new);
+ # Change the option database so that future windows will get the
+ # same colors.
+ foreach my $option (keys %new)
+ {
+ $w->option('add',"*$option",$new{$option},$priority);
+ # Save the options in the global variable Tk::Palette, for use the
+ # next time we change the options.
+ $Palette->{$option} = $new{$option};
+ }
+}
+
+# tkRecolorTree --
+# This procedure changes the colors in a window and all of its
+# descendants, according to information provided by the colors
+# argument. It only modifies colors that have their default values
+# as specified by the Tk::Palette variable.
+#
+# Arguments:
+# w - The name of a window. This window and all its
+# descendants are recolored.
+# colors - The name of an array variable in the caller,
+# which contains color information. Each element
+# is named after a widget configuration option, and
+# each value is the value for that option.
+sub RecolorTree
+{
+ my ($w,$colors) = @_;
+ local ($@);
+ my $Palette = $w->Palette;
+ foreach my $dbOption (keys %$colors)
+ {
+ my $option = "-\L$dbOption";
+ my $value;
+ eval {local $SIG{'__DIE__'}; $value = $w->cget($option) };
+ if (defined $value)
+ {
+ if ($value eq $Palette->{$dbOption})
+ {
+ $w->configure($option,$colors->{$dbOption});
+ }
+ }
+ }
+ foreach my $child ($w->children)
+ {
+ $child->RecolorTree($colors);
+ }
+}
+# tkDarken --
+# Given a color name, computes a new color value that darkens (or
+# brightens) the given color by a given percent.
+#
+# Arguments:
+# color - Name of starting color.
+# perecent - Integer telling how much to brighten or darken as a
+# percent: 50 means darken by 50%, 110 means brighten
+# by 10%.
+sub Darken
+{
+ my ($w,$color,$percent) = @_;
+ my @l = $w->rgb($color);
+ my $red = $l[0]/256;
+ my $green = $l[1]/256;
+ my $blue = $l[2]/256;
+ $red = int($red*$percent/100);
+ $red = 255 if ($red > 255);
+ $green = int($green*$percent/100);
+ $green = 255 if ($green > 255);
+ $blue = int($blue*$percent/100);
+ $blue = 255 if ($blue > 255);
+ sprintf('#%02x%02x%02x',$red,$green,$blue)
+}
+# tk_bisque --
+# Reset the Tk color palette to the old "bisque" colors.
+#
+# Arguments:
+# None.
+sub bisque
+{
+ shift->setPalette('activeBackground' => '#e6ceb1',
+ 'activeForeground' => 'black',
+ 'background' => '#ffe4c4',
+ 'disabledForeground' => '#b0b0b0',
+ 'foreground' => 'black',
+ 'highlightBackground' => '#ffe4c4',
+ 'highlightColor' => 'black',
+ 'insertBackground' => 'black',
+ 'selectColor' => '#b03060',
+ 'selectBackground' => '#e6ceb1',
+ 'selectForeground' => 'black',
+ 'troughColor' => '#cdb79e'
+ );
+}
+
+sub PrintConfig
+{
+ require Tk::Pretty;
+ my ($w) = (@_);
+ my $c;
+ foreach $c ($w->configure)
+ {
+ print Tk::Pretty::Pretty(@$c),"\n";
+ }
+}
+
+sub BusyRecurse
+{
+ my ($restore,$w,$cursor,$recurse,$top) = @_;
+ my $c = $w->cget('-cursor');
+ my @tags = $w->bindtags;
+ if ($top || defined($c))
+ {
+ push(@$restore, sub { return unless Tk::Exists($w); $w->configure(-cursor => $c); $w->bindtags(\@tags) });
+ $w->configure(-cursor => $cursor);
+ }
+ else
+ {
+ push(@$restore, sub { return unless Tk::Exists($w); $w->bindtags(\@tags) });
+ }
+ $w->bindtags(['Busy',@tags]);
+ if ($recurse)
+ {
+ foreach my $child ($w->children)
+ {
+ BusyRecurse($restore,$child,$cursor,1,0);
+ }
+ }
+ return $restore;
+}
+
+sub Busy
+{
+ my ($w,%args) = @_;
+ return unless $w->viewable;
+ my $cursor = delete $args{'-cursor'};
+ my $recurse = delete $args{'-recurse'};
+ $cursor = 'watch' unless defined $cursor;
+ unless (exists $w->{'Busy'})
+ {
+ my @old = ($w->grabSave);
+ my $key;
+ my @config;
+ foreach $key (keys %args)
+ {
+ push(@config,$key => $w->Tk::cget($key));
+ }
+ if (@config)
+ {
+ push(@old, sub { $w->Tk::configure(@config) });
+ $w->Tk::configure(%args);
+ }
+ unless ($w->Tk::bind('Busy'))
+ {
+ $w->Tk::bind('Busy','<Any-KeyPress>',[_busy => 1]);
+ $w->Tk::bind('Busy','<Any-KeyRelease>',[_busy => 0]);
+ $w->Tk::bind('Busy','<Any-ButtonPress>',[_busy => 1]);
+ $w->Tk::bind('Busy','<Any-ButtonRelease>',[_busy => 0]);
+ $w->Tk::bind('Busy','<Any-Motion>',[_busy => 0]);
+ }
+ $w->{'Busy'} = BusyRecurse(\@old,$w,$cursor,$recurse,1);
+ }
+ my $g = $w->grabCurrent;
+ if (defined $g)
+ {
+ # warn "$g has the grab";
+ $g->grabRelease;
+ }
+ $w->update;
+ eval {local $SIG{'__DIE__'}; $w->grab };
+ $w->update;
+}
+
+sub _busy
+{
+ my ($w,$f) = @_;
+ $w->bell if $f;
+ $w->break;
+}
+
+sub Unbusy
+{
+ my ($w) = @_;
+ $w->update;
+ $w->grabRelease;
+ my $old = delete $w->{'Busy'};
+ if (defined $old)
+ {
+ local $SIG{'__DIE__'};
+ eval { &{pop(@$old)} } while (@$old);
+ }
+ $w->update;
+}
+
+sub waitVisibility
+{
+ my ($w) = shift;
+ $w->tkwait('visibility',$w);
+}
+
+sub waitVariable
+{
+ my ($w) = shift;
+ $w->tkwait('variable',@_);
+}
+
+sub waitWindow
+{
+ my ($w) = shift;
+ $w->tkwait('window',$w);
+}
+
+sub EventWidget
+{
+ my ($w) = @_;
+ return $w->{'_EventWidget_'};
+}
+
+sub Popwidget
+{
+ my ($ew,$method,$w,@args) = @_;
+ $w->{'_EventWidget_'} = $ew;
+ $w->$method(@args);
+}
+
+sub ColorOptions
+{
+ my ($w,$args) = @_;
+ my $opt;
+ $args = {} unless (defined $args);
+ foreach $opt (qw(-foreground -background -disabledforeground
+ -activebackground -activeforeground
+ ))
+ {
+ $args->{$opt} = $w->cget($opt) unless (exists $args->{$opt})
+ }
+ return (wantarray) ? %$args : $args;
+}
+
+sub XscrollBind
+{
+ my ($mw,$class) = @_;
+ $mw->bind($class,'<Left>', ['xview','scroll',-1,'units']);
+ $mw->bind($class,'<Control-Left>', ['xview','scroll',-1,'pages']);
+ $mw->bind($class,'<Control-Prior>',['xview','scroll',-1,'pages']);
+ $mw->bind($class,'<Right>', ['xview','scroll',1,'units']);
+ $mw->bind($class,'<Control-Right>',['xview','scroll',1,'pages']);
+ $mw->bind($class,'<Control-Next>', ['xview','scroll',1,'pages']);
+
+ $mw->bind($class,'<Home>', ['xview','moveto',0]);
+ $mw->bind($class,'<End>', ['xview','moveto',1]);
+}
+
+sub PriorNextBind
+{
+ my ($mw,$class) = @_;
+ $mw->bind($class,'<Next>', ['yview','scroll',1,'pages']);
+ $mw->bind($class,'<Prior>', ['yview','scroll',-1,'pages']);
+}
+
+sub YscrollBind
+{
+ my ($mw,$class) = @_;
+ $mw->PriorNextBind($class);
+ $mw->bind($class,'<Up>', ['yview','scroll',-1,'units']);
+ $mw->bind($class,'<Down>', ['yview','scroll',1,'units']);
+}
+
+sub XYscrollBind
+{
+ my ($mw,$class) = @_;
+ $mw->YscrollBind($class);
+ $mw->XscrollBind($class);
+}
+
+sub ScrlListbox
+{
+ my $parent = shift;
+ return $parent->Scrolled('Listbox',-scrollbars => 'w', @_);
+}
+
+sub AddBindTag
+{
+ my ($w,$tag) = @_;
+ my $t;
+ my @tags = $w->bindtags;
+ foreach $t (@tags)
+ {
+ return if $t eq $tag;
+ }
+ $w->bindtags([@tags,$tag]);
+}
+
+sub Callback
+{
+ my $w = shift;
+ my $name = shift;
+ my $cb = $w->cget($name);
+ if (defined $cb)
+ {
+ return $cb->Call(@_) if (ref $cb);
+ return $w->$cb(@_);
+ }
+ return (wantarray) ? () : undef;
+}
+
+sub packAdjust
+{
+# print 'packAdjust(',join(',',@_),")\n";
+ require Tk::Adjuster;
+ my ($w,%args) = @_;
+ my $delay = delete($args{'-delay'});
+ $delay = 1 unless (defined $delay);
+ $w->pack(%args);
+ %args = $w->packInfo;
+ my $adj = Tk::Adjuster->new($args{'-in'},
+ -widget => $w, -delay => $delay, -side => $args{'-side'});
+ $adj->packed($w,%args);
+ return $w;
+}
+
+sub gridAdjust
+{
+ require Tk::Adjuster;
+ my ($w,%args) = @_;
+ my $delay = delete($args{'-delay'});
+ $delay = 1 unless (defined $delay);
+ $w->grid(%args);
+ %args = $w->gridInfo;
+ my $adj = Tk::Adjuster->new($args{'-in'},-widget => $w, -delay => $delay);
+ $adj->gridded($w,%args);
+ return $w;
+}
+
+sub place
+{
+ local $SIG{'__DIE__'} = \&Carp::croak;
+ my $w = shift;
+ if (@_ && $_[0] =~ /^(?:configure|forget|info|slaves)$/x)
+ {
+ $w->Tk::place(@_);
+ }
+ else
+ {
+ # Two things going on here:
+ # 1. Add configure on the front so that we can drop leading '-'
+ $w->Tk::place('configure',@_);
+ # 2. Return the widget rather than nothing
+ return $w;
+ }
+}
+
+sub pack
+{
+ local $SIG{'__DIE__'} = \&Carp::croak;
+ my $w = shift;
+ if (@_ && $_[0] =~ /^(?:configure|forget|info|propagate|slaves)$/x)
+ {
+ # maybe array/scalar context issue with slaves
+ $w->Tk::pack(@_);
+ }
+ else
+ {
+ # Two things going on here:
+ # 1. Add configure on the front so that we can drop leading '-'
+ $w->Tk::pack('configure',@_);
+ # 2. Return the widget rather than nothing
+ return $w;
+ }
+}
+
+sub grid
+{
+ local $SIG{'__DIE__'} = \&Carp::croak;
+ my $w = shift;
+ if (@_ && $_[0] =~ /^(?:bbox|columnconfigure|configure|forget|info|location|propagate|rowconfigure|size|slaves)$/x)
+ {
+ my $opt = shift;
+ Tk::grid($opt,$w,@_);
+ }
+ else
+ {
+ # Two things going on here:
+ # 1. Add configure on the front so that we can drop leading '-'
+ Tk::grid('configure',$w,@_);
+ # 2. Return the widget rather than nothing
+ return $w;
+ }
+}
+
+sub form
+{
+ local $SIG{'__DIE__'} = \&Carp::croak;
+ my $w = shift;
+ if (@_ && $_[0] =~ /^(?:configure|check|forget|grid|info|slaves)$/x)
+ {
+ $w->Tk::form(@_);
+ }
+ else
+ {
+ # Two things going on here:
+ # 1. Add configure on the front so that we can drop leading '-'
+ $w->Tk::form('configure',@_);
+ # 2. Return the widget rather than nothing
+ return $w;
+ }
+}
+
+sub Scrolled
+{
+ my ($parent,$kind,%args) = @_;
+ # Find args that are Frame create time args
+ my @args = Tk::Frame->CreateArgs($parent,\%args);
+ my $name = delete $args{'Name'};
+ push(@args,'Name' => $name) if (defined $name);
+ my $cw = $parent->Frame(@args);
+ @args = ();
+ # Now remove any args that Frame can handle
+ foreach my $k ('-scrollbars',map($_->[0],$cw->configure))
+ {
+ push(@args,$k,delete($args{$k})) if (exists $args{$k})
+ }
+ # Anything else must be for target widget - pass at widget create time
+ my $w = $cw->$kind(%args);
+ # Now re-set %args to be ones Frame can handle
+ %args = @args;
+ $cw->ConfigSpecs('-scrollbars' => ['METHOD','scrollbars','Scrollbars','se'],
+ '-background' => [$w,'background','Background'],
+ '-foreground' => [$w,'foreground','Foreground'],
+ );
+ $cw->AddScrollbars($w);
+ $cw->Default("\L$kind" => $w);
+ $cw->Delegates('bind' => $w, 'bindtags' => $w, 'menu' => $w);
+ $cw->ConfigDefault(\%args);
+ $cw->configure(%args);
+ return $cw;
+}
+
+sub Populate
+{
+ my ($cw,$args) = @_;
+}
+
+sub ForwardEvent
+{
+ my $self = shift;
+ my $to = shift;
+ $to->PassEvent($self->XEvent);
+}
+
+# Save / Return abstract event type as in Tix.
+sub EventType
+{
+ my $w = shift;
+ $w->{'_EventType_'} = $_[0] if @_;
+ return $w->{'_EventType_'};
+}
+
+sub PostPopupMenu
+{
+ my ($w, $X, $Y) = @_;
+ if (@_ < 3)
+ {
+ my $e = $w->XEvent;
+ $X = $e->X;
+ $Y = $e->Y;
+ }
+ my $menu = $w->menu;
+ $menu->Post($X,$Y) if defined $menu;
+}
+
+sub FillMenu
+{
+ my ($w,$menu,@labels) = @_;
+ foreach my $lab (@labels)
+ {
+ my $method = $lab.'MenuItems';
+ $method =~ s/~//g;
+ $method =~ s/[\s-]+/_/g;
+ if ($w->can($method))
+ {
+ $menu->Menubutton(-label => $lab, -tearoff => 0, -menuitems => $w->$method());
+ }
+ }
+ return $menu;
+}
+
+sub menu
+{
+ my ($w,$menu) = @_;
+ if (@_ > 1)
+ {
+ $w->_OnDestroy('_MENU_') unless exists $w->{'_MENU_'};
+ $w->{'_MENU_'} = $menu;
+ }
+ return unless defined wantarray;
+ unless (exists $w->{'_MENU_'})
+ {
+ $w->_OnDestroy('_MENU_');
+ $w->{'_MENU_'} = $menu = $w->Menu(-tearoff => 0);
+ $w->FillMenu($menu,$w->MenuLabels);
+ }
+ return $w->{'_MENU_'};
+}
+
+sub MenuLabels
+{
+ return @DefaultMenuLabels;
+}
+
+sub FileMenuItems
+{
+ my ($w) = @_;
+ return [ ["command"=>'E~xit', -command => [ $w, 'WmDeleteWindow']]];
+}
+
+sub WmDeleteWindow
+{
+ shift->toplevel->WmDeleteWindow
+}
+
+sub BalloonInfo
+{
+ my ($widget,$balloon,$X,$Y,@opt) = @_;
+ foreach my $opt (@opt)
+ {
+ my $info = $balloon->GetOption($opt,$widget);
+ return $info if defined $info;
+ }
+}
+
+
+
+1;
+__END__
+
+sub ASkludge
+{
+ my ($hash,$sense) = @_;
+ foreach my $key (%$hash)
+ {
+ if ($key =~ /-.*variable/ && ref($hash->{$key}) eq 'SCALAR')
+ {
+ if ($sense)
+ {
+ my $val = ${$hash->{$key}};
+ require Tie::Scalar;
+ tie ${$hash->{$key}},'Tie::StdScalar';
+ ${$hash->{$key}} = $val;
+ }
+ else
+ {
+ untie ${$hash->{$key}};
+ }
+ }
+ }
+}
+
+
+
+# clipboardKeysyms --
+# This procedure is invoked to identify the keys that correspond to
+# the "copy", "cut", and "paste" functions for the clipboard.
+#
+# Arguments:
+# copy - Name of the key (keysym name plus modifiers, if any,
+# such as "Meta-y") used for the copy operation.
+# cut - Name of the key used for the cut operation.
+# paste - Name of the key used for the paste operation.
+#
+# This method is obsolete use clipboardOperations and abstract
+# event types instead. See Clipboard.pm and Mainwindow.pm
+
+sub clipboardKeysyms
+{
+ my @class = ();
+ my $mw = shift;
+ if (ref $mw)
+ {
+ $mw = $mw->DelegateFor('bind');
+ }
+ else
+ {
+ push(@class,$mw);
+ $mw = shift;
+ }
+ if (@_)
+ {
+ my $copy = shift;
+ $mw->Tk::bind(@class,"<$copy>",'clipboardCopy') if (defined $copy);
+ }
+ if (@_)
+ {
+ my $cut = shift;
+ $mw->Tk::bind(@class,"<$cut>",'clipboardCut') if (defined $cut);
+ }
+ if (@_)
+ {
+ my $paste = shift;
+ $mw->Tk::bind(@class,"<$paste>",'clipboardPaste') if (defined $paste);
+ }
+}
+
+sub pathname
+{
+ my ($w,$id) = @_;
+ my $x = $w->winfo('pathname',-displayof => oct($id));
+ return $x->PathName;
+}
+
+
diff --git a/Master/xemtex/perl/site/lib/Tk/Wm.pm b/Master/xemtex/perl/site/lib/Tk/Wm.pm
new file mode 100644
index 00000000000..a148987f350
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Wm.pm
@@ -0,0 +1,165 @@
+# Copyright (c) 1995-1999 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Wm;
+use AutoLoader;
+
+require Tk::Widget;
+*AUTOLOAD = \&Tk::Widget::AUTOLOAD;
+
+use strict qw(vars);
+
+# There are issues with this stuff now we have Tix's wm release/capture
+# as toplevel-ness is now dynamic.
+
+
+use vars qw($VERSION);
+$VERSION = '3.023'; # $Id: //depot/Tk8/Tk/Wm.pm#23 $
+
+use Tk::Submethods ( 'wm' => [qw(grid tracing)] );
+
+Direct Tk::Submethods ('wm' => [qw(aspect client colormapwindows command
+ deiconify focusmodel frame geometry group
+ iconbitmap iconify iconimage iconmask iconname
+ iconwindow maxsize minsize overrideredirect positionfrom
+ protocol resizable saveunder sizefrom state title transient
+ withdraw wrapper)]);
+
+sub SetBindtags
+{
+ my ($obj) = @_;
+ $obj->bindtags([ref($obj),$obj,'all']);
+}
+
+sub Populate
+{
+ my ($cw,$args) = @_;
+ $cw->ConfigSpecs('-overanchor' => ['PASSIVE',undef,undef,undef],
+ '-popanchor' => ['PASSIVE',undef,undef,undef],
+ '-popover' => ['PASSIVE',undef,undef,undef]
+ );
+}
+
+sub MoveResizeWindow
+{
+ my ($w,$x,$y,$width,$height) = @_;
+ $w->withdraw;
+ $w->geometry($width.'x'.$height);
+ $w->MoveToplevelWindow($x,$y);
+ $w->deiconify;
+}
+
+sub WmDeleteWindow
+{
+ my ($w) = @_;
+ my $cb = $w->protocol('WM_DELETE_WINDOW');
+ if (defined $cb)
+ {
+ $cb->Call;
+ }
+ else
+ {
+ $w->destroy;
+ }
+}
+
+
+1;
+
+__END__
+
+
+sub Post
+{
+ my ($w,$X,$Y) = @_;
+ $X = int($X);
+ $Y = int($Y);
+ $w->positionfrom('user');
+ # $w->geometry("+$X+$Y");
+ $w->MoveToplevelWindow($X,$Y);
+ $w->deiconify;
+ $w->raise;
+}
+
+sub AnchorAdjust
+{
+ my ($anchor,$X,$Y,$w,$h) = @_;
+ $anchor = 'c' unless (defined $anchor);
+ $Y += ($anchor =~ /s/) ? $h : ($anchor =~ /n/) ? 0 : $h/2;
+ $X += ($anchor =~ /e/) ? $w : ($anchor =~ /w/) ? 0 : $w/2;
+ return ($X,$Y);
+}
+
+sub Popup
+{
+ my $w = shift;
+ $w->configure(@_) if @_;
+ $w->idletasks;
+ my ($mw,$mh) = ($w->reqwidth,$w->reqheight);
+ my ($rx,$ry,$rw,$rh) = (0,0,0,0);
+ my $base = $w->cget('-popover');
+ my $outside = 0;
+ if (defined $base)
+ {
+ if ($base eq 'cursor')
+ {
+ ($rx,$ry) = $w->pointerxy;
+ }
+ else
+ {
+ $rx = $base->rootx;
+ $ry = $base->rooty;
+ $rw = $base->Width;
+ $rh = $base->Height;
+ }
+ }
+ else
+ {
+ my $sc = ($w->parent) ? $w->parent->toplevel : $w;
+ $rx = -$sc->vrootx;
+ $ry = -$sc->vrooty;
+ $rw = $w->screenwidth;
+ $rh = $w->screenheight;
+ }
+ my ($X,$Y) = AnchorAdjust($w->cget('-overanchor'),$rx,$ry,$rw,$rh);
+ ($X,$Y) = AnchorAdjust($w->cget('-popanchor'),$X,$Y,-$mw,-$mh);
+ $w->Post($X,$Y);
+ $w->waitVisibility;
+}
+
+sub FullScreen
+{
+ my $w = shift;
+ my $over = (@_) ? shift : 0;
+ my $width = $w->screenwidth;
+ my $height = $w->screenheight;
+ $w->GeometryRequest($width,$height);
+ $w->overrideredirect($over & 1);
+ $w->Post(0,0);
+ $w->update;
+ if ($over & 2)
+ {
+ my $x = $w->rootx;
+ my $y = $w->rooty;
+ $width -= 2*$x;
+ $height -= $x + $y;
+ $w->GeometryRequest($width,$height);
+ $w->update;
+ }
+}
+
+sub iconposition
+{
+ my $w = shift;
+ if (@_ == 1)
+ {
+ return $w->wm('iconposition',$1,$2) if $_[0] =~ /^(\d+),(\d+)$/;
+ if ($_[0] =~ /^([+-])(\d+)([+-])(\d+)$/)
+ {
+ my $x = ($1 eq '-') ? $w->screenwidth-$2 : $2;
+ my $y = ($3 eq '-') ? $w->screenheight-$4 : $4;
+ return $w->wm('iconposition',$x,$y);
+ }
+ }
+ $w->wm('iconposition',@_);
+}
diff --git a/Master/xemtex/perl/site/lib/Tk/X.pm b/Master/xemtex/perl/site/lib/Tk/X.pm
new file mode 100644
index 00000000000..856673d4bbe
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/X.pm
@@ -0,0 +1,398 @@
+package Tk::X;
+
+use strict;
+use Carp;
+use vars qw($VERSION @EXPORT $AUTOLOAD);
+$VERSION = '3.016'; # $Id: //depot/Tk8/Xlib/X/X.pm#16 $
+use Tk qw($XS_VERSION);
+
+require Exporter;
+require DynaLoader;
+require AutoLoader;
+
+
+use base qw(Exporter DynaLoader);
+# Items to export into callers namespace by default. Note: do not export
+# names by default without a very good reason. Use EXPORT_OK instead.
+# Do not simply export all your public functions/methods/constants.
+@EXPORT = qw(
+ Above
+ AllTemporary
+ AllocAll
+ AllocNone
+ AllowExposures
+ AlreadyGrabbed
+ Always
+ AnyButton
+ AnyKey
+ AnyModifier
+ AnyPropertyType
+ ArcChord
+ ArcPieSlice
+ AsyncBoth
+ AsyncKeyboard
+ AsyncPointer
+ AutoRepeatModeDefault
+ AutoRepeatModeOff
+ AutoRepeatModeOn
+ BadAccess
+ BadAlloc
+ BadAtom
+ BadColor
+ BadCursor
+ BadDrawable
+ BadFont
+ BadGC
+ BadIDChoice
+ BadImplementation
+ BadLength
+ BadMatch
+ BadName
+ BadPixmap
+ BadRequest
+ BadValue
+ BadWindow
+ Below
+ BottomIf
+ Button1
+ Button1Mask
+ Button1MotionMask
+ Button2
+ Button2Mask
+ Button2MotionMask
+ Button3
+ Button3Mask
+ Button3MotionMask
+ Button4
+ Button4Mask
+ Button4MotionMask
+ Button5
+ Button5Mask
+ Button5MotionMask
+ ButtonMotionMask
+ ButtonPress
+ ButtonPressMask
+ ButtonRelease
+ ButtonReleaseMask
+ CWBackPixel
+ CWBackPixmap
+ CWBackingPixel
+ CWBackingPlanes
+ CWBackingStore
+ CWBitGravity
+ CWBorderPixel
+ CWBorderPixmap
+ CWBorderWidth
+ CWColormap
+ CWCursor
+ CWDontPropagate
+ CWEventMask
+ CWHeight
+ CWOverrideRedirect
+ CWSaveUnder
+ CWSibling
+ CWStackMode
+ CWWidth
+ CWWinGravity
+ CWX
+ CWY
+ CapButt
+ CapNotLast
+ CapProjecting
+ CapRound
+ CenterGravity
+ CirculateNotify
+ CirculateRequest
+ ClientMessage
+ ClipByChildren
+ ColormapChangeMask
+ ColormapInstalled
+ ColormapNotify
+ ColormapUninstalled
+ Complex
+ ConfigureNotify
+ ConfigureRequest
+ ControlMapIndex
+ ControlMask
+ Convex
+ CoordModeOrigin
+ CoordModePrevious
+ CopyFromParent
+ CreateNotify
+ CurrentTime
+ CursorShape
+ DefaultBlanking
+ DefaultExposures
+ DestroyAll
+ DestroyNotify
+ DirectColor
+ DisableAccess
+ DisableScreenInterval
+ DisableScreenSaver
+ DoBlue
+ DoGreen
+ DoRed
+ DontAllowExposures
+ DontPreferBlanking
+ EastGravity
+ EnableAccess
+ EnterNotify
+ EnterWindowMask
+ EvenOddRule
+ Expose
+ ExposureMask
+ FamilyChaos
+ FamilyDECnet
+ FamilyInternet
+ FillOpaqueStippled
+ FillSolid
+ FillStippled
+ FillTiled
+ FirstExtensionError
+ FocusChangeMask
+ FocusIn
+ FocusOut
+ FontChange
+ FontLeftToRight
+ FontRightToLeft
+ ForgetGravity
+ GCArcMode
+ GCBackground
+ GCCapStyle
+ GCClipMask
+ GCClipXOrigin
+ GCClipYOrigin
+ GCDashList
+ GCDashOffset
+ GCFillRule
+ GCFillStyle
+ GCFont
+ GCForeground
+ GCFunction
+ GCGraphicsExposures
+ GCJoinStyle
+ GCLastBit
+ GCLineStyle
+ GCLineWidth
+ GCPlaneMask
+ GCStipple
+ GCSubwindowMode
+ GCTile
+ GCTileStipXOrigin
+ GCTileStipYOrigin
+ GXand
+ GXandInverted
+ GXandReverse
+ GXclear
+ GXcopy
+ GXcopyInverted
+ GXequiv
+ GXinvert
+ GXnand
+ GXnoop
+ GXnor
+ GXor
+ GXorInverted
+ GXorReverse
+ GXset
+ GXxor
+ GrabFrozen
+ GrabInvalidTime
+ GrabModeAsync
+ GrabModeSync
+ GrabNotViewable
+ GrabSuccess
+ GraphicsExpose
+ GravityNotify
+ GrayScale
+ HostDelete
+ HostInsert
+ IncludeInferiors
+ InputFocus
+ InputOnly
+ InputOutput
+ IsUnmapped
+ IsUnviewable
+ IsViewable
+ JoinBevel
+ JoinMiter
+ JoinRound
+ KBAutoRepeatMode
+ KBBellDuration
+ KBBellPercent
+ KBBellPitch
+ KBKey
+ KBKeyClickPercent
+ KBLed
+ KBLedMode
+ KeyPress
+ KeyPressMask
+ KeyRelease
+ KeyReleaseMask
+ KeymapNotify
+ KeymapStateMask
+ LASTEvent
+ LSBFirst
+ LastExtensionError
+ LeaveNotify
+ LeaveWindowMask
+ LedModeOff
+ LedModeOn
+ LineDoubleDash
+ LineOnOffDash
+ LineSolid
+ LockMapIndex
+ LockMask
+ LowerHighest
+ MSBFirst
+ MapNotify
+ MapRequest
+ MappingBusy
+ MappingFailed
+ MappingKeyboard
+ MappingModifier
+ MappingNotify
+ MappingPointer
+ MappingSuccess
+ Mod1MapIndex
+ Mod1Mask
+ Mod2MapIndex
+ Mod2Mask
+ Mod3MapIndex
+ Mod3Mask
+ Mod4MapIndex
+ Mod4Mask
+ Mod5MapIndex
+ Mod5Mask
+ MotionNotify
+ NoEventMask
+ NoExpose
+ NoSymbol
+ Nonconvex
+ None
+ NorthEastGravity
+ NorthGravity
+ NorthWestGravity
+ NotUseful
+ NotifyAncestor
+ NotifyDetailNone
+ NotifyGrab
+ NotifyHint
+ NotifyInferior
+ NotifyNonlinear
+ NotifyNonlinearVirtual
+ NotifyNormal
+ NotifyPointer
+ NotifyPointerRoot
+ NotifyUngrab
+ NotifyVirtual
+ NotifyWhileGrabbed
+ Opposite
+ OwnerGrabButtonMask
+ ParentRelative
+ PlaceOnBottom
+ PlaceOnTop
+ PointerMotionHintMask
+ PointerMotionMask
+ PointerRoot
+ PointerWindow
+ PreferBlanking
+ PropModeAppend
+ PropModePrepend
+ PropModeReplace
+ PropertyChangeMask
+ PropertyDelete
+ PropertyNewValue
+ PropertyNotify
+ PseudoColor
+ RaiseLowest
+ ReparentNotify
+ ReplayKeyboard
+ ReplayPointer
+ ResizeRedirectMask
+ ResizeRequest
+ RetainPermanent
+ RetainTemporary
+ RevertToNone
+ RevertToParent
+ RevertToPointerRoot
+ ScreenSaverActive
+ ScreenSaverReset
+ SelectionClear
+ SelectionNotify
+ SelectionRequest
+ SetModeDelete
+ SetModeInsert
+ ShiftMapIndex
+ ShiftMask
+ SouthEastGravity
+ SouthGravity
+ SouthWestGravity
+ StaticColor
+ StaticGravity
+ StaticGray
+ StippleShape
+ StructureNotifyMask
+ SubstructureNotifyMask
+ SubstructureRedirectMask
+ Success
+ SyncBoth
+ SyncKeyboard
+ SyncPointer
+ TileShape
+ TopIf
+ TrueColor
+ UnmapGravity
+ UnmapNotify
+ Unsorted
+ VisibilityChangeMask
+ VisibilityFullyObscured
+ VisibilityNotify
+ VisibilityPartiallyObscured
+ VisibilityUnobscured
+ WestGravity
+ WhenMapped
+ WindingRule
+ XYBitmap
+ XYPixmap
+ X_H
+ X_PROTOCOL
+ X_PROTOCOL_REVISION
+ YSorted
+ YXBanded
+ YXSorted
+ ZPixmap
+);
+
+sub AUTOLOAD {
+ # This AUTOLOAD is used to 'autoload' constants from the constant()
+ # XS function. If a constant is not found then control is passed
+ # to the AUTOLOAD in AutoLoader.
+
+ my $constname;
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ my $val = constant($constname, @_ ? $_[0] : 0);
+ if ($! != 0) {
+ if ($! =~ /Invalid/) {
+ $AutoLoader::AUTOLOAD = $AUTOLOAD;
+ goto &AutoLoader::AUTOLOAD;
+ }
+ else {
+ croak "Your vendor has not defined X macro $constname";
+ }
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+bootstrap Tk::X;
+
+# Preloaded methods go here.
+
+# Autoload methods go after =cut, and are processed by the autosplit program.
+
+1;
+__END__
+# Below is the stub of documentation for your module. You better edit it!
+
+=cut
diff --git a/Master/xemtex/perl/site/lib/Tk/X11/license.terms b/Master/xemtex/perl/site/lib/Tk/X11/license.terms
new file mode 100644
index 00000000000..3dcd816f4a3
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/X11/license.terms
@@ -0,0 +1,32 @@
+This software is copyrighted by the Regents of the University of
+California, Sun Microsystems, Inc., and other parties. The following
+terms apply to all files associated with the software unless explicitly
+disclaimed in individual files.
+
+The authors hereby grant permission to use, copy, modify, distribute,
+and license this software and its documentation for any purpose, provided
+that existing copyright notices are retained in all copies and that this
+notice is included verbatim in any distributions. No written agreement,
+license, or royalty fee is required for any of the authorized uses.
+Modifications to this software may be copyrighted by their authors
+and need not follow the licensing terms described here, provided that
+the new terms are clearly indicated on the first page of each file where
+they apply.
+
+IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
+FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
+DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE
+IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
+NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
+MODIFICATIONS.
+
+RESTRICTED RIGHTS: Use, duplication or disclosure by the government
+is subject to the restrictions as set forth in subparagraph (c) (1) (ii)
+of the Rights in Technical Data and Computer Software Clause as DFARS
+252.227-7013 and FAR 52.227-19.
diff --git a/Master/xemtex/perl/site/lib/Tk/Xcamel.gif b/Master/xemtex/perl/site/lib/Tk/Xcamel.gif
new file mode 100644
index 00000000000..cb88bc0afd8
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/Xcamel.gif
Binary files differ
diff --git a/Master/xemtex/perl/site/lib/Tk/act_folder.xbm b/Master/xemtex/perl/site/lib/Tk/act_folder.xbm
new file mode 100644
index 00000000000..fc82949945b
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/act_folder.xbm
@@ -0,0 +1,5 @@
+#define act_folder_width 16
+#define act_folder_height 10
+static unsigned char act_folder_bits[] = {
+ 0xfc, 0x00, 0xaa, 0x0f, 0x55, 0x15, 0xeb, 0xff, 0x15, 0x80, 0x0b, 0x40,
+ 0x05, 0x20, 0x03, 0x10, 0x01, 0x08, 0xff, 0x07};
diff --git a/Master/xemtex/perl/site/lib/Tk/act_folder.xpm b/Master/xemtex/perl/site/lib/Tk/act_folder.xpm
new file mode 100644
index 00000000000..0e7d682713a
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/act_folder.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char * act_folder_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"16 12 4 1",
+/* colors */
+" s None c None",
+". c black",
+"X c yellow",
+"o c #5B5B57574646",
+/* pixels */
+" .... ",
+" .XXXX. ",
+" .XXXXXX. ",
+"............. ",
+".oXoXoXoXoXo. ",
+".XoX............",
+".oX.XXXXXXXXXXX.",
+".Xo.XXXXXXXXXX. ",
+".o.XXXXXXXXXXX. ",
+".X.XXXXXXXXXXX. ",
+"..XXXXXXXXXX.. ",
+"............. "};
diff --git a/Master/xemtex/perl/site/lib/Tk/anim.gif b/Master/xemtex/perl/site/lib/Tk/anim.gif
new file mode 100644
index 00000000000..96a50b701be
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/anim.gif
Binary files differ
diff --git a/Master/xemtex/perl/site/lib/Tk/balArrow.xbm b/Master/xemtex/perl/site/lib/Tk/balArrow.xbm
new file mode 100644
index 00000000000..ee0664a4727
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/balArrow.xbm
@@ -0,0 +1,4 @@
+#define balArrow_width 6
+#define balArrow_height 6
+static char balArrow_bits[] = {
+ 0x1f, 0x07, 0x07, 0x09, 0x11, 0x20};
diff --git a/Master/xemtex/perl/site/lib/Tk/cbxarrow.xbm b/Master/xemtex/perl/site/lib/Tk/cbxarrow.xbm
new file mode 100644
index 00000000000..ae4054488b9
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/cbxarrow.xbm
@@ -0,0 +1,6 @@
+#define cbxarrow_width 11
+#define cbxarrow_height 14
+static char cbxarrow_bits[] = {
+ 0x00, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00,
+ 0xfe, 0x03, 0xfc, 0x01, 0xf8, 0x00, 0x70, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0xfe, 0x03, 0xfe, 0x03};
diff --git a/Master/xemtex/perl/site/lib/Tk/file.xbm b/Master/xemtex/perl/site/lib/Tk/file.xbm
new file mode 100644
index 00000000000..7bf12bb4c9f
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/file.xbm
@@ -0,0 +1,5 @@
+#define file_width 12
+#define file_height 12
+static unsigned char file_bits[] = {
+ 0xfe, 0x00, 0x02, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0xfe, 0x03};
diff --git a/Master/xemtex/perl/site/lib/Tk/file.xpm b/Master/xemtex/perl/site/lib/Tk/file.xpm
new file mode 100644
index 00000000000..10cc24f9a1e
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/file.xpm
@@ -0,0 +1,18 @@
+/* XPM */
+static char * file_xpm[] = {
+"12 12 3 1",
+" s None c None",
+". c #000000000000",
+"X c white",
+" ........ ",
+" .XXXXXX. ",
+" .XXXXXX... ",
+" .XXXXXXXX. ",
+" .XXXXXXXX. ",
+" .XXXXXXXX. ",
+" .XXXXXXXX. ",
+" .XXXXXXXX. ",
+" .XXXXXXXX. ",
+" .XXXXXXXX. ",
+" .XXXXXXXX. ",
+" .......... "};
diff --git a/Master/xemtex/perl/site/lib/Tk/folder.xbm b/Master/xemtex/perl/site/lib/Tk/folder.xbm
new file mode 100644
index 00000000000..0398f0de777
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/folder.xbm
@@ -0,0 +1,5 @@
+#define folder_width 16
+#define folder_height 10
+static unsigned char folder_bits[] = {
+ 0xfc, 0x00, 0x02, 0x07, 0x01, 0x08, 0x01, 0x08, 0x01, 0x08, 0x01, 0x08,
+ 0x01, 0x08, 0x01, 0x08, 0x01, 0x08, 0xff, 0x07};
diff --git a/Master/xemtex/perl/site/lib/Tk/folder.xpm b/Master/xemtex/perl/site/lib/Tk/folder.xpm
new file mode 100644
index 00000000000..fda7c15a549
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/folder.xpm
@@ -0,0 +1,21 @@
+/* XPM */
+static char * folder_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"16 12 3 1",
+/* colors */
+" s None c None",
+". c black",
+"X c #f0ff80",
+/* pixels */
+" .... ",
+" .XXXX. ",
+" .XXXXXX. ",
+"............. ",
+".XXXXXXXXXXX. ",
+".XXXXXXXXXXX. ",
+".XXXXXXXXXXX. ",
+".XXXXXXXXXXX. ",
+".XXXXXXXXXXX. ",
+".XXXXXXXXXXX. ",
+".XXXXXXXXXXX. ",
+"............. "};
diff --git a/Master/xemtex/perl/site/lib/Tk/icon.gif b/Master/xemtex/perl/site/lib/Tk/icon.gif
new file mode 100644
index 00000000000..dfe6b6621f2
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/icon.gif
Binary files differ
diff --git a/Master/xemtex/perl/site/lib/Tk/license.terms b/Master/xemtex/perl/site/lib/Tk/license.terms
new file mode 100644
index 00000000000..6a5d3728366
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/license.terms
@@ -0,0 +1,35 @@
+This software is copyrighted by the Regents of the University of
+California, Sun Microsystems, Inc., and other parties. The following
+terms apply to all files associated with the software unless explicitly
+disclaimed in individual files.
+
+The authors hereby grant permission to use, copy, modify, distribute,
+and license this software and its documentation for any purpose, provided
+that existing copyright notices are retained in all copies and that this
+notice is included verbatim in any distributions. No written agreement,
+license, or royalty fee is required for any of the authorized uses.
+Modifications to this software may be copyrighted by their authors
+and need not follow the licensing terms described here, provided that
+the new terms are clearly indicated on the first page of each file where
+they apply.
+
+IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
+FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
+DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE
+IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
+NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
+MODIFICATIONS.
+
+RESTRICTED RIGHTS: Use, duplication or disclosure by the government
+is subject to the restrictions as set forth in subparagraph (c) (1) (ii)
+of the Rights in Technical Data and Computer Software Clause as DFARS
+252.227-7013 and FAR 52.227-19.
+0 in license.terms
+0 in license.terms
+0 in license.terms
diff --git a/Master/xemtex/perl/site/lib/Tk/openfile.xbm b/Master/xemtex/perl/site/lib/Tk/openfile.xbm
new file mode 100644
index 00000000000..859e2e57608
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/openfile.xbm
@@ -0,0 +1,5 @@
+#define openfile_width 16
+#define openfile_height 12
+static unsigned char openfile_bits[] = {
+ 0x00, 0x00, 0xfc, 0x00, 0x02, 0x07, 0x01, 0x08, 0xc1, 0xff, 0xa1, 0xaa,
+ 0x51, 0x55, 0xa9, 0x2a, 0x55, 0x15, 0xab, 0x0a, 0xff, 0x07, 0x00, 0x00};
diff --git a/Master/xemtex/perl/site/lib/Tk/openfolder.xbm b/Master/xemtex/perl/site/lib/Tk/openfolder.xbm
new file mode 100644
index 00000000000..59ee624efd0
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/openfolder.xbm
@@ -0,0 +1,5 @@
+#define openfolder_width 16
+#define openfolder_height 10
+static unsigned char openfolder_bits[] = {
+ 0xfc, 0x00, 0x02, 0x07, 0x01, 0x08, 0xc1, 0xff, 0x21, 0x80, 0x11, 0x40,
+ 0x09, 0x20, 0x05, 0x10, 0x03, 0x08, 0xff, 0x07};
diff --git a/Master/xemtex/perl/site/lib/Tk/openfolder.xpm b/Master/xemtex/perl/site/lib/Tk/openfolder.xpm
new file mode 100644
index 00000000000..191fe1e72bc
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/openfolder.xpm
@@ -0,0 +1,21 @@
+/* XPM */
+static char * openfolder_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"16 12 3 1",
+/* colors */
+" s None c None",
+". c black",
+"X c #f0ff80",
+/* pixels */
+" .... ",
+" .XXXX. ",
+" .XXXXXX. ",
+"............. ",
+".XXXXXXXXXXX. ",
+".XXX............",
+".XX.XXXXXXXXXXX.",
+".XX.XXXXXXXXXX. ",
+".X.XXXXXXXXXXX. ",
+".X.XXXXXXXXXXX. ",
+"..XXXXXXXXXX.. ",
+"............. "};
diff --git a/Master/xemtex/perl/site/lib/Tk/prolog.ps b/Master/xemtex/perl/site/lib/Tk/prolog.ps
new file mode 100644
index 00000000000..409e06a65a0
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/prolog.ps
@@ -0,0 +1,284 @@
+%%BeginProlog
+50 dict begin
+
+% This is a standard prolog for Postscript generated by Tk's canvas
+% widget.
+% SCCS: @(#) prolog.ps 1.5 96/02/17 17:45:11
+
+% The definitions below just define all of the variables used in
+% any of the procedures here. This is needed for obscure reasons
+% explained on p. 716 of the Postscript manual (Section H.2.7,
+% "Initializing Variables," in the section on Encapsulated Postscript).
+
+/baseline 0 def
+/stipimage 0 def
+/height 0 def
+/justify 0 def
+/lineLength 0 def
+/spacing 0 def
+/stipple 0 def
+/strings 0 def
+/xoffset 0 def
+/yoffset 0 def
+/tmpstip null def
+
+% Define the array ISOLatin1Encoding (which specifies how characters are
+% encoded for ISO-8859-1 fonts), if it isn't already present (Postscript
+% level 2 is supposed to define it, but level 1 doesn't).
+
+systemdict /ISOLatin1Encoding known not {
+ /ISOLatin1Encoding [
+ /space /space /space /space /space /space /space /space
+ /space /space /space /space /space /space /space /space
+ /space /space /space /space /space /space /space /space
+ /space /space /space /space /space /space /space /space
+ /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 /space
+ /space /space /space /space /space /space /space /space
+ /space /space /space /space /space /space /space /space
+ /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
+ /dieresis /space /ring /cedilla /space /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
+ /cedillar /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
+} if
+
+% font ISOEncode font
+% This procedure changes the encoding of a font from the default
+% Postscript encoding to ISOLatin1. It's typically invoked just
+% before invoking "setfont". The body of this procedure comes from
+% Section 5.6.1 of the Postscript book.
+
+/ISOEncode {
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding ISOLatin1Encoding def
+ currentdict
+ end
+
+ % I'm not sure why it's necessary to use "definefont" on this new
+ % font, but it seems to be important; just use the name "Temporary"
+ % for the font.
+
+ /Temporary exch definefont
+} bind def
+
+% StrokeClip
+%
+% This procedure converts the current path into a clip area under
+% the assumption of stroking. It's a bit tricky because some Postscript
+% interpreters get errors during strokepath for dashed lines. If
+% this happens then turn off dashes and try again.
+
+/StrokeClip {
+ {strokepath} stopped {
+ (This Postscript printer gets limitcheck overflows when) =
+ (stippling dashed lines; lines will be printed solid instead.) =
+ [] 0 setdash strokepath} if
+ clip
+} bind def
+
+% desiredSize EvenPixels closestSize
+%
+% The procedure below is used for stippling. Given the optimal size
+% of a dot in a stipple pattern in the current user coordinate system,
+% compute the closest size that is an exact multiple of the device's
+% pixel size. This allows stipple patterns to be displayed without
+% aliasing effects.
+
+/EvenPixels {
+ % Compute exact number of device pixels per stipple dot.
+ dup 0 matrix currentmatrix dtransform
+ dup mul exch dup mul add sqrt
+
+ % Round to an integer, make sure the number is at least 1, and compute
+ % user coord distance corresponding to this.
+ dup round dup 1 lt {pop 1} if
+ exch div mul
+} bind def
+
+% width height string StippleFill --
+%
+% Given a path already set up and a clipping region generated from
+% it, this procedure will fill the clipping region with a stipple
+% pattern. "String" contains a proper image description of the
+% stipple pattern and "width" and "height" give its dimensions. Each
+% stipple dot is assumed to be about one unit across in the current
+% user coordinate system. This procedure trashes the graphics state.
+
+/StippleFill {
+ % The following code is needed to work around a NeWSprint bug.
+
+ /tmpstip 1 index def
+
+ % Change the scaling so that one user unit in user coordinates
+ % corresponds to the size of one stipple dot.
+ 1 EvenPixels dup scale
+
+ % Compute the bounding box occupied by the path (which is now
+ % the clipping region), and round the lower coordinates down
+ % to the nearest starting point for the stipple pattern. Be
+ % careful about negative numbers, since the rounding works
+ % differently on them.
+
+ pathbbox
+ 4 2 roll
+ 5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll
+ 6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll
+
+ % Stack now: width height string y1 y2 x1 x2
+ % Below is a doubly-nested for loop to iterate across this area
+ % in units of the stipple pattern size, going up columns then
+ % across rows, blasting out a stipple-pattern-sized rectangle at
+ % each position
+
+ 6 index exch {
+ 2 index 5 index 3 index {
+ % Stack now: width height string y1 y2 x y
+
+ gsave
+ 1 index exch translate
+ 5 index 5 index true matrix tmpstip imagemask
+ grestore
+ } for
+ pop
+ } for
+ pop pop pop pop pop
+} bind def
+
+% -- AdjustColor --
+% Given a color value already set for output by the caller, adjusts
+% that value to a grayscale or mono value if requested by the CL
+% variable.
+
+/AdjustColor {
+ CL 2 lt {
+ currentgray
+ CL 0 eq {
+ .5 lt {0} {1} ifelse
+ } if
+ setgray
+ } if
+} bind def
+
+% x y strings spacing xoffset yoffset justify stipple DrawText --
+% This procedure does all of the real work of drawing text. The
+% color and font must already have been set by the caller, and the
+% following arguments must be on the stack:
+%
+% x, y - Coordinates at which to draw text.
+% strings - An array of strings, one for each line of the text item,
+% in order from top to bottom.
+% spacing - Spacing between lines.
+% xoffset - Horizontal offset for text bbox relative to x and y: 0 for
+% nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se.
+% yoffset - Vertical offset for text bbox relative to x and y: 0 for
+% nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se.
+% justify - 0 for left justification, 0.5 for center, 1 for right justify.
+% stipple - Boolean value indicating whether or not text is to be
+% drawn in stippled fashion. If text is stippled,
+% procedure StippleText must have been defined to call
+% StippleFill in the right way.
+%
+% Also, when this procedure is invoked, the color and font must already
+% have been set for the text.
+
+/DrawText {
+ /stipple exch def
+ /justify exch def
+ /yoffset exch def
+ /xoffset exch def
+ /spacing exch def
+ /strings exch def
+
+ % First scan through all of the text to find the widest line.
+
+ /lineLength 0 def
+ strings {
+ stringwidth pop
+ dup lineLength gt {/lineLength exch def} {pop} ifelse
+ newpath
+ } forall
+
+ % Compute the baseline offset and the actual font height.
+
+ 0 0 moveto (TXygqPZ) false charpath
+ pathbbox dup /baseline exch def
+ exch pop exch sub /height exch def pop
+ newpath
+
+ % Translate coordinates first so that the origin is at the upper-left
+ % corner of the text's bounding box. Remember that x and y for
+ % positioning are still on the stack.
+
+ translate
+ lineLength xoffset mul
+ strings length 1 sub spacing mul height add yoffset mul translate
+
+ % Now use the baseline and justification information to translate so
+ % that the origin is at the baseline and positioning point for the
+ % first line of text.
+
+ justify lineLength mul baseline neg translate
+
+ % Iterate over each of the lines to output it. For each line,
+ % compute its width again so it can be properly justified, then
+ % display it.
+
+ strings {
+ dup stringwidth pop
+ justify neg mul 0 moveto
+ stipple {
+
+ % The text is stippled, so turn it into a path and print
+ % by calling StippledText, which in turn calls StippleFill.
+ % Unfortunately, many Postscript interpreters will get
+ % overflow errors if we try to do the whole string at
+ % once, so do it a character at a time.
+
+ gsave
+ /char (X) def
+ {
+ char 0 3 -1 roll put
+ currentpoint
+ gsave
+ char true charpath clip StippleText
+ grestore
+ char stringwidth translate
+ moveto
+ } forall
+ grestore
+ } {show} ifelse
+ 0 spacing neg translate
+ } forall
+} bind def
+
+%%EndProlog
diff --git a/Master/xemtex/perl/site/lib/Tk/srcfile.xpm b/Master/xemtex/perl/site/lib/Tk/srcfile.xpm
new file mode 100644
index 00000000000..06a40a96c84
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/srcfile.xpm
@@ -0,0 +1,18 @@
+/* XPM */
+static char * srcfile_xpm[] = {
+"12 12 3 1",
+" s None c None",
+". c #000000000000",
+"X c gray91",
+" ........ ",
+" .XXXXXX. ",
+" .XXXXXX... ",
+" .XXXXXXXX. ",
+" .XX...XXX. ",
+" .X.XXX.XX. ",
+" .X.XXXXXX. ",
+" .X.XXXXXX. ",
+" .XX....XX. ",
+" .XXXXXXXX. ",
+" .XXXXXXXX. ",
+" .......... "};
diff --git a/Master/xemtex/perl/site/lib/Tk/textfile.xpm b/Master/xemtex/perl/site/lib/Tk/textfile.xpm
new file mode 100644
index 00000000000..8fa8d2f9032
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/textfile.xpm
@@ -0,0 +1,18 @@
+/* XPM */
+static char * textfile_xpm[] = {
+"12 12 3 1",
+" s None c None",
+". c #000000000000",
+"X c #E0E0FFFFE0E0",
+" ........ ",
+" .XXXXXX. ",
+" .XXXXXX... ",
+" .X....XXX. ",
+" .XXXXXXXX. ",
+" .X...XXXX. ",
+" .XXXXXXXX. ",
+" .X.....XX. ",
+" .XXXXXXXX. ",
+" .X.....XX. ",
+" .XXXXXXXX. ",
+" .......... "};
diff --git a/Master/xemtex/perl/site/lib/Tk/tranicon.gif b/Master/xemtex/perl/site/lib/Tk/tranicon.gif
new file mode 100644
index 00000000000..dc7d494c572
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/tranicon.gif
Binary files differ
diff --git a/Master/xemtex/perl/site/lib/Tk/widgets.pm b/Master/xemtex/perl/site/lib/Tk/widgets.pm
new file mode 100644
index 00000000000..742866216cc
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/widgets.pm
@@ -0,0 +1,21 @@
+package Tk::widgets;
+use Carp;
+
+use vars qw($VERSION);
+$VERSION = '3.011'; # $Id: //depot/Tk8/Tk/widgets.pm#11 $
+
+sub import
+{
+ my $class = shift;
+ foreach (@_)
+ {
+ local $SIG{__DIE__} = \&Carp::croak;
+ # carp "$_ already loaded" if (exists $INC{"Tk/$_.pm"});
+ require "Tk/$_.pm";
+ }
+}
+
+1;
+__END__
+
+=cut
diff --git a/Master/xemtex/perl/site/lib/Tk/win.xbm b/Master/xemtex/perl/site/lib/Tk/win.xbm
new file mode 100644
index 00000000000..13c05e8c2d7
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/win.xbm
@@ -0,0 +1,6 @@
+#define win.xbm_width 16
+#define win.xbm_height 16
+static char win.xbm_bits[] = {
+ 0xff, 0xff, 0x0d, 0xb0, 0xff, 0xff, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
+ 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
+ 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0xff, 0xff};
diff --git a/Master/xemtex/perl/site/lib/Tk/winfolder.xpm b/Master/xemtex/perl/site/lib/Tk/winfolder.xpm
new file mode 100644
index 00000000000..73fe734c6d0
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/winfolder.xpm
@@ -0,0 +1,39 @@
+/* XPM */
+static char *winfolder[] = {
+/* width height num_colors chars_per_pixel */
+" 17 15 17 1",
+/* colors */
+" c none",
+". c #000000",
+"# c #808080",
+"a c #800000",
+"b c #808000",
+"c c #008000",
+"d c #008080",
+"e c #000080",
+"f c #800080",
+"g c #ffffff",
+"h c #c0c0c0",
+"i c #ff0000",
+"j c #ffff00",
+"k c #00ff00",
+"l c #00ffff",
+"m c #0000ff",
+"n c #ff00ff",
+/* pixels */
+" ",
+" ##### ",
+" #hjhjh# ",
+" #hjhjhjh###### ",
+" #gggggggggggg#. ",
+" #gjhjhjhjhjhj#. ",
+" #ghjhjhjhjhjh#. ",
+" #gjhjhjhjhjhj#. ",
+" #ghjhjhjhjhjh#. ",
+" #gjhjhjhjhjhj#. ",
+" #ghjhjhjhjhjh#. ",
+" #gjhjhjhjhjhj#. ",
+" ##############. ",
+" .............. ",
+" ",
+};
diff --git a/Master/xemtex/perl/site/lib/Tk/wintext.xpm b/Master/xemtex/perl/site/lib/Tk/wintext.xpm
new file mode 100644
index 00000000000..50b2d5587dd
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Tk/wintext.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *wintext[] = {
+/* width height num_colors chars_per_pixel */
+" 15 18 17 1",
+/* colors */
+" c None",
+". c #000000",
+"# c #808080",
+"a c #800000",
+"b c #808000",
+"c c #008000",
+"d c #008080",
+"e c #000080",
+"f c #800080",
+"g c #ffffff",
+"h c #c0c0c0",
+"i c #ff0000",
+"j c #ffff00",
+"k c #00ff00",
+"l c #00ffff",
+"m c #0000ff",
+"n c #ff00ff",
+/* pixels */
+" ",
+" . . . . . ",
+" .g#g#g#g#g. ",
+" #g.g.g.g.g.g. ",
+" #ggggggggggh. ",
+" #ggggggggggh. ",
+" #gg...g..ggh. ",
+" #ggggggggggh. ",
+" #gg......ggh. ",
+" #ggggggggggh. ",
+" #gg......ggh. ",
+" #ggggggggggh. ",
+" #gg......ggh. ",
+" #ggggggggggh. ",
+" #ggggggggggh. ",
+" #hhhhhhhhhhh. ",
+" ........... ",
+" "
+};
diff --git a/Master/xemtex/perl/site/lib/Win32/API.pm b/Master/xemtex/perl/site/lib/Win32/API.pm
new file mode 100644
index 00000000000..154de7a80ee
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Win32/API.pm
@@ -0,0 +1,719 @@
+package Win32::API;
+
+# See the bottom of this file for the POD documentation. Search for the
+# string '=head'.
+
+#######################################################################
+#
+# Win32::API - Perl Win32 API Import Facility
+#
+# Version: 0.41
+# Date: 10 Mar 2003
+# Author: Aldo Calpini <dada@perl.it>
+# $Id: API.pm,v 1.0 2001/10/30 13:57:31 dada Exp $
+#######################################################################
+
+require Exporter; # to export the constants to the main:: space
+require DynaLoader; # to dynuhlode the module.
+@ISA = qw( Exporter DynaLoader );
+
+use vars qw( $DEBUG );
+$DEBUG = 0;
+
+sub DEBUG {
+ if ($Win32::API::DEBUG) {
+ printf @_ if @_ or return 1;
+ } else {
+ return 0;
+ }
+}
+
+use Win32::API::Type;
+use Win32::API::Struct;
+
+#######################################################################
+# STATIC OBJECT PROPERTIES
+#
+$VERSION = "0.41";
+
+#### some package-global hash to
+#### keep track of the imported
+#### libraries and procedures
+my %Libraries = ();
+my %Procedures = ();
+
+
+#######################################################################
+# dynamically load in the API extension module.
+#
+bootstrap Win32::API;
+
+#######################################################################
+# PUBLIC METHODS
+#
+sub new {
+ my($class, $dll, $proc, $in, $out) = @_;
+ my $hdll;
+ my $self = {};
+
+ #### avoid loading a library more than once
+ if(exists($Libraries{$dll})) {
+ # print "Win32::API::new: Library '$dll' already loaded, handle=$Libraries{$dll}\n";
+ $hdll = $Libraries{$dll};
+ } else {
+ # print "Win32::API::new: Loading library '$dll'\n";
+ $hdll = Win32::API::LoadLibrary($dll);
+ $Libraries{$dll} = $hdll;
+ }
+
+ #### if the dll can't be loaded, set $! to Win32's GetLastError()
+ if(!$hdll) {
+ $! = Win32::GetLastError();
+ return undef;
+ }
+
+ #### determine if we have a prototype or not
+ if( (not defined $in) and (not defined $out) ) {
+ ($proc, $self->{in}, $self->{intypes}, $self->{out}) = parse_prototype( $proc );
+ return undef unless $proc;
+ $self->{proto} = 1;
+ } else {
+ $self->{in} = [];
+ if(ref($in) eq 'ARRAY') {
+ foreach (@$in) {
+ push(@{ $self->{in} }, type_to_num($_));
+ }
+ } else {
+ my @in = split '', $in;
+ foreach (@in) {
+ push(@{ $self->{in} }, type_to_num($_));
+ }
+ }
+ $self->{out} = type_to_num($out);
+ }
+
+ #### first try to import the function of given name...
+ my $hproc = Win32::API::GetProcAddress($hdll, $proc);
+
+ #### ...then try appending either A or W (for ASCII or Unicode)
+ if(!$hproc) {
+ my $tproc = $proc;
+ $tproc .= (IsUnicode() ? "W" : "A");
+ # print "Win32::API::new: procedure not found, trying '$tproc'...\n";
+ $hproc = Win32::API::GetProcAddress($hdll, $tproc);
+ }
+
+ #### ...if all that fails, set $! accordingly
+ if(!$hproc) {
+ $! = Win32::GetLastError();
+ return undef;
+ }
+
+ #### ok, let's stuff the object
+ $self->{procname} = $proc;
+ $self->{dll} = $hdll;
+ $self->{dllname} = $dll;
+ $self->{proc} = $hproc;
+
+ #### keep track of the imported function
+ $Libraries{$dll} = $hdll;
+ $Procedures{$dll}++;
+
+ #### cast the spell
+ bless($self, $class);
+ return $self;
+}
+
+sub Import {
+ my($class, $dll, $proc, $in, $out) = @_;
+ $Imported{"$dll:$proc"} = Win32::API->new($dll, $proc, $in, $out) or return 0;
+ my $P = (caller)[0];
+ eval qq(
+ sub ${P}::$Imported{"$dll:$proc"}->{procname} { \$Win32::API::Imported{"$dll:$proc"}->Call(\@_); }
+ );
+ return $@ ? 0 : 1;
+}
+
+
+#######################################################################
+# PRIVATE METHODS
+#
+sub DESTROY {
+ my($self) = @_;
+
+ #### decrease this library's procedures reference count
+ $Procedures{$self->{dllname}}--;
+
+ #### once it reaches 0, free it
+ if($Procedures{$self->{dllname}} == 0) {
+ # print "Win32::API::DESTROY: Freeing library '$self->{dllname}'\n";
+ Win32::API::FreeLibrary($Libraries{$self->{dllname}});
+ delete($Libraries{$self->{dllname}});
+ }
+}
+
+sub type_to_num {
+ my $type = shift;
+ my $out = shift;
+ my $num;
+
+ if( $type eq 'N'
+ or $type eq 'n'
+ or $type eq 'l'
+ or $type eq 'L'
+ ) {
+ $num = 1;
+ } elsif($type eq 'P'
+ or $type eq 'p'
+ ) {
+ $num = 2;
+ } elsif($type eq 'I'
+ or $type eq 'i'
+ ) {
+ $num = 3;
+ } elsif($type eq 'f'
+ or $type eq 'F'
+ ) {
+ $num = 4;
+ } elsif($type eq 'D'
+ or $type eq 'd'
+ ) {
+ $num = 5;
+ } elsif($type eq 'c'
+ or $type eq 'C'
+ ) {
+ $num = 6;
+ } else {
+ $num = 0;
+ }
+ unless(defined $out) {
+ if( $type eq 's'
+ or $type eq 'S'
+ ) {
+ $num = 51;
+ } elsif($type eq 'b'
+ or $type eq 'B'
+ ) {
+ $num = 22;
+ } elsif($type eq 'k'
+ or $type eq 'K'
+ ) {
+ $num = 101;
+ }
+ }
+ return $num;
+}
+
+sub parse_prototype {
+ my($proto) = @_;
+
+ my @in_params = ();
+ my @in_types = ();
+ if($proto =~ /^\s*(\S+)\s+(\S+)\s*\(([^\)]*)\)/) {
+ my $ret = $1;
+ my $proc = $2;
+ my $params = $3;
+
+ $params =~ s/^\s+//;
+ $params =~ s/\s+$//;
+
+ DEBUG "(PM)parse_prototype: got PROC '%s'\n", $proc;
+ DEBUG "(PM)parse_prototype: got PARAMS '%s'\n", $params;
+
+ foreach my $param (split(/\s*,\s*/, $params)) {
+ my($type, $name);
+ if($param =~ /(\S+)\s+(\S+)/) {
+ ($type, $name) = ($1, $2);
+ }
+
+ if(Win32::API::Type::is_known($type)) {
+ if(Win32::API::Type::is_pointer($type)) {
+ DEBUG "(PM)parse_prototype: IN='%s' PACKING='%s' API_TYPE=%d\n",
+ $type,
+ Win32::API::Type->packing( $type ),
+ type_to_num('P');
+ push(@in_params, type_to_num('P'));
+ } else {
+ DEBUG "(PM)parse_prototype: IN='%s' PACKING='%s' API_TYPE=%d\n",
+ $type,
+ Win32::API::Type->packing( $type ),
+ type_to_num( Win32::API::Type->packing( $type ) );
+ push(@in_params, type_to_num( Win32::API::Type->packing( $type ) ));
+ }
+ } elsif( Win32::API::Struct::is_known( $type ) ) {
+ DEBUG "(PM)parse_prototype: IN='%s' PACKING='%s' API_TYPE=%d\n",
+ $type, 'S', type_to_num('S');
+ push(@in_params, type_to_num('S'));
+ } else {
+ warn "Win32::API::parse_prototype: WARNING unknown parameter type '$type'";
+ push(@in_params, type_to_num('I'));
+ }
+ push(@in_types, $type);
+
+ }
+ DEBUG "parse_prototype: IN=[ @in_params ]\n";
+
+
+
+ if(Win32::API::Type::is_known($ret)) {
+ if(Win32::API::Type::is_pointer($ret)) {
+ DEBUG "parse_prototype: OUT='%s' PACKING='%s' API_TYPE=%d\n",
+ $ret,
+ Win32::API::Type->packing( $ret ),
+ type_to_num('P');
+ return ( $proc, \@in_params, \@in_types, type_to_num('P') );
+ } else {
+ DEBUG "parse_prototype: OUT='%s' PACKING='%s' API_TYPE=%d\n",
+ $ret,
+ Win32::API::Type->packing( $ret ),
+ type_to_num( Win32::API::Type->packing( $ret ) );
+ return ( $proc, \@in_params, \@in_types, type_to_num(Win32::API::Type->packing($ret)) );
+ }
+ } else {
+ warn "Win32::API::parse_prototype: WARNING unknown output parameter type '$ret'";
+ return ( $proc, \@in_params, \@in_types, type_to_num('I') );
+ }
+
+ } else {
+ warn "Win32::API::parse_prototype: bad prototype '$proto'";
+ return undef;
+ }
+}
+
+1;
+
+__END__
+
+#######################################################################
+# DOCUMENTATION
+#
+
+=head1 NAME
+
+Win32::API - Perl Win32 API Import Facility
+
+=head1 SYNOPSIS
+
+ #### Method 1: with prototype
+
+ use Win32::API;
+ $function = Win32::API->new(
+ 'mydll, 'int sum_integers(int a, int b)',
+ );
+ $return = $function->Call(3, 2);
+
+ #### Method 2: with parameter list
+
+ use Win32::API;
+ $function = Win32::API->new(
+ 'mydll', 'sum_integers', 'II', 'I',
+ );
+ $return = $function->Call(3, 2);
+
+ #### Method 3: with Import
+
+ use Win32::API;
+ Win32::API->Import(
+ 'mydll', 'int sum_integers(int a, int b)',
+ );
+ $return = sum_integers(3, 2);
+
+
+=for LATER-UNIMPLEMENTED
+ #### or
+ use Win32::API mydll => 'int sum_integers(int a, int b)';
+ $return = sum_integers(3, 2);
+
+
+=head1 ABSTRACT
+
+With this module you can import and call arbitrary functions
+from Win32's Dynamic Link Libraries (DLL), without having
+to write an XS extension. Note, however, that this module
+can't do anything (parameters input and output is limited
+to simpler cases), and anyway a regular XS extension is
+always safer and faster.
+
+The current version of Win32::API is available at my website:
+
+ http://dada.perl.it/
+
+It's also available on your nearest CPAN mirror (but allow a few days
+for worldwide spreading of the latest version) reachable at:
+
+ http://www.perl.com/CPAN/authors/Aldo_Calpini/
+
+A short example of how you can use this module (it just gets the PID of
+the current process, eg. same as Perl's internal C<$$>):
+
+ use Win32::API;
+ Win32::API->Import("kernel32", "int GetCurrentProcessId()");
+ $PID = GetCurrentProcessId();
+
+The possibilities are nearly infinite (but not all are good :-).
+Enjoy it.
+
+
+=head1 CREDITS
+
+All the credits go to Andrea Frosini
+for the neat assembler trick that makes this thing work.
+I've also used some work by Dave Roth for the prototyping stuff.
+A big thank you also to Gurusamy Sarathy for his
+unvaluable help in XS development, and to all the Perl community for
+being what it is.
+
+
+=head1 DESCRIPTION
+
+To use this module put the following line at the beginning of your script:
+
+ use Win32::API;
+
+You can now use the C<new()> function of the Win32::API module to create a
+new Win32::API object (see L<IMPORTING A FUNCTION>) and then invoke the
+C<Call()> method on this object to perform a call to the imported API
+(see L<CALLING AN IMPORTED FUNCTION>).
+
+Starting from version 0.40, you can also avoid creating a Win32::API object
+and instead automatically define a Perl sub with the same name of the API
+function you're importing. The details of the API definitions are the same,
+just the call is different:
+
+ my $GetCurrentProcessId = Win32::API->new(
+ "kernel32", "int GetCurrentProcessId()"
+ );
+ my $PID = $GetCurrentProcessId->Call();
+
+ #### vs.
+
+ Win32::API->Import("kernel32", "int GetCurrentProcessId()");
+ $PID = GetCurrentProcessId();
+
+Note that C<Import> returns 1 on success and 0 on failure (in which case you
+can check the content of C<$^E>).
+
+=head2 IMPORTING A FUNCTION
+
+You can import a function from a 32 bit Dynamic Link Library (DLL) file
+with the C<new()> function. This will create a Perl object that contains the
+reference to that function, which you can later C<Call()>.
+
+What you need to know is the prototype of the function you're going to import
+(eg. the definition of the function expressed in C syntax).
+
+Starting from version 0.40, there are 2 different approaches for this step:
+(the preferred) one uses the prototype directly, while the other (now deprecated)
+one uses Win32::API's internal representation for parameters.
+
+=head2 IMPORTING A FUNCTION BY PROTOTYPE
+
+You need to pass 2 parameters:
+
+=over 4
+
+=item 1.
+The name of the library from which you want to import the function.
+
+=item 2.
+The C prototype of the function.
+
+=back
+
+See L<Win32::API::Type> for a list of the known parameter types and
+L<Win32::API::Struct> for information on how to define a structure.
+
+=head2 IMPORTING A FUNCTION WITH A PARAMETER LIST
+
+You need to pass 4 parameters:
+
+=over 4
+
+=item 1.
+The name of the library from which you want to import the function.
+
+=item 2.
+The name of the function (as exported by the library).
+
+=item 3.
+The number and types of the arguments the function expects as input.
+
+=item 4.
+The type of the value returned by the function.
+
+=back
+
+To better explain their meaning, let's suppose that we
+want to import and call the Win32 API C<GetTempPath()>.
+This function is defined in C as:
+
+ DWORD WINAPI GetTempPathA( DWORD nBufferLength, LPSTR lpBuffer );
+
+This is documented in the B<Win32 SDK Reference>; you can look
+for it on the Microsoft's WWW site, or in your C compiler's
+documentation, if you own one.
+
+=over 4
+
+=item B<1.>
+
+The first parameter is the name of the library file that
+exports this function; our function resides in the F<KERNEL32.DLL>
+system file.
+When specifying this name as parameter, the F<.DLL> extension
+is implicit, and if no path is given, the file is searched through
+a couple of directories, including:
+
+=over 4
+
+=item 1. The directory from which the application loaded.
+
+=item 2. The current directory.
+
+=item 3. The Windows system directory (eg. c:\windows\system or system32).
+
+=item 4. The Windows directory (eg. c:\windows).
+
+=item 5. The directories that are listed in the PATH environment variable.
+
+=back
+
+So, you don't have to write F<C:\windows\system\kernel32.dll>;
+only F<kernel32> is enough:
+
+ $GetTempPath = new Win32::API('kernel32', ...
+
+=item B<2.>
+
+Now for the second parameter: the name of the function.
+It must be written exactly as it is exported
+by the library (case is significant here).
+If you are using Windows 95 or NT 4.0, you can use the B<Quick View>
+command on the DLL file to see the function it exports.
+Remember that you can only import functions from 32 bit DLLs:
+in Quick View, the file's characteristics should report
+somewhere "32 bit word machine"; as a rule of thumb,
+when you see that all the exported functions are in upper case,
+the DLL is a 16 bit one and you can't use it.
+If their capitalization looks correct, then it's probably a 32 bit
+DLL.
+
+Also note that many Win32 APIs are exported twice, with the addition of
+a final B<A> or B<W> to their name, for - respectively - the ASCII
+and the Unicode version.
+When a function name is not found, Win32::API will actually append
+an B<A> to the name and try again; if the extension is built on a
+Unicode system, then it will try with the B<W> instead.
+So our function name will be:
+
+ $GetTempPath = new Win32::API('kernel32', 'GetTempPath', ...
+
+In our case C<GetTempPath> is really loaded as C<GetTempPathA>.
+
+=item B<3.>
+
+The third parameter, the input parameter list, specifies how many
+arguments the function wants, and their types. It can be passed as
+a single string, in which each character represents one parameter,
+or as a list reference. The following forms are valid:
+
+ "abcd"
+ [a, b, c, d]
+ \@LIST
+
+But those are not:
+
+ (a, b, c, d)
+ @LIST
+
+The number of characters, or elements in the list, specifies the number
+of parameters, and each character or element specifies the type of an
+argument; allowed types are:
+
+=over 4
+
+=item C<I>:
+value is an integer (int)
+
+=item C<N>:
+value is a number (long)
+
+=item C<F>:
+value is a floating point number (float)
+
+=item C<D>:
+value is a double precision number (double)
+
+=item C<C>:
+value is a char (char)
+
+=item C<P>:
+value is a pointer (to a string, structure, etc...)
+
+=item C<S>:
+value is a Win32::API::Struct object (see below)
+
+=item C<K>:
+value is a Win32::API::Callback object (see L<Win32::API::Callback>)
+
+=back
+
+Our function needs two parameters: a number (C<DWORD>) and a pointer to a
+string (C<LPSTR>):
+
+ $GetTempPath = new Win32::API('kernel32', 'GetTempPath', 'NP', ...
+
+=item B<4.>
+
+The fourth and final parameter is the type of the value returned by the
+function. It can be one of the types seen above, plus another type named B<V>
+(for C<void>), used for functions that do not return a value.
+In our example the value returned by GetTempPath() is a C<DWORD>, so
+our return type will be B<N>:
+
+ $GetTempPath = new Win32::API('kernel32', 'GetTempPath', 'NP', 'N');
+
+Now the line is complete, and the GetTempPath() API is ready to be used
+in Perl. Before calling it, you should test that $GetTempPath is
+C<defined>, otherwise either the function or the library could not be
+loaded; in this case, C<$!> will be set to the error message reported
+by Windows.
+Our definition, with error checking added, should then look like this:
+
+ $GetTempPath = new Win32::API('kernel32', 'GetTempPath', 'NP', 'N');
+ if(not defined $GetTempPath) {
+ die "Can't import API GetTempPath: $!\n";
+ }
+
+=back
+
+=head2 CALLING AN IMPORTED FUNCTION
+
+To effectively make a call to an imported function you must use the
+Call() method on the Win32::API object you created.
+Continuing with the example from the previous paragraph,
+the GetTempPath() API can be called using the method:
+
+ $GetTempPath->Call(...
+
+Of course, parameters have to be passed as defined in the import phase.
+In particular, if the number of parameters does not match (in the example,
+if GetTempPath() is called with more or less than two parameters),
+Perl will C<croak> an error message and C<die>.
+
+The two parameters needed here are the length of the buffer
+that will hold the returned temporary path, and a pointer to the
+buffer itself.
+For numerical parameters, you can use either a constant expression
+or a variable, while B<for pointers you must use a variable name> (no
+Perl references, just a plain variable name).
+Also note that B<memory must be allocated before calling the function>,
+just like in C.
+For example, to pass a buffer of 80 characters to GetTempPath(),
+it must be initialized before with:
+
+ $lpBuffer = " " x 80;
+
+This allocates a string of 80 characters. If you don't do so, you'll
+probably get C<Runtime exception> errors, and generally nothing will
+work. The call should therefore include:
+
+ $lpBuffer = " " x 80;
+ $GetTempPath->Call(80, $lpBuffer);
+
+And the result will be stored in the $lpBuffer variable.
+Note that you don't need to pass a reference to the variable
+(eg. you B<don't need> C<\$lpBuffer>), even if its value will be set
+by the function.
+
+A little problem here is that Perl does not trim the variable,
+so $lpBuffer will still contain 80 characters in return; the exceeding
+characters will be spaces, because we said C<" " x 80>.
+
+In this case we're lucky enough, because the value returned by
+the GetTempPath() function is the length of the string, so to get
+the actual temporary path we can write:
+
+ $lpBuffer = " " x 80;
+ $return = $GetTempPath->Call(80, $lpBuffer);
+ $TempPath = substr($lpBuffer, 0, $return);
+
+If you don't know the length of the string, you can usually
+cut it at the C<\0> (ASCII zero) character, which is the string
+delimiter in C:
+
+ $TempPath = ((split(/\0/, $lpBuffer))[0];
+ # or
+ $lpBuffer =~ s/\0.*$//;
+
+=head2 USING STRUCTURES
+
+Starting from version 0.40, Win32::API comes with a support package
+named Win32::API::Struct. The package is loaded automatically with
+Win32::API, so you don't need to use it explicitly.
+
+With this module you can conveniently define structures and use
+them as parameters to Win32::API functions. A short example follows:
+
+
+ # the 'POINT' structure is defined in C as:
+ # typedef struct {
+ # LONG x;
+ # LONG y;
+ # } POINT;
+
+
+ #### define the structure
+ Win32::API::Struct->typedef( POINT => qw{
+ LONG x;
+ LONG y;
+ });
+
+ #### import an API that uses this structure
+ Win32::API->Import('user32', 'BOOL GetCursorPos(LPPOINT lpPoint)');
+
+ #### create a 'POINT' object
+ my $pt = Win32::API::Struct->new('POINT');
+
+ #### call the function passing our structure object
+ GetCursorPos($pt);
+
+ #### and now, access its members
+ print "The cursor is at: $pt->{x}, $pt->{y}\n";
+
+Note that this works only when the function wants a
+B<pointer to a structure>: as you can see, our structure is named
+'POINT', but the API used 'LPPOINT'. 'LP' is automatically added at
+the beginning of the structure name when feeding it to a Win32::API
+call.
+
+For more information, see also L<Win32::API::Struct>.
+
+If you don't want (or can't) use the Win32::API::Struct facility,
+you can still use the low-level approach to use structures:
+
+
+=over 4
+
+=item 1.
+you have to pack() the required elements in a variable:
+
+ $lpPoint = pack('LL', 0, 0); # store two LONGs
+
+=item 2. to access the values stored in a structure, unpack() it as required:
+
+ ($x, $y) = unpack('LL', $lpPoint); # get the actual values
+
+=back
+
+
+The rest is left as an exercise to the reader...
+
+
+=head1 AUTHOR
+
+Aldo Calpini ( I<dada@perl.it> ).
+
+=cut
+
+
diff --git a/Master/xemtex/perl/site/lib/Win32/API/Struct.pm b/Master/xemtex/perl/site/lib/Win32/API/Struct.pm
new file mode 100644
index 00000000000..acd160a95a8
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Win32/API/Struct.pm
@@ -0,0 +1,528 @@
+package Win32::API::Struct;
+
+# See the bottom of this file for the POD documentation. Search for the
+# string '=head'.
+
+#######################################################################
+#
+# Win32::API::Struct - Perl Win32 API struct Facility
+#
+# Version: 0.40
+# Date: 07 Mar 2003
+# Author: Aldo Calpini <dada@perl.it>
+# $Id: Struct.pm,v 1.0 2001/10/30 13:57:31 dada Exp $
+#######################################################################
+
+$VERSION = "0.40";
+
+use Win32::API::Type;
+
+use Carp;
+
+require Exporter; # to export the constants to the main:: space
+require DynaLoader; # to dynuhlode the module.
+@ISA = qw( Exporter DynaLoader );
+
+my %Known = ();
+
+sub DEBUG {
+ if ($Win32::API::DEBUG) {
+ printf @_ if @_ or return 1;
+ } else {
+ return 0;
+ }
+}
+
+sub typedef {
+ my $class = shift;
+ my $struct = shift;
+ my($type, $name);
+ my $self = {
+ align => undef,
+ typedef => [],
+ };
+ while(defined($type = shift)) {
+ $name = shift;
+ $name =~ s/;$//;
+ push( @{ $self->{typedef} }, [ recognize($type, $name) ] );
+ }
+
+ $Known{$struct} = $self;
+ return 1;
+}
+
+
+sub recognize {
+ my($type, $name) = @_;
+ my($size, $packing);
+ if(exists $Known{$type}) {
+ $packing = ">";
+ return $name, $packing, $type;
+ } else {
+ $packing = Win32::API::Type::packing($type);
+ return undef unless defined $packing;
+ if($name =~ s/\[(.*)\]$//) {
+ $size = $1;
+ $packing = $packing."*".$size;
+ }
+ DEBUG "(PM)Struct::recognize got '$name', '$type' -> '$packing'\n";
+ return $name, $packing, $type;
+ }
+}
+
+sub new {
+ my $class = shift;
+ my($type, $name);
+ my $self = {
+ typedef => [],
+ };
+ if($#_ == 0) {
+ if(exists $Known{$_[0]}) {
+ DEBUG "(PM)Struct::new: got '$_[0]'\n";
+ $self->{typedef} = $Known{$_[0]}->{typedef};
+ foreach my $member (@{ $self->{typedef} }) {
+ ($name, $packing, $type) = @$member;
+ if($packing eq '>') {
+ $self->{$name} = Win32::API::Struct->new($type);
+ }
+ }
+ $self->{__typedef__} = $_[0];
+ } else {
+ carp "Unknown Win32::API::Struct '$_[0]'";
+ return undef;
+ }
+ } else {
+ while(defined($type = shift)) {
+ $name = shift;
+ # print "new: found member $name ($type)\n";
+ if(not exists $Win32::API::Type::Known{$type}) {
+ warn "Unknown Win32::API::Struct type '$type'";
+ return undef;
+ } else {
+ push( @{ $self->{typedef} }, [ $name, $Win32::API::Type::Known{$type}, $type ] );
+ }
+ }
+ }
+ return bless $self;
+}
+
+sub members {
+ my $self = shift;
+ return map {$_->[0]} @{ $self->{typedef} };
+}
+
+sub sizeof {
+ my $self = shift;
+ my $size = 0;
+ my $align = 0;
+ my $first = undef;
+ foreach my $member (@{ $self->{typedef} }) {
+ my($name, $packing, $type) = @$member;
+
+ if(ref( $self->{$name} ) eq "Win32::API::Struct") {
+ $size += $self->{$name}->sizeof();
+ # $align = $self->{$name}->sizeof() if $self->{$name}->sizeof() > $align;
+ } else {
+ if($packing =~ /\w\*(\d+)/) {
+ $size += Win32::API::Type::sizeof($type) * $1;
+ $first = Win32::API::Type::sizeof($type) * $1 unless defined $first;
+ DEBUG "(PM)Struct::sizeof: sizeof with member($name) now = ". $size. "\n";
+ } else {
+ $size += Win32::API::Type::sizeof($type);
+ $first = Win32::API::Type::sizeof($type) unless defined $first;
+ $align = Win32::API::Type::sizeof($type)
+ if Win32::API::Type::sizeof($type) > $align;
+ DEBUG "(PM)Struct::sizeof: sizeof with member($name) now = ". $size. "\n";
+ }
+ }
+ }
+ DEBUG "(PM)Struct::sizeof first=$first align=$align\n";
+ #DEBUG "(PM)Struct::sizeof returning %d\n", $first + (scalar(@{ $self->{typedef} })-1) * $align;
+ #return $first + (scalar(@{ $self->{typedef} })-1) * $align;
+ DEBUG "(PM)Struct::sizeof returning %d\n", scalar(@{ $self->{typedef} }) * $align;
+ if(defined $align and $align > 0) {
+ return scalar(@{ $self->{typedef} }) * $align;
+ } else {
+ return $size;
+ }
+ return $size;
+}
+
+sub align {
+ my $self = shift;
+ my $align = shift;
+
+ if(not defined $align) {
+ return $self->{align} unless $self->{align} eq 'auto';
+ $align = 0;
+ foreach my $member (@{ $self->{typedef} }) {
+ my($name, $packing, $type) = @$member;
+
+ if(ref( $self->{$name} ) eq "Win32::API::Struct") {
+ #### ????
+ } else {
+ if($packing =~ /\w\*(\d+)/) {
+ #### ????
+ } else {
+ $align = Win32::API::Type::sizeof($type)
+ if Win32::API::Type::sizeof($type) > $align;
+ }
+ }
+ }
+ return $align;
+ } else {
+ $self->{align} = $align;
+
+ }
+}
+
+sub getPack {
+ my $self = shift;
+ my $packing = "";
+ my($type, $name);
+ my @items = ();
+ my @recipients = ();
+
+ my $align = $self->align();
+
+ foreach my $member (@{ $self->{typedef} }) {
+ ($name, $type, $orig) = @$member;
+ if($type eq '>') {
+ my($subpacking, $subitems, $subrecipients) = $self->{$name}->getPack();
+
+ DEBUG "(PM)Struct::getPack($self->{__typedef__}) ++ $subpacking\n";
+
+ $packing .= $subpacking;
+ push(@items, @$subitems);
+ push(@recipients, @$subrecipients);
+ } else {
+ if($type =~ /\w\*(\d+)/) {
+ my $size = $1;
+ $type = "a$size";
+ }
+
+ DEBUG "(PM)Struct::getPack($self->{__typedef__}) ++ $type\n";
+
+ if($type eq 'p') {
+ $type = "L";
+ push(@items, Win32::API::PointerTo($self->{$name}));
+ } else {
+ push(@items, $self->{$name});
+ }
+ $packing .= $type;
+
+ if($Win32::API::Type::PackSize{$type} < $align) {
+ $packing .= ("x" x ($align - $Win32::API::Type::PackSize{$type}));
+ }
+
+ push(@recipients, $self);
+ }
+ }
+ DEBUG "(PM)Struct::getPack: $self->{__typedef__}(buffer) = pack($packing, @items)\n";
+ return($packing, [@items], [@recipients]);
+}
+
+
+sub Pack {
+ my $self = shift;
+ my($packing, $items, $recipients) = $self->getPack();
+ DEBUG "(PM)Struct::Pack: $self->{__typedef__}(buffer) = pack($packing, @$items)\n";
+ $self->{buffer} = pack($packing, @$items);
+ if(DEBUG) {
+ for my $i (0..$self->sizeof-1) {
+ printf " %3d: 0x%02x\n", $i, ord(substr($self->{buffer}, $i, 1));
+ }
+ }
+ $self->{buffer_recipients} = $recipients
+}
+
+sub getUnpack {
+ my $self = shift;
+ my $packing = "";
+ my($type, $name);
+ my @items = ();
+ my $align = $self->align();
+ foreach my $member (@{ $self->{typedef} }) {
+ ($name, $type, $orig) = @$member;
+ if($type eq '>') {
+ my($subpacking, @subitems) = $self->{$name}->getUnpack();
+
+ DEBUG "(PM)Struct::getUnpack($self->{__typedef__}) ++ $subpacking\n";
+ $packing .= $subpacking;
+
+
+ push(@items, @subitems);
+ } else {
+ if($type =~ /\w\*(\d+)/) {
+ my $size = $1;
+ $type = "Z$size";
+ }
+
+ #if($type eq 'p') {
+ # $packing .= 'Z*';
+ # DEBUG "(PM)Struct::getUnpack($self->{__typedef__}) ++ Z*\n";
+ #} else {
+ $packing .= $type;
+ DEBUG "(PM)Struct::getUnpack($self->{__typedef__}) ++ $type\n";
+ #}
+ if($type ne 'p' and $type !~ /^Z(\d+)/ and $Win32::API::Type::PackSize{$type} < $align) {
+ DEBUG "(PM)Struct::getUnpack %s(%d) < %d\n",
+ $type, $Win32::API::Type::PackSize{$type}, $align
+ ;
+ $packing .= ("x" x ($align - $Win32::API::Type::PackSize{$type}));
+ }
+
+ push(@items, $name);
+ }
+ }
+ DEBUG "(PM)Struct::getUnpack($self->{__typedef__}): unpack($packing, @items)\n";
+ return($packing, @items);
+}
+
+sub Unpack {
+ my $self = shift;
+ my($packing, @items) = $self->getUnpack();
+ my @itemvalue = unpack($packing, $self->{buffer});
+ DEBUG "(PM)Struct::Unpack: unpack($packing, buffer) = @itemvalue\n";
+ foreach my $i (0..$#items) {
+ my $recipient = $self->{buffer_recipients}->[$i];
+ DEBUG "(PM)Struct::Unpack: %s(%s) = '%s' (0x%08x)\n",
+ $recipient->{__typedef__},
+ $items[$i],
+ $itemvalue[$i],
+ $itemvalue[$i],
+ ;
+ $recipient->{$items[$i]} = $itemvalue[$i];
+ DEBUG "(PM)Struct::Unpack: self.$items[$i] = $self->{$items[$i]}\n";
+ }
+}
+
+sub FromMemory {
+ my($self, $addr) = @_;
+ DEBUG "(PM)Struct::FromMemory: doing Pack\n";
+ $self->Pack();
+ DEBUG "(PM)Struct::FromMemory: doing GetMemory( 0x%08x, %d )\n", $addr, $self->sizeof;
+ $self->{buffer} = Win32::API::ReadMemory( $addr, $self->sizeof );
+ $self->Unpack();
+ DEBUG "(PM)Struct::FromMemory: doing Unpack\n";
+ DEBUG "(PM)Struct::FromMemory: structure is now:\n";
+ $self->Dump() if DEBUG;
+ DEBUG "\n";
+}
+
+sub Dump {
+ my $self = shift;
+ my $prefix = shift;
+ foreach my $member (@{ $self->{typedef} }) {
+ ($name, $packing, $type) = @$member;
+ if( ref($self->{$name}) ) {
+ $self->{$name}->Dump($name);
+ } else {
+ printf "%-20s %-20s %-20s\n", $prefix, $name, $self->{$name};
+ }
+ }
+}
+
+
+sub is_known {
+ my $name = shift;
+ if(exists $Known{ $name }) {
+ return 1;
+ } else {
+ if($name =~ s/^LP//) {
+ return exists $Known{ $name };
+ }
+ return 0;
+ }
+}
+
+sub TIEHASH {
+ return Win32::API::Struct::new(@_);
+}
+
+sub EXISTS {
+
+}
+
+sub FETCH {
+ my $self = shift;
+ my $key = shift;
+
+ if($key eq 'sizeof') {
+ return $self->sizeof;
+ }
+ my @members = map { $_->[0] } @{ $self->{typedef} };
+ if(grep(/^\Q$key\E$/, @members)) {
+ return $self->{$key};
+ } else {
+ warn "'$key' is not a member of Win32::API::Struct $self->{__typedef__}";
+ }
+}
+
+sub STORE {
+ my $self = shift;
+ my($key, $val) = @_;
+ my @members = map { $_->[0] } @{ $self->{typedef} };
+ if(grep(/^\Q$key\E$/, @members)) {
+ $self->{$key} = $val;
+ } else {
+ warn "'$key' is not a member of Win32::API::Struct $self->{__typedef__}";
+ }
+}
+
+sub FIRSTKEY {
+ my $self = shift;
+ my @members = map { $_->[0] } @{ $self->{typedef} };
+ return $members[0];
+}
+
+sub NEXTKEY {
+ my $self = shift;
+ my $key = shift;
+ my @members = map { $_->[0] } @{ $self->{typedef} };
+ for my $i (0..$#members-1) {
+ return $members[$i+1] if $members[$i] eq $key;
+ }
+ return undef;
+}
+
+1;
+
+#######################################################################
+# DOCUMENTATION
+#
+
+=head1 NAME
+
+Win32::API::Struct - C struct support package for Win32::API
+
+=head1 SYNOPSIS
+
+ use Win32::API;
+
+ Win32::API::Struct->typedef( 'POINT', qw(
+ LONG x;
+ LONG y;
+ ));
+
+ my $Point = Win32::API::Struct->new( 'POINT' );
+ $Point->{x} = 1024;
+ $Point->{y} = 768;
+
+ #### alternatively
+
+ tie %Point, 'Win32::API::Struct', 'POINT';
+ $Point{x} = 1024;
+ $Point{y} = 768;
+
+
+=head1 ABSTRACT
+
+This module enables you to define C structs for use with
+Win32::API.
+
+See L<Win32::API> for more info about its usage.
+
+=head1 DESCRIPTION
+
+This module is automatically imported by Win32::API, so you don't
+need to 'use' it explicitly. The main methods are C<typedef> and
+C<new>, which are documented below.
+
+=over 4
+
+=item C<typedef NAME, TYPE, MEMBER, TYPE, MEMBER, ...>
+
+This method defines a structure named C<NAME>. The definition consists
+of types and member names, just like in C. In fact, most of the
+times you can cut the C definition for a structure and paste it
+verbatim to your script, enclosing it in a C<qw()> block. The
+function takes care of removing the semicolon after the member
+name.
+
+The synopsis example could be written like this:
+
+ Win32::API::Struct->typedef('POINT', 'LONG', 'x', 'LONG', 'y');
+
+But it could also be written like this (note the indirect object
+syntax), which is pretty cool:
+
+ typedef Win32::API::Struct POINT => qw{
+ LONG x;
+ LONG y;
+ };
+
+Also note that C<typedef> automatically defines an 'LPNAME' type,
+which holds a pointer to your structure. In the example above,
+'LPPOINT' is also defined and can be used in a call to a
+Win32::API (in fact, this is what you're really going to use when
+doing API calls).
+
+=item C<new NAME>
+
+This creates a structure (a Win32::API::Struct object) of the
+type C<NAME> (it must have been defined with C<typedef>). In Perl,
+when you create a structure, all the members are undefined. But
+when you use that structure in C (eg. a Win32::API call), you
+can safely assume that they will be treated as zero (or NULL).
+
+=item C<sizeof>
+
+This returns the size, in bytes, of the structure. Acts just like
+the C function of the same name. It is particularly useful for
+structures that need a member to be initialized to the structure's
+own size.
+
+=item C<align [SIZE]>
+
+Sets or returns the structure alignment (eg. how the structure is
+stored in memory). This is a very advanced option, and you normally
+don't need to mess with it.
+All structures in the Win32 Platform SDK should work without it.
+But if you define your own structure, you may need to give it an
+explicit alignment. In most cases, passing a C<SIZE> of 'auto'
+should keep the world happy.
+
+=back
+
+=head2 THE C<tie> INTERFACE
+
+Instead of creating an object with the C<new> method, you can
+tie a hash, which will hold the desired structure, using the
+C<tie> builtin function:
+
+ tie %structure, Win32::API::Struct => 'NAME';
+
+The differences between the tied and non-tied approaches are:
+
+=over 4
+
+=item *
+with tied structures, you can access members directly as
+hash lookups, eg.
+
+ # tied # non-tied
+ $Point{x} vs. $Point->{x}
+
+=item *
+with tied structures, when you try to fetch or store a
+member that is not part of the structure, it will result
+in a warning, eg.
+
+ print $Point{z};
+ # this will warn: 'z' is not a member of Win32::API::Struct POINT
+
+=item *
+when you pass a tied structure as a Win32::API parameter,
+remember to backslash it, eg.
+
+ # tied # non-tied
+ GetCursorPos( \%Point ) vs. GetCursorPos( $Point )
+
+=back
+
+=head1 AUTHOR
+
+Aldo Calpini ( I<dada@perl.it> ).
+
+=cut
diff --git a/Master/xemtex/perl/site/lib/Win32/API/Type.pm b/Master/xemtex/perl/site/lib/Win32/API/Type.pm
new file mode 100644
index 00000000000..9ebe9ff57dc
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/Win32/API/Type.pm
@@ -0,0 +1,440 @@
+package Win32::API::Type;
+
+# See the bottom of this file for the POD documentation. Search for the
+# string '=head'.
+
+#######################################################################
+#
+# Win32::API::Type - Perl Win32 API type definitions
+#
+# Version: 0.40
+# Date: 07 Mar 2003
+# Author: Aldo Calpini <dada@perl.it>
+# $Id: Type.pm,v 1.0 2001/10/30 13:57:31 dada Exp $
+#######################################################################
+
+$VERSION = "0.40";
+
+use Carp;
+
+require Exporter; # to export the constants to the main:: space
+require DynaLoader; # to dynuhlode the module.
+@ISA = qw( Exporter DynaLoader );
+
+use vars qw( %Known %PackSize %Modifier %Pointer );
+
+sub DEBUG {
+ if ($Win32::API::DEBUG) {
+ printf @_ if @_ or return 1;
+ } else {
+ return 0;
+ }
+}
+
+%Known = ();
+%PackSize = ();
+%Modifier = ();
+%Pointer = ();
+
+INIT {
+ my $section = 'nothing';
+ foreach (<DATA>) {
+ next if /^\s*#/ or /^\s*$/;
+ chomp;
+ if( /\[(.+)\]/) {
+ $section = $1;
+ next;
+ }
+ if($section eq 'TYPE') {
+ my($name, $packing) = split(/\s+/);
+ # DEBUG "(PM)Type::INIT: Known('$name') => '$packing'\n";
+ $Known{$name} = $packing;
+ } elsif($section eq 'PACKSIZE') {
+ my($packing, $size) = split(/\s+/);
+ # DEBUG "(PM)Type::INIT: PackSize('$packing') => '$size'\n";
+ $PackSize{$packing} = $size;
+ } elsif($section eq 'MODIFIER') {
+ my($modifier, $mapto) = split(/\s+/, $_, 2);
+ my %maps = ();
+ foreach my $item (split(/\s+/, $mapto)) {
+ my($k, $v) = split(/=/, $item);
+ $maps{$k} = $v;
+ }
+ # DEBUG "(PM)Type::INIT: Modifier('$modifier') => '%maps'\n";
+ $Modifier{$modifier} = { %maps };
+ } elsif($section eq 'POINTER') {
+ my($pointer, $pointto) = split(/\s+/);
+ # DEBUG "(PM)Type::INIT: Pointer('$pointer') => '$pointto'\n";
+ $Pointer{$pointer} = $pointto;
+ }
+ }
+}
+
+sub new {
+ my $class = shift;
+ my($type) = @_;
+ my $packing = packing($type);
+ my $size = sizeof($type);
+ my $self = {
+ type => $type,
+ packing => $packing,
+ size => $size,
+ };
+ return bless $self;
+}
+
+sub typedef {
+ my $class = shift;
+ my($name, $type) = @_;
+ my $packing = packing($type, $name);
+ DEBUG "(PM)Type::typedef: packing='$packing'\n";
+ my $size = sizeof($type);
+ $Known{$name} = $packing;
+ return 1;
+}
+
+
+sub is_known {
+ my $self = shift;
+ my $type = shift;
+ $type = $self unless defined $type;
+ if(ref($type) =~ /Win32::API::Type/) {
+ return 1;
+ } else {
+ return defined packing($type);
+ }
+}
+
+sub sizeof {
+ my $self = shift;
+ my $type = shift;
+ $type = $self unless defined $type;
+ if(ref($type) =~ /Win32::API::Type/) {
+ return $self->{size};
+ } else {
+ my $packing = packing($type);
+ if($packing =~ /(\w)\*(\d+)/) {
+ return $PackSize{ $1 } * $2;
+ } else {
+ return $PackSize{ $packing };
+ }
+ }
+}
+
+sub packing {
+ # DEBUG "(PM)Type::packing: called by ". join("::", (caller(1))[0,3]). "\n";
+ my $self = shift;
+ my $is_pointer = 0;
+ if(ref($self) =~ /Win32::API::Type/) {
+ # DEBUG "(PM)Type::packing: got an object\n";
+ return $self->{packing};
+ }
+ my $type = ($self eq 'Win32::API::Type') ? shift : $self;
+ my $name = shift;
+
+ # DEBUG "(PM)Type::packing: got '$type', '$name'\n";
+ my($modifier, $size, $packing);
+ if(exists $Pointer{$type}) {
+ # DEBUG "(PM)Type::packing: got '$type', is really '$Pointer{$type}'\n";
+ $type = $Pointer{$type};
+ $is_pointer = 1;
+ } elsif($type =~ /(\w+)\s+(\w+)/) {
+ $modifier = $1;
+ $type = $2;
+ # DEBUG "(PM)packing: got modifier '$modifier', type '$type'\n";
+ }
+
+ $type =~ s/\*$//;
+
+ if(exists $Known{$type}) {
+ if(defined $name and $name =~ s/\[(.*)\]$//) {
+ $size = $1;
+ $packing = $Known{$type}[0]."*".$size;
+ # DEBUG "(PM)Type::packing: composite packing: '$packing' '$size'\n";
+ } else {
+ $packing = $Known{$type};
+ if($is_pointer and $packing eq 'c') {
+ $packing = "p";
+ }
+ # DEBUG "(PM)Type::packing: simple packing: '$packing'\n";
+ }
+ if(defined $modifier and exists $Modifier{$modifier}->{$type}) {
+ # DEBUG "(PM)Type::packing: applying modifier '$modifier' -> '$Modifier{$modifier}->{$type}'\n";
+ $packing = $Modifier{$modifier}->{$type};
+ }
+ return $packing;
+ } else {
+ # DEBUG "(PM)Type::packing: NOT FOUND\n";
+ return undef;
+ }
+}
+
+
+sub is_pointer {
+ my $self = shift;
+ my $type = shift;
+ $type = $self unless defined $type;
+ if(ref($type) =~ /Win32::API::Type/) {
+ return 1;
+ } else {
+ if($type =~ /\*$/) {
+ return 1;
+ } else {
+ return exists $Pointer{$type};
+ }
+ }
+}
+
+sub Pack {
+ my $type = $_[0];
+
+ if(packing($type) eq 'c' and is_pointer($type)) {
+ $_[1] = pack("Z*", $_[1]);
+ return $_[1];
+ }
+ $_[1] = pack( packing($type), $_[1]);
+ return $_[1];
+}
+
+sub Unpack {
+ my $type = $_[0];
+ if(packing($type) eq 'c' and is_pointer($type)) {
+ DEBUG "(PM)Type::Unpack: got packing 'c', is a pointer, unpacking 'Z*' '$_[1]'\n";
+ $_[1] = unpack("Z*", $_[1]);
+ DEBUG "(PM)Type::Unpack: returning '$_[1]'\n";
+ return $_[1];
+ }
+ DEBUG "(PM)Type::Unpack: unpacking '".packing($type)."' '$_[1]'\n";
+ $_[1] = unpack( packing($type), $_[1]);
+ DEBUG "(PM)Type::Unpack: returning '$_[1]'\n";
+ return $_[1];
+}
+
+1;
+
+#######################################################################
+# DOCUMENTATION
+#
+
+=head1 NAME
+
+Win32::API::Type - C type support package for Win32::API
+
+=head1 SYNOPSIS
+
+ use Win32::API;
+
+ Win32::API::Type->typedef( 'my_number', 'LONG' );
+
+
+=head1 ABSTRACT
+
+This module is a support package for Win32::API that implements
+C types for the import with prototype functionality.
+
+See L<Win32::API> for more info about its usage.
+
+=head1 DESCRIPTION
+
+This module is automatically imported by Win32::API, so you don't
+need to 'use' it explicitly. These are the methods of this package:
+
+=over 4
+
+=item C<typedef NAME, TYPE>
+
+This method defines a new type named C<NAME>. This actually just
+creates an alias for the already-defined type C<TYPE>, which you
+can use as a parameter in a Win32::API call.
+
+=item C<sizeof TYPE>
+
+This returns the size, in bytes, of C<TYPE>. Acts just like
+the C function of the same name.
+
+=item C<is_known TYPE>
+
+Returns true if C<TYPE> is known by Win32::API::Type, false
+otherwise.
+
+=back
+
+=head2 SUPPORTED TYPES
+
+This module should recognize all the types defined in the
+Win32 Platform SDK header files.
+Please see the source for this module, in the C<__DATA__> section,
+for the full list.
+
+=head1 AUTHOR
+
+Aldo Calpini ( I<dada@perl.it> ).
+
+=cut
+
+
+__DATA__
+
+[TYPE]
+ATOM s
+BOOL L
+BOOLEAN c
+BYTE C
+CHAR c
+COLORREF L
+DWORD L
+DWORD32 L
+DWORD64 Q
+FLOAT f
+HACCEL L
+HANDLE L
+HBITMAP L
+HBRUSH L
+HCOLORSPACE L
+HCONV L
+HCONVLIST L
+HCURSOR L
+HDC L
+HDDEDATA L
+HDESK L
+HDROP L
+HDWP L
+HENHMETAFILE L
+HFILE L
+HFONT L
+HGDIOBJ L
+HGLOBAL L
+HHOOK L
+HICON L
+HIMC L
+HINSTANCE L
+HKEY L
+HKL L
+HLOCAL L
+HMENU L
+HMETAFILE L
+HMODULE L
+HPALETTE L
+HPEN L
+HRGN L
+HRSRC L
+HSZ L
+HWINSTA L
+HWND L
+INT i
+INT32 i
+INT64 q
+LANGID s
+LCID L
+LCSCSTYPE L
+LCSGAMUTMATCH L
+LCTYPE L
+LONG l
+LONG32 l
+LONG64 q
+LONGLONG q
+LPARAM L
+LRESULT L
+REGSAM L
+SC_HANDLE L
+SC_LOCK L
+SERVICE_STATUS_HANDLE L
+SHORT s
+SIZE_T L
+SSIZE_T L
+TBYTE c
+TCHAR C
+UCHAR C
+UINT I
+UINT_PTR L
+UINT32 I
+UINT64 Q
+ULONG L
+ULONG32 L
+ULONG64 Q
+ULONGLONG Q
+USHORT S
+WCHAR S
+WORD S
+WPARAM L
+VOID c
+
+int i
+long l
+float f
+double d
+char c
+
+#CRITICAL_SECTION 24 -- a structure
+#LUID ? 8 -- a structure
+#VOID 0
+#CONST 4
+#FILE_SEGMENT_ELEMENT 8 -- a structure
+
+[PACKSIZE]
+c 1
+C 1
+d 8
+f 4
+i 4
+I 4
+l 4
+L 4
+q 8
+Q 8
+s 2
+S 2
+p 4
+
+[MODIFIER]
+unsigned int=I long=L short=S char=C
+
+[POINTER]
+INT_PTR INT
+LPBOOL BOOL
+LPBYTE BYTE
+LPCOLORREF COLORREF
+LPCSTR CHAR
+#LPCTSTR CHAR or WCHAR
+LPCTSTR CHAR
+LPCVOID any
+LPCWSTR WCHAR
+LPDWORD DWORD
+LPHANDLE HANDLE
+LPINT INT
+LPLONG LONG
+LPSTR CHAR
+#LPTSTR CHAR or WCHAR
+LPTSTR CHAR
+LPVOID VOID
+LPWORD WORD
+LPWSTR WCHAR
+
+PBOOL BOOL
+PBOOLEAN BOOL
+PBYTE BYTE
+PCHAR CHAR
+PCSTR CSTR
+PCWCH CWCH
+PCWSTR CWSTR
+PDWORD DWORD
+PFLOAT FLOAT
+PHANDLE HANDLE
+PHKEY HKEY
+PINT INT
+PLCID LCID
+PLONG LONG
+PSHORT SHORT
+PSTR CHAR
+#PTBYTE TBYTE --
+#PTCHAR TCHAR --
+#PTSTR CHAR or WCHAR
+PTSTR CHAR
+PUCHAR UCHAR
+PUINT UINT
+PULONG ULONG
+PUSHORT USHORT
+PVOID VOID
+PWCHAR WCHAR
+PWORD WORD
+PWSTR WCHAR
diff --git a/Master/xemtex/perl/site/lib/XML/Parser.pm b/Master/xemtex/perl/site/lib/XML/Parser.pm
new file mode 100644
index 00000000000..f150b615a2d
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/XML/Parser.pm
@@ -0,0 +1,1089 @@
+# XML::Parser
+#
+# Copyright (c) 1998-2000 Larry Wall and Clark Cooper
+# All rights reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package XML::Parser;
+
+use Carp;
+use IO::File;
+
+BEGIN {
+ require XML::Parser::Expat;
+ $VERSION = '2.31';
+ die "Parser.pm and Expat.pm versions don't match"
+ unless $VERSION eq $XML::Parser::Expat::VERSION;
+}
+
+use strict;
+
+use vars qw($VERSION %Built_In_Styles $LWP_load_failed);
+
+$LWP_load_failed = 0;
+
+sub new {
+ my ($class, %args) = @_;
+ my $style = $args{Style};
+
+ my $nonexopt = $args{Non_Expat_Options} ||= {};
+
+ $nonexopt->{Style} = 1;
+ $nonexopt->{Non_Expat_Options} = 1;
+ $nonexopt->{Handlers} = 1;
+ $nonexopt->{_HNDL_TYPES} = 1;
+ $nonexopt->{NoLWP} = 1;
+
+ $args{NoLWP} = 1;
+
+ $args{_HNDL_TYPES} = {%XML::Parser::Expat::Handler_Setters};
+ $args{_HNDL_TYPES}->{Init} = 1;
+ $args{_HNDL_TYPES}->{Final} = 1;
+
+ $args{Handlers} ||= {};
+ my $handlers = $args{Handlers};
+
+ if (defined($style)) {
+ my $stylepkg = $style;
+
+ if ($stylepkg !~ /::/) {
+ $stylepkg = "\u$style";
+
+ # I'm using the Built_In_Styles hash to define
+ # valid internal styles, since a style doesn't
+ # need to define any particular Handler to be valid.
+ # So I can't check for the existence of a particular sub.
+
+ croak "Undefined style: $style"
+ unless defined($Built_In_Styles{$stylepkg});
+ $stylepkg = 'XML::Parser::' . $stylepkg;
+ }
+
+ my $htype;
+ foreach $htype (keys %{$args{_HNDL_TYPES}}) {
+ # Handlers explicity given override
+ # handlers from the Style package
+ unless (defined($handlers->{$htype})) {
+
+ # A handler in the style package must either have
+ # exactly the right case as the type name or a
+ # completely lower case version of it.
+
+ my $hname = "${stylepkg}::$htype";
+ if (defined(&$hname)) {
+ $handlers->{$htype} = \&$hname;
+ next;
+ }
+
+ $hname = "${stylepkg}::\L$htype";
+ if (defined(&$hname)) {
+ $handlers->{$htype} = \&$hname;
+ next;
+ }
+ }
+ }
+ }
+
+ unless (defined($handlers->{ExternEnt})
+ or defined ($handlers->{ExternEntFin})) {
+
+ if ($args{NoLWP} or $LWP_load_failed) {
+ $handlers->{ExternEnt} = \&file_ext_ent_handler;
+ $handlers->{ExternEntFin} = \&file_ext_ent_cleanup;
+ }
+ else {
+ # The following just bootstraps the real LWP external entity
+ # handler
+
+ $handlers->{ExternEnt} = \&initial_ext_ent_handler;
+
+ # No cleanup function available until LWPExternEnt.pl loaded
+ }
+ }
+
+ $args{Pkg} ||= caller;
+ bless \%args, $class;
+} # End of new
+
+sub setHandlers {
+ my ($self, @handler_pairs) = @_;
+
+ croak("Uneven number of arguments to setHandlers method")
+ if (int(@handler_pairs) & 1);
+
+ my @ret;
+ while (@handler_pairs) {
+ my $type = shift @handler_pairs;
+ my $handler = shift @handler_pairs;
+ unless (defined($self->{_HNDL_TYPES}->{$type})) {
+ my @types = sort keys %{$self->{_HNDL_TYPES}};
+
+ croak("Unknown Parser handler type: $type\n Valid types: @types");
+ }
+ push(@ret, $type, $self->{Handlers}->{$type});
+ $self->{Handlers}->{$type} = $handler;
+ }
+
+ return @ret;
+} # End of setHandlers
+
+sub parse_start {
+ my $self = shift;
+ my @expat_options = ();
+
+ my ($key, $val);
+ while (($key, $val) = each %{$self}) {
+ push (@expat_options, $key, $val)
+ unless exists $self->{Non_Expat_Options}->{$key};
+ }
+
+ my %handlers = %{$self->{Handlers}};
+ my $init = delete $handlers{Init};
+ my $final = delete $handlers{Final};
+
+ my $expatnb = new XML::Parser::ExpatNB(@expat_options, @_);
+ $expatnb->setHandlers(%handlers);
+
+ &$init($expatnb)
+ if defined($init);
+
+ $expatnb->{_State_} = 1;
+
+ $expatnb->{FinalHandler} = $final
+ if defined($final);
+
+ return $expatnb;
+}
+
+sub parse {
+ my $self = shift;
+ my $arg = shift;
+ my @expat_options = ();
+ my ($key, $val);
+ while (($key, $val) = each %{$self}) {
+ push(@expat_options, $key, $val)
+ unless exists $self->{Non_Expat_Options}->{$key};
+ }
+
+ my $expat = new XML::Parser::Expat(@expat_options, @_);
+ my %handlers = %{$self->{Handlers}};
+ my $init = delete $handlers{Init};
+ my $final = delete $handlers{Final};
+
+ $expat->setHandlers(%handlers);
+
+ if ($self->{Base}) {
+ $expat->base($self->{Base});
+ }
+
+ &$init($expat)
+ if defined($init);
+
+ my @result = ();
+ my $result;
+ eval {
+ $result = $expat->parse($arg);
+ };
+ my $err = $@;
+ if ($err) {
+ $expat->release;
+ die $err;
+ }
+
+ if ($result and defined($final)) {
+ if (wantarray) {
+ @result = &$final($expat);
+ }
+ else {
+ $result = &$final($expat);
+ }
+ }
+
+ $expat->release;
+
+ return unless defined wantarray;
+ return wantarray ? @result : $result;
+} # End of parse
+
+sub parsestring {
+ my $self = shift;
+ $self->parse(@_);
+} # End of parsestring
+
+sub parsefile {
+ my $self = shift;
+ my $file = shift;
+ local(*FILE);
+ open(FILE, $file) or croak "Couldn't open $file:\n$!";
+ binmode(FILE);
+ my @ret;
+ my $ret;
+
+ $self->{Base} = $file;
+
+ if (wantarray) {
+ eval {
+ @ret = $self->parse(*FILE, @_);
+ };
+ }
+ else {
+ eval {
+ $ret = $self->parse(*FILE, @_);
+ };
+ }
+ my $err = $@;
+ close(FILE);
+ die $err if $err;
+
+ return unless defined wantarray;
+ return wantarray ? @ret : $ret;
+} # End of parsefile
+
+
+sub initial_ext_ent_handler {
+ # This just bootstraps in the real lwp_ext_ent_handler which
+ # also loads the URI and LWP modules.
+
+ unless ($LWP_load_failed) {
+ local($^W) = 0;
+
+ my $stat =
+ eval {
+ require('XML/Parser/LWPExternEnt.pl');
+ };
+
+ if ($stat) {
+ $_[0]->setHandlers(ExternEnt => \&lwp_ext_ent_handler,
+ ExternEntFin => \&lwp_ext_ent_cleanup);
+
+ goto &lwp_ext_ent_handler;
+ }
+
+ # Failed to load lwp handler, act as if NoLWP
+
+ $LWP_load_failed = 1;
+
+ my $cmsg = "Couldn't load LWP based external entity handler\n";
+ $cmsg .= "Switching to file-based external entity handler\n";
+ $cmsg .= " (To avoid this message, use NoLWP option to XML::Parser)\n";
+ warn($cmsg);
+ }
+
+ $_[0]->setHandlers(ExternEnt => \&file_ext_ent_handler,
+ ExternEntFin => \&file_ext_ent_cleanup);
+ goto &file_ext_ent_handler;
+
+} # End initial_ext_ent_handler
+
+sub file_ext_ent_handler {
+ my ($xp, $base, $path) = @_;
+
+ # Prepend base only for relative paths
+
+ if (defined($base)
+ and not ($path =~ m!^(?:[\\/]|\w+:)!))
+ {
+ my $newpath = $base;
+ $newpath =~ s![^\\/:]*$!$path!;
+ $path = $newpath;
+ }
+
+ if ($path =~ /^\s*[|>+]/
+ or $path =~ /\|\s*$/) {
+ $xp->{ErrorMessage}
+ .= "System ID ($path) contains Perl IO control characters";
+ return undef;
+ }
+
+ my $fh = new IO::File($path);
+ unless (defined $fh) {
+ $xp->{ErrorMessage}
+ .= "Failed to open $path:\n$!";
+ return undef;
+ }
+
+ $xp->{_BaseStack} ||= [];
+ $xp->{_FhStack} ||= [];
+
+ push(@{$xp->{_BaseStack}}, $base);
+ push(@{$xp->{_FhStack}}, $fh);
+
+ $xp->base($path);
+
+ return $fh;
+} # End file_ext_ent_handler
+
+sub file_ext_ent_cleanup {
+ my ($xp) = @_;
+
+ my $fh = pop(@{$xp->{_FhStack}});
+ $fh->close;
+
+ my $base = pop(@{$xp->{_BaseStack}});
+ $xp->base($base);
+} # End file_ext_ent_cleanup
+
+###################################################################
+
+package XML::Parser::Debug;
+$XML::Parser::Built_In_Styles{Debug} = 1;
+
+sub Start {
+ my $expat = shift;
+ my $tag = shift;
+ print STDERR "@{$expat->{Context}} \\\\ (@_)\n";
+}
+
+sub End {
+ my $expat = shift;
+ my $tag = shift;
+ print STDERR "@{$expat->{Context}} //\n";
+}
+
+sub Char {
+ my $expat = shift;
+ my $text = shift;
+ $text =~ s/([\x80-\xff])/sprintf "#x%X;", ord $1/eg;
+ $text =~ s/([\t\n])/sprintf "#%d;", ord $1/eg;
+ print STDERR "@{$expat->{Context}} || $text\n";
+}
+
+sub Proc {
+ my $expat = shift;
+ my $target = shift;
+ my $text = shift;
+ my @foo = @{$expat->{Context}};
+ print STDERR "@foo $target($text)\n";
+}
+
+###################################################################
+
+package XML::Parser::Subs;
+$XML::Parser::Built_In_Styles{Subs} = 1;
+
+sub Start {
+ no strict 'refs';
+ my $expat = shift;
+ my $tag = shift;
+ my $sub = $expat->{Pkg} . "::$tag";
+ eval { &$sub($expat, $tag, @_) };
+}
+
+sub End {
+ no strict 'refs';
+ my $expat = shift;
+ my $tag = shift;
+ my $sub = $expat->{Pkg} . "::${tag}_";
+ eval { &$sub($expat, $tag) };
+}
+
+###################################################################
+
+package XML::Parser::Tree;
+$XML::Parser::Built_In_Styles{Tree} = 1;
+
+sub Init {
+ my $expat = shift;
+ $expat->{Lists} = [];
+ $expat->{Curlist} = $expat->{Tree} = [];
+}
+
+sub Start {
+ my $expat = shift;
+ my $tag = shift;
+ my $newlist = [ { @_ } ];
+ push @{ $expat->{Lists} }, $expat->{Curlist};
+ push @{ $expat->{Curlist} }, $tag => $newlist;
+ $expat->{Curlist} = $newlist;
+}
+
+sub End {
+ my $expat = shift;
+ my $tag = shift;
+ $expat->{Curlist} = pop @{ $expat->{Lists} };
+}
+
+sub Char {
+ my $expat = shift;
+ my $text = shift;
+ my $clist = $expat->{Curlist};
+ my $pos = $#$clist;
+
+ if ($pos > 0 and $clist->[$pos - 1] eq '0') {
+ $clist->[$pos] .= $text;
+ } else {
+ push @$clist, 0 => $text;
+ }
+}
+
+sub Final {
+ my $expat = shift;
+ delete $expat->{Curlist};
+ delete $expat->{Lists};
+ $expat->{Tree};
+}
+
+###################################################################
+
+package XML::Parser::Objects;
+$XML::Parser::Built_In_Styles{Objects} = 1;
+
+sub Init {
+ my $expat = shift;
+ $expat->{Lists} = [];
+ $expat->{Curlist} = $expat->{Tree} = [];
+}
+
+sub Start {
+ my $expat = shift;
+ my $tag = shift;
+ my $newlist = [ ];
+ my $class = "${$expat}{Pkg}::$tag";
+ my $newobj = bless { @_, Kids => $newlist }, $class;
+ push @{ $expat->{Lists} }, $expat->{Curlist};
+ push @{ $expat->{Curlist} }, $newobj;
+ $expat->{Curlist} = $newlist;
+}
+
+sub End {
+ my $expat = shift;
+ my $tag = shift;
+ $expat->{Curlist} = pop @{ $expat->{Lists} };
+}
+
+sub Char {
+ my $expat = shift;
+ my $text = shift;
+ my $class = "${$expat}{Pkg}::Characters";
+ my $clist = $expat->{Curlist};
+ my $pos = $#$clist;
+
+ if ($pos >= 0 and ref($clist->[$pos]) eq $class) {
+ $clist->[$pos]->{Text} .= $text;
+ } else {
+ push @$clist, bless { Text => $text }, $class;
+ }
+}
+
+sub Final {
+ my $expat = shift;
+ delete $expat->{Curlist};
+ delete $expat->{Lists};
+ $expat->{Tree};
+}
+
+################################################################
+
+package XML::Parser::Stream;
+$XML::Parser::Built_In_Styles{Stream} = 1;
+
+# This style invented by Tim Bray <tbray@textuality.com>
+
+sub Init {
+ no strict 'refs';
+ my $expat = shift;
+ $expat->{Text} = '';
+ my $sub = $expat->{Pkg} ."::StartDocument";
+ &$sub($expat)
+ if defined(&$sub);
+}
+
+sub Start {
+ no strict 'refs';
+ my $expat = shift;
+ my $type = shift;
+
+ doText($expat);
+ $_ = "<$type";
+
+ %_ = @_;
+ while (@_) {
+ $_ .= ' ' . shift() . '="' . shift() . '"';
+ }
+ $_ .= '>';
+
+ my $sub = $expat->{Pkg} . "::StartTag";
+ if (defined(&$sub)) {
+ &$sub($expat, $type);
+ } else {
+ print;
+ }
+}
+
+sub End {
+ no strict 'refs';
+ my $expat = shift;
+ my $type = shift;
+
+ # Set right context for Text handler
+ push(@{$expat->{Context}}, $type);
+ doText($expat);
+ pop(@{$expat->{Context}});
+
+ $_ = "</$type>";
+
+ my $sub = $expat->{Pkg} . "::EndTag";
+ if (defined(&$sub)) {
+ &$sub($expat, $type);
+ } else {
+ print;
+ }
+}
+
+sub Char {
+ my $expat = shift;
+ $expat->{Text} .= shift;
+}
+
+sub Proc {
+ no strict 'refs';
+ my $expat = shift;
+ my $target = shift;
+ my $text = shift;
+
+ doText($expat);
+
+ $_ = "<?$target $text?>";
+
+ my $sub = $expat->{Pkg} . "::PI";
+ if (defined(&$sub)) {
+ &$sub($expat, $target, $text);
+ } else {
+ print;
+ }
+}
+
+sub Final {
+ no strict 'refs';
+ my $expat = shift;
+ my $sub = $expat->{Pkg} . "::EndDocument";
+ &$sub($expat)
+ if defined(&$sub);
+}
+
+sub doText {
+ no strict 'refs';
+ my $expat = shift;
+ $_ = $expat->{Text};
+
+ if (length($_)) {
+ my $sub = $expat->{Pkg} . "::Text";
+ if (defined(&$sub)) {
+ &$sub($expat);
+ } else {
+ print;
+ }
+
+ $expat->{Text} = '';
+ }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+XML::Parser - A perl module for parsing XML documents
+
+=head1 SYNOPSIS
+
+ use XML::Parser;
+
+ $p1 = new XML::Parser(Style => 'Debug');
+ $p1->parsefile('REC-xml-19980210.xml');
+ $p1->parse('<foo id="me">Hello World</foo>');
+
+ # Alternative
+ $p2 = new XML::Parser(Handlers => {Start => \&handle_start,
+ End => \&handle_end,
+ Char => \&handle_char});
+ $p2->parse($socket);
+
+ # Another alternative
+ $p3 = new XML::Parser(ErrorContext => 2);
+
+ $p3->setHandlers(Char => \&text,
+ Default => \&other);
+
+ open(FOO, 'xmlgenerator |');
+ $p3->parse(*FOO, ProtocolEncoding => 'ISO-8859-1');
+ close(FOO);
+
+ $p3->parsefile('junk.xml', ErrorContext => 3);
+
+=begin man
+.ds PI PI
+
+=end man
+
+=head1 DESCRIPTION
+
+This module provides ways to parse XML documents. It is built on top of
+L<XML::Parser::Expat>, which is a lower level interface to James Clark's
+expat library. Each call to one of the parsing methods creates a new
+instance of XML::Parser::Expat which is then used to parse the document.
+Expat options may be provided when the XML::Parser object is created.
+These options are then passed on to the Expat object on each parse call.
+They can also be given as extra arguments to the parse methods, in which
+case they override options given at XML::Parser creation time.
+
+The behavior of the parser is controlled either by C<L</Style>> and/or
+C<L</Handlers>> options, or by L</setHandlers> method. These all provide
+mechanisms for XML::Parser to set the handlers needed by XML::Parser::Expat.
+If neither C<Style> nor C<Handlers> are specified, then parsing just
+checks the document for being well-formed.
+
+When underlying handlers get called, they receive as their first parameter
+the I<Expat> object, not the Parser object.
+
+=head1 METHODS
+
+=over 4
+
+=item new
+
+This is a class method, the constructor for XML::Parser. Options are passed
+as keyword value pairs. Recognized options are:
+
+=over 4
+
+=item * Style
+
+This option provides an easy way to create a given style of parser. The
+built in styles are: L<"Debug">, L<"Subs">, L<"Tree">, L<"Objects">,
+and L<"Stream">.
+Custom styles can be provided by giving a full package name containing
+at least one '::'. This package should then have subs defined for each
+handler it wishes to have installed. See L<"STYLES"> below
+for a discussion of each built in style.
+
+=item * Handlers
+
+When provided, this option should be an anonymous hash containing as
+keys the type of handler and as values a sub reference to handle that
+type of event. All the handlers get passed as their 1st parameter the
+instance of expat that is parsing the document. Further details on
+handlers can be found in L<"HANDLERS">. Any handler set here
+overrides the corresponding handler set with the Style option.
+
+=item * Pkg
+
+Some styles will refer to subs defined in this package. If not provided,
+it defaults to the package which called the constructor.
+
+=item * ErrorContext
+
+This is an Expat option. When this option is defined, errors are reported
+in context. The value should be the number of lines to show on either side
+of the line in which the error occurred.
+
+=item * ProtocolEncoding
+
+This is an Expat option. This sets the protocol encoding name. It defaults
+to none. The built-in encodings are: C<UTF-8>, C<ISO-8859-1>, C<UTF-16>, and
+C<US-ASCII>. Other encodings may be used if they have encoding maps in one
+of the directories in the @Encoding_Path list. Check L<"ENCODINGS"> for
+more information on encoding maps. Setting the protocol encoding overrides
+any encoding in the XML declaration.
+
+=item * Namespaces
+
+This is an Expat option. If this is set to a true value, then namespace
+processing is done during the parse. See L<XML::Parser::Expat/"Namespaces">
+for further discussion of namespace processing.
+
+=item * NoExpand
+
+This is an Expat option. Normally, the parser will try to expand references
+to entities defined in the internal subset. If this option is set to a true
+value, and a default handler is also set, then the default handler will be
+called when an entity reference is seen in text. This has no effect if a
+default handler has not been registered, and it has no effect on the expansion
+of entity references inside attribute values.
+
+=item * Stream_Delimiter
+
+This is an Expat option. It takes a string value. When this string is found
+alone on a line while parsing from a stream, then the parse is ended as if it
+saw an end of file. The intended use is with a stream of xml documents in a
+MIME multipart format. The string should not contain a trailing newline.
+
+=item * ParseParamEnt
+
+This is an Expat option. Unless standalone is set to "yes" in the XML
+declaration, setting this to a true value allows the external DTD to be read,
+and parameter entities to be parsed and expanded.
+
+=item * NoLWP
+
+This option has no effect if the ExternEnt or ExternEntFin handlers are
+directly set. Otherwise, if true, it forces the use of a file based external
+entity handler.
+
+=item * Non-Expat-Options
+
+If provided, this should be an anonymous hash whose keys are options that
+shouldn't be passed to Expat. This should only be of concern to those
+subclassing XML::Parser.
+
+=back
+
+=item setHandlers(TYPE, HANDLER [, TYPE, HANDLER [...]])
+
+This method registers handlers for various parser events. It overrides any
+previous handlers registered through the Style or Handler options or through
+earlier calls to setHandlers. By providing a false or undefined value as
+the handler, the existing handler can be unset.
+
+This method returns a list of type, handler pairs corresponding to the
+input. The handlers returned are the ones that were in effect prior to
+the call.
+
+See a description of the handler types in L<"HANDLERS">.
+
+=item parse(SOURCE [, OPT => OPT_VALUE [...]])
+
+The SOURCE parameter should either be a string containing the whole XML
+document, or it should be an open IO::Handle. Constructor options to
+XML::Parser::Expat given as keyword-value pairs may follow the SOURCE
+parameter. These override, for this call, any options or attributes passed
+through from the XML::Parser instance.
+
+A die call is thrown if a parse error occurs. Otherwise it will return 1
+or whatever is returned from the B<Final> handler, if one is installed.
+In other words, what parse may return depends on the style.
+
+=item parsestring
+
+This is just an alias for parse for backwards compatibility.
+
+=item parsefile(FILE [, OPT => OPT_VALUE [...]])
+
+Open FILE for reading, then call parse with the open handle. The file
+is closed no matter how parse returns. Returns what parse returns.
+
+=item parse_start([ OPT => OPT_VALUE [...]])
+
+Create and return a new instance of XML::Parser::ExpatNB. Constructor
+options may be provided. If an init handler has been provided, it is
+called before returning the ExpatNB object. Documents are parsed by
+making incremental calls to the parse_more method of this object, which
+takes a string. A single call to the parse_done method of this object,
+which takes no arguments, indicates that the document is finished.
+
+If there is a final handler installed, it is executed by the parse_done
+method before returning and the parse_done method returns whatever is
+returned by the final handler.
+
+=back
+
+=head1 HANDLERS
+
+Expat is an event based parser. As the parser recognizes parts of the
+document (say the start or end tag for an XML element), then any handlers
+registered for that type of an event are called with suitable parameters.
+All handlers receive an instance of XML::Parser::Expat as their first
+argument. See L<XML::Parser::Expat/"METHODS"> for a discussion of the
+methods that can be called on this object.
+
+=head2 Init (Expat)
+
+This is called just before the parsing of the document starts.
+
+=head2 Final (Expat)
+
+This is called just after parsing has finished, but only if no errors
+occurred during the parse. Parse returns what this returns.
+
+=head2 Start (Expat, Element [, Attr, Val [,...]])
+
+This event is generated when an XML start tag is recognized. Element is the
+name of the XML element type that is opened with the start tag. The Attr &
+Val pairs are generated for each attribute in the start tag.
+
+=head2 End (Expat, Element)
+
+This event is generated when an XML end tag is recognized. Note that
+an XML empty tag (<foo/>) generates both a start and an end event.
+
+=head2 Char (Expat, String)
+
+This event is generated when non-markup is recognized. The non-markup
+sequence of characters is in String. A single non-markup sequence of
+characters may generate multiple calls to this handler. Whatever the
+encoding of the string in the original document, this is given to the
+handler in UTF-8.
+
+=head2 Proc (Expat, Target, Data)
+
+This event is generated when a processing instruction is recognized.
+
+=head2 Comment (Expat, Data)
+
+This event is generated when a comment is recognized.
+
+=head2 CdataStart (Expat)
+
+This is called at the start of a CDATA section.
+
+=head2 CdataEnd (Expat)
+
+This is called at the end of a CDATA section.
+
+=head2 Default (Expat, String)
+
+This is called for any characters that don't have a registered handler.
+This includes both characters that are part of markup for which no
+events are generated (markup declarations) and characters that
+could generate events, but for which no handler has been registered.
+
+Whatever the encoding in the original document, the string is returned to
+the handler in UTF-8.
+
+=head2 Unparsed (Expat, Entity, Base, Sysid, Pubid, Notation)
+
+This is called for a declaration of an unparsed entity. Entity is the name
+of the entity. Base is the base to be used for resolving a relative URI.
+Sysid is the system id. Pubid is the public id. Notation is the notation
+name. Base and Pubid may be undefined.
+
+=head2 Notation (Expat, Notation, Base, Sysid, Pubid)
+
+This is called for a declaration of notation. Notation is the notation name.
+Base is the base to be used for resolving a relative URI. Sysid is the system
+id. Pubid is the public id. Base, Sysid, and Pubid may all be undefined.
+
+=head2 ExternEnt (Expat, Base, Sysid, Pubid)
+
+This is called when an external entity is referenced. Base is the base to be
+used for resolving a relative URI. Sysid is the system id. Pubid is the public
+id. Base, and Pubid may be undefined.
+
+This handler should either return a string, which represents the contents of
+the external entity, or return an open filehandle that can be read to obtain
+the contents of the external entity, or return undef, which indicates the
+external entity couldn't be found and will generate a parse error.
+
+If an open filehandle is returned, it must be returned as either a glob
+(*FOO) or as a reference to a glob (e.g. an instance of IO::Handle).
+
+A default handler is installed for this event. The default handler is
+XML::Parser::lwp_ext_ent_handler unless the NoLWP option was provided with
+a true value, otherwise XML::Parser::file_ext_ent_handler is the default
+handler for external entities. Even without the NoLWP option, if the
+URI or LWP modules are missing, the file based handler ends up being used
+after giving a warning on the first external entity reference.
+
+The LWP external entity handler will use proxies defined in the environment
+(http_proxy, ftp_proxy, etc.).
+
+Please note that the LWP external entity handler reads the entire
+entity into a string and returns it, where as the file handler opens a
+filehandle.
+
+Also note that the file external entity handler will likely choke on
+absolute URIs or file names that don't fit the conventions of the local
+operating system.
+
+The expat base method can be used to set a basename for
+relative pathnames. If no basename is given, or if the basename is itself
+a relative name, then it is relative to the current working directory.
+
+=head2 ExternEntFin (Expat)
+
+This is called after parsing an external entity. It's not called unless
+an ExternEnt handler is also set. There is a default handler installed
+that pairs with the default ExternEnt handler.
+
+If you're going to install your own ExternEnt handler, then you should
+set (or unset) this handler too.
+
+=head2 Entity (Expat, Name, Val, Sysid, Pubid, Ndata, IsParam)
+
+This is called when an entity is declared. For internal entities, the Val
+parameter will contain the value and the remaining three parameters will be
+undefined. For external entities, the Val parameter will be undefined, the
+Sysid parameter will have the system id, the Pubid parameter will have the
+public id if it was provided (it will be undefined otherwise), the Ndata
+parameter will contain the notation for unparsed entities. If this is a
+parameter entity declaration, then the IsParam parameter is true.
+
+Note that this handler and the Unparsed handler above overlap. If both are
+set, then this handler will not be called for unparsed entities.
+
+=head2 Element (Expat, Name, Model)
+
+The element handler is called when an element declaration is found. Name
+is the element name, and Model is the content model as an XML::Parser::Content
+object. See L<XML::Parser::Expat/"XML::Parser::ContentModel Methods">
+for methods available for this class.
+
+=head2 Attlist (Expat, Elname, Attname, Type, Default, Fixed)
+
+This handler is called for each attribute in an ATTLIST declaration.
+So an ATTLIST declaration that has multiple attributes will generate multiple
+calls to this handler. The Elname parameter is the name of the element with
+which the attribute is being associated. The Attname parameter is the name
+of the attribute. Type is the attribute type, given as a string. Default is
+the default value, which will either be "#REQUIRED", "#IMPLIED" or a quoted
+string (i.e. the returned string will begin and end with a quote character).
+If Fixed is true, then this is a fixed attribute.
+
+=head2 Doctype (Expat, Name, Sysid, Pubid, Internal)
+
+This handler is called for DOCTYPE declarations. Name is the document type
+name. Sysid is the system id of the document type, if it was provided,
+otherwise it's undefined. Pubid is the public id of the document type,
+which will be undefined if no public id was given. Internal is the internal
+subset, given as a string. If there was no internal subset, it will be
+undefined. Internal will contain all whitespace, comments, processing
+instructions, and declarations seen in the internal subset. The declarations
+will be there whether or not they have been processed by another handler
+(except for unparsed entities processed by the Unparsed handler). However,
+comments and processing instructions will not appear if they've been processed
+by their respective handlers.
+
+=head2 * DoctypeFin (Parser)
+
+This handler is called after parsing of the DOCTYPE declaration has finished,
+including any internal or external DTD declarations.
+
+=head2 XMLDecl (Expat, Version, Encoding, Standalone)
+
+This handler is called for xml declarations. Version is a string containg
+the version. Encoding is either undefined or contains an encoding string.
+Standalone will be either true, false, or undefined if the standalone attribute
+is yes, no, or not made respectively.
+
+=head1 STYLES
+
+=head2 Debug
+
+This just prints out the document in outline form. Nothing special is
+returned by parse.
+
+=head2 Subs
+
+Each time an element starts, a sub by that name in the package specified
+by the Pkg option is called with the same parameters that the Start
+handler gets called with.
+
+Each time an element ends, a sub with that name appended with an underscore
+("_"), is called with the same parameters that the End handler gets called
+with.
+
+Nothing special is returned by parse.
+
+=head2 Tree
+
+Parse will return a parse tree for the document. Each node in the tree
+takes the form of a tag, content pair. Text nodes are represented with
+a pseudo-tag of "0" and the string that is their content. For elements,
+the content is an array reference. The first item in the array is a
+(possibly empty) hash reference containing attributes. The remainder of
+the array is a sequence of tag-content pairs representing the content
+of the element.
+
+So for example the result of parsing:
+
+ <foo><head id="a">Hello <em>there</em></head><bar>Howdy<ref/></bar>do</foo>
+
+would be:
+ Tag Content
+ ==================================================================
+ [foo, [{}, head, [{id => "a"}, 0, "Hello ", em, [{}, 0, "there"]],
+ bar, [ {}, 0, "Howdy", ref, [{}]],
+ 0, "do"
+ ]
+ ]
+
+The root document "foo", has 3 children: a "head" element, a "bar"
+element and the text "do". After the empty attribute hash, these are
+represented in it's contents by 3 tag-content pairs.
+
+=head2 Objects
+
+This is similar to the Tree style, except that a hash object is created for
+each element. The corresponding object will be in the class whose name
+is created by appending "::" and the element name to the package set with
+the Pkg option. Non-markup text will be in the ::Characters class. The
+contents of the corresponding object will be in an anonymous array that
+is the value of the Kids property for that object.
+
+=head2 Stream
+
+This style also uses the Pkg package. If none of the subs that this
+style looks for is there, then the effect of parsing with this style is
+to print a canonical copy of the document without comments or declarations.
+All the subs receive as their 1st parameter the Expat instance for the
+document they're parsing.
+
+It looks for the following routines:
+
+=over 4
+
+=item * StartDocument
+
+Called at the start of the parse .
+
+=item * StartTag
+
+Called for every start tag with a second parameter of the element type. The $_
+variable will contain a copy of the tag and the %_ variable will contain
+attribute values supplied for that element.
+
+=item * EndTag
+
+Called for every end tag with a second parameter of the element type. The $_
+variable will contain a copy of the end tag.
+
+=item * Text
+
+Called just before start or end tags with accumulated non-markup text in
+the $_ variable.
+
+=item * PI
+
+Called for processing instructions. The $_ variable will contain a copy of
+the PI and the target and data are sent as 2nd and 3rd parameters
+respectively.
+
+=item * EndDocument
+
+Called at conclusion of the parse.
+
+=back
+
+=head1 ENCODINGS
+
+XML documents may be encoded in character sets other than Unicode as
+long as they may be mapped into the Unicode character set. Expat has
+further restrictions on encodings. Read the xmlparse.h header file in
+the expat distribution to see details on these restrictions.
+
+Expat has built-in encodings for: C<UTF-8>, C<ISO-8859-1>, C<UTF-16>, and
+C<US-ASCII>. Encodings are set either through the XML declaration
+encoding attribute or through the ProtocolEncoding option to XML::Parser
+or XML::Parser::Expat.
+
+For encodings other than the built-ins, expat calls the function
+load_encoding in the Expat package with the encoding name. This function
+looks for a file in the path list @XML::Parser::Expat::Encoding_Path, that
+matches the lower-cased name with a '.enc' extension. The first one it
+finds, it loads.
+
+If you wish to build your own encoding maps, check out the XML::Encoding
+module from CPAN.
+
+=head1 AUTHORS
+
+Larry Wall <F<larry@wall.org>> wrote version 1.0.
+
+Clark Cooper <F<coopercc@netheaven.com>> picked up support, changed the API
+for this version (2.x), provided documentation,
+and added some standard package features.
+
+=cut
diff --git a/Master/xemtex/perl/site/lib/XML/Parser/Expat.pm b/Master/xemtex/perl/site/lib/XML/Parser/Expat.pm
new file mode 100644
index 00000000000..370f6f67bf6
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/XML/Parser/Expat.pm
@@ -0,0 +1,1231 @@
+package XML::Parser::Expat;
+
+require 5.004;
+
+use strict;
+use vars qw($VERSION @ISA %Handler_Setters %Encoding_Table @Encoding_Path
+ $have_File_Spec);
+use Carp;
+
+use IO::Handle;
+
+require DynaLoader;
+
+@ISA = qw(DynaLoader);
+$VERSION = "2.31" ;
+
+$have_File_Spec = $INC{'File/Spec.pm'} || do 'File/Spec.pm';
+
+%Encoding_Table = ();
+if ($have_File_Spec) {
+ @Encoding_Path = (grep(-d $_,
+ map(File::Spec->catdir($_, qw(XML Parser Encodings)),
+ @INC)),
+ File::Spec->curdir);
+}
+else {
+ @Encoding_Path = (grep(-d $_, map($_ . '/XML/Parser/Encodings', @INC)), '.');
+}
+
+
+bootstrap XML::Parser::Expat $VERSION;
+
+%Handler_Setters = (
+ Start => \&SetStartElementHandler,
+ End => \&SetEndElementHandler,
+ Char => \&SetCharacterDataHandler,
+ Proc => \&SetProcessingInstructionHandler,
+ Comment => \&SetCommentHandler,
+ CdataStart => \&SetStartCdataHandler,
+ CdataEnd => \&SetEndCdataHandler,
+ Default => \&SetDefaultHandler,
+ Unparsed => \&SetUnparsedEntityDeclHandler,
+ Notation => \&SetNotationDeclHandler,
+ ExternEnt => \&SetExternalEntityRefHandler,
+ ExternEntFin => \&SetExtEntFinishHandler,
+ Entity => \&SetEntityDeclHandler,
+ Element => \&SetElementDeclHandler,
+ Attlist => \&SetAttListDeclHandler,
+ Doctype => \&SetDoctypeHandler,
+ DoctypeFin => \&SetEndDoctypeHandler,
+ XMLDecl => \&SetXMLDeclHandler
+ );
+
+sub new {
+ my ($class, %args) = @_;
+ my $self = bless \%args, $_[0];
+ $args{_State_} = 0;
+ $args{Context} = [];
+ $args{Namespaces} ||= 0;
+ $args{ErrorMessage} ||= '';
+ if ($args{Namespaces}) {
+ $args{Namespace_Table} = {};
+ $args{Namespace_List} = [undef];
+ $args{Prefix_Table} = {};
+ $args{New_Prefixes} = [];
+ }
+ $args{_Setters} = \%Handler_Setters;
+ $args{Parser} = ParserCreate($self, $args{ProtocolEncoding},
+ $args{Namespaces});
+ $self;
+}
+
+sub load_encoding {
+ my ($file) = @_;
+
+ $file =~ s!([^/]+)$!\L$1\E!;
+ $file .= '.enc' unless $file =~ /\.enc$/;
+ unless ($file =~ m!^/!) {
+ foreach (@Encoding_Path) {
+ my $tmp = ($have_File_Spec
+ ? File::Spec->catfile($_, $file)
+ : "$_/$file");
+ if (-e $tmp) {
+ $file = $tmp;
+ last;
+ }
+ }
+ }
+
+ local(*ENC);
+ open(ENC, $file) or croak("Couldn't open encmap $file:\n$!\n");
+ binmode(ENC);
+ my $data;
+ my $br = sysread(ENC, $data, -s $file);
+ croak("Trouble reading $file:\n$!\n")
+ unless defined($br);
+ close(ENC);
+
+ my $name = LoadEncoding($data, $br);
+ croak("$file isn't an encmap file")
+ unless defined($name);
+
+ $name;
+} # End load_encoding
+
+sub setHandlers {
+ my ($self, @handler_pairs) = @_;
+
+ croak("Uneven number of arguments to setHandlers method")
+ if (int(@handler_pairs) & 1);
+
+ my @ret;
+
+ while (@handler_pairs) {
+ my $type = shift @handler_pairs;
+ my $handler = shift @handler_pairs;
+ croak "Handler for $type not a Code ref"
+ unless (! defined($handler) or ! $handler or ref($handler) eq 'CODE');
+
+ my $hndl = $self->{_Setters}->{$type};
+
+ unless (defined($hndl)) {
+ my @types = sort keys %{$self->{_Setters}};
+ croak("Unknown Expat handler type: $type\n Valid types: @types");
+ }
+
+ my $old = &$hndl($self->{Parser}, $handler);
+ push (@ret, $type, $old);
+ }
+
+ return @ret;
+}
+
+sub xpcroak
+ {
+ my ($self, $message) = @_;
+
+ my $eclines = $self->{ErrorContext};
+ my $line = GetCurrentLineNumber($_[0]->{Parser});
+ $message .= " at line $line";
+ $message .= ":\n" . $self->position_in_context($eclines)
+ if defined($eclines);
+ croak $message;
+}
+
+sub xpcarp {
+ my ($self, $message) = @_;
+
+ my $eclines = $self->{ErrorContext};
+ my $line = GetCurrentLineNumber($_[0]->{Parser});
+ $message .= " at line $line";
+ $message .= ":\n" . $self->position_in_context($eclines)
+ if defined($eclines);
+ carp $message;
+}
+
+sub default_current {
+ my $self = shift;
+ if ($self->{_State_} == 1) {
+ return DefaultCurrent($self->{Parser});
+ }
+}
+
+sub recognized_string {
+ my $self = shift;
+ if ($self->{_State_} == 1) {
+ return RecognizedString($self->{Parser});
+ }
+}
+
+sub original_string {
+ my $self = shift;
+ if ($self->{_State_} == 1) {
+ return OriginalString($self->{Parser});
+ }
+}
+
+sub current_line {
+ my $self = shift;
+ if ($self->{_State_} == 1) {
+ return GetCurrentLineNumber($self->{Parser});
+ }
+}
+
+sub current_column {
+ my $self = shift;
+ if ($self->{_State_} == 1) {
+ return GetCurrentColumnNumber($self->{Parser});
+ }
+}
+
+sub current_byte {
+ my $self = shift;
+ if ($self->{_State_} == 1) {
+ return GetCurrentByteIndex($self->{Parser});
+ }
+}
+
+sub base {
+ my ($self, $newbase) = @_;
+ my $p = $self->{Parser};
+ my $oldbase = GetBase($p);
+ SetBase($p, $newbase) if @_ > 1;
+ return $oldbase;
+}
+
+sub context {
+ my $ctx = $_[0]->{Context};
+ @$ctx;
+}
+
+sub current_element {
+ my ($self) = @_;
+ @{$self->{Context}} ? $self->{Context}->[-1] : undef;
+}
+
+sub in_element {
+ my ($self, $element) = @_;
+ @{$self->{Context}} ? $self->eq_name($self->{Context}->[-1], $element)
+ : undef;
+}
+
+sub within_element {
+ my ($self, $element) = @_;
+ my $cnt = 0;
+ foreach (@{$self->{Context}}) {
+ $cnt++ if $self->eq_name($_, $element);
+ }
+ return $cnt;
+}
+
+sub depth {
+ my ($self) = @_;
+ int(@{$self->{Context}});
+}
+
+sub element_index {
+ my ($self) = @_;
+
+ if ($self->{_State_} == 1) {
+ return ElementIndex($self->{Parser});
+ }
+}
+
+################
+# Namespace methods
+
+sub namespace {
+ my ($self, $name) = @_;
+ local($^W) = 0;
+ $self->{Namespace_List}->[int($name)];
+}
+
+sub eq_name {
+ my ($self, $nm1, $nm2) = @_;
+ local($^W) = 0;
+
+ int($nm1) == int($nm2) and $nm1 eq $nm2;
+}
+
+sub generate_ns_name {
+ my ($self, $name, $namespace) = @_;
+
+ $namespace ?
+ GenerateNSName($name, $namespace, $self->{Namespace_Table},
+ $self->{Namespace_List})
+ : $name;
+}
+
+sub new_ns_prefixes {
+ my ($self) = @_;
+ if ($self->{Namespaces}) {
+ return @{$self->{New_Prefixes}};
+ }
+ return ();
+}
+
+sub expand_ns_prefix {
+ my ($self, $prefix) = @_;
+
+ if ($self->{Namespaces}) {
+ my $stack = $self->{Prefix_Table}->{$prefix};
+ return (defined($stack) and @$stack) ? $stack->[-1] : undef;
+ }
+
+ return undef;
+}
+
+sub current_ns_prefixes {
+ my ($self) = @_;
+
+ if ($self->{Namespaces}) {
+ my %set = %{$self->{Prefix_Table}};
+
+ if (exists $set{'#default'} and not defined($set{'#default'}->[-1])) {
+ delete $set{'#default'};
+ }
+
+ return keys %set;
+ }
+
+ return ();
+}
+
+
+################################################################
+# Namespace declaration handlers
+#
+
+sub NamespaceStart {
+ my ($self, $prefix, $uri) = @_;
+
+ $prefix = '#default' unless defined $prefix;
+ my $stack = $self->{Prefix_Table}->{$prefix};
+
+ if (defined $stack) {
+ push(@$stack, $uri);
+ }
+ else {
+ $self->{Prefix_Table}->{$prefix} = [$uri];
+ }
+
+ # The New_Prefixes list gets emptied at end of startElement function
+ # in Expat.xs
+
+ push(@{$self->{New_Prefixes}}, $prefix);
+}
+
+sub NamespaceEnd {
+ my ($self, $prefix) = @_;
+
+ $prefix = '#default' unless defined $prefix;
+
+ my $stack = $self->{Prefix_Table}->{$prefix};
+ if (@$stack > 1) {
+ pop(@$stack);
+ }
+ else {
+ delete $self->{Prefix_Table}->{$prefix};
+ }
+}
+
+################
+
+sub specified_attr {
+ my $self = shift;
+
+ if ($self->{_State_} == 1) {
+ return GetSpecifiedAttributeCount($self->{Parser});
+ }
+}
+
+sub finish {
+ my ($self) = @_;
+ if ($self->{_State_} == 1) {
+ my $parser = $self->{Parser};
+ UnsetAllHandlers($parser);
+ }
+}
+
+sub position_in_context {
+ my ($self, $lines) = @_;
+ if ($self->{_State_} == 1) {
+ my $parser = $self->{Parser};
+ my ($string, $linepos) = PositionContext($parser, $lines);
+
+ return '' unless defined($string);
+
+ my $col = GetCurrentColumnNumber($parser);
+ my $ptr = ('=' x ($col - 1)) . '^' . "\n";
+ my $ret;
+ my $dosplit = $linepos < length($string);
+
+ $string .= "\n" unless $string =~ /\n$/;
+
+ if ($dosplit) {
+ $ret = substr($string, 0, $linepos) . $ptr
+ . substr($string, $linepos);
+ } else {
+ $ret = $string . $ptr;
+ }
+
+ return $ret;
+ }
+}
+
+sub xml_escape {
+ my $self = shift;
+ my $text = shift;
+
+ study $text;
+ $text =~ s/\&/\&amp;/g;
+ $text =~ s/</\&lt;/g;
+ foreach (@_) {
+ croak "xml_escape: '$_' isn't a single character" if length($_) > 1;
+
+ if ($_ eq '>') {
+ $text =~ s/>/\&gt;/g;
+ }
+ elsif ($_ eq '"') {
+ $text =~ s/\"/\&quot;/;
+ }
+ elsif ($_ eq "'") {
+ $text =~ s/\'/\&apos;/;
+ }
+ else {
+ my $rep = '&#' . sprintf('x%X', ord($_)) . ';';
+ if (/\W/) {
+ my $ptrn = "\\$_";
+ $text =~ s/$ptrn/$rep/g;
+ }
+ else {
+ $text =~ s/$_/$rep/g;
+ }
+ }
+ }
+ $text;
+}
+
+sub skip_until {
+ my $self = shift;
+ if ($self->{_State_} <= 1) {
+ SkipUntil($self->{Parser}, $_[0]);
+ }
+}
+
+sub release {
+ my $self = shift;
+ ParserRelease($self->{Parser});
+}
+
+sub DESTROY {
+ my $self = shift;
+ ParserFree($self->{Parser});
+}
+
+sub parse {
+ my $self = shift;
+ my $arg = shift;
+ croak "Parse already in progress (Expat)" if $self->{_State_};
+ $self->{_State_} = 1;
+ my $parser = $self->{Parser};
+ my $ioref;
+ my $result = 0;
+
+ if (defined $arg) {
+ if (ref($arg) and UNIVERSAL::isa($arg, 'IO::Handle')) {
+ $ioref = $arg;
+ } elsif (tied($arg)) {
+ my $class = ref($arg);
+ no strict 'refs';
+ $ioref = $arg if defined &{"${class}::TIEHANDLE"};
+ }
+ else {
+ eval {
+ $ioref = *{$arg}{IO};
+ };
+ undef $@;
+ }
+ }
+
+ if (defined($ioref)) {
+ my $delim = $self->{Stream_Delimiter};
+ my $prev_rs;
+
+ $prev_rs = ref($ioref)->input_record_separator("\n$delim\n")
+ if defined($delim);
+
+ $result = ParseStream($parser, $ioref, $delim);
+
+ ref($ioref)->input_record_separator($prev_rs)
+ if defined($delim);
+ } else {
+ $result = ParseString($parser, $arg);
+ }
+
+ $self->{_State_} = 2;
+ $result or croak $self->{ErrorMessage};
+}
+
+sub parsestring {
+ my $self = shift;
+ $self->parse(@_);
+}
+
+sub parsefile {
+ my $self = shift;
+ croak "Parser has already been used" if $self->{_State_};
+ local(*FILE);
+ open(FILE, $_[0]) or croak "Couldn't open $_[0]:\n$!";
+ binmode(FILE);
+ my $ret = $self->parse(*FILE);
+ close(FILE);
+ $ret;
+}
+
+################################################################
+package XML::Parser::ContentModel;
+use overload '""' => \&asString, 'eq' => \&thiseq;
+
+sub EMPTY () {1}
+sub ANY () {2}
+sub MIXED () {3}
+sub NAME () {4}
+sub CHOICE () {5}
+sub SEQ () {6}
+
+
+sub isempty {
+ return $_[0]->{Type} == EMPTY;
+}
+
+sub isany {
+ return $_[0]->{Type} == ANY;
+}
+
+sub ismixed {
+ return $_[0]->{Type} == MIXED;
+}
+
+sub isname {
+ return $_[0]->{Type} == NAME;
+}
+
+sub name {
+ return $_[0]->{Tag};
+}
+
+sub ischoice {
+ return $_[0]->{Type} == CHOICE;
+}
+
+sub isseq {
+ return $_[0]->{Type} == SEQ;
+}
+
+sub quant {
+ return $_[0]->{Quant};
+}
+
+sub children {
+ my $children = $_[0]->{Children};
+ if (defined $children) {
+ return @$children;
+ }
+ return undef;
+}
+
+sub asString {
+ my ($self) = @_;
+ my $ret;
+
+ if ($self->{Type} == NAME) {
+ $ret = $self->{Tag};
+ }
+ elsif ($self->{Type} == EMPTY) {
+ return "EMPTY";
+ }
+ elsif ($self->{Type} == ANY) {
+ return "ANY";
+ }
+ elsif ($self->{Type} == MIXED) {
+ $ret = '(#PCDATA';
+ foreach (@{$self->{Children}}) {
+ $ret .= '|' . $_;
+ }
+ $ret .= ')';
+ }
+ else {
+ my $sep = $self->{Type} == CHOICE ? '|' : ',';
+ my @children_str = map { $_->asString } @{$self->{Children}};
+ $ret = '(' . join($sep, @children_str) . ')';
+ }
+
+ $ret .= $self->{Quant} if $self->{Quant};
+ return $ret;
+}
+
+sub thiseq {
+ my $self = shift;
+
+ return $self->asString eq $_[0];
+}
+
+################################################################
+package XML::Parser::ExpatNB;
+
+use vars qw(@ISA);
+use Carp;
+
+@ISA = qw(XML::Parser::Expat);
+
+sub parse {
+ my $self = shift;
+ my $class = ref($self);
+ croak "parse method not supported in $class";
+}
+
+sub parsestring {
+ my $self = shift;
+ my $class = ref($self);
+ croak "parsestring method not supported in $class";
+}
+
+sub parsefile {
+ my $self = shift;
+ my $class = ref($self);
+ croak "parsefile method not supported in $class";
+}
+
+sub parse_more {
+ my ($self, $data) = @_;
+
+ $self->{_State_} = 1;
+ my $ret = XML::Parser::Expat::ParsePartial($self->{Parser}, $data);
+
+ croak $self->{ErrorMessage} unless $ret;
+}
+
+sub parse_done {
+ my $self = shift;
+
+ my $ret = XML::Parser::Expat::ParseDone($self->{Parser});
+ unless ($ret) {
+ my $msg = $self->{ErrorMessage};
+ $self->release;
+ croak $msg;
+ }
+
+ $self->{_State_} = 2;
+
+ my $result = $ret;
+ my @result = ();
+ my $final = $self->{FinalHandler};
+ if (defined $final) {
+ if (wantarray) {
+ @result = &$final($self);
+ }
+ else {
+ $result = &$final($self);
+ }
+ }
+
+ $self->release;
+
+ return unless defined wantarray;
+ return wantarray ? @result : $result;
+}
+
+################################################################
+
+package XML::Parser::Encinfo;
+
+sub DESTROY {
+ my $self = shift;
+ XML::Parser::Expat::FreeEncoding($self);
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+XML::Parser::Expat - Lowlevel access to James Clark's expat XML parser
+
+=head1 SYNOPSIS
+
+ use XML::Parser::Expat;
+
+ $parser = new XML::Parser::Expat;
+ $parser->setHandlers('Start' => \&sh,
+ 'End' => \&eh,
+ 'Char' => \&ch);
+ open(FOO, 'info.xml') or die "Couldn't open";
+ $parser->parse(*FOO);
+ close(FOO);
+ # $parser->parse('<foo id="me"> here <em>we</em> go </foo>');
+
+ sub sh
+ {
+ my ($p, $el, %atts) = @_;
+ $p->setHandlers('Char' => \&spec)
+ if ($el eq 'special');
+ ...
+ }
+
+ sub eh
+ {
+ my ($p, $el) = @_;
+ $p->setHandlers('Char' => \&ch) # Special elements won't contain
+ if ($el eq 'special'); # other special elements
+ ...
+ }
+
+=head1 DESCRIPTION
+
+This module provides an interface to James Clark's XML parser, expat. As in
+expat, a single instance of the parser can only parse one document. Calls
+to parsestring after the first for a given instance will die.
+
+Expat (and XML::Parser::Expat) are event based. As the parser recognizes
+parts of the document (say the start or end of an XML element), then any
+handlers registered for that type of an event are called with suitable
+parameters.
+
+=head1 METHODS
+
+=over 4
+
+=item new
+
+This is a class method, the constructor for XML::Parser::Expat. Options are
+passed as keyword value pairs. The recognized options are:
+
+=over 4
+
+=item * ProtocolEncoding
+
+The protocol encoding name. The default is none. The expat built-in
+encodings are: C<UTF-8>, C<ISO-8859-1>, C<UTF-16>, and C<US-ASCII>.
+Other encodings may be used if they have encoding maps in one of the
+directories in the @Encoding_Path list. Setting the protocol encoding
+overrides any encoding in the XML declaration.
+
+=item * Namespaces
+
+When this option is given with a true value, then the parser does namespace
+processing. By default, namespace processing is turned off. When it is
+turned on, the parser consumes I<xmlns> attributes and strips off prefixes
+from element and attributes names where those prefixes have a defined
+namespace. A name's namespace can be found using the L<"namespace"> method
+and two names can be checked for absolute equality with the L<"eq_name">
+method.
+
+=item * NoExpand
+
+Normally, the parser will try to expand references to entities defined in
+the internal subset. If this option is set to a true value, and a default
+handler is also set, then the default handler will be called when an
+entity reference is seen in text. This has no effect if a default handler
+has not been registered, and it has no effect on the expansion of entity
+references inside attribute values.
+
+=item * Stream_Delimiter
+
+This option takes a string value. When this string is found alone on a line
+while parsing from a stream, then the parse is ended as if it saw an end of
+file. The intended use is with a stream of xml documents in a MIME multipart
+format. The string should not contain a trailing newline.
+
+=item * ErrorContext
+
+When this option is defined, errors are reported in context. The value
+of ErrorContext should be the number of lines to show on either side of
+the line in which the error occurred.
+
+=item * ParseParamEnt
+
+Unless standalone is set to "yes" in the XML declaration, setting this to
+a true value allows the external DTD to be read, and parameter entities
+to be parsed and expanded.
+
+=item * Base
+
+The base to use for relative pathnames or URLs. This can also be done by
+using the base method.
+
+=back
+
+=item setHandlers(TYPE, HANDLER [, TYPE, HANDLER [...]])
+
+This method registers handlers for the various events. If no handlers are
+registered, then a call to parsestring or parsefile will only determine if
+the corresponding XML document is well formed (by returning without error.)
+This may be called from within a handler, after the parse has started.
+
+Setting a handler to something that evaluates to false unsets that
+handler.
+
+This method returns a list of type, handler pairs corresponding to the
+input. The handlers returned are the ones that were in effect before the
+call to setHandlers.
+
+The recognized events and the parameters passed to the corresponding
+handlers are:
+
+=over 4
+
+=item * Start (Parser, Element [, Attr, Val [,...]])
+
+This event is generated when an XML start tag is recognized. Parser is
+an XML::Parser::Expat instance. Element is the name of the XML element that
+is opened with the start tag. The Attr & Val pairs are generated for each
+attribute in the start tag.
+
+=item * End (Parser, Element)
+
+This event is generated when an XML end tag is recognized. Note that
+an XML empty tag (<foo/>) generates both a start and an end event.
+
+There is always a lower level start and end handler installed that wrap
+the corresponding callbacks. This is to handle the context mechanism.
+A consequence of this is that the default handler (see below) will not
+see a start tag or end tag unless the default_current method is called.
+
+=item * Char (Parser, String)
+
+This event is generated when non-markup is recognized. The non-markup
+sequence of characters is in String. A single non-markup sequence of
+characters may generate multiple calls to this handler. Whatever the
+encoding of the string in the original document, this is given to the
+handler in UTF-8.
+
+=item * Proc (Parser, Target, Data)
+
+This event is generated when a processing instruction is recognized.
+
+=item * Comment (Parser, String)
+
+This event is generated when a comment is recognized.
+
+=item * CdataStart (Parser)
+
+This is called at the start of a CDATA section.
+
+=item * CdataEnd (Parser)
+
+This is called at the end of a CDATA section.
+
+=item * Default (Parser, String)
+
+This is called for any characters that don't have a registered handler.
+This includes both characters that are part of markup for which no
+events are generated (markup declarations) and characters that
+could generate events, but for which no handler has been registered.
+
+Whatever the encoding in the original document, the string is returned to
+the handler in UTF-8.
+
+=item * Unparsed (Parser, Entity, Base, Sysid, Pubid, Notation)
+
+This is called for a declaration of an unparsed entity. Entity is the name
+of the entity. Base is the base to be used for resolving a relative URI.
+Sysid is the system id. Pubid is the public id. Notation is the notation
+name. Base and Pubid may be undefined.
+
+=item * Notation (Parser, Notation, Base, Sysid, Pubid)
+
+This is called for a declaration of notation. Notation is the notation name.
+Base is the base to be used for resolving a relative URI. Sysid is the system
+id. Pubid is the public id. Base, Sysid, and Pubid may all be undefined.
+
+=item * ExternEnt (Parser, Base, Sysid, Pubid)
+
+This is called when an external entity is referenced. Base is the base to be
+used for resolving a relative URI. Sysid is the system id. Pubid is the public
+id. Base, and Pubid may be undefined.
+
+This handler should either return a string, which represents the contents of
+the external entity, or return an open filehandle that can be read to obtain
+the contents of the external entity, or return undef, which indicates the
+external entity couldn't be found and will generate a parse error.
+
+If an open filehandle is returned, it must be returned as either a glob
+(*FOO) or as a reference to a glob (e.g. an instance of IO::Handle).
+
+=item * ExternEntFin (Parser)
+
+This is called after an external entity has been parsed. It allows
+applications to perform cleanup on actions performed in the above
+ExternEnt handler.
+
+=item * Entity (Parser, Name, Val, Sysid, Pubid, Ndata, IsParam)
+
+This is called when an entity is declared. For internal entities, the Val
+parameter will contain the value and the remaining three parameters will
+be undefined. For external entities, the Val parameter
+will be undefined, the Sysid parameter will have the system id, the Pubid
+parameter will have the public id if it was provided (it will be undefined
+otherwise), the Ndata parameter will contain the notation for unparsed
+entities. If this is a parameter entity declaration, then the IsParam
+parameter is true.
+
+Note that this handler and the Unparsed handler above overlap. If both are
+set, then this handler will not be called for unparsed entities.
+
+=item * Element (Parser, Name, Model)
+
+The element handler is called when an element declaration is found. Name is
+the element name, and Model is the content model as an
+XML::Parser::ContentModel object. See L<"XML::Parser::ContentModel Methods">
+for methods available for this class.
+
+=item * Attlist (Parser, Elname, Attname, Type, Default, Fixed)
+
+This handler is called for each attribute in an ATTLIST declaration.
+So an ATTLIST declaration that has multiple attributes
+will generate multiple calls to this handler. The Elname parameter is the
+name of the element with which the attribute is being associated. The Attname
+parameter is the name of the attribute. Type is the attribute type, given as
+a string. Default is the default value, which will either be "#REQUIRED",
+"#IMPLIED" or a quoted string (i.e. the returned string will begin and end
+with a quote character). If Fixed is true, then this is a fixed attribute.
+
+=item * Doctype (Parser, Name, Sysid, Pubid, Internal)
+
+This handler is called for DOCTYPE declarations. Name is the document type
+name. Sysid is the system id of the document type, if it was provided,
+otherwise it's undefined. Pubid is the public id of the document type,
+which will be undefined if no public id was given. Internal will be
+true or false, indicating whether or not the doctype declaration contains
+an internal subset.
+
+=item * DoctypeFin (Parser)
+
+This handler is called after parsing of the DOCTYPE declaration has finished,
+including any internal or external DTD declarations.
+
+=item * XMLDecl (Parser, Version, Encoding, Standalone)
+
+This handler is called for XML declarations. Version is a string containg
+the version. Encoding is either undefined or contains an encoding string.
+Standalone is either undefined, or true or false. Undefined indicates
+that no standalone parameter was given in the XML declaration. True or
+false indicates "yes" or "no" respectively.
+
+=back
+
+=item namespace(name)
+
+Return the URI of the namespace that the name belongs to. If the name doesn't
+belong to any namespace, an undef is returned. This is only valid on names
+received through the Start or End handlers from a single document, or through
+a call to the generate_ns_name method. In other words, don't use names
+generated from one instance of XML::Parser::Expat with other instances.
+
+=item eq_name(name1, name2)
+
+Return true if name1 and name2 are identical (i.e. same name and from
+the same namespace.) This is only meaningful if both names were obtained
+through the Start or End handlers from a single document, or through
+a call to the generate_ns_name method.
+
+=item generate_ns_name(name, namespace)
+
+Return a name, associated with a given namespace, good for using with the
+above 2 methods. The namespace argument should be the namespace URI, not
+a prefix.
+
+=item new_ns_prefixes
+
+When called from a start tag handler, returns namespace prefixes declared
+with this start tag. If called elsewere (or if there were no namespace
+prefixes declared), it returns an empty list. Setting of the default
+namespace is indicated with '#default' as a prefix.
+
+=item expand_ns_prefix(prefix)
+
+Return the uri to which the given prefix is currently bound. Returns
+undef if the prefix isn't currently bound. Use '#default' to find the
+current binding of the default namespace (if any).
+
+=item current_ns_prefixes
+
+Return a list of currently bound namespace prefixes. The order of the
+the prefixes in the list has no meaning. If the default namespace is
+currently bound, '#default' appears in the list.
+
+=item recognized_string
+
+Returns the string from the document that was recognized in order to call
+the current handler. For instance, when called from a start handler, it
+will give us the the start-tag string. The string is encoded in UTF-8.
+This method doesn't return a meaningful string inside declaration handlers.
+
+=item original_string
+
+Returns the verbatim string from the document that was recognized in
+order to call the current handler. The string is in the original document
+encoding. This method doesn't return a meaningful string inside declaration
+handlers.
+
+=item default_current
+
+When called from a handler, causes the sequence of characters that generated
+the corresponding event to be sent to the default handler (if one is
+registered). Use of this method is deprecated in favor the recognized_string
+method, which you can use without installing a default handler. This
+method doesn't deliver a meaningful string to the default handler when
+called from inside declaration handlers.
+
+=item xpcroak(message)
+
+Concatenate onto the given message the current line number within the
+XML document plus the message implied by ErrorContext. Then croak with
+the formed message.
+
+=item xpcarp(message)
+
+Concatenate onto the given message the current line number within the
+XML document plus the message implied by ErrorContext. Then carp with
+the formed message.
+
+=item current_line
+
+Returns the line number of the current position of the parse.
+
+=item current_column
+
+Returns the column number of the current position of the parse.
+
+=item current_byte
+
+Returns the current position of the parse.
+
+=item base([NEWBASE]);
+
+Returns the current value of the base for resolving relative URIs. If
+NEWBASE is supplied, changes the base to that value.
+
+=item context
+
+Returns a list of element names that represent open elements, with the
+last one being the innermost. Inside start and end tag handlers, this
+will be the tag of the parent element.
+
+=item current_element
+
+Returns the name of the innermost currently opened element. Inside
+start or end handlers, returns the parent of the element associated
+with those tags.
+
+=item in_element(NAME)
+
+Returns true if NAME is equal to the name of the innermost currently opened
+element. If namespace processing is being used and you want to check
+against a name that may be in a namespace, then use the generate_ns_name
+method to create the NAME argument.
+
+=item within_element(NAME)
+
+Returns the number of times the given name appears in the context list.
+If namespace processing is being used and you want to check
+against a name that may be in a namespace, then use the generate_ns_name
+method to create the NAME argument.
+
+=item depth
+
+Returns the size of the context list.
+
+=item element_index
+
+Returns an integer that is the depth-first visit order of the current
+element. This will be zero outside of the root element. For example,
+this will return 1 when called from the start handler for the root element
+start tag.
+
+=item skip_until(INDEX)
+
+INDEX is an integer that represents an element index. When this method
+is called, all handlers are suspended until the start tag for an element
+that has an index number equal to INDEX is seen. If a start handler has
+been set, then this is the first tag that the start handler will see
+after skip_until has been called.
+
+
+=item position_in_context(LINES)
+
+Returns a string that shows the current parse position. LINES should be
+an integer >= 0 that represents the number of lines on either side of the
+current parse line to place into the returned string.
+
+=item xml_escape(TEXT [, CHAR [, CHAR ...]])
+
+Returns TEXT with markup characters turned into character entities. Any
+additional characters provided as arguments are also turned into character
+references where found in TEXT.
+
+=item parse (SOURCE)
+
+The SOURCE parameter should either be a string containing the whole XML
+document, or it should be an open IO::Handle. Only a single document
+may be parsed for a given instance of XML::Parser::Expat, so this will croak
+if it's been called previously for this instance.
+
+=item parsestring(XML_DOC_STRING)
+
+Parses the given string as an XML document. Only a single document may be
+parsed for a given instance of XML::Parser::Expat, so this will die if either
+parsestring or parsefile has been called for this instance previously.
+
+This method is deprecated in favor of the parse method.
+
+=item parsefile(FILENAME)
+
+Parses the XML document in the given file. Will die if parsestring or
+parsefile has been called previously for this instance.
+
+=item is_defaulted(ATTNAME)
+
+NO LONGER WORKS. To find out if an attribute is defaulted please use
+the specified_attr method.
+
+=item specified_attr
+
+When the start handler receives lists of attributes and values, the
+non-defaulted (i.e. explicitly specified) attributes occur in the list
+first. This method returns the number of specified items in the list.
+So if this number is equal to the length of the list, there were no
+defaulted values. Otherwise the number points to the index of the
+first defaulted attribute name.
+
+=item finish
+
+Unsets all handlers (including internal ones that set context), but expat
+continues parsing to the end of the document or until it finds an error.
+It should finish up a lot faster than with the handlers set.
+
+=item release
+
+There are data structures used by XML::Parser::Expat that have circular
+references. This means that these structures will never be garbage
+collected unless these references are explicitly broken. Calling this
+method breaks those references (and makes the instance unusable.)
+
+Normally, higher level calls handle this for you, but if you are using
+XML::Parser::Expat directly, then it's your responsibility to call it.
+
+=back
+
+=head2 XML::Parser::ContentModel Methods
+
+The element declaration handlers are passed objects of this class as the
+content model of the element declaration. They also represent content
+particles, components of a content model.
+
+When referred to as a string, these objects are automagicly converted to a
+string representation of the model (or content particle).
+
+=over 4
+
+=item isempty
+
+This method returns true if the object is "EMPTY", false otherwise.
+
+=item isany
+
+This method returns true if the object is "ANY", false otherwise.
+
+=item ismixed
+
+This method returns true if the object is "(#PCDATA)" or "(#PCDATA|...)*",
+false otherwise.
+
+=item isname
+
+This method returns if the object is an element name.
+
+=item ischoice
+
+This method returns true if the object is a choice of content particles.
+
+
+=item isseq
+
+This method returns true if the object is a sequence of content particles.
+
+=item quant
+
+This method returns undef or a string representing the quantifier
+('?', '*', '+') associated with the model or particle.
+
+=item children
+
+This method returns undef or (for mixed, choice, and sequence types)
+an array of component content particles. There will always be at least
+one component for choices and sequences, but for a mixed content model
+of pure PCDATA, "(#PCDATA)", then an undef is returned.
+
+=back
+
+=head2 XML::Parser::ExpatNB Methods
+
+The class XML::Parser::ExpatNB is a subclass of XML::Parser::Expat used
+for non-blocking access to the expat library. It does not support the parse,
+parsestring, or parsefile methods, but it does have these additional methods:
+
+=over 4
+
+=item parse_more(DATA)
+
+Feed expat more text to munch on.
+
+=item parse_done
+
+Tell expat that it's gotten the whole document.
+
+=back
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item XML::Parser::Expat::load_encoding(ENCODING)
+
+Load an external encoding. ENCODING is either the name of an encoding or
+the name of a file. The basename is converted to lowercase and a '.enc'
+extension is appended unless there's one already there. Then, unless
+it's an absolute pathname (i.e. begins with '/'), the first file by that
+name discovered in the @Encoding_Path path list is used.
+
+The encoding in the file is loaded and kept in the %Encoding_Table
+table. Earlier encodings of the same name are replaced.
+
+This function is automaticly called by expat when it encounters an encoding
+it doesn't know about. Expat shouldn't call this twice for the same
+encoding name. The only reason users should use this function is to
+explicitly load an encoding not contained in the @Encoding_Path list.
+
+=back
+
+=head1 AUTHORS
+
+Larry Wall <F<larry@wall.org>> wrote version 1.0.
+
+Clark Cooper <F<coopercc@netheaven.com>> picked up support, changed the API
+for this version (2.x), provided documentation, and added some standard
+package features.
+
+=cut
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Bitmap/Bitmap.dll b/Master/xemtex/perl/site/lib/auto/Tk/Bitmap/Bitmap.dll
new file mode 100644
index 00000000000..f6b75b704c5
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Bitmap/Bitmap.dll
Binary files differ
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/CancelRepeat.al b/Master/xemtex/perl/site/lib/auto/Tk/CancelRepeat.al
new file mode 100644
index 00000000000..82105140755
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/CancelRepeat.al
@@ -0,0 +1,15 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 405 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\CancelRepeat.al)"
+sub CancelRepeat
+{
+ my $w = shift->MainWindow;
+ my $id = delete $w->{_afterId_};
+ $w->after('cancel',$id) if (defined $id);
+}
+
+# end of Tk::CancelRepeat
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Canvas/Canvas.dll b/Master/xemtex/perl/site/lib/auto/Tk/Canvas/Canvas.dll
new file mode 100644
index 00000000000..b6a1321a741
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Canvas/Canvas.dll
Binary files differ
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Clipboard/autosplit.ix b/Master/xemtex/perl/site/lib/auto/Tk/Clipboard/autosplit.ix
new file mode 100644
index 00000000000..360e44863af
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Clipboard/autosplit.ix
@@ -0,0 +1,6 @@
+# Index created by AutoSplit for blib\lib\Tk/Clipboard.pm
+# (file acts as timestamp)
+package Tk::Clipboard;
+sub getSelected
+;
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Clipboard/getSelected.al b/Master/xemtex/perl/site/lib/auto/Tk/Clipboard/getSelected.al
new file mode 100644
index 00000000000..99d70ee5d76
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Clipboard/getSelected.al
@@ -0,0 +1,15 @@
+# NOTE: Derived from blib\lib\Tk/Clipboard.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Clipboard;
+
+#line 103 "blib\lib\Tk/Clipboard.pm (autosplit into blib\lib\auto\Tk\Clipboard\getSelected.al)"
+sub getSelected
+{
+ my $w = shift;
+ my $val = Tk::catch { $w->get('sel.first','sel.last') };
+ return $val;
+}
+
+1;
+# end of Tk::Clipboard::getSelected
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/EnterFocus.al b/Master/xemtex/perl/site/lib/auto/Tk/EnterFocus.al
new file mode 100644
index 00000000000..93cc88a8176
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/EnterFocus.al
@@ -0,0 +1,26 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 568 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\EnterFocus.al)"
+# focusFollowsMouse
+#
+# If this procedure is invoked, Tk will enter "focus-follows-mouse"
+# mode, where the focus is always on whatever window contains the
+# mouse. If this procedure isn't invoked, then the user typically
+# has to click on a window to give it the focus.
+#
+# Arguments:
+# None.
+
+sub EnterFocus
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ my $d = $Ev->d;
+ $w->Tk::focus() if ($d eq 'NotifyAncestor' || $d eq 'NotifyNonlinear' || $d eq 'NotifyInferior');
+}
+
+# end of Tk::EnterFocus
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Entry/Entry.dll b/Master/xemtex/perl/site/lib/auto/Tk/Entry/Entry.dll
new file mode 100644
index 00000000000..dd36353deef
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Entry/Entry.dll
Binary files differ
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Error.al b/Master/xemtex/perl/site/lib/auto/Tk/Error.al
new file mode 100644
index 00000000000..4d4f06dc941
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Error.al
@@ -0,0 +1,20 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 393 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\Error.al)"
+sub Error
+{my $w = shift;
+ my $error = shift;
+ if (Exists($w))
+ {
+ my $grab = $w->grab('current');
+ $grab->Unbusy if (defined $grab);
+ }
+ chomp($error);
+ warn "Tk::Error: $error\n " . join("\n ",@_)."\n";
+}
+
+# end of Tk::Error
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Event/Event.dll b/Master/xemtex/perl/site/lib/auto/Tk/Event/Event.dll
new file mode 100644
index 00000000000..2339002b71b
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Event/Event.dll
Binary files differ
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/FirstMenu.al b/Master/xemtex/perl/site/lib/auto/Tk/FirstMenu.al
new file mode 100644
index 00000000000..c5e12b684e7
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/FirstMenu.al
@@ -0,0 +1,21 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 615 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\FirstMenu.al)"
+# tkFirstMenu --
+# This procedure traverses to the first menubutton in the toplevel
+# for a given window, and posts that menubutton's menu.
+#
+# Arguments:
+# w - Name of a window. Selects which toplevel
+# to search for menubuttons.
+sub FirstMenu
+{
+ my $w = shift;
+ $w = $w->toplevel->FindMenu('');
+}
+
+# end of Tk::FirstMenu
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/FocusChildren.al b/Master/xemtex/perl/site/lib/auto/Tk/FocusChildren.al
new file mode 100644
index 00000000000..f6d8f6af753
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/FocusChildren.al
@@ -0,0 +1,35 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 422 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\FocusChildren.al)"
+#----------------------------------------------------------------------------
+# focus.tcl --
+#
+# This file defines several procedures for managing the input
+# focus.
+#
+# @(#) focus.tcl 1.6 94/12/19 17:06:46
+#
+# Copyright (c) 1994 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+sub FocusChildren { shift->children }
+
+#
+# focusNext --
+# This procedure is invoked to move the input focus to the next window
+# after a given one. "Next" is defined in terms of the window
+# stacking order, with all the windows underneath a given top-level
+# (no matter how deeply nested in the hierarchy) considered except
+# for frames and toplevels.
+#
+# Arguments:
+# w - Name of a window: the procedure will set the focus
+# to the next window after this one in the traversal
+# order.
+# end of Tk::FocusChildren
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/FocusOK.al b/Master/xemtex/perl/site/lib/auto/Tk/FocusOK.al
new file mode 100644
index 00000000000..bffeffba8f4
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/FocusOK.al
@@ -0,0 +1,33 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 542 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\FocusOK.al)"
+sub FocusOK
+{
+ my $w = shift;
+ my $value;
+ catch { $value = $w->cget('-takefocus') };
+ if (!$@ && defined($value))
+ {
+ return 0 if ($value eq '0');
+ return $w->viewable if ($value eq '1');
+ $value = $w->$value();
+ return $value if (defined $value);
+ }
+ if (!$w->viewable)
+ {
+ return 0;
+ }
+ catch { $value = $w->cget('-state') } ;
+ if (!$@ && defined($value) && $value eq 'disabled')
+ {
+ return 0;
+ }
+ $value = grep(/Key|Focus/,$w->Tk::bind(),$w->Tk::bind(ref($w)));
+ return $value;
+}
+
+# end of Tk::FocusOK
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Frame/AddScrollbars.al b/Master/xemtex/perl/site/lib/auto/Tk/Frame/AddScrollbars.al
new file mode 100644
index 00000000000..ef3b7537d6e
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Frame/AddScrollbars.al
@@ -0,0 +1,52 @@
+# NOTE: Derived from blib\lib\Tk/Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 221 "blib\lib\Tk/Frame.pm (autosplit into blib\lib\auto\Tk\Frame\AddScrollbars.al)"
+sub AddScrollbars
+{
+ require Tk::Scrollbar;
+ my ($cw,$w) = @_;
+ my $def = '';
+ my ($x,$y) = ('','');
+ my $s = 0;
+ my $c;
+ $cw->freeze_on_map;
+ foreach $c ($w->configure)
+ {
+ my $opt = $c->[0];
+ if ($opt eq '-yscrollcommand')
+ {
+ my $slice = Tk::Frame->new($cw,Name => 'ysbslice');
+ my $ysb = Tk::Scrollbar->new($slice,-orient => 'vertical', -command => [ 'yview', $w ]);
+ my $size = $ysb->cget('-width');
+ my $corner = Tk::Frame->new($slice,Name=>'corner','-relief' => 'raised',
+ '-width' => $size, '-height' => $size);
+ $ysb->pack(-side => 'left', -fill => 'y');
+ $cw->Advertise('yscrollbar' => $ysb);
+ $cw->Advertise('corner' => $corner);
+ $cw->Advertise('ysbslice' => $slice);
+ $corner->{'before'} = $ysb->PathName;
+ $slice->{'before'} = $w->PathName;
+ $y = 'w';
+ $s = 1;
+ }
+ elsif ($opt eq '-xscrollcommand')
+ {
+ my $xsb = Tk::Scrollbar->new($cw,-orient => 'horizontal', -command => [ 'xview', $w ]);
+ $cw->Advertise('xscrollbar' => $xsb);
+ $xsb->{'before'} = $w->PathName;
+ $x = 's';
+ $s = 1;
+ }
+ }
+ if ($s)
+ {
+ $cw->Advertise('scrolled' => $w);
+ $cw->ConfigSpecs('-scrollbars' => ['METHOD','scrollbars','Scrollbars',$x.$y]);
+ }
+}
+
+# end of Tk::Frame::AddScrollbars
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Frame/FindMenu.al b/Master/xemtex/perl/site/lib/auto/Tk/Frame/FindMenu.al
new file mode 100644
index 00000000000..b82a61da507
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Frame/FindMenu.al
@@ -0,0 +1,22 @@
+# NOTE: Derived from blib\lib\Tk/Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 359 "blib\lib\Tk/Frame.pm (autosplit into blib\lib\auto\Tk\Frame\FindMenu.al)"
+sub FindMenu
+{
+ my ($w,$char) = @_;
+ my $child;
+ my $match;
+ foreach $child ($w->children)
+ {
+ next unless (ref $child);
+ $match = $child->FindMenu($char);
+ return $match if (defined $match);
+ }
+ return undef;
+}
+
+1;
+# end of Tk::Frame::FindMenu
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Frame/autosplit.ix b/Master/xemtex/perl/site/lib/auto/Tk/Frame/autosplit.ix
new file mode 100644
index 00000000000..670cd9eb1c4
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Frame/autosplit.ix
@@ -0,0 +1,24 @@
+# Index created by AutoSplit for blib\lib\Tk/Frame.pm
+# (file acts as timestamp)
+package Tk::Frame;
+sub labelPack
+;
+sub labelVariable
+;
+sub label
+;
+sub queuePack
+;
+sub sbset
+;
+sub freeze_on_map
+;
+sub AddScrollbars
+;
+sub packscrollbars
+;
+sub scrollbars
+;
+sub FindMenu
+;
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Frame/freeze_on_map.al b/Master/xemtex/perl/site/lib/auto/Tk/Frame/freeze_on_map.al
new file mode 100644
index 00000000000..61697e647fb
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Frame/freeze_on_map.al
@@ -0,0 +1,18 @@
+# NOTE: Derived from blib\lib\Tk/Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 211 "blib\lib\Tk/Frame.pm (autosplit into blib\lib\auto\Tk\Frame\freeze_on_map.al)"
+sub freeze_on_map
+{
+ my ($w) = @_;
+ unless ($w->Tk::bind('Freeze','<Map>'))
+ {
+ $w->Tk::bind('Freeze','<Map>',['packPropagate' => 0])
+ }
+ $w->AddBindTag('Freeze');
+}
+
+# end of Tk::Frame::freeze_on_map
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Frame/label.al b/Master/xemtex/perl/site/lib/auto/Tk/Frame/label.al
new file mode 100644
index 00000000000..3196344c9b8
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Frame/label.al
@@ -0,0 +1,24 @@
+# NOTE: Derived from blib\lib\Tk/Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 178 "blib\lib\Tk/Frame.pm (autosplit into blib\lib\auto\Tk\Frame\label.al)"
+sub label
+{
+ my ($cw,$val) = @_;
+ my $var = $cw->cget('-labelVariable');
+ if (@_ > 1 && defined $val)
+ {
+ if (!defined $var)
+ {
+ $var = \$cw->{Configure}{'-label'};
+ $cw->labelVariable($var);
+ }
+ $$var = $val;
+ }
+ return (defined $var) ? $$var : undef;;
+}
+
+# end of Tk::Frame::label
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Frame/labelPack.al b/Master/xemtex/perl/site/lib/auto/Tk/Frame/labelPack.al
new file mode 100644
index 00000000000..1dd66963088
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Frame/labelPack.al
@@ -0,0 +1,50 @@
+# NOTE: Derived from blib\lib\Tk/Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 117 "blib\lib\Tk/Frame.pm (autosplit into blib\lib\auto\Tk\Frame\labelPack.al)"
+sub labelPack
+{
+ my ($cw,$val) = @_;
+ my $w = $cw->Subwidget('label');
+ my @result = ();
+ if (@_ > 1)
+ {
+ if (defined($w) && !defined($val))
+ {
+ $w->packForget;
+ }
+ elsif (defined($val) && !defined ($w))
+ {
+ require Tk::Label;
+ $w = Tk::Label->new($cw,-textvariable => $cw->labelVariable);
+ $cw->Advertise('label' => $w);
+ $cw->ConfigDelegate('label',qw(-text -textvariable));
+ }
+ if (defined($val) && defined($w))
+ {
+ my %pack = @$val;
+ unless (exists $pack{-side})
+ {
+ $pack{-side} = 'top' unless (exists $pack{-side});
+ }
+ unless (exists $pack{-fill})
+ {
+ $pack{-fill} = 'x' if ($pack{-side} =~ /(top|bottom)/);
+ $pack{-fill} = 'y' if ($pack{-side} =~ /(left|right)/);
+ }
+ unless (exists($pack{'-before'}) || exists($pack{'-after'}))
+ {
+ my $before = ($cw->packSlaves)[0];
+ $pack{'-before'} = $before if (defined $before);
+ }
+ $w->pack(%pack);
+ }
+ }
+ @result = $w->packInfo if (defined $w);
+ return (wantarray) ? @result : \@result;
+}
+
+# end of Tk::Frame::labelPack
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Frame/labelVariable.al b/Master/xemtex/perl/site/lib/auto/Tk/Frame/labelVariable.al
new file mode 100644
index 00000000000..6a068e32873
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Frame/labelVariable.al
@@ -0,0 +1,27 @@
+# NOTE: Derived from blib\lib\Tk/Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 159 "blib\lib\Tk/Frame.pm (autosplit into blib\lib\auto\Tk\Frame\labelVariable.al)"
+sub labelVariable
+{
+ my ($cw,$val) = @_;
+ my $var = \$cw->{Configure}{'-labelVariable'};
+ if (@_ > 1 && defined $val)
+ {
+ $$var = $val;
+ $$val = '' unless (defined $$val);
+ my $w = $cw->Subwidget('label');
+ unless (defined $w)
+ {
+ $cw->labelPack([]);
+ $w = $cw->Subwidget('label');
+ }
+ $w->configure(-textvariable => $val);
+ }
+ return $$var;
+}
+
+# end of Tk::Frame::labelVariable
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Frame/packscrollbars.al b/Master/xemtex/perl/site/lib/auto/Tk/Frame/packscrollbars.al
new file mode 100644
index 00000000000..54c59d5bcf2
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Frame/packscrollbars.al
@@ -0,0 +1,86 @@
+# NOTE: Derived from blib\lib\Tk/Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 265 "blib\lib\Tk/Frame.pm (autosplit into blib\lib\auto\Tk\Frame\packscrollbars.al)"
+sub packscrollbars
+{
+ my ($cw) = @_;
+ my $opt = $cw->cget('-scrollbars');
+ my $slice = $cw->Subwidget('ysbslice');
+ my $xsb = $cw->Subwidget('xscrollbar');
+ my $corner = $cw->Subwidget('corner');
+ my $w = $cw->Subwidget('scrolled');
+ my $xside = (($opt =~ /n/) ? 'top' : 'bottom');
+ my $havex = 0;
+ my $havey = 0;
+ $opt =~ s/r//;
+ $cw->{'pack_pending'} = 0;
+ if (defined $slice)
+ {
+ my $reqy;
+ my $ysb = $cw->Subwidget('yscrollbar');
+ if ($opt =~ /(o)?[we]/ && (($reqy = !defined($1)) || $ysb->Needed))
+ {
+ my $yside = (($opt =~ /w/) ? 'left' : 'right');
+ $slice->pack(-side => $yside, -fill => 'y',-before => $slice->{'before'});
+ $havey = 1;
+ if ($reqy)
+ {
+ $w->configure(-yscrollcommand => ['set', $ysb]);
+ }
+ else
+ {
+ $w->configure(-yscrollcommand => ['sbset', $cw, $ysb, \$cw->{'packysb'}]);
+ }
+ }
+ else
+ {
+ $w->configure(-yscrollcommand => undef) unless $opt =~ s/[we]//;
+ $slice->packForget;
+ }
+ $cw->{'packysb'} = $havey;
+ }
+ if (defined $xsb)
+ {
+ my $reqx;
+ if ($opt =~ /(o)?[ns]/ && (($reqx = !defined($1)) || $xsb->Needed))
+ {
+ $xsb->pack(-side => $xside, -fill => 'x',-before => $xsb->{'before'});
+ $havex = 1;
+ if ($reqx)
+ {
+ $w->configure(-xscrollcommand => ['set', $xsb]);
+ }
+ else
+ {
+ $w->configure(-xscrollcommand => ['sbset', $cw, $xsb, \$cw->{'packxsb'}]);
+ }
+ }
+ else
+ {
+ $w->configure(-xscrollcommand => undef) unless $opt =~ s/[ns]//;
+ $xsb->packForget;
+ }
+ $cw->{'packxsb'} = $havex;
+ }
+ if (defined $corner)
+ {
+ if ($havex && $havey && defined $corner->{'before'})
+ {
+ my $anchor = $opt;
+ $anchor =~ s/o//g;
+ $corner->configure(-height => $xsb->ReqHeight);
+ $corner->pack(-before => $corner->{'before'}, -side => $xside,
+ -anchor => $anchor, -fill => 'x');
+ }
+ else
+ {
+ $corner->packForget;
+ }
+ }
+}
+
+# end of Tk::Frame::packscrollbars
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Frame/queuePack.al b/Master/xemtex/perl/site/lib/auto/Tk/Frame/queuePack.al
new file mode 100644
index 00000000000..a8a24927d8c
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Frame/queuePack.al
@@ -0,0 +1,18 @@
+# NOTE: Derived from blib\lib\Tk/Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 194 "blib\lib\Tk/Frame.pm (autosplit into blib\lib\auto\Tk\Frame\queuePack.al)"
+sub queuePack
+{
+ my ($cw) = @_;
+ unless ($cw->{'pack_pending'})
+ {
+ $cw->{'pack_pending'} = 1;
+ $cw->afterIdle([$cw,'packscrollbars']);
+ }
+}
+
+# end of Tk::Frame::queuePack
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Frame/sbset.al b/Master/xemtex/perl/site/lib/auto/Tk/Frame/sbset.al
new file mode 100644
index 00000000000..357fcfd4a4e
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Frame/sbset.al
@@ -0,0 +1,15 @@
+# NOTE: Derived from blib\lib\Tk/Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 204 "blib\lib\Tk/Frame.pm (autosplit into blib\lib\auto\Tk\Frame\sbset.al)"
+sub sbset
+{
+ my ($cw,$sb,$ref,@args) = @_;
+ $sb->set(@args);
+ $cw->queuePack if (@args == 2 && $sb->Needed != $$ref);
+}
+
+# end of Tk::Frame::sbset
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Frame/scrollbars.al b/Master/xemtex/perl/site/lib/auto/Tk/Frame/scrollbars.al
new file mode 100644
index 00000000000..2a4706eb198
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Frame/scrollbars.al
@@ -0,0 +1,24 @@
+# NOTE: Derived from blib\lib\Tk/Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 343 "blib\lib\Tk/Frame.pm (autosplit into blib\lib\auto\Tk\Frame\scrollbars.al)"
+sub scrollbars
+{
+ my ($cw,$opt) = @_;
+ my $var = \$cw->{'-scrollbars'};
+ if (@_ > 1)
+ {
+ my $old = $$var;
+ if (!defined $old || $old ne $opt)
+ {
+ $$var = $opt;
+ $cw->queuePack;
+ }
+ }
+ return $$var;
+}
+
+# end of Tk::Frame::scrollbars
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/ImageNames.al b/Master/xemtex/perl/site/lib/auto/Tk/ImageNames.al
new file mode 100644
index 00000000000..2a4bd24818a
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/ImageNames.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 667 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\ImageNames.al)"
+sub ImageNames
+{
+ image('names');
+}
+
+# end of Tk::ImageNames
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/ImageTypes.al b/Master/xemtex/perl/site/lib/auto/Tk/ImageTypes.al
new file mode 100644
index 00000000000..0f9b8be674a
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/ImageTypes.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 672 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\ImageTypes.al)"
+sub ImageTypes
+{
+ image('types');
+}
+
+# end of Tk::ImageTypes
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/AutoScan.al b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/AutoScan.al
new file mode 100644
index 00000000000..e366618df81
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/AutoScan.al
@@ -0,0 +1,48 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 634 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\AutoScan.al)"
+# AutoScan --
+# This procedure is invoked when the mouse leaves an entry window
+# with button 1 down. It scrolls the window up, down, left, or
+# right, depending on where the mouse left the window, and reschedules
+# itself as an "after" command so that the window continues to scroll until
+# the mouse moves back into the window or the mouse button is released.
+#
+# Arguments:
+# w - The entry window.
+# x - The x-coordinate of the mouse when it left the window.
+# y - The y-coordinate of the mouse when it left the window.
+sub AutoScan
+{
+ my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ if ($y >= $w->height)
+ {
+ $w->yview('scroll',1,'units')
+ }
+ elsif ($y < 0)
+ {
+ $w->yview('scroll',-1,'units')
+ }
+ elsif ($x >= $w->width)
+ {
+ $w->xview('scroll',2,'units')
+ }
+ elsif ($x < 0)
+ {
+ $w->xview('scroll',-2,'units')
+ }
+ else
+ {
+ return;
+ }
+ $w->Motion($w->index("@" . $x . ',' . $y));
+ $w->RepeatId($w->after(50,'AutoScan',$w,$x,$y));
+}
+
+# end of Tk::Listbox::AutoScan
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/BeginExtend.al b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/BeginExtend.al
new file mode 100644
index 00000000000..ad3fe4c6d33
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/BeginExtend.al
@@ -0,0 +1,29 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 584 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\BeginExtend.al)"
+# BeginExtend --
+#
+# This procedure is typically invoked on shift-button-1 presses. It
+# begins the process of extending a selection in the listbox. Its
+# exact behavior depends on the selection mode currently in effect
+# for the listbox; see the Motif documentation for details.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element for the selection operation (typically the
+# one under the pointer). Must be in numerical form.
+sub BeginExtend
+{
+ my $w = shift;
+ my $el = shift;
+ if ($w->cget('-selectmode') eq 'extended' && $w->selectionIncludes('anchor'))
+ {
+ $w->Motion($el)
+ }
+}
+
+# end of Tk::Listbox::BeginExtend
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/BeginSelect.al b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/BeginSelect.al
new file mode 100644
index 00000000000..b29359c70c5
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/BeginSelect.al
@@ -0,0 +1,45 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 491 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\BeginSelect.al)"
+# BeginSelect --
+#
+# This procedure is typically invoked on button-1 presses. It begins
+# the process of making a selection in the listbox. Its exact behavior
+# depends on the selection mode currently in effect for the listbox;
+# see the Motif documentation for details.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element for the selection operation (typically the
+# one under the pointer). Must be in numerical form.
+sub BeginSelect
+{
+ my $w = shift;
+ my $el = shift;
+ if ($w->cget('-selectmode') eq 'multiple')
+ {
+ if ($w->selectionIncludes($el))
+ {
+ $w->selectionClear($el)
+ }
+ else
+ {
+ $w->selectionSet($el)
+ }
+ }
+ else
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet($el);
+ $w->selectionAnchor($el);
+ @Selection = ();
+ $Prev = $el
+ }
+ $w->focus if ($w->cget('-takefocus'));
+}
+
+# end of Tk::Listbox::BeginSelect
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/BeginToggle.al b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/BeginToggle.al
new file mode 100644
index 00000000000..3f7ddff4cf9
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/BeginToggle.al
@@ -0,0 +1,39 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 604 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\BeginToggle.al)"
+# BeginToggle --
+#
+# This procedure is typically invoked on control-button-1 presses. It
+# begins the process of toggling a selection in the listbox. Its
+# exact behavior depends on the selection mode currently in effect
+# for the listbox; see the Motif documentation for details.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element for the selection operation (typically the
+# one under the pointer). Must be in numerical form.
+sub BeginToggle
+{
+ my $w = shift;
+ my $el = shift;
+ if ($w->cget('-selectmode') eq 'extended')
+ {
+ @Selection = $w->curselection();
+ $Prev = $el;
+ $w->selectionAnchor($el);
+ if ($w->selectionIncludes($el))
+ {
+ $w->selectionClear($el)
+ }
+ else
+ {
+ $w->selectionSet($el)
+ }
+ }
+}
+
+# end of Tk::Listbox::BeginToggle
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/ButtonRelease_1.al b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/ButtonRelease_1.al
new file mode 100644
index 00000000000..7461080092f
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/ButtonRelease_1.al
@@ -0,0 +1,16 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 450 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\ButtonRelease_1.al)"
+sub ButtonRelease_1
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->CancelRepeat;
+ $w->activate($Ev->xy);
+}
+
+# end of Tk::Listbox::ButtonRelease_1
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/Cancel.al b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/Cancel.al
new file mode 100644
index 00000000000..3974c2e145c
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/Cancel.al
@@ -0,0 +1,43 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 754 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\Cancel.al)"
+# Cancel
+#
+# This procedure is invoked to cancel an extended selection in
+# progress. If there is an extended selection in progress, it
+# restores all of the items between the active one and the anchor
+# to their previous selection state.
+#
+# Arguments:
+# w - The listbox widget.
+sub Cancel
+{
+ my $w = shift;
+ if ($w->cget('-selectmode') ne 'extended' || !defined $Prev)
+ {
+ return;
+ }
+ $first = $w->index('anchor');
+ $last = $Prev;
+ if ($first > $last)
+ {
+ $tmp = $first;
+ $first = $last;
+ $last = $tmp
+ }
+ $w->selectionClear($first,$last);
+ while ($first <= $last)
+ {
+ if (Tk::lsearch(\@Selection,$first) >= 0)
+ {
+ $w->selectionSet($first)
+ }
+ $first += 1
+ }
+}
+
+# end of Tk::Listbox::Cancel
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/Cntrl_End.al b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/Cntrl_End.al
new file mode 100644
index 00000000000..de53c8048aa
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/Cntrl_End.al
@@ -0,0 +1,18 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 470 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\Cntrl_End.al)"
+sub Cntrl_End
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->activate('end');
+ $w->see('end');
+ $w->selectionClear(0,'end');
+ $w->selectionSet('end')
+}
+
+# end of Tk::Listbox::Cntrl_End
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/Cntrl_Home.al b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/Cntrl_Home.al
new file mode 100644
index 00000000000..34f09d21bb9
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/Cntrl_Home.al
@@ -0,0 +1,18 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 459 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\Cntrl_Home.al)"
+sub Cntrl_Home
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->activate(0);
+ $w->see(0);
+ $w->selectionClear(0,'end');
+ $w->selectionSet(0)
+}
+
+# end of Tk::Listbox::Cntrl_Home
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/Cntrl_backslash.al b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/Cntrl_backslash.al
new file mode 100644
index 00000000000..382a68528a8
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/Cntrl_backslash.al
@@ -0,0 +1,18 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 481 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\Cntrl_backslash.al)"
+sub Cntrl_backslash
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ if ($w->cget('-selectmode') ne 'browse')
+ {
+ $w->selectionClear(0,'end');
+ }
+}
+
+# end of Tk::Listbox::Cntrl_backslash
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/DataExtend.al b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/DataExtend.al
new file mode 100644
index 00000000000..fdeb0368bba
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/DataExtend.al
@@ -0,0 +1,39 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 724 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\DataExtend.al)"
+# DataExtend
+#
+# This procedure is called for key-presses such as Shift-KEndData.
+# If the selection mode isn't multiple or extend then it does nothing.
+# Otherwise it moves the active element to el and, if we're in
+# extended mode, extends the selection to that point.
+#
+# Arguments:
+# w - The listbox widget.
+# el - An integer element number.
+sub DataExtend
+{
+ my $w = shift;
+ my $el = shift;
+ $mode = $w->cget('-selectmode');
+ if ($mode eq 'extended')
+ {
+ $w->activate($el);
+ $w->see($el);
+ if ($w->selectionIncludes('anchor'))
+ {
+ $w->Motion($el)
+ }
+ }
+ elsif ($mode eq 'multiple')
+ {
+ $w->activate($el);
+ $w->see($el)
+ }
+}
+
+# end of Tk::Listbox::DataExtend
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/ExtendUpDown.al b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/ExtendUpDown.al
new file mode 100644
index 00000000000..9c21c0a93a1
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/ExtendUpDown.al
@@ -0,0 +1,30 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 703 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\ExtendUpDown.al)"
+# ExtendUpDown --
+#
+# Does nothing unless we're in extended selection mode; in this
+# case it moves the location cursor (active element) up or down by
+# one element, and extends the selection to that point.
+#
+# Arguments:
+# w - The listbox widget.
+# amount - +1 to move down one item, -1 to move back one item.
+sub ExtendUpDown
+{
+ my $w = shift;
+ my $amount = shift;
+ if ($w->cget('-selectmode') ne 'extended')
+ {
+ return;
+ }
+ $w->activate($w->index('active')+$amount);
+ $w->see('active');
+ $w->Motion($w->index('active'))
+}
+
+# end of Tk::Listbox::ExtendUpDown
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/Listbox.dll b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/Listbox.dll
new file mode 100644
index 00000000000..de4907125a9
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/Listbox.dll
Binary files differ
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/Motion.al b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/Motion.al
new file mode 100644
index 00000000000..d67ec8121d9
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/Motion.al
@@ -0,0 +1,66 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 527 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\Motion.al)"
+# Motion --
+#
+# This procedure is called to process mouse motion events while
+# button 1 is down. It may move or extend the selection, depending
+# on the listbox's selection mode.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element under the pointer (must be a number).
+sub Motion
+{
+ my $w = shift;
+ my $el = shift;
+ if (defined($Prev) && $el == $Prev)
+ {
+ return;
+ }
+ $anchor = $w->index('anchor');
+ my $mode = $w->cget('-selectmode');
+ if ($mode eq 'browse')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet($el);
+ $Prev = $el;
+ }
+ elsif ($mode eq 'extended')
+ {
+ $i = $Prev;
+ if ($w->selectionIncludes('anchor'))
+ {
+ $w->selectionClear($i,$el);
+ $w->selectionSet('anchor',$el)
+ }
+ else
+ {
+ $w->selectionClear($i,$el);
+ $w->selectionClear('anchor',$el)
+ }
+ while ($i < $el && $i < $anchor)
+ {
+ if (Tk::lsearch(\@Selection,$i) >= 0)
+ {
+ $w->selectionSet($i)
+ }
+ $i += 1
+ }
+ while ($i > $el && $i > $anchor)
+ {
+ if (Tk::lsearch(\@Selection,$i) >= 0)
+ {
+ $w->selectionSet($i)
+ }
+ $i += -1
+ }
+ $Prev = $el
+ }
+}
+
+# end of Tk::Listbox::Motion
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/SelectAll.al b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/SelectAll.al
new file mode 100644
index 00000000000..319ce5c2a9c
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/SelectAll.al
@@ -0,0 +1,31 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 788 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\SelectAll.al)"
+# SelectAll
+#
+# This procedure is invoked to handle the "select all" operation.
+# For single and browse mode, it just selects the active element.
+# Otherwise it selects everything in the widget.
+#
+# Arguments:
+# w - The listbox widget.
+sub SelectAll
+{
+ my $w = shift;
+ my $mode = $w->cget('-selectmode');
+ if ($mode eq 'single' || $mode eq 'browse')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet('active')
+ }
+ else
+ {
+ $w->selectionSet(0,'end')
+ }
+}
+
+# end of Tk::Listbox::SelectAll
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/SetList.al b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/SetList.al
new file mode 100644
index 00000000000..5f4ba81ddf3
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/SetList.al
@@ -0,0 +1,15 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 811 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\SetList.al)"
+sub SetList
+{
+ my $w = shift;
+ $w->delete(0,'end');
+ $w->insert('end',@_);
+}
+
+# end of Tk::Listbox::SetList
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/UpDown.al b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/UpDown.al
new file mode 100644
index 00000000000..e2ce7edce78
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/UpDown.al
@@ -0,0 +1,39 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 673 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\UpDown.al)"
+# UpDown --
+#
+# Moves the location cursor (active element) up or down by one element,
+# and changes the selection if we're in browse or extended selection
+# mode.
+#
+# Arguments:
+# w - The listbox widget.
+# amount - +1 to move down one item, -1 to move back one item.
+sub UpDown
+{
+ my $w = shift;
+ my $amount = shift;
+ $w->activate($w->index('active')+$amount);
+ $w->see('active');
+ $LNet__0 = $w->cget('-selectmode');
+ if ($LNet__0 eq 'browse')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet('active')
+ }
+ elsif ($LNet__0 eq 'extended')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet('active');
+ $w->selectionAnchor('active');
+ $Prev = $w->index('active');
+ @Selection = ();
+ }
+}
+
+# end of Tk::Listbox::UpDown
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/autosplit.ix b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/autosplit.ix
new file mode 100644
index 00000000000..5846f38c4ce
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/autosplit.ix
@@ -0,0 +1,42 @@
+# Index created by AutoSplit for ..\blib\lib\Tk\Listbox.pm
+# (file acts as timestamp)
+package Tk::Listbox;
+sub xyIndex
+;
+sub ButtonRelease_1
+;
+sub Cntrl_Home
+;
+sub Cntrl_End
+;
+sub Cntrl_backslash
+;
+sub BeginSelect
+;
+sub Motion
+;
+sub BeginExtend
+;
+sub BeginToggle
+;
+sub AutoScan
+;
+sub UpDown
+;
+sub ExtendUpDown
+;
+sub DataExtend
+;
+sub Cancel
+;
+sub SelectAll
+;
+sub SetList
+;
+sub deleteSelected
+;
+sub clipboardPaste
+;
+sub getSelected
+;
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/clipboardPaste.al b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/clipboardPaste.al
new file mode 100644
index 00000000000..7deae1e75a4
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/clipboardPaste.al
@@ -0,0 +1,21 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 828 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\clipboardPaste.al)"
+sub clipboardPaste
+{
+ my $w = shift;
+ my $index = $w->index('active') || $w->index($w->XEvent->xy);
+ my $str;
+ eval {local $SIG{__DIE__}; $str = $w->clipboardGet };
+ return if $@;
+ foreach (split("\n",$str))
+ {
+ $w->insert($index++,$_);
+ }
+}
+
+# end of Tk::Listbox::clipboardPaste
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/deleteSelected.al b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/deleteSelected.al
new file mode 100644
index 00000000000..6fc89af9e91
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/deleteSelected.al
@@ -0,0 +1,18 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 818 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\deleteSelected.al)"
+sub deleteSelected
+{
+ my $w = shift;
+ my $i;
+ foreach $i (reverse $w->curselection)
+ {
+ $w->delete($i);
+ }
+}
+
+# end of Tk::Listbox::deleteSelected
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/getSelected.al b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/getSelected.al
new file mode 100644
index 00000000000..64706cfa9b4
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/getSelected.al
@@ -0,0 +1,22 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 841 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\getSelected.al)"
+sub getSelected
+{
+ my ($w) = @_;
+ my $i;
+ my (@result) = ();
+ foreach $i ($w->curselection)
+ {
+ push(@result,$w->get($i));
+ }
+ return (wantarray) ? @result : $result[0];
+}
+
+1;
+__END__
+1;
+# end of Tk::Listbox::getSelected
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Listbox/xyIndex.al b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/xyIndex.al
new file mode 100644
index 00000000000..bfd364a7f9b
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Listbox/xyIndex.al
@@ -0,0 +1,27 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 431 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\xyIndex.al)"
+#
+# Bind --
+# This procedure is invoked the first time the mouse enters a listbox
+# widget or a listbox widget receives the input focus. It creates
+# all of the class bindings for listboxes.
+#
+# Arguments:
+# event - Indicates which event caused the procedure to be invoked
+# (Enter or FocusIn). It is used so that we can carry out
+# the functions of that event in addition to setting up
+# bindings.
+
+sub xyIndex
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ return $w->index($Ev->xy);
+}
+
+# end of Tk::Listbox::xyIndex
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Menubutton/Menubutton.dll b/Master/xemtex/perl/site/lib/auto/Tk/Menubutton/Menubutton.dll
new file mode 100644
index 00000000000..f05f347cc8b
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Menubutton/Menubutton.dll
Binary files differ
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Pixmap/Pixmap.dll b/Master/xemtex/perl/site/lib/auto/Tk/Pixmap/Pixmap.dll
new file mode 100644
index 00000000000..0e887aaefc3
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Pixmap/Pixmap.dll
Binary files differ
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Receive.al b/Master/xemtex/perl/site/lib/auto/Tk/Receive.al
new file mode 100644
index 00000000000..e33b6bdc1af
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Receive.al
@@ -0,0 +1,23 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 638 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\Receive.al)"
+# If we have sub Clipboard in Tk then use base qw(Tk::Clipboard ....)
+# calls it when it does its eval "require $base"
+#sub Clipboard
+#{my $w = shift;
+# my $cmd = shift;
+# croak "Use clipboard\u$cmd()";
+#}
+
+sub Receive
+{
+ my $w = shift;
+ warn 'Receive(' . join(',',@_) .')';
+ die 'Tk rejects send(' . join(',',@_) .")\n";
+}
+
+# end of Tk::Receive
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/RepeatId.al b/Master/xemtex/perl/site/lib/auto/Tk/RepeatId.al
new file mode 100644
index 00000000000..06728f02221
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/RepeatId.al
@@ -0,0 +1,16 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 412 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\RepeatId.al)"
+sub RepeatId
+{
+ my ($w,$id) = @_;
+ $w = $w->MainWindow;
+ $w->CancelRepeat;
+ $w->{_afterId_} = $id;
+}
+
+# end of Tk::RepeatId
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scale/Activate.al b/Master/xemtex/perl/site/lib/auto/Tk/Scale/Activate.al
new file mode 100644
index 00000000000..500358c8e0e
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scale/Activate.al
@@ -0,0 +1,33 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scale.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scale;
+
+#line 86 "..\blib\lib\Tk\Scale.pm (autosplit into ..\blib\lib\auto\Tk\Scale\Activate.al)"
+# Activate --
+# This procedure is invoked to check a given x-y position in the
+# scale and activate the slider if the x-y position falls within
+# the slider.
+#
+# Arguments:
+# w - The scale widget.
+# x, y - Mouse coordinates.
+sub Activate
+{
+ my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ return if ($w->cget('-state') eq 'disabled');
+ my $ident = $w->identify($x,$y);
+ if (defined($ident) && $ident eq 'slider')
+ {
+ $w->configure(-state => 'active')
+ }
+ else
+ {
+ $w->configure(-state => 'normal')
+ }
+}
+
+# end of Tk::Scale::Activate
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scale/ButtonDown.al b/Master/xemtex/perl/site/lib/auto/Tk/Scale/ButtonDown.al
new file mode 100644
index 00000000000..61ed6f32c11
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scale/ButtonDown.al
@@ -0,0 +1,40 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scale.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scale;
+
+#line 138 "..\blib\lib\Tk\Scale.pm (autosplit into ..\blib\lib\auto\Tk\Scale\ButtonDown.al)"
+# ButtonDown --
+# This procedure is invoked when a button is pressed in a scale. It
+# takes different actions depending on where the button was pressed.
+#
+# Arguments:
+# w - The scale widget.
+# x, y - Mouse coordinates of button press.
+sub ButtonDown
+{
+ my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ $Tk::dragging = 0;
+ $el = $w->identify($x,$y);
+ return unless ($el);
+ if ($el eq 'trough1')
+ {
+ $w->Increment('up','little','initial')
+ }
+ elsif ($el eq 'trough2')
+ {
+ $w->Increment('down','little','initial')
+ }
+ elsif ($el eq 'slider')
+ {
+ $Tk::dragging = 1;
+ my @coords = $w->coords();
+ $Tk::deltaX = $x-$coords[0];
+ $Tk::deltaY = $y-$coords[1];
+ }
+}
+
+# end of Tk::Scale::ButtonDown
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scale/ButtonUp.al b/Master/xemtex/perl/site/lib/auto/Tk/Scale/ButtonUp.al
new file mode 100644
index 00000000000..d5a22a77a46
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scale/ButtonUp.al
@@ -0,0 +1,16 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scale.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scale;
+
+#line 129 "..\blib\lib\Tk\Scale.pm (autosplit into ..\blib\lib\auto\Tk\Scale\ButtonUp.al)"
+sub ButtonUp
+{
+ my ($w,$x,$y) = @_;
+ $w->CancelRepeat();
+ $w->EndDrag();
+ $w->Activate($x,$y)
+}
+
+# end of Tk::Scale::ButtonUp
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scale/ControlPress.al b/Master/xemtex/perl/site/lib/auto/Tk/Scale/ControlPress.al
new file mode 100644
index 00000000000..50d7ad8b447
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scale/ControlPress.al
@@ -0,0 +1,31 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scale.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scale;
+
+#line 255 "..\blib\lib\Tk\Scale.pm (autosplit into ..\blib\lib\auto\Tk\Scale\ControlPress.al)"
+# ControlPress --
+# This procedure handles button presses that are made with the Control
+# key down. Depending on the mouse position, it adjusts the scale
+# value to one end of the range or the other.
+#
+# Arguments:
+# w - The scale widget.
+# x, y - Mouse coordinates where the button was pressed.
+sub ControlPress
+{
+ my ($w,$x,$y) = @_;
+ my $el = $w->identify($x,$y);
+ return unless ($el);
+ if ($el eq 'trough1')
+ {
+ $w->set($w->cget('-from'))
+ }
+ elsif ($el eq 'trough2')
+ {
+ $w->set($w->cget('-to'))
+ }
+}
+
+1;
+# end of Tk::Scale::ControlPress
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scale/Drag.al b/Master/xemtex/perl/site/lib/auto/Tk/Scale/Drag.al
new file mode 100644
index 00000000000..0bc63b12879
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scale/Drag.al
@@ -0,0 +1,29 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scale.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scale;
+
+#line 169 "..\blib\lib\Tk\Scale.pm (autosplit into ..\blib\lib\auto\Tk\Scale\Drag.al)"
+# Drag --
+# This procedure is called when the mouse is dragged with
+# mouse button 1 down. If the drag started inside the slider
+# (i.e. the scale is active) then the scale's value is adjusted
+# to reflect the mouse's position.
+#
+# Arguments:
+# w - The scale widget.
+# x, y - Mouse coordinates.
+sub Drag
+{
+ my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ if (!$Tk::dragging)
+ {
+ return;
+ }
+ $w->set($w->get($x-$Tk::deltaX,$y-$Tk::deltaY))
+}
+
+# end of Tk::Scale::Drag
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scale/EndDrag.al b/Master/xemtex/perl/site/lib/auto/Tk/Scale/EndDrag.al
new file mode 100644
index 00000000000..86037b86d92
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scale/EndDrag.al
@@ -0,0 +1,23 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scale.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scale;
+
+#line 189 "..\blib\lib\Tk\Scale.pm (autosplit into ..\blib\lib\auto\Tk\Scale\EndDrag.al)"
+# EndDrag --
+# This procedure is called to end an interactive drag of the
+# slider. It just marks the drag as over.
+# Arguments:
+# w - The scale widget.
+sub EndDrag
+{
+ my $w = shift;
+ if (!$Tk::dragging)
+ {
+ return;
+ }
+ $Tk::dragging = 0;
+}
+
+# end of Tk::Scale::EndDrag
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scale/Enter.al b/Master/xemtex/perl/site/lib/auto/Tk/Scale/Enter.al
new file mode 100644
index 00000000000..1326a5ed9a0
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scale/Enter.al
@@ -0,0 +1,19 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scale.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scale;
+
+#line 118 "..\blib\lib\Tk\Scale.pm (autosplit into ..\blib\lib\auto\Tk\Scale\Enter.al)"
+sub Enter
+{
+ my ($w,$x,$y) = @_;
+ if ($Tk::strictMotif)
+ {
+ $w->{'activeBg'} = $w->cget('-activebackground');
+ $w->configure('-activebackground',$w->cget('-background'));
+ }
+ $w->Activate($x,$y);
+}
+
+# end of Tk::Scale::Enter
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scale/Increment.al b/Master/xemtex/perl/site/lib/auto/Tk/Scale/Increment.al
new file mode 100644
index 00000000000..76432eeaf40
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scale/Increment.al
@@ -0,0 +1,61 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scale.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scale;
+
+#line 203 "..\blib\lib\Tk\Scale.pm (autosplit into ..\blib\lib\auto\Tk\Scale\Increment.al)"
+# Increment --
+# This procedure is invoked to increment the value of a scale and
+# to set up auto-repeating of the action if that is desired. The
+# way the value is incremented depends on the "dir" and "big"
+# arguments.
+#
+# Arguments:
+# w - The scale widget.
+# dir - "up" means move value towards -from, "down" means
+# move towards -to.
+# big - Size of increments: "big" or "little".
+# repeat - Whether and how to auto-repeat the action: "noRepeat"
+# means don't auto-repeat, "initial" means this is the
+# first action in an auto-repeat sequence, and "again"
+# means this is the second repetition or later.
+sub Increment
+{
+ my $w = shift;
+ my $dir = shift;
+ my $big = shift;
+ my $repeat = shift;
+ my $inc;
+ if ($big eq 'big')
+ {
+ $inc = $w->cget('-bigincrement');
+ if ($inc == 0)
+ {
+ $inc = abs(($w->cget('-to')-$w->cget('-from')))/10.0
+ }
+ if ($inc < $w->cget('-resolution'))
+ {
+ $inc = $w->cget('-resolution')
+ }
+ }
+ else
+ {
+ $inc = $w->cget('-resolution')
+ }
+ if (($w->cget('-from') > $w->cget('-to')) ^ ($dir eq 'up'))
+ {
+ $inc = -$inc
+ }
+ $w->set($w->get()+$inc);
+ if ($repeat eq 'again')
+ {
+ $w->RepeatId($w->after($w->cget('-repeatinterval'),'Increment',$w,$dir,$big,'again'));
+ }
+ elsif ($repeat eq 'initial')
+ {
+ $w->RepeatId($w->after($w->cget('-repeatdelay'),'Increment',$w,$dir,$big,'again'));
+ }
+}
+
+# end of Tk::Scale::Increment
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scale/Leave.al b/Master/xemtex/perl/site/lib/auto/Tk/Scale/Leave.al
new file mode 100644
index 00000000000..eb6f7b69f89
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scale/Leave.al
@@ -0,0 +1,15 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scale.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scale;
+
+#line 111 "..\blib\lib\Tk\Scale.pm (autosplit into ..\blib\lib\auto\Tk\Scale\Leave.al)"
+sub Leave
+{
+ my ($w) = @_;
+ $w->configure('-activebackground',$w->{'activeBg'}) if ($Tk::strictMotif);
+ $w->configure('-state','normal') if ($w->cget('-state') eq 'active');
+}
+
+# end of Tk::Scale::Leave
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scale/Scale.dll b/Master/xemtex/perl/site/lib/auto/Tk/Scale/Scale.dll
new file mode 100644
index 00000000000..ff1568bcfe6
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scale/Scale.dll
Binary files differ
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scale/autosplit.ix b/Master/xemtex/perl/site/lib/auto/Tk/Scale/autosplit.ix
new file mode 100644
index 00000000000..a5c5d2292f2
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scale/autosplit.ix
@@ -0,0 +1,22 @@
+# Index created by AutoSplit for ..\blib\lib\Tk\Scale.pm
+# (file acts as timestamp)
+package Tk::Scale;
+sub Activate
+;
+sub Leave
+;
+sub Enter
+;
+sub ButtonUp
+;
+sub ButtonDown
+;
+sub Drag
+;
+sub EndDrag
+;
+sub Increment
+;
+sub ControlPress
+;
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ButtonDown.al b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ButtonDown.al
new file mode 100644
index 00000000000..c17199b73b6
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ButtonDown.al
@@ -0,0 +1,55 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 106 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\ButtonDown.al)"
+# tkScrollButtonDown --
+# This procedure is invoked when a button is pressed in a scrollbar.
+# It changes the way the scrollbar is displayed and takes actions
+# depending on where the mouse is.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - Mouse coordinates.
+
+sub ButtonDown
+{my $w = shift;
+ my $e = $w->XEvent;
+ my $element = $w->identify($e->x,$e->y);
+ $w->configure('-activerelief' => 'sunken');
+ if ($e->b == 1 and
+ (defined($element) && $element eq 'slider'))
+ {
+ $w->StartDrag($e->x,$e->y);
+ }
+ elsif ($e->b == 2 and
+ (defined($element) && $element =~ /^(trough[12]|slider)$/o))
+ {
+ my $pos = $w->fraction($e->x, $e->y);
+ my($head, $tail) = $w->get;
+ my $len = $tail - $head;
+
+ $head = $pos - $len/2;
+ $tail = $pos + $len/2;
+ if ($head < 0) {
+ $head = 0;
+ $tail = $len;
+ }
+ elsif ($tail > 1) {
+ $head = 1 - $len;
+ $tail = 1;
+ }
+ $w->ScrlToPos($head);
+ $w->set($head, $tail);
+
+ $w->StartDrag($e->x,$e->y);
+ }
+ else
+ {
+ $w->Select($element,'initial');
+ }
+}
+
+# end of Tk::Scrollbar::ButtonDown
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ButtonUp.al b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ButtonUp.al
new file mode 100644
index 00000000000..24058d857ec
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ButtonUp.al
@@ -0,0 +1,26 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 153 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\ButtonUp.al)"
+# tkScrollButtonUp --
+# This procedure is invoked when a button is released in a scrollbar.
+# It cancels scans and auto-repeats that were in progress, and restores
+# the way the active element is displayed.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - Mouse coordinates.
+
+sub ButtonUp
+{my $w = shift;
+ my $e = $w->XEvent;
+ $w->CancelRepeat;
+ $w->configure('-activerelief' => 'raised');
+ $w->EndDrag($e->x,$e->y);
+ $w->activate($w->identify($e->x,$e->y));
+}
+
+# end of Tk::Scrollbar::ButtonUp
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Drag.al b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Drag.al
new file mode 100644
index 00000000000..40d6b0f8d1b
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Drag.al
@@ -0,0 +1,44 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 247 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\Drag.al)"
+# tkScrollDrag --
+# This procedure is called for each mouse motion even when the slider
+# is being dragged. It notifies the associated widget if we're not
+# jump scrolling, and it just updates the scrollbar if we are jump
+# scrolling.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - The current mouse position.
+
+sub Drag
+{my $w = shift;
+ my $e = $w->XEvent;
+ return unless (defined $initMouse);
+ my $f = $w->fraction($e->x,$e->y);
+ my $delta = $f - $initMouse;
+ if ($w->cget('-jump'))
+ {
+ if (@initValues == 2)
+ {
+ $w->set($initValues[0]+$delta,$initValues[1]+$delta);
+ }
+ else
+ {
+ $delta = int($delta * $initValues[0]);
+ $initValues[2] += $delta;
+ $initValues[3] += $delta;
+ $w->set(@initValues);
+ }
+ }
+ else
+ {
+ $w->ScrlToPos($initPos+$delta);
+ }
+}
+
+# end of Tk::Scrollbar::Drag
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/EndDrag.al b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/EndDrag.al
new file mode 100644
index 00000000000..5b1fc837326
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/EndDrag.al
@@ -0,0 +1,29 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 283 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\EndDrag.al)"
+# tkScrollEndDrag --
+# This procedure is called to end an interactive drag of the slider.
+# It scrolls the window if we're in jump mode, otherwise it does nothing.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - The mouse position at the end of the drag operation.
+
+sub EndDrag
+{
+ my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ return unless defined($initMouse);
+ if ($w->cget('-jump'))
+ {
+ $w->ScrlToPos($initPos + $w->fraction($x,$y) - $initMouse);
+ }
+ undef $initMouse;
+}
+
+# end of Tk::Scrollbar::EndDrag
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Enter.al b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Enter.al
new file mode 100644
index 00000000000..45a21f920e5
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Enter.al
@@ -0,0 +1,21 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 76 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\Enter.al)"
+sub Enter
+{
+ my $w = shift;
+ my $e = $w->XEvent;
+ if ($Tk::strictMotif)
+ {
+ my $bg = $w->cget('-background');
+ $activeBg = $w->cget('-activebackground');
+ $w->configure('-activebackground' => $bg);
+ }
+ $w->activate($w->identify($e->x,$e->y));
+}
+
+# end of Tk::Scrollbar::Enter
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Leave.al b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Leave.al
new file mode 100644
index 00000000000..349911e304e
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Leave.al
@@ -0,0 +1,18 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 89 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\Leave.al)"
+sub Leave
+{
+ my $w = shift;
+ if ($Tk::strictMotif)
+ {
+ $w->configure('-activebackground' => $activeBg) if (defined $activeBg) ;
+ }
+ $w->activate('');
+}
+
+# end of Tk::Scrollbar::Leave
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Motion.al b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Motion.al
new file mode 100644
index 00000000000..0b414efa389
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Motion.al
@@ -0,0 +1,15 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 99 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\Motion.al)"
+sub Motion
+{
+ my $w = shift;
+ my $e = $w->XEvent;
+ $w->activate($w->identify($e->x,$e->y));
+}
+
+# end of Tk::Scrollbar::Motion
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ScrlByPages.al b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ScrlByPages.al
new file mode 100644
index 00000000000..bd3d29afa77
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ScrlByPages.al
@@ -0,0 +1,38 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 333 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\ScrlByPages.al)"
+# tkScrlByPages --
+# This procedure tells the scrollbar's associated widget to scroll up
+# or down by a given number of screenfuls. It notifies the associated
+# widget in different ways for old and new command syntaxes.
+#
+# Arguments:
+# w - The scrollbar widget.
+# orient - Which kinds of scrollbars this applies to: "h" for
+# horizontal, "v" for vertical, "hv" for both.
+# amount - How many screens to scroll: typically 1 or -1.
+
+sub ScrlByPages
+{
+ my $w = shift;
+ my $orient = shift;
+ my $amount = shift;
+ my $cmd = $w->cget('-command');
+ return unless (defined $cmd);
+ return if (index($orient,substr($w->cget('-orient'),0,1)) < 0);
+ my @info = $w->get;
+ if (@info == 2)
+ {
+ $cmd->Call('scroll',$amount,'pages');
+ }
+ else
+ {
+ $cmd->Call($info[2]+$amount*($info[1]-1));
+ }
+}
+
+# end of Tk::Scrollbar::ScrlByPages
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ScrlByUnits.al b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ScrlByUnits.al
new file mode 100644
index 00000000000..99e84e394c5
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ScrlByUnits.al
@@ -0,0 +1,37 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 304 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\ScrlByUnits.al)"
+# tkScrlByUnits --
+# This procedure tells the scrollbar's associated widget to scroll up
+# or down by a given number of units. It notifies the associated widget
+# in different ways for old and new command syntaxes.
+#
+# Arguments:
+# w - The scrollbar widget.
+# orient - Which kinds of scrollbars this applies to: "h" for
+# horizontal, "v" for vertical, "hv" for both.
+# amount - How many units to scroll: typically 1 or -1.
+
+sub ScrlByUnits
+{my $w = shift;
+ my $orient = shift;
+ my $amount = shift;
+ my $cmd = $w->cget('-command');
+ return unless (defined $cmd);
+ return if (index($orient,substr($w->cget('-orient'),0,1)) < 0);
+ my @info = $w->get;
+ if (@info == 2)
+ {
+ $cmd->Call('scroll',$amount,'units');
+ }
+ else
+ {
+ $cmd->Call($info[2]+$amount);
+ }
+}
+
+# end of Tk::Scrollbar::ScrlByUnits
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ScrlToPos.al b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ScrlToPos.al
new file mode 100644
index 00000000000..c3a25af3c19
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ScrlToPos.al
@@ -0,0 +1,35 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 363 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\ScrlToPos.al)"
+# tkScrlToPos --
+# This procedure tells the scrollbar's associated widget to scroll to
+# a particular location, given by a fraction between 0 and 1. It notifies
+# the associated widget in different ways for old and new command syntaxes.
+#
+# Arguments:
+# w - The scrollbar widget.
+# pos - A fraction between 0 and 1 indicating a desired position
+# in the document.
+
+sub ScrlToPos
+{
+ my $w = shift;
+ my $pos = shift;
+ my $cmd = $w->cget('-command');
+ return unless (defined $cmd);
+ my @info = $w->get;
+ if (@info == 2)
+ {
+ $cmd->Call('moveto',$pos);
+ }
+ else
+ {
+ $cmd->Call(int($info[0]*$pos));
+ }
+}
+
+# end of Tk::Scrollbar::ScrlToPos
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ScrlTopBottom.al b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ScrlTopBottom.al
new file mode 100644
index 00000000000..71be23e6794
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/ScrlTopBottom.al
@@ -0,0 +1,32 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 390 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\ScrlTopBottom.al)"
+# tkScrlTopBottom
+# Scroll to the top or bottom of the document, depending on the mouse
+# position.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - Mouse coordinates within the widget.
+
+sub ScrlTopBottom
+{
+ my $w = shift;
+ my $e = $w->XEvent;
+ my $element = $w->identify($e->x,$e->y);
+ return unless ($element);
+ if ($element =~ /1$/)
+ {
+ $w->ScrlToPos(0);
+ }
+ elsif ($element =~ /2$/)
+ {
+ $w->ScrlToPos(1);
+ }
+}
+
+1;
+# end of Tk::Scrollbar::ScrlTopBottom
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Scrollbar.dll b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Scrollbar.dll
new file mode 100644
index 00000000000..81eec672093
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Scrollbar.dll
Binary files differ
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Select.al b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Select.al
new file mode 100644
index 00000000000..21a743bf7fd
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/Select.al
@@ -0,0 +1,59 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 171 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\Select.al)"
+# tkScrollSelect --
+# This procedure is invoked when button 1 is pressed over the scrollbar.
+# It invokes one of several scrolling actions depending on where in
+# the scrollbar the button was pressed.
+#
+# Arguments:
+# w - The scrollbar widget.
+# element - The element of the scrollbar that was selected, such
+# as "arrow1" or "trough2". Shouldn't be "slider".
+# repeat - Whether and how to auto-repeat the action: "noRepeat"
+# means don't auto-repeat, "initial" means this is the
+# first action in an auto-repeat sequence, and "again"
+# means this is the second repetition or later.
+
+sub Select
+{
+ my $w = shift;
+ my $element = shift;
+ my $repeat = shift;
+ return unless defined ($element);
+ if ($element eq 'arrow1')
+ {
+ $w->ScrlByUnits('hv',-1);
+ }
+ elsif ($element eq 'trough1')
+ {
+ $w->ScrlByPages('hv',-1);
+ }
+ elsif ($element eq 'trough2')
+ {
+ $w->ScrlByPages('hv', 1);
+ }
+ elsif ($element eq 'arrow2')
+ {
+ $w->ScrlByUnits('hv', 1);
+ }
+ else
+ {
+ return;
+ }
+
+ if ($repeat eq 'again')
+ {
+ $w->RepeatId($w->after($w->cget('-repeatinterval'),['Select',$w,$element,'again']));
+ }
+ elsif ($repeat eq 'initial')
+ {
+ $w->RepeatId($w->after($w->cget('-repeatdelay'),['Select',$w,$element,'again']));
+ }
+}
+
+# end of Tk::Scrollbar::Select
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/StartDrag.al b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/StartDrag.al
new file mode 100644
index 00000000000..d544dc53945
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/StartDrag.al
@@ -0,0 +1,33 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 222 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\StartDrag.al)"
+# tkScrollStartDrag --
+# This procedure is called to initiate a drag of the slider. It just
+# remembers the starting position of the slider.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - The mouse position at the start of the drag operation.
+
+sub StartDrag
+{my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ return unless (defined ($w->cget('-command')));
+ $initMouse = $w->fraction($x,$y);
+ @initValues = $w->get();
+ if (@initValues == 2)
+ {
+ $initPos = $initValues[0];
+ }
+ else
+ {
+ $initPos = $initValues[2] / $initValues[0];
+ }
+}
+
+# end of Tk::Scrollbar::StartDrag
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/autosplit.ix b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/autosplit.ix
new file mode 100644
index 00000000000..293d1322dd4
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Scrollbar/autosplit.ix
@@ -0,0 +1,30 @@
+# Index created by AutoSplit for ..\blib\lib\Tk\Scrollbar.pm
+# (file acts as timestamp)
+package Tk::Scrollbar;
+sub Enter
+;
+sub Leave
+;
+sub Motion
+;
+sub ButtonDown
+;
+sub ButtonUp
+;
+sub Select
+;
+sub StartDrag
+;
+sub Drag
+;
+sub EndDrag
+;
+sub ScrlByUnits
+;
+sub ScrlByPages
+;
+sub ScrlToPos
+;
+sub ScrlTopBottom
+;
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Selection.al b/Master/xemtex/perl/site/lib/auto/Tk/Selection.al
new file mode 100644
index 00000000000..0d50a9f31df
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Selection.al
@@ -0,0 +1,18 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 628 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\Selection.al)"
+# These wrappers don't use method syntax so need to live
+# in same package as raw Tk routines are newXS'ed into.
+
+sub Selection
+{my $widget = shift;
+ my $cmd = shift;
+ croak 'Use SelectionOwn/SelectionOwner' if ($cmd eq 'own');
+ croak "Use Selection\u$cmd()";
+}
+
+# end of Tk::Selection
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Text/Text.dll b/Master/xemtex/perl/site/lib/auto/Tk/Text/Text.dll
new file mode 100644
index 00000000000..8cb98c8a455
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Text/Text.dll
Binary files differ
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Text/autosplit.ix b/Master/xemtex/perl/site/lib/auto/Tk/Text/autosplit.ix
new file mode 100644
index 00000000000..48a5455c34a
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Text/autosplit.ix
@@ -0,0 +1,3 @@
+# Index created by AutoSplit for ..\blib\lib\Tk\Text.pm
+# (file acts as timestamp)
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Tk.dll b/Master/xemtex/perl/site/lib/auto/Tk/Tk.dll
new file mode 100644
index 00000000000..ee55846fdcb
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Tk.dll
Binary files differ
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_BindIn.al b/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_BindIn.al
new file mode 100644
index 00000000000..cc2ceaf7b63
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_BindIn.al
@@ -0,0 +1,19 @@
+# NOTE: Derived from blib\lib\Tk/Toplevel.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Toplevel;
+
+#line 128 "blib\lib\Tk/Toplevel.pm (autosplit into blib\lib\auto\Tk\Toplevel\FG_BindIn.al)"
+# tkFocusGroup_BindIn --
+#
+# Add a widget into the "FocusIn" list of the focus group. The $cmd will be
+# called when the widget is focused on by the user.
+#
+sub FG_BindIn {
+ my($t, $w, $cmd) = @_;
+ $t->Error("focus group \"$t\" doesn't exist") unless (exists $t->{'_fg'});
+ $t->{'_FocusIn'}{$w} = Tk::Callback->new($cmd);
+}
+
+# end of Tk::Toplevel::FG_BindIn
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_BindOut.al b/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_BindOut.al
new file mode 100644
index 00000000000..5c5cf9cc3de
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_BindOut.al
@@ -0,0 +1,20 @@
+# NOTE: Derived from blib\lib\Tk/Toplevel.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Toplevel;
+
+#line 139 "blib\lib\Tk/Toplevel.pm (autosplit into blib\lib\auto\Tk\Toplevel\FG_BindOut.al)"
+# tkFocusGroup_BindOut --
+#
+# Add a widget into the "FocusOut" list of the focus group. The
+# $cmd will be called when the widget loses the focus (User
+# types Tab or click on another widget).
+#
+sub FG_BindOut {
+ my($t, $w, $cmd) = @_;
+ $t->Error("focus group \"$t\" doesn't exist") unless (exists $t->{'_fg'});
+ $t->{'_FocusOut'}{$w} = Tk::Callback->new($cmd);
+}
+
+# end of Tk::Toplevel::FG_BindOut
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_Create.al b/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_Create.al
new file mode 100644
index 00000000000..0953c045be8
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_Create.al
@@ -0,0 +1,56 @@
+# NOTE: Derived from blib\lib\Tk/Toplevel.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Toplevel;
+
+#line 80 "blib\lib\Tk/Toplevel.pm (autosplit into blib\lib\auto\Tk\Toplevel\FG_Create.al)"
+#----------------------------------------------------------------------
+#
+# Focus Group
+#
+# Focus groups are used to handle the user's focusing actions inside a
+# toplevel.
+#
+# One example of using focus groups is: when the user focuses on an
+# entry, the text in the entry is highlighted and the cursor is put to
+# the end of the text. When the user changes focus to another widget,
+# the text in the previously focused entry is validated.
+#
+
+#----------------------------------------------------------------------
+# tkFocusGroup_Create --
+#
+# Create a focus group. All the widgets in a focus group must be
+# within the same focus toplevel. Each toplevel can have only
+# one focus group, which is identified by the name of the
+# toplevel widget.
+#
+sub FG_Create {
+ my $t = shift;
+ unless (exists $t->{'_fg'}) {
+ $t->{'_fg'} = 1;
+ $t->bind('<FocusIn>', sub {
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $t->FG_In($w, $Ev->d);
+ }
+ );
+ $t->bind('<FocusOut>', sub {
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $t->FG_Out($w, $Ev->d);
+ }
+ );
+ $t->bind('<Destroy>', sub {
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $t->FG_Destroy($w);
+ }
+ );
+ # <Destroy> is not sufficient to break loops if never mapped.
+ $t->OnDestroy([$t,'FG_Destroy']);
+ }
+}
+
+# end of Tk::Toplevel::FG_Create
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_Destroy.al b/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_Destroy.al
new file mode 100644
index 00000000000..e20f1eb7568
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_Destroy.al
@@ -0,0 +1,29 @@
+# NOTE: Derived from blib\lib\Tk/Toplevel.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Toplevel;
+
+#line 151 "blib\lib\Tk/Toplevel.pm (autosplit into blib\lib\auto\Tk\Toplevel\FG_Destroy.al)"
+# tkFocusGroup_Destroy --
+#
+# Cleans up when members of the focus group is deleted, or when the
+# toplevel itself gets deleted.
+#
+sub FG_Destroy {
+ my($t, $w) = @_;
+ if (!defined($w) || $t == $w) {
+ delete $t->{'_fg'};
+ delete $t->{'_focus'};
+ delete $t->{'_FocusOut'};
+ delete $t->{'_FocusIn'};
+ } else {
+ if (exists $t->{'_focus'}) {
+ delete $t->{'_focus'} if ($t->{'_focus'} == $w);
+ }
+ delete $t->{'_FocusIn'}{$w};
+ delete $t->{'_FocusOut'}{$w};
+ }
+}
+
+# end of Tk::Toplevel::FG_Destroy
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_In.al b/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_In.al
new file mode 100644
index 00000000000..a4b5c67a155
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_In.al
@@ -0,0 +1,24 @@
+# NOTE: Derived from blib\lib\Tk/Toplevel.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Toplevel;
+
+#line 172 "blib\lib\Tk/Toplevel.pm (autosplit into blib\lib\auto\Tk\Toplevel\FG_In.al)"
+# tkFocusGroup_In --
+#
+# Handles the <FocusIn> event. Calls the FocusIn command for the newly
+# focused widget in the focus group.
+#
+sub FG_In {
+ my($t, $w, $detail) = @_;
+ if (defined $t->{'_focus'} and $t->{'_focus'} eq $w) {
+ # This is already in focus
+ return;
+ } else {
+ $t->{'_focus'} = $w;
+ $t->{'_FocusIn'}{$w}->Call if exists $t->{'_FocusIn'}{$w};
+ }
+}
+
+# end of Tk::Toplevel::FG_In
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_Out.al b/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_Out.al
new file mode 100644
index 00000000000..96a3841e6fd
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/FG_Out.al
@@ -0,0 +1,32 @@
+# NOTE: Derived from blib\lib\Tk/Toplevel.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Toplevel;
+
+#line 188 "blib\lib\Tk/Toplevel.pm (autosplit into blib\lib\auto\Tk\Toplevel\FG_Out.al)"
+# tkFocusGroup_Out --
+#
+# Handles the <FocusOut> event. Checks if this is really a lose
+# focus event, not one generated by the mouse moving out of the
+# toplevel window. Calls the FocusOut command for the widget
+# who loses its focus.
+#
+sub FG_Out {
+ my($t, $w, $detail) = @_;
+ if ($detail ne 'NotifyNonlinear' and $detail ne 'NotifyNonlinearVirtual') {
+ # This is caused by mouse moving out of the window
+ return;
+ }
+ unless (exists $t->{'_FocusOut'}{$w}) {
+ return;
+ } else {
+ $t->{'_FocusOut'}{$w}->Call;
+ delete $t->{'_focus'};
+ }
+}
+
+1;
+
+__END__
+1;
+# end of Tk::Toplevel::FG_Out
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/autosplit.ix b/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/autosplit.ix
new file mode 100644
index 00000000000..6267c58604c
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Toplevel/autosplit.ix
@@ -0,0 +1,10 @@
+# Index created by AutoSplit for blib\lib\Tk/Toplevel.pm
+# (file acts as timestamp)
+package Tk::Toplevel;
+sub FG_Create ;
+sub FG_BindIn ;
+sub FG_BindOut ;
+sub FG_Destroy ;
+sub FG_In ;
+sub FG_Out ;
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/TraverseToMenu.al b/Master/xemtex/perl/site/lib/auto/Tk/TraverseToMenu.al
new file mode 100644
index 00000000000..03b814a1334
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/TraverseToMenu.al
@@ -0,0 +1,27 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 597 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\TraverseToMenu.al)"
+# tkTraverseToMenu --
+# This procedure implements keyboard traversal of menus. Given an
+# ASCII character "char", it looks for a menubutton with that character
+# underlined. If one is found, it posts the menubutton's menu
+#
+# Arguments:
+# w - Window in which the key was typed (selects
+# a toplevel window).
+# char - Character that selects a menu. The case
+# is ignored. If an empty string, nothing
+# happens.
+sub TraverseToMenu
+{
+ my $w = shift;
+ my $char = shift;
+ return unless(defined $char && $char ne '');
+ $w = $w->toplevel->FindMenu($char);
+}
+
+# end of Tk::TraverseToMenu
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Widget/ASkludge.al b/Master/xemtex/perl/site/lib/auto/Tk/Widget/ASkludge.al
new file mode 100644
index 00000000000..fe9b23df886
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Widget/ASkludge.al
@@ -0,0 +1,30 @@
+# NOTE: Derived from blib\lib\Tk/Widget.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Widget;
+
+#line 1224 "blib\lib\Tk/Widget.pm (autosplit into blib\lib\auto\Tk\Widget\ASkludge.al)"
+sub ASkludge
+{
+ my ($hash,$sense) = @_;
+ foreach my $key (%$hash)
+ {
+ if ($key =~ /-.*variable/ && ref($hash->{$key}) eq 'SCALAR')
+ {
+ if ($sense)
+ {
+ my $val = ${$hash->{$key}};
+ require Tie::Scalar;
+ tie ${$hash->{$key}},'Tie::StdScalar';
+ ${$hash->{$key}} = $val;
+ }
+ else
+ {
+ untie ${$hash->{$key}};
+ }
+ }
+ }
+}
+
+# end of Tk::Widget::ASkludge
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Widget/autosplit.ix b/Master/xemtex/perl/site/lib/auto/Tk/Widget/autosplit.ix
new file mode 100644
index 00000000000..f0a7ffb9891
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Widget/autosplit.ix
@@ -0,0 +1,10 @@
+# Index created by AutoSplit for blib\lib\Tk/Widget.pm
+# (file acts as timestamp)
+package Tk::Widget;
+sub ASkludge
+;
+sub clipboardKeysyms
+;
+sub pathname
+;
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Widget/clipboardKeysyms.al b/Master/xemtex/perl/site/lib/auto/Tk/Widget/clipboardKeysyms.al
new file mode 100644
index 00000000000..71996befb5f
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Widget/clipboardKeysyms.al
@@ -0,0 +1,51 @@
+# NOTE: Derived from blib\lib\Tk/Widget.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Widget;
+
+#line 1248 "blib\lib\Tk/Widget.pm (autosplit into blib\lib\auto\Tk\Widget\clipboardKeysyms.al)"
+# clipboardKeysyms --
+# This procedure is invoked to identify the keys that correspond to
+# the "copy", "cut", and "paste" functions for the clipboard.
+#
+# Arguments:
+# copy - Name of the key (keysym name plus modifiers, if any,
+# such as "Meta-y") used for the copy operation.
+# cut - Name of the key used for the cut operation.
+# paste - Name of the key used for the paste operation.
+#
+# This method is obsolete use clipboardOperations and abstract
+# event types instead. See Clipboard.pm and Mainwindow.pm
+
+sub clipboardKeysyms
+{
+ my @class = ();
+ my $mw = shift;
+ if (ref $mw)
+ {
+ $mw = $mw->DelegateFor('bind');
+ }
+ else
+ {
+ push(@class,$mw);
+ $mw = shift;
+ }
+ if (@_)
+ {
+ my $copy = shift;
+ $mw->Tk::bind(@class,"<$copy>",'clipboardCopy') if (defined $copy);
+ }
+ if (@_)
+ {
+ my $cut = shift;
+ $mw->Tk::bind(@class,"<$cut>",'clipboardCut') if (defined $cut);
+ }
+ if (@_)
+ {
+ my $paste = shift;
+ $mw->Tk::bind(@class,"<$paste>",'clipboardPaste') if (defined $paste);
+ }
+}
+
+# end of Tk::Widget::clipboardKeysyms
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Widget/pathname.al b/Master/xemtex/perl/site/lib/auto/Tk/Widget/pathname.al
new file mode 100644
index 00000000000..e22439a73cd
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Widget/pathname.al
@@ -0,0 +1,15 @@
+# NOTE: Derived from blib\lib\Tk/Widget.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Widget;
+
+#line 1291 "blib\lib\Tk/Widget.pm (autosplit into blib\lib\auto\Tk\Widget\pathname.al)"
+sub pathname
+{
+ my ($w,$id) = @_;
+ my $x = $w->winfo('pathname',-displayof => oct($id));
+ return $x->PathName;
+}
+
+1;
+# end of Tk::Widget::pathname
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Wm/AnchorAdjust.al b/Master/xemtex/perl/site/lib/auto/Tk/Wm/AnchorAdjust.al
new file mode 100644
index 00000000000..a699cee6920
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Wm/AnchorAdjust.al
@@ -0,0 +1,17 @@
+# NOTE: Derived from blib\lib\Tk/Wm.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Wm;
+
+#line 84 "blib\lib\Tk/Wm.pm (autosplit into blib\lib\auto\Tk\Wm\AnchorAdjust.al)"
+sub AnchorAdjust
+{
+ my ($anchor,$X,$Y,$w,$h) = @_;
+ $anchor = 'c' unless (defined $anchor);
+ $Y += ($anchor =~ /s/) ? $h : ($anchor =~ /n/) ? 0 : $h/2;
+ $X += ($anchor =~ /e/) ? $w : ($anchor =~ /w/) ? 0 : $w/2;
+ return ($X,$Y);
+}
+
+# end of Tk::Wm::AnchorAdjust
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Wm/FullScreen.al b/Master/xemtex/perl/site/lib/auto/Tk/Wm/FullScreen.al
new file mode 100644
index 00000000000..83ab7a3241c
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Wm/FullScreen.al
@@ -0,0 +1,29 @@
+# NOTE: Derived from blib\lib\Tk/Wm.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Wm;
+
+#line 130 "blib\lib\Tk/Wm.pm (autosplit into blib\lib\auto\Tk\Wm\FullScreen.al)"
+sub FullScreen
+{
+ my $w = shift;
+ my $over = (@_) ? shift : 0;
+ my $width = $w->screenwidth;
+ my $height = $w->screenheight;
+ $w->GeometryRequest($width,$height);
+ $w->overrideredirect($over & 1);
+ $w->Post(0,0);
+ $w->update;
+ if ($over & 2)
+ {
+ my $x = $w->rootx;
+ my $y = $w->rooty;
+ $width -= 2*$x;
+ $height -= $x + $y;
+ $w->GeometryRequest($width,$height);
+ $w->update;
+ }
+}
+
+# end of Tk::Wm::FullScreen
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Wm/Popup.al b/Master/xemtex/perl/site/lib/auto/Tk/Wm/Popup.al
new file mode 100644
index 00000000000..59a6f496d53
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Wm/Popup.al
@@ -0,0 +1,45 @@
+# NOTE: Derived from blib\lib\Tk/Wm.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Wm;
+
+#line 93 "blib\lib\Tk/Wm.pm (autosplit into blib\lib\auto\Tk\Wm\Popup.al)"
+sub Popup
+{
+ my $w = shift;
+ $w->configure(@_) if @_;
+ $w->idletasks;
+ my ($mw,$mh) = ($w->reqwidth,$w->reqheight);
+ my ($rx,$ry,$rw,$rh) = (0,0,0,0);
+ my $base = $w->cget('-popover');
+ my $outside = 0;
+ if (defined $base)
+ {
+ if ($base eq 'cursor')
+ {
+ ($rx,$ry) = $w->pointerxy;
+ }
+ else
+ {
+ $rx = $base->rootx;
+ $ry = $base->rooty;
+ $rw = $base->Width;
+ $rh = $base->Height;
+ }
+ }
+ else
+ {
+ my $sc = ($w->parent) ? $w->parent->toplevel : $w;
+ $rx = -$sc->vrootx;
+ $ry = -$sc->vrooty;
+ $rw = $w->screenwidth;
+ $rh = $w->screenheight;
+ }
+ my ($X,$Y) = AnchorAdjust($w->cget('-overanchor'),$rx,$ry,$rw,$rh);
+ ($X,$Y) = AnchorAdjust($w->cget('-popanchor'),$X,$Y,-$mw,-$mh);
+ $w->Post($X,$Y);
+ $w->waitVisibility;
+}
+
+# end of Tk::Wm::Popup
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Wm/Post.al b/Master/xemtex/perl/site/lib/auto/Tk/Wm/Post.al
new file mode 100644
index 00000000000..277981329b0
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Wm/Post.al
@@ -0,0 +1,20 @@
+# NOTE: Derived from blib\lib\Tk/Wm.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Wm;
+
+#line 72 "blib\lib\Tk/Wm.pm (autosplit into blib\lib\auto\Tk\Wm\Post.al)"
+sub Post
+{
+ my ($w,$X,$Y) = @_;
+ $X = int($X);
+ $Y = int($Y);
+ $w->positionfrom('user');
+ # $w->geometry("+$X+$Y");
+ $w->MoveToplevelWindow($X,$Y);
+ $w->deiconify;
+ $w->raise;
+}
+
+# end of Tk::Wm::Post
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Wm/autosplit.ix b/Master/xemtex/perl/site/lib/auto/Tk/Wm/autosplit.ix
new file mode 100644
index 00000000000..54b764985de
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Wm/autosplit.ix
@@ -0,0 +1,14 @@
+# Index created by AutoSplit for blib\lib\Tk/Wm.pm
+# (file acts as timestamp)
+package Tk::Wm;
+sub Post
+;
+sub AnchorAdjust
+;
+sub Popup
+;
+sub FullScreen
+;
+sub iconposition
+;
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/Wm/iconposition.al b/Master/xemtex/perl/site/lib/auto/Tk/Wm/iconposition.al
new file mode 100644
index 00000000000..6a5b0ec92d8
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/Wm/iconposition.al
@@ -0,0 +1,24 @@
+# NOTE: Derived from blib\lib\Tk/Wm.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Wm;
+
+#line 151 "blib\lib\Tk/Wm.pm (autosplit into blib\lib\auto\Tk\Wm\iconposition.al)"
+sub iconposition
+{
+ my $w = shift;
+ if (@_ == 1)
+ {
+ return $w->wm('iconposition',$1,$2) if $_[0] =~ /^(\d+),(\d+)$/;
+ if ($_[0] =~ /^([+-])(\d+)([+-])(\d+)$/)
+ {
+ my $x = ($1 eq '-') ? $w->screenwidth-$2 : $2;
+ my $y = ($3 eq '-') ? $w->screenheight-$4 : $4;
+ return $w->wm('iconposition',$x,$y);
+ }
+ }
+ $w->wm('iconposition',@_);
+}
+
+1;
+# end of Tk::Wm::iconposition
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/X/X.dll b/Master/xemtex/perl/site/lib/auto/Tk/X/X.dll
new file mode 100644
index 00000000000..81c220688ae
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/X/X.dll
Binary files differ
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/X/autosplit.ix b/Master/xemtex/perl/site/lib/auto/Tk/X/autosplit.ix
new file mode 100644
index 00000000000..e63dbf19b00
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/X/autosplit.ix
@@ -0,0 +1,3 @@
+# Index created by AutoSplit for ..\..\blib\lib\Tk\X.pm
+# (file acts as timestamp)
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/autosplit.ix b/Master/xemtex/perl/site/lib/auto/Tk/autosplit.ix
new file mode 100644
index 00000000000..8e8d2880a02
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/autosplit.ix
@@ -0,0 +1,43 @@
+# Index created by AutoSplit for blib\lib\Tk.pm
+# (file acts as timestamp)
+package Tk;
+sub Error
+;
+sub CancelRepeat
+;
+sub RepeatId
+;
+sub FocusChildren ;
+sub focusNext
+;
+sub focusPrev
+;
+sub FocusOK
+;
+sub EnterFocus
+;
+sub tabFocus
+;
+sub focusFollowsMouse
+;
+sub TraverseToMenu
+;
+sub FirstMenu
+;
+sub Selection
+;
+sub Receive
+;
+sub break
+;
+sub updateWidgets
+;
+sub ImageNames
+;
+sub ImageTypes
+;
+sub interps
+;
+sub lsearch
+;
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/break.al b/Master/xemtex/perl/site/lib/auto/Tk/break.al
new file mode 100644
index 00000000000..388cd46b21b
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/break.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 653 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\break.al)"
+sub break
+{
+ die "_TK_BREAK_\n";
+}
+
+# end of Tk::break
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/focusFollowsMouse.al b/Master/xemtex/perl/site/lib/auto/Tk/focusFollowsMouse.al
new file mode 100644
index 00000000000..697e8c61fae
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/focusFollowsMouse.al
@@ -0,0 +1,14 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 591 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\focusFollowsMouse.al)"
+sub focusFollowsMouse
+{
+ my $widget = shift;
+ $widget->bind('all','<Enter>','EnterFocus');
+}
+
+# end of Tk::focusFollowsMouse
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/focusNext.al b/Master/xemtex/perl/site/lib/auto/Tk/focusNext.al
new file mode 100644
index 00000000000..b5dbc9bc7d6
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/focusNext.al
@@ -0,0 +1,45 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 449 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\focusNext.al)"
+sub focusNext
+{
+ my $w = shift;
+ my $cur = $w;
+ while (1)
+ {
+ # Descend to just before the first child of the current widget.
+ my $parent = $cur;
+ my @children = $cur->FocusChildren();
+ my $i = -1;
+ # Look for the next sibling that isn't a top-level.
+ while (1)
+ {
+ $i += 1;
+ if ($i < @children)
+ {
+ $cur = $children[$i];
+ next if ($cur->toplevel == $cur);
+ last
+ }
+ # No more siblings, so go to the current widget's parent.
+ # If it's a top-level, break out of the loop, otherwise
+ # look for its next sibling.
+ $cur = $parent;
+ last if ($cur->toplevel() == $cur);
+ $parent = $parent->parent();
+ @children = $parent->FocusChildren();
+ $i = lsearch(\@children,$cur);
+ }
+ if ($cur == $w || $cur->FocusOK)
+ {
+ $cur->tabFocus;
+ return;
+ }
+ }
+}
+
+# end of Tk::focusNext
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/focusPrev.al b/Master/xemtex/perl/site/lib/auto/Tk/focusPrev.al
new file mode 100644
index 00000000000..77aadf1b929
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/focusPrev.al
@@ -0,0 +1,65 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 485 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\focusPrev.al)"
+# focusPrev --
+# This procedure is invoked to move the input focus to the previous
+# window before a given one. "Previous" is defined in terms of the
+# window stacking order, with all the windows underneath a given
+# top-level (no matter how deeply nested in the hierarchy) considered.
+#
+# Arguments:
+# w - Name of a window: the procedure will set the focus
+# to the previous window before this one in the traversal
+# order.
+sub focusPrev
+{
+ my $w = shift;
+ my $cur = $w;
+ my @children;
+ my $i;
+ my $parent;
+ while (1)
+ {
+ # Collect information about the current window's position
+ # among its siblings. Also, if the window is a top-level,
+ # then reposition to just after the last child of the window.
+ if ($cur->toplevel() == $cur)
+ {
+ $parent = $cur;
+ @children = $cur->FocusChildren();
+ $i = @children;
+ }
+ else
+ {
+ $parent = $cur->parent();
+ @children = $parent->FocusChildren();
+ $i = lsearch(\@children,$cur);
+ }
+ # Go to the previous sibling, then descend to its last descendant
+ # (highest in stacking order. While doing this, ignore top-levels
+ # and their descendants. When we run out of descendants, go up
+ # one level to the parent.
+ while ($i > 0)
+ {
+ $i--;
+ $cur = $children[$i];
+ next if ($cur->toplevel() == $cur);
+ $parent = $cur;
+ @children = $parent->FocusChildren();
+ $i = @children;
+ }
+ $cur = $parent;
+ if ($cur == $w || $cur->FocusOK)
+ {
+ $cur->tabFocus;
+ return;
+ }
+ }
+
+}
+
+# end of Tk::focusPrev
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/interps.al b/Master/xemtex/perl/site/lib/auto/Tk/interps.al
new file mode 100644
index 00000000000..fe01aa3099f
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/interps.al
@@ -0,0 +1,14 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 677 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\interps.al)"
+sub interps
+{
+ my $w = shift;
+ return $w->winfo('interps','-displayof');
+}
+
+# end of Tk::interps
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/lsearch.al b/Master/xemtex/perl/site/lib/auto/Tk/lsearch.al
new file mode 100644
index 00000000000..7a597051bec
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/lsearch.al
@@ -0,0 +1,19 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 683 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\lsearch.al)"
+sub lsearch
+{my $ar = shift;
+ my $x = shift;
+ my $i;
+ for ($i = 0; $i < scalar @$ar; $i++)
+ {
+ return $i if ($$ar[$i] eq $x);
+ }
+ return -1;
+}
+
+1;
+# end of Tk::lsearch
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/tabFocus.al b/Master/xemtex/perl/site/lib/auto/Tk/tabFocus.al
new file mode 100644
index 00000000000..4016abff331
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/tabFocus.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 586 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\tabFocus.al)"
+sub tabFocus
+{
+ shift->Tk::focus;
+}
+
+# end of Tk::tabFocus
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Tk/updateWidgets.al b/Master/xemtex/perl/site/lib/auto/Tk/updateWidgets.al
new file mode 100644
index 00000000000..0fec5abb3c8
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Tk/updateWidgets.al
@@ -0,0 +1,17 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 658 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\updateWidgets.al)"
+sub updateWidgets
+{
+ my ($w) = @_;
+ while ($w->DoOneEvent(DONT_WAIT|IDLE_EVENTS|WINDOW_EVENTS))
+ {
+ }
+ $w;
+}
+
+# end of Tk::updateWidgets
+1;
diff --git a/Master/xemtex/perl/site/lib/auto/Win32/API/API.dll b/Master/xemtex/perl/site/lib/auto/Win32/API/API.dll
new file mode 100644
index 00000000000..4c478dc3136
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/Win32/API/API.dll
Binary files differ
diff --git a/Master/xemtex/perl/site/lib/auto/XML/Parser/Expat/Expat.dll b/Master/xemtex/perl/site/lib/auto/XML/Parser/Expat/Expat.dll
new file mode 100644
index 00000000000..be327d38a47
--- /dev/null
+++ b/Master/xemtex/perl/site/lib/auto/XML/Parser/Expat/Expat.dll
Binary files differ